From 7bd13e90c1eb3b85d90aa833f8d328897363e414 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Czulak?= Date: Sun, 13 Oct 2019 11:21:37 +0200 Subject: [PATCH 01/70] Change port in localhost --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ddca52307..cc4f31b44 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ When completed, you'll be able to run the various commands provided from the com ## Build locally 1. From the root `/tabler` directory, run `npm run start` in the command line. -2. Open [http://localhost:4000](http://localhost:4000) in your browser, and voilà. +2. Open [http://localhost:3000](http://localhost:3000) in your browser, and voilà. 3. Any change in `/pages` directory will build application and refresh the page. **Note**: From 6ac13bd7cdd06064bc0c4878e9105fa865ec64da Mon Sep 17 00:00:00 2001 From: codecalm Date: Thu, 17 Oct 2019 20:48:28 +0200 Subject: [PATCH 02/70] btn small fix --- scss/ui/_buttons.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scss/ui/_buttons.scss b/scss/ui/_buttons.scss index 45b3c56d7..dbf4e41d8 100644 --- a/scss/ui/_buttons.scss +++ b/scss/ui/_buttons.scss @@ -31,6 +31,10 @@ } } +.btn-sm { + font-weight: 400; +} + .btn-avatar { margin: 0 .25rem 0 -.25rem; From bee4325df8a0b8156763d73014b3936c022e7bed Mon Sep 17 00:00:00 2001 From: codecalm Date: Thu, 17 Oct 2019 21:46:06 +0200 Subject: [PATCH 03/70] page buttons side --- pages/_includes/layout/page-title.html | 48 ++++++++------------------ pages/_layouts/default.html | 7 ++-- pages/snippets.html | 2 +- scss/_variables.scss | 2 +- scss/layout/_navbar.scss | 2 +- scss/layout/_page.scss | 15 ++++---- scss/tabler.scss | 1 - scss/ui/_typo.scss | 43 +++++++++++++++++++++++ scss/utils/_text.scss | 39 --------------------- 9 files changed, 71 insertions(+), 88 deletions(-) diff --git a/pages/_includes/layout/page-title.html b/pages/_includes/layout/page-title.html index 6fe9009e1..230410102 100644 --- a/pages/_includes/layout/page-title.html +++ b/pages/_includes/layout/page-title.html @@ -1,39 +1,19 @@ {% if page.page-title or layout.page-title %}
-

- {{ page.page-title | default: layout.page-title }} -

- {% if page.page-right %} -
- - {% if page.page-right == "date" %} -
- - - {% include ui/icon.html icon="refresh-ccw" %} - - - {% include ui/icon.html icon="filter" %} - -
- {% elsif page.page-right == "breadcrumb" %} - - {% endif %} -
- {% endif %} +
+
+
+ Overview +
+

+ {{ page.page-title | default: layout.page-title }} +

+
+
+ {% include ui/button.html text="New view" color="secondary" icon="plus" %} + {% include ui/button.html text="Create new report" color="primary" class="ml-3" %} +
+
{% endif %} diff --git a/pages/_layouts/default.html b/pages/_layouts/default.html index 2b8ea136b..fef2577b7 100644 --- a/pages/_layouts/default.html +++ b/pages/_layouts/default.html @@ -3,13 +3,16 @@ layout: base ---
- {% comment %} + {% if page.nav-position == 'left' or page.nav-position == 'right'%} {% include layout/sidenav.html dark=page.sidenav-dark folded=page.sidenav-folded fixed=true %} - {% endcomment %} + {% endif %}
{% include layout/topnav.html dark=page.header-dark sticky=page.header-sticky %} + + {% unless page.nav-position == 'left' or page.nav-position == 'right'%} {% include layout/topmenu.html %} + {% endunless %}
{% include layout/page-title.html %} diff --git a/pages/snippets.html b/pages/snippets.html index 4825f1ece..1eb0cff78 100644 --- a/pages/snippets.html +++ b/pages/snippets.html @@ -1,7 +1,7 @@ --- title: Snippets page-title: Snippets -page-right: date +page-title-right: date ---
diff --git a/scss/_variables.scss b/scss/_variables.scss index 01036bd1a..cecc97b9b 100644 --- a/scss/_variables.scss +++ b/scss/_variables.scss @@ -42,7 +42,7 @@ $black: #000000 !default; $white: #ffffff !default; $light: #f5f7fb !default; -$dark: #495057 !default; +$dark: #354052 !default; $body-bg: $light !default; $body-color: $dark !default; diff --git a/scss/layout/_navbar.scss b/scss/layout/_navbar.scss index 9a9f4ef3c..e1108abce 100644 --- a/scss/layout/_navbar.scss +++ b/scss/layout/_navbar.scss @@ -193,7 +193,7 @@ Sidebar } .navbar-heading { - @extend .text-subheader; + @extend .subheader; margin: 0 0 .5rem; } diff --git a/scss/layout/_page.scss b/scss/layout/_page.scss index 2582db5e4..51b806ada 100644 --- a/scss/layout/_page.scss +++ b/scss/layout/_page.scss @@ -1,19 +1,16 @@ .page-title-box { - display: flex; - align-items: center; min-height: 2.5rem; - margin: .5rem 0 1.5rem; + margin: .75rem 0 2rem; +} + +.page-pretitle { + @extend .subheader; } .page-title { margin: 0; font-size: $h2-font-size; font-weight: 400; - line-height: 2.5rem; color: $body-color; -} - -.page-title-options { - margin-left: auto; - color: $text-muted; + line-height: 1; } diff --git a/scss/tabler.scss b/scss/tabler.scss index a5708d1bd..592d6c9b2 100644 --- a/scss/tabler.scss +++ b/scss/tabler.scss @@ -57,7 +57,6 @@ @import "utils/background"; @import "utils/colors"; @import "utils/scroll"; -@import "utils/text"; @import "utils/sizing"; @import "utils/opacity"; @import "utils/shadow"; diff --git a/scss/ui/_typo.scss b/scss/ui/_typo.scss index 3b28d4c8b..5757f14df 100644 --- a/scss/ui/_typo.scss +++ b/scss/ui/_typo.scss @@ -91,3 +91,46 @@ Selection color: #fff; background-color: lighten($primary, 8%); } + + +/** +Subheader + */ +.subheader { + font-size: $h6-font-size; + font-weight: 600; + color: $text-muted; + text-transform: uppercase; + letter-spacing: .04em; +} + +/** +Antialiasing + */ +.antialiased { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.subpixel-antialiased { + -webkit-font-smoothing: auto; + -moz-osx-font-smoothing: auto; +} + +/** +Markdown + */ +.markdown { + + > :first-child { + margin-top: 0; + } + + > :last-child { + margin-bottom: 0; + } + + table { + @extend .table, .table-bordered; + } +} diff --git a/scss/utils/_text.scss b/scss/utils/_text.scss index ee8475eaf..59eb4f098 100644 --- a/scss/utils/_text.scss +++ b/scss/utils/_text.scss @@ -1,40 +1 @@ // stylelint-disable declaration-no-important - -.text-subheader { - font-size: $h6-font-size; - font-weight: 600; - color: $text-muted; - text-transform: uppercase; - letter-spacing: .04em; -} - -/** -Antialiasing - */ -.antialiased { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.subpixel-antialiased { - -webkit-font-smoothing: auto; - -moz-osx-font-smoothing: auto; -} - -/** -Markdown - */ -.markdown { - - > :first-child { - margin-top: 0; - } - - > :last-child { - margin-bottom: 0; - } - - table { - @extend .table, .table-bordered; - } -} From a54344d1559fac040376ce69bfd13c1f40f0b70f Mon Sep 17 00:00:00 2001 From: codecalm Date: Thu, 17 Oct 2019 21:59:39 +0200 Subject: [PATCH 04/70] buttons wariants --- pages/_includes/layout/page-title.html | 4 +++- scss/_variables.scss | 2 +- scss/layout/_page.scss | 2 +- scss/ui/_buttons.scss | 7 +------ 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/pages/_includes/layout/page-title.html b/pages/_includes/layout/page-title.html index 230410102..c10eb04de 100644 --- a/pages/_includes/layout/page-title.html +++ b/pages/_includes/layout/page-title.html @@ -11,7 +11,9 @@
- {% include ui/button.html text="New view" color="secondary" icon="plus" %} + + {% include ui/button.html text="New view" color="secondary" icon="plus" %} + {% include ui/button.html text="Create new report" color="primary" class="ml-3" %}
diff --git a/scss/_variables.scss b/scss/_variables.scss index cecc97b9b..c0044ba45 100644 --- a/scss/_variables.scss +++ b/scss/_variables.scss @@ -219,7 +219,7 @@ $input-height-sm: null !default; $input-height-lg: null !default; $btn-padding-x: 1rem !default; -$btn-font-weight: 600 !default; +$btn-font-weight: 500 !default; $btn-border-radius: 3px !default; //cards diff --git a/scss/layout/_page.scss b/scss/layout/_page.scss index 51b806ada..6d16e30cc 100644 --- a/scss/layout/_page.scss +++ b/scss/layout/_page.scss @@ -1,6 +1,6 @@ .page-title-box { min-height: 2.5rem; - margin: .75rem 0 2rem; + margin: .25rem 0 1.5rem; } .page-pretitle { diff --git a/scss/ui/_buttons.scss b/scss/ui/_buttons.scss index dbf4e41d8..8a9218ecb 100644 --- a/scss/ui/_buttons.scss +++ b/scss/ui/_buttons.scss @@ -56,12 +56,7 @@ } .btn-secondary { - @include button-variant(transparent, $border-color, #fff, $border-color); - color: $text-muted; - - &:hover { - color: $text-muted; - } + @include button-variant(#fff, $border-color, $text-muted); } .btn-square { From 202c87a89bfc16fe3f8a82cb1b7810b1020b7c38 Mon Sep 17 00:00:00 2001 From: codecalm Date: Thu, 17 Oct 2019 22:15:53 +0200 Subject: [PATCH 05/70] page title fixes --- pages/_includes/layout/page-title.html | 8 ++++++++ pages/homepage.html | 5 ++--- scss/layout/_navbar.scss | 1 - scss/layout/_page.scss | 2 ++ scss/ui/_tables.scss | 5 +---- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/pages/_includes/layout/page-title.html b/pages/_includes/layout/page-title.html index c10eb04de..d5a4eeea5 100644 --- a/pages/_includes/layout/page-title.html +++ b/pages/_includes/layout/page-title.html @@ -1,21 +1,29 @@ {% if page.page-title or layout.page-title %} +
+ {% if page.page-subtitle %} +
Overview
+ {% endif %}

{{ page.page-title | default: layout.page-title }}

+ + {% if page.page-title-actions %} +
{% include ui/button.html text="New view" color="secondary" icon="plus" %} {% include ui/button.html text="Create new report" color="primary" class="ml-3" %}
+ {% endif %}
{% endif %} diff --git a/pages/homepage.html b/pages/homepage.html index 2c0e53cb4..dd1e20deb 100644 --- a/pages/homepage.html +++ b/pages/homepage.html @@ -1,13 +1,12 @@ --- title: Homepage page-title: Homepage +page-subtitle: Overview +page-title-actions: home --- -
- - {% include cards/project-summary.html %} {% include cards/social-traffic.html %} diff --git a/scss/layout/_navbar.scss b/scss/layout/_navbar.scss index e1108abce..6baed6ece 100644 --- a/scss/layout/_navbar.scss +++ b/scss/layout/_navbar.scss @@ -335,7 +335,6 @@ Folded navbar } .nav-icon { - font-size: px2rem(15px); opacity: 1; justify-content: center; } diff --git a/scss/layout/_page.scss b/scss/layout/_page.scss index 6d16e30cc..d34e9043a 100644 --- a/scss/layout/_page.scss +++ b/scss/layout/_page.scss @@ -1,6 +1,8 @@ .page-title-box { min-height: 2.5rem; margin: .25rem 0 1.5rem; + display: flex; + align-items: center; } .page-pretitle { diff --git a/scss/ui/_tables.scss b/scss/ui/_tables.scss index 9bc3e06f6..32dd7eb6e 100644 --- a/scss/ui/_tables.scss +++ b/scss/ui/_tables.scss @@ -5,10 +5,7 @@ th { border-width: $table-border-width; background: $min-black; - text-transform: uppercase; - font-weight: 600; - font-size: 11px; - letter-spacing: .03em; + @extend .subheader; } } From fe85912fe9ddcfb6942a6fd37311c59ce1fc996d Mon Sep 17 00:00:00 2001 From: codecalm Date: Thu, 17 Oct 2019 22:34:27 +0200 Subject: [PATCH 06/70] eslint fixes --- scss/_dark.scss | 8 +- scss/_utilities.scss | 1 - scss/_variables.scss | 42 +++--- scss/fonts/_webfonts.scss | 2 +- scss/layout/_core.scss | 2 +- scss/layout/_navbar.scss | 184 ++++++++++++-------------- scss/layout/_page.scss | 6 +- scss/mixins/_functions.scss | 2 +- scss/tabler.scss | 1 - scss/ui/_avatars.scss | 5 +- scss/ui/_breadcrumbs.scss | 2 +- scss/ui/_buttons.scss | 11 +- scss/ui/_cards.scss | 58 ++++---- scss/ui/_empty.scss | 15 +-- scss/ui/_flags.scss | 4 +- scss/ui/_grid.scss | 14 +- scss/ui/_highlight.scss | 127 +++++++++--------- scss/ui/_icons.scss | 2 +- scss/ui/_inputs.scss | 14 +- scss/ui/_loaders.scss | 8 +- scss/ui/_progress.scss | 31 ++--- scss/ui/_ribbons.scss | 6 +- scss/ui/_switch.scss | 74 ----------- scss/ui/_tables.scss | 5 +- scss/ui/_typo.scss | 3 +- scss/ui/forms/_input.colorinput.scss | 6 +- scss/ui/forms/_input.imagecheck.scss | 8 +- scss/ui/forms/_input.selectgroup.scss | 2 +- scss/ui/typo/_hr.scss | 28 ++-- scss/utils/_api.scss | 0 scss/utils/_border.scss | 19 +-- scss/vendor/_selectize.scss | 164 +++++++++++------------ 32 files changed, 374 insertions(+), 480 deletions(-) delete mode 100644 scss/ui/_switch.scss delete mode 100644 scss/utils/_api.scss diff --git a/scss/_dark.scss b/scss/_dark.scss index 767cdf65a..9bc9e7f91 100644 --- a/scss/_dark.scss +++ b/scss/_dark.scss @@ -5,8 +5,8 @@ &, .modal-content, .dropdown-menu { - background: $dark; color: #afbdd1; + background: $dark; } .dropdown-menu-arrow::after { @@ -23,8 +23,8 @@ .form-select, .form-switch .form-check-input, .selectgroup-button { - background: rgba(0, 0, 0, .1); color: inherit; + background: rgba(0, 0, 0, .1); } .text-body { @@ -41,11 +41,11 @@ } body.theme-dark { - @include dark-mode; + @include dark-mode (); } @media (prefers-color-scheme: dark) { body.auto-theme-dark { - @include dark-mode; + @include dark-mode (); } } diff --git a/scss/_utilities.scss b/scss/_utilities.scss index 10d86fdbe..766915143 100644 --- a/scss/_utilities.scss +++ b/scss/_utilities.scss @@ -66,5 +66,4 @@ $utilities: ( black: 900, ) ), - ) !default; diff --git a/scss/_variables.scss b/scss/_variables.scss index c0044ba45..76a7ad0b3 100644 --- a/scss/_variables.scss +++ b/scss/_variables.scss @@ -1,7 +1,7 @@ // FONTS -$google-font: 'Source Sans Pro' !default; +$google-font: "Source Sans Pro" !default; -$font-family-sans-serif: $google-font, -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol !default; +$font-family-sans-serif: $google-font, -apple-system, blinkmacsystemfont, segoe ui, helvetica, arial, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol !default; $font-family-serif: "Georgia", "Times New Roman", times, serif !default; $font-icons: "tabler-webfont" !default; @@ -38,8 +38,8 @@ $lime: #7bd235 !default; $green: #5eba00 !default; $teal: #2bcbba !default; $cyan: #17a2b8 !default; -$black: #000000 !default; -$white: #ffffff !default; +$black: #000 !default; +$white: #fff !default; $light: #f5f7fb !default; $dark: #354052 !default; @@ -55,7 +55,7 @@ $social-colors: ( "facebook": #3b5998, "twitter": #1da1f2, "google": #dc4e41, - "youtube": #ff0000, + "youtube": #f00, "vimeo": #1ab7ea, "dribbble": #ea4c89, "github": #181717, @@ -117,12 +117,12 @@ $headings-font-weight: 600 !default; $small-font-size: 87.5% !default; -$h1-font-size: (26em/16) !default; -$h2-font-size: (21em/16) !default; -$h3-font-size: (18em/16) !default; -$h4-font-size: (16em/16) !default; -$h5-font-size: (14em/16) !default; -$h6-font-size: (12em/16) !default; +$h1-font-size: (26em / 16) !default; +$h2-font-size: (21em / 16) !default; +$h3-font-size: (18em / 16) !default; +$h4-font-size: (16em / 16) !default; +$h5-font-size: (14em / 16) !default; +$h6-font-size: (12em / 16) !default; $blockquote-font-size: $h4-font-size !default; @@ -194,9 +194,9 @@ $alert-link-font-weight: 600 !default; //breadcrumb $breadcrumb-variants: ( - dots: '·', - arrows: '›', - bullets: '\02022', + dots: "·", + arrows: "›", + bullets: "\02022", ) !default; //badges @@ -231,8 +231,8 @@ $card-active-border-color: $blue !default; $card-status-size: 2px !default; $card-group-margin: 1.5rem !default; -$card-shadow: rgba($dark, .04) 0 2px 4px 0; -$card-shadow-hover: rgba($dark, .08) 0 2px 12px 0; +$card-shadow: rgba($dark, .04) 0 2px 4px 0 !default; +$card-shadow-hover: rgba($dark, .08) 0 2px 12px 0 !default; //close $close-font-weight: 400 !default; @@ -306,12 +306,12 @@ $input-border-radius: $border-radius !default; //Forms -$form-check-input-width: 1em; -$form-check-input-border: 1px solid $border-color; -$form-check-input-border-radius: $border-radius; -$form-check-input-checked-bg-size: .75rem; +$form-check-input-width: 1em !default; +$form-check-input-border: 1px solid $border-color !default; +$form-check-input-border-radius: $border-radius !default; +$form-check-input-checked-bg-size: .75rem !default; -$form-range-track-height: .25rem; +$form-range-track-height: .25rem !default; $form-feedback-icon-valid: str-replace(url("data:image/svg+xml,"), "#", "%23") !default; $form-feedback-icon-invalid: str-replace(url("data:image/svg+xml,"), "#", "%23") !default; diff --git a/scss/fonts/_webfonts.scss b/scss/fonts/_webfonts.scss index c2a7f9a46..126fba6a5 100644 --- a/scss/fonts/_webfonts.scss +++ b/scss/fonts/_webfonts.scss @@ -1,5 +1,5 @@ @if $google-font { - $google-font-url: "https://fonts.googleapis.com/css?family=" + str-replace($google-font, ' ', '+') + ":300,400,500,600,700" !default; + $google-font-url: "https://fonts.googleapis.com/css?family=" + str-replace($google-font, " ", "+") + ":300,400,500,600,700" !default; @import url($google-font-url); } diff --git a/scss/layout/_core.scss b/scss/layout/_core.scss index d58026944..a33d939df 100644 --- a/scss/layout/_core.scss +++ b/scss/layout/_core.scss @@ -7,10 +7,10 @@ html { body { height: 100%; overflow-y: scroll; + letter-spacing: $body-letter-spacing; touch-action: manipulation; text-rendering: optimizeLegibility; font-feature-settings: "liga" 0; - letter-spacing: $body-letter-spacing; } body *::-webkit-scrollbar { diff --git a/scss/layout/_navbar.scss b/scss/layout/_navbar.scss index 6baed6ece..4be1b4c61 100644 --- a/scss/layout/_navbar.scss +++ b/scss/layout/_navbar.scss @@ -1,10 +1,10 @@ .navbar { - background: #fff; - color: $body-color; - border-bottom: 1px solid $border-color; display: flex; - min-height: 3.5rem; width: 100%; + min-height: 3.5rem; + color: $body-color; + background: #fff; + border-bottom: 1px solid $border-color; .nav-link { color: inherit; @@ -14,8 +14,8 @@ .navbar-nav { flex-direction: row; - margin-left: -($navbar-padding-x); margin-right: -($navbar-padding-x); + margin-left: -($navbar-padding-x); .nav-link { display: flex; @@ -32,8 +32,8 @@ } .navbar-nav { - padding-left: .5rem; padding-right: .5rem; + padding-left: .5rem; } } @@ -42,13 +42,13 @@ top: 100%; left: 0; z-index: $zindex-tooltip; + width: 12rem; + padding: .25rem; + font-size: $h5-font-size; background: #fff; border: 1px solid $border-color; border-radius: 3px; - width: 12rem; - font-size: $h5-font-size; - box-shadow: 0 0.5rem 1rem rgba(18, 18, 18, 0.15); - padding: .25rem; + box-shadow: 0 .5rem 1rem rgba(18, 18, 18, .15); .nav { flex-direction: column; @@ -91,41 +91,22 @@ Navbar toggler height: 2rem; } -/** -Fixed navbar - */ -.navbar-fixed { - position: fixed; - z-index: $zindex-sticky; - - &.navbar-side { - top: 0; - left: 0; - bottom: 0; - - &.navbar-right { - right: 0; - left: auto; - } - } -} - /* Sidebar */ .navbar-side { + flex-direction: column; + flex-wrap: nowrap; + align-items: inherit; + justify-content: start; width: $sidenav-width; min-width: $sidenav-width; + margin: 0; + overflow: auto; + pointer-events: inherit; + user-select: none; background: $sidenav-bg; border-right: 1px solid $sidenav-border-color; - user-select: none; - flex-direction: column; - align-items: inherit; - margin: 0; - pointer-events: inherit; - justify-content: start; - flex-wrap: nowrap; - overflow: auto; .nav { flex-direction: column; @@ -134,13 +115,13 @@ Sidebar .nav-link { display: flex; align-items: center; - color: $text-muted; height: 2.5rem; padding: 0 $navbar-padding-x; + color: $text-muted; box-shadow: inset 2px 0 0 0 transparent; transition: .3s background, .3s box-shadow; - &[aria-expanded=true], + &[aria-expanded="true"], &:hover { background: rgba($link-color, .04); border-color: $primary; @@ -152,44 +133,44 @@ Sidebar } &[data-toggle="collapse"] { - &:after { + &::after { display: block; - font-family: $font-icons !important; - content: ''; margin-left: auto; + font-family: $font-icons !important; + content: ""; transition: transform .3s; } - &[aria-expanded="true"]:after { + &[aria-expanded="true"]::after { transform: rotate(-180deg); } } } &:not(.navbar-folded) { - &[data-toggle="collapse"][aria-expanded=true] { + &[data-toggle="collapse"][aria-expanded="true"] { background: none; box-shadow: none; } } &:not(.hide-navbar-folded) { - .nav-item .nav-item .nav-link { - padding-left: 2.5rem; - } - - .nav-item .nav-item .nav-item .nav-link { - padding-left: 3.5rem; - } - - .nav-item .nav-item .nav-item .nav-item .nav-link { - padding-left: 4.5rem; - } + //.nav-item .nav-item .nav-link { + // padding-left: 2.5rem; + //} + // + //.nav-item .nav-item .nav-item .nav-link { + // padding-left: 3.5rem; + //} + // + //.nav-item .nav-item .nav-item .nav-item .nav-link { + // padding-left: 4.5rem; + //} } .navbar-brand { - text-align: center; height: 2.5rem; + text-align: center; } .navbar-heading { @@ -206,57 +187,65 @@ Sidebar Fixed navbar */ .navbar-fixed { + position: fixed; top: 0; bottom: 0; + z-index: $zindex-sticky; + .navbar-bg { position: fixed; top: 0; - left: 0; right: 0; bottom: 0; - background: rgba($dark, .2); + left: 0; z-index: $zindex-dropdown; display: none; + background: rgba($dark, .2); + } + + &.navbar-side { + top: 0; + bottom: 0; + left: 0; + + &.navbar-right { + right: 0; + left: auto; + } } } -/* -Responsive utils - */ -.navbar { - &.navbar-side { - display: none; +.navbar-side { + display: none; - @include media-breakpoint-up(xl) { - display: flex; + @include media-breakpoint-up(xl) { + display: flex; + + &.navbar-fixed { + & ~ .layout-main { + margin-left: $sidenav-width; + } + + &.navbar-right ~ .layout-main { + margin-right: $sidenav-width; + margin-left: 0; + } + } + } + + &.navbar-folded { + display: flex; + + &.navbar-fixed { + @include media-breakpoint-up(lg) { - &.navbar-fixed { & ~ .layout-main { - margin-left: $sidenav-width; + margin-left: $sidenav-folded-width; } &.navbar-right ~ .layout-main { + margin-right: $sidenav-folded-width; margin-left: 0; - margin-right: $sidenav-width; - } - } - } - - &.navbar-folded { - display: flex; - - &.navbar-fixed { - @include media-breakpoint-up(lg) { - - & ~ .layout-main { - margin-left: $sidenav-folded-width; - } - - &.navbar-right ~ .layout-main { - margin-left: 0; - margin-right: $sidenav-folded-width; - } } } } @@ -325,24 +314,24 @@ Folded navbar } .nav-link { + justify-content: center; padding-top: 0; padding-bottom: 0; - justify-content: center; - &[data-toggle="collapse"]:after { + &[data-toggle="collapse"]::after { content: none; } } .nav-icon { - opacity: 1; justify-content: center; + opacity: 1; } .navbar-subnav { position: absolute; - left: 100%; top: 0; + left: 100%; background: #fff; .nav-text { @@ -357,12 +346,12 @@ Folded navbar .nav-icon { display: flex; - width: 1.5rem; - border-radius: 100%; flex-shrink: 0; - opacity: .8; - font-size: px2rem(15px); align-items: center; + width: 1.5rem; + font-size: px2rem(15px); + border-radius: 100%; + opacity: .8; .icon { font-size: inherit; @@ -371,8 +360,8 @@ Folded navbar .nav-text { display: flex; - width: 100%; align-items: center; + width: 100%; } /** @@ -390,6 +379,3 @@ Utils } } -.navbar-toggler-icon { - outline: 1px solid red; -} diff --git a/scss/layout/_page.scss b/scss/layout/_page.scss index d34e9043a..c3718d7b2 100644 --- a/scss/layout/_page.scss +++ b/scss/layout/_page.scss @@ -1,8 +1,8 @@ .page-title-box { - min-height: 2.5rem; - margin: .25rem 0 1.5rem; display: flex; align-items: center; + min-height: 2.5rem; + margin: .25rem 0 1.5rem; } .page-pretitle { @@ -13,6 +13,6 @@ margin: 0; font-size: $h2-font-size; font-weight: 400; - color: $body-color; line-height: 1; + color: $body-color; } diff --git a/scss/mixins/_functions.scss b/scss/mixins/_functions.scss index c9e5a10c3..0269884a5 100644 --- a/scss/mixins/_functions.scss +++ b/scss/mixins/_functions.scss @@ -18,7 +18,7 @@ } -@function str-replace($string, $search, $replace: '') { +@function str-replace($string, $search, $replace: "") { $index: str-index($string, $search); @if $index { diff --git a/scss/tabler.scss b/scss/tabler.scss index 592d6c9b2..e89bc5d77 100644 --- a/scss/tabler.scss +++ b/scss/tabler.scss @@ -41,7 +41,6 @@ @import "ui/ribbons"; @import "ui/stamps"; @import "ui/steps"; -@import "ui/switch"; @import "ui/tables"; @import "ui/toasts"; @import "ui/toolbar"; diff --git a/scss/ui/_avatars.scss b/scss/ui/_avatars.scss index 30577a67b..aa4695530 100644 --- a/scss/ui/_avatars.scss +++ b/scss/ui/_avatars.scss @@ -23,7 +23,7 @@ right: 0; bottom: 0; border-radius: 50%; - box-shadow: 0 0 0 2px white; + box-shadow: 0 0 0 2px #fff; } @at-root a#{&} { @@ -41,7 +41,6 @@ } - .avatar-list { padding: 0; margin: 0 0 -.5rem; @@ -64,7 +63,7 @@ .avatar-list-stacked { .avatar { - margin-right: -.5em !important; + margin-right: -.5em; box-shadow: 0 0 0 2px #fff; @at-root .card-footer & { diff --git a/scss/ui/_breadcrumbs.scss b/scss/ui/_breadcrumbs.scss index a010a0303..e7cbb3225 100644 --- a/scss/ui/_breadcrumbs.scss +++ b/scss/ui/_breadcrumbs.scss @@ -1,6 +1,6 @@ .breadcrumb { - margin: 0; padding: 0; + margin: 0; background: transparent; } diff --git a/scss/ui/_buttons.scss b/scss/ui/_buttons.scss index 8a9218ecb..62fe22986 100644 --- a/scss/ui/_buttons.scss +++ b/scss/ui/_buttons.scss @@ -2,12 +2,12 @@ display: inline-flex; align-items: center; justify-content: center; + letter-spacing: .01em; box-shadow: 0 1px 1px rgba(0, 0, 0, .03); - letter-spacing: 0.01em; - &:not([class^='btn-outline']):not([class*=' btn-outline']):not(.btn-secondary) { - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .05), inset 0 2px 0 -1px rgba(255, 255, 255, .1); + &:not([class^="btn-outline"]):not([class*=" btn-outline"]):not(.btn-secondary) { text-shadow: 1px 1px 0 rgba(0, 0, 0, .05); + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .05), inset 0 2px 0 -1px rgba(255, 255, 255, .1); svg.icon { filter: drop-shadow(1px 1px 0 rgba(0, 0, 0, .05)); @@ -15,9 +15,9 @@ } .icon { + margin: 0 .5em 0 -.25em; font-size: 1.2em; vertical-align: sub; - margin: 0 .5em 0 -.25em; } .icon-right { @@ -63,9 +63,6 @@ border-radius: 0; } -.btn-icon { -} - .btn-list { margin-bottom: -.5rem; font-size: 0; diff --git a/scss/ui/_cards.scss b/scss/ui/_cards.scss index 05bb60e2f..df8fdfa43 100644 --- a/scss/ui/_cards.scss +++ b/scss/ui/_cards.scss @@ -24,8 +24,8 @@ } .card-inactive { - box-shadow: none; pointer-events: none; + box-shadow: none; .card-body { opacity: .64; @@ -36,13 +36,13 @@ position: relative; background-color: rgba($primary, .03); - &:before { - content: ''; + &::before { position: absolute; top: -1px; - left: -1px; right: -1px; bottom: -1px; + left: -1px; + content: ""; border: 1px solid $primary; border-radius: inherit; } @@ -73,24 +73,24 @@ .card-stacked { position: relative; - &:after { - content: ''; + &::after { position: absolute; top: -5px; - left: 5px; right: 5px; + left: 5px; + z-index: -1; + height: 5px; + content: ""; + background: $card-bg; border: 1px solid $card-border-color; border-radius: $card-border-radius $card-border-radius 0 0; - background: $card-bg; - z-index: -1; - height: 5px } } .card-cover { position: relative; padding: $card-spacer-y $card-spacer-x; - background: #666666 no-repeat center/cover; + background: #666 no-repeat center/cover; &::before { position: absolute; @@ -150,9 +150,9 @@ .card-title { display: block; + margin: 0 0 1rem; font-size: $h3-font-size; font-weight: $headings-font-weight; - margin: 0 0 1rem; color: $headings-color; @at-root a#{&}:hover { @@ -187,8 +187,8 @@ Card optinos .card-options { top: 1.5rem; right: .75rem; - margin-left: auto; display: flex; + margin-left: auto; } .card-options-link { @@ -203,27 +203,27 @@ Card status */ .card-status-top { position: absolute; - height: $card-status-size; - border-radius: $card-border-radius $card-border-radius 0 0; top: 0; right: 0; left: 0; + height: $card-status-size; + border-radius: $card-border-radius $card-border-radius 0 0; } .card-status-left { position: absolute; right: auto; bottom: 0; - height: 100%; width: $card-status-size; + height: 100%; border-radius: $card-border-radius 0 0 $card-border-radius; } .card-status-bottom { position: absolute; + top: initial; bottom: 0; width: 100%; - top: initial; height: $card-status-size; border-radius: 0 0 $card-border-radius $card-border-radius; } @@ -274,7 +274,7 @@ Card code pre { padding: 0; margin: 0; - color: #ffffff; + color: #fff; text-shadow: none; background: transparent; } @@ -303,9 +303,9 @@ Card profile max-width: 6rem; margin-top: -5rem; margin-bottom: 1rem; - border: 3px solid #ffffff; + border: 3px solid #fff; border-radius: 100%; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 1px rgba(0, 0, 0, .1); } /* @@ -317,13 +317,13 @@ Card list group } .list-group-item { + padding-right: $card-spacer-x; + + padding-left: $card-spacer-x; border-right: 0; border-left: 0; border-radius: 0; - padding-left: $card-spacer-x; - padding-right: $card-spacer-x; - &:last-child { border-bottom: 0; } @@ -341,14 +341,14 @@ Card tabs margin-bottom: $card-group-margin; .nav-tabs { - border-bottom: 0; - z-index: $zindex-dropdown; position: relative; + z-index: $zindex-dropdown; + border-bottom: 0; .nav-link { + background: $card-cap-bg; border: $card-border-width solid $card-border-color; border-bottom: 0; - background: $card-cap-bg; &.active, &:active, @@ -357,8 +357,8 @@ Card tabs } &.active { - background: $card-bg; color: $headings-color; + background: $card-bg; } } @@ -389,8 +389,8 @@ Card tabs margin-bottom: 0; .nav-link { - border-bottom: $card-border-width solid $card-border-color; border-top-width: 0; + border-bottom: $card-border-width solid $card-border-color; border-top-left-radius: 0; border-top-right-radius: 0; @@ -399,7 +399,7 @@ Card tabs } .card { - border-top-left-radius: 0; margin: 0; + border-top-left-radius: 0; } } diff --git a/scss/ui/_empty.scss b/scss/ui/_empty.scss index 511aef8a8..bba2508e0 100644 --- a/scss/ui/_empty.scss +++ b/scss/ui/_empty.scss @@ -1,17 +1,16 @@ .empty { - text-align: center; - padding: 3rem; - height: 100%; - display: flex; - justify-content: center; - align-items: center; flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + padding: 3rem; + text-align: center; .empty-icon { margin: 0 0 1rem; font-size: 2rem; - font-weight: normal; + font-weight: 400; line-height: 1; } @@ -26,6 +25,6 @@ } .empty-bordered { - border-radius: $border-radius; border: 1px solid $border-color; + border-radius: $border-radius; } diff --git a/scss/ui/_flags.scss b/scss/ui/_flags.scss index 655ca4248..487c2206a 100644 --- a/scss/ui/_flags.scss +++ b/scss/ui/_flags.scss @@ -21,12 +21,12 @@ display: inline-block; width: 1.125rem * 1.33333; height: 1.125rem; + vertical-align: -3px; background-repeat: no-repeat; background-position: center; background-size: cover; - border-radius: 3px; border: 1px solid $border-color; - vertical-align: -3px; + border-radius: 3px; } @each $country in $countries { diff --git a/scss/ui/_grid.scss b/scss/ui/_grid.scss index cee46edd8..68908dbb3 100644 --- a/scss/ui/_grid.scss +++ b/scss/ui/_grid.scss @@ -6,18 +6,6 @@ border-left: 1px solid $border-color; } -.row-deck { - > .col, - > [class*='col-'] { - display: flex; - align-items: stretch; - - .card { - flex: 1 1 auto; - } - } -} - @each $name, $value in (0: 0, xs: .25rem, sm: .5rem, lg: 1rem, xl: 1.5rem) { .row-#{$name} { margin-right: (-$value); @@ -37,7 +25,7 @@ .row-deck { > .col, - > [class*='col-'] { + > [class*="col-"] { display: flex; align-items: stretch; diff --git a/scss/ui/_highlight.scss b/scss/ui/_highlight.scss index 2fcdb1f43..c3fabe4e3 100644 --- a/scss/ui/_highlight.scss +++ b/scss/ui/_highlight.scss @@ -8,11 +8,11 @@ border-radius: 3px; pre { - margin-bottom: 0; - background-color: transparent; - color: inherit; height: 100%; + margin-bottom: 0; + color: inherit; white-space: pre-wrap; + background-color: transparent; } // stylelint-disable selector-class-pattern @@ -99,7 +99,7 @@ .nb { color: #366; } - .nc { color: #0a8;} + .nc { color: #0a8; } .no { color: #360; } @@ -216,70 +216,69 @@ } .highlight-dark { - background: $dark; color: $white; + background: $dark; border-color: transparent; - .c { color: #75715e } /* Comment */ - .err { color: #960050; background-color: #1e0010 } /* Error */ - .k { color: #66d9ef } /* Keyword */ - .l { color: #ae81ff } /* Literal */ - .n { color: #f8f8f2 } /* Name */ - .o { color: #f92672 } /* Operator */ - .p { color: #f8f8f2 } /* Punctuation */ - .cm { color: #75715e } /* Comment.Multiline */ - .cp { color: #75715e } /* Comment.Preproc */ - .c1 { color: #75715e } /* Comment.Single */ - .cs { color: #75715e } /* Comment.Special */ - .ge { font-style: italic } /* Generic.Emph */ - .gs { font-weight: bold } /* Generic.Strong */ - .kc { color: #66d9ef } /* Keyword.Constant */ - .kd { color: #66d9ef } /* Keyword.Declaration */ - .kn { color: #f92672 } /* Keyword.Namespace */ - .kp { color: #66d9ef } /* Keyword.Pseudo */ - .kr { color: #66d9ef } /* Keyword.Reserved */ - .kt { color: #66d9ef } /* Keyword.Type */ - .ld { color: #e6db74 } /* Literal.Date */ - .m { color: #ae81ff } /* Literal.Number */ - .s { color: #e6db74 } /* Literal.String */ - .na { color: #a6e22e } /* Name.Attribute */ - .nb { color: #f8f8f2 } /* Name.Builtin */ - .nc { color: #a6e22e } /* Name.Class */ - .no { color: #66d9ef } /* Name.Constant */ - .nd { color: #a6e22e } /* Name.Decorator */ - .ni { color: #f8f8f2 } /* Name.Entity */ - .ne { color: #a6e22e } /* Name.Exception */ - .nf { color: #a6e22e } /* Name.Function */ - .nl { color: #f8f8f2 } /* Name.Label */ - .nn { color: #f8f8f2 } /* Name.Namespace */ - .nx { color: #a6e22e } /* Name.Other */ - .py { color: #f8f8f2 } /* Name.Property */ - .nt { color: #f92672 } /* Name.Tag */ - .nv { color: #f8f8f2 } /* Name.Variable */ - .ow { color: #f92672 } /* Operator.Word */ - .w { color: #f8f8f2 } /* Text.Whitespace */ - .mf { color: #ae81ff } /* Literal.Number.Float */ - .mh { color: #ae81ff } /* Literal.Number.Hex */ - .mi { color: #ae81ff } /* Literal.Number.Integer */ - .mo { color: #ae81ff } /* Literal.Number.Oct */ - .sb { color: #e6db74 } /* Literal.String.Backtick */ - .sc { color: #e6db74 } /* Literal.String.Char */ - .sd { color: #e6db74 } /* Literal.String.Doc */ - .s2 { color: #e6db74 } /* Literal.String.Double */ - .se { color: #ae81ff } /* Literal.String.Escape */ - .sh { color: #e6db74 } /* Literal.String.Heredoc */ - .si { color: #e6db74 } /* Literal.String.Interpol */ - .sx { color: #e6db74 } /* Literal.String.Other */ - .sr { color: #e6db74 } /* Literal.String.Regex */ - .s1 { color: #e6db74 } /* Literal.String.Single */ - .ss { color: #e6db74 } /* Literal.String.Symbol */ - .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ - .vc { color: #f8f8f2 } /* Name.Variable.Class */ - .vg { color: #f8f8f2 } /* Name.Variable.Global */ - .vi { color: #f8f8f2 } /* Name.Variable.Instance */ - .il { color: #ae81ff } /* Literal.Number.Integer.Long */ + .c { color: #75715e; } /* Comment */ + .err { color: #960050; background-color: #1e0010; } /* Error */ + .k { color: #66d9ef; } /* Keyword */ + .l { color: #ae81ff; } /* Literal */ + .n { color: #f8f8f2; } /* Name */ + .o { color: #f92672; } /* Operator */ + .p { color: #f8f8f2; } /* Punctuation */ + .cm { color: #75715e; } /* Comment.Multiline */ + .cp { color: #75715e; } /* Comment.Preproc */ + .c1 { color: #75715e; } /* Comment.Single */ + .cs { color: #75715e; } /* Comment.Special */ + .ge { font-style: italic; } /* Generic.Emph */ + .gs { font-weight: 700; } /* Generic.Strong */ + .kc { color: #66d9ef; } /* Keyword.Constant */ + .kd { color: #66d9ef; } /* Keyword.Declaration */ + .kn { color: #f92672; } /* Keyword.Namespace */ + .kp { color: #66d9ef; } /* Keyword.Pseudo */ + .kr { color: #66d9ef; } /* Keyword.Reserved */ + .kt { color: #66d9ef; } /* Keyword.Type */ + .ld { color: #e6db74; } /* Literal.Date */ + .m { color: #ae81ff; } /* Literal.Number */ + .s { color: #e6db74; } /* Literal.String */ + .na { color: #a6e22e; } /* Name.Attribute */ + .nb { color: #f8f8f2; } /* Name.Builtin */ + .nc { color: #a6e22e; } /* Name.Class */ + .no { color: #66d9ef; } /* Name.Constant */ + .nd { color: #a6e22e; } /* Name.Decorator */ + .ni { color: #f8f8f2; } /* Name.Entity */ + .ne { color: #a6e22e; } /* Name.Exception */ + .nf { color: #a6e22e; } /* Name.Function */ + .nl { color: #f8f8f2; } /* Name.Label */ + .nn { color: #f8f8f2; } /* Name.Namespace */ + .nx { color: #a6e22e; } /* Name.Other */ + .py { color: #f8f8f2; } /* Name.Property */ + .nt { color: #f92672; } /* Name.Tag */ + .nv { color: #f8f8f2; } /* Name.Variable */ + .ow { color: #f92672; } /* Operator.Word */ + .w { color: #f8f8f2; } /* Text.Whitespace */ + .mf { color: #ae81ff; } /* Literal.Number.Float */ + .mh { color: #ae81ff; } /* Literal.Number.Hex */ + .mi { color: #ae81ff; } /* Literal.Number.Integer */ + .mo { color: #ae81ff; } /* Literal.Number.Oct */ + .sb { color: #e6db74; } /* Literal.String.Backtick */ + .sc { color: #e6db74; } /* Literal.String.Char */ + .sd { color: #e6db74; } /* Literal.String.Doc */ + .s2 { color: #e6db74; } /* Literal.String.Double */ + .se { color: #ae81ff; } /* Literal.String.Escape */ + .sh { color: #e6db74; } /* Literal.String.Heredoc */ + .si { color: #e6db74; } /* Literal.String.Interpol */ + .sx { color: #e6db74; } /* Literal.String.Other */ + .sr { color: #e6db74; } /* Literal.String.Regex */ + .s1 { color: #e6db74; } /* Literal.String.Single */ + .ss { color: #e6db74; } /* Literal.String.Symbol */ + .bp { color: #f8f8f2; } /* Name.Builtin.Pseudo */ + .vc { color: #f8f8f2; } /* Name.Variable.Class */ + .vg { color: #f8f8f2; } /* Name.Variable.Global */ + .vi { color: #f8f8f2; } /* Name.Variable.Instance */ + .il { color: #ae81ff; } /* Literal.Number.Integer.Long */ - .gh { } /* Generic Heading & Diff Header */ .gu { color: #75715e; } /* Generic.Subheading & Diff Unified/Comment? */ .gd { color: #f92672; } /* Generic.Deleted & Diff Deleted */ .gi { color: #a6e22e; } /* Generic.Inserted & Diff Inserted */ diff --git a/scss/ui/_icons.scss b/scss/ui/_icons.scss index 1eee3c33d..154ebd2d4 100644 --- a/scss/ui/_icons.scss +++ b/scss/ui/_icons.scss @@ -1,7 +1,7 @@ .icon { - font-size: 1em; width: 1em; height: 1em; + font-size: 1em; &:hover { text-decoration: none; diff --git a/scss/ui/_inputs.scss b/scss/ui/_inputs.scss index 067af6ca2..5487e4cd6 100644 --- a/scss/ui/_inputs.scss +++ b/scss/ui/_inputs.scss @@ -22,7 +22,7 @@ textarea { vertical-align: middle; &:-webkit-autofill { - -webkit-box-shadow: 0 0 0 1000px #fff inset; + box-shadow: 0 0 0 1000px #fff inset; } &:disabled, @@ -65,20 +65,20 @@ Form help display: inline-block; width: 1rem; height: 1rem; - text-align: center; + font-size: px2rem(12px); line-height: 1rem; color: $text-muted; - background: $gray-100; - border-radius: 50%; - font-size: px2rem(12px); - transition: .3s background-color, .3s color; + text-align: center; text-decoration: none; cursor: pointer; user-select: none; + background: $gray-100; + border-radius: 50%; + transition: .3s background-color, .3s color; &:hover, &[aria-describedby] { - background: $primary; color: #fff; + background: $primary; } } diff --git a/scss/ui/_loaders.scss b/scss/ui/_loaders.scss index 99673410c..179243cc4 100644 --- a/scss/ui/_loaders.scss +++ b/scss/ui/_loaders.scss @@ -41,12 +41,12 @@ Dimmer position: relative; .loader { - display: none; - margin: 0 auto; position: absolute; top: 50%; - left: 0; right: 0; + left: 0; + display: none; + margin: 0 auto; transform: translateY(-50%); } @@ -56,8 +56,8 @@ Dimmer } .dimmer-content { - opacity: .1; pointer-events: none; + opacity: .1; } } } diff --git a/scss/ui/_progress.scss b/scss/ui/_progress.scss index f6ba8b2e4..6ecb80799 100644 --- a/scss/ui/_progress.scss +++ b/scss/ui/_progress.scss @@ -1,36 +1,37 @@ @keyframes progress-indeterminate { 0% { + right: 100%; left: -35%; - right: 100% } - 100%, 60% { + 100%, + 60% { + right: -90%; left: 100%; - right: -90% } } .progress { - appearance: none; - line-height: $progress-height; position: relative; width: 100%; + line-height: $progress-height; + appearance: none; &::-webkit-progress-bar { background: $gray-100; } &::-webkit-progress-value { - background-color: $primary + background-color: $primary; } &::-moz-progress-bar { - background-color: $primary + background-color: $primary; } &::-ms-fill { background-color: $primary; - border: none + border: none; } } @@ -39,18 +40,18 @@ } .progress-bar-indeterminate { - &:after, - &:before { - content: ''; + &::after, + &::before { position: absolute; - background-color: inherit; - left: 0; - will-change: left, right; top: 0; bottom: 0; + left: 0; + content: ""; + background-color: inherit; + will-change: left, right; } - &:before { + &::before { animation: progress-indeterminate 2.1s cubic-bezier(.65, .815, .735, .395) infinite; } } diff --git a/scss/ui/_ribbons.scss b/scss/ui/_ribbons.scss index 414281c58..660043993 100644 --- a/scss/ui/_ribbons.scss +++ b/scss/ui/_ribbons.scss @@ -6,14 +6,14 @@ right: -($ribbon-margin); z-index: 1; padding: .25rem .75rem; + font-size: $h6-font-size; font-weight: 700; + line-height: 1.5rem; color: #fff; text-align: center; + text-transform: uppercase; background: $primary; border-color: $primary; - text-transform: uppercase; - font-size: $h6-font-size; - line-height: 1.5rem; &::before { position: absolute; diff --git a/scss/ui/_switch.scss b/scss/ui/_switch.scss deleted file mode 100644 index 236112588..000000000 --- a/scss/ui/_switch.scss +++ /dev/null @@ -1,74 +0,0 @@ -$custom-switch-width: 2.25rem; -$custom-switch-height: 1.25rem; -$custom-switch-padding: 1px; - -.custom-switch { - user-select: none; - cursor: default; - display: inline-flex; - align-items: center; - margin: 0; -} - -.custom-switch-input { - position: absolute; - z-index: -1; - opacity: 0; -} - -.custom-switches-stacked { - display: flex; - flex-direction: column; - - .custom-switch { - margin-bottom: .5rem; - } -} - -.custom-switch-indicator { - display: inline-block; - height: $custom-switch-height; - width: $custom-switch-width; - background: $gray-200; - border-radius: 50px; - position: relative; - vertical-align: bottom; - border: 1px solid $border-color; - transition: .3s border-color, .3s background-color; - - &:before { - content: ''; - position: absolute; - height: calc(#{$custom-switch-height} - #{$custom-switch-padding * 2 + 2px}); - width: calc(#{$custom-switch-height} - #{$custom-switch-padding * 2 + 2px}); - top: $custom-switch-padding; - left: $custom-switch-padding; - background: #fff; - border-radius: 50%; - transition: .3s left; - box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.4); - } - - .custom-switch-input:checked ~ & { - background: $primary; - - &:before { - left: calc(#{$custom-switch-width - $custom-switch-height} + #{$custom-switch-padding}) - } - } - - .custom-switch-input:focus ~ & { - box-shadow: $input-btn-focus-box-shadow; - border-color: $primary; - } -} - -.custom-switch-description { - margin-left: .5rem; - color: $text-muted; - transition: .3s color; - - .custom-switch-input:checked ~ & { - color: $body-color; - } -} diff --git a/scss/ui/_tables.scss b/scss/ui/_tables.scss index 32dd7eb6e..bb132d811 100644 --- a/scss/ui/_tables.scss +++ b/scss/ui/_tables.scss @@ -3,8 +3,8 @@ thead { th { - border-width: $table-border-width; background: $min-black; + border-width: $table-border-width; @extend .subheader; } } @@ -15,7 +15,8 @@ } .table-nowrap { - th, td { + th, + td { white-space: nowrap; } } diff --git a/scss/ui/_typo.scss b/scss/ui/_typo.scss index 5757f14df..0548354e0 100644 --- a/scss/ui/_typo.scss +++ b/scss/ui/_typo.scss @@ -1,4 +1,4 @@ -@import 'typo/hr'; +@import "typo/hr"; .lead { line-height: 1.4; @@ -65,7 +65,6 @@ code { } - pre { padding: 1rem; overflow: auto; diff --git a/scss/ui/forms/_input.colorinput.scss b/scss/ui/forms/_input.colorinput.scss index 56af9fd34..f46482235 100644 --- a/scss/ui/forms/_input.colorinput.scss +++ b/scss/ui/forms/_input.colorinput.scss @@ -3,10 +3,10 @@ Color Input */ .colorinput { position: relative; - margin: 0; - cursor: pointer; display: inline-block; + margin: 0; line-height: 1; + cursor: pointer; } .colorinput-input { @@ -47,5 +47,3 @@ Color Input } } - - diff --git a/scss/ui/forms/_input.imagecheck.scss b/scss/ui/forms/_input.imagecheck.scss index bd11ffe1a..5e190ab54 100644 --- a/scss/ui/forms/_input.imagecheck.scss +++ b/scss/ui/forms/_input.imagecheck.scss @@ -15,11 +15,11 @@ Image check .imagecheck-figure { position: relative; + display: flex; margin: 0; + user-select: none; border: 1px solid $border-color; border-radius: 3px; - display: flex; - user-select: none; .imagecheck-input:focus ~ & { border-color: $primary; @@ -41,18 +41,18 @@ Image check color: #fff; pointer-events: none; content: ""; + user-select: none; background: $white; border: 1px solid $border-color; - user-select: none; border-radius: 3px; transition: .3s opacity; .imagecheck-input:checked ~ & { background-color: $form-check-input-checked-bg-color; + background-image: escape-svg($form-check-input-checked-bg-image); background-repeat: $form-check-input-checked-bg-repeat; background-position: $form-check-input-checked-bg-position; background-size: $form-check-input-checked-bg-size; - background-image: escape-svg($form-check-input-checked-bg-image); border-color: $form-check-input-checked-border-color; } } diff --git a/scss/ui/forms/_input.selectgroup.scss b/scss/ui/forms/_input.selectgroup.scss index e62736d4d..f34cb80e7 100644 --- a/scss/ui/forms/_input.selectgroup.scss +++ b/scss/ui/forms/_input.selectgroup.scss @@ -79,9 +79,9 @@ Selectgroup text-align: center; cursor: pointer; user-select: none; + background: rgba(#fff, .064); border: 1px solid $input-border-color; border-radius: 3px; - background: rgba(#fff, .064); } .selectgroup-input:checked + .selectgroup-button { diff --git a/scss/ui/typo/_hr.scss b/scss/ui/typo/_hr.scss index 77b12b26b..b39483643 100644 --- a/scss/ui/typo/_hr.scss +++ b/scss/ui/typo/_hr.scss @@ -10,52 +10,52 @@ Horizontal rules Hr text */ .hr-text { - margin: $hr-margin-y 0; display: flex; align-items: center; + margin: $hr-margin-y 0; font-size: $h6-font-size; - &:after, - &:before { + &::after, + &::before { + flex: 1 1 auto; height: $hr-height; background-color: currentColor; opacity: $hr-opacity; - flex: 1 1 auto; } - &:after { - content: ''; + &::after { + content: ""; } > *:first-child { - padding-left: 0; padding-right: .5rem; + padding-left: 0; color: $text-muted; } &.hr-text-center { - &:before { - content: ''; + &::before { + content: ""; } & > *:first-child { - padding-left: .5rem; padding-right: .5rem; + padding-left: .5rem; } } &.hr-text-right { - &:before { - content: ''; + &::before { + content: ""; } - &:after { + &::after { content: none; } & > *:first-child { - padding-left: .5rem; padding-right: 0; + padding-left: .5rem; } } } diff --git a/scss/utils/_api.scss b/scss/utils/_api.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/scss/utils/_border.scss b/scss/utils/_border.scss index 0db3ff555..7690ec9ae 100644 --- a/scss/utils/_border.scss +++ b/scss/utils/_border.scss @@ -1,9 +1,12 @@ // stylelint-disable declaration-no-important $border-sizing: () !default; -$border-sizing: map-merge(( - 2: 2, - 4: 4 -), $border-sizing); +$border-sizing: map-merge( + ( + 2: 2, + 4: 4 + ), + $border-sizing +) !default; @each $size, $value in $border-sizing { @@ -12,23 +15,23 @@ $border-sizing: map-merge(( } .border-top-#{$size} { - border-top-width: $border-width * $value !important; border-top-style: solid; + border-top-width: $border-width * $value !important; } .border-right-#{$size} { - border-right-width: $border-width * $value !important; border-right-style: solid; + border-right-width: $border-width * $value !important; } .border-bottom-#{$size} { - border-bottom-width: $border-width * $value !important; border-bottom-style: solid; + border-bottom-width: $border-width * $value !important; } .border-left-#{$size} { - border-left-width: $border-width * $value !important; border-left-style: solid; + border-left-width: $border-width * $value !important; } } diff --git a/scss/vendor/_selectize.scss b/scss/vendor/_selectize.scss index 3ec90ad0e..862f81c3d 100644 --- a/scss/vendor/_selectize.scss +++ b/scss/vendor/_selectize.scss @@ -17,53 +17,53 @@ .selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder { visibility: visible !important; background: #f2f2f2 !important; - background: rgba(0, 0, 0, 0.06) !important; + background: rgba(0, 0, 0, .06) !important; border: 0 none !important; -webkit-box-shadow: inset 0 0 12px 4px #fff; box-shadow: inset 0 0 12px 4px #fff; } .selectize-control.plugin-drag_drop .ui-sortable-placeholder::after { - content: '!'; visibility: hidden; + content: "!"; } .selectize-control.plugin-drag_drop .ui-sortable-helper { - -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, .2); + box-shadow: 0 2px 5px rgba(0, 0, 0, .2); } .selectize-dropdown-header { position: relative; padding: 5px 8px; - border-bottom: 1px solid #d0d0d0; background: #f8f8f8; + border-bottom: 1px solid #d0d0d0; -webkit-border-radius: 3px 3px 0 0; -moz-border-radius: 3px 3px 0 0; border-radius: 3px 3px 0 0; } .selectize-dropdown-header-close { position: absolute; - right: 8px; top: 50%; - color: #303030; - opacity: 0.4; + right: 8px; margin-top: -12px; - line-height: 20px; font-size: 20px !important; + line-height: 20px; + color: #303030; + opacity: .4; } .selectize-dropdown-header-close:hover { - color: #000000; + color: #000; } .selectize-dropdown.plugin-optgroup_columns .optgroup { - border-right: 1px solid #f2f2f2; - border-top: 0 none; - float: left; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; + float: left; + border-top: 0 none; + border-right: 1px solid #f2f2f2; } .selectize-dropdown.plugin-optgroup_columns .optgroup:last-child { border-right: 0 none; } -.selectize-dropdown.plugin-optgroup_columns .optgroup:before { +.selectize-dropdown.plugin-optgroup_columns .optgroup::before { display: none; } .selectize-dropdown.plugin-optgroup_columns .optgroup-header { @@ -74,31 +74,31 @@ padding-right: 24px !important; } .selectize-control.plugin-remove_button [data-value] .remove { - z-index: 1; /* fixes ie bug (see #392) */ position: absolute; top: 0; right: 0; bottom: 0; + z-index: 1; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + display: inline-block; width: 17px; - text-align: center; - font-weight: bold; + padding: 2px 0 0; font-size: 12px; + font-weight: bold; color: inherit; + text-align: center; text-decoration: none; vertical-align: middle; - display: inline-block; - padding: 2px 0 0 0; border-left: 1px solid #d0d0d0; -webkit-border-radius: 0 2px 2px 0; -moz-border-radius: 0 2px 2px 0; border-radius: 0 2px 2px 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } .selectize-control.plugin-remove_button [data-value] .remove:hover { - background: rgba(0, 0, 0, 0.05); + background: rgba(0, 0, 0, .05); } .selectize-control.plugin-remove_button [data-value].active .remove { border-left-color: #cacaca; @@ -107,12 +107,12 @@ background: none; } .selectize-control.plugin-remove_button .disabled [data-value] .remove { - border-left-color: #ffffff; + border-left-color: #fff; } .selectize-control.plugin-remove_button .remove-single { position: absolute; - right: 0; top: 0; + right: 0; font-size: 23px; } .selectize-control { @@ -121,34 +121,34 @@ .selectize-dropdown, .selectize-input, .selectize-input input { - color: #303030; font-family: inherit; font-size: 13px; line-height: 18px; + color: #303030; -webkit-font-smoothing: inherit; } .selectize-input, .selectize-control.single .selectize-input.input-active { - background: #fff; - cursor: text; display: inline-block; + cursor: text; + background: #fff; } .selectize-input { - border: 1px solid #d0d0d0; - padding: 8px 8px; - display: inline-block; - width: 100%; - overflow: hidden; position: relative; z-index: 1; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1); + display: inline-block; + width: 100%; + padding: 8px; + overflow: hidden; + border: 1px solid #d0d0d0; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .1); } .selectize-control.multi .selectize-input.has-items { padding: 6px 8px 3px; @@ -161,8 +161,8 @@ cursor: default !important; } .selectize-input.focus { - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .15); } .selectize-input.dropdown-active { -webkit-border-radius: 3px 3px 0 0; @@ -170,43 +170,43 @@ border-radius: 3px 3px 0 0; } .selectize-input > * { - vertical-align: baseline; display: -moz-inline-stack; display: inline-block; - zoom: 1; *display: inline; + vertical-align: baseline; + zoom: 1; } .selectize-control.multi .selectize-input > div { - cursor: pointer; - margin: 0 3px 3px 0; padding: 2px 6px; - background: #f2f2f2; + margin: 0 3px 3px 0; color: #303030; + cursor: pointer; + background: #f2f2f2; border: 0 solid #d0d0d0; } .selectize-control.multi .selectize-input > div.active { - background: #e8e8e8; color: #303030; + background: #e8e8e8; border: 0 solid #cacaca; } .selectize-control.multi .selectize-input.disabled > div, .selectize-control.multi .selectize-input.disabled > div.active { color: #7d7d7d; - background: #ffffff; - border: 0 solid #ffffff; + background: #fff; + border: 0 solid #fff; } .selectize-input > input { display: inline-block !important; - padding: 0 !important; + max-width: 100% !important; min-height: 0 !important; max-height: none !important; - max-width: 100% !important; + padding: 0 !important; margin: 0 2px 0 0 !important; - text-indent: 0 !important; - border: 0 none !important; - background: none !important; line-height: inherit !important; + text-indent: 0 !important; -webkit-user-select: auto !important; + background: none !important; + border: 0 none !important; -webkit-box-shadow: none !important; box-shadow: none !important; } @@ -217,42 +217,42 @@ outline: none !important; } .selectize-input::after { - content: ' '; display: block; clear: left; + content: " "; } .selectize-input.dropdown-active::before { - content: ' '; - display: block; position: absolute; - background: #f0f0f0; - height: 1px; + right: 0; bottom: 0; left: 0; - right: 0; + display: block; + height: 1px; + content: " "; + background: #f0f0f0; } .selectize-dropdown { position: absolute; z-index: 10; - border: 1px solid #d0d0d0; - background: #fff; - margin: -1px 0 0 0; - border-top: 0 none; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + margin: -1px 0 0; + background: #fff; + border: 1px solid #d0d0d0; + border-top: 0 none; -webkit-border-radius: 0 0 3px 3px; -moz-border-radius: 0 0 3px 3px; border-radius: 0 0 3px 3px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .1); + box-shadow: 0 1px 3px rgba(0, 0, 0, .1); } .selectize-dropdown [data-selectable] { - cursor: pointer; overflow: hidden; + cursor: pointer; } .selectize-dropdown [data-selectable] .highlight { - background: rgba(125, 168, 208, 0.2); + background: rgba(125, 168, 208, .2); -webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px; @@ -265,7 +265,7 @@ .selectize-dropdown [data-disabled], .selectize-dropdown [data-disabled] [data-selectable].option { cursor: inherit; - opacity: 0.5; + opacity: .5; } .selectize-dropdown [data-selectable].option { opacity: 1; @@ -275,23 +275,23 @@ } .selectize-dropdown .optgroup-header { color: #303030; - background: #fff; cursor: default; + background: #fff; } .selectize-dropdown .active { - background-color: #f5fafd; color: #495c68; + background-color: #f5fafd; } .selectize-dropdown .active.create { color: #495c68; } .selectize-dropdown .create { - color: rgba(48, 48, 48, 0.5); + color: rgba(48, 48, 48, .5); } .selectize-dropdown-content { - overflow-y: auto; - overflow-x: hidden; max-height: 200px; + overflow-x: hidden; + overflow-y: auto; -webkit-overflow-scrolling: touch; } .selectize-control.single .selectize-input, @@ -302,32 +302,32 @@ .selectize-control.single .selectize-input.input-active input { cursor: text; } -.selectize-control.single .selectize-input:after { - content: ' '; - display: block; +.selectize-control.single .selectize-input::after { position: absolute; top: 50%; right: 15px; - margin-top: -3px; + display: block; width: 0; height: 0; + margin-top: -3px; + content: " "; + border-color: #808080 transparent transparent; border-style: solid; - border-width: 5px 5px 0 5px; - border-color: #808080 transparent transparent transparent; + border-width: 5px 5px 0; } -.selectize-control.single .selectize-input.dropdown-active:after { +.selectize-control.single .selectize-input.dropdown-active::after { margin-top: -4px; - border-width: 0 5px 5px 5px; - border-color: transparent transparent #808080 transparent; + border-color: transparent transparent #808080; + border-width: 0 5px 5px; } -.selectize-control.rtl.single .selectize-input:after { - left: 15px; +.selectize-control.rtl.single .selectize-input::after { right: auto; + left: 15px; } .selectize-control.rtl .selectize-input > input { margin: 0 4px 0 -2px !important; } .selectize-control .selectize-input.disabled { - opacity: 0.5; background-color: #fafafa; + opacity: .5; } From 0c5ca3f3c3f73d3aed3e36991f7263b7a915af2a Mon Sep 17 00:00:00 2001 From: codecalm Date: Sun, 20 Oct 2019 12:03:42 +0200 Subject: [PATCH 07/70] packages from /node_modules, js libs --- build/browsersync.js | 1 + build/copy-libs.js | 7 + build/generate-font-codepoints.js | 27 - build/rollup.config.js | 4 +- build/scss-compile.js | 2 - build/tabler-webfont.hbs | 26 - fonts/tabler-webfont/tabler-webfont.eot | Bin 87340 -> 0 bytes fonts/tabler-webfont/tabler-webfont.svg | 1056 - fonts/tabler-webfont/tabler-webfont.ttf | Bin 87148 -> 0 bytes fonts/tabler-webfont/tabler-webfont.woff | Bin 42028 -> 0 bytes fonts/tabler-webfont/tabler-webfont.woff2 | Bin 34364 -> 0 bytes js/tabler.js | 18 +- package.json | 13 +- pages/_data/libs.json | 9 + pages/_includes/layout/js.html | 28 +- pages/_includes/layout/page-title.html | 2 +- pages/homepage.html | 2 +- pages/index.html | 2 + scss/layout/_page.scss | 4 + scss/tabler.scss | 1 - static/libs/apexcharts/apexcharts.common.js | 28683 --------------- static/libs/apexcharts/apexcharts.esm.js | 28681 --------------- static/libs/apexcharts/apexcharts.js | 28689 ---------------- static/libs/apexcharts/apexcharts.min.js | 6 - static/libs/autosize/autosize.js | 288 - static/libs/autosize/autosize.min.js | 6 - static/libs/bootstrap/js/bootstrap.bundle.js | 7013 ---- .../libs/bootstrap/js/bootstrap.bundle.min.js | 7 - static/libs/bootstrap/js/bootstrap.js | 4435 --- static/libs/bootstrap/js/bootstrap.min.js | 7 - static/libs/imask/imask.min.js | 2 - static/libs/imask/imask.min.js.map | Bin 177108 -> 0 bytes static/libs/jquery/jquery.js | 10364 ------ static/libs/jquery/jquery.min.js | 2 - static/libs/jqvmap/jquery.vmap.js | 1281 - static/libs/jqvmap/jquery.vmap.min.js | 10 - static/libs/jqvmap/jqvmap.css | 50 - static/libs/jqvmap/jqvmap.min.css | 1 - .../maps/continents/jquery.vmap.africa.js | 2 - .../maps/continents/jquery.vmap.asia.js | 2 - .../maps/continents/jquery.vmap.australia.js | 2 - .../maps/continents/jquery.vmap.europe.js | 2 - .../continents/jquery.vmap.north-america.js | 2 - .../continents/jquery.vmap.south-america.js | 2 - .../libs/jqvmap/maps/jquery.vmap.algeria.js | 2 - .../libs/jqvmap/maps/jquery.vmap.argentina.js | 1 - static/libs/jqvmap/maps/jquery.vmap.brazil.js | 2 - static/libs/jqvmap/maps/jquery.vmap.canada.js | 2 - static/libs/jqvmap/maps/jquery.vmap.europe.js | 2 - static/libs/jqvmap/maps/jquery.vmap.france.js | 1 - .../libs/jqvmap/maps/jquery.vmap.germany.js | 2 - static/libs/jqvmap/maps/jquery.vmap.greece.js | 1 - static/libs/jqvmap/maps/jquery.vmap.iran.js | 6 - static/libs/jqvmap/maps/jquery.vmap.iraq.js | 1 - static/libs/jqvmap/maps/jquery.vmap.russia.js | 2 - .../libs/jqvmap/maps/jquery.vmap.tunisia.js | 2 - static/libs/jqvmap/maps/jquery.vmap.turkey.js | 11 - static/libs/jqvmap/maps/jquery.vmap.usa.js | 2 - static/libs/jqvmap/maps/jquery.vmap.world.js | 2 - static/libs/peity/jquery.peity.min.js | 7 - .../selectize/css/selectize.bootstrap2.css | 503 - .../selectize/css/selectize.bootstrap3.css | 417 - static/libs/selectize/css/selectize.css | 333 - .../libs/selectize/css/selectize.default.css | 403 - .../libs/selectize/css/selectize.legacy.css | 380 - static/libs/selectize/js/selectize.js | 3255 -- static/libs/selectize/js/selectize.min.js | 4 - .../libs/selectize/js/standalone/selectize.js | 3891 --- .../selectize/js/standalone/selectize.min.js | 4 - 69 files changed, 59 insertions(+), 119916 deletions(-) create mode 100755 build/copy-libs.js delete mode 100644 build/generate-font-codepoints.js delete mode 100644 build/tabler-webfont.hbs delete mode 100644 fonts/tabler-webfont/tabler-webfont.eot delete mode 100644 fonts/tabler-webfont/tabler-webfont.svg delete mode 100644 fonts/tabler-webfont/tabler-webfont.ttf delete mode 100644 fonts/tabler-webfont/tabler-webfont.woff delete mode 100644 fonts/tabler-webfont/tabler-webfont.woff2 create mode 100644 pages/_data/libs.json delete mode 100644 static/libs/apexcharts/apexcharts.common.js delete mode 100644 static/libs/apexcharts/apexcharts.esm.js delete mode 100644 static/libs/apexcharts/apexcharts.js delete mode 100644 static/libs/apexcharts/apexcharts.min.js delete mode 100644 static/libs/autosize/autosize.js delete mode 100644 static/libs/autosize/autosize.min.js delete mode 100644 static/libs/bootstrap/js/bootstrap.bundle.js delete mode 100644 static/libs/bootstrap/js/bootstrap.bundle.min.js delete mode 100644 static/libs/bootstrap/js/bootstrap.js delete mode 100644 static/libs/bootstrap/js/bootstrap.min.js delete mode 100644 static/libs/imask/imask.min.js delete mode 100644 static/libs/imask/imask.min.js.map delete mode 100644 static/libs/jquery/jquery.js delete mode 100644 static/libs/jquery/jquery.min.js delete mode 100644 static/libs/jqvmap/jquery.vmap.js delete mode 100644 static/libs/jqvmap/jquery.vmap.min.js delete mode 100644 static/libs/jqvmap/jqvmap.css delete mode 100644 static/libs/jqvmap/jqvmap.min.css delete mode 100644 static/libs/jqvmap/maps/continents/jquery.vmap.africa.js delete mode 100644 static/libs/jqvmap/maps/continents/jquery.vmap.asia.js delete mode 100644 static/libs/jqvmap/maps/continents/jquery.vmap.australia.js delete mode 100644 static/libs/jqvmap/maps/continents/jquery.vmap.europe.js delete mode 100644 static/libs/jqvmap/maps/continents/jquery.vmap.north-america.js delete mode 100644 static/libs/jqvmap/maps/continents/jquery.vmap.south-america.js delete mode 100644 static/libs/jqvmap/maps/jquery.vmap.algeria.js delete mode 100644 static/libs/jqvmap/maps/jquery.vmap.argentina.js delete mode 100644 static/libs/jqvmap/maps/jquery.vmap.brazil.js delete mode 100644 static/libs/jqvmap/maps/jquery.vmap.canada.js delete mode 100644 static/libs/jqvmap/maps/jquery.vmap.europe.js delete mode 100644 static/libs/jqvmap/maps/jquery.vmap.france.js delete mode 100644 static/libs/jqvmap/maps/jquery.vmap.germany.js delete mode 100644 static/libs/jqvmap/maps/jquery.vmap.greece.js delete mode 100644 static/libs/jqvmap/maps/jquery.vmap.iran.js delete mode 100644 static/libs/jqvmap/maps/jquery.vmap.iraq.js delete mode 100644 static/libs/jqvmap/maps/jquery.vmap.russia.js delete mode 100644 static/libs/jqvmap/maps/jquery.vmap.tunisia.js delete mode 100644 static/libs/jqvmap/maps/jquery.vmap.turkey.js delete mode 100644 static/libs/jqvmap/maps/jquery.vmap.usa.js delete mode 100644 static/libs/jqvmap/maps/jquery.vmap.world.js delete mode 100644 static/libs/peity/jquery.peity.min.js delete mode 100644 static/libs/selectize/css/selectize.bootstrap2.css delete mode 100644 static/libs/selectize/css/selectize.bootstrap3.css delete mode 100644 static/libs/selectize/css/selectize.css delete mode 100644 static/libs/selectize/css/selectize.default.css delete mode 100644 static/libs/selectize/css/selectize.legacy.css delete mode 100644 static/libs/selectize/js/selectize.js delete mode 100644 static/libs/selectize/js/selectize.min.js delete mode 100644 static/libs/selectize/js/standalone/selectize.js delete mode 100644 static/libs/selectize/js/standalone/selectize.min.js diff --git a/build/browsersync.js b/build/browsersync.js index 778161088..b14032400 100755 --- a/build/browsersync.js +++ b/build/browsersync.js @@ -16,6 +16,7 @@ bs.init({ '/dist/fonts': 'fonts', '/libs': 'static/libs', '/img': 'static/img', + '/node_modules': 'node_modules', }, }, files: ['tmp/**/*', 'dist/css/*.css', 'dist/js/*.js'], diff --git a/build/copy-libs.js b/build/copy-libs.js new file mode 100755 index 000000000..424747a62 --- /dev/null +++ b/build/copy-libs.js @@ -0,0 +1,7 @@ +const libs = require('../pages/_data/libs'); +const { exec } = require('child_process'); + +libs.forEach(function (lib) { + let cmd = `mkdir -p "dist/libs/${lib}" && cp -r node_modules/${lib} dist/libs/${lib}`; + exec(cmd) +}); diff --git a/build/generate-font-codepoints.js b/build/generate-font-codepoints.js deleted file mode 100644 index 9582f0b8e..000000000 --- a/build/generate-font-codepoints.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Tabler (v0.9.0): generate-font-codepoints.js - * Copyright 2018-2019 The Tabler Authors - * Copyright 2018-2019 codecalm - * Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE) - */ - -'use strict'; - -const fs = require('fs'), - path = require('path'), - yaml = require('yaml'); - -const data = fs.readFileSync(path.resolve(__dirname, '../scss/fonts/_tabler-webfont.scss'), 'utf8'), - re = /\$icon-([^\-\s]+)-([^:\s]+):\s'([^'\n]+)';/g; - -let items = {}; - -data.replace(re, function(match, g1, g2, g3) { - if (!items[g1]) { - items[g1] = {}; - } - - items[g1][g2] = g3; -}); - -fs.writeFileSync('pages/_data/icons.yml', yaml.stringify(items)); diff --git a/build/rollup.config.js b/build/rollup.config.js index e78787a5b..10a075ffe 100644 --- a/build/rollup.config.js +++ b/build/rollup.config.js @@ -7,14 +7,13 @@ 'use strict'; -const BUNDLE = process.env.BUNDLE === 'true'; +const BUNDLE = process.env.BUNDLE === 'true'; import path from 'path'; import babel from 'rollup-plugin-babel'; import resolve from 'rollup-plugin-node-resolve'; import minify from 'rollup-plugin-babel-minify'; - const fileDest = 'tabler', banner = require('./banner'); @@ -34,6 +33,7 @@ if (BUNDLE) { } module.exports = { + context: "window", input: { tabler: path.resolve(__dirname, '../js/tabler.js'), 'tabler-charts': path.resolve(__dirname, '../js/tabler-charts.js'), diff --git a/build/scss-compile.js b/build/scss-compile.js index 045ccc4e0..7e3e01294 100644 --- a/build/scss-compile.js +++ b/build/scss-compile.js @@ -5,8 +5,6 @@ * Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE) */ -//node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/tabler.scss dist/css/tabler.css - const path = require('path'), glob = require("glob"), fs = require("fs"), diff --git a/build/tabler-webfont.hbs b/build/tabler-webfont.hbs deleted file mode 100644 index d41f09569..000000000 --- a/build/tabler-webfont.hbs +++ /dev/null @@ -1,26 +0,0 @@ -@font-face { - font-family: '{{ fontName }}'; - src: {{{ src }}}; - font-weight: normal; - font-style: normal; -} - -.icon { - font-family: '{{ fontName }}' !important; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -{{# each codepoints }} -$icon-{{ @key }}: '\\{{ this }}'; -.{{ @key }}:before { - content: $icon-{{ @key }}; -} - -{{/ each }} diff --git a/fonts/tabler-webfont/tabler-webfont.eot b/fonts/tabler-webfont/tabler-webfont.eot deleted file mode 100644 index fc7fd5f8620daf4cc9b5c6afc91d8b13722edccb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87340 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 PJLh@vfgqa3lPCWN&g+>E diff --git a/fonts/tabler-webfont/tabler-webfont.svg b/fonts/tabler-webfont/tabler-webfont.svg deleted file mode 100644 index 0b744cbe5..000000000 --- a/fonts/tabler-webfont/tabler-webfont.svg +++ /dev/null @@ -1,1056 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/fonts/tabler-webfont/tabler-webfont.ttf b/fonts/tabler-webfont/tabler-webfont.ttf deleted file mode 100644 index 5edb6af0c1cbdb2624f8dec546518b4b75fd83c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87148 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 diff --git a/fonts/tabler-webfont/tabler-webfont.woff b/fonts/tabler-webfont/tabler-webfont.woff deleted file mode 100644 index 575ea84caca0569610d589b72161835db1c6fe8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42028 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 W35vwpm=eo;1!?Zo)c*h~`LbOTi0o(p diff --git a/fonts/tabler-webfont/tabler-webfont.woff2 b/fonts/tabler-webfont/tabler-webfont.woff2 deleted file mode 100644 index 22858f829bbf17f8c775e2e7f59413551a3cd751..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34364 zcmbq(LvSVxv}|nKwr$(V7u(6i=ES!1#kOtR*2H!uo>=dH^;U0jSGPB(s_WF*ovNxgqZ_^U7f?bWQ*N`o^?1EE=GAmIl{4mC>RJ9gIB&rg09 z!&pWD^foxCoavff_9Spe?kS?i{YpSQ3^Xo1F^!x2bhGd`xJSj1 zz+9S0eS!Y>T$@=NXjR#h6!xm+o=Rp$>dYi_$M{Z&4PU={z!|n@b_1R4ABtFm2? z{jj068^`a5d131A0KE`O6ENJ7Tv8|;(JJP|eebgO`gwFZ8GTq25s!e{l{aeKw6-;q zs^v6Ln`~$y0srmXg4cqc=);g#!8>{|I+*vPnD3-4-9jL9-MA3FJ!R`it?pj=a++&t zhxPpT^NLOLYJF=%?YBB3F-ghl47f-wQyY@^?>}?yV4yDE52_^;4yUy#z9CZcC*tx^ zNVM&=pD5fAAYi*f6r9Tvh3j_FvdIf*uS8>~&b}*Tt(6qXQUR34%^mA)LDyruNd;$5 zpITNamdD~*cOqW^!R_V`#|5-zk(6XFa$_e$s}v+x$nRb_IROC^%DpI2#8Gt7d!0<&7DNs?fNrn;y#RsQrAw&xf;hoo({R7 zI#0>6oY`Iq2J_Sdx)XpgmLohY6nP_VC4LJuGbLw&4bp`6ub1qd%GZ2A_SzZT$1?=6 z4BsRS>82$gCO#^ux#U->ehPh%j0NSxTdd7yW_(S{w?%@-kL$@#y+hea(9W0rs;M&e zdIq>9aD9YGys48+-c29*MKk+ZE{`RVj9ut{Pav_EW0RngbN~cN%7M7d;!pX?&asfP zfvmSsL#Tx*1YE)W%y)04CatI(d!MH6ks_0|<-9pl>jk9F&r1OJ-H&wf#tz7!14xO8 z3I?bQJ(q|aglHTd32Y/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 G3;+P|cXuKH diff --git a/js/tabler.js b/js/tabler.js index 27c7159af..0942a6762 100644 --- a/js/tabler.js +++ b/js/tabler.js @@ -79,6 +79,8 @@ const tabler = { return color; }, + colors: (window.tabler_colors || []), + toggleFullscreen: function(elem) { elem = elem || document.documentElement; if ( @@ -110,6 +112,8 @@ const tabler = { }, }; + + $(document).ready(function() { const $body = $('body'); @@ -120,19 +124,21 @@ $(document).ready(function() { return false; }); - $('[data-toggle="tooltip"]').tooltip(); - $('[data-toggle="popover"]').popover(); + // $('[data-toggle="tooltip"]').tooltip(); + // $('[data-toggle="popover"]').popover(); /* Autosize plugin */ if (window.autosize) { (function() { - const $elem = $('[data-toggle="autosize"]'); + const elements = document.querySelectorAll('[data-toggle="autosize"]'); - if ($elem) { - $elem.each(function() { - autosize($(this)); + console.log('elements.length', elements.length); + if (elements.length) { + elements.forEach(function(element) { + console.log('1', element); + autosize(element); }); } })(); diff --git a/package.json b/package.json index a3418cdd7..2240b2443 100644 --- a/package.json +++ b/package.json @@ -23,13 +23,13 @@ "watch": "npm-run-all --parallel watch-*", "watch-css": "nodemon --watch scss/ --ext scss --exec \"npm run css-main\"", "watch-js": "nodemon --watch js/ --ext js --exec \"npm run js-compile-standalone\"", - "js": "npm-run-all js-compile", + "js": "npm-run-all --sequential js-compile js-libs", + "js-libs": "rm -rf dist/libs && mkdir dist/libs && node build/copy-libs.js", "js-lint": "eslint --cache --cache-location .cache/.eslintcache js build/", "js-compile": "npm-run-all --sequential js-compile-*", "js-compile-standalone": "rollup --environment BUNDLE:false --config build/rollup.config.js --sourcemap", "js-compile-bundle": "rollup --environment BUNDLE:true --config build/rollup.config.js --sourcemap", - "svg-svgo": "svgo -f svg/fe --pretty && svgo -f svg/brand --pretty", - "svg-iconfont": "mkdir -p svg-tmp && for i in svg/*/*.svg;do N=`echo $i | sed -e 's/^svg\\///g' | sed -e 's/\\\\.svg$//g' | sed -e 's/\\//-/g'`; echo $i; rsvg-convert $i -o svg-tmp/$N.svg -f svg -w 1000; done && svgo ./svg-tmp/*.svg --disable={removeViewBox} && icon-font-generator ./svg-tmp/*.svg -o fonts/tabler-webfont --html false --cssfontsurl ../fonts/tabler-webfont --csstp build/tabler-webfont.hbs --csspath scss/fonts/_tabler-webfont.scss --center --normalize --name tabler-webfont --types svg,eot,ttf,woff,woff2 --json false && rm -rf svg-tmp && node build/generate-font-codepoints.js" + "svg-svgo": "svgo -f svg/fe --pretty && svgo -f svg/brand --pretty" }, "repository": { "type": "git", @@ -50,7 +50,7 @@ "url": "https://github.com/tabler/tabler/issues" }, "engines": { - "node": ">=8" + "node": ">=10" }, "files": [ "dist/{css,js}/*.{css,js,map}", @@ -75,7 +75,6 @@ "node-sass": "4.12.0", "nodemon": "1.19.3", "npm-run-all": "4.1.5", - "popper.js": "1.15.0", "postcss-cli": "6.1.3", "rollup": "1.24.0", "rollup-plugin-babel": "4.3.3", @@ -94,9 +93,11 @@ "dependencies": { "apexcharts": "3.10.0", "autosize": "4.0.2", - "bootstrap": "twbs/bootstrap#b4e957d", + "bootstrap": "twbs/bootstrap#8d56c19", "imask": "5.2.1", "jquery": "3.4.1", + "peity": "3.3.0", + "popper.js": "1.15.0", "selectize": "0.12.6" }, "bundlesize": [ diff --git a/pages/_data/libs.json b/pages/_data/libs.json new file mode 100644 index 000000000..4e1b409b1 --- /dev/null +++ b/pages/_data/libs.json @@ -0,0 +1,9 @@ +[ + "jquery/dist/jquery.min.js", + "bootstrap/dist/js/bootstrap.bundle.min.js", + "autosize/dist/autosize.min.js", + "imask/dist/imask.min.js", + "selectize/dist/js/standalone/selectize.min.js", + "apexcharts/dist/apexcharts.min.js", + "peity/jquery.peity.min.js" +] diff --git a/pages/_includes/layout/js.html b/pages/_includes/layout/js.html index bf84f5898..3d5a35f2b 100644 --- a/pages/_includes/layout/js.html +++ b/pages/_includes/layout/js.html @@ -1,20 +1,18 @@ - - - - - - + + +{% for lib in site.data.libs %} + +{% endfor %} + + - - - + - + diff --git a/pages/_includes/layout/page-title.html b/pages/_includes/layout/page-title.html index d5a4eeea5..a7c4b23a4 100644 --- a/pages/_includes/layout/page-title.html +++ b/pages/_includes/layout/page-title.html @@ -4,7 +4,7 @@
- {% if page.page-subtitle %} + {% if page.page-pretitle %}
Overview diff --git a/pages/homepage.html b/pages/homepage.html index dd1e20deb..b5e714299 100644 --- a/pages/homepage.html +++ b/pages/homepage.html @@ -1,7 +1,7 @@ --- title: Homepage page-title: Homepage -page-subtitle: Overview +page-pretitle: Overview page-title-actions: home --- diff --git a/pages/index.html b/pages/index.html index 8af7553a0..6a82906a0 100644 --- a/pages/index.html +++ b/pages/index.html @@ -1,6 +1,8 @@ --- title: Dashboard page-title: Dashboard +page-pretitle: Overview +page-title-actions: true header-primary: false --- diff --git a/scss/layout/_page.scss b/scss/layout/_page.scss index c3718d7b2..5ade219bb 100644 --- a/scss/layout/_page.scss +++ b/scss/layout/_page.scss @@ -3,6 +3,10 @@ align-items: center; min-height: 2.5rem; margin: .25rem 0 1.5rem; + + >* { + flex: 1; + } } .page-pretitle { diff --git a/scss/tabler.scss b/scss/tabler.scss index e89bc5d77..6fe829974 100644 --- a/scss/tabler.scss +++ b/scss/tabler.scss @@ -51,7 +51,6 @@ @import "vendor/pace"; @import "vendor/selectize"; -@import "utils/api"; @import "utils/border"; @import "utils/background"; @import "utils/colors"; diff --git a/static/libs/apexcharts/apexcharts.common.js b/static/libs/apexcharts/apexcharts.common.js deleted file mode 100644 index 73c856e63..000000000 --- a/static/libs/apexcharts/apexcharts.common.js +++ /dev/null @@ -1,28683 +0,0 @@ -/*! - * ApexCharts v3.6.12 - * (c) 2018-2019 Juned Chhipa - * Released under the MIT License. - */ -'use strict'; - -function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); -} - -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} - -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} - -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; -} - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - -function _objectSpread(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - var ownKeys = Object.keys(source); - - if (typeof Object.getOwnPropertySymbols === 'function') { - ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { - return Object.getOwnPropertyDescriptor(source, sym).enumerable; - })); - } - - ownKeys.forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } - - return target; -} - -function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function"); - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - writable: true, - configurable: true - } - }); - if (superClass) _setPrototypeOf(subClass, superClass); -} - -function _getPrototypeOf(o) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { - return o.__proto__ || Object.getPrototypeOf(o); - }; - return _getPrototypeOf(o); -} - -function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; - - return _setPrototypeOf(o, p); -} - -function _assertThisInitialized(self) { - if (self === void 0) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return self; -} - -function _possibleConstructorReturn(self, call) { - if (call && (typeof call === "object" || typeof call === "function")) { - return call; - } - - return _assertThisInitialized(self); -} - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } -} - -function _iterableToArray(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); -} - -/* - ** Generic functions which are not dependent on ApexCharts - */ -var Utils = -/*#__PURE__*/ -function () { - function Utils() { - _classCallCheck(this, Utils); - } - - _createClass(Utils, [{ - key: "shadeRGBColor", - value: function shadeRGBColor(percent, color) { - var f = color.split(','), - t = percent < 0 ? 0 : 255, - p = percent < 0 ? percent * -1 : percent, - R = parseInt(f[0].slice(4)), - G = parseInt(f[1]), - B = parseInt(f[2]); - return 'rgb(' + (Math.round((t - R) * p) + R) + ',' + (Math.round((t - G) * p) + G) + ',' + (Math.round((t - B) * p) + B) + ')'; - } - }, { - key: "shadeHexColor", - value: function shadeHexColor(percent, color) { - var f = parseInt(color.slice(1), 16), - t = percent < 0 ? 0 : 255, - p = percent < 0 ? percent * -1 : percent, - R = f >> 16, - G = f >> 8 & 0x00ff, - B = f & 0x0000ff; - return '#' + (0x1000000 + (Math.round((t - R) * p) + R) * 0x10000 + (Math.round((t - G) * p) + G) * 0x100 + (Math.round((t - B) * p) + B)).toString(16).slice(1); - } // beautiful color shading blending code - // http://stackoverflow.com/questions/5560248/programmatically-lighten-or-darken-a-hex-color-or-rgb-and-blend-colors - - }, { - key: "shadeColor", - value: function shadeColor(p, color) { - if (color.length > 7) return this.shadeRGBColor(p, color);else return this.shadeHexColor(p, color); - } - }], [{ - key: "bind", - value: function bind(fn, me) { - return function () { - return fn.apply(me, arguments); - }; - } - }, { - key: "isObject", - value: function isObject(item) { - return item && _typeof(item) === 'object' && !Array.isArray(item) && item != null; - } - }, { - key: "listToArray", - value: function listToArray(list) { - var i, - array = []; - - for (i = 0; i < list.length; i++) { - array[i] = list[i]; - } - - return array; - } // to extend defaults with user options - // credit: http://stackoverflow.com/questions/27936772/deep-object-merging-in-es6-es7#answer-34749873 - - }, { - key: "extend", - value: function extend(target, source) { - var _this = this; - - if (typeof Object.assign !== 'function') { - - (function () { - Object.assign = function (target) { - - if (target === undefined || target === null) { - throw new TypeError('Cannot convert undefined or null to object'); - } - - var output = Object(target); - - for (var index = 1; index < arguments.length; index++) { - var _source = arguments[index]; - - if (_source !== undefined && _source !== null) { - for (var nextKey in _source) { - if (_source.hasOwnProperty(nextKey)) { - output[nextKey] = _source[nextKey]; - } - } - } - } - - return output; - }; - })(); - } - - var output = Object.assign({}, target); - - if (this.isObject(target) && this.isObject(source)) { - Object.keys(source).forEach(function (key) { - if (_this.isObject(source[key])) { - if (!(key in target)) { - Object.assign(output, _defineProperty({}, key, source[key])); - } else { - output[key] = _this.extend(target[key], source[key]); - } - } else { - Object.assign(output, _defineProperty({}, key, source[key])); - } - }); - } - - return output; - } - }, { - key: "extendArray", - value: function extendArray(arrToExtend, resultArr) { - var extendedArr = []; - arrToExtend.map(function (item) { - extendedArr.push(Utils.extend(resultArr, item)); - }); - arrToExtend = extendedArr; - return arrToExtend; - } // If month counter exceeds 12, it starts again from 1 - - }, { - key: "monthMod", - value: function monthMod(month) { - return month % 12; - } - }, { - key: "addProps", - value: function addProps(obj, arr, val) { - if (typeof arr === 'string') { - arr = arr.split('.'); - } - - obj[arr[0]] = obj[arr[0]] || {}; - var tmpObj = obj[arr[0]]; - - if (arr.length > 1) { - arr.shift(); - this.addProps(tmpObj, arr, val); - } else { - obj[arr[0]] = val; - } - - return obj; - } - }, { - key: "clone", - value: function clone(source) { - if (Object.prototype.toString.call(source) === '[object Array]') { - var cloneResult = []; - - for (var i = 0; i < source.length; i++) { - cloneResult[i] = this.clone(source[i]); - } - - return cloneResult; - } else if (_typeof(source) === 'object') { - var _cloneResult = {}; - - for (var prop in source) { - if (source.hasOwnProperty(prop)) { - _cloneResult[prop] = this.clone(source[prop]); - } - } - - return _cloneResult; - } else { - return source; - } - } - }, { - key: "log10", - value: function log10(x) { - return Math.log(x) / Math.LN10; - } - }, { - key: "roundToBase10", - value: function roundToBase10(x) { - return Math.pow(10, Math.floor(Math.log10(x))); - } - }, { - key: "roundToBase", - value: function roundToBase(x, base) { - return Math.pow(base, Math.floor(Math.log(x) / Math.log(base))); - } - }, { - key: "parseNumber", - value: function parseNumber(val) { - if (val === null) return val; - return parseFloat(val); - } - }, { - key: "noExponents", - value: function noExponents(val) { - var data = String(val).split(/[eE]/); - if (data.length == 1) return data[0]; - var z = '', - sign = val < 0 ? '-' : '', - str = data[0].replace('.', ''), - mag = Number(data[1]) + 1; - - if (mag < 0) { - z = sign + '0.'; - - while (mag++) { - z += '0'; - } - - return z + str.replace(/^\-/, ''); - } - - mag -= str.length; - - while (mag--) { - z += '0'; - } - - return str + z; - } - }, { - key: "getDimensions", - value: function getDimensions(el) { - var computedStyle = getComputedStyle(el); - var ret = []; - var elementHeight = el.clientHeight; - var elementWidth = el.clientWidth; - elementHeight -= parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom); - elementWidth -= parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight); - ret.push(elementWidth); - ret.push(elementHeight); - return ret; - } - }, { - key: "getBoundingClientRect", - value: function getBoundingClientRect(element) { - var rect = element.getBoundingClientRect(); - return { - top: rect.top, - right: rect.right, - bottom: rect.bottom, - left: rect.left, - width: rect.width, - height: rect.height, - x: rect.x, - y: rect.y - }; - } // http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb#answer-12342275 - - }, { - key: "hexToRgba", - value: function hexToRgba() { - var hex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '#999999'; - var opacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.6; - - if (hex.substring(0, 1) !== '#') { - hex = '#999999'; - } - - var h = hex.replace('#', ''); - h = h.match(new RegExp('(.{' + h.length / 3 + '})', 'g')); - - for (var i = 0; i < h.length; i++) { - h[i] = parseInt(h[i].length === 1 ? h[i] + h[i] : h[i], 16); - } - - if (typeof opacity !== 'undefined') h.push(opacity); - return 'rgba(' + h.join(',') + ')'; - } - }, { - key: "getOpacityFromRGBA", - value: function getOpacityFromRGBA(rgba) { - rgba = rgba.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i); - return rgba[3]; - } - }, { - key: "rgb2hex", - value: function rgb2hex(rgb) { - rgb = rgb.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i); - return rgb && rgb.length === 4 ? '#' + ('0' + parseInt(rgb[1], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[2], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[3], 10).toString(16)).slice(-2) : ''; - } - }, { - key: "isColorHex", - value: function isColorHex(color) { - return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(color); - } - }, { - key: "polarToCartesian", - value: function polarToCartesian(centerX, centerY, radius, angleInDegrees) { - var angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0; - return { - x: centerX + radius * Math.cos(angleInRadians), - y: centerY + radius * Math.sin(angleInRadians) - }; - } - }, { - key: "escapeString", - value: function escapeString(str) { - var escapeWith = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x'; - var newStr = str.toString().slice(); - newStr = newStr.replace(/[` ~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, escapeWith); - return newStr; - } - }, { - key: "negToZero", - value: function negToZero(val) { - return val < 0 ? 0 : val; - } - }, { - key: "moveIndexInArray", - value: function moveIndexInArray(arr, old_index, new_index) { - if (new_index >= arr.length) { - var k = new_index - arr.length + 1; - - while (k--) { - arr.push(undefined); - } - } - - arr.splice(new_index, 0, arr.splice(old_index, 1)[0]); - return arr; - } - }, { - key: "extractNumber", - value: function extractNumber(s) { - return parseFloat(s.replace(/[^\d\.]*/g, '')); - } - }, { - key: "randomString", - value: function randomString(len) { - var text = ''; - var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; - - for (var i = 0; i < len; i++) { - text += possible.charAt(Math.floor(Math.random() * possible.length)); - } - - return text; - } - }, { - key: "findAncestor", - value: function findAncestor(el, cls) { - while ((el = el.parentElement) && !el.classList.contains(cls)) { - } - - return el; - } - }, { - key: "setELstyles", - value: function setELstyles(el, styles) { - for (var key in styles) { - if (styles.hasOwnProperty(key)) { - el.style.key = styles[key]; - } - } - } - }, { - key: "isNumber", - value: function isNumber(value) { - return !isNaN(value) && parseFloat(Number(value)) === value && !isNaN(parseInt(value, 10)); - } - }, { - key: "isFloat", - value: function isFloat(n) { - return Number(n) === n && n % 1 !== 0; - } - }, { - key: "isSafari", - value: function isSafari() { - return /^((?!chrome|android).)*safari/i.test(navigator.userAgent); - } - }, { - key: "isFirefox", - value: function isFirefox() { - return navigator.userAgent.toLowerCase().indexOf('firefox') > -1; - } - }, { - key: "isIE11", - value: function isIE11() { - if (window.navigator.userAgent.indexOf('MSIE') !== -1 || window.navigator.appVersion.indexOf('Trident/') > -1) { - return true; - } - } - }, { - key: "isIE", - value: function isIE() { - var ua = window.navigator.userAgent; - var msie = ua.indexOf('MSIE '); - - if (msie > 0) { - // IE 10 or older => return version number - return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); - } - - var trident = ua.indexOf('Trident/'); - - if (trident > 0) { - // IE 11 => return version number - var rv = ua.indexOf('rv:'); - return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); - } - - var edge = ua.indexOf('Edge/'); - - if (edge > 0) { - // Edge (IE 12+) => return version number - return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); - } // other browser - - - return false; - } - }]); - - return Utils; -}(); - -/** - * ApexCharts Filters Class for setting hover/active states on the paths. - * - * @module Formatters - **/ - -var Filters = -/*#__PURE__*/ -function () { - function Filters(ctx) { - _classCallCheck(this, Filters); - - this.ctx = ctx; - this.w = ctx.w; - } // create a re-usable filter which can be appended other filter effects and applied to multiple elements - - - _createClass(Filters, [{ - key: "getDefaultFilter", - value: function getDefaultFilter(el, i) { - var w = this.w; - el.unfilter(true); - var filter = new window.SVG.Filter(); - filter.size('120%', '180%', '-5%', '-40%'); - - if (w.config.states.normal.filter !== 'none') { - this.applyFilter(el, i, w.config.states.normal.filter.type, w.config.states.normal.filter.value); - } else { - if (w.config.chart.dropShadow.enabled) { - this.dropShadow(el, w.config.chart.dropShadow, i); - } - } - } - }, { - key: "addNormalFilter", - value: function addNormalFilter(el, i) { - var w = this.w; - - if (w.config.chart.dropShadow.enabled) { - this.dropShadow(el, w.config.chart.dropShadow, i); - } - } // appends dropShadow to the filter object which can be chained with other filter effects - - }, { - key: "addLightenFilter", - value: function addLightenFilter(el, i, attrs) { - var _this = this; - - var w = this.w; - var intensity = attrs.intensity; - - if (Utils.isFirefox()) { - return; - } - - el.unfilter(true); - var filter = new window.SVG.Filter(); - filter.size('120%', '180%', '-5%', '-40%'); - el.filter(function (add) { - var shadowAttr = w.config.chart.dropShadow; - - if (shadowAttr.enabled) { - filter = _this.addShadow(add, i, shadowAttr); - } else { - filter = add; - } - - filter.componentTransfer({ - rgb: { - type: 'linear', - slope: 1.5, - intercept: intensity - } - }); - }); - el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); - } // appends dropShadow to the filter object which can be chained with other filter effects - - }, { - key: "addDarkenFilter", - value: function addDarkenFilter(el, i, attrs) { - var _this2 = this; - - var w = this.w; - var intensity = attrs.intensity; - - if (Utils.isFirefox()) { - return; - } - - el.unfilter(true); - var filter = new window.SVG.Filter(); - filter.size('120%', '180%', '-5%', '-40%'); - el.filter(function (add) { - var shadowAttr = w.config.chart.dropShadow; - - if (shadowAttr.enabled) { - filter = _this2.addShadow(add, i, shadowAttr); - } else { - filter = add; - } - - filter.componentTransfer({ - rgb: { - type: 'linear', - slope: intensity - } - }); - }); - el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); - } - }, { - key: "applyFilter", - value: function applyFilter(el, i, filter) { - var intensity = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.5; - - switch (filter) { - case 'none': - { - this.addNormalFilter(el, i); - break; - } - - case 'lighten': - { - this.addLightenFilter(el, i, { - intensity: intensity - }); - break; - } - - case 'darken': - { - this.addDarkenFilter(el, i, { - intensity: intensity - }); - break; - } - - default: - // do nothing - break; - } - } // appends dropShadow to the filter object which can be chained with other filter effects - - }, { - key: "addShadow", - value: function addShadow(add, i, attrs) { - var blur = attrs.blur, - top = attrs.top, - left = attrs.left, - color = attrs.color, - opacity = attrs.opacity; - var shadowBlur = add.flood(Array.isArray(color) ? color[i] : color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source); - return add.blend(add.source, shadowBlur); - } // directly adds dropShadow to the element and returns the same element. - // the only way it is different from the addShadow() function is that addShadow is chainable to other filters, while this function discards all filters and add dropShadow - - }, { - key: "dropShadow", - value: function dropShadow(el, attrs) { - var i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - var top = attrs.top, - left = attrs.left, - blur = attrs.blur, - color = attrs.color, - opacity = attrs.opacity, - noUserSpaceOnUse = attrs.noUserSpaceOnUse; - el.unfilter(true); - color = Array.isArray(color) ? color[i] : color; - var filter = new window.SVG.Filter(); - filter.size('120%', '180%', '-5%', '-40%'); - el.filter(function (add) { - var shadowBlur = null; - - if (Utils.isSafari() || Utils.isFirefox() || Utils.isIE()) { - // safari/firefox has some alternative way to use this filter - shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur); - } else { - shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source); - } - - add.blend(add.source, shadowBlur); - }); - - if (!noUserSpaceOnUse) { - el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); - } - - return el; - } - }, { - key: "setSelectionFilter", - value: function setSelectionFilter(el, realIndex, dataPointIndex) { - var w = this.w; - - if (typeof w.globals.selectedDataPoints[realIndex] !== 'undefined') { - if (w.globals.selectedDataPoints[realIndex].indexOf(dataPointIndex) > -1) { - el.node.setAttribute('selected', true); - var activeFilter = w.config.states.active.filter; - - if (activeFilter !== 'none') { - this.applyFilter(el, realIndex, activeFilter.type, activeFilter.value); - } - } - } - } - }]); - - return Filters; -}(); - -/** - * ApexCharts Animation Class. - * - * @module Animations - **/ - -var Animations = -/*#__PURE__*/ -function () { - function Animations(ctx) { - _classCallCheck(this, Animations); - - this.ctx = ctx; - this.w = ctx.w; - this.setEasingFunctions(); - } - - _createClass(Animations, [{ - key: "setEasingFunctions", - value: function setEasingFunctions() { - var easing; - var userDefinedEasing = this.w.config.chart.animations.easing; - - switch (userDefinedEasing) { - case 'linear': - { - easing = '-'; - break; - } - - case 'easein': - { - easing = '<'; - break; - } - - case 'easeout': - { - easing = '>'; - break; - } - - case 'easeinout': - { - easing = '<>'; - break; - } - - case 'swing': - { - easing = function easing(pos) { - var s = 1.70158; - return (pos -= 1) * pos * ((s + 1) * pos + s) + 1; - }; - - break; - } - - case 'bounce': - { - easing = function easing(pos) { - if (pos < 1 / 2.75) { - return 7.5625 * pos * pos; - } else if (pos < 2 / 2.75) { - return 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75; - } else if (pos < 2.5 / 2.75) { - return 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375; - } else { - return 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375; - } - }; - - break; - } - - case 'elastic': - { - easing = function easing(pos) { - if (pos === !!pos) return pos; - return Math.pow(2, -10 * pos) * Math.sin((pos - 0.075) * (2 * Math.PI) / 0.3) + 1; - }; - - break; - } - - default: - { - easing = '<>'; - } - } - - this.w.globals.easing = easing; - } - }, { - key: "animateLine", - value: function animateLine(el, from, to, speed) { - el.attr(from).animate(speed).attr(to); - } - /* - ** Animate radius of a circle element - */ - - }, { - key: "animateCircleRadius", - value: function animateCircleRadius(el, from, to, speed, easing) { - if (!from) from = 0; - el.attr({ - r: from - }).animate(speed, easing).attr({ - r: to - }); - } - /* - ** Animate radius and position of a circle element - */ - - }, { - key: "animateCircle", - value: function animateCircle(el, from, to, speed, easing) { - el.attr({ - r: from.r, - cx: from.cx, - cy: from.cy - }).animate(speed, easing).attr({ - r: to.r, - cx: to.cx, - cy: to.cy - }); - } - /* - ** Animate rect properties - */ - - }, { - key: "animateRect", - value: function animateRect(el, from, to, speed, fn) { - el.attr(from).animate(speed).attr(to).afterAll(function () { - fn(); - }); - } - }, { - key: "animatePathsGradually", - value: function animatePathsGradually(params) { - var el = params.el, - j = params.j, - pathFrom = params.pathFrom, - pathTo = params.pathTo, - speed = params.speed, - delay = params.delay, - strokeWidth = params.strokeWidth; - var me = this; - var w = this.w; - var delayFactor = 0; - - if (w.config.chart.animations.animateGradually.enabled) { - delayFactor = w.config.chart.animations.animateGradually.delay; - } - - if (w.config.chart.animations.dynamicAnimation.enabled && w.globals.dataChanged) { - delayFactor = 0; - } - - me.morphSVG(el, j, pathFrom, pathTo, speed, strokeWidth, delay * delayFactor); - } - }, { - key: "showDelayedElements", - value: function showDelayedElements() { - this.w.globals.delayedElements.forEach(function (d) { - var ele = d.el; - ele.classList.remove('hidden'); - }); - } // SVG.js animation for morphing one path to another - - }, { - key: "morphSVG", - value: function morphSVG(el, j, pathFrom, pathTo, speed, strokeWidth, delay) { - var _this = this; - - var w = this.w; - - if (!pathFrom) { - pathFrom = el.attr('pathFrom'); - } - - if (!pathTo) { - pathTo = el.attr('pathTo'); - } - - if (!pathFrom || pathFrom.indexOf('undefined') > -1 || pathFrom.indexOf('NaN') > -1) { - pathFrom = "M 0 ".concat(w.globals.gridHeight); - speed = 1; - } - - if (pathTo.indexOf('undefined') > -1 || pathTo.indexOf('NaN') > -1) { - pathTo = "M 0 ".concat(w.globals.gridHeight); - speed = 1; - } - - if (!w.globals.shouldAnimate) { - speed = 1; - } - - el.plot(pathFrom).animate(1, w.globals.easing, delay).plot(pathFrom).animate(speed, w.globals.easing, delay).plot(pathTo).afterAll(function () { - // a flag to indicate that the original mount function can return true now as animation finished here - if (Utils.isNumber(j)) { - if (j === w.globals.series[w.globals.maxValsInArrayIndex].length - 2 && w.globals.shouldAnimate) { - w.globals.animationEnded = true; - } - } else if (w.globals.shouldAnimate) { - w.globals.animationEnded = true; - - if (typeof w.config.chart.events.animationEnd === 'function') { - w.config.chart.events.animationEnd(_this.ctx, w); - } - } - - _this.showDelayedElements(); - }); - } - }]); - - return Animations; -}(); - -/** - * ApexCharts Graphics Class for all drawing operations. - * - * @module Graphics - **/ - -var Graphics = -/*#__PURE__*/ -function () { - function Graphics(ctx) { - _classCallCheck(this, Graphics); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Graphics, [{ - key: "drawLine", - value: function drawLine(x1, y1, x2, y2) { - var lineColor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '#a8a8a8'; - var dashArray = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; - var strokeWidth = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null; - var w = this.w; - var line = w.globals.dom.Paper.line().attr({ - x1: x1, - y1: y1, - x2: x2, - y2: y2, - stroke: lineColor, - 'stroke-dasharray': dashArray, - 'stroke-width': strokeWidth - }); - return line; - } - }, { - key: "drawRect", - value: function drawRect() { - var x1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - var y1 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - var x2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - var y2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; - var radius = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; - var color = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '#fefefe'; - var opacity = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 1; - var strokeWidth = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; - var strokeColor = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : null; - var strokeDashArray = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 0; - var w = this.w; - var rect = w.globals.dom.Paper.rect(); - rect.attr({ - x: x1, - y: y1, - width: x2 > 0 ? x2 : 0, - height: y2 > 0 ? y2 : 0, - rx: radius, - ry: radius, - fill: color, - opacity: opacity, - 'stroke-width': strokeWidth !== null ? strokeWidth : 0, - stroke: strokeColor !== null ? strokeColor : 'none', - 'stroke-dasharray': strokeDashArray - }); - return rect; - } - }, { - key: "drawPolygon", - value: function drawPolygon(polygonString) { - var stroke = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#e1e1e1'; - var fill = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'none'; - var w = this.w; - var polygon = w.globals.dom.Paper.polygon(polygonString).attr({ - fill: fill, - stroke: stroke - }); - return polygon; - } - }, { - key: "drawCircle", - value: function drawCircle(radius) { - var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var w = this.w; - var c = w.globals.dom.Paper.circle(radius * 2); - - if (attrs !== null) { - c.attr(attrs); - } - - return c; - } - }, { - key: "drawPath", - value: function drawPath(_ref) { - var _ref$d = _ref.d, - d = _ref$d === void 0 ? '' : _ref$d, - _ref$stroke = _ref.stroke, - stroke = _ref$stroke === void 0 ? '#a8a8a8' : _ref$stroke, - _ref$strokeWidth = _ref.strokeWidth, - strokeWidth = _ref$strokeWidth === void 0 ? 1 : _ref$strokeWidth, - fill = _ref.fill, - _ref$fillOpacity = _ref.fillOpacity, - fillOpacity = _ref$fillOpacity === void 0 ? 1 : _ref$fillOpacity, - _ref$strokeOpacity = _ref.strokeOpacity, - strokeOpacity = _ref$strokeOpacity === void 0 ? 1 : _ref$strokeOpacity, - classes = _ref.classes, - _ref$strokeLinecap = _ref.strokeLinecap, - strokeLinecap = _ref$strokeLinecap === void 0 ? null : _ref$strokeLinecap, - _ref$strokeDashArray = _ref.strokeDashArray, - strokeDashArray = _ref$strokeDashArray === void 0 ? 0 : _ref$strokeDashArray; - var w = this.w; - - if (strokeLinecap === null) { - strokeLinecap = w.config.stroke.lineCap; - } - - if (d.indexOf('undefined') > -1 || d.indexOf('NaN') > -1) { - d = "M 0 ".concat(w.globals.gridHeight); - } - - var p = w.globals.dom.Paper.path(d).attr({ - fill: fill, - 'fill-opacity': fillOpacity, - stroke: stroke, - 'stroke-opacity': strokeOpacity, - 'stroke-linecap': strokeLinecap, - 'stroke-width': strokeWidth, - 'stroke-dasharray': strokeDashArray, - class: classes - }); - return p; - } - }, { - key: "group", - value: function group() { - var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var w = this.w; - var g = w.globals.dom.Paper.group(); - - if (attrs !== null) { - g.attr(attrs); - } - - return g; - } - }, { - key: "move", - value: function move(x, y) { - var move = ['M', x, y].join(' '); - return move; - } - }, { - key: "line", - value: function line(x, y) { - var hORv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var line = null; - - if (hORv === null) { - line = ['L', x, y].join(' '); - } else if (hORv === 'H') { - line = ['H', x].join(' '); - } else if (hORv === 'V') { - line = ['V', y].join(' '); - } - - return line; - } - }, { - key: "curve", - value: function curve(x1, y1, x2, y2, x, y) { - var curve = ['C', x1, y1, x2, y2, x, y].join(' '); - return curve; - } - }, { - key: "quadraticCurve", - value: function quadraticCurve(x1, y1, x, y) { - var curve = ['Q', x1, y1, x, y].join(' '); - return curve; - } - }, { - key: "arc", - value: function arc(rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y) { - var relative = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false; - var coord = 'A'; - if (relative) coord = 'a'; - var arc = [coord, rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y].join(' '); - return arc; - } - /** - * @memberof Graphics - * @param {object} - * i = series's index - * realIndex = realIndex is series's actual index when it was drawn time. After several redraws, the iterating "i" may change in loops, but realIndex doesn't - * pathFrom = existing pathFrom to animateTo - * pathTo = new Path to which d attr will be animated from pathFrom to pathTo - * stroke = line Color - * strokeWidth = width of path Line - * fill = it can be gradient, single color, pattern or image - * animationDelay = how much to delay when starting animation (in milliseconds) - * dataChangeSpeed = for dynamic animations, when data changes - * className = class attribute to add - * @return {object} svg.js path object - **/ - - }, { - key: "renderPaths", - value: function renderPaths(_ref2) { - var i = _ref2.i, - j = _ref2.j, - realIndex = _ref2.realIndex, - pathFrom = _ref2.pathFrom, - pathTo = _ref2.pathTo, - stroke = _ref2.stroke, - strokeWidth = _ref2.strokeWidth, - strokeLinecap = _ref2.strokeLinecap, - fill = _ref2.fill, - animationDelay = _ref2.animationDelay, - initialSpeed = _ref2.initialSpeed, - dataChangeSpeed = _ref2.dataChangeSpeed, - className = _ref2.className, - id = _ref2.id, - _ref2$shouldClipToGri = _ref2.shouldClipToGrid, - shouldClipToGrid = _ref2$shouldClipToGri === void 0 ? true : _ref2$shouldClipToGri, - _ref2$bindEventsOnPat = _ref2.bindEventsOnPaths, - bindEventsOnPaths = _ref2$bindEventsOnPat === void 0 ? true : _ref2$bindEventsOnPat, - _ref2$drawShadow = _ref2.drawShadow, - drawShadow = _ref2$drawShadow === void 0 ? true : _ref2$drawShadow; - var w = this.w; - var filters = new Filters(this.ctx); - var anim = new Animations(this.ctx); - var initialAnim = this.w.config.chart.animations.enabled; - var dynamicAnim = initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; - var d; - var shouldAnimate = !!(initialAnim && !w.globals.resized || dynamicAnim && w.globals.dataChanged && w.globals.shouldAnimate); - - if (shouldAnimate) { - d = pathFrom; - } else { - d = pathTo; - this.w.globals.animationEnded = true; - } - - var strokeDashArrayOpt = w.config.stroke.dashArray; - var strokeDashArray = 0; - - if (Array.isArray(strokeDashArrayOpt)) { - strokeDashArray = strokeDashArrayOpt[realIndex]; - } else { - strokeDashArray = w.config.stroke.dashArray; - } - - var el = this.drawPath({ - d: d, - stroke: stroke, - strokeWidth: strokeWidth, - fill: fill, - fillOpacity: 1, - classes: className, - strokeLinecap: strokeLinecap, - strokeDashArray: strokeDashArray - }); - el.attr('id', "".concat(id, "-").concat(i)); - el.attr('index', realIndex); - - if (shouldClipToGrid) { - el.attr({ - 'clip-path': "url(#gridRectMask".concat(w.globals.cuid, ")") - }); - } // const defaultFilter = el.filterer - - - if (w.config.states.normal.filter.type !== 'none') { - filters.getDefaultFilter(el, realIndex); - } else { - if (w.config.chart.dropShadow.enabled && drawShadow) { - if (!w.config.chart.dropShadow.enabledSeries || w.config.chart.dropShadow.enabledSeries && w.config.chart.dropShadow.enabledSeries.indexOf(realIndex) !== -1) { - var shadow = w.config.chart.dropShadow; - filters.dropShadow(el, shadow, realIndex); - } - } - } - - if (bindEventsOnPaths) { - el.node.addEventListener('mouseenter', this.pathMouseEnter.bind(this, el)); - el.node.addEventListener('mouseleave', this.pathMouseLeave.bind(this, el)); - el.node.addEventListener('mousedown', this.pathMouseDown.bind(this, el)); - } - - el.attr({ - pathTo: pathTo, - pathFrom: pathFrom - }); - var defaultAnimateOpts = { - el: el, - j: j, - pathFrom: pathFrom, - pathTo: pathTo, - strokeWidth: strokeWidth - }; - - if (initialAnim && !w.globals.resized && !w.globals.dataChanged) { - anim.animatePathsGradually(_objectSpread({}, defaultAnimateOpts, { - speed: initialSpeed, - delay: animationDelay - })); - } else { - if (w.globals.resized || !w.globals.dataChanged) { - anim.showDelayedElements(); - } - } - - if (w.globals.dataChanged && dynamicAnim && shouldAnimate) { - anim.animatePathsGradually(_objectSpread({}, defaultAnimateOpts, { - speed: dataChangeSpeed - })); - } - - return el; - } - }, { - key: "drawPattern", - value: function drawPattern(style, width, height) { - var stroke = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '#a8a8a8'; - var strokeWidth = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; - var w = this.w; - var p = w.globals.dom.Paper.pattern(width, height, function (add) { - if (style === 'horizontalLines') { - add.line(0, 0, height, 0).stroke({ - color: stroke, - width: strokeWidth + 1 - }); - } else if (style === 'verticalLines') { - add.line(0, 0, 0, width).stroke({ - color: stroke, - width: strokeWidth + 1 - }); - } else if (style === 'slantedLines') { - add.line(0, 0, width, height).stroke({ - color: stroke, - width: strokeWidth - }); - } else if (style === 'squares') { - add.rect(width, height).fill('none').stroke({ - color: stroke, - width: strokeWidth - }); - } else if (style === 'circles') { - add.circle(width).fill('none').stroke({ - color: stroke, - width: strokeWidth - }); - } - }); - return p; - } - }, { - key: "drawGradient", - value: function drawGradient(style, gfrom, gto, opacityFrom, opacityTo) { - var size = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; - var stops = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null; - var colorStops = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; - var i = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 0; - var w = this.w; - var g; - gfrom = Utils.hexToRgba(gfrom, opacityFrom); - gto = Utils.hexToRgba(gto, opacityTo); - var stop1 = 0; - var stop2 = 1; - var stop3 = 1; - var stop4 = null; - - if (stops !== null) { - stop1 = typeof stops[0] !== 'undefined' ? stops[0] / 100 : 0; - stop2 = typeof stops[1] !== 'undefined' ? stops[1] / 100 : 1; - stop3 = typeof stops[2] !== 'undefined' ? stops[2] / 100 : 1; - stop4 = typeof stops[3] !== 'undefined' ? stops[3] / 100 : null; - } - - var radial = !!(w.config.chart.type === 'donut' || w.config.chart.type === 'pie' || w.config.chart.type === 'bubble'); - - if (colorStops === null || colorStops.length === 0) { - g = w.globals.dom.Paper.gradient(radial ? 'radial' : 'linear', function (stop) { - stop.at(stop1, gfrom, opacityFrom); - stop.at(stop2, gto, opacityTo); - stop.at(stop3, gto, opacityTo); - - if (stop4 !== null) { - stop.at(stop4, gfrom, opacityFrom); - } - }); - } else { - g = w.globals.dom.Paper.gradient(radial ? 'radial' : 'linear', function (stop) { - var stops = Array.isArray(colorStops[i]) ? colorStops[i] : colorStops; - stops.forEach(function (s) { - stop.at(s.offset / 100, s.color, s.opacity); - }); - }); - } - - if (!radial) { - if (style === 'vertical') { - g.from(0, 0).to(0, 1); - } else if (style === 'diagonal') { - g.from(0, 0).to(1, 1); - } else if (style === 'horizontal') { - g.from(0, 1).to(1, 1); - } else if (style === 'diagonal2') { - g.from(0, 1).to(2, 2); - } - } else { - var offx = w.globals.gridWidth / 2; - var offy = w.globals.gridHeight / 2; - - if (w.config.chart.type !== 'bubble') { - g.attr({ - gradientUnits: 'userSpaceOnUse', - cx: offx, - cy: offy, - r: size - }); - } else { - g.attr({ - cx: 0.5, - cy: 0.5, - r: 0.8, - fx: 0.2, - fy: 0.2 - }); - } - } - - return g; - } - }, { - key: "drawText", - value: function drawText(opts) { - var w = this.w; - var x = opts.x, - y = opts.y, - text = opts.text, - textAnchor = opts.textAnchor, - fontSize = opts.fontSize, - fontFamily = opts.fontFamily, - foreColor = opts.foreColor, - opacity = opts.opacity; - if (typeof text === 'undefined') text = ''; - - if (!textAnchor) { - textAnchor = 'start'; - } - - if (!foreColor) { - foreColor = w.config.chart.foreColor; - } - - fontFamily = fontFamily || w.config.chart.fontFamily; - var elText; - - if (Array.isArray(text)) { - elText = w.globals.dom.Paper.text(function (add) { - for (var i = 0; i < text.length; i++) { - add.tspan(text[i]); - } - }); - } else { - elText = w.globals.dom.Paper.plain(text); - } - - elText.attr({ - x: x, - y: y, - 'text-anchor': textAnchor, - 'dominant-baseline': 'auto', - 'font-size': fontSize, - 'font-family': fontFamily, - fill: foreColor, - class: 'apexcharts-text ' + opts.cssClass ? opts.cssClass : '' - }); - elText.node.style.fontFamily = fontFamily; - elText.node.style.opacity = opacity; - return elText; - } - }, { - key: "addTspan", - value: function addTspan(textEl, text, fontFamily) { - var tspan = textEl.tspan(text); - - if (!fontFamily) { - fontFamily = this.w.config.chart.fontFamily; - } - - tspan.node.style.fontFamily = fontFamily; - } - }, { - key: "drawMarker", - value: function drawMarker(x, y, opts) { - x = x || 0; - var size = opts.pSize || 0; - var elPoint = null; - - if (opts.shape === 'square') { - var radius = opts.pRadius === undefined ? size / 2 : opts.pRadius; - - if (y === null) { - size = 0; - radius = 0; - } - - var nSize = size * 1.2 + radius; - var p = this.drawRect(nSize, nSize, nSize, nSize, radius); - p.attr({ - x: x - nSize / 2, - y: y - nSize / 2, - cx: x, - cy: y, - class: opts.class ? opts.class : '', - fill: opts.pointFillColor, - 'fill-opacity': opts.pointFillOpacity ? opts.pointFillOpacity : 1, - stroke: opts.pointStrokeColor, - 'stroke-width': opts.pWidth ? opts.pWidth : 0, - 'stroke-opacity': opts.pointStrokeOpacity ? opts.pointStrokeOpacity : 1 - }); - elPoint = p; - } else if (opts.shape === 'circle') { - if (!Utils.isNumber(y)) { - size = 0; - y = 0; - } // let nSize = size - opts.pRadius / 2 < 0 ? 0 : size - opts.pRadius / 2 - - - elPoint = this.drawCircle(size, { - cx: x, - cy: y, - class: opts.class ? opts.class : '', - stroke: opts.pointStrokeColor, - fill: opts.pointFillColor, - 'fill-opacity': opts.pointFillOpacity ? opts.pointFillOpacity : 1, - 'stroke-width': opts.pWidth ? opts.pWidth : 0, - 'stroke-opacity': opts.pointStrokeOpacity ? opts.pointStrokeOpacity : 1 - }); - } - - return elPoint; - } - }, { - key: "pathMouseEnter", - value: function pathMouseEnter(path, e) { - var w = this.w; - var filters = new Filters(this.ctx); - var i = parseInt(path.node.getAttribute('index')); - var j = parseInt(path.node.getAttribute('j')); - - if (typeof w.config.chart.events.dataPointMouseEnter === 'function') { - w.config.chart.events.dataPointMouseEnter(e, this.ctx, { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - - this.ctx.fireEvent('dataPointMouseEnter', [e, this.ctx, { - seriesIndex: i, - dataPointIndex: j, - w: w - }]); - - if (w.config.states.active.filter.type !== 'none') { - if (path.node.getAttribute('selected') === 'true') { - return; - } - } - - if (w.config.states.hover.filter.type !== 'none') { - if (w.config.states.active.filter.type !== 'none' && !w.globals.isTouchDevice) { - var hoverFilter = w.config.states.hover.filter; - filters.applyFilter(path, i, hoverFilter.type, hoverFilter.value); - } - } - } - }, { - key: "pathMouseLeave", - value: function pathMouseLeave(path, e) { - var w = this.w; - var filters = new Filters(this.ctx); - var i = parseInt(path.node.getAttribute('index')); - var j = parseInt(path.node.getAttribute('j')); - - if (typeof w.config.chart.events.dataPointMouseLeave === 'function') { - w.config.chart.events.dataPointMouseLeave(e, this.ctx, { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - - this.ctx.fireEvent('dataPointMouseLeave', [e, this.ctx, { - seriesIndex: i, - dataPointIndex: j, - w: w - }]); - - if (w.config.states.active.filter.type !== 'none') { - if (path.node.getAttribute('selected') === 'true') { - return; - } - } - - if (w.config.states.hover.filter.type !== 'none') { - filters.getDefaultFilter(path, i); - } - } - }, { - key: "pathMouseDown", - value: function pathMouseDown(path, e) { - var w = this.w; - var filters = new Filters(this.ctx); - var i = parseInt(path.node.getAttribute('index')); - var j = parseInt(path.node.getAttribute('j')); - var selected = 'false'; - - if (path.node.getAttribute('selected') === 'true') { - path.node.setAttribute('selected', 'false'); - - if (w.globals.selectedDataPoints[i].indexOf(j) > -1) { - var index = w.globals.selectedDataPoints[i].indexOf(j); - w.globals.selectedDataPoints[i].splice(index, 1); - } - } else { - if (!w.config.states.active.allowMultipleDataPointsSelection && w.globals.selectedDataPoints.length > 0) { - w.globals.selectedDataPoints = []; - var elPaths = w.globals.dom.Paper.select('.apexcharts-series path').members; - var elCircles = w.globals.dom.Paper.select('.apexcharts-series circle, .apexcharts-series rect').members; - elPaths.forEach(function (elPath) { - elPath.node.setAttribute('selected', 'false'); - filters.getDefaultFilter(elPath, i); - }); - elCircles.forEach(function (circle) { - circle.node.setAttribute('selected', 'false'); - filters.getDefaultFilter(circle, i); - }); - } - - path.node.setAttribute('selected', 'true'); - selected = 'true'; - - if (typeof w.globals.selectedDataPoints[i] === 'undefined') { - w.globals.selectedDataPoints[i] = []; - } - - w.globals.selectedDataPoints[i].push(j); - } - - if (selected === 'true') { - var activeFilter = w.config.states.active.filter; - - if (activeFilter !== 'none') { - filters.applyFilter(path, i, activeFilter.type, activeFilter.value); - } - } else { - if (w.config.states.active.filter.type !== 'none') { - filters.getDefaultFilter(path, i); - } - } - - if (typeof w.config.chart.events.dataPointSelection === 'function') { - w.config.chart.events.dataPointSelection(e, this.ctx, { - selectedDataPoints: w.globals.selectedDataPoints, - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - - this.ctx.fireEvent('dataPointSelection', [e, this.ctx, { - selectedDataPoints: w.globals.selectedDataPoints, - seriesIndex: i, - dataPointIndex: j, - w: w - }]); // if (this.w.config.chart.selection.selectedPoints !== undefined) { - // this.w.config.chart.selection.selectedPoints(w.globals.selectedDataPoints) - // } - } - }, { - key: "rotateAroundCenter", - value: function rotateAroundCenter(el) { - var coord = el.getBBox(); - var x = coord.x + coord.width / 2; - var y = coord.y + coord.height / 2; - return { - x: x, - y: y - }; - } - }, { - key: "getTextRects", - value: function getTextRects(text, fontSize, fontFamily, transform) { - var useBBox = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; - var w = this.w; - var virtualText = this.drawText({ - x: -200, - y: -200, - text: text, - textAnchor: 'start', - fontSize: fontSize, - fontFamily: fontFamily, - foreColor: '#fff', - opacity: 0 - }); - - if (transform) { - virtualText.attr('transform', transform); - } - - w.globals.dom.Paper.add(virtualText); - var rect = virtualText.bbox(); - - if (!useBBox) { - rect = virtualText.node.getBoundingClientRect(); - } - - virtualText.remove(); - return { - width: rect.width, - height: rect.height - }; - } - /** - * append ... to long text - * http://stackoverflow.com/questions/9241315/trimming-text-to-a-given-pixel-width-in-svg - * @memberof Graphics - **/ - - }, { - key: "placeTextWithEllipsis", - value: function placeTextWithEllipsis(textObj, textString, width) { - textObj.textContent = textString; - - if (textString.length > 0) { - // ellipsis is needed - if (textObj.getSubStringLength(0, textString.length) >= width) { - for (var x = textString.length - 3; x > 0; x -= 3) { - if (textObj.getSubStringLength(0, x) <= width) { - textObj.textContent = textString.substring(0, x) + '...'; - return; - } - } - - textObj.textContent = '...'; // can't place at all - } - } - } - }], [{ - key: "setAttrs", - value: function setAttrs(el, attrs) { - for (var key in attrs) { - if (attrs.hasOwnProperty(key)) { - el.setAttribute(key, attrs[key]); - } - } - } - }]); - - return Graphics; -}(); - -const name = "en"; -const options = { - 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" - ], - days: [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ], - shortDays: [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ], - toolbar: { - exportToSVG: "Download SVG", - exportToPNG: "Download PNG", - menu: "Menu", - selection: "Selection", - selectionZoom: "Selection Zoom", - zoomIn: "Zoom In", - zoomOut: "Zoom Out", - pan: "Panning", - reset: "Reset Zoom" - } -}; -var en = { - name: name, - options: options -}; - -var Options = -/*#__PURE__*/ -function () { - function Options() { - _classCallCheck(this, Options); - - this.yAxis = { - show: true, - showAlways: false, - seriesName: undefined, - opposite: false, - reversed: false, - logarithmic: false, - tickAmount: undefined, - forceNiceScale: false, - max: undefined, - min: undefined, - floating: false, - decimalsInFloat: undefined, - labels: { - show: true, - minWidth: 0, - maxWidth: 160, - offsetX: 0, - offsetY: 0, - align: undefined, - rotate: 0, - padding: 20, - style: { - colors: [], - fontSize: '11px', - fontFamily: undefined, - cssClass: '' - }, - formatter: undefined - }, - axisBorder: { - show: false, - color: '#78909C', - offsetX: 0, - offsetY: 0 - }, - axisTicks: { - show: false, - color: '#78909C', - width: 6, - offsetX: 0, - offsetY: 0 - }, - title: { - text: undefined, - rotate: 90, - offsetY: 0, - offsetX: 0, - style: { - color: undefined, - fontSize: '11px', - fontFamily: undefined, - cssClass: '' - } - }, - tooltip: { - enabled: false, - offsetX: 0 - }, - crosshairs: { - show: true, - position: 'front', - stroke: { - color: '#b6b6b6', - width: 1, - dashArray: 0 - } - } - }; - this.xAxisAnnotation = { - x: 0, - x2: null, - strokeDashArray: 1, - fillColor: '#c2c2c2', - borderColor: '#c2c2c2', - opacity: 0.3, - offsetX: 0, - offsetY: 0, - label: { - borderColor: '#c2c2c2', - borderWidth: 1, - text: undefined, - textAnchor: 'middle', - orientation: 'vertical', - position: 'top', - offsetX: 0, - offsetY: 0, - style: { - background: '#fff', - color: undefined, - fontSize: '11px', - fontFamily: undefined, - cssClass: '', - padding: { - left: 5, - right: 5, - top: 2, - bottom: 2 - } - } - } - }; - this.yAxisAnnotation = { - y: 0, - y2: null, - strokeDashArray: 1, - fillColor: '#c2c2c2', - borderColor: '#c2c2c2', - opacity: 0.3, - offsetX: 0, - offsetY: 0, - yAxisIndex: 0, - label: { - borderColor: '#c2c2c2', - borderWidth: 1, - text: undefined, - textAnchor: 'end', - position: 'right', - offsetX: 0, - offsetY: -3, - style: { - background: '#fff', - color: undefined, - fontSize: '11px', - fontFamily: undefined, - cssClass: '', - padding: { - left: 5, - right: 5, - top: 0, - bottom: 2 - } - } - } - }; - this.pointAnnotation = { - x: 0, - y: null, - yAxisIndex: 0, - seriesIndex: 0, - marker: { - size: 0, - fillColor: '#fff', - strokeWidth: 2, - strokeColor: '#333', - shape: 'circle', - offsetX: 0, - offsetY: 0, - radius: 2, - cssClass: '' - }, - label: { - borderColor: '#c2c2c2', - borderWidth: 1, - text: undefined, - textAnchor: 'middle', - offsetX: 0, - offsetY: -15, - style: { - background: '#fff', - color: undefined, - fontSize: '11px', - fontFamily: undefined, - cssClass: '', - padding: { - left: 5, - right: 5, - top: 0, - bottom: 2 - } - } - }, - customSVG: { - SVG: undefined, - cssClass: undefined, - offsetX: 0, - offsetY: 0 - } - }; - } - - _createClass(Options, [{ - key: "init", - value: function init() { - return { - annotations: { - position: 'front', - yaxis: [this.yAxisAnnotation], - xaxis: [this.xAxisAnnotation], - points: [this.pointAnnotation] - }, - chart: { - animations: { - enabled: true, - easing: 'easeinout', - // linear, easeout, easein, easeinout, swing, bounce, elastic - speed: 800, - animateGradually: { - delay: 150, - enabled: true - }, - dynamicAnimation: { - enabled: true, - speed: 350 - } - }, - background: 'transparent', - locales: [en], - defaultLocale: 'en', - dropShadow: { - enabled: false, - enabledSeries: undefined, - top: 2, - left: 2, - blur: 4, - color: '#000', - opacity: 0.35 - }, - events: { - animationEnd: undefined, - beforeMount: undefined, - mounted: undefined, - updated: undefined, - click: undefined, - legendClick: undefined, - markerClick: undefined, - selection: undefined, - dataPointSelection: undefined, - dataPointMouseEnter: undefined, - dataPointMouseLeave: undefined, - beforeZoom: undefined, - zoomed: undefined, - scrolled: undefined - }, - foreColor: '#373d3f', - fontFamily: 'Helvetica, Arial, sans-serif', - height: 'auto', - parentHeightOffset: 15, - id: undefined, - group: undefined, - offsetX: 0, - offsetY: 0, - selection: { - enabled: false, - type: 'x', - // selectedPoints: undefined, // default datapoints that should be selected automatically - fill: { - color: '#24292e', - opacity: 0.1 - }, - stroke: { - width: 1, - color: '#24292e', - opacity: 0.4, - dashArray: 3 - }, - xaxis: { - min: undefined, - max: undefined - }, - yaxis: { - min: undefined, - max: undefined - } - }, - sparkline: { - enabled: false - }, - brush: { - enabled: false, - autoScaleYaxis: false, - target: undefined - }, - stacked: false, - stackType: 'normal', - toolbar: { - show: true, - tools: { - download: true, - selection: true, - zoom: true, - zoomin: true, - zoomout: true, - pan: true, - reset: true, - customIcons: [] - }, - autoSelected: 'zoom' // accepts -> zoom, pan, selection - - }, - type: 'line', - width: '100%', - zoom: { - enabled: true, - type: 'x', - // autoScaleYaxis: false, // TODO: rewrite the autoScaleY function - zoomedArea: { - fill: { - color: '#90CAF9', - opacity: 0.4 - }, - stroke: { - color: '#0D47A1', - opacity: 0.4, - width: 1 - } - } - } - }, - plotOptions: { - bar: { - horizontal: false, - columnWidth: '70%', - // should be in percent 0 - 100 - barHeight: '70%', - // should be in percent 0 - 100 - distributed: false, - endingShape: 'flat', - colors: { - ranges: [], - backgroundBarColors: [], - backgroundBarOpacity: 1 - }, - dataLabels: { - maxItems: 100, - hideOverflowingLabels: true, - position: 'top' // top, center, bottom - // TODO: provide stackedLabels for stacked charts which gives additions of values - - } - }, - candlestick: { - colors: { - upward: '#00B746', - downward: '#EF403C' - }, - wick: { - useFillColor: true - } - }, - heatmap: { - radius: 2, - enableShades: true, - shadeIntensity: 0.5, - reverseNegativeShade: true, - distributed: false, - colorScale: { - inverse: false, - ranges: [], - min: undefined, - max: undefined - } - }, - radialBar: { - size: undefined, - inverseOrder: false, - startAngle: 0, - endAngle: 360, - offsetX: 0, - offsetY: 0, - hollow: { - margin: 5, - size: '50%', - background: 'transparent', - image: undefined, - imageWidth: 150, - imageHeight: 150, - imageOffsetX: 0, - imageOffsetY: 0, - imageClipped: true, - position: 'front', - dropShadow: { - enabled: false, - top: 0, - left: 0, - blur: 3, - color: '#000', - opacity: 0.5 - } - }, - track: { - show: true, - startAngle: undefined, - endAngle: undefined, - background: '#f2f2f2', - strokeWidth: '97%', - opacity: 1, - margin: 5, - // margin is in pixels - dropShadow: { - enabled: false, - top: 0, - left: 0, - blur: 3, - color: '#000', - opacity: 0.5 - } - }, - dataLabels: { - show: true, - name: { - show: true, - fontSize: '16px', - fontFamily: undefined, - color: undefined, - offsetY: 0 - }, - value: { - show: true, - fontSize: '14px', - fontFamily: undefined, - color: undefined, - offsetY: 16, - formatter: function formatter(val) { - return val + '%'; - } - }, - total: { - show: false, - label: 'Total', - color: undefined, - formatter: function formatter(w) { - return w.globals.seriesTotals.reduce(function (a, b) { - return a + b; - }, 0) / w.globals.series.length + '%'; - } - } - } - }, - rangeBar: {}, - pie: { - size: undefined, - customScale: 1, - offsetX: 0, - offsetY: 0, - expandOnClick: true, - dataLabels: { - // These are the percentage values which are displayed on slice - offset: 0, - // offset by which labels will move outside - minAngleToShowLabel: 10 - }, - donut: { - size: '65%', - background: 'transparent', - labels: { - // These are the inner labels appearing inside donut - show: false, - name: { - show: true, - fontSize: '16px', - fontFamily: undefined, - color: undefined, - offsetY: -10 - }, - value: { - show: true, - fontSize: '20px', - fontFamily: undefined, - color: undefined, - offsetY: 10, - formatter: function formatter(val) { - return val; - } - }, - total: { - show: false, - label: 'Total', - color: undefined, - formatter: function formatter(w) { - return w.globals.seriesTotals.reduce(function (a, b) { - return a + b; - }, 0); - } - } - } - } - }, - radar: { - size: undefined, - offsetX: 0, - offsetY: 0, - polygons: { - // strokeColor: '#e8e8e8', // should be deprecated in the minor version i.e 3.2 - strokeColors: '#e8e8e8', - connectorColors: '#e8e8e8', - fill: { - colors: undefined - } - } - } - }, - colors: undefined, - dataLabels: { - enabled: true, - enabledOnSeries: undefined, - formatter: function formatter(val) { - return val; - }, - textAnchor: 'middle', - offsetX: 0, - offsetY: 0, - style: { - fontSize: '12px', - fontFamily: undefined, - colors: undefined - }, - dropShadow: { - enabled: false, - top: 1, - left: 1, - blur: 1, - color: '#000', - opacity: 0.45 - } - }, - fill: { - type: 'solid', - colors: undefined, - // array of colors - opacity: 0.85, - gradient: { - shade: 'dark', - type: 'horizontal', - shadeIntensity: 0.5, - gradientToColors: undefined, - inverseColors: true, - opacityFrom: 1, - opacityTo: 1, - stops: [0, 50, 100], - colorStops: [] - }, - image: { - src: [], - width: undefined, - // optional - height: undefined // optional - - }, - pattern: { - style: 'sqaures', - // String | Array of Strings - width: 6, - height: 6, - strokeWidth: 2 - } - }, - grid: { - show: true, - borderColor: '#e0e0e0', - strokeDashArray: 0, - position: 'back', - xaxis: { - lines: { - show: false, - animate: false - } - }, - yaxis: { - lines: { - show: true, - animate: false - } - }, - row: { - colors: undefined, - // takes as array which will be repeated on rows - opacity: 0.5 - }, - column: { - colors: undefined, - // takes an array which will be repeated on columns - opacity: 0.5 - }, - padding: { - top: 0, - right: 10, - bottom: 0, - left: 12 - } - }, - labels: [], - legend: { - show: true, - showForSingleSeries: false, - showForNullSeries: true, - showForZeroSeries: true, - floating: false, - position: 'bottom', - // whether to position legends in 1 of 4 - // direction - top, bottom, left, right - horizontalAlign: 'center', - // when position top/bottom, you can specify whether to align legends left, right or center - fontSize: '12px', - fontFamily: undefined, - width: undefined, - height: undefined, - formatter: undefined, - offsetX: -20, - offsetY: 0, - labels: { - colors: undefined, - useSeriesColors: false - }, - markers: { - width: 12, - height: 12, - strokeWidth: 0, - strokeColor: '#fff', - radius: 12, - customHTML: undefined, - offsetX: 0, - offsetY: 0, - onClick: undefined - }, - itemMargin: { - horizontal: 0, - vertical: 5 - }, - onItemClick: { - toggleDataSeries: true - }, - onItemHover: { - highlightDataSeries: true - } - }, - markers: { - discrete: [], - size: 0, - colors: undefined, - //strokeColor: '#fff', // TODO: deprecate in major version 4.0 - strokeColors: '#fff', - strokeWidth: 2, - strokeOpacity: 0.9, - fillOpacity: 1, - shape: 'circle', - radius: 2, - offsetX: 0, - offsetY: 0, - hover: { - size: undefined, - sizeOffset: 3 - } - }, - noData: { - text: undefined, - align: 'center', - verticalAlign: 'middle', - offsetX: 0, - offsetY: 0, - style: { - color: undefined, - fontSize: '14px', - fontFamily: undefined - } - }, - responsive: [], - // breakpoints should follow ascending order 400, then 700, then 1000 - series: undefined, - states: { - normal: { - filter: { - type: 'none', - value: 0 - } - }, - hover: { - filter: { - type: 'lighten', - value: 0.15 - } - }, - active: { - allowMultipleDataPointsSelection: false, - filter: { - type: 'darken', - value: 0.65 - } - } - }, - title: { - text: undefined, - align: 'left', - margin: 10, - offsetX: 0, - offsetY: 0, - floating: false, - style: { - fontSize: '14px', - fontFamily: undefined, - color: undefined - } - }, - subtitle: { - text: undefined, - align: 'left', - margin: 10, - offsetX: 0, - offsetY: 30, - floating: false, - style: { - fontSize: '12px', - fontFamily: undefined, - color: undefined - } - }, - stroke: { - show: true, - curve: 'smooth', - // "smooth" / "straight" / "stepline" - lineCap: 'butt', - // round, butt , square - width: 2, - colors: undefined, - // array of colors - dashArray: 0 // single value or array of values - - }, - tooltip: { - enabled: true, - enabledOnSeries: undefined, - shared: true, - followCursor: false, - // when disabled, the tooltip will show on top of the series instead of mouse position - intersect: false, - // when enabled, tooltip will only show when user directly hovers over point - inverseOrder: false, - custom: undefined, - fillSeriesColor: false, - theme: 'light', - style: { - fontSize: '12px', - fontFamily: undefined - }, - onDatasetHover: { - highlightDataSeries: false - }, - x: { - // x value - show: true, - format: 'dd MMM', - // dd/MM, dd MMM yy, dd MMM yyyy - formatter: undefined // a custom user supplied formatter function - - }, - y: { - formatter: undefined, - title: { - formatter: function formatter(seriesName) { - return seriesName; - } - } - }, - z: { - formatter: undefined, - title: 'Size: ' - }, - marker: { - show: true - }, - items: { - display: 'flex' - }, - fixed: { - enabled: false, - position: 'topRight', - // topRight, topLeft, bottomRight, bottomLeft - offsetX: 0, - offsetY: 0 - } - }, - xaxis: { - type: 'category', - categories: [], - offsetX: 0, - offsetY: 0, - labels: { - show: true, - rotate: -45, - rotateAlways: false, - hideOverlappingLabels: true, - trim: true, - minHeight: undefined, - maxHeight: 120, - showDuplicates: true, - style: { - colors: [], - fontSize: '12px', - fontFamily: undefined, - cssClass: '' - }, - offsetX: 0, - offsetY: 0, - format: undefined, - formatter: undefined, - // custom formatter function which will override format - datetimeFormatter: { - year: 'yyyy', - month: "MMM 'yy", - day: 'dd MMM', - hour: 'HH:mm', - minute: 'HH:mm:ss' - } - }, - axisBorder: { - show: true, - color: '#78909C', - width: '100%', - height: 1, - offsetX: 0, - offsetY: 0 - }, - axisTicks: { - show: true, - color: '#78909C', - height: 6, - offsetX: 0, - offsetY: 0 - }, - tickAmount: undefined, - tickPlacement: 'on', - min: undefined, - max: undefined, - range: undefined, - floating: false, - position: 'bottom', - title: { - text: undefined, - offsetX: 0, - offsetY: 0, - style: { - color: undefined, - fontSize: '12px', - fontFamily: undefined, - cssClass: '' - } - }, - crosshairs: { - show: true, - width: 1, - // tickWidth/barWidth or an integer - position: 'back', - opacity: 0.9, - stroke: { - color: '#b6b6b6', - width: 1, - dashArray: 3 - }, - fill: { - type: 'solid', - // solid, gradient - color: '#B1B9C4', - gradient: { - colorFrom: '#D8E3F0', - colorTo: '#BED1E6', - stops: [0, 100], - opacityFrom: 0.4, - opacityTo: 0.5 - } - }, - dropShadow: { - enabled: false, - left: 0, - top: 0, - blur: 1, - opacity: 0.4 - } - }, - tooltip: { - enabled: true, - offsetY: 0, - formatter: undefined, - style: { - fontSize: '12px', - fontFamily: undefined - } - } - }, - yaxis: this.yAxis, - theme: { - mode: 'light', - palette: 'palette1', - // If defined, it will overwrite globals.colors variable - monochrome: { - // monochrome allows you to select just 1 color and fill out the rest with light/dark shade (intensity can be selected) - enabled: false, - color: '#008FFB', - shadeTo: 'light', - shadeIntensity: 0.65 - } - } - }; - } - }]); - - return Options; -}(); - -/** - * ApexCharts Annotations Class for drawing lines/rects on both xaxis and yaxis. - * - * @module Annotations - **/ - -var Annotations = -/*#__PURE__*/ -function () { - function Annotations(ctx) { - _classCallCheck(this, Annotations); - - this.ctx = ctx; - this.w = ctx.w; - this.graphics = new Graphics(this.ctx); - - if (this.w.globals.isBarHorizontal) { - this.invertAxis = true; - } - - this.xDivision = this.w.globals.gridWidth / this.w.globals.dataPoints; - } - - _createClass(Annotations, [{ - key: "drawAnnotations", - value: function drawAnnotations() { - var w = this.w; - - if (w.globals.axisCharts) { - var yAnnotations = this.drawYAxisAnnotations(); - var xAnnotations = this.drawXAxisAnnotations(); - var pointAnnotations = this.drawPointAnnotations(); - var initialAnim = w.config.chart.animations.enabled; - var annoArray = [yAnnotations, xAnnotations, pointAnnotations]; - var annoElArray = [xAnnotations.node, yAnnotations.node, pointAnnotations.node]; - - for (var i = 0; i < 3; i++) { - w.globals.dom.elGraphical.add(annoArray[i]); - - if (initialAnim && !w.globals.resized && !w.globals.dataChanged) { - annoElArray[i].classList.add('hidden'); - } - - w.globals.delayedElements.push({ - el: annoElArray[i], - index: 0 - }); - } // background sizes needs to be calculated after text is drawn, so calling them last - - - this.annotationsBackground(); - } - } - }, { - key: "addXaxisAnnotation", - value: function addXaxisAnnotation(anno, parent, index) { - var w = this.w; - var min = this.invertAxis ? w.globals.minY : w.globals.minX; - var range = this.invertAxis ? w.globals.yRange[0] : w.globals.xRange; - var x1 = (anno.x - min) / (range / w.globals.gridWidth); - var text = anno.label.text; - - if (w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) { - var catIndex = w.globals.labels.indexOf(anno.x); - var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - - if (xLabel) { - x1 = parseFloat(xLabel.getAttribute('x')); - } - } - - var strokeDashArray = anno.strokeDashArray; - if (x1 < 0 || x1 > w.globals.gridWidth) return; - - if (anno.x2 === null) { - var line = this.graphics.drawLine(x1 + anno.offsetX, // x1 - 0 + anno.offsetY, // y1 - x1 + anno.offsetX, // x2 - w.globals.gridHeight + anno.offsetY, // y2 - anno.borderColor, // lineColor - strokeDashArray //dashArray - ); - parent.appendChild(line.node); - } else { - var x2 = (anno.x2 - min) / (range / w.globals.gridWidth); - - if (x2 < x1) { - var temp = x1; - x1 = x2; - x2 = temp; - } - - if (text) { - var rect = this.graphics.drawRect(x1 + anno.offsetX, // x1 - 0 + anno.offsetY, // y1 - x2 - x1, // x2 - w.globals.gridHeight + anno.offsetY, // y2 - 0, // radius - anno.fillColor, // color - anno.opacity, // opacity, - 1, // strokeWidth - anno.borderColor, // strokeColor - strokeDashArray // stokeDashArray - ); - parent.appendChild(rect.node); - } - } - - var textY = anno.label.position === 'top' ? -3 : w.globals.gridHeight; - var elText = this.graphics.drawText({ - x: x1 + anno.label.offsetX, - y: textY + anno.label.offsetY, - text: text, - textAnchor: anno.label.textAnchor, - fontSize: anno.label.style.fontSize, - fontFamily: anno.label.style.fontFamily, - foreColor: anno.label.style.color, - cssClass: 'apexcharts-xaxis-annotation-label ' + anno.label.style.cssClass - }); - elText.attr({ - rel: index - }); - parent.appendChild(elText.node); // after placing the annotations on svg, set any vertically placed annotations - - this.setOrientations(anno, index); - } - }, { - key: "drawXAxisAnnotations", - value: function drawXAxisAnnotations() { - var _this = this; - - var w = this.w; - var elg = this.graphics.group({ - class: 'apexcharts-xaxis-annotations' - }); - w.config.annotations.xaxis.map(function (anno, index) { - _this.addXaxisAnnotation(anno, elg.node, index); - }); - return elg; - } - }, { - key: "addYaxisAnnotation", - value: function addYaxisAnnotation(anno, parent, index) { - var w = this.w; - var strokeDashArray = anno.strokeDashArray; - var y1; - var y2; - - if (this.invertAxis) { - var catIndex = w.globals.labels.indexOf(anno.y); - var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - - if (xLabel) { - y1 = parseFloat(xLabel.getAttribute('y')); - } - } else { - y1 = w.globals.gridHeight - (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - - if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { - y1 = (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - } - } - - var text = anno.label.text; - - if (anno.y2 === null) { - var line = this.graphics.drawLine(0 + anno.offsetX, // x1 - y1 + anno.offsetY, // y1 - w.globals.gridWidth + anno.offsetX, // x2 - y1 + anno.offsetY, // y2 - anno.borderColor, // lineColor - strokeDashArray // dashArray - ); - parent.appendChild(line.node); - } else { - if (this.invertAxis) { - var _catIndex = w.globals.labels.indexOf(anno.y2); - - var _xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (_catIndex + 1) + ')'); - - if (_xLabel) { - y2 = parseFloat(_xLabel.getAttribute('y')); - } - } else { - y2 = w.globals.gridHeight - (anno.y2 - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - - if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { - y2 = (anno.y2 - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - } - } - - if (y2 > y1) { - var temp = y1; - y1 = y2; - y2 = temp; - } - - if (text) { - var rect = this.graphics.drawRect(0 + anno.offsetX, // x1 - y2 + anno.offsetY, // y1 - w.globals.gridWidth + anno.offsetX, // x2 - y1 - y2, // y2 - 0, // radius - anno.fillColor, // color - anno.opacity, // opacity, - 1, // strokeWidth - anno.borderColor, // strokeColor - strokeDashArray // stokeDashArray - ); - parent.appendChild(rect.node); - } - } - - var textX = anno.label.position === 'right' ? w.globals.gridWidth : 0; - var elText = this.graphics.drawText({ - x: textX + anno.label.offsetX, - y: (y2 || y1) + anno.label.offsetY - 3, - text: text, - textAnchor: anno.label.textAnchor, - fontSize: anno.label.style.fontSize, - fontFamily: anno.label.style.fontFamily, - foreColor: anno.label.style.color, - cssClass: 'apexcharts-yaxis-annotation-label ' + anno.label.style.cssClass - }); - elText.attr({ - rel: index - }); - parent.appendChild(elText.node); - } - }, { - key: "drawYAxisAnnotations", - value: function drawYAxisAnnotations() { - var _this2 = this; - - var w = this.w; - var elg = this.graphics.group({ - class: 'apexcharts-yaxis-annotations' - }); - w.config.annotations.yaxis.map(function (anno, index) { - _this2.addYaxisAnnotation(anno, elg.node, index); - }); - return elg; - } - }, { - key: "clearAnnotations", - value: function clearAnnotations(ctx) { - var w = ctx.w; - var annos = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations'); - annos = Utils.listToArray(annos); - annos.forEach(function (a) { - while (a.firstChild) { - a.removeChild(a.firstChild); - } - }); - } - }, { - key: "addPointAnnotation", - value: function addPointAnnotation(anno, parent, index) { - var w = this.w; - var x = 0; - var y = 0; - var pointY = 0; - - if (this.invertAxis) { - console.warn('Point annotation is not supported in horizontal bar charts.'); - } - - if (typeof anno.x === 'string') { - var catIndex = w.globals.labels.indexOf(anno.x); - var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - var xPos = parseFloat(xLabel.getAttribute('x')); - x = xPos; - var annoY = anno.y; - - if (anno.y === null) { - annoY = w.globals.series[anno.seriesIndex][catIndex]; - } - - y = w.globals.gridHeight - (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; - pointY = w.globals.gridHeight - (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - - if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { - y = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) + parseInt(anno.label.style.fontSize) + anno.marker.size; - pointY = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - } - } else { - x = (anno.x - w.globals.minX) / (w.globals.xRange / w.globals.gridWidth); - y = w.globals.gridHeight - (parseFloat(anno.y) - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; - pointY = w.globals.gridHeight - (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - - if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { - y = (parseFloat(anno.y) - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; - pointY = (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - } - } - - if (x < 0 || x > w.globals.gridWidth) return; - var optsPoints = { - pSize: anno.marker.size, - pWidth: anno.marker.strokeWidth, - pointFillColor: anno.marker.fillColor, - pointStrokeColor: anno.marker.strokeColor, - shape: anno.marker.shape, - radius: anno.marker.radius, - class: 'apexcharts-point-annotation-marker ' + anno.marker.cssClass - }; - var point = this.graphics.drawMarker(x + anno.marker.offsetX, pointY + anno.marker.offsetY, optsPoints); - parent.appendChild(point.node); - var text = anno.label.text ? anno.label.text : ''; - var elText = this.graphics.drawText({ - x: x + anno.label.offsetX, - y: y + anno.label.offsetY, - text: text, - textAnchor: anno.label.textAnchor, - fontSize: anno.label.style.fontSize, - fontFamily: anno.label.style.fontFamily, - foreColor: anno.label.style.color, - cssClass: 'apexcharts-point-annotation-label ' + anno.label.style.cssClass - }); - elText.attr({ - rel: index - }); - parent.appendChild(elText.node); - - if (anno.customSVG.SVG) { - var g = this.graphics.group({ - class: 'apexcharts-point-annotations-custom-svg ' + anno.customSVG.cssClass - }); - g.attr({ - transform: "translate(".concat(x + anno.customSVG.offsetX, ", ").concat(y + anno.customSVG.offsetY, ")") - }); - g.node.innerHTML = anno.customSVG.SVG; - parent.appendChild(g.node); - } - } - }, { - key: "drawPointAnnotations", - value: function drawPointAnnotations() { - var _this3 = this; - - var w = this.w; - var elg = this.graphics.group({ - class: 'apexcharts-point-annotations' - }); - w.config.annotations.points.map(function (anno, index) { - _this3.addPointAnnotation(anno, elg.node, index); - }); - return elg; - } - }, { - key: "setOrientations", - value: function setOrientations(anno) { - var annoIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var w = this.w; - - if (anno.label.orientation === 'vertical') { - var i = annoIndex !== null ? annoIndex : 0; - var xAnno = w.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(i, "']")); - - if (xAnno !== null) { - var xAnnoCoord = xAnno.getBoundingClientRect(); - xAnno.setAttribute('x', parseFloat(xAnno.getAttribute('x')) - xAnnoCoord.height + 4); - - if (anno.label.position === 'top') { - xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) + xAnnoCoord.width); - } else { - xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) - xAnnoCoord.width); - } - - var annoRotatingCenter = this.graphics.rotateAroundCenter(xAnno); - var x = annoRotatingCenter.x; - var y = annoRotatingCenter.y; - xAnno.setAttribute('transform', "rotate(-90 ".concat(x, " ").concat(y, ")")); - } - } - } - }, { - key: "addBackgroundToAnno", - value: function addBackgroundToAnno(annoEl, anno) { - var w = this.w; - if (!anno.label.text) return null; - var elGridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid').getBoundingClientRect(); - var coords = annoEl.getBoundingClientRect(); - var pleft = anno.label.style.padding.left; - var pright = anno.label.style.padding.right; - var ptop = anno.label.style.padding.top; - var pbottom = anno.label.style.padding.bottom; - - if (anno.label.orientation === 'vertical') { - ptop = anno.label.style.padding.left; - pbottom = anno.label.style.padding.right; - pleft = anno.label.style.padding.top; - pright = anno.label.style.padding.bottom; - } - - var x1 = coords.left - elGridRect.left - pleft; - var y1 = coords.top - elGridRect.top - ptop; - var elRect = this.graphics.drawRect(x1, y1, coords.width + pleft + pright, coords.height + ptop + pbottom, 0, anno.label.style.background, 1, anno.label.borderWidth, anno.label.borderColor, 0); - return elRect; - } - }, { - key: "annotationsBackground", - value: function annotationsBackground() { - var _this4 = this; - - var w = this.w; - - var add = function add(anno, i, type) { - var annoLabel = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations .apexcharts-").concat(type, "-annotation-label[rel='").concat(i, "']")); - - if (annoLabel) { - var parent = annoLabel.parentNode; - - var elRect = _this4.addBackgroundToAnno(annoLabel, anno); - - if (elRect) { - parent.insertBefore(elRect.node, annoLabel); - } - } - }; - - w.config.annotations.xaxis.map(function (anno, i) { - add(anno, i, 'xaxis'); - }); - w.config.annotations.yaxis.map(function (anno, i) { - add(anno, i, 'yaxis'); - }); - w.config.annotations.points.map(function (anno, i) { - add(anno, i, 'point'); - }); - } - }, { - key: "addText", - value: function addText(params, pushToMemory, context) { - var x = params.x, - y = params.y, - text = params.text, - textAnchor = params.textAnchor, - _params$appendTo = params.appendTo, - appendTo = _params$appendTo === void 0 ? '.apexcharts-inner' : _params$appendTo, - foreColor = params.foreColor, - fontSize = params.fontSize, - fontFamily = params.fontFamily, - cssClass = params.cssClass, - backgroundColor = params.backgroundColor, - borderWidth = params.borderWidth, - strokeDashArray = params.strokeDashArray, - radius = params.radius, - borderColor = params.borderColor, - _params$paddingLeft = params.paddingLeft, - paddingLeft = _params$paddingLeft === void 0 ? 4 : _params$paddingLeft, - _params$paddingRight = params.paddingRight, - paddingRight = _params$paddingRight === void 0 ? 4 : _params$paddingRight, - _params$paddingBottom = params.paddingBottom, - paddingBottom = _params$paddingBottom === void 0 ? 2 : _params$paddingBottom, - _params$paddingTop = params.paddingTop, - paddingTop = _params$paddingTop === void 0 ? 2 : _params$paddingTop; - var me = context; - var w = me.w; - var parentNode = w.globals.dom.baseEl.querySelector(appendTo); - var elText = this.graphics.drawText({ - x: x, - y: y, - text: text, - textAnchor: textAnchor || 'start', - fontSize: fontSize || '12px', - fontFamily: fontFamily || w.config.chart.fontFamily, - foreColor: foreColor || w.config.chart.foreColor, - cssClass: 'apexcharts-text ' + cssClass ? cssClass : '' - }); - parentNode.appendChild(elText.node); - var textRect = elText.bbox(); - - if (text) { - var elRect = this.graphics.drawRect(textRect.x - paddingLeft, textRect.y - paddingTop, textRect.width + paddingLeft + paddingRight, textRect.height + paddingBottom + paddingTop, radius, backgroundColor, 1, borderWidth, borderColor, strokeDashArray); - elText.before(elRect); - } - - if (pushToMemory) { - w.globals.memory.methodsToExec.push({ - context: me, - method: me.addText, - params: { - x: x, - y: y, - text: text, - textAnchor: textAnchor, - appendTo: appendTo, - foreColor: foreColor, - fontSize: fontSize, - cssClass: cssClass, - backgroundColor: backgroundColor, - borderWidth: borderWidth, - strokeDashArray: strokeDashArray, - radius: radius, - borderColor: borderColor, - paddingLeft: paddingLeft, - paddingRight: paddingRight, - paddingBottom: paddingBottom, - paddingTop: paddingTop - } - }); - } - - return context; - } - }, { - key: "addPointAnnotationExternal", - value: function addPointAnnotationExternal(params, pushToMemory, context) { - if (typeof this.invertAxis === 'undefined') { - this.invertAxis = context.w.globals.isBarHorizontal; - } - - this.addAnnotationExternal({ - params: params, - pushToMemory: pushToMemory, - context: context, - type: 'point', - contextMethod: context.addPointAnnotation - }); - return context; - } - }, { - key: "addYaxisAnnotationExternal", - value: function addYaxisAnnotationExternal(params, pushToMemory, context) { - this.addAnnotationExternal({ - params: params, - pushToMemory: pushToMemory, - context: context, - type: 'yaxis', - contextMethod: context.addYaxisAnnotation - }); - return context; - } // The addXaxisAnnotation method requires a parent class, and user calling this method externally on the chart instance may not specify parent, hence a different method - - }, { - key: "addXaxisAnnotationExternal", - value: function addXaxisAnnotationExternal(params, pushToMemory, context) { - this.addAnnotationExternal({ - params: params, - pushToMemory: pushToMemory, - context: context, - type: 'xaxis', - contextMethod: context.addXaxisAnnotation - }); - return context; - } - }, { - key: "addAnnotationExternal", - value: function addAnnotationExternal(_ref) { - var params = _ref.params, - pushToMemory = _ref.pushToMemory, - context = _ref.context, - type = _ref.type, - contextMethod = _ref.contextMethod; - var me = context; - var w = me.w; - var parent = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations")); - var index = parent.childNodes.length + 1; - var opt = new Options(); - var axesAnno = Object.assign({}, type === 'xaxis' ? opt.xAxisAnnotation : type === 'yaxis' ? opt.yAxisAnnotation : opt.pointAnnotation); - var anno = Utils.extend(axesAnno, params); - - switch (type) { - case 'xaxis': - this.addXaxisAnnotation(anno, parent, index); - break; - - case 'yaxis': - this.addYaxisAnnotation(anno, parent, index); - break; - - case 'point': - this.addPointAnnotation(anno, parent, index); - break; - } // add background - - - var axesAnnoLabel = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations .apexcharts-").concat(type, "-annotation-label[rel='").concat(index, "']")); - var elRect = this.addBackgroundToAnno(axesAnnoLabel, anno); - - if (elRect) { - parent.insertBefore(elRect.node, axesAnnoLabel); - } - - if (pushToMemory) { - w.globals.memory.methodsToExec.push({ - context: me, - method: contextMethod, - params: params - }); - } - - return context; - } - }]); - - return Annotations; -}(); - -/** - * DateTime Class to manipulate datetime values. - * - * @module DateTime - **/ - -var DateTime = -/*#__PURE__*/ -function () { - function DateTime(ctx) { - _classCallCheck(this, DateTime); - - this.ctx = ctx; - this.w = ctx.w; - this.months31 = [1, 3, 5, 7, 8, 10, 12]; - this.months30 = [2, 4, 6, 9, 11]; - this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; - } - - _createClass(DateTime, [{ - key: "isValidDate", - value: function isValidDate(date) { - return !isNaN(this.parseDate(date)); - } - }, { - key: "getUTCTimeStamp", - value: function getUTCTimeStamp(dateStr) { - if (!Date.parse(dateStr)) { - return dateStr; - } - - return new Date(new Date(dateStr).toISOString().substr(0, 25)).getTime(); - } - }, { - key: "parseDate", - value: function parseDate(dateStr) { - var parsed = Date.parse(dateStr); - - if (!isNaN(parsed)) { - return this.getUTCTimeStamp(dateStr); - } - - var output = Date.parse(dateStr.replace(/-/g, '/').replace(/[a-z]+/gi, ' ')); - output = this.getUTCTimeStamp(output); - return output; - } // https://stackoverflow.com/a/11252167/6495043 - - }, { - key: "treatAsUtc", - value: function treatAsUtc(dateStr) { - var result = new Date(dateStr); - result.setMinutes(result.getMinutes() - result.getTimezoneOffset()); - return result; - } // http://stackoverflow.com/questions/14638018/current-time-formatting-with-javascript#answer-14638191 - - }, { - key: "formatDate", - value: function formatDate(date, format) { - var utc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var convertToUTC = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; - var locale = this.w.globals.locale; - var MMMM = ['\x00'].concat(_toConsumableArray(locale.months)); - var MMM = ['\x01'].concat(_toConsumableArray(locale.shortMonths)); - var dddd = ['\x02'].concat(_toConsumableArray(locale.days)); - var ddd = ['\x03'].concat(_toConsumableArray(locale.shortDays)); - - function ii(i, len) { - var s = i + ''; - len = len || 2; - - while (s.length < len) { - s = '0' + s; - } - - return s; - } - - if (convertToUTC) { - date = this.treatAsUtc(date); - } - - var y = utc ? date.getUTCFullYear() : date.getFullYear(); - format = format.replace(/(^|[^\\])yyyy+/g, '$1' + y); - format = format.replace(/(^|[^\\])yy/g, '$1' + y.toString().substr(2, 2)); - format = format.replace(/(^|[^\\])y/g, '$1' + y); - var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1; - format = format.replace(/(^|[^\\])MMMM+/g, '$1' + MMMM[0]); - format = format.replace(/(^|[^\\])MMM/g, '$1' + MMM[0]); - format = format.replace(/(^|[^\\])MM/g, '$1' + ii(M)); - format = format.replace(/(^|[^\\])M/g, '$1' + M); - var d = utc ? date.getUTCDate() : date.getDate(); - format = format.replace(/(^|[^\\])dddd+/g, '$1' + dddd[0]); - format = format.replace(/(^|[^\\])ddd/g, '$1' + ddd[0]); - format = format.replace(/(^|[^\\])dd/g, '$1' + ii(d)); - format = format.replace(/(^|[^\\])d/g, '$1' + d); - var H = utc ? date.getUTCHours() : date.getHours(); - format = format.replace(/(^|[^\\])HH+/g, '$1' + ii(H)); - format = format.replace(/(^|[^\\])H/g, '$1' + H); - var h = H > 12 ? H - 12 : H === 0 ? 12 : H; - format = format.replace(/(^|[^\\])hh+/g, '$1' + ii(h)); - format = format.replace(/(^|[^\\])h/g, '$1' + h); - var m = utc ? date.getUTCMinutes() : date.getMinutes(); - format = format.replace(/(^|[^\\])mm+/g, '$1' + ii(m)); - format = format.replace(/(^|[^\\])m/g, '$1' + m); - var s = utc ? date.getUTCSeconds() : date.getSeconds(); - format = format.replace(/(^|[^\\])ss+/g, '$1' + ii(s)); - format = format.replace(/(^|[^\\])s/g, '$1' + s); - var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds(); - format = format.replace(/(^|[^\\])fff+/g, '$1' + ii(f, 3)); - f = Math.round(f / 10); - format = format.replace(/(^|[^\\])ff/g, '$1' + ii(f)); - f = Math.round(f / 10); - format = format.replace(/(^|[^\\])f/g, '$1' + f); - var T = H < 12 ? 'AM' : 'PM'; - format = format.replace(/(^|[^\\])TT+/g, '$1' + T); - format = format.replace(/(^|[^\\])T/g, '$1' + T.charAt(0)); - var t = T.toLowerCase(); - format = format.replace(/(^|[^\\])tt+/g, '$1' + t); - format = format.replace(/(^|[^\\])t/g, '$1' + t.charAt(0)); - var tz = -date.getTimezoneOffset(); - var K = utc || !tz ? 'Z' : tz > 0 ? '+' : '-'; - - if (!utc) { - tz = Math.abs(tz); - var tzHrs = Math.floor(tz / 60); - var tzMin = tz % 60; - K += ii(tzHrs) + ':' + ii(tzMin); - } - - format = format.replace(/(^|[^\\])K/g, '$1' + K); - var day = (utc ? date.getUTCDay() : date.getDay()) + 1; - format = format.replace(new RegExp(dddd[0], 'g'), dddd[day]); - format = format.replace(new RegExp(ddd[0], 'g'), ddd[day]); - format = format.replace(new RegExp(MMMM[0], 'g'), MMMM[M]); - format = format.replace(new RegExp(MMM[0], 'g'), MMM[M]); - format = format.replace(/\\(.)/g, '$1'); - return format; - } - }, { - key: "getTimeUnitsfromTimestamp", - value: function getTimeUnitsfromTimestamp(minX, maxX) { - var w = this.w; - - if (w.config.xaxis.min !== undefined) { - minX = w.config.xaxis.min; - } - - if (w.config.xaxis.max !== undefined) { - maxX = w.config.xaxis.max; - } - - var minYear = new Date(minX).getFullYear(); - var maxYear = new Date(maxX).getFullYear(); - var minMonth = new Date(minX).getMonth(); - var maxMonth = new Date(maxX).getMonth(); - var minDate = new Date(minX).getDate(); - var maxDate = new Date(maxX).getDate(); - var minHour = new Date(minX).getHours(); - var maxHour = new Date(maxX).getHours(); - var minMinute = new Date(minX).getMinutes(); - var maxMinute = new Date(maxX).getMinutes(); - return { - minMinute: minMinute, - maxMinute: maxMinute, - minHour: minHour, - maxHour: maxHour, - minDate: minDate, - maxDate: maxDate, - minMonth: minMonth, - maxMonth: maxMonth, - minYear: minYear, - maxYear: maxYear - }; - } - }, { - key: "isLeapYear", - value: function isLeapYear(year) { - return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; - } - }, { - key: "calculcateLastDaysOfMonth", - value: function calculcateLastDaysOfMonth(month, year, subtract) { - var days = this.determineDaysOfMonths(month, year); // whatever days we get, subtract the number of days asked - - return days - subtract; - } - }, { - key: "determineDaysOfYear", - value: function determineDaysOfYear(year) { - var days = 365; - - if (this.isLeapYear(year)) { - days = 366; - } - - return days; - } - }, { - key: "determineRemainingDaysOfYear", - value: function determineRemainingDaysOfYear(year, month, date) { - var dayOfYear = this.daysCntOfYear[month] + date; - if (month > 1 && this.isLeapYear()) dayOfYear++; - return dayOfYear; - } - }, { - key: "determineDaysOfMonths", - value: function determineDaysOfMonths(month, year) { - var days = 30; - month = Utils.monthMod(month); - - switch (true) { - case this.months30.indexOf(month) > -1: - if (month === 2) { - if (this.isLeapYear(year)) { - days = 29; - } else { - days = 28; - } - } - - break; - - case this.months31.indexOf(month) > -1: - days = 31; - break; - - default: - days = 31; - break; - } - - return days; - } - }]); - - return DateTime; -}(); - -/** - * ApexCharts Default Class for setting default options for all chart types. - * - * @module Defaults - **/ - -var Defaults = -/*#__PURE__*/ -function () { - function Defaults(opts) { - _classCallCheck(this, Defaults); - - this.opts = opts; - } - - _createClass(Defaults, [{ - key: "line", - value: function line() { - return { - chart: { - animations: { - easing: 'swing' - } - }, - dataLabels: { - enabled: false - }, - stroke: { - width: 5, - curve: 'straight' - }, - markers: { - size: 0, - hover: { - sizeOffset: 6 - } - }, - xaxis: { - crosshairs: { - width: 1 - } - } - }; - } - }, { - key: "sparkline", - value: function sparkline(defaults) { - this.opts.yaxis[0].labels.show = false; - this.opts.yaxis[0].floating = true; - var ret = { - grid: { - show: false, - padding: { - left: 0, - right: 0, - top: 0, - bottom: 0 - } - }, - legend: { - show: false - }, - xaxis: { - labels: { - show: false - }, - tooltip: { - enabled: false - }, - axisBorder: { - show: false - } - }, - chart: { - toolbar: { - show: false - }, - zoom: { - enabled: false - } - }, - dataLabels: { - enabled: false - } - }; - return Utils.extend(defaults, ret); - } - }, { - key: "bar", - value: function bar() { - return { - chart: { - stacked: false, - animations: { - easing: 'swing' - } - }, - plotOptions: { - bar: { - dataLabels: { - position: 'center' - } - } - }, - dataLabels: { - style: { - colors: ['#fff'] - } - }, - stroke: { - width: 0 - }, - fill: { - opacity: 0.85 - }, - legend: { - markers: { - shape: 'square', - radius: 2, - size: 8 - } - }, - tooltip: { - shared: false - }, - xaxis: { - tooltip: { - enabled: false - }, - crosshairs: { - width: 'barWidth', - position: 'back', - fill: { - type: 'gradient' - }, - dropShadow: { - enabled: false - }, - stroke: { - width: 0 - } - } - } - }; - } - }, { - key: "candlestick", - value: function candlestick() { - return { - stroke: { - width: 1, - colors: ['#333'] - }, - dataLabels: { - enabled: false - }, - tooltip: { - shared: true, - custom: function custom(_ref) { - var seriesIndex = _ref.seriesIndex, - dataPointIndex = _ref.dataPointIndex, - w = _ref.w; - var o = w.globals.seriesCandleO[seriesIndex][dataPointIndex]; - var h = w.globals.seriesCandleH[seriesIndex][dataPointIndex]; - var l = w.globals.seriesCandleL[seriesIndex][dataPointIndex]; - var c = w.globals.seriesCandleC[seriesIndex][dataPointIndex]; - return '
' + '
Open: ' + o + '
' + '
High: ' + h + '
' + '
Low: ' + l + '
' + '
Close: ' + c + '
' + '
'; - } - }, - states: { - active: { - filter: { - type: 'none' - } - } - }, - xaxis: { - crosshairs: { - width: 1 - } - } - }; - } - }, { - key: "rangeBar", - value: function rangeBar() { - return { - stroke: { - width: 0 - }, - plotOptions: { - bar: { - dataLabels: { - position: 'center' - } - } - }, - dataLabels: { - enabled: false, - formatter: function formatter(val, _ref2) { - var ctx = _ref2.ctx, - seriesIndex = _ref2.seriesIndex, - dataPointIndex = _ref2.dataPointIndex, - w = _ref2.w; - var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex]; - var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex]; - return end - start; - }, - style: { - colors: ['#fff'] - } - }, - tooltip: { - shared: false, - followCursor: true, - custom: function custom(_ref3) { - var ctx = _ref3.ctx, - seriesIndex = _ref3.seriesIndex, - dataPointIndex = _ref3.dataPointIndex, - w = _ref3.w; - var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex]; - var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex]; - var startVal = ''; - var endVal = ''; - var color = w.globals.colors[seriesIndex]; - - if (w.config.tooltip.x.formatter === undefined) { - if (w.config.xaxis.type === 'datetime') { - var datetimeObj = new DateTime(ctx); - startVal = datetimeObj.formatDate(new Date(start), w.config.tooltip.x.format, true, true); - endVal = datetimeObj.formatDate(new Date(end), w.config.tooltip.x.format, true, true); - } else { - startVal = start; - endVal = end; - } - } else { - startVal = w.config.tooltip.x.formatter(start); - endVal = w.config.tooltip.x.formatter(end); - } - - var ylabel = w.globals.labels[dataPointIndex]; - return '
' + '
' + (w.config.series[seriesIndex].name ? w.config.series[seriesIndex].name : '') + '
' + '
' + ylabel + ': ' + startVal + ' - ' + endVal + '
' + '
'; - } - }, - xaxis: { - tooltip: { - enabled: false - }, - crosshairs: { - stroke: { - width: 0 - } - } - } - }; - } - }, { - key: "area", - value: function area() { - return { - stroke: { - width: 4 - }, - fill: { - type: 'gradient', - gradient: { - inverseColors: false, - shade: 'light', - type: 'vertical', - opacityFrom: 0.65, - opacityTo: 0.5, - stops: [0, 100, 100] - } - }, - markers: { - size: 0, - hover: { - sizeOffset: 6 - } - }, - tooltip: { - followCursor: false - } - }; - } - }, { - key: "brush", - value: function brush(defaults) { - var ret = { - chart: { - toolbar: { - autoSelected: 'selection', - show: false - }, - zoom: { - enabled: false - } - }, - dataLabels: { - enabled: false - }, - stroke: { - width: 1 - }, - tooltip: { - enabled: false - }, - xaxis: { - tooltip: { - enabled: false - } - } - }; - return Utils.extend(defaults, ret); - } - }, { - key: "stacked100", - value: function stacked100() { - var _this = this; - - this.opts.dataLabels = this.opts.dataLabels || {}; - this.opts.dataLabels.formatter = this.opts.dataLabels.formatter || undefined; - var existingDataLabelFormatter = this.opts.dataLabels.formatter; - this.opts.yaxis.forEach(function (yaxe, index) { - _this.opts.yaxis[index].min = 0; - _this.opts.yaxis[index].max = 100; - }); - var isBar = this.opts.chart.type === 'bar'; - - if (isBar) { - this.opts.dataLabels.formatter = existingDataLabelFormatter || function (val) { - if (typeof val === 'number') { - return val ? val.toFixed(0) + '%' : val; - } - - return val; - }; - } - } // This function removes the left and right spacing in chart for line/area/scatter if xaxis type = category for those charts by converting xaxis = numeric. Numeric/Datetime xaxis prevents the unnecessary spacing in the left/right of the chart area - - }, { - key: "bubble", - value: function bubble() { - return { - dataLabels: { - style: { - colors: ['#fff'] - } - }, - tooltip: { - shared: false, - intersect: true - }, - xaxis: { - crosshairs: { - width: 0 - } - }, - fill: { - type: 'solid', - gradient: { - shade: 'light', - inverse: true, - shadeIntensity: 0.55, - opacityFrom: 0.4, - opacityTo: 0.8 - } - } - }; - } - }, { - key: "scatter", - value: function scatter() { - return { - dataLabels: { - enabled: false - }, - tooltip: { - shared: false, - intersect: true - }, - markers: { - size: 6, - strokeWidth: 2, - hover: { - sizeOffset: 2 - } - } - }; - } - }, { - key: "heatmap", - value: function heatmap() { - return { - chart: { - stacked: false, - zoom: { - enabled: false - } - }, - fill: { - opacity: 1 - }, - dataLabels: { - style: { - colors: ['#fff'] - } - }, - stroke: { - colors: ['#fff'] - }, - tooltip: { - followCursor: true, - marker: { - show: false - }, - x: { - show: false - } - }, - legend: { - position: 'top', - markers: { - shape: 'square', - size: 10, - offsetY: 2 - } - }, - grid: { - padding: { - right: 20 - } - } - }; - } - }, { - key: "pie", - value: function pie() { - return { - chart: { - toolbar: { - show: false - } - }, - plotOptions: { - pie: { - donut: { - labels: { - show: false - } - } - } - }, - dataLabels: { - formatter: function formatter(val) { - return val.toFixed(1) + '%'; - }, - style: { - colors: ['#fff'] - }, - dropShadow: { - enabled: true - } - }, - stroke: { - colors: ['#fff'] - }, - fill: { - opacity: 1, - gradient: { - shade: 'dark', - shadeIntensity: 0.35, - inverseColors: false, - stops: [0, 100, 100] - } - }, - padding: { - right: 0, - left: 0 - }, - tooltip: { - theme: 'dark', - fillSeriesColor: true - }, - legend: { - position: 'right' - } - }; - } - }, { - key: "donut", - value: function donut() { - return { - chart: { - toolbar: { - show: false - } - }, - dataLabels: { - formatter: function formatter(val) { - return val.toFixed(1) + '%'; - }, - style: { - colors: ['#fff'] - }, - dropShadow: { - enabled: true - } - }, - stroke: { - colors: ['#fff'] - }, - fill: { - opacity: 1, - gradient: { - shade: 'dark', - shadeIntensity: 0.4, - inverseColors: false, - type: 'vertical', - opacityFrom: 1, - opacityTo: 1, - stops: [70, 98, 100] - } - }, - padding: { - right: 0, - left: 0 - }, - tooltip: { - theme: 'dark', - fillSeriesColor: true - }, - legend: { - position: 'right' - } - }; - } - }, { - key: "radar", - value: function radar() { - this.opts.yaxis[0].labels.style.fontSize = '13px'; - this.opts.yaxis[0].labels.offsetY = 6; - return { - dataLabels: { - enabled: true, - style: { - colors: ['#a8a8a8'], - fontSize: '11px' - } - }, - stroke: { - width: 2 - }, - markers: { - size: 3, - strokeWidth: 1, - strokeOpacity: 1 - }, - fill: { - opacity: 0.2 - }, - tooltip: { - shared: false, - intersect: true, - followCursor: true - }, - grid: { - show: false - }, - xaxis: { - tooltip: { - enabled: false - }, - crosshairs: { - show: false - } - } - }; - } - }, { - key: "radialBar", - value: function radialBar() { - return { - chart: { - animations: { - dynamicAnimation: { - enabled: true, - speed: 800 - } - }, - toolbar: { - show: false - } - }, - fill: { - gradient: { - shade: 'dark', - shadeIntensity: 0.4, - inverseColors: false, - type: 'diagonal2', - opacityFrom: 1, - opacityTo: 1, - stops: [70, 98, 100] - } - }, - padding: { - right: 0, - left: 0 - }, - legend: { - show: false, - position: 'right' - }, - tooltip: { - enabled: false, - fillSeriesColor: true - } - }; - } - }], [{ - key: "convertCatToNumeric", - value: function convertCatToNumeric(opts) { - opts.xaxis.type = 'numeric'; - opts.xaxis.convertedCatToNumeric = true; - opts.xaxis.labels = opts.xaxis.labels || {}; - - opts.xaxis.labels.formatter = opts.xaxis.labels.formatter || function (val) { - return val; - }; - - opts.chart = opts.chart || {}; - opts.chart.zoom = opts.chart.zoom || window.Apex.chart && window.Apex.chart.zoom || {}; - var defaultFormatter = opts.xaxis.labels.formatter; - var labels = opts.xaxis.categories && opts.xaxis.categories.length ? opts.xaxis.categories : opts.labels; - - if (labels && labels.length) { - opts.xaxis.labels.formatter = function (val) { - return defaultFormatter(labels[val - 1]); - }; - } - - opts.xaxis.categories = []; - opts.labels = []; - opts.chart.zoom.enabled = opts.chart.zoom.enabled || false; - return opts; - } - }]); - - return Defaults; -}(); - -/* - ** Util functions which are dependent on ApexCharts instance - */ -var CoreUtils = -/*#__PURE__*/ -function () { - function CoreUtils(ctx) { - _classCallCheck(this, CoreUtils); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(CoreUtils, [{ - key: "getStackedSeriesTotals", - - /** - * @memberof CoreUtils - * returns the sum of all individual values in a multiple stacked series - * Eg. w.globals.series = [[32,33,43,12], [2,3,5,1]] - * @return [34,36,48,13] - **/ - value: function getStackedSeriesTotals() { - var w = this.w; - var total = []; - - for (var i = 0; i < w.globals.series[w.globals.maxValsInArrayIndex].length; i++) { - var t = 0; - - for (var j = 0; j < w.globals.series.length; j++) { - t += w.globals.series[j][i]; - } - - total.push(t); - } - - w.globals.stackedSeriesTotals = total; - return total; - } // get total of the all values inside all series - - }, { - key: "getSeriesTotalByIndex", - value: function getSeriesTotalByIndex() { - var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - - if (index === null) { - // non-plot chart types - pie / donut / circle - return this.w.config.series.reduce(function (acc, cur) { - return acc + cur; - }, 0); - } else { - // axis charts - supporting multiple series - return this.w.globals.series[index].reduce(function (acc, cur) { - return acc + cur; - }, 0); - } - } - }, { - key: "isSeriesNull", - value: function isSeriesNull() { - var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var r = []; - - if (index === null) { - // non-plot chart types - pie / donut / circle - r = this.w.config.series.filter(function (d) { - return d !== null; - }); - } else { - // axis charts - supporting multiple series - r = this.w.globals.series[index].filter(function (d) { - return d !== null; - }); - } - - return r.length === 0; - } - }, { - key: "seriesHaveSameValues", - value: function seriesHaveSameValues(index) { - return this.w.globals.series[index].every(function (val, i, arr) { - return val === arr[0]; - }); - } // maxValsInArrayIndex is the index of series[] which has the largest number of items - - }, { - key: "getLargestSeries", - value: function getLargestSeries() { - var w = this.w; - w.globals.maxValsInArrayIndex = w.globals.series.map(function (a) { - return a.length; - }).indexOf(Math.max.apply(Math, w.globals.series.map(function (a) { - return a.length; - }))); - } - }, { - key: "getLargestMarkerSize", - value: function getLargestMarkerSize() { - var w = this.w; - var size = 0; - w.globals.markers.size.forEach(function (m) { - size = Math.max(size, m); - }); - w.globals.markers.largestSize = size; - return size; - } - /** - * @memberof Core - * returns the sum of all values in a series - * Eg. w.globals.series = [[32,33,43,12], [2,3,5,1]] - * @return [120, 11] - **/ - - }, { - key: "getSeriesTotals", - value: function getSeriesTotals() { - var w = this.w; - w.globals.seriesTotals = w.globals.series.map(function (ser, index) { - var total = 0; - - if (Array.isArray(ser)) { - for (var j = 0; j < ser.length; j++) { - total += ser[j]; - } - } else { - // for pie/donuts/gauges - total += ser; - } - - return total; - }); - } - }, { - key: "getSeriesTotalsXRange", - value: function getSeriesTotalsXRange(minX, maxX) { - var w = this.w; - var seriesTotalsXRange = w.globals.series.map(function (ser, index) { - var total = 0; - - for (var j = 0; j < ser.length; j++) { - if (w.globals.seriesX[index][j] > minX && w.globals.seriesX[index][j] < maxX) { - total += ser[j]; - } - } - - return total; - }); - return seriesTotalsXRange; - } - /** - * @memberof CoreUtils - * returns the percentage value of all individual values which can be used in a 100% stacked series - * Eg. w.globals.series = [[32, 33, 43, 12], [2, 3, 5, 1]] - * @return [[94.11, 91.66, 89.58, 92.30], [5.88, 8.33, 10.41, 7.7]] - **/ - - }, { - key: "getPercentSeries", - value: function getPercentSeries() { - var w = this.w; - w.globals.seriesPercent = w.globals.series.map(function (ser, index) { - var seriesPercent = []; - - if (Array.isArray(ser)) { - for (var j = 0; j < ser.length; j++) { - var total = w.globals.stackedSeriesTotals[j]; - var percent = 100 * ser[j] / total; - seriesPercent.push(percent); - } - } else { - var _total = w.globals.seriesTotals.reduce(function (acc, val) { - return acc + val; - }, 0); - - var _percent = 100 * ser / _total; - - seriesPercent.push(_percent); - } - - return seriesPercent; - }); - } - }, { - key: "getCalculatedRatios", - value: function getCalculatedRatios() { - var gl = this.w.globals; - var yRatio = []; - var invertedYRatio = 0; - var xRatio = 0; - var initialXRatio = 0; - var invertedXRatio = 0; - var zRatio = 0; - var baseLineY = []; - var baseLineInvertedY = 0.1; - var baseLineX = 0; - gl.yRange = []; - - if (gl.isMultipleYAxis) { - for (var i = 0; i < gl.minYArr.length; i++) { - gl.yRange.push(Math.abs(gl.minYArr[i] - gl.maxYArr[i])); - baseLineY.push(0); - } - } else { - gl.yRange.push(Math.abs(gl.minY - gl.maxY)); - } - - gl.xRange = Math.abs(gl.maxX - gl.minX); - gl.zRange = Math.abs(gl.maxZ - gl.minZ); // multiple y axis - - for (var _i = 0; _i < gl.yRange.length; _i++) { - yRatio.push(gl.yRange[_i] / gl.gridHeight); - } - - xRatio = gl.xRange / gl.gridWidth; - initialXRatio = Math.abs(gl.initialmaxX - gl.initialminX) / gl.gridWidth; - invertedYRatio = gl.yRange / gl.gridWidth; - invertedXRatio = gl.xRange / gl.gridHeight; - zRatio = gl.zRange / gl.gridHeight * 16; - - if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) { - // Negative numbers present in series - gl.hasNegs = true; - } - - if (gl.isMultipleYAxis) { - baseLineY = []; // baseline variables is the 0 of the yaxis which will be needed when there are negatives - - for (var _i2 = 0; _i2 < yRatio.length; _i2++) { - baseLineY.push(-gl.minYArr[_i2] / yRatio[_i2]); - } - } else { - baseLineY.push(-gl.minY / yRatio[0]); - - if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) { - baseLineInvertedY = -gl.minY / invertedYRatio; // this is for bar chart - - baseLineX = gl.minX / xRatio; - } - } - - return { - yRatio: yRatio, - invertedYRatio: invertedYRatio, - zRatio: zRatio, - xRatio: xRatio, - initialXRatio: initialXRatio, - invertedXRatio: invertedXRatio, - baseLineInvertedY: baseLineInvertedY, - baseLineY: baseLineY, - baseLineX: baseLineX - }; - } - }, { - key: "getLogSeries", - value: function getLogSeries(series) { - var w = this.w; - w.globals.seriesLog = series.map(function (s, i) { - if (w.config.yaxis[i] && w.config.yaxis[i].logarithmic) { - return s.map(function (d) { - if (d === null) return null; - var logVal = (Math.log(d) - Math.log(w.globals.minYArr[i])) / (Math.log(w.globals.maxYArr[i]) - Math.log(w.globals.minYArr[i])); - return logVal; - }); - } else { - return s; - } - }); - return w.globals.seriesLog; - } - }, { - key: "getLogYRatios", - value: function getLogYRatios(yRatio) { - var _this = this; - - var w = this.w; - var gl = this.w.globals; - gl.yLogRatio = yRatio.slice(); - gl.logYRange = gl.yRange.map(function (yRange, i) { - if (w.config.yaxis[i] && _this.w.config.yaxis[i].logarithmic) { - var maxY = -Number.MAX_VALUE; - var minY = Number.MIN_VALUE; - var range = 1; - gl.seriesLog.forEach(function (s, si) { - s.forEach(function (v) { - if (w.config.yaxis[si] && w.config.yaxis[si].logarithmic) { - maxY = Math.max(v, maxY); - minY = Math.min(v, minY); - } - }); - }); - range = Math.pow(gl.yRange[i], Math.abs(minY - maxY) / gl.yRange[i]); - gl.yLogRatio[i] = range / gl.gridHeight; - return range; - } - }); - return gl.yLogRatio; - } // Some config objects can be array - and we need to extend them correctly - - }], [{ - key: "checkComboSeries", - value: function checkComboSeries(series) { - var comboCharts = false; - var comboChartsHasBars = false; // if user specified a type in series too, turn on comboCharts flag - - if (series.length && typeof series[0].type !== 'undefined') { - comboCharts = true; - series.forEach(function (s) { - if (s.type === 'bar' || s.type === 'column') { - comboChartsHasBars = true; - } - }); - } - - return { - comboCharts: comboCharts, - comboChartsHasBars: comboChartsHasBars - }; - } - }, { - key: "extendArrayProps", - value: function extendArrayProps(configInstance, options) { - if (options.yaxis) { - options = configInstance.extendYAxis(options); - } - - if (options.annotations) { - if (options.annotations.yaxis) { - options = configInstance.extendYAxisAnnotations(options); - } - - if (options.annotations.xaxis) { - options = configInstance.extendXAxisAnnotations(options); - } - - if (options.annotations.points) { - options = configInstance.extendPointAnnotations(options); - } - } - - return options; - } - }]); - - return CoreUtils; -}(); - -/** - * ApexCharts Config Class for extending user options with pre-defined ApexCharts config. - * - * @module Config - **/ - -var Config = -/*#__PURE__*/ -function () { - function Config(opts) { - _classCallCheck(this, Config); - - this.opts = opts; - } - - _createClass(Config, [{ - key: "init", - value: function init() { - var opts = this.opts; - var options = new Options(); - var defaults = new Defaults(opts); - this.chartType = opts.chart.type; - - if (this.chartType === 'histogram') { - // technically, a histogram can be drawn by a column chart with no spaces in between - opts.chart.type = 'bar'; - opts = Utils.extend({ - plotOptions: { - bar: { - columnWidth: '99.99%' - } - } - }, opts); - } - - opts.series = this.checkEmptySeries(opts.series); - opts = this.extendYAxis(opts); - opts = this.extendAnnotations(opts); - var config = options.init(); - var newDefaults = {}; - - if (opts && _typeof(opts) === 'object') { - var chartDefaults = {}; - - switch (this.chartType) { - case 'line': - chartDefaults = defaults.line(); - break; - - case 'area': - chartDefaults = defaults.area(); - break; - - case 'bar': - chartDefaults = defaults.bar(); - break; - - case 'candlestick': - chartDefaults = defaults.candlestick(); - break; - - case 'rangeBar': - chartDefaults = defaults.rangeBar(); - break; - - case 'histogram': - chartDefaults = defaults.bar(); - break; - - case 'bubble': - chartDefaults = defaults.bubble(); - break; - - case 'scatter': - chartDefaults = defaults.scatter(); - break; - - case 'heatmap': - chartDefaults = defaults.heatmap(); - break; - - case 'pie': - chartDefaults = defaults.pie(); - break; - - case 'donut': - chartDefaults = defaults.donut(); - break; - - case 'radar': - chartDefaults = defaults.radar(); - break; - - case 'radialBar': - chartDefaults = defaults.radialBar(); - break; - - default: - chartDefaults = defaults.line(); - } - - if (opts.chart.brush && opts.chart.brush.enabled) { - chartDefaults = defaults.brush(chartDefaults); - } - - if (opts.chart.stacked && opts.chart.stackType === '100%') { - defaults.stacked100(); - } // If user has specified a dark theme, make the tooltip dark too - - - this.checkForDarkTheme(window.Apex); // check global window Apex options - - this.checkForDarkTheme(opts); // check locally passed options - - opts.xaxis = opts.xaxis || window.Apex.xaxis || {}; - var combo = CoreUtils.checkComboSeries(opts.series); - - if ((opts.chart.type === 'line' || opts.chart.type === 'area' || opts.chart.type === 'scatter') && !combo.comboChartsHasBars && opts.xaxis.type !== 'datetime' && opts.xaxis.type !== 'numeric' && opts.xaxis.tickPlacement !== 'between') { - opts = Defaults.convertCatToNumeric(opts); - } - - if (opts.chart.sparkline && opts.chart.sparkline.enabled || window.Apex.chart && window.Apex.chart.sparkline && window.Apex.chart.sparkline.enabled) { - chartDefaults = defaults.sparkline(chartDefaults); - } - - newDefaults = Utils.extend(config, chartDefaults); - } // config should cascade in this fashion - // default-config < global-apex-variable-config < user-defined-config - // get GLOBALLY defined options and merge with the default config - - - var mergedWithDefaultConfig = Utils.extend(newDefaults, window.Apex); // get the merged config and extend with user defined config - - config = Utils.extend(mergedWithDefaultConfig, opts); // some features are not supported. those mismatches should be handled - - config = this.handleUserInputErrors(config); - return config; - } - }, { - key: "extendYAxis", - value: function extendYAxis(opts) { - var options = new Options(); - - if (typeof opts.yaxis === 'undefined') { - opts.yaxis = {}; - } // extend global yaxis config (only if object is provided / not an array) - - - if (opts.yaxis.constructor !== Array && window.Apex.yaxis && window.Apex.yaxis.constructor !== Array) { - opts.yaxis = Utils.extend(opts.yaxis, window.Apex.yaxis); - } // as we can't extend nested object's array with extend, we need to do it first - // user can provide either an array or object in yaxis config - - - if (opts.yaxis.constructor !== Array) { - // convert the yaxis to array if user supplied object - opts.yaxis = [Utils.extend(options.yAxis, opts.yaxis)]; - } else { - opts.yaxis = Utils.extendArray(opts.yaxis, options.yAxis); - } - - return opts; - } // annotations also accepts array, so we need to extend them manually - - }, { - key: "extendAnnotations", - value: function extendAnnotations(opts) { - if (typeof opts.annotations === 'undefined') { - opts.annotations = {}; - opts.annotations.yaxis = []; - opts.annotations.xaxis = []; - opts.annotations.points = []; - } - - opts = this.extendYAxisAnnotations(opts); - opts = this.extendXAxisAnnotations(opts); - opts = this.extendPointAnnotations(opts); - return opts; - } - }, { - key: "extendYAxisAnnotations", - value: function extendYAxisAnnotations(opts) { - var options = new Options(); - opts.annotations.yaxis = Utils.extendArray(typeof opts.annotations.yaxis !== 'undefined' ? opts.annotations.yaxis : [], options.yAxisAnnotation); - return opts; - } - }, { - key: "extendXAxisAnnotations", - value: function extendXAxisAnnotations(opts) { - var options = new Options(); - opts.annotations.xaxis = Utils.extendArray(typeof opts.annotations.xaxis !== 'undefined' ? opts.annotations.xaxis : [], options.xAxisAnnotation); - return opts; - } - }, { - key: "extendPointAnnotations", - value: function extendPointAnnotations(opts) { - var options = new Options(); - opts.annotations.points = Utils.extendArray(typeof opts.annotations.points !== 'undefined' ? opts.annotations.points : [], options.pointAnnotation); - return opts; - } - }, { - key: "checkForDarkTheme", - value: function checkForDarkTheme(opts) { - if (opts.theme && opts.theme.mode === 'dark') { - if (!opts.tooltip) { - opts.tooltip = {}; - } - - if (opts.tooltip.theme !== 'light') { - opts.tooltip.theme = 'dark'; - } - - if (!opts.chart.foreColor) { - opts.chart.foreColor = '#f6f7f8'; - } - - if (!opts.theme.palette) { - opts.theme.palette = 'palette4'; - } - } - } - }, { - key: "checkEmptySeries", - value: function checkEmptySeries(ser) { - if (ser.length === 0) { - return [{ - data: [] - }]; - } - - return ser; - } - }, { - key: "handleUserInputErrors", - value: function handleUserInputErrors(opts) { - var config = opts; // conflicting tooltip option. intersect makes sure to focus on 1 point at a time. Shared cannot be used along with it - - if (config.tooltip.shared && config.tooltip.intersect) { - throw new Error('tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.'); - } - - if (config.chart.scroller) { - console.warn('Scroller has been deprecated since v2.0.0. Please remove the configuration for chart.scroller'); - } - - if ((config.chart.type === 'bar' || config.chart.type === 'rangeBar') && config.plotOptions.bar.horizontal) { - // No multiple yaxis for bars - if (config.yaxis.length > 1) { - throw new Error('Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false'); - } // if yaxis is reversed in horizontal bar chart, you should draw the y-axis on right side - - - if (config.yaxis[0].reversed) { - config.yaxis[0].opposite = true; - } - - config.xaxis.tooltip.enabled = false; // no xaxis tooltip for horizontal bar - - config.yaxis[0].tooltip.enabled = false; // no xaxis tooltip for horizontal bar - - config.chart.zoom.enabled = false; // no zooming for horz bars - } - - if (config.chart.type === 'bar' || config.chart.type === 'rangeBar') { - if (config.tooltip.shared) { - if (config.xaxis.crosshairs.width === 'barWidth' && config.series.length > 1) { - console.warn('crosshairs.width = "barWidth" is only supported in single series, not in a multi-series barChart.'); - config.xaxis.crosshairs.width = 'tickWidth'; - } - - if (config.plotOptions.bar.horizontal) { - config.states.hover.type = 'none'; - config.tooltip.shared = false; - } - - if (!config.tooltip.followCursor) { - console.warn('followCursor option in shared columns cannot be turned off. Please set %ctooltip.followCursor: true', 'color: blue;'); - config.tooltip.followCursor = true; - } - } - } - - if (config.chart.type === 'candlestick') { - if (config.yaxis[0].reversed) { - console.warn('Reversed y-axis in candlestick chart is not supported.'); - config.yaxis[0].reversed = false; - } - } - - if (config.chart.group && config.yaxis[0].labels.minWidth === 0) { - console.warn('It looks like you have multiple charts in synchronization. You must provide yaxis.labels.minWidth which must be EQUAL for all grouped charts to prevent incorrect behaviour.'); - } // if user supplied array for stroke width, it will only be applicable to line/area charts, for any other charts, revert back to Number - - - if (Array.isArray(config.stroke.width)) { - if (config.chart.type !== 'line' && config.chart.type !== 'area') { - console.warn('stroke.width option accepts array only for line and area charts. Reverted back to Number'); - config.stroke.width = config.stroke.width[0]; - } - } - - return config; - } - }]); - - return Config; -}(); - -var Globals = -/*#__PURE__*/ -function () { - function Globals() { - _classCallCheck(this, Globals); - } - - _createClass(Globals, [{ - key: "globalVars", - value: function globalVars(config) { - return { - chartID: null, - // chart ID - apexcharts-cuid - cuid: null, - // chart ID - random numbers excluding "apexcharts" part - events: { - beforeMount: [], - mounted: [], - updated: [], - clicked: [], - selection: [], - dataPointSelection: [], - zoomed: [], - scrolled: [] - }, - colors: [], - clientX: null, - clientY: null, - fill: { - colors: [] - }, - stroke: { - colors: [] - }, - dataLabels: { - style: { - colors: [] - } - }, - radarPolygons: { - fill: { - colors: [] - } - }, - markers: { - colors: [], - size: config.markers.size, - largestSize: 0 - }, - animationEnded: false, - isTouchDevice: 'ontouchstart' in window || navigator.msMaxTouchPoints, - isDirty: false, - // chart has been updated after the initial render. This is different than dataChanged property. isDirty means user manually called some method to update - initialConfig: null, - // we will store the first config user has set to go back when user finishes interactions like zooming and come out of it - lastXAxis: [], - lastYAxis: [], - series: [], - // the MAIN series array (y values) - seriesRangeStart: [], - // the clone of series becomes the start in range - seriesRangeEnd: [], - // the end values in range chart - seriesPercent: [], - // the percentage values of the given series - seriesTotals: [], - stackedSeriesTotals: [], - seriesX: [], - // store the numeric x values in this array (x values) - seriesZ: [], - // The 3rd "Z" dimension for bubbles chart (z values) - labels: [], - // store the text to draw on x axis - // Don't mutate the labels, many things including tooltips depends on it! - timelineLabels: [], - // store the timeline Labels in another variable - invertedTimelineLabels: [], - // for rangebar timeline - seriesNames: [], - // same as labels, used in non axis charts - noLabelsProvided: false, - // if user didn't provide any categories/labels or x values, fallback to 1,2,3,4... - allSeriesCollapsed: false, - collapsedSeries: [], - // when user collapses a series, it goes into this array - collapsedSeriesIndices: [], - // this stores the index of the collapsedSeries instead of whole object for quick access - ancillaryCollapsedSeries: [], - // when user collapses an "alwaysVisible" series, it goes into this array - ancillaryCollapsedSeriesIndices: [], - // this stores the index of the ancillaryCollapsedSeries whose y-axis is always visible - risingSeries: [], - // when user re-opens a collapsed series, it goes here - dataFormatXNumeric: false, - // boolean value to indicate user has passed numeric x values - selectedDataPoints: [], - ignoreYAxisIndexes: [], - // when series are being collapsed in multiple y axes, ignore certain index - padHorizontal: 0, - maxValsInArrayIndex: 0, - zoomEnabled: config.chart.toolbar.autoSelected === 'zoom' && config.chart.toolbar.tools.zoom && config.chart.zoom.enabled, - panEnabled: config.chart.toolbar.autoSelected === 'pan' && config.chart.toolbar.tools.pan, - selectionEnabled: config.chart.toolbar.autoSelected === 'selection' && config.chart.toolbar.tools.selection, - yaxis: null, - minY: Number.MIN_VALUE, - // is 5e-324, i.e. the smallest positive number - // NOTE: If there are multiple y axis, the first yaxis array element will be considered for all y values calculations. Rest all will be calculated based on that - maxY: -Number.MAX_VALUE, - // is -1.7976931348623157e+308 - // NOTE: The above note for minY applies here as well - minYArr: [], - maxYArr: [], - maxX: -Number.MAX_VALUE, - // is -1.7976931348623157e+308 - initialmaxX: -Number.MAX_VALUE, - minX: Number.MIN_VALUE, - // is 5e-324, i.e. the smallest positive number - initialminX: Number.MIN_VALUE, - minZ: Number.MIN_VALUE, - // Max Z value in charts with Z axis - maxZ: -Number.MAX_VALUE, - // Max Z value in charts with Z axis - minXDiff: Number.MAX_VALUE, - mousedown: false, - lastClientPosition: {}, - // don't reset this variable this the chart is destroyed. It is used to detect right or left mousemove in panning - visibleXRange: undefined, - yRange: [], - // this property is the absolute sum of positive and negative values [eg (-100 + 200 = 300)] - yAxis - zRange: 0, - // zAxis Range (for bubble charts) - xRange: 0, - // xAxis range - yValueDecimal: 0, - // are there floating numbers in the series. If yes, this represent the len of the decimals - total: 0, - SVGNS: 'http://www.w3.org/2000/svg', - // svg namespace - svgWidth: 0, - // the whole svg width - svgHeight: 0, - // the whole svg height - noData: false, - // whether there is any data to display or not - locale: {}, - // the current locale values will be preserved here for global access - dom: {}, - // for storing all dom nodes in this particular property - // elWrap: null, // the element that wraps everything - // elGraphical: null, // this contains lines/areas/bars/pies - // elGridRect: null, // paths going outside this area will be clipped - // elGridRectMask: null, // clipping will happen with this mask - // elGridRectMarkerMask: null, // clipping will happen with this mask - // elLegendWrap: null, // the whole legend area - // elDefs: null, // [defs] element - memory: { - methodsToExec: [] - }, - shouldAnimate: true, - skipLastTimelinelabel: false, - // when last label is cropped, skip drawing it - delayedElements: [], - // element which appear after animation has finished - axisCharts: true, - // chart type = line or area or bar - // (refer them also as plot charts in the code) - isXNumeric: false, - // bool: data was provided in a {[x,y], [x,y]} pattern - isDataXYZ: false, - // bool: data was provided in a {[x,y,z]} pattern - resized: false, - // bool: user has resized - resizeTimer: null, - // timeout function to make a small delay before - // drawing when user resized - comboCharts: false, - // bool: whether it's a combination of line/column - comboChartsHasBars: false, - // bool: whether it's a combination of line/column - dataChanged: false, - // bool: has data changed dynamically - previousPaths: [], - // array: when data is changed, it will animate from - // previous paths - seriesXvalues: [], - // we will need this in tooltip (it's x position) - // when we will have unequal x values, we will need - // some way to get x value depending on mouse pointer - seriesYvalues: [], - // we will need this when deciding which series - // user hovered on - seriesCandleO: [], - // candle stick open values - seriesCandleH: [], - // candle stick high values - seriesCandleL: [], - // candle stick low values - seriesCandleC: [], - // candle stick close values - allSeriesHasEqualX: true, - dataPoints: 0, - // the longest series length - pointsArray: [], - // store the points positions here to draw later on hover - // format is - [[x,y],[x,y]... [x,y]] - dataLabelsRects: [], - // store the positions of datalabels to prevent collision - lastDrawnDataLabelsIndexes: [], - hasNullValues: false, - // bool: whether series contains null values - easing: null, - // function: animation effect to apply - zoomed: false, - // whether user has zoomed or not - gridWidth: 0, - // drawable width of actual graphs (series paths) - gridHeight: 0, - // drawable height of actual graphs (series paths) - yAxisScale: [], - xAxisScale: null, - xAxisTicksPositions: [], - timescaleTicks: [], - rotateXLabels: false, - defaultLabels: false, - xLabelFormatter: undefined, - // formatter for x axis labels - yLabelFormatters: [], - xaxisTooltipFormatter: undefined, - // formatter for x axis tooltip - ttKeyFormatter: undefined, - ttVal: undefined, - ttZFormatter: undefined, - LINE_HEIGHT_RATIO: 1.618, - xAxisLabelsHeight: 0, - yAxisLabelsWidth: 0, - scaleX: 1, - scaleY: 1, - translateX: 0, - translateY: 0, - translateYAxisX: [], - yLabelsCoords: [], - yTitleCoords: [], - yAxisWidths: [], - translateXAxisY: 0, - translateXAxisX: 0, - tooltip: null, - tooltipOpts: null - }; - } - }, { - key: "init", - value: function init(config) { - var globals = this.globalVars(config); - globals.initialConfig = Utils.extend({}, config); - globals.initialSeries = JSON.parse(JSON.stringify(globals.initialConfig.series)); - globals.lastXAxis = JSON.parse(JSON.stringify(globals.initialConfig.xaxis)); - globals.lastYAxis = JSON.parse(JSON.stringify(globals.initialConfig.yaxis)); - return globals; - } - }]); - - return Globals; -}(); - -/** - * ApexCharts Base Class for extending user options with pre-defined ApexCharts config. - * - * @module Base - **/ - -var Base = -/*#__PURE__*/ -function () { - function Base(opts) { - _classCallCheck(this, Base); - - this.opts = opts; - } - - _createClass(Base, [{ - key: "init", - value: function init() { - var config = new Config(this.opts).init(); - var globals = new Globals().init(config); - var w = { - config: config, - globals: globals - }; - return w; - } - }]); - - return Base; -}(); - -/** - * ApexCharts Fill Class for setting fill options of the paths. - * - * @module Fill - **/ - -var Fill = -/*#__PURE__*/ -function () { - function Fill(ctx) { - _classCallCheck(this, Fill); - - this.ctx = ctx; - this.w = ctx.w; - this.opts = null; - this.seriesIndex = 0; - } - - _createClass(Fill, [{ - key: "clippedImgArea", - value: function clippedImgArea(params) { - var w = this.w; - var cnf = w.config; - var svgW = parseInt(w.globals.gridWidth); - var svgH = parseInt(w.globals.gridHeight); - var size = svgW > svgH ? svgW : svgH; - var fillImg = params.image; - var imgWidth = 0; - var imgHeight = 0; - - if (typeof params.width === 'undefined' && typeof params.height === 'undefined') { - if (cnf.fill.image.width !== undefined && cnf.fill.image.height !== undefined) { - imgWidth = cnf.fill.image.width + 1; - imgHeight = cnf.fill.image.height; - } else { - imgWidth = size + 1; - imgHeight = size; - } - } else { - imgWidth = params.width; - imgHeight = params.height; - } - - var elPattern = document.createElementNS(w.globals.SVGNS, 'pattern'); - Graphics.setAttrs(elPattern, { - id: params.patternID, - patternUnits: params.patternUnits ? params.patternUnits : 'userSpaceOnUse', - width: imgWidth + 'px', - height: imgHeight + 'px' - }); - var elImage = document.createElementNS(w.globals.SVGNS, 'image'); - elPattern.appendChild(elImage); - elImage.setAttributeNS('http://www.w3.org/1999/xlink', 'href', fillImg); - Graphics.setAttrs(elImage, { - x: 0, - y: 0, - preserveAspectRatio: 'none', - width: imgWidth + 'px', - height: imgHeight + 'px' - }); - elImage.style.opacity = params.opacity; - w.globals.dom.elDefs.node.appendChild(elPattern); - } - }, { - key: "getSeriesIndex", - value: function getSeriesIndex(opts) { - var w = this.w; - - if (w.config.chart.type === 'bar' && w.config.plotOptions.bar.distributed || w.config.chart.type === 'heatmap') { - this.seriesIndex = opts.seriesNumber; - } else { - this.seriesIndex = opts.seriesNumber % w.globals.series.length; - } - - return this.seriesIndex; - } - }, { - key: "fillPath", - value: function fillPath(opts) { - var w = this.w; - this.opts = opts; - var cnf = this.w.config; - var pathFill; - var patternFill, gradientFill; - this.seriesIndex = this.getSeriesIndex(opts); - var fillColors = this.getFillColors(); - var fillColor = fillColors[this.seriesIndex]; - - if (typeof fillColor === 'function') { - fillColor = fillColor({ - seriesIndex: this.seriesIndex, - value: opts.value, - w: w - }); - } - - var fillType = this.getFillType(this.seriesIndex); - var fillOpacity = Array.isArray(cnf.fill.opacity) ? cnf.fill.opacity[this.seriesIndex] : cnf.fill.opacity; - var defaultColor = fillColor; - - if (opts.color) { - fillColor = opts.color; - } - - if (fillColor.indexOf('rgb') === -1) { - defaultColor = Utils.hexToRgba(fillColor, fillOpacity); - } else { - if (fillColor.indexOf('rgba') > -1) { - fillOpacity = 0 + '.' + Utils.getOpacityFromRGBA(fillColors[this.seriesIndex]); - } - } - - if (fillType === 'pattern') { - patternFill = this.handlePatternFill(patternFill, fillColor, fillOpacity, defaultColor); - } - - if (fillType === 'gradient') { - gradientFill = this.handleGradientFill(gradientFill, fillColor, fillOpacity, this.seriesIndex); - } - - if (cnf.fill.image.src.length > 0 && fillType === 'image') { - if (opts.seriesNumber < cnf.fill.image.src.length) { - this.clippedImgArea({ - opacity: fillOpacity, - image: cnf.fill.image.src[opts.seriesNumber], - patternUnits: opts.patternUnits, - patternID: "pattern".concat(w.globals.cuid).concat(opts.seriesNumber + 1) - }); - pathFill = "url(#pattern".concat(w.globals.cuid).concat(opts.seriesNumber + 1, ")"); - } else { - pathFill = defaultColor; - } - } else if (fillType === 'gradient') { - pathFill = gradientFill; - } else if (fillType === 'pattern') { - pathFill = patternFill; - } else { - pathFill = defaultColor; - } // override pattern/gradient if opts.solid is true - - - if (opts.solid) { - pathFill = defaultColor; - } - - return pathFill; - } - }, { - key: "getFillType", - value: function getFillType(seriesIndex) { - var w = this.w; - - if (Array.isArray(w.config.fill.type)) { - return w.config.fill.type[seriesIndex]; - } else { - return w.config.fill.type; - } - } - }, { - key: "getFillColors", - value: function getFillColors() { - var w = this.w; - var cnf = w.config; - var opts = this.opts; - var fillColors = []; - - if (w.globals.comboCharts) { - if (w.config.series[this.seriesIndex].type === 'line') { - if (w.globals.stroke.colors instanceof Array) { - fillColors = w.globals.stroke.colors; - } else { - fillColors.push(w.globals.stroke.colors); - } - } else { - if (w.globals.fill.colors instanceof Array) { - fillColors = w.globals.fill.colors; - } else { - fillColors.push(w.globals.fill.colors); - } - } - } else { - if (cnf.chart.type === 'line') { - if (w.globals.stroke.colors instanceof Array) { - fillColors = w.globals.stroke.colors; - } else { - fillColors.push(w.globals.stroke.colors); - } - } else { - if (w.globals.fill.colors instanceof Array) { - fillColors = w.globals.fill.colors; - } else { - fillColors.push(w.globals.fill.colors); - } - } - } // colors passed in arguments - - - if (typeof opts.fillColors !== 'undefined') { - fillColors = []; - - if (opts.fillColors instanceof Array) { - fillColors = opts.fillColors.slice(); - } else { - fillColors.push(opts.fillColors); - } - } - - return fillColors; - } - }, { - key: "handlePatternFill", - value: function handlePatternFill(patternFill, fillColor, fillOpacity, defaultColor) { - var cnf = this.w.config; - var opts = this.opts; - var graphics = new Graphics(this.ctx); - var patternStrokeWidth = cnf.fill.pattern.strokeWidth === undefined ? Array.isArray(cnf.stroke.width) ? cnf.stroke.width[this.seriesIndex] : cnf.stroke.width : Array.isArray(cnf.fill.pattern.strokeWidth) ? cnf.fill.pattern.strokeWidth[this.seriesIndex] : cnf.fill.pattern.strokeWidth; - var patternLineColor = fillColor; - - if (cnf.fill.pattern.style instanceof Array) { - if (typeof cnf.fill.pattern.style[opts.seriesNumber] !== 'undefined') { - var pf = graphics.drawPattern(cnf.fill.pattern.style[opts.seriesNumber], cnf.fill.pattern.width, cnf.fill.pattern.height, patternLineColor, patternStrokeWidth, fillOpacity); - patternFill = pf; - } else { - patternFill = defaultColor; - } - } else { - patternFill = graphics.drawPattern(cnf.fill.pattern.style, cnf.fill.pattern.width, cnf.fill.pattern.height, patternLineColor, patternStrokeWidth, fillOpacity); - } - - return patternFill; - } - }, { - key: "handleGradientFill", - value: function handleGradientFill(gradientFill, fillColor, fillOpacity, i) { - var cnf = this.w.config; - var opts = this.opts; - var graphics = new Graphics(this.ctx); - var utils = new Utils(); - var type = cnf.fill.gradient.type; - var gradientFrom, gradientTo; - var opacityFrom = cnf.fill.gradient.opacityFrom === undefined ? fillOpacity : Array.isArray(cnf.fill.gradient.opacityFrom) ? cnf.fill.gradient.opacityFrom[i] : cnf.fill.gradient.opacityFrom; - var opacityTo = cnf.fill.gradient.opacityTo === undefined ? fillOpacity : Array.isArray(cnf.fill.gradient.opacityTo) ? cnf.fill.gradient.opacityTo[i] : cnf.fill.gradient.opacityTo; - gradientFrom = fillColor; - - if (cnf.fill.gradient.gradientToColors === undefined || cnf.fill.gradient.gradientToColors.length === 0) { - if (cnf.fill.gradient.shade === 'dark') { - gradientTo = utils.shadeColor(parseFloat(cnf.fill.gradient.shadeIntensity) * -1, fillColor); - } else { - gradientTo = utils.shadeColor(parseFloat(cnf.fill.gradient.shadeIntensity), fillColor); - } - } else { - gradientTo = cnf.fill.gradient.gradientToColors[opts.seriesNumber]; - } - - if (cnf.fill.gradient.inverseColors) { - var t = gradientFrom; - gradientFrom = gradientTo; - gradientTo = t; - } - - gradientFill = graphics.drawGradient(type, gradientFrom, gradientTo, opacityFrom, opacityTo, opts.size, cnf.fill.gradient.stops, cnf.fill.gradient.colorStops, i); - return gradientFill; - } - }]); - - return Fill; -}(); - -/** - * ApexCharts Markers Class for drawing points on y values in axes charts. - * - * @module Markers - **/ - -var Markers = -/*#__PURE__*/ -function () { - function Markers(ctx, opts) { - _classCallCheck(this, Markers); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Markers, [{ - key: "setGlobalMarkerSize", - value: function setGlobalMarkerSize() { - var w = this.w; - w.globals.markers.size = Array.isArray(w.config.markers.size) ? w.config.markers.size : [w.config.markers.size]; - - if (w.globals.markers.size.length > 0) { - if (w.globals.markers.size.length < w.globals.series.length + 1) { - for (var i = 0; i <= w.globals.series.length; i++) { - if (typeof w.globals.markers.size[i] === 'undefined') { - w.globals.markers.size.push(w.globals.markers.size[0]); - } - } - } - } else { - w.globals.markers.size = w.config.series.map(function (s) { - return w.config.markers.size; - }); - } - } - }, { - key: "plotChartMarkers", - value: function plotChartMarkers(pointsPos, seriesIndex, j) { - var _this = this; - - var w = this.w; - var i = seriesIndex; - var p = pointsPos; - var elPointsWrap = null; - var graphics = new Graphics(this.ctx); - var point; - - if (w.globals.markers.size[seriesIndex] > 0) { - elPointsWrap = graphics.group({ - class: 'apexcharts-series-markers' - }); - elPointsWrap.attr('clip-path', "url(#gridRectMarkerMask".concat(w.globals.cuid, ")")); - } - - if (p.x instanceof Array) { - var _loop = function _loop(q) { - var dataPointIndex = j; // a small hack as we have 2 points for the first val to connect it - - if (j === 1 && q === 0) dataPointIndex = 0; - if (j === 1 && q === 1) dataPointIndex = 1; - var PointClasses = 'apexcharts-marker'; - - if ((w.config.chart.type === 'line' || w.config.chart.type === 'area') && !w.globals.comboCharts && !w.config.tooltip.intersect) { - PointClasses += ' no-pointer-events'; - } - - var shouldMarkerDraw = Array.isArray(w.config.markers.size) ? w.globals.markers.size[seriesIndex] > 0 : w.config.markers.size > 0; - - if (shouldMarkerDraw) { - if (Utils.isNumber(p.y[q])) { - PointClasses += " w".concat((Math.random() + 1).toString(36).substring(4)); - } else { - PointClasses = 'apexcharts-nullpoint'; - } - - var opts = _this.getMarkerConfig(PointClasses, seriesIndex); // discrete markers is an option where user can specify a particular marker with different size and color - - - w.config.markers.discrete.map(function (marker) { - if (marker.seriesIndex === seriesIndex && marker.dataPointIndex === dataPointIndex) { - opts.pointStrokeColor = marker.strokeColor; - opts.pointFillColor = marker.fillColor; - opts.pSize = marker.size; - } - }); - - if (w.config.series[i].data[j]) { - if (w.config.series[i].data[j].fillColor) { - opts.pointFillColor = w.config.series[i].data[j].fillColor; - } - - if (w.config.series[i].data[j].strokeColor) { - opts.pointStrokeColor = w.config.series[i].data[j].strokeColor; - } - } - - point = graphics.drawMarker(p.x[q], p.y[q], opts); - point.attr('rel', dataPointIndex); - point.attr('j', dataPointIndex); - point.attr('index', seriesIndex); - point.node.setAttribute('default-marker-size', opts.pSize); - var filters = new Filters(_this.ctx); - filters.setSelectionFilter(point, seriesIndex, dataPointIndex); - - _this.addEvents(point); - - if (elPointsWrap) { - elPointsWrap.add(point); - } - } else { - // dynamic array creation - multidimensional - if (typeof w.globals.pointsArray[seriesIndex] === 'undefined') w.globals.pointsArray[seriesIndex] = []; - w.globals.pointsArray[seriesIndex].push([p.x[q], p.y[q]]); - } - }; - - for (var q = 0; q < p.x.length; q++) { - _loop(q); - } - } - - return elPointsWrap; - } - }, { - key: "getMarkerConfig", - value: function getMarkerConfig(cssClass, seriesIndex) { - var w = this.w; - var pStyle = this.getMarkerStyle(seriesIndex); - var pSize = w.globals.markers.size[seriesIndex]; - return { - pSize: pSize, - pRadius: w.config.markers.radius, - pWidth: w.config.markers.strokeWidth, - pointStrokeColor: pStyle.pointStrokeColor, - pointFillColor: pStyle.pointFillColor, - shape: w.config.markers.shape instanceof Array ? w.config.markers.shape[seriesIndex] : w.config.markers.shape, - class: cssClass, - pointStrokeOpacity: w.config.markers.strokeOpacity, - pointFillOpacity: w.config.markers.fillOpacity, - seriesIndex: seriesIndex - }; - } - }, { - key: "addEvents", - value: function addEvents(circle) { - var graphics = new Graphics(this.ctx); - circle.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this.ctx, circle)); - circle.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this.ctx, circle)); - circle.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this.ctx, circle)); - circle.node.addEventListener('touchstart', graphics.pathMouseDown.bind(this.ctx, circle), { - passive: true - }); - } - }, { - key: "getMarkerStyle", - value: function getMarkerStyle(seriesIndex) { - var w = this.w; - var colors = w.globals.markers.colors; - var strokeColors = w.config.markers.strokeColor || w.config.markers.strokeColors; - var pointStrokeColor = strokeColors instanceof Array ? strokeColors[seriesIndex] : strokeColors; - var pointFillColor = colors instanceof Array ? colors[seriesIndex] : colors; - return { - pointStrokeColor: pointStrokeColor, - pointFillColor: pointFillColor - }; - } - }]); - - return Markers; -}(); - -/** - * ApexCharts Scatter Class. - * This Class also handles bubbles chart as currently there is no major difference in drawing them, - * @module Scatter - **/ - -var Scatter = -/*#__PURE__*/ -function () { - function Scatter(ctx) { - _classCallCheck(this, Scatter); - - this.ctx = ctx; - this.w = ctx.w; - this.initialAnim = this.w.config.chart.animations.enabled; - this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; // this array will help in centering the label in bubbles - - this.radiusSizes = []; - } - - _createClass(Scatter, [{ - key: "draw", - value: function draw(elSeries, j, opts) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var realIndex = opts.realIndex; - var pointsPos = opts.pointsPos; - var zRatio = opts.zRatio; - var elPointsMain = opts.elParent; - var elPointsWrap = graphics.group({ - class: "apexcharts-series-markers apexcharts-series-".concat(w.config.chart.type) - }); - elPointsWrap.attr('clip-path', "url(#gridRectMarkerMask".concat(w.globals.cuid, ")")); - - if (pointsPos.x instanceof Array) { - for (var q = 0; q < pointsPos.x.length; q++) { - var dataPointIndex = j + 1; - var shouldDraw = true; // a small hack as we have 2 points for the first val to connect it - - if (j === 0 && q === 0) dataPointIndex = 0; - if (j === 0 && q === 1) dataPointIndex = 1; - var radius = 0; - var finishRadius = w.globals.markers.size[realIndex]; - - if (zRatio !== Infinity) { - // means we have a bubble - finishRadius = w.globals.seriesZ[realIndex][dataPointIndex] / zRatio; - - if (typeof this.radiusSizes[realIndex] === 'undefined') { - this.radiusSizes.push([]); - } - - this.radiusSizes[realIndex].push(finishRadius); - } - - if (!w.config.chart.animations.enabled) { - radius = finishRadius; - } - - var x = pointsPos.x[q]; - var y = pointsPos.y[q]; - radius = radius || 0; - - if (x === 0 && y === 0 || y === null || typeof w.globals.series[realIndex][dataPointIndex] === 'undefined') { - shouldDraw = false; - } - - if (shouldDraw) { - var circle = this.drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j); - elPointsWrap.add(circle); - } - - elPointsMain.add(elPointsWrap); - } - } - } - }, { - key: "drawPoint", - value: function drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j) { - var w = this.w; - var i = realIndex; - var anim = new Animations(this.ctx); - var filters = new Filters(this.ctx); - var fill = new Fill(this.ctx); - var markers = new Markers(this.ctx); - var graphics = new Graphics(this.ctx); - var markerConfig = markers.getMarkerConfig('apexcharts-marker', i); - var pathFillCircle = fill.fillPath({ - seriesNumber: realIndex, - patternUnits: 'objectBoundingBox', - value: w.globals.series[realIndex][j] - }); - var circle = graphics.drawCircle(radius); - - if (w.config.series[i].data[dataPointIndex]) { - if (w.config.series[i].data[dataPointIndex].fillColor) { - pathFillCircle = w.config.series[i].data[dataPointIndex].fillColor; - } - } - - circle.attr({ - cx: x, - cy: y, - fill: pathFillCircle, - stroke: markerConfig.pointStrokeColor, - strokeWidth: markerConfig.pWidth - }); - - if (w.config.chart.dropShadow.enabled) { - var dropShadow = w.config.chart.dropShadow; - filters.dropShadow(circle, dropShadow, realIndex); - } - - if (this.initialAnim && !w.globals.dataChanged) { - var speed = 1; - - if (!w.globals.resized) { - speed = w.config.chart.animations.speed; - } - - anim.animateCircleRadius(circle, 0, finishRadius, speed, w.globals.easing); - } - - if (w.globals.dataChanged) { - if (this.dynamicAnim) { - var _speed = w.config.chart.animations.dynamicAnimation.speed; - var prevX, prevY, prevR; - var prevPathJ = null; - prevPathJ = w.globals.previousPaths[realIndex] && w.globals.previousPaths[realIndex][j]; - - if (typeof prevPathJ !== 'undefined' && prevPathJ !== null) { - // series containing less elements will ignore these values and revert to 0 - prevX = prevPathJ.x; - prevY = prevPathJ.y; - prevR = typeof prevPathJ.r !== 'undefined' ? prevPathJ.r : finishRadius; - } - - for (var cs = 0; cs < w.globals.collapsedSeries.length; cs++) { - if (w.globals.collapsedSeries[cs].index === realIndex) { - _speed = 1; - finishRadius = 0; - } - } - - if (x === 0 && y === 0) finishRadius = 0; - anim.animateCircle(circle, { - cx: prevX, - cy: prevY, - r: prevR - }, { - cx: x, - cy: y, - r: finishRadius - }, _speed, w.globals.easing); - } else { - circle.attr({ - r: finishRadius - }); - } - } - - circle.attr({ - rel: dataPointIndex, - j: dataPointIndex, - index: realIndex, - 'default-marker-size': finishRadius - }); - filters.setSelectionFilter(circle, realIndex, dataPointIndex); - markers.addEvents(circle); - circle.node.classList.add('apexcharts-marker'); - return circle; - } - }, { - key: "centerTextInBubble", - value: function centerTextInBubble(y) { - var w = this.w; - y = y + parseInt(w.config.dataLabels.style.fontSize) / 4; - return { - y: y - }; - } - }]); - - return Scatter; -}(); - -/** - * ApexCharts DataLabels Class for drawing dataLabels on Axes based Charts. - * - * @module DataLabels - **/ - -var DataLabels = -/*#__PURE__*/ -function () { - function DataLabels(ctx) { - _classCallCheck(this, DataLabels); - - this.ctx = ctx; - this.w = ctx.w; - } // When there are many datalabels to be printed, and some of them overlaps each other in the same series, this method will take care of that - // Also, when datalabels exceeds the drawable area and get clipped off, we need to adjust and move some pixels to make them visible again - - - _createClass(DataLabels, [{ - key: "dataLabelsCorrection", - value: function dataLabelsCorrection(x, y, val, i, dataPointIndex, alwaysDrawDataLabel, fontSize) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var drawnextLabel = false; // - - var textRects = graphics.getTextRects(val, fontSize); - var width = textRects.width; - var height = textRects.height; // first value in series, so push an empty array - - if (typeof w.globals.dataLabelsRects[i] === 'undefined') w.globals.dataLabelsRects[i] = []; // then start pushing actual rects in that sub-array - - w.globals.dataLabelsRects[i].push({ - x: x, - y: y, - width: width, - height: height - }); - var len = w.globals.dataLabelsRects[i].length - 2; - var lastDrawnIndex = typeof w.globals.lastDrawnDataLabelsIndexes[i] !== 'undefined' ? w.globals.lastDrawnDataLabelsIndexes[i][w.globals.lastDrawnDataLabelsIndexes[i].length - 1] : 0; - - if (typeof w.globals.dataLabelsRects[i][len] !== 'undefined') { - var lastDataLabelRect = w.globals.dataLabelsRects[i][lastDrawnIndex]; - - if ( // next label forward and x not intersecting - x > lastDataLabelRect.x + lastDataLabelRect.width + 2 || y > lastDataLabelRect.y + lastDataLabelRect.height + 2 || x + width < lastDataLabelRect.x // next label is going to be drawn backwards - ) { - // the 2 indexes don't override, so OK to draw next label - drawnextLabel = true; - } - } - - if (dataPointIndex === 0 || alwaysDrawDataLabel) { - drawnextLabel = true; - } - - return { - x: x, - y: y, - drawnextLabel: drawnextLabel - }; - } - }, { - key: "drawDataLabel", - value: function drawDataLabel(pos, i, j) { - var align = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'top'; - // this method handles line, area, bubble, scatter charts as those charts contains markers/points which have pre-defined x/y positions - // all other charts like bars / heatmaps will define their own drawDataLabel routine - var w = this.w; - var graphics = new Graphics(this.ctx); - var dataLabelsConfig = w.config.dataLabels; - var x = 0; - var y = 0; - var dataPointIndex = j; - var elDataLabelsWrap = null; - - if (!dataLabelsConfig.enabled || pos.x instanceof Array !== true) { - return elDataLabelsWrap; - } - - elDataLabelsWrap = graphics.group({ - class: 'apexcharts-data-labels' - }); - elDataLabelsWrap.attr('clip-path', "url(#gridRectMarkerMask".concat(w.globals.cuid, ")")); - - for (var q = 0; q < pos.x.length; q++) { - x = pos.x[q] + dataLabelsConfig.offsetX; - y = pos.y[q] + dataLabelsConfig.offsetY - w.globals.markers.size[i] - 5; - - if (align === 'bottom') { - y = y + w.globals.markers.size[i] * 2 + parseInt(dataLabelsConfig.style.fontSize) * 1.4; - } - - if (!isNaN(x)) { - // a small hack as we have 2 points for the first val to connect it - if (j === 1 && q === 0) dataPointIndex = 0; - if (j === 1 && q === 1) dataPointIndex = 1; - var val = w.globals.series[i][dataPointIndex]; - var text = ''; - - if (w.config.chart.type === 'bubble') { - text = w.globals.seriesZ[i][dataPointIndex]; - y = pos.y[q] + w.config.dataLabels.offsetY; - var scatter = new Scatter(this.ctx); - var centerTextInBubbleCoords = scatter.centerTextInBubble(y, i, dataPointIndex); - y = centerTextInBubbleCoords.y; - } else { - if (typeof val !== 'undefined' && val !== null) { - text = w.config.dataLabels.formatter(val, { - ctx: this.ctx, - seriesIndex: i, - dataPointIndex: dataPointIndex, - w: w - }); - } - } - - this.plotDataLabelsText({ - x: x, - y: y, - text: text, - i: i, - j: dataPointIndex, - parent: elDataLabelsWrap, - offsetCorrection: true, - dataLabelsConfig: w.config.dataLabels - }); - } - } - - return elDataLabelsWrap; - } - }, { - key: "plotDataLabelsText", - value: function plotDataLabelsText(opts) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var x = opts.x, - y = opts.y, - i = opts.i, - j = opts.j, - text = opts.text, - textAnchor = opts.textAnchor, - parent = opts.parent, - dataLabelsConfig = opts.dataLabelsConfig, - alwaysDrawDataLabel = opts.alwaysDrawDataLabel, - offsetCorrection = opts.offsetCorrection; - - if (Array.isArray(w.config.dataLabels.enabledOnSeries)) { - if (w.config.dataLabels.enabledOnSeries.indexOf(i) > -1) { - return; - } - } - - var correctedLabels = { - x: x, - y: y, - drawnextLabel: true - }; - - if (offsetCorrection) { - correctedLabels = this.dataLabelsCorrection(x, y, text, i, j, alwaysDrawDataLabel, parseInt(dataLabelsConfig.style.fontSize)); - } // when zoomed, we don't need to correct labels offsets, - // but if normally, labels get cropped, correct them - - - if (!w.globals.zoomed) { - x = correctedLabels.x; - y = correctedLabels.y; - } - - if (correctedLabels.drawnextLabel) { - var dataLabelText = graphics.drawText({ - width: 100, - height: parseInt(dataLabelsConfig.style.fontSize), - x: x, - y: y, - foreColor: w.globals.dataLabels.style.colors[i], - textAnchor: textAnchor || dataLabelsConfig.textAnchor, - text: text, - fontSize: dataLabelsConfig.style.fontSize, - fontFamily: dataLabelsConfig.style.fontFamily - }); - dataLabelText.attr({ - class: 'apexcharts-datalabel', - cx: x, - cy: y - }); - - if (dataLabelsConfig.dropShadow.enabled) { - var textShadow = dataLabelsConfig.dropShadow; - var filters = new Filters(this.ctx); - filters.dropShadow(dataLabelText, textShadow); - } - - parent.add(dataLabelText); - - if (typeof w.globals.lastDrawnDataLabelsIndexes[i] === 'undefined') { - w.globals.lastDrawnDataLabelsIndexes[i] = []; - } - - w.globals.lastDrawnDataLabelsIndexes[i].push(j); - } - } - }]); - - return DataLabels; -}(); - -/** - * ApexCharts Bar Class responsible for drawing both Columns and Bars. - * - * @module Bar - **/ - -var Bar = -/*#__PURE__*/ -function () { - function Bar(ctx, xyRatios) { - _classCallCheck(this, Bar); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.barOptions = w.config.plotOptions.bar; - this.isHorizontal = this.barOptions.horizontal; - this.strokeWidth = w.config.stroke.width; - this.isNullValue = false; - this.xyRatios = xyRatios; - - if (this.xyRatios !== null) { - this.xRatio = xyRatios.xRatio; - this.yRatio = xyRatios.yRatio; - this.invertedXRatio = xyRatios.invertedXRatio; - this.invertedYRatio = xyRatios.invertedYRatio; - this.baseLineY = xyRatios.baseLineY; - this.baseLineInvertedY = xyRatios.baseLineInvertedY; - } - - this.yaxisIndex = 0; - this.seriesLen = 0; - } - /** primary draw method which is called on bar object - * @memberof Bar - * @param {array} series - user supplied series values - * @param {int} seriesIndex - the index by which series will be drawn on the svg - * @return {node} element which is supplied to parent chart draw method for appending - **/ - - - _createClass(Bar, [{ - key: "draw", - value: function draw(series, seriesIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var coreUtils = new CoreUtils(this.ctx, w); - series = coreUtils.getLogSeries(series); - this.series = series; - this.yRatio = coreUtils.getLogYRatios(this.yRatio); - this.initVariables(series); - var ret = graphics.group({ - class: 'apexcharts-bar-series apexcharts-plot-series' - }); - - if (w.config.dataLabels.enabled) { - if (this.totalItems > w.config.plotOptions.bar.dataLabels.maxItems) { - console.warn('WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.'); - } - } - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - var pathTo = void 0, - pathFrom = void 0; - var x = void 0, - y = void 0, - xDivision = void 0, - // xDivision is the GRIDWIDTH divided by number of datapoints (columns) - yDivision = void 0, - // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) - zeroH = void 0, - // zeroH is the baseline where 0 meets y axis - zeroW = void 0; // zeroW is the baseline where 0 meets x axis - - var yArrj = []; // hold y values of current iterating series - - var xArrj = []; // hold x values of current iterating series - - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn - - var elSeries = graphics.group({ - class: "apexcharts-series", - rel: i + 1, - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), - 'data:realIndex': realIndex - }); - this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex); - - if (series[i].length > 0) { - this.visibleI = this.visibleI + 1; - } - - var strokeWidth = 0; - var barHeight = 0; - var barWidth = 0; - - if (this.yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; - var initPositions = this.initialPositions(); - y = initPositions.y; - barHeight = initPositions.barHeight; - yDivision = initPositions.yDivision; - zeroW = initPositions.zeroW; - x = initPositions.x; - barWidth = initPositions.barWidth; - xDivision = initPositions.xDivision; - zeroH = initPositions.zeroH; - - if (!this.horizontal) { - xArrj.push(x + barWidth / 2); - } // eldatalabels - - - var elDataLabelsWrap = graphics.group({ - class: 'apexcharts-datalabels' - }); - - for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { - if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) { - this.isNullValue = true; - } else { - this.isNullValue = false; - } - - if (w.config.stroke.show) { - if (this.isNullValue) { - strokeWidth = 0; - } else { - strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; - } - } - - var paths = null; - - if (this.isHorizontal) { - paths = this.drawBarPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - barHeight: barHeight, - strokeWidth: strokeWidth, - pathTo: pathTo, - pathFrom: pathFrom, - zeroW: zeroW, - x: x, - y: y, - yDivision: yDivision, - elSeries: elSeries - }); - barWidth = this.series[i][j] / this.invertedYRatio; - } else { - paths = this.drawColumnPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - x: x, - y: y, - xDivision: xDivision, - pathTo: pathTo, - pathFrom: pathFrom, - barWidth: barWidth, - zeroH: zeroH, - strokeWidth: strokeWidth, - elSeries: elSeries - }); - barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; - } - - pathTo = paths.pathTo; - pathFrom = paths.pathFrom; - y = paths.y; - x = paths.x; // push current X - - if (j > 0) { - xArrj.push(x + barWidth / 2); - } - - yArrj.push(y); - var pathFill = this.getPathFillColor(series, i, j, realIndex); - elSeries = this.renderSeries({ - realIndex: realIndex, - pathFill: pathFill, - j: j, - i: i, - pathFrom: pathFrom, - pathTo: pathTo, - strokeWidth: strokeWidth, - elSeries: elSeries, - x: x, - y: y, - series: series, - barHeight: barHeight, - barWidth: barWidth, - elDataLabelsWrap: elDataLabelsWrap, - visibleSeries: this.visibleI, - type: 'bar' - }); - } // push all x val arrays into main xArr - - - w.globals.seriesXvalues[realIndex] = xArrj; - w.globals.seriesYvalues[realIndex] = yArrj; - ret.add(elSeries); - } - - return ret; - } - }, { - key: "getPathFillColor", - value: function getPathFillColor(series, i, j, realIndex) { - var w = this.w; - var fill = new Fill(this.ctx); - var fillColor = null; - var seriesNumber = this.barOptions.distributed ? j : i; - - if (this.barOptions.colors.ranges.length > 0) { - var colorRange = this.barOptions.colors.ranges; - colorRange.map(function (range) { - if (series[i][j] >= range.from && series[i][j] <= range.to) { - fillColor = range.color; - } - }); - } - - if (w.config.series[i].data[j] && w.config.series[i].data[j].fillColor) { - fillColor = w.config.series[i].data[j].fillColor; - } - - var pathFill = fill.fillPath({ - seriesNumber: this.barOptions.distributed ? seriesNumber : realIndex, - color: fillColor, - value: series[i][j] - }); - return pathFill; - } - }, { - key: "renderSeries", - value: function renderSeries(_ref) { - var realIndex = _ref.realIndex, - pathFill = _ref.pathFill, - lineFill = _ref.lineFill, - j = _ref.j, - i = _ref.i, - pathFrom = _ref.pathFrom, - pathTo = _ref.pathTo, - strokeWidth = _ref.strokeWidth, - elSeries = _ref.elSeries, - x = _ref.x, - y = _ref.y, - series = _ref.series, - barHeight = _ref.barHeight, - barWidth = _ref.barWidth, - elDataLabelsWrap = _ref.elDataLabelsWrap, - visibleSeries = _ref.visibleSeries, - type = _ref.type; - var w = this.w; - var graphics = new Graphics(this.ctx); - - if (!lineFill) { - /* fix apexcharts#341 */ - lineFill = this.barOptions.distributed ? w.globals.stroke.colors[j] : w.globals.stroke.colors[realIndex]; - } - - if (w.config.series[i].data[j] && w.config.series[i].data[j].strokeColor) { - lineFill = w.config.series[i].data[j].strokeColor; - } - - if (this.isNullValue) { - pathFill = 'none'; - } - - var delay = j / w.config.chart.animations.animateGradually.delay * (w.config.chart.animations.speed / w.globals.dataPoints) / 2.4; - var renderedPath = graphics.renderPaths({ - i: i, - j: j, - realIndex: realIndex, - pathFrom: pathFrom, - pathTo: pathTo, - stroke: lineFill, - strokeWidth: strokeWidth, - strokeLineCap: w.config.stroke.lineCap, - fill: pathFill, - animationDelay: delay, - initialSpeed: w.config.chart.animations.speed, - dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed, - className: "apexcharts-".concat(type, "-area"), - id: "apexcharts-".concat(type, "-area") - }); - renderedPath.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); - var filters = new Filters(this.ctx); - filters.setSelectionFilter(renderedPath, realIndex, j); - elSeries.add(renderedPath); - var dataLabels = this.calculateDataLabelsPos({ - x: x, - y: y, - i: i, - j: j, - series: series, - realIndex: realIndex, - barHeight: barHeight, - barWidth: barWidth, - renderedPath: renderedPath, - visibleSeries: visibleSeries - }); - - if (dataLabels !== null) { - elDataLabelsWrap.add(dataLabels); - } - - elSeries.add(elDataLabelsWrap); - return elSeries; - } - }, { - key: "initVariables", - value: function initVariables(series) { - var w = this.w; - this.series = series; - this.totalItems = 0; - this.seriesLen = 0; - this.visibleI = -1; - this.visibleItems = 1; // number of visible bars after user zoomed in/out - - for (var sl = 0; sl < series.length; sl++) { - if (series[sl].length > 0) { - this.seriesLen = this.seriesLen + 1; - this.totalItems += series[sl].length; - } - - if (w.globals.isXNumeric) { - // get max visible items - for (var j = 0; j < series[sl].length; j++) { - if (w.globals.seriesX[sl][j] > w.globals.minX && w.globals.seriesX[sl][j] < w.globals.maxX) { - this.visibleItems++; - } - } - } else { - this.visibleItems = w.globals.dataPoints; - } - } - - if (this.seriesLen === 0) { - // A small adjustment when combo charts are used - this.seriesLen = 1; - } - } - }, { - key: "initialPositions", - value: function initialPositions() { - var w = this.w; - var x, y, yDivision, xDivision, barHeight, barWidth, zeroH, zeroW; - - if (this.isHorizontal) { - // height divided into equal parts - yDivision = w.globals.gridHeight / w.globals.dataPoints; - barHeight = yDivision / this.seriesLen; - - if (w.globals.isXNumeric) { - yDivision = w.globals.gridHeight / this.totalItems; - barHeight = yDivision / this.seriesLen; - } - - barHeight = barHeight * parseInt(this.barOptions.barHeight) / 100; - zeroW = this.baseLineInvertedY + w.globals.padHorizontal + (this.isReversed ? w.globals.gridWidth : 0) - (this.isReversed ? this.baseLineInvertedY * 2 : 0); - y = (yDivision - barHeight * this.seriesLen) / 2; - } else { - // width divided into equal parts - xDivision = w.globals.gridWidth / this.visibleItems; - barWidth = xDivision / this.seriesLen * parseInt(this.barOptions.columnWidth) / 100; - - if (w.globals.isXNumeric) { - // max barwidth should be equal to minXDiff to avoid overlap - xDivision = w.globals.minXDiff / this.xRatio; - barWidth = xDivision / this.seriesLen * parseInt(this.barOptions.columnWidth) / 100; - } - - zeroH = w.globals.gridHeight - this.baseLineY[this.yaxisIndex] - (this.isReversed ? w.globals.gridHeight : 0) + (this.isReversed ? this.baseLineY[this.yaxisIndex] * 2 : 0); - x = w.globals.padHorizontal + (xDivision - barWidth * this.seriesLen) / 2; - } - - return { - x: x, - y: y, - yDivision: yDivision, - xDivision: xDivision, - barHeight: barHeight, - barWidth: barWidth, - zeroH: zeroH, - zeroW: zeroW - }; - } - }, { - key: "drawBarPaths", - value: function drawBarPaths(_ref2) { - var indexes = _ref2.indexes, - barHeight = _ref2.barHeight, - strokeWidth = _ref2.strokeWidth, - pathTo = _ref2.pathTo, - pathFrom = _ref2.pathFrom, - zeroW = _ref2.zeroW, - x = _ref2.x, - y = _ref2.y, - yDivision = _ref2.yDivision, - elSeries = _ref2.elSeries; - var w = this.w; - var graphics = new Graphics(this.ctx); - var i = indexes.i; - var j = indexes.j; - var realIndex = indexes.realIndex; - var bc = indexes.bc; - - if (w.globals.isXNumeric) { - y = (w.globals.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight; - } - - var barYPosition = y + barHeight * this.visibleI; - pathTo = graphics.move(zeroW, barYPosition); - pathFrom = graphics.move(zeroW, barYPosition); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j); - } - - if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { - x = zeroW; - } else { - x = zeroW + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2; - } - - var endingShapeOpts = { - barHeight: barHeight, - strokeWidth: strokeWidth, - barYPosition: barYPosition, - x: x, - zeroW: zeroW - }; - var endingShape = this.barEndingShape(w, endingShapeOpts, this.series, i, j); - pathTo = pathTo + graphics.line(endingShape.newX, barYPosition) + endingShape.path + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); - pathFrom = pathFrom + graphics.line(zeroW, barYPosition) + endingShape.ending_p_from + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); - - if (!w.globals.isXNumeric) { - y = y + yDivision; - } - - if (this.barOptions.colors.backgroundBarColors.length > 0 && i === 0) { - if (bc >= this.barOptions.colors.backgroundBarColors.length) { - bc = 0; - } - - var bcolor = this.barOptions.colors.backgroundBarColors[bc]; - var rect = graphics.drawRect(0, barYPosition - barHeight * this.visibleI, w.globals.gridWidth, barHeight * this.seriesLen, 0, bcolor, this.barOptions.colors.backgroundBarOpacity); - elSeries.add(rect); - rect.node.classList.add('apexcharts-backgroundBar'); - } - - return { - pathTo: pathTo, - pathFrom: pathFrom, - x: x, - y: y, - barYPosition: barYPosition - }; - } - }, { - key: "drawColumnPaths", - value: function drawColumnPaths(_ref3) { - var indexes = _ref3.indexes, - x = _ref3.x, - y = _ref3.y, - xDivision = _ref3.xDivision, - pathTo = _ref3.pathTo, - pathFrom = _ref3.pathFrom, - barWidth = _ref3.barWidth, - zeroH = _ref3.zeroH, - strokeWidth = _ref3.strokeWidth, - elSeries = _ref3.elSeries; - var w = this.w; - var graphics = new Graphics(this.ctx); - var i = indexes.i; - var j = indexes.j; - var realIndex = indexes.realIndex; - var bc = indexes.bc; - - if (w.globals.isXNumeric) { - x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2; - } - - var barXPosition = x + barWidth * this.visibleI; - pathTo = graphics.move(barXPosition, zeroH); - pathFrom = graphics.move(barXPosition, zeroH); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j); - } - - if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { - y = zeroH; - } else { - y = zeroH - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2; - } - - var endingShapeOpts = { - barWidth: barWidth, - strokeWidth: strokeWidth, - barXPosition: barXPosition, - y: y, - zeroH: zeroH - }; - var endingShape = this.barEndingShape(w, endingShapeOpts, this.series, i, j); - pathTo = pathTo + graphics.line(barXPosition, endingShape.newY) + endingShape.path + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition - strokeWidth / 2, zeroH); - pathFrom = pathFrom + graphics.line(barXPosition, zeroH) + endingShape.ending_p_from + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition - strokeWidth / 2, zeroH); - - if (!w.globals.isXNumeric) { - x = x + xDivision; - } - - if (this.barOptions.colors.backgroundBarColors.length > 0 && i === 0) { - if (bc >= this.barOptions.colors.backgroundBarColors.length) { - bc = 0; - } - - var bcolor = this.barOptions.colors.backgroundBarColors[bc]; - var rect = graphics.drawRect(barXPosition - barWidth * this.visibleI, 0, barWidth * this.seriesLen, w.globals.gridHeight, 0, bcolor, this.barOptions.colors.backgroundBarOpacity); - elSeries.add(rect); - rect.node.classList.add('apexcharts-backgroundBar'); - } - - return { - pathTo: pathTo, - pathFrom: pathFrom, - x: x, - y: y, - barXPosition: barXPosition - }; - } - /** getPathFrom is a common function for bars/columns which is used to get previous paths when data changes. - * @memberof Bar - * @param {int} realIndex - current iterating i - * @param {int} j - current iterating series's j index - * @return {string} pathFrom is the string which will be appended in animations - **/ - - }, { - key: "getPathFrom", - value: function getPathFrom(realIndex, j) { - var w = this.w; - var pathFrom; - - for (var pp = 0; pp < w.globals.previousPaths.length; pp++) { - var gpp = w.globals.previousPaths[pp]; - - if (gpp.paths.length > 0 && parseInt(gpp.realIndex) === parseInt(realIndex)) { - if (typeof w.globals.previousPaths[pp].paths[j] !== 'undefined') { - pathFrom = w.globals.previousPaths[pp].paths[j].d; - } - } - } - - return pathFrom; - } - /** calculateBarDataLabels is used to calculate the positions for the data-labels - * It also sets the element's data attr for bars and calls drawCalculatedBarDataLabels() - * @memberof Bar - * @param {object} {barProps} most of the bar properties used throughout the bar - * drawing function - * @return {object} dataLabels node-element which you can append later - **/ - - }, { - key: "calculateDataLabelsPos", - value: function calculateDataLabelsPos(_ref4) { - var x = _ref4.x, - y = _ref4.y, - i = _ref4.i, - j = _ref4.j, - realIndex = _ref4.realIndex, - series = _ref4.series, - barHeight = _ref4.barHeight, - barWidth = _ref4.barWidth, - visibleSeries = _ref4.visibleSeries, - renderedPath = _ref4.renderedPath; - var w = this.w; - var graphics = new Graphics(this.ctx); - var strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; - var bcx = x + parseFloat(barWidth * visibleSeries); - var bcy = y + parseFloat(barHeight * visibleSeries); - - if (w.globals.isXNumeric && !w.globals.isBarHorizontal) { - bcx = x + parseFloat(barWidth * (visibleSeries + 1)) - strokeWidth; - bcy = y + parseFloat(barHeight * (visibleSeries + 1)) - strokeWidth; - } - - var dataLabels = null; - var dataLabelsX = x; - var dataLabelsY = y; - var dataLabelsPos = {}; - var dataLabelsConfig = w.config.dataLabels; - var barDataLabelsConfig = this.barOptions.dataLabels; - var offX = dataLabelsConfig.offsetX; - var offY = dataLabelsConfig.offsetY; - var textRects = { - width: 0, - height: 0 - }; - - if (w.config.dataLabels.enabled) { - textRects = graphics.getTextRects(w.globals.yLabelFormatters[0](w.globals.maxY), parseInt(dataLabelsConfig.style.fontSize)); - } - - if (this.isHorizontal) { - dataLabelsPos = this.calculateBarsDataLabelsPosition({ - x: x, - y: y, - i: i, - j: j, - renderedPath: renderedPath, - bcy: bcy, - barHeight: barHeight, - barWidth: barWidth, - textRects: textRects, - strokeWidth: strokeWidth, - dataLabelsX: dataLabelsX, - dataLabelsY: dataLabelsY, - barDataLabelsConfig: barDataLabelsConfig, - offX: offX, - offY: offY - }); - } else { - dataLabelsPos = this.calculateColumnsDataLabelsPosition({ - x: x, - y: y, - i: i, - j: j, - renderedPath: renderedPath, - realIndex: realIndex, - bcx: bcx, - bcy: bcy, - barHeight: barHeight, - barWidth: barWidth, - textRects: textRects, - strokeWidth: strokeWidth, - dataLabelsY: dataLabelsY, - barDataLabelsConfig: barDataLabelsConfig, - offX: offX, - offY: offY - }); - } - - renderedPath.attr({ - cy: dataLabelsPos.bcy, - cx: dataLabelsPos.bcx, - j: j, - val: series[i][j], - barHeight: barHeight, - barWidth: barWidth - }); - dataLabels = this.drawCalculatedDataLabels({ - x: dataLabelsPos.dataLabelsX, - y: dataLabelsPos.dataLabelsY, - val: series[i][j], - i: realIndex, - j: j, - barWidth: barWidth, - barHeight: barHeight, - textRects: textRects, - dataLabelsConfig: dataLabelsConfig - }); - return dataLabels; - } - }, { - key: "calculateColumnsDataLabelsPosition", - value: function calculateColumnsDataLabelsPosition(opts) { - var w = this.w; - var i = opts.i, - j = opts.j, - y = opts.y, - bcx = opts.bcx, - barWidth = opts.barWidth, - barHeight = opts.barHeight, - textRects = opts.textRects, - dataLabelsY = opts.dataLabelsY, - barDataLabelsConfig = opts.barDataLabelsConfig, - strokeWidth = opts.strokeWidth, - offX = opts.offX, - offY = opts.offY; - var dataLabelsX; - var dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints; - bcx = bcx - strokeWidth / 2; - - if (w.globals.isXNumeric) { - dataLabelsX = bcx - barWidth / 2 + offX; - } else { - dataLabelsX = bcx - dataPointsDividedWidth + barWidth / 2 + offX; - } - - var valIsNegative = this.series[i][j] <= 0; - - if (this.isReversed) { - y = y - barHeight; - } - - switch (barDataLabelsConfig.position) { - case 'center': - if (valIsNegative) { - dataLabelsY = y + barHeight / 2 + textRects.height / 2 + offY; - } else { - dataLabelsY = y + barHeight / 2 + textRects.height / 2 - offY; - } - - break; - - case 'bottom': - if (valIsNegative) { - dataLabelsY = y + barHeight + textRects.height + strokeWidth + offY; - } else { - dataLabelsY = y + barHeight - textRects.height / 2 + strokeWidth - offY; - } - - break; - - case 'top': - if (valIsNegative) { - dataLabelsY = y - textRects.height / 2 - offY; - } else { - dataLabelsY = y + textRects.height + offY; - } - - break; - } - - if (!w.config.chart.stacked) { - if (dataLabelsY < 0) { - dataLabelsY = 0 + strokeWidth; - } else if (dataLabelsY + textRects.height / 3 > w.globals.gridHeight) { - dataLabelsY = w.globals.gridHeight - strokeWidth; - } - } - - return { - bcx: bcx, - bcy: y, - dataLabelsX: dataLabelsX, - dataLabelsY: dataLabelsY - }; - } - }, { - key: "calculateBarsDataLabelsPosition", - value: function calculateBarsDataLabelsPosition(opts) { - var w = this.w; - var x = opts.x, - i = opts.i, - j = opts.j, - bcy = opts.bcy, - barHeight = opts.barHeight, - barWidth = opts.barWidth, - textRects = opts.textRects, - dataLabelsX = opts.dataLabelsX, - strokeWidth = opts.strokeWidth, - barDataLabelsConfig = opts.barDataLabelsConfig, - offX = opts.offX, - offY = opts.offY; - var dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints; - var dataLabelsY = bcy - dataPointsDividedHeight + barHeight / 2 + textRects.height / 2 + offY - 3; - var valIsNegative = this.series[i][j] <= 0; - - if (this.isReversed) { - x = x + barWidth; - } - - switch (barDataLabelsConfig.position) { - case 'center': - if (valIsNegative) { - dataLabelsX = x - barWidth / 2 - offX; - } else { - dataLabelsX = x - barWidth / 2 + offX; - } - - break; - - case 'bottom': - if (valIsNegative) { - dataLabelsX = x - barWidth - strokeWidth - Math.round(textRects.width / 2) - offX; - } else { - dataLabelsX = x - barWidth + strokeWidth + Math.round(textRects.width / 2) + offX; - } - - break; - - case 'top': - if (valIsNegative) { - dataLabelsX = x - strokeWidth + Math.round(textRects.width / 2) - offX; - } else { - dataLabelsX = x - strokeWidth - Math.round(textRects.width / 2) + offX; - } - - break; - } - - if (!w.config.chart.stacked) { - if (dataLabelsX < 0) { - dataLabelsX = dataLabelsX + textRects.width + strokeWidth; - } else if (dataLabelsX + textRects.width / 2 > w.globals.gridWidth) { - dataLabelsX = w.globals.gridWidth - textRects.width - strokeWidth; - } - } - - return { - bcx: x, - bcy: bcy, - dataLabelsX: dataLabelsX, - dataLabelsY: dataLabelsY - }; - } - }, { - key: "drawCalculatedDataLabels", - value: function drawCalculatedDataLabels(_ref5) { - var x = _ref5.x, - y = _ref5.y, - val = _ref5.val, - i = _ref5.i, - j = _ref5.j, - textRects = _ref5.textRects, - barHeight = _ref5.barHeight, - barWidth = _ref5.barWidth, - dataLabelsConfig = _ref5.dataLabelsConfig; - var w = this.w; - var dataLabels = new DataLabels(this.ctx); - var graphics = new Graphics(this.ctx); - var formatter = dataLabelsConfig.formatter; - var elDataLabelsWrap = null; - var isSeriesNotCollapsed = w.globals.collapsedSeriesIndices.indexOf(i) > -1; - - if (dataLabelsConfig.enabled && !isSeriesNotCollapsed) { - elDataLabelsWrap = graphics.group({ - class: 'apexcharts-data-labels' - }); - var text = ''; - - if (typeof val !== 'undefined' && val !== null) { - text = formatter(val, { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - - if (val === 0 && w.config.chart.stacked) { - // in a stacked bar/column chart, 0 value should be neglected as it will overlap on the next element - text = ''; - } - - if (w.config.chart.stacked && this.barOptions.dataLabels.hideOverflowingLabels) { - // if there is not enough space to draw the label in the bar/column rect, check hideOverflowingLabels property to prevent overflowing on wrong rect - // Note: This issue is only seen in stacked charts - if (this.isHorizontal) { - barWidth = this.series[i][j] / this.yRatio[this.yaxisIndex]; - - if (textRects.width / 1.6 > barWidth) { - text = ''; - } - } else { - barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; - - if (textRects.height / 1.6 > barHeight) { - text = ''; - } - } - } - - dataLabels.plotDataLabelsText({ - x: x, - y: y, - text: text, - i: i, - j: j, - parent: elDataLabelsWrap, - dataLabelsConfig: dataLabelsConfig, - alwaysDrawDataLabel: true, - offsetCorrection: true - }); - } - - return elDataLabelsWrap; - } - /** barEndingShape draws the various shapes on top of bars/columns - * @memberof Bar - * @param {object} w - chart context - * @param {object} opts - consists several properties like barHeight/barWidth - * @param {array} series - global primary series - * @param {int} i - current iterating series's index - * @param {int} j - series's j of i - * @return {object} path - ending shape whether round/arrow - * ending_p_from - similar to pathFrom - * newY - which is calculated from existing y and new shape's top - **/ - - }, { - key: "barEndingShape", - value: function barEndingShape(w, opts, series, i, j) { - var graphics = new Graphics(this.ctx); - - if (this.isHorizontal) { - var endingShape = null; - var endingShapeFrom = ''; - var x = opts.x; - - if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) { - var inverse = series[i][j] < 0; - var eX = opts.barHeight / 2 - opts.strokeWidth; - if (inverse) eX = -opts.barHeight / 2 - opts.strokeWidth; - - if (!w.config.chart.stacked) { - if (this.barOptions.endingShape === 'rounded') { - x = opts.x - eX / 2; - } - } - - switch (this.barOptions.endingShape) { - case 'flat': - endingShape = graphics.line(x, opts.barYPosition + opts.barHeight - opts.strokeWidth); - break; - - case 'rounded': - endingShape = graphics.quadraticCurve(x + eX, opts.barYPosition + (opts.barHeight - opts.strokeWidth) / 2, x, opts.barYPosition + opts.barHeight - opts.strokeWidth); - break; - } - } - - return { - path: endingShape, - ending_p_from: endingShapeFrom, - newX: x - }; - } else { - var _endingShape = null; - var _endingShapeFrom = ''; - var y = opts.y; - - if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) { - var _inverse = series[i][j] < 0; - - var eY = opts.barWidth / 2 - opts.strokeWidth; - if (_inverse) eY = -opts.barWidth / 2 - opts.strokeWidth; - - if (!w.config.chart.stacked) { - // the shape exceeds the chart height, hence reduce y - if (this.barOptions.endingShape === 'rounded') { - y = y + eY / 2; - } - } - - switch (this.barOptions.endingShape) { - case 'flat': - _endingShape = graphics.line(opts.barXPosition + opts.barWidth - opts.strokeWidth, y); - break; - - case 'rounded': - _endingShape = graphics.quadraticCurve(opts.barXPosition + (opts.barWidth - opts.strokeWidth) / 2, y - eY, opts.barXPosition + opts.barWidth - opts.strokeWidth, y); - break; - } - } - - return { - path: _endingShape, - ending_p_from: _endingShapeFrom, - newY: y - }; - } - } - }]); - - return Bar; -}(); - -/** - * ApexCharts BarStacked Class responsible for drawing both Stacked Columns and Bars. - * - * @module BarStacked - * The whole calculation for stacked bar/column is different from normal bar/column, - * hence it makes sense to derive a new class for it extending most of the props of Parent Bar - **/ - -var BarStacked = -/*#__PURE__*/ -function (_Bar) { - _inherits(BarStacked, _Bar); - - function BarStacked() { - _classCallCheck(this, BarStacked); - - return _possibleConstructorReturn(this, _getPrototypeOf(BarStacked).apply(this, arguments)); - } - - _createClass(BarStacked, [{ - key: "draw", - value: function draw(series, seriesIndex) { - var w = this.w; - this.graphics = new Graphics(this.ctx); - this.fill = new Fill(this.ctx); - this.bar = new Bar(this.ctx, this.xyRatios); - var coreUtils = new CoreUtils(this.ctx, w); - series = coreUtils.getLogSeries(series); - this.yRatio = coreUtils.getLogYRatios(this.yRatio); - this.initVariables(series); - - if (w.config.chart.stackType === '100%') { - series = w.globals.seriesPercent.slice(); - } - - this.series = series; - this.totalItems = 0; - this.prevY = []; // y position on chart - - this.prevX = []; // x position on chart - - this.prevYF = []; // y position including shapes on chart - - this.prevXF = []; // x position including shapes on chart - - this.prevYVal = []; // y values (series[i][j]) in columns - - this.prevXVal = []; // x values (series[i][j]) in bars - - this.xArrj = []; // xj indicates x position on graph in bars - - this.xArrjF = []; // xjF indicates bar's x position + endingshape's positions in bars - - this.xArrjVal = []; // x val means the actual series's y values in horizontal/bars - - this.yArrj = []; // yj indicates y position on graph in columns - - this.yArrjF = []; // yjF indicates bar's y position + endingshape's positions in columns - - this.yArrjVal = []; // y val means the actual series's y values in columns - - for (var sl = 0; sl < series.length; sl++) { - if (series[sl].length > 0) { - this.totalItems += series[sl].length; - } - } - - var ret = this.graphics.group({ - class: 'apexcharts-bar-series apexcharts-plot-series' - }); - var x = 0; - var y = 0; - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - var pathTo = void 0, - pathFrom = void 0; - var xDivision = void 0; // xDivision is the GRIDWIDTH divided by number of datapoints (columns) - - var yDivision = void 0; // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) - - var zeroH = void 0; // zeroH is the baseline where 0 meets y axis - - var zeroW = void 0; // zeroW is the baseline where 0 meets x axis - - var xArrValues = []; - var yArrValues = []; - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; - - if (this.yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; // el to which series will be drawn - - var elSeries = this.graphics.group({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), - rel: i + 1, - 'data:realIndex': realIndex - }); // eldatalabels - - var elDataLabelsWrap = this.graphics.group({ - class: 'apexcharts-datalabels' - }); - var strokeWidth = 0; - var barHeight = 0; - var barWidth = 0; - var initPositions = this.initialPositions(x, y, xDivision, yDivision, zeroH, zeroW); - y = initPositions.y; - barHeight = initPositions.barHeight; - yDivision = initPositions.yDivision; - zeroW = initPositions.zeroW; - x = initPositions.x; - barWidth = initPositions.barWidth; - xDivision = initPositions.xDivision; - zeroH = initPositions.zeroH; - this.yArrj = []; - this.yArrjF = []; - this.yArrjVal = []; - this.xArrj = []; - this.xArrjF = []; - this.xArrjVal = []; // if (!this.horizontal) { - // this.xArrj.push(x + barWidth / 2) - // } - - for (var j = 0; j < w.globals.dataPoints; j++) { - if (w.config.stroke.show) { - if (this.isNullValue) { - strokeWidth = 0; - } else { - strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; - } - } - - var paths = null; - - if (this.isHorizontal) { - paths = this.drawBarPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - barHeight: barHeight, - strokeWidth: strokeWidth, - pathTo: pathTo, - pathFrom: pathFrom, - zeroW: zeroW, - x: x, - y: y, - yDivision: yDivision, - elSeries: elSeries - }); - barWidth = this.series[i][j] / this.invertedYRatio; - } else { - paths = this.drawColumnPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - x: x, - y: y, - xDivision: xDivision, - pathTo: pathTo, - pathFrom: pathFrom, - barWidth: barWidth, - zeroH: zeroH, - strokeWidth: strokeWidth, - elSeries: elSeries - }); - barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; - } - - pathTo = paths.pathTo; - pathFrom = paths.pathFrom; - y = paths.y; - x = paths.x; - xArrValues.push(x); - yArrValues.push(y); - var pathFill = this.bar.getPathFillColor(series, i, j, realIndex); - elSeries = this.renderSeries({ - realIndex: realIndex, - pathFill: pathFill, - j: j, - i: i, - pathFrom: pathFrom, - pathTo: pathTo, - strokeWidth: strokeWidth, - elSeries: elSeries, - x: x, - y: y, - series: series, - barHeight: barHeight, - barWidth: barWidth, - elDataLabelsWrap: elDataLabelsWrap, - type: 'bar', - visibleSeries: 0 - }); - } // push all x val arrays into main xArr - - - w.globals.seriesXvalues[realIndex] = xArrValues; - w.globals.seriesYvalues[realIndex] = yArrValues; // push all current y values array to main PrevY Array - - this.prevY.push(this.yArrj); - this.prevYF.push(this.yArrjF); - this.prevYVal.push(this.yArrjVal); - this.prevX.push(this.xArrj); - this.prevXF.push(this.xArrjF); - this.prevXVal.push(this.xArrjVal); - ret.add(elSeries); - } - - return ret; - } - }, { - key: "initialPositions", - value: function initialPositions(x, y, xDivision, yDivision, zeroH, zeroW) { - var w = this.w; - var barHeight, barWidth; - - if (this.isHorizontal) { - // height divided into equal parts - yDivision = w.globals.gridHeight / w.globals.dataPoints; - barHeight = yDivision; - barHeight = barHeight * parseInt(w.config.plotOptions.bar.barHeight) / 100; - zeroW = this.baseLineInvertedY + w.globals.padHorizontal + (this.isReversed ? w.globals.gridWidth : 0) - (this.isReversed ? this.baseLineInvertedY * 2 : 0); // initial y position is half of barHeight * half of number of Bars - - y = (yDivision - barHeight) / 2; - } else { - // width divided into equal parts - xDivision = w.globals.gridWidth / w.globals.dataPoints; - barWidth = xDivision; - - if (w.globals.isXNumeric) { - xDivision = w.globals.minXDiff / this.xRatio; - barWidth = xDivision * parseInt(this.barOptions.columnWidth) / 100; - } else { - barWidth = barWidth * parseInt(w.config.plotOptions.bar.columnWidth) / 100; - } - - zeroH = this.baseLineY[this.yaxisIndex] + (this.isReversed ? w.globals.gridHeight : 0) - (this.isReversed ? this.baseLineY[this.yaxisIndex] * 2 : 0); // initial x position is one third of barWidth - - x = w.globals.padHorizontal + (xDivision - barWidth) / 2; - } - - return { - x: x, - y: y, - yDivision: yDivision, - xDivision: xDivision, - barHeight: barHeight, - barWidth: barWidth, - zeroH: zeroH, - zeroW: zeroW - }; - } - }, { - key: "drawBarPaths", - value: function drawBarPaths(_ref) { - var indexes = _ref.indexes, - barHeight = _ref.barHeight, - strokeWidth = _ref.strokeWidth, - pathTo = _ref.pathTo, - pathFrom = _ref.pathFrom, - zeroW = _ref.zeroW, - x = _ref.x, - y = _ref.y, - yDivision = _ref.yDivision, - elSeries = _ref.elSeries; - var w = this.w; - var barYPosition = y; - var barXPosition; - var i = indexes.i; - var j = indexes.j; - var realIndex = indexes.realIndex; - var bc = indexes.bc; - var prevBarW = 0; - - for (var k = 0; k < this.prevXF.length; k++) { - prevBarW = prevBarW + this.prevXF[k][j]; - } - - if (i > 0) { - var bXP = zeroW; - - if (this.prevXVal[i - 1][j] < 0) { - if (this.series[i][j] >= 0) { - bXP = this.prevX[i - 1][j] + prevBarW - (this.isReversed ? prevBarW : 0) * 2; - } else { - bXP = this.prevX[i - 1][j]; - } - } else if (this.prevXVal[i - 1][j] >= 0) { - if (this.series[i][j] >= 0) { - bXP = this.prevX[i - 1][j]; - } else { - bXP = this.prevX[i - 1][j] - prevBarW + (this.isReversed ? prevBarW : 0) * 2; - } - } - - barXPosition = bXP; - } else { - // the first series will not have prevX values - barXPosition = zeroW; - } - - if (this.series[i][j] === null) { - x = barXPosition; - } else { - x = barXPosition + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2; - } - - var endingShapeOpts = { - barHeight: barHeight, - strokeWidth: strokeWidth, - invertedYRatio: this.invertedYRatio, - barYPosition: barYPosition, - x: x - }; - var endingShape = this.bar.barEndingShape(w, endingShapeOpts, this.series, i, j); - - if (this.series.length > 1 && i !== this.endingShapeOnSeriesNumber) { - // revert back to flat shape if not last series - endingShape.path = this.graphics.line(endingShape.newX, barYPosition + barHeight - strokeWidth); - } - - this.xArrj.push(endingShape.newX); - this.xArrjF.push(Math.abs(barXPosition - endingShape.newX)); - this.xArrjVal.push(this.series[i][j]); - pathTo = this.graphics.move(barXPosition, barYPosition); - pathFrom = this.graphics.move(barXPosition, barYPosition); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.bar.getPathFrom(realIndex, j, false); - } - - pathTo = pathTo + this.graphics.line(endingShape.newX, barYPosition) + endingShape.path + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition); - pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition); - - if (w.config.plotOptions.bar.colors.backgroundBarColors.length > 0 && i === 0) { - if (bc >= w.config.plotOptions.bar.colors.backgroundBarColors.length) { - bc = 0; - } - - var bcolor = w.config.plotOptions.bar.colors.backgroundBarColors[bc]; - var rect = this.graphics.drawRect(0, barYPosition, w.globals.gridWidth, barHeight, 0, bcolor, w.config.plotOptions.bar.colors.backgroundBarOpacity); - elSeries.add(rect); - rect.node.classList.add('apexcharts-backgroundBar'); - } - - y = y + yDivision; - return { - pathTo: pathTo, - pathFrom: pathFrom, - x: x, - y: y - }; - } - }, { - key: "drawColumnPaths", - value: function drawColumnPaths(_ref2) { - var indexes = _ref2.indexes, - x = _ref2.x, - y = _ref2.y, - xDivision = _ref2.xDivision, - pathTo = _ref2.pathTo, - pathFrom = _ref2.pathFrom, - barWidth = _ref2.barWidth, - zeroH = _ref2.zeroH, - strokeWidth = _ref2.strokeWidth, - elSeries = _ref2.elSeries; - var w = this.w; - var i = indexes.i; - var j = indexes.j; - var realIndex = indexes.realIndex; - var bc = indexes.bc; - - if (w.globals.isXNumeric) { - var seriesVal = w.globals.seriesX[i][j]; - if (!seriesVal) seriesVal = 0; - x = (seriesVal - w.globals.minX) / this.xRatio - barWidth / 2; - } - - var barXPosition = x; - var barYPosition; - var prevBarH = 0; - - for (var k = 0; k < this.prevYF.length; k++) { - prevBarH = prevBarH + this.prevYF[k][j]; - } - - if (i > 0 && !w.globals.isXNumeric || i > 0 && w.globals.isXNumeric && w.globals.seriesX[i - 1][j] === w.globals.seriesX[i][j]) { - var bYP; - var prevYValue = this.prevY[i - 1][j]; - - if (this.prevYVal[i - 1][j] < 0) { - if (this.series[i][j] >= 0) { - bYP = prevYValue - prevBarH + (this.isReversed ? prevBarH : 0) * 2; - } else { - bYP = prevYValue; - } - } else { - if (this.series[i][j] >= 0) { - bYP = prevYValue; - } else { - bYP = prevYValue + prevBarH - (this.isReversed ? prevBarH : 0) * 2; - } - } - - barYPosition = bYP; - } else { - // the first series will not have prevY values, also if the prev index's series X doesn't matches the current index's series X, then start from zero - barYPosition = w.globals.gridHeight - zeroH; - } - - y = barYPosition - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2; - var endingShapeOpts = { - barWidth: barWidth, - strokeWidth: strokeWidth, - yRatio: this.yRatio[this.yaxisIndex], - barXPosition: barXPosition, - y: y - }; - var endingShape = this.bar.barEndingShape(w, endingShapeOpts, this.series, i, j); - this.yArrj.push(endingShape.newY); - this.yArrjF.push(Math.abs(barYPosition - endingShape.newY)); - this.yArrjVal.push(this.series[i][j]); - pathTo = this.graphics.move(barXPosition, barYPosition); - pathFrom = this.graphics.move(barXPosition, barYPosition); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.bar.getPathFrom(realIndex, j, false); - } - - pathTo = pathTo + this.graphics.line(barXPosition, endingShape.newY) + endingShape.path + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition - strokeWidth / 2, barYPosition); - pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition - strokeWidth / 2, barYPosition); - - if (w.config.plotOptions.bar.colors.backgroundBarColors.length > 0 && i === 0) { - if (bc >= w.config.plotOptions.bar.colors.backgroundBarColors.length) { - bc = 0; - } - - var bcolor = w.config.plotOptions.bar.colors.backgroundBarColors[bc]; - var rect = this.graphics.drawRect(barXPosition, 0, barWidth, w.globals.gridHeight, 0, bcolor, w.config.plotOptions.bar.colors.backgroundBarOpacity); - elSeries.add(rect); - rect.node.classList.add('apexcharts-backgroundBar'); - } - - x = x + xDivision; - return { - pathTo: pathTo, - pathFrom: pathFrom, - x: w.globals.isXNumeric ? x - xDivision : x, - y: y - }; - } - /* - * When user clicks on legends, the collapsed series will be filled with [0,0,0,...,0] - * We need to make sure, that the last series is not [0,0,0,...,0] - * as we need to draw shapes on the last series (for stacked bars/columns only) - * Hence, we are collecting all inner arrays in series which has [0,0,0...,0] - **/ - - }, { - key: "checkZeroSeries", - value: function checkZeroSeries(_ref3) { - var series = _ref3.series; - var w = this.w; - - for (var zs = 0; zs < series.length; zs++) { - var total = 0; - - for (var zsj = 0; zsj < series[w.globals.maxValsInArrayIndex].length; zsj++) { - total += series[zs][zsj]; - } - - if (total === 0) { - this.zeroSerieses.push(zs); - } - } // After getting all zeroserieses, we need to ensure whether endingshapeonSeries is not in that zeroseries array - - - for (var s = series.length - 1; s >= 0; s--) { - if (this.zeroSerieses.indexOf(s) > -1 && s === this.endingShapeOnSeriesNumber) { - this.endingShapeOnSeriesNumber -= 1; - } - } - } - }]); - - return BarStacked; -}(Bar); - -/** - * ApexCharts CandleStick Class responsible for drawing both Stacked Columns and Bars. - * - * @module CandleStick - **/ - -var CandleStick = -/*#__PURE__*/ -function (_Bar) { - _inherits(CandleStick, _Bar); - - function CandleStick() { - _classCallCheck(this, CandleStick); - - return _possibleConstructorReturn(this, _getPrototypeOf(CandleStick).apply(this, arguments)); - } - - _createClass(CandleStick, [{ - key: "draw", - value: function draw(series, seriesIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - this.candlestickOptions = this.w.config.plotOptions.candlestick; - var coreUtils = new CoreUtils(this.ctx, w); - series = coreUtils.getLogSeries(series); - this.series = series; - this.yRatio = coreUtils.getLogYRatios(this.yRatio); - this.initVariables(series); - var ret = graphics.group({ - class: 'apexcharts-candlestick-series apexcharts-plot-series' - }); - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - var pathTo = void 0, - pathFrom = void 0; - var x = void 0, - y = void 0, - xDivision = void 0, - // xDivision is the GRIDWIDTH divided by number of datapoints (columns) - zeroH = void 0; // zeroH is the baseline where 0 meets y axis - - var yArrj = []; // hold y values of current iterating series - - var xArrj = []; // hold x values of current iterating series - - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn - - var elSeries = graphics.group({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), - rel: i + 1, - 'data:realIndex': realIndex - }); - - if (series[i].length > 0) { - this.visibleI = this.visibleI + 1; - } - - var strokeWidth = 0; - var barHeight = 0; - var barWidth = 0; - - if (this.yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - var initPositions = this.initialPositions(); - y = initPositions.y; - barHeight = initPositions.barHeight; - x = initPositions.x; - barWidth = initPositions.barWidth; - xDivision = initPositions.xDivision; - zeroH = initPositions.zeroH; - xArrj.push(x + barWidth / 2); // eldatalabels - - var elDataLabelsWrap = graphics.group({ - class: 'apexcharts-datalabels' - }); - - for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { - if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) { - this.isNullValue = true; - } else { - this.isNullValue = false; - } - - if (w.config.stroke.show) { - if (this.isNullValue) { - strokeWidth = 0; - } else { - strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; - } - } - - var color = void 0; - var paths = this.drawCandleStickPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - x: x, - y: y, - xDivision: xDivision, - pathTo: pathTo, - pathFrom: pathFrom, - barWidth: barWidth, - zeroH: zeroH, - strokeWidth: strokeWidth, - elSeries: elSeries - }); - pathTo = paths.pathTo; - pathFrom = paths.pathFrom; - y = paths.y; - x = paths.x; - color = paths.color; // push current X - - if (j > 0) { - xArrj.push(x + barWidth / 2); - } - - yArrj.push(y); - var pathFill = fill.fillPath({ - seriesNumber: realIndex, - color: color, - value: series[i][j] - }); - var lineFill = this.candlestickOptions.wick.useFillColor ? color : undefined; - elSeries = this.renderSeries({ - realIndex: realIndex, - pathFill: pathFill, - lineFill: lineFill, - j: j, - i: i, - pathFrom: pathFrom, - pathTo: pathTo, - strokeWidth: strokeWidth, - elSeries: elSeries, - x: x, - y: y, - series: series, - barHeight: barHeight, - barWidth: barWidth, - elDataLabelsWrap: elDataLabelsWrap, - visibleSeries: this.visibleI, - type: 'candlestick' - }); - } // push all x val arrays into main xArr - - - w.globals.seriesXvalues[realIndex] = xArrj; - w.globals.seriesYvalues[realIndex] = yArrj; - ret.add(elSeries); - } - - return ret; - } - }, { - key: "drawCandleStickPaths", - value: function drawCandleStickPaths(_ref) { - var indexes = _ref.indexes, - x = _ref.x, - y = _ref.y, - xDivision = _ref.xDivision, - pathTo = _ref.pathTo, - pathFrom = _ref.pathFrom, - barWidth = _ref.barWidth, - zeroH = _ref.zeroH, - strokeWidth = _ref.strokeWidth; - var w = this.w; - var graphics = new Graphics(this.ctx); - var i = indexes.i; - var j = indexes.j; - var isPositive = true; - var colorPos = w.config.plotOptions.candlestick.colors.upward; - var colorNeg = w.config.plotOptions.candlestick.colors.downward; - var yRatio = this.yRatio[this.yaxisIndex]; - var realIndex = indexes.realIndex; - var ohlc = this.getOHLCValue(realIndex, j); - var l1 = zeroH; - var l2 = zeroH; - - if (ohlc.o > ohlc.c) { - isPositive = false; - } - - var y1 = Math.min(ohlc.o, ohlc.c); - var y2 = Math.max(ohlc.o, ohlc.c); - - if (w.globals.isXNumeric) { - x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2; - } - - var barXPosition = x + barWidth * this.visibleI; - - if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { - y1 = zeroH; - } else { - y1 = zeroH - y1 / yRatio; - y2 = zeroH - y2 / yRatio; - l1 = zeroH - ohlc.h / yRatio; - l2 = zeroH - ohlc.l / yRatio; - } - - pathTo = graphics.move(barXPosition, zeroH); - pathFrom = graphics.move(barXPosition, y1); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j, true); - } - - pathTo = graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2); - pathFrom = pathFrom + graphics.move(barXPosition, y1); - - if (!w.globals.isXNumeric) { - x = x + xDivision; - } - - return { - pathTo: pathTo, - pathFrom: pathFrom, - x: x, - y: y2, - barXPosition: barXPosition, - color: isPositive ? colorPos : colorNeg - }; - } - }, { - key: "getOHLCValue", - value: function getOHLCValue(i, j) { - var w = this.w; - return { - o: w.globals.seriesCandleO[i][j], - h: w.globals.seriesCandleH[i][j], - l: w.globals.seriesCandleL[i][j], - c: w.globals.seriesCandleC[i][j] - }; - } - }]); - - return CandleStick; -}(Bar); - -var Crosshairs = -/*#__PURE__*/ -function () { - function Crosshairs(ctx) { - _classCallCheck(this, Crosshairs); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Crosshairs, [{ - key: "drawXCrosshairs", - value: function drawXCrosshairs() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var filters = new Filters(this.ctx); - var crosshairGradient = w.config.xaxis.crosshairs.fill.gradient; - var crosshairShadow = w.config.xaxis.crosshairs.dropShadow; - var fillType = w.config.xaxis.crosshairs.fill.type; - var gradientFrom = crosshairGradient.colorFrom; - var gradientTo = crosshairGradient.colorTo; - var opacityFrom = crosshairGradient.opacityFrom; - var opacityTo = crosshairGradient.opacityTo; - var stops = crosshairGradient.stops; - var shadow = 'none'; - var dropShadow = crosshairShadow.enabled; - var shadowLeft = crosshairShadow.left; - var shadowTop = crosshairShadow.top; - var shadowBlur = crosshairShadow.blur; - var shadowColor = crosshairShadow.color; - var shadowOpacity = crosshairShadow.opacity; - var xcrosshairsFill = w.config.xaxis.crosshairs.fill.color; - - if (w.config.xaxis.crosshairs.show) { - if (fillType === 'gradient') { - xcrosshairsFill = graphics.drawGradient('vertical', gradientFrom, gradientTo, opacityFrom, opacityTo, null, stops, null); - } - - var xcrosshairs = graphics.drawRect(); - - if (w.config.xaxis.crosshairs.width === 1) { - // to prevent drawing 2 lines, convert rect to line - xcrosshairs = graphics.drawLine(); - } - - xcrosshairs.attr({ - class: 'apexcharts-xcrosshairs', - x: 0, - y: 0, - y2: w.globals.gridHeight, - width: Utils.isNumber(w.config.xaxis.crosshairs.width) ? w.config.xaxis.crosshairs.width : 0, - height: w.globals.gridHeight, - fill: xcrosshairsFill, - filter: shadow, - 'fill-opacity': w.config.xaxis.crosshairs.opacity, - stroke: w.config.xaxis.crosshairs.stroke.color, - 'stroke-width': w.config.xaxis.crosshairs.stroke.width, - 'stroke-dasharray': w.config.xaxis.crosshairs.stroke.dashArray - }); - - if (dropShadow) { - xcrosshairs = filters.dropShadow(xcrosshairs, { - left: shadowLeft, - top: shadowTop, - blur: shadowBlur, - color: shadowColor, - opacity: shadowOpacity - }); - } - - w.globals.dom.elGraphical.add(xcrosshairs); - } - } - }, { - key: "drawYCrosshairs", - value: function drawYCrosshairs() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var crosshair = w.config.yaxis[0].crosshairs; - - if (w.config.yaxis[0].crosshairs.show) { - var ycrosshairs = graphics.drawLine(0, 0, w.globals.gridWidth, 0, crosshair.stroke.color, crosshair.stroke.dashArray, crosshair.stroke.width); - ycrosshairs.attr({ - class: 'apexcharts-ycrosshairs' - }); - w.globals.dom.elGraphical.add(ycrosshairs); - } // draw an invisible crosshair to help in positioning the yaxis tooltip - - - var ycrosshairsHidden = graphics.drawLine(0, 0, w.globals.gridWidth, 0, crosshair.stroke.color, 0, 0); - ycrosshairsHidden.attr({ - class: 'apexcharts-ycrosshairs-hidden' - }); - w.globals.dom.elGraphical.add(ycrosshairsHidden); - } - }]); - - return Crosshairs; -}(); - -/** - * ApexCharts HeatMap Class. - * @module HeatMap - **/ - -var HeatMap = -/*#__PURE__*/ -function () { - function HeatMap(ctx, xyRatios) { - _classCallCheck(this, HeatMap); - - this.ctx = ctx; - this.w = ctx.w; - this.xRatio = xyRatios.xRatio; - this.yRatio = xyRatios.yRatio; - this.negRange = false; - this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation; - this.rectRadius = this.w.config.plotOptions.heatmap.radius; - this.strokeWidth = this.w.config.stroke.width; - } - - _createClass(HeatMap, [{ - key: "draw", - value: function draw(series) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var ret = graphics.group({ - class: 'apexcharts-heatmap' - }); - ret.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); // width divided into equal parts - - var xDivision = w.globals.gridWidth / w.globals.dataPoints; - var yDivision = w.globals.gridHeight / w.globals.series.length; - var y1 = 0; - var rev = false; - this.checkColorRange(); - var heatSeries = series.slice(); - - if (w.config.yaxis[0].reversed) { - rev = true; - heatSeries.reverse(); - } - - for (var i = rev ? 0 : heatSeries.length - 1; rev ? i < heatSeries.length : i >= 0; rev ? i++ : i--) { - // el to which series will be drawn - var elSeries = graphics.group({ - class: "apexcharts-series apexcharts-heatmap-series", - seriesName: Utils.escapeString(w.globals.seriesNames[i]), - rel: i + 1, - 'data:realIndex': i - }); - - if (w.config.chart.dropShadow.enabled) { - var shadow = w.config.chart.dropShadow; - var filters = new Filters(this.ctx); - filters.dropShadow(elSeries, shadow, i); - } - - var x1 = 0; - - for (var j = 0; j < heatSeries[i].length; j++) { - var colorShadePercent = 1; - var heatColorProps = this.determineHeatColor(i, j); - - if (w.globals.hasNegs || this.negRange) { - var shadeIntensity = w.config.plotOptions.heatmap.shadeIntensity; - - if (w.config.plotOptions.heatmap.reverseNegativeShade) { - if (heatColorProps.percent < 0) { - colorShadePercent = heatColorProps.percent / 100 * (shadeIntensity * 1.25); - } else { - colorShadePercent = (1 - heatColorProps.percent / 100) * (shadeIntensity * 1.25); - } - } else { - if (heatColorProps.percent < 0) { - colorShadePercent = 1 - (1 + heatColorProps.percent / 100) * shadeIntensity; - } else { - colorShadePercent = (1 - heatColorProps.percent / 100) * shadeIntensity; - } - } - } else { - colorShadePercent = 1 - heatColorProps.percent / 100; - } - - var color = heatColorProps.color; - - if (w.config.plotOptions.heatmap.enableShades) { - var utils = new Utils(); - color = Utils.hexToRgba(utils.shadeColor(colorShadePercent, heatColorProps.color), w.config.fill.opacity); - } - - var radius = this.rectRadius; - var rect = graphics.drawRect(x1, y1, xDivision, yDivision, radius); - rect.attr({ - cx: x1, - cy: y1 - }); - rect.node.classList.add('apexcharts-heatmap-rect'); - elSeries.add(rect); - rect.attr({ - fill: color, - i: i, - index: i, - j: j, - val: heatSeries[i][j], - 'stroke-width': this.strokeWidth, - stroke: w.globals.stroke.colors[0], - color: color - }); - rect.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this, rect)); - rect.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this, rect)); - rect.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this, rect)); - - if (w.config.chart.animations.enabled && !w.globals.dataChanged) { - var speed = 1; - - if (!w.globals.resized) { - speed = w.config.chart.animations.speed; - } - - this.animateHeatMap(rect, x1, y1, xDivision, yDivision, speed); - } - - if (w.globals.dataChanged) { - var _speed = 1; - - if (this.dynamicAnim.enabled && w.globals.shouldAnimate) { - _speed = this.dynamicAnim.speed; - var colorFrom = w.globals.previousPaths[i] && w.globals.previousPaths[i][j] && w.globals.previousPaths[i][j].color; - if (!colorFrom) colorFrom = 'rgba(255, 255, 255, 0)'; - this.animateHeatColor(rect, Utils.isColorHex(colorFrom) ? colorFrom : Utils.rgb2hex(colorFrom), Utils.isColorHex(color) ? color : Utils.rgb2hex(color), _speed); - } - } - - var dataLabels = this.calculateHeatmapDataLabels({ - x: x1, - y: y1, - i: i, - j: j, - series: heatSeries, - rectHeight: yDivision, - rectWidth: xDivision - }); - - if (dataLabels !== null) { - elSeries.add(dataLabels); - } - - x1 = x1 + xDivision; - } - - y1 = y1 + yDivision; - ret.add(elSeries); - } // adjust yaxis labels for heatmap - - - var yAxisScale = w.globals.yAxisScale[0].result.slice(); - - if (w.config.yaxis[0].reversed) { - yAxisScale.unshift(''); - } else { - yAxisScale.push(''); - } - - w.globals.yAxisScale[0].result = yAxisScale; - var divisor = w.globals.gridHeight / w.globals.series.length; - w.config.yaxis[0].labels.offsetY = -(divisor / 2); - return ret; - } - }, { - key: "checkColorRange", - value: function checkColorRange() { - var _this = this; - - var w = this.w; - var heatmap = w.config.plotOptions.heatmap; - - if (heatmap.colorScale.ranges.length > 0) { - heatmap.colorScale.ranges.map(function (range, index) { - if (range.from < 0) { - _this.negRange = true; - } - }); - } - } - }, { - key: "determineHeatColor", - value: function determineHeatColor(i, j) { - var w = this.w; - var val = w.globals.series[i][j]; - var heatmap = w.config.plotOptions.heatmap; - var seriesNumber = heatmap.colorScale.inverse ? j : i; - var color = w.globals.colors[seriesNumber]; - var min = Math.min.apply(Math, _toConsumableArray(w.globals.series[i])); - var max = Math.max.apply(Math, _toConsumableArray(w.globals.series[i])); - - if (!heatmap.distributed) { - min = w.globals.minY; - max = w.globals.maxY; - } - - if (typeof heatmap.colorScale.min !== 'undefined') { - min = heatmap.colorScale.min < w.globals.minY ? heatmap.colorScale.min : w.globals.minY; - max = heatmap.colorScale.max > w.globals.maxY ? heatmap.colorScale.max : w.globals.maxY; - } - - var total = Math.abs(max) + Math.abs(min); - var percent = 100 * val / (total === 0 ? total - 0.000001 : total); - - if (heatmap.colorScale.ranges.length > 0) { - var colorRange = heatmap.colorScale.ranges; - colorRange.map(function (range, index) { - if (val >= range.from && val <= range.to) { - color = range.color; - min = range.from; - max = range.to; - - var _total = Math.abs(max) + Math.abs(min); - - percent = 100 * val / (_total === 0 ? _total - 0.000001 : _total); - } - }); - } - - return { - color: color, - percent: percent - }; - } - }, { - key: "calculateHeatmapDataLabels", - value: function calculateHeatmapDataLabels(_ref) { - var x = _ref.x, - y = _ref.y, - i = _ref.i, - j = _ref.j, - series = _ref.series, - rectHeight = _ref.rectHeight, - rectWidth = _ref.rectWidth; - var w = this.w; // let graphics = new Graphics(this.ctx) - - var dataLabelsConfig = w.config.dataLabels; - var graphics = new Graphics(this.ctx); - var dataLabels = new DataLabels(this.ctx); - var formatter = dataLabelsConfig.formatter; - var elDataLabelsWrap = null; - - if (dataLabelsConfig.enabled) { - elDataLabelsWrap = graphics.group({ - class: 'apexcharts-data-labels' - }); - var offX = dataLabelsConfig.offsetX; - var offY = dataLabelsConfig.offsetY; - var dataLabelsX = x + rectWidth / 2 + offX; - var dataLabelsY = y + rectHeight / 2 + parseInt(dataLabelsConfig.style.fontSize) / 3 + offY; - var text = formatter(w.globals.series[i][j], { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - dataLabels.plotDataLabelsText({ - x: dataLabelsX, - y: dataLabelsY, - text: text, - i: i, - j: j, - parent: elDataLabelsWrap, - dataLabelsConfig: dataLabelsConfig - }); - } - - return elDataLabelsWrap; - } - }, { - key: "animateHeatMap", - value: function animateHeatMap(el, x, y, width, height, speed) { - var _this2 = this; - - var animations = new Animations(this.ctx); - animations.animateRect(el, { - x: x + width / 2, - y: y + height / 2, - width: 0, - height: 0 - }, { - x: x, - y: y, - width: width, - height: height - }, speed, function () { - _this2.w.globals.animationEnded = true; - }); - } - }, { - key: "animateHeatColor", - value: function animateHeatColor(el, colorFrom, colorTo, speed) { - el.attr({ - fill: colorFrom - }).animate(speed).attr({ - fill: colorTo - }); - } - }]); - - return HeatMap; -}(); - -/** - * ApexCharts Pie Class for drawing Pie / Donut Charts. - * @module Pie - **/ - -var Pie = -/*#__PURE__*/ -function () { - function Pie(ctx) { - _classCallCheck(this, Pie); - - this.ctx = ctx; - this.w = ctx.w; - this.chartType = this.w.config.chart.type; - this.initialAnim = this.w.config.chart.animations.enabled; - this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; - this.animBeginArr = [0]; - this.animDur = 0; - this.donutDataLabels = this.w.config.plotOptions.pie.donut.labels; - var w = this.w; - this.lineColorArr = w.globals.stroke.colors !== undefined ? w.globals.stroke.colors : w.globals.colors; - this.defaultSize = w.globals.svgHeight < w.globals.svgWidth ? w.globals.svgHeight - 35 : w.globals.gridWidth; - this.centerY = this.defaultSize / 2; - this.centerX = w.globals.gridWidth / 2; - this.fullAngle = 360; - this.size = 0; - this.donutSize = 0; - this.sliceLabels = []; - this.prevSectorAngleArr = []; // for dynamic animations - } - - _createClass(Pie, [{ - key: "draw", - value: function draw(series) { - var self = this; - var w = this.w; - var graphics = new Graphics(this.ctx); - var ret = graphics.group({ - class: 'apexcharts-pie' - }); - var total = 0; - - for (var k = 0; k < series.length; k++) { - // CALCULATE THE TOTAL - total += Utils.negToZero(series[k]); - } - - var sectorAngleArr = []; // el to which series will be drawn - - var elSeries = graphics.group(); // prevent division by zero error if there is no data - - if (total === 0) { - total = 0.00001; - } - - for (var i = 0; i < series.length; i++) { - // CALCULATE THE ANGLES - var angle = this.fullAngle * Utils.negToZero(series[i]) / total; - sectorAngleArr.push(angle); - } - - if (w.globals.dataChanged) { - var prevTotal = 0; - - for (var _k = 0; _k < w.globals.previousPaths.length; _k++) { - // CALCULATE THE PREV TOTAL - prevTotal += Utils.negToZero(w.globals.previousPaths[_k]); - } - - var previousAngle; - - for (var _i = 0; _i < w.globals.previousPaths.length; _i++) { - // CALCULATE THE PREVIOUS ANGLES - previousAngle = this.fullAngle * Utils.negToZero(w.globals.previousPaths[_i]) / prevTotal; - this.prevSectorAngleArr.push(previousAngle); - } - } - - this.size = this.defaultSize / 2.05 - w.config.stroke.width - w.config.chart.dropShadow.blur; - - if (w.config.plotOptions.pie.size !== undefined) { - this.size = w.config.plotOptions.pie.size; - } - - this.donutSize = this.size * parseInt(w.config.plotOptions.pie.donut.size) / 100; - var scaleSize = w.config.plotOptions.pie.customScale; - var halfW = w.globals.gridWidth / 2; - var halfH = w.globals.gridHeight / 2; - var translateX = halfW - w.globals.gridWidth / 2 * scaleSize; - var translateY = halfH - w.globals.gridHeight / 2 * scaleSize; - - if (this.donutDataLabels.show) { - var dataLabels = this.renderInnerDataLabels(this.donutDataLabels, { - hollowSize: this.donutSize, - centerX: this.centerX, - centerY: this.centerY, - opacity: this.donutDataLabels.show, - translateX: translateX, - translateY: translateY - }); - ret.add(dataLabels); - } - - if (w.config.chart.type === 'donut') { - // draw the inner circle and add some text to it - var circle = graphics.drawCircle(this.donutSize); - circle.attr({ - cx: this.centerX, - cy: this.centerY, - fill: w.config.plotOptions.pie.donut.background - }); - elSeries.add(circle); - } - - var elG = self.drawArcs(sectorAngleArr, series); // add slice dataLabels at the end - - this.sliceLabels.forEach(function (s) { - elG.add(s); - }); - elSeries.attr({ - transform: "translate(".concat(translateX, ", ").concat(translateY - 5, ") scale(").concat(scaleSize, ")") - }); - ret.attr({ - 'data:innerTranslateX': translateX, - 'data:innerTranslateY': translateY - 25 - }); - elSeries.add(elG); - ret.add(elSeries); - return ret; - } // core function for drawing pie arcs - - }, { - key: "drawArcs", - value: function drawArcs(sectorAngleArr, series) { - var w = this.w; - var filters = new Filters(this.ctx); - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - var g = graphics.group(); - var startAngle = 0; - var prevStartAngle = 0; - var endAngle = 0; - var prevEndAngle = 0; - this.strokeWidth = w.config.stroke.show ? w.config.stroke.width : 0; - - for (var i = 0; i < sectorAngleArr.length; i++) { - // if(sectorAngleArr[i]>0) { - var elPieArc = graphics.group({ - class: "apexcharts-series apexcharts-pie-series", - seriesName: Utils.escapeString(w.globals.seriesNames[i]), - id: 'apexcharts-series-' + i, - rel: i + 1 - }); - g.add(elPieArc); - startAngle = endAngle; - prevStartAngle = prevEndAngle; - endAngle = startAngle + sectorAngleArr[i]; - prevEndAngle = prevStartAngle + this.prevSectorAngleArr[i]; - var angle = endAngle - startAngle; - var pathFill = fill.fillPath({ - seriesNumber: i, - size: this.size, - value: series[i] - }); // additionaly, pass size for gradient drawing in the fillPath function - - var path = this.getChangedPath(prevStartAngle, prevEndAngle); - var elPath = graphics.drawPath({ - d: path, - stroke: this.lineColorArr instanceof Array ? this.lineColorArr[i] : this.lineColorArr, - strokeWidth: this.strokeWidth, - fill: pathFill, - fillOpacity: w.config.fill.opacity, - classes: 'apexcharts-pie-area' - }); - elPath.attr({ - id: "apexcharts-".concat(w.config.chart.type, "-slice-").concat(i), - index: 0, - j: i - }); - - if (w.config.chart.dropShadow.enabled) { - var shadow = w.config.chart.dropShadow; - filters.dropShadow(elPath, shadow, i); - } - - this.addListeners(elPath, this.donutDataLabels); - Graphics.setAttrs(elPath.node, { - 'data:angle': angle, - 'data:startAngle': startAngle, - 'data:strokeWidth': this.strokeWidth, - 'data:value': series[i] - }); - var labelPosition = { - x: 0, - y: 0 - }; - - if (w.config.chart.type === 'pie') { - labelPosition = Utils.polarToCartesian(this.centerX, this.centerY, this.size / 1.25 + w.config.plotOptions.pie.dataLabels.offset, startAngle + (endAngle - startAngle) / 2); - } else if (w.config.chart.type === 'donut') { - labelPosition = Utils.polarToCartesian(this.centerX, this.centerY, (this.size + this.donutSize) / 2 + w.config.plotOptions.pie.dataLabels.offset, startAngle + (endAngle - startAngle) / 2); - } - - elPieArc.add(elPath); // Animation code starts - - var dur = 0; - - if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) { - dur = (endAngle - startAngle) / this.fullAngle * w.config.chart.animations.speed; - this.animDur = dur + this.animDur; - this.animBeginArr.push(this.animDur); - } else { - this.animBeginArr.push(0); - } - - if (this.dynamicAnim && w.globals.dataChanged) { - this.animatePaths(elPath, { - endAngle: endAngle, - startAngle: startAngle, - prevStartAngle: prevStartAngle, - prevEndAngle: prevEndAngle, - animateStartingPos: true, - i: i, - animBeginArr: this.animBeginArr, - dur: w.config.chart.animations.dynamicAnimation.speed - }); - } else { - this.animatePaths(elPath, { - endAngle: endAngle, - startAngle: startAngle, - i: i, - totalItems: sectorAngleArr.length - 1, - animBeginArr: this.animBeginArr, - dur: dur - }); - } // animation code ends - - - if (w.config.plotOptions.pie.expandOnClick) { - elPath.click(this.pieClicked.bind(this, i)); - } - - if (w.config.dataLabels.enabled) { - var xPos = labelPosition.x; - var yPos = labelPosition.y; - var text = 100 * (endAngle - startAngle) / 360 + '%'; - - if (angle !== 0 && w.config.plotOptions.pie.dataLabels.minAngleToShowLabel < sectorAngleArr[i]) { - var formatter = w.config.dataLabels.formatter; - - if (formatter !== undefined) { - text = formatter(w.globals.seriesPercent[i][0], { - seriesIndex: i, - w: w - }); - } - - var foreColor = w.globals.dataLabels.style.colors[i]; - var elPieLabel = graphics.drawText({ - x: xPos, - y: yPos, - text: text, - textAnchor: 'middle', - fontSize: w.config.dataLabels.style.fontSize, - fontFamily: w.config.dataLabels.style.fontFamily, - foreColor: foreColor - }); - - if (w.config.dataLabels.dropShadow.enabled) { - var textShadow = w.config.dataLabels.dropShadow; - - var _filters = new Filters(this.ctx); - - _filters.dropShadow(elPieLabel, textShadow); - } - - elPieLabel.node.classList.add('apexcharts-pie-label'); - - if (w.config.chart.animations.animate && w.globals.resized === false) { - elPieLabel.node.classList.add('apexcharts-pie-label-delay'); - elPieLabel.node.style.animationDelay = w.config.chart.animations.speed / 940 + 's'; - } - - this.sliceLabels.push(elPieLabel); - } - } // } - - } - - return g; - } - }, { - key: "addListeners", - value: function addListeners(elPath, dataLabels) { - var graphics = new Graphics(this.ctx); // append filters on mouseenter and mouseleave - - elPath.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this, elPath)); - elPath.node.addEventListener('mouseenter', this.printDataLabelsInner.bind(this, elPath.node, dataLabels)); - elPath.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this, elPath)); - elPath.node.addEventListener('mouseleave', this.revertDataLabelsInner.bind(this, elPath.node, dataLabels)); - elPath.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this, elPath)); - elPath.node.addEventListener('mousedown', this.printDataLabelsInner.bind(this, elPath.node, dataLabels)); - } // This function can be used for other circle charts too - - }, { - key: "animatePaths", - value: function animatePaths(el, opts) { - var w = this.w; - var me = this; - var angle = opts.endAngle - opts.startAngle; - var prevAngle = angle; - var fromStartAngle = opts.startAngle; - var toStartAngle = opts.startAngle; - - if (opts.prevStartAngle !== undefined && opts.prevEndAngle !== undefined) { - fromStartAngle = opts.prevEndAngle; - prevAngle = opts.prevEndAngle - opts.prevStartAngle; - } - - if (opts.i === w.config.series.length - 1) { - // some adjustments for the last overlapping paths - if (angle + toStartAngle > this.fullAngle) { - opts.endAngle = opts.endAngle - (angle + toStartAngle); - } else if (angle + toStartAngle < this.fullAngle) { - opts.endAngle = opts.endAngle + (this.fullAngle - (angle + toStartAngle)); - } - } - - if (angle === this.fullAngle) angle = this.fullAngle - 0.01; - me.animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts); - } - }, { - key: "animateArc", - value: function animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts) { - var me = this; - var w = this.w; - var size = me.size; - - if (!size) { - size = opts.size; - } - - var path; - - if (isNaN(fromStartAngle) || isNaN(prevAngle)) { - fromStartAngle = toStartAngle; - prevAngle = angle; - opts.dur = 0; - } - - var currAngle = angle; - var startAngle = toStartAngle; - var fromAngle = fromStartAngle - toStartAngle; - - if (w.globals.dataChanged && opts.shouldSetPrevPaths) { - // to avoid flickering, set prev path first and then we will animate from there - path = me.getPiePath({ - me: me, - startAngle: startAngle, - angle: prevAngle, - size: size - }); - el.attr({ - d: path - }); - } - - if (opts.dur !== 0) { - el.animate(opts.dur, w.globals.easing, opts.animBeginArr[opts.i]).afterAll(function () { - if (w.config.chart.type === 'pie' || w.config.chart.type === 'donut') { - this.animate(300).attr({ - 'stroke-width': w.config.stroke.width - }); - } - - w.globals.animationEnded = true; - }).during(function (pos) { - currAngle = fromAngle + (angle - fromAngle) * pos; - - if (opts.animateStartingPos) { - currAngle = prevAngle + (angle - prevAngle) * pos; - startAngle = fromStartAngle - prevAngle + (toStartAngle - (fromStartAngle - prevAngle)) * pos; - } - - path = me.getPiePath({ - me: me, - startAngle: startAngle, - angle: currAngle, - size: size - }); - el.node.setAttribute('data:pathOrig', path); - el.attr({ - d: path - }); - }); - } else { - path = me.getPiePath({ - me: me, - startAngle: startAngle, - angle: angle, - size: size - }); - - if (!opts.isTrack) { - w.globals.animationEnded = true; - } - - el.node.setAttribute('data:pathOrig', path); - el.attr({ - d: path - }); - } - } - }, { - key: "pieClicked", - value: function pieClicked(i) { - var w = this.w; - var me = this; - var path; - var size = me.size + 4; - var elPath = w.globals.dom.Paper.select("#apexcharts-".concat(w.config.chart.type.toLowerCase(), "-slice-").concat(i)).members[0]; - var pathFrom = elPath.attr('d'); - - if (elPath.attr('data:pieClicked') === 'true') { - elPath.attr({ - 'data:pieClicked': 'false' - }); - this.revertDataLabelsInner(elPath.node, this.donutDataLabels); - var origPath = elPath.attr('data:pathOrig'); - elPath.attr({ - d: origPath - }); - return; - } else { - // reset all elems - var allEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-pie-area'); - Array.prototype.forEach.call(allEls, function (pieSlice) { - pieSlice.setAttribute('data:pieClicked', 'false'); - var origPath = pieSlice.getAttribute('data:pathOrig'); - pieSlice.setAttribute('d', origPath); - }); - elPath.attr('data:pieClicked', 'true'); - } - - var startAngle = parseInt(elPath.attr('data:startAngle')); - var angle = parseInt(elPath.attr('data:angle')); - path = me.getPiePath({ - me: me, - startAngle: startAngle, - angle: angle, - size: size - }); - if (angle === 360) return; - elPath.plot(path).animate(1).plot(pathFrom).animate(100).plot(path); - } - }, { - key: "getChangedPath", - value: function getChangedPath(prevStartAngle, prevEndAngle) { - var path = ''; - - if (this.dynamicAnim && this.w.globals.dataChanged) { - path = this.getPiePath({ - me: this, - startAngle: prevStartAngle, - angle: prevEndAngle - prevStartAngle, - size: this.size - }); - } - - return path; - } - }, { - key: "getPiePath", - value: function getPiePath(_ref) { - var me = _ref.me, - startAngle = _ref.startAngle, - angle = _ref.angle, - size = _ref.size; - var w = this.w; - var path; - var startDeg = startAngle; - var startRadians = Math.PI * (startDeg - 90) / 180; - var endDeg = angle + startAngle; - if (Math.ceil(endDeg) >= 360) endDeg = 359.99; - var endRadians = Math.PI * (endDeg - 90) / 180; - var x1 = me.centerX + size * Math.cos(startRadians); - var y1 = me.centerY + size * Math.sin(startRadians); - var x2 = me.centerX + size * Math.cos(endRadians); - var y2 = me.centerY + size * Math.sin(endRadians); - var startInner = Utils.polarToCartesian(me.centerX, me.centerY, me.donutSize, endDeg); - var endInner = Utils.polarToCartesian(me.centerX, me.centerY, me.donutSize, startDeg); - var largeArc = angle > 180 ? 1 : 0; - - if (w.config.chart.type === 'donut') { - path = ['M', x1, y1, 'A', size, size, 0, largeArc, 1, x2, y2, 'L', startInner.x, startInner.y, 'A', me.donutSize, me.donutSize, 0, largeArc, 0, endInner.x, endInner.y, 'L', x1, y1, 'z'].join(' '); - } else if (w.config.chart.type === 'pie') { - path = ['M', x1, y1, 'A', size, size, 0, largeArc, 1, x2, y2, 'L', me.centerX, me.centerY, 'L', x1, y1].join(' '); - } else { - path = ['M', x1, y1, 'A', size, size, 0, largeArc, 1, x2, y2].join(' '); - } - - return path; - } - }, { - key: "renderInnerDataLabels", - value: function renderInnerDataLabels(dataLabelsConfig, opts) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var g = graphics.group({ - class: 'apexcharts-datalabels-group', - transform: "translate(".concat(opts.translateX ? opts.translateX : 0, ", ").concat(opts.translateY ? opts.translateY : 0, ")") - }); - var showTotal = dataLabelsConfig.total.show; - g.node.style.opacity = opts.opacity; - var x = opts.centerX; - var y = opts.centerY; - var labelColor, valueColor; - - if (dataLabelsConfig.name.color === undefined) { - labelColor = w.globals.colors[0]; - } else { - labelColor = dataLabelsConfig.name.color; - } - - if (dataLabelsConfig.value.color === undefined) { - valueColor = w.config.chart.foreColor; - } else { - valueColor = dataLabelsConfig.value.color; - } - - var lbFormatter = dataLabelsConfig.value.formatter; - var val = ''; - var name = ''; - - if (showTotal) { - labelColor = dataLabelsConfig.total.color; - name = dataLabelsConfig.total.label; - val = dataLabelsConfig.total.formatter(w); - } else { - if (w.globals.series.length === 1) { - val = lbFormatter(w.globals.series[0], w); - name = w.globals.seriesNames[0]; - } - } - - if (dataLabelsConfig.name.show) { - var elLabel = graphics.drawText({ - x: x, - y: y + parseInt(dataLabelsConfig.name.offsetY), - text: name, - textAnchor: 'middle', - foreColor: labelColor, - fontSize: dataLabelsConfig.name.fontSize, - fontFamily: dataLabelsConfig.name.fontFamily - }); - elLabel.node.classList.add('apexcharts-datalabel-label'); - g.add(elLabel); - } - - if (dataLabelsConfig.value.show) { - var valOffset = dataLabelsConfig.name.show ? parseInt(dataLabelsConfig.value.offsetY) + 16 : dataLabelsConfig.value.offsetY; - var elValue = graphics.drawText({ - x: x, - y: y + valOffset, - text: val, - textAnchor: 'middle', - foreColor: valueColor, - fontSize: dataLabelsConfig.value.fontSize, - fontFamily: dataLabelsConfig.value.fontFamily - }); - elValue.node.classList.add('apexcharts-datalabel-value'); - g.add(elValue); - } // for a multi-series circle chart, we need to show total value instead of first series labels - - - return g; - } - /** - * - * @param {string} name - The name of the series - * @param {string} val - The value of that series - * @param {object} el - Optional el (indicates which series was hovered/clicked). If this param is not present, means we need to show total - */ - - }, { - key: "printInnerLabels", - value: function printInnerLabels(labelsConfig, name, val, el) { - var w = this.w; - var labelColor; - - if (el) { - if (labelsConfig.name.color === undefined) { - labelColor = w.globals.colors[parseInt(el.parentNode.getAttribute('rel')) - 1]; - } else { - labelColor = labelsConfig.name.color; - } - } else { - if (w.globals.series.length > 1 && labelsConfig.total.show) { - labelColor = labelsConfig.total.color; - } - } - - var elLabel = w.globals.dom.baseEl.querySelector('.apexcharts-datalabel-label'); - var elValue = w.globals.dom.baseEl.querySelector('.apexcharts-datalabel-value'); - var lbFormatter = labelsConfig.value.formatter; - val = lbFormatter(val, w); // we need to show Total Val - so get the formatter of it - - if (!el && typeof labelsConfig.total.formatter === 'function') { - val = labelsConfig.total.formatter(w); - } - - if (elLabel !== null) { - elLabel.textContent = name; - } - - if (elValue !== null) { - elValue.textContent = val; - } - - if (elLabel !== null) { - elLabel.style.fill = labelColor; - } - } - }, { - key: "printDataLabelsInner", - value: function printDataLabelsInner(el, dataLabelsConfig) { - var w = this.w; - var val = el.getAttribute('data:value'); - var name = w.globals.seriesNames[parseInt(el.parentNode.getAttribute('rel')) - 1]; - - if (w.globals.series.length > 1) { - this.printInnerLabels(dataLabelsConfig, name, val, el); - } - - var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group'); - - if (dataLabelsGroup !== null) { - dataLabelsGroup.style.opacity = 1; - } - } - }, { - key: "revertDataLabelsInner", - value: function revertDataLabelsInner(el, dataLabelsConfig, event) { - var _this = this; - - var w = this.w; - var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group'); - - if (dataLabelsConfig.total.show && w.globals.series.length > 1) { - var pie = new Pie(this.ctx); - pie.printInnerLabels(dataLabelsConfig, dataLabelsConfig.total.label, dataLabelsConfig.total.formatter(w)); - } else { - var slices = document.querySelectorAll(".apexcharts-pie-area"); - var sliceOut = false; - slices.forEach(function (s) { - if (s.getAttribute('data:pieClicked') === 'true') { - sliceOut = true; - - _this.printDataLabelsInner(s, dataLabelsConfig); - } - }); - - if (!sliceOut) { - if (w.globals.selectedDataPoints.length && w.globals.series.length > 1) { - if (w.globals.selectedDataPoints[0].length > 0) { - var index = w.globals.selectedDataPoints[0]; - - var _el = w.globals.dom.baseEl.querySelector("#apexcharts-".concat(w.config.chart.type.toLowerCase(), "-slice-").concat(index)); - - this.printDataLabelsInner(_el, dataLabelsConfig); - } else if (dataLabelsGroup && w.globals.selectedDataPoints.length && w.globals.selectedDataPoints[0].length === 0) { - dataLabelsGroup.style.opacity = 0; - } - } else { - if (dataLabelsGroup && w.globals.series.length > 1) { - dataLabelsGroup.style.opacity = 0; - } - } - } - } - } - }]); - - return Pie; -}(); - -/** - * ApexCharts Radar Class for Spider/Radar Charts. - * @module Radar - **/ - -var Radar = -/*#__PURE__*/ -function () { - function Radar(ctx) { - _classCallCheck(this, Radar); - - this.ctx = ctx; - this.w = ctx.w; - this.chartType = this.w.config.chart.type; - this.initialAnim = this.w.config.chart.animations.enabled; - this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; - this.animDur = 0; - var w = this.w; - this.graphics = new Graphics(this.ctx); - this.lineColorArr = w.globals.stroke.colors !== undefined ? w.globals.stroke.colors : w.globals.colors; - this.defaultSize = w.globals.svgHeight < w.globals.svgWidth ? w.globals.svgHeight - 35 : w.globals.gridWidth; - this.maxValue = this.w.globals.maxY; - this.polygons = w.config.plotOptions.radar.polygons; - this.maxLabelWidth = 20; - var longestLabel = w.globals.labels.slice().sort(function (a, b) { - return b.length - a.length; - })[0]; - var labelWidth = this.graphics.getTextRects(longestLabel, w.config.dataLabels.style.fontSize); - this.size = this.defaultSize / 2.1 - w.config.stroke.width - w.config.chart.dropShadow.blur - labelWidth.width / 1.75; - - if (w.config.plotOptions.radar.size !== undefined) { - this.size = w.config.plotOptions.radar.size; - } - - this.dataRadiusOfPercent = []; - this.dataRadius = []; - this.angleArr = []; - this.yaxisLabelsTextsPos = []; - } - - _createClass(Radar, [{ - key: "draw", - value: function draw(series) { - var _this = this; - - var w = this.w; - var fill = new Fill(this.ctx); - var allSeries = []; - this.dataPointsLen = series[w.globals.maxValsInArrayIndex].length; - this.disAngle = Math.PI * 2 / this.dataPointsLen; - var halfW = w.globals.gridWidth / 2; - var halfH = w.globals.gridHeight / 2; - var translateX = halfW; - var translateY = halfH; - var ret = this.graphics.group({ - class: 'apexcharts-radar-series', - 'data:innerTranslateX': translateX, - 'data:innerTranslateY': translateY - 25, - transform: "translate(".concat(translateX || 0, ", ").concat(translateY || 0, ")") - }); - var dataPointsPos = []; - var elPointsMain = null; - this.yaxisLabels = this.graphics.group({ - class: 'apexcharts-yaxis' - }); - series.forEach(function (s, i) { - // el to which series will be drawn - var elSeries = _this.graphics.group().attr({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[i]), - rel: i + 1, - 'data:realIndex': i - }); - - _this.dataRadiusOfPercent[i] = []; - _this.dataRadius[i] = []; - _this.angleArr[i] = []; - s.forEach(function (dv, j) { - _this.dataRadiusOfPercent[i][j] = dv / _this.maxValue; - _this.dataRadius[i][j] = _this.dataRadiusOfPercent[i][j] * _this.size; - _this.angleArr[i][j] = j * _this.disAngle; - }); - dataPointsPos = _this.getDataPointsPos(_this.dataRadius[i], _this.angleArr[i]); - - var paths = _this.createPaths(dataPointsPos, { - x: 0, - y: 0 - }); // points - - - elPointsMain = _this.graphics.group({ - class: 'apexcharts-series-markers-wrap hidden' - }); - w.globals.delayedElements.push({ - el: elPointsMain.node, - index: i - }); - var defaultRenderedPathOptions = { - i: i, - realIndex: i, - animationDelay: i, - initialSpeed: w.config.chart.animations.speed, - dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed, - className: "apexcharts-radar", - id: "apexcharts-radar", - shouldClipToGrid: false, - bindEventsOnPaths: false, - stroke: w.globals.stroke.colors[i], - strokeLineCap: w.config.stroke.lineCap - }; - var pathFrom = null; - - if (w.globals.previousPaths.length > 0) { - pathFrom = _this.getPathFrom(i); - } - - for (var p = 0; p < paths.linePathsTo.length; p++) { - var renderedLinePath = _this.graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { - pathFrom: pathFrom === null ? paths.linePathsFrom[p] : pathFrom, - pathTo: paths.linePathsTo[p], - strokeWidth: Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width, - fill: 'none', - drawShadow: false - })); - - elSeries.add(renderedLinePath); - var pathFill = fill.fillPath({ - seriesNumber: i - }); - - var renderedAreaPath = _this.graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { - pathFrom: pathFrom === null ? paths.areaPathsFrom[p] : pathFrom, - pathTo: paths.areaPathsTo[p], - strokeWidth: 0, - fill: pathFill, - drawShadow: false - })); - - if (w.config.chart.dropShadow.enabled) { - var filters = new Filters(_this.ctx); - var shadow = w.config.chart.dropShadow; - filters.dropShadow(renderedAreaPath, Object.assign({}, shadow, { - noUserSpaceOnUse: true - }), i); - } - - elSeries.add(renderedAreaPath); - } - - s.forEach(function (sj, j) { - var markers = new Markers(_this.ctx); - var opts = markers.getMarkerConfig('apexcharts-marker', i); - - var point = _this.graphics.drawMarker(dataPointsPos[j].x, dataPointsPos[j].y, opts); - - point.attr('rel', j); - point.attr('j', j); - point.attr('index', i); - point.node.setAttribute('default-marker-size', opts.pSize); - - var elPointsWrap = _this.graphics.group({ - class: 'apexcharts-series-markers' - }); - - if (elPointsWrap) { - elPointsWrap.add(point); - } - - elPointsMain.add(elPointsWrap); - elSeries.add(elPointsMain); - }); - allSeries.push(elSeries); - }); - this.drawPolygons({ - parent: ret - }); - - if (w.config.dataLabels.enabled) { - var dataLabels = this.drawLabels(); - ret.add(dataLabels); - } - - ret.add(this.yaxisLabels); - allSeries.forEach(function (elS) { - ret.add(elS); - }); - return ret; - } - }, { - key: "drawPolygons", - value: function drawPolygons(opts) { - var _this2 = this; - - var w = this.w; - var parent = opts.parent; - var yaxisTexts = w.globals.yAxisScale[0].result.reverse(); - var layers = yaxisTexts.length; - var radiusSizes = []; - var layerDis = this.size / (layers - 1); - - for (var i = 0; i < layers; i++) { - radiusSizes[i] = layerDis * i; - } - - radiusSizes.reverse(); - var polygonStrings = []; - var lines = []; - radiusSizes.forEach(function (radiusSize, r) { - var polygon = _this2.getPolygonPos(radiusSize); - - var string = ''; - polygon.forEach(function (p, i) { - if (r === 0) { - var line = _this2.graphics.drawLine(p.x, p.y, 0, 0, Array.isArray(_this2.polygons.connectorColors) ? _this2.polygons.connectorColors[i] : _this2.polygons.connectorColors); - - lines.push(line); - } - - if (i === 0) { - _this2.yaxisLabelsTextsPos.push({ - x: p.x, - y: p.y - }); - } - - string += p.x + ',' + p.y + ' '; - }); - polygonStrings.push(string); - }); - polygonStrings.forEach(function (p, i) { - var strokeColors = _this2.polygons.strokeColors; - - var polygon = _this2.graphics.drawPolygon(p, Array.isArray(strokeColors) ? strokeColors[i] : strokeColors, w.globals.radarPolygons.fill.colors[i]); - - parent.add(polygon); - }); - lines.forEach(function (l) { - parent.add(l); - }); - - if (w.config.yaxis[0].show) { - this.yaxisLabelsTextsPos.forEach(function (p, i) { - var yText = _this2.drawYAxisText(p.x, p.y, i, yaxisTexts[i]); - - _this2.yaxisLabels.add(yText); - }); - } - } - }, { - key: "drawYAxisText", - value: function drawYAxisText(x, y, i, text) { - var w = this.w; - var yaxisConfig = w.config.yaxis[0]; - var formatter = w.globals.yLabelFormatters[0]; - var yaxisLabel = this.graphics.drawText({ - x: x + yaxisConfig.labels.offsetX, - y: y + yaxisConfig.labels.offsetY, - text: formatter(text, i), - textAnchor: 'middle', - fontSize: yaxisConfig.labels.style.fontSize, - fontFamily: yaxisConfig.labels.style.fontFamily, - foreColor: yaxisConfig.labels.style.color - }); - return yaxisLabel; - } - }, { - key: "drawLabels", - value: function drawLabels() { - var _this3 = this; - - var w = this.w; - var limit = 10; - var textAnchor = 'middle'; - var dataLabelsConfig = w.config.dataLabels; - var elDataLabelsWrap = this.graphics.group({ - class: 'apexcharts-datalabels' - }); - var polygonPos = this.getPolygonPos(this.size); - var currPosX = 0; - var currPosY = 0; - w.globals.labels.forEach(function (label, i) { - var formatter = dataLabelsConfig.formatter; - var dataLabels = new DataLabels(_this3.ctx); - - if (polygonPos[i]) { - currPosX = polygonPos[i].x; - currPosY = polygonPos[i].y; - - if (Math.abs(polygonPos[i].x) >= limit) { - if (polygonPos[i].x > 0) { - textAnchor = 'start'; - currPosX += 10; - } else if (polygonPos[i].x < 0) { - textAnchor = 'end'; - currPosX -= 10; - } - } else { - textAnchor = 'middle'; - } - - if (Math.abs(polygonPos[i].y) >= _this3.size - limit) { - if (polygonPos[i].y < 0) { - currPosY -= 10; - } else if (polygonPos[i].y > 0) { - currPosY += 10; - } - } - - var text = formatter(label, { - seriesIndex: -1, - dataPointIndex: i, - w: w - }); - dataLabels.plotDataLabelsText({ - x: currPosX, - y: currPosY, - text: text, - textAnchor: textAnchor, - i: i, - j: i, - parent: elDataLabelsWrap, - dataLabelsConfig: dataLabelsConfig, - offsetCorrection: false - }); - } - }); - return elDataLabelsWrap; - } - }, { - key: "createPaths", - value: function createPaths(pos, origin) { - var _this4 = this; - - var linePathsTo = []; - var linePathsFrom = []; - var areaPathsTo = []; - var areaPathsFrom = []; - - if (pos.length) { - linePathsFrom = [this.graphics.move(origin.x, origin.y)]; - areaPathsFrom = [this.graphics.move(origin.x, origin.y)]; - var linePathTo = this.graphics.move(pos[0].x, pos[0].y); - var areaPathTo = this.graphics.move(pos[0].x, pos[0].y); - pos.forEach(function (p, i) { - linePathTo += _this4.graphics.line(p.x, p.y); - areaPathTo += _this4.graphics.line(p.x, p.y); - - if (i === pos.length - 1) { - linePathTo += 'Z'; - areaPathTo += 'Z'; - } - }); - linePathsTo.push(linePathTo); - areaPathsTo.push(areaPathTo); - } - - return { - linePathsFrom: linePathsFrom, - linePathsTo: linePathsTo, - areaPathsFrom: areaPathsFrom, - areaPathsTo: areaPathsTo - }; - } - }, { - key: "getPathFrom", - value: function getPathFrom(realIndex) { - var w = this.w; - var pathFrom = null; - - for (var pp = 0; pp < w.globals.previousPaths.length; pp++) { - var gpp = w.globals.previousPaths[pp]; - - if (gpp.paths.length > 0 && parseInt(gpp.realIndex) === parseInt(realIndex)) { - if (typeof w.globals.previousPaths[pp].paths[0] !== 'undefined') { - pathFrom = w.globals.previousPaths[pp].paths[0].d; - } - } - } - - return pathFrom; - } - }, { - key: "getDataPointsPos", - value: function getDataPointsPos(dataRadiusArr, angleArr) { - var dataPointsLen = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.dataPointsLen; - dataRadiusArr = dataRadiusArr || []; - angleArr = angleArr || []; - var dataPointsPosArray = []; - - for (var j = 0; j < dataPointsLen; j++) { - var curPointPos = {}; - curPointPos.x = dataRadiusArr[j] * Math.sin(angleArr[j]); - curPointPos.y = -dataRadiusArr[j] * Math.cos(angleArr[j]); - dataPointsPosArray.push(curPointPos); - } - - return dataPointsPosArray; - } - }, { - key: "getPolygonPos", - value: function getPolygonPos(size) { - var dotsArray = []; - var angle = Math.PI * 2 / this.dataPointsLen; - - for (var i = 0; i < this.dataPointsLen; i++) { - var curPos = {}; - curPos.x = size * Math.sin(i * angle); - curPos.y = -size * Math.cos(i * angle); - dotsArray.push(curPos); - } - - return dotsArray; - } - }]); - - return Radar; -}(); - -/** - * ApexCharts Radial Class for drawing Circle / Semi Circle Charts. - * @module Radial - **/ - -var Radial = -/*#__PURE__*/ -function (_Pie) { - _inherits(Radial, _Pie); - - function Radial(ctx) { - var _this; - - _classCallCheck(this, Radial); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(Radial).call(this, ctx)); - _this.ctx = ctx; - _this.w = ctx.w; - _this.animBeginArr = [0]; - _this.animDur = 0; - var w = _this.w; - _this.startAngle = w.config.plotOptions.radialBar.startAngle; - _this.endAngle = w.config.plotOptions.radialBar.endAngle; - _this.trackStartAngle = w.config.plotOptions.radialBar.track.startAngle; - _this.trackEndAngle = w.config.plotOptions.radialBar.track.endAngle; - _this.radialDataLabels = w.config.plotOptions.radialBar.dataLabels; - if (!_this.trackStartAngle) _this.trackStartAngle = _this.startAngle; - if (!_this.trackEndAngle) _this.trackEndAngle = _this.endAngle; - if (_this.endAngle === 360) _this.endAngle = 359.99; - _this.fullAngle = 360 - w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle; - _this.margin = parseInt(w.config.plotOptions.radialBar.track.margin); - return _this; - } - - _createClass(Radial, [{ - key: "draw", - value: function draw(series) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var ret = graphics.group({ - class: 'apexcharts-radialbar' - }); - var elSeries = graphics.group(); - var centerY = this.defaultSize / 2; - var centerX = w.globals.gridWidth / 2; - var size = this.defaultSize / 2.05 - w.config.stroke.width - w.config.chart.dropShadow.blur; - - if (w.config.plotOptions.radialBar.size !== undefined) { - size = w.config.plotOptions.radialBar.size; - } - - var colorArr = w.globals.fill.colors; - - if (w.config.plotOptions.radialBar.track.show) { - var elTracks = this.drawTracks({ - size: size, - centerX: centerX, - centerY: centerY, - colorArr: colorArr, - series: series - }); - elSeries.add(elTracks); - } - - var elG = this.drawArcs({ - size: size, - centerX: centerX, - centerY: centerY, - colorArr: colorArr, - series: series - }); - elSeries.add(elG.g); - - if (w.config.plotOptions.radialBar.hollow.position === 'front') { - elG.g.add(elG.elHollow); - - if (elG.dataLabels) { - elG.g.add(elG.dataLabels); - } - } - - ret.add(elSeries); - return ret; - } - }, { - key: "drawTracks", - value: function drawTracks(opts) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var g = graphics.group(); - var filters = new Filters(this.ctx); - var fill = new Fill(this.ctx); - var strokeWidth = this.getStrokeWidth(opts); - opts.size = opts.size - strokeWidth / 2; - - for (var i = 0; i < opts.series.length; i++) { - var elRadialBarTrack = graphics.group({ - class: 'apexcharts-radialbar-track apexcharts-track' - }); - g.add(elRadialBarTrack); - elRadialBarTrack.attr({ - id: 'apexcharts-track-' + i, - rel: i + 1 - }); - opts.size = opts.size - strokeWidth - this.margin; - var trackConfig = w.config.plotOptions.radialBar.track; - var pathFill = fill.fillPath({ - seriesNumber: 0, - size: opts.size, - fillColors: Array.isArray(trackConfig.background) ? trackConfig.background[i] : trackConfig.background, - solid: true - }); - var startAngle = this.trackStartAngle; - var endAngle = this.trackEndAngle; - if (Math.abs(endAngle) + Math.abs(startAngle) >= 360) endAngle = 360 - Math.abs(this.startAngle) - 0.1; - var elPath = graphics.drawPath({ - d: '', - stroke: pathFill, - strokeWidth: strokeWidth * parseInt(trackConfig.strokeWidth) / 100, - fill: 'none', - strokeOpacity: trackConfig.opacity, - classes: 'apexcharts-radialbar-area' - }); - - if (trackConfig.dropShadow.enabled) { - var shadow = trackConfig.dropShadow; - filters.dropShadow(elPath, shadow); - } - - elRadialBarTrack.add(elPath); - elPath.attr('id', 'apexcharts-radialbarTrack-' + i); - var pie = new Pie(this.ctx); - pie.animatePaths(elPath, { - centerX: opts.centerX, - centerY: opts.centerY, - endAngle: endAngle, - startAngle: startAngle, - size: opts.size, - i: i, - totalItems: 2, - animBeginArr: 0, - dur: 0, - isTrack: true, - easing: w.globals.easing - }); - } - - return g; - } - }, { - key: "drawArcs", - value: function drawArcs(opts) { - var w = this.w; // size, donutSize, centerX, centerY, colorArr, lineColorArr, sectorAngleArr, series - - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - var filters = new Filters(this.ctx); - var g = graphics.group(); - var strokeWidth = this.getStrokeWidth(opts); - opts.size = opts.size - strokeWidth / 2; - var hollowFillID = w.config.plotOptions.radialBar.hollow.background; - var hollowSize = opts.size - strokeWidth * opts.series.length - this.margin * opts.series.length - strokeWidth * parseInt(w.config.plotOptions.radialBar.track.strokeWidth) / 100 / 2; - var hollowRadius = hollowSize - w.config.plotOptions.radialBar.hollow.margin; - - if (w.config.plotOptions.radialBar.hollow.image !== undefined) { - hollowFillID = this.drawHollowImage(opts, g, hollowSize, hollowFillID); - } - - var elHollow = this.drawHollow({ - size: hollowRadius, - centerX: opts.centerX, - centerY: opts.centerY, - fill: hollowFillID - }); - - if (w.config.plotOptions.radialBar.hollow.dropShadow.enabled) { - var shadow = w.config.plotOptions.radialBar.hollow.dropShadow; - filters.dropShadow(elHollow, shadow); - } - - var shown = 1; - - if (!this.radialDataLabels.total.show && w.globals.series.length > 1) { - shown = 0; - } - - var pie = new Pie(this.ctx); - var dataLabels = null; - - if (this.radialDataLabels.show) { - dataLabels = pie.renderInnerDataLabels(this.radialDataLabels, { - hollowSize: hollowSize, - centerX: opts.centerX, - centerY: opts.centerY, - opacity: shown - }); - } - - if (w.config.plotOptions.radialBar.hollow.position === 'back') { - g.add(elHollow); - - if (dataLabels) { - g.add(dataLabels); - } - } - - var reverseLoop = false; - - if (w.config.plotOptions.radialBar.inverseOrder) { - reverseLoop = true; - } - - for (var i = reverseLoop ? opts.series.length - 1 : 0; reverseLoop ? i >= 0 : i < opts.series.length; reverseLoop ? i-- : i++) { - var elRadialBarArc = graphics.group({ - class: "apexcharts-series apexcharts-radial-series", - seriesName: Utils.escapeString(w.globals.seriesNames[i]) - }); - g.add(elRadialBarArc); - elRadialBarArc.attr({ - id: 'apexcharts-series-' + i, - rel: i + 1 - }); - this.ctx.series.addCollapsedClassToSeries(elRadialBarArc, i); - opts.size = opts.size - strokeWidth - this.margin; - var pathFill = fill.fillPath({ - seriesNumber: i, - size: opts.size, - value: opts.series[i] - }); - var startAngle = this.startAngle; - var prevStartAngle = void 0; - var totalAngle = Math.abs(w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle); // if data exceeds 100, make it 100 - - var dataValue = Utils.negToZero(opts.series[i] > 100 ? 100 : opts.series[i]) / 100; - var endAngle = Math.round(totalAngle * dataValue) + this.startAngle; - var prevEndAngle = void 0; - - if (w.globals.dataChanged) { - prevStartAngle = this.startAngle; - prevEndAngle = Math.round(totalAngle * Utils.negToZero(w.globals.previousPaths[i]) / 100) + prevStartAngle; - } - - var currFullAngle = Math.abs(endAngle) + Math.abs(startAngle); - - if (currFullAngle >= 360) { - endAngle = endAngle - 0.01; - } - - var prevFullAngle = Math.abs(prevEndAngle) + Math.abs(prevStartAngle); - - if (prevFullAngle >= 360) { - prevEndAngle = prevEndAngle - 0.01; - } - - var angle = endAngle - startAngle; - var dashArray = Array.isArray(w.config.stroke.dashArray) ? w.config.stroke.dashArray[i] : w.config.stroke.dashArray; - var elPath = graphics.drawPath({ - d: '', - stroke: pathFill, - strokeWidth: strokeWidth, - fill: 'none', - fillOpacity: w.config.fill.opacity, - classes: 'apexcharts-radialbar-area', - strokeDashArray: dashArray - }); - Graphics.setAttrs(elPath.node, { - 'data:angle': angle, - 'data:value': opts.series[i] - }); - - if (w.config.chart.dropShadow.enabled) { - var _shadow = w.config.chart.dropShadow; - filters.dropShadow(elPath, _shadow, i); - } - - this.addListeners(elPath, this.radialDataLabels); - - var _pie = new Pie(this.ctx); - - elRadialBarArc.add(elPath); - elPath.attr({ - id: 'apexcharts-radialbar-slice-' + i, - index: 0, - j: i - }); - var dur = 0; - - if (_pie.initialAnim && !w.globals.resized && !w.globals.dataChanged) { - dur = (endAngle - startAngle) / 360 * w.config.chart.animations.speed; - this.animDur = dur / (opts.series.length * 1.2) + this.animDur; - this.animBeginArr.push(this.animDur); - } - - if (w.globals.dataChanged) { - dur = (endAngle - startAngle) / 360 * w.config.chart.animations.dynamicAnimation.speed; - this.animDur = dur / (opts.series.length * 1.2) + this.animDur; - this.animBeginArr.push(this.animDur); - } - - _pie.animatePaths(elPath, { - centerX: opts.centerX, - centerY: opts.centerY, - endAngle: endAngle, - startAngle: startAngle, - prevEndAngle: prevEndAngle, - prevStartAngle: prevStartAngle, - size: opts.size, - i: i, - totalItems: 2, - animBeginArr: this.animBeginArr, - dur: dur, - shouldSetPrevPaths: true, - easing: w.globals.easing - }); - } - - return { - g: g, - elHollow: elHollow, - dataLabels: dataLabels - }; - } - }, { - key: "drawHollow", - value: function drawHollow(opts) { - var graphics = new Graphics(this.ctx); - var circle = graphics.drawCircle(opts.size * 2); - circle.attr({ - class: 'apexcharts-radialbar-hollow', - cx: opts.centerX, - cy: opts.centerY, - r: opts.size, - fill: opts.fill - }); - return circle; - } - }, { - key: "drawHollowImage", - value: function drawHollowImage(opts, g, hollowSize, hollowFillID) { - var w = this.w; - var fill = new Fill(this.ctx); - var randID = (Math.random() + 1).toString(36).substring(4); - var hollowFillImg = w.config.plotOptions.radialBar.hollow.image; - - if (w.config.plotOptions.radialBar.hollow.imageClipped) { - fill.clippedImgArea({ - width: hollowSize, - height: hollowSize, - image: hollowFillImg, - patternID: "pattern".concat(w.globals.cuid).concat(randID) - }); - hollowFillID = "url(#pattern".concat(w.globals.cuid).concat(randID, ")"); - } else { - var imgWidth = w.config.plotOptions.radialBar.hollow.imageWidth; - var imgHeight = w.config.plotOptions.radialBar.hollow.imageHeight; - - if (imgWidth === undefined && imgHeight === undefined) { - var image = w.globals.dom.Paper.image(hollowFillImg).loaded(function (loader) { - this.move(opts.centerX - loader.width / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX, opts.centerY - loader.height / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY); - }); - g.add(image); - } else { - var _image = w.globals.dom.Paper.image(hollowFillImg).loaded(function (loader) { - this.move(opts.centerX - imgWidth / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX, opts.centerY - imgHeight / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY); - this.size(imgWidth, imgHeight); - }); - - g.add(_image); - } - } - - return hollowFillID; - } - }, { - key: "getStrokeWidth", - value: function getStrokeWidth(opts) { - var w = this.w; - return opts.size * (100 - parseInt(w.config.plotOptions.radialBar.hollow.size)) / 100 / (opts.series.length + 1) - this.margin; - } - }]); - - return Radial; -}(Pie); - -/** - * ApexCharts RangeBar Class responsible for drawing Range/Timeline Bars. - * - * @module RangeBar - **/ - -var RangeBar = -/*#__PURE__*/ -function (_Bar) { - _inherits(RangeBar, _Bar); - - function RangeBar() { - _classCallCheck(this, RangeBar); - - return _possibleConstructorReturn(this, _getPrototypeOf(RangeBar).apply(this, arguments)); - } - - _createClass(RangeBar, [{ - key: "draw", - value: function draw(series, seriesIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - this.rangeBarOptions = this.w.config.plotOptions.rangeBar; - this.series = series; - this.seriesRangeStart = w.globals.seriesRangeStart; - this.seriesRangeEnd = w.globals.seriesRangeEnd; - this.initVariables(series); - var ret = graphics.group({ - class: 'apexcharts-rangebar-series apexcharts-plot-series' - }); - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - var pathTo = void 0, - pathFrom = void 0; - var x = void 0, - y = void 0, - xDivision = void 0, - // xDivision is the GRIDWIDTH divided by number of datapoints (columns) - yDivision = void 0, - // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) - zeroH = void 0, - // zeroH is the baseline where 0 meets y axis - zeroW = void 0; // zeroW is the baseline where 0 meets x axis - - var yArrj = []; // hold y values of current iterating series - - var xArrj = []; // hold x values of current iterating series - - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn - - var elSeries = graphics.group({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), - rel: i + 1, - 'data:realIndex': realIndex - }); - - if (series[i].length > 0) { - this.visibleI = this.visibleI + 1; - } - - var strokeWidth = 0; - var barHeight = 0; - var barWidth = 0; - - if (this.yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - var initPositions = this.initialPositions(); - y = initPositions.y; - yDivision = initPositions.yDivision; - barHeight = initPositions.barHeight; - zeroW = initPositions.zeroW; - x = initPositions.x; - barWidth = initPositions.barWidth; - xDivision = initPositions.xDivision; - zeroH = initPositions.zeroH; - xArrj.push(x + barWidth / 2); // eldatalabels - - var elDataLabelsWrap = graphics.group({ - class: 'apexcharts-datalabels' - }); - - for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { - if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) { - this.isNullValue = true; - } else { - this.isNullValue = false; - } - - if (w.config.stroke.show) { - if (this.isNullValue) { - strokeWidth = 0; - } else { - strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; - } - } - - var paths = null; - - if (this.isHorizontal) { - paths = this.drawRangeBarPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - barHeight: barHeight, - strokeWidth: strokeWidth, - pathTo: pathTo, - pathFrom: pathFrom, - zeroW: zeroW, - x: x, - y: y, - yDivision: yDivision, - elSeries: elSeries - }); - barWidth = paths.barWidth; - } else { - paths = this.drawRangeColumnPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - x: x, - y: y, - xDivision: xDivision, - pathTo: pathTo, - pathFrom: pathFrom, - barWidth: barWidth, - zeroH: zeroH, - strokeWidth: strokeWidth, - elSeries: elSeries - }); - barHeight = paths.barHeight; - } - - pathTo = paths.pathTo; - pathFrom = paths.pathFrom; - y = paths.y; - x = paths.x; // push current X - - if (j > 0) { - xArrj.push(x + barWidth / 2); - } - - yArrj.push(y); - var pathFill = fill.fillPath({ - seriesNumber: realIndex - }); - var lineFill = w.globals.stroke.colors[realIndex]; - elSeries = this.renderSeries({ - realIndex: realIndex, - pathFill: pathFill, - lineFill: lineFill, - j: j, - i: i, - pathFrom: pathFrom, - pathTo: pathTo, - strokeWidth: strokeWidth, - elSeries: elSeries, - x: x, - y: y, - series: series, - barHeight: barHeight, - barWidth: barWidth, - elDataLabelsWrap: elDataLabelsWrap, - visibleSeries: this.visibleI, - type: 'rangebar' - }); - } // push all x val arrays into main xArr - - - w.globals.seriesXvalues[realIndex] = xArrj; - w.globals.seriesYvalues[realIndex] = yArrj; - ret.add(elSeries); - } - - return ret; - } - }, { - key: "drawRangeColumnPaths", - value: function drawRangeColumnPaths(_ref) { - var indexes = _ref.indexes, - x = _ref.x, - y = _ref.y, - strokeWidth = _ref.strokeWidth, - xDivision = _ref.xDivision, - pathTo = _ref.pathTo, - pathFrom = _ref.pathFrom, - barWidth = _ref.barWidth, - zeroH = _ref.zeroH; - var w = this.w; - var graphics = new Graphics(this.ctx); - var i = indexes.i; - var j = indexes.j; - var yRatio = this.yRatio[this.yaxisIndex]; - var realIndex = indexes.realIndex; - var range = this.getRangeValue(realIndex, j); - var y1 = Math.min(range.start, range.end); - var y2 = Math.max(range.start, range.end); - - if (w.globals.isXNumeric) { - x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2; - } - - var barXPosition = x + barWidth * this.visibleI; - - if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { - y1 = zeroH; - } else { - y1 = zeroH - y1 / yRatio; - y2 = zeroH - y2 / yRatio; - } - - var barHeight = Math.abs(y2 - y1); - pathTo = graphics.move(barXPosition, zeroH); - pathFrom = graphics.move(barXPosition, y1); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j, true); - } - - pathTo = graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2); - pathFrom = pathFrom + graphics.move(barXPosition, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition, y1); - - if (!w.globals.isXNumeric) { - x = x + xDivision; - } - - return { - pathTo: pathTo, - pathFrom: pathFrom, - barHeight: barHeight, - x: x, - y: y2, - barXPosition: barXPosition - }; - } - }, { - key: "drawRangeBarPaths", - value: function drawRangeBarPaths(_ref2) { - var indexes = _ref2.indexes, - x = _ref2.x, - y = _ref2.y, - yDivision = _ref2.yDivision, - pathTo = _ref2.pathTo, - pathFrom = _ref2.pathFrom, - barHeight = _ref2.barHeight, - zeroW = _ref2.zeroW; - var w = this.w; - var graphics = new Graphics(this.ctx); - var i = indexes.i; - var j = indexes.j; - var realIndex = indexes.realIndex; - var x1 = zeroW; - var x2 = zeroW; - - if (w.globals.isXNumeric) { - y = (w.globals.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight; - } - - var barYPosition = y + barHeight * this.visibleI; - - if (typeof this.series[i][j] !== 'undefined' && this.series[i][j] !== null) { - x1 = zeroW + this.seriesRangeStart[i][j] / this.invertedYRatio; - x2 = zeroW + this.seriesRangeEnd[i][j] / this.invertedYRatio; - } - - pathTo = graphics.move(zeroW, barYPosition); - pathFrom = graphics.move(zeroW, barYPosition); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j); - } - - var barWidth = Math.abs(x2 - x1); - pathTo = graphics.move(x1, barYPosition) + graphics.line(x2, barYPosition) + graphics.line(x2, barYPosition + barHeight) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition); - pathFrom = pathFrom + graphics.line(x1, barYPosition) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition); - - if (!w.globals.isXNumeric) { - y = y + yDivision; - } - - return { - pathTo: pathTo, - pathFrom: pathFrom, - barWidth: barWidth, - x: x2, - y: y, - barYPosition: barYPosition - }; - } - }, { - key: "getRangeValue", - value: function getRangeValue(i, j) { - var w = this.w; - return { - start: w.globals.seriesRangeStart[i][j], - end: w.globals.seriesRangeEnd[i][j] - }; - } - }]); - - return RangeBar; -}(Bar); - -/** - * ApexCharts Line Class responsible for drawing Line / Area Charts. - * This class is also responsible for generating values for Bubble/Scatter charts, so need to rename it to Axis Charts to avoid confusions - * @module Line - **/ - -var Line = -/*#__PURE__*/ -function () { - function Line(ctx, xyRatios, isPointsChart) { - _classCallCheck(this, Line); - - this.ctx = ctx; - this.w = ctx.w; - this.xyRatios = xyRatios; - this.pointsChart = !(this.w.config.chart.type !== 'bubble' && this.w.config.chart.type !== 'scatter') || isPointsChart; - this.scatter = new Scatter(this.ctx); - this.noNegatives = this.w.globals.minX === Number.MAX_VALUE; - this.yaxisIndex = 0; - } - - _createClass(Line, [{ - key: "draw", - value: function draw(series, ptype, seriesIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - var type = w.globals.comboCharts ? ptype : w.config.chart.type; - var ret = graphics.group({ - class: "apexcharts-".concat(type, "-series apexcharts-plot-series") - }); - var coreUtils = new CoreUtils(this.ctx, w); - series = coreUtils.getLogSeries(series); - var yRatio = this.xyRatios.yRatio; - yRatio = coreUtils.getLogYRatios(yRatio); - var zRatio = this.xyRatios.zRatio; - var xRatio = this.xyRatios.xRatio; - var baseLineY = this.xyRatios.baseLineY; // push all series in an array, so we can draw in reverse order (for stacked charts) - - var allSeries = []; - var prevSeriesY = []; - var categoryAxisCorrection = 0; - - for (var i = 0; i < series.length; i++) { - // width divided into equal parts - if (type === 'line' && (w.config.fill.type === 'gradient' || w.config.fill.type[i] === 'gradient')) { - // a small adjustment to allow gradient line to draw correctly for all same values - - /* #fix https://github.com/apexcharts/apexcharts.js/issues/358 */ - if (coreUtils.seriesHaveSameValues(i)) { - var gSeries = series[i].slice(); - gSeries[gSeries.length - 1] = gSeries[gSeries.length - 1] + 0.000001; - series[i] = gSeries; - } - } - - var xDivision = w.globals.gridWidth / w.globals.dataPoints; - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; - - if (yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; - var yArrj = []; // hold y values of current iterating series - - var xArrj = []; // hold x values of current iterating series - // zeroY is the 0 value in y series which can be used in negative charts - - var zeroY = w.globals.gridHeight - baseLineY[this.yaxisIndex] - (this.isReversed ? w.globals.gridHeight : 0) + (this.isReversed ? baseLineY[this.yaxisIndex] * 2 : 0); - var areaBottomY = zeroY; - - if (zeroY > w.globals.gridHeight) { - areaBottomY = w.globals.gridHeight; - } - - categoryAxisCorrection = xDivision / 2; - var x = w.globals.padHorizontal + categoryAxisCorrection; - var y = 1; - - if (w.globals.isXNumeric && w.globals.seriesX.length > 0) { - x = (w.globals.seriesX[realIndex][0] - w.globals.minX) / xRatio; - } - - xArrj.push(x); - var linePath = void 0, - areaPath = void 0, - pathFromLine = void 0, - pathFromArea = void 0; - var linePaths = []; - var areaPaths = []; // el to which series will be drawn - - var elSeries = graphics.group({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]) - }); // points - - var elPointsMain = graphics.group({ - class: 'apexcharts-series-markers-wrap' - }); // eldatalabels - - var elDataLabelsWrap = graphics.group({ - class: 'apexcharts-datalabels' - }); - this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex); - var longestSeries = series[i].length === w.globals.dataPoints; - elSeries.attr({ - 'data:longestSeries': longestSeries, - rel: i + 1, - 'data:realIndex': realIndex - }); - this.appendPathFrom = true; - var pX = x; - var pY = void 0; - var prevX = pX; - var prevY = zeroY; // w.globals.svgHeight; - - var lineYPosition = 0; // the first value in the current series is not null or undefined - - var firstPrevY = this.determineFirstPrevY({ - i: i, - series: series, - yRatio: yRatio[this.yaxisIndex], - zeroY: zeroY, - prevY: prevY, - prevSeriesY: prevSeriesY, - lineYPosition: lineYPosition - }); - prevY = firstPrevY.prevY; - yArrj.push(prevY); - pY = prevY; - - if (series[i][0] === null) { - // when the first value itself is null, we need to move the pointer to a location where a null value is not found - for (var s = 0; s < series[i].length; s++) { - if (series[i][s] !== null) { - prevX = xDivision * s; - prevY = zeroY - series[i][s] / yRatio[this.yaxisIndex]; - linePath = graphics.move(prevX, prevY); - areaPath = graphics.move(prevX, areaBottomY); - break; - } - } - } else { - linePath = graphics.move(prevX, prevY); - areaPath = graphics.move(prevX, areaBottomY) + graphics.line(prevX, prevY); - } - - pathFromLine = graphics.move(-1, zeroY) + graphics.line(-1, zeroY); - pathFromArea = graphics.move(-1, zeroY) + graphics.line(-1, zeroY); - - if (w.globals.previousPaths.length > 0) { - var pathFrom = this.checkPreviousPaths({ - pathFromLine: pathFromLine, - pathFromArea: pathFromArea, - realIndex: realIndex - }); - pathFromLine = pathFrom.pathFromLine; - pathFromArea = pathFrom.pathFromArea; - } - - var iterations = w.globals.dataPoints > 1 ? w.globals.dataPoints - 1 : w.globals.dataPoints; - - for (var j = 0; j < iterations; j++) { - if (w.globals.isXNumeric) { - var sX = w.globals.seriesX[realIndex][j + 1]; - - if (typeof w.globals.seriesX[realIndex][j + 1] === 'undefined') { - /* fix #374 */ - sX = w.globals.seriesX[realIndex][iterations - 1]; - } - - x = (sX - w.globals.minX) / xRatio; - } else { - x = x + xDivision; - } - - var minY = Utils.isNumber(w.globals.minYArr[realIndex]) ? w.globals.minYArr[realIndex] : w.globals.minY; - - if (w.config.chart.stacked) { - if (i > 0 && w.globals.collapsedSeries.length < w.config.series.length - 1) { - lineYPosition = prevSeriesY[i - 1][j + 1]; - } else { - // the first series will not have prevY values - lineYPosition = zeroY; - } - - if (typeof series[i][j + 1] === 'undefined' || series[i][j + 1] === null) { - y = lineYPosition - minY / yRatio[this.yaxisIndex] + (this.isReversed ? minY / yRatio[this.yaxisIndex] : 0) * 2; - } else { - y = lineYPosition - series[i][j + 1] / yRatio[this.yaxisIndex] + (this.isReversed ? series[i][j + 1] / yRatio[this.yaxisIndex] : 0) * 2; - } - } else { - if (typeof series[i][j + 1] === 'undefined' || series[i][j + 1] === null) { - y = zeroY - minY / yRatio[this.yaxisIndex] + (this.isReversed ? minY / yRatio[this.yaxisIndex] : 0) * 2; - } else { - y = zeroY - series[i][j + 1] / yRatio[this.yaxisIndex] + (this.isReversed ? series[i][j + 1] / yRatio[this.yaxisIndex] : 0) * 2; - } - } // push current X - - - xArrj.push(x); // push current Y that will be used as next series's bottom position - - yArrj.push(y); - var calculatedPaths = this.createPaths({ - series: series, - i: i, - j: j, - x: x, - y: y, - xDivision: xDivision, - pX: pX, - pY: pY, - areaBottomY: areaBottomY, - linePath: linePath, - areaPath: areaPath, - linePaths: linePaths, - areaPaths: areaPaths, - seriesIndex: seriesIndex - }); - areaPaths = calculatedPaths.areaPaths; - linePaths = calculatedPaths.linePaths; - pX = calculatedPaths.pX; - pY = calculatedPaths.pY; - areaPath = calculatedPaths.areaPath; - linePath = calculatedPaths.linePath; - - if (this.appendPathFrom) { - pathFromLine = pathFromLine + graphics.line(x, zeroY); - pathFromArea = pathFromArea + graphics.line(x, zeroY); - } - - var pointsPos = this.calculatePoints({ - series: series, - x: x, - y: y, - realIndex: realIndex, - i: i, - j: j, - prevY: prevY, - categoryAxisCorrection: categoryAxisCorrection, - xRatio: xRatio - }); - - if (!this.pointsChart) { - var markers = new Markers(this.ctx); - - if (w.globals.dataPoints > 1) { - elPointsMain.node.classList.add('hidden'); - } - - var elPointsWrap = markers.plotChartMarkers(pointsPos, realIndex, j + 1); - - if (elPointsWrap !== null) { - elPointsMain.add(elPointsWrap); - } - } else { - // scatter / bubble chart points creation - this.scatter.draw(elSeries, j, { - realIndex: realIndex, - pointsPos: pointsPos, - zRatio: zRatio, - elParent: elPointsMain - }); - } - - var dataLabelAlign = !series[i][j + 1] || series[i][j + 1] > series[i][j] ? 'top' : 'bottom'; - var dataLabels = new DataLabels(this.ctx); - var drawnLabels = dataLabels.drawDataLabel(pointsPos, realIndex, j + 1, null, dataLabelAlign); - - if (drawnLabels !== null) { - elDataLabelsWrap.add(drawnLabels); - } - } // push all current y values array to main PrevY Array - - - prevSeriesY.push(yArrj); // push all x val arrays into main xArr - - w.globals.seriesXvalues[realIndex] = xArrj; - w.globals.seriesYvalues[realIndex] = yArrj; // these elements will be shown after area path animation completes - - if (!this.pointsChart) { - w.globals.delayedElements.push({ - el: elPointsMain.node, - index: realIndex - }); - } - - var defaultRenderedPathOptions = { - i: i, - realIndex: realIndex, - animationDelay: i, - initialSpeed: w.config.chart.animations.speed, - dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed, - className: "apexcharts-".concat(type), - id: "apexcharts-".concat(type) - }; - - if (type === 'area') { - var pathFill = fill.fillPath({ - seriesNumber: realIndex - }); - - for (var p = 0; p < areaPaths.length; p++) { - var renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { - pathFrom: pathFromArea, - pathTo: areaPaths[p], - stroke: 'none', - strokeWidth: 0, - strokeLineCap: null, - fill: pathFill - })); - elSeries.add(renderedPath); - } - } - - if (w.config.stroke.show && !this.pointsChart) { - var lineFill = null; - - if (type === 'line') { - // fillable lines only for lineChart - lineFill = fill.fillPath({ - seriesNumber: realIndex, - i: i - }); - } else { - lineFill = w.globals.stroke.colors[realIndex]; - } - - for (var _p = 0; _p < linePaths.length; _p++) { - var _renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { - pathFrom: pathFromLine, - pathTo: linePaths[_p], - stroke: lineFill, - strokeWidth: Array.isArray(w.config.stroke.width) ? w.config.stroke.width[realIndex] : w.config.stroke.width, - strokeLineCap: w.config.stroke.lineCap, - fill: 'none' - })); - - elSeries.add(_renderedPath); - } - } - - elSeries.add(elPointsMain); - elSeries.add(elDataLabelsWrap); - allSeries.push(elSeries); - } - - for (var _s = allSeries.length; _s > 0; _s--) { - ret.add(allSeries[_s - 1]); - } - - return ret; - } - }, { - key: "createPaths", - value: function createPaths(_ref) { - var series = _ref.series, - i = _ref.i, - j = _ref.j, - x = _ref.x, - y = _ref.y, - pX = _ref.pX, - pY = _ref.pY, - xDivision = _ref.xDivision, - areaBottomY = _ref.areaBottomY, - linePath = _ref.linePath, - areaPath = _ref.areaPath, - linePaths = _ref.linePaths, - areaPaths = _ref.areaPaths, - seriesIndex = _ref.seriesIndex; - var w = this.w; - var graphics = new Graphics(this.ctx); - var curve = w.config.stroke.curve; - - if (Array.isArray(w.config.stroke.curve)) { - if (Array.isArray(seriesIndex)) { - curve = w.config.stroke.curve[seriesIndex[i]]; - } else { - curve = w.config.stroke.curve[i]; - } - } // logic of smooth curve derived from chartist - // CREDITS: https://gionkunz.github.io/chartist-js/ - - - if (curve === 'smooth') { - var length = (x - pX) * 0.35; - - if (w.globals.hasNullValues) { - if (series[i][j] !== null) { - if (series[i][j + 1] !== null) { - linePath = graphics.move(pX, pY) + graphics.curve(pX + length, pY, x - length, y, x + 1, y); - areaPath = graphics.move(pX + 1, pY) + graphics.curve(pX + length, pY, x - length, y, x + 1, y) + graphics.line(x, areaBottomY) + graphics.line(pX, areaBottomY) + 'z'; - } else { - linePath = graphics.move(pX, pY); - areaPath = graphics.move(pX, pY) + 'z'; - } - } - - linePaths.push(linePath); - areaPaths.push(areaPath); - } else { - linePath = linePath + graphics.curve(pX + length, pY, x - length, y, x, y); - areaPath = areaPath + graphics.curve(pX + length, pY, x - length, y, x, y); - } - - pX = x; - pY = y; - - if (j === series[i].length - 2) { - // last loop, close path - areaPath = areaPath + graphics.curve(pX, pY, x, y, x, areaBottomY) + graphics.move(x, y) + 'z'; - - if (!w.globals.hasNullValues) { - linePaths.push(linePath); - areaPaths.push(areaPath); - } - } - } else { - if (series[i][j + 1] === null) { - linePath = linePath + graphics.move(x, y); - areaPath = areaPath + graphics.line(x - xDivision, areaBottomY) + graphics.move(x, y); - } - - if (series[i][j] === null) { - linePath = linePath + graphics.move(x, y); - areaPath = areaPath + graphics.move(x, areaBottomY); - } - - if (curve === 'stepline') { - linePath = linePath + graphics.line(x, null, 'H') + graphics.line(null, y, 'V'); - areaPath = areaPath + graphics.line(x, null, 'H') + graphics.line(null, y, 'V'); - } else if (curve === 'straight') { - linePath = linePath + graphics.line(x, y); - areaPath = areaPath + graphics.line(x, y); - } - - if (j === series[i].length - 2) { - // last loop, close path - areaPath = areaPath + graphics.line(x, areaBottomY) + graphics.move(x, y) + 'z'; - linePaths.push(linePath); - areaPaths.push(areaPath); - } - } - - return { - linePaths: linePaths, - areaPaths: areaPaths, - pX: pX, - pY: pY, - linePath: linePath, - areaPath: areaPath - }; - } - }, { - key: "calculatePoints", - value: function calculatePoints(_ref2) { - var series = _ref2.series, - realIndex = _ref2.realIndex, - x = _ref2.x, - y = _ref2.y, - i = _ref2.i, - j = _ref2.j, - prevY = _ref2.prevY, - categoryAxisCorrection = _ref2.categoryAxisCorrection, - xRatio = _ref2.xRatio; - var w = this.w; - var ptX = []; - var ptY = []; - - if (j === 0) { - var xPT1st = categoryAxisCorrection + w.config.markers.offsetX; // the first point for line series - // we need to check whether it's not a time series, because a time series may - // start from the middle of the x axis - - if (w.globals.isXNumeric) { - xPT1st = (w.globals.seriesX[realIndex][0] - w.globals.minX) / xRatio + w.config.markers.offsetX; - } // push 2 points for the first data values - - - ptX.push(xPT1st); - ptY.push(Utils.isNumber(series[i][0]) ? prevY + w.config.markers.offsetY : null); - ptX.push(x + w.config.markers.offsetX); - ptY.push(Utils.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null); - } else { - ptX.push(x + w.config.markers.offsetX); - ptY.push(Utils.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null); - } - - var pointsPos = { - x: ptX, - y: ptY - }; - return pointsPos; - } - }, { - key: "checkPreviousPaths", - value: function checkPreviousPaths(_ref3) { - var pathFromLine = _ref3.pathFromLine, - pathFromArea = _ref3.pathFromArea, - realIndex = _ref3.realIndex; - var w = this.w; - - for (var pp = 0; pp < w.globals.previousPaths.length; pp++) { - var gpp = w.globals.previousPaths[pp]; - - if ((gpp.type === 'line' || gpp.type === 'area') && gpp.paths.length > 0 && parseInt(gpp.realIndex) === parseInt(realIndex)) { - if (gpp.type === 'line') { - this.appendPathFrom = false; - pathFromLine = w.globals.previousPaths[pp].paths[0].d; - } else if (gpp.type === 'area') { - this.appendPathFrom = false; - pathFromArea = w.globals.previousPaths[pp].paths[0].d; - - if (w.config.stroke.show) { - pathFromLine = w.globals.previousPaths[pp].paths[1].d; - } - } - } - } - - return { - pathFromLine: pathFromLine, - pathFromArea: pathFromArea - }; - } - }, { - key: "determineFirstPrevY", - value: function determineFirstPrevY(_ref4) { - var i = _ref4.i, - series = _ref4.series, - yRatio = _ref4.yRatio, - zeroY = _ref4.zeroY, - prevY = _ref4.prevY, - prevSeriesY = _ref4.prevSeriesY, - lineYPosition = _ref4.lineYPosition; - var w = this.w; - - if (typeof series[i][0] !== 'undefined') { - if (w.config.chart.stacked) { - if (i > 0) { - // 1st y value of previous series - lineYPosition = prevSeriesY[i - 1][0]; - } else { - // the first series will not have prevY values - lineYPosition = zeroY; - } - - prevY = lineYPosition - series[i][0] / yRatio + (this.isReversed ? series[i][0] / yRatio : 0) * 2; - } else { - prevY = zeroY - series[i][0] / yRatio + (this.isReversed ? series[i][0] / yRatio : 0) * 2; - } - } else { - // the first value in the current series is null - if (w.config.chart.stacked && i > 0 && typeof series[i][0] === 'undefined') { - // check for undefined value (undefined value will occur when we clear the series while user clicks on legend to hide serieses) - for (var s = i - 1; s >= 0; s--) { - // for loop to get to 1st previous value until we get it - if (series[s][0] !== null && typeof series[s][0] !== 'undefined') { - lineYPosition = prevSeriesY[s][0]; - prevY = lineYPosition; - break; - } - } - } - } - - return { - prevY: prevY, - lineYPosition: lineYPosition - }; - } - }]); - - return Line; -}(); - -/** - * ApexCharts Formatter Class for setting value formatters for axes as well as tooltips. - * - * @module Formatters - **/ - -var Formatters = -/*#__PURE__*/ -function () { - function Formatters(ctx) { - _classCallCheck(this, Formatters); - - this.ctx = ctx; - this.w = ctx.w; - this.tooltipKeyFormat = 'dd MMM'; - } - - _createClass(Formatters, [{ - key: "xLabelFormat", - value: function xLabelFormat(fn, val) { - var w = this.w; - - if (w.config.xaxis.type === 'datetime') { - // if user has not specified a custom formatter, use the default tooltip.x.format - if (w.config.tooltip.x.formatter === undefined) { - var datetimeObj = new DateTime(this.ctx); - return datetimeObj.formatDate(new Date(val), w.config.tooltip.x.format, true, true); - } - } - - return fn(val); - } - }, { - key: "setLabelFormatters", - value: function setLabelFormatters() { - var w = this.w; - - w.globals.xLabelFormatter = function (val) { - return val; - }; - - w.globals.xaxisTooltipFormatter = function (val) { - return val; - }; - - w.globals.ttKeyFormatter = function (val) { - return val; - }; - - w.globals.ttZFormatter = function (val) { - return val; - }; - - w.globals.legendFormatter = function (val) { - return val; - }; - - if (typeof w.config.tooltip.x.formatter === 'function') { - w.globals.ttKeyFormatter = w.config.tooltip.x.formatter; - } - - if (typeof w.config.xaxis.tooltip.formatter === 'function') { - w.globals.xaxisTooltipFormatter = w.config.xaxis.tooltip.formatter; - } - - if (Array.isArray(w.config.tooltip.y)) { - w.globals.ttVal = w.config.tooltip.y; - } else { - if (w.config.tooltip.y.formatter !== undefined) { - w.globals.ttVal = w.config.tooltip.y; - } - } - - if (w.config.tooltip.z.formatter !== undefined) { - w.globals.ttZFormatter = w.config.tooltip.z.formatter; - } // legend formatter - if user wants to append any global values of series to legend text - - - if (w.config.legend.formatter !== undefined) { - w.globals.legendFormatter = w.config.legend.formatter; - } // formatter function will always overwrite format property - - - if (w.config.xaxis.labels.formatter !== undefined) { - w.globals.xLabelFormatter = w.config.xaxis.labels.formatter; - } else { - w.globals.xLabelFormatter = function (val) { - if (Utils.isNumber(val)) { - // numeric xaxis may have smaller range, so defaulting to 1 decimal - if (w.config.xaxis.type === 'numeric' && w.globals.dataPoints < 50) { - return val.toFixed(1); - } - - return val.toFixed(0); - } - - return val; - }; - } // formatter function will always overwrite format property - - - w.config.yaxis.forEach(function (yaxe, i) { - if (yaxe.labels.formatter !== undefined) { - w.globals.yLabelFormatters[i] = yaxe.labels.formatter; - } else { - w.globals.yLabelFormatters[i] = function (val) { - if (Utils.isNumber(val)) { - if (w.globals.yValueDecimal !== 0) { - return val.toFixed(yaxe.decimalsInFloat !== undefined ? yaxe.decimalsInFloat : w.globals.yValueDecimal); - } else if (w.globals.maxY - w.globals.minY < 5) { - return val.toFixed(1); - } else { - return val.toFixed(0); - } - } - - return val; - }; - } - }); - return w.globals; - } - }, { - key: "heatmapLabelFormatters", - value: function heatmapLabelFormatters() { - var w = this.w; - - if (w.config.chart.type === 'heatmap') { - w.globals.yAxisScale[0].result = w.globals.seriesNames.slice(); // get the longest string from the labels array and also apply label formatter to it - - var longest = w.globals.seriesNames.reduce(function (a, b) { - return a.length > b.length ? a : b; - }, 0); - w.globals.yAxisScale[0].niceMax = longest; - w.globals.yAxisScale[0].niceMin = longest; - } - } - }]); - - return Formatters; -}(); - -var AxesUtils = -/*#__PURE__*/ -function () { - function AxesUtils(ctx) { - _classCallCheck(this, AxesUtils); - - this.ctx = ctx; - this.w = ctx.w; - } // Based on the formatter function, get the label text and position - - - _createClass(AxesUtils, [{ - key: "getLabel", - value: function getLabel(labels, timelineLabels, x, i) { - var drawnLabels = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var w = this.w; - var rawLabel = typeof labels[i] === 'undefined' ? '' : labels[i]; - var label; - var xlbFormatter = w.globals.xLabelFormatter; - var customFormatter = w.config.xaxis.labels.formatter; - var xFormat = new Formatters(this.ctx); - label = xFormat.xLabelFormat(xlbFormatter, rawLabel); - - if (customFormatter !== undefined) { - label = customFormatter(rawLabel, labels[i], i); - } - - if (timelineLabels.length > 0) { - x = timelineLabels[i].position; - label = timelineLabels[i].value; - } else { - if (w.config.xaxis.type === 'datetime' && customFormatter === undefined) { - label = ''; - } - } - - if (typeof label === 'undefined') label = ''; - label = label.toString(); - - if (label.indexOf('NaN') === 0 || label.toLowerCase().indexOf('invalid') === 0 || label.toLowerCase().indexOf('infinity') >= 0 || drawnLabels.indexOf(label) >= 0 && !w.config.xaxis.labels.showDuplicates) { - label = ''; - } - - return { - x: x, - text: label - }; - } - }, { - key: "drawYAxisTicks", - value: function drawYAxisTicks(x, tickAmount, axisBorder, axisTicks, realIndex, labelsDivider, elYaxis) { - var w = this.w; - var graphics = new Graphics(this.ctx); // initial label position = 0; - - var t = w.globals.translateY; - - if (axisTicks.show) { - if (w.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width; - - for (var i = tickAmount; i >= 0; i--) { - var tY = t + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY - 1; - - if (w.globals.isBarHorizontal) { - tY = labelsDivider * i; - } - - var elTick = graphics.drawLine(x + axisBorder.offsetX - axisTicks.width + axisTicks.offsetX, tY + axisTicks.offsetY, x + axisBorder.offsetX + axisTicks.offsetX, tY + axisTicks.offsetY, axisBorder.color); - elYaxis.add(elTick); - t = t + labelsDivider; - } - } - } - }]); - - return AxesUtils; -}(); - -/** - * ApexCharts XAxis Class for drawing X-Axis. - * - * @module XAxis - **/ - -var XAxis = -/*#__PURE__*/ -function () { - function XAxis(ctx) { - _classCallCheck(this, XAxis); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.xaxisLabels = w.globals.labels.slice(); - - if (w.globals.timelineLabels.length > 0) { - // timeline labels are there - this.xaxisLabels = w.globals.timelineLabels.slice(); - } - - this.drawnLabels = []; - - if (w.config.xaxis.position === 'top') { - this.offY = 0; - } else { - this.offY = w.globals.gridHeight + 1; - } - - this.offY = this.offY + w.config.xaxis.axisBorder.offsetY; - this.xaxisFontSize = w.config.xaxis.labels.style.fontSize; - this.xaxisFontFamily = w.config.xaxis.labels.style.fontFamily; - this.xaxisForeColors = w.config.xaxis.labels.style.colors; - this.xaxisBorderWidth = w.config.xaxis.axisBorder.width; - - if (this.xaxisBorderWidth.indexOf('%') > -1) { - this.xaxisBorderWidth = w.globals.gridWidth * parseInt(this.xaxisBorderWidth) / 100; - } else { - this.xaxisBorderWidth = parseInt(this.xaxisBorderWidth); - } - - this.xaxisBorderHeight = w.config.xaxis.axisBorder.height; // For bars, we will only consider single y xais, - // as we are not providing multiple yaxis for bar charts - - this.yaxis = w.config.yaxis[0]; - this.axesUtils = new AxesUtils(ctx); - } - - _createClass(XAxis, [{ - key: "drawXaxis", - value: function drawXaxis() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var elXaxis = graphics.group({ - class: 'apexcharts-xaxis', - transform: "translate(".concat(w.config.xaxis.offsetX, ", ").concat(w.config.xaxis.offsetY, ")") - }); - var elXaxisTexts = graphics.group({ - class: 'apexcharts-xaxis-texts-g', - transform: "translate(".concat(w.globals.translateXAxisX, ", ").concat(w.globals.translateXAxisY, ")") - }); - elXaxis.add(elXaxisTexts); - var colWidth; // initial x Position (keep adding column width in the loop) - - var xPos = w.globals.padHorizontal; - var labels = []; - - for (var i = 0; i < this.xaxisLabels.length; i++) { - labels.push(this.xaxisLabels[i]); - } - - if (w.globals.isXNumeric) { - colWidth = w.globals.gridWidth / (labels.length - 1); - xPos = xPos + colWidth / 2 + w.config.xaxis.labels.offsetX; - } else { - colWidth = w.globals.gridWidth / labels.length; - xPos = xPos + colWidth + w.config.xaxis.labels.offsetX; - } - - var labelsLen = labels.length; - - if (w.config.xaxis.labels.show) { - for (var _i = 0; _i <= labelsLen - 1; _i++) { - var x = xPos - colWidth / 2 + w.config.xaxis.labels.offsetX; - var label = this.axesUtils.getLabel(labels, w.globals.timelineLabels, x, _i, this.drawnLabels); - this.drawnLabels.push(label.text); - var offsetYCorrection = 28; - - if (w.globals.rotateXLabels) { - offsetYCorrection = 22; - } - - var elTick = graphics.drawText({ - x: label.x, - y: this.offY + w.config.xaxis.labels.offsetY + offsetYCorrection, - text: '', - textAnchor: 'middle', - fontSize: this.xaxisFontSize, - fontFamily: this.xaxisFontFamily, - foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[_i] : this.xaxisForeColors, - cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass - }); - - if (_i === labelsLen - 1) { - if (w.globals.skipLastTimelinelabel) { - label.text = ''; - } - } - - elXaxisTexts.add(elTick); - graphics.addTspan(elTick, label.text, this.xaxisFontFamily); - var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); - elTooltipTitle.textContent = label.text; - elTick.node.appendChild(elTooltipTitle); - xPos = xPos + colWidth; - } - } - - if (w.config.xaxis.title.text !== undefined) { - var elXaxisTitle = graphics.group({ - class: 'apexcharts-xaxis-title' - }); - var elXAxisTitleText = graphics.drawText({ - x: w.globals.gridWidth / 2 + w.config.xaxis.title.offsetX, - y: this.offY - parseInt(this.xaxisFontSize) + w.globals.xAxisLabelsHeight + w.config.xaxis.title.offsetY, - text: w.config.xaxis.title.text, - textAnchor: 'middle', - fontSize: w.config.xaxis.title.style.fontSize, - fontFamily: w.config.xaxis.title.style.fontFamily, - foreColor: w.config.xaxis.title.style.color, - cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass - }); - elXaxisTitle.add(elXAxisTitleText); - elXaxis.add(elXaxisTitle); - } - - if (w.config.xaxis.axisBorder.show) { - var lineCorrection = 0; - - if (w.config.chart.type === 'bar' && w.globals.isXNumeric) { - lineCorrection = lineCorrection - 15; - } - - var elHorzLine = graphics.drawLine(w.globals.padHorizontal + lineCorrection + w.config.xaxis.axisBorder.offsetX, this.offY, this.xaxisBorderWidth, this.offY, w.config.xaxis.axisBorder.color, 0, this.xaxisBorderHeight); - elXaxis.add(elHorzLine); - } - - return elXaxis; - } // this actually becomes the vertical axis (for bar charts) - - }, { - key: "drawXaxisInversed", - value: function drawXaxisInversed(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var translateYAxisX = w.config.yaxis[0].opposite ? w.globals.translateYAxisX[realIndex] : 0; - var elYaxis = graphics.group({ - class: 'apexcharts-yaxis apexcharts-xaxis-inversed', - rel: realIndex - }); - var elYaxisTexts = graphics.group({ - class: 'apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g', - transform: 'translate(' + translateYAxisX + ', 0)' - }); - elYaxis.add(elYaxisTexts); - var colHeight; // initial x Position (keep adding column width in the loop) - - var yPos; - var labels = []; - - for (var i = 0; i < this.xaxisLabels.length; i++) { - labels.push(this.xaxisLabels[i]); - } - - colHeight = w.globals.gridHeight / labels.length; - yPos = -(colHeight / 2.2); - var lbFormatter = w.globals.yLabelFormatters[0]; - var ylabels = w.config.yaxis[0].labels; - - if (ylabels.show) { - for (var _i2 = 0; _i2 <= labels.length - 1; _i2++) { - var label = typeof labels[_i2] === 'undefined' ? '' : labels[_i2]; - label = lbFormatter(label); - var elLabel = graphics.drawText({ - x: ylabels.offsetX - 15, - y: yPos + colHeight + ylabels.offsetY, - text: label, - textAnchor: this.yaxis.opposite ? 'start' : 'end', - foreColor: ylabels.style.color ? ylabels.style.color : ylabels.style.colors[_i2], - fontSize: ylabels.style.fontSize, - fontFamily: ylabels.style.fontFamily, - cssClass: 'apexcharts-yaxis-label ' + ylabels.style.cssClass - }); - elYaxisTexts.add(elLabel); - - if (w.config.yaxis[realIndex].labels.rotate !== 0) { - var labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node); - elLabel.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(labelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); - } - - yPos = yPos + colHeight; - } - } - - if (w.config.yaxis[0].title.text !== undefined) { - var elXaxisTitle = graphics.group({ - class: 'apexcharts-yaxis-title apexcharts-xaxis-title-inversed', - transform: 'translate(' + translateYAxisX + ', 0)' - }); - var elXAxisTitleText = graphics.drawText({ - x: 0, - y: w.globals.gridHeight / 2, - text: w.config.yaxis[0].title.text, - textAnchor: 'middle', - foreColor: w.config.yaxis[0].title.style.color, - fontSize: w.config.yaxis[0].title.style.fontSize, - fontFamily: w.config.yaxis[0].title.style.fontFamily, - cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[0].title.style.cssClass - }); - elXaxisTitle.add(elXAxisTitleText); - elYaxis.add(elXaxisTitle); - } - - if (w.config.xaxis.axisBorder.show) { - var elHorzLine = graphics.drawLine(w.globals.padHorizontal + w.config.xaxis.axisBorder.offsetX, this.offY, this.xaxisBorderWidth, this.offY, this.yaxis.axisBorder.color, 0, this.xaxisBorderHeight); - elYaxis.add(elHorzLine); - this.axesUtils.drawYAxisTicks(0, labels.length, w.config.yaxis[0].axisBorder, w.config.yaxis[0].axisTicks, 0, colHeight, elYaxis); - } - - return elYaxis; - } - }, { - key: "drawXaxisTicks", - value: function drawXaxisTicks(x1, appendToElement) { - var w = this.w; - var x2 = x1; - if (x1 < 0 || x1 > w.globals.gridWidth) return; - var y1 = this.offY + w.config.xaxis.axisTicks.offsetY; - var y2 = y1 + w.config.xaxis.axisTicks.height; - - if (w.config.xaxis.axisTicks.show) { - var graphics = new Graphics(this.ctx); - var line = graphics.drawLine(x1 + w.config.xaxis.axisTicks.offsetX, y1 + w.config.xaxis.offsetY, x2 + w.config.xaxis.axisTicks.offsetX, y2 + w.config.xaxis.offsetY, w.config.xaxis.axisTicks.color); // we are not returning anything, but appending directly to the element pased in param - - appendToElement.add(line); - line.node.classList.add('apexcharts-xaxis-tick'); - } - } - }, { - key: "getXAxisTicksPositions", - value: function getXAxisTicksPositions() { - var w = this.w; - var xAxisTicksPositions = []; - var xCount = this.xaxisLabels.length; - var x1 = w.globals.padHorizontal; - - if (w.globals.timelineLabels.length > 0) { - for (var i = 0; i < xCount; i++) { - x1 = this.xaxisLabels[i].position; - xAxisTicksPositions.push(x1); - } - } else { - var xCountForCategoryCharts = xCount; - - for (var _i3 = 0; _i3 < xCountForCategoryCharts; _i3++) { - var x1Count = xCountForCategoryCharts; - - if (w.globals.isXNumeric && w.config.chart.type !== 'bar') { - x1Count -= 1; - } - - x1 = x1 + w.globals.gridWidth / x1Count; - xAxisTicksPositions.push(x1); - } - } - - return xAxisTicksPositions; - } // to rotate x-axis labels or to put ... for longer text in xaxis - - }, { - key: "xAxisLabelCorrections", - value: function xAxisLabelCorrections() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var xAxis = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g'); - var xAxisTexts = w.globals.dom.baseEl.querySelectorAll('.apexcharts-xaxis-texts-g text'); - var yAxisTextsInversed = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-inversed text'); - var xAxisTextsInversed = w.globals.dom.baseEl.querySelectorAll('.apexcharts-xaxis-inversed-texts-g text'); - - if (w.globals.rotateXLabels || w.config.xaxis.labels.rotateAlways) { - for (var xat = 0; xat < xAxisTexts.length; xat++) { - var textRotatingCenter = graphics.rotateAroundCenter(xAxisTexts[xat]); - textRotatingCenter.y = textRotatingCenter.y - 1; // + tickWidth/4; - - textRotatingCenter.x = textRotatingCenter.x + 1; - xAxisTexts[xat].setAttribute('transform', "rotate(".concat(w.config.xaxis.labels.rotate, " ").concat(textRotatingCenter.x, " ").concat(textRotatingCenter.y, ")")); - xAxisTexts[xat].setAttribute('text-anchor', "end"); - var offsetHeight = 10; - xAxis.setAttribute('transform', "translate(0, ".concat(-offsetHeight, ")")); - var tSpan = xAxisTexts[xat].childNodes; - - if (w.config.xaxis.labels.trim) { - graphics.placeTextWithEllipsis(tSpan[0], tSpan[0].textContent, w.config.xaxis.labels.maxHeight - 40); - } - } - } else { - var width = w.globals.gridWidth / w.globals.labels.length; - - for (var _xat = 0; _xat < xAxisTexts.length; _xat++) { - var _tSpan = xAxisTexts[_xat].childNodes; - - if (w.config.xaxis.labels.trim && w.config.xaxis.type !== 'datetime') { - graphics.placeTextWithEllipsis(_tSpan[0], _tSpan[0].textContent, width); - } - } - } - - if (yAxisTextsInversed.length > 0) { - // truncate rotated y axis in bar chart (x axis) - var firstLabelPosX = yAxisTextsInversed[yAxisTextsInversed.length - 1].getBBox(); - var lastLabelPosX = yAxisTextsInversed[0].getBBox(); - - if (firstLabelPosX.x < -20) { - yAxisTextsInversed[yAxisTextsInversed.length - 1].parentNode.removeChild(yAxisTextsInversed[yAxisTextsInversed.length - 1]); - } - - if (lastLabelPosX.x + lastLabelPosX.width > w.globals.gridWidth) { - yAxisTextsInversed[0].parentNode.removeChild(yAxisTextsInversed[0]); - } // truncate rotated x axis in bar chart (y axis) - - - for (var _xat2 = 0; _xat2 < xAxisTextsInversed.length; _xat2++) { - graphics.placeTextWithEllipsis(xAxisTextsInversed[_xat2], xAxisTextsInversed[_xat2].textContent, w.config.yaxis[0].labels.maxWidth - parseInt(w.config.yaxis[0].title.style.fontSize) * 2 - 20); - } - } - } // renderXAxisBands() { - // let w = this.w; - // let plotBand = document.createElementNS(w.globals.SVGNS, 'rect') - // w.globals.dom.elGraphical.add(plotBand) - // } - - }]); - - return XAxis; -}(); - -/** - * ApexCharts YAxis Class for drawing Y-Axis. - * - * @module YAxis - **/ - -var YAxis = -/*#__PURE__*/ -function () { - function YAxis(ctx) { - _classCallCheck(this, YAxis); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.xaxisFontSize = w.config.xaxis.labels.style.fontSize; - this.axisFontFamily = w.config.xaxis.labels.style.fontFamily; - this.xaxisForeColors = w.config.xaxis.labels.style.colors; - this.xAxisoffX = 0; - - if (w.config.xaxis.position === 'bottom') { - this.xAxisoffX = w.globals.gridHeight; - } - - this.drawnLabels = []; - this.axesUtils = new AxesUtils(ctx); - } - - _createClass(YAxis, [{ - key: "drawYaxis", - value: function drawYaxis(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var yaxisFontSize = w.config.yaxis[realIndex].labels.style.fontSize; - var yaxisFontFamily = w.config.yaxis[realIndex].labels.style.fontFamily; - var elYaxis = graphics.group({ - class: 'apexcharts-yaxis', - rel: realIndex, - transform: 'translate(' + w.globals.translateYAxisX[realIndex] + ', 0)' - }); - - if (!w.config.yaxis[realIndex].show) { - return elYaxis; - } - - var elYaxisTexts = graphics.group({ - class: 'apexcharts-yaxis-texts-g' - }); - elYaxis.add(elYaxisTexts); - var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg height/number of ticks - - var labelsDivider = w.globals.gridHeight / tickAmount + 0.1; // initial label position = 0; - - var l = w.globals.translateY; - var lbFormatter = w.globals.yLabelFormatters[realIndex]; - var labels = w.globals.yAxisScale[realIndex].result.slice(); - - if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].reversed) { - labels.reverse(); - } - - if (w.config.yaxis[realIndex].labels.show) { - for (var i = tickAmount; i >= 0; i--) { - var val = labels[i]; - val = lbFormatter(val, i); - var xPad = w.config.yaxis[realIndex].labels.padding; - - if (w.config.yaxis[realIndex].opposite && w.config.yaxis.length !== 0) { - xPad = xPad * -1; - } - - var label = graphics.drawText({ - x: xPad, - y: l + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY + 1, - text: val, - textAnchor: w.config.yaxis[realIndex].opposite ? 'start' : 'end', - fontSize: yaxisFontSize, - fontFamily: yaxisFontFamily, - foreColor: w.config.yaxis[realIndex].labels.style.color, - cssClass: 'apexcharts-yaxis-label ' + w.config.yaxis[realIndex].labels.style.cssClass - }); - elYaxisTexts.add(label); - var labelRotatingCenter = graphics.rotateAroundCenter(label.node); - - if (w.config.yaxis[realIndex].labels.rotate !== 0) { - label.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(labelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); - } - - l = l + labelsDivider; - } - } - - if (w.config.yaxis[realIndex].title.text !== undefined) { - var elYaxisTitle = graphics.group({ - class: 'apexcharts-yaxis-title' - }); - var x = 0; - - if (w.config.yaxis[realIndex].opposite) { - x = w.globals.translateYAxisX[realIndex]; - } - - var elYAxisTitleText = graphics.drawText({ - x: x, - y: w.globals.gridHeight / 2 + w.globals.translateY, - text: w.config.yaxis[realIndex].title.text, - textAnchor: 'end', - foreColor: w.config.yaxis[realIndex].title.style.color, - fontSize: w.config.yaxis[realIndex].title.style.fontSize, - fontFamily: w.config.yaxis[realIndex].title.style.fontFamily, - cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[realIndex].title.style.cssClass - }); - elYaxisTitle.add(elYAxisTitleText); - elYaxis.add(elYaxisTitle); - } - - var axisBorder = w.config.yaxis[realIndex].axisBorder; - - if (axisBorder.show) { - var _x = 31 + axisBorder.offsetX; - - if (w.config.yaxis[realIndex].opposite) { - _x = -31 - axisBorder.offsetX; - } - - var elVerticalLine = graphics.drawLine(_x, w.globals.translateY + axisBorder.offsetY - 2, _x, w.globals.gridHeight + w.globals.translateY + axisBorder.offsetY + 2, axisBorder.color); - elYaxis.add(elVerticalLine); - this.axesUtils.drawYAxisTicks(_x, tickAmount, axisBorder, w.config.yaxis[realIndex].axisTicks, realIndex, labelsDivider, elYaxis); - } - - return elYaxis; - } // This actually becomes horizonal axis (for bar charts) - - }, { - key: "drawYaxisInversed", - value: function drawYaxisInversed(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var elXaxis = graphics.group({ - class: 'apexcharts-xaxis apexcharts-yaxis-inversed' - }); - var elXaxisTexts = graphics.group({ - class: 'apexcharts-xaxis-texts-g', - transform: "translate(".concat(w.globals.translateXAxisX, ", ").concat(w.globals.translateXAxisY, ")") - }); - elXaxis.add(elXaxisTexts); - var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg width/number of ticks - - var labelsDivider = w.globals.gridWidth / tickAmount + 0.1; // initial label position; - - var l = labelsDivider + w.config.xaxis.labels.offsetX; - var lbFormatter = w.globals.xLabelFormatter; - var labels = w.globals.yAxisScale[realIndex].result.slice(); - var timelineLabels = w.globals.invertedTimelineLabels; - - if (timelineLabels.length > 0) { - this.xaxisLabels = timelineLabels.slice(); - labels = timelineLabels.slice(); - tickAmount = labels.length; - } - - if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].reversed) { - labels.reverse(); - } - - var tl = timelineLabels.length; - - if (w.config.xaxis.labels.show) { - for (var i = tl ? 0 : tickAmount; tl ? i < tl - 1 : i >= 0; tl ? i++ : i--) { - var val = labels[i]; - val = lbFormatter(val, i); - var x = w.globals.gridWidth + w.globals.padHorizontal - (l - labelsDivider + w.config.xaxis.labels.offsetX); - - if (timelineLabels.length) { - var label = this.axesUtils.getLabel(labels, timelineLabels, x, i, this.drawnLabels); - x = label.x; - val = label.text; - this.drawnLabels.push(label.text); - } - - var elTick = graphics.drawText({ - x: x, - y: this.xAxisoffX + w.config.xaxis.labels.offsetY + 30, - text: '', - textAnchor: 'middle', - foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[realIndex] : this.xaxisForeColors, - fontSize: this.xaxisFontSize, - fontFamily: this.xaxisFontFamily, - cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass - }); - elXaxisTexts.add(elTick); - elTick.tspan(val); - var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); - elTooltipTitle.textContent = val; - elTick.node.appendChild(elTooltipTitle); - l = l + labelsDivider; - } - } - - if (w.config.xaxis.title.text !== undefined) { - var elYaxisTitle = graphics.group({ - class: 'apexcharts-xaxis-title apexcharts-yaxis-title-inversed' - }); - var elYAxisTitleText = graphics.drawText({ - x: w.globals.gridWidth / 2, - y: this.xAxisoffX + parseInt(this.xaxisFontSize) + parseInt(w.config.xaxis.title.style.fontSize) + 20, - text: w.config.xaxis.title.text, - textAnchor: 'middle', - fontSize: w.config.xaxis.title.style.fontSize, - fontFamily: w.config.xaxis.title.style.fontFamily, - cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass - }); - elYaxisTitle.add(elYAxisTitleText); - elXaxis.add(elYaxisTitle); - } - - var axisBorder = w.config.yaxis[realIndex].axisBorder; - - if (axisBorder.show) { - var elVerticalLine = graphics.drawLine(w.globals.padHorizontal + axisBorder.offsetX, 1 + axisBorder.offsetY, w.globals.padHorizontal + axisBorder.offsetX, w.globals.gridHeight + axisBorder.offsetY, axisBorder.color); - elXaxis.add(elVerticalLine); - } - - return elXaxis; - } - }, { - key: "yAxisTitleRotate", - value: function yAxisTitleRotate(realIndex, yAxisOpposite) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var yAxisLabelsCoord = { - width: 0, - height: 0 - }; - var yAxisTitleCoord = { - width: 0, - height: 0 - }; - var elYAxisLabelsWrap = w.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-texts-g")); - - if (elYAxisLabelsWrap !== null) { - yAxisLabelsCoord = elYAxisLabelsWrap.getBoundingClientRect(); - } - - var yAxisTitle = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-title text")); - - if (yAxisTitle !== null) { - yAxisTitleCoord = yAxisTitle.getBoundingClientRect(); - } - - if (yAxisTitle !== null) { - var x = this.xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite); - yAxisTitle.setAttribute('x', x.xPos - (yAxisOpposite ? 10 : 0)); - } - - if (yAxisTitle !== null) { - var titleRotatingCenter = graphics.rotateAroundCenter(yAxisTitle); - - if (!yAxisOpposite) { - yAxisTitle.setAttribute('transform', "rotate(-".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); - } else { - yAxisTitle.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); - } - } - } - }, { - key: "xPaddingForYAxisTitle", - value: function xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite) { - var w = this.w; - var oppositeAxisCount = 0; - var x = 0; - var padd = 10; - - if (w.config.yaxis[realIndex].title.text === undefined || realIndex < 0) { - return { - xPos: x, - padd: 0 - }; - } - - if (yAxisOpposite) { - x = yAxisLabelsCoord.width + w.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2; - oppositeAxisCount += 1; - - if (oppositeAxisCount === 0) { - x = x - padd / 2; - } - } else { - x = yAxisLabelsCoord.width * -1 + w.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2; - - if (w.globals.isBarHorizontal) { - padd = 25; - x = yAxisLabelsCoord.width * -1 - w.config.yaxis[realIndex].title.offsetX - padd; - } - } - - return { - xPos: x, - padd: padd - }; - } // sets the x position of the y-axis by counting the labels width, title width and any offset - - }, { - key: "setYAxisXPosition", - value: function setYAxisXPosition(yaxisLabelCoords, yTitleCoords) { - var w = this.w; - var xLeft = 0; - var xRight = 0; - var leftOffsetX = 21; - var rightOffsetX = 1; - - if (w.config.yaxis.length > 1) { - this.multipleYs = true; - } - - w.config.yaxis.map(function (yaxe, index) { - var shouldNotDrawAxis = w.globals.ignoreYAxisIndexes.indexOf(index) > -1 || !yaxe.show || yaxe.floating || yaxisLabelCoords[index].width === 0; - var axisWidth = yaxisLabelCoords[index].width + yTitleCoords[index].width; - - if (!yaxe.opposite) { - xLeft = w.globals.translateX - leftOffsetX; - - if (!shouldNotDrawAxis) { - leftOffsetX = leftOffsetX + axisWidth + 20; - } - - w.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX; - } else { - if (w.globals.isBarHorizontal) { - xRight = w.globals.gridWidth + w.globals.translateX - 1; - w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX; - } else { - xRight = w.globals.gridWidth + w.globals.translateX + rightOffsetX; - - if (!shouldNotDrawAxis) { - rightOffsetX = rightOffsetX + axisWidth + 20; - } - - w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20; - } - } - }); - } - }, { - key: "setYAxisTextAlignments", - value: function setYAxisTextAlignments() { - var w = this.w; - var yaxis = w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis"); - yaxis = Utils.listToArray(yaxis); - yaxis.forEach(function (y, index) { - var yaxe = w.config.yaxis[index]; // proceed only if user has specified alignment - - if (yaxe.labels.align !== undefined) { - var yAxisInner = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(index, "'] .apexcharts-yaxis-texts-g")); - var yAxisTexts = w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(index, "'] .apexcharts-yaxis-label")); - yAxisTexts = Utils.listToArray(yAxisTexts); - var rect = yAxisInner.getBoundingClientRect(); - - if (yaxe.labels.align === 'left') { - yAxisTexts.forEach(function (label, lI) { - label.setAttribute('text-anchor', 'start'); - }); - - if (!yaxe.opposite) { - yAxisInner.setAttribute('transform', "translate(-".concat(rect.width, ", 0)")); - } - } else if (yaxe.labels.align === 'center') { - yAxisTexts.forEach(function (label, lI) { - label.setAttribute('text-anchor', 'middle'); - }); - yAxisInner.setAttribute('transform', "translate(".concat(rect.width / 2 * (!yaxe.opposite ? -1 : 1), ", 0)")); - } else if (yaxe.labels.align === 'right') { - yAxisTexts.forEach(function (label, lI) { - label.setAttribute('text-anchor', 'end'); - }); - - if (yaxe.opposite) { - yAxisInner.setAttribute('transform', "translate(".concat(rect.width, ", 0)")); - } - } - } - }); - } - }]); - - return YAxis; -}(); - -var Range = -/*#__PURE__*/ -function () { - function Range(ctx) { - _classCallCheck(this, Range); - - this.ctx = ctx; - this.w = ctx.w; - } // http://stackoverflow.com/questions/326679/choosing-an-attractive-linear-scale-for-a-graphs-y-axiss - // This routine creates the Y axis values for a graph. - - - _createClass(Range, [{ - key: "niceScale", - value: function niceScale(yMin, yMax, diff) { - var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; - var ticks = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 10; - var w = this.w; - var NO_MIN_MAX_PROVIDED = this.w.config.yaxis[index].max === undefined && this.w.config.yaxis[index].min === undefined || this.w.config.yaxis[index].forceNiceScale; - - if (yMin === Number.MIN_VALUE && yMax === 0 || !Utils.isNumber(yMin) && !Utils.isNumber(yMax) || yMin === Number.MIN_VALUE && yMax === -Number.MAX_VALUE) { - // when all values are 0 - yMin = 0; - yMax = ticks; - var linearScale = this.linearScale(yMin, yMax, ticks); - return linearScale; - } - - if (yMin > yMax) { - // if somehow due to some wrong config, user sent max less than min, - // adjust the min/max again - console.warn('yaxis.min cannot be greater than yaxis.max'); - yMax = yMin + 0.1; - } else if (yMin === yMax) { - // If yMin and yMax are identical, then - // adjust the yMin and yMax values to actually - // make a graph. Also avoids division by zero errors. - yMin = yMin === 0 ? 0 : yMin - 0.5; // some small value - - yMax = yMax === 0 ? 2 : yMax + 0.5; // some small value - } // Calculate Min amd Max graphical labels and graph - // increments. The number of ticks defaults to - // 10 which is the SUGGESTED value. Any tick value - // entered is used as a suggested value which is - // adjusted to be a 'pretty' value. - // - // Output will be an array of the Y axis values that - // encompass the Y values. - - - var result = []; // Determine Range - - var range = Math.abs(yMax - yMin); - - if (range < 1 && NO_MIN_MAX_PROVIDED && (w.config.chart.type === 'candlestick' || w.config.series[index].type === 'candlestick' || w.globals.isRangeData)) { - /* fix https://github.com/apexcharts/apexcharts.js/issues/430 */ - yMax = yMax * 1.01; - } // for extremely small values - #fix #553 - - - if (range < 0.00001 && NO_MIN_MAX_PROVIDED && yMax < 10) { - yMax = yMax * 1.05; - } else if (diff > 0.1 && diff < 3 && NO_MIN_MAX_PROVIDED) { - /* fix https://github.com/apexcharts/apexcharts.js/issues/576 */ - - /* fix https://github.com/apexcharts/apexcharts.js/issues/588 */ - yMax = yMax + diff / 3; - } - - var tiks = ticks + 1; // Adjust ticks if needed - - if (tiks < 2) { - tiks = 2; - } else if (tiks > 2) { - tiks -= 2; - } // Get raw step value - - - var tempStep = range / tiks; // Calculate pretty step value - - var mag = Math.floor(Utils.log10(tempStep)); - var magPow = Math.pow(10, mag); - var magMsd = parseInt(tempStep / magPow); - var stepSize = magMsd * magPow; // build Y label array. - // Lower and upper bounds calculations - - var lb = stepSize * Math.floor(yMin / stepSize); - var ub = stepSize * Math.ceil(yMax / stepSize); // Build array - - var val = lb; - - while (1) { - result.push(val); - val += stepSize; - - if (val > ub) { - break; - } - } - - if (NO_MIN_MAX_PROVIDED) { - return { - result: result, - niceMin: result[0], - niceMax: result[result.length - 1] - }; - } else { - result = []; - var v = yMin; - result.push(v); - var valuesDivider = Math.abs(yMax - yMin) / ticks; - - for (var i = 0; i <= ticks - 1; i++) { - v = v + valuesDivider; - result.push(v); - } - - return { - result: result, - niceMin: result[0], - niceMax: result[result.length - 1] - }; - } - } - }, { - key: "linearScale", - value: function linearScale(yMin, yMax) { - var ticks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10; - var range = Math.abs(yMax - yMin); - var step = range / ticks; - - if (ticks === Number.MAX_VALUE) { - ticks = 10; - step = 1; - } - - var result = []; - var v = yMin; - - while (ticks >= 0) { - result.push(v); - v = v + step; - ticks -= 1; - } - - return { - result: result, - niceMin: result[0], - niceMax: result[result.length - 1] - }; - } - }, { - key: "logarithmicScale", - value: function logarithmicScale(index, yMin, yMax, ticks) { - if (yMin < 0 || yMin === Number.MIN_VALUE) yMin = 0.01; - var base = 10; - var min = Math.log(yMin) / Math.log(base); - var max = Math.log(yMax) / Math.log(base); - var range = Math.abs(yMax - yMin); - var step = range / ticks; - var result = []; - var v = yMin; - - while (ticks >= 0) { - result.push(v); - v = v + step; - ticks -= 1; - } - - var logs = result.map(function (niceNumber, i) { - if (niceNumber <= 0) { - niceNumber = 0.01; - } // calculate adjustment factor - - - var scale = (max - min) / (yMax - yMin); - var logVal = Math.pow(base, min + scale * (niceNumber - min)); - return Math.round(logVal / Utils.roundToBase(logVal, base)) * Utils.roundToBase(logVal, base); - }); // Math.floor may have rounded the value to 0, revert back to 1 - - if (logs[0] === 0) logs[0] = 1; - return { - result: logs, - niceMin: logs[0], - niceMax: logs[logs.length - 1] - }; - } - }, { - key: "setYScaleForIndex", - value: function setYScaleForIndex(index, minY, maxY) { - var gl = this.w.globals; - var cnf = this.w.config; - var y = gl.isBarHorizontal ? cnf.xaxis : cnf.yaxis[index]; - - if (typeof gl.yAxisScale[index] === 'undefined') { - gl.yAxisScale[index] = []; - } - - if (y.logarithmic) { - gl.allSeriesCollapsed = false; - gl.yAxisScale[index] = this.logarithmicScale(index, minY, maxY, y.tickAmount ? y.tickAmount : Math.floor(Math.log10(maxY))); - } else { - if (maxY === -Number.MAX_VALUE || !Utils.isNumber(maxY)) { - // no data in the chart. Either all series collapsed or user passed a blank array - gl.yAxisScale[index] = this.linearScale(0, 5, 5); - } else { - // there is some data. Turn off the allSeriesCollapsed flag - gl.allSeriesCollapsed = false; - - if ((y.min !== undefined || y.max !== undefined) && !y.forceNiceScale) { - // fix https://github.com/apexcharts/apexcharts.js/issues/492 - gl.yAxisScale[index] = this.linearScale(minY, maxY, y.tickAmount); - } else { - var diff = Math.abs(maxY - minY); - gl.yAxisScale[index] = this.niceScale(minY, maxY, diff, index, // fix https://github.com/apexcharts/apexcharts.js/issues/397 - y.tickAmount ? y.tickAmount : diff < 5 && diff > 1 ? diff + 1 : 5); - } - } - } - } - }, { - key: "setMultipleYScales", - value: function setMultipleYScales() { - var _this = this; - - var gl = this.w.globals; - var cnf = this.w.config; - var minYArr = gl.minYArr.concat([]); - var maxYArr = gl.maxYArr.concat([]); - var scalesIndices = []; // here, we loop through the yaxis array and find the item which has "seriesName" property - - cnf.yaxis.forEach(function (yaxe, i) { - var index = i; - cnf.series.forEach(function (s, si) { - // if seriesName matches and that series is not collapsed, we use that scale - if (s.name === yaxe.seriesName && gl.collapsedSeriesIndices.indexOf(si) === -1) { - index = si; - - if (i !== si) { - scalesIndices.push({ - index: si, - similarIndex: i, - alreadyExists: true - }); - } else { - scalesIndices.push({ - index: si - }); - } - } - }); - var minY = minYArr[index]; - var maxY = maxYArr[index]; - - _this.setYScaleForIndex(i, minY, maxY); - }); - this.sameScaleInMultipleAxes(minYArr, maxYArr, scalesIndices); - } - }, { - key: "sameScaleInMultipleAxes", - value: function sameScaleInMultipleAxes(minYArr, maxYArr, scalesIndices) { - var _this2 = this; - - var cnf = this.w.config; - var gl = this.w.globals; // we got the scalesIndices array in the above code, but we need to filter out the items which doesn't have same scales - - var similarIndices = []; - scalesIndices.forEach(function (scale) { - if (scale.alreadyExists) { - if (typeof similarIndices[scale.index] === 'undefined') { - similarIndices[scale.index] = []; - } - - similarIndices[scale.index].push(scale.index); - similarIndices[scale.index].push(scale.similarIndex); - } - }); - - function intersect(a, b) { - return a.filter(function (value) { - return b.indexOf(value) !== -1; - }); - } - - similarIndices.forEach(function (si, i) { - similarIndices.forEach(function (sj, j) { - if (i !== j) { - if (intersect(si, sj).length > 0) { - similarIndices[i] = similarIndices[i].concat(similarIndices[j]); - } - } - }); - }); // then, we remove duplicates from the similarScale array - - var uniqueSimilarIndices = similarIndices.map(function (item) { - return item.filter(function (i, pos) { - return item.indexOf(i) === pos; - }); - }); // sort further to remove whole duplicate arrays later - - var sortedIndices = uniqueSimilarIndices.map(function (s) { - return s.sort(); - }); // remove undefined items - - similarIndices = similarIndices.filter(function (s) { - return !!s; - }); - var indices = sortedIndices.slice(); - var stringIndices = indices.map(function (ind) { - return JSON.stringify(ind); - }); - indices = indices.filter(function (ind, p) { - return stringIndices.indexOf(JSON.stringify(ind)) === p; - }); - var sameScaleMinYArr = []; - var sameScaleMaxYArr = []; - minYArr.forEach(function (minYValue, yi) { - indices.forEach(function (scale, i) { - // we compare only the yIndex which exists in the indices array - if (scale.indexOf(yi) > -1) { - if (typeof sameScaleMinYArr[i] === 'undefined') { - sameScaleMinYArr[i] = []; - sameScaleMaxYArr[i] = []; - } - - sameScaleMinYArr[i].push({ - key: yi, - value: minYValue - }); - sameScaleMaxYArr[i].push({ - key: yi, - value: maxYArr[yi] - }); - } - }); - }); - var sameScaleMin = Array.apply(null, Array(indices.length)).map(Number.prototype.valueOf, Number.MIN_VALUE); - var sameScaleMax = Array.apply(null, Array(indices.length)).map(Number.prototype.valueOf, -Number.MAX_VALUE); - sameScaleMinYArr.forEach(function (s, i) { - s.forEach(function (sc, j) { - sameScaleMin[i] = Math.min(sc.value, sameScaleMin[i]); - }); - }); - sameScaleMaxYArr.forEach(function (s, i) { - s.forEach(function (sc, j) { - sameScaleMax[i] = Math.max(sc.value, sameScaleMax[i]); - }); - }); - minYArr.forEach(function (min, i) { - sameScaleMaxYArr.forEach(function (s, si) { - var minY = sameScaleMin[si]; - var maxY = sameScaleMax[si]; - s.forEach(function (ind, k) { - if (s[k].key === i) { - if (cnf.yaxis[i].min !== undefined) { - if (typeof cnf.yaxis[i].min === 'function') { - minY = cnf.yaxis[i].min(gl.minY); - } else { - minY = cnf.yaxis[i].min; - } - } - - if (cnf.yaxis[i].max !== undefined) { - if (typeof cnf.yaxis[i].max === 'function') { - maxY = cnf.yaxis[i].max(gl.maxY); - } else { - maxY = cnf.yaxis[i].max; - } - } - - _this2.setYScaleForIndex(i, minY, maxY); - } - }); - }); - }); - } - }, { - key: "autoScaleY", - value: function autoScaleY(ctx, e) { - if (!ctx) { - ctx = this; - } - - var ret = []; - ctx.w.config.series.forEach(function (serie) { - var min, max; - var first = serie.data.find(function (x) { - return x[0] >= e.xaxis.min; - }); - var firstValue = first[1]; - max = min = firstValue; - serie.data.forEach(function (data) { - if (data[0] <= e.xaxis.max && data[0] >= e.xaxis.min) { - if (data[1] > max && data[1] !== null) max = data[1]; - if (data[1] < min && data[1] !== null) min = data[1]; - } - }); - min *= 0.95; - max *= 1.05; - ret.push({ - min: min, - max: max - }); - }); - return ret; - } - }]); - - return Range; -}(); - -/** - * Range is used to generates values between min and max. - * - * @module Range - **/ - -var Range$1 = -/*#__PURE__*/ -function () { - function Range$$1(ctx) { - _classCallCheck(this, Range$$1); - - this.ctx = ctx; - this.w = ctx.w; - this.scales = new Range(ctx); - } - - _createClass(Range$$1, [{ - key: "init", - value: function init() { - this.setYRange(); - this.setXRange(); - this.setZRange(); - } - }, { - key: "getMinYMaxY", - value: function getMinYMaxY(startingIndex) { - var lowestY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE; - var highestY = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -Number.MAX_VALUE; - var len = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var gl = this.w.globals; - var maxY = -Number.MAX_VALUE; - var minY = Number.MIN_VALUE; - - if (len === null) { - len = startingIndex + 1; - } - - var series = gl.series; - var seriesMin = series; - var seriesMax = series; - - if (this.w.config.chart.type === 'candlestick') { - seriesMin = gl.seriesCandleL; - seriesMax = gl.seriesCandleH; - } else if (gl.isRangeData) { - seriesMin = gl.seriesRangeStart; - seriesMax = gl.seriesRangeEnd; - } - - for (var i = startingIndex; i < len; i++) { - gl.dataPoints = Math.max(gl.dataPoints, series[i].length); - - for (var j = 0; j < gl.series[i].length; j++) { - var val = series[i][j]; - - if (val !== null && Utils.isNumber(val)) { - maxY = Math.max(maxY, seriesMax[i][j]); - lowestY = Math.min(lowestY, seriesMin[i][j]); - highestY = Math.max(highestY, seriesMin[i][j]); - - if (this.w.config.chart.type === 'candlestick') { - maxY = Math.max(maxY, gl.seriesCandleO[i][j]); - maxY = Math.max(maxY, gl.seriesCandleH[i][j]); - maxY = Math.max(maxY, gl.seriesCandleL[i][j]); - maxY = Math.max(maxY, gl.seriesCandleC[i][j]); - highestY = maxY; - } - - if (Utils.isFloat(val)) { - val = Utils.noExponents(val); - gl.yValueDecimal = Math.max(gl.yValueDecimal, val.toString().split('.')[1].length); - } - - if (minY > seriesMin[i][j] && seriesMin[i][j] < 0) { - minY = seriesMin[i][j]; - } - } else { - gl.hasNullValues = true; - } - } - } - - return { - minY: minY, - maxY: maxY, - lowestY: lowestY, - highestY: highestY - }; - } - }, { - key: "setYRange", - value: function setYRange() { - var gl = this.w.globals; - var cnf = this.w.config; - gl.maxY = -Number.MAX_VALUE; - gl.minY = Number.MIN_VALUE; - var lowestYInAllSeries = Number.MAX_VALUE; - - if (gl.isMultipleYAxis) { - // we need to get minY and maxY for multiple y axis - for (var i = 0; i < gl.series.length; i++) { - var minYMaxYArr = this.getMinYMaxY(i, lowestYInAllSeries, null, i + 1); - gl.minYArr.push(minYMaxYArr.minY); - gl.maxYArr.push(minYMaxYArr.maxY); - lowestYInAllSeries = minYMaxYArr.lowestY; - } - } // and then, get the minY and maxY from all series - - - var minYMaxY = this.getMinYMaxY(0, lowestYInAllSeries, null, gl.series.length); - gl.minY = minYMaxY.minY; - gl.maxY = minYMaxY.maxY; - lowestYInAllSeries = minYMaxY.lowestY; - - if (cnf.chart.stacked) { - // for stacked charts, we calculate each series's parallel values. i.e, series[0][j] + series[1][j] .... [series[i.length][j]] and get the max out of it - var stackedPoss = []; - var stackedNegs = []; - - for (var j = 0; j < gl.series[gl.maxValsInArrayIndex].length; j++) { - var poss = 0; - var negs = 0; - - for (var _i = 0; _i < gl.series.length; _i++) { - if (gl.series[_i][j] !== null && Utils.isNumber(gl.series[_i][j])) { - if (gl.series[_i][j] > 0) { - // 0.0001 fixes #185 when values are very small - poss = poss + parseFloat(gl.series[_i][j]) + 0.0001; - } else { - negs = negs + parseFloat(gl.series[_i][j]); - } - } - - if (_i === gl.series.length - 1) { - // push all the totals to the array for future use - stackedPoss.push(poss); - stackedNegs.push(negs); - } - } - } // get the max/min out of the added parallel values - - - for (var z = 0; z < stackedPoss.length; z++) { - gl.maxY = Math.max(gl.maxY, stackedPoss[z]); - gl.minY = Math.min(gl.minY, stackedNegs[z]); - } - } // if the numbers are too big, reduce the range - // for eg, if number is between 100000-110000, putting 0 as the lowest value is not so good idea. So change the gl.minY for line/area/candlesticks - - - if (cnf.chart.type === 'line' || cnf.chart.type === 'area' || cnf.chart.type === 'candlestick') { - if (gl.minY === Number.MIN_VALUE && lowestYInAllSeries !== -Number.MAX_VALUE && lowestYInAllSeries !== gl.maxY // single value possibility - ) { - var diff = gl.maxY - lowestYInAllSeries; - - if (lowestYInAllSeries >= 0 && lowestYInAllSeries <= 10) { - // if minY is already 0/low value, we don't want to go negatives here - so this check is essential. - diff = 0; - } - - gl.minY = lowestYInAllSeries - diff * 5 / 100; - /* fix https://github.com/apexcharts/apexcharts.js/issues/426 */ - - gl.maxY = gl.maxY + diff * 5 / 100; - } - } - - cnf.yaxis.map(function (yaxe, index) { - // override all min/max values by user defined values (y axis) - if (yaxe.max !== undefined) { - if (typeof yaxe.max === 'number') { - gl.maxYArr[index] = yaxe.max; - } else if (typeof yaxe.max === 'function') { - gl.maxYArr[index] = yaxe.max(gl.maxY); - } // gl.maxY is for single y-axis chart, it will be ignored in multi-yaxis - - - gl.maxY = gl.maxYArr[index]; - } - - if (yaxe.min !== undefined) { - if (typeof yaxe.min === 'number') { - gl.minYArr[index] = yaxe.min; - } else if (typeof yaxe.min === 'function') { - gl.minYArr[index] = yaxe.min(gl.minY); - } // gl.minY is for single y-axis chart, it will be ignored in multi-yaxis - - - gl.minY = gl.minYArr[index]; - } - }); // for horizontal bar charts, we need to check xaxis min/max as user may have specified there - - if (gl.isBarHorizontal) { - if (cnf.xaxis.min !== undefined && typeof cnf.xaxis.min === 'number') { - gl.minY = cnf.xaxis.min; - } - - if (cnf.xaxis.max !== undefined && typeof cnf.xaxis.max === 'number') { - gl.maxY = cnf.xaxis.max; - } - } // for multi y-axis we need different scales for each - - - if (gl.isMultipleYAxis) { - this.scales.setMultipleYScales(); - gl.minY = lowestYInAllSeries; - gl.yAxisScale.forEach(function (scale, i) { - gl.minYArr[i] = scale.niceMin; - gl.maxYArr[i] = scale.niceMax; - }); - } else { - this.scales.setYScaleForIndex(0, gl.minY, gl.maxY); - gl.minY = gl.yAxisScale[0].niceMin; - gl.maxY = gl.yAxisScale[0].niceMax; - gl.minYArr[0] = gl.yAxisScale[0].niceMin; - gl.maxYArr[0] = gl.yAxisScale[0].niceMax; - } - - return { - minY: gl.minY, - maxY: gl.maxY, - minYArr: gl.minYArr, - maxYArr: gl.maxYArr - }; - } - }, { - key: "setXRange", - value: function setXRange() { - var gl = this.w.globals; - var cnf = this.w.config; - var isXNumeric = cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'datetime' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided || gl.noLabelsProvided || gl.isXNumeric; // minX maxX starts here - - if (gl.isXNumeric) { - for (var i = 0; i < gl.series.length; i++) { - if (gl.labels[i]) { - for (var j = 0; j < gl.labels[i].length; j++) { - if (gl.labels[i][j] !== null && Utils.isNumber(gl.labels[i][j])) { - gl.maxX = Math.max(gl.maxX, gl.labels[i][j]); - gl.initialmaxX = Math.max(gl.maxX, gl.labels[i][j]); - gl.minX = Math.min(gl.minX, gl.labels[i][j]); - gl.initialminX = Math.min(gl.minX, gl.labels[i][j]); - } - } - } - } - } - - if (gl.noLabelsProvided) { - if (cnf.xaxis.categories.length === 0) { - gl.maxX = gl.labels[gl.labels.length - 1]; - gl.initialmaxX = gl.labels[gl.labels.length - 1]; - gl.minX = 1; - gl.initialminX = 1; - } - } // for numeric xaxis, we need to adjust some padding left and right for bar charts - - - if (gl.comboChartsHasBars || cnf.chart.type === 'candlestick' || cnf.chart.type === 'bar' && gl.isXNumeric) { - if (cnf.xaxis.type !== 'category' || gl.isXNumeric) { - var minX = gl.minX - gl.svgWidth / gl.dataPoints * (Math.abs(gl.maxX - gl.minX) / gl.svgWidth) / 2; - gl.minX = minX; - gl.initialminX = minX; - var maxX = gl.maxX + gl.svgWidth / gl.dataPoints * (Math.abs(gl.maxX - gl.minX) / gl.svgWidth) / 2; - gl.maxX = maxX; - gl.initialmaxX = maxX; - } - } - - if ((gl.isXNumeric || gl.noLabelsProvided) && (!cnf.xaxis.convertedCatToNumeric || gl.dataFormatXNumeric)) { - var ticks; - - if (cnf.xaxis.tickAmount === undefined) { - ticks = Math.round(gl.svgWidth / 150); // no labels provided and total number of dataPoints is less than 20 - - if (cnf.xaxis.type === 'numeric' && gl.dataPoints < 20) { - ticks = gl.dataPoints - 1; - } // this check is for when ticks exceeds total datapoints and that would result in duplicate labels - - - if (ticks > gl.dataPoints && gl.dataPoints !== 0) { - ticks = gl.dataPoints - 1; - } - } else if (cnf.xaxis.tickAmount === 'dataPoints') { - ticks = gl.series[gl.maxValsInArrayIndex].length - 1; - } else { - ticks = cnf.xaxis.tickAmount; - } // override all min/max values by user defined values (x axis) - - - if (cnf.xaxis.max !== undefined && typeof cnf.xaxis.max === 'number') { - gl.maxX = cnf.xaxis.max; - } - - if (cnf.xaxis.min !== undefined && typeof cnf.xaxis.min === 'number') { - gl.minX = cnf.xaxis.min; - } // if range is provided, adjust the new minX - - - if (cnf.xaxis.range !== undefined) { - gl.minX = gl.maxX - cnf.xaxis.range; - } - - if (gl.minX !== Number.MAX_VALUE && gl.maxX !== -Number.MAX_VALUE) { - gl.xAxisScale = this.scales.linearScale(gl.minX, gl.maxX, ticks); - } else { - gl.xAxisScale = this.scales.linearScale(1, ticks, ticks); - - if (gl.noLabelsProvided && gl.labels.length > 0) { - gl.xAxisScale = this.scales.linearScale(1, gl.labels.length, ticks - 1); // this is the only place seriesX is again mutated - - gl.seriesX = gl.labels.slice(); - } - } // we will still store these labels as the count for this will be different (to draw grid and labels placement) - - - if (isXNumeric) { - gl.labels = gl.xAxisScale.result.slice(); - } - } - - if (gl.minX === gl.maxX) { - // single dataPoint - if (cnf.xaxis.type === 'datetime') { - var newMinX = new Date(gl.minX); - newMinX.setDate(newMinX.getDate() - 2); - gl.minX = new Date(newMinX).getTime(); - var newMaxX = new Date(gl.maxX); - newMaxX.setDate(newMaxX.getDate() + 2); - gl.maxX = new Date(newMaxX).getTime(); - } else if (cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided) { - gl.minX = gl.minX - 2; - gl.maxX = gl.maxX + 2; - } - } - - if (gl.isXNumeric) { - // get the least x diff if numeric x axis is present - gl.seriesX.forEach(function (sX, i) { - sX.forEach(function (s, j) { - if (j > 0) { - var xDiff = s - gl.seriesX[i][j - 1]; - gl.minXDiff = Math.min(xDiff, gl.minXDiff); - } - }); - }); - this.calcMinXDiffForTinySeries(); - } - - return { - minX: gl.minX, - maxX: gl.maxX - }; - } - }, { - key: "calcMinXDiffForTinySeries", - value: function calcMinXDiffForTinySeries() { - var w = this.w; - var len = w.globals.labels.length; - - if (w.globals.labels.length === 1) { - w.globals.minXDiff = (w.globals.maxX - w.globals.minX) / len / 3; - } else { - if (w.globals.minXDiff === Number.MAX_VALUE) { - // possibly a single dataPoint (fixes react-apexcharts/issue#34) - if (w.globals.timelineLabels.length > 0) { - len = w.globals.timelineLabels.length; - } - - if (len < 3) { - len = 3; - } - - w.globals.minXDiff = (w.globals.maxX - w.globals.minX) / len; - } - } - - return w.globals.minXDiff; - } - }, { - key: "setZRange", - value: function setZRange() { - var gl = this.w.globals; // minZ, maxZ starts here - - if (gl.isDataXYZ) { - for (var i = 0; i < gl.series.length; i++) { - if (typeof gl.seriesZ[i] !== 'undefined') { - for (var j = 0; j < gl.seriesZ[i].length; j++) { - if (gl.seriesZ[i][j] !== null && Utils.isNumber(gl.seriesZ[i][j])) { - gl.maxZ = Math.max(gl.maxZ, gl.seriesZ[i][j]); - gl.minZ = Math.min(gl.minZ, gl.seriesZ[i][j]); - } - } - } - } - } - } - }]); - - return Range$$1; -}(); - -/** - * ApexCharts Series Class for interation with the Series of the chart. - * - * @module Series - **/ - -var Series = -/*#__PURE__*/ -function () { - function Series(ctx) { - _classCallCheck(this, Series); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Series, [{ - key: "getAllSeriesEls", - value: function getAllSeriesEls() { - return this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series"); - } - }, { - key: "getSeriesByName", - value: function getSeriesByName(seriesName) { - return this.w.globals.dom.baseEl.querySelector("[seriesName='".concat(Utils.escapeString(seriesName), "']")); - } - }, { - key: "addCollapsedClassToSeries", - value: function addCollapsedClassToSeries(elSeries, index) { - var w = this.w; - - function iterateOnAllCollapsedSeries(series) { - for (var cs = 0; cs < series.length; cs++) { - if (series[cs].index === index) { - elSeries.node.classList.add('apexcharts-series-collapsed'); - } - } - } - - iterateOnAllCollapsedSeries(w.globals.collapsedSeries); - iterateOnAllCollapsedSeries(w.globals.ancillaryCollapsedSeries); - } - }, { - key: "toggleSeriesOnHover", - value: function toggleSeriesOnHover(e, targetElement) { - var w = this.w; - var allSeriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series"); - - if (e.type === 'mousemove') { - var seriesCnt = parseInt(targetElement.getAttribute('rel')) - 1; - var seriesEl = null; - - if (w.globals.axisCharts || w.config.chart.type === 'radialBar') { - if (w.globals.axisCharts) { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(seriesCnt, "']")); - } else { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(seriesCnt + 1, "']")); - } - } else { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(seriesCnt + 1, "'] path")); - } - - for (var se = 0; se < allSeriesEls.length; se++) { - allSeriesEls[se].classList.add('legend-mouseover-inactive'); - } - - if (seriesEl !== null) { - if (!w.globals.axisCharts) { - seriesEl.parentNode.classList.remove('legend-mouseover-inactive'); - } - - seriesEl.classList.remove('legend-mouseover-inactive'); - } - } else if (e.type === 'mouseout') { - for (var _se = 0; _se < allSeriesEls.length; _se++) { - allSeriesEls[_se].classList.remove('legend-mouseover-inactive'); - } - } - } - }, { - key: "highlightRangeInSeries", - value: function highlightRangeInSeries(e, targetElement) { - var w = this.w; - var allHeatMapElements = w.globals.dom.baseEl.querySelectorAll('.apexcharts-heatmap-rect'); - - var allActive = function allActive() { - for (var i = 0; i < allHeatMapElements.length; i++) { - allHeatMapElements[i].classList.remove('legend-mouseover-inactive'); - } - }; - - var allInactive = function allInactive() { - for (var i = 0; i < allHeatMapElements.length; i++) { - allHeatMapElements[i].classList.add('legend-mouseover-inactive'); - } - }; - - var selectedActive = function selectedActive(range) { - for (var i = 0; i < allHeatMapElements.length; i++) { - var val = parseInt(allHeatMapElements[i].getAttribute('val')); - - if (val >= range.from && val <= range.to) { - allHeatMapElements[i].classList.remove('legend-mouseover-inactive'); - } - } - }; - - if (e.type === 'mousemove') { - var seriesCnt = parseInt(targetElement.getAttribute('rel')) - 1; - allActive(); - allInactive(); - var range = w.config.plotOptions.heatmap.colorScale.ranges[seriesCnt]; - selectedActive(range); - } else if (e.type === 'mouseout') { - allActive(); - } - } - }, { - key: "getActiveSeriesIndex", - value: function getActiveSeriesIndex() { - var w = this.w; - var activeIndex = 0; - - if (w.globals.series.length > 1) { - // active series flag is required to know if user has not deactivated via legend click - var firstActiveSeriesIndex = w.globals.series.map(function (series, index) { - if (series.length > 0 && w.config.series[index].type !== 'bar' && w.config.series[index].type !== 'column') { - return index; - } else { - return -1; - } - }); - - for (var a = 0; a < firstActiveSeriesIndex.length; a++) { - if (firstActiveSeriesIndex[a] !== -1) { - activeIndex = firstActiveSeriesIndex[a]; - break; - } - } - } - - return activeIndex; - } - }, { - key: "getActiveConfigSeriesIndex", - value: function getActiveConfigSeriesIndex() { - var w = this.w; - var activeIndex = 0; - - if (w.config.series.length > 1) { - // active series flag is required to know if user has not deactivated via legend click - var firstActiveSeriesIndex = w.config.series.map(function (series, index) { - if (series.data && series.data.length > 0) { - return index; - } else { - return -1; - } - }); - - for (var a = 0; a < firstActiveSeriesIndex.length; a++) { - if (firstActiveSeriesIndex[a] !== -1) { - activeIndex = firstActiveSeriesIndex[a]; - break; - } - } - } - - return activeIndex; - } - }, { - key: "getPreviousPaths", - value: function getPreviousPaths() { - var w = this.w; - w.globals.previousPaths = []; - - function pushPaths(seriesEls, i, type) { - var paths = seriesEls[i].childNodes; - var dArr = { - type: type, - paths: [], - realIndex: seriesEls[i].getAttribute('data:realIndex') - }; - - for (var j = 0; j < paths.length; j++) { - if (paths[j].hasAttribute('pathTo')) { - var d = paths[j].getAttribute('pathTo'); - dArr.paths.push({ - d: d - }); - } - } - - w.globals.previousPaths.push(dArr); - } - - var linePaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-line-series .apexcharts-series'); - - if (linePaths.length > 0) { - for (var p = linePaths.length - 1; p >= 0; p--) { - pushPaths(linePaths, p, 'line'); - } - } - - var areapaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-area-series .apexcharts-series'); - - if (areapaths.length > 0) { - for (var i = areapaths.length - 1; i >= 0; i--) { - pushPaths(areapaths, i, 'area'); - } - } - - var barPaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series .apexcharts-series'); - - if (barPaths.length > 0) { - for (var _p = 0; _p < barPaths.length; _p++) { - pushPaths(barPaths, _p, 'bar'); - } - } - - var candlestickPaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-candlestick-series .apexcharts-series'); - - if (candlestickPaths.length > 0) { - for (var _p2 = 0; _p2 < candlestickPaths.length; _p2++) { - pushPaths(candlestickPaths, _p2, 'candlestick'); - } - } - - var radarPaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-radar-series .apexcharts-series'); - - if (radarPaths.length > 0) { - for (var _p3 = 0; _p3 < radarPaths.length; _p3++) { - pushPaths(radarPaths, _p3, 'radar'); - } - } - - var bubblepaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bubble-series .apexcharts-series'); - - if (bubblepaths.length > 0) { - for (var s = 0; s < bubblepaths.length; s++) { - var seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-bubble-series .apexcharts-series[data\\:realIndex='".concat(s, "'] circle")); - var dArr = []; - - for (var _i = 0; _i < seriesEls.length; _i++) { - dArr.push({ - x: seriesEls[_i].getAttribute('cx'), - y: seriesEls[_i].getAttribute('cy'), - r: seriesEls[_i].getAttribute('r') - }); - } - - w.globals.previousPaths.push(dArr); - } - } - - var scatterpaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-scatter-series .apexcharts-series'); - - if (scatterpaths.length > 0) { - for (var _s = 0; _s < scatterpaths.length; _s++) { - var _seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-scatter-series .apexcharts-series[data\\:realIndex='".concat(_s, "'] circle")); - - var _dArr = []; - - for (var _i2 = 0; _i2 < _seriesEls.length; _i2++) { - _dArr.push({ - x: _seriesEls[_i2].getAttribute('cx'), - y: _seriesEls[_i2].getAttribute('cy'), - r: _seriesEls[_i2].getAttribute('r') - }); - } - - w.globals.previousPaths.push(_dArr); - } - } - - var heatmapColors = w.globals.dom.baseEl.querySelectorAll('.apexcharts-heatmap .apexcharts-series'); - - if (heatmapColors.length > 0) { - for (var h = 0; h < heatmapColors.length; h++) { - var _seriesEls2 = w.globals.dom.baseEl.querySelectorAll(".apexcharts-heatmap .apexcharts-series[data\\:realIndex='".concat(h, "'] rect")); - - var _dArr2 = []; - - for (var _i3 = 0; _i3 < _seriesEls2.length; _i3++) { - _dArr2.push({ - color: _seriesEls2[_i3].getAttribute('color') - }); - } - - w.globals.previousPaths.push(_dArr2); - } - } - - if (!w.globals.axisCharts) { - // for non-axis charts (i.e., circular charts, pathFrom is not usable. We need whole series) - w.globals.previousPaths = w.globals.series; - } - } - }, { - key: "handleNoData", - value: function handleNoData() { - var w = this.w; - var me = this; - var noDataOpts = w.config.noData; - var graphics = new Graphics(me.ctx); - var x = w.globals.svgWidth / 2; - var y = w.globals.svgHeight / 2; - var textAnchor = 'middle'; - w.globals.noData = true; - w.globals.animationEnded = true; - - if (noDataOpts.align === 'left') { - x = 10; - textAnchor = 'start'; - } else if (noDataOpts.align === 'right') { - x = w.globals.svgWidth - 10; - textAnchor = 'end'; - } - - if (noDataOpts.verticalAlign === 'top') { - y = 50; - } else if (noDataOpts.verticalAlign === 'bottom') { - y = w.globals.svgHeight - 50; - } - - x = x + noDataOpts.offsetX; - y = y + parseInt(noDataOpts.style.fontSize) + 2; - - if (noDataOpts.text !== undefined && noDataOpts.text !== '') { - var titleText = graphics.drawText({ - x: x, - y: y, - text: noDataOpts.text, - textAnchor: textAnchor, - fontSize: noDataOpts.style.fontSize, - fontFamily: noDataOpts.style.fontFamily, - foreColor: noDataOpts.style.color, - opacity: 1, - class: 'apexcharts-text-nodata' - }); - titleText.node.setAttribute('class', 'apexcharts-title-text'); - w.globals.dom.Paper.add(titleText); - } - } // When user clicks on legends, the collapsed series is filled with [0,0,0,...,0] - // This is because we don't want to alter the series' length as it is used at many places - - }, { - key: "setNullSeriesToZeroValues", - value: function setNullSeriesToZeroValues(series) { - var w = this.w; - - for (var sl = 0; sl < series.length; sl++) { - if (series[sl].length === 0) { - for (var j = 0; j < series[w.globals.maxValsInArrayIndex].length; j++) { - series[sl].push(0); - } - } - } - - return series; - } - }, { - key: "hasAllSeriesEqualX", - value: function hasAllSeriesEqualX() { - var equalLen = true; - var w = this.w; - var filteredSerX = this.filteredSeriesX(); - - for (var i = 0; i < filteredSerX.length - 1; i++) { - if (filteredSerX[i][0] !== filteredSerX[i + 1][0]) { - equalLen = false; - break; - } - } - - w.globals.allSeriesHasEqualX = equalLen; - return equalLen; - } - }, { - key: "filteredSeriesX", - value: function filteredSeriesX() { - var w = this.w; - var filteredSeriesX = w.globals.seriesX.map(function (ser, index) { - if (ser.length > 0) { - return ser; - } else { - return []; - } - }); - return filteredSeriesX; - } - }]); - - return Series; -}(); - -/** - * ApexCharts Dimensions Class for calculating rects of all elements that are drawn and will be drawn. - * - * @module Dimensions - **/ - -var Dimensions = -/*#__PURE__*/ -function () { - function Dimensions(ctx) { - _classCallCheck(this, Dimensions); - - this.ctx = ctx; - this.w = ctx.w; - this.lgRect = {}; - this.yAxisWidth = 0; - this.xAxisHeight = 0; - this.isSparkline = this.w.config.chart.sparkline.enabled; - this.xPadRight = 0; - this.xPadLeft = 0; - } - /** - * @memberof Dimensions - * @param {object} w - chart context - **/ - - - _createClass(Dimensions, [{ - key: "plotCoords", - value: function plotCoords() { - var w = this.w; - var gl = w.globals; - var lgRect = this.getLegendsRect(); - - if (gl.axisCharts) { - // for line / area / scatter / column - this.setGridCoordsForAxisCharts(lgRect); - } else { - // for pie / donuts / circle - this.setGridCoordsForNonAxisCharts(lgRect); - } - - this.titleSubtitleOffset(); // after calculating everything, apply padding set by user - - gl.gridHeight = gl.gridHeight - w.config.grid.padding.top - w.config.grid.padding.bottom; - gl.gridWidth = gl.gridWidth - w.config.grid.padding.left - w.config.grid.padding.right - this.xPadRight - this.xPadLeft; - gl.translateX = gl.translateX + w.config.grid.padding.left + this.xPadLeft; - gl.translateY = gl.translateY + w.config.grid.padding.top; - } - }, { - key: "conditionalChecksForAxisCoords", - value: function conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords) { - var w = this.w; - this.xAxisHeight = (xaxisLabelCoords.height + xtitleCoords.height) * w.globals.LINE_HEIGHT_RATIO + 15; - this.xAxisWidth = xaxisLabelCoords.width; - - if (this.xAxisHeight - xtitleCoords.height > w.config.xaxis.labels.maxHeight) { - this.xAxisHeight = w.config.xaxis.labels.maxHeight; - } - - if (w.config.xaxis.labels.minHeight && this.xAxisHeight < w.config.xaxis.labels.minHeight) { - this.xAxisHeight = w.config.xaxis.labels.minHeight; - } - - if (w.config.xaxis.floating) { - this.xAxisHeight = 0; - } - - if (!w.globals.isBarHorizontal) { - this.yAxisWidth = this.getTotalYAxisWidth(); - } else { - this.yAxisWidth = w.globals.yLabelsCoords[0].width + w.globals.yTitleCoords[0].width + 15; - } - - var minYAxisWidth = 0; - var maxYAxisWidth = 0; - w.config.yaxis.forEach(function (y) { - minYAxisWidth += y.labels.minWidth; - maxYAxisWidth += y.labels.maxWidth; - }); - - if (this.yAxisWidth < minYAxisWidth) { - this.yAxisWidth = minYAxisWidth; - } - - if (this.yAxisWidth > maxYAxisWidth) { - this.yAxisWidth = maxYAxisWidth; - } - } - }, { - key: "setGridCoordsForAxisCharts", - value: function setGridCoordsForAxisCharts(lgRect) { - var w = this.w; - var gl = w.globals; - var yaxisLabelCoords = this.getyAxisLabelsCoords(); - var xaxisLabelCoords = this.getxAxisLabelsCoords(); - var yTitleCoords = this.getyAxisTitleCoords(); - var xtitleCoords = this.getxAxisTitleCoords(); - w.globals.yLabelsCoords = []; - w.globals.yTitleCoords = []; - w.config.yaxis.map(function (yaxe, index) { - // store the labels and titles coords in global vars - w.globals.yLabelsCoords.push({ - width: yaxisLabelCoords[index].width, - index: index - }); - w.globals.yTitleCoords.push({ - width: yTitleCoords[index].width, - index: index - }); - }); - this.conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords); - gl.translateXAxisY = w.globals.rotateXLabels ? this.xAxisHeight / 8 : -4; - gl.translateXAxisX = w.globals.rotateXLabels && w.globals.isXNumeric && w.config.xaxis.labels.rotate <= -45 ? -this.xAxisWidth / 4 : 0; - - if (w.globals.isBarHorizontal) { - gl.rotateXLabels = false; - gl.translateXAxisY = -1 * (parseInt(w.config.xaxis.labels.style.fontSize) / 1.5); - } - - gl.translateXAxisY = gl.translateXAxisY + w.config.xaxis.labels.offsetY; - gl.translateXAxisX = gl.translateXAxisX + w.config.xaxis.labels.offsetX; - var yAxisWidth = this.yAxisWidth; - var xAxisHeight = this.xAxisHeight; - gl.xAxisLabelsHeight = this.xAxisHeight; - gl.xAxisHeight = this.xAxisHeight; - var translateY = 10; - - if (!w.config.grid.show || w.config.chart.type === 'radar') { - yAxisWidth = 0; - xAxisHeight = 35; - } - - if (this.isSparkline) { - lgRect = { - height: 0, - width: 0 - }; - xAxisHeight = 0; - yAxisWidth = 0; - translateY = 0; - } - - this.additionalPaddingXLabels(xaxisLabelCoords); - - switch (w.config.legend.position) { - case 'bottom': - gl.translateY = translateY; - gl.translateX = yAxisWidth; - gl.gridHeight = gl.svgHeight - lgRect.height - xAxisHeight - (!this.isSparkline ? w.globals.rotateXLabels ? 10 : 15 : 0); - gl.gridWidth = gl.svgWidth - yAxisWidth; - break; - - case 'top': - gl.translateY = lgRect.height + translateY; - gl.translateX = yAxisWidth; - gl.gridHeight = gl.svgHeight - lgRect.height - xAxisHeight - (!this.isSparkline ? w.globals.rotateXLabels ? 10 : 15 : 0); - gl.gridWidth = gl.svgWidth - yAxisWidth; - break; - - case 'left': - gl.translateY = translateY; - gl.translateX = lgRect.width + yAxisWidth; - gl.gridHeight = gl.svgHeight - xAxisHeight - 12; - gl.gridWidth = gl.svgWidth - lgRect.width - yAxisWidth; - break; - - case 'right': - gl.translateY = translateY; - gl.translateX = yAxisWidth; - gl.gridHeight = gl.svgHeight - xAxisHeight - 12; - gl.gridWidth = gl.svgWidth - lgRect.width - yAxisWidth - 5; - break; - - default: - throw new Error('Legend position not supported'); - } - - this.setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords); // after drawing everything, set the Y axis positions - - var objyAxis = new YAxis(this.ctx); - objyAxis.setYAxisXPosition(yaxisLabelCoords, yTitleCoords); - } - }, { - key: "setGridCoordsForNonAxisCharts", - value: function setGridCoordsForNonAxisCharts(lgRect) { - var w = this.w; - var gl = w.globals; - var xPad = 0; - - if (w.config.legend.show && !w.config.legend.floating) { - xPad = 20; - } - - var offY = 10; - var offX = 0; - - if (w.config.chart.type === 'pie' || w.config.chart.type === 'donut') { - offY = offY + w.config.plotOptions.pie.offsetY; - offX = offX + w.config.plotOptions.pie.offsetX; - } else if (w.config.chart.type === 'radialBar') { - offY = offY + w.config.plotOptions.radialBar.offsetY; - offX = offX + w.config.plotOptions.radialBar.offsetX; - } - - if (!w.config.legend.show) { - gl.gridHeight = gl.svgHeight - 35; - gl.gridWidth = gl.gridHeight; - gl.translateY = offY - 10; - gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2; - return; - } - - switch (w.config.legend.position) { - case 'bottom': - gl.gridHeight = gl.svgHeight - lgRect.height - 35; - gl.gridWidth = gl.gridHeight; - gl.translateY = offY - 20; - gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2; - break; - - case 'top': - gl.gridHeight = gl.svgHeight - lgRect.height - 35; - gl.gridWidth = gl.gridHeight; - gl.translateY = lgRect.height + offY; - gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2; - break; - - case 'left': - gl.gridWidth = gl.svgWidth - lgRect.width - xPad; - gl.gridHeight = gl.gridWidth; - gl.translateY = offY; - gl.translateX = offX + lgRect.width + xPad; - break; - - case 'right': - gl.gridWidth = gl.svgWidth - lgRect.width - xPad - 5; - gl.gridHeight = gl.gridWidth; - gl.translateY = offY; - gl.translateX = offX + 10; - break; - - default: - throw new Error('Legend position not supported'); - } - } - }, { - key: "setGridXPosForDualYAxis", - value: function setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords) { - var w = this.w; - w.config.yaxis.map(function (yaxe, index) { - if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1 && !w.config.yaxis[index].floating && w.config.yaxis[index].show) { - if (yaxe.opposite) { - w.globals.translateX = w.globals.translateX - (yaxisLabelCoords[index].width + yTitleCoords[index].width) - parseInt(w.config.yaxis[index].labels.style.fontSize) / 1.2 - 12; - } - } - }); - } // Sometimes, the last labels gets cropped in category/numeric xaxis. - // Hence, we add some additional padding based on the label length to avoid the last label being cropped. - // NOTE: datetime x-axis won't have any effect with this as we don't know the label length there due to many constraints. - - }, { - key: "additionalPaddingXLabels", - value: function additionalPaddingXLabels(xaxisLabelCoords) { - var _this = this; - - var w = this.w; - - if (w.config.xaxis.type === 'category' && w.globals.isBarHorizontal || w.config.xaxis.type === 'numeric' || w.config.xaxis.type === 'datetime') { - var rightPad = function rightPad(labels) { - if (_this.timescaleLabels) { - // for timeline labels, we take the last label and check if it exceeds gridWidth - var lastTimescaleLabel = _this.timescaleLabels[_this.timescaleLabels.length - 1]; - var labelPosition = lastTimescaleLabel.position + labels.width; - - if (labelPosition > w.globals.gridWidth) { - w.globals.skipLastTimelinelabel = true; - } else { - // we have to make it false again in case of zooming/panning - w.globals.skipLastTimelinelabel = false; - } - } else if (w.config.xaxis.type !== 'datetime') { - if (w.config.grid.padding.right < labels.width) { - _this.xPadRight = labels.width / 2 + 1; - } - } - }; - - var leftPad = function leftPad(labels) { - if (w.config.grid.padding.left < labels.width) { - _this.xPadLeft = labels.width / 2 + 1; - } - }; - - var isXNumeric = w.globals.isXNumeric; - w.config.yaxis.forEach(function (yaxe, i) { - var shouldPad = !yaxe.show || yaxe.floating || w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || isXNumeric || yaxe.opposite && w.globals.isBarHorizontal; - - if (shouldPad) { - if (isXNumeric && w.globals.isMultipleYAxis && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || w.globals.isBarHorizontal && yaxe.opposite) { - leftPad(xaxisLabelCoords); - } - - if (!w.globals.isBarHorizontal && yaxe.opposite && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || isXNumeric && !w.globals.isMultipleYAxis) { - rightPad(xaxisLabelCoords); - } - } - }); - } - } - }, { - key: "titleSubtitleOffset", - value: function titleSubtitleOffset() { - var w = this.w; - var gl = w.globals; - var gridShrinkOffset = this.isSparkline || !w.globals.axisCharts ? 0 : 10; - - if (w.config.title.text !== undefined) { - gridShrinkOffset += w.config.title.margin; - } else { - gridShrinkOffset += this.isSparkline || !w.globals.axisCharts ? 0 : 5; - } - - if (w.config.subtitle.text !== undefined) { - gridShrinkOffset += w.config.subtitle.margin; - } else { - gridShrinkOffset += this.isSparkline || !w.globals.axisCharts ? 0 : 5; - } - - if (w.config.legend.show && w.config.legend.position === 'bottom' && !w.config.legend.floating && w.config.series.length > 1) { - gridShrinkOffset += 10; - } - - var titleCoords = this.getTitleSubtitleCoords('title'); - var subtitleCoords = this.getTitleSubtitleCoords('subtitle'); - gl.gridHeight = gl.gridHeight - titleCoords.height - subtitleCoords.height - gridShrinkOffset; - gl.translateY = gl.translateY + titleCoords.height + subtitleCoords.height + gridShrinkOffset; - } - }, { - key: "getTotalYAxisWidth", - value: function getTotalYAxisWidth() { - var w = this.w; - var yAxisWidth = 0; - var padding = 10; - - var isHiddenYAxis = function isHiddenYAxis(index) { - return w.globals.ignoreYAxisIndexes.indexOf(index) > -1; - }; - - w.globals.yLabelsCoords.map(function (yLabelCoord, index) { - var floating = w.config.yaxis[index].floating; - - if (yLabelCoord.width > 0 && !floating) { - yAxisWidth = yAxisWidth + yLabelCoord.width + padding; - - if (isHiddenYAxis(index)) { - yAxisWidth = yAxisWidth - yLabelCoord.width - padding; - } - } else { - yAxisWidth = yAxisWidth + (floating || !w.config.yaxis[index].show ? 0 : 5); - } - }); - w.globals.yTitleCoords.map(function (yTitleCoord, index) { - var floating = w.config.yaxis[index].floating; - padding = parseInt(w.config.yaxis[index].title.style.fontSize); - - if (yTitleCoord.width > 0 && !floating) { - yAxisWidth = yAxisWidth + yTitleCoord.width + padding; - - if (isHiddenYAxis(index)) { - yAxisWidth = yAxisWidth - yTitleCoord.width - padding; - } - } else { - yAxisWidth = yAxisWidth + (floating || !w.config.yaxis[index].show ? 0 : 5); - } - }); - return yAxisWidth; - } - }, { - key: "getxAxisTimeScaleLabelsCoords", - value: function getxAxisTimeScaleLabelsCoords() { - var w = this.w; - var rect; - this.timescaleLabels = w.globals.timelineLabels.slice(); - - if (w.globals.isBarHorizontal && w.config.xaxis.type === 'datetime') { - this.timescaleLabels = w.globals.invertedTimelineLabels.slice(); - } - - var labels = this.timescaleLabels.map(function (label) { - return label.value; - }); // get the longest string from the labels array and also apply label formatter to it - - var val = labels.reduce(function (a, b) { - // if undefined, maybe user didn't pass the datetime(x) values - if (typeof a === 'undefined') { - console.error('You have possibly supplied invalid Date format. Please supply a valid JavaScript Date'); - return 0; - } else { - return a.length > b.length ? a : b; - } - }, 0); - var graphics = new Graphics(this.ctx); - rect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize); - var totalWidthRotated = rect.width * 1.05 * labels.length; - - if (totalWidthRotated > w.globals.gridWidth && w.config.xaxis.labels.rotate !== 0) { - w.globals.overlappingXLabels = true; - } - - return rect; - } - /** - * Get X Axis Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getxAxisLabelsCoords", - value: function getxAxisLabelsCoords() { - var w = this.w; - var xaxisLabels = w.globals.labels.slice(); - var rect; - - if (w.globals.timelineLabels.length > 0) { - var coords = this.getxAxisTimeScaleLabelsCoords(); - rect = { - width: coords.width, - height: coords.height - }; - } else { - var lgWidthForSideLegends = w.config.legend.position === 'left' && w.config.legend.position === 'right' && !w.config.legend.floating ? this.lgRect.width : 0; // get the longest string from the labels array and also apply label formatter - - var xlbFormatter = w.globals.xLabelFormatter; // prevent changing xaxisLabels to avoid issues in multi-yaxies - fix #522 - - var val = xaxisLabels.reduce(function (a, b) { - return a.length > b.length ? a : b; - }, 0); // the labels gets changed for bar charts - - if (w.globals.isBarHorizontal) { - val = w.globals.yAxisScale[0].result.reduce(function (a, b) { - return a.length > b.length ? a : b; - }, 0); - } - - var xFormat = new Formatters(this.ctx); - val = xFormat.xLabelFormat(xlbFormatter, val); - var graphics = new Graphics(this.ctx); - var xLabelrect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize); - rect = { - width: xLabelrect.width, - height: xLabelrect.height - }; - - if (rect.width * xaxisLabels.length > w.globals.svgWidth - lgWidthForSideLegends - this.yAxisWidth && w.config.xaxis.labels.rotate !== 0) { - if (!w.globals.isBarHorizontal) { - w.globals.rotateXLabels = true; - xLabelrect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize, w.config.xaxis.labels.style.fontFamily, "rotate(".concat(w.config.xaxis.labels.rotate, " 0 0)"), false); - rect.height = xLabelrect.height / 1.66; - } - } else { - w.globals.rotateXLabels = false; - } - } - - if (!w.config.xaxis.labels.show) { - rect = { - width: 0, - height: 0 - }; - } - - return { - width: rect.width, - height: rect.height - }; - } - /** - * Get Y Axis Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getyAxisLabelsCoords", - value: function getyAxisLabelsCoords() { - var _this2 = this; - - var w = this.w; - var width = 0; - var height = 0; - var ret = []; - var labelPad = 10; - w.config.yaxis.map(function (yaxe, index) { - if (yaxe.show && yaxe.labels.show && w.globals.yAxisScale[index].result.length) { - var lbFormatter = w.globals.yLabelFormatters[index]; // the second parameter -1 is the index of tick which user can use in the formatter - - var val = lbFormatter(w.globals.yAxisScale[index].niceMax, -1); // if user has specified a custom formatter, and the result is null or empty, we need to discard the formatter and take the value as it is. - - if (typeof val === 'undefined' || val.length === 0) { - val = w.globals.yAxisScale[index].niceMax; - } - - if (w.globals.isBarHorizontal) { - labelPad = 0; - var barYaxisLabels = w.globals.labels.slice(); // get the longest string from the labels array and also apply label formatter to it - - val = barYaxisLabels.reduce(function (a, b) { - return a.length > b.length ? a : b; - }, 0); - val = lbFormatter(val, -1); - } - - var graphics = new Graphics(_this2.ctx); - var rect = graphics.getTextRects(val, yaxe.labels.style.fontSize); - ret.push({ - width: rect.width + labelPad, - height: rect.height - }); - } else { - ret.push({ - width: width, - height: height - }); - } - }); - return ret; - } - /** - * Get X Axis Title Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getxAxisTitleCoords", - value: function getxAxisTitleCoords() { - var w = this.w; - var width = 0; - var height = 0; - - if (w.config.xaxis.title.text !== undefined) { - var graphics = new Graphics(this.ctx); - var rect = graphics.getTextRects(w.config.xaxis.title.text, w.config.xaxis.title.style.fontSize); - width = rect.width; - height = rect.height; - } - - return { - width: width, - height: height - }; - } - /** - * Get Y Axis Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getyAxisTitleCoords", - value: function getyAxisTitleCoords() { - var _this3 = this; - - var w = this.w; - var ret = []; - w.config.yaxis.map(function (yaxe, index) { - if (yaxe.show && yaxe.title.text !== undefined) { - var graphics = new Graphics(_this3.ctx); - var rect = graphics.getTextRects(yaxe.title.text, yaxe.title.style.fontSize, yaxe.title.style.fontFamily, 'rotate(-90 0 0)', false); - ret.push({ - width: rect.width, - height: rect.height - }); - } else { - ret.push({ - width: 0, - height: 0 - }); - } - }); - return ret; - } - /** - * Get Chart Title/Subtitle Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getTitleSubtitleCoords", - value: function getTitleSubtitleCoords(type) { - var w = this.w; - var width = 0; - var height = 0; - var floating = type === 'title' ? w.config.title.floating : w.config.subtitle.floating; - var el = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-text")); - - if (el !== null && !floating) { - var coord = el.getBoundingClientRect(); - width = coord.width; - height = w.globals.axisCharts ? coord.height + 5 : coord.height; - } - - return { - width: width, - height: height - }; - } - }, { - key: "getLegendsRect", - value: function getLegendsRect() { - var w = this.w; - var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); - var lgRect = Object.assign({}, Utils.getBoundingClientRect(elLegendWrap)); - - if (elLegendWrap !== null && !w.config.legend.floating && w.config.legend.show) { - this.lgRect = { - x: lgRect.x, - y: lgRect.y, - height: lgRect.height, - width: lgRect.height === 0 ? 0 : lgRect.width - }; - } else { - this.lgRect = { - x: 0, - y: 0, - height: 0, - width: 0 - }; - } - - return this.lgRect; - } - }]); - - return Dimensions; -}(); - -/** - * ApexCharts TimeScale Class for generating time ticks for x-axis. - * - * @module TimeScale - **/ - -var TimeScale = -/*#__PURE__*/ -function () { - function TimeScale(ctx) { - _classCallCheck(this, TimeScale); - - this.ctx = ctx; - this.w = ctx.w; - this.timeScaleArray = []; - } - - _createClass(TimeScale, [{ - key: "calculateTimeScaleTicks", - value: function calculateTimeScaleTicks(minX, maxX) { - var _this = this; - - var w = this.w; // null check when no series to show - - if (w.globals.allSeriesCollapsed) { - w.globals.labels = []; - w.globals.timelineLabels = []; - return []; - } - - var dt = new DateTime(this.ctx); - var daysDiff = (maxX - minX) / (1000 * 60 * 60 * 24); - this.determineInterval(daysDiff); - w.globals.disableZoomIn = false; - w.globals.disableZoomOut = false; - - if (daysDiff < 0.005) { - w.globals.disableZoomIn = true; - } else if (daysDiff > 50000) { - w.globals.disableZoomOut = true; - } - - var timeIntervals = dt.getTimeUnitsfromTimestamp(minX, maxX); - var daysWidthOnXAxis = w.globals.gridWidth / daysDiff; - var hoursWidthOnXAxis = daysWidthOnXAxis / 24; - var minutesWidthOnXAxis = hoursWidthOnXAxis / 60; - var numberOfHours = Math.floor(daysDiff * 24); - var numberOfMinutes = Math.floor(daysDiff * 24 * 60); - var numberOfDays = Math.floor(daysDiff); - var numberOfMonths = Math.floor(daysDiff / 30); - var numberOfYears = Math.floor(daysDiff / 365); - var firstVal = { - minMinute: timeIntervals.minMinute, - minHour: timeIntervals.minHour, - minDate: timeIntervals.minDate, - minMonth: timeIntervals.minMonth, - minYear: timeIntervals.minYear - }; - var currentMinute = firstVal.minMinute; - var currentHour = firstVal.minHour; - var currentMonthDate = firstVal.minDate; - var currentDate = firstVal.minDate; - var currentMonth = firstVal.minMonth; - var currentYear = firstVal.minYear; - var params = { - firstVal: firstVal, - currentMinute: currentMinute, - currentHour: currentHour, - currentMonthDate: currentMonthDate, - currentDate: currentDate, - currentMonth: currentMonth, - currentYear: currentYear, - daysWidthOnXAxis: daysWidthOnXAxis, - hoursWidthOnXAxis: hoursWidthOnXAxis, - minutesWidthOnXAxis: minutesWidthOnXAxis, - numberOfMinutes: numberOfMinutes, - numberOfHours: numberOfHours, - numberOfDays: numberOfDays, - numberOfMonths: numberOfMonths, - numberOfYears: numberOfYears - }; - - switch (this.tickInterval) { - case 'years': - { - this.generateYearScale(params); - break; - } - - case 'months': - case 'half_year': - { - this.generateMonthScale(params); - break; - } - - case 'months_days': - case 'months_fortnight': - case 'days': - case 'week_days': - { - this.generateDayScale(params); - break; - } - - case 'hours': - { - this.generateHourScale(params); - break; - } - - case 'minutes': - this.generateMinuteScale(params); - break; - } // first, we will adjust the month values index - // as in the upper function, it is starting from 0 - // we will start them from 1 - - - var adjustedMonthInTimeScaleArray = this.timeScaleArray.map(function (ts) { - var defaultReturn = { - position: ts.position, - unit: ts.unit, - year: ts.year, - day: ts.day ? ts.day : 1, - hour: ts.hour ? ts.hour : 0, - month: ts.month + 1 - }; - - if (ts.unit === 'month') { - return _objectSpread({}, defaultReturn, { - value: ts.value + 1 - }); - } else if (ts.unit === 'day' || ts.unit === 'hour') { - return _objectSpread({}, defaultReturn, { - value: ts.value - }); - } else if (ts.unit === 'minute') { - return _objectSpread({}, defaultReturn, { - value: ts.value, - minute: ts.value - }); - } - - return ts; - }); - var filteredTimeScale = adjustedMonthInTimeScaleArray.filter(function (ts) { - var modulo = 1; - var ticks = Math.ceil(w.globals.gridWidth / 120); - var value = ts.value; - - if (w.config.xaxis.tickAmount !== undefined) { - ticks = w.config.xaxis.tickAmount; - } - - if (adjustedMonthInTimeScaleArray.length > ticks) { - modulo = Math.floor(adjustedMonthInTimeScaleArray.length / ticks); - } - - var shouldNotSkipUnit = false; // there is a big change in unit i.e days to months - - var shouldNotPrint = false; // should skip these values - - switch (_this.tickInterval) { - case 'half_year': - modulo = 7; - - if (ts.unit === 'year') { - shouldNotSkipUnit = true; - } - - break; - - case 'months': - modulo = 1; - - if (ts.unit === 'year') { - shouldNotSkipUnit = true; - } - - break; - - case 'months_fortnight': - modulo = 15; - - if (ts.unit === 'year' || ts.unit === 'month') { - shouldNotSkipUnit = true; - } - - if (value === 30) { - shouldNotPrint = true; - } - - break; - - case 'months_days': - modulo = 10; - - if (ts.unit === 'month') { - shouldNotSkipUnit = true; - } - - if (value === 30) { - shouldNotPrint = true; - } - - break; - - case 'week_days': - modulo = 8; - - if (ts.unit === 'month') { - shouldNotSkipUnit = true; - } - - break; - - case 'days': - modulo = 1; - - if (ts.unit === 'month') { - shouldNotSkipUnit = true; - } - - break; - - case 'hours': - if (ts.unit === 'day') { - shouldNotSkipUnit = true; - } - - break; - - case 'minutes': - if (value % 5 !== 0) { - shouldNotPrint = true; - } - - break; - } - - if (_this.tickInterval === 'minutes' || _this.tickInterval === 'hours') { - if (!shouldNotPrint) { - return true; - } - } else { - if ((value % modulo === 0 || shouldNotSkipUnit) && !shouldNotPrint) { - return true; - } - } - }); - return filteredTimeScale; - } - }, { - key: "recalcDimensionsBasedOnFormat", - value: function recalcDimensionsBasedOnFormat(filteredTimeScale, inverted) { - var w = this.w; - var reformattedTimescaleArray = this.formatDates(filteredTimeScale); - var removedOverlappingTS = this.removeOverlappingTS(reformattedTimescaleArray); - - if (!inverted) { - w.globals.timelineLabels = removedOverlappingTS.slice(); - } else { - w.globals.invertedTimelineLabels = removedOverlappingTS.slice(); - } // at this stage, we need to re-calculate coords of the grid as timeline labels may have altered the xaxis labels coords - // The reason we can't do this prior to this stage is because timeline labels depends on gridWidth, and as the ticks are calculated based on available gridWidth, there can be unknown number of ticks generated for different minX and maxX - // Dependency on Dimensions(), need to refactor correctly - // TODO - find an alternate way to avoid calling this Heavy method twice - - - var dimensions = new Dimensions(this.ctx); - dimensions.plotCoords(); - } - }, { - key: "determineInterval", - value: function determineInterval(daysDiff) { - switch (true) { - case daysDiff > 1825: - // difference is more than 5 years - this.tickInterval = 'years'; - break; - - case daysDiff > 800 && daysDiff <= 1825: - this.tickInterval = 'half_year'; - break; - - case daysDiff > 180 && daysDiff <= 800: - this.tickInterval = 'months'; - break; - - case daysDiff > 90 && daysDiff <= 180: - this.tickInterval = 'months_fortnight'; - break; - - case daysDiff > 60 && daysDiff <= 90: - this.tickInterval = 'months_days'; - break; - - case daysDiff > 30 && daysDiff <= 60: - this.tickInterval = 'week_days'; - break; - - case daysDiff > 2 && daysDiff <= 30: - this.tickInterval = 'days'; - break; - - case daysDiff > 0.1 && daysDiff <= 2: - // less than 2 days - this.tickInterval = 'hours'; - break; - - case daysDiff < 0.1: - this.tickInterval = 'minutes'; - break; - - default: - this.tickInterval = 'days'; - break; - } - } - }, { - key: "generateYearScale", - value: function generateYearScale(params) { - var firstVal = params.firstVal, - currentMonth = params.currentMonth, - currentYear = params.currentYear, - daysWidthOnXAxis = params.daysWidthOnXAxis, - numberOfYears = params.numberOfYears; - var firstTickValue = firstVal.minYear; - var firstTickPosition = 0; - var dt = new DateTime(this.ctx); - var unit = 'year'; - - if (firstVal.minDate > 1 && firstVal.minMonth > 0) { - var remainingDays = dt.determineRemainingDaysOfYear(firstVal.minYear, firstVal.minMonth, firstVal.minDate); // remainingDaysofFirstMonth is used to reacht the 2nd tick position - - var remainingDaysOfFirstYear = dt.determineDaysOfYear(firstVal.minYear) - remainingDays + 1; // calculate the first tick position - - firstTickPosition = remainingDaysOfFirstYear * daysWidthOnXAxis; - firstTickValue = firstVal.minYear + 1; // push the first tick in the array - - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - year: firstTickValue, - month: Utils.monthMod(currentMonth + 1) - }); - } else if (firstVal.minDate === 1 && firstVal.minMonth === 0) { - // push the first tick in the array - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - year: currentYear, - month: Utils.monthMod(currentMonth + 1) - }); - } - - var year = firstTickValue; - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0; i < numberOfYears; i++) { - year++; - pos = dt.determineDaysOfYear(year - 1) * daysWidthOnXAxis + pos; - this.timeScaleArray.push({ - position: pos, - value: year, - unit: unit, - year: year, - month: 1 - }); - } - } - }, { - key: "generateMonthScale", - value: function generateMonthScale(params) { - var firstVal = params.firstVal, - currentMonthDate = params.currentMonthDate, - currentMonth = params.currentMonth, - currentYear = params.currentYear, - daysWidthOnXAxis = params.daysWidthOnXAxis, - numberOfMonths = params.numberOfMonths; - var firstTickValue = currentMonth; - var firstTickPosition = 0; - var dt = new DateTime(this.ctx); - var unit = 'month'; - var yrCounter = 0; - - if (firstVal.minDate > 1) { - // remainingDaysofFirstMonth is used to reacht the 2nd tick position - var remainingDaysOfFirstMonth = dt.determineDaysOfMonths(currentMonth + 1, firstVal.minYear) - currentMonthDate + 1; // calculate the first tick position - - firstTickPosition = remainingDaysOfFirstMonth * daysWidthOnXAxis; - firstTickValue = Utils.monthMod(currentMonth + 1); - var year = currentYear + yrCounter; - - var _month = Utils.monthMod(firstTickValue); - - var value = firstTickValue; // it's Jan, so update the year - - if (firstTickValue === 0) { - unit = 'year'; - value = year; - _month = 1; - yrCounter += 1; - year = year + yrCounter; - } // push the first tick in the array - - - this.timeScaleArray.push({ - position: firstTickPosition, - value: value, - unit: unit, - year: year, - month: _month - }); - } else { - // push the first tick in the array - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - year: currentYear, - month: Utils.monthMod(currentMonth) - }); - } - - var month = firstTickValue + 1; - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0, j = 1; i < numberOfMonths; i++, j++) { - month = Utils.monthMod(month); - - if (month === 0) { - unit = 'year'; - yrCounter += 1; - } else { - unit = 'month'; - } - - var _year = currentYear + Math.floor(month / 12) + yrCounter; - - pos = dt.determineDaysOfMonths(month, _year) * daysWidthOnXAxis + pos; - var monthVal = month === 0 ? _year : month; - this.timeScaleArray.push({ - position: pos, - value: monthVal, - unit: unit, - year: _year, - month: month === 0 ? 1 : month - }); - month++; - } - } - }, { - key: "generateDayScale", - value: function generateDayScale(params) { - var firstVal = params.firstVal, - currentMonth = params.currentMonth, - currentYear = params.currentYear, - hoursWidthOnXAxis = params.hoursWidthOnXAxis, - numberOfDays = params.numberOfDays; - var dt = new DateTime(this.ctx); - var unit = 'day'; - var remainingHours = 24 - firstVal.minHour; - var yrCounter = 0; // calculate the first tick position - - var firstTickPosition = remainingHours * hoursWidthOnXAxis; - var firstTickValue = firstVal.minDate + 1; - var val = firstTickValue; - - var changeMonth = function changeMonth(dateVal, month, year) { - var monthdays = dt.determineDaysOfMonths(month + 1, year); - - if (dateVal > monthdays) { - month = month + 1; - date = 1; - unit = 'month'; - val = month; - return month; - } - - return month; - }; - - var date = firstTickValue; - var month = changeMonth(date, currentMonth, currentYear); // push the first tick in the array - - this.timeScaleArray.push({ - position: firstTickPosition, - value: val, - unit: unit, - year: currentYear, - month: Utils.monthMod(month), - day: date - }); - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0; i < numberOfDays; i++) { - date += 1; - unit = 'day'; - month = changeMonth(date, month, currentYear + Math.floor(month / 12) + yrCounter); - var year = currentYear + Math.floor(month / 12) + yrCounter; - pos = 24 * hoursWidthOnXAxis + pos; - - var _val = date === 1 ? Utils.monthMod(month) : date; - - this.timeScaleArray.push({ - position: pos, - value: _val, - unit: unit, - year: year, - month: Utils.monthMod(month), - day: _val - }); - } - } - }, { - key: "generateHourScale", - value: function generateHourScale(params) { - var firstVal = params.firstVal, - currentDate = params.currentDate, - currentMonth = params.currentMonth, - currentYear = params.currentYear, - minutesWidthOnXAxis = params.minutesWidthOnXAxis, - numberOfHours = params.numberOfHours; - var dt = new DateTime(this.ctx); - var yrCounter = 0; - var unit = 'hour'; - - var changeDate = function changeDate(dateVal, month) { - var monthdays = dt.determineDaysOfMonths(month + 1, currentYear); - - if (dateVal > monthdays) { - date = 1; - month = month + 1; - } - - return { - month: month, - date: date - }; - }; - - var changeMonth = function changeMonth(dateVal, month) { - var monthdays = dt.determineDaysOfMonths(month + 1, currentYear); - - if (dateVal > monthdays) { - month = month + 1; - return month; - } - - return month; - }; - - var remainingMins = 60 - firstVal.minMinute; - var firstTickPosition = remainingMins * minutesWidthOnXAxis; - var firstTickValue = firstVal.minHour + 1; - var hour = firstTickValue + 1; - - if (remainingMins === 60) { - firstTickPosition = 0; - firstTickValue = firstVal.minHour; - hour = firstTickValue + 1; - } - - var date = currentDate; - var month = changeMonth(date, currentMonth); // push the first tick in the array - - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - day: date, - hour: hour, - year: currentYear, - month: Utils.monthMod(month) - }); - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0; i < numberOfHours; i++) { - unit = 'hour'; - - if (hour >= 24) { - hour = 0; - date += 1; - unit = 'day'; - var checkNextMonth = changeDate(date, month); - month = checkNextMonth.month; - month = changeMonth(date, month); - } - - var year = currentYear + Math.floor(month / 12) + yrCounter; - pos = hour === 0 && i === 0 ? remainingMins * minutesWidthOnXAxis : 60 * minutesWidthOnXAxis + pos; - var val = hour === 0 ? date : hour; - this.timeScaleArray.push({ - position: pos, - value: val, - unit: unit, - hour: hour, - day: date, - year: year, - month: Utils.monthMod(month) - }); - hour++; - } - } - }, { - key: "generateMinuteScale", - value: function generateMinuteScale(params) { - var firstVal = params.firstVal, - currentMinute = params.currentMinute, - currentHour = params.currentHour, - currentDate = params.currentDate, - currentMonth = params.currentMonth, - currentYear = params.currentYear, - minutesWidthOnXAxis = params.minutesWidthOnXAxis, - numberOfMinutes = params.numberOfMinutes; - var yrCounter = 0; - var unit = 'minute'; - var remainingMins = currentMinute - firstVal.minMinute; - var firstTickPosition = minutesWidthOnXAxis - remainingMins; - var firstTickValue = firstVal.minMinute + 1; - var minute = firstTickValue + 1; - var date = currentDate; - var month = currentMonth; - var year = currentYear; - var hour = currentHour; // push the first tick in the array - - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - day: date, - hour: hour, - minute: minute, - year: year, - month: Utils.monthMod(month) - }); - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0; i < numberOfMinutes; i++) { - if (minute >= 60) { - minute = 0; - hour += 1; - - if (hour === 24) { - hour = 0; - } - } - - var _year2 = currentYear + Math.floor(month / 12) + yrCounter; - - pos = minutesWidthOnXAxis + pos; - var val = minute; - this.timeScaleArray.push({ - position: pos, - value: val, - unit: unit, - hour: hour, - minute: minute, - day: date, - year: _year2, - month: Utils.monthMod(month) - }); - minute++; - } - } - }, { - key: "createRawDateString", - value: function createRawDateString(ts, value) { - var raw = ts.year; - raw += '-' + ('0' + ts.month.toString()).slice(-2); // unit is day - - if (ts.unit === 'day') { - raw += ts.unit === 'day' ? '-' + ('0' + value).slice(-2) : '-01'; - } else { - raw += '-' + ('0' + (ts.day ? ts.day : '1')).slice(-2); - } // unit is hour - - - if (ts.unit === 'hour') { - raw += ts.unit === 'hour' ? 'T' + ('0' + value).slice(-2) : 'T00'; - } else { - raw += 'T' + ('0' + (ts.hour ? ts.hour : '0')).slice(-2); - } // unit is minute - - - raw += ts.unit === 'minute' ? ':' + ('0' + value).slice(-2) + ':00.000Z' : ':00:00.000Z'; - return raw; - } - }, { - key: "formatDates", - value: function formatDates(filteredTimeScale) { - var _this2 = this; - - var w = this.w; - var reformattedTimescaleArray = filteredTimeScale.map(function (ts) { - var value = ts.value.toString(); - var dt = new DateTime(_this2.ctx); - - var raw = _this2.createRawDateString(ts, value); // parse the whole ISO datestring - - - var dateString = new Date(Date.parse(raw)); - - if (w.config.xaxis.labels.format === undefined) { - var customFormat = 'dd MMM'; - var dtFormatter = w.config.xaxis.labels.datetimeFormatter; - if (ts.unit === 'year') customFormat = dtFormatter.year; - if (ts.unit === 'month') customFormat = dtFormatter.month; - if (ts.unit === 'day') customFormat = dtFormatter.day; - if (ts.unit === 'hour') customFormat = dtFormatter.hour; - if (ts.unit === 'minute') customFormat = dtFormatter.minute; - value = dt.formatDate(dateString, customFormat, true, false); - } else { - value = dt.formatDate(dateString, w.config.xaxis.labels.format); - } - - return { - dateString: raw, - position: ts.position, - value: value, - unit: ts.unit, - year: ts.year, - month: ts.month - }; - }); - return reformattedTimescaleArray; - } - }, { - key: "removeOverlappingTS", - value: function removeOverlappingTS(arr) { - var _this3 = this; - - var graphics = new Graphics(this.ctx); - var lastDrawnIndex = 0; - var filteredArray = arr.map(function (item, index) { - if (index > 0 && _this3.w.config.xaxis.labels.hideOverlappingLabels) { - var prevLabelWidth = graphics.getTextRects(arr[lastDrawnIndex].value).width; - var prevPos = arr[lastDrawnIndex].position; - var pos = item.position; - - if (pos > prevPos + prevLabelWidth + 10) { - lastDrawnIndex = index; - return item; - } else { - return null; - } - } else { - return item; - } - }); - filteredArray = filteredArray.filter(function (f) { - return f !== null; - }); - return filteredArray; - } - }]); - - return TimeScale; -}(); - -/** - * ApexCharts Core Class responsible for major calculations and creating elements. - * - * @module Core - **/ - -var Core = -/*#__PURE__*/ -function () { - function Core(el, ctx) { - _classCallCheck(this, Core); - - this.ctx = ctx; - this.w = ctx.w; - this.el = el; - this.coreUtils = new CoreUtils(this.ctx); - this.twoDSeries = []; - this.threeDSeries = []; - this.twoDSeriesX = []; - } // get data and store into appropriate vars - - - _createClass(Core, [{ - key: "setupElements", - value: function setupElements() { - var gl = this.w.globals; - var cnf = this.w.config; // const graphics = new Graphics(this.ctx) - - var ct = cnf.chart.type; - var axisChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', // 'rangeArea', - 'candlestick', 'radar', 'scatter', 'bubble', 'heatmap']; - var xyChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', // 'rangeArea', - 'candlestick', 'scatter', 'bubble']; - gl.axisCharts = axisChartsArrTypes.indexOf(ct) > -1; - gl.xyCharts = xyChartsArrTypes.indexOf(ct) > -1; - gl.isBarHorizontal = (cnf.chart.type === 'bar' || cnf.chart.type === 'rangeBar') && cnf.plotOptions.bar.horizontal; - gl.chartClass = '.apexcharts' + gl.cuid; - gl.dom.baseEl = this.el; - gl.dom.elWrap = document.createElement('div'); - Graphics.setAttrs(gl.dom.elWrap, { - id: gl.chartClass.substring(1), - class: 'apexcharts-canvas ' + gl.chartClass.substring(1) - }); - this.el.appendChild(gl.dom.elWrap); - gl.dom.Paper = new window.SVG.Doc(gl.dom.elWrap); - gl.dom.Paper.attr({ - class: 'apexcharts-svg', - 'xmlns:data': 'ApexChartsNS', - transform: "translate(".concat(cnf.chart.offsetX, ", ").concat(cnf.chart.offsetY, ")") - }); - gl.dom.Paper.node.style.background = cnf.chart.background; - this.setSVGDimensions(); - gl.dom.elGraphical = gl.dom.Paper.group().attr({ - class: 'apexcharts-inner apexcharts-graphical' - }); - gl.dom.elDefs = gl.dom.Paper.defs(); - gl.dom.elLegendWrap = document.createElement('div'); - gl.dom.elLegendWrap.classList.add('apexcharts-legend'); - gl.dom.elWrap.appendChild(gl.dom.elLegendWrap); // gl.dom.Paper.add(gl.dom.elLegendWrap) - - gl.dom.Paper.add(gl.dom.elGraphical); - gl.dom.elGraphical.add(gl.dom.elDefs); - } - }, { - key: "plotChartType", - value: function plotChartType(ser, xyRatios) { - var w = this.w; - var cnf = w.config; - var gl = w.globals; - var lineSeries = { - series: [], - i: [] - }; - var areaSeries = { - series: [], - i: [] - }; - var scatterSeries = { - series: [], - i: [] - }; - var columnSeries = { - series: [], - i: [] - }; - var candlestickSeries = { - series: [], - i: [] - }; - gl.series.map(function (series, st) { - // if user has specified a particular type for particular series - if (typeof ser[st].type !== 'undefined') { - if (ser[st].type === 'column' || ser[st].type === 'bar') { - w.config.plotOptions.bar.horizontal = false; // horizontal bars not supported in mixed charts, hence forcefully set to false - - columnSeries.series.push(series); - columnSeries.i.push(st); - } else if (ser[st].type === 'area') { - areaSeries.series.push(series); - areaSeries.i.push(st); - } else if (ser[st].type === 'line') { - lineSeries.series.push(series); - lineSeries.i.push(st); - } else if (ser[st].type === 'scatter') { - scatterSeries.series.push(series); - scatterSeries.i.push(st); - } else if (ser[st].type === 'bubble') ; else if (ser[st].type === 'candlestick') { - candlestickSeries.series.push(series); - candlestickSeries.i.push(st); - } else { - // user has specified type, but it is not valid (other than line/area/column) - console.warn('You have specified an unrecognized chart type. Available types for this propery are line/area/column/bar/scatter/bubble'); - } - - gl.comboCharts = true; - } else { - lineSeries.series.push(series); - lineSeries.i.push(st); - } - }); - var line = new Line(this.ctx, xyRatios); - var candlestick = new CandleStick(this.ctx, xyRatios); - var pie = new Pie(this.ctx); - var radialBar = new Radial(this.ctx); - var rangeBar = new RangeBar(this.ctx, xyRatios); - var radar = new Radar(this.ctx); - var elGraph = []; - - if (gl.comboCharts) { - if (areaSeries.series.length > 0) { - elGraph.push(line.draw(areaSeries.series, 'area', areaSeries.i)); - } - - if (columnSeries.series.length > 0) { - if (w.config.chart.stacked) { - var barStacked = new BarStacked(this.ctx, xyRatios); - elGraph.push(barStacked.draw(columnSeries.series, columnSeries.i)); - } else { - var bar = new Bar(this.ctx, xyRatios); - elGraph.push(bar.draw(columnSeries.series, columnSeries.i)); - } - } - - if (lineSeries.series.length > 0) { - elGraph.push(line.draw(lineSeries.series, 'line', lineSeries.i)); - } - - if (candlestickSeries.series.length > 0) { - elGraph.push(candlestick.draw(candlestickSeries.series, candlestickSeries.i)); - } - - if (scatterSeries.series.length > 0) { - var scatterLine = new Line(this.ctx, xyRatios, true); - elGraph.push(scatterLine.draw(scatterSeries.series, 'scatter', scatterSeries.i)); - } // TODO: allow bubble series in a combo chart - // if (bubbleSeries.series.length > 0) { - // const bubbleLine = new Line(this.ctx, xyRatios, true) - // elGraph.push( - // bubbleLine.draw(bubbleSeries.series, 'bubble', bubbleSeries.i) - // ) - // } - - } else { - switch (cnf.chart.type) { - case 'line': - elGraph = line.draw(gl.series, 'line'); - break; - - case 'area': - elGraph = line.draw(gl.series, 'area'); - break; - - case 'bar': - if (cnf.chart.stacked) { - var _barStacked = new BarStacked(this.ctx, xyRatios); - - elGraph = _barStacked.draw(gl.series); - } else { - var _bar = new Bar(this.ctx, xyRatios); - - elGraph = _bar.draw(gl.series); - } - - break; - - case 'candlestick': - var candleStick = new CandleStick(this.ctx, xyRatios); - elGraph = candleStick.draw(gl.series); - break; - - case 'rangeBar': - elGraph = rangeBar.draw(gl.series); - break; - - case 'heatmap': - var heatmap = new HeatMap(this.ctx, xyRatios); - elGraph = heatmap.draw(gl.series); - break; - - case 'pie': - case 'donut': - elGraph = pie.draw(gl.series); - break; - - case 'radialBar': - elGraph = radialBar.draw(gl.series); - break; - - case 'radar': - elGraph = radar.draw(gl.series); - break; - - default: - elGraph = line.draw(gl.series); - } - } - - return elGraph; - } - }, { - key: "setSVGDimensions", - value: function setSVGDimensions() { - var gl = this.w.globals; - var cnf = this.w.config; - gl.svgWidth = cnf.chart.width; - gl.svgHeight = cnf.chart.height; - var elDim = Utils.getDimensions(this.el); - var widthUnit = cnf.chart.width.toString().split(/[0-9]+/g).pop(); - - if (widthUnit === '%') { - if (Utils.isNumber(elDim[0])) { - if (elDim[0].width === 0) { - elDim = Utils.getDimensions(this.el.parentNode); - } - - gl.svgWidth = elDim[0] * parseInt(cnf.chart.width) / 100; - } - } else if (widthUnit === 'px' || widthUnit === '') { - gl.svgWidth = parseInt(cnf.chart.width); - } - - if (gl.svgHeight !== 'auto' && gl.svgHeight !== '') { - var heightUnit = cnf.chart.height.toString().split(/[0-9]+/g).pop(); - - if (heightUnit === '%') { - var elParentDim = Utils.getDimensions(this.el.parentNode); - gl.svgHeight = elParentDim[1] * parseInt(cnf.chart.height) / 100; - } else { - gl.svgHeight = parseInt(cnf.chart.height); - } - } else { - if (gl.axisCharts) { - gl.svgHeight = gl.svgWidth / 1.61; - } else { - gl.svgHeight = gl.svgWidth; - } - } - - Graphics.setAttrs(gl.dom.Paper.node, { - width: gl.svgWidth, - height: gl.svgHeight - }); // gl.dom.Paper.node.parentNode.parentNode.style.minWidth = gl.svgWidth + "px"; - - var offsetY = cnf.chart.sparkline.enabled ? 0 : gl.axisCharts ? cnf.chart.parentHeightOffset : 0; - gl.dom.Paper.node.parentNode.parentNode.style.minHeight = gl.svgHeight + offsetY + 'px'; - gl.dom.elWrap.style.width = gl.svgWidth + 'px'; - gl.dom.elWrap.style.height = gl.svgHeight + 'px'; - } - }, { - key: "shiftGraphPosition", - value: function shiftGraphPosition() { - var gl = this.w.globals; - var tY = gl.translateY; - var tX = gl.translateX; - var scalingAttrs = { - transform: 'translate(' + tX + ', ' + tY + ')' - }; - Graphics.setAttrs(gl.dom.elGraphical.node, scalingAttrs); - } - /* - ** All the calculations for setting range in charts will be done here - */ - - }, { - key: "coreCalculations", - value: function coreCalculations() { - var range = new Range$1(this.ctx); - range.init(); - } - }, { - key: "resetGlobals", - value: function resetGlobals() { - var _this = this; - - var gl = this.w.globals; - gl.series = []; - gl.seriesCandleO = []; - gl.seriesCandleH = []; - gl.seriesCandleL = []; - gl.seriesCandleC = []; - gl.seriesRangeStart = []; - gl.seriesRangeEnd = []; - gl.seriesPercent = []; - gl.seriesX = []; - gl.seriesZ = []; - gl.seriesNames = []; - gl.seriesTotals = []; - gl.stackedSeriesTotals = []; - gl.labels = []; - gl.timelineLabels = []; - gl.noLabelsProvided = false; - gl.timescaleTicks = []; - gl.resizeTimer = null; - gl.selectionResizeTimer = null; - - gl.seriesXvalues = function () { - return _this.w.config.series.map(function (s) { - return []; - }); - }(); - - gl.seriesYvalues = function () { - return _this.w.config.series.map(function (s) { - return []; - }); - }(); - - gl.delayedElements = []; - gl.pointsArray = []; - gl.dataLabelsRects = []; - gl.isXNumeric = false; - gl.isDataXYZ = false; - gl.maxY = -Number.MAX_VALUE; - gl.minY = Number.MIN_VALUE; - gl.minYArr = []; - gl.maxYArr = []; - gl.maxX = -Number.MAX_VALUE; - gl.minX = Number.MAX_VALUE; - gl.initialmaxX = -Number.MAX_VALUE; - gl.initialminX = Number.MAX_VALUE; - gl.maxDate = 0; - gl.minDate = Number.MAX_VALUE; - gl.minZ = Number.MAX_VALUE; - gl.maxZ = -Number.MAX_VALUE; - gl.minXDiff = Number.MAX_VALUE; - gl.yAxisScale = []; - gl.xAxisScale = null; - gl.xAxisTicksPositions = []; - gl.yLabelsCoords = []; - gl.yTitleCoords = []; - gl.xRange = 0; - gl.yRange = []; - gl.zRange = 0; - gl.dataPoints = 0; - } - }, { - key: "isMultipleY", - value: function isMultipleY() { - // user has supplied an array in yaxis property. So, turn on multipleYAxis flag - if (this.w.config.yaxis.constructor === Array && this.w.config.yaxis.length > 1) { - // first, turn off stacking if multiple y axis - this.w.config.chart.stacked = false; - this.w.globals.isMultipleYAxis = true; - return true; - } - } - }, { - key: "excludeCollapsedSeriesInYAxis", - value: function excludeCollapsedSeriesInYAxis() { - var _this2 = this; - - var w = this.w; - w.globals.ignoreYAxisIndexes = w.globals.collapsedSeries.map(function (collapsed, i) { - if (_this2.w.globals.isMultipleYAxis) { - return collapsed.index; - } - }); - } - }, { - key: "isMultiFormat", - value: function isMultiFormat() { - return this.isFormatXY() || this.isFormat2DArray(); - } // given format is [{x, y}, {x, y}] - - }, { - key: "isFormatXY", - value: function isFormatXY() { - var series = this.w.config.series.slice(); - var sr = new Series(this.ctx); - this.activeSeriesIndex = sr.getActiveConfigSeriesIndex(); - - if (typeof series[this.activeSeriesIndex].data !== 'undefined' && series[this.activeSeriesIndex].data.length > 0 && series[this.activeSeriesIndex].data[0] !== null && typeof series[this.activeSeriesIndex].data[0].x !== 'undefined' && series[this.activeSeriesIndex].data[0] !== null) { - return true; - } - } // given format is [[x, y], [x, y]] - - }, { - key: "isFormat2DArray", - value: function isFormat2DArray() { - var series = this.w.config.series.slice(); - var sr = new Series(this.ctx); - this.activeSeriesIndex = sr.getActiveConfigSeriesIndex(); - - if (typeof series[this.activeSeriesIndex].data !== 'undefined' && series[this.activeSeriesIndex].data.length > 0 && typeof series[this.activeSeriesIndex].data[0] !== 'undefined' && series[this.activeSeriesIndex].data[0] !== null && series[this.activeSeriesIndex].data[0].constructor === Array) { - return true; - } - } - }, { - key: "handleFormat2DArray", - value: function handleFormat2DArray(ser, i) { - var cnf = this.w.config; - var gl = this.w.globals; - - for (var j = 0; j < ser[i].data.length; j++) { - if (typeof ser[i].data[j][1] !== 'undefined') { - if (Array.isArray(ser[i].data[j][1]) && ser[i].data[j][1].length === 4) { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][1][3])); - } else { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][1])); - } - - gl.dataFormatXNumeric = true; - } - - if (cnf.xaxis.type === 'datetime') { - // if timestamps are provided and xaxis type is datettime, - var ts = new Date(ser[i].data[j][0]); - ts = new Date(ts).getTime(); - this.twoDSeriesX.push(ts); - } else { - this.twoDSeriesX.push(ser[i].data[j][0]); - } - } - - for (var _j = 0; _j < ser[i].data.length; _j++) { - if (typeof ser[i].data[_j][2] !== 'undefined') { - this.threeDSeries.push(ser[i].data[_j][2]); - gl.isDataXYZ = true; - } - } - } - }, { - key: "handleFormatXY", - value: function handleFormatXY(ser, i) { - var cnf = this.w.config; - var gl = this.w.globals; - var dt = new DateTime(this.ctx); - var activeI = i; - - if (gl.collapsedSeriesIndices.indexOf(i) > -1) { - // fix #368 - activeI = this.activeSeriesIndex; - } // get series - - - for (var j = 0; j < ser[i].data.length; j++) { - if (typeof ser[i].data[j].y !== 'undefined') { - if (Array.isArray(ser[i].data[j].y)) { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y[ser[i].data[j].y.length - 1])); - } else { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y)); - } - } - } // get seriesX - - - for (var _j2 = 0; _j2 < ser[activeI].data.length; _j2++) { - var isXString = typeof ser[activeI].data[_j2].x === 'string'; - var isXDate = !!dt.isValidDate(ser[activeI].data[_j2].x.toString()); - - if (isXString || isXDate) { - // user supplied '01/01/2017' or a date string (a JS date object is not supported) - if (isXString) { - if (cnf.xaxis.type === 'datetime' && !gl.isRangeData) { - this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x)); - } else { - // a category and not a numeric x value - this.fallbackToCategory = true; - this.twoDSeriesX.push(ser[activeI].data[_j2].x); - } - } else { - if (cnf.xaxis.type === 'datetime') { - this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x.toString())); - } else { - gl.dataFormatXNumeric = true; - gl.isXNumeric = true; - this.twoDSeriesX.push(parseFloat(ser[activeI].data[_j2].x)); - } - } - } else { - // a numeric value in x property - gl.isXNumeric = true; - gl.dataFormatXNumeric = true; - this.twoDSeriesX.push(ser[activeI].data[_j2].x); - } - } - - if (ser[i].data[0] && typeof ser[i].data[0].z !== 'undefined') { - for (var t = 0; t < ser[i].data.length; t++) { - this.threeDSeries.push(ser[i].data[t].z); - } - - gl.isDataXYZ = true; - } - } - }, { - key: "handleRangeData", - value: function handleRangeData(ser, i) { - var gl = this.w.globals; - var range = {}; - - if (this.isFormat2DArray()) { - range = this.handleRangeDataFormat('array', ser, i); - } else if (this.isFormatXY()) { - range = this.handleRangeDataFormat('xy', ser, i); - } - - gl.seriesRangeStart.push(range.start); - gl.seriesRangeEnd.push(range.end); - return range; - } - }, { - key: "handleCandleStickData", - value: function handleCandleStickData(ser, i) { - var gl = this.w.globals; - var ohlc = {}; - - if (this.isFormat2DArray()) { - ohlc = this.handleCandleStickDataFormat('array', ser, i); - } else if (this.isFormatXY()) { - ohlc = this.handleCandleStickDataFormat('xy', ser, i); - } - - gl.seriesCandleO.push(ohlc.o); - gl.seriesCandleH.push(ohlc.h); - gl.seriesCandleL.push(ohlc.l); - gl.seriesCandleC.push(ohlc.c); - return ohlc; - } - }, { - key: "handleRangeDataFormat", - value: function handleRangeDataFormat(format, ser, i) { - var rangeStart = []; - var rangeEnd = []; - var err = 'Please provide [Start, End] values in valid format. Read more https://apexcharts.com/docs/series/#rangecharts'; - var serObj = new Series(this.ctx); - var activeIndex = serObj.getActiveConfigSeriesIndex(); - - if (format === 'array') { - if (ser[activeIndex].data[0][1].length !== 2) { - throw new Error(err); - } - - for (var j = 0; j < ser[i].data.length; j++) { - rangeStart.push(ser[i].data[j][1][0]); - rangeEnd.push(ser[i].data[j][1][1]); - } - } else if (format === 'xy') { - if (ser[activeIndex].data[0].y.length !== 2) { - throw new Error(err); - } - - for (var _j3 = 0; _j3 < ser[i].data.length; _j3++) { - rangeStart.push(ser[i].data[_j3].y[0]); - rangeEnd.push(ser[i].data[_j3].y[1]); - } - } - - return { - start: rangeStart, - end: rangeEnd - }; - } - }, { - key: "handleCandleStickDataFormat", - value: function handleCandleStickDataFormat(format, ser, i) { - var serO = []; - var serH = []; - var serL = []; - var serC = []; - var err = 'Please provide [Open, High, Low and Close] values in valid format. Read more https://apexcharts.com/docs/series/#candlestick'; - - if (format === 'array') { - if (ser[i].data[0][1].length !== 4) { - throw new Error(err); - } - - for (var j = 0; j < ser[i].data.length; j++) { - serO.push(ser[i].data[j][1][0]); - serH.push(ser[i].data[j][1][1]); - serL.push(ser[i].data[j][1][2]); - serC.push(ser[i].data[j][1][3]); - } - } else if (format === 'xy') { - if (ser[i].data[0].y.length !== 4) { - throw new Error(err); - } - - for (var _j4 = 0; _j4 < ser[i].data.length; _j4++) { - serO.push(ser[i].data[_j4].y[0]); - serH.push(ser[i].data[_j4].y[1]); - serL.push(ser[i].data[_j4].y[2]); - serC.push(ser[i].data[_j4].y[3]); - } - } - - return { - o: serO, - h: serH, - l: serL, - c: serC - }; - } - }, { - key: "parseDataAxisCharts", - value: function parseDataAxisCharts(ser) { - var ctx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.ctx; - var cnf = this.w.config; - var gl = this.w.globals; - var dt = new DateTime(ctx); - - for (var i = 0; i < ser.length; i++) { - this.twoDSeries = []; - this.twoDSeriesX = []; - this.threeDSeries = []; - - if (typeof ser[i].data === 'undefined') { - console.error("It is a possibility that you may have not included 'data' property in series."); - return; - } - - if (cnf.chart.type === 'rangeBar' || cnf.chart.type === 'rangeArea' || ser[i].type === 'rangeBar' || ser[i].type === 'rangeArea') { - gl.isRangeData = true; - this.handleRangeData(ser, i); - } - - if (this.isMultiFormat()) { - if (this.isFormat2DArray()) { - this.handleFormat2DArray(ser, i); - } else if (this.isFormatXY()) { - this.handleFormatXY(ser, i); - } - - if (cnf.chart.type === 'candlestick' || ser[i].type === 'candlestick') { - this.handleCandleStickData(ser, i); - } - - gl.series.push(this.twoDSeries); - gl.labels.push(this.twoDSeriesX); - gl.seriesX.push(this.twoDSeriesX); - - if (!this.fallbackToCategory) { - gl.isXNumeric = true; - } - } else { - if (cnf.xaxis.type === 'datetime') { - // user didn't supplied [{x,y}] or [[x,y]], but single array in data. - // Also labels/categories were supplied differently - gl.isXNumeric = true; - var dates = cnf.labels.length > 0 ? cnf.labels.slice() : cnf.xaxis.categories.slice(); - - for (var j = 0; j < dates.length; j++) { - if (typeof dates[j] === 'string') { - var isDate = dt.isValidDate(dates[j]); - - if (isDate) { - this.twoDSeriesX.push(dt.parseDate(dates[j])); - } else { - throw new Error('You have provided invalid Date format. Please provide a valid JavaScript Date'); - } - } - } - - gl.seriesX.push(this.twoDSeriesX); - } else if (cnf.xaxis.type === 'numeric') { - gl.isXNumeric = true; - var x = cnf.labels.length > 0 ? cnf.labels.slice() : cnf.xaxis.categories.slice(); - - if (x.length > 0) { - this.twoDSeriesX = x; - gl.seriesX.push(this.twoDSeriesX); - } - } - - gl.labels.push(this.twoDSeriesX); - var singleArray = ser[i].data.map(function (d) { - return Utils.parseNumber(d); - }); - gl.series.push(singleArray); - } - - gl.seriesZ.push(this.threeDSeries); - - if (ser[i].name !== undefined) { - gl.seriesNames.push(ser[i].name); - } else { - gl.seriesNames.push('series-' + parseInt(i + 1)); - } - } - - return this.w; - } - }, { - key: "parseDataNonAxisCharts", - value: function parseDataNonAxisCharts(ser) { - var gl = this.w.globals; - var cnf = this.w.config; - gl.series = ser.slice(); - gl.seriesNames = cnf.labels.slice(); - - for (var i = 0; i < gl.series.length; i++) { - if (gl.seriesNames[i] === undefined) { - gl.seriesNames.push('series-' + (i + 1)); - } - } - - return this.w; - } - /** User possibly set string categories in xaxis.categories or labels prop - * Or didn't set xaxis labels at all - in which case we manually do it. - * If user passed series data as [[3, 2], [4, 5]] or [{ x: 3, y: 55 }], - * this shouldn't be called - * @param {array} ser - the series which user passed to the config - */ - - }, { - key: "handleExternalLabelsData", - value: function handleExternalLabelsData(ser) { - var cnf = this.w.config; - var gl = this.w.globals; - - if (cnf.xaxis.categories.length > 0) { - // user provided labels in xaxis.category prop - gl.labels = cnf.xaxis.categories; - } else if (cnf.labels.length > 0) { - // user provided labels in labels props - gl.labels = cnf.labels.slice(); - } else if (this.fallbackToCategory) { - // user provided labels in x prop in [{ x: 3, y: 55 }] data, and those labels are already stored in gl.labels[0], so just re-arrange the gl.labels array - gl.labels = gl.labels[0]; - } else { - // user didn't provided any labels, fallback to 1-2-3-4-5 - var labelArr = []; - - if (gl.axisCharts) { - // for axis charts, we get the longest series and create labels from it - for (var i = 0; i < gl.series[gl.maxValsInArrayIndex].length; i++) { - labelArr.push(i + 1); - } // create gl.seriesX as it will be used in calculations of x positions - - - for (var _i = 0; _i < ser.length; _i++) { - gl.seriesX.push(labelArr); - } // turn on the isXNumeric flag to allow minX and maxX to function properly - - - gl.isXNumeric = true; - } // no series to pull labels from, put a 0-10 series - // possibly, user collapsed all series. Hence we can't work with above calc - - - if (labelArr.length === 0) { - labelArr = [0, 10]; - - for (var _i2 = 0; _i2 < ser.length; _i2++) { - gl.seriesX.push(labelArr); - } - } // Finally, pass the labelArr in gl.labels which will be printed on x-axis - - - gl.labels = labelArr; // Turn on this global flag to indicate no labels were provided by user - - gl.noLabelsProvided = true; - } - } // Segregate user provided data into appropriate vars - - }, { - key: "parseData", - value: function parseData(ser) { - var w = this.w; - var cnf = w.config; - var gl = w.globals; - this.excludeCollapsedSeriesInYAxis(); // If we detected string in X prop of series, we fallback to category x-axis - - this.fallbackToCategory = false; - this.resetGlobals(); - this.isMultipleY(); - - if (gl.axisCharts) { - // axisCharts includes line / area / column / scatter - this.parseDataAxisCharts(ser); - } else { - // non-axis charts are pie / donut - this.parseDataNonAxisCharts(ser); - } - - this.coreUtils.getLargestSeries(); // set Null values to 0 in all series when user hides/shows some series - - if (cnf.chart.type === 'bar' && cnf.chart.stacked) { - var series = new Series(this.ctx); - gl.series = series.setNullSeriesToZeroValues(gl.series); - } - - this.coreUtils.getSeriesTotals(); - - if (gl.axisCharts) { - this.coreUtils.getStackedSeriesTotals(); - } - - this.coreUtils.getPercentSeries(); - - if (!gl.dataFormatXNumeric && (!gl.isXNumeric || cnf.xaxis.type === 'numeric' && cnf.labels.length === 0 && cnf.xaxis.categories.length === 0)) { - // x-axis labels couldn't be detected; hence try searching every option in config - this.handleExternalLabelsData(ser); - } - } - }, { - key: "xySettings", - value: function xySettings() { - var xyRatios = null; - var w = this.w; - - if (w.globals.axisCharts) { - if (w.config.xaxis.crosshairs.position === 'back') { - var crosshairs = new Crosshairs(this.ctx); - crosshairs.drawXCrosshairs(); - } - - if (w.config.yaxis[0].crosshairs.position === 'back') { - var _crosshairs = new Crosshairs(this.ctx); - - _crosshairs.drawYCrosshairs(); - } - - xyRatios = this.coreUtils.getCalculatedRatios(); - - if (w.config.xaxis.type === 'datetime' && w.config.xaxis.labels.formatter === undefined) { - var ts = new TimeScale(this.ctx); - var formattedTimeScale; - - if (isFinite(w.globals.minX) && isFinite(w.globals.maxX) && !w.globals.isBarHorizontal) { - formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minX, w.globals.maxX); - ts.recalcDimensionsBasedOnFormat(formattedTimeScale, false); - } else if (w.globals.isBarHorizontal) { - formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minY, w.globals.maxY); - ts.recalcDimensionsBasedOnFormat(formattedTimeScale, true); - } - } - } - - return xyRatios; - } - }, { - key: "drawAxis", - value: function drawAxis(type, xyRatios) { - var gl = this.w.globals; - var cnf = this.w.config; - var xAxis = new XAxis(this.ctx); - var yAxis = new YAxis(this.ctx); - - if (gl.axisCharts && type !== 'radar') { - var elXaxis, elYaxis; - - if (gl.isBarHorizontal) { - elYaxis = yAxis.drawYaxisInversed(0); - elXaxis = xAxis.drawXaxisInversed(0); - gl.dom.elGraphical.add(elXaxis); - gl.dom.elGraphical.add(elYaxis); - } else { - elXaxis = xAxis.drawXaxis(); - gl.dom.elGraphical.add(elXaxis); - cnf.yaxis.map(function (yaxe, index) { - if (gl.ignoreYAxisIndexes.indexOf(index) === -1) { - elYaxis = yAxis.drawYaxis(index); - gl.dom.Paper.add(elYaxis); - } - }); - } - } - - cnf.yaxis.map(function (yaxe, index) { - if (gl.ignoreYAxisIndexes.indexOf(index) === -1) { - yAxis.yAxisTitleRotate(index, yaxe.opposite); - } - }); - } - }, { - key: "setupBrushHandler", - value: function setupBrushHandler() { - var _this3 = this; - - var w = this.w; // only for brush charts - - if (!w.config.chart.brush.enabled) { - return; - } // if user has not defined a custom function for selection - we handle the brush chart - // otherwise we leave it to the user to define the functionality for selection - - - if (typeof w.config.chart.events.selection !== 'function') { - var targets = w.config.chart.brush.targets || [w.config.chart.brush.target]; // retro compatibility with single target option - - targets.forEach(function (target) { - var targetChart = ApexCharts.getChartByID(target); - targetChart.w.globals.brushSource = _this3.ctx; - - var updateSourceChart = function updateSourceChart() { - _this3.ctx._updateOptions({ - chart: { - selection: { - xaxis: { - min: targetChart.w.globals.minX, - max: targetChart.w.globals.maxX - } - } - } - }, false, false); - }; - - if (typeof targetChart.w.config.chart.events.zoomed !== 'function') { - targetChart.w.config.chart.events.zoomed = function () { - updateSourceChart(); - }; - } - - if (typeof targetChart.w.config.chart.events.scrolled !== 'function') { - targetChart.w.config.chart.events.scrolled = function () { - updateSourceChart(); - }; - } - - w.config.chart.events.selection = function (chart, e) { - var yaxis = Utils.clone(w.config.yaxis); - - if (w.config.chart.brush.autoScaleYaxis) { - var scale = new Range(targetChart); - yaxis = scale.autoScaleY(targetChart, e); - } - - targetChart._updateOptions({ - xaxis: { - min: e.xaxis.min, - max: e.xaxis.max - }, - yaxis: yaxis - }, false, false, false); - }; - }); - } - } - }]); - - return Core; -}(); - -/** - * @this {Promise} - */ -function finallyConstructor(callback) { - var constructor = this.constructor; - return this.then( - function(value) { - return constructor.resolve(callback()).then(function() { - return value; - }); - }, - function(reason) { - return constructor.resolve(callback()).then(function() { - return constructor.reject(reason); - }); - } - ); -} - -// Store setTimeout reference so promise-polyfill will be unaffected by -// other code modifying setTimeout (like sinon.useFakeTimers()) -var setTimeoutFunc = setTimeout; - -function noop() {} - -// Polyfill for Function.prototype.bind -function bind(fn, thisArg) { - return function() { - fn.apply(thisArg, arguments); - }; -} - -/** - * @constructor - * @param {Function} fn - */ -function Promise$1(fn) { - if (!(this instanceof Promise$1)) - throw new TypeError('Promises must be constructed via new'); - if (typeof fn !== 'function') throw new TypeError('not a function'); - /** @type {!number} */ - this._state = 0; - /** @type {!boolean} */ - this._handled = false; - /** @type {Promise|undefined} */ - this._value = undefined; - /** @type {!Array} */ - this._deferreds = []; - - doResolve(fn, this); -} - -function handle(self, deferred) { - while (self._state === 3) { - self = self._value; - } - if (self._state === 0) { - self._deferreds.push(deferred); - return; - } - self._handled = true; - Promise$1._immediateFn(function() { - var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected; - if (cb === null) { - (self._state === 1 ? resolve : reject)(deferred.promise, self._value); - return; - } - var ret; - try { - ret = cb(self._value); - } catch (e) { - reject(deferred.promise, e); - return; - } - resolve(deferred.promise, ret); - }); -} - -function resolve(self, newValue) { - try { - // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure - if (newValue === self) - throw new TypeError('A promise cannot be resolved with itself.'); - if ( - newValue && - (typeof newValue === 'object' || typeof newValue === 'function') - ) { - var then = newValue.then; - if (newValue instanceof Promise$1) { - self._state = 3; - self._value = newValue; - finale(self); - return; - } else if (typeof then === 'function') { - doResolve(bind(then, newValue), self); - return; - } - } - self._state = 1; - self._value = newValue; - finale(self); - } catch (e) { - reject(self, e); - } -} - -function reject(self, newValue) { - self._state = 2; - self._value = newValue; - finale(self); -} - -function finale(self) { - if (self._state === 2 && self._deferreds.length === 0) { - Promise$1._immediateFn(function() { - if (!self._handled) { - Promise$1._unhandledRejectionFn(self._value); - } - }); - } - - for (var i = 0, len = self._deferreds.length; i < len; i++) { - handle(self, self._deferreds[i]); - } - self._deferreds = null; -} - -/** - * @constructor - */ -function Handler(onFulfilled, onRejected, promise) { - this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; - this.onRejected = typeof onRejected === 'function' ? onRejected : null; - this.promise = promise; -} - -/** - * Take a potentially misbehaving resolver function and make sure - * onFulfilled and onRejected are only called once. - * - * Makes no guarantees about asynchrony. - */ -function doResolve(fn, self) { - var done = false; - try { - fn( - function(value) { - if (done) return; - done = true; - resolve(self, value); - }, - function(reason) { - if (done) return; - done = true; - reject(self, reason); - } - ); - } catch (ex) { - if (done) return; - done = true; - reject(self, ex); - } -} - -Promise$1.prototype['catch'] = function(onRejected) { - return this.then(null, onRejected); -}; - -Promise$1.prototype.then = function(onFulfilled, onRejected) { - // @ts-ignore - var prom = new this.constructor(noop); - - handle(this, new Handler(onFulfilled, onRejected, prom)); - return prom; -}; - -Promise$1.prototype['finally'] = finallyConstructor; - -Promise$1.all = function(arr) { - return new Promise$1(function(resolve, reject) { - if (!arr || typeof arr.length === 'undefined') - throw new TypeError('Promise.all accepts an array'); - var args = Array.prototype.slice.call(arr); - if (args.length === 0) return resolve([]); - var remaining = args.length; - - function res(i, val) { - try { - if (val && (typeof val === 'object' || typeof val === 'function')) { - var then = val.then; - if (typeof then === 'function') { - then.call( - val, - function(val) { - res(i, val); - }, - reject - ); - return; - } - } - args[i] = val; - if (--remaining === 0) { - resolve(args); - } - } catch (ex) { - reject(ex); - } - } - - for (var i = 0; i < args.length; i++) { - res(i, args[i]); - } - }); -}; - -Promise$1.resolve = function(value) { - if (value && typeof value === 'object' && value.constructor === Promise$1) { - return value; - } - - return new Promise$1(function(resolve) { - resolve(value); - }); -}; - -Promise$1.reject = function(value) { - return new Promise$1(function(resolve, reject) { - reject(value); - }); -}; - -Promise$1.race = function(values) { - return new Promise$1(function(resolve, reject) { - for (var i = 0, len = values.length; i < len; i++) { - values[i].then(resolve, reject); - } - }); -}; - -// Use polyfill for setImmediate for performance gains -Promise$1._immediateFn = - (typeof setImmediate === 'function' && - function(fn) { - setImmediate(fn); - }) || - function(fn) { - setTimeoutFunc(fn, 0); - }; - -Promise$1._unhandledRejectionFn = function _unhandledRejectionFn(err) { - if (typeof console !== 'undefined' && console) { - console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console - } -}; - -var Exports = -/*#__PURE__*/ -function () { - function Exports(ctx) { - _classCallCheck(this, Exports); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Exports, [{ - key: "getSvgString", - value: function getSvgString() { - return this.w.globals.dom.Paper.svg(); - } - }, { - key: "cleanup", - value: function cleanup() { - var w = this.w; // hide some elements to avoid printing them on exported svg - - var xcrosshairs = w.globals.dom.baseEl.querySelector('.apexcharts-xcrosshairs'); - var ycrosshairs = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs'); - - if (xcrosshairs) { - xcrosshairs.setAttribute('x', -500); - } - - if (ycrosshairs) { - ycrosshairs.setAttribute('y1', -100); - ycrosshairs.setAttribute('y2', -100); - } - } - }, { - key: "svgUrl", - value: function svgUrl() { - this.cleanup(); - var svgData = this.getSvgString(); - var svgBlob = new Blob([svgData], { - type: 'image/svg+xml;charset=utf-8' - }); - return URL.createObjectURL(svgBlob); - } - }, { - key: "dataURI", - value: function dataURI() { - var _this = this; - - return new Promise$1(function (resolve) { - var w = _this.w; - - _this.cleanup(); - - var canvas = document.createElement('canvas'); - canvas.width = w.globals.svgWidth; - canvas.height = w.globals.svgHeight; - var canvasBg = w.config.chart.background === 'transparent' ? '#fff' : w.config.chart.background; - var ctx = canvas.getContext('2d'); - ctx.fillStyle = canvasBg; - ctx.fillRect(0, 0, canvas.width, canvas.height); - var DOMURL = window.URL || window.webkitURL || window; - var img = new Image(); - img.crossOrigin = 'anonymous'; - - var svgData = _this.getSvgString(); - - var svgUrl = 'data:image/svg+xml,' + encodeURIComponent(svgData); - - img.onload = function () { - ctx.drawImage(img, 0, 0); - DOMURL.revokeObjectURL(svgUrl); - var imgURI = canvas.toDataURL('image/png'); - resolve(imgURI); - }; - - img.src = svgUrl; - }); - } - }, { - key: "exportToSVG", - value: function exportToSVG() { - this.triggerDownload(this.svgUrl(), '.svg'); - } - }, { - key: "exportToPng", - value: function exportToPng() { - var _this2 = this; - - this.dataURI().then(function (imgURI) { - _this2.triggerDownload(imgURI, '.png'); - }); - } - }, { - key: "triggerDownload", - value: function triggerDownload(href, ext) { - var downloadLink = document.createElement('a'); - downloadLink.href = href; - downloadLink.download = this.w.globals.chartID + ext; - document.body.appendChild(downloadLink); - downloadLink.click(); - document.body.removeChild(downloadLink); - } - }]); - - return Exports; -}(); - -/** - * ApexCharts Grid Class for drawing Cartesian Grid. - * - * @module Grid - **/ - -var Grid = -/*#__PURE__*/ -function () { - function Grid(ctx) { - _classCallCheck(this, Grid); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.anim = new Animations(this.ctx); - this.xaxisLabels = w.globals.labels.slice(); - this.animX = w.config.grid.xaxis.lines.animate && w.config.chart.animations.enabled; - this.animY = w.config.grid.yaxis.lines.animate && w.config.chart.animations.enabled; - - if (w.globals.timelineLabels.length > 0) { - // timeline labels are there - this.xaxisLabels = w.globals.timelineLabels.slice(); - } - } // .when using sparklines or when showing no grid, we need to have a grid area which is reused at many places for other calculations as well - - - _createClass(Grid, [{ - key: "drawGridArea", - value: function drawGridArea() { - var elGrid = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var w = this.w; - var graphics = new Graphics(this.ctx); - - if (elGrid === null) { - elGrid = graphics.group({ - class: 'apexcharts-grid' - }); - } - - var elVerticalLine = graphics.drawLine(w.globals.padHorizontal, 1, w.globals.padHorizontal, w.globals.gridHeight, 'transparent'); - var elHorzLine = graphics.drawLine(w.globals.padHorizontal, w.globals.gridHeight, w.globals.gridWidth, w.globals.gridHeight, 'transparent'); - elGrid.add(elHorzLine); - elGrid.add(elVerticalLine); - return elGrid; - } - }, { - key: "drawGrid", - value: function drawGrid() { - var w = this.w; - var xAxis = new XAxis(this.ctx); - var yaxis = new YAxis(this.ctx); - var gl = this.w.globals; - var elgrid = null; - - if (gl.axisCharts) { - if (w.config.grid.show) { - // grid is drawn after xaxis and yaxis are drawn - elgrid = this.renderGrid(); - gl.dom.elGraphical.add(elgrid.el); - this.drawGridArea(elgrid.el); - } else { - var elgridArea = this.drawGridArea(); - gl.dom.elGraphical.add(elgridArea); - } - - if (elgrid !== null) { - xAxis.xAxisLabelCorrections(elgrid.xAxisTickWidth); - } - - yaxis.setYAxisTextAlignments(); - } - } // This mask will clip off overflowing graphics from the drawable area - - }, { - key: "createGridMask", - value: function createGridMask() { - var w = this.w; - var gl = w.globals; - var graphics = new Graphics(this.ctx); - var strokeSize = Array.isArray(w.config.stroke.width) ? 0 : w.config.stroke.width; - - if (Array.isArray(w.config.stroke.width)) { - var strokeMaxSize = 0; - w.config.stroke.width.forEach(function (m) { - strokeMaxSize = Math.max(strokeMaxSize, m); - }); - strokeSize = strokeMaxSize; - } - - gl.dom.elGridRectMask = document.createElementNS(gl.SVGNS, 'clipPath'); - gl.dom.elGridRectMask.setAttribute('id', "gridRectMask".concat(gl.cuid)); - gl.dom.elGridRectMarkerMask = document.createElementNS(gl.SVGNS, 'clipPath'); - gl.dom.elGridRectMarkerMask.setAttribute('id', "gridRectMarkerMask".concat(gl.cuid)); - gl.dom.elGridRect = graphics.drawRect(-strokeSize / 2, -strokeSize / 2, gl.gridWidth + strokeSize, gl.gridHeight + strokeSize, 0, '#fff'); - var coreUtils = new CoreUtils(this); - coreUtils.getLargestMarkerSize(); - var markerSize = w.globals.markers.largestSize + 1; - gl.dom.elGridRectMarker = graphics.drawRect(-markerSize, -markerSize, gl.gridWidth + markerSize * 2, gl.gridHeight + markerSize * 2, 0, '#fff'); - gl.dom.elGridRectMask.appendChild(gl.dom.elGridRect.node); - gl.dom.elGridRectMarkerMask.appendChild(gl.dom.elGridRectMarker.node); - var defs = gl.dom.baseEl.querySelector('defs'); - defs.appendChild(gl.dom.elGridRectMask); - defs.appendChild(gl.dom.elGridRectMarkerMask); - } // actual grid rendering - - }, { - key: "renderGrid", - value: function renderGrid() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var strokeDashArray = w.config.grid.strokeDashArray; - var elg = graphics.group({ - class: 'apexcharts-grid' - }); - var elgridLinesH = graphics.group({ - class: 'apexcharts-gridlines-horizontal' - }); - var elgridLinesV = graphics.group({ - class: 'apexcharts-gridlines-vertical' - }); - elg.add(elgridLinesH); - elg.add(elgridLinesV); - var tickAmount = 8; - - for (var i = 0; i < w.globals.series.length; i++) { - if (typeof w.globals.yAxisScale[i] !== 'undefined') { - tickAmount = w.globals.yAxisScale[i].result.length - 1; - } - - if (tickAmount > 2) break; - } - - var xCount; - - if (!w.globals.isBarHorizontal) { - xCount = this.xaxisLabels.length; // draw vertical lines - - if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) { - var x1 = w.globals.padHorizontal; - var y1 = 0; - var x2; - var y2 = w.globals.gridHeight; - - if (w.globals.timelineLabels.length > 0) { - for (var _i = 0; _i < xCount; _i++) { - x1 = this.xaxisLabels[_i].position; - x2 = this.xaxisLabels[_i].position; - - if (w.config.grid.xaxis.lines.show && x1 > 0 && x1 < w.globals.gridWidth) { - var line = graphics.drawLine(x1, y1, x2, y2, w.config.grid.borderColor, strokeDashArray); - line.node.classList.add('apexcharts-gridline'); - elgridLinesV.add(line); - - if (this.animX) { - this.animateLine(line, { - x1: 0, - x2: 0 - }, { - x1: x1, - x2: x2 - }); - } - } - - var xAxis = new XAxis(this.ctx); - - if (_i === xCount - 1) { - if (!w.globals.skipLastTimelinelabel) { - // skip drawing last label here - xAxis.drawXaxisTicks(x1, elg); - } - } else { - xAxis.drawXaxisTicks(x1, elg); - } - } - } else { - var xCountForCategoryCharts = xCount; - - for (var _i2 = 0; _i2 < xCountForCategoryCharts; _i2++) { - var x1Count = xCountForCategoryCharts; - - if (w.globals.isXNumeric && w.config.chart.type !== 'bar') { - x1Count -= 1; - } - - x1 = x1 + w.globals.gridWidth / x1Count; - x2 = x1; // skip the last line - - if (_i2 === x1Count - 1) break; - - if (w.config.grid.xaxis.lines.show) { - var _line = graphics.drawLine(x1, y1, x2, y2, w.config.grid.borderColor, strokeDashArray); - - _line.node.classList.add('apexcharts-gridline'); - - elgridLinesV.add(_line); - - if (this.animX) { - this.animateLine(_line, { - x1: 0, - x2: 0 - }, { - x1: x1, - x2: x2 - }); - } - } - - var _xAxis = new XAxis(this.ctx); - - _xAxis.drawXaxisTicks(x1, elg); - } - } - } // draw horizontal lines - - - if (w.config.grid.yaxis.lines.show) { - var _x = 0; - var _y = 0; - var _y2 = 0; - var _x2 = w.globals.gridWidth; - - for (var _i3 = 0; _i3 < tickAmount + 1; _i3++) { - var _line2 = graphics.drawLine(_x, _y, _x2, _y2, w.config.grid.borderColor, strokeDashArray); - - elgridLinesH.add(_line2); - - _line2.node.classList.add('apexcharts-gridline'); - - if (this.animY) { - this.animateLine(_line2, { - y1: _y + 20, - y2: _y2 + 20 - }, { - y1: _y, - y2: _y2 - }); - } - - _y = _y + w.globals.gridHeight / tickAmount; - _y2 = _y; - } - } - } else { - xCount = tickAmount; // draw vertical lines - - if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) { - var _x3 = w.globals.padHorizontal; - var _y3 = 0; - - var _x4; - - var _y4 = w.globals.gridHeight; - - for (var _i4 = 0; _i4 < xCount + 1; _i4++) { - _x3 = _x3 + w.globals.gridWidth / xCount + 0.3; - _x4 = _x3; // skip the last vertical line - - if (_i4 === xCount - 1) break; - - if (w.config.grid.xaxis.lines.show) { - var _line3 = graphics.drawLine(_x3, _y3, _x4, _y4, w.config.grid.borderColor, strokeDashArray); - - _line3.node.classList.add('apexcharts-gridline'); - - elgridLinesV.add(_line3); - - if (this.animX) { - this.animateLine(_line3, { - x1: 0, - x2: 0 - }, { - x1: _x3, - x2: _x4 - }); - } - } // skip the first vertical line - - - var _xAxis2 = new XAxis(this.ctx); - - _xAxis2.drawXaxisTicks(_x3, elg); - } - } // draw horizontal lines - - - if (w.config.grid.yaxis.lines.show) { - var _x5 = 0; - var _y5 = 0; - var _y6 = 0; - var _x6 = w.globals.gridWidth; - - for (var _i5 = 0; _i5 < w.globals.dataPoints + 1; _i5++) { - var _line4 = graphics.drawLine(_x5, _y5, _x6, _y6, w.config.grid.borderColor, strokeDashArray); - - elgridLinesH.add(_line4); - - _line4.node.classList.add('apexcharts-gridline'); - - if (this.animY) { - this.animateLine(_line4, { - y1: _y5 + 20, - y2: _y6 + 20 - }, { - y1: _y5, - y2: _y6 - }); - } - - _y5 = _y5 + w.globals.gridHeight / w.globals.dataPoints; - _y6 = _y5; - } - } - } - - this.drawGridBands(elg, xCount, tickAmount); - return { - el: elg, - xAxisTickWidth: w.globals.gridWidth / xCount - }; - } - }, { - key: "drawGridBands", - value: function drawGridBands(elg, xCount, tickAmount) { - var w = this.w; - var graphics = new Graphics(this.ctx); // rows background bands - - if (w.config.grid.row.colors !== undefined && w.config.grid.row.colors.length > 0) { - var x1 = 0; - var y1 = 0; - var y2 = w.globals.gridHeight / tickAmount; - var x2 = w.globals.gridWidth; - - for (var i = 0, c = 0; i < tickAmount; i++, c++) { - if (c >= w.config.grid.row.colors.length) { - c = 0; - } - - var color = w.config.grid.row.colors[c]; - var rect = graphics.drawRect(x1, y1, x2, y2, 0, color, w.config.grid.row.opacity); - elg.add(rect); - rect.node.classList.add('apexcharts-gridRow'); - y1 = y1 + w.globals.gridHeight / tickAmount; - } - } // columns background bands - - - if (w.config.grid.column.colors !== undefined && w.config.grid.column.colors.length > 0) { - var _x7 = w.globals.padHorizontal; - var _y7 = 0; - - var _x8 = w.globals.padHorizontal + w.globals.gridWidth / xCount; - - var _y8 = w.globals.gridHeight; - - for (var _i6 = 0, _c = 0; _i6 < xCount; _i6++, _c++) { - if (_c >= w.config.grid.column.colors.length) { - _c = 0; - } - - var _color = w.config.grid.column.colors[_c]; - - var _rect = graphics.drawRect(_x7, _y7, _x8, _y8, 0, _color, w.config.grid.column.opacity); - - _rect.node.classList.add('apexcharts-gridColumn'); - - elg.add(_rect); - _x7 = _x7 + w.globals.gridWidth / xCount; - } - } - } - }, { - key: "animateLine", - value: function animateLine(line, from, to) { - var w = this.w; - var initialAnim = w.config.chart.animations; - - if (initialAnim && !w.globals.resized && !w.globals.dataChanged) { - var speed = initialAnim.speed; - this.anim.animateLine(line, from, to, speed); - } - } - }]); - - return Grid; -}(); - -/** - * ApexCharts Legend Class to draw legend. - * - * @module Legend - **/ - -var Legend = -/*#__PURE__*/ -function () { - function Legend(ctx, opts) { - _classCallCheck(this, Legend); - - this.ctx = ctx; - this.w = ctx.w; - this.onLegendClick = this.onLegendClick.bind(this); - this.onLegendHovered = this.onLegendHovered.bind(this); - } - - _createClass(Legend, [{ - key: "init", - value: function init() { - var w = this.w; - var gl = w.globals; - var cnf = w.config; - var showLegendAlways = cnf.legend.showForSingleSeries && gl.series.length === 1 || gl.series.length > 1; - - if ((showLegendAlways || !gl.axisCharts) && cnf.legend.show) { - while (gl.dom.elLegendWrap.firstChild) { - gl.dom.elLegendWrap.removeChild(gl.dom.elLegendWrap.firstChild); - } - - this.drawLegends(); - - if (!Utils.isIE11()) { - this.appendToForeignObject(); - } else { - // IE11 doesn't supports foreignObject, hence append it to - document.getElementsByTagName('head')[0].appendChild(this.getLegendStyles()); - } - - if (cnf.legend.position === 'bottom' || cnf.legend.position === 'top') { - this.legendAlignHorizontal(); - } else if (cnf.legend.position === 'right' || cnf.legend.position === 'left') { - this.legendAlignVertical(); - } - } - } - }, { - key: "appendToForeignObject", - value: function appendToForeignObject() { - var gl = this.w.globals; - var elForeign = document.createElementNS(gl.SVGNS, 'foreignObject'); - elForeign.setAttribute('x', 0); - elForeign.setAttribute('y', 0); - elForeign.setAttribute('width', gl.svgWidth); - elForeign.setAttribute('height', gl.svgHeight); - gl.dom.elLegendWrap.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml'); - elForeign.appendChild(gl.dom.elLegendWrap); - elForeign.appendChild(this.getLegendStyles()); - gl.dom.Paper.node.insertBefore(elForeign, gl.dom.elGraphical.node); - } - }, { - key: "drawLegends", - value: function drawLegends() { - var self = this; - var w = this.w; - var fontFamily = w.config.legend.fontFamily; - var legendNames = w.globals.seriesNames; - var fillcolor = w.globals.colors.slice(); - - if (w.config.chart.type === 'heatmap') { - var ranges = w.config.plotOptions.heatmap.colorScale.ranges; - legendNames = ranges.map(function (colorScale) { - return colorScale.name ? colorScale.name : colorScale.from + ' - ' + colorScale.to; - }); - fillcolor = ranges.map(function (color) { - return color.color; - }); - } - - var legendFormatter = w.globals.legendFormatter; - - for (var i = 0; i <= legendNames.length - 1; i++) { - var text = legendFormatter(legendNames[i], { - seriesIndex: i, - w: w - }); - var collapsedSeries = false; - var ancillaryCollapsedSeries = false; - - if (w.globals.collapsedSeries.length > 0) { - for (var c = 0; c < w.globals.collapsedSeries.length; c++) { - if (w.globals.collapsedSeries[c].index === i) { - collapsedSeries = true; - } - } - } - - if (w.globals.ancillaryCollapsedSeriesIndices.length > 0) { - for (var _c = 0; _c < w.globals.ancillaryCollapsedSeriesIndices.length; _c++) { - if (w.globals.ancillaryCollapsedSeriesIndices[_c] === i) { - ancillaryCollapsedSeries = true; - } - } - } - - var elMarker = document.createElement('span'); - elMarker.classList.add('apexcharts-legend-marker'); - var mOffsetX = w.config.legend.markers.offsetX; - var mOffsetY = w.config.legend.markers.offsetY; - var mHeight = w.config.legend.markers.height; - var mWidth = w.config.legend.markers.width; - var mBorderWidth = w.config.legend.markers.strokeWidth; - var mBorderColor = w.config.legend.markers.strokeColor; - var mBorderRadius = w.config.legend.markers.radius; - var mStyle = elMarker.style; - mStyle.background = fillcolor[i]; - mStyle.color = fillcolor[i]; - mStyle.height = Array.isArray(mHeight) ? parseFloat(mHeight[i]) + 'px' : parseFloat(mHeight) + 'px'; - mStyle.width = Array.isArray(mWidth) ? parseFloat(mWidth[i]) + 'px' : parseFloat(mWidth) + 'px'; - mStyle.left = Array.isArray(mOffsetX) ? mOffsetX[i] : mOffsetX; - mStyle.top = Array.isArray(mOffsetY) ? mOffsetY[i] : mOffsetY; - mStyle.borderWidth = Array.isArray(mBorderWidth) ? mBorderWidth[i] : mBorderWidth; - mStyle.borderColor = Array.isArray(mBorderColor) ? mBorderColor[i] : mBorderColor; - mStyle.borderRadius = Array.isArray(mBorderRadius) ? parseFloat(mBorderRadius[i]) + 'px' : parseFloat(mBorderRadius) + 'px'; - - if (w.config.legend.markers.customHTML) { - if (Array.isArray(w.config.legend.markers.customHTML)) { - elMarker.innerHTML = w.config.legend.markers.customHTML[i](); - } else { - elMarker.innerHTML = w.config.legend.markers.customHTML(); - } - } - - Graphics.setAttrs(elMarker, { - rel: i + 1, - 'data:collapsed': collapsedSeries || ancillaryCollapsedSeries - }); - - if (collapsedSeries || ancillaryCollapsedSeries) { - elMarker.classList.add('inactive-legend'); - } - - var elLegend = document.createElement('div'); - var elLegendText = document.createElement('span'); - elLegendText.classList.add('apexcharts-legend-text'); - elLegendText.innerHTML = text; - var textColor = w.config.legend.labels.useSeriesColors ? w.globals.colors[i] : w.config.legend.labels.colors; - - if (!textColor) { - textColor = w.config.chart.foreColor; - } - - elLegendText.style.color = textColor; - elLegendText.style.fontSize = parseFloat(w.config.legend.fontSize) + 'px'; - elLegendText.style.fontFamily = fontFamily || w.config.chart.fontFamily; - Graphics.setAttrs(elLegendText, { - rel: i + 1, - 'data:collapsed': collapsedSeries || ancillaryCollapsedSeries - }); - elLegend.appendChild(elMarker); - elLegend.appendChild(elLegendText); - var coreUtils = new CoreUtils(this.ctx); - - if (!w.config.legend.showForZeroSeries) { - var total = coreUtils.getSeriesTotalByIndex(i); - - if (total === 0 && coreUtils.seriesHaveSameValues(i) && !coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) { - elLegend.classList.add('apexcharts-hidden-zero-series'); - } - } - - if (!w.config.legend.showForNullSeries) { - if (coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) { - elLegend.classList.add('apexcharts-hidden-null-series'); - } - } - - w.globals.dom.elLegendWrap.appendChild(elLegend); - w.globals.dom.elLegendWrap.classList.add(w.config.legend.horizontalAlign); // w.globals.dom.elLegendWrap.classList.add(w.config.legend.verticalAlign) - - w.globals.dom.elLegendWrap.classList.add('position-' + w.config.legend.position); - elLegend.classList.add('apexcharts-legend-series'); - elLegend.style.margin = "".concat(w.config.legend.itemMargin.horizontal, "px ").concat(w.config.legend.itemMargin.vertical, "px"); - w.globals.dom.elLegendWrap.style.width = w.config.legend.width ? w.config.legend.width + 'px' : ''; - w.globals.dom.elLegendWrap.style.height = w.config.legend.height ? w.config.legend.height + 'px' : ''; - Graphics.setAttrs(elLegend, { - rel: i + 1, - 'data:collapsed': collapsedSeries || ancillaryCollapsedSeries - }); - - if (collapsedSeries || ancillaryCollapsedSeries) { - elLegend.classList.add('inactive-legend'); - } - - if (!w.config.legend.onItemClick.toggleDataSeries) { - elLegend.classList.add('no-click'); - } - } // for now - just prevent click on heatmap legend - and allow hover only - - - var clickAllowed = w.config.chart.type !== 'heatmap'; - - if (clickAllowed && w.config.legend.onItemClick.toggleDataSeries) { - w.globals.dom.elWrap.addEventListener('click', self.onLegendClick, true); - } - - if (w.config.legend.onItemHover.highlightDataSeries) { - w.globals.dom.elWrap.addEventListener('mousemove', self.onLegendHovered, true); - w.globals.dom.elWrap.addEventListener('mouseout', self.onLegendHovered, true); - } - } - }, { - key: "getLegendBBox", - value: function getLegendBBox() { - var w = this.w; - var currLegendsWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); - var currLegendsWrapRect = currLegendsWrap.getBoundingClientRect(); - var currLegendsWrapWidth = currLegendsWrapRect.width; - var currLegendsWrapHeight = currLegendsWrapRect.height; - return { - clwh: currLegendsWrapHeight, - clww: currLegendsWrapWidth - }; - } - }, { - key: "setLegendWrapXY", - value: function setLegendWrapXY(offsetX, offsetY) { - var w = this.w; - var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); - var legendRect = elLegendWrap.getBoundingClientRect(); - var x = 0; - var y = 0; - - if (w.config.legend.position === 'bottom') { - y = y + (w.globals.svgHeight - legendRect.height / 2); - } else if (w.config.legend.position === 'top') { - var dim = new Dimensions(this.ctx); - var titleH = dim.getTitleSubtitleCoords('title').height; - var subtitleH = dim.getTitleSubtitleCoords('subtitle').height; - y = y + (titleH > 0 ? titleH - 10 : 0) + (subtitleH > 0 ? subtitleH - 10 : 0); - } - - elLegendWrap.style.position = 'absolute'; - x = x + offsetX + w.config.legend.offsetX; - y = y + offsetY + w.config.legend.offsetY; - elLegendWrap.style.left = x + 'px'; - elLegendWrap.style.top = y + 'px'; - - if (w.config.legend.position === 'bottom') { - elLegendWrap.style.top = 'auto'; - elLegendWrap.style.bottom = 10 + w.config.legend.offsetY + 'px'; - } else if (w.config.legend.position === 'right') { - elLegendWrap.style.left = 'auto'; - elLegendWrap.style.right = 25 + w.config.legend.offsetX + 'px'; - } - - if (elLegendWrap.style.width) { - elLegendWrap.style.width = parseInt(w.config.legend.width) + 'px'; - } - - if (elLegendWrap.style.height) { - elLegendWrap.style.height = parseInt(w.config.legend.height) + 'px'; - } - } - }, { - key: "legendAlignHorizontal", - value: function legendAlignHorizontal() { - var w = this.w; - var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); - elLegendWrap.style.right = 0; - var lRect = this.getLegendBBox(); - var dimensions = new Dimensions(this.ctx); - var titleRect = dimensions.getTitleSubtitleCoords('title'); - var subtitleRect = dimensions.getTitleSubtitleCoords('subtitle'); - var offsetX = 20; - var offsetY = 0; // the whole legend box is set to bottom - - if (w.config.legend.position === 'bottom') { - offsetY = -lRect.clwh / 1.8; - } else if (w.config.legend.position === 'top') { - offsetY = titleRect.height + subtitleRect.height + w.config.title.margin + w.config.subtitle.margin - 15; - } - - this.setLegendWrapXY(offsetX, offsetY); - } - }, { - key: "legendAlignVertical", - value: function legendAlignVertical() { - var w = this.w; - var lRect = this.getLegendBBox(); - var offsetY = 20; - var offsetX = 0; - - if (w.config.legend.position === 'left') { - offsetX = 20; - } - - if (w.config.legend.position === 'right') { - offsetX = w.globals.svgWidth - lRect.clww - 10; - } - - this.setLegendWrapXY(offsetX, offsetY); - } - }, { - key: "onLegendHovered", - value: function onLegendHovered(e) { - var w = this.w; - var hoverOverLegend = e.target.classList.contains('apexcharts-legend-text') || e.target.classList.contains('apexcharts-legend-marker'); - - if (w.config.chart.type !== 'heatmap') { - if (!e.target.classList.contains('inactive-legend') && hoverOverLegend) { - var series = new Series(this.ctx); - series.toggleSeriesOnHover(e, e.target); - } - } else { - // for heatmap handling - if (hoverOverLegend) { - var seriesCnt = parseInt(e.target.getAttribute('rel')) - 1; - this.ctx.fireEvent('legendHover', [this.ctx, seriesCnt, this.w]); - - var _series = new Series(this.ctx); - - _series.highlightRangeInSeries(e, e.target); - } - } - } - }, { - key: "onLegendClick", - value: function onLegendClick(e) { - if (e.target.classList.contains('apexcharts-legend-text') || e.target.classList.contains('apexcharts-legend-marker')) { - var seriesCnt = parseInt(e.target.getAttribute('rel')) - 1; - var isHidden = e.target.getAttribute('data:collapsed') === 'true'; - var legendClick = this.w.config.chart.events.legendClick; - - if (typeof legendClick === 'function') { - legendClick(this.ctx, seriesCnt, this.w); - } - - this.ctx.fireEvent('legendClick', [this.ctx, seriesCnt, this.w]); - var markerClick = this.w.config.legend.markers.onClick; - - if (typeof markerClick === 'function' && e.target.classList.contains('apexcharts-legend-marker')) { - markerClick(this.ctx, seriesCnt, this.w); - this.ctx.fireEvent('legendMarkerClick', [this.ctx, seriesCnt, this.w]); - } - - this.toggleDataSeries(seriesCnt, isHidden); - } - } - }, { - key: "getLegendStyles", - value: function getLegendStyles() { - var stylesheet = document.createElement('style'); - stylesheet.setAttribute('type', 'text/css'); - var text = "\n \n .apexcharts-legend {\n display: flex;\n overflow: auto;\n padding: 0 10px;\n }\n\n .apexcharts-legend.position-bottom, .apexcharts-legend.position-top {\n flex-wrap: wrap\n }\n .apexcharts-legend.position-right, .apexcharts-legend.position-left {\n flex-direction: column;\n bottom: 0;\n }\n\n .apexcharts-legend.position-bottom.left, .apexcharts-legend.position-top.left, .apexcharts-legend.position-right, .apexcharts-legend.position-left {\n justify-content: flex-start;\n }\n\n .apexcharts-legend.position-bottom.center, .apexcharts-legend.position-top.center {\n justify-content: center; \n }\n\n .apexcharts-legend.position-bottom.right, .apexcharts-legend.position-top.right {\n justify-content: flex-end;\n }\n\n .apexcharts-legend-series {\n cursor: pointer;\n line-height: normal;\n }\n\n .apexcharts-legend.position-bottom .apexcharts-legend-series, .apexcharts-legend.position-top .apexcharts-legend-series{\n display: flex;\n align-items: center;\n }\n\n .apexcharts-legend-text {\n position: relative;\n font-size: 14px;\n }\n\n .apexcharts-legend-text *, .apexcharts-legend-marker * {\n pointer-events: none;\n }\n\n .apexcharts-legend-marker {\n position: relative;\n display: inline-block;\n cursor: pointer;\n margin-right: 3px;\n }\n \n .apexcharts-legend.right .apexcharts-legend-series, .apexcharts-legend.left .apexcharts-legend-series{\n display: inline-block;\n }\n\n .apexcharts-legend-series.no-click {\n cursor: auto;\n }\n\n .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\n display: none !important;\n }\n\n .inactive-legend {\n opacity: 0.45;\n }"; - var rules = document.createTextNode(text); - stylesheet.appendChild(rules); - return stylesheet; - } - }, { - key: "resetToggleDataSeries", - value: function resetToggleDataSeries() { - var w = this.w; - var seriesEls = null; - var realIndexes = []; - - if (w.globals.axisCharts) { - seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:realIndex]"); - seriesEls = Utils.listToArray(seriesEls); - seriesEls.forEach(function (v) { - realIndexes.push(parseInt(v.getAttribute('data:realIndex'))); - }); - } else { - seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[rel]"); - seriesEls = Utils.listToArray(seriesEls); - seriesEls.forEach(function (v) { - realIndexes.push(parseInt(v.getAttribute('rel')) - 1); - }); - } - - realIndexes.sort(); - - if (w.globals.collapsedSeries.length > 0) { - var risingSeries = w.globals.risingSeries.slice(); - var series = w.config.series.slice(); - - for (var c = 0; c < w.globals.collapsedSeries.length; c++) { - var index = realIndexes.indexOf(w.globals.collapsedSeries[c].index); - - if (index !== -1) { - if (w.globals.axisCharts) { - series[index].data = w.globals.collapsedSeries.slice()[c].data.slice(); - } else { - series[index] = w.globals.collapsedSeries.slice()[c].data; - } - - risingSeries.push(index); - } - } - - w.globals.collapsedSeries = []; - w.globals.ancillaryCollapsedSeries = []; - w.globals.collapsedSeriesIndices = []; - w.globals.ancillaryCollapsedSeriesIndices = []; - w.globals.risingSeries = risingSeries; - w.config.series = series; - - this.ctx._updateSeries(w.config.series, w.config.chart.animations.dynamicAnimation.enabled); - } - } - }, { - key: "toggleDataSeries", - value: function toggleDataSeries(seriesCnt, isHidden) { - var w = this.w; - - if (w.globals.axisCharts || w.config.chart.type === 'radialBar') { - w.globals.resized = true; // we don't want initial animations again - - var seriesEl = null; - var realIndex = null; // yes, make it null. 1 series will rise at a time - - w.globals.risingSeries = []; - - if (w.globals.axisCharts) { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(seriesCnt, "']")); - realIndex = parseInt(seriesEl.getAttribute('data:realIndex')); - } else { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(seriesCnt + 1, "']")); - realIndex = parseInt(seriesEl.getAttribute('rel')) - 1; - } - - if (isHidden) { - this.riseCollapsedSeries(w.globals.collapsedSeries, w.globals.collapsedSeriesIndices, realIndex); - this.riseCollapsedSeries(w.globals.ancillaryCollapsedSeries, w.globals.ancillaryCollapsedSeriesIndices, realIndex); - } else { - if (w.globals.axisCharts) { - var shouldNotHideYAxis = false; - - if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].show && w.config.yaxis[realIndex].showAlways) { - shouldNotHideYAxis = true; - - if (w.globals.ancillaryCollapsedSeriesIndices.indexOf(realIndex) < 0) { - w.globals.ancillaryCollapsedSeries.push({ - index: realIndex, - data: w.config.series[realIndex].data.slice(), - type: seriesEl.parentNode.className.baseVal.split('-')[1] - }); - w.globals.ancillaryCollapsedSeriesIndices.push(realIndex); - } - } - - if (!shouldNotHideYAxis) { - w.globals.collapsedSeries.push({ - index: realIndex, - data: w.config.series[realIndex].data.slice(), - type: seriesEl.parentNode.className.baseVal.split('-')[1] - }); - w.globals.collapsedSeriesIndices.push(realIndex); - var removeIndexOfRising = w.globals.risingSeries.indexOf(realIndex); - w.globals.risingSeries.splice(removeIndexOfRising, 1); - } // TODO: AVOID mutating the user's config object below - - - w.config.series[realIndex].data = []; - } else { - w.globals.collapsedSeries.push({ - index: realIndex, - data: w.config.series[realIndex] - }); - w.globals.collapsedSeriesIndices.push(realIndex); - w.config.series[realIndex] = 0; - } - - var seriesChildren = seriesEl.childNodes; - - for (var sc = 0; sc < seriesChildren.length; sc++) { - if (seriesChildren[sc].classList.contains('apexcharts-series-markers-wrap')) { - if (seriesChildren[sc].classList.contains('apexcharts-hide')) { - seriesChildren[sc].classList.remove('apexcharts-hide'); - } else { - seriesChildren[sc].classList.add('apexcharts-hide'); - } - } - } - - w.globals.allSeriesCollapsed = w.globals.collapsedSeries.length === w.globals.series.length; - - this.ctx._updateSeries(w.config.series, w.config.chart.animations.dynamicAnimation.enabled); - } - } else { - // for non-axis charts i.e pie / donuts - var _seriesEl = w.globals.dom.Paper.select(" .apexcharts-series[rel='".concat(seriesCnt + 1, "'] path")); - - var type = w.config.chart.type; - - if (type === 'pie' || type === 'donut') { - var dataLabels = w.config.plotOptions.pie.donut.labels; - var graphics = new Graphics(this.ctx); - var pie = new Pie(this.ctx); - graphics.pathMouseDown(_seriesEl.members[0], null); - pie.printDataLabelsInner(_seriesEl.members[0].node, dataLabels); - } - - _seriesEl.fire('click'); - } - } - }, { - key: "riseCollapsedSeries", - value: function riseCollapsedSeries(series, seriesIndices, realIndex) { - var w = this.w; - - if (series.length > 0) { - for (var c = 0; c < series.length; c++) { - if (series[c].index === realIndex) { - if (w.globals.axisCharts) { - w.config.series[realIndex].data = series[c].data.slice(); - series.splice(c, 1); - seriesIndices.splice(c, 1); - w.globals.risingSeries.push(realIndex); - } else { - w.config.series[realIndex] = series[c].data; - series.splice(c, 1); - seriesIndices.splice(c, 1); - w.globals.risingSeries.push(realIndex); - } - - this.ctx._updateSeries(w.config.series, w.config.chart.animations.dynamicAnimation.enabled); - } - } - } - } - }]); - - return Legend; -}(); - -/** - * ApexCharts Responsive Class to override options for different screen sizes. - * - * @module Responsive - **/ - -var Responsive = -/*#__PURE__*/ -function () { - function Responsive(ctx) { - _classCallCheck(this, Responsive); - - this.ctx = ctx; - this.w = ctx.w; - } // the opts parameter if not null has to be set overriding everything - // as the opts is set by user externally - - - _createClass(Responsive, [{ - key: "checkResponsiveConfig", - value: function checkResponsiveConfig(opts) { - var _this = this; - - var w = this.w; - var cnf = w.config; // check if responsive config exists - - if (cnf.responsive.length === 0) return; - var res = cnf.responsive.slice(); - res.sort(function (a, b) { - return a.breakpoint > b.breakpoint ? 1 : b.breakpoint > a.breakpoint ? -1 : 0; - }).reverse(); - var config = new Config({}); - - var iterateResponsiveOptions = function iterateResponsiveOptions() { - var newOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var largestBreakpoint = res[0].breakpoint; - var width = window.innerWidth > 0 ? window.innerWidth : screen.width; - - if (width > largestBreakpoint) { - var options = CoreUtils.extendArrayProps(config, w.globals.initialConfig); - newOptions = Utils.extend(options, newOptions); - newOptions = Utils.extend(w.config, newOptions); - - _this.overrideResponsiveOptions(newOptions); - } else { - for (var i = 0; i < res.length; i++) { - if (width < res[i].breakpoint) { - newOptions = CoreUtils.extendArrayProps(config, res[i].options); - newOptions = Utils.extend(w.config, newOptions); - - _this.overrideResponsiveOptions(newOptions); - } - } - } - }; - - if (opts) { - var options = CoreUtils.extendArrayProps(config, opts); - options = Utils.extend(w.config, options); - options = Utils.extend(options, opts); - iterateResponsiveOptions(options); - } else { - iterateResponsiveOptions({}); - } - } - }, { - key: "overrideResponsiveOptions", - value: function overrideResponsiveOptions(newOptions) { - var newConfig = new Config(newOptions).init(); - this.w.config = newConfig; - } - }]); - - return Responsive; -}(); - -/** - * ApexCharts Theme Class for setting the colors and palettes. - * - * @module Theme - **/ - -var Theme = -/*#__PURE__*/ -function () { - function Theme(ctx) { - _classCallCheck(this, Theme); - - this.ctx = ctx; - this.w = ctx.w; - this.colors = []; - } - - _createClass(Theme, [{ - key: "init", - value: function init() { - this.setDefaultColors(); - } - }, { - key: "setDefaultColors", - value: function setDefaultColors() { - var w = this.w; - var utils = new Utils(); - w.globals.dom.elWrap.classList.add(w.config.theme.mode); - - if (w.config.colors === undefined) { - w.globals.colors = this.predefined(); - } else { - w.globals.colors = w.config.colors; - } - - if (w.config.theme.monochrome.enabled) { - var monoArr = []; - var glsCnt = w.globals.series.length; - - if (w.config.plotOptions.bar.distributed && w.config.chart.type === 'bar') { - glsCnt = w.globals.series[0].length * w.globals.series.length; - } - - var mainColor = w.config.theme.monochrome.color; - var part = 1 / (glsCnt / w.config.theme.monochrome.shadeIntensity); - var shade = w.config.theme.monochrome.shadeTo; - var percent = 0; - - for (var gsl = 0; gsl < glsCnt; gsl++) { - var newColor = void 0; - - if (shade === 'dark') { - newColor = utils.shadeColor(percent * -1, mainColor); - percent = percent + part; - } else { - newColor = utils.shadeColor(percent, mainColor); - percent = percent + part; - } - - monoArr.push(newColor); - } - - w.globals.colors = monoArr.slice(); - } - - var defaultColors = w.globals.colors.slice(); // if user specfied less colors than no. of series, push the same colors again - - this.pushExtraColors(w.globals.colors); // The Border colors - - if (w.config.stroke.colors === undefined) { - w.globals.stroke.colors = defaultColors; - } else { - w.globals.stroke.colors = w.config.stroke.colors; - } - - this.pushExtraColors(w.globals.stroke.colors); // The FILL colors - - if (w.config.fill.colors === undefined) { - w.globals.fill.colors = defaultColors; - } else { - w.globals.fill.colors = w.config.fill.colors; - } - - this.pushExtraColors(w.globals.fill.colors); - - if (w.config.dataLabels.style.colors === undefined) { - w.globals.dataLabels.style.colors = defaultColors; - } else { - w.globals.dataLabels.style.colors = w.config.dataLabels.style.colors; - } - - this.pushExtraColors(w.globals.dataLabels.style.colors, 50); - - if (w.config.plotOptions.radar.polygons.fill.colors === undefined) { - w.globals.radarPolygons.fill.colors = [w.config.theme.mode === 'dark' ? '#202D48' : '#fff']; - } else { - w.globals.radarPolygons.fill.colors = w.config.plotOptions.radar.polygons.fill.colors; - } - - this.pushExtraColors(w.globals.radarPolygons.fill.colors, 20); // The point colors - - if (w.config.markers.colors === undefined) { - w.globals.markers.colors = defaultColors; - } else { - w.globals.markers.colors = w.config.markers.colors; - } - - this.pushExtraColors(w.globals.markers.colors); - } // When the number of colors provided is less than the number of series, this method - // will push same colors to the list - // params: - // distributed is only valid for distributed column/bar charts - - }, { - key: "pushExtraColors", - value: function pushExtraColors(colorSeries, length) { - var distributed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var w = this.w; - var len = length || w.globals.series.length; - - if (distributed === null) { - distributed = w.config.chart.type === 'bar' && w.config.plotOptions.bar.distributed || w.config.chart.type === 'heatmap' && w.config.plotOptions.heatmap.colorScale.inverse; - } - - if (distributed) { - len = w.globals.series[0].length * w.globals.series.length; - } - - if (colorSeries.length < len) { - var diff = len - colorSeries.length; - - for (var i = 0; i < diff; i++) { - colorSeries.push(colorSeries[i]); - } - } - } - }, { - key: "updateThemeOptions", - value: function updateThemeOptions(options) { - options.chart = options.chart || {}; - options.tooltip = options.tooltip || {}; - var mode = options.theme.mode || 'light'; - var palette = options.theme.palette ? options.theme.palette : mode === 'dark' ? 'palette4' : 'palette1'; - var foreColor = options.chart.foreColor ? options.chart.foreColor : mode === 'dark' ? '#f6f7f8' : '#373d3f'; - options.tooltip.theme = mode; - options.chart.foreColor = foreColor; - options.theme.palette = palette; - return options; - } - }, { - key: "predefined", - value: function predefined() { - var palette = this.w.config.theme.palette; // D6E3F8, FCEFEF, DCE0D9, A5978B, EDDDD4, D6E3F8, FEF5EF - - switch (palette) { - case 'palette1': - this.colors = ['#008FFB', '#00E396', '#FEB019', '#FF4560', '#775DD0']; - break; - - case 'palette2': - this.colors = ['#3f51b5', '#03a9f4', '#4caf50', '#f9ce1d', '#FF9800']; - break; - - case 'palette3': - this.colors = ['#33b2df', '#546E7A', '#d4526e', '#13d8aa', '#A5978B']; - break; - - case 'palette4': - this.colors = ['#4ecdc4', '#c7f464', '#81D4FA', '#fd6a6a', '#546E7A']; - break; - - case 'palette5': - this.colors = ['#2b908f', '#f9a3a4', '#90ee7e', '#fa4443', '#69d2e7']; - break; - - case 'palette6': - this.colors = ['#449DD1', '#F86624', '#EA3546', '#662E9B', '#C5D86D']; - break; - - case 'palette7': - this.colors = ['#D7263D', '#1B998B', '#2E294E', '#F46036', '#E2C044']; - break; - - case 'palette8': - this.colors = ['#662E9B', '#F86624', '#F9C80E', '#EA3546', '#43BCCD']; - break; - - case 'palette9': - this.colors = ['#5C4742', '#A5978B', '#8D5B4C', '#5A2A27', '#C4BBAF']; - break; - - case 'palette10': - this.colors = ['#A300D6', '#7D02EB', '#5653FE', '#2983FF', '#00B1F2']; - break; - - default: - this.colors = ['#008FFB', '#00E396', '#FEB019', '#FF4560', '#775DD0']; - break; - } - - return this.colors; - } - }]); - - return Theme; -}(); - -var Utils$1 = -/*#__PURE__*/ -function () { - function Utils(tooltipContext) { - _classCallCheck(this, Utils); - - this.w = tooltipContext.w; - this.ttCtx = tooltipContext; - this.ctx = tooltipContext.ctx; - } - /** - ** When hovering over series, you need to capture which series is being hovered on. - ** This function will return both capturedseries index as well as inner index of that series - * @memberof Utils - * @param {object} - * - hoverArea = the rect on which user hovers - * - elGrid = dimensions of the hover rect (it can be different than hoverarea) - */ - - - _createClass(Utils, [{ - key: "getNearestValues", - value: function getNearestValues(_ref) { - var hoverArea = _ref.hoverArea, - elGrid = _ref.elGrid, - clientX = _ref.clientX, - clientY = _ref.clientY, - hasBars = _ref.hasBars; - var w = this.w; - var hoverWidth = w.globals.gridWidth; - var xDivisor = hoverWidth / (w.globals.dataPoints - 1); - var seriesBound = elGrid.getBoundingClientRect(); - - if (hasBars && w.globals.comboCharts || hasBars) { - xDivisor = hoverWidth / w.globals.dataPoints; - } - - var hoverX = clientX - seriesBound.left; - var hoverY = clientY - seriesBound.top; - var inRect = hoverX < 0 || hoverY < 0 || hoverX > w.globals.gridWidth || hoverY > w.globals.gridHeight; - - if (inRect) { - hoverArea.classList.remove('hovering-zoom'); - hoverArea.classList.remove('hovering-pan'); - } else { - if (w.globals.zoomEnabled) { - hoverArea.classList.remove('hovering-pan'); - hoverArea.classList.add('hovering-zoom'); - } else if (w.globals.panEnabled) { - hoverArea.classList.remove('hovering-zoom'); - hoverArea.classList.add('hovering-pan'); - } - } - - var j = Math.round(hoverX / xDivisor); - - if (hasBars) { - j = Math.ceil(hoverX / xDivisor); - j = j - 1; - } - - var capturedSeries = null; - var closest = null; - var seriesXValArr = []; - var seriesYValArr = []; - - for (var s = 0; s < w.globals.seriesXvalues.length; s++) { - seriesXValArr.push([w.globals.seriesXvalues[s][0] - 0.000001].concat(w.globals.seriesXvalues[s])); - } - - seriesXValArr = seriesXValArr.map(function (seriesXVal) { - return seriesXVal.filter(function (s) { - return s; - }); - }); - seriesYValArr = w.globals.seriesYvalues.map(function (seriesYVal) { - return seriesYVal.filter(function (s) { - return s; - }); - }); // if X axis type is not category and tooltip is not shared, then we need to find the cursor position and get the nearest value - - if (w.globals.isXNumeric) { - closest = this.closestInMultiArray(hoverX, hoverY, seriesXValArr, seriesYValArr); - capturedSeries = closest.index; - j = closest.j; - - if (capturedSeries !== null) { - // initial push, it should be a little smaller than the 1st val - seriesXValArr = w.globals.seriesXvalues[capturedSeries]; - closest = this.closestInArray(hoverX, seriesXValArr); - j = closest.index; - } - } - - if (!j || j < 1) j = 0; - return { - capturedSeries: capturedSeries, - j: j, - hoverX: hoverX, - hoverY: hoverY - }; - } - }, { - key: "closestInMultiArray", - value: function closestInMultiArray(hoverX, hoverY, Xarrays, Yarrays) { - var w = this.w; - var activeIndex = 0; - var currIndex = null; - var j = -1; - - if (w.globals.series.length > 1) { - activeIndex = this.getFirstActiveXArray(Xarrays); - } else { - currIndex = 0; - } - - var currY = Yarrays[activeIndex][0]; - var currX = Xarrays[activeIndex][0]; - var diffX = Math.abs(hoverX - currX); - var diffY = Math.abs(hoverY - currY); - var diff = diffY + diffX; - Yarrays.map(function (arrY, arrIndex) { - arrY.map(function (y, innerKey) { - var newdiffY = Math.abs(hoverY - Yarrays[arrIndex][innerKey]); - var newdiffX = Math.abs(hoverX - Xarrays[arrIndex][innerKey]); - var newdiff = newdiffX + newdiffY; - - if (newdiff < diff) { - diff = newdiff; - diffX = newdiffX; - diffY = newdiffY; - currIndex = arrIndex; - j = innerKey; - } - }); - }); - return { - index: currIndex, - j: j - }; - } - }, { - key: "getFirstActiveXArray", - value: function getFirstActiveXArray(Xarrays) { - var activeIndex = 0; - var coreUtils = new CoreUtils(this.ctx); - var firstActiveSeriesIndex = Xarrays.map(function (xarr, index) { - if (xarr.length > 0) { - return index; - } else { - return -1; - } - }); - - for (var a = 0; a < firstActiveSeriesIndex.length; a++) { - var total = coreUtils.getSeriesTotalByIndex(a); - - if (firstActiveSeriesIndex[a] !== -1 && total !== 0 && !coreUtils.seriesHaveSameValues(a)) { - activeIndex = firstActiveSeriesIndex[a]; - break; - } - } - - return activeIndex; - } - }, { - key: "closestInArray", - value: function closestInArray(val, arr) { - var curr = arr[0]; - var currIndex = null; - var diff = Math.abs(val - curr); - - for (var i = 0; i < arr.length; i++) { - var newdiff = Math.abs(val - arr[i]); - - if (newdiff < diff) { - diff = newdiff; - curr = arr[i]; - currIndex = i; - } - } - - return { - index: currIndex - }; - } - /** - * When there are multiple series, it is possible to have different x values for each series. - * But it may be possible in those multiple series, that there is same x value for 2 or more - * series. - * @memberof Utils - * @param {int} - * - j = is the inner index of series -> (series[i][j]) - * @return {bool} - */ - - }, { - key: "isXoverlap", - value: function isXoverlap(j) { - var w = this.w; - var xSameForAllSeriesJArr = []; - var seriesX = w.globals.seriesX.filter(function (s) { - return typeof s[0] !== 'undefined'; - }); - - if (seriesX.length > 0) { - for (var i = 0; i < seriesX.length - 1; i++) { - if (typeof seriesX[i][j] !== 'undefined' && typeof seriesX[i + 1][j] !== 'undefined') { - if (seriesX[i][j] !== seriesX[i + 1][j]) { - xSameForAllSeriesJArr.push('unEqual'); - } - } - } - } - - if (xSameForAllSeriesJArr.length === 0) { - return true; - } - - return false; - } - }, { - key: "isinitialSeriesSameLen", - value: function isinitialSeriesSameLen() { - var sameLen = true; - var initialSeries = this.w.globals.initialSeries; - - for (var i = 0; i < initialSeries.length - 1; i++) { - if (initialSeries[i].data.length !== initialSeries[i + 1].data.length) { - sameLen = false; - break; - } - } - - return sameLen; - } - }, { - key: "getBarsHeight", - value: function getBarsHeight(allbars) { - var bars = _toConsumableArray(allbars); - - var totalHeight = bars.reduce(function (acc, bar) { - return acc + bar.getBBox().height; - }, 0); - return totalHeight; - } - }, { - key: "toggleAllTooltipSeriesGroups", - value: function toggleAllTooltipSeriesGroups(state) { - var w = this.w; - var ttCtx = this.ttCtx; - - if (ttCtx.allTooltipSeriesGroups.length === 0) { - ttCtx.allTooltipSeriesGroups = w.globals.dom.baseEl.querySelectorAll('.apexcharts-tooltip-series-group'); - } - - var allTooltipSeriesGroups = ttCtx.allTooltipSeriesGroups; - - for (var i = 0; i < allTooltipSeriesGroups.length; i++) { - if (state === 'enable') { - allTooltipSeriesGroups[i].classList.add('active'); - allTooltipSeriesGroups[i].style.display = w.config.tooltip.items.display; - } else { - allTooltipSeriesGroups[i].classList.remove('active'); - allTooltipSeriesGroups[i].style.display = 'none'; - } - } - } - }]); - - return Utils; -}(); - -/** - * ApexCharts Tooltip.Labels Class to draw texts on the tooltip. - * - * @module Tooltip.Labels - **/ - -var Labels = -/*#__PURE__*/ -function () { - function Labels(tooltipContext) { - _classCallCheck(this, Labels); - - this.w = tooltipContext.w; - this.ctx = tooltipContext.ctx; - this.ttCtx = tooltipContext; - this.tooltipUtil = new Utils$1(tooltipContext); - } - - _createClass(Labels, [{ - key: "drawSeriesTexts", - value: function drawSeriesTexts(_ref) { - var _ref$shared = _ref.shared, - shared = _ref$shared === void 0 ? true : _ref$shared, - ttItems = _ref.ttItems, - _ref$i = _ref.i, - i = _ref$i === void 0 ? 0 : _ref$i, - _ref$j = _ref.j, - j = _ref$j === void 0 ? null : _ref$j; - var w = this.w; - - if (w.config.tooltip.custom !== undefined) { - this.handleCustomTooltip({ - i: i, - j: j - }); - } else { - this.toggleActiveInactiveSeries(shared); - } - - var values = this.getValuesToPrint({ - i: i, - j: j - }); - this.printLabels({ - i: i, - j: j, - values: values, - ttItems: ttItems, - shared: shared - }); // Re-calculate tooltip dimensions now that we have drawn the text - - var tooltipEl = this.ttCtx.getElTooltip(); - this.ttCtx.tooltipRect.ttWidth = tooltipEl.getBoundingClientRect().width; - this.ttCtx.tooltipRect.ttHeight = tooltipEl.getBoundingClientRect().height; - } - }, { - key: "printLabels", - value: function printLabels(_ref2) { - var i = _ref2.i, - j = _ref2.j, - values = _ref2.values, - ttItems = _ref2.ttItems, - shared = _ref2.shared; - var w = this.w; - var val; - var xVal = values.xVal, - zVal = values.zVal, - xAxisTTVal = values.xAxisTTVal; - var seriesName = ''; - var pColor = w.globals.colors[i]; - - if (j !== null && w.config.plotOptions.bar.distributed) { - pColor = w.globals.colors[j]; - } - - for (var t = 0, inverset = w.globals.series.length - 1; t < w.globals.series.length; t++, inverset--) { - var f = this.getFormatters(i); - seriesName = this.getSeriesName({ - fn: f.yLbTitleFormatter, - index: i, - seriesIndex: i, - j: j - }); - - if (shared) { - var tIndex = w.config.tooltip.inverseOrder ? inverset : t; - f = this.getFormatters(tIndex); - seriesName = this.getSeriesName({ - fn: f.yLbTitleFormatter, - index: tIndex, - seriesIndex: i, - j: j - }); - pColor = w.globals.colors[tIndex]; // for plot charts, not for pie/donuts - - val = f.yLbFormatter(w.globals.series[tIndex][j], { - series: w.globals.series, - seriesIndex: tIndex, - dataPointIndex: j, - w: w - }); // discard 0 values in BARS - - if (this.ttCtx.hasBars() && w.config.chart.stacked && w.globals.series[tIndex][j] === 0 || typeof w.globals.series[tIndex][j] === 'undefined') { - val = undefined; - } - } else { - val = f.yLbFormatter(w.globals.series[i][j], { - series: w.globals.series, - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } // for pie / donuts - - - if (j === null) { - val = f.yLbFormatter(w.globals.series[i], w); - } - - this.DOMHandling({ - t: t, - ttItems: ttItems, - values: { - val: val, - xVal: xVal, - xAxisTTVal: xAxisTTVal, - zVal: zVal - }, - seriesName: seriesName, - shared: shared, - pColor: pColor - }); - } - } - }, { - key: "getFormatters", - value: function getFormatters(i) { - var w = this.w; - var yLbFormatter = w.globals.yLabelFormatters[i]; - var yLbTitleFormatter; - - if (w.globals.ttVal !== undefined) { - if (Array.isArray(w.globals.ttVal)) { - yLbFormatter = w.globals.ttVal[i] && w.globals.ttVal[i].formatter; - yLbTitleFormatter = w.globals.ttVal[i] && w.globals.ttVal[i].title && w.globals.ttVal[i].title.formatter; - } else { - yLbFormatter = w.globals.ttVal.formatter; - - if (typeof w.globals.ttVal.title.formatter === 'function') { - yLbTitleFormatter = w.globals.ttVal.title.formatter; - } - } - } else { - yLbTitleFormatter = w.config.tooltip.y.title.formatter; - } - - if (typeof yLbFormatter !== 'function') { - if (w.globals.yLabelFormatters[0]) { - yLbFormatter = w.globals.yLabelFormatters[0]; - } else { - yLbFormatter = function yLbFormatter(label) { - return label; - }; - } - } - - if (typeof yLbTitleFormatter !== 'function') { - yLbTitleFormatter = function yLbTitleFormatter(label) { - return label; - }; - } - - return { - yLbFormatter: yLbFormatter, - yLbTitleFormatter: yLbTitleFormatter - }; - } - }, { - key: "getSeriesName", - value: function getSeriesName(_ref3) { - var fn = _ref3.fn, - index = _ref3.index, - seriesIndex = _ref3.seriesIndex, - j = _ref3.j; - var w = this.w; - return fn(String(w.globals.seriesNames[index]), { - series: w.globals.series, - seriesIndex: seriesIndex, - dataPointIndex: j, - w: w - }); - } - }, { - key: "DOMHandling", - value: function DOMHandling(_ref4) { - var t = _ref4.t, - ttItems = _ref4.ttItems, - values = _ref4.values, - seriesName = _ref4.seriesName, - shared = _ref4.shared, - pColor = _ref4.pColor; - var w = this.w; - var ttCtx = this.ttCtx; - var val = values.val, - xVal = values.xVal, - xAxisTTVal = values.xAxisTTVal, - zVal = values.zVal; - var ttItemsChildren = null; - ttItemsChildren = ttItems[t].children; - - if (w.config.tooltip.fillSeriesColor) { - // elTooltip.style.backgroundColor = pColor - ttItems[t].style.backgroundColor = pColor; - ttItemsChildren[0].style.display = 'none'; - } - - if (ttCtx.showTooltipTitle) { - if (ttCtx.tooltipTitle === null) { - // get it once if null, and store it in class property - ttCtx.tooltipTitle = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip-title'); - } - - ttCtx.tooltipTitle.innerHTML = xVal; - } // if xaxis tooltip is constructed, we need to replace the innerHTML - - - if (ttCtx.blxaxisTooltip) { - ttCtx.xaxisTooltipText.innerHTML = xAxisTTVal !== '' ? xAxisTTVal : xVal; - } - - var ttYLabel = ttItems[t].querySelector('.apexcharts-tooltip-text-label'); - - if (ttYLabel) { - ttYLabel.innerHTML = seriesName ? seriesName + ': ' : ''; - } - - var ttYVal = ttItems[t].querySelector('.apexcharts-tooltip-text-value'); - - if (ttYVal) { - ttYVal.innerHTML = val; - } - - if (ttItemsChildren[0] && ttItemsChildren[0].classList.contains('apexcharts-tooltip-marker')) { - ttItemsChildren[0].style.backgroundColor = pColor; - } - - if (!w.config.tooltip.marker.show) { - ttItemsChildren[0].style.display = 'none'; - } - - if (zVal !== null) { - var ttZLabel = ttItems[t].querySelector('.apexcharts-tooltip-text-z-label'); - ttZLabel.innerHTML = w.config.tooltip.z.title; - var ttZVal = ttItems[t].querySelector('.apexcharts-tooltip-text-z-value'); - ttZVal.innerHTML = zVal; - } - - if (shared && ttItemsChildren[0]) { - // hide when no Val or series collapsed - if (typeof val === 'undefined' || val === null || w.globals.collapsedSeriesIndices.indexOf(t) > -1) { - ttItemsChildren[0].parentNode.style.display = 'none'; - } else { - ttItemsChildren[0].parentNode.style.display = w.config.tooltip.items.display; - } - } - } - }, { - key: "toggleActiveInactiveSeries", - value: function toggleActiveInactiveSeries(shared) { - var w = this.w; - - if (shared) { - // make all tooltips active - this.tooltipUtil.toggleAllTooltipSeriesGroups('enable'); - } else { - // disable all tooltip text groups - this.tooltipUtil.toggleAllTooltipSeriesGroups('disable'); // enable the first tooltip text group - - var firstTooltipSeriesGroup = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip-series-group'); - - if (firstTooltipSeriesGroup) { - firstTooltipSeriesGroup.classList.add('active'); - firstTooltipSeriesGroup.style.display = w.config.tooltip.items.display; - } - } - } - }, { - key: "getValuesToPrint", - value: function getValuesToPrint(_ref5) { - var i = _ref5.i, - j = _ref5.j; - var w = this.w; - var filteredSeriesX = this.ctx.series.filteredSeriesX(); - var xVal = ''; - var xAxisTTVal = ''; - var zVal = null; - var val = null; - var customFormatterOpts = { - series: w.globals.series, - seriesIndex: i, - dataPointIndex: j, - w: w - }; - var zFormatter = w.globals.ttZFormatter; - - if (j === null) { - val = w.globals.series[i]; - } else { - if (w.globals.isXNumeric) { - xVal = filteredSeriesX[i][j]; - - if (filteredSeriesX[i].length === 0) { - // a series (possibly the first one) might be collapsed, so get the next active index - var firstActiveSeriesIndex = this.tooltipUtil.getFirstActiveXArray(filteredSeriesX); - xVal = filteredSeriesX[firstActiveSeriesIndex][j]; - } - } else { - xVal = typeof w.globals.labels[j] !== 'undefined' ? w.globals.labels[j] : ''; - } - } - - var bufferXVal = xVal; - - if (w.globals.isXNumeric && w.config.xaxis.type === 'datetime') { - var xFormat = new Formatters(this.ctx); - xVal = xFormat.xLabelFormat(w.globals.ttKeyFormatter, bufferXVal); - } else { - xVal = w.globals.xLabelFormatter(bufferXVal, customFormatterOpts); - } // override default x-axis formatter with tooltip formatter - - - if (w.config.tooltip.x.formatter !== undefined) { - xVal = w.globals.ttKeyFormatter(bufferXVal, customFormatterOpts); - } - - if (w.globals.seriesZ.length > 0 && w.globals.seriesZ[0].length > 0) { - zVal = zFormatter(w.globals.seriesZ[i][j], w); - } - - if (typeof w.config.xaxis.tooltip.formatter === 'function') { - xAxisTTVal = w.globals.xaxisTooltipFormatter(bufferXVal, customFormatterOpts); - } else { - xAxisTTVal = xVal; - } - - return { - val: val, - xVal: xVal, - xAxisTTVal: xAxisTTVal, - zVal: zVal - }; - } - }, { - key: "handleCustomTooltip", - value: function handleCustomTooltip(_ref6) { - var i = _ref6.i, - j = _ref6.j; - var w = this.w; - var tooltipEl = this.ttCtx.getElTooltip(); // override everything with a custom html tooltip and replace it - - tooltipEl.innerHTML = w.config.tooltip.custom({ - ctx: this.ctx, - series: w.globals.series, - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - }]); - - return Labels; -}(); - -/** - * ApexCharts Tooltip.Position Class to move the tooltip based on x and y position. - * - * @module Tooltip.Position - **/ - -var Position = -/*#__PURE__*/ -function () { - function Position(tooltipContext) { - _classCallCheck(this, Position); - - this.ttCtx = tooltipContext; - this.ctx = tooltipContext.ctx; - this.w = tooltipContext.w; - } - /** - * This will move the crosshair (the vertical/horz line that moves along with mouse) - * Along with this, this function also calls the xaxisMove function - * @memberof Position - * @param {int} - cx = point's x position, wherever point's x is, you need to move crosshair - */ - - - _createClass(Position, [{ - key: "moveXCrosshairs", - value: function moveXCrosshairs(cx) { - var j = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var ttCtx = this.ttCtx; - var w = this.w; - var xcrosshairs = ttCtx.getElXCrosshairs(); - var x = cx - ttCtx.xcrosshairsWidth / 2; - var tickAmount = w.globals.labels.slice().length; - - if (j !== null) { - x = w.globals.gridWidth / tickAmount * j; - } - - if (w.config.xaxis.crosshairs.width === 'tickWidth' || w.config.xaxis.crosshairs.width === 'barWidth') { - if (x + ttCtx.xcrosshairsWidth > w.globals.gridWidth) { - x = w.globals.gridWidth - ttCtx.xcrosshairsWidth; - } - } else { - if (j !== null) { - x = x + w.globals.gridWidth / tickAmount / 2; - } - } - - if (x < 0) { - x = 0; - } - - if (x > w.globals.gridWidth) { - x = w.globals.gridWidth; - } - - if (xcrosshairs !== null) { - xcrosshairs.setAttribute('x', x); - xcrosshairs.setAttribute('x1', x); - xcrosshairs.setAttribute('x2', x); - xcrosshairs.setAttribute('y2', w.globals.gridHeight); - xcrosshairs.classList.add('active'); - } - - if (ttCtx.blxaxisTooltip) { - var tx = x; - - if (w.config.xaxis.crosshairs.width === 'tickWidth' || w.config.xaxis.crosshairs.width === 'barWidth') { - tx = x + ttCtx.xcrosshairsWidth / 2; - } - - this.moveXAxisTooltip(tx); - } - } - /** - * This will move the crosshair (the vertical/horz line that moves along with mouse) - * Along with this, this function also calls the xaxisMove function - * @memberof Position - * @param {int} - cx = point's x position, wherever point's x is, you need to move crosshair - */ - - }, { - key: "moveYCrosshairs", - value: function moveYCrosshairs(cy) { - var ttCtx = this.ttCtx; - - if (ttCtx.ycrosshairs !== null) { - Graphics.setAttrs(ttCtx.ycrosshairs, { - y1: cy, - y2: cy - }); - Graphics.setAttrs(ttCtx.ycrosshairsHidden, { - y1: cy, - y2: cy - }); - } - } - /** - ** AxisTooltip is the small rectangle which appears on x axis with x value, when user moves - * @memberof Position - * @param {int} - cx = point's x position, wherever point's x is, you need to move - */ - - }, { - key: "moveXAxisTooltip", - value: function moveXAxisTooltip(cx) { - var w = this.w; - var ttCtx = this.ttCtx; - - if (ttCtx.xaxisTooltip !== null) { - ttCtx.xaxisTooltip.classList.add('active'); - var cy = ttCtx.xaxisOffY + w.config.xaxis.tooltip.offsetY + w.globals.translateY + 1 + w.config.xaxis.offsetY; - var xaxisTTText = ttCtx.xaxisTooltip.getBoundingClientRect(); - var xaxisTTTextWidth = xaxisTTText.width; - cx = cx - xaxisTTTextWidth / 2; - - if (!isNaN(cx)) { - cx = cx + w.globals.translateX; - var textRect = 0; - var graphics = new Graphics(this.ctx); - textRect = graphics.getTextRects(ttCtx.xaxisTooltipText.innerHTML); - ttCtx.xaxisTooltipText.style.minWidth = textRect.width + 'px'; - ttCtx.xaxisTooltip.style.left = cx + 'px'; - ttCtx.xaxisTooltip.style.top = cy + 'px'; - } - } - } - }, { - key: "moveYAxisTooltip", - value: function moveYAxisTooltip(index) { - var w = this.w; - var ttCtx = this.ttCtx; - - if (ttCtx.yaxisTTEls === null) { - ttCtx.yaxisTTEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxistooltip'); - } - - var ycrosshairsHiddenRectY1 = parseInt(ttCtx.ycrosshairsHidden.getAttribute('y1')); - var cy = w.globals.translateY + ycrosshairsHiddenRectY1; - var yAxisTTRect = ttCtx.yaxisTTEls[index].getBoundingClientRect(); - var yAxisTTHeight = yAxisTTRect.height; - var cx = w.globals.translateYAxisX[index] - 2; - - if (w.config.yaxis[index].opposite) { - cx = cx - 26; - } - - cy = cy - yAxisTTHeight / 2; - - if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1) { - ttCtx.yaxisTTEls[index].classList.add('active'); - ttCtx.yaxisTTEls[index].style.top = cy + 'px'; - ttCtx.yaxisTTEls[index].style.left = cx + w.config.yaxis[index].tooltip.offsetX + 'px'; - } else { - ttCtx.yaxisTTEls[index].classList.remove('active'); - } - } - /** - ** moves the whole tooltip by changing x, y attrs - * @memberof Position - * @param {int} - cx = point's x position, wherever point's x is, you need to move tooltip - * @param {int} - cy = point's y position, wherever point's y is, you need to move tooltip - * @param {int} - r = point's radius - */ - - }, { - key: "moveTooltip", - value: function moveTooltip(cx, cy) { - var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var w = this.w; - var ttCtx = this.ttCtx; - var tooltipEl = ttCtx.getElTooltip(); - var tooltipRect = ttCtx.tooltipRect; - var pointR = r !== null ? parseInt(r) : 1; - var x = parseInt(cx) + pointR + 5; - var y = parseInt(cy) + pointR / 2; // - tooltipRect.ttHeight / 2 - - if (x > w.globals.gridWidth / 2) { - x = x - tooltipRect.ttWidth - pointR - 15; - } - - if (x > w.globals.gridWidth - tooltipRect.ttWidth - 10) { - x = w.globals.gridWidth - tooltipRect.ttWidth; - } - - if (x < -20) { - x = -20; - } - - if (w.config.tooltip.followCursor) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top - tooltipRect.ttHeight / 2; - } - - var newPositions = this.positionChecks(tooltipRect, x, y); - x = newPositions.x; - y = newPositions.y; - - if (!isNaN(x)) { - x = x + w.globals.translateX; - tooltipEl.style.left = x + 'px'; - tooltipEl.style.top = y + 'px'; - } - } - }, { - key: "positionChecks", - value: function positionChecks(tooltipRect, x, y) { - var w = this.w; - - if (tooltipRect.ttHeight + y > w.globals.gridHeight) { - y = w.globals.gridHeight - tooltipRect.ttHeight + w.globals.translateY; - } - - if (y < 0) { - y = 0; - } - - return { - x: x, - y: y - }; - } - }, { - key: "moveMarkers", - value: function moveMarkers(i, j) { - var w = this.w; - var ttCtx = this.ttCtx; - - if (w.globals.markers.size[i] > 0) { - var allPoints = w.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(i, "'] .apexcharts-marker")); - - for (var p = 0; p < allPoints.length; p++) { - if (parseInt(allPoints[p].getAttribute('rel')) === j) { - ttCtx.marker.resetPointsSize(); - ttCtx.marker.enlargeCurrentPoint(j, allPoints[p]); - } - } - } else { - ttCtx.marker.resetPointsSize(); - this.moveDynamicPointOnHover(j, i); - } - } // This function is used when you need to show markers/points only on hover - - // DIFFERENT X VALUES in multiple series - - }, { - key: "moveDynamicPointOnHover", - value: function moveDynamicPointOnHover(j, capturedSeries) { - var w = this.w; - var ttCtx = this.ttCtx; - var cx = 0; - var cy = 0; - var pointsArr = w.globals.pointsArray; - var hoverSize = w.config.markers.hover.size; - - if (hoverSize === undefined) { - hoverSize = w.globals.markers.size[capturedSeries] + w.config.markers.hover.sizeOffset; - } - - cx = pointsArr[capturedSeries][j][0]; - cy = pointsArr[capturedSeries][j][1] ? pointsArr[capturedSeries][j][1] : 0; - var point = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(capturedSeries, "'] .apexcharts-series-markers circle")); - - if (point) { - point.setAttribute('r', hoverSize); - point.setAttribute('cx', cx); - point.setAttribute('cy', cy); - } // point.style.opacity = w.config.markers.hover.opacity - - - this.moveXCrosshairs(cx); - - if (!ttCtx.fixedTooltip) { - this.moveTooltip(cx, cy, hoverSize); - } - } // This function is used when you need to show markers/points only on hover - - // SAME X VALUES in multiple series - - }, { - key: "moveDynamicPointsOnHover", - value: function moveDynamicPointsOnHover(j) { - var ttCtx = this.ttCtx; - var w = ttCtx.w; - var cx = 0; - var cy = 0; - var activeSeries = 0; - var pointsArr = w.globals.pointsArray; - var series = new Series(this.ctx); - activeSeries = series.getActiveSeriesIndex(); - var hoverSize = w.config.markers.hover.size; - - if (hoverSize === undefined) { - hoverSize = w.globals.markers.size[activeSeries] + w.config.markers.hover.sizeOffset; - } - - if (pointsArr[activeSeries]) { - cx = pointsArr[activeSeries][j][0]; - cy = pointsArr[activeSeries][j][1]; - } - - var points = null; - var allPoints = ttCtx.getAllMarkers(); - - if (allPoints !== null) { - points = allPoints; - } else { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers circle'); - } - - if (points !== null) { - for (var p = 0; p < points.length; p++) { - var pointArr = pointsArr[p]; - - if (pointArr && pointArr.length) { - var pcy = pointsArr[p][j][1]; - points[p].setAttribute('cx', cx); - var realIndex = parseInt(points[p].parentNode.parentNode.parentNode.getAttribute('data:realIndex')); - - if (pcy !== null) { - points[realIndex] && points[realIndex].setAttribute('r', hoverSize); - points[realIndex] && points[realIndex].setAttribute('cy', pcy); - } else { - points[realIndex] && points[realIndex].setAttribute('r', 0); - } - } - } - } - - this.moveXCrosshairs(cx); - - if (!ttCtx.fixedTooltip) { - var tcy = cy || w.globals.gridHeight; - this.moveTooltip(cx, tcy, hoverSize); - } - } - }, { - key: "moveStickyTooltipOverBars", - value: function moveStickyTooltipOverBars(j) { - var w = this.w; - var ttCtx = this.ttCtx; - var jBar = w.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='1'] path[j='".concat(j, "'], .apexcharts-candlestick-series .apexcharts-series[rel='1'] path[j='").concat(j, "'], .apexcharts-rangebar-series .apexcharts-series[rel='1'] path[j='").concat(j, "']")); - var bcx = jBar ? parseFloat(jBar.getAttribute('cx')) : 0; - var bcy = 0; - var bw = jBar ? parseFloat(jBar.getAttribute('barWidth')) : 0; - - if (w.globals.isXNumeric) { - bcx = bcx - bw / 2; - } else { - bcx = ttCtx.xAxisTicksPositions[j - 1] + ttCtx.dataPointsDividedWidth / 2; - - if (isNaN(bcx)) { - bcx = ttCtx.xAxisTicksPositions[j] - ttCtx.dataPointsDividedWidth / 2; - } - } // tooltip will move vertically along with mouse as it is a shared tooltip - - - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - bcy = ttCtx.e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2; - this.moveXCrosshairs(bcx); - - if (!ttCtx.fixedTooltip) { - var tcy = bcy || w.globals.gridHeight; - this.moveTooltip(bcx, tcy); - } - } - }]); - - return Position; -}(); - -/** - * ApexCharts Tooltip.Marker Class to draw texts on the tooltip. - * - * @module Tooltip.Marker - **/ - -var Marker = -/*#__PURE__*/ -function () { - function Marker(tooltipContext) { - _classCallCheck(this, Marker); - - this.w = tooltipContext.w; - this.ttCtx = tooltipContext; - this.ctx = tooltipContext.ctx; - this.tooltipPosition = new Position(tooltipContext); - } - - _createClass(Marker, [{ - key: "drawDynamicPoints", - value: function drawDynamicPoints() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var marker = new Markers(this.ctx); - var elsSeries = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series'); - - for (var i = 0; i < elsSeries.length; i++) { - var seriesIndex = parseInt(elsSeries[i].getAttribute('data:realIndex')); - var pointsMain = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(seriesIndex, "'] .apexcharts-series-markers-wrap")); - - if (pointsMain !== null) { - // it can be null as we have tooltips in donut/bar charts - var point = void 0; - var PointClasses = "apexcharts-marker w".concat((Math.random() + 1).toString(36).substring(4)); - - if ((w.config.chart.type === 'line' || w.config.chart.type === 'area') && !w.globals.comboCharts && !w.config.tooltip.intersect) { - PointClasses += ' no-pointer-events'; - } - - var elPointOptions = marker.getMarkerConfig(PointClasses, seriesIndex); - point = graphics.drawMarker(0, 0, elPointOptions); - point.node.setAttribute('default-marker-size', 0); - var elPointsG = document.createElementNS(w.globals.SVGNS, 'g'); - elPointsG.classList.add('apexcharts-series-markers'); - elPointsG.appendChild(point.node); - pointsMain.appendChild(elPointsG); - } - } - } - }, { - key: "enlargeCurrentPoint", - value: function enlargeCurrentPoint(rel, point) { - var x = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var y = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var w = this.w; - - if (w.config.chart.type !== 'bubble') { - this.newPointSize(rel, point); - } - - var cx = point.getAttribute('cx'); - var cy = point.getAttribute('cy'); - - if (x !== null && y !== null) { - cx = x; - cy = y; - } - - this.tooltipPosition.moveXCrosshairs(cx); - - if (!this.fixedTooltip) { - if (w.config.chart.type === 'radar') { - var elGrid = this.ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - cx = this.ttCtx.e.clientX - seriesBound.left; - } - - this.tooltipPosition.moveTooltip(cx, cy, w.config.markers.hover.size); - } - } - }, { - key: "enlargePoints", - value: function enlargePoints(j) { - var w = this.w; - var me = this; - var ttCtx = this.ttCtx; - var col = j; - var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker'); - var newSize = w.config.markers.hover.size; - - for (var p = 0; p < points.length; p++) { - var rel = points[p].getAttribute('rel'); - var index = points[p].getAttribute('index'); - - if (newSize === undefined) { - newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset; - } - - if (col === parseInt(rel)) { - me.newPointSize(col, points[p]); - var cx = points[p].getAttribute('cx'); - var cy = points[p].getAttribute('cy'); - me.tooltipPosition.moveXCrosshairs(cx); - - if (!ttCtx.fixedTooltip) { - me.tooltipPosition.moveTooltip(cx, cy, newSize); - } - } else { - me.oldPointSize(points[p]); - } - } - } - }, { - key: "newPointSize", - value: function newPointSize(rel, point) { - var w = this.w; - var newSize = w.config.markers.hover.size; - var elPoint = null; - - if (rel === 0) { - elPoint = point.parentNode.firstChild; - } else { - elPoint = point.parentNode.lastChild; - } - - var index = parseInt(elPoint.getAttribute('index')); - - if (newSize === undefined) { - newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset; - } - - elPoint.setAttribute('r', newSize); - } - }, { - key: "oldPointSize", - value: function oldPointSize(point) { - var size = parseInt(point.getAttribute('default-marker-size')); - point.setAttribute('r', size); - } - }, { - key: "resetPointsSize", - value: function resetPointsSize() { - var w = this.w; - var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker'); - - for (var p = 0; p < points.length; p++) { - var size = parseInt(points[p].getAttribute('default-marker-size')); - - if (Utils.isNumber(size)) { - points[p].setAttribute('r', size); - } else { - points[p].setAttribute('r', 0); - } - } - } - }]); - - return Marker; -}(); - -/** - * ApexCharts Tooltip.Intersect Class. - * - * @module Tooltip.Intersect - **/ - -var Intersect = -/*#__PURE__*/ -function () { - function Intersect(tooltipContext) { - _classCallCheck(this, Intersect); - - this.w = tooltipContext.w; - this.ttCtx = tooltipContext; - } - - _createClass(Intersect, [{ - key: "getAttr", - value: function getAttr(e, attr) { - return parseFloat(e.target.getAttribute(attr)); - } - }, { - key: "handleHeatTooltip", - value: function handleHeatTooltip(_ref) { - var e = _ref.e, - opt = _ref.opt, - x = _ref.x, - y = _ref.y; - var ttCtx = this.ttCtx; - var w = this.w; - - if (e.target.classList.contains('apexcharts-heatmap-rect')) { - var i = this.getAttr(e, 'i'); - var j = this.getAttr(e, 'j'); - var cx = this.getAttr(e, 'cx'); - var cy = this.getAttr(e, 'cy'); - var width = this.getAttr(e, 'width'); - var height = this.getAttr(e, 'height'); - ttCtx.tooltipLabels.drawSeriesTexts({ - ttItems: opt.ttItems, - i: i, - j: j, - shared: false - }); - x = cx + ttCtx.tooltipRect.ttWidth / 2 + width; - y = cy + ttCtx.tooltipRect.ttHeight / 2 - height / 2; - ttCtx.tooltipPosition.moveXCrosshairs(cx + width / 2); - - if (x > w.globals.gridWidth / 2) { - x = cx - ttCtx.tooltipRect.ttWidth / 2 + width; - } - - if (ttCtx.w.config.tooltip.followCursor) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); // x = ttCtx.e.clientX - seriesBound.left - - y = ttCtx.e.clientY - seriesBound.top + w.globals.translateY / 2 - 10; - } - } - - return { - x: x, - y: y - }; - } - }, { - key: "handleMarkerTooltip", - value: function handleMarkerTooltip(_ref2) { - var e = _ref2.e, - opt = _ref2.opt, - x = _ref2.x, - y = _ref2.y; - var w = this.w; - var ttCtx = this.ttCtx; - var i; - var j; - - if (e.target.classList.contains('apexcharts-marker')) { - var cx = parseInt(opt.paths.getAttribute('cx')); - var cy = parseInt(opt.paths.getAttribute('cy')); - var val = parseFloat(opt.paths.getAttribute('val')); - j = parseInt(opt.paths.getAttribute('rel')); - i = parseInt(opt.paths.parentNode.parentNode.parentNode.getAttribute('rel')) - 1; - - if (ttCtx.intersect) { - var el = Utils.findAncestor(opt.paths, 'apexcharts-series'); - - if (el) { - i = parseInt(el.getAttribute('data:realIndex')); - } - } - - ttCtx.tooltipLabels.drawSeriesTexts({ - ttItems: opt.ttItems, - i: i, - j: j, - shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared - }); - - if (e.type === 'mouseup') { - ttCtx.markerClick(e, i, j); - } - - x = cx; - y = cy + w.globals.translateY - ttCtx.tooltipRect.ttHeight * 1.4; - - if (ttCtx.w.config.tooltip.followCursor) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top; - } - - if (val < 0) { - y = cy; - } - - ttCtx.marker.enlargeCurrentPoint(j, opt.paths, x, y); - } - - return { - x: x, - y: y - }; - } - }, { - key: "handleBarTooltip", - value: function handleBarTooltip(_ref3) { - var e = _ref3.e, - opt = _ref3.opt; - var w = this.w; - var ttCtx = this.ttCtx; - var tooltipEl = ttCtx.getElTooltip(); - var bx = 0; - var x = 0; - var y = 0; // let bW = 0 - - var i = 0; - var strokeWidth; - var barXY = this.getBarTooltipXY({ - e: e, - opt: opt - }); - i = barXY.i; - var barHeight = barXY.barHeight; - var j = barXY.j; - - if (w.globals.isBarHorizontal && ttCtx.hasBars() || !w.config.tooltip.shared) { - x = barXY.x; - y = barXY.y; - strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width; // bW = barXY.barWidth - - bx = x; - } else { - if (!w.globals.comboCharts && !w.config.tooltip.shared) { - bx = bx / 2; - } - } // y is NaN, make it touch the bottom of grid area - - - if (isNaN(y)) { - y = w.globals.svgHeight - ttCtx.tooltipRect.ttHeight; - } // x exceeds gridWidth - - - if (x + ttCtx.tooltipRect.ttWidth > w.globals.gridWidth) { - x = x - ttCtx.tooltipRect.ttWidth; - } else if (x < 0) { - x = x + ttCtx.tooltipRect.ttWidth; - } - - if (ttCtx.w.config.tooltip.followCursor) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY - seriesBound.top; - } // if tooltip is still null, querySelector - - - if (ttCtx.tooltip === null) { - ttCtx.tooltip = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip'); - } - - if (!w.config.tooltip.shared) { - if (w.globals.comboChartsHasBars) { - ttCtx.tooltipPosition.moveXCrosshairs(bx + strokeWidth / 2); - } else { - ttCtx.tooltipPosition.moveXCrosshairs(bx); - } - } // move tooltip here - - - if (!ttCtx.fixedTooltip && (!w.config.tooltip.shared || w.globals.isBarHorizontal && ttCtx.hasBars())) { - if (isReversed) { - x = w.globals.gridWidth - x; - } - - tooltipEl.style.left = x + w.globals.translateX + 'px'; - var seriesIndex = parseInt(opt.paths.parentNode.getAttribute('data:realIndex')); - var isReversed = w.globals.isMultipleYAxis ? w.config.yaxis[seriesIndex] && w.config.yaxis[seriesIndex].reversed : w.config.yaxis[0].reversed; - - if (isReversed && !(w.globals.isBarHorizontal && ttCtx.hasBars())) { - y = y + barHeight - (w.globals.series[i][j] < 0 ? barHeight : 0) * 2; - } - - if (ttCtx.tooltipRect.ttHeight + y > w.globals.gridHeight) { - y = w.globals.gridHeight - ttCtx.tooltipRect.ttHeight + w.globals.translateY; - tooltipEl.style.top = y + 'px'; - } else { - tooltipEl.style.top = y + w.globals.translateY - ttCtx.tooltipRect.ttHeight / 2 + 'px'; - } - } - } - }, { - key: "getBarTooltipXY", - value: function getBarTooltipXY(_ref4) { - var e = _ref4.e, - opt = _ref4.opt; - var w = this.w; - var j = null; - var ttCtx = this.ttCtx; - var i = 0; - var x = 0; - var y = 0; - var barWidth = 0; - var barHeight = 0; - var cl = e.target.classList; - - if (cl.contains('apexcharts-bar-area') || cl.contains('apexcharts-candlestick-area') || cl.contains('apexcharts-rangebar-area')) { - var bar = e.target; - var barRect = bar.getBoundingClientRect(); - var seriesBound = opt.elGrid.getBoundingClientRect(); - var bh = barRect.height; - barHeight = barRect.height; - var bw = barRect.width; - var cx = parseInt(bar.getAttribute('cx')); - var cy = parseInt(bar.getAttribute('cy')); - barWidth = parseFloat(bar.getAttribute('barWidth')); - var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; - j = parseInt(bar.getAttribute('j')); - i = parseInt(bar.parentNode.getAttribute('rel')) - 1; - - if (w.globals.comboCharts) { - i = parseInt(bar.parentNode.getAttribute('data:realIndex')); - } // if (w.config.tooltip.shared) { - // this check not needed at the moment - // const yDivisor = w.globals.gridHeight / (w.globals.series.length) - // const hoverY = ttCtx.clientY - ttCtx.seriesBound.top - // j = Math.ceil(hoverY / yDivisor) - // } - - - ttCtx.tooltipLabels.drawSeriesTexts({ - ttItems: opt.ttItems, - i: i, - j: j, - shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared - }); - - if (w.config.tooltip.followCursor) { - if (w.globals.isBarHorizontal) { - x = clientX - seriesBound.left + 15; - y = cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2; - } else { - if (w.globals.isXNumeric) { - x = cx - bw / 2; - } else { - x = cx - ttCtx.dataPointsDividedWidth + bw / 2; - } - - y = e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2 - 15; - } - } else { - if (w.globals.isBarHorizontal) { - x = cx; - - if (x < ttCtx.xyRatios.baseLineInvertedY) { - x = cx - ttCtx.tooltipRect.ttWidth; - } - - y = cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2; - } else { - // if columns - if (w.globals.isXNumeric) { - x = cx - bw / 2; - } else { - x = cx - ttCtx.dataPointsDividedWidth + bw / 2; - } - - y = cy; // - ttCtx.tooltipRect.ttHeight / 2 + 10 - } - } - } - - return { - x: x, - y: y, - barHeight: barHeight, - barWidth: barWidth, - i: i, - j: j - }; - } - }]); - - return Intersect; -}(); - -/** - * ApexCharts Tooltip.AxesTooltip Class. - * - * @module Tooltip.AxesTooltip - **/ -var AxesTooltip = -/*#__PURE__*/ -function () { - function AxesTooltip(tooltipContext) { - _classCallCheck(this, AxesTooltip); - - this.w = tooltipContext.w; - this.ttCtx = tooltipContext; - } - /** - * This method adds the secondary tooltip which appears below x axis - * @memberof Tooltip - **/ - - - _createClass(AxesTooltip, [{ - key: "drawXaxisTooltip", - value: function drawXaxisTooltip() { - var w = this.w; - var ttCtx = this.ttCtx; - var isBottom = w.config.xaxis.position === 'bottom'; - ttCtx.xaxisOffY = isBottom ? w.globals.gridHeight + 1 : 1; - var tooltipCssClass = isBottom ? 'apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom' : 'apexcharts-xaxistooltip apexcharts-xaxistooltip-top'; - var renderTo = w.globals.dom.elWrap; - - if (ttCtx.blxaxisTooltip) { - var xaxisTooltip = w.globals.dom.baseEl.querySelector('.apexcharts-xaxistooltip'); - - if (xaxisTooltip === null) { - ttCtx.xaxisTooltip = document.createElement('div'); - ttCtx.xaxisTooltip.setAttribute('class', tooltipCssClass + ' ' + w.config.tooltip.theme); - renderTo.appendChild(ttCtx.xaxisTooltip); - ttCtx.xaxisTooltipText = document.createElement('div'); - ttCtx.xaxisTooltipText.classList.add('apexcharts-xaxistooltip-text'); - ttCtx.xaxisTooltipText.style.fontFamily = w.config.xaxis.tooltip.style.fontFamily || w.config.chart.fontFamily; - ttCtx.xaxisTooltipText.style.fontSize = w.config.xaxis.tooltip.style.fontSize; - ttCtx.xaxisTooltip.appendChild(ttCtx.xaxisTooltipText); - } - } - } - /** - * This method adds the secondary tooltip which appears below x axis - * @memberof Tooltip - **/ - - }, { - key: "drawYaxisTooltip", - value: function drawYaxisTooltip() { - var w = this.w; - var ttCtx = this.ttCtx; - - for (var i = 0; i < w.config.yaxis.length; i++) { - var isRight = w.config.yaxis[i].opposite || w.config.yaxis[i].crosshairs.opposite; - ttCtx.yaxisOffX = isRight ? w.globals.gridWidth + 1 : 1; - var tooltipCssClass = isRight ? "apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i, " apexcharts-yaxistooltip-right") : "apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i, " apexcharts-yaxistooltip-left"); - var renderTo = w.globals.dom.elWrap; - - if (ttCtx.blyaxisTooltip) { - var yaxisTooltip = w.globals.dom.baseEl.querySelector(".apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i)); - - if (yaxisTooltip === null) { - ttCtx.yaxisTooltip = document.createElement('div'); - ttCtx.yaxisTooltip.setAttribute('class', tooltipCssClass + ' ' + w.config.tooltip.theme); - renderTo.appendChild(ttCtx.yaxisTooltip); - if (i === 0) ttCtx.yaxisTooltipText = []; - ttCtx.yaxisTooltipText.push(document.createElement('div')); - ttCtx.yaxisTooltipText[i].classList.add('apexcharts-yaxistooltip-text'); - ttCtx.yaxisTooltip.appendChild(ttCtx.yaxisTooltipText[i]); - } - } - } - } - /** - * @memberof Tooltip - **/ - - }, { - key: "setXCrosshairWidth", - value: function setXCrosshairWidth() { - var w = this.w; - var ttCtx = this.ttCtx; // set xcrosshairs width - - var xcrosshairs = ttCtx.getElXCrosshairs(); - ttCtx.xcrosshairsWidth = parseInt(w.config.xaxis.crosshairs.width); - - if (!w.globals.comboCharts) { - if (w.config.xaxis.crosshairs.width === 'tickWidth') { - var count = w.globals.labels.length; - ttCtx.xcrosshairsWidth = w.globals.gridWidth / count; - } else if (w.config.xaxis.crosshairs.width === 'barWidth') { - var bar = w.globals.dom.baseEl.querySelector('.apexcharts-bar-area'); - - if (bar !== null) { - var barWidth = parseFloat(bar.getAttribute('barWidth')); - ttCtx.xcrosshairsWidth = barWidth; - } else { - ttCtx.xcrosshairsWidth = 1; - } - } - } else { - var _bar = w.globals.dom.baseEl.querySelector('.apexcharts-bar-area'); - - if (_bar !== null && w.config.xaxis.crosshairs.width === 'barWidth') { - var _barWidth = parseFloat(_bar.getAttribute('barWidth')); - - ttCtx.xcrosshairsWidth = _barWidth; - } else { - if (w.config.xaxis.crosshairs.width === 'tickWidth') { - var _count = w.globals.labels.length; - ttCtx.xcrosshairsWidth = w.globals.gridWidth / _count; - } - } - } - - if (w.globals.isBarHorizontal) { - ttCtx.xcrosshairsWidth = 0; - } - - if (xcrosshairs !== null && ttCtx.xcrosshairsWidth > 0) { - xcrosshairs.setAttribute('width', ttCtx.xcrosshairsWidth); - } - } - }, { - key: "handleYCrosshair", - value: function handleYCrosshair() { - var w = this.w; - var ttCtx = this.ttCtx; // set ycrosshairs height - - ttCtx.ycrosshairs = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs'); - ttCtx.ycrosshairsHidden = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs-hidden'); - } - }, { - key: "drawYaxisTooltipText", - value: function drawYaxisTooltipText(index, clientY, xyRatios) { - var ttCtx = this.ttCtx; - var w = this.w; - var lbFormatter = w.globals.yLabelFormatters[index]; - - if (ttCtx.blyaxisTooltip) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - var hoverY = (clientY - seriesBound.top) * xyRatios.yRatio[index]; - var height = w.globals.maxYArr[index] - w.globals.minYArr[index]; - var val = w.globals.minYArr[index] + (height - hoverY); - ttCtx.tooltipPosition.moveYCrosshairs(clientY - seriesBound.top); - ttCtx.yaxisTooltipText[index].innerHTML = lbFormatter(val); - ttCtx.tooltipPosition.moveYAxisTooltip(index); - } - } - }]); - - return AxesTooltip; -}(); - -/** - * ApexCharts Core Tooltip Class to handle the tooltip generation. - * - * @module Tooltip - **/ - -var Tooltip = -/*#__PURE__*/ -function () { - function Tooltip(ctx) { - _classCallCheck(this, Tooltip); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.tConfig = w.config.tooltip; - this.tooltipUtil = new Utils$1(this); - this.tooltipLabels = new Labels(this); - this.tooltipPosition = new Position(this); - this.marker = new Marker(this); - this.intersect = new Intersect(this); - this.axesTooltip = new AxesTooltip(this); - this.showOnIntersect = this.tConfig.intersect; - this.showTooltipTitle = this.tConfig.x.show; - this.fixedTooltip = this.tConfig.fixed.enabled; - this.xaxisTooltip = null; - this.yaxisTTEls = null; - this.isBarShared = !w.globals.isBarHorizontal && this.tConfig.shared; - } - - _createClass(Tooltip, [{ - key: "getElTooltip", - value: function getElTooltip(ctx) { - if (!ctx) ctx = this; - return ctx.w.globals.dom.baseEl.querySelector('.apexcharts-tooltip'); - } - }, { - key: "getElXCrosshairs", - value: function getElXCrosshairs() { - return this.w.globals.dom.baseEl.querySelector('.apexcharts-xcrosshairs'); - } - }, { - key: "getElGrid", - value: function getElGrid() { - return this.w.globals.dom.baseEl.querySelector('.apexcharts-grid'); - } - }, { - key: "drawTooltip", - value: function drawTooltip(xyRatios) { - var w = this.w; - this.xyRatios = xyRatios; - this.blxaxisTooltip = w.config.xaxis.tooltip.enabled && w.globals.axisCharts; - this.blyaxisTooltip = w.config.yaxis[0].tooltip.enabled && w.globals.axisCharts; - this.allTooltipSeriesGroups = []; - - if (!w.globals.axisCharts) { - this.showTooltipTitle = false; - } - - var tooltipEl = document.createElement('div'); - tooltipEl.classList.add('apexcharts-tooltip'); - tooltipEl.classList.add(this.tConfig.theme); - w.globals.dom.elWrap.appendChild(tooltipEl); - - if (w.globals.axisCharts) { - this.axesTooltip.drawXaxisTooltip(); - this.axesTooltip.drawYaxisTooltip(); - this.axesTooltip.setXCrosshairWidth(); - this.axesTooltip.handleYCrosshair(); - var xAxis = new XAxis(this.ctx); - this.xAxisTicksPositions = xAxis.getXAxisTicksPositions(); - } // we forcefully set intersect true for these conditions - - - if (w.globals.comboCharts && !this.tConfig.shared || this.tConfig.intersect && !this.tConfig.shared || (w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') && !this.tConfig.shared) { - this.showOnIntersect = true; - } - - if (w.config.markers.size === 0 || w.globals.markers.largestSize === 0) { - // when user don't want to show points all the time, but only on when hovering on series - this.marker.drawDynamicPoints(this); - } // no visible series, exit - - - if (w.globals.collapsedSeries.length === w.globals.series.length) return; - this.dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints; - this.dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints; - - if (this.showTooltipTitle) { - this.tooltipTitle = document.createElement('div'); - this.tooltipTitle.classList.add('apexcharts-tooltip-title'); - this.tooltipTitle.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily; - this.tooltipTitle.style.fontSize = this.tConfig.style.fontSize; - tooltipEl.appendChild(this.tooltipTitle); - } - - var ttItemsCnt = w.globals.series.length; // whether shared or not, default is shared - - if ((w.globals.xyCharts || w.globals.comboCharts) && this.tConfig.shared) { - if (!this.showOnIntersect) { - ttItemsCnt = w.globals.series.length; - } else { - ttItemsCnt = 1; - } - } - - this.ttItems = this.createTTElements(ttItemsCnt); - this.addSVGEvents(); - } - }, { - key: "createTTElements", - value: function createTTElements(ttItemsCnt) { - var w = this.w; - var ttItems = []; - var tooltipEl = this.getElTooltip(); - - for (var i = 0; i < ttItemsCnt; i++) { - var gTxt = document.createElement('div'); - gTxt.classList.add('apexcharts-tooltip-series-group'); - - if (this.tConfig.shared && this.tConfig.enabledOnSeries && Array.isArray(this.tConfig.enabledOnSeries)) { - if (this.tConfig.enabledOnSeries.indexOf(i) < 0) { - gTxt.classList.add('apexcharts-tooltip-series-group-hidden'); - } - } - - var point = document.createElement('span'); - point.classList.add('apexcharts-tooltip-marker'); - point.style.backgroundColor = w.globals.colors[i]; - gTxt.appendChild(point); - var gYZ = document.createElement('div'); - gYZ.classList.add('apexcharts-tooltip-text'); - gYZ.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily; - gYZ.style.fontSize = this.tConfig.style.fontSize; // y values group - - var gYValText = document.createElement('div'); - gYValText.classList.add('apexcharts-tooltip-y-group'); - var txtLabel = document.createElement('span'); - txtLabel.classList.add('apexcharts-tooltip-text-label'); - gYValText.appendChild(txtLabel); - var txtValue = document.createElement('span'); - txtValue.classList.add('apexcharts-tooltip-text-value'); - gYValText.appendChild(txtValue); // z values group - - var gZValText = document.createElement('div'); - gZValText.classList.add('apexcharts-tooltip-z-group'); - var txtZLabel = document.createElement('span'); - txtZLabel.classList.add('apexcharts-tooltip-text-z-label'); - gZValText.appendChild(txtZLabel); - var txtZValue = document.createElement('span'); - txtZValue.classList.add('apexcharts-tooltip-text-z-value'); - gZValText.appendChild(txtZValue); - gYZ.appendChild(gYValText); - gYZ.appendChild(gZValText); - gTxt.appendChild(gYZ); - tooltipEl.appendChild(gTxt); - ttItems.push(gTxt); - } - - return ttItems; - } - }, { - key: "addSVGEvents", - value: function addSVGEvents() { - var w = this.w; - var type = w.config.chart.type; - var tooltipEl = this.getElTooltip(); - var commonBar = !!(type === 'bar' || type === 'candlestick' || type === 'rangeBar'); - var hoverArea = w.globals.dom.Paper.node; - var elGrid = this.getElGrid(); - - if (elGrid) { - this.seriesBound = elGrid.getBoundingClientRect(); - } - - var tooltipY = []; - var tooltipX = []; - var seriesHoverParams = { - hoverArea: hoverArea, - elGrid: elGrid, - tooltipEl: tooltipEl, - tooltipY: tooltipY, - tooltipX: tooltipX, - ttItems: this.ttItems - }; - var points; - - if (w.globals.axisCharts) { - if (type === 'area' || type === 'line' || type === 'scatter' || type === 'bubble') { - points = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:longestSeries='true'] .apexcharts-marker"); - } else if (commonBar) { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-rangebar-area'); - } else if (type === 'heatmap') { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-heatmap'); - } else if (type === 'radar') { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-marker'); - } - - if (points && points.length) { - for (var p = 0; p < points.length; p++) { - tooltipY.push(points[p].getAttribute('cy')); - tooltipX.push(points[p].getAttribute('cx')); - } - } - } - - var validSharedChartTypes = w.globals.xyCharts && !this.showOnIntersect || w.globals.comboCharts && !this.showOnIntersect || commonBar && this.hasBars() && this.tConfig.shared; - - if (validSharedChartTypes) { - this.addPathsEventListeners([hoverArea], seriesHoverParams); - } else if (commonBar && !w.globals.comboCharts) { - this.addBarsEventListeners(seriesHoverParams); - } else if (type === 'bubble' || type === 'scatter' || type === 'radar' || this.showOnIntersect && (type === 'area' || type === 'line')) { - this.addPointsEventsListeners(seriesHoverParams); - } else if (!w.globals.axisCharts || type === 'heatmap') { - var seriesAll = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series'); - this.addPathsEventListeners(seriesAll, seriesHoverParams); - } - - if (this.showOnIntersect) { - var linePoints = w.globals.dom.baseEl.querySelectorAll('.apexcharts-line-series .apexcharts-marker'); - - if (linePoints.length > 0) { - // if we find any lineSeries, addEventListeners for them - this.addPathsEventListeners(linePoints, seriesHoverParams); - } - - var areaPoints = w.globals.dom.baseEl.querySelectorAll('.apexcharts-area-series .apexcharts-marker'); - - if (areaPoints.length > 0) { - // if we find any areaSeries, addEventListeners for them - this.addPathsEventListeners(areaPoints, seriesHoverParams); - } // combo charts may have bars, so add event listeners here too - - - if (this.hasBars() && !this.tConfig.shared) { - this.addBarsEventListeners(seriesHoverParams); - } - } - } - }, { - key: "drawFixedTooltipRect", - value: function drawFixedTooltipRect() { - var w = this.w; - var tooltipEl = this.getElTooltip(); - var tooltipRect = tooltipEl.getBoundingClientRect(); - var ttWidth = tooltipRect.width + 10; - var ttHeight = tooltipRect.height + 10; - var x = this.tConfig.fixed.offsetX; - var y = this.tConfig.fixed.offsetY; - - if (this.tConfig.fixed.position.toLowerCase().indexOf('right') > -1) { - x = x + w.globals.svgWidth - ttWidth + 10; - } - - if (this.tConfig.fixed.position.toLowerCase().indexOf('bottom') > -1) { - y = y + w.globals.svgHeight - ttHeight - 10; - } - - tooltipEl.style.left = x + 'px'; - tooltipEl.style.top = y + 'px'; - return { - x: x, - y: y, - ttWidth: ttWidth, - ttHeight: ttHeight - }; - } - }, { - key: "addPointsEventsListeners", - value: function addPointsEventsListeners(seriesHoverParams) { - var w = this.w; - var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers .apexcharts-marker'); - this.addPathsEventListeners(points, seriesHoverParams); - } - }, { - key: "addBarsEventListeners", - value: function addBarsEventListeners(seriesHoverParams) { - var w = this.w; - var bars = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-rangebar-area'); - this.addPathsEventListeners(bars, seriesHoverParams); - } - }, { - key: "addPathsEventListeners", - value: function addPathsEventListeners(paths, opts) { - var _this = this; - - var self = this; - - var _loop = function _loop(p) { - var extendedOpts = { - paths: paths[p], - tooltipEl: opts.tooltipEl, - tooltipY: opts.tooltipY, - tooltipX: opts.tooltipX, - elGrid: opts.elGrid, - hoverArea: opts.hoverArea, - ttItems: opts.ttItems - }; - _this.w.globals.tooltipOpts = extendedOpts; - var events = ['mousemove', 'mouseup', 'touchmove', 'mouseout', 'touchend']; - events.map(function (ev) { - return paths[p].addEventListener(ev, self.seriesHover.bind(self, extendedOpts), { - capture: false, - passive: true - }); - }); - }; - - for (var p = 0; p < paths.length; p++) { - _loop(p); - } - } - /* - ** The actual series hover function - */ - - }, { - key: "seriesHover", - value: function seriesHover(opt, e) { - var _this2 = this; - - var chartGroups = []; - var w = this.w; // if user has more than one charts in group, we need to sync - - if (w.config.chart.group) { - chartGroups = this.ctx.getGroupedCharts(); - } - - if (w.globals.axisCharts && (w.globals.minX === -Infinity && w.globals.maxX === Infinity || w.globals.dataPoints === 0)) { - return; - } - - if (chartGroups.length) { - chartGroups.forEach(function (ch) { - var tooltipEl = _this2.getElTooltip(ch); - - var newOpts = { - paths: opt.paths, - tooltipEl: tooltipEl, - tooltipY: opt.tooltipY, - tooltipX: opt.tooltipX, - elGrid: opt.elGrid, - hoverArea: opt.hoverArea, - ttItems: ch.w.globals.tooltip.ttItems // all the charts should have the same minX and maxX (same xaxis) for multiple tooltips to work correctly - - }; - - if (ch.w.globals.minX === _this2.w.globals.minX && ch.w.globals.maxX === _this2.w.globals.maxX) { - ch.w.globals.tooltip.seriesHoverByContext({ - chartCtx: ch, - ttCtx: ch.w.globals.tooltip, - opt: newOpts, - e: e - }); - } - }); - } else { - this.seriesHoverByContext({ - chartCtx: this.ctx, - ttCtx: this.w.globals.tooltip, - opt: opt, - e: e - }); - } - } - }, { - key: "seriesHoverByContext", - value: function seriesHoverByContext(_ref) { - var chartCtx = _ref.chartCtx, - ttCtx = _ref.ttCtx, - opt = _ref.opt, - e = _ref.e; - var w = chartCtx.w; - var tooltipEl = this.getElTooltip(); // tooltipRect is calculated on every mousemove, because the text is dynamic - - ttCtx.tooltipRect = { - x: 0, - y: 0, - ttWidth: tooltipEl.getBoundingClientRect().width, - ttHeight: tooltipEl.getBoundingClientRect().height - }; - ttCtx.e = e; // highlight the current hovered bars - - if (ttCtx.hasBars() && !w.globals.comboCharts && !ttCtx.isBarShared) { - if (this.tConfig.onDatasetHover.highlightDataSeries) { - var series = new Series(chartCtx); - series.toggleSeriesOnHover(e, e.target.parentNode); - } - } - - if (ttCtx.fixedTooltip) { - ttCtx.drawFixedTooltipRect(); - } - - if (w.globals.axisCharts) { - ttCtx.axisChartsTooltips({ - e: e, - opt: opt, - tooltipRect: ttCtx.tooltipRect - }); - } else { - // non-plot charts i.e pie/donut/circle - ttCtx.nonAxisChartsTooltips({ - e: e, - opt: opt, - tooltipRect: ttCtx.tooltipRect - }); - } - } // tooltip handling for line/area/bar/columns/scatter - - }, { - key: "axisChartsTooltips", - value: function axisChartsTooltips(_ref2) { - var e = _ref2.e, - opt = _ref2.opt; - var w = this.w; - var j, x, y; - var self = this; - var capj = null; - var seriesBound = opt.elGrid.getBoundingClientRect(); - var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; - var clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY; - this.clientY = clientY; - this.clientX = clientX; - - if (clientY < seriesBound.top || clientY > seriesBound.top + seriesBound.height) { - self.handleMouseOut(opt); - return; - } - - if (Array.isArray(this.tConfig.enabledOnSeries)) { - var index = parseInt(opt.paths.getAttribute('index')); - - if (this.tConfig.enabledOnSeries.indexOf(index) < 0) { - self.handleMouseOut(opt); - return; - } - } - - var tooltipEl = this.getElTooltip(); - var xcrosshairs = this.getElXCrosshairs(); - var isStickyTooltip = w.globals.xyCharts || w.config.chart.type === 'bar' && !w.globals.isBarHorizontal && this.hasBars() && this.tConfig.shared || w.globals.comboCharts && this.hasBars; - - if (w.globals.isBarHorizontal && this.hasBars()) { - isStickyTooltip = false; - } - - if (e.type === 'mousemove' || e.type === 'touchmove' || e.type === 'mouseup') { - if (xcrosshairs !== null) { - xcrosshairs.classList.add('active'); - } - - if (self.ycrosshairs !== null && self.blyaxisTooltip) { - self.ycrosshairs.classList.add('active'); - } - - if (isStickyTooltip && !self.showOnIntersect) { - capj = self.tooltipUtil.getNearestValues({ - context: self, - hoverArea: opt.hoverArea, - elGrid: opt.elGrid, - clientX: clientX, - clientY: clientY, - hasBars: self.hasBars - }); - j = capj.j; - var capturedSeries = capj.capturedSeries; - - if (capj.hoverX < 0 || capj.hoverX > w.globals.gridWidth) { - self.handleMouseOut(opt); - return; - } - - if (capturedSeries !== null) { - var ignoreNull = w.globals.series[capturedSeries][j] === null; - - if (ignoreNull) { - opt.tooltipEl.classList.remove('active'); - return; - } - - if (typeof w.globals.series[capturedSeries][j] !== 'undefined') { - if (this.tConfig.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isinitialSeriesSameLen()) { - this.create(e, self, capturedSeries, j, opt.ttItems); - } else { - this.create(e, self, capturedSeries, j, opt.ttItems, false); - } - } else { - if (this.tooltipUtil.isXoverlap(j)) { - self.create(e, self, 0, j, opt.ttItems); - } - } - } else { - // couldn't capture any series. check if shared X is same, - // if yes, draw a grouped tooltip - if (this.tooltipUtil.isXoverlap(j)) { - self.create(e, self, 0, j, opt.ttItems); - } - } - } else { - if (w.config.chart.type === 'heatmap') { - var markerXY = this.intersect.handleHeatTooltip({ - e: e, - opt: opt, - x: x, - y: y - }); - x = markerXY.x; - y = markerXY.y; - tooltipEl.style.left = x + 'px'; - tooltipEl.style.top = y + 'px'; - } else { - if (this.hasBars) { - this.intersect.handleBarTooltip({ - e: e, - opt: opt - }); - } - - if (this.hasMarkers) { - // intersect - line/area/scatter/bubble - this.intersect.handleMarkerTooltip({ - e: e, - opt: opt, - x: x, - y: y - }); - } - } - } - - if (this.blyaxisTooltip) { - for (var yt = 0; yt < w.config.yaxis.length; yt++) { - self.axesTooltip.drawYaxisTooltipText(yt, clientY, self.xyRatios); - } - } - - opt.tooltipEl.classList.add('active'); - } else if (e.type === 'mouseout' || e.type === 'touchend') { - this.handleMouseOut(opt); - } - } // tooltip handling for pie/donuts - - }, { - key: "nonAxisChartsTooltips", - value: function nonAxisChartsTooltips(_ref3) { - var e = _ref3.e, - opt = _ref3.opt, - tooltipRect = _ref3.tooltipRect; - var w = this.w; - var rel = opt.paths.getAttribute('rel'); - var tooltipEl = this.getElTooltip(); - var seriesBound = w.globals.dom.elWrap.getBoundingClientRect(); - - if (e.type === 'mousemove' || e.type === 'touchmove') { - tooltipEl.classList.add('active'); - this.tooltipLabels.drawSeriesTexts({ - ttItems: opt.ttItems, - i: parseInt(rel) - 1, - shared: false - }); - var x = w.globals.clientX - seriesBound.left - tooltipRect.ttWidth / 2; - var y = w.globals.clientY - seriesBound.top - tooltipRect.ttHeight - 10; - tooltipEl.style.left = x + 'px'; - tooltipEl.style.top = y + 'px'; - } else if (e.type === 'mouseout' || e.type === 'touchend') { - tooltipEl.classList.remove('active'); - } - } - }, { - key: "deactivateHoverFilter", - value: function deactivateHoverFilter() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var allPaths = w.globals.dom.Paper.select(".apexcharts-bar-area"); - - for (var b = 0; b < allPaths.length; b++) { - graphics.pathMouseLeave(allPaths[b]); - } - } - }, { - key: "handleMouseOut", - value: function handleMouseOut(opt) { - var w = this.w; - var xcrosshairs = this.getElXCrosshairs(); - opt.tooltipEl.classList.remove('active'); - this.deactivateHoverFilter(); - - if (w.config.chart.type !== 'bubble') { - this.marker.resetPointsSize(); - } - - if (xcrosshairs !== null) { - xcrosshairs.classList.remove('active'); - } - - if (this.ycrosshairs !== null) { - this.ycrosshairs.classList.remove('active'); - } - - if (this.blxaxisTooltip) { - this.xaxisTooltip.classList.remove('active'); - } - - if (this.blyaxisTooltip) { - if (this.yaxisTTEls === null) { - this.yaxisTTEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxistooltip'); - } - - for (var i = 0; i < this.yaxisTTEls.length; i++) { - this.yaxisTTEls[i].classList.remove('active'); - } - } - } - }, { - key: "getElMarkers", - value: function getElMarkers() { - return this.w.globals.dom.baseEl.querySelectorAll(' .apexcharts-series-markers'); - } - }, { - key: "getAllMarkers", - value: function getAllMarkers() { - return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers .apexcharts-marker'); - } - }, { - key: "hasMarkers", - value: function hasMarkers() { - var markers = this.getElMarkers(); - return markers.length > 0; - } - }, { - key: "getElBars", - value: function getElBars() { - return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-rangebar-series'); - } - }, { - key: "hasBars", - value: function hasBars() { - var bars = this.getElBars(); - return bars.length > 0; - } - }, { - key: "markerClick", - value: function markerClick(e, seriesIndex, dataPointIndex) { - var w = this.w; - - if (typeof w.config.chart.events.markerClick === 'function') { - w.config.chart.events.markerClick(e, this.ctx, { - seriesIndex: seriesIndex, - dataPointIndex: dataPointIndex, - w: w - }); - } - - this.ctx.fireEvent('markerClick', [e, this.ctx, { - seriesIndex: seriesIndex, - dataPointIndex: dataPointIndex, - w: w - }]); - } - }, { - key: "create", - value: function create(e, context, capturedSeries, j, ttItems) { - var shared = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; - var w = this.w; - var ttCtx = context; - - if (e.type === 'mouseup') { - this.markerClick(e, capturedSeries, j); - } - - if (shared === null) shared = this.tConfig.shared; - var hasMarkers = this.hasMarkers(); - var bars = this.getElBars(); - - if (shared) { - ttCtx.tooltipLabels.drawSeriesTexts({ - ttItems: ttItems, - i: capturedSeries, - j: j, - shared: this.showOnIntersect ? false : this.tConfig.shared - }); - - if (hasMarkers) { - if (w.globals.markers.largestSize > 0) { - ttCtx.marker.enlargePoints(j); - } else { - ttCtx.tooltipPosition.moveDynamicPointsOnHover(j); - } - } - - if (this.hasBars()) { - this.barSeriesHeight = this.tooltipUtil.getBarsHeight(bars); - - if (this.barSeriesHeight > 0) { - // hover state, activate snap filter - var graphics = new Graphics(this.ctx); - var paths = w.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(j, "']")); // de-activate first - - this.deactivateHoverFilter(); - this.tooltipPosition.moveStickyTooltipOverBars(j); - - for (var b = 0; b < paths.length; b++) { - graphics.pathMouseEnter(paths[b]); - } - } - } - } else { - ttCtx.tooltipLabels.drawSeriesTexts({ - shared: false, - ttItems: ttItems, - i: capturedSeries, - j: j - }); - - if (this.hasBars()) { - ttCtx.tooltipPosition.moveStickyTooltipOverBars(j); - } - - if (hasMarkers) { - ttCtx.tooltipPosition.moveMarkers(capturedSeries, j); - } - } - } - }]); - - return Tooltip; -}(); - -var icoPan = "\n \n \n \n \n \n \n \n"; - -var icoZoom = "\n \n \n \n"; - -var icoReset = "\n \n \n"; - -var icoZoomIn = "\n \n \n\n"; - -var icoZoomOut = "\n \n \n\n"; - -var icoSelect = "\n \n \n"; - -var icoMenu = ""; - -/** - * ApexCharts Toolbar Class for creating toolbar in axis based charts. - * - * @module Toolbar - **/ - -var Toolbar = -/*#__PURE__*/ -function () { - function Toolbar(ctx) { - _classCallCheck(this, Toolbar); - - this.ctx = ctx; - this.w = ctx.w; - this.ev = this.w.config.chart.events; - this.localeValues = this.w.globals.locale.toolbar; - } - - _createClass(Toolbar, [{ - key: "createToolbar", - value: function createToolbar() { - var w = this.w; - var elToolbarWrap = document.createElement('div'); - elToolbarWrap.setAttribute('class', 'apexcharts-toolbar'); - w.globals.dom.elWrap.appendChild(elToolbarWrap); - this.elZoom = document.createElement('div'); - this.elZoomIn = document.createElement('div'); - this.elZoomOut = document.createElement('div'); - this.elPan = document.createElement('div'); - this.elSelection = document.createElement('div'); - this.elZoomReset = document.createElement('div'); - this.elMenuIcon = document.createElement('div'); - this.elMenu = document.createElement('div'); - this.elCustomIcons = []; - this.t = w.config.chart.toolbar.tools; - - if (Array.isArray(this.t.customIcons)) { - for (var i = 0; i < this.t.customIcons.length; i++) { - this.elCustomIcons.push(document.createElement('div')); - } - } - - this.elMenuItems = []; - var toolbarControls = []; - - if (this.t.zoomin && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: this.elZoomIn, - icon: typeof this.t.zoomin === 'string' ? this.t.zoomin : icoZoomIn, - title: this.localeValues.zoomIn, - class: 'apexcharts-zoom-in-icon' - }); - } - - if (this.t.zoomout && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: this.elZoomOut, - icon: typeof this.t.zoomout === 'string' ? this.t.zoomout : icoZoomOut, - title: this.localeValues.zoomOut, - class: 'apexcharts-zoom-out-icon' - }); - } - - if (this.t.zoom && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: this.elZoom, - icon: typeof this.t.zoom === 'string' ? this.t.zoom : icoZoom, - title: this.localeValues.selectionZoom, - class: w.globals.isTouchDevice ? 'hidden' : 'apexcharts-zoom-icon' - }); - } - - if (this.t.selection && w.config.chart.selection.enabled) { - toolbarControls.push({ - el: this.elSelection, - icon: typeof this.t.selection === 'string' ? this.t.selection : icoSelect, - title: this.localeValues.selection, - class: w.globals.isTouchDevice ? 'hidden' : 'apexcharts-selection-icon' - }); - } - - if (this.t.pan && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: this.elPan, - icon: typeof this.t.pan === 'string' ? this.t.pan : icoPan, - title: this.localeValues.pan, - class: w.globals.isTouchDevice ? 'hidden' : 'apexcharts-pan-icon' - }); - } - - if (this.t.reset && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: this.elZoomReset, - icon: typeof this.t.reset === 'string' ? this.t.reset : icoReset, - title: this.localeValues.reset, - class: 'apexcharts-reset-zoom-icon' - }); - } - - if (this.t.download) { - toolbarControls.push({ - el: this.elMenuIcon, - icon: typeof this.t.download === 'string' ? this.t.download : icoMenu, - title: this.localeValues.menu, - class: 'apexcharts-menu-icon' - }); - } - - for (var _i = 0; _i < this.elCustomIcons.length; _i++) { - toolbarControls.push({ - el: this.elCustomIcons[_i], - icon: this.t.customIcons[_i].icon, - title: this.t.customIcons[_i].title, - index: this.t.customIcons[_i].index, - class: 'apexcharts-toolbar-custom-icon ' + this.t.customIcons[_i].class - }); - } - - toolbarControls.forEach(function (t, index) { - if (t.index) { - Utils.moveIndexInArray(toolbarControls, index, t.index); - } - }); - - for (var _i2 = 0; _i2 < toolbarControls.length; _i2++) { - Graphics.setAttrs(toolbarControls[_i2].el, { - class: toolbarControls[_i2].class, - title: toolbarControls[_i2].title - }); - toolbarControls[_i2].el.innerHTML = toolbarControls[_i2].icon; - elToolbarWrap.appendChild(toolbarControls[_i2].el); - } - - elToolbarWrap.appendChild(this.elMenu); - Graphics.setAttrs(this.elMenu, { - class: 'apexcharts-menu' - }); - var menuItems = [{ - name: 'exportSVG', - title: this.localeValues.exportToSVG - }, { - name: 'exportPNG', - title: this.localeValues.exportToPNG - }]; - - for (var _i3 = 0; _i3 < menuItems.length; _i3++) { - this.elMenuItems.push(document.createElement('div')); - this.elMenuItems[_i3].innerHTML = menuItems[_i3].title; - Graphics.setAttrs(this.elMenuItems[_i3], { - class: "apexcharts-menu-item ".concat(menuItems[_i3].name), - title: menuItems[_i3].title - }); - this.elMenu.appendChild(this.elMenuItems[_i3]); - } - - if (w.globals.zoomEnabled) { - this.elZoom.classList.add('selected'); - } else if (w.globals.panEnabled) { - this.elPan.classList.add('selected'); - } else if (w.globals.selectionEnabled) { - this.elSelection.classList.add('selected'); - } - - this.addToolbarEventListeners(); - } - }, { - key: "addToolbarEventListeners", - value: function addToolbarEventListeners() { - var _this = this; - - this.elZoomReset.addEventListener('click', this.handleZoomReset.bind(this)); - this.elSelection.addEventListener('click', this.toggleSelection.bind(this)); - this.elZoom.addEventListener('click', this.toggleZooming.bind(this)); - this.elZoomIn.addEventListener('click', this.handleZoomIn.bind(this)); - this.elZoomOut.addEventListener('click', this.handleZoomOut.bind(this)); - this.elPan.addEventListener('click', this.togglePanning.bind(this)); - this.elMenuIcon.addEventListener('click', this.toggleMenu.bind(this)); - this.elMenuItems.forEach(function (m) { - if (m.classList.contains('exportSVG')) { - m.addEventListener('click', _this.downloadSVG.bind(_this)); - } else if (m.classList.contains('exportPNG')) { - m.addEventListener('click', _this.downloadPNG.bind(_this)); - } - }); - - for (var i = 0; i < this.t.customIcons.length; i++) { - this.elCustomIcons[i].addEventListener('click', this.t.customIcons[i].click); - } - } - }, { - key: "toggleSelection", - value: function toggleSelection() { - this.toggleOtherControls(); - this.w.globals.selectionEnabled = !this.w.globals.selectionEnabled; - - if (!this.elSelection.classList.contains('selected')) { - this.elSelection.classList.add('selected'); - } else { - this.elSelection.classList.remove('selected'); - } - } - }, { - key: "toggleZooming", - value: function toggleZooming() { - this.toggleOtherControls(); - this.w.globals.zoomEnabled = !this.w.globals.zoomEnabled; - - if (!this.elZoom.classList.contains('selected')) { - this.elZoom.classList.add('selected'); - } else { - this.elZoom.classList.remove('selected'); - } - } - }, { - key: "getToolbarIconsReference", - value: function getToolbarIconsReference() { - var w = this.w; - - if (!this.elZoom) { - this.elZoom = w.globals.dom.baseEl.querySelector('.apexcharts-zoom-icon'); - } - - if (!this.elPan) { - this.elPan = w.globals.dom.baseEl.querySelector('.apexcharts-pan-icon'); - } - - if (!this.elSelection) { - this.elSelection = w.globals.dom.baseEl.querySelector('.apexcharts-selection-icon'); - } - } - }, { - key: "enableZooming", - value: function enableZooming() { - this.toggleOtherControls(); - this.w.globals.zoomEnabled = true; - - if (this.elZoom) { - this.elZoom.classList.add('selected'); - } - - if (this.elPan) { - this.elPan.classList.remove('selected'); - } - } - }, { - key: "enablePanning", - value: function enablePanning() { - this.toggleOtherControls(); - this.w.globals.panEnabled = true; - - if (this.elPan) { - this.elPan.classList.add('selected'); - } - - if (this.elZoom) { - this.elZoom.classList.remove('selected'); - } - } - }, { - key: "togglePanning", - value: function togglePanning() { - this.toggleOtherControls(); - this.w.globals.panEnabled = !this.w.globals.panEnabled; - - if (!this.elPan.classList.contains('selected')) { - this.elPan.classList.add('selected'); - } else { - this.elPan.classList.remove('selected'); - } - } - }, { - key: "toggleOtherControls", - value: function toggleOtherControls() { - var w = this.w; - w.globals.panEnabled = false; - w.globals.zoomEnabled = false; - w.globals.selectionEnabled = false; - this.getToolbarIconsReference(); - - if (this.elPan) { - this.elPan.classList.remove('selected'); - } - - if (this.elSelection) { - this.elSelection.classList.remove('selected'); - } - - if (this.elZoom) { - this.elZoom.classList.remove('selected'); - } - } - }, { - key: "handleZoomIn", - value: function handleZoomIn() { - var w = this.w; - var centerX = (w.globals.minX + w.globals.maxX) / 2; - var newMinX = (w.globals.minX + centerX) / 2; - var newMaxX = (w.globals.maxX + centerX) / 2; - - if (!w.globals.disableZoomIn) { - this.zoomUpdateOptions(newMinX, newMaxX); - } - } - }, { - key: "handleZoomOut", - value: function handleZoomOut() { - var w = this.w; // avoid zooming out beyond 1000 which may result in NaN values being printed on x-axis - - if (w.config.xaxis.type === 'datetime' && new Date(w.globals.minX).getUTCFullYear() < 1000) { - return; - } - - var centerX = (w.globals.minX + w.globals.maxX) / 2; - var newMinX = w.globals.minX - (centerX - w.globals.minX); - var newMaxX = w.globals.maxX - (centerX - w.globals.maxX); - - if (!w.globals.disableZoomOut) { - this.zoomUpdateOptions(newMinX, newMaxX); - } - } - }, { - key: "zoomUpdateOptions", - value: function zoomUpdateOptions(newMinX, newMaxX) { - var xaxis = { - min: newMinX, - max: newMaxX - }; - var beforeZoomRange = this.getBeforeZoomRange(xaxis); - - if (beforeZoomRange) { - xaxis = beforeZoomRange.xaxis; - } - - this.w.globals.zoomed = true; - - this.ctx._updateOptions({ - xaxis: xaxis - }, false, this.w.config.chart.animations.dynamicAnimation.enabled); - - this.zoomCallback(xaxis); - } - }, { - key: "zoomCallback", - value: function zoomCallback(xaxis, yaxis) { - if (typeof this.ev.zoomed === 'function') { - this.ev.zoomed(this.ctx, { - xaxis: xaxis, - yaxis: yaxis - }); - } - } - }, { - key: "getBeforeZoomRange", - value: function getBeforeZoomRange(xaxis, yaxis) { - var newRange = null; - - if (typeof this.ev.beforeZoom === 'function') { - newRange = this.ev.beforeZoom(this, { - xaxis: xaxis, - yaxis: yaxis - }); - } - - return newRange; - } - }, { - key: "toggleMenu", - value: function toggleMenu() { - if (this.elMenu.classList.contains('open')) { - this.elMenu.classList.remove('open'); - } else { - this.elMenu.classList.add('open'); - } - } - }, { - key: "downloadPNG", - value: function downloadPNG() { - var downloadPNG = new Exports(this.ctx); - downloadPNG.exportToPng(this.ctx); - this.toggleMenu(); - } - }, { - key: "downloadSVG", - value: function downloadSVG() { - var downloadSVG = new Exports(this.ctx); - downloadSVG.exportToSVG(); - this.toggleMenu(); - } - }, { - key: "handleZoomReset", - value: function handleZoomReset(e) { - var _this2 = this; - - var charts = this.ctx.getSyncedCharts(); - charts.forEach(function (ch) { - var w = ch.w; - - if (w.globals.minX !== w.globals.initialminX && w.globals.maxX !== w.globals.initialmaxX) { - ch.revertDefaultAxisMinMax(); - - if (typeof w.config.chart.events.zoomed === 'function') { - _this2.zoomCallback({ - min: w.config.xaxis.min, - max: w.config.xaxis.max - }); - } - - w.globals.zoomed = false; - - ch._updateSeries(w.globals.initialSeries, w.config.chart.animations.dynamicAnimation.enabled); - } - }); - } - }, { - key: "destroy", - value: function destroy() { - if (this.elZoomReset) { - this.elZoomReset.removeEventListener('click', this.handleZoomReset.bind(this)); - this.elSelection.removeEventListener('click', this.toggleSelection.bind(this)); - this.elZoom.removeEventListener('click', this.toggleZooming.bind(this)); - this.elZoomIn.removeEventListener('click', this.handleZoomIn.bind(this)); - this.elZoomOut.removeEventListener('click', this.handleZoomOut.bind(this)); - this.elPan.removeEventListener('click', this.togglePanning.bind(this)); - this.elMenuIcon.removeEventListener('click', this.toggleMenu.bind(this)); - } - - this.elZoom = null; - this.elZoomIn = null; - this.elZoomOut = null; - this.elPan = null; - this.elSelection = null; - this.elZoomReset = null; - this.elMenuIcon = null; - } - }]); - - return Toolbar; -}(); - -/** - * ApexCharts Zoom Class for handling zooming and panning on axes based charts. - * - * @module ZoomPanSelection - **/ - -var ZoomPanSelection = -/*#__PURE__*/ -function (_Toolbar) { - _inherits(ZoomPanSelection, _Toolbar); - - function ZoomPanSelection(ctx) { - var _this; - - _classCallCheck(this, ZoomPanSelection); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(ZoomPanSelection).call(this, ctx)); - _this.ctx = ctx; - _this.w = ctx.w; - _this.dragged = false; - _this.graphics = new Graphics(_this.ctx); - _this.eventList = ['mousedown', 'mousemove', 'touchstart', 'touchmove', 'mouseup', 'touchend']; - _this.clientX = 0; - _this.clientY = 0; - _this.startX = 0; - _this.endX = 0; - _this.dragX = 0; - _this.startY = 0; - _this.endY = 0; - _this.dragY = 0; - return _this; - } - - _createClass(ZoomPanSelection, [{ - key: "init", - value: function init(_ref) { - var _this2 = this; - - var xyRatios = _ref.xyRatios; - var w = this.w; - var me = this; - this.xyRatios = xyRatios; - this.zoomRect = this.graphics.drawRect(0, 0, 0, 0); - this.selectionRect = this.graphics.drawRect(0, 0, 0, 0); - this.gridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid'); - this.zoomRect.node.classList.add('apexcharts-zoom-rect'); - this.selectionRect.node.classList.add('apexcharts-selection-rect'); - w.globals.dom.elGraphical.add(this.zoomRect); - w.globals.dom.elGraphical.add(this.selectionRect); - - if (w.config.chart.selection.type === 'x') { - this.slDraggableRect = this.selectionRect.draggable({ - minX: 0, - minY: 0, - maxX: w.globals.gridWidth, - maxY: w.globals.gridHeight - }).on('dragmove', this.selectionDragging.bind(this, 'dragging')); - } else if (w.config.chart.selection.type === 'y') { - this.slDraggableRect = this.selectionRect.draggable({ - minX: 0, - maxX: w.globals.gridWidth - }).on('dragmove', this.selectionDragging.bind(this, 'dragging')); - } else { - this.slDraggableRect = this.selectionRect.draggable().on('dragmove', this.selectionDragging.bind(this, 'dragging')); - } - - this.preselectedSelection(); - this.hoverArea = w.globals.dom.baseEl.querySelector(w.globals.chartClass); - this.hoverArea.classList.add('zoomable'); - this.eventList.forEach(function (event) { - _this2.hoverArea.addEventListener(event, me.svgMouseEvents.bind(me, xyRatios), { - capture: false, - passive: true - }); - }); - } // remove the event listeners which were previously added on hover area - - }, { - key: "destroy", - value: function destroy() { - var _this3 = this; - - var me = this; - this.eventList.forEach(function (event) { - if (_this3.hoverArea) { - _this3.hoverArea.removeEventListener(event, me.svgMouseEvents.bind(me, me.xyRatios), { - capture: false, - passive: true - }); - } - }); - - if (this.slDraggableRect) { - this.slDraggableRect.draggable(false); - this.slDraggableRect.off(); - this.selectionRect.off(); - } - - this.selectionRect = null; - this.zoomRect = null; - this.gridRect = null; - } - }, { - key: "svgMouseEvents", - value: function svgMouseEvents(xyRatios, e) { - var w = this.w; - var me = this; - var toolbar = this.ctx.toolbar; - var zoomtype = w.globals.zoomEnabled ? w.config.chart.zoom.type : w.config.chart.selection.type; - - if (e.shiftKey) { - this.shiftWasPressed = true; - toolbar.enablePanning(); - } else { - if (this.shiftWasPressed) { - toolbar.enableZooming(); - this.shiftWasPressed = false; - } - } - - var falsePositives = e.target.classList.contains('apexcharts-selection-rect') || e.target.parentNode.classList.contains('apexcharts-toolbar'); - if (falsePositives) return; - me.clientX = e.type === 'touchmove' || e.type === 'touchstart' ? e.touches[0].clientX : e.type === 'touchend' ? e.changedTouches[0].clientX : e.clientX; - me.clientY = e.type === 'touchmove' || e.type === 'touchstart' ? e.touches[0].clientY : e.type === 'touchend' ? e.changedTouches[0].clientY : e.clientY; - - if (e.type === 'mousedown' && e.which === 1) { - var gridRectDim = me.gridRect.getBoundingClientRect(); - me.startX = me.clientX - gridRectDim.left; - me.startY = me.clientY - gridRectDim.top; - me.dragged = false; - me.w.globals.mousedown = true; - } - - if (e.type === 'mousemove' && e.which === 1 || e.type === 'touchmove') { - me.dragged = true; - - if (w.globals.panEnabled) { - w.globals.selection = null; - - if (me.w.globals.mousedown) { - me.panDragging({ - context: me, - zoomtype: zoomtype, - xyRatios: xyRatios - }); - } - } else { - if (me.w.globals.mousedown && w.globals.zoomEnabled || me.w.globals.mousedown && w.globals.selectionEnabled) { - me.selection = me.selectionDrawing({ - context: me, - zoomtype: zoomtype - }); - } - } - } - - if (e.type === 'mouseup' || e.type === 'touchend') { - // we will be calling getBoundingClientRect on each mousedown/mousemove/mouseup - var _gridRectDim = me.gridRect.getBoundingClientRect(); - - if (me.w.globals.mousedown) { - // user released the drag, now do all the calculations - me.endX = me.clientX - _gridRectDim.left; - me.endY = me.clientY - _gridRectDim.top; - me.dragX = Math.abs(me.endX - me.startX); - me.dragY = Math.abs(me.endY - me.startY); - - if (w.globals.zoomEnabled || w.globals.selectionEnabled) { - me.selectionDrawn({ - context: me, - zoomtype: zoomtype - }); - } - } - - if (w.globals.zoomEnabled) { - me.hideSelectionRect(this.selectionRect); - } - - me.dragged = false; - me.w.globals.mousedown = false; - } - - this.makeSelectionRectDraggable(); - } - }, { - key: "makeSelectionRectDraggable", - value: function makeSelectionRectDraggable() { - var w = this.w; - if (!this.selectionRect) return; - var rectDim = this.selectionRect.node.getBoundingClientRect(); - - if (rectDim.width > 0 && rectDim.height > 0) { - this.slDraggableRect.selectize().resize({ - constraint: { - minX: 0, - minY: 0, - maxX: w.globals.gridWidth, - maxY: w.globals.gridHeight - } - }).on('resizing', this.selectionDragging.bind(this, 'resizing')); - } - } - }, { - key: "preselectedSelection", - value: function preselectedSelection() { - var w = this.w; - var xyRatios = this.xyRatios; - - if (!w.globals.zoomEnabled) { - if (typeof w.globals.selection !== 'undefined' && w.globals.selection !== null) { - this.drawSelectionRect(w.globals.selection); - } else { - if (w.config.chart.selection.xaxis.min !== undefined && w.config.chart.selection.xaxis.max !== undefined) { - var x = (w.config.chart.selection.xaxis.min - w.globals.minX) / xyRatios.xRatio; - var width = w.globals.gridWidth - (w.globals.maxX - w.config.chart.selection.xaxis.max) / xyRatios.xRatio - x; - var selectionRect = { - x: x, - y: 0, - width: width, - height: w.globals.gridHeight, - translateX: 0, - translateY: 0, - selectionEnabled: true - }; - this.drawSelectionRect(selectionRect); - this.makeSelectionRectDraggable(); - - if (typeof w.config.chart.events.selection === 'function') { - w.config.chart.events.selection(this.ctx, { - xaxis: { - min: w.config.chart.selection.xaxis.min, - max: w.config.chart.selection.xaxis.max - }, - yaxis: {} - }); - } - } - } - } - } - }, { - key: "drawSelectionRect", - value: function drawSelectionRect(_ref2) { - var x = _ref2.x, - y = _ref2.y, - width = _ref2.width, - height = _ref2.height, - translateX = _ref2.translateX, - translateY = _ref2.translateY; - var w = this.w; - var zoomRect = this.zoomRect; - var selectionRect = this.selectionRect; - - if (this.dragged || w.globals.selection !== null) { - var scalingAttrs = { - transform: 'translate(' + translateX + ', ' + translateY + ')' // change styles based on zoom or selection - // zoom is Enabled and user has dragged, so draw blue rect - - }; - - if (w.globals.zoomEnabled && this.dragged) { - zoomRect.attr({ - x: x, - y: y, - width: width, - height: height, - fill: w.config.chart.zoom.zoomedArea.fill.color, - 'fill-opacity': w.config.chart.zoom.zoomedArea.fill.opacity, - stroke: w.config.chart.zoom.zoomedArea.stroke.color, - 'stroke-width': w.config.chart.zoom.zoomedArea.stroke.width, - 'stroke-opacity': w.config.chart.zoom.zoomedArea.stroke.opacity - }); - Graphics.setAttrs(zoomRect.node, scalingAttrs); - } // selection is enabled - - - if (w.globals.selectionEnabled) { - selectionRect.attr({ - x: x, - y: y, - width: width > 0 ? width : 0, - height: height > 0 ? height : 0, - fill: w.config.chart.selection.fill.color, - 'fill-opacity': w.config.chart.selection.fill.opacity, - stroke: w.config.chart.selection.stroke.color, - 'stroke-width': w.config.chart.selection.stroke.width, - 'stroke-dasharray': w.config.chart.selection.stroke.dashArray, - 'stroke-opacity': w.config.chart.selection.stroke.opacity - }); - Graphics.setAttrs(selectionRect.node, scalingAttrs); - } - } - } - }, { - key: "hideSelectionRect", - value: function hideSelectionRect(rect) { - if (rect) { - rect.attr({ - x: 0, - y: 0, - width: 0, - height: 0 - }); - } - } - }, { - key: "selectionDrawing", - value: function selectionDrawing(_ref3) { - var context = _ref3.context, - zoomtype = _ref3.zoomtype; - var w = this.w; - var me = context; - var gridRectDim = this.gridRect.getBoundingClientRect(); - var startX = me.startX - 1; - var startY = me.startY; - var selectionWidth = me.clientX - gridRectDim.left - startX; - var selectionHeight = me.clientY - gridRectDim.top - startY; - var translateX = 0; - var translateY = 0; - var selectionRect = {}; - - if (Math.abs(selectionWidth + startX) > w.globals.gridWidth || me.clientX - gridRectDim.left < 0) { - // user dragged the mouse outside drawing area - // TODO: test the selectionRect and make sure it doesn't crosses drawing area - me.hideSelectionRect(this.zoomRect); - me.dragged = false; - me.w.globals.mousedown = false; - } // inverse selection X - - - if (startX > me.clientX - gridRectDim.left) { - selectionWidth = Math.abs(selectionWidth); - translateX = -selectionWidth; - } // inverse selection Y - - - if (startY > me.clientY - gridRectDim.top) { - selectionHeight = Math.abs(selectionHeight); - translateY = -selectionHeight; - } - - if (zoomtype === 'x') { - selectionRect = { - x: startX, - y: 0, - width: selectionWidth, - height: w.globals.gridHeight, - translateX: translateX, - translateY: 0 - }; - } else if (zoomtype === 'y') { - selectionRect = { - x: 0, - y: startY, - width: w.globals.gridWidth, - height: selectionHeight, - translateX: 0, - translateY: translateY - }; - } else { - selectionRect = { - x: startX, - y: startY, - width: selectionWidth, - height: selectionHeight, - translateX: translateX, - translateY: translateY - }; - } - - me.drawSelectionRect(selectionRect); - me.selectionDragging('resizing'); - return selectionRect; - } - }, { - key: "selectionDragging", - value: function selectionDragging(type, e) { - var _this4 = this; - - var w = this.w; - var xyRatios = this.xyRatios; - var selRect = this.selectionRect; - var timerInterval = 0; - - if (type === 'resizing') { - timerInterval = 30; - } - - if (typeof w.config.chart.events.selection === 'function' && w.globals.selectionEnabled) { - // a small debouncer is required when resizing to avoid freezing the chart - clearTimeout(this.w.globals.selectionResizeTimer); - this.w.globals.selectionResizeTimer = window.setTimeout(function () { - var gridRectDim = _this4.gridRect.getBoundingClientRect(); - - var selectionRect = selRect.node.getBoundingClientRect(); - var minX = w.globals.xAxisScale.niceMin + (selectionRect.left - gridRectDim.left) * xyRatios.xRatio; - var maxX = w.globals.xAxisScale.niceMin + (selectionRect.right - gridRectDim.left) * xyRatios.xRatio; - var minY = w.globals.yAxisScale[0].niceMin + (gridRectDim.bottom - selectionRect.bottom) * xyRatios.yRatio[0]; - var maxY = w.globals.yAxisScale[0].niceMax - (selectionRect.top - gridRectDim.top) * xyRatios.yRatio[0]; - w.config.chart.events.selection(_this4.ctx, { - xaxis: { - min: minX, - max: maxX - }, - yaxis: { - min: minY, - max: maxY - } - }); - }, timerInterval); - } - } - }, { - key: "selectionDrawn", - value: function selectionDrawn(_ref4) { - var context = _ref4.context, - zoomtype = _ref4.zoomtype; - var w = this.w; - var me = context; - var xyRatios = this.xyRatios; - var toolbar = this.ctx.toolbar; - - if (me.startX > me.endX) { - var tempX = me.startX; - me.startX = me.endX; - me.endX = tempX; - } - - if (me.startY > me.endY) { - var tempY = me.startY; - me.startY = me.endY; - me.endY = tempY; - } - - var xLowestValue = w.globals.xAxisScale.niceMin + me.startX * xyRatios.xRatio; - var xHighestValue = w.globals.xAxisScale.niceMin + me.endX * xyRatios.xRatio; // TODO: we will consider the 1st y axis values here for getting highest and lowest y - - var yHighestValue = []; - var yLowestValue = []; - w.config.yaxis.forEach(function (yaxe, index) { - yHighestValue.push(Math.floor(w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[index] * me.startY)); - yLowestValue.push(Math.floor(w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[index] * me.endY)); - }); - - if (me.dragged && (me.dragX > 10 || me.dragY > 10) && xLowestValue !== xHighestValue) { - if (w.globals.zoomEnabled) { - var yaxis = Utils.clone(w.config.yaxis); // before zooming in/out, store the last yaxis and xaxis range, so that when user hits the RESET button, we get the original range - // also - make sure user is not already zoomed in/out - otherwise we will store zoomed values in lastAxis - - if (!w.globals.zoomed) { - w.globals.lastXAxis = Utils.clone(w.config.xaxis); - w.globals.lastYAxis = Utils.clone(w.config.yaxis); - } - - var xaxis = { - min: xLowestValue, - max: xHighestValue - }; - - if (zoomtype === 'xy' || zoomtype === 'y') { - yaxis.forEach(function (yaxe, index) { - yaxis[index].min = yLowestValue[index]; - yaxis[index].max = yHighestValue[index]; - }); - } - - if (w.config.chart.zoom.autoScaleYaxis) { - var scale = new Range(me.ctx); - yaxis = scale.autoScaleY(me.ctx, { - xaxis: xaxis - }); - } - - if (toolbar) { - var beforeZoomRange = toolbar.getBeforeZoomRange(xaxis, yaxis); - - if (beforeZoomRange) { - xaxis = beforeZoomRange.xaxis ? beforeZoomRange.xaxis : xaxis; - yaxis = beforeZoomRange.yaxis ? beforeZoomRange.yaxe : yaxis; - } - } - - me.ctx._updateOptions({ - xaxis: xaxis, - yaxis: yaxis - }, false, me.w.config.chart.animations.dynamicAnimation.enabled); - - if (typeof w.config.chart.events.zoomed === 'function') { - toolbar.zoomCallback(xaxis, yaxis); - } - - w.globals.zoomed = true; - } else if (w.globals.selectionEnabled) { - var _yaxis = null; - var _xaxis = null; - _xaxis = { - min: xLowestValue, - max: xHighestValue - }; - - if (zoomtype === 'xy' || zoomtype === 'y') { - _yaxis = Utils.clone(w.config.yaxis); - - _yaxis.forEach(function (yaxe, index) { - _yaxis[index].min = yLowestValue[index]; - _yaxis[index].max = yHighestValue[index]; - }); - } - - w.globals.selection = me.selection; - - if (typeof w.config.chart.events.selection === 'function') { - w.config.chart.events.selection(me.ctx, { - xaxis: _xaxis, - yaxis: _yaxis - }); - } - } - } - } - }, { - key: "panDragging", - value: function panDragging(_ref5) { - var context = _ref5.context, - zoomtype = _ref5.zoomtype; - var w = this.w; - var me = context; - var moveDirection; // check to make sure there is data to compare against - - if (typeof w.globals.lastClientPosition.x !== 'undefined') { - // get the change from last position to this position - var deltaX = w.globals.lastClientPosition.x - me.clientX; - var deltaY = w.globals.lastClientPosition.y - me.clientY; // check which direction had the highest amplitude and then figure out direction by checking if the value is greater or less than zero - - if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX > 0) { - moveDirection = 'left'; - } else if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX < 0) { - moveDirection = 'right'; - } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY > 0) { - moveDirection = 'up'; - } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY < 0) { - moveDirection = 'down'; - } - } // set the new last position to the current for next time (to get the position of drag) - - - w.globals.lastClientPosition = { - x: me.clientX, - y: me.clientY - }; - var xLowestValue = w.globals.minX; - var xHighestValue = w.globals.maxX; - this.panScrolled(moveDirection, xLowestValue, xHighestValue); - } - }, { - key: "panScrolled", - value: function panScrolled(moveDirection, xLowestValue, xHighestValue) { - var w = this.w; - var xyRatios = this.xyRatios; - var yaxis = Utils.clone(w.config.yaxis); - - if (moveDirection === 'left') { - xLowestValue = w.globals.minX + w.globals.gridWidth / 15 * xyRatios.xRatio; - xHighestValue = w.globals.maxX + w.globals.gridWidth / 15 * xyRatios.xRatio; - } else if (moveDirection === 'right') { - xLowestValue = w.globals.minX - w.globals.gridWidth / 15 * xyRatios.xRatio; - xHighestValue = w.globals.maxX - w.globals.gridWidth / 15 * xyRatios.xRatio; - } - - if (xLowestValue < w.globals.initialminX || xHighestValue > w.globals.initialmaxX) { - xLowestValue = w.globals.minX; - xHighestValue = w.globals.maxX; - } - - var xaxis = { - min: xLowestValue, - max: xHighestValue - }; - - if (w.config.chart.zoom.autoScaleYaxis) { - var scale = new Range(me.ctx); - yaxis = scale.autoScaleY(me.ctx, { - xaxis: xaxis - }); - } - - this.ctx._updateOptions({ - xaxis: { - min: xLowestValue, - max: xHighestValue - }, - yaxis: yaxis - }, false, false); - - if (typeof w.config.chart.events.scrolled === 'function') { - w.config.chart.events.scrolled(this.ctx, { - xaxis: { - min: xLowestValue, - max: xHighestValue - } - }); - } - } - }]); - - return ZoomPanSelection; -}(Toolbar); - -var TitleSubtitle = -/*#__PURE__*/ -function () { - function TitleSubtitle(ctx) { - _classCallCheck(this, TitleSubtitle); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(TitleSubtitle, [{ - key: "draw", - value: function draw() { - this.drawTitleSubtitle('title'); - this.drawTitleSubtitle('subtitle'); - } - }, { - key: "drawTitleSubtitle", - value: function drawTitleSubtitle(type) { - var w = this.w; - var tsConfig = type === 'title' ? w.config.title : w.config.subtitle; - var x = w.globals.svgWidth / 2; - var y = tsConfig.offsetY; - var textAnchor = 'middle'; - - if (tsConfig.align === 'left') { - x = 10; - textAnchor = 'start'; - } else if (tsConfig.align === 'right') { - x = w.globals.svgWidth - 10; - textAnchor = 'end'; - } - - x = x + tsConfig.offsetX; - y = y + parseInt(tsConfig.style.fontSize) + 2; - - if (tsConfig.text !== undefined) { - var graphics = new Graphics(this.ctx); - var titleText = graphics.drawText({ - x: x, - y: y, - text: tsConfig.text, - textAnchor: textAnchor, - fontSize: tsConfig.style.fontSize, - fontFamily: tsConfig.style.fontFamily, - foreColor: tsConfig.style.color, - opacity: 1 - }); - titleText.node.setAttribute('class', "apexcharts-".concat(type, "-text")); - w.globals.dom.Paper.add(titleText); - } - } - }]); - - return TitleSubtitle; -}(); - -(function (root, factory) { - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define(function () { - return factory(root, root.document); - }); - /* below check fixes #412 */ - } else if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object' && typeof module !== 'undefined') { - module.exports = root.document ? factory(root, root.document) : function (w) { - return factory(w, w.document); - }; - } else { - root.SVG = factory(root, root.document); - } -})(typeof window !== 'undefined' ? window : undefined, function (window, document) { - // Find global reference - uses 'this' by default when available, - // falls back to 'window' otherwise (for bundlers like Webpack) - var globalRef = typeof this !== 'undefined' ? this : window; // The main wrapping element - - var SVG = globalRef.SVG = function (element) { - if (SVG.supported) { - element = new SVG.Doc(element); - - if (!SVG.parser.draw) { - SVG.prepare(); - } - - return element; - } - }; // Default namespaces - - - SVG.ns = 'http://www.w3.org/2000/svg'; - SVG.xmlns = 'http://www.w3.org/2000/xmlns/'; - SVG.xlink = 'http://www.w3.org/1999/xlink'; - SVG.svgjs = 'http://svgjs.com/svgjs'; // Svg support test - - SVG.supported = function () { - return true; // !!document.createElementNS && - // !! document.createElementNS(SVG.ns,'svg').createSVGRect - }(); // Don't bother to continue if SVG is not supported - - - if (!SVG.supported) return false; // Element id sequence - - SVG.did = 1000; // Get next named element id - - SVG.eid = function (name) { - return 'Svgjs' + capitalize(name) + SVG.did++; - }; // Method for element creation - - - SVG.create = function (name) { - // create element - var element = document.createElementNS(this.ns, name); // apply unique id - - element.setAttribute('id', this.eid(name)); - return element; - }; // Method for extending objects - - - SVG.extend = function () { - var modules, methods, key, i; // Get list of modules - - modules = [].slice.call(arguments); // Get object with extensions - - methods = modules.pop(); - - for (i = modules.length - 1; i >= 0; i--) { - if (modules[i]) { - for (key in methods) { - modules[i].prototype[key] = methods[key]; - } - } - } // Make sure SVG.Set inherits any newly added methods - - - if (SVG.Set && SVG.Set.inherit) { - SVG.Set.inherit(); - } - }; // Invent new element - - - SVG.invent = function (config) { - // Create element initializer - var initializer = typeof config.create === 'function' ? config.create : function () { - this.constructor.call(this, SVG.create(config.create)); - }; // Inherit prototype - - if (config.inherit) { - initializer.prototype = new config.inherit(); - } // Extend with methods - - - if (config.extend) { - SVG.extend(initializer, config.extend); - } // Attach construct method to parent - - - if (config.construct) { - SVG.extend(config.parent || SVG.Container, config.construct); - } - - return initializer; - }; // Adopt existing svg elements - - - SVG.adopt = function (node) { - // check for presence of node - if (!node) return null; // make sure a node isn't already adopted - - if (node.instance) return node.instance; // initialize variables - - var element; // adopt with element-specific settings - - if (node.nodeName == 'svg') { - element = node.parentNode instanceof window.SVGElement ? new SVG.Nested() : new SVG.Doc(); - } else if (node.nodeName == 'linearGradient') { - element = new SVG.Gradient('linear'); - } else if (node.nodeName == 'radialGradient') { - element = new SVG.Gradient('radial'); - } else if (SVG[capitalize(node.nodeName)]) { - element = new SVG[capitalize(node.nodeName)](); - } else { - element = new SVG.Element(node); - } // ensure references - - - element.type = node.nodeName; - element.node = node; - node.instance = element; // SVG.Class specific preparations - - if (element instanceof SVG.Doc) { - element.namespace().defs(); - } // pull svgjs data from the dom (getAttributeNS doesn't work in html5) - - - element.setData(JSON.parse(node.getAttribute('svgjs:data')) || {}); - return element; - }; // Initialize parsing element - - - SVG.prepare = function () { - // Select document body and create invisible svg element - var body = document.getElementsByTagName('body')[0], - draw = (body ? new SVG.Doc(body) : SVG.adopt(document.documentElement).nested()).size(2, 0); // Create parser object - - SVG.parser = { - body: body || document.documentElement, - draw: draw.style('opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden').node, - poly: draw.polyline().node, - path: draw.path().node, - native: SVG.create('svg') - }; - }; - - SVG.parser = { - native: SVG.create('svg') - }; - document.addEventListener('DOMContentLoaded', function () { - if (!SVG.parser.draw) { - SVG.prepare(); - } - }, false); // Storage for regular expressions - - SVG.regex = { - // Parse unit value - numberAndUnit: /^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i, - // Parse hex value - hex: /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i, - // Parse rgb value - rgb: /rgb\((\d+),(\d+),(\d+)\)/, - // Parse reference id - reference: /#([a-z0-9\-_]+)/i, - // splits a transformation chain - transforms: /\)\s*,?\s*/, - // Whitespace - whitespace: /\s/g, - // Test hex value - isHex: /^#[a-f0-9]{3,6}$/i, - // Test rgb value - isRgb: /^rgb\(/, - // Test css declaration - isCss: /[^:]+:[^;]+;?/, - // Test for blank string - isBlank: /^(\s+)?$/, - // Test for numeric string - isNumber: /^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, - // Test for percent value - isPercent: /^-?[\d\.]+%$/, - // Test for image url - isImage: /\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i, - // split at whitespace and comma - delimiter: /[\s,]+/, - // The following regex are used to parse the d attribute of a path - // Matches all hyphens which are not after an exponent - hyphen: /([^e])\-/gi, - // Replaces and tests for all path letters - pathLetters: /[MLHVCSQTAZ]/gi, - // yes we need this one, too - isPathLetter: /[MLHVCSQTAZ]/i, - // matches 0.154.23.45 - numbersWithDots: /((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi, - // matches . - dots: /\./g - }; - SVG.utils = { - // Map function - map: function map(array, block) { - var i, - il = array.length, - result = []; - - for (i = 0; i < il; i++) { - result.push(block(array[i])); - } - - return result; - }, - // Filter function - filter: function filter(array, block) { - var i, - il = array.length, - result = []; - - for (i = 0; i < il; i++) { - if (block(array[i])) { - result.push(array[i]); - } - } - - return result; - }, - // Degrees to radians - radians: function radians(d) { - return d % 360 * Math.PI / 180; - }, - // Radians to degrees - degrees: function degrees(r) { - return r * 180 / Math.PI % 360; - }, - filterSVGElements: function filterSVGElements(nodes) { - return this.filter(nodes, function (el) { - return el instanceof window.SVGElement; - }); - } - }; - SVG.defaults = { - // Default attribute values - attrs: { - // fill and stroke - 'fill-opacity': 1, - 'stroke-opacity': 1, - 'stroke-width': 0, - 'stroke-linejoin': 'miter', - 'stroke-linecap': 'butt', - fill: '#000000', - stroke: '#000000', - opacity: 1, - // position - x: 0, - y: 0, - cx: 0, - cy: 0, - // size - width: 0, - height: 0, - // radius - r: 0, - rx: 0, - ry: 0, - // gradient - offset: 0, - 'stop-opacity': 1, - 'stop-color': '#000000', - // text - 'font-size': 16, - 'font-family': 'Helvetica, Arial, sans-serif', - 'text-anchor': 'start' - } // Module for color convertions - - }; - - SVG.Color = function (color) { - var match; // initialize defaults - - this.r = 0; - this.g = 0; - this.b = 0; - if (!color) return; // parse color - - if (typeof color === 'string') { - if (SVG.regex.isRgb.test(color)) { - // get rgb values - match = SVG.regex.rgb.exec(color.replace(SVG.regex.whitespace, '')); // parse numeric values - - this.r = parseInt(match[1]); - this.g = parseInt(match[2]); - this.b = parseInt(match[3]); - } else if (SVG.regex.isHex.test(color)) { - // get hex values - match = SVG.regex.hex.exec(fullHex(color)); // parse numeric values - - this.r = parseInt(match[1], 16); - this.g = parseInt(match[2], 16); - this.b = parseInt(match[3], 16); - } - } else if (_typeof(color) === 'object') { - this.r = color.r; - this.g = color.g; - this.b = color.b; - } - }; - - SVG.extend(SVG.Color, { - // Default to hex conversion - toString: function toString() { - return this.toHex(); - }, - // Build hex value - toHex: function toHex() { - return '#' + compToHex(this.r) + compToHex(this.g) + compToHex(this.b); - }, - // Build rgb value - toRgb: function toRgb() { - return 'rgb(' + [this.r, this.g, this.b].join() + ')'; - }, - // Calculate true brightness - brightness: function brightness() { - return this.r / 255 * 0.30 + this.g / 255 * 0.59 + this.b / 255 * 0.11; - }, - // Make color morphable - morph: function morph(color) { - this.destination = new SVG.Color(color); - return this; - }, - // Get morphed color at given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; // normalise pos - - pos = pos < 0 ? 0 : pos > 1 ? 1 : pos; // generate morphed color - - return new SVG.Color({ - r: ~~(this.r + (this.destination.r - this.r) * pos), - g: ~~(this.g + (this.destination.g - this.g) * pos), - b: ~~(this.b + (this.destination.b - this.b) * pos) - }); - } - }); // Testers - // Test if given value is a color string - - SVG.Color.test = function (color) { - color += ''; - return SVG.regex.isHex.test(color) || SVG.regex.isRgb.test(color); - }; // Test if given value is a rgb object - - - SVG.Color.isRgb = function (color) { - return color && typeof color.r === 'number' && typeof color.g === 'number' && typeof color.b === 'number'; - }; // Test if given value is a color - - - SVG.Color.isColor = function (color) { - return SVG.Color.isRgb(color) || SVG.Color.test(color); - }; // Module for array conversion - - - SVG.Array = function (array, fallback) { - array = (array || []).valueOf(); // if array is empty and fallback is provided, use fallback - - if (array.length == 0 && fallback) { - array = fallback.valueOf(); - } // parse array - - - this.value = this.parse(array); - }; - - SVG.extend(SVG.Array, { - // Make array morphable - morph: function morph(array) { - this.destination = this.parse(array); // normalize length of arrays - - if (this.value.length != this.destination.length) { - var lastValue = this.value[this.value.length - 1], - lastDestination = this.destination[this.destination.length - 1]; - - while (this.value.length > this.destination.length) { - this.destination.push(lastDestination); - } - - while (this.value.length < this.destination.length) { - this.value.push(lastValue); - } - } - - return this; - }, - // Clean up any duplicate points - settle: function settle() { - // find all unique values - for (var i = 0, il = this.value.length, seen = []; i < il; i++) { - if (seen.indexOf(this.value[i]) == -1) { - seen.push(this.value[i]); - } - } // set new value - - - return this.value = seen; - }, - // Get morphed array at given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; // generate morphed array - - for (var i = 0, il = this.value.length, array = []; i < il; i++) { - array.push(this.value[i] + (this.destination[i] - this.value[i]) * pos); - } - - return new SVG.Array(array); - }, - // Convert array to string - toString: function toString() { - return this.value.join(' '); - }, - // Real value - valueOf: function valueOf() { - return this.value; - }, - // Parse whitespace separated string - parse: function parse(array) { - array = array.valueOf(); // if already is an array, no need to parse it - - if (Array.isArray(array)) return array; - return this.split(array); - }, - // Strip unnecessary whitespace - split: function split(string) { - return string.trim().split(SVG.regex.delimiter).map(parseFloat); - }, - // Reverse array - reverse: function reverse() { - this.value.reverse(); - return this; - }, - clone: function clone() { - var clone = new this.constructor(); - clone.value = array_clone(this.value); - return clone; - } - }); // Poly points array - - SVG.PointArray = function (array, fallback) { - SVG.Array.call(this, array, fallback || [[0, 0]]); - }; // Inherit from SVG.Array - - - SVG.PointArray.prototype = new SVG.Array(); - SVG.PointArray.prototype.constructor = SVG.PointArray; - SVG.extend(SVG.PointArray, { - // Convert array to string - toString: function toString() { - // convert to a poly point string - for (var i = 0, il = this.value.length, array = []; i < il; i++) { - array.push(this.value[i].join(',')); - } - - return array.join(' '); - }, - // Convert array to line object - toLine: function toLine() { - return { - x1: this.value[0][0], - y1: this.value[0][1], - x2: this.value[1][0], - y2: this.value[1][1] - }; - }, - // Get morphed array at given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; // generate morphed point string - - for (var i = 0, il = this.value.length, array = []; i < il; i++) { - array.push([this.value[i][0] + (this.destination[i][0] - this.value[i][0]) * pos, this.value[i][1] + (this.destination[i][1] - this.value[i][1]) * pos]); - } - - return new SVG.PointArray(array); - }, - // Parse point string and flat array - parse: function parse(array) { - var points = []; - array = array.valueOf(); // if it is an array - - if (Array.isArray(array)) { - // and it is not flat, there is no need to parse it - if (Array.isArray(array[0])) { - // make sure to use a clone - return array.map(function (el) { - return el.slice(); - }); - } else if (array[0].x != null) { - // allow point objects to be passed - return array.map(function (el) { - return [el.x, el.y]; - }); - } - } else { - // Else, it is considered as a string - // parse points - array = array.trim().split(SVG.regex.delimiter).map(parseFloat); - } // validate points - https://svgwg.org/svg2-draft/shapes.html#DataTypePoints - // Odd number of coordinates is an error. In such cases, drop the last odd coordinate. - - - if (array.length % 2 !== 0) array.pop(); // wrap points in two-tuples and parse points as floats - - for (var i = 0, len = array.length; i < len; i = i + 2) { - points.push([array[i], array[i + 1]]); - } - - return points; - }, - // Move point string - move: function move(x, y) { - var box = this.bbox(); // get relative offset - - x -= box.x; - y -= box.y; // move every point - - if (!isNaN(x) && !isNaN(y)) { - for (var i = this.value.length - 1; i >= 0; i--) { - this.value[i] = [this.value[i][0] + x, this.value[i][1] + y]; - } - } - - return this; - }, - // Resize poly string - size: function size(width, height) { - var i, - box = this.bbox(); // recalculate position of all points according to new size - - for (i = this.value.length - 1; i >= 0; i--) { - if (box.width) this.value[i][0] = (this.value[i][0] - box.x) * width / box.width + box.x; - if (box.height) this.value[i][1] = (this.value[i][1] - box.y) * height / box.height + box.y; - } - - return this; - }, - // Get bounding box of points - bbox: function bbox() { - if (!SVG.parser.draw) { - SVG.prepare(); - } - - SVG.parser.poly.setAttribute('points', this.toString()); - return SVG.parser.poly.getBBox(); - } - }); - var pathHandlers = { - M: function M(c, p, p0) { - p.x = p0.x = c[0]; - p.y = p0.y = c[1]; - return ['M', p.x, p.y]; - }, - L: function L(c, p) { - p.x = c[0]; - p.y = c[1]; - return ['L', c[0], c[1]]; - }, - H: function H(c, p) { - p.x = c[0]; - return ['H', c[0]]; - }, - V: function V(c, p) { - p.y = c[0]; - return ['V', c[0]]; - }, - C: function C(c, p) { - p.x = c[4]; - p.y = c[5]; - return ['C', c[0], c[1], c[2], c[3], c[4], c[5]]; - }, - S: function S(c, p) { - p.x = c[2]; - p.y = c[3]; - return ['S', c[0], c[1], c[2], c[3]]; - }, - Q: function Q(c, p) { - p.x = c[2]; - p.y = c[3]; - return ['Q', c[0], c[1], c[2], c[3]]; - }, - T: function T(c, p) { - p.x = c[0]; - p.y = c[1]; - return ['T', c[0], c[1]]; - }, - Z: function Z(c, p, p0) { - p.x = p0.x; - p.y = p0.y; - return ['Z']; - }, - A: function A(c, p) { - p.x = c[5]; - p.y = c[6]; - return ['A', c[0], c[1], c[2], c[3], c[4], c[5], c[6]]; - } - }; - var mlhvqtcsa = 'mlhvqtcsaz'.split(''); - - for (var i = 0, il = mlhvqtcsa.length; i < il; ++i) { - pathHandlers[mlhvqtcsa[i]] = function (i) { - return function (c, p, p0) { - if (i == 'H') c[0] = c[0] + p.x;else if (i == 'V') c[0] = c[0] + p.y;else if (i == 'A') { - c[5] = c[5] + p.x, c[6] = c[6] + p.y; - } else { - for (var j = 0, jl = c.length; j < jl; ++j) { - c[j] = c[j] + (j % 2 ? p.y : p.x); - } - } - return pathHandlers[i](c, p, p0); - }; - }(mlhvqtcsa[i].toUpperCase()); - } // Path points array - - - SVG.PathArray = function (array, fallback) { - SVG.Array.call(this, array, fallback || [['M', 0, 0]]); - }; // Inherit from SVG.Array - - - SVG.PathArray.prototype = new SVG.Array(); - SVG.PathArray.prototype.constructor = SVG.PathArray; - SVG.extend(SVG.PathArray, { - // Convert array to string - toString: function toString() { - return arrayToString(this.value); - }, - // Move path string - move: function move(x, y) { - // get bounding box of current situation - var box = this.bbox(); // get relative offset - - x -= box.x; - y -= box.y; - - if (!isNaN(x) && !isNaN(y)) { - // move every point - for (var l, i = this.value.length - 1; i >= 0; i--) { - l = this.value[i][0]; - - if (l == 'M' || l == 'L' || l == 'T') { - this.value[i][1] += x; - this.value[i][2] += y; - } else if (l == 'H') { - this.value[i][1] += x; - } else if (l == 'V') { - this.value[i][1] += y; - } else if (l == 'C' || l == 'S' || l == 'Q') { - this.value[i][1] += x; - this.value[i][2] += y; - this.value[i][3] += x; - this.value[i][4] += y; - - if (l == 'C') { - this.value[i][5] += x; - this.value[i][6] += y; - } - } else if (l == 'A') { - this.value[i][6] += x; - this.value[i][7] += y; - } - } - } - - return this; - }, - // Resize path string - size: function size(width, height) { - // get bounding box of current situation - var i, - l, - box = this.bbox(); // recalculate position of all points according to new size - - for (i = this.value.length - 1; i >= 0; i--) { - l = this.value[i][0]; - - if (l == 'M' || l == 'L' || l == 'T') { - this.value[i][1] = (this.value[i][1] - box.x) * width / box.width + box.x; - this.value[i][2] = (this.value[i][2] - box.y) * height / box.height + box.y; - } else if (l == 'H') { - this.value[i][1] = (this.value[i][1] - box.x) * width / box.width + box.x; - } else if (l == 'V') { - this.value[i][1] = (this.value[i][1] - box.y) * height / box.height + box.y; - } else if (l == 'C' || l == 'S' || l == 'Q') { - this.value[i][1] = (this.value[i][1] - box.x) * width / box.width + box.x; - this.value[i][2] = (this.value[i][2] - box.y) * height / box.height + box.y; - this.value[i][3] = (this.value[i][3] - box.x) * width / box.width + box.x; - this.value[i][4] = (this.value[i][4] - box.y) * height / box.height + box.y; - - if (l == 'C') { - this.value[i][5] = (this.value[i][5] - box.x) * width / box.width + box.x; - this.value[i][6] = (this.value[i][6] - box.y) * height / box.height + box.y; - } - } else if (l == 'A') { - // resize radii - this.value[i][1] = this.value[i][1] * width / box.width; - this.value[i][2] = this.value[i][2] * height / box.height; // move position values - - this.value[i][6] = (this.value[i][6] - box.x) * width / box.width + box.x; - this.value[i][7] = (this.value[i][7] - box.y) * height / box.height + box.y; - } - } - - return this; - }, - // Test if the passed path array use the same path data commands as this path array - equalCommands: function equalCommands(pathArray) { - var i, il, equalCommands; - pathArray = new SVG.PathArray(pathArray); - equalCommands = this.value.length === pathArray.value.length; - - for (i = 0, il = this.value.length; equalCommands && i < il; i++) { - equalCommands = this.value[i][0] === pathArray.value[i][0]; - } - - return equalCommands; - }, - // Make path array morphable - morph: function morph(pathArray) { - pathArray = new SVG.PathArray(pathArray); - - if (this.equalCommands(pathArray)) { - this.destination = pathArray; - } else { - this.destination = null; - } - - return this; - }, - // Get morphed path array at given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; - var sourceArray = this.value, - destinationArray = this.destination.value, - array = [], - pathArray = new SVG.PathArray(), - i, - il, - j, - jl; // Animate has specified in the SVG spec - // See: https://www.w3.org/TR/SVG11/paths.html#PathElement - - for (i = 0, il = sourceArray.length; i < il; i++) { - array[i] = [sourceArray[i][0]]; - - for (j = 1, jl = sourceArray[i].length; j < jl; j++) { - array[i][j] = sourceArray[i][j] + (destinationArray[i][j] - sourceArray[i][j]) * pos; - } // For the two flags of the elliptical arc command, the SVG spec say: - // Flags and booleans are interpolated as fractions between zero and one, with any non-zero value considered to be a value of one/true - // Elliptical arc command as an array followed by corresponding indexes: - // ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y] - // 0 1 2 3 4 5 6 7 - - - if (array[i][0] === 'A') { - array[i][4] = +(array[i][4] != 0); - array[i][5] = +(array[i][5] != 0); - } - } // Directly modify the value of a path array, this is done this way for performance - - - pathArray.value = array; - return pathArray; - }, - // Absolutize and parse path to array - parse: function parse(array) { - // if it's already a patharray, no need to parse it - if (array instanceof SVG.PathArray) return array.valueOf(); // prepare for parsing - - var s, - arr, - paramCnt = { - 'M': 2, - 'L': 2, - 'H': 1, - 'V': 1, - 'C': 6, - 'S': 4, - 'Q': 4, - 'T': 2, - 'A': 7, - 'Z': 0 - }; - - if (typeof array === 'string') { - array = array.replace(SVG.regex.numbersWithDots, pathRegReplace) // convert 45.123.123 to 45.123 .123 - .replace(SVG.regex.pathLetters, ' $& ') // put some room between letters and numbers - .replace(SVG.regex.hyphen, '$1 -') // add space before hyphen - .trim() // trim - .split(SVG.regex.delimiter); // split into array - } else { - array = array.reduce(function (prev, curr) { - return [].concat.call(prev, curr); - }, []); - } // array now is an array containing all parts of a path e.g. ['M', '0', '0', 'L', '30', '30' ...] - - - var arr = [], - p = new SVG.Point(), - p0 = new SVG.Point(), - index = 0, - len = array.length; - - do { - // Test if we have a path letter - if (SVG.regex.isPathLetter.test(array[index])) { - s = array[index]; - ++index; // If last letter was a move command and we got no new, it defaults to [L]ine - } else if (s == 'M') { - s = 'L'; - } else if (s == 'm') { - s = 'l'; - } - - arr.push(pathHandlers[s].call(null, array.slice(index, index = index + paramCnt[s.toUpperCase()]).map(parseFloat), p, p0)); - } while (len > index); - - return arr; - }, - // Get bounding box of path - bbox: function bbox() { - if (!SVG.parser.draw) { - SVG.prepare(); - } - - SVG.parser.path.setAttribute('d', this.toString()); - return SVG.parser.path.getBBox(); - } - }); // Module for unit convertions - - SVG.Number = SVG.invent({ - // Initialize - create: function create(value, unit) { - // initialize defaults - this.value = 0; - this.unit = unit || ''; // parse value - - if (typeof value === 'number') { - // ensure a valid numeric value - this.value = isNaN(value) ? 0 : !isFinite(value) ? value < 0 ? -3.4e+38 : +3.4e+38 : value; - } else if (typeof value === 'string') { - unit = value.match(SVG.regex.numberAndUnit); - - if (unit) { - // make value numeric - this.value = parseFloat(unit[1]); // normalize - - if (unit[5] == '%') { - this.value /= 100; - } else if (unit[5] == 's') { - this.value *= 1000; - } // store unit - - - this.unit = unit[5]; - } - } else { - if (value instanceof SVG.Number) { - this.value = value.valueOf(); - this.unit = value.unit; - } - } - }, - // Add methods - extend: { - // Stringalize - toString: function toString() { - return (this.unit == '%' ? ~~(this.value * 1e8) / 1e6 : this.unit == 's' ? this.value / 1e3 : this.value) + this.unit; - }, - toJSON: function toJSON() { - return this.toString(); - }, - // Convert to primitive - valueOf: function valueOf() { - return this.value; - }, - // Add number - plus: function plus(number) { - number = new SVG.Number(number); - return new SVG.Number(this + number, this.unit || number.unit); - }, - // Subtract number - minus: function minus(number) { - number = new SVG.Number(number); - return new SVG.Number(this - number, this.unit || number.unit); - }, - // Multiply number - times: function times(number) { - number = new SVG.Number(number); - return new SVG.Number(this * number, this.unit || number.unit); - }, - // Divide number - divide: function divide(number) { - number = new SVG.Number(number); - return new SVG.Number(this / number, this.unit || number.unit); - }, - // Convert to different unit - to: function to(unit) { - var number = new SVG.Number(this); - - if (typeof unit === 'string') { - number.unit = unit; - } - - return number; - }, - // Make number morphable - morph: function morph(number) { - this.destination = new SVG.Number(number); - - if (number.relative) { - this.destination.value += this.value; - } - - return this; - }, - // Get morphed number at given position - at: function at(pos) { - // Make sure a destination is defined - if (!this.destination) return this; // Generate new morphed number - - return new SVG.Number(this.destination).minus(this).times(pos).plus(this); - } - } - }); - SVG.Element = SVG.invent({ - // Initialize node - create: function create(node) { - // make stroke value accessible dynamically - this._stroke = SVG.defaults.attrs.stroke; - this._event = null; // initialize data object - - this.dom = {}; // create circular reference - - if (this.node = node) { - this.type = node.nodeName; - this.node.instance = this; // store current attribute value - - this._stroke = node.getAttribute('stroke') || this._stroke; - } - }, - // Add class methods - extend: { - // Move over x-axis - x: function x(_x) { - return this.attr('x', _x); - }, - // Move over y-axis - y: function y(_y) { - return this.attr('y', _y); - }, - // Move by center over x-axis - cx: function cx(x) { - return x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2); - }, - // Move by center over y-axis - cy: function cy(y) { - return y == null ? this.y() + this.height() / 2 : this.y(y - this.height() / 2); - }, - // Move element to given x and y values - move: function move(x, y) { - return this.x(x).y(y); - }, - // Move element by its center - center: function center(x, y) { - return this.cx(x).cy(y); - }, - // Set width of element - width: function width(_width) { - return this.attr('width', _width); - }, - // Set height of element - height: function height(_height) { - return this.attr('height', _height); - }, - // Set element size to given width and height - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.width(new SVG.Number(p.width)).height(new SVG.Number(p.height)); - }, - // Clone element - clone: function clone(parent) { - // write dom data to the dom so the clone can pickup the data - this.writeDataToDom(); // clone element and assign new id - - var clone = assignNewId(this.node.cloneNode(true)); // insert the clone in the given parent or after myself - - if (parent) parent.add(clone);else this.after(clone); - return clone; - }, - // Remove element - remove: function remove() { - if (this.parent()) { - this.parent().removeElement(this); - } - - return this; - }, - // Replace element - replace: function replace(element) { - this.after(element).remove(); - return element; - }, - // Add element to given container and return self - addTo: function addTo(parent) { - return parent.put(this); - }, - // Add element to given container and return container - putIn: function putIn(parent) { - return parent.add(this); - }, - // Get / set id - id: function id(_id) { - return this.attr('id', _id); - }, - // Checks whether the given point inside the bounding box of the element - inside: function inside(x, y) { - var box = this.bbox(); - return x > box.x && y > box.y && x < box.x + box.width && y < box.y + box.height; - }, - // Show element - show: function show() { - return this.style('display', ''); - }, - // Hide element - hide: function hide() { - return this.style('display', 'none'); - }, - // Is element visible? - visible: function visible() { - return this.style('display') != 'none'; - }, - // Return id on string conversion - toString: function toString() { - return this.attr('id'); - }, - // Return array of classes on the node - classes: function classes() { - var attr = this.attr('class'); - return attr == null ? [] : attr.trim().split(SVG.regex.delimiter); - }, - // Return true if class exists on the node, false otherwise - hasClass: function hasClass(name) { - return this.classes().indexOf(name) != -1; - }, - // Add class to the node - addClass: function addClass(name) { - if (!this.hasClass(name)) { - var array = this.classes(); - array.push(name); - this.attr('class', array.join(' ')); - } - - return this; - }, - // Remove class from the node - removeClass: function removeClass(name) { - if (this.hasClass(name)) { - this.attr('class', this.classes().filter(function (c) { - return c != name; - }).join(' ')); - } - - return this; - }, - // Toggle the presence of a class on the node - toggleClass: function toggleClass(name) { - return this.hasClass(name) ? this.removeClass(name) : this.addClass(name); - }, - // Get referenced element form attribute value - reference: function reference(attr) { - return SVG.get(this.attr(attr)); - }, - // Returns the parent element instance - parent: function parent(type) { - var parent = this; // check for parent - - if (!parent.node.parentNode) return null; // get parent element - - parent = SVG.adopt(parent.node.parentNode); - if (!type) return parent; // loop trough ancestors if type is given - - while (parent && parent.node instanceof window.SVGElement) { - if (typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent; - if (!parent.node.parentNode || parent.node.parentNode.nodeName == '#document') return null; // #759, #720 - - parent = SVG.adopt(parent.node.parentNode); - } - }, - // Get parent document - doc: function doc() { - return this instanceof SVG.Doc ? this : this.parent(SVG.Doc); - }, - // return array of all ancestors of given type up to the root svg - parents: function parents(type) { - var parents = [], - parent = this; - - do { - parent = parent.parent(type); - if (!parent || !parent.node) break; - parents.push(parent); - } while (parent.parent); - - return parents; - }, - // matches the element vs a css selector - matches: function matches(selector) { - return _matches(this.node, selector); - }, - // Returns the svg node to call native svg methods on it - native: function native() { - return this.node; - }, - // Import raw svg - svg: function svg(_svg) { - // create temporary holder - var well = document.createElement('svg'); // act as a setter if svg is given - - if (_svg && this instanceof SVG.Parent) { - // dump raw svg - well.innerHTML = '' + _svg.replace(/\n/, '').replace(/<([\w:-]+)([^<]+?)\/>/g, '<$1$2>') + ''; // transplant nodes - - for (var i = 0, il = well.firstChild.childNodes.length; i < il; i++) { - this.node.appendChild(well.firstChild.firstChild); - } // otherwise act as a getter - - } else { - // create a wrapping svg element in case of partial content - well.appendChild(_svg = document.createElement('svg')); // write svgjs data to the dom - - this.writeDataToDom(); // insert a copy of this node - - _svg.appendChild(this.node.cloneNode(true)); // return target element - - - return well.innerHTML.replace(/^/, '').replace(/<\/svg>$/, ''); - } - - return this; - }, - // write svgjs data to the dom - writeDataToDom: function writeDataToDom() { - // dump variables recursively - if (this.each || this.lines) { - var fn = this.each ? this : this.lines(); - fn.each(function () { - this.writeDataToDom(); - }); - } // remove previously set data - - - this.node.removeAttribute('svgjs:data'); - - if (Object.keys(this.dom).length) { - this.node.setAttribute('svgjs:data', JSON.stringify(this.dom)); - } // see #428 - - - return this; - }, - // set given data to the elements data property - setData: function setData(o) { - this.dom = o; - return this; - }, - is: function is(obj) { - return _is(this, obj); - } - } - }); - SVG.easing = { - '-': function _(pos) { - return pos; - }, - '<>': function _(pos) { - return -Math.cos(pos * Math.PI) / 2 + 0.5; - }, - '>': function _(pos) { - return Math.sin(pos * Math.PI / 2); - }, - '<': function _(pos) { - return -Math.cos(pos * Math.PI / 2) + 1; - } - }; - - SVG.morph = function (pos) { - return function (from, to) { - return new SVG.MorphObj(from, to).at(pos); - }; - }; - - SVG.Situation = SVG.invent({ - create: function create(o) { - this.init = false; - this.reversed = false; - this.reversing = false; - this.duration = new SVG.Number(o.duration).valueOf(); - this.delay = new SVG.Number(o.delay).valueOf(); - this.start = +new Date() + this.delay; - this.finish = this.start + this.duration; - this.ease = o.ease; // this.loop is incremented from 0 to this.loops - // it is also incremented when in an infinite loop (when this.loops is true) - - this.loop = 0; - this.loops = false; - this.animations = {// functionToCall: [list of morphable objects] - // e.g. move: [SVG.Number, SVG.Number] - }; - this.attrs = {// holds all attributes which are not represented from a function svg.js provides - // e.g. someAttr: SVG.Number - }; - this.styles = {// holds all styles which should be animated - // e.g. fill-color: SVG.Color - }; - this.transforms = [// holds all transformations as transformation objects - // e.g. [SVG.Rotate, SVG.Translate, SVG.Matrix] - ]; - this.once = {// functions to fire at a specific position - // e.g. "0.5": function foo(){} - }; - } - }); - SVG.FX = SVG.invent({ - create: function create(element) { - this._target = element; - this.situations = []; - this.active = false; - this.situation = null; - this.paused = false; - this.lastPos = 0; - this.pos = 0; // The absolute position of an animation is its position in the context of its complete duration (including delay and loops) - // When performing a delay, absPos is below 0 and when performing a loop, its value is above 1 - - this.absPos = 0; - this._speed = 1; - }, - extend: { - /** - * sets or returns the target of this animation - * @param o object || number In case of Object it holds all parameters. In case of number its the duration of the animation - * @param ease function || string Function which should be used for easing or easing keyword - * @param delay Number indicating the delay before the animation starts - * @return target || this - */ - animate: function animate(o, ease, delay) { - if (_typeof(o) === 'object') { - ease = o.ease; - delay = o.delay; - o = o.duration; - } - - var situation = new SVG.Situation({ - duration: o || 1000, - delay: delay || 0, - ease: SVG.easing[ease || '-'] || ease - }); - this.queue(situation); - return this; - }, - - /** - * sets a delay before the next element of the queue is called - * @param delay Duration of delay in milliseconds - * @return this.target() - */ - delay: function delay(_delay) { - // The delay is performed by an empty situation with its duration - // attribute set to the duration of the delay - var situation = new SVG.Situation({ - duration: _delay, - delay: 0, - ease: SVG.easing['-'] - }); - return this.queue(situation); - }, - - /** - * sets or returns the target of this animation - * @param null || target SVG.Element which should be set as new target - * @return target || this - */ - target: function target(_target) { - if (_target && _target instanceof SVG.Element) { - this._target = _target; - return this; - } - - return this._target; - }, - // returns the absolute position at a given time - timeToAbsPos: function timeToAbsPos(timestamp) { - return (timestamp - this.situation.start) / (this.situation.duration / this._speed); - }, - // returns the timestamp from a given absolute positon - absPosToTime: function absPosToTime(absPos) { - return this.situation.duration / this._speed * absPos + this.situation.start; - }, - // starts the animationloop - startAnimFrame: function startAnimFrame() { - this.stopAnimFrame(); - this.animationFrame = window.requestAnimationFrame(function () { - this.step(); - }.bind(this)); - }, - // cancels the animationframe - stopAnimFrame: function stopAnimFrame() { - window.cancelAnimationFrame(this.animationFrame); - }, - // kicks off the animation - only does something when the queue is currently not active and at least one situation is set - start: function start() { - // dont start if already started - if (!this.active && this.situation) { - this.active = true; - this.startCurrent(); - } - - return this; - }, - // start the current situation - startCurrent: function startCurrent() { - this.situation.start = +new Date() + this.situation.delay / this._speed; - this.situation.finish = this.situation.start + this.situation.duration / this._speed; - return this.initAnimations().step(); - }, - - /** - * adds a function / Situation to the animation queue - * @param fn function / situation to add - * @return this - */ - queue: function queue(fn) { - if (typeof fn === 'function' || fn instanceof SVG.Situation) { - this.situations.push(fn); - } - - if (!this.situation) this.situation = this.situations.shift(); - return this; - }, - - /** - * pulls next element from the queue and execute it - * @return this - */ - dequeue: function dequeue() { - // stop current animation - this.stop(); // get next animation from queue - - this.situation = this.situations.shift(); - - if (this.situation) { - if (this.situation instanceof SVG.Situation) { - this.start(); - } else { - // If it is not a SVG.Situation, then it is a function, we execute it - this.situation.call(this); - } - } - - return this; - }, - // updates all animations to the current state of the element - // this is important when one property could be changed from another property - initAnimations: function initAnimations() { - var i, j, source; - var s = this.situation; - if (s.init) return this; - - for (i in s.animations) { - source = this.target()[i](); - - if (!Array.isArray(source)) { - source = [source]; - } - - if (!Array.isArray(s.animations[i])) { - s.animations[i] = [s.animations[i]]; - } // if(s.animations[i].length > source.length) { - // source.concat = source.concat(s.animations[i].slice(source.length, s.animations[i].length)) - // } - - - for (j = source.length; j--;) { - // The condition is because some methods return a normal number instead - // of a SVG.Number - if (s.animations[i][j] instanceof SVG.Number) { - source[j] = new SVG.Number(source[j]); - } - - s.animations[i][j] = source[j].morph(s.animations[i][j]); - } - } - - for (i in s.attrs) { - s.attrs[i] = new SVG.MorphObj(this.target().attr(i), s.attrs[i]); - } - - for (i in s.styles) { - s.styles[i] = new SVG.MorphObj(this.target().style(i), s.styles[i]); - } - - s.initialTransformation = this.target().matrixify(); - s.init = true; - return this; - }, - clearQueue: function clearQueue() { - this.situations = []; - return this; - }, - clearCurrent: function clearCurrent() { - this.situation = null; - return this; - }, - - /** stops the animation immediately - * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately. - * @param clearQueue A Boolean indicating whether to remove queued animation as well. - * @return this - */ - stop: function stop(jumpToEnd, clearQueue) { - var active = this.active; - this.active = false; - - if (clearQueue) { - this.clearQueue(); - } - - if (jumpToEnd && this.situation) { - // initialize the situation if it was not - !active && this.startCurrent(); - this.atEnd(); - } - - this.stopAnimFrame(); - return this.clearCurrent(); - }, - - /** resets the element to the state where the current element has started - * @return this - */ - reset: function reset() { - if (this.situation) { - var temp = this.situation; - this.stop(); - this.situation = temp; - this.atStart(); - } - - return this; - }, - // Stop the currently-running animation, remove all queued animations, and complete all animations for the element. - finish: function finish() { - this.stop(true, false); - - while (this.dequeue().situation && this.stop(true, false)) { - } - - this.clearQueue().clearCurrent(); - return this; - }, - // set the internal animation pointer at the start position, before any loops, and updates the visualisation - atStart: function atStart() { - return this.at(0, true); - }, - // set the internal animation pointer at the end position, after all the loops, and updates the visualisation - atEnd: function atEnd() { - if (this.situation.loops === true) { - // If in a infinite loop, we end the current iteration - this.situation.loops = this.situation.loop + 1; - } - - if (typeof this.situation.loops === 'number') { - // If performing a finite number of loops, we go after all the loops - return this.at(this.situation.loops, true); - } else { - // If no loops, we just go at the end - return this.at(1, true); - } - }, - // set the internal animation pointer to the specified position and updates the visualisation - // if isAbsPos is true, pos is treated as an absolute position - at: function at(pos, isAbsPos) { - var durDivSpd = this.situation.duration / this._speed; - this.absPos = pos; // If pos is not an absolute position, we convert it into one - - if (!isAbsPos) { - if (this.situation.reversed) this.absPos = 1 - this.absPos; - this.absPos += this.situation.loop; - } - - this.situation.start = +new Date() - this.absPos * durDivSpd; - this.situation.finish = this.situation.start + durDivSpd; - return this.step(true); - }, - - /** - * sets or returns the speed of the animations - * @param speed null || Number The new speed of the animations - * @return Number || this - */ - speed: function speed(_speed) { - if (_speed === 0) return this.pause(); - - if (_speed) { - this._speed = _speed; // We use an absolute position here so that speed can affect the delay before the animation - - return this.at(this.absPos, true); - } else return this._speed; - }, - // Make loopable - loop: function loop(times, reverse) { - var c = this.last(); // store total loops - - c.loops = times != null ? times : true; - c.loop = 0; - if (reverse) c.reversing = true; - return this; - }, - // pauses the animation - pause: function pause() { - this.paused = true; - this.stopAnimFrame(); - return this; - }, - // unpause the animation - play: function play() { - if (!this.paused) return this; - this.paused = false; // We use an absolute position here so that the delay before the animation can be paused - - return this.at(this.absPos, true); - }, - - /** - * toggle or set the direction of the animation - * true sets direction to backwards while false sets it to forwards - * @param reversed Boolean indicating whether to reverse the animation or not (default: toggle the reverse status) - * @return this - */ - reverse: function reverse(reversed) { - var c = this.last(); - if (typeof reversed === 'undefined') c.reversed = !c.reversed;else c.reversed = reversed; - return this; - }, - - /** - * returns a float from 0-1 indicating the progress of the current animation - * @param eased Boolean indicating whether the returned position should be eased or not - * @return number - */ - progress: function progress(easeIt) { - return easeIt ? this.situation.ease(this.pos) : this.pos; - }, - - /** - * adds a callback function which is called when the current animation is finished - * @param fn Function which should be executed as callback - * @return number - */ - after: function after(fn) { - var c = this.last(), - wrapper = function wrapper(e) { - if (e.detail.situation == c) { - fn.call(this, c); - this.off('finished.fx', wrapper); // prevent memory leak - } - }; - - this.target().on('finished.fx', wrapper); - return this._callStart(); - }, - // adds a callback which is called whenever one animation step is performed - during: function during(fn) { - var c = this.last(), - wrapper = function wrapper(e) { - if (e.detail.situation == c) { - fn.call(this, e.detail.pos, SVG.morph(e.detail.pos), e.detail.eased, c); - } - }; // see above - - - this.target().off('during.fx', wrapper).on('during.fx', wrapper); - this.after(function () { - this.off('during.fx', wrapper); - }); - return this._callStart(); - }, - // calls after ALL animations in the queue are finished - afterAll: function afterAll(fn) { - var wrapper = function wrapper(e) { - fn.call(this); - this.off('allfinished.fx', wrapper); - }; // see above - - - this.target().off('allfinished.fx', wrapper).on('allfinished.fx', wrapper); - return this._callStart(); - }, - // calls on every animation step for all animations - duringAll: function duringAll(fn) { - var wrapper = function wrapper(e) { - fn.call(this, e.detail.pos, SVG.morph(e.detail.pos), e.detail.eased, e.detail.situation); - }; - - this.target().off('during.fx', wrapper).on('during.fx', wrapper); - this.afterAll(function () { - this.off('during.fx', wrapper); - }); - return this._callStart(); - }, - last: function last() { - return this.situations.length ? this.situations[this.situations.length - 1] : this.situation; - }, - // adds one property to the animations - add: function add(method, args, type) { - this.last()[type || 'animations'][method] = args; - return this._callStart(); - }, - - /** perform one step of the animation - * @param ignoreTime Boolean indicating whether to ignore time and use position directly or recalculate position based on time - * @return this - */ - step: function step(ignoreTime) { - // convert current time to an absolute position - if (!ignoreTime) this.absPos = this.timeToAbsPos(+new Date()); // This part convert an absolute position to a position - - if (this.situation.loops !== false) { - var absPos, absPosInt, lastLoop; // If the absolute position is below 0, we just treat it as if it was 0 - - absPos = Math.max(this.absPos, 0); - absPosInt = Math.floor(absPos); - - if (this.situation.loops === true || absPosInt < this.situation.loops) { - this.pos = absPos - absPosInt; - lastLoop = this.situation.loop; - this.situation.loop = absPosInt; - } else { - this.absPos = this.situation.loops; - this.pos = 1; // The -1 here is because we don't want to toggle reversed when all the loops have been completed - - lastLoop = this.situation.loop - 1; - this.situation.loop = this.situation.loops; - } - - if (this.situation.reversing) { - // Toggle reversed if an odd number of loops as occured since the last call of step - this.situation.reversed = this.situation.reversed != Boolean((this.situation.loop - lastLoop) % 2); - } - } else { - // If there are no loop, the absolute position must not be above 1 - this.absPos = Math.min(this.absPos, 1); - this.pos = this.absPos; - } // while the absolute position can be below 0, the position must not be below 0 - - - if (this.pos < 0) this.pos = 0; - if (this.situation.reversed) this.pos = 1 - this.pos; // apply easing - - var eased = this.situation.ease(this.pos); // call once-callbacks - - for (var i in this.situation.once) { - if (i > this.lastPos && i <= eased) { - this.situation.once[i].call(this.target(), this.pos, eased); - delete this.situation.once[i]; - } - } // fire during callback with position, eased position and current situation as parameter - - - if (this.active) this.target().fire('during', { - pos: this.pos, - eased: eased, - fx: this, - situation: this.situation - }); // the user may call stop or finish in the during callback - // so make sure that we still have a valid situation - - if (!this.situation) { - return this; - } // apply the actual animation to every property - - - this.eachAt(); // do final code when situation is finished - - if (this.pos == 1 && !this.situation.reversed || this.situation.reversed && this.pos == 0) { - // stop animation callback - this.stopAnimFrame(); // fire finished callback with current situation as parameter - - this.target().fire('finished', { - fx: this, - situation: this.situation - }); - - if (!this.situations.length) { - this.target().fire('allfinished'); // Recheck the length since the user may call animate in the afterAll callback - - if (!this.situations.length) { - this.target().off('.fx'); // there shouldnt be any binding left, but to make sure... - - this.active = false; - } - } // start next animation - - - if (this.active) this.dequeue();else this.clearCurrent(); - } else if (!this.paused && this.active) { - // we continue animating when we are not at the end - this.startAnimFrame(); - } // save last eased position for once callback triggering - - - this.lastPos = eased; - return this; - }, - // calculates the step for every property and calls block with it - eachAt: function eachAt() { - var i, - len, - at, - self = this, - target = this.target(), - s = this.situation; // apply animations which can be called trough a method - - for (i in s.animations) { - at = [].concat(s.animations[i]).map(function (el) { - return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el; - }); - target[i].apply(target, at); - } // apply animation which has to be applied with attr() - - - for (i in s.attrs) { - at = [i].concat(s.attrs[i]).map(function (el) { - return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el; - }); - target.attr.apply(target, at); - } // apply animation which has to be applied with style() - - - for (i in s.styles) { - at = [i].concat(s.styles[i]).map(function (el) { - return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el; - }); - target.style.apply(target, at); - } // animate initialTransformation which has to be chained - - - if (s.transforms.length) { - // get initial initialTransformation - at = s.initialTransformation; - - for (i = 0, len = s.transforms.length; i < len; i++) { - // get next transformation in chain - var a = s.transforms[i]; // multiply matrix directly - - if (a instanceof SVG.Matrix) { - if (a.relative) { - at = at.multiply(new SVG.Matrix().morph(a).at(s.ease(this.pos))); - } else { - at = at.morph(a).at(s.ease(this.pos)); - } - - continue; - } // when transformation is absolute we have to reset the needed transformation first - - - if (!a.relative) { - a.undo(at.extract()); - } // and reapply it after - - - at = at.multiply(a.at(s.ease(this.pos))); - } // set new matrix on element - - - target.matrix(at); - } - - return this; - }, - // adds an once-callback which is called at a specific position and never again - once: function once(pos, fn, isEased) { - var c = this.last(); - if (!isEased) pos = c.ease(pos); - c.once[pos] = fn; - return this; - }, - _callStart: function _callStart() { - setTimeout(function () { - this.start(); - }.bind(this), 0); - return this; - } - }, - parent: SVG.Element, - // Add method to parent elements - construct: { - // Get fx module or create a new one, then animate with given duration and ease - animate: function animate(o, ease, delay) { - return (this.fx || (this.fx = new SVG.FX(this))).animate(o, ease, delay); - }, - delay: function delay(_delay2) { - return (this.fx || (this.fx = new SVG.FX(this))).delay(_delay2); - }, - stop: function stop(jumpToEnd, clearQueue) { - if (this.fx) { - this.fx.stop(jumpToEnd, clearQueue); - } - - return this; - }, - finish: function finish() { - if (this.fx) { - this.fx.finish(); - } - - return this; - }, - // Pause current animation - pause: function pause() { - if (this.fx) { - this.fx.pause(); - } - - return this; - }, - // Play paused current animation - play: function play() { - if (this.fx) { - this.fx.play(); - } - - return this; - }, - // Set/Get the speed of the animations - speed: function speed(_speed2) { - if (this.fx) { - if (_speed2 == null) { - return this.fx.speed(); - } else { - this.fx.speed(_speed2); - } - } - - return this; - } - } - }); // MorphObj is used whenever no morphable object is given - - SVG.MorphObj = SVG.invent({ - create: function create(from, to) { - // prepare color for morphing - if (SVG.Color.isColor(to)) return new SVG.Color(from).morph(to); // check if we have a list of values - - if (SVG.regex.delimiter.test(from)) { - // prepare path for morphing - if (SVG.regex.pathLetters.test(from)) return new SVG.PathArray(from).morph(to); // prepare value list for morphing - else return new SVG.Array(from).morph(to); - } // prepare number for morphing - - - if (SVG.regex.numberAndUnit.test(to)) return new SVG.Number(from).morph(to); // prepare for plain morphing - - this.value = from; - this.destination = to; - }, - extend: { - at: function at(pos, real) { - return real < 1 ? this.value : this.destination; - }, - valueOf: function valueOf() { - return this.value; - } - } - }); - SVG.extend(SVG.FX, { - // Add animatable attributes - attr: function attr(a, v, relative) { - // apply attributes individually - if (_typeof(a) === 'object') { - for (var key in a) { - this.attr(key, a[key]); - } - } else { - this.add(a, v, 'attrs'); - } - - return this; - }, - // Add animatable styles - style: function style(s, v) { - if (_typeof(s) === 'object') { - for (var key in s) { - this.style(key, s[key]); - } - } else { - this.add(s, v, 'styles'); - } - - return this; - }, - // Animatable x-axis - x: function x(_x2, relative) { - if (this.target() instanceof SVG.G) { - this.transform({ - x: _x2 - }, relative); - return this; - } - - var num = new SVG.Number(_x2); - num.relative = relative; - return this.add('x', num); - }, - // Animatable y-axis - y: function y(_y2, relative) { - if (this.target() instanceof SVG.G) { - this.transform({ - y: _y2 - }, relative); - return this; - } - - var num = new SVG.Number(_y2); - num.relative = relative; - return this.add('y', num); - }, - // Animatable center x-axis - cx: function cx(x) { - return this.add('cx', new SVG.Number(x)); - }, - // Animatable center y-axis - cy: function cy(y) { - return this.add('cy', new SVG.Number(y)); - }, - // Add animatable move - move: function move(x, y) { - return this.x(x).y(y); - }, - // Add animatable center - center: function center(x, y) { - return this.cx(x).cy(y); - }, - // Add animatable size - size: function size(width, height) { - if (this.target() instanceof SVG.Text) { - // animate font size for Text elements - this.attr('font-size', width); - } else { - // animate bbox based size for all other elements - var box; - - if (!width || !height) { - box = this.target().bbox(); - } - - if (!width) { - width = box.width / box.height * height; - } - - if (!height) { - height = box.height / box.width * width; - } - - this.add('width', new SVG.Number(width)).add('height', new SVG.Number(height)); - } - - return this; - }, - // Add animatable width - width: function width(_width2) { - return this.add('width', new SVG.Number(_width2)); - }, - // Add animatable height - height: function height(_height2) { - return this.add('height', new SVG.Number(_height2)); - }, - // Add animatable plot - plot: function plot(a, b, c, d) { - // Lines can be plotted with 4 arguments - if (arguments.length == 4) { - return this.plot([a, b, c, d]); - } - - return this.add('plot', new (this.target().morphArray)(a)); - }, - // Add leading method - leading: function leading(value) { - return this.target().leading ? this.add('leading', new SVG.Number(value)) : this; - }, - // Add animatable viewbox - viewbox: function viewbox(x, y, width, height) { - if (this.target() instanceof SVG.Container) { - this.add('viewbox', new SVG.ViewBox(x, y, width, height)); - } - - return this; - }, - update: function update(o) { - if (this.target() instanceof SVG.Stop) { - if (typeof o === 'number' || o instanceof SVG.Number) { - return this.update({ - offset: arguments[0], - color: arguments[1], - opacity: arguments[2] - }); - } - - if (o.opacity != null) this.attr('stop-opacity', o.opacity); - if (o.color != null) this.attr('stop-color', o.color); - if (o.offset != null) this.attr('offset', o.offset); - } - - return this; - } - }); - SVG.Box = SVG.invent({ - create: function create(x, y, width, height) { - if (_typeof(x) === 'object' && !(x instanceof SVG.Element)) { - // chromes getBoundingClientRect has no x and y property - return SVG.Box.call(this, x.left != null ? x.left : x.x, x.top != null ? x.top : x.y, x.width, x.height); - } else if (arguments.length == 4) { - this.x = x; - this.y = y; - this.width = width; - this.height = height; - } // add center, right, bottom... - - - fullBox(this); - }, - extend: { - // Merge rect box with another, return a new instance - merge: function merge(box) { - var b = new this.constructor(); // merge boxes - - b.x = Math.min(this.x, box.x); - b.y = Math.min(this.y, box.y); - b.width = Math.max(this.x + this.width, box.x + box.width) - b.x; - b.height = Math.max(this.y + this.height, box.y + box.height) - b.y; - return fullBox(b); - }, - transform: function transform(m) { - var xMin = Infinity, - xMax = -Infinity, - yMin = Infinity, - yMax = -Infinity, - bbox; - var pts = [new SVG.Point(this.x, this.y), new SVG.Point(this.x2, this.y), new SVG.Point(this.x, this.y2), new SVG.Point(this.x2, this.y2)]; - pts.forEach(function (p) { - p = p.transform(m); - xMin = Math.min(xMin, p.x); - xMax = Math.max(xMax, p.x); - yMin = Math.min(yMin, p.y); - yMax = Math.max(yMax, p.y); - }); - bbox = new this.constructor(); - bbox.x = xMin; - bbox.width = xMax - xMin; - bbox.y = yMin; - bbox.height = yMax - yMin; - fullBox(bbox); - return bbox; - } - } - }); - SVG.BBox = SVG.invent({ - // Initialize - create: function create(element) { - SVG.Box.apply(this, [].slice.call(arguments)); // get values if element is given - - if (element instanceof SVG.Element) { - var box; // yes this is ugly, but Firefox can be a pain when it comes to elements that are not yet rendered - - try { - if (!document.documentElement.contains) { - // This is IE - it does not support contains() for top-level SVGs - var topParent = element.node; - - while (topParent.parentNode) { - topParent = topParent.parentNode; - } - - if (topParent != document) throw new Error('Element not in the dom'); - } // the element is NOT in the dom, throw error - // disabling the check below which fixes issue #76 - // if (!document.documentElement.contains(element.node)) throw new Exception('Element not in the dom') - // find native bbox - - - box = element.node.getBBox(); - } catch (e) { - if (element instanceof SVG.Shape) { - if (!SVG.parser.draw) { - // fixes apexcharts/vue-apexcharts #14 - SVG.prepare(); - } - - var clone = element.clone(SVG.parser.draw.instance).show(); - box = clone.node.getBBox(); - clone.remove(); - } else { - box = { - x: element.node.clientLeft, - y: element.node.clientTop, - width: element.node.clientWidth, - height: element.node.clientHeight - }; - } - } - - SVG.Box.call(this, box); - } - }, - // Define ancestor - inherit: SVG.Box, - // Define Parent - parent: SVG.Element, - // Constructor - construct: { - // Get bounding box - bbox: function bbox() { - return new SVG.BBox(this); - } - } - }); - SVG.BBox.prototype.constructor = SVG.BBox; - SVG.extend(SVG.Element, { - tbox: function tbox() { - console.warn('Use of TBox is deprecated and mapped to RBox. Use .rbox() instead.'); - return this.rbox(this.doc()); - } - }); - SVG.RBox = SVG.invent({ - // Initialize - create: function create(element) { - SVG.Box.apply(this, [].slice.call(arguments)); - - if (element instanceof SVG.Element) { - SVG.Box.call(this, element.node.getBoundingClientRect()); - } - }, - inherit: SVG.Box, - // define Parent - parent: SVG.Element, - extend: { - addOffset: function addOffset() { - // offset by window scroll position, because getBoundingClientRect changes when window is scrolled - this.x += window.pageXOffset; - this.y += window.pageYOffset; - return this; - } - }, - // Constructor - construct: { - // Get rect box - rbox: function rbox(el) { - if (el) return new SVG.RBox(this).transform(el.screenCTM().inverse()); - return new SVG.RBox(this).addOffset(); - } - } - }); - SVG.RBox.prototype.constructor = SVG.RBox; - SVG.Matrix = SVG.invent({ - // Initialize - create: function create(source) { - var i, - base = arrayToMatrix([1, 0, 0, 1, 0, 0]); // ensure source as object - - source = source instanceof SVG.Element ? source.matrixify() : typeof source === 'string' ? arrayToMatrix(source.split(SVG.regex.delimiter).map(parseFloat)) : arguments.length == 6 ? arrayToMatrix([].slice.call(arguments)) : Array.isArray(source) ? arrayToMatrix(source) : _typeof(source) === 'object' ? source : base; // merge source - - for (i = abcdef.length - 1; i >= 0; --i) { - this[abcdef[i]] = source[abcdef[i]] != null ? source[abcdef[i]] : base[abcdef[i]]; - } - }, - // Add methods - extend: { - // Extract individual transformations - extract: function extract() { - // find delta transform points - var px = deltaTransformPoint(this, 0, 1), - py = deltaTransformPoint(this, 1, 0), - skewX = 180 / Math.PI * Math.atan2(px.y, px.x) - 90; - return { - // translation - x: this.e, - y: this.f, - transformedX: (this.e * Math.cos(skewX * Math.PI / 180) + this.f * Math.sin(skewX * Math.PI / 180)) / Math.sqrt(this.a * this.a + this.b * this.b), - transformedY: (this.f * Math.cos(skewX * Math.PI / 180) + this.e * Math.sin(-skewX * Math.PI / 180)) / Math.sqrt(this.c * this.c + this.d * this.d), - // skew - skewX: -skewX, - skewY: 180 / Math.PI * Math.atan2(py.y, py.x), - // scale - scaleX: Math.sqrt(this.a * this.a + this.b * this.b), - scaleY: Math.sqrt(this.c * this.c + this.d * this.d), - // rotation - rotation: skewX, - a: this.a, - b: this.b, - c: this.c, - d: this.d, - e: this.e, - f: this.f, - matrix: new SVG.Matrix(this) - }; - }, - // Clone matrix - clone: function clone() { - return new SVG.Matrix(this); - }, - // Morph one matrix into another - morph: function morph(matrix) { - // store new destination - this.destination = new SVG.Matrix(matrix); - return this; - }, - // Get morphed matrix at a given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; // calculate morphed matrix at a given position - - var matrix = new SVG.Matrix({ - a: this.a + (this.destination.a - this.a) * pos, - b: this.b + (this.destination.b - this.b) * pos, - c: this.c + (this.destination.c - this.c) * pos, - d: this.d + (this.destination.d - this.d) * pos, - e: this.e + (this.destination.e - this.e) * pos, - f: this.f + (this.destination.f - this.f) * pos - }); - return matrix; - }, - // Multiplies by given matrix - multiply: function multiply(matrix) { - return new SVG.Matrix(this.native().multiply(parseMatrix(matrix).native())); - }, - // Inverses matrix - inverse: function inverse() { - return new SVG.Matrix(this.native().inverse()); - }, - // Translate matrix - translate: function translate(x, y) { - return new SVG.Matrix(this.native().translate(x || 0, y || 0)); - }, - // Scale matrix - scale: function scale(x, y, cx, cy) { - // support uniformal scale - if (arguments.length == 1) { - y = x; - } else if (arguments.length == 3) { - cy = cx; - cx = y; - y = x; - } - - return this.around(cx, cy, new SVG.Matrix(x, 0, 0, y, 0, 0)); - }, - // Rotate matrix - rotate: function rotate(r, cx, cy) { - // convert degrees to radians - r = SVG.utils.radians(r); - return this.around(cx, cy, new SVG.Matrix(Math.cos(r), Math.sin(r), -Math.sin(r), Math.cos(r), 0, 0)); - }, - // Flip matrix on x or y, at a given offset - flip: function flip(a, o) { - return a == 'x' ? this.scale(-1, 1, o, 0) : a == 'y' ? this.scale(1, -1, 0, o) : this.scale(-1, -1, a, o != null ? o : a); - }, - // Skew - skew: function skew(x, y, cx, cy) { - // support uniformal skew - if (arguments.length == 1) { - y = x; - } else if (arguments.length == 3) { - cy = cx; - cx = y; - y = x; - } // convert degrees to radians - - - x = SVG.utils.radians(x); - y = SVG.utils.radians(y); - return this.around(cx, cy, new SVG.Matrix(1, Math.tan(y), Math.tan(x), 1, 0, 0)); - }, - // SkewX - skewX: function skewX(x, cx, cy) { - return this.skew(x, 0, cx, cy); - }, - // SkewY - skewY: function skewY(y, cx, cy) { - return this.skew(0, y, cx, cy); - }, - // Transform around a center point - around: function around(cx, cy, matrix) { - return this.multiply(new SVG.Matrix(1, 0, 0, 1, cx || 0, cy || 0)).multiply(matrix).multiply(new SVG.Matrix(1, 0, 0, 1, -cx || 0, -cy || 0)); - }, - // Convert to native SVGMatrix - native: function native() { - // create new matrix - var matrix = SVG.parser.native.createSVGMatrix(); // update with current values - - for (var i = abcdef.length - 1; i >= 0; i--) { - matrix[abcdef[i]] = this[abcdef[i]]; - } - - return matrix; - }, - // Convert matrix to string - toString: function toString() { - // Construct the matrix directly, avoid values that are too small - return 'matrix(' + float32String(this.a) + ',' + float32String(this.b) + ',' + float32String(this.c) + ',' + float32String(this.d) + ',' + float32String(this.e) + ',' + float32String(this.f) + ')'; - } - }, - // Define parent - parent: SVG.Element, - // Add parent method - construct: { - // Get current matrix - ctm: function ctm() { - return new SVG.Matrix(this.node.getCTM()); - }, - // Get current screen matrix - screenCTM: function screenCTM() { - /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537 - This is needed because FF does not return the transformation matrix - for the inner coordinate system when getScreenCTM() is called on nested svgs. - However all other Browsers do that */ - if (this instanceof SVG.Nested) { - var rect = this.rect(1, 1); - var m = rect.node.getScreenCTM(); - rect.remove(); - return new SVG.Matrix(m); - } - - return new SVG.Matrix(this.node.getScreenCTM()); - } - } - }); - SVG.Point = SVG.invent({ - // Initialize - create: function create(x, y) { - var source, - base = { - x: 0, - y: 0 // ensure source as object - - }; - source = Array.isArray(x) ? { - x: x[0], - y: x[1] - } : _typeof(x) === 'object' ? { - x: x.x, - y: x.y - } : x != null ? { - x: x, - y: y != null ? y : x - } : base; // If y has no value, then x is used has its value - // merge source - - this.x = source.x; - this.y = source.y; - }, - // Add methods - extend: { - // Clone point - clone: function clone() { - return new SVG.Point(this); - }, - // Morph one point into another - morph: function morph(x, y) { - // store new destination - this.destination = new SVG.Point(x, y); - return this; - }, - // Get morphed point at a given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; // calculate morphed matrix at a given position - - var point = new SVG.Point({ - x: this.x + (this.destination.x - this.x) * pos, - y: this.y + (this.destination.y - this.y) * pos - }); - return point; - }, - // Convert to native SVGPoint - native: function native() { - // create new point - var point = SVG.parser.native.createSVGPoint(); // update with current values - - point.x = this.x; - point.y = this.y; - return point; - }, - // transform point with matrix - transform: function transform(matrix) { - return new SVG.Point(this.native().matrixTransform(matrix.native())); - } - } - }); - SVG.extend(SVG.Element, { - // Get point - point: function point(x, y) { - return new SVG.Point(x, y).transform(this.screenCTM().inverse()); - } - }); - SVG.extend(SVG.Element, { - // Set svg element attribute - attr: function attr(a, v, n) { - // act as full getter - if (a == null) { - // get an object of attributes - a = {}; - v = this.node.attributes; - - for (n = v.length - 1; n >= 0; n--) { - a[v[n].nodeName] = SVG.regex.isNumber.test(v[n].nodeValue) ? parseFloat(v[n].nodeValue) : v[n].nodeValue; - } - - return a; - } else if (_typeof(a) === 'object') { - // apply every attribute individually if an object is passed - for (v in a) { - this.attr(v, a[v]); - } - } else if (v === null) { - // remove value - this.node.removeAttribute(a); - } else if (v == null) { - // act as a getter if the first and only argument is not an object - v = this.node.getAttribute(a); - return v == null ? SVG.defaults.attrs[a] : SVG.regex.isNumber.test(v) ? parseFloat(v) : v; - } else { - // BUG FIX: some browsers will render a stroke if a color is given even though stroke width is 0 - if (a == 'stroke-width') { - this.attr('stroke', parseFloat(v) > 0 ? this._stroke : null); - } else if (a == 'stroke') { - this._stroke = v; - } // convert image fill and stroke to patterns - - - if (a == 'fill' || a == 'stroke') { - if (SVG.regex.isImage.test(v)) { - v = this.doc().defs().image(v, 0, 0); - } - - if (v instanceof SVG.Image) { - v = this.doc().defs().pattern(0, 0, function () { - this.add(v); - }); - } - } // ensure correct numeric values (also accepts NaN and Infinity) - - - if (typeof v === 'number') { - v = new SVG.Number(v); - } // ensure full hex color - else if (SVG.Color.isColor(v)) { - v = new SVG.Color(v); - } // parse array values - else if (Array.isArray(v)) { - v = new SVG.Array(v); - } // if the passed attribute is leading... - - - if (a == 'leading') { - // ... call the leading method instead - if (this.leading) { - this.leading(v); - } - } else { - // set given attribute on node - typeof n === 'string' ? this.node.setAttributeNS(n, a, v.toString()) : this.node.setAttribute(a, v.toString()); - } // rebuild if required - - - if (this.rebuild && (a == 'font-size' || a == 'x')) { - this.rebuild(a, v); - } - } - - return this; - } - }); - SVG.extend(SVG.Element, { - // Add transformations - transform: function transform(o, relative) { - // get target in case of the fx module, otherwise reference this - var target = this, - matrix, - bbox; // act as a getter - - if (_typeof(o) !== 'object') { - // get current matrix - matrix = new SVG.Matrix(target).extract(); - return typeof o === 'string' ? matrix[o] : matrix; - } // get current matrix - - - matrix = new SVG.Matrix(target); // ensure relative flag - - relative = !!relative || !!o.relative; // act on matrix - - if (o.a != null) { - matrix = relative // relative - ? matrix.multiply(new SVG.Matrix(o)) // absolute - : new SVG.Matrix(o); // act on rotation - } else if (o.rotation != null) { - // ensure centre point - ensureCentre(o, target); // apply transformation - - matrix = relative // relative - ? matrix.rotate(o.rotation, o.cx, o.cy) // absolute - : matrix.rotate(o.rotation - matrix.extract().rotation, o.cx, o.cy); // act on scale - } else if (o.scale != null || o.scaleX != null || o.scaleY != null) { - // ensure centre point - ensureCentre(o, target); // ensure scale values on both axes - - o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1; - o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1; - - if (!relative) { - // absolute; multiply inversed values - var e = matrix.extract(); - o.scaleX = o.scaleX * 1 / e.scaleX; - o.scaleY = o.scaleY * 1 / e.scaleY; - } - - matrix = matrix.scale(o.scaleX, o.scaleY, o.cx, o.cy); // act on skew - } else if (o.skew != null || o.skewX != null || o.skewY != null) { - // ensure centre point - ensureCentre(o, target); // ensure skew values on both axes - - o.skewX = o.skew != null ? o.skew : o.skewX != null ? o.skewX : 0; - o.skewY = o.skew != null ? o.skew : o.skewY != null ? o.skewY : 0; - - if (!relative) { - // absolute; reset skew values - var e = matrix.extract(); - matrix = matrix.multiply(new SVG.Matrix().skew(e.skewX, e.skewY, o.cx, o.cy).inverse()); - } - - matrix = matrix.skew(o.skewX, o.skewY, o.cx, o.cy); // act on flip - } else if (o.flip) { - if (o.flip == 'x' || o.flip == 'y') { - o.offset = o.offset == null ? target.bbox()['c' + o.flip] : o.offset; - } else { - if (o.offset == null) { - bbox = target.bbox(); - o.flip = bbox.cx; - o.offset = bbox.cy; - } else { - o.flip = o.offset; - } - } - - matrix = new SVG.Matrix().flip(o.flip, o.offset); // act on translate - } else if (o.x != null || o.y != null) { - if (relative) { - // relative - matrix = matrix.translate(o.x, o.y); - } else { - // absolute - if (o.x != null) matrix.e = o.x; - if (o.y != null) matrix.f = o.y; - } - } - - return this.attr('transform', matrix); - } - }); - SVG.extend(SVG.FX, { - transform: function transform(o, relative) { - // get target in case of the fx module, otherwise reference this - var target = this.target(), - matrix, - bbox; // act as a getter - - if (_typeof(o) !== 'object') { - // get current matrix - matrix = new SVG.Matrix(target).extract(); - return typeof o === 'string' ? matrix[o] : matrix; - } // ensure relative flag - - - relative = !!relative || !!o.relative; // act on matrix - - if (o.a != null) { - matrix = new SVG.Matrix(o); // act on rotation - } else if (o.rotation != null) { - // ensure centre point - ensureCentre(o, target); // apply transformation - - matrix = new SVG.Rotate(o.rotation, o.cx, o.cy); // act on scale - } else if (o.scale != null || o.scaleX != null || o.scaleY != null) { - // ensure centre point - ensureCentre(o, target); // ensure scale values on both axes - - o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1; - o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1; - matrix = new SVG.Scale(o.scaleX, o.scaleY, o.cx, o.cy); // act on skew - } else if (o.skewX != null || o.skewY != null) { - // ensure centre point - ensureCentre(o, target); // ensure skew values on both axes - - o.skewX = o.skewX != null ? o.skewX : 0; - o.skewY = o.skewY != null ? o.skewY : 0; - matrix = new SVG.Skew(o.skewX, o.skewY, o.cx, o.cy); // act on flip - } else if (o.flip) { - if (o.flip == 'x' || o.flip == 'y') { - o.offset = o.offset == null ? target.bbox()['c' + o.flip] : o.offset; - } else { - if (o.offset == null) { - bbox = target.bbox(); - o.flip = bbox.cx; - o.offset = bbox.cy; - } else { - o.flip = o.offset; - } - } - - matrix = new SVG.Matrix().flip(o.flip, o.offset); // act on translate - } else if (o.x != null || o.y != null) { - matrix = new SVG.Translate(o.x, o.y); - } - - if (!matrix) return this; - matrix.relative = relative; - this.last().transforms.push(matrix); - return this._callStart(); - } - }); - SVG.extend(SVG.Element, { - // Reset all transformations - untransform: function untransform() { - return this.attr('transform', null); - }, - // merge the whole transformation chain into one matrix and returns it - matrixify: function matrixify() { - var matrix = (this.attr('transform') || ''). // split transformations - split(SVG.regex.transforms).slice(0, -1).map(function (str) { - // generate key => value pairs - var kv = str.trim().split('('); - return [kv[0], kv[1].split(SVG.regex.delimiter).map(function (str) { - return parseFloat(str); - })]; - }) // merge every transformation into one matrix - .reduce(function (matrix, transform) { - if (transform[0] == 'matrix') return matrix.multiply(arrayToMatrix(transform[1])); - return matrix[transform[0]].apply(matrix, transform[1]); - }, new SVG.Matrix()); - return matrix; - }, - // add an element to another parent without changing the visual representation on the screen - toParent: function toParent(parent) { - if (this == parent) return this; - var ctm = this.screenCTM(); - var pCtm = parent.screenCTM().inverse(); - this.addTo(parent).untransform().transform(pCtm.multiply(ctm)); - return this; - }, - // same as above with parent equals root-svg - toDoc: function toDoc() { - return this.toParent(this.doc()); - } - }); - SVG.Transformation = SVG.invent({ - create: function create(source, inversed) { - if (arguments.length > 1 && typeof inversed !== 'boolean') { - return this.constructor.call(this, [].slice.call(arguments)); - } - - if (Array.isArray(source)) { - for (var i = 0, len = this.arguments.length; i < len; ++i) { - this[this.arguments[i]] = source[i]; - } - } else if (_typeof(source) === 'object') { - for (var i = 0, len = this.arguments.length; i < len; ++i) { - this[this.arguments[i]] = source[this.arguments[i]]; - } - } - - this.inversed = false; - - if (inversed === true) { - this.inversed = true; - } - }, - extend: { - arguments: [], - method: '', - at: function at(pos) { - var params = []; - - for (var i = 0, len = this.arguments.length; i < len; ++i) { - params.push(this[this.arguments[i]]); - } - - var m = this._undo || new SVG.Matrix(); - m = new SVG.Matrix().morph(SVG.Matrix.prototype[this.method].apply(m, params)).at(pos); - return this.inversed ? m.inverse() : m; - }, - undo: function undo(o) { - for (var i = 0, len = this.arguments.length; i < len; ++i) { - o[this.arguments[i]] = typeof this[this.arguments[i]] === 'undefined' ? 0 : o[this.arguments[i]]; - } // The method SVG.Matrix.extract which was used before calling this - // method to obtain a value for the parameter o doesn't return a cx and - // a cy so we use the ones that were provided to this object at its creation - - - o.cx = this.cx; - o.cy = this.cy; - this._undo = new SVG[capitalize(this.method)](o, true).at(1); - return this; - } - } - }); - SVG.Translate = SVG.invent({ - parent: SVG.Matrix, - inherit: SVG.Transformation, - create: function create(source, inversed) { - this.constructor.apply(this, [].slice.call(arguments)); - }, - extend: { - arguments: ['transformedX', 'transformedY'], - method: 'translate' - } - }); - SVG.Rotate = SVG.invent({ - parent: SVG.Matrix, - inherit: SVG.Transformation, - create: function create(source, inversed) { - this.constructor.apply(this, [].slice.call(arguments)); - }, - extend: { - arguments: ['rotation', 'cx', 'cy'], - method: 'rotate', - at: function at(pos) { - var m = new SVG.Matrix().rotate(new SVG.Number().morph(this.rotation - (this._undo ? this._undo.rotation : 0)).at(pos), this.cx, this.cy); - return this.inversed ? m.inverse() : m; - }, - undo: function undo(o) { - this._undo = o; - return this; - } - } - }); - SVG.Scale = SVG.invent({ - parent: SVG.Matrix, - inherit: SVG.Transformation, - create: function create(source, inversed) { - this.constructor.apply(this, [].slice.call(arguments)); - }, - extend: { - arguments: ['scaleX', 'scaleY', 'cx', 'cy'], - method: 'scale' - } - }); - SVG.Skew = SVG.invent({ - parent: SVG.Matrix, - inherit: SVG.Transformation, - create: function create(source, inversed) { - this.constructor.apply(this, [].slice.call(arguments)); - }, - extend: { - arguments: ['skewX', 'skewY', 'cx', 'cy'], - method: 'skew' - } - }); - SVG.extend(SVG.Element, { - // Dynamic style generator - style: function style(s, v) { - if (arguments.length == 0) { - // get full style - return this.node.style.cssText || ''; - } else if (arguments.length < 2) { - // apply every style individually if an object is passed - if (_typeof(s) === 'object') { - for (v in s) { - this.style(v, s[v]); - } - } else if (SVG.regex.isCss.test(s)) { - // parse css string - s = s.split(/\s*;\s*/) // filter out suffix ; and stuff like ;; - .filter(function (e) { - return !!e; - }).map(function (e) { - return e.split(/\s*:\s*/); - }); // apply every definition individually - - while (v = s.pop()) { - this.style(v[0], v[1]); - } - } else { - // act as a getter if the first and only argument is not an object - return this.node.style[camelCase(s)]; - } - } else { - this.node.style[camelCase(s)] = v === null || SVG.regex.isBlank.test(v) ? '' : v; - } - - return this; - } - }); - SVG.Parent = SVG.invent({ - // Initialize node - create: function create(element) { - this.constructor.call(this, element); - }, - // Inherit from - inherit: SVG.Element, - // Add class methods - extend: { - // Returns all child elements - children: function children() { - return SVG.utils.map(SVG.utils.filterSVGElements(this.node.childNodes), function (node) { - return SVG.adopt(node); - }); - }, - // Add given element at a position - add: function add(element, i) { - if (i == null) { - this.node.appendChild(element.node); - } else if (element.node != this.node.childNodes[i]) { - this.node.insertBefore(element.node, this.node.childNodes[i]); - } - - return this; - }, - // Basically does the same as `add()` but returns the added element instead - put: function put(element, i) { - this.add(element, i); - return element; - }, - // Checks if the given element is a child - has: function has(element) { - return this.index(element) >= 0; - }, - // Gets index of given element - index: function index(element) { - return [].slice.call(this.node.childNodes).indexOf(element.node); - }, - // Get a element at the given index - get: function get(i) { - return SVG.adopt(this.node.childNodes[i]); - }, - // Get first child - first: function first() { - return this.get(0); - }, - // Get the last child - last: function last() { - return this.get(this.node.childNodes.length - 1); - }, - // Iterates over all children and invokes a given block - each: function each(block, deep) { - var i, - il, - children = this.children(); - - for (i = 0, il = children.length; i < il; i++) { - if (children[i] instanceof SVG.Element) { - block.apply(children[i], [i, children]); - } - - if (deep && children[i] instanceof SVG.Container) { - children[i].each(block, deep); - } - } - - return this; - }, - // Remove a given child - removeElement: function removeElement(element) { - this.node.removeChild(element.node); - return this; - }, - // Remove all elements in this container - clear: function clear() { - // remove children - while (this.node.hasChildNodes()) { - this.node.removeChild(this.node.lastChild); - } // remove defs reference - - - delete this._defs; - return this; - }, - // Get defs - defs: function defs() { - return this.doc().defs(); - } - } - }); - SVG.extend(SVG.Parent, { - ungroup: function ungroup(parent, depth) { - if (depth === 0 || this instanceof SVG.Defs || this.node == SVG.parser.draw) return this; - parent = parent || (this instanceof SVG.Doc ? this : this.parent(SVG.Parent)); - depth = depth || Infinity; - this.each(function () { - if (this instanceof SVG.Defs) return this; - if (this instanceof SVG.Parent) return this.ungroup(parent, depth - 1); - return this.toParent(parent); - }); - this.node.firstChild || this.remove(); - return this; - }, - flatten: function flatten(parent, depth) { - return this.ungroup(parent, depth); - } - }); - SVG.Container = SVG.invent({ - // Initialize node - create: function create(element) { - this.constructor.call(this, element); - }, - // Inherit from - inherit: SVG.Parent - }); - SVG.ViewBox = SVG.invent({ - create: function create(source) { - var base = [0, 0, 0, 0]; - var x, - y, - width, - height, - box, - view, - we, - he, - wm = 1, - // width multiplier - hm = 1, - // height multiplier - reg = /[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?/gi; - - if (source instanceof SVG.Element) { - we = source; - he = source; - view = (source.attr('viewBox') || '').match(reg); - box = source.bbox; // get dimensions of current node - - width = new SVG.Number(source.width()); - height = new SVG.Number(source.height()); // find nearest non-percentual dimensions - - while (width.unit == '%') { - wm *= width.value; - width = new SVG.Number(we instanceof SVG.Doc ? we.parent().offsetWidth : we.parent().width()); - we = we.parent(); - } - - while (height.unit == '%') { - hm *= height.value; - height = new SVG.Number(he instanceof SVG.Doc ? he.parent().offsetHeight : he.parent().height()); - he = he.parent(); - } // ensure defaults - - - this.x = 0; - this.y = 0; - this.width = width * wm; - this.height = height * hm; - this.zoom = 1; - - if (view) { - // get width and height from viewbox - x = parseFloat(view[0]); - y = parseFloat(view[1]); - width = parseFloat(view[2]); - height = parseFloat(view[3]); // calculate zoom accoring to viewbox - - this.zoom = this.width / this.height > width / height ? this.height / height : this.width / width; // calculate real pixel dimensions on parent SVG.Doc element - - this.x = x; - this.y = y; - this.width = width; - this.height = height; - } - } else { - // ensure source as object - source = typeof source === 'string' ? source.match(reg).map(function (el) { - return parseFloat(el); - }) : Array.isArray(source) ? source : _typeof(source) === 'object' ? [source.x, source.y, source.width, source.height] : arguments.length == 4 ? [].slice.call(arguments) : base; - this.x = source[0]; - this.y = source[1]; - this.width = source[2]; - this.height = source[3]; - } - }, - extend: { - toString: function toString() { - return this.x + ' ' + this.y + ' ' + this.width + ' ' + this.height; - }, - morph: function morph(x, y, width, height) { - this.destination = new SVG.ViewBox(x, y, width, height); - return this; - }, - at: function at(pos) { - if (!this.destination) return this; - return new SVG.ViewBox([this.x + (this.destination.x - this.x) * pos, this.y + (this.destination.y - this.y) * pos, this.width + (this.destination.width - this.width) * pos, this.height + (this.destination.height - this.height) * pos]); - } - }, - // Define parent - parent: SVG.Container, - // Add parent method - construct: { - // get/set viewbox - viewbox: function viewbox(x, y, width, height) { - if (arguments.length == 0) // act as a getter if there are no arguments - { - return new SVG.ViewBox(this); - } // otherwise act as a setter - - - return this.attr('viewBox', new SVG.ViewBox(x, y, width, height)); - } - } - }) // Add events to elements - ; - ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout', 'mousemove', // , 'mouseenter' -> not supported by IE - // , 'mouseleave' -> not supported by IE - 'touchstart', 'touchmove', 'touchleave', 'touchend', 'touchcancel'].forEach(function (event) { - // add event to SVG.Element - SVG.Element.prototype[event] = function (f) { - // bind event to element rather than element node - SVG.on(this.node, event, f); - return this; - }; - }); // Initialize listeners stack - - SVG.listeners = []; - SVG.handlerMap = []; - SVG.listenerId = 0; // Add event binder in the SVG namespace - - SVG.on = function (node, event, listener, binding, options) { - // create listener, get object-index - var l = listener.bind(binding || node.instance || node), - index = (SVG.handlerMap.indexOf(node) + 1 || SVG.handlerMap.push(node)) - 1, - ev = event.split('.')[0], - ns = event.split('.')[1] || '*'; // ensure valid object - - SVG.listeners[index] = SVG.listeners[index] || {}; - SVG.listeners[index][ev] = SVG.listeners[index][ev] || {}; - SVG.listeners[index][ev][ns] = SVG.listeners[index][ev][ns] || {}; - - if (!listener._svgjsListenerId) { - listener._svgjsListenerId = ++SVG.listenerId; - } // reference listener - - - SVG.listeners[index][ev][ns][listener._svgjsListenerId] = l; // add listener - - node.addEventListener(ev, l, options || false); - }; // Add event unbinder in the SVG namespace - - - SVG.off = function (node, event, listener) { - var index = SVG.handlerMap.indexOf(node), - ev = event && event.split('.')[0], - ns = event && event.split('.')[1], - namespace = ''; - if (index == -1) return; - - if (listener) { - if (typeof listener === 'function') listener = listener._svgjsListenerId; - if (!listener) return; // remove listener reference - - if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns || '*']) { - // remove listener - node.removeEventListener(ev, SVG.listeners[index][ev][ns || '*'][listener], false); - delete SVG.listeners[index][ev][ns || '*'][listener]; - } - } else if (ns && ev) { - // remove all listeners for a namespaced event - if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns]) { - for (listener in SVG.listeners[index][ev][ns]) { - SVG.off(node, [ev, ns].join('.'), listener); - } - - delete SVG.listeners[index][ev][ns]; - } - } else if (ns) { - // remove all listeners for a specific namespace - for (event in SVG.listeners[index]) { - for (namespace in SVG.listeners[index][event]) { - if (ns === namespace) { - SVG.off(node, [event, ns].join('.')); - } - } - } - } else if (ev) { - // remove all listeners for the event - if (SVG.listeners[index][ev]) { - for (namespace in SVG.listeners[index][ev]) { - SVG.off(node, [ev, namespace].join('.')); - } - - delete SVG.listeners[index][ev]; - } - } else { - // remove all listeners on a given node - for (event in SVG.listeners[index]) { - SVG.off(node, event); - } - - delete SVG.listeners[index]; - delete SVG.handlerMap[index]; - } - }; // - - - SVG.extend(SVG.Element, { - // Bind given event to listener - on: function on(event, listener, binding, options) { - SVG.on(this.node, event, listener, binding, options); - return this; - }, - // Unbind event from listener - off: function off(event, listener) { - SVG.off(this.node, event, listener); - return this; - }, - // Fire given event - fire: function fire(event, data) { - // Dispatch event - if (event instanceof window.Event) { - this.node.dispatchEvent(event); - } else { - this.node.dispatchEvent(event = new SVG.CustomEvent(event, { - detail: data, - cancelable: true - })); - } - - this._event = event; - return this; - }, - event: function event() { - return this._event; - } - }); - SVG.Defs = SVG.invent({ - // Initialize node - create: 'defs', - // Inherit from - inherit: SVG.Container - }); - SVG.G = SVG.invent({ - // Initialize node - create: 'g', - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Move over x-axis - x: function x(_x3) { - return _x3 == null ? this.transform('x') : this.transform({ - x: _x3 - this.x() - }, true); - }, - // Move over y-axis - y: function y(_y3) { - return _y3 == null ? this.transform('y') : this.transform({ - y: _y3 - this.y() - }, true); - }, - // Move by center over x-axis - cx: function cx(x) { - return x == null ? this.gbox().cx : this.x(x - this.gbox().width / 2); - }, - // Move by center over y-axis - cy: function cy(y) { - return y == null ? this.gbox().cy : this.y(y - this.gbox().height / 2); - }, - gbox: function gbox() { - var bbox = this.bbox(), - trans = this.transform(); - bbox.x += trans.x; - bbox.x2 += trans.x; - bbox.cx += trans.x; - bbox.y += trans.y; - bbox.y2 += trans.y; - bbox.cy += trans.y; - return bbox; - } - }, - // Add parent method - construct: { - // Create a group element - group: function group() { - return this.put(new SVG.G()); - } - } - }); - SVG.Doc = SVG.invent({ - // Initialize node - create: function create(element) { - if (element) { - // ensure the presence of a dom element - element = typeof element === 'string' ? document.getElementById(element) : element; // If the target is an svg element, use that element as the main wrapper. - // This allows svg.js to work with svg documents as well. - - if (element.nodeName == 'svg') { - this.constructor.call(this, element); - } else { - this.constructor.call(this, SVG.create('svg')); - element.appendChild(this.node); - this.size('100%', '100%'); - } // set svg element attributes and ensure defs node - - - this.namespace().defs(); - } - }, - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Add namespaces - namespace: function namespace() { - return this.attr({ - xmlns: SVG.ns, - version: '1.1' - }).attr('xmlns:xlink', SVG.xlink, SVG.xmlns).attr('xmlns:svgjs', SVG.svgjs, SVG.xmlns); - }, - // Creates and returns defs element - defs: function defs() { - if (!this._defs) { - var defs; // Find or create a defs element in this instance - - if (defs = this.node.getElementsByTagName('defs')[0]) { - this._defs = SVG.adopt(defs); - } else { - this._defs = new SVG.Defs(); - } // Make sure the defs node is at the end of the stack - - - this.node.appendChild(this._defs.node); - } - - return this._defs; - }, - // custom parent method - parent: function parent() { - if (!this.node.parentNode || this.node.parentNode.nodeName == '#document') return null; - return this.node.parentNode; - }, - // Fix for possible sub-pixel offset. See: - // https://bugzilla.mozilla.org/show_bug.cgi?id=608812 - spof: function spof() { - var pos = this.node.getScreenCTM(); - - if (pos) { - this.style('left', -pos.e % 1 + 'px').style('top', -pos.f % 1 + 'px'); - } - - return this; - }, - // Removes the doc from the DOM - remove: function remove() { - if (this.parent()) { - this.parent().removeChild(this.node); - } - - return this; - }, - clear: function clear() { - // remove children - while (this.node.hasChildNodes()) { - this.node.removeChild(this.node.lastChild); - } // remove defs reference - - - delete this._defs; // add back parser - - if (SVG.parser.draw && !SVG.parser.draw.parentNode) { - this.node.appendChild(SVG.parser.draw); - } - - return this; - }, - clone: function clone(parent) { - // write dom data to the dom so the clone can pickup the data - this.writeDataToDom(); // get reference to node - - var node = this.node; // clone element and assign new id - - var clone = assignNewId(node.cloneNode(true)); // insert the clone in the given parent or after myself - - if (parent) { - (parent.node || parent).appendChild(clone.node); - } else { - node.parentNode.insertBefore(clone.node, node.nextSibling); - } - - return clone; - } - } - }); // ### This module adds backward / forward functionality to elements. - // - - SVG.extend(SVG.Element, { - // Get all siblings, including myself - siblings: function siblings() { - return this.parent().children(); - }, - // Get the curent position siblings - position: function position() { - return this.parent().index(this); - }, - // Get the next element (will return null if there is none) - next: function next() { - return this.siblings()[this.position() + 1]; - }, - // Get the next element (will return null if there is none) - previous: function previous() { - return this.siblings()[this.position() - 1]; - }, - // Send given element one step forward - forward: function forward() { - var i = this.position() + 1, - p = this.parent(); // move node one step forward - - p.removeElement(this).add(this, i); // make sure defs node is always at the top - - if (p instanceof SVG.Doc) { - p.node.appendChild(p.defs().node); - } - - return this; - }, - // Send given element one step backward - backward: function backward() { - var i = this.position(); - - if (i > 0) { - this.parent().removeElement(this).add(this, i - 1); - } - - return this; - }, - // Send given element all the way to the front - front: function front() { - var p = this.parent(); // Move node forward - - p.node.appendChild(this.node); // Make sure defs node is always at the top - - if (p instanceof SVG.Doc) { - p.node.appendChild(p.defs().node); - } - - return this; - }, - // Send given element all the way to the back - back: function back() { - if (this.position() > 0) { - this.parent().removeElement(this).add(this, 0); - } - - return this; - }, - // Inserts a given element before the targeted element - before: function before(element) { - element.remove(); - var i = this.position(); - this.parent().add(element, i); - return this; - }, - // Insters a given element after the targeted element - after: function after(element) { - element.remove(); - var i = this.position(); - this.parent().add(element, i + 1); - return this; - } - }); - SVG.Mask = SVG.invent({ - // Initialize node - create: function create() { - this.constructor.call(this, SVG.create('mask')); // keep references to masked elements - - this.targets = []; - }, - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Unmask all masked elements and remove itself - remove: function remove() { - // unmask all targets - for (var i = this.targets.length - 1; i >= 0; i--) { - if (this.targets[i]) { - this.targets[i].unmask(); - } - } - - this.targets = []; // remove mask from parent - - SVG.Element.prototype.remove.call(this); - return this; - } - }, - // Add parent method - construct: { - // Create masking element - mask: function mask() { - return this.defs().put(new SVG.Mask()); - } - } - }); - SVG.extend(SVG.Element, { - // Distribute mask to svg element - maskWith: function maskWith(element) { - // use given mask or create a new one - this.masker = element instanceof SVG.Mask ? element : this.parent().mask().add(element); // store reverence on self in mask - - this.masker.targets.push(this); // apply mask - - return this.attr('mask', 'url("#' + this.masker.attr('id') + '")'); - }, - // Unmask element - unmask: function unmask() { - delete this.masker; - return this.attr('mask', null); - } - }); - SVG.ClipPath = SVG.invent({ - // Initialize node - create: function create() { - this.constructor.call(this, SVG.create('clipPath')); // keep references to clipped elements - - this.targets = []; - }, - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Unclip all clipped elements and remove itself - remove: function remove() { - // unclip all targets - for (var i = this.targets.length - 1; i >= 0; i--) { - if (this.targets[i]) { - this.targets[i].unclip(); - } - } - - this.targets = []; // remove clipPath from parent - - this.parent().removeElement(this); - return this; - } - }, - // Add parent method - construct: { - // Create clipping element - clip: function clip() { - return this.defs().put(new SVG.ClipPath()); - } - } - }); // - - SVG.extend(SVG.Element, { - // Distribute clipPath to svg element - clipWith: function clipWith(element) { - // use given clip or create a new one - this.clipper = element instanceof SVG.ClipPath ? element : this.parent().clip().add(element); // store reverence on self in mask - - this.clipper.targets.push(this); // apply mask - - return this.attr('clip-path', 'url("#' + this.clipper.attr('id') + '")'); - }, - // Unclip element - unclip: function unclip() { - delete this.clipper; - return this.attr('clip-path', null); - } - }); - SVG.Gradient = SVG.invent({ - // Initialize node - create: function create(type) { - this.constructor.call(this, SVG.create(type + 'Gradient')); // store type - - this.type = type; - }, - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Add a color stop - at: function at(offset, color, opacity) { - return this.put(new SVG.Stop()).update(offset, color, opacity); - }, - // Update gradient - update: function update(block) { - // remove all stops - this.clear(); // invoke passed block - - if (typeof block === 'function') { - block.call(this, this); - } - - return this; - }, - // Return the fill id - fill: function fill() { - return 'url(#' + this.id() + ')'; - }, - // Alias string convertion to fill - toString: function toString() { - return this.fill(); - }, - // custom attr to handle transform - attr: function attr(a, b, c) { - if (a == 'transform') a = 'gradientTransform'; - return SVG.Container.prototype.attr.call(this, a, b, c); - } - }, - // Add parent method - construct: { - // Create gradient element in defs - gradient: function gradient(type, block) { - return this.defs().gradient(type, block); - } - } - }); // Add animatable methods to both gradient and fx module - - SVG.extend(SVG.Gradient, SVG.FX, { - // From position - from: function from(x, y) { - return (this._target || this).type == 'radial' ? this.attr({ - fx: new SVG.Number(x), - fy: new SVG.Number(y) - }) : this.attr({ - x1: new SVG.Number(x), - y1: new SVG.Number(y) - }); - }, - // To position - to: function to(x, y) { - return (this._target || this).type == 'radial' ? this.attr({ - cx: new SVG.Number(x), - cy: new SVG.Number(y) - }) : this.attr({ - x2: new SVG.Number(x), - y2: new SVG.Number(y) - }); - } - }); // Base gradient generation - - SVG.extend(SVG.Defs, { - // define gradient - gradient: function gradient(type, block) { - return this.put(new SVG.Gradient(type)).update(block); - } - }); - SVG.Stop = SVG.invent({ - // Initialize node - create: 'stop', - // Inherit from - inherit: SVG.Element, - // Add class methods - extend: { - // add color stops - update: function update(o) { - if (typeof o === 'number' || o instanceof SVG.Number) { - o = { - offset: arguments[0], - color: arguments[1], - opacity: arguments[2] - }; - } // set attributes - - - if (o.opacity != null) this.attr('stop-opacity', o.opacity); - if (o.color != null) this.attr('stop-color', o.color); - if (o.offset != null) this.attr('offset', new SVG.Number(o.offset)); - return this; - } - } - }); - SVG.Pattern = SVG.invent({ - // Initialize node - create: 'pattern', - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Return the fill id - fill: function fill() { - return 'url(#' + this.id() + ')'; - }, - // Update pattern by rebuilding - update: function update(block) { - // remove content - this.clear(); // invoke passed block - - if (typeof block === 'function') { - block.call(this, this); - } - - return this; - }, - // Alias string convertion to fill - toString: function toString() { - return this.fill(); - }, - // custom attr to handle transform - attr: function attr(a, b, c) { - if (a == 'transform') a = 'patternTransform'; - return SVG.Container.prototype.attr.call(this, a, b, c); - } - }, - // Add parent method - construct: { - // Create pattern element in defs - pattern: function pattern(width, height, block) { - return this.defs().pattern(width, height, block); - } - } - }); - SVG.extend(SVG.Defs, { - // Define gradient - pattern: function pattern(width, height, block) { - return this.put(new SVG.Pattern()).update(block).attr({ - x: 0, - y: 0, - width: width, - height: height, - patternUnits: 'userSpaceOnUse' - }); - } - }); - SVG.Shape = SVG.invent({ - // Initialize node - create: function create(element) { - this.constructor.call(this, element); - }, - // Inherit from - inherit: SVG.Element - }); - SVG.Bare = SVG.invent({ - // Initialize - create: function create(element, inherit) { - // construct element - this.constructor.call(this, SVG.create(element)); // inherit custom methods - - if (inherit) { - for (var method in inherit.prototype) { - if (typeof inherit.prototype[method] === 'function') { - this[method] = inherit.prototype[method]; - } - } - } - }, - // Inherit from - inherit: SVG.Element, - // Add methods - extend: { - // Insert some plain text - words: function words(text) { - // remove contents - while (this.node.hasChildNodes()) { - this.node.removeChild(this.node.lastChild); - } // create text node - - - this.node.appendChild(document.createTextNode(text)); - return this; - } - } - }); - SVG.extend(SVG.Parent, { - // Create an element that is not described by SVG.js - element: function element(_element, inherit) { - return this.put(new SVG.Bare(_element, inherit)); - } - }); - SVG.Symbol = SVG.invent({ - // Initialize node - create: 'symbol', - // Inherit from - inherit: SVG.Container, - construct: { - // create symbol - symbol: function symbol() { - return this.put(new SVG.Symbol()); - } - } - }); - SVG.Use = SVG.invent({ - // Initialize node - create: 'use', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Use element as a reference - element: function element(_element2, file) { - // Set lined element - return this.attr('href', (file || '') + '#' + _element2, SVG.xlink); - } - }, - // Add parent method - construct: { - // Create a use element - use: function use(element, file) { - return this.put(new SVG.Use()).element(element, file); - } - } - }); - SVG.Rect = SVG.invent({ - // Initialize node - create: 'rect', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create a rect element - rect: function rect(width, height) { - return this.put(new SVG.Rect()).size(width, height); - } - } - }); - SVG.Circle = SVG.invent({ - // Initialize node - create: 'circle', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create circle element, based on ellipse - circle: function circle(size) { - return this.put(new SVG.Circle()).rx(new SVG.Number(size).divide(2)).move(0, 0); - } - } - }); - SVG.extend(SVG.Circle, SVG.FX, { - // Radius x value - rx: function rx(_rx) { - return this.attr('r', _rx); - }, - // Alias radius x value - ry: function ry(_ry) { - return this.rx(_ry); - } - }); - SVG.Ellipse = SVG.invent({ - // Initialize node - create: 'ellipse', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create an ellipse - ellipse: function ellipse(width, height) { - return this.put(new SVG.Ellipse()).size(width, height).move(0, 0); - } - } - }); - SVG.extend(SVG.Ellipse, SVG.Rect, SVG.FX, { - // Radius x value - rx: function rx(_rx2) { - return this.attr('rx', _rx2); - }, - // Radius y value - ry: function ry(_ry2) { - return this.attr('ry', _ry2); - } - }); // Add common method - - SVG.extend(SVG.Circle, SVG.Ellipse, { - // Move over x-axis - x: function x(_x4) { - return _x4 == null ? this.cx() - this.rx() : this.cx(_x4 + this.rx()); - }, - // Move over y-axis - y: function y(_y4) { - return _y4 == null ? this.cy() - this.ry() : this.cy(_y4 + this.ry()); - }, - // Move by center over x-axis - cx: function cx(x) { - return x == null ? this.attr('cx') : this.attr('cx', x); - }, - // Move by center over y-axis - cy: function cy(y) { - return y == null ? this.attr('cy') : this.attr('cy', y); - }, - // Set width of element - width: function width(_width3) { - return _width3 == null ? this.rx() * 2 : this.rx(new SVG.Number(_width3).divide(2)); - }, - // Set height of element - height: function height(_height3) { - return _height3 == null ? this.ry() * 2 : this.ry(new SVG.Number(_height3).divide(2)); - }, - // Custom size function - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.rx(new SVG.Number(p.width).divide(2)).ry(new SVG.Number(p.height).divide(2)); - } - }); - SVG.Line = SVG.invent({ - // Initialize node - create: 'line', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Get array - array: function array() { - return new SVG.PointArray([[this.attr('x1'), this.attr('y1')], [this.attr('x2'), this.attr('y2')]]); - }, - // Overwrite native plot() method - plot: function plot(x1, y1, x2, y2) { - if (x1 == null) { - return this.array(); - } else if (typeof y1 !== 'undefined') { - x1 = { - x1: x1, - y1: y1, - x2: x2, - y2: y2 - }; - } else { - x1 = new SVG.PointArray(x1).toLine(); - } - - return this.attr(x1); - }, - // Move by left top corner - move: function move(x, y) { - return this.attr(this.array().move(x, y).toLine()); - }, - // Set element size to given width and height - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.attr(this.array().size(p.width, p.height).toLine()); - } - }, - // Add parent method - construct: { - // Create a line element - line: function line(x1, y1, x2, y2) { - // make sure plot is called as a setter - // x1 is not necessarily a number, it can also be an array, a string and a SVG.PointArray - return SVG.Line.prototype.plot.apply(this.put(new SVG.Line()), x1 != null ? [x1, y1, x2, y2] : [0, 0, 0, 0]); - } - } - }); - SVG.Polyline = SVG.invent({ - // Initialize node - create: 'polyline', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create a wrapped polyline element - polyline: function polyline(p) { - // make sure plot is called as a setter - return this.put(new SVG.Polyline()).plot(p || new SVG.PointArray()); - } - } - }); - SVG.Polygon = SVG.invent({ - // Initialize node - create: 'polygon', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create a wrapped polygon element - polygon: function polygon(p) { - // make sure plot is called as a setter - return this.put(new SVG.Polygon()).plot(p || new SVG.PointArray()); - } - } - }); // Add polygon-specific functions - - SVG.extend(SVG.Polyline, SVG.Polygon, { - // Get array - array: function array() { - return this._array || (this._array = new SVG.PointArray(this.attr('points'))); - }, - // Plot new path - plot: function plot(p) { - return p == null ? this.array() : this.clear().attr('points', typeof p === 'string' ? p : this._array = new SVG.PointArray(p)); - }, - // Clear array cache - clear: function clear() { - delete this._array; - return this; - }, - // Move by left top corner - move: function move(x, y) { - return this.attr('points', this.array().move(x, y)); - }, - // Set element size to given width and height - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.attr('points', this.array().size(p.width, p.height)); - } - }); // unify all point to point elements - - SVG.extend(SVG.Line, SVG.Polyline, SVG.Polygon, { - // Define morphable array - morphArray: SVG.PointArray, - // Move by left top corner over x-axis - x: function x(_x5) { - return _x5 == null ? this.bbox().x : this.move(_x5, this.bbox().y); - }, - // Move by left top corner over y-axis - y: function y(_y5) { - return _y5 == null ? this.bbox().y : this.move(this.bbox().x, _y5); - }, - // Set width of element - width: function width(_width4) { - var b = this.bbox(); - return _width4 == null ? b.width : this.size(_width4, b.height); - }, - // Set height of element - height: function height(_height4) { - var b = this.bbox(); - return _height4 == null ? b.height : this.size(b.width, _height4); - } - }); - SVG.Path = SVG.invent({ - // Initialize node - create: 'path', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Define morphable array - morphArray: SVG.PathArray, - // Get array - array: function array() { - return this._array || (this._array = new SVG.PathArray(this.attr('d'))); - }, - // Plot new path - plot: function plot(d) { - return d == null ? this.array() : this.clear().attr('d', typeof d === 'string' ? d : this._array = new SVG.PathArray(d)); - }, - // Clear array cache - clear: function clear() { - delete this._array; - return this; - }, - // Move by left top corner - move: function move(x, y) { - return this.attr('d', this.array().move(x, y)); - }, - // Move by left top corner over x-axis - x: function x(_x6) { - return _x6 == null ? this.bbox().x : this.move(_x6, this.bbox().y); - }, - // Move by left top corner over y-axis - y: function y(_y6) { - return _y6 == null ? this.bbox().y : this.move(this.bbox().x, _y6); - }, - // Set element size to given width and height - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.attr('d', this.array().size(p.width, p.height)); - }, - // Set width of element - width: function width(_width5) { - return _width5 == null ? this.bbox().width : this.size(_width5, this.bbox().height); - }, - // Set height of element - height: function height(_height5) { - return _height5 == null ? this.bbox().height : this.size(this.bbox().width, _height5); - } - }, - // Add parent method - construct: { - // Create a wrapped path element - path: function path(d) { - // make sure plot is called as a setter - return this.put(new SVG.Path()).plot(d || new SVG.PathArray()); - } - } - }); - SVG.Image = SVG.invent({ - // Initialize node - create: 'image', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // (re)load image - load: function load(url) { - if (!url) return this; - var self = this, - img = new window.Image(); // preload image - - SVG.on(img, 'load', function () { - SVG.off(img); - var p = self.parent(SVG.Pattern); - if (p === null) return; // ensure image size - - if (self.width() == 0 && self.height() == 0) { - self.size(img.width, img.height); - } // ensure pattern size if not set - - - if (p && p.width() == 0 && p.height() == 0) { - p.size(self.width(), self.height()); - } // callback - - - if (typeof self._loaded === 'function') { - self._loaded.call(self, { - width: img.width, - height: img.height, - ratio: img.width / img.height, - url: url - }); - } - }); - SVG.on(img, 'error', function (e) { - SVG.off(img); - - if (typeof self._error === 'function') { - self._error.call(self, e); - } - }); - return this.attr('href', img.src = this.src = url, SVG.xlink); - }, - // Add loaded callback - loaded: function loaded(_loaded) { - this._loaded = _loaded; - return this; - }, - error: function error(_error) { - this._error = _error; - return this; - } - }, - // Add parent method - construct: { - // create image element, load image and set its size - image: function image(source, width, height) { - return this.put(new SVG.Image()).load(source).size(width || 0, height || width || 0); - } - } - }); - SVG.Text = SVG.invent({ - // Initialize node - create: function create() { - this.constructor.call(this, SVG.create('text')); - this.dom.leading = new SVG.Number(1.3); // store leading value for rebuilding - - this._rebuild = true; // enable automatic updating of dy values - - this._build = false; // disable build mode for adding multiple lines - // set default font - - this.attr('font-family', SVG.defaults.attrs['font-family']); - }, - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Move over x-axis - x: function x(_x7) { - // act as getter - if (_x7 == null) { - return this.attr('x'); - } - - return this.attr('x', _x7); - }, - // Move over y-axis - y: function y(_y7) { - var oy = this.attr('y'), - o = typeof oy === 'number' ? oy - this.bbox().y : 0; // act as getter - - if (_y7 == null) { - return typeof oy === 'number' ? oy - o : oy; - } - - return this.attr('y', typeof _y7.valueOf() === 'number' ? _y7 + o : _y7); - }, - // Move center over x-axis - cx: function cx(x) { - return x == null ? this.bbox().cx : this.x(x - this.bbox().width / 2); - }, - // Move center over y-axis - cy: function cy(y) { - return y == null ? this.bbox().cy : this.y(y - this.bbox().height / 2); - }, - // Set the text content - text: function text(_text) { - // act as getter - if (typeof _text === 'undefined') { - var _text = ''; - var children = this.node.childNodes; - - for (var i = 0, len = children.length; i < len; ++i) { - // add newline if its not the first child and newLined is set to true - if (i != 0 && children[i].nodeType != 3 && SVG.adopt(children[i]).dom.newLined == true) { - _text += '\n'; - } // add content of this node - - - _text += children[i].textContent; - } - - return _text; - } // remove existing content - - - this.clear().build(true); - - if (typeof _text === 'function') { - // call block - _text.call(this, this); - } else { - // store text and make sure text is not blank - _text = _text.split('\n'); // build new lines - - for (var i = 0, il = _text.length; i < il; i++) { - this.tspan(_text[i]).newLine(); - } - } // disable build mode and rebuild lines - - - return this.build(false).rebuild(); - }, - // Set font size - size: function size(_size) { - return this.attr('font-size', _size).rebuild(); - }, - // Set / get leading - leading: function leading(value) { - // act as getter - if (value == null) { - return this.dom.leading; - } // act as setter - - - this.dom.leading = new SVG.Number(value); - return this.rebuild(); - }, - // Get all the first level lines - lines: function lines() { - var node = (this.textPath && this.textPath() || this).node; // filter tspans and map them to SVG.js instances - - var lines = SVG.utils.map(SVG.utils.filterSVGElements(node.childNodes), function (el) { - return SVG.adopt(el); - }); // return an instance of SVG.set - - return new SVG.Set(lines); - }, - // Rebuild appearance type - rebuild: function rebuild(_rebuild) { - // store new rebuild flag if given - if (typeof _rebuild === 'boolean') { - this._rebuild = _rebuild; - } // define position of all lines - - - if (this._rebuild) { - var self = this, - blankLineOffset = 0, - dy = this.dom.leading * new SVG.Number(this.attr('font-size')); - this.lines().each(function () { - if (this.dom.newLined) { - if (!self.textPath()) { - this.attr('x', self.attr('x')); - } - - if (this.text() == '\n') { - blankLineOffset += dy; - } else { - this.attr('dy', dy + blankLineOffset); - blankLineOffset = 0; - } - } - }); - this.fire('rebuild'); - } - - return this; - }, - // Enable / disable build mode - build: function build(_build) { - this._build = !!_build; - return this; - }, - // overwrite method from parent to set data properly - setData: function setData(o) { - this.dom = o; - this.dom.leading = new SVG.Number(o.leading || 1.3); - return this; - } - }, - // Add parent method - construct: { - // Create text element - text: function text(_text2) { - return this.put(new SVG.Text()).text(_text2); - }, - // Create plain text element - plain: function plain(text) { - return this.put(new SVG.Text()).plain(text); - } - } - }); - SVG.Tspan = SVG.invent({ - // Initialize node - create: 'tspan', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Set text content - text: function text(_text3) { - if (_text3 == null) return this.node.textContent + (this.dom.newLined ? '\n' : ''); - typeof _text3 === 'function' ? _text3.call(this, this) : this.plain(_text3); - return this; - }, - // Shortcut dx - dx: function dx(_dx) { - return this.attr('dx', _dx); - }, - // Shortcut dy - dy: function dy(_dy) { - return this.attr('dy', _dy); - }, - // Create new line - newLine: function newLine() { - // fetch text parent - var t = this.parent(SVG.Text); // mark new line - - this.dom.newLined = true; // apply new hy¡n - - return this.dy(t.dom.leading * t.attr('font-size')).attr('x', t.x()); - } - } - }); - SVG.extend(SVG.Text, SVG.Tspan, { - // Create plain text node - plain: function plain(text) { - // clear if build mode is disabled - if (this._build === false) { - this.clear(); - } // create text node - - - this.node.appendChild(document.createTextNode(text)); - return this; - }, - // Create a tspan - tspan: function tspan(text) { - var node = (this.textPath && this.textPath() || this).node, - tspan = new SVG.Tspan(); // clear if build mode is disabled - - if (this._build === false) { - this.clear(); - } // add new tspan - - - node.appendChild(tspan.node); - return tspan.text(text); - }, - // Clear all lines - clear: function clear() { - var node = (this.textPath && this.textPath() || this).node; // remove existing child nodes - - while (node.hasChildNodes()) { - node.removeChild(node.lastChild); - } - - return this; - }, - // Get length of text element - length: function length() { - return this.node.getComputedTextLength(); - } - }); - SVG.TextPath = SVG.invent({ - // Initialize node - create: 'textPath', - // Inherit from - inherit: SVG.Parent, - // Define parent class - parent: SVG.Text, - // Add parent method - construct: { - morphArray: SVG.PathArray, - // Create path for text to run on - path: function path(d) { - // create textPath element - var path = new SVG.TextPath(), - track = this.doc().defs().path(d); // move lines to textpath - - while (this.node.hasChildNodes()) { - path.node.appendChild(this.node.firstChild); - } // add textPath element as child node - - - this.node.appendChild(path.node); // link textPath to path and add content - - path.attr('href', '#' + track, SVG.xlink); - return this; - }, - // return the array of the path track element - array: function array() { - var track = this.track(); - return track ? track.array() : null; - }, - // Plot path if any - plot: function plot(d) { - var track = this.track(), - pathArray = null; - - if (track) { - pathArray = track.plot(d); - } - - return d == null ? pathArray : this; - }, - // Get the path track element - track: function track() { - var path = this.textPath(); - - if (path) { - return path.reference('href'); - } - }, - // Get the textPath child - textPath: function textPath() { - if (this.node.firstChild && this.node.firstChild.nodeName == 'textPath') { - return SVG.adopt(this.node.firstChild); - } - } - } - }); - SVG.Nested = SVG.invent({ - // Initialize node - create: function create() { - this.constructor.call(this, SVG.create('svg')); - this.style('overflow', 'visible'); - }, - // Inherit from - inherit: SVG.Container, - // Add parent method - construct: { - // Create nested svg document - nested: function nested() { - return this.put(new SVG.Nested()); - } - } - }); - SVG.A = SVG.invent({ - // Initialize node - create: 'a', - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Link url - to: function to(url) { - return this.attr('href', url, SVG.xlink); - }, - // Link show attribute - show: function show(target) { - return this.attr('show', target, SVG.xlink); - }, - // Link target attribute - target: function target(_target2) { - return this.attr('target', _target2); - } - }, - // Add parent method - construct: { - // Create a hyperlink element - link: function link(url) { - return this.put(new SVG.A()).to(url); - } - } - }); - SVG.extend(SVG.Element, { - // Create a hyperlink element - linkTo: function linkTo(url) { - var link = new SVG.A(); - - if (typeof url === 'function') { - url.call(link, link); - } else { - link.to(url); - } - - return this.parent().put(link).put(this); - } - }); - SVG.Marker = SVG.invent({ - // Initialize node - create: 'marker', - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Set width of element - width: function width(_width6) { - return this.attr('markerWidth', _width6); - }, - // Set height of element - height: function height(_height6) { - return this.attr('markerHeight', _height6); - }, - // Set marker refX and refY - ref: function ref(x, y) { - return this.attr('refX', x).attr('refY', y); - }, - // Update marker - update: function update(block) { - // remove all content - this.clear(); // invoke passed block - - if (typeof block === 'function') { - block.call(this, this); - } - - return this; - }, - // Return the fill id - toString: function toString() { - return 'url(#' + this.id() + ')'; - } - }, - // Add parent method - construct: { - marker: function marker(width, height, block) { - // Create marker element in defs - return this.defs().marker(width, height, block); - } - } - }); - SVG.extend(SVG.Defs, { - // Create marker - marker: function marker(width, height, block) { - // Set default viewbox to match the width and height, set ref to cx and cy and set orient to auto - return this.put(new SVG.Marker()).size(width, height).ref(width / 2, height / 2).viewbox(0, 0, width, height).attr('orient', 'auto').update(block); - } - }); - SVG.extend(SVG.Line, SVG.Polyline, SVG.Polygon, SVG.Path, { - // Create and attach markers - marker: function marker(_marker, width, height, block) { - var attr = ['marker']; // Build attribute name - - if (_marker != 'all') attr.push(_marker); - attr = attr.join('-'); // Set marker attribute - - _marker = arguments[1] instanceof SVG.Marker ? arguments[1] : this.doc().marker(width, height, block); - return this.attr(attr, _marker); - } - }); // Define list of available attributes for stroke and fill - - var sugar = { - stroke: ['color', 'width', 'opacity', 'linecap', 'linejoin', 'miterlimit', 'dasharray', 'dashoffset'], - fill: ['color', 'opacity', 'rule'], - prefix: function prefix(t, a) { - return a == 'color' ? t : t + '-' + a; - } // Add sugar for fill and stroke - - }; - ['fill', 'stroke'].forEach(function (m) { - var i, - extension = {}; - - extension[m] = function (o) { - if (typeof o === 'undefined') { - return this; - } - - if (typeof o === 'string' || SVG.Color.isRgb(o) || o && typeof o.fill === 'function') { - this.attr(m, o); - } else // set all attributes from sugar.fill and sugar.stroke list - { - for (i = sugar[m].length - 1; i >= 0; i--) { - if (o[sugar[m][i]] != null) { - this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]]); - } - } - } - - return this; - }; - - SVG.extend(SVG.Element, SVG.FX, extension); - }); - SVG.extend(SVG.Element, SVG.FX, { - // Map rotation to transform - rotate: function rotate(d, cx, cy) { - return this.transform({ - rotation: d, - cx: cx, - cy: cy - }); - }, - // Map skew to transform - skew: function skew(x, y, cx, cy) { - return arguments.length == 1 || arguments.length == 3 ? this.transform({ - skew: x, - cx: y, - cy: cx - }) : this.transform({ - skewX: x, - skewY: y, - cx: cx, - cy: cy - }); - }, - // Map scale to transform - scale: function scale(x, y, cx, cy) { - return arguments.length == 1 || arguments.length == 3 ? this.transform({ - scale: x, - cx: y, - cy: cx - }) : this.transform({ - scaleX: x, - scaleY: y, - cx: cx, - cy: cy - }); - }, - // Map translate to transform - translate: function translate(x, y) { - return this.transform({ - x: x, - y: y - }); - }, - // Map flip to transform - flip: function flip(a, o) { - o = typeof a === 'number' ? a : o; - return this.transform({ - flip: a || 'both', - offset: o - }); - }, - // Map matrix to transform - matrix: function matrix(m) { - return this.attr('transform', new SVG.Matrix(arguments.length == 6 ? [].slice.call(arguments) : m)); - }, - // Opacity - opacity: function opacity(value) { - return this.attr('opacity', value); - }, - // Relative move over x axis - dx: function dx(x) { - return this.x(new SVG.Number(x).plus(this instanceof SVG.FX ? 0 : this.x()), true); - }, - // Relative move over y axis - dy: function dy(y) { - return this.y(new SVG.Number(y).plus(this instanceof SVG.FX ? 0 : this.y()), true); - }, - // Relative move over x and y axes - dmove: function dmove(x, y) { - return this.dx(x).dy(y); - } - }); - SVG.extend(SVG.Rect, SVG.Ellipse, SVG.Circle, SVG.Gradient, SVG.FX, { - // Add x and y radius - radius: function radius(x, y) { - var type = (this._target || this).type; - return type == 'radial' || type == 'circle' ? this.attr('r', new SVG.Number(x)) : this.rx(x).ry(y == null ? x : y); - } - }); - SVG.extend(SVG.Path, { - // Get path length - length: function length() { - return this.node.getTotalLength(); - }, - // Get point at length - pointAt: function pointAt(length) { - return this.node.getPointAtLength(length); - } - }); - SVG.extend(SVG.Parent, SVG.Text, SVG.Tspan, SVG.FX, { - // Set font - font: function font(a, v) { - if (_typeof(a) === 'object') { - for (v in a) { - this.font(v, a[v]); - } - } - - return a == 'leading' ? this.leading(v) : a == 'anchor' ? this.attr('text-anchor', v) : a == 'size' || a == 'family' || a == 'weight' || a == 'stretch' || a == 'variant' || a == 'style' ? this.attr('font-' + a, v) : this.attr(a, v); - } - }); - SVG.Set = SVG.invent({ - // Initialize - create: function create(members) { - // Set initial state - Array.isArray(members) ? this.members = members : this.clear(); - }, - // Add class methods - extend: { - // Add element to set - add: function add() { - var i, - il, - elements = [].slice.call(arguments); - - for (i = 0, il = elements.length; i < il; i++) { - this.members.push(elements[i]); - } - - return this; - }, - // Remove element from set - remove: function remove(element) { - var i = this.index(element); // remove given child - - if (i > -1) { - this.members.splice(i, 1); - } - - return this; - }, - // Iterate over all members - each: function each(block) { - for (var i = 0, il = this.members.length; i < il; i++) { - block.apply(this.members[i], [i, this.members]); - } - - return this; - }, - // Restore to defaults - clear: function clear() { - // initialize store - this.members = []; - return this; - }, - // Get the length of a set - length: function length() { - return this.members.length; - }, - // Checks if a given element is present in set - has: function has(element) { - return this.index(element) >= 0; - }, - // retuns index of given element in set - index: function index(element) { - return this.members.indexOf(element); - }, - // Get member at given index - get: function get(i) { - return this.members[i]; - }, - // Get first member - first: function first() { - return this.get(0); - }, - // Get last member - last: function last() { - return this.get(this.members.length - 1); - }, - // Default value - valueOf: function valueOf() { - return this.members; - }, - // Get the bounding box of all members included or empty box if set has no items - bbox: function bbox() { - // return an empty box of there are no members - if (this.members.length == 0) { - return new SVG.RBox(); - } // get the first rbox and update the target bbox - - - var rbox = this.members[0].rbox(this.members[0].doc()); - this.each(function () { - // user rbox for correct position and visual representation - rbox = rbox.merge(this.rbox(this.doc())); - }); - return rbox; - } - }, - // Add parent method - construct: { - // Create a new set - set: function set(members) { - return new SVG.Set(members); - } - } - }); - SVG.FX.Set = SVG.invent({ - // Initialize node - create: function create(set) { - // store reference to set - this.set = set; - } - }); // Alias methods - - SVG.Set.inherit = function () { - var m, - methods = []; // gather shape methods - - for (var m in SVG.Shape.prototype) { - if (typeof SVG.Shape.prototype[m] === 'function' && typeof SVG.Set.prototype[m] !== 'function') { - methods.push(m); - } - } // apply shape aliasses - - - methods.forEach(function (method) { - SVG.Set.prototype[method] = function () { - for (var i = 0, il = this.members.length; i < il; i++) { - if (this.members[i] && typeof this.members[i][method] === 'function') { - this.members[i][method].apply(this.members[i], arguments); - } - } - - return method == 'animate' ? this.fx || (this.fx = new SVG.FX.Set(this)) : this; - }; - }); // clear methods for the next round - - methods = []; // gather fx methods - - for (var m in SVG.FX.prototype) { - if (typeof SVG.FX.prototype[m] === 'function' && typeof SVG.FX.Set.prototype[m] !== 'function') { - methods.push(m); - } - } // apply fx aliasses - - - methods.forEach(function (method) { - SVG.FX.Set.prototype[method] = function () { - for (var i = 0, il = this.set.members.length; i < il; i++) { - this.set.members[i].fx[method].apply(this.set.members[i].fx, arguments); - } - - return this; - }; - }); - }; - - SVG.extend(SVG.Element, { - // Store data values on svg nodes - data: function data(a, v, r) { - if (_typeof(a) === 'object') { - for (v in a) { - this.data(v, a[v]); - } - } else if (arguments.length < 2) { - try { - return JSON.parse(this.attr('data-' + a)); - } catch (e) { - return this.attr('data-' + a); - } - } else { - this.attr('data-' + a, v === null ? null : r === true || typeof v === 'string' || typeof v === 'number' ? v : JSON.stringify(v)); - } - - return this; - } - }); - SVG.extend(SVG.Element, { - // Remember arbitrary data - remember: function remember(k, v) { - // remember every item in an object individually - if (_typeof(arguments[0]) === 'object') { - for (var v in k) { - this.remember(v, k[v]); - } - } // retrieve memory - else if (arguments.length == 1) { - return this.memory()[k]; - } // store memory - else { - this.memory()[k] = v; - } - - return this; - }, - // Erase a given memory - forget: function forget() { - if (arguments.length == 0) { - this._memory = {}; - } else { - for (var i = arguments.length - 1; i >= 0; i--) { - delete this.memory()[arguments[i]]; - } - } - - return this; - }, - // Initialize or return local memory object - memory: function memory() { - return this._memory || (this._memory = {}); - } - }); // Method for getting an element by id - - SVG.get = function (id) { - var node = document.getElementById(idFromReference(id) || id); - return SVG.adopt(node); - }; // Select elements by query string - - - SVG.select = function (query, parent) { - return new SVG.Set(SVG.utils.map((parent || document).querySelectorAll(query), function (node) { - return SVG.adopt(node); - })); - }; - - SVG.extend(SVG.Parent, { - // Scoped select method - select: function select(query) { - return SVG.select(query, this.node); - } - }); - - function pathRegReplace(a, b, c, d) { - return c + d.replace(SVG.regex.dots, ' .'); - } // creates deep clone of array - - - function array_clone(arr) { - var clone = arr.slice(0); - - for (var i = clone.length; i--;) { - if (Array.isArray(clone[i])) { - clone[i] = array_clone(clone[i]); - } - } - - return clone; - } // tests if a given element is instance of an object - - - function _is(el, obj) { - return el instanceof obj; - } // tests if a given selector matches an element - - - function _matches(el, selector) { - return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector); - } // Convert dash-separated-string to camelCase - - - function camelCase(s) { - return s.toLowerCase().replace(/-(.)/g, function (m, g) { - return g.toUpperCase(); - }); - } // Capitalize first letter of a string - - - function capitalize(s) { - return s.charAt(0).toUpperCase() + s.slice(1); - } // Ensure to six-based hex - - - function fullHex(hex) { - return hex.length == 4 ? ['#', hex.substring(1, 2), hex.substring(1, 2), hex.substring(2, 3), hex.substring(2, 3), hex.substring(3, 4), hex.substring(3, 4)].join('') : hex; - } // Component to hex value - - - function compToHex(comp) { - var hex = comp.toString(16); - return hex.length == 1 ? '0' + hex : hex; - } // Calculate proportional width and height values when necessary - - - function proportionalSize(element, width, height) { - if (width == null || height == null) { - var box = element.bbox(); - - if (width == null) { - width = box.width / box.height * height; - } else if (height == null) { - height = box.height / box.width * width; - } - } - - return { - width: width, - height: height - }; - } // Delta transform point - - - function deltaTransformPoint(matrix, x, y) { - return { - x: x * matrix.a + y * matrix.c + 0, - y: x * matrix.b + y * matrix.d + 0 - }; - } // Map matrix array to object - - - function arrayToMatrix(a) { - return { - a: a[0], - b: a[1], - c: a[2], - d: a[3], - e: a[4], - f: a[5] - }; - } // Parse matrix if required - - - function parseMatrix(matrix) { - if (!(matrix instanceof SVG.Matrix)) { - matrix = new SVG.Matrix(matrix); - } - - return matrix; - } // Add centre point to transform object - - - function ensureCentre(o, target) { - o.cx = o.cx == null ? target.bbox().cx : o.cx; - o.cy = o.cy == null ? target.bbox().cy : o.cy; - } // PathArray Helpers - - - function arrayToString(a) { - for (var i = 0, il = a.length, s = ''; i < il; i++) { - s += a[i][0]; - - if (a[i][1] != null) { - s += a[i][1]; - - if (a[i][2] != null) { - s += ' '; - s += a[i][2]; - - if (a[i][3] != null) { - s += ' '; - s += a[i][3]; - s += ' '; - s += a[i][4]; - - if (a[i][5] != null) { - s += ' '; - s += a[i][5]; - s += ' '; - s += a[i][6]; - - if (a[i][7] != null) { - s += ' '; - s += a[i][7]; - } - } - } - } - } - } - - return s + ' '; - } // Deep new id assignment - - - function assignNewId(node) { - // do the same for SVG child nodes as well - for (var i = node.childNodes.length - 1; i >= 0; i--) { - if (node.childNodes[i] instanceof window.SVGElement) { - assignNewId(node.childNodes[i]); - } - } - - return SVG.adopt(node).id(SVG.eid(node.nodeName)); - } // Add more bounding box properties - - - function fullBox(b) { - if (b.x == null) { - b.x = 0; - b.y = 0; - b.width = 0; - b.height = 0; - } - - b.w = b.width; - b.h = b.height; - b.x2 = b.x + b.width; - b.y2 = b.y + b.height; - b.cx = b.x + b.width / 2; - b.cy = b.y + b.height / 2; - return b; - } // Get id from reference string - - - function idFromReference(url) { - var m = (url || '').toString().match(SVG.regex.reference); - if (m) return m[1]; - } // If values like 1e-88 are passed, this is not a valid 32 bit float, - // but in those cases, we are so close to 0 that 0 works well! - - - function float32String(v) { - return Math.abs(v) > 1e-37 ? v : 0; - } // Create matrix array for looping - - - var abcdef = 'abcdef'.split(''); // Add CustomEvent to IE9 and IE10 - - if (typeof window.CustomEvent !== 'function') { - // Code from: https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent - var CustomEventPoly = function CustomEventPoly(event, options) { - options = options || { - bubbles: false, - cancelable: false, - detail: undefined - }; - var e = document.createEvent('CustomEvent'); - e.initCustomEvent(event, options.bubbles, options.cancelable, options.detail); - return e; - }; - - CustomEventPoly.prototype = window.Event.prototype; - SVG.CustomEvent = CustomEventPoly; - } else { - SVG.CustomEvent = window.CustomEvent; - } // requestAnimationFrame / cancelAnimationFrame Polyfill with fallback based on Paul Irish - - - (function (w) { - var lastTime = 0; - var vendors = ['moz', 'webkit']; - - for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { - w.requestAnimationFrame = w[vendors[x] + 'RequestAnimationFrame']; - w.cancelAnimationFrame = w[vendors[x] + 'CancelAnimationFrame'] || w[vendors[x] + 'CancelRequestAnimationFrame']; - } - - w.requestAnimationFrame = w.requestAnimationFrame || function (callback) { - var currTime = new Date().getTime(); - var timeToCall = Math.max(0, 16 - (currTime - lastTime)); - var id = w.setTimeout(function () { - callback(currTime + timeToCall); - }, timeToCall); - lastTime = currTime + timeToCall; - return id; - }; - - w.cancelAnimationFrame = w.cancelAnimationFrame || w.clearTimeout; - })(window); - - return SVG; -}); - -/*! svg.filter.js - v2.0.2 - 2016-02-24 -* https://github.com/wout/svg.filter.js -* Copyright (c) 2016 Wout Fierens; Licensed MIT */ -(function() { - - // Main filter class - SVG.Filter = SVG.invent({ - create: 'filter', - inherit: SVG.Parent, - extend: { - // Static strings - source: 'SourceGraphic', - sourceAlpha: 'SourceAlpha', - background: 'BackgroundImage', - backgroundAlpha: 'BackgroundAlpha', - fill: 'FillPaint', - stroke: 'StrokePaint', - - autoSetIn: true, - // Custom put method for leaner code - put: function(element, i) { - this.add(element, i); - - if(!element.attr('in') && this.autoSetIn){ - element.attr('in',this.source); - } - if(!element.attr('result')){ - element.attr('result',element); - } - - return element - }, - // Blend effect - blend: function(in1, in2, mode) { - return this.put(new SVG.BlendEffect(in1, in2, mode)) - }, - // ColorMatrix effect - colorMatrix: function(type, values) { - return this.put(new SVG.ColorMatrixEffect(type, values)) - }, - // ConvolveMatrix effect - convolveMatrix: function(matrix) { - return this.put(new SVG.ConvolveMatrixEffect(matrix)) - }, - // ComponentTransfer effect - componentTransfer: function(components) { - return this.put(new SVG.ComponentTransferEffect(components)) - }, - // Composite effect - composite: function(in1, in2, operator) { - return this.put(new SVG.CompositeEffect(in1, in2, operator)) - }, - // Flood effect - flood: function(color, opacity) { - return this.put(new SVG.FloodEffect(color, opacity)) - }, - // Offset effect - offset: function(x, y) { - return this.put(new SVG.OffsetEffect(x,y)) - }, - // Image effect - image: function(src) { - return this.put(new SVG.ImageEffect(src)) - }, - // Merge effect - merge: function() { - //pass the array of arguments to the constructor because we dont know if the user gave us an array as the first arguemnt or wether they listed the effects in the arguments - var args = [undefined]; - for(var i in arguments) args.push(arguments[i]); - return this.put(new (SVG.MergeEffect.bind.apply(SVG.MergeEffect,args))) - }, - // Gaussian Blur effect - gaussianBlur: function(x,y) { - return this.put(new SVG.GaussianBlurEffect(x,y)) - }, - // Morphology effect - morphology: function(operator,radius){ - return this.put(new SVG.MorphologyEffect(operator,radius)) - }, - // DiffuseLighting effect - diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){ - return this.put(new SVG.DiffuseLightingEffect(surfaceScale,diffuseConstant,kernelUnitLength)) - }, - // DisplacementMap effect - displacementMap: function(in1,in2,scale,xChannelSelector,yChannelSelector){ - return this.put(new SVG.DisplacementMapEffect(in1,in2,scale,xChannelSelector,yChannelSelector)) - }, - // SpecularLighting effect - specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){ - return this.put(new SVG.SpecularLightingEffect(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength)) - }, - // Tile effect - tile: function(){ - return this.put(new SVG.TileEffect()); - }, - // Turbulence effect - turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){ - return this.put(new SVG.TurbulenceEffect(baseFrequency,numOctaves,seed,stitchTiles,type)) - }, - // Default string value - toString: function() { - return 'url(#' + this.attr('id') + ')' - } - } - }); - - //add .filter function - SVG.extend(SVG.Defs, { - // Define filter - filter: function(block) { - var filter = this.put(new SVG.Filter); - - /* invoke passed block */ - if (typeof block === 'function') - block.call(filter, filter); - - return filter - } - }); - SVG.extend(SVG.Container, { - // Define filter on defs - filter: function(block) { - return this.defs().filter(block) - } - }); - SVG.extend(SVG.Element, SVG.G, SVG.Nested, { - // Create filter element in defs and store reference - filter: function(block) { - this.filterer = block instanceof SVG.Element ? - block : this.doc().filter(block); - - if(this.doc() && this.filterer.doc() !== this.doc()){ - this.doc().defs().add(this.filterer); - } - - this.attr('filter', this.filterer); - - return this.filterer - }, - // Remove filter - unfilter: function(remove) { - /* also remove the filter node */ - if (this.filterer && remove === true) - this.filterer.remove(); - - /* delete reference to filterer */ - delete this.filterer; - - /* remove filter attribute */ - return this.attr('filter', null) - } - }); - - // Create SVG.Effect class - SVG.Effect = SVG.invent({ - create: function(){ - this.constructor.call(this); - }, - inherit: SVG.Element, - extend: { - // Set in attribute - in: function(effect) { - return effect == null? this.parent() && this.parent().select('[result="'+this.attr('in')+'"]').get(0) || this.attr('in') : this.attr('in', effect) - }, - // Named result - result: function(result) { - return result == null? this.attr('result') : this.attr('result',result) - }, - // Stringification - toString: function() { - return this.result() - } - } - }); - - // create class for parent effects like merge - // Inherit from SVG.Parent - SVG.ParentEffect = SVG.invent({ - create: function(){ - this.constructor.call(this); - }, - inherit: SVG.Parent, - extend: { - // Set in attribute - in: function(effect) { - return effect == null? this.parent() && this.parent().select('[result="'+this.attr('in')+'"]').get(0) || this.attr('in') : this.attr('in', effect) - }, - // Named result - result: function(result) { - return result == null? this.attr('result') : this.attr('result',result) - }, - // Stringification - toString: function() { - return this.result() - } - } - }); - - //chaining - var chainingEffects = { - // Blend effect - blend: function(in2, mode) { - return this.parent() && this.parent().blend(this, in2, mode) //pass this as the first input - }, - // ColorMatrix effect - colorMatrix: function(type, values) { - return this.parent() && this.parent().colorMatrix(type, values).in(this) - }, - // ConvolveMatrix effect - convolveMatrix: function(matrix) { - return this.parent() && this.parent().convolveMatrix(matrix).in(this) - }, - // ComponentTransfer effect - componentTransfer: function(components) { - return this.parent() && this.parent().componentTransfer(components).in(this) - }, - // Composite effect - composite: function(in2, operator) { - return this.parent() && this.parent().composite(this, in2, operator) //pass this as the first input - }, - // Flood effect - flood: function(color, opacity) { - return this.parent() && this.parent().flood(color, opacity) //this effect dont have inputs - }, - // Offset effect - offset: function(x, y) { - return this.parent() && this.parent().offset(x,y).in(this) - }, - // Image effect - image: function(src) { - return this.parent() && this.parent().image(src) //this effect dont have inputs - }, - // Merge effect - merge: function() { - return this.parent() && this.parent().merge.apply(this.parent(),[this].concat(arguments)) //pass this as the first argument - }, - // Gaussian Blur effect - gaussianBlur: function(x,y) { - return this.parent() && this.parent().gaussianBlur(x,y).in(this) - }, - // Morphology effect - morphology: function(operator,radius){ - return this.parent() && this.parent().morphology(operator,radius).in(this) - }, - // DiffuseLighting effect - diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){ - return this.parent() && this.parent().diffuseLighting(surfaceScale,diffuseConstant,kernelUnitLength).in(this) - }, - // DisplacementMap effect - displacementMap: function(in2,scale,xChannelSelector,yChannelSelector){ - return this.parent() && this.parent().displacementMap(this,in2,scale,xChannelSelector,yChannelSelector) //pass this as the first input - }, - // SpecularLighting effect - specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){ - return this.parent() && this.parent().specularLighting(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength).in(this) - }, - // Tile effect - tile: function(){ - return this.parent() && this.parent().tile().in(this) - }, - // Turbulence effect - turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){ - return this.parent() && this.parent().turbulence(baseFrequency,numOctaves,seed,stitchTiles,type).in(this) - } - }; - SVG.extend(SVG.Effect,chainingEffects); - SVG.extend(SVG.ParentEffect,chainingEffects); - - //crea class for child effects, like MergeNode, FuncR and lights - SVG.ChildEffect = SVG.invent({ - create: function(){ - this.constructor.call(this); - }, - inherit: SVG.Element, - extend: { - in: function(effect){ - this.attr('in',effect); - } - //dont include any "result" functions because these types of nodes dont have them - } - }); - - // Create all different effects - var effects = { - blend: function(in1,in2,mode){ - this.attr({ - in: in1, - in2: in2, - mode: mode || 'normal' - }); - }, - colorMatrix: function(type,values){ - if (type == 'matrix') - values = normaliseMatrix(values); - - this.attr({ - type: type - , values: typeof values == 'undefined' ? null : values - }); - }, - convolveMatrix: function(matrix){ - matrix = normaliseMatrix(matrix); - - this.attr({ - order: Math.sqrt(matrix.split(' ').length) - , kernelMatrix: matrix - }); - }, - composite: function(in1, in2, operator){ - this.attr({ - in: in1, - in2: in2, - operator: operator - }); - }, - flood: function(color,opacity){ - this.attr('flood-color',color); - if(opacity != null) this.attr('flood-opacity',opacity); - }, - offset: function(x,y){ - this.attr({ - dx: x, - dy: y - }); - }, - image: function(src){ - this.attr('href', src, SVG.xlink); - }, - displacementMap: function(in1,in2,scale,xChannelSelector,yChannelSelector){ - this.attr({ - in: in1, - in2: in2, - scale: scale, - xChannelSelector: xChannelSelector, - yChannelSelector: yChannelSelector - }); - }, - gaussianBlur: function(x,y){ - if(x != null || y != null) - this.attr('stdDeviation', listString(Array.prototype.slice.call(arguments))); - else - this.attr('stdDeviation', '0 0'); - }, - morphology: function(operator,radius){ - this.attr({ - operator: operator, - radius: radius - }); - }, - tile: function(){ - - }, - turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){ - this.attr({ - numOctaves: numOctaves, - seed: seed, - stitchTiles: stitchTiles, - baseFrequency: baseFrequency, - type: type - }); - } - }; - - // Create all parent effects - var parentEffects = { - merge: function(){ - var children; - - //test to see if we have a set - if(arguments[0] instanceof SVG.Set){ - var that = this; - arguments[0].each(function(i){ - if(this instanceof SVG.MergeNode) - that.put(this); - else if(this instanceof SVG.Effect || this instanceof SVG.ParentEffect) - that.put(new SVG.MergeNode(this)); - }); - } - else{ - //if the first argument is an array use it - if(Array.isArray(arguments[0])) - children = arguments[0]; - else - children = arguments; - - for(var i = 0; i < children.length; i++){ - if(children[i] instanceof SVG.MergeNode){ - this.put(children[i]); - } - else this.put(new SVG.MergeNode(children[i])); - } - } - }, - componentTransfer: function(compontents){ - /* create rgb set */ - this.rgb = new SVG.Set - - /* create components */ - ;(['r', 'g', 'b', 'a']).forEach(function(c) { - /* create component */ - this[c] = new SVG['Func' + c.toUpperCase()]('identity'); - - /* store component in set */ - this.rgb.add(this[c]); - - /* add component node */ - this.node.appendChild(this[c].node); - }.bind(this)); //lost context in foreach - - /* set components */ - if (compontents) { - if (compontents.rgb) { -(['r', 'g', 'b']).forEach(function(c) { - this[c].attr(compontents.rgb); - }.bind(this)); - - delete compontents.rgb; - } - - /* set individual components */ - for (var c in compontents) - this[c].attr(compontents[c]); - } - }, - diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){ - this.attr({ - surfaceScale: surfaceScale, - diffuseConstant: diffuseConstant, - kernelUnitLength: kernelUnitLength - }); - }, - specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){ - this.attr({ - surfaceScale: surfaceScale, - diffuseConstant: diffuseConstant, - specularExponent: specularExponent, - kernelUnitLength: kernelUnitLength - }); - }, - }; - - // Create child effects like PointLight and MergeNode - var childEffects = { - distantLight: function(azimuth, elevation){ - this.attr({ - azimuth: azimuth, - elevation: elevation - }); - }, - pointLight: function(x,y,z){ - this.attr({ - x: x, - y: y, - z: z - }); - }, - spotLight: function(x,y,z,pointsAtX,pointsAtY,pointsAtZ){ - this.attr({ - x: x, - y: y, - z: z, - pointsAtX: pointsAtX, - pointsAtY: pointsAtY, - pointsAtZ: pointsAtZ - }); - }, - mergeNode: function(in1){ - this.attr('in',in1); - } - } - - // Create compontent functions - ;(['r', 'g', 'b', 'a']).forEach(function(c) { - /* create class */ - childEffects['Func' + c.toUpperCase()] = function(type) { - this.attr('type',type); - - // take diffent arguments based on the type - switch(type){ - case 'table': - this.attr('tableValues',arguments[1]); - break - case 'linear': - this.attr('slope',arguments[1]); - this.attr('intercept',arguments[2]); - break - case 'gamma': - this.attr('amplitude',arguments[1]); - this.attr('exponent',arguments[2]); - this.attr('offset',arguments[2]); - break - } - }; - }); - - //create effects - foreach(effects,function(effect,i){ - - /* capitalize name */ - var name = i.charAt(0).toUpperCase() + i.slice(1); - var proto = {}; - - /* create class */ - SVG[name + 'Effect'] = SVG.invent({ - create: function() { - //call super - this.constructor.call(this, SVG.create('fe' + name)); - - //call constructor for this effect - effect.apply(this,arguments); - - //set the result - this.result(this.attr('id') + 'Out'); - }, - inherit: SVG.Effect, - extend: proto - }); - }); - - //create parent effects - foreach(parentEffects,function(effect,i){ - - /* capitalize name */ - var name = i.charAt(0).toUpperCase() + i.slice(1); - var proto = {}; - - /* create class */ - SVG[name + 'Effect'] = SVG.invent({ - create: function() { - //call super - this.constructor.call(this, SVG.create('fe' + name)); - - //call constructor for this effect - effect.apply(this,arguments); - - //set the result - this.result(this.attr('id') + 'Out'); - }, - inherit: SVG.ParentEffect, - extend: proto - }); - }); - - //create child effects - foreach(childEffects,function(effect,i){ - - /* capitalize name */ - var name = i.charAt(0).toUpperCase() + i.slice(1); - var proto = {}; - - /* create class */ - SVG[name] = SVG.invent({ - create: function() { - //call super - this.constructor.call(this, SVG.create('fe' + name)); - - //call constructor for this effect - effect.apply(this,arguments); - }, - inherit: SVG.ChildEffect, - extend: proto - }); - }); - - // Effect-specific extensions - SVG.extend(SVG.MergeEffect,{ - in: function(effect){ - if(effect instanceof SVG.MergeNode) - this.add(effect,0); - else - this.add(new SVG.MergeNode(effect),0); - - return this - } - }); - SVG.extend(SVG.CompositeEffect,SVG.BlendEffect,SVG.DisplacementMapEffect,{ - in2: function(effect){ - return effect == null? this.parent() && this.parent().select('[result="'+this.attr('in2')+'"]').get(0) || this.attr('in2') : this.attr('in2', effect) - } - }); - - // Presets - SVG.filter = { - sepiatone: [ .343, .669, .119, 0, 0 - , .249, .626, .130, 0, 0 - , .172, .334, .111, 0, 0 - , .000, .000, .000, 1, 0 ] - }; - - // Helpers - function normaliseMatrix(matrix) { - /* convert possible array value to string */ - if (Array.isArray(matrix)) - matrix = new SVG.Array(matrix); - - /* ensure there are no leading, tailing or double spaces */ - return matrix.toString().replace(/^\s+/, '').replace(/\s+$/, '').replace(/\s+/g, ' ') - } - - function listString(list) { - if (!Array.isArray(list)) - return list - - for (var i = 0, l = list.length, s = []; i < l; i++) - s.push(list[i]); - - return s.join(' ') - } - - function foreach(){ //loops through mutiple objects - var fn = function(){}; - if(typeof arguments[arguments.length-1] == 'function'){ - fn = arguments[arguments.length-1]; - Array.prototype.splice.call(arguments,arguments.length-1,1); - } - for(var k in arguments){ - for(var i in arguments[k]){ - fn(arguments[k][i],i,arguments[k]); - } - } - } - -}).call(undefined); - -(function() { - -SVG.extend(SVG.PathArray, { - morph: function(array) { - - var startArr = this.value - , destArr = this.parse(array); - - var startOffsetM = 0 - , destOffsetM = 0; - - var startOffsetNextM = false - , destOffsetNextM = false; - - while(true){ - // stop if there is no M anymore - if(startOffsetM === false && destOffsetM === false) break - - // find the next M in path array - startOffsetNextM = findNextM(startArr, startOffsetM === false ? false : startOffsetM+1); - destOffsetNextM = findNextM( destArr, destOffsetM === false ? false : destOffsetM+1); - - // We have to add one M to the startArray - if(startOffsetM === false){ - var bbox = new SVG.PathArray(result.start).bbox(); - - // when the last block had no bounding box we simply take the first M we got - if(bbox.height == 0 || bbox.width == 0){ - startOffsetM = startArr.push(startArr[0]) - 1; - }else{ - // we take the middle of the bbox instead when we got one - startOffsetM = startArr.push( ['M', bbox.x + bbox.width/2, bbox.y + bbox.height/2 ] ) - 1; - } - } - - // We have to add one M to the destArray - if( destOffsetM === false){ - var bbox = new SVG.PathArray(result.dest).bbox(); - - if(bbox.height == 0 || bbox.width == 0){ - destOffsetM = destArr.push(destArr[0]) - 1; - }else{ - destOffsetM = destArr.push( ['M', bbox.x + bbox.width/2, bbox.y + bbox.height/2 ] ) - 1; - } - } - - // handle block from M to next M - var result = handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM); - - // update the arrays to their new values - startArr = startArr.slice(0, startOffsetM).concat(result.start, startOffsetNextM === false ? [] : startArr.slice(startOffsetNextM)); - destArr = destArr.slice(0, destOffsetM).concat(result.dest , destOffsetNextM === false ? [] : destArr.slice( destOffsetNextM)); - - // update offsets - startOffsetM = startOffsetNextM === false ? false : startOffsetM + result.start.length; - destOffsetM = destOffsetNextM === false ? false : destOffsetM + result.dest.length; - - } - - // copy back arrays - this.value = startArr; - this.destination = new SVG.PathArray(); - this.destination.value = destArr; - - return this - } -}); - - - -// sorry for the long declaration -// slices out one block (from M to M) and syncronize it so the types and length match -function handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM, undefined){ - - // slice out the block we need - var startArrTemp = startArr.slice(startOffsetM, startOffsetNextM || undefined) - , destArrTemp = destArr.slice( destOffsetM, destOffsetNextM || undefined); - - var i = 0 - , posStart = {pos:[0,0], start:[0,0]} - , posDest = {pos:[0,0], start:[0,0]}; - - do{ - - // convert shorthand types to long form - startArrTemp[i] = simplyfy.call(posStart, startArrTemp[i]); - destArrTemp[i] = simplyfy.call(posDest , destArrTemp[i]); - - // check if both shape types match - // 2 elliptical arc curve commands ('A'), are considered different if the - // flags (large-arc-flag, sweep-flag) don't match - if(startArrTemp[i][0] != destArrTemp[i][0] || startArrTemp[i][0] == 'M' || - (startArrTemp[i][0] == 'A' && - (startArrTemp[i][4] != destArrTemp[i][4] || startArrTemp[i][5] != destArrTemp[i][5]) - ) - ) { - - // if not, convert shapes to beziere - Array.prototype.splice.apply(startArrTemp, [i, 1].concat(toBeziere.call(posStart, startArrTemp[i]))); - Array.prototype.splice.apply(destArrTemp, [i, 1].concat(toBeziere.call(posDest, destArrTemp[i]))); - - } else { - - // only update positions otherwise - startArrTemp[i] = setPosAndReflection.call(posStart, startArrTemp[i]); - destArrTemp[i] = setPosAndReflection.call(posDest , destArrTemp[i]); - - } - - // we are at the end at both arrays. stop here - if(++i == startArrTemp.length && i == destArrTemp.length) break - - // destArray is longer. Add one element - if(i == startArrTemp.length){ - startArrTemp.push([ - 'C', - posStart.pos[0], - posStart.pos[1], - posStart.pos[0], - posStart.pos[1], - posStart.pos[0], - posStart.pos[1], - ]); - } - - // startArr is longer. Add one element - if(i == destArrTemp.length){ - destArrTemp.push([ - 'C', - posDest.pos[0], - posDest.pos[1], - posDest.pos[0], - posDest.pos[1], - posDest.pos[0], - posDest.pos[1] - ]); - } - - - }while(true) - - // return the updated block - return {start:startArrTemp, dest:destArrTemp} -} - -// converts shorthand types to long form -function simplyfy(val){ - - switch(val[0]){ - case 'z': // shorthand line to start - case 'Z': - val[0] = 'L'; - val[1] = this.start[0]; - val[2] = this.start[1]; - break - case 'H': // shorthand horizontal line - val[0] = 'L'; - val[2] = this.pos[1]; - break - case 'V': // shorthand vertical line - val[0] = 'L'; - val[2] = val[1]; - val[1] = this.pos[0]; - break - case 'T': // shorthand quadratic beziere - val[0] = 'Q'; - val[3] = val[1]; - val[4] = val[2]; - val[1] = this.reflection[1]; - val[2] = this.reflection[0]; - break - case 'S': // shorthand cubic beziere - val[0] = 'C'; - val[6] = val[4]; - val[5] = val[3]; - val[4] = val[2]; - val[3] = val[1]; - val[2] = this.reflection[1]; - val[1] = this.reflection[0]; - break - } - - return val - -} - -// updates reflection point and current position -function setPosAndReflection(val){ - - var len = val.length; - - this.pos = [ val[len-2], val[len-1] ]; - - if('SCQT'.indexOf(val[0]) != -1) - this.reflection = [ 2 * this.pos[0] - val[len-4], 2 * this.pos[1] - val[len-3] ]; - - return val -} - -// converts all types to cubic beziere -function toBeziere(val){ - var retVal = [val]; - - switch(val[0]){ - case 'M': // special handling for M - this.pos = this.start = [val[1], val[2]]; - return retVal - case 'L': - val[5] = val[3] = val[1]; - val[6] = val[4] = val[2]; - val[1] = this.pos[0]; - val[2] = this.pos[1]; - break - case 'Q': - val[6] = val[4]; - val[5] = val[3]; - val[4] = val[4] * 1/3 + val[2] * 2/3; - val[3] = val[3] * 1/3 + val[1] * 2/3; - val[2] = this.pos[1] * 1/3 + val[2] * 2/3; - val[1] = this.pos[0] * 1/3 + val[1] * 2/3; - break - case 'A': - retVal = arcToBeziere(this.pos, val); - val = retVal[0]; - break - } - - val[0] = 'C'; - this.pos = [val[5], val[6]]; - this.reflection = [2 * val[5] - val[3], 2 * val[6] - val[4]]; - - return retVal - -} - -// finds the next position of type M -function findNextM(arr, offset){ - - if(offset === false) return false - - for(var i = offset, len = arr.length;i < len;++i){ - - if(arr[i][0] == 'M') return i - - } - - return false -} - - - -// Convert an arc segment into equivalent cubic Bezier curves -// Depending on the arc, up to 4 curves might be used to represent it since a -// curve gives a good approximation for only a quarter of an ellipse -// The curves are returned as an array of SVG curve commands: -// [ ['C', x1, y1, x2, y2, x, y] ... ] -function arcToBeziere(pos, val) { - // Parameters extraction, handle out-of-range parameters as specified in the SVG spec - // See: https://www.w3.org/TR/SVG11/implnote.html#ArcOutOfRangeParameters - var rx = Math.abs(val[1]), ry = Math.abs(val[2]), xAxisRotation = val[3] % 360 - , largeArcFlag = val[4], sweepFlag = val[5], x = val[6], y = val[7] - , A = new SVG.Point(pos), B = new SVG.Point(x, y) - , primedCoord, lambda, mat, k, c, cSquare, t, O, OA, OB, tetaStart, tetaEnd - , deltaTeta, nbSectors, f, arcSegPoints, angle, sinAngle, cosAngle, pt, i, il - , retVal = [], x1, y1, x2, y2; - - // Ensure radii are non-zero - if(rx === 0 || ry === 0 || (A.x === B.x && A.y === B.y)) { - // treat this arc as a straight line segment - return [['C', A.x, A.y, B.x, B.y, B.x, B.y]] - } - - // Ensure radii are large enough using the algorithm provided in the SVG spec - // See: https://www.w3.org/TR/SVG11/implnote.html#ArcCorrectionOutOfRangeRadii - primedCoord = new SVG.Point((A.x-B.x)/2, (A.y-B.y)/2).transform(new SVG.Matrix().rotate(xAxisRotation)); - lambda = (primedCoord.x * primedCoord.x) / (rx * rx) + (primedCoord.y * primedCoord.y) / (ry * ry); - if(lambda > 1) { - lambda = Math.sqrt(lambda); - rx = lambda*rx; - ry = lambda*ry; - } - - // To simplify calculations, we make the arc part of a unit circle (rayon is 1) instead of an ellipse - mat = new SVG.Matrix().rotate(xAxisRotation).scale(1/rx, 1/ry).rotate(-xAxisRotation); - A = A.transform(mat); - B = B.transform(mat); - - // Calculate the horizontal and vertical distance between the initial and final point of the arc - k = [B.x-A.x, B.y-A.y]; - - // Find the length of the chord formed by A and B - cSquare = k[0]*k[0] + k[1]*k[1]; - c = Math.sqrt(cSquare); - - // Calculate the ratios of the horizontal and vertical distance on the length of the chord - k[0] /= c; - k[1] /= c; - - // Calculate the distance between the circle center and the chord midpoint - // using this formula: t = sqrt(r^2 - c^2 / 4) - // where t is the distance between the cirle center and the chord midpoint, - // r is the rayon of the circle and c is the chord length - // From: http://www.ajdesigner.com/phpcircle/circle_segment_chord_t.php - // Because of the imprecision of floating point numbers, cSquare might end - // up being slightly above 4 which would result in a negative radicand - // To prevent that, a test is made before computing the square root - t = (cSquare < 4) ? Math.sqrt(1 - cSquare/4) : 0; - - // For most situations, there are actually two different ellipses that - // satisfy the constraints imposed by the points A and B, the radii rx and ry, - // and the xAxisRotation - // When the flags largeArcFlag and sweepFlag are equal, it means that the - // second ellipse is used as a solution - // See: https://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands - if(largeArcFlag === sweepFlag) { - t *= -1; - } - - // Calculate the coordinates of the center of the circle from the midpoint of the chord - // This is done by multiplying the ratios calculated previously by the distance between - // the circle center and the chord midpoint and using these values to go from the midpoint - // to the center of the circle - // The negative of the vertical distance ratio is used to modify the x coordinate while - // the horizontal distance ratio is used to modify the y coordinate - // That is because the center of the circle is perpendicular to the chord and perpendicular - // lines are negative reciprocals - O = new SVG.Point((B.x+A.x)/2 + t*-k[1], (B.y+A.y)/2 + t*k[0]); - // Move the center of the circle at the origin - OA = new SVG.Point(A.x-O.x, A.y-O.y); - OB = new SVG.Point(B.x-O.x, B.y-O.y); - - // Calculate the start and end angle - tetaStart = Math.acos(OA.x/Math.sqrt(OA.x*OA.x + OA.y*OA.y)); - if (OA.y < 0) { - tetaStart *= -1; - } - tetaEnd = Math.acos(OB.x/Math.sqrt(OB.x*OB.x + OB.y*OB.y)); - if (OB.y < 0) { - tetaEnd *= -1; - } - - // If sweep-flag is '1', then the arc will be drawn in a "positive-angle" direction, - // make sure that the end angle is above the start angle - if (sweepFlag && tetaStart > tetaEnd) { - tetaEnd += 2*Math.PI; - } - // If sweep-flag is '0', then the arc will be drawn in a "negative-angle" direction, - // make sure that the end angle is below the start angle - if (!sweepFlag && tetaStart < tetaEnd) { - tetaEnd -= 2*Math.PI; - } - - // Find the number of Bezier curves that are required to represent the arc - // A cubic Bezier curve gives a good enough approximation when representing at most a quarter of a circle - nbSectors = Math.ceil(Math.abs(tetaStart-tetaEnd) * 2/Math.PI); - - // Calculate the coordinates of the points of all the Bezier curves required to represent the arc - // For an in-depth explanation of this part see: http://pomax.github.io/bezierinfo/#circles_cubic - arcSegPoints = []; - angle = tetaStart; - deltaTeta = (tetaEnd-tetaStart)/nbSectors; - f = 4*Math.tan(deltaTeta/4)/3; - for (i = 0; i <= nbSectors; i++) { // The <= is because a Bezier curve have a start and a endpoint - cosAngle = Math.cos(angle); - sinAngle = Math.sin(angle); - - pt = new SVG.Point(O.x+cosAngle, O.y+sinAngle); - arcSegPoints[i] = [new SVG.Point(pt.x+f*sinAngle, pt.y-f*cosAngle), pt, new SVG.Point(pt.x-f*sinAngle, pt.y+f*cosAngle)]; - - angle += deltaTeta; - } - - // Remove the first control point of the first segment point and remove the second control point of the last segment point - // These two control points are not used in the approximation of the arc, that is why they are removed - arcSegPoints[0][0] = arcSegPoints[0][1].clone(); - arcSegPoints[arcSegPoints.length-1][2] = arcSegPoints[arcSegPoints.length-1][1].clone(); - - // Revert the transformation that was applied to make the arc part of a unit circle instead of an ellipse - mat = new SVG.Matrix().rotate(xAxisRotation).scale(rx, ry).rotate(-xAxisRotation); - for (i = 0, il = arcSegPoints.length; i < il; i++) { - arcSegPoints[i][0] = arcSegPoints[i][0].transform(mat); - arcSegPoints[i][1] = arcSegPoints[i][1].transform(mat); - arcSegPoints[i][2] = arcSegPoints[i][2].transform(mat); - } - - - // Convert the segments points to SVG curve commands - for (i = 1, il = arcSegPoints.length; i < il; i++) { - pt = arcSegPoints[i-1][2]; - x1 = pt.x; - y1 = pt.y; - - pt = arcSegPoints[i][0]; - x2 = pt.x; - y2 = pt.y; - - pt = arcSegPoints[i][1]; - x = pt.x; - y = pt.y; - - retVal.push(['C', x1, y1, x2, y2, x, y]); - } - - return retVal -} -}()); - -/*! svg.draggable.js - v2.2.1 - 2016-08-25 -* https://github.com/wout/svg.draggable.js -* Copyright (c) 2016 Wout Fierens; Licensed MIT */ -(function() { - - // creates handler, saves it - function DragHandler(el){ - el.remember('_draggable', this); - this.el = el; - } - - - // Sets new parameter, starts dragging - DragHandler.prototype.init = function(constraint, val){ - var _this = this; - this.constraint = constraint; - this.value = val; - this.el.on('mousedown.drag', function(e){ _this.start(e); }); - this.el.on('touchstart.drag', function(e){ _this.start(e); }); - }; - - // transforms one point from screen to user coords - DragHandler.prototype.transformPoint = function(event, offset){ - event = event || window.event; - var touches = event.changedTouches && event.changedTouches[0] || event; - this.p.x = touches.pageX - (offset || 0); - this.p.y = touches.pageY; - return this.p.matrixTransform(this.m) - }; - - // gets elements bounding box with special handling of groups, nested and use - DragHandler.prototype.getBBox = function(){ - - var box = this.el.bbox(); - - if(this.el instanceof SVG.Nested) box = this.el.rbox(); - - if (this.el instanceof SVG.G || this.el instanceof SVG.Use || this.el instanceof SVG.Nested) { - box.x = this.el.x(); - box.y = this.el.y(); - } - - return box - }; - - // start dragging - DragHandler.prototype.start = function(e){ - - // check for left button - if(e.type == 'click'|| e.type == 'mousedown' || e.type == 'mousemove'){ - if((e.which || e.buttons) != 1){ - return - } - } - - var _this = this; - - // fire beforedrag event - this.el.fire('beforedrag', { event: e, handler: this }); - - // search for parent on the fly to make sure we can call - // draggable() even when element is not in the dom currently - this.parent = this.parent || this.el.parent(SVG.Nested) || this.el.parent(SVG.Doc); - this.p = this.parent.node.createSVGPoint(); - - // save current transformation matrix - this.m = this.el.node.getScreenCTM().inverse(); - - var box = this.getBBox(); - - var anchorOffset; - - // fix text-anchor in text-element (#37) - if(this.el instanceof SVG.Text){ - anchorOffset = this.el.node.getComputedTextLength(); - - switch(this.el.attr('text-anchor')){ - case 'middle': - anchorOffset /= 2; - break - case 'start': - anchorOffset = 0; - break; - } - } - - this.startPoints = { - // We take absolute coordinates since we are just using a delta here - point: this.transformPoint(e, anchorOffset), - box: box, - transform: this.el.transform() - }; - - // add drag and end events to window - SVG.on(window, 'mousemove.drag', function(e){ _this.drag(e); }); - SVG.on(window, 'touchmove.drag', function(e){ _this.drag(e); }); - SVG.on(window, 'mouseup.drag', function(e){ _this.end(e); }); - SVG.on(window, 'touchend.drag', function(e){ _this.end(e); }); - - // fire dragstart event - this.el.fire('dragstart', {event: e, p: this.startPoints.point, m: this.m, handler: this}); - - // prevent browser drag behavior - e.preventDefault(); - - // prevent propagation to a parent that might also have dragging enabled - e.stopPropagation(); - }; - - // while dragging - DragHandler.prototype.drag = function(e){ - - var box = this.getBBox() - , p = this.transformPoint(e) - , x = this.startPoints.box.x + p.x - this.startPoints.point.x - , y = this.startPoints.box.y + p.y - this.startPoints.point.y - , c = this.constraint - , gx = p.x - this.startPoints.point.x - , gy = p.y - this.startPoints.point.y; - - var event = new CustomEvent('dragmove', { - detail: { - event: e - , p: p - , m: this.m - , handler: this - } - , cancelable: true - }); - - this.el.fire(event); - - if(event.defaultPrevented) return p - - // move the element to its new position, if possible by constraint - if (typeof c == 'function') { - - var coord = c.call(this.el, x, y, this.m); - - // bool, just show us if movement is allowed or not - if (typeof coord == 'boolean') { - coord = { - x: coord, - y: coord - }; - } - - // if true, we just move. If !false its a number and we move it there - if (coord.x === true) { - this.el.x(x); - } else if (coord.x !== false) { - this.el.x(coord.x); - } - - if (coord.y === true) { - this.el.y(y); - } else if (coord.y !== false) { - this.el.y(coord.y); - } - - } else if (typeof c == 'object') { - - // keep element within constrained box - if (c.minX != null && x < c.minX) - x = c.minX; - else if (c.maxX != null && x > c.maxX - box.width){ - x = c.maxX - box.width; - }if (c.minY != null && y < c.minY) - y = c.minY; - else if (c.maxY != null && y > c.maxY - box.height) - y = c.maxY - box.height; - - if(this.el instanceof SVG.G) - this.el.matrix(this.startPoints.transform).transform({x:gx, y: gy}, true); - else - this.el.move(x, y); - } - - // so we can use it in the end-method, too - return p - }; - - DragHandler.prototype.end = function(e){ - - // final drag - var p = this.drag(e); - - // fire dragend event - this.el.fire('dragend', { event: e, p: p, m: this.m, handler: this }); - - // unbind events - SVG.off(window, 'mousemove.drag'); - SVG.off(window, 'touchmove.drag'); - SVG.off(window, 'mouseup.drag'); - SVG.off(window, 'touchend.drag'); - - }; - - SVG.extend(SVG.Element, { - // Make element draggable - // Constraint might be an object (as described in readme.md) or a function in the form "function (x, y)" that gets called before every move. - // The function can return a boolean or an object of the form {x, y}, to which the element will be moved. "False" skips moving, true moves to raw x, y. - draggable: function(value, constraint) { - - // Check the parameters and reassign if needed - if (typeof value == 'function' || typeof value == 'object') { - constraint = value; - value = true; - } - - var dragHandler = this.remember('_draggable') || new DragHandler(this); - - // When no parameter is given, value is true - value = typeof value === 'undefined' ? true : value; - - if(value) dragHandler.init(constraint || {}, value); - else { - this.off('mousedown.drag'); - this.off('touchstart.drag'); - } - - return this - } - - }); - -}).call(undefined); - -(function() { - -function SelectHandler(el) { - - this.el = el; - el.remember('_selectHandler', this); - this.pointSelection = {isSelected: false}; - this.rectSelection = {isSelected: false}; - -} - -SelectHandler.prototype.init = function (value, options) { - - var bbox = this.el.bbox(); - this.options = {}; - - // Merging the defaults and the options-object together - for (var i in this.el.selectize.defaults) { - this.options[i] = this.el.selectize.defaults[i]; - if (options[i] !== undefined) { - this.options[i] = options[i]; - } - } - - this.parent = this.el.parent(); - this.nested = (this.nested || this.parent.group()); - this.nested.matrix(new SVG.Matrix(this.el).translate(bbox.x, bbox.y)); - - // When deepSelect is enabled and the element is a line/polyline/polygon, draw only points for moving - if (this.options.deepSelect && ['line', 'polyline', 'polygon'].indexOf(this.el.type) !== -1) { - this.selectPoints(value); - } else { - this.selectRect(value); - } - - this.observe(); - this.cleanup(); - -}; - -SelectHandler.prototype.selectPoints = function (value) { - - this.pointSelection.isSelected = value; - - // When set is already there we dont have to create one - if (this.pointSelection.set) { - return this; - } - - // Create our set of elements - this.pointSelection.set = this.parent.set(); - // draw the circles and mark the element as selected - this.drawCircles(); - - return this; - -}; - -// create the point-array which contains the 2 points of a line or simply the points-array of polyline/polygon -SelectHandler.prototype.getPointArray = function () { - var bbox = this.el.bbox(); - - return this.el.array().valueOf().map(function (el) { - return [el[0] - bbox.x, el[1] - bbox.y]; - }); -}; - -// The function to draw the circles -SelectHandler.prototype.drawCircles = function () { - - var _this = this, array = this.getPointArray(); - - // go through the array of points - for (var i = 0, len = array.length; i < len; ++i) { - - var curriedEvent = (function (k) { - return function (ev) { - ev = ev || window.event; - ev.preventDefault ? ev.preventDefault() : ev.returnValue = false; - ev.stopPropagation(); - - var x = ev.pageX || ev.touches[0].pageX; - var y = ev.pageY || ev.touches[0].pageY; - _this.el.fire('point', {x: x, y: y, i: k, event: ev}); - }; - })(i); - - // add every point to the set - this.pointSelection.set.add( - // a circle with our css-classes and a touchstart-event which fires our event for moving points - this.nested.circle(this.options.radius) - .center(array[i][0], array[i][1]) - .addClass(this.options.classPoints) - .addClass(this.options.classPoints + '_point') - .on('touchstart', curriedEvent) - .on('mousedown', curriedEvent) - ); - } - -}; - -// every time a circle is moved, we have to update the positions of our circle -SelectHandler.prototype.updatePointSelection = function () { - var array = this.getPointArray(); - - this.pointSelection.set.each(function (i) { - if (this.cx() === array[i][0] && this.cy() === array[i][1]) { - return; - } - this.center(array[i][0], array[i][1]); - }); -}; - -SelectHandler.prototype.updateRectSelection = function () { - var bbox = this.el.bbox(); - - this.rectSelection.set.get(0).attr({ - width: bbox.width, - height: bbox.height - }); - - // set.get(1) is always in the upper left corner. no need to move it - if (this.options.points) { - this.rectSelection.set.get(2).center(bbox.width, 0); - this.rectSelection.set.get(3).center(bbox.width, bbox.height); - this.rectSelection.set.get(4).center(0, bbox.height); - - this.rectSelection.set.get(5).center(bbox.width / 2, 0); - this.rectSelection.set.get(6).center(bbox.width, bbox.height / 2); - this.rectSelection.set.get(7).center(bbox.width / 2, bbox.height); - this.rectSelection.set.get(8).center(0, bbox.height / 2); - } - - if (this.options.rotationPoint) { - if (this.options.points) { - this.rectSelection.set.get(9).center(bbox.width / 2, 20); - } else { - this.rectSelection.set.get(1).center(bbox.width / 2, 20); - } - } -}; - -SelectHandler.prototype.selectRect = function (value) { - - var _this = this, bbox = this.el.bbox(); - - this.rectSelection.isSelected = value; - - // when set is already p - this.rectSelection.set = this.rectSelection.set || this.parent.set(); - - // helperFunction to create a mouse-down function which triggers the event specified in `eventName` - function getMoseDownFunc(eventName) { - return function (ev) { - ev = ev || window.event; - ev.preventDefault ? ev.preventDefault() : ev.returnValue = false; - ev.stopPropagation(); - - var x = ev.pageX || ev.touches[0].pageX; - var y = ev.pageY || ev.touches[0].pageY; - _this.el.fire(eventName, {x: x, y: y, event: ev}); - }; - } - - // create the selection-rectangle and add the css-class - if (!this.rectSelection.set.get(0)) { - this.rectSelection.set.add(this.nested.rect(bbox.width, bbox.height).addClass(this.options.classRect)); - } - - // Draw Points at the edges, if enabled - if (this.options.points && !this.rectSelection.set.get(1)) { - var ename ="touchstart", mname = "mousedown"; - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(0, 0).attr('class', this.options.classPoints + '_lt').on(mname, getMoseDownFunc('lt')).on(ename, getMoseDownFunc('lt'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width, 0).attr('class', this.options.classPoints + '_rt').on(mname, getMoseDownFunc('rt')).on(ename, getMoseDownFunc('rt'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width, bbox.height).attr('class', this.options.classPoints + '_rb').on(mname, getMoseDownFunc('rb')).on(ename, getMoseDownFunc('rb'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(0, bbox.height).attr('class', this.options.classPoints + '_lb').on(mname, getMoseDownFunc('lb')).on(ename, getMoseDownFunc('lb'))); - - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width / 2, 0).attr('class', this.options.classPoints + '_t').on(mname, getMoseDownFunc('t')).on(ename, getMoseDownFunc('t'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width, bbox.height / 2).attr('class', this.options.classPoints + '_r').on(mname, getMoseDownFunc('r')).on(ename, getMoseDownFunc('r'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width / 2, bbox.height).attr('class', this.options.classPoints + '_b').on(mname, getMoseDownFunc('b')).on(ename, getMoseDownFunc('b'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(0, bbox.height / 2).attr('class', this.options.classPoints + '_l').on(mname, getMoseDownFunc('l')).on(ename, getMoseDownFunc('l'))); - - this.rectSelection.set.each(function () { - this.addClass(_this.options.classPoints); - }); - } - - // draw rotationPint, if enabled - if (this.options.rotationPoint && ((this.options.points && !this.rectSelection.set.get(9)) || (!this.options.points && !this.rectSelection.set.get(1)))) { - - var curriedEvent = function (ev) { - ev = ev || window.event; - ev.preventDefault ? ev.preventDefault() : ev.returnValue = false; - ev.stopPropagation(); - - var x = ev.pageX || ev.touches[0].pageX; - var y = ev.pageY || ev.touches[0].pageY; - _this.el.fire('rot', {x: x, y: y, event: ev}); - }; - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width / 2, 20).attr('class', this.options.classPoints + '_rot') - .on("touchstart", curriedEvent).on("mousedown", curriedEvent)); - - } - -}; - -SelectHandler.prototype.handler = function () { - - var bbox = this.el.bbox(); - this.nested.matrix(new SVG.Matrix(this.el).translate(bbox.x, bbox.y)); - - if (this.rectSelection.isSelected) { - this.updateRectSelection(); - } - - if (this.pointSelection.isSelected) { - this.updatePointSelection(); - } - -}; - -SelectHandler.prototype.observe = function () { - var _this = this; - - if (MutationObserver) { - if (this.rectSelection.isSelected || this.pointSelection.isSelected) { - this.observerInst = this.observerInst || new MutationObserver(function () { - _this.handler(); - }); - this.observerInst.observe(this.el.node, {attributes: true}); - } else { - try { - this.observerInst.disconnect(); - delete this.observerInst; - } catch (e) { - } - } - } else { - this.el.off('DOMAttrModified.select'); - - if (this.rectSelection.isSelected || this.pointSelection.isSelected) { - this.el.on('DOMAttrModified.select', function () { - _this.handler(); - }); - } - } -}; - -SelectHandler.prototype.cleanup = function () { - - //var _this = this; - - if (!this.rectSelection.isSelected && this.rectSelection.set) { - // stop watching the element, remove the selection - this.rectSelection.set.each(function () { - this.remove(); - }); - - this.rectSelection.set.clear(); - delete this.rectSelection.set; - } - - if (!this.pointSelection.isSelected && this.pointSelection.set) { - // Remove all points, clear the set, stop watching the element - this.pointSelection.set.each(function () { - this.remove(); - }); - - this.pointSelection.set.clear(); - delete this.pointSelection.set; - } - - if (!this.pointSelection.isSelected && !this.rectSelection.isSelected) { - this.nested.remove(); - delete this.nested; - - } -}; - - -SVG.extend(SVG.Element, { - // Select element with mouse - selectize: function (value, options) { - - // Check the parameters and reassign if needed - if (typeof value === 'object') { - options = value; - value = true; - } - - var selectHandler = this.remember('_selectHandler') || new SelectHandler(this); - - selectHandler.init(value === undefined ? true : value, options || {}); - - return this; - - } -}); - -SVG.Element.prototype.selectize.defaults = { - points: true, // If true, points at the edges are drawn. Needed for resize! - classRect: 'svg_select_boundingRect', // Css-class added to the rect - classPoints: 'svg_select_points', // Css-class added to the points - radius: 7, // radius of the points - rotationPoint: true, // If true, rotation point is drawn. Needed for rotation! - deepSelect: false // If true, moving of single points is possible (only line, polyline, polyon) -}; -}()); - -(function() { -(function () { - - function ResizeHandler(el) { - - el.remember('_resizeHandler', this); - - this.el = el; - this.parameters = {}; - this.lastUpdateCall = null; - this.p = el.doc().node.createSVGPoint(); - } - - ResizeHandler.prototype.transformPoint = function(x, y, m){ - - this.p.x = x - (this.offset.x - window.pageXOffset); - this.p.y = y - (this.offset.y - window.pageYOffset); - - return this.p.matrixTransform(m || this.m); - - }; - - ResizeHandler.prototype._extractPosition = function(event) { - // Extract a position from a mouse/touch event. - // Returns { x: .., y: .. } - return { - x: event.clientX != null ? event.clientX : event.touches[0].clientX, - y: event.clientY != null ? event.clientY : event.touches[0].clientY - } - }; - - ResizeHandler.prototype.init = function (options) { - - var _this = this; - - this.stop(); - - if (options === 'stop') { - return; - } - - this.options = {}; - - // Merge options and defaults - for (var i in this.el.resize.defaults) { - this.options[i] = this.el.resize.defaults[i]; - if (typeof options[i] !== 'undefined') { - this.options[i] = options[i]; - } - } - - // We listen to all these events which are specifying different edges - this.el.on('lt.resize', function(e){ _this.resize(e || window.event); }); // Left-Top - this.el.on('rt.resize', function(e){ _this.resize(e || window.event); }); // Right-Top - this.el.on('rb.resize', function(e){ _this.resize(e || window.event); }); // Right-Bottom - this.el.on('lb.resize', function(e){ _this.resize(e || window.event); }); // Left-Bottom - - this.el.on('t.resize', function(e){ _this.resize(e || window.event); }); // Top - this.el.on('r.resize', function(e){ _this.resize(e || window.event); }); // Right - this.el.on('b.resize', function(e){ _this.resize(e || window.event); }); // Bottom - this.el.on('l.resize', function(e){ _this.resize(e || window.event); }); // Left - - this.el.on('rot.resize', function(e){ _this.resize(e || window.event); }); // Rotation - - this.el.on('point.resize', function(e){ _this.resize(e || window.event); }); // Point-Moving - - // This call ensures, that the plugin reacts to a change of snapToGrid immediately - this.update(); - - }; - - ResizeHandler.prototype.stop = function(){ - this.el.off('lt.resize'); - this.el.off('rt.resize'); - this.el.off('rb.resize'); - this.el.off('lb.resize'); - - this.el.off('t.resize'); - this.el.off('r.resize'); - this.el.off('b.resize'); - this.el.off('l.resize'); - - this.el.off('rot.resize'); - - this.el.off('point.resize'); - - return this; - }; - - ResizeHandler.prototype.resize = function (event) { - - var _this = this; - - this.m = this.el.node.getScreenCTM().inverse(); - this.offset = { x: window.pageXOffset, y: window.pageYOffset }; - - var txPt = this._extractPosition(event.detail.event); - this.parameters = { - type: this.el.type, // the type of element - p: this.transformPoint(txPt.x, txPt.y), - x: event.detail.x, // x-position of the mouse when resizing started - y: event.detail.y, // y-position of the mouse when resizing started - box: this.el.bbox(), // The bounding-box of the element - rotation: this.el.transform().rotation // The current rotation of the element - }; - - // Add font-size parameter if the element type is text - if (this.el.type === "text") { - this.parameters.fontSize = this.el.attr()["font-size"]; - } - - // the i-param in the event holds the index of the point which is moved, when using `deepSelect` - if (event.detail.i !== undefined) { - - // get the point array - var array = this.el.array().valueOf(); - - // Save the index and the point which is moved - this.parameters.i = event.detail.i; - this.parameters.pointCoords = [array[event.detail.i][0], array[event.detail.i][1]]; - } - - // Lets check which edge of the bounding-box was clicked and resize the this.el according to this - switch (event.type) { - - // Left-Top-Edge - case 'lt': - // We build a calculating function for every case which gives us the new position of the this.el - this.calc = function (diffX, diffY) { - // The procedure is always the same - // First we snap the edge to the given grid (snapping to 1px grid is normal resizing) - var snap = this.snapToGrid(diffX, diffY); - - // Now we check if the new height and width still valid (> 0) - if (this.parameters.box.width - snap[0] > 0 && this.parameters.box.height - snap[1] > 0) { - // ...if valid, we resize the this.el (which can include moving because the coord-system starts at the left-top and this edge is moving sometimes when resized) - - /* - * but first check if the element is text box, so we can change the font size instead of - * the width and height - */ - - if (this.parameters.type === "text") { - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y); - this.el.attr("font-size", this.parameters.fontSize - snap[0]); - return; - } - - snap = this.checkAspectRatio(snap); - - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y + snap[1]).size(this.parameters.box.width - snap[0], this.parameters.box.height - snap[1]); - } - }; - break; - - // Right-Top - case 'rt': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 1 << 1); - if (this.parameters.box.width + snap[0] > 0 && this.parameters.box.height - snap[1] > 0) { - if (this.parameters.type === "text") { - this.el.move(this.parameters.box.x - snap[0], this.parameters.box.y); - this.el.attr("font-size", this.parameters.fontSize + snap[0]); - return; - } - - snap = this.checkAspectRatio(snap); - - this.el.move(this.parameters.box.x, this.parameters.box.y + snap[1]).size(this.parameters.box.width + snap[0], this.parameters.box.height - snap[1]); - } - }; - break; - - // Right-Bottom - case 'rb': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 0); - if (this.parameters.box.width + snap[0] > 0 && this.parameters.box.height + snap[1] > 0) { - if (this.parameters.type === "text") { - this.el.move(this.parameters.box.x - snap[0], this.parameters.box.y); - this.el.attr("font-size", this.parameters.fontSize + snap[0]); - return; - } - - snap = this.checkAspectRatio(snap); - - this.el.move(this.parameters.box.x, this.parameters.box.y).size(this.parameters.box.width + snap[0], this.parameters.box.height + snap[1]); - } - }; - break; - - // Left-Bottom - case 'lb': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 1); - if (this.parameters.box.width - snap[0] > 0 && this.parameters.box.height + snap[1] > 0) { - if (this.parameters.type === "text") { - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y); - this.el.attr("font-size", this.parameters.fontSize - snap[0]); - return; - } - - snap = this.checkAspectRatio(snap); - - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y).size(this.parameters.box.width - snap[0], this.parameters.box.height + snap[1]); - } - }; - break; - - // Top - case 't': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 1 << 1); - if (this.parameters.box.height - snap[1] > 0) { - // Disable the font-resizing if it is not from the corner of bounding-box - if (this.parameters.type === "text") { - return; - } - - this.el.move(this.parameters.box.x, this.parameters.box.y + snap[1]).height(this.parameters.box.height - snap[1]); - } - }; - break; - - // Right - case 'r': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 0); - if (this.parameters.box.width + snap[0] > 0) { - if (this.parameters.type === "text") { - return; - } - - this.el.move(this.parameters.box.x, this.parameters.box.y).width(this.parameters.box.width + snap[0]); - } - }; - break; - - // Bottom - case 'b': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 0); - if (this.parameters.box.height + snap[1] > 0) { - if (this.parameters.type === "text") { - return; - } - - this.el.move(this.parameters.box.x, this.parameters.box.y).height(this.parameters.box.height + snap[1]); - } - }; - break; - - // Left - case 'l': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 1); - if (this.parameters.box.width - snap[0] > 0) { - if (this.parameters.type === "text") { - return; - } - - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y).width(this.parameters.box.width - snap[0]); - } - }; - break; - - // Rotation - case 'rot': - // s.a. - this.calc = function (diffX, diffY) { - - // yes this is kinda stupid but we need the mouse coords back... - var current = {x: diffX + this.parameters.p.x, y: diffY + this.parameters.p.y}; - - // start minus middle - var sAngle = Math.atan2((this.parameters.p.y - this.parameters.box.y - this.parameters.box.height / 2), (this.parameters.p.x - this.parameters.box.x - this.parameters.box.width / 2)); - - // end minus middle - var pAngle = Math.atan2((current.y - this.parameters.box.y - this.parameters.box.height / 2), (current.x - this.parameters.box.x - this.parameters.box.width / 2)); - - var angle = (pAngle - sAngle) * 180 / Math.PI; - - // We have to move the element to the center of the box first and change the rotation afterwards - // because rotation always works around a rotation-center, which is changed when moving the element - // We also set the new rotation center to the center of the box. - this.el.center(this.parameters.box.cx, this.parameters.box.cy).rotate(this.parameters.rotation + angle - angle % this.options.snapToAngle, this.parameters.box.cx, this.parameters.box.cy); - }; - break; - - // Moving one single Point (needed when an element is deepSelected which means you can move every single point of the object) - case 'point': - this.calc = function (diffX, diffY) { - - // Snapping the point to the grid - var snap = this.snapToGrid(diffX, diffY, this.parameters.pointCoords[0], this.parameters.pointCoords[1]); - - // Get the point array - var array = this.el.array().valueOf(); - - // Changing the moved point in the array - array[this.parameters.i][0] = this.parameters.pointCoords[0] + snap[0]; - array[this.parameters.i][1] = this.parameters.pointCoords[1] + snap[1]; - - // And plot the new this.el - this.el.plot(array); - }; - } - - this.el.fire('resizestart', {dx: this.parameters.x, dy: this.parameters.y, event: event}); - // When resizing started, we have to register events for... - // Touches. - SVG.on(window, 'touchmove.resize', function(e) { - _this.update(e || window.event); - }); - SVG.on(window, 'touchend.resize', function() { - _this.done(); - }); - // Mouse. - SVG.on(window, 'mousemove.resize', function (e) { - _this.update(e || window.event); - }); - SVG.on(window, 'mouseup.resize', function () { - _this.done(); - }); - - }; - - // The update-function redraws the element every time the mouse is moving - ResizeHandler.prototype.update = function (event) { - - if (!event) { - if (this.lastUpdateCall) { - this.calc(this.lastUpdateCall[0], this.lastUpdateCall[1]); - } - return; - } - - // Calculate the difference between the mouseposition at start and now - var txPt = this._extractPosition(event); - var p = this.transformPoint(txPt.x, txPt.y); - - var diffX = p.x - this.parameters.p.x, - diffY = p.y - this.parameters.p.y; - - this.lastUpdateCall = [diffX, diffY]; - - // Calculate the new position and height / width of the element - this.calc(diffX, diffY); - - // Emit an event to say we have changed. - this.el.fire('resizing', {dx: diffX, dy: diffY, event: event}); - }; - - // Is called on mouseup. - // Removes the update-function from the mousemove event - ResizeHandler.prototype.done = function () { - this.lastUpdateCall = null; - SVG.off(window, 'mousemove.resize'); - SVG.off(window, 'mouseup.resize'); - SVG.off(window, 'touchmove.resize'); - SVG.off(window, 'touchend.resize'); - this.el.fire('resizedone'); - }; - - // The flag is used to determine whether the resizing is used with a left-Point (first bit) and top-point (second bit) - // In this cases the temp-values are calculated differently - ResizeHandler.prototype.snapToGrid = function (diffX, diffY, flag, pointCoordsY) { - - var temp; - - // If `pointCoordsY` is given, a single Point has to be snapped (deepSelect). That's why we need a different temp-value - if (typeof pointCoordsY !== 'undefined') { - // Note that flag = pointCoordsX in this case - temp = [(flag + diffX) % this.options.snapToGrid, (pointCoordsY + diffY) % this.options.snapToGrid]; - } else { - // We check if the flag is set and if not we set a default-value (both bits set - which means upper-left-edge) - flag = flag == null ? 1 | 1 << 1 : flag; - temp = [(this.parameters.box.x + diffX + (flag & 1 ? 0 : this.parameters.box.width)) % this.options.snapToGrid, (this.parameters.box.y + diffY + (flag & (1 << 1) ? 0 : this.parameters.box.height)) % this.options.snapToGrid]; - } - - - diffX -= (Math.abs(temp[0]) < this.options.snapToGrid / 2 ? - temp[0] : - temp[0] - (diffX < 0 ? -this.options.snapToGrid : this.options.snapToGrid)); - diffY -= (Math.abs(temp[1]) < this.options.snapToGrid / 2 ? - temp[1] : - temp[1] - (diffY < 0 ? -this.options.snapToGrid : this.options.snapToGrid)); - - return this.constraintToBox(diffX, diffY, flag, pointCoordsY); - - }; - - // keep element within constrained box - ResizeHandler.prototype.constraintToBox = function (diffX, diffY, flag, pointCoordsY) { - //return [diffX, diffY] - var c = this.options.constraint || {}; - var orgX, orgY; - - if (typeof pointCoordsY !== 'undefined') { - orgX = flag; - orgY = pointCoordsY; - } else { - orgX = this.parameters.box.x + (flag & 1 ? 0 : this.parameters.box.width); - orgY = this.parameters.box.y + (flag & (1<<1) ? 0 : this.parameters.box.height); - } - - if (typeof c.minX !== 'undefined' && orgX + diffX < c.minX) { - diffX = c.minX - orgX; - } - - if (typeof c.maxX !== 'undefined' && orgX + diffX > c.maxX) { - diffX = c.maxX - orgX; - } - - if (typeof c.minY !== 'undefined' && orgY + diffY < c.minY) { - diffY = c.minY - orgY; - } - - if (typeof c.maxY !== 'undefined' && orgY + diffY > c.maxY) { - diffY = c.maxY - orgY; - } - - return [diffX, diffY]; - }; - - ResizeHandler.prototype.checkAspectRatio = function (snap) { - if (!this.options.saveAspectRatio) { - return snap; - } - - var updatedSnap = snap.slice(); - var aspectRatio = this.parameters.box.width / this.parameters.box.height; - var newW = this.parameters.box.width + snap[0]; - var newH = this.parameters.box.height - snap[1]; - var newAspectRatio = newW / newH; - - if (newAspectRatio < aspectRatio) { - // Height is too big. Adapt it - updatedSnap[1] = newW / aspectRatio - this.parameters.box.height; - } else if (newAspectRatio > aspectRatio) { - // Width is too big. Adapt it - updatedSnap[0] = this.parameters.box.width - newH * aspectRatio; - } - - return updatedSnap; - - }; - - SVG.extend(SVG.Element, { - // Resize element with mouse - resize: function (options) { - - (this.remember('_resizeHandler') || new ResizeHandler(this)).init(options || {}); - - return this; - - } - - }); - - SVG.Element.prototype.resize.defaults = { - snapToAngle: 0.1, // Specifies the speed the rotation is happening when moving the mouse - snapToGrid: 1, // Snaps to a grid of `snapToGrid` Pixels - constraint: {}, // keep element within constrained box - saveAspectRatio: false // Save aspect ratio when resizing using lt, rt, rb or lb points - }; - -}).call(this); -}()); - -function styleInject(css, ref) { - if ( ref === void 0 ) ref = {}; - var insertAt = ref.insertAt; - - if (!css || typeof document === 'undefined') { return; } - - var head = document.head || document.getElementsByTagName('head')[0]; - var style = document.createElement('style'); - style.type = 'text/css'; - - if (insertAt === 'top') { - if (head.firstChild) { - head.insertBefore(style, head.firstChild); - } else { - head.appendChild(style); - } - } else { - head.appendChild(style); - } - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - style.appendChild(document.createTextNode(css)); - } -} - -var css = ".apexcharts-canvas {\n position: relative;\n user-select: none;\n /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px;\n}\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0,0,0,.5);\n box-shadow: 0 0 1px rgba(255,255,255,.5);\n -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);\n}\n.apexcharts-canvas.dark {\n background: #343F57;\n}\n\n.apexcharts-inner {\n position: relative;\n}\n\n.legend-mouseover-inactive {\n transition: 0.15s ease all;\n opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0;\n}\n\n.apexcharts-gridline, .apexcharts-text {\n pointer-events: none;\n}\n\n.apexcharts-tooltip {\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px #999;\n cursor: default;\n font-size: 14px;\n left: 62px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 20px;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: 0.15s ease all;\n}\n.apexcharts-tooltip.light {\n border: 1px solid #e3e3e3;\n background: rgba(255, 255, 255, 0.96);\n}\n.apexcharts-tooltip.dark {\n color: #fff;\n background: rgba(30,30,30, 0.8);\n}\n.apexcharts-tooltip * {\n font-family: inherit;\n}\n\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line {\n pointer-events: none;\n}\n\n.apexcharts-tooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip-title {\n padding: 6px;\n font-size: 15px;\n margin-bottom: 4px;\n}\n.apexcharts-tooltip.light .apexcharts-tooltip-title {\n background: #ECEFF1;\n border-bottom: 1px solid #ddd;\n}\n.apexcharts-tooltip.dark .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #333;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n font-weight: 600;\n margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-z-label:empty,\n.apexcharts-tooltip-text-z-value:empty {\n display: none;\n}\n\n.apexcharts-tooltip-text-value, \n.apexcharts-tooltip-text-z-value {\n font-weight: 600;\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0px;\n margin-right: 10px;\n border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 0 10px;\n display: none;\n text-align: left;\n justify-content: left;\n align-items: center;\n}\n\n.apexcharts-tooltip-series-group.active .apexcharts-tooltip-marker {\n opacity: 1;\n}\n.apexcharts-tooltip-series-group.active, .apexcharts-tooltip-series-group:last-child {\n padding-bottom: 4px;\n}\n.apexcharts-tooltip-series-group-hidden {\n opacity: 0;\n height: 0;\n line-height: 0;\n padding: 0 !important;\n}\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px;\n}\n.apexcharts-tooltip-candlestick {\n padding: 4px 8px;\n}\n.apexcharts-tooltip-candlestick > div {\n margin: 4px 0;\n}\n.apexcharts-tooltip-candlestick span.value {\n font-weight: bold;\n}\n\n.apexcharts-tooltip-rangebar {\n padding: 5px 8px;\n}\n\n.apexcharts-tooltip-rangebar .category {\n font-weight: 600;\n color: #777;\n}\n\n.apexcharts-tooltip-rangebar .series-name {\n font-weight: bold;\n display: block;\n margin-bottom: 5px;\n}\n\n.apexcharts-xaxistooltip {\n opacity: 0;\n padding: 9px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip.dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-xaxistooltip:after, .apexcharts-xaxistooltip:before {\n\tleft: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-left: -6px;\n}\n.apexcharts-xaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after, .apexcharts-xaxistooltip-bottom:before {\n bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-top:after, .apexcharts-xaxistooltip-top:before {\n top: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-bottom.dark:after {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-bottom.dark:before {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top:after {\n border-top-color:#ECEFF1\n}\n.apexcharts-xaxistooltip-top:before {\n border-top-color: #90A4AE;\n}\n.apexcharts-xaxistooltip-top.dark:after {\n border-top-color:rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-top.dark:before {\n border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n\n.apexcharts-xaxistooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n opacity: 0;\n padding: 4px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip.dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-yaxistooltip:after, .apexcharts-yaxistooltip:before {\n\ttop: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n.apexcharts-yaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-top: -6px;\n}\n.apexcharts-yaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after, .apexcharts-yaxistooltip-left:before {\n left: 100%;\n}\n\n.apexcharts-yaxistooltip-right:after, .apexcharts-yaxistooltip-right:before {\n right: 100%;\n}\n\n.apexcharts-yaxistooltip-left:after {\n border-left-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-left:before {\n border-left-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-left.dark:after {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-left.dark:before {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right:after {\n border-right-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-right:before {\n border-right-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-right.dark:after {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-right.dark:before {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip.active {\n opacity: 1;\n}\n\n.apexcharts-xcrosshairs, .apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.active, .apexcharts-ycrosshairs.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0;\n}\n\n.apexcharts-zoom-rect {\n pointer-events: none;\n}\n.apexcharts-selection-rect {\n cursor: move;\n}\n\n.svg_select_points, .svg_select_points_rot {\n opacity: 0;\n visibility: hidden;\n}\n.svg_select_points_l, .svg_select_points_r {\n cursor: ew-resize;\n opacity: 1;\n visibility: visible;\n fill: #888;\n}\n.apexcharts-canvas.zoomable .hovering-zoom {\n cursor: crosshair\n}\n.apexcharts-canvas.zoomable .hovering-pan {\n cursor: move\n}\n\n.apexcharts-xaxis,\n.apexcharts-yaxis {\n pointer-events: none;\n}\n\n.apexcharts-zoom-icon, \n.apexcharts-zoom-in-icon,\n.apexcharts-zoom-out-icon,\n.apexcharts-reset-zoom-icon, \n.apexcharts-pan-icon, \n.apexcharts-selection-icon,\n.apexcharts-menu-icon, \n.apexcharts-toolbar-custom-icon {\n cursor: pointer;\n width: 20px;\n height: 20px;\n line-height: 24px;\n color: #6E8192;\n text-align: center;\n}\n\n\n.apexcharts-zoom-icon svg, \n.apexcharts-zoom-in-icon svg,\n.apexcharts-zoom-out-icon svg,\n.apexcharts-reset-zoom-icon svg,\n.apexcharts-menu-icon svg {\n fill: #6E8192;\n}\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(0.76)\n}\n\n.dark .apexcharts-zoom-icon svg, \n.dark .apexcharts-zoom-in-icon svg,\n.dark .apexcharts-zoom-out-icon svg,\n.dark .apexcharts-reset-zoom-icon svg, \n.dark .apexcharts-pan-icon svg, \n.dark .apexcharts-selection-icon svg,\n.dark .apexcharts-menu-icon svg, \n.dark .apexcharts-toolbar-custom-icon svg{\n fill: #f3f4f5;\n}\n\n.apexcharts-canvas .apexcharts-zoom-icon.selected svg, \n.apexcharts-canvas .apexcharts-selection-icon.selected svg, \n.apexcharts-canvas .apexcharts-reset-zoom-icon.selected svg {\n fill: #008FFB;\n}\n.light .apexcharts-selection-icon:not(.selected):hover svg,\n.light .apexcharts-zoom-icon:not(.selected):hover svg, \n.light .apexcharts-zoom-in-icon:hover svg, \n.light .apexcharts-zoom-out-icon:hover svg, \n.light .apexcharts-reset-zoom-icon:hover svg, \n.light .apexcharts-menu-icon:hover svg {\n fill: #333;\n}\n\n.apexcharts-selection-icon, .apexcharts-menu-icon {\n position: relative;\n}\n.apexcharts-reset-zoom-icon {\n margin-left: 5px;\n}\n.apexcharts-zoom-icon, .apexcharts-reset-zoom-icon, .apexcharts-menu-icon {\n transform: scale(0.85);\n}\n\n.apexcharts-zoom-in-icon, .apexcharts-zoom-out-icon {\n transform: scale(0.7)\n}\n\n.apexcharts-zoom-out-icon {\n margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n transform: scale(0.62);\n position: relative;\n left: 1px;\n top: 0px;\n}\n.apexcharts-pan-icon svg {\n fill: #fff;\n stroke: #6E8192;\n stroke-width: 2;\n}\n.apexcharts-pan-icon.selected svg {\n stroke: #008FFB;\n}\n.apexcharts-pan-icon:not(.selected):hover svg {\n stroke: #333;\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n top: 0px;\n right: 3px;\n max-width: 176px;\n text-align: right;\n border-radius: 3px;\n padding: 0px 6px 2px 6px;\n display: flex;\n justify-content: space-between;\n align-items: center; \n}\n\n.apexcharts-toolbar svg {\n pointer-events: none;\n}\n\n.apexcharts-menu {\n background: #fff;\n position: absolute;\n top: 100%;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 3px;\n right: 10px;\n opacity: 0;\n min-width: 110px;\n transition: 0.15s ease all;\n pointer-events: none;\n}\n\n.apexcharts-menu.open {\n opacity: 1;\n pointer-events: all;\n transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n padding: 6px 7px;\n font-size: 12px;\n cursor: pointer;\n}\n.light .apexcharts-menu-item:hover {\n background: #eee;\n}\n.dark .apexcharts-menu {\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n}\n\n@media screen and (min-width: 768px) {\n .apexcharts-toolbar {\n /*opacity: 0;*/\n }\n\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1;\n } \n}\n\n.apexcharts-datalabel.hidden {\n opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabel, .apexcharts-datalabel-label, .apexcharts-datalabel-value {\n cursor: default;\n pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease;\n}\n\n.apexcharts-canvas .hidden {\n opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, .apexcharts-radar-series path, .apexcharts-radar-series polygon {\n pointer-events: none;\n}\n\n/* markers */\n\n.apexcharts-marker {\n transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}"; -styleInject(css); - -/* - * classList.js: Cross-browser full element.classList implementation. - * 1.2.20171210 - * - * By Eli Grey, http://eligrey.com - * License: Dedicated to the public domain. - * See https://github.com/eligrey/classList.js/blob/master/LICENSE.md - */ - -/*global self, document, DOMException */ - -/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js */ -if ("document" in self) { - // Full polyfill for browsers with no classList support - // Including IE < Edge missing SVGElement.classList - if (!("classList" in document.createElement("_")) || document.createElementNS && !("classList" in document.createElementNS("http://www.w3.org/2000/svg", "g"))) { - (function (view) { - - if (!('Element' in view)) return; - - var classListProp = "classList", - protoProp = "prototype", - elemCtrProto = view.Element[protoProp], - objCtr = Object, - strTrim = String[protoProp].trim || function () { - return this.replace(/^\s+|\s+$/g, ""); - }, - arrIndexOf = Array[protoProp].indexOf || function (item) { - var i = 0, - len = this.length; - - for (; i < len; i++) { - if (i in this && this[i] === item) { - return i; - } - } - - return -1; - } // Vendors: please allow content code to instantiate DOMExceptions - , - DOMEx = function DOMEx(type, message) { - this.name = type; - this.code = DOMException[type]; - this.message = message; - }, - checkTokenAndGetIndex = function checkTokenAndGetIndex(classList, token) { - if (token === "") { - throw new DOMEx("SYNTAX_ERR", "The token must not be empty."); - } - - if (/\s/.test(token)) { - throw new DOMEx("INVALID_CHARACTER_ERR", "The token must not contain space characters."); - } - - return arrIndexOf.call(classList, token); - }, - ClassList = function ClassList(elem) { - var trimmedClasses = strTrim.call(elem.getAttribute("class") || ""), - classes = trimmedClasses ? trimmedClasses.split(/\s+/) : [], - i = 0, - len = classes.length; - - for (; i < len; i++) { - this.push(classes[i]); - } - - this._updateClassName = function () { - elem.setAttribute("class", this.toString()); - }; - }, - classListProto = ClassList[protoProp] = [], - classListGetter = function classListGetter() { - return new ClassList(this); - }; // Most DOMException implementations don't allow calling DOMException's toString() - // on non-DOMExceptions. Error's toString() is sufficient here. - - - DOMEx[protoProp] = Error[protoProp]; - - classListProto.item = function (i) { - return this[i] || null; - }; - - classListProto.contains = function (token) { - return ~checkTokenAndGetIndex(this, token + ""); - }; - - classListProto.add = function () { - var tokens = arguments, - i = 0, - l = tokens.length, - token, - updated = false; - - do { - token = tokens[i] + ""; - - if (!~checkTokenAndGetIndex(this, token)) { - this.push(token); - updated = true; - } - } while (++i < l); - - if (updated) { - this._updateClassName(); - } - }; - - classListProto.remove = function () { - var tokens = arguments, - i = 0, - l = tokens.length, - token, - updated = false, - index; - - do { - token = tokens[i] + ""; - index = checkTokenAndGetIndex(this, token); - - while (~index) { - this.splice(index, 1); - updated = true; - index = checkTokenAndGetIndex(this, token); - } - } while (++i < l); - - if (updated) { - this._updateClassName(); - } - }; - - classListProto.toggle = function (token, force) { - var result = this.contains(token), - method = result ? force !== true && "remove" : force !== false && "add"; - - if (method) { - this[method](token); - } - - if (force === true || force === false) { - return force; - } else { - return !result; - } - }; - - classListProto.replace = function (token, replacement_token) { - var index = checkTokenAndGetIndex(token + ""); - - if (~index) { - this.splice(index, 1, replacement_token); - - this._updateClassName(); - } - }; - - classListProto.toString = function () { - return this.join(" "); - }; - - if (objCtr.defineProperty) { - var classListPropDesc = { - get: classListGetter, - enumerable: true, - configurable: true - }; - - try { - objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); - } catch (ex) { - // IE 8 doesn't support enumerable:true - // adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36 - // modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected - if (ex.number === undefined || ex.number === -0x7FF5EC54) { - classListPropDesc.enumerable = false; - objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); - } - } - } else if (objCtr[protoProp].__defineGetter__) { - elemCtrProto.__defineGetter__(classListProp, classListGetter); - } - })(self); - } // There is full or partial native classList support, so just check if we need - // to normalize the add/remove and toggle APIs. - - - (function () { - - var testElement = document.createElement("_"); - testElement.classList.add("c1", "c2"); // Polyfill for IE 10/11 and Firefox <26, where classList.add and - // classList.remove exist but support only one argument at a time. - - if (!testElement.classList.contains("c2")) { - var createMethod = function createMethod(method) { - var original = DOMTokenList.prototype[method]; - - DOMTokenList.prototype[method] = function (token) { - var i, - len = arguments.length; - - for (i = 0; i < len; i++) { - token = arguments[i]; - original.call(this, token); - } - }; - }; - - createMethod('add'); - createMethod('remove'); - } - - testElement.classList.toggle("c3", false); // Polyfill for IE 10 and Firefox <24, where classList.toggle does not - // support the second argument. - - if (testElement.classList.contains("c3")) { - var _toggle = DOMTokenList.prototype.toggle; - - DOMTokenList.prototype.toggle = function (token, force) { - if (1 in arguments && !this.contains(token) === !force) { - return force; - } else { - return _toggle.call(this, token); - } - }; - } // replace() polyfill - - - if (!("replace" in document.createElement("_").classList)) { - DOMTokenList.prototype.replace = function (token, replacement_token) { - var tokens = this.toString().split(" "), - index = tokens.indexOf(token + ""); - - if (~index) { - tokens = tokens.slice(index); - this.remove.apply(this, tokens); - this.add(replacement_token); - this.add.apply(this, tokens.slice(1)); - } - }; - } - - testElement = null; - })(); -} - -/** -* Detect Element Resize -* -* https://github.com/sdecima/javascript-detect-element-resize -* Sebastian Decima -* -* version: 0.5.3 -**/ -(function () { - var stylesCreated = false; - - function resetTriggers(element) { - var triggers = element.__resizeTriggers__, - expand = triggers.firstElementChild, - contract = triggers.lastElementChild, - expandChild = expand.firstElementChild; - contract.scrollLeft = contract.scrollWidth; - contract.scrollTop = contract.scrollHeight; - expandChild.style.width = expand.offsetWidth + 1 + 'px'; - expandChild.style.height = expand.offsetHeight + 1 + 'px'; - expand.scrollLeft = expand.scrollWidth; - expand.scrollTop = expand.scrollHeight; - } - - function checkTriggers(element) { - return element.offsetWidth != element.__resizeLast__.width || element.offsetHeight != element.__resizeLast__.height; - } - - function scrollListener(e) { - var element = this; - resetTriggers(this); - if (this.__resizeRAF__) cancelFrame(this.__resizeRAF__); - this.__resizeRAF__ = requestFrame(function () { - if (checkTriggers(element)) { - element.__resizeLast__.width = element.offsetWidth; - element.__resizeLast__.height = element.offsetHeight; - - element.__resizeListeners__.forEach(function (fn) { - fn.call(e); - }); - } - }); - } - - function createStyles() { - if (!stylesCreated) { - // opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360 - var css = (animationKeyframes || '') + '.resize-triggers { ' + (animationStyle || '') + 'visibility: hidden; opacity: 0; } ' + '.resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \" \"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }', - head = document.head || document.getElementsByTagName('head')[0], - style = document.createElement('style'); - style.type = 'text/css'; - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - style.appendChild(document.createTextNode(css)); - } - - head.appendChild(style); - stylesCreated = true; - } - } - - var requestFrame = function () { - var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (fn) { - return window.setTimeout(fn, 20); - }; - - return function (fn) { - return raf(fn); - }; - }(); - - var cancelFrame = function () { - var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout; - return function (id) { - return cancel(id); - }; - }(); - /* Detect CSS Animations support to detect element display/re-attach */ - - - var animation = false, - keyframeprefix = '', - animationstartevent = 'animationstart', - domPrefixes = 'Webkit Moz O ms'.split(' '), - startEvents = 'webkitAnimationStart animationstart oAnimationStart MSAnimationStart'.split(' '), - pfx = ''; - { - var elm = document.createElement('fakeelement'); - - if (elm.style.animationName !== undefined) { - animation = true; - } - - if (animation === false) { - for (var i = 0; i < domPrefixes.length; i++) { - if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) { - pfx = domPrefixes[i]; - keyframeprefix = '-' + pfx.toLowerCase() + '-'; - animationstartevent = startEvents[i]; - break; - } - } - } - } - var animationName = 'resizeanim'; - var animationKeyframes = '@' + keyframeprefix + 'keyframes ' + animationName + ' { from { opacity: 0; } to { opacity: 0; } } '; - var animationStyle = keyframeprefix + 'animation: 1ms ' + animationName + '; '; - - window.addResizeListener = function (element, fn) { - if (!element.__resizeTriggers__) { - if (getComputedStyle(element).position == 'static') element.style.position = 'relative'; - createStyles(); - element.__resizeLast__ = {}; - element.__resizeListeners__ = []; - (element.__resizeTriggers__ = document.createElement('div')).className = 'resize-triggers'; - element.__resizeTriggers__.innerHTML = '
' + '
'; - element.appendChild(element.__resizeTriggers__); - resetTriggers(element); - element.addEventListener('scroll', scrollListener, true); - /* Listen for a css animation to detect element display/re-attach */ - - animationstartevent && element.__resizeTriggers__.addEventListener(animationstartevent, function (e) { - if (e.animationName == animationName) { - resetTriggers(element); - } - }); - } - - element.__resizeListeners__.push(fn); - }; - - window.removeResizeListener = function (element, fn) { - if (element) { - element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1); - - if (!element.__resizeListeners__.length) { - element.removeEventListener('scroll', scrollListener); - element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__); - } - } - }; -})(); - -window.Apex = {}; -/** - * - * @module ApexCharts - **/ - -var ApexCharts$1 = -/*#__PURE__*/ -function () { - function ApexCharts(el, opts) { - _classCallCheck(this, ApexCharts); - - this.opts = opts; - this.ctx = this; // Pass the user supplied options to the Base Class where these options will be extended with defaults. The returned object from Base Class will become the config object in the entire codebase. - - this.w = new Base(opts).init(); - this.el = el; - this.w.globals.cuid = (Math.random() + 1).toString(36).substring(4); - this.w.globals.chartID = this.w.config.chart.id ? this.w.config.chart.id : this.w.globals.cuid; - this.initModules(); - this.create = Utils.bind(this.create, this); - this.windowResizeHandler = this.windowResize.bind(this); - } - /** - * The primary method user will call to render the chart. - */ - - - _createClass(ApexCharts, [{ - key: "render", - value: function render() { - var _this = this; - - // main method - return new Promise$1(function (resolve, reject) { - // only draw chart, if element found - if (_this.el !== null) { - if (typeof Apex._chartInstances === 'undefined') { - Apex._chartInstances = []; - } - - if (_this.w.config.chart.id) { - Apex._chartInstances.push({ - id: _this.w.globals.chartID, - group: _this.w.config.chart.group, - chart: _this - }); - } // set the locale here - - - _this.setLocale(_this.w.config.chart.defaultLocale); - - var beforeMount = _this.w.config.chart.events.beforeMount; - - if (typeof beforeMount === 'function') { - beforeMount(_this, _this.w); - } - - _this.fireEvent('beforeMount', [_this, _this.w]); - - window.addEventListener('resize', _this.windowResizeHandler); - window.addResizeListener(_this.el.parentNode, _this.parentResizeCallback.bind(_this)); - - var graphData = _this.create(_this.w.config.series, {}); - - if (!graphData) return resolve(_this); - - _this.mount(graphData).then(function () { - resolve(graphData); - - if (typeof _this.w.config.chart.events.mounted === 'function') { - _this.w.config.chart.events.mounted(_this, _this.w); - } - - _this.fireEvent('mounted', [_this, _this.w]); - }).catch(function (e) { - reject(e); // handle error in case no data or element not found - }); - } else { - reject(new Error('Element not found')); - } - }); - } - }, { - key: "initModules", - value: function initModules() { - this.animations = new Animations(this); - this.core = new Core(this.el, this); - this.grid = new Grid(this); - this.coreUtils = new CoreUtils(this); - this.config = new Config({}); - this.crosshairs = new Crosshairs(this); - this.options = new Options(); - this.responsive = new Responsive(this); - this.series = new Series(this); - this.theme = new Theme(this); - this.formatters = new Formatters(this); - this.titleSubtitle = new TitleSubtitle(this); - this.legend = new Legend(this); - this.toolbar = new Toolbar(this); - this.dimensions = new Dimensions(this); - this.zoomPanSelection = new ZoomPanSelection(this); - this.w.globals.tooltip = new Tooltip(this); - } - }, { - key: "addEventListener", - value: function addEventListener(name$$1, handler) { - var w = this.w; - - if (w.globals.events.hasOwnProperty(name$$1)) { - w.globals.events[name$$1].push(handler); - } else { - w.globals.events[name$$1] = [handler]; - } - } - }, { - key: "removeEventListener", - value: function removeEventListener(name$$1, handler) { - var w = this.w; - - if (!w.globals.events.hasOwnProperty(name$$1)) { - return; - } - - var index = w.globals.events[name$$1].indexOf(handler); - - if (index !== -1) { - w.globals.events[name$$1].splice(index, 1); - } - } - }, { - key: "fireEvent", - value: function fireEvent(name$$1, args) { - var w = this.w; - - if (!w.globals.events.hasOwnProperty(name$$1)) { - return; - } - - if (!args || !args.length) { - args = []; - } - - var evs = w.globals.events[name$$1]; - var l = evs.length; - - for (var i = 0; i < l; i++) { - evs[i].apply(null, args); - } - } - }, { - key: "create", - value: function create(ser, opts) { - var w = this.w; - this.initModules(); - var gl = this.w.globals; - gl.noData = false; - gl.animationEnded = false; - this.responsive.checkResponsiveConfig(opts); - - if (this.el === null) { - gl.animationEnded = true; - return null; - } - - this.core.setupElements(); - - if (gl.svgWidth === 0) { - // if the element is hidden, skip drawing - gl.animationEnded = true; - return null; - } - - var combo = CoreUtils.checkComboSeries(ser); - gl.comboCharts = combo.comboCharts; - gl.comboChartsHasBars = combo.comboChartsHasBars; - - if (ser.length === 0 || ser.length === 1 && ser[0].data && ser[0].data.length === 0) { - this.series.handleNoData(); - } - - this.setupEventHandlers(); // Handle the data inputted by user and set some of the global variables (for eg, if data is datetime / numeric / category). Don't calculate the range / min / max at this time - - this.core.parseData(ser); // this is a good time to set theme colors first - - this.theme.init(); // as markers accepts array, we need to setup global markers for easier access - - var markers = new Markers(this); - markers.setGlobalMarkerSize(); // labelFormatters should be called before dimensions as in dimensions we need text labels width - - this.formatters.setLabelFormatters(); - this.titleSubtitle.draw(); // legend is calculated here before coreCalculations because it affects the plottable area - - this.legend.init(); // check whether in multiple series, all series share the same X - - this.series.hasAllSeriesEqualX(); // coreCalculations will give the min/max range and yaxis/axis values. It should be called here to set series variable from config to globals - - if (gl.axisCharts) { - this.core.coreCalculations(); - - if (w.config.xaxis.type !== 'category') { - // as we have minX and maxX values, determine the default DateTimeFormat for time series - this.formatters.setLabelFormatters(); - } - } // we need to generate yaxis for heatmap separately as we are not showing numerics there, but seriesNames. There are some tweaks which are required for heatmap to align labels correctly which are done in below function - // Also we need to do this before calcuting Dimentions plotCoords() method of Dimensions - - - this.formatters.heatmapLabelFormatters(); // We got plottable area here, next task would be to calculate axis areas - - this.dimensions.plotCoords(); - var xyRatios = this.core.xySettings(); - this.grid.createGridMask(); - var elGraph = this.core.plotChartType(ser, xyRatios); // after all the drawing calculations, shift the graphical area (actual charts/bars) excluding legends - - this.core.shiftGraphPosition(); - var dim = { - plot: { - left: w.globals.translateX, - top: w.globals.translateY, - width: w.globals.gridWidth, - height: w.globals.gridHeight - } - }; - return { - elGraph: elGraph, - xyRatios: xyRatios, - elInner: w.globals.dom.elGraphical, - dimensions: dim - }; - } - }, { - key: "mount", - value: function mount() { - var graphData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var me = this; - var w = me.w; - return new Promise$1(function (resolve, reject) { - // no data to display - if (me.el === null) { - return reject(new Error('Not enough data to display or target element not found')); - } else if (graphData === null || w.globals.allSeriesCollapsed) { - me.series.handleNoData(); - } - - me.annotations = new Annotations(me); - me.core.drawAxis(w.config.chart.type, graphData.xyRatios); - me.grid = new Grid(me); - - if (w.config.grid.position === 'back') { - me.grid.drawGrid(); - } - - if (w.config.annotations.position === 'back') { - me.annotations.drawAnnotations(); - } - - if (graphData.elGraph instanceof Array) { - for (var g = 0; g < graphData.elGraph.length; g++) { - w.globals.dom.elGraphical.add(graphData.elGraph[g]); - } - } else { - w.globals.dom.elGraphical.add(graphData.elGraph); - } - - if (w.config.grid.position === 'front') { - me.grid.drawGrid(); - } - - if (w.config.xaxis.crosshairs.position === 'front') { - me.crosshairs.drawXCrosshairs(); - } - - if (w.config.yaxis[0].crosshairs.position === 'front') { - me.crosshairs.drawYCrosshairs(); - } - - if (w.config.annotations.position === 'front') { - me.annotations.drawAnnotations(); - } - - if (!w.globals.noData) { - // draw tooltips at the end - if (w.config.tooltip.enabled && !w.globals.noData) { - me.w.globals.tooltip.drawTooltip(graphData.xyRatios); - } - - if (w.globals.axisCharts && w.globals.isXNumeric) { - if (w.config.chart.zoom.enabled || w.config.chart.selection && w.config.chart.selection.enabled || w.config.chart.pan && w.config.chart.pan.enabled) { - me.zoomPanSelection.init({ - xyRatios: graphData.xyRatios - }); - } - } else { - var tools = w.config.chart.toolbar.tools; - tools.zoom = false; - tools.zoomin = false; - tools.zoomout = false; - tools.selection = false; - tools.pan = false; - tools.reset = false; - } - - if (w.config.chart.toolbar.show && !w.globals.allSeriesCollapsed) { - me.toolbar.createToolbar(); - } - } - - if (w.globals.memory.methodsToExec.length > 0) { - w.globals.memory.methodsToExec.forEach(function (fn) { - fn.method(fn.params, false, fn.context); - }); - } - - resolve(me); - }); - } - }, { - key: "clearPreviousPaths", - value: function clearPreviousPaths() { - var w = this.w; - w.globals.previousPaths = []; - w.globals.allSeriesCollapsed = false; - w.globals.collapsedSeries = []; - w.globals.collapsedSeriesIndices = []; - } - /** - * Allows users to update Options after the chart has rendered. - * - * @param {object} options - A new config object can be passed which will be merged with the existing config object - * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there - * @param {boolean} animate - should animate or not on updating Options - */ - - }, { - key: "updateOptions", - value: function updateOptions(options$$1) { - var redraw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var animate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var overwriteInitialConfig = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; - var w = this.w; - - if (options$$1.series) { - if (options$$1.series[0].data) { - options$$1.series = options$$1.series.map(function (s, i) { - return _objectSpread({}, w.config.series[i], { - name: s.name ? s.name : w.config.series[i] && w.config.series[i].name, - type: s.type ? s.type : w.config.series[i] && w.config.series[i].type, - data: s.data ? s.data : w.config.series[i] && w.config.series[i].data - }); - }); - } // user updated the series via updateOptions() function. - // Hence, we need to reset axis min/max to avoid zooming issues - - - this.revertDefaultAxisMinMax(); - } // user has set x-axis min/max externally - hence we need to forcefully set the xaxis min/max - - - if (options$$1.xaxis) { - if (options$$1.xaxis.min || options$$1.xaxis.max) { - this.forceXAxisUpdate(options$$1); - } - /* fixes apexcharts.js#369 and react-apexcharts#46 */ - - - if (options$$1.xaxis.categories && options$$1.xaxis.categories.length && w.config.xaxis.convertedCatToNumeric) { - options$$1 = Defaults.convertCatToNumeric(options$$1); - } - } - - if (w.globals.collapsedSeriesIndices.length > 0) { - this.clearPreviousPaths(); - } - /* update theme mode#459 */ - - - if (options$$1.theme) { - options$$1 = this.theme.updateThemeOptions(options$$1); - } - - return this._updateOptions(options$$1, redraw, animate, overwriteInitialConfig); - } - /** - * private method to update Options. - * - * @param {object} options - A new config object can be passed which will be merged with the existing config object - * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there - * @param {boolean} animate - should animate or not on updating Options - * @param {boolean} overwriteInitialConfig - should update the initial config or not - */ - - }, { - key: "_updateOptions", - value: function _updateOptions(options$$1) { - var redraw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var animate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var overwriteInitialConfig = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - var charts = this.getSyncedCharts(); - charts.forEach(function (ch) { - var w = ch.w; - w.globals.shouldAnimate = animate; - - if (!redraw) { - w.globals.resized = true; - w.globals.dataChanged = true; - - if (animate) { - ch.series.getPreviousPaths(); - } - } - - if (options$$1 && _typeof(options$$1) === 'object') { - ch.config = new Config(options$$1); - options$$1 = CoreUtils.extendArrayProps(ch.config, options$$1); - w.config = Utils.extend(w.config, options$$1); - - if (overwriteInitialConfig) { - // we need to forget the lastXAxis and lastYAxis is user forcefully overwriteInitialConfig. If we do not do this, and next time when user zooms the chart after setting yaxis.min/max or xaxis.min/max - the stored lastXAxis will never allow the chart to use the updated min/max by user. - w.globals.lastXAxis = []; - w.globals.lastYAxis = []; // After forgetting lastAxes, we need to restore the new config in initialConfig/initialSeries - - w.globals.initialConfig = Utils.extend({}, w.config); - w.globals.initialSeries = JSON.parse(JSON.stringify(w.config.series)); - } - } - - return ch.update(options$$1); - }); - } - /** - * Allows users to update Series after the chart has rendered. - * - * @param {array} series - New series which will override the existing - */ - - }, { - key: "updateSeries", - value: function updateSeries() { - var newSeries = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - this.revertDefaultAxisMinMax(); - return this._updateSeries(newSeries, animate, overwriteInitialSeries); - } - /** - * Allows users to append a new series after the chart has rendered. - * - * @param {array} newSerie - New serie which will be appended to the existing series - */ - - }, { - key: "appendSeries", - value: function appendSeries(newSerie) { - var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var newSeries = this.w.config.series.slice(); - newSeries.push(newSerie); - this.revertDefaultAxisMinMax(); - return this._updateSeries(newSeries, animate, overwriteInitialSeries); - } - /** - * Private method to update Series. - * - * @param {array} series - New series which will override the existing - */ - - }, { - key: "_updateSeries", - value: function _updateSeries(newSeries, animate) { - var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var w = this.w; - this.w.globals.shouldAnimate = animate; - w.globals.dataChanged = true; // if user has collapsed some series with legend, we need to clear those - - if (w.globals.allSeriesCollapsed) { - w.globals.allSeriesCollapsed = false; - } - - if (animate) { - this.series.getPreviousPaths(); - } - - var existingSeries; // axis charts - - if (w.globals.axisCharts) { - existingSeries = newSeries.map(function (s, i) { - return _objectSpread({}, w.config.series[i], { - name: s.name ? s.name : w.config.series[i] && w.config.series[i].name, - type: s.type ? s.type : w.config.series[i] && w.config.series[i].type, - data: s.data ? s.data : w.config.series[i] && w.config.series[i].data - }); - }); - - if (existingSeries.length === 0) { - existingSeries = [{ - data: [] - }]; - } - - w.config.series = existingSeries; - } else { - // non-axis chart (pie/radialbar) - w.config.series = newSeries.slice(); - } - - if (overwriteInitialSeries) { - w.globals.initialConfig.series = JSON.parse(JSON.stringify(w.config.series)); - w.globals.initialSeries = JSON.parse(JSON.stringify(w.config.series)); - } - - return this.update(); - } - /** - * Get all charts in the same "group" (including the instance which is called upon) to sync them when user zooms in/out or pan. - */ - - }, { - key: "getSyncedCharts", - value: function getSyncedCharts() { - var chartGroups = this.getGroupedCharts(); - var allCharts = [this]; - - if (chartGroups.length) { - allCharts = []; - chartGroups.forEach(function (ch) { - allCharts.push(ch); - }); - } - - return allCharts; - } - /** - * Get charts in the same "group" (excluding the instance which is called upon) to perform operations on the other charts of the same group (eg., tooltip hovering) - */ - - }, { - key: "getGroupedCharts", - value: function getGroupedCharts() { - var _this2 = this; - - return Apex._chartInstances.filter(function (ch) { - if (ch.group) { - return true; - } - }).map(function (ch) { - return _this2.w.config.chart.group === ch.group ? ch.chart : _this2; - }); - } - /** - * Allows users to append Data to series. - * - * @param {array} newData - New data in the same format as series - */ - - }, { - key: "appendData", - value: function appendData(newData) { - var overwriteInitialSeries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var me = this; - me.w.globals.dataChanged = true; - me.series.getPreviousPaths(); - var newSeries = me.w.config.series.slice(); - - for (var i = 0; i < newSeries.length; i++) { - if (typeof newData[i] !== 'undefined') { - for (var j = 0; j < newData[i].data.length; j++) { - newSeries[i].data.push(newData[i].data[j]); - } - } - } - - me.w.config.series = newSeries; - - if (overwriteInitialSeries) { - me.w.globals.initialSeries = JSON.parse(JSON.stringify(me.w.config.series)); - } - - return this.update(); - } - }, { - key: "update", - value: function update(options$$1) { - var _this3 = this; - - return new Promise$1(function (resolve, reject) { - _this3.clear(); - - var graphData = _this3.create(_this3.w.config.series, options$$1); - - if (!graphData) return resolve(_this3); - - _this3.mount(graphData).then(function () { - if (typeof _this3.w.config.chart.events.updated === 'function') { - _this3.w.config.chart.events.updated(_this3, _this3.w); - } - - _this3.fireEvent('updated', [_this3, _this3.w]); - - _this3.w.globals.isDirty = true; - resolve(_this3); - }).catch(function (e) { - reject(e); - }); - }); - } - }, { - key: "forceXAxisUpdate", - value: function forceXAxisUpdate(options$$1) { - var w = this.w; - - if (typeof options$$1.xaxis.min !== 'undefined') { - w.config.xaxis.min = options$$1.xaxis.min; - w.globals.lastXAxis.min = options$$1.xaxis.min; - } - - if (typeof options$$1.xaxis.max !== 'undefined') { - w.config.xaxis.max = options$$1.xaxis.max; - w.globals.lastXAxis.max = options$$1.xaxis.max; - } - } - /** - * This function reverts the yaxis and xaxis min/max values to what it was when the chart was defined. - * This function fixes an important bug where a user might load a new series after zooming in/out of previous series which resulted in wrong min/max - * Also, this should never be called internally on zoom/pan - the reset should only happen when user calls the updateSeries() function externally - */ - - }, { - key: "revertDefaultAxisMinMax", - value: function revertDefaultAxisMinMax() { - var w = this.w; - w.config.xaxis.min = w.globals.lastXAxis.min; - w.config.xaxis.max = w.globals.lastXAxis.max; - w.config.yaxis.map(function (yaxe, index) { - if (w.globals.zoomed) { - // if user has zoomed, and this function is called - // then we need to get the lastAxis min and max - if (typeof w.globals.lastYAxis[index] !== 'undefined') { - yaxe.min = w.globals.lastYAxis[index].min; - yaxe.max = w.globals.lastYAxis[index].max; - } - } - }); - } - }, { - key: "clear", - value: function clear() { - if (this.zoomPanSelection) { - this.zoomPanSelection.destroy(); - } - - if (this.toolbar) { - this.toolbar.destroy(); - } - - this.animations = null; - this.annotations = null; - this.core = null; - this.grid = null; - this.series = null; - this.responsive = null; - this.theme = null; - this.formatters = null; - this.titleSubtitle = null; - this.legend = null; - this.dimensions = null; - this.options = null; - this.crosshairs = null; - this.zoomPanSelection = null; - this.toolbar = null; - this.w.globals.tooltip = null; - this.clearDomElements(); - } - }, { - key: "killSVG", - value: function killSVG(draw) { - return new Promise$1(function (resolve, reject) { - draw.each(function (i, children) { - this.removeClass('*'); - this.off(); - this.stop(); - }, true); - draw.ungroup(); - draw.clear(); - resolve('done'); - }); - } - }, { - key: "clearDomElements", - value: function clearDomElements() { - var domEls = this.w.globals.dom; - - if (this.el !== null) { - // remove all child elements - resetting the whole chart - while (this.el.firstChild) { - this.el.removeChild(this.el.firstChild); - } - } - - this.killSVG(domEls.Paper); - domEls.Paper.remove(); - domEls.elWrap = null; - domEls.elGraphical = null; - domEls.elLegendWrap = null; - domEls.baseEl = null; - domEls.elGridRect = null; - domEls.elGridRectMask = null; - domEls.elGridRectMarkerMask = null; - domEls.elDefs = null; - } - /** - * Destroy the chart instance by removing all elements which also clean up event listeners on those elements. - */ - - }, { - key: "destroy", - value: function destroy() { - this.clear(); // remove the chart's instance from the global Apex._chartInstances - - var chartID = this.w.config.chart.id; - - if (chartID) { - Apex._chartInstances.forEach(function (c, i) { - if (c.id === chartID) { - Apex._chartInstances.splice(i, 1); - } - }); - } - - window.removeEventListener('resize', this.windowResizeHandler); - window.removeResizeListener(this.el.parentNode, this.parentResizeCallback.bind(this)); - } - /** - * Allows the user to provide data attrs in the element and the chart will render automatically when this method is called by searching for the elements containing 'data-apexcharts' attribute - */ - - }, { - key: "toggleSeries", - value: function toggleSeries(seriesName) { - var targetElement = this.series.getSeriesByName(seriesName); - var seriesCnt = parseInt(targetElement.getAttribute('data:realIndex')); - var isHidden = targetElement.classList.contains('apexcharts-series-collapsed'); - this.legend.toggleDataSeries(seriesCnt, isHidden); - } - }, { - key: "resetToggleSeries", - value: function resetToggleSeries() { - this.legend.resetToggleDataSeries(); - } - }, { - key: "setupEventHandlers", - value: function setupEventHandlers() { - var w = this.w; - var me = this; - var clickableArea = w.globals.dom.baseEl.querySelector(w.globals.chartClass); - var eventList = ['mousedown', 'mousemove', 'touchstart', 'touchmove', 'mouseup', 'touchend']; - eventList.forEach(function (event) { - clickableArea.addEventListener(event, function (e) { - if (e.type === 'mousedown' && e.which === 1) ; else if (e.type === 'mouseup' && e.which === 1 || e.type === 'touchend') { - if (typeof w.config.chart.events.click === 'function') { - w.config.chart.events.click(e, me, w); - } - - me.fireEvent('click', [e, me, w]); - } - }, { - capture: false, - passive: true - }); - }); - eventList.forEach(function (event) { - document.addEventListener(event, function (e) { - w.globals.clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; - w.globals.clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY; - }); - }); - this.core.setupBrushHandler(); - } - }, { - key: "addXaxisAnnotation", - value: function addXaxisAnnotation(opts) { - var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.addXaxisAnnotationExternal(opts, pushToMemory, me); - } - }, { - key: "addYaxisAnnotation", - value: function addYaxisAnnotation(opts) { - var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.addYaxisAnnotationExternal(opts, pushToMemory, me); - } - }, { - key: "addPointAnnotation", - value: function addPointAnnotation(opts) { - var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.addPointAnnotationExternal(opts, pushToMemory, me); - } - }, { - key: "clearAnnotations", - value: function clearAnnotations() { - var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.clearAnnotations(me); - } // This method is never used internally and will be only called externally on the chart instance. - // Hence, we need to keep all these elements in memory when the chart gets updated and redraw again - - }, { - key: "addText", - value: function addText(options$$1) { - var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.addText(options$$1, pushToMemory, me); - } - }, { - key: "getChartArea", - value: function getChartArea() { - var el = this.w.globals.dom.baseEl.querySelector('.apexcharts-inner'); - return el; - } - }, { - key: "getSeriesTotalXRange", - value: function getSeriesTotalXRange(minX, maxX) { - return this.coreUtils.getSeriesTotalsXRange(minX, maxX); - } - }, { - key: "getHighestValueInSeries", - value: function getHighestValueInSeries() { - var seriesIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - var range = new Range$1(this.ctx); - var minYmaxY = range.getMinYMaxY(seriesIndex); - return minYmaxY.highestY; - } - }, { - key: "getLowestValueInSeries", - value: function getLowestValueInSeries() { - var seriesIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - var range = new Range$1(this.ctx); - var minYmaxY = range.getMinYMaxY(seriesIndex); - return minYmaxY.lowestY; - } - }, { - key: "getSeriesTotal", - value: function getSeriesTotal() { - return this.w.globals.seriesTotals; - } - }, { - key: "setLocale", - value: function setLocale(localeName) { - this.setCurrentLocaleValues(localeName); - } - }, { - key: "setCurrentLocaleValues", - value: function setCurrentLocaleValues(localeName) { - var locales = this.w.config.chart.locales; // check if user has specified locales in global Apex variable - // if yes - then extend those with local chart's locale - - if (window.Apex.chart && window.Apex.chart.locales && window.Apex.chart.locales.length > 0) { - locales = this.w.config.chart.locales.concat(window.Apex.chart.locales); - } // find the locale from the array of locales which user has set (either by chart.defaultLocale or by calling setLocale() method.) - - - var selectedLocale = locales.filter(function (c) { - return c.name === localeName; - })[0]; - - if (selectedLocale) { - // create a complete locale object by extending defaults so you don't get undefined errors. - var ret = Utils.extend(en, selectedLocale); // store these locale options in global var for ease access - - this.w.globals.locale = ret.options; - } else { - throw new Error('Wrong locale name provided. Please make sure you set the correct locale name in options'); - } - } - }, { - key: "dataURI", - value: function dataURI() { - var exp = new Exports(this.ctx); - return exp.dataURI(); - } - }, { - key: "paper", - value: function paper() { - return this.w.globals.dom.Paper; - } - }, { - key: "parentResizeCallback", - value: function parentResizeCallback() { - if (this.w.globals.animationEnded) { - this.windowResize(); - } - } - /** - * Handle window resize and re-draw the whole chart. - */ - - }, { - key: "windowResize", - value: function windowResize() { - var _this4 = this; - - clearTimeout(this.w.globals.resizeTimer); - this.w.globals.resizeTimer = window.setTimeout(function () { - _this4.w.globals.resized = true; - _this4.w.globals.dataChanged = false; // we need to redraw the whole chart on window resize (with a small delay). - - _this4.update(); - }, 150); - } - }], [{ - key: "initOnLoad", - value: function initOnLoad() { - var els = document.querySelectorAll('[data-apexcharts]'); - - for (var i = 0; i < els.length; i++) { - var el = els[i]; - var options$$1 = JSON.parse(els[i].getAttribute('data-options')); - var apexChart = new ApexCharts(el, options$$1); - apexChart.render(); - } - } - /** - * This static method allows users to call chart methods without necessarily from the - * instance of the chart in case user has assigned chartID to the targetted chart. - * The chartID is used for mapping the instance stored in Apex._chartInstances global variable - * - * This is helpful in cases when you don't have reference of the chart instance - * easily and need to call the method from anywhere. - * For eg, in React/Vue applications when you have many parent/child components, - * and need easy reference to other charts for performing dynamic operations - * - * @param {string} chartID - The unique identifier which will be used to call methods - * on that chart instance - * @param {function} fn - The method name to call - * @param {object} opts - The parameters which are accepted in the original method will be passed here in the same order. - */ - - }, { - key: "exec", - value: function exec(chartID, fn) { - var chart = this.getChartByID(chartID); - if (!chart) return; - - for (var _len = arguments.length, opts = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - opts[_key - 2] = arguments[_key]; - } - - switch (fn) { - case 'updateOptions': - { - return chart.updateOptions.apply(chart, opts); - } - - case 'updateSeries': - { - return chart.updateSeries.apply(chart, opts); - } - - case 'appendData': - { - return chart.appendData.apply(chart, opts); - } - - case 'appendSeries': - { - return chart.appendSeries.apply(chart, opts); - } - - case 'toggleSeries': - { - return chart.toggleSeries.apply(chart, opts); - } - - case 'dataURI': - { - return chart.dataURI.apply(chart, opts); - } - - case 'addXaxisAnnotation': - { - return chart.addXaxisAnnotation.apply(chart, opts); - } - - case 'addYaxisAnnotation': - { - return chart.addYaxisAnnotation.apply(chart, opts); - } - - case 'addPointAnnotation': - { - return chart.addPointAnnotation.apply(chart, opts); - } - - case 'addText': - { - return chart.addText.apply(chart, opts); - } - - case 'clearAnnotations': - { - return chart.clearAnnotations.apply(chart, opts); - } - - case 'paper': - { - return chart.paper.apply(chart, opts); - } - - case 'destroy': - { - return chart.destroy(); - } - } - } - }, { - key: "merge", - value: function merge(target, source) { - return Utils.extend(target, source); - } - }, { - key: "getChartByID", - value: function getChartByID(chartID) { - var c = Apex._chartInstances.filter(function (ch) { - return ch.id === chartID; - })[0]; - - return c.chart; - } - }]); - - return ApexCharts; -}(); - -module.exports = ApexCharts$1; diff --git a/static/libs/apexcharts/apexcharts.esm.js b/static/libs/apexcharts/apexcharts.esm.js deleted file mode 100644 index 4238534f3..000000000 --- a/static/libs/apexcharts/apexcharts.esm.js +++ /dev/null @@ -1,28681 +0,0 @@ -/*! - * ApexCharts v3.6.12 - * (c) 2018-2019 Juned Chhipa - * Released under the MIT License. - */ -function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); -} - -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} - -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} - -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; -} - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - -function _objectSpread(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - var ownKeys = Object.keys(source); - - if (typeof Object.getOwnPropertySymbols === 'function') { - ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { - return Object.getOwnPropertyDescriptor(source, sym).enumerable; - })); - } - - ownKeys.forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } - - return target; -} - -function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function"); - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - writable: true, - configurable: true - } - }); - if (superClass) _setPrototypeOf(subClass, superClass); -} - -function _getPrototypeOf(o) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { - return o.__proto__ || Object.getPrototypeOf(o); - }; - return _getPrototypeOf(o); -} - -function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; - - return _setPrototypeOf(o, p); -} - -function _assertThisInitialized(self) { - if (self === void 0) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return self; -} - -function _possibleConstructorReturn(self, call) { - if (call && (typeof call === "object" || typeof call === "function")) { - return call; - } - - return _assertThisInitialized(self); -} - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } -} - -function _iterableToArray(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); -} - -/* - ** Generic functions which are not dependent on ApexCharts - */ -var Utils = -/*#__PURE__*/ -function () { - function Utils() { - _classCallCheck(this, Utils); - } - - _createClass(Utils, [{ - key: "shadeRGBColor", - value: function shadeRGBColor(percent, color) { - var f = color.split(','), - t = percent < 0 ? 0 : 255, - p = percent < 0 ? percent * -1 : percent, - R = parseInt(f[0].slice(4)), - G = parseInt(f[1]), - B = parseInt(f[2]); - return 'rgb(' + (Math.round((t - R) * p) + R) + ',' + (Math.round((t - G) * p) + G) + ',' + (Math.round((t - B) * p) + B) + ')'; - } - }, { - key: "shadeHexColor", - value: function shadeHexColor(percent, color) { - var f = parseInt(color.slice(1), 16), - t = percent < 0 ? 0 : 255, - p = percent < 0 ? percent * -1 : percent, - R = f >> 16, - G = f >> 8 & 0x00ff, - B = f & 0x0000ff; - return '#' + (0x1000000 + (Math.round((t - R) * p) + R) * 0x10000 + (Math.round((t - G) * p) + G) * 0x100 + (Math.round((t - B) * p) + B)).toString(16).slice(1); - } // beautiful color shading blending code - // http://stackoverflow.com/questions/5560248/programmatically-lighten-or-darken-a-hex-color-or-rgb-and-blend-colors - - }, { - key: "shadeColor", - value: function shadeColor(p, color) { - if (color.length > 7) return this.shadeRGBColor(p, color);else return this.shadeHexColor(p, color); - } - }], [{ - key: "bind", - value: function bind(fn, me) { - return function () { - return fn.apply(me, arguments); - }; - } - }, { - key: "isObject", - value: function isObject(item) { - return item && _typeof(item) === 'object' && !Array.isArray(item) && item != null; - } - }, { - key: "listToArray", - value: function listToArray(list) { - var i, - array = []; - - for (i = 0; i < list.length; i++) { - array[i] = list[i]; - } - - return array; - } // to extend defaults with user options - // credit: http://stackoverflow.com/questions/27936772/deep-object-merging-in-es6-es7#answer-34749873 - - }, { - key: "extend", - value: function extend(target, source) { - var _this = this; - - if (typeof Object.assign !== 'function') { - - (function () { - Object.assign = function (target) { - - if (target === undefined || target === null) { - throw new TypeError('Cannot convert undefined or null to object'); - } - - var output = Object(target); - - for (var index = 1; index < arguments.length; index++) { - var _source = arguments[index]; - - if (_source !== undefined && _source !== null) { - for (var nextKey in _source) { - if (_source.hasOwnProperty(nextKey)) { - output[nextKey] = _source[nextKey]; - } - } - } - } - - return output; - }; - })(); - } - - var output = Object.assign({}, target); - - if (this.isObject(target) && this.isObject(source)) { - Object.keys(source).forEach(function (key) { - if (_this.isObject(source[key])) { - if (!(key in target)) { - Object.assign(output, _defineProperty({}, key, source[key])); - } else { - output[key] = _this.extend(target[key], source[key]); - } - } else { - Object.assign(output, _defineProperty({}, key, source[key])); - } - }); - } - - return output; - } - }, { - key: "extendArray", - value: function extendArray(arrToExtend, resultArr) { - var extendedArr = []; - arrToExtend.map(function (item) { - extendedArr.push(Utils.extend(resultArr, item)); - }); - arrToExtend = extendedArr; - return arrToExtend; - } // If month counter exceeds 12, it starts again from 1 - - }, { - key: "monthMod", - value: function monthMod(month) { - return month % 12; - } - }, { - key: "addProps", - value: function addProps(obj, arr, val) { - if (typeof arr === 'string') { - arr = arr.split('.'); - } - - obj[arr[0]] = obj[arr[0]] || {}; - var tmpObj = obj[arr[0]]; - - if (arr.length > 1) { - arr.shift(); - this.addProps(tmpObj, arr, val); - } else { - obj[arr[0]] = val; - } - - return obj; - } - }, { - key: "clone", - value: function clone(source) { - if (Object.prototype.toString.call(source) === '[object Array]') { - var cloneResult = []; - - for (var i = 0; i < source.length; i++) { - cloneResult[i] = this.clone(source[i]); - } - - return cloneResult; - } else if (_typeof(source) === 'object') { - var _cloneResult = {}; - - for (var prop in source) { - if (source.hasOwnProperty(prop)) { - _cloneResult[prop] = this.clone(source[prop]); - } - } - - return _cloneResult; - } else { - return source; - } - } - }, { - key: "log10", - value: function log10(x) { - return Math.log(x) / Math.LN10; - } - }, { - key: "roundToBase10", - value: function roundToBase10(x) { - return Math.pow(10, Math.floor(Math.log10(x))); - } - }, { - key: "roundToBase", - value: function roundToBase(x, base) { - return Math.pow(base, Math.floor(Math.log(x) / Math.log(base))); - } - }, { - key: "parseNumber", - value: function parseNumber(val) { - if (val === null) return val; - return parseFloat(val); - } - }, { - key: "noExponents", - value: function noExponents(val) { - var data = String(val).split(/[eE]/); - if (data.length == 1) return data[0]; - var z = '', - sign = val < 0 ? '-' : '', - str = data[0].replace('.', ''), - mag = Number(data[1]) + 1; - - if (mag < 0) { - z = sign + '0.'; - - while (mag++) { - z += '0'; - } - - return z + str.replace(/^\-/, ''); - } - - mag -= str.length; - - while (mag--) { - z += '0'; - } - - return str + z; - } - }, { - key: "getDimensions", - value: function getDimensions(el) { - var computedStyle = getComputedStyle(el); - var ret = []; - var elementHeight = el.clientHeight; - var elementWidth = el.clientWidth; - elementHeight -= parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom); - elementWidth -= parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight); - ret.push(elementWidth); - ret.push(elementHeight); - return ret; - } - }, { - key: "getBoundingClientRect", - value: function getBoundingClientRect(element) { - var rect = element.getBoundingClientRect(); - return { - top: rect.top, - right: rect.right, - bottom: rect.bottom, - left: rect.left, - width: rect.width, - height: rect.height, - x: rect.x, - y: rect.y - }; - } // http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb#answer-12342275 - - }, { - key: "hexToRgba", - value: function hexToRgba() { - var hex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '#999999'; - var opacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.6; - - if (hex.substring(0, 1) !== '#') { - hex = '#999999'; - } - - var h = hex.replace('#', ''); - h = h.match(new RegExp('(.{' + h.length / 3 + '})', 'g')); - - for (var i = 0; i < h.length; i++) { - h[i] = parseInt(h[i].length === 1 ? h[i] + h[i] : h[i], 16); - } - - if (typeof opacity !== 'undefined') h.push(opacity); - return 'rgba(' + h.join(',') + ')'; - } - }, { - key: "getOpacityFromRGBA", - value: function getOpacityFromRGBA(rgba) { - rgba = rgba.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i); - return rgba[3]; - } - }, { - key: "rgb2hex", - value: function rgb2hex(rgb) { - rgb = rgb.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i); - return rgb && rgb.length === 4 ? '#' + ('0' + parseInt(rgb[1], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[2], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[3], 10).toString(16)).slice(-2) : ''; - } - }, { - key: "isColorHex", - value: function isColorHex(color) { - return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(color); - } - }, { - key: "polarToCartesian", - value: function polarToCartesian(centerX, centerY, radius, angleInDegrees) { - var angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0; - return { - x: centerX + radius * Math.cos(angleInRadians), - y: centerY + radius * Math.sin(angleInRadians) - }; - } - }, { - key: "escapeString", - value: function escapeString(str) { - var escapeWith = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x'; - var newStr = str.toString().slice(); - newStr = newStr.replace(/[` ~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, escapeWith); - return newStr; - } - }, { - key: "negToZero", - value: function negToZero(val) { - return val < 0 ? 0 : val; - } - }, { - key: "moveIndexInArray", - value: function moveIndexInArray(arr, old_index, new_index) { - if (new_index >= arr.length) { - var k = new_index - arr.length + 1; - - while (k--) { - arr.push(undefined); - } - } - - arr.splice(new_index, 0, arr.splice(old_index, 1)[0]); - return arr; - } - }, { - key: "extractNumber", - value: function extractNumber(s) { - return parseFloat(s.replace(/[^\d\.]*/g, '')); - } - }, { - key: "randomString", - value: function randomString(len) { - var text = ''; - var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; - - for (var i = 0; i < len; i++) { - text += possible.charAt(Math.floor(Math.random() * possible.length)); - } - - return text; - } - }, { - key: "findAncestor", - value: function findAncestor(el, cls) { - while ((el = el.parentElement) && !el.classList.contains(cls)) { - } - - return el; - } - }, { - key: "setELstyles", - value: function setELstyles(el, styles) { - for (var key in styles) { - if (styles.hasOwnProperty(key)) { - el.style.key = styles[key]; - } - } - } - }, { - key: "isNumber", - value: function isNumber(value) { - return !isNaN(value) && parseFloat(Number(value)) === value && !isNaN(parseInt(value, 10)); - } - }, { - key: "isFloat", - value: function isFloat(n) { - return Number(n) === n && n % 1 !== 0; - } - }, { - key: "isSafari", - value: function isSafari() { - return /^((?!chrome|android).)*safari/i.test(navigator.userAgent); - } - }, { - key: "isFirefox", - value: function isFirefox() { - return navigator.userAgent.toLowerCase().indexOf('firefox') > -1; - } - }, { - key: "isIE11", - value: function isIE11() { - if (window.navigator.userAgent.indexOf('MSIE') !== -1 || window.navigator.appVersion.indexOf('Trident/') > -1) { - return true; - } - } - }, { - key: "isIE", - value: function isIE() { - var ua = window.navigator.userAgent; - var msie = ua.indexOf('MSIE '); - - if (msie > 0) { - // IE 10 or older => return version number - return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); - } - - var trident = ua.indexOf('Trident/'); - - if (trident > 0) { - // IE 11 => return version number - var rv = ua.indexOf('rv:'); - return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); - } - - var edge = ua.indexOf('Edge/'); - - if (edge > 0) { - // Edge (IE 12+) => return version number - return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); - } // other browser - - - return false; - } - }]); - - return Utils; -}(); - -/** - * ApexCharts Filters Class for setting hover/active states on the paths. - * - * @module Formatters - **/ - -var Filters = -/*#__PURE__*/ -function () { - function Filters(ctx) { - _classCallCheck(this, Filters); - - this.ctx = ctx; - this.w = ctx.w; - } // create a re-usable filter which can be appended other filter effects and applied to multiple elements - - - _createClass(Filters, [{ - key: "getDefaultFilter", - value: function getDefaultFilter(el, i) { - var w = this.w; - el.unfilter(true); - var filter = new window.SVG.Filter(); - filter.size('120%', '180%', '-5%', '-40%'); - - if (w.config.states.normal.filter !== 'none') { - this.applyFilter(el, i, w.config.states.normal.filter.type, w.config.states.normal.filter.value); - } else { - if (w.config.chart.dropShadow.enabled) { - this.dropShadow(el, w.config.chart.dropShadow, i); - } - } - } - }, { - key: "addNormalFilter", - value: function addNormalFilter(el, i) { - var w = this.w; - - if (w.config.chart.dropShadow.enabled) { - this.dropShadow(el, w.config.chart.dropShadow, i); - } - } // appends dropShadow to the filter object which can be chained with other filter effects - - }, { - key: "addLightenFilter", - value: function addLightenFilter(el, i, attrs) { - var _this = this; - - var w = this.w; - var intensity = attrs.intensity; - - if (Utils.isFirefox()) { - return; - } - - el.unfilter(true); - var filter = new window.SVG.Filter(); - filter.size('120%', '180%', '-5%', '-40%'); - el.filter(function (add) { - var shadowAttr = w.config.chart.dropShadow; - - if (shadowAttr.enabled) { - filter = _this.addShadow(add, i, shadowAttr); - } else { - filter = add; - } - - filter.componentTransfer({ - rgb: { - type: 'linear', - slope: 1.5, - intercept: intensity - } - }); - }); - el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); - } // appends dropShadow to the filter object which can be chained with other filter effects - - }, { - key: "addDarkenFilter", - value: function addDarkenFilter(el, i, attrs) { - var _this2 = this; - - var w = this.w; - var intensity = attrs.intensity; - - if (Utils.isFirefox()) { - return; - } - - el.unfilter(true); - var filter = new window.SVG.Filter(); - filter.size('120%', '180%', '-5%', '-40%'); - el.filter(function (add) { - var shadowAttr = w.config.chart.dropShadow; - - if (shadowAttr.enabled) { - filter = _this2.addShadow(add, i, shadowAttr); - } else { - filter = add; - } - - filter.componentTransfer({ - rgb: { - type: 'linear', - slope: intensity - } - }); - }); - el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); - } - }, { - key: "applyFilter", - value: function applyFilter(el, i, filter) { - var intensity = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.5; - - switch (filter) { - case 'none': - { - this.addNormalFilter(el, i); - break; - } - - case 'lighten': - { - this.addLightenFilter(el, i, { - intensity: intensity - }); - break; - } - - case 'darken': - { - this.addDarkenFilter(el, i, { - intensity: intensity - }); - break; - } - - default: - // do nothing - break; - } - } // appends dropShadow to the filter object which can be chained with other filter effects - - }, { - key: "addShadow", - value: function addShadow(add, i, attrs) { - var blur = attrs.blur, - top = attrs.top, - left = attrs.left, - color = attrs.color, - opacity = attrs.opacity; - var shadowBlur = add.flood(Array.isArray(color) ? color[i] : color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source); - return add.blend(add.source, shadowBlur); - } // directly adds dropShadow to the element and returns the same element. - // the only way it is different from the addShadow() function is that addShadow is chainable to other filters, while this function discards all filters and add dropShadow - - }, { - key: "dropShadow", - value: function dropShadow(el, attrs) { - var i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - var top = attrs.top, - left = attrs.left, - blur = attrs.blur, - color = attrs.color, - opacity = attrs.opacity, - noUserSpaceOnUse = attrs.noUserSpaceOnUse; - el.unfilter(true); - color = Array.isArray(color) ? color[i] : color; - var filter = new window.SVG.Filter(); - filter.size('120%', '180%', '-5%', '-40%'); - el.filter(function (add) { - var shadowBlur = null; - - if (Utils.isSafari() || Utils.isFirefox() || Utils.isIE()) { - // safari/firefox has some alternative way to use this filter - shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur); - } else { - shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source); - } - - add.blend(add.source, shadowBlur); - }); - - if (!noUserSpaceOnUse) { - el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); - } - - return el; - } - }, { - key: "setSelectionFilter", - value: function setSelectionFilter(el, realIndex, dataPointIndex) { - var w = this.w; - - if (typeof w.globals.selectedDataPoints[realIndex] !== 'undefined') { - if (w.globals.selectedDataPoints[realIndex].indexOf(dataPointIndex) > -1) { - el.node.setAttribute('selected', true); - var activeFilter = w.config.states.active.filter; - - if (activeFilter !== 'none') { - this.applyFilter(el, realIndex, activeFilter.type, activeFilter.value); - } - } - } - } - }]); - - return Filters; -}(); - -/** - * ApexCharts Animation Class. - * - * @module Animations - **/ - -var Animations = -/*#__PURE__*/ -function () { - function Animations(ctx) { - _classCallCheck(this, Animations); - - this.ctx = ctx; - this.w = ctx.w; - this.setEasingFunctions(); - } - - _createClass(Animations, [{ - key: "setEasingFunctions", - value: function setEasingFunctions() { - var easing; - var userDefinedEasing = this.w.config.chart.animations.easing; - - switch (userDefinedEasing) { - case 'linear': - { - easing = '-'; - break; - } - - case 'easein': - { - easing = '<'; - break; - } - - case 'easeout': - { - easing = '>'; - break; - } - - case 'easeinout': - { - easing = '<>'; - break; - } - - case 'swing': - { - easing = function easing(pos) { - var s = 1.70158; - return (pos -= 1) * pos * ((s + 1) * pos + s) + 1; - }; - - break; - } - - case 'bounce': - { - easing = function easing(pos) { - if (pos < 1 / 2.75) { - return 7.5625 * pos * pos; - } else if (pos < 2 / 2.75) { - return 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75; - } else if (pos < 2.5 / 2.75) { - return 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375; - } else { - return 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375; - } - }; - - break; - } - - case 'elastic': - { - easing = function easing(pos) { - if (pos === !!pos) return pos; - return Math.pow(2, -10 * pos) * Math.sin((pos - 0.075) * (2 * Math.PI) / 0.3) + 1; - }; - - break; - } - - default: - { - easing = '<>'; - } - } - - this.w.globals.easing = easing; - } - }, { - key: "animateLine", - value: function animateLine(el, from, to, speed) { - el.attr(from).animate(speed).attr(to); - } - /* - ** Animate radius of a circle element - */ - - }, { - key: "animateCircleRadius", - value: function animateCircleRadius(el, from, to, speed, easing) { - if (!from) from = 0; - el.attr({ - r: from - }).animate(speed, easing).attr({ - r: to - }); - } - /* - ** Animate radius and position of a circle element - */ - - }, { - key: "animateCircle", - value: function animateCircle(el, from, to, speed, easing) { - el.attr({ - r: from.r, - cx: from.cx, - cy: from.cy - }).animate(speed, easing).attr({ - r: to.r, - cx: to.cx, - cy: to.cy - }); - } - /* - ** Animate rect properties - */ - - }, { - key: "animateRect", - value: function animateRect(el, from, to, speed, fn) { - el.attr(from).animate(speed).attr(to).afterAll(function () { - fn(); - }); - } - }, { - key: "animatePathsGradually", - value: function animatePathsGradually(params) { - var el = params.el, - j = params.j, - pathFrom = params.pathFrom, - pathTo = params.pathTo, - speed = params.speed, - delay = params.delay, - strokeWidth = params.strokeWidth; - var me = this; - var w = this.w; - var delayFactor = 0; - - if (w.config.chart.animations.animateGradually.enabled) { - delayFactor = w.config.chart.animations.animateGradually.delay; - } - - if (w.config.chart.animations.dynamicAnimation.enabled && w.globals.dataChanged) { - delayFactor = 0; - } - - me.morphSVG(el, j, pathFrom, pathTo, speed, strokeWidth, delay * delayFactor); - } - }, { - key: "showDelayedElements", - value: function showDelayedElements() { - this.w.globals.delayedElements.forEach(function (d) { - var ele = d.el; - ele.classList.remove('hidden'); - }); - } // SVG.js animation for morphing one path to another - - }, { - key: "morphSVG", - value: function morphSVG(el, j, pathFrom, pathTo, speed, strokeWidth, delay) { - var _this = this; - - var w = this.w; - - if (!pathFrom) { - pathFrom = el.attr('pathFrom'); - } - - if (!pathTo) { - pathTo = el.attr('pathTo'); - } - - if (!pathFrom || pathFrom.indexOf('undefined') > -1 || pathFrom.indexOf('NaN') > -1) { - pathFrom = "M 0 ".concat(w.globals.gridHeight); - speed = 1; - } - - if (pathTo.indexOf('undefined') > -1 || pathTo.indexOf('NaN') > -1) { - pathTo = "M 0 ".concat(w.globals.gridHeight); - speed = 1; - } - - if (!w.globals.shouldAnimate) { - speed = 1; - } - - el.plot(pathFrom).animate(1, w.globals.easing, delay).plot(pathFrom).animate(speed, w.globals.easing, delay).plot(pathTo).afterAll(function () { - // a flag to indicate that the original mount function can return true now as animation finished here - if (Utils.isNumber(j)) { - if (j === w.globals.series[w.globals.maxValsInArrayIndex].length - 2 && w.globals.shouldAnimate) { - w.globals.animationEnded = true; - } - } else if (w.globals.shouldAnimate) { - w.globals.animationEnded = true; - - if (typeof w.config.chart.events.animationEnd === 'function') { - w.config.chart.events.animationEnd(_this.ctx, w); - } - } - - _this.showDelayedElements(); - }); - } - }]); - - return Animations; -}(); - -/** - * ApexCharts Graphics Class for all drawing operations. - * - * @module Graphics - **/ - -var Graphics = -/*#__PURE__*/ -function () { - function Graphics(ctx) { - _classCallCheck(this, Graphics); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Graphics, [{ - key: "drawLine", - value: function drawLine(x1, y1, x2, y2) { - var lineColor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '#a8a8a8'; - var dashArray = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; - var strokeWidth = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null; - var w = this.w; - var line = w.globals.dom.Paper.line().attr({ - x1: x1, - y1: y1, - x2: x2, - y2: y2, - stroke: lineColor, - 'stroke-dasharray': dashArray, - 'stroke-width': strokeWidth - }); - return line; - } - }, { - key: "drawRect", - value: function drawRect() { - var x1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - var y1 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - var x2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - var y2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; - var radius = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; - var color = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '#fefefe'; - var opacity = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 1; - var strokeWidth = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; - var strokeColor = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : null; - var strokeDashArray = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 0; - var w = this.w; - var rect = w.globals.dom.Paper.rect(); - rect.attr({ - x: x1, - y: y1, - width: x2 > 0 ? x2 : 0, - height: y2 > 0 ? y2 : 0, - rx: radius, - ry: radius, - fill: color, - opacity: opacity, - 'stroke-width': strokeWidth !== null ? strokeWidth : 0, - stroke: strokeColor !== null ? strokeColor : 'none', - 'stroke-dasharray': strokeDashArray - }); - return rect; - } - }, { - key: "drawPolygon", - value: function drawPolygon(polygonString) { - var stroke = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#e1e1e1'; - var fill = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'none'; - var w = this.w; - var polygon = w.globals.dom.Paper.polygon(polygonString).attr({ - fill: fill, - stroke: stroke - }); - return polygon; - } - }, { - key: "drawCircle", - value: function drawCircle(radius) { - var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var w = this.w; - var c = w.globals.dom.Paper.circle(radius * 2); - - if (attrs !== null) { - c.attr(attrs); - } - - return c; - } - }, { - key: "drawPath", - value: function drawPath(_ref) { - var _ref$d = _ref.d, - d = _ref$d === void 0 ? '' : _ref$d, - _ref$stroke = _ref.stroke, - stroke = _ref$stroke === void 0 ? '#a8a8a8' : _ref$stroke, - _ref$strokeWidth = _ref.strokeWidth, - strokeWidth = _ref$strokeWidth === void 0 ? 1 : _ref$strokeWidth, - fill = _ref.fill, - _ref$fillOpacity = _ref.fillOpacity, - fillOpacity = _ref$fillOpacity === void 0 ? 1 : _ref$fillOpacity, - _ref$strokeOpacity = _ref.strokeOpacity, - strokeOpacity = _ref$strokeOpacity === void 0 ? 1 : _ref$strokeOpacity, - classes = _ref.classes, - _ref$strokeLinecap = _ref.strokeLinecap, - strokeLinecap = _ref$strokeLinecap === void 0 ? null : _ref$strokeLinecap, - _ref$strokeDashArray = _ref.strokeDashArray, - strokeDashArray = _ref$strokeDashArray === void 0 ? 0 : _ref$strokeDashArray; - var w = this.w; - - if (strokeLinecap === null) { - strokeLinecap = w.config.stroke.lineCap; - } - - if (d.indexOf('undefined') > -1 || d.indexOf('NaN') > -1) { - d = "M 0 ".concat(w.globals.gridHeight); - } - - var p = w.globals.dom.Paper.path(d).attr({ - fill: fill, - 'fill-opacity': fillOpacity, - stroke: stroke, - 'stroke-opacity': strokeOpacity, - 'stroke-linecap': strokeLinecap, - 'stroke-width': strokeWidth, - 'stroke-dasharray': strokeDashArray, - class: classes - }); - return p; - } - }, { - key: "group", - value: function group() { - var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var w = this.w; - var g = w.globals.dom.Paper.group(); - - if (attrs !== null) { - g.attr(attrs); - } - - return g; - } - }, { - key: "move", - value: function move(x, y) { - var move = ['M', x, y].join(' '); - return move; - } - }, { - key: "line", - value: function line(x, y) { - var hORv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var line = null; - - if (hORv === null) { - line = ['L', x, y].join(' '); - } else if (hORv === 'H') { - line = ['H', x].join(' '); - } else if (hORv === 'V') { - line = ['V', y].join(' '); - } - - return line; - } - }, { - key: "curve", - value: function curve(x1, y1, x2, y2, x, y) { - var curve = ['C', x1, y1, x2, y2, x, y].join(' '); - return curve; - } - }, { - key: "quadraticCurve", - value: function quadraticCurve(x1, y1, x, y) { - var curve = ['Q', x1, y1, x, y].join(' '); - return curve; - } - }, { - key: "arc", - value: function arc(rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y) { - var relative = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false; - var coord = 'A'; - if (relative) coord = 'a'; - var arc = [coord, rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y].join(' '); - return arc; - } - /** - * @memberof Graphics - * @param {object} - * i = series's index - * realIndex = realIndex is series's actual index when it was drawn time. After several redraws, the iterating "i" may change in loops, but realIndex doesn't - * pathFrom = existing pathFrom to animateTo - * pathTo = new Path to which d attr will be animated from pathFrom to pathTo - * stroke = line Color - * strokeWidth = width of path Line - * fill = it can be gradient, single color, pattern or image - * animationDelay = how much to delay when starting animation (in milliseconds) - * dataChangeSpeed = for dynamic animations, when data changes - * className = class attribute to add - * @return {object} svg.js path object - **/ - - }, { - key: "renderPaths", - value: function renderPaths(_ref2) { - var i = _ref2.i, - j = _ref2.j, - realIndex = _ref2.realIndex, - pathFrom = _ref2.pathFrom, - pathTo = _ref2.pathTo, - stroke = _ref2.stroke, - strokeWidth = _ref2.strokeWidth, - strokeLinecap = _ref2.strokeLinecap, - fill = _ref2.fill, - animationDelay = _ref2.animationDelay, - initialSpeed = _ref2.initialSpeed, - dataChangeSpeed = _ref2.dataChangeSpeed, - className = _ref2.className, - id = _ref2.id, - _ref2$shouldClipToGri = _ref2.shouldClipToGrid, - shouldClipToGrid = _ref2$shouldClipToGri === void 0 ? true : _ref2$shouldClipToGri, - _ref2$bindEventsOnPat = _ref2.bindEventsOnPaths, - bindEventsOnPaths = _ref2$bindEventsOnPat === void 0 ? true : _ref2$bindEventsOnPat, - _ref2$drawShadow = _ref2.drawShadow, - drawShadow = _ref2$drawShadow === void 0 ? true : _ref2$drawShadow; - var w = this.w; - var filters = new Filters(this.ctx); - var anim = new Animations(this.ctx); - var initialAnim = this.w.config.chart.animations.enabled; - var dynamicAnim = initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; - var d; - var shouldAnimate = !!(initialAnim && !w.globals.resized || dynamicAnim && w.globals.dataChanged && w.globals.shouldAnimate); - - if (shouldAnimate) { - d = pathFrom; - } else { - d = pathTo; - this.w.globals.animationEnded = true; - } - - var strokeDashArrayOpt = w.config.stroke.dashArray; - var strokeDashArray = 0; - - if (Array.isArray(strokeDashArrayOpt)) { - strokeDashArray = strokeDashArrayOpt[realIndex]; - } else { - strokeDashArray = w.config.stroke.dashArray; - } - - var el = this.drawPath({ - d: d, - stroke: stroke, - strokeWidth: strokeWidth, - fill: fill, - fillOpacity: 1, - classes: className, - strokeLinecap: strokeLinecap, - strokeDashArray: strokeDashArray - }); - el.attr('id', "".concat(id, "-").concat(i)); - el.attr('index', realIndex); - - if (shouldClipToGrid) { - el.attr({ - 'clip-path': "url(#gridRectMask".concat(w.globals.cuid, ")") - }); - } // const defaultFilter = el.filterer - - - if (w.config.states.normal.filter.type !== 'none') { - filters.getDefaultFilter(el, realIndex); - } else { - if (w.config.chart.dropShadow.enabled && drawShadow) { - if (!w.config.chart.dropShadow.enabledSeries || w.config.chart.dropShadow.enabledSeries && w.config.chart.dropShadow.enabledSeries.indexOf(realIndex) !== -1) { - var shadow = w.config.chart.dropShadow; - filters.dropShadow(el, shadow, realIndex); - } - } - } - - if (bindEventsOnPaths) { - el.node.addEventListener('mouseenter', this.pathMouseEnter.bind(this, el)); - el.node.addEventListener('mouseleave', this.pathMouseLeave.bind(this, el)); - el.node.addEventListener('mousedown', this.pathMouseDown.bind(this, el)); - } - - el.attr({ - pathTo: pathTo, - pathFrom: pathFrom - }); - var defaultAnimateOpts = { - el: el, - j: j, - pathFrom: pathFrom, - pathTo: pathTo, - strokeWidth: strokeWidth - }; - - if (initialAnim && !w.globals.resized && !w.globals.dataChanged) { - anim.animatePathsGradually(_objectSpread({}, defaultAnimateOpts, { - speed: initialSpeed, - delay: animationDelay - })); - } else { - if (w.globals.resized || !w.globals.dataChanged) { - anim.showDelayedElements(); - } - } - - if (w.globals.dataChanged && dynamicAnim && shouldAnimate) { - anim.animatePathsGradually(_objectSpread({}, defaultAnimateOpts, { - speed: dataChangeSpeed - })); - } - - return el; - } - }, { - key: "drawPattern", - value: function drawPattern(style, width, height) { - var stroke = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '#a8a8a8'; - var strokeWidth = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; - var w = this.w; - var p = w.globals.dom.Paper.pattern(width, height, function (add) { - if (style === 'horizontalLines') { - add.line(0, 0, height, 0).stroke({ - color: stroke, - width: strokeWidth + 1 - }); - } else if (style === 'verticalLines') { - add.line(0, 0, 0, width).stroke({ - color: stroke, - width: strokeWidth + 1 - }); - } else if (style === 'slantedLines') { - add.line(0, 0, width, height).stroke({ - color: stroke, - width: strokeWidth - }); - } else if (style === 'squares') { - add.rect(width, height).fill('none').stroke({ - color: stroke, - width: strokeWidth - }); - } else if (style === 'circles') { - add.circle(width).fill('none').stroke({ - color: stroke, - width: strokeWidth - }); - } - }); - return p; - } - }, { - key: "drawGradient", - value: function drawGradient(style, gfrom, gto, opacityFrom, opacityTo) { - var size = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; - var stops = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null; - var colorStops = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; - var i = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 0; - var w = this.w; - var g; - gfrom = Utils.hexToRgba(gfrom, opacityFrom); - gto = Utils.hexToRgba(gto, opacityTo); - var stop1 = 0; - var stop2 = 1; - var stop3 = 1; - var stop4 = null; - - if (stops !== null) { - stop1 = typeof stops[0] !== 'undefined' ? stops[0] / 100 : 0; - stop2 = typeof stops[1] !== 'undefined' ? stops[1] / 100 : 1; - stop3 = typeof stops[2] !== 'undefined' ? stops[2] / 100 : 1; - stop4 = typeof stops[3] !== 'undefined' ? stops[3] / 100 : null; - } - - var radial = !!(w.config.chart.type === 'donut' || w.config.chart.type === 'pie' || w.config.chart.type === 'bubble'); - - if (colorStops === null || colorStops.length === 0) { - g = w.globals.dom.Paper.gradient(radial ? 'radial' : 'linear', function (stop) { - stop.at(stop1, gfrom, opacityFrom); - stop.at(stop2, gto, opacityTo); - stop.at(stop3, gto, opacityTo); - - if (stop4 !== null) { - stop.at(stop4, gfrom, opacityFrom); - } - }); - } else { - g = w.globals.dom.Paper.gradient(radial ? 'radial' : 'linear', function (stop) { - var stops = Array.isArray(colorStops[i]) ? colorStops[i] : colorStops; - stops.forEach(function (s) { - stop.at(s.offset / 100, s.color, s.opacity); - }); - }); - } - - if (!radial) { - if (style === 'vertical') { - g.from(0, 0).to(0, 1); - } else if (style === 'diagonal') { - g.from(0, 0).to(1, 1); - } else if (style === 'horizontal') { - g.from(0, 1).to(1, 1); - } else if (style === 'diagonal2') { - g.from(0, 1).to(2, 2); - } - } else { - var offx = w.globals.gridWidth / 2; - var offy = w.globals.gridHeight / 2; - - if (w.config.chart.type !== 'bubble') { - g.attr({ - gradientUnits: 'userSpaceOnUse', - cx: offx, - cy: offy, - r: size - }); - } else { - g.attr({ - cx: 0.5, - cy: 0.5, - r: 0.8, - fx: 0.2, - fy: 0.2 - }); - } - } - - return g; - } - }, { - key: "drawText", - value: function drawText(opts) { - var w = this.w; - var x = opts.x, - y = opts.y, - text = opts.text, - textAnchor = opts.textAnchor, - fontSize = opts.fontSize, - fontFamily = opts.fontFamily, - foreColor = opts.foreColor, - opacity = opts.opacity; - if (typeof text === 'undefined') text = ''; - - if (!textAnchor) { - textAnchor = 'start'; - } - - if (!foreColor) { - foreColor = w.config.chart.foreColor; - } - - fontFamily = fontFamily || w.config.chart.fontFamily; - var elText; - - if (Array.isArray(text)) { - elText = w.globals.dom.Paper.text(function (add) { - for (var i = 0; i < text.length; i++) { - add.tspan(text[i]); - } - }); - } else { - elText = w.globals.dom.Paper.plain(text); - } - - elText.attr({ - x: x, - y: y, - 'text-anchor': textAnchor, - 'dominant-baseline': 'auto', - 'font-size': fontSize, - 'font-family': fontFamily, - fill: foreColor, - class: 'apexcharts-text ' + opts.cssClass ? opts.cssClass : '' - }); - elText.node.style.fontFamily = fontFamily; - elText.node.style.opacity = opacity; - return elText; - } - }, { - key: "addTspan", - value: function addTspan(textEl, text, fontFamily) { - var tspan = textEl.tspan(text); - - if (!fontFamily) { - fontFamily = this.w.config.chart.fontFamily; - } - - tspan.node.style.fontFamily = fontFamily; - } - }, { - key: "drawMarker", - value: function drawMarker(x, y, opts) { - x = x || 0; - var size = opts.pSize || 0; - var elPoint = null; - - if (opts.shape === 'square') { - var radius = opts.pRadius === undefined ? size / 2 : opts.pRadius; - - if (y === null) { - size = 0; - radius = 0; - } - - var nSize = size * 1.2 + radius; - var p = this.drawRect(nSize, nSize, nSize, nSize, radius); - p.attr({ - x: x - nSize / 2, - y: y - nSize / 2, - cx: x, - cy: y, - class: opts.class ? opts.class : '', - fill: opts.pointFillColor, - 'fill-opacity': opts.pointFillOpacity ? opts.pointFillOpacity : 1, - stroke: opts.pointStrokeColor, - 'stroke-width': opts.pWidth ? opts.pWidth : 0, - 'stroke-opacity': opts.pointStrokeOpacity ? opts.pointStrokeOpacity : 1 - }); - elPoint = p; - } else if (opts.shape === 'circle') { - if (!Utils.isNumber(y)) { - size = 0; - y = 0; - } // let nSize = size - opts.pRadius / 2 < 0 ? 0 : size - opts.pRadius / 2 - - - elPoint = this.drawCircle(size, { - cx: x, - cy: y, - class: opts.class ? opts.class : '', - stroke: opts.pointStrokeColor, - fill: opts.pointFillColor, - 'fill-opacity': opts.pointFillOpacity ? opts.pointFillOpacity : 1, - 'stroke-width': opts.pWidth ? opts.pWidth : 0, - 'stroke-opacity': opts.pointStrokeOpacity ? opts.pointStrokeOpacity : 1 - }); - } - - return elPoint; - } - }, { - key: "pathMouseEnter", - value: function pathMouseEnter(path, e) { - var w = this.w; - var filters = new Filters(this.ctx); - var i = parseInt(path.node.getAttribute('index')); - var j = parseInt(path.node.getAttribute('j')); - - if (typeof w.config.chart.events.dataPointMouseEnter === 'function') { - w.config.chart.events.dataPointMouseEnter(e, this.ctx, { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - - this.ctx.fireEvent('dataPointMouseEnter', [e, this.ctx, { - seriesIndex: i, - dataPointIndex: j, - w: w - }]); - - if (w.config.states.active.filter.type !== 'none') { - if (path.node.getAttribute('selected') === 'true') { - return; - } - } - - if (w.config.states.hover.filter.type !== 'none') { - if (w.config.states.active.filter.type !== 'none' && !w.globals.isTouchDevice) { - var hoverFilter = w.config.states.hover.filter; - filters.applyFilter(path, i, hoverFilter.type, hoverFilter.value); - } - } - } - }, { - key: "pathMouseLeave", - value: function pathMouseLeave(path, e) { - var w = this.w; - var filters = new Filters(this.ctx); - var i = parseInt(path.node.getAttribute('index')); - var j = parseInt(path.node.getAttribute('j')); - - if (typeof w.config.chart.events.dataPointMouseLeave === 'function') { - w.config.chart.events.dataPointMouseLeave(e, this.ctx, { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - - this.ctx.fireEvent('dataPointMouseLeave', [e, this.ctx, { - seriesIndex: i, - dataPointIndex: j, - w: w - }]); - - if (w.config.states.active.filter.type !== 'none') { - if (path.node.getAttribute('selected') === 'true') { - return; - } - } - - if (w.config.states.hover.filter.type !== 'none') { - filters.getDefaultFilter(path, i); - } - } - }, { - key: "pathMouseDown", - value: function pathMouseDown(path, e) { - var w = this.w; - var filters = new Filters(this.ctx); - var i = parseInt(path.node.getAttribute('index')); - var j = parseInt(path.node.getAttribute('j')); - var selected = 'false'; - - if (path.node.getAttribute('selected') === 'true') { - path.node.setAttribute('selected', 'false'); - - if (w.globals.selectedDataPoints[i].indexOf(j) > -1) { - var index = w.globals.selectedDataPoints[i].indexOf(j); - w.globals.selectedDataPoints[i].splice(index, 1); - } - } else { - if (!w.config.states.active.allowMultipleDataPointsSelection && w.globals.selectedDataPoints.length > 0) { - w.globals.selectedDataPoints = []; - var elPaths = w.globals.dom.Paper.select('.apexcharts-series path').members; - var elCircles = w.globals.dom.Paper.select('.apexcharts-series circle, .apexcharts-series rect').members; - elPaths.forEach(function (elPath) { - elPath.node.setAttribute('selected', 'false'); - filters.getDefaultFilter(elPath, i); - }); - elCircles.forEach(function (circle) { - circle.node.setAttribute('selected', 'false'); - filters.getDefaultFilter(circle, i); - }); - } - - path.node.setAttribute('selected', 'true'); - selected = 'true'; - - if (typeof w.globals.selectedDataPoints[i] === 'undefined') { - w.globals.selectedDataPoints[i] = []; - } - - w.globals.selectedDataPoints[i].push(j); - } - - if (selected === 'true') { - var activeFilter = w.config.states.active.filter; - - if (activeFilter !== 'none') { - filters.applyFilter(path, i, activeFilter.type, activeFilter.value); - } - } else { - if (w.config.states.active.filter.type !== 'none') { - filters.getDefaultFilter(path, i); - } - } - - if (typeof w.config.chart.events.dataPointSelection === 'function') { - w.config.chart.events.dataPointSelection(e, this.ctx, { - selectedDataPoints: w.globals.selectedDataPoints, - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - - this.ctx.fireEvent('dataPointSelection', [e, this.ctx, { - selectedDataPoints: w.globals.selectedDataPoints, - seriesIndex: i, - dataPointIndex: j, - w: w - }]); // if (this.w.config.chart.selection.selectedPoints !== undefined) { - // this.w.config.chart.selection.selectedPoints(w.globals.selectedDataPoints) - // } - } - }, { - key: "rotateAroundCenter", - value: function rotateAroundCenter(el) { - var coord = el.getBBox(); - var x = coord.x + coord.width / 2; - var y = coord.y + coord.height / 2; - return { - x: x, - y: y - }; - } - }, { - key: "getTextRects", - value: function getTextRects(text, fontSize, fontFamily, transform) { - var useBBox = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; - var w = this.w; - var virtualText = this.drawText({ - x: -200, - y: -200, - text: text, - textAnchor: 'start', - fontSize: fontSize, - fontFamily: fontFamily, - foreColor: '#fff', - opacity: 0 - }); - - if (transform) { - virtualText.attr('transform', transform); - } - - w.globals.dom.Paper.add(virtualText); - var rect = virtualText.bbox(); - - if (!useBBox) { - rect = virtualText.node.getBoundingClientRect(); - } - - virtualText.remove(); - return { - width: rect.width, - height: rect.height - }; - } - /** - * append ... to long text - * http://stackoverflow.com/questions/9241315/trimming-text-to-a-given-pixel-width-in-svg - * @memberof Graphics - **/ - - }, { - key: "placeTextWithEllipsis", - value: function placeTextWithEllipsis(textObj, textString, width) { - textObj.textContent = textString; - - if (textString.length > 0) { - // ellipsis is needed - if (textObj.getSubStringLength(0, textString.length) >= width) { - for (var x = textString.length - 3; x > 0; x -= 3) { - if (textObj.getSubStringLength(0, x) <= width) { - textObj.textContent = textString.substring(0, x) + '...'; - return; - } - } - - textObj.textContent = '...'; // can't place at all - } - } - } - }], [{ - key: "setAttrs", - value: function setAttrs(el, attrs) { - for (var key in attrs) { - if (attrs.hasOwnProperty(key)) { - el.setAttribute(key, attrs[key]); - } - } - } - }]); - - return Graphics; -}(); - -const name = "en"; -const options = { - 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" - ], - days: [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ], - shortDays: [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ], - toolbar: { - exportToSVG: "Download SVG", - exportToPNG: "Download PNG", - menu: "Menu", - selection: "Selection", - selectionZoom: "Selection Zoom", - zoomIn: "Zoom In", - zoomOut: "Zoom Out", - pan: "Panning", - reset: "Reset Zoom" - } -}; -var en = { - name: name, - options: options -}; - -var Options = -/*#__PURE__*/ -function () { - function Options() { - _classCallCheck(this, Options); - - this.yAxis = { - show: true, - showAlways: false, - seriesName: undefined, - opposite: false, - reversed: false, - logarithmic: false, - tickAmount: undefined, - forceNiceScale: false, - max: undefined, - min: undefined, - floating: false, - decimalsInFloat: undefined, - labels: { - show: true, - minWidth: 0, - maxWidth: 160, - offsetX: 0, - offsetY: 0, - align: undefined, - rotate: 0, - padding: 20, - style: { - colors: [], - fontSize: '11px', - fontFamily: undefined, - cssClass: '' - }, - formatter: undefined - }, - axisBorder: { - show: false, - color: '#78909C', - offsetX: 0, - offsetY: 0 - }, - axisTicks: { - show: false, - color: '#78909C', - width: 6, - offsetX: 0, - offsetY: 0 - }, - title: { - text: undefined, - rotate: 90, - offsetY: 0, - offsetX: 0, - style: { - color: undefined, - fontSize: '11px', - fontFamily: undefined, - cssClass: '' - } - }, - tooltip: { - enabled: false, - offsetX: 0 - }, - crosshairs: { - show: true, - position: 'front', - stroke: { - color: '#b6b6b6', - width: 1, - dashArray: 0 - } - } - }; - this.xAxisAnnotation = { - x: 0, - x2: null, - strokeDashArray: 1, - fillColor: '#c2c2c2', - borderColor: '#c2c2c2', - opacity: 0.3, - offsetX: 0, - offsetY: 0, - label: { - borderColor: '#c2c2c2', - borderWidth: 1, - text: undefined, - textAnchor: 'middle', - orientation: 'vertical', - position: 'top', - offsetX: 0, - offsetY: 0, - style: { - background: '#fff', - color: undefined, - fontSize: '11px', - fontFamily: undefined, - cssClass: '', - padding: { - left: 5, - right: 5, - top: 2, - bottom: 2 - } - } - } - }; - this.yAxisAnnotation = { - y: 0, - y2: null, - strokeDashArray: 1, - fillColor: '#c2c2c2', - borderColor: '#c2c2c2', - opacity: 0.3, - offsetX: 0, - offsetY: 0, - yAxisIndex: 0, - label: { - borderColor: '#c2c2c2', - borderWidth: 1, - text: undefined, - textAnchor: 'end', - position: 'right', - offsetX: 0, - offsetY: -3, - style: { - background: '#fff', - color: undefined, - fontSize: '11px', - fontFamily: undefined, - cssClass: '', - padding: { - left: 5, - right: 5, - top: 0, - bottom: 2 - } - } - } - }; - this.pointAnnotation = { - x: 0, - y: null, - yAxisIndex: 0, - seriesIndex: 0, - marker: { - size: 0, - fillColor: '#fff', - strokeWidth: 2, - strokeColor: '#333', - shape: 'circle', - offsetX: 0, - offsetY: 0, - radius: 2, - cssClass: '' - }, - label: { - borderColor: '#c2c2c2', - borderWidth: 1, - text: undefined, - textAnchor: 'middle', - offsetX: 0, - offsetY: -15, - style: { - background: '#fff', - color: undefined, - fontSize: '11px', - fontFamily: undefined, - cssClass: '', - padding: { - left: 5, - right: 5, - top: 0, - bottom: 2 - } - } - }, - customSVG: { - SVG: undefined, - cssClass: undefined, - offsetX: 0, - offsetY: 0 - } - }; - } - - _createClass(Options, [{ - key: "init", - value: function init() { - return { - annotations: { - position: 'front', - yaxis: [this.yAxisAnnotation], - xaxis: [this.xAxisAnnotation], - points: [this.pointAnnotation] - }, - chart: { - animations: { - enabled: true, - easing: 'easeinout', - // linear, easeout, easein, easeinout, swing, bounce, elastic - speed: 800, - animateGradually: { - delay: 150, - enabled: true - }, - dynamicAnimation: { - enabled: true, - speed: 350 - } - }, - background: 'transparent', - locales: [en], - defaultLocale: 'en', - dropShadow: { - enabled: false, - enabledSeries: undefined, - top: 2, - left: 2, - blur: 4, - color: '#000', - opacity: 0.35 - }, - events: { - animationEnd: undefined, - beforeMount: undefined, - mounted: undefined, - updated: undefined, - click: undefined, - legendClick: undefined, - markerClick: undefined, - selection: undefined, - dataPointSelection: undefined, - dataPointMouseEnter: undefined, - dataPointMouseLeave: undefined, - beforeZoom: undefined, - zoomed: undefined, - scrolled: undefined - }, - foreColor: '#373d3f', - fontFamily: 'Helvetica, Arial, sans-serif', - height: 'auto', - parentHeightOffset: 15, - id: undefined, - group: undefined, - offsetX: 0, - offsetY: 0, - selection: { - enabled: false, - type: 'x', - // selectedPoints: undefined, // default datapoints that should be selected automatically - fill: { - color: '#24292e', - opacity: 0.1 - }, - stroke: { - width: 1, - color: '#24292e', - opacity: 0.4, - dashArray: 3 - }, - xaxis: { - min: undefined, - max: undefined - }, - yaxis: { - min: undefined, - max: undefined - } - }, - sparkline: { - enabled: false - }, - brush: { - enabled: false, - autoScaleYaxis: false, - target: undefined - }, - stacked: false, - stackType: 'normal', - toolbar: { - show: true, - tools: { - download: true, - selection: true, - zoom: true, - zoomin: true, - zoomout: true, - pan: true, - reset: true, - customIcons: [] - }, - autoSelected: 'zoom' // accepts -> zoom, pan, selection - - }, - type: 'line', - width: '100%', - zoom: { - enabled: true, - type: 'x', - // autoScaleYaxis: false, // TODO: rewrite the autoScaleY function - zoomedArea: { - fill: { - color: '#90CAF9', - opacity: 0.4 - }, - stroke: { - color: '#0D47A1', - opacity: 0.4, - width: 1 - } - } - } - }, - plotOptions: { - bar: { - horizontal: false, - columnWidth: '70%', - // should be in percent 0 - 100 - barHeight: '70%', - // should be in percent 0 - 100 - distributed: false, - endingShape: 'flat', - colors: { - ranges: [], - backgroundBarColors: [], - backgroundBarOpacity: 1 - }, - dataLabels: { - maxItems: 100, - hideOverflowingLabels: true, - position: 'top' // top, center, bottom - // TODO: provide stackedLabels for stacked charts which gives additions of values - - } - }, - candlestick: { - colors: { - upward: '#00B746', - downward: '#EF403C' - }, - wick: { - useFillColor: true - } - }, - heatmap: { - radius: 2, - enableShades: true, - shadeIntensity: 0.5, - reverseNegativeShade: true, - distributed: false, - colorScale: { - inverse: false, - ranges: [], - min: undefined, - max: undefined - } - }, - radialBar: { - size: undefined, - inverseOrder: false, - startAngle: 0, - endAngle: 360, - offsetX: 0, - offsetY: 0, - hollow: { - margin: 5, - size: '50%', - background: 'transparent', - image: undefined, - imageWidth: 150, - imageHeight: 150, - imageOffsetX: 0, - imageOffsetY: 0, - imageClipped: true, - position: 'front', - dropShadow: { - enabled: false, - top: 0, - left: 0, - blur: 3, - color: '#000', - opacity: 0.5 - } - }, - track: { - show: true, - startAngle: undefined, - endAngle: undefined, - background: '#f2f2f2', - strokeWidth: '97%', - opacity: 1, - margin: 5, - // margin is in pixels - dropShadow: { - enabled: false, - top: 0, - left: 0, - blur: 3, - color: '#000', - opacity: 0.5 - } - }, - dataLabels: { - show: true, - name: { - show: true, - fontSize: '16px', - fontFamily: undefined, - color: undefined, - offsetY: 0 - }, - value: { - show: true, - fontSize: '14px', - fontFamily: undefined, - color: undefined, - offsetY: 16, - formatter: function formatter(val) { - return val + '%'; - } - }, - total: { - show: false, - label: 'Total', - color: undefined, - formatter: function formatter(w) { - return w.globals.seriesTotals.reduce(function (a, b) { - return a + b; - }, 0) / w.globals.series.length + '%'; - } - } - } - }, - rangeBar: {}, - pie: { - size: undefined, - customScale: 1, - offsetX: 0, - offsetY: 0, - expandOnClick: true, - dataLabels: { - // These are the percentage values which are displayed on slice - offset: 0, - // offset by which labels will move outside - minAngleToShowLabel: 10 - }, - donut: { - size: '65%', - background: 'transparent', - labels: { - // These are the inner labels appearing inside donut - show: false, - name: { - show: true, - fontSize: '16px', - fontFamily: undefined, - color: undefined, - offsetY: -10 - }, - value: { - show: true, - fontSize: '20px', - fontFamily: undefined, - color: undefined, - offsetY: 10, - formatter: function formatter(val) { - return val; - } - }, - total: { - show: false, - label: 'Total', - color: undefined, - formatter: function formatter(w) { - return w.globals.seriesTotals.reduce(function (a, b) { - return a + b; - }, 0); - } - } - } - } - }, - radar: { - size: undefined, - offsetX: 0, - offsetY: 0, - polygons: { - // strokeColor: '#e8e8e8', // should be deprecated in the minor version i.e 3.2 - strokeColors: '#e8e8e8', - connectorColors: '#e8e8e8', - fill: { - colors: undefined - } - } - } - }, - colors: undefined, - dataLabels: { - enabled: true, - enabledOnSeries: undefined, - formatter: function formatter(val) { - return val; - }, - textAnchor: 'middle', - offsetX: 0, - offsetY: 0, - style: { - fontSize: '12px', - fontFamily: undefined, - colors: undefined - }, - dropShadow: { - enabled: false, - top: 1, - left: 1, - blur: 1, - color: '#000', - opacity: 0.45 - } - }, - fill: { - type: 'solid', - colors: undefined, - // array of colors - opacity: 0.85, - gradient: { - shade: 'dark', - type: 'horizontal', - shadeIntensity: 0.5, - gradientToColors: undefined, - inverseColors: true, - opacityFrom: 1, - opacityTo: 1, - stops: [0, 50, 100], - colorStops: [] - }, - image: { - src: [], - width: undefined, - // optional - height: undefined // optional - - }, - pattern: { - style: 'sqaures', - // String | Array of Strings - width: 6, - height: 6, - strokeWidth: 2 - } - }, - grid: { - show: true, - borderColor: '#e0e0e0', - strokeDashArray: 0, - position: 'back', - xaxis: { - lines: { - show: false, - animate: false - } - }, - yaxis: { - lines: { - show: true, - animate: false - } - }, - row: { - colors: undefined, - // takes as array which will be repeated on rows - opacity: 0.5 - }, - column: { - colors: undefined, - // takes an array which will be repeated on columns - opacity: 0.5 - }, - padding: { - top: 0, - right: 10, - bottom: 0, - left: 12 - } - }, - labels: [], - legend: { - show: true, - showForSingleSeries: false, - showForNullSeries: true, - showForZeroSeries: true, - floating: false, - position: 'bottom', - // whether to position legends in 1 of 4 - // direction - top, bottom, left, right - horizontalAlign: 'center', - // when position top/bottom, you can specify whether to align legends left, right or center - fontSize: '12px', - fontFamily: undefined, - width: undefined, - height: undefined, - formatter: undefined, - offsetX: -20, - offsetY: 0, - labels: { - colors: undefined, - useSeriesColors: false - }, - markers: { - width: 12, - height: 12, - strokeWidth: 0, - strokeColor: '#fff', - radius: 12, - customHTML: undefined, - offsetX: 0, - offsetY: 0, - onClick: undefined - }, - itemMargin: { - horizontal: 0, - vertical: 5 - }, - onItemClick: { - toggleDataSeries: true - }, - onItemHover: { - highlightDataSeries: true - } - }, - markers: { - discrete: [], - size: 0, - colors: undefined, - //strokeColor: '#fff', // TODO: deprecate in major version 4.0 - strokeColors: '#fff', - strokeWidth: 2, - strokeOpacity: 0.9, - fillOpacity: 1, - shape: 'circle', - radius: 2, - offsetX: 0, - offsetY: 0, - hover: { - size: undefined, - sizeOffset: 3 - } - }, - noData: { - text: undefined, - align: 'center', - verticalAlign: 'middle', - offsetX: 0, - offsetY: 0, - style: { - color: undefined, - fontSize: '14px', - fontFamily: undefined - } - }, - responsive: [], - // breakpoints should follow ascending order 400, then 700, then 1000 - series: undefined, - states: { - normal: { - filter: { - type: 'none', - value: 0 - } - }, - hover: { - filter: { - type: 'lighten', - value: 0.15 - } - }, - active: { - allowMultipleDataPointsSelection: false, - filter: { - type: 'darken', - value: 0.65 - } - } - }, - title: { - text: undefined, - align: 'left', - margin: 10, - offsetX: 0, - offsetY: 0, - floating: false, - style: { - fontSize: '14px', - fontFamily: undefined, - color: undefined - } - }, - subtitle: { - text: undefined, - align: 'left', - margin: 10, - offsetX: 0, - offsetY: 30, - floating: false, - style: { - fontSize: '12px', - fontFamily: undefined, - color: undefined - } - }, - stroke: { - show: true, - curve: 'smooth', - // "smooth" / "straight" / "stepline" - lineCap: 'butt', - // round, butt , square - width: 2, - colors: undefined, - // array of colors - dashArray: 0 // single value or array of values - - }, - tooltip: { - enabled: true, - enabledOnSeries: undefined, - shared: true, - followCursor: false, - // when disabled, the tooltip will show on top of the series instead of mouse position - intersect: false, - // when enabled, tooltip will only show when user directly hovers over point - inverseOrder: false, - custom: undefined, - fillSeriesColor: false, - theme: 'light', - style: { - fontSize: '12px', - fontFamily: undefined - }, - onDatasetHover: { - highlightDataSeries: false - }, - x: { - // x value - show: true, - format: 'dd MMM', - // dd/MM, dd MMM yy, dd MMM yyyy - formatter: undefined // a custom user supplied formatter function - - }, - y: { - formatter: undefined, - title: { - formatter: function formatter(seriesName) { - return seriesName; - } - } - }, - z: { - formatter: undefined, - title: 'Size: ' - }, - marker: { - show: true - }, - items: { - display: 'flex' - }, - fixed: { - enabled: false, - position: 'topRight', - // topRight, topLeft, bottomRight, bottomLeft - offsetX: 0, - offsetY: 0 - } - }, - xaxis: { - type: 'category', - categories: [], - offsetX: 0, - offsetY: 0, - labels: { - show: true, - rotate: -45, - rotateAlways: false, - hideOverlappingLabels: true, - trim: true, - minHeight: undefined, - maxHeight: 120, - showDuplicates: true, - style: { - colors: [], - fontSize: '12px', - fontFamily: undefined, - cssClass: '' - }, - offsetX: 0, - offsetY: 0, - format: undefined, - formatter: undefined, - // custom formatter function which will override format - datetimeFormatter: { - year: 'yyyy', - month: "MMM 'yy", - day: 'dd MMM', - hour: 'HH:mm', - minute: 'HH:mm:ss' - } - }, - axisBorder: { - show: true, - color: '#78909C', - width: '100%', - height: 1, - offsetX: 0, - offsetY: 0 - }, - axisTicks: { - show: true, - color: '#78909C', - height: 6, - offsetX: 0, - offsetY: 0 - }, - tickAmount: undefined, - tickPlacement: 'on', - min: undefined, - max: undefined, - range: undefined, - floating: false, - position: 'bottom', - title: { - text: undefined, - offsetX: 0, - offsetY: 0, - style: { - color: undefined, - fontSize: '12px', - fontFamily: undefined, - cssClass: '' - } - }, - crosshairs: { - show: true, - width: 1, - // tickWidth/barWidth or an integer - position: 'back', - opacity: 0.9, - stroke: { - color: '#b6b6b6', - width: 1, - dashArray: 3 - }, - fill: { - type: 'solid', - // solid, gradient - color: '#B1B9C4', - gradient: { - colorFrom: '#D8E3F0', - colorTo: '#BED1E6', - stops: [0, 100], - opacityFrom: 0.4, - opacityTo: 0.5 - } - }, - dropShadow: { - enabled: false, - left: 0, - top: 0, - blur: 1, - opacity: 0.4 - } - }, - tooltip: { - enabled: true, - offsetY: 0, - formatter: undefined, - style: { - fontSize: '12px', - fontFamily: undefined - } - } - }, - yaxis: this.yAxis, - theme: { - mode: 'light', - palette: 'palette1', - // If defined, it will overwrite globals.colors variable - monochrome: { - // monochrome allows you to select just 1 color and fill out the rest with light/dark shade (intensity can be selected) - enabled: false, - color: '#008FFB', - shadeTo: 'light', - shadeIntensity: 0.65 - } - } - }; - } - }]); - - return Options; -}(); - -/** - * ApexCharts Annotations Class for drawing lines/rects on both xaxis and yaxis. - * - * @module Annotations - **/ - -var Annotations = -/*#__PURE__*/ -function () { - function Annotations(ctx) { - _classCallCheck(this, Annotations); - - this.ctx = ctx; - this.w = ctx.w; - this.graphics = new Graphics(this.ctx); - - if (this.w.globals.isBarHorizontal) { - this.invertAxis = true; - } - - this.xDivision = this.w.globals.gridWidth / this.w.globals.dataPoints; - } - - _createClass(Annotations, [{ - key: "drawAnnotations", - value: function drawAnnotations() { - var w = this.w; - - if (w.globals.axisCharts) { - var yAnnotations = this.drawYAxisAnnotations(); - var xAnnotations = this.drawXAxisAnnotations(); - var pointAnnotations = this.drawPointAnnotations(); - var initialAnim = w.config.chart.animations.enabled; - var annoArray = [yAnnotations, xAnnotations, pointAnnotations]; - var annoElArray = [xAnnotations.node, yAnnotations.node, pointAnnotations.node]; - - for (var i = 0; i < 3; i++) { - w.globals.dom.elGraphical.add(annoArray[i]); - - if (initialAnim && !w.globals.resized && !w.globals.dataChanged) { - annoElArray[i].classList.add('hidden'); - } - - w.globals.delayedElements.push({ - el: annoElArray[i], - index: 0 - }); - } // background sizes needs to be calculated after text is drawn, so calling them last - - - this.annotationsBackground(); - } - } - }, { - key: "addXaxisAnnotation", - value: function addXaxisAnnotation(anno, parent, index) { - var w = this.w; - var min = this.invertAxis ? w.globals.minY : w.globals.minX; - var range = this.invertAxis ? w.globals.yRange[0] : w.globals.xRange; - var x1 = (anno.x - min) / (range / w.globals.gridWidth); - var text = anno.label.text; - - if (w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) { - var catIndex = w.globals.labels.indexOf(anno.x); - var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - - if (xLabel) { - x1 = parseFloat(xLabel.getAttribute('x')); - } - } - - var strokeDashArray = anno.strokeDashArray; - if (x1 < 0 || x1 > w.globals.gridWidth) return; - - if (anno.x2 === null) { - var line = this.graphics.drawLine(x1 + anno.offsetX, // x1 - 0 + anno.offsetY, // y1 - x1 + anno.offsetX, // x2 - w.globals.gridHeight + anno.offsetY, // y2 - anno.borderColor, // lineColor - strokeDashArray //dashArray - ); - parent.appendChild(line.node); - } else { - var x2 = (anno.x2 - min) / (range / w.globals.gridWidth); - - if (x2 < x1) { - var temp = x1; - x1 = x2; - x2 = temp; - } - - if (text) { - var rect = this.graphics.drawRect(x1 + anno.offsetX, // x1 - 0 + anno.offsetY, // y1 - x2 - x1, // x2 - w.globals.gridHeight + anno.offsetY, // y2 - 0, // radius - anno.fillColor, // color - anno.opacity, // opacity, - 1, // strokeWidth - anno.borderColor, // strokeColor - strokeDashArray // stokeDashArray - ); - parent.appendChild(rect.node); - } - } - - var textY = anno.label.position === 'top' ? -3 : w.globals.gridHeight; - var elText = this.graphics.drawText({ - x: x1 + anno.label.offsetX, - y: textY + anno.label.offsetY, - text: text, - textAnchor: anno.label.textAnchor, - fontSize: anno.label.style.fontSize, - fontFamily: anno.label.style.fontFamily, - foreColor: anno.label.style.color, - cssClass: 'apexcharts-xaxis-annotation-label ' + anno.label.style.cssClass - }); - elText.attr({ - rel: index - }); - parent.appendChild(elText.node); // after placing the annotations on svg, set any vertically placed annotations - - this.setOrientations(anno, index); - } - }, { - key: "drawXAxisAnnotations", - value: function drawXAxisAnnotations() { - var _this = this; - - var w = this.w; - var elg = this.graphics.group({ - class: 'apexcharts-xaxis-annotations' - }); - w.config.annotations.xaxis.map(function (anno, index) { - _this.addXaxisAnnotation(anno, elg.node, index); - }); - return elg; - } - }, { - key: "addYaxisAnnotation", - value: function addYaxisAnnotation(anno, parent, index) { - var w = this.w; - var strokeDashArray = anno.strokeDashArray; - var y1; - var y2; - - if (this.invertAxis) { - var catIndex = w.globals.labels.indexOf(anno.y); - var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - - if (xLabel) { - y1 = parseFloat(xLabel.getAttribute('y')); - } - } else { - y1 = w.globals.gridHeight - (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - - if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { - y1 = (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - } - } - - var text = anno.label.text; - - if (anno.y2 === null) { - var line = this.graphics.drawLine(0 + anno.offsetX, // x1 - y1 + anno.offsetY, // y1 - w.globals.gridWidth + anno.offsetX, // x2 - y1 + anno.offsetY, // y2 - anno.borderColor, // lineColor - strokeDashArray // dashArray - ); - parent.appendChild(line.node); - } else { - if (this.invertAxis) { - var _catIndex = w.globals.labels.indexOf(anno.y2); - - var _xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (_catIndex + 1) + ')'); - - if (_xLabel) { - y2 = parseFloat(_xLabel.getAttribute('y')); - } - } else { - y2 = w.globals.gridHeight - (anno.y2 - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - - if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { - y2 = (anno.y2 - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - } - } - - if (y2 > y1) { - var temp = y1; - y1 = y2; - y2 = temp; - } - - if (text) { - var rect = this.graphics.drawRect(0 + anno.offsetX, // x1 - y2 + anno.offsetY, // y1 - w.globals.gridWidth + anno.offsetX, // x2 - y1 - y2, // y2 - 0, // radius - anno.fillColor, // color - anno.opacity, // opacity, - 1, // strokeWidth - anno.borderColor, // strokeColor - strokeDashArray // stokeDashArray - ); - parent.appendChild(rect.node); - } - } - - var textX = anno.label.position === 'right' ? w.globals.gridWidth : 0; - var elText = this.graphics.drawText({ - x: textX + anno.label.offsetX, - y: (y2 || y1) + anno.label.offsetY - 3, - text: text, - textAnchor: anno.label.textAnchor, - fontSize: anno.label.style.fontSize, - fontFamily: anno.label.style.fontFamily, - foreColor: anno.label.style.color, - cssClass: 'apexcharts-yaxis-annotation-label ' + anno.label.style.cssClass - }); - elText.attr({ - rel: index - }); - parent.appendChild(elText.node); - } - }, { - key: "drawYAxisAnnotations", - value: function drawYAxisAnnotations() { - var _this2 = this; - - var w = this.w; - var elg = this.graphics.group({ - class: 'apexcharts-yaxis-annotations' - }); - w.config.annotations.yaxis.map(function (anno, index) { - _this2.addYaxisAnnotation(anno, elg.node, index); - }); - return elg; - } - }, { - key: "clearAnnotations", - value: function clearAnnotations(ctx) { - var w = ctx.w; - var annos = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations'); - annos = Utils.listToArray(annos); - annos.forEach(function (a) { - while (a.firstChild) { - a.removeChild(a.firstChild); - } - }); - } - }, { - key: "addPointAnnotation", - value: function addPointAnnotation(anno, parent, index) { - var w = this.w; - var x = 0; - var y = 0; - var pointY = 0; - - if (this.invertAxis) { - console.warn('Point annotation is not supported in horizontal bar charts.'); - } - - if (typeof anno.x === 'string') { - var catIndex = w.globals.labels.indexOf(anno.x); - var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - var xPos = parseFloat(xLabel.getAttribute('x')); - x = xPos; - var annoY = anno.y; - - if (anno.y === null) { - annoY = w.globals.series[anno.seriesIndex][catIndex]; - } - - y = w.globals.gridHeight - (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; - pointY = w.globals.gridHeight - (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - - if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { - y = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) + parseInt(anno.label.style.fontSize) + anno.marker.size; - pointY = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - } - } else { - x = (anno.x - w.globals.minX) / (w.globals.xRange / w.globals.gridWidth); - y = w.globals.gridHeight - (parseFloat(anno.y) - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; - pointY = w.globals.gridHeight - (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - - if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { - y = (parseFloat(anno.y) - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; - pointY = (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - } - } - - if (x < 0 || x > w.globals.gridWidth) return; - var optsPoints = { - pSize: anno.marker.size, - pWidth: anno.marker.strokeWidth, - pointFillColor: anno.marker.fillColor, - pointStrokeColor: anno.marker.strokeColor, - shape: anno.marker.shape, - radius: anno.marker.radius, - class: 'apexcharts-point-annotation-marker ' + anno.marker.cssClass - }; - var point = this.graphics.drawMarker(x + anno.marker.offsetX, pointY + anno.marker.offsetY, optsPoints); - parent.appendChild(point.node); - var text = anno.label.text ? anno.label.text : ''; - var elText = this.graphics.drawText({ - x: x + anno.label.offsetX, - y: y + anno.label.offsetY, - text: text, - textAnchor: anno.label.textAnchor, - fontSize: anno.label.style.fontSize, - fontFamily: anno.label.style.fontFamily, - foreColor: anno.label.style.color, - cssClass: 'apexcharts-point-annotation-label ' + anno.label.style.cssClass - }); - elText.attr({ - rel: index - }); - parent.appendChild(elText.node); - - if (anno.customSVG.SVG) { - var g = this.graphics.group({ - class: 'apexcharts-point-annotations-custom-svg ' + anno.customSVG.cssClass - }); - g.attr({ - transform: "translate(".concat(x + anno.customSVG.offsetX, ", ").concat(y + anno.customSVG.offsetY, ")") - }); - g.node.innerHTML = anno.customSVG.SVG; - parent.appendChild(g.node); - } - } - }, { - key: "drawPointAnnotations", - value: function drawPointAnnotations() { - var _this3 = this; - - var w = this.w; - var elg = this.graphics.group({ - class: 'apexcharts-point-annotations' - }); - w.config.annotations.points.map(function (anno, index) { - _this3.addPointAnnotation(anno, elg.node, index); - }); - return elg; - } - }, { - key: "setOrientations", - value: function setOrientations(anno) { - var annoIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var w = this.w; - - if (anno.label.orientation === 'vertical') { - var i = annoIndex !== null ? annoIndex : 0; - var xAnno = w.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(i, "']")); - - if (xAnno !== null) { - var xAnnoCoord = xAnno.getBoundingClientRect(); - xAnno.setAttribute('x', parseFloat(xAnno.getAttribute('x')) - xAnnoCoord.height + 4); - - if (anno.label.position === 'top') { - xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) + xAnnoCoord.width); - } else { - xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) - xAnnoCoord.width); - } - - var annoRotatingCenter = this.graphics.rotateAroundCenter(xAnno); - var x = annoRotatingCenter.x; - var y = annoRotatingCenter.y; - xAnno.setAttribute('transform', "rotate(-90 ".concat(x, " ").concat(y, ")")); - } - } - } - }, { - key: "addBackgroundToAnno", - value: function addBackgroundToAnno(annoEl, anno) { - var w = this.w; - if (!anno.label.text) return null; - var elGridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid').getBoundingClientRect(); - var coords = annoEl.getBoundingClientRect(); - var pleft = anno.label.style.padding.left; - var pright = anno.label.style.padding.right; - var ptop = anno.label.style.padding.top; - var pbottom = anno.label.style.padding.bottom; - - if (anno.label.orientation === 'vertical') { - ptop = anno.label.style.padding.left; - pbottom = anno.label.style.padding.right; - pleft = anno.label.style.padding.top; - pright = anno.label.style.padding.bottom; - } - - var x1 = coords.left - elGridRect.left - pleft; - var y1 = coords.top - elGridRect.top - ptop; - var elRect = this.graphics.drawRect(x1, y1, coords.width + pleft + pright, coords.height + ptop + pbottom, 0, anno.label.style.background, 1, anno.label.borderWidth, anno.label.borderColor, 0); - return elRect; - } - }, { - key: "annotationsBackground", - value: function annotationsBackground() { - var _this4 = this; - - var w = this.w; - - var add = function add(anno, i, type) { - var annoLabel = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations .apexcharts-").concat(type, "-annotation-label[rel='").concat(i, "']")); - - if (annoLabel) { - var parent = annoLabel.parentNode; - - var elRect = _this4.addBackgroundToAnno(annoLabel, anno); - - if (elRect) { - parent.insertBefore(elRect.node, annoLabel); - } - } - }; - - w.config.annotations.xaxis.map(function (anno, i) { - add(anno, i, 'xaxis'); - }); - w.config.annotations.yaxis.map(function (anno, i) { - add(anno, i, 'yaxis'); - }); - w.config.annotations.points.map(function (anno, i) { - add(anno, i, 'point'); - }); - } - }, { - key: "addText", - value: function addText(params, pushToMemory, context) { - var x = params.x, - y = params.y, - text = params.text, - textAnchor = params.textAnchor, - _params$appendTo = params.appendTo, - appendTo = _params$appendTo === void 0 ? '.apexcharts-inner' : _params$appendTo, - foreColor = params.foreColor, - fontSize = params.fontSize, - fontFamily = params.fontFamily, - cssClass = params.cssClass, - backgroundColor = params.backgroundColor, - borderWidth = params.borderWidth, - strokeDashArray = params.strokeDashArray, - radius = params.radius, - borderColor = params.borderColor, - _params$paddingLeft = params.paddingLeft, - paddingLeft = _params$paddingLeft === void 0 ? 4 : _params$paddingLeft, - _params$paddingRight = params.paddingRight, - paddingRight = _params$paddingRight === void 0 ? 4 : _params$paddingRight, - _params$paddingBottom = params.paddingBottom, - paddingBottom = _params$paddingBottom === void 0 ? 2 : _params$paddingBottom, - _params$paddingTop = params.paddingTop, - paddingTop = _params$paddingTop === void 0 ? 2 : _params$paddingTop; - var me = context; - var w = me.w; - var parentNode = w.globals.dom.baseEl.querySelector(appendTo); - var elText = this.graphics.drawText({ - x: x, - y: y, - text: text, - textAnchor: textAnchor || 'start', - fontSize: fontSize || '12px', - fontFamily: fontFamily || w.config.chart.fontFamily, - foreColor: foreColor || w.config.chart.foreColor, - cssClass: 'apexcharts-text ' + cssClass ? cssClass : '' - }); - parentNode.appendChild(elText.node); - var textRect = elText.bbox(); - - if (text) { - var elRect = this.graphics.drawRect(textRect.x - paddingLeft, textRect.y - paddingTop, textRect.width + paddingLeft + paddingRight, textRect.height + paddingBottom + paddingTop, radius, backgroundColor, 1, borderWidth, borderColor, strokeDashArray); - elText.before(elRect); - } - - if (pushToMemory) { - w.globals.memory.methodsToExec.push({ - context: me, - method: me.addText, - params: { - x: x, - y: y, - text: text, - textAnchor: textAnchor, - appendTo: appendTo, - foreColor: foreColor, - fontSize: fontSize, - cssClass: cssClass, - backgroundColor: backgroundColor, - borderWidth: borderWidth, - strokeDashArray: strokeDashArray, - radius: radius, - borderColor: borderColor, - paddingLeft: paddingLeft, - paddingRight: paddingRight, - paddingBottom: paddingBottom, - paddingTop: paddingTop - } - }); - } - - return context; - } - }, { - key: "addPointAnnotationExternal", - value: function addPointAnnotationExternal(params, pushToMemory, context) { - if (typeof this.invertAxis === 'undefined') { - this.invertAxis = context.w.globals.isBarHorizontal; - } - - this.addAnnotationExternal({ - params: params, - pushToMemory: pushToMemory, - context: context, - type: 'point', - contextMethod: context.addPointAnnotation - }); - return context; - } - }, { - key: "addYaxisAnnotationExternal", - value: function addYaxisAnnotationExternal(params, pushToMemory, context) { - this.addAnnotationExternal({ - params: params, - pushToMemory: pushToMemory, - context: context, - type: 'yaxis', - contextMethod: context.addYaxisAnnotation - }); - return context; - } // The addXaxisAnnotation method requires a parent class, and user calling this method externally on the chart instance may not specify parent, hence a different method - - }, { - key: "addXaxisAnnotationExternal", - value: function addXaxisAnnotationExternal(params, pushToMemory, context) { - this.addAnnotationExternal({ - params: params, - pushToMemory: pushToMemory, - context: context, - type: 'xaxis', - contextMethod: context.addXaxisAnnotation - }); - return context; - } - }, { - key: "addAnnotationExternal", - value: function addAnnotationExternal(_ref) { - var params = _ref.params, - pushToMemory = _ref.pushToMemory, - context = _ref.context, - type = _ref.type, - contextMethod = _ref.contextMethod; - var me = context; - var w = me.w; - var parent = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations")); - var index = parent.childNodes.length + 1; - var opt = new Options(); - var axesAnno = Object.assign({}, type === 'xaxis' ? opt.xAxisAnnotation : type === 'yaxis' ? opt.yAxisAnnotation : opt.pointAnnotation); - var anno = Utils.extend(axesAnno, params); - - switch (type) { - case 'xaxis': - this.addXaxisAnnotation(anno, parent, index); - break; - - case 'yaxis': - this.addYaxisAnnotation(anno, parent, index); - break; - - case 'point': - this.addPointAnnotation(anno, parent, index); - break; - } // add background - - - var axesAnnoLabel = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations .apexcharts-").concat(type, "-annotation-label[rel='").concat(index, "']")); - var elRect = this.addBackgroundToAnno(axesAnnoLabel, anno); - - if (elRect) { - parent.insertBefore(elRect.node, axesAnnoLabel); - } - - if (pushToMemory) { - w.globals.memory.methodsToExec.push({ - context: me, - method: contextMethod, - params: params - }); - } - - return context; - } - }]); - - return Annotations; -}(); - -/** - * DateTime Class to manipulate datetime values. - * - * @module DateTime - **/ - -var DateTime = -/*#__PURE__*/ -function () { - function DateTime(ctx) { - _classCallCheck(this, DateTime); - - this.ctx = ctx; - this.w = ctx.w; - this.months31 = [1, 3, 5, 7, 8, 10, 12]; - this.months30 = [2, 4, 6, 9, 11]; - this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; - } - - _createClass(DateTime, [{ - key: "isValidDate", - value: function isValidDate(date) { - return !isNaN(this.parseDate(date)); - } - }, { - key: "getUTCTimeStamp", - value: function getUTCTimeStamp(dateStr) { - if (!Date.parse(dateStr)) { - return dateStr; - } - - return new Date(new Date(dateStr).toISOString().substr(0, 25)).getTime(); - } - }, { - key: "parseDate", - value: function parseDate(dateStr) { - var parsed = Date.parse(dateStr); - - if (!isNaN(parsed)) { - return this.getUTCTimeStamp(dateStr); - } - - var output = Date.parse(dateStr.replace(/-/g, '/').replace(/[a-z]+/gi, ' ')); - output = this.getUTCTimeStamp(output); - return output; - } // https://stackoverflow.com/a/11252167/6495043 - - }, { - key: "treatAsUtc", - value: function treatAsUtc(dateStr) { - var result = new Date(dateStr); - result.setMinutes(result.getMinutes() - result.getTimezoneOffset()); - return result; - } // http://stackoverflow.com/questions/14638018/current-time-formatting-with-javascript#answer-14638191 - - }, { - key: "formatDate", - value: function formatDate(date, format) { - var utc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var convertToUTC = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; - var locale = this.w.globals.locale; - var MMMM = ['\x00'].concat(_toConsumableArray(locale.months)); - var MMM = ['\x01'].concat(_toConsumableArray(locale.shortMonths)); - var dddd = ['\x02'].concat(_toConsumableArray(locale.days)); - var ddd = ['\x03'].concat(_toConsumableArray(locale.shortDays)); - - function ii(i, len) { - var s = i + ''; - len = len || 2; - - while (s.length < len) { - s = '0' + s; - } - - return s; - } - - if (convertToUTC) { - date = this.treatAsUtc(date); - } - - var y = utc ? date.getUTCFullYear() : date.getFullYear(); - format = format.replace(/(^|[^\\])yyyy+/g, '$1' + y); - format = format.replace(/(^|[^\\])yy/g, '$1' + y.toString().substr(2, 2)); - format = format.replace(/(^|[^\\])y/g, '$1' + y); - var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1; - format = format.replace(/(^|[^\\])MMMM+/g, '$1' + MMMM[0]); - format = format.replace(/(^|[^\\])MMM/g, '$1' + MMM[0]); - format = format.replace(/(^|[^\\])MM/g, '$1' + ii(M)); - format = format.replace(/(^|[^\\])M/g, '$1' + M); - var d = utc ? date.getUTCDate() : date.getDate(); - format = format.replace(/(^|[^\\])dddd+/g, '$1' + dddd[0]); - format = format.replace(/(^|[^\\])ddd/g, '$1' + ddd[0]); - format = format.replace(/(^|[^\\])dd/g, '$1' + ii(d)); - format = format.replace(/(^|[^\\])d/g, '$1' + d); - var H = utc ? date.getUTCHours() : date.getHours(); - format = format.replace(/(^|[^\\])HH+/g, '$1' + ii(H)); - format = format.replace(/(^|[^\\])H/g, '$1' + H); - var h = H > 12 ? H - 12 : H === 0 ? 12 : H; - format = format.replace(/(^|[^\\])hh+/g, '$1' + ii(h)); - format = format.replace(/(^|[^\\])h/g, '$1' + h); - var m = utc ? date.getUTCMinutes() : date.getMinutes(); - format = format.replace(/(^|[^\\])mm+/g, '$1' + ii(m)); - format = format.replace(/(^|[^\\])m/g, '$1' + m); - var s = utc ? date.getUTCSeconds() : date.getSeconds(); - format = format.replace(/(^|[^\\])ss+/g, '$1' + ii(s)); - format = format.replace(/(^|[^\\])s/g, '$1' + s); - var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds(); - format = format.replace(/(^|[^\\])fff+/g, '$1' + ii(f, 3)); - f = Math.round(f / 10); - format = format.replace(/(^|[^\\])ff/g, '$1' + ii(f)); - f = Math.round(f / 10); - format = format.replace(/(^|[^\\])f/g, '$1' + f); - var T = H < 12 ? 'AM' : 'PM'; - format = format.replace(/(^|[^\\])TT+/g, '$1' + T); - format = format.replace(/(^|[^\\])T/g, '$1' + T.charAt(0)); - var t = T.toLowerCase(); - format = format.replace(/(^|[^\\])tt+/g, '$1' + t); - format = format.replace(/(^|[^\\])t/g, '$1' + t.charAt(0)); - var tz = -date.getTimezoneOffset(); - var K = utc || !tz ? 'Z' : tz > 0 ? '+' : '-'; - - if (!utc) { - tz = Math.abs(tz); - var tzHrs = Math.floor(tz / 60); - var tzMin = tz % 60; - K += ii(tzHrs) + ':' + ii(tzMin); - } - - format = format.replace(/(^|[^\\])K/g, '$1' + K); - var day = (utc ? date.getUTCDay() : date.getDay()) + 1; - format = format.replace(new RegExp(dddd[0], 'g'), dddd[day]); - format = format.replace(new RegExp(ddd[0], 'g'), ddd[day]); - format = format.replace(new RegExp(MMMM[0], 'g'), MMMM[M]); - format = format.replace(new RegExp(MMM[0], 'g'), MMM[M]); - format = format.replace(/\\(.)/g, '$1'); - return format; - } - }, { - key: "getTimeUnitsfromTimestamp", - value: function getTimeUnitsfromTimestamp(minX, maxX) { - var w = this.w; - - if (w.config.xaxis.min !== undefined) { - minX = w.config.xaxis.min; - } - - if (w.config.xaxis.max !== undefined) { - maxX = w.config.xaxis.max; - } - - var minYear = new Date(minX).getFullYear(); - var maxYear = new Date(maxX).getFullYear(); - var minMonth = new Date(minX).getMonth(); - var maxMonth = new Date(maxX).getMonth(); - var minDate = new Date(minX).getDate(); - var maxDate = new Date(maxX).getDate(); - var minHour = new Date(minX).getHours(); - var maxHour = new Date(maxX).getHours(); - var minMinute = new Date(minX).getMinutes(); - var maxMinute = new Date(maxX).getMinutes(); - return { - minMinute: minMinute, - maxMinute: maxMinute, - minHour: minHour, - maxHour: maxHour, - minDate: minDate, - maxDate: maxDate, - minMonth: minMonth, - maxMonth: maxMonth, - minYear: minYear, - maxYear: maxYear - }; - } - }, { - key: "isLeapYear", - value: function isLeapYear(year) { - return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; - } - }, { - key: "calculcateLastDaysOfMonth", - value: function calculcateLastDaysOfMonth(month, year, subtract) { - var days = this.determineDaysOfMonths(month, year); // whatever days we get, subtract the number of days asked - - return days - subtract; - } - }, { - key: "determineDaysOfYear", - value: function determineDaysOfYear(year) { - var days = 365; - - if (this.isLeapYear(year)) { - days = 366; - } - - return days; - } - }, { - key: "determineRemainingDaysOfYear", - value: function determineRemainingDaysOfYear(year, month, date) { - var dayOfYear = this.daysCntOfYear[month] + date; - if (month > 1 && this.isLeapYear()) dayOfYear++; - return dayOfYear; - } - }, { - key: "determineDaysOfMonths", - value: function determineDaysOfMonths(month, year) { - var days = 30; - month = Utils.monthMod(month); - - switch (true) { - case this.months30.indexOf(month) > -1: - if (month === 2) { - if (this.isLeapYear(year)) { - days = 29; - } else { - days = 28; - } - } - - break; - - case this.months31.indexOf(month) > -1: - days = 31; - break; - - default: - days = 31; - break; - } - - return days; - } - }]); - - return DateTime; -}(); - -/** - * ApexCharts Default Class for setting default options for all chart types. - * - * @module Defaults - **/ - -var Defaults = -/*#__PURE__*/ -function () { - function Defaults(opts) { - _classCallCheck(this, Defaults); - - this.opts = opts; - } - - _createClass(Defaults, [{ - key: "line", - value: function line() { - return { - chart: { - animations: { - easing: 'swing' - } - }, - dataLabels: { - enabled: false - }, - stroke: { - width: 5, - curve: 'straight' - }, - markers: { - size: 0, - hover: { - sizeOffset: 6 - } - }, - xaxis: { - crosshairs: { - width: 1 - } - } - }; - } - }, { - key: "sparkline", - value: function sparkline(defaults) { - this.opts.yaxis[0].labels.show = false; - this.opts.yaxis[0].floating = true; - var ret = { - grid: { - show: false, - padding: { - left: 0, - right: 0, - top: 0, - bottom: 0 - } - }, - legend: { - show: false - }, - xaxis: { - labels: { - show: false - }, - tooltip: { - enabled: false - }, - axisBorder: { - show: false - } - }, - chart: { - toolbar: { - show: false - }, - zoom: { - enabled: false - } - }, - dataLabels: { - enabled: false - } - }; - return Utils.extend(defaults, ret); - } - }, { - key: "bar", - value: function bar() { - return { - chart: { - stacked: false, - animations: { - easing: 'swing' - } - }, - plotOptions: { - bar: { - dataLabels: { - position: 'center' - } - } - }, - dataLabels: { - style: { - colors: ['#fff'] - } - }, - stroke: { - width: 0 - }, - fill: { - opacity: 0.85 - }, - legend: { - markers: { - shape: 'square', - radius: 2, - size: 8 - } - }, - tooltip: { - shared: false - }, - xaxis: { - tooltip: { - enabled: false - }, - crosshairs: { - width: 'barWidth', - position: 'back', - fill: { - type: 'gradient' - }, - dropShadow: { - enabled: false - }, - stroke: { - width: 0 - } - } - } - }; - } - }, { - key: "candlestick", - value: function candlestick() { - return { - stroke: { - width: 1, - colors: ['#333'] - }, - dataLabels: { - enabled: false - }, - tooltip: { - shared: true, - custom: function custom(_ref) { - var seriesIndex = _ref.seriesIndex, - dataPointIndex = _ref.dataPointIndex, - w = _ref.w; - var o = w.globals.seriesCandleO[seriesIndex][dataPointIndex]; - var h = w.globals.seriesCandleH[seriesIndex][dataPointIndex]; - var l = w.globals.seriesCandleL[seriesIndex][dataPointIndex]; - var c = w.globals.seriesCandleC[seriesIndex][dataPointIndex]; - return '
' + '
Open: ' + o + '
' + '
High: ' + h + '
' + '
Low: ' + l + '
' + '
Close: ' + c + '
' + '
'; - } - }, - states: { - active: { - filter: { - type: 'none' - } - } - }, - xaxis: { - crosshairs: { - width: 1 - } - } - }; - } - }, { - key: "rangeBar", - value: function rangeBar() { - return { - stroke: { - width: 0 - }, - plotOptions: { - bar: { - dataLabels: { - position: 'center' - } - } - }, - dataLabels: { - enabled: false, - formatter: function formatter(val, _ref2) { - var ctx = _ref2.ctx, - seriesIndex = _ref2.seriesIndex, - dataPointIndex = _ref2.dataPointIndex, - w = _ref2.w; - var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex]; - var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex]; - return end - start; - }, - style: { - colors: ['#fff'] - } - }, - tooltip: { - shared: false, - followCursor: true, - custom: function custom(_ref3) { - var ctx = _ref3.ctx, - seriesIndex = _ref3.seriesIndex, - dataPointIndex = _ref3.dataPointIndex, - w = _ref3.w; - var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex]; - var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex]; - var startVal = ''; - var endVal = ''; - var color = w.globals.colors[seriesIndex]; - - if (w.config.tooltip.x.formatter === undefined) { - if (w.config.xaxis.type === 'datetime') { - var datetimeObj = new DateTime(ctx); - startVal = datetimeObj.formatDate(new Date(start), w.config.tooltip.x.format, true, true); - endVal = datetimeObj.formatDate(new Date(end), w.config.tooltip.x.format, true, true); - } else { - startVal = start; - endVal = end; - } - } else { - startVal = w.config.tooltip.x.formatter(start); - endVal = w.config.tooltip.x.formatter(end); - } - - var ylabel = w.globals.labels[dataPointIndex]; - return '
' + '
' + (w.config.series[seriesIndex].name ? w.config.series[seriesIndex].name : '') + '
' + '
' + ylabel + ': ' + startVal + ' - ' + endVal + '
' + '
'; - } - }, - xaxis: { - tooltip: { - enabled: false - }, - crosshairs: { - stroke: { - width: 0 - } - } - } - }; - } - }, { - key: "area", - value: function area() { - return { - stroke: { - width: 4 - }, - fill: { - type: 'gradient', - gradient: { - inverseColors: false, - shade: 'light', - type: 'vertical', - opacityFrom: 0.65, - opacityTo: 0.5, - stops: [0, 100, 100] - } - }, - markers: { - size: 0, - hover: { - sizeOffset: 6 - } - }, - tooltip: { - followCursor: false - } - }; - } - }, { - key: "brush", - value: function brush(defaults) { - var ret = { - chart: { - toolbar: { - autoSelected: 'selection', - show: false - }, - zoom: { - enabled: false - } - }, - dataLabels: { - enabled: false - }, - stroke: { - width: 1 - }, - tooltip: { - enabled: false - }, - xaxis: { - tooltip: { - enabled: false - } - } - }; - return Utils.extend(defaults, ret); - } - }, { - key: "stacked100", - value: function stacked100() { - var _this = this; - - this.opts.dataLabels = this.opts.dataLabels || {}; - this.opts.dataLabels.formatter = this.opts.dataLabels.formatter || undefined; - var existingDataLabelFormatter = this.opts.dataLabels.formatter; - this.opts.yaxis.forEach(function (yaxe, index) { - _this.opts.yaxis[index].min = 0; - _this.opts.yaxis[index].max = 100; - }); - var isBar = this.opts.chart.type === 'bar'; - - if (isBar) { - this.opts.dataLabels.formatter = existingDataLabelFormatter || function (val) { - if (typeof val === 'number') { - return val ? val.toFixed(0) + '%' : val; - } - - return val; - }; - } - } // This function removes the left and right spacing in chart for line/area/scatter if xaxis type = category for those charts by converting xaxis = numeric. Numeric/Datetime xaxis prevents the unnecessary spacing in the left/right of the chart area - - }, { - key: "bubble", - value: function bubble() { - return { - dataLabels: { - style: { - colors: ['#fff'] - } - }, - tooltip: { - shared: false, - intersect: true - }, - xaxis: { - crosshairs: { - width: 0 - } - }, - fill: { - type: 'solid', - gradient: { - shade: 'light', - inverse: true, - shadeIntensity: 0.55, - opacityFrom: 0.4, - opacityTo: 0.8 - } - } - }; - } - }, { - key: "scatter", - value: function scatter() { - return { - dataLabels: { - enabled: false - }, - tooltip: { - shared: false, - intersect: true - }, - markers: { - size: 6, - strokeWidth: 2, - hover: { - sizeOffset: 2 - } - } - }; - } - }, { - key: "heatmap", - value: function heatmap() { - return { - chart: { - stacked: false, - zoom: { - enabled: false - } - }, - fill: { - opacity: 1 - }, - dataLabels: { - style: { - colors: ['#fff'] - } - }, - stroke: { - colors: ['#fff'] - }, - tooltip: { - followCursor: true, - marker: { - show: false - }, - x: { - show: false - } - }, - legend: { - position: 'top', - markers: { - shape: 'square', - size: 10, - offsetY: 2 - } - }, - grid: { - padding: { - right: 20 - } - } - }; - } - }, { - key: "pie", - value: function pie() { - return { - chart: { - toolbar: { - show: false - } - }, - plotOptions: { - pie: { - donut: { - labels: { - show: false - } - } - } - }, - dataLabels: { - formatter: function formatter(val) { - return val.toFixed(1) + '%'; - }, - style: { - colors: ['#fff'] - }, - dropShadow: { - enabled: true - } - }, - stroke: { - colors: ['#fff'] - }, - fill: { - opacity: 1, - gradient: { - shade: 'dark', - shadeIntensity: 0.35, - inverseColors: false, - stops: [0, 100, 100] - } - }, - padding: { - right: 0, - left: 0 - }, - tooltip: { - theme: 'dark', - fillSeriesColor: true - }, - legend: { - position: 'right' - } - }; - } - }, { - key: "donut", - value: function donut() { - return { - chart: { - toolbar: { - show: false - } - }, - dataLabels: { - formatter: function formatter(val) { - return val.toFixed(1) + '%'; - }, - style: { - colors: ['#fff'] - }, - dropShadow: { - enabled: true - } - }, - stroke: { - colors: ['#fff'] - }, - fill: { - opacity: 1, - gradient: { - shade: 'dark', - shadeIntensity: 0.4, - inverseColors: false, - type: 'vertical', - opacityFrom: 1, - opacityTo: 1, - stops: [70, 98, 100] - } - }, - padding: { - right: 0, - left: 0 - }, - tooltip: { - theme: 'dark', - fillSeriesColor: true - }, - legend: { - position: 'right' - } - }; - } - }, { - key: "radar", - value: function radar() { - this.opts.yaxis[0].labels.style.fontSize = '13px'; - this.opts.yaxis[0].labels.offsetY = 6; - return { - dataLabels: { - enabled: true, - style: { - colors: ['#a8a8a8'], - fontSize: '11px' - } - }, - stroke: { - width: 2 - }, - markers: { - size: 3, - strokeWidth: 1, - strokeOpacity: 1 - }, - fill: { - opacity: 0.2 - }, - tooltip: { - shared: false, - intersect: true, - followCursor: true - }, - grid: { - show: false - }, - xaxis: { - tooltip: { - enabled: false - }, - crosshairs: { - show: false - } - } - }; - } - }, { - key: "radialBar", - value: function radialBar() { - return { - chart: { - animations: { - dynamicAnimation: { - enabled: true, - speed: 800 - } - }, - toolbar: { - show: false - } - }, - fill: { - gradient: { - shade: 'dark', - shadeIntensity: 0.4, - inverseColors: false, - type: 'diagonal2', - opacityFrom: 1, - opacityTo: 1, - stops: [70, 98, 100] - } - }, - padding: { - right: 0, - left: 0 - }, - legend: { - show: false, - position: 'right' - }, - tooltip: { - enabled: false, - fillSeriesColor: true - } - }; - } - }], [{ - key: "convertCatToNumeric", - value: function convertCatToNumeric(opts) { - opts.xaxis.type = 'numeric'; - opts.xaxis.convertedCatToNumeric = true; - opts.xaxis.labels = opts.xaxis.labels || {}; - - opts.xaxis.labels.formatter = opts.xaxis.labels.formatter || function (val) { - return val; - }; - - opts.chart = opts.chart || {}; - opts.chart.zoom = opts.chart.zoom || window.Apex.chart && window.Apex.chart.zoom || {}; - var defaultFormatter = opts.xaxis.labels.formatter; - var labels = opts.xaxis.categories && opts.xaxis.categories.length ? opts.xaxis.categories : opts.labels; - - if (labels && labels.length) { - opts.xaxis.labels.formatter = function (val) { - return defaultFormatter(labels[val - 1]); - }; - } - - opts.xaxis.categories = []; - opts.labels = []; - opts.chart.zoom.enabled = opts.chart.zoom.enabled || false; - return opts; - } - }]); - - return Defaults; -}(); - -/* - ** Util functions which are dependent on ApexCharts instance - */ -var CoreUtils = -/*#__PURE__*/ -function () { - function CoreUtils(ctx) { - _classCallCheck(this, CoreUtils); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(CoreUtils, [{ - key: "getStackedSeriesTotals", - - /** - * @memberof CoreUtils - * returns the sum of all individual values in a multiple stacked series - * Eg. w.globals.series = [[32,33,43,12], [2,3,5,1]] - * @return [34,36,48,13] - **/ - value: function getStackedSeriesTotals() { - var w = this.w; - var total = []; - - for (var i = 0; i < w.globals.series[w.globals.maxValsInArrayIndex].length; i++) { - var t = 0; - - for (var j = 0; j < w.globals.series.length; j++) { - t += w.globals.series[j][i]; - } - - total.push(t); - } - - w.globals.stackedSeriesTotals = total; - return total; - } // get total of the all values inside all series - - }, { - key: "getSeriesTotalByIndex", - value: function getSeriesTotalByIndex() { - var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - - if (index === null) { - // non-plot chart types - pie / donut / circle - return this.w.config.series.reduce(function (acc, cur) { - return acc + cur; - }, 0); - } else { - // axis charts - supporting multiple series - return this.w.globals.series[index].reduce(function (acc, cur) { - return acc + cur; - }, 0); - } - } - }, { - key: "isSeriesNull", - value: function isSeriesNull() { - var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var r = []; - - if (index === null) { - // non-plot chart types - pie / donut / circle - r = this.w.config.series.filter(function (d) { - return d !== null; - }); - } else { - // axis charts - supporting multiple series - r = this.w.globals.series[index].filter(function (d) { - return d !== null; - }); - } - - return r.length === 0; - } - }, { - key: "seriesHaveSameValues", - value: function seriesHaveSameValues(index) { - return this.w.globals.series[index].every(function (val, i, arr) { - return val === arr[0]; - }); - } // maxValsInArrayIndex is the index of series[] which has the largest number of items - - }, { - key: "getLargestSeries", - value: function getLargestSeries() { - var w = this.w; - w.globals.maxValsInArrayIndex = w.globals.series.map(function (a) { - return a.length; - }).indexOf(Math.max.apply(Math, w.globals.series.map(function (a) { - return a.length; - }))); - } - }, { - key: "getLargestMarkerSize", - value: function getLargestMarkerSize() { - var w = this.w; - var size = 0; - w.globals.markers.size.forEach(function (m) { - size = Math.max(size, m); - }); - w.globals.markers.largestSize = size; - return size; - } - /** - * @memberof Core - * returns the sum of all values in a series - * Eg. w.globals.series = [[32,33,43,12], [2,3,5,1]] - * @return [120, 11] - **/ - - }, { - key: "getSeriesTotals", - value: function getSeriesTotals() { - var w = this.w; - w.globals.seriesTotals = w.globals.series.map(function (ser, index) { - var total = 0; - - if (Array.isArray(ser)) { - for (var j = 0; j < ser.length; j++) { - total += ser[j]; - } - } else { - // for pie/donuts/gauges - total += ser; - } - - return total; - }); - } - }, { - key: "getSeriesTotalsXRange", - value: function getSeriesTotalsXRange(minX, maxX) { - var w = this.w; - var seriesTotalsXRange = w.globals.series.map(function (ser, index) { - var total = 0; - - for (var j = 0; j < ser.length; j++) { - if (w.globals.seriesX[index][j] > minX && w.globals.seriesX[index][j] < maxX) { - total += ser[j]; - } - } - - return total; - }); - return seriesTotalsXRange; - } - /** - * @memberof CoreUtils - * returns the percentage value of all individual values which can be used in a 100% stacked series - * Eg. w.globals.series = [[32, 33, 43, 12], [2, 3, 5, 1]] - * @return [[94.11, 91.66, 89.58, 92.30], [5.88, 8.33, 10.41, 7.7]] - **/ - - }, { - key: "getPercentSeries", - value: function getPercentSeries() { - var w = this.w; - w.globals.seriesPercent = w.globals.series.map(function (ser, index) { - var seriesPercent = []; - - if (Array.isArray(ser)) { - for (var j = 0; j < ser.length; j++) { - var total = w.globals.stackedSeriesTotals[j]; - var percent = 100 * ser[j] / total; - seriesPercent.push(percent); - } - } else { - var _total = w.globals.seriesTotals.reduce(function (acc, val) { - return acc + val; - }, 0); - - var _percent = 100 * ser / _total; - - seriesPercent.push(_percent); - } - - return seriesPercent; - }); - } - }, { - key: "getCalculatedRatios", - value: function getCalculatedRatios() { - var gl = this.w.globals; - var yRatio = []; - var invertedYRatio = 0; - var xRatio = 0; - var initialXRatio = 0; - var invertedXRatio = 0; - var zRatio = 0; - var baseLineY = []; - var baseLineInvertedY = 0.1; - var baseLineX = 0; - gl.yRange = []; - - if (gl.isMultipleYAxis) { - for (var i = 0; i < gl.minYArr.length; i++) { - gl.yRange.push(Math.abs(gl.minYArr[i] - gl.maxYArr[i])); - baseLineY.push(0); - } - } else { - gl.yRange.push(Math.abs(gl.minY - gl.maxY)); - } - - gl.xRange = Math.abs(gl.maxX - gl.minX); - gl.zRange = Math.abs(gl.maxZ - gl.minZ); // multiple y axis - - for (var _i = 0; _i < gl.yRange.length; _i++) { - yRatio.push(gl.yRange[_i] / gl.gridHeight); - } - - xRatio = gl.xRange / gl.gridWidth; - initialXRatio = Math.abs(gl.initialmaxX - gl.initialminX) / gl.gridWidth; - invertedYRatio = gl.yRange / gl.gridWidth; - invertedXRatio = gl.xRange / gl.gridHeight; - zRatio = gl.zRange / gl.gridHeight * 16; - - if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) { - // Negative numbers present in series - gl.hasNegs = true; - } - - if (gl.isMultipleYAxis) { - baseLineY = []; // baseline variables is the 0 of the yaxis which will be needed when there are negatives - - for (var _i2 = 0; _i2 < yRatio.length; _i2++) { - baseLineY.push(-gl.minYArr[_i2] / yRatio[_i2]); - } - } else { - baseLineY.push(-gl.minY / yRatio[0]); - - if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) { - baseLineInvertedY = -gl.minY / invertedYRatio; // this is for bar chart - - baseLineX = gl.minX / xRatio; - } - } - - return { - yRatio: yRatio, - invertedYRatio: invertedYRatio, - zRatio: zRatio, - xRatio: xRatio, - initialXRatio: initialXRatio, - invertedXRatio: invertedXRatio, - baseLineInvertedY: baseLineInvertedY, - baseLineY: baseLineY, - baseLineX: baseLineX - }; - } - }, { - key: "getLogSeries", - value: function getLogSeries(series) { - var w = this.w; - w.globals.seriesLog = series.map(function (s, i) { - if (w.config.yaxis[i] && w.config.yaxis[i].logarithmic) { - return s.map(function (d) { - if (d === null) return null; - var logVal = (Math.log(d) - Math.log(w.globals.minYArr[i])) / (Math.log(w.globals.maxYArr[i]) - Math.log(w.globals.minYArr[i])); - return logVal; - }); - } else { - return s; - } - }); - return w.globals.seriesLog; - } - }, { - key: "getLogYRatios", - value: function getLogYRatios(yRatio) { - var _this = this; - - var w = this.w; - var gl = this.w.globals; - gl.yLogRatio = yRatio.slice(); - gl.logYRange = gl.yRange.map(function (yRange, i) { - if (w.config.yaxis[i] && _this.w.config.yaxis[i].logarithmic) { - var maxY = -Number.MAX_VALUE; - var minY = Number.MIN_VALUE; - var range = 1; - gl.seriesLog.forEach(function (s, si) { - s.forEach(function (v) { - if (w.config.yaxis[si] && w.config.yaxis[si].logarithmic) { - maxY = Math.max(v, maxY); - minY = Math.min(v, minY); - } - }); - }); - range = Math.pow(gl.yRange[i], Math.abs(minY - maxY) / gl.yRange[i]); - gl.yLogRatio[i] = range / gl.gridHeight; - return range; - } - }); - return gl.yLogRatio; - } // Some config objects can be array - and we need to extend them correctly - - }], [{ - key: "checkComboSeries", - value: function checkComboSeries(series) { - var comboCharts = false; - var comboChartsHasBars = false; // if user specified a type in series too, turn on comboCharts flag - - if (series.length && typeof series[0].type !== 'undefined') { - comboCharts = true; - series.forEach(function (s) { - if (s.type === 'bar' || s.type === 'column') { - comboChartsHasBars = true; - } - }); - } - - return { - comboCharts: comboCharts, - comboChartsHasBars: comboChartsHasBars - }; - } - }, { - key: "extendArrayProps", - value: function extendArrayProps(configInstance, options) { - if (options.yaxis) { - options = configInstance.extendYAxis(options); - } - - if (options.annotations) { - if (options.annotations.yaxis) { - options = configInstance.extendYAxisAnnotations(options); - } - - if (options.annotations.xaxis) { - options = configInstance.extendXAxisAnnotations(options); - } - - if (options.annotations.points) { - options = configInstance.extendPointAnnotations(options); - } - } - - return options; - } - }]); - - return CoreUtils; -}(); - -/** - * ApexCharts Config Class for extending user options with pre-defined ApexCharts config. - * - * @module Config - **/ - -var Config = -/*#__PURE__*/ -function () { - function Config(opts) { - _classCallCheck(this, Config); - - this.opts = opts; - } - - _createClass(Config, [{ - key: "init", - value: function init() { - var opts = this.opts; - var options = new Options(); - var defaults = new Defaults(opts); - this.chartType = opts.chart.type; - - if (this.chartType === 'histogram') { - // technically, a histogram can be drawn by a column chart with no spaces in between - opts.chart.type = 'bar'; - opts = Utils.extend({ - plotOptions: { - bar: { - columnWidth: '99.99%' - } - } - }, opts); - } - - opts.series = this.checkEmptySeries(opts.series); - opts = this.extendYAxis(opts); - opts = this.extendAnnotations(opts); - var config = options.init(); - var newDefaults = {}; - - if (opts && _typeof(opts) === 'object') { - var chartDefaults = {}; - - switch (this.chartType) { - case 'line': - chartDefaults = defaults.line(); - break; - - case 'area': - chartDefaults = defaults.area(); - break; - - case 'bar': - chartDefaults = defaults.bar(); - break; - - case 'candlestick': - chartDefaults = defaults.candlestick(); - break; - - case 'rangeBar': - chartDefaults = defaults.rangeBar(); - break; - - case 'histogram': - chartDefaults = defaults.bar(); - break; - - case 'bubble': - chartDefaults = defaults.bubble(); - break; - - case 'scatter': - chartDefaults = defaults.scatter(); - break; - - case 'heatmap': - chartDefaults = defaults.heatmap(); - break; - - case 'pie': - chartDefaults = defaults.pie(); - break; - - case 'donut': - chartDefaults = defaults.donut(); - break; - - case 'radar': - chartDefaults = defaults.radar(); - break; - - case 'radialBar': - chartDefaults = defaults.radialBar(); - break; - - default: - chartDefaults = defaults.line(); - } - - if (opts.chart.brush && opts.chart.brush.enabled) { - chartDefaults = defaults.brush(chartDefaults); - } - - if (opts.chart.stacked && opts.chart.stackType === '100%') { - defaults.stacked100(); - } // If user has specified a dark theme, make the tooltip dark too - - - this.checkForDarkTheme(window.Apex); // check global window Apex options - - this.checkForDarkTheme(opts); // check locally passed options - - opts.xaxis = opts.xaxis || window.Apex.xaxis || {}; - var combo = CoreUtils.checkComboSeries(opts.series); - - if ((opts.chart.type === 'line' || opts.chart.type === 'area' || opts.chart.type === 'scatter') && !combo.comboChartsHasBars && opts.xaxis.type !== 'datetime' && opts.xaxis.type !== 'numeric' && opts.xaxis.tickPlacement !== 'between') { - opts = Defaults.convertCatToNumeric(opts); - } - - if (opts.chart.sparkline && opts.chart.sparkline.enabled || window.Apex.chart && window.Apex.chart.sparkline && window.Apex.chart.sparkline.enabled) { - chartDefaults = defaults.sparkline(chartDefaults); - } - - newDefaults = Utils.extend(config, chartDefaults); - } // config should cascade in this fashion - // default-config < global-apex-variable-config < user-defined-config - // get GLOBALLY defined options and merge with the default config - - - var mergedWithDefaultConfig = Utils.extend(newDefaults, window.Apex); // get the merged config and extend with user defined config - - config = Utils.extend(mergedWithDefaultConfig, opts); // some features are not supported. those mismatches should be handled - - config = this.handleUserInputErrors(config); - return config; - } - }, { - key: "extendYAxis", - value: function extendYAxis(opts) { - var options = new Options(); - - if (typeof opts.yaxis === 'undefined') { - opts.yaxis = {}; - } // extend global yaxis config (only if object is provided / not an array) - - - if (opts.yaxis.constructor !== Array && window.Apex.yaxis && window.Apex.yaxis.constructor !== Array) { - opts.yaxis = Utils.extend(opts.yaxis, window.Apex.yaxis); - } // as we can't extend nested object's array with extend, we need to do it first - // user can provide either an array or object in yaxis config - - - if (opts.yaxis.constructor !== Array) { - // convert the yaxis to array if user supplied object - opts.yaxis = [Utils.extend(options.yAxis, opts.yaxis)]; - } else { - opts.yaxis = Utils.extendArray(opts.yaxis, options.yAxis); - } - - return opts; - } // annotations also accepts array, so we need to extend them manually - - }, { - key: "extendAnnotations", - value: function extendAnnotations(opts) { - if (typeof opts.annotations === 'undefined') { - opts.annotations = {}; - opts.annotations.yaxis = []; - opts.annotations.xaxis = []; - opts.annotations.points = []; - } - - opts = this.extendYAxisAnnotations(opts); - opts = this.extendXAxisAnnotations(opts); - opts = this.extendPointAnnotations(opts); - return opts; - } - }, { - key: "extendYAxisAnnotations", - value: function extendYAxisAnnotations(opts) { - var options = new Options(); - opts.annotations.yaxis = Utils.extendArray(typeof opts.annotations.yaxis !== 'undefined' ? opts.annotations.yaxis : [], options.yAxisAnnotation); - return opts; - } - }, { - key: "extendXAxisAnnotations", - value: function extendXAxisAnnotations(opts) { - var options = new Options(); - opts.annotations.xaxis = Utils.extendArray(typeof opts.annotations.xaxis !== 'undefined' ? opts.annotations.xaxis : [], options.xAxisAnnotation); - return opts; - } - }, { - key: "extendPointAnnotations", - value: function extendPointAnnotations(opts) { - var options = new Options(); - opts.annotations.points = Utils.extendArray(typeof opts.annotations.points !== 'undefined' ? opts.annotations.points : [], options.pointAnnotation); - return opts; - } - }, { - key: "checkForDarkTheme", - value: function checkForDarkTheme(opts) { - if (opts.theme && opts.theme.mode === 'dark') { - if (!opts.tooltip) { - opts.tooltip = {}; - } - - if (opts.tooltip.theme !== 'light') { - opts.tooltip.theme = 'dark'; - } - - if (!opts.chart.foreColor) { - opts.chart.foreColor = '#f6f7f8'; - } - - if (!opts.theme.palette) { - opts.theme.palette = 'palette4'; - } - } - } - }, { - key: "checkEmptySeries", - value: function checkEmptySeries(ser) { - if (ser.length === 0) { - return [{ - data: [] - }]; - } - - return ser; - } - }, { - key: "handleUserInputErrors", - value: function handleUserInputErrors(opts) { - var config = opts; // conflicting tooltip option. intersect makes sure to focus on 1 point at a time. Shared cannot be used along with it - - if (config.tooltip.shared && config.tooltip.intersect) { - throw new Error('tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.'); - } - - if (config.chart.scroller) { - console.warn('Scroller has been deprecated since v2.0.0. Please remove the configuration for chart.scroller'); - } - - if ((config.chart.type === 'bar' || config.chart.type === 'rangeBar') && config.plotOptions.bar.horizontal) { - // No multiple yaxis for bars - if (config.yaxis.length > 1) { - throw new Error('Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false'); - } // if yaxis is reversed in horizontal bar chart, you should draw the y-axis on right side - - - if (config.yaxis[0].reversed) { - config.yaxis[0].opposite = true; - } - - config.xaxis.tooltip.enabled = false; // no xaxis tooltip for horizontal bar - - config.yaxis[0].tooltip.enabled = false; // no xaxis tooltip for horizontal bar - - config.chart.zoom.enabled = false; // no zooming for horz bars - } - - if (config.chart.type === 'bar' || config.chart.type === 'rangeBar') { - if (config.tooltip.shared) { - if (config.xaxis.crosshairs.width === 'barWidth' && config.series.length > 1) { - console.warn('crosshairs.width = "barWidth" is only supported in single series, not in a multi-series barChart.'); - config.xaxis.crosshairs.width = 'tickWidth'; - } - - if (config.plotOptions.bar.horizontal) { - config.states.hover.type = 'none'; - config.tooltip.shared = false; - } - - if (!config.tooltip.followCursor) { - console.warn('followCursor option in shared columns cannot be turned off. Please set %ctooltip.followCursor: true', 'color: blue;'); - config.tooltip.followCursor = true; - } - } - } - - if (config.chart.type === 'candlestick') { - if (config.yaxis[0].reversed) { - console.warn('Reversed y-axis in candlestick chart is not supported.'); - config.yaxis[0].reversed = false; - } - } - - if (config.chart.group && config.yaxis[0].labels.minWidth === 0) { - console.warn('It looks like you have multiple charts in synchronization. You must provide yaxis.labels.minWidth which must be EQUAL for all grouped charts to prevent incorrect behaviour.'); - } // if user supplied array for stroke width, it will only be applicable to line/area charts, for any other charts, revert back to Number - - - if (Array.isArray(config.stroke.width)) { - if (config.chart.type !== 'line' && config.chart.type !== 'area') { - console.warn('stroke.width option accepts array only for line and area charts. Reverted back to Number'); - config.stroke.width = config.stroke.width[0]; - } - } - - return config; - } - }]); - - return Config; -}(); - -var Globals = -/*#__PURE__*/ -function () { - function Globals() { - _classCallCheck(this, Globals); - } - - _createClass(Globals, [{ - key: "globalVars", - value: function globalVars(config) { - return { - chartID: null, - // chart ID - apexcharts-cuid - cuid: null, - // chart ID - random numbers excluding "apexcharts" part - events: { - beforeMount: [], - mounted: [], - updated: [], - clicked: [], - selection: [], - dataPointSelection: [], - zoomed: [], - scrolled: [] - }, - colors: [], - clientX: null, - clientY: null, - fill: { - colors: [] - }, - stroke: { - colors: [] - }, - dataLabels: { - style: { - colors: [] - } - }, - radarPolygons: { - fill: { - colors: [] - } - }, - markers: { - colors: [], - size: config.markers.size, - largestSize: 0 - }, - animationEnded: false, - isTouchDevice: 'ontouchstart' in window || navigator.msMaxTouchPoints, - isDirty: false, - // chart has been updated after the initial render. This is different than dataChanged property. isDirty means user manually called some method to update - initialConfig: null, - // we will store the first config user has set to go back when user finishes interactions like zooming and come out of it - lastXAxis: [], - lastYAxis: [], - series: [], - // the MAIN series array (y values) - seriesRangeStart: [], - // the clone of series becomes the start in range - seriesRangeEnd: [], - // the end values in range chart - seriesPercent: [], - // the percentage values of the given series - seriesTotals: [], - stackedSeriesTotals: [], - seriesX: [], - // store the numeric x values in this array (x values) - seriesZ: [], - // The 3rd "Z" dimension for bubbles chart (z values) - labels: [], - // store the text to draw on x axis - // Don't mutate the labels, many things including tooltips depends on it! - timelineLabels: [], - // store the timeline Labels in another variable - invertedTimelineLabels: [], - // for rangebar timeline - seriesNames: [], - // same as labels, used in non axis charts - noLabelsProvided: false, - // if user didn't provide any categories/labels or x values, fallback to 1,2,3,4... - allSeriesCollapsed: false, - collapsedSeries: [], - // when user collapses a series, it goes into this array - collapsedSeriesIndices: [], - // this stores the index of the collapsedSeries instead of whole object for quick access - ancillaryCollapsedSeries: [], - // when user collapses an "alwaysVisible" series, it goes into this array - ancillaryCollapsedSeriesIndices: [], - // this stores the index of the ancillaryCollapsedSeries whose y-axis is always visible - risingSeries: [], - // when user re-opens a collapsed series, it goes here - dataFormatXNumeric: false, - // boolean value to indicate user has passed numeric x values - selectedDataPoints: [], - ignoreYAxisIndexes: [], - // when series are being collapsed in multiple y axes, ignore certain index - padHorizontal: 0, - maxValsInArrayIndex: 0, - zoomEnabled: config.chart.toolbar.autoSelected === 'zoom' && config.chart.toolbar.tools.zoom && config.chart.zoom.enabled, - panEnabled: config.chart.toolbar.autoSelected === 'pan' && config.chart.toolbar.tools.pan, - selectionEnabled: config.chart.toolbar.autoSelected === 'selection' && config.chart.toolbar.tools.selection, - yaxis: null, - minY: Number.MIN_VALUE, - // is 5e-324, i.e. the smallest positive number - // NOTE: If there are multiple y axis, the first yaxis array element will be considered for all y values calculations. Rest all will be calculated based on that - maxY: -Number.MAX_VALUE, - // is -1.7976931348623157e+308 - // NOTE: The above note for minY applies here as well - minYArr: [], - maxYArr: [], - maxX: -Number.MAX_VALUE, - // is -1.7976931348623157e+308 - initialmaxX: -Number.MAX_VALUE, - minX: Number.MIN_VALUE, - // is 5e-324, i.e. the smallest positive number - initialminX: Number.MIN_VALUE, - minZ: Number.MIN_VALUE, - // Max Z value in charts with Z axis - maxZ: -Number.MAX_VALUE, - // Max Z value in charts with Z axis - minXDiff: Number.MAX_VALUE, - mousedown: false, - lastClientPosition: {}, - // don't reset this variable this the chart is destroyed. It is used to detect right or left mousemove in panning - visibleXRange: undefined, - yRange: [], - // this property is the absolute sum of positive and negative values [eg (-100 + 200 = 300)] - yAxis - zRange: 0, - // zAxis Range (for bubble charts) - xRange: 0, - // xAxis range - yValueDecimal: 0, - // are there floating numbers in the series. If yes, this represent the len of the decimals - total: 0, - SVGNS: 'http://www.w3.org/2000/svg', - // svg namespace - svgWidth: 0, - // the whole svg width - svgHeight: 0, - // the whole svg height - noData: false, - // whether there is any data to display or not - locale: {}, - // the current locale values will be preserved here for global access - dom: {}, - // for storing all dom nodes in this particular property - // elWrap: null, // the element that wraps everything - // elGraphical: null, // this contains lines/areas/bars/pies - // elGridRect: null, // paths going outside this area will be clipped - // elGridRectMask: null, // clipping will happen with this mask - // elGridRectMarkerMask: null, // clipping will happen with this mask - // elLegendWrap: null, // the whole legend area - // elDefs: null, // [defs] element - memory: { - methodsToExec: [] - }, - shouldAnimate: true, - skipLastTimelinelabel: false, - // when last label is cropped, skip drawing it - delayedElements: [], - // element which appear after animation has finished - axisCharts: true, - // chart type = line or area or bar - // (refer them also as plot charts in the code) - isXNumeric: false, - // bool: data was provided in a {[x,y], [x,y]} pattern - isDataXYZ: false, - // bool: data was provided in a {[x,y,z]} pattern - resized: false, - // bool: user has resized - resizeTimer: null, - // timeout function to make a small delay before - // drawing when user resized - comboCharts: false, - // bool: whether it's a combination of line/column - comboChartsHasBars: false, - // bool: whether it's a combination of line/column - dataChanged: false, - // bool: has data changed dynamically - previousPaths: [], - // array: when data is changed, it will animate from - // previous paths - seriesXvalues: [], - // we will need this in tooltip (it's x position) - // when we will have unequal x values, we will need - // some way to get x value depending on mouse pointer - seriesYvalues: [], - // we will need this when deciding which series - // user hovered on - seriesCandleO: [], - // candle stick open values - seriesCandleH: [], - // candle stick high values - seriesCandleL: [], - // candle stick low values - seriesCandleC: [], - // candle stick close values - allSeriesHasEqualX: true, - dataPoints: 0, - // the longest series length - pointsArray: [], - // store the points positions here to draw later on hover - // format is - [[x,y],[x,y]... [x,y]] - dataLabelsRects: [], - // store the positions of datalabels to prevent collision - lastDrawnDataLabelsIndexes: [], - hasNullValues: false, - // bool: whether series contains null values - easing: null, - // function: animation effect to apply - zoomed: false, - // whether user has zoomed or not - gridWidth: 0, - // drawable width of actual graphs (series paths) - gridHeight: 0, - // drawable height of actual graphs (series paths) - yAxisScale: [], - xAxisScale: null, - xAxisTicksPositions: [], - timescaleTicks: [], - rotateXLabels: false, - defaultLabels: false, - xLabelFormatter: undefined, - // formatter for x axis labels - yLabelFormatters: [], - xaxisTooltipFormatter: undefined, - // formatter for x axis tooltip - ttKeyFormatter: undefined, - ttVal: undefined, - ttZFormatter: undefined, - LINE_HEIGHT_RATIO: 1.618, - xAxisLabelsHeight: 0, - yAxisLabelsWidth: 0, - scaleX: 1, - scaleY: 1, - translateX: 0, - translateY: 0, - translateYAxisX: [], - yLabelsCoords: [], - yTitleCoords: [], - yAxisWidths: [], - translateXAxisY: 0, - translateXAxisX: 0, - tooltip: null, - tooltipOpts: null - }; - } - }, { - key: "init", - value: function init(config) { - var globals = this.globalVars(config); - globals.initialConfig = Utils.extend({}, config); - globals.initialSeries = JSON.parse(JSON.stringify(globals.initialConfig.series)); - globals.lastXAxis = JSON.parse(JSON.stringify(globals.initialConfig.xaxis)); - globals.lastYAxis = JSON.parse(JSON.stringify(globals.initialConfig.yaxis)); - return globals; - } - }]); - - return Globals; -}(); - -/** - * ApexCharts Base Class for extending user options with pre-defined ApexCharts config. - * - * @module Base - **/ - -var Base = -/*#__PURE__*/ -function () { - function Base(opts) { - _classCallCheck(this, Base); - - this.opts = opts; - } - - _createClass(Base, [{ - key: "init", - value: function init() { - var config = new Config(this.opts).init(); - var globals = new Globals().init(config); - var w = { - config: config, - globals: globals - }; - return w; - } - }]); - - return Base; -}(); - -/** - * ApexCharts Fill Class for setting fill options of the paths. - * - * @module Fill - **/ - -var Fill = -/*#__PURE__*/ -function () { - function Fill(ctx) { - _classCallCheck(this, Fill); - - this.ctx = ctx; - this.w = ctx.w; - this.opts = null; - this.seriesIndex = 0; - } - - _createClass(Fill, [{ - key: "clippedImgArea", - value: function clippedImgArea(params) { - var w = this.w; - var cnf = w.config; - var svgW = parseInt(w.globals.gridWidth); - var svgH = parseInt(w.globals.gridHeight); - var size = svgW > svgH ? svgW : svgH; - var fillImg = params.image; - var imgWidth = 0; - var imgHeight = 0; - - if (typeof params.width === 'undefined' && typeof params.height === 'undefined') { - if (cnf.fill.image.width !== undefined && cnf.fill.image.height !== undefined) { - imgWidth = cnf.fill.image.width + 1; - imgHeight = cnf.fill.image.height; - } else { - imgWidth = size + 1; - imgHeight = size; - } - } else { - imgWidth = params.width; - imgHeight = params.height; - } - - var elPattern = document.createElementNS(w.globals.SVGNS, 'pattern'); - Graphics.setAttrs(elPattern, { - id: params.patternID, - patternUnits: params.patternUnits ? params.patternUnits : 'userSpaceOnUse', - width: imgWidth + 'px', - height: imgHeight + 'px' - }); - var elImage = document.createElementNS(w.globals.SVGNS, 'image'); - elPattern.appendChild(elImage); - elImage.setAttributeNS('http://www.w3.org/1999/xlink', 'href', fillImg); - Graphics.setAttrs(elImage, { - x: 0, - y: 0, - preserveAspectRatio: 'none', - width: imgWidth + 'px', - height: imgHeight + 'px' - }); - elImage.style.opacity = params.opacity; - w.globals.dom.elDefs.node.appendChild(elPattern); - } - }, { - key: "getSeriesIndex", - value: function getSeriesIndex(opts) { - var w = this.w; - - if (w.config.chart.type === 'bar' && w.config.plotOptions.bar.distributed || w.config.chart.type === 'heatmap') { - this.seriesIndex = opts.seriesNumber; - } else { - this.seriesIndex = opts.seriesNumber % w.globals.series.length; - } - - return this.seriesIndex; - } - }, { - key: "fillPath", - value: function fillPath(opts) { - var w = this.w; - this.opts = opts; - var cnf = this.w.config; - var pathFill; - var patternFill, gradientFill; - this.seriesIndex = this.getSeriesIndex(opts); - var fillColors = this.getFillColors(); - var fillColor = fillColors[this.seriesIndex]; - - if (typeof fillColor === 'function') { - fillColor = fillColor({ - seriesIndex: this.seriesIndex, - value: opts.value, - w: w - }); - } - - var fillType = this.getFillType(this.seriesIndex); - var fillOpacity = Array.isArray(cnf.fill.opacity) ? cnf.fill.opacity[this.seriesIndex] : cnf.fill.opacity; - var defaultColor = fillColor; - - if (opts.color) { - fillColor = opts.color; - } - - if (fillColor.indexOf('rgb') === -1) { - defaultColor = Utils.hexToRgba(fillColor, fillOpacity); - } else { - if (fillColor.indexOf('rgba') > -1) { - fillOpacity = 0 + '.' + Utils.getOpacityFromRGBA(fillColors[this.seriesIndex]); - } - } - - if (fillType === 'pattern') { - patternFill = this.handlePatternFill(patternFill, fillColor, fillOpacity, defaultColor); - } - - if (fillType === 'gradient') { - gradientFill = this.handleGradientFill(gradientFill, fillColor, fillOpacity, this.seriesIndex); - } - - if (cnf.fill.image.src.length > 0 && fillType === 'image') { - if (opts.seriesNumber < cnf.fill.image.src.length) { - this.clippedImgArea({ - opacity: fillOpacity, - image: cnf.fill.image.src[opts.seriesNumber], - patternUnits: opts.patternUnits, - patternID: "pattern".concat(w.globals.cuid).concat(opts.seriesNumber + 1) - }); - pathFill = "url(#pattern".concat(w.globals.cuid).concat(opts.seriesNumber + 1, ")"); - } else { - pathFill = defaultColor; - } - } else if (fillType === 'gradient') { - pathFill = gradientFill; - } else if (fillType === 'pattern') { - pathFill = patternFill; - } else { - pathFill = defaultColor; - } // override pattern/gradient if opts.solid is true - - - if (opts.solid) { - pathFill = defaultColor; - } - - return pathFill; - } - }, { - key: "getFillType", - value: function getFillType(seriesIndex) { - var w = this.w; - - if (Array.isArray(w.config.fill.type)) { - return w.config.fill.type[seriesIndex]; - } else { - return w.config.fill.type; - } - } - }, { - key: "getFillColors", - value: function getFillColors() { - var w = this.w; - var cnf = w.config; - var opts = this.opts; - var fillColors = []; - - if (w.globals.comboCharts) { - if (w.config.series[this.seriesIndex].type === 'line') { - if (w.globals.stroke.colors instanceof Array) { - fillColors = w.globals.stroke.colors; - } else { - fillColors.push(w.globals.stroke.colors); - } - } else { - if (w.globals.fill.colors instanceof Array) { - fillColors = w.globals.fill.colors; - } else { - fillColors.push(w.globals.fill.colors); - } - } - } else { - if (cnf.chart.type === 'line') { - if (w.globals.stroke.colors instanceof Array) { - fillColors = w.globals.stroke.colors; - } else { - fillColors.push(w.globals.stroke.colors); - } - } else { - if (w.globals.fill.colors instanceof Array) { - fillColors = w.globals.fill.colors; - } else { - fillColors.push(w.globals.fill.colors); - } - } - } // colors passed in arguments - - - if (typeof opts.fillColors !== 'undefined') { - fillColors = []; - - if (opts.fillColors instanceof Array) { - fillColors = opts.fillColors.slice(); - } else { - fillColors.push(opts.fillColors); - } - } - - return fillColors; - } - }, { - key: "handlePatternFill", - value: function handlePatternFill(patternFill, fillColor, fillOpacity, defaultColor) { - var cnf = this.w.config; - var opts = this.opts; - var graphics = new Graphics(this.ctx); - var patternStrokeWidth = cnf.fill.pattern.strokeWidth === undefined ? Array.isArray(cnf.stroke.width) ? cnf.stroke.width[this.seriesIndex] : cnf.stroke.width : Array.isArray(cnf.fill.pattern.strokeWidth) ? cnf.fill.pattern.strokeWidth[this.seriesIndex] : cnf.fill.pattern.strokeWidth; - var patternLineColor = fillColor; - - if (cnf.fill.pattern.style instanceof Array) { - if (typeof cnf.fill.pattern.style[opts.seriesNumber] !== 'undefined') { - var pf = graphics.drawPattern(cnf.fill.pattern.style[opts.seriesNumber], cnf.fill.pattern.width, cnf.fill.pattern.height, patternLineColor, patternStrokeWidth, fillOpacity); - patternFill = pf; - } else { - patternFill = defaultColor; - } - } else { - patternFill = graphics.drawPattern(cnf.fill.pattern.style, cnf.fill.pattern.width, cnf.fill.pattern.height, patternLineColor, patternStrokeWidth, fillOpacity); - } - - return patternFill; - } - }, { - key: "handleGradientFill", - value: function handleGradientFill(gradientFill, fillColor, fillOpacity, i) { - var cnf = this.w.config; - var opts = this.opts; - var graphics = new Graphics(this.ctx); - var utils = new Utils(); - var type = cnf.fill.gradient.type; - var gradientFrom, gradientTo; - var opacityFrom = cnf.fill.gradient.opacityFrom === undefined ? fillOpacity : Array.isArray(cnf.fill.gradient.opacityFrom) ? cnf.fill.gradient.opacityFrom[i] : cnf.fill.gradient.opacityFrom; - var opacityTo = cnf.fill.gradient.opacityTo === undefined ? fillOpacity : Array.isArray(cnf.fill.gradient.opacityTo) ? cnf.fill.gradient.opacityTo[i] : cnf.fill.gradient.opacityTo; - gradientFrom = fillColor; - - if (cnf.fill.gradient.gradientToColors === undefined || cnf.fill.gradient.gradientToColors.length === 0) { - if (cnf.fill.gradient.shade === 'dark') { - gradientTo = utils.shadeColor(parseFloat(cnf.fill.gradient.shadeIntensity) * -1, fillColor); - } else { - gradientTo = utils.shadeColor(parseFloat(cnf.fill.gradient.shadeIntensity), fillColor); - } - } else { - gradientTo = cnf.fill.gradient.gradientToColors[opts.seriesNumber]; - } - - if (cnf.fill.gradient.inverseColors) { - var t = gradientFrom; - gradientFrom = gradientTo; - gradientTo = t; - } - - gradientFill = graphics.drawGradient(type, gradientFrom, gradientTo, opacityFrom, opacityTo, opts.size, cnf.fill.gradient.stops, cnf.fill.gradient.colorStops, i); - return gradientFill; - } - }]); - - return Fill; -}(); - -/** - * ApexCharts Markers Class for drawing points on y values in axes charts. - * - * @module Markers - **/ - -var Markers = -/*#__PURE__*/ -function () { - function Markers(ctx, opts) { - _classCallCheck(this, Markers); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Markers, [{ - key: "setGlobalMarkerSize", - value: function setGlobalMarkerSize() { - var w = this.w; - w.globals.markers.size = Array.isArray(w.config.markers.size) ? w.config.markers.size : [w.config.markers.size]; - - if (w.globals.markers.size.length > 0) { - if (w.globals.markers.size.length < w.globals.series.length + 1) { - for (var i = 0; i <= w.globals.series.length; i++) { - if (typeof w.globals.markers.size[i] === 'undefined') { - w.globals.markers.size.push(w.globals.markers.size[0]); - } - } - } - } else { - w.globals.markers.size = w.config.series.map(function (s) { - return w.config.markers.size; - }); - } - } - }, { - key: "plotChartMarkers", - value: function plotChartMarkers(pointsPos, seriesIndex, j) { - var _this = this; - - var w = this.w; - var i = seriesIndex; - var p = pointsPos; - var elPointsWrap = null; - var graphics = new Graphics(this.ctx); - var point; - - if (w.globals.markers.size[seriesIndex] > 0) { - elPointsWrap = graphics.group({ - class: 'apexcharts-series-markers' - }); - elPointsWrap.attr('clip-path', "url(#gridRectMarkerMask".concat(w.globals.cuid, ")")); - } - - if (p.x instanceof Array) { - var _loop = function _loop(q) { - var dataPointIndex = j; // a small hack as we have 2 points for the first val to connect it - - if (j === 1 && q === 0) dataPointIndex = 0; - if (j === 1 && q === 1) dataPointIndex = 1; - var PointClasses = 'apexcharts-marker'; - - if ((w.config.chart.type === 'line' || w.config.chart.type === 'area') && !w.globals.comboCharts && !w.config.tooltip.intersect) { - PointClasses += ' no-pointer-events'; - } - - var shouldMarkerDraw = Array.isArray(w.config.markers.size) ? w.globals.markers.size[seriesIndex] > 0 : w.config.markers.size > 0; - - if (shouldMarkerDraw) { - if (Utils.isNumber(p.y[q])) { - PointClasses += " w".concat((Math.random() + 1).toString(36).substring(4)); - } else { - PointClasses = 'apexcharts-nullpoint'; - } - - var opts = _this.getMarkerConfig(PointClasses, seriesIndex); // discrete markers is an option where user can specify a particular marker with different size and color - - - w.config.markers.discrete.map(function (marker) { - if (marker.seriesIndex === seriesIndex && marker.dataPointIndex === dataPointIndex) { - opts.pointStrokeColor = marker.strokeColor; - opts.pointFillColor = marker.fillColor; - opts.pSize = marker.size; - } - }); - - if (w.config.series[i].data[j]) { - if (w.config.series[i].data[j].fillColor) { - opts.pointFillColor = w.config.series[i].data[j].fillColor; - } - - if (w.config.series[i].data[j].strokeColor) { - opts.pointStrokeColor = w.config.series[i].data[j].strokeColor; - } - } - - point = graphics.drawMarker(p.x[q], p.y[q], opts); - point.attr('rel', dataPointIndex); - point.attr('j', dataPointIndex); - point.attr('index', seriesIndex); - point.node.setAttribute('default-marker-size', opts.pSize); - var filters = new Filters(_this.ctx); - filters.setSelectionFilter(point, seriesIndex, dataPointIndex); - - _this.addEvents(point); - - if (elPointsWrap) { - elPointsWrap.add(point); - } - } else { - // dynamic array creation - multidimensional - if (typeof w.globals.pointsArray[seriesIndex] === 'undefined') w.globals.pointsArray[seriesIndex] = []; - w.globals.pointsArray[seriesIndex].push([p.x[q], p.y[q]]); - } - }; - - for (var q = 0; q < p.x.length; q++) { - _loop(q); - } - } - - return elPointsWrap; - } - }, { - key: "getMarkerConfig", - value: function getMarkerConfig(cssClass, seriesIndex) { - var w = this.w; - var pStyle = this.getMarkerStyle(seriesIndex); - var pSize = w.globals.markers.size[seriesIndex]; - return { - pSize: pSize, - pRadius: w.config.markers.radius, - pWidth: w.config.markers.strokeWidth, - pointStrokeColor: pStyle.pointStrokeColor, - pointFillColor: pStyle.pointFillColor, - shape: w.config.markers.shape instanceof Array ? w.config.markers.shape[seriesIndex] : w.config.markers.shape, - class: cssClass, - pointStrokeOpacity: w.config.markers.strokeOpacity, - pointFillOpacity: w.config.markers.fillOpacity, - seriesIndex: seriesIndex - }; - } - }, { - key: "addEvents", - value: function addEvents(circle) { - var graphics = new Graphics(this.ctx); - circle.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this.ctx, circle)); - circle.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this.ctx, circle)); - circle.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this.ctx, circle)); - circle.node.addEventListener('touchstart', graphics.pathMouseDown.bind(this.ctx, circle), { - passive: true - }); - } - }, { - key: "getMarkerStyle", - value: function getMarkerStyle(seriesIndex) { - var w = this.w; - var colors = w.globals.markers.colors; - var strokeColors = w.config.markers.strokeColor || w.config.markers.strokeColors; - var pointStrokeColor = strokeColors instanceof Array ? strokeColors[seriesIndex] : strokeColors; - var pointFillColor = colors instanceof Array ? colors[seriesIndex] : colors; - return { - pointStrokeColor: pointStrokeColor, - pointFillColor: pointFillColor - }; - } - }]); - - return Markers; -}(); - -/** - * ApexCharts Scatter Class. - * This Class also handles bubbles chart as currently there is no major difference in drawing them, - * @module Scatter - **/ - -var Scatter = -/*#__PURE__*/ -function () { - function Scatter(ctx) { - _classCallCheck(this, Scatter); - - this.ctx = ctx; - this.w = ctx.w; - this.initialAnim = this.w.config.chart.animations.enabled; - this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; // this array will help in centering the label in bubbles - - this.radiusSizes = []; - } - - _createClass(Scatter, [{ - key: "draw", - value: function draw(elSeries, j, opts) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var realIndex = opts.realIndex; - var pointsPos = opts.pointsPos; - var zRatio = opts.zRatio; - var elPointsMain = opts.elParent; - var elPointsWrap = graphics.group({ - class: "apexcharts-series-markers apexcharts-series-".concat(w.config.chart.type) - }); - elPointsWrap.attr('clip-path', "url(#gridRectMarkerMask".concat(w.globals.cuid, ")")); - - if (pointsPos.x instanceof Array) { - for (var q = 0; q < pointsPos.x.length; q++) { - var dataPointIndex = j + 1; - var shouldDraw = true; // a small hack as we have 2 points for the first val to connect it - - if (j === 0 && q === 0) dataPointIndex = 0; - if (j === 0 && q === 1) dataPointIndex = 1; - var radius = 0; - var finishRadius = w.globals.markers.size[realIndex]; - - if (zRatio !== Infinity) { - // means we have a bubble - finishRadius = w.globals.seriesZ[realIndex][dataPointIndex] / zRatio; - - if (typeof this.radiusSizes[realIndex] === 'undefined') { - this.radiusSizes.push([]); - } - - this.radiusSizes[realIndex].push(finishRadius); - } - - if (!w.config.chart.animations.enabled) { - radius = finishRadius; - } - - var x = pointsPos.x[q]; - var y = pointsPos.y[q]; - radius = radius || 0; - - if (x === 0 && y === 0 || y === null || typeof w.globals.series[realIndex][dataPointIndex] === 'undefined') { - shouldDraw = false; - } - - if (shouldDraw) { - var circle = this.drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j); - elPointsWrap.add(circle); - } - - elPointsMain.add(elPointsWrap); - } - } - } - }, { - key: "drawPoint", - value: function drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j) { - var w = this.w; - var i = realIndex; - var anim = new Animations(this.ctx); - var filters = new Filters(this.ctx); - var fill = new Fill(this.ctx); - var markers = new Markers(this.ctx); - var graphics = new Graphics(this.ctx); - var markerConfig = markers.getMarkerConfig('apexcharts-marker', i); - var pathFillCircle = fill.fillPath({ - seriesNumber: realIndex, - patternUnits: 'objectBoundingBox', - value: w.globals.series[realIndex][j] - }); - var circle = graphics.drawCircle(radius); - - if (w.config.series[i].data[dataPointIndex]) { - if (w.config.series[i].data[dataPointIndex].fillColor) { - pathFillCircle = w.config.series[i].data[dataPointIndex].fillColor; - } - } - - circle.attr({ - cx: x, - cy: y, - fill: pathFillCircle, - stroke: markerConfig.pointStrokeColor, - strokeWidth: markerConfig.pWidth - }); - - if (w.config.chart.dropShadow.enabled) { - var dropShadow = w.config.chart.dropShadow; - filters.dropShadow(circle, dropShadow, realIndex); - } - - if (this.initialAnim && !w.globals.dataChanged) { - var speed = 1; - - if (!w.globals.resized) { - speed = w.config.chart.animations.speed; - } - - anim.animateCircleRadius(circle, 0, finishRadius, speed, w.globals.easing); - } - - if (w.globals.dataChanged) { - if (this.dynamicAnim) { - var _speed = w.config.chart.animations.dynamicAnimation.speed; - var prevX, prevY, prevR; - var prevPathJ = null; - prevPathJ = w.globals.previousPaths[realIndex] && w.globals.previousPaths[realIndex][j]; - - if (typeof prevPathJ !== 'undefined' && prevPathJ !== null) { - // series containing less elements will ignore these values and revert to 0 - prevX = prevPathJ.x; - prevY = prevPathJ.y; - prevR = typeof prevPathJ.r !== 'undefined' ? prevPathJ.r : finishRadius; - } - - for (var cs = 0; cs < w.globals.collapsedSeries.length; cs++) { - if (w.globals.collapsedSeries[cs].index === realIndex) { - _speed = 1; - finishRadius = 0; - } - } - - if (x === 0 && y === 0) finishRadius = 0; - anim.animateCircle(circle, { - cx: prevX, - cy: prevY, - r: prevR - }, { - cx: x, - cy: y, - r: finishRadius - }, _speed, w.globals.easing); - } else { - circle.attr({ - r: finishRadius - }); - } - } - - circle.attr({ - rel: dataPointIndex, - j: dataPointIndex, - index: realIndex, - 'default-marker-size': finishRadius - }); - filters.setSelectionFilter(circle, realIndex, dataPointIndex); - markers.addEvents(circle); - circle.node.classList.add('apexcharts-marker'); - return circle; - } - }, { - key: "centerTextInBubble", - value: function centerTextInBubble(y) { - var w = this.w; - y = y + parseInt(w.config.dataLabels.style.fontSize) / 4; - return { - y: y - }; - } - }]); - - return Scatter; -}(); - -/** - * ApexCharts DataLabels Class for drawing dataLabels on Axes based Charts. - * - * @module DataLabels - **/ - -var DataLabels = -/*#__PURE__*/ -function () { - function DataLabels(ctx) { - _classCallCheck(this, DataLabels); - - this.ctx = ctx; - this.w = ctx.w; - } // When there are many datalabels to be printed, and some of them overlaps each other in the same series, this method will take care of that - // Also, when datalabels exceeds the drawable area and get clipped off, we need to adjust and move some pixels to make them visible again - - - _createClass(DataLabels, [{ - key: "dataLabelsCorrection", - value: function dataLabelsCorrection(x, y, val, i, dataPointIndex, alwaysDrawDataLabel, fontSize) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var drawnextLabel = false; // - - var textRects = graphics.getTextRects(val, fontSize); - var width = textRects.width; - var height = textRects.height; // first value in series, so push an empty array - - if (typeof w.globals.dataLabelsRects[i] === 'undefined') w.globals.dataLabelsRects[i] = []; // then start pushing actual rects in that sub-array - - w.globals.dataLabelsRects[i].push({ - x: x, - y: y, - width: width, - height: height - }); - var len = w.globals.dataLabelsRects[i].length - 2; - var lastDrawnIndex = typeof w.globals.lastDrawnDataLabelsIndexes[i] !== 'undefined' ? w.globals.lastDrawnDataLabelsIndexes[i][w.globals.lastDrawnDataLabelsIndexes[i].length - 1] : 0; - - if (typeof w.globals.dataLabelsRects[i][len] !== 'undefined') { - var lastDataLabelRect = w.globals.dataLabelsRects[i][lastDrawnIndex]; - - if ( // next label forward and x not intersecting - x > lastDataLabelRect.x + lastDataLabelRect.width + 2 || y > lastDataLabelRect.y + lastDataLabelRect.height + 2 || x + width < lastDataLabelRect.x // next label is going to be drawn backwards - ) { - // the 2 indexes don't override, so OK to draw next label - drawnextLabel = true; - } - } - - if (dataPointIndex === 0 || alwaysDrawDataLabel) { - drawnextLabel = true; - } - - return { - x: x, - y: y, - drawnextLabel: drawnextLabel - }; - } - }, { - key: "drawDataLabel", - value: function drawDataLabel(pos, i, j) { - var align = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'top'; - // this method handles line, area, bubble, scatter charts as those charts contains markers/points which have pre-defined x/y positions - // all other charts like bars / heatmaps will define their own drawDataLabel routine - var w = this.w; - var graphics = new Graphics(this.ctx); - var dataLabelsConfig = w.config.dataLabels; - var x = 0; - var y = 0; - var dataPointIndex = j; - var elDataLabelsWrap = null; - - if (!dataLabelsConfig.enabled || pos.x instanceof Array !== true) { - return elDataLabelsWrap; - } - - elDataLabelsWrap = graphics.group({ - class: 'apexcharts-data-labels' - }); - elDataLabelsWrap.attr('clip-path', "url(#gridRectMarkerMask".concat(w.globals.cuid, ")")); - - for (var q = 0; q < pos.x.length; q++) { - x = pos.x[q] + dataLabelsConfig.offsetX; - y = pos.y[q] + dataLabelsConfig.offsetY - w.globals.markers.size[i] - 5; - - if (align === 'bottom') { - y = y + w.globals.markers.size[i] * 2 + parseInt(dataLabelsConfig.style.fontSize) * 1.4; - } - - if (!isNaN(x)) { - // a small hack as we have 2 points for the first val to connect it - if (j === 1 && q === 0) dataPointIndex = 0; - if (j === 1 && q === 1) dataPointIndex = 1; - var val = w.globals.series[i][dataPointIndex]; - var text = ''; - - if (w.config.chart.type === 'bubble') { - text = w.globals.seriesZ[i][dataPointIndex]; - y = pos.y[q] + w.config.dataLabels.offsetY; - var scatter = new Scatter(this.ctx); - var centerTextInBubbleCoords = scatter.centerTextInBubble(y, i, dataPointIndex); - y = centerTextInBubbleCoords.y; - } else { - if (typeof val !== 'undefined' && val !== null) { - text = w.config.dataLabels.formatter(val, { - ctx: this.ctx, - seriesIndex: i, - dataPointIndex: dataPointIndex, - w: w - }); - } - } - - this.plotDataLabelsText({ - x: x, - y: y, - text: text, - i: i, - j: dataPointIndex, - parent: elDataLabelsWrap, - offsetCorrection: true, - dataLabelsConfig: w.config.dataLabels - }); - } - } - - return elDataLabelsWrap; - } - }, { - key: "plotDataLabelsText", - value: function plotDataLabelsText(opts) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var x = opts.x, - y = opts.y, - i = opts.i, - j = opts.j, - text = opts.text, - textAnchor = opts.textAnchor, - parent = opts.parent, - dataLabelsConfig = opts.dataLabelsConfig, - alwaysDrawDataLabel = opts.alwaysDrawDataLabel, - offsetCorrection = opts.offsetCorrection; - - if (Array.isArray(w.config.dataLabels.enabledOnSeries)) { - if (w.config.dataLabels.enabledOnSeries.indexOf(i) > -1) { - return; - } - } - - var correctedLabels = { - x: x, - y: y, - drawnextLabel: true - }; - - if (offsetCorrection) { - correctedLabels = this.dataLabelsCorrection(x, y, text, i, j, alwaysDrawDataLabel, parseInt(dataLabelsConfig.style.fontSize)); - } // when zoomed, we don't need to correct labels offsets, - // but if normally, labels get cropped, correct them - - - if (!w.globals.zoomed) { - x = correctedLabels.x; - y = correctedLabels.y; - } - - if (correctedLabels.drawnextLabel) { - var dataLabelText = graphics.drawText({ - width: 100, - height: parseInt(dataLabelsConfig.style.fontSize), - x: x, - y: y, - foreColor: w.globals.dataLabels.style.colors[i], - textAnchor: textAnchor || dataLabelsConfig.textAnchor, - text: text, - fontSize: dataLabelsConfig.style.fontSize, - fontFamily: dataLabelsConfig.style.fontFamily - }); - dataLabelText.attr({ - class: 'apexcharts-datalabel', - cx: x, - cy: y - }); - - if (dataLabelsConfig.dropShadow.enabled) { - var textShadow = dataLabelsConfig.dropShadow; - var filters = new Filters(this.ctx); - filters.dropShadow(dataLabelText, textShadow); - } - - parent.add(dataLabelText); - - if (typeof w.globals.lastDrawnDataLabelsIndexes[i] === 'undefined') { - w.globals.lastDrawnDataLabelsIndexes[i] = []; - } - - w.globals.lastDrawnDataLabelsIndexes[i].push(j); - } - } - }]); - - return DataLabels; -}(); - -/** - * ApexCharts Bar Class responsible for drawing both Columns and Bars. - * - * @module Bar - **/ - -var Bar = -/*#__PURE__*/ -function () { - function Bar(ctx, xyRatios) { - _classCallCheck(this, Bar); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.barOptions = w.config.plotOptions.bar; - this.isHorizontal = this.barOptions.horizontal; - this.strokeWidth = w.config.stroke.width; - this.isNullValue = false; - this.xyRatios = xyRatios; - - if (this.xyRatios !== null) { - this.xRatio = xyRatios.xRatio; - this.yRatio = xyRatios.yRatio; - this.invertedXRatio = xyRatios.invertedXRatio; - this.invertedYRatio = xyRatios.invertedYRatio; - this.baseLineY = xyRatios.baseLineY; - this.baseLineInvertedY = xyRatios.baseLineInvertedY; - } - - this.yaxisIndex = 0; - this.seriesLen = 0; - } - /** primary draw method which is called on bar object - * @memberof Bar - * @param {array} series - user supplied series values - * @param {int} seriesIndex - the index by which series will be drawn on the svg - * @return {node} element which is supplied to parent chart draw method for appending - **/ - - - _createClass(Bar, [{ - key: "draw", - value: function draw(series, seriesIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var coreUtils = new CoreUtils(this.ctx, w); - series = coreUtils.getLogSeries(series); - this.series = series; - this.yRatio = coreUtils.getLogYRatios(this.yRatio); - this.initVariables(series); - var ret = graphics.group({ - class: 'apexcharts-bar-series apexcharts-plot-series' - }); - - if (w.config.dataLabels.enabled) { - if (this.totalItems > w.config.plotOptions.bar.dataLabels.maxItems) { - console.warn('WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.'); - } - } - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - var pathTo = void 0, - pathFrom = void 0; - var x = void 0, - y = void 0, - xDivision = void 0, - // xDivision is the GRIDWIDTH divided by number of datapoints (columns) - yDivision = void 0, - // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) - zeroH = void 0, - // zeroH is the baseline where 0 meets y axis - zeroW = void 0; // zeroW is the baseline where 0 meets x axis - - var yArrj = []; // hold y values of current iterating series - - var xArrj = []; // hold x values of current iterating series - - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn - - var elSeries = graphics.group({ - class: "apexcharts-series", - rel: i + 1, - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), - 'data:realIndex': realIndex - }); - this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex); - - if (series[i].length > 0) { - this.visibleI = this.visibleI + 1; - } - - var strokeWidth = 0; - var barHeight = 0; - var barWidth = 0; - - if (this.yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; - var initPositions = this.initialPositions(); - y = initPositions.y; - barHeight = initPositions.barHeight; - yDivision = initPositions.yDivision; - zeroW = initPositions.zeroW; - x = initPositions.x; - barWidth = initPositions.barWidth; - xDivision = initPositions.xDivision; - zeroH = initPositions.zeroH; - - if (!this.horizontal) { - xArrj.push(x + barWidth / 2); - } // eldatalabels - - - var elDataLabelsWrap = graphics.group({ - class: 'apexcharts-datalabels' - }); - - for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { - if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) { - this.isNullValue = true; - } else { - this.isNullValue = false; - } - - if (w.config.stroke.show) { - if (this.isNullValue) { - strokeWidth = 0; - } else { - strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; - } - } - - var paths = null; - - if (this.isHorizontal) { - paths = this.drawBarPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - barHeight: barHeight, - strokeWidth: strokeWidth, - pathTo: pathTo, - pathFrom: pathFrom, - zeroW: zeroW, - x: x, - y: y, - yDivision: yDivision, - elSeries: elSeries - }); - barWidth = this.series[i][j] / this.invertedYRatio; - } else { - paths = this.drawColumnPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - x: x, - y: y, - xDivision: xDivision, - pathTo: pathTo, - pathFrom: pathFrom, - barWidth: barWidth, - zeroH: zeroH, - strokeWidth: strokeWidth, - elSeries: elSeries - }); - barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; - } - - pathTo = paths.pathTo; - pathFrom = paths.pathFrom; - y = paths.y; - x = paths.x; // push current X - - if (j > 0) { - xArrj.push(x + barWidth / 2); - } - - yArrj.push(y); - var pathFill = this.getPathFillColor(series, i, j, realIndex); - elSeries = this.renderSeries({ - realIndex: realIndex, - pathFill: pathFill, - j: j, - i: i, - pathFrom: pathFrom, - pathTo: pathTo, - strokeWidth: strokeWidth, - elSeries: elSeries, - x: x, - y: y, - series: series, - barHeight: barHeight, - barWidth: barWidth, - elDataLabelsWrap: elDataLabelsWrap, - visibleSeries: this.visibleI, - type: 'bar' - }); - } // push all x val arrays into main xArr - - - w.globals.seriesXvalues[realIndex] = xArrj; - w.globals.seriesYvalues[realIndex] = yArrj; - ret.add(elSeries); - } - - return ret; - } - }, { - key: "getPathFillColor", - value: function getPathFillColor(series, i, j, realIndex) { - var w = this.w; - var fill = new Fill(this.ctx); - var fillColor = null; - var seriesNumber = this.barOptions.distributed ? j : i; - - if (this.barOptions.colors.ranges.length > 0) { - var colorRange = this.barOptions.colors.ranges; - colorRange.map(function (range) { - if (series[i][j] >= range.from && series[i][j] <= range.to) { - fillColor = range.color; - } - }); - } - - if (w.config.series[i].data[j] && w.config.series[i].data[j].fillColor) { - fillColor = w.config.series[i].data[j].fillColor; - } - - var pathFill = fill.fillPath({ - seriesNumber: this.barOptions.distributed ? seriesNumber : realIndex, - color: fillColor, - value: series[i][j] - }); - return pathFill; - } - }, { - key: "renderSeries", - value: function renderSeries(_ref) { - var realIndex = _ref.realIndex, - pathFill = _ref.pathFill, - lineFill = _ref.lineFill, - j = _ref.j, - i = _ref.i, - pathFrom = _ref.pathFrom, - pathTo = _ref.pathTo, - strokeWidth = _ref.strokeWidth, - elSeries = _ref.elSeries, - x = _ref.x, - y = _ref.y, - series = _ref.series, - barHeight = _ref.barHeight, - barWidth = _ref.barWidth, - elDataLabelsWrap = _ref.elDataLabelsWrap, - visibleSeries = _ref.visibleSeries, - type = _ref.type; - var w = this.w; - var graphics = new Graphics(this.ctx); - - if (!lineFill) { - /* fix apexcharts#341 */ - lineFill = this.barOptions.distributed ? w.globals.stroke.colors[j] : w.globals.stroke.colors[realIndex]; - } - - if (w.config.series[i].data[j] && w.config.series[i].data[j].strokeColor) { - lineFill = w.config.series[i].data[j].strokeColor; - } - - if (this.isNullValue) { - pathFill = 'none'; - } - - var delay = j / w.config.chart.animations.animateGradually.delay * (w.config.chart.animations.speed / w.globals.dataPoints) / 2.4; - var renderedPath = graphics.renderPaths({ - i: i, - j: j, - realIndex: realIndex, - pathFrom: pathFrom, - pathTo: pathTo, - stroke: lineFill, - strokeWidth: strokeWidth, - strokeLineCap: w.config.stroke.lineCap, - fill: pathFill, - animationDelay: delay, - initialSpeed: w.config.chart.animations.speed, - dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed, - className: "apexcharts-".concat(type, "-area"), - id: "apexcharts-".concat(type, "-area") - }); - renderedPath.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); - var filters = new Filters(this.ctx); - filters.setSelectionFilter(renderedPath, realIndex, j); - elSeries.add(renderedPath); - var dataLabels = this.calculateDataLabelsPos({ - x: x, - y: y, - i: i, - j: j, - series: series, - realIndex: realIndex, - barHeight: barHeight, - barWidth: barWidth, - renderedPath: renderedPath, - visibleSeries: visibleSeries - }); - - if (dataLabels !== null) { - elDataLabelsWrap.add(dataLabels); - } - - elSeries.add(elDataLabelsWrap); - return elSeries; - } - }, { - key: "initVariables", - value: function initVariables(series) { - var w = this.w; - this.series = series; - this.totalItems = 0; - this.seriesLen = 0; - this.visibleI = -1; - this.visibleItems = 1; // number of visible bars after user zoomed in/out - - for (var sl = 0; sl < series.length; sl++) { - if (series[sl].length > 0) { - this.seriesLen = this.seriesLen + 1; - this.totalItems += series[sl].length; - } - - if (w.globals.isXNumeric) { - // get max visible items - for (var j = 0; j < series[sl].length; j++) { - if (w.globals.seriesX[sl][j] > w.globals.minX && w.globals.seriesX[sl][j] < w.globals.maxX) { - this.visibleItems++; - } - } - } else { - this.visibleItems = w.globals.dataPoints; - } - } - - if (this.seriesLen === 0) { - // A small adjustment when combo charts are used - this.seriesLen = 1; - } - } - }, { - key: "initialPositions", - value: function initialPositions() { - var w = this.w; - var x, y, yDivision, xDivision, barHeight, barWidth, zeroH, zeroW; - - if (this.isHorizontal) { - // height divided into equal parts - yDivision = w.globals.gridHeight / w.globals.dataPoints; - barHeight = yDivision / this.seriesLen; - - if (w.globals.isXNumeric) { - yDivision = w.globals.gridHeight / this.totalItems; - barHeight = yDivision / this.seriesLen; - } - - barHeight = barHeight * parseInt(this.barOptions.barHeight) / 100; - zeroW = this.baseLineInvertedY + w.globals.padHorizontal + (this.isReversed ? w.globals.gridWidth : 0) - (this.isReversed ? this.baseLineInvertedY * 2 : 0); - y = (yDivision - barHeight * this.seriesLen) / 2; - } else { - // width divided into equal parts - xDivision = w.globals.gridWidth / this.visibleItems; - barWidth = xDivision / this.seriesLen * parseInt(this.barOptions.columnWidth) / 100; - - if (w.globals.isXNumeric) { - // max barwidth should be equal to minXDiff to avoid overlap - xDivision = w.globals.minXDiff / this.xRatio; - barWidth = xDivision / this.seriesLen * parseInt(this.barOptions.columnWidth) / 100; - } - - zeroH = w.globals.gridHeight - this.baseLineY[this.yaxisIndex] - (this.isReversed ? w.globals.gridHeight : 0) + (this.isReversed ? this.baseLineY[this.yaxisIndex] * 2 : 0); - x = w.globals.padHorizontal + (xDivision - barWidth * this.seriesLen) / 2; - } - - return { - x: x, - y: y, - yDivision: yDivision, - xDivision: xDivision, - barHeight: barHeight, - barWidth: barWidth, - zeroH: zeroH, - zeroW: zeroW - }; - } - }, { - key: "drawBarPaths", - value: function drawBarPaths(_ref2) { - var indexes = _ref2.indexes, - barHeight = _ref2.barHeight, - strokeWidth = _ref2.strokeWidth, - pathTo = _ref2.pathTo, - pathFrom = _ref2.pathFrom, - zeroW = _ref2.zeroW, - x = _ref2.x, - y = _ref2.y, - yDivision = _ref2.yDivision, - elSeries = _ref2.elSeries; - var w = this.w; - var graphics = new Graphics(this.ctx); - var i = indexes.i; - var j = indexes.j; - var realIndex = indexes.realIndex; - var bc = indexes.bc; - - if (w.globals.isXNumeric) { - y = (w.globals.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight; - } - - var barYPosition = y + barHeight * this.visibleI; - pathTo = graphics.move(zeroW, barYPosition); - pathFrom = graphics.move(zeroW, barYPosition); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j); - } - - if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { - x = zeroW; - } else { - x = zeroW + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2; - } - - var endingShapeOpts = { - barHeight: barHeight, - strokeWidth: strokeWidth, - barYPosition: barYPosition, - x: x, - zeroW: zeroW - }; - var endingShape = this.barEndingShape(w, endingShapeOpts, this.series, i, j); - pathTo = pathTo + graphics.line(endingShape.newX, barYPosition) + endingShape.path + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); - pathFrom = pathFrom + graphics.line(zeroW, barYPosition) + endingShape.ending_p_from + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); - - if (!w.globals.isXNumeric) { - y = y + yDivision; - } - - if (this.barOptions.colors.backgroundBarColors.length > 0 && i === 0) { - if (bc >= this.barOptions.colors.backgroundBarColors.length) { - bc = 0; - } - - var bcolor = this.barOptions.colors.backgroundBarColors[bc]; - var rect = graphics.drawRect(0, barYPosition - barHeight * this.visibleI, w.globals.gridWidth, barHeight * this.seriesLen, 0, bcolor, this.barOptions.colors.backgroundBarOpacity); - elSeries.add(rect); - rect.node.classList.add('apexcharts-backgroundBar'); - } - - return { - pathTo: pathTo, - pathFrom: pathFrom, - x: x, - y: y, - barYPosition: barYPosition - }; - } - }, { - key: "drawColumnPaths", - value: function drawColumnPaths(_ref3) { - var indexes = _ref3.indexes, - x = _ref3.x, - y = _ref3.y, - xDivision = _ref3.xDivision, - pathTo = _ref3.pathTo, - pathFrom = _ref3.pathFrom, - barWidth = _ref3.barWidth, - zeroH = _ref3.zeroH, - strokeWidth = _ref3.strokeWidth, - elSeries = _ref3.elSeries; - var w = this.w; - var graphics = new Graphics(this.ctx); - var i = indexes.i; - var j = indexes.j; - var realIndex = indexes.realIndex; - var bc = indexes.bc; - - if (w.globals.isXNumeric) { - x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2; - } - - var barXPosition = x + barWidth * this.visibleI; - pathTo = graphics.move(barXPosition, zeroH); - pathFrom = graphics.move(barXPosition, zeroH); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j); - } - - if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { - y = zeroH; - } else { - y = zeroH - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2; - } - - var endingShapeOpts = { - barWidth: barWidth, - strokeWidth: strokeWidth, - barXPosition: barXPosition, - y: y, - zeroH: zeroH - }; - var endingShape = this.barEndingShape(w, endingShapeOpts, this.series, i, j); - pathTo = pathTo + graphics.line(barXPosition, endingShape.newY) + endingShape.path + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition - strokeWidth / 2, zeroH); - pathFrom = pathFrom + graphics.line(barXPosition, zeroH) + endingShape.ending_p_from + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition - strokeWidth / 2, zeroH); - - if (!w.globals.isXNumeric) { - x = x + xDivision; - } - - if (this.barOptions.colors.backgroundBarColors.length > 0 && i === 0) { - if (bc >= this.barOptions.colors.backgroundBarColors.length) { - bc = 0; - } - - var bcolor = this.barOptions.colors.backgroundBarColors[bc]; - var rect = graphics.drawRect(barXPosition - barWidth * this.visibleI, 0, barWidth * this.seriesLen, w.globals.gridHeight, 0, bcolor, this.barOptions.colors.backgroundBarOpacity); - elSeries.add(rect); - rect.node.classList.add('apexcharts-backgroundBar'); - } - - return { - pathTo: pathTo, - pathFrom: pathFrom, - x: x, - y: y, - barXPosition: barXPosition - }; - } - /** getPathFrom is a common function for bars/columns which is used to get previous paths when data changes. - * @memberof Bar - * @param {int} realIndex - current iterating i - * @param {int} j - current iterating series's j index - * @return {string} pathFrom is the string which will be appended in animations - **/ - - }, { - key: "getPathFrom", - value: function getPathFrom(realIndex, j) { - var w = this.w; - var pathFrom; - - for (var pp = 0; pp < w.globals.previousPaths.length; pp++) { - var gpp = w.globals.previousPaths[pp]; - - if (gpp.paths.length > 0 && parseInt(gpp.realIndex) === parseInt(realIndex)) { - if (typeof w.globals.previousPaths[pp].paths[j] !== 'undefined') { - pathFrom = w.globals.previousPaths[pp].paths[j].d; - } - } - } - - return pathFrom; - } - /** calculateBarDataLabels is used to calculate the positions for the data-labels - * It also sets the element's data attr for bars and calls drawCalculatedBarDataLabels() - * @memberof Bar - * @param {object} {barProps} most of the bar properties used throughout the bar - * drawing function - * @return {object} dataLabels node-element which you can append later - **/ - - }, { - key: "calculateDataLabelsPos", - value: function calculateDataLabelsPos(_ref4) { - var x = _ref4.x, - y = _ref4.y, - i = _ref4.i, - j = _ref4.j, - realIndex = _ref4.realIndex, - series = _ref4.series, - barHeight = _ref4.barHeight, - barWidth = _ref4.barWidth, - visibleSeries = _ref4.visibleSeries, - renderedPath = _ref4.renderedPath; - var w = this.w; - var graphics = new Graphics(this.ctx); - var strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; - var bcx = x + parseFloat(barWidth * visibleSeries); - var bcy = y + parseFloat(barHeight * visibleSeries); - - if (w.globals.isXNumeric && !w.globals.isBarHorizontal) { - bcx = x + parseFloat(barWidth * (visibleSeries + 1)) - strokeWidth; - bcy = y + parseFloat(barHeight * (visibleSeries + 1)) - strokeWidth; - } - - var dataLabels = null; - var dataLabelsX = x; - var dataLabelsY = y; - var dataLabelsPos = {}; - var dataLabelsConfig = w.config.dataLabels; - var barDataLabelsConfig = this.barOptions.dataLabels; - var offX = dataLabelsConfig.offsetX; - var offY = dataLabelsConfig.offsetY; - var textRects = { - width: 0, - height: 0 - }; - - if (w.config.dataLabels.enabled) { - textRects = graphics.getTextRects(w.globals.yLabelFormatters[0](w.globals.maxY), parseInt(dataLabelsConfig.style.fontSize)); - } - - if (this.isHorizontal) { - dataLabelsPos = this.calculateBarsDataLabelsPosition({ - x: x, - y: y, - i: i, - j: j, - renderedPath: renderedPath, - bcy: bcy, - barHeight: barHeight, - barWidth: barWidth, - textRects: textRects, - strokeWidth: strokeWidth, - dataLabelsX: dataLabelsX, - dataLabelsY: dataLabelsY, - barDataLabelsConfig: barDataLabelsConfig, - offX: offX, - offY: offY - }); - } else { - dataLabelsPos = this.calculateColumnsDataLabelsPosition({ - x: x, - y: y, - i: i, - j: j, - renderedPath: renderedPath, - realIndex: realIndex, - bcx: bcx, - bcy: bcy, - barHeight: barHeight, - barWidth: barWidth, - textRects: textRects, - strokeWidth: strokeWidth, - dataLabelsY: dataLabelsY, - barDataLabelsConfig: barDataLabelsConfig, - offX: offX, - offY: offY - }); - } - - renderedPath.attr({ - cy: dataLabelsPos.bcy, - cx: dataLabelsPos.bcx, - j: j, - val: series[i][j], - barHeight: barHeight, - barWidth: barWidth - }); - dataLabels = this.drawCalculatedDataLabels({ - x: dataLabelsPos.dataLabelsX, - y: dataLabelsPos.dataLabelsY, - val: series[i][j], - i: realIndex, - j: j, - barWidth: barWidth, - barHeight: barHeight, - textRects: textRects, - dataLabelsConfig: dataLabelsConfig - }); - return dataLabels; - } - }, { - key: "calculateColumnsDataLabelsPosition", - value: function calculateColumnsDataLabelsPosition(opts) { - var w = this.w; - var i = opts.i, - j = opts.j, - y = opts.y, - bcx = opts.bcx, - barWidth = opts.barWidth, - barHeight = opts.barHeight, - textRects = opts.textRects, - dataLabelsY = opts.dataLabelsY, - barDataLabelsConfig = opts.barDataLabelsConfig, - strokeWidth = opts.strokeWidth, - offX = opts.offX, - offY = opts.offY; - var dataLabelsX; - var dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints; - bcx = bcx - strokeWidth / 2; - - if (w.globals.isXNumeric) { - dataLabelsX = bcx - barWidth / 2 + offX; - } else { - dataLabelsX = bcx - dataPointsDividedWidth + barWidth / 2 + offX; - } - - var valIsNegative = this.series[i][j] <= 0; - - if (this.isReversed) { - y = y - barHeight; - } - - switch (barDataLabelsConfig.position) { - case 'center': - if (valIsNegative) { - dataLabelsY = y + barHeight / 2 + textRects.height / 2 + offY; - } else { - dataLabelsY = y + barHeight / 2 + textRects.height / 2 - offY; - } - - break; - - case 'bottom': - if (valIsNegative) { - dataLabelsY = y + barHeight + textRects.height + strokeWidth + offY; - } else { - dataLabelsY = y + barHeight - textRects.height / 2 + strokeWidth - offY; - } - - break; - - case 'top': - if (valIsNegative) { - dataLabelsY = y - textRects.height / 2 - offY; - } else { - dataLabelsY = y + textRects.height + offY; - } - - break; - } - - if (!w.config.chart.stacked) { - if (dataLabelsY < 0) { - dataLabelsY = 0 + strokeWidth; - } else if (dataLabelsY + textRects.height / 3 > w.globals.gridHeight) { - dataLabelsY = w.globals.gridHeight - strokeWidth; - } - } - - return { - bcx: bcx, - bcy: y, - dataLabelsX: dataLabelsX, - dataLabelsY: dataLabelsY - }; - } - }, { - key: "calculateBarsDataLabelsPosition", - value: function calculateBarsDataLabelsPosition(opts) { - var w = this.w; - var x = opts.x, - i = opts.i, - j = opts.j, - bcy = opts.bcy, - barHeight = opts.barHeight, - barWidth = opts.barWidth, - textRects = opts.textRects, - dataLabelsX = opts.dataLabelsX, - strokeWidth = opts.strokeWidth, - barDataLabelsConfig = opts.barDataLabelsConfig, - offX = opts.offX, - offY = opts.offY; - var dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints; - var dataLabelsY = bcy - dataPointsDividedHeight + barHeight / 2 + textRects.height / 2 + offY - 3; - var valIsNegative = this.series[i][j] <= 0; - - if (this.isReversed) { - x = x + barWidth; - } - - switch (barDataLabelsConfig.position) { - case 'center': - if (valIsNegative) { - dataLabelsX = x - barWidth / 2 - offX; - } else { - dataLabelsX = x - barWidth / 2 + offX; - } - - break; - - case 'bottom': - if (valIsNegative) { - dataLabelsX = x - barWidth - strokeWidth - Math.round(textRects.width / 2) - offX; - } else { - dataLabelsX = x - barWidth + strokeWidth + Math.round(textRects.width / 2) + offX; - } - - break; - - case 'top': - if (valIsNegative) { - dataLabelsX = x - strokeWidth + Math.round(textRects.width / 2) - offX; - } else { - dataLabelsX = x - strokeWidth - Math.round(textRects.width / 2) + offX; - } - - break; - } - - if (!w.config.chart.stacked) { - if (dataLabelsX < 0) { - dataLabelsX = dataLabelsX + textRects.width + strokeWidth; - } else if (dataLabelsX + textRects.width / 2 > w.globals.gridWidth) { - dataLabelsX = w.globals.gridWidth - textRects.width - strokeWidth; - } - } - - return { - bcx: x, - bcy: bcy, - dataLabelsX: dataLabelsX, - dataLabelsY: dataLabelsY - }; - } - }, { - key: "drawCalculatedDataLabels", - value: function drawCalculatedDataLabels(_ref5) { - var x = _ref5.x, - y = _ref5.y, - val = _ref5.val, - i = _ref5.i, - j = _ref5.j, - textRects = _ref5.textRects, - barHeight = _ref5.barHeight, - barWidth = _ref5.barWidth, - dataLabelsConfig = _ref5.dataLabelsConfig; - var w = this.w; - var dataLabels = new DataLabels(this.ctx); - var graphics = new Graphics(this.ctx); - var formatter = dataLabelsConfig.formatter; - var elDataLabelsWrap = null; - var isSeriesNotCollapsed = w.globals.collapsedSeriesIndices.indexOf(i) > -1; - - if (dataLabelsConfig.enabled && !isSeriesNotCollapsed) { - elDataLabelsWrap = graphics.group({ - class: 'apexcharts-data-labels' - }); - var text = ''; - - if (typeof val !== 'undefined' && val !== null) { - text = formatter(val, { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - - if (val === 0 && w.config.chart.stacked) { - // in a stacked bar/column chart, 0 value should be neglected as it will overlap on the next element - text = ''; - } - - if (w.config.chart.stacked && this.barOptions.dataLabels.hideOverflowingLabels) { - // if there is not enough space to draw the label in the bar/column rect, check hideOverflowingLabels property to prevent overflowing on wrong rect - // Note: This issue is only seen in stacked charts - if (this.isHorizontal) { - barWidth = this.series[i][j] / this.yRatio[this.yaxisIndex]; - - if (textRects.width / 1.6 > barWidth) { - text = ''; - } - } else { - barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; - - if (textRects.height / 1.6 > barHeight) { - text = ''; - } - } - } - - dataLabels.plotDataLabelsText({ - x: x, - y: y, - text: text, - i: i, - j: j, - parent: elDataLabelsWrap, - dataLabelsConfig: dataLabelsConfig, - alwaysDrawDataLabel: true, - offsetCorrection: true - }); - } - - return elDataLabelsWrap; - } - /** barEndingShape draws the various shapes on top of bars/columns - * @memberof Bar - * @param {object} w - chart context - * @param {object} opts - consists several properties like barHeight/barWidth - * @param {array} series - global primary series - * @param {int} i - current iterating series's index - * @param {int} j - series's j of i - * @return {object} path - ending shape whether round/arrow - * ending_p_from - similar to pathFrom - * newY - which is calculated from existing y and new shape's top - **/ - - }, { - key: "barEndingShape", - value: function barEndingShape(w, opts, series, i, j) { - var graphics = new Graphics(this.ctx); - - if (this.isHorizontal) { - var endingShape = null; - var endingShapeFrom = ''; - var x = opts.x; - - if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) { - var inverse = series[i][j] < 0; - var eX = opts.barHeight / 2 - opts.strokeWidth; - if (inverse) eX = -opts.barHeight / 2 - opts.strokeWidth; - - if (!w.config.chart.stacked) { - if (this.barOptions.endingShape === 'rounded') { - x = opts.x - eX / 2; - } - } - - switch (this.barOptions.endingShape) { - case 'flat': - endingShape = graphics.line(x, opts.barYPosition + opts.barHeight - opts.strokeWidth); - break; - - case 'rounded': - endingShape = graphics.quadraticCurve(x + eX, opts.barYPosition + (opts.barHeight - opts.strokeWidth) / 2, x, opts.barYPosition + opts.barHeight - opts.strokeWidth); - break; - } - } - - return { - path: endingShape, - ending_p_from: endingShapeFrom, - newX: x - }; - } else { - var _endingShape = null; - var _endingShapeFrom = ''; - var y = opts.y; - - if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) { - var _inverse = series[i][j] < 0; - - var eY = opts.barWidth / 2 - opts.strokeWidth; - if (_inverse) eY = -opts.barWidth / 2 - opts.strokeWidth; - - if (!w.config.chart.stacked) { - // the shape exceeds the chart height, hence reduce y - if (this.barOptions.endingShape === 'rounded') { - y = y + eY / 2; - } - } - - switch (this.barOptions.endingShape) { - case 'flat': - _endingShape = graphics.line(opts.barXPosition + opts.barWidth - opts.strokeWidth, y); - break; - - case 'rounded': - _endingShape = graphics.quadraticCurve(opts.barXPosition + (opts.barWidth - opts.strokeWidth) / 2, y - eY, opts.barXPosition + opts.barWidth - opts.strokeWidth, y); - break; - } - } - - return { - path: _endingShape, - ending_p_from: _endingShapeFrom, - newY: y - }; - } - } - }]); - - return Bar; -}(); - -/** - * ApexCharts BarStacked Class responsible for drawing both Stacked Columns and Bars. - * - * @module BarStacked - * The whole calculation for stacked bar/column is different from normal bar/column, - * hence it makes sense to derive a new class for it extending most of the props of Parent Bar - **/ - -var BarStacked = -/*#__PURE__*/ -function (_Bar) { - _inherits(BarStacked, _Bar); - - function BarStacked() { - _classCallCheck(this, BarStacked); - - return _possibleConstructorReturn(this, _getPrototypeOf(BarStacked).apply(this, arguments)); - } - - _createClass(BarStacked, [{ - key: "draw", - value: function draw(series, seriesIndex) { - var w = this.w; - this.graphics = new Graphics(this.ctx); - this.fill = new Fill(this.ctx); - this.bar = new Bar(this.ctx, this.xyRatios); - var coreUtils = new CoreUtils(this.ctx, w); - series = coreUtils.getLogSeries(series); - this.yRatio = coreUtils.getLogYRatios(this.yRatio); - this.initVariables(series); - - if (w.config.chart.stackType === '100%') { - series = w.globals.seriesPercent.slice(); - } - - this.series = series; - this.totalItems = 0; - this.prevY = []; // y position on chart - - this.prevX = []; // x position on chart - - this.prevYF = []; // y position including shapes on chart - - this.prevXF = []; // x position including shapes on chart - - this.prevYVal = []; // y values (series[i][j]) in columns - - this.prevXVal = []; // x values (series[i][j]) in bars - - this.xArrj = []; // xj indicates x position on graph in bars - - this.xArrjF = []; // xjF indicates bar's x position + endingshape's positions in bars - - this.xArrjVal = []; // x val means the actual series's y values in horizontal/bars - - this.yArrj = []; // yj indicates y position on graph in columns - - this.yArrjF = []; // yjF indicates bar's y position + endingshape's positions in columns - - this.yArrjVal = []; // y val means the actual series's y values in columns - - for (var sl = 0; sl < series.length; sl++) { - if (series[sl].length > 0) { - this.totalItems += series[sl].length; - } - } - - var ret = this.graphics.group({ - class: 'apexcharts-bar-series apexcharts-plot-series' - }); - var x = 0; - var y = 0; - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - var pathTo = void 0, - pathFrom = void 0; - var xDivision = void 0; // xDivision is the GRIDWIDTH divided by number of datapoints (columns) - - var yDivision = void 0; // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) - - var zeroH = void 0; // zeroH is the baseline where 0 meets y axis - - var zeroW = void 0; // zeroW is the baseline where 0 meets x axis - - var xArrValues = []; - var yArrValues = []; - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; - - if (this.yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; // el to which series will be drawn - - var elSeries = this.graphics.group({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), - rel: i + 1, - 'data:realIndex': realIndex - }); // eldatalabels - - var elDataLabelsWrap = this.graphics.group({ - class: 'apexcharts-datalabels' - }); - var strokeWidth = 0; - var barHeight = 0; - var barWidth = 0; - var initPositions = this.initialPositions(x, y, xDivision, yDivision, zeroH, zeroW); - y = initPositions.y; - barHeight = initPositions.barHeight; - yDivision = initPositions.yDivision; - zeroW = initPositions.zeroW; - x = initPositions.x; - barWidth = initPositions.barWidth; - xDivision = initPositions.xDivision; - zeroH = initPositions.zeroH; - this.yArrj = []; - this.yArrjF = []; - this.yArrjVal = []; - this.xArrj = []; - this.xArrjF = []; - this.xArrjVal = []; // if (!this.horizontal) { - // this.xArrj.push(x + barWidth / 2) - // } - - for (var j = 0; j < w.globals.dataPoints; j++) { - if (w.config.stroke.show) { - if (this.isNullValue) { - strokeWidth = 0; - } else { - strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; - } - } - - var paths = null; - - if (this.isHorizontal) { - paths = this.drawBarPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - barHeight: barHeight, - strokeWidth: strokeWidth, - pathTo: pathTo, - pathFrom: pathFrom, - zeroW: zeroW, - x: x, - y: y, - yDivision: yDivision, - elSeries: elSeries - }); - barWidth = this.series[i][j] / this.invertedYRatio; - } else { - paths = this.drawColumnPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - x: x, - y: y, - xDivision: xDivision, - pathTo: pathTo, - pathFrom: pathFrom, - barWidth: barWidth, - zeroH: zeroH, - strokeWidth: strokeWidth, - elSeries: elSeries - }); - barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; - } - - pathTo = paths.pathTo; - pathFrom = paths.pathFrom; - y = paths.y; - x = paths.x; - xArrValues.push(x); - yArrValues.push(y); - var pathFill = this.bar.getPathFillColor(series, i, j, realIndex); - elSeries = this.renderSeries({ - realIndex: realIndex, - pathFill: pathFill, - j: j, - i: i, - pathFrom: pathFrom, - pathTo: pathTo, - strokeWidth: strokeWidth, - elSeries: elSeries, - x: x, - y: y, - series: series, - barHeight: barHeight, - barWidth: barWidth, - elDataLabelsWrap: elDataLabelsWrap, - type: 'bar', - visibleSeries: 0 - }); - } // push all x val arrays into main xArr - - - w.globals.seriesXvalues[realIndex] = xArrValues; - w.globals.seriesYvalues[realIndex] = yArrValues; // push all current y values array to main PrevY Array - - this.prevY.push(this.yArrj); - this.prevYF.push(this.yArrjF); - this.prevYVal.push(this.yArrjVal); - this.prevX.push(this.xArrj); - this.prevXF.push(this.xArrjF); - this.prevXVal.push(this.xArrjVal); - ret.add(elSeries); - } - - return ret; - } - }, { - key: "initialPositions", - value: function initialPositions(x, y, xDivision, yDivision, zeroH, zeroW) { - var w = this.w; - var barHeight, barWidth; - - if (this.isHorizontal) { - // height divided into equal parts - yDivision = w.globals.gridHeight / w.globals.dataPoints; - barHeight = yDivision; - barHeight = barHeight * parseInt(w.config.plotOptions.bar.barHeight) / 100; - zeroW = this.baseLineInvertedY + w.globals.padHorizontal + (this.isReversed ? w.globals.gridWidth : 0) - (this.isReversed ? this.baseLineInvertedY * 2 : 0); // initial y position is half of barHeight * half of number of Bars - - y = (yDivision - barHeight) / 2; - } else { - // width divided into equal parts - xDivision = w.globals.gridWidth / w.globals.dataPoints; - barWidth = xDivision; - - if (w.globals.isXNumeric) { - xDivision = w.globals.minXDiff / this.xRatio; - barWidth = xDivision * parseInt(this.barOptions.columnWidth) / 100; - } else { - barWidth = barWidth * parseInt(w.config.plotOptions.bar.columnWidth) / 100; - } - - zeroH = this.baseLineY[this.yaxisIndex] + (this.isReversed ? w.globals.gridHeight : 0) - (this.isReversed ? this.baseLineY[this.yaxisIndex] * 2 : 0); // initial x position is one third of barWidth - - x = w.globals.padHorizontal + (xDivision - barWidth) / 2; - } - - return { - x: x, - y: y, - yDivision: yDivision, - xDivision: xDivision, - barHeight: barHeight, - barWidth: barWidth, - zeroH: zeroH, - zeroW: zeroW - }; - } - }, { - key: "drawBarPaths", - value: function drawBarPaths(_ref) { - var indexes = _ref.indexes, - barHeight = _ref.barHeight, - strokeWidth = _ref.strokeWidth, - pathTo = _ref.pathTo, - pathFrom = _ref.pathFrom, - zeroW = _ref.zeroW, - x = _ref.x, - y = _ref.y, - yDivision = _ref.yDivision, - elSeries = _ref.elSeries; - var w = this.w; - var barYPosition = y; - var barXPosition; - var i = indexes.i; - var j = indexes.j; - var realIndex = indexes.realIndex; - var bc = indexes.bc; - var prevBarW = 0; - - for (var k = 0; k < this.prevXF.length; k++) { - prevBarW = prevBarW + this.prevXF[k][j]; - } - - if (i > 0) { - var bXP = zeroW; - - if (this.prevXVal[i - 1][j] < 0) { - if (this.series[i][j] >= 0) { - bXP = this.prevX[i - 1][j] + prevBarW - (this.isReversed ? prevBarW : 0) * 2; - } else { - bXP = this.prevX[i - 1][j]; - } - } else if (this.prevXVal[i - 1][j] >= 0) { - if (this.series[i][j] >= 0) { - bXP = this.prevX[i - 1][j]; - } else { - bXP = this.prevX[i - 1][j] - prevBarW + (this.isReversed ? prevBarW : 0) * 2; - } - } - - barXPosition = bXP; - } else { - // the first series will not have prevX values - barXPosition = zeroW; - } - - if (this.series[i][j] === null) { - x = barXPosition; - } else { - x = barXPosition + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2; - } - - var endingShapeOpts = { - barHeight: barHeight, - strokeWidth: strokeWidth, - invertedYRatio: this.invertedYRatio, - barYPosition: barYPosition, - x: x - }; - var endingShape = this.bar.barEndingShape(w, endingShapeOpts, this.series, i, j); - - if (this.series.length > 1 && i !== this.endingShapeOnSeriesNumber) { - // revert back to flat shape if not last series - endingShape.path = this.graphics.line(endingShape.newX, barYPosition + barHeight - strokeWidth); - } - - this.xArrj.push(endingShape.newX); - this.xArrjF.push(Math.abs(barXPosition - endingShape.newX)); - this.xArrjVal.push(this.series[i][j]); - pathTo = this.graphics.move(barXPosition, barYPosition); - pathFrom = this.graphics.move(barXPosition, barYPosition); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.bar.getPathFrom(realIndex, j, false); - } - - pathTo = pathTo + this.graphics.line(endingShape.newX, barYPosition) + endingShape.path + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition); - pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition); - - if (w.config.plotOptions.bar.colors.backgroundBarColors.length > 0 && i === 0) { - if (bc >= w.config.plotOptions.bar.colors.backgroundBarColors.length) { - bc = 0; - } - - var bcolor = w.config.plotOptions.bar.colors.backgroundBarColors[bc]; - var rect = this.graphics.drawRect(0, barYPosition, w.globals.gridWidth, barHeight, 0, bcolor, w.config.plotOptions.bar.colors.backgroundBarOpacity); - elSeries.add(rect); - rect.node.classList.add('apexcharts-backgroundBar'); - } - - y = y + yDivision; - return { - pathTo: pathTo, - pathFrom: pathFrom, - x: x, - y: y - }; - } - }, { - key: "drawColumnPaths", - value: function drawColumnPaths(_ref2) { - var indexes = _ref2.indexes, - x = _ref2.x, - y = _ref2.y, - xDivision = _ref2.xDivision, - pathTo = _ref2.pathTo, - pathFrom = _ref2.pathFrom, - barWidth = _ref2.barWidth, - zeroH = _ref2.zeroH, - strokeWidth = _ref2.strokeWidth, - elSeries = _ref2.elSeries; - var w = this.w; - var i = indexes.i; - var j = indexes.j; - var realIndex = indexes.realIndex; - var bc = indexes.bc; - - if (w.globals.isXNumeric) { - var seriesVal = w.globals.seriesX[i][j]; - if (!seriesVal) seriesVal = 0; - x = (seriesVal - w.globals.minX) / this.xRatio - barWidth / 2; - } - - var barXPosition = x; - var barYPosition; - var prevBarH = 0; - - for (var k = 0; k < this.prevYF.length; k++) { - prevBarH = prevBarH + this.prevYF[k][j]; - } - - if (i > 0 && !w.globals.isXNumeric || i > 0 && w.globals.isXNumeric && w.globals.seriesX[i - 1][j] === w.globals.seriesX[i][j]) { - var bYP; - var prevYValue = this.prevY[i - 1][j]; - - if (this.prevYVal[i - 1][j] < 0) { - if (this.series[i][j] >= 0) { - bYP = prevYValue - prevBarH + (this.isReversed ? prevBarH : 0) * 2; - } else { - bYP = prevYValue; - } - } else { - if (this.series[i][j] >= 0) { - bYP = prevYValue; - } else { - bYP = prevYValue + prevBarH - (this.isReversed ? prevBarH : 0) * 2; - } - } - - barYPosition = bYP; - } else { - // the first series will not have prevY values, also if the prev index's series X doesn't matches the current index's series X, then start from zero - barYPosition = w.globals.gridHeight - zeroH; - } - - y = barYPosition - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2; - var endingShapeOpts = { - barWidth: barWidth, - strokeWidth: strokeWidth, - yRatio: this.yRatio[this.yaxisIndex], - barXPosition: barXPosition, - y: y - }; - var endingShape = this.bar.barEndingShape(w, endingShapeOpts, this.series, i, j); - this.yArrj.push(endingShape.newY); - this.yArrjF.push(Math.abs(barYPosition - endingShape.newY)); - this.yArrjVal.push(this.series[i][j]); - pathTo = this.graphics.move(barXPosition, barYPosition); - pathFrom = this.graphics.move(barXPosition, barYPosition); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.bar.getPathFrom(realIndex, j, false); - } - - pathTo = pathTo + this.graphics.line(barXPosition, endingShape.newY) + endingShape.path + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition - strokeWidth / 2, barYPosition); - pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition - strokeWidth / 2, barYPosition); - - if (w.config.plotOptions.bar.colors.backgroundBarColors.length > 0 && i === 0) { - if (bc >= w.config.plotOptions.bar.colors.backgroundBarColors.length) { - bc = 0; - } - - var bcolor = w.config.plotOptions.bar.colors.backgroundBarColors[bc]; - var rect = this.graphics.drawRect(barXPosition, 0, barWidth, w.globals.gridHeight, 0, bcolor, w.config.plotOptions.bar.colors.backgroundBarOpacity); - elSeries.add(rect); - rect.node.classList.add('apexcharts-backgroundBar'); - } - - x = x + xDivision; - return { - pathTo: pathTo, - pathFrom: pathFrom, - x: w.globals.isXNumeric ? x - xDivision : x, - y: y - }; - } - /* - * When user clicks on legends, the collapsed series will be filled with [0,0,0,...,0] - * We need to make sure, that the last series is not [0,0,0,...,0] - * as we need to draw shapes on the last series (for stacked bars/columns only) - * Hence, we are collecting all inner arrays in series which has [0,0,0...,0] - **/ - - }, { - key: "checkZeroSeries", - value: function checkZeroSeries(_ref3) { - var series = _ref3.series; - var w = this.w; - - for (var zs = 0; zs < series.length; zs++) { - var total = 0; - - for (var zsj = 0; zsj < series[w.globals.maxValsInArrayIndex].length; zsj++) { - total += series[zs][zsj]; - } - - if (total === 0) { - this.zeroSerieses.push(zs); - } - } // After getting all zeroserieses, we need to ensure whether endingshapeonSeries is not in that zeroseries array - - - for (var s = series.length - 1; s >= 0; s--) { - if (this.zeroSerieses.indexOf(s) > -1 && s === this.endingShapeOnSeriesNumber) { - this.endingShapeOnSeriesNumber -= 1; - } - } - } - }]); - - return BarStacked; -}(Bar); - -/** - * ApexCharts CandleStick Class responsible for drawing both Stacked Columns and Bars. - * - * @module CandleStick - **/ - -var CandleStick = -/*#__PURE__*/ -function (_Bar) { - _inherits(CandleStick, _Bar); - - function CandleStick() { - _classCallCheck(this, CandleStick); - - return _possibleConstructorReturn(this, _getPrototypeOf(CandleStick).apply(this, arguments)); - } - - _createClass(CandleStick, [{ - key: "draw", - value: function draw(series, seriesIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - this.candlestickOptions = this.w.config.plotOptions.candlestick; - var coreUtils = new CoreUtils(this.ctx, w); - series = coreUtils.getLogSeries(series); - this.series = series; - this.yRatio = coreUtils.getLogYRatios(this.yRatio); - this.initVariables(series); - var ret = graphics.group({ - class: 'apexcharts-candlestick-series apexcharts-plot-series' - }); - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - var pathTo = void 0, - pathFrom = void 0; - var x = void 0, - y = void 0, - xDivision = void 0, - // xDivision is the GRIDWIDTH divided by number of datapoints (columns) - zeroH = void 0; // zeroH is the baseline where 0 meets y axis - - var yArrj = []; // hold y values of current iterating series - - var xArrj = []; // hold x values of current iterating series - - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn - - var elSeries = graphics.group({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), - rel: i + 1, - 'data:realIndex': realIndex - }); - - if (series[i].length > 0) { - this.visibleI = this.visibleI + 1; - } - - var strokeWidth = 0; - var barHeight = 0; - var barWidth = 0; - - if (this.yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - var initPositions = this.initialPositions(); - y = initPositions.y; - barHeight = initPositions.barHeight; - x = initPositions.x; - barWidth = initPositions.barWidth; - xDivision = initPositions.xDivision; - zeroH = initPositions.zeroH; - xArrj.push(x + barWidth / 2); // eldatalabels - - var elDataLabelsWrap = graphics.group({ - class: 'apexcharts-datalabels' - }); - - for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { - if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) { - this.isNullValue = true; - } else { - this.isNullValue = false; - } - - if (w.config.stroke.show) { - if (this.isNullValue) { - strokeWidth = 0; - } else { - strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; - } - } - - var color = void 0; - var paths = this.drawCandleStickPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - x: x, - y: y, - xDivision: xDivision, - pathTo: pathTo, - pathFrom: pathFrom, - barWidth: barWidth, - zeroH: zeroH, - strokeWidth: strokeWidth, - elSeries: elSeries - }); - pathTo = paths.pathTo; - pathFrom = paths.pathFrom; - y = paths.y; - x = paths.x; - color = paths.color; // push current X - - if (j > 0) { - xArrj.push(x + barWidth / 2); - } - - yArrj.push(y); - var pathFill = fill.fillPath({ - seriesNumber: realIndex, - color: color, - value: series[i][j] - }); - var lineFill = this.candlestickOptions.wick.useFillColor ? color : undefined; - elSeries = this.renderSeries({ - realIndex: realIndex, - pathFill: pathFill, - lineFill: lineFill, - j: j, - i: i, - pathFrom: pathFrom, - pathTo: pathTo, - strokeWidth: strokeWidth, - elSeries: elSeries, - x: x, - y: y, - series: series, - barHeight: barHeight, - barWidth: barWidth, - elDataLabelsWrap: elDataLabelsWrap, - visibleSeries: this.visibleI, - type: 'candlestick' - }); - } // push all x val arrays into main xArr - - - w.globals.seriesXvalues[realIndex] = xArrj; - w.globals.seriesYvalues[realIndex] = yArrj; - ret.add(elSeries); - } - - return ret; - } - }, { - key: "drawCandleStickPaths", - value: function drawCandleStickPaths(_ref) { - var indexes = _ref.indexes, - x = _ref.x, - y = _ref.y, - xDivision = _ref.xDivision, - pathTo = _ref.pathTo, - pathFrom = _ref.pathFrom, - barWidth = _ref.barWidth, - zeroH = _ref.zeroH, - strokeWidth = _ref.strokeWidth; - var w = this.w; - var graphics = new Graphics(this.ctx); - var i = indexes.i; - var j = indexes.j; - var isPositive = true; - var colorPos = w.config.plotOptions.candlestick.colors.upward; - var colorNeg = w.config.plotOptions.candlestick.colors.downward; - var yRatio = this.yRatio[this.yaxisIndex]; - var realIndex = indexes.realIndex; - var ohlc = this.getOHLCValue(realIndex, j); - var l1 = zeroH; - var l2 = zeroH; - - if (ohlc.o > ohlc.c) { - isPositive = false; - } - - var y1 = Math.min(ohlc.o, ohlc.c); - var y2 = Math.max(ohlc.o, ohlc.c); - - if (w.globals.isXNumeric) { - x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2; - } - - var barXPosition = x + barWidth * this.visibleI; - - if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { - y1 = zeroH; - } else { - y1 = zeroH - y1 / yRatio; - y2 = zeroH - y2 / yRatio; - l1 = zeroH - ohlc.h / yRatio; - l2 = zeroH - ohlc.l / yRatio; - } - - pathTo = graphics.move(barXPosition, zeroH); - pathFrom = graphics.move(barXPosition, y1); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j, true); - } - - pathTo = graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2); - pathFrom = pathFrom + graphics.move(barXPosition, y1); - - if (!w.globals.isXNumeric) { - x = x + xDivision; - } - - return { - pathTo: pathTo, - pathFrom: pathFrom, - x: x, - y: y2, - barXPosition: barXPosition, - color: isPositive ? colorPos : colorNeg - }; - } - }, { - key: "getOHLCValue", - value: function getOHLCValue(i, j) { - var w = this.w; - return { - o: w.globals.seriesCandleO[i][j], - h: w.globals.seriesCandleH[i][j], - l: w.globals.seriesCandleL[i][j], - c: w.globals.seriesCandleC[i][j] - }; - } - }]); - - return CandleStick; -}(Bar); - -var Crosshairs = -/*#__PURE__*/ -function () { - function Crosshairs(ctx) { - _classCallCheck(this, Crosshairs); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Crosshairs, [{ - key: "drawXCrosshairs", - value: function drawXCrosshairs() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var filters = new Filters(this.ctx); - var crosshairGradient = w.config.xaxis.crosshairs.fill.gradient; - var crosshairShadow = w.config.xaxis.crosshairs.dropShadow; - var fillType = w.config.xaxis.crosshairs.fill.type; - var gradientFrom = crosshairGradient.colorFrom; - var gradientTo = crosshairGradient.colorTo; - var opacityFrom = crosshairGradient.opacityFrom; - var opacityTo = crosshairGradient.opacityTo; - var stops = crosshairGradient.stops; - var shadow = 'none'; - var dropShadow = crosshairShadow.enabled; - var shadowLeft = crosshairShadow.left; - var shadowTop = crosshairShadow.top; - var shadowBlur = crosshairShadow.blur; - var shadowColor = crosshairShadow.color; - var shadowOpacity = crosshairShadow.opacity; - var xcrosshairsFill = w.config.xaxis.crosshairs.fill.color; - - if (w.config.xaxis.crosshairs.show) { - if (fillType === 'gradient') { - xcrosshairsFill = graphics.drawGradient('vertical', gradientFrom, gradientTo, opacityFrom, opacityTo, null, stops, null); - } - - var xcrosshairs = graphics.drawRect(); - - if (w.config.xaxis.crosshairs.width === 1) { - // to prevent drawing 2 lines, convert rect to line - xcrosshairs = graphics.drawLine(); - } - - xcrosshairs.attr({ - class: 'apexcharts-xcrosshairs', - x: 0, - y: 0, - y2: w.globals.gridHeight, - width: Utils.isNumber(w.config.xaxis.crosshairs.width) ? w.config.xaxis.crosshairs.width : 0, - height: w.globals.gridHeight, - fill: xcrosshairsFill, - filter: shadow, - 'fill-opacity': w.config.xaxis.crosshairs.opacity, - stroke: w.config.xaxis.crosshairs.stroke.color, - 'stroke-width': w.config.xaxis.crosshairs.stroke.width, - 'stroke-dasharray': w.config.xaxis.crosshairs.stroke.dashArray - }); - - if (dropShadow) { - xcrosshairs = filters.dropShadow(xcrosshairs, { - left: shadowLeft, - top: shadowTop, - blur: shadowBlur, - color: shadowColor, - opacity: shadowOpacity - }); - } - - w.globals.dom.elGraphical.add(xcrosshairs); - } - } - }, { - key: "drawYCrosshairs", - value: function drawYCrosshairs() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var crosshair = w.config.yaxis[0].crosshairs; - - if (w.config.yaxis[0].crosshairs.show) { - var ycrosshairs = graphics.drawLine(0, 0, w.globals.gridWidth, 0, crosshair.stroke.color, crosshair.stroke.dashArray, crosshair.stroke.width); - ycrosshairs.attr({ - class: 'apexcharts-ycrosshairs' - }); - w.globals.dom.elGraphical.add(ycrosshairs); - } // draw an invisible crosshair to help in positioning the yaxis tooltip - - - var ycrosshairsHidden = graphics.drawLine(0, 0, w.globals.gridWidth, 0, crosshair.stroke.color, 0, 0); - ycrosshairsHidden.attr({ - class: 'apexcharts-ycrosshairs-hidden' - }); - w.globals.dom.elGraphical.add(ycrosshairsHidden); - } - }]); - - return Crosshairs; -}(); - -/** - * ApexCharts HeatMap Class. - * @module HeatMap - **/ - -var HeatMap = -/*#__PURE__*/ -function () { - function HeatMap(ctx, xyRatios) { - _classCallCheck(this, HeatMap); - - this.ctx = ctx; - this.w = ctx.w; - this.xRatio = xyRatios.xRatio; - this.yRatio = xyRatios.yRatio; - this.negRange = false; - this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation; - this.rectRadius = this.w.config.plotOptions.heatmap.radius; - this.strokeWidth = this.w.config.stroke.width; - } - - _createClass(HeatMap, [{ - key: "draw", - value: function draw(series) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var ret = graphics.group({ - class: 'apexcharts-heatmap' - }); - ret.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); // width divided into equal parts - - var xDivision = w.globals.gridWidth / w.globals.dataPoints; - var yDivision = w.globals.gridHeight / w.globals.series.length; - var y1 = 0; - var rev = false; - this.checkColorRange(); - var heatSeries = series.slice(); - - if (w.config.yaxis[0].reversed) { - rev = true; - heatSeries.reverse(); - } - - for (var i = rev ? 0 : heatSeries.length - 1; rev ? i < heatSeries.length : i >= 0; rev ? i++ : i--) { - // el to which series will be drawn - var elSeries = graphics.group({ - class: "apexcharts-series apexcharts-heatmap-series", - seriesName: Utils.escapeString(w.globals.seriesNames[i]), - rel: i + 1, - 'data:realIndex': i - }); - - if (w.config.chart.dropShadow.enabled) { - var shadow = w.config.chart.dropShadow; - var filters = new Filters(this.ctx); - filters.dropShadow(elSeries, shadow, i); - } - - var x1 = 0; - - for (var j = 0; j < heatSeries[i].length; j++) { - var colorShadePercent = 1; - var heatColorProps = this.determineHeatColor(i, j); - - if (w.globals.hasNegs || this.negRange) { - var shadeIntensity = w.config.plotOptions.heatmap.shadeIntensity; - - if (w.config.plotOptions.heatmap.reverseNegativeShade) { - if (heatColorProps.percent < 0) { - colorShadePercent = heatColorProps.percent / 100 * (shadeIntensity * 1.25); - } else { - colorShadePercent = (1 - heatColorProps.percent / 100) * (shadeIntensity * 1.25); - } - } else { - if (heatColorProps.percent < 0) { - colorShadePercent = 1 - (1 + heatColorProps.percent / 100) * shadeIntensity; - } else { - colorShadePercent = (1 - heatColorProps.percent / 100) * shadeIntensity; - } - } - } else { - colorShadePercent = 1 - heatColorProps.percent / 100; - } - - var color = heatColorProps.color; - - if (w.config.plotOptions.heatmap.enableShades) { - var utils = new Utils(); - color = Utils.hexToRgba(utils.shadeColor(colorShadePercent, heatColorProps.color), w.config.fill.opacity); - } - - var radius = this.rectRadius; - var rect = graphics.drawRect(x1, y1, xDivision, yDivision, radius); - rect.attr({ - cx: x1, - cy: y1 - }); - rect.node.classList.add('apexcharts-heatmap-rect'); - elSeries.add(rect); - rect.attr({ - fill: color, - i: i, - index: i, - j: j, - val: heatSeries[i][j], - 'stroke-width': this.strokeWidth, - stroke: w.globals.stroke.colors[0], - color: color - }); - rect.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this, rect)); - rect.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this, rect)); - rect.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this, rect)); - - if (w.config.chart.animations.enabled && !w.globals.dataChanged) { - var speed = 1; - - if (!w.globals.resized) { - speed = w.config.chart.animations.speed; - } - - this.animateHeatMap(rect, x1, y1, xDivision, yDivision, speed); - } - - if (w.globals.dataChanged) { - var _speed = 1; - - if (this.dynamicAnim.enabled && w.globals.shouldAnimate) { - _speed = this.dynamicAnim.speed; - var colorFrom = w.globals.previousPaths[i] && w.globals.previousPaths[i][j] && w.globals.previousPaths[i][j].color; - if (!colorFrom) colorFrom = 'rgba(255, 255, 255, 0)'; - this.animateHeatColor(rect, Utils.isColorHex(colorFrom) ? colorFrom : Utils.rgb2hex(colorFrom), Utils.isColorHex(color) ? color : Utils.rgb2hex(color), _speed); - } - } - - var dataLabels = this.calculateHeatmapDataLabels({ - x: x1, - y: y1, - i: i, - j: j, - series: heatSeries, - rectHeight: yDivision, - rectWidth: xDivision - }); - - if (dataLabels !== null) { - elSeries.add(dataLabels); - } - - x1 = x1 + xDivision; - } - - y1 = y1 + yDivision; - ret.add(elSeries); - } // adjust yaxis labels for heatmap - - - var yAxisScale = w.globals.yAxisScale[0].result.slice(); - - if (w.config.yaxis[0].reversed) { - yAxisScale.unshift(''); - } else { - yAxisScale.push(''); - } - - w.globals.yAxisScale[0].result = yAxisScale; - var divisor = w.globals.gridHeight / w.globals.series.length; - w.config.yaxis[0].labels.offsetY = -(divisor / 2); - return ret; - } - }, { - key: "checkColorRange", - value: function checkColorRange() { - var _this = this; - - var w = this.w; - var heatmap = w.config.plotOptions.heatmap; - - if (heatmap.colorScale.ranges.length > 0) { - heatmap.colorScale.ranges.map(function (range, index) { - if (range.from < 0) { - _this.negRange = true; - } - }); - } - } - }, { - key: "determineHeatColor", - value: function determineHeatColor(i, j) { - var w = this.w; - var val = w.globals.series[i][j]; - var heatmap = w.config.plotOptions.heatmap; - var seriesNumber = heatmap.colorScale.inverse ? j : i; - var color = w.globals.colors[seriesNumber]; - var min = Math.min.apply(Math, _toConsumableArray(w.globals.series[i])); - var max = Math.max.apply(Math, _toConsumableArray(w.globals.series[i])); - - if (!heatmap.distributed) { - min = w.globals.minY; - max = w.globals.maxY; - } - - if (typeof heatmap.colorScale.min !== 'undefined') { - min = heatmap.colorScale.min < w.globals.minY ? heatmap.colorScale.min : w.globals.minY; - max = heatmap.colorScale.max > w.globals.maxY ? heatmap.colorScale.max : w.globals.maxY; - } - - var total = Math.abs(max) + Math.abs(min); - var percent = 100 * val / (total === 0 ? total - 0.000001 : total); - - if (heatmap.colorScale.ranges.length > 0) { - var colorRange = heatmap.colorScale.ranges; - colorRange.map(function (range, index) { - if (val >= range.from && val <= range.to) { - color = range.color; - min = range.from; - max = range.to; - - var _total = Math.abs(max) + Math.abs(min); - - percent = 100 * val / (_total === 0 ? _total - 0.000001 : _total); - } - }); - } - - return { - color: color, - percent: percent - }; - } - }, { - key: "calculateHeatmapDataLabels", - value: function calculateHeatmapDataLabels(_ref) { - var x = _ref.x, - y = _ref.y, - i = _ref.i, - j = _ref.j, - series = _ref.series, - rectHeight = _ref.rectHeight, - rectWidth = _ref.rectWidth; - var w = this.w; // let graphics = new Graphics(this.ctx) - - var dataLabelsConfig = w.config.dataLabels; - var graphics = new Graphics(this.ctx); - var dataLabels = new DataLabels(this.ctx); - var formatter = dataLabelsConfig.formatter; - var elDataLabelsWrap = null; - - if (dataLabelsConfig.enabled) { - elDataLabelsWrap = graphics.group({ - class: 'apexcharts-data-labels' - }); - var offX = dataLabelsConfig.offsetX; - var offY = dataLabelsConfig.offsetY; - var dataLabelsX = x + rectWidth / 2 + offX; - var dataLabelsY = y + rectHeight / 2 + parseInt(dataLabelsConfig.style.fontSize) / 3 + offY; - var text = formatter(w.globals.series[i][j], { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - dataLabels.plotDataLabelsText({ - x: dataLabelsX, - y: dataLabelsY, - text: text, - i: i, - j: j, - parent: elDataLabelsWrap, - dataLabelsConfig: dataLabelsConfig - }); - } - - return elDataLabelsWrap; - } - }, { - key: "animateHeatMap", - value: function animateHeatMap(el, x, y, width, height, speed) { - var _this2 = this; - - var animations = new Animations(this.ctx); - animations.animateRect(el, { - x: x + width / 2, - y: y + height / 2, - width: 0, - height: 0 - }, { - x: x, - y: y, - width: width, - height: height - }, speed, function () { - _this2.w.globals.animationEnded = true; - }); - } - }, { - key: "animateHeatColor", - value: function animateHeatColor(el, colorFrom, colorTo, speed) { - el.attr({ - fill: colorFrom - }).animate(speed).attr({ - fill: colorTo - }); - } - }]); - - return HeatMap; -}(); - -/** - * ApexCharts Pie Class for drawing Pie / Donut Charts. - * @module Pie - **/ - -var Pie = -/*#__PURE__*/ -function () { - function Pie(ctx) { - _classCallCheck(this, Pie); - - this.ctx = ctx; - this.w = ctx.w; - this.chartType = this.w.config.chart.type; - this.initialAnim = this.w.config.chart.animations.enabled; - this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; - this.animBeginArr = [0]; - this.animDur = 0; - this.donutDataLabels = this.w.config.plotOptions.pie.donut.labels; - var w = this.w; - this.lineColorArr = w.globals.stroke.colors !== undefined ? w.globals.stroke.colors : w.globals.colors; - this.defaultSize = w.globals.svgHeight < w.globals.svgWidth ? w.globals.svgHeight - 35 : w.globals.gridWidth; - this.centerY = this.defaultSize / 2; - this.centerX = w.globals.gridWidth / 2; - this.fullAngle = 360; - this.size = 0; - this.donutSize = 0; - this.sliceLabels = []; - this.prevSectorAngleArr = []; // for dynamic animations - } - - _createClass(Pie, [{ - key: "draw", - value: function draw(series) { - var self = this; - var w = this.w; - var graphics = new Graphics(this.ctx); - var ret = graphics.group({ - class: 'apexcharts-pie' - }); - var total = 0; - - for (var k = 0; k < series.length; k++) { - // CALCULATE THE TOTAL - total += Utils.negToZero(series[k]); - } - - var sectorAngleArr = []; // el to which series will be drawn - - var elSeries = graphics.group(); // prevent division by zero error if there is no data - - if (total === 0) { - total = 0.00001; - } - - for (var i = 0; i < series.length; i++) { - // CALCULATE THE ANGLES - var angle = this.fullAngle * Utils.negToZero(series[i]) / total; - sectorAngleArr.push(angle); - } - - if (w.globals.dataChanged) { - var prevTotal = 0; - - for (var _k = 0; _k < w.globals.previousPaths.length; _k++) { - // CALCULATE THE PREV TOTAL - prevTotal += Utils.negToZero(w.globals.previousPaths[_k]); - } - - var previousAngle; - - for (var _i = 0; _i < w.globals.previousPaths.length; _i++) { - // CALCULATE THE PREVIOUS ANGLES - previousAngle = this.fullAngle * Utils.negToZero(w.globals.previousPaths[_i]) / prevTotal; - this.prevSectorAngleArr.push(previousAngle); - } - } - - this.size = this.defaultSize / 2.05 - w.config.stroke.width - w.config.chart.dropShadow.blur; - - if (w.config.plotOptions.pie.size !== undefined) { - this.size = w.config.plotOptions.pie.size; - } - - this.donutSize = this.size * parseInt(w.config.plotOptions.pie.donut.size) / 100; - var scaleSize = w.config.plotOptions.pie.customScale; - var halfW = w.globals.gridWidth / 2; - var halfH = w.globals.gridHeight / 2; - var translateX = halfW - w.globals.gridWidth / 2 * scaleSize; - var translateY = halfH - w.globals.gridHeight / 2 * scaleSize; - - if (this.donutDataLabels.show) { - var dataLabels = this.renderInnerDataLabels(this.donutDataLabels, { - hollowSize: this.donutSize, - centerX: this.centerX, - centerY: this.centerY, - opacity: this.donutDataLabels.show, - translateX: translateX, - translateY: translateY - }); - ret.add(dataLabels); - } - - if (w.config.chart.type === 'donut') { - // draw the inner circle and add some text to it - var circle = graphics.drawCircle(this.donutSize); - circle.attr({ - cx: this.centerX, - cy: this.centerY, - fill: w.config.plotOptions.pie.donut.background - }); - elSeries.add(circle); - } - - var elG = self.drawArcs(sectorAngleArr, series); // add slice dataLabels at the end - - this.sliceLabels.forEach(function (s) { - elG.add(s); - }); - elSeries.attr({ - transform: "translate(".concat(translateX, ", ").concat(translateY - 5, ") scale(").concat(scaleSize, ")") - }); - ret.attr({ - 'data:innerTranslateX': translateX, - 'data:innerTranslateY': translateY - 25 - }); - elSeries.add(elG); - ret.add(elSeries); - return ret; - } // core function for drawing pie arcs - - }, { - key: "drawArcs", - value: function drawArcs(sectorAngleArr, series) { - var w = this.w; - var filters = new Filters(this.ctx); - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - var g = graphics.group(); - var startAngle = 0; - var prevStartAngle = 0; - var endAngle = 0; - var prevEndAngle = 0; - this.strokeWidth = w.config.stroke.show ? w.config.stroke.width : 0; - - for (var i = 0; i < sectorAngleArr.length; i++) { - // if(sectorAngleArr[i]>0) { - var elPieArc = graphics.group({ - class: "apexcharts-series apexcharts-pie-series", - seriesName: Utils.escapeString(w.globals.seriesNames[i]), - id: 'apexcharts-series-' + i, - rel: i + 1 - }); - g.add(elPieArc); - startAngle = endAngle; - prevStartAngle = prevEndAngle; - endAngle = startAngle + sectorAngleArr[i]; - prevEndAngle = prevStartAngle + this.prevSectorAngleArr[i]; - var angle = endAngle - startAngle; - var pathFill = fill.fillPath({ - seriesNumber: i, - size: this.size, - value: series[i] - }); // additionaly, pass size for gradient drawing in the fillPath function - - var path = this.getChangedPath(prevStartAngle, prevEndAngle); - var elPath = graphics.drawPath({ - d: path, - stroke: this.lineColorArr instanceof Array ? this.lineColorArr[i] : this.lineColorArr, - strokeWidth: this.strokeWidth, - fill: pathFill, - fillOpacity: w.config.fill.opacity, - classes: 'apexcharts-pie-area' - }); - elPath.attr({ - id: "apexcharts-".concat(w.config.chart.type, "-slice-").concat(i), - index: 0, - j: i - }); - - if (w.config.chart.dropShadow.enabled) { - var shadow = w.config.chart.dropShadow; - filters.dropShadow(elPath, shadow, i); - } - - this.addListeners(elPath, this.donutDataLabels); - Graphics.setAttrs(elPath.node, { - 'data:angle': angle, - 'data:startAngle': startAngle, - 'data:strokeWidth': this.strokeWidth, - 'data:value': series[i] - }); - var labelPosition = { - x: 0, - y: 0 - }; - - if (w.config.chart.type === 'pie') { - labelPosition = Utils.polarToCartesian(this.centerX, this.centerY, this.size / 1.25 + w.config.plotOptions.pie.dataLabels.offset, startAngle + (endAngle - startAngle) / 2); - } else if (w.config.chart.type === 'donut') { - labelPosition = Utils.polarToCartesian(this.centerX, this.centerY, (this.size + this.donutSize) / 2 + w.config.plotOptions.pie.dataLabels.offset, startAngle + (endAngle - startAngle) / 2); - } - - elPieArc.add(elPath); // Animation code starts - - var dur = 0; - - if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) { - dur = (endAngle - startAngle) / this.fullAngle * w.config.chart.animations.speed; - this.animDur = dur + this.animDur; - this.animBeginArr.push(this.animDur); - } else { - this.animBeginArr.push(0); - } - - if (this.dynamicAnim && w.globals.dataChanged) { - this.animatePaths(elPath, { - endAngle: endAngle, - startAngle: startAngle, - prevStartAngle: prevStartAngle, - prevEndAngle: prevEndAngle, - animateStartingPos: true, - i: i, - animBeginArr: this.animBeginArr, - dur: w.config.chart.animations.dynamicAnimation.speed - }); - } else { - this.animatePaths(elPath, { - endAngle: endAngle, - startAngle: startAngle, - i: i, - totalItems: sectorAngleArr.length - 1, - animBeginArr: this.animBeginArr, - dur: dur - }); - } // animation code ends - - - if (w.config.plotOptions.pie.expandOnClick) { - elPath.click(this.pieClicked.bind(this, i)); - } - - if (w.config.dataLabels.enabled) { - var xPos = labelPosition.x; - var yPos = labelPosition.y; - var text = 100 * (endAngle - startAngle) / 360 + '%'; - - if (angle !== 0 && w.config.plotOptions.pie.dataLabels.minAngleToShowLabel < sectorAngleArr[i]) { - var formatter = w.config.dataLabels.formatter; - - if (formatter !== undefined) { - text = formatter(w.globals.seriesPercent[i][0], { - seriesIndex: i, - w: w - }); - } - - var foreColor = w.globals.dataLabels.style.colors[i]; - var elPieLabel = graphics.drawText({ - x: xPos, - y: yPos, - text: text, - textAnchor: 'middle', - fontSize: w.config.dataLabels.style.fontSize, - fontFamily: w.config.dataLabels.style.fontFamily, - foreColor: foreColor - }); - - if (w.config.dataLabels.dropShadow.enabled) { - var textShadow = w.config.dataLabels.dropShadow; - - var _filters = new Filters(this.ctx); - - _filters.dropShadow(elPieLabel, textShadow); - } - - elPieLabel.node.classList.add('apexcharts-pie-label'); - - if (w.config.chart.animations.animate && w.globals.resized === false) { - elPieLabel.node.classList.add('apexcharts-pie-label-delay'); - elPieLabel.node.style.animationDelay = w.config.chart.animations.speed / 940 + 's'; - } - - this.sliceLabels.push(elPieLabel); - } - } // } - - } - - return g; - } - }, { - key: "addListeners", - value: function addListeners(elPath, dataLabels) { - var graphics = new Graphics(this.ctx); // append filters on mouseenter and mouseleave - - elPath.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this, elPath)); - elPath.node.addEventListener('mouseenter', this.printDataLabelsInner.bind(this, elPath.node, dataLabels)); - elPath.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this, elPath)); - elPath.node.addEventListener('mouseleave', this.revertDataLabelsInner.bind(this, elPath.node, dataLabels)); - elPath.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this, elPath)); - elPath.node.addEventListener('mousedown', this.printDataLabelsInner.bind(this, elPath.node, dataLabels)); - } // This function can be used for other circle charts too - - }, { - key: "animatePaths", - value: function animatePaths(el, opts) { - var w = this.w; - var me = this; - var angle = opts.endAngle - opts.startAngle; - var prevAngle = angle; - var fromStartAngle = opts.startAngle; - var toStartAngle = opts.startAngle; - - if (opts.prevStartAngle !== undefined && opts.prevEndAngle !== undefined) { - fromStartAngle = opts.prevEndAngle; - prevAngle = opts.prevEndAngle - opts.prevStartAngle; - } - - if (opts.i === w.config.series.length - 1) { - // some adjustments for the last overlapping paths - if (angle + toStartAngle > this.fullAngle) { - opts.endAngle = opts.endAngle - (angle + toStartAngle); - } else if (angle + toStartAngle < this.fullAngle) { - opts.endAngle = opts.endAngle + (this.fullAngle - (angle + toStartAngle)); - } - } - - if (angle === this.fullAngle) angle = this.fullAngle - 0.01; - me.animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts); - } - }, { - key: "animateArc", - value: function animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts) { - var me = this; - var w = this.w; - var size = me.size; - - if (!size) { - size = opts.size; - } - - var path; - - if (isNaN(fromStartAngle) || isNaN(prevAngle)) { - fromStartAngle = toStartAngle; - prevAngle = angle; - opts.dur = 0; - } - - var currAngle = angle; - var startAngle = toStartAngle; - var fromAngle = fromStartAngle - toStartAngle; - - if (w.globals.dataChanged && opts.shouldSetPrevPaths) { - // to avoid flickering, set prev path first and then we will animate from there - path = me.getPiePath({ - me: me, - startAngle: startAngle, - angle: prevAngle, - size: size - }); - el.attr({ - d: path - }); - } - - if (opts.dur !== 0) { - el.animate(opts.dur, w.globals.easing, opts.animBeginArr[opts.i]).afterAll(function () { - if (w.config.chart.type === 'pie' || w.config.chart.type === 'donut') { - this.animate(300).attr({ - 'stroke-width': w.config.stroke.width - }); - } - - w.globals.animationEnded = true; - }).during(function (pos) { - currAngle = fromAngle + (angle - fromAngle) * pos; - - if (opts.animateStartingPos) { - currAngle = prevAngle + (angle - prevAngle) * pos; - startAngle = fromStartAngle - prevAngle + (toStartAngle - (fromStartAngle - prevAngle)) * pos; - } - - path = me.getPiePath({ - me: me, - startAngle: startAngle, - angle: currAngle, - size: size - }); - el.node.setAttribute('data:pathOrig', path); - el.attr({ - d: path - }); - }); - } else { - path = me.getPiePath({ - me: me, - startAngle: startAngle, - angle: angle, - size: size - }); - - if (!opts.isTrack) { - w.globals.animationEnded = true; - } - - el.node.setAttribute('data:pathOrig', path); - el.attr({ - d: path - }); - } - } - }, { - key: "pieClicked", - value: function pieClicked(i) { - var w = this.w; - var me = this; - var path; - var size = me.size + 4; - var elPath = w.globals.dom.Paper.select("#apexcharts-".concat(w.config.chart.type.toLowerCase(), "-slice-").concat(i)).members[0]; - var pathFrom = elPath.attr('d'); - - if (elPath.attr('data:pieClicked') === 'true') { - elPath.attr({ - 'data:pieClicked': 'false' - }); - this.revertDataLabelsInner(elPath.node, this.donutDataLabels); - var origPath = elPath.attr('data:pathOrig'); - elPath.attr({ - d: origPath - }); - return; - } else { - // reset all elems - var allEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-pie-area'); - Array.prototype.forEach.call(allEls, function (pieSlice) { - pieSlice.setAttribute('data:pieClicked', 'false'); - var origPath = pieSlice.getAttribute('data:pathOrig'); - pieSlice.setAttribute('d', origPath); - }); - elPath.attr('data:pieClicked', 'true'); - } - - var startAngle = parseInt(elPath.attr('data:startAngle')); - var angle = parseInt(elPath.attr('data:angle')); - path = me.getPiePath({ - me: me, - startAngle: startAngle, - angle: angle, - size: size - }); - if (angle === 360) return; - elPath.plot(path).animate(1).plot(pathFrom).animate(100).plot(path); - } - }, { - key: "getChangedPath", - value: function getChangedPath(prevStartAngle, prevEndAngle) { - var path = ''; - - if (this.dynamicAnim && this.w.globals.dataChanged) { - path = this.getPiePath({ - me: this, - startAngle: prevStartAngle, - angle: prevEndAngle - prevStartAngle, - size: this.size - }); - } - - return path; - } - }, { - key: "getPiePath", - value: function getPiePath(_ref) { - var me = _ref.me, - startAngle = _ref.startAngle, - angle = _ref.angle, - size = _ref.size; - var w = this.w; - var path; - var startDeg = startAngle; - var startRadians = Math.PI * (startDeg - 90) / 180; - var endDeg = angle + startAngle; - if (Math.ceil(endDeg) >= 360) endDeg = 359.99; - var endRadians = Math.PI * (endDeg - 90) / 180; - var x1 = me.centerX + size * Math.cos(startRadians); - var y1 = me.centerY + size * Math.sin(startRadians); - var x2 = me.centerX + size * Math.cos(endRadians); - var y2 = me.centerY + size * Math.sin(endRadians); - var startInner = Utils.polarToCartesian(me.centerX, me.centerY, me.donutSize, endDeg); - var endInner = Utils.polarToCartesian(me.centerX, me.centerY, me.donutSize, startDeg); - var largeArc = angle > 180 ? 1 : 0; - - if (w.config.chart.type === 'donut') { - path = ['M', x1, y1, 'A', size, size, 0, largeArc, 1, x2, y2, 'L', startInner.x, startInner.y, 'A', me.donutSize, me.donutSize, 0, largeArc, 0, endInner.x, endInner.y, 'L', x1, y1, 'z'].join(' '); - } else if (w.config.chart.type === 'pie') { - path = ['M', x1, y1, 'A', size, size, 0, largeArc, 1, x2, y2, 'L', me.centerX, me.centerY, 'L', x1, y1].join(' '); - } else { - path = ['M', x1, y1, 'A', size, size, 0, largeArc, 1, x2, y2].join(' '); - } - - return path; - } - }, { - key: "renderInnerDataLabels", - value: function renderInnerDataLabels(dataLabelsConfig, opts) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var g = graphics.group({ - class: 'apexcharts-datalabels-group', - transform: "translate(".concat(opts.translateX ? opts.translateX : 0, ", ").concat(opts.translateY ? opts.translateY : 0, ")") - }); - var showTotal = dataLabelsConfig.total.show; - g.node.style.opacity = opts.opacity; - var x = opts.centerX; - var y = opts.centerY; - var labelColor, valueColor; - - if (dataLabelsConfig.name.color === undefined) { - labelColor = w.globals.colors[0]; - } else { - labelColor = dataLabelsConfig.name.color; - } - - if (dataLabelsConfig.value.color === undefined) { - valueColor = w.config.chart.foreColor; - } else { - valueColor = dataLabelsConfig.value.color; - } - - var lbFormatter = dataLabelsConfig.value.formatter; - var val = ''; - var name = ''; - - if (showTotal) { - labelColor = dataLabelsConfig.total.color; - name = dataLabelsConfig.total.label; - val = dataLabelsConfig.total.formatter(w); - } else { - if (w.globals.series.length === 1) { - val = lbFormatter(w.globals.series[0], w); - name = w.globals.seriesNames[0]; - } - } - - if (dataLabelsConfig.name.show) { - var elLabel = graphics.drawText({ - x: x, - y: y + parseInt(dataLabelsConfig.name.offsetY), - text: name, - textAnchor: 'middle', - foreColor: labelColor, - fontSize: dataLabelsConfig.name.fontSize, - fontFamily: dataLabelsConfig.name.fontFamily - }); - elLabel.node.classList.add('apexcharts-datalabel-label'); - g.add(elLabel); - } - - if (dataLabelsConfig.value.show) { - var valOffset = dataLabelsConfig.name.show ? parseInt(dataLabelsConfig.value.offsetY) + 16 : dataLabelsConfig.value.offsetY; - var elValue = graphics.drawText({ - x: x, - y: y + valOffset, - text: val, - textAnchor: 'middle', - foreColor: valueColor, - fontSize: dataLabelsConfig.value.fontSize, - fontFamily: dataLabelsConfig.value.fontFamily - }); - elValue.node.classList.add('apexcharts-datalabel-value'); - g.add(elValue); - } // for a multi-series circle chart, we need to show total value instead of first series labels - - - return g; - } - /** - * - * @param {string} name - The name of the series - * @param {string} val - The value of that series - * @param {object} el - Optional el (indicates which series was hovered/clicked). If this param is not present, means we need to show total - */ - - }, { - key: "printInnerLabels", - value: function printInnerLabels(labelsConfig, name, val, el) { - var w = this.w; - var labelColor; - - if (el) { - if (labelsConfig.name.color === undefined) { - labelColor = w.globals.colors[parseInt(el.parentNode.getAttribute('rel')) - 1]; - } else { - labelColor = labelsConfig.name.color; - } - } else { - if (w.globals.series.length > 1 && labelsConfig.total.show) { - labelColor = labelsConfig.total.color; - } - } - - var elLabel = w.globals.dom.baseEl.querySelector('.apexcharts-datalabel-label'); - var elValue = w.globals.dom.baseEl.querySelector('.apexcharts-datalabel-value'); - var lbFormatter = labelsConfig.value.formatter; - val = lbFormatter(val, w); // we need to show Total Val - so get the formatter of it - - if (!el && typeof labelsConfig.total.formatter === 'function') { - val = labelsConfig.total.formatter(w); - } - - if (elLabel !== null) { - elLabel.textContent = name; - } - - if (elValue !== null) { - elValue.textContent = val; - } - - if (elLabel !== null) { - elLabel.style.fill = labelColor; - } - } - }, { - key: "printDataLabelsInner", - value: function printDataLabelsInner(el, dataLabelsConfig) { - var w = this.w; - var val = el.getAttribute('data:value'); - var name = w.globals.seriesNames[parseInt(el.parentNode.getAttribute('rel')) - 1]; - - if (w.globals.series.length > 1) { - this.printInnerLabels(dataLabelsConfig, name, val, el); - } - - var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group'); - - if (dataLabelsGroup !== null) { - dataLabelsGroup.style.opacity = 1; - } - } - }, { - key: "revertDataLabelsInner", - value: function revertDataLabelsInner(el, dataLabelsConfig, event) { - var _this = this; - - var w = this.w; - var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group'); - - if (dataLabelsConfig.total.show && w.globals.series.length > 1) { - var pie = new Pie(this.ctx); - pie.printInnerLabels(dataLabelsConfig, dataLabelsConfig.total.label, dataLabelsConfig.total.formatter(w)); - } else { - var slices = document.querySelectorAll(".apexcharts-pie-area"); - var sliceOut = false; - slices.forEach(function (s) { - if (s.getAttribute('data:pieClicked') === 'true') { - sliceOut = true; - - _this.printDataLabelsInner(s, dataLabelsConfig); - } - }); - - if (!sliceOut) { - if (w.globals.selectedDataPoints.length && w.globals.series.length > 1) { - if (w.globals.selectedDataPoints[0].length > 0) { - var index = w.globals.selectedDataPoints[0]; - - var _el = w.globals.dom.baseEl.querySelector("#apexcharts-".concat(w.config.chart.type.toLowerCase(), "-slice-").concat(index)); - - this.printDataLabelsInner(_el, dataLabelsConfig); - } else if (dataLabelsGroup && w.globals.selectedDataPoints.length && w.globals.selectedDataPoints[0].length === 0) { - dataLabelsGroup.style.opacity = 0; - } - } else { - if (dataLabelsGroup && w.globals.series.length > 1) { - dataLabelsGroup.style.opacity = 0; - } - } - } - } - } - }]); - - return Pie; -}(); - -/** - * ApexCharts Radar Class for Spider/Radar Charts. - * @module Radar - **/ - -var Radar = -/*#__PURE__*/ -function () { - function Radar(ctx) { - _classCallCheck(this, Radar); - - this.ctx = ctx; - this.w = ctx.w; - this.chartType = this.w.config.chart.type; - this.initialAnim = this.w.config.chart.animations.enabled; - this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; - this.animDur = 0; - var w = this.w; - this.graphics = new Graphics(this.ctx); - this.lineColorArr = w.globals.stroke.colors !== undefined ? w.globals.stroke.colors : w.globals.colors; - this.defaultSize = w.globals.svgHeight < w.globals.svgWidth ? w.globals.svgHeight - 35 : w.globals.gridWidth; - this.maxValue = this.w.globals.maxY; - this.polygons = w.config.plotOptions.radar.polygons; - this.maxLabelWidth = 20; - var longestLabel = w.globals.labels.slice().sort(function (a, b) { - return b.length - a.length; - })[0]; - var labelWidth = this.graphics.getTextRects(longestLabel, w.config.dataLabels.style.fontSize); - this.size = this.defaultSize / 2.1 - w.config.stroke.width - w.config.chart.dropShadow.blur - labelWidth.width / 1.75; - - if (w.config.plotOptions.radar.size !== undefined) { - this.size = w.config.plotOptions.radar.size; - } - - this.dataRadiusOfPercent = []; - this.dataRadius = []; - this.angleArr = []; - this.yaxisLabelsTextsPos = []; - } - - _createClass(Radar, [{ - key: "draw", - value: function draw(series) { - var _this = this; - - var w = this.w; - var fill = new Fill(this.ctx); - var allSeries = []; - this.dataPointsLen = series[w.globals.maxValsInArrayIndex].length; - this.disAngle = Math.PI * 2 / this.dataPointsLen; - var halfW = w.globals.gridWidth / 2; - var halfH = w.globals.gridHeight / 2; - var translateX = halfW; - var translateY = halfH; - var ret = this.graphics.group({ - class: 'apexcharts-radar-series', - 'data:innerTranslateX': translateX, - 'data:innerTranslateY': translateY - 25, - transform: "translate(".concat(translateX || 0, ", ").concat(translateY || 0, ")") - }); - var dataPointsPos = []; - var elPointsMain = null; - this.yaxisLabels = this.graphics.group({ - class: 'apexcharts-yaxis' - }); - series.forEach(function (s, i) { - // el to which series will be drawn - var elSeries = _this.graphics.group().attr({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[i]), - rel: i + 1, - 'data:realIndex': i - }); - - _this.dataRadiusOfPercent[i] = []; - _this.dataRadius[i] = []; - _this.angleArr[i] = []; - s.forEach(function (dv, j) { - _this.dataRadiusOfPercent[i][j] = dv / _this.maxValue; - _this.dataRadius[i][j] = _this.dataRadiusOfPercent[i][j] * _this.size; - _this.angleArr[i][j] = j * _this.disAngle; - }); - dataPointsPos = _this.getDataPointsPos(_this.dataRadius[i], _this.angleArr[i]); - - var paths = _this.createPaths(dataPointsPos, { - x: 0, - y: 0 - }); // points - - - elPointsMain = _this.graphics.group({ - class: 'apexcharts-series-markers-wrap hidden' - }); - w.globals.delayedElements.push({ - el: elPointsMain.node, - index: i - }); - var defaultRenderedPathOptions = { - i: i, - realIndex: i, - animationDelay: i, - initialSpeed: w.config.chart.animations.speed, - dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed, - className: "apexcharts-radar", - id: "apexcharts-radar", - shouldClipToGrid: false, - bindEventsOnPaths: false, - stroke: w.globals.stroke.colors[i], - strokeLineCap: w.config.stroke.lineCap - }; - var pathFrom = null; - - if (w.globals.previousPaths.length > 0) { - pathFrom = _this.getPathFrom(i); - } - - for (var p = 0; p < paths.linePathsTo.length; p++) { - var renderedLinePath = _this.graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { - pathFrom: pathFrom === null ? paths.linePathsFrom[p] : pathFrom, - pathTo: paths.linePathsTo[p], - strokeWidth: Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width, - fill: 'none', - drawShadow: false - })); - - elSeries.add(renderedLinePath); - var pathFill = fill.fillPath({ - seriesNumber: i - }); - - var renderedAreaPath = _this.graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { - pathFrom: pathFrom === null ? paths.areaPathsFrom[p] : pathFrom, - pathTo: paths.areaPathsTo[p], - strokeWidth: 0, - fill: pathFill, - drawShadow: false - })); - - if (w.config.chart.dropShadow.enabled) { - var filters = new Filters(_this.ctx); - var shadow = w.config.chart.dropShadow; - filters.dropShadow(renderedAreaPath, Object.assign({}, shadow, { - noUserSpaceOnUse: true - }), i); - } - - elSeries.add(renderedAreaPath); - } - - s.forEach(function (sj, j) { - var markers = new Markers(_this.ctx); - var opts = markers.getMarkerConfig('apexcharts-marker', i); - - var point = _this.graphics.drawMarker(dataPointsPos[j].x, dataPointsPos[j].y, opts); - - point.attr('rel', j); - point.attr('j', j); - point.attr('index', i); - point.node.setAttribute('default-marker-size', opts.pSize); - - var elPointsWrap = _this.graphics.group({ - class: 'apexcharts-series-markers' - }); - - if (elPointsWrap) { - elPointsWrap.add(point); - } - - elPointsMain.add(elPointsWrap); - elSeries.add(elPointsMain); - }); - allSeries.push(elSeries); - }); - this.drawPolygons({ - parent: ret - }); - - if (w.config.dataLabels.enabled) { - var dataLabels = this.drawLabels(); - ret.add(dataLabels); - } - - ret.add(this.yaxisLabels); - allSeries.forEach(function (elS) { - ret.add(elS); - }); - return ret; - } - }, { - key: "drawPolygons", - value: function drawPolygons(opts) { - var _this2 = this; - - var w = this.w; - var parent = opts.parent; - var yaxisTexts = w.globals.yAxisScale[0].result.reverse(); - var layers = yaxisTexts.length; - var radiusSizes = []; - var layerDis = this.size / (layers - 1); - - for (var i = 0; i < layers; i++) { - radiusSizes[i] = layerDis * i; - } - - radiusSizes.reverse(); - var polygonStrings = []; - var lines = []; - radiusSizes.forEach(function (radiusSize, r) { - var polygon = _this2.getPolygonPos(radiusSize); - - var string = ''; - polygon.forEach(function (p, i) { - if (r === 0) { - var line = _this2.graphics.drawLine(p.x, p.y, 0, 0, Array.isArray(_this2.polygons.connectorColors) ? _this2.polygons.connectorColors[i] : _this2.polygons.connectorColors); - - lines.push(line); - } - - if (i === 0) { - _this2.yaxisLabelsTextsPos.push({ - x: p.x, - y: p.y - }); - } - - string += p.x + ',' + p.y + ' '; - }); - polygonStrings.push(string); - }); - polygonStrings.forEach(function (p, i) { - var strokeColors = _this2.polygons.strokeColors; - - var polygon = _this2.graphics.drawPolygon(p, Array.isArray(strokeColors) ? strokeColors[i] : strokeColors, w.globals.radarPolygons.fill.colors[i]); - - parent.add(polygon); - }); - lines.forEach(function (l) { - parent.add(l); - }); - - if (w.config.yaxis[0].show) { - this.yaxisLabelsTextsPos.forEach(function (p, i) { - var yText = _this2.drawYAxisText(p.x, p.y, i, yaxisTexts[i]); - - _this2.yaxisLabels.add(yText); - }); - } - } - }, { - key: "drawYAxisText", - value: function drawYAxisText(x, y, i, text) { - var w = this.w; - var yaxisConfig = w.config.yaxis[0]; - var formatter = w.globals.yLabelFormatters[0]; - var yaxisLabel = this.graphics.drawText({ - x: x + yaxisConfig.labels.offsetX, - y: y + yaxisConfig.labels.offsetY, - text: formatter(text, i), - textAnchor: 'middle', - fontSize: yaxisConfig.labels.style.fontSize, - fontFamily: yaxisConfig.labels.style.fontFamily, - foreColor: yaxisConfig.labels.style.color - }); - return yaxisLabel; - } - }, { - key: "drawLabels", - value: function drawLabels() { - var _this3 = this; - - var w = this.w; - var limit = 10; - var textAnchor = 'middle'; - var dataLabelsConfig = w.config.dataLabels; - var elDataLabelsWrap = this.graphics.group({ - class: 'apexcharts-datalabels' - }); - var polygonPos = this.getPolygonPos(this.size); - var currPosX = 0; - var currPosY = 0; - w.globals.labels.forEach(function (label, i) { - var formatter = dataLabelsConfig.formatter; - var dataLabels = new DataLabels(_this3.ctx); - - if (polygonPos[i]) { - currPosX = polygonPos[i].x; - currPosY = polygonPos[i].y; - - if (Math.abs(polygonPos[i].x) >= limit) { - if (polygonPos[i].x > 0) { - textAnchor = 'start'; - currPosX += 10; - } else if (polygonPos[i].x < 0) { - textAnchor = 'end'; - currPosX -= 10; - } - } else { - textAnchor = 'middle'; - } - - if (Math.abs(polygonPos[i].y) >= _this3.size - limit) { - if (polygonPos[i].y < 0) { - currPosY -= 10; - } else if (polygonPos[i].y > 0) { - currPosY += 10; - } - } - - var text = formatter(label, { - seriesIndex: -1, - dataPointIndex: i, - w: w - }); - dataLabels.plotDataLabelsText({ - x: currPosX, - y: currPosY, - text: text, - textAnchor: textAnchor, - i: i, - j: i, - parent: elDataLabelsWrap, - dataLabelsConfig: dataLabelsConfig, - offsetCorrection: false - }); - } - }); - return elDataLabelsWrap; - } - }, { - key: "createPaths", - value: function createPaths(pos, origin) { - var _this4 = this; - - var linePathsTo = []; - var linePathsFrom = []; - var areaPathsTo = []; - var areaPathsFrom = []; - - if (pos.length) { - linePathsFrom = [this.graphics.move(origin.x, origin.y)]; - areaPathsFrom = [this.graphics.move(origin.x, origin.y)]; - var linePathTo = this.graphics.move(pos[0].x, pos[0].y); - var areaPathTo = this.graphics.move(pos[0].x, pos[0].y); - pos.forEach(function (p, i) { - linePathTo += _this4.graphics.line(p.x, p.y); - areaPathTo += _this4.graphics.line(p.x, p.y); - - if (i === pos.length - 1) { - linePathTo += 'Z'; - areaPathTo += 'Z'; - } - }); - linePathsTo.push(linePathTo); - areaPathsTo.push(areaPathTo); - } - - return { - linePathsFrom: linePathsFrom, - linePathsTo: linePathsTo, - areaPathsFrom: areaPathsFrom, - areaPathsTo: areaPathsTo - }; - } - }, { - key: "getPathFrom", - value: function getPathFrom(realIndex) { - var w = this.w; - var pathFrom = null; - - for (var pp = 0; pp < w.globals.previousPaths.length; pp++) { - var gpp = w.globals.previousPaths[pp]; - - if (gpp.paths.length > 0 && parseInt(gpp.realIndex) === parseInt(realIndex)) { - if (typeof w.globals.previousPaths[pp].paths[0] !== 'undefined') { - pathFrom = w.globals.previousPaths[pp].paths[0].d; - } - } - } - - return pathFrom; - } - }, { - key: "getDataPointsPos", - value: function getDataPointsPos(dataRadiusArr, angleArr) { - var dataPointsLen = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.dataPointsLen; - dataRadiusArr = dataRadiusArr || []; - angleArr = angleArr || []; - var dataPointsPosArray = []; - - for (var j = 0; j < dataPointsLen; j++) { - var curPointPos = {}; - curPointPos.x = dataRadiusArr[j] * Math.sin(angleArr[j]); - curPointPos.y = -dataRadiusArr[j] * Math.cos(angleArr[j]); - dataPointsPosArray.push(curPointPos); - } - - return dataPointsPosArray; - } - }, { - key: "getPolygonPos", - value: function getPolygonPos(size) { - var dotsArray = []; - var angle = Math.PI * 2 / this.dataPointsLen; - - for (var i = 0; i < this.dataPointsLen; i++) { - var curPos = {}; - curPos.x = size * Math.sin(i * angle); - curPos.y = -size * Math.cos(i * angle); - dotsArray.push(curPos); - } - - return dotsArray; - } - }]); - - return Radar; -}(); - -/** - * ApexCharts Radial Class for drawing Circle / Semi Circle Charts. - * @module Radial - **/ - -var Radial = -/*#__PURE__*/ -function (_Pie) { - _inherits(Radial, _Pie); - - function Radial(ctx) { - var _this; - - _classCallCheck(this, Radial); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(Radial).call(this, ctx)); - _this.ctx = ctx; - _this.w = ctx.w; - _this.animBeginArr = [0]; - _this.animDur = 0; - var w = _this.w; - _this.startAngle = w.config.plotOptions.radialBar.startAngle; - _this.endAngle = w.config.plotOptions.radialBar.endAngle; - _this.trackStartAngle = w.config.plotOptions.radialBar.track.startAngle; - _this.trackEndAngle = w.config.plotOptions.radialBar.track.endAngle; - _this.radialDataLabels = w.config.plotOptions.radialBar.dataLabels; - if (!_this.trackStartAngle) _this.trackStartAngle = _this.startAngle; - if (!_this.trackEndAngle) _this.trackEndAngle = _this.endAngle; - if (_this.endAngle === 360) _this.endAngle = 359.99; - _this.fullAngle = 360 - w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle; - _this.margin = parseInt(w.config.plotOptions.radialBar.track.margin); - return _this; - } - - _createClass(Radial, [{ - key: "draw", - value: function draw(series) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var ret = graphics.group({ - class: 'apexcharts-radialbar' - }); - var elSeries = graphics.group(); - var centerY = this.defaultSize / 2; - var centerX = w.globals.gridWidth / 2; - var size = this.defaultSize / 2.05 - w.config.stroke.width - w.config.chart.dropShadow.blur; - - if (w.config.plotOptions.radialBar.size !== undefined) { - size = w.config.plotOptions.radialBar.size; - } - - var colorArr = w.globals.fill.colors; - - if (w.config.plotOptions.radialBar.track.show) { - var elTracks = this.drawTracks({ - size: size, - centerX: centerX, - centerY: centerY, - colorArr: colorArr, - series: series - }); - elSeries.add(elTracks); - } - - var elG = this.drawArcs({ - size: size, - centerX: centerX, - centerY: centerY, - colorArr: colorArr, - series: series - }); - elSeries.add(elG.g); - - if (w.config.plotOptions.radialBar.hollow.position === 'front') { - elG.g.add(elG.elHollow); - - if (elG.dataLabels) { - elG.g.add(elG.dataLabels); - } - } - - ret.add(elSeries); - return ret; - } - }, { - key: "drawTracks", - value: function drawTracks(opts) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var g = graphics.group(); - var filters = new Filters(this.ctx); - var fill = new Fill(this.ctx); - var strokeWidth = this.getStrokeWidth(opts); - opts.size = opts.size - strokeWidth / 2; - - for (var i = 0; i < opts.series.length; i++) { - var elRadialBarTrack = graphics.group({ - class: 'apexcharts-radialbar-track apexcharts-track' - }); - g.add(elRadialBarTrack); - elRadialBarTrack.attr({ - id: 'apexcharts-track-' + i, - rel: i + 1 - }); - opts.size = opts.size - strokeWidth - this.margin; - var trackConfig = w.config.plotOptions.radialBar.track; - var pathFill = fill.fillPath({ - seriesNumber: 0, - size: opts.size, - fillColors: Array.isArray(trackConfig.background) ? trackConfig.background[i] : trackConfig.background, - solid: true - }); - var startAngle = this.trackStartAngle; - var endAngle = this.trackEndAngle; - if (Math.abs(endAngle) + Math.abs(startAngle) >= 360) endAngle = 360 - Math.abs(this.startAngle) - 0.1; - var elPath = graphics.drawPath({ - d: '', - stroke: pathFill, - strokeWidth: strokeWidth * parseInt(trackConfig.strokeWidth) / 100, - fill: 'none', - strokeOpacity: trackConfig.opacity, - classes: 'apexcharts-radialbar-area' - }); - - if (trackConfig.dropShadow.enabled) { - var shadow = trackConfig.dropShadow; - filters.dropShadow(elPath, shadow); - } - - elRadialBarTrack.add(elPath); - elPath.attr('id', 'apexcharts-radialbarTrack-' + i); - var pie = new Pie(this.ctx); - pie.animatePaths(elPath, { - centerX: opts.centerX, - centerY: opts.centerY, - endAngle: endAngle, - startAngle: startAngle, - size: opts.size, - i: i, - totalItems: 2, - animBeginArr: 0, - dur: 0, - isTrack: true, - easing: w.globals.easing - }); - } - - return g; - } - }, { - key: "drawArcs", - value: function drawArcs(opts) { - var w = this.w; // size, donutSize, centerX, centerY, colorArr, lineColorArr, sectorAngleArr, series - - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - var filters = new Filters(this.ctx); - var g = graphics.group(); - var strokeWidth = this.getStrokeWidth(opts); - opts.size = opts.size - strokeWidth / 2; - var hollowFillID = w.config.plotOptions.radialBar.hollow.background; - var hollowSize = opts.size - strokeWidth * opts.series.length - this.margin * opts.series.length - strokeWidth * parseInt(w.config.plotOptions.radialBar.track.strokeWidth) / 100 / 2; - var hollowRadius = hollowSize - w.config.plotOptions.radialBar.hollow.margin; - - if (w.config.plotOptions.radialBar.hollow.image !== undefined) { - hollowFillID = this.drawHollowImage(opts, g, hollowSize, hollowFillID); - } - - var elHollow = this.drawHollow({ - size: hollowRadius, - centerX: opts.centerX, - centerY: opts.centerY, - fill: hollowFillID - }); - - if (w.config.plotOptions.radialBar.hollow.dropShadow.enabled) { - var shadow = w.config.plotOptions.radialBar.hollow.dropShadow; - filters.dropShadow(elHollow, shadow); - } - - var shown = 1; - - if (!this.radialDataLabels.total.show && w.globals.series.length > 1) { - shown = 0; - } - - var pie = new Pie(this.ctx); - var dataLabels = null; - - if (this.radialDataLabels.show) { - dataLabels = pie.renderInnerDataLabels(this.radialDataLabels, { - hollowSize: hollowSize, - centerX: opts.centerX, - centerY: opts.centerY, - opacity: shown - }); - } - - if (w.config.plotOptions.radialBar.hollow.position === 'back') { - g.add(elHollow); - - if (dataLabels) { - g.add(dataLabels); - } - } - - var reverseLoop = false; - - if (w.config.plotOptions.radialBar.inverseOrder) { - reverseLoop = true; - } - - for (var i = reverseLoop ? opts.series.length - 1 : 0; reverseLoop ? i >= 0 : i < opts.series.length; reverseLoop ? i-- : i++) { - var elRadialBarArc = graphics.group({ - class: "apexcharts-series apexcharts-radial-series", - seriesName: Utils.escapeString(w.globals.seriesNames[i]) - }); - g.add(elRadialBarArc); - elRadialBarArc.attr({ - id: 'apexcharts-series-' + i, - rel: i + 1 - }); - this.ctx.series.addCollapsedClassToSeries(elRadialBarArc, i); - opts.size = opts.size - strokeWidth - this.margin; - var pathFill = fill.fillPath({ - seriesNumber: i, - size: opts.size, - value: opts.series[i] - }); - var startAngle = this.startAngle; - var prevStartAngle = void 0; - var totalAngle = Math.abs(w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle); // if data exceeds 100, make it 100 - - var dataValue = Utils.negToZero(opts.series[i] > 100 ? 100 : opts.series[i]) / 100; - var endAngle = Math.round(totalAngle * dataValue) + this.startAngle; - var prevEndAngle = void 0; - - if (w.globals.dataChanged) { - prevStartAngle = this.startAngle; - prevEndAngle = Math.round(totalAngle * Utils.negToZero(w.globals.previousPaths[i]) / 100) + prevStartAngle; - } - - var currFullAngle = Math.abs(endAngle) + Math.abs(startAngle); - - if (currFullAngle >= 360) { - endAngle = endAngle - 0.01; - } - - var prevFullAngle = Math.abs(prevEndAngle) + Math.abs(prevStartAngle); - - if (prevFullAngle >= 360) { - prevEndAngle = prevEndAngle - 0.01; - } - - var angle = endAngle - startAngle; - var dashArray = Array.isArray(w.config.stroke.dashArray) ? w.config.stroke.dashArray[i] : w.config.stroke.dashArray; - var elPath = graphics.drawPath({ - d: '', - stroke: pathFill, - strokeWidth: strokeWidth, - fill: 'none', - fillOpacity: w.config.fill.opacity, - classes: 'apexcharts-radialbar-area', - strokeDashArray: dashArray - }); - Graphics.setAttrs(elPath.node, { - 'data:angle': angle, - 'data:value': opts.series[i] - }); - - if (w.config.chart.dropShadow.enabled) { - var _shadow = w.config.chart.dropShadow; - filters.dropShadow(elPath, _shadow, i); - } - - this.addListeners(elPath, this.radialDataLabels); - - var _pie = new Pie(this.ctx); - - elRadialBarArc.add(elPath); - elPath.attr({ - id: 'apexcharts-radialbar-slice-' + i, - index: 0, - j: i - }); - var dur = 0; - - if (_pie.initialAnim && !w.globals.resized && !w.globals.dataChanged) { - dur = (endAngle - startAngle) / 360 * w.config.chart.animations.speed; - this.animDur = dur / (opts.series.length * 1.2) + this.animDur; - this.animBeginArr.push(this.animDur); - } - - if (w.globals.dataChanged) { - dur = (endAngle - startAngle) / 360 * w.config.chart.animations.dynamicAnimation.speed; - this.animDur = dur / (opts.series.length * 1.2) + this.animDur; - this.animBeginArr.push(this.animDur); - } - - _pie.animatePaths(elPath, { - centerX: opts.centerX, - centerY: opts.centerY, - endAngle: endAngle, - startAngle: startAngle, - prevEndAngle: prevEndAngle, - prevStartAngle: prevStartAngle, - size: opts.size, - i: i, - totalItems: 2, - animBeginArr: this.animBeginArr, - dur: dur, - shouldSetPrevPaths: true, - easing: w.globals.easing - }); - } - - return { - g: g, - elHollow: elHollow, - dataLabels: dataLabels - }; - } - }, { - key: "drawHollow", - value: function drawHollow(opts) { - var graphics = new Graphics(this.ctx); - var circle = graphics.drawCircle(opts.size * 2); - circle.attr({ - class: 'apexcharts-radialbar-hollow', - cx: opts.centerX, - cy: opts.centerY, - r: opts.size, - fill: opts.fill - }); - return circle; - } - }, { - key: "drawHollowImage", - value: function drawHollowImage(opts, g, hollowSize, hollowFillID) { - var w = this.w; - var fill = new Fill(this.ctx); - var randID = (Math.random() + 1).toString(36).substring(4); - var hollowFillImg = w.config.plotOptions.radialBar.hollow.image; - - if (w.config.plotOptions.radialBar.hollow.imageClipped) { - fill.clippedImgArea({ - width: hollowSize, - height: hollowSize, - image: hollowFillImg, - patternID: "pattern".concat(w.globals.cuid).concat(randID) - }); - hollowFillID = "url(#pattern".concat(w.globals.cuid).concat(randID, ")"); - } else { - var imgWidth = w.config.plotOptions.radialBar.hollow.imageWidth; - var imgHeight = w.config.plotOptions.radialBar.hollow.imageHeight; - - if (imgWidth === undefined && imgHeight === undefined) { - var image = w.globals.dom.Paper.image(hollowFillImg).loaded(function (loader) { - this.move(opts.centerX - loader.width / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX, opts.centerY - loader.height / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY); - }); - g.add(image); - } else { - var _image = w.globals.dom.Paper.image(hollowFillImg).loaded(function (loader) { - this.move(opts.centerX - imgWidth / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX, opts.centerY - imgHeight / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY); - this.size(imgWidth, imgHeight); - }); - - g.add(_image); - } - } - - return hollowFillID; - } - }, { - key: "getStrokeWidth", - value: function getStrokeWidth(opts) { - var w = this.w; - return opts.size * (100 - parseInt(w.config.plotOptions.radialBar.hollow.size)) / 100 / (opts.series.length + 1) - this.margin; - } - }]); - - return Radial; -}(Pie); - -/** - * ApexCharts RangeBar Class responsible for drawing Range/Timeline Bars. - * - * @module RangeBar - **/ - -var RangeBar = -/*#__PURE__*/ -function (_Bar) { - _inherits(RangeBar, _Bar); - - function RangeBar() { - _classCallCheck(this, RangeBar); - - return _possibleConstructorReturn(this, _getPrototypeOf(RangeBar).apply(this, arguments)); - } - - _createClass(RangeBar, [{ - key: "draw", - value: function draw(series, seriesIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - this.rangeBarOptions = this.w.config.plotOptions.rangeBar; - this.series = series; - this.seriesRangeStart = w.globals.seriesRangeStart; - this.seriesRangeEnd = w.globals.seriesRangeEnd; - this.initVariables(series); - var ret = graphics.group({ - class: 'apexcharts-rangebar-series apexcharts-plot-series' - }); - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - var pathTo = void 0, - pathFrom = void 0; - var x = void 0, - y = void 0, - xDivision = void 0, - // xDivision is the GRIDWIDTH divided by number of datapoints (columns) - yDivision = void 0, - // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) - zeroH = void 0, - // zeroH is the baseline where 0 meets y axis - zeroW = void 0; // zeroW is the baseline where 0 meets x axis - - var yArrj = []; // hold y values of current iterating series - - var xArrj = []; // hold x values of current iterating series - - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn - - var elSeries = graphics.group({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), - rel: i + 1, - 'data:realIndex': realIndex - }); - - if (series[i].length > 0) { - this.visibleI = this.visibleI + 1; - } - - var strokeWidth = 0; - var barHeight = 0; - var barWidth = 0; - - if (this.yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - var initPositions = this.initialPositions(); - y = initPositions.y; - yDivision = initPositions.yDivision; - barHeight = initPositions.barHeight; - zeroW = initPositions.zeroW; - x = initPositions.x; - barWidth = initPositions.barWidth; - xDivision = initPositions.xDivision; - zeroH = initPositions.zeroH; - xArrj.push(x + barWidth / 2); // eldatalabels - - var elDataLabelsWrap = graphics.group({ - class: 'apexcharts-datalabels' - }); - - for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { - if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) { - this.isNullValue = true; - } else { - this.isNullValue = false; - } - - if (w.config.stroke.show) { - if (this.isNullValue) { - strokeWidth = 0; - } else { - strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; - } - } - - var paths = null; - - if (this.isHorizontal) { - paths = this.drawRangeBarPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - barHeight: barHeight, - strokeWidth: strokeWidth, - pathTo: pathTo, - pathFrom: pathFrom, - zeroW: zeroW, - x: x, - y: y, - yDivision: yDivision, - elSeries: elSeries - }); - barWidth = paths.barWidth; - } else { - paths = this.drawRangeColumnPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - x: x, - y: y, - xDivision: xDivision, - pathTo: pathTo, - pathFrom: pathFrom, - barWidth: barWidth, - zeroH: zeroH, - strokeWidth: strokeWidth, - elSeries: elSeries - }); - barHeight = paths.barHeight; - } - - pathTo = paths.pathTo; - pathFrom = paths.pathFrom; - y = paths.y; - x = paths.x; // push current X - - if (j > 0) { - xArrj.push(x + barWidth / 2); - } - - yArrj.push(y); - var pathFill = fill.fillPath({ - seriesNumber: realIndex - }); - var lineFill = w.globals.stroke.colors[realIndex]; - elSeries = this.renderSeries({ - realIndex: realIndex, - pathFill: pathFill, - lineFill: lineFill, - j: j, - i: i, - pathFrom: pathFrom, - pathTo: pathTo, - strokeWidth: strokeWidth, - elSeries: elSeries, - x: x, - y: y, - series: series, - barHeight: barHeight, - barWidth: barWidth, - elDataLabelsWrap: elDataLabelsWrap, - visibleSeries: this.visibleI, - type: 'rangebar' - }); - } // push all x val arrays into main xArr - - - w.globals.seriesXvalues[realIndex] = xArrj; - w.globals.seriesYvalues[realIndex] = yArrj; - ret.add(elSeries); - } - - return ret; - } - }, { - key: "drawRangeColumnPaths", - value: function drawRangeColumnPaths(_ref) { - var indexes = _ref.indexes, - x = _ref.x, - y = _ref.y, - strokeWidth = _ref.strokeWidth, - xDivision = _ref.xDivision, - pathTo = _ref.pathTo, - pathFrom = _ref.pathFrom, - barWidth = _ref.barWidth, - zeroH = _ref.zeroH; - var w = this.w; - var graphics = new Graphics(this.ctx); - var i = indexes.i; - var j = indexes.j; - var yRatio = this.yRatio[this.yaxisIndex]; - var realIndex = indexes.realIndex; - var range = this.getRangeValue(realIndex, j); - var y1 = Math.min(range.start, range.end); - var y2 = Math.max(range.start, range.end); - - if (w.globals.isXNumeric) { - x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2; - } - - var barXPosition = x + barWidth * this.visibleI; - - if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { - y1 = zeroH; - } else { - y1 = zeroH - y1 / yRatio; - y2 = zeroH - y2 / yRatio; - } - - var barHeight = Math.abs(y2 - y1); - pathTo = graphics.move(barXPosition, zeroH); - pathFrom = graphics.move(barXPosition, y1); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j, true); - } - - pathTo = graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2); - pathFrom = pathFrom + graphics.move(barXPosition, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition, y1); - - if (!w.globals.isXNumeric) { - x = x + xDivision; - } - - return { - pathTo: pathTo, - pathFrom: pathFrom, - barHeight: barHeight, - x: x, - y: y2, - barXPosition: barXPosition - }; - } - }, { - key: "drawRangeBarPaths", - value: function drawRangeBarPaths(_ref2) { - var indexes = _ref2.indexes, - x = _ref2.x, - y = _ref2.y, - yDivision = _ref2.yDivision, - pathTo = _ref2.pathTo, - pathFrom = _ref2.pathFrom, - barHeight = _ref2.barHeight, - zeroW = _ref2.zeroW; - var w = this.w; - var graphics = new Graphics(this.ctx); - var i = indexes.i; - var j = indexes.j; - var realIndex = indexes.realIndex; - var x1 = zeroW; - var x2 = zeroW; - - if (w.globals.isXNumeric) { - y = (w.globals.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight; - } - - var barYPosition = y + barHeight * this.visibleI; - - if (typeof this.series[i][j] !== 'undefined' && this.series[i][j] !== null) { - x1 = zeroW + this.seriesRangeStart[i][j] / this.invertedYRatio; - x2 = zeroW + this.seriesRangeEnd[i][j] / this.invertedYRatio; - } - - pathTo = graphics.move(zeroW, barYPosition); - pathFrom = graphics.move(zeroW, barYPosition); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j); - } - - var barWidth = Math.abs(x2 - x1); - pathTo = graphics.move(x1, barYPosition) + graphics.line(x2, barYPosition) + graphics.line(x2, barYPosition + barHeight) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition); - pathFrom = pathFrom + graphics.line(x1, barYPosition) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition); - - if (!w.globals.isXNumeric) { - y = y + yDivision; - } - - return { - pathTo: pathTo, - pathFrom: pathFrom, - barWidth: barWidth, - x: x2, - y: y, - barYPosition: barYPosition - }; - } - }, { - key: "getRangeValue", - value: function getRangeValue(i, j) { - var w = this.w; - return { - start: w.globals.seriesRangeStart[i][j], - end: w.globals.seriesRangeEnd[i][j] - }; - } - }]); - - return RangeBar; -}(Bar); - -/** - * ApexCharts Line Class responsible for drawing Line / Area Charts. - * This class is also responsible for generating values for Bubble/Scatter charts, so need to rename it to Axis Charts to avoid confusions - * @module Line - **/ - -var Line = -/*#__PURE__*/ -function () { - function Line(ctx, xyRatios, isPointsChart) { - _classCallCheck(this, Line); - - this.ctx = ctx; - this.w = ctx.w; - this.xyRatios = xyRatios; - this.pointsChart = !(this.w.config.chart.type !== 'bubble' && this.w.config.chart.type !== 'scatter') || isPointsChart; - this.scatter = new Scatter(this.ctx); - this.noNegatives = this.w.globals.minX === Number.MAX_VALUE; - this.yaxisIndex = 0; - } - - _createClass(Line, [{ - key: "draw", - value: function draw(series, ptype, seriesIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - var type = w.globals.comboCharts ? ptype : w.config.chart.type; - var ret = graphics.group({ - class: "apexcharts-".concat(type, "-series apexcharts-plot-series") - }); - var coreUtils = new CoreUtils(this.ctx, w); - series = coreUtils.getLogSeries(series); - var yRatio = this.xyRatios.yRatio; - yRatio = coreUtils.getLogYRatios(yRatio); - var zRatio = this.xyRatios.zRatio; - var xRatio = this.xyRatios.xRatio; - var baseLineY = this.xyRatios.baseLineY; // push all series in an array, so we can draw in reverse order (for stacked charts) - - var allSeries = []; - var prevSeriesY = []; - var categoryAxisCorrection = 0; - - for (var i = 0; i < series.length; i++) { - // width divided into equal parts - if (type === 'line' && (w.config.fill.type === 'gradient' || w.config.fill.type[i] === 'gradient')) { - // a small adjustment to allow gradient line to draw correctly for all same values - - /* #fix https://github.com/apexcharts/apexcharts.js/issues/358 */ - if (coreUtils.seriesHaveSameValues(i)) { - var gSeries = series[i].slice(); - gSeries[gSeries.length - 1] = gSeries[gSeries.length - 1] + 0.000001; - series[i] = gSeries; - } - } - - var xDivision = w.globals.gridWidth / w.globals.dataPoints; - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; - - if (yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; - var yArrj = []; // hold y values of current iterating series - - var xArrj = []; // hold x values of current iterating series - // zeroY is the 0 value in y series which can be used in negative charts - - var zeroY = w.globals.gridHeight - baseLineY[this.yaxisIndex] - (this.isReversed ? w.globals.gridHeight : 0) + (this.isReversed ? baseLineY[this.yaxisIndex] * 2 : 0); - var areaBottomY = zeroY; - - if (zeroY > w.globals.gridHeight) { - areaBottomY = w.globals.gridHeight; - } - - categoryAxisCorrection = xDivision / 2; - var x = w.globals.padHorizontal + categoryAxisCorrection; - var y = 1; - - if (w.globals.isXNumeric && w.globals.seriesX.length > 0) { - x = (w.globals.seriesX[realIndex][0] - w.globals.minX) / xRatio; - } - - xArrj.push(x); - var linePath = void 0, - areaPath = void 0, - pathFromLine = void 0, - pathFromArea = void 0; - var linePaths = []; - var areaPaths = []; // el to which series will be drawn - - var elSeries = graphics.group({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]) - }); // points - - var elPointsMain = graphics.group({ - class: 'apexcharts-series-markers-wrap' - }); // eldatalabels - - var elDataLabelsWrap = graphics.group({ - class: 'apexcharts-datalabels' - }); - this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex); - var longestSeries = series[i].length === w.globals.dataPoints; - elSeries.attr({ - 'data:longestSeries': longestSeries, - rel: i + 1, - 'data:realIndex': realIndex - }); - this.appendPathFrom = true; - var pX = x; - var pY = void 0; - var prevX = pX; - var prevY = zeroY; // w.globals.svgHeight; - - var lineYPosition = 0; // the first value in the current series is not null or undefined - - var firstPrevY = this.determineFirstPrevY({ - i: i, - series: series, - yRatio: yRatio[this.yaxisIndex], - zeroY: zeroY, - prevY: prevY, - prevSeriesY: prevSeriesY, - lineYPosition: lineYPosition - }); - prevY = firstPrevY.prevY; - yArrj.push(prevY); - pY = prevY; - - if (series[i][0] === null) { - // when the first value itself is null, we need to move the pointer to a location where a null value is not found - for (var s = 0; s < series[i].length; s++) { - if (series[i][s] !== null) { - prevX = xDivision * s; - prevY = zeroY - series[i][s] / yRatio[this.yaxisIndex]; - linePath = graphics.move(prevX, prevY); - areaPath = graphics.move(prevX, areaBottomY); - break; - } - } - } else { - linePath = graphics.move(prevX, prevY); - areaPath = graphics.move(prevX, areaBottomY) + graphics.line(prevX, prevY); - } - - pathFromLine = graphics.move(-1, zeroY) + graphics.line(-1, zeroY); - pathFromArea = graphics.move(-1, zeroY) + graphics.line(-1, zeroY); - - if (w.globals.previousPaths.length > 0) { - var pathFrom = this.checkPreviousPaths({ - pathFromLine: pathFromLine, - pathFromArea: pathFromArea, - realIndex: realIndex - }); - pathFromLine = pathFrom.pathFromLine; - pathFromArea = pathFrom.pathFromArea; - } - - var iterations = w.globals.dataPoints > 1 ? w.globals.dataPoints - 1 : w.globals.dataPoints; - - for (var j = 0; j < iterations; j++) { - if (w.globals.isXNumeric) { - var sX = w.globals.seriesX[realIndex][j + 1]; - - if (typeof w.globals.seriesX[realIndex][j + 1] === 'undefined') { - /* fix #374 */ - sX = w.globals.seriesX[realIndex][iterations - 1]; - } - - x = (sX - w.globals.minX) / xRatio; - } else { - x = x + xDivision; - } - - var minY = Utils.isNumber(w.globals.minYArr[realIndex]) ? w.globals.minYArr[realIndex] : w.globals.minY; - - if (w.config.chart.stacked) { - if (i > 0 && w.globals.collapsedSeries.length < w.config.series.length - 1) { - lineYPosition = prevSeriesY[i - 1][j + 1]; - } else { - // the first series will not have prevY values - lineYPosition = zeroY; - } - - if (typeof series[i][j + 1] === 'undefined' || series[i][j + 1] === null) { - y = lineYPosition - minY / yRatio[this.yaxisIndex] + (this.isReversed ? minY / yRatio[this.yaxisIndex] : 0) * 2; - } else { - y = lineYPosition - series[i][j + 1] / yRatio[this.yaxisIndex] + (this.isReversed ? series[i][j + 1] / yRatio[this.yaxisIndex] : 0) * 2; - } - } else { - if (typeof series[i][j + 1] === 'undefined' || series[i][j + 1] === null) { - y = zeroY - minY / yRatio[this.yaxisIndex] + (this.isReversed ? minY / yRatio[this.yaxisIndex] : 0) * 2; - } else { - y = zeroY - series[i][j + 1] / yRatio[this.yaxisIndex] + (this.isReversed ? series[i][j + 1] / yRatio[this.yaxisIndex] : 0) * 2; - } - } // push current X - - - xArrj.push(x); // push current Y that will be used as next series's bottom position - - yArrj.push(y); - var calculatedPaths = this.createPaths({ - series: series, - i: i, - j: j, - x: x, - y: y, - xDivision: xDivision, - pX: pX, - pY: pY, - areaBottomY: areaBottomY, - linePath: linePath, - areaPath: areaPath, - linePaths: linePaths, - areaPaths: areaPaths, - seriesIndex: seriesIndex - }); - areaPaths = calculatedPaths.areaPaths; - linePaths = calculatedPaths.linePaths; - pX = calculatedPaths.pX; - pY = calculatedPaths.pY; - areaPath = calculatedPaths.areaPath; - linePath = calculatedPaths.linePath; - - if (this.appendPathFrom) { - pathFromLine = pathFromLine + graphics.line(x, zeroY); - pathFromArea = pathFromArea + graphics.line(x, zeroY); - } - - var pointsPos = this.calculatePoints({ - series: series, - x: x, - y: y, - realIndex: realIndex, - i: i, - j: j, - prevY: prevY, - categoryAxisCorrection: categoryAxisCorrection, - xRatio: xRatio - }); - - if (!this.pointsChart) { - var markers = new Markers(this.ctx); - - if (w.globals.dataPoints > 1) { - elPointsMain.node.classList.add('hidden'); - } - - var elPointsWrap = markers.plotChartMarkers(pointsPos, realIndex, j + 1); - - if (elPointsWrap !== null) { - elPointsMain.add(elPointsWrap); - } - } else { - // scatter / bubble chart points creation - this.scatter.draw(elSeries, j, { - realIndex: realIndex, - pointsPos: pointsPos, - zRatio: zRatio, - elParent: elPointsMain - }); - } - - var dataLabelAlign = !series[i][j + 1] || series[i][j + 1] > series[i][j] ? 'top' : 'bottom'; - var dataLabels = new DataLabels(this.ctx); - var drawnLabels = dataLabels.drawDataLabel(pointsPos, realIndex, j + 1, null, dataLabelAlign); - - if (drawnLabels !== null) { - elDataLabelsWrap.add(drawnLabels); - } - } // push all current y values array to main PrevY Array - - - prevSeriesY.push(yArrj); // push all x val arrays into main xArr - - w.globals.seriesXvalues[realIndex] = xArrj; - w.globals.seriesYvalues[realIndex] = yArrj; // these elements will be shown after area path animation completes - - if (!this.pointsChart) { - w.globals.delayedElements.push({ - el: elPointsMain.node, - index: realIndex - }); - } - - var defaultRenderedPathOptions = { - i: i, - realIndex: realIndex, - animationDelay: i, - initialSpeed: w.config.chart.animations.speed, - dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed, - className: "apexcharts-".concat(type), - id: "apexcharts-".concat(type) - }; - - if (type === 'area') { - var pathFill = fill.fillPath({ - seriesNumber: realIndex - }); - - for (var p = 0; p < areaPaths.length; p++) { - var renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { - pathFrom: pathFromArea, - pathTo: areaPaths[p], - stroke: 'none', - strokeWidth: 0, - strokeLineCap: null, - fill: pathFill - })); - elSeries.add(renderedPath); - } - } - - if (w.config.stroke.show && !this.pointsChart) { - var lineFill = null; - - if (type === 'line') { - // fillable lines only for lineChart - lineFill = fill.fillPath({ - seriesNumber: realIndex, - i: i - }); - } else { - lineFill = w.globals.stroke.colors[realIndex]; - } - - for (var _p = 0; _p < linePaths.length; _p++) { - var _renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { - pathFrom: pathFromLine, - pathTo: linePaths[_p], - stroke: lineFill, - strokeWidth: Array.isArray(w.config.stroke.width) ? w.config.stroke.width[realIndex] : w.config.stroke.width, - strokeLineCap: w.config.stroke.lineCap, - fill: 'none' - })); - - elSeries.add(_renderedPath); - } - } - - elSeries.add(elPointsMain); - elSeries.add(elDataLabelsWrap); - allSeries.push(elSeries); - } - - for (var _s = allSeries.length; _s > 0; _s--) { - ret.add(allSeries[_s - 1]); - } - - return ret; - } - }, { - key: "createPaths", - value: function createPaths(_ref) { - var series = _ref.series, - i = _ref.i, - j = _ref.j, - x = _ref.x, - y = _ref.y, - pX = _ref.pX, - pY = _ref.pY, - xDivision = _ref.xDivision, - areaBottomY = _ref.areaBottomY, - linePath = _ref.linePath, - areaPath = _ref.areaPath, - linePaths = _ref.linePaths, - areaPaths = _ref.areaPaths, - seriesIndex = _ref.seriesIndex; - var w = this.w; - var graphics = new Graphics(this.ctx); - var curve = w.config.stroke.curve; - - if (Array.isArray(w.config.stroke.curve)) { - if (Array.isArray(seriesIndex)) { - curve = w.config.stroke.curve[seriesIndex[i]]; - } else { - curve = w.config.stroke.curve[i]; - } - } // logic of smooth curve derived from chartist - // CREDITS: https://gionkunz.github.io/chartist-js/ - - - if (curve === 'smooth') { - var length = (x - pX) * 0.35; - - if (w.globals.hasNullValues) { - if (series[i][j] !== null) { - if (series[i][j + 1] !== null) { - linePath = graphics.move(pX, pY) + graphics.curve(pX + length, pY, x - length, y, x + 1, y); - areaPath = graphics.move(pX + 1, pY) + graphics.curve(pX + length, pY, x - length, y, x + 1, y) + graphics.line(x, areaBottomY) + graphics.line(pX, areaBottomY) + 'z'; - } else { - linePath = graphics.move(pX, pY); - areaPath = graphics.move(pX, pY) + 'z'; - } - } - - linePaths.push(linePath); - areaPaths.push(areaPath); - } else { - linePath = linePath + graphics.curve(pX + length, pY, x - length, y, x, y); - areaPath = areaPath + graphics.curve(pX + length, pY, x - length, y, x, y); - } - - pX = x; - pY = y; - - if (j === series[i].length - 2) { - // last loop, close path - areaPath = areaPath + graphics.curve(pX, pY, x, y, x, areaBottomY) + graphics.move(x, y) + 'z'; - - if (!w.globals.hasNullValues) { - linePaths.push(linePath); - areaPaths.push(areaPath); - } - } - } else { - if (series[i][j + 1] === null) { - linePath = linePath + graphics.move(x, y); - areaPath = areaPath + graphics.line(x - xDivision, areaBottomY) + graphics.move(x, y); - } - - if (series[i][j] === null) { - linePath = linePath + graphics.move(x, y); - areaPath = areaPath + graphics.move(x, areaBottomY); - } - - if (curve === 'stepline') { - linePath = linePath + graphics.line(x, null, 'H') + graphics.line(null, y, 'V'); - areaPath = areaPath + graphics.line(x, null, 'H') + graphics.line(null, y, 'V'); - } else if (curve === 'straight') { - linePath = linePath + graphics.line(x, y); - areaPath = areaPath + graphics.line(x, y); - } - - if (j === series[i].length - 2) { - // last loop, close path - areaPath = areaPath + graphics.line(x, areaBottomY) + graphics.move(x, y) + 'z'; - linePaths.push(linePath); - areaPaths.push(areaPath); - } - } - - return { - linePaths: linePaths, - areaPaths: areaPaths, - pX: pX, - pY: pY, - linePath: linePath, - areaPath: areaPath - }; - } - }, { - key: "calculatePoints", - value: function calculatePoints(_ref2) { - var series = _ref2.series, - realIndex = _ref2.realIndex, - x = _ref2.x, - y = _ref2.y, - i = _ref2.i, - j = _ref2.j, - prevY = _ref2.prevY, - categoryAxisCorrection = _ref2.categoryAxisCorrection, - xRatio = _ref2.xRatio; - var w = this.w; - var ptX = []; - var ptY = []; - - if (j === 0) { - var xPT1st = categoryAxisCorrection + w.config.markers.offsetX; // the first point for line series - // we need to check whether it's not a time series, because a time series may - // start from the middle of the x axis - - if (w.globals.isXNumeric) { - xPT1st = (w.globals.seriesX[realIndex][0] - w.globals.minX) / xRatio + w.config.markers.offsetX; - } // push 2 points for the first data values - - - ptX.push(xPT1st); - ptY.push(Utils.isNumber(series[i][0]) ? prevY + w.config.markers.offsetY : null); - ptX.push(x + w.config.markers.offsetX); - ptY.push(Utils.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null); - } else { - ptX.push(x + w.config.markers.offsetX); - ptY.push(Utils.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null); - } - - var pointsPos = { - x: ptX, - y: ptY - }; - return pointsPos; - } - }, { - key: "checkPreviousPaths", - value: function checkPreviousPaths(_ref3) { - var pathFromLine = _ref3.pathFromLine, - pathFromArea = _ref3.pathFromArea, - realIndex = _ref3.realIndex; - var w = this.w; - - for (var pp = 0; pp < w.globals.previousPaths.length; pp++) { - var gpp = w.globals.previousPaths[pp]; - - if ((gpp.type === 'line' || gpp.type === 'area') && gpp.paths.length > 0 && parseInt(gpp.realIndex) === parseInt(realIndex)) { - if (gpp.type === 'line') { - this.appendPathFrom = false; - pathFromLine = w.globals.previousPaths[pp].paths[0].d; - } else if (gpp.type === 'area') { - this.appendPathFrom = false; - pathFromArea = w.globals.previousPaths[pp].paths[0].d; - - if (w.config.stroke.show) { - pathFromLine = w.globals.previousPaths[pp].paths[1].d; - } - } - } - } - - return { - pathFromLine: pathFromLine, - pathFromArea: pathFromArea - }; - } - }, { - key: "determineFirstPrevY", - value: function determineFirstPrevY(_ref4) { - var i = _ref4.i, - series = _ref4.series, - yRatio = _ref4.yRatio, - zeroY = _ref4.zeroY, - prevY = _ref4.prevY, - prevSeriesY = _ref4.prevSeriesY, - lineYPosition = _ref4.lineYPosition; - var w = this.w; - - if (typeof series[i][0] !== 'undefined') { - if (w.config.chart.stacked) { - if (i > 0) { - // 1st y value of previous series - lineYPosition = prevSeriesY[i - 1][0]; - } else { - // the first series will not have prevY values - lineYPosition = zeroY; - } - - prevY = lineYPosition - series[i][0] / yRatio + (this.isReversed ? series[i][0] / yRatio : 0) * 2; - } else { - prevY = zeroY - series[i][0] / yRatio + (this.isReversed ? series[i][0] / yRatio : 0) * 2; - } - } else { - // the first value in the current series is null - if (w.config.chart.stacked && i > 0 && typeof series[i][0] === 'undefined') { - // check for undefined value (undefined value will occur when we clear the series while user clicks on legend to hide serieses) - for (var s = i - 1; s >= 0; s--) { - // for loop to get to 1st previous value until we get it - if (series[s][0] !== null && typeof series[s][0] !== 'undefined') { - lineYPosition = prevSeriesY[s][0]; - prevY = lineYPosition; - break; - } - } - } - } - - return { - prevY: prevY, - lineYPosition: lineYPosition - }; - } - }]); - - return Line; -}(); - -/** - * ApexCharts Formatter Class for setting value formatters for axes as well as tooltips. - * - * @module Formatters - **/ - -var Formatters = -/*#__PURE__*/ -function () { - function Formatters(ctx) { - _classCallCheck(this, Formatters); - - this.ctx = ctx; - this.w = ctx.w; - this.tooltipKeyFormat = 'dd MMM'; - } - - _createClass(Formatters, [{ - key: "xLabelFormat", - value: function xLabelFormat(fn, val) { - var w = this.w; - - if (w.config.xaxis.type === 'datetime') { - // if user has not specified a custom formatter, use the default tooltip.x.format - if (w.config.tooltip.x.formatter === undefined) { - var datetimeObj = new DateTime(this.ctx); - return datetimeObj.formatDate(new Date(val), w.config.tooltip.x.format, true, true); - } - } - - return fn(val); - } - }, { - key: "setLabelFormatters", - value: function setLabelFormatters() { - var w = this.w; - - w.globals.xLabelFormatter = function (val) { - return val; - }; - - w.globals.xaxisTooltipFormatter = function (val) { - return val; - }; - - w.globals.ttKeyFormatter = function (val) { - return val; - }; - - w.globals.ttZFormatter = function (val) { - return val; - }; - - w.globals.legendFormatter = function (val) { - return val; - }; - - if (typeof w.config.tooltip.x.formatter === 'function') { - w.globals.ttKeyFormatter = w.config.tooltip.x.formatter; - } - - if (typeof w.config.xaxis.tooltip.formatter === 'function') { - w.globals.xaxisTooltipFormatter = w.config.xaxis.tooltip.formatter; - } - - if (Array.isArray(w.config.tooltip.y)) { - w.globals.ttVal = w.config.tooltip.y; - } else { - if (w.config.tooltip.y.formatter !== undefined) { - w.globals.ttVal = w.config.tooltip.y; - } - } - - if (w.config.tooltip.z.formatter !== undefined) { - w.globals.ttZFormatter = w.config.tooltip.z.formatter; - } // legend formatter - if user wants to append any global values of series to legend text - - - if (w.config.legend.formatter !== undefined) { - w.globals.legendFormatter = w.config.legend.formatter; - } // formatter function will always overwrite format property - - - if (w.config.xaxis.labels.formatter !== undefined) { - w.globals.xLabelFormatter = w.config.xaxis.labels.formatter; - } else { - w.globals.xLabelFormatter = function (val) { - if (Utils.isNumber(val)) { - // numeric xaxis may have smaller range, so defaulting to 1 decimal - if (w.config.xaxis.type === 'numeric' && w.globals.dataPoints < 50) { - return val.toFixed(1); - } - - return val.toFixed(0); - } - - return val; - }; - } // formatter function will always overwrite format property - - - w.config.yaxis.forEach(function (yaxe, i) { - if (yaxe.labels.formatter !== undefined) { - w.globals.yLabelFormatters[i] = yaxe.labels.formatter; - } else { - w.globals.yLabelFormatters[i] = function (val) { - if (Utils.isNumber(val)) { - if (w.globals.yValueDecimal !== 0) { - return val.toFixed(yaxe.decimalsInFloat !== undefined ? yaxe.decimalsInFloat : w.globals.yValueDecimal); - } else if (w.globals.maxY - w.globals.minY < 5) { - return val.toFixed(1); - } else { - return val.toFixed(0); - } - } - - return val; - }; - } - }); - return w.globals; - } - }, { - key: "heatmapLabelFormatters", - value: function heatmapLabelFormatters() { - var w = this.w; - - if (w.config.chart.type === 'heatmap') { - w.globals.yAxisScale[0].result = w.globals.seriesNames.slice(); // get the longest string from the labels array and also apply label formatter to it - - var longest = w.globals.seriesNames.reduce(function (a, b) { - return a.length > b.length ? a : b; - }, 0); - w.globals.yAxisScale[0].niceMax = longest; - w.globals.yAxisScale[0].niceMin = longest; - } - } - }]); - - return Formatters; -}(); - -var AxesUtils = -/*#__PURE__*/ -function () { - function AxesUtils(ctx) { - _classCallCheck(this, AxesUtils); - - this.ctx = ctx; - this.w = ctx.w; - } // Based on the formatter function, get the label text and position - - - _createClass(AxesUtils, [{ - key: "getLabel", - value: function getLabel(labels, timelineLabels, x, i) { - var drawnLabels = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var w = this.w; - var rawLabel = typeof labels[i] === 'undefined' ? '' : labels[i]; - var label; - var xlbFormatter = w.globals.xLabelFormatter; - var customFormatter = w.config.xaxis.labels.formatter; - var xFormat = new Formatters(this.ctx); - label = xFormat.xLabelFormat(xlbFormatter, rawLabel); - - if (customFormatter !== undefined) { - label = customFormatter(rawLabel, labels[i], i); - } - - if (timelineLabels.length > 0) { - x = timelineLabels[i].position; - label = timelineLabels[i].value; - } else { - if (w.config.xaxis.type === 'datetime' && customFormatter === undefined) { - label = ''; - } - } - - if (typeof label === 'undefined') label = ''; - label = label.toString(); - - if (label.indexOf('NaN') === 0 || label.toLowerCase().indexOf('invalid') === 0 || label.toLowerCase().indexOf('infinity') >= 0 || drawnLabels.indexOf(label) >= 0 && !w.config.xaxis.labels.showDuplicates) { - label = ''; - } - - return { - x: x, - text: label - }; - } - }, { - key: "drawYAxisTicks", - value: function drawYAxisTicks(x, tickAmount, axisBorder, axisTicks, realIndex, labelsDivider, elYaxis) { - var w = this.w; - var graphics = new Graphics(this.ctx); // initial label position = 0; - - var t = w.globals.translateY; - - if (axisTicks.show) { - if (w.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width; - - for (var i = tickAmount; i >= 0; i--) { - var tY = t + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY - 1; - - if (w.globals.isBarHorizontal) { - tY = labelsDivider * i; - } - - var elTick = graphics.drawLine(x + axisBorder.offsetX - axisTicks.width + axisTicks.offsetX, tY + axisTicks.offsetY, x + axisBorder.offsetX + axisTicks.offsetX, tY + axisTicks.offsetY, axisBorder.color); - elYaxis.add(elTick); - t = t + labelsDivider; - } - } - } - }]); - - return AxesUtils; -}(); - -/** - * ApexCharts XAxis Class for drawing X-Axis. - * - * @module XAxis - **/ - -var XAxis = -/*#__PURE__*/ -function () { - function XAxis(ctx) { - _classCallCheck(this, XAxis); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.xaxisLabels = w.globals.labels.slice(); - - if (w.globals.timelineLabels.length > 0) { - // timeline labels are there - this.xaxisLabels = w.globals.timelineLabels.slice(); - } - - this.drawnLabels = []; - - if (w.config.xaxis.position === 'top') { - this.offY = 0; - } else { - this.offY = w.globals.gridHeight + 1; - } - - this.offY = this.offY + w.config.xaxis.axisBorder.offsetY; - this.xaxisFontSize = w.config.xaxis.labels.style.fontSize; - this.xaxisFontFamily = w.config.xaxis.labels.style.fontFamily; - this.xaxisForeColors = w.config.xaxis.labels.style.colors; - this.xaxisBorderWidth = w.config.xaxis.axisBorder.width; - - if (this.xaxisBorderWidth.indexOf('%') > -1) { - this.xaxisBorderWidth = w.globals.gridWidth * parseInt(this.xaxisBorderWidth) / 100; - } else { - this.xaxisBorderWidth = parseInt(this.xaxisBorderWidth); - } - - this.xaxisBorderHeight = w.config.xaxis.axisBorder.height; // For bars, we will only consider single y xais, - // as we are not providing multiple yaxis for bar charts - - this.yaxis = w.config.yaxis[0]; - this.axesUtils = new AxesUtils(ctx); - } - - _createClass(XAxis, [{ - key: "drawXaxis", - value: function drawXaxis() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var elXaxis = graphics.group({ - class: 'apexcharts-xaxis', - transform: "translate(".concat(w.config.xaxis.offsetX, ", ").concat(w.config.xaxis.offsetY, ")") - }); - var elXaxisTexts = graphics.group({ - class: 'apexcharts-xaxis-texts-g', - transform: "translate(".concat(w.globals.translateXAxisX, ", ").concat(w.globals.translateXAxisY, ")") - }); - elXaxis.add(elXaxisTexts); - var colWidth; // initial x Position (keep adding column width in the loop) - - var xPos = w.globals.padHorizontal; - var labels = []; - - for (var i = 0; i < this.xaxisLabels.length; i++) { - labels.push(this.xaxisLabels[i]); - } - - if (w.globals.isXNumeric) { - colWidth = w.globals.gridWidth / (labels.length - 1); - xPos = xPos + colWidth / 2 + w.config.xaxis.labels.offsetX; - } else { - colWidth = w.globals.gridWidth / labels.length; - xPos = xPos + colWidth + w.config.xaxis.labels.offsetX; - } - - var labelsLen = labels.length; - - if (w.config.xaxis.labels.show) { - for (var _i = 0; _i <= labelsLen - 1; _i++) { - var x = xPos - colWidth / 2 + w.config.xaxis.labels.offsetX; - var label = this.axesUtils.getLabel(labels, w.globals.timelineLabels, x, _i, this.drawnLabels); - this.drawnLabels.push(label.text); - var offsetYCorrection = 28; - - if (w.globals.rotateXLabels) { - offsetYCorrection = 22; - } - - var elTick = graphics.drawText({ - x: label.x, - y: this.offY + w.config.xaxis.labels.offsetY + offsetYCorrection, - text: '', - textAnchor: 'middle', - fontSize: this.xaxisFontSize, - fontFamily: this.xaxisFontFamily, - foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[_i] : this.xaxisForeColors, - cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass - }); - - if (_i === labelsLen - 1) { - if (w.globals.skipLastTimelinelabel) { - label.text = ''; - } - } - - elXaxisTexts.add(elTick); - graphics.addTspan(elTick, label.text, this.xaxisFontFamily); - var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); - elTooltipTitle.textContent = label.text; - elTick.node.appendChild(elTooltipTitle); - xPos = xPos + colWidth; - } - } - - if (w.config.xaxis.title.text !== undefined) { - var elXaxisTitle = graphics.group({ - class: 'apexcharts-xaxis-title' - }); - var elXAxisTitleText = graphics.drawText({ - x: w.globals.gridWidth / 2 + w.config.xaxis.title.offsetX, - y: this.offY - parseInt(this.xaxisFontSize) + w.globals.xAxisLabelsHeight + w.config.xaxis.title.offsetY, - text: w.config.xaxis.title.text, - textAnchor: 'middle', - fontSize: w.config.xaxis.title.style.fontSize, - fontFamily: w.config.xaxis.title.style.fontFamily, - foreColor: w.config.xaxis.title.style.color, - cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass - }); - elXaxisTitle.add(elXAxisTitleText); - elXaxis.add(elXaxisTitle); - } - - if (w.config.xaxis.axisBorder.show) { - var lineCorrection = 0; - - if (w.config.chart.type === 'bar' && w.globals.isXNumeric) { - lineCorrection = lineCorrection - 15; - } - - var elHorzLine = graphics.drawLine(w.globals.padHorizontal + lineCorrection + w.config.xaxis.axisBorder.offsetX, this.offY, this.xaxisBorderWidth, this.offY, w.config.xaxis.axisBorder.color, 0, this.xaxisBorderHeight); - elXaxis.add(elHorzLine); - } - - return elXaxis; - } // this actually becomes the vertical axis (for bar charts) - - }, { - key: "drawXaxisInversed", - value: function drawXaxisInversed(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var translateYAxisX = w.config.yaxis[0].opposite ? w.globals.translateYAxisX[realIndex] : 0; - var elYaxis = graphics.group({ - class: 'apexcharts-yaxis apexcharts-xaxis-inversed', - rel: realIndex - }); - var elYaxisTexts = graphics.group({ - class: 'apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g', - transform: 'translate(' + translateYAxisX + ', 0)' - }); - elYaxis.add(elYaxisTexts); - var colHeight; // initial x Position (keep adding column width in the loop) - - var yPos; - var labels = []; - - for (var i = 0; i < this.xaxisLabels.length; i++) { - labels.push(this.xaxisLabels[i]); - } - - colHeight = w.globals.gridHeight / labels.length; - yPos = -(colHeight / 2.2); - var lbFormatter = w.globals.yLabelFormatters[0]; - var ylabels = w.config.yaxis[0].labels; - - if (ylabels.show) { - for (var _i2 = 0; _i2 <= labels.length - 1; _i2++) { - var label = typeof labels[_i2] === 'undefined' ? '' : labels[_i2]; - label = lbFormatter(label); - var elLabel = graphics.drawText({ - x: ylabels.offsetX - 15, - y: yPos + colHeight + ylabels.offsetY, - text: label, - textAnchor: this.yaxis.opposite ? 'start' : 'end', - foreColor: ylabels.style.color ? ylabels.style.color : ylabels.style.colors[_i2], - fontSize: ylabels.style.fontSize, - fontFamily: ylabels.style.fontFamily, - cssClass: 'apexcharts-yaxis-label ' + ylabels.style.cssClass - }); - elYaxisTexts.add(elLabel); - - if (w.config.yaxis[realIndex].labels.rotate !== 0) { - var labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node); - elLabel.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(labelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); - } - - yPos = yPos + colHeight; - } - } - - if (w.config.yaxis[0].title.text !== undefined) { - var elXaxisTitle = graphics.group({ - class: 'apexcharts-yaxis-title apexcharts-xaxis-title-inversed', - transform: 'translate(' + translateYAxisX + ', 0)' - }); - var elXAxisTitleText = graphics.drawText({ - x: 0, - y: w.globals.gridHeight / 2, - text: w.config.yaxis[0].title.text, - textAnchor: 'middle', - foreColor: w.config.yaxis[0].title.style.color, - fontSize: w.config.yaxis[0].title.style.fontSize, - fontFamily: w.config.yaxis[0].title.style.fontFamily, - cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[0].title.style.cssClass - }); - elXaxisTitle.add(elXAxisTitleText); - elYaxis.add(elXaxisTitle); - } - - if (w.config.xaxis.axisBorder.show) { - var elHorzLine = graphics.drawLine(w.globals.padHorizontal + w.config.xaxis.axisBorder.offsetX, this.offY, this.xaxisBorderWidth, this.offY, this.yaxis.axisBorder.color, 0, this.xaxisBorderHeight); - elYaxis.add(elHorzLine); - this.axesUtils.drawYAxisTicks(0, labels.length, w.config.yaxis[0].axisBorder, w.config.yaxis[0].axisTicks, 0, colHeight, elYaxis); - } - - return elYaxis; - } - }, { - key: "drawXaxisTicks", - value: function drawXaxisTicks(x1, appendToElement) { - var w = this.w; - var x2 = x1; - if (x1 < 0 || x1 > w.globals.gridWidth) return; - var y1 = this.offY + w.config.xaxis.axisTicks.offsetY; - var y2 = y1 + w.config.xaxis.axisTicks.height; - - if (w.config.xaxis.axisTicks.show) { - var graphics = new Graphics(this.ctx); - var line = graphics.drawLine(x1 + w.config.xaxis.axisTicks.offsetX, y1 + w.config.xaxis.offsetY, x2 + w.config.xaxis.axisTicks.offsetX, y2 + w.config.xaxis.offsetY, w.config.xaxis.axisTicks.color); // we are not returning anything, but appending directly to the element pased in param - - appendToElement.add(line); - line.node.classList.add('apexcharts-xaxis-tick'); - } - } - }, { - key: "getXAxisTicksPositions", - value: function getXAxisTicksPositions() { - var w = this.w; - var xAxisTicksPositions = []; - var xCount = this.xaxisLabels.length; - var x1 = w.globals.padHorizontal; - - if (w.globals.timelineLabels.length > 0) { - for (var i = 0; i < xCount; i++) { - x1 = this.xaxisLabels[i].position; - xAxisTicksPositions.push(x1); - } - } else { - var xCountForCategoryCharts = xCount; - - for (var _i3 = 0; _i3 < xCountForCategoryCharts; _i3++) { - var x1Count = xCountForCategoryCharts; - - if (w.globals.isXNumeric && w.config.chart.type !== 'bar') { - x1Count -= 1; - } - - x1 = x1 + w.globals.gridWidth / x1Count; - xAxisTicksPositions.push(x1); - } - } - - return xAxisTicksPositions; - } // to rotate x-axis labels or to put ... for longer text in xaxis - - }, { - key: "xAxisLabelCorrections", - value: function xAxisLabelCorrections() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var xAxis = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g'); - var xAxisTexts = w.globals.dom.baseEl.querySelectorAll('.apexcharts-xaxis-texts-g text'); - var yAxisTextsInversed = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-inversed text'); - var xAxisTextsInversed = w.globals.dom.baseEl.querySelectorAll('.apexcharts-xaxis-inversed-texts-g text'); - - if (w.globals.rotateXLabels || w.config.xaxis.labels.rotateAlways) { - for (var xat = 0; xat < xAxisTexts.length; xat++) { - var textRotatingCenter = graphics.rotateAroundCenter(xAxisTexts[xat]); - textRotatingCenter.y = textRotatingCenter.y - 1; // + tickWidth/4; - - textRotatingCenter.x = textRotatingCenter.x + 1; - xAxisTexts[xat].setAttribute('transform', "rotate(".concat(w.config.xaxis.labels.rotate, " ").concat(textRotatingCenter.x, " ").concat(textRotatingCenter.y, ")")); - xAxisTexts[xat].setAttribute('text-anchor', "end"); - var offsetHeight = 10; - xAxis.setAttribute('transform', "translate(0, ".concat(-offsetHeight, ")")); - var tSpan = xAxisTexts[xat].childNodes; - - if (w.config.xaxis.labels.trim) { - graphics.placeTextWithEllipsis(tSpan[0], tSpan[0].textContent, w.config.xaxis.labels.maxHeight - 40); - } - } - } else { - var width = w.globals.gridWidth / w.globals.labels.length; - - for (var _xat = 0; _xat < xAxisTexts.length; _xat++) { - var _tSpan = xAxisTexts[_xat].childNodes; - - if (w.config.xaxis.labels.trim && w.config.xaxis.type !== 'datetime') { - graphics.placeTextWithEllipsis(_tSpan[0], _tSpan[0].textContent, width); - } - } - } - - if (yAxisTextsInversed.length > 0) { - // truncate rotated y axis in bar chart (x axis) - var firstLabelPosX = yAxisTextsInversed[yAxisTextsInversed.length - 1].getBBox(); - var lastLabelPosX = yAxisTextsInversed[0].getBBox(); - - if (firstLabelPosX.x < -20) { - yAxisTextsInversed[yAxisTextsInversed.length - 1].parentNode.removeChild(yAxisTextsInversed[yAxisTextsInversed.length - 1]); - } - - if (lastLabelPosX.x + lastLabelPosX.width > w.globals.gridWidth) { - yAxisTextsInversed[0].parentNode.removeChild(yAxisTextsInversed[0]); - } // truncate rotated x axis in bar chart (y axis) - - - for (var _xat2 = 0; _xat2 < xAxisTextsInversed.length; _xat2++) { - graphics.placeTextWithEllipsis(xAxisTextsInversed[_xat2], xAxisTextsInversed[_xat2].textContent, w.config.yaxis[0].labels.maxWidth - parseInt(w.config.yaxis[0].title.style.fontSize) * 2 - 20); - } - } - } // renderXAxisBands() { - // let w = this.w; - // let plotBand = document.createElementNS(w.globals.SVGNS, 'rect') - // w.globals.dom.elGraphical.add(plotBand) - // } - - }]); - - return XAxis; -}(); - -/** - * ApexCharts YAxis Class for drawing Y-Axis. - * - * @module YAxis - **/ - -var YAxis = -/*#__PURE__*/ -function () { - function YAxis(ctx) { - _classCallCheck(this, YAxis); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.xaxisFontSize = w.config.xaxis.labels.style.fontSize; - this.axisFontFamily = w.config.xaxis.labels.style.fontFamily; - this.xaxisForeColors = w.config.xaxis.labels.style.colors; - this.xAxisoffX = 0; - - if (w.config.xaxis.position === 'bottom') { - this.xAxisoffX = w.globals.gridHeight; - } - - this.drawnLabels = []; - this.axesUtils = new AxesUtils(ctx); - } - - _createClass(YAxis, [{ - key: "drawYaxis", - value: function drawYaxis(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var yaxisFontSize = w.config.yaxis[realIndex].labels.style.fontSize; - var yaxisFontFamily = w.config.yaxis[realIndex].labels.style.fontFamily; - var elYaxis = graphics.group({ - class: 'apexcharts-yaxis', - rel: realIndex, - transform: 'translate(' + w.globals.translateYAxisX[realIndex] + ', 0)' - }); - - if (!w.config.yaxis[realIndex].show) { - return elYaxis; - } - - var elYaxisTexts = graphics.group({ - class: 'apexcharts-yaxis-texts-g' - }); - elYaxis.add(elYaxisTexts); - var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg height/number of ticks - - var labelsDivider = w.globals.gridHeight / tickAmount + 0.1; // initial label position = 0; - - var l = w.globals.translateY; - var lbFormatter = w.globals.yLabelFormatters[realIndex]; - var labels = w.globals.yAxisScale[realIndex].result.slice(); - - if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].reversed) { - labels.reverse(); - } - - if (w.config.yaxis[realIndex].labels.show) { - for (var i = tickAmount; i >= 0; i--) { - var val = labels[i]; - val = lbFormatter(val, i); - var xPad = w.config.yaxis[realIndex].labels.padding; - - if (w.config.yaxis[realIndex].opposite && w.config.yaxis.length !== 0) { - xPad = xPad * -1; - } - - var label = graphics.drawText({ - x: xPad, - y: l + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY + 1, - text: val, - textAnchor: w.config.yaxis[realIndex].opposite ? 'start' : 'end', - fontSize: yaxisFontSize, - fontFamily: yaxisFontFamily, - foreColor: w.config.yaxis[realIndex].labels.style.color, - cssClass: 'apexcharts-yaxis-label ' + w.config.yaxis[realIndex].labels.style.cssClass - }); - elYaxisTexts.add(label); - var labelRotatingCenter = graphics.rotateAroundCenter(label.node); - - if (w.config.yaxis[realIndex].labels.rotate !== 0) { - label.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(labelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); - } - - l = l + labelsDivider; - } - } - - if (w.config.yaxis[realIndex].title.text !== undefined) { - var elYaxisTitle = graphics.group({ - class: 'apexcharts-yaxis-title' - }); - var x = 0; - - if (w.config.yaxis[realIndex].opposite) { - x = w.globals.translateYAxisX[realIndex]; - } - - var elYAxisTitleText = graphics.drawText({ - x: x, - y: w.globals.gridHeight / 2 + w.globals.translateY, - text: w.config.yaxis[realIndex].title.text, - textAnchor: 'end', - foreColor: w.config.yaxis[realIndex].title.style.color, - fontSize: w.config.yaxis[realIndex].title.style.fontSize, - fontFamily: w.config.yaxis[realIndex].title.style.fontFamily, - cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[realIndex].title.style.cssClass - }); - elYaxisTitle.add(elYAxisTitleText); - elYaxis.add(elYaxisTitle); - } - - var axisBorder = w.config.yaxis[realIndex].axisBorder; - - if (axisBorder.show) { - var _x = 31 + axisBorder.offsetX; - - if (w.config.yaxis[realIndex].opposite) { - _x = -31 - axisBorder.offsetX; - } - - var elVerticalLine = graphics.drawLine(_x, w.globals.translateY + axisBorder.offsetY - 2, _x, w.globals.gridHeight + w.globals.translateY + axisBorder.offsetY + 2, axisBorder.color); - elYaxis.add(elVerticalLine); - this.axesUtils.drawYAxisTicks(_x, tickAmount, axisBorder, w.config.yaxis[realIndex].axisTicks, realIndex, labelsDivider, elYaxis); - } - - return elYaxis; - } // This actually becomes horizonal axis (for bar charts) - - }, { - key: "drawYaxisInversed", - value: function drawYaxisInversed(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var elXaxis = graphics.group({ - class: 'apexcharts-xaxis apexcharts-yaxis-inversed' - }); - var elXaxisTexts = graphics.group({ - class: 'apexcharts-xaxis-texts-g', - transform: "translate(".concat(w.globals.translateXAxisX, ", ").concat(w.globals.translateXAxisY, ")") - }); - elXaxis.add(elXaxisTexts); - var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg width/number of ticks - - var labelsDivider = w.globals.gridWidth / tickAmount + 0.1; // initial label position; - - var l = labelsDivider + w.config.xaxis.labels.offsetX; - var lbFormatter = w.globals.xLabelFormatter; - var labels = w.globals.yAxisScale[realIndex].result.slice(); - var timelineLabels = w.globals.invertedTimelineLabels; - - if (timelineLabels.length > 0) { - this.xaxisLabels = timelineLabels.slice(); - labels = timelineLabels.slice(); - tickAmount = labels.length; - } - - if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].reversed) { - labels.reverse(); - } - - var tl = timelineLabels.length; - - if (w.config.xaxis.labels.show) { - for (var i = tl ? 0 : tickAmount; tl ? i < tl - 1 : i >= 0; tl ? i++ : i--) { - var val = labels[i]; - val = lbFormatter(val, i); - var x = w.globals.gridWidth + w.globals.padHorizontal - (l - labelsDivider + w.config.xaxis.labels.offsetX); - - if (timelineLabels.length) { - var label = this.axesUtils.getLabel(labels, timelineLabels, x, i, this.drawnLabels); - x = label.x; - val = label.text; - this.drawnLabels.push(label.text); - } - - var elTick = graphics.drawText({ - x: x, - y: this.xAxisoffX + w.config.xaxis.labels.offsetY + 30, - text: '', - textAnchor: 'middle', - foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[realIndex] : this.xaxisForeColors, - fontSize: this.xaxisFontSize, - fontFamily: this.xaxisFontFamily, - cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass - }); - elXaxisTexts.add(elTick); - elTick.tspan(val); - var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); - elTooltipTitle.textContent = val; - elTick.node.appendChild(elTooltipTitle); - l = l + labelsDivider; - } - } - - if (w.config.xaxis.title.text !== undefined) { - var elYaxisTitle = graphics.group({ - class: 'apexcharts-xaxis-title apexcharts-yaxis-title-inversed' - }); - var elYAxisTitleText = graphics.drawText({ - x: w.globals.gridWidth / 2, - y: this.xAxisoffX + parseInt(this.xaxisFontSize) + parseInt(w.config.xaxis.title.style.fontSize) + 20, - text: w.config.xaxis.title.text, - textAnchor: 'middle', - fontSize: w.config.xaxis.title.style.fontSize, - fontFamily: w.config.xaxis.title.style.fontFamily, - cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass - }); - elYaxisTitle.add(elYAxisTitleText); - elXaxis.add(elYaxisTitle); - } - - var axisBorder = w.config.yaxis[realIndex].axisBorder; - - if (axisBorder.show) { - var elVerticalLine = graphics.drawLine(w.globals.padHorizontal + axisBorder.offsetX, 1 + axisBorder.offsetY, w.globals.padHorizontal + axisBorder.offsetX, w.globals.gridHeight + axisBorder.offsetY, axisBorder.color); - elXaxis.add(elVerticalLine); - } - - return elXaxis; - } - }, { - key: "yAxisTitleRotate", - value: function yAxisTitleRotate(realIndex, yAxisOpposite) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var yAxisLabelsCoord = { - width: 0, - height: 0 - }; - var yAxisTitleCoord = { - width: 0, - height: 0 - }; - var elYAxisLabelsWrap = w.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-texts-g")); - - if (elYAxisLabelsWrap !== null) { - yAxisLabelsCoord = elYAxisLabelsWrap.getBoundingClientRect(); - } - - var yAxisTitle = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-title text")); - - if (yAxisTitle !== null) { - yAxisTitleCoord = yAxisTitle.getBoundingClientRect(); - } - - if (yAxisTitle !== null) { - var x = this.xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite); - yAxisTitle.setAttribute('x', x.xPos - (yAxisOpposite ? 10 : 0)); - } - - if (yAxisTitle !== null) { - var titleRotatingCenter = graphics.rotateAroundCenter(yAxisTitle); - - if (!yAxisOpposite) { - yAxisTitle.setAttribute('transform', "rotate(-".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); - } else { - yAxisTitle.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); - } - } - } - }, { - key: "xPaddingForYAxisTitle", - value: function xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite) { - var w = this.w; - var oppositeAxisCount = 0; - var x = 0; - var padd = 10; - - if (w.config.yaxis[realIndex].title.text === undefined || realIndex < 0) { - return { - xPos: x, - padd: 0 - }; - } - - if (yAxisOpposite) { - x = yAxisLabelsCoord.width + w.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2; - oppositeAxisCount += 1; - - if (oppositeAxisCount === 0) { - x = x - padd / 2; - } - } else { - x = yAxisLabelsCoord.width * -1 + w.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2; - - if (w.globals.isBarHorizontal) { - padd = 25; - x = yAxisLabelsCoord.width * -1 - w.config.yaxis[realIndex].title.offsetX - padd; - } - } - - return { - xPos: x, - padd: padd - }; - } // sets the x position of the y-axis by counting the labels width, title width and any offset - - }, { - key: "setYAxisXPosition", - value: function setYAxisXPosition(yaxisLabelCoords, yTitleCoords) { - var w = this.w; - var xLeft = 0; - var xRight = 0; - var leftOffsetX = 21; - var rightOffsetX = 1; - - if (w.config.yaxis.length > 1) { - this.multipleYs = true; - } - - w.config.yaxis.map(function (yaxe, index) { - var shouldNotDrawAxis = w.globals.ignoreYAxisIndexes.indexOf(index) > -1 || !yaxe.show || yaxe.floating || yaxisLabelCoords[index].width === 0; - var axisWidth = yaxisLabelCoords[index].width + yTitleCoords[index].width; - - if (!yaxe.opposite) { - xLeft = w.globals.translateX - leftOffsetX; - - if (!shouldNotDrawAxis) { - leftOffsetX = leftOffsetX + axisWidth + 20; - } - - w.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX; - } else { - if (w.globals.isBarHorizontal) { - xRight = w.globals.gridWidth + w.globals.translateX - 1; - w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX; - } else { - xRight = w.globals.gridWidth + w.globals.translateX + rightOffsetX; - - if (!shouldNotDrawAxis) { - rightOffsetX = rightOffsetX + axisWidth + 20; - } - - w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20; - } - } - }); - } - }, { - key: "setYAxisTextAlignments", - value: function setYAxisTextAlignments() { - var w = this.w; - var yaxis = w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis"); - yaxis = Utils.listToArray(yaxis); - yaxis.forEach(function (y, index) { - var yaxe = w.config.yaxis[index]; // proceed only if user has specified alignment - - if (yaxe.labels.align !== undefined) { - var yAxisInner = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(index, "'] .apexcharts-yaxis-texts-g")); - var yAxisTexts = w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(index, "'] .apexcharts-yaxis-label")); - yAxisTexts = Utils.listToArray(yAxisTexts); - var rect = yAxisInner.getBoundingClientRect(); - - if (yaxe.labels.align === 'left') { - yAxisTexts.forEach(function (label, lI) { - label.setAttribute('text-anchor', 'start'); - }); - - if (!yaxe.opposite) { - yAxisInner.setAttribute('transform', "translate(-".concat(rect.width, ", 0)")); - } - } else if (yaxe.labels.align === 'center') { - yAxisTexts.forEach(function (label, lI) { - label.setAttribute('text-anchor', 'middle'); - }); - yAxisInner.setAttribute('transform', "translate(".concat(rect.width / 2 * (!yaxe.opposite ? -1 : 1), ", 0)")); - } else if (yaxe.labels.align === 'right') { - yAxisTexts.forEach(function (label, lI) { - label.setAttribute('text-anchor', 'end'); - }); - - if (yaxe.opposite) { - yAxisInner.setAttribute('transform', "translate(".concat(rect.width, ", 0)")); - } - } - } - }); - } - }]); - - return YAxis; -}(); - -var Range = -/*#__PURE__*/ -function () { - function Range(ctx) { - _classCallCheck(this, Range); - - this.ctx = ctx; - this.w = ctx.w; - } // http://stackoverflow.com/questions/326679/choosing-an-attractive-linear-scale-for-a-graphs-y-axiss - // This routine creates the Y axis values for a graph. - - - _createClass(Range, [{ - key: "niceScale", - value: function niceScale(yMin, yMax, diff) { - var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; - var ticks = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 10; - var w = this.w; - var NO_MIN_MAX_PROVIDED = this.w.config.yaxis[index].max === undefined && this.w.config.yaxis[index].min === undefined || this.w.config.yaxis[index].forceNiceScale; - - if (yMin === Number.MIN_VALUE && yMax === 0 || !Utils.isNumber(yMin) && !Utils.isNumber(yMax) || yMin === Number.MIN_VALUE && yMax === -Number.MAX_VALUE) { - // when all values are 0 - yMin = 0; - yMax = ticks; - var linearScale = this.linearScale(yMin, yMax, ticks); - return linearScale; - } - - if (yMin > yMax) { - // if somehow due to some wrong config, user sent max less than min, - // adjust the min/max again - console.warn('yaxis.min cannot be greater than yaxis.max'); - yMax = yMin + 0.1; - } else if (yMin === yMax) { - // If yMin and yMax are identical, then - // adjust the yMin and yMax values to actually - // make a graph. Also avoids division by zero errors. - yMin = yMin === 0 ? 0 : yMin - 0.5; // some small value - - yMax = yMax === 0 ? 2 : yMax + 0.5; // some small value - } // Calculate Min amd Max graphical labels and graph - // increments. The number of ticks defaults to - // 10 which is the SUGGESTED value. Any tick value - // entered is used as a suggested value which is - // adjusted to be a 'pretty' value. - // - // Output will be an array of the Y axis values that - // encompass the Y values. - - - var result = []; // Determine Range - - var range = Math.abs(yMax - yMin); - - if (range < 1 && NO_MIN_MAX_PROVIDED && (w.config.chart.type === 'candlestick' || w.config.series[index].type === 'candlestick' || w.globals.isRangeData)) { - /* fix https://github.com/apexcharts/apexcharts.js/issues/430 */ - yMax = yMax * 1.01; - } // for extremely small values - #fix #553 - - - if (range < 0.00001 && NO_MIN_MAX_PROVIDED && yMax < 10) { - yMax = yMax * 1.05; - } else if (diff > 0.1 && diff < 3 && NO_MIN_MAX_PROVIDED) { - /* fix https://github.com/apexcharts/apexcharts.js/issues/576 */ - - /* fix https://github.com/apexcharts/apexcharts.js/issues/588 */ - yMax = yMax + diff / 3; - } - - var tiks = ticks + 1; // Adjust ticks if needed - - if (tiks < 2) { - tiks = 2; - } else if (tiks > 2) { - tiks -= 2; - } // Get raw step value - - - var tempStep = range / tiks; // Calculate pretty step value - - var mag = Math.floor(Utils.log10(tempStep)); - var magPow = Math.pow(10, mag); - var magMsd = parseInt(tempStep / magPow); - var stepSize = magMsd * magPow; // build Y label array. - // Lower and upper bounds calculations - - var lb = stepSize * Math.floor(yMin / stepSize); - var ub = stepSize * Math.ceil(yMax / stepSize); // Build array - - var val = lb; - - while (1) { - result.push(val); - val += stepSize; - - if (val > ub) { - break; - } - } - - if (NO_MIN_MAX_PROVIDED) { - return { - result: result, - niceMin: result[0], - niceMax: result[result.length - 1] - }; - } else { - result = []; - var v = yMin; - result.push(v); - var valuesDivider = Math.abs(yMax - yMin) / ticks; - - for (var i = 0; i <= ticks - 1; i++) { - v = v + valuesDivider; - result.push(v); - } - - return { - result: result, - niceMin: result[0], - niceMax: result[result.length - 1] - }; - } - } - }, { - key: "linearScale", - value: function linearScale(yMin, yMax) { - var ticks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10; - var range = Math.abs(yMax - yMin); - var step = range / ticks; - - if (ticks === Number.MAX_VALUE) { - ticks = 10; - step = 1; - } - - var result = []; - var v = yMin; - - while (ticks >= 0) { - result.push(v); - v = v + step; - ticks -= 1; - } - - return { - result: result, - niceMin: result[0], - niceMax: result[result.length - 1] - }; - } - }, { - key: "logarithmicScale", - value: function logarithmicScale(index, yMin, yMax, ticks) { - if (yMin < 0 || yMin === Number.MIN_VALUE) yMin = 0.01; - var base = 10; - var min = Math.log(yMin) / Math.log(base); - var max = Math.log(yMax) / Math.log(base); - var range = Math.abs(yMax - yMin); - var step = range / ticks; - var result = []; - var v = yMin; - - while (ticks >= 0) { - result.push(v); - v = v + step; - ticks -= 1; - } - - var logs = result.map(function (niceNumber, i) { - if (niceNumber <= 0) { - niceNumber = 0.01; - } // calculate adjustment factor - - - var scale = (max - min) / (yMax - yMin); - var logVal = Math.pow(base, min + scale * (niceNumber - min)); - return Math.round(logVal / Utils.roundToBase(logVal, base)) * Utils.roundToBase(logVal, base); - }); // Math.floor may have rounded the value to 0, revert back to 1 - - if (logs[0] === 0) logs[0] = 1; - return { - result: logs, - niceMin: logs[0], - niceMax: logs[logs.length - 1] - }; - } - }, { - key: "setYScaleForIndex", - value: function setYScaleForIndex(index, minY, maxY) { - var gl = this.w.globals; - var cnf = this.w.config; - var y = gl.isBarHorizontal ? cnf.xaxis : cnf.yaxis[index]; - - if (typeof gl.yAxisScale[index] === 'undefined') { - gl.yAxisScale[index] = []; - } - - if (y.logarithmic) { - gl.allSeriesCollapsed = false; - gl.yAxisScale[index] = this.logarithmicScale(index, minY, maxY, y.tickAmount ? y.tickAmount : Math.floor(Math.log10(maxY))); - } else { - if (maxY === -Number.MAX_VALUE || !Utils.isNumber(maxY)) { - // no data in the chart. Either all series collapsed or user passed a blank array - gl.yAxisScale[index] = this.linearScale(0, 5, 5); - } else { - // there is some data. Turn off the allSeriesCollapsed flag - gl.allSeriesCollapsed = false; - - if ((y.min !== undefined || y.max !== undefined) && !y.forceNiceScale) { - // fix https://github.com/apexcharts/apexcharts.js/issues/492 - gl.yAxisScale[index] = this.linearScale(minY, maxY, y.tickAmount); - } else { - var diff = Math.abs(maxY - minY); - gl.yAxisScale[index] = this.niceScale(minY, maxY, diff, index, // fix https://github.com/apexcharts/apexcharts.js/issues/397 - y.tickAmount ? y.tickAmount : diff < 5 && diff > 1 ? diff + 1 : 5); - } - } - } - } - }, { - key: "setMultipleYScales", - value: function setMultipleYScales() { - var _this = this; - - var gl = this.w.globals; - var cnf = this.w.config; - var minYArr = gl.minYArr.concat([]); - var maxYArr = gl.maxYArr.concat([]); - var scalesIndices = []; // here, we loop through the yaxis array and find the item which has "seriesName" property - - cnf.yaxis.forEach(function (yaxe, i) { - var index = i; - cnf.series.forEach(function (s, si) { - // if seriesName matches and that series is not collapsed, we use that scale - if (s.name === yaxe.seriesName && gl.collapsedSeriesIndices.indexOf(si) === -1) { - index = si; - - if (i !== si) { - scalesIndices.push({ - index: si, - similarIndex: i, - alreadyExists: true - }); - } else { - scalesIndices.push({ - index: si - }); - } - } - }); - var minY = minYArr[index]; - var maxY = maxYArr[index]; - - _this.setYScaleForIndex(i, minY, maxY); - }); - this.sameScaleInMultipleAxes(minYArr, maxYArr, scalesIndices); - } - }, { - key: "sameScaleInMultipleAxes", - value: function sameScaleInMultipleAxes(minYArr, maxYArr, scalesIndices) { - var _this2 = this; - - var cnf = this.w.config; - var gl = this.w.globals; // we got the scalesIndices array in the above code, but we need to filter out the items which doesn't have same scales - - var similarIndices = []; - scalesIndices.forEach(function (scale) { - if (scale.alreadyExists) { - if (typeof similarIndices[scale.index] === 'undefined') { - similarIndices[scale.index] = []; - } - - similarIndices[scale.index].push(scale.index); - similarIndices[scale.index].push(scale.similarIndex); - } - }); - - function intersect(a, b) { - return a.filter(function (value) { - return b.indexOf(value) !== -1; - }); - } - - similarIndices.forEach(function (si, i) { - similarIndices.forEach(function (sj, j) { - if (i !== j) { - if (intersect(si, sj).length > 0) { - similarIndices[i] = similarIndices[i].concat(similarIndices[j]); - } - } - }); - }); // then, we remove duplicates from the similarScale array - - var uniqueSimilarIndices = similarIndices.map(function (item) { - return item.filter(function (i, pos) { - return item.indexOf(i) === pos; - }); - }); // sort further to remove whole duplicate arrays later - - var sortedIndices = uniqueSimilarIndices.map(function (s) { - return s.sort(); - }); // remove undefined items - - similarIndices = similarIndices.filter(function (s) { - return !!s; - }); - var indices = sortedIndices.slice(); - var stringIndices = indices.map(function (ind) { - return JSON.stringify(ind); - }); - indices = indices.filter(function (ind, p) { - return stringIndices.indexOf(JSON.stringify(ind)) === p; - }); - var sameScaleMinYArr = []; - var sameScaleMaxYArr = []; - minYArr.forEach(function (minYValue, yi) { - indices.forEach(function (scale, i) { - // we compare only the yIndex which exists in the indices array - if (scale.indexOf(yi) > -1) { - if (typeof sameScaleMinYArr[i] === 'undefined') { - sameScaleMinYArr[i] = []; - sameScaleMaxYArr[i] = []; - } - - sameScaleMinYArr[i].push({ - key: yi, - value: minYValue - }); - sameScaleMaxYArr[i].push({ - key: yi, - value: maxYArr[yi] - }); - } - }); - }); - var sameScaleMin = Array.apply(null, Array(indices.length)).map(Number.prototype.valueOf, Number.MIN_VALUE); - var sameScaleMax = Array.apply(null, Array(indices.length)).map(Number.prototype.valueOf, -Number.MAX_VALUE); - sameScaleMinYArr.forEach(function (s, i) { - s.forEach(function (sc, j) { - sameScaleMin[i] = Math.min(sc.value, sameScaleMin[i]); - }); - }); - sameScaleMaxYArr.forEach(function (s, i) { - s.forEach(function (sc, j) { - sameScaleMax[i] = Math.max(sc.value, sameScaleMax[i]); - }); - }); - minYArr.forEach(function (min, i) { - sameScaleMaxYArr.forEach(function (s, si) { - var minY = sameScaleMin[si]; - var maxY = sameScaleMax[si]; - s.forEach(function (ind, k) { - if (s[k].key === i) { - if (cnf.yaxis[i].min !== undefined) { - if (typeof cnf.yaxis[i].min === 'function') { - minY = cnf.yaxis[i].min(gl.minY); - } else { - minY = cnf.yaxis[i].min; - } - } - - if (cnf.yaxis[i].max !== undefined) { - if (typeof cnf.yaxis[i].max === 'function') { - maxY = cnf.yaxis[i].max(gl.maxY); - } else { - maxY = cnf.yaxis[i].max; - } - } - - _this2.setYScaleForIndex(i, minY, maxY); - } - }); - }); - }); - } - }, { - key: "autoScaleY", - value: function autoScaleY(ctx, e) { - if (!ctx) { - ctx = this; - } - - var ret = []; - ctx.w.config.series.forEach(function (serie) { - var min, max; - var first = serie.data.find(function (x) { - return x[0] >= e.xaxis.min; - }); - var firstValue = first[1]; - max = min = firstValue; - serie.data.forEach(function (data) { - if (data[0] <= e.xaxis.max && data[0] >= e.xaxis.min) { - if (data[1] > max && data[1] !== null) max = data[1]; - if (data[1] < min && data[1] !== null) min = data[1]; - } - }); - min *= 0.95; - max *= 1.05; - ret.push({ - min: min, - max: max - }); - }); - return ret; - } - }]); - - return Range; -}(); - -/** - * Range is used to generates values between min and max. - * - * @module Range - **/ - -var Range$1 = -/*#__PURE__*/ -function () { - function Range$$1(ctx) { - _classCallCheck(this, Range$$1); - - this.ctx = ctx; - this.w = ctx.w; - this.scales = new Range(ctx); - } - - _createClass(Range$$1, [{ - key: "init", - value: function init() { - this.setYRange(); - this.setXRange(); - this.setZRange(); - } - }, { - key: "getMinYMaxY", - value: function getMinYMaxY(startingIndex) { - var lowestY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE; - var highestY = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -Number.MAX_VALUE; - var len = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var gl = this.w.globals; - var maxY = -Number.MAX_VALUE; - var minY = Number.MIN_VALUE; - - if (len === null) { - len = startingIndex + 1; - } - - var series = gl.series; - var seriesMin = series; - var seriesMax = series; - - if (this.w.config.chart.type === 'candlestick') { - seriesMin = gl.seriesCandleL; - seriesMax = gl.seriesCandleH; - } else if (gl.isRangeData) { - seriesMin = gl.seriesRangeStart; - seriesMax = gl.seriesRangeEnd; - } - - for (var i = startingIndex; i < len; i++) { - gl.dataPoints = Math.max(gl.dataPoints, series[i].length); - - for (var j = 0; j < gl.series[i].length; j++) { - var val = series[i][j]; - - if (val !== null && Utils.isNumber(val)) { - maxY = Math.max(maxY, seriesMax[i][j]); - lowestY = Math.min(lowestY, seriesMin[i][j]); - highestY = Math.max(highestY, seriesMin[i][j]); - - if (this.w.config.chart.type === 'candlestick') { - maxY = Math.max(maxY, gl.seriesCandleO[i][j]); - maxY = Math.max(maxY, gl.seriesCandleH[i][j]); - maxY = Math.max(maxY, gl.seriesCandleL[i][j]); - maxY = Math.max(maxY, gl.seriesCandleC[i][j]); - highestY = maxY; - } - - if (Utils.isFloat(val)) { - val = Utils.noExponents(val); - gl.yValueDecimal = Math.max(gl.yValueDecimal, val.toString().split('.')[1].length); - } - - if (minY > seriesMin[i][j] && seriesMin[i][j] < 0) { - minY = seriesMin[i][j]; - } - } else { - gl.hasNullValues = true; - } - } - } - - return { - minY: minY, - maxY: maxY, - lowestY: lowestY, - highestY: highestY - }; - } - }, { - key: "setYRange", - value: function setYRange() { - var gl = this.w.globals; - var cnf = this.w.config; - gl.maxY = -Number.MAX_VALUE; - gl.minY = Number.MIN_VALUE; - var lowestYInAllSeries = Number.MAX_VALUE; - - if (gl.isMultipleYAxis) { - // we need to get minY and maxY for multiple y axis - for (var i = 0; i < gl.series.length; i++) { - var minYMaxYArr = this.getMinYMaxY(i, lowestYInAllSeries, null, i + 1); - gl.minYArr.push(minYMaxYArr.minY); - gl.maxYArr.push(minYMaxYArr.maxY); - lowestYInAllSeries = minYMaxYArr.lowestY; - } - } // and then, get the minY and maxY from all series - - - var minYMaxY = this.getMinYMaxY(0, lowestYInAllSeries, null, gl.series.length); - gl.minY = minYMaxY.minY; - gl.maxY = minYMaxY.maxY; - lowestYInAllSeries = minYMaxY.lowestY; - - if (cnf.chart.stacked) { - // for stacked charts, we calculate each series's parallel values. i.e, series[0][j] + series[1][j] .... [series[i.length][j]] and get the max out of it - var stackedPoss = []; - var stackedNegs = []; - - for (var j = 0; j < gl.series[gl.maxValsInArrayIndex].length; j++) { - var poss = 0; - var negs = 0; - - for (var _i = 0; _i < gl.series.length; _i++) { - if (gl.series[_i][j] !== null && Utils.isNumber(gl.series[_i][j])) { - if (gl.series[_i][j] > 0) { - // 0.0001 fixes #185 when values are very small - poss = poss + parseFloat(gl.series[_i][j]) + 0.0001; - } else { - negs = negs + parseFloat(gl.series[_i][j]); - } - } - - if (_i === gl.series.length - 1) { - // push all the totals to the array for future use - stackedPoss.push(poss); - stackedNegs.push(negs); - } - } - } // get the max/min out of the added parallel values - - - for (var z = 0; z < stackedPoss.length; z++) { - gl.maxY = Math.max(gl.maxY, stackedPoss[z]); - gl.minY = Math.min(gl.minY, stackedNegs[z]); - } - } // if the numbers are too big, reduce the range - // for eg, if number is between 100000-110000, putting 0 as the lowest value is not so good idea. So change the gl.minY for line/area/candlesticks - - - if (cnf.chart.type === 'line' || cnf.chart.type === 'area' || cnf.chart.type === 'candlestick') { - if (gl.minY === Number.MIN_VALUE && lowestYInAllSeries !== -Number.MAX_VALUE && lowestYInAllSeries !== gl.maxY // single value possibility - ) { - var diff = gl.maxY - lowestYInAllSeries; - - if (lowestYInAllSeries >= 0 && lowestYInAllSeries <= 10) { - // if minY is already 0/low value, we don't want to go negatives here - so this check is essential. - diff = 0; - } - - gl.minY = lowestYInAllSeries - diff * 5 / 100; - /* fix https://github.com/apexcharts/apexcharts.js/issues/426 */ - - gl.maxY = gl.maxY + diff * 5 / 100; - } - } - - cnf.yaxis.map(function (yaxe, index) { - // override all min/max values by user defined values (y axis) - if (yaxe.max !== undefined) { - if (typeof yaxe.max === 'number') { - gl.maxYArr[index] = yaxe.max; - } else if (typeof yaxe.max === 'function') { - gl.maxYArr[index] = yaxe.max(gl.maxY); - } // gl.maxY is for single y-axis chart, it will be ignored in multi-yaxis - - - gl.maxY = gl.maxYArr[index]; - } - - if (yaxe.min !== undefined) { - if (typeof yaxe.min === 'number') { - gl.minYArr[index] = yaxe.min; - } else if (typeof yaxe.min === 'function') { - gl.minYArr[index] = yaxe.min(gl.minY); - } // gl.minY is for single y-axis chart, it will be ignored in multi-yaxis - - - gl.minY = gl.minYArr[index]; - } - }); // for horizontal bar charts, we need to check xaxis min/max as user may have specified there - - if (gl.isBarHorizontal) { - if (cnf.xaxis.min !== undefined && typeof cnf.xaxis.min === 'number') { - gl.minY = cnf.xaxis.min; - } - - if (cnf.xaxis.max !== undefined && typeof cnf.xaxis.max === 'number') { - gl.maxY = cnf.xaxis.max; - } - } // for multi y-axis we need different scales for each - - - if (gl.isMultipleYAxis) { - this.scales.setMultipleYScales(); - gl.minY = lowestYInAllSeries; - gl.yAxisScale.forEach(function (scale, i) { - gl.minYArr[i] = scale.niceMin; - gl.maxYArr[i] = scale.niceMax; - }); - } else { - this.scales.setYScaleForIndex(0, gl.minY, gl.maxY); - gl.minY = gl.yAxisScale[0].niceMin; - gl.maxY = gl.yAxisScale[0].niceMax; - gl.minYArr[0] = gl.yAxisScale[0].niceMin; - gl.maxYArr[0] = gl.yAxisScale[0].niceMax; - } - - return { - minY: gl.minY, - maxY: gl.maxY, - minYArr: gl.minYArr, - maxYArr: gl.maxYArr - }; - } - }, { - key: "setXRange", - value: function setXRange() { - var gl = this.w.globals; - var cnf = this.w.config; - var isXNumeric = cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'datetime' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided || gl.noLabelsProvided || gl.isXNumeric; // minX maxX starts here - - if (gl.isXNumeric) { - for (var i = 0; i < gl.series.length; i++) { - if (gl.labels[i]) { - for (var j = 0; j < gl.labels[i].length; j++) { - if (gl.labels[i][j] !== null && Utils.isNumber(gl.labels[i][j])) { - gl.maxX = Math.max(gl.maxX, gl.labels[i][j]); - gl.initialmaxX = Math.max(gl.maxX, gl.labels[i][j]); - gl.minX = Math.min(gl.minX, gl.labels[i][j]); - gl.initialminX = Math.min(gl.minX, gl.labels[i][j]); - } - } - } - } - } - - if (gl.noLabelsProvided) { - if (cnf.xaxis.categories.length === 0) { - gl.maxX = gl.labels[gl.labels.length - 1]; - gl.initialmaxX = gl.labels[gl.labels.length - 1]; - gl.minX = 1; - gl.initialminX = 1; - } - } // for numeric xaxis, we need to adjust some padding left and right for bar charts - - - if (gl.comboChartsHasBars || cnf.chart.type === 'candlestick' || cnf.chart.type === 'bar' && gl.isXNumeric) { - if (cnf.xaxis.type !== 'category' || gl.isXNumeric) { - var minX = gl.minX - gl.svgWidth / gl.dataPoints * (Math.abs(gl.maxX - gl.minX) / gl.svgWidth) / 2; - gl.minX = minX; - gl.initialminX = minX; - var maxX = gl.maxX + gl.svgWidth / gl.dataPoints * (Math.abs(gl.maxX - gl.minX) / gl.svgWidth) / 2; - gl.maxX = maxX; - gl.initialmaxX = maxX; - } - } - - if ((gl.isXNumeric || gl.noLabelsProvided) && (!cnf.xaxis.convertedCatToNumeric || gl.dataFormatXNumeric)) { - var ticks; - - if (cnf.xaxis.tickAmount === undefined) { - ticks = Math.round(gl.svgWidth / 150); // no labels provided and total number of dataPoints is less than 20 - - if (cnf.xaxis.type === 'numeric' && gl.dataPoints < 20) { - ticks = gl.dataPoints - 1; - } // this check is for when ticks exceeds total datapoints and that would result in duplicate labels - - - if (ticks > gl.dataPoints && gl.dataPoints !== 0) { - ticks = gl.dataPoints - 1; - } - } else if (cnf.xaxis.tickAmount === 'dataPoints') { - ticks = gl.series[gl.maxValsInArrayIndex].length - 1; - } else { - ticks = cnf.xaxis.tickAmount; - } // override all min/max values by user defined values (x axis) - - - if (cnf.xaxis.max !== undefined && typeof cnf.xaxis.max === 'number') { - gl.maxX = cnf.xaxis.max; - } - - if (cnf.xaxis.min !== undefined && typeof cnf.xaxis.min === 'number') { - gl.minX = cnf.xaxis.min; - } // if range is provided, adjust the new minX - - - if (cnf.xaxis.range !== undefined) { - gl.minX = gl.maxX - cnf.xaxis.range; - } - - if (gl.minX !== Number.MAX_VALUE && gl.maxX !== -Number.MAX_VALUE) { - gl.xAxisScale = this.scales.linearScale(gl.minX, gl.maxX, ticks); - } else { - gl.xAxisScale = this.scales.linearScale(1, ticks, ticks); - - if (gl.noLabelsProvided && gl.labels.length > 0) { - gl.xAxisScale = this.scales.linearScale(1, gl.labels.length, ticks - 1); // this is the only place seriesX is again mutated - - gl.seriesX = gl.labels.slice(); - } - } // we will still store these labels as the count for this will be different (to draw grid and labels placement) - - - if (isXNumeric) { - gl.labels = gl.xAxisScale.result.slice(); - } - } - - if (gl.minX === gl.maxX) { - // single dataPoint - if (cnf.xaxis.type === 'datetime') { - var newMinX = new Date(gl.minX); - newMinX.setDate(newMinX.getDate() - 2); - gl.minX = new Date(newMinX).getTime(); - var newMaxX = new Date(gl.maxX); - newMaxX.setDate(newMaxX.getDate() + 2); - gl.maxX = new Date(newMaxX).getTime(); - } else if (cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided) { - gl.minX = gl.minX - 2; - gl.maxX = gl.maxX + 2; - } - } - - if (gl.isXNumeric) { - // get the least x diff if numeric x axis is present - gl.seriesX.forEach(function (sX, i) { - sX.forEach(function (s, j) { - if (j > 0) { - var xDiff = s - gl.seriesX[i][j - 1]; - gl.minXDiff = Math.min(xDiff, gl.minXDiff); - } - }); - }); - this.calcMinXDiffForTinySeries(); - } - - return { - minX: gl.minX, - maxX: gl.maxX - }; - } - }, { - key: "calcMinXDiffForTinySeries", - value: function calcMinXDiffForTinySeries() { - var w = this.w; - var len = w.globals.labels.length; - - if (w.globals.labels.length === 1) { - w.globals.minXDiff = (w.globals.maxX - w.globals.minX) / len / 3; - } else { - if (w.globals.minXDiff === Number.MAX_VALUE) { - // possibly a single dataPoint (fixes react-apexcharts/issue#34) - if (w.globals.timelineLabels.length > 0) { - len = w.globals.timelineLabels.length; - } - - if (len < 3) { - len = 3; - } - - w.globals.minXDiff = (w.globals.maxX - w.globals.minX) / len; - } - } - - return w.globals.minXDiff; - } - }, { - key: "setZRange", - value: function setZRange() { - var gl = this.w.globals; // minZ, maxZ starts here - - if (gl.isDataXYZ) { - for (var i = 0; i < gl.series.length; i++) { - if (typeof gl.seriesZ[i] !== 'undefined') { - for (var j = 0; j < gl.seriesZ[i].length; j++) { - if (gl.seriesZ[i][j] !== null && Utils.isNumber(gl.seriesZ[i][j])) { - gl.maxZ = Math.max(gl.maxZ, gl.seriesZ[i][j]); - gl.minZ = Math.min(gl.minZ, gl.seriesZ[i][j]); - } - } - } - } - } - } - }]); - - return Range$$1; -}(); - -/** - * ApexCharts Series Class for interation with the Series of the chart. - * - * @module Series - **/ - -var Series = -/*#__PURE__*/ -function () { - function Series(ctx) { - _classCallCheck(this, Series); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Series, [{ - key: "getAllSeriesEls", - value: function getAllSeriesEls() { - return this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series"); - } - }, { - key: "getSeriesByName", - value: function getSeriesByName(seriesName) { - return this.w.globals.dom.baseEl.querySelector("[seriesName='".concat(Utils.escapeString(seriesName), "']")); - } - }, { - key: "addCollapsedClassToSeries", - value: function addCollapsedClassToSeries(elSeries, index) { - var w = this.w; - - function iterateOnAllCollapsedSeries(series) { - for (var cs = 0; cs < series.length; cs++) { - if (series[cs].index === index) { - elSeries.node.classList.add('apexcharts-series-collapsed'); - } - } - } - - iterateOnAllCollapsedSeries(w.globals.collapsedSeries); - iterateOnAllCollapsedSeries(w.globals.ancillaryCollapsedSeries); - } - }, { - key: "toggleSeriesOnHover", - value: function toggleSeriesOnHover(e, targetElement) { - var w = this.w; - var allSeriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series"); - - if (e.type === 'mousemove') { - var seriesCnt = parseInt(targetElement.getAttribute('rel')) - 1; - var seriesEl = null; - - if (w.globals.axisCharts || w.config.chart.type === 'radialBar') { - if (w.globals.axisCharts) { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(seriesCnt, "']")); - } else { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(seriesCnt + 1, "']")); - } - } else { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(seriesCnt + 1, "'] path")); - } - - for (var se = 0; se < allSeriesEls.length; se++) { - allSeriesEls[se].classList.add('legend-mouseover-inactive'); - } - - if (seriesEl !== null) { - if (!w.globals.axisCharts) { - seriesEl.parentNode.classList.remove('legend-mouseover-inactive'); - } - - seriesEl.classList.remove('legend-mouseover-inactive'); - } - } else if (e.type === 'mouseout') { - for (var _se = 0; _se < allSeriesEls.length; _se++) { - allSeriesEls[_se].classList.remove('legend-mouseover-inactive'); - } - } - } - }, { - key: "highlightRangeInSeries", - value: function highlightRangeInSeries(e, targetElement) { - var w = this.w; - var allHeatMapElements = w.globals.dom.baseEl.querySelectorAll('.apexcharts-heatmap-rect'); - - var allActive = function allActive() { - for (var i = 0; i < allHeatMapElements.length; i++) { - allHeatMapElements[i].classList.remove('legend-mouseover-inactive'); - } - }; - - var allInactive = function allInactive() { - for (var i = 0; i < allHeatMapElements.length; i++) { - allHeatMapElements[i].classList.add('legend-mouseover-inactive'); - } - }; - - var selectedActive = function selectedActive(range) { - for (var i = 0; i < allHeatMapElements.length; i++) { - var val = parseInt(allHeatMapElements[i].getAttribute('val')); - - if (val >= range.from && val <= range.to) { - allHeatMapElements[i].classList.remove('legend-mouseover-inactive'); - } - } - }; - - if (e.type === 'mousemove') { - var seriesCnt = parseInt(targetElement.getAttribute('rel')) - 1; - allActive(); - allInactive(); - var range = w.config.plotOptions.heatmap.colorScale.ranges[seriesCnt]; - selectedActive(range); - } else if (e.type === 'mouseout') { - allActive(); - } - } - }, { - key: "getActiveSeriesIndex", - value: function getActiveSeriesIndex() { - var w = this.w; - var activeIndex = 0; - - if (w.globals.series.length > 1) { - // active series flag is required to know if user has not deactivated via legend click - var firstActiveSeriesIndex = w.globals.series.map(function (series, index) { - if (series.length > 0 && w.config.series[index].type !== 'bar' && w.config.series[index].type !== 'column') { - return index; - } else { - return -1; - } - }); - - for (var a = 0; a < firstActiveSeriesIndex.length; a++) { - if (firstActiveSeriesIndex[a] !== -1) { - activeIndex = firstActiveSeriesIndex[a]; - break; - } - } - } - - return activeIndex; - } - }, { - key: "getActiveConfigSeriesIndex", - value: function getActiveConfigSeriesIndex() { - var w = this.w; - var activeIndex = 0; - - if (w.config.series.length > 1) { - // active series flag is required to know if user has not deactivated via legend click - var firstActiveSeriesIndex = w.config.series.map(function (series, index) { - if (series.data && series.data.length > 0) { - return index; - } else { - return -1; - } - }); - - for (var a = 0; a < firstActiveSeriesIndex.length; a++) { - if (firstActiveSeriesIndex[a] !== -1) { - activeIndex = firstActiveSeriesIndex[a]; - break; - } - } - } - - return activeIndex; - } - }, { - key: "getPreviousPaths", - value: function getPreviousPaths() { - var w = this.w; - w.globals.previousPaths = []; - - function pushPaths(seriesEls, i, type) { - var paths = seriesEls[i].childNodes; - var dArr = { - type: type, - paths: [], - realIndex: seriesEls[i].getAttribute('data:realIndex') - }; - - for (var j = 0; j < paths.length; j++) { - if (paths[j].hasAttribute('pathTo')) { - var d = paths[j].getAttribute('pathTo'); - dArr.paths.push({ - d: d - }); - } - } - - w.globals.previousPaths.push(dArr); - } - - var linePaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-line-series .apexcharts-series'); - - if (linePaths.length > 0) { - for (var p = linePaths.length - 1; p >= 0; p--) { - pushPaths(linePaths, p, 'line'); - } - } - - var areapaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-area-series .apexcharts-series'); - - if (areapaths.length > 0) { - for (var i = areapaths.length - 1; i >= 0; i--) { - pushPaths(areapaths, i, 'area'); - } - } - - var barPaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series .apexcharts-series'); - - if (barPaths.length > 0) { - for (var _p = 0; _p < barPaths.length; _p++) { - pushPaths(barPaths, _p, 'bar'); - } - } - - var candlestickPaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-candlestick-series .apexcharts-series'); - - if (candlestickPaths.length > 0) { - for (var _p2 = 0; _p2 < candlestickPaths.length; _p2++) { - pushPaths(candlestickPaths, _p2, 'candlestick'); - } - } - - var radarPaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-radar-series .apexcharts-series'); - - if (radarPaths.length > 0) { - for (var _p3 = 0; _p3 < radarPaths.length; _p3++) { - pushPaths(radarPaths, _p3, 'radar'); - } - } - - var bubblepaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bubble-series .apexcharts-series'); - - if (bubblepaths.length > 0) { - for (var s = 0; s < bubblepaths.length; s++) { - var seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-bubble-series .apexcharts-series[data\\:realIndex='".concat(s, "'] circle")); - var dArr = []; - - for (var _i = 0; _i < seriesEls.length; _i++) { - dArr.push({ - x: seriesEls[_i].getAttribute('cx'), - y: seriesEls[_i].getAttribute('cy'), - r: seriesEls[_i].getAttribute('r') - }); - } - - w.globals.previousPaths.push(dArr); - } - } - - var scatterpaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-scatter-series .apexcharts-series'); - - if (scatterpaths.length > 0) { - for (var _s = 0; _s < scatterpaths.length; _s++) { - var _seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-scatter-series .apexcharts-series[data\\:realIndex='".concat(_s, "'] circle")); - - var _dArr = []; - - for (var _i2 = 0; _i2 < _seriesEls.length; _i2++) { - _dArr.push({ - x: _seriesEls[_i2].getAttribute('cx'), - y: _seriesEls[_i2].getAttribute('cy'), - r: _seriesEls[_i2].getAttribute('r') - }); - } - - w.globals.previousPaths.push(_dArr); - } - } - - var heatmapColors = w.globals.dom.baseEl.querySelectorAll('.apexcharts-heatmap .apexcharts-series'); - - if (heatmapColors.length > 0) { - for (var h = 0; h < heatmapColors.length; h++) { - var _seriesEls2 = w.globals.dom.baseEl.querySelectorAll(".apexcharts-heatmap .apexcharts-series[data\\:realIndex='".concat(h, "'] rect")); - - var _dArr2 = []; - - for (var _i3 = 0; _i3 < _seriesEls2.length; _i3++) { - _dArr2.push({ - color: _seriesEls2[_i3].getAttribute('color') - }); - } - - w.globals.previousPaths.push(_dArr2); - } - } - - if (!w.globals.axisCharts) { - // for non-axis charts (i.e., circular charts, pathFrom is not usable. We need whole series) - w.globals.previousPaths = w.globals.series; - } - } - }, { - key: "handleNoData", - value: function handleNoData() { - var w = this.w; - var me = this; - var noDataOpts = w.config.noData; - var graphics = new Graphics(me.ctx); - var x = w.globals.svgWidth / 2; - var y = w.globals.svgHeight / 2; - var textAnchor = 'middle'; - w.globals.noData = true; - w.globals.animationEnded = true; - - if (noDataOpts.align === 'left') { - x = 10; - textAnchor = 'start'; - } else if (noDataOpts.align === 'right') { - x = w.globals.svgWidth - 10; - textAnchor = 'end'; - } - - if (noDataOpts.verticalAlign === 'top') { - y = 50; - } else if (noDataOpts.verticalAlign === 'bottom') { - y = w.globals.svgHeight - 50; - } - - x = x + noDataOpts.offsetX; - y = y + parseInt(noDataOpts.style.fontSize) + 2; - - if (noDataOpts.text !== undefined && noDataOpts.text !== '') { - var titleText = graphics.drawText({ - x: x, - y: y, - text: noDataOpts.text, - textAnchor: textAnchor, - fontSize: noDataOpts.style.fontSize, - fontFamily: noDataOpts.style.fontFamily, - foreColor: noDataOpts.style.color, - opacity: 1, - class: 'apexcharts-text-nodata' - }); - titleText.node.setAttribute('class', 'apexcharts-title-text'); - w.globals.dom.Paper.add(titleText); - } - } // When user clicks on legends, the collapsed series is filled with [0,0,0,...,0] - // This is because we don't want to alter the series' length as it is used at many places - - }, { - key: "setNullSeriesToZeroValues", - value: function setNullSeriesToZeroValues(series) { - var w = this.w; - - for (var sl = 0; sl < series.length; sl++) { - if (series[sl].length === 0) { - for (var j = 0; j < series[w.globals.maxValsInArrayIndex].length; j++) { - series[sl].push(0); - } - } - } - - return series; - } - }, { - key: "hasAllSeriesEqualX", - value: function hasAllSeriesEqualX() { - var equalLen = true; - var w = this.w; - var filteredSerX = this.filteredSeriesX(); - - for (var i = 0; i < filteredSerX.length - 1; i++) { - if (filteredSerX[i][0] !== filteredSerX[i + 1][0]) { - equalLen = false; - break; - } - } - - w.globals.allSeriesHasEqualX = equalLen; - return equalLen; - } - }, { - key: "filteredSeriesX", - value: function filteredSeriesX() { - var w = this.w; - var filteredSeriesX = w.globals.seriesX.map(function (ser, index) { - if (ser.length > 0) { - return ser; - } else { - return []; - } - }); - return filteredSeriesX; - } - }]); - - return Series; -}(); - -/** - * ApexCharts Dimensions Class for calculating rects of all elements that are drawn and will be drawn. - * - * @module Dimensions - **/ - -var Dimensions = -/*#__PURE__*/ -function () { - function Dimensions(ctx) { - _classCallCheck(this, Dimensions); - - this.ctx = ctx; - this.w = ctx.w; - this.lgRect = {}; - this.yAxisWidth = 0; - this.xAxisHeight = 0; - this.isSparkline = this.w.config.chart.sparkline.enabled; - this.xPadRight = 0; - this.xPadLeft = 0; - } - /** - * @memberof Dimensions - * @param {object} w - chart context - **/ - - - _createClass(Dimensions, [{ - key: "plotCoords", - value: function plotCoords() { - var w = this.w; - var gl = w.globals; - var lgRect = this.getLegendsRect(); - - if (gl.axisCharts) { - // for line / area / scatter / column - this.setGridCoordsForAxisCharts(lgRect); - } else { - // for pie / donuts / circle - this.setGridCoordsForNonAxisCharts(lgRect); - } - - this.titleSubtitleOffset(); // after calculating everything, apply padding set by user - - gl.gridHeight = gl.gridHeight - w.config.grid.padding.top - w.config.grid.padding.bottom; - gl.gridWidth = gl.gridWidth - w.config.grid.padding.left - w.config.grid.padding.right - this.xPadRight - this.xPadLeft; - gl.translateX = gl.translateX + w.config.grid.padding.left + this.xPadLeft; - gl.translateY = gl.translateY + w.config.grid.padding.top; - } - }, { - key: "conditionalChecksForAxisCoords", - value: function conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords) { - var w = this.w; - this.xAxisHeight = (xaxisLabelCoords.height + xtitleCoords.height) * w.globals.LINE_HEIGHT_RATIO + 15; - this.xAxisWidth = xaxisLabelCoords.width; - - if (this.xAxisHeight - xtitleCoords.height > w.config.xaxis.labels.maxHeight) { - this.xAxisHeight = w.config.xaxis.labels.maxHeight; - } - - if (w.config.xaxis.labels.minHeight && this.xAxisHeight < w.config.xaxis.labels.minHeight) { - this.xAxisHeight = w.config.xaxis.labels.minHeight; - } - - if (w.config.xaxis.floating) { - this.xAxisHeight = 0; - } - - if (!w.globals.isBarHorizontal) { - this.yAxisWidth = this.getTotalYAxisWidth(); - } else { - this.yAxisWidth = w.globals.yLabelsCoords[0].width + w.globals.yTitleCoords[0].width + 15; - } - - var minYAxisWidth = 0; - var maxYAxisWidth = 0; - w.config.yaxis.forEach(function (y) { - minYAxisWidth += y.labels.minWidth; - maxYAxisWidth += y.labels.maxWidth; - }); - - if (this.yAxisWidth < minYAxisWidth) { - this.yAxisWidth = minYAxisWidth; - } - - if (this.yAxisWidth > maxYAxisWidth) { - this.yAxisWidth = maxYAxisWidth; - } - } - }, { - key: "setGridCoordsForAxisCharts", - value: function setGridCoordsForAxisCharts(lgRect) { - var w = this.w; - var gl = w.globals; - var yaxisLabelCoords = this.getyAxisLabelsCoords(); - var xaxisLabelCoords = this.getxAxisLabelsCoords(); - var yTitleCoords = this.getyAxisTitleCoords(); - var xtitleCoords = this.getxAxisTitleCoords(); - w.globals.yLabelsCoords = []; - w.globals.yTitleCoords = []; - w.config.yaxis.map(function (yaxe, index) { - // store the labels and titles coords in global vars - w.globals.yLabelsCoords.push({ - width: yaxisLabelCoords[index].width, - index: index - }); - w.globals.yTitleCoords.push({ - width: yTitleCoords[index].width, - index: index - }); - }); - this.conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords); - gl.translateXAxisY = w.globals.rotateXLabels ? this.xAxisHeight / 8 : -4; - gl.translateXAxisX = w.globals.rotateXLabels && w.globals.isXNumeric && w.config.xaxis.labels.rotate <= -45 ? -this.xAxisWidth / 4 : 0; - - if (w.globals.isBarHorizontal) { - gl.rotateXLabels = false; - gl.translateXAxisY = -1 * (parseInt(w.config.xaxis.labels.style.fontSize) / 1.5); - } - - gl.translateXAxisY = gl.translateXAxisY + w.config.xaxis.labels.offsetY; - gl.translateXAxisX = gl.translateXAxisX + w.config.xaxis.labels.offsetX; - var yAxisWidth = this.yAxisWidth; - var xAxisHeight = this.xAxisHeight; - gl.xAxisLabelsHeight = this.xAxisHeight; - gl.xAxisHeight = this.xAxisHeight; - var translateY = 10; - - if (!w.config.grid.show || w.config.chart.type === 'radar') { - yAxisWidth = 0; - xAxisHeight = 35; - } - - if (this.isSparkline) { - lgRect = { - height: 0, - width: 0 - }; - xAxisHeight = 0; - yAxisWidth = 0; - translateY = 0; - } - - this.additionalPaddingXLabels(xaxisLabelCoords); - - switch (w.config.legend.position) { - case 'bottom': - gl.translateY = translateY; - gl.translateX = yAxisWidth; - gl.gridHeight = gl.svgHeight - lgRect.height - xAxisHeight - (!this.isSparkline ? w.globals.rotateXLabels ? 10 : 15 : 0); - gl.gridWidth = gl.svgWidth - yAxisWidth; - break; - - case 'top': - gl.translateY = lgRect.height + translateY; - gl.translateX = yAxisWidth; - gl.gridHeight = gl.svgHeight - lgRect.height - xAxisHeight - (!this.isSparkline ? w.globals.rotateXLabels ? 10 : 15 : 0); - gl.gridWidth = gl.svgWidth - yAxisWidth; - break; - - case 'left': - gl.translateY = translateY; - gl.translateX = lgRect.width + yAxisWidth; - gl.gridHeight = gl.svgHeight - xAxisHeight - 12; - gl.gridWidth = gl.svgWidth - lgRect.width - yAxisWidth; - break; - - case 'right': - gl.translateY = translateY; - gl.translateX = yAxisWidth; - gl.gridHeight = gl.svgHeight - xAxisHeight - 12; - gl.gridWidth = gl.svgWidth - lgRect.width - yAxisWidth - 5; - break; - - default: - throw new Error('Legend position not supported'); - } - - this.setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords); // after drawing everything, set the Y axis positions - - var objyAxis = new YAxis(this.ctx); - objyAxis.setYAxisXPosition(yaxisLabelCoords, yTitleCoords); - } - }, { - key: "setGridCoordsForNonAxisCharts", - value: function setGridCoordsForNonAxisCharts(lgRect) { - var w = this.w; - var gl = w.globals; - var xPad = 0; - - if (w.config.legend.show && !w.config.legend.floating) { - xPad = 20; - } - - var offY = 10; - var offX = 0; - - if (w.config.chart.type === 'pie' || w.config.chart.type === 'donut') { - offY = offY + w.config.plotOptions.pie.offsetY; - offX = offX + w.config.plotOptions.pie.offsetX; - } else if (w.config.chart.type === 'radialBar') { - offY = offY + w.config.plotOptions.radialBar.offsetY; - offX = offX + w.config.plotOptions.radialBar.offsetX; - } - - if (!w.config.legend.show) { - gl.gridHeight = gl.svgHeight - 35; - gl.gridWidth = gl.gridHeight; - gl.translateY = offY - 10; - gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2; - return; - } - - switch (w.config.legend.position) { - case 'bottom': - gl.gridHeight = gl.svgHeight - lgRect.height - 35; - gl.gridWidth = gl.gridHeight; - gl.translateY = offY - 20; - gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2; - break; - - case 'top': - gl.gridHeight = gl.svgHeight - lgRect.height - 35; - gl.gridWidth = gl.gridHeight; - gl.translateY = lgRect.height + offY; - gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2; - break; - - case 'left': - gl.gridWidth = gl.svgWidth - lgRect.width - xPad; - gl.gridHeight = gl.gridWidth; - gl.translateY = offY; - gl.translateX = offX + lgRect.width + xPad; - break; - - case 'right': - gl.gridWidth = gl.svgWidth - lgRect.width - xPad - 5; - gl.gridHeight = gl.gridWidth; - gl.translateY = offY; - gl.translateX = offX + 10; - break; - - default: - throw new Error('Legend position not supported'); - } - } - }, { - key: "setGridXPosForDualYAxis", - value: function setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords) { - var w = this.w; - w.config.yaxis.map(function (yaxe, index) { - if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1 && !w.config.yaxis[index].floating && w.config.yaxis[index].show) { - if (yaxe.opposite) { - w.globals.translateX = w.globals.translateX - (yaxisLabelCoords[index].width + yTitleCoords[index].width) - parseInt(w.config.yaxis[index].labels.style.fontSize) / 1.2 - 12; - } - } - }); - } // Sometimes, the last labels gets cropped in category/numeric xaxis. - // Hence, we add some additional padding based on the label length to avoid the last label being cropped. - // NOTE: datetime x-axis won't have any effect with this as we don't know the label length there due to many constraints. - - }, { - key: "additionalPaddingXLabels", - value: function additionalPaddingXLabels(xaxisLabelCoords) { - var _this = this; - - var w = this.w; - - if (w.config.xaxis.type === 'category' && w.globals.isBarHorizontal || w.config.xaxis.type === 'numeric' || w.config.xaxis.type === 'datetime') { - var rightPad = function rightPad(labels) { - if (_this.timescaleLabels) { - // for timeline labels, we take the last label and check if it exceeds gridWidth - var lastTimescaleLabel = _this.timescaleLabels[_this.timescaleLabels.length - 1]; - var labelPosition = lastTimescaleLabel.position + labels.width; - - if (labelPosition > w.globals.gridWidth) { - w.globals.skipLastTimelinelabel = true; - } else { - // we have to make it false again in case of zooming/panning - w.globals.skipLastTimelinelabel = false; - } - } else if (w.config.xaxis.type !== 'datetime') { - if (w.config.grid.padding.right < labels.width) { - _this.xPadRight = labels.width / 2 + 1; - } - } - }; - - var leftPad = function leftPad(labels) { - if (w.config.grid.padding.left < labels.width) { - _this.xPadLeft = labels.width / 2 + 1; - } - }; - - var isXNumeric = w.globals.isXNumeric; - w.config.yaxis.forEach(function (yaxe, i) { - var shouldPad = !yaxe.show || yaxe.floating || w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || isXNumeric || yaxe.opposite && w.globals.isBarHorizontal; - - if (shouldPad) { - if (isXNumeric && w.globals.isMultipleYAxis && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || w.globals.isBarHorizontal && yaxe.opposite) { - leftPad(xaxisLabelCoords); - } - - if (!w.globals.isBarHorizontal && yaxe.opposite && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || isXNumeric && !w.globals.isMultipleYAxis) { - rightPad(xaxisLabelCoords); - } - } - }); - } - } - }, { - key: "titleSubtitleOffset", - value: function titleSubtitleOffset() { - var w = this.w; - var gl = w.globals; - var gridShrinkOffset = this.isSparkline || !w.globals.axisCharts ? 0 : 10; - - if (w.config.title.text !== undefined) { - gridShrinkOffset += w.config.title.margin; - } else { - gridShrinkOffset += this.isSparkline || !w.globals.axisCharts ? 0 : 5; - } - - if (w.config.subtitle.text !== undefined) { - gridShrinkOffset += w.config.subtitle.margin; - } else { - gridShrinkOffset += this.isSparkline || !w.globals.axisCharts ? 0 : 5; - } - - if (w.config.legend.show && w.config.legend.position === 'bottom' && !w.config.legend.floating && w.config.series.length > 1) { - gridShrinkOffset += 10; - } - - var titleCoords = this.getTitleSubtitleCoords('title'); - var subtitleCoords = this.getTitleSubtitleCoords('subtitle'); - gl.gridHeight = gl.gridHeight - titleCoords.height - subtitleCoords.height - gridShrinkOffset; - gl.translateY = gl.translateY + titleCoords.height + subtitleCoords.height + gridShrinkOffset; - } - }, { - key: "getTotalYAxisWidth", - value: function getTotalYAxisWidth() { - var w = this.w; - var yAxisWidth = 0; - var padding = 10; - - var isHiddenYAxis = function isHiddenYAxis(index) { - return w.globals.ignoreYAxisIndexes.indexOf(index) > -1; - }; - - w.globals.yLabelsCoords.map(function (yLabelCoord, index) { - var floating = w.config.yaxis[index].floating; - - if (yLabelCoord.width > 0 && !floating) { - yAxisWidth = yAxisWidth + yLabelCoord.width + padding; - - if (isHiddenYAxis(index)) { - yAxisWidth = yAxisWidth - yLabelCoord.width - padding; - } - } else { - yAxisWidth = yAxisWidth + (floating || !w.config.yaxis[index].show ? 0 : 5); - } - }); - w.globals.yTitleCoords.map(function (yTitleCoord, index) { - var floating = w.config.yaxis[index].floating; - padding = parseInt(w.config.yaxis[index].title.style.fontSize); - - if (yTitleCoord.width > 0 && !floating) { - yAxisWidth = yAxisWidth + yTitleCoord.width + padding; - - if (isHiddenYAxis(index)) { - yAxisWidth = yAxisWidth - yTitleCoord.width - padding; - } - } else { - yAxisWidth = yAxisWidth + (floating || !w.config.yaxis[index].show ? 0 : 5); - } - }); - return yAxisWidth; - } - }, { - key: "getxAxisTimeScaleLabelsCoords", - value: function getxAxisTimeScaleLabelsCoords() { - var w = this.w; - var rect; - this.timescaleLabels = w.globals.timelineLabels.slice(); - - if (w.globals.isBarHorizontal && w.config.xaxis.type === 'datetime') { - this.timescaleLabels = w.globals.invertedTimelineLabels.slice(); - } - - var labels = this.timescaleLabels.map(function (label) { - return label.value; - }); // get the longest string from the labels array and also apply label formatter to it - - var val = labels.reduce(function (a, b) { - // if undefined, maybe user didn't pass the datetime(x) values - if (typeof a === 'undefined') { - console.error('You have possibly supplied invalid Date format. Please supply a valid JavaScript Date'); - return 0; - } else { - return a.length > b.length ? a : b; - } - }, 0); - var graphics = new Graphics(this.ctx); - rect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize); - var totalWidthRotated = rect.width * 1.05 * labels.length; - - if (totalWidthRotated > w.globals.gridWidth && w.config.xaxis.labels.rotate !== 0) { - w.globals.overlappingXLabels = true; - } - - return rect; - } - /** - * Get X Axis Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getxAxisLabelsCoords", - value: function getxAxisLabelsCoords() { - var w = this.w; - var xaxisLabels = w.globals.labels.slice(); - var rect; - - if (w.globals.timelineLabels.length > 0) { - var coords = this.getxAxisTimeScaleLabelsCoords(); - rect = { - width: coords.width, - height: coords.height - }; - } else { - var lgWidthForSideLegends = w.config.legend.position === 'left' && w.config.legend.position === 'right' && !w.config.legend.floating ? this.lgRect.width : 0; // get the longest string from the labels array and also apply label formatter - - var xlbFormatter = w.globals.xLabelFormatter; // prevent changing xaxisLabels to avoid issues in multi-yaxies - fix #522 - - var val = xaxisLabels.reduce(function (a, b) { - return a.length > b.length ? a : b; - }, 0); // the labels gets changed for bar charts - - if (w.globals.isBarHorizontal) { - val = w.globals.yAxisScale[0].result.reduce(function (a, b) { - return a.length > b.length ? a : b; - }, 0); - } - - var xFormat = new Formatters(this.ctx); - val = xFormat.xLabelFormat(xlbFormatter, val); - var graphics = new Graphics(this.ctx); - var xLabelrect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize); - rect = { - width: xLabelrect.width, - height: xLabelrect.height - }; - - if (rect.width * xaxisLabels.length > w.globals.svgWidth - lgWidthForSideLegends - this.yAxisWidth && w.config.xaxis.labels.rotate !== 0) { - if (!w.globals.isBarHorizontal) { - w.globals.rotateXLabels = true; - xLabelrect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize, w.config.xaxis.labels.style.fontFamily, "rotate(".concat(w.config.xaxis.labels.rotate, " 0 0)"), false); - rect.height = xLabelrect.height / 1.66; - } - } else { - w.globals.rotateXLabels = false; - } - } - - if (!w.config.xaxis.labels.show) { - rect = { - width: 0, - height: 0 - }; - } - - return { - width: rect.width, - height: rect.height - }; - } - /** - * Get Y Axis Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getyAxisLabelsCoords", - value: function getyAxisLabelsCoords() { - var _this2 = this; - - var w = this.w; - var width = 0; - var height = 0; - var ret = []; - var labelPad = 10; - w.config.yaxis.map(function (yaxe, index) { - if (yaxe.show && yaxe.labels.show && w.globals.yAxisScale[index].result.length) { - var lbFormatter = w.globals.yLabelFormatters[index]; // the second parameter -1 is the index of tick which user can use in the formatter - - var val = lbFormatter(w.globals.yAxisScale[index].niceMax, -1); // if user has specified a custom formatter, and the result is null or empty, we need to discard the formatter and take the value as it is. - - if (typeof val === 'undefined' || val.length === 0) { - val = w.globals.yAxisScale[index].niceMax; - } - - if (w.globals.isBarHorizontal) { - labelPad = 0; - var barYaxisLabels = w.globals.labels.slice(); // get the longest string from the labels array and also apply label formatter to it - - val = barYaxisLabels.reduce(function (a, b) { - return a.length > b.length ? a : b; - }, 0); - val = lbFormatter(val, -1); - } - - var graphics = new Graphics(_this2.ctx); - var rect = graphics.getTextRects(val, yaxe.labels.style.fontSize); - ret.push({ - width: rect.width + labelPad, - height: rect.height - }); - } else { - ret.push({ - width: width, - height: height - }); - } - }); - return ret; - } - /** - * Get X Axis Title Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getxAxisTitleCoords", - value: function getxAxisTitleCoords() { - var w = this.w; - var width = 0; - var height = 0; - - if (w.config.xaxis.title.text !== undefined) { - var graphics = new Graphics(this.ctx); - var rect = graphics.getTextRects(w.config.xaxis.title.text, w.config.xaxis.title.style.fontSize); - width = rect.width; - height = rect.height; - } - - return { - width: width, - height: height - }; - } - /** - * Get Y Axis Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getyAxisTitleCoords", - value: function getyAxisTitleCoords() { - var _this3 = this; - - var w = this.w; - var ret = []; - w.config.yaxis.map(function (yaxe, index) { - if (yaxe.show && yaxe.title.text !== undefined) { - var graphics = new Graphics(_this3.ctx); - var rect = graphics.getTextRects(yaxe.title.text, yaxe.title.style.fontSize, yaxe.title.style.fontFamily, 'rotate(-90 0 0)', false); - ret.push({ - width: rect.width, - height: rect.height - }); - } else { - ret.push({ - width: 0, - height: 0 - }); - } - }); - return ret; - } - /** - * Get Chart Title/Subtitle Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getTitleSubtitleCoords", - value: function getTitleSubtitleCoords(type) { - var w = this.w; - var width = 0; - var height = 0; - var floating = type === 'title' ? w.config.title.floating : w.config.subtitle.floating; - var el = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-text")); - - if (el !== null && !floating) { - var coord = el.getBoundingClientRect(); - width = coord.width; - height = w.globals.axisCharts ? coord.height + 5 : coord.height; - } - - return { - width: width, - height: height - }; - } - }, { - key: "getLegendsRect", - value: function getLegendsRect() { - var w = this.w; - var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); - var lgRect = Object.assign({}, Utils.getBoundingClientRect(elLegendWrap)); - - if (elLegendWrap !== null && !w.config.legend.floating && w.config.legend.show) { - this.lgRect = { - x: lgRect.x, - y: lgRect.y, - height: lgRect.height, - width: lgRect.height === 0 ? 0 : lgRect.width - }; - } else { - this.lgRect = { - x: 0, - y: 0, - height: 0, - width: 0 - }; - } - - return this.lgRect; - } - }]); - - return Dimensions; -}(); - -/** - * ApexCharts TimeScale Class for generating time ticks for x-axis. - * - * @module TimeScale - **/ - -var TimeScale = -/*#__PURE__*/ -function () { - function TimeScale(ctx) { - _classCallCheck(this, TimeScale); - - this.ctx = ctx; - this.w = ctx.w; - this.timeScaleArray = []; - } - - _createClass(TimeScale, [{ - key: "calculateTimeScaleTicks", - value: function calculateTimeScaleTicks(minX, maxX) { - var _this = this; - - var w = this.w; // null check when no series to show - - if (w.globals.allSeriesCollapsed) { - w.globals.labels = []; - w.globals.timelineLabels = []; - return []; - } - - var dt = new DateTime(this.ctx); - var daysDiff = (maxX - minX) / (1000 * 60 * 60 * 24); - this.determineInterval(daysDiff); - w.globals.disableZoomIn = false; - w.globals.disableZoomOut = false; - - if (daysDiff < 0.005) { - w.globals.disableZoomIn = true; - } else if (daysDiff > 50000) { - w.globals.disableZoomOut = true; - } - - var timeIntervals = dt.getTimeUnitsfromTimestamp(minX, maxX); - var daysWidthOnXAxis = w.globals.gridWidth / daysDiff; - var hoursWidthOnXAxis = daysWidthOnXAxis / 24; - var minutesWidthOnXAxis = hoursWidthOnXAxis / 60; - var numberOfHours = Math.floor(daysDiff * 24); - var numberOfMinutes = Math.floor(daysDiff * 24 * 60); - var numberOfDays = Math.floor(daysDiff); - var numberOfMonths = Math.floor(daysDiff / 30); - var numberOfYears = Math.floor(daysDiff / 365); - var firstVal = { - minMinute: timeIntervals.minMinute, - minHour: timeIntervals.minHour, - minDate: timeIntervals.minDate, - minMonth: timeIntervals.minMonth, - minYear: timeIntervals.minYear - }; - var currentMinute = firstVal.minMinute; - var currentHour = firstVal.minHour; - var currentMonthDate = firstVal.minDate; - var currentDate = firstVal.minDate; - var currentMonth = firstVal.minMonth; - var currentYear = firstVal.minYear; - var params = { - firstVal: firstVal, - currentMinute: currentMinute, - currentHour: currentHour, - currentMonthDate: currentMonthDate, - currentDate: currentDate, - currentMonth: currentMonth, - currentYear: currentYear, - daysWidthOnXAxis: daysWidthOnXAxis, - hoursWidthOnXAxis: hoursWidthOnXAxis, - minutesWidthOnXAxis: minutesWidthOnXAxis, - numberOfMinutes: numberOfMinutes, - numberOfHours: numberOfHours, - numberOfDays: numberOfDays, - numberOfMonths: numberOfMonths, - numberOfYears: numberOfYears - }; - - switch (this.tickInterval) { - case 'years': - { - this.generateYearScale(params); - break; - } - - case 'months': - case 'half_year': - { - this.generateMonthScale(params); - break; - } - - case 'months_days': - case 'months_fortnight': - case 'days': - case 'week_days': - { - this.generateDayScale(params); - break; - } - - case 'hours': - { - this.generateHourScale(params); - break; - } - - case 'minutes': - this.generateMinuteScale(params); - break; - } // first, we will adjust the month values index - // as in the upper function, it is starting from 0 - // we will start them from 1 - - - var adjustedMonthInTimeScaleArray = this.timeScaleArray.map(function (ts) { - var defaultReturn = { - position: ts.position, - unit: ts.unit, - year: ts.year, - day: ts.day ? ts.day : 1, - hour: ts.hour ? ts.hour : 0, - month: ts.month + 1 - }; - - if (ts.unit === 'month') { - return _objectSpread({}, defaultReturn, { - value: ts.value + 1 - }); - } else if (ts.unit === 'day' || ts.unit === 'hour') { - return _objectSpread({}, defaultReturn, { - value: ts.value - }); - } else if (ts.unit === 'minute') { - return _objectSpread({}, defaultReturn, { - value: ts.value, - minute: ts.value - }); - } - - return ts; - }); - var filteredTimeScale = adjustedMonthInTimeScaleArray.filter(function (ts) { - var modulo = 1; - var ticks = Math.ceil(w.globals.gridWidth / 120); - var value = ts.value; - - if (w.config.xaxis.tickAmount !== undefined) { - ticks = w.config.xaxis.tickAmount; - } - - if (adjustedMonthInTimeScaleArray.length > ticks) { - modulo = Math.floor(adjustedMonthInTimeScaleArray.length / ticks); - } - - var shouldNotSkipUnit = false; // there is a big change in unit i.e days to months - - var shouldNotPrint = false; // should skip these values - - switch (_this.tickInterval) { - case 'half_year': - modulo = 7; - - if (ts.unit === 'year') { - shouldNotSkipUnit = true; - } - - break; - - case 'months': - modulo = 1; - - if (ts.unit === 'year') { - shouldNotSkipUnit = true; - } - - break; - - case 'months_fortnight': - modulo = 15; - - if (ts.unit === 'year' || ts.unit === 'month') { - shouldNotSkipUnit = true; - } - - if (value === 30) { - shouldNotPrint = true; - } - - break; - - case 'months_days': - modulo = 10; - - if (ts.unit === 'month') { - shouldNotSkipUnit = true; - } - - if (value === 30) { - shouldNotPrint = true; - } - - break; - - case 'week_days': - modulo = 8; - - if (ts.unit === 'month') { - shouldNotSkipUnit = true; - } - - break; - - case 'days': - modulo = 1; - - if (ts.unit === 'month') { - shouldNotSkipUnit = true; - } - - break; - - case 'hours': - if (ts.unit === 'day') { - shouldNotSkipUnit = true; - } - - break; - - case 'minutes': - if (value % 5 !== 0) { - shouldNotPrint = true; - } - - break; - } - - if (_this.tickInterval === 'minutes' || _this.tickInterval === 'hours') { - if (!shouldNotPrint) { - return true; - } - } else { - if ((value % modulo === 0 || shouldNotSkipUnit) && !shouldNotPrint) { - return true; - } - } - }); - return filteredTimeScale; - } - }, { - key: "recalcDimensionsBasedOnFormat", - value: function recalcDimensionsBasedOnFormat(filteredTimeScale, inverted) { - var w = this.w; - var reformattedTimescaleArray = this.formatDates(filteredTimeScale); - var removedOverlappingTS = this.removeOverlappingTS(reformattedTimescaleArray); - - if (!inverted) { - w.globals.timelineLabels = removedOverlappingTS.slice(); - } else { - w.globals.invertedTimelineLabels = removedOverlappingTS.slice(); - } // at this stage, we need to re-calculate coords of the grid as timeline labels may have altered the xaxis labels coords - // The reason we can't do this prior to this stage is because timeline labels depends on gridWidth, and as the ticks are calculated based on available gridWidth, there can be unknown number of ticks generated for different minX and maxX - // Dependency on Dimensions(), need to refactor correctly - // TODO - find an alternate way to avoid calling this Heavy method twice - - - var dimensions = new Dimensions(this.ctx); - dimensions.plotCoords(); - } - }, { - key: "determineInterval", - value: function determineInterval(daysDiff) { - switch (true) { - case daysDiff > 1825: - // difference is more than 5 years - this.tickInterval = 'years'; - break; - - case daysDiff > 800 && daysDiff <= 1825: - this.tickInterval = 'half_year'; - break; - - case daysDiff > 180 && daysDiff <= 800: - this.tickInterval = 'months'; - break; - - case daysDiff > 90 && daysDiff <= 180: - this.tickInterval = 'months_fortnight'; - break; - - case daysDiff > 60 && daysDiff <= 90: - this.tickInterval = 'months_days'; - break; - - case daysDiff > 30 && daysDiff <= 60: - this.tickInterval = 'week_days'; - break; - - case daysDiff > 2 && daysDiff <= 30: - this.tickInterval = 'days'; - break; - - case daysDiff > 0.1 && daysDiff <= 2: - // less than 2 days - this.tickInterval = 'hours'; - break; - - case daysDiff < 0.1: - this.tickInterval = 'minutes'; - break; - - default: - this.tickInterval = 'days'; - break; - } - } - }, { - key: "generateYearScale", - value: function generateYearScale(params) { - var firstVal = params.firstVal, - currentMonth = params.currentMonth, - currentYear = params.currentYear, - daysWidthOnXAxis = params.daysWidthOnXAxis, - numberOfYears = params.numberOfYears; - var firstTickValue = firstVal.minYear; - var firstTickPosition = 0; - var dt = new DateTime(this.ctx); - var unit = 'year'; - - if (firstVal.minDate > 1 && firstVal.minMonth > 0) { - var remainingDays = dt.determineRemainingDaysOfYear(firstVal.minYear, firstVal.minMonth, firstVal.minDate); // remainingDaysofFirstMonth is used to reacht the 2nd tick position - - var remainingDaysOfFirstYear = dt.determineDaysOfYear(firstVal.minYear) - remainingDays + 1; // calculate the first tick position - - firstTickPosition = remainingDaysOfFirstYear * daysWidthOnXAxis; - firstTickValue = firstVal.minYear + 1; // push the first tick in the array - - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - year: firstTickValue, - month: Utils.monthMod(currentMonth + 1) - }); - } else if (firstVal.minDate === 1 && firstVal.minMonth === 0) { - // push the first tick in the array - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - year: currentYear, - month: Utils.monthMod(currentMonth + 1) - }); - } - - var year = firstTickValue; - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0; i < numberOfYears; i++) { - year++; - pos = dt.determineDaysOfYear(year - 1) * daysWidthOnXAxis + pos; - this.timeScaleArray.push({ - position: pos, - value: year, - unit: unit, - year: year, - month: 1 - }); - } - } - }, { - key: "generateMonthScale", - value: function generateMonthScale(params) { - var firstVal = params.firstVal, - currentMonthDate = params.currentMonthDate, - currentMonth = params.currentMonth, - currentYear = params.currentYear, - daysWidthOnXAxis = params.daysWidthOnXAxis, - numberOfMonths = params.numberOfMonths; - var firstTickValue = currentMonth; - var firstTickPosition = 0; - var dt = new DateTime(this.ctx); - var unit = 'month'; - var yrCounter = 0; - - if (firstVal.minDate > 1) { - // remainingDaysofFirstMonth is used to reacht the 2nd tick position - var remainingDaysOfFirstMonth = dt.determineDaysOfMonths(currentMonth + 1, firstVal.minYear) - currentMonthDate + 1; // calculate the first tick position - - firstTickPosition = remainingDaysOfFirstMonth * daysWidthOnXAxis; - firstTickValue = Utils.monthMod(currentMonth + 1); - var year = currentYear + yrCounter; - - var _month = Utils.monthMod(firstTickValue); - - var value = firstTickValue; // it's Jan, so update the year - - if (firstTickValue === 0) { - unit = 'year'; - value = year; - _month = 1; - yrCounter += 1; - year = year + yrCounter; - } // push the first tick in the array - - - this.timeScaleArray.push({ - position: firstTickPosition, - value: value, - unit: unit, - year: year, - month: _month - }); - } else { - // push the first tick in the array - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - year: currentYear, - month: Utils.monthMod(currentMonth) - }); - } - - var month = firstTickValue + 1; - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0, j = 1; i < numberOfMonths; i++, j++) { - month = Utils.monthMod(month); - - if (month === 0) { - unit = 'year'; - yrCounter += 1; - } else { - unit = 'month'; - } - - var _year = currentYear + Math.floor(month / 12) + yrCounter; - - pos = dt.determineDaysOfMonths(month, _year) * daysWidthOnXAxis + pos; - var monthVal = month === 0 ? _year : month; - this.timeScaleArray.push({ - position: pos, - value: monthVal, - unit: unit, - year: _year, - month: month === 0 ? 1 : month - }); - month++; - } - } - }, { - key: "generateDayScale", - value: function generateDayScale(params) { - var firstVal = params.firstVal, - currentMonth = params.currentMonth, - currentYear = params.currentYear, - hoursWidthOnXAxis = params.hoursWidthOnXAxis, - numberOfDays = params.numberOfDays; - var dt = new DateTime(this.ctx); - var unit = 'day'; - var remainingHours = 24 - firstVal.minHour; - var yrCounter = 0; // calculate the first tick position - - var firstTickPosition = remainingHours * hoursWidthOnXAxis; - var firstTickValue = firstVal.minDate + 1; - var val = firstTickValue; - - var changeMonth = function changeMonth(dateVal, month, year) { - var monthdays = dt.determineDaysOfMonths(month + 1, year); - - if (dateVal > monthdays) { - month = month + 1; - date = 1; - unit = 'month'; - val = month; - return month; - } - - return month; - }; - - var date = firstTickValue; - var month = changeMonth(date, currentMonth, currentYear); // push the first tick in the array - - this.timeScaleArray.push({ - position: firstTickPosition, - value: val, - unit: unit, - year: currentYear, - month: Utils.monthMod(month), - day: date - }); - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0; i < numberOfDays; i++) { - date += 1; - unit = 'day'; - month = changeMonth(date, month, currentYear + Math.floor(month / 12) + yrCounter); - var year = currentYear + Math.floor(month / 12) + yrCounter; - pos = 24 * hoursWidthOnXAxis + pos; - - var _val = date === 1 ? Utils.monthMod(month) : date; - - this.timeScaleArray.push({ - position: pos, - value: _val, - unit: unit, - year: year, - month: Utils.monthMod(month), - day: _val - }); - } - } - }, { - key: "generateHourScale", - value: function generateHourScale(params) { - var firstVal = params.firstVal, - currentDate = params.currentDate, - currentMonth = params.currentMonth, - currentYear = params.currentYear, - minutesWidthOnXAxis = params.minutesWidthOnXAxis, - numberOfHours = params.numberOfHours; - var dt = new DateTime(this.ctx); - var yrCounter = 0; - var unit = 'hour'; - - var changeDate = function changeDate(dateVal, month) { - var monthdays = dt.determineDaysOfMonths(month + 1, currentYear); - - if (dateVal > monthdays) { - date = 1; - month = month + 1; - } - - return { - month: month, - date: date - }; - }; - - var changeMonth = function changeMonth(dateVal, month) { - var monthdays = dt.determineDaysOfMonths(month + 1, currentYear); - - if (dateVal > monthdays) { - month = month + 1; - return month; - } - - return month; - }; - - var remainingMins = 60 - firstVal.minMinute; - var firstTickPosition = remainingMins * minutesWidthOnXAxis; - var firstTickValue = firstVal.minHour + 1; - var hour = firstTickValue + 1; - - if (remainingMins === 60) { - firstTickPosition = 0; - firstTickValue = firstVal.minHour; - hour = firstTickValue + 1; - } - - var date = currentDate; - var month = changeMonth(date, currentMonth); // push the first tick in the array - - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - day: date, - hour: hour, - year: currentYear, - month: Utils.monthMod(month) - }); - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0; i < numberOfHours; i++) { - unit = 'hour'; - - if (hour >= 24) { - hour = 0; - date += 1; - unit = 'day'; - var checkNextMonth = changeDate(date, month); - month = checkNextMonth.month; - month = changeMonth(date, month); - } - - var year = currentYear + Math.floor(month / 12) + yrCounter; - pos = hour === 0 && i === 0 ? remainingMins * minutesWidthOnXAxis : 60 * minutesWidthOnXAxis + pos; - var val = hour === 0 ? date : hour; - this.timeScaleArray.push({ - position: pos, - value: val, - unit: unit, - hour: hour, - day: date, - year: year, - month: Utils.monthMod(month) - }); - hour++; - } - } - }, { - key: "generateMinuteScale", - value: function generateMinuteScale(params) { - var firstVal = params.firstVal, - currentMinute = params.currentMinute, - currentHour = params.currentHour, - currentDate = params.currentDate, - currentMonth = params.currentMonth, - currentYear = params.currentYear, - minutesWidthOnXAxis = params.minutesWidthOnXAxis, - numberOfMinutes = params.numberOfMinutes; - var yrCounter = 0; - var unit = 'minute'; - var remainingMins = currentMinute - firstVal.minMinute; - var firstTickPosition = minutesWidthOnXAxis - remainingMins; - var firstTickValue = firstVal.minMinute + 1; - var minute = firstTickValue + 1; - var date = currentDate; - var month = currentMonth; - var year = currentYear; - var hour = currentHour; // push the first tick in the array - - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - day: date, - hour: hour, - minute: minute, - year: year, - month: Utils.monthMod(month) - }); - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0; i < numberOfMinutes; i++) { - if (minute >= 60) { - minute = 0; - hour += 1; - - if (hour === 24) { - hour = 0; - } - } - - var _year2 = currentYear + Math.floor(month / 12) + yrCounter; - - pos = minutesWidthOnXAxis + pos; - var val = minute; - this.timeScaleArray.push({ - position: pos, - value: val, - unit: unit, - hour: hour, - minute: minute, - day: date, - year: _year2, - month: Utils.monthMod(month) - }); - minute++; - } - } - }, { - key: "createRawDateString", - value: function createRawDateString(ts, value) { - var raw = ts.year; - raw += '-' + ('0' + ts.month.toString()).slice(-2); // unit is day - - if (ts.unit === 'day') { - raw += ts.unit === 'day' ? '-' + ('0' + value).slice(-2) : '-01'; - } else { - raw += '-' + ('0' + (ts.day ? ts.day : '1')).slice(-2); - } // unit is hour - - - if (ts.unit === 'hour') { - raw += ts.unit === 'hour' ? 'T' + ('0' + value).slice(-2) : 'T00'; - } else { - raw += 'T' + ('0' + (ts.hour ? ts.hour : '0')).slice(-2); - } // unit is minute - - - raw += ts.unit === 'minute' ? ':' + ('0' + value).slice(-2) + ':00.000Z' : ':00:00.000Z'; - return raw; - } - }, { - key: "formatDates", - value: function formatDates(filteredTimeScale) { - var _this2 = this; - - var w = this.w; - var reformattedTimescaleArray = filteredTimeScale.map(function (ts) { - var value = ts.value.toString(); - var dt = new DateTime(_this2.ctx); - - var raw = _this2.createRawDateString(ts, value); // parse the whole ISO datestring - - - var dateString = new Date(Date.parse(raw)); - - if (w.config.xaxis.labels.format === undefined) { - var customFormat = 'dd MMM'; - var dtFormatter = w.config.xaxis.labels.datetimeFormatter; - if (ts.unit === 'year') customFormat = dtFormatter.year; - if (ts.unit === 'month') customFormat = dtFormatter.month; - if (ts.unit === 'day') customFormat = dtFormatter.day; - if (ts.unit === 'hour') customFormat = dtFormatter.hour; - if (ts.unit === 'minute') customFormat = dtFormatter.minute; - value = dt.formatDate(dateString, customFormat, true, false); - } else { - value = dt.formatDate(dateString, w.config.xaxis.labels.format); - } - - return { - dateString: raw, - position: ts.position, - value: value, - unit: ts.unit, - year: ts.year, - month: ts.month - }; - }); - return reformattedTimescaleArray; - } - }, { - key: "removeOverlappingTS", - value: function removeOverlappingTS(arr) { - var _this3 = this; - - var graphics = new Graphics(this.ctx); - var lastDrawnIndex = 0; - var filteredArray = arr.map(function (item, index) { - if (index > 0 && _this3.w.config.xaxis.labels.hideOverlappingLabels) { - var prevLabelWidth = graphics.getTextRects(arr[lastDrawnIndex].value).width; - var prevPos = arr[lastDrawnIndex].position; - var pos = item.position; - - if (pos > prevPos + prevLabelWidth + 10) { - lastDrawnIndex = index; - return item; - } else { - return null; - } - } else { - return item; - } - }); - filteredArray = filteredArray.filter(function (f) { - return f !== null; - }); - return filteredArray; - } - }]); - - return TimeScale; -}(); - -/** - * ApexCharts Core Class responsible for major calculations and creating elements. - * - * @module Core - **/ - -var Core = -/*#__PURE__*/ -function () { - function Core(el, ctx) { - _classCallCheck(this, Core); - - this.ctx = ctx; - this.w = ctx.w; - this.el = el; - this.coreUtils = new CoreUtils(this.ctx); - this.twoDSeries = []; - this.threeDSeries = []; - this.twoDSeriesX = []; - } // get data and store into appropriate vars - - - _createClass(Core, [{ - key: "setupElements", - value: function setupElements() { - var gl = this.w.globals; - var cnf = this.w.config; // const graphics = new Graphics(this.ctx) - - var ct = cnf.chart.type; - var axisChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', // 'rangeArea', - 'candlestick', 'radar', 'scatter', 'bubble', 'heatmap']; - var xyChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', // 'rangeArea', - 'candlestick', 'scatter', 'bubble']; - gl.axisCharts = axisChartsArrTypes.indexOf(ct) > -1; - gl.xyCharts = xyChartsArrTypes.indexOf(ct) > -1; - gl.isBarHorizontal = (cnf.chart.type === 'bar' || cnf.chart.type === 'rangeBar') && cnf.plotOptions.bar.horizontal; - gl.chartClass = '.apexcharts' + gl.cuid; - gl.dom.baseEl = this.el; - gl.dom.elWrap = document.createElement('div'); - Graphics.setAttrs(gl.dom.elWrap, { - id: gl.chartClass.substring(1), - class: 'apexcharts-canvas ' + gl.chartClass.substring(1) - }); - this.el.appendChild(gl.dom.elWrap); - gl.dom.Paper = new window.SVG.Doc(gl.dom.elWrap); - gl.dom.Paper.attr({ - class: 'apexcharts-svg', - 'xmlns:data': 'ApexChartsNS', - transform: "translate(".concat(cnf.chart.offsetX, ", ").concat(cnf.chart.offsetY, ")") - }); - gl.dom.Paper.node.style.background = cnf.chart.background; - this.setSVGDimensions(); - gl.dom.elGraphical = gl.dom.Paper.group().attr({ - class: 'apexcharts-inner apexcharts-graphical' - }); - gl.dom.elDefs = gl.dom.Paper.defs(); - gl.dom.elLegendWrap = document.createElement('div'); - gl.dom.elLegendWrap.classList.add('apexcharts-legend'); - gl.dom.elWrap.appendChild(gl.dom.elLegendWrap); // gl.dom.Paper.add(gl.dom.elLegendWrap) - - gl.dom.Paper.add(gl.dom.elGraphical); - gl.dom.elGraphical.add(gl.dom.elDefs); - } - }, { - key: "plotChartType", - value: function plotChartType(ser, xyRatios) { - var w = this.w; - var cnf = w.config; - var gl = w.globals; - var lineSeries = { - series: [], - i: [] - }; - var areaSeries = { - series: [], - i: [] - }; - var scatterSeries = { - series: [], - i: [] - }; - var columnSeries = { - series: [], - i: [] - }; - var candlestickSeries = { - series: [], - i: [] - }; - gl.series.map(function (series, st) { - // if user has specified a particular type for particular series - if (typeof ser[st].type !== 'undefined') { - if (ser[st].type === 'column' || ser[st].type === 'bar') { - w.config.plotOptions.bar.horizontal = false; // horizontal bars not supported in mixed charts, hence forcefully set to false - - columnSeries.series.push(series); - columnSeries.i.push(st); - } else if (ser[st].type === 'area') { - areaSeries.series.push(series); - areaSeries.i.push(st); - } else if (ser[st].type === 'line') { - lineSeries.series.push(series); - lineSeries.i.push(st); - } else if (ser[st].type === 'scatter') { - scatterSeries.series.push(series); - scatterSeries.i.push(st); - } else if (ser[st].type === 'bubble') ; else if (ser[st].type === 'candlestick') { - candlestickSeries.series.push(series); - candlestickSeries.i.push(st); - } else { - // user has specified type, but it is not valid (other than line/area/column) - console.warn('You have specified an unrecognized chart type. Available types for this propery are line/area/column/bar/scatter/bubble'); - } - - gl.comboCharts = true; - } else { - lineSeries.series.push(series); - lineSeries.i.push(st); - } - }); - var line = new Line(this.ctx, xyRatios); - var candlestick = new CandleStick(this.ctx, xyRatios); - var pie = new Pie(this.ctx); - var radialBar = new Radial(this.ctx); - var rangeBar = new RangeBar(this.ctx, xyRatios); - var radar = new Radar(this.ctx); - var elGraph = []; - - if (gl.comboCharts) { - if (areaSeries.series.length > 0) { - elGraph.push(line.draw(areaSeries.series, 'area', areaSeries.i)); - } - - if (columnSeries.series.length > 0) { - if (w.config.chart.stacked) { - var barStacked = new BarStacked(this.ctx, xyRatios); - elGraph.push(barStacked.draw(columnSeries.series, columnSeries.i)); - } else { - var bar = new Bar(this.ctx, xyRatios); - elGraph.push(bar.draw(columnSeries.series, columnSeries.i)); - } - } - - if (lineSeries.series.length > 0) { - elGraph.push(line.draw(lineSeries.series, 'line', lineSeries.i)); - } - - if (candlestickSeries.series.length > 0) { - elGraph.push(candlestick.draw(candlestickSeries.series, candlestickSeries.i)); - } - - if (scatterSeries.series.length > 0) { - var scatterLine = new Line(this.ctx, xyRatios, true); - elGraph.push(scatterLine.draw(scatterSeries.series, 'scatter', scatterSeries.i)); - } // TODO: allow bubble series in a combo chart - // if (bubbleSeries.series.length > 0) { - // const bubbleLine = new Line(this.ctx, xyRatios, true) - // elGraph.push( - // bubbleLine.draw(bubbleSeries.series, 'bubble', bubbleSeries.i) - // ) - // } - - } else { - switch (cnf.chart.type) { - case 'line': - elGraph = line.draw(gl.series, 'line'); - break; - - case 'area': - elGraph = line.draw(gl.series, 'area'); - break; - - case 'bar': - if (cnf.chart.stacked) { - var _barStacked = new BarStacked(this.ctx, xyRatios); - - elGraph = _barStacked.draw(gl.series); - } else { - var _bar = new Bar(this.ctx, xyRatios); - - elGraph = _bar.draw(gl.series); - } - - break; - - case 'candlestick': - var candleStick = new CandleStick(this.ctx, xyRatios); - elGraph = candleStick.draw(gl.series); - break; - - case 'rangeBar': - elGraph = rangeBar.draw(gl.series); - break; - - case 'heatmap': - var heatmap = new HeatMap(this.ctx, xyRatios); - elGraph = heatmap.draw(gl.series); - break; - - case 'pie': - case 'donut': - elGraph = pie.draw(gl.series); - break; - - case 'radialBar': - elGraph = radialBar.draw(gl.series); - break; - - case 'radar': - elGraph = radar.draw(gl.series); - break; - - default: - elGraph = line.draw(gl.series); - } - } - - return elGraph; - } - }, { - key: "setSVGDimensions", - value: function setSVGDimensions() { - var gl = this.w.globals; - var cnf = this.w.config; - gl.svgWidth = cnf.chart.width; - gl.svgHeight = cnf.chart.height; - var elDim = Utils.getDimensions(this.el); - var widthUnit = cnf.chart.width.toString().split(/[0-9]+/g).pop(); - - if (widthUnit === '%') { - if (Utils.isNumber(elDim[0])) { - if (elDim[0].width === 0) { - elDim = Utils.getDimensions(this.el.parentNode); - } - - gl.svgWidth = elDim[0] * parseInt(cnf.chart.width) / 100; - } - } else if (widthUnit === 'px' || widthUnit === '') { - gl.svgWidth = parseInt(cnf.chart.width); - } - - if (gl.svgHeight !== 'auto' && gl.svgHeight !== '') { - var heightUnit = cnf.chart.height.toString().split(/[0-9]+/g).pop(); - - if (heightUnit === '%') { - var elParentDim = Utils.getDimensions(this.el.parentNode); - gl.svgHeight = elParentDim[1] * parseInt(cnf.chart.height) / 100; - } else { - gl.svgHeight = parseInt(cnf.chart.height); - } - } else { - if (gl.axisCharts) { - gl.svgHeight = gl.svgWidth / 1.61; - } else { - gl.svgHeight = gl.svgWidth; - } - } - - Graphics.setAttrs(gl.dom.Paper.node, { - width: gl.svgWidth, - height: gl.svgHeight - }); // gl.dom.Paper.node.parentNode.parentNode.style.minWidth = gl.svgWidth + "px"; - - var offsetY = cnf.chart.sparkline.enabled ? 0 : gl.axisCharts ? cnf.chart.parentHeightOffset : 0; - gl.dom.Paper.node.parentNode.parentNode.style.minHeight = gl.svgHeight + offsetY + 'px'; - gl.dom.elWrap.style.width = gl.svgWidth + 'px'; - gl.dom.elWrap.style.height = gl.svgHeight + 'px'; - } - }, { - key: "shiftGraphPosition", - value: function shiftGraphPosition() { - var gl = this.w.globals; - var tY = gl.translateY; - var tX = gl.translateX; - var scalingAttrs = { - transform: 'translate(' + tX + ', ' + tY + ')' - }; - Graphics.setAttrs(gl.dom.elGraphical.node, scalingAttrs); - } - /* - ** All the calculations for setting range in charts will be done here - */ - - }, { - key: "coreCalculations", - value: function coreCalculations() { - var range = new Range$1(this.ctx); - range.init(); - } - }, { - key: "resetGlobals", - value: function resetGlobals() { - var _this = this; - - var gl = this.w.globals; - gl.series = []; - gl.seriesCandleO = []; - gl.seriesCandleH = []; - gl.seriesCandleL = []; - gl.seriesCandleC = []; - gl.seriesRangeStart = []; - gl.seriesRangeEnd = []; - gl.seriesPercent = []; - gl.seriesX = []; - gl.seriesZ = []; - gl.seriesNames = []; - gl.seriesTotals = []; - gl.stackedSeriesTotals = []; - gl.labels = []; - gl.timelineLabels = []; - gl.noLabelsProvided = false; - gl.timescaleTicks = []; - gl.resizeTimer = null; - gl.selectionResizeTimer = null; - - gl.seriesXvalues = function () { - return _this.w.config.series.map(function (s) { - return []; - }); - }(); - - gl.seriesYvalues = function () { - return _this.w.config.series.map(function (s) { - return []; - }); - }(); - - gl.delayedElements = []; - gl.pointsArray = []; - gl.dataLabelsRects = []; - gl.isXNumeric = false; - gl.isDataXYZ = false; - gl.maxY = -Number.MAX_VALUE; - gl.minY = Number.MIN_VALUE; - gl.minYArr = []; - gl.maxYArr = []; - gl.maxX = -Number.MAX_VALUE; - gl.minX = Number.MAX_VALUE; - gl.initialmaxX = -Number.MAX_VALUE; - gl.initialminX = Number.MAX_VALUE; - gl.maxDate = 0; - gl.minDate = Number.MAX_VALUE; - gl.minZ = Number.MAX_VALUE; - gl.maxZ = -Number.MAX_VALUE; - gl.minXDiff = Number.MAX_VALUE; - gl.yAxisScale = []; - gl.xAxisScale = null; - gl.xAxisTicksPositions = []; - gl.yLabelsCoords = []; - gl.yTitleCoords = []; - gl.xRange = 0; - gl.yRange = []; - gl.zRange = 0; - gl.dataPoints = 0; - } - }, { - key: "isMultipleY", - value: function isMultipleY() { - // user has supplied an array in yaxis property. So, turn on multipleYAxis flag - if (this.w.config.yaxis.constructor === Array && this.w.config.yaxis.length > 1) { - // first, turn off stacking if multiple y axis - this.w.config.chart.stacked = false; - this.w.globals.isMultipleYAxis = true; - return true; - } - } - }, { - key: "excludeCollapsedSeriesInYAxis", - value: function excludeCollapsedSeriesInYAxis() { - var _this2 = this; - - var w = this.w; - w.globals.ignoreYAxisIndexes = w.globals.collapsedSeries.map(function (collapsed, i) { - if (_this2.w.globals.isMultipleYAxis) { - return collapsed.index; - } - }); - } - }, { - key: "isMultiFormat", - value: function isMultiFormat() { - return this.isFormatXY() || this.isFormat2DArray(); - } // given format is [{x, y}, {x, y}] - - }, { - key: "isFormatXY", - value: function isFormatXY() { - var series = this.w.config.series.slice(); - var sr = new Series(this.ctx); - this.activeSeriesIndex = sr.getActiveConfigSeriesIndex(); - - if (typeof series[this.activeSeriesIndex].data !== 'undefined' && series[this.activeSeriesIndex].data.length > 0 && series[this.activeSeriesIndex].data[0] !== null && typeof series[this.activeSeriesIndex].data[0].x !== 'undefined' && series[this.activeSeriesIndex].data[0] !== null) { - return true; - } - } // given format is [[x, y], [x, y]] - - }, { - key: "isFormat2DArray", - value: function isFormat2DArray() { - var series = this.w.config.series.slice(); - var sr = new Series(this.ctx); - this.activeSeriesIndex = sr.getActiveConfigSeriesIndex(); - - if (typeof series[this.activeSeriesIndex].data !== 'undefined' && series[this.activeSeriesIndex].data.length > 0 && typeof series[this.activeSeriesIndex].data[0] !== 'undefined' && series[this.activeSeriesIndex].data[0] !== null && series[this.activeSeriesIndex].data[0].constructor === Array) { - return true; - } - } - }, { - key: "handleFormat2DArray", - value: function handleFormat2DArray(ser, i) { - var cnf = this.w.config; - var gl = this.w.globals; - - for (var j = 0; j < ser[i].data.length; j++) { - if (typeof ser[i].data[j][1] !== 'undefined') { - if (Array.isArray(ser[i].data[j][1]) && ser[i].data[j][1].length === 4) { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][1][3])); - } else { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][1])); - } - - gl.dataFormatXNumeric = true; - } - - if (cnf.xaxis.type === 'datetime') { - // if timestamps are provided and xaxis type is datettime, - var ts = new Date(ser[i].data[j][0]); - ts = new Date(ts).getTime(); - this.twoDSeriesX.push(ts); - } else { - this.twoDSeriesX.push(ser[i].data[j][0]); - } - } - - for (var _j = 0; _j < ser[i].data.length; _j++) { - if (typeof ser[i].data[_j][2] !== 'undefined') { - this.threeDSeries.push(ser[i].data[_j][2]); - gl.isDataXYZ = true; - } - } - } - }, { - key: "handleFormatXY", - value: function handleFormatXY(ser, i) { - var cnf = this.w.config; - var gl = this.w.globals; - var dt = new DateTime(this.ctx); - var activeI = i; - - if (gl.collapsedSeriesIndices.indexOf(i) > -1) { - // fix #368 - activeI = this.activeSeriesIndex; - } // get series - - - for (var j = 0; j < ser[i].data.length; j++) { - if (typeof ser[i].data[j].y !== 'undefined') { - if (Array.isArray(ser[i].data[j].y)) { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y[ser[i].data[j].y.length - 1])); - } else { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y)); - } - } - } // get seriesX - - - for (var _j2 = 0; _j2 < ser[activeI].data.length; _j2++) { - var isXString = typeof ser[activeI].data[_j2].x === 'string'; - var isXDate = !!dt.isValidDate(ser[activeI].data[_j2].x.toString()); - - if (isXString || isXDate) { - // user supplied '01/01/2017' or a date string (a JS date object is not supported) - if (isXString) { - if (cnf.xaxis.type === 'datetime' && !gl.isRangeData) { - this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x)); - } else { - // a category and not a numeric x value - this.fallbackToCategory = true; - this.twoDSeriesX.push(ser[activeI].data[_j2].x); - } - } else { - if (cnf.xaxis.type === 'datetime') { - this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x.toString())); - } else { - gl.dataFormatXNumeric = true; - gl.isXNumeric = true; - this.twoDSeriesX.push(parseFloat(ser[activeI].data[_j2].x)); - } - } - } else { - // a numeric value in x property - gl.isXNumeric = true; - gl.dataFormatXNumeric = true; - this.twoDSeriesX.push(ser[activeI].data[_j2].x); - } - } - - if (ser[i].data[0] && typeof ser[i].data[0].z !== 'undefined') { - for (var t = 0; t < ser[i].data.length; t++) { - this.threeDSeries.push(ser[i].data[t].z); - } - - gl.isDataXYZ = true; - } - } - }, { - key: "handleRangeData", - value: function handleRangeData(ser, i) { - var gl = this.w.globals; - var range = {}; - - if (this.isFormat2DArray()) { - range = this.handleRangeDataFormat('array', ser, i); - } else if (this.isFormatXY()) { - range = this.handleRangeDataFormat('xy', ser, i); - } - - gl.seriesRangeStart.push(range.start); - gl.seriesRangeEnd.push(range.end); - return range; - } - }, { - key: "handleCandleStickData", - value: function handleCandleStickData(ser, i) { - var gl = this.w.globals; - var ohlc = {}; - - if (this.isFormat2DArray()) { - ohlc = this.handleCandleStickDataFormat('array', ser, i); - } else if (this.isFormatXY()) { - ohlc = this.handleCandleStickDataFormat('xy', ser, i); - } - - gl.seriesCandleO.push(ohlc.o); - gl.seriesCandleH.push(ohlc.h); - gl.seriesCandleL.push(ohlc.l); - gl.seriesCandleC.push(ohlc.c); - return ohlc; - } - }, { - key: "handleRangeDataFormat", - value: function handleRangeDataFormat(format, ser, i) { - var rangeStart = []; - var rangeEnd = []; - var err = 'Please provide [Start, End] values in valid format. Read more https://apexcharts.com/docs/series/#rangecharts'; - var serObj = new Series(this.ctx); - var activeIndex = serObj.getActiveConfigSeriesIndex(); - - if (format === 'array') { - if (ser[activeIndex].data[0][1].length !== 2) { - throw new Error(err); - } - - for (var j = 0; j < ser[i].data.length; j++) { - rangeStart.push(ser[i].data[j][1][0]); - rangeEnd.push(ser[i].data[j][1][1]); - } - } else if (format === 'xy') { - if (ser[activeIndex].data[0].y.length !== 2) { - throw new Error(err); - } - - for (var _j3 = 0; _j3 < ser[i].data.length; _j3++) { - rangeStart.push(ser[i].data[_j3].y[0]); - rangeEnd.push(ser[i].data[_j3].y[1]); - } - } - - return { - start: rangeStart, - end: rangeEnd - }; - } - }, { - key: "handleCandleStickDataFormat", - value: function handleCandleStickDataFormat(format, ser, i) { - var serO = []; - var serH = []; - var serL = []; - var serC = []; - var err = 'Please provide [Open, High, Low and Close] values in valid format. Read more https://apexcharts.com/docs/series/#candlestick'; - - if (format === 'array') { - if (ser[i].data[0][1].length !== 4) { - throw new Error(err); - } - - for (var j = 0; j < ser[i].data.length; j++) { - serO.push(ser[i].data[j][1][0]); - serH.push(ser[i].data[j][1][1]); - serL.push(ser[i].data[j][1][2]); - serC.push(ser[i].data[j][1][3]); - } - } else if (format === 'xy') { - if (ser[i].data[0].y.length !== 4) { - throw new Error(err); - } - - for (var _j4 = 0; _j4 < ser[i].data.length; _j4++) { - serO.push(ser[i].data[_j4].y[0]); - serH.push(ser[i].data[_j4].y[1]); - serL.push(ser[i].data[_j4].y[2]); - serC.push(ser[i].data[_j4].y[3]); - } - } - - return { - o: serO, - h: serH, - l: serL, - c: serC - }; - } - }, { - key: "parseDataAxisCharts", - value: function parseDataAxisCharts(ser) { - var ctx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.ctx; - var cnf = this.w.config; - var gl = this.w.globals; - var dt = new DateTime(ctx); - - for (var i = 0; i < ser.length; i++) { - this.twoDSeries = []; - this.twoDSeriesX = []; - this.threeDSeries = []; - - if (typeof ser[i].data === 'undefined') { - console.error("It is a possibility that you may have not included 'data' property in series."); - return; - } - - if (cnf.chart.type === 'rangeBar' || cnf.chart.type === 'rangeArea' || ser[i].type === 'rangeBar' || ser[i].type === 'rangeArea') { - gl.isRangeData = true; - this.handleRangeData(ser, i); - } - - if (this.isMultiFormat()) { - if (this.isFormat2DArray()) { - this.handleFormat2DArray(ser, i); - } else if (this.isFormatXY()) { - this.handleFormatXY(ser, i); - } - - if (cnf.chart.type === 'candlestick' || ser[i].type === 'candlestick') { - this.handleCandleStickData(ser, i); - } - - gl.series.push(this.twoDSeries); - gl.labels.push(this.twoDSeriesX); - gl.seriesX.push(this.twoDSeriesX); - - if (!this.fallbackToCategory) { - gl.isXNumeric = true; - } - } else { - if (cnf.xaxis.type === 'datetime') { - // user didn't supplied [{x,y}] or [[x,y]], but single array in data. - // Also labels/categories were supplied differently - gl.isXNumeric = true; - var dates = cnf.labels.length > 0 ? cnf.labels.slice() : cnf.xaxis.categories.slice(); - - for (var j = 0; j < dates.length; j++) { - if (typeof dates[j] === 'string') { - var isDate = dt.isValidDate(dates[j]); - - if (isDate) { - this.twoDSeriesX.push(dt.parseDate(dates[j])); - } else { - throw new Error('You have provided invalid Date format. Please provide a valid JavaScript Date'); - } - } - } - - gl.seriesX.push(this.twoDSeriesX); - } else if (cnf.xaxis.type === 'numeric') { - gl.isXNumeric = true; - var x = cnf.labels.length > 0 ? cnf.labels.slice() : cnf.xaxis.categories.slice(); - - if (x.length > 0) { - this.twoDSeriesX = x; - gl.seriesX.push(this.twoDSeriesX); - } - } - - gl.labels.push(this.twoDSeriesX); - var singleArray = ser[i].data.map(function (d) { - return Utils.parseNumber(d); - }); - gl.series.push(singleArray); - } - - gl.seriesZ.push(this.threeDSeries); - - if (ser[i].name !== undefined) { - gl.seriesNames.push(ser[i].name); - } else { - gl.seriesNames.push('series-' + parseInt(i + 1)); - } - } - - return this.w; - } - }, { - key: "parseDataNonAxisCharts", - value: function parseDataNonAxisCharts(ser) { - var gl = this.w.globals; - var cnf = this.w.config; - gl.series = ser.slice(); - gl.seriesNames = cnf.labels.slice(); - - for (var i = 0; i < gl.series.length; i++) { - if (gl.seriesNames[i] === undefined) { - gl.seriesNames.push('series-' + (i + 1)); - } - } - - return this.w; - } - /** User possibly set string categories in xaxis.categories or labels prop - * Or didn't set xaxis labels at all - in which case we manually do it. - * If user passed series data as [[3, 2], [4, 5]] or [{ x: 3, y: 55 }], - * this shouldn't be called - * @param {array} ser - the series which user passed to the config - */ - - }, { - key: "handleExternalLabelsData", - value: function handleExternalLabelsData(ser) { - var cnf = this.w.config; - var gl = this.w.globals; - - if (cnf.xaxis.categories.length > 0) { - // user provided labels in xaxis.category prop - gl.labels = cnf.xaxis.categories; - } else if (cnf.labels.length > 0) { - // user provided labels in labels props - gl.labels = cnf.labels.slice(); - } else if (this.fallbackToCategory) { - // user provided labels in x prop in [{ x: 3, y: 55 }] data, and those labels are already stored in gl.labels[0], so just re-arrange the gl.labels array - gl.labels = gl.labels[0]; - } else { - // user didn't provided any labels, fallback to 1-2-3-4-5 - var labelArr = []; - - if (gl.axisCharts) { - // for axis charts, we get the longest series and create labels from it - for (var i = 0; i < gl.series[gl.maxValsInArrayIndex].length; i++) { - labelArr.push(i + 1); - } // create gl.seriesX as it will be used in calculations of x positions - - - for (var _i = 0; _i < ser.length; _i++) { - gl.seriesX.push(labelArr); - } // turn on the isXNumeric flag to allow minX and maxX to function properly - - - gl.isXNumeric = true; - } // no series to pull labels from, put a 0-10 series - // possibly, user collapsed all series. Hence we can't work with above calc - - - if (labelArr.length === 0) { - labelArr = [0, 10]; - - for (var _i2 = 0; _i2 < ser.length; _i2++) { - gl.seriesX.push(labelArr); - } - } // Finally, pass the labelArr in gl.labels which will be printed on x-axis - - - gl.labels = labelArr; // Turn on this global flag to indicate no labels were provided by user - - gl.noLabelsProvided = true; - } - } // Segregate user provided data into appropriate vars - - }, { - key: "parseData", - value: function parseData(ser) { - var w = this.w; - var cnf = w.config; - var gl = w.globals; - this.excludeCollapsedSeriesInYAxis(); // If we detected string in X prop of series, we fallback to category x-axis - - this.fallbackToCategory = false; - this.resetGlobals(); - this.isMultipleY(); - - if (gl.axisCharts) { - // axisCharts includes line / area / column / scatter - this.parseDataAxisCharts(ser); - } else { - // non-axis charts are pie / donut - this.parseDataNonAxisCharts(ser); - } - - this.coreUtils.getLargestSeries(); // set Null values to 0 in all series when user hides/shows some series - - if (cnf.chart.type === 'bar' && cnf.chart.stacked) { - var series = new Series(this.ctx); - gl.series = series.setNullSeriesToZeroValues(gl.series); - } - - this.coreUtils.getSeriesTotals(); - - if (gl.axisCharts) { - this.coreUtils.getStackedSeriesTotals(); - } - - this.coreUtils.getPercentSeries(); - - if (!gl.dataFormatXNumeric && (!gl.isXNumeric || cnf.xaxis.type === 'numeric' && cnf.labels.length === 0 && cnf.xaxis.categories.length === 0)) { - // x-axis labels couldn't be detected; hence try searching every option in config - this.handleExternalLabelsData(ser); - } - } - }, { - key: "xySettings", - value: function xySettings() { - var xyRatios = null; - var w = this.w; - - if (w.globals.axisCharts) { - if (w.config.xaxis.crosshairs.position === 'back') { - var crosshairs = new Crosshairs(this.ctx); - crosshairs.drawXCrosshairs(); - } - - if (w.config.yaxis[0].crosshairs.position === 'back') { - var _crosshairs = new Crosshairs(this.ctx); - - _crosshairs.drawYCrosshairs(); - } - - xyRatios = this.coreUtils.getCalculatedRatios(); - - if (w.config.xaxis.type === 'datetime' && w.config.xaxis.labels.formatter === undefined) { - var ts = new TimeScale(this.ctx); - var formattedTimeScale; - - if (isFinite(w.globals.minX) && isFinite(w.globals.maxX) && !w.globals.isBarHorizontal) { - formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minX, w.globals.maxX); - ts.recalcDimensionsBasedOnFormat(formattedTimeScale, false); - } else if (w.globals.isBarHorizontal) { - formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minY, w.globals.maxY); - ts.recalcDimensionsBasedOnFormat(formattedTimeScale, true); - } - } - } - - return xyRatios; - } - }, { - key: "drawAxis", - value: function drawAxis(type, xyRatios) { - var gl = this.w.globals; - var cnf = this.w.config; - var xAxis = new XAxis(this.ctx); - var yAxis = new YAxis(this.ctx); - - if (gl.axisCharts && type !== 'radar') { - var elXaxis, elYaxis; - - if (gl.isBarHorizontal) { - elYaxis = yAxis.drawYaxisInversed(0); - elXaxis = xAxis.drawXaxisInversed(0); - gl.dom.elGraphical.add(elXaxis); - gl.dom.elGraphical.add(elYaxis); - } else { - elXaxis = xAxis.drawXaxis(); - gl.dom.elGraphical.add(elXaxis); - cnf.yaxis.map(function (yaxe, index) { - if (gl.ignoreYAxisIndexes.indexOf(index) === -1) { - elYaxis = yAxis.drawYaxis(index); - gl.dom.Paper.add(elYaxis); - } - }); - } - } - - cnf.yaxis.map(function (yaxe, index) { - if (gl.ignoreYAxisIndexes.indexOf(index) === -1) { - yAxis.yAxisTitleRotate(index, yaxe.opposite); - } - }); - } - }, { - key: "setupBrushHandler", - value: function setupBrushHandler() { - var _this3 = this; - - var w = this.w; // only for brush charts - - if (!w.config.chart.brush.enabled) { - return; - } // if user has not defined a custom function for selection - we handle the brush chart - // otherwise we leave it to the user to define the functionality for selection - - - if (typeof w.config.chart.events.selection !== 'function') { - var targets = w.config.chart.brush.targets || [w.config.chart.brush.target]; // retro compatibility with single target option - - targets.forEach(function (target) { - var targetChart = ApexCharts.getChartByID(target); - targetChart.w.globals.brushSource = _this3.ctx; - - var updateSourceChart = function updateSourceChart() { - _this3.ctx._updateOptions({ - chart: { - selection: { - xaxis: { - min: targetChart.w.globals.minX, - max: targetChart.w.globals.maxX - } - } - } - }, false, false); - }; - - if (typeof targetChart.w.config.chart.events.zoomed !== 'function') { - targetChart.w.config.chart.events.zoomed = function () { - updateSourceChart(); - }; - } - - if (typeof targetChart.w.config.chart.events.scrolled !== 'function') { - targetChart.w.config.chart.events.scrolled = function () { - updateSourceChart(); - }; - } - - w.config.chart.events.selection = function (chart, e) { - var yaxis = Utils.clone(w.config.yaxis); - - if (w.config.chart.brush.autoScaleYaxis) { - var scale = new Range(targetChart); - yaxis = scale.autoScaleY(targetChart, e); - } - - targetChart._updateOptions({ - xaxis: { - min: e.xaxis.min, - max: e.xaxis.max - }, - yaxis: yaxis - }, false, false, false); - }; - }); - } - } - }]); - - return Core; -}(); - -/** - * @this {Promise} - */ -function finallyConstructor(callback) { - var constructor = this.constructor; - return this.then( - function(value) { - return constructor.resolve(callback()).then(function() { - return value; - }); - }, - function(reason) { - return constructor.resolve(callback()).then(function() { - return constructor.reject(reason); - }); - } - ); -} - -// Store setTimeout reference so promise-polyfill will be unaffected by -// other code modifying setTimeout (like sinon.useFakeTimers()) -var setTimeoutFunc = setTimeout; - -function noop() {} - -// Polyfill for Function.prototype.bind -function bind(fn, thisArg) { - return function() { - fn.apply(thisArg, arguments); - }; -} - -/** - * @constructor - * @param {Function} fn - */ -function Promise$1(fn) { - if (!(this instanceof Promise$1)) - throw new TypeError('Promises must be constructed via new'); - if (typeof fn !== 'function') throw new TypeError('not a function'); - /** @type {!number} */ - this._state = 0; - /** @type {!boolean} */ - this._handled = false; - /** @type {Promise|undefined} */ - this._value = undefined; - /** @type {!Array} */ - this._deferreds = []; - - doResolve(fn, this); -} - -function handle(self, deferred) { - while (self._state === 3) { - self = self._value; - } - if (self._state === 0) { - self._deferreds.push(deferred); - return; - } - self._handled = true; - Promise$1._immediateFn(function() { - var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected; - if (cb === null) { - (self._state === 1 ? resolve : reject)(deferred.promise, self._value); - return; - } - var ret; - try { - ret = cb(self._value); - } catch (e) { - reject(deferred.promise, e); - return; - } - resolve(deferred.promise, ret); - }); -} - -function resolve(self, newValue) { - try { - // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure - if (newValue === self) - throw new TypeError('A promise cannot be resolved with itself.'); - if ( - newValue && - (typeof newValue === 'object' || typeof newValue === 'function') - ) { - var then = newValue.then; - if (newValue instanceof Promise$1) { - self._state = 3; - self._value = newValue; - finale(self); - return; - } else if (typeof then === 'function') { - doResolve(bind(then, newValue), self); - return; - } - } - self._state = 1; - self._value = newValue; - finale(self); - } catch (e) { - reject(self, e); - } -} - -function reject(self, newValue) { - self._state = 2; - self._value = newValue; - finale(self); -} - -function finale(self) { - if (self._state === 2 && self._deferreds.length === 0) { - Promise$1._immediateFn(function() { - if (!self._handled) { - Promise$1._unhandledRejectionFn(self._value); - } - }); - } - - for (var i = 0, len = self._deferreds.length; i < len; i++) { - handle(self, self._deferreds[i]); - } - self._deferreds = null; -} - -/** - * @constructor - */ -function Handler(onFulfilled, onRejected, promise) { - this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; - this.onRejected = typeof onRejected === 'function' ? onRejected : null; - this.promise = promise; -} - -/** - * Take a potentially misbehaving resolver function and make sure - * onFulfilled and onRejected are only called once. - * - * Makes no guarantees about asynchrony. - */ -function doResolve(fn, self) { - var done = false; - try { - fn( - function(value) { - if (done) return; - done = true; - resolve(self, value); - }, - function(reason) { - if (done) return; - done = true; - reject(self, reason); - } - ); - } catch (ex) { - if (done) return; - done = true; - reject(self, ex); - } -} - -Promise$1.prototype['catch'] = function(onRejected) { - return this.then(null, onRejected); -}; - -Promise$1.prototype.then = function(onFulfilled, onRejected) { - // @ts-ignore - var prom = new this.constructor(noop); - - handle(this, new Handler(onFulfilled, onRejected, prom)); - return prom; -}; - -Promise$1.prototype['finally'] = finallyConstructor; - -Promise$1.all = function(arr) { - return new Promise$1(function(resolve, reject) { - if (!arr || typeof arr.length === 'undefined') - throw new TypeError('Promise.all accepts an array'); - var args = Array.prototype.slice.call(arr); - if (args.length === 0) return resolve([]); - var remaining = args.length; - - function res(i, val) { - try { - if (val && (typeof val === 'object' || typeof val === 'function')) { - var then = val.then; - if (typeof then === 'function') { - then.call( - val, - function(val) { - res(i, val); - }, - reject - ); - return; - } - } - args[i] = val; - if (--remaining === 0) { - resolve(args); - } - } catch (ex) { - reject(ex); - } - } - - for (var i = 0; i < args.length; i++) { - res(i, args[i]); - } - }); -}; - -Promise$1.resolve = function(value) { - if (value && typeof value === 'object' && value.constructor === Promise$1) { - return value; - } - - return new Promise$1(function(resolve) { - resolve(value); - }); -}; - -Promise$1.reject = function(value) { - return new Promise$1(function(resolve, reject) { - reject(value); - }); -}; - -Promise$1.race = function(values) { - return new Promise$1(function(resolve, reject) { - for (var i = 0, len = values.length; i < len; i++) { - values[i].then(resolve, reject); - } - }); -}; - -// Use polyfill for setImmediate for performance gains -Promise$1._immediateFn = - (typeof setImmediate === 'function' && - function(fn) { - setImmediate(fn); - }) || - function(fn) { - setTimeoutFunc(fn, 0); - }; - -Promise$1._unhandledRejectionFn = function _unhandledRejectionFn(err) { - if (typeof console !== 'undefined' && console) { - console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console - } -}; - -var Exports = -/*#__PURE__*/ -function () { - function Exports(ctx) { - _classCallCheck(this, Exports); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Exports, [{ - key: "getSvgString", - value: function getSvgString() { - return this.w.globals.dom.Paper.svg(); - } - }, { - key: "cleanup", - value: function cleanup() { - var w = this.w; // hide some elements to avoid printing them on exported svg - - var xcrosshairs = w.globals.dom.baseEl.querySelector('.apexcharts-xcrosshairs'); - var ycrosshairs = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs'); - - if (xcrosshairs) { - xcrosshairs.setAttribute('x', -500); - } - - if (ycrosshairs) { - ycrosshairs.setAttribute('y1', -100); - ycrosshairs.setAttribute('y2', -100); - } - } - }, { - key: "svgUrl", - value: function svgUrl() { - this.cleanup(); - var svgData = this.getSvgString(); - var svgBlob = new Blob([svgData], { - type: 'image/svg+xml;charset=utf-8' - }); - return URL.createObjectURL(svgBlob); - } - }, { - key: "dataURI", - value: function dataURI() { - var _this = this; - - return new Promise$1(function (resolve) { - var w = _this.w; - - _this.cleanup(); - - var canvas = document.createElement('canvas'); - canvas.width = w.globals.svgWidth; - canvas.height = w.globals.svgHeight; - var canvasBg = w.config.chart.background === 'transparent' ? '#fff' : w.config.chart.background; - var ctx = canvas.getContext('2d'); - ctx.fillStyle = canvasBg; - ctx.fillRect(0, 0, canvas.width, canvas.height); - var DOMURL = window.URL || window.webkitURL || window; - var img = new Image(); - img.crossOrigin = 'anonymous'; - - var svgData = _this.getSvgString(); - - var svgUrl = 'data:image/svg+xml,' + encodeURIComponent(svgData); - - img.onload = function () { - ctx.drawImage(img, 0, 0); - DOMURL.revokeObjectURL(svgUrl); - var imgURI = canvas.toDataURL('image/png'); - resolve(imgURI); - }; - - img.src = svgUrl; - }); - } - }, { - key: "exportToSVG", - value: function exportToSVG() { - this.triggerDownload(this.svgUrl(), '.svg'); - } - }, { - key: "exportToPng", - value: function exportToPng() { - var _this2 = this; - - this.dataURI().then(function (imgURI) { - _this2.triggerDownload(imgURI, '.png'); - }); - } - }, { - key: "triggerDownload", - value: function triggerDownload(href, ext) { - var downloadLink = document.createElement('a'); - downloadLink.href = href; - downloadLink.download = this.w.globals.chartID + ext; - document.body.appendChild(downloadLink); - downloadLink.click(); - document.body.removeChild(downloadLink); - } - }]); - - return Exports; -}(); - -/** - * ApexCharts Grid Class for drawing Cartesian Grid. - * - * @module Grid - **/ - -var Grid = -/*#__PURE__*/ -function () { - function Grid(ctx) { - _classCallCheck(this, Grid); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.anim = new Animations(this.ctx); - this.xaxisLabels = w.globals.labels.slice(); - this.animX = w.config.grid.xaxis.lines.animate && w.config.chart.animations.enabled; - this.animY = w.config.grid.yaxis.lines.animate && w.config.chart.animations.enabled; - - if (w.globals.timelineLabels.length > 0) { - // timeline labels are there - this.xaxisLabels = w.globals.timelineLabels.slice(); - } - } // .when using sparklines or when showing no grid, we need to have a grid area which is reused at many places for other calculations as well - - - _createClass(Grid, [{ - key: "drawGridArea", - value: function drawGridArea() { - var elGrid = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var w = this.w; - var graphics = new Graphics(this.ctx); - - if (elGrid === null) { - elGrid = graphics.group({ - class: 'apexcharts-grid' - }); - } - - var elVerticalLine = graphics.drawLine(w.globals.padHorizontal, 1, w.globals.padHorizontal, w.globals.gridHeight, 'transparent'); - var elHorzLine = graphics.drawLine(w.globals.padHorizontal, w.globals.gridHeight, w.globals.gridWidth, w.globals.gridHeight, 'transparent'); - elGrid.add(elHorzLine); - elGrid.add(elVerticalLine); - return elGrid; - } - }, { - key: "drawGrid", - value: function drawGrid() { - var w = this.w; - var xAxis = new XAxis(this.ctx); - var yaxis = new YAxis(this.ctx); - var gl = this.w.globals; - var elgrid = null; - - if (gl.axisCharts) { - if (w.config.grid.show) { - // grid is drawn after xaxis and yaxis are drawn - elgrid = this.renderGrid(); - gl.dom.elGraphical.add(elgrid.el); - this.drawGridArea(elgrid.el); - } else { - var elgridArea = this.drawGridArea(); - gl.dom.elGraphical.add(elgridArea); - } - - if (elgrid !== null) { - xAxis.xAxisLabelCorrections(elgrid.xAxisTickWidth); - } - - yaxis.setYAxisTextAlignments(); - } - } // This mask will clip off overflowing graphics from the drawable area - - }, { - key: "createGridMask", - value: function createGridMask() { - var w = this.w; - var gl = w.globals; - var graphics = new Graphics(this.ctx); - var strokeSize = Array.isArray(w.config.stroke.width) ? 0 : w.config.stroke.width; - - if (Array.isArray(w.config.stroke.width)) { - var strokeMaxSize = 0; - w.config.stroke.width.forEach(function (m) { - strokeMaxSize = Math.max(strokeMaxSize, m); - }); - strokeSize = strokeMaxSize; - } - - gl.dom.elGridRectMask = document.createElementNS(gl.SVGNS, 'clipPath'); - gl.dom.elGridRectMask.setAttribute('id', "gridRectMask".concat(gl.cuid)); - gl.dom.elGridRectMarkerMask = document.createElementNS(gl.SVGNS, 'clipPath'); - gl.dom.elGridRectMarkerMask.setAttribute('id', "gridRectMarkerMask".concat(gl.cuid)); - gl.dom.elGridRect = graphics.drawRect(-strokeSize / 2, -strokeSize / 2, gl.gridWidth + strokeSize, gl.gridHeight + strokeSize, 0, '#fff'); - var coreUtils = new CoreUtils(this); - coreUtils.getLargestMarkerSize(); - var markerSize = w.globals.markers.largestSize + 1; - gl.dom.elGridRectMarker = graphics.drawRect(-markerSize, -markerSize, gl.gridWidth + markerSize * 2, gl.gridHeight + markerSize * 2, 0, '#fff'); - gl.dom.elGridRectMask.appendChild(gl.dom.elGridRect.node); - gl.dom.elGridRectMarkerMask.appendChild(gl.dom.elGridRectMarker.node); - var defs = gl.dom.baseEl.querySelector('defs'); - defs.appendChild(gl.dom.elGridRectMask); - defs.appendChild(gl.dom.elGridRectMarkerMask); - } // actual grid rendering - - }, { - key: "renderGrid", - value: function renderGrid() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var strokeDashArray = w.config.grid.strokeDashArray; - var elg = graphics.group({ - class: 'apexcharts-grid' - }); - var elgridLinesH = graphics.group({ - class: 'apexcharts-gridlines-horizontal' - }); - var elgridLinesV = graphics.group({ - class: 'apexcharts-gridlines-vertical' - }); - elg.add(elgridLinesH); - elg.add(elgridLinesV); - var tickAmount = 8; - - for (var i = 0; i < w.globals.series.length; i++) { - if (typeof w.globals.yAxisScale[i] !== 'undefined') { - tickAmount = w.globals.yAxisScale[i].result.length - 1; - } - - if (tickAmount > 2) break; - } - - var xCount; - - if (!w.globals.isBarHorizontal) { - xCount = this.xaxisLabels.length; // draw vertical lines - - if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) { - var x1 = w.globals.padHorizontal; - var y1 = 0; - var x2; - var y2 = w.globals.gridHeight; - - if (w.globals.timelineLabels.length > 0) { - for (var _i = 0; _i < xCount; _i++) { - x1 = this.xaxisLabels[_i].position; - x2 = this.xaxisLabels[_i].position; - - if (w.config.grid.xaxis.lines.show && x1 > 0 && x1 < w.globals.gridWidth) { - var line = graphics.drawLine(x1, y1, x2, y2, w.config.grid.borderColor, strokeDashArray); - line.node.classList.add('apexcharts-gridline'); - elgridLinesV.add(line); - - if (this.animX) { - this.animateLine(line, { - x1: 0, - x2: 0 - }, { - x1: x1, - x2: x2 - }); - } - } - - var xAxis = new XAxis(this.ctx); - - if (_i === xCount - 1) { - if (!w.globals.skipLastTimelinelabel) { - // skip drawing last label here - xAxis.drawXaxisTicks(x1, elg); - } - } else { - xAxis.drawXaxisTicks(x1, elg); - } - } - } else { - var xCountForCategoryCharts = xCount; - - for (var _i2 = 0; _i2 < xCountForCategoryCharts; _i2++) { - var x1Count = xCountForCategoryCharts; - - if (w.globals.isXNumeric && w.config.chart.type !== 'bar') { - x1Count -= 1; - } - - x1 = x1 + w.globals.gridWidth / x1Count; - x2 = x1; // skip the last line - - if (_i2 === x1Count - 1) break; - - if (w.config.grid.xaxis.lines.show) { - var _line = graphics.drawLine(x1, y1, x2, y2, w.config.grid.borderColor, strokeDashArray); - - _line.node.classList.add('apexcharts-gridline'); - - elgridLinesV.add(_line); - - if (this.animX) { - this.animateLine(_line, { - x1: 0, - x2: 0 - }, { - x1: x1, - x2: x2 - }); - } - } - - var _xAxis = new XAxis(this.ctx); - - _xAxis.drawXaxisTicks(x1, elg); - } - } - } // draw horizontal lines - - - if (w.config.grid.yaxis.lines.show) { - var _x = 0; - var _y = 0; - var _y2 = 0; - var _x2 = w.globals.gridWidth; - - for (var _i3 = 0; _i3 < tickAmount + 1; _i3++) { - var _line2 = graphics.drawLine(_x, _y, _x2, _y2, w.config.grid.borderColor, strokeDashArray); - - elgridLinesH.add(_line2); - - _line2.node.classList.add('apexcharts-gridline'); - - if (this.animY) { - this.animateLine(_line2, { - y1: _y + 20, - y2: _y2 + 20 - }, { - y1: _y, - y2: _y2 - }); - } - - _y = _y + w.globals.gridHeight / tickAmount; - _y2 = _y; - } - } - } else { - xCount = tickAmount; // draw vertical lines - - if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) { - var _x3 = w.globals.padHorizontal; - var _y3 = 0; - - var _x4; - - var _y4 = w.globals.gridHeight; - - for (var _i4 = 0; _i4 < xCount + 1; _i4++) { - _x3 = _x3 + w.globals.gridWidth / xCount + 0.3; - _x4 = _x3; // skip the last vertical line - - if (_i4 === xCount - 1) break; - - if (w.config.grid.xaxis.lines.show) { - var _line3 = graphics.drawLine(_x3, _y3, _x4, _y4, w.config.grid.borderColor, strokeDashArray); - - _line3.node.classList.add('apexcharts-gridline'); - - elgridLinesV.add(_line3); - - if (this.animX) { - this.animateLine(_line3, { - x1: 0, - x2: 0 - }, { - x1: _x3, - x2: _x4 - }); - } - } // skip the first vertical line - - - var _xAxis2 = new XAxis(this.ctx); - - _xAxis2.drawXaxisTicks(_x3, elg); - } - } // draw horizontal lines - - - if (w.config.grid.yaxis.lines.show) { - var _x5 = 0; - var _y5 = 0; - var _y6 = 0; - var _x6 = w.globals.gridWidth; - - for (var _i5 = 0; _i5 < w.globals.dataPoints + 1; _i5++) { - var _line4 = graphics.drawLine(_x5, _y5, _x6, _y6, w.config.grid.borderColor, strokeDashArray); - - elgridLinesH.add(_line4); - - _line4.node.classList.add('apexcharts-gridline'); - - if (this.animY) { - this.animateLine(_line4, { - y1: _y5 + 20, - y2: _y6 + 20 - }, { - y1: _y5, - y2: _y6 - }); - } - - _y5 = _y5 + w.globals.gridHeight / w.globals.dataPoints; - _y6 = _y5; - } - } - } - - this.drawGridBands(elg, xCount, tickAmount); - return { - el: elg, - xAxisTickWidth: w.globals.gridWidth / xCount - }; - } - }, { - key: "drawGridBands", - value: function drawGridBands(elg, xCount, tickAmount) { - var w = this.w; - var graphics = new Graphics(this.ctx); // rows background bands - - if (w.config.grid.row.colors !== undefined && w.config.grid.row.colors.length > 0) { - var x1 = 0; - var y1 = 0; - var y2 = w.globals.gridHeight / tickAmount; - var x2 = w.globals.gridWidth; - - for (var i = 0, c = 0; i < tickAmount; i++, c++) { - if (c >= w.config.grid.row.colors.length) { - c = 0; - } - - var color = w.config.grid.row.colors[c]; - var rect = graphics.drawRect(x1, y1, x2, y2, 0, color, w.config.grid.row.opacity); - elg.add(rect); - rect.node.classList.add('apexcharts-gridRow'); - y1 = y1 + w.globals.gridHeight / tickAmount; - } - } // columns background bands - - - if (w.config.grid.column.colors !== undefined && w.config.grid.column.colors.length > 0) { - var _x7 = w.globals.padHorizontal; - var _y7 = 0; - - var _x8 = w.globals.padHorizontal + w.globals.gridWidth / xCount; - - var _y8 = w.globals.gridHeight; - - for (var _i6 = 0, _c = 0; _i6 < xCount; _i6++, _c++) { - if (_c >= w.config.grid.column.colors.length) { - _c = 0; - } - - var _color = w.config.grid.column.colors[_c]; - - var _rect = graphics.drawRect(_x7, _y7, _x8, _y8, 0, _color, w.config.grid.column.opacity); - - _rect.node.classList.add('apexcharts-gridColumn'); - - elg.add(_rect); - _x7 = _x7 + w.globals.gridWidth / xCount; - } - } - } - }, { - key: "animateLine", - value: function animateLine(line, from, to) { - var w = this.w; - var initialAnim = w.config.chart.animations; - - if (initialAnim && !w.globals.resized && !w.globals.dataChanged) { - var speed = initialAnim.speed; - this.anim.animateLine(line, from, to, speed); - } - } - }]); - - return Grid; -}(); - -/** - * ApexCharts Legend Class to draw legend. - * - * @module Legend - **/ - -var Legend = -/*#__PURE__*/ -function () { - function Legend(ctx, opts) { - _classCallCheck(this, Legend); - - this.ctx = ctx; - this.w = ctx.w; - this.onLegendClick = this.onLegendClick.bind(this); - this.onLegendHovered = this.onLegendHovered.bind(this); - } - - _createClass(Legend, [{ - key: "init", - value: function init() { - var w = this.w; - var gl = w.globals; - var cnf = w.config; - var showLegendAlways = cnf.legend.showForSingleSeries && gl.series.length === 1 || gl.series.length > 1; - - if ((showLegendAlways || !gl.axisCharts) && cnf.legend.show) { - while (gl.dom.elLegendWrap.firstChild) { - gl.dom.elLegendWrap.removeChild(gl.dom.elLegendWrap.firstChild); - } - - this.drawLegends(); - - if (!Utils.isIE11()) { - this.appendToForeignObject(); - } else { - // IE11 doesn't supports foreignObject, hence append it to - document.getElementsByTagName('head')[0].appendChild(this.getLegendStyles()); - } - - if (cnf.legend.position === 'bottom' || cnf.legend.position === 'top') { - this.legendAlignHorizontal(); - } else if (cnf.legend.position === 'right' || cnf.legend.position === 'left') { - this.legendAlignVertical(); - } - } - } - }, { - key: "appendToForeignObject", - value: function appendToForeignObject() { - var gl = this.w.globals; - var elForeign = document.createElementNS(gl.SVGNS, 'foreignObject'); - elForeign.setAttribute('x', 0); - elForeign.setAttribute('y', 0); - elForeign.setAttribute('width', gl.svgWidth); - elForeign.setAttribute('height', gl.svgHeight); - gl.dom.elLegendWrap.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml'); - elForeign.appendChild(gl.dom.elLegendWrap); - elForeign.appendChild(this.getLegendStyles()); - gl.dom.Paper.node.insertBefore(elForeign, gl.dom.elGraphical.node); - } - }, { - key: "drawLegends", - value: function drawLegends() { - var self = this; - var w = this.w; - var fontFamily = w.config.legend.fontFamily; - var legendNames = w.globals.seriesNames; - var fillcolor = w.globals.colors.slice(); - - if (w.config.chart.type === 'heatmap') { - var ranges = w.config.plotOptions.heatmap.colorScale.ranges; - legendNames = ranges.map(function (colorScale) { - return colorScale.name ? colorScale.name : colorScale.from + ' - ' + colorScale.to; - }); - fillcolor = ranges.map(function (color) { - return color.color; - }); - } - - var legendFormatter = w.globals.legendFormatter; - - for (var i = 0; i <= legendNames.length - 1; i++) { - var text = legendFormatter(legendNames[i], { - seriesIndex: i, - w: w - }); - var collapsedSeries = false; - var ancillaryCollapsedSeries = false; - - if (w.globals.collapsedSeries.length > 0) { - for (var c = 0; c < w.globals.collapsedSeries.length; c++) { - if (w.globals.collapsedSeries[c].index === i) { - collapsedSeries = true; - } - } - } - - if (w.globals.ancillaryCollapsedSeriesIndices.length > 0) { - for (var _c = 0; _c < w.globals.ancillaryCollapsedSeriesIndices.length; _c++) { - if (w.globals.ancillaryCollapsedSeriesIndices[_c] === i) { - ancillaryCollapsedSeries = true; - } - } - } - - var elMarker = document.createElement('span'); - elMarker.classList.add('apexcharts-legend-marker'); - var mOffsetX = w.config.legend.markers.offsetX; - var mOffsetY = w.config.legend.markers.offsetY; - var mHeight = w.config.legend.markers.height; - var mWidth = w.config.legend.markers.width; - var mBorderWidth = w.config.legend.markers.strokeWidth; - var mBorderColor = w.config.legend.markers.strokeColor; - var mBorderRadius = w.config.legend.markers.radius; - var mStyle = elMarker.style; - mStyle.background = fillcolor[i]; - mStyle.color = fillcolor[i]; - mStyle.height = Array.isArray(mHeight) ? parseFloat(mHeight[i]) + 'px' : parseFloat(mHeight) + 'px'; - mStyle.width = Array.isArray(mWidth) ? parseFloat(mWidth[i]) + 'px' : parseFloat(mWidth) + 'px'; - mStyle.left = Array.isArray(mOffsetX) ? mOffsetX[i] : mOffsetX; - mStyle.top = Array.isArray(mOffsetY) ? mOffsetY[i] : mOffsetY; - mStyle.borderWidth = Array.isArray(mBorderWidth) ? mBorderWidth[i] : mBorderWidth; - mStyle.borderColor = Array.isArray(mBorderColor) ? mBorderColor[i] : mBorderColor; - mStyle.borderRadius = Array.isArray(mBorderRadius) ? parseFloat(mBorderRadius[i]) + 'px' : parseFloat(mBorderRadius) + 'px'; - - if (w.config.legend.markers.customHTML) { - if (Array.isArray(w.config.legend.markers.customHTML)) { - elMarker.innerHTML = w.config.legend.markers.customHTML[i](); - } else { - elMarker.innerHTML = w.config.legend.markers.customHTML(); - } - } - - Graphics.setAttrs(elMarker, { - rel: i + 1, - 'data:collapsed': collapsedSeries || ancillaryCollapsedSeries - }); - - if (collapsedSeries || ancillaryCollapsedSeries) { - elMarker.classList.add('inactive-legend'); - } - - var elLegend = document.createElement('div'); - var elLegendText = document.createElement('span'); - elLegendText.classList.add('apexcharts-legend-text'); - elLegendText.innerHTML = text; - var textColor = w.config.legend.labels.useSeriesColors ? w.globals.colors[i] : w.config.legend.labels.colors; - - if (!textColor) { - textColor = w.config.chart.foreColor; - } - - elLegendText.style.color = textColor; - elLegendText.style.fontSize = parseFloat(w.config.legend.fontSize) + 'px'; - elLegendText.style.fontFamily = fontFamily || w.config.chart.fontFamily; - Graphics.setAttrs(elLegendText, { - rel: i + 1, - 'data:collapsed': collapsedSeries || ancillaryCollapsedSeries - }); - elLegend.appendChild(elMarker); - elLegend.appendChild(elLegendText); - var coreUtils = new CoreUtils(this.ctx); - - if (!w.config.legend.showForZeroSeries) { - var total = coreUtils.getSeriesTotalByIndex(i); - - if (total === 0 && coreUtils.seriesHaveSameValues(i) && !coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) { - elLegend.classList.add('apexcharts-hidden-zero-series'); - } - } - - if (!w.config.legend.showForNullSeries) { - if (coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) { - elLegend.classList.add('apexcharts-hidden-null-series'); - } - } - - w.globals.dom.elLegendWrap.appendChild(elLegend); - w.globals.dom.elLegendWrap.classList.add(w.config.legend.horizontalAlign); // w.globals.dom.elLegendWrap.classList.add(w.config.legend.verticalAlign) - - w.globals.dom.elLegendWrap.classList.add('position-' + w.config.legend.position); - elLegend.classList.add('apexcharts-legend-series'); - elLegend.style.margin = "".concat(w.config.legend.itemMargin.horizontal, "px ").concat(w.config.legend.itemMargin.vertical, "px"); - w.globals.dom.elLegendWrap.style.width = w.config.legend.width ? w.config.legend.width + 'px' : ''; - w.globals.dom.elLegendWrap.style.height = w.config.legend.height ? w.config.legend.height + 'px' : ''; - Graphics.setAttrs(elLegend, { - rel: i + 1, - 'data:collapsed': collapsedSeries || ancillaryCollapsedSeries - }); - - if (collapsedSeries || ancillaryCollapsedSeries) { - elLegend.classList.add('inactive-legend'); - } - - if (!w.config.legend.onItemClick.toggleDataSeries) { - elLegend.classList.add('no-click'); - } - } // for now - just prevent click on heatmap legend - and allow hover only - - - var clickAllowed = w.config.chart.type !== 'heatmap'; - - if (clickAllowed && w.config.legend.onItemClick.toggleDataSeries) { - w.globals.dom.elWrap.addEventListener('click', self.onLegendClick, true); - } - - if (w.config.legend.onItemHover.highlightDataSeries) { - w.globals.dom.elWrap.addEventListener('mousemove', self.onLegendHovered, true); - w.globals.dom.elWrap.addEventListener('mouseout', self.onLegendHovered, true); - } - } - }, { - key: "getLegendBBox", - value: function getLegendBBox() { - var w = this.w; - var currLegendsWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); - var currLegendsWrapRect = currLegendsWrap.getBoundingClientRect(); - var currLegendsWrapWidth = currLegendsWrapRect.width; - var currLegendsWrapHeight = currLegendsWrapRect.height; - return { - clwh: currLegendsWrapHeight, - clww: currLegendsWrapWidth - }; - } - }, { - key: "setLegendWrapXY", - value: function setLegendWrapXY(offsetX, offsetY) { - var w = this.w; - var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); - var legendRect = elLegendWrap.getBoundingClientRect(); - var x = 0; - var y = 0; - - if (w.config.legend.position === 'bottom') { - y = y + (w.globals.svgHeight - legendRect.height / 2); - } else if (w.config.legend.position === 'top') { - var dim = new Dimensions(this.ctx); - var titleH = dim.getTitleSubtitleCoords('title').height; - var subtitleH = dim.getTitleSubtitleCoords('subtitle').height; - y = y + (titleH > 0 ? titleH - 10 : 0) + (subtitleH > 0 ? subtitleH - 10 : 0); - } - - elLegendWrap.style.position = 'absolute'; - x = x + offsetX + w.config.legend.offsetX; - y = y + offsetY + w.config.legend.offsetY; - elLegendWrap.style.left = x + 'px'; - elLegendWrap.style.top = y + 'px'; - - if (w.config.legend.position === 'bottom') { - elLegendWrap.style.top = 'auto'; - elLegendWrap.style.bottom = 10 + w.config.legend.offsetY + 'px'; - } else if (w.config.legend.position === 'right') { - elLegendWrap.style.left = 'auto'; - elLegendWrap.style.right = 25 + w.config.legend.offsetX + 'px'; - } - - if (elLegendWrap.style.width) { - elLegendWrap.style.width = parseInt(w.config.legend.width) + 'px'; - } - - if (elLegendWrap.style.height) { - elLegendWrap.style.height = parseInt(w.config.legend.height) + 'px'; - } - } - }, { - key: "legendAlignHorizontal", - value: function legendAlignHorizontal() { - var w = this.w; - var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); - elLegendWrap.style.right = 0; - var lRect = this.getLegendBBox(); - var dimensions = new Dimensions(this.ctx); - var titleRect = dimensions.getTitleSubtitleCoords('title'); - var subtitleRect = dimensions.getTitleSubtitleCoords('subtitle'); - var offsetX = 20; - var offsetY = 0; // the whole legend box is set to bottom - - if (w.config.legend.position === 'bottom') { - offsetY = -lRect.clwh / 1.8; - } else if (w.config.legend.position === 'top') { - offsetY = titleRect.height + subtitleRect.height + w.config.title.margin + w.config.subtitle.margin - 15; - } - - this.setLegendWrapXY(offsetX, offsetY); - } - }, { - key: "legendAlignVertical", - value: function legendAlignVertical() { - var w = this.w; - var lRect = this.getLegendBBox(); - var offsetY = 20; - var offsetX = 0; - - if (w.config.legend.position === 'left') { - offsetX = 20; - } - - if (w.config.legend.position === 'right') { - offsetX = w.globals.svgWidth - lRect.clww - 10; - } - - this.setLegendWrapXY(offsetX, offsetY); - } - }, { - key: "onLegendHovered", - value: function onLegendHovered(e) { - var w = this.w; - var hoverOverLegend = e.target.classList.contains('apexcharts-legend-text') || e.target.classList.contains('apexcharts-legend-marker'); - - if (w.config.chart.type !== 'heatmap') { - if (!e.target.classList.contains('inactive-legend') && hoverOverLegend) { - var series = new Series(this.ctx); - series.toggleSeriesOnHover(e, e.target); - } - } else { - // for heatmap handling - if (hoverOverLegend) { - var seriesCnt = parseInt(e.target.getAttribute('rel')) - 1; - this.ctx.fireEvent('legendHover', [this.ctx, seriesCnt, this.w]); - - var _series = new Series(this.ctx); - - _series.highlightRangeInSeries(e, e.target); - } - } - } - }, { - key: "onLegendClick", - value: function onLegendClick(e) { - if (e.target.classList.contains('apexcharts-legend-text') || e.target.classList.contains('apexcharts-legend-marker')) { - var seriesCnt = parseInt(e.target.getAttribute('rel')) - 1; - var isHidden = e.target.getAttribute('data:collapsed') === 'true'; - var legendClick = this.w.config.chart.events.legendClick; - - if (typeof legendClick === 'function') { - legendClick(this.ctx, seriesCnt, this.w); - } - - this.ctx.fireEvent('legendClick', [this.ctx, seriesCnt, this.w]); - var markerClick = this.w.config.legend.markers.onClick; - - if (typeof markerClick === 'function' && e.target.classList.contains('apexcharts-legend-marker')) { - markerClick(this.ctx, seriesCnt, this.w); - this.ctx.fireEvent('legendMarkerClick', [this.ctx, seriesCnt, this.w]); - } - - this.toggleDataSeries(seriesCnt, isHidden); - } - } - }, { - key: "getLegendStyles", - value: function getLegendStyles() { - var stylesheet = document.createElement('style'); - stylesheet.setAttribute('type', 'text/css'); - var text = "\n \n .apexcharts-legend {\n display: flex;\n overflow: auto;\n padding: 0 10px;\n }\n\n .apexcharts-legend.position-bottom, .apexcharts-legend.position-top {\n flex-wrap: wrap\n }\n .apexcharts-legend.position-right, .apexcharts-legend.position-left {\n flex-direction: column;\n bottom: 0;\n }\n\n .apexcharts-legend.position-bottom.left, .apexcharts-legend.position-top.left, .apexcharts-legend.position-right, .apexcharts-legend.position-left {\n justify-content: flex-start;\n }\n\n .apexcharts-legend.position-bottom.center, .apexcharts-legend.position-top.center {\n justify-content: center; \n }\n\n .apexcharts-legend.position-bottom.right, .apexcharts-legend.position-top.right {\n justify-content: flex-end;\n }\n\n .apexcharts-legend-series {\n cursor: pointer;\n line-height: normal;\n }\n\n .apexcharts-legend.position-bottom .apexcharts-legend-series, .apexcharts-legend.position-top .apexcharts-legend-series{\n display: flex;\n align-items: center;\n }\n\n .apexcharts-legend-text {\n position: relative;\n font-size: 14px;\n }\n\n .apexcharts-legend-text *, .apexcharts-legend-marker * {\n pointer-events: none;\n }\n\n .apexcharts-legend-marker {\n position: relative;\n display: inline-block;\n cursor: pointer;\n margin-right: 3px;\n }\n \n .apexcharts-legend.right .apexcharts-legend-series, .apexcharts-legend.left .apexcharts-legend-series{\n display: inline-block;\n }\n\n .apexcharts-legend-series.no-click {\n cursor: auto;\n }\n\n .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\n display: none !important;\n }\n\n .inactive-legend {\n opacity: 0.45;\n }"; - var rules = document.createTextNode(text); - stylesheet.appendChild(rules); - return stylesheet; - } - }, { - key: "resetToggleDataSeries", - value: function resetToggleDataSeries() { - var w = this.w; - var seriesEls = null; - var realIndexes = []; - - if (w.globals.axisCharts) { - seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:realIndex]"); - seriesEls = Utils.listToArray(seriesEls); - seriesEls.forEach(function (v) { - realIndexes.push(parseInt(v.getAttribute('data:realIndex'))); - }); - } else { - seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[rel]"); - seriesEls = Utils.listToArray(seriesEls); - seriesEls.forEach(function (v) { - realIndexes.push(parseInt(v.getAttribute('rel')) - 1); - }); - } - - realIndexes.sort(); - - if (w.globals.collapsedSeries.length > 0) { - var risingSeries = w.globals.risingSeries.slice(); - var series = w.config.series.slice(); - - for (var c = 0; c < w.globals.collapsedSeries.length; c++) { - var index = realIndexes.indexOf(w.globals.collapsedSeries[c].index); - - if (index !== -1) { - if (w.globals.axisCharts) { - series[index].data = w.globals.collapsedSeries.slice()[c].data.slice(); - } else { - series[index] = w.globals.collapsedSeries.slice()[c].data; - } - - risingSeries.push(index); - } - } - - w.globals.collapsedSeries = []; - w.globals.ancillaryCollapsedSeries = []; - w.globals.collapsedSeriesIndices = []; - w.globals.ancillaryCollapsedSeriesIndices = []; - w.globals.risingSeries = risingSeries; - w.config.series = series; - - this.ctx._updateSeries(w.config.series, w.config.chart.animations.dynamicAnimation.enabled); - } - } - }, { - key: "toggleDataSeries", - value: function toggleDataSeries(seriesCnt, isHidden) { - var w = this.w; - - if (w.globals.axisCharts || w.config.chart.type === 'radialBar') { - w.globals.resized = true; // we don't want initial animations again - - var seriesEl = null; - var realIndex = null; // yes, make it null. 1 series will rise at a time - - w.globals.risingSeries = []; - - if (w.globals.axisCharts) { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(seriesCnt, "']")); - realIndex = parseInt(seriesEl.getAttribute('data:realIndex')); - } else { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(seriesCnt + 1, "']")); - realIndex = parseInt(seriesEl.getAttribute('rel')) - 1; - } - - if (isHidden) { - this.riseCollapsedSeries(w.globals.collapsedSeries, w.globals.collapsedSeriesIndices, realIndex); - this.riseCollapsedSeries(w.globals.ancillaryCollapsedSeries, w.globals.ancillaryCollapsedSeriesIndices, realIndex); - } else { - if (w.globals.axisCharts) { - var shouldNotHideYAxis = false; - - if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].show && w.config.yaxis[realIndex].showAlways) { - shouldNotHideYAxis = true; - - if (w.globals.ancillaryCollapsedSeriesIndices.indexOf(realIndex) < 0) { - w.globals.ancillaryCollapsedSeries.push({ - index: realIndex, - data: w.config.series[realIndex].data.slice(), - type: seriesEl.parentNode.className.baseVal.split('-')[1] - }); - w.globals.ancillaryCollapsedSeriesIndices.push(realIndex); - } - } - - if (!shouldNotHideYAxis) { - w.globals.collapsedSeries.push({ - index: realIndex, - data: w.config.series[realIndex].data.slice(), - type: seriesEl.parentNode.className.baseVal.split('-')[1] - }); - w.globals.collapsedSeriesIndices.push(realIndex); - var removeIndexOfRising = w.globals.risingSeries.indexOf(realIndex); - w.globals.risingSeries.splice(removeIndexOfRising, 1); - } // TODO: AVOID mutating the user's config object below - - - w.config.series[realIndex].data = []; - } else { - w.globals.collapsedSeries.push({ - index: realIndex, - data: w.config.series[realIndex] - }); - w.globals.collapsedSeriesIndices.push(realIndex); - w.config.series[realIndex] = 0; - } - - var seriesChildren = seriesEl.childNodes; - - for (var sc = 0; sc < seriesChildren.length; sc++) { - if (seriesChildren[sc].classList.contains('apexcharts-series-markers-wrap')) { - if (seriesChildren[sc].classList.contains('apexcharts-hide')) { - seriesChildren[sc].classList.remove('apexcharts-hide'); - } else { - seriesChildren[sc].classList.add('apexcharts-hide'); - } - } - } - - w.globals.allSeriesCollapsed = w.globals.collapsedSeries.length === w.globals.series.length; - - this.ctx._updateSeries(w.config.series, w.config.chart.animations.dynamicAnimation.enabled); - } - } else { - // for non-axis charts i.e pie / donuts - var _seriesEl = w.globals.dom.Paper.select(" .apexcharts-series[rel='".concat(seriesCnt + 1, "'] path")); - - var type = w.config.chart.type; - - if (type === 'pie' || type === 'donut') { - var dataLabels = w.config.plotOptions.pie.donut.labels; - var graphics = new Graphics(this.ctx); - var pie = new Pie(this.ctx); - graphics.pathMouseDown(_seriesEl.members[0], null); - pie.printDataLabelsInner(_seriesEl.members[0].node, dataLabels); - } - - _seriesEl.fire('click'); - } - } - }, { - key: "riseCollapsedSeries", - value: function riseCollapsedSeries(series, seriesIndices, realIndex) { - var w = this.w; - - if (series.length > 0) { - for (var c = 0; c < series.length; c++) { - if (series[c].index === realIndex) { - if (w.globals.axisCharts) { - w.config.series[realIndex].data = series[c].data.slice(); - series.splice(c, 1); - seriesIndices.splice(c, 1); - w.globals.risingSeries.push(realIndex); - } else { - w.config.series[realIndex] = series[c].data; - series.splice(c, 1); - seriesIndices.splice(c, 1); - w.globals.risingSeries.push(realIndex); - } - - this.ctx._updateSeries(w.config.series, w.config.chart.animations.dynamicAnimation.enabled); - } - } - } - } - }]); - - return Legend; -}(); - -/** - * ApexCharts Responsive Class to override options for different screen sizes. - * - * @module Responsive - **/ - -var Responsive = -/*#__PURE__*/ -function () { - function Responsive(ctx) { - _classCallCheck(this, Responsive); - - this.ctx = ctx; - this.w = ctx.w; - } // the opts parameter if not null has to be set overriding everything - // as the opts is set by user externally - - - _createClass(Responsive, [{ - key: "checkResponsiveConfig", - value: function checkResponsiveConfig(opts) { - var _this = this; - - var w = this.w; - var cnf = w.config; // check if responsive config exists - - if (cnf.responsive.length === 0) return; - var res = cnf.responsive.slice(); - res.sort(function (a, b) { - return a.breakpoint > b.breakpoint ? 1 : b.breakpoint > a.breakpoint ? -1 : 0; - }).reverse(); - var config = new Config({}); - - var iterateResponsiveOptions = function iterateResponsiveOptions() { - var newOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var largestBreakpoint = res[0].breakpoint; - var width = window.innerWidth > 0 ? window.innerWidth : screen.width; - - if (width > largestBreakpoint) { - var options = CoreUtils.extendArrayProps(config, w.globals.initialConfig); - newOptions = Utils.extend(options, newOptions); - newOptions = Utils.extend(w.config, newOptions); - - _this.overrideResponsiveOptions(newOptions); - } else { - for (var i = 0; i < res.length; i++) { - if (width < res[i].breakpoint) { - newOptions = CoreUtils.extendArrayProps(config, res[i].options); - newOptions = Utils.extend(w.config, newOptions); - - _this.overrideResponsiveOptions(newOptions); - } - } - } - }; - - if (opts) { - var options = CoreUtils.extendArrayProps(config, opts); - options = Utils.extend(w.config, options); - options = Utils.extend(options, opts); - iterateResponsiveOptions(options); - } else { - iterateResponsiveOptions({}); - } - } - }, { - key: "overrideResponsiveOptions", - value: function overrideResponsiveOptions(newOptions) { - var newConfig = new Config(newOptions).init(); - this.w.config = newConfig; - } - }]); - - return Responsive; -}(); - -/** - * ApexCharts Theme Class for setting the colors and palettes. - * - * @module Theme - **/ - -var Theme = -/*#__PURE__*/ -function () { - function Theme(ctx) { - _classCallCheck(this, Theme); - - this.ctx = ctx; - this.w = ctx.w; - this.colors = []; - } - - _createClass(Theme, [{ - key: "init", - value: function init() { - this.setDefaultColors(); - } - }, { - key: "setDefaultColors", - value: function setDefaultColors() { - var w = this.w; - var utils = new Utils(); - w.globals.dom.elWrap.classList.add(w.config.theme.mode); - - if (w.config.colors === undefined) { - w.globals.colors = this.predefined(); - } else { - w.globals.colors = w.config.colors; - } - - if (w.config.theme.monochrome.enabled) { - var monoArr = []; - var glsCnt = w.globals.series.length; - - if (w.config.plotOptions.bar.distributed && w.config.chart.type === 'bar') { - glsCnt = w.globals.series[0].length * w.globals.series.length; - } - - var mainColor = w.config.theme.monochrome.color; - var part = 1 / (glsCnt / w.config.theme.monochrome.shadeIntensity); - var shade = w.config.theme.monochrome.shadeTo; - var percent = 0; - - for (var gsl = 0; gsl < glsCnt; gsl++) { - var newColor = void 0; - - if (shade === 'dark') { - newColor = utils.shadeColor(percent * -1, mainColor); - percent = percent + part; - } else { - newColor = utils.shadeColor(percent, mainColor); - percent = percent + part; - } - - monoArr.push(newColor); - } - - w.globals.colors = monoArr.slice(); - } - - var defaultColors = w.globals.colors.slice(); // if user specfied less colors than no. of series, push the same colors again - - this.pushExtraColors(w.globals.colors); // The Border colors - - if (w.config.stroke.colors === undefined) { - w.globals.stroke.colors = defaultColors; - } else { - w.globals.stroke.colors = w.config.stroke.colors; - } - - this.pushExtraColors(w.globals.stroke.colors); // The FILL colors - - if (w.config.fill.colors === undefined) { - w.globals.fill.colors = defaultColors; - } else { - w.globals.fill.colors = w.config.fill.colors; - } - - this.pushExtraColors(w.globals.fill.colors); - - if (w.config.dataLabels.style.colors === undefined) { - w.globals.dataLabels.style.colors = defaultColors; - } else { - w.globals.dataLabels.style.colors = w.config.dataLabels.style.colors; - } - - this.pushExtraColors(w.globals.dataLabels.style.colors, 50); - - if (w.config.plotOptions.radar.polygons.fill.colors === undefined) { - w.globals.radarPolygons.fill.colors = [w.config.theme.mode === 'dark' ? '#202D48' : '#fff']; - } else { - w.globals.radarPolygons.fill.colors = w.config.plotOptions.radar.polygons.fill.colors; - } - - this.pushExtraColors(w.globals.radarPolygons.fill.colors, 20); // The point colors - - if (w.config.markers.colors === undefined) { - w.globals.markers.colors = defaultColors; - } else { - w.globals.markers.colors = w.config.markers.colors; - } - - this.pushExtraColors(w.globals.markers.colors); - } // When the number of colors provided is less than the number of series, this method - // will push same colors to the list - // params: - // distributed is only valid for distributed column/bar charts - - }, { - key: "pushExtraColors", - value: function pushExtraColors(colorSeries, length) { - var distributed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var w = this.w; - var len = length || w.globals.series.length; - - if (distributed === null) { - distributed = w.config.chart.type === 'bar' && w.config.plotOptions.bar.distributed || w.config.chart.type === 'heatmap' && w.config.plotOptions.heatmap.colorScale.inverse; - } - - if (distributed) { - len = w.globals.series[0].length * w.globals.series.length; - } - - if (colorSeries.length < len) { - var diff = len - colorSeries.length; - - for (var i = 0; i < diff; i++) { - colorSeries.push(colorSeries[i]); - } - } - } - }, { - key: "updateThemeOptions", - value: function updateThemeOptions(options) { - options.chart = options.chart || {}; - options.tooltip = options.tooltip || {}; - var mode = options.theme.mode || 'light'; - var palette = options.theme.palette ? options.theme.palette : mode === 'dark' ? 'palette4' : 'palette1'; - var foreColor = options.chart.foreColor ? options.chart.foreColor : mode === 'dark' ? '#f6f7f8' : '#373d3f'; - options.tooltip.theme = mode; - options.chart.foreColor = foreColor; - options.theme.palette = palette; - return options; - } - }, { - key: "predefined", - value: function predefined() { - var palette = this.w.config.theme.palette; // D6E3F8, FCEFEF, DCE0D9, A5978B, EDDDD4, D6E3F8, FEF5EF - - switch (palette) { - case 'palette1': - this.colors = ['#008FFB', '#00E396', '#FEB019', '#FF4560', '#775DD0']; - break; - - case 'palette2': - this.colors = ['#3f51b5', '#03a9f4', '#4caf50', '#f9ce1d', '#FF9800']; - break; - - case 'palette3': - this.colors = ['#33b2df', '#546E7A', '#d4526e', '#13d8aa', '#A5978B']; - break; - - case 'palette4': - this.colors = ['#4ecdc4', '#c7f464', '#81D4FA', '#fd6a6a', '#546E7A']; - break; - - case 'palette5': - this.colors = ['#2b908f', '#f9a3a4', '#90ee7e', '#fa4443', '#69d2e7']; - break; - - case 'palette6': - this.colors = ['#449DD1', '#F86624', '#EA3546', '#662E9B', '#C5D86D']; - break; - - case 'palette7': - this.colors = ['#D7263D', '#1B998B', '#2E294E', '#F46036', '#E2C044']; - break; - - case 'palette8': - this.colors = ['#662E9B', '#F86624', '#F9C80E', '#EA3546', '#43BCCD']; - break; - - case 'palette9': - this.colors = ['#5C4742', '#A5978B', '#8D5B4C', '#5A2A27', '#C4BBAF']; - break; - - case 'palette10': - this.colors = ['#A300D6', '#7D02EB', '#5653FE', '#2983FF', '#00B1F2']; - break; - - default: - this.colors = ['#008FFB', '#00E396', '#FEB019', '#FF4560', '#775DD0']; - break; - } - - return this.colors; - } - }]); - - return Theme; -}(); - -var Utils$1 = -/*#__PURE__*/ -function () { - function Utils(tooltipContext) { - _classCallCheck(this, Utils); - - this.w = tooltipContext.w; - this.ttCtx = tooltipContext; - this.ctx = tooltipContext.ctx; - } - /** - ** When hovering over series, you need to capture which series is being hovered on. - ** This function will return both capturedseries index as well as inner index of that series - * @memberof Utils - * @param {object} - * - hoverArea = the rect on which user hovers - * - elGrid = dimensions of the hover rect (it can be different than hoverarea) - */ - - - _createClass(Utils, [{ - key: "getNearestValues", - value: function getNearestValues(_ref) { - var hoverArea = _ref.hoverArea, - elGrid = _ref.elGrid, - clientX = _ref.clientX, - clientY = _ref.clientY, - hasBars = _ref.hasBars; - var w = this.w; - var hoverWidth = w.globals.gridWidth; - var xDivisor = hoverWidth / (w.globals.dataPoints - 1); - var seriesBound = elGrid.getBoundingClientRect(); - - if (hasBars && w.globals.comboCharts || hasBars) { - xDivisor = hoverWidth / w.globals.dataPoints; - } - - var hoverX = clientX - seriesBound.left; - var hoverY = clientY - seriesBound.top; - var inRect = hoverX < 0 || hoverY < 0 || hoverX > w.globals.gridWidth || hoverY > w.globals.gridHeight; - - if (inRect) { - hoverArea.classList.remove('hovering-zoom'); - hoverArea.classList.remove('hovering-pan'); - } else { - if (w.globals.zoomEnabled) { - hoverArea.classList.remove('hovering-pan'); - hoverArea.classList.add('hovering-zoom'); - } else if (w.globals.panEnabled) { - hoverArea.classList.remove('hovering-zoom'); - hoverArea.classList.add('hovering-pan'); - } - } - - var j = Math.round(hoverX / xDivisor); - - if (hasBars) { - j = Math.ceil(hoverX / xDivisor); - j = j - 1; - } - - var capturedSeries = null; - var closest = null; - var seriesXValArr = []; - var seriesYValArr = []; - - for (var s = 0; s < w.globals.seriesXvalues.length; s++) { - seriesXValArr.push([w.globals.seriesXvalues[s][0] - 0.000001].concat(w.globals.seriesXvalues[s])); - } - - seriesXValArr = seriesXValArr.map(function (seriesXVal) { - return seriesXVal.filter(function (s) { - return s; - }); - }); - seriesYValArr = w.globals.seriesYvalues.map(function (seriesYVal) { - return seriesYVal.filter(function (s) { - return s; - }); - }); // if X axis type is not category and tooltip is not shared, then we need to find the cursor position and get the nearest value - - if (w.globals.isXNumeric) { - closest = this.closestInMultiArray(hoverX, hoverY, seriesXValArr, seriesYValArr); - capturedSeries = closest.index; - j = closest.j; - - if (capturedSeries !== null) { - // initial push, it should be a little smaller than the 1st val - seriesXValArr = w.globals.seriesXvalues[capturedSeries]; - closest = this.closestInArray(hoverX, seriesXValArr); - j = closest.index; - } - } - - if (!j || j < 1) j = 0; - return { - capturedSeries: capturedSeries, - j: j, - hoverX: hoverX, - hoverY: hoverY - }; - } - }, { - key: "closestInMultiArray", - value: function closestInMultiArray(hoverX, hoverY, Xarrays, Yarrays) { - var w = this.w; - var activeIndex = 0; - var currIndex = null; - var j = -1; - - if (w.globals.series.length > 1) { - activeIndex = this.getFirstActiveXArray(Xarrays); - } else { - currIndex = 0; - } - - var currY = Yarrays[activeIndex][0]; - var currX = Xarrays[activeIndex][0]; - var diffX = Math.abs(hoverX - currX); - var diffY = Math.abs(hoverY - currY); - var diff = diffY + diffX; - Yarrays.map(function (arrY, arrIndex) { - arrY.map(function (y, innerKey) { - var newdiffY = Math.abs(hoverY - Yarrays[arrIndex][innerKey]); - var newdiffX = Math.abs(hoverX - Xarrays[arrIndex][innerKey]); - var newdiff = newdiffX + newdiffY; - - if (newdiff < diff) { - diff = newdiff; - diffX = newdiffX; - diffY = newdiffY; - currIndex = arrIndex; - j = innerKey; - } - }); - }); - return { - index: currIndex, - j: j - }; - } - }, { - key: "getFirstActiveXArray", - value: function getFirstActiveXArray(Xarrays) { - var activeIndex = 0; - var coreUtils = new CoreUtils(this.ctx); - var firstActiveSeriesIndex = Xarrays.map(function (xarr, index) { - if (xarr.length > 0) { - return index; - } else { - return -1; - } - }); - - for (var a = 0; a < firstActiveSeriesIndex.length; a++) { - var total = coreUtils.getSeriesTotalByIndex(a); - - if (firstActiveSeriesIndex[a] !== -1 && total !== 0 && !coreUtils.seriesHaveSameValues(a)) { - activeIndex = firstActiveSeriesIndex[a]; - break; - } - } - - return activeIndex; - } - }, { - key: "closestInArray", - value: function closestInArray(val, arr) { - var curr = arr[0]; - var currIndex = null; - var diff = Math.abs(val - curr); - - for (var i = 0; i < arr.length; i++) { - var newdiff = Math.abs(val - arr[i]); - - if (newdiff < diff) { - diff = newdiff; - curr = arr[i]; - currIndex = i; - } - } - - return { - index: currIndex - }; - } - /** - * When there are multiple series, it is possible to have different x values for each series. - * But it may be possible in those multiple series, that there is same x value for 2 or more - * series. - * @memberof Utils - * @param {int} - * - j = is the inner index of series -> (series[i][j]) - * @return {bool} - */ - - }, { - key: "isXoverlap", - value: function isXoverlap(j) { - var w = this.w; - var xSameForAllSeriesJArr = []; - var seriesX = w.globals.seriesX.filter(function (s) { - return typeof s[0] !== 'undefined'; - }); - - if (seriesX.length > 0) { - for (var i = 0; i < seriesX.length - 1; i++) { - if (typeof seriesX[i][j] !== 'undefined' && typeof seriesX[i + 1][j] !== 'undefined') { - if (seriesX[i][j] !== seriesX[i + 1][j]) { - xSameForAllSeriesJArr.push('unEqual'); - } - } - } - } - - if (xSameForAllSeriesJArr.length === 0) { - return true; - } - - return false; - } - }, { - key: "isinitialSeriesSameLen", - value: function isinitialSeriesSameLen() { - var sameLen = true; - var initialSeries = this.w.globals.initialSeries; - - for (var i = 0; i < initialSeries.length - 1; i++) { - if (initialSeries[i].data.length !== initialSeries[i + 1].data.length) { - sameLen = false; - break; - } - } - - return sameLen; - } - }, { - key: "getBarsHeight", - value: function getBarsHeight(allbars) { - var bars = _toConsumableArray(allbars); - - var totalHeight = bars.reduce(function (acc, bar) { - return acc + bar.getBBox().height; - }, 0); - return totalHeight; - } - }, { - key: "toggleAllTooltipSeriesGroups", - value: function toggleAllTooltipSeriesGroups(state) { - var w = this.w; - var ttCtx = this.ttCtx; - - if (ttCtx.allTooltipSeriesGroups.length === 0) { - ttCtx.allTooltipSeriesGroups = w.globals.dom.baseEl.querySelectorAll('.apexcharts-tooltip-series-group'); - } - - var allTooltipSeriesGroups = ttCtx.allTooltipSeriesGroups; - - for (var i = 0; i < allTooltipSeriesGroups.length; i++) { - if (state === 'enable') { - allTooltipSeriesGroups[i].classList.add('active'); - allTooltipSeriesGroups[i].style.display = w.config.tooltip.items.display; - } else { - allTooltipSeriesGroups[i].classList.remove('active'); - allTooltipSeriesGroups[i].style.display = 'none'; - } - } - } - }]); - - return Utils; -}(); - -/** - * ApexCharts Tooltip.Labels Class to draw texts on the tooltip. - * - * @module Tooltip.Labels - **/ - -var Labels = -/*#__PURE__*/ -function () { - function Labels(tooltipContext) { - _classCallCheck(this, Labels); - - this.w = tooltipContext.w; - this.ctx = tooltipContext.ctx; - this.ttCtx = tooltipContext; - this.tooltipUtil = new Utils$1(tooltipContext); - } - - _createClass(Labels, [{ - key: "drawSeriesTexts", - value: function drawSeriesTexts(_ref) { - var _ref$shared = _ref.shared, - shared = _ref$shared === void 0 ? true : _ref$shared, - ttItems = _ref.ttItems, - _ref$i = _ref.i, - i = _ref$i === void 0 ? 0 : _ref$i, - _ref$j = _ref.j, - j = _ref$j === void 0 ? null : _ref$j; - var w = this.w; - - if (w.config.tooltip.custom !== undefined) { - this.handleCustomTooltip({ - i: i, - j: j - }); - } else { - this.toggleActiveInactiveSeries(shared); - } - - var values = this.getValuesToPrint({ - i: i, - j: j - }); - this.printLabels({ - i: i, - j: j, - values: values, - ttItems: ttItems, - shared: shared - }); // Re-calculate tooltip dimensions now that we have drawn the text - - var tooltipEl = this.ttCtx.getElTooltip(); - this.ttCtx.tooltipRect.ttWidth = tooltipEl.getBoundingClientRect().width; - this.ttCtx.tooltipRect.ttHeight = tooltipEl.getBoundingClientRect().height; - } - }, { - key: "printLabels", - value: function printLabels(_ref2) { - var i = _ref2.i, - j = _ref2.j, - values = _ref2.values, - ttItems = _ref2.ttItems, - shared = _ref2.shared; - var w = this.w; - var val; - var xVal = values.xVal, - zVal = values.zVal, - xAxisTTVal = values.xAxisTTVal; - var seriesName = ''; - var pColor = w.globals.colors[i]; - - if (j !== null && w.config.plotOptions.bar.distributed) { - pColor = w.globals.colors[j]; - } - - for (var t = 0, inverset = w.globals.series.length - 1; t < w.globals.series.length; t++, inverset--) { - var f = this.getFormatters(i); - seriesName = this.getSeriesName({ - fn: f.yLbTitleFormatter, - index: i, - seriesIndex: i, - j: j - }); - - if (shared) { - var tIndex = w.config.tooltip.inverseOrder ? inverset : t; - f = this.getFormatters(tIndex); - seriesName = this.getSeriesName({ - fn: f.yLbTitleFormatter, - index: tIndex, - seriesIndex: i, - j: j - }); - pColor = w.globals.colors[tIndex]; // for plot charts, not for pie/donuts - - val = f.yLbFormatter(w.globals.series[tIndex][j], { - series: w.globals.series, - seriesIndex: tIndex, - dataPointIndex: j, - w: w - }); // discard 0 values in BARS - - if (this.ttCtx.hasBars() && w.config.chart.stacked && w.globals.series[tIndex][j] === 0 || typeof w.globals.series[tIndex][j] === 'undefined') { - val = undefined; - } - } else { - val = f.yLbFormatter(w.globals.series[i][j], { - series: w.globals.series, - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } // for pie / donuts - - - if (j === null) { - val = f.yLbFormatter(w.globals.series[i], w); - } - - this.DOMHandling({ - t: t, - ttItems: ttItems, - values: { - val: val, - xVal: xVal, - xAxisTTVal: xAxisTTVal, - zVal: zVal - }, - seriesName: seriesName, - shared: shared, - pColor: pColor - }); - } - } - }, { - key: "getFormatters", - value: function getFormatters(i) { - var w = this.w; - var yLbFormatter = w.globals.yLabelFormatters[i]; - var yLbTitleFormatter; - - if (w.globals.ttVal !== undefined) { - if (Array.isArray(w.globals.ttVal)) { - yLbFormatter = w.globals.ttVal[i] && w.globals.ttVal[i].formatter; - yLbTitleFormatter = w.globals.ttVal[i] && w.globals.ttVal[i].title && w.globals.ttVal[i].title.formatter; - } else { - yLbFormatter = w.globals.ttVal.formatter; - - if (typeof w.globals.ttVal.title.formatter === 'function') { - yLbTitleFormatter = w.globals.ttVal.title.formatter; - } - } - } else { - yLbTitleFormatter = w.config.tooltip.y.title.formatter; - } - - if (typeof yLbFormatter !== 'function') { - if (w.globals.yLabelFormatters[0]) { - yLbFormatter = w.globals.yLabelFormatters[0]; - } else { - yLbFormatter = function yLbFormatter(label) { - return label; - }; - } - } - - if (typeof yLbTitleFormatter !== 'function') { - yLbTitleFormatter = function yLbTitleFormatter(label) { - return label; - }; - } - - return { - yLbFormatter: yLbFormatter, - yLbTitleFormatter: yLbTitleFormatter - }; - } - }, { - key: "getSeriesName", - value: function getSeriesName(_ref3) { - var fn = _ref3.fn, - index = _ref3.index, - seriesIndex = _ref3.seriesIndex, - j = _ref3.j; - var w = this.w; - return fn(String(w.globals.seriesNames[index]), { - series: w.globals.series, - seriesIndex: seriesIndex, - dataPointIndex: j, - w: w - }); - } - }, { - key: "DOMHandling", - value: function DOMHandling(_ref4) { - var t = _ref4.t, - ttItems = _ref4.ttItems, - values = _ref4.values, - seriesName = _ref4.seriesName, - shared = _ref4.shared, - pColor = _ref4.pColor; - var w = this.w; - var ttCtx = this.ttCtx; - var val = values.val, - xVal = values.xVal, - xAxisTTVal = values.xAxisTTVal, - zVal = values.zVal; - var ttItemsChildren = null; - ttItemsChildren = ttItems[t].children; - - if (w.config.tooltip.fillSeriesColor) { - // elTooltip.style.backgroundColor = pColor - ttItems[t].style.backgroundColor = pColor; - ttItemsChildren[0].style.display = 'none'; - } - - if (ttCtx.showTooltipTitle) { - if (ttCtx.tooltipTitle === null) { - // get it once if null, and store it in class property - ttCtx.tooltipTitle = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip-title'); - } - - ttCtx.tooltipTitle.innerHTML = xVal; - } // if xaxis tooltip is constructed, we need to replace the innerHTML - - - if (ttCtx.blxaxisTooltip) { - ttCtx.xaxisTooltipText.innerHTML = xAxisTTVal !== '' ? xAxisTTVal : xVal; - } - - var ttYLabel = ttItems[t].querySelector('.apexcharts-tooltip-text-label'); - - if (ttYLabel) { - ttYLabel.innerHTML = seriesName ? seriesName + ': ' : ''; - } - - var ttYVal = ttItems[t].querySelector('.apexcharts-tooltip-text-value'); - - if (ttYVal) { - ttYVal.innerHTML = val; - } - - if (ttItemsChildren[0] && ttItemsChildren[0].classList.contains('apexcharts-tooltip-marker')) { - ttItemsChildren[0].style.backgroundColor = pColor; - } - - if (!w.config.tooltip.marker.show) { - ttItemsChildren[0].style.display = 'none'; - } - - if (zVal !== null) { - var ttZLabel = ttItems[t].querySelector('.apexcharts-tooltip-text-z-label'); - ttZLabel.innerHTML = w.config.tooltip.z.title; - var ttZVal = ttItems[t].querySelector('.apexcharts-tooltip-text-z-value'); - ttZVal.innerHTML = zVal; - } - - if (shared && ttItemsChildren[0]) { - // hide when no Val or series collapsed - if (typeof val === 'undefined' || val === null || w.globals.collapsedSeriesIndices.indexOf(t) > -1) { - ttItemsChildren[0].parentNode.style.display = 'none'; - } else { - ttItemsChildren[0].parentNode.style.display = w.config.tooltip.items.display; - } - } - } - }, { - key: "toggleActiveInactiveSeries", - value: function toggleActiveInactiveSeries(shared) { - var w = this.w; - - if (shared) { - // make all tooltips active - this.tooltipUtil.toggleAllTooltipSeriesGroups('enable'); - } else { - // disable all tooltip text groups - this.tooltipUtil.toggleAllTooltipSeriesGroups('disable'); // enable the first tooltip text group - - var firstTooltipSeriesGroup = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip-series-group'); - - if (firstTooltipSeriesGroup) { - firstTooltipSeriesGroup.classList.add('active'); - firstTooltipSeriesGroup.style.display = w.config.tooltip.items.display; - } - } - } - }, { - key: "getValuesToPrint", - value: function getValuesToPrint(_ref5) { - var i = _ref5.i, - j = _ref5.j; - var w = this.w; - var filteredSeriesX = this.ctx.series.filteredSeriesX(); - var xVal = ''; - var xAxisTTVal = ''; - var zVal = null; - var val = null; - var customFormatterOpts = { - series: w.globals.series, - seriesIndex: i, - dataPointIndex: j, - w: w - }; - var zFormatter = w.globals.ttZFormatter; - - if (j === null) { - val = w.globals.series[i]; - } else { - if (w.globals.isXNumeric) { - xVal = filteredSeriesX[i][j]; - - if (filteredSeriesX[i].length === 0) { - // a series (possibly the first one) might be collapsed, so get the next active index - var firstActiveSeriesIndex = this.tooltipUtil.getFirstActiveXArray(filteredSeriesX); - xVal = filteredSeriesX[firstActiveSeriesIndex][j]; - } - } else { - xVal = typeof w.globals.labels[j] !== 'undefined' ? w.globals.labels[j] : ''; - } - } - - var bufferXVal = xVal; - - if (w.globals.isXNumeric && w.config.xaxis.type === 'datetime') { - var xFormat = new Formatters(this.ctx); - xVal = xFormat.xLabelFormat(w.globals.ttKeyFormatter, bufferXVal); - } else { - xVal = w.globals.xLabelFormatter(bufferXVal, customFormatterOpts); - } // override default x-axis formatter with tooltip formatter - - - if (w.config.tooltip.x.formatter !== undefined) { - xVal = w.globals.ttKeyFormatter(bufferXVal, customFormatterOpts); - } - - if (w.globals.seriesZ.length > 0 && w.globals.seriesZ[0].length > 0) { - zVal = zFormatter(w.globals.seriesZ[i][j], w); - } - - if (typeof w.config.xaxis.tooltip.formatter === 'function') { - xAxisTTVal = w.globals.xaxisTooltipFormatter(bufferXVal, customFormatterOpts); - } else { - xAxisTTVal = xVal; - } - - return { - val: val, - xVal: xVal, - xAxisTTVal: xAxisTTVal, - zVal: zVal - }; - } - }, { - key: "handleCustomTooltip", - value: function handleCustomTooltip(_ref6) { - var i = _ref6.i, - j = _ref6.j; - var w = this.w; - var tooltipEl = this.ttCtx.getElTooltip(); // override everything with a custom html tooltip and replace it - - tooltipEl.innerHTML = w.config.tooltip.custom({ - ctx: this.ctx, - series: w.globals.series, - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - }]); - - return Labels; -}(); - -/** - * ApexCharts Tooltip.Position Class to move the tooltip based on x and y position. - * - * @module Tooltip.Position - **/ - -var Position = -/*#__PURE__*/ -function () { - function Position(tooltipContext) { - _classCallCheck(this, Position); - - this.ttCtx = tooltipContext; - this.ctx = tooltipContext.ctx; - this.w = tooltipContext.w; - } - /** - * This will move the crosshair (the vertical/horz line that moves along with mouse) - * Along with this, this function also calls the xaxisMove function - * @memberof Position - * @param {int} - cx = point's x position, wherever point's x is, you need to move crosshair - */ - - - _createClass(Position, [{ - key: "moveXCrosshairs", - value: function moveXCrosshairs(cx) { - var j = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var ttCtx = this.ttCtx; - var w = this.w; - var xcrosshairs = ttCtx.getElXCrosshairs(); - var x = cx - ttCtx.xcrosshairsWidth / 2; - var tickAmount = w.globals.labels.slice().length; - - if (j !== null) { - x = w.globals.gridWidth / tickAmount * j; - } - - if (w.config.xaxis.crosshairs.width === 'tickWidth' || w.config.xaxis.crosshairs.width === 'barWidth') { - if (x + ttCtx.xcrosshairsWidth > w.globals.gridWidth) { - x = w.globals.gridWidth - ttCtx.xcrosshairsWidth; - } - } else { - if (j !== null) { - x = x + w.globals.gridWidth / tickAmount / 2; - } - } - - if (x < 0) { - x = 0; - } - - if (x > w.globals.gridWidth) { - x = w.globals.gridWidth; - } - - if (xcrosshairs !== null) { - xcrosshairs.setAttribute('x', x); - xcrosshairs.setAttribute('x1', x); - xcrosshairs.setAttribute('x2', x); - xcrosshairs.setAttribute('y2', w.globals.gridHeight); - xcrosshairs.classList.add('active'); - } - - if (ttCtx.blxaxisTooltip) { - var tx = x; - - if (w.config.xaxis.crosshairs.width === 'tickWidth' || w.config.xaxis.crosshairs.width === 'barWidth') { - tx = x + ttCtx.xcrosshairsWidth / 2; - } - - this.moveXAxisTooltip(tx); - } - } - /** - * This will move the crosshair (the vertical/horz line that moves along with mouse) - * Along with this, this function also calls the xaxisMove function - * @memberof Position - * @param {int} - cx = point's x position, wherever point's x is, you need to move crosshair - */ - - }, { - key: "moveYCrosshairs", - value: function moveYCrosshairs(cy) { - var ttCtx = this.ttCtx; - - if (ttCtx.ycrosshairs !== null) { - Graphics.setAttrs(ttCtx.ycrosshairs, { - y1: cy, - y2: cy - }); - Graphics.setAttrs(ttCtx.ycrosshairsHidden, { - y1: cy, - y2: cy - }); - } - } - /** - ** AxisTooltip is the small rectangle which appears on x axis with x value, when user moves - * @memberof Position - * @param {int} - cx = point's x position, wherever point's x is, you need to move - */ - - }, { - key: "moveXAxisTooltip", - value: function moveXAxisTooltip(cx) { - var w = this.w; - var ttCtx = this.ttCtx; - - if (ttCtx.xaxisTooltip !== null) { - ttCtx.xaxisTooltip.classList.add('active'); - var cy = ttCtx.xaxisOffY + w.config.xaxis.tooltip.offsetY + w.globals.translateY + 1 + w.config.xaxis.offsetY; - var xaxisTTText = ttCtx.xaxisTooltip.getBoundingClientRect(); - var xaxisTTTextWidth = xaxisTTText.width; - cx = cx - xaxisTTTextWidth / 2; - - if (!isNaN(cx)) { - cx = cx + w.globals.translateX; - var textRect = 0; - var graphics = new Graphics(this.ctx); - textRect = graphics.getTextRects(ttCtx.xaxisTooltipText.innerHTML); - ttCtx.xaxisTooltipText.style.minWidth = textRect.width + 'px'; - ttCtx.xaxisTooltip.style.left = cx + 'px'; - ttCtx.xaxisTooltip.style.top = cy + 'px'; - } - } - } - }, { - key: "moveYAxisTooltip", - value: function moveYAxisTooltip(index) { - var w = this.w; - var ttCtx = this.ttCtx; - - if (ttCtx.yaxisTTEls === null) { - ttCtx.yaxisTTEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxistooltip'); - } - - var ycrosshairsHiddenRectY1 = parseInt(ttCtx.ycrosshairsHidden.getAttribute('y1')); - var cy = w.globals.translateY + ycrosshairsHiddenRectY1; - var yAxisTTRect = ttCtx.yaxisTTEls[index].getBoundingClientRect(); - var yAxisTTHeight = yAxisTTRect.height; - var cx = w.globals.translateYAxisX[index] - 2; - - if (w.config.yaxis[index].opposite) { - cx = cx - 26; - } - - cy = cy - yAxisTTHeight / 2; - - if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1) { - ttCtx.yaxisTTEls[index].classList.add('active'); - ttCtx.yaxisTTEls[index].style.top = cy + 'px'; - ttCtx.yaxisTTEls[index].style.left = cx + w.config.yaxis[index].tooltip.offsetX + 'px'; - } else { - ttCtx.yaxisTTEls[index].classList.remove('active'); - } - } - /** - ** moves the whole tooltip by changing x, y attrs - * @memberof Position - * @param {int} - cx = point's x position, wherever point's x is, you need to move tooltip - * @param {int} - cy = point's y position, wherever point's y is, you need to move tooltip - * @param {int} - r = point's radius - */ - - }, { - key: "moveTooltip", - value: function moveTooltip(cx, cy) { - var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var w = this.w; - var ttCtx = this.ttCtx; - var tooltipEl = ttCtx.getElTooltip(); - var tooltipRect = ttCtx.tooltipRect; - var pointR = r !== null ? parseInt(r) : 1; - var x = parseInt(cx) + pointR + 5; - var y = parseInt(cy) + pointR / 2; // - tooltipRect.ttHeight / 2 - - if (x > w.globals.gridWidth / 2) { - x = x - tooltipRect.ttWidth - pointR - 15; - } - - if (x > w.globals.gridWidth - tooltipRect.ttWidth - 10) { - x = w.globals.gridWidth - tooltipRect.ttWidth; - } - - if (x < -20) { - x = -20; - } - - if (w.config.tooltip.followCursor) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top - tooltipRect.ttHeight / 2; - } - - var newPositions = this.positionChecks(tooltipRect, x, y); - x = newPositions.x; - y = newPositions.y; - - if (!isNaN(x)) { - x = x + w.globals.translateX; - tooltipEl.style.left = x + 'px'; - tooltipEl.style.top = y + 'px'; - } - } - }, { - key: "positionChecks", - value: function positionChecks(tooltipRect, x, y) { - var w = this.w; - - if (tooltipRect.ttHeight + y > w.globals.gridHeight) { - y = w.globals.gridHeight - tooltipRect.ttHeight + w.globals.translateY; - } - - if (y < 0) { - y = 0; - } - - return { - x: x, - y: y - }; - } - }, { - key: "moveMarkers", - value: function moveMarkers(i, j) { - var w = this.w; - var ttCtx = this.ttCtx; - - if (w.globals.markers.size[i] > 0) { - var allPoints = w.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(i, "'] .apexcharts-marker")); - - for (var p = 0; p < allPoints.length; p++) { - if (parseInt(allPoints[p].getAttribute('rel')) === j) { - ttCtx.marker.resetPointsSize(); - ttCtx.marker.enlargeCurrentPoint(j, allPoints[p]); - } - } - } else { - ttCtx.marker.resetPointsSize(); - this.moveDynamicPointOnHover(j, i); - } - } // This function is used when you need to show markers/points only on hover - - // DIFFERENT X VALUES in multiple series - - }, { - key: "moveDynamicPointOnHover", - value: function moveDynamicPointOnHover(j, capturedSeries) { - var w = this.w; - var ttCtx = this.ttCtx; - var cx = 0; - var cy = 0; - var pointsArr = w.globals.pointsArray; - var hoverSize = w.config.markers.hover.size; - - if (hoverSize === undefined) { - hoverSize = w.globals.markers.size[capturedSeries] + w.config.markers.hover.sizeOffset; - } - - cx = pointsArr[capturedSeries][j][0]; - cy = pointsArr[capturedSeries][j][1] ? pointsArr[capturedSeries][j][1] : 0; - var point = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(capturedSeries, "'] .apexcharts-series-markers circle")); - - if (point) { - point.setAttribute('r', hoverSize); - point.setAttribute('cx', cx); - point.setAttribute('cy', cy); - } // point.style.opacity = w.config.markers.hover.opacity - - - this.moveXCrosshairs(cx); - - if (!ttCtx.fixedTooltip) { - this.moveTooltip(cx, cy, hoverSize); - } - } // This function is used when you need to show markers/points only on hover - - // SAME X VALUES in multiple series - - }, { - key: "moveDynamicPointsOnHover", - value: function moveDynamicPointsOnHover(j) { - var ttCtx = this.ttCtx; - var w = ttCtx.w; - var cx = 0; - var cy = 0; - var activeSeries = 0; - var pointsArr = w.globals.pointsArray; - var series = new Series(this.ctx); - activeSeries = series.getActiveSeriesIndex(); - var hoverSize = w.config.markers.hover.size; - - if (hoverSize === undefined) { - hoverSize = w.globals.markers.size[activeSeries] + w.config.markers.hover.sizeOffset; - } - - if (pointsArr[activeSeries]) { - cx = pointsArr[activeSeries][j][0]; - cy = pointsArr[activeSeries][j][1]; - } - - var points = null; - var allPoints = ttCtx.getAllMarkers(); - - if (allPoints !== null) { - points = allPoints; - } else { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers circle'); - } - - if (points !== null) { - for (var p = 0; p < points.length; p++) { - var pointArr = pointsArr[p]; - - if (pointArr && pointArr.length) { - var pcy = pointsArr[p][j][1]; - points[p].setAttribute('cx', cx); - var realIndex = parseInt(points[p].parentNode.parentNode.parentNode.getAttribute('data:realIndex')); - - if (pcy !== null) { - points[realIndex] && points[realIndex].setAttribute('r', hoverSize); - points[realIndex] && points[realIndex].setAttribute('cy', pcy); - } else { - points[realIndex] && points[realIndex].setAttribute('r', 0); - } - } - } - } - - this.moveXCrosshairs(cx); - - if (!ttCtx.fixedTooltip) { - var tcy = cy || w.globals.gridHeight; - this.moveTooltip(cx, tcy, hoverSize); - } - } - }, { - key: "moveStickyTooltipOverBars", - value: function moveStickyTooltipOverBars(j) { - var w = this.w; - var ttCtx = this.ttCtx; - var jBar = w.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='1'] path[j='".concat(j, "'], .apexcharts-candlestick-series .apexcharts-series[rel='1'] path[j='").concat(j, "'], .apexcharts-rangebar-series .apexcharts-series[rel='1'] path[j='").concat(j, "']")); - var bcx = jBar ? parseFloat(jBar.getAttribute('cx')) : 0; - var bcy = 0; - var bw = jBar ? parseFloat(jBar.getAttribute('barWidth')) : 0; - - if (w.globals.isXNumeric) { - bcx = bcx - bw / 2; - } else { - bcx = ttCtx.xAxisTicksPositions[j - 1] + ttCtx.dataPointsDividedWidth / 2; - - if (isNaN(bcx)) { - bcx = ttCtx.xAxisTicksPositions[j] - ttCtx.dataPointsDividedWidth / 2; - } - } // tooltip will move vertically along with mouse as it is a shared tooltip - - - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - bcy = ttCtx.e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2; - this.moveXCrosshairs(bcx); - - if (!ttCtx.fixedTooltip) { - var tcy = bcy || w.globals.gridHeight; - this.moveTooltip(bcx, tcy); - } - } - }]); - - return Position; -}(); - -/** - * ApexCharts Tooltip.Marker Class to draw texts on the tooltip. - * - * @module Tooltip.Marker - **/ - -var Marker = -/*#__PURE__*/ -function () { - function Marker(tooltipContext) { - _classCallCheck(this, Marker); - - this.w = tooltipContext.w; - this.ttCtx = tooltipContext; - this.ctx = tooltipContext.ctx; - this.tooltipPosition = new Position(tooltipContext); - } - - _createClass(Marker, [{ - key: "drawDynamicPoints", - value: function drawDynamicPoints() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var marker = new Markers(this.ctx); - var elsSeries = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series'); - - for (var i = 0; i < elsSeries.length; i++) { - var seriesIndex = parseInt(elsSeries[i].getAttribute('data:realIndex')); - var pointsMain = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(seriesIndex, "'] .apexcharts-series-markers-wrap")); - - if (pointsMain !== null) { - // it can be null as we have tooltips in donut/bar charts - var point = void 0; - var PointClasses = "apexcharts-marker w".concat((Math.random() + 1).toString(36).substring(4)); - - if ((w.config.chart.type === 'line' || w.config.chart.type === 'area') && !w.globals.comboCharts && !w.config.tooltip.intersect) { - PointClasses += ' no-pointer-events'; - } - - var elPointOptions = marker.getMarkerConfig(PointClasses, seriesIndex); - point = graphics.drawMarker(0, 0, elPointOptions); - point.node.setAttribute('default-marker-size', 0); - var elPointsG = document.createElementNS(w.globals.SVGNS, 'g'); - elPointsG.classList.add('apexcharts-series-markers'); - elPointsG.appendChild(point.node); - pointsMain.appendChild(elPointsG); - } - } - } - }, { - key: "enlargeCurrentPoint", - value: function enlargeCurrentPoint(rel, point) { - var x = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var y = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var w = this.w; - - if (w.config.chart.type !== 'bubble') { - this.newPointSize(rel, point); - } - - var cx = point.getAttribute('cx'); - var cy = point.getAttribute('cy'); - - if (x !== null && y !== null) { - cx = x; - cy = y; - } - - this.tooltipPosition.moveXCrosshairs(cx); - - if (!this.fixedTooltip) { - if (w.config.chart.type === 'radar') { - var elGrid = this.ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - cx = this.ttCtx.e.clientX - seriesBound.left; - } - - this.tooltipPosition.moveTooltip(cx, cy, w.config.markers.hover.size); - } - } - }, { - key: "enlargePoints", - value: function enlargePoints(j) { - var w = this.w; - var me = this; - var ttCtx = this.ttCtx; - var col = j; - var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker'); - var newSize = w.config.markers.hover.size; - - for (var p = 0; p < points.length; p++) { - var rel = points[p].getAttribute('rel'); - var index = points[p].getAttribute('index'); - - if (newSize === undefined) { - newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset; - } - - if (col === parseInt(rel)) { - me.newPointSize(col, points[p]); - var cx = points[p].getAttribute('cx'); - var cy = points[p].getAttribute('cy'); - me.tooltipPosition.moveXCrosshairs(cx); - - if (!ttCtx.fixedTooltip) { - me.tooltipPosition.moveTooltip(cx, cy, newSize); - } - } else { - me.oldPointSize(points[p]); - } - } - } - }, { - key: "newPointSize", - value: function newPointSize(rel, point) { - var w = this.w; - var newSize = w.config.markers.hover.size; - var elPoint = null; - - if (rel === 0) { - elPoint = point.parentNode.firstChild; - } else { - elPoint = point.parentNode.lastChild; - } - - var index = parseInt(elPoint.getAttribute('index')); - - if (newSize === undefined) { - newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset; - } - - elPoint.setAttribute('r', newSize); - } - }, { - key: "oldPointSize", - value: function oldPointSize(point) { - var size = parseInt(point.getAttribute('default-marker-size')); - point.setAttribute('r', size); - } - }, { - key: "resetPointsSize", - value: function resetPointsSize() { - var w = this.w; - var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker'); - - for (var p = 0; p < points.length; p++) { - var size = parseInt(points[p].getAttribute('default-marker-size')); - - if (Utils.isNumber(size)) { - points[p].setAttribute('r', size); - } else { - points[p].setAttribute('r', 0); - } - } - } - }]); - - return Marker; -}(); - -/** - * ApexCharts Tooltip.Intersect Class. - * - * @module Tooltip.Intersect - **/ - -var Intersect = -/*#__PURE__*/ -function () { - function Intersect(tooltipContext) { - _classCallCheck(this, Intersect); - - this.w = tooltipContext.w; - this.ttCtx = tooltipContext; - } - - _createClass(Intersect, [{ - key: "getAttr", - value: function getAttr(e, attr) { - return parseFloat(e.target.getAttribute(attr)); - } - }, { - key: "handleHeatTooltip", - value: function handleHeatTooltip(_ref) { - var e = _ref.e, - opt = _ref.opt, - x = _ref.x, - y = _ref.y; - var ttCtx = this.ttCtx; - var w = this.w; - - if (e.target.classList.contains('apexcharts-heatmap-rect')) { - var i = this.getAttr(e, 'i'); - var j = this.getAttr(e, 'j'); - var cx = this.getAttr(e, 'cx'); - var cy = this.getAttr(e, 'cy'); - var width = this.getAttr(e, 'width'); - var height = this.getAttr(e, 'height'); - ttCtx.tooltipLabels.drawSeriesTexts({ - ttItems: opt.ttItems, - i: i, - j: j, - shared: false - }); - x = cx + ttCtx.tooltipRect.ttWidth / 2 + width; - y = cy + ttCtx.tooltipRect.ttHeight / 2 - height / 2; - ttCtx.tooltipPosition.moveXCrosshairs(cx + width / 2); - - if (x > w.globals.gridWidth / 2) { - x = cx - ttCtx.tooltipRect.ttWidth / 2 + width; - } - - if (ttCtx.w.config.tooltip.followCursor) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); // x = ttCtx.e.clientX - seriesBound.left - - y = ttCtx.e.clientY - seriesBound.top + w.globals.translateY / 2 - 10; - } - } - - return { - x: x, - y: y - }; - } - }, { - key: "handleMarkerTooltip", - value: function handleMarkerTooltip(_ref2) { - var e = _ref2.e, - opt = _ref2.opt, - x = _ref2.x, - y = _ref2.y; - var w = this.w; - var ttCtx = this.ttCtx; - var i; - var j; - - if (e.target.classList.contains('apexcharts-marker')) { - var cx = parseInt(opt.paths.getAttribute('cx')); - var cy = parseInt(opt.paths.getAttribute('cy')); - var val = parseFloat(opt.paths.getAttribute('val')); - j = parseInt(opt.paths.getAttribute('rel')); - i = parseInt(opt.paths.parentNode.parentNode.parentNode.getAttribute('rel')) - 1; - - if (ttCtx.intersect) { - var el = Utils.findAncestor(opt.paths, 'apexcharts-series'); - - if (el) { - i = parseInt(el.getAttribute('data:realIndex')); - } - } - - ttCtx.tooltipLabels.drawSeriesTexts({ - ttItems: opt.ttItems, - i: i, - j: j, - shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared - }); - - if (e.type === 'mouseup') { - ttCtx.markerClick(e, i, j); - } - - x = cx; - y = cy + w.globals.translateY - ttCtx.tooltipRect.ttHeight * 1.4; - - if (ttCtx.w.config.tooltip.followCursor) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top; - } - - if (val < 0) { - y = cy; - } - - ttCtx.marker.enlargeCurrentPoint(j, opt.paths, x, y); - } - - return { - x: x, - y: y - }; - } - }, { - key: "handleBarTooltip", - value: function handleBarTooltip(_ref3) { - var e = _ref3.e, - opt = _ref3.opt; - var w = this.w; - var ttCtx = this.ttCtx; - var tooltipEl = ttCtx.getElTooltip(); - var bx = 0; - var x = 0; - var y = 0; // let bW = 0 - - var i = 0; - var strokeWidth; - var barXY = this.getBarTooltipXY({ - e: e, - opt: opt - }); - i = barXY.i; - var barHeight = barXY.barHeight; - var j = barXY.j; - - if (w.globals.isBarHorizontal && ttCtx.hasBars() || !w.config.tooltip.shared) { - x = barXY.x; - y = barXY.y; - strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width; // bW = barXY.barWidth - - bx = x; - } else { - if (!w.globals.comboCharts && !w.config.tooltip.shared) { - bx = bx / 2; - } - } // y is NaN, make it touch the bottom of grid area - - - if (isNaN(y)) { - y = w.globals.svgHeight - ttCtx.tooltipRect.ttHeight; - } // x exceeds gridWidth - - - if (x + ttCtx.tooltipRect.ttWidth > w.globals.gridWidth) { - x = x - ttCtx.tooltipRect.ttWidth; - } else if (x < 0) { - x = x + ttCtx.tooltipRect.ttWidth; - } - - if (ttCtx.w.config.tooltip.followCursor) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY - seriesBound.top; - } // if tooltip is still null, querySelector - - - if (ttCtx.tooltip === null) { - ttCtx.tooltip = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip'); - } - - if (!w.config.tooltip.shared) { - if (w.globals.comboChartsHasBars) { - ttCtx.tooltipPosition.moveXCrosshairs(bx + strokeWidth / 2); - } else { - ttCtx.tooltipPosition.moveXCrosshairs(bx); - } - } // move tooltip here - - - if (!ttCtx.fixedTooltip && (!w.config.tooltip.shared || w.globals.isBarHorizontal && ttCtx.hasBars())) { - if (isReversed) { - x = w.globals.gridWidth - x; - } - - tooltipEl.style.left = x + w.globals.translateX + 'px'; - var seriesIndex = parseInt(opt.paths.parentNode.getAttribute('data:realIndex')); - var isReversed = w.globals.isMultipleYAxis ? w.config.yaxis[seriesIndex] && w.config.yaxis[seriesIndex].reversed : w.config.yaxis[0].reversed; - - if (isReversed && !(w.globals.isBarHorizontal && ttCtx.hasBars())) { - y = y + barHeight - (w.globals.series[i][j] < 0 ? barHeight : 0) * 2; - } - - if (ttCtx.tooltipRect.ttHeight + y > w.globals.gridHeight) { - y = w.globals.gridHeight - ttCtx.tooltipRect.ttHeight + w.globals.translateY; - tooltipEl.style.top = y + 'px'; - } else { - tooltipEl.style.top = y + w.globals.translateY - ttCtx.tooltipRect.ttHeight / 2 + 'px'; - } - } - } - }, { - key: "getBarTooltipXY", - value: function getBarTooltipXY(_ref4) { - var e = _ref4.e, - opt = _ref4.opt; - var w = this.w; - var j = null; - var ttCtx = this.ttCtx; - var i = 0; - var x = 0; - var y = 0; - var barWidth = 0; - var barHeight = 0; - var cl = e.target.classList; - - if (cl.contains('apexcharts-bar-area') || cl.contains('apexcharts-candlestick-area') || cl.contains('apexcharts-rangebar-area')) { - var bar = e.target; - var barRect = bar.getBoundingClientRect(); - var seriesBound = opt.elGrid.getBoundingClientRect(); - var bh = barRect.height; - barHeight = barRect.height; - var bw = barRect.width; - var cx = parseInt(bar.getAttribute('cx')); - var cy = parseInt(bar.getAttribute('cy')); - barWidth = parseFloat(bar.getAttribute('barWidth')); - var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; - j = parseInt(bar.getAttribute('j')); - i = parseInt(bar.parentNode.getAttribute('rel')) - 1; - - if (w.globals.comboCharts) { - i = parseInt(bar.parentNode.getAttribute('data:realIndex')); - } // if (w.config.tooltip.shared) { - // this check not needed at the moment - // const yDivisor = w.globals.gridHeight / (w.globals.series.length) - // const hoverY = ttCtx.clientY - ttCtx.seriesBound.top - // j = Math.ceil(hoverY / yDivisor) - // } - - - ttCtx.tooltipLabels.drawSeriesTexts({ - ttItems: opt.ttItems, - i: i, - j: j, - shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared - }); - - if (w.config.tooltip.followCursor) { - if (w.globals.isBarHorizontal) { - x = clientX - seriesBound.left + 15; - y = cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2; - } else { - if (w.globals.isXNumeric) { - x = cx - bw / 2; - } else { - x = cx - ttCtx.dataPointsDividedWidth + bw / 2; - } - - y = e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2 - 15; - } - } else { - if (w.globals.isBarHorizontal) { - x = cx; - - if (x < ttCtx.xyRatios.baseLineInvertedY) { - x = cx - ttCtx.tooltipRect.ttWidth; - } - - y = cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2; - } else { - // if columns - if (w.globals.isXNumeric) { - x = cx - bw / 2; - } else { - x = cx - ttCtx.dataPointsDividedWidth + bw / 2; - } - - y = cy; // - ttCtx.tooltipRect.ttHeight / 2 + 10 - } - } - } - - return { - x: x, - y: y, - barHeight: barHeight, - barWidth: barWidth, - i: i, - j: j - }; - } - }]); - - return Intersect; -}(); - -/** - * ApexCharts Tooltip.AxesTooltip Class. - * - * @module Tooltip.AxesTooltip - **/ -var AxesTooltip = -/*#__PURE__*/ -function () { - function AxesTooltip(tooltipContext) { - _classCallCheck(this, AxesTooltip); - - this.w = tooltipContext.w; - this.ttCtx = tooltipContext; - } - /** - * This method adds the secondary tooltip which appears below x axis - * @memberof Tooltip - **/ - - - _createClass(AxesTooltip, [{ - key: "drawXaxisTooltip", - value: function drawXaxisTooltip() { - var w = this.w; - var ttCtx = this.ttCtx; - var isBottom = w.config.xaxis.position === 'bottom'; - ttCtx.xaxisOffY = isBottom ? w.globals.gridHeight + 1 : 1; - var tooltipCssClass = isBottom ? 'apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom' : 'apexcharts-xaxistooltip apexcharts-xaxistooltip-top'; - var renderTo = w.globals.dom.elWrap; - - if (ttCtx.blxaxisTooltip) { - var xaxisTooltip = w.globals.dom.baseEl.querySelector('.apexcharts-xaxistooltip'); - - if (xaxisTooltip === null) { - ttCtx.xaxisTooltip = document.createElement('div'); - ttCtx.xaxisTooltip.setAttribute('class', tooltipCssClass + ' ' + w.config.tooltip.theme); - renderTo.appendChild(ttCtx.xaxisTooltip); - ttCtx.xaxisTooltipText = document.createElement('div'); - ttCtx.xaxisTooltipText.classList.add('apexcharts-xaxistooltip-text'); - ttCtx.xaxisTooltipText.style.fontFamily = w.config.xaxis.tooltip.style.fontFamily || w.config.chart.fontFamily; - ttCtx.xaxisTooltipText.style.fontSize = w.config.xaxis.tooltip.style.fontSize; - ttCtx.xaxisTooltip.appendChild(ttCtx.xaxisTooltipText); - } - } - } - /** - * This method adds the secondary tooltip which appears below x axis - * @memberof Tooltip - **/ - - }, { - key: "drawYaxisTooltip", - value: function drawYaxisTooltip() { - var w = this.w; - var ttCtx = this.ttCtx; - - for (var i = 0; i < w.config.yaxis.length; i++) { - var isRight = w.config.yaxis[i].opposite || w.config.yaxis[i].crosshairs.opposite; - ttCtx.yaxisOffX = isRight ? w.globals.gridWidth + 1 : 1; - var tooltipCssClass = isRight ? "apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i, " apexcharts-yaxistooltip-right") : "apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i, " apexcharts-yaxistooltip-left"); - var renderTo = w.globals.dom.elWrap; - - if (ttCtx.blyaxisTooltip) { - var yaxisTooltip = w.globals.dom.baseEl.querySelector(".apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i)); - - if (yaxisTooltip === null) { - ttCtx.yaxisTooltip = document.createElement('div'); - ttCtx.yaxisTooltip.setAttribute('class', tooltipCssClass + ' ' + w.config.tooltip.theme); - renderTo.appendChild(ttCtx.yaxisTooltip); - if (i === 0) ttCtx.yaxisTooltipText = []; - ttCtx.yaxisTooltipText.push(document.createElement('div')); - ttCtx.yaxisTooltipText[i].classList.add('apexcharts-yaxistooltip-text'); - ttCtx.yaxisTooltip.appendChild(ttCtx.yaxisTooltipText[i]); - } - } - } - } - /** - * @memberof Tooltip - **/ - - }, { - key: "setXCrosshairWidth", - value: function setXCrosshairWidth() { - var w = this.w; - var ttCtx = this.ttCtx; // set xcrosshairs width - - var xcrosshairs = ttCtx.getElXCrosshairs(); - ttCtx.xcrosshairsWidth = parseInt(w.config.xaxis.crosshairs.width); - - if (!w.globals.comboCharts) { - if (w.config.xaxis.crosshairs.width === 'tickWidth') { - var count = w.globals.labels.length; - ttCtx.xcrosshairsWidth = w.globals.gridWidth / count; - } else if (w.config.xaxis.crosshairs.width === 'barWidth') { - var bar = w.globals.dom.baseEl.querySelector('.apexcharts-bar-area'); - - if (bar !== null) { - var barWidth = parseFloat(bar.getAttribute('barWidth')); - ttCtx.xcrosshairsWidth = barWidth; - } else { - ttCtx.xcrosshairsWidth = 1; - } - } - } else { - var _bar = w.globals.dom.baseEl.querySelector('.apexcharts-bar-area'); - - if (_bar !== null && w.config.xaxis.crosshairs.width === 'barWidth') { - var _barWidth = parseFloat(_bar.getAttribute('barWidth')); - - ttCtx.xcrosshairsWidth = _barWidth; - } else { - if (w.config.xaxis.crosshairs.width === 'tickWidth') { - var _count = w.globals.labels.length; - ttCtx.xcrosshairsWidth = w.globals.gridWidth / _count; - } - } - } - - if (w.globals.isBarHorizontal) { - ttCtx.xcrosshairsWidth = 0; - } - - if (xcrosshairs !== null && ttCtx.xcrosshairsWidth > 0) { - xcrosshairs.setAttribute('width', ttCtx.xcrosshairsWidth); - } - } - }, { - key: "handleYCrosshair", - value: function handleYCrosshair() { - var w = this.w; - var ttCtx = this.ttCtx; // set ycrosshairs height - - ttCtx.ycrosshairs = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs'); - ttCtx.ycrosshairsHidden = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs-hidden'); - } - }, { - key: "drawYaxisTooltipText", - value: function drawYaxisTooltipText(index, clientY, xyRatios) { - var ttCtx = this.ttCtx; - var w = this.w; - var lbFormatter = w.globals.yLabelFormatters[index]; - - if (ttCtx.blyaxisTooltip) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - var hoverY = (clientY - seriesBound.top) * xyRatios.yRatio[index]; - var height = w.globals.maxYArr[index] - w.globals.minYArr[index]; - var val = w.globals.minYArr[index] + (height - hoverY); - ttCtx.tooltipPosition.moveYCrosshairs(clientY - seriesBound.top); - ttCtx.yaxisTooltipText[index].innerHTML = lbFormatter(val); - ttCtx.tooltipPosition.moveYAxisTooltip(index); - } - } - }]); - - return AxesTooltip; -}(); - -/** - * ApexCharts Core Tooltip Class to handle the tooltip generation. - * - * @module Tooltip - **/ - -var Tooltip = -/*#__PURE__*/ -function () { - function Tooltip(ctx) { - _classCallCheck(this, Tooltip); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.tConfig = w.config.tooltip; - this.tooltipUtil = new Utils$1(this); - this.tooltipLabels = new Labels(this); - this.tooltipPosition = new Position(this); - this.marker = new Marker(this); - this.intersect = new Intersect(this); - this.axesTooltip = new AxesTooltip(this); - this.showOnIntersect = this.tConfig.intersect; - this.showTooltipTitle = this.tConfig.x.show; - this.fixedTooltip = this.tConfig.fixed.enabled; - this.xaxisTooltip = null; - this.yaxisTTEls = null; - this.isBarShared = !w.globals.isBarHorizontal && this.tConfig.shared; - } - - _createClass(Tooltip, [{ - key: "getElTooltip", - value: function getElTooltip(ctx) { - if (!ctx) ctx = this; - return ctx.w.globals.dom.baseEl.querySelector('.apexcharts-tooltip'); - } - }, { - key: "getElXCrosshairs", - value: function getElXCrosshairs() { - return this.w.globals.dom.baseEl.querySelector('.apexcharts-xcrosshairs'); - } - }, { - key: "getElGrid", - value: function getElGrid() { - return this.w.globals.dom.baseEl.querySelector('.apexcharts-grid'); - } - }, { - key: "drawTooltip", - value: function drawTooltip(xyRatios) { - var w = this.w; - this.xyRatios = xyRatios; - this.blxaxisTooltip = w.config.xaxis.tooltip.enabled && w.globals.axisCharts; - this.blyaxisTooltip = w.config.yaxis[0].tooltip.enabled && w.globals.axisCharts; - this.allTooltipSeriesGroups = []; - - if (!w.globals.axisCharts) { - this.showTooltipTitle = false; - } - - var tooltipEl = document.createElement('div'); - tooltipEl.classList.add('apexcharts-tooltip'); - tooltipEl.classList.add(this.tConfig.theme); - w.globals.dom.elWrap.appendChild(tooltipEl); - - if (w.globals.axisCharts) { - this.axesTooltip.drawXaxisTooltip(); - this.axesTooltip.drawYaxisTooltip(); - this.axesTooltip.setXCrosshairWidth(); - this.axesTooltip.handleYCrosshair(); - var xAxis = new XAxis(this.ctx); - this.xAxisTicksPositions = xAxis.getXAxisTicksPositions(); - } // we forcefully set intersect true for these conditions - - - if (w.globals.comboCharts && !this.tConfig.shared || this.tConfig.intersect && !this.tConfig.shared || (w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') && !this.tConfig.shared) { - this.showOnIntersect = true; - } - - if (w.config.markers.size === 0 || w.globals.markers.largestSize === 0) { - // when user don't want to show points all the time, but only on when hovering on series - this.marker.drawDynamicPoints(this); - } // no visible series, exit - - - if (w.globals.collapsedSeries.length === w.globals.series.length) return; - this.dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints; - this.dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints; - - if (this.showTooltipTitle) { - this.tooltipTitle = document.createElement('div'); - this.tooltipTitle.classList.add('apexcharts-tooltip-title'); - this.tooltipTitle.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily; - this.tooltipTitle.style.fontSize = this.tConfig.style.fontSize; - tooltipEl.appendChild(this.tooltipTitle); - } - - var ttItemsCnt = w.globals.series.length; // whether shared or not, default is shared - - if ((w.globals.xyCharts || w.globals.comboCharts) && this.tConfig.shared) { - if (!this.showOnIntersect) { - ttItemsCnt = w.globals.series.length; - } else { - ttItemsCnt = 1; - } - } - - this.ttItems = this.createTTElements(ttItemsCnt); - this.addSVGEvents(); - } - }, { - key: "createTTElements", - value: function createTTElements(ttItemsCnt) { - var w = this.w; - var ttItems = []; - var tooltipEl = this.getElTooltip(); - - for (var i = 0; i < ttItemsCnt; i++) { - var gTxt = document.createElement('div'); - gTxt.classList.add('apexcharts-tooltip-series-group'); - - if (this.tConfig.shared && this.tConfig.enabledOnSeries && Array.isArray(this.tConfig.enabledOnSeries)) { - if (this.tConfig.enabledOnSeries.indexOf(i) < 0) { - gTxt.classList.add('apexcharts-tooltip-series-group-hidden'); - } - } - - var point = document.createElement('span'); - point.classList.add('apexcharts-tooltip-marker'); - point.style.backgroundColor = w.globals.colors[i]; - gTxt.appendChild(point); - var gYZ = document.createElement('div'); - gYZ.classList.add('apexcharts-tooltip-text'); - gYZ.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily; - gYZ.style.fontSize = this.tConfig.style.fontSize; // y values group - - var gYValText = document.createElement('div'); - gYValText.classList.add('apexcharts-tooltip-y-group'); - var txtLabel = document.createElement('span'); - txtLabel.classList.add('apexcharts-tooltip-text-label'); - gYValText.appendChild(txtLabel); - var txtValue = document.createElement('span'); - txtValue.classList.add('apexcharts-tooltip-text-value'); - gYValText.appendChild(txtValue); // z values group - - var gZValText = document.createElement('div'); - gZValText.classList.add('apexcharts-tooltip-z-group'); - var txtZLabel = document.createElement('span'); - txtZLabel.classList.add('apexcharts-tooltip-text-z-label'); - gZValText.appendChild(txtZLabel); - var txtZValue = document.createElement('span'); - txtZValue.classList.add('apexcharts-tooltip-text-z-value'); - gZValText.appendChild(txtZValue); - gYZ.appendChild(gYValText); - gYZ.appendChild(gZValText); - gTxt.appendChild(gYZ); - tooltipEl.appendChild(gTxt); - ttItems.push(gTxt); - } - - return ttItems; - } - }, { - key: "addSVGEvents", - value: function addSVGEvents() { - var w = this.w; - var type = w.config.chart.type; - var tooltipEl = this.getElTooltip(); - var commonBar = !!(type === 'bar' || type === 'candlestick' || type === 'rangeBar'); - var hoverArea = w.globals.dom.Paper.node; - var elGrid = this.getElGrid(); - - if (elGrid) { - this.seriesBound = elGrid.getBoundingClientRect(); - } - - var tooltipY = []; - var tooltipX = []; - var seriesHoverParams = { - hoverArea: hoverArea, - elGrid: elGrid, - tooltipEl: tooltipEl, - tooltipY: tooltipY, - tooltipX: tooltipX, - ttItems: this.ttItems - }; - var points; - - if (w.globals.axisCharts) { - if (type === 'area' || type === 'line' || type === 'scatter' || type === 'bubble') { - points = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:longestSeries='true'] .apexcharts-marker"); - } else if (commonBar) { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-rangebar-area'); - } else if (type === 'heatmap') { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-heatmap'); - } else if (type === 'radar') { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-marker'); - } - - if (points && points.length) { - for (var p = 0; p < points.length; p++) { - tooltipY.push(points[p].getAttribute('cy')); - tooltipX.push(points[p].getAttribute('cx')); - } - } - } - - var validSharedChartTypes = w.globals.xyCharts && !this.showOnIntersect || w.globals.comboCharts && !this.showOnIntersect || commonBar && this.hasBars() && this.tConfig.shared; - - if (validSharedChartTypes) { - this.addPathsEventListeners([hoverArea], seriesHoverParams); - } else if (commonBar && !w.globals.comboCharts) { - this.addBarsEventListeners(seriesHoverParams); - } else if (type === 'bubble' || type === 'scatter' || type === 'radar' || this.showOnIntersect && (type === 'area' || type === 'line')) { - this.addPointsEventsListeners(seriesHoverParams); - } else if (!w.globals.axisCharts || type === 'heatmap') { - var seriesAll = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series'); - this.addPathsEventListeners(seriesAll, seriesHoverParams); - } - - if (this.showOnIntersect) { - var linePoints = w.globals.dom.baseEl.querySelectorAll('.apexcharts-line-series .apexcharts-marker'); - - if (linePoints.length > 0) { - // if we find any lineSeries, addEventListeners for them - this.addPathsEventListeners(linePoints, seriesHoverParams); - } - - var areaPoints = w.globals.dom.baseEl.querySelectorAll('.apexcharts-area-series .apexcharts-marker'); - - if (areaPoints.length > 0) { - // if we find any areaSeries, addEventListeners for them - this.addPathsEventListeners(areaPoints, seriesHoverParams); - } // combo charts may have bars, so add event listeners here too - - - if (this.hasBars() && !this.tConfig.shared) { - this.addBarsEventListeners(seriesHoverParams); - } - } - } - }, { - key: "drawFixedTooltipRect", - value: function drawFixedTooltipRect() { - var w = this.w; - var tooltipEl = this.getElTooltip(); - var tooltipRect = tooltipEl.getBoundingClientRect(); - var ttWidth = tooltipRect.width + 10; - var ttHeight = tooltipRect.height + 10; - var x = this.tConfig.fixed.offsetX; - var y = this.tConfig.fixed.offsetY; - - if (this.tConfig.fixed.position.toLowerCase().indexOf('right') > -1) { - x = x + w.globals.svgWidth - ttWidth + 10; - } - - if (this.tConfig.fixed.position.toLowerCase().indexOf('bottom') > -1) { - y = y + w.globals.svgHeight - ttHeight - 10; - } - - tooltipEl.style.left = x + 'px'; - tooltipEl.style.top = y + 'px'; - return { - x: x, - y: y, - ttWidth: ttWidth, - ttHeight: ttHeight - }; - } - }, { - key: "addPointsEventsListeners", - value: function addPointsEventsListeners(seriesHoverParams) { - var w = this.w; - var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers .apexcharts-marker'); - this.addPathsEventListeners(points, seriesHoverParams); - } - }, { - key: "addBarsEventListeners", - value: function addBarsEventListeners(seriesHoverParams) { - var w = this.w; - var bars = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-rangebar-area'); - this.addPathsEventListeners(bars, seriesHoverParams); - } - }, { - key: "addPathsEventListeners", - value: function addPathsEventListeners(paths, opts) { - var _this = this; - - var self = this; - - var _loop = function _loop(p) { - var extendedOpts = { - paths: paths[p], - tooltipEl: opts.tooltipEl, - tooltipY: opts.tooltipY, - tooltipX: opts.tooltipX, - elGrid: opts.elGrid, - hoverArea: opts.hoverArea, - ttItems: opts.ttItems - }; - _this.w.globals.tooltipOpts = extendedOpts; - var events = ['mousemove', 'mouseup', 'touchmove', 'mouseout', 'touchend']; - events.map(function (ev) { - return paths[p].addEventListener(ev, self.seriesHover.bind(self, extendedOpts), { - capture: false, - passive: true - }); - }); - }; - - for (var p = 0; p < paths.length; p++) { - _loop(p); - } - } - /* - ** The actual series hover function - */ - - }, { - key: "seriesHover", - value: function seriesHover(opt, e) { - var _this2 = this; - - var chartGroups = []; - var w = this.w; // if user has more than one charts in group, we need to sync - - if (w.config.chart.group) { - chartGroups = this.ctx.getGroupedCharts(); - } - - if (w.globals.axisCharts && (w.globals.minX === -Infinity && w.globals.maxX === Infinity || w.globals.dataPoints === 0)) { - return; - } - - if (chartGroups.length) { - chartGroups.forEach(function (ch) { - var tooltipEl = _this2.getElTooltip(ch); - - var newOpts = { - paths: opt.paths, - tooltipEl: tooltipEl, - tooltipY: opt.tooltipY, - tooltipX: opt.tooltipX, - elGrid: opt.elGrid, - hoverArea: opt.hoverArea, - ttItems: ch.w.globals.tooltip.ttItems // all the charts should have the same minX and maxX (same xaxis) for multiple tooltips to work correctly - - }; - - if (ch.w.globals.minX === _this2.w.globals.minX && ch.w.globals.maxX === _this2.w.globals.maxX) { - ch.w.globals.tooltip.seriesHoverByContext({ - chartCtx: ch, - ttCtx: ch.w.globals.tooltip, - opt: newOpts, - e: e - }); - } - }); - } else { - this.seriesHoverByContext({ - chartCtx: this.ctx, - ttCtx: this.w.globals.tooltip, - opt: opt, - e: e - }); - } - } - }, { - key: "seriesHoverByContext", - value: function seriesHoverByContext(_ref) { - var chartCtx = _ref.chartCtx, - ttCtx = _ref.ttCtx, - opt = _ref.opt, - e = _ref.e; - var w = chartCtx.w; - var tooltipEl = this.getElTooltip(); // tooltipRect is calculated on every mousemove, because the text is dynamic - - ttCtx.tooltipRect = { - x: 0, - y: 0, - ttWidth: tooltipEl.getBoundingClientRect().width, - ttHeight: tooltipEl.getBoundingClientRect().height - }; - ttCtx.e = e; // highlight the current hovered bars - - if (ttCtx.hasBars() && !w.globals.comboCharts && !ttCtx.isBarShared) { - if (this.tConfig.onDatasetHover.highlightDataSeries) { - var series = new Series(chartCtx); - series.toggleSeriesOnHover(e, e.target.parentNode); - } - } - - if (ttCtx.fixedTooltip) { - ttCtx.drawFixedTooltipRect(); - } - - if (w.globals.axisCharts) { - ttCtx.axisChartsTooltips({ - e: e, - opt: opt, - tooltipRect: ttCtx.tooltipRect - }); - } else { - // non-plot charts i.e pie/donut/circle - ttCtx.nonAxisChartsTooltips({ - e: e, - opt: opt, - tooltipRect: ttCtx.tooltipRect - }); - } - } // tooltip handling for line/area/bar/columns/scatter - - }, { - key: "axisChartsTooltips", - value: function axisChartsTooltips(_ref2) { - var e = _ref2.e, - opt = _ref2.opt; - var w = this.w; - var j, x, y; - var self = this; - var capj = null; - var seriesBound = opt.elGrid.getBoundingClientRect(); - var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; - var clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY; - this.clientY = clientY; - this.clientX = clientX; - - if (clientY < seriesBound.top || clientY > seriesBound.top + seriesBound.height) { - self.handleMouseOut(opt); - return; - } - - if (Array.isArray(this.tConfig.enabledOnSeries)) { - var index = parseInt(opt.paths.getAttribute('index')); - - if (this.tConfig.enabledOnSeries.indexOf(index) < 0) { - self.handleMouseOut(opt); - return; - } - } - - var tooltipEl = this.getElTooltip(); - var xcrosshairs = this.getElXCrosshairs(); - var isStickyTooltip = w.globals.xyCharts || w.config.chart.type === 'bar' && !w.globals.isBarHorizontal && this.hasBars() && this.tConfig.shared || w.globals.comboCharts && this.hasBars; - - if (w.globals.isBarHorizontal && this.hasBars()) { - isStickyTooltip = false; - } - - if (e.type === 'mousemove' || e.type === 'touchmove' || e.type === 'mouseup') { - if (xcrosshairs !== null) { - xcrosshairs.classList.add('active'); - } - - if (self.ycrosshairs !== null && self.blyaxisTooltip) { - self.ycrosshairs.classList.add('active'); - } - - if (isStickyTooltip && !self.showOnIntersect) { - capj = self.tooltipUtil.getNearestValues({ - context: self, - hoverArea: opt.hoverArea, - elGrid: opt.elGrid, - clientX: clientX, - clientY: clientY, - hasBars: self.hasBars - }); - j = capj.j; - var capturedSeries = capj.capturedSeries; - - if (capj.hoverX < 0 || capj.hoverX > w.globals.gridWidth) { - self.handleMouseOut(opt); - return; - } - - if (capturedSeries !== null) { - var ignoreNull = w.globals.series[capturedSeries][j] === null; - - if (ignoreNull) { - opt.tooltipEl.classList.remove('active'); - return; - } - - if (typeof w.globals.series[capturedSeries][j] !== 'undefined') { - if (this.tConfig.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isinitialSeriesSameLen()) { - this.create(e, self, capturedSeries, j, opt.ttItems); - } else { - this.create(e, self, capturedSeries, j, opt.ttItems, false); - } - } else { - if (this.tooltipUtil.isXoverlap(j)) { - self.create(e, self, 0, j, opt.ttItems); - } - } - } else { - // couldn't capture any series. check if shared X is same, - // if yes, draw a grouped tooltip - if (this.tooltipUtil.isXoverlap(j)) { - self.create(e, self, 0, j, opt.ttItems); - } - } - } else { - if (w.config.chart.type === 'heatmap') { - var markerXY = this.intersect.handleHeatTooltip({ - e: e, - opt: opt, - x: x, - y: y - }); - x = markerXY.x; - y = markerXY.y; - tooltipEl.style.left = x + 'px'; - tooltipEl.style.top = y + 'px'; - } else { - if (this.hasBars) { - this.intersect.handleBarTooltip({ - e: e, - opt: opt - }); - } - - if (this.hasMarkers) { - // intersect - line/area/scatter/bubble - this.intersect.handleMarkerTooltip({ - e: e, - opt: opt, - x: x, - y: y - }); - } - } - } - - if (this.blyaxisTooltip) { - for (var yt = 0; yt < w.config.yaxis.length; yt++) { - self.axesTooltip.drawYaxisTooltipText(yt, clientY, self.xyRatios); - } - } - - opt.tooltipEl.classList.add('active'); - } else if (e.type === 'mouseout' || e.type === 'touchend') { - this.handleMouseOut(opt); - } - } // tooltip handling for pie/donuts - - }, { - key: "nonAxisChartsTooltips", - value: function nonAxisChartsTooltips(_ref3) { - var e = _ref3.e, - opt = _ref3.opt, - tooltipRect = _ref3.tooltipRect; - var w = this.w; - var rel = opt.paths.getAttribute('rel'); - var tooltipEl = this.getElTooltip(); - var seriesBound = w.globals.dom.elWrap.getBoundingClientRect(); - - if (e.type === 'mousemove' || e.type === 'touchmove') { - tooltipEl.classList.add('active'); - this.tooltipLabels.drawSeriesTexts({ - ttItems: opt.ttItems, - i: parseInt(rel) - 1, - shared: false - }); - var x = w.globals.clientX - seriesBound.left - tooltipRect.ttWidth / 2; - var y = w.globals.clientY - seriesBound.top - tooltipRect.ttHeight - 10; - tooltipEl.style.left = x + 'px'; - tooltipEl.style.top = y + 'px'; - } else if (e.type === 'mouseout' || e.type === 'touchend') { - tooltipEl.classList.remove('active'); - } - } - }, { - key: "deactivateHoverFilter", - value: function deactivateHoverFilter() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var allPaths = w.globals.dom.Paper.select(".apexcharts-bar-area"); - - for (var b = 0; b < allPaths.length; b++) { - graphics.pathMouseLeave(allPaths[b]); - } - } - }, { - key: "handleMouseOut", - value: function handleMouseOut(opt) { - var w = this.w; - var xcrosshairs = this.getElXCrosshairs(); - opt.tooltipEl.classList.remove('active'); - this.deactivateHoverFilter(); - - if (w.config.chart.type !== 'bubble') { - this.marker.resetPointsSize(); - } - - if (xcrosshairs !== null) { - xcrosshairs.classList.remove('active'); - } - - if (this.ycrosshairs !== null) { - this.ycrosshairs.classList.remove('active'); - } - - if (this.blxaxisTooltip) { - this.xaxisTooltip.classList.remove('active'); - } - - if (this.blyaxisTooltip) { - if (this.yaxisTTEls === null) { - this.yaxisTTEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxistooltip'); - } - - for (var i = 0; i < this.yaxisTTEls.length; i++) { - this.yaxisTTEls[i].classList.remove('active'); - } - } - } - }, { - key: "getElMarkers", - value: function getElMarkers() { - return this.w.globals.dom.baseEl.querySelectorAll(' .apexcharts-series-markers'); - } - }, { - key: "getAllMarkers", - value: function getAllMarkers() { - return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers .apexcharts-marker'); - } - }, { - key: "hasMarkers", - value: function hasMarkers() { - var markers = this.getElMarkers(); - return markers.length > 0; - } - }, { - key: "getElBars", - value: function getElBars() { - return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-rangebar-series'); - } - }, { - key: "hasBars", - value: function hasBars() { - var bars = this.getElBars(); - return bars.length > 0; - } - }, { - key: "markerClick", - value: function markerClick(e, seriesIndex, dataPointIndex) { - var w = this.w; - - if (typeof w.config.chart.events.markerClick === 'function') { - w.config.chart.events.markerClick(e, this.ctx, { - seriesIndex: seriesIndex, - dataPointIndex: dataPointIndex, - w: w - }); - } - - this.ctx.fireEvent('markerClick', [e, this.ctx, { - seriesIndex: seriesIndex, - dataPointIndex: dataPointIndex, - w: w - }]); - } - }, { - key: "create", - value: function create(e, context, capturedSeries, j, ttItems) { - var shared = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; - var w = this.w; - var ttCtx = context; - - if (e.type === 'mouseup') { - this.markerClick(e, capturedSeries, j); - } - - if (shared === null) shared = this.tConfig.shared; - var hasMarkers = this.hasMarkers(); - var bars = this.getElBars(); - - if (shared) { - ttCtx.tooltipLabels.drawSeriesTexts({ - ttItems: ttItems, - i: capturedSeries, - j: j, - shared: this.showOnIntersect ? false : this.tConfig.shared - }); - - if (hasMarkers) { - if (w.globals.markers.largestSize > 0) { - ttCtx.marker.enlargePoints(j); - } else { - ttCtx.tooltipPosition.moveDynamicPointsOnHover(j); - } - } - - if (this.hasBars()) { - this.barSeriesHeight = this.tooltipUtil.getBarsHeight(bars); - - if (this.barSeriesHeight > 0) { - // hover state, activate snap filter - var graphics = new Graphics(this.ctx); - var paths = w.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(j, "']")); // de-activate first - - this.deactivateHoverFilter(); - this.tooltipPosition.moveStickyTooltipOverBars(j); - - for (var b = 0; b < paths.length; b++) { - graphics.pathMouseEnter(paths[b]); - } - } - } - } else { - ttCtx.tooltipLabels.drawSeriesTexts({ - shared: false, - ttItems: ttItems, - i: capturedSeries, - j: j - }); - - if (this.hasBars()) { - ttCtx.tooltipPosition.moveStickyTooltipOverBars(j); - } - - if (hasMarkers) { - ttCtx.tooltipPosition.moveMarkers(capturedSeries, j); - } - } - } - }]); - - return Tooltip; -}(); - -var icoPan = "\n \n \n \n \n \n \n \n"; - -var icoZoom = "\n \n \n \n"; - -var icoReset = "\n \n \n"; - -var icoZoomIn = "\n \n \n\n"; - -var icoZoomOut = "\n \n \n\n"; - -var icoSelect = "\n \n \n"; - -var icoMenu = ""; - -/** - * ApexCharts Toolbar Class for creating toolbar in axis based charts. - * - * @module Toolbar - **/ - -var Toolbar = -/*#__PURE__*/ -function () { - function Toolbar(ctx) { - _classCallCheck(this, Toolbar); - - this.ctx = ctx; - this.w = ctx.w; - this.ev = this.w.config.chart.events; - this.localeValues = this.w.globals.locale.toolbar; - } - - _createClass(Toolbar, [{ - key: "createToolbar", - value: function createToolbar() { - var w = this.w; - var elToolbarWrap = document.createElement('div'); - elToolbarWrap.setAttribute('class', 'apexcharts-toolbar'); - w.globals.dom.elWrap.appendChild(elToolbarWrap); - this.elZoom = document.createElement('div'); - this.elZoomIn = document.createElement('div'); - this.elZoomOut = document.createElement('div'); - this.elPan = document.createElement('div'); - this.elSelection = document.createElement('div'); - this.elZoomReset = document.createElement('div'); - this.elMenuIcon = document.createElement('div'); - this.elMenu = document.createElement('div'); - this.elCustomIcons = []; - this.t = w.config.chart.toolbar.tools; - - if (Array.isArray(this.t.customIcons)) { - for (var i = 0; i < this.t.customIcons.length; i++) { - this.elCustomIcons.push(document.createElement('div')); - } - } - - this.elMenuItems = []; - var toolbarControls = []; - - if (this.t.zoomin && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: this.elZoomIn, - icon: typeof this.t.zoomin === 'string' ? this.t.zoomin : icoZoomIn, - title: this.localeValues.zoomIn, - class: 'apexcharts-zoom-in-icon' - }); - } - - if (this.t.zoomout && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: this.elZoomOut, - icon: typeof this.t.zoomout === 'string' ? this.t.zoomout : icoZoomOut, - title: this.localeValues.zoomOut, - class: 'apexcharts-zoom-out-icon' - }); - } - - if (this.t.zoom && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: this.elZoom, - icon: typeof this.t.zoom === 'string' ? this.t.zoom : icoZoom, - title: this.localeValues.selectionZoom, - class: w.globals.isTouchDevice ? 'hidden' : 'apexcharts-zoom-icon' - }); - } - - if (this.t.selection && w.config.chart.selection.enabled) { - toolbarControls.push({ - el: this.elSelection, - icon: typeof this.t.selection === 'string' ? this.t.selection : icoSelect, - title: this.localeValues.selection, - class: w.globals.isTouchDevice ? 'hidden' : 'apexcharts-selection-icon' - }); - } - - if (this.t.pan && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: this.elPan, - icon: typeof this.t.pan === 'string' ? this.t.pan : icoPan, - title: this.localeValues.pan, - class: w.globals.isTouchDevice ? 'hidden' : 'apexcharts-pan-icon' - }); - } - - if (this.t.reset && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: this.elZoomReset, - icon: typeof this.t.reset === 'string' ? this.t.reset : icoReset, - title: this.localeValues.reset, - class: 'apexcharts-reset-zoom-icon' - }); - } - - if (this.t.download) { - toolbarControls.push({ - el: this.elMenuIcon, - icon: typeof this.t.download === 'string' ? this.t.download : icoMenu, - title: this.localeValues.menu, - class: 'apexcharts-menu-icon' - }); - } - - for (var _i = 0; _i < this.elCustomIcons.length; _i++) { - toolbarControls.push({ - el: this.elCustomIcons[_i], - icon: this.t.customIcons[_i].icon, - title: this.t.customIcons[_i].title, - index: this.t.customIcons[_i].index, - class: 'apexcharts-toolbar-custom-icon ' + this.t.customIcons[_i].class - }); - } - - toolbarControls.forEach(function (t, index) { - if (t.index) { - Utils.moveIndexInArray(toolbarControls, index, t.index); - } - }); - - for (var _i2 = 0; _i2 < toolbarControls.length; _i2++) { - Graphics.setAttrs(toolbarControls[_i2].el, { - class: toolbarControls[_i2].class, - title: toolbarControls[_i2].title - }); - toolbarControls[_i2].el.innerHTML = toolbarControls[_i2].icon; - elToolbarWrap.appendChild(toolbarControls[_i2].el); - } - - elToolbarWrap.appendChild(this.elMenu); - Graphics.setAttrs(this.elMenu, { - class: 'apexcharts-menu' - }); - var menuItems = [{ - name: 'exportSVG', - title: this.localeValues.exportToSVG - }, { - name: 'exportPNG', - title: this.localeValues.exportToPNG - }]; - - for (var _i3 = 0; _i3 < menuItems.length; _i3++) { - this.elMenuItems.push(document.createElement('div')); - this.elMenuItems[_i3].innerHTML = menuItems[_i3].title; - Graphics.setAttrs(this.elMenuItems[_i3], { - class: "apexcharts-menu-item ".concat(menuItems[_i3].name), - title: menuItems[_i3].title - }); - this.elMenu.appendChild(this.elMenuItems[_i3]); - } - - if (w.globals.zoomEnabled) { - this.elZoom.classList.add('selected'); - } else if (w.globals.panEnabled) { - this.elPan.classList.add('selected'); - } else if (w.globals.selectionEnabled) { - this.elSelection.classList.add('selected'); - } - - this.addToolbarEventListeners(); - } - }, { - key: "addToolbarEventListeners", - value: function addToolbarEventListeners() { - var _this = this; - - this.elZoomReset.addEventListener('click', this.handleZoomReset.bind(this)); - this.elSelection.addEventListener('click', this.toggleSelection.bind(this)); - this.elZoom.addEventListener('click', this.toggleZooming.bind(this)); - this.elZoomIn.addEventListener('click', this.handleZoomIn.bind(this)); - this.elZoomOut.addEventListener('click', this.handleZoomOut.bind(this)); - this.elPan.addEventListener('click', this.togglePanning.bind(this)); - this.elMenuIcon.addEventListener('click', this.toggleMenu.bind(this)); - this.elMenuItems.forEach(function (m) { - if (m.classList.contains('exportSVG')) { - m.addEventListener('click', _this.downloadSVG.bind(_this)); - } else if (m.classList.contains('exportPNG')) { - m.addEventListener('click', _this.downloadPNG.bind(_this)); - } - }); - - for (var i = 0; i < this.t.customIcons.length; i++) { - this.elCustomIcons[i].addEventListener('click', this.t.customIcons[i].click); - } - } - }, { - key: "toggleSelection", - value: function toggleSelection() { - this.toggleOtherControls(); - this.w.globals.selectionEnabled = !this.w.globals.selectionEnabled; - - if (!this.elSelection.classList.contains('selected')) { - this.elSelection.classList.add('selected'); - } else { - this.elSelection.classList.remove('selected'); - } - } - }, { - key: "toggleZooming", - value: function toggleZooming() { - this.toggleOtherControls(); - this.w.globals.zoomEnabled = !this.w.globals.zoomEnabled; - - if (!this.elZoom.classList.contains('selected')) { - this.elZoom.classList.add('selected'); - } else { - this.elZoom.classList.remove('selected'); - } - } - }, { - key: "getToolbarIconsReference", - value: function getToolbarIconsReference() { - var w = this.w; - - if (!this.elZoom) { - this.elZoom = w.globals.dom.baseEl.querySelector('.apexcharts-zoom-icon'); - } - - if (!this.elPan) { - this.elPan = w.globals.dom.baseEl.querySelector('.apexcharts-pan-icon'); - } - - if (!this.elSelection) { - this.elSelection = w.globals.dom.baseEl.querySelector('.apexcharts-selection-icon'); - } - } - }, { - key: "enableZooming", - value: function enableZooming() { - this.toggleOtherControls(); - this.w.globals.zoomEnabled = true; - - if (this.elZoom) { - this.elZoom.classList.add('selected'); - } - - if (this.elPan) { - this.elPan.classList.remove('selected'); - } - } - }, { - key: "enablePanning", - value: function enablePanning() { - this.toggleOtherControls(); - this.w.globals.panEnabled = true; - - if (this.elPan) { - this.elPan.classList.add('selected'); - } - - if (this.elZoom) { - this.elZoom.classList.remove('selected'); - } - } - }, { - key: "togglePanning", - value: function togglePanning() { - this.toggleOtherControls(); - this.w.globals.panEnabled = !this.w.globals.panEnabled; - - if (!this.elPan.classList.contains('selected')) { - this.elPan.classList.add('selected'); - } else { - this.elPan.classList.remove('selected'); - } - } - }, { - key: "toggleOtherControls", - value: function toggleOtherControls() { - var w = this.w; - w.globals.panEnabled = false; - w.globals.zoomEnabled = false; - w.globals.selectionEnabled = false; - this.getToolbarIconsReference(); - - if (this.elPan) { - this.elPan.classList.remove('selected'); - } - - if (this.elSelection) { - this.elSelection.classList.remove('selected'); - } - - if (this.elZoom) { - this.elZoom.classList.remove('selected'); - } - } - }, { - key: "handleZoomIn", - value: function handleZoomIn() { - var w = this.w; - var centerX = (w.globals.minX + w.globals.maxX) / 2; - var newMinX = (w.globals.minX + centerX) / 2; - var newMaxX = (w.globals.maxX + centerX) / 2; - - if (!w.globals.disableZoomIn) { - this.zoomUpdateOptions(newMinX, newMaxX); - } - } - }, { - key: "handleZoomOut", - value: function handleZoomOut() { - var w = this.w; // avoid zooming out beyond 1000 which may result in NaN values being printed on x-axis - - if (w.config.xaxis.type === 'datetime' && new Date(w.globals.minX).getUTCFullYear() < 1000) { - return; - } - - var centerX = (w.globals.minX + w.globals.maxX) / 2; - var newMinX = w.globals.minX - (centerX - w.globals.minX); - var newMaxX = w.globals.maxX - (centerX - w.globals.maxX); - - if (!w.globals.disableZoomOut) { - this.zoomUpdateOptions(newMinX, newMaxX); - } - } - }, { - key: "zoomUpdateOptions", - value: function zoomUpdateOptions(newMinX, newMaxX) { - var xaxis = { - min: newMinX, - max: newMaxX - }; - var beforeZoomRange = this.getBeforeZoomRange(xaxis); - - if (beforeZoomRange) { - xaxis = beforeZoomRange.xaxis; - } - - this.w.globals.zoomed = true; - - this.ctx._updateOptions({ - xaxis: xaxis - }, false, this.w.config.chart.animations.dynamicAnimation.enabled); - - this.zoomCallback(xaxis); - } - }, { - key: "zoomCallback", - value: function zoomCallback(xaxis, yaxis) { - if (typeof this.ev.zoomed === 'function') { - this.ev.zoomed(this.ctx, { - xaxis: xaxis, - yaxis: yaxis - }); - } - } - }, { - key: "getBeforeZoomRange", - value: function getBeforeZoomRange(xaxis, yaxis) { - var newRange = null; - - if (typeof this.ev.beforeZoom === 'function') { - newRange = this.ev.beforeZoom(this, { - xaxis: xaxis, - yaxis: yaxis - }); - } - - return newRange; - } - }, { - key: "toggleMenu", - value: function toggleMenu() { - if (this.elMenu.classList.contains('open')) { - this.elMenu.classList.remove('open'); - } else { - this.elMenu.classList.add('open'); - } - } - }, { - key: "downloadPNG", - value: function downloadPNG() { - var downloadPNG = new Exports(this.ctx); - downloadPNG.exportToPng(this.ctx); - this.toggleMenu(); - } - }, { - key: "downloadSVG", - value: function downloadSVG() { - var downloadSVG = new Exports(this.ctx); - downloadSVG.exportToSVG(); - this.toggleMenu(); - } - }, { - key: "handleZoomReset", - value: function handleZoomReset(e) { - var _this2 = this; - - var charts = this.ctx.getSyncedCharts(); - charts.forEach(function (ch) { - var w = ch.w; - - if (w.globals.minX !== w.globals.initialminX && w.globals.maxX !== w.globals.initialmaxX) { - ch.revertDefaultAxisMinMax(); - - if (typeof w.config.chart.events.zoomed === 'function') { - _this2.zoomCallback({ - min: w.config.xaxis.min, - max: w.config.xaxis.max - }); - } - - w.globals.zoomed = false; - - ch._updateSeries(w.globals.initialSeries, w.config.chart.animations.dynamicAnimation.enabled); - } - }); - } - }, { - key: "destroy", - value: function destroy() { - if (this.elZoomReset) { - this.elZoomReset.removeEventListener('click', this.handleZoomReset.bind(this)); - this.elSelection.removeEventListener('click', this.toggleSelection.bind(this)); - this.elZoom.removeEventListener('click', this.toggleZooming.bind(this)); - this.elZoomIn.removeEventListener('click', this.handleZoomIn.bind(this)); - this.elZoomOut.removeEventListener('click', this.handleZoomOut.bind(this)); - this.elPan.removeEventListener('click', this.togglePanning.bind(this)); - this.elMenuIcon.removeEventListener('click', this.toggleMenu.bind(this)); - } - - this.elZoom = null; - this.elZoomIn = null; - this.elZoomOut = null; - this.elPan = null; - this.elSelection = null; - this.elZoomReset = null; - this.elMenuIcon = null; - } - }]); - - return Toolbar; -}(); - -/** - * ApexCharts Zoom Class for handling zooming and panning on axes based charts. - * - * @module ZoomPanSelection - **/ - -var ZoomPanSelection = -/*#__PURE__*/ -function (_Toolbar) { - _inherits(ZoomPanSelection, _Toolbar); - - function ZoomPanSelection(ctx) { - var _this; - - _classCallCheck(this, ZoomPanSelection); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(ZoomPanSelection).call(this, ctx)); - _this.ctx = ctx; - _this.w = ctx.w; - _this.dragged = false; - _this.graphics = new Graphics(_this.ctx); - _this.eventList = ['mousedown', 'mousemove', 'touchstart', 'touchmove', 'mouseup', 'touchend']; - _this.clientX = 0; - _this.clientY = 0; - _this.startX = 0; - _this.endX = 0; - _this.dragX = 0; - _this.startY = 0; - _this.endY = 0; - _this.dragY = 0; - return _this; - } - - _createClass(ZoomPanSelection, [{ - key: "init", - value: function init(_ref) { - var _this2 = this; - - var xyRatios = _ref.xyRatios; - var w = this.w; - var me = this; - this.xyRatios = xyRatios; - this.zoomRect = this.graphics.drawRect(0, 0, 0, 0); - this.selectionRect = this.graphics.drawRect(0, 0, 0, 0); - this.gridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid'); - this.zoomRect.node.classList.add('apexcharts-zoom-rect'); - this.selectionRect.node.classList.add('apexcharts-selection-rect'); - w.globals.dom.elGraphical.add(this.zoomRect); - w.globals.dom.elGraphical.add(this.selectionRect); - - if (w.config.chart.selection.type === 'x') { - this.slDraggableRect = this.selectionRect.draggable({ - minX: 0, - minY: 0, - maxX: w.globals.gridWidth, - maxY: w.globals.gridHeight - }).on('dragmove', this.selectionDragging.bind(this, 'dragging')); - } else if (w.config.chart.selection.type === 'y') { - this.slDraggableRect = this.selectionRect.draggable({ - minX: 0, - maxX: w.globals.gridWidth - }).on('dragmove', this.selectionDragging.bind(this, 'dragging')); - } else { - this.slDraggableRect = this.selectionRect.draggable().on('dragmove', this.selectionDragging.bind(this, 'dragging')); - } - - this.preselectedSelection(); - this.hoverArea = w.globals.dom.baseEl.querySelector(w.globals.chartClass); - this.hoverArea.classList.add('zoomable'); - this.eventList.forEach(function (event) { - _this2.hoverArea.addEventListener(event, me.svgMouseEvents.bind(me, xyRatios), { - capture: false, - passive: true - }); - }); - } // remove the event listeners which were previously added on hover area - - }, { - key: "destroy", - value: function destroy() { - var _this3 = this; - - var me = this; - this.eventList.forEach(function (event) { - if (_this3.hoverArea) { - _this3.hoverArea.removeEventListener(event, me.svgMouseEvents.bind(me, me.xyRatios), { - capture: false, - passive: true - }); - } - }); - - if (this.slDraggableRect) { - this.slDraggableRect.draggable(false); - this.slDraggableRect.off(); - this.selectionRect.off(); - } - - this.selectionRect = null; - this.zoomRect = null; - this.gridRect = null; - } - }, { - key: "svgMouseEvents", - value: function svgMouseEvents(xyRatios, e) { - var w = this.w; - var me = this; - var toolbar = this.ctx.toolbar; - var zoomtype = w.globals.zoomEnabled ? w.config.chart.zoom.type : w.config.chart.selection.type; - - if (e.shiftKey) { - this.shiftWasPressed = true; - toolbar.enablePanning(); - } else { - if (this.shiftWasPressed) { - toolbar.enableZooming(); - this.shiftWasPressed = false; - } - } - - var falsePositives = e.target.classList.contains('apexcharts-selection-rect') || e.target.parentNode.classList.contains('apexcharts-toolbar'); - if (falsePositives) return; - me.clientX = e.type === 'touchmove' || e.type === 'touchstart' ? e.touches[0].clientX : e.type === 'touchend' ? e.changedTouches[0].clientX : e.clientX; - me.clientY = e.type === 'touchmove' || e.type === 'touchstart' ? e.touches[0].clientY : e.type === 'touchend' ? e.changedTouches[0].clientY : e.clientY; - - if (e.type === 'mousedown' && e.which === 1) { - var gridRectDim = me.gridRect.getBoundingClientRect(); - me.startX = me.clientX - gridRectDim.left; - me.startY = me.clientY - gridRectDim.top; - me.dragged = false; - me.w.globals.mousedown = true; - } - - if (e.type === 'mousemove' && e.which === 1 || e.type === 'touchmove') { - me.dragged = true; - - if (w.globals.panEnabled) { - w.globals.selection = null; - - if (me.w.globals.mousedown) { - me.panDragging({ - context: me, - zoomtype: zoomtype, - xyRatios: xyRatios - }); - } - } else { - if (me.w.globals.mousedown && w.globals.zoomEnabled || me.w.globals.mousedown && w.globals.selectionEnabled) { - me.selection = me.selectionDrawing({ - context: me, - zoomtype: zoomtype - }); - } - } - } - - if (e.type === 'mouseup' || e.type === 'touchend') { - // we will be calling getBoundingClientRect on each mousedown/mousemove/mouseup - var _gridRectDim = me.gridRect.getBoundingClientRect(); - - if (me.w.globals.mousedown) { - // user released the drag, now do all the calculations - me.endX = me.clientX - _gridRectDim.left; - me.endY = me.clientY - _gridRectDim.top; - me.dragX = Math.abs(me.endX - me.startX); - me.dragY = Math.abs(me.endY - me.startY); - - if (w.globals.zoomEnabled || w.globals.selectionEnabled) { - me.selectionDrawn({ - context: me, - zoomtype: zoomtype - }); - } - } - - if (w.globals.zoomEnabled) { - me.hideSelectionRect(this.selectionRect); - } - - me.dragged = false; - me.w.globals.mousedown = false; - } - - this.makeSelectionRectDraggable(); - } - }, { - key: "makeSelectionRectDraggable", - value: function makeSelectionRectDraggable() { - var w = this.w; - if (!this.selectionRect) return; - var rectDim = this.selectionRect.node.getBoundingClientRect(); - - if (rectDim.width > 0 && rectDim.height > 0) { - this.slDraggableRect.selectize().resize({ - constraint: { - minX: 0, - minY: 0, - maxX: w.globals.gridWidth, - maxY: w.globals.gridHeight - } - }).on('resizing', this.selectionDragging.bind(this, 'resizing')); - } - } - }, { - key: "preselectedSelection", - value: function preselectedSelection() { - var w = this.w; - var xyRatios = this.xyRatios; - - if (!w.globals.zoomEnabled) { - if (typeof w.globals.selection !== 'undefined' && w.globals.selection !== null) { - this.drawSelectionRect(w.globals.selection); - } else { - if (w.config.chart.selection.xaxis.min !== undefined && w.config.chart.selection.xaxis.max !== undefined) { - var x = (w.config.chart.selection.xaxis.min - w.globals.minX) / xyRatios.xRatio; - var width = w.globals.gridWidth - (w.globals.maxX - w.config.chart.selection.xaxis.max) / xyRatios.xRatio - x; - var selectionRect = { - x: x, - y: 0, - width: width, - height: w.globals.gridHeight, - translateX: 0, - translateY: 0, - selectionEnabled: true - }; - this.drawSelectionRect(selectionRect); - this.makeSelectionRectDraggable(); - - if (typeof w.config.chart.events.selection === 'function') { - w.config.chart.events.selection(this.ctx, { - xaxis: { - min: w.config.chart.selection.xaxis.min, - max: w.config.chart.selection.xaxis.max - }, - yaxis: {} - }); - } - } - } - } - } - }, { - key: "drawSelectionRect", - value: function drawSelectionRect(_ref2) { - var x = _ref2.x, - y = _ref2.y, - width = _ref2.width, - height = _ref2.height, - translateX = _ref2.translateX, - translateY = _ref2.translateY; - var w = this.w; - var zoomRect = this.zoomRect; - var selectionRect = this.selectionRect; - - if (this.dragged || w.globals.selection !== null) { - var scalingAttrs = { - transform: 'translate(' + translateX + ', ' + translateY + ')' // change styles based on zoom or selection - // zoom is Enabled and user has dragged, so draw blue rect - - }; - - if (w.globals.zoomEnabled && this.dragged) { - zoomRect.attr({ - x: x, - y: y, - width: width, - height: height, - fill: w.config.chart.zoom.zoomedArea.fill.color, - 'fill-opacity': w.config.chart.zoom.zoomedArea.fill.opacity, - stroke: w.config.chart.zoom.zoomedArea.stroke.color, - 'stroke-width': w.config.chart.zoom.zoomedArea.stroke.width, - 'stroke-opacity': w.config.chart.zoom.zoomedArea.stroke.opacity - }); - Graphics.setAttrs(zoomRect.node, scalingAttrs); - } // selection is enabled - - - if (w.globals.selectionEnabled) { - selectionRect.attr({ - x: x, - y: y, - width: width > 0 ? width : 0, - height: height > 0 ? height : 0, - fill: w.config.chart.selection.fill.color, - 'fill-opacity': w.config.chart.selection.fill.opacity, - stroke: w.config.chart.selection.stroke.color, - 'stroke-width': w.config.chart.selection.stroke.width, - 'stroke-dasharray': w.config.chart.selection.stroke.dashArray, - 'stroke-opacity': w.config.chart.selection.stroke.opacity - }); - Graphics.setAttrs(selectionRect.node, scalingAttrs); - } - } - } - }, { - key: "hideSelectionRect", - value: function hideSelectionRect(rect) { - if (rect) { - rect.attr({ - x: 0, - y: 0, - width: 0, - height: 0 - }); - } - } - }, { - key: "selectionDrawing", - value: function selectionDrawing(_ref3) { - var context = _ref3.context, - zoomtype = _ref3.zoomtype; - var w = this.w; - var me = context; - var gridRectDim = this.gridRect.getBoundingClientRect(); - var startX = me.startX - 1; - var startY = me.startY; - var selectionWidth = me.clientX - gridRectDim.left - startX; - var selectionHeight = me.clientY - gridRectDim.top - startY; - var translateX = 0; - var translateY = 0; - var selectionRect = {}; - - if (Math.abs(selectionWidth + startX) > w.globals.gridWidth || me.clientX - gridRectDim.left < 0) { - // user dragged the mouse outside drawing area - // TODO: test the selectionRect and make sure it doesn't crosses drawing area - me.hideSelectionRect(this.zoomRect); - me.dragged = false; - me.w.globals.mousedown = false; - } // inverse selection X - - - if (startX > me.clientX - gridRectDim.left) { - selectionWidth = Math.abs(selectionWidth); - translateX = -selectionWidth; - } // inverse selection Y - - - if (startY > me.clientY - gridRectDim.top) { - selectionHeight = Math.abs(selectionHeight); - translateY = -selectionHeight; - } - - if (zoomtype === 'x') { - selectionRect = { - x: startX, - y: 0, - width: selectionWidth, - height: w.globals.gridHeight, - translateX: translateX, - translateY: 0 - }; - } else if (zoomtype === 'y') { - selectionRect = { - x: 0, - y: startY, - width: w.globals.gridWidth, - height: selectionHeight, - translateX: 0, - translateY: translateY - }; - } else { - selectionRect = { - x: startX, - y: startY, - width: selectionWidth, - height: selectionHeight, - translateX: translateX, - translateY: translateY - }; - } - - me.drawSelectionRect(selectionRect); - me.selectionDragging('resizing'); - return selectionRect; - } - }, { - key: "selectionDragging", - value: function selectionDragging(type, e) { - var _this4 = this; - - var w = this.w; - var xyRatios = this.xyRatios; - var selRect = this.selectionRect; - var timerInterval = 0; - - if (type === 'resizing') { - timerInterval = 30; - } - - if (typeof w.config.chart.events.selection === 'function' && w.globals.selectionEnabled) { - // a small debouncer is required when resizing to avoid freezing the chart - clearTimeout(this.w.globals.selectionResizeTimer); - this.w.globals.selectionResizeTimer = window.setTimeout(function () { - var gridRectDim = _this4.gridRect.getBoundingClientRect(); - - var selectionRect = selRect.node.getBoundingClientRect(); - var minX = w.globals.xAxisScale.niceMin + (selectionRect.left - gridRectDim.left) * xyRatios.xRatio; - var maxX = w.globals.xAxisScale.niceMin + (selectionRect.right - gridRectDim.left) * xyRatios.xRatio; - var minY = w.globals.yAxisScale[0].niceMin + (gridRectDim.bottom - selectionRect.bottom) * xyRatios.yRatio[0]; - var maxY = w.globals.yAxisScale[0].niceMax - (selectionRect.top - gridRectDim.top) * xyRatios.yRatio[0]; - w.config.chart.events.selection(_this4.ctx, { - xaxis: { - min: minX, - max: maxX - }, - yaxis: { - min: minY, - max: maxY - } - }); - }, timerInterval); - } - } - }, { - key: "selectionDrawn", - value: function selectionDrawn(_ref4) { - var context = _ref4.context, - zoomtype = _ref4.zoomtype; - var w = this.w; - var me = context; - var xyRatios = this.xyRatios; - var toolbar = this.ctx.toolbar; - - if (me.startX > me.endX) { - var tempX = me.startX; - me.startX = me.endX; - me.endX = tempX; - } - - if (me.startY > me.endY) { - var tempY = me.startY; - me.startY = me.endY; - me.endY = tempY; - } - - var xLowestValue = w.globals.xAxisScale.niceMin + me.startX * xyRatios.xRatio; - var xHighestValue = w.globals.xAxisScale.niceMin + me.endX * xyRatios.xRatio; // TODO: we will consider the 1st y axis values here for getting highest and lowest y - - var yHighestValue = []; - var yLowestValue = []; - w.config.yaxis.forEach(function (yaxe, index) { - yHighestValue.push(Math.floor(w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[index] * me.startY)); - yLowestValue.push(Math.floor(w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[index] * me.endY)); - }); - - if (me.dragged && (me.dragX > 10 || me.dragY > 10) && xLowestValue !== xHighestValue) { - if (w.globals.zoomEnabled) { - var yaxis = Utils.clone(w.config.yaxis); // before zooming in/out, store the last yaxis and xaxis range, so that when user hits the RESET button, we get the original range - // also - make sure user is not already zoomed in/out - otherwise we will store zoomed values in lastAxis - - if (!w.globals.zoomed) { - w.globals.lastXAxis = Utils.clone(w.config.xaxis); - w.globals.lastYAxis = Utils.clone(w.config.yaxis); - } - - var xaxis = { - min: xLowestValue, - max: xHighestValue - }; - - if (zoomtype === 'xy' || zoomtype === 'y') { - yaxis.forEach(function (yaxe, index) { - yaxis[index].min = yLowestValue[index]; - yaxis[index].max = yHighestValue[index]; - }); - } - - if (w.config.chart.zoom.autoScaleYaxis) { - var scale = new Range(me.ctx); - yaxis = scale.autoScaleY(me.ctx, { - xaxis: xaxis - }); - } - - if (toolbar) { - var beforeZoomRange = toolbar.getBeforeZoomRange(xaxis, yaxis); - - if (beforeZoomRange) { - xaxis = beforeZoomRange.xaxis ? beforeZoomRange.xaxis : xaxis; - yaxis = beforeZoomRange.yaxis ? beforeZoomRange.yaxe : yaxis; - } - } - - me.ctx._updateOptions({ - xaxis: xaxis, - yaxis: yaxis - }, false, me.w.config.chart.animations.dynamicAnimation.enabled); - - if (typeof w.config.chart.events.zoomed === 'function') { - toolbar.zoomCallback(xaxis, yaxis); - } - - w.globals.zoomed = true; - } else if (w.globals.selectionEnabled) { - var _yaxis = null; - var _xaxis = null; - _xaxis = { - min: xLowestValue, - max: xHighestValue - }; - - if (zoomtype === 'xy' || zoomtype === 'y') { - _yaxis = Utils.clone(w.config.yaxis); - - _yaxis.forEach(function (yaxe, index) { - _yaxis[index].min = yLowestValue[index]; - _yaxis[index].max = yHighestValue[index]; - }); - } - - w.globals.selection = me.selection; - - if (typeof w.config.chart.events.selection === 'function') { - w.config.chart.events.selection(me.ctx, { - xaxis: _xaxis, - yaxis: _yaxis - }); - } - } - } - } - }, { - key: "panDragging", - value: function panDragging(_ref5) { - var context = _ref5.context, - zoomtype = _ref5.zoomtype; - var w = this.w; - var me = context; - var moveDirection; // check to make sure there is data to compare against - - if (typeof w.globals.lastClientPosition.x !== 'undefined') { - // get the change from last position to this position - var deltaX = w.globals.lastClientPosition.x - me.clientX; - var deltaY = w.globals.lastClientPosition.y - me.clientY; // check which direction had the highest amplitude and then figure out direction by checking if the value is greater or less than zero - - if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX > 0) { - moveDirection = 'left'; - } else if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX < 0) { - moveDirection = 'right'; - } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY > 0) { - moveDirection = 'up'; - } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY < 0) { - moveDirection = 'down'; - } - } // set the new last position to the current for next time (to get the position of drag) - - - w.globals.lastClientPosition = { - x: me.clientX, - y: me.clientY - }; - var xLowestValue = w.globals.minX; - var xHighestValue = w.globals.maxX; - this.panScrolled(moveDirection, xLowestValue, xHighestValue); - } - }, { - key: "panScrolled", - value: function panScrolled(moveDirection, xLowestValue, xHighestValue) { - var w = this.w; - var xyRatios = this.xyRatios; - var yaxis = Utils.clone(w.config.yaxis); - - if (moveDirection === 'left') { - xLowestValue = w.globals.minX + w.globals.gridWidth / 15 * xyRatios.xRatio; - xHighestValue = w.globals.maxX + w.globals.gridWidth / 15 * xyRatios.xRatio; - } else if (moveDirection === 'right') { - xLowestValue = w.globals.minX - w.globals.gridWidth / 15 * xyRatios.xRatio; - xHighestValue = w.globals.maxX - w.globals.gridWidth / 15 * xyRatios.xRatio; - } - - if (xLowestValue < w.globals.initialminX || xHighestValue > w.globals.initialmaxX) { - xLowestValue = w.globals.minX; - xHighestValue = w.globals.maxX; - } - - var xaxis = { - min: xLowestValue, - max: xHighestValue - }; - - if (w.config.chart.zoom.autoScaleYaxis) { - var scale = new Range(me.ctx); - yaxis = scale.autoScaleY(me.ctx, { - xaxis: xaxis - }); - } - - this.ctx._updateOptions({ - xaxis: { - min: xLowestValue, - max: xHighestValue - }, - yaxis: yaxis - }, false, false); - - if (typeof w.config.chart.events.scrolled === 'function') { - w.config.chart.events.scrolled(this.ctx, { - xaxis: { - min: xLowestValue, - max: xHighestValue - } - }); - } - } - }]); - - return ZoomPanSelection; -}(Toolbar); - -var TitleSubtitle = -/*#__PURE__*/ -function () { - function TitleSubtitle(ctx) { - _classCallCheck(this, TitleSubtitle); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(TitleSubtitle, [{ - key: "draw", - value: function draw() { - this.drawTitleSubtitle('title'); - this.drawTitleSubtitle('subtitle'); - } - }, { - key: "drawTitleSubtitle", - value: function drawTitleSubtitle(type) { - var w = this.w; - var tsConfig = type === 'title' ? w.config.title : w.config.subtitle; - var x = w.globals.svgWidth / 2; - var y = tsConfig.offsetY; - var textAnchor = 'middle'; - - if (tsConfig.align === 'left') { - x = 10; - textAnchor = 'start'; - } else if (tsConfig.align === 'right') { - x = w.globals.svgWidth - 10; - textAnchor = 'end'; - } - - x = x + tsConfig.offsetX; - y = y + parseInt(tsConfig.style.fontSize) + 2; - - if (tsConfig.text !== undefined) { - var graphics = new Graphics(this.ctx); - var titleText = graphics.drawText({ - x: x, - y: y, - text: tsConfig.text, - textAnchor: textAnchor, - fontSize: tsConfig.style.fontSize, - fontFamily: tsConfig.style.fontFamily, - foreColor: tsConfig.style.color, - opacity: 1 - }); - titleText.node.setAttribute('class', "apexcharts-".concat(type, "-text")); - w.globals.dom.Paper.add(titleText); - } - } - }]); - - return TitleSubtitle; -}(); - -(function (root, factory) { - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define(function () { - return factory(root, root.document); - }); - /* below check fixes #412 */ - } else if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object' && typeof module !== 'undefined') { - module.exports = root.document ? factory(root, root.document) : function (w) { - return factory(w, w.document); - }; - } else { - root.SVG = factory(root, root.document); - } -})(typeof window !== 'undefined' ? window : undefined, function (window, document) { - // Find global reference - uses 'this' by default when available, - // falls back to 'window' otherwise (for bundlers like Webpack) - var globalRef = typeof this !== 'undefined' ? this : window; // The main wrapping element - - var SVG = globalRef.SVG = function (element) { - if (SVG.supported) { - element = new SVG.Doc(element); - - if (!SVG.parser.draw) { - SVG.prepare(); - } - - return element; - } - }; // Default namespaces - - - SVG.ns = 'http://www.w3.org/2000/svg'; - SVG.xmlns = 'http://www.w3.org/2000/xmlns/'; - SVG.xlink = 'http://www.w3.org/1999/xlink'; - SVG.svgjs = 'http://svgjs.com/svgjs'; // Svg support test - - SVG.supported = function () { - return true; // !!document.createElementNS && - // !! document.createElementNS(SVG.ns,'svg').createSVGRect - }(); // Don't bother to continue if SVG is not supported - - - if (!SVG.supported) return false; // Element id sequence - - SVG.did = 1000; // Get next named element id - - SVG.eid = function (name) { - return 'Svgjs' + capitalize(name) + SVG.did++; - }; // Method for element creation - - - SVG.create = function (name) { - // create element - var element = document.createElementNS(this.ns, name); // apply unique id - - element.setAttribute('id', this.eid(name)); - return element; - }; // Method for extending objects - - - SVG.extend = function () { - var modules, methods, key, i; // Get list of modules - - modules = [].slice.call(arguments); // Get object with extensions - - methods = modules.pop(); - - for (i = modules.length - 1; i >= 0; i--) { - if (modules[i]) { - for (key in methods) { - modules[i].prototype[key] = methods[key]; - } - } - } // Make sure SVG.Set inherits any newly added methods - - - if (SVG.Set && SVG.Set.inherit) { - SVG.Set.inherit(); - } - }; // Invent new element - - - SVG.invent = function (config) { - // Create element initializer - var initializer = typeof config.create === 'function' ? config.create : function () { - this.constructor.call(this, SVG.create(config.create)); - }; // Inherit prototype - - if (config.inherit) { - initializer.prototype = new config.inherit(); - } // Extend with methods - - - if (config.extend) { - SVG.extend(initializer, config.extend); - } // Attach construct method to parent - - - if (config.construct) { - SVG.extend(config.parent || SVG.Container, config.construct); - } - - return initializer; - }; // Adopt existing svg elements - - - SVG.adopt = function (node) { - // check for presence of node - if (!node) return null; // make sure a node isn't already adopted - - if (node.instance) return node.instance; // initialize variables - - var element; // adopt with element-specific settings - - if (node.nodeName == 'svg') { - element = node.parentNode instanceof window.SVGElement ? new SVG.Nested() : new SVG.Doc(); - } else if (node.nodeName == 'linearGradient') { - element = new SVG.Gradient('linear'); - } else if (node.nodeName == 'radialGradient') { - element = new SVG.Gradient('radial'); - } else if (SVG[capitalize(node.nodeName)]) { - element = new SVG[capitalize(node.nodeName)](); - } else { - element = new SVG.Element(node); - } // ensure references - - - element.type = node.nodeName; - element.node = node; - node.instance = element; // SVG.Class specific preparations - - if (element instanceof SVG.Doc) { - element.namespace().defs(); - } // pull svgjs data from the dom (getAttributeNS doesn't work in html5) - - - element.setData(JSON.parse(node.getAttribute('svgjs:data')) || {}); - return element; - }; // Initialize parsing element - - - SVG.prepare = function () { - // Select document body and create invisible svg element - var body = document.getElementsByTagName('body')[0], - draw = (body ? new SVG.Doc(body) : SVG.adopt(document.documentElement).nested()).size(2, 0); // Create parser object - - SVG.parser = { - body: body || document.documentElement, - draw: draw.style('opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden').node, - poly: draw.polyline().node, - path: draw.path().node, - native: SVG.create('svg') - }; - }; - - SVG.parser = { - native: SVG.create('svg') - }; - document.addEventListener('DOMContentLoaded', function () { - if (!SVG.parser.draw) { - SVG.prepare(); - } - }, false); // Storage for regular expressions - - SVG.regex = { - // Parse unit value - numberAndUnit: /^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i, - // Parse hex value - hex: /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i, - // Parse rgb value - rgb: /rgb\((\d+),(\d+),(\d+)\)/, - // Parse reference id - reference: /#([a-z0-9\-_]+)/i, - // splits a transformation chain - transforms: /\)\s*,?\s*/, - // Whitespace - whitespace: /\s/g, - // Test hex value - isHex: /^#[a-f0-9]{3,6}$/i, - // Test rgb value - isRgb: /^rgb\(/, - // Test css declaration - isCss: /[^:]+:[^;]+;?/, - // Test for blank string - isBlank: /^(\s+)?$/, - // Test for numeric string - isNumber: /^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, - // Test for percent value - isPercent: /^-?[\d\.]+%$/, - // Test for image url - isImage: /\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i, - // split at whitespace and comma - delimiter: /[\s,]+/, - // The following regex are used to parse the d attribute of a path - // Matches all hyphens which are not after an exponent - hyphen: /([^e])\-/gi, - // Replaces and tests for all path letters - pathLetters: /[MLHVCSQTAZ]/gi, - // yes we need this one, too - isPathLetter: /[MLHVCSQTAZ]/i, - // matches 0.154.23.45 - numbersWithDots: /((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi, - // matches . - dots: /\./g - }; - SVG.utils = { - // Map function - map: function map(array, block) { - var i, - il = array.length, - result = []; - - for (i = 0; i < il; i++) { - result.push(block(array[i])); - } - - return result; - }, - // Filter function - filter: function filter(array, block) { - var i, - il = array.length, - result = []; - - for (i = 0; i < il; i++) { - if (block(array[i])) { - result.push(array[i]); - } - } - - return result; - }, - // Degrees to radians - radians: function radians(d) { - return d % 360 * Math.PI / 180; - }, - // Radians to degrees - degrees: function degrees(r) { - return r * 180 / Math.PI % 360; - }, - filterSVGElements: function filterSVGElements(nodes) { - return this.filter(nodes, function (el) { - return el instanceof window.SVGElement; - }); - } - }; - SVG.defaults = { - // Default attribute values - attrs: { - // fill and stroke - 'fill-opacity': 1, - 'stroke-opacity': 1, - 'stroke-width': 0, - 'stroke-linejoin': 'miter', - 'stroke-linecap': 'butt', - fill: '#000000', - stroke: '#000000', - opacity: 1, - // position - x: 0, - y: 0, - cx: 0, - cy: 0, - // size - width: 0, - height: 0, - // radius - r: 0, - rx: 0, - ry: 0, - // gradient - offset: 0, - 'stop-opacity': 1, - 'stop-color': '#000000', - // text - 'font-size': 16, - 'font-family': 'Helvetica, Arial, sans-serif', - 'text-anchor': 'start' - } // Module for color convertions - - }; - - SVG.Color = function (color) { - var match; // initialize defaults - - this.r = 0; - this.g = 0; - this.b = 0; - if (!color) return; // parse color - - if (typeof color === 'string') { - if (SVG.regex.isRgb.test(color)) { - // get rgb values - match = SVG.regex.rgb.exec(color.replace(SVG.regex.whitespace, '')); // parse numeric values - - this.r = parseInt(match[1]); - this.g = parseInt(match[2]); - this.b = parseInt(match[3]); - } else if (SVG.regex.isHex.test(color)) { - // get hex values - match = SVG.regex.hex.exec(fullHex(color)); // parse numeric values - - this.r = parseInt(match[1], 16); - this.g = parseInt(match[2], 16); - this.b = parseInt(match[3], 16); - } - } else if (_typeof(color) === 'object') { - this.r = color.r; - this.g = color.g; - this.b = color.b; - } - }; - - SVG.extend(SVG.Color, { - // Default to hex conversion - toString: function toString() { - return this.toHex(); - }, - // Build hex value - toHex: function toHex() { - return '#' + compToHex(this.r) + compToHex(this.g) + compToHex(this.b); - }, - // Build rgb value - toRgb: function toRgb() { - return 'rgb(' + [this.r, this.g, this.b].join() + ')'; - }, - // Calculate true brightness - brightness: function brightness() { - return this.r / 255 * 0.30 + this.g / 255 * 0.59 + this.b / 255 * 0.11; - }, - // Make color morphable - morph: function morph(color) { - this.destination = new SVG.Color(color); - return this; - }, - // Get morphed color at given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; // normalise pos - - pos = pos < 0 ? 0 : pos > 1 ? 1 : pos; // generate morphed color - - return new SVG.Color({ - r: ~~(this.r + (this.destination.r - this.r) * pos), - g: ~~(this.g + (this.destination.g - this.g) * pos), - b: ~~(this.b + (this.destination.b - this.b) * pos) - }); - } - }); // Testers - // Test if given value is a color string - - SVG.Color.test = function (color) { - color += ''; - return SVG.regex.isHex.test(color) || SVG.regex.isRgb.test(color); - }; // Test if given value is a rgb object - - - SVG.Color.isRgb = function (color) { - return color && typeof color.r === 'number' && typeof color.g === 'number' && typeof color.b === 'number'; - }; // Test if given value is a color - - - SVG.Color.isColor = function (color) { - return SVG.Color.isRgb(color) || SVG.Color.test(color); - }; // Module for array conversion - - - SVG.Array = function (array, fallback) { - array = (array || []).valueOf(); // if array is empty and fallback is provided, use fallback - - if (array.length == 0 && fallback) { - array = fallback.valueOf(); - } // parse array - - - this.value = this.parse(array); - }; - - SVG.extend(SVG.Array, { - // Make array morphable - morph: function morph(array) { - this.destination = this.parse(array); // normalize length of arrays - - if (this.value.length != this.destination.length) { - var lastValue = this.value[this.value.length - 1], - lastDestination = this.destination[this.destination.length - 1]; - - while (this.value.length > this.destination.length) { - this.destination.push(lastDestination); - } - - while (this.value.length < this.destination.length) { - this.value.push(lastValue); - } - } - - return this; - }, - // Clean up any duplicate points - settle: function settle() { - // find all unique values - for (var i = 0, il = this.value.length, seen = []; i < il; i++) { - if (seen.indexOf(this.value[i]) == -1) { - seen.push(this.value[i]); - } - } // set new value - - - return this.value = seen; - }, - // Get morphed array at given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; // generate morphed array - - for (var i = 0, il = this.value.length, array = []; i < il; i++) { - array.push(this.value[i] + (this.destination[i] - this.value[i]) * pos); - } - - return new SVG.Array(array); - }, - // Convert array to string - toString: function toString() { - return this.value.join(' '); - }, - // Real value - valueOf: function valueOf() { - return this.value; - }, - // Parse whitespace separated string - parse: function parse(array) { - array = array.valueOf(); // if already is an array, no need to parse it - - if (Array.isArray(array)) return array; - return this.split(array); - }, - // Strip unnecessary whitespace - split: function split(string) { - return string.trim().split(SVG.regex.delimiter).map(parseFloat); - }, - // Reverse array - reverse: function reverse() { - this.value.reverse(); - return this; - }, - clone: function clone() { - var clone = new this.constructor(); - clone.value = array_clone(this.value); - return clone; - } - }); // Poly points array - - SVG.PointArray = function (array, fallback) { - SVG.Array.call(this, array, fallback || [[0, 0]]); - }; // Inherit from SVG.Array - - - SVG.PointArray.prototype = new SVG.Array(); - SVG.PointArray.prototype.constructor = SVG.PointArray; - SVG.extend(SVG.PointArray, { - // Convert array to string - toString: function toString() { - // convert to a poly point string - for (var i = 0, il = this.value.length, array = []; i < il; i++) { - array.push(this.value[i].join(',')); - } - - return array.join(' '); - }, - // Convert array to line object - toLine: function toLine() { - return { - x1: this.value[0][0], - y1: this.value[0][1], - x2: this.value[1][0], - y2: this.value[1][1] - }; - }, - // Get morphed array at given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; // generate morphed point string - - for (var i = 0, il = this.value.length, array = []; i < il; i++) { - array.push([this.value[i][0] + (this.destination[i][0] - this.value[i][0]) * pos, this.value[i][1] + (this.destination[i][1] - this.value[i][1]) * pos]); - } - - return new SVG.PointArray(array); - }, - // Parse point string and flat array - parse: function parse(array) { - var points = []; - array = array.valueOf(); // if it is an array - - if (Array.isArray(array)) { - // and it is not flat, there is no need to parse it - if (Array.isArray(array[0])) { - // make sure to use a clone - return array.map(function (el) { - return el.slice(); - }); - } else if (array[0].x != null) { - // allow point objects to be passed - return array.map(function (el) { - return [el.x, el.y]; - }); - } - } else { - // Else, it is considered as a string - // parse points - array = array.trim().split(SVG.regex.delimiter).map(parseFloat); - } // validate points - https://svgwg.org/svg2-draft/shapes.html#DataTypePoints - // Odd number of coordinates is an error. In such cases, drop the last odd coordinate. - - - if (array.length % 2 !== 0) array.pop(); // wrap points in two-tuples and parse points as floats - - for (var i = 0, len = array.length; i < len; i = i + 2) { - points.push([array[i], array[i + 1]]); - } - - return points; - }, - // Move point string - move: function move(x, y) { - var box = this.bbox(); // get relative offset - - x -= box.x; - y -= box.y; // move every point - - if (!isNaN(x) && !isNaN(y)) { - for (var i = this.value.length - 1; i >= 0; i--) { - this.value[i] = [this.value[i][0] + x, this.value[i][1] + y]; - } - } - - return this; - }, - // Resize poly string - size: function size(width, height) { - var i, - box = this.bbox(); // recalculate position of all points according to new size - - for (i = this.value.length - 1; i >= 0; i--) { - if (box.width) this.value[i][0] = (this.value[i][0] - box.x) * width / box.width + box.x; - if (box.height) this.value[i][1] = (this.value[i][1] - box.y) * height / box.height + box.y; - } - - return this; - }, - // Get bounding box of points - bbox: function bbox() { - if (!SVG.parser.draw) { - SVG.prepare(); - } - - SVG.parser.poly.setAttribute('points', this.toString()); - return SVG.parser.poly.getBBox(); - } - }); - var pathHandlers = { - M: function M(c, p, p0) { - p.x = p0.x = c[0]; - p.y = p0.y = c[1]; - return ['M', p.x, p.y]; - }, - L: function L(c, p) { - p.x = c[0]; - p.y = c[1]; - return ['L', c[0], c[1]]; - }, - H: function H(c, p) { - p.x = c[0]; - return ['H', c[0]]; - }, - V: function V(c, p) { - p.y = c[0]; - return ['V', c[0]]; - }, - C: function C(c, p) { - p.x = c[4]; - p.y = c[5]; - return ['C', c[0], c[1], c[2], c[3], c[4], c[5]]; - }, - S: function S(c, p) { - p.x = c[2]; - p.y = c[3]; - return ['S', c[0], c[1], c[2], c[3]]; - }, - Q: function Q(c, p) { - p.x = c[2]; - p.y = c[3]; - return ['Q', c[0], c[1], c[2], c[3]]; - }, - T: function T(c, p) { - p.x = c[0]; - p.y = c[1]; - return ['T', c[0], c[1]]; - }, - Z: function Z(c, p, p0) { - p.x = p0.x; - p.y = p0.y; - return ['Z']; - }, - A: function A(c, p) { - p.x = c[5]; - p.y = c[6]; - return ['A', c[0], c[1], c[2], c[3], c[4], c[5], c[6]]; - } - }; - var mlhvqtcsa = 'mlhvqtcsaz'.split(''); - - for (var i = 0, il = mlhvqtcsa.length; i < il; ++i) { - pathHandlers[mlhvqtcsa[i]] = function (i) { - return function (c, p, p0) { - if (i == 'H') c[0] = c[0] + p.x;else if (i == 'V') c[0] = c[0] + p.y;else if (i == 'A') { - c[5] = c[5] + p.x, c[6] = c[6] + p.y; - } else { - for (var j = 0, jl = c.length; j < jl; ++j) { - c[j] = c[j] + (j % 2 ? p.y : p.x); - } - } - return pathHandlers[i](c, p, p0); - }; - }(mlhvqtcsa[i].toUpperCase()); - } // Path points array - - - SVG.PathArray = function (array, fallback) { - SVG.Array.call(this, array, fallback || [['M', 0, 0]]); - }; // Inherit from SVG.Array - - - SVG.PathArray.prototype = new SVG.Array(); - SVG.PathArray.prototype.constructor = SVG.PathArray; - SVG.extend(SVG.PathArray, { - // Convert array to string - toString: function toString() { - return arrayToString(this.value); - }, - // Move path string - move: function move(x, y) { - // get bounding box of current situation - var box = this.bbox(); // get relative offset - - x -= box.x; - y -= box.y; - - if (!isNaN(x) && !isNaN(y)) { - // move every point - for (var l, i = this.value.length - 1; i >= 0; i--) { - l = this.value[i][0]; - - if (l == 'M' || l == 'L' || l == 'T') { - this.value[i][1] += x; - this.value[i][2] += y; - } else if (l == 'H') { - this.value[i][1] += x; - } else if (l == 'V') { - this.value[i][1] += y; - } else if (l == 'C' || l == 'S' || l == 'Q') { - this.value[i][1] += x; - this.value[i][2] += y; - this.value[i][3] += x; - this.value[i][4] += y; - - if (l == 'C') { - this.value[i][5] += x; - this.value[i][6] += y; - } - } else if (l == 'A') { - this.value[i][6] += x; - this.value[i][7] += y; - } - } - } - - return this; - }, - // Resize path string - size: function size(width, height) { - // get bounding box of current situation - var i, - l, - box = this.bbox(); // recalculate position of all points according to new size - - for (i = this.value.length - 1; i >= 0; i--) { - l = this.value[i][0]; - - if (l == 'M' || l == 'L' || l == 'T') { - this.value[i][1] = (this.value[i][1] - box.x) * width / box.width + box.x; - this.value[i][2] = (this.value[i][2] - box.y) * height / box.height + box.y; - } else if (l == 'H') { - this.value[i][1] = (this.value[i][1] - box.x) * width / box.width + box.x; - } else if (l == 'V') { - this.value[i][1] = (this.value[i][1] - box.y) * height / box.height + box.y; - } else if (l == 'C' || l == 'S' || l == 'Q') { - this.value[i][1] = (this.value[i][1] - box.x) * width / box.width + box.x; - this.value[i][2] = (this.value[i][2] - box.y) * height / box.height + box.y; - this.value[i][3] = (this.value[i][3] - box.x) * width / box.width + box.x; - this.value[i][4] = (this.value[i][4] - box.y) * height / box.height + box.y; - - if (l == 'C') { - this.value[i][5] = (this.value[i][5] - box.x) * width / box.width + box.x; - this.value[i][6] = (this.value[i][6] - box.y) * height / box.height + box.y; - } - } else if (l == 'A') { - // resize radii - this.value[i][1] = this.value[i][1] * width / box.width; - this.value[i][2] = this.value[i][2] * height / box.height; // move position values - - this.value[i][6] = (this.value[i][6] - box.x) * width / box.width + box.x; - this.value[i][7] = (this.value[i][7] - box.y) * height / box.height + box.y; - } - } - - return this; - }, - // Test if the passed path array use the same path data commands as this path array - equalCommands: function equalCommands(pathArray) { - var i, il, equalCommands; - pathArray = new SVG.PathArray(pathArray); - equalCommands = this.value.length === pathArray.value.length; - - for (i = 0, il = this.value.length; equalCommands && i < il; i++) { - equalCommands = this.value[i][0] === pathArray.value[i][0]; - } - - return equalCommands; - }, - // Make path array morphable - morph: function morph(pathArray) { - pathArray = new SVG.PathArray(pathArray); - - if (this.equalCommands(pathArray)) { - this.destination = pathArray; - } else { - this.destination = null; - } - - return this; - }, - // Get morphed path array at given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; - var sourceArray = this.value, - destinationArray = this.destination.value, - array = [], - pathArray = new SVG.PathArray(), - i, - il, - j, - jl; // Animate has specified in the SVG spec - // See: https://www.w3.org/TR/SVG11/paths.html#PathElement - - for (i = 0, il = sourceArray.length; i < il; i++) { - array[i] = [sourceArray[i][0]]; - - for (j = 1, jl = sourceArray[i].length; j < jl; j++) { - array[i][j] = sourceArray[i][j] + (destinationArray[i][j] - sourceArray[i][j]) * pos; - } // For the two flags of the elliptical arc command, the SVG spec say: - // Flags and booleans are interpolated as fractions between zero and one, with any non-zero value considered to be a value of one/true - // Elliptical arc command as an array followed by corresponding indexes: - // ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y] - // 0 1 2 3 4 5 6 7 - - - if (array[i][0] === 'A') { - array[i][4] = +(array[i][4] != 0); - array[i][5] = +(array[i][5] != 0); - } - } // Directly modify the value of a path array, this is done this way for performance - - - pathArray.value = array; - return pathArray; - }, - // Absolutize and parse path to array - parse: function parse(array) { - // if it's already a patharray, no need to parse it - if (array instanceof SVG.PathArray) return array.valueOf(); // prepare for parsing - - var s, - arr, - paramCnt = { - 'M': 2, - 'L': 2, - 'H': 1, - 'V': 1, - 'C': 6, - 'S': 4, - 'Q': 4, - 'T': 2, - 'A': 7, - 'Z': 0 - }; - - if (typeof array === 'string') { - array = array.replace(SVG.regex.numbersWithDots, pathRegReplace) // convert 45.123.123 to 45.123 .123 - .replace(SVG.regex.pathLetters, ' $& ') // put some room between letters and numbers - .replace(SVG.regex.hyphen, '$1 -') // add space before hyphen - .trim() // trim - .split(SVG.regex.delimiter); // split into array - } else { - array = array.reduce(function (prev, curr) { - return [].concat.call(prev, curr); - }, []); - } // array now is an array containing all parts of a path e.g. ['M', '0', '0', 'L', '30', '30' ...] - - - var arr = [], - p = new SVG.Point(), - p0 = new SVG.Point(), - index = 0, - len = array.length; - - do { - // Test if we have a path letter - if (SVG.regex.isPathLetter.test(array[index])) { - s = array[index]; - ++index; // If last letter was a move command and we got no new, it defaults to [L]ine - } else if (s == 'M') { - s = 'L'; - } else if (s == 'm') { - s = 'l'; - } - - arr.push(pathHandlers[s].call(null, array.slice(index, index = index + paramCnt[s.toUpperCase()]).map(parseFloat), p, p0)); - } while (len > index); - - return arr; - }, - // Get bounding box of path - bbox: function bbox() { - if (!SVG.parser.draw) { - SVG.prepare(); - } - - SVG.parser.path.setAttribute('d', this.toString()); - return SVG.parser.path.getBBox(); - } - }); // Module for unit convertions - - SVG.Number = SVG.invent({ - // Initialize - create: function create(value, unit) { - // initialize defaults - this.value = 0; - this.unit = unit || ''; // parse value - - if (typeof value === 'number') { - // ensure a valid numeric value - this.value = isNaN(value) ? 0 : !isFinite(value) ? value < 0 ? -3.4e+38 : +3.4e+38 : value; - } else if (typeof value === 'string') { - unit = value.match(SVG.regex.numberAndUnit); - - if (unit) { - // make value numeric - this.value = parseFloat(unit[1]); // normalize - - if (unit[5] == '%') { - this.value /= 100; - } else if (unit[5] == 's') { - this.value *= 1000; - } // store unit - - - this.unit = unit[5]; - } - } else { - if (value instanceof SVG.Number) { - this.value = value.valueOf(); - this.unit = value.unit; - } - } - }, - // Add methods - extend: { - // Stringalize - toString: function toString() { - return (this.unit == '%' ? ~~(this.value * 1e8) / 1e6 : this.unit == 's' ? this.value / 1e3 : this.value) + this.unit; - }, - toJSON: function toJSON() { - return this.toString(); - }, - // Convert to primitive - valueOf: function valueOf() { - return this.value; - }, - // Add number - plus: function plus(number) { - number = new SVG.Number(number); - return new SVG.Number(this + number, this.unit || number.unit); - }, - // Subtract number - minus: function minus(number) { - number = new SVG.Number(number); - return new SVG.Number(this - number, this.unit || number.unit); - }, - // Multiply number - times: function times(number) { - number = new SVG.Number(number); - return new SVG.Number(this * number, this.unit || number.unit); - }, - // Divide number - divide: function divide(number) { - number = new SVG.Number(number); - return new SVG.Number(this / number, this.unit || number.unit); - }, - // Convert to different unit - to: function to(unit) { - var number = new SVG.Number(this); - - if (typeof unit === 'string') { - number.unit = unit; - } - - return number; - }, - // Make number morphable - morph: function morph(number) { - this.destination = new SVG.Number(number); - - if (number.relative) { - this.destination.value += this.value; - } - - return this; - }, - // Get morphed number at given position - at: function at(pos) { - // Make sure a destination is defined - if (!this.destination) return this; // Generate new morphed number - - return new SVG.Number(this.destination).minus(this).times(pos).plus(this); - } - } - }); - SVG.Element = SVG.invent({ - // Initialize node - create: function create(node) { - // make stroke value accessible dynamically - this._stroke = SVG.defaults.attrs.stroke; - this._event = null; // initialize data object - - this.dom = {}; // create circular reference - - if (this.node = node) { - this.type = node.nodeName; - this.node.instance = this; // store current attribute value - - this._stroke = node.getAttribute('stroke') || this._stroke; - } - }, - // Add class methods - extend: { - // Move over x-axis - x: function x(_x) { - return this.attr('x', _x); - }, - // Move over y-axis - y: function y(_y) { - return this.attr('y', _y); - }, - // Move by center over x-axis - cx: function cx(x) { - return x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2); - }, - // Move by center over y-axis - cy: function cy(y) { - return y == null ? this.y() + this.height() / 2 : this.y(y - this.height() / 2); - }, - // Move element to given x and y values - move: function move(x, y) { - return this.x(x).y(y); - }, - // Move element by its center - center: function center(x, y) { - return this.cx(x).cy(y); - }, - // Set width of element - width: function width(_width) { - return this.attr('width', _width); - }, - // Set height of element - height: function height(_height) { - return this.attr('height', _height); - }, - // Set element size to given width and height - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.width(new SVG.Number(p.width)).height(new SVG.Number(p.height)); - }, - // Clone element - clone: function clone(parent) { - // write dom data to the dom so the clone can pickup the data - this.writeDataToDom(); // clone element and assign new id - - var clone = assignNewId(this.node.cloneNode(true)); // insert the clone in the given parent or after myself - - if (parent) parent.add(clone);else this.after(clone); - return clone; - }, - // Remove element - remove: function remove() { - if (this.parent()) { - this.parent().removeElement(this); - } - - return this; - }, - // Replace element - replace: function replace(element) { - this.after(element).remove(); - return element; - }, - // Add element to given container and return self - addTo: function addTo(parent) { - return parent.put(this); - }, - // Add element to given container and return container - putIn: function putIn(parent) { - return parent.add(this); - }, - // Get / set id - id: function id(_id) { - return this.attr('id', _id); - }, - // Checks whether the given point inside the bounding box of the element - inside: function inside(x, y) { - var box = this.bbox(); - return x > box.x && y > box.y && x < box.x + box.width && y < box.y + box.height; - }, - // Show element - show: function show() { - return this.style('display', ''); - }, - // Hide element - hide: function hide() { - return this.style('display', 'none'); - }, - // Is element visible? - visible: function visible() { - return this.style('display') != 'none'; - }, - // Return id on string conversion - toString: function toString() { - return this.attr('id'); - }, - // Return array of classes on the node - classes: function classes() { - var attr = this.attr('class'); - return attr == null ? [] : attr.trim().split(SVG.regex.delimiter); - }, - // Return true if class exists on the node, false otherwise - hasClass: function hasClass(name) { - return this.classes().indexOf(name) != -1; - }, - // Add class to the node - addClass: function addClass(name) { - if (!this.hasClass(name)) { - var array = this.classes(); - array.push(name); - this.attr('class', array.join(' ')); - } - - return this; - }, - // Remove class from the node - removeClass: function removeClass(name) { - if (this.hasClass(name)) { - this.attr('class', this.classes().filter(function (c) { - return c != name; - }).join(' ')); - } - - return this; - }, - // Toggle the presence of a class on the node - toggleClass: function toggleClass(name) { - return this.hasClass(name) ? this.removeClass(name) : this.addClass(name); - }, - // Get referenced element form attribute value - reference: function reference(attr) { - return SVG.get(this.attr(attr)); - }, - // Returns the parent element instance - parent: function parent(type) { - var parent = this; // check for parent - - if (!parent.node.parentNode) return null; // get parent element - - parent = SVG.adopt(parent.node.parentNode); - if (!type) return parent; // loop trough ancestors if type is given - - while (parent && parent.node instanceof window.SVGElement) { - if (typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent; - if (!parent.node.parentNode || parent.node.parentNode.nodeName == '#document') return null; // #759, #720 - - parent = SVG.adopt(parent.node.parentNode); - } - }, - // Get parent document - doc: function doc() { - return this instanceof SVG.Doc ? this : this.parent(SVG.Doc); - }, - // return array of all ancestors of given type up to the root svg - parents: function parents(type) { - var parents = [], - parent = this; - - do { - parent = parent.parent(type); - if (!parent || !parent.node) break; - parents.push(parent); - } while (parent.parent); - - return parents; - }, - // matches the element vs a css selector - matches: function matches(selector) { - return _matches(this.node, selector); - }, - // Returns the svg node to call native svg methods on it - native: function native() { - return this.node; - }, - // Import raw svg - svg: function svg(_svg) { - // create temporary holder - var well = document.createElement('svg'); // act as a setter if svg is given - - if (_svg && this instanceof SVG.Parent) { - // dump raw svg - well.innerHTML = '' + _svg.replace(/\n/, '').replace(/<([\w:-]+)([^<]+?)\/>/g, '<$1$2>') + ''; // transplant nodes - - for (var i = 0, il = well.firstChild.childNodes.length; i < il; i++) { - this.node.appendChild(well.firstChild.firstChild); - } // otherwise act as a getter - - } else { - // create a wrapping svg element in case of partial content - well.appendChild(_svg = document.createElement('svg')); // write svgjs data to the dom - - this.writeDataToDom(); // insert a copy of this node - - _svg.appendChild(this.node.cloneNode(true)); // return target element - - - return well.innerHTML.replace(/^/, '').replace(/<\/svg>$/, ''); - } - - return this; - }, - // write svgjs data to the dom - writeDataToDom: function writeDataToDom() { - // dump variables recursively - if (this.each || this.lines) { - var fn = this.each ? this : this.lines(); - fn.each(function () { - this.writeDataToDom(); - }); - } // remove previously set data - - - this.node.removeAttribute('svgjs:data'); - - if (Object.keys(this.dom).length) { - this.node.setAttribute('svgjs:data', JSON.stringify(this.dom)); - } // see #428 - - - return this; - }, - // set given data to the elements data property - setData: function setData(o) { - this.dom = o; - return this; - }, - is: function is(obj) { - return _is(this, obj); - } - } - }); - SVG.easing = { - '-': function _(pos) { - return pos; - }, - '<>': function _(pos) { - return -Math.cos(pos * Math.PI) / 2 + 0.5; - }, - '>': function _(pos) { - return Math.sin(pos * Math.PI / 2); - }, - '<': function _(pos) { - return -Math.cos(pos * Math.PI / 2) + 1; - } - }; - - SVG.morph = function (pos) { - return function (from, to) { - return new SVG.MorphObj(from, to).at(pos); - }; - }; - - SVG.Situation = SVG.invent({ - create: function create(o) { - this.init = false; - this.reversed = false; - this.reversing = false; - this.duration = new SVG.Number(o.duration).valueOf(); - this.delay = new SVG.Number(o.delay).valueOf(); - this.start = +new Date() + this.delay; - this.finish = this.start + this.duration; - this.ease = o.ease; // this.loop is incremented from 0 to this.loops - // it is also incremented when in an infinite loop (when this.loops is true) - - this.loop = 0; - this.loops = false; - this.animations = {// functionToCall: [list of morphable objects] - // e.g. move: [SVG.Number, SVG.Number] - }; - this.attrs = {// holds all attributes which are not represented from a function svg.js provides - // e.g. someAttr: SVG.Number - }; - this.styles = {// holds all styles which should be animated - // e.g. fill-color: SVG.Color - }; - this.transforms = [// holds all transformations as transformation objects - // e.g. [SVG.Rotate, SVG.Translate, SVG.Matrix] - ]; - this.once = {// functions to fire at a specific position - // e.g. "0.5": function foo(){} - }; - } - }); - SVG.FX = SVG.invent({ - create: function create(element) { - this._target = element; - this.situations = []; - this.active = false; - this.situation = null; - this.paused = false; - this.lastPos = 0; - this.pos = 0; // The absolute position of an animation is its position in the context of its complete duration (including delay and loops) - // When performing a delay, absPos is below 0 and when performing a loop, its value is above 1 - - this.absPos = 0; - this._speed = 1; - }, - extend: { - /** - * sets or returns the target of this animation - * @param o object || number In case of Object it holds all parameters. In case of number its the duration of the animation - * @param ease function || string Function which should be used for easing or easing keyword - * @param delay Number indicating the delay before the animation starts - * @return target || this - */ - animate: function animate(o, ease, delay) { - if (_typeof(o) === 'object') { - ease = o.ease; - delay = o.delay; - o = o.duration; - } - - var situation = new SVG.Situation({ - duration: o || 1000, - delay: delay || 0, - ease: SVG.easing[ease || '-'] || ease - }); - this.queue(situation); - return this; - }, - - /** - * sets a delay before the next element of the queue is called - * @param delay Duration of delay in milliseconds - * @return this.target() - */ - delay: function delay(_delay) { - // The delay is performed by an empty situation with its duration - // attribute set to the duration of the delay - var situation = new SVG.Situation({ - duration: _delay, - delay: 0, - ease: SVG.easing['-'] - }); - return this.queue(situation); - }, - - /** - * sets or returns the target of this animation - * @param null || target SVG.Element which should be set as new target - * @return target || this - */ - target: function target(_target) { - if (_target && _target instanceof SVG.Element) { - this._target = _target; - return this; - } - - return this._target; - }, - // returns the absolute position at a given time - timeToAbsPos: function timeToAbsPos(timestamp) { - return (timestamp - this.situation.start) / (this.situation.duration / this._speed); - }, - // returns the timestamp from a given absolute positon - absPosToTime: function absPosToTime(absPos) { - return this.situation.duration / this._speed * absPos + this.situation.start; - }, - // starts the animationloop - startAnimFrame: function startAnimFrame() { - this.stopAnimFrame(); - this.animationFrame = window.requestAnimationFrame(function () { - this.step(); - }.bind(this)); - }, - // cancels the animationframe - stopAnimFrame: function stopAnimFrame() { - window.cancelAnimationFrame(this.animationFrame); - }, - // kicks off the animation - only does something when the queue is currently not active and at least one situation is set - start: function start() { - // dont start if already started - if (!this.active && this.situation) { - this.active = true; - this.startCurrent(); - } - - return this; - }, - // start the current situation - startCurrent: function startCurrent() { - this.situation.start = +new Date() + this.situation.delay / this._speed; - this.situation.finish = this.situation.start + this.situation.duration / this._speed; - return this.initAnimations().step(); - }, - - /** - * adds a function / Situation to the animation queue - * @param fn function / situation to add - * @return this - */ - queue: function queue(fn) { - if (typeof fn === 'function' || fn instanceof SVG.Situation) { - this.situations.push(fn); - } - - if (!this.situation) this.situation = this.situations.shift(); - return this; - }, - - /** - * pulls next element from the queue and execute it - * @return this - */ - dequeue: function dequeue() { - // stop current animation - this.stop(); // get next animation from queue - - this.situation = this.situations.shift(); - - if (this.situation) { - if (this.situation instanceof SVG.Situation) { - this.start(); - } else { - // If it is not a SVG.Situation, then it is a function, we execute it - this.situation.call(this); - } - } - - return this; - }, - // updates all animations to the current state of the element - // this is important when one property could be changed from another property - initAnimations: function initAnimations() { - var i, j, source; - var s = this.situation; - if (s.init) return this; - - for (i in s.animations) { - source = this.target()[i](); - - if (!Array.isArray(source)) { - source = [source]; - } - - if (!Array.isArray(s.animations[i])) { - s.animations[i] = [s.animations[i]]; - } // if(s.animations[i].length > source.length) { - // source.concat = source.concat(s.animations[i].slice(source.length, s.animations[i].length)) - // } - - - for (j = source.length; j--;) { - // The condition is because some methods return a normal number instead - // of a SVG.Number - if (s.animations[i][j] instanceof SVG.Number) { - source[j] = new SVG.Number(source[j]); - } - - s.animations[i][j] = source[j].morph(s.animations[i][j]); - } - } - - for (i in s.attrs) { - s.attrs[i] = new SVG.MorphObj(this.target().attr(i), s.attrs[i]); - } - - for (i in s.styles) { - s.styles[i] = new SVG.MorphObj(this.target().style(i), s.styles[i]); - } - - s.initialTransformation = this.target().matrixify(); - s.init = true; - return this; - }, - clearQueue: function clearQueue() { - this.situations = []; - return this; - }, - clearCurrent: function clearCurrent() { - this.situation = null; - return this; - }, - - /** stops the animation immediately - * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately. - * @param clearQueue A Boolean indicating whether to remove queued animation as well. - * @return this - */ - stop: function stop(jumpToEnd, clearQueue) { - var active = this.active; - this.active = false; - - if (clearQueue) { - this.clearQueue(); - } - - if (jumpToEnd && this.situation) { - // initialize the situation if it was not - !active && this.startCurrent(); - this.atEnd(); - } - - this.stopAnimFrame(); - return this.clearCurrent(); - }, - - /** resets the element to the state where the current element has started - * @return this - */ - reset: function reset() { - if (this.situation) { - var temp = this.situation; - this.stop(); - this.situation = temp; - this.atStart(); - } - - return this; - }, - // Stop the currently-running animation, remove all queued animations, and complete all animations for the element. - finish: function finish() { - this.stop(true, false); - - while (this.dequeue().situation && this.stop(true, false)) { - } - - this.clearQueue().clearCurrent(); - return this; - }, - // set the internal animation pointer at the start position, before any loops, and updates the visualisation - atStart: function atStart() { - return this.at(0, true); - }, - // set the internal animation pointer at the end position, after all the loops, and updates the visualisation - atEnd: function atEnd() { - if (this.situation.loops === true) { - // If in a infinite loop, we end the current iteration - this.situation.loops = this.situation.loop + 1; - } - - if (typeof this.situation.loops === 'number') { - // If performing a finite number of loops, we go after all the loops - return this.at(this.situation.loops, true); - } else { - // If no loops, we just go at the end - return this.at(1, true); - } - }, - // set the internal animation pointer to the specified position and updates the visualisation - // if isAbsPos is true, pos is treated as an absolute position - at: function at(pos, isAbsPos) { - var durDivSpd = this.situation.duration / this._speed; - this.absPos = pos; // If pos is not an absolute position, we convert it into one - - if (!isAbsPos) { - if (this.situation.reversed) this.absPos = 1 - this.absPos; - this.absPos += this.situation.loop; - } - - this.situation.start = +new Date() - this.absPos * durDivSpd; - this.situation.finish = this.situation.start + durDivSpd; - return this.step(true); - }, - - /** - * sets or returns the speed of the animations - * @param speed null || Number The new speed of the animations - * @return Number || this - */ - speed: function speed(_speed) { - if (_speed === 0) return this.pause(); - - if (_speed) { - this._speed = _speed; // We use an absolute position here so that speed can affect the delay before the animation - - return this.at(this.absPos, true); - } else return this._speed; - }, - // Make loopable - loop: function loop(times, reverse) { - var c = this.last(); // store total loops - - c.loops = times != null ? times : true; - c.loop = 0; - if (reverse) c.reversing = true; - return this; - }, - // pauses the animation - pause: function pause() { - this.paused = true; - this.stopAnimFrame(); - return this; - }, - // unpause the animation - play: function play() { - if (!this.paused) return this; - this.paused = false; // We use an absolute position here so that the delay before the animation can be paused - - return this.at(this.absPos, true); - }, - - /** - * toggle or set the direction of the animation - * true sets direction to backwards while false sets it to forwards - * @param reversed Boolean indicating whether to reverse the animation or not (default: toggle the reverse status) - * @return this - */ - reverse: function reverse(reversed) { - var c = this.last(); - if (typeof reversed === 'undefined') c.reversed = !c.reversed;else c.reversed = reversed; - return this; - }, - - /** - * returns a float from 0-1 indicating the progress of the current animation - * @param eased Boolean indicating whether the returned position should be eased or not - * @return number - */ - progress: function progress(easeIt) { - return easeIt ? this.situation.ease(this.pos) : this.pos; - }, - - /** - * adds a callback function which is called when the current animation is finished - * @param fn Function which should be executed as callback - * @return number - */ - after: function after(fn) { - var c = this.last(), - wrapper = function wrapper(e) { - if (e.detail.situation == c) { - fn.call(this, c); - this.off('finished.fx', wrapper); // prevent memory leak - } - }; - - this.target().on('finished.fx', wrapper); - return this._callStart(); - }, - // adds a callback which is called whenever one animation step is performed - during: function during(fn) { - var c = this.last(), - wrapper = function wrapper(e) { - if (e.detail.situation == c) { - fn.call(this, e.detail.pos, SVG.morph(e.detail.pos), e.detail.eased, c); - } - }; // see above - - - this.target().off('during.fx', wrapper).on('during.fx', wrapper); - this.after(function () { - this.off('during.fx', wrapper); - }); - return this._callStart(); - }, - // calls after ALL animations in the queue are finished - afterAll: function afterAll(fn) { - var wrapper = function wrapper(e) { - fn.call(this); - this.off('allfinished.fx', wrapper); - }; // see above - - - this.target().off('allfinished.fx', wrapper).on('allfinished.fx', wrapper); - return this._callStart(); - }, - // calls on every animation step for all animations - duringAll: function duringAll(fn) { - var wrapper = function wrapper(e) { - fn.call(this, e.detail.pos, SVG.morph(e.detail.pos), e.detail.eased, e.detail.situation); - }; - - this.target().off('during.fx', wrapper).on('during.fx', wrapper); - this.afterAll(function () { - this.off('during.fx', wrapper); - }); - return this._callStart(); - }, - last: function last() { - return this.situations.length ? this.situations[this.situations.length - 1] : this.situation; - }, - // adds one property to the animations - add: function add(method, args, type) { - this.last()[type || 'animations'][method] = args; - return this._callStart(); - }, - - /** perform one step of the animation - * @param ignoreTime Boolean indicating whether to ignore time and use position directly or recalculate position based on time - * @return this - */ - step: function step(ignoreTime) { - // convert current time to an absolute position - if (!ignoreTime) this.absPos = this.timeToAbsPos(+new Date()); // This part convert an absolute position to a position - - if (this.situation.loops !== false) { - var absPos, absPosInt, lastLoop; // If the absolute position is below 0, we just treat it as if it was 0 - - absPos = Math.max(this.absPos, 0); - absPosInt = Math.floor(absPos); - - if (this.situation.loops === true || absPosInt < this.situation.loops) { - this.pos = absPos - absPosInt; - lastLoop = this.situation.loop; - this.situation.loop = absPosInt; - } else { - this.absPos = this.situation.loops; - this.pos = 1; // The -1 here is because we don't want to toggle reversed when all the loops have been completed - - lastLoop = this.situation.loop - 1; - this.situation.loop = this.situation.loops; - } - - if (this.situation.reversing) { - // Toggle reversed if an odd number of loops as occured since the last call of step - this.situation.reversed = this.situation.reversed != Boolean((this.situation.loop - lastLoop) % 2); - } - } else { - // If there are no loop, the absolute position must not be above 1 - this.absPos = Math.min(this.absPos, 1); - this.pos = this.absPos; - } // while the absolute position can be below 0, the position must not be below 0 - - - if (this.pos < 0) this.pos = 0; - if (this.situation.reversed) this.pos = 1 - this.pos; // apply easing - - var eased = this.situation.ease(this.pos); // call once-callbacks - - for (var i in this.situation.once) { - if (i > this.lastPos && i <= eased) { - this.situation.once[i].call(this.target(), this.pos, eased); - delete this.situation.once[i]; - } - } // fire during callback with position, eased position and current situation as parameter - - - if (this.active) this.target().fire('during', { - pos: this.pos, - eased: eased, - fx: this, - situation: this.situation - }); // the user may call stop or finish in the during callback - // so make sure that we still have a valid situation - - if (!this.situation) { - return this; - } // apply the actual animation to every property - - - this.eachAt(); // do final code when situation is finished - - if (this.pos == 1 && !this.situation.reversed || this.situation.reversed && this.pos == 0) { - // stop animation callback - this.stopAnimFrame(); // fire finished callback with current situation as parameter - - this.target().fire('finished', { - fx: this, - situation: this.situation - }); - - if (!this.situations.length) { - this.target().fire('allfinished'); // Recheck the length since the user may call animate in the afterAll callback - - if (!this.situations.length) { - this.target().off('.fx'); // there shouldnt be any binding left, but to make sure... - - this.active = false; - } - } // start next animation - - - if (this.active) this.dequeue();else this.clearCurrent(); - } else if (!this.paused && this.active) { - // we continue animating when we are not at the end - this.startAnimFrame(); - } // save last eased position for once callback triggering - - - this.lastPos = eased; - return this; - }, - // calculates the step for every property and calls block with it - eachAt: function eachAt() { - var i, - len, - at, - self = this, - target = this.target(), - s = this.situation; // apply animations which can be called trough a method - - for (i in s.animations) { - at = [].concat(s.animations[i]).map(function (el) { - return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el; - }); - target[i].apply(target, at); - } // apply animation which has to be applied with attr() - - - for (i in s.attrs) { - at = [i].concat(s.attrs[i]).map(function (el) { - return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el; - }); - target.attr.apply(target, at); - } // apply animation which has to be applied with style() - - - for (i in s.styles) { - at = [i].concat(s.styles[i]).map(function (el) { - return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el; - }); - target.style.apply(target, at); - } // animate initialTransformation which has to be chained - - - if (s.transforms.length) { - // get initial initialTransformation - at = s.initialTransformation; - - for (i = 0, len = s.transforms.length; i < len; i++) { - // get next transformation in chain - var a = s.transforms[i]; // multiply matrix directly - - if (a instanceof SVG.Matrix) { - if (a.relative) { - at = at.multiply(new SVG.Matrix().morph(a).at(s.ease(this.pos))); - } else { - at = at.morph(a).at(s.ease(this.pos)); - } - - continue; - } // when transformation is absolute we have to reset the needed transformation first - - - if (!a.relative) { - a.undo(at.extract()); - } // and reapply it after - - - at = at.multiply(a.at(s.ease(this.pos))); - } // set new matrix on element - - - target.matrix(at); - } - - return this; - }, - // adds an once-callback which is called at a specific position and never again - once: function once(pos, fn, isEased) { - var c = this.last(); - if (!isEased) pos = c.ease(pos); - c.once[pos] = fn; - return this; - }, - _callStart: function _callStart() { - setTimeout(function () { - this.start(); - }.bind(this), 0); - return this; - } - }, - parent: SVG.Element, - // Add method to parent elements - construct: { - // Get fx module or create a new one, then animate with given duration and ease - animate: function animate(o, ease, delay) { - return (this.fx || (this.fx = new SVG.FX(this))).animate(o, ease, delay); - }, - delay: function delay(_delay2) { - return (this.fx || (this.fx = new SVG.FX(this))).delay(_delay2); - }, - stop: function stop(jumpToEnd, clearQueue) { - if (this.fx) { - this.fx.stop(jumpToEnd, clearQueue); - } - - return this; - }, - finish: function finish() { - if (this.fx) { - this.fx.finish(); - } - - return this; - }, - // Pause current animation - pause: function pause() { - if (this.fx) { - this.fx.pause(); - } - - return this; - }, - // Play paused current animation - play: function play() { - if (this.fx) { - this.fx.play(); - } - - return this; - }, - // Set/Get the speed of the animations - speed: function speed(_speed2) { - if (this.fx) { - if (_speed2 == null) { - return this.fx.speed(); - } else { - this.fx.speed(_speed2); - } - } - - return this; - } - } - }); // MorphObj is used whenever no morphable object is given - - SVG.MorphObj = SVG.invent({ - create: function create(from, to) { - // prepare color for morphing - if (SVG.Color.isColor(to)) return new SVG.Color(from).morph(to); // check if we have a list of values - - if (SVG.regex.delimiter.test(from)) { - // prepare path for morphing - if (SVG.regex.pathLetters.test(from)) return new SVG.PathArray(from).morph(to); // prepare value list for morphing - else return new SVG.Array(from).morph(to); - } // prepare number for morphing - - - if (SVG.regex.numberAndUnit.test(to)) return new SVG.Number(from).morph(to); // prepare for plain morphing - - this.value = from; - this.destination = to; - }, - extend: { - at: function at(pos, real) { - return real < 1 ? this.value : this.destination; - }, - valueOf: function valueOf() { - return this.value; - } - } - }); - SVG.extend(SVG.FX, { - // Add animatable attributes - attr: function attr(a, v, relative) { - // apply attributes individually - if (_typeof(a) === 'object') { - for (var key in a) { - this.attr(key, a[key]); - } - } else { - this.add(a, v, 'attrs'); - } - - return this; - }, - // Add animatable styles - style: function style(s, v) { - if (_typeof(s) === 'object') { - for (var key in s) { - this.style(key, s[key]); - } - } else { - this.add(s, v, 'styles'); - } - - return this; - }, - // Animatable x-axis - x: function x(_x2, relative) { - if (this.target() instanceof SVG.G) { - this.transform({ - x: _x2 - }, relative); - return this; - } - - var num = new SVG.Number(_x2); - num.relative = relative; - return this.add('x', num); - }, - // Animatable y-axis - y: function y(_y2, relative) { - if (this.target() instanceof SVG.G) { - this.transform({ - y: _y2 - }, relative); - return this; - } - - var num = new SVG.Number(_y2); - num.relative = relative; - return this.add('y', num); - }, - // Animatable center x-axis - cx: function cx(x) { - return this.add('cx', new SVG.Number(x)); - }, - // Animatable center y-axis - cy: function cy(y) { - return this.add('cy', new SVG.Number(y)); - }, - // Add animatable move - move: function move(x, y) { - return this.x(x).y(y); - }, - // Add animatable center - center: function center(x, y) { - return this.cx(x).cy(y); - }, - // Add animatable size - size: function size(width, height) { - if (this.target() instanceof SVG.Text) { - // animate font size for Text elements - this.attr('font-size', width); - } else { - // animate bbox based size for all other elements - var box; - - if (!width || !height) { - box = this.target().bbox(); - } - - if (!width) { - width = box.width / box.height * height; - } - - if (!height) { - height = box.height / box.width * width; - } - - this.add('width', new SVG.Number(width)).add('height', new SVG.Number(height)); - } - - return this; - }, - // Add animatable width - width: function width(_width2) { - return this.add('width', new SVG.Number(_width2)); - }, - // Add animatable height - height: function height(_height2) { - return this.add('height', new SVG.Number(_height2)); - }, - // Add animatable plot - plot: function plot(a, b, c, d) { - // Lines can be plotted with 4 arguments - if (arguments.length == 4) { - return this.plot([a, b, c, d]); - } - - return this.add('plot', new (this.target().morphArray)(a)); - }, - // Add leading method - leading: function leading(value) { - return this.target().leading ? this.add('leading', new SVG.Number(value)) : this; - }, - // Add animatable viewbox - viewbox: function viewbox(x, y, width, height) { - if (this.target() instanceof SVG.Container) { - this.add('viewbox', new SVG.ViewBox(x, y, width, height)); - } - - return this; - }, - update: function update(o) { - if (this.target() instanceof SVG.Stop) { - if (typeof o === 'number' || o instanceof SVG.Number) { - return this.update({ - offset: arguments[0], - color: arguments[1], - opacity: arguments[2] - }); - } - - if (o.opacity != null) this.attr('stop-opacity', o.opacity); - if (o.color != null) this.attr('stop-color', o.color); - if (o.offset != null) this.attr('offset', o.offset); - } - - return this; - } - }); - SVG.Box = SVG.invent({ - create: function create(x, y, width, height) { - if (_typeof(x) === 'object' && !(x instanceof SVG.Element)) { - // chromes getBoundingClientRect has no x and y property - return SVG.Box.call(this, x.left != null ? x.left : x.x, x.top != null ? x.top : x.y, x.width, x.height); - } else if (arguments.length == 4) { - this.x = x; - this.y = y; - this.width = width; - this.height = height; - } // add center, right, bottom... - - - fullBox(this); - }, - extend: { - // Merge rect box with another, return a new instance - merge: function merge(box) { - var b = new this.constructor(); // merge boxes - - b.x = Math.min(this.x, box.x); - b.y = Math.min(this.y, box.y); - b.width = Math.max(this.x + this.width, box.x + box.width) - b.x; - b.height = Math.max(this.y + this.height, box.y + box.height) - b.y; - return fullBox(b); - }, - transform: function transform(m) { - var xMin = Infinity, - xMax = -Infinity, - yMin = Infinity, - yMax = -Infinity, - bbox; - var pts = [new SVG.Point(this.x, this.y), new SVG.Point(this.x2, this.y), new SVG.Point(this.x, this.y2), new SVG.Point(this.x2, this.y2)]; - pts.forEach(function (p) { - p = p.transform(m); - xMin = Math.min(xMin, p.x); - xMax = Math.max(xMax, p.x); - yMin = Math.min(yMin, p.y); - yMax = Math.max(yMax, p.y); - }); - bbox = new this.constructor(); - bbox.x = xMin; - bbox.width = xMax - xMin; - bbox.y = yMin; - bbox.height = yMax - yMin; - fullBox(bbox); - return bbox; - } - } - }); - SVG.BBox = SVG.invent({ - // Initialize - create: function create(element) { - SVG.Box.apply(this, [].slice.call(arguments)); // get values if element is given - - if (element instanceof SVG.Element) { - var box; // yes this is ugly, but Firefox can be a pain when it comes to elements that are not yet rendered - - try { - if (!document.documentElement.contains) { - // This is IE - it does not support contains() for top-level SVGs - var topParent = element.node; - - while (topParent.parentNode) { - topParent = topParent.parentNode; - } - - if (topParent != document) throw new Error('Element not in the dom'); - } // the element is NOT in the dom, throw error - // disabling the check below which fixes issue #76 - // if (!document.documentElement.contains(element.node)) throw new Exception('Element not in the dom') - // find native bbox - - - box = element.node.getBBox(); - } catch (e) { - if (element instanceof SVG.Shape) { - if (!SVG.parser.draw) { - // fixes apexcharts/vue-apexcharts #14 - SVG.prepare(); - } - - var clone = element.clone(SVG.parser.draw.instance).show(); - box = clone.node.getBBox(); - clone.remove(); - } else { - box = { - x: element.node.clientLeft, - y: element.node.clientTop, - width: element.node.clientWidth, - height: element.node.clientHeight - }; - } - } - - SVG.Box.call(this, box); - } - }, - // Define ancestor - inherit: SVG.Box, - // Define Parent - parent: SVG.Element, - // Constructor - construct: { - // Get bounding box - bbox: function bbox() { - return new SVG.BBox(this); - } - } - }); - SVG.BBox.prototype.constructor = SVG.BBox; - SVG.extend(SVG.Element, { - tbox: function tbox() { - console.warn('Use of TBox is deprecated and mapped to RBox. Use .rbox() instead.'); - return this.rbox(this.doc()); - } - }); - SVG.RBox = SVG.invent({ - // Initialize - create: function create(element) { - SVG.Box.apply(this, [].slice.call(arguments)); - - if (element instanceof SVG.Element) { - SVG.Box.call(this, element.node.getBoundingClientRect()); - } - }, - inherit: SVG.Box, - // define Parent - parent: SVG.Element, - extend: { - addOffset: function addOffset() { - // offset by window scroll position, because getBoundingClientRect changes when window is scrolled - this.x += window.pageXOffset; - this.y += window.pageYOffset; - return this; - } - }, - // Constructor - construct: { - // Get rect box - rbox: function rbox(el) { - if (el) return new SVG.RBox(this).transform(el.screenCTM().inverse()); - return new SVG.RBox(this).addOffset(); - } - } - }); - SVG.RBox.prototype.constructor = SVG.RBox; - SVG.Matrix = SVG.invent({ - // Initialize - create: function create(source) { - var i, - base = arrayToMatrix([1, 0, 0, 1, 0, 0]); // ensure source as object - - source = source instanceof SVG.Element ? source.matrixify() : typeof source === 'string' ? arrayToMatrix(source.split(SVG.regex.delimiter).map(parseFloat)) : arguments.length == 6 ? arrayToMatrix([].slice.call(arguments)) : Array.isArray(source) ? arrayToMatrix(source) : _typeof(source) === 'object' ? source : base; // merge source - - for (i = abcdef.length - 1; i >= 0; --i) { - this[abcdef[i]] = source[abcdef[i]] != null ? source[abcdef[i]] : base[abcdef[i]]; - } - }, - // Add methods - extend: { - // Extract individual transformations - extract: function extract() { - // find delta transform points - var px = deltaTransformPoint(this, 0, 1), - py = deltaTransformPoint(this, 1, 0), - skewX = 180 / Math.PI * Math.atan2(px.y, px.x) - 90; - return { - // translation - x: this.e, - y: this.f, - transformedX: (this.e * Math.cos(skewX * Math.PI / 180) + this.f * Math.sin(skewX * Math.PI / 180)) / Math.sqrt(this.a * this.a + this.b * this.b), - transformedY: (this.f * Math.cos(skewX * Math.PI / 180) + this.e * Math.sin(-skewX * Math.PI / 180)) / Math.sqrt(this.c * this.c + this.d * this.d), - // skew - skewX: -skewX, - skewY: 180 / Math.PI * Math.atan2(py.y, py.x), - // scale - scaleX: Math.sqrt(this.a * this.a + this.b * this.b), - scaleY: Math.sqrt(this.c * this.c + this.d * this.d), - // rotation - rotation: skewX, - a: this.a, - b: this.b, - c: this.c, - d: this.d, - e: this.e, - f: this.f, - matrix: new SVG.Matrix(this) - }; - }, - // Clone matrix - clone: function clone() { - return new SVG.Matrix(this); - }, - // Morph one matrix into another - morph: function morph(matrix) { - // store new destination - this.destination = new SVG.Matrix(matrix); - return this; - }, - // Get morphed matrix at a given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; // calculate morphed matrix at a given position - - var matrix = new SVG.Matrix({ - a: this.a + (this.destination.a - this.a) * pos, - b: this.b + (this.destination.b - this.b) * pos, - c: this.c + (this.destination.c - this.c) * pos, - d: this.d + (this.destination.d - this.d) * pos, - e: this.e + (this.destination.e - this.e) * pos, - f: this.f + (this.destination.f - this.f) * pos - }); - return matrix; - }, - // Multiplies by given matrix - multiply: function multiply(matrix) { - return new SVG.Matrix(this.native().multiply(parseMatrix(matrix).native())); - }, - // Inverses matrix - inverse: function inverse() { - return new SVG.Matrix(this.native().inverse()); - }, - // Translate matrix - translate: function translate(x, y) { - return new SVG.Matrix(this.native().translate(x || 0, y || 0)); - }, - // Scale matrix - scale: function scale(x, y, cx, cy) { - // support uniformal scale - if (arguments.length == 1) { - y = x; - } else if (arguments.length == 3) { - cy = cx; - cx = y; - y = x; - } - - return this.around(cx, cy, new SVG.Matrix(x, 0, 0, y, 0, 0)); - }, - // Rotate matrix - rotate: function rotate(r, cx, cy) { - // convert degrees to radians - r = SVG.utils.radians(r); - return this.around(cx, cy, new SVG.Matrix(Math.cos(r), Math.sin(r), -Math.sin(r), Math.cos(r), 0, 0)); - }, - // Flip matrix on x or y, at a given offset - flip: function flip(a, o) { - return a == 'x' ? this.scale(-1, 1, o, 0) : a == 'y' ? this.scale(1, -1, 0, o) : this.scale(-1, -1, a, o != null ? o : a); - }, - // Skew - skew: function skew(x, y, cx, cy) { - // support uniformal skew - if (arguments.length == 1) { - y = x; - } else if (arguments.length == 3) { - cy = cx; - cx = y; - y = x; - } // convert degrees to radians - - - x = SVG.utils.radians(x); - y = SVG.utils.radians(y); - return this.around(cx, cy, new SVG.Matrix(1, Math.tan(y), Math.tan(x), 1, 0, 0)); - }, - // SkewX - skewX: function skewX(x, cx, cy) { - return this.skew(x, 0, cx, cy); - }, - // SkewY - skewY: function skewY(y, cx, cy) { - return this.skew(0, y, cx, cy); - }, - // Transform around a center point - around: function around(cx, cy, matrix) { - return this.multiply(new SVG.Matrix(1, 0, 0, 1, cx || 0, cy || 0)).multiply(matrix).multiply(new SVG.Matrix(1, 0, 0, 1, -cx || 0, -cy || 0)); - }, - // Convert to native SVGMatrix - native: function native() { - // create new matrix - var matrix = SVG.parser.native.createSVGMatrix(); // update with current values - - for (var i = abcdef.length - 1; i >= 0; i--) { - matrix[abcdef[i]] = this[abcdef[i]]; - } - - return matrix; - }, - // Convert matrix to string - toString: function toString() { - // Construct the matrix directly, avoid values that are too small - return 'matrix(' + float32String(this.a) + ',' + float32String(this.b) + ',' + float32String(this.c) + ',' + float32String(this.d) + ',' + float32String(this.e) + ',' + float32String(this.f) + ')'; - } - }, - // Define parent - parent: SVG.Element, - // Add parent method - construct: { - // Get current matrix - ctm: function ctm() { - return new SVG.Matrix(this.node.getCTM()); - }, - // Get current screen matrix - screenCTM: function screenCTM() { - /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537 - This is needed because FF does not return the transformation matrix - for the inner coordinate system when getScreenCTM() is called on nested svgs. - However all other Browsers do that */ - if (this instanceof SVG.Nested) { - var rect = this.rect(1, 1); - var m = rect.node.getScreenCTM(); - rect.remove(); - return new SVG.Matrix(m); - } - - return new SVG.Matrix(this.node.getScreenCTM()); - } - } - }); - SVG.Point = SVG.invent({ - // Initialize - create: function create(x, y) { - var source, - base = { - x: 0, - y: 0 // ensure source as object - - }; - source = Array.isArray(x) ? { - x: x[0], - y: x[1] - } : _typeof(x) === 'object' ? { - x: x.x, - y: x.y - } : x != null ? { - x: x, - y: y != null ? y : x - } : base; // If y has no value, then x is used has its value - // merge source - - this.x = source.x; - this.y = source.y; - }, - // Add methods - extend: { - // Clone point - clone: function clone() { - return new SVG.Point(this); - }, - // Morph one point into another - morph: function morph(x, y) { - // store new destination - this.destination = new SVG.Point(x, y); - return this; - }, - // Get morphed point at a given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; // calculate morphed matrix at a given position - - var point = new SVG.Point({ - x: this.x + (this.destination.x - this.x) * pos, - y: this.y + (this.destination.y - this.y) * pos - }); - return point; - }, - // Convert to native SVGPoint - native: function native() { - // create new point - var point = SVG.parser.native.createSVGPoint(); // update with current values - - point.x = this.x; - point.y = this.y; - return point; - }, - // transform point with matrix - transform: function transform(matrix) { - return new SVG.Point(this.native().matrixTransform(matrix.native())); - } - } - }); - SVG.extend(SVG.Element, { - // Get point - point: function point(x, y) { - return new SVG.Point(x, y).transform(this.screenCTM().inverse()); - } - }); - SVG.extend(SVG.Element, { - // Set svg element attribute - attr: function attr(a, v, n) { - // act as full getter - if (a == null) { - // get an object of attributes - a = {}; - v = this.node.attributes; - - for (n = v.length - 1; n >= 0; n--) { - a[v[n].nodeName] = SVG.regex.isNumber.test(v[n].nodeValue) ? parseFloat(v[n].nodeValue) : v[n].nodeValue; - } - - return a; - } else if (_typeof(a) === 'object') { - // apply every attribute individually if an object is passed - for (v in a) { - this.attr(v, a[v]); - } - } else if (v === null) { - // remove value - this.node.removeAttribute(a); - } else if (v == null) { - // act as a getter if the first and only argument is not an object - v = this.node.getAttribute(a); - return v == null ? SVG.defaults.attrs[a] : SVG.regex.isNumber.test(v) ? parseFloat(v) : v; - } else { - // BUG FIX: some browsers will render a stroke if a color is given even though stroke width is 0 - if (a == 'stroke-width') { - this.attr('stroke', parseFloat(v) > 0 ? this._stroke : null); - } else if (a == 'stroke') { - this._stroke = v; - } // convert image fill and stroke to patterns - - - if (a == 'fill' || a == 'stroke') { - if (SVG.regex.isImage.test(v)) { - v = this.doc().defs().image(v, 0, 0); - } - - if (v instanceof SVG.Image) { - v = this.doc().defs().pattern(0, 0, function () { - this.add(v); - }); - } - } // ensure correct numeric values (also accepts NaN and Infinity) - - - if (typeof v === 'number') { - v = new SVG.Number(v); - } // ensure full hex color - else if (SVG.Color.isColor(v)) { - v = new SVG.Color(v); - } // parse array values - else if (Array.isArray(v)) { - v = new SVG.Array(v); - } // if the passed attribute is leading... - - - if (a == 'leading') { - // ... call the leading method instead - if (this.leading) { - this.leading(v); - } - } else { - // set given attribute on node - typeof n === 'string' ? this.node.setAttributeNS(n, a, v.toString()) : this.node.setAttribute(a, v.toString()); - } // rebuild if required - - - if (this.rebuild && (a == 'font-size' || a == 'x')) { - this.rebuild(a, v); - } - } - - return this; - } - }); - SVG.extend(SVG.Element, { - // Add transformations - transform: function transform(o, relative) { - // get target in case of the fx module, otherwise reference this - var target = this, - matrix, - bbox; // act as a getter - - if (_typeof(o) !== 'object') { - // get current matrix - matrix = new SVG.Matrix(target).extract(); - return typeof o === 'string' ? matrix[o] : matrix; - } // get current matrix - - - matrix = new SVG.Matrix(target); // ensure relative flag - - relative = !!relative || !!o.relative; // act on matrix - - if (o.a != null) { - matrix = relative // relative - ? matrix.multiply(new SVG.Matrix(o)) // absolute - : new SVG.Matrix(o); // act on rotation - } else if (o.rotation != null) { - // ensure centre point - ensureCentre(o, target); // apply transformation - - matrix = relative // relative - ? matrix.rotate(o.rotation, o.cx, o.cy) // absolute - : matrix.rotate(o.rotation - matrix.extract().rotation, o.cx, o.cy); // act on scale - } else if (o.scale != null || o.scaleX != null || o.scaleY != null) { - // ensure centre point - ensureCentre(o, target); // ensure scale values on both axes - - o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1; - o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1; - - if (!relative) { - // absolute; multiply inversed values - var e = matrix.extract(); - o.scaleX = o.scaleX * 1 / e.scaleX; - o.scaleY = o.scaleY * 1 / e.scaleY; - } - - matrix = matrix.scale(o.scaleX, o.scaleY, o.cx, o.cy); // act on skew - } else if (o.skew != null || o.skewX != null || o.skewY != null) { - // ensure centre point - ensureCentre(o, target); // ensure skew values on both axes - - o.skewX = o.skew != null ? o.skew : o.skewX != null ? o.skewX : 0; - o.skewY = o.skew != null ? o.skew : o.skewY != null ? o.skewY : 0; - - if (!relative) { - // absolute; reset skew values - var e = matrix.extract(); - matrix = matrix.multiply(new SVG.Matrix().skew(e.skewX, e.skewY, o.cx, o.cy).inverse()); - } - - matrix = matrix.skew(o.skewX, o.skewY, o.cx, o.cy); // act on flip - } else if (o.flip) { - if (o.flip == 'x' || o.flip == 'y') { - o.offset = o.offset == null ? target.bbox()['c' + o.flip] : o.offset; - } else { - if (o.offset == null) { - bbox = target.bbox(); - o.flip = bbox.cx; - o.offset = bbox.cy; - } else { - o.flip = o.offset; - } - } - - matrix = new SVG.Matrix().flip(o.flip, o.offset); // act on translate - } else if (o.x != null || o.y != null) { - if (relative) { - // relative - matrix = matrix.translate(o.x, o.y); - } else { - // absolute - if (o.x != null) matrix.e = o.x; - if (o.y != null) matrix.f = o.y; - } - } - - return this.attr('transform', matrix); - } - }); - SVG.extend(SVG.FX, { - transform: function transform(o, relative) { - // get target in case of the fx module, otherwise reference this - var target = this.target(), - matrix, - bbox; // act as a getter - - if (_typeof(o) !== 'object') { - // get current matrix - matrix = new SVG.Matrix(target).extract(); - return typeof o === 'string' ? matrix[o] : matrix; - } // ensure relative flag - - - relative = !!relative || !!o.relative; // act on matrix - - if (o.a != null) { - matrix = new SVG.Matrix(o); // act on rotation - } else if (o.rotation != null) { - // ensure centre point - ensureCentre(o, target); // apply transformation - - matrix = new SVG.Rotate(o.rotation, o.cx, o.cy); // act on scale - } else if (o.scale != null || o.scaleX != null || o.scaleY != null) { - // ensure centre point - ensureCentre(o, target); // ensure scale values on both axes - - o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1; - o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1; - matrix = new SVG.Scale(o.scaleX, o.scaleY, o.cx, o.cy); // act on skew - } else if (o.skewX != null || o.skewY != null) { - // ensure centre point - ensureCentre(o, target); // ensure skew values on both axes - - o.skewX = o.skewX != null ? o.skewX : 0; - o.skewY = o.skewY != null ? o.skewY : 0; - matrix = new SVG.Skew(o.skewX, o.skewY, o.cx, o.cy); // act on flip - } else if (o.flip) { - if (o.flip == 'x' || o.flip == 'y') { - o.offset = o.offset == null ? target.bbox()['c' + o.flip] : o.offset; - } else { - if (o.offset == null) { - bbox = target.bbox(); - o.flip = bbox.cx; - o.offset = bbox.cy; - } else { - o.flip = o.offset; - } - } - - matrix = new SVG.Matrix().flip(o.flip, o.offset); // act on translate - } else if (o.x != null || o.y != null) { - matrix = new SVG.Translate(o.x, o.y); - } - - if (!matrix) return this; - matrix.relative = relative; - this.last().transforms.push(matrix); - return this._callStart(); - } - }); - SVG.extend(SVG.Element, { - // Reset all transformations - untransform: function untransform() { - return this.attr('transform', null); - }, - // merge the whole transformation chain into one matrix and returns it - matrixify: function matrixify() { - var matrix = (this.attr('transform') || ''). // split transformations - split(SVG.regex.transforms).slice(0, -1).map(function (str) { - // generate key => value pairs - var kv = str.trim().split('('); - return [kv[0], kv[1].split(SVG.regex.delimiter).map(function (str) { - return parseFloat(str); - })]; - }) // merge every transformation into one matrix - .reduce(function (matrix, transform) { - if (transform[0] == 'matrix') return matrix.multiply(arrayToMatrix(transform[1])); - return matrix[transform[0]].apply(matrix, transform[1]); - }, new SVG.Matrix()); - return matrix; - }, - // add an element to another parent without changing the visual representation on the screen - toParent: function toParent(parent) { - if (this == parent) return this; - var ctm = this.screenCTM(); - var pCtm = parent.screenCTM().inverse(); - this.addTo(parent).untransform().transform(pCtm.multiply(ctm)); - return this; - }, - // same as above with parent equals root-svg - toDoc: function toDoc() { - return this.toParent(this.doc()); - } - }); - SVG.Transformation = SVG.invent({ - create: function create(source, inversed) { - if (arguments.length > 1 && typeof inversed !== 'boolean') { - return this.constructor.call(this, [].slice.call(arguments)); - } - - if (Array.isArray(source)) { - for (var i = 0, len = this.arguments.length; i < len; ++i) { - this[this.arguments[i]] = source[i]; - } - } else if (_typeof(source) === 'object') { - for (var i = 0, len = this.arguments.length; i < len; ++i) { - this[this.arguments[i]] = source[this.arguments[i]]; - } - } - - this.inversed = false; - - if (inversed === true) { - this.inversed = true; - } - }, - extend: { - arguments: [], - method: '', - at: function at(pos) { - var params = []; - - for (var i = 0, len = this.arguments.length; i < len; ++i) { - params.push(this[this.arguments[i]]); - } - - var m = this._undo || new SVG.Matrix(); - m = new SVG.Matrix().morph(SVG.Matrix.prototype[this.method].apply(m, params)).at(pos); - return this.inversed ? m.inverse() : m; - }, - undo: function undo(o) { - for (var i = 0, len = this.arguments.length; i < len; ++i) { - o[this.arguments[i]] = typeof this[this.arguments[i]] === 'undefined' ? 0 : o[this.arguments[i]]; - } // The method SVG.Matrix.extract which was used before calling this - // method to obtain a value for the parameter o doesn't return a cx and - // a cy so we use the ones that were provided to this object at its creation - - - o.cx = this.cx; - o.cy = this.cy; - this._undo = new SVG[capitalize(this.method)](o, true).at(1); - return this; - } - } - }); - SVG.Translate = SVG.invent({ - parent: SVG.Matrix, - inherit: SVG.Transformation, - create: function create(source, inversed) { - this.constructor.apply(this, [].slice.call(arguments)); - }, - extend: { - arguments: ['transformedX', 'transformedY'], - method: 'translate' - } - }); - SVG.Rotate = SVG.invent({ - parent: SVG.Matrix, - inherit: SVG.Transformation, - create: function create(source, inversed) { - this.constructor.apply(this, [].slice.call(arguments)); - }, - extend: { - arguments: ['rotation', 'cx', 'cy'], - method: 'rotate', - at: function at(pos) { - var m = new SVG.Matrix().rotate(new SVG.Number().morph(this.rotation - (this._undo ? this._undo.rotation : 0)).at(pos), this.cx, this.cy); - return this.inversed ? m.inverse() : m; - }, - undo: function undo(o) { - this._undo = o; - return this; - } - } - }); - SVG.Scale = SVG.invent({ - parent: SVG.Matrix, - inherit: SVG.Transformation, - create: function create(source, inversed) { - this.constructor.apply(this, [].slice.call(arguments)); - }, - extend: { - arguments: ['scaleX', 'scaleY', 'cx', 'cy'], - method: 'scale' - } - }); - SVG.Skew = SVG.invent({ - parent: SVG.Matrix, - inherit: SVG.Transformation, - create: function create(source, inversed) { - this.constructor.apply(this, [].slice.call(arguments)); - }, - extend: { - arguments: ['skewX', 'skewY', 'cx', 'cy'], - method: 'skew' - } - }); - SVG.extend(SVG.Element, { - // Dynamic style generator - style: function style(s, v) { - if (arguments.length == 0) { - // get full style - return this.node.style.cssText || ''; - } else if (arguments.length < 2) { - // apply every style individually if an object is passed - if (_typeof(s) === 'object') { - for (v in s) { - this.style(v, s[v]); - } - } else if (SVG.regex.isCss.test(s)) { - // parse css string - s = s.split(/\s*;\s*/) // filter out suffix ; and stuff like ;; - .filter(function (e) { - return !!e; - }).map(function (e) { - return e.split(/\s*:\s*/); - }); // apply every definition individually - - while (v = s.pop()) { - this.style(v[0], v[1]); - } - } else { - // act as a getter if the first and only argument is not an object - return this.node.style[camelCase(s)]; - } - } else { - this.node.style[camelCase(s)] = v === null || SVG.regex.isBlank.test(v) ? '' : v; - } - - return this; - } - }); - SVG.Parent = SVG.invent({ - // Initialize node - create: function create(element) { - this.constructor.call(this, element); - }, - // Inherit from - inherit: SVG.Element, - // Add class methods - extend: { - // Returns all child elements - children: function children() { - return SVG.utils.map(SVG.utils.filterSVGElements(this.node.childNodes), function (node) { - return SVG.adopt(node); - }); - }, - // Add given element at a position - add: function add(element, i) { - if (i == null) { - this.node.appendChild(element.node); - } else if (element.node != this.node.childNodes[i]) { - this.node.insertBefore(element.node, this.node.childNodes[i]); - } - - return this; - }, - // Basically does the same as `add()` but returns the added element instead - put: function put(element, i) { - this.add(element, i); - return element; - }, - // Checks if the given element is a child - has: function has(element) { - return this.index(element) >= 0; - }, - // Gets index of given element - index: function index(element) { - return [].slice.call(this.node.childNodes).indexOf(element.node); - }, - // Get a element at the given index - get: function get(i) { - return SVG.adopt(this.node.childNodes[i]); - }, - // Get first child - first: function first() { - return this.get(0); - }, - // Get the last child - last: function last() { - return this.get(this.node.childNodes.length - 1); - }, - // Iterates over all children and invokes a given block - each: function each(block, deep) { - var i, - il, - children = this.children(); - - for (i = 0, il = children.length; i < il; i++) { - if (children[i] instanceof SVG.Element) { - block.apply(children[i], [i, children]); - } - - if (deep && children[i] instanceof SVG.Container) { - children[i].each(block, deep); - } - } - - return this; - }, - // Remove a given child - removeElement: function removeElement(element) { - this.node.removeChild(element.node); - return this; - }, - // Remove all elements in this container - clear: function clear() { - // remove children - while (this.node.hasChildNodes()) { - this.node.removeChild(this.node.lastChild); - } // remove defs reference - - - delete this._defs; - return this; - }, - // Get defs - defs: function defs() { - return this.doc().defs(); - } - } - }); - SVG.extend(SVG.Parent, { - ungroup: function ungroup(parent, depth) { - if (depth === 0 || this instanceof SVG.Defs || this.node == SVG.parser.draw) return this; - parent = parent || (this instanceof SVG.Doc ? this : this.parent(SVG.Parent)); - depth = depth || Infinity; - this.each(function () { - if (this instanceof SVG.Defs) return this; - if (this instanceof SVG.Parent) return this.ungroup(parent, depth - 1); - return this.toParent(parent); - }); - this.node.firstChild || this.remove(); - return this; - }, - flatten: function flatten(parent, depth) { - return this.ungroup(parent, depth); - } - }); - SVG.Container = SVG.invent({ - // Initialize node - create: function create(element) { - this.constructor.call(this, element); - }, - // Inherit from - inherit: SVG.Parent - }); - SVG.ViewBox = SVG.invent({ - create: function create(source) { - var base = [0, 0, 0, 0]; - var x, - y, - width, - height, - box, - view, - we, - he, - wm = 1, - // width multiplier - hm = 1, - // height multiplier - reg = /[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?/gi; - - if (source instanceof SVG.Element) { - we = source; - he = source; - view = (source.attr('viewBox') || '').match(reg); - box = source.bbox; // get dimensions of current node - - width = new SVG.Number(source.width()); - height = new SVG.Number(source.height()); // find nearest non-percentual dimensions - - while (width.unit == '%') { - wm *= width.value; - width = new SVG.Number(we instanceof SVG.Doc ? we.parent().offsetWidth : we.parent().width()); - we = we.parent(); - } - - while (height.unit == '%') { - hm *= height.value; - height = new SVG.Number(he instanceof SVG.Doc ? he.parent().offsetHeight : he.parent().height()); - he = he.parent(); - } // ensure defaults - - - this.x = 0; - this.y = 0; - this.width = width * wm; - this.height = height * hm; - this.zoom = 1; - - if (view) { - // get width and height from viewbox - x = parseFloat(view[0]); - y = parseFloat(view[1]); - width = parseFloat(view[2]); - height = parseFloat(view[3]); // calculate zoom accoring to viewbox - - this.zoom = this.width / this.height > width / height ? this.height / height : this.width / width; // calculate real pixel dimensions on parent SVG.Doc element - - this.x = x; - this.y = y; - this.width = width; - this.height = height; - } - } else { - // ensure source as object - source = typeof source === 'string' ? source.match(reg).map(function (el) { - return parseFloat(el); - }) : Array.isArray(source) ? source : _typeof(source) === 'object' ? [source.x, source.y, source.width, source.height] : arguments.length == 4 ? [].slice.call(arguments) : base; - this.x = source[0]; - this.y = source[1]; - this.width = source[2]; - this.height = source[3]; - } - }, - extend: { - toString: function toString() { - return this.x + ' ' + this.y + ' ' + this.width + ' ' + this.height; - }, - morph: function morph(x, y, width, height) { - this.destination = new SVG.ViewBox(x, y, width, height); - return this; - }, - at: function at(pos) { - if (!this.destination) return this; - return new SVG.ViewBox([this.x + (this.destination.x - this.x) * pos, this.y + (this.destination.y - this.y) * pos, this.width + (this.destination.width - this.width) * pos, this.height + (this.destination.height - this.height) * pos]); - } - }, - // Define parent - parent: SVG.Container, - // Add parent method - construct: { - // get/set viewbox - viewbox: function viewbox(x, y, width, height) { - if (arguments.length == 0) // act as a getter if there are no arguments - { - return new SVG.ViewBox(this); - } // otherwise act as a setter - - - return this.attr('viewBox', new SVG.ViewBox(x, y, width, height)); - } - } - }) // Add events to elements - ; - ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout', 'mousemove', // , 'mouseenter' -> not supported by IE - // , 'mouseleave' -> not supported by IE - 'touchstart', 'touchmove', 'touchleave', 'touchend', 'touchcancel'].forEach(function (event) { - // add event to SVG.Element - SVG.Element.prototype[event] = function (f) { - // bind event to element rather than element node - SVG.on(this.node, event, f); - return this; - }; - }); // Initialize listeners stack - - SVG.listeners = []; - SVG.handlerMap = []; - SVG.listenerId = 0; // Add event binder in the SVG namespace - - SVG.on = function (node, event, listener, binding, options) { - // create listener, get object-index - var l = listener.bind(binding || node.instance || node), - index = (SVG.handlerMap.indexOf(node) + 1 || SVG.handlerMap.push(node)) - 1, - ev = event.split('.')[0], - ns = event.split('.')[1] || '*'; // ensure valid object - - SVG.listeners[index] = SVG.listeners[index] || {}; - SVG.listeners[index][ev] = SVG.listeners[index][ev] || {}; - SVG.listeners[index][ev][ns] = SVG.listeners[index][ev][ns] || {}; - - if (!listener._svgjsListenerId) { - listener._svgjsListenerId = ++SVG.listenerId; - } // reference listener - - - SVG.listeners[index][ev][ns][listener._svgjsListenerId] = l; // add listener - - node.addEventListener(ev, l, options || false); - }; // Add event unbinder in the SVG namespace - - - SVG.off = function (node, event, listener) { - var index = SVG.handlerMap.indexOf(node), - ev = event && event.split('.')[0], - ns = event && event.split('.')[1], - namespace = ''; - if (index == -1) return; - - if (listener) { - if (typeof listener === 'function') listener = listener._svgjsListenerId; - if (!listener) return; // remove listener reference - - if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns || '*']) { - // remove listener - node.removeEventListener(ev, SVG.listeners[index][ev][ns || '*'][listener], false); - delete SVG.listeners[index][ev][ns || '*'][listener]; - } - } else if (ns && ev) { - // remove all listeners for a namespaced event - if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns]) { - for (listener in SVG.listeners[index][ev][ns]) { - SVG.off(node, [ev, ns].join('.'), listener); - } - - delete SVG.listeners[index][ev][ns]; - } - } else if (ns) { - // remove all listeners for a specific namespace - for (event in SVG.listeners[index]) { - for (namespace in SVG.listeners[index][event]) { - if (ns === namespace) { - SVG.off(node, [event, ns].join('.')); - } - } - } - } else if (ev) { - // remove all listeners for the event - if (SVG.listeners[index][ev]) { - for (namespace in SVG.listeners[index][ev]) { - SVG.off(node, [ev, namespace].join('.')); - } - - delete SVG.listeners[index][ev]; - } - } else { - // remove all listeners on a given node - for (event in SVG.listeners[index]) { - SVG.off(node, event); - } - - delete SVG.listeners[index]; - delete SVG.handlerMap[index]; - } - }; // - - - SVG.extend(SVG.Element, { - // Bind given event to listener - on: function on(event, listener, binding, options) { - SVG.on(this.node, event, listener, binding, options); - return this; - }, - // Unbind event from listener - off: function off(event, listener) { - SVG.off(this.node, event, listener); - return this; - }, - // Fire given event - fire: function fire(event, data) { - // Dispatch event - if (event instanceof window.Event) { - this.node.dispatchEvent(event); - } else { - this.node.dispatchEvent(event = new SVG.CustomEvent(event, { - detail: data, - cancelable: true - })); - } - - this._event = event; - return this; - }, - event: function event() { - return this._event; - } - }); - SVG.Defs = SVG.invent({ - // Initialize node - create: 'defs', - // Inherit from - inherit: SVG.Container - }); - SVG.G = SVG.invent({ - // Initialize node - create: 'g', - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Move over x-axis - x: function x(_x3) { - return _x3 == null ? this.transform('x') : this.transform({ - x: _x3 - this.x() - }, true); - }, - // Move over y-axis - y: function y(_y3) { - return _y3 == null ? this.transform('y') : this.transform({ - y: _y3 - this.y() - }, true); - }, - // Move by center over x-axis - cx: function cx(x) { - return x == null ? this.gbox().cx : this.x(x - this.gbox().width / 2); - }, - // Move by center over y-axis - cy: function cy(y) { - return y == null ? this.gbox().cy : this.y(y - this.gbox().height / 2); - }, - gbox: function gbox() { - var bbox = this.bbox(), - trans = this.transform(); - bbox.x += trans.x; - bbox.x2 += trans.x; - bbox.cx += trans.x; - bbox.y += trans.y; - bbox.y2 += trans.y; - bbox.cy += trans.y; - return bbox; - } - }, - // Add parent method - construct: { - // Create a group element - group: function group() { - return this.put(new SVG.G()); - } - } - }); - SVG.Doc = SVG.invent({ - // Initialize node - create: function create(element) { - if (element) { - // ensure the presence of a dom element - element = typeof element === 'string' ? document.getElementById(element) : element; // If the target is an svg element, use that element as the main wrapper. - // This allows svg.js to work with svg documents as well. - - if (element.nodeName == 'svg') { - this.constructor.call(this, element); - } else { - this.constructor.call(this, SVG.create('svg')); - element.appendChild(this.node); - this.size('100%', '100%'); - } // set svg element attributes and ensure defs node - - - this.namespace().defs(); - } - }, - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Add namespaces - namespace: function namespace() { - return this.attr({ - xmlns: SVG.ns, - version: '1.1' - }).attr('xmlns:xlink', SVG.xlink, SVG.xmlns).attr('xmlns:svgjs', SVG.svgjs, SVG.xmlns); - }, - // Creates and returns defs element - defs: function defs() { - if (!this._defs) { - var defs; // Find or create a defs element in this instance - - if (defs = this.node.getElementsByTagName('defs')[0]) { - this._defs = SVG.adopt(defs); - } else { - this._defs = new SVG.Defs(); - } // Make sure the defs node is at the end of the stack - - - this.node.appendChild(this._defs.node); - } - - return this._defs; - }, - // custom parent method - parent: function parent() { - if (!this.node.parentNode || this.node.parentNode.nodeName == '#document') return null; - return this.node.parentNode; - }, - // Fix for possible sub-pixel offset. See: - // https://bugzilla.mozilla.org/show_bug.cgi?id=608812 - spof: function spof() { - var pos = this.node.getScreenCTM(); - - if (pos) { - this.style('left', -pos.e % 1 + 'px').style('top', -pos.f % 1 + 'px'); - } - - return this; - }, - // Removes the doc from the DOM - remove: function remove() { - if (this.parent()) { - this.parent().removeChild(this.node); - } - - return this; - }, - clear: function clear() { - // remove children - while (this.node.hasChildNodes()) { - this.node.removeChild(this.node.lastChild); - } // remove defs reference - - - delete this._defs; // add back parser - - if (SVG.parser.draw && !SVG.parser.draw.parentNode) { - this.node.appendChild(SVG.parser.draw); - } - - return this; - }, - clone: function clone(parent) { - // write dom data to the dom so the clone can pickup the data - this.writeDataToDom(); // get reference to node - - var node = this.node; // clone element and assign new id - - var clone = assignNewId(node.cloneNode(true)); // insert the clone in the given parent or after myself - - if (parent) { - (parent.node || parent).appendChild(clone.node); - } else { - node.parentNode.insertBefore(clone.node, node.nextSibling); - } - - return clone; - } - } - }); // ### This module adds backward / forward functionality to elements. - // - - SVG.extend(SVG.Element, { - // Get all siblings, including myself - siblings: function siblings() { - return this.parent().children(); - }, - // Get the curent position siblings - position: function position() { - return this.parent().index(this); - }, - // Get the next element (will return null if there is none) - next: function next() { - return this.siblings()[this.position() + 1]; - }, - // Get the next element (will return null if there is none) - previous: function previous() { - return this.siblings()[this.position() - 1]; - }, - // Send given element one step forward - forward: function forward() { - var i = this.position() + 1, - p = this.parent(); // move node one step forward - - p.removeElement(this).add(this, i); // make sure defs node is always at the top - - if (p instanceof SVG.Doc) { - p.node.appendChild(p.defs().node); - } - - return this; - }, - // Send given element one step backward - backward: function backward() { - var i = this.position(); - - if (i > 0) { - this.parent().removeElement(this).add(this, i - 1); - } - - return this; - }, - // Send given element all the way to the front - front: function front() { - var p = this.parent(); // Move node forward - - p.node.appendChild(this.node); // Make sure defs node is always at the top - - if (p instanceof SVG.Doc) { - p.node.appendChild(p.defs().node); - } - - return this; - }, - // Send given element all the way to the back - back: function back() { - if (this.position() > 0) { - this.parent().removeElement(this).add(this, 0); - } - - return this; - }, - // Inserts a given element before the targeted element - before: function before(element) { - element.remove(); - var i = this.position(); - this.parent().add(element, i); - return this; - }, - // Insters a given element after the targeted element - after: function after(element) { - element.remove(); - var i = this.position(); - this.parent().add(element, i + 1); - return this; - } - }); - SVG.Mask = SVG.invent({ - // Initialize node - create: function create() { - this.constructor.call(this, SVG.create('mask')); // keep references to masked elements - - this.targets = []; - }, - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Unmask all masked elements and remove itself - remove: function remove() { - // unmask all targets - for (var i = this.targets.length - 1; i >= 0; i--) { - if (this.targets[i]) { - this.targets[i].unmask(); - } - } - - this.targets = []; // remove mask from parent - - SVG.Element.prototype.remove.call(this); - return this; - } - }, - // Add parent method - construct: { - // Create masking element - mask: function mask() { - return this.defs().put(new SVG.Mask()); - } - } - }); - SVG.extend(SVG.Element, { - // Distribute mask to svg element - maskWith: function maskWith(element) { - // use given mask or create a new one - this.masker = element instanceof SVG.Mask ? element : this.parent().mask().add(element); // store reverence on self in mask - - this.masker.targets.push(this); // apply mask - - return this.attr('mask', 'url("#' + this.masker.attr('id') + '")'); - }, - // Unmask element - unmask: function unmask() { - delete this.masker; - return this.attr('mask', null); - } - }); - SVG.ClipPath = SVG.invent({ - // Initialize node - create: function create() { - this.constructor.call(this, SVG.create('clipPath')); // keep references to clipped elements - - this.targets = []; - }, - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Unclip all clipped elements and remove itself - remove: function remove() { - // unclip all targets - for (var i = this.targets.length - 1; i >= 0; i--) { - if (this.targets[i]) { - this.targets[i].unclip(); - } - } - - this.targets = []; // remove clipPath from parent - - this.parent().removeElement(this); - return this; - } - }, - // Add parent method - construct: { - // Create clipping element - clip: function clip() { - return this.defs().put(new SVG.ClipPath()); - } - } - }); // - - SVG.extend(SVG.Element, { - // Distribute clipPath to svg element - clipWith: function clipWith(element) { - // use given clip or create a new one - this.clipper = element instanceof SVG.ClipPath ? element : this.parent().clip().add(element); // store reverence on self in mask - - this.clipper.targets.push(this); // apply mask - - return this.attr('clip-path', 'url("#' + this.clipper.attr('id') + '")'); - }, - // Unclip element - unclip: function unclip() { - delete this.clipper; - return this.attr('clip-path', null); - } - }); - SVG.Gradient = SVG.invent({ - // Initialize node - create: function create(type) { - this.constructor.call(this, SVG.create(type + 'Gradient')); // store type - - this.type = type; - }, - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Add a color stop - at: function at(offset, color, opacity) { - return this.put(new SVG.Stop()).update(offset, color, opacity); - }, - // Update gradient - update: function update(block) { - // remove all stops - this.clear(); // invoke passed block - - if (typeof block === 'function') { - block.call(this, this); - } - - return this; - }, - // Return the fill id - fill: function fill() { - return 'url(#' + this.id() + ')'; - }, - // Alias string convertion to fill - toString: function toString() { - return this.fill(); - }, - // custom attr to handle transform - attr: function attr(a, b, c) { - if (a == 'transform') a = 'gradientTransform'; - return SVG.Container.prototype.attr.call(this, a, b, c); - } - }, - // Add parent method - construct: { - // Create gradient element in defs - gradient: function gradient(type, block) { - return this.defs().gradient(type, block); - } - } - }); // Add animatable methods to both gradient and fx module - - SVG.extend(SVG.Gradient, SVG.FX, { - // From position - from: function from(x, y) { - return (this._target || this).type == 'radial' ? this.attr({ - fx: new SVG.Number(x), - fy: new SVG.Number(y) - }) : this.attr({ - x1: new SVG.Number(x), - y1: new SVG.Number(y) - }); - }, - // To position - to: function to(x, y) { - return (this._target || this).type == 'radial' ? this.attr({ - cx: new SVG.Number(x), - cy: new SVG.Number(y) - }) : this.attr({ - x2: new SVG.Number(x), - y2: new SVG.Number(y) - }); - } - }); // Base gradient generation - - SVG.extend(SVG.Defs, { - // define gradient - gradient: function gradient(type, block) { - return this.put(new SVG.Gradient(type)).update(block); - } - }); - SVG.Stop = SVG.invent({ - // Initialize node - create: 'stop', - // Inherit from - inherit: SVG.Element, - // Add class methods - extend: { - // add color stops - update: function update(o) { - if (typeof o === 'number' || o instanceof SVG.Number) { - o = { - offset: arguments[0], - color: arguments[1], - opacity: arguments[2] - }; - } // set attributes - - - if (o.opacity != null) this.attr('stop-opacity', o.opacity); - if (o.color != null) this.attr('stop-color', o.color); - if (o.offset != null) this.attr('offset', new SVG.Number(o.offset)); - return this; - } - } - }); - SVG.Pattern = SVG.invent({ - // Initialize node - create: 'pattern', - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Return the fill id - fill: function fill() { - return 'url(#' + this.id() + ')'; - }, - // Update pattern by rebuilding - update: function update(block) { - // remove content - this.clear(); // invoke passed block - - if (typeof block === 'function') { - block.call(this, this); - } - - return this; - }, - // Alias string convertion to fill - toString: function toString() { - return this.fill(); - }, - // custom attr to handle transform - attr: function attr(a, b, c) { - if (a == 'transform') a = 'patternTransform'; - return SVG.Container.prototype.attr.call(this, a, b, c); - } - }, - // Add parent method - construct: { - // Create pattern element in defs - pattern: function pattern(width, height, block) { - return this.defs().pattern(width, height, block); - } - } - }); - SVG.extend(SVG.Defs, { - // Define gradient - pattern: function pattern(width, height, block) { - return this.put(new SVG.Pattern()).update(block).attr({ - x: 0, - y: 0, - width: width, - height: height, - patternUnits: 'userSpaceOnUse' - }); - } - }); - SVG.Shape = SVG.invent({ - // Initialize node - create: function create(element) { - this.constructor.call(this, element); - }, - // Inherit from - inherit: SVG.Element - }); - SVG.Bare = SVG.invent({ - // Initialize - create: function create(element, inherit) { - // construct element - this.constructor.call(this, SVG.create(element)); // inherit custom methods - - if (inherit) { - for (var method in inherit.prototype) { - if (typeof inherit.prototype[method] === 'function') { - this[method] = inherit.prototype[method]; - } - } - } - }, - // Inherit from - inherit: SVG.Element, - // Add methods - extend: { - // Insert some plain text - words: function words(text) { - // remove contents - while (this.node.hasChildNodes()) { - this.node.removeChild(this.node.lastChild); - } // create text node - - - this.node.appendChild(document.createTextNode(text)); - return this; - } - } - }); - SVG.extend(SVG.Parent, { - // Create an element that is not described by SVG.js - element: function element(_element, inherit) { - return this.put(new SVG.Bare(_element, inherit)); - } - }); - SVG.Symbol = SVG.invent({ - // Initialize node - create: 'symbol', - // Inherit from - inherit: SVG.Container, - construct: { - // create symbol - symbol: function symbol() { - return this.put(new SVG.Symbol()); - } - } - }); - SVG.Use = SVG.invent({ - // Initialize node - create: 'use', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Use element as a reference - element: function element(_element2, file) { - // Set lined element - return this.attr('href', (file || '') + '#' + _element2, SVG.xlink); - } - }, - // Add parent method - construct: { - // Create a use element - use: function use(element, file) { - return this.put(new SVG.Use()).element(element, file); - } - } - }); - SVG.Rect = SVG.invent({ - // Initialize node - create: 'rect', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create a rect element - rect: function rect(width, height) { - return this.put(new SVG.Rect()).size(width, height); - } - } - }); - SVG.Circle = SVG.invent({ - // Initialize node - create: 'circle', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create circle element, based on ellipse - circle: function circle(size) { - return this.put(new SVG.Circle()).rx(new SVG.Number(size).divide(2)).move(0, 0); - } - } - }); - SVG.extend(SVG.Circle, SVG.FX, { - // Radius x value - rx: function rx(_rx) { - return this.attr('r', _rx); - }, - // Alias radius x value - ry: function ry(_ry) { - return this.rx(_ry); - } - }); - SVG.Ellipse = SVG.invent({ - // Initialize node - create: 'ellipse', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create an ellipse - ellipse: function ellipse(width, height) { - return this.put(new SVG.Ellipse()).size(width, height).move(0, 0); - } - } - }); - SVG.extend(SVG.Ellipse, SVG.Rect, SVG.FX, { - // Radius x value - rx: function rx(_rx2) { - return this.attr('rx', _rx2); - }, - // Radius y value - ry: function ry(_ry2) { - return this.attr('ry', _ry2); - } - }); // Add common method - - SVG.extend(SVG.Circle, SVG.Ellipse, { - // Move over x-axis - x: function x(_x4) { - return _x4 == null ? this.cx() - this.rx() : this.cx(_x4 + this.rx()); - }, - // Move over y-axis - y: function y(_y4) { - return _y4 == null ? this.cy() - this.ry() : this.cy(_y4 + this.ry()); - }, - // Move by center over x-axis - cx: function cx(x) { - return x == null ? this.attr('cx') : this.attr('cx', x); - }, - // Move by center over y-axis - cy: function cy(y) { - return y == null ? this.attr('cy') : this.attr('cy', y); - }, - // Set width of element - width: function width(_width3) { - return _width3 == null ? this.rx() * 2 : this.rx(new SVG.Number(_width3).divide(2)); - }, - // Set height of element - height: function height(_height3) { - return _height3 == null ? this.ry() * 2 : this.ry(new SVG.Number(_height3).divide(2)); - }, - // Custom size function - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.rx(new SVG.Number(p.width).divide(2)).ry(new SVG.Number(p.height).divide(2)); - } - }); - SVG.Line = SVG.invent({ - // Initialize node - create: 'line', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Get array - array: function array() { - return new SVG.PointArray([[this.attr('x1'), this.attr('y1')], [this.attr('x2'), this.attr('y2')]]); - }, - // Overwrite native plot() method - plot: function plot(x1, y1, x2, y2) { - if (x1 == null) { - return this.array(); - } else if (typeof y1 !== 'undefined') { - x1 = { - x1: x1, - y1: y1, - x2: x2, - y2: y2 - }; - } else { - x1 = new SVG.PointArray(x1).toLine(); - } - - return this.attr(x1); - }, - // Move by left top corner - move: function move(x, y) { - return this.attr(this.array().move(x, y).toLine()); - }, - // Set element size to given width and height - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.attr(this.array().size(p.width, p.height).toLine()); - } - }, - // Add parent method - construct: { - // Create a line element - line: function line(x1, y1, x2, y2) { - // make sure plot is called as a setter - // x1 is not necessarily a number, it can also be an array, a string and a SVG.PointArray - return SVG.Line.prototype.plot.apply(this.put(new SVG.Line()), x1 != null ? [x1, y1, x2, y2] : [0, 0, 0, 0]); - } - } - }); - SVG.Polyline = SVG.invent({ - // Initialize node - create: 'polyline', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create a wrapped polyline element - polyline: function polyline(p) { - // make sure plot is called as a setter - return this.put(new SVG.Polyline()).plot(p || new SVG.PointArray()); - } - } - }); - SVG.Polygon = SVG.invent({ - // Initialize node - create: 'polygon', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create a wrapped polygon element - polygon: function polygon(p) { - // make sure plot is called as a setter - return this.put(new SVG.Polygon()).plot(p || new SVG.PointArray()); - } - } - }); // Add polygon-specific functions - - SVG.extend(SVG.Polyline, SVG.Polygon, { - // Get array - array: function array() { - return this._array || (this._array = new SVG.PointArray(this.attr('points'))); - }, - // Plot new path - plot: function plot(p) { - return p == null ? this.array() : this.clear().attr('points', typeof p === 'string' ? p : this._array = new SVG.PointArray(p)); - }, - // Clear array cache - clear: function clear() { - delete this._array; - return this; - }, - // Move by left top corner - move: function move(x, y) { - return this.attr('points', this.array().move(x, y)); - }, - // Set element size to given width and height - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.attr('points', this.array().size(p.width, p.height)); - } - }); // unify all point to point elements - - SVG.extend(SVG.Line, SVG.Polyline, SVG.Polygon, { - // Define morphable array - morphArray: SVG.PointArray, - // Move by left top corner over x-axis - x: function x(_x5) { - return _x5 == null ? this.bbox().x : this.move(_x5, this.bbox().y); - }, - // Move by left top corner over y-axis - y: function y(_y5) { - return _y5 == null ? this.bbox().y : this.move(this.bbox().x, _y5); - }, - // Set width of element - width: function width(_width4) { - var b = this.bbox(); - return _width4 == null ? b.width : this.size(_width4, b.height); - }, - // Set height of element - height: function height(_height4) { - var b = this.bbox(); - return _height4 == null ? b.height : this.size(b.width, _height4); - } - }); - SVG.Path = SVG.invent({ - // Initialize node - create: 'path', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Define morphable array - morphArray: SVG.PathArray, - // Get array - array: function array() { - return this._array || (this._array = new SVG.PathArray(this.attr('d'))); - }, - // Plot new path - plot: function plot(d) { - return d == null ? this.array() : this.clear().attr('d', typeof d === 'string' ? d : this._array = new SVG.PathArray(d)); - }, - // Clear array cache - clear: function clear() { - delete this._array; - return this; - }, - // Move by left top corner - move: function move(x, y) { - return this.attr('d', this.array().move(x, y)); - }, - // Move by left top corner over x-axis - x: function x(_x6) { - return _x6 == null ? this.bbox().x : this.move(_x6, this.bbox().y); - }, - // Move by left top corner over y-axis - y: function y(_y6) { - return _y6 == null ? this.bbox().y : this.move(this.bbox().x, _y6); - }, - // Set element size to given width and height - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.attr('d', this.array().size(p.width, p.height)); - }, - // Set width of element - width: function width(_width5) { - return _width5 == null ? this.bbox().width : this.size(_width5, this.bbox().height); - }, - // Set height of element - height: function height(_height5) { - return _height5 == null ? this.bbox().height : this.size(this.bbox().width, _height5); - } - }, - // Add parent method - construct: { - // Create a wrapped path element - path: function path(d) { - // make sure plot is called as a setter - return this.put(new SVG.Path()).plot(d || new SVG.PathArray()); - } - } - }); - SVG.Image = SVG.invent({ - // Initialize node - create: 'image', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // (re)load image - load: function load(url) { - if (!url) return this; - var self = this, - img = new window.Image(); // preload image - - SVG.on(img, 'load', function () { - SVG.off(img); - var p = self.parent(SVG.Pattern); - if (p === null) return; // ensure image size - - if (self.width() == 0 && self.height() == 0) { - self.size(img.width, img.height); - } // ensure pattern size if not set - - - if (p && p.width() == 0 && p.height() == 0) { - p.size(self.width(), self.height()); - } // callback - - - if (typeof self._loaded === 'function') { - self._loaded.call(self, { - width: img.width, - height: img.height, - ratio: img.width / img.height, - url: url - }); - } - }); - SVG.on(img, 'error', function (e) { - SVG.off(img); - - if (typeof self._error === 'function') { - self._error.call(self, e); - } - }); - return this.attr('href', img.src = this.src = url, SVG.xlink); - }, - // Add loaded callback - loaded: function loaded(_loaded) { - this._loaded = _loaded; - return this; - }, - error: function error(_error) { - this._error = _error; - return this; - } - }, - // Add parent method - construct: { - // create image element, load image and set its size - image: function image(source, width, height) { - return this.put(new SVG.Image()).load(source).size(width || 0, height || width || 0); - } - } - }); - SVG.Text = SVG.invent({ - // Initialize node - create: function create() { - this.constructor.call(this, SVG.create('text')); - this.dom.leading = new SVG.Number(1.3); // store leading value for rebuilding - - this._rebuild = true; // enable automatic updating of dy values - - this._build = false; // disable build mode for adding multiple lines - // set default font - - this.attr('font-family', SVG.defaults.attrs['font-family']); - }, - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Move over x-axis - x: function x(_x7) { - // act as getter - if (_x7 == null) { - return this.attr('x'); - } - - return this.attr('x', _x7); - }, - // Move over y-axis - y: function y(_y7) { - var oy = this.attr('y'), - o = typeof oy === 'number' ? oy - this.bbox().y : 0; // act as getter - - if (_y7 == null) { - return typeof oy === 'number' ? oy - o : oy; - } - - return this.attr('y', typeof _y7.valueOf() === 'number' ? _y7 + o : _y7); - }, - // Move center over x-axis - cx: function cx(x) { - return x == null ? this.bbox().cx : this.x(x - this.bbox().width / 2); - }, - // Move center over y-axis - cy: function cy(y) { - return y == null ? this.bbox().cy : this.y(y - this.bbox().height / 2); - }, - // Set the text content - text: function text(_text) { - // act as getter - if (typeof _text === 'undefined') { - var _text = ''; - var children = this.node.childNodes; - - for (var i = 0, len = children.length; i < len; ++i) { - // add newline if its not the first child and newLined is set to true - if (i != 0 && children[i].nodeType != 3 && SVG.adopt(children[i]).dom.newLined == true) { - _text += '\n'; - } // add content of this node - - - _text += children[i].textContent; - } - - return _text; - } // remove existing content - - - this.clear().build(true); - - if (typeof _text === 'function') { - // call block - _text.call(this, this); - } else { - // store text and make sure text is not blank - _text = _text.split('\n'); // build new lines - - for (var i = 0, il = _text.length; i < il; i++) { - this.tspan(_text[i]).newLine(); - } - } // disable build mode and rebuild lines - - - return this.build(false).rebuild(); - }, - // Set font size - size: function size(_size) { - return this.attr('font-size', _size).rebuild(); - }, - // Set / get leading - leading: function leading(value) { - // act as getter - if (value == null) { - return this.dom.leading; - } // act as setter - - - this.dom.leading = new SVG.Number(value); - return this.rebuild(); - }, - // Get all the first level lines - lines: function lines() { - var node = (this.textPath && this.textPath() || this).node; // filter tspans and map them to SVG.js instances - - var lines = SVG.utils.map(SVG.utils.filterSVGElements(node.childNodes), function (el) { - return SVG.adopt(el); - }); // return an instance of SVG.set - - return new SVG.Set(lines); - }, - // Rebuild appearance type - rebuild: function rebuild(_rebuild) { - // store new rebuild flag if given - if (typeof _rebuild === 'boolean') { - this._rebuild = _rebuild; - } // define position of all lines - - - if (this._rebuild) { - var self = this, - blankLineOffset = 0, - dy = this.dom.leading * new SVG.Number(this.attr('font-size')); - this.lines().each(function () { - if (this.dom.newLined) { - if (!self.textPath()) { - this.attr('x', self.attr('x')); - } - - if (this.text() == '\n') { - blankLineOffset += dy; - } else { - this.attr('dy', dy + blankLineOffset); - blankLineOffset = 0; - } - } - }); - this.fire('rebuild'); - } - - return this; - }, - // Enable / disable build mode - build: function build(_build) { - this._build = !!_build; - return this; - }, - // overwrite method from parent to set data properly - setData: function setData(o) { - this.dom = o; - this.dom.leading = new SVG.Number(o.leading || 1.3); - return this; - } - }, - // Add parent method - construct: { - // Create text element - text: function text(_text2) { - return this.put(new SVG.Text()).text(_text2); - }, - // Create plain text element - plain: function plain(text) { - return this.put(new SVG.Text()).plain(text); - } - } - }); - SVG.Tspan = SVG.invent({ - // Initialize node - create: 'tspan', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Set text content - text: function text(_text3) { - if (_text3 == null) return this.node.textContent + (this.dom.newLined ? '\n' : ''); - typeof _text3 === 'function' ? _text3.call(this, this) : this.plain(_text3); - return this; - }, - // Shortcut dx - dx: function dx(_dx) { - return this.attr('dx', _dx); - }, - // Shortcut dy - dy: function dy(_dy) { - return this.attr('dy', _dy); - }, - // Create new line - newLine: function newLine() { - // fetch text parent - var t = this.parent(SVG.Text); // mark new line - - this.dom.newLined = true; // apply new hy¡n - - return this.dy(t.dom.leading * t.attr('font-size')).attr('x', t.x()); - } - } - }); - SVG.extend(SVG.Text, SVG.Tspan, { - // Create plain text node - plain: function plain(text) { - // clear if build mode is disabled - if (this._build === false) { - this.clear(); - } // create text node - - - this.node.appendChild(document.createTextNode(text)); - return this; - }, - // Create a tspan - tspan: function tspan(text) { - var node = (this.textPath && this.textPath() || this).node, - tspan = new SVG.Tspan(); // clear if build mode is disabled - - if (this._build === false) { - this.clear(); - } // add new tspan - - - node.appendChild(tspan.node); - return tspan.text(text); - }, - // Clear all lines - clear: function clear() { - var node = (this.textPath && this.textPath() || this).node; // remove existing child nodes - - while (node.hasChildNodes()) { - node.removeChild(node.lastChild); - } - - return this; - }, - // Get length of text element - length: function length() { - return this.node.getComputedTextLength(); - } - }); - SVG.TextPath = SVG.invent({ - // Initialize node - create: 'textPath', - // Inherit from - inherit: SVG.Parent, - // Define parent class - parent: SVG.Text, - // Add parent method - construct: { - morphArray: SVG.PathArray, - // Create path for text to run on - path: function path(d) { - // create textPath element - var path = new SVG.TextPath(), - track = this.doc().defs().path(d); // move lines to textpath - - while (this.node.hasChildNodes()) { - path.node.appendChild(this.node.firstChild); - } // add textPath element as child node - - - this.node.appendChild(path.node); // link textPath to path and add content - - path.attr('href', '#' + track, SVG.xlink); - return this; - }, - // return the array of the path track element - array: function array() { - var track = this.track(); - return track ? track.array() : null; - }, - // Plot path if any - plot: function plot(d) { - var track = this.track(), - pathArray = null; - - if (track) { - pathArray = track.plot(d); - } - - return d == null ? pathArray : this; - }, - // Get the path track element - track: function track() { - var path = this.textPath(); - - if (path) { - return path.reference('href'); - } - }, - // Get the textPath child - textPath: function textPath() { - if (this.node.firstChild && this.node.firstChild.nodeName == 'textPath') { - return SVG.adopt(this.node.firstChild); - } - } - } - }); - SVG.Nested = SVG.invent({ - // Initialize node - create: function create() { - this.constructor.call(this, SVG.create('svg')); - this.style('overflow', 'visible'); - }, - // Inherit from - inherit: SVG.Container, - // Add parent method - construct: { - // Create nested svg document - nested: function nested() { - return this.put(new SVG.Nested()); - } - } - }); - SVG.A = SVG.invent({ - // Initialize node - create: 'a', - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Link url - to: function to(url) { - return this.attr('href', url, SVG.xlink); - }, - // Link show attribute - show: function show(target) { - return this.attr('show', target, SVG.xlink); - }, - // Link target attribute - target: function target(_target2) { - return this.attr('target', _target2); - } - }, - // Add parent method - construct: { - // Create a hyperlink element - link: function link(url) { - return this.put(new SVG.A()).to(url); - } - } - }); - SVG.extend(SVG.Element, { - // Create a hyperlink element - linkTo: function linkTo(url) { - var link = new SVG.A(); - - if (typeof url === 'function') { - url.call(link, link); - } else { - link.to(url); - } - - return this.parent().put(link).put(this); - } - }); - SVG.Marker = SVG.invent({ - // Initialize node - create: 'marker', - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Set width of element - width: function width(_width6) { - return this.attr('markerWidth', _width6); - }, - // Set height of element - height: function height(_height6) { - return this.attr('markerHeight', _height6); - }, - // Set marker refX and refY - ref: function ref(x, y) { - return this.attr('refX', x).attr('refY', y); - }, - // Update marker - update: function update(block) { - // remove all content - this.clear(); // invoke passed block - - if (typeof block === 'function') { - block.call(this, this); - } - - return this; - }, - // Return the fill id - toString: function toString() { - return 'url(#' + this.id() + ')'; - } - }, - // Add parent method - construct: { - marker: function marker(width, height, block) { - // Create marker element in defs - return this.defs().marker(width, height, block); - } - } - }); - SVG.extend(SVG.Defs, { - // Create marker - marker: function marker(width, height, block) { - // Set default viewbox to match the width and height, set ref to cx and cy and set orient to auto - return this.put(new SVG.Marker()).size(width, height).ref(width / 2, height / 2).viewbox(0, 0, width, height).attr('orient', 'auto').update(block); - } - }); - SVG.extend(SVG.Line, SVG.Polyline, SVG.Polygon, SVG.Path, { - // Create and attach markers - marker: function marker(_marker, width, height, block) { - var attr = ['marker']; // Build attribute name - - if (_marker != 'all') attr.push(_marker); - attr = attr.join('-'); // Set marker attribute - - _marker = arguments[1] instanceof SVG.Marker ? arguments[1] : this.doc().marker(width, height, block); - return this.attr(attr, _marker); - } - }); // Define list of available attributes for stroke and fill - - var sugar = { - stroke: ['color', 'width', 'opacity', 'linecap', 'linejoin', 'miterlimit', 'dasharray', 'dashoffset'], - fill: ['color', 'opacity', 'rule'], - prefix: function prefix(t, a) { - return a == 'color' ? t : t + '-' + a; - } // Add sugar for fill and stroke - - }; - ['fill', 'stroke'].forEach(function (m) { - var i, - extension = {}; - - extension[m] = function (o) { - if (typeof o === 'undefined') { - return this; - } - - if (typeof o === 'string' || SVG.Color.isRgb(o) || o && typeof o.fill === 'function') { - this.attr(m, o); - } else // set all attributes from sugar.fill and sugar.stroke list - { - for (i = sugar[m].length - 1; i >= 0; i--) { - if (o[sugar[m][i]] != null) { - this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]]); - } - } - } - - return this; - }; - - SVG.extend(SVG.Element, SVG.FX, extension); - }); - SVG.extend(SVG.Element, SVG.FX, { - // Map rotation to transform - rotate: function rotate(d, cx, cy) { - return this.transform({ - rotation: d, - cx: cx, - cy: cy - }); - }, - // Map skew to transform - skew: function skew(x, y, cx, cy) { - return arguments.length == 1 || arguments.length == 3 ? this.transform({ - skew: x, - cx: y, - cy: cx - }) : this.transform({ - skewX: x, - skewY: y, - cx: cx, - cy: cy - }); - }, - // Map scale to transform - scale: function scale(x, y, cx, cy) { - return arguments.length == 1 || arguments.length == 3 ? this.transform({ - scale: x, - cx: y, - cy: cx - }) : this.transform({ - scaleX: x, - scaleY: y, - cx: cx, - cy: cy - }); - }, - // Map translate to transform - translate: function translate(x, y) { - return this.transform({ - x: x, - y: y - }); - }, - // Map flip to transform - flip: function flip(a, o) { - o = typeof a === 'number' ? a : o; - return this.transform({ - flip: a || 'both', - offset: o - }); - }, - // Map matrix to transform - matrix: function matrix(m) { - return this.attr('transform', new SVG.Matrix(arguments.length == 6 ? [].slice.call(arguments) : m)); - }, - // Opacity - opacity: function opacity(value) { - return this.attr('opacity', value); - }, - // Relative move over x axis - dx: function dx(x) { - return this.x(new SVG.Number(x).plus(this instanceof SVG.FX ? 0 : this.x()), true); - }, - // Relative move over y axis - dy: function dy(y) { - return this.y(new SVG.Number(y).plus(this instanceof SVG.FX ? 0 : this.y()), true); - }, - // Relative move over x and y axes - dmove: function dmove(x, y) { - return this.dx(x).dy(y); - } - }); - SVG.extend(SVG.Rect, SVG.Ellipse, SVG.Circle, SVG.Gradient, SVG.FX, { - // Add x and y radius - radius: function radius(x, y) { - var type = (this._target || this).type; - return type == 'radial' || type == 'circle' ? this.attr('r', new SVG.Number(x)) : this.rx(x).ry(y == null ? x : y); - } - }); - SVG.extend(SVG.Path, { - // Get path length - length: function length() { - return this.node.getTotalLength(); - }, - // Get point at length - pointAt: function pointAt(length) { - return this.node.getPointAtLength(length); - } - }); - SVG.extend(SVG.Parent, SVG.Text, SVG.Tspan, SVG.FX, { - // Set font - font: function font(a, v) { - if (_typeof(a) === 'object') { - for (v in a) { - this.font(v, a[v]); - } - } - - return a == 'leading' ? this.leading(v) : a == 'anchor' ? this.attr('text-anchor', v) : a == 'size' || a == 'family' || a == 'weight' || a == 'stretch' || a == 'variant' || a == 'style' ? this.attr('font-' + a, v) : this.attr(a, v); - } - }); - SVG.Set = SVG.invent({ - // Initialize - create: function create(members) { - // Set initial state - Array.isArray(members) ? this.members = members : this.clear(); - }, - // Add class methods - extend: { - // Add element to set - add: function add() { - var i, - il, - elements = [].slice.call(arguments); - - for (i = 0, il = elements.length; i < il; i++) { - this.members.push(elements[i]); - } - - return this; - }, - // Remove element from set - remove: function remove(element) { - var i = this.index(element); // remove given child - - if (i > -1) { - this.members.splice(i, 1); - } - - return this; - }, - // Iterate over all members - each: function each(block) { - for (var i = 0, il = this.members.length; i < il; i++) { - block.apply(this.members[i], [i, this.members]); - } - - return this; - }, - // Restore to defaults - clear: function clear() { - // initialize store - this.members = []; - return this; - }, - // Get the length of a set - length: function length() { - return this.members.length; - }, - // Checks if a given element is present in set - has: function has(element) { - return this.index(element) >= 0; - }, - // retuns index of given element in set - index: function index(element) { - return this.members.indexOf(element); - }, - // Get member at given index - get: function get(i) { - return this.members[i]; - }, - // Get first member - first: function first() { - return this.get(0); - }, - // Get last member - last: function last() { - return this.get(this.members.length - 1); - }, - // Default value - valueOf: function valueOf() { - return this.members; - }, - // Get the bounding box of all members included or empty box if set has no items - bbox: function bbox() { - // return an empty box of there are no members - if (this.members.length == 0) { - return new SVG.RBox(); - } // get the first rbox and update the target bbox - - - var rbox = this.members[0].rbox(this.members[0].doc()); - this.each(function () { - // user rbox for correct position and visual representation - rbox = rbox.merge(this.rbox(this.doc())); - }); - return rbox; - } - }, - // Add parent method - construct: { - // Create a new set - set: function set(members) { - return new SVG.Set(members); - } - } - }); - SVG.FX.Set = SVG.invent({ - // Initialize node - create: function create(set) { - // store reference to set - this.set = set; - } - }); // Alias methods - - SVG.Set.inherit = function () { - var m, - methods = []; // gather shape methods - - for (var m in SVG.Shape.prototype) { - if (typeof SVG.Shape.prototype[m] === 'function' && typeof SVG.Set.prototype[m] !== 'function') { - methods.push(m); - } - } // apply shape aliasses - - - methods.forEach(function (method) { - SVG.Set.prototype[method] = function () { - for (var i = 0, il = this.members.length; i < il; i++) { - if (this.members[i] && typeof this.members[i][method] === 'function') { - this.members[i][method].apply(this.members[i], arguments); - } - } - - return method == 'animate' ? this.fx || (this.fx = new SVG.FX.Set(this)) : this; - }; - }); // clear methods for the next round - - methods = []; // gather fx methods - - for (var m in SVG.FX.prototype) { - if (typeof SVG.FX.prototype[m] === 'function' && typeof SVG.FX.Set.prototype[m] !== 'function') { - methods.push(m); - } - } // apply fx aliasses - - - methods.forEach(function (method) { - SVG.FX.Set.prototype[method] = function () { - for (var i = 0, il = this.set.members.length; i < il; i++) { - this.set.members[i].fx[method].apply(this.set.members[i].fx, arguments); - } - - return this; - }; - }); - }; - - SVG.extend(SVG.Element, { - // Store data values on svg nodes - data: function data(a, v, r) { - if (_typeof(a) === 'object') { - for (v in a) { - this.data(v, a[v]); - } - } else if (arguments.length < 2) { - try { - return JSON.parse(this.attr('data-' + a)); - } catch (e) { - return this.attr('data-' + a); - } - } else { - this.attr('data-' + a, v === null ? null : r === true || typeof v === 'string' || typeof v === 'number' ? v : JSON.stringify(v)); - } - - return this; - } - }); - SVG.extend(SVG.Element, { - // Remember arbitrary data - remember: function remember(k, v) { - // remember every item in an object individually - if (_typeof(arguments[0]) === 'object') { - for (var v in k) { - this.remember(v, k[v]); - } - } // retrieve memory - else if (arguments.length == 1) { - return this.memory()[k]; - } // store memory - else { - this.memory()[k] = v; - } - - return this; - }, - // Erase a given memory - forget: function forget() { - if (arguments.length == 0) { - this._memory = {}; - } else { - for (var i = arguments.length - 1; i >= 0; i--) { - delete this.memory()[arguments[i]]; - } - } - - return this; - }, - // Initialize or return local memory object - memory: function memory() { - return this._memory || (this._memory = {}); - } - }); // Method for getting an element by id - - SVG.get = function (id) { - var node = document.getElementById(idFromReference(id) || id); - return SVG.adopt(node); - }; // Select elements by query string - - - SVG.select = function (query, parent) { - return new SVG.Set(SVG.utils.map((parent || document).querySelectorAll(query), function (node) { - return SVG.adopt(node); - })); - }; - - SVG.extend(SVG.Parent, { - // Scoped select method - select: function select(query) { - return SVG.select(query, this.node); - } - }); - - function pathRegReplace(a, b, c, d) { - return c + d.replace(SVG.regex.dots, ' .'); - } // creates deep clone of array - - - function array_clone(arr) { - var clone = arr.slice(0); - - for (var i = clone.length; i--;) { - if (Array.isArray(clone[i])) { - clone[i] = array_clone(clone[i]); - } - } - - return clone; - } // tests if a given element is instance of an object - - - function _is(el, obj) { - return el instanceof obj; - } // tests if a given selector matches an element - - - function _matches(el, selector) { - return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector); - } // Convert dash-separated-string to camelCase - - - function camelCase(s) { - return s.toLowerCase().replace(/-(.)/g, function (m, g) { - return g.toUpperCase(); - }); - } // Capitalize first letter of a string - - - function capitalize(s) { - return s.charAt(0).toUpperCase() + s.slice(1); - } // Ensure to six-based hex - - - function fullHex(hex) { - return hex.length == 4 ? ['#', hex.substring(1, 2), hex.substring(1, 2), hex.substring(2, 3), hex.substring(2, 3), hex.substring(3, 4), hex.substring(3, 4)].join('') : hex; - } // Component to hex value - - - function compToHex(comp) { - var hex = comp.toString(16); - return hex.length == 1 ? '0' + hex : hex; - } // Calculate proportional width and height values when necessary - - - function proportionalSize(element, width, height) { - if (width == null || height == null) { - var box = element.bbox(); - - if (width == null) { - width = box.width / box.height * height; - } else if (height == null) { - height = box.height / box.width * width; - } - } - - return { - width: width, - height: height - }; - } // Delta transform point - - - function deltaTransformPoint(matrix, x, y) { - return { - x: x * matrix.a + y * matrix.c + 0, - y: x * matrix.b + y * matrix.d + 0 - }; - } // Map matrix array to object - - - function arrayToMatrix(a) { - return { - a: a[0], - b: a[1], - c: a[2], - d: a[3], - e: a[4], - f: a[5] - }; - } // Parse matrix if required - - - function parseMatrix(matrix) { - if (!(matrix instanceof SVG.Matrix)) { - matrix = new SVG.Matrix(matrix); - } - - return matrix; - } // Add centre point to transform object - - - function ensureCentre(o, target) { - o.cx = o.cx == null ? target.bbox().cx : o.cx; - o.cy = o.cy == null ? target.bbox().cy : o.cy; - } // PathArray Helpers - - - function arrayToString(a) { - for (var i = 0, il = a.length, s = ''; i < il; i++) { - s += a[i][0]; - - if (a[i][1] != null) { - s += a[i][1]; - - if (a[i][2] != null) { - s += ' '; - s += a[i][2]; - - if (a[i][3] != null) { - s += ' '; - s += a[i][3]; - s += ' '; - s += a[i][4]; - - if (a[i][5] != null) { - s += ' '; - s += a[i][5]; - s += ' '; - s += a[i][6]; - - if (a[i][7] != null) { - s += ' '; - s += a[i][7]; - } - } - } - } - } - } - - return s + ' '; - } // Deep new id assignment - - - function assignNewId(node) { - // do the same for SVG child nodes as well - for (var i = node.childNodes.length - 1; i >= 0; i--) { - if (node.childNodes[i] instanceof window.SVGElement) { - assignNewId(node.childNodes[i]); - } - } - - return SVG.adopt(node).id(SVG.eid(node.nodeName)); - } // Add more bounding box properties - - - function fullBox(b) { - if (b.x == null) { - b.x = 0; - b.y = 0; - b.width = 0; - b.height = 0; - } - - b.w = b.width; - b.h = b.height; - b.x2 = b.x + b.width; - b.y2 = b.y + b.height; - b.cx = b.x + b.width / 2; - b.cy = b.y + b.height / 2; - return b; - } // Get id from reference string - - - function idFromReference(url) { - var m = (url || '').toString().match(SVG.regex.reference); - if (m) return m[1]; - } // If values like 1e-88 are passed, this is not a valid 32 bit float, - // but in those cases, we are so close to 0 that 0 works well! - - - function float32String(v) { - return Math.abs(v) > 1e-37 ? v : 0; - } // Create matrix array for looping - - - var abcdef = 'abcdef'.split(''); // Add CustomEvent to IE9 and IE10 - - if (typeof window.CustomEvent !== 'function') { - // Code from: https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent - var CustomEventPoly = function CustomEventPoly(event, options) { - options = options || { - bubbles: false, - cancelable: false, - detail: undefined - }; - var e = document.createEvent('CustomEvent'); - e.initCustomEvent(event, options.bubbles, options.cancelable, options.detail); - return e; - }; - - CustomEventPoly.prototype = window.Event.prototype; - SVG.CustomEvent = CustomEventPoly; - } else { - SVG.CustomEvent = window.CustomEvent; - } // requestAnimationFrame / cancelAnimationFrame Polyfill with fallback based on Paul Irish - - - (function (w) { - var lastTime = 0; - var vendors = ['moz', 'webkit']; - - for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { - w.requestAnimationFrame = w[vendors[x] + 'RequestAnimationFrame']; - w.cancelAnimationFrame = w[vendors[x] + 'CancelAnimationFrame'] || w[vendors[x] + 'CancelRequestAnimationFrame']; - } - - w.requestAnimationFrame = w.requestAnimationFrame || function (callback) { - var currTime = new Date().getTime(); - var timeToCall = Math.max(0, 16 - (currTime - lastTime)); - var id = w.setTimeout(function () { - callback(currTime + timeToCall); - }, timeToCall); - lastTime = currTime + timeToCall; - return id; - }; - - w.cancelAnimationFrame = w.cancelAnimationFrame || w.clearTimeout; - })(window); - - return SVG; -}); - -/*! svg.filter.js - v2.0.2 - 2016-02-24 -* https://github.com/wout/svg.filter.js -* Copyright (c) 2016 Wout Fierens; Licensed MIT */ -(function() { - - // Main filter class - SVG.Filter = SVG.invent({ - create: 'filter', - inherit: SVG.Parent, - extend: { - // Static strings - source: 'SourceGraphic', - sourceAlpha: 'SourceAlpha', - background: 'BackgroundImage', - backgroundAlpha: 'BackgroundAlpha', - fill: 'FillPaint', - stroke: 'StrokePaint', - - autoSetIn: true, - // Custom put method for leaner code - put: function(element, i) { - this.add(element, i); - - if(!element.attr('in') && this.autoSetIn){ - element.attr('in',this.source); - } - if(!element.attr('result')){ - element.attr('result',element); - } - - return element - }, - // Blend effect - blend: function(in1, in2, mode) { - return this.put(new SVG.BlendEffect(in1, in2, mode)) - }, - // ColorMatrix effect - colorMatrix: function(type, values) { - return this.put(new SVG.ColorMatrixEffect(type, values)) - }, - // ConvolveMatrix effect - convolveMatrix: function(matrix) { - return this.put(new SVG.ConvolveMatrixEffect(matrix)) - }, - // ComponentTransfer effect - componentTransfer: function(components) { - return this.put(new SVG.ComponentTransferEffect(components)) - }, - // Composite effect - composite: function(in1, in2, operator) { - return this.put(new SVG.CompositeEffect(in1, in2, operator)) - }, - // Flood effect - flood: function(color, opacity) { - return this.put(new SVG.FloodEffect(color, opacity)) - }, - // Offset effect - offset: function(x, y) { - return this.put(new SVG.OffsetEffect(x,y)) - }, - // Image effect - image: function(src) { - return this.put(new SVG.ImageEffect(src)) - }, - // Merge effect - merge: function() { - //pass the array of arguments to the constructor because we dont know if the user gave us an array as the first arguemnt or wether they listed the effects in the arguments - var args = [undefined]; - for(var i in arguments) args.push(arguments[i]); - return this.put(new (SVG.MergeEffect.bind.apply(SVG.MergeEffect,args))) - }, - // Gaussian Blur effect - gaussianBlur: function(x,y) { - return this.put(new SVG.GaussianBlurEffect(x,y)) - }, - // Morphology effect - morphology: function(operator,radius){ - return this.put(new SVG.MorphologyEffect(operator,radius)) - }, - // DiffuseLighting effect - diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){ - return this.put(new SVG.DiffuseLightingEffect(surfaceScale,diffuseConstant,kernelUnitLength)) - }, - // DisplacementMap effect - displacementMap: function(in1,in2,scale,xChannelSelector,yChannelSelector){ - return this.put(new SVG.DisplacementMapEffect(in1,in2,scale,xChannelSelector,yChannelSelector)) - }, - // SpecularLighting effect - specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){ - return this.put(new SVG.SpecularLightingEffect(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength)) - }, - // Tile effect - tile: function(){ - return this.put(new SVG.TileEffect()); - }, - // Turbulence effect - turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){ - return this.put(new SVG.TurbulenceEffect(baseFrequency,numOctaves,seed,stitchTiles,type)) - }, - // Default string value - toString: function() { - return 'url(#' + this.attr('id') + ')' - } - } - }); - - //add .filter function - SVG.extend(SVG.Defs, { - // Define filter - filter: function(block) { - var filter = this.put(new SVG.Filter); - - /* invoke passed block */ - if (typeof block === 'function') - block.call(filter, filter); - - return filter - } - }); - SVG.extend(SVG.Container, { - // Define filter on defs - filter: function(block) { - return this.defs().filter(block) - } - }); - SVG.extend(SVG.Element, SVG.G, SVG.Nested, { - // Create filter element in defs and store reference - filter: function(block) { - this.filterer = block instanceof SVG.Element ? - block : this.doc().filter(block); - - if(this.doc() && this.filterer.doc() !== this.doc()){ - this.doc().defs().add(this.filterer); - } - - this.attr('filter', this.filterer); - - return this.filterer - }, - // Remove filter - unfilter: function(remove) { - /* also remove the filter node */ - if (this.filterer && remove === true) - this.filterer.remove(); - - /* delete reference to filterer */ - delete this.filterer; - - /* remove filter attribute */ - return this.attr('filter', null) - } - }); - - // Create SVG.Effect class - SVG.Effect = SVG.invent({ - create: function(){ - this.constructor.call(this); - }, - inherit: SVG.Element, - extend: { - // Set in attribute - in: function(effect) { - return effect == null? this.parent() && this.parent().select('[result="'+this.attr('in')+'"]').get(0) || this.attr('in') : this.attr('in', effect) - }, - // Named result - result: function(result) { - return result == null? this.attr('result') : this.attr('result',result) - }, - // Stringification - toString: function() { - return this.result() - } - } - }); - - // create class for parent effects like merge - // Inherit from SVG.Parent - SVG.ParentEffect = SVG.invent({ - create: function(){ - this.constructor.call(this); - }, - inherit: SVG.Parent, - extend: { - // Set in attribute - in: function(effect) { - return effect == null? this.parent() && this.parent().select('[result="'+this.attr('in')+'"]').get(0) || this.attr('in') : this.attr('in', effect) - }, - // Named result - result: function(result) { - return result == null? this.attr('result') : this.attr('result',result) - }, - // Stringification - toString: function() { - return this.result() - } - } - }); - - //chaining - var chainingEffects = { - // Blend effect - blend: function(in2, mode) { - return this.parent() && this.parent().blend(this, in2, mode) //pass this as the first input - }, - // ColorMatrix effect - colorMatrix: function(type, values) { - return this.parent() && this.parent().colorMatrix(type, values).in(this) - }, - // ConvolveMatrix effect - convolveMatrix: function(matrix) { - return this.parent() && this.parent().convolveMatrix(matrix).in(this) - }, - // ComponentTransfer effect - componentTransfer: function(components) { - return this.parent() && this.parent().componentTransfer(components).in(this) - }, - // Composite effect - composite: function(in2, operator) { - return this.parent() && this.parent().composite(this, in2, operator) //pass this as the first input - }, - // Flood effect - flood: function(color, opacity) { - return this.parent() && this.parent().flood(color, opacity) //this effect dont have inputs - }, - // Offset effect - offset: function(x, y) { - return this.parent() && this.parent().offset(x,y).in(this) - }, - // Image effect - image: function(src) { - return this.parent() && this.parent().image(src) //this effect dont have inputs - }, - // Merge effect - merge: function() { - return this.parent() && this.parent().merge.apply(this.parent(),[this].concat(arguments)) //pass this as the first argument - }, - // Gaussian Blur effect - gaussianBlur: function(x,y) { - return this.parent() && this.parent().gaussianBlur(x,y).in(this) - }, - // Morphology effect - morphology: function(operator,radius){ - return this.parent() && this.parent().morphology(operator,radius).in(this) - }, - // DiffuseLighting effect - diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){ - return this.parent() && this.parent().diffuseLighting(surfaceScale,diffuseConstant,kernelUnitLength).in(this) - }, - // DisplacementMap effect - displacementMap: function(in2,scale,xChannelSelector,yChannelSelector){ - return this.parent() && this.parent().displacementMap(this,in2,scale,xChannelSelector,yChannelSelector) //pass this as the first input - }, - // SpecularLighting effect - specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){ - return this.parent() && this.parent().specularLighting(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength).in(this) - }, - // Tile effect - tile: function(){ - return this.parent() && this.parent().tile().in(this) - }, - // Turbulence effect - turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){ - return this.parent() && this.parent().turbulence(baseFrequency,numOctaves,seed,stitchTiles,type).in(this) - } - }; - SVG.extend(SVG.Effect,chainingEffects); - SVG.extend(SVG.ParentEffect,chainingEffects); - - //crea class for child effects, like MergeNode, FuncR and lights - SVG.ChildEffect = SVG.invent({ - create: function(){ - this.constructor.call(this); - }, - inherit: SVG.Element, - extend: { - in: function(effect){ - this.attr('in',effect); - } - //dont include any "result" functions because these types of nodes dont have them - } - }); - - // Create all different effects - var effects = { - blend: function(in1,in2,mode){ - this.attr({ - in: in1, - in2: in2, - mode: mode || 'normal' - }); - }, - colorMatrix: function(type,values){ - if (type == 'matrix') - values = normaliseMatrix(values); - - this.attr({ - type: type - , values: typeof values == 'undefined' ? null : values - }); - }, - convolveMatrix: function(matrix){ - matrix = normaliseMatrix(matrix); - - this.attr({ - order: Math.sqrt(matrix.split(' ').length) - , kernelMatrix: matrix - }); - }, - composite: function(in1, in2, operator){ - this.attr({ - in: in1, - in2: in2, - operator: operator - }); - }, - flood: function(color,opacity){ - this.attr('flood-color',color); - if(opacity != null) this.attr('flood-opacity',opacity); - }, - offset: function(x,y){ - this.attr({ - dx: x, - dy: y - }); - }, - image: function(src){ - this.attr('href', src, SVG.xlink); - }, - displacementMap: function(in1,in2,scale,xChannelSelector,yChannelSelector){ - this.attr({ - in: in1, - in2: in2, - scale: scale, - xChannelSelector: xChannelSelector, - yChannelSelector: yChannelSelector - }); - }, - gaussianBlur: function(x,y){ - if(x != null || y != null) - this.attr('stdDeviation', listString(Array.prototype.slice.call(arguments))); - else - this.attr('stdDeviation', '0 0'); - }, - morphology: function(operator,radius){ - this.attr({ - operator: operator, - radius: radius - }); - }, - tile: function(){ - - }, - turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){ - this.attr({ - numOctaves: numOctaves, - seed: seed, - stitchTiles: stitchTiles, - baseFrequency: baseFrequency, - type: type - }); - } - }; - - // Create all parent effects - var parentEffects = { - merge: function(){ - var children; - - //test to see if we have a set - if(arguments[0] instanceof SVG.Set){ - var that = this; - arguments[0].each(function(i){ - if(this instanceof SVG.MergeNode) - that.put(this); - else if(this instanceof SVG.Effect || this instanceof SVG.ParentEffect) - that.put(new SVG.MergeNode(this)); - }); - } - else{ - //if the first argument is an array use it - if(Array.isArray(arguments[0])) - children = arguments[0]; - else - children = arguments; - - for(var i = 0; i < children.length; i++){ - if(children[i] instanceof SVG.MergeNode){ - this.put(children[i]); - } - else this.put(new SVG.MergeNode(children[i])); - } - } - }, - componentTransfer: function(compontents){ - /* create rgb set */ - this.rgb = new SVG.Set - - /* create components */ - ;(['r', 'g', 'b', 'a']).forEach(function(c) { - /* create component */ - this[c] = new SVG['Func' + c.toUpperCase()]('identity'); - - /* store component in set */ - this.rgb.add(this[c]); - - /* add component node */ - this.node.appendChild(this[c].node); - }.bind(this)); //lost context in foreach - - /* set components */ - if (compontents) { - if (compontents.rgb) { -(['r', 'g', 'b']).forEach(function(c) { - this[c].attr(compontents.rgb); - }.bind(this)); - - delete compontents.rgb; - } - - /* set individual components */ - for (var c in compontents) - this[c].attr(compontents[c]); - } - }, - diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){ - this.attr({ - surfaceScale: surfaceScale, - diffuseConstant: diffuseConstant, - kernelUnitLength: kernelUnitLength - }); - }, - specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){ - this.attr({ - surfaceScale: surfaceScale, - diffuseConstant: diffuseConstant, - specularExponent: specularExponent, - kernelUnitLength: kernelUnitLength - }); - }, - }; - - // Create child effects like PointLight and MergeNode - var childEffects = { - distantLight: function(azimuth, elevation){ - this.attr({ - azimuth: azimuth, - elevation: elevation - }); - }, - pointLight: function(x,y,z){ - this.attr({ - x: x, - y: y, - z: z - }); - }, - spotLight: function(x,y,z,pointsAtX,pointsAtY,pointsAtZ){ - this.attr({ - x: x, - y: y, - z: z, - pointsAtX: pointsAtX, - pointsAtY: pointsAtY, - pointsAtZ: pointsAtZ - }); - }, - mergeNode: function(in1){ - this.attr('in',in1); - } - } - - // Create compontent functions - ;(['r', 'g', 'b', 'a']).forEach(function(c) { - /* create class */ - childEffects['Func' + c.toUpperCase()] = function(type) { - this.attr('type',type); - - // take diffent arguments based on the type - switch(type){ - case 'table': - this.attr('tableValues',arguments[1]); - break - case 'linear': - this.attr('slope',arguments[1]); - this.attr('intercept',arguments[2]); - break - case 'gamma': - this.attr('amplitude',arguments[1]); - this.attr('exponent',arguments[2]); - this.attr('offset',arguments[2]); - break - } - }; - }); - - //create effects - foreach(effects,function(effect,i){ - - /* capitalize name */ - var name = i.charAt(0).toUpperCase() + i.slice(1); - var proto = {}; - - /* create class */ - SVG[name + 'Effect'] = SVG.invent({ - create: function() { - //call super - this.constructor.call(this, SVG.create('fe' + name)); - - //call constructor for this effect - effect.apply(this,arguments); - - //set the result - this.result(this.attr('id') + 'Out'); - }, - inherit: SVG.Effect, - extend: proto - }); - }); - - //create parent effects - foreach(parentEffects,function(effect,i){ - - /* capitalize name */ - var name = i.charAt(0).toUpperCase() + i.slice(1); - var proto = {}; - - /* create class */ - SVG[name + 'Effect'] = SVG.invent({ - create: function() { - //call super - this.constructor.call(this, SVG.create('fe' + name)); - - //call constructor for this effect - effect.apply(this,arguments); - - //set the result - this.result(this.attr('id') + 'Out'); - }, - inherit: SVG.ParentEffect, - extend: proto - }); - }); - - //create child effects - foreach(childEffects,function(effect,i){ - - /* capitalize name */ - var name = i.charAt(0).toUpperCase() + i.slice(1); - var proto = {}; - - /* create class */ - SVG[name] = SVG.invent({ - create: function() { - //call super - this.constructor.call(this, SVG.create('fe' + name)); - - //call constructor for this effect - effect.apply(this,arguments); - }, - inherit: SVG.ChildEffect, - extend: proto - }); - }); - - // Effect-specific extensions - SVG.extend(SVG.MergeEffect,{ - in: function(effect){ - if(effect instanceof SVG.MergeNode) - this.add(effect,0); - else - this.add(new SVG.MergeNode(effect),0); - - return this - } - }); - SVG.extend(SVG.CompositeEffect,SVG.BlendEffect,SVG.DisplacementMapEffect,{ - in2: function(effect){ - return effect == null? this.parent() && this.parent().select('[result="'+this.attr('in2')+'"]').get(0) || this.attr('in2') : this.attr('in2', effect) - } - }); - - // Presets - SVG.filter = { - sepiatone: [ .343, .669, .119, 0, 0 - , .249, .626, .130, 0, 0 - , .172, .334, .111, 0, 0 - , .000, .000, .000, 1, 0 ] - }; - - // Helpers - function normaliseMatrix(matrix) { - /* convert possible array value to string */ - if (Array.isArray(matrix)) - matrix = new SVG.Array(matrix); - - /* ensure there are no leading, tailing or double spaces */ - return matrix.toString().replace(/^\s+/, '').replace(/\s+$/, '').replace(/\s+/g, ' ') - } - - function listString(list) { - if (!Array.isArray(list)) - return list - - for (var i = 0, l = list.length, s = []; i < l; i++) - s.push(list[i]); - - return s.join(' ') - } - - function foreach(){ //loops through mutiple objects - var fn = function(){}; - if(typeof arguments[arguments.length-1] == 'function'){ - fn = arguments[arguments.length-1]; - Array.prototype.splice.call(arguments,arguments.length-1,1); - } - for(var k in arguments){ - for(var i in arguments[k]){ - fn(arguments[k][i],i,arguments[k]); - } - } - } - -}).call(undefined); - -(function() { - -SVG.extend(SVG.PathArray, { - morph: function(array) { - - var startArr = this.value - , destArr = this.parse(array); - - var startOffsetM = 0 - , destOffsetM = 0; - - var startOffsetNextM = false - , destOffsetNextM = false; - - while(true){ - // stop if there is no M anymore - if(startOffsetM === false && destOffsetM === false) break - - // find the next M in path array - startOffsetNextM = findNextM(startArr, startOffsetM === false ? false : startOffsetM+1); - destOffsetNextM = findNextM( destArr, destOffsetM === false ? false : destOffsetM+1); - - // We have to add one M to the startArray - if(startOffsetM === false){ - var bbox = new SVG.PathArray(result.start).bbox(); - - // when the last block had no bounding box we simply take the first M we got - if(bbox.height == 0 || bbox.width == 0){ - startOffsetM = startArr.push(startArr[0]) - 1; - }else{ - // we take the middle of the bbox instead when we got one - startOffsetM = startArr.push( ['M', bbox.x + bbox.width/2, bbox.y + bbox.height/2 ] ) - 1; - } - } - - // We have to add one M to the destArray - if( destOffsetM === false){ - var bbox = new SVG.PathArray(result.dest).bbox(); - - if(bbox.height == 0 || bbox.width == 0){ - destOffsetM = destArr.push(destArr[0]) - 1; - }else{ - destOffsetM = destArr.push( ['M', bbox.x + bbox.width/2, bbox.y + bbox.height/2 ] ) - 1; - } - } - - // handle block from M to next M - var result = handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM); - - // update the arrays to their new values - startArr = startArr.slice(0, startOffsetM).concat(result.start, startOffsetNextM === false ? [] : startArr.slice(startOffsetNextM)); - destArr = destArr.slice(0, destOffsetM).concat(result.dest , destOffsetNextM === false ? [] : destArr.slice( destOffsetNextM)); - - // update offsets - startOffsetM = startOffsetNextM === false ? false : startOffsetM + result.start.length; - destOffsetM = destOffsetNextM === false ? false : destOffsetM + result.dest.length; - - } - - // copy back arrays - this.value = startArr; - this.destination = new SVG.PathArray(); - this.destination.value = destArr; - - return this - } -}); - - - -// sorry for the long declaration -// slices out one block (from M to M) and syncronize it so the types and length match -function handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM, undefined){ - - // slice out the block we need - var startArrTemp = startArr.slice(startOffsetM, startOffsetNextM || undefined) - , destArrTemp = destArr.slice( destOffsetM, destOffsetNextM || undefined); - - var i = 0 - , posStart = {pos:[0,0], start:[0,0]} - , posDest = {pos:[0,0], start:[0,0]}; - - do{ - - // convert shorthand types to long form - startArrTemp[i] = simplyfy.call(posStart, startArrTemp[i]); - destArrTemp[i] = simplyfy.call(posDest , destArrTemp[i]); - - // check if both shape types match - // 2 elliptical arc curve commands ('A'), are considered different if the - // flags (large-arc-flag, sweep-flag) don't match - if(startArrTemp[i][0] != destArrTemp[i][0] || startArrTemp[i][0] == 'M' || - (startArrTemp[i][0] == 'A' && - (startArrTemp[i][4] != destArrTemp[i][4] || startArrTemp[i][5] != destArrTemp[i][5]) - ) - ) { - - // if not, convert shapes to beziere - Array.prototype.splice.apply(startArrTemp, [i, 1].concat(toBeziere.call(posStart, startArrTemp[i]))); - Array.prototype.splice.apply(destArrTemp, [i, 1].concat(toBeziere.call(posDest, destArrTemp[i]))); - - } else { - - // only update positions otherwise - startArrTemp[i] = setPosAndReflection.call(posStart, startArrTemp[i]); - destArrTemp[i] = setPosAndReflection.call(posDest , destArrTemp[i]); - - } - - // we are at the end at both arrays. stop here - if(++i == startArrTemp.length && i == destArrTemp.length) break - - // destArray is longer. Add one element - if(i == startArrTemp.length){ - startArrTemp.push([ - 'C', - posStart.pos[0], - posStart.pos[1], - posStart.pos[0], - posStart.pos[1], - posStart.pos[0], - posStart.pos[1], - ]); - } - - // startArr is longer. Add one element - if(i == destArrTemp.length){ - destArrTemp.push([ - 'C', - posDest.pos[0], - posDest.pos[1], - posDest.pos[0], - posDest.pos[1], - posDest.pos[0], - posDest.pos[1] - ]); - } - - - }while(true) - - // return the updated block - return {start:startArrTemp, dest:destArrTemp} -} - -// converts shorthand types to long form -function simplyfy(val){ - - switch(val[0]){ - case 'z': // shorthand line to start - case 'Z': - val[0] = 'L'; - val[1] = this.start[0]; - val[2] = this.start[1]; - break - case 'H': // shorthand horizontal line - val[0] = 'L'; - val[2] = this.pos[1]; - break - case 'V': // shorthand vertical line - val[0] = 'L'; - val[2] = val[1]; - val[1] = this.pos[0]; - break - case 'T': // shorthand quadratic beziere - val[0] = 'Q'; - val[3] = val[1]; - val[4] = val[2]; - val[1] = this.reflection[1]; - val[2] = this.reflection[0]; - break - case 'S': // shorthand cubic beziere - val[0] = 'C'; - val[6] = val[4]; - val[5] = val[3]; - val[4] = val[2]; - val[3] = val[1]; - val[2] = this.reflection[1]; - val[1] = this.reflection[0]; - break - } - - return val - -} - -// updates reflection point and current position -function setPosAndReflection(val){ - - var len = val.length; - - this.pos = [ val[len-2], val[len-1] ]; - - if('SCQT'.indexOf(val[0]) != -1) - this.reflection = [ 2 * this.pos[0] - val[len-4], 2 * this.pos[1] - val[len-3] ]; - - return val -} - -// converts all types to cubic beziere -function toBeziere(val){ - var retVal = [val]; - - switch(val[0]){ - case 'M': // special handling for M - this.pos = this.start = [val[1], val[2]]; - return retVal - case 'L': - val[5] = val[3] = val[1]; - val[6] = val[4] = val[2]; - val[1] = this.pos[0]; - val[2] = this.pos[1]; - break - case 'Q': - val[6] = val[4]; - val[5] = val[3]; - val[4] = val[4] * 1/3 + val[2] * 2/3; - val[3] = val[3] * 1/3 + val[1] * 2/3; - val[2] = this.pos[1] * 1/3 + val[2] * 2/3; - val[1] = this.pos[0] * 1/3 + val[1] * 2/3; - break - case 'A': - retVal = arcToBeziere(this.pos, val); - val = retVal[0]; - break - } - - val[0] = 'C'; - this.pos = [val[5], val[6]]; - this.reflection = [2 * val[5] - val[3], 2 * val[6] - val[4]]; - - return retVal - -} - -// finds the next position of type M -function findNextM(arr, offset){ - - if(offset === false) return false - - for(var i = offset, len = arr.length;i < len;++i){ - - if(arr[i][0] == 'M') return i - - } - - return false -} - - - -// Convert an arc segment into equivalent cubic Bezier curves -// Depending on the arc, up to 4 curves might be used to represent it since a -// curve gives a good approximation for only a quarter of an ellipse -// The curves are returned as an array of SVG curve commands: -// [ ['C', x1, y1, x2, y2, x, y] ... ] -function arcToBeziere(pos, val) { - // Parameters extraction, handle out-of-range parameters as specified in the SVG spec - // See: https://www.w3.org/TR/SVG11/implnote.html#ArcOutOfRangeParameters - var rx = Math.abs(val[1]), ry = Math.abs(val[2]), xAxisRotation = val[3] % 360 - , largeArcFlag = val[4], sweepFlag = val[5], x = val[6], y = val[7] - , A = new SVG.Point(pos), B = new SVG.Point(x, y) - , primedCoord, lambda, mat, k, c, cSquare, t, O, OA, OB, tetaStart, tetaEnd - , deltaTeta, nbSectors, f, arcSegPoints, angle, sinAngle, cosAngle, pt, i, il - , retVal = [], x1, y1, x2, y2; - - // Ensure radii are non-zero - if(rx === 0 || ry === 0 || (A.x === B.x && A.y === B.y)) { - // treat this arc as a straight line segment - return [['C', A.x, A.y, B.x, B.y, B.x, B.y]] - } - - // Ensure radii are large enough using the algorithm provided in the SVG spec - // See: https://www.w3.org/TR/SVG11/implnote.html#ArcCorrectionOutOfRangeRadii - primedCoord = new SVG.Point((A.x-B.x)/2, (A.y-B.y)/2).transform(new SVG.Matrix().rotate(xAxisRotation)); - lambda = (primedCoord.x * primedCoord.x) / (rx * rx) + (primedCoord.y * primedCoord.y) / (ry * ry); - if(lambda > 1) { - lambda = Math.sqrt(lambda); - rx = lambda*rx; - ry = lambda*ry; - } - - // To simplify calculations, we make the arc part of a unit circle (rayon is 1) instead of an ellipse - mat = new SVG.Matrix().rotate(xAxisRotation).scale(1/rx, 1/ry).rotate(-xAxisRotation); - A = A.transform(mat); - B = B.transform(mat); - - // Calculate the horizontal and vertical distance between the initial and final point of the arc - k = [B.x-A.x, B.y-A.y]; - - // Find the length of the chord formed by A and B - cSquare = k[0]*k[0] + k[1]*k[1]; - c = Math.sqrt(cSquare); - - // Calculate the ratios of the horizontal and vertical distance on the length of the chord - k[0] /= c; - k[1] /= c; - - // Calculate the distance between the circle center and the chord midpoint - // using this formula: t = sqrt(r^2 - c^2 / 4) - // where t is the distance between the cirle center and the chord midpoint, - // r is the rayon of the circle and c is the chord length - // From: http://www.ajdesigner.com/phpcircle/circle_segment_chord_t.php - // Because of the imprecision of floating point numbers, cSquare might end - // up being slightly above 4 which would result in a negative radicand - // To prevent that, a test is made before computing the square root - t = (cSquare < 4) ? Math.sqrt(1 - cSquare/4) : 0; - - // For most situations, there are actually two different ellipses that - // satisfy the constraints imposed by the points A and B, the radii rx and ry, - // and the xAxisRotation - // When the flags largeArcFlag and sweepFlag are equal, it means that the - // second ellipse is used as a solution - // See: https://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands - if(largeArcFlag === sweepFlag) { - t *= -1; - } - - // Calculate the coordinates of the center of the circle from the midpoint of the chord - // This is done by multiplying the ratios calculated previously by the distance between - // the circle center and the chord midpoint and using these values to go from the midpoint - // to the center of the circle - // The negative of the vertical distance ratio is used to modify the x coordinate while - // the horizontal distance ratio is used to modify the y coordinate - // That is because the center of the circle is perpendicular to the chord and perpendicular - // lines are negative reciprocals - O = new SVG.Point((B.x+A.x)/2 + t*-k[1], (B.y+A.y)/2 + t*k[0]); - // Move the center of the circle at the origin - OA = new SVG.Point(A.x-O.x, A.y-O.y); - OB = new SVG.Point(B.x-O.x, B.y-O.y); - - // Calculate the start and end angle - tetaStart = Math.acos(OA.x/Math.sqrt(OA.x*OA.x + OA.y*OA.y)); - if (OA.y < 0) { - tetaStart *= -1; - } - tetaEnd = Math.acos(OB.x/Math.sqrt(OB.x*OB.x + OB.y*OB.y)); - if (OB.y < 0) { - tetaEnd *= -1; - } - - // If sweep-flag is '1', then the arc will be drawn in a "positive-angle" direction, - // make sure that the end angle is above the start angle - if (sweepFlag && tetaStart > tetaEnd) { - tetaEnd += 2*Math.PI; - } - // If sweep-flag is '0', then the arc will be drawn in a "negative-angle" direction, - // make sure that the end angle is below the start angle - if (!sweepFlag && tetaStart < tetaEnd) { - tetaEnd -= 2*Math.PI; - } - - // Find the number of Bezier curves that are required to represent the arc - // A cubic Bezier curve gives a good enough approximation when representing at most a quarter of a circle - nbSectors = Math.ceil(Math.abs(tetaStart-tetaEnd) * 2/Math.PI); - - // Calculate the coordinates of the points of all the Bezier curves required to represent the arc - // For an in-depth explanation of this part see: http://pomax.github.io/bezierinfo/#circles_cubic - arcSegPoints = []; - angle = tetaStart; - deltaTeta = (tetaEnd-tetaStart)/nbSectors; - f = 4*Math.tan(deltaTeta/4)/3; - for (i = 0; i <= nbSectors; i++) { // The <= is because a Bezier curve have a start and a endpoint - cosAngle = Math.cos(angle); - sinAngle = Math.sin(angle); - - pt = new SVG.Point(O.x+cosAngle, O.y+sinAngle); - arcSegPoints[i] = [new SVG.Point(pt.x+f*sinAngle, pt.y-f*cosAngle), pt, new SVG.Point(pt.x-f*sinAngle, pt.y+f*cosAngle)]; - - angle += deltaTeta; - } - - // Remove the first control point of the first segment point and remove the second control point of the last segment point - // These two control points are not used in the approximation of the arc, that is why they are removed - arcSegPoints[0][0] = arcSegPoints[0][1].clone(); - arcSegPoints[arcSegPoints.length-1][2] = arcSegPoints[arcSegPoints.length-1][1].clone(); - - // Revert the transformation that was applied to make the arc part of a unit circle instead of an ellipse - mat = new SVG.Matrix().rotate(xAxisRotation).scale(rx, ry).rotate(-xAxisRotation); - for (i = 0, il = arcSegPoints.length; i < il; i++) { - arcSegPoints[i][0] = arcSegPoints[i][0].transform(mat); - arcSegPoints[i][1] = arcSegPoints[i][1].transform(mat); - arcSegPoints[i][2] = arcSegPoints[i][2].transform(mat); - } - - - // Convert the segments points to SVG curve commands - for (i = 1, il = arcSegPoints.length; i < il; i++) { - pt = arcSegPoints[i-1][2]; - x1 = pt.x; - y1 = pt.y; - - pt = arcSegPoints[i][0]; - x2 = pt.x; - y2 = pt.y; - - pt = arcSegPoints[i][1]; - x = pt.x; - y = pt.y; - - retVal.push(['C', x1, y1, x2, y2, x, y]); - } - - return retVal -} -}()); - -/*! svg.draggable.js - v2.2.1 - 2016-08-25 -* https://github.com/wout/svg.draggable.js -* Copyright (c) 2016 Wout Fierens; Licensed MIT */ -(function() { - - // creates handler, saves it - function DragHandler(el){ - el.remember('_draggable', this); - this.el = el; - } - - - // Sets new parameter, starts dragging - DragHandler.prototype.init = function(constraint, val){ - var _this = this; - this.constraint = constraint; - this.value = val; - this.el.on('mousedown.drag', function(e){ _this.start(e); }); - this.el.on('touchstart.drag', function(e){ _this.start(e); }); - }; - - // transforms one point from screen to user coords - DragHandler.prototype.transformPoint = function(event, offset){ - event = event || window.event; - var touches = event.changedTouches && event.changedTouches[0] || event; - this.p.x = touches.pageX - (offset || 0); - this.p.y = touches.pageY; - return this.p.matrixTransform(this.m) - }; - - // gets elements bounding box with special handling of groups, nested and use - DragHandler.prototype.getBBox = function(){ - - var box = this.el.bbox(); - - if(this.el instanceof SVG.Nested) box = this.el.rbox(); - - if (this.el instanceof SVG.G || this.el instanceof SVG.Use || this.el instanceof SVG.Nested) { - box.x = this.el.x(); - box.y = this.el.y(); - } - - return box - }; - - // start dragging - DragHandler.prototype.start = function(e){ - - // check for left button - if(e.type == 'click'|| e.type == 'mousedown' || e.type == 'mousemove'){ - if((e.which || e.buttons) != 1){ - return - } - } - - var _this = this; - - // fire beforedrag event - this.el.fire('beforedrag', { event: e, handler: this }); - - // search for parent on the fly to make sure we can call - // draggable() even when element is not in the dom currently - this.parent = this.parent || this.el.parent(SVG.Nested) || this.el.parent(SVG.Doc); - this.p = this.parent.node.createSVGPoint(); - - // save current transformation matrix - this.m = this.el.node.getScreenCTM().inverse(); - - var box = this.getBBox(); - - var anchorOffset; - - // fix text-anchor in text-element (#37) - if(this.el instanceof SVG.Text){ - anchorOffset = this.el.node.getComputedTextLength(); - - switch(this.el.attr('text-anchor')){ - case 'middle': - anchorOffset /= 2; - break - case 'start': - anchorOffset = 0; - break; - } - } - - this.startPoints = { - // We take absolute coordinates since we are just using a delta here - point: this.transformPoint(e, anchorOffset), - box: box, - transform: this.el.transform() - }; - - // add drag and end events to window - SVG.on(window, 'mousemove.drag', function(e){ _this.drag(e); }); - SVG.on(window, 'touchmove.drag', function(e){ _this.drag(e); }); - SVG.on(window, 'mouseup.drag', function(e){ _this.end(e); }); - SVG.on(window, 'touchend.drag', function(e){ _this.end(e); }); - - // fire dragstart event - this.el.fire('dragstart', {event: e, p: this.startPoints.point, m: this.m, handler: this}); - - // prevent browser drag behavior - e.preventDefault(); - - // prevent propagation to a parent that might also have dragging enabled - e.stopPropagation(); - }; - - // while dragging - DragHandler.prototype.drag = function(e){ - - var box = this.getBBox() - , p = this.transformPoint(e) - , x = this.startPoints.box.x + p.x - this.startPoints.point.x - , y = this.startPoints.box.y + p.y - this.startPoints.point.y - , c = this.constraint - , gx = p.x - this.startPoints.point.x - , gy = p.y - this.startPoints.point.y; - - var event = new CustomEvent('dragmove', { - detail: { - event: e - , p: p - , m: this.m - , handler: this - } - , cancelable: true - }); - - this.el.fire(event); - - if(event.defaultPrevented) return p - - // move the element to its new position, if possible by constraint - if (typeof c == 'function') { - - var coord = c.call(this.el, x, y, this.m); - - // bool, just show us if movement is allowed or not - if (typeof coord == 'boolean') { - coord = { - x: coord, - y: coord - }; - } - - // if true, we just move. If !false its a number and we move it there - if (coord.x === true) { - this.el.x(x); - } else if (coord.x !== false) { - this.el.x(coord.x); - } - - if (coord.y === true) { - this.el.y(y); - } else if (coord.y !== false) { - this.el.y(coord.y); - } - - } else if (typeof c == 'object') { - - // keep element within constrained box - if (c.minX != null && x < c.minX) - x = c.minX; - else if (c.maxX != null && x > c.maxX - box.width){ - x = c.maxX - box.width; - }if (c.minY != null && y < c.minY) - y = c.minY; - else if (c.maxY != null && y > c.maxY - box.height) - y = c.maxY - box.height; - - if(this.el instanceof SVG.G) - this.el.matrix(this.startPoints.transform).transform({x:gx, y: gy}, true); - else - this.el.move(x, y); - } - - // so we can use it in the end-method, too - return p - }; - - DragHandler.prototype.end = function(e){ - - // final drag - var p = this.drag(e); - - // fire dragend event - this.el.fire('dragend', { event: e, p: p, m: this.m, handler: this }); - - // unbind events - SVG.off(window, 'mousemove.drag'); - SVG.off(window, 'touchmove.drag'); - SVG.off(window, 'mouseup.drag'); - SVG.off(window, 'touchend.drag'); - - }; - - SVG.extend(SVG.Element, { - // Make element draggable - // Constraint might be an object (as described in readme.md) or a function in the form "function (x, y)" that gets called before every move. - // The function can return a boolean or an object of the form {x, y}, to which the element will be moved. "False" skips moving, true moves to raw x, y. - draggable: function(value, constraint) { - - // Check the parameters and reassign if needed - if (typeof value == 'function' || typeof value == 'object') { - constraint = value; - value = true; - } - - var dragHandler = this.remember('_draggable') || new DragHandler(this); - - // When no parameter is given, value is true - value = typeof value === 'undefined' ? true : value; - - if(value) dragHandler.init(constraint || {}, value); - else { - this.off('mousedown.drag'); - this.off('touchstart.drag'); - } - - return this - } - - }); - -}).call(undefined); - -(function() { - -function SelectHandler(el) { - - this.el = el; - el.remember('_selectHandler', this); - this.pointSelection = {isSelected: false}; - this.rectSelection = {isSelected: false}; - -} - -SelectHandler.prototype.init = function (value, options) { - - var bbox = this.el.bbox(); - this.options = {}; - - // Merging the defaults and the options-object together - for (var i in this.el.selectize.defaults) { - this.options[i] = this.el.selectize.defaults[i]; - if (options[i] !== undefined) { - this.options[i] = options[i]; - } - } - - this.parent = this.el.parent(); - this.nested = (this.nested || this.parent.group()); - this.nested.matrix(new SVG.Matrix(this.el).translate(bbox.x, bbox.y)); - - // When deepSelect is enabled and the element is a line/polyline/polygon, draw only points for moving - if (this.options.deepSelect && ['line', 'polyline', 'polygon'].indexOf(this.el.type) !== -1) { - this.selectPoints(value); - } else { - this.selectRect(value); - } - - this.observe(); - this.cleanup(); - -}; - -SelectHandler.prototype.selectPoints = function (value) { - - this.pointSelection.isSelected = value; - - // When set is already there we dont have to create one - if (this.pointSelection.set) { - return this; - } - - // Create our set of elements - this.pointSelection.set = this.parent.set(); - // draw the circles and mark the element as selected - this.drawCircles(); - - return this; - -}; - -// create the point-array which contains the 2 points of a line or simply the points-array of polyline/polygon -SelectHandler.prototype.getPointArray = function () { - var bbox = this.el.bbox(); - - return this.el.array().valueOf().map(function (el) { - return [el[0] - bbox.x, el[1] - bbox.y]; - }); -}; - -// The function to draw the circles -SelectHandler.prototype.drawCircles = function () { - - var _this = this, array = this.getPointArray(); - - // go through the array of points - for (var i = 0, len = array.length; i < len; ++i) { - - var curriedEvent = (function (k) { - return function (ev) { - ev = ev || window.event; - ev.preventDefault ? ev.preventDefault() : ev.returnValue = false; - ev.stopPropagation(); - - var x = ev.pageX || ev.touches[0].pageX; - var y = ev.pageY || ev.touches[0].pageY; - _this.el.fire('point', {x: x, y: y, i: k, event: ev}); - }; - })(i); - - // add every point to the set - this.pointSelection.set.add( - // a circle with our css-classes and a touchstart-event which fires our event for moving points - this.nested.circle(this.options.radius) - .center(array[i][0], array[i][1]) - .addClass(this.options.classPoints) - .addClass(this.options.classPoints + '_point') - .on('touchstart', curriedEvent) - .on('mousedown', curriedEvent) - ); - } - -}; - -// every time a circle is moved, we have to update the positions of our circle -SelectHandler.prototype.updatePointSelection = function () { - var array = this.getPointArray(); - - this.pointSelection.set.each(function (i) { - if (this.cx() === array[i][0] && this.cy() === array[i][1]) { - return; - } - this.center(array[i][0], array[i][1]); - }); -}; - -SelectHandler.prototype.updateRectSelection = function () { - var bbox = this.el.bbox(); - - this.rectSelection.set.get(0).attr({ - width: bbox.width, - height: bbox.height - }); - - // set.get(1) is always in the upper left corner. no need to move it - if (this.options.points) { - this.rectSelection.set.get(2).center(bbox.width, 0); - this.rectSelection.set.get(3).center(bbox.width, bbox.height); - this.rectSelection.set.get(4).center(0, bbox.height); - - this.rectSelection.set.get(5).center(bbox.width / 2, 0); - this.rectSelection.set.get(6).center(bbox.width, bbox.height / 2); - this.rectSelection.set.get(7).center(bbox.width / 2, bbox.height); - this.rectSelection.set.get(8).center(0, bbox.height / 2); - } - - if (this.options.rotationPoint) { - if (this.options.points) { - this.rectSelection.set.get(9).center(bbox.width / 2, 20); - } else { - this.rectSelection.set.get(1).center(bbox.width / 2, 20); - } - } -}; - -SelectHandler.prototype.selectRect = function (value) { - - var _this = this, bbox = this.el.bbox(); - - this.rectSelection.isSelected = value; - - // when set is already p - this.rectSelection.set = this.rectSelection.set || this.parent.set(); - - // helperFunction to create a mouse-down function which triggers the event specified in `eventName` - function getMoseDownFunc(eventName) { - return function (ev) { - ev = ev || window.event; - ev.preventDefault ? ev.preventDefault() : ev.returnValue = false; - ev.stopPropagation(); - - var x = ev.pageX || ev.touches[0].pageX; - var y = ev.pageY || ev.touches[0].pageY; - _this.el.fire(eventName, {x: x, y: y, event: ev}); - }; - } - - // create the selection-rectangle and add the css-class - if (!this.rectSelection.set.get(0)) { - this.rectSelection.set.add(this.nested.rect(bbox.width, bbox.height).addClass(this.options.classRect)); - } - - // Draw Points at the edges, if enabled - if (this.options.points && !this.rectSelection.set.get(1)) { - var ename ="touchstart", mname = "mousedown"; - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(0, 0).attr('class', this.options.classPoints + '_lt').on(mname, getMoseDownFunc('lt')).on(ename, getMoseDownFunc('lt'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width, 0).attr('class', this.options.classPoints + '_rt').on(mname, getMoseDownFunc('rt')).on(ename, getMoseDownFunc('rt'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width, bbox.height).attr('class', this.options.classPoints + '_rb').on(mname, getMoseDownFunc('rb')).on(ename, getMoseDownFunc('rb'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(0, bbox.height).attr('class', this.options.classPoints + '_lb').on(mname, getMoseDownFunc('lb')).on(ename, getMoseDownFunc('lb'))); - - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width / 2, 0).attr('class', this.options.classPoints + '_t').on(mname, getMoseDownFunc('t')).on(ename, getMoseDownFunc('t'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width, bbox.height / 2).attr('class', this.options.classPoints + '_r').on(mname, getMoseDownFunc('r')).on(ename, getMoseDownFunc('r'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width / 2, bbox.height).attr('class', this.options.classPoints + '_b').on(mname, getMoseDownFunc('b')).on(ename, getMoseDownFunc('b'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(0, bbox.height / 2).attr('class', this.options.classPoints + '_l').on(mname, getMoseDownFunc('l')).on(ename, getMoseDownFunc('l'))); - - this.rectSelection.set.each(function () { - this.addClass(_this.options.classPoints); - }); - } - - // draw rotationPint, if enabled - if (this.options.rotationPoint && ((this.options.points && !this.rectSelection.set.get(9)) || (!this.options.points && !this.rectSelection.set.get(1)))) { - - var curriedEvent = function (ev) { - ev = ev || window.event; - ev.preventDefault ? ev.preventDefault() : ev.returnValue = false; - ev.stopPropagation(); - - var x = ev.pageX || ev.touches[0].pageX; - var y = ev.pageY || ev.touches[0].pageY; - _this.el.fire('rot', {x: x, y: y, event: ev}); - }; - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width / 2, 20).attr('class', this.options.classPoints + '_rot') - .on("touchstart", curriedEvent).on("mousedown", curriedEvent)); - - } - -}; - -SelectHandler.prototype.handler = function () { - - var bbox = this.el.bbox(); - this.nested.matrix(new SVG.Matrix(this.el).translate(bbox.x, bbox.y)); - - if (this.rectSelection.isSelected) { - this.updateRectSelection(); - } - - if (this.pointSelection.isSelected) { - this.updatePointSelection(); - } - -}; - -SelectHandler.prototype.observe = function () { - var _this = this; - - if (MutationObserver) { - if (this.rectSelection.isSelected || this.pointSelection.isSelected) { - this.observerInst = this.observerInst || new MutationObserver(function () { - _this.handler(); - }); - this.observerInst.observe(this.el.node, {attributes: true}); - } else { - try { - this.observerInst.disconnect(); - delete this.observerInst; - } catch (e) { - } - } - } else { - this.el.off('DOMAttrModified.select'); - - if (this.rectSelection.isSelected || this.pointSelection.isSelected) { - this.el.on('DOMAttrModified.select', function () { - _this.handler(); - }); - } - } -}; - -SelectHandler.prototype.cleanup = function () { - - //var _this = this; - - if (!this.rectSelection.isSelected && this.rectSelection.set) { - // stop watching the element, remove the selection - this.rectSelection.set.each(function () { - this.remove(); - }); - - this.rectSelection.set.clear(); - delete this.rectSelection.set; - } - - if (!this.pointSelection.isSelected && this.pointSelection.set) { - // Remove all points, clear the set, stop watching the element - this.pointSelection.set.each(function () { - this.remove(); - }); - - this.pointSelection.set.clear(); - delete this.pointSelection.set; - } - - if (!this.pointSelection.isSelected && !this.rectSelection.isSelected) { - this.nested.remove(); - delete this.nested; - - } -}; - - -SVG.extend(SVG.Element, { - // Select element with mouse - selectize: function (value, options) { - - // Check the parameters and reassign if needed - if (typeof value === 'object') { - options = value; - value = true; - } - - var selectHandler = this.remember('_selectHandler') || new SelectHandler(this); - - selectHandler.init(value === undefined ? true : value, options || {}); - - return this; - - } -}); - -SVG.Element.prototype.selectize.defaults = { - points: true, // If true, points at the edges are drawn. Needed for resize! - classRect: 'svg_select_boundingRect', // Css-class added to the rect - classPoints: 'svg_select_points', // Css-class added to the points - radius: 7, // radius of the points - rotationPoint: true, // If true, rotation point is drawn. Needed for rotation! - deepSelect: false // If true, moving of single points is possible (only line, polyline, polyon) -}; -}()); - -(function() { -(function () { - - function ResizeHandler(el) { - - el.remember('_resizeHandler', this); - - this.el = el; - this.parameters = {}; - this.lastUpdateCall = null; - this.p = el.doc().node.createSVGPoint(); - } - - ResizeHandler.prototype.transformPoint = function(x, y, m){ - - this.p.x = x - (this.offset.x - window.pageXOffset); - this.p.y = y - (this.offset.y - window.pageYOffset); - - return this.p.matrixTransform(m || this.m); - - }; - - ResizeHandler.prototype._extractPosition = function(event) { - // Extract a position from a mouse/touch event. - // Returns { x: .., y: .. } - return { - x: event.clientX != null ? event.clientX : event.touches[0].clientX, - y: event.clientY != null ? event.clientY : event.touches[0].clientY - } - }; - - ResizeHandler.prototype.init = function (options) { - - var _this = this; - - this.stop(); - - if (options === 'stop') { - return; - } - - this.options = {}; - - // Merge options and defaults - for (var i in this.el.resize.defaults) { - this.options[i] = this.el.resize.defaults[i]; - if (typeof options[i] !== 'undefined') { - this.options[i] = options[i]; - } - } - - // We listen to all these events which are specifying different edges - this.el.on('lt.resize', function(e){ _this.resize(e || window.event); }); // Left-Top - this.el.on('rt.resize', function(e){ _this.resize(e || window.event); }); // Right-Top - this.el.on('rb.resize', function(e){ _this.resize(e || window.event); }); // Right-Bottom - this.el.on('lb.resize', function(e){ _this.resize(e || window.event); }); // Left-Bottom - - this.el.on('t.resize', function(e){ _this.resize(e || window.event); }); // Top - this.el.on('r.resize', function(e){ _this.resize(e || window.event); }); // Right - this.el.on('b.resize', function(e){ _this.resize(e || window.event); }); // Bottom - this.el.on('l.resize', function(e){ _this.resize(e || window.event); }); // Left - - this.el.on('rot.resize', function(e){ _this.resize(e || window.event); }); // Rotation - - this.el.on('point.resize', function(e){ _this.resize(e || window.event); }); // Point-Moving - - // This call ensures, that the plugin reacts to a change of snapToGrid immediately - this.update(); - - }; - - ResizeHandler.prototype.stop = function(){ - this.el.off('lt.resize'); - this.el.off('rt.resize'); - this.el.off('rb.resize'); - this.el.off('lb.resize'); - - this.el.off('t.resize'); - this.el.off('r.resize'); - this.el.off('b.resize'); - this.el.off('l.resize'); - - this.el.off('rot.resize'); - - this.el.off('point.resize'); - - return this; - }; - - ResizeHandler.prototype.resize = function (event) { - - var _this = this; - - this.m = this.el.node.getScreenCTM().inverse(); - this.offset = { x: window.pageXOffset, y: window.pageYOffset }; - - var txPt = this._extractPosition(event.detail.event); - this.parameters = { - type: this.el.type, // the type of element - p: this.transformPoint(txPt.x, txPt.y), - x: event.detail.x, // x-position of the mouse when resizing started - y: event.detail.y, // y-position of the mouse when resizing started - box: this.el.bbox(), // The bounding-box of the element - rotation: this.el.transform().rotation // The current rotation of the element - }; - - // Add font-size parameter if the element type is text - if (this.el.type === "text") { - this.parameters.fontSize = this.el.attr()["font-size"]; - } - - // the i-param in the event holds the index of the point which is moved, when using `deepSelect` - if (event.detail.i !== undefined) { - - // get the point array - var array = this.el.array().valueOf(); - - // Save the index and the point which is moved - this.parameters.i = event.detail.i; - this.parameters.pointCoords = [array[event.detail.i][0], array[event.detail.i][1]]; - } - - // Lets check which edge of the bounding-box was clicked and resize the this.el according to this - switch (event.type) { - - // Left-Top-Edge - case 'lt': - // We build a calculating function for every case which gives us the new position of the this.el - this.calc = function (diffX, diffY) { - // The procedure is always the same - // First we snap the edge to the given grid (snapping to 1px grid is normal resizing) - var snap = this.snapToGrid(diffX, diffY); - - // Now we check if the new height and width still valid (> 0) - if (this.parameters.box.width - snap[0] > 0 && this.parameters.box.height - snap[1] > 0) { - // ...if valid, we resize the this.el (which can include moving because the coord-system starts at the left-top and this edge is moving sometimes when resized) - - /* - * but first check if the element is text box, so we can change the font size instead of - * the width and height - */ - - if (this.parameters.type === "text") { - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y); - this.el.attr("font-size", this.parameters.fontSize - snap[0]); - return; - } - - snap = this.checkAspectRatio(snap); - - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y + snap[1]).size(this.parameters.box.width - snap[0], this.parameters.box.height - snap[1]); - } - }; - break; - - // Right-Top - case 'rt': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 1 << 1); - if (this.parameters.box.width + snap[0] > 0 && this.parameters.box.height - snap[1] > 0) { - if (this.parameters.type === "text") { - this.el.move(this.parameters.box.x - snap[0], this.parameters.box.y); - this.el.attr("font-size", this.parameters.fontSize + snap[0]); - return; - } - - snap = this.checkAspectRatio(snap); - - this.el.move(this.parameters.box.x, this.parameters.box.y + snap[1]).size(this.parameters.box.width + snap[0], this.parameters.box.height - snap[1]); - } - }; - break; - - // Right-Bottom - case 'rb': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 0); - if (this.parameters.box.width + snap[0] > 0 && this.parameters.box.height + snap[1] > 0) { - if (this.parameters.type === "text") { - this.el.move(this.parameters.box.x - snap[0], this.parameters.box.y); - this.el.attr("font-size", this.parameters.fontSize + snap[0]); - return; - } - - snap = this.checkAspectRatio(snap); - - this.el.move(this.parameters.box.x, this.parameters.box.y).size(this.parameters.box.width + snap[0], this.parameters.box.height + snap[1]); - } - }; - break; - - // Left-Bottom - case 'lb': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 1); - if (this.parameters.box.width - snap[0] > 0 && this.parameters.box.height + snap[1] > 0) { - if (this.parameters.type === "text") { - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y); - this.el.attr("font-size", this.parameters.fontSize - snap[0]); - return; - } - - snap = this.checkAspectRatio(snap); - - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y).size(this.parameters.box.width - snap[0], this.parameters.box.height + snap[1]); - } - }; - break; - - // Top - case 't': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 1 << 1); - if (this.parameters.box.height - snap[1] > 0) { - // Disable the font-resizing if it is not from the corner of bounding-box - if (this.parameters.type === "text") { - return; - } - - this.el.move(this.parameters.box.x, this.parameters.box.y + snap[1]).height(this.parameters.box.height - snap[1]); - } - }; - break; - - // Right - case 'r': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 0); - if (this.parameters.box.width + snap[0] > 0) { - if (this.parameters.type === "text") { - return; - } - - this.el.move(this.parameters.box.x, this.parameters.box.y).width(this.parameters.box.width + snap[0]); - } - }; - break; - - // Bottom - case 'b': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 0); - if (this.parameters.box.height + snap[1] > 0) { - if (this.parameters.type === "text") { - return; - } - - this.el.move(this.parameters.box.x, this.parameters.box.y).height(this.parameters.box.height + snap[1]); - } - }; - break; - - // Left - case 'l': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 1); - if (this.parameters.box.width - snap[0] > 0) { - if (this.parameters.type === "text") { - return; - } - - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y).width(this.parameters.box.width - snap[0]); - } - }; - break; - - // Rotation - case 'rot': - // s.a. - this.calc = function (diffX, diffY) { - - // yes this is kinda stupid but we need the mouse coords back... - var current = {x: diffX + this.parameters.p.x, y: diffY + this.parameters.p.y}; - - // start minus middle - var sAngle = Math.atan2((this.parameters.p.y - this.parameters.box.y - this.parameters.box.height / 2), (this.parameters.p.x - this.parameters.box.x - this.parameters.box.width / 2)); - - // end minus middle - var pAngle = Math.atan2((current.y - this.parameters.box.y - this.parameters.box.height / 2), (current.x - this.parameters.box.x - this.parameters.box.width / 2)); - - var angle = (pAngle - sAngle) * 180 / Math.PI; - - // We have to move the element to the center of the box first and change the rotation afterwards - // because rotation always works around a rotation-center, which is changed when moving the element - // We also set the new rotation center to the center of the box. - this.el.center(this.parameters.box.cx, this.parameters.box.cy).rotate(this.parameters.rotation + angle - angle % this.options.snapToAngle, this.parameters.box.cx, this.parameters.box.cy); - }; - break; - - // Moving one single Point (needed when an element is deepSelected which means you can move every single point of the object) - case 'point': - this.calc = function (diffX, diffY) { - - // Snapping the point to the grid - var snap = this.snapToGrid(diffX, diffY, this.parameters.pointCoords[0], this.parameters.pointCoords[1]); - - // Get the point array - var array = this.el.array().valueOf(); - - // Changing the moved point in the array - array[this.parameters.i][0] = this.parameters.pointCoords[0] + snap[0]; - array[this.parameters.i][1] = this.parameters.pointCoords[1] + snap[1]; - - // And plot the new this.el - this.el.plot(array); - }; - } - - this.el.fire('resizestart', {dx: this.parameters.x, dy: this.parameters.y, event: event}); - // When resizing started, we have to register events for... - // Touches. - SVG.on(window, 'touchmove.resize', function(e) { - _this.update(e || window.event); - }); - SVG.on(window, 'touchend.resize', function() { - _this.done(); - }); - // Mouse. - SVG.on(window, 'mousemove.resize', function (e) { - _this.update(e || window.event); - }); - SVG.on(window, 'mouseup.resize', function () { - _this.done(); - }); - - }; - - // The update-function redraws the element every time the mouse is moving - ResizeHandler.prototype.update = function (event) { - - if (!event) { - if (this.lastUpdateCall) { - this.calc(this.lastUpdateCall[0], this.lastUpdateCall[1]); - } - return; - } - - // Calculate the difference between the mouseposition at start and now - var txPt = this._extractPosition(event); - var p = this.transformPoint(txPt.x, txPt.y); - - var diffX = p.x - this.parameters.p.x, - diffY = p.y - this.parameters.p.y; - - this.lastUpdateCall = [diffX, diffY]; - - // Calculate the new position and height / width of the element - this.calc(diffX, diffY); - - // Emit an event to say we have changed. - this.el.fire('resizing', {dx: diffX, dy: diffY, event: event}); - }; - - // Is called on mouseup. - // Removes the update-function from the mousemove event - ResizeHandler.prototype.done = function () { - this.lastUpdateCall = null; - SVG.off(window, 'mousemove.resize'); - SVG.off(window, 'mouseup.resize'); - SVG.off(window, 'touchmove.resize'); - SVG.off(window, 'touchend.resize'); - this.el.fire('resizedone'); - }; - - // The flag is used to determine whether the resizing is used with a left-Point (first bit) and top-point (second bit) - // In this cases the temp-values are calculated differently - ResizeHandler.prototype.snapToGrid = function (diffX, diffY, flag, pointCoordsY) { - - var temp; - - // If `pointCoordsY` is given, a single Point has to be snapped (deepSelect). That's why we need a different temp-value - if (typeof pointCoordsY !== 'undefined') { - // Note that flag = pointCoordsX in this case - temp = [(flag + diffX) % this.options.snapToGrid, (pointCoordsY + diffY) % this.options.snapToGrid]; - } else { - // We check if the flag is set and if not we set a default-value (both bits set - which means upper-left-edge) - flag = flag == null ? 1 | 1 << 1 : flag; - temp = [(this.parameters.box.x + diffX + (flag & 1 ? 0 : this.parameters.box.width)) % this.options.snapToGrid, (this.parameters.box.y + diffY + (flag & (1 << 1) ? 0 : this.parameters.box.height)) % this.options.snapToGrid]; - } - - - diffX -= (Math.abs(temp[0]) < this.options.snapToGrid / 2 ? - temp[0] : - temp[0] - (diffX < 0 ? -this.options.snapToGrid : this.options.snapToGrid)); - diffY -= (Math.abs(temp[1]) < this.options.snapToGrid / 2 ? - temp[1] : - temp[1] - (diffY < 0 ? -this.options.snapToGrid : this.options.snapToGrid)); - - return this.constraintToBox(diffX, diffY, flag, pointCoordsY); - - }; - - // keep element within constrained box - ResizeHandler.prototype.constraintToBox = function (diffX, diffY, flag, pointCoordsY) { - //return [diffX, diffY] - var c = this.options.constraint || {}; - var orgX, orgY; - - if (typeof pointCoordsY !== 'undefined') { - orgX = flag; - orgY = pointCoordsY; - } else { - orgX = this.parameters.box.x + (flag & 1 ? 0 : this.parameters.box.width); - orgY = this.parameters.box.y + (flag & (1<<1) ? 0 : this.parameters.box.height); - } - - if (typeof c.minX !== 'undefined' && orgX + diffX < c.minX) { - diffX = c.minX - orgX; - } - - if (typeof c.maxX !== 'undefined' && orgX + diffX > c.maxX) { - diffX = c.maxX - orgX; - } - - if (typeof c.minY !== 'undefined' && orgY + diffY < c.minY) { - diffY = c.minY - orgY; - } - - if (typeof c.maxY !== 'undefined' && orgY + diffY > c.maxY) { - diffY = c.maxY - orgY; - } - - return [diffX, diffY]; - }; - - ResizeHandler.prototype.checkAspectRatio = function (snap) { - if (!this.options.saveAspectRatio) { - return snap; - } - - var updatedSnap = snap.slice(); - var aspectRatio = this.parameters.box.width / this.parameters.box.height; - var newW = this.parameters.box.width + snap[0]; - var newH = this.parameters.box.height - snap[1]; - var newAspectRatio = newW / newH; - - if (newAspectRatio < aspectRatio) { - // Height is too big. Adapt it - updatedSnap[1] = newW / aspectRatio - this.parameters.box.height; - } else if (newAspectRatio > aspectRatio) { - // Width is too big. Adapt it - updatedSnap[0] = this.parameters.box.width - newH * aspectRatio; - } - - return updatedSnap; - - }; - - SVG.extend(SVG.Element, { - // Resize element with mouse - resize: function (options) { - - (this.remember('_resizeHandler') || new ResizeHandler(this)).init(options || {}); - - return this; - - } - - }); - - SVG.Element.prototype.resize.defaults = { - snapToAngle: 0.1, // Specifies the speed the rotation is happening when moving the mouse - snapToGrid: 1, // Snaps to a grid of `snapToGrid` Pixels - constraint: {}, // keep element within constrained box - saveAspectRatio: false // Save aspect ratio when resizing using lt, rt, rb or lb points - }; - -}).call(this); -}()); - -function styleInject(css, ref) { - if ( ref === void 0 ) ref = {}; - var insertAt = ref.insertAt; - - if (!css || typeof document === 'undefined') { return; } - - var head = document.head || document.getElementsByTagName('head')[0]; - var style = document.createElement('style'); - style.type = 'text/css'; - - if (insertAt === 'top') { - if (head.firstChild) { - head.insertBefore(style, head.firstChild); - } else { - head.appendChild(style); - } - } else { - head.appendChild(style); - } - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - style.appendChild(document.createTextNode(css)); - } -} - -var css = ".apexcharts-canvas {\n position: relative;\n user-select: none;\n /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px;\n}\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0,0,0,.5);\n box-shadow: 0 0 1px rgba(255,255,255,.5);\n -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);\n}\n.apexcharts-canvas.dark {\n background: #343F57;\n}\n\n.apexcharts-inner {\n position: relative;\n}\n\n.legend-mouseover-inactive {\n transition: 0.15s ease all;\n opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0;\n}\n\n.apexcharts-gridline, .apexcharts-text {\n pointer-events: none;\n}\n\n.apexcharts-tooltip {\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px #999;\n cursor: default;\n font-size: 14px;\n left: 62px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 20px;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: 0.15s ease all;\n}\n.apexcharts-tooltip.light {\n border: 1px solid #e3e3e3;\n background: rgba(255, 255, 255, 0.96);\n}\n.apexcharts-tooltip.dark {\n color: #fff;\n background: rgba(30,30,30, 0.8);\n}\n.apexcharts-tooltip * {\n font-family: inherit;\n}\n\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line {\n pointer-events: none;\n}\n\n.apexcharts-tooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip-title {\n padding: 6px;\n font-size: 15px;\n margin-bottom: 4px;\n}\n.apexcharts-tooltip.light .apexcharts-tooltip-title {\n background: #ECEFF1;\n border-bottom: 1px solid #ddd;\n}\n.apexcharts-tooltip.dark .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #333;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n font-weight: 600;\n margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-z-label:empty,\n.apexcharts-tooltip-text-z-value:empty {\n display: none;\n}\n\n.apexcharts-tooltip-text-value, \n.apexcharts-tooltip-text-z-value {\n font-weight: 600;\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0px;\n margin-right: 10px;\n border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 0 10px;\n display: none;\n text-align: left;\n justify-content: left;\n align-items: center;\n}\n\n.apexcharts-tooltip-series-group.active .apexcharts-tooltip-marker {\n opacity: 1;\n}\n.apexcharts-tooltip-series-group.active, .apexcharts-tooltip-series-group:last-child {\n padding-bottom: 4px;\n}\n.apexcharts-tooltip-series-group-hidden {\n opacity: 0;\n height: 0;\n line-height: 0;\n padding: 0 !important;\n}\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px;\n}\n.apexcharts-tooltip-candlestick {\n padding: 4px 8px;\n}\n.apexcharts-tooltip-candlestick > div {\n margin: 4px 0;\n}\n.apexcharts-tooltip-candlestick span.value {\n font-weight: bold;\n}\n\n.apexcharts-tooltip-rangebar {\n padding: 5px 8px;\n}\n\n.apexcharts-tooltip-rangebar .category {\n font-weight: 600;\n color: #777;\n}\n\n.apexcharts-tooltip-rangebar .series-name {\n font-weight: bold;\n display: block;\n margin-bottom: 5px;\n}\n\n.apexcharts-xaxistooltip {\n opacity: 0;\n padding: 9px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip.dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-xaxistooltip:after, .apexcharts-xaxistooltip:before {\n\tleft: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-left: -6px;\n}\n.apexcharts-xaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after, .apexcharts-xaxistooltip-bottom:before {\n bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-top:after, .apexcharts-xaxistooltip-top:before {\n top: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-bottom.dark:after {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-bottom.dark:before {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top:after {\n border-top-color:#ECEFF1\n}\n.apexcharts-xaxistooltip-top:before {\n border-top-color: #90A4AE;\n}\n.apexcharts-xaxistooltip-top.dark:after {\n border-top-color:rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-top.dark:before {\n border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n\n.apexcharts-xaxistooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n opacity: 0;\n padding: 4px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip.dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-yaxistooltip:after, .apexcharts-yaxistooltip:before {\n\ttop: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n.apexcharts-yaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-top: -6px;\n}\n.apexcharts-yaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after, .apexcharts-yaxistooltip-left:before {\n left: 100%;\n}\n\n.apexcharts-yaxistooltip-right:after, .apexcharts-yaxistooltip-right:before {\n right: 100%;\n}\n\n.apexcharts-yaxistooltip-left:after {\n border-left-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-left:before {\n border-left-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-left.dark:after {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-left.dark:before {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right:after {\n border-right-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-right:before {\n border-right-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-right.dark:after {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-right.dark:before {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip.active {\n opacity: 1;\n}\n\n.apexcharts-xcrosshairs, .apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.active, .apexcharts-ycrosshairs.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0;\n}\n\n.apexcharts-zoom-rect {\n pointer-events: none;\n}\n.apexcharts-selection-rect {\n cursor: move;\n}\n\n.svg_select_points, .svg_select_points_rot {\n opacity: 0;\n visibility: hidden;\n}\n.svg_select_points_l, .svg_select_points_r {\n cursor: ew-resize;\n opacity: 1;\n visibility: visible;\n fill: #888;\n}\n.apexcharts-canvas.zoomable .hovering-zoom {\n cursor: crosshair\n}\n.apexcharts-canvas.zoomable .hovering-pan {\n cursor: move\n}\n\n.apexcharts-xaxis,\n.apexcharts-yaxis {\n pointer-events: none;\n}\n\n.apexcharts-zoom-icon, \n.apexcharts-zoom-in-icon,\n.apexcharts-zoom-out-icon,\n.apexcharts-reset-zoom-icon, \n.apexcharts-pan-icon, \n.apexcharts-selection-icon,\n.apexcharts-menu-icon, \n.apexcharts-toolbar-custom-icon {\n cursor: pointer;\n width: 20px;\n height: 20px;\n line-height: 24px;\n color: #6E8192;\n text-align: center;\n}\n\n\n.apexcharts-zoom-icon svg, \n.apexcharts-zoom-in-icon svg,\n.apexcharts-zoom-out-icon svg,\n.apexcharts-reset-zoom-icon svg,\n.apexcharts-menu-icon svg {\n fill: #6E8192;\n}\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(0.76)\n}\n\n.dark .apexcharts-zoom-icon svg, \n.dark .apexcharts-zoom-in-icon svg,\n.dark .apexcharts-zoom-out-icon svg,\n.dark .apexcharts-reset-zoom-icon svg, \n.dark .apexcharts-pan-icon svg, \n.dark .apexcharts-selection-icon svg,\n.dark .apexcharts-menu-icon svg, \n.dark .apexcharts-toolbar-custom-icon svg{\n fill: #f3f4f5;\n}\n\n.apexcharts-canvas .apexcharts-zoom-icon.selected svg, \n.apexcharts-canvas .apexcharts-selection-icon.selected svg, \n.apexcharts-canvas .apexcharts-reset-zoom-icon.selected svg {\n fill: #008FFB;\n}\n.light .apexcharts-selection-icon:not(.selected):hover svg,\n.light .apexcharts-zoom-icon:not(.selected):hover svg, \n.light .apexcharts-zoom-in-icon:hover svg, \n.light .apexcharts-zoom-out-icon:hover svg, \n.light .apexcharts-reset-zoom-icon:hover svg, \n.light .apexcharts-menu-icon:hover svg {\n fill: #333;\n}\n\n.apexcharts-selection-icon, .apexcharts-menu-icon {\n position: relative;\n}\n.apexcharts-reset-zoom-icon {\n margin-left: 5px;\n}\n.apexcharts-zoom-icon, .apexcharts-reset-zoom-icon, .apexcharts-menu-icon {\n transform: scale(0.85);\n}\n\n.apexcharts-zoom-in-icon, .apexcharts-zoom-out-icon {\n transform: scale(0.7)\n}\n\n.apexcharts-zoom-out-icon {\n margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n transform: scale(0.62);\n position: relative;\n left: 1px;\n top: 0px;\n}\n.apexcharts-pan-icon svg {\n fill: #fff;\n stroke: #6E8192;\n stroke-width: 2;\n}\n.apexcharts-pan-icon.selected svg {\n stroke: #008FFB;\n}\n.apexcharts-pan-icon:not(.selected):hover svg {\n stroke: #333;\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n top: 0px;\n right: 3px;\n max-width: 176px;\n text-align: right;\n border-radius: 3px;\n padding: 0px 6px 2px 6px;\n display: flex;\n justify-content: space-between;\n align-items: center; \n}\n\n.apexcharts-toolbar svg {\n pointer-events: none;\n}\n\n.apexcharts-menu {\n background: #fff;\n position: absolute;\n top: 100%;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 3px;\n right: 10px;\n opacity: 0;\n min-width: 110px;\n transition: 0.15s ease all;\n pointer-events: none;\n}\n\n.apexcharts-menu.open {\n opacity: 1;\n pointer-events: all;\n transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n padding: 6px 7px;\n font-size: 12px;\n cursor: pointer;\n}\n.light .apexcharts-menu-item:hover {\n background: #eee;\n}\n.dark .apexcharts-menu {\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n}\n\n@media screen and (min-width: 768px) {\n .apexcharts-toolbar {\n /*opacity: 0;*/\n }\n\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1;\n } \n}\n\n.apexcharts-datalabel.hidden {\n opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabel, .apexcharts-datalabel-label, .apexcharts-datalabel-value {\n cursor: default;\n pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease;\n}\n\n.apexcharts-canvas .hidden {\n opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, .apexcharts-radar-series path, .apexcharts-radar-series polygon {\n pointer-events: none;\n}\n\n/* markers */\n\n.apexcharts-marker {\n transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}"; -styleInject(css); - -/* - * classList.js: Cross-browser full element.classList implementation. - * 1.2.20171210 - * - * By Eli Grey, http://eligrey.com - * License: Dedicated to the public domain. - * See https://github.com/eligrey/classList.js/blob/master/LICENSE.md - */ - -/*global self, document, DOMException */ - -/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js */ -if ("document" in self) { - // Full polyfill for browsers with no classList support - // Including IE < Edge missing SVGElement.classList - if (!("classList" in document.createElement("_")) || document.createElementNS && !("classList" in document.createElementNS("http://www.w3.org/2000/svg", "g"))) { - (function (view) { - - if (!('Element' in view)) return; - - var classListProp = "classList", - protoProp = "prototype", - elemCtrProto = view.Element[protoProp], - objCtr = Object, - strTrim = String[protoProp].trim || function () { - return this.replace(/^\s+|\s+$/g, ""); - }, - arrIndexOf = Array[protoProp].indexOf || function (item) { - var i = 0, - len = this.length; - - for (; i < len; i++) { - if (i in this && this[i] === item) { - return i; - } - } - - return -1; - } // Vendors: please allow content code to instantiate DOMExceptions - , - DOMEx = function DOMEx(type, message) { - this.name = type; - this.code = DOMException[type]; - this.message = message; - }, - checkTokenAndGetIndex = function checkTokenAndGetIndex(classList, token) { - if (token === "") { - throw new DOMEx("SYNTAX_ERR", "The token must not be empty."); - } - - if (/\s/.test(token)) { - throw new DOMEx("INVALID_CHARACTER_ERR", "The token must not contain space characters."); - } - - return arrIndexOf.call(classList, token); - }, - ClassList = function ClassList(elem) { - var trimmedClasses = strTrim.call(elem.getAttribute("class") || ""), - classes = trimmedClasses ? trimmedClasses.split(/\s+/) : [], - i = 0, - len = classes.length; - - for (; i < len; i++) { - this.push(classes[i]); - } - - this._updateClassName = function () { - elem.setAttribute("class", this.toString()); - }; - }, - classListProto = ClassList[protoProp] = [], - classListGetter = function classListGetter() { - return new ClassList(this); - }; // Most DOMException implementations don't allow calling DOMException's toString() - // on non-DOMExceptions. Error's toString() is sufficient here. - - - DOMEx[protoProp] = Error[protoProp]; - - classListProto.item = function (i) { - return this[i] || null; - }; - - classListProto.contains = function (token) { - return ~checkTokenAndGetIndex(this, token + ""); - }; - - classListProto.add = function () { - var tokens = arguments, - i = 0, - l = tokens.length, - token, - updated = false; - - do { - token = tokens[i] + ""; - - if (!~checkTokenAndGetIndex(this, token)) { - this.push(token); - updated = true; - } - } while (++i < l); - - if (updated) { - this._updateClassName(); - } - }; - - classListProto.remove = function () { - var tokens = arguments, - i = 0, - l = tokens.length, - token, - updated = false, - index; - - do { - token = tokens[i] + ""; - index = checkTokenAndGetIndex(this, token); - - while (~index) { - this.splice(index, 1); - updated = true; - index = checkTokenAndGetIndex(this, token); - } - } while (++i < l); - - if (updated) { - this._updateClassName(); - } - }; - - classListProto.toggle = function (token, force) { - var result = this.contains(token), - method = result ? force !== true && "remove" : force !== false && "add"; - - if (method) { - this[method](token); - } - - if (force === true || force === false) { - return force; - } else { - return !result; - } - }; - - classListProto.replace = function (token, replacement_token) { - var index = checkTokenAndGetIndex(token + ""); - - if (~index) { - this.splice(index, 1, replacement_token); - - this._updateClassName(); - } - }; - - classListProto.toString = function () { - return this.join(" "); - }; - - if (objCtr.defineProperty) { - var classListPropDesc = { - get: classListGetter, - enumerable: true, - configurable: true - }; - - try { - objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); - } catch (ex) { - // IE 8 doesn't support enumerable:true - // adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36 - // modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected - if (ex.number === undefined || ex.number === -0x7FF5EC54) { - classListPropDesc.enumerable = false; - objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); - } - } - } else if (objCtr[protoProp].__defineGetter__) { - elemCtrProto.__defineGetter__(classListProp, classListGetter); - } - })(self); - } // There is full or partial native classList support, so just check if we need - // to normalize the add/remove and toggle APIs. - - - (function () { - - var testElement = document.createElement("_"); - testElement.classList.add("c1", "c2"); // Polyfill for IE 10/11 and Firefox <26, where classList.add and - // classList.remove exist but support only one argument at a time. - - if (!testElement.classList.contains("c2")) { - var createMethod = function createMethod(method) { - var original = DOMTokenList.prototype[method]; - - DOMTokenList.prototype[method] = function (token) { - var i, - len = arguments.length; - - for (i = 0; i < len; i++) { - token = arguments[i]; - original.call(this, token); - } - }; - }; - - createMethod('add'); - createMethod('remove'); - } - - testElement.classList.toggle("c3", false); // Polyfill for IE 10 and Firefox <24, where classList.toggle does not - // support the second argument. - - if (testElement.classList.contains("c3")) { - var _toggle = DOMTokenList.prototype.toggle; - - DOMTokenList.prototype.toggle = function (token, force) { - if (1 in arguments && !this.contains(token) === !force) { - return force; - } else { - return _toggle.call(this, token); - } - }; - } // replace() polyfill - - - if (!("replace" in document.createElement("_").classList)) { - DOMTokenList.prototype.replace = function (token, replacement_token) { - var tokens = this.toString().split(" "), - index = tokens.indexOf(token + ""); - - if (~index) { - tokens = tokens.slice(index); - this.remove.apply(this, tokens); - this.add(replacement_token); - this.add.apply(this, tokens.slice(1)); - } - }; - } - - testElement = null; - })(); -} - -/** -* Detect Element Resize -* -* https://github.com/sdecima/javascript-detect-element-resize -* Sebastian Decima -* -* version: 0.5.3 -**/ -(function () { - var stylesCreated = false; - - function resetTriggers(element) { - var triggers = element.__resizeTriggers__, - expand = triggers.firstElementChild, - contract = triggers.lastElementChild, - expandChild = expand.firstElementChild; - contract.scrollLeft = contract.scrollWidth; - contract.scrollTop = contract.scrollHeight; - expandChild.style.width = expand.offsetWidth + 1 + 'px'; - expandChild.style.height = expand.offsetHeight + 1 + 'px'; - expand.scrollLeft = expand.scrollWidth; - expand.scrollTop = expand.scrollHeight; - } - - function checkTriggers(element) { - return element.offsetWidth != element.__resizeLast__.width || element.offsetHeight != element.__resizeLast__.height; - } - - function scrollListener(e) { - var element = this; - resetTriggers(this); - if (this.__resizeRAF__) cancelFrame(this.__resizeRAF__); - this.__resizeRAF__ = requestFrame(function () { - if (checkTriggers(element)) { - element.__resizeLast__.width = element.offsetWidth; - element.__resizeLast__.height = element.offsetHeight; - - element.__resizeListeners__.forEach(function (fn) { - fn.call(e); - }); - } - }); - } - - function createStyles() { - if (!stylesCreated) { - // opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360 - var css = (animationKeyframes || '') + '.resize-triggers { ' + (animationStyle || '') + 'visibility: hidden; opacity: 0; } ' + '.resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \" \"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }', - head = document.head || document.getElementsByTagName('head')[0], - style = document.createElement('style'); - style.type = 'text/css'; - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - style.appendChild(document.createTextNode(css)); - } - - head.appendChild(style); - stylesCreated = true; - } - } - - var requestFrame = function () { - var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (fn) { - return window.setTimeout(fn, 20); - }; - - return function (fn) { - return raf(fn); - }; - }(); - - var cancelFrame = function () { - var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout; - return function (id) { - return cancel(id); - }; - }(); - /* Detect CSS Animations support to detect element display/re-attach */ - - - var animation = false, - keyframeprefix = '', - animationstartevent = 'animationstart', - domPrefixes = 'Webkit Moz O ms'.split(' '), - startEvents = 'webkitAnimationStart animationstart oAnimationStart MSAnimationStart'.split(' '), - pfx = ''; - { - var elm = document.createElement('fakeelement'); - - if (elm.style.animationName !== undefined) { - animation = true; - } - - if (animation === false) { - for (var i = 0; i < domPrefixes.length; i++) { - if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) { - pfx = domPrefixes[i]; - keyframeprefix = '-' + pfx.toLowerCase() + '-'; - animationstartevent = startEvents[i]; - break; - } - } - } - } - var animationName = 'resizeanim'; - var animationKeyframes = '@' + keyframeprefix + 'keyframes ' + animationName + ' { from { opacity: 0; } to { opacity: 0; } } '; - var animationStyle = keyframeprefix + 'animation: 1ms ' + animationName + '; '; - - window.addResizeListener = function (element, fn) { - if (!element.__resizeTriggers__) { - if (getComputedStyle(element).position == 'static') element.style.position = 'relative'; - createStyles(); - element.__resizeLast__ = {}; - element.__resizeListeners__ = []; - (element.__resizeTriggers__ = document.createElement('div')).className = 'resize-triggers'; - element.__resizeTriggers__.innerHTML = '
' + '
'; - element.appendChild(element.__resizeTriggers__); - resetTriggers(element); - element.addEventListener('scroll', scrollListener, true); - /* Listen for a css animation to detect element display/re-attach */ - - animationstartevent && element.__resizeTriggers__.addEventListener(animationstartevent, function (e) { - if (e.animationName == animationName) { - resetTriggers(element); - } - }); - } - - element.__resizeListeners__.push(fn); - }; - - window.removeResizeListener = function (element, fn) { - if (element) { - element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1); - - if (!element.__resizeListeners__.length) { - element.removeEventListener('scroll', scrollListener); - element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__); - } - } - }; -})(); - -window.Apex = {}; -/** - * - * @module ApexCharts - **/ - -var ApexCharts$1 = -/*#__PURE__*/ -function () { - function ApexCharts(el, opts) { - _classCallCheck(this, ApexCharts); - - this.opts = opts; - this.ctx = this; // Pass the user supplied options to the Base Class where these options will be extended with defaults. The returned object from Base Class will become the config object in the entire codebase. - - this.w = new Base(opts).init(); - this.el = el; - this.w.globals.cuid = (Math.random() + 1).toString(36).substring(4); - this.w.globals.chartID = this.w.config.chart.id ? this.w.config.chart.id : this.w.globals.cuid; - this.initModules(); - this.create = Utils.bind(this.create, this); - this.windowResizeHandler = this.windowResize.bind(this); - } - /** - * The primary method user will call to render the chart. - */ - - - _createClass(ApexCharts, [{ - key: "render", - value: function render() { - var _this = this; - - // main method - return new Promise$1(function (resolve, reject) { - // only draw chart, if element found - if (_this.el !== null) { - if (typeof Apex._chartInstances === 'undefined') { - Apex._chartInstances = []; - } - - if (_this.w.config.chart.id) { - Apex._chartInstances.push({ - id: _this.w.globals.chartID, - group: _this.w.config.chart.group, - chart: _this - }); - } // set the locale here - - - _this.setLocale(_this.w.config.chart.defaultLocale); - - var beforeMount = _this.w.config.chart.events.beforeMount; - - if (typeof beforeMount === 'function') { - beforeMount(_this, _this.w); - } - - _this.fireEvent('beforeMount', [_this, _this.w]); - - window.addEventListener('resize', _this.windowResizeHandler); - window.addResizeListener(_this.el.parentNode, _this.parentResizeCallback.bind(_this)); - - var graphData = _this.create(_this.w.config.series, {}); - - if (!graphData) return resolve(_this); - - _this.mount(graphData).then(function () { - resolve(graphData); - - if (typeof _this.w.config.chart.events.mounted === 'function') { - _this.w.config.chart.events.mounted(_this, _this.w); - } - - _this.fireEvent('mounted', [_this, _this.w]); - }).catch(function (e) { - reject(e); // handle error in case no data or element not found - }); - } else { - reject(new Error('Element not found')); - } - }); - } - }, { - key: "initModules", - value: function initModules() { - this.animations = new Animations(this); - this.core = new Core(this.el, this); - this.grid = new Grid(this); - this.coreUtils = new CoreUtils(this); - this.config = new Config({}); - this.crosshairs = new Crosshairs(this); - this.options = new Options(); - this.responsive = new Responsive(this); - this.series = new Series(this); - this.theme = new Theme(this); - this.formatters = new Formatters(this); - this.titleSubtitle = new TitleSubtitle(this); - this.legend = new Legend(this); - this.toolbar = new Toolbar(this); - this.dimensions = new Dimensions(this); - this.zoomPanSelection = new ZoomPanSelection(this); - this.w.globals.tooltip = new Tooltip(this); - } - }, { - key: "addEventListener", - value: function addEventListener(name$$1, handler) { - var w = this.w; - - if (w.globals.events.hasOwnProperty(name$$1)) { - w.globals.events[name$$1].push(handler); - } else { - w.globals.events[name$$1] = [handler]; - } - } - }, { - key: "removeEventListener", - value: function removeEventListener(name$$1, handler) { - var w = this.w; - - if (!w.globals.events.hasOwnProperty(name$$1)) { - return; - } - - var index = w.globals.events[name$$1].indexOf(handler); - - if (index !== -1) { - w.globals.events[name$$1].splice(index, 1); - } - } - }, { - key: "fireEvent", - value: function fireEvent(name$$1, args) { - var w = this.w; - - if (!w.globals.events.hasOwnProperty(name$$1)) { - return; - } - - if (!args || !args.length) { - args = []; - } - - var evs = w.globals.events[name$$1]; - var l = evs.length; - - for (var i = 0; i < l; i++) { - evs[i].apply(null, args); - } - } - }, { - key: "create", - value: function create(ser, opts) { - var w = this.w; - this.initModules(); - var gl = this.w.globals; - gl.noData = false; - gl.animationEnded = false; - this.responsive.checkResponsiveConfig(opts); - - if (this.el === null) { - gl.animationEnded = true; - return null; - } - - this.core.setupElements(); - - if (gl.svgWidth === 0) { - // if the element is hidden, skip drawing - gl.animationEnded = true; - return null; - } - - var combo = CoreUtils.checkComboSeries(ser); - gl.comboCharts = combo.comboCharts; - gl.comboChartsHasBars = combo.comboChartsHasBars; - - if (ser.length === 0 || ser.length === 1 && ser[0].data && ser[0].data.length === 0) { - this.series.handleNoData(); - } - - this.setupEventHandlers(); // Handle the data inputted by user and set some of the global variables (for eg, if data is datetime / numeric / category). Don't calculate the range / min / max at this time - - this.core.parseData(ser); // this is a good time to set theme colors first - - this.theme.init(); // as markers accepts array, we need to setup global markers for easier access - - var markers = new Markers(this); - markers.setGlobalMarkerSize(); // labelFormatters should be called before dimensions as in dimensions we need text labels width - - this.formatters.setLabelFormatters(); - this.titleSubtitle.draw(); // legend is calculated here before coreCalculations because it affects the plottable area - - this.legend.init(); // check whether in multiple series, all series share the same X - - this.series.hasAllSeriesEqualX(); // coreCalculations will give the min/max range and yaxis/axis values. It should be called here to set series variable from config to globals - - if (gl.axisCharts) { - this.core.coreCalculations(); - - if (w.config.xaxis.type !== 'category') { - // as we have minX and maxX values, determine the default DateTimeFormat for time series - this.formatters.setLabelFormatters(); - } - } // we need to generate yaxis for heatmap separately as we are not showing numerics there, but seriesNames. There are some tweaks which are required for heatmap to align labels correctly which are done in below function - // Also we need to do this before calcuting Dimentions plotCoords() method of Dimensions - - - this.formatters.heatmapLabelFormatters(); // We got plottable area here, next task would be to calculate axis areas - - this.dimensions.plotCoords(); - var xyRatios = this.core.xySettings(); - this.grid.createGridMask(); - var elGraph = this.core.plotChartType(ser, xyRatios); // after all the drawing calculations, shift the graphical area (actual charts/bars) excluding legends - - this.core.shiftGraphPosition(); - var dim = { - plot: { - left: w.globals.translateX, - top: w.globals.translateY, - width: w.globals.gridWidth, - height: w.globals.gridHeight - } - }; - return { - elGraph: elGraph, - xyRatios: xyRatios, - elInner: w.globals.dom.elGraphical, - dimensions: dim - }; - } - }, { - key: "mount", - value: function mount() { - var graphData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var me = this; - var w = me.w; - return new Promise$1(function (resolve, reject) { - // no data to display - if (me.el === null) { - return reject(new Error('Not enough data to display or target element not found')); - } else if (graphData === null || w.globals.allSeriesCollapsed) { - me.series.handleNoData(); - } - - me.annotations = new Annotations(me); - me.core.drawAxis(w.config.chart.type, graphData.xyRatios); - me.grid = new Grid(me); - - if (w.config.grid.position === 'back') { - me.grid.drawGrid(); - } - - if (w.config.annotations.position === 'back') { - me.annotations.drawAnnotations(); - } - - if (graphData.elGraph instanceof Array) { - for (var g = 0; g < graphData.elGraph.length; g++) { - w.globals.dom.elGraphical.add(graphData.elGraph[g]); - } - } else { - w.globals.dom.elGraphical.add(graphData.elGraph); - } - - if (w.config.grid.position === 'front') { - me.grid.drawGrid(); - } - - if (w.config.xaxis.crosshairs.position === 'front') { - me.crosshairs.drawXCrosshairs(); - } - - if (w.config.yaxis[0].crosshairs.position === 'front') { - me.crosshairs.drawYCrosshairs(); - } - - if (w.config.annotations.position === 'front') { - me.annotations.drawAnnotations(); - } - - if (!w.globals.noData) { - // draw tooltips at the end - if (w.config.tooltip.enabled && !w.globals.noData) { - me.w.globals.tooltip.drawTooltip(graphData.xyRatios); - } - - if (w.globals.axisCharts && w.globals.isXNumeric) { - if (w.config.chart.zoom.enabled || w.config.chart.selection && w.config.chart.selection.enabled || w.config.chart.pan && w.config.chart.pan.enabled) { - me.zoomPanSelection.init({ - xyRatios: graphData.xyRatios - }); - } - } else { - var tools = w.config.chart.toolbar.tools; - tools.zoom = false; - tools.zoomin = false; - tools.zoomout = false; - tools.selection = false; - tools.pan = false; - tools.reset = false; - } - - if (w.config.chart.toolbar.show && !w.globals.allSeriesCollapsed) { - me.toolbar.createToolbar(); - } - } - - if (w.globals.memory.methodsToExec.length > 0) { - w.globals.memory.methodsToExec.forEach(function (fn) { - fn.method(fn.params, false, fn.context); - }); - } - - resolve(me); - }); - } - }, { - key: "clearPreviousPaths", - value: function clearPreviousPaths() { - var w = this.w; - w.globals.previousPaths = []; - w.globals.allSeriesCollapsed = false; - w.globals.collapsedSeries = []; - w.globals.collapsedSeriesIndices = []; - } - /** - * Allows users to update Options after the chart has rendered. - * - * @param {object} options - A new config object can be passed which will be merged with the existing config object - * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there - * @param {boolean} animate - should animate or not on updating Options - */ - - }, { - key: "updateOptions", - value: function updateOptions(options$$1) { - var redraw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var animate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var overwriteInitialConfig = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; - var w = this.w; - - if (options$$1.series) { - if (options$$1.series[0].data) { - options$$1.series = options$$1.series.map(function (s, i) { - return _objectSpread({}, w.config.series[i], { - name: s.name ? s.name : w.config.series[i] && w.config.series[i].name, - type: s.type ? s.type : w.config.series[i] && w.config.series[i].type, - data: s.data ? s.data : w.config.series[i] && w.config.series[i].data - }); - }); - } // user updated the series via updateOptions() function. - // Hence, we need to reset axis min/max to avoid zooming issues - - - this.revertDefaultAxisMinMax(); - } // user has set x-axis min/max externally - hence we need to forcefully set the xaxis min/max - - - if (options$$1.xaxis) { - if (options$$1.xaxis.min || options$$1.xaxis.max) { - this.forceXAxisUpdate(options$$1); - } - /* fixes apexcharts.js#369 and react-apexcharts#46 */ - - - if (options$$1.xaxis.categories && options$$1.xaxis.categories.length && w.config.xaxis.convertedCatToNumeric) { - options$$1 = Defaults.convertCatToNumeric(options$$1); - } - } - - if (w.globals.collapsedSeriesIndices.length > 0) { - this.clearPreviousPaths(); - } - /* update theme mode#459 */ - - - if (options$$1.theme) { - options$$1 = this.theme.updateThemeOptions(options$$1); - } - - return this._updateOptions(options$$1, redraw, animate, overwriteInitialConfig); - } - /** - * private method to update Options. - * - * @param {object} options - A new config object can be passed which will be merged with the existing config object - * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there - * @param {boolean} animate - should animate or not on updating Options - * @param {boolean} overwriteInitialConfig - should update the initial config or not - */ - - }, { - key: "_updateOptions", - value: function _updateOptions(options$$1) { - var redraw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var animate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var overwriteInitialConfig = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - var charts = this.getSyncedCharts(); - charts.forEach(function (ch) { - var w = ch.w; - w.globals.shouldAnimate = animate; - - if (!redraw) { - w.globals.resized = true; - w.globals.dataChanged = true; - - if (animate) { - ch.series.getPreviousPaths(); - } - } - - if (options$$1 && _typeof(options$$1) === 'object') { - ch.config = new Config(options$$1); - options$$1 = CoreUtils.extendArrayProps(ch.config, options$$1); - w.config = Utils.extend(w.config, options$$1); - - if (overwriteInitialConfig) { - // we need to forget the lastXAxis and lastYAxis is user forcefully overwriteInitialConfig. If we do not do this, and next time when user zooms the chart after setting yaxis.min/max or xaxis.min/max - the stored lastXAxis will never allow the chart to use the updated min/max by user. - w.globals.lastXAxis = []; - w.globals.lastYAxis = []; // After forgetting lastAxes, we need to restore the new config in initialConfig/initialSeries - - w.globals.initialConfig = Utils.extend({}, w.config); - w.globals.initialSeries = JSON.parse(JSON.stringify(w.config.series)); - } - } - - return ch.update(options$$1); - }); - } - /** - * Allows users to update Series after the chart has rendered. - * - * @param {array} series - New series which will override the existing - */ - - }, { - key: "updateSeries", - value: function updateSeries() { - var newSeries = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - this.revertDefaultAxisMinMax(); - return this._updateSeries(newSeries, animate, overwriteInitialSeries); - } - /** - * Allows users to append a new series after the chart has rendered. - * - * @param {array} newSerie - New serie which will be appended to the existing series - */ - - }, { - key: "appendSeries", - value: function appendSeries(newSerie) { - var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var newSeries = this.w.config.series.slice(); - newSeries.push(newSerie); - this.revertDefaultAxisMinMax(); - return this._updateSeries(newSeries, animate, overwriteInitialSeries); - } - /** - * Private method to update Series. - * - * @param {array} series - New series which will override the existing - */ - - }, { - key: "_updateSeries", - value: function _updateSeries(newSeries, animate) { - var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var w = this.w; - this.w.globals.shouldAnimate = animate; - w.globals.dataChanged = true; // if user has collapsed some series with legend, we need to clear those - - if (w.globals.allSeriesCollapsed) { - w.globals.allSeriesCollapsed = false; - } - - if (animate) { - this.series.getPreviousPaths(); - } - - var existingSeries; // axis charts - - if (w.globals.axisCharts) { - existingSeries = newSeries.map(function (s, i) { - return _objectSpread({}, w.config.series[i], { - name: s.name ? s.name : w.config.series[i] && w.config.series[i].name, - type: s.type ? s.type : w.config.series[i] && w.config.series[i].type, - data: s.data ? s.data : w.config.series[i] && w.config.series[i].data - }); - }); - - if (existingSeries.length === 0) { - existingSeries = [{ - data: [] - }]; - } - - w.config.series = existingSeries; - } else { - // non-axis chart (pie/radialbar) - w.config.series = newSeries.slice(); - } - - if (overwriteInitialSeries) { - w.globals.initialConfig.series = JSON.parse(JSON.stringify(w.config.series)); - w.globals.initialSeries = JSON.parse(JSON.stringify(w.config.series)); - } - - return this.update(); - } - /** - * Get all charts in the same "group" (including the instance which is called upon) to sync them when user zooms in/out or pan. - */ - - }, { - key: "getSyncedCharts", - value: function getSyncedCharts() { - var chartGroups = this.getGroupedCharts(); - var allCharts = [this]; - - if (chartGroups.length) { - allCharts = []; - chartGroups.forEach(function (ch) { - allCharts.push(ch); - }); - } - - return allCharts; - } - /** - * Get charts in the same "group" (excluding the instance which is called upon) to perform operations on the other charts of the same group (eg., tooltip hovering) - */ - - }, { - key: "getGroupedCharts", - value: function getGroupedCharts() { - var _this2 = this; - - return Apex._chartInstances.filter(function (ch) { - if (ch.group) { - return true; - } - }).map(function (ch) { - return _this2.w.config.chart.group === ch.group ? ch.chart : _this2; - }); - } - /** - * Allows users to append Data to series. - * - * @param {array} newData - New data in the same format as series - */ - - }, { - key: "appendData", - value: function appendData(newData) { - var overwriteInitialSeries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var me = this; - me.w.globals.dataChanged = true; - me.series.getPreviousPaths(); - var newSeries = me.w.config.series.slice(); - - for (var i = 0; i < newSeries.length; i++) { - if (typeof newData[i] !== 'undefined') { - for (var j = 0; j < newData[i].data.length; j++) { - newSeries[i].data.push(newData[i].data[j]); - } - } - } - - me.w.config.series = newSeries; - - if (overwriteInitialSeries) { - me.w.globals.initialSeries = JSON.parse(JSON.stringify(me.w.config.series)); - } - - return this.update(); - } - }, { - key: "update", - value: function update(options$$1) { - var _this3 = this; - - return new Promise$1(function (resolve, reject) { - _this3.clear(); - - var graphData = _this3.create(_this3.w.config.series, options$$1); - - if (!graphData) return resolve(_this3); - - _this3.mount(graphData).then(function () { - if (typeof _this3.w.config.chart.events.updated === 'function') { - _this3.w.config.chart.events.updated(_this3, _this3.w); - } - - _this3.fireEvent('updated', [_this3, _this3.w]); - - _this3.w.globals.isDirty = true; - resolve(_this3); - }).catch(function (e) { - reject(e); - }); - }); - } - }, { - key: "forceXAxisUpdate", - value: function forceXAxisUpdate(options$$1) { - var w = this.w; - - if (typeof options$$1.xaxis.min !== 'undefined') { - w.config.xaxis.min = options$$1.xaxis.min; - w.globals.lastXAxis.min = options$$1.xaxis.min; - } - - if (typeof options$$1.xaxis.max !== 'undefined') { - w.config.xaxis.max = options$$1.xaxis.max; - w.globals.lastXAxis.max = options$$1.xaxis.max; - } - } - /** - * This function reverts the yaxis and xaxis min/max values to what it was when the chart was defined. - * This function fixes an important bug where a user might load a new series after zooming in/out of previous series which resulted in wrong min/max - * Also, this should never be called internally on zoom/pan - the reset should only happen when user calls the updateSeries() function externally - */ - - }, { - key: "revertDefaultAxisMinMax", - value: function revertDefaultAxisMinMax() { - var w = this.w; - w.config.xaxis.min = w.globals.lastXAxis.min; - w.config.xaxis.max = w.globals.lastXAxis.max; - w.config.yaxis.map(function (yaxe, index) { - if (w.globals.zoomed) { - // if user has zoomed, and this function is called - // then we need to get the lastAxis min and max - if (typeof w.globals.lastYAxis[index] !== 'undefined') { - yaxe.min = w.globals.lastYAxis[index].min; - yaxe.max = w.globals.lastYAxis[index].max; - } - } - }); - } - }, { - key: "clear", - value: function clear() { - if (this.zoomPanSelection) { - this.zoomPanSelection.destroy(); - } - - if (this.toolbar) { - this.toolbar.destroy(); - } - - this.animations = null; - this.annotations = null; - this.core = null; - this.grid = null; - this.series = null; - this.responsive = null; - this.theme = null; - this.formatters = null; - this.titleSubtitle = null; - this.legend = null; - this.dimensions = null; - this.options = null; - this.crosshairs = null; - this.zoomPanSelection = null; - this.toolbar = null; - this.w.globals.tooltip = null; - this.clearDomElements(); - } - }, { - key: "killSVG", - value: function killSVG(draw) { - return new Promise$1(function (resolve, reject) { - draw.each(function (i, children) { - this.removeClass('*'); - this.off(); - this.stop(); - }, true); - draw.ungroup(); - draw.clear(); - resolve('done'); - }); - } - }, { - key: "clearDomElements", - value: function clearDomElements() { - var domEls = this.w.globals.dom; - - if (this.el !== null) { - // remove all child elements - resetting the whole chart - while (this.el.firstChild) { - this.el.removeChild(this.el.firstChild); - } - } - - this.killSVG(domEls.Paper); - domEls.Paper.remove(); - domEls.elWrap = null; - domEls.elGraphical = null; - domEls.elLegendWrap = null; - domEls.baseEl = null; - domEls.elGridRect = null; - domEls.elGridRectMask = null; - domEls.elGridRectMarkerMask = null; - domEls.elDefs = null; - } - /** - * Destroy the chart instance by removing all elements which also clean up event listeners on those elements. - */ - - }, { - key: "destroy", - value: function destroy() { - this.clear(); // remove the chart's instance from the global Apex._chartInstances - - var chartID = this.w.config.chart.id; - - if (chartID) { - Apex._chartInstances.forEach(function (c, i) { - if (c.id === chartID) { - Apex._chartInstances.splice(i, 1); - } - }); - } - - window.removeEventListener('resize', this.windowResizeHandler); - window.removeResizeListener(this.el.parentNode, this.parentResizeCallback.bind(this)); - } - /** - * Allows the user to provide data attrs in the element and the chart will render automatically when this method is called by searching for the elements containing 'data-apexcharts' attribute - */ - - }, { - key: "toggleSeries", - value: function toggleSeries(seriesName) { - var targetElement = this.series.getSeriesByName(seriesName); - var seriesCnt = parseInt(targetElement.getAttribute('data:realIndex')); - var isHidden = targetElement.classList.contains('apexcharts-series-collapsed'); - this.legend.toggleDataSeries(seriesCnt, isHidden); - } - }, { - key: "resetToggleSeries", - value: function resetToggleSeries() { - this.legend.resetToggleDataSeries(); - } - }, { - key: "setupEventHandlers", - value: function setupEventHandlers() { - var w = this.w; - var me = this; - var clickableArea = w.globals.dom.baseEl.querySelector(w.globals.chartClass); - var eventList = ['mousedown', 'mousemove', 'touchstart', 'touchmove', 'mouseup', 'touchend']; - eventList.forEach(function (event) { - clickableArea.addEventListener(event, function (e) { - if (e.type === 'mousedown' && e.which === 1) ; else if (e.type === 'mouseup' && e.which === 1 || e.type === 'touchend') { - if (typeof w.config.chart.events.click === 'function') { - w.config.chart.events.click(e, me, w); - } - - me.fireEvent('click', [e, me, w]); - } - }, { - capture: false, - passive: true - }); - }); - eventList.forEach(function (event) { - document.addEventListener(event, function (e) { - w.globals.clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; - w.globals.clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY; - }); - }); - this.core.setupBrushHandler(); - } - }, { - key: "addXaxisAnnotation", - value: function addXaxisAnnotation(opts) { - var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.addXaxisAnnotationExternal(opts, pushToMemory, me); - } - }, { - key: "addYaxisAnnotation", - value: function addYaxisAnnotation(opts) { - var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.addYaxisAnnotationExternal(opts, pushToMemory, me); - } - }, { - key: "addPointAnnotation", - value: function addPointAnnotation(opts) { - var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.addPointAnnotationExternal(opts, pushToMemory, me); - } - }, { - key: "clearAnnotations", - value: function clearAnnotations() { - var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.clearAnnotations(me); - } // This method is never used internally and will be only called externally on the chart instance. - // Hence, we need to keep all these elements in memory when the chart gets updated and redraw again - - }, { - key: "addText", - value: function addText(options$$1) { - var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.addText(options$$1, pushToMemory, me); - } - }, { - key: "getChartArea", - value: function getChartArea() { - var el = this.w.globals.dom.baseEl.querySelector('.apexcharts-inner'); - return el; - } - }, { - key: "getSeriesTotalXRange", - value: function getSeriesTotalXRange(minX, maxX) { - return this.coreUtils.getSeriesTotalsXRange(minX, maxX); - } - }, { - key: "getHighestValueInSeries", - value: function getHighestValueInSeries() { - var seriesIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - var range = new Range$1(this.ctx); - var minYmaxY = range.getMinYMaxY(seriesIndex); - return minYmaxY.highestY; - } - }, { - key: "getLowestValueInSeries", - value: function getLowestValueInSeries() { - var seriesIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - var range = new Range$1(this.ctx); - var minYmaxY = range.getMinYMaxY(seriesIndex); - return minYmaxY.lowestY; - } - }, { - key: "getSeriesTotal", - value: function getSeriesTotal() { - return this.w.globals.seriesTotals; - } - }, { - key: "setLocale", - value: function setLocale(localeName) { - this.setCurrentLocaleValues(localeName); - } - }, { - key: "setCurrentLocaleValues", - value: function setCurrentLocaleValues(localeName) { - var locales = this.w.config.chart.locales; // check if user has specified locales in global Apex variable - // if yes - then extend those with local chart's locale - - if (window.Apex.chart && window.Apex.chart.locales && window.Apex.chart.locales.length > 0) { - locales = this.w.config.chart.locales.concat(window.Apex.chart.locales); - } // find the locale from the array of locales which user has set (either by chart.defaultLocale or by calling setLocale() method.) - - - var selectedLocale = locales.filter(function (c) { - return c.name === localeName; - })[0]; - - if (selectedLocale) { - // create a complete locale object by extending defaults so you don't get undefined errors. - var ret = Utils.extend(en, selectedLocale); // store these locale options in global var for ease access - - this.w.globals.locale = ret.options; - } else { - throw new Error('Wrong locale name provided. Please make sure you set the correct locale name in options'); - } - } - }, { - key: "dataURI", - value: function dataURI() { - var exp = new Exports(this.ctx); - return exp.dataURI(); - } - }, { - key: "paper", - value: function paper() { - return this.w.globals.dom.Paper; - } - }, { - key: "parentResizeCallback", - value: function parentResizeCallback() { - if (this.w.globals.animationEnded) { - this.windowResize(); - } - } - /** - * Handle window resize and re-draw the whole chart. - */ - - }, { - key: "windowResize", - value: function windowResize() { - var _this4 = this; - - clearTimeout(this.w.globals.resizeTimer); - this.w.globals.resizeTimer = window.setTimeout(function () { - _this4.w.globals.resized = true; - _this4.w.globals.dataChanged = false; // we need to redraw the whole chart on window resize (with a small delay). - - _this4.update(); - }, 150); - } - }], [{ - key: "initOnLoad", - value: function initOnLoad() { - var els = document.querySelectorAll('[data-apexcharts]'); - - for (var i = 0; i < els.length; i++) { - var el = els[i]; - var options$$1 = JSON.parse(els[i].getAttribute('data-options')); - var apexChart = new ApexCharts(el, options$$1); - apexChart.render(); - } - } - /** - * This static method allows users to call chart methods without necessarily from the - * instance of the chart in case user has assigned chartID to the targetted chart. - * The chartID is used for mapping the instance stored in Apex._chartInstances global variable - * - * This is helpful in cases when you don't have reference of the chart instance - * easily and need to call the method from anywhere. - * For eg, in React/Vue applications when you have many parent/child components, - * and need easy reference to other charts for performing dynamic operations - * - * @param {string} chartID - The unique identifier which will be used to call methods - * on that chart instance - * @param {function} fn - The method name to call - * @param {object} opts - The parameters which are accepted in the original method will be passed here in the same order. - */ - - }, { - key: "exec", - value: function exec(chartID, fn) { - var chart = this.getChartByID(chartID); - if (!chart) return; - - for (var _len = arguments.length, opts = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - opts[_key - 2] = arguments[_key]; - } - - switch (fn) { - case 'updateOptions': - { - return chart.updateOptions.apply(chart, opts); - } - - case 'updateSeries': - { - return chart.updateSeries.apply(chart, opts); - } - - case 'appendData': - { - return chart.appendData.apply(chart, opts); - } - - case 'appendSeries': - { - return chart.appendSeries.apply(chart, opts); - } - - case 'toggleSeries': - { - return chart.toggleSeries.apply(chart, opts); - } - - case 'dataURI': - { - return chart.dataURI.apply(chart, opts); - } - - case 'addXaxisAnnotation': - { - return chart.addXaxisAnnotation.apply(chart, opts); - } - - case 'addYaxisAnnotation': - { - return chart.addYaxisAnnotation.apply(chart, opts); - } - - case 'addPointAnnotation': - { - return chart.addPointAnnotation.apply(chart, opts); - } - - case 'addText': - { - return chart.addText.apply(chart, opts); - } - - case 'clearAnnotations': - { - return chart.clearAnnotations.apply(chart, opts); - } - - case 'paper': - { - return chart.paper.apply(chart, opts); - } - - case 'destroy': - { - return chart.destroy(); - } - } - } - }, { - key: "merge", - value: function merge(target, source) { - return Utils.extend(target, source); - } - }, { - key: "getChartByID", - value: function getChartByID(chartID) { - var c = Apex._chartInstances.filter(function (ch) { - return ch.id === chartID; - })[0]; - - return c.chart; - } - }]); - - return ApexCharts; -}(); - -export default ApexCharts$1; diff --git a/static/libs/apexcharts/apexcharts.js b/static/libs/apexcharts/apexcharts.js deleted file mode 100644 index fb27a20c6..000000000 --- a/static/libs/apexcharts/apexcharts.js +++ /dev/null @@ -1,28689 +0,0 @@ -/*! - * ApexCharts v3.6.12 - * (c) 2018-2019 Juned Chhipa - * Released under the MIT License. - */ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = global || self, global.ApexCharts = factory()); -}(this, function () { 'use strict'; - - function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; - } - - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - } - - function _objectSpread(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - var ownKeys = Object.keys(source); - - if (typeof Object.getOwnPropertySymbols === 'function') { - ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { - return Object.getOwnPropertyDescriptor(source, sym).enumerable; - })); - } - - ownKeys.forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } - - return target; - } - - function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function"); - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - writable: true, - configurable: true - } - }); - if (superClass) _setPrototypeOf(subClass, superClass); - } - - function _getPrototypeOf(o) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { - return o.__proto__ || Object.getPrototypeOf(o); - }; - return _getPrototypeOf(o); - } - - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; - - return _setPrototypeOf(o, p); - } - - function _assertThisInitialized(self) { - if (self === void 0) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return self; - } - - function _possibleConstructorReturn(self, call) { - if (call && (typeof call === "object" || typeof call === "function")) { - return call; - } - - return _assertThisInitialized(self); - } - - function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); - } - - function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } - } - - function _iterableToArray(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); - } - - function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); - } - - /* - ** Generic functions which are not dependent on ApexCharts - */ - var Utils = - /*#__PURE__*/ - function () { - function Utils() { - _classCallCheck(this, Utils); - } - - _createClass(Utils, [{ - key: "shadeRGBColor", - value: function shadeRGBColor(percent, color) { - var f = color.split(','), - t = percent < 0 ? 0 : 255, - p = percent < 0 ? percent * -1 : percent, - R = parseInt(f[0].slice(4)), - G = parseInt(f[1]), - B = parseInt(f[2]); - return 'rgb(' + (Math.round((t - R) * p) + R) + ',' + (Math.round((t - G) * p) + G) + ',' + (Math.round((t - B) * p) + B) + ')'; - } - }, { - key: "shadeHexColor", - value: function shadeHexColor(percent, color) { - var f = parseInt(color.slice(1), 16), - t = percent < 0 ? 0 : 255, - p = percent < 0 ? percent * -1 : percent, - R = f >> 16, - G = f >> 8 & 0x00ff, - B = f & 0x0000ff; - return '#' + (0x1000000 + (Math.round((t - R) * p) + R) * 0x10000 + (Math.round((t - G) * p) + G) * 0x100 + (Math.round((t - B) * p) + B)).toString(16).slice(1); - } // beautiful color shading blending code - // http://stackoverflow.com/questions/5560248/programmatically-lighten-or-darken-a-hex-color-or-rgb-and-blend-colors - - }, { - key: "shadeColor", - value: function shadeColor(p, color) { - if (color.length > 7) return this.shadeRGBColor(p, color);else return this.shadeHexColor(p, color); - } - }], [{ - key: "bind", - value: function bind(fn, me) { - return function () { - return fn.apply(me, arguments); - }; - } - }, { - key: "isObject", - value: function isObject(item) { - return item && _typeof(item) === 'object' && !Array.isArray(item) && item != null; - } - }, { - key: "listToArray", - value: function listToArray(list) { - var i, - array = []; - - for (i = 0; i < list.length; i++) { - array[i] = list[i]; - } - - return array; - } // to extend defaults with user options - // credit: http://stackoverflow.com/questions/27936772/deep-object-merging-in-es6-es7#answer-34749873 - - }, { - key: "extend", - value: function extend(target, source) { - var _this = this; - - if (typeof Object.assign !== 'function') { - - (function () { - Object.assign = function (target) { - - if (target === undefined || target === null) { - throw new TypeError('Cannot convert undefined or null to object'); - } - - var output = Object(target); - - for (var index = 1; index < arguments.length; index++) { - var _source = arguments[index]; - - if (_source !== undefined && _source !== null) { - for (var nextKey in _source) { - if (_source.hasOwnProperty(nextKey)) { - output[nextKey] = _source[nextKey]; - } - } - } - } - - return output; - }; - })(); - } - - var output = Object.assign({}, target); - - if (this.isObject(target) && this.isObject(source)) { - Object.keys(source).forEach(function (key) { - if (_this.isObject(source[key])) { - if (!(key in target)) { - Object.assign(output, _defineProperty({}, key, source[key])); - } else { - output[key] = _this.extend(target[key], source[key]); - } - } else { - Object.assign(output, _defineProperty({}, key, source[key])); - } - }); - } - - return output; - } - }, { - key: "extendArray", - value: function extendArray(arrToExtend, resultArr) { - var extendedArr = []; - arrToExtend.map(function (item) { - extendedArr.push(Utils.extend(resultArr, item)); - }); - arrToExtend = extendedArr; - return arrToExtend; - } // If month counter exceeds 12, it starts again from 1 - - }, { - key: "monthMod", - value: function monthMod(month) { - return month % 12; - } - }, { - key: "addProps", - value: function addProps(obj, arr, val) { - if (typeof arr === 'string') { - arr = arr.split('.'); - } - - obj[arr[0]] = obj[arr[0]] || {}; - var tmpObj = obj[arr[0]]; - - if (arr.length > 1) { - arr.shift(); - this.addProps(tmpObj, arr, val); - } else { - obj[arr[0]] = val; - } - - return obj; - } - }, { - key: "clone", - value: function clone(source) { - if (Object.prototype.toString.call(source) === '[object Array]') { - var cloneResult = []; - - for (var i = 0; i < source.length; i++) { - cloneResult[i] = this.clone(source[i]); - } - - return cloneResult; - } else if (_typeof(source) === 'object') { - var _cloneResult = {}; - - for (var prop in source) { - if (source.hasOwnProperty(prop)) { - _cloneResult[prop] = this.clone(source[prop]); - } - } - - return _cloneResult; - } else { - return source; - } - } - }, { - key: "log10", - value: function log10(x) { - return Math.log(x) / Math.LN10; - } - }, { - key: "roundToBase10", - value: function roundToBase10(x) { - return Math.pow(10, Math.floor(Math.log10(x))); - } - }, { - key: "roundToBase", - value: function roundToBase(x, base) { - return Math.pow(base, Math.floor(Math.log(x) / Math.log(base))); - } - }, { - key: "parseNumber", - value: function parseNumber(val) { - if (val === null) return val; - return parseFloat(val); - } - }, { - key: "noExponents", - value: function noExponents(val) { - var data = String(val).split(/[eE]/); - if (data.length == 1) return data[0]; - var z = '', - sign = val < 0 ? '-' : '', - str = data[0].replace('.', ''), - mag = Number(data[1]) + 1; - - if (mag < 0) { - z = sign + '0.'; - - while (mag++) { - z += '0'; - } - - return z + str.replace(/^\-/, ''); - } - - mag -= str.length; - - while (mag--) { - z += '0'; - } - - return str + z; - } - }, { - key: "getDimensions", - value: function getDimensions(el) { - var computedStyle = getComputedStyle(el); - var ret = []; - var elementHeight = el.clientHeight; - var elementWidth = el.clientWidth; - elementHeight -= parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom); - elementWidth -= parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight); - ret.push(elementWidth); - ret.push(elementHeight); - return ret; - } - }, { - key: "getBoundingClientRect", - value: function getBoundingClientRect(element) { - var rect = element.getBoundingClientRect(); - return { - top: rect.top, - right: rect.right, - bottom: rect.bottom, - left: rect.left, - width: rect.width, - height: rect.height, - x: rect.x, - y: rect.y - }; - } // http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb#answer-12342275 - - }, { - key: "hexToRgba", - value: function hexToRgba() { - var hex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '#999999'; - var opacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.6; - - if (hex.substring(0, 1) !== '#') { - hex = '#999999'; - } - - var h = hex.replace('#', ''); - h = h.match(new RegExp('(.{' + h.length / 3 + '})', 'g')); - - for (var i = 0; i < h.length; i++) { - h[i] = parseInt(h[i].length === 1 ? h[i] + h[i] : h[i], 16); - } - - if (typeof opacity !== 'undefined') h.push(opacity); - return 'rgba(' + h.join(',') + ')'; - } - }, { - key: "getOpacityFromRGBA", - value: function getOpacityFromRGBA(rgba) { - rgba = rgba.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i); - return rgba[3]; - } - }, { - key: "rgb2hex", - value: function rgb2hex(rgb) { - rgb = rgb.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i); - return rgb && rgb.length === 4 ? '#' + ('0' + parseInt(rgb[1], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[2], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[3], 10).toString(16)).slice(-2) : ''; - } - }, { - key: "isColorHex", - value: function isColorHex(color) { - return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(color); - } - }, { - key: "polarToCartesian", - value: function polarToCartesian(centerX, centerY, radius, angleInDegrees) { - var angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0; - return { - x: centerX + radius * Math.cos(angleInRadians), - y: centerY + radius * Math.sin(angleInRadians) - }; - } - }, { - key: "escapeString", - value: function escapeString(str) { - var escapeWith = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x'; - var newStr = str.toString().slice(); - newStr = newStr.replace(/[` ~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, escapeWith); - return newStr; - } - }, { - key: "negToZero", - value: function negToZero(val) { - return val < 0 ? 0 : val; - } - }, { - key: "moveIndexInArray", - value: function moveIndexInArray(arr, old_index, new_index) { - if (new_index >= arr.length) { - var k = new_index - arr.length + 1; - - while (k--) { - arr.push(undefined); - } - } - - arr.splice(new_index, 0, arr.splice(old_index, 1)[0]); - return arr; - } - }, { - key: "extractNumber", - value: function extractNumber(s) { - return parseFloat(s.replace(/[^\d\.]*/g, '')); - } - }, { - key: "randomString", - value: function randomString(len) { - var text = ''; - var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; - - for (var i = 0; i < len; i++) { - text += possible.charAt(Math.floor(Math.random() * possible.length)); - } - - return text; - } - }, { - key: "findAncestor", - value: function findAncestor(el, cls) { - while ((el = el.parentElement) && !el.classList.contains(cls)) { - } - - return el; - } - }, { - key: "setELstyles", - value: function setELstyles(el, styles) { - for (var key in styles) { - if (styles.hasOwnProperty(key)) { - el.style.key = styles[key]; - } - } - } - }, { - key: "isNumber", - value: function isNumber(value) { - return !isNaN(value) && parseFloat(Number(value)) === value && !isNaN(parseInt(value, 10)); - } - }, { - key: "isFloat", - value: function isFloat(n) { - return Number(n) === n && n % 1 !== 0; - } - }, { - key: "isSafari", - value: function isSafari() { - return /^((?!chrome|android).)*safari/i.test(navigator.userAgent); - } - }, { - key: "isFirefox", - value: function isFirefox() { - return navigator.userAgent.toLowerCase().indexOf('firefox') > -1; - } - }, { - key: "isIE11", - value: function isIE11() { - if (window.navigator.userAgent.indexOf('MSIE') !== -1 || window.navigator.appVersion.indexOf('Trident/') > -1) { - return true; - } - } - }, { - key: "isIE", - value: function isIE() { - var ua = window.navigator.userAgent; - var msie = ua.indexOf('MSIE '); - - if (msie > 0) { - // IE 10 or older => return version number - return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); - } - - var trident = ua.indexOf('Trident/'); - - if (trident > 0) { - // IE 11 => return version number - var rv = ua.indexOf('rv:'); - return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); - } - - var edge = ua.indexOf('Edge/'); - - if (edge > 0) { - // Edge (IE 12+) => return version number - return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); - } // other browser - - - return false; - } - }]); - - return Utils; - }(); - - /** - * ApexCharts Filters Class for setting hover/active states on the paths. - * - * @module Formatters - **/ - - var Filters = - /*#__PURE__*/ - function () { - function Filters(ctx) { - _classCallCheck(this, Filters); - - this.ctx = ctx; - this.w = ctx.w; - } // create a re-usable filter which can be appended other filter effects and applied to multiple elements - - - _createClass(Filters, [{ - key: "getDefaultFilter", - value: function getDefaultFilter(el, i) { - var w = this.w; - el.unfilter(true); - var filter = new window.SVG.Filter(); - filter.size('120%', '180%', '-5%', '-40%'); - - if (w.config.states.normal.filter !== 'none') { - this.applyFilter(el, i, w.config.states.normal.filter.type, w.config.states.normal.filter.value); - } else { - if (w.config.chart.dropShadow.enabled) { - this.dropShadow(el, w.config.chart.dropShadow, i); - } - } - } - }, { - key: "addNormalFilter", - value: function addNormalFilter(el, i) { - var w = this.w; - - if (w.config.chart.dropShadow.enabled) { - this.dropShadow(el, w.config.chart.dropShadow, i); - } - } // appends dropShadow to the filter object which can be chained with other filter effects - - }, { - key: "addLightenFilter", - value: function addLightenFilter(el, i, attrs) { - var _this = this; - - var w = this.w; - var intensity = attrs.intensity; - - if (Utils.isFirefox()) { - return; - } - - el.unfilter(true); - var filter = new window.SVG.Filter(); - filter.size('120%', '180%', '-5%', '-40%'); - el.filter(function (add) { - var shadowAttr = w.config.chart.dropShadow; - - if (shadowAttr.enabled) { - filter = _this.addShadow(add, i, shadowAttr); - } else { - filter = add; - } - - filter.componentTransfer({ - rgb: { - type: 'linear', - slope: 1.5, - intercept: intensity - } - }); - }); - el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); - } // appends dropShadow to the filter object which can be chained with other filter effects - - }, { - key: "addDarkenFilter", - value: function addDarkenFilter(el, i, attrs) { - var _this2 = this; - - var w = this.w; - var intensity = attrs.intensity; - - if (Utils.isFirefox()) { - return; - } - - el.unfilter(true); - var filter = new window.SVG.Filter(); - filter.size('120%', '180%', '-5%', '-40%'); - el.filter(function (add) { - var shadowAttr = w.config.chart.dropShadow; - - if (shadowAttr.enabled) { - filter = _this2.addShadow(add, i, shadowAttr); - } else { - filter = add; - } - - filter.componentTransfer({ - rgb: { - type: 'linear', - slope: intensity - } - }); - }); - el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); - } - }, { - key: "applyFilter", - value: function applyFilter(el, i, filter) { - var intensity = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.5; - - switch (filter) { - case 'none': - { - this.addNormalFilter(el, i); - break; - } - - case 'lighten': - { - this.addLightenFilter(el, i, { - intensity: intensity - }); - break; - } - - case 'darken': - { - this.addDarkenFilter(el, i, { - intensity: intensity - }); - break; - } - - default: - // do nothing - break; - } - } // appends dropShadow to the filter object which can be chained with other filter effects - - }, { - key: "addShadow", - value: function addShadow(add, i, attrs) { - var blur = attrs.blur, - top = attrs.top, - left = attrs.left, - color = attrs.color, - opacity = attrs.opacity; - var shadowBlur = add.flood(Array.isArray(color) ? color[i] : color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source); - return add.blend(add.source, shadowBlur); - } // directly adds dropShadow to the element and returns the same element. - // the only way it is different from the addShadow() function is that addShadow is chainable to other filters, while this function discards all filters and add dropShadow - - }, { - key: "dropShadow", - value: function dropShadow(el, attrs) { - var i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - var top = attrs.top, - left = attrs.left, - blur = attrs.blur, - color = attrs.color, - opacity = attrs.opacity, - noUserSpaceOnUse = attrs.noUserSpaceOnUse; - el.unfilter(true); - color = Array.isArray(color) ? color[i] : color; - var filter = new window.SVG.Filter(); - filter.size('120%', '180%', '-5%', '-40%'); - el.filter(function (add) { - var shadowBlur = null; - - if (Utils.isSafari() || Utils.isFirefox() || Utils.isIE()) { - // safari/firefox has some alternative way to use this filter - shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur); - } else { - shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source); - } - - add.blend(add.source, shadowBlur); - }); - - if (!noUserSpaceOnUse) { - el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); - } - - return el; - } - }, { - key: "setSelectionFilter", - value: function setSelectionFilter(el, realIndex, dataPointIndex) { - var w = this.w; - - if (typeof w.globals.selectedDataPoints[realIndex] !== 'undefined') { - if (w.globals.selectedDataPoints[realIndex].indexOf(dataPointIndex) > -1) { - el.node.setAttribute('selected', true); - var activeFilter = w.config.states.active.filter; - - if (activeFilter !== 'none') { - this.applyFilter(el, realIndex, activeFilter.type, activeFilter.value); - } - } - } - } - }]); - - return Filters; - }(); - - /** - * ApexCharts Animation Class. - * - * @module Animations - **/ - - var Animations = - /*#__PURE__*/ - function () { - function Animations(ctx) { - _classCallCheck(this, Animations); - - this.ctx = ctx; - this.w = ctx.w; - this.setEasingFunctions(); - } - - _createClass(Animations, [{ - key: "setEasingFunctions", - value: function setEasingFunctions() { - var easing; - var userDefinedEasing = this.w.config.chart.animations.easing; - - switch (userDefinedEasing) { - case 'linear': - { - easing = '-'; - break; - } - - case 'easein': - { - easing = '<'; - break; - } - - case 'easeout': - { - easing = '>'; - break; - } - - case 'easeinout': - { - easing = '<>'; - break; - } - - case 'swing': - { - easing = function easing(pos) { - var s = 1.70158; - return (pos -= 1) * pos * ((s + 1) * pos + s) + 1; - }; - - break; - } - - case 'bounce': - { - easing = function easing(pos) { - if (pos < 1 / 2.75) { - return 7.5625 * pos * pos; - } else if (pos < 2 / 2.75) { - return 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75; - } else if (pos < 2.5 / 2.75) { - return 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375; - } else { - return 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375; - } - }; - - break; - } - - case 'elastic': - { - easing = function easing(pos) { - if (pos === !!pos) return pos; - return Math.pow(2, -10 * pos) * Math.sin((pos - 0.075) * (2 * Math.PI) / 0.3) + 1; - }; - - break; - } - - default: - { - easing = '<>'; - } - } - - this.w.globals.easing = easing; - } - }, { - key: "animateLine", - value: function animateLine(el, from, to, speed) { - el.attr(from).animate(speed).attr(to); - } - /* - ** Animate radius of a circle element - */ - - }, { - key: "animateCircleRadius", - value: function animateCircleRadius(el, from, to, speed, easing) { - if (!from) from = 0; - el.attr({ - r: from - }).animate(speed, easing).attr({ - r: to - }); - } - /* - ** Animate radius and position of a circle element - */ - - }, { - key: "animateCircle", - value: function animateCircle(el, from, to, speed, easing) { - el.attr({ - r: from.r, - cx: from.cx, - cy: from.cy - }).animate(speed, easing).attr({ - r: to.r, - cx: to.cx, - cy: to.cy - }); - } - /* - ** Animate rect properties - */ - - }, { - key: "animateRect", - value: function animateRect(el, from, to, speed, fn) { - el.attr(from).animate(speed).attr(to).afterAll(function () { - fn(); - }); - } - }, { - key: "animatePathsGradually", - value: function animatePathsGradually(params) { - var el = params.el, - j = params.j, - pathFrom = params.pathFrom, - pathTo = params.pathTo, - speed = params.speed, - delay = params.delay, - strokeWidth = params.strokeWidth; - var me = this; - var w = this.w; - var delayFactor = 0; - - if (w.config.chart.animations.animateGradually.enabled) { - delayFactor = w.config.chart.animations.animateGradually.delay; - } - - if (w.config.chart.animations.dynamicAnimation.enabled && w.globals.dataChanged) { - delayFactor = 0; - } - - me.morphSVG(el, j, pathFrom, pathTo, speed, strokeWidth, delay * delayFactor); - } - }, { - key: "showDelayedElements", - value: function showDelayedElements() { - this.w.globals.delayedElements.forEach(function (d) { - var ele = d.el; - ele.classList.remove('hidden'); - }); - } // SVG.js animation for morphing one path to another - - }, { - key: "morphSVG", - value: function morphSVG(el, j, pathFrom, pathTo, speed, strokeWidth, delay) { - var _this = this; - - var w = this.w; - - if (!pathFrom) { - pathFrom = el.attr('pathFrom'); - } - - if (!pathTo) { - pathTo = el.attr('pathTo'); - } - - if (!pathFrom || pathFrom.indexOf('undefined') > -1 || pathFrom.indexOf('NaN') > -1) { - pathFrom = "M 0 ".concat(w.globals.gridHeight); - speed = 1; - } - - if (pathTo.indexOf('undefined') > -1 || pathTo.indexOf('NaN') > -1) { - pathTo = "M 0 ".concat(w.globals.gridHeight); - speed = 1; - } - - if (!w.globals.shouldAnimate) { - speed = 1; - } - - el.plot(pathFrom).animate(1, w.globals.easing, delay).plot(pathFrom).animate(speed, w.globals.easing, delay).plot(pathTo).afterAll(function () { - // a flag to indicate that the original mount function can return true now as animation finished here - if (Utils.isNumber(j)) { - if (j === w.globals.series[w.globals.maxValsInArrayIndex].length - 2 && w.globals.shouldAnimate) { - w.globals.animationEnded = true; - } - } else if (w.globals.shouldAnimate) { - w.globals.animationEnded = true; - - if (typeof w.config.chart.events.animationEnd === 'function') { - w.config.chart.events.animationEnd(_this.ctx, w); - } - } - - _this.showDelayedElements(); - }); - } - }]); - - return Animations; - }(); - - /** - * ApexCharts Graphics Class for all drawing operations. - * - * @module Graphics - **/ - - var Graphics = - /*#__PURE__*/ - function () { - function Graphics(ctx) { - _classCallCheck(this, Graphics); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Graphics, [{ - key: "drawLine", - value: function drawLine(x1, y1, x2, y2) { - var lineColor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '#a8a8a8'; - var dashArray = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; - var strokeWidth = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null; - var w = this.w; - var line = w.globals.dom.Paper.line().attr({ - x1: x1, - y1: y1, - x2: x2, - y2: y2, - stroke: lineColor, - 'stroke-dasharray': dashArray, - 'stroke-width': strokeWidth - }); - return line; - } - }, { - key: "drawRect", - value: function drawRect() { - var x1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - var y1 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - var x2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - var y2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; - var radius = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; - var color = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '#fefefe'; - var opacity = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 1; - var strokeWidth = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; - var strokeColor = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : null; - var strokeDashArray = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 0; - var w = this.w; - var rect = w.globals.dom.Paper.rect(); - rect.attr({ - x: x1, - y: y1, - width: x2 > 0 ? x2 : 0, - height: y2 > 0 ? y2 : 0, - rx: radius, - ry: radius, - fill: color, - opacity: opacity, - 'stroke-width': strokeWidth !== null ? strokeWidth : 0, - stroke: strokeColor !== null ? strokeColor : 'none', - 'stroke-dasharray': strokeDashArray - }); - return rect; - } - }, { - key: "drawPolygon", - value: function drawPolygon(polygonString) { - var stroke = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#e1e1e1'; - var fill = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'none'; - var w = this.w; - var polygon = w.globals.dom.Paper.polygon(polygonString).attr({ - fill: fill, - stroke: stroke - }); - return polygon; - } - }, { - key: "drawCircle", - value: function drawCircle(radius) { - var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var w = this.w; - var c = w.globals.dom.Paper.circle(radius * 2); - - if (attrs !== null) { - c.attr(attrs); - } - - return c; - } - }, { - key: "drawPath", - value: function drawPath(_ref) { - var _ref$d = _ref.d, - d = _ref$d === void 0 ? '' : _ref$d, - _ref$stroke = _ref.stroke, - stroke = _ref$stroke === void 0 ? '#a8a8a8' : _ref$stroke, - _ref$strokeWidth = _ref.strokeWidth, - strokeWidth = _ref$strokeWidth === void 0 ? 1 : _ref$strokeWidth, - fill = _ref.fill, - _ref$fillOpacity = _ref.fillOpacity, - fillOpacity = _ref$fillOpacity === void 0 ? 1 : _ref$fillOpacity, - _ref$strokeOpacity = _ref.strokeOpacity, - strokeOpacity = _ref$strokeOpacity === void 0 ? 1 : _ref$strokeOpacity, - classes = _ref.classes, - _ref$strokeLinecap = _ref.strokeLinecap, - strokeLinecap = _ref$strokeLinecap === void 0 ? null : _ref$strokeLinecap, - _ref$strokeDashArray = _ref.strokeDashArray, - strokeDashArray = _ref$strokeDashArray === void 0 ? 0 : _ref$strokeDashArray; - var w = this.w; - - if (strokeLinecap === null) { - strokeLinecap = w.config.stroke.lineCap; - } - - if (d.indexOf('undefined') > -1 || d.indexOf('NaN') > -1) { - d = "M 0 ".concat(w.globals.gridHeight); - } - - var p = w.globals.dom.Paper.path(d).attr({ - fill: fill, - 'fill-opacity': fillOpacity, - stroke: stroke, - 'stroke-opacity': strokeOpacity, - 'stroke-linecap': strokeLinecap, - 'stroke-width': strokeWidth, - 'stroke-dasharray': strokeDashArray, - class: classes - }); - return p; - } - }, { - key: "group", - value: function group() { - var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var w = this.w; - var g = w.globals.dom.Paper.group(); - - if (attrs !== null) { - g.attr(attrs); - } - - return g; - } - }, { - key: "move", - value: function move(x, y) { - var move = ['M', x, y].join(' '); - return move; - } - }, { - key: "line", - value: function line(x, y) { - var hORv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var line = null; - - if (hORv === null) { - line = ['L', x, y].join(' '); - } else if (hORv === 'H') { - line = ['H', x].join(' '); - } else if (hORv === 'V') { - line = ['V', y].join(' '); - } - - return line; - } - }, { - key: "curve", - value: function curve(x1, y1, x2, y2, x, y) { - var curve = ['C', x1, y1, x2, y2, x, y].join(' '); - return curve; - } - }, { - key: "quadraticCurve", - value: function quadraticCurve(x1, y1, x, y) { - var curve = ['Q', x1, y1, x, y].join(' '); - return curve; - } - }, { - key: "arc", - value: function arc(rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y) { - var relative = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false; - var coord = 'A'; - if (relative) coord = 'a'; - var arc = [coord, rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y].join(' '); - return arc; - } - /** - * @memberof Graphics - * @param {object} - * i = series's index - * realIndex = realIndex is series's actual index when it was drawn time. After several redraws, the iterating "i" may change in loops, but realIndex doesn't - * pathFrom = existing pathFrom to animateTo - * pathTo = new Path to which d attr will be animated from pathFrom to pathTo - * stroke = line Color - * strokeWidth = width of path Line - * fill = it can be gradient, single color, pattern or image - * animationDelay = how much to delay when starting animation (in milliseconds) - * dataChangeSpeed = for dynamic animations, when data changes - * className = class attribute to add - * @return {object} svg.js path object - **/ - - }, { - key: "renderPaths", - value: function renderPaths(_ref2) { - var i = _ref2.i, - j = _ref2.j, - realIndex = _ref2.realIndex, - pathFrom = _ref2.pathFrom, - pathTo = _ref2.pathTo, - stroke = _ref2.stroke, - strokeWidth = _ref2.strokeWidth, - strokeLinecap = _ref2.strokeLinecap, - fill = _ref2.fill, - animationDelay = _ref2.animationDelay, - initialSpeed = _ref2.initialSpeed, - dataChangeSpeed = _ref2.dataChangeSpeed, - className = _ref2.className, - id = _ref2.id, - _ref2$shouldClipToGri = _ref2.shouldClipToGrid, - shouldClipToGrid = _ref2$shouldClipToGri === void 0 ? true : _ref2$shouldClipToGri, - _ref2$bindEventsOnPat = _ref2.bindEventsOnPaths, - bindEventsOnPaths = _ref2$bindEventsOnPat === void 0 ? true : _ref2$bindEventsOnPat, - _ref2$drawShadow = _ref2.drawShadow, - drawShadow = _ref2$drawShadow === void 0 ? true : _ref2$drawShadow; - var w = this.w; - var filters = new Filters(this.ctx); - var anim = new Animations(this.ctx); - var initialAnim = this.w.config.chart.animations.enabled; - var dynamicAnim = initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; - var d; - var shouldAnimate = !!(initialAnim && !w.globals.resized || dynamicAnim && w.globals.dataChanged && w.globals.shouldAnimate); - - if (shouldAnimate) { - d = pathFrom; - } else { - d = pathTo; - this.w.globals.animationEnded = true; - } - - var strokeDashArrayOpt = w.config.stroke.dashArray; - var strokeDashArray = 0; - - if (Array.isArray(strokeDashArrayOpt)) { - strokeDashArray = strokeDashArrayOpt[realIndex]; - } else { - strokeDashArray = w.config.stroke.dashArray; - } - - var el = this.drawPath({ - d: d, - stroke: stroke, - strokeWidth: strokeWidth, - fill: fill, - fillOpacity: 1, - classes: className, - strokeLinecap: strokeLinecap, - strokeDashArray: strokeDashArray - }); - el.attr('id', "".concat(id, "-").concat(i)); - el.attr('index', realIndex); - - if (shouldClipToGrid) { - el.attr({ - 'clip-path': "url(#gridRectMask".concat(w.globals.cuid, ")") - }); - } // const defaultFilter = el.filterer - - - if (w.config.states.normal.filter.type !== 'none') { - filters.getDefaultFilter(el, realIndex); - } else { - if (w.config.chart.dropShadow.enabled && drawShadow) { - if (!w.config.chart.dropShadow.enabledSeries || w.config.chart.dropShadow.enabledSeries && w.config.chart.dropShadow.enabledSeries.indexOf(realIndex) !== -1) { - var shadow = w.config.chart.dropShadow; - filters.dropShadow(el, shadow, realIndex); - } - } - } - - if (bindEventsOnPaths) { - el.node.addEventListener('mouseenter', this.pathMouseEnter.bind(this, el)); - el.node.addEventListener('mouseleave', this.pathMouseLeave.bind(this, el)); - el.node.addEventListener('mousedown', this.pathMouseDown.bind(this, el)); - } - - el.attr({ - pathTo: pathTo, - pathFrom: pathFrom - }); - var defaultAnimateOpts = { - el: el, - j: j, - pathFrom: pathFrom, - pathTo: pathTo, - strokeWidth: strokeWidth - }; - - if (initialAnim && !w.globals.resized && !w.globals.dataChanged) { - anim.animatePathsGradually(_objectSpread({}, defaultAnimateOpts, { - speed: initialSpeed, - delay: animationDelay - })); - } else { - if (w.globals.resized || !w.globals.dataChanged) { - anim.showDelayedElements(); - } - } - - if (w.globals.dataChanged && dynamicAnim && shouldAnimate) { - anim.animatePathsGradually(_objectSpread({}, defaultAnimateOpts, { - speed: dataChangeSpeed - })); - } - - return el; - } - }, { - key: "drawPattern", - value: function drawPattern(style, width, height) { - var stroke = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '#a8a8a8'; - var strokeWidth = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; - var w = this.w; - var p = w.globals.dom.Paper.pattern(width, height, function (add) { - if (style === 'horizontalLines') { - add.line(0, 0, height, 0).stroke({ - color: stroke, - width: strokeWidth + 1 - }); - } else if (style === 'verticalLines') { - add.line(0, 0, 0, width).stroke({ - color: stroke, - width: strokeWidth + 1 - }); - } else if (style === 'slantedLines') { - add.line(0, 0, width, height).stroke({ - color: stroke, - width: strokeWidth - }); - } else if (style === 'squares') { - add.rect(width, height).fill('none').stroke({ - color: stroke, - width: strokeWidth - }); - } else if (style === 'circles') { - add.circle(width).fill('none').stroke({ - color: stroke, - width: strokeWidth - }); - } - }); - return p; - } - }, { - key: "drawGradient", - value: function drawGradient(style, gfrom, gto, opacityFrom, opacityTo) { - var size = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; - var stops = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null; - var colorStops = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; - var i = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 0; - var w = this.w; - var g; - gfrom = Utils.hexToRgba(gfrom, opacityFrom); - gto = Utils.hexToRgba(gto, opacityTo); - var stop1 = 0; - var stop2 = 1; - var stop3 = 1; - var stop4 = null; - - if (stops !== null) { - stop1 = typeof stops[0] !== 'undefined' ? stops[0] / 100 : 0; - stop2 = typeof stops[1] !== 'undefined' ? stops[1] / 100 : 1; - stop3 = typeof stops[2] !== 'undefined' ? stops[2] / 100 : 1; - stop4 = typeof stops[3] !== 'undefined' ? stops[3] / 100 : null; - } - - var radial = !!(w.config.chart.type === 'donut' || w.config.chart.type === 'pie' || w.config.chart.type === 'bubble'); - - if (colorStops === null || colorStops.length === 0) { - g = w.globals.dom.Paper.gradient(radial ? 'radial' : 'linear', function (stop) { - stop.at(stop1, gfrom, opacityFrom); - stop.at(stop2, gto, opacityTo); - stop.at(stop3, gto, opacityTo); - - if (stop4 !== null) { - stop.at(stop4, gfrom, opacityFrom); - } - }); - } else { - g = w.globals.dom.Paper.gradient(radial ? 'radial' : 'linear', function (stop) { - var stops = Array.isArray(colorStops[i]) ? colorStops[i] : colorStops; - stops.forEach(function (s) { - stop.at(s.offset / 100, s.color, s.opacity); - }); - }); - } - - if (!radial) { - if (style === 'vertical') { - g.from(0, 0).to(0, 1); - } else if (style === 'diagonal') { - g.from(0, 0).to(1, 1); - } else if (style === 'horizontal') { - g.from(0, 1).to(1, 1); - } else if (style === 'diagonal2') { - g.from(0, 1).to(2, 2); - } - } else { - var offx = w.globals.gridWidth / 2; - var offy = w.globals.gridHeight / 2; - - if (w.config.chart.type !== 'bubble') { - g.attr({ - gradientUnits: 'userSpaceOnUse', - cx: offx, - cy: offy, - r: size - }); - } else { - g.attr({ - cx: 0.5, - cy: 0.5, - r: 0.8, - fx: 0.2, - fy: 0.2 - }); - } - } - - return g; - } - }, { - key: "drawText", - value: function drawText(opts) { - var w = this.w; - var x = opts.x, - y = opts.y, - text = opts.text, - textAnchor = opts.textAnchor, - fontSize = opts.fontSize, - fontFamily = opts.fontFamily, - foreColor = opts.foreColor, - opacity = opts.opacity; - if (typeof text === 'undefined') text = ''; - - if (!textAnchor) { - textAnchor = 'start'; - } - - if (!foreColor) { - foreColor = w.config.chart.foreColor; - } - - fontFamily = fontFamily || w.config.chart.fontFamily; - var elText; - - if (Array.isArray(text)) { - elText = w.globals.dom.Paper.text(function (add) { - for (var i = 0; i < text.length; i++) { - add.tspan(text[i]); - } - }); - } else { - elText = w.globals.dom.Paper.plain(text); - } - - elText.attr({ - x: x, - y: y, - 'text-anchor': textAnchor, - 'dominant-baseline': 'auto', - 'font-size': fontSize, - 'font-family': fontFamily, - fill: foreColor, - class: 'apexcharts-text ' + opts.cssClass ? opts.cssClass : '' - }); - elText.node.style.fontFamily = fontFamily; - elText.node.style.opacity = opacity; - return elText; - } - }, { - key: "addTspan", - value: function addTspan(textEl, text, fontFamily) { - var tspan = textEl.tspan(text); - - if (!fontFamily) { - fontFamily = this.w.config.chart.fontFamily; - } - - tspan.node.style.fontFamily = fontFamily; - } - }, { - key: "drawMarker", - value: function drawMarker(x, y, opts) { - x = x || 0; - var size = opts.pSize || 0; - var elPoint = null; - - if (opts.shape === 'square') { - var radius = opts.pRadius === undefined ? size / 2 : opts.pRadius; - - if (y === null) { - size = 0; - radius = 0; - } - - var nSize = size * 1.2 + radius; - var p = this.drawRect(nSize, nSize, nSize, nSize, radius); - p.attr({ - x: x - nSize / 2, - y: y - nSize / 2, - cx: x, - cy: y, - class: opts.class ? opts.class : '', - fill: opts.pointFillColor, - 'fill-opacity': opts.pointFillOpacity ? opts.pointFillOpacity : 1, - stroke: opts.pointStrokeColor, - 'stroke-width': opts.pWidth ? opts.pWidth : 0, - 'stroke-opacity': opts.pointStrokeOpacity ? opts.pointStrokeOpacity : 1 - }); - elPoint = p; - } else if (opts.shape === 'circle') { - if (!Utils.isNumber(y)) { - size = 0; - y = 0; - } // let nSize = size - opts.pRadius / 2 < 0 ? 0 : size - opts.pRadius / 2 - - - elPoint = this.drawCircle(size, { - cx: x, - cy: y, - class: opts.class ? opts.class : '', - stroke: opts.pointStrokeColor, - fill: opts.pointFillColor, - 'fill-opacity': opts.pointFillOpacity ? opts.pointFillOpacity : 1, - 'stroke-width': opts.pWidth ? opts.pWidth : 0, - 'stroke-opacity': opts.pointStrokeOpacity ? opts.pointStrokeOpacity : 1 - }); - } - - return elPoint; - } - }, { - key: "pathMouseEnter", - value: function pathMouseEnter(path, e) { - var w = this.w; - var filters = new Filters(this.ctx); - var i = parseInt(path.node.getAttribute('index')); - var j = parseInt(path.node.getAttribute('j')); - - if (typeof w.config.chart.events.dataPointMouseEnter === 'function') { - w.config.chart.events.dataPointMouseEnter(e, this.ctx, { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - - this.ctx.fireEvent('dataPointMouseEnter', [e, this.ctx, { - seriesIndex: i, - dataPointIndex: j, - w: w - }]); - - if (w.config.states.active.filter.type !== 'none') { - if (path.node.getAttribute('selected') === 'true') { - return; - } - } - - if (w.config.states.hover.filter.type !== 'none') { - if (w.config.states.active.filter.type !== 'none' && !w.globals.isTouchDevice) { - var hoverFilter = w.config.states.hover.filter; - filters.applyFilter(path, i, hoverFilter.type, hoverFilter.value); - } - } - } - }, { - key: "pathMouseLeave", - value: function pathMouseLeave(path, e) { - var w = this.w; - var filters = new Filters(this.ctx); - var i = parseInt(path.node.getAttribute('index')); - var j = parseInt(path.node.getAttribute('j')); - - if (typeof w.config.chart.events.dataPointMouseLeave === 'function') { - w.config.chart.events.dataPointMouseLeave(e, this.ctx, { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - - this.ctx.fireEvent('dataPointMouseLeave', [e, this.ctx, { - seriesIndex: i, - dataPointIndex: j, - w: w - }]); - - if (w.config.states.active.filter.type !== 'none') { - if (path.node.getAttribute('selected') === 'true') { - return; - } - } - - if (w.config.states.hover.filter.type !== 'none') { - filters.getDefaultFilter(path, i); - } - } - }, { - key: "pathMouseDown", - value: function pathMouseDown(path, e) { - var w = this.w; - var filters = new Filters(this.ctx); - var i = parseInt(path.node.getAttribute('index')); - var j = parseInt(path.node.getAttribute('j')); - var selected = 'false'; - - if (path.node.getAttribute('selected') === 'true') { - path.node.setAttribute('selected', 'false'); - - if (w.globals.selectedDataPoints[i].indexOf(j) > -1) { - var index = w.globals.selectedDataPoints[i].indexOf(j); - w.globals.selectedDataPoints[i].splice(index, 1); - } - } else { - if (!w.config.states.active.allowMultipleDataPointsSelection && w.globals.selectedDataPoints.length > 0) { - w.globals.selectedDataPoints = []; - var elPaths = w.globals.dom.Paper.select('.apexcharts-series path').members; - var elCircles = w.globals.dom.Paper.select('.apexcharts-series circle, .apexcharts-series rect').members; - elPaths.forEach(function (elPath) { - elPath.node.setAttribute('selected', 'false'); - filters.getDefaultFilter(elPath, i); - }); - elCircles.forEach(function (circle) { - circle.node.setAttribute('selected', 'false'); - filters.getDefaultFilter(circle, i); - }); - } - - path.node.setAttribute('selected', 'true'); - selected = 'true'; - - if (typeof w.globals.selectedDataPoints[i] === 'undefined') { - w.globals.selectedDataPoints[i] = []; - } - - w.globals.selectedDataPoints[i].push(j); - } - - if (selected === 'true') { - var activeFilter = w.config.states.active.filter; - - if (activeFilter !== 'none') { - filters.applyFilter(path, i, activeFilter.type, activeFilter.value); - } - } else { - if (w.config.states.active.filter.type !== 'none') { - filters.getDefaultFilter(path, i); - } - } - - if (typeof w.config.chart.events.dataPointSelection === 'function') { - w.config.chart.events.dataPointSelection(e, this.ctx, { - selectedDataPoints: w.globals.selectedDataPoints, - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - - this.ctx.fireEvent('dataPointSelection', [e, this.ctx, { - selectedDataPoints: w.globals.selectedDataPoints, - seriesIndex: i, - dataPointIndex: j, - w: w - }]); // if (this.w.config.chart.selection.selectedPoints !== undefined) { - // this.w.config.chart.selection.selectedPoints(w.globals.selectedDataPoints) - // } - } - }, { - key: "rotateAroundCenter", - value: function rotateAroundCenter(el) { - var coord = el.getBBox(); - var x = coord.x + coord.width / 2; - var y = coord.y + coord.height / 2; - return { - x: x, - y: y - }; - } - }, { - key: "getTextRects", - value: function getTextRects(text, fontSize, fontFamily, transform) { - var useBBox = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; - var w = this.w; - var virtualText = this.drawText({ - x: -200, - y: -200, - text: text, - textAnchor: 'start', - fontSize: fontSize, - fontFamily: fontFamily, - foreColor: '#fff', - opacity: 0 - }); - - if (transform) { - virtualText.attr('transform', transform); - } - - w.globals.dom.Paper.add(virtualText); - var rect = virtualText.bbox(); - - if (!useBBox) { - rect = virtualText.node.getBoundingClientRect(); - } - - virtualText.remove(); - return { - width: rect.width, - height: rect.height - }; - } - /** - * append ... to long text - * http://stackoverflow.com/questions/9241315/trimming-text-to-a-given-pixel-width-in-svg - * @memberof Graphics - **/ - - }, { - key: "placeTextWithEllipsis", - value: function placeTextWithEllipsis(textObj, textString, width) { - textObj.textContent = textString; - - if (textString.length > 0) { - // ellipsis is needed - if (textObj.getSubStringLength(0, textString.length) >= width) { - for (var x = textString.length - 3; x > 0; x -= 3) { - if (textObj.getSubStringLength(0, x) <= width) { - textObj.textContent = textString.substring(0, x) + '...'; - return; - } - } - - textObj.textContent = '...'; // can't place at all - } - } - } - }], [{ - key: "setAttrs", - value: function setAttrs(el, attrs) { - for (var key in attrs) { - if (attrs.hasOwnProperty(key)) { - el.setAttribute(key, attrs[key]); - } - } - } - }]); - - return Graphics; - }(); - - const name = "en"; - const options = { - 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" - ], - days: [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ], - shortDays: [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ], - toolbar: { - exportToSVG: "Download SVG", - exportToPNG: "Download PNG", - menu: "Menu", - selection: "Selection", - selectionZoom: "Selection Zoom", - zoomIn: "Zoom In", - zoomOut: "Zoom Out", - pan: "Panning", - reset: "Reset Zoom" - } - }; - var en = { - name: name, - options: options - }; - - var Options = - /*#__PURE__*/ - function () { - function Options() { - _classCallCheck(this, Options); - - this.yAxis = { - show: true, - showAlways: false, - seriesName: undefined, - opposite: false, - reversed: false, - logarithmic: false, - tickAmount: undefined, - forceNiceScale: false, - max: undefined, - min: undefined, - floating: false, - decimalsInFloat: undefined, - labels: { - show: true, - minWidth: 0, - maxWidth: 160, - offsetX: 0, - offsetY: 0, - align: undefined, - rotate: 0, - padding: 20, - style: { - colors: [], - fontSize: '11px', - fontFamily: undefined, - cssClass: '' - }, - formatter: undefined - }, - axisBorder: { - show: false, - color: '#78909C', - offsetX: 0, - offsetY: 0 - }, - axisTicks: { - show: false, - color: '#78909C', - width: 6, - offsetX: 0, - offsetY: 0 - }, - title: { - text: undefined, - rotate: 90, - offsetY: 0, - offsetX: 0, - style: { - color: undefined, - fontSize: '11px', - fontFamily: undefined, - cssClass: '' - } - }, - tooltip: { - enabled: false, - offsetX: 0 - }, - crosshairs: { - show: true, - position: 'front', - stroke: { - color: '#b6b6b6', - width: 1, - dashArray: 0 - } - } - }; - this.xAxisAnnotation = { - x: 0, - x2: null, - strokeDashArray: 1, - fillColor: '#c2c2c2', - borderColor: '#c2c2c2', - opacity: 0.3, - offsetX: 0, - offsetY: 0, - label: { - borderColor: '#c2c2c2', - borderWidth: 1, - text: undefined, - textAnchor: 'middle', - orientation: 'vertical', - position: 'top', - offsetX: 0, - offsetY: 0, - style: { - background: '#fff', - color: undefined, - fontSize: '11px', - fontFamily: undefined, - cssClass: '', - padding: { - left: 5, - right: 5, - top: 2, - bottom: 2 - } - } - } - }; - this.yAxisAnnotation = { - y: 0, - y2: null, - strokeDashArray: 1, - fillColor: '#c2c2c2', - borderColor: '#c2c2c2', - opacity: 0.3, - offsetX: 0, - offsetY: 0, - yAxisIndex: 0, - label: { - borderColor: '#c2c2c2', - borderWidth: 1, - text: undefined, - textAnchor: 'end', - position: 'right', - offsetX: 0, - offsetY: -3, - style: { - background: '#fff', - color: undefined, - fontSize: '11px', - fontFamily: undefined, - cssClass: '', - padding: { - left: 5, - right: 5, - top: 0, - bottom: 2 - } - } - } - }; - this.pointAnnotation = { - x: 0, - y: null, - yAxisIndex: 0, - seriesIndex: 0, - marker: { - size: 0, - fillColor: '#fff', - strokeWidth: 2, - strokeColor: '#333', - shape: 'circle', - offsetX: 0, - offsetY: 0, - radius: 2, - cssClass: '' - }, - label: { - borderColor: '#c2c2c2', - borderWidth: 1, - text: undefined, - textAnchor: 'middle', - offsetX: 0, - offsetY: -15, - style: { - background: '#fff', - color: undefined, - fontSize: '11px', - fontFamily: undefined, - cssClass: '', - padding: { - left: 5, - right: 5, - top: 0, - bottom: 2 - } - } - }, - customSVG: { - SVG: undefined, - cssClass: undefined, - offsetX: 0, - offsetY: 0 - } - }; - } - - _createClass(Options, [{ - key: "init", - value: function init() { - return { - annotations: { - position: 'front', - yaxis: [this.yAxisAnnotation], - xaxis: [this.xAxisAnnotation], - points: [this.pointAnnotation] - }, - chart: { - animations: { - enabled: true, - easing: 'easeinout', - // linear, easeout, easein, easeinout, swing, bounce, elastic - speed: 800, - animateGradually: { - delay: 150, - enabled: true - }, - dynamicAnimation: { - enabled: true, - speed: 350 - } - }, - background: 'transparent', - locales: [en], - defaultLocale: 'en', - dropShadow: { - enabled: false, - enabledSeries: undefined, - top: 2, - left: 2, - blur: 4, - color: '#000', - opacity: 0.35 - }, - events: { - animationEnd: undefined, - beforeMount: undefined, - mounted: undefined, - updated: undefined, - click: undefined, - legendClick: undefined, - markerClick: undefined, - selection: undefined, - dataPointSelection: undefined, - dataPointMouseEnter: undefined, - dataPointMouseLeave: undefined, - beforeZoom: undefined, - zoomed: undefined, - scrolled: undefined - }, - foreColor: '#373d3f', - fontFamily: 'Helvetica, Arial, sans-serif', - height: 'auto', - parentHeightOffset: 15, - id: undefined, - group: undefined, - offsetX: 0, - offsetY: 0, - selection: { - enabled: false, - type: 'x', - // selectedPoints: undefined, // default datapoints that should be selected automatically - fill: { - color: '#24292e', - opacity: 0.1 - }, - stroke: { - width: 1, - color: '#24292e', - opacity: 0.4, - dashArray: 3 - }, - xaxis: { - min: undefined, - max: undefined - }, - yaxis: { - min: undefined, - max: undefined - } - }, - sparkline: { - enabled: false - }, - brush: { - enabled: false, - autoScaleYaxis: false, - target: undefined - }, - stacked: false, - stackType: 'normal', - toolbar: { - show: true, - tools: { - download: true, - selection: true, - zoom: true, - zoomin: true, - zoomout: true, - pan: true, - reset: true, - customIcons: [] - }, - autoSelected: 'zoom' // accepts -> zoom, pan, selection - - }, - type: 'line', - width: '100%', - zoom: { - enabled: true, - type: 'x', - // autoScaleYaxis: false, // TODO: rewrite the autoScaleY function - zoomedArea: { - fill: { - color: '#90CAF9', - opacity: 0.4 - }, - stroke: { - color: '#0D47A1', - opacity: 0.4, - width: 1 - } - } - } - }, - plotOptions: { - bar: { - horizontal: false, - columnWidth: '70%', - // should be in percent 0 - 100 - barHeight: '70%', - // should be in percent 0 - 100 - distributed: false, - endingShape: 'flat', - colors: { - ranges: [], - backgroundBarColors: [], - backgroundBarOpacity: 1 - }, - dataLabels: { - maxItems: 100, - hideOverflowingLabels: true, - position: 'top' // top, center, bottom - // TODO: provide stackedLabels for stacked charts which gives additions of values - - } - }, - candlestick: { - colors: { - upward: '#00B746', - downward: '#EF403C' - }, - wick: { - useFillColor: true - } - }, - heatmap: { - radius: 2, - enableShades: true, - shadeIntensity: 0.5, - reverseNegativeShade: true, - distributed: false, - colorScale: { - inverse: false, - ranges: [], - min: undefined, - max: undefined - } - }, - radialBar: { - size: undefined, - inverseOrder: false, - startAngle: 0, - endAngle: 360, - offsetX: 0, - offsetY: 0, - hollow: { - margin: 5, - size: '50%', - background: 'transparent', - image: undefined, - imageWidth: 150, - imageHeight: 150, - imageOffsetX: 0, - imageOffsetY: 0, - imageClipped: true, - position: 'front', - dropShadow: { - enabled: false, - top: 0, - left: 0, - blur: 3, - color: '#000', - opacity: 0.5 - } - }, - track: { - show: true, - startAngle: undefined, - endAngle: undefined, - background: '#f2f2f2', - strokeWidth: '97%', - opacity: 1, - margin: 5, - // margin is in pixels - dropShadow: { - enabled: false, - top: 0, - left: 0, - blur: 3, - color: '#000', - opacity: 0.5 - } - }, - dataLabels: { - show: true, - name: { - show: true, - fontSize: '16px', - fontFamily: undefined, - color: undefined, - offsetY: 0 - }, - value: { - show: true, - fontSize: '14px', - fontFamily: undefined, - color: undefined, - offsetY: 16, - formatter: function formatter(val) { - return val + '%'; - } - }, - total: { - show: false, - label: 'Total', - color: undefined, - formatter: function formatter(w) { - return w.globals.seriesTotals.reduce(function (a, b) { - return a + b; - }, 0) / w.globals.series.length + '%'; - } - } - } - }, - rangeBar: {}, - pie: { - size: undefined, - customScale: 1, - offsetX: 0, - offsetY: 0, - expandOnClick: true, - dataLabels: { - // These are the percentage values which are displayed on slice - offset: 0, - // offset by which labels will move outside - minAngleToShowLabel: 10 - }, - donut: { - size: '65%', - background: 'transparent', - labels: { - // These are the inner labels appearing inside donut - show: false, - name: { - show: true, - fontSize: '16px', - fontFamily: undefined, - color: undefined, - offsetY: -10 - }, - value: { - show: true, - fontSize: '20px', - fontFamily: undefined, - color: undefined, - offsetY: 10, - formatter: function formatter(val) { - return val; - } - }, - total: { - show: false, - label: 'Total', - color: undefined, - formatter: function formatter(w) { - return w.globals.seriesTotals.reduce(function (a, b) { - return a + b; - }, 0); - } - } - } - } - }, - radar: { - size: undefined, - offsetX: 0, - offsetY: 0, - polygons: { - // strokeColor: '#e8e8e8', // should be deprecated in the minor version i.e 3.2 - strokeColors: '#e8e8e8', - connectorColors: '#e8e8e8', - fill: { - colors: undefined - } - } - } - }, - colors: undefined, - dataLabels: { - enabled: true, - enabledOnSeries: undefined, - formatter: function formatter(val) { - return val; - }, - textAnchor: 'middle', - offsetX: 0, - offsetY: 0, - style: { - fontSize: '12px', - fontFamily: undefined, - colors: undefined - }, - dropShadow: { - enabled: false, - top: 1, - left: 1, - blur: 1, - color: '#000', - opacity: 0.45 - } - }, - fill: { - type: 'solid', - colors: undefined, - // array of colors - opacity: 0.85, - gradient: { - shade: 'dark', - type: 'horizontal', - shadeIntensity: 0.5, - gradientToColors: undefined, - inverseColors: true, - opacityFrom: 1, - opacityTo: 1, - stops: [0, 50, 100], - colorStops: [] - }, - image: { - src: [], - width: undefined, - // optional - height: undefined // optional - - }, - pattern: { - style: 'sqaures', - // String | Array of Strings - width: 6, - height: 6, - strokeWidth: 2 - } - }, - grid: { - show: true, - borderColor: '#e0e0e0', - strokeDashArray: 0, - position: 'back', - xaxis: { - lines: { - show: false, - animate: false - } - }, - yaxis: { - lines: { - show: true, - animate: false - } - }, - row: { - colors: undefined, - // takes as array which will be repeated on rows - opacity: 0.5 - }, - column: { - colors: undefined, - // takes an array which will be repeated on columns - opacity: 0.5 - }, - padding: { - top: 0, - right: 10, - bottom: 0, - left: 12 - } - }, - labels: [], - legend: { - show: true, - showForSingleSeries: false, - showForNullSeries: true, - showForZeroSeries: true, - floating: false, - position: 'bottom', - // whether to position legends in 1 of 4 - // direction - top, bottom, left, right - horizontalAlign: 'center', - // when position top/bottom, you can specify whether to align legends left, right or center - fontSize: '12px', - fontFamily: undefined, - width: undefined, - height: undefined, - formatter: undefined, - offsetX: -20, - offsetY: 0, - labels: { - colors: undefined, - useSeriesColors: false - }, - markers: { - width: 12, - height: 12, - strokeWidth: 0, - strokeColor: '#fff', - radius: 12, - customHTML: undefined, - offsetX: 0, - offsetY: 0, - onClick: undefined - }, - itemMargin: { - horizontal: 0, - vertical: 5 - }, - onItemClick: { - toggleDataSeries: true - }, - onItemHover: { - highlightDataSeries: true - } - }, - markers: { - discrete: [], - size: 0, - colors: undefined, - //strokeColor: '#fff', // TODO: deprecate in major version 4.0 - strokeColors: '#fff', - strokeWidth: 2, - strokeOpacity: 0.9, - fillOpacity: 1, - shape: 'circle', - radius: 2, - offsetX: 0, - offsetY: 0, - hover: { - size: undefined, - sizeOffset: 3 - } - }, - noData: { - text: undefined, - align: 'center', - verticalAlign: 'middle', - offsetX: 0, - offsetY: 0, - style: { - color: undefined, - fontSize: '14px', - fontFamily: undefined - } - }, - responsive: [], - // breakpoints should follow ascending order 400, then 700, then 1000 - series: undefined, - states: { - normal: { - filter: { - type: 'none', - value: 0 - } - }, - hover: { - filter: { - type: 'lighten', - value: 0.15 - } - }, - active: { - allowMultipleDataPointsSelection: false, - filter: { - type: 'darken', - value: 0.65 - } - } - }, - title: { - text: undefined, - align: 'left', - margin: 10, - offsetX: 0, - offsetY: 0, - floating: false, - style: { - fontSize: '14px', - fontFamily: undefined, - color: undefined - } - }, - subtitle: { - text: undefined, - align: 'left', - margin: 10, - offsetX: 0, - offsetY: 30, - floating: false, - style: { - fontSize: '12px', - fontFamily: undefined, - color: undefined - } - }, - stroke: { - show: true, - curve: 'smooth', - // "smooth" / "straight" / "stepline" - lineCap: 'butt', - // round, butt , square - width: 2, - colors: undefined, - // array of colors - dashArray: 0 // single value or array of values - - }, - tooltip: { - enabled: true, - enabledOnSeries: undefined, - shared: true, - followCursor: false, - // when disabled, the tooltip will show on top of the series instead of mouse position - intersect: false, - // when enabled, tooltip will only show when user directly hovers over point - inverseOrder: false, - custom: undefined, - fillSeriesColor: false, - theme: 'light', - style: { - fontSize: '12px', - fontFamily: undefined - }, - onDatasetHover: { - highlightDataSeries: false - }, - x: { - // x value - show: true, - format: 'dd MMM', - // dd/MM, dd MMM yy, dd MMM yyyy - formatter: undefined // a custom user supplied formatter function - - }, - y: { - formatter: undefined, - title: { - formatter: function formatter(seriesName) { - return seriesName; - } - } - }, - z: { - formatter: undefined, - title: 'Size: ' - }, - marker: { - show: true - }, - items: { - display: 'flex' - }, - fixed: { - enabled: false, - position: 'topRight', - // topRight, topLeft, bottomRight, bottomLeft - offsetX: 0, - offsetY: 0 - } - }, - xaxis: { - type: 'category', - categories: [], - offsetX: 0, - offsetY: 0, - labels: { - show: true, - rotate: -45, - rotateAlways: false, - hideOverlappingLabels: true, - trim: true, - minHeight: undefined, - maxHeight: 120, - showDuplicates: true, - style: { - colors: [], - fontSize: '12px', - fontFamily: undefined, - cssClass: '' - }, - offsetX: 0, - offsetY: 0, - format: undefined, - formatter: undefined, - // custom formatter function which will override format - datetimeFormatter: { - year: 'yyyy', - month: "MMM 'yy", - day: 'dd MMM', - hour: 'HH:mm', - minute: 'HH:mm:ss' - } - }, - axisBorder: { - show: true, - color: '#78909C', - width: '100%', - height: 1, - offsetX: 0, - offsetY: 0 - }, - axisTicks: { - show: true, - color: '#78909C', - height: 6, - offsetX: 0, - offsetY: 0 - }, - tickAmount: undefined, - tickPlacement: 'on', - min: undefined, - max: undefined, - range: undefined, - floating: false, - position: 'bottom', - title: { - text: undefined, - offsetX: 0, - offsetY: 0, - style: { - color: undefined, - fontSize: '12px', - fontFamily: undefined, - cssClass: '' - } - }, - crosshairs: { - show: true, - width: 1, - // tickWidth/barWidth or an integer - position: 'back', - opacity: 0.9, - stroke: { - color: '#b6b6b6', - width: 1, - dashArray: 3 - }, - fill: { - type: 'solid', - // solid, gradient - color: '#B1B9C4', - gradient: { - colorFrom: '#D8E3F0', - colorTo: '#BED1E6', - stops: [0, 100], - opacityFrom: 0.4, - opacityTo: 0.5 - } - }, - dropShadow: { - enabled: false, - left: 0, - top: 0, - blur: 1, - opacity: 0.4 - } - }, - tooltip: { - enabled: true, - offsetY: 0, - formatter: undefined, - style: { - fontSize: '12px', - fontFamily: undefined - } - } - }, - yaxis: this.yAxis, - theme: { - mode: 'light', - palette: 'palette1', - // If defined, it will overwrite globals.colors variable - monochrome: { - // monochrome allows you to select just 1 color and fill out the rest with light/dark shade (intensity can be selected) - enabled: false, - color: '#008FFB', - shadeTo: 'light', - shadeIntensity: 0.65 - } - } - }; - } - }]); - - return Options; - }(); - - /** - * ApexCharts Annotations Class for drawing lines/rects on both xaxis and yaxis. - * - * @module Annotations - **/ - - var Annotations = - /*#__PURE__*/ - function () { - function Annotations(ctx) { - _classCallCheck(this, Annotations); - - this.ctx = ctx; - this.w = ctx.w; - this.graphics = new Graphics(this.ctx); - - if (this.w.globals.isBarHorizontal) { - this.invertAxis = true; - } - - this.xDivision = this.w.globals.gridWidth / this.w.globals.dataPoints; - } - - _createClass(Annotations, [{ - key: "drawAnnotations", - value: function drawAnnotations() { - var w = this.w; - - if (w.globals.axisCharts) { - var yAnnotations = this.drawYAxisAnnotations(); - var xAnnotations = this.drawXAxisAnnotations(); - var pointAnnotations = this.drawPointAnnotations(); - var initialAnim = w.config.chart.animations.enabled; - var annoArray = [yAnnotations, xAnnotations, pointAnnotations]; - var annoElArray = [xAnnotations.node, yAnnotations.node, pointAnnotations.node]; - - for (var i = 0; i < 3; i++) { - w.globals.dom.elGraphical.add(annoArray[i]); - - if (initialAnim && !w.globals.resized && !w.globals.dataChanged) { - annoElArray[i].classList.add('hidden'); - } - - w.globals.delayedElements.push({ - el: annoElArray[i], - index: 0 - }); - } // background sizes needs to be calculated after text is drawn, so calling them last - - - this.annotationsBackground(); - } - } - }, { - key: "addXaxisAnnotation", - value: function addXaxisAnnotation(anno, parent, index) { - var w = this.w; - var min = this.invertAxis ? w.globals.minY : w.globals.minX; - var range = this.invertAxis ? w.globals.yRange[0] : w.globals.xRange; - var x1 = (anno.x - min) / (range / w.globals.gridWidth); - var text = anno.label.text; - - if (w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) { - var catIndex = w.globals.labels.indexOf(anno.x); - var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - - if (xLabel) { - x1 = parseFloat(xLabel.getAttribute('x')); - } - } - - var strokeDashArray = anno.strokeDashArray; - if (x1 < 0 || x1 > w.globals.gridWidth) return; - - if (anno.x2 === null) { - var line = this.graphics.drawLine(x1 + anno.offsetX, // x1 - 0 + anno.offsetY, // y1 - x1 + anno.offsetX, // x2 - w.globals.gridHeight + anno.offsetY, // y2 - anno.borderColor, // lineColor - strokeDashArray //dashArray - ); - parent.appendChild(line.node); - } else { - var x2 = (anno.x2 - min) / (range / w.globals.gridWidth); - - if (x2 < x1) { - var temp = x1; - x1 = x2; - x2 = temp; - } - - if (text) { - var rect = this.graphics.drawRect(x1 + anno.offsetX, // x1 - 0 + anno.offsetY, // y1 - x2 - x1, // x2 - w.globals.gridHeight + anno.offsetY, // y2 - 0, // radius - anno.fillColor, // color - anno.opacity, // opacity, - 1, // strokeWidth - anno.borderColor, // strokeColor - strokeDashArray // stokeDashArray - ); - parent.appendChild(rect.node); - } - } - - var textY = anno.label.position === 'top' ? -3 : w.globals.gridHeight; - var elText = this.graphics.drawText({ - x: x1 + anno.label.offsetX, - y: textY + anno.label.offsetY, - text: text, - textAnchor: anno.label.textAnchor, - fontSize: anno.label.style.fontSize, - fontFamily: anno.label.style.fontFamily, - foreColor: anno.label.style.color, - cssClass: 'apexcharts-xaxis-annotation-label ' + anno.label.style.cssClass - }); - elText.attr({ - rel: index - }); - parent.appendChild(elText.node); // after placing the annotations on svg, set any vertically placed annotations - - this.setOrientations(anno, index); - } - }, { - key: "drawXAxisAnnotations", - value: function drawXAxisAnnotations() { - var _this = this; - - var w = this.w; - var elg = this.graphics.group({ - class: 'apexcharts-xaxis-annotations' - }); - w.config.annotations.xaxis.map(function (anno, index) { - _this.addXaxisAnnotation(anno, elg.node, index); - }); - return elg; - } - }, { - key: "addYaxisAnnotation", - value: function addYaxisAnnotation(anno, parent, index) { - var w = this.w; - var strokeDashArray = anno.strokeDashArray; - var y1; - var y2; - - if (this.invertAxis) { - var catIndex = w.globals.labels.indexOf(anno.y); - var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - - if (xLabel) { - y1 = parseFloat(xLabel.getAttribute('y')); - } - } else { - y1 = w.globals.gridHeight - (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - - if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { - y1 = (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - } - } - - var text = anno.label.text; - - if (anno.y2 === null) { - var line = this.graphics.drawLine(0 + anno.offsetX, // x1 - y1 + anno.offsetY, // y1 - w.globals.gridWidth + anno.offsetX, // x2 - y1 + anno.offsetY, // y2 - anno.borderColor, // lineColor - strokeDashArray // dashArray - ); - parent.appendChild(line.node); - } else { - if (this.invertAxis) { - var _catIndex = w.globals.labels.indexOf(anno.y2); - - var _xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (_catIndex + 1) + ')'); - - if (_xLabel) { - y2 = parseFloat(_xLabel.getAttribute('y')); - } - } else { - y2 = w.globals.gridHeight - (anno.y2 - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - - if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { - y2 = (anno.y2 - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - } - } - - if (y2 > y1) { - var temp = y1; - y1 = y2; - y2 = temp; - } - - if (text) { - var rect = this.graphics.drawRect(0 + anno.offsetX, // x1 - y2 + anno.offsetY, // y1 - w.globals.gridWidth + anno.offsetX, // x2 - y1 - y2, // y2 - 0, // radius - anno.fillColor, // color - anno.opacity, // opacity, - 1, // strokeWidth - anno.borderColor, // strokeColor - strokeDashArray // stokeDashArray - ); - parent.appendChild(rect.node); - } - } - - var textX = anno.label.position === 'right' ? w.globals.gridWidth : 0; - var elText = this.graphics.drawText({ - x: textX + anno.label.offsetX, - y: (y2 || y1) + anno.label.offsetY - 3, - text: text, - textAnchor: anno.label.textAnchor, - fontSize: anno.label.style.fontSize, - fontFamily: anno.label.style.fontFamily, - foreColor: anno.label.style.color, - cssClass: 'apexcharts-yaxis-annotation-label ' + anno.label.style.cssClass - }); - elText.attr({ - rel: index - }); - parent.appendChild(elText.node); - } - }, { - key: "drawYAxisAnnotations", - value: function drawYAxisAnnotations() { - var _this2 = this; - - var w = this.w; - var elg = this.graphics.group({ - class: 'apexcharts-yaxis-annotations' - }); - w.config.annotations.yaxis.map(function (anno, index) { - _this2.addYaxisAnnotation(anno, elg.node, index); - }); - return elg; - } - }, { - key: "clearAnnotations", - value: function clearAnnotations(ctx) { - var w = ctx.w; - var annos = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations'); - annos = Utils.listToArray(annos); - annos.forEach(function (a) { - while (a.firstChild) { - a.removeChild(a.firstChild); - } - }); - } - }, { - key: "addPointAnnotation", - value: function addPointAnnotation(anno, parent, index) { - var w = this.w; - var x = 0; - var y = 0; - var pointY = 0; - - if (this.invertAxis) { - console.warn('Point annotation is not supported in horizontal bar charts.'); - } - - if (typeof anno.x === 'string') { - var catIndex = w.globals.labels.indexOf(anno.x); - var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); - var xPos = parseFloat(xLabel.getAttribute('x')); - x = xPos; - var annoY = anno.y; - - if (anno.y === null) { - annoY = w.globals.series[anno.seriesIndex][catIndex]; - } - - y = w.globals.gridHeight - (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; - pointY = w.globals.gridHeight - (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - - if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { - y = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) + parseInt(anno.label.style.fontSize) + anno.marker.size; - pointY = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - } - } else { - x = (anno.x - w.globals.minX) / (w.globals.xRange / w.globals.gridWidth); - y = w.globals.gridHeight - (parseFloat(anno.y) - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; - pointY = w.globals.gridHeight - (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - - if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { - y = (parseFloat(anno.y) - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size; - pointY = (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); - } - } - - if (x < 0 || x > w.globals.gridWidth) return; - var optsPoints = { - pSize: anno.marker.size, - pWidth: anno.marker.strokeWidth, - pointFillColor: anno.marker.fillColor, - pointStrokeColor: anno.marker.strokeColor, - shape: anno.marker.shape, - radius: anno.marker.radius, - class: 'apexcharts-point-annotation-marker ' + anno.marker.cssClass - }; - var point = this.graphics.drawMarker(x + anno.marker.offsetX, pointY + anno.marker.offsetY, optsPoints); - parent.appendChild(point.node); - var text = anno.label.text ? anno.label.text : ''; - var elText = this.graphics.drawText({ - x: x + anno.label.offsetX, - y: y + anno.label.offsetY, - text: text, - textAnchor: anno.label.textAnchor, - fontSize: anno.label.style.fontSize, - fontFamily: anno.label.style.fontFamily, - foreColor: anno.label.style.color, - cssClass: 'apexcharts-point-annotation-label ' + anno.label.style.cssClass - }); - elText.attr({ - rel: index - }); - parent.appendChild(elText.node); - - if (anno.customSVG.SVG) { - var g = this.graphics.group({ - class: 'apexcharts-point-annotations-custom-svg ' + anno.customSVG.cssClass - }); - g.attr({ - transform: "translate(".concat(x + anno.customSVG.offsetX, ", ").concat(y + anno.customSVG.offsetY, ")") - }); - g.node.innerHTML = anno.customSVG.SVG; - parent.appendChild(g.node); - } - } - }, { - key: "drawPointAnnotations", - value: function drawPointAnnotations() { - var _this3 = this; - - var w = this.w; - var elg = this.graphics.group({ - class: 'apexcharts-point-annotations' - }); - w.config.annotations.points.map(function (anno, index) { - _this3.addPointAnnotation(anno, elg.node, index); - }); - return elg; - } - }, { - key: "setOrientations", - value: function setOrientations(anno) { - var annoIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var w = this.w; - - if (anno.label.orientation === 'vertical') { - var i = annoIndex !== null ? annoIndex : 0; - var xAnno = w.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(i, "']")); - - if (xAnno !== null) { - var xAnnoCoord = xAnno.getBoundingClientRect(); - xAnno.setAttribute('x', parseFloat(xAnno.getAttribute('x')) - xAnnoCoord.height + 4); - - if (anno.label.position === 'top') { - xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) + xAnnoCoord.width); - } else { - xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) - xAnnoCoord.width); - } - - var annoRotatingCenter = this.graphics.rotateAroundCenter(xAnno); - var x = annoRotatingCenter.x; - var y = annoRotatingCenter.y; - xAnno.setAttribute('transform', "rotate(-90 ".concat(x, " ").concat(y, ")")); - } - } - } - }, { - key: "addBackgroundToAnno", - value: function addBackgroundToAnno(annoEl, anno) { - var w = this.w; - if (!anno.label.text) return null; - var elGridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid').getBoundingClientRect(); - var coords = annoEl.getBoundingClientRect(); - var pleft = anno.label.style.padding.left; - var pright = anno.label.style.padding.right; - var ptop = anno.label.style.padding.top; - var pbottom = anno.label.style.padding.bottom; - - if (anno.label.orientation === 'vertical') { - ptop = anno.label.style.padding.left; - pbottom = anno.label.style.padding.right; - pleft = anno.label.style.padding.top; - pright = anno.label.style.padding.bottom; - } - - var x1 = coords.left - elGridRect.left - pleft; - var y1 = coords.top - elGridRect.top - ptop; - var elRect = this.graphics.drawRect(x1, y1, coords.width + pleft + pright, coords.height + ptop + pbottom, 0, anno.label.style.background, 1, anno.label.borderWidth, anno.label.borderColor, 0); - return elRect; - } - }, { - key: "annotationsBackground", - value: function annotationsBackground() { - var _this4 = this; - - var w = this.w; - - var add = function add(anno, i, type) { - var annoLabel = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations .apexcharts-").concat(type, "-annotation-label[rel='").concat(i, "']")); - - if (annoLabel) { - var parent = annoLabel.parentNode; - - var elRect = _this4.addBackgroundToAnno(annoLabel, anno); - - if (elRect) { - parent.insertBefore(elRect.node, annoLabel); - } - } - }; - - w.config.annotations.xaxis.map(function (anno, i) { - add(anno, i, 'xaxis'); - }); - w.config.annotations.yaxis.map(function (anno, i) { - add(anno, i, 'yaxis'); - }); - w.config.annotations.points.map(function (anno, i) { - add(anno, i, 'point'); - }); - } - }, { - key: "addText", - value: function addText(params, pushToMemory, context) { - var x = params.x, - y = params.y, - text = params.text, - textAnchor = params.textAnchor, - _params$appendTo = params.appendTo, - appendTo = _params$appendTo === void 0 ? '.apexcharts-inner' : _params$appendTo, - foreColor = params.foreColor, - fontSize = params.fontSize, - fontFamily = params.fontFamily, - cssClass = params.cssClass, - backgroundColor = params.backgroundColor, - borderWidth = params.borderWidth, - strokeDashArray = params.strokeDashArray, - radius = params.radius, - borderColor = params.borderColor, - _params$paddingLeft = params.paddingLeft, - paddingLeft = _params$paddingLeft === void 0 ? 4 : _params$paddingLeft, - _params$paddingRight = params.paddingRight, - paddingRight = _params$paddingRight === void 0 ? 4 : _params$paddingRight, - _params$paddingBottom = params.paddingBottom, - paddingBottom = _params$paddingBottom === void 0 ? 2 : _params$paddingBottom, - _params$paddingTop = params.paddingTop, - paddingTop = _params$paddingTop === void 0 ? 2 : _params$paddingTop; - var me = context; - var w = me.w; - var parentNode = w.globals.dom.baseEl.querySelector(appendTo); - var elText = this.graphics.drawText({ - x: x, - y: y, - text: text, - textAnchor: textAnchor || 'start', - fontSize: fontSize || '12px', - fontFamily: fontFamily || w.config.chart.fontFamily, - foreColor: foreColor || w.config.chart.foreColor, - cssClass: 'apexcharts-text ' + cssClass ? cssClass : '' - }); - parentNode.appendChild(elText.node); - var textRect = elText.bbox(); - - if (text) { - var elRect = this.graphics.drawRect(textRect.x - paddingLeft, textRect.y - paddingTop, textRect.width + paddingLeft + paddingRight, textRect.height + paddingBottom + paddingTop, radius, backgroundColor, 1, borderWidth, borderColor, strokeDashArray); - elText.before(elRect); - } - - if (pushToMemory) { - w.globals.memory.methodsToExec.push({ - context: me, - method: me.addText, - params: { - x: x, - y: y, - text: text, - textAnchor: textAnchor, - appendTo: appendTo, - foreColor: foreColor, - fontSize: fontSize, - cssClass: cssClass, - backgroundColor: backgroundColor, - borderWidth: borderWidth, - strokeDashArray: strokeDashArray, - radius: radius, - borderColor: borderColor, - paddingLeft: paddingLeft, - paddingRight: paddingRight, - paddingBottom: paddingBottom, - paddingTop: paddingTop - } - }); - } - - return context; - } - }, { - key: "addPointAnnotationExternal", - value: function addPointAnnotationExternal(params, pushToMemory, context) { - if (typeof this.invertAxis === 'undefined') { - this.invertAxis = context.w.globals.isBarHorizontal; - } - - this.addAnnotationExternal({ - params: params, - pushToMemory: pushToMemory, - context: context, - type: 'point', - contextMethod: context.addPointAnnotation - }); - return context; - } - }, { - key: "addYaxisAnnotationExternal", - value: function addYaxisAnnotationExternal(params, pushToMemory, context) { - this.addAnnotationExternal({ - params: params, - pushToMemory: pushToMemory, - context: context, - type: 'yaxis', - contextMethod: context.addYaxisAnnotation - }); - return context; - } // The addXaxisAnnotation method requires a parent class, and user calling this method externally on the chart instance may not specify parent, hence a different method - - }, { - key: "addXaxisAnnotationExternal", - value: function addXaxisAnnotationExternal(params, pushToMemory, context) { - this.addAnnotationExternal({ - params: params, - pushToMemory: pushToMemory, - context: context, - type: 'xaxis', - contextMethod: context.addXaxisAnnotation - }); - return context; - } - }, { - key: "addAnnotationExternal", - value: function addAnnotationExternal(_ref) { - var params = _ref.params, - pushToMemory = _ref.pushToMemory, - context = _ref.context, - type = _ref.type, - contextMethod = _ref.contextMethod; - var me = context; - var w = me.w; - var parent = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations")); - var index = parent.childNodes.length + 1; - var opt = new Options(); - var axesAnno = Object.assign({}, type === 'xaxis' ? opt.xAxisAnnotation : type === 'yaxis' ? opt.yAxisAnnotation : opt.pointAnnotation); - var anno = Utils.extend(axesAnno, params); - - switch (type) { - case 'xaxis': - this.addXaxisAnnotation(anno, parent, index); - break; - - case 'yaxis': - this.addYaxisAnnotation(anno, parent, index); - break; - - case 'point': - this.addPointAnnotation(anno, parent, index); - break; - } // add background - - - var axesAnnoLabel = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations .apexcharts-").concat(type, "-annotation-label[rel='").concat(index, "']")); - var elRect = this.addBackgroundToAnno(axesAnnoLabel, anno); - - if (elRect) { - parent.insertBefore(elRect.node, axesAnnoLabel); - } - - if (pushToMemory) { - w.globals.memory.methodsToExec.push({ - context: me, - method: contextMethod, - params: params - }); - } - - return context; - } - }]); - - return Annotations; - }(); - - /** - * DateTime Class to manipulate datetime values. - * - * @module DateTime - **/ - - var DateTime = - /*#__PURE__*/ - function () { - function DateTime(ctx) { - _classCallCheck(this, DateTime); - - this.ctx = ctx; - this.w = ctx.w; - this.months31 = [1, 3, 5, 7, 8, 10, 12]; - this.months30 = [2, 4, 6, 9, 11]; - this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; - } - - _createClass(DateTime, [{ - key: "isValidDate", - value: function isValidDate(date) { - return !isNaN(this.parseDate(date)); - } - }, { - key: "getUTCTimeStamp", - value: function getUTCTimeStamp(dateStr) { - if (!Date.parse(dateStr)) { - return dateStr; - } - - return new Date(new Date(dateStr).toISOString().substr(0, 25)).getTime(); - } - }, { - key: "parseDate", - value: function parseDate(dateStr) { - var parsed = Date.parse(dateStr); - - if (!isNaN(parsed)) { - return this.getUTCTimeStamp(dateStr); - } - - var output = Date.parse(dateStr.replace(/-/g, '/').replace(/[a-z]+/gi, ' ')); - output = this.getUTCTimeStamp(output); - return output; - } // https://stackoverflow.com/a/11252167/6495043 - - }, { - key: "treatAsUtc", - value: function treatAsUtc(dateStr) { - var result = new Date(dateStr); - result.setMinutes(result.getMinutes() - result.getTimezoneOffset()); - return result; - } // http://stackoverflow.com/questions/14638018/current-time-formatting-with-javascript#answer-14638191 - - }, { - key: "formatDate", - value: function formatDate(date, format) { - var utc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var convertToUTC = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; - var locale = this.w.globals.locale; - var MMMM = ['\x00'].concat(_toConsumableArray(locale.months)); - var MMM = ['\x01'].concat(_toConsumableArray(locale.shortMonths)); - var dddd = ['\x02'].concat(_toConsumableArray(locale.days)); - var ddd = ['\x03'].concat(_toConsumableArray(locale.shortDays)); - - function ii(i, len) { - var s = i + ''; - len = len || 2; - - while (s.length < len) { - s = '0' + s; - } - - return s; - } - - if (convertToUTC) { - date = this.treatAsUtc(date); - } - - var y = utc ? date.getUTCFullYear() : date.getFullYear(); - format = format.replace(/(^|[^\\])yyyy+/g, '$1' + y); - format = format.replace(/(^|[^\\])yy/g, '$1' + y.toString().substr(2, 2)); - format = format.replace(/(^|[^\\])y/g, '$1' + y); - var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1; - format = format.replace(/(^|[^\\])MMMM+/g, '$1' + MMMM[0]); - format = format.replace(/(^|[^\\])MMM/g, '$1' + MMM[0]); - format = format.replace(/(^|[^\\])MM/g, '$1' + ii(M)); - format = format.replace(/(^|[^\\])M/g, '$1' + M); - var d = utc ? date.getUTCDate() : date.getDate(); - format = format.replace(/(^|[^\\])dddd+/g, '$1' + dddd[0]); - format = format.replace(/(^|[^\\])ddd/g, '$1' + ddd[0]); - format = format.replace(/(^|[^\\])dd/g, '$1' + ii(d)); - format = format.replace(/(^|[^\\])d/g, '$1' + d); - var H = utc ? date.getUTCHours() : date.getHours(); - format = format.replace(/(^|[^\\])HH+/g, '$1' + ii(H)); - format = format.replace(/(^|[^\\])H/g, '$1' + H); - var h = H > 12 ? H - 12 : H === 0 ? 12 : H; - format = format.replace(/(^|[^\\])hh+/g, '$1' + ii(h)); - format = format.replace(/(^|[^\\])h/g, '$1' + h); - var m = utc ? date.getUTCMinutes() : date.getMinutes(); - format = format.replace(/(^|[^\\])mm+/g, '$1' + ii(m)); - format = format.replace(/(^|[^\\])m/g, '$1' + m); - var s = utc ? date.getUTCSeconds() : date.getSeconds(); - format = format.replace(/(^|[^\\])ss+/g, '$1' + ii(s)); - format = format.replace(/(^|[^\\])s/g, '$1' + s); - var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds(); - format = format.replace(/(^|[^\\])fff+/g, '$1' + ii(f, 3)); - f = Math.round(f / 10); - format = format.replace(/(^|[^\\])ff/g, '$1' + ii(f)); - f = Math.round(f / 10); - format = format.replace(/(^|[^\\])f/g, '$1' + f); - var T = H < 12 ? 'AM' : 'PM'; - format = format.replace(/(^|[^\\])TT+/g, '$1' + T); - format = format.replace(/(^|[^\\])T/g, '$1' + T.charAt(0)); - var t = T.toLowerCase(); - format = format.replace(/(^|[^\\])tt+/g, '$1' + t); - format = format.replace(/(^|[^\\])t/g, '$1' + t.charAt(0)); - var tz = -date.getTimezoneOffset(); - var K = utc || !tz ? 'Z' : tz > 0 ? '+' : '-'; - - if (!utc) { - tz = Math.abs(tz); - var tzHrs = Math.floor(tz / 60); - var tzMin = tz % 60; - K += ii(tzHrs) + ':' + ii(tzMin); - } - - format = format.replace(/(^|[^\\])K/g, '$1' + K); - var day = (utc ? date.getUTCDay() : date.getDay()) + 1; - format = format.replace(new RegExp(dddd[0], 'g'), dddd[day]); - format = format.replace(new RegExp(ddd[0], 'g'), ddd[day]); - format = format.replace(new RegExp(MMMM[0], 'g'), MMMM[M]); - format = format.replace(new RegExp(MMM[0], 'g'), MMM[M]); - format = format.replace(/\\(.)/g, '$1'); - return format; - } - }, { - key: "getTimeUnitsfromTimestamp", - value: function getTimeUnitsfromTimestamp(minX, maxX) { - var w = this.w; - - if (w.config.xaxis.min !== undefined) { - minX = w.config.xaxis.min; - } - - if (w.config.xaxis.max !== undefined) { - maxX = w.config.xaxis.max; - } - - var minYear = new Date(minX).getFullYear(); - var maxYear = new Date(maxX).getFullYear(); - var minMonth = new Date(minX).getMonth(); - var maxMonth = new Date(maxX).getMonth(); - var minDate = new Date(minX).getDate(); - var maxDate = new Date(maxX).getDate(); - var minHour = new Date(minX).getHours(); - var maxHour = new Date(maxX).getHours(); - var minMinute = new Date(minX).getMinutes(); - var maxMinute = new Date(maxX).getMinutes(); - return { - minMinute: minMinute, - maxMinute: maxMinute, - minHour: minHour, - maxHour: maxHour, - minDate: minDate, - maxDate: maxDate, - minMonth: minMonth, - maxMonth: maxMonth, - minYear: minYear, - maxYear: maxYear - }; - } - }, { - key: "isLeapYear", - value: function isLeapYear(year) { - return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; - } - }, { - key: "calculcateLastDaysOfMonth", - value: function calculcateLastDaysOfMonth(month, year, subtract) { - var days = this.determineDaysOfMonths(month, year); // whatever days we get, subtract the number of days asked - - return days - subtract; - } - }, { - key: "determineDaysOfYear", - value: function determineDaysOfYear(year) { - var days = 365; - - if (this.isLeapYear(year)) { - days = 366; - } - - return days; - } - }, { - key: "determineRemainingDaysOfYear", - value: function determineRemainingDaysOfYear(year, month, date) { - var dayOfYear = this.daysCntOfYear[month] + date; - if (month > 1 && this.isLeapYear()) dayOfYear++; - return dayOfYear; - } - }, { - key: "determineDaysOfMonths", - value: function determineDaysOfMonths(month, year) { - var days = 30; - month = Utils.monthMod(month); - - switch (true) { - case this.months30.indexOf(month) > -1: - if (month === 2) { - if (this.isLeapYear(year)) { - days = 29; - } else { - days = 28; - } - } - - break; - - case this.months31.indexOf(month) > -1: - days = 31; - break; - - default: - days = 31; - break; - } - - return days; - } - }]); - - return DateTime; - }(); - - /** - * ApexCharts Default Class for setting default options for all chart types. - * - * @module Defaults - **/ - - var Defaults = - /*#__PURE__*/ - function () { - function Defaults(opts) { - _classCallCheck(this, Defaults); - - this.opts = opts; - } - - _createClass(Defaults, [{ - key: "line", - value: function line() { - return { - chart: { - animations: { - easing: 'swing' - } - }, - dataLabels: { - enabled: false - }, - stroke: { - width: 5, - curve: 'straight' - }, - markers: { - size: 0, - hover: { - sizeOffset: 6 - } - }, - xaxis: { - crosshairs: { - width: 1 - } - } - }; - } - }, { - key: "sparkline", - value: function sparkline(defaults) { - this.opts.yaxis[0].labels.show = false; - this.opts.yaxis[0].floating = true; - var ret = { - grid: { - show: false, - padding: { - left: 0, - right: 0, - top: 0, - bottom: 0 - } - }, - legend: { - show: false - }, - xaxis: { - labels: { - show: false - }, - tooltip: { - enabled: false - }, - axisBorder: { - show: false - } - }, - chart: { - toolbar: { - show: false - }, - zoom: { - enabled: false - } - }, - dataLabels: { - enabled: false - } - }; - return Utils.extend(defaults, ret); - } - }, { - key: "bar", - value: function bar() { - return { - chart: { - stacked: false, - animations: { - easing: 'swing' - } - }, - plotOptions: { - bar: { - dataLabels: { - position: 'center' - } - } - }, - dataLabels: { - style: { - colors: ['#fff'] - } - }, - stroke: { - width: 0 - }, - fill: { - opacity: 0.85 - }, - legend: { - markers: { - shape: 'square', - radius: 2, - size: 8 - } - }, - tooltip: { - shared: false - }, - xaxis: { - tooltip: { - enabled: false - }, - crosshairs: { - width: 'barWidth', - position: 'back', - fill: { - type: 'gradient' - }, - dropShadow: { - enabled: false - }, - stroke: { - width: 0 - } - } - } - }; - } - }, { - key: "candlestick", - value: function candlestick() { - return { - stroke: { - width: 1, - colors: ['#333'] - }, - dataLabels: { - enabled: false - }, - tooltip: { - shared: true, - custom: function custom(_ref) { - var seriesIndex = _ref.seriesIndex, - dataPointIndex = _ref.dataPointIndex, - w = _ref.w; - var o = w.globals.seriesCandleO[seriesIndex][dataPointIndex]; - var h = w.globals.seriesCandleH[seriesIndex][dataPointIndex]; - var l = w.globals.seriesCandleL[seriesIndex][dataPointIndex]; - var c = w.globals.seriesCandleC[seriesIndex][dataPointIndex]; - return '
' + '
Open: ' + o + '
' + '
High: ' + h + '
' + '
Low: ' + l + '
' + '
Close: ' + c + '
' + '
'; - } - }, - states: { - active: { - filter: { - type: 'none' - } - } - }, - xaxis: { - crosshairs: { - width: 1 - } - } - }; - } - }, { - key: "rangeBar", - value: function rangeBar() { - return { - stroke: { - width: 0 - }, - plotOptions: { - bar: { - dataLabels: { - position: 'center' - } - } - }, - dataLabels: { - enabled: false, - formatter: function formatter(val, _ref2) { - var ctx = _ref2.ctx, - seriesIndex = _ref2.seriesIndex, - dataPointIndex = _ref2.dataPointIndex, - w = _ref2.w; - var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex]; - var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex]; - return end - start; - }, - style: { - colors: ['#fff'] - } - }, - tooltip: { - shared: false, - followCursor: true, - custom: function custom(_ref3) { - var ctx = _ref3.ctx, - seriesIndex = _ref3.seriesIndex, - dataPointIndex = _ref3.dataPointIndex, - w = _ref3.w; - var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex]; - var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex]; - var startVal = ''; - var endVal = ''; - var color = w.globals.colors[seriesIndex]; - - if (w.config.tooltip.x.formatter === undefined) { - if (w.config.xaxis.type === 'datetime') { - var datetimeObj = new DateTime(ctx); - startVal = datetimeObj.formatDate(new Date(start), w.config.tooltip.x.format, true, true); - endVal = datetimeObj.formatDate(new Date(end), w.config.tooltip.x.format, true, true); - } else { - startVal = start; - endVal = end; - } - } else { - startVal = w.config.tooltip.x.formatter(start); - endVal = w.config.tooltip.x.formatter(end); - } - - var ylabel = w.globals.labels[dataPointIndex]; - return '
' + '
' + (w.config.series[seriesIndex].name ? w.config.series[seriesIndex].name : '') + '
' + '
' + ylabel + ': ' + startVal + ' - ' + endVal + '
' + '
'; - } - }, - xaxis: { - tooltip: { - enabled: false - }, - crosshairs: { - stroke: { - width: 0 - } - } - } - }; - } - }, { - key: "area", - value: function area() { - return { - stroke: { - width: 4 - }, - fill: { - type: 'gradient', - gradient: { - inverseColors: false, - shade: 'light', - type: 'vertical', - opacityFrom: 0.65, - opacityTo: 0.5, - stops: [0, 100, 100] - } - }, - markers: { - size: 0, - hover: { - sizeOffset: 6 - } - }, - tooltip: { - followCursor: false - } - }; - } - }, { - key: "brush", - value: function brush(defaults) { - var ret = { - chart: { - toolbar: { - autoSelected: 'selection', - show: false - }, - zoom: { - enabled: false - } - }, - dataLabels: { - enabled: false - }, - stroke: { - width: 1 - }, - tooltip: { - enabled: false - }, - xaxis: { - tooltip: { - enabled: false - } - } - }; - return Utils.extend(defaults, ret); - } - }, { - key: "stacked100", - value: function stacked100() { - var _this = this; - - this.opts.dataLabels = this.opts.dataLabels || {}; - this.opts.dataLabels.formatter = this.opts.dataLabels.formatter || undefined; - var existingDataLabelFormatter = this.opts.dataLabels.formatter; - this.opts.yaxis.forEach(function (yaxe, index) { - _this.opts.yaxis[index].min = 0; - _this.opts.yaxis[index].max = 100; - }); - var isBar = this.opts.chart.type === 'bar'; - - if (isBar) { - this.opts.dataLabels.formatter = existingDataLabelFormatter || function (val) { - if (typeof val === 'number') { - return val ? val.toFixed(0) + '%' : val; - } - - return val; - }; - } - } // This function removes the left and right spacing in chart for line/area/scatter if xaxis type = category for those charts by converting xaxis = numeric. Numeric/Datetime xaxis prevents the unnecessary spacing in the left/right of the chart area - - }, { - key: "bubble", - value: function bubble() { - return { - dataLabels: { - style: { - colors: ['#fff'] - } - }, - tooltip: { - shared: false, - intersect: true - }, - xaxis: { - crosshairs: { - width: 0 - } - }, - fill: { - type: 'solid', - gradient: { - shade: 'light', - inverse: true, - shadeIntensity: 0.55, - opacityFrom: 0.4, - opacityTo: 0.8 - } - } - }; - } - }, { - key: "scatter", - value: function scatter() { - return { - dataLabels: { - enabled: false - }, - tooltip: { - shared: false, - intersect: true - }, - markers: { - size: 6, - strokeWidth: 2, - hover: { - sizeOffset: 2 - } - } - }; - } - }, { - key: "heatmap", - value: function heatmap() { - return { - chart: { - stacked: false, - zoom: { - enabled: false - } - }, - fill: { - opacity: 1 - }, - dataLabels: { - style: { - colors: ['#fff'] - } - }, - stroke: { - colors: ['#fff'] - }, - tooltip: { - followCursor: true, - marker: { - show: false - }, - x: { - show: false - } - }, - legend: { - position: 'top', - markers: { - shape: 'square', - size: 10, - offsetY: 2 - } - }, - grid: { - padding: { - right: 20 - } - } - }; - } - }, { - key: "pie", - value: function pie() { - return { - chart: { - toolbar: { - show: false - } - }, - plotOptions: { - pie: { - donut: { - labels: { - show: false - } - } - } - }, - dataLabels: { - formatter: function formatter(val) { - return val.toFixed(1) + '%'; - }, - style: { - colors: ['#fff'] - }, - dropShadow: { - enabled: true - } - }, - stroke: { - colors: ['#fff'] - }, - fill: { - opacity: 1, - gradient: { - shade: 'dark', - shadeIntensity: 0.35, - inverseColors: false, - stops: [0, 100, 100] - } - }, - padding: { - right: 0, - left: 0 - }, - tooltip: { - theme: 'dark', - fillSeriesColor: true - }, - legend: { - position: 'right' - } - }; - } - }, { - key: "donut", - value: function donut() { - return { - chart: { - toolbar: { - show: false - } - }, - dataLabels: { - formatter: function formatter(val) { - return val.toFixed(1) + '%'; - }, - style: { - colors: ['#fff'] - }, - dropShadow: { - enabled: true - } - }, - stroke: { - colors: ['#fff'] - }, - fill: { - opacity: 1, - gradient: { - shade: 'dark', - shadeIntensity: 0.4, - inverseColors: false, - type: 'vertical', - opacityFrom: 1, - opacityTo: 1, - stops: [70, 98, 100] - } - }, - padding: { - right: 0, - left: 0 - }, - tooltip: { - theme: 'dark', - fillSeriesColor: true - }, - legend: { - position: 'right' - } - }; - } - }, { - key: "radar", - value: function radar() { - this.opts.yaxis[0].labels.style.fontSize = '13px'; - this.opts.yaxis[0].labels.offsetY = 6; - return { - dataLabels: { - enabled: true, - style: { - colors: ['#a8a8a8'], - fontSize: '11px' - } - }, - stroke: { - width: 2 - }, - markers: { - size: 3, - strokeWidth: 1, - strokeOpacity: 1 - }, - fill: { - opacity: 0.2 - }, - tooltip: { - shared: false, - intersect: true, - followCursor: true - }, - grid: { - show: false - }, - xaxis: { - tooltip: { - enabled: false - }, - crosshairs: { - show: false - } - } - }; - } - }, { - key: "radialBar", - value: function radialBar() { - return { - chart: { - animations: { - dynamicAnimation: { - enabled: true, - speed: 800 - } - }, - toolbar: { - show: false - } - }, - fill: { - gradient: { - shade: 'dark', - shadeIntensity: 0.4, - inverseColors: false, - type: 'diagonal2', - opacityFrom: 1, - opacityTo: 1, - stops: [70, 98, 100] - } - }, - padding: { - right: 0, - left: 0 - }, - legend: { - show: false, - position: 'right' - }, - tooltip: { - enabled: false, - fillSeriesColor: true - } - }; - } - }], [{ - key: "convertCatToNumeric", - value: function convertCatToNumeric(opts) { - opts.xaxis.type = 'numeric'; - opts.xaxis.convertedCatToNumeric = true; - opts.xaxis.labels = opts.xaxis.labels || {}; - - opts.xaxis.labels.formatter = opts.xaxis.labels.formatter || function (val) { - return val; - }; - - opts.chart = opts.chart || {}; - opts.chart.zoom = opts.chart.zoom || window.Apex.chart && window.Apex.chart.zoom || {}; - var defaultFormatter = opts.xaxis.labels.formatter; - var labels = opts.xaxis.categories && opts.xaxis.categories.length ? opts.xaxis.categories : opts.labels; - - if (labels && labels.length) { - opts.xaxis.labels.formatter = function (val) { - return defaultFormatter(labels[val - 1]); - }; - } - - opts.xaxis.categories = []; - opts.labels = []; - opts.chart.zoom.enabled = opts.chart.zoom.enabled || false; - return opts; - } - }]); - - return Defaults; - }(); - - /* - ** Util functions which are dependent on ApexCharts instance - */ - var CoreUtils = - /*#__PURE__*/ - function () { - function CoreUtils(ctx) { - _classCallCheck(this, CoreUtils); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(CoreUtils, [{ - key: "getStackedSeriesTotals", - - /** - * @memberof CoreUtils - * returns the sum of all individual values in a multiple stacked series - * Eg. w.globals.series = [[32,33,43,12], [2,3,5,1]] - * @return [34,36,48,13] - **/ - value: function getStackedSeriesTotals() { - var w = this.w; - var total = []; - - for (var i = 0; i < w.globals.series[w.globals.maxValsInArrayIndex].length; i++) { - var t = 0; - - for (var j = 0; j < w.globals.series.length; j++) { - t += w.globals.series[j][i]; - } - - total.push(t); - } - - w.globals.stackedSeriesTotals = total; - return total; - } // get total of the all values inside all series - - }, { - key: "getSeriesTotalByIndex", - value: function getSeriesTotalByIndex() { - var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - - if (index === null) { - // non-plot chart types - pie / donut / circle - return this.w.config.series.reduce(function (acc, cur) { - return acc + cur; - }, 0); - } else { - // axis charts - supporting multiple series - return this.w.globals.series[index].reduce(function (acc, cur) { - return acc + cur; - }, 0); - } - } - }, { - key: "isSeriesNull", - value: function isSeriesNull() { - var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var r = []; - - if (index === null) { - // non-plot chart types - pie / donut / circle - r = this.w.config.series.filter(function (d) { - return d !== null; - }); - } else { - // axis charts - supporting multiple series - r = this.w.globals.series[index].filter(function (d) { - return d !== null; - }); - } - - return r.length === 0; - } - }, { - key: "seriesHaveSameValues", - value: function seriesHaveSameValues(index) { - return this.w.globals.series[index].every(function (val, i, arr) { - return val === arr[0]; - }); - } // maxValsInArrayIndex is the index of series[] which has the largest number of items - - }, { - key: "getLargestSeries", - value: function getLargestSeries() { - var w = this.w; - w.globals.maxValsInArrayIndex = w.globals.series.map(function (a) { - return a.length; - }).indexOf(Math.max.apply(Math, w.globals.series.map(function (a) { - return a.length; - }))); - } - }, { - key: "getLargestMarkerSize", - value: function getLargestMarkerSize() { - var w = this.w; - var size = 0; - w.globals.markers.size.forEach(function (m) { - size = Math.max(size, m); - }); - w.globals.markers.largestSize = size; - return size; - } - /** - * @memberof Core - * returns the sum of all values in a series - * Eg. w.globals.series = [[32,33,43,12], [2,3,5,1]] - * @return [120, 11] - **/ - - }, { - key: "getSeriesTotals", - value: function getSeriesTotals() { - var w = this.w; - w.globals.seriesTotals = w.globals.series.map(function (ser, index) { - var total = 0; - - if (Array.isArray(ser)) { - for (var j = 0; j < ser.length; j++) { - total += ser[j]; - } - } else { - // for pie/donuts/gauges - total += ser; - } - - return total; - }); - } - }, { - key: "getSeriesTotalsXRange", - value: function getSeriesTotalsXRange(minX, maxX) { - var w = this.w; - var seriesTotalsXRange = w.globals.series.map(function (ser, index) { - var total = 0; - - for (var j = 0; j < ser.length; j++) { - if (w.globals.seriesX[index][j] > minX && w.globals.seriesX[index][j] < maxX) { - total += ser[j]; - } - } - - return total; - }); - return seriesTotalsXRange; - } - /** - * @memberof CoreUtils - * returns the percentage value of all individual values which can be used in a 100% stacked series - * Eg. w.globals.series = [[32, 33, 43, 12], [2, 3, 5, 1]] - * @return [[94.11, 91.66, 89.58, 92.30], [5.88, 8.33, 10.41, 7.7]] - **/ - - }, { - key: "getPercentSeries", - value: function getPercentSeries() { - var w = this.w; - w.globals.seriesPercent = w.globals.series.map(function (ser, index) { - var seriesPercent = []; - - if (Array.isArray(ser)) { - for (var j = 0; j < ser.length; j++) { - var total = w.globals.stackedSeriesTotals[j]; - var percent = 100 * ser[j] / total; - seriesPercent.push(percent); - } - } else { - var _total = w.globals.seriesTotals.reduce(function (acc, val) { - return acc + val; - }, 0); - - var _percent = 100 * ser / _total; - - seriesPercent.push(_percent); - } - - return seriesPercent; - }); - } - }, { - key: "getCalculatedRatios", - value: function getCalculatedRatios() { - var gl = this.w.globals; - var yRatio = []; - var invertedYRatio = 0; - var xRatio = 0; - var initialXRatio = 0; - var invertedXRatio = 0; - var zRatio = 0; - var baseLineY = []; - var baseLineInvertedY = 0.1; - var baseLineX = 0; - gl.yRange = []; - - if (gl.isMultipleYAxis) { - for (var i = 0; i < gl.minYArr.length; i++) { - gl.yRange.push(Math.abs(gl.minYArr[i] - gl.maxYArr[i])); - baseLineY.push(0); - } - } else { - gl.yRange.push(Math.abs(gl.minY - gl.maxY)); - } - - gl.xRange = Math.abs(gl.maxX - gl.minX); - gl.zRange = Math.abs(gl.maxZ - gl.minZ); // multiple y axis - - for (var _i = 0; _i < gl.yRange.length; _i++) { - yRatio.push(gl.yRange[_i] / gl.gridHeight); - } - - xRatio = gl.xRange / gl.gridWidth; - initialXRatio = Math.abs(gl.initialmaxX - gl.initialminX) / gl.gridWidth; - invertedYRatio = gl.yRange / gl.gridWidth; - invertedXRatio = gl.xRange / gl.gridHeight; - zRatio = gl.zRange / gl.gridHeight * 16; - - if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) { - // Negative numbers present in series - gl.hasNegs = true; - } - - if (gl.isMultipleYAxis) { - baseLineY = []; // baseline variables is the 0 of the yaxis which will be needed when there are negatives - - for (var _i2 = 0; _i2 < yRatio.length; _i2++) { - baseLineY.push(-gl.minYArr[_i2] / yRatio[_i2]); - } - } else { - baseLineY.push(-gl.minY / yRatio[0]); - - if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) { - baseLineInvertedY = -gl.minY / invertedYRatio; // this is for bar chart - - baseLineX = gl.minX / xRatio; - } - } - - return { - yRatio: yRatio, - invertedYRatio: invertedYRatio, - zRatio: zRatio, - xRatio: xRatio, - initialXRatio: initialXRatio, - invertedXRatio: invertedXRatio, - baseLineInvertedY: baseLineInvertedY, - baseLineY: baseLineY, - baseLineX: baseLineX - }; - } - }, { - key: "getLogSeries", - value: function getLogSeries(series) { - var w = this.w; - w.globals.seriesLog = series.map(function (s, i) { - if (w.config.yaxis[i] && w.config.yaxis[i].logarithmic) { - return s.map(function (d) { - if (d === null) return null; - var logVal = (Math.log(d) - Math.log(w.globals.minYArr[i])) / (Math.log(w.globals.maxYArr[i]) - Math.log(w.globals.minYArr[i])); - return logVal; - }); - } else { - return s; - } - }); - return w.globals.seriesLog; - } - }, { - key: "getLogYRatios", - value: function getLogYRatios(yRatio) { - var _this = this; - - var w = this.w; - var gl = this.w.globals; - gl.yLogRatio = yRatio.slice(); - gl.logYRange = gl.yRange.map(function (yRange, i) { - if (w.config.yaxis[i] && _this.w.config.yaxis[i].logarithmic) { - var maxY = -Number.MAX_VALUE; - var minY = Number.MIN_VALUE; - var range = 1; - gl.seriesLog.forEach(function (s, si) { - s.forEach(function (v) { - if (w.config.yaxis[si] && w.config.yaxis[si].logarithmic) { - maxY = Math.max(v, maxY); - minY = Math.min(v, minY); - } - }); - }); - range = Math.pow(gl.yRange[i], Math.abs(minY - maxY) / gl.yRange[i]); - gl.yLogRatio[i] = range / gl.gridHeight; - return range; - } - }); - return gl.yLogRatio; - } // Some config objects can be array - and we need to extend them correctly - - }], [{ - key: "checkComboSeries", - value: function checkComboSeries(series) { - var comboCharts = false; - var comboChartsHasBars = false; // if user specified a type in series too, turn on comboCharts flag - - if (series.length && typeof series[0].type !== 'undefined') { - comboCharts = true; - series.forEach(function (s) { - if (s.type === 'bar' || s.type === 'column') { - comboChartsHasBars = true; - } - }); - } - - return { - comboCharts: comboCharts, - comboChartsHasBars: comboChartsHasBars - }; - } - }, { - key: "extendArrayProps", - value: function extendArrayProps(configInstance, options) { - if (options.yaxis) { - options = configInstance.extendYAxis(options); - } - - if (options.annotations) { - if (options.annotations.yaxis) { - options = configInstance.extendYAxisAnnotations(options); - } - - if (options.annotations.xaxis) { - options = configInstance.extendXAxisAnnotations(options); - } - - if (options.annotations.points) { - options = configInstance.extendPointAnnotations(options); - } - } - - return options; - } - }]); - - return CoreUtils; - }(); - - /** - * ApexCharts Config Class for extending user options with pre-defined ApexCharts config. - * - * @module Config - **/ - - var Config = - /*#__PURE__*/ - function () { - function Config(opts) { - _classCallCheck(this, Config); - - this.opts = opts; - } - - _createClass(Config, [{ - key: "init", - value: function init() { - var opts = this.opts; - var options = new Options(); - var defaults = new Defaults(opts); - this.chartType = opts.chart.type; - - if (this.chartType === 'histogram') { - // technically, a histogram can be drawn by a column chart with no spaces in between - opts.chart.type = 'bar'; - opts = Utils.extend({ - plotOptions: { - bar: { - columnWidth: '99.99%' - } - } - }, opts); - } - - opts.series = this.checkEmptySeries(opts.series); - opts = this.extendYAxis(opts); - opts = this.extendAnnotations(opts); - var config = options.init(); - var newDefaults = {}; - - if (opts && _typeof(opts) === 'object') { - var chartDefaults = {}; - - switch (this.chartType) { - case 'line': - chartDefaults = defaults.line(); - break; - - case 'area': - chartDefaults = defaults.area(); - break; - - case 'bar': - chartDefaults = defaults.bar(); - break; - - case 'candlestick': - chartDefaults = defaults.candlestick(); - break; - - case 'rangeBar': - chartDefaults = defaults.rangeBar(); - break; - - case 'histogram': - chartDefaults = defaults.bar(); - break; - - case 'bubble': - chartDefaults = defaults.bubble(); - break; - - case 'scatter': - chartDefaults = defaults.scatter(); - break; - - case 'heatmap': - chartDefaults = defaults.heatmap(); - break; - - case 'pie': - chartDefaults = defaults.pie(); - break; - - case 'donut': - chartDefaults = defaults.donut(); - break; - - case 'radar': - chartDefaults = defaults.radar(); - break; - - case 'radialBar': - chartDefaults = defaults.radialBar(); - break; - - default: - chartDefaults = defaults.line(); - } - - if (opts.chart.brush && opts.chart.brush.enabled) { - chartDefaults = defaults.brush(chartDefaults); - } - - if (opts.chart.stacked && opts.chart.stackType === '100%') { - defaults.stacked100(); - } // If user has specified a dark theme, make the tooltip dark too - - - this.checkForDarkTheme(window.Apex); // check global window Apex options - - this.checkForDarkTheme(opts); // check locally passed options - - opts.xaxis = opts.xaxis || window.Apex.xaxis || {}; - var combo = CoreUtils.checkComboSeries(opts.series); - - if ((opts.chart.type === 'line' || opts.chart.type === 'area' || opts.chart.type === 'scatter') && !combo.comboChartsHasBars && opts.xaxis.type !== 'datetime' && opts.xaxis.type !== 'numeric' && opts.xaxis.tickPlacement !== 'between') { - opts = Defaults.convertCatToNumeric(opts); - } - - if (opts.chart.sparkline && opts.chart.sparkline.enabled || window.Apex.chart && window.Apex.chart.sparkline && window.Apex.chart.sparkline.enabled) { - chartDefaults = defaults.sparkline(chartDefaults); - } - - newDefaults = Utils.extend(config, chartDefaults); - } // config should cascade in this fashion - // default-config < global-apex-variable-config < user-defined-config - // get GLOBALLY defined options and merge with the default config - - - var mergedWithDefaultConfig = Utils.extend(newDefaults, window.Apex); // get the merged config and extend with user defined config - - config = Utils.extend(mergedWithDefaultConfig, opts); // some features are not supported. those mismatches should be handled - - config = this.handleUserInputErrors(config); - return config; - } - }, { - key: "extendYAxis", - value: function extendYAxis(opts) { - var options = new Options(); - - if (typeof opts.yaxis === 'undefined') { - opts.yaxis = {}; - } // extend global yaxis config (only if object is provided / not an array) - - - if (opts.yaxis.constructor !== Array && window.Apex.yaxis && window.Apex.yaxis.constructor !== Array) { - opts.yaxis = Utils.extend(opts.yaxis, window.Apex.yaxis); - } // as we can't extend nested object's array with extend, we need to do it first - // user can provide either an array or object in yaxis config - - - if (opts.yaxis.constructor !== Array) { - // convert the yaxis to array if user supplied object - opts.yaxis = [Utils.extend(options.yAxis, opts.yaxis)]; - } else { - opts.yaxis = Utils.extendArray(opts.yaxis, options.yAxis); - } - - return opts; - } // annotations also accepts array, so we need to extend them manually - - }, { - key: "extendAnnotations", - value: function extendAnnotations(opts) { - if (typeof opts.annotations === 'undefined') { - opts.annotations = {}; - opts.annotations.yaxis = []; - opts.annotations.xaxis = []; - opts.annotations.points = []; - } - - opts = this.extendYAxisAnnotations(opts); - opts = this.extendXAxisAnnotations(opts); - opts = this.extendPointAnnotations(opts); - return opts; - } - }, { - key: "extendYAxisAnnotations", - value: function extendYAxisAnnotations(opts) { - var options = new Options(); - opts.annotations.yaxis = Utils.extendArray(typeof opts.annotations.yaxis !== 'undefined' ? opts.annotations.yaxis : [], options.yAxisAnnotation); - return opts; - } - }, { - key: "extendXAxisAnnotations", - value: function extendXAxisAnnotations(opts) { - var options = new Options(); - opts.annotations.xaxis = Utils.extendArray(typeof opts.annotations.xaxis !== 'undefined' ? opts.annotations.xaxis : [], options.xAxisAnnotation); - return opts; - } - }, { - key: "extendPointAnnotations", - value: function extendPointAnnotations(opts) { - var options = new Options(); - opts.annotations.points = Utils.extendArray(typeof opts.annotations.points !== 'undefined' ? opts.annotations.points : [], options.pointAnnotation); - return opts; - } - }, { - key: "checkForDarkTheme", - value: function checkForDarkTheme(opts) { - if (opts.theme && opts.theme.mode === 'dark') { - if (!opts.tooltip) { - opts.tooltip = {}; - } - - if (opts.tooltip.theme !== 'light') { - opts.tooltip.theme = 'dark'; - } - - if (!opts.chart.foreColor) { - opts.chart.foreColor = '#f6f7f8'; - } - - if (!opts.theme.palette) { - opts.theme.palette = 'palette4'; - } - } - } - }, { - key: "checkEmptySeries", - value: function checkEmptySeries(ser) { - if (ser.length === 0) { - return [{ - data: [] - }]; - } - - return ser; - } - }, { - key: "handleUserInputErrors", - value: function handleUserInputErrors(opts) { - var config = opts; // conflicting tooltip option. intersect makes sure to focus on 1 point at a time. Shared cannot be used along with it - - if (config.tooltip.shared && config.tooltip.intersect) { - throw new Error('tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.'); - } - - if (config.chart.scroller) { - console.warn('Scroller has been deprecated since v2.0.0. Please remove the configuration for chart.scroller'); - } - - if ((config.chart.type === 'bar' || config.chart.type === 'rangeBar') && config.plotOptions.bar.horizontal) { - // No multiple yaxis for bars - if (config.yaxis.length > 1) { - throw new Error('Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false'); - } // if yaxis is reversed in horizontal bar chart, you should draw the y-axis on right side - - - if (config.yaxis[0].reversed) { - config.yaxis[0].opposite = true; - } - - config.xaxis.tooltip.enabled = false; // no xaxis tooltip for horizontal bar - - config.yaxis[0].tooltip.enabled = false; // no xaxis tooltip for horizontal bar - - config.chart.zoom.enabled = false; // no zooming for horz bars - } - - if (config.chart.type === 'bar' || config.chart.type === 'rangeBar') { - if (config.tooltip.shared) { - if (config.xaxis.crosshairs.width === 'barWidth' && config.series.length > 1) { - console.warn('crosshairs.width = "barWidth" is only supported in single series, not in a multi-series barChart.'); - config.xaxis.crosshairs.width = 'tickWidth'; - } - - if (config.plotOptions.bar.horizontal) { - config.states.hover.type = 'none'; - config.tooltip.shared = false; - } - - if (!config.tooltip.followCursor) { - console.warn('followCursor option in shared columns cannot be turned off. Please set %ctooltip.followCursor: true', 'color: blue;'); - config.tooltip.followCursor = true; - } - } - } - - if (config.chart.type === 'candlestick') { - if (config.yaxis[0].reversed) { - console.warn('Reversed y-axis in candlestick chart is not supported.'); - config.yaxis[0].reversed = false; - } - } - - if (config.chart.group && config.yaxis[0].labels.minWidth === 0) { - console.warn('It looks like you have multiple charts in synchronization. You must provide yaxis.labels.minWidth which must be EQUAL for all grouped charts to prevent incorrect behaviour.'); - } // if user supplied array for stroke width, it will only be applicable to line/area charts, for any other charts, revert back to Number - - - if (Array.isArray(config.stroke.width)) { - if (config.chart.type !== 'line' && config.chart.type !== 'area') { - console.warn('stroke.width option accepts array only for line and area charts. Reverted back to Number'); - config.stroke.width = config.stroke.width[0]; - } - } - - return config; - } - }]); - - return Config; - }(); - - var Globals = - /*#__PURE__*/ - function () { - function Globals() { - _classCallCheck(this, Globals); - } - - _createClass(Globals, [{ - key: "globalVars", - value: function globalVars(config) { - return { - chartID: null, - // chart ID - apexcharts-cuid - cuid: null, - // chart ID - random numbers excluding "apexcharts" part - events: { - beforeMount: [], - mounted: [], - updated: [], - clicked: [], - selection: [], - dataPointSelection: [], - zoomed: [], - scrolled: [] - }, - colors: [], - clientX: null, - clientY: null, - fill: { - colors: [] - }, - stroke: { - colors: [] - }, - dataLabels: { - style: { - colors: [] - } - }, - radarPolygons: { - fill: { - colors: [] - } - }, - markers: { - colors: [], - size: config.markers.size, - largestSize: 0 - }, - animationEnded: false, - isTouchDevice: 'ontouchstart' in window || navigator.msMaxTouchPoints, - isDirty: false, - // chart has been updated after the initial render. This is different than dataChanged property. isDirty means user manually called some method to update - initialConfig: null, - // we will store the first config user has set to go back when user finishes interactions like zooming and come out of it - lastXAxis: [], - lastYAxis: [], - series: [], - // the MAIN series array (y values) - seriesRangeStart: [], - // the clone of series becomes the start in range - seriesRangeEnd: [], - // the end values in range chart - seriesPercent: [], - // the percentage values of the given series - seriesTotals: [], - stackedSeriesTotals: [], - seriesX: [], - // store the numeric x values in this array (x values) - seriesZ: [], - // The 3rd "Z" dimension for bubbles chart (z values) - labels: [], - // store the text to draw on x axis - // Don't mutate the labels, many things including tooltips depends on it! - timelineLabels: [], - // store the timeline Labels in another variable - invertedTimelineLabels: [], - // for rangebar timeline - seriesNames: [], - // same as labels, used in non axis charts - noLabelsProvided: false, - // if user didn't provide any categories/labels or x values, fallback to 1,2,3,4... - allSeriesCollapsed: false, - collapsedSeries: [], - // when user collapses a series, it goes into this array - collapsedSeriesIndices: [], - // this stores the index of the collapsedSeries instead of whole object for quick access - ancillaryCollapsedSeries: [], - // when user collapses an "alwaysVisible" series, it goes into this array - ancillaryCollapsedSeriesIndices: [], - // this stores the index of the ancillaryCollapsedSeries whose y-axis is always visible - risingSeries: [], - // when user re-opens a collapsed series, it goes here - dataFormatXNumeric: false, - // boolean value to indicate user has passed numeric x values - selectedDataPoints: [], - ignoreYAxisIndexes: [], - // when series are being collapsed in multiple y axes, ignore certain index - padHorizontal: 0, - maxValsInArrayIndex: 0, - zoomEnabled: config.chart.toolbar.autoSelected === 'zoom' && config.chart.toolbar.tools.zoom && config.chart.zoom.enabled, - panEnabled: config.chart.toolbar.autoSelected === 'pan' && config.chart.toolbar.tools.pan, - selectionEnabled: config.chart.toolbar.autoSelected === 'selection' && config.chart.toolbar.tools.selection, - yaxis: null, - minY: Number.MIN_VALUE, - // is 5e-324, i.e. the smallest positive number - // NOTE: If there are multiple y axis, the first yaxis array element will be considered for all y values calculations. Rest all will be calculated based on that - maxY: -Number.MAX_VALUE, - // is -1.7976931348623157e+308 - // NOTE: The above note for minY applies here as well - minYArr: [], - maxYArr: [], - maxX: -Number.MAX_VALUE, - // is -1.7976931348623157e+308 - initialmaxX: -Number.MAX_VALUE, - minX: Number.MIN_VALUE, - // is 5e-324, i.e. the smallest positive number - initialminX: Number.MIN_VALUE, - minZ: Number.MIN_VALUE, - // Max Z value in charts with Z axis - maxZ: -Number.MAX_VALUE, - // Max Z value in charts with Z axis - minXDiff: Number.MAX_VALUE, - mousedown: false, - lastClientPosition: {}, - // don't reset this variable this the chart is destroyed. It is used to detect right or left mousemove in panning - visibleXRange: undefined, - yRange: [], - // this property is the absolute sum of positive and negative values [eg (-100 + 200 = 300)] - yAxis - zRange: 0, - // zAxis Range (for bubble charts) - xRange: 0, - // xAxis range - yValueDecimal: 0, - // are there floating numbers in the series. If yes, this represent the len of the decimals - total: 0, - SVGNS: 'http://www.w3.org/2000/svg', - // svg namespace - svgWidth: 0, - // the whole svg width - svgHeight: 0, - // the whole svg height - noData: false, - // whether there is any data to display or not - locale: {}, - // the current locale values will be preserved here for global access - dom: {}, - // for storing all dom nodes in this particular property - // elWrap: null, // the element that wraps everything - // elGraphical: null, // this contains lines/areas/bars/pies - // elGridRect: null, // paths going outside this area will be clipped - // elGridRectMask: null, // clipping will happen with this mask - // elGridRectMarkerMask: null, // clipping will happen with this mask - // elLegendWrap: null, // the whole legend area - // elDefs: null, // [defs] element - memory: { - methodsToExec: [] - }, - shouldAnimate: true, - skipLastTimelinelabel: false, - // when last label is cropped, skip drawing it - delayedElements: [], - // element which appear after animation has finished - axisCharts: true, - // chart type = line or area or bar - // (refer them also as plot charts in the code) - isXNumeric: false, - // bool: data was provided in a {[x,y], [x,y]} pattern - isDataXYZ: false, - // bool: data was provided in a {[x,y,z]} pattern - resized: false, - // bool: user has resized - resizeTimer: null, - // timeout function to make a small delay before - // drawing when user resized - comboCharts: false, - // bool: whether it's a combination of line/column - comboChartsHasBars: false, - // bool: whether it's a combination of line/column - dataChanged: false, - // bool: has data changed dynamically - previousPaths: [], - // array: when data is changed, it will animate from - // previous paths - seriesXvalues: [], - // we will need this in tooltip (it's x position) - // when we will have unequal x values, we will need - // some way to get x value depending on mouse pointer - seriesYvalues: [], - // we will need this when deciding which series - // user hovered on - seriesCandleO: [], - // candle stick open values - seriesCandleH: [], - // candle stick high values - seriesCandleL: [], - // candle stick low values - seriesCandleC: [], - // candle stick close values - allSeriesHasEqualX: true, - dataPoints: 0, - // the longest series length - pointsArray: [], - // store the points positions here to draw later on hover - // format is - [[x,y],[x,y]... [x,y]] - dataLabelsRects: [], - // store the positions of datalabels to prevent collision - lastDrawnDataLabelsIndexes: [], - hasNullValues: false, - // bool: whether series contains null values - easing: null, - // function: animation effect to apply - zoomed: false, - // whether user has zoomed or not - gridWidth: 0, - // drawable width of actual graphs (series paths) - gridHeight: 0, - // drawable height of actual graphs (series paths) - yAxisScale: [], - xAxisScale: null, - xAxisTicksPositions: [], - timescaleTicks: [], - rotateXLabels: false, - defaultLabels: false, - xLabelFormatter: undefined, - // formatter for x axis labels - yLabelFormatters: [], - xaxisTooltipFormatter: undefined, - // formatter for x axis tooltip - ttKeyFormatter: undefined, - ttVal: undefined, - ttZFormatter: undefined, - LINE_HEIGHT_RATIO: 1.618, - xAxisLabelsHeight: 0, - yAxisLabelsWidth: 0, - scaleX: 1, - scaleY: 1, - translateX: 0, - translateY: 0, - translateYAxisX: [], - yLabelsCoords: [], - yTitleCoords: [], - yAxisWidths: [], - translateXAxisY: 0, - translateXAxisX: 0, - tooltip: null, - tooltipOpts: null - }; - } - }, { - key: "init", - value: function init(config) { - var globals = this.globalVars(config); - globals.initialConfig = Utils.extend({}, config); - globals.initialSeries = JSON.parse(JSON.stringify(globals.initialConfig.series)); - globals.lastXAxis = JSON.parse(JSON.stringify(globals.initialConfig.xaxis)); - globals.lastYAxis = JSON.parse(JSON.stringify(globals.initialConfig.yaxis)); - return globals; - } - }]); - - return Globals; - }(); - - /** - * ApexCharts Base Class for extending user options with pre-defined ApexCharts config. - * - * @module Base - **/ - - var Base = - /*#__PURE__*/ - function () { - function Base(opts) { - _classCallCheck(this, Base); - - this.opts = opts; - } - - _createClass(Base, [{ - key: "init", - value: function init() { - var config = new Config(this.opts).init(); - var globals = new Globals().init(config); - var w = { - config: config, - globals: globals - }; - return w; - } - }]); - - return Base; - }(); - - /** - * ApexCharts Fill Class for setting fill options of the paths. - * - * @module Fill - **/ - - var Fill = - /*#__PURE__*/ - function () { - function Fill(ctx) { - _classCallCheck(this, Fill); - - this.ctx = ctx; - this.w = ctx.w; - this.opts = null; - this.seriesIndex = 0; - } - - _createClass(Fill, [{ - key: "clippedImgArea", - value: function clippedImgArea(params) { - var w = this.w; - var cnf = w.config; - var svgW = parseInt(w.globals.gridWidth); - var svgH = parseInt(w.globals.gridHeight); - var size = svgW > svgH ? svgW : svgH; - var fillImg = params.image; - var imgWidth = 0; - var imgHeight = 0; - - if (typeof params.width === 'undefined' && typeof params.height === 'undefined') { - if (cnf.fill.image.width !== undefined && cnf.fill.image.height !== undefined) { - imgWidth = cnf.fill.image.width + 1; - imgHeight = cnf.fill.image.height; - } else { - imgWidth = size + 1; - imgHeight = size; - } - } else { - imgWidth = params.width; - imgHeight = params.height; - } - - var elPattern = document.createElementNS(w.globals.SVGNS, 'pattern'); - Graphics.setAttrs(elPattern, { - id: params.patternID, - patternUnits: params.patternUnits ? params.patternUnits : 'userSpaceOnUse', - width: imgWidth + 'px', - height: imgHeight + 'px' - }); - var elImage = document.createElementNS(w.globals.SVGNS, 'image'); - elPattern.appendChild(elImage); - elImage.setAttributeNS('http://www.w3.org/1999/xlink', 'href', fillImg); - Graphics.setAttrs(elImage, { - x: 0, - y: 0, - preserveAspectRatio: 'none', - width: imgWidth + 'px', - height: imgHeight + 'px' - }); - elImage.style.opacity = params.opacity; - w.globals.dom.elDefs.node.appendChild(elPattern); - } - }, { - key: "getSeriesIndex", - value: function getSeriesIndex(opts) { - var w = this.w; - - if (w.config.chart.type === 'bar' && w.config.plotOptions.bar.distributed || w.config.chart.type === 'heatmap') { - this.seriesIndex = opts.seriesNumber; - } else { - this.seriesIndex = opts.seriesNumber % w.globals.series.length; - } - - return this.seriesIndex; - } - }, { - key: "fillPath", - value: function fillPath(opts) { - var w = this.w; - this.opts = opts; - var cnf = this.w.config; - var pathFill; - var patternFill, gradientFill; - this.seriesIndex = this.getSeriesIndex(opts); - var fillColors = this.getFillColors(); - var fillColor = fillColors[this.seriesIndex]; - - if (typeof fillColor === 'function') { - fillColor = fillColor({ - seriesIndex: this.seriesIndex, - value: opts.value, - w: w - }); - } - - var fillType = this.getFillType(this.seriesIndex); - var fillOpacity = Array.isArray(cnf.fill.opacity) ? cnf.fill.opacity[this.seriesIndex] : cnf.fill.opacity; - var defaultColor = fillColor; - - if (opts.color) { - fillColor = opts.color; - } - - if (fillColor.indexOf('rgb') === -1) { - defaultColor = Utils.hexToRgba(fillColor, fillOpacity); - } else { - if (fillColor.indexOf('rgba') > -1) { - fillOpacity = 0 + '.' + Utils.getOpacityFromRGBA(fillColors[this.seriesIndex]); - } - } - - if (fillType === 'pattern') { - patternFill = this.handlePatternFill(patternFill, fillColor, fillOpacity, defaultColor); - } - - if (fillType === 'gradient') { - gradientFill = this.handleGradientFill(gradientFill, fillColor, fillOpacity, this.seriesIndex); - } - - if (cnf.fill.image.src.length > 0 && fillType === 'image') { - if (opts.seriesNumber < cnf.fill.image.src.length) { - this.clippedImgArea({ - opacity: fillOpacity, - image: cnf.fill.image.src[opts.seriesNumber], - patternUnits: opts.patternUnits, - patternID: "pattern".concat(w.globals.cuid).concat(opts.seriesNumber + 1) - }); - pathFill = "url(#pattern".concat(w.globals.cuid).concat(opts.seriesNumber + 1, ")"); - } else { - pathFill = defaultColor; - } - } else if (fillType === 'gradient') { - pathFill = gradientFill; - } else if (fillType === 'pattern') { - pathFill = patternFill; - } else { - pathFill = defaultColor; - } // override pattern/gradient if opts.solid is true - - - if (opts.solid) { - pathFill = defaultColor; - } - - return pathFill; - } - }, { - key: "getFillType", - value: function getFillType(seriesIndex) { - var w = this.w; - - if (Array.isArray(w.config.fill.type)) { - return w.config.fill.type[seriesIndex]; - } else { - return w.config.fill.type; - } - } - }, { - key: "getFillColors", - value: function getFillColors() { - var w = this.w; - var cnf = w.config; - var opts = this.opts; - var fillColors = []; - - if (w.globals.comboCharts) { - if (w.config.series[this.seriesIndex].type === 'line') { - if (w.globals.stroke.colors instanceof Array) { - fillColors = w.globals.stroke.colors; - } else { - fillColors.push(w.globals.stroke.colors); - } - } else { - if (w.globals.fill.colors instanceof Array) { - fillColors = w.globals.fill.colors; - } else { - fillColors.push(w.globals.fill.colors); - } - } - } else { - if (cnf.chart.type === 'line') { - if (w.globals.stroke.colors instanceof Array) { - fillColors = w.globals.stroke.colors; - } else { - fillColors.push(w.globals.stroke.colors); - } - } else { - if (w.globals.fill.colors instanceof Array) { - fillColors = w.globals.fill.colors; - } else { - fillColors.push(w.globals.fill.colors); - } - } - } // colors passed in arguments - - - if (typeof opts.fillColors !== 'undefined') { - fillColors = []; - - if (opts.fillColors instanceof Array) { - fillColors = opts.fillColors.slice(); - } else { - fillColors.push(opts.fillColors); - } - } - - return fillColors; - } - }, { - key: "handlePatternFill", - value: function handlePatternFill(patternFill, fillColor, fillOpacity, defaultColor) { - var cnf = this.w.config; - var opts = this.opts; - var graphics = new Graphics(this.ctx); - var patternStrokeWidth = cnf.fill.pattern.strokeWidth === undefined ? Array.isArray(cnf.stroke.width) ? cnf.stroke.width[this.seriesIndex] : cnf.stroke.width : Array.isArray(cnf.fill.pattern.strokeWidth) ? cnf.fill.pattern.strokeWidth[this.seriesIndex] : cnf.fill.pattern.strokeWidth; - var patternLineColor = fillColor; - - if (cnf.fill.pattern.style instanceof Array) { - if (typeof cnf.fill.pattern.style[opts.seriesNumber] !== 'undefined') { - var pf = graphics.drawPattern(cnf.fill.pattern.style[opts.seriesNumber], cnf.fill.pattern.width, cnf.fill.pattern.height, patternLineColor, patternStrokeWidth, fillOpacity); - patternFill = pf; - } else { - patternFill = defaultColor; - } - } else { - patternFill = graphics.drawPattern(cnf.fill.pattern.style, cnf.fill.pattern.width, cnf.fill.pattern.height, patternLineColor, patternStrokeWidth, fillOpacity); - } - - return patternFill; - } - }, { - key: "handleGradientFill", - value: function handleGradientFill(gradientFill, fillColor, fillOpacity, i) { - var cnf = this.w.config; - var opts = this.opts; - var graphics = new Graphics(this.ctx); - var utils = new Utils(); - var type = cnf.fill.gradient.type; - var gradientFrom, gradientTo; - var opacityFrom = cnf.fill.gradient.opacityFrom === undefined ? fillOpacity : Array.isArray(cnf.fill.gradient.opacityFrom) ? cnf.fill.gradient.opacityFrom[i] : cnf.fill.gradient.opacityFrom; - var opacityTo = cnf.fill.gradient.opacityTo === undefined ? fillOpacity : Array.isArray(cnf.fill.gradient.opacityTo) ? cnf.fill.gradient.opacityTo[i] : cnf.fill.gradient.opacityTo; - gradientFrom = fillColor; - - if (cnf.fill.gradient.gradientToColors === undefined || cnf.fill.gradient.gradientToColors.length === 0) { - if (cnf.fill.gradient.shade === 'dark') { - gradientTo = utils.shadeColor(parseFloat(cnf.fill.gradient.shadeIntensity) * -1, fillColor); - } else { - gradientTo = utils.shadeColor(parseFloat(cnf.fill.gradient.shadeIntensity), fillColor); - } - } else { - gradientTo = cnf.fill.gradient.gradientToColors[opts.seriesNumber]; - } - - if (cnf.fill.gradient.inverseColors) { - var t = gradientFrom; - gradientFrom = gradientTo; - gradientTo = t; - } - - gradientFill = graphics.drawGradient(type, gradientFrom, gradientTo, opacityFrom, opacityTo, opts.size, cnf.fill.gradient.stops, cnf.fill.gradient.colorStops, i); - return gradientFill; - } - }]); - - return Fill; - }(); - - /** - * ApexCharts Markers Class for drawing points on y values in axes charts. - * - * @module Markers - **/ - - var Markers = - /*#__PURE__*/ - function () { - function Markers(ctx, opts) { - _classCallCheck(this, Markers); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Markers, [{ - key: "setGlobalMarkerSize", - value: function setGlobalMarkerSize() { - var w = this.w; - w.globals.markers.size = Array.isArray(w.config.markers.size) ? w.config.markers.size : [w.config.markers.size]; - - if (w.globals.markers.size.length > 0) { - if (w.globals.markers.size.length < w.globals.series.length + 1) { - for (var i = 0; i <= w.globals.series.length; i++) { - if (typeof w.globals.markers.size[i] === 'undefined') { - w.globals.markers.size.push(w.globals.markers.size[0]); - } - } - } - } else { - w.globals.markers.size = w.config.series.map(function (s) { - return w.config.markers.size; - }); - } - } - }, { - key: "plotChartMarkers", - value: function plotChartMarkers(pointsPos, seriesIndex, j) { - var _this = this; - - var w = this.w; - var i = seriesIndex; - var p = pointsPos; - var elPointsWrap = null; - var graphics = new Graphics(this.ctx); - var point; - - if (w.globals.markers.size[seriesIndex] > 0) { - elPointsWrap = graphics.group({ - class: 'apexcharts-series-markers' - }); - elPointsWrap.attr('clip-path', "url(#gridRectMarkerMask".concat(w.globals.cuid, ")")); - } - - if (p.x instanceof Array) { - var _loop = function _loop(q) { - var dataPointIndex = j; // a small hack as we have 2 points for the first val to connect it - - if (j === 1 && q === 0) dataPointIndex = 0; - if (j === 1 && q === 1) dataPointIndex = 1; - var PointClasses = 'apexcharts-marker'; - - if ((w.config.chart.type === 'line' || w.config.chart.type === 'area') && !w.globals.comboCharts && !w.config.tooltip.intersect) { - PointClasses += ' no-pointer-events'; - } - - var shouldMarkerDraw = Array.isArray(w.config.markers.size) ? w.globals.markers.size[seriesIndex] > 0 : w.config.markers.size > 0; - - if (shouldMarkerDraw) { - if (Utils.isNumber(p.y[q])) { - PointClasses += " w".concat((Math.random() + 1).toString(36).substring(4)); - } else { - PointClasses = 'apexcharts-nullpoint'; - } - - var opts = _this.getMarkerConfig(PointClasses, seriesIndex); // discrete markers is an option where user can specify a particular marker with different size and color - - - w.config.markers.discrete.map(function (marker) { - if (marker.seriesIndex === seriesIndex && marker.dataPointIndex === dataPointIndex) { - opts.pointStrokeColor = marker.strokeColor; - opts.pointFillColor = marker.fillColor; - opts.pSize = marker.size; - } - }); - - if (w.config.series[i].data[j]) { - if (w.config.series[i].data[j].fillColor) { - opts.pointFillColor = w.config.series[i].data[j].fillColor; - } - - if (w.config.series[i].data[j].strokeColor) { - opts.pointStrokeColor = w.config.series[i].data[j].strokeColor; - } - } - - point = graphics.drawMarker(p.x[q], p.y[q], opts); - point.attr('rel', dataPointIndex); - point.attr('j', dataPointIndex); - point.attr('index', seriesIndex); - point.node.setAttribute('default-marker-size', opts.pSize); - var filters = new Filters(_this.ctx); - filters.setSelectionFilter(point, seriesIndex, dataPointIndex); - - _this.addEvents(point); - - if (elPointsWrap) { - elPointsWrap.add(point); - } - } else { - // dynamic array creation - multidimensional - if (typeof w.globals.pointsArray[seriesIndex] === 'undefined') w.globals.pointsArray[seriesIndex] = []; - w.globals.pointsArray[seriesIndex].push([p.x[q], p.y[q]]); - } - }; - - for (var q = 0; q < p.x.length; q++) { - _loop(q); - } - } - - return elPointsWrap; - } - }, { - key: "getMarkerConfig", - value: function getMarkerConfig(cssClass, seriesIndex) { - var w = this.w; - var pStyle = this.getMarkerStyle(seriesIndex); - var pSize = w.globals.markers.size[seriesIndex]; - return { - pSize: pSize, - pRadius: w.config.markers.radius, - pWidth: w.config.markers.strokeWidth, - pointStrokeColor: pStyle.pointStrokeColor, - pointFillColor: pStyle.pointFillColor, - shape: w.config.markers.shape instanceof Array ? w.config.markers.shape[seriesIndex] : w.config.markers.shape, - class: cssClass, - pointStrokeOpacity: w.config.markers.strokeOpacity, - pointFillOpacity: w.config.markers.fillOpacity, - seriesIndex: seriesIndex - }; - } - }, { - key: "addEvents", - value: function addEvents(circle) { - var graphics = new Graphics(this.ctx); - circle.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this.ctx, circle)); - circle.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this.ctx, circle)); - circle.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this.ctx, circle)); - circle.node.addEventListener('touchstart', graphics.pathMouseDown.bind(this.ctx, circle), { - passive: true - }); - } - }, { - key: "getMarkerStyle", - value: function getMarkerStyle(seriesIndex) { - var w = this.w; - var colors = w.globals.markers.colors; - var strokeColors = w.config.markers.strokeColor || w.config.markers.strokeColors; - var pointStrokeColor = strokeColors instanceof Array ? strokeColors[seriesIndex] : strokeColors; - var pointFillColor = colors instanceof Array ? colors[seriesIndex] : colors; - return { - pointStrokeColor: pointStrokeColor, - pointFillColor: pointFillColor - }; - } - }]); - - return Markers; - }(); - - /** - * ApexCharts Scatter Class. - * This Class also handles bubbles chart as currently there is no major difference in drawing them, - * @module Scatter - **/ - - var Scatter = - /*#__PURE__*/ - function () { - function Scatter(ctx) { - _classCallCheck(this, Scatter); - - this.ctx = ctx; - this.w = ctx.w; - this.initialAnim = this.w.config.chart.animations.enabled; - this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; // this array will help in centering the label in bubbles - - this.radiusSizes = []; - } - - _createClass(Scatter, [{ - key: "draw", - value: function draw(elSeries, j, opts) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var realIndex = opts.realIndex; - var pointsPos = opts.pointsPos; - var zRatio = opts.zRatio; - var elPointsMain = opts.elParent; - var elPointsWrap = graphics.group({ - class: "apexcharts-series-markers apexcharts-series-".concat(w.config.chart.type) - }); - elPointsWrap.attr('clip-path', "url(#gridRectMarkerMask".concat(w.globals.cuid, ")")); - - if (pointsPos.x instanceof Array) { - for (var q = 0; q < pointsPos.x.length; q++) { - var dataPointIndex = j + 1; - var shouldDraw = true; // a small hack as we have 2 points for the first val to connect it - - if (j === 0 && q === 0) dataPointIndex = 0; - if (j === 0 && q === 1) dataPointIndex = 1; - var radius = 0; - var finishRadius = w.globals.markers.size[realIndex]; - - if (zRatio !== Infinity) { - // means we have a bubble - finishRadius = w.globals.seriesZ[realIndex][dataPointIndex] / zRatio; - - if (typeof this.radiusSizes[realIndex] === 'undefined') { - this.radiusSizes.push([]); - } - - this.radiusSizes[realIndex].push(finishRadius); - } - - if (!w.config.chart.animations.enabled) { - radius = finishRadius; - } - - var x = pointsPos.x[q]; - var y = pointsPos.y[q]; - radius = radius || 0; - - if (x === 0 && y === 0 || y === null || typeof w.globals.series[realIndex][dataPointIndex] === 'undefined') { - shouldDraw = false; - } - - if (shouldDraw) { - var circle = this.drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j); - elPointsWrap.add(circle); - } - - elPointsMain.add(elPointsWrap); - } - } - } - }, { - key: "drawPoint", - value: function drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j) { - var w = this.w; - var i = realIndex; - var anim = new Animations(this.ctx); - var filters = new Filters(this.ctx); - var fill = new Fill(this.ctx); - var markers = new Markers(this.ctx); - var graphics = new Graphics(this.ctx); - var markerConfig = markers.getMarkerConfig('apexcharts-marker', i); - var pathFillCircle = fill.fillPath({ - seriesNumber: realIndex, - patternUnits: 'objectBoundingBox', - value: w.globals.series[realIndex][j] - }); - var circle = graphics.drawCircle(radius); - - if (w.config.series[i].data[dataPointIndex]) { - if (w.config.series[i].data[dataPointIndex].fillColor) { - pathFillCircle = w.config.series[i].data[dataPointIndex].fillColor; - } - } - - circle.attr({ - cx: x, - cy: y, - fill: pathFillCircle, - stroke: markerConfig.pointStrokeColor, - strokeWidth: markerConfig.pWidth - }); - - if (w.config.chart.dropShadow.enabled) { - var dropShadow = w.config.chart.dropShadow; - filters.dropShadow(circle, dropShadow, realIndex); - } - - if (this.initialAnim && !w.globals.dataChanged) { - var speed = 1; - - if (!w.globals.resized) { - speed = w.config.chart.animations.speed; - } - - anim.animateCircleRadius(circle, 0, finishRadius, speed, w.globals.easing); - } - - if (w.globals.dataChanged) { - if (this.dynamicAnim) { - var _speed = w.config.chart.animations.dynamicAnimation.speed; - var prevX, prevY, prevR; - var prevPathJ = null; - prevPathJ = w.globals.previousPaths[realIndex] && w.globals.previousPaths[realIndex][j]; - - if (typeof prevPathJ !== 'undefined' && prevPathJ !== null) { - // series containing less elements will ignore these values and revert to 0 - prevX = prevPathJ.x; - prevY = prevPathJ.y; - prevR = typeof prevPathJ.r !== 'undefined' ? prevPathJ.r : finishRadius; - } - - for (var cs = 0; cs < w.globals.collapsedSeries.length; cs++) { - if (w.globals.collapsedSeries[cs].index === realIndex) { - _speed = 1; - finishRadius = 0; - } - } - - if (x === 0 && y === 0) finishRadius = 0; - anim.animateCircle(circle, { - cx: prevX, - cy: prevY, - r: prevR - }, { - cx: x, - cy: y, - r: finishRadius - }, _speed, w.globals.easing); - } else { - circle.attr({ - r: finishRadius - }); - } - } - - circle.attr({ - rel: dataPointIndex, - j: dataPointIndex, - index: realIndex, - 'default-marker-size': finishRadius - }); - filters.setSelectionFilter(circle, realIndex, dataPointIndex); - markers.addEvents(circle); - circle.node.classList.add('apexcharts-marker'); - return circle; - } - }, { - key: "centerTextInBubble", - value: function centerTextInBubble(y) { - var w = this.w; - y = y + parseInt(w.config.dataLabels.style.fontSize) / 4; - return { - y: y - }; - } - }]); - - return Scatter; - }(); - - /** - * ApexCharts DataLabels Class for drawing dataLabels on Axes based Charts. - * - * @module DataLabels - **/ - - var DataLabels = - /*#__PURE__*/ - function () { - function DataLabels(ctx) { - _classCallCheck(this, DataLabels); - - this.ctx = ctx; - this.w = ctx.w; - } // When there are many datalabels to be printed, and some of them overlaps each other in the same series, this method will take care of that - // Also, when datalabels exceeds the drawable area and get clipped off, we need to adjust and move some pixels to make them visible again - - - _createClass(DataLabels, [{ - key: "dataLabelsCorrection", - value: function dataLabelsCorrection(x, y, val, i, dataPointIndex, alwaysDrawDataLabel, fontSize) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var drawnextLabel = false; // - - var textRects = graphics.getTextRects(val, fontSize); - var width = textRects.width; - var height = textRects.height; // first value in series, so push an empty array - - if (typeof w.globals.dataLabelsRects[i] === 'undefined') w.globals.dataLabelsRects[i] = []; // then start pushing actual rects in that sub-array - - w.globals.dataLabelsRects[i].push({ - x: x, - y: y, - width: width, - height: height - }); - var len = w.globals.dataLabelsRects[i].length - 2; - var lastDrawnIndex = typeof w.globals.lastDrawnDataLabelsIndexes[i] !== 'undefined' ? w.globals.lastDrawnDataLabelsIndexes[i][w.globals.lastDrawnDataLabelsIndexes[i].length - 1] : 0; - - if (typeof w.globals.dataLabelsRects[i][len] !== 'undefined') { - var lastDataLabelRect = w.globals.dataLabelsRects[i][lastDrawnIndex]; - - if ( // next label forward and x not intersecting - x > lastDataLabelRect.x + lastDataLabelRect.width + 2 || y > lastDataLabelRect.y + lastDataLabelRect.height + 2 || x + width < lastDataLabelRect.x // next label is going to be drawn backwards - ) { - // the 2 indexes don't override, so OK to draw next label - drawnextLabel = true; - } - } - - if (dataPointIndex === 0 || alwaysDrawDataLabel) { - drawnextLabel = true; - } - - return { - x: x, - y: y, - drawnextLabel: drawnextLabel - }; - } - }, { - key: "drawDataLabel", - value: function drawDataLabel(pos, i, j) { - var align = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'top'; - // this method handles line, area, bubble, scatter charts as those charts contains markers/points which have pre-defined x/y positions - // all other charts like bars / heatmaps will define their own drawDataLabel routine - var w = this.w; - var graphics = new Graphics(this.ctx); - var dataLabelsConfig = w.config.dataLabels; - var x = 0; - var y = 0; - var dataPointIndex = j; - var elDataLabelsWrap = null; - - if (!dataLabelsConfig.enabled || pos.x instanceof Array !== true) { - return elDataLabelsWrap; - } - - elDataLabelsWrap = graphics.group({ - class: 'apexcharts-data-labels' - }); - elDataLabelsWrap.attr('clip-path', "url(#gridRectMarkerMask".concat(w.globals.cuid, ")")); - - for (var q = 0; q < pos.x.length; q++) { - x = pos.x[q] + dataLabelsConfig.offsetX; - y = pos.y[q] + dataLabelsConfig.offsetY - w.globals.markers.size[i] - 5; - - if (align === 'bottom') { - y = y + w.globals.markers.size[i] * 2 + parseInt(dataLabelsConfig.style.fontSize) * 1.4; - } - - if (!isNaN(x)) { - // a small hack as we have 2 points for the first val to connect it - if (j === 1 && q === 0) dataPointIndex = 0; - if (j === 1 && q === 1) dataPointIndex = 1; - var val = w.globals.series[i][dataPointIndex]; - var text = ''; - - if (w.config.chart.type === 'bubble') { - text = w.globals.seriesZ[i][dataPointIndex]; - y = pos.y[q] + w.config.dataLabels.offsetY; - var scatter = new Scatter(this.ctx); - var centerTextInBubbleCoords = scatter.centerTextInBubble(y, i, dataPointIndex); - y = centerTextInBubbleCoords.y; - } else { - if (typeof val !== 'undefined' && val !== null) { - text = w.config.dataLabels.formatter(val, { - ctx: this.ctx, - seriesIndex: i, - dataPointIndex: dataPointIndex, - w: w - }); - } - } - - this.plotDataLabelsText({ - x: x, - y: y, - text: text, - i: i, - j: dataPointIndex, - parent: elDataLabelsWrap, - offsetCorrection: true, - dataLabelsConfig: w.config.dataLabels - }); - } - } - - return elDataLabelsWrap; - } - }, { - key: "plotDataLabelsText", - value: function plotDataLabelsText(opts) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var x = opts.x, - y = opts.y, - i = opts.i, - j = opts.j, - text = opts.text, - textAnchor = opts.textAnchor, - parent = opts.parent, - dataLabelsConfig = opts.dataLabelsConfig, - alwaysDrawDataLabel = opts.alwaysDrawDataLabel, - offsetCorrection = opts.offsetCorrection; - - if (Array.isArray(w.config.dataLabels.enabledOnSeries)) { - if (w.config.dataLabels.enabledOnSeries.indexOf(i) > -1) { - return; - } - } - - var correctedLabels = { - x: x, - y: y, - drawnextLabel: true - }; - - if (offsetCorrection) { - correctedLabels = this.dataLabelsCorrection(x, y, text, i, j, alwaysDrawDataLabel, parseInt(dataLabelsConfig.style.fontSize)); - } // when zoomed, we don't need to correct labels offsets, - // but if normally, labels get cropped, correct them - - - if (!w.globals.zoomed) { - x = correctedLabels.x; - y = correctedLabels.y; - } - - if (correctedLabels.drawnextLabel) { - var dataLabelText = graphics.drawText({ - width: 100, - height: parseInt(dataLabelsConfig.style.fontSize), - x: x, - y: y, - foreColor: w.globals.dataLabels.style.colors[i], - textAnchor: textAnchor || dataLabelsConfig.textAnchor, - text: text, - fontSize: dataLabelsConfig.style.fontSize, - fontFamily: dataLabelsConfig.style.fontFamily - }); - dataLabelText.attr({ - class: 'apexcharts-datalabel', - cx: x, - cy: y - }); - - if (dataLabelsConfig.dropShadow.enabled) { - var textShadow = dataLabelsConfig.dropShadow; - var filters = new Filters(this.ctx); - filters.dropShadow(dataLabelText, textShadow); - } - - parent.add(dataLabelText); - - if (typeof w.globals.lastDrawnDataLabelsIndexes[i] === 'undefined') { - w.globals.lastDrawnDataLabelsIndexes[i] = []; - } - - w.globals.lastDrawnDataLabelsIndexes[i].push(j); - } - } - }]); - - return DataLabels; - }(); - - /** - * ApexCharts Bar Class responsible for drawing both Columns and Bars. - * - * @module Bar - **/ - - var Bar = - /*#__PURE__*/ - function () { - function Bar(ctx, xyRatios) { - _classCallCheck(this, Bar); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.barOptions = w.config.plotOptions.bar; - this.isHorizontal = this.barOptions.horizontal; - this.strokeWidth = w.config.stroke.width; - this.isNullValue = false; - this.xyRatios = xyRatios; - - if (this.xyRatios !== null) { - this.xRatio = xyRatios.xRatio; - this.yRatio = xyRatios.yRatio; - this.invertedXRatio = xyRatios.invertedXRatio; - this.invertedYRatio = xyRatios.invertedYRatio; - this.baseLineY = xyRatios.baseLineY; - this.baseLineInvertedY = xyRatios.baseLineInvertedY; - } - - this.yaxisIndex = 0; - this.seriesLen = 0; - } - /** primary draw method which is called on bar object - * @memberof Bar - * @param {array} series - user supplied series values - * @param {int} seriesIndex - the index by which series will be drawn on the svg - * @return {node} element which is supplied to parent chart draw method for appending - **/ - - - _createClass(Bar, [{ - key: "draw", - value: function draw(series, seriesIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var coreUtils = new CoreUtils(this.ctx, w); - series = coreUtils.getLogSeries(series); - this.series = series; - this.yRatio = coreUtils.getLogYRatios(this.yRatio); - this.initVariables(series); - var ret = graphics.group({ - class: 'apexcharts-bar-series apexcharts-plot-series' - }); - - if (w.config.dataLabels.enabled) { - if (this.totalItems > w.config.plotOptions.bar.dataLabels.maxItems) { - console.warn('WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.'); - } - } - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - var pathTo = void 0, - pathFrom = void 0; - var x = void 0, - y = void 0, - xDivision = void 0, - // xDivision is the GRIDWIDTH divided by number of datapoints (columns) - yDivision = void 0, - // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) - zeroH = void 0, - // zeroH is the baseline where 0 meets y axis - zeroW = void 0; // zeroW is the baseline where 0 meets x axis - - var yArrj = []; // hold y values of current iterating series - - var xArrj = []; // hold x values of current iterating series - - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn - - var elSeries = graphics.group({ - class: "apexcharts-series", - rel: i + 1, - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), - 'data:realIndex': realIndex - }); - this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex); - - if (series[i].length > 0) { - this.visibleI = this.visibleI + 1; - } - - var strokeWidth = 0; - var barHeight = 0; - var barWidth = 0; - - if (this.yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; - var initPositions = this.initialPositions(); - y = initPositions.y; - barHeight = initPositions.barHeight; - yDivision = initPositions.yDivision; - zeroW = initPositions.zeroW; - x = initPositions.x; - barWidth = initPositions.barWidth; - xDivision = initPositions.xDivision; - zeroH = initPositions.zeroH; - - if (!this.horizontal) { - xArrj.push(x + barWidth / 2); - } // eldatalabels - - - var elDataLabelsWrap = graphics.group({ - class: 'apexcharts-datalabels' - }); - - for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { - if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) { - this.isNullValue = true; - } else { - this.isNullValue = false; - } - - if (w.config.stroke.show) { - if (this.isNullValue) { - strokeWidth = 0; - } else { - strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; - } - } - - var paths = null; - - if (this.isHorizontal) { - paths = this.drawBarPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - barHeight: barHeight, - strokeWidth: strokeWidth, - pathTo: pathTo, - pathFrom: pathFrom, - zeroW: zeroW, - x: x, - y: y, - yDivision: yDivision, - elSeries: elSeries - }); - barWidth = this.series[i][j] / this.invertedYRatio; - } else { - paths = this.drawColumnPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - x: x, - y: y, - xDivision: xDivision, - pathTo: pathTo, - pathFrom: pathFrom, - barWidth: barWidth, - zeroH: zeroH, - strokeWidth: strokeWidth, - elSeries: elSeries - }); - barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; - } - - pathTo = paths.pathTo; - pathFrom = paths.pathFrom; - y = paths.y; - x = paths.x; // push current X - - if (j > 0) { - xArrj.push(x + barWidth / 2); - } - - yArrj.push(y); - var pathFill = this.getPathFillColor(series, i, j, realIndex); - elSeries = this.renderSeries({ - realIndex: realIndex, - pathFill: pathFill, - j: j, - i: i, - pathFrom: pathFrom, - pathTo: pathTo, - strokeWidth: strokeWidth, - elSeries: elSeries, - x: x, - y: y, - series: series, - barHeight: barHeight, - barWidth: barWidth, - elDataLabelsWrap: elDataLabelsWrap, - visibleSeries: this.visibleI, - type: 'bar' - }); - } // push all x val arrays into main xArr - - - w.globals.seriesXvalues[realIndex] = xArrj; - w.globals.seriesYvalues[realIndex] = yArrj; - ret.add(elSeries); - } - - return ret; - } - }, { - key: "getPathFillColor", - value: function getPathFillColor(series, i, j, realIndex) { - var w = this.w; - var fill = new Fill(this.ctx); - var fillColor = null; - var seriesNumber = this.barOptions.distributed ? j : i; - - if (this.barOptions.colors.ranges.length > 0) { - var colorRange = this.barOptions.colors.ranges; - colorRange.map(function (range) { - if (series[i][j] >= range.from && series[i][j] <= range.to) { - fillColor = range.color; - } - }); - } - - if (w.config.series[i].data[j] && w.config.series[i].data[j].fillColor) { - fillColor = w.config.series[i].data[j].fillColor; - } - - var pathFill = fill.fillPath({ - seriesNumber: this.barOptions.distributed ? seriesNumber : realIndex, - color: fillColor, - value: series[i][j] - }); - return pathFill; - } - }, { - key: "renderSeries", - value: function renderSeries(_ref) { - var realIndex = _ref.realIndex, - pathFill = _ref.pathFill, - lineFill = _ref.lineFill, - j = _ref.j, - i = _ref.i, - pathFrom = _ref.pathFrom, - pathTo = _ref.pathTo, - strokeWidth = _ref.strokeWidth, - elSeries = _ref.elSeries, - x = _ref.x, - y = _ref.y, - series = _ref.series, - barHeight = _ref.barHeight, - barWidth = _ref.barWidth, - elDataLabelsWrap = _ref.elDataLabelsWrap, - visibleSeries = _ref.visibleSeries, - type = _ref.type; - var w = this.w; - var graphics = new Graphics(this.ctx); - - if (!lineFill) { - /* fix apexcharts#341 */ - lineFill = this.barOptions.distributed ? w.globals.stroke.colors[j] : w.globals.stroke.colors[realIndex]; - } - - if (w.config.series[i].data[j] && w.config.series[i].data[j].strokeColor) { - lineFill = w.config.series[i].data[j].strokeColor; - } - - if (this.isNullValue) { - pathFill = 'none'; - } - - var delay = j / w.config.chart.animations.animateGradually.delay * (w.config.chart.animations.speed / w.globals.dataPoints) / 2.4; - var renderedPath = graphics.renderPaths({ - i: i, - j: j, - realIndex: realIndex, - pathFrom: pathFrom, - pathTo: pathTo, - stroke: lineFill, - strokeWidth: strokeWidth, - strokeLineCap: w.config.stroke.lineCap, - fill: pathFill, - animationDelay: delay, - initialSpeed: w.config.chart.animations.speed, - dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed, - className: "apexcharts-".concat(type, "-area"), - id: "apexcharts-".concat(type, "-area") - }); - renderedPath.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); - var filters = new Filters(this.ctx); - filters.setSelectionFilter(renderedPath, realIndex, j); - elSeries.add(renderedPath); - var dataLabels = this.calculateDataLabelsPos({ - x: x, - y: y, - i: i, - j: j, - series: series, - realIndex: realIndex, - barHeight: barHeight, - barWidth: barWidth, - renderedPath: renderedPath, - visibleSeries: visibleSeries - }); - - if (dataLabels !== null) { - elDataLabelsWrap.add(dataLabels); - } - - elSeries.add(elDataLabelsWrap); - return elSeries; - } - }, { - key: "initVariables", - value: function initVariables(series) { - var w = this.w; - this.series = series; - this.totalItems = 0; - this.seriesLen = 0; - this.visibleI = -1; - this.visibleItems = 1; // number of visible bars after user zoomed in/out - - for (var sl = 0; sl < series.length; sl++) { - if (series[sl].length > 0) { - this.seriesLen = this.seriesLen + 1; - this.totalItems += series[sl].length; - } - - if (w.globals.isXNumeric) { - // get max visible items - for (var j = 0; j < series[sl].length; j++) { - if (w.globals.seriesX[sl][j] > w.globals.minX && w.globals.seriesX[sl][j] < w.globals.maxX) { - this.visibleItems++; - } - } - } else { - this.visibleItems = w.globals.dataPoints; - } - } - - if (this.seriesLen === 0) { - // A small adjustment when combo charts are used - this.seriesLen = 1; - } - } - }, { - key: "initialPositions", - value: function initialPositions() { - var w = this.w; - var x, y, yDivision, xDivision, barHeight, barWidth, zeroH, zeroW; - - if (this.isHorizontal) { - // height divided into equal parts - yDivision = w.globals.gridHeight / w.globals.dataPoints; - barHeight = yDivision / this.seriesLen; - - if (w.globals.isXNumeric) { - yDivision = w.globals.gridHeight / this.totalItems; - barHeight = yDivision / this.seriesLen; - } - - barHeight = barHeight * parseInt(this.barOptions.barHeight) / 100; - zeroW = this.baseLineInvertedY + w.globals.padHorizontal + (this.isReversed ? w.globals.gridWidth : 0) - (this.isReversed ? this.baseLineInvertedY * 2 : 0); - y = (yDivision - barHeight * this.seriesLen) / 2; - } else { - // width divided into equal parts - xDivision = w.globals.gridWidth / this.visibleItems; - barWidth = xDivision / this.seriesLen * parseInt(this.barOptions.columnWidth) / 100; - - if (w.globals.isXNumeric) { - // max barwidth should be equal to minXDiff to avoid overlap - xDivision = w.globals.minXDiff / this.xRatio; - barWidth = xDivision / this.seriesLen * parseInt(this.barOptions.columnWidth) / 100; - } - - zeroH = w.globals.gridHeight - this.baseLineY[this.yaxisIndex] - (this.isReversed ? w.globals.gridHeight : 0) + (this.isReversed ? this.baseLineY[this.yaxisIndex] * 2 : 0); - x = w.globals.padHorizontal + (xDivision - barWidth * this.seriesLen) / 2; - } - - return { - x: x, - y: y, - yDivision: yDivision, - xDivision: xDivision, - barHeight: barHeight, - barWidth: barWidth, - zeroH: zeroH, - zeroW: zeroW - }; - } - }, { - key: "drawBarPaths", - value: function drawBarPaths(_ref2) { - var indexes = _ref2.indexes, - barHeight = _ref2.barHeight, - strokeWidth = _ref2.strokeWidth, - pathTo = _ref2.pathTo, - pathFrom = _ref2.pathFrom, - zeroW = _ref2.zeroW, - x = _ref2.x, - y = _ref2.y, - yDivision = _ref2.yDivision, - elSeries = _ref2.elSeries; - var w = this.w; - var graphics = new Graphics(this.ctx); - var i = indexes.i; - var j = indexes.j; - var realIndex = indexes.realIndex; - var bc = indexes.bc; - - if (w.globals.isXNumeric) { - y = (w.globals.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight; - } - - var barYPosition = y + barHeight * this.visibleI; - pathTo = graphics.move(zeroW, barYPosition); - pathFrom = graphics.move(zeroW, barYPosition); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j); - } - - if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { - x = zeroW; - } else { - x = zeroW + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2; - } - - var endingShapeOpts = { - barHeight: barHeight, - strokeWidth: strokeWidth, - barYPosition: barYPosition, - x: x, - zeroW: zeroW - }; - var endingShape = this.barEndingShape(w, endingShapeOpts, this.series, i, j); - pathTo = pathTo + graphics.line(endingShape.newX, barYPosition) + endingShape.path + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); - pathFrom = pathFrom + graphics.line(zeroW, barYPosition) + endingShape.ending_p_from + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition); - - if (!w.globals.isXNumeric) { - y = y + yDivision; - } - - if (this.barOptions.colors.backgroundBarColors.length > 0 && i === 0) { - if (bc >= this.barOptions.colors.backgroundBarColors.length) { - bc = 0; - } - - var bcolor = this.barOptions.colors.backgroundBarColors[bc]; - var rect = graphics.drawRect(0, barYPosition - barHeight * this.visibleI, w.globals.gridWidth, barHeight * this.seriesLen, 0, bcolor, this.barOptions.colors.backgroundBarOpacity); - elSeries.add(rect); - rect.node.classList.add('apexcharts-backgroundBar'); - } - - return { - pathTo: pathTo, - pathFrom: pathFrom, - x: x, - y: y, - barYPosition: barYPosition - }; - } - }, { - key: "drawColumnPaths", - value: function drawColumnPaths(_ref3) { - var indexes = _ref3.indexes, - x = _ref3.x, - y = _ref3.y, - xDivision = _ref3.xDivision, - pathTo = _ref3.pathTo, - pathFrom = _ref3.pathFrom, - barWidth = _ref3.barWidth, - zeroH = _ref3.zeroH, - strokeWidth = _ref3.strokeWidth, - elSeries = _ref3.elSeries; - var w = this.w; - var graphics = new Graphics(this.ctx); - var i = indexes.i; - var j = indexes.j; - var realIndex = indexes.realIndex; - var bc = indexes.bc; - - if (w.globals.isXNumeric) { - x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2; - } - - var barXPosition = x + barWidth * this.visibleI; - pathTo = graphics.move(barXPosition, zeroH); - pathFrom = graphics.move(barXPosition, zeroH); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j); - } - - if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { - y = zeroH; - } else { - y = zeroH - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2; - } - - var endingShapeOpts = { - barWidth: barWidth, - strokeWidth: strokeWidth, - barXPosition: barXPosition, - y: y, - zeroH: zeroH - }; - var endingShape = this.barEndingShape(w, endingShapeOpts, this.series, i, j); - pathTo = pathTo + graphics.line(barXPosition, endingShape.newY) + endingShape.path + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition - strokeWidth / 2, zeroH); - pathFrom = pathFrom + graphics.line(barXPosition, zeroH) + endingShape.ending_p_from + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition - strokeWidth / 2, zeroH); - - if (!w.globals.isXNumeric) { - x = x + xDivision; - } - - if (this.barOptions.colors.backgroundBarColors.length > 0 && i === 0) { - if (bc >= this.barOptions.colors.backgroundBarColors.length) { - bc = 0; - } - - var bcolor = this.barOptions.colors.backgroundBarColors[bc]; - var rect = graphics.drawRect(barXPosition - barWidth * this.visibleI, 0, barWidth * this.seriesLen, w.globals.gridHeight, 0, bcolor, this.barOptions.colors.backgroundBarOpacity); - elSeries.add(rect); - rect.node.classList.add('apexcharts-backgroundBar'); - } - - return { - pathTo: pathTo, - pathFrom: pathFrom, - x: x, - y: y, - barXPosition: barXPosition - }; - } - /** getPathFrom is a common function for bars/columns which is used to get previous paths when data changes. - * @memberof Bar - * @param {int} realIndex - current iterating i - * @param {int} j - current iterating series's j index - * @return {string} pathFrom is the string which will be appended in animations - **/ - - }, { - key: "getPathFrom", - value: function getPathFrom(realIndex, j) { - var w = this.w; - var pathFrom; - - for (var pp = 0; pp < w.globals.previousPaths.length; pp++) { - var gpp = w.globals.previousPaths[pp]; - - if (gpp.paths.length > 0 && parseInt(gpp.realIndex) === parseInt(realIndex)) { - if (typeof w.globals.previousPaths[pp].paths[j] !== 'undefined') { - pathFrom = w.globals.previousPaths[pp].paths[j].d; - } - } - } - - return pathFrom; - } - /** calculateBarDataLabels is used to calculate the positions for the data-labels - * It also sets the element's data attr for bars and calls drawCalculatedBarDataLabels() - * @memberof Bar - * @param {object} {barProps} most of the bar properties used throughout the bar - * drawing function - * @return {object} dataLabels node-element which you can append later - **/ - - }, { - key: "calculateDataLabelsPos", - value: function calculateDataLabelsPos(_ref4) { - var x = _ref4.x, - y = _ref4.y, - i = _ref4.i, - j = _ref4.j, - realIndex = _ref4.realIndex, - series = _ref4.series, - barHeight = _ref4.barHeight, - barWidth = _ref4.barWidth, - visibleSeries = _ref4.visibleSeries, - renderedPath = _ref4.renderedPath; - var w = this.w; - var graphics = new Graphics(this.ctx); - var strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; - var bcx = x + parseFloat(barWidth * visibleSeries); - var bcy = y + parseFloat(barHeight * visibleSeries); - - if (w.globals.isXNumeric && !w.globals.isBarHorizontal) { - bcx = x + parseFloat(barWidth * (visibleSeries + 1)) - strokeWidth; - bcy = y + parseFloat(barHeight * (visibleSeries + 1)) - strokeWidth; - } - - var dataLabels = null; - var dataLabelsX = x; - var dataLabelsY = y; - var dataLabelsPos = {}; - var dataLabelsConfig = w.config.dataLabels; - var barDataLabelsConfig = this.barOptions.dataLabels; - var offX = dataLabelsConfig.offsetX; - var offY = dataLabelsConfig.offsetY; - var textRects = { - width: 0, - height: 0 - }; - - if (w.config.dataLabels.enabled) { - textRects = graphics.getTextRects(w.globals.yLabelFormatters[0](w.globals.maxY), parseInt(dataLabelsConfig.style.fontSize)); - } - - if (this.isHorizontal) { - dataLabelsPos = this.calculateBarsDataLabelsPosition({ - x: x, - y: y, - i: i, - j: j, - renderedPath: renderedPath, - bcy: bcy, - barHeight: barHeight, - barWidth: barWidth, - textRects: textRects, - strokeWidth: strokeWidth, - dataLabelsX: dataLabelsX, - dataLabelsY: dataLabelsY, - barDataLabelsConfig: barDataLabelsConfig, - offX: offX, - offY: offY - }); - } else { - dataLabelsPos = this.calculateColumnsDataLabelsPosition({ - x: x, - y: y, - i: i, - j: j, - renderedPath: renderedPath, - realIndex: realIndex, - bcx: bcx, - bcy: bcy, - barHeight: barHeight, - barWidth: barWidth, - textRects: textRects, - strokeWidth: strokeWidth, - dataLabelsY: dataLabelsY, - barDataLabelsConfig: barDataLabelsConfig, - offX: offX, - offY: offY - }); - } - - renderedPath.attr({ - cy: dataLabelsPos.bcy, - cx: dataLabelsPos.bcx, - j: j, - val: series[i][j], - barHeight: barHeight, - barWidth: barWidth - }); - dataLabels = this.drawCalculatedDataLabels({ - x: dataLabelsPos.dataLabelsX, - y: dataLabelsPos.dataLabelsY, - val: series[i][j], - i: realIndex, - j: j, - barWidth: barWidth, - barHeight: barHeight, - textRects: textRects, - dataLabelsConfig: dataLabelsConfig - }); - return dataLabels; - } - }, { - key: "calculateColumnsDataLabelsPosition", - value: function calculateColumnsDataLabelsPosition(opts) { - var w = this.w; - var i = opts.i, - j = opts.j, - y = opts.y, - bcx = opts.bcx, - barWidth = opts.barWidth, - barHeight = opts.barHeight, - textRects = opts.textRects, - dataLabelsY = opts.dataLabelsY, - barDataLabelsConfig = opts.barDataLabelsConfig, - strokeWidth = opts.strokeWidth, - offX = opts.offX, - offY = opts.offY; - var dataLabelsX; - var dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints; - bcx = bcx - strokeWidth / 2; - - if (w.globals.isXNumeric) { - dataLabelsX = bcx - barWidth / 2 + offX; - } else { - dataLabelsX = bcx - dataPointsDividedWidth + barWidth / 2 + offX; - } - - var valIsNegative = this.series[i][j] <= 0; - - if (this.isReversed) { - y = y - barHeight; - } - - switch (barDataLabelsConfig.position) { - case 'center': - if (valIsNegative) { - dataLabelsY = y + barHeight / 2 + textRects.height / 2 + offY; - } else { - dataLabelsY = y + barHeight / 2 + textRects.height / 2 - offY; - } - - break; - - case 'bottom': - if (valIsNegative) { - dataLabelsY = y + barHeight + textRects.height + strokeWidth + offY; - } else { - dataLabelsY = y + barHeight - textRects.height / 2 + strokeWidth - offY; - } - - break; - - case 'top': - if (valIsNegative) { - dataLabelsY = y - textRects.height / 2 - offY; - } else { - dataLabelsY = y + textRects.height + offY; - } - - break; - } - - if (!w.config.chart.stacked) { - if (dataLabelsY < 0) { - dataLabelsY = 0 + strokeWidth; - } else if (dataLabelsY + textRects.height / 3 > w.globals.gridHeight) { - dataLabelsY = w.globals.gridHeight - strokeWidth; - } - } - - return { - bcx: bcx, - bcy: y, - dataLabelsX: dataLabelsX, - dataLabelsY: dataLabelsY - }; - } - }, { - key: "calculateBarsDataLabelsPosition", - value: function calculateBarsDataLabelsPosition(opts) { - var w = this.w; - var x = opts.x, - i = opts.i, - j = opts.j, - bcy = opts.bcy, - barHeight = opts.barHeight, - barWidth = opts.barWidth, - textRects = opts.textRects, - dataLabelsX = opts.dataLabelsX, - strokeWidth = opts.strokeWidth, - barDataLabelsConfig = opts.barDataLabelsConfig, - offX = opts.offX, - offY = opts.offY; - var dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints; - var dataLabelsY = bcy - dataPointsDividedHeight + barHeight / 2 + textRects.height / 2 + offY - 3; - var valIsNegative = this.series[i][j] <= 0; - - if (this.isReversed) { - x = x + barWidth; - } - - switch (barDataLabelsConfig.position) { - case 'center': - if (valIsNegative) { - dataLabelsX = x - barWidth / 2 - offX; - } else { - dataLabelsX = x - barWidth / 2 + offX; - } - - break; - - case 'bottom': - if (valIsNegative) { - dataLabelsX = x - barWidth - strokeWidth - Math.round(textRects.width / 2) - offX; - } else { - dataLabelsX = x - barWidth + strokeWidth + Math.round(textRects.width / 2) + offX; - } - - break; - - case 'top': - if (valIsNegative) { - dataLabelsX = x - strokeWidth + Math.round(textRects.width / 2) - offX; - } else { - dataLabelsX = x - strokeWidth - Math.round(textRects.width / 2) + offX; - } - - break; - } - - if (!w.config.chart.stacked) { - if (dataLabelsX < 0) { - dataLabelsX = dataLabelsX + textRects.width + strokeWidth; - } else if (dataLabelsX + textRects.width / 2 > w.globals.gridWidth) { - dataLabelsX = w.globals.gridWidth - textRects.width - strokeWidth; - } - } - - return { - bcx: x, - bcy: bcy, - dataLabelsX: dataLabelsX, - dataLabelsY: dataLabelsY - }; - } - }, { - key: "drawCalculatedDataLabels", - value: function drawCalculatedDataLabels(_ref5) { - var x = _ref5.x, - y = _ref5.y, - val = _ref5.val, - i = _ref5.i, - j = _ref5.j, - textRects = _ref5.textRects, - barHeight = _ref5.barHeight, - barWidth = _ref5.barWidth, - dataLabelsConfig = _ref5.dataLabelsConfig; - var w = this.w; - var dataLabels = new DataLabels(this.ctx); - var graphics = new Graphics(this.ctx); - var formatter = dataLabelsConfig.formatter; - var elDataLabelsWrap = null; - var isSeriesNotCollapsed = w.globals.collapsedSeriesIndices.indexOf(i) > -1; - - if (dataLabelsConfig.enabled && !isSeriesNotCollapsed) { - elDataLabelsWrap = graphics.group({ - class: 'apexcharts-data-labels' - }); - var text = ''; - - if (typeof val !== 'undefined' && val !== null) { - text = formatter(val, { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - - if (val === 0 && w.config.chart.stacked) { - // in a stacked bar/column chart, 0 value should be neglected as it will overlap on the next element - text = ''; - } - - if (w.config.chart.stacked && this.barOptions.dataLabels.hideOverflowingLabels) { - // if there is not enough space to draw the label in the bar/column rect, check hideOverflowingLabels property to prevent overflowing on wrong rect - // Note: This issue is only seen in stacked charts - if (this.isHorizontal) { - barWidth = this.series[i][j] / this.yRatio[this.yaxisIndex]; - - if (textRects.width / 1.6 > barWidth) { - text = ''; - } - } else { - barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; - - if (textRects.height / 1.6 > barHeight) { - text = ''; - } - } - } - - dataLabels.plotDataLabelsText({ - x: x, - y: y, - text: text, - i: i, - j: j, - parent: elDataLabelsWrap, - dataLabelsConfig: dataLabelsConfig, - alwaysDrawDataLabel: true, - offsetCorrection: true - }); - } - - return elDataLabelsWrap; - } - /** barEndingShape draws the various shapes on top of bars/columns - * @memberof Bar - * @param {object} w - chart context - * @param {object} opts - consists several properties like barHeight/barWidth - * @param {array} series - global primary series - * @param {int} i - current iterating series's index - * @param {int} j - series's j of i - * @return {object} path - ending shape whether round/arrow - * ending_p_from - similar to pathFrom - * newY - which is calculated from existing y and new shape's top - **/ - - }, { - key: "barEndingShape", - value: function barEndingShape(w, opts, series, i, j) { - var graphics = new Graphics(this.ctx); - - if (this.isHorizontal) { - var endingShape = null; - var endingShapeFrom = ''; - var x = opts.x; - - if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) { - var inverse = series[i][j] < 0; - var eX = opts.barHeight / 2 - opts.strokeWidth; - if (inverse) eX = -opts.barHeight / 2 - opts.strokeWidth; - - if (!w.config.chart.stacked) { - if (this.barOptions.endingShape === 'rounded') { - x = opts.x - eX / 2; - } - } - - switch (this.barOptions.endingShape) { - case 'flat': - endingShape = graphics.line(x, opts.barYPosition + opts.barHeight - opts.strokeWidth); - break; - - case 'rounded': - endingShape = graphics.quadraticCurve(x + eX, opts.barYPosition + (opts.barHeight - opts.strokeWidth) / 2, x, opts.barYPosition + opts.barHeight - opts.strokeWidth); - break; - } - } - - return { - path: endingShape, - ending_p_from: endingShapeFrom, - newX: x - }; - } else { - var _endingShape = null; - var _endingShapeFrom = ''; - var y = opts.y; - - if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) { - var _inverse = series[i][j] < 0; - - var eY = opts.barWidth / 2 - opts.strokeWidth; - if (_inverse) eY = -opts.barWidth / 2 - opts.strokeWidth; - - if (!w.config.chart.stacked) { - // the shape exceeds the chart height, hence reduce y - if (this.barOptions.endingShape === 'rounded') { - y = y + eY / 2; - } - } - - switch (this.barOptions.endingShape) { - case 'flat': - _endingShape = graphics.line(opts.barXPosition + opts.barWidth - opts.strokeWidth, y); - break; - - case 'rounded': - _endingShape = graphics.quadraticCurve(opts.barXPosition + (opts.barWidth - opts.strokeWidth) / 2, y - eY, opts.barXPosition + opts.barWidth - opts.strokeWidth, y); - break; - } - } - - return { - path: _endingShape, - ending_p_from: _endingShapeFrom, - newY: y - }; - } - } - }]); - - return Bar; - }(); - - /** - * ApexCharts BarStacked Class responsible for drawing both Stacked Columns and Bars. - * - * @module BarStacked - * The whole calculation for stacked bar/column is different from normal bar/column, - * hence it makes sense to derive a new class for it extending most of the props of Parent Bar - **/ - - var BarStacked = - /*#__PURE__*/ - function (_Bar) { - _inherits(BarStacked, _Bar); - - function BarStacked() { - _classCallCheck(this, BarStacked); - - return _possibleConstructorReturn(this, _getPrototypeOf(BarStacked).apply(this, arguments)); - } - - _createClass(BarStacked, [{ - key: "draw", - value: function draw(series, seriesIndex) { - var w = this.w; - this.graphics = new Graphics(this.ctx); - this.fill = new Fill(this.ctx); - this.bar = new Bar(this.ctx, this.xyRatios); - var coreUtils = new CoreUtils(this.ctx, w); - series = coreUtils.getLogSeries(series); - this.yRatio = coreUtils.getLogYRatios(this.yRatio); - this.initVariables(series); - - if (w.config.chart.stackType === '100%') { - series = w.globals.seriesPercent.slice(); - } - - this.series = series; - this.totalItems = 0; - this.prevY = []; // y position on chart - - this.prevX = []; // x position on chart - - this.prevYF = []; // y position including shapes on chart - - this.prevXF = []; // x position including shapes on chart - - this.prevYVal = []; // y values (series[i][j]) in columns - - this.prevXVal = []; // x values (series[i][j]) in bars - - this.xArrj = []; // xj indicates x position on graph in bars - - this.xArrjF = []; // xjF indicates bar's x position + endingshape's positions in bars - - this.xArrjVal = []; // x val means the actual series's y values in horizontal/bars - - this.yArrj = []; // yj indicates y position on graph in columns - - this.yArrjF = []; // yjF indicates bar's y position + endingshape's positions in columns - - this.yArrjVal = []; // y val means the actual series's y values in columns - - for (var sl = 0; sl < series.length; sl++) { - if (series[sl].length > 0) { - this.totalItems += series[sl].length; - } - } - - var ret = this.graphics.group({ - class: 'apexcharts-bar-series apexcharts-plot-series' - }); - var x = 0; - var y = 0; - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - var pathTo = void 0, - pathFrom = void 0; - var xDivision = void 0; // xDivision is the GRIDWIDTH divided by number of datapoints (columns) - - var yDivision = void 0; // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) - - var zeroH = void 0; // zeroH is the baseline where 0 meets y axis - - var zeroW = void 0; // zeroW is the baseline where 0 meets x axis - - var xArrValues = []; - var yArrValues = []; - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; - - if (this.yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; // el to which series will be drawn - - var elSeries = this.graphics.group({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), - rel: i + 1, - 'data:realIndex': realIndex - }); // eldatalabels - - var elDataLabelsWrap = this.graphics.group({ - class: 'apexcharts-datalabels' - }); - var strokeWidth = 0; - var barHeight = 0; - var barWidth = 0; - var initPositions = this.initialPositions(x, y, xDivision, yDivision, zeroH, zeroW); - y = initPositions.y; - barHeight = initPositions.barHeight; - yDivision = initPositions.yDivision; - zeroW = initPositions.zeroW; - x = initPositions.x; - barWidth = initPositions.barWidth; - xDivision = initPositions.xDivision; - zeroH = initPositions.zeroH; - this.yArrj = []; - this.yArrjF = []; - this.yArrjVal = []; - this.xArrj = []; - this.xArrjF = []; - this.xArrjVal = []; // if (!this.horizontal) { - // this.xArrj.push(x + barWidth / 2) - // } - - for (var j = 0; j < w.globals.dataPoints; j++) { - if (w.config.stroke.show) { - if (this.isNullValue) { - strokeWidth = 0; - } else { - strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; - } - } - - var paths = null; - - if (this.isHorizontal) { - paths = this.drawBarPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - barHeight: barHeight, - strokeWidth: strokeWidth, - pathTo: pathTo, - pathFrom: pathFrom, - zeroW: zeroW, - x: x, - y: y, - yDivision: yDivision, - elSeries: elSeries - }); - barWidth = this.series[i][j] / this.invertedYRatio; - } else { - paths = this.drawColumnPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - x: x, - y: y, - xDivision: xDivision, - pathTo: pathTo, - pathFrom: pathFrom, - barWidth: barWidth, - zeroH: zeroH, - strokeWidth: strokeWidth, - elSeries: elSeries - }); - barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; - } - - pathTo = paths.pathTo; - pathFrom = paths.pathFrom; - y = paths.y; - x = paths.x; - xArrValues.push(x); - yArrValues.push(y); - var pathFill = this.bar.getPathFillColor(series, i, j, realIndex); - elSeries = this.renderSeries({ - realIndex: realIndex, - pathFill: pathFill, - j: j, - i: i, - pathFrom: pathFrom, - pathTo: pathTo, - strokeWidth: strokeWidth, - elSeries: elSeries, - x: x, - y: y, - series: series, - barHeight: barHeight, - barWidth: barWidth, - elDataLabelsWrap: elDataLabelsWrap, - type: 'bar', - visibleSeries: 0 - }); - } // push all x val arrays into main xArr - - - w.globals.seriesXvalues[realIndex] = xArrValues; - w.globals.seriesYvalues[realIndex] = yArrValues; // push all current y values array to main PrevY Array - - this.prevY.push(this.yArrj); - this.prevYF.push(this.yArrjF); - this.prevYVal.push(this.yArrjVal); - this.prevX.push(this.xArrj); - this.prevXF.push(this.xArrjF); - this.prevXVal.push(this.xArrjVal); - ret.add(elSeries); - } - - return ret; - } - }, { - key: "initialPositions", - value: function initialPositions(x, y, xDivision, yDivision, zeroH, zeroW) { - var w = this.w; - var barHeight, barWidth; - - if (this.isHorizontal) { - // height divided into equal parts - yDivision = w.globals.gridHeight / w.globals.dataPoints; - barHeight = yDivision; - barHeight = barHeight * parseInt(w.config.plotOptions.bar.barHeight) / 100; - zeroW = this.baseLineInvertedY + w.globals.padHorizontal + (this.isReversed ? w.globals.gridWidth : 0) - (this.isReversed ? this.baseLineInvertedY * 2 : 0); // initial y position is half of barHeight * half of number of Bars - - y = (yDivision - barHeight) / 2; - } else { - // width divided into equal parts - xDivision = w.globals.gridWidth / w.globals.dataPoints; - barWidth = xDivision; - - if (w.globals.isXNumeric) { - xDivision = w.globals.minXDiff / this.xRatio; - barWidth = xDivision * parseInt(this.barOptions.columnWidth) / 100; - } else { - barWidth = barWidth * parseInt(w.config.plotOptions.bar.columnWidth) / 100; - } - - zeroH = this.baseLineY[this.yaxisIndex] + (this.isReversed ? w.globals.gridHeight : 0) - (this.isReversed ? this.baseLineY[this.yaxisIndex] * 2 : 0); // initial x position is one third of barWidth - - x = w.globals.padHorizontal + (xDivision - barWidth) / 2; - } - - return { - x: x, - y: y, - yDivision: yDivision, - xDivision: xDivision, - barHeight: barHeight, - barWidth: barWidth, - zeroH: zeroH, - zeroW: zeroW - }; - } - }, { - key: "drawBarPaths", - value: function drawBarPaths(_ref) { - var indexes = _ref.indexes, - barHeight = _ref.barHeight, - strokeWidth = _ref.strokeWidth, - pathTo = _ref.pathTo, - pathFrom = _ref.pathFrom, - zeroW = _ref.zeroW, - x = _ref.x, - y = _ref.y, - yDivision = _ref.yDivision, - elSeries = _ref.elSeries; - var w = this.w; - var barYPosition = y; - var barXPosition; - var i = indexes.i; - var j = indexes.j; - var realIndex = indexes.realIndex; - var bc = indexes.bc; - var prevBarW = 0; - - for (var k = 0; k < this.prevXF.length; k++) { - prevBarW = prevBarW + this.prevXF[k][j]; - } - - if (i > 0) { - var bXP = zeroW; - - if (this.prevXVal[i - 1][j] < 0) { - if (this.series[i][j] >= 0) { - bXP = this.prevX[i - 1][j] + prevBarW - (this.isReversed ? prevBarW : 0) * 2; - } else { - bXP = this.prevX[i - 1][j]; - } - } else if (this.prevXVal[i - 1][j] >= 0) { - if (this.series[i][j] >= 0) { - bXP = this.prevX[i - 1][j]; - } else { - bXP = this.prevX[i - 1][j] - prevBarW + (this.isReversed ? prevBarW : 0) * 2; - } - } - - barXPosition = bXP; - } else { - // the first series will not have prevX values - barXPosition = zeroW; - } - - if (this.series[i][j] === null) { - x = barXPosition; - } else { - x = barXPosition + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2; - } - - var endingShapeOpts = { - barHeight: barHeight, - strokeWidth: strokeWidth, - invertedYRatio: this.invertedYRatio, - barYPosition: barYPosition, - x: x - }; - var endingShape = this.bar.barEndingShape(w, endingShapeOpts, this.series, i, j); - - if (this.series.length > 1 && i !== this.endingShapeOnSeriesNumber) { - // revert back to flat shape if not last series - endingShape.path = this.graphics.line(endingShape.newX, barYPosition + barHeight - strokeWidth); - } - - this.xArrj.push(endingShape.newX); - this.xArrjF.push(Math.abs(barXPosition - endingShape.newX)); - this.xArrjVal.push(this.series[i][j]); - pathTo = this.graphics.move(barXPosition, barYPosition); - pathFrom = this.graphics.move(barXPosition, barYPosition); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.bar.getPathFrom(realIndex, j, false); - } - - pathTo = pathTo + this.graphics.line(endingShape.newX, barYPosition) + endingShape.path + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition); - pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition); - - if (w.config.plotOptions.bar.colors.backgroundBarColors.length > 0 && i === 0) { - if (bc >= w.config.plotOptions.bar.colors.backgroundBarColors.length) { - bc = 0; - } - - var bcolor = w.config.plotOptions.bar.colors.backgroundBarColors[bc]; - var rect = this.graphics.drawRect(0, barYPosition, w.globals.gridWidth, barHeight, 0, bcolor, w.config.plotOptions.bar.colors.backgroundBarOpacity); - elSeries.add(rect); - rect.node.classList.add('apexcharts-backgroundBar'); - } - - y = y + yDivision; - return { - pathTo: pathTo, - pathFrom: pathFrom, - x: x, - y: y - }; - } - }, { - key: "drawColumnPaths", - value: function drawColumnPaths(_ref2) { - var indexes = _ref2.indexes, - x = _ref2.x, - y = _ref2.y, - xDivision = _ref2.xDivision, - pathTo = _ref2.pathTo, - pathFrom = _ref2.pathFrom, - barWidth = _ref2.barWidth, - zeroH = _ref2.zeroH, - strokeWidth = _ref2.strokeWidth, - elSeries = _ref2.elSeries; - var w = this.w; - var i = indexes.i; - var j = indexes.j; - var realIndex = indexes.realIndex; - var bc = indexes.bc; - - if (w.globals.isXNumeric) { - var seriesVal = w.globals.seriesX[i][j]; - if (!seriesVal) seriesVal = 0; - x = (seriesVal - w.globals.minX) / this.xRatio - barWidth / 2; - } - - var barXPosition = x; - var barYPosition; - var prevBarH = 0; - - for (var k = 0; k < this.prevYF.length; k++) { - prevBarH = prevBarH + this.prevYF[k][j]; - } - - if (i > 0 && !w.globals.isXNumeric || i > 0 && w.globals.isXNumeric && w.globals.seriesX[i - 1][j] === w.globals.seriesX[i][j]) { - var bYP; - var prevYValue = this.prevY[i - 1][j]; - - if (this.prevYVal[i - 1][j] < 0) { - if (this.series[i][j] >= 0) { - bYP = prevYValue - prevBarH + (this.isReversed ? prevBarH : 0) * 2; - } else { - bYP = prevYValue; - } - } else { - if (this.series[i][j] >= 0) { - bYP = prevYValue; - } else { - bYP = prevYValue + prevBarH - (this.isReversed ? prevBarH : 0) * 2; - } - } - - barYPosition = bYP; - } else { - // the first series will not have prevY values, also if the prev index's series X doesn't matches the current index's series X, then start from zero - barYPosition = w.globals.gridHeight - zeroH; - } - - y = barYPosition - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2; - var endingShapeOpts = { - barWidth: barWidth, - strokeWidth: strokeWidth, - yRatio: this.yRatio[this.yaxisIndex], - barXPosition: barXPosition, - y: y - }; - var endingShape = this.bar.barEndingShape(w, endingShapeOpts, this.series, i, j); - this.yArrj.push(endingShape.newY); - this.yArrjF.push(Math.abs(barYPosition - endingShape.newY)); - this.yArrjVal.push(this.series[i][j]); - pathTo = this.graphics.move(barXPosition, barYPosition); - pathFrom = this.graphics.move(barXPosition, barYPosition); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.bar.getPathFrom(realIndex, j, false); - } - - pathTo = pathTo + this.graphics.line(barXPosition, endingShape.newY) + endingShape.path + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition - strokeWidth / 2, barYPosition); - pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition - strokeWidth / 2, barYPosition); - - if (w.config.plotOptions.bar.colors.backgroundBarColors.length > 0 && i === 0) { - if (bc >= w.config.plotOptions.bar.colors.backgroundBarColors.length) { - bc = 0; - } - - var bcolor = w.config.plotOptions.bar.colors.backgroundBarColors[bc]; - var rect = this.graphics.drawRect(barXPosition, 0, barWidth, w.globals.gridHeight, 0, bcolor, w.config.plotOptions.bar.colors.backgroundBarOpacity); - elSeries.add(rect); - rect.node.classList.add('apexcharts-backgroundBar'); - } - - x = x + xDivision; - return { - pathTo: pathTo, - pathFrom: pathFrom, - x: w.globals.isXNumeric ? x - xDivision : x, - y: y - }; - } - /* - * When user clicks on legends, the collapsed series will be filled with [0,0,0,...,0] - * We need to make sure, that the last series is not [0,0,0,...,0] - * as we need to draw shapes on the last series (for stacked bars/columns only) - * Hence, we are collecting all inner arrays in series which has [0,0,0...,0] - **/ - - }, { - key: "checkZeroSeries", - value: function checkZeroSeries(_ref3) { - var series = _ref3.series; - var w = this.w; - - for (var zs = 0; zs < series.length; zs++) { - var total = 0; - - for (var zsj = 0; zsj < series[w.globals.maxValsInArrayIndex].length; zsj++) { - total += series[zs][zsj]; - } - - if (total === 0) { - this.zeroSerieses.push(zs); - } - } // After getting all zeroserieses, we need to ensure whether endingshapeonSeries is not in that zeroseries array - - - for (var s = series.length - 1; s >= 0; s--) { - if (this.zeroSerieses.indexOf(s) > -1 && s === this.endingShapeOnSeriesNumber) { - this.endingShapeOnSeriesNumber -= 1; - } - } - } - }]); - - return BarStacked; - }(Bar); - - /** - * ApexCharts CandleStick Class responsible for drawing both Stacked Columns and Bars. - * - * @module CandleStick - **/ - - var CandleStick = - /*#__PURE__*/ - function (_Bar) { - _inherits(CandleStick, _Bar); - - function CandleStick() { - _classCallCheck(this, CandleStick); - - return _possibleConstructorReturn(this, _getPrototypeOf(CandleStick).apply(this, arguments)); - } - - _createClass(CandleStick, [{ - key: "draw", - value: function draw(series, seriesIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - this.candlestickOptions = this.w.config.plotOptions.candlestick; - var coreUtils = new CoreUtils(this.ctx, w); - series = coreUtils.getLogSeries(series); - this.series = series; - this.yRatio = coreUtils.getLogYRatios(this.yRatio); - this.initVariables(series); - var ret = graphics.group({ - class: 'apexcharts-candlestick-series apexcharts-plot-series' - }); - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - var pathTo = void 0, - pathFrom = void 0; - var x = void 0, - y = void 0, - xDivision = void 0, - // xDivision is the GRIDWIDTH divided by number of datapoints (columns) - zeroH = void 0; // zeroH is the baseline where 0 meets y axis - - var yArrj = []; // hold y values of current iterating series - - var xArrj = []; // hold x values of current iterating series - - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn - - var elSeries = graphics.group({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), - rel: i + 1, - 'data:realIndex': realIndex - }); - - if (series[i].length > 0) { - this.visibleI = this.visibleI + 1; - } - - var strokeWidth = 0; - var barHeight = 0; - var barWidth = 0; - - if (this.yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - var initPositions = this.initialPositions(); - y = initPositions.y; - barHeight = initPositions.barHeight; - x = initPositions.x; - barWidth = initPositions.barWidth; - xDivision = initPositions.xDivision; - zeroH = initPositions.zeroH; - xArrj.push(x + barWidth / 2); // eldatalabels - - var elDataLabelsWrap = graphics.group({ - class: 'apexcharts-datalabels' - }); - - for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { - if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) { - this.isNullValue = true; - } else { - this.isNullValue = false; - } - - if (w.config.stroke.show) { - if (this.isNullValue) { - strokeWidth = 0; - } else { - strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; - } - } - - var color = void 0; - var paths = this.drawCandleStickPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - x: x, - y: y, - xDivision: xDivision, - pathTo: pathTo, - pathFrom: pathFrom, - barWidth: barWidth, - zeroH: zeroH, - strokeWidth: strokeWidth, - elSeries: elSeries - }); - pathTo = paths.pathTo; - pathFrom = paths.pathFrom; - y = paths.y; - x = paths.x; - color = paths.color; // push current X - - if (j > 0) { - xArrj.push(x + barWidth / 2); - } - - yArrj.push(y); - var pathFill = fill.fillPath({ - seriesNumber: realIndex, - color: color, - value: series[i][j] - }); - var lineFill = this.candlestickOptions.wick.useFillColor ? color : undefined; - elSeries = this.renderSeries({ - realIndex: realIndex, - pathFill: pathFill, - lineFill: lineFill, - j: j, - i: i, - pathFrom: pathFrom, - pathTo: pathTo, - strokeWidth: strokeWidth, - elSeries: elSeries, - x: x, - y: y, - series: series, - barHeight: barHeight, - barWidth: barWidth, - elDataLabelsWrap: elDataLabelsWrap, - visibleSeries: this.visibleI, - type: 'candlestick' - }); - } // push all x val arrays into main xArr - - - w.globals.seriesXvalues[realIndex] = xArrj; - w.globals.seriesYvalues[realIndex] = yArrj; - ret.add(elSeries); - } - - return ret; - } - }, { - key: "drawCandleStickPaths", - value: function drawCandleStickPaths(_ref) { - var indexes = _ref.indexes, - x = _ref.x, - y = _ref.y, - xDivision = _ref.xDivision, - pathTo = _ref.pathTo, - pathFrom = _ref.pathFrom, - barWidth = _ref.barWidth, - zeroH = _ref.zeroH, - strokeWidth = _ref.strokeWidth; - var w = this.w; - var graphics = new Graphics(this.ctx); - var i = indexes.i; - var j = indexes.j; - var isPositive = true; - var colorPos = w.config.plotOptions.candlestick.colors.upward; - var colorNeg = w.config.plotOptions.candlestick.colors.downward; - var yRatio = this.yRatio[this.yaxisIndex]; - var realIndex = indexes.realIndex; - var ohlc = this.getOHLCValue(realIndex, j); - var l1 = zeroH; - var l2 = zeroH; - - if (ohlc.o > ohlc.c) { - isPositive = false; - } - - var y1 = Math.min(ohlc.o, ohlc.c); - var y2 = Math.max(ohlc.o, ohlc.c); - - if (w.globals.isXNumeric) { - x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2; - } - - var barXPosition = x + barWidth * this.visibleI; - - if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { - y1 = zeroH; - } else { - y1 = zeroH - y1 / yRatio; - y2 = zeroH - y2 / yRatio; - l1 = zeroH - ohlc.h / yRatio; - l2 = zeroH - ohlc.l / yRatio; - } - - pathTo = graphics.move(barXPosition, zeroH); - pathFrom = graphics.move(barXPosition, y1); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j, true); - } - - pathTo = graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2); - pathFrom = pathFrom + graphics.move(barXPosition, y1); - - if (!w.globals.isXNumeric) { - x = x + xDivision; - } - - return { - pathTo: pathTo, - pathFrom: pathFrom, - x: x, - y: y2, - barXPosition: barXPosition, - color: isPositive ? colorPos : colorNeg - }; - } - }, { - key: "getOHLCValue", - value: function getOHLCValue(i, j) { - var w = this.w; - return { - o: w.globals.seriesCandleO[i][j], - h: w.globals.seriesCandleH[i][j], - l: w.globals.seriesCandleL[i][j], - c: w.globals.seriesCandleC[i][j] - }; - } - }]); - - return CandleStick; - }(Bar); - - var Crosshairs = - /*#__PURE__*/ - function () { - function Crosshairs(ctx) { - _classCallCheck(this, Crosshairs); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Crosshairs, [{ - key: "drawXCrosshairs", - value: function drawXCrosshairs() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var filters = new Filters(this.ctx); - var crosshairGradient = w.config.xaxis.crosshairs.fill.gradient; - var crosshairShadow = w.config.xaxis.crosshairs.dropShadow; - var fillType = w.config.xaxis.crosshairs.fill.type; - var gradientFrom = crosshairGradient.colorFrom; - var gradientTo = crosshairGradient.colorTo; - var opacityFrom = crosshairGradient.opacityFrom; - var opacityTo = crosshairGradient.opacityTo; - var stops = crosshairGradient.stops; - var shadow = 'none'; - var dropShadow = crosshairShadow.enabled; - var shadowLeft = crosshairShadow.left; - var shadowTop = crosshairShadow.top; - var shadowBlur = crosshairShadow.blur; - var shadowColor = crosshairShadow.color; - var shadowOpacity = crosshairShadow.opacity; - var xcrosshairsFill = w.config.xaxis.crosshairs.fill.color; - - if (w.config.xaxis.crosshairs.show) { - if (fillType === 'gradient') { - xcrosshairsFill = graphics.drawGradient('vertical', gradientFrom, gradientTo, opacityFrom, opacityTo, null, stops, null); - } - - var xcrosshairs = graphics.drawRect(); - - if (w.config.xaxis.crosshairs.width === 1) { - // to prevent drawing 2 lines, convert rect to line - xcrosshairs = graphics.drawLine(); - } - - xcrosshairs.attr({ - class: 'apexcharts-xcrosshairs', - x: 0, - y: 0, - y2: w.globals.gridHeight, - width: Utils.isNumber(w.config.xaxis.crosshairs.width) ? w.config.xaxis.crosshairs.width : 0, - height: w.globals.gridHeight, - fill: xcrosshairsFill, - filter: shadow, - 'fill-opacity': w.config.xaxis.crosshairs.opacity, - stroke: w.config.xaxis.crosshairs.stroke.color, - 'stroke-width': w.config.xaxis.crosshairs.stroke.width, - 'stroke-dasharray': w.config.xaxis.crosshairs.stroke.dashArray - }); - - if (dropShadow) { - xcrosshairs = filters.dropShadow(xcrosshairs, { - left: shadowLeft, - top: shadowTop, - blur: shadowBlur, - color: shadowColor, - opacity: shadowOpacity - }); - } - - w.globals.dom.elGraphical.add(xcrosshairs); - } - } - }, { - key: "drawYCrosshairs", - value: function drawYCrosshairs() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var crosshair = w.config.yaxis[0].crosshairs; - - if (w.config.yaxis[0].crosshairs.show) { - var ycrosshairs = graphics.drawLine(0, 0, w.globals.gridWidth, 0, crosshair.stroke.color, crosshair.stroke.dashArray, crosshair.stroke.width); - ycrosshairs.attr({ - class: 'apexcharts-ycrosshairs' - }); - w.globals.dom.elGraphical.add(ycrosshairs); - } // draw an invisible crosshair to help in positioning the yaxis tooltip - - - var ycrosshairsHidden = graphics.drawLine(0, 0, w.globals.gridWidth, 0, crosshair.stroke.color, 0, 0); - ycrosshairsHidden.attr({ - class: 'apexcharts-ycrosshairs-hidden' - }); - w.globals.dom.elGraphical.add(ycrosshairsHidden); - } - }]); - - return Crosshairs; - }(); - - /** - * ApexCharts HeatMap Class. - * @module HeatMap - **/ - - var HeatMap = - /*#__PURE__*/ - function () { - function HeatMap(ctx, xyRatios) { - _classCallCheck(this, HeatMap); - - this.ctx = ctx; - this.w = ctx.w; - this.xRatio = xyRatios.xRatio; - this.yRatio = xyRatios.yRatio; - this.negRange = false; - this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation; - this.rectRadius = this.w.config.plotOptions.heatmap.radius; - this.strokeWidth = this.w.config.stroke.width; - } - - _createClass(HeatMap, [{ - key: "draw", - value: function draw(series) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var ret = graphics.group({ - class: 'apexcharts-heatmap' - }); - ret.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); // width divided into equal parts - - var xDivision = w.globals.gridWidth / w.globals.dataPoints; - var yDivision = w.globals.gridHeight / w.globals.series.length; - var y1 = 0; - var rev = false; - this.checkColorRange(); - var heatSeries = series.slice(); - - if (w.config.yaxis[0].reversed) { - rev = true; - heatSeries.reverse(); - } - - for (var i = rev ? 0 : heatSeries.length - 1; rev ? i < heatSeries.length : i >= 0; rev ? i++ : i--) { - // el to which series will be drawn - var elSeries = graphics.group({ - class: "apexcharts-series apexcharts-heatmap-series", - seriesName: Utils.escapeString(w.globals.seriesNames[i]), - rel: i + 1, - 'data:realIndex': i - }); - - if (w.config.chart.dropShadow.enabled) { - var shadow = w.config.chart.dropShadow; - var filters = new Filters(this.ctx); - filters.dropShadow(elSeries, shadow, i); - } - - var x1 = 0; - - for (var j = 0; j < heatSeries[i].length; j++) { - var colorShadePercent = 1; - var heatColorProps = this.determineHeatColor(i, j); - - if (w.globals.hasNegs || this.negRange) { - var shadeIntensity = w.config.plotOptions.heatmap.shadeIntensity; - - if (w.config.plotOptions.heatmap.reverseNegativeShade) { - if (heatColorProps.percent < 0) { - colorShadePercent = heatColorProps.percent / 100 * (shadeIntensity * 1.25); - } else { - colorShadePercent = (1 - heatColorProps.percent / 100) * (shadeIntensity * 1.25); - } - } else { - if (heatColorProps.percent < 0) { - colorShadePercent = 1 - (1 + heatColorProps.percent / 100) * shadeIntensity; - } else { - colorShadePercent = (1 - heatColorProps.percent / 100) * shadeIntensity; - } - } - } else { - colorShadePercent = 1 - heatColorProps.percent / 100; - } - - var color = heatColorProps.color; - - if (w.config.plotOptions.heatmap.enableShades) { - var utils = new Utils(); - color = Utils.hexToRgba(utils.shadeColor(colorShadePercent, heatColorProps.color), w.config.fill.opacity); - } - - var radius = this.rectRadius; - var rect = graphics.drawRect(x1, y1, xDivision, yDivision, radius); - rect.attr({ - cx: x1, - cy: y1 - }); - rect.node.classList.add('apexcharts-heatmap-rect'); - elSeries.add(rect); - rect.attr({ - fill: color, - i: i, - index: i, - j: j, - val: heatSeries[i][j], - 'stroke-width': this.strokeWidth, - stroke: w.globals.stroke.colors[0], - color: color - }); - rect.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this, rect)); - rect.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this, rect)); - rect.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this, rect)); - - if (w.config.chart.animations.enabled && !w.globals.dataChanged) { - var speed = 1; - - if (!w.globals.resized) { - speed = w.config.chart.animations.speed; - } - - this.animateHeatMap(rect, x1, y1, xDivision, yDivision, speed); - } - - if (w.globals.dataChanged) { - var _speed = 1; - - if (this.dynamicAnim.enabled && w.globals.shouldAnimate) { - _speed = this.dynamicAnim.speed; - var colorFrom = w.globals.previousPaths[i] && w.globals.previousPaths[i][j] && w.globals.previousPaths[i][j].color; - if (!colorFrom) colorFrom = 'rgba(255, 255, 255, 0)'; - this.animateHeatColor(rect, Utils.isColorHex(colorFrom) ? colorFrom : Utils.rgb2hex(colorFrom), Utils.isColorHex(color) ? color : Utils.rgb2hex(color), _speed); - } - } - - var dataLabels = this.calculateHeatmapDataLabels({ - x: x1, - y: y1, - i: i, - j: j, - series: heatSeries, - rectHeight: yDivision, - rectWidth: xDivision - }); - - if (dataLabels !== null) { - elSeries.add(dataLabels); - } - - x1 = x1 + xDivision; - } - - y1 = y1 + yDivision; - ret.add(elSeries); - } // adjust yaxis labels for heatmap - - - var yAxisScale = w.globals.yAxisScale[0].result.slice(); - - if (w.config.yaxis[0].reversed) { - yAxisScale.unshift(''); - } else { - yAxisScale.push(''); - } - - w.globals.yAxisScale[0].result = yAxisScale; - var divisor = w.globals.gridHeight / w.globals.series.length; - w.config.yaxis[0].labels.offsetY = -(divisor / 2); - return ret; - } - }, { - key: "checkColorRange", - value: function checkColorRange() { - var _this = this; - - var w = this.w; - var heatmap = w.config.plotOptions.heatmap; - - if (heatmap.colorScale.ranges.length > 0) { - heatmap.colorScale.ranges.map(function (range, index) { - if (range.from < 0) { - _this.negRange = true; - } - }); - } - } - }, { - key: "determineHeatColor", - value: function determineHeatColor(i, j) { - var w = this.w; - var val = w.globals.series[i][j]; - var heatmap = w.config.plotOptions.heatmap; - var seriesNumber = heatmap.colorScale.inverse ? j : i; - var color = w.globals.colors[seriesNumber]; - var min = Math.min.apply(Math, _toConsumableArray(w.globals.series[i])); - var max = Math.max.apply(Math, _toConsumableArray(w.globals.series[i])); - - if (!heatmap.distributed) { - min = w.globals.minY; - max = w.globals.maxY; - } - - if (typeof heatmap.colorScale.min !== 'undefined') { - min = heatmap.colorScale.min < w.globals.minY ? heatmap.colorScale.min : w.globals.minY; - max = heatmap.colorScale.max > w.globals.maxY ? heatmap.colorScale.max : w.globals.maxY; - } - - var total = Math.abs(max) + Math.abs(min); - var percent = 100 * val / (total === 0 ? total - 0.000001 : total); - - if (heatmap.colorScale.ranges.length > 0) { - var colorRange = heatmap.colorScale.ranges; - colorRange.map(function (range, index) { - if (val >= range.from && val <= range.to) { - color = range.color; - min = range.from; - max = range.to; - - var _total = Math.abs(max) + Math.abs(min); - - percent = 100 * val / (_total === 0 ? _total - 0.000001 : _total); - } - }); - } - - return { - color: color, - percent: percent - }; - } - }, { - key: "calculateHeatmapDataLabels", - value: function calculateHeatmapDataLabels(_ref) { - var x = _ref.x, - y = _ref.y, - i = _ref.i, - j = _ref.j, - series = _ref.series, - rectHeight = _ref.rectHeight, - rectWidth = _ref.rectWidth; - var w = this.w; // let graphics = new Graphics(this.ctx) - - var dataLabelsConfig = w.config.dataLabels; - var graphics = new Graphics(this.ctx); - var dataLabels = new DataLabels(this.ctx); - var formatter = dataLabelsConfig.formatter; - var elDataLabelsWrap = null; - - if (dataLabelsConfig.enabled) { - elDataLabelsWrap = graphics.group({ - class: 'apexcharts-data-labels' - }); - var offX = dataLabelsConfig.offsetX; - var offY = dataLabelsConfig.offsetY; - var dataLabelsX = x + rectWidth / 2 + offX; - var dataLabelsY = y + rectHeight / 2 + parseInt(dataLabelsConfig.style.fontSize) / 3 + offY; - var text = formatter(w.globals.series[i][j], { - seriesIndex: i, - dataPointIndex: j, - w: w - }); - dataLabels.plotDataLabelsText({ - x: dataLabelsX, - y: dataLabelsY, - text: text, - i: i, - j: j, - parent: elDataLabelsWrap, - dataLabelsConfig: dataLabelsConfig - }); - } - - return elDataLabelsWrap; - } - }, { - key: "animateHeatMap", - value: function animateHeatMap(el, x, y, width, height, speed) { - var _this2 = this; - - var animations = new Animations(this.ctx); - animations.animateRect(el, { - x: x + width / 2, - y: y + height / 2, - width: 0, - height: 0 - }, { - x: x, - y: y, - width: width, - height: height - }, speed, function () { - _this2.w.globals.animationEnded = true; - }); - } - }, { - key: "animateHeatColor", - value: function animateHeatColor(el, colorFrom, colorTo, speed) { - el.attr({ - fill: colorFrom - }).animate(speed).attr({ - fill: colorTo - }); - } - }]); - - return HeatMap; - }(); - - /** - * ApexCharts Pie Class for drawing Pie / Donut Charts. - * @module Pie - **/ - - var Pie = - /*#__PURE__*/ - function () { - function Pie(ctx) { - _classCallCheck(this, Pie); - - this.ctx = ctx; - this.w = ctx.w; - this.chartType = this.w.config.chart.type; - this.initialAnim = this.w.config.chart.animations.enabled; - this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; - this.animBeginArr = [0]; - this.animDur = 0; - this.donutDataLabels = this.w.config.plotOptions.pie.donut.labels; - var w = this.w; - this.lineColorArr = w.globals.stroke.colors !== undefined ? w.globals.stroke.colors : w.globals.colors; - this.defaultSize = w.globals.svgHeight < w.globals.svgWidth ? w.globals.svgHeight - 35 : w.globals.gridWidth; - this.centerY = this.defaultSize / 2; - this.centerX = w.globals.gridWidth / 2; - this.fullAngle = 360; - this.size = 0; - this.donutSize = 0; - this.sliceLabels = []; - this.prevSectorAngleArr = []; // for dynamic animations - } - - _createClass(Pie, [{ - key: "draw", - value: function draw(series) { - var self = this; - var w = this.w; - var graphics = new Graphics(this.ctx); - var ret = graphics.group({ - class: 'apexcharts-pie' - }); - var total = 0; - - for (var k = 0; k < series.length; k++) { - // CALCULATE THE TOTAL - total += Utils.negToZero(series[k]); - } - - var sectorAngleArr = []; // el to which series will be drawn - - var elSeries = graphics.group(); // prevent division by zero error if there is no data - - if (total === 0) { - total = 0.00001; - } - - for (var i = 0; i < series.length; i++) { - // CALCULATE THE ANGLES - var angle = this.fullAngle * Utils.negToZero(series[i]) / total; - sectorAngleArr.push(angle); - } - - if (w.globals.dataChanged) { - var prevTotal = 0; - - for (var _k = 0; _k < w.globals.previousPaths.length; _k++) { - // CALCULATE THE PREV TOTAL - prevTotal += Utils.negToZero(w.globals.previousPaths[_k]); - } - - var previousAngle; - - for (var _i = 0; _i < w.globals.previousPaths.length; _i++) { - // CALCULATE THE PREVIOUS ANGLES - previousAngle = this.fullAngle * Utils.negToZero(w.globals.previousPaths[_i]) / prevTotal; - this.prevSectorAngleArr.push(previousAngle); - } - } - - this.size = this.defaultSize / 2.05 - w.config.stroke.width - w.config.chart.dropShadow.blur; - - if (w.config.plotOptions.pie.size !== undefined) { - this.size = w.config.plotOptions.pie.size; - } - - this.donutSize = this.size * parseInt(w.config.plotOptions.pie.donut.size) / 100; - var scaleSize = w.config.plotOptions.pie.customScale; - var halfW = w.globals.gridWidth / 2; - var halfH = w.globals.gridHeight / 2; - var translateX = halfW - w.globals.gridWidth / 2 * scaleSize; - var translateY = halfH - w.globals.gridHeight / 2 * scaleSize; - - if (this.donutDataLabels.show) { - var dataLabels = this.renderInnerDataLabels(this.donutDataLabels, { - hollowSize: this.donutSize, - centerX: this.centerX, - centerY: this.centerY, - opacity: this.donutDataLabels.show, - translateX: translateX, - translateY: translateY - }); - ret.add(dataLabels); - } - - if (w.config.chart.type === 'donut') { - // draw the inner circle and add some text to it - var circle = graphics.drawCircle(this.donutSize); - circle.attr({ - cx: this.centerX, - cy: this.centerY, - fill: w.config.plotOptions.pie.donut.background - }); - elSeries.add(circle); - } - - var elG = self.drawArcs(sectorAngleArr, series); // add slice dataLabels at the end - - this.sliceLabels.forEach(function (s) { - elG.add(s); - }); - elSeries.attr({ - transform: "translate(".concat(translateX, ", ").concat(translateY - 5, ") scale(").concat(scaleSize, ")") - }); - ret.attr({ - 'data:innerTranslateX': translateX, - 'data:innerTranslateY': translateY - 25 - }); - elSeries.add(elG); - ret.add(elSeries); - return ret; - } // core function for drawing pie arcs - - }, { - key: "drawArcs", - value: function drawArcs(sectorAngleArr, series) { - var w = this.w; - var filters = new Filters(this.ctx); - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - var g = graphics.group(); - var startAngle = 0; - var prevStartAngle = 0; - var endAngle = 0; - var prevEndAngle = 0; - this.strokeWidth = w.config.stroke.show ? w.config.stroke.width : 0; - - for (var i = 0; i < sectorAngleArr.length; i++) { - // if(sectorAngleArr[i]>0) { - var elPieArc = graphics.group({ - class: "apexcharts-series apexcharts-pie-series", - seriesName: Utils.escapeString(w.globals.seriesNames[i]), - id: 'apexcharts-series-' + i, - rel: i + 1 - }); - g.add(elPieArc); - startAngle = endAngle; - prevStartAngle = prevEndAngle; - endAngle = startAngle + sectorAngleArr[i]; - prevEndAngle = prevStartAngle + this.prevSectorAngleArr[i]; - var angle = endAngle - startAngle; - var pathFill = fill.fillPath({ - seriesNumber: i, - size: this.size, - value: series[i] - }); // additionaly, pass size for gradient drawing in the fillPath function - - var path = this.getChangedPath(prevStartAngle, prevEndAngle); - var elPath = graphics.drawPath({ - d: path, - stroke: this.lineColorArr instanceof Array ? this.lineColorArr[i] : this.lineColorArr, - strokeWidth: this.strokeWidth, - fill: pathFill, - fillOpacity: w.config.fill.opacity, - classes: 'apexcharts-pie-area' - }); - elPath.attr({ - id: "apexcharts-".concat(w.config.chart.type, "-slice-").concat(i), - index: 0, - j: i - }); - - if (w.config.chart.dropShadow.enabled) { - var shadow = w.config.chart.dropShadow; - filters.dropShadow(elPath, shadow, i); - } - - this.addListeners(elPath, this.donutDataLabels); - Graphics.setAttrs(elPath.node, { - 'data:angle': angle, - 'data:startAngle': startAngle, - 'data:strokeWidth': this.strokeWidth, - 'data:value': series[i] - }); - var labelPosition = { - x: 0, - y: 0 - }; - - if (w.config.chart.type === 'pie') { - labelPosition = Utils.polarToCartesian(this.centerX, this.centerY, this.size / 1.25 + w.config.plotOptions.pie.dataLabels.offset, startAngle + (endAngle - startAngle) / 2); - } else if (w.config.chart.type === 'donut') { - labelPosition = Utils.polarToCartesian(this.centerX, this.centerY, (this.size + this.donutSize) / 2 + w.config.plotOptions.pie.dataLabels.offset, startAngle + (endAngle - startAngle) / 2); - } - - elPieArc.add(elPath); // Animation code starts - - var dur = 0; - - if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) { - dur = (endAngle - startAngle) / this.fullAngle * w.config.chart.animations.speed; - this.animDur = dur + this.animDur; - this.animBeginArr.push(this.animDur); - } else { - this.animBeginArr.push(0); - } - - if (this.dynamicAnim && w.globals.dataChanged) { - this.animatePaths(elPath, { - endAngle: endAngle, - startAngle: startAngle, - prevStartAngle: prevStartAngle, - prevEndAngle: prevEndAngle, - animateStartingPos: true, - i: i, - animBeginArr: this.animBeginArr, - dur: w.config.chart.animations.dynamicAnimation.speed - }); - } else { - this.animatePaths(elPath, { - endAngle: endAngle, - startAngle: startAngle, - i: i, - totalItems: sectorAngleArr.length - 1, - animBeginArr: this.animBeginArr, - dur: dur - }); - } // animation code ends - - - if (w.config.plotOptions.pie.expandOnClick) { - elPath.click(this.pieClicked.bind(this, i)); - } - - if (w.config.dataLabels.enabled) { - var xPos = labelPosition.x; - var yPos = labelPosition.y; - var text = 100 * (endAngle - startAngle) / 360 + '%'; - - if (angle !== 0 && w.config.plotOptions.pie.dataLabels.minAngleToShowLabel < sectorAngleArr[i]) { - var formatter = w.config.dataLabels.formatter; - - if (formatter !== undefined) { - text = formatter(w.globals.seriesPercent[i][0], { - seriesIndex: i, - w: w - }); - } - - var foreColor = w.globals.dataLabels.style.colors[i]; - var elPieLabel = graphics.drawText({ - x: xPos, - y: yPos, - text: text, - textAnchor: 'middle', - fontSize: w.config.dataLabels.style.fontSize, - fontFamily: w.config.dataLabels.style.fontFamily, - foreColor: foreColor - }); - - if (w.config.dataLabels.dropShadow.enabled) { - var textShadow = w.config.dataLabels.dropShadow; - - var _filters = new Filters(this.ctx); - - _filters.dropShadow(elPieLabel, textShadow); - } - - elPieLabel.node.classList.add('apexcharts-pie-label'); - - if (w.config.chart.animations.animate && w.globals.resized === false) { - elPieLabel.node.classList.add('apexcharts-pie-label-delay'); - elPieLabel.node.style.animationDelay = w.config.chart.animations.speed / 940 + 's'; - } - - this.sliceLabels.push(elPieLabel); - } - } // } - - } - - return g; - } - }, { - key: "addListeners", - value: function addListeners(elPath, dataLabels) { - var graphics = new Graphics(this.ctx); // append filters on mouseenter and mouseleave - - elPath.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this, elPath)); - elPath.node.addEventListener('mouseenter', this.printDataLabelsInner.bind(this, elPath.node, dataLabels)); - elPath.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this, elPath)); - elPath.node.addEventListener('mouseleave', this.revertDataLabelsInner.bind(this, elPath.node, dataLabels)); - elPath.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this, elPath)); - elPath.node.addEventListener('mousedown', this.printDataLabelsInner.bind(this, elPath.node, dataLabels)); - } // This function can be used for other circle charts too - - }, { - key: "animatePaths", - value: function animatePaths(el, opts) { - var w = this.w; - var me = this; - var angle = opts.endAngle - opts.startAngle; - var prevAngle = angle; - var fromStartAngle = opts.startAngle; - var toStartAngle = opts.startAngle; - - if (opts.prevStartAngle !== undefined && opts.prevEndAngle !== undefined) { - fromStartAngle = opts.prevEndAngle; - prevAngle = opts.prevEndAngle - opts.prevStartAngle; - } - - if (opts.i === w.config.series.length - 1) { - // some adjustments for the last overlapping paths - if (angle + toStartAngle > this.fullAngle) { - opts.endAngle = opts.endAngle - (angle + toStartAngle); - } else if (angle + toStartAngle < this.fullAngle) { - opts.endAngle = opts.endAngle + (this.fullAngle - (angle + toStartAngle)); - } - } - - if (angle === this.fullAngle) angle = this.fullAngle - 0.01; - me.animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts); - } - }, { - key: "animateArc", - value: function animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts) { - var me = this; - var w = this.w; - var size = me.size; - - if (!size) { - size = opts.size; - } - - var path; - - if (isNaN(fromStartAngle) || isNaN(prevAngle)) { - fromStartAngle = toStartAngle; - prevAngle = angle; - opts.dur = 0; - } - - var currAngle = angle; - var startAngle = toStartAngle; - var fromAngle = fromStartAngle - toStartAngle; - - if (w.globals.dataChanged && opts.shouldSetPrevPaths) { - // to avoid flickering, set prev path first and then we will animate from there - path = me.getPiePath({ - me: me, - startAngle: startAngle, - angle: prevAngle, - size: size - }); - el.attr({ - d: path - }); - } - - if (opts.dur !== 0) { - el.animate(opts.dur, w.globals.easing, opts.animBeginArr[opts.i]).afterAll(function () { - if (w.config.chart.type === 'pie' || w.config.chart.type === 'donut') { - this.animate(300).attr({ - 'stroke-width': w.config.stroke.width - }); - } - - w.globals.animationEnded = true; - }).during(function (pos) { - currAngle = fromAngle + (angle - fromAngle) * pos; - - if (opts.animateStartingPos) { - currAngle = prevAngle + (angle - prevAngle) * pos; - startAngle = fromStartAngle - prevAngle + (toStartAngle - (fromStartAngle - prevAngle)) * pos; - } - - path = me.getPiePath({ - me: me, - startAngle: startAngle, - angle: currAngle, - size: size - }); - el.node.setAttribute('data:pathOrig', path); - el.attr({ - d: path - }); - }); - } else { - path = me.getPiePath({ - me: me, - startAngle: startAngle, - angle: angle, - size: size - }); - - if (!opts.isTrack) { - w.globals.animationEnded = true; - } - - el.node.setAttribute('data:pathOrig', path); - el.attr({ - d: path - }); - } - } - }, { - key: "pieClicked", - value: function pieClicked(i) { - var w = this.w; - var me = this; - var path; - var size = me.size + 4; - var elPath = w.globals.dom.Paper.select("#apexcharts-".concat(w.config.chart.type.toLowerCase(), "-slice-").concat(i)).members[0]; - var pathFrom = elPath.attr('d'); - - if (elPath.attr('data:pieClicked') === 'true') { - elPath.attr({ - 'data:pieClicked': 'false' - }); - this.revertDataLabelsInner(elPath.node, this.donutDataLabels); - var origPath = elPath.attr('data:pathOrig'); - elPath.attr({ - d: origPath - }); - return; - } else { - // reset all elems - var allEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-pie-area'); - Array.prototype.forEach.call(allEls, function (pieSlice) { - pieSlice.setAttribute('data:pieClicked', 'false'); - var origPath = pieSlice.getAttribute('data:pathOrig'); - pieSlice.setAttribute('d', origPath); - }); - elPath.attr('data:pieClicked', 'true'); - } - - var startAngle = parseInt(elPath.attr('data:startAngle')); - var angle = parseInt(elPath.attr('data:angle')); - path = me.getPiePath({ - me: me, - startAngle: startAngle, - angle: angle, - size: size - }); - if (angle === 360) return; - elPath.plot(path).animate(1).plot(pathFrom).animate(100).plot(path); - } - }, { - key: "getChangedPath", - value: function getChangedPath(prevStartAngle, prevEndAngle) { - var path = ''; - - if (this.dynamicAnim && this.w.globals.dataChanged) { - path = this.getPiePath({ - me: this, - startAngle: prevStartAngle, - angle: prevEndAngle - prevStartAngle, - size: this.size - }); - } - - return path; - } - }, { - key: "getPiePath", - value: function getPiePath(_ref) { - var me = _ref.me, - startAngle = _ref.startAngle, - angle = _ref.angle, - size = _ref.size; - var w = this.w; - var path; - var startDeg = startAngle; - var startRadians = Math.PI * (startDeg - 90) / 180; - var endDeg = angle + startAngle; - if (Math.ceil(endDeg) >= 360) endDeg = 359.99; - var endRadians = Math.PI * (endDeg - 90) / 180; - var x1 = me.centerX + size * Math.cos(startRadians); - var y1 = me.centerY + size * Math.sin(startRadians); - var x2 = me.centerX + size * Math.cos(endRadians); - var y2 = me.centerY + size * Math.sin(endRadians); - var startInner = Utils.polarToCartesian(me.centerX, me.centerY, me.donutSize, endDeg); - var endInner = Utils.polarToCartesian(me.centerX, me.centerY, me.donutSize, startDeg); - var largeArc = angle > 180 ? 1 : 0; - - if (w.config.chart.type === 'donut') { - path = ['M', x1, y1, 'A', size, size, 0, largeArc, 1, x2, y2, 'L', startInner.x, startInner.y, 'A', me.donutSize, me.donutSize, 0, largeArc, 0, endInner.x, endInner.y, 'L', x1, y1, 'z'].join(' '); - } else if (w.config.chart.type === 'pie') { - path = ['M', x1, y1, 'A', size, size, 0, largeArc, 1, x2, y2, 'L', me.centerX, me.centerY, 'L', x1, y1].join(' '); - } else { - path = ['M', x1, y1, 'A', size, size, 0, largeArc, 1, x2, y2].join(' '); - } - - return path; - } - }, { - key: "renderInnerDataLabels", - value: function renderInnerDataLabels(dataLabelsConfig, opts) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var g = graphics.group({ - class: 'apexcharts-datalabels-group', - transform: "translate(".concat(opts.translateX ? opts.translateX : 0, ", ").concat(opts.translateY ? opts.translateY : 0, ")") - }); - var showTotal = dataLabelsConfig.total.show; - g.node.style.opacity = opts.opacity; - var x = opts.centerX; - var y = opts.centerY; - var labelColor, valueColor; - - if (dataLabelsConfig.name.color === undefined) { - labelColor = w.globals.colors[0]; - } else { - labelColor = dataLabelsConfig.name.color; - } - - if (dataLabelsConfig.value.color === undefined) { - valueColor = w.config.chart.foreColor; - } else { - valueColor = dataLabelsConfig.value.color; - } - - var lbFormatter = dataLabelsConfig.value.formatter; - var val = ''; - var name = ''; - - if (showTotal) { - labelColor = dataLabelsConfig.total.color; - name = dataLabelsConfig.total.label; - val = dataLabelsConfig.total.formatter(w); - } else { - if (w.globals.series.length === 1) { - val = lbFormatter(w.globals.series[0], w); - name = w.globals.seriesNames[0]; - } - } - - if (dataLabelsConfig.name.show) { - var elLabel = graphics.drawText({ - x: x, - y: y + parseInt(dataLabelsConfig.name.offsetY), - text: name, - textAnchor: 'middle', - foreColor: labelColor, - fontSize: dataLabelsConfig.name.fontSize, - fontFamily: dataLabelsConfig.name.fontFamily - }); - elLabel.node.classList.add('apexcharts-datalabel-label'); - g.add(elLabel); - } - - if (dataLabelsConfig.value.show) { - var valOffset = dataLabelsConfig.name.show ? parseInt(dataLabelsConfig.value.offsetY) + 16 : dataLabelsConfig.value.offsetY; - var elValue = graphics.drawText({ - x: x, - y: y + valOffset, - text: val, - textAnchor: 'middle', - foreColor: valueColor, - fontSize: dataLabelsConfig.value.fontSize, - fontFamily: dataLabelsConfig.value.fontFamily - }); - elValue.node.classList.add('apexcharts-datalabel-value'); - g.add(elValue); - } // for a multi-series circle chart, we need to show total value instead of first series labels - - - return g; - } - /** - * - * @param {string} name - The name of the series - * @param {string} val - The value of that series - * @param {object} el - Optional el (indicates which series was hovered/clicked). If this param is not present, means we need to show total - */ - - }, { - key: "printInnerLabels", - value: function printInnerLabels(labelsConfig, name, val, el) { - var w = this.w; - var labelColor; - - if (el) { - if (labelsConfig.name.color === undefined) { - labelColor = w.globals.colors[parseInt(el.parentNode.getAttribute('rel')) - 1]; - } else { - labelColor = labelsConfig.name.color; - } - } else { - if (w.globals.series.length > 1 && labelsConfig.total.show) { - labelColor = labelsConfig.total.color; - } - } - - var elLabel = w.globals.dom.baseEl.querySelector('.apexcharts-datalabel-label'); - var elValue = w.globals.dom.baseEl.querySelector('.apexcharts-datalabel-value'); - var lbFormatter = labelsConfig.value.formatter; - val = lbFormatter(val, w); // we need to show Total Val - so get the formatter of it - - if (!el && typeof labelsConfig.total.formatter === 'function') { - val = labelsConfig.total.formatter(w); - } - - if (elLabel !== null) { - elLabel.textContent = name; - } - - if (elValue !== null) { - elValue.textContent = val; - } - - if (elLabel !== null) { - elLabel.style.fill = labelColor; - } - } - }, { - key: "printDataLabelsInner", - value: function printDataLabelsInner(el, dataLabelsConfig) { - var w = this.w; - var val = el.getAttribute('data:value'); - var name = w.globals.seriesNames[parseInt(el.parentNode.getAttribute('rel')) - 1]; - - if (w.globals.series.length > 1) { - this.printInnerLabels(dataLabelsConfig, name, val, el); - } - - var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group'); - - if (dataLabelsGroup !== null) { - dataLabelsGroup.style.opacity = 1; - } - } - }, { - key: "revertDataLabelsInner", - value: function revertDataLabelsInner(el, dataLabelsConfig, event) { - var _this = this; - - var w = this.w; - var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group'); - - if (dataLabelsConfig.total.show && w.globals.series.length > 1) { - var pie = new Pie(this.ctx); - pie.printInnerLabels(dataLabelsConfig, dataLabelsConfig.total.label, dataLabelsConfig.total.formatter(w)); - } else { - var slices = document.querySelectorAll(".apexcharts-pie-area"); - var sliceOut = false; - slices.forEach(function (s) { - if (s.getAttribute('data:pieClicked') === 'true') { - sliceOut = true; - - _this.printDataLabelsInner(s, dataLabelsConfig); - } - }); - - if (!sliceOut) { - if (w.globals.selectedDataPoints.length && w.globals.series.length > 1) { - if (w.globals.selectedDataPoints[0].length > 0) { - var index = w.globals.selectedDataPoints[0]; - - var _el = w.globals.dom.baseEl.querySelector("#apexcharts-".concat(w.config.chart.type.toLowerCase(), "-slice-").concat(index)); - - this.printDataLabelsInner(_el, dataLabelsConfig); - } else if (dataLabelsGroup && w.globals.selectedDataPoints.length && w.globals.selectedDataPoints[0].length === 0) { - dataLabelsGroup.style.opacity = 0; - } - } else { - if (dataLabelsGroup && w.globals.series.length > 1) { - dataLabelsGroup.style.opacity = 0; - } - } - } - } - } - }]); - - return Pie; - }(); - - /** - * ApexCharts Radar Class for Spider/Radar Charts. - * @module Radar - **/ - - var Radar = - /*#__PURE__*/ - function () { - function Radar(ctx) { - _classCallCheck(this, Radar); - - this.ctx = ctx; - this.w = ctx.w; - this.chartType = this.w.config.chart.type; - this.initialAnim = this.w.config.chart.animations.enabled; - this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; - this.animDur = 0; - var w = this.w; - this.graphics = new Graphics(this.ctx); - this.lineColorArr = w.globals.stroke.colors !== undefined ? w.globals.stroke.colors : w.globals.colors; - this.defaultSize = w.globals.svgHeight < w.globals.svgWidth ? w.globals.svgHeight - 35 : w.globals.gridWidth; - this.maxValue = this.w.globals.maxY; - this.polygons = w.config.plotOptions.radar.polygons; - this.maxLabelWidth = 20; - var longestLabel = w.globals.labels.slice().sort(function (a, b) { - return b.length - a.length; - })[0]; - var labelWidth = this.graphics.getTextRects(longestLabel, w.config.dataLabels.style.fontSize); - this.size = this.defaultSize / 2.1 - w.config.stroke.width - w.config.chart.dropShadow.blur - labelWidth.width / 1.75; - - if (w.config.plotOptions.radar.size !== undefined) { - this.size = w.config.plotOptions.radar.size; - } - - this.dataRadiusOfPercent = []; - this.dataRadius = []; - this.angleArr = []; - this.yaxisLabelsTextsPos = []; - } - - _createClass(Radar, [{ - key: "draw", - value: function draw(series) { - var _this = this; - - var w = this.w; - var fill = new Fill(this.ctx); - var allSeries = []; - this.dataPointsLen = series[w.globals.maxValsInArrayIndex].length; - this.disAngle = Math.PI * 2 / this.dataPointsLen; - var halfW = w.globals.gridWidth / 2; - var halfH = w.globals.gridHeight / 2; - var translateX = halfW; - var translateY = halfH; - var ret = this.graphics.group({ - class: 'apexcharts-radar-series', - 'data:innerTranslateX': translateX, - 'data:innerTranslateY': translateY - 25, - transform: "translate(".concat(translateX || 0, ", ").concat(translateY || 0, ")") - }); - var dataPointsPos = []; - var elPointsMain = null; - this.yaxisLabels = this.graphics.group({ - class: 'apexcharts-yaxis' - }); - series.forEach(function (s, i) { - // el to which series will be drawn - var elSeries = _this.graphics.group().attr({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[i]), - rel: i + 1, - 'data:realIndex': i - }); - - _this.dataRadiusOfPercent[i] = []; - _this.dataRadius[i] = []; - _this.angleArr[i] = []; - s.forEach(function (dv, j) { - _this.dataRadiusOfPercent[i][j] = dv / _this.maxValue; - _this.dataRadius[i][j] = _this.dataRadiusOfPercent[i][j] * _this.size; - _this.angleArr[i][j] = j * _this.disAngle; - }); - dataPointsPos = _this.getDataPointsPos(_this.dataRadius[i], _this.angleArr[i]); - - var paths = _this.createPaths(dataPointsPos, { - x: 0, - y: 0 - }); // points - - - elPointsMain = _this.graphics.group({ - class: 'apexcharts-series-markers-wrap hidden' - }); - w.globals.delayedElements.push({ - el: elPointsMain.node, - index: i - }); - var defaultRenderedPathOptions = { - i: i, - realIndex: i, - animationDelay: i, - initialSpeed: w.config.chart.animations.speed, - dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed, - className: "apexcharts-radar", - id: "apexcharts-radar", - shouldClipToGrid: false, - bindEventsOnPaths: false, - stroke: w.globals.stroke.colors[i], - strokeLineCap: w.config.stroke.lineCap - }; - var pathFrom = null; - - if (w.globals.previousPaths.length > 0) { - pathFrom = _this.getPathFrom(i); - } - - for (var p = 0; p < paths.linePathsTo.length; p++) { - var renderedLinePath = _this.graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { - pathFrom: pathFrom === null ? paths.linePathsFrom[p] : pathFrom, - pathTo: paths.linePathsTo[p], - strokeWidth: Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width, - fill: 'none', - drawShadow: false - })); - - elSeries.add(renderedLinePath); - var pathFill = fill.fillPath({ - seriesNumber: i - }); - - var renderedAreaPath = _this.graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { - pathFrom: pathFrom === null ? paths.areaPathsFrom[p] : pathFrom, - pathTo: paths.areaPathsTo[p], - strokeWidth: 0, - fill: pathFill, - drawShadow: false - })); - - if (w.config.chart.dropShadow.enabled) { - var filters = new Filters(_this.ctx); - var shadow = w.config.chart.dropShadow; - filters.dropShadow(renderedAreaPath, Object.assign({}, shadow, { - noUserSpaceOnUse: true - }), i); - } - - elSeries.add(renderedAreaPath); - } - - s.forEach(function (sj, j) { - var markers = new Markers(_this.ctx); - var opts = markers.getMarkerConfig('apexcharts-marker', i); - - var point = _this.graphics.drawMarker(dataPointsPos[j].x, dataPointsPos[j].y, opts); - - point.attr('rel', j); - point.attr('j', j); - point.attr('index', i); - point.node.setAttribute('default-marker-size', opts.pSize); - - var elPointsWrap = _this.graphics.group({ - class: 'apexcharts-series-markers' - }); - - if (elPointsWrap) { - elPointsWrap.add(point); - } - - elPointsMain.add(elPointsWrap); - elSeries.add(elPointsMain); - }); - allSeries.push(elSeries); - }); - this.drawPolygons({ - parent: ret - }); - - if (w.config.dataLabels.enabled) { - var dataLabels = this.drawLabels(); - ret.add(dataLabels); - } - - ret.add(this.yaxisLabels); - allSeries.forEach(function (elS) { - ret.add(elS); - }); - return ret; - } - }, { - key: "drawPolygons", - value: function drawPolygons(opts) { - var _this2 = this; - - var w = this.w; - var parent = opts.parent; - var yaxisTexts = w.globals.yAxisScale[0].result.reverse(); - var layers = yaxisTexts.length; - var radiusSizes = []; - var layerDis = this.size / (layers - 1); - - for (var i = 0; i < layers; i++) { - radiusSizes[i] = layerDis * i; - } - - radiusSizes.reverse(); - var polygonStrings = []; - var lines = []; - radiusSizes.forEach(function (radiusSize, r) { - var polygon = _this2.getPolygonPos(radiusSize); - - var string = ''; - polygon.forEach(function (p, i) { - if (r === 0) { - var line = _this2.graphics.drawLine(p.x, p.y, 0, 0, Array.isArray(_this2.polygons.connectorColors) ? _this2.polygons.connectorColors[i] : _this2.polygons.connectorColors); - - lines.push(line); - } - - if (i === 0) { - _this2.yaxisLabelsTextsPos.push({ - x: p.x, - y: p.y - }); - } - - string += p.x + ',' + p.y + ' '; - }); - polygonStrings.push(string); - }); - polygonStrings.forEach(function (p, i) { - var strokeColors = _this2.polygons.strokeColors; - - var polygon = _this2.graphics.drawPolygon(p, Array.isArray(strokeColors) ? strokeColors[i] : strokeColors, w.globals.radarPolygons.fill.colors[i]); - - parent.add(polygon); - }); - lines.forEach(function (l) { - parent.add(l); - }); - - if (w.config.yaxis[0].show) { - this.yaxisLabelsTextsPos.forEach(function (p, i) { - var yText = _this2.drawYAxisText(p.x, p.y, i, yaxisTexts[i]); - - _this2.yaxisLabels.add(yText); - }); - } - } - }, { - key: "drawYAxisText", - value: function drawYAxisText(x, y, i, text) { - var w = this.w; - var yaxisConfig = w.config.yaxis[0]; - var formatter = w.globals.yLabelFormatters[0]; - var yaxisLabel = this.graphics.drawText({ - x: x + yaxisConfig.labels.offsetX, - y: y + yaxisConfig.labels.offsetY, - text: formatter(text, i), - textAnchor: 'middle', - fontSize: yaxisConfig.labels.style.fontSize, - fontFamily: yaxisConfig.labels.style.fontFamily, - foreColor: yaxisConfig.labels.style.color - }); - return yaxisLabel; - } - }, { - key: "drawLabels", - value: function drawLabels() { - var _this3 = this; - - var w = this.w; - var limit = 10; - var textAnchor = 'middle'; - var dataLabelsConfig = w.config.dataLabels; - var elDataLabelsWrap = this.graphics.group({ - class: 'apexcharts-datalabels' - }); - var polygonPos = this.getPolygonPos(this.size); - var currPosX = 0; - var currPosY = 0; - w.globals.labels.forEach(function (label, i) { - var formatter = dataLabelsConfig.formatter; - var dataLabels = new DataLabels(_this3.ctx); - - if (polygonPos[i]) { - currPosX = polygonPos[i].x; - currPosY = polygonPos[i].y; - - if (Math.abs(polygonPos[i].x) >= limit) { - if (polygonPos[i].x > 0) { - textAnchor = 'start'; - currPosX += 10; - } else if (polygonPos[i].x < 0) { - textAnchor = 'end'; - currPosX -= 10; - } - } else { - textAnchor = 'middle'; - } - - if (Math.abs(polygonPos[i].y) >= _this3.size - limit) { - if (polygonPos[i].y < 0) { - currPosY -= 10; - } else if (polygonPos[i].y > 0) { - currPosY += 10; - } - } - - var text = formatter(label, { - seriesIndex: -1, - dataPointIndex: i, - w: w - }); - dataLabels.plotDataLabelsText({ - x: currPosX, - y: currPosY, - text: text, - textAnchor: textAnchor, - i: i, - j: i, - parent: elDataLabelsWrap, - dataLabelsConfig: dataLabelsConfig, - offsetCorrection: false - }); - } - }); - return elDataLabelsWrap; - } - }, { - key: "createPaths", - value: function createPaths(pos, origin) { - var _this4 = this; - - var linePathsTo = []; - var linePathsFrom = []; - var areaPathsTo = []; - var areaPathsFrom = []; - - if (pos.length) { - linePathsFrom = [this.graphics.move(origin.x, origin.y)]; - areaPathsFrom = [this.graphics.move(origin.x, origin.y)]; - var linePathTo = this.graphics.move(pos[0].x, pos[0].y); - var areaPathTo = this.graphics.move(pos[0].x, pos[0].y); - pos.forEach(function (p, i) { - linePathTo += _this4.graphics.line(p.x, p.y); - areaPathTo += _this4.graphics.line(p.x, p.y); - - if (i === pos.length - 1) { - linePathTo += 'Z'; - areaPathTo += 'Z'; - } - }); - linePathsTo.push(linePathTo); - areaPathsTo.push(areaPathTo); - } - - return { - linePathsFrom: linePathsFrom, - linePathsTo: linePathsTo, - areaPathsFrom: areaPathsFrom, - areaPathsTo: areaPathsTo - }; - } - }, { - key: "getPathFrom", - value: function getPathFrom(realIndex) { - var w = this.w; - var pathFrom = null; - - for (var pp = 0; pp < w.globals.previousPaths.length; pp++) { - var gpp = w.globals.previousPaths[pp]; - - if (gpp.paths.length > 0 && parseInt(gpp.realIndex) === parseInt(realIndex)) { - if (typeof w.globals.previousPaths[pp].paths[0] !== 'undefined') { - pathFrom = w.globals.previousPaths[pp].paths[0].d; - } - } - } - - return pathFrom; - } - }, { - key: "getDataPointsPos", - value: function getDataPointsPos(dataRadiusArr, angleArr) { - var dataPointsLen = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.dataPointsLen; - dataRadiusArr = dataRadiusArr || []; - angleArr = angleArr || []; - var dataPointsPosArray = []; - - for (var j = 0; j < dataPointsLen; j++) { - var curPointPos = {}; - curPointPos.x = dataRadiusArr[j] * Math.sin(angleArr[j]); - curPointPos.y = -dataRadiusArr[j] * Math.cos(angleArr[j]); - dataPointsPosArray.push(curPointPos); - } - - return dataPointsPosArray; - } - }, { - key: "getPolygonPos", - value: function getPolygonPos(size) { - var dotsArray = []; - var angle = Math.PI * 2 / this.dataPointsLen; - - for (var i = 0; i < this.dataPointsLen; i++) { - var curPos = {}; - curPos.x = size * Math.sin(i * angle); - curPos.y = -size * Math.cos(i * angle); - dotsArray.push(curPos); - } - - return dotsArray; - } - }]); - - return Radar; - }(); - - /** - * ApexCharts Radial Class for drawing Circle / Semi Circle Charts. - * @module Radial - **/ - - var Radial = - /*#__PURE__*/ - function (_Pie) { - _inherits(Radial, _Pie); - - function Radial(ctx) { - var _this; - - _classCallCheck(this, Radial); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(Radial).call(this, ctx)); - _this.ctx = ctx; - _this.w = ctx.w; - _this.animBeginArr = [0]; - _this.animDur = 0; - var w = _this.w; - _this.startAngle = w.config.plotOptions.radialBar.startAngle; - _this.endAngle = w.config.plotOptions.radialBar.endAngle; - _this.trackStartAngle = w.config.plotOptions.radialBar.track.startAngle; - _this.trackEndAngle = w.config.plotOptions.radialBar.track.endAngle; - _this.radialDataLabels = w.config.plotOptions.radialBar.dataLabels; - if (!_this.trackStartAngle) _this.trackStartAngle = _this.startAngle; - if (!_this.trackEndAngle) _this.trackEndAngle = _this.endAngle; - if (_this.endAngle === 360) _this.endAngle = 359.99; - _this.fullAngle = 360 - w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle; - _this.margin = parseInt(w.config.plotOptions.radialBar.track.margin); - return _this; - } - - _createClass(Radial, [{ - key: "draw", - value: function draw(series) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var ret = graphics.group({ - class: 'apexcharts-radialbar' - }); - var elSeries = graphics.group(); - var centerY = this.defaultSize / 2; - var centerX = w.globals.gridWidth / 2; - var size = this.defaultSize / 2.05 - w.config.stroke.width - w.config.chart.dropShadow.blur; - - if (w.config.plotOptions.radialBar.size !== undefined) { - size = w.config.plotOptions.radialBar.size; - } - - var colorArr = w.globals.fill.colors; - - if (w.config.plotOptions.radialBar.track.show) { - var elTracks = this.drawTracks({ - size: size, - centerX: centerX, - centerY: centerY, - colorArr: colorArr, - series: series - }); - elSeries.add(elTracks); - } - - var elG = this.drawArcs({ - size: size, - centerX: centerX, - centerY: centerY, - colorArr: colorArr, - series: series - }); - elSeries.add(elG.g); - - if (w.config.plotOptions.radialBar.hollow.position === 'front') { - elG.g.add(elG.elHollow); - - if (elG.dataLabels) { - elG.g.add(elG.dataLabels); - } - } - - ret.add(elSeries); - return ret; - } - }, { - key: "drawTracks", - value: function drawTracks(opts) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var g = graphics.group(); - var filters = new Filters(this.ctx); - var fill = new Fill(this.ctx); - var strokeWidth = this.getStrokeWidth(opts); - opts.size = opts.size - strokeWidth / 2; - - for (var i = 0; i < opts.series.length; i++) { - var elRadialBarTrack = graphics.group({ - class: 'apexcharts-radialbar-track apexcharts-track' - }); - g.add(elRadialBarTrack); - elRadialBarTrack.attr({ - id: 'apexcharts-track-' + i, - rel: i + 1 - }); - opts.size = opts.size - strokeWidth - this.margin; - var trackConfig = w.config.plotOptions.radialBar.track; - var pathFill = fill.fillPath({ - seriesNumber: 0, - size: opts.size, - fillColors: Array.isArray(trackConfig.background) ? trackConfig.background[i] : trackConfig.background, - solid: true - }); - var startAngle = this.trackStartAngle; - var endAngle = this.trackEndAngle; - if (Math.abs(endAngle) + Math.abs(startAngle) >= 360) endAngle = 360 - Math.abs(this.startAngle) - 0.1; - var elPath = graphics.drawPath({ - d: '', - stroke: pathFill, - strokeWidth: strokeWidth * parseInt(trackConfig.strokeWidth) / 100, - fill: 'none', - strokeOpacity: trackConfig.opacity, - classes: 'apexcharts-radialbar-area' - }); - - if (trackConfig.dropShadow.enabled) { - var shadow = trackConfig.dropShadow; - filters.dropShadow(elPath, shadow); - } - - elRadialBarTrack.add(elPath); - elPath.attr('id', 'apexcharts-radialbarTrack-' + i); - var pie = new Pie(this.ctx); - pie.animatePaths(elPath, { - centerX: opts.centerX, - centerY: opts.centerY, - endAngle: endAngle, - startAngle: startAngle, - size: opts.size, - i: i, - totalItems: 2, - animBeginArr: 0, - dur: 0, - isTrack: true, - easing: w.globals.easing - }); - } - - return g; - } - }, { - key: "drawArcs", - value: function drawArcs(opts) { - var w = this.w; // size, donutSize, centerX, centerY, colorArr, lineColorArr, sectorAngleArr, series - - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - var filters = new Filters(this.ctx); - var g = graphics.group(); - var strokeWidth = this.getStrokeWidth(opts); - opts.size = opts.size - strokeWidth / 2; - var hollowFillID = w.config.plotOptions.radialBar.hollow.background; - var hollowSize = opts.size - strokeWidth * opts.series.length - this.margin * opts.series.length - strokeWidth * parseInt(w.config.plotOptions.radialBar.track.strokeWidth) / 100 / 2; - var hollowRadius = hollowSize - w.config.plotOptions.radialBar.hollow.margin; - - if (w.config.plotOptions.radialBar.hollow.image !== undefined) { - hollowFillID = this.drawHollowImage(opts, g, hollowSize, hollowFillID); - } - - var elHollow = this.drawHollow({ - size: hollowRadius, - centerX: opts.centerX, - centerY: opts.centerY, - fill: hollowFillID - }); - - if (w.config.plotOptions.radialBar.hollow.dropShadow.enabled) { - var shadow = w.config.plotOptions.radialBar.hollow.dropShadow; - filters.dropShadow(elHollow, shadow); - } - - var shown = 1; - - if (!this.radialDataLabels.total.show && w.globals.series.length > 1) { - shown = 0; - } - - var pie = new Pie(this.ctx); - var dataLabels = null; - - if (this.radialDataLabels.show) { - dataLabels = pie.renderInnerDataLabels(this.radialDataLabels, { - hollowSize: hollowSize, - centerX: opts.centerX, - centerY: opts.centerY, - opacity: shown - }); - } - - if (w.config.plotOptions.radialBar.hollow.position === 'back') { - g.add(elHollow); - - if (dataLabels) { - g.add(dataLabels); - } - } - - var reverseLoop = false; - - if (w.config.plotOptions.radialBar.inverseOrder) { - reverseLoop = true; - } - - for (var i = reverseLoop ? opts.series.length - 1 : 0; reverseLoop ? i >= 0 : i < opts.series.length; reverseLoop ? i-- : i++) { - var elRadialBarArc = graphics.group({ - class: "apexcharts-series apexcharts-radial-series", - seriesName: Utils.escapeString(w.globals.seriesNames[i]) - }); - g.add(elRadialBarArc); - elRadialBarArc.attr({ - id: 'apexcharts-series-' + i, - rel: i + 1 - }); - this.ctx.series.addCollapsedClassToSeries(elRadialBarArc, i); - opts.size = opts.size - strokeWidth - this.margin; - var pathFill = fill.fillPath({ - seriesNumber: i, - size: opts.size, - value: opts.series[i] - }); - var startAngle = this.startAngle; - var prevStartAngle = void 0; - var totalAngle = Math.abs(w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle); // if data exceeds 100, make it 100 - - var dataValue = Utils.negToZero(opts.series[i] > 100 ? 100 : opts.series[i]) / 100; - var endAngle = Math.round(totalAngle * dataValue) + this.startAngle; - var prevEndAngle = void 0; - - if (w.globals.dataChanged) { - prevStartAngle = this.startAngle; - prevEndAngle = Math.round(totalAngle * Utils.negToZero(w.globals.previousPaths[i]) / 100) + prevStartAngle; - } - - var currFullAngle = Math.abs(endAngle) + Math.abs(startAngle); - - if (currFullAngle >= 360) { - endAngle = endAngle - 0.01; - } - - var prevFullAngle = Math.abs(prevEndAngle) + Math.abs(prevStartAngle); - - if (prevFullAngle >= 360) { - prevEndAngle = prevEndAngle - 0.01; - } - - var angle = endAngle - startAngle; - var dashArray = Array.isArray(w.config.stroke.dashArray) ? w.config.stroke.dashArray[i] : w.config.stroke.dashArray; - var elPath = graphics.drawPath({ - d: '', - stroke: pathFill, - strokeWidth: strokeWidth, - fill: 'none', - fillOpacity: w.config.fill.opacity, - classes: 'apexcharts-radialbar-area', - strokeDashArray: dashArray - }); - Graphics.setAttrs(elPath.node, { - 'data:angle': angle, - 'data:value': opts.series[i] - }); - - if (w.config.chart.dropShadow.enabled) { - var _shadow = w.config.chart.dropShadow; - filters.dropShadow(elPath, _shadow, i); - } - - this.addListeners(elPath, this.radialDataLabels); - - var _pie = new Pie(this.ctx); - - elRadialBarArc.add(elPath); - elPath.attr({ - id: 'apexcharts-radialbar-slice-' + i, - index: 0, - j: i - }); - var dur = 0; - - if (_pie.initialAnim && !w.globals.resized && !w.globals.dataChanged) { - dur = (endAngle - startAngle) / 360 * w.config.chart.animations.speed; - this.animDur = dur / (opts.series.length * 1.2) + this.animDur; - this.animBeginArr.push(this.animDur); - } - - if (w.globals.dataChanged) { - dur = (endAngle - startAngle) / 360 * w.config.chart.animations.dynamicAnimation.speed; - this.animDur = dur / (opts.series.length * 1.2) + this.animDur; - this.animBeginArr.push(this.animDur); - } - - _pie.animatePaths(elPath, { - centerX: opts.centerX, - centerY: opts.centerY, - endAngle: endAngle, - startAngle: startAngle, - prevEndAngle: prevEndAngle, - prevStartAngle: prevStartAngle, - size: opts.size, - i: i, - totalItems: 2, - animBeginArr: this.animBeginArr, - dur: dur, - shouldSetPrevPaths: true, - easing: w.globals.easing - }); - } - - return { - g: g, - elHollow: elHollow, - dataLabels: dataLabels - }; - } - }, { - key: "drawHollow", - value: function drawHollow(opts) { - var graphics = new Graphics(this.ctx); - var circle = graphics.drawCircle(opts.size * 2); - circle.attr({ - class: 'apexcharts-radialbar-hollow', - cx: opts.centerX, - cy: opts.centerY, - r: opts.size, - fill: opts.fill - }); - return circle; - } - }, { - key: "drawHollowImage", - value: function drawHollowImage(opts, g, hollowSize, hollowFillID) { - var w = this.w; - var fill = new Fill(this.ctx); - var randID = (Math.random() + 1).toString(36).substring(4); - var hollowFillImg = w.config.plotOptions.radialBar.hollow.image; - - if (w.config.plotOptions.radialBar.hollow.imageClipped) { - fill.clippedImgArea({ - width: hollowSize, - height: hollowSize, - image: hollowFillImg, - patternID: "pattern".concat(w.globals.cuid).concat(randID) - }); - hollowFillID = "url(#pattern".concat(w.globals.cuid).concat(randID, ")"); - } else { - var imgWidth = w.config.plotOptions.radialBar.hollow.imageWidth; - var imgHeight = w.config.plotOptions.radialBar.hollow.imageHeight; - - if (imgWidth === undefined && imgHeight === undefined) { - var image = w.globals.dom.Paper.image(hollowFillImg).loaded(function (loader) { - this.move(opts.centerX - loader.width / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX, opts.centerY - loader.height / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY); - }); - g.add(image); - } else { - var _image = w.globals.dom.Paper.image(hollowFillImg).loaded(function (loader) { - this.move(opts.centerX - imgWidth / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX, opts.centerY - imgHeight / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY); - this.size(imgWidth, imgHeight); - }); - - g.add(_image); - } - } - - return hollowFillID; - } - }, { - key: "getStrokeWidth", - value: function getStrokeWidth(opts) { - var w = this.w; - return opts.size * (100 - parseInt(w.config.plotOptions.radialBar.hollow.size)) / 100 / (opts.series.length + 1) - this.margin; - } - }]); - - return Radial; - }(Pie); - - /** - * ApexCharts RangeBar Class responsible for drawing Range/Timeline Bars. - * - * @module RangeBar - **/ - - var RangeBar = - /*#__PURE__*/ - function (_Bar) { - _inherits(RangeBar, _Bar); - - function RangeBar() { - _classCallCheck(this, RangeBar); - - return _possibleConstructorReturn(this, _getPrototypeOf(RangeBar).apply(this, arguments)); - } - - _createClass(RangeBar, [{ - key: "draw", - value: function draw(series, seriesIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - this.rangeBarOptions = this.w.config.plotOptions.rangeBar; - this.series = series; - this.seriesRangeStart = w.globals.seriesRangeStart; - this.seriesRangeEnd = w.globals.seriesRangeEnd; - this.initVariables(series); - var ret = graphics.group({ - class: 'apexcharts-rangebar-series apexcharts-plot-series' - }); - - for (var i = 0, bc = 0; i < series.length; i++, bc++) { - var pathTo = void 0, - pathFrom = void 0; - var x = void 0, - y = void 0, - xDivision = void 0, - // xDivision is the GRIDWIDTH divided by number of datapoints (columns) - yDivision = void 0, - // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) - zeroH = void 0, - // zeroH is the baseline where 0 meets y axis - zeroW = void 0; // zeroW is the baseline where 0 meets x axis - - var yArrj = []; // hold y values of current iterating series - - var xArrj = []; // hold x values of current iterating series - - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn - - var elSeries = graphics.group({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), - rel: i + 1, - 'data:realIndex': realIndex - }); - - if (series[i].length > 0) { - this.visibleI = this.visibleI + 1; - } - - var strokeWidth = 0; - var barHeight = 0; - var barWidth = 0; - - if (this.yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - var initPositions = this.initialPositions(); - y = initPositions.y; - yDivision = initPositions.yDivision; - barHeight = initPositions.barHeight; - zeroW = initPositions.zeroW; - x = initPositions.x; - barWidth = initPositions.barWidth; - xDivision = initPositions.xDivision; - zeroH = initPositions.zeroH; - xArrj.push(x + barWidth / 2); // eldatalabels - - var elDataLabelsWrap = graphics.group({ - class: 'apexcharts-datalabels' - }); - - for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) { - if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) { - this.isNullValue = true; - } else { - this.isNullValue = false; - } - - if (w.config.stroke.show) { - if (this.isNullValue) { - strokeWidth = 0; - } else { - strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth; - } - } - - var paths = null; - - if (this.isHorizontal) { - paths = this.drawRangeBarPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - barHeight: barHeight, - strokeWidth: strokeWidth, - pathTo: pathTo, - pathFrom: pathFrom, - zeroW: zeroW, - x: x, - y: y, - yDivision: yDivision, - elSeries: elSeries - }); - barWidth = paths.barWidth; - } else { - paths = this.drawRangeColumnPaths({ - indexes: { - i: i, - j: j, - realIndex: realIndex, - bc: bc - }, - x: x, - y: y, - xDivision: xDivision, - pathTo: pathTo, - pathFrom: pathFrom, - barWidth: barWidth, - zeroH: zeroH, - strokeWidth: strokeWidth, - elSeries: elSeries - }); - barHeight = paths.barHeight; - } - - pathTo = paths.pathTo; - pathFrom = paths.pathFrom; - y = paths.y; - x = paths.x; // push current X - - if (j > 0) { - xArrj.push(x + barWidth / 2); - } - - yArrj.push(y); - var pathFill = fill.fillPath({ - seriesNumber: realIndex - }); - var lineFill = w.globals.stroke.colors[realIndex]; - elSeries = this.renderSeries({ - realIndex: realIndex, - pathFill: pathFill, - lineFill: lineFill, - j: j, - i: i, - pathFrom: pathFrom, - pathTo: pathTo, - strokeWidth: strokeWidth, - elSeries: elSeries, - x: x, - y: y, - series: series, - barHeight: barHeight, - barWidth: barWidth, - elDataLabelsWrap: elDataLabelsWrap, - visibleSeries: this.visibleI, - type: 'rangebar' - }); - } // push all x val arrays into main xArr - - - w.globals.seriesXvalues[realIndex] = xArrj; - w.globals.seriesYvalues[realIndex] = yArrj; - ret.add(elSeries); - } - - return ret; - } - }, { - key: "drawRangeColumnPaths", - value: function drawRangeColumnPaths(_ref) { - var indexes = _ref.indexes, - x = _ref.x, - y = _ref.y, - strokeWidth = _ref.strokeWidth, - xDivision = _ref.xDivision, - pathTo = _ref.pathTo, - pathFrom = _ref.pathFrom, - barWidth = _ref.barWidth, - zeroH = _ref.zeroH; - var w = this.w; - var graphics = new Graphics(this.ctx); - var i = indexes.i; - var j = indexes.j; - var yRatio = this.yRatio[this.yaxisIndex]; - var realIndex = indexes.realIndex; - var range = this.getRangeValue(realIndex, j); - var y1 = Math.min(range.start, range.end); - var y2 = Math.max(range.start, range.end); - - if (w.globals.isXNumeric) { - x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2; - } - - var barXPosition = x + barWidth * this.visibleI; - - if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { - y1 = zeroH; - } else { - y1 = zeroH - y1 / yRatio; - y2 = zeroH - y2 / yRatio; - } - - var barHeight = Math.abs(y2 - y1); - pathTo = graphics.move(barXPosition, zeroH); - pathFrom = graphics.move(barXPosition, y1); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j, true); - } - - pathTo = graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2); - pathFrom = pathFrom + graphics.move(barXPosition, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition, y1); - - if (!w.globals.isXNumeric) { - x = x + xDivision; - } - - return { - pathTo: pathTo, - pathFrom: pathFrom, - barHeight: barHeight, - x: x, - y: y2, - barXPosition: barXPosition - }; - } - }, { - key: "drawRangeBarPaths", - value: function drawRangeBarPaths(_ref2) { - var indexes = _ref2.indexes, - x = _ref2.x, - y = _ref2.y, - yDivision = _ref2.yDivision, - pathTo = _ref2.pathTo, - pathFrom = _ref2.pathFrom, - barHeight = _ref2.barHeight, - zeroW = _ref2.zeroW; - var w = this.w; - var graphics = new Graphics(this.ctx); - var i = indexes.i; - var j = indexes.j; - var realIndex = indexes.realIndex; - var x1 = zeroW; - var x2 = zeroW; - - if (w.globals.isXNumeric) { - y = (w.globals.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight; - } - - var barYPosition = y + barHeight * this.visibleI; - - if (typeof this.series[i][j] !== 'undefined' && this.series[i][j] !== null) { - x1 = zeroW + this.seriesRangeStart[i][j] / this.invertedYRatio; - x2 = zeroW + this.seriesRangeEnd[i][j] / this.invertedYRatio; - } - - pathTo = graphics.move(zeroW, barYPosition); - pathFrom = graphics.move(zeroW, barYPosition); - - if (w.globals.previousPaths.length > 0) { - pathFrom = this.getPathFrom(realIndex, j); - } - - var barWidth = Math.abs(x2 - x1); - pathTo = graphics.move(x1, barYPosition) + graphics.line(x2, barYPosition) + graphics.line(x2, barYPosition + barHeight) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition); - pathFrom = pathFrom + graphics.line(x1, barYPosition) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition); - - if (!w.globals.isXNumeric) { - y = y + yDivision; - } - - return { - pathTo: pathTo, - pathFrom: pathFrom, - barWidth: barWidth, - x: x2, - y: y, - barYPosition: barYPosition - }; - } - }, { - key: "getRangeValue", - value: function getRangeValue(i, j) { - var w = this.w; - return { - start: w.globals.seriesRangeStart[i][j], - end: w.globals.seriesRangeEnd[i][j] - }; - } - }]); - - return RangeBar; - }(Bar); - - /** - * ApexCharts Line Class responsible for drawing Line / Area Charts. - * This class is also responsible for generating values for Bubble/Scatter charts, so need to rename it to Axis Charts to avoid confusions - * @module Line - **/ - - var Line = - /*#__PURE__*/ - function () { - function Line(ctx, xyRatios, isPointsChart) { - _classCallCheck(this, Line); - - this.ctx = ctx; - this.w = ctx.w; - this.xyRatios = xyRatios; - this.pointsChart = !(this.w.config.chart.type !== 'bubble' && this.w.config.chart.type !== 'scatter') || isPointsChart; - this.scatter = new Scatter(this.ctx); - this.noNegatives = this.w.globals.minX === Number.MAX_VALUE; - this.yaxisIndex = 0; - } - - _createClass(Line, [{ - key: "draw", - value: function draw(series, ptype, seriesIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var fill = new Fill(this.ctx); - var type = w.globals.comboCharts ? ptype : w.config.chart.type; - var ret = graphics.group({ - class: "apexcharts-".concat(type, "-series apexcharts-plot-series") - }); - var coreUtils = new CoreUtils(this.ctx, w); - series = coreUtils.getLogSeries(series); - var yRatio = this.xyRatios.yRatio; - yRatio = coreUtils.getLogYRatios(yRatio); - var zRatio = this.xyRatios.zRatio; - var xRatio = this.xyRatios.xRatio; - var baseLineY = this.xyRatios.baseLineY; // push all series in an array, so we can draw in reverse order (for stacked charts) - - var allSeries = []; - var prevSeriesY = []; - var categoryAxisCorrection = 0; - - for (var i = 0; i < series.length; i++) { - // width divided into equal parts - if (type === 'line' && (w.config.fill.type === 'gradient' || w.config.fill.type[i] === 'gradient')) { - // a small adjustment to allow gradient line to draw correctly for all same values - - /* #fix https://github.com/apexcharts/apexcharts.js/issues/358 */ - if (coreUtils.seriesHaveSameValues(i)) { - var gSeries = series[i].slice(); - gSeries[gSeries.length - 1] = gSeries[gSeries.length - 1] + 0.000001; - series[i] = gSeries; - } - } - - var xDivision = w.globals.gridWidth / w.globals.dataPoints; - var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; - - if (yRatio.length > 1) { - this.yaxisIndex = realIndex; - } - - this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; - var yArrj = []; // hold y values of current iterating series - - var xArrj = []; // hold x values of current iterating series - // zeroY is the 0 value in y series which can be used in negative charts - - var zeroY = w.globals.gridHeight - baseLineY[this.yaxisIndex] - (this.isReversed ? w.globals.gridHeight : 0) + (this.isReversed ? baseLineY[this.yaxisIndex] * 2 : 0); - var areaBottomY = zeroY; - - if (zeroY > w.globals.gridHeight) { - areaBottomY = w.globals.gridHeight; - } - - categoryAxisCorrection = xDivision / 2; - var x = w.globals.padHorizontal + categoryAxisCorrection; - var y = 1; - - if (w.globals.isXNumeric && w.globals.seriesX.length > 0) { - x = (w.globals.seriesX[realIndex][0] - w.globals.minX) / xRatio; - } - - xArrj.push(x); - var linePath = void 0, - areaPath = void 0, - pathFromLine = void 0, - pathFromArea = void 0; - var linePaths = []; - var areaPaths = []; // el to which series will be drawn - - var elSeries = graphics.group({ - class: "apexcharts-series", - seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]) - }); // points - - var elPointsMain = graphics.group({ - class: 'apexcharts-series-markers-wrap' - }); // eldatalabels - - var elDataLabelsWrap = graphics.group({ - class: 'apexcharts-datalabels' - }); - this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex); - var longestSeries = series[i].length === w.globals.dataPoints; - elSeries.attr({ - 'data:longestSeries': longestSeries, - rel: i + 1, - 'data:realIndex': realIndex - }); - this.appendPathFrom = true; - var pX = x; - var pY = void 0; - var prevX = pX; - var prevY = zeroY; // w.globals.svgHeight; - - var lineYPosition = 0; // the first value in the current series is not null or undefined - - var firstPrevY = this.determineFirstPrevY({ - i: i, - series: series, - yRatio: yRatio[this.yaxisIndex], - zeroY: zeroY, - prevY: prevY, - prevSeriesY: prevSeriesY, - lineYPosition: lineYPosition - }); - prevY = firstPrevY.prevY; - yArrj.push(prevY); - pY = prevY; - - if (series[i][0] === null) { - // when the first value itself is null, we need to move the pointer to a location where a null value is not found - for (var s = 0; s < series[i].length; s++) { - if (series[i][s] !== null) { - prevX = xDivision * s; - prevY = zeroY - series[i][s] / yRatio[this.yaxisIndex]; - linePath = graphics.move(prevX, prevY); - areaPath = graphics.move(prevX, areaBottomY); - break; - } - } - } else { - linePath = graphics.move(prevX, prevY); - areaPath = graphics.move(prevX, areaBottomY) + graphics.line(prevX, prevY); - } - - pathFromLine = graphics.move(-1, zeroY) + graphics.line(-1, zeroY); - pathFromArea = graphics.move(-1, zeroY) + graphics.line(-1, zeroY); - - if (w.globals.previousPaths.length > 0) { - var pathFrom = this.checkPreviousPaths({ - pathFromLine: pathFromLine, - pathFromArea: pathFromArea, - realIndex: realIndex - }); - pathFromLine = pathFrom.pathFromLine; - pathFromArea = pathFrom.pathFromArea; - } - - var iterations = w.globals.dataPoints > 1 ? w.globals.dataPoints - 1 : w.globals.dataPoints; - - for (var j = 0; j < iterations; j++) { - if (w.globals.isXNumeric) { - var sX = w.globals.seriesX[realIndex][j + 1]; - - if (typeof w.globals.seriesX[realIndex][j + 1] === 'undefined') { - /* fix #374 */ - sX = w.globals.seriesX[realIndex][iterations - 1]; - } - - x = (sX - w.globals.minX) / xRatio; - } else { - x = x + xDivision; - } - - var minY = Utils.isNumber(w.globals.minYArr[realIndex]) ? w.globals.minYArr[realIndex] : w.globals.minY; - - if (w.config.chart.stacked) { - if (i > 0 && w.globals.collapsedSeries.length < w.config.series.length - 1) { - lineYPosition = prevSeriesY[i - 1][j + 1]; - } else { - // the first series will not have prevY values - lineYPosition = zeroY; - } - - if (typeof series[i][j + 1] === 'undefined' || series[i][j + 1] === null) { - y = lineYPosition - minY / yRatio[this.yaxisIndex] + (this.isReversed ? minY / yRatio[this.yaxisIndex] : 0) * 2; - } else { - y = lineYPosition - series[i][j + 1] / yRatio[this.yaxisIndex] + (this.isReversed ? series[i][j + 1] / yRatio[this.yaxisIndex] : 0) * 2; - } - } else { - if (typeof series[i][j + 1] === 'undefined' || series[i][j + 1] === null) { - y = zeroY - minY / yRatio[this.yaxisIndex] + (this.isReversed ? minY / yRatio[this.yaxisIndex] : 0) * 2; - } else { - y = zeroY - series[i][j + 1] / yRatio[this.yaxisIndex] + (this.isReversed ? series[i][j + 1] / yRatio[this.yaxisIndex] : 0) * 2; - } - } // push current X - - - xArrj.push(x); // push current Y that will be used as next series's bottom position - - yArrj.push(y); - var calculatedPaths = this.createPaths({ - series: series, - i: i, - j: j, - x: x, - y: y, - xDivision: xDivision, - pX: pX, - pY: pY, - areaBottomY: areaBottomY, - linePath: linePath, - areaPath: areaPath, - linePaths: linePaths, - areaPaths: areaPaths, - seriesIndex: seriesIndex - }); - areaPaths = calculatedPaths.areaPaths; - linePaths = calculatedPaths.linePaths; - pX = calculatedPaths.pX; - pY = calculatedPaths.pY; - areaPath = calculatedPaths.areaPath; - linePath = calculatedPaths.linePath; - - if (this.appendPathFrom) { - pathFromLine = pathFromLine + graphics.line(x, zeroY); - pathFromArea = pathFromArea + graphics.line(x, zeroY); - } - - var pointsPos = this.calculatePoints({ - series: series, - x: x, - y: y, - realIndex: realIndex, - i: i, - j: j, - prevY: prevY, - categoryAxisCorrection: categoryAxisCorrection, - xRatio: xRatio - }); - - if (!this.pointsChart) { - var markers = new Markers(this.ctx); - - if (w.globals.dataPoints > 1) { - elPointsMain.node.classList.add('hidden'); - } - - var elPointsWrap = markers.plotChartMarkers(pointsPos, realIndex, j + 1); - - if (elPointsWrap !== null) { - elPointsMain.add(elPointsWrap); - } - } else { - // scatter / bubble chart points creation - this.scatter.draw(elSeries, j, { - realIndex: realIndex, - pointsPos: pointsPos, - zRatio: zRatio, - elParent: elPointsMain - }); - } - - var dataLabelAlign = !series[i][j + 1] || series[i][j + 1] > series[i][j] ? 'top' : 'bottom'; - var dataLabels = new DataLabels(this.ctx); - var drawnLabels = dataLabels.drawDataLabel(pointsPos, realIndex, j + 1, null, dataLabelAlign); - - if (drawnLabels !== null) { - elDataLabelsWrap.add(drawnLabels); - } - } // push all current y values array to main PrevY Array - - - prevSeriesY.push(yArrj); // push all x val arrays into main xArr - - w.globals.seriesXvalues[realIndex] = xArrj; - w.globals.seriesYvalues[realIndex] = yArrj; // these elements will be shown after area path animation completes - - if (!this.pointsChart) { - w.globals.delayedElements.push({ - el: elPointsMain.node, - index: realIndex - }); - } - - var defaultRenderedPathOptions = { - i: i, - realIndex: realIndex, - animationDelay: i, - initialSpeed: w.config.chart.animations.speed, - dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed, - className: "apexcharts-".concat(type), - id: "apexcharts-".concat(type) - }; - - if (type === 'area') { - var pathFill = fill.fillPath({ - seriesNumber: realIndex - }); - - for (var p = 0; p < areaPaths.length; p++) { - var renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { - pathFrom: pathFromArea, - pathTo: areaPaths[p], - stroke: 'none', - strokeWidth: 0, - strokeLineCap: null, - fill: pathFill - })); - elSeries.add(renderedPath); - } - } - - if (w.config.stroke.show && !this.pointsChart) { - var lineFill = null; - - if (type === 'line') { - // fillable lines only for lineChart - lineFill = fill.fillPath({ - seriesNumber: realIndex, - i: i - }); - } else { - lineFill = w.globals.stroke.colors[realIndex]; - } - - for (var _p = 0; _p < linePaths.length; _p++) { - var _renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, { - pathFrom: pathFromLine, - pathTo: linePaths[_p], - stroke: lineFill, - strokeWidth: Array.isArray(w.config.stroke.width) ? w.config.stroke.width[realIndex] : w.config.stroke.width, - strokeLineCap: w.config.stroke.lineCap, - fill: 'none' - })); - - elSeries.add(_renderedPath); - } - } - - elSeries.add(elPointsMain); - elSeries.add(elDataLabelsWrap); - allSeries.push(elSeries); - } - - for (var _s = allSeries.length; _s > 0; _s--) { - ret.add(allSeries[_s - 1]); - } - - return ret; - } - }, { - key: "createPaths", - value: function createPaths(_ref) { - var series = _ref.series, - i = _ref.i, - j = _ref.j, - x = _ref.x, - y = _ref.y, - pX = _ref.pX, - pY = _ref.pY, - xDivision = _ref.xDivision, - areaBottomY = _ref.areaBottomY, - linePath = _ref.linePath, - areaPath = _ref.areaPath, - linePaths = _ref.linePaths, - areaPaths = _ref.areaPaths, - seriesIndex = _ref.seriesIndex; - var w = this.w; - var graphics = new Graphics(this.ctx); - var curve = w.config.stroke.curve; - - if (Array.isArray(w.config.stroke.curve)) { - if (Array.isArray(seriesIndex)) { - curve = w.config.stroke.curve[seriesIndex[i]]; - } else { - curve = w.config.stroke.curve[i]; - } - } // logic of smooth curve derived from chartist - // CREDITS: https://gionkunz.github.io/chartist-js/ - - - if (curve === 'smooth') { - var length = (x - pX) * 0.35; - - if (w.globals.hasNullValues) { - if (series[i][j] !== null) { - if (series[i][j + 1] !== null) { - linePath = graphics.move(pX, pY) + graphics.curve(pX + length, pY, x - length, y, x + 1, y); - areaPath = graphics.move(pX + 1, pY) + graphics.curve(pX + length, pY, x - length, y, x + 1, y) + graphics.line(x, areaBottomY) + graphics.line(pX, areaBottomY) + 'z'; - } else { - linePath = graphics.move(pX, pY); - areaPath = graphics.move(pX, pY) + 'z'; - } - } - - linePaths.push(linePath); - areaPaths.push(areaPath); - } else { - linePath = linePath + graphics.curve(pX + length, pY, x - length, y, x, y); - areaPath = areaPath + graphics.curve(pX + length, pY, x - length, y, x, y); - } - - pX = x; - pY = y; - - if (j === series[i].length - 2) { - // last loop, close path - areaPath = areaPath + graphics.curve(pX, pY, x, y, x, areaBottomY) + graphics.move(x, y) + 'z'; - - if (!w.globals.hasNullValues) { - linePaths.push(linePath); - areaPaths.push(areaPath); - } - } - } else { - if (series[i][j + 1] === null) { - linePath = linePath + graphics.move(x, y); - areaPath = areaPath + graphics.line(x - xDivision, areaBottomY) + graphics.move(x, y); - } - - if (series[i][j] === null) { - linePath = linePath + graphics.move(x, y); - areaPath = areaPath + graphics.move(x, areaBottomY); - } - - if (curve === 'stepline') { - linePath = linePath + graphics.line(x, null, 'H') + graphics.line(null, y, 'V'); - areaPath = areaPath + graphics.line(x, null, 'H') + graphics.line(null, y, 'V'); - } else if (curve === 'straight') { - linePath = linePath + graphics.line(x, y); - areaPath = areaPath + graphics.line(x, y); - } - - if (j === series[i].length - 2) { - // last loop, close path - areaPath = areaPath + graphics.line(x, areaBottomY) + graphics.move(x, y) + 'z'; - linePaths.push(linePath); - areaPaths.push(areaPath); - } - } - - return { - linePaths: linePaths, - areaPaths: areaPaths, - pX: pX, - pY: pY, - linePath: linePath, - areaPath: areaPath - }; - } - }, { - key: "calculatePoints", - value: function calculatePoints(_ref2) { - var series = _ref2.series, - realIndex = _ref2.realIndex, - x = _ref2.x, - y = _ref2.y, - i = _ref2.i, - j = _ref2.j, - prevY = _ref2.prevY, - categoryAxisCorrection = _ref2.categoryAxisCorrection, - xRatio = _ref2.xRatio; - var w = this.w; - var ptX = []; - var ptY = []; - - if (j === 0) { - var xPT1st = categoryAxisCorrection + w.config.markers.offsetX; // the first point for line series - // we need to check whether it's not a time series, because a time series may - // start from the middle of the x axis - - if (w.globals.isXNumeric) { - xPT1st = (w.globals.seriesX[realIndex][0] - w.globals.minX) / xRatio + w.config.markers.offsetX; - } // push 2 points for the first data values - - - ptX.push(xPT1st); - ptY.push(Utils.isNumber(series[i][0]) ? prevY + w.config.markers.offsetY : null); - ptX.push(x + w.config.markers.offsetX); - ptY.push(Utils.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null); - } else { - ptX.push(x + w.config.markers.offsetX); - ptY.push(Utils.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null); - } - - var pointsPos = { - x: ptX, - y: ptY - }; - return pointsPos; - } - }, { - key: "checkPreviousPaths", - value: function checkPreviousPaths(_ref3) { - var pathFromLine = _ref3.pathFromLine, - pathFromArea = _ref3.pathFromArea, - realIndex = _ref3.realIndex; - var w = this.w; - - for (var pp = 0; pp < w.globals.previousPaths.length; pp++) { - var gpp = w.globals.previousPaths[pp]; - - if ((gpp.type === 'line' || gpp.type === 'area') && gpp.paths.length > 0 && parseInt(gpp.realIndex) === parseInt(realIndex)) { - if (gpp.type === 'line') { - this.appendPathFrom = false; - pathFromLine = w.globals.previousPaths[pp].paths[0].d; - } else if (gpp.type === 'area') { - this.appendPathFrom = false; - pathFromArea = w.globals.previousPaths[pp].paths[0].d; - - if (w.config.stroke.show) { - pathFromLine = w.globals.previousPaths[pp].paths[1].d; - } - } - } - } - - return { - pathFromLine: pathFromLine, - pathFromArea: pathFromArea - }; - } - }, { - key: "determineFirstPrevY", - value: function determineFirstPrevY(_ref4) { - var i = _ref4.i, - series = _ref4.series, - yRatio = _ref4.yRatio, - zeroY = _ref4.zeroY, - prevY = _ref4.prevY, - prevSeriesY = _ref4.prevSeriesY, - lineYPosition = _ref4.lineYPosition; - var w = this.w; - - if (typeof series[i][0] !== 'undefined') { - if (w.config.chart.stacked) { - if (i > 0) { - // 1st y value of previous series - lineYPosition = prevSeriesY[i - 1][0]; - } else { - // the first series will not have prevY values - lineYPosition = zeroY; - } - - prevY = lineYPosition - series[i][0] / yRatio + (this.isReversed ? series[i][0] / yRatio : 0) * 2; - } else { - prevY = zeroY - series[i][0] / yRatio + (this.isReversed ? series[i][0] / yRatio : 0) * 2; - } - } else { - // the first value in the current series is null - if (w.config.chart.stacked && i > 0 && typeof series[i][0] === 'undefined') { - // check for undefined value (undefined value will occur when we clear the series while user clicks on legend to hide serieses) - for (var s = i - 1; s >= 0; s--) { - // for loop to get to 1st previous value until we get it - if (series[s][0] !== null && typeof series[s][0] !== 'undefined') { - lineYPosition = prevSeriesY[s][0]; - prevY = lineYPosition; - break; - } - } - } - } - - return { - prevY: prevY, - lineYPosition: lineYPosition - }; - } - }]); - - return Line; - }(); - - /** - * ApexCharts Formatter Class for setting value formatters for axes as well as tooltips. - * - * @module Formatters - **/ - - var Formatters = - /*#__PURE__*/ - function () { - function Formatters(ctx) { - _classCallCheck(this, Formatters); - - this.ctx = ctx; - this.w = ctx.w; - this.tooltipKeyFormat = 'dd MMM'; - } - - _createClass(Formatters, [{ - key: "xLabelFormat", - value: function xLabelFormat(fn, val) { - var w = this.w; - - if (w.config.xaxis.type === 'datetime') { - // if user has not specified a custom formatter, use the default tooltip.x.format - if (w.config.tooltip.x.formatter === undefined) { - var datetimeObj = new DateTime(this.ctx); - return datetimeObj.formatDate(new Date(val), w.config.tooltip.x.format, true, true); - } - } - - return fn(val); - } - }, { - key: "setLabelFormatters", - value: function setLabelFormatters() { - var w = this.w; - - w.globals.xLabelFormatter = function (val) { - return val; - }; - - w.globals.xaxisTooltipFormatter = function (val) { - return val; - }; - - w.globals.ttKeyFormatter = function (val) { - return val; - }; - - w.globals.ttZFormatter = function (val) { - return val; - }; - - w.globals.legendFormatter = function (val) { - return val; - }; - - if (typeof w.config.tooltip.x.formatter === 'function') { - w.globals.ttKeyFormatter = w.config.tooltip.x.formatter; - } - - if (typeof w.config.xaxis.tooltip.formatter === 'function') { - w.globals.xaxisTooltipFormatter = w.config.xaxis.tooltip.formatter; - } - - if (Array.isArray(w.config.tooltip.y)) { - w.globals.ttVal = w.config.tooltip.y; - } else { - if (w.config.tooltip.y.formatter !== undefined) { - w.globals.ttVal = w.config.tooltip.y; - } - } - - if (w.config.tooltip.z.formatter !== undefined) { - w.globals.ttZFormatter = w.config.tooltip.z.formatter; - } // legend formatter - if user wants to append any global values of series to legend text - - - if (w.config.legend.formatter !== undefined) { - w.globals.legendFormatter = w.config.legend.formatter; - } // formatter function will always overwrite format property - - - if (w.config.xaxis.labels.formatter !== undefined) { - w.globals.xLabelFormatter = w.config.xaxis.labels.formatter; - } else { - w.globals.xLabelFormatter = function (val) { - if (Utils.isNumber(val)) { - // numeric xaxis may have smaller range, so defaulting to 1 decimal - if (w.config.xaxis.type === 'numeric' && w.globals.dataPoints < 50) { - return val.toFixed(1); - } - - return val.toFixed(0); - } - - return val; - }; - } // formatter function will always overwrite format property - - - w.config.yaxis.forEach(function (yaxe, i) { - if (yaxe.labels.formatter !== undefined) { - w.globals.yLabelFormatters[i] = yaxe.labels.formatter; - } else { - w.globals.yLabelFormatters[i] = function (val) { - if (Utils.isNumber(val)) { - if (w.globals.yValueDecimal !== 0) { - return val.toFixed(yaxe.decimalsInFloat !== undefined ? yaxe.decimalsInFloat : w.globals.yValueDecimal); - } else if (w.globals.maxY - w.globals.minY < 5) { - return val.toFixed(1); - } else { - return val.toFixed(0); - } - } - - return val; - }; - } - }); - return w.globals; - } - }, { - key: "heatmapLabelFormatters", - value: function heatmapLabelFormatters() { - var w = this.w; - - if (w.config.chart.type === 'heatmap') { - w.globals.yAxisScale[0].result = w.globals.seriesNames.slice(); // get the longest string from the labels array and also apply label formatter to it - - var longest = w.globals.seriesNames.reduce(function (a, b) { - return a.length > b.length ? a : b; - }, 0); - w.globals.yAxisScale[0].niceMax = longest; - w.globals.yAxisScale[0].niceMin = longest; - } - } - }]); - - return Formatters; - }(); - - var AxesUtils = - /*#__PURE__*/ - function () { - function AxesUtils(ctx) { - _classCallCheck(this, AxesUtils); - - this.ctx = ctx; - this.w = ctx.w; - } // Based on the formatter function, get the label text and position - - - _createClass(AxesUtils, [{ - key: "getLabel", - value: function getLabel(labels, timelineLabels, x, i) { - var drawnLabels = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var w = this.w; - var rawLabel = typeof labels[i] === 'undefined' ? '' : labels[i]; - var label; - var xlbFormatter = w.globals.xLabelFormatter; - var customFormatter = w.config.xaxis.labels.formatter; - var xFormat = new Formatters(this.ctx); - label = xFormat.xLabelFormat(xlbFormatter, rawLabel); - - if (customFormatter !== undefined) { - label = customFormatter(rawLabel, labels[i], i); - } - - if (timelineLabels.length > 0) { - x = timelineLabels[i].position; - label = timelineLabels[i].value; - } else { - if (w.config.xaxis.type === 'datetime' && customFormatter === undefined) { - label = ''; - } - } - - if (typeof label === 'undefined') label = ''; - label = label.toString(); - - if (label.indexOf('NaN') === 0 || label.toLowerCase().indexOf('invalid') === 0 || label.toLowerCase().indexOf('infinity') >= 0 || drawnLabels.indexOf(label) >= 0 && !w.config.xaxis.labels.showDuplicates) { - label = ''; - } - - return { - x: x, - text: label - }; - } - }, { - key: "drawYAxisTicks", - value: function drawYAxisTicks(x, tickAmount, axisBorder, axisTicks, realIndex, labelsDivider, elYaxis) { - var w = this.w; - var graphics = new Graphics(this.ctx); // initial label position = 0; - - var t = w.globals.translateY; - - if (axisTicks.show) { - if (w.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width; - - for (var i = tickAmount; i >= 0; i--) { - var tY = t + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY - 1; - - if (w.globals.isBarHorizontal) { - tY = labelsDivider * i; - } - - var elTick = graphics.drawLine(x + axisBorder.offsetX - axisTicks.width + axisTicks.offsetX, tY + axisTicks.offsetY, x + axisBorder.offsetX + axisTicks.offsetX, tY + axisTicks.offsetY, axisBorder.color); - elYaxis.add(elTick); - t = t + labelsDivider; - } - } - } - }]); - - return AxesUtils; - }(); - - /** - * ApexCharts XAxis Class for drawing X-Axis. - * - * @module XAxis - **/ - - var XAxis = - /*#__PURE__*/ - function () { - function XAxis(ctx) { - _classCallCheck(this, XAxis); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.xaxisLabels = w.globals.labels.slice(); - - if (w.globals.timelineLabels.length > 0) { - // timeline labels are there - this.xaxisLabels = w.globals.timelineLabels.slice(); - } - - this.drawnLabels = []; - - if (w.config.xaxis.position === 'top') { - this.offY = 0; - } else { - this.offY = w.globals.gridHeight + 1; - } - - this.offY = this.offY + w.config.xaxis.axisBorder.offsetY; - this.xaxisFontSize = w.config.xaxis.labels.style.fontSize; - this.xaxisFontFamily = w.config.xaxis.labels.style.fontFamily; - this.xaxisForeColors = w.config.xaxis.labels.style.colors; - this.xaxisBorderWidth = w.config.xaxis.axisBorder.width; - - if (this.xaxisBorderWidth.indexOf('%') > -1) { - this.xaxisBorderWidth = w.globals.gridWidth * parseInt(this.xaxisBorderWidth) / 100; - } else { - this.xaxisBorderWidth = parseInt(this.xaxisBorderWidth); - } - - this.xaxisBorderHeight = w.config.xaxis.axisBorder.height; // For bars, we will only consider single y xais, - // as we are not providing multiple yaxis for bar charts - - this.yaxis = w.config.yaxis[0]; - this.axesUtils = new AxesUtils(ctx); - } - - _createClass(XAxis, [{ - key: "drawXaxis", - value: function drawXaxis() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var elXaxis = graphics.group({ - class: 'apexcharts-xaxis', - transform: "translate(".concat(w.config.xaxis.offsetX, ", ").concat(w.config.xaxis.offsetY, ")") - }); - var elXaxisTexts = graphics.group({ - class: 'apexcharts-xaxis-texts-g', - transform: "translate(".concat(w.globals.translateXAxisX, ", ").concat(w.globals.translateXAxisY, ")") - }); - elXaxis.add(elXaxisTexts); - var colWidth; // initial x Position (keep adding column width in the loop) - - var xPos = w.globals.padHorizontal; - var labels = []; - - for (var i = 0; i < this.xaxisLabels.length; i++) { - labels.push(this.xaxisLabels[i]); - } - - if (w.globals.isXNumeric) { - colWidth = w.globals.gridWidth / (labels.length - 1); - xPos = xPos + colWidth / 2 + w.config.xaxis.labels.offsetX; - } else { - colWidth = w.globals.gridWidth / labels.length; - xPos = xPos + colWidth + w.config.xaxis.labels.offsetX; - } - - var labelsLen = labels.length; - - if (w.config.xaxis.labels.show) { - for (var _i = 0; _i <= labelsLen - 1; _i++) { - var x = xPos - colWidth / 2 + w.config.xaxis.labels.offsetX; - var label = this.axesUtils.getLabel(labels, w.globals.timelineLabels, x, _i, this.drawnLabels); - this.drawnLabels.push(label.text); - var offsetYCorrection = 28; - - if (w.globals.rotateXLabels) { - offsetYCorrection = 22; - } - - var elTick = graphics.drawText({ - x: label.x, - y: this.offY + w.config.xaxis.labels.offsetY + offsetYCorrection, - text: '', - textAnchor: 'middle', - fontSize: this.xaxisFontSize, - fontFamily: this.xaxisFontFamily, - foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[_i] : this.xaxisForeColors, - cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass - }); - - if (_i === labelsLen - 1) { - if (w.globals.skipLastTimelinelabel) { - label.text = ''; - } - } - - elXaxisTexts.add(elTick); - graphics.addTspan(elTick, label.text, this.xaxisFontFamily); - var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); - elTooltipTitle.textContent = label.text; - elTick.node.appendChild(elTooltipTitle); - xPos = xPos + colWidth; - } - } - - if (w.config.xaxis.title.text !== undefined) { - var elXaxisTitle = graphics.group({ - class: 'apexcharts-xaxis-title' - }); - var elXAxisTitleText = graphics.drawText({ - x: w.globals.gridWidth / 2 + w.config.xaxis.title.offsetX, - y: this.offY - parseInt(this.xaxisFontSize) + w.globals.xAxisLabelsHeight + w.config.xaxis.title.offsetY, - text: w.config.xaxis.title.text, - textAnchor: 'middle', - fontSize: w.config.xaxis.title.style.fontSize, - fontFamily: w.config.xaxis.title.style.fontFamily, - foreColor: w.config.xaxis.title.style.color, - cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass - }); - elXaxisTitle.add(elXAxisTitleText); - elXaxis.add(elXaxisTitle); - } - - if (w.config.xaxis.axisBorder.show) { - var lineCorrection = 0; - - if (w.config.chart.type === 'bar' && w.globals.isXNumeric) { - lineCorrection = lineCorrection - 15; - } - - var elHorzLine = graphics.drawLine(w.globals.padHorizontal + lineCorrection + w.config.xaxis.axisBorder.offsetX, this.offY, this.xaxisBorderWidth, this.offY, w.config.xaxis.axisBorder.color, 0, this.xaxisBorderHeight); - elXaxis.add(elHorzLine); - } - - return elXaxis; - } // this actually becomes the vertical axis (for bar charts) - - }, { - key: "drawXaxisInversed", - value: function drawXaxisInversed(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var translateYAxisX = w.config.yaxis[0].opposite ? w.globals.translateYAxisX[realIndex] : 0; - var elYaxis = graphics.group({ - class: 'apexcharts-yaxis apexcharts-xaxis-inversed', - rel: realIndex - }); - var elYaxisTexts = graphics.group({ - class: 'apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g', - transform: 'translate(' + translateYAxisX + ', 0)' - }); - elYaxis.add(elYaxisTexts); - var colHeight; // initial x Position (keep adding column width in the loop) - - var yPos; - var labels = []; - - for (var i = 0; i < this.xaxisLabels.length; i++) { - labels.push(this.xaxisLabels[i]); - } - - colHeight = w.globals.gridHeight / labels.length; - yPos = -(colHeight / 2.2); - var lbFormatter = w.globals.yLabelFormatters[0]; - var ylabels = w.config.yaxis[0].labels; - - if (ylabels.show) { - for (var _i2 = 0; _i2 <= labels.length - 1; _i2++) { - var label = typeof labels[_i2] === 'undefined' ? '' : labels[_i2]; - label = lbFormatter(label); - var elLabel = graphics.drawText({ - x: ylabels.offsetX - 15, - y: yPos + colHeight + ylabels.offsetY, - text: label, - textAnchor: this.yaxis.opposite ? 'start' : 'end', - foreColor: ylabels.style.color ? ylabels.style.color : ylabels.style.colors[_i2], - fontSize: ylabels.style.fontSize, - fontFamily: ylabels.style.fontFamily, - cssClass: 'apexcharts-yaxis-label ' + ylabels.style.cssClass - }); - elYaxisTexts.add(elLabel); - - if (w.config.yaxis[realIndex].labels.rotate !== 0) { - var labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node); - elLabel.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(labelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); - } - - yPos = yPos + colHeight; - } - } - - if (w.config.yaxis[0].title.text !== undefined) { - var elXaxisTitle = graphics.group({ - class: 'apexcharts-yaxis-title apexcharts-xaxis-title-inversed', - transform: 'translate(' + translateYAxisX + ', 0)' - }); - var elXAxisTitleText = graphics.drawText({ - x: 0, - y: w.globals.gridHeight / 2, - text: w.config.yaxis[0].title.text, - textAnchor: 'middle', - foreColor: w.config.yaxis[0].title.style.color, - fontSize: w.config.yaxis[0].title.style.fontSize, - fontFamily: w.config.yaxis[0].title.style.fontFamily, - cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[0].title.style.cssClass - }); - elXaxisTitle.add(elXAxisTitleText); - elYaxis.add(elXaxisTitle); - } - - if (w.config.xaxis.axisBorder.show) { - var elHorzLine = graphics.drawLine(w.globals.padHorizontal + w.config.xaxis.axisBorder.offsetX, this.offY, this.xaxisBorderWidth, this.offY, this.yaxis.axisBorder.color, 0, this.xaxisBorderHeight); - elYaxis.add(elHorzLine); - this.axesUtils.drawYAxisTicks(0, labels.length, w.config.yaxis[0].axisBorder, w.config.yaxis[0].axisTicks, 0, colHeight, elYaxis); - } - - return elYaxis; - } - }, { - key: "drawXaxisTicks", - value: function drawXaxisTicks(x1, appendToElement) { - var w = this.w; - var x2 = x1; - if (x1 < 0 || x1 > w.globals.gridWidth) return; - var y1 = this.offY + w.config.xaxis.axisTicks.offsetY; - var y2 = y1 + w.config.xaxis.axisTicks.height; - - if (w.config.xaxis.axisTicks.show) { - var graphics = new Graphics(this.ctx); - var line = graphics.drawLine(x1 + w.config.xaxis.axisTicks.offsetX, y1 + w.config.xaxis.offsetY, x2 + w.config.xaxis.axisTicks.offsetX, y2 + w.config.xaxis.offsetY, w.config.xaxis.axisTicks.color); // we are not returning anything, but appending directly to the element pased in param - - appendToElement.add(line); - line.node.classList.add('apexcharts-xaxis-tick'); - } - } - }, { - key: "getXAxisTicksPositions", - value: function getXAxisTicksPositions() { - var w = this.w; - var xAxisTicksPositions = []; - var xCount = this.xaxisLabels.length; - var x1 = w.globals.padHorizontal; - - if (w.globals.timelineLabels.length > 0) { - for (var i = 0; i < xCount; i++) { - x1 = this.xaxisLabels[i].position; - xAxisTicksPositions.push(x1); - } - } else { - var xCountForCategoryCharts = xCount; - - for (var _i3 = 0; _i3 < xCountForCategoryCharts; _i3++) { - var x1Count = xCountForCategoryCharts; - - if (w.globals.isXNumeric && w.config.chart.type !== 'bar') { - x1Count -= 1; - } - - x1 = x1 + w.globals.gridWidth / x1Count; - xAxisTicksPositions.push(x1); - } - } - - return xAxisTicksPositions; - } // to rotate x-axis labels or to put ... for longer text in xaxis - - }, { - key: "xAxisLabelCorrections", - value: function xAxisLabelCorrections() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var xAxis = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g'); - var xAxisTexts = w.globals.dom.baseEl.querySelectorAll('.apexcharts-xaxis-texts-g text'); - var yAxisTextsInversed = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-inversed text'); - var xAxisTextsInversed = w.globals.dom.baseEl.querySelectorAll('.apexcharts-xaxis-inversed-texts-g text'); - - if (w.globals.rotateXLabels || w.config.xaxis.labels.rotateAlways) { - for (var xat = 0; xat < xAxisTexts.length; xat++) { - var textRotatingCenter = graphics.rotateAroundCenter(xAxisTexts[xat]); - textRotatingCenter.y = textRotatingCenter.y - 1; // + tickWidth/4; - - textRotatingCenter.x = textRotatingCenter.x + 1; - xAxisTexts[xat].setAttribute('transform', "rotate(".concat(w.config.xaxis.labels.rotate, " ").concat(textRotatingCenter.x, " ").concat(textRotatingCenter.y, ")")); - xAxisTexts[xat].setAttribute('text-anchor', "end"); - var offsetHeight = 10; - xAxis.setAttribute('transform', "translate(0, ".concat(-offsetHeight, ")")); - var tSpan = xAxisTexts[xat].childNodes; - - if (w.config.xaxis.labels.trim) { - graphics.placeTextWithEllipsis(tSpan[0], tSpan[0].textContent, w.config.xaxis.labels.maxHeight - 40); - } - } - } else { - var width = w.globals.gridWidth / w.globals.labels.length; - - for (var _xat = 0; _xat < xAxisTexts.length; _xat++) { - var _tSpan = xAxisTexts[_xat].childNodes; - - if (w.config.xaxis.labels.trim && w.config.xaxis.type !== 'datetime') { - graphics.placeTextWithEllipsis(_tSpan[0], _tSpan[0].textContent, width); - } - } - } - - if (yAxisTextsInversed.length > 0) { - // truncate rotated y axis in bar chart (x axis) - var firstLabelPosX = yAxisTextsInversed[yAxisTextsInversed.length - 1].getBBox(); - var lastLabelPosX = yAxisTextsInversed[0].getBBox(); - - if (firstLabelPosX.x < -20) { - yAxisTextsInversed[yAxisTextsInversed.length - 1].parentNode.removeChild(yAxisTextsInversed[yAxisTextsInversed.length - 1]); - } - - if (lastLabelPosX.x + lastLabelPosX.width > w.globals.gridWidth) { - yAxisTextsInversed[0].parentNode.removeChild(yAxisTextsInversed[0]); - } // truncate rotated x axis in bar chart (y axis) - - - for (var _xat2 = 0; _xat2 < xAxisTextsInversed.length; _xat2++) { - graphics.placeTextWithEllipsis(xAxisTextsInversed[_xat2], xAxisTextsInversed[_xat2].textContent, w.config.yaxis[0].labels.maxWidth - parseInt(w.config.yaxis[0].title.style.fontSize) * 2 - 20); - } - } - } // renderXAxisBands() { - // let w = this.w; - // let plotBand = document.createElementNS(w.globals.SVGNS, 'rect') - // w.globals.dom.elGraphical.add(plotBand) - // } - - }]); - - return XAxis; - }(); - - /** - * ApexCharts YAxis Class for drawing Y-Axis. - * - * @module YAxis - **/ - - var YAxis = - /*#__PURE__*/ - function () { - function YAxis(ctx) { - _classCallCheck(this, YAxis); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.xaxisFontSize = w.config.xaxis.labels.style.fontSize; - this.axisFontFamily = w.config.xaxis.labels.style.fontFamily; - this.xaxisForeColors = w.config.xaxis.labels.style.colors; - this.xAxisoffX = 0; - - if (w.config.xaxis.position === 'bottom') { - this.xAxisoffX = w.globals.gridHeight; - } - - this.drawnLabels = []; - this.axesUtils = new AxesUtils(ctx); - } - - _createClass(YAxis, [{ - key: "drawYaxis", - value: function drawYaxis(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var yaxisFontSize = w.config.yaxis[realIndex].labels.style.fontSize; - var yaxisFontFamily = w.config.yaxis[realIndex].labels.style.fontFamily; - var elYaxis = graphics.group({ - class: 'apexcharts-yaxis', - rel: realIndex, - transform: 'translate(' + w.globals.translateYAxisX[realIndex] + ', 0)' - }); - - if (!w.config.yaxis[realIndex].show) { - return elYaxis; - } - - var elYaxisTexts = graphics.group({ - class: 'apexcharts-yaxis-texts-g' - }); - elYaxis.add(elYaxisTexts); - var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg height/number of ticks - - var labelsDivider = w.globals.gridHeight / tickAmount + 0.1; // initial label position = 0; - - var l = w.globals.translateY; - var lbFormatter = w.globals.yLabelFormatters[realIndex]; - var labels = w.globals.yAxisScale[realIndex].result.slice(); - - if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].reversed) { - labels.reverse(); - } - - if (w.config.yaxis[realIndex].labels.show) { - for (var i = tickAmount; i >= 0; i--) { - var val = labels[i]; - val = lbFormatter(val, i); - var xPad = w.config.yaxis[realIndex].labels.padding; - - if (w.config.yaxis[realIndex].opposite && w.config.yaxis.length !== 0) { - xPad = xPad * -1; - } - - var label = graphics.drawText({ - x: xPad, - y: l + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY + 1, - text: val, - textAnchor: w.config.yaxis[realIndex].opposite ? 'start' : 'end', - fontSize: yaxisFontSize, - fontFamily: yaxisFontFamily, - foreColor: w.config.yaxis[realIndex].labels.style.color, - cssClass: 'apexcharts-yaxis-label ' + w.config.yaxis[realIndex].labels.style.cssClass - }); - elYaxisTexts.add(label); - var labelRotatingCenter = graphics.rotateAroundCenter(label.node); - - if (w.config.yaxis[realIndex].labels.rotate !== 0) { - label.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(labelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); - } - - l = l + labelsDivider; - } - } - - if (w.config.yaxis[realIndex].title.text !== undefined) { - var elYaxisTitle = graphics.group({ - class: 'apexcharts-yaxis-title' - }); - var x = 0; - - if (w.config.yaxis[realIndex].opposite) { - x = w.globals.translateYAxisX[realIndex]; - } - - var elYAxisTitleText = graphics.drawText({ - x: x, - y: w.globals.gridHeight / 2 + w.globals.translateY, - text: w.config.yaxis[realIndex].title.text, - textAnchor: 'end', - foreColor: w.config.yaxis[realIndex].title.style.color, - fontSize: w.config.yaxis[realIndex].title.style.fontSize, - fontFamily: w.config.yaxis[realIndex].title.style.fontFamily, - cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[realIndex].title.style.cssClass - }); - elYaxisTitle.add(elYAxisTitleText); - elYaxis.add(elYaxisTitle); - } - - var axisBorder = w.config.yaxis[realIndex].axisBorder; - - if (axisBorder.show) { - var _x = 31 + axisBorder.offsetX; - - if (w.config.yaxis[realIndex].opposite) { - _x = -31 - axisBorder.offsetX; - } - - var elVerticalLine = graphics.drawLine(_x, w.globals.translateY + axisBorder.offsetY - 2, _x, w.globals.gridHeight + w.globals.translateY + axisBorder.offsetY + 2, axisBorder.color); - elYaxis.add(elVerticalLine); - this.axesUtils.drawYAxisTicks(_x, tickAmount, axisBorder, w.config.yaxis[realIndex].axisTicks, realIndex, labelsDivider, elYaxis); - } - - return elYaxis; - } // This actually becomes horizonal axis (for bar charts) - - }, { - key: "drawYaxisInversed", - value: function drawYaxisInversed(realIndex) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var elXaxis = graphics.group({ - class: 'apexcharts-xaxis apexcharts-yaxis-inversed' - }); - var elXaxisTexts = graphics.group({ - class: 'apexcharts-xaxis-texts-g', - transform: "translate(".concat(w.globals.translateXAxisX, ", ").concat(w.globals.translateXAxisY, ")") - }); - elXaxis.add(elXaxisTexts); - var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg width/number of ticks - - var labelsDivider = w.globals.gridWidth / tickAmount + 0.1; // initial label position; - - var l = labelsDivider + w.config.xaxis.labels.offsetX; - var lbFormatter = w.globals.xLabelFormatter; - var labels = w.globals.yAxisScale[realIndex].result.slice(); - var timelineLabels = w.globals.invertedTimelineLabels; - - if (timelineLabels.length > 0) { - this.xaxisLabels = timelineLabels.slice(); - labels = timelineLabels.slice(); - tickAmount = labels.length; - } - - if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].reversed) { - labels.reverse(); - } - - var tl = timelineLabels.length; - - if (w.config.xaxis.labels.show) { - for (var i = tl ? 0 : tickAmount; tl ? i < tl - 1 : i >= 0; tl ? i++ : i--) { - var val = labels[i]; - val = lbFormatter(val, i); - var x = w.globals.gridWidth + w.globals.padHorizontal - (l - labelsDivider + w.config.xaxis.labels.offsetX); - - if (timelineLabels.length) { - var label = this.axesUtils.getLabel(labels, timelineLabels, x, i, this.drawnLabels); - x = label.x; - val = label.text; - this.drawnLabels.push(label.text); - } - - var elTick = graphics.drawText({ - x: x, - y: this.xAxisoffX + w.config.xaxis.labels.offsetY + 30, - text: '', - textAnchor: 'middle', - foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[realIndex] : this.xaxisForeColors, - fontSize: this.xaxisFontSize, - fontFamily: this.xaxisFontFamily, - cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass - }); - elXaxisTexts.add(elTick); - elTick.tspan(val); - var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); - elTooltipTitle.textContent = val; - elTick.node.appendChild(elTooltipTitle); - l = l + labelsDivider; - } - } - - if (w.config.xaxis.title.text !== undefined) { - var elYaxisTitle = graphics.group({ - class: 'apexcharts-xaxis-title apexcharts-yaxis-title-inversed' - }); - var elYAxisTitleText = graphics.drawText({ - x: w.globals.gridWidth / 2, - y: this.xAxisoffX + parseInt(this.xaxisFontSize) + parseInt(w.config.xaxis.title.style.fontSize) + 20, - text: w.config.xaxis.title.text, - textAnchor: 'middle', - fontSize: w.config.xaxis.title.style.fontSize, - fontFamily: w.config.xaxis.title.style.fontFamily, - cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass - }); - elYaxisTitle.add(elYAxisTitleText); - elXaxis.add(elYaxisTitle); - } - - var axisBorder = w.config.yaxis[realIndex].axisBorder; - - if (axisBorder.show) { - var elVerticalLine = graphics.drawLine(w.globals.padHorizontal + axisBorder.offsetX, 1 + axisBorder.offsetY, w.globals.padHorizontal + axisBorder.offsetX, w.globals.gridHeight + axisBorder.offsetY, axisBorder.color); - elXaxis.add(elVerticalLine); - } - - return elXaxis; - } - }, { - key: "yAxisTitleRotate", - value: function yAxisTitleRotate(realIndex, yAxisOpposite) { - var w = this.w; - var graphics = new Graphics(this.ctx); - var yAxisLabelsCoord = { - width: 0, - height: 0 - }; - var yAxisTitleCoord = { - width: 0, - height: 0 - }; - var elYAxisLabelsWrap = w.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-texts-g")); - - if (elYAxisLabelsWrap !== null) { - yAxisLabelsCoord = elYAxisLabelsWrap.getBoundingClientRect(); - } - - var yAxisTitle = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-title text")); - - if (yAxisTitle !== null) { - yAxisTitleCoord = yAxisTitle.getBoundingClientRect(); - } - - if (yAxisTitle !== null) { - var x = this.xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite); - yAxisTitle.setAttribute('x', x.xPos - (yAxisOpposite ? 10 : 0)); - } - - if (yAxisTitle !== null) { - var titleRotatingCenter = graphics.rotateAroundCenter(yAxisTitle); - - if (!yAxisOpposite) { - yAxisTitle.setAttribute('transform', "rotate(-".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); - } else { - yAxisTitle.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); - } - } - } - }, { - key: "xPaddingForYAxisTitle", - value: function xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite) { - var w = this.w; - var oppositeAxisCount = 0; - var x = 0; - var padd = 10; - - if (w.config.yaxis[realIndex].title.text === undefined || realIndex < 0) { - return { - xPos: x, - padd: 0 - }; - } - - if (yAxisOpposite) { - x = yAxisLabelsCoord.width + w.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2; - oppositeAxisCount += 1; - - if (oppositeAxisCount === 0) { - x = x - padd / 2; - } - } else { - x = yAxisLabelsCoord.width * -1 + w.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2; - - if (w.globals.isBarHorizontal) { - padd = 25; - x = yAxisLabelsCoord.width * -1 - w.config.yaxis[realIndex].title.offsetX - padd; - } - } - - return { - xPos: x, - padd: padd - }; - } // sets the x position of the y-axis by counting the labels width, title width and any offset - - }, { - key: "setYAxisXPosition", - value: function setYAxisXPosition(yaxisLabelCoords, yTitleCoords) { - var w = this.w; - var xLeft = 0; - var xRight = 0; - var leftOffsetX = 21; - var rightOffsetX = 1; - - if (w.config.yaxis.length > 1) { - this.multipleYs = true; - } - - w.config.yaxis.map(function (yaxe, index) { - var shouldNotDrawAxis = w.globals.ignoreYAxisIndexes.indexOf(index) > -1 || !yaxe.show || yaxe.floating || yaxisLabelCoords[index].width === 0; - var axisWidth = yaxisLabelCoords[index].width + yTitleCoords[index].width; - - if (!yaxe.opposite) { - xLeft = w.globals.translateX - leftOffsetX; - - if (!shouldNotDrawAxis) { - leftOffsetX = leftOffsetX + axisWidth + 20; - } - - w.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX; - } else { - if (w.globals.isBarHorizontal) { - xRight = w.globals.gridWidth + w.globals.translateX - 1; - w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX; - } else { - xRight = w.globals.gridWidth + w.globals.translateX + rightOffsetX; - - if (!shouldNotDrawAxis) { - rightOffsetX = rightOffsetX + axisWidth + 20; - } - - w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20; - } - } - }); - } - }, { - key: "setYAxisTextAlignments", - value: function setYAxisTextAlignments() { - var w = this.w; - var yaxis = w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis"); - yaxis = Utils.listToArray(yaxis); - yaxis.forEach(function (y, index) { - var yaxe = w.config.yaxis[index]; // proceed only if user has specified alignment - - if (yaxe.labels.align !== undefined) { - var yAxisInner = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(index, "'] .apexcharts-yaxis-texts-g")); - var yAxisTexts = w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(index, "'] .apexcharts-yaxis-label")); - yAxisTexts = Utils.listToArray(yAxisTexts); - var rect = yAxisInner.getBoundingClientRect(); - - if (yaxe.labels.align === 'left') { - yAxisTexts.forEach(function (label, lI) { - label.setAttribute('text-anchor', 'start'); - }); - - if (!yaxe.opposite) { - yAxisInner.setAttribute('transform', "translate(-".concat(rect.width, ", 0)")); - } - } else if (yaxe.labels.align === 'center') { - yAxisTexts.forEach(function (label, lI) { - label.setAttribute('text-anchor', 'middle'); - }); - yAxisInner.setAttribute('transform', "translate(".concat(rect.width / 2 * (!yaxe.opposite ? -1 : 1), ", 0)")); - } else if (yaxe.labels.align === 'right') { - yAxisTexts.forEach(function (label, lI) { - label.setAttribute('text-anchor', 'end'); - }); - - if (yaxe.opposite) { - yAxisInner.setAttribute('transform', "translate(".concat(rect.width, ", 0)")); - } - } - } - }); - } - }]); - - return YAxis; - }(); - - var Range = - /*#__PURE__*/ - function () { - function Range(ctx) { - _classCallCheck(this, Range); - - this.ctx = ctx; - this.w = ctx.w; - } // http://stackoverflow.com/questions/326679/choosing-an-attractive-linear-scale-for-a-graphs-y-axiss - // This routine creates the Y axis values for a graph. - - - _createClass(Range, [{ - key: "niceScale", - value: function niceScale(yMin, yMax, diff) { - var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; - var ticks = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 10; - var w = this.w; - var NO_MIN_MAX_PROVIDED = this.w.config.yaxis[index].max === undefined && this.w.config.yaxis[index].min === undefined || this.w.config.yaxis[index].forceNiceScale; - - if (yMin === Number.MIN_VALUE && yMax === 0 || !Utils.isNumber(yMin) && !Utils.isNumber(yMax) || yMin === Number.MIN_VALUE && yMax === -Number.MAX_VALUE) { - // when all values are 0 - yMin = 0; - yMax = ticks; - var linearScale = this.linearScale(yMin, yMax, ticks); - return linearScale; - } - - if (yMin > yMax) { - // if somehow due to some wrong config, user sent max less than min, - // adjust the min/max again - console.warn('yaxis.min cannot be greater than yaxis.max'); - yMax = yMin + 0.1; - } else if (yMin === yMax) { - // If yMin and yMax are identical, then - // adjust the yMin and yMax values to actually - // make a graph. Also avoids division by zero errors. - yMin = yMin === 0 ? 0 : yMin - 0.5; // some small value - - yMax = yMax === 0 ? 2 : yMax + 0.5; // some small value - } // Calculate Min amd Max graphical labels and graph - // increments. The number of ticks defaults to - // 10 which is the SUGGESTED value. Any tick value - // entered is used as a suggested value which is - // adjusted to be a 'pretty' value. - // - // Output will be an array of the Y axis values that - // encompass the Y values. - - - var result = []; // Determine Range - - var range = Math.abs(yMax - yMin); - - if (range < 1 && NO_MIN_MAX_PROVIDED && (w.config.chart.type === 'candlestick' || w.config.series[index].type === 'candlestick' || w.globals.isRangeData)) { - /* fix https://github.com/apexcharts/apexcharts.js/issues/430 */ - yMax = yMax * 1.01; - } // for extremely small values - #fix #553 - - - if (range < 0.00001 && NO_MIN_MAX_PROVIDED && yMax < 10) { - yMax = yMax * 1.05; - } else if (diff > 0.1 && diff < 3 && NO_MIN_MAX_PROVIDED) { - /* fix https://github.com/apexcharts/apexcharts.js/issues/576 */ - - /* fix https://github.com/apexcharts/apexcharts.js/issues/588 */ - yMax = yMax + diff / 3; - } - - var tiks = ticks + 1; // Adjust ticks if needed - - if (tiks < 2) { - tiks = 2; - } else if (tiks > 2) { - tiks -= 2; - } // Get raw step value - - - var tempStep = range / tiks; // Calculate pretty step value - - var mag = Math.floor(Utils.log10(tempStep)); - var magPow = Math.pow(10, mag); - var magMsd = parseInt(tempStep / magPow); - var stepSize = magMsd * magPow; // build Y label array. - // Lower and upper bounds calculations - - var lb = stepSize * Math.floor(yMin / stepSize); - var ub = stepSize * Math.ceil(yMax / stepSize); // Build array - - var val = lb; - - while (1) { - result.push(val); - val += stepSize; - - if (val > ub) { - break; - } - } - - if (NO_MIN_MAX_PROVIDED) { - return { - result: result, - niceMin: result[0], - niceMax: result[result.length - 1] - }; - } else { - result = []; - var v = yMin; - result.push(v); - var valuesDivider = Math.abs(yMax - yMin) / ticks; - - for (var i = 0; i <= ticks - 1; i++) { - v = v + valuesDivider; - result.push(v); - } - - return { - result: result, - niceMin: result[0], - niceMax: result[result.length - 1] - }; - } - } - }, { - key: "linearScale", - value: function linearScale(yMin, yMax) { - var ticks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10; - var range = Math.abs(yMax - yMin); - var step = range / ticks; - - if (ticks === Number.MAX_VALUE) { - ticks = 10; - step = 1; - } - - var result = []; - var v = yMin; - - while (ticks >= 0) { - result.push(v); - v = v + step; - ticks -= 1; - } - - return { - result: result, - niceMin: result[0], - niceMax: result[result.length - 1] - }; - } - }, { - key: "logarithmicScale", - value: function logarithmicScale(index, yMin, yMax, ticks) { - if (yMin < 0 || yMin === Number.MIN_VALUE) yMin = 0.01; - var base = 10; - var min = Math.log(yMin) / Math.log(base); - var max = Math.log(yMax) / Math.log(base); - var range = Math.abs(yMax - yMin); - var step = range / ticks; - var result = []; - var v = yMin; - - while (ticks >= 0) { - result.push(v); - v = v + step; - ticks -= 1; - } - - var logs = result.map(function (niceNumber, i) { - if (niceNumber <= 0) { - niceNumber = 0.01; - } // calculate adjustment factor - - - var scale = (max - min) / (yMax - yMin); - var logVal = Math.pow(base, min + scale * (niceNumber - min)); - return Math.round(logVal / Utils.roundToBase(logVal, base)) * Utils.roundToBase(logVal, base); - }); // Math.floor may have rounded the value to 0, revert back to 1 - - if (logs[0] === 0) logs[0] = 1; - return { - result: logs, - niceMin: logs[0], - niceMax: logs[logs.length - 1] - }; - } - }, { - key: "setYScaleForIndex", - value: function setYScaleForIndex(index, minY, maxY) { - var gl = this.w.globals; - var cnf = this.w.config; - var y = gl.isBarHorizontal ? cnf.xaxis : cnf.yaxis[index]; - - if (typeof gl.yAxisScale[index] === 'undefined') { - gl.yAxisScale[index] = []; - } - - if (y.logarithmic) { - gl.allSeriesCollapsed = false; - gl.yAxisScale[index] = this.logarithmicScale(index, minY, maxY, y.tickAmount ? y.tickAmount : Math.floor(Math.log10(maxY))); - } else { - if (maxY === -Number.MAX_VALUE || !Utils.isNumber(maxY)) { - // no data in the chart. Either all series collapsed or user passed a blank array - gl.yAxisScale[index] = this.linearScale(0, 5, 5); - } else { - // there is some data. Turn off the allSeriesCollapsed flag - gl.allSeriesCollapsed = false; - - if ((y.min !== undefined || y.max !== undefined) && !y.forceNiceScale) { - // fix https://github.com/apexcharts/apexcharts.js/issues/492 - gl.yAxisScale[index] = this.linearScale(minY, maxY, y.tickAmount); - } else { - var diff = Math.abs(maxY - minY); - gl.yAxisScale[index] = this.niceScale(minY, maxY, diff, index, // fix https://github.com/apexcharts/apexcharts.js/issues/397 - y.tickAmount ? y.tickAmount : diff < 5 && diff > 1 ? diff + 1 : 5); - } - } - } - } - }, { - key: "setMultipleYScales", - value: function setMultipleYScales() { - var _this = this; - - var gl = this.w.globals; - var cnf = this.w.config; - var minYArr = gl.minYArr.concat([]); - var maxYArr = gl.maxYArr.concat([]); - var scalesIndices = []; // here, we loop through the yaxis array and find the item which has "seriesName" property - - cnf.yaxis.forEach(function (yaxe, i) { - var index = i; - cnf.series.forEach(function (s, si) { - // if seriesName matches and that series is not collapsed, we use that scale - if (s.name === yaxe.seriesName && gl.collapsedSeriesIndices.indexOf(si) === -1) { - index = si; - - if (i !== si) { - scalesIndices.push({ - index: si, - similarIndex: i, - alreadyExists: true - }); - } else { - scalesIndices.push({ - index: si - }); - } - } - }); - var minY = minYArr[index]; - var maxY = maxYArr[index]; - - _this.setYScaleForIndex(i, minY, maxY); - }); - this.sameScaleInMultipleAxes(minYArr, maxYArr, scalesIndices); - } - }, { - key: "sameScaleInMultipleAxes", - value: function sameScaleInMultipleAxes(minYArr, maxYArr, scalesIndices) { - var _this2 = this; - - var cnf = this.w.config; - var gl = this.w.globals; // we got the scalesIndices array in the above code, but we need to filter out the items which doesn't have same scales - - var similarIndices = []; - scalesIndices.forEach(function (scale) { - if (scale.alreadyExists) { - if (typeof similarIndices[scale.index] === 'undefined') { - similarIndices[scale.index] = []; - } - - similarIndices[scale.index].push(scale.index); - similarIndices[scale.index].push(scale.similarIndex); - } - }); - - function intersect(a, b) { - return a.filter(function (value) { - return b.indexOf(value) !== -1; - }); - } - - similarIndices.forEach(function (si, i) { - similarIndices.forEach(function (sj, j) { - if (i !== j) { - if (intersect(si, sj).length > 0) { - similarIndices[i] = similarIndices[i].concat(similarIndices[j]); - } - } - }); - }); // then, we remove duplicates from the similarScale array - - var uniqueSimilarIndices = similarIndices.map(function (item) { - return item.filter(function (i, pos) { - return item.indexOf(i) === pos; - }); - }); // sort further to remove whole duplicate arrays later - - var sortedIndices = uniqueSimilarIndices.map(function (s) { - return s.sort(); - }); // remove undefined items - - similarIndices = similarIndices.filter(function (s) { - return !!s; - }); - var indices = sortedIndices.slice(); - var stringIndices = indices.map(function (ind) { - return JSON.stringify(ind); - }); - indices = indices.filter(function (ind, p) { - return stringIndices.indexOf(JSON.stringify(ind)) === p; - }); - var sameScaleMinYArr = []; - var sameScaleMaxYArr = []; - minYArr.forEach(function (minYValue, yi) { - indices.forEach(function (scale, i) { - // we compare only the yIndex which exists in the indices array - if (scale.indexOf(yi) > -1) { - if (typeof sameScaleMinYArr[i] === 'undefined') { - sameScaleMinYArr[i] = []; - sameScaleMaxYArr[i] = []; - } - - sameScaleMinYArr[i].push({ - key: yi, - value: minYValue - }); - sameScaleMaxYArr[i].push({ - key: yi, - value: maxYArr[yi] - }); - } - }); - }); - var sameScaleMin = Array.apply(null, Array(indices.length)).map(Number.prototype.valueOf, Number.MIN_VALUE); - var sameScaleMax = Array.apply(null, Array(indices.length)).map(Number.prototype.valueOf, -Number.MAX_VALUE); - sameScaleMinYArr.forEach(function (s, i) { - s.forEach(function (sc, j) { - sameScaleMin[i] = Math.min(sc.value, sameScaleMin[i]); - }); - }); - sameScaleMaxYArr.forEach(function (s, i) { - s.forEach(function (sc, j) { - sameScaleMax[i] = Math.max(sc.value, sameScaleMax[i]); - }); - }); - minYArr.forEach(function (min, i) { - sameScaleMaxYArr.forEach(function (s, si) { - var minY = sameScaleMin[si]; - var maxY = sameScaleMax[si]; - s.forEach(function (ind, k) { - if (s[k].key === i) { - if (cnf.yaxis[i].min !== undefined) { - if (typeof cnf.yaxis[i].min === 'function') { - minY = cnf.yaxis[i].min(gl.minY); - } else { - minY = cnf.yaxis[i].min; - } - } - - if (cnf.yaxis[i].max !== undefined) { - if (typeof cnf.yaxis[i].max === 'function') { - maxY = cnf.yaxis[i].max(gl.maxY); - } else { - maxY = cnf.yaxis[i].max; - } - } - - _this2.setYScaleForIndex(i, minY, maxY); - } - }); - }); - }); - } - }, { - key: "autoScaleY", - value: function autoScaleY(ctx, e) { - if (!ctx) { - ctx = this; - } - - var ret = []; - ctx.w.config.series.forEach(function (serie) { - var min, max; - var first = serie.data.find(function (x) { - return x[0] >= e.xaxis.min; - }); - var firstValue = first[1]; - max = min = firstValue; - serie.data.forEach(function (data) { - if (data[0] <= e.xaxis.max && data[0] >= e.xaxis.min) { - if (data[1] > max && data[1] !== null) max = data[1]; - if (data[1] < min && data[1] !== null) min = data[1]; - } - }); - min *= 0.95; - max *= 1.05; - ret.push({ - min: min, - max: max - }); - }); - return ret; - } - }]); - - return Range; - }(); - - /** - * Range is used to generates values between min and max. - * - * @module Range - **/ - - var Range$1 = - /*#__PURE__*/ - function () { - function Range$$1(ctx) { - _classCallCheck(this, Range$$1); - - this.ctx = ctx; - this.w = ctx.w; - this.scales = new Range(ctx); - } - - _createClass(Range$$1, [{ - key: "init", - value: function init() { - this.setYRange(); - this.setXRange(); - this.setZRange(); - } - }, { - key: "getMinYMaxY", - value: function getMinYMaxY(startingIndex) { - var lowestY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE; - var highestY = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -Number.MAX_VALUE; - var len = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var gl = this.w.globals; - var maxY = -Number.MAX_VALUE; - var minY = Number.MIN_VALUE; - - if (len === null) { - len = startingIndex + 1; - } - - var series = gl.series; - var seriesMin = series; - var seriesMax = series; - - if (this.w.config.chart.type === 'candlestick') { - seriesMin = gl.seriesCandleL; - seriesMax = gl.seriesCandleH; - } else if (gl.isRangeData) { - seriesMin = gl.seriesRangeStart; - seriesMax = gl.seriesRangeEnd; - } - - for (var i = startingIndex; i < len; i++) { - gl.dataPoints = Math.max(gl.dataPoints, series[i].length); - - for (var j = 0; j < gl.series[i].length; j++) { - var val = series[i][j]; - - if (val !== null && Utils.isNumber(val)) { - maxY = Math.max(maxY, seriesMax[i][j]); - lowestY = Math.min(lowestY, seriesMin[i][j]); - highestY = Math.max(highestY, seriesMin[i][j]); - - if (this.w.config.chart.type === 'candlestick') { - maxY = Math.max(maxY, gl.seriesCandleO[i][j]); - maxY = Math.max(maxY, gl.seriesCandleH[i][j]); - maxY = Math.max(maxY, gl.seriesCandleL[i][j]); - maxY = Math.max(maxY, gl.seriesCandleC[i][j]); - highestY = maxY; - } - - if (Utils.isFloat(val)) { - val = Utils.noExponents(val); - gl.yValueDecimal = Math.max(gl.yValueDecimal, val.toString().split('.')[1].length); - } - - if (minY > seriesMin[i][j] && seriesMin[i][j] < 0) { - minY = seriesMin[i][j]; - } - } else { - gl.hasNullValues = true; - } - } - } - - return { - minY: minY, - maxY: maxY, - lowestY: lowestY, - highestY: highestY - }; - } - }, { - key: "setYRange", - value: function setYRange() { - var gl = this.w.globals; - var cnf = this.w.config; - gl.maxY = -Number.MAX_VALUE; - gl.minY = Number.MIN_VALUE; - var lowestYInAllSeries = Number.MAX_VALUE; - - if (gl.isMultipleYAxis) { - // we need to get minY and maxY for multiple y axis - for (var i = 0; i < gl.series.length; i++) { - var minYMaxYArr = this.getMinYMaxY(i, lowestYInAllSeries, null, i + 1); - gl.minYArr.push(minYMaxYArr.minY); - gl.maxYArr.push(minYMaxYArr.maxY); - lowestYInAllSeries = minYMaxYArr.lowestY; - } - } // and then, get the minY and maxY from all series - - - var minYMaxY = this.getMinYMaxY(0, lowestYInAllSeries, null, gl.series.length); - gl.minY = minYMaxY.minY; - gl.maxY = minYMaxY.maxY; - lowestYInAllSeries = minYMaxY.lowestY; - - if (cnf.chart.stacked) { - // for stacked charts, we calculate each series's parallel values. i.e, series[0][j] + series[1][j] .... [series[i.length][j]] and get the max out of it - var stackedPoss = []; - var stackedNegs = []; - - for (var j = 0; j < gl.series[gl.maxValsInArrayIndex].length; j++) { - var poss = 0; - var negs = 0; - - for (var _i = 0; _i < gl.series.length; _i++) { - if (gl.series[_i][j] !== null && Utils.isNumber(gl.series[_i][j])) { - if (gl.series[_i][j] > 0) { - // 0.0001 fixes #185 when values are very small - poss = poss + parseFloat(gl.series[_i][j]) + 0.0001; - } else { - negs = negs + parseFloat(gl.series[_i][j]); - } - } - - if (_i === gl.series.length - 1) { - // push all the totals to the array for future use - stackedPoss.push(poss); - stackedNegs.push(negs); - } - } - } // get the max/min out of the added parallel values - - - for (var z = 0; z < stackedPoss.length; z++) { - gl.maxY = Math.max(gl.maxY, stackedPoss[z]); - gl.minY = Math.min(gl.minY, stackedNegs[z]); - } - } // if the numbers are too big, reduce the range - // for eg, if number is between 100000-110000, putting 0 as the lowest value is not so good idea. So change the gl.minY for line/area/candlesticks - - - if (cnf.chart.type === 'line' || cnf.chart.type === 'area' || cnf.chart.type === 'candlestick') { - if (gl.minY === Number.MIN_VALUE && lowestYInAllSeries !== -Number.MAX_VALUE && lowestYInAllSeries !== gl.maxY // single value possibility - ) { - var diff = gl.maxY - lowestYInAllSeries; - - if (lowestYInAllSeries >= 0 && lowestYInAllSeries <= 10) { - // if minY is already 0/low value, we don't want to go negatives here - so this check is essential. - diff = 0; - } - - gl.minY = lowestYInAllSeries - diff * 5 / 100; - /* fix https://github.com/apexcharts/apexcharts.js/issues/426 */ - - gl.maxY = gl.maxY + diff * 5 / 100; - } - } - - cnf.yaxis.map(function (yaxe, index) { - // override all min/max values by user defined values (y axis) - if (yaxe.max !== undefined) { - if (typeof yaxe.max === 'number') { - gl.maxYArr[index] = yaxe.max; - } else if (typeof yaxe.max === 'function') { - gl.maxYArr[index] = yaxe.max(gl.maxY); - } // gl.maxY is for single y-axis chart, it will be ignored in multi-yaxis - - - gl.maxY = gl.maxYArr[index]; - } - - if (yaxe.min !== undefined) { - if (typeof yaxe.min === 'number') { - gl.minYArr[index] = yaxe.min; - } else if (typeof yaxe.min === 'function') { - gl.minYArr[index] = yaxe.min(gl.minY); - } // gl.minY is for single y-axis chart, it will be ignored in multi-yaxis - - - gl.minY = gl.minYArr[index]; - } - }); // for horizontal bar charts, we need to check xaxis min/max as user may have specified there - - if (gl.isBarHorizontal) { - if (cnf.xaxis.min !== undefined && typeof cnf.xaxis.min === 'number') { - gl.minY = cnf.xaxis.min; - } - - if (cnf.xaxis.max !== undefined && typeof cnf.xaxis.max === 'number') { - gl.maxY = cnf.xaxis.max; - } - } // for multi y-axis we need different scales for each - - - if (gl.isMultipleYAxis) { - this.scales.setMultipleYScales(); - gl.minY = lowestYInAllSeries; - gl.yAxisScale.forEach(function (scale, i) { - gl.minYArr[i] = scale.niceMin; - gl.maxYArr[i] = scale.niceMax; - }); - } else { - this.scales.setYScaleForIndex(0, gl.minY, gl.maxY); - gl.minY = gl.yAxisScale[0].niceMin; - gl.maxY = gl.yAxisScale[0].niceMax; - gl.minYArr[0] = gl.yAxisScale[0].niceMin; - gl.maxYArr[0] = gl.yAxisScale[0].niceMax; - } - - return { - minY: gl.minY, - maxY: gl.maxY, - minYArr: gl.minYArr, - maxYArr: gl.maxYArr - }; - } - }, { - key: "setXRange", - value: function setXRange() { - var gl = this.w.globals; - var cnf = this.w.config; - var isXNumeric = cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'datetime' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided || gl.noLabelsProvided || gl.isXNumeric; // minX maxX starts here - - if (gl.isXNumeric) { - for (var i = 0; i < gl.series.length; i++) { - if (gl.labels[i]) { - for (var j = 0; j < gl.labels[i].length; j++) { - if (gl.labels[i][j] !== null && Utils.isNumber(gl.labels[i][j])) { - gl.maxX = Math.max(gl.maxX, gl.labels[i][j]); - gl.initialmaxX = Math.max(gl.maxX, gl.labels[i][j]); - gl.minX = Math.min(gl.minX, gl.labels[i][j]); - gl.initialminX = Math.min(gl.minX, gl.labels[i][j]); - } - } - } - } - } - - if (gl.noLabelsProvided) { - if (cnf.xaxis.categories.length === 0) { - gl.maxX = gl.labels[gl.labels.length - 1]; - gl.initialmaxX = gl.labels[gl.labels.length - 1]; - gl.minX = 1; - gl.initialminX = 1; - } - } // for numeric xaxis, we need to adjust some padding left and right for bar charts - - - if (gl.comboChartsHasBars || cnf.chart.type === 'candlestick' || cnf.chart.type === 'bar' && gl.isXNumeric) { - if (cnf.xaxis.type !== 'category' || gl.isXNumeric) { - var minX = gl.minX - gl.svgWidth / gl.dataPoints * (Math.abs(gl.maxX - gl.minX) / gl.svgWidth) / 2; - gl.minX = minX; - gl.initialminX = minX; - var maxX = gl.maxX + gl.svgWidth / gl.dataPoints * (Math.abs(gl.maxX - gl.minX) / gl.svgWidth) / 2; - gl.maxX = maxX; - gl.initialmaxX = maxX; - } - } - - if ((gl.isXNumeric || gl.noLabelsProvided) && (!cnf.xaxis.convertedCatToNumeric || gl.dataFormatXNumeric)) { - var ticks; - - if (cnf.xaxis.tickAmount === undefined) { - ticks = Math.round(gl.svgWidth / 150); // no labels provided and total number of dataPoints is less than 20 - - if (cnf.xaxis.type === 'numeric' && gl.dataPoints < 20) { - ticks = gl.dataPoints - 1; - } // this check is for when ticks exceeds total datapoints and that would result in duplicate labels - - - if (ticks > gl.dataPoints && gl.dataPoints !== 0) { - ticks = gl.dataPoints - 1; - } - } else if (cnf.xaxis.tickAmount === 'dataPoints') { - ticks = gl.series[gl.maxValsInArrayIndex].length - 1; - } else { - ticks = cnf.xaxis.tickAmount; - } // override all min/max values by user defined values (x axis) - - - if (cnf.xaxis.max !== undefined && typeof cnf.xaxis.max === 'number') { - gl.maxX = cnf.xaxis.max; - } - - if (cnf.xaxis.min !== undefined && typeof cnf.xaxis.min === 'number') { - gl.minX = cnf.xaxis.min; - } // if range is provided, adjust the new minX - - - if (cnf.xaxis.range !== undefined) { - gl.minX = gl.maxX - cnf.xaxis.range; - } - - if (gl.minX !== Number.MAX_VALUE && gl.maxX !== -Number.MAX_VALUE) { - gl.xAxisScale = this.scales.linearScale(gl.minX, gl.maxX, ticks); - } else { - gl.xAxisScale = this.scales.linearScale(1, ticks, ticks); - - if (gl.noLabelsProvided && gl.labels.length > 0) { - gl.xAxisScale = this.scales.linearScale(1, gl.labels.length, ticks - 1); // this is the only place seriesX is again mutated - - gl.seriesX = gl.labels.slice(); - } - } // we will still store these labels as the count for this will be different (to draw grid and labels placement) - - - if (isXNumeric) { - gl.labels = gl.xAxisScale.result.slice(); - } - } - - if (gl.minX === gl.maxX) { - // single dataPoint - if (cnf.xaxis.type === 'datetime') { - var newMinX = new Date(gl.minX); - newMinX.setDate(newMinX.getDate() - 2); - gl.minX = new Date(newMinX).getTime(); - var newMaxX = new Date(gl.maxX); - newMaxX.setDate(newMaxX.getDate() + 2); - gl.maxX = new Date(newMaxX).getTime(); - } else if (cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided) { - gl.minX = gl.minX - 2; - gl.maxX = gl.maxX + 2; - } - } - - if (gl.isXNumeric) { - // get the least x diff if numeric x axis is present - gl.seriesX.forEach(function (sX, i) { - sX.forEach(function (s, j) { - if (j > 0) { - var xDiff = s - gl.seriesX[i][j - 1]; - gl.minXDiff = Math.min(xDiff, gl.minXDiff); - } - }); - }); - this.calcMinXDiffForTinySeries(); - } - - return { - minX: gl.minX, - maxX: gl.maxX - }; - } - }, { - key: "calcMinXDiffForTinySeries", - value: function calcMinXDiffForTinySeries() { - var w = this.w; - var len = w.globals.labels.length; - - if (w.globals.labels.length === 1) { - w.globals.minXDiff = (w.globals.maxX - w.globals.minX) / len / 3; - } else { - if (w.globals.minXDiff === Number.MAX_VALUE) { - // possibly a single dataPoint (fixes react-apexcharts/issue#34) - if (w.globals.timelineLabels.length > 0) { - len = w.globals.timelineLabels.length; - } - - if (len < 3) { - len = 3; - } - - w.globals.minXDiff = (w.globals.maxX - w.globals.minX) / len; - } - } - - return w.globals.minXDiff; - } - }, { - key: "setZRange", - value: function setZRange() { - var gl = this.w.globals; // minZ, maxZ starts here - - if (gl.isDataXYZ) { - for (var i = 0; i < gl.series.length; i++) { - if (typeof gl.seriesZ[i] !== 'undefined') { - for (var j = 0; j < gl.seriesZ[i].length; j++) { - if (gl.seriesZ[i][j] !== null && Utils.isNumber(gl.seriesZ[i][j])) { - gl.maxZ = Math.max(gl.maxZ, gl.seriesZ[i][j]); - gl.minZ = Math.min(gl.minZ, gl.seriesZ[i][j]); - } - } - } - } - } - } - }]); - - return Range$$1; - }(); - - /** - * ApexCharts Series Class for interation with the Series of the chart. - * - * @module Series - **/ - - var Series = - /*#__PURE__*/ - function () { - function Series(ctx) { - _classCallCheck(this, Series); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Series, [{ - key: "getAllSeriesEls", - value: function getAllSeriesEls() { - return this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series"); - } - }, { - key: "getSeriesByName", - value: function getSeriesByName(seriesName) { - return this.w.globals.dom.baseEl.querySelector("[seriesName='".concat(Utils.escapeString(seriesName), "']")); - } - }, { - key: "addCollapsedClassToSeries", - value: function addCollapsedClassToSeries(elSeries, index) { - var w = this.w; - - function iterateOnAllCollapsedSeries(series) { - for (var cs = 0; cs < series.length; cs++) { - if (series[cs].index === index) { - elSeries.node.classList.add('apexcharts-series-collapsed'); - } - } - } - - iterateOnAllCollapsedSeries(w.globals.collapsedSeries); - iterateOnAllCollapsedSeries(w.globals.ancillaryCollapsedSeries); - } - }, { - key: "toggleSeriesOnHover", - value: function toggleSeriesOnHover(e, targetElement) { - var w = this.w; - var allSeriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series"); - - if (e.type === 'mousemove') { - var seriesCnt = parseInt(targetElement.getAttribute('rel')) - 1; - var seriesEl = null; - - if (w.globals.axisCharts || w.config.chart.type === 'radialBar') { - if (w.globals.axisCharts) { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(seriesCnt, "']")); - } else { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(seriesCnt + 1, "']")); - } - } else { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(seriesCnt + 1, "'] path")); - } - - for (var se = 0; se < allSeriesEls.length; se++) { - allSeriesEls[se].classList.add('legend-mouseover-inactive'); - } - - if (seriesEl !== null) { - if (!w.globals.axisCharts) { - seriesEl.parentNode.classList.remove('legend-mouseover-inactive'); - } - - seriesEl.classList.remove('legend-mouseover-inactive'); - } - } else if (e.type === 'mouseout') { - for (var _se = 0; _se < allSeriesEls.length; _se++) { - allSeriesEls[_se].classList.remove('legend-mouseover-inactive'); - } - } - } - }, { - key: "highlightRangeInSeries", - value: function highlightRangeInSeries(e, targetElement) { - var w = this.w; - var allHeatMapElements = w.globals.dom.baseEl.querySelectorAll('.apexcharts-heatmap-rect'); - - var allActive = function allActive() { - for (var i = 0; i < allHeatMapElements.length; i++) { - allHeatMapElements[i].classList.remove('legend-mouseover-inactive'); - } - }; - - var allInactive = function allInactive() { - for (var i = 0; i < allHeatMapElements.length; i++) { - allHeatMapElements[i].classList.add('legend-mouseover-inactive'); - } - }; - - var selectedActive = function selectedActive(range) { - for (var i = 0; i < allHeatMapElements.length; i++) { - var val = parseInt(allHeatMapElements[i].getAttribute('val')); - - if (val >= range.from && val <= range.to) { - allHeatMapElements[i].classList.remove('legend-mouseover-inactive'); - } - } - }; - - if (e.type === 'mousemove') { - var seriesCnt = parseInt(targetElement.getAttribute('rel')) - 1; - allActive(); - allInactive(); - var range = w.config.plotOptions.heatmap.colorScale.ranges[seriesCnt]; - selectedActive(range); - } else if (e.type === 'mouseout') { - allActive(); - } - } - }, { - key: "getActiveSeriesIndex", - value: function getActiveSeriesIndex() { - var w = this.w; - var activeIndex = 0; - - if (w.globals.series.length > 1) { - // active series flag is required to know if user has not deactivated via legend click - var firstActiveSeriesIndex = w.globals.series.map(function (series, index) { - if (series.length > 0 && w.config.series[index].type !== 'bar' && w.config.series[index].type !== 'column') { - return index; - } else { - return -1; - } - }); - - for (var a = 0; a < firstActiveSeriesIndex.length; a++) { - if (firstActiveSeriesIndex[a] !== -1) { - activeIndex = firstActiveSeriesIndex[a]; - break; - } - } - } - - return activeIndex; - } - }, { - key: "getActiveConfigSeriesIndex", - value: function getActiveConfigSeriesIndex() { - var w = this.w; - var activeIndex = 0; - - if (w.config.series.length > 1) { - // active series flag is required to know if user has not deactivated via legend click - var firstActiveSeriesIndex = w.config.series.map(function (series, index) { - if (series.data && series.data.length > 0) { - return index; - } else { - return -1; - } - }); - - for (var a = 0; a < firstActiveSeriesIndex.length; a++) { - if (firstActiveSeriesIndex[a] !== -1) { - activeIndex = firstActiveSeriesIndex[a]; - break; - } - } - } - - return activeIndex; - } - }, { - key: "getPreviousPaths", - value: function getPreviousPaths() { - var w = this.w; - w.globals.previousPaths = []; - - function pushPaths(seriesEls, i, type) { - var paths = seriesEls[i].childNodes; - var dArr = { - type: type, - paths: [], - realIndex: seriesEls[i].getAttribute('data:realIndex') - }; - - for (var j = 0; j < paths.length; j++) { - if (paths[j].hasAttribute('pathTo')) { - var d = paths[j].getAttribute('pathTo'); - dArr.paths.push({ - d: d - }); - } - } - - w.globals.previousPaths.push(dArr); - } - - var linePaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-line-series .apexcharts-series'); - - if (linePaths.length > 0) { - for (var p = linePaths.length - 1; p >= 0; p--) { - pushPaths(linePaths, p, 'line'); - } - } - - var areapaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-area-series .apexcharts-series'); - - if (areapaths.length > 0) { - for (var i = areapaths.length - 1; i >= 0; i--) { - pushPaths(areapaths, i, 'area'); - } - } - - var barPaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series .apexcharts-series'); - - if (barPaths.length > 0) { - for (var _p = 0; _p < barPaths.length; _p++) { - pushPaths(barPaths, _p, 'bar'); - } - } - - var candlestickPaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-candlestick-series .apexcharts-series'); - - if (candlestickPaths.length > 0) { - for (var _p2 = 0; _p2 < candlestickPaths.length; _p2++) { - pushPaths(candlestickPaths, _p2, 'candlestick'); - } - } - - var radarPaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-radar-series .apexcharts-series'); - - if (radarPaths.length > 0) { - for (var _p3 = 0; _p3 < radarPaths.length; _p3++) { - pushPaths(radarPaths, _p3, 'radar'); - } - } - - var bubblepaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bubble-series .apexcharts-series'); - - if (bubblepaths.length > 0) { - for (var s = 0; s < bubblepaths.length; s++) { - var seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-bubble-series .apexcharts-series[data\\:realIndex='".concat(s, "'] circle")); - var dArr = []; - - for (var _i = 0; _i < seriesEls.length; _i++) { - dArr.push({ - x: seriesEls[_i].getAttribute('cx'), - y: seriesEls[_i].getAttribute('cy'), - r: seriesEls[_i].getAttribute('r') - }); - } - - w.globals.previousPaths.push(dArr); - } - } - - var scatterpaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-scatter-series .apexcharts-series'); - - if (scatterpaths.length > 0) { - for (var _s = 0; _s < scatterpaths.length; _s++) { - var _seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-scatter-series .apexcharts-series[data\\:realIndex='".concat(_s, "'] circle")); - - var _dArr = []; - - for (var _i2 = 0; _i2 < _seriesEls.length; _i2++) { - _dArr.push({ - x: _seriesEls[_i2].getAttribute('cx'), - y: _seriesEls[_i2].getAttribute('cy'), - r: _seriesEls[_i2].getAttribute('r') - }); - } - - w.globals.previousPaths.push(_dArr); - } - } - - var heatmapColors = w.globals.dom.baseEl.querySelectorAll('.apexcharts-heatmap .apexcharts-series'); - - if (heatmapColors.length > 0) { - for (var h = 0; h < heatmapColors.length; h++) { - var _seriesEls2 = w.globals.dom.baseEl.querySelectorAll(".apexcharts-heatmap .apexcharts-series[data\\:realIndex='".concat(h, "'] rect")); - - var _dArr2 = []; - - for (var _i3 = 0; _i3 < _seriesEls2.length; _i3++) { - _dArr2.push({ - color: _seriesEls2[_i3].getAttribute('color') - }); - } - - w.globals.previousPaths.push(_dArr2); - } - } - - if (!w.globals.axisCharts) { - // for non-axis charts (i.e., circular charts, pathFrom is not usable. We need whole series) - w.globals.previousPaths = w.globals.series; - } - } - }, { - key: "handleNoData", - value: function handleNoData() { - var w = this.w; - var me = this; - var noDataOpts = w.config.noData; - var graphics = new Graphics(me.ctx); - var x = w.globals.svgWidth / 2; - var y = w.globals.svgHeight / 2; - var textAnchor = 'middle'; - w.globals.noData = true; - w.globals.animationEnded = true; - - if (noDataOpts.align === 'left') { - x = 10; - textAnchor = 'start'; - } else if (noDataOpts.align === 'right') { - x = w.globals.svgWidth - 10; - textAnchor = 'end'; - } - - if (noDataOpts.verticalAlign === 'top') { - y = 50; - } else if (noDataOpts.verticalAlign === 'bottom') { - y = w.globals.svgHeight - 50; - } - - x = x + noDataOpts.offsetX; - y = y + parseInt(noDataOpts.style.fontSize) + 2; - - if (noDataOpts.text !== undefined && noDataOpts.text !== '') { - var titleText = graphics.drawText({ - x: x, - y: y, - text: noDataOpts.text, - textAnchor: textAnchor, - fontSize: noDataOpts.style.fontSize, - fontFamily: noDataOpts.style.fontFamily, - foreColor: noDataOpts.style.color, - opacity: 1, - class: 'apexcharts-text-nodata' - }); - titleText.node.setAttribute('class', 'apexcharts-title-text'); - w.globals.dom.Paper.add(titleText); - } - } // When user clicks on legends, the collapsed series is filled with [0,0,0,...,0] - // This is because we don't want to alter the series' length as it is used at many places - - }, { - key: "setNullSeriesToZeroValues", - value: function setNullSeriesToZeroValues(series) { - var w = this.w; - - for (var sl = 0; sl < series.length; sl++) { - if (series[sl].length === 0) { - for (var j = 0; j < series[w.globals.maxValsInArrayIndex].length; j++) { - series[sl].push(0); - } - } - } - - return series; - } - }, { - key: "hasAllSeriesEqualX", - value: function hasAllSeriesEqualX() { - var equalLen = true; - var w = this.w; - var filteredSerX = this.filteredSeriesX(); - - for (var i = 0; i < filteredSerX.length - 1; i++) { - if (filteredSerX[i][0] !== filteredSerX[i + 1][0]) { - equalLen = false; - break; - } - } - - w.globals.allSeriesHasEqualX = equalLen; - return equalLen; - } - }, { - key: "filteredSeriesX", - value: function filteredSeriesX() { - var w = this.w; - var filteredSeriesX = w.globals.seriesX.map(function (ser, index) { - if (ser.length > 0) { - return ser; - } else { - return []; - } - }); - return filteredSeriesX; - } - }]); - - return Series; - }(); - - /** - * ApexCharts Dimensions Class for calculating rects of all elements that are drawn and will be drawn. - * - * @module Dimensions - **/ - - var Dimensions = - /*#__PURE__*/ - function () { - function Dimensions(ctx) { - _classCallCheck(this, Dimensions); - - this.ctx = ctx; - this.w = ctx.w; - this.lgRect = {}; - this.yAxisWidth = 0; - this.xAxisHeight = 0; - this.isSparkline = this.w.config.chart.sparkline.enabled; - this.xPadRight = 0; - this.xPadLeft = 0; - } - /** - * @memberof Dimensions - * @param {object} w - chart context - **/ - - - _createClass(Dimensions, [{ - key: "plotCoords", - value: function plotCoords() { - var w = this.w; - var gl = w.globals; - var lgRect = this.getLegendsRect(); - - if (gl.axisCharts) { - // for line / area / scatter / column - this.setGridCoordsForAxisCharts(lgRect); - } else { - // for pie / donuts / circle - this.setGridCoordsForNonAxisCharts(lgRect); - } - - this.titleSubtitleOffset(); // after calculating everything, apply padding set by user - - gl.gridHeight = gl.gridHeight - w.config.grid.padding.top - w.config.grid.padding.bottom; - gl.gridWidth = gl.gridWidth - w.config.grid.padding.left - w.config.grid.padding.right - this.xPadRight - this.xPadLeft; - gl.translateX = gl.translateX + w.config.grid.padding.left + this.xPadLeft; - gl.translateY = gl.translateY + w.config.grid.padding.top; - } - }, { - key: "conditionalChecksForAxisCoords", - value: function conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords) { - var w = this.w; - this.xAxisHeight = (xaxisLabelCoords.height + xtitleCoords.height) * w.globals.LINE_HEIGHT_RATIO + 15; - this.xAxisWidth = xaxisLabelCoords.width; - - if (this.xAxisHeight - xtitleCoords.height > w.config.xaxis.labels.maxHeight) { - this.xAxisHeight = w.config.xaxis.labels.maxHeight; - } - - if (w.config.xaxis.labels.minHeight && this.xAxisHeight < w.config.xaxis.labels.minHeight) { - this.xAxisHeight = w.config.xaxis.labels.minHeight; - } - - if (w.config.xaxis.floating) { - this.xAxisHeight = 0; - } - - if (!w.globals.isBarHorizontal) { - this.yAxisWidth = this.getTotalYAxisWidth(); - } else { - this.yAxisWidth = w.globals.yLabelsCoords[0].width + w.globals.yTitleCoords[0].width + 15; - } - - var minYAxisWidth = 0; - var maxYAxisWidth = 0; - w.config.yaxis.forEach(function (y) { - minYAxisWidth += y.labels.minWidth; - maxYAxisWidth += y.labels.maxWidth; - }); - - if (this.yAxisWidth < minYAxisWidth) { - this.yAxisWidth = minYAxisWidth; - } - - if (this.yAxisWidth > maxYAxisWidth) { - this.yAxisWidth = maxYAxisWidth; - } - } - }, { - key: "setGridCoordsForAxisCharts", - value: function setGridCoordsForAxisCharts(lgRect) { - var w = this.w; - var gl = w.globals; - var yaxisLabelCoords = this.getyAxisLabelsCoords(); - var xaxisLabelCoords = this.getxAxisLabelsCoords(); - var yTitleCoords = this.getyAxisTitleCoords(); - var xtitleCoords = this.getxAxisTitleCoords(); - w.globals.yLabelsCoords = []; - w.globals.yTitleCoords = []; - w.config.yaxis.map(function (yaxe, index) { - // store the labels and titles coords in global vars - w.globals.yLabelsCoords.push({ - width: yaxisLabelCoords[index].width, - index: index - }); - w.globals.yTitleCoords.push({ - width: yTitleCoords[index].width, - index: index - }); - }); - this.conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords); - gl.translateXAxisY = w.globals.rotateXLabels ? this.xAxisHeight / 8 : -4; - gl.translateXAxisX = w.globals.rotateXLabels && w.globals.isXNumeric && w.config.xaxis.labels.rotate <= -45 ? -this.xAxisWidth / 4 : 0; - - if (w.globals.isBarHorizontal) { - gl.rotateXLabels = false; - gl.translateXAxisY = -1 * (parseInt(w.config.xaxis.labels.style.fontSize) / 1.5); - } - - gl.translateXAxisY = gl.translateXAxisY + w.config.xaxis.labels.offsetY; - gl.translateXAxisX = gl.translateXAxisX + w.config.xaxis.labels.offsetX; - var yAxisWidth = this.yAxisWidth; - var xAxisHeight = this.xAxisHeight; - gl.xAxisLabelsHeight = this.xAxisHeight; - gl.xAxisHeight = this.xAxisHeight; - var translateY = 10; - - if (!w.config.grid.show || w.config.chart.type === 'radar') { - yAxisWidth = 0; - xAxisHeight = 35; - } - - if (this.isSparkline) { - lgRect = { - height: 0, - width: 0 - }; - xAxisHeight = 0; - yAxisWidth = 0; - translateY = 0; - } - - this.additionalPaddingXLabels(xaxisLabelCoords); - - switch (w.config.legend.position) { - case 'bottom': - gl.translateY = translateY; - gl.translateX = yAxisWidth; - gl.gridHeight = gl.svgHeight - lgRect.height - xAxisHeight - (!this.isSparkline ? w.globals.rotateXLabels ? 10 : 15 : 0); - gl.gridWidth = gl.svgWidth - yAxisWidth; - break; - - case 'top': - gl.translateY = lgRect.height + translateY; - gl.translateX = yAxisWidth; - gl.gridHeight = gl.svgHeight - lgRect.height - xAxisHeight - (!this.isSparkline ? w.globals.rotateXLabels ? 10 : 15 : 0); - gl.gridWidth = gl.svgWidth - yAxisWidth; - break; - - case 'left': - gl.translateY = translateY; - gl.translateX = lgRect.width + yAxisWidth; - gl.gridHeight = gl.svgHeight - xAxisHeight - 12; - gl.gridWidth = gl.svgWidth - lgRect.width - yAxisWidth; - break; - - case 'right': - gl.translateY = translateY; - gl.translateX = yAxisWidth; - gl.gridHeight = gl.svgHeight - xAxisHeight - 12; - gl.gridWidth = gl.svgWidth - lgRect.width - yAxisWidth - 5; - break; - - default: - throw new Error('Legend position not supported'); - } - - this.setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords); // after drawing everything, set the Y axis positions - - var objyAxis = new YAxis(this.ctx); - objyAxis.setYAxisXPosition(yaxisLabelCoords, yTitleCoords); - } - }, { - key: "setGridCoordsForNonAxisCharts", - value: function setGridCoordsForNonAxisCharts(lgRect) { - var w = this.w; - var gl = w.globals; - var xPad = 0; - - if (w.config.legend.show && !w.config.legend.floating) { - xPad = 20; - } - - var offY = 10; - var offX = 0; - - if (w.config.chart.type === 'pie' || w.config.chart.type === 'donut') { - offY = offY + w.config.plotOptions.pie.offsetY; - offX = offX + w.config.plotOptions.pie.offsetX; - } else if (w.config.chart.type === 'radialBar') { - offY = offY + w.config.plotOptions.radialBar.offsetY; - offX = offX + w.config.plotOptions.radialBar.offsetX; - } - - if (!w.config.legend.show) { - gl.gridHeight = gl.svgHeight - 35; - gl.gridWidth = gl.gridHeight; - gl.translateY = offY - 10; - gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2; - return; - } - - switch (w.config.legend.position) { - case 'bottom': - gl.gridHeight = gl.svgHeight - lgRect.height - 35; - gl.gridWidth = gl.gridHeight; - gl.translateY = offY - 20; - gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2; - break; - - case 'top': - gl.gridHeight = gl.svgHeight - lgRect.height - 35; - gl.gridWidth = gl.gridHeight; - gl.translateY = lgRect.height + offY; - gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2; - break; - - case 'left': - gl.gridWidth = gl.svgWidth - lgRect.width - xPad; - gl.gridHeight = gl.gridWidth; - gl.translateY = offY; - gl.translateX = offX + lgRect.width + xPad; - break; - - case 'right': - gl.gridWidth = gl.svgWidth - lgRect.width - xPad - 5; - gl.gridHeight = gl.gridWidth; - gl.translateY = offY; - gl.translateX = offX + 10; - break; - - default: - throw new Error('Legend position not supported'); - } - } - }, { - key: "setGridXPosForDualYAxis", - value: function setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords) { - var w = this.w; - w.config.yaxis.map(function (yaxe, index) { - if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1 && !w.config.yaxis[index].floating && w.config.yaxis[index].show) { - if (yaxe.opposite) { - w.globals.translateX = w.globals.translateX - (yaxisLabelCoords[index].width + yTitleCoords[index].width) - parseInt(w.config.yaxis[index].labels.style.fontSize) / 1.2 - 12; - } - } - }); - } // Sometimes, the last labels gets cropped in category/numeric xaxis. - // Hence, we add some additional padding based on the label length to avoid the last label being cropped. - // NOTE: datetime x-axis won't have any effect with this as we don't know the label length there due to many constraints. - - }, { - key: "additionalPaddingXLabels", - value: function additionalPaddingXLabels(xaxisLabelCoords) { - var _this = this; - - var w = this.w; - - if (w.config.xaxis.type === 'category' && w.globals.isBarHorizontal || w.config.xaxis.type === 'numeric' || w.config.xaxis.type === 'datetime') { - var rightPad = function rightPad(labels) { - if (_this.timescaleLabels) { - // for timeline labels, we take the last label and check if it exceeds gridWidth - var lastTimescaleLabel = _this.timescaleLabels[_this.timescaleLabels.length - 1]; - var labelPosition = lastTimescaleLabel.position + labels.width; - - if (labelPosition > w.globals.gridWidth) { - w.globals.skipLastTimelinelabel = true; - } else { - // we have to make it false again in case of zooming/panning - w.globals.skipLastTimelinelabel = false; - } - } else if (w.config.xaxis.type !== 'datetime') { - if (w.config.grid.padding.right < labels.width) { - _this.xPadRight = labels.width / 2 + 1; - } - } - }; - - var leftPad = function leftPad(labels) { - if (w.config.grid.padding.left < labels.width) { - _this.xPadLeft = labels.width / 2 + 1; - } - }; - - var isXNumeric = w.globals.isXNumeric; - w.config.yaxis.forEach(function (yaxe, i) { - var shouldPad = !yaxe.show || yaxe.floating || w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || isXNumeric || yaxe.opposite && w.globals.isBarHorizontal; - - if (shouldPad) { - if (isXNumeric && w.globals.isMultipleYAxis && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || w.globals.isBarHorizontal && yaxe.opposite) { - leftPad(xaxisLabelCoords); - } - - if (!w.globals.isBarHorizontal && yaxe.opposite && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || isXNumeric && !w.globals.isMultipleYAxis) { - rightPad(xaxisLabelCoords); - } - } - }); - } - } - }, { - key: "titleSubtitleOffset", - value: function titleSubtitleOffset() { - var w = this.w; - var gl = w.globals; - var gridShrinkOffset = this.isSparkline || !w.globals.axisCharts ? 0 : 10; - - if (w.config.title.text !== undefined) { - gridShrinkOffset += w.config.title.margin; - } else { - gridShrinkOffset += this.isSparkline || !w.globals.axisCharts ? 0 : 5; - } - - if (w.config.subtitle.text !== undefined) { - gridShrinkOffset += w.config.subtitle.margin; - } else { - gridShrinkOffset += this.isSparkline || !w.globals.axisCharts ? 0 : 5; - } - - if (w.config.legend.show && w.config.legend.position === 'bottom' && !w.config.legend.floating && w.config.series.length > 1) { - gridShrinkOffset += 10; - } - - var titleCoords = this.getTitleSubtitleCoords('title'); - var subtitleCoords = this.getTitleSubtitleCoords('subtitle'); - gl.gridHeight = gl.gridHeight - titleCoords.height - subtitleCoords.height - gridShrinkOffset; - gl.translateY = gl.translateY + titleCoords.height + subtitleCoords.height + gridShrinkOffset; - } - }, { - key: "getTotalYAxisWidth", - value: function getTotalYAxisWidth() { - var w = this.w; - var yAxisWidth = 0; - var padding = 10; - - var isHiddenYAxis = function isHiddenYAxis(index) { - return w.globals.ignoreYAxisIndexes.indexOf(index) > -1; - }; - - w.globals.yLabelsCoords.map(function (yLabelCoord, index) { - var floating = w.config.yaxis[index].floating; - - if (yLabelCoord.width > 0 && !floating) { - yAxisWidth = yAxisWidth + yLabelCoord.width + padding; - - if (isHiddenYAxis(index)) { - yAxisWidth = yAxisWidth - yLabelCoord.width - padding; - } - } else { - yAxisWidth = yAxisWidth + (floating || !w.config.yaxis[index].show ? 0 : 5); - } - }); - w.globals.yTitleCoords.map(function (yTitleCoord, index) { - var floating = w.config.yaxis[index].floating; - padding = parseInt(w.config.yaxis[index].title.style.fontSize); - - if (yTitleCoord.width > 0 && !floating) { - yAxisWidth = yAxisWidth + yTitleCoord.width + padding; - - if (isHiddenYAxis(index)) { - yAxisWidth = yAxisWidth - yTitleCoord.width - padding; - } - } else { - yAxisWidth = yAxisWidth + (floating || !w.config.yaxis[index].show ? 0 : 5); - } - }); - return yAxisWidth; - } - }, { - key: "getxAxisTimeScaleLabelsCoords", - value: function getxAxisTimeScaleLabelsCoords() { - var w = this.w; - var rect; - this.timescaleLabels = w.globals.timelineLabels.slice(); - - if (w.globals.isBarHorizontal && w.config.xaxis.type === 'datetime') { - this.timescaleLabels = w.globals.invertedTimelineLabels.slice(); - } - - var labels = this.timescaleLabels.map(function (label) { - return label.value; - }); // get the longest string from the labels array and also apply label formatter to it - - var val = labels.reduce(function (a, b) { - // if undefined, maybe user didn't pass the datetime(x) values - if (typeof a === 'undefined') { - console.error('You have possibly supplied invalid Date format. Please supply a valid JavaScript Date'); - return 0; - } else { - return a.length > b.length ? a : b; - } - }, 0); - var graphics = new Graphics(this.ctx); - rect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize); - var totalWidthRotated = rect.width * 1.05 * labels.length; - - if (totalWidthRotated > w.globals.gridWidth && w.config.xaxis.labels.rotate !== 0) { - w.globals.overlappingXLabels = true; - } - - return rect; - } - /** - * Get X Axis Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getxAxisLabelsCoords", - value: function getxAxisLabelsCoords() { - var w = this.w; - var xaxisLabels = w.globals.labels.slice(); - var rect; - - if (w.globals.timelineLabels.length > 0) { - var coords = this.getxAxisTimeScaleLabelsCoords(); - rect = { - width: coords.width, - height: coords.height - }; - } else { - var lgWidthForSideLegends = w.config.legend.position === 'left' && w.config.legend.position === 'right' && !w.config.legend.floating ? this.lgRect.width : 0; // get the longest string from the labels array and also apply label formatter - - var xlbFormatter = w.globals.xLabelFormatter; // prevent changing xaxisLabels to avoid issues in multi-yaxies - fix #522 - - var val = xaxisLabels.reduce(function (a, b) { - return a.length > b.length ? a : b; - }, 0); // the labels gets changed for bar charts - - if (w.globals.isBarHorizontal) { - val = w.globals.yAxisScale[0].result.reduce(function (a, b) { - return a.length > b.length ? a : b; - }, 0); - } - - var xFormat = new Formatters(this.ctx); - val = xFormat.xLabelFormat(xlbFormatter, val); - var graphics = new Graphics(this.ctx); - var xLabelrect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize); - rect = { - width: xLabelrect.width, - height: xLabelrect.height - }; - - if (rect.width * xaxisLabels.length > w.globals.svgWidth - lgWidthForSideLegends - this.yAxisWidth && w.config.xaxis.labels.rotate !== 0) { - if (!w.globals.isBarHorizontal) { - w.globals.rotateXLabels = true; - xLabelrect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize, w.config.xaxis.labels.style.fontFamily, "rotate(".concat(w.config.xaxis.labels.rotate, " 0 0)"), false); - rect.height = xLabelrect.height / 1.66; - } - } else { - w.globals.rotateXLabels = false; - } - } - - if (!w.config.xaxis.labels.show) { - rect = { - width: 0, - height: 0 - }; - } - - return { - width: rect.width, - height: rect.height - }; - } - /** - * Get Y Axis Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getyAxisLabelsCoords", - value: function getyAxisLabelsCoords() { - var _this2 = this; - - var w = this.w; - var width = 0; - var height = 0; - var ret = []; - var labelPad = 10; - w.config.yaxis.map(function (yaxe, index) { - if (yaxe.show && yaxe.labels.show && w.globals.yAxisScale[index].result.length) { - var lbFormatter = w.globals.yLabelFormatters[index]; // the second parameter -1 is the index of tick which user can use in the formatter - - var val = lbFormatter(w.globals.yAxisScale[index].niceMax, -1); // if user has specified a custom formatter, and the result is null or empty, we need to discard the formatter and take the value as it is. - - if (typeof val === 'undefined' || val.length === 0) { - val = w.globals.yAxisScale[index].niceMax; - } - - if (w.globals.isBarHorizontal) { - labelPad = 0; - var barYaxisLabels = w.globals.labels.slice(); // get the longest string from the labels array and also apply label formatter to it - - val = barYaxisLabels.reduce(function (a, b) { - return a.length > b.length ? a : b; - }, 0); - val = lbFormatter(val, -1); - } - - var graphics = new Graphics(_this2.ctx); - var rect = graphics.getTextRects(val, yaxe.labels.style.fontSize); - ret.push({ - width: rect.width + labelPad, - height: rect.height - }); - } else { - ret.push({ - width: width, - height: height - }); - } - }); - return ret; - } - /** - * Get X Axis Title Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getxAxisTitleCoords", - value: function getxAxisTitleCoords() { - var w = this.w; - var width = 0; - var height = 0; - - if (w.config.xaxis.title.text !== undefined) { - var graphics = new Graphics(this.ctx); - var rect = graphics.getTextRects(w.config.xaxis.title.text, w.config.xaxis.title.style.fontSize); - width = rect.width; - height = rect.height; - } - - return { - width: width, - height: height - }; - } - /** - * Get Y Axis Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getyAxisTitleCoords", - value: function getyAxisTitleCoords() { - var _this3 = this; - - var w = this.w; - var ret = []; - w.config.yaxis.map(function (yaxe, index) { - if (yaxe.show && yaxe.title.text !== undefined) { - var graphics = new Graphics(_this3.ctx); - var rect = graphics.getTextRects(yaxe.title.text, yaxe.title.style.fontSize, yaxe.title.style.fontFamily, 'rotate(-90 0 0)', false); - ret.push({ - width: rect.width, - height: rect.height - }); - } else { - ret.push({ - width: 0, - height: 0 - }); - } - }); - return ret; - } - /** - * Get Chart Title/Subtitle Dimensions - * @memberof Dimensions - * @return {{width, height}} - **/ - - }, { - key: "getTitleSubtitleCoords", - value: function getTitleSubtitleCoords(type) { - var w = this.w; - var width = 0; - var height = 0; - var floating = type === 'title' ? w.config.title.floating : w.config.subtitle.floating; - var el = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-text")); - - if (el !== null && !floating) { - var coord = el.getBoundingClientRect(); - width = coord.width; - height = w.globals.axisCharts ? coord.height + 5 : coord.height; - } - - return { - width: width, - height: height - }; - } - }, { - key: "getLegendsRect", - value: function getLegendsRect() { - var w = this.w; - var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); - var lgRect = Object.assign({}, Utils.getBoundingClientRect(elLegendWrap)); - - if (elLegendWrap !== null && !w.config.legend.floating && w.config.legend.show) { - this.lgRect = { - x: lgRect.x, - y: lgRect.y, - height: lgRect.height, - width: lgRect.height === 0 ? 0 : lgRect.width - }; - } else { - this.lgRect = { - x: 0, - y: 0, - height: 0, - width: 0 - }; - } - - return this.lgRect; - } - }]); - - return Dimensions; - }(); - - /** - * ApexCharts TimeScale Class for generating time ticks for x-axis. - * - * @module TimeScale - **/ - - var TimeScale = - /*#__PURE__*/ - function () { - function TimeScale(ctx) { - _classCallCheck(this, TimeScale); - - this.ctx = ctx; - this.w = ctx.w; - this.timeScaleArray = []; - } - - _createClass(TimeScale, [{ - key: "calculateTimeScaleTicks", - value: function calculateTimeScaleTicks(minX, maxX) { - var _this = this; - - var w = this.w; // null check when no series to show - - if (w.globals.allSeriesCollapsed) { - w.globals.labels = []; - w.globals.timelineLabels = []; - return []; - } - - var dt = new DateTime(this.ctx); - var daysDiff = (maxX - minX) / (1000 * 60 * 60 * 24); - this.determineInterval(daysDiff); - w.globals.disableZoomIn = false; - w.globals.disableZoomOut = false; - - if (daysDiff < 0.005) { - w.globals.disableZoomIn = true; - } else if (daysDiff > 50000) { - w.globals.disableZoomOut = true; - } - - var timeIntervals = dt.getTimeUnitsfromTimestamp(minX, maxX); - var daysWidthOnXAxis = w.globals.gridWidth / daysDiff; - var hoursWidthOnXAxis = daysWidthOnXAxis / 24; - var minutesWidthOnXAxis = hoursWidthOnXAxis / 60; - var numberOfHours = Math.floor(daysDiff * 24); - var numberOfMinutes = Math.floor(daysDiff * 24 * 60); - var numberOfDays = Math.floor(daysDiff); - var numberOfMonths = Math.floor(daysDiff / 30); - var numberOfYears = Math.floor(daysDiff / 365); - var firstVal = { - minMinute: timeIntervals.minMinute, - minHour: timeIntervals.minHour, - minDate: timeIntervals.minDate, - minMonth: timeIntervals.minMonth, - minYear: timeIntervals.minYear - }; - var currentMinute = firstVal.minMinute; - var currentHour = firstVal.minHour; - var currentMonthDate = firstVal.minDate; - var currentDate = firstVal.minDate; - var currentMonth = firstVal.minMonth; - var currentYear = firstVal.minYear; - var params = { - firstVal: firstVal, - currentMinute: currentMinute, - currentHour: currentHour, - currentMonthDate: currentMonthDate, - currentDate: currentDate, - currentMonth: currentMonth, - currentYear: currentYear, - daysWidthOnXAxis: daysWidthOnXAxis, - hoursWidthOnXAxis: hoursWidthOnXAxis, - minutesWidthOnXAxis: minutesWidthOnXAxis, - numberOfMinutes: numberOfMinutes, - numberOfHours: numberOfHours, - numberOfDays: numberOfDays, - numberOfMonths: numberOfMonths, - numberOfYears: numberOfYears - }; - - switch (this.tickInterval) { - case 'years': - { - this.generateYearScale(params); - break; - } - - case 'months': - case 'half_year': - { - this.generateMonthScale(params); - break; - } - - case 'months_days': - case 'months_fortnight': - case 'days': - case 'week_days': - { - this.generateDayScale(params); - break; - } - - case 'hours': - { - this.generateHourScale(params); - break; - } - - case 'minutes': - this.generateMinuteScale(params); - break; - } // first, we will adjust the month values index - // as in the upper function, it is starting from 0 - // we will start them from 1 - - - var adjustedMonthInTimeScaleArray = this.timeScaleArray.map(function (ts) { - var defaultReturn = { - position: ts.position, - unit: ts.unit, - year: ts.year, - day: ts.day ? ts.day : 1, - hour: ts.hour ? ts.hour : 0, - month: ts.month + 1 - }; - - if (ts.unit === 'month') { - return _objectSpread({}, defaultReturn, { - value: ts.value + 1 - }); - } else if (ts.unit === 'day' || ts.unit === 'hour') { - return _objectSpread({}, defaultReturn, { - value: ts.value - }); - } else if (ts.unit === 'minute') { - return _objectSpread({}, defaultReturn, { - value: ts.value, - minute: ts.value - }); - } - - return ts; - }); - var filteredTimeScale = adjustedMonthInTimeScaleArray.filter(function (ts) { - var modulo = 1; - var ticks = Math.ceil(w.globals.gridWidth / 120); - var value = ts.value; - - if (w.config.xaxis.tickAmount !== undefined) { - ticks = w.config.xaxis.tickAmount; - } - - if (adjustedMonthInTimeScaleArray.length > ticks) { - modulo = Math.floor(adjustedMonthInTimeScaleArray.length / ticks); - } - - var shouldNotSkipUnit = false; // there is a big change in unit i.e days to months - - var shouldNotPrint = false; // should skip these values - - switch (_this.tickInterval) { - case 'half_year': - modulo = 7; - - if (ts.unit === 'year') { - shouldNotSkipUnit = true; - } - - break; - - case 'months': - modulo = 1; - - if (ts.unit === 'year') { - shouldNotSkipUnit = true; - } - - break; - - case 'months_fortnight': - modulo = 15; - - if (ts.unit === 'year' || ts.unit === 'month') { - shouldNotSkipUnit = true; - } - - if (value === 30) { - shouldNotPrint = true; - } - - break; - - case 'months_days': - modulo = 10; - - if (ts.unit === 'month') { - shouldNotSkipUnit = true; - } - - if (value === 30) { - shouldNotPrint = true; - } - - break; - - case 'week_days': - modulo = 8; - - if (ts.unit === 'month') { - shouldNotSkipUnit = true; - } - - break; - - case 'days': - modulo = 1; - - if (ts.unit === 'month') { - shouldNotSkipUnit = true; - } - - break; - - case 'hours': - if (ts.unit === 'day') { - shouldNotSkipUnit = true; - } - - break; - - case 'minutes': - if (value % 5 !== 0) { - shouldNotPrint = true; - } - - break; - } - - if (_this.tickInterval === 'minutes' || _this.tickInterval === 'hours') { - if (!shouldNotPrint) { - return true; - } - } else { - if ((value % modulo === 0 || shouldNotSkipUnit) && !shouldNotPrint) { - return true; - } - } - }); - return filteredTimeScale; - } - }, { - key: "recalcDimensionsBasedOnFormat", - value: function recalcDimensionsBasedOnFormat(filteredTimeScale, inverted) { - var w = this.w; - var reformattedTimescaleArray = this.formatDates(filteredTimeScale); - var removedOverlappingTS = this.removeOverlappingTS(reformattedTimescaleArray); - - if (!inverted) { - w.globals.timelineLabels = removedOverlappingTS.slice(); - } else { - w.globals.invertedTimelineLabels = removedOverlappingTS.slice(); - } // at this stage, we need to re-calculate coords of the grid as timeline labels may have altered the xaxis labels coords - // The reason we can't do this prior to this stage is because timeline labels depends on gridWidth, and as the ticks are calculated based on available gridWidth, there can be unknown number of ticks generated for different minX and maxX - // Dependency on Dimensions(), need to refactor correctly - // TODO - find an alternate way to avoid calling this Heavy method twice - - - var dimensions = new Dimensions(this.ctx); - dimensions.plotCoords(); - } - }, { - key: "determineInterval", - value: function determineInterval(daysDiff) { - switch (true) { - case daysDiff > 1825: - // difference is more than 5 years - this.tickInterval = 'years'; - break; - - case daysDiff > 800 && daysDiff <= 1825: - this.tickInterval = 'half_year'; - break; - - case daysDiff > 180 && daysDiff <= 800: - this.tickInterval = 'months'; - break; - - case daysDiff > 90 && daysDiff <= 180: - this.tickInterval = 'months_fortnight'; - break; - - case daysDiff > 60 && daysDiff <= 90: - this.tickInterval = 'months_days'; - break; - - case daysDiff > 30 && daysDiff <= 60: - this.tickInterval = 'week_days'; - break; - - case daysDiff > 2 && daysDiff <= 30: - this.tickInterval = 'days'; - break; - - case daysDiff > 0.1 && daysDiff <= 2: - // less than 2 days - this.tickInterval = 'hours'; - break; - - case daysDiff < 0.1: - this.tickInterval = 'minutes'; - break; - - default: - this.tickInterval = 'days'; - break; - } - } - }, { - key: "generateYearScale", - value: function generateYearScale(params) { - var firstVal = params.firstVal, - currentMonth = params.currentMonth, - currentYear = params.currentYear, - daysWidthOnXAxis = params.daysWidthOnXAxis, - numberOfYears = params.numberOfYears; - var firstTickValue = firstVal.minYear; - var firstTickPosition = 0; - var dt = new DateTime(this.ctx); - var unit = 'year'; - - if (firstVal.minDate > 1 && firstVal.minMonth > 0) { - var remainingDays = dt.determineRemainingDaysOfYear(firstVal.minYear, firstVal.minMonth, firstVal.minDate); // remainingDaysofFirstMonth is used to reacht the 2nd tick position - - var remainingDaysOfFirstYear = dt.determineDaysOfYear(firstVal.minYear) - remainingDays + 1; // calculate the first tick position - - firstTickPosition = remainingDaysOfFirstYear * daysWidthOnXAxis; - firstTickValue = firstVal.minYear + 1; // push the first tick in the array - - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - year: firstTickValue, - month: Utils.monthMod(currentMonth + 1) - }); - } else if (firstVal.minDate === 1 && firstVal.minMonth === 0) { - // push the first tick in the array - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - year: currentYear, - month: Utils.monthMod(currentMonth + 1) - }); - } - - var year = firstTickValue; - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0; i < numberOfYears; i++) { - year++; - pos = dt.determineDaysOfYear(year - 1) * daysWidthOnXAxis + pos; - this.timeScaleArray.push({ - position: pos, - value: year, - unit: unit, - year: year, - month: 1 - }); - } - } - }, { - key: "generateMonthScale", - value: function generateMonthScale(params) { - var firstVal = params.firstVal, - currentMonthDate = params.currentMonthDate, - currentMonth = params.currentMonth, - currentYear = params.currentYear, - daysWidthOnXAxis = params.daysWidthOnXAxis, - numberOfMonths = params.numberOfMonths; - var firstTickValue = currentMonth; - var firstTickPosition = 0; - var dt = new DateTime(this.ctx); - var unit = 'month'; - var yrCounter = 0; - - if (firstVal.minDate > 1) { - // remainingDaysofFirstMonth is used to reacht the 2nd tick position - var remainingDaysOfFirstMonth = dt.determineDaysOfMonths(currentMonth + 1, firstVal.minYear) - currentMonthDate + 1; // calculate the first tick position - - firstTickPosition = remainingDaysOfFirstMonth * daysWidthOnXAxis; - firstTickValue = Utils.monthMod(currentMonth + 1); - var year = currentYear + yrCounter; - - var _month = Utils.monthMod(firstTickValue); - - var value = firstTickValue; // it's Jan, so update the year - - if (firstTickValue === 0) { - unit = 'year'; - value = year; - _month = 1; - yrCounter += 1; - year = year + yrCounter; - } // push the first tick in the array - - - this.timeScaleArray.push({ - position: firstTickPosition, - value: value, - unit: unit, - year: year, - month: _month - }); - } else { - // push the first tick in the array - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - year: currentYear, - month: Utils.monthMod(currentMonth) - }); - } - - var month = firstTickValue + 1; - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0, j = 1; i < numberOfMonths; i++, j++) { - month = Utils.monthMod(month); - - if (month === 0) { - unit = 'year'; - yrCounter += 1; - } else { - unit = 'month'; - } - - var _year = currentYear + Math.floor(month / 12) + yrCounter; - - pos = dt.determineDaysOfMonths(month, _year) * daysWidthOnXAxis + pos; - var monthVal = month === 0 ? _year : month; - this.timeScaleArray.push({ - position: pos, - value: monthVal, - unit: unit, - year: _year, - month: month === 0 ? 1 : month - }); - month++; - } - } - }, { - key: "generateDayScale", - value: function generateDayScale(params) { - var firstVal = params.firstVal, - currentMonth = params.currentMonth, - currentYear = params.currentYear, - hoursWidthOnXAxis = params.hoursWidthOnXAxis, - numberOfDays = params.numberOfDays; - var dt = new DateTime(this.ctx); - var unit = 'day'; - var remainingHours = 24 - firstVal.minHour; - var yrCounter = 0; // calculate the first tick position - - var firstTickPosition = remainingHours * hoursWidthOnXAxis; - var firstTickValue = firstVal.minDate + 1; - var val = firstTickValue; - - var changeMonth = function changeMonth(dateVal, month, year) { - var monthdays = dt.determineDaysOfMonths(month + 1, year); - - if (dateVal > monthdays) { - month = month + 1; - date = 1; - unit = 'month'; - val = month; - return month; - } - - return month; - }; - - var date = firstTickValue; - var month = changeMonth(date, currentMonth, currentYear); // push the first tick in the array - - this.timeScaleArray.push({ - position: firstTickPosition, - value: val, - unit: unit, - year: currentYear, - month: Utils.monthMod(month), - day: date - }); - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0; i < numberOfDays; i++) { - date += 1; - unit = 'day'; - month = changeMonth(date, month, currentYear + Math.floor(month / 12) + yrCounter); - var year = currentYear + Math.floor(month / 12) + yrCounter; - pos = 24 * hoursWidthOnXAxis + pos; - - var _val = date === 1 ? Utils.monthMod(month) : date; - - this.timeScaleArray.push({ - position: pos, - value: _val, - unit: unit, - year: year, - month: Utils.monthMod(month), - day: _val - }); - } - } - }, { - key: "generateHourScale", - value: function generateHourScale(params) { - var firstVal = params.firstVal, - currentDate = params.currentDate, - currentMonth = params.currentMonth, - currentYear = params.currentYear, - minutesWidthOnXAxis = params.minutesWidthOnXAxis, - numberOfHours = params.numberOfHours; - var dt = new DateTime(this.ctx); - var yrCounter = 0; - var unit = 'hour'; - - var changeDate = function changeDate(dateVal, month) { - var monthdays = dt.determineDaysOfMonths(month + 1, currentYear); - - if (dateVal > monthdays) { - date = 1; - month = month + 1; - } - - return { - month: month, - date: date - }; - }; - - var changeMonth = function changeMonth(dateVal, month) { - var monthdays = dt.determineDaysOfMonths(month + 1, currentYear); - - if (dateVal > monthdays) { - month = month + 1; - return month; - } - - return month; - }; - - var remainingMins = 60 - firstVal.minMinute; - var firstTickPosition = remainingMins * minutesWidthOnXAxis; - var firstTickValue = firstVal.minHour + 1; - var hour = firstTickValue + 1; - - if (remainingMins === 60) { - firstTickPosition = 0; - firstTickValue = firstVal.minHour; - hour = firstTickValue + 1; - } - - var date = currentDate; - var month = changeMonth(date, currentMonth); // push the first tick in the array - - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - day: date, - hour: hour, - year: currentYear, - month: Utils.monthMod(month) - }); - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0; i < numberOfHours; i++) { - unit = 'hour'; - - if (hour >= 24) { - hour = 0; - date += 1; - unit = 'day'; - var checkNextMonth = changeDate(date, month); - month = checkNextMonth.month; - month = changeMonth(date, month); - } - - var year = currentYear + Math.floor(month / 12) + yrCounter; - pos = hour === 0 && i === 0 ? remainingMins * minutesWidthOnXAxis : 60 * minutesWidthOnXAxis + pos; - var val = hour === 0 ? date : hour; - this.timeScaleArray.push({ - position: pos, - value: val, - unit: unit, - hour: hour, - day: date, - year: year, - month: Utils.monthMod(month) - }); - hour++; - } - } - }, { - key: "generateMinuteScale", - value: function generateMinuteScale(params) { - var firstVal = params.firstVal, - currentMinute = params.currentMinute, - currentHour = params.currentHour, - currentDate = params.currentDate, - currentMonth = params.currentMonth, - currentYear = params.currentYear, - minutesWidthOnXAxis = params.minutesWidthOnXAxis, - numberOfMinutes = params.numberOfMinutes; - var yrCounter = 0; - var unit = 'minute'; - var remainingMins = currentMinute - firstVal.minMinute; - var firstTickPosition = minutesWidthOnXAxis - remainingMins; - var firstTickValue = firstVal.minMinute + 1; - var minute = firstTickValue + 1; - var date = currentDate; - var month = currentMonth; - var year = currentYear; - var hour = currentHour; // push the first tick in the array - - this.timeScaleArray.push({ - position: firstTickPosition, - value: firstTickValue, - unit: unit, - day: date, - hour: hour, - minute: minute, - year: year, - month: Utils.monthMod(month) - }); - var pos = firstTickPosition; // keep drawing rest of the ticks - - for (var i = 0; i < numberOfMinutes; i++) { - if (minute >= 60) { - minute = 0; - hour += 1; - - if (hour === 24) { - hour = 0; - } - } - - var _year2 = currentYear + Math.floor(month / 12) + yrCounter; - - pos = minutesWidthOnXAxis + pos; - var val = minute; - this.timeScaleArray.push({ - position: pos, - value: val, - unit: unit, - hour: hour, - minute: minute, - day: date, - year: _year2, - month: Utils.monthMod(month) - }); - minute++; - } - } - }, { - key: "createRawDateString", - value: function createRawDateString(ts, value) { - var raw = ts.year; - raw += '-' + ('0' + ts.month.toString()).slice(-2); // unit is day - - if (ts.unit === 'day') { - raw += ts.unit === 'day' ? '-' + ('0' + value).slice(-2) : '-01'; - } else { - raw += '-' + ('0' + (ts.day ? ts.day : '1')).slice(-2); - } // unit is hour - - - if (ts.unit === 'hour') { - raw += ts.unit === 'hour' ? 'T' + ('0' + value).slice(-2) : 'T00'; - } else { - raw += 'T' + ('0' + (ts.hour ? ts.hour : '0')).slice(-2); - } // unit is minute - - - raw += ts.unit === 'minute' ? ':' + ('0' + value).slice(-2) + ':00.000Z' : ':00:00.000Z'; - return raw; - } - }, { - key: "formatDates", - value: function formatDates(filteredTimeScale) { - var _this2 = this; - - var w = this.w; - var reformattedTimescaleArray = filteredTimeScale.map(function (ts) { - var value = ts.value.toString(); - var dt = new DateTime(_this2.ctx); - - var raw = _this2.createRawDateString(ts, value); // parse the whole ISO datestring - - - var dateString = new Date(Date.parse(raw)); - - if (w.config.xaxis.labels.format === undefined) { - var customFormat = 'dd MMM'; - var dtFormatter = w.config.xaxis.labels.datetimeFormatter; - if (ts.unit === 'year') customFormat = dtFormatter.year; - if (ts.unit === 'month') customFormat = dtFormatter.month; - if (ts.unit === 'day') customFormat = dtFormatter.day; - if (ts.unit === 'hour') customFormat = dtFormatter.hour; - if (ts.unit === 'minute') customFormat = dtFormatter.minute; - value = dt.formatDate(dateString, customFormat, true, false); - } else { - value = dt.formatDate(dateString, w.config.xaxis.labels.format); - } - - return { - dateString: raw, - position: ts.position, - value: value, - unit: ts.unit, - year: ts.year, - month: ts.month - }; - }); - return reformattedTimescaleArray; - } - }, { - key: "removeOverlappingTS", - value: function removeOverlappingTS(arr) { - var _this3 = this; - - var graphics = new Graphics(this.ctx); - var lastDrawnIndex = 0; - var filteredArray = arr.map(function (item, index) { - if (index > 0 && _this3.w.config.xaxis.labels.hideOverlappingLabels) { - var prevLabelWidth = graphics.getTextRects(arr[lastDrawnIndex].value).width; - var prevPos = arr[lastDrawnIndex].position; - var pos = item.position; - - if (pos > prevPos + prevLabelWidth + 10) { - lastDrawnIndex = index; - return item; - } else { - return null; - } - } else { - return item; - } - }); - filteredArray = filteredArray.filter(function (f) { - return f !== null; - }); - return filteredArray; - } - }]); - - return TimeScale; - }(); - - /** - * ApexCharts Core Class responsible for major calculations and creating elements. - * - * @module Core - **/ - - var Core = - /*#__PURE__*/ - function () { - function Core(el, ctx) { - _classCallCheck(this, Core); - - this.ctx = ctx; - this.w = ctx.w; - this.el = el; - this.coreUtils = new CoreUtils(this.ctx); - this.twoDSeries = []; - this.threeDSeries = []; - this.twoDSeriesX = []; - } // get data and store into appropriate vars - - - _createClass(Core, [{ - key: "setupElements", - value: function setupElements() { - var gl = this.w.globals; - var cnf = this.w.config; // const graphics = new Graphics(this.ctx) - - var ct = cnf.chart.type; - var axisChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', // 'rangeArea', - 'candlestick', 'radar', 'scatter', 'bubble', 'heatmap']; - var xyChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', // 'rangeArea', - 'candlestick', 'scatter', 'bubble']; - gl.axisCharts = axisChartsArrTypes.indexOf(ct) > -1; - gl.xyCharts = xyChartsArrTypes.indexOf(ct) > -1; - gl.isBarHorizontal = (cnf.chart.type === 'bar' || cnf.chart.type === 'rangeBar') && cnf.plotOptions.bar.horizontal; - gl.chartClass = '.apexcharts' + gl.cuid; - gl.dom.baseEl = this.el; - gl.dom.elWrap = document.createElement('div'); - Graphics.setAttrs(gl.dom.elWrap, { - id: gl.chartClass.substring(1), - class: 'apexcharts-canvas ' + gl.chartClass.substring(1) - }); - this.el.appendChild(gl.dom.elWrap); - gl.dom.Paper = new window.SVG.Doc(gl.dom.elWrap); - gl.dom.Paper.attr({ - class: 'apexcharts-svg', - 'xmlns:data': 'ApexChartsNS', - transform: "translate(".concat(cnf.chart.offsetX, ", ").concat(cnf.chart.offsetY, ")") - }); - gl.dom.Paper.node.style.background = cnf.chart.background; - this.setSVGDimensions(); - gl.dom.elGraphical = gl.dom.Paper.group().attr({ - class: 'apexcharts-inner apexcharts-graphical' - }); - gl.dom.elDefs = gl.dom.Paper.defs(); - gl.dom.elLegendWrap = document.createElement('div'); - gl.dom.elLegendWrap.classList.add('apexcharts-legend'); - gl.dom.elWrap.appendChild(gl.dom.elLegendWrap); // gl.dom.Paper.add(gl.dom.elLegendWrap) - - gl.dom.Paper.add(gl.dom.elGraphical); - gl.dom.elGraphical.add(gl.dom.elDefs); - } - }, { - key: "plotChartType", - value: function plotChartType(ser, xyRatios) { - var w = this.w; - var cnf = w.config; - var gl = w.globals; - var lineSeries = { - series: [], - i: [] - }; - var areaSeries = { - series: [], - i: [] - }; - var scatterSeries = { - series: [], - i: [] - }; - var columnSeries = { - series: [], - i: [] - }; - var candlestickSeries = { - series: [], - i: [] - }; - gl.series.map(function (series, st) { - // if user has specified a particular type for particular series - if (typeof ser[st].type !== 'undefined') { - if (ser[st].type === 'column' || ser[st].type === 'bar') { - w.config.plotOptions.bar.horizontal = false; // horizontal bars not supported in mixed charts, hence forcefully set to false - - columnSeries.series.push(series); - columnSeries.i.push(st); - } else if (ser[st].type === 'area') { - areaSeries.series.push(series); - areaSeries.i.push(st); - } else if (ser[st].type === 'line') { - lineSeries.series.push(series); - lineSeries.i.push(st); - } else if (ser[st].type === 'scatter') { - scatterSeries.series.push(series); - scatterSeries.i.push(st); - } else if (ser[st].type === 'bubble') ; else if (ser[st].type === 'candlestick') { - candlestickSeries.series.push(series); - candlestickSeries.i.push(st); - } else { - // user has specified type, but it is not valid (other than line/area/column) - console.warn('You have specified an unrecognized chart type. Available types for this propery are line/area/column/bar/scatter/bubble'); - } - - gl.comboCharts = true; - } else { - lineSeries.series.push(series); - lineSeries.i.push(st); - } - }); - var line = new Line(this.ctx, xyRatios); - var candlestick = new CandleStick(this.ctx, xyRatios); - var pie = new Pie(this.ctx); - var radialBar = new Radial(this.ctx); - var rangeBar = new RangeBar(this.ctx, xyRatios); - var radar = new Radar(this.ctx); - var elGraph = []; - - if (gl.comboCharts) { - if (areaSeries.series.length > 0) { - elGraph.push(line.draw(areaSeries.series, 'area', areaSeries.i)); - } - - if (columnSeries.series.length > 0) { - if (w.config.chart.stacked) { - var barStacked = new BarStacked(this.ctx, xyRatios); - elGraph.push(barStacked.draw(columnSeries.series, columnSeries.i)); - } else { - var bar = new Bar(this.ctx, xyRatios); - elGraph.push(bar.draw(columnSeries.series, columnSeries.i)); - } - } - - if (lineSeries.series.length > 0) { - elGraph.push(line.draw(lineSeries.series, 'line', lineSeries.i)); - } - - if (candlestickSeries.series.length > 0) { - elGraph.push(candlestick.draw(candlestickSeries.series, candlestickSeries.i)); - } - - if (scatterSeries.series.length > 0) { - var scatterLine = new Line(this.ctx, xyRatios, true); - elGraph.push(scatterLine.draw(scatterSeries.series, 'scatter', scatterSeries.i)); - } // TODO: allow bubble series in a combo chart - // if (bubbleSeries.series.length > 0) { - // const bubbleLine = new Line(this.ctx, xyRatios, true) - // elGraph.push( - // bubbleLine.draw(bubbleSeries.series, 'bubble', bubbleSeries.i) - // ) - // } - - } else { - switch (cnf.chart.type) { - case 'line': - elGraph = line.draw(gl.series, 'line'); - break; - - case 'area': - elGraph = line.draw(gl.series, 'area'); - break; - - case 'bar': - if (cnf.chart.stacked) { - var _barStacked = new BarStacked(this.ctx, xyRatios); - - elGraph = _barStacked.draw(gl.series); - } else { - var _bar = new Bar(this.ctx, xyRatios); - - elGraph = _bar.draw(gl.series); - } - - break; - - case 'candlestick': - var candleStick = new CandleStick(this.ctx, xyRatios); - elGraph = candleStick.draw(gl.series); - break; - - case 'rangeBar': - elGraph = rangeBar.draw(gl.series); - break; - - case 'heatmap': - var heatmap = new HeatMap(this.ctx, xyRatios); - elGraph = heatmap.draw(gl.series); - break; - - case 'pie': - case 'donut': - elGraph = pie.draw(gl.series); - break; - - case 'radialBar': - elGraph = radialBar.draw(gl.series); - break; - - case 'radar': - elGraph = radar.draw(gl.series); - break; - - default: - elGraph = line.draw(gl.series); - } - } - - return elGraph; - } - }, { - key: "setSVGDimensions", - value: function setSVGDimensions() { - var gl = this.w.globals; - var cnf = this.w.config; - gl.svgWidth = cnf.chart.width; - gl.svgHeight = cnf.chart.height; - var elDim = Utils.getDimensions(this.el); - var widthUnit = cnf.chart.width.toString().split(/[0-9]+/g).pop(); - - if (widthUnit === '%') { - if (Utils.isNumber(elDim[0])) { - if (elDim[0].width === 0) { - elDim = Utils.getDimensions(this.el.parentNode); - } - - gl.svgWidth = elDim[0] * parseInt(cnf.chart.width) / 100; - } - } else if (widthUnit === 'px' || widthUnit === '') { - gl.svgWidth = parseInt(cnf.chart.width); - } - - if (gl.svgHeight !== 'auto' && gl.svgHeight !== '') { - var heightUnit = cnf.chart.height.toString().split(/[0-9]+/g).pop(); - - if (heightUnit === '%') { - var elParentDim = Utils.getDimensions(this.el.parentNode); - gl.svgHeight = elParentDim[1] * parseInt(cnf.chart.height) / 100; - } else { - gl.svgHeight = parseInt(cnf.chart.height); - } - } else { - if (gl.axisCharts) { - gl.svgHeight = gl.svgWidth / 1.61; - } else { - gl.svgHeight = gl.svgWidth; - } - } - - Graphics.setAttrs(gl.dom.Paper.node, { - width: gl.svgWidth, - height: gl.svgHeight - }); // gl.dom.Paper.node.parentNode.parentNode.style.minWidth = gl.svgWidth + "px"; - - var offsetY = cnf.chart.sparkline.enabled ? 0 : gl.axisCharts ? cnf.chart.parentHeightOffset : 0; - gl.dom.Paper.node.parentNode.parentNode.style.minHeight = gl.svgHeight + offsetY + 'px'; - gl.dom.elWrap.style.width = gl.svgWidth + 'px'; - gl.dom.elWrap.style.height = gl.svgHeight + 'px'; - } - }, { - key: "shiftGraphPosition", - value: function shiftGraphPosition() { - var gl = this.w.globals; - var tY = gl.translateY; - var tX = gl.translateX; - var scalingAttrs = { - transform: 'translate(' + tX + ', ' + tY + ')' - }; - Graphics.setAttrs(gl.dom.elGraphical.node, scalingAttrs); - } - /* - ** All the calculations for setting range in charts will be done here - */ - - }, { - key: "coreCalculations", - value: function coreCalculations() { - var range = new Range$1(this.ctx); - range.init(); - } - }, { - key: "resetGlobals", - value: function resetGlobals() { - var _this = this; - - var gl = this.w.globals; - gl.series = []; - gl.seriesCandleO = []; - gl.seriesCandleH = []; - gl.seriesCandleL = []; - gl.seriesCandleC = []; - gl.seriesRangeStart = []; - gl.seriesRangeEnd = []; - gl.seriesPercent = []; - gl.seriesX = []; - gl.seriesZ = []; - gl.seriesNames = []; - gl.seriesTotals = []; - gl.stackedSeriesTotals = []; - gl.labels = []; - gl.timelineLabels = []; - gl.noLabelsProvided = false; - gl.timescaleTicks = []; - gl.resizeTimer = null; - gl.selectionResizeTimer = null; - - gl.seriesXvalues = function () { - return _this.w.config.series.map(function (s) { - return []; - }); - }(); - - gl.seriesYvalues = function () { - return _this.w.config.series.map(function (s) { - return []; - }); - }(); - - gl.delayedElements = []; - gl.pointsArray = []; - gl.dataLabelsRects = []; - gl.isXNumeric = false; - gl.isDataXYZ = false; - gl.maxY = -Number.MAX_VALUE; - gl.minY = Number.MIN_VALUE; - gl.minYArr = []; - gl.maxYArr = []; - gl.maxX = -Number.MAX_VALUE; - gl.minX = Number.MAX_VALUE; - gl.initialmaxX = -Number.MAX_VALUE; - gl.initialminX = Number.MAX_VALUE; - gl.maxDate = 0; - gl.minDate = Number.MAX_VALUE; - gl.minZ = Number.MAX_VALUE; - gl.maxZ = -Number.MAX_VALUE; - gl.minXDiff = Number.MAX_VALUE; - gl.yAxisScale = []; - gl.xAxisScale = null; - gl.xAxisTicksPositions = []; - gl.yLabelsCoords = []; - gl.yTitleCoords = []; - gl.xRange = 0; - gl.yRange = []; - gl.zRange = 0; - gl.dataPoints = 0; - } - }, { - key: "isMultipleY", - value: function isMultipleY() { - // user has supplied an array in yaxis property. So, turn on multipleYAxis flag - if (this.w.config.yaxis.constructor === Array && this.w.config.yaxis.length > 1) { - // first, turn off stacking if multiple y axis - this.w.config.chart.stacked = false; - this.w.globals.isMultipleYAxis = true; - return true; - } - } - }, { - key: "excludeCollapsedSeriesInYAxis", - value: function excludeCollapsedSeriesInYAxis() { - var _this2 = this; - - var w = this.w; - w.globals.ignoreYAxisIndexes = w.globals.collapsedSeries.map(function (collapsed, i) { - if (_this2.w.globals.isMultipleYAxis) { - return collapsed.index; - } - }); - } - }, { - key: "isMultiFormat", - value: function isMultiFormat() { - return this.isFormatXY() || this.isFormat2DArray(); - } // given format is [{x, y}, {x, y}] - - }, { - key: "isFormatXY", - value: function isFormatXY() { - var series = this.w.config.series.slice(); - var sr = new Series(this.ctx); - this.activeSeriesIndex = sr.getActiveConfigSeriesIndex(); - - if (typeof series[this.activeSeriesIndex].data !== 'undefined' && series[this.activeSeriesIndex].data.length > 0 && series[this.activeSeriesIndex].data[0] !== null && typeof series[this.activeSeriesIndex].data[0].x !== 'undefined' && series[this.activeSeriesIndex].data[0] !== null) { - return true; - } - } // given format is [[x, y], [x, y]] - - }, { - key: "isFormat2DArray", - value: function isFormat2DArray() { - var series = this.w.config.series.slice(); - var sr = new Series(this.ctx); - this.activeSeriesIndex = sr.getActiveConfigSeriesIndex(); - - if (typeof series[this.activeSeriesIndex].data !== 'undefined' && series[this.activeSeriesIndex].data.length > 0 && typeof series[this.activeSeriesIndex].data[0] !== 'undefined' && series[this.activeSeriesIndex].data[0] !== null && series[this.activeSeriesIndex].data[0].constructor === Array) { - return true; - } - } - }, { - key: "handleFormat2DArray", - value: function handleFormat2DArray(ser, i) { - var cnf = this.w.config; - var gl = this.w.globals; - - for (var j = 0; j < ser[i].data.length; j++) { - if (typeof ser[i].data[j][1] !== 'undefined') { - if (Array.isArray(ser[i].data[j][1]) && ser[i].data[j][1].length === 4) { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][1][3])); - } else { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][1])); - } - - gl.dataFormatXNumeric = true; - } - - if (cnf.xaxis.type === 'datetime') { - // if timestamps are provided and xaxis type is datettime, - var ts = new Date(ser[i].data[j][0]); - ts = new Date(ts).getTime(); - this.twoDSeriesX.push(ts); - } else { - this.twoDSeriesX.push(ser[i].data[j][0]); - } - } - - for (var _j = 0; _j < ser[i].data.length; _j++) { - if (typeof ser[i].data[_j][2] !== 'undefined') { - this.threeDSeries.push(ser[i].data[_j][2]); - gl.isDataXYZ = true; - } - } - } - }, { - key: "handleFormatXY", - value: function handleFormatXY(ser, i) { - var cnf = this.w.config; - var gl = this.w.globals; - var dt = new DateTime(this.ctx); - var activeI = i; - - if (gl.collapsedSeriesIndices.indexOf(i) > -1) { - // fix #368 - activeI = this.activeSeriesIndex; - } // get series - - - for (var j = 0; j < ser[i].data.length; j++) { - if (typeof ser[i].data[j].y !== 'undefined') { - if (Array.isArray(ser[i].data[j].y)) { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y[ser[i].data[j].y.length - 1])); - } else { - this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y)); - } - } - } // get seriesX - - - for (var _j2 = 0; _j2 < ser[activeI].data.length; _j2++) { - var isXString = typeof ser[activeI].data[_j2].x === 'string'; - var isXDate = !!dt.isValidDate(ser[activeI].data[_j2].x.toString()); - - if (isXString || isXDate) { - // user supplied '01/01/2017' or a date string (a JS date object is not supported) - if (isXString) { - if (cnf.xaxis.type === 'datetime' && !gl.isRangeData) { - this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x)); - } else { - // a category and not a numeric x value - this.fallbackToCategory = true; - this.twoDSeriesX.push(ser[activeI].data[_j2].x); - } - } else { - if (cnf.xaxis.type === 'datetime') { - this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x.toString())); - } else { - gl.dataFormatXNumeric = true; - gl.isXNumeric = true; - this.twoDSeriesX.push(parseFloat(ser[activeI].data[_j2].x)); - } - } - } else { - // a numeric value in x property - gl.isXNumeric = true; - gl.dataFormatXNumeric = true; - this.twoDSeriesX.push(ser[activeI].data[_j2].x); - } - } - - if (ser[i].data[0] && typeof ser[i].data[0].z !== 'undefined') { - for (var t = 0; t < ser[i].data.length; t++) { - this.threeDSeries.push(ser[i].data[t].z); - } - - gl.isDataXYZ = true; - } - } - }, { - key: "handleRangeData", - value: function handleRangeData(ser, i) { - var gl = this.w.globals; - var range = {}; - - if (this.isFormat2DArray()) { - range = this.handleRangeDataFormat('array', ser, i); - } else if (this.isFormatXY()) { - range = this.handleRangeDataFormat('xy', ser, i); - } - - gl.seriesRangeStart.push(range.start); - gl.seriesRangeEnd.push(range.end); - return range; - } - }, { - key: "handleCandleStickData", - value: function handleCandleStickData(ser, i) { - var gl = this.w.globals; - var ohlc = {}; - - if (this.isFormat2DArray()) { - ohlc = this.handleCandleStickDataFormat('array', ser, i); - } else if (this.isFormatXY()) { - ohlc = this.handleCandleStickDataFormat('xy', ser, i); - } - - gl.seriesCandleO.push(ohlc.o); - gl.seriesCandleH.push(ohlc.h); - gl.seriesCandleL.push(ohlc.l); - gl.seriesCandleC.push(ohlc.c); - return ohlc; - } - }, { - key: "handleRangeDataFormat", - value: function handleRangeDataFormat(format, ser, i) { - var rangeStart = []; - var rangeEnd = []; - var err = 'Please provide [Start, End] values in valid format. Read more https://apexcharts.com/docs/series/#rangecharts'; - var serObj = new Series(this.ctx); - var activeIndex = serObj.getActiveConfigSeriesIndex(); - - if (format === 'array') { - if (ser[activeIndex].data[0][1].length !== 2) { - throw new Error(err); - } - - for (var j = 0; j < ser[i].data.length; j++) { - rangeStart.push(ser[i].data[j][1][0]); - rangeEnd.push(ser[i].data[j][1][1]); - } - } else if (format === 'xy') { - if (ser[activeIndex].data[0].y.length !== 2) { - throw new Error(err); - } - - for (var _j3 = 0; _j3 < ser[i].data.length; _j3++) { - rangeStart.push(ser[i].data[_j3].y[0]); - rangeEnd.push(ser[i].data[_j3].y[1]); - } - } - - return { - start: rangeStart, - end: rangeEnd - }; - } - }, { - key: "handleCandleStickDataFormat", - value: function handleCandleStickDataFormat(format, ser, i) { - var serO = []; - var serH = []; - var serL = []; - var serC = []; - var err = 'Please provide [Open, High, Low and Close] values in valid format. Read more https://apexcharts.com/docs/series/#candlestick'; - - if (format === 'array') { - if (ser[i].data[0][1].length !== 4) { - throw new Error(err); - } - - for (var j = 0; j < ser[i].data.length; j++) { - serO.push(ser[i].data[j][1][0]); - serH.push(ser[i].data[j][1][1]); - serL.push(ser[i].data[j][1][2]); - serC.push(ser[i].data[j][1][3]); - } - } else if (format === 'xy') { - if (ser[i].data[0].y.length !== 4) { - throw new Error(err); - } - - for (var _j4 = 0; _j4 < ser[i].data.length; _j4++) { - serO.push(ser[i].data[_j4].y[0]); - serH.push(ser[i].data[_j4].y[1]); - serL.push(ser[i].data[_j4].y[2]); - serC.push(ser[i].data[_j4].y[3]); - } - } - - return { - o: serO, - h: serH, - l: serL, - c: serC - }; - } - }, { - key: "parseDataAxisCharts", - value: function parseDataAxisCharts(ser) { - var ctx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.ctx; - var cnf = this.w.config; - var gl = this.w.globals; - var dt = new DateTime(ctx); - - for (var i = 0; i < ser.length; i++) { - this.twoDSeries = []; - this.twoDSeriesX = []; - this.threeDSeries = []; - - if (typeof ser[i].data === 'undefined') { - console.error("It is a possibility that you may have not included 'data' property in series."); - return; - } - - if (cnf.chart.type === 'rangeBar' || cnf.chart.type === 'rangeArea' || ser[i].type === 'rangeBar' || ser[i].type === 'rangeArea') { - gl.isRangeData = true; - this.handleRangeData(ser, i); - } - - if (this.isMultiFormat()) { - if (this.isFormat2DArray()) { - this.handleFormat2DArray(ser, i); - } else if (this.isFormatXY()) { - this.handleFormatXY(ser, i); - } - - if (cnf.chart.type === 'candlestick' || ser[i].type === 'candlestick') { - this.handleCandleStickData(ser, i); - } - - gl.series.push(this.twoDSeries); - gl.labels.push(this.twoDSeriesX); - gl.seriesX.push(this.twoDSeriesX); - - if (!this.fallbackToCategory) { - gl.isXNumeric = true; - } - } else { - if (cnf.xaxis.type === 'datetime') { - // user didn't supplied [{x,y}] or [[x,y]], but single array in data. - // Also labels/categories were supplied differently - gl.isXNumeric = true; - var dates = cnf.labels.length > 0 ? cnf.labels.slice() : cnf.xaxis.categories.slice(); - - for (var j = 0; j < dates.length; j++) { - if (typeof dates[j] === 'string') { - var isDate = dt.isValidDate(dates[j]); - - if (isDate) { - this.twoDSeriesX.push(dt.parseDate(dates[j])); - } else { - throw new Error('You have provided invalid Date format. Please provide a valid JavaScript Date'); - } - } - } - - gl.seriesX.push(this.twoDSeriesX); - } else if (cnf.xaxis.type === 'numeric') { - gl.isXNumeric = true; - var x = cnf.labels.length > 0 ? cnf.labels.slice() : cnf.xaxis.categories.slice(); - - if (x.length > 0) { - this.twoDSeriesX = x; - gl.seriesX.push(this.twoDSeriesX); - } - } - - gl.labels.push(this.twoDSeriesX); - var singleArray = ser[i].data.map(function (d) { - return Utils.parseNumber(d); - }); - gl.series.push(singleArray); - } - - gl.seriesZ.push(this.threeDSeries); - - if (ser[i].name !== undefined) { - gl.seriesNames.push(ser[i].name); - } else { - gl.seriesNames.push('series-' + parseInt(i + 1)); - } - } - - return this.w; - } - }, { - key: "parseDataNonAxisCharts", - value: function parseDataNonAxisCharts(ser) { - var gl = this.w.globals; - var cnf = this.w.config; - gl.series = ser.slice(); - gl.seriesNames = cnf.labels.slice(); - - for (var i = 0; i < gl.series.length; i++) { - if (gl.seriesNames[i] === undefined) { - gl.seriesNames.push('series-' + (i + 1)); - } - } - - return this.w; - } - /** User possibly set string categories in xaxis.categories or labels prop - * Or didn't set xaxis labels at all - in which case we manually do it. - * If user passed series data as [[3, 2], [4, 5]] or [{ x: 3, y: 55 }], - * this shouldn't be called - * @param {array} ser - the series which user passed to the config - */ - - }, { - key: "handleExternalLabelsData", - value: function handleExternalLabelsData(ser) { - var cnf = this.w.config; - var gl = this.w.globals; - - if (cnf.xaxis.categories.length > 0) { - // user provided labels in xaxis.category prop - gl.labels = cnf.xaxis.categories; - } else if (cnf.labels.length > 0) { - // user provided labels in labels props - gl.labels = cnf.labels.slice(); - } else if (this.fallbackToCategory) { - // user provided labels in x prop in [{ x: 3, y: 55 }] data, and those labels are already stored in gl.labels[0], so just re-arrange the gl.labels array - gl.labels = gl.labels[0]; - } else { - // user didn't provided any labels, fallback to 1-2-3-4-5 - var labelArr = []; - - if (gl.axisCharts) { - // for axis charts, we get the longest series and create labels from it - for (var i = 0; i < gl.series[gl.maxValsInArrayIndex].length; i++) { - labelArr.push(i + 1); - } // create gl.seriesX as it will be used in calculations of x positions - - - for (var _i = 0; _i < ser.length; _i++) { - gl.seriesX.push(labelArr); - } // turn on the isXNumeric flag to allow minX and maxX to function properly - - - gl.isXNumeric = true; - } // no series to pull labels from, put a 0-10 series - // possibly, user collapsed all series. Hence we can't work with above calc - - - if (labelArr.length === 0) { - labelArr = [0, 10]; - - for (var _i2 = 0; _i2 < ser.length; _i2++) { - gl.seriesX.push(labelArr); - } - } // Finally, pass the labelArr in gl.labels which will be printed on x-axis - - - gl.labels = labelArr; // Turn on this global flag to indicate no labels were provided by user - - gl.noLabelsProvided = true; - } - } // Segregate user provided data into appropriate vars - - }, { - key: "parseData", - value: function parseData(ser) { - var w = this.w; - var cnf = w.config; - var gl = w.globals; - this.excludeCollapsedSeriesInYAxis(); // If we detected string in X prop of series, we fallback to category x-axis - - this.fallbackToCategory = false; - this.resetGlobals(); - this.isMultipleY(); - - if (gl.axisCharts) { - // axisCharts includes line / area / column / scatter - this.parseDataAxisCharts(ser); - } else { - // non-axis charts are pie / donut - this.parseDataNonAxisCharts(ser); - } - - this.coreUtils.getLargestSeries(); // set Null values to 0 in all series when user hides/shows some series - - if (cnf.chart.type === 'bar' && cnf.chart.stacked) { - var series = new Series(this.ctx); - gl.series = series.setNullSeriesToZeroValues(gl.series); - } - - this.coreUtils.getSeriesTotals(); - - if (gl.axisCharts) { - this.coreUtils.getStackedSeriesTotals(); - } - - this.coreUtils.getPercentSeries(); - - if (!gl.dataFormatXNumeric && (!gl.isXNumeric || cnf.xaxis.type === 'numeric' && cnf.labels.length === 0 && cnf.xaxis.categories.length === 0)) { - // x-axis labels couldn't be detected; hence try searching every option in config - this.handleExternalLabelsData(ser); - } - } - }, { - key: "xySettings", - value: function xySettings() { - var xyRatios = null; - var w = this.w; - - if (w.globals.axisCharts) { - if (w.config.xaxis.crosshairs.position === 'back') { - var crosshairs = new Crosshairs(this.ctx); - crosshairs.drawXCrosshairs(); - } - - if (w.config.yaxis[0].crosshairs.position === 'back') { - var _crosshairs = new Crosshairs(this.ctx); - - _crosshairs.drawYCrosshairs(); - } - - xyRatios = this.coreUtils.getCalculatedRatios(); - - if (w.config.xaxis.type === 'datetime' && w.config.xaxis.labels.formatter === undefined) { - var ts = new TimeScale(this.ctx); - var formattedTimeScale; - - if (isFinite(w.globals.minX) && isFinite(w.globals.maxX) && !w.globals.isBarHorizontal) { - formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minX, w.globals.maxX); - ts.recalcDimensionsBasedOnFormat(formattedTimeScale, false); - } else if (w.globals.isBarHorizontal) { - formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minY, w.globals.maxY); - ts.recalcDimensionsBasedOnFormat(formattedTimeScale, true); - } - } - } - - return xyRatios; - } - }, { - key: "drawAxis", - value: function drawAxis(type, xyRatios) { - var gl = this.w.globals; - var cnf = this.w.config; - var xAxis = new XAxis(this.ctx); - var yAxis = new YAxis(this.ctx); - - if (gl.axisCharts && type !== 'radar') { - var elXaxis, elYaxis; - - if (gl.isBarHorizontal) { - elYaxis = yAxis.drawYaxisInversed(0); - elXaxis = xAxis.drawXaxisInversed(0); - gl.dom.elGraphical.add(elXaxis); - gl.dom.elGraphical.add(elYaxis); - } else { - elXaxis = xAxis.drawXaxis(); - gl.dom.elGraphical.add(elXaxis); - cnf.yaxis.map(function (yaxe, index) { - if (gl.ignoreYAxisIndexes.indexOf(index) === -1) { - elYaxis = yAxis.drawYaxis(index); - gl.dom.Paper.add(elYaxis); - } - }); - } - } - - cnf.yaxis.map(function (yaxe, index) { - if (gl.ignoreYAxisIndexes.indexOf(index) === -1) { - yAxis.yAxisTitleRotate(index, yaxe.opposite); - } - }); - } - }, { - key: "setupBrushHandler", - value: function setupBrushHandler() { - var _this3 = this; - - var w = this.w; // only for brush charts - - if (!w.config.chart.brush.enabled) { - return; - } // if user has not defined a custom function for selection - we handle the brush chart - // otherwise we leave it to the user to define the functionality for selection - - - if (typeof w.config.chart.events.selection !== 'function') { - var targets = w.config.chart.brush.targets || [w.config.chart.brush.target]; // retro compatibility with single target option - - targets.forEach(function (target) { - var targetChart = ApexCharts.getChartByID(target); - targetChart.w.globals.brushSource = _this3.ctx; - - var updateSourceChart = function updateSourceChart() { - _this3.ctx._updateOptions({ - chart: { - selection: { - xaxis: { - min: targetChart.w.globals.minX, - max: targetChart.w.globals.maxX - } - } - } - }, false, false); - }; - - if (typeof targetChart.w.config.chart.events.zoomed !== 'function') { - targetChart.w.config.chart.events.zoomed = function () { - updateSourceChart(); - }; - } - - if (typeof targetChart.w.config.chart.events.scrolled !== 'function') { - targetChart.w.config.chart.events.scrolled = function () { - updateSourceChart(); - }; - } - - w.config.chart.events.selection = function (chart, e) { - var yaxis = Utils.clone(w.config.yaxis); - - if (w.config.chart.brush.autoScaleYaxis) { - var scale = new Range(targetChart); - yaxis = scale.autoScaleY(targetChart, e); - } - - targetChart._updateOptions({ - xaxis: { - min: e.xaxis.min, - max: e.xaxis.max - }, - yaxis: yaxis - }, false, false, false); - }; - }); - } - } - }]); - - return Core; - }(); - - /** - * @this {Promise} - */ - function finallyConstructor(callback) { - var constructor = this.constructor; - return this.then( - function(value) { - return constructor.resolve(callback()).then(function() { - return value; - }); - }, - function(reason) { - return constructor.resolve(callback()).then(function() { - return constructor.reject(reason); - }); - } - ); - } - - // Store setTimeout reference so promise-polyfill will be unaffected by - // other code modifying setTimeout (like sinon.useFakeTimers()) - var setTimeoutFunc = setTimeout; - - function noop() {} - - // Polyfill for Function.prototype.bind - function bind(fn, thisArg) { - return function() { - fn.apply(thisArg, arguments); - }; - } - - /** - * @constructor - * @param {Function} fn - */ - function Promise$1(fn) { - if (!(this instanceof Promise$1)) - throw new TypeError('Promises must be constructed via new'); - if (typeof fn !== 'function') throw new TypeError('not a function'); - /** @type {!number} */ - this._state = 0; - /** @type {!boolean} */ - this._handled = false; - /** @type {Promise|undefined} */ - this._value = undefined; - /** @type {!Array} */ - this._deferreds = []; - - doResolve(fn, this); - } - - function handle(self, deferred) { - while (self._state === 3) { - self = self._value; - } - if (self._state === 0) { - self._deferreds.push(deferred); - return; - } - self._handled = true; - Promise$1._immediateFn(function() { - var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected; - if (cb === null) { - (self._state === 1 ? resolve : reject)(deferred.promise, self._value); - return; - } - var ret; - try { - ret = cb(self._value); - } catch (e) { - reject(deferred.promise, e); - return; - } - resolve(deferred.promise, ret); - }); - } - - function resolve(self, newValue) { - try { - // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure - if (newValue === self) - throw new TypeError('A promise cannot be resolved with itself.'); - if ( - newValue && - (typeof newValue === 'object' || typeof newValue === 'function') - ) { - var then = newValue.then; - if (newValue instanceof Promise$1) { - self._state = 3; - self._value = newValue; - finale(self); - return; - } else if (typeof then === 'function') { - doResolve(bind(then, newValue), self); - return; - } - } - self._state = 1; - self._value = newValue; - finale(self); - } catch (e) { - reject(self, e); - } - } - - function reject(self, newValue) { - self._state = 2; - self._value = newValue; - finale(self); - } - - function finale(self) { - if (self._state === 2 && self._deferreds.length === 0) { - Promise$1._immediateFn(function() { - if (!self._handled) { - Promise$1._unhandledRejectionFn(self._value); - } - }); - } - - for (var i = 0, len = self._deferreds.length; i < len; i++) { - handle(self, self._deferreds[i]); - } - self._deferreds = null; - } - - /** - * @constructor - */ - function Handler(onFulfilled, onRejected, promise) { - this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; - this.onRejected = typeof onRejected === 'function' ? onRejected : null; - this.promise = promise; - } - - /** - * Take a potentially misbehaving resolver function and make sure - * onFulfilled and onRejected are only called once. - * - * Makes no guarantees about asynchrony. - */ - function doResolve(fn, self) { - var done = false; - try { - fn( - function(value) { - if (done) return; - done = true; - resolve(self, value); - }, - function(reason) { - if (done) return; - done = true; - reject(self, reason); - } - ); - } catch (ex) { - if (done) return; - done = true; - reject(self, ex); - } - } - - Promise$1.prototype['catch'] = function(onRejected) { - return this.then(null, onRejected); - }; - - Promise$1.prototype.then = function(onFulfilled, onRejected) { - // @ts-ignore - var prom = new this.constructor(noop); - - handle(this, new Handler(onFulfilled, onRejected, prom)); - return prom; - }; - - Promise$1.prototype['finally'] = finallyConstructor; - - Promise$1.all = function(arr) { - return new Promise$1(function(resolve, reject) { - if (!arr || typeof arr.length === 'undefined') - throw new TypeError('Promise.all accepts an array'); - var args = Array.prototype.slice.call(arr); - if (args.length === 0) return resolve([]); - var remaining = args.length; - - function res(i, val) { - try { - if (val && (typeof val === 'object' || typeof val === 'function')) { - var then = val.then; - if (typeof then === 'function') { - then.call( - val, - function(val) { - res(i, val); - }, - reject - ); - return; - } - } - args[i] = val; - if (--remaining === 0) { - resolve(args); - } - } catch (ex) { - reject(ex); - } - } - - for (var i = 0; i < args.length; i++) { - res(i, args[i]); - } - }); - }; - - Promise$1.resolve = function(value) { - if (value && typeof value === 'object' && value.constructor === Promise$1) { - return value; - } - - return new Promise$1(function(resolve) { - resolve(value); - }); - }; - - Promise$1.reject = function(value) { - return new Promise$1(function(resolve, reject) { - reject(value); - }); - }; - - Promise$1.race = function(values) { - return new Promise$1(function(resolve, reject) { - for (var i = 0, len = values.length; i < len; i++) { - values[i].then(resolve, reject); - } - }); - }; - - // Use polyfill for setImmediate for performance gains - Promise$1._immediateFn = - (typeof setImmediate === 'function' && - function(fn) { - setImmediate(fn); - }) || - function(fn) { - setTimeoutFunc(fn, 0); - }; - - Promise$1._unhandledRejectionFn = function _unhandledRejectionFn(err) { - if (typeof console !== 'undefined' && console) { - console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console - } - }; - - var Exports = - /*#__PURE__*/ - function () { - function Exports(ctx) { - _classCallCheck(this, Exports); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(Exports, [{ - key: "getSvgString", - value: function getSvgString() { - return this.w.globals.dom.Paper.svg(); - } - }, { - key: "cleanup", - value: function cleanup() { - var w = this.w; // hide some elements to avoid printing them on exported svg - - var xcrosshairs = w.globals.dom.baseEl.querySelector('.apexcharts-xcrosshairs'); - var ycrosshairs = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs'); - - if (xcrosshairs) { - xcrosshairs.setAttribute('x', -500); - } - - if (ycrosshairs) { - ycrosshairs.setAttribute('y1', -100); - ycrosshairs.setAttribute('y2', -100); - } - } - }, { - key: "svgUrl", - value: function svgUrl() { - this.cleanup(); - var svgData = this.getSvgString(); - var svgBlob = new Blob([svgData], { - type: 'image/svg+xml;charset=utf-8' - }); - return URL.createObjectURL(svgBlob); - } - }, { - key: "dataURI", - value: function dataURI() { - var _this = this; - - return new Promise$1(function (resolve) { - var w = _this.w; - - _this.cleanup(); - - var canvas = document.createElement('canvas'); - canvas.width = w.globals.svgWidth; - canvas.height = w.globals.svgHeight; - var canvasBg = w.config.chart.background === 'transparent' ? '#fff' : w.config.chart.background; - var ctx = canvas.getContext('2d'); - ctx.fillStyle = canvasBg; - ctx.fillRect(0, 0, canvas.width, canvas.height); - var DOMURL = window.URL || window.webkitURL || window; - var img = new Image(); - img.crossOrigin = 'anonymous'; - - var svgData = _this.getSvgString(); - - var svgUrl = 'data:image/svg+xml,' + encodeURIComponent(svgData); - - img.onload = function () { - ctx.drawImage(img, 0, 0); - DOMURL.revokeObjectURL(svgUrl); - var imgURI = canvas.toDataURL('image/png'); - resolve(imgURI); - }; - - img.src = svgUrl; - }); - } - }, { - key: "exportToSVG", - value: function exportToSVG() { - this.triggerDownload(this.svgUrl(), '.svg'); - } - }, { - key: "exportToPng", - value: function exportToPng() { - var _this2 = this; - - this.dataURI().then(function (imgURI) { - _this2.triggerDownload(imgURI, '.png'); - }); - } - }, { - key: "triggerDownload", - value: function triggerDownload(href, ext) { - var downloadLink = document.createElement('a'); - downloadLink.href = href; - downloadLink.download = this.w.globals.chartID + ext; - document.body.appendChild(downloadLink); - downloadLink.click(); - document.body.removeChild(downloadLink); - } - }]); - - return Exports; - }(); - - /** - * ApexCharts Grid Class for drawing Cartesian Grid. - * - * @module Grid - **/ - - var Grid = - /*#__PURE__*/ - function () { - function Grid(ctx) { - _classCallCheck(this, Grid); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.anim = new Animations(this.ctx); - this.xaxisLabels = w.globals.labels.slice(); - this.animX = w.config.grid.xaxis.lines.animate && w.config.chart.animations.enabled; - this.animY = w.config.grid.yaxis.lines.animate && w.config.chart.animations.enabled; - - if (w.globals.timelineLabels.length > 0) { - // timeline labels are there - this.xaxisLabels = w.globals.timelineLabels.slice(); - } - } // .when using sparklines or when showing no grid, we need to have a grid area which is reused at many places for other calculations as well - - - _createClass(Grid, [{ - key: "drawGridArea", - value: function drawGridArea() { - var elGrid = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var w = this.w; - var graphics = new Graphics(this.ctx); - - if (elGrid === null) { - elGrid = graphics.group({ - class: 'apexcharts-grid' - }); - } - - var elVerticalLine = graphics.drawLine(w.globals.padHorizontal, 1, w.globals.padHorizontal, w.globals.gridHeight, 'transparent'); - var elHorzLine = graphics.drawLine(w.globals.padHorizontal, w.globals.gridHeight, w.globals.gridWidth, w.globals.gridHeight, 'transparent'); - elGrid.add(elHorzLine); - elGrid.add(elVerticalLine); - return elGrid; - } - }, { - key: "drawGrid", - value: function drawGrid() { - var w = this.w; - var xAxis = new XAxis(this.ctx); - var yaxis = new YAxis(this.ctx); - var gl = this.w.globals; - var elgrid = null; - - if (gl.axisCharts) { - if (w.config.grid.show) { - // grid is drawn after xaxis and yaxis are drawn - elgrid = this.renderGrid(); - gl.dom.elGraphical.add(elgrid.el); - this.drawGridArea(elgrid.el); - } else { - var elgridArea = this.drawGridArea(); - gl.dom.elGraphical.add(elgridArea); - } - - if (elgrid !== null) { - xAxis.xAxisLabelCorrections(elgrid.xAxisTickWidth); - } - - yaxis.setYAxisTextAlignments(); - } - } // This mask will clip off overflowing graphics from the drawable area - - }, { - key: "createGridMask", - value: function createGridMask() { - var w = this.w; - var gl = w.globals; - var graphics = new Graphics(this.ctx); - var strokeSize = Array.isArray(w.config.stroke.width) ? 0 : w.config.stroke.width; - - if (Array.isArray(w.config.stroke.width)) { - var strokeMaxSize = 0; - w.config.stroke.width.forEach(function (m) { - strokeMaxSize = Math.max(strokeMaxSize, m); - }); - strokeSize = strokeMaxSize; - } - - gl.dom.elGridRectMask = document.createElementNS(gl.SVGNS, 'clipPath'); - gl.dom.elGridRectMask.setAttribute('id', "gridRectMask".concat(gl.cuid)); - gl.dom.elGridRectMarkerMask = document.createElementNS(gl.SVGNS, 'clipPath'); - gl.dom.elGridRectMarkerMask.setAttribute('id', "gridRectMarkerMask".concat(gl.cuid)); - gl.dom.elGridRect = graphics.drawRect(-strokeSize / 2, -strokeSize / 2, gl.gridWidth + strokeSize, gl.gridHeight + strokeSize, 0, '#fff'); - var coreUtils = new CoreUtils(this); - coreUtils.getLargestMarkerSize(); - var markerSize = w.globals.markers.largestSize + 1; - gl.dom.elGridRectMarker = graphics.drawRect(-markerSize, -markerSize, gl.gridWidth + markerSize * 2, gl.gridHeight + markerSize * 2, 0, '#fff'); - gl.dom.elGridRectMask.appendChild(gl.dom.elGridRect.node); - gl.dom.elGridRectMarkerMask.appendChild(gl.dom.elGridRectMarker.node); - var defs = gl.dom.baseEl.querySelector('defs'); - defs.appendChild(gl.dom.elGridRectMask); - defs.appendChild(gl.dom.elGridRectMarkerMask); - } // actual grid rendering - - }, { - key: "renderGrid", - value: function renderGrid() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var strokeDashArray = w.config.grid.strokeDashArray; - var elg = graphics.group({ - class: 'apexcharts-grid' - }); - var elgridLinesH = graphics.group({ - class: 'apexcharts-gridlines-horizontal' - }); - var elgridLinesV = graphics.group({ - class: 'apexcharts-gridlines-vertical' - }); - elg.add(elgridLinesH); - elg.add(elgridLinesV); - var tickAmount = 8; - - for (var i = 0; i < w.globals.series.length; i++) { - if (typeof w.globals.yAxisScale[i] !== 'undefined') { - tickAmount = w.globals.yAxisScale[i].result.length - 1; - } - - if (tickAmount > 2) break; - } - - var xCount; - - if (!w.globals.isBarHorizontal) { - xCount = this.xaxisLabels.length; // draw vertical lines - - if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) { - var x1 = w.globals.padHorizontal; - var y1 = 0; - var x2; - var y2 = w.globals.gridHeight; - - if (w.globals.timelineLabels.length > 0) { - for (var _i = 0; _i < xCount; _i++) { - x1 = this.xaxisLabels[_i].position; - x2 = this.xaxisLabels[_i].position; - - if (w.config.grid.xaxis.lines.show && x1 > 0 && x1 < w.globals.gridWidth) { - var line = graphics.drawLine(x1, y1, x2, y2, w.config.grid.borderColor, strokeDashArray); - line.node.classList.add('apexcharts-gridline'); - elgridLinesV.add(line); - - if (this.animX) { - this.animateLine(line, { - x1: 0, - x2: 0 - }, { - x1: x1, - x2: x2 - }); - } - } - - var xAxis = new XAxis(this.ctx); - - if (_i === xCount - 1) { - if (!w.globals.skipLastTimelinelabel) { - // skip drawing last label here - xAxis.drawXaxisTicks(x1, elg); - } - } else { - xAxis.drawXaxisTicks(x1, elg); - } - } - } else { - var xCountForCategoryCharts = xCount; - - for (var _i2 = 0; _i2 < xCountForCategoryCharts; _i2++) { - var x1Count = xCountForCategoryCharts; - - if (w.globals.isXNumeric && w.config.chart.type !== 'bar') { - x1Count -= 1; - } - - x1 = x1 + w.globals.gridWidth / x1Count; - x2 = x1; // skip the last line - - if (_i2 === x1Count - 1) break; - - if (w.config.grid.xaxis.lines.show) { - var _line = graphics.drawLine(x1, y1, x2, y2, w.config.grid.borderColor, strokeDashArray); - - _line.node.classList.add('apexcharts-gridline'); - - elgridLinesV.add(_line); - - if (this.animX) { - this.animateLine(_line, { - x1: 0, - x2: 0 - }, { - x1: x1, - x2: x2 - }); - } - } - - var _xAxis = new XAxis(this.ctx); - - _xAxis.drawXaxisTicks(x1, elg); - } - } - } // draw horizontal lines - - - if (w.config.grid.yaxis.lines.show) { - var _x = 0; - var _y = 0; - var _y2 = 0; - var _x2 = w.globals.gridWidth; - - for (var _i3 = 0; _i3 < tickAmount + 1; _i3++) { - var _line2 = graphics.drawLine(_x, _y, _x2, _y2, w.config.grid.borderColor, strokeDashArray); - - elgridLinesH.add(_line2); - - _line2.node.classList.add('apexcharts-gridline'); - - if (this.animY) { - this.animateLine(_line2, { - y1: _y + 20, - y2: _y2 + 20 - }, { - y1: _y, - y2: _y2 - }); - } - - _y = _y + w.globals.gridHeight / tickAmount; - _y2 = _y; - } - } - } else { - xCount = tickAmount; // draw vertical lines - - if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) { - var _x3 = w.globals.padHorizontal; - var _y3 = 0; - - var _x4; - - var _y4 = w.globals.gridHeight; - - for (var _i4 = 0; _i4 < xCount + 1; _i4++) { - _x3 = _x3 + w.globals.gridWidth / xCount + 0.3; - _x4 = _x3; // skip the last vertical line - - if (_i4 === xCount - 1) break; - - if (w.config.grid.xaxis.lines.show) { - var _line3 = graphics.drawLine(_x3, _y3, _x4, _y4, w.config.grid.borderColor, strokeDashArray); - - _line3.node.classList.add('apexcharts-gridline'); - - elgridLinesV.add(_line3); - - if (this.animX) { - this.animateLine(_line3, { - x1: 0, - x2: 0 - }, { - x1: _x3, - x2: _x4 - }); - } - } // skip the first vertical line - - - var _xAxis2 = new XAxis(this.ctx); - - _xAxis2.drawXaxisTicks(_x3, elg); - } - } // draw horizontal lines - - - if (w.config.grid.yaxis.lines.show) { - var _x5 = 0; - var _y5 = 0; - var _y6 = 0; - var _x6 = w.globals.gridWidth; - - for (var _i5 = 0; _i5 < w.globals.dataPoints + 1; _i5++) { - var _line4 = graphics.drawLine(_x5, _y5, _x6, _y6, w.config.grid.borderColor, strokeDashArray); - - elgridLinesH.add(_line4); - - _line4.node.classList.add('apexcharts-gridline'); - - if (this.animY) { - this.animateLine(_line4, { - y1: _y5 + 20, - y2: _y6 + 20 - }, { - y1: _y5, - y2: _y6 - }); - } - - _y5 = _y5 + w.globals.gridHeight / w.globals.dataPoints; - _y6 = _y5; - } - } - } - - this.drawGridBands(elg, xCount, tickAmount); - return { - el: elg, - xAxisTickWidth: w.globals.gridWidth / xCount - }; - } - }, { - key: "drawGridBands", - value: function drawGridBands(elg, xCount, tickAmount) { - var w = this.w; - var graphics = new Graphics(this.ctx); // rows background bands - - if (w.config.grid.row.colors !== undefined && w.config.grid.row.colors.length > 0) { - var x1 = 0; - var y1 = 0; - var y2 = w.globals.gridHeight / tickAmount; - var x2 = w.globals.gridWidth; - - for (var i = 0, c = 0; i < tickAmount; i++, c++) { - if (c >= w.config.grid.row.colors.length) { - c = 0; - } - - var color = w.config.grid.row.colors[c]; - var rect = graphics.drawRect(x1, y1, x2, y2, 0, color, w.config.grid.row.opacity); - elg.add(rect); - rect.node.classList.add('apexcharts-gridRow'); - y1 = y1 + w.globals.gridHeight / tickAmount; - } - } // columns background bands - - - if (w.config.grid.column.colors !== undefined && w.config.grid.column.colors.length > 0) { - var _x7 = w.globals.padHorizontal; - var _y7 = 0; - - var _x8 = w.globals.padHorizontal + w.globals.gridWidth / xCount; - - var _y8 = w.globals.gridHeight; - - for (var _i6 = 0, _c = 0; _i6 < xCount; _i6++, _c++) { - if (_c >= w.config.grid.column.colors.length) { - _c = 0; - } - - var _color = w.config.grid.column.colors[_c]; - - var _rect = graphics.drawRect(_x7, _y7, _x8, _y8, 0, _color, w.config.grid.column.opacity); - - _rect.node.classList.add('apexcharts-gridColumn'); - - elg.add(_rect); - _x7 = _x7 + w.globals.gridWidth / xCount; - } - } - } - }, { - key: "animateLine", - value: function animateLine(line, from, to) { - var w = this.w; - var initialAnim = w.config.chart.animations; - - if (initialAnim && !w.globals.resized && !w.globals.dataChanged) { - var speed = initialAnim.speed; - this.anim.animateLine(line, from, to, speed); - } - } - }]); - - return Grid; - }(); - - /** - * ApexCharts Legend Class to draw legend. - * - * @module Legend - **/ - - var Legend = - /*#__PURE__*/ - function () { - function Legend(ctx, opts) { - _classCallCheck(this, Legend); - - this.ctx = ctx; - this.w = ctx.w; - this.onLegendClick = this.onLegendClick.bind(this); - this.onLegendHovered = this.onLegendHovered.bind(this); - } - - _createClass(Legend, [{ - key: "init", - value: function init() { - var w = this.w; - var gl = w.globals; - var cnf = w.config; - var showLegendAlways = cnf.legend.showForSingleSeries && gl.series.length === 1 || gl.series.length > 1; - - if ((showLegendAlways || !gl.axisCharts) && cnf.legend.show) { - while (gl.dom.elLegendWrap.firstChild) { - gl.dom.elLegendWrap.removeChild(gl.dom.elLegendWrap.firstChild); - } - - this.drawLegends(); - - if (!Utils.isIE11()) { - this.appendToForeignObject(); - } else { - // IE11 doesn't supports foreignObject, hence append it to - document.getElementsByTagName('head')[0].appendChild(this.getLegendStyles()); - } - - if (cnf.legend.position === 'bottom' || cnf.legend.position === 'top') { - this.legendAlignHorizontal(); - } else if (cnf.legend.position === 'right' || cnf.legend.position === 'left') { - this.legendAlignVertical(); - } - } - } - }, { - key: "appendToForeignObject", - value: function appendToForeignObject() { - var gl = this.w.globals; - var elForeign = document.createElementNS(gl.SVGNS, 'foreignObject'); - elForeign.setAttribute('x', 0); - elForeign.setAttribute('y', 0); - elForeign.setAttribute('width', gl.svgWidth); - elForeign.setAttribute('height', gl.svgHeight); - gl.dom.elLegendWrap.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml'); - elForeign.appendChild(gl.dom.elLegendWrap); - elForeign.appendChild(this.getLegendStyles()); - gl.dom.Paper.node.insertBefore(elForeign, gl.dom.elGraphical.node); - } - }, { - key: "drawLegends", - value: function drawLegends() { - var self = this; - var w = this.w; - var fontFamily = w.config.legend.fontFamily; - var legendNames = w.globals.seriesNames; - var fillcolor = w.globals.colors.slice(); - - if (w.config.chart.type === 'heatmap') { - var ranges = w.config.plotOptions.heatmap.colorScale.ranges; - legendNames = ranges.map(function (colorScale) { - return colorScale.name ? colorScale.name : colorScale.from + ' - ' + colorScale.to; - }); - fillcolor = ranges.map(function (color) { - return color.color; - }); - } - - var legendFormatter = w.globals.legendFormatter; - - for (var i = 0; i <= legendNames.length - 1; i++) { - var text = legendFormatter(legendNames[i], { - seriesIndex: i, - w: w - }); - var collapsedSeries = false; - var ancillaryCollapsedSeries = false; - - if (w.globals.collapsedSeries.length > 0) { - for (var c = 0; c < w.globals.collapsedSeries.length; c++) { - if (w.globals.collapsedSeries[c].index === i) { - collapsedSeries = true; - } - } - } - - if (w.globals.ancillaryCollapsedSeriesIndices.length > 0) { - for (var _c = 0; _c < w.globals.ancillaryCollapsedSeriesIndices.length; _c++) { - if (w.globals.ancillaryCollapsedSeriesIndices[_c] === i) { - ancillaryCollapsedSeries = true; - } - } - } - - var elMarker = document.createElement('span'); - elMarker.classList.add('apexcharts-legend-marker'); - var mOffsetX = w.config.legend.markers.offsetX; - var mOffsetY = w.config.legend.markers.offsetY; - var mHeight = w.config.legend.markers.height; - var mWidth = w.config.legend.markers.width; - var mBorderWidth = w.config.legend.markers.strokeWidth; - var mBorderColor = w.config.legend.markers.strokeColor; - var mBorderRadius = w.config.legend.markers.radius; - var mStyle = elMarker.style; - mStyle.background = fillcolor[i]; - mStyle.color = fillcolor[i]; - mStyle.height = Array.isArray(mHeight) ? parseFloat(mHeight[i]) + 'px' : parseFloat(mHeight) + 'px'; - mStyle.width = Array.isArray(mWidth) ? parseFloat(mWidth[i]) + 'px' : parseFloat(mWidth) + 'px'; - mStyle.left = Array.isArray(mOffsetX) ? mOffsetX[i] : mOffsetX; - mStyle.top = Array.isArray(mOffsetY) ? mOffsetY[i] : mOffsetY; - mStyle.borderWidth = Array.isArray(mBorderWidth) ? mBorderWidth[i] : mBorderWidth; - mStyle.borderColor = Array.isArray(mBorderColor) ? mBorderColor[i] : mBorderColor; - mStyle.borderRadius = Array.isArray(mBorderRadius) ? parseFloat(mBorderRadius[i]) + 'px' : parseFloat(mBorderRadius) + 'px'; - - if (w.config.legend.markers.customHTML) { - if (Array.isArray(w.config.legend.markers.customHTML)) { - elMarker.innerHTML = w.config.legend.markers.customHTML[i](); - } else { - elMarker.innerHTML = w.config.legend.markers.customHTML(); - } - } - - Graphics.setAttrs(elMarker, { - rel: i + 1, - 'data:collapsed': collapsedSeries || ancillaryCollapsedSeries - }); - - if (collapsedSeries || ancillaryCollapsedSeries) { - elMarker.classList.add('inactive-legend'); - } - - var elLegend = document.createElement('div'); - var elLegendText = document.createElement('span'); - elLegendText.classList.add('apexcharts-legend-text'); - elLegendText.innerHTML = text; - var textColor = w.config.legend.labels.useSeriesColors ? w.globals.colors[i] : w.config.legend.labels.colors; - - if (!textColor) { - textColor = w.config.chart.foreColor; - } - - elLegendText.style.color = textColor; - elLegendText.style.fontSize = parseFloat(w.config.legend.fontSize) + 'px'; - elLegendText.style.fontFamily = fontFamily || w.config.chart.fontFamily; - Graphics.setAttrs(elLegendText, { - rel: i + 1, - 'data:collapsed': collapsedSeries || ancillaryCollapsedSeries - }); - elLegend.appendChild(elMarker); - elLegend.appendChild(elLegendText); - var coreUtils = new CoreUtils(this.ctx); - - if (!w.config.legend.showForZeroSeries) { - var total = coreUtils.getSeriesTotalByIndex(i); - - if (total === 0 && coreUtils.seriesHaveSameValues(i) && !coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) { - elLegend.classList.add('apexcharts-hidden-zero-series'); - } - } - - if (!w.config.legend.showForNullSeries) { - if (coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) { - elLegend.classList.add('apexcharts-hidden-null-series'); - } - } - - w.globals.dom.elLegendWrap.appendChild(elLegend); - w.globals.dom.elLegendWrap.classList.add(w.config.legend.horizontalAlign); // w.globals.dom.elLegendWrap.classList.add(w.config.legend.verticalAlign) - - w.globals.dom.elLegendWrap.classList.add('position-' + w.config.legend.position); - elLegend.classList.add('apexcharts-legend-series'); - elLegend.style.margin = "".concat(w.config.legend.itemMargin.horizontal, "px ").concat(w.config.legend.itemMargin.vertical, "px"); - w.globals.dom.elLegendWrap.style.width = w.config.legend.width ? w.config.legend.width + 'px' : ''; - w.globals.dom.elLegendWrap.style.height = w.config.legend.height ? w.config.legend.height + 'px' : ''; - Graphics.setAttrs(elLegend, { - rel: i + 1, - 'data:collapsed': collapsedSeries || ancillaryCollapsedSeries - }); - - if (collapsedSeries || ancillaryCollapsedSeries) { - elLegend.classList.add('inactive-legend'); - } - - if (!w.config.legend.onItemClick.toggleDataSeries) { - elLegend.classList.add('no-click'); - } - } // for now - just prevent click on heatmap legend - and allow hover only - - - var clickAllowed = w.config.chart.type !== 'heatmap'; - - if (clickAllowed && w.config.legend.onItemClick.toggleDataSeries) { - w.globals.dom.elWrap.addEventListener('click', self.onLegendClick, true); - } - - if (w.config.legend.onItemHover.highlightDataSeries) { - w.globals.dom.elWrap.addEventListener('mousemove', self.onLegendHovered, true); - w.globals.dom.elWrap.addEventListener('mouseout', self.onLegendHovered, true); - } - } - }, { - key: "getLegendBBox", - value: function getLegendBBox() { - var w = this.w; - var currLegendsWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); - var currLegendsWrapRect = currLegendsWrap.getBoundingClientRect(); - var currLegendsWrapWidth = currLegendsWrapRect.width; - var currLegendsWrapHeight = currLegendsWrapRect.height; - return { - clwh: currLegendsWrapHeight, - clww: currLegendsWrapWidth - }; - } - }, { - key: "setLegendWrapXY", - value: function setLegendWrapXY(offsetX, offsetY) { - var w = this.w; - var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); - var legendRect = elLegendWrap.getBoundingClientRect(); - var x = 0; - var y = 0; - - if (w.config.legend.position === 'bottom') { - y = y + (w.globals.svgHeight - legendRect.height / 2); - } else if (w.config.legend.position === 'top') { - var dim = new Dimensions(this.ctx); - var titleH = dim.getTitleSubtitleCoords('title').height; - var subtitleH = dim.getTitleSubtitleCoords('subtitle').height; - y = y + (titleH > 0 ? titleH - 10 : 0) + (subtitleH > 0 ? subtitleH - 10 : 0); - } - - elLegendWrap.style.position = 'absolute'; - x = x + offsetX + w.config.legend.offsetX; - y = y + offsetY + w.config.legend.offsetY; - elLegendWrap.style.left = x + 'px'; - elLegendWrap.style.top = y + 'px'; - - if (w.config.legend.position === 'bottom') { - elLegendWrap.style.top = 'auto'; - elLegendWrap.style.bottom = 10 + w.config.legend.offsetY + 'px'; - } else if (w.config.legend.position === 'right') { - elLegendWrap.style.left = 'auto'; - elLegendWrap.style.right = 25 + w.config.legend.offsetX + 'px'; - } - - if (elLegendWrap.style.width) { - elLegendWrap.style.width = parseInt(w.config.legend.width) + 'px'; - } - - if (elLegendWrap.style.height) { - elLegendWrap.style.height = parseInt(w.config.legend.height) + 'px'; - } - } - }, { - key: "legendAlignHorizontal", - value: function legendAlignHorizontal() { - var w = this.w; - var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); - elLegendWrap.style.right = 0; - var lRect = this.getLegendBBox(); - var dimensions = new Dimensions(this.ctx); - var titleRect = dimensions.getTitleSubtitleCoords('title'); - var subtitleRect = dimensions.getTitleSubtitleCoords('subtitle'); - var offsetX = 20; - var offsetY = 0; // the whole legend box is set to bottom - - if (w.config.legend.position === 'bottom') { - offsetY = -lRect.clwh / 1.8; - } else if (w.config.legend.position === 'top') { - offsetY = titleRect.height + subtitleRect.height + w.config.title.margin + w.config.subtitle.margin - 15; - } - - this.setLegendWrapXY(offsetX, offsetY); - } - }, { - key: "legendAlignVertical", - value: function legendAlignVertical() { - var w = this.w; - var lRect = this.getLegendBBox(); - var offsetY = 20; - var offsetX = 0; - - if (w.config.legend.position === 'left') { - offsetX = 20; - } - - if (w.config.legend.position === 'right') { - offsetX = w.globals.svgWidth - lRect.clww - 10; - } - - this.setLegendWrapXY(offsetX, offsetY); - } - }, { - key: "onLegendHovered", - value: function onLegendHovered(e) { - var w = this.w; - var hoverOverLegend = e.target.classList.contains('apexcharts-legend-text') || e.target.classList.contains('apexcharts-legend-marker'); - - if (w.config.chart.type !== 'heatmap') { - if (!e.target.classList.contains('inactive-legend') && hoverOverLegend) { - var series = new Series(this.ctx); - series.toggleSeriesOnHover(e, e.target); - } - } else { - // for heatmap handling - if (hoverOverLegend) { - var seriesCnt = parseInt(e.target.getAttribute('rel')) - 1; - this.ctx.fireEvent('legendHover', [this.ctx, seriesCnt, this.w]); - - var _series = new Series(this.ctx); - - _series.highlightRangeInSeries(e, e.target); - } - } - } - }, { - key: "onLegendClick", - value: function onLegendClick(e) { - if (e.target.classList.contains('apexcharts-legend-text') || e.target.classList.contains('apexcharts-legend-marker')) { - var seriesCnt = parseInt(e.target.getAttribute('rel')) - 1; - var isHidden = e.target.getAttribute('data:collapsed') === 'true'; - var legendClick = this.w.config.chart.events.legendClick; - - if (typeof legendClick === 'function') { - legendClick(this.ctx, seriesCnt, this.w); - } - - this.ctx.fireEvent('legendClick', [this.ctx, seriesCnt, this.w]); - var markerClick = this.w.config.legend.markers.onClick; - - if (typeof markerClick === 'function' && e.target.classList.contains('apexcharts-legend-marker')) { - markerClick(this.ctx, seriesCnt, this.w); - this.ctx.fireEvent('legendMarkerClick', [this.ctx, seriesCnt, this.w]); - } - - this.toggleDataSeries(seriesCnt, isHidden); - } - } - }, { - key: "getLegendStyles", - value: function getLegendStyles() { - var stylesheet = document.createElement('style'); - stylesheet.setAttribute('type', 'text/css'); - var text = "\n \n .apexcharts-legend {\n display: flex;\n overflow: auto;\n padding: 0 10px;\n }\n\n .apexcharts-legend.position-bottom, .apexcharts-legend.position-top {\n flex-wrap: wrap\n }\n .apexcharts-legend.position-right, .apexcharts-legend.position-left {\n flex-direction: column;\n bottom: 0;\n }\n\n .apexcharts-legend.position-bottom.left, .apexcharts-legend.position-top.left, .apexcharts-legend.position-right, .apexcharts-legend.position-left {\n justify-content: flex-start;\n }\n\n .apexcharts-legend.position-bottom.center, .apexcharts-legend.position-top.center {\n justify-content: center; \n }\n\n .apexcharts-legend.position-bottom.right, .apexcharts-legend.position-top.right {\n justify-content: flex-end;\n }\n\n .apexcharts-legend-series {\n cursor: pointer;\n line-height: normal;\n }\n\n .apexcharts-legend.position-bottom .apexcharts-legend-series, .apexcharts-legend.position-top .apexcharts-legend-series{\n display: flex;\n align-items: center;\n }\n\n .apexcharts-legend-text {\n position: relative;\n font-size: 14px;\n }\n\n .apexcharts-legend-text *, .apexcharts-legend-marker * {\n pointer-events: none;\n }\n\n .apexcharts-legend-marker {\n position: relative;\n display: inline-block;\n cursor: pointer;\n margin-right: 3px;\n }\n \n .apexcharts-legend.right .apexcharts-legend-series, .apexcharts-legend.left .apexcharts-legend-series{\n display: inline-block;\n }\n\n .apexcharts-legend-series.no-click {\n cursor: auto;\n }\n\n .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\n display: none !important;\n }\n\n .inactive-legend {\n opacity: 0.45;\n }"; - var rules = document.createTextNode(text); - stylesheet.appendChild(rules); - return stylesheet; - } - }, { - key: "resetToggleDataSeries", - value: function resetToggleDataSeries() { - var w = this.w; - var seriesEls = null; - var realIndexes = []; - - if (w.globals.axisCharts) { - seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:realIndex]"); - seriesEls = Utils.listToArray(seriesEls); - seriesEls.forEach(function (v) { - realIndexes.push(parseInt(v.getAttribute('data:realIndex'))); - }); - } else { - seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[rel]"); - seriesEls = Utils.listToArray(seriesEls); - seriesEls.forEach(function (v) { - realIndexes.push(parseInt(v.getAttribute('rel')) - 1); - }); - } - - realIndexes.sort(); - - if (w.globals.collapsedSeries.length > 0) { - var risingSeries = w.globals.risingSeries.slice(); - var series = w.config.series.slice(); - - for (var c = 0; c < w.globals.collapsedSeries.length; c++) { - var index = realIndexes.indexOf(w.globals.collapsedSeries[c].index); - - if (index !== -1) { - if (w.globals.axisCharts) { - series[index].data = w.globals.collapsedSeries.slice()[c].data.slice(); - } else { - series[index] = w.globals.collapsedSeries.slice()[c].data; - } - - risingSeries.push(index); - } - } - - w.globals.collapsedSeries = []; - w.globals.ancillaryCollapsedSeries = []; - w.globals.collapsedSeriesIndices = []; - w.globals.ancillaryCollapsedSeriesIndices = []; - w.globals.risingSeries = risingSeries; - w.config.series = series; - - this.ctx._updateSeries(w.config.series, w.config.chart.animations.dynamicAnimation.enabled); - } - } - }, { - key: "toggleDataSeries", - value: function toggleDataSeries(seriesCnt, isHidden) { - var w = this.w; - - if (w.globals.axisCharts || w.config.chart.type === 'radialBar') { - w.globals.resized = true; // we don't want initial animations again - - var seriesEl = null; - var realIndex = null; // yes, make it null. 1 series will rise at a time - - w.globals.risingSeries = []; - - if (w.globals.axisCharts) { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(seriesCnt, "']")); - realIndex = parseInt(seriesEl.getAttribute('data:realIndex')); - } else { - seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(seriesCnt + 1, "']")); - realIndex = parseInt(seriesEl.getAttribute('rel')) - 1; - } - - if (isHidden) { - this.riseCollapsedSeries(w.globals.collapsedSeries, w.globals.collapsedSeriesIndices, realIndex); - this.riseCollapsedSeries(w.globals.ancillaryCollapsedSeries, w.globals.ancillaryCollapsedSeriesIndices, realIndex); - } else { - if (w.globals.axisCharts) { - var shouldNotHideYAxis = false; - - if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].show && w.config.yaxis[realIndex].showAlways) { - shouldNotHideYAxis = true; - - if (w.globals.ancillaryCollapsedSeriesIndices.indexOf(realIndex) < 0) { - w.globals.ancillaryCollapsedSeries.push({ - index: realIndex, - data: w.config.series[realIndex].data.slice(), - type: seriesEl.parentNode.className.baseVal.split('-')[1] - }); - w.globals.ancillaryCollapsedSeriesIndices.push(realIndex); - } - } - - if (!shouldNotHideYAxis) { - w.globals.collapsedSeries.push({ - index: realIndex, - data: w.config.series[realIndex].data.slice(), - type: seriesEl.parentNode.className.baseVal.split('-')[1] - }); - w.globals.collapsedSeriesIndices.push(realIndex); - var removeIndexOfRising = w.globals.risingSeries.indexOf(realIndex); - w.globals.risingSeries.splice(removeIndexOfRising, 1); - } // TODO: AVOID mutating the user's config object below - - - w.config.series[realIndex].data = []; - } else { - w.globals.collapsedSeries.push({ - index: realIndex, - data: w.config.series[realIndex] - }); - w.globals.collapsedSeriesIndices.push(realIndex); - w.config.series[realIndex] = 0; - } - - var seriesChildren = seriesEl.childNodes; - - for (var sc = 0; sc < seriesChildren.length; sc++) { - if (seriesChildren[sc].classList.contains('apexcharts-series-markers-wrap')) { - if (seriesChildren[sc].classList.contains('apexcharts-hide')) { - seriesChildren[sc].classList.remove('apexcharts-hide'); - } else { - seriesChildren[sc].classList.add('apexcharts-hide'); - } - } - } - - w.globals.allSeriesCollapsed = w.globals.collapsedSeries.length === w.globals.series.length; - - this.ctx._updateSeries(w.config.series, w.config.chart.animations.dynamicAnimation.enabled); - } - } else { - // for non-axis charts i.e pie / donuts - var _seriesEl = w.globals.dom.Paper.select(" .apexcharts-series[rel='".concat(seriesCnt + 1, "'] path")); - - var type = w.config.chart.type; - - if (type === 'pie' || type === 'donut') { - var dataLabels = w.config.plotOptions.pie.donut.labels; - var graphics = new Graphics(this.ctx); - var pie = new Pie(this.ctx); - graphics.pathMouseDown(_seriesEl.members[0], null); - pie.printDataLabelsInner(_seriesEl.members[0].node, dataLabels); - } - - _seriesEl.fire('click'); - } - } - }, { - key: "riseCollapsedSeries", - value: function riseCollapsedSeries(series, seriesIndices, realIndex) { - var w = this.w; - - if (series.length > 0) { - for (var c = 0; c < series.length; c++) { - if (series[c].index === realIndex) { - if (w.globals.axisCharts) { - w.config.series[realIndex].data = series[c].data.slice(); - series.splice(c, 1); - seriesIndices.splice(c, 1); - w.globals.risingSeries.push(realIndex); - } else { - w.config.series[realIndex] = series[c].data; - series.splice(c, 1); - seriesIndices.splice(c, 1); - w.globals.risingSeries.push(realIndex); - } - - this.ctx._updateSeries(w.config.series, w.config.chart.animations.dynamicAnimation.enabled); - } - } - } - } - }]); - - return Legend; - }(); - - /** - * ApexCharts Responsive Class to override options for different screen sizes. - * - * @module Responsive - **/ - - var Responsive = - /*#__PURE__*/ - function () { - function Responsive(ctx) { - _classCallCheck(this, Responsive); - - this.ctx = ctx; - this.w = ctx.w; - } // the opts parameter if not null has to be set overriding everything - // as the opts is set by user externally - - - _createClass(Responsive, [{ - key: "checkResponsiveConfig", - value: function checkResponsiveConfig(opts) { - var _this = this; - - var w = this.w; - var cnf = w.config; // check if responsive config exists - - if (cnf.responsive.length === 0) return; - var res = cnf.responsive.slice(); - res.sort(function (a, b) { - return a.breakpoint > b.breakpoint ? 1 : b.breakpoint > a.breakpoint ? -1 : 0; - }).reverse(); - var config = new Config({}); - - var iterateResponsiveOptions = function iterateResponsiveOptions() { - var newOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var largestBreakpoint = res[0].breakpoint; - var width = window.innerWidth > 0 ? window.innerWidth : screen.width; - - if (width > largestBreakpoint) { - var options = CoreUtils.extendArrayProps(config, w.globals.initialConfig); - newOptions = Utils.extend(options, newOptions); - newOptions = Utils.extend(w.config, newOptions); - - _this.overrideResponsiveOptions(newOptions); - } else { - for (var i = 0; i < res.length; i++) { - if (width < res[i].breakpoint) { - newOptions = CoreUtils.extendArrayProps(config, res[i].options); - newOptions = Utils.extend(w.config, newOptions); - - _this.overrideResponsiveOptions(newOptions); - } - } - } - }; - - if (opts) { - var options = CoreUtils.extendArrayProps(config, opts); - options = Utils.extend(w.config, options); - options = Utils.extend(options, opts); - iterateResponsiveOptions(options); - } else { - iterateResponsiveOptions({}); - } - } - }, { - key: "overrideResponsiveOptions", - value: function overrideResponsiveOptions(newOptions) { - var newConfig = new Config(newOptions).init(); - this.w.config = newConfig; - } - }]); - - return Responsive; - }(); - - /** - * ApexCharts Theme Class for setting the colors and palettes. - * - * @module Theme - **/ - - var Theme = - /*#__PURE__*/ - function () { - function Theme(ctx) { - _classCallCheck(this, Theme); - - this.ctx = ctx; - this.w = ctx.w; - this.colors = []; - } - - _createClass(Theme, [{ - key: "init", - value: function init() { - this.setDefaultColors(); - } - }, { - key: "setDefaultColors", - value: function setDefaultColors() { - var w = this.w; - var utils = new Utils(); - w.globals.dom.elWrap.classList.add(w.config.theme.mode); - - if (w.config.colors === undefined) { - w.globals.colors = this.predefined(); - } else { - w.globals.colors = w.config.colors; - } - - if (w.config.theme.monochrome.enabled) { - var monoArr = []; - var glsCnt = w.globals.series.length; - - if (w.config.plotOptions.bar.distributed && w.config.chart.type === 'bar') { - glsCnt = w.globals.series[0].length * w.globals.series.length; - } - - var mainColor = w.config.theme.monochrome.color; - var part = 1 / (glsCnt / w.config.theme.monochrome.shadeIntensity); - var shade = w.config.theme.monochrome.shadeTo; - var percent = 0; - - for (var gsl = 0; gsl < glsCnt; gsl++) { - var newColor = void 0; - - if (shade === 'dark') { - newColor = utils.shadeColor(percent * -1, mainColor); - percent = percent + part; - } else { - newColor = utils.shadeColor(percent, mainColor); - percent = percent + part; - } - - monoArr.push(newColor); - } - - w.globals.colors = monoArr.slice(); - } - - var defaultColors = w.globals.colors.slice(); // if user specfied less colors than no. of series, push the same colors again - - this.pushExtraColors(w.globals.colors); // The Border colors - - if (w.config.stroke.colors === undefined) { - w.globals.stroke.colors = defaultColors; - } else { - w.globals.stroke.colors = w.config.stroke.colors; - } - - this.pushExtraColors(w.globals.stroke.colors); // The FILL colors - - if (w.config.fill.colors === undefined) { - w.globals.fill.colors = defaultColors; - } else { - w.globals.fill.colors = w.config.fill.colors; - } - - this.pushExtraColors(w.globals.fill.colors); - - if (w.config.dataLabels.style.colors === undefined) { - w.globals.dataLabels.style.colors = defaultColors; - } else { - w.globals.dataLabels.style.colors = w.config.dataLabels.style.colors; - } - - this.pushExtraColors(w.globals.dataLabels.style.colors, 50); - - if (w.config.plotOptions.radar.polygons.fill.colors === undefined) { - w.globals.radarPolygons.fill.colors = [w.config.theme.mode === 'dark' ? '#202D48' : '#fff']; - } else { - w.globals.radarPolygons.fill.colors = w.config.plotOptions.radar.polygons.fill.colors; - } - - this.pushExtraColors(w.globals.radarPolygons.fill.colors, 20); // The point colors - - if (w.config.markers.colors === undefined) { - w.globals.markers.colors = defaultColors; - } else { - w.globals.markers.colors = w.config.markers.colors; - } - - this.pushExtraColors(w.globals.markers.colors); - } // When the number of colors provided is less than the number of series, this method - // will push same colors to the list - // params: - // distributed is only valid for distributed column/bar charts - - }, { - key: "pushExtraColors", - value: function pushExtraColors(colorSeries, length) { - var distributed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var w = this.w; - var len = length || w.globals.series.length; - - if (distributed === null) { - distributed = w.config.chart.type === 'bar' && w.config.plotOptions.bar.distributed || w.config.chart.type === 'heatmap' && w.config.plotOptions.heatmap.colorScale.inverse; - } - - if (distributed) { - len = w.globals.series[0].length * w.globals.series.length; - } - - if (colorSeries.length < len) { - var diff = len - colorSeries.length; - - for (var i = 0; i < diff; i++) { - colorSeries.push(colorSeries[i]); - } - } - } - }, { - key: "updateThemeOptions", - value: function updateThemeOptions(options) { - options.chart = options.chart || {}; - options.tooltip = options.tooltip || {}; - var mode = options.theme.mode || 'light'; - var palette = options.theme.palette ? options.theme.palette : mode === 'dark' ? 'palette4' : 'palette1'; - var foreColor = options.chart.foreColor ? options.chart.foreColor : mode === 'dark' ? '#f6f7f8' : '#373d3f'; - options.tooltip.theme = mode; - options.chart.foreColor = foreColor; - options.theme.palette = palette; - return options; - } - }, { - key: "predefined", - value: function predefined() { - var palette = this.w.config.theme.palette; // D6E3F8, FCEFEF, DCE0D9, A5978B, EDDDD4, D6E3F8, FEF5EF - - switch (palette) { - case 'palette1': - this.colors = ['#008FFB', '#00E396', '#FEB019', '#FF4560', '#775DD0']; - break; - - case 'palette2': - this.colors = ['#3f51b5', '#03a9f4', '#4caf50', '#f9ce1d', '#FF9800']; - break; - - case 'palette3': - this.colors = ['#33b2df', '#546E7A', '#d4526e', '#13d8aa', '#A5978B']; - break; - - case 'palette4': - this.colors = ['#4ecdc4', '#c7f464', '#81D4FA', '#fd6a6a', '#546E7A']; - break; - - case 'palette5': - this.colors = ['#2b908f', '#f9a3a4', '#90ee7e', '#fa4443', '#69d2e7']; - break; - - case 'palette6': - this.colors = ['#449DD1', '#F86624', '#EA3546', '#662E9B', '#C5D86D']; - break; - - case 'palette7': - this.colors = ['#D7263D', '#1B998B', '#2E294E', '#F46036', '#E2C044']; - break; - - case 'palette8': - this.colors = ['#662E9B', '#F86624', '#F9C80E', '#EA3546', '#43BCCD']; - break; - - case 'palette9': - this.colors = ['#5C4742', '#A5978B', '#8D5B4C', '#5A2A27', '#C4BBAF']; - break; - - case 'palette10': - this.colors = ['#A300D6', '#7D02EB', '#5653FE', '#2983FF', '#00B1F2']; - break; - - default: - this.colors = ['#008FFB', '#00E396', '#FEB019', '#FF4560', '#775DD0']; - break; - } - - return this.colors; - } - }]); - - return Theme; - }(); - - var Utils$1 = - /*#__PURE__*/ - function () { - function Utils(tooltipContext) { - _classCallCheck(this, Utils); - - this.w = tooltipContext.w; - this.ttCtx = tooltipContext; - this.ctx = tooltipContext.ctx; - } - /** - ** When hovering over series, you need to capture which series is being hovered on. - ** This function will return both capturedseries index as well as inner index of that series - * @memberof Utils - * @param {object} - * - hoverArea = the rect on which user hovers - * - elGrid = dimensions of the hover rect (it can be different than hoverarea) - */ - - - _createClass(Utils, [{ - key: "getNearestValues", - value: function getNearestValues(_ref) { - var hoverArea = _ref.hoverArea, - elGrid = _ref.elGrid, - clientX = _ref.clientX, - clientY = _ref.clientY, - hasBars = _ref.hasBars; - var w = this.w; - var hoverWidth = w.globals.gridWidth; - var xDivisor = hoverWidth / (w.globals.dataPoints - 1); - var seriesBound = elGrid.getBoundingClientRect(); - - if (hasBars && w.globals.comboCharts || hasBars) { - xDivisor = hoverWidth / w.globals.dataPoints; - } - - var hoverX = clientX - seriesBound.left; - var hoverY = clientY - seriesBound.top; - var inRect = hoverX < 0 || hoverY < 0 || hoverX > w.globals.gridWidth || hoverY > w.globals.gridHeight; - - if (inRect) { - hoverArea.classList.remove('hovering-zoom'); - hoverArea.classList.remove('hovering-pan'); - } else { - if (w.globals.zoomEnabled) { - hoverArea.classList.remove('hovering-pan'); - hoverArea.classList.add('hovering-zoom'); - } else if (w.globals.panEnabled) { - hoverArea.classList.remove('hovering-zoom'); - hoverArea.classList.add('hovering-pan'); - } - } - - var j = Math.round(hoverX / xDivisor); - - if (hasBars) { - j = Math.ceil(hoverX / xDivisor); - j = j - 1; - } - - var capturedSeries = null; - var closest = null; - var seriesXValArr = []; - var seriesYValArr = []; - - for (var s = 0; s < w.globals.seriesXvalues.length; s++) { - seriesXValArr.push([w.globals.seriesXvalues[s][0] - 0.000001].concat(w.globals.seriesXvalues[s])); - } - - seriesXValArr = seriesXValArr.map(function (seriesXVal) { - return seriesXVal.filter(function (s) { - return s; - }); - }); - seriesYValArr = w.globals.seriesYvalues.map(function (seriesYVal) { - return seriesYVal.filter(function (s) { - return s; - }); - }); // if X axis type is not category and tooltip is not shared, then we need to find the cursor position and get the nearest value - - if (w.globals.isXNumeric) { - closest = this.closestInMultiArray(hoverX, hoverY, seriesXValArr, seriesYValArr); - capturedSeries = closest.index; - j = closest.j; - - if (capturedSeries !== null) { - // initial push, it should be a little smaller than the 1st val - seriesXValArr = w.globals.seriesXvalues[capturedSeries]; - closest = this.closestInArray(hoverX, seriesXValArr); - j = closest.index; - } - } - - if (!j || j < 1) j = 0; - return { - capturedSeries: capturedSeries, - j: j, - hoverX: hoverX, - hoverY: hoverY - }; - } - }, { - key: "closestInMultiArray", - value: function closestInMultiArray(hoverX, hoverY, Xarrays, Yarrays) { - var w = this.w; - var activeIndex = 0; - var currIndex = null; - var j = -1; - - if (w.globals.series.length > 1) { - activeIndex = this.getFirstActiveXArray(Xarrays); - } else { - currIndex = 0; - } - - var currY = Yarrays[activeIndex][0]; - var currX = Xarrays[activeIndex][0]; - var diffX = Math.abs(hoverX - currX); - var diffY = Math.abs(hoverY - currY); - var diff = diffY + diffX; - Yarrays.map(function (arrY, arrIndex) { - arrY.map(function (y, innerKey) { - var newdiffY = Math.abs(hoverY - Yarrays[arrIndex][innerKey]); - var newdiffX = Math.abs(hoverX - Xarrays[arrIndex][innerKey]); - var newdiff = newdiffX + newdiffY; - - if (newdiff < diff) { - diff = newdiff; - diffX = newdiffX; - diffY = newdiffY; - currIndex = arrIndex; - j = innerKey; - } - }); - }); - return { - index: currIndex, - j: j - }; - } - }, { - key: "getFirstActiveXArray", - value: function getFirstActiveXArray(Xarrays) { - var activeIndex = 0; - var coreUtils = new CoreUtils(this.ctx); - var firstActiveSeriesIndex = Xarrays.map(function (xarr, index) { - if (xarr.length > 0) { - return index; - } else { - return -1; - } - }); - - for (var a = 0; a < firstActiveSeriesIndex.length; a++) { - var total = coreUtils.getSeriesTotalByIndex(a); - - if (firstActiveSeriesIndex[a] !== -1 && total !== 0 && !coreUtils.seriesHaveSameValues(a)) { - activeIndex = firstActiveSeriesIndex[a]; - break; - } - } - - return activeIndex; - } - }, { - key: "closestInArray", - value: function closestInArray(val, arr) { - var curr = arr[0]; - var currIndex = null; - var diff = Math.abs(val - curr); - - for (var i = 0; i < arr.length; i++) { - var newdiff = Math.abs(val - arr[i]); - - if (newdiff < diff) { - diff = newdiff; - curr = arr[i]; - currIndex = i; - } - } - - return { - index: currIndex - }; - } - /** - * When there are multiple series, it is possible to have different x values for each series. - * But it may be possible in those multiple series, that there is same x value for 2 or more - * series. - * @memberof Utils - * @param {int} - * - j = is the inner index of series -> (series[i][j]) - * @return {bool} - */ - - }, { - key: "isXoverlap", - value: function isXoverlap(j) { - var w = this.w; - var xSameForAllSeriesJArr = []; - var seriesX = w.globals.seriesX.filter(function (s) { - return typeof s[0] !== 'undefined'; - }); - - if (seriesX.length > 0) { - for (var i = 0; i < seriesX.length - 1; i++) { - if (typeof seriesX[i][j] !== 'undefined' && typeof seriesX[i + 1][j] !== 'undefined') { - if (seriesX[i][j] !== seriesX[i + 1][j]) { - xSameForAllSeriesJArr.push('unEqual'); - } - } - } - } - - if (xSameForAllSeriesJArr.length === 0) { - return true; - } - - return false; - } - }, { - key: "isinitialSeriesSameLen", - value: function isinitialSeriesSameLen() { - var sameLen = true; - var initialSeries = this.w.globals.initialSeries; - - for (var i = 0; i < initialSeries.length - 1; i++) { - if (initialSeries[i].data.length !== initialSeries[i + 1].data.length) { - sameLen = false; - break; - } - } - - return sameLen; - } - }, { - key: "getBarsHeight", - value: function getBarsHeight(allbars) { - var bars = _toConsumableArray(allbars); - - var totalHeight = bars.reduce(function (acc, bar) { - return acc + bar.getBBox().height; - }, 0); - return totalHeight; - } - }, { - key: "toggleAllTooltipSeriesGroups", - value: function toggleAllTooltipSeriesGroups(state) { - var w = this.w; - var ttCtx = this.ttCtx; - - if (ttCtx.allTooltipSeriesGroups.length === 0) { - ttCtx.allTooltipSeriesGroups = w.globals.dom.baseEl.querySelectorAll('.apexcharts-tooltip-series-group'); - } - - var allTooltipSeriesGroups = ttCtx.allTooltipSeriesGroups; - - for (var i = 0; i < allTooltipSeriesGroups.length; i++) { - if (state === 'enable') { - allTooltipSeriesGroups[i].classList.add('active'); - allTooltipSeriesGroups[i].style.display = w.config.tooltip.items.display; - } else { - allTooltipSeriesGroups[i].classList.remove('active'); - allTooltipSeriesGroups[i].style.display = 'none'; - } - } - } - }]); - - return Utils; - }(); - - /** - * ApexCharts Tooltip.Labels Class to draw texts on the tooltip. - * - * @module Tooltip.Labels - **/ - - var Labels = - /*#__PURE__*/ - function () { - function Labels(tooltipContext) { - _classCallCheck(this, Labels); - - this.w = tooltipContext.w; - this.ctx = tooltipContext.ctx; - this.ttCtx = tooltipContext; - this.tooltipUtil = new Utils$1(tooltipContext); - } - - _createClass(Labels, [{ - key: "drawSeriesTexts", - value: function drawSeriesTexts(_ref) { - var _ref$shared = _ref.shared, - shared = _ref$shared === void 0 ? true : _ref$shared, - ttItems = _ref.ttItems, - _ref$i = _ref.i, - i = _ref$i === void 0 ? 0 : _ref$i, - _ref$j = _ref.j, - j = _ref$j === void 0 ? null : _ref$j; - var w = this.w; - - if (w.config.tooltip.custom !== undefined) { - this.handleCustomTooltip({ - i: i, - j: j - }); - } else { - this.toggleActiveInactiveSeries(shared); - } - - var values = this.getValuesToPrint({ - i: i, - j: j - }); - this.printLabels({ - i: i, - j: j, - values: values, - ttItems: ttItems, - shared: shared - }); // Re-calculate tooltip dimensions now that we have drawn the text - - var tooltipEl = this.ttCtx.getElTooltip(); - this.ttCtx.tooltipRect.ttWidth = tooltipEl.getBoundingClientRect().width; - this.ttCtx.tooltipRect.ttHeight = tooltipEl.getBoundingClientRect().height; - } - }, { - key: "printLabels", - value: function printLabels(_ref2) { - var i = _ref2.i, - j = _ref2.j, - values = _ref2.values, - ttItems = _ref2.ttItems, - shared = _ref2.shared; - var w = this.w; - var val; - var xVal = values.xVal, - zVal = values.zVal, - xAxisTTVal = values.xAxisTTVal; - var seriesName = ''; - var pColor = w.globals.colors[i]; - - if (j !== null && w.config.plotOptions.bar.distributed) { - pColor = w.globals.colors[j]; - } - - for (var t = 0, inverset = w.globals.series.length - 1; t < w.globals.series.length; t++, inverset--) { - var f = this.getFormatters(i); - seriesName = this.getSeriesName({ - fn: f.yLbTitleFormatter, - index: i, - seriesIndex: i, - j: j - }); - - if (shared) { - var tIndex = w.config.tooltip.inverseOrder ? inverset : t; - f = this.getFormatters(tIndex); - seriesName = this.getSeriesName({ - fn: f.yLbTitleFormatter, - index: tIndex, - seriesIndex: i, - j: j - }); - pColor = w.globals.colors[tIndex]; // for plot charts, not for pie/donuts - - val = f.yLbFormatter(w.globals.series[tIndex][j], { - series: w.globals.series, - seriesIndex: tIndex, - dataPointIndex: j, - w: w - }); // discard 0 values in BARS - - if (this.ttCtx.hasBars() && w.config.chart.stacked && w.globals.series[tIndex][j] === 0 || typeof w.globals.series[tIndex][j] === 'undefined') { - val = undefined; - } - } else { - val = f.yLbFormatter(w.globals.series[i][j], { - series: w.globals.series, - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } // for pie / donuts - - - if (j === null) { - val = f.yLbFormatter(w.globals.series[i], w); - } - - this.DOMHandling({ - t: t, - ttItems: ttItems, - values: { - val: val, - xVal: xVal, - xAxisTTVal: xAxisTTVal, - zVal: zVal - }, - seriesName: seriesName, - shared: shared, - pColor: pColor - }); - } - } - }, { - key: "getFormatters", - value: function getFormatters(i) { - var w = this.w; - var yLbFormatter = w.globals.yLabelFormatters[i]; - var yLbTitleFormatter; - - if (w.globals.ttVal !== undefined) { - if (Array.isArray(w.globals.ttVal)) { - yLbFormatter = w.globals.ttVal[i] && w.globals.ttVal[i].formatter; - yLbTitleFormatter = w.globals.ttVal[i] && w.globals.ttVal[i].title && w.globals.ttVal[i].title.formatter; - } else { - yLbFormatter = w.globals.ttVal.formatter; - - if (typeof w.globals.ttVal.title.formatter === 'function') { - yLbTitleFormatter = w.globals.ttVal.title.formatter; - } - } - } else { - yLbTitleFormatter = w.config.tooltip.y.title.formatter; - } - - if (typeof yLbFormatter !== 'function') { - if (w.globals.yLabelFormatters[0]) { - yLbFormatter = w.globals.yLabelFormatters[0]; - } else { - yLbFormatter = function yLbFormatter(label) { - return label; - }; - } - } - - if (typeof yLbTitleFormatter !== 'function') { - yLbTitleFormatter = function yLbTitleFormatter(label) { - return label; - }; - } - - return { - yLbFormatter: yLbFormatter, - yLbTitleFormatter: yLbTitleFormatter - }; - } - }, { - key: "getSeriesName", - value: function getSeriesName(_ref3) { - var fn = _ref3.fn, - index = _ref3.index, - seriesIndex = _ref3.seriesIndex, - j = _ref3.j; - var w = this.w; - return fn(String(w.globals.seriesNames[index]), { - series: w.globals.series, - seriesIndex: seriesIndex, - dataPointIndex: j, - w: w - }); - } - }, { - key: "DOMHandling", - value: function DOMHandling(_ref4) { - var t = _ref4.t, - ttItems = _ref4.ttItems, - values = _ref4.values, - seriesName = _ref4.seriesName, - shared = _ref4.shared, - pColor = _ref4.pColor; - var w = this.w; - var ttCtx = this.ttCtx; - var val = values.val, - xVal = values.xVal, - xAxisTTVal = values.xAxisTTVal, - zVal = values.zVal; - var ttItemsChildren = null; - ttItemsChildren = ttItems[t].children; - - if (w.config.tooltip.fillSeriesColor) { - // elTooltip.style.backgroundColor = pColor - ttItems[t].style.backgroundColor = pColor; - ttItemsChildren[0].style.display = 'none'; - } - - if (ttCtx.showTooltipTitle) { - if (ttCtx.tooltipTitle === null) { - // get it once if null, and store it in class property - ttCtx.tooltipTitle = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip-title'); - } - - ttCtx.tooltipTitle.innerHTML = xVal; - } // if xaxis tooltip is constructed, we need to replace the innerHTML - - - if (ttCtx.blxaxisTooltip) { - ttCtx.xaxisTooltipText.innerHTML = xAxisTTVal !== '' ? xAxisTTVal : xVal; - } - - var ttYLabel = ttItems[t].querySelector('.apexcharts-tooltip-text-label'); - - if (ttYLabel) { - ttYLabel.innerHTML = seriesName ? seriesName + ': ' : ''; - } - - var ttYVal = ttItems[t].querySelector('.apexcharts-tooltip-text-value'); - - if (ttYVal) { - ttYVal.innerHTML = val; - } - - if (ttItemsChildren[0] && ttItemsChildren[0].classList.contains('apexcharts-tooltip-marker')) { - ttItemsChildren[0].style.backgroundColor = pColor; - } - - if (!w.config.tooltip.marker.show) { - ttItemsChildren[0].style.display = 'none'; - } - - if (zVal !== null) { - var ttZLabel = ttItems[t].querySelector('.apexcharts-tooltip-text-z-label'); - ttZLabel.innerHTML = w.config.tooltip.z.title; - var ttZVal = ttItems[t].querySelector('.apexcharts-tooltip-text-z-value'); - ttZVal.innerHTML = zVal; - } - - if (shared && ttItemsChildren[0]) { - // hide when no Val or series collapsed - if (typeof val === 'undefined' || val === null || w.globals.collapsedSeriesIndices.indexOf(t) > -1) { - ttItemsChildren[0].parentNode.style.display = 'none'; - } else { - ttItemsChildren[0].parentNode.style.display = w.config.tooltip.items.display; - } - } - } - }, { - key: "toggleActiveInactiveSeries", - value: function toggleActiveInactiveSeries(shared) { - var w = this.w; - - if (shared) { - // make all tooltips active - this.tooltipUtil.toggleAllTooltipSeriesGroups('enable'); - } else { - // disable all tooltip text groups - this.tooltipUtil.toggleAllTooltipSeriesGroups('disable'); // enable the first tooltip text group - - var firstTooltipSeriesGroup = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip-series-group'); - - if (firstTooltipSeriesGroup) { - firstTooltipSeriesGroup.classList.add('active'); - firstTooltipSeriesGroup.style.display = w.config.tooltip.items.display; - } - } - } - }, { - key: "getValuesToPrint", - value: function getValuesToPrint(_ref5) { - var i = _ref5.i, - j = _ref5.j; - var w = this.w; - var filteredSeriesX = this.ctx.series.filteredSeriesX(); - var xVal = ''; - var xAxisTTVal = ''; - var zVal = null; - var val = null; - var customFormatterOpts = { - series: w.globals.series, - seriesIndex: i, - dataPointIndex: j, - w: w - }; - var zFormatter = w.globals.ttZFormatter; - - if (j === null) { - val = w.globals.series[i]; - } else { - if (w.globals.isXNumeric) { - xVal = filteredSeriesX[i][j]; - - if (filteredSeriesX[i].length === 0) { - // a series (possibly the first one) might be collapsed, so get the next active index - var firstActiveSeriesIndex = this.tooltipUtil.getFirstActiveXArray(filteredSeriesX); - xVal = filteredSeriesX[firstActiveSeriesIndex][j]; - } - } else { - xVal = typeof w.globals.labels[j] !== 'undefined' ? w.globals.labels[j] : ''; - } - } - - var bufferXVal = xVal; - - if (w.globals.isXNumeric && w.config.xaxis.type === 'datetime') { - var xFormat = new Formatters(this.ctx); - xVal = xFormat.xLabelFormat(w.globals.ttKeyFormatter, bufferXVal); - } else { - xVal = w.globals.xLabelFormatter(bufferXVal, customFormatterOpts); - } // override default x-axis formatter with tooltip formatter - - - if (w.config.tooltip.x.formatter !== undefined) { - xVal = w.globals.ttKeyFormatter(bufferXVal, customFormatterOpts); - } - - if (w.globals.seriesZ.length > 0 && w.globals.seriesZ[0].length > 0) { - zVal = zFormatter(w.globals.seriesZ[i][j], w); - } - - if (typeof w.config.xaxis.tooltip.formatter === 'function') { - xAxisTTVal = w.globals.xaxisTooltipFormatter(bufferXVal, customFormatterOpts); - } else { - xAxisTTVal = xVal; - } - - return { - val: val, - xVal: xVal, - xAxisTTVal: xAxisTTVal, - zVal: zVal - }; - } - }, { - key: "handleCustomTooltip", - value: function handleCustomTooltip(_ref6) { - var i = _ref6.i, - j = _ref6.j; - var w = this.w; - var tooltipEl = this.ttCtx.getElTooltip(); // override everything with a custom html tooltip and replace it - - tooltipEl.innerHTML = w.config.tooltip.custom({ - ctx: this.ctx, - series: w.globals.series, - seriesIndex: i, - dataPointIndex: j, - w: w - }); - } - }]); - - return Labels; - }(); - - /** - * ApexCharts Tooltip.Position Class to move the tooltip based on x and y position. - * - * @module Tooltip.Position - **/ - - var Position = - /*#__PURE__*/ - function () { - function Position(tooltipContext) { - _classCallCheck(this, Position); - - this.ttCtx = tooltipContext; - this.ctx = tooltipContext.ctx; - this.w = tooltipContext.w; - } - /** - * This will move the crosshair (the vertical/horz line that moves along with mouse) - * Along with this, this function also calls the xaxisMove function - * @memberof Position - * @param {int} - cx = point's x position, wherever point's x is, you need to move crosshair - */ - - - _createClass(Position, [{ - key: "moveXCrosshairs", - value: function moveXCrosshairs(cx) { - var j = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var ttCtx = this.ttCtx; - var w = this.w; - var xcrosshairs = ttCtx.getElXCrosshairs(); - var x = cx - ttCtx.xcrosshairsWidth / 2; - var tickAmount = w.globals.labels.slice().length; - - if (j !== null) { - x = w.globals.gridWidth / tickAmount * j; - } - - if (w.config.xaxis.crosshairs.width === 'tickWidth' || w.config.xaxis.crosshairs.width === 'barWidth') { - if (x + ttCtx.xcrosshairsWidth > w.globals.gridWidth) { - x = w.globals.gridWidth - ttCtx.xcrosshairsWidth; - } - } else { - if (j !== null) { - x = x + w.globals.gridWidth / tickAmount / 2; - } - } - - if (x < 0) { - x = 0; - } - - if (x > w.globals.gridWidth) { - x = w.globals.gridWidth; - } - - if (xcrosshairs !== null) { - xcrosshairs.setAttribute('x', x); - xcrosshairs.setAttribute('x1', x); - xcrosshairs.setAttribute('x2', x); - xcrosshairs.setAttribute('y2', w.globals.gridHeight); - xcrosshairs.classList.add('active'); - } - - if (ttCtx.blxaxisTooltip) { - var tx = x; - - if (w.config.xaxis.crosshairs.width === 'tickWidth' || w.config.xaxis.crosshairs.width === 'barWidth') { - tx = x + ttCtx.xcrosshairsWidth / 2; - } - - this.moveXAxisTooltip(tx); - } - } - /** - * This will move the crosshair (the vertical/horz line that moves along with mouse) - * Along with this, this function also calls the xaxisMove function - * @memberof Position - * @param {int} - cx = point's x position, wherever point's x is, you need to move crosshair - */ - - }, { - key: "moveYCrosshairs", - value: function moveYCrosshairs(cy) { - var ttCtx = this.ttCtx; - - if (ttCtx.ycrosshairs !== null) { - Graphics.setAttrs(ttCtx.ycrosshairs, { - y1: cy, - y2: cy - }); - Graphics.setAttrs(ttCtx.ycrosshairsHidden, { - y1: cy, - y2: cy - }); - } - } - /** - ** AxisTooltip is the small rectangle which appears on x axis with x value, when user moves - * @memberof Position - * @param {int} - cx = point's x position, wherever point's x is, you need to move - */ - - }, { - key: "moveXAxisTooltip", - value: function moveXAxisTooltip(cx) { - var w = this.w; - var ttCtx = this.ttCtx; - - if (ttCtx.xaxisTooltip !== null) { - ttCtx.xaxisTooltip.classList.add('active'); - var cy = ttCtx.xaxisOffY + w.config.xaxis.tooltip.offsetY + w.globals.translateY + 1 + w.config.xaxis.offsetY; - var xaxisTTText = ttCtx.xaxisTooltip.getBoundingClientRect(); - var xaxisTTTextWidth = xaxisTTText.width; - cx = cx - xaxisTTTextWidth / 2; - - if (!isNaN(cx)) { - cx = cx + w.globals.translateX; - var textRect = 0; - var graphics = new Graphics(this.ctx); - textRect = graphics.getTextRects(ttCtx.xaxisTooltipText.innerHTML); - ttCtx.xaxisTooltipText.style.minWidth = textRect.width + 'px'; - ttCtx.xaxisTooltip.style.left = cx + 'px'; - ttCtx.xaxisTooltip.style.top = cy + 'px'; - } - } - } - }, { - key: "moveYAxisTooltip", - value: function moveYAxisTooltip(index) { - var w = this.w; - var ttCtx = this.ttCtx; - - if (ttCtx.yaxisTTEls === null) { - ttCtx.yaxisTTEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxistooltip'); - } - - var ycrosshairsHiddenRectY1 = parseInt(ttCtx.ycrosshairsHidden.getAttribute('y1')); - var cy = w.globals.translateY + ycrosshairsHiddenRectY1; - var yAxisTTRect = ttCtx.yaxisTTEls[index].getBoundingClientRect(); - var yAxisTTHeight = yAxisTTRect.height; - var cx = w.globals.translateYAxisX[index] - 2; - - if (w.config.yaxis[index].opposite) { - cx = cx - 26; - } - - cy = cy - yAxisTTHeight / 2; - - if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1) { - ttCtx.yaxisTTEls[index].classList.add('active'); - ttCtx.yaxisTTEls[index].style.top = cy + 'px'; - ttCtx.yaxisTTEls[index].style.left = cx + w.config.yaxis[index].tooltip.offsetX + 'px'; - } else { - ttCtx.yaxisTTEls[index].classList.remove('active'); - } - } - /** - ** moves the whole tooltip by changing x, y attrs - * @memberof Position - * @param {int} - cx = point's x position, wherever point's x is, you need to move tooltip - * @param {int} - cy = point's y position, wherever point's y is, you need to move tooltip - * @param {int} - r = point's radius - */ - - }, { - key: "moveTooltip", - value: function moveTooltip(cx, cy) { - var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var w = this.w; - var ttCtx = this.ttCtx; - var tooltipEl = ttCtx.getElTooltip(); - var tooltipRect = ttCtx.tooltipRect; - var pointR = r !== null ? parseInt(r) : 1; - var x = parseInt(cx) + pointR + 5; - var y = parseInt(cy) + pointR / 2; // - tooltipRect.ttHeight / 2 - - if (x > w.globals.gridWidth / 2) { - x = x - tooltipRect.ttWidth - pointR - 15; - } - - if (x > w.globals.gridWidth - tooltipRect.ttWidth - 10) { - x = w.globals.gridWidth - tooltipRect.ttWidth; - } - - if (x < -20) { - x = -20; - } - - if (w.config.tooltip.followCursor) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top - tooltipRect.ttHeight / 2; - } - - var newPositions = this.positionChecks(tooltipRect, x, y); - x = newPositions.x; - y = newPositions.y; - - if (!isNaN(x)) { - x = x + w.globals.translateX; - tooltipEl.style.left = x + 'px'; - tooltipEl.style.top = y + 'px'; - } - } - }, { - key: "positionChecks", - value: function positionChecks(tooltipRect, x, y) { - var w = this.w; - - if (tooltipRect.ttHeight + y > w.globals.gridHeight) { - y = w.globals.gridHeight - tooltipRect.ttHeight + w.globals.translateY; - } - - if (y < 0) { - y = 0; - } - - return { - x: x, - y: y - }; - } - }, { - key: "moveMarkers", - value: function moveMarkers(i, j) { - var w = this.w; - var ttCtx = this.ttCtx; - - if (w.globals.markers.size[i] > 0) { - var allPoints = w.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(i, "'] .apexcharts-marker")); - - for (var p = 0; p < allPoints.length; p++) { - if (parseInt(allPoints[p].getAttribute('rel')) === j) { - ttCtx.marker.resetPointsSize(); - ttCtx.marker.enlargeCurrentPoint(j, allPoints[p]); - } - } - } else { - ttCtx.marker.resetPointsSize(); - this.moveDynamicPointOnHover(j, i); - } - } // This function is used when you need to show markers/points only on hover - - // DIFFERENT X VALUES in multiple series - - }, { - key: "moveDynamicPointOnHover", - value: function moveDynamicPointOnHover(j, capturedSeries) { - var w = this.w; - var ttCtx = this.ttCtx; - var cx = 0; - var cy = 0; - var pointsArr = w.globals.pointsArray; - var hoverSize = w.config.markers.hover.size; - - if (hoverSize === undefined) { - hoverSize = w.globals.markers.size[capturedSeries] + w.config.markers.hover.sizeOffset; - } - - cx = pointsArr[capturedSeries][j][0]; - cy = pointsArr[capturedSeries][j][1] ? pointsArr[capturedSeries][j][1] : 0; - var point = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(capturedSeries, "'] .apexcharts-series-markers circle")); - - if (point) { - point.setAttribute('r', hoverSize); - point.setAttribute('cx', cx); - point.setAttribute('cy', cy); - } // point.style.opacity = w.config.markers.hover.opacity - - - this.moveXCrosshairs(cx); - - if (!ttCtx.fixedTooltip) { - this.moveTooltip(cx, cy, hoverSize); - } - } // This function is used when you need to show markers/points only on hover - - // SAME X VALUES in multiple series - - }, { - key: "moveDynamicPointsOnHover", - value: function moveDynamicPointsOnHover(j) { - var ttCtx = this.ttCtx; - var w = ttCtx.w; - var cx = 0; - var cy = 0; - var activeSeries = 0; - var pointsArr = w.globals.pointsArray; - var series = new Series(this.ctx); - activeSeries = series.getActiveSeriesIndex(); - var hoverSize = w.config.markers.hover.size; - - if (hoverSize === undefined) { - hoverSize = w.globals.markers.size[activeSeries] + w.config.markers.hover.sizeOffset; - } - - if (pointsArr[activeSeries]) { - cx = pointsArr[activeSeries][j][0]; - cy = pointsArr[activeSeries][j][1]; - } - - var points = null; - var allPoints = ttCtx.getAllMarkers(); - - if (allPoints !== null) { - points = allPoints; - } else { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers circle'); - } - - if (points !== null) { - for (var p = 0; p < points.length; p++) { - var pointArr = pointsArr[p]; - - if (pointArr && pointArr.length) { - var pcy = pointsArr[p][j][1]; - points[p].setAttribute('cx', cx); - var realIndex = parseInt(points[p].parentNode.parentNode.parentNode.getAttribute('data:realIndex')); - - if (pcy !== null) { - points[realIndex] && points[realIndex].setAttribute('r', hoverSize); - points[realIndex] && points[realIndex].setAttribute('cy', pcy); - } else { - points[realIndex] && points[realIndex].setAttribute('r', 0); - } - } - } - } - - this.moveXCrosshairs(cx); - - if (!ttCtx.fixedTooltip) { - var tcy = cy || w.globals.gridHeight; - this.moveTooltip(cx, tcy, hoverSize); - } - } - }, { - key: "moveStickyTooltipOverBars", - value: function moveStickyTooltipOverBars(j) { - var w = this.w; - var ttCtx = this.ttCtx; - var jBar = w.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='1'] path[j='".concat(j, "'], .apexcharts-candlestick-series .apexcharts-series[rel='1'] path[j='").concat(j, "'], .apexcharts-rangebar-series .apexcharts-series[rel='1'] path[j='").concat(j, "']")); - var bcx = jBar ? parseFloat(jBar.getAttribute('cx')) : 0; - var bcy = 0; - var bw = jBar ? parseFloat(jBar.getAttribute('barWidth')) : 0; - - if (w.globals.isXNumeric) { - bcx = bcx - bw / 2; - } else { - bcx = ttCtx.xAxisTicksPositions[j - 1] + ttCtx.dataPointsDividedWidth / 2; - - if (isNaN(bcx)) { - bcx = ttCtx.xAxisTicksPositions[j] - ttCtx.dataPointsDividedWidth / 2; - } - } // tooltip will move vertically along with mouse as it is a shared tooltip - - - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - bcy = ttCtx.e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2; - this.moveXCrosshairs(bcx); - - if (!ttCtx.fixedTooltip) { - var tcy = bcy || w.globals.gridHeight; - this.moveTooltip(bcx, tcy); - } - } - }]); - - return Position; - }(); - - /** - * ApexCharts Tooltip.Marker Class to draw texts on the tooltip. - * - * @module Tooltip.Marker - **/ - - var Marker = - /*#__PURE__*/ - function () { - function Marker(tooltipContext) { - _classCallCheck(this, Marker); - - this.w = tooltipContext.w; - this.ttCtx = tooltipContext; - this.ctx = tooltipContext.ctx; - this.tooltipPosition = new Position(tooltipContext); - } - - _createClass(Marker, [{ - key: "drawDynamicPoints", - value: function drawDynamicPoints() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var marker = new Markers(this.ctx); - var elsSeries = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series'); - - for (var i = 0; i < elsSeries.length; i++) { - var seriesIndex = parseInt(elsSeries[i].getAttribute('data:realIndex')); - var pointsMain = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(seriesIndex, "'] .apexcharts-series-markers-wrap")); - - if (pointsMain !== null) { - // it can be null as we have tooltips in donut/bar charts - var point = void 0; - var PointClasses = "apexcharts-marker w".concat((Math.random() + 1).toString(36).substring(4)); - - if ((w.config.chart.type === 'line' || w.config.chart.type === 'area') && !w.globals.comboCharts && !w.config.tooltip.intersect) { - PointClasses += ' no-pointer-events'; - } - - var elPointOptions = marker.getMarkerConfig(PointClasses, seriesIndex); - point = graphics.drawMarker(0, 0, elPointOptions); - point.node.setAttribute('default-marker-size', 0); - var elPointsG = document.createElementNS(w.globals.SVGNS, 'g'); - elPointsG.classList.add('apexcharts-series-markers'); - elPointsG.appendChild(point.node); - pointsMain.appendChild(elPointsG); - } - } - } - }, { - key: "enlargeCurrentPoint", - value: function enlargeCurrentPoint(rel, point) { - var x = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var y = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - var w = this.w; - - if (w.config.chart.type !== 'bubble') { - this.newPointSize(rel, point); - } - - var cx = point.getAttribute('cx'); - var cy = point.getAttribute('cy'); - - if (x !== null && y !== null) { - cx = x; - cy = y; - } - - this.tooltipPosition.moveXCrosshairs(cx); - - if (!this.fixedTooltip) { - if (w.config.chart.type === 'radar') { - var elGrid = this.ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - cx = this.ttCtx.e.clientX - seriesBound.left; - } - - this.tooltipPosition.moveTooltip(cx, cy, w.config.markers.hover.size); - } - } - }, { - key: "enlargePoints", - value: function enlargePoints(j) { - var w = this.w; - var me = this; - var ttCtx = this.ttCtx; - var col = j; - var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker'); - var newSize = w.config.markers.hover.size; - - for (var p = 0; p < points.length; p++) { - var rel = points[p].getAttribute('rel'); - var index = points[p].getAttribute('index'); - - if (newSize === undefined) { - newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset; - } - - if (col === parseInt(rel)) { - me.newPointSize(col, points[p]); - var cx = points[p].getAttribute('cx'); - var cy = points[p].getAttribute('cy'); - me.tooltipPosition.moveXCrosshairs(cx); - - if (!ttCtx.fixedTooltip) { - me.tooltipPosition.moveTooltip(cx, cy, newSize); - } - } else { - me.oldPointSize(points[p]); - } - } - } - }, { - key: "newPointSize", - value: function newPointSize(rel, point) { - var w = this.w; - var newSize = w.config.markers.hover.size; - var elPoint = null; - - if (rel === 0) { - elPoint = point.parentNode.firstChild; - } else { - elPoint = point.parentNode.lastChild; - } - - var index = parseInt(elPoint.getAttribute('index')); - - if (newSize === undefined) { - newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset; - } - - elPoint.setAttribute('r', newSize); - } - }, { - key: "oldPointSize", - value: function oldPointSize(point) { - var size = parseInt(point.getAttribute('default-marker-size')); - point.setAttribute('r', size); - } - }, { - key: "resetPointsSize", - value: function resetPointsSize() { - var w = this.w; - var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker'); - - for (var p = 0; p < points.length; p++) { - var size = parseInt(points[p].getAttribute('default-marker-size')); - - if (Utils.isNumber(size)) { - points[p].setAttribute('r', size); - } else { - points[p].setAttribute('r', 0); - } - } - } - }]); - - return Marker; - }(); - - /** - * ApexCharts Tooltip.Intersect Class. - * - * @module Tooltip.Intersect - **/ - - var Intersect = - /*#__PURE__*/ - function () { - function Intersect(tooltipContext) { - _classCallCheck(this, Intersect); - - this.w = tooltipContext.w; - this.ttCtx = tooltipContext; - } - - _createClass(Intersect, [{ - key: "getAttr", - value: function getAttr(e, attr) { - return parseFloat(e.target.getAttribute(attr)); - } - }, { - key: "handleHeatTooltip", - value: function handleHeatTooltip(_ref) { - var e = _ref.e, - opt = _ref.opt, - x = _ref.x, - y = _ref.y; - var ttCtx = this.ttCtx; - var w = this.w; - - if (e.target.classList.contains('apexcharts-heatmap-rect')) { - var i = this.getAttr(e, 'i'); - var j = this.getAttr(e, 'j'); - var cx = this.getAttr(e, 'cx'); - var cy = this.getAttr(e, 'cy'); - var width = this.getAttr(e, 'width'); - var height = this.getAttr(e, 'height'); - ttCtx.tooltipLabels.drawSeriesTexts({ - ttItems: opt.ttItems, - i: i, - j: j, - shared: false - }); - x = cx + ttCtx.tooltipRect.ttWidth / 2 + width; - y = cy + ttCtx.tooltipRect.ttHeight / 2 - height / 2; - ttCtx.tooltipPosition.moveXCrosshairs(cx + width / 2); - - if (x > w.globals.gridWidth / 2) { - x = cx - ttCtx.tooltipRect.ttWidth / 2 + width; - } - - if (ttCtx.w.config.tooltip.followCursor) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); // x = ttCtx.e.clientX - seriesBound.left - - y = ttCtx.e.clientY - seriesBound.top + w.globals.translateY / 2 - 10; - } - } - - return { - x: x, - y: y - }; - } - }, { - key: "handleMarkerTooltip", - value: function handleMarkerTooltip(_ref2) { - var e = _ref2.e, - opt = _ref2.opt, - x = _ref2.x, - y = _ref2.y; - var w = this.w; - var ttCtx = this.ttCtx; - var i; - var j; - - if (e.target.classList.contains('apexcharts-marker')) { - var cx = parseInt(opt.paths.getAttribute('cx')); - var cy = parseInt(opt.paths.getAttribute('cy')); - var val = parseFloat(opt.paths.getAttribute('val')); - j = parseInt(opt.paths.getAttribute('rel')); - i = parseInt(opt.paths.parentNode.parentNode.parentNode.getAttribute('rel')) - 1; - - if (ttCtx.intersect) { - var el = Utils.findAncestor(opt.paths, 'apexcharts-series'); - - if (el) { - i = parseInt(el.getAttribute('data:realIndex')); - } - } - - ttCtx.tooltipLabels.drawSeriesTexts({ - ttItems: opt.ttItems, - i: i, - j: j, - shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared - }); - - if (e.type === 'mouseup') { - ttCtx.markerClick(e, i, j); - } - - x = cx; - y = cy + w.globals.translateY - ttCtx.tooltipRect.ttHeight * 1.4; - - if (ttCtx.w.config.tooltip.followCursor) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top; - } - - if (val < 0) { - y = cy; - } - - ttCtx.marker.enlargeCurrentPoint(j, opt.paths, x, y); - } - - return { - x: x, - y: y - }; - } - }, { - key: "handleBarTooltip", - value: function handleBarTooltip(_ref3) { - var e = _ref3.e, - opt = _ref3.opt; - var w = this.w; - var ttCtx = this.ttCtx; - var tooltipEl = ttCtx.getElTooltip(); - var bx = 0; - var x = 0; - var y = 0; // let bW = 0 - - var i = 0; - var strokeWidth; - var barXY = this.getBarTooltipXY({ - e: e, - opt: opt - }); - i = barXY.i; - var barHeight = barXY.barHeight; - var j = barXY.j; - - if (w.globals.isBarHorizontal && ttCtx.hasBars() || !w.config.tooltip.shared) { - x = barXY.x; - y = barXY.y; - strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width; // bW = barXY.barWidth - - bx = x; - } else { - if (!w.globals.comboCharts && !w.config.tooltip.shared) { - bx = bx / 2; - } - } // y is NaN, make it touch the bottom of grid area - - - if (isNaN(y)) { - y = w.globals.svgHeight - ttCtx.tooltipRect.ttHeight; - } // x exceeds gridWidth - - - if (x + ttCtx.tooltipRect.ttWidth > w.globals.gridWidth) { - x = x - ttCtx.tooltipRect.ttWidth; - } else if (x < 0) { - x = x + ttCtx.tooltipRect.ttWidth; - } - - if (ttCtx.w.config.tooltip.followCursor) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - y = ttCtx.e.clientY - seriesBound.top; - } // if tooltip is still null, querySelector - - - if (ttCtx.tooltip === null) { - ttCtx.tooltip = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip'); - } - - if (!w.config.tooltip.shared) { - if (w.globals.comboChartsHasBars) { - ttCtx.tooltipPosition.moveXCrosshairs(bx + strokeWidth / 2); - } else { - ttCtx.tooltipPosition.moveXCrosshairs(bx); - } - } // move tooltip here - - - if (!ttCtx.fixedTooltip && (!w.config.tooltip.shared || w.globals.isBarHorizontal && ttCtx.hasBars())) { - if (isReversed) { - x = w.globals.gridWidth - x; - } - - tooltipEl.style.left = x + w.globals.translateX + 'px'; - var seriesIndex = parseInt(opt.paths.parentNode.getAttribute('data:realIndex')); - var isReversed = w.globals.isMultipleYAxis ? w.config.yaxis[seriesIndex] && w.config.yaxis[seriesIndex].reversed : w.config.yaxis[0].reversed; - - if (isReversed && !(w.globals.isBarHorizontal && ttCtx.hasBars())) { - y = y + barHeight - (w.globals.series[i][j] < 0 ? barHeight : 0) * 2; - } - - if (ttCtx.tooltipRect.ttHeight + y > w.globals.gridHeight) { - y = w.globals.gridHeight - ttCtx.tooltipRect.ttHeight + w.globals.translateY; - tooltipEl.style.top = y + 'px'; - } else { - tooltipEl.style.top = y + w.globals.translateY - ttCtx.tooltipRect.ttHeight / 2 + 'px'; - } - } - } - }, { - key: "getBarTooltipXY", - value: function getBarTooltipXY(_ref4) { - var e = _ref4.e, - opt = _ref4.opt; - var w = this.w; - var j = null; - var ttCtx = this.ttCtx; - var i = 0; - var x = 0; - var y = 0; - var barWidth = 0; - var barHeight = 0; - var cl = e.target.classList; - - if (cl.contains('apexcharts-bar-area') || cl.contains('apexcharts-candlestick-area') || cl.contains('apexcharts-rangebar-area')) { - var bar = e.target; - var barRect = bar.getBoundingClientRect(); - var seriesBound = opt.elGrid.getBoundingClientRect(); - var bh = barRect.height; - barHeight = barRect.height; - var bw = barRect.width; - var cx = parseInt(bar.getAttribute('cx')); - var cy = parseInt(bar.getAttribute('cy')); - barWidth = parseFloat(bar.getAttribute('barWidth')); - var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; - j = parseInt(bar.getAttribute('j')); - i = parseInt(bar.parentNode.getAttribute('rel')) - 1; - - if (w.globals.comboCharts) { - i = parseInt(bar.parentNode.getAttribute('data:realIndex')); - } // if (w.config.tooltip.shared) { - // this check not needed at the moment - // const yDivisor = w.globals.gridHeight / (w.globals.series.length) - // const hoverY = ttCtx.clientY - ttCtx.seriesBound.top - // j = Math.ceil(hoverY / yDivisor) - // } - - - ttCtx.tooltipLabels.drawSeriesTexts({ - ttItems: opt.ttItems, - i: i, - j: j, - shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared - }); - - if (w.config.tooltip.followCursor) { - if (w.globals.isBarHorizontal) { - x = clientX - seriesBound.left + 15; - y = cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2; - } else { - if (w.globals.isXNumeric) { - x = cx - bw / 2; - } else { - x = cx - ttCtx.dataPointsDividedWidth + bw / 2; - } - - y = e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2 - 15; - } - } else { - if (w.globals.isBarHorizontal) { - x = cx; - - if (x < ttCtx.xyRatios.baseLineInvertedY) { - x = cx - ttCtx.tooltipRect.ttWidth; - } - - y = cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2; - } else { - // if columns - if (w.globals.isXNumeric) { - x = cx - bw / 2; - } else { - x = cx - ttCtx.dataPointsDividedWidth + bw / 2; - } - - y = cy; // - ttCtx.tooltipRect.ttHeight / 2 + 10 - } - } - } - - return { - x: x, - y: y, - barHeight: barHeight, - barWidth: barWidth, - i: i, - j: j - }; - } - }]); - - return Intersect; - }(); - - /** - * ApexCharts Tooltip.AxesTooltip Class. - * - * @module Tooltip.AxesTooltip - **/ - var AxesTooltip = - /*#__PURE__*/ - function () { - function AxesTooltip(tooltipContext) { - _classCallCheck(this, AxesTooltip); - - this.w = tooltipContext.w; - this.ttCtx = tooltipContext; - } - /** - * This method adds the secondary tooltip which appears below x axis - * @memberof Tooltip - **/ - - - _createClass(AxesTooltip, [{ - key: "drawXaxisTooltip", - value: function drawXaxisTooltip() { - var w = this.w; - var ttCtx = this.ttCtx; - var isBottom = w.config.xaxis.position === 'bottom'; - ttCtx.xaxisOffY = isBottom ? w.globals.gridHeight + 1 : 1; - var tooltipCssClass = isBottom ? 'apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom' : 'apexcharts-xaxistooltip apexcharts-xaxistooltip-top'; - var renderTo = w.globals.dom.elWrap; - - if (ttCtx.blxaxisTooltip) { - var xaxisTooltip = w.globals.dom.baseEl.querySelector('.apexcharts-xaxistooltip'); - - if (xaxisTooltip === null) { - ttCtx.xaxisTooltip = document.createElement('div'); - ttCtx.xaxisTooltip.setAttribute('class', tooltipCssClass + ' ' + w.config.tooltip.theme); - renderTo.appendChild(ttCtx.xaxisTooltip); - ttCtx.xaxisTooltipText = document.createElement('div'); - ttCtx.xaxisTooltipText.classList.add('apexcharts-xaxistooltip-text'); - ttCtx.xaxisTooltipText.style.fontFamily = w.config.xaxis.tooltip.style.fontFamily || w.config.chart.fontFamily; - ttCtx.xaxisTooltipText.style.fontSize = w.config.xaxis.tooltip.style.fontSize; - ttCtx.xaxisTooltip.appendChild(ttCtx.xaxisTooltipText); - } - } - } - /** - * This method adds the secondary tooltip which appears below x axis - * @memberof Tooltip - **/ - - }, { - key: "drawYaxisTooltip", - value: function drawYaxisTooltip() { - var w = this.w; - var ttCtx = this.ttCtx; - - for (var i = 0; i < w.config.yaxis.length; i++) { - var isRight = w.config.yaxis[i].opposite || w.config.yaxis[i].crosshairs.opposite; - ttCtx.yaxisOffX = isRight ? w.globals.gridWidth + 1 : 1; - var tooltipCssClass = isRight ? "apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i, " apexcharts-yaxistooltip-right") : "apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i, " apexcharts-yaxistooltip-left"); - var renderTo = w.globals.dom.elWrap; - - if (ttCtx.blyaxisTooltip) { - var yaxisTooltip = w.globals.dom.baseEl.querySelector(".apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i)); - - if (yaxisTooltip === null) { - ttCtx.yaxisTooltip = document.createElement('div'); - ttCtx.yaxisTooltip.setAttribute('class', tooltipCssClass + ' ' + w.config.tooltip.theme); - renderTo.appendChild(ttCtx.yaxisTooltip); - if (i === 0) ttCtx.yaxisTooltipText = []; - ttCtx.yaxisTooltipText.push(document.createElement('div')); - ttCtx.yaxisTooltipText[i].classList.add('apexcharts-yaxistooltip-text'); - ttCtx.yaxisTooltip.appendChild(ttCtx.yaxisTooltipText[i]); - } - } - } - } - /** - * @memberof Tooltip - **/ - - }, { - key: "setXCrosshairWidth", - value: function setXCrosshairWidth() { - var w = this.w; - var ttCtx = this.ttCtx; // set xcrosshairs width - - var xcrosshairs = ttCtx.getElXCrosshairs(); - ttCtx.xcrosshairsWidth = parseInt(w.config.xaxis.crosshairs.width); - - if (!w.globals.comboCharts) { - if (w.config.xaxis.crosshairs.width === 'tickWidth') { - var count = w.globals.labels.length; - ttCtx.xcrosshairsWidth = w.globals.gridWidth / count; - } else if (w.config.xaxis.crosshairs.width === 'barWidth') { - var bar = w.globals.dom.baseEl.querySelector('.apexcharts-bar-area'); - - if (bar !== null) { - var barWidth = parseFloat(bar.getAttribute('barWidth')); - ttCtx.xcrosshairsWidth = barWidth; - } else { - ttCtx.xcrosshairsWidth = 1; - } - } - } else { - var _bar = w.globals.dom.baseEl.querySelector('.apexcharts-bar-area'); - - if (_bar !== null && w.config.xaxis.crosshairs.width === 'barWidth') { - var _barWidth = parseFloat(_bar.getAttribute('barWidth')); - - ttCtx.xcrosshairsWidth = _barWidth; - } else { - if (w.config.xaxis.crosshairs.width === 'tickWidth') { - var _count = w.globals.labels.length; - ttCtx.xcrosshairsWidth = w.globals.gridWidth / _count; - } - } - } - - if (w.globals.isBarHorizontal) { - ttCtx.xcrosshairsWidth = 0; - } - - if (xcrosshairs !== null && ttCtx.xcrosshairsWidth > 0) { - xcrosshairs.setAttribute('width', ttCtx.xcrosshairsWidth); - } - } - }, { - key: "handleYCrosshair", - value: function handleYCrosshair() { - var w = this.w; - var ttCtx = this.ttCtx; // set ycrosshairs height - - ttCtx.ycrosshairs = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs'); - ttCtx.ycrosshairsHidden = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs-hidden'); - } - }, { - key: "drawYaxisTooltipText", - value: function drawYaxisTooltipText(index, clientY, xyRatios) { - var ttCtx = this.ttCtx; - var w = this.w; - var lbFormatter = w.globals.yLabelFormatters[index]; - - if (ttCtx.blyaxisTooltip) { - var elGrid = ttCtx.getElGrid(); - var seriesBound = elGrid.getBoundingClientRect(); - var hoverY = (clientY - seriesBound.top) * xyRatios.yRatio[index]; - var height = w.globals.maxYArr[index] - w.globals.minYArr[index]; - var val = w.globals.minYArr[index] + (height - hoverY); - ttCtx.tooltipPosition.moveYCrosshairs(clientY - seriesBound.top); - ttCtx.yaxisTooltipText[index].innerHTML = lbFormatter(val); - ttCtx.tooltipPosition.moveYAxisTooltip(index); - } - } - }]); - - return AxesTooltip; - }(); - - /** - * ApexCharts Core Tooltip Class to handle the tooltip generation. - * - * @module Tooltip - **/ - - var Tooltip = - /*#__PURE__*/ - function () { - function Tooltip(ctx) { - _classCallCheck(this, Tooltip); - - this.ctx = ctx; - this.w = ctx.w; - var w = this.w; - this.tConfig = w.config.tooltip; - this.tooltipUtil = new Utils$1(this); - this.tooltipLabels = new Labels(this); - this.tooltipPosition = new Position(this); - this.marker = new Marker(this); - this.intersect = new Intersect(this); - this.axesTooltip = new AxesTooltip(this); - this.showOnIntersect = this.tConfig.intersect; - this.showTooltipTitle = this.tConfig.x.show; - this.fixedTooltip = this.tConfig.fixed.enabled; - this.xaxisTooltip = null; - this.yaxisTTEls = null; - this.isBarShared = !w.globals.isBarHorizontal && this.tConfig.shared; - } - - _createClass(Tooltip, [{ - key: "getElTooltip", - value: function getElTooltip(ctx) { - if (!ctx) ctx = this; - return ctx.w.globals.dom.baseEl.querySelector('.apexcharts-tooltip'); - } - }, { - key: "getElXCrosshairs", - value: function getElXCrosshairs() { - return this.w.globals.dom.baseEl.querySelector('.apexcharts-xcrosshairs'); - } - }, { - key: "getElGrid", - value: function getElGrid() { - return this.w.globals.dom.baseEl.querySelector('.apexcharts-grid'); - } - }, { - key: "drawTooltip", - value: function drawTooltip(xyRatios) { - var w = this.w; - this.xyRatios = xyRatios; - this.blxaxisTooltip = w.config.xaxis.tooltip.enabled && w.globals.axisCharts; - this.blyaxisTooltip = w.config.yaxis[0].tooltip.enabled && w.globals.axisCharts; - this.allTooltipSeriesGroups = []; - - if (!w.globals.axisCharts) { - this.showTooltipTitle = false; - } - - var tooltipEl = document.createElement('div'); - tooltipEl.classList.add('apexcharts-tooltip'); - tooltipEl.classList.add(this.tConfig.theme); - w.globals.dom.elWrap.appendChild(tooltipEl); - - if (w.globals.axisCharts) { - this.axesTooltip.drawXaxisTooltip(); - this.axesTooltip.drawYaxisTooltip(); - this.axesTooltip.setXCrosshairWidth(); - this.axesTooltip.handleYCrosshair(); - var xAxis = new XAxis(this.ctx); - this.xAxisTicksPositions = xAxis.getXAxisTicksPositions(); - } // we forcefully set intersect true for these conditions - - - if (w.globals.comboCharts && !this.tConfig.shared || this.tConfig.intersect && !this.tConfig.shared || (w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') && !this.tConfig.shared) { - this.showOnIntersect = true; - } - - if (w.config.markers.size === 0 || w.globals.markers.largestSize === 0) { - // when user don't want to show points all the time, but only on when hovering on series - this.marker.drawDynamicPoints(this); - } // no visible series, exit - - - if (w.globals.collapsedSeries.length === w.globals.series.length) return; - this.dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints; - this.dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints; - - if (this.showTooltipTitle) { - this.tooltipTitle = document.createElement('div'); - this.tooltipTitle.classList.add('apexcharts-tooltip-title'); - this.tooltipTitle.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily; - this.tooltipTitle.style.fontSize = this.tConfig.style.fontSize; - tooltipEl.appendChild(this.tooltipTitle); - } - - var ttItemsCnt = w.globals.series.length; // whether shared or not, default is shared - - if ((w.globals.xyCharts || w.globals.comboCharts) && this.tConfig.shared) { - if (!this.showOnIntersect) { - ttItemsCnt = w.globals.series.length; - } else { - ttItemsCnt = 1; - } - } - - this.ttItems = this.createTTElements(ttItemsCnt); - this.addSVGEvents(); - } - }, { - key: "createTTElements", - value: function createTTElements(ttItemsCnt) { - var w = this.w; - var ttItems = []; - var tooltipEl = this.getElTooltip(); - - for (var i = 0; i < ttItemsCnt; i++) { - var gTxt = document.createElement('div'); - gTxt.classList.add('apexcharts-tooltip-series-group'); - - if (this.tConfig.shared && this.tConfig.enabledOnSeries && Array.isArray(this.tConfig.enabledOnSeries)) { - if (this.tConfig.enabledOnSeries.indexOf(i) < 0) { - gTxt.classList.add('apexcharts-tooltip-series-group-hidden'); - } - } - - var point = document.createElement('span'); - point.classList.add('apexcharts-tooltip-marker'); - point.style.backgroundColor = w.globals.colors[i]; - gTxt.appendChild(point); - var gYZ = document.createElement('div'); - gYZ.classList.add('apexcharts-tooltip-text'); - gYZ.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily; - gYZ.style.fontSize = this.tConfig.style.fontSize; // y values group - - var gYValText = document.createElement('div'); - gYValText.classList.add('apexcharts-tooltip-y-group'); - var txtLabel = document.createElement('span'); - txtLabel.classList.add('apexcharts-tooltip-text-label'); - gYValText.appendChild(txtLabel); - var txtValue = document.createElement('span'); - txtValue.classList.add('apexcharts-tooltip-text-value'); - gYValText.appendChild(txtValue); // z values group - - var gZValText = document.createElement('div'); - gZValText.classList.add('apexcharts-tooltip-z-group'); - var txtZLabel = document.createElement('span'); - txtZLabel.classList.add('apexcharts-tooltip-text-z-label'); - gZValText.appendChild(txtZLabel); - var txtZValue = document.createElement('span'); - txtZValue.classList.add('apexcharts-tooltip-text-z-value'); - gZValText.appendChild(txtZValue); - gYZ.appendChild(gYValText); - gYZ.appendChild(gZValText); - gTxt.appendChild(gYZ); - tooltipEl.appendChild(gTxt); - ttItems.push(gTxt); - } - - return ttItems; - } - }, { - key: "addSVGEvents", - value: function addSVGEvents() { - var w = this.w; - var type = w.config.chart.type; - var tooltipEl = this.getElTooltip(); - var commonBar = !!(type === 'bar' || type === 'candlestick' || type === 'rangeBar'); - var hoverArea = w.globals.dom.Paper.node; - var elGrid = this.getElGrid(); - - if (elGrid) { - this.seriesBound = elGrid.getBoundingClientRect(); - } - - var tooltipY = []; - var tooltipX = []; - var seriesHoverParams = { - hoverArea: hoverArea, - elGrid: elGrid, - tooltipEl: tooltipEl, - tooltipY: tooltipY, - tooltipX: tooltipX, - ttItems: this.ttItems - }; - var points; - - if (w.globals.axisCharts) { - if (type === 'area' || type === 'line' || type === 'scatter' || type === 'bubble') { - points = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:longestSeries='true'] .apexcharts-marker"); - } else if (commonBar) { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-rangebar-area'); - } else if (type === 'heatmap') { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-heatmap'); - } else if (type === 'radar') { - points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-marker'); - } - - if (points && points.length) { - for (var p = 0; p < points.length; p++) { - tooltipY.push(points[p].getAttribute('cy')); - tooltipX.push(points[p].getAttribute('cx')); - } - } - } - - var validSharedChartTypes = w.globals.xyCharts && !this.showOnIntersect || w.globals.comboCharts && !this.showOnIntersect || commonBar && this.hasBars() && this.tConfig.shared; - - if (validSharedChartTypes) { - this.addPathsEventListeners([hoverArea], seriesHoverParams); - } else if (commonBar && !w.globals.comboCharts) { - this.addBarsEventListeners(seriesHoverParams); - } else if (type === 'bubble' || type === 'scatter' || type === 'radar' || this.showOnIntersect && (type === 'area' || type === 'line')) { - this.addPointsEventsListeners(seriesHoverParams); - } else if (!w.globals.axisCharts || type === 'heatmap') { - var seriesAll = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series'); - this.addPathsEventListeners(seriesAll, seriesHoverParams); - } - - if (this.showOnIntersect) { - var linePoints = w.globals.dom.baseEl.querySelectorAll('.apexcharts-line-series .apexcharts-marker'); - - if (linePoints.length > 0) { - // if we find any lineSeries, addEventListeners for them - this.addPathsEventListeners(linePoints, seriesHoverParams); - } - - var areaPoints = w.globals.dom.baseEl.querySelectorAll('.apexcharts-area-series .apexcharts-marker'); - - if (areaPoints.length > 0) { - // if we find any areaSeries, addEventListeners for them - this.addPathsEventListeners(areaPoints, seriesHoverParams); - } // combo charts may have bars, so add event listeners here too - - - if (this.hasBars() && !this.tConfig.shared) { - this.addBarsEventListeners(seriesHoverParams); - } - } - } - }, { - key: "drawFixedTooltipRect", - value: function drawFixedTooltipRect() { - var w = this.w; - var tooltipEl = this.getElTooltip(); - var tooltipRect = tooltipEl.getBoundingClientRect(); - var ttWidth = tooltipRect.width + 10; - var ttHeight = tooltipRect.height + 10; - var x = this.tConfig.fixed.offsetX; - var y = this.tConfig.fixed.offsetY; - - if (this.tConfig.fixed.position.toLowerCase().indexOf('right') > -1) { - x = x + w.globals.svgWidth - ttWidth + 10; - } - - if (this.tConfig.fixed.position.toLowerCase().indexOf('bottom') > -1) { - y = y + w.globals.svgHeight - ttHeight - 10; - } - - tooltipEl.style.left = x + 'px'; - tooltipEl.style.top = y + 'px'; - return { - x: x, - y: y, - ttWidth: ttWidth, - ttHeight: ttHeight - }; - } - }, { - key: "addPointsEventsListeners", - value: function addPointsEventsListeners(seriesHoverParams) { - var w = this.w; - var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers .apexcharts-marker'); - this.addPathsEventListeners(points, seriesHoverParams); - } - }, { - key: "addBarsEventListeners", - value: function addBarsEventListeners(seriesHoverParams) { - var w = this.w; - var bars = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-rangebar-area'); - this.addPathsEventListeners(bars, seriesHoverParams); - } - }, { - key: "addPathsEventListeners", - value: function addPathsEventListeners(paths, opts) { - var _this = this; - - var self = this; - - var _loop = function _loop(p) { - var extendedOpts = { - paths: paths[p], - tooltipEl: opts.tooltipEl, - tooltipY: opts.tooltipY, - tooltipX: opts.tooltipX, - elGrid: opts.elGrid, - hoverArea: opts.hoverArea, - ttItems: opts.ttItems - }; - _this.w.globals.tooltipOpts = extendedOpts; - var events = ['mousemove', 'mouseup', 'touchmove', 'mouseout', 'touchend']; - events.map(function (ev) { - return paths[p].addEventListener(ev, self.seriesHover.bind(self, extendedOpts), { - capture: false, - passive: true - }); - }); - }; - - for (var p = 0; p < paths.length; p++) { - _loop(p); - } - } - /* - ** The actual series hover function - */ - - }, { - key: "seriesHover", - value: function seriesHover(opt, e) { - var _this2 = this; - - var chartGroups = []; - var w = this.w; // if user has more than one charts in group, we need to sync - - if (w.config.chart.group) { - chartGroups = this.ctx.getGroupedCharts(); - } - - if (w.globals.axisCharts && (w.globals.minX === -Infinity && w.globals.maxX === Infinity || w.globals.dataPoints === 0)) { - return; - } - - if (chartGroups.length) { - chartGroups.forEach(function (ch) { - var tooltipEl = _this2.getElTooltip(ch); - - var newOpts = { - paths: opt.paths, - tooltipEl: tooltipEl, - tooltipY: opt.tooltipY, - tooltipX: opt.tooltipX, - elGrid: opt.elGrid, - hoverArea: opt.hoverArea, - ttItems: ch.w.globals.tooltip.ttItems // all the charts should have the same minX and maxX (same xaxis) for multiple tooltips to work correctly - - }; - - if (ch.w.globals.minX === _this2.w.globals.minX && ch.w.globals.maxX === _this2.w.globals.maxX) { - ch.w.globals.tooltip.seriesHoverByContext({ - chartCtx: ch, - ttCtx: ch.w.globals.tooltip, - opt: newOpts, - e: e - }); - } - }); - } else { - this.seriesHoverByContext({ - chartCtx: this.ctx, - ttCtx: this.w.globals.tooltip, - opt: opt, - e: e - }); - } - } - }, { - key: "seriesHoverByContext", - value: function seriesHoverByContext(_ref) { - var chartCtx = _ref.chartCtx, - ttCtx = _ref.ttCtx, - opt = _ref.opt, - e = _ref.e; - var w = chartCtx.w; - var tooltipEl = this.getElTooltip(); // tooltipRect is calculated on every mousemove, because the text is dynamic - - ttCtx.tooltipRect = { - x: 0, - y: 0, - ttWidth: tooltipEl.getBoundingClientRect().width, - ttHeight: tooltipEl.getBoundingClientRect().height - }; - ttCtx.e = e; // highlight the current hovered bars - - if (ttCtx.hasBars() && !w.globals.comboCharts && !ttCtx.isBarShared) { - if (this.tConfig.onDatasetHover.highlightDataSeries) { - var series = new Series(chartCtx); - series.toggleSeriesOnHover(e, e.target.parentNode); - } - } - - if (ttCtx.fixedTooltip) { - ttCtx.drawFixedTooltipRect(); - } - - if (w.globals.axisCharts) { - ttCtx.axisChartsTooltips({ - e: e, - opt: opt, - tooltipRect: ttCtx.tooltipRect - }); - } else { - // non-plot charts i.e pie/donut/circle - ttCtx.nonAxisChartsTooltips({ - e: e, - opt: opt, - tooltipRect: ttCtx.tooltipRect - }); - } - } // tooltip handling for line/area/bar/columns/scatter - - }, { - key: "axisChartsTooltips", - value: function axisChartsTooltips(_ref2) { - var e = _ref2.e, - opt = _ref2.opt; - var w = this.w; - var j, x, y; - var self = this; - var capj = null; - var seriesBound = opt.elGrid.getBoundingClientRect(); - var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; - var clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY; - this.clientY = clientY; - this.clientX = clientX; - - if (clientY < seriesBound.top || clientY > seriesBound.top + seriesBound.height) { - self.handleMouseOut(opt); - return; - } - - if (Array.isArray(this.tConfig.enabledOnSeries)) { - var index = parseInt(opt.paths.getAttribute('index')); - - if (this.tConfig.enabledOnSeries.indexOf(index) < 0) { - self.handleMouseOut(opt); - return; - } - } - - var tooltipEl = this.getElTooltip(); - var xcrosshairs = this.getElXCrosshairs(); - var isStickyTooltip = w.globals.xyCharts || w.config.chart.type === 'bar' && !w.globals.isBarHorizontal && this.hasBars() && this.tConfig.shared || w.globals.comboCharts && this.hasBars; - - if (w.globals.isBarHorizontal && this.hasBars()) { - isStickyTooltip = false; - } - - if (e.type === 'mousemove' || e.type === 'touchmove' || e.type === 'mouseup') { - if (xcrosshairs !== null) { - xcrosshairs.classList.add('active'); - } - - if (self.ycrosshairs !== null && self.blyaxisTooltip) { - self.ycrosshairs.classList.add('active'); - } - - if (isStickyTooltip && !self.showOnIntersect) { - capj = self.tooltipUtil.getNearestValues({ - context: self, - hoverArea: opt.hoverArea, - elGrid: opt.elGrid, - clientX: clientX, - clientY: clientY, - hasBars: self.hasBars - }); - j = capj.j; - var capturedSeries = capj.capturedSeries; - - if (capj.hoverX < 0 || capj.hoverX > w.globals.gridWidth) { - self.handleMouseOut(opt); - return; - } - - if (capturedSeries !== null) { - var ignoreNull = w.globals.series[capturedSeries][j] === null; - - if (ignoreNull) { - opt.tooltipEl.classList.remove('active'); - return; - } - - if (typeof w.globals.series[capturedSeries][j] !== 'undefined') { - if (this.tConfig.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isinitialSeriesSameLen()) { - this.create(e, self, capturedSeries, j, opt.ttItems); - } else { - this.create(e, self, capturedSeries, j, opt.ttItems, false); - } - } else { - if (this.tooltipUtil.isXoverlap(j)) { - self.create(e, self, 0, j, opt.ttItems); - } - } - } else { - // couldn't capture any series. check if shared X is same, - // if yes, draw a grouped tooltip - if (this.tooltipUtil.isXoverlap(j)) { - self.create(e, self, 0, j, opt.ttItems); - } - } - } else { - if (w.config.chart.type === 'heatmap') { - var markerXY = this.intersect.handleHeatTooltip({ - e: e, - opt: opt, - x: x, - y: y - }); - x = markerXY.x; - y = markerXY.y; - tooltipEl.style.left = x + 'px'; - tooltipEl.style.top = y + 'px'; - } else { - if (this.hasBars) { - this.intersect.handleBarTooltip({ - e: e, - opt: opt - }); - } - - if (this.hasMarkers) { - // intersect - line/area/scatter/bubble - this.intersect.handleMarkerTooltip({ - e: e, - opt: opt, - x: x, - y: y - }); - } - } - } - - if (this.blyaxisTooltip) { - for (var yt = 0; yt < w.config.yaxis.length; yt++) { - self.axesTooltip.drawYaxisTooltipText(yt, clientY, self.xyRatios); - } - } - - opt.tooltipEl.classList.add('active'); - } else if (e.type === 'mouseout' || e.type === 'touchend') { - this.handleMouseOut(opt); - } - } // tooltip handling for pie/donuts - - }, { - key: "nonAxisChartsTooltips", - value: function nonAxisChartsTooltips(_ref3) { - var e = _ref3.e, - opt = _ref3.opt, - tooltipRect = _ref3.tooltipRect; - var w = this.w; - var rel = opt.paths.getAttribute('rel'); - var tooltipEl = this.getElTooltip(); - var seriesBound = w.globals.dom.elWrap.getBoundingClientRect(); - - if (e.type === 'mousemove' || e.type === 'touchmove') { - tooltipEl.classList.add('active'); - this.tooltipLabels.drawSeriesTexts({ - ttItems: opt.ttItems, - i: parseInt(rel) - 1, - shared: false - }); - var x = w.globals.clientX - seriesBound.left - tooltipRect.ttWidth / 2; - var y = w.globals.clientY - seriesBound.top - tooltipRect.ttHeight - 10; - tooltipEl.style.left = x + 'px'; - tooltipEl.style.top = y + 'px'; - } else if (e.type === 'mouseout' || e.type === 'touchend') { - tooltipEl.classList.remove('active'); - } - } - }, { - key: "deactivateHoverFilter", - value: function deactivateHoverFilter() { - var w = this.w; - var graphics = new Graphics(this.ctx); - var allPaths = w.globals.dom.Paper.select(".apexcharts-bar-area"); - - for (var b = 0; b < allPaths.length; b++) { - graphics.pathMouseLeave(allPaths[b]); - } - } - }, { - key: "handleMouseOut", - value: function handleMouseOut(opt) { - var w = this.w; - var xcrosshairs = this.getElXCrosshairs(); - opt.tooltipEl.classList.remove('active'); - this.deactivateHoverFilter(); - - if (w.config.chart.type !== 'bubble') { - this.marker.resetPointsSize(); - } - - if (xcrosshairs !== null) { - xcrosshairs.classList.remove('active'); - } - - if (this.ycrosshairs !== null) { - this.ycrosshairs.classList.remove('active'); - } - - if (this.blxaxisTooltip) { - this.xaxisTooltip.classList.remove('active'); - } - - if (this.blyaxisTooltip) { - if (this.yaxisTTEls === null) { - this.yaxisTTEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxistooltip'); - } - - for (var i = 0; i < this.yaxisTTEls.length; i++) { - this.yaxisTTEls[i].classList.remove('active'); - } - } - } - }, { - key: "getElMarkers", - value: function getElMarkers() { - return this.w.globals.dom.baseEl.querySelectorAll(' .apexcharts-series-markers'); - } - }, { - key: "getAllMarkers", - value: function getAllMarkers() { - return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers .apexcharts-marker'); - } - }, { - key: "hasMarkers", - value: function hasMarkers() { - var markers = this.getElMarkers(); - return markers.length > 0; - } - }, { - key: "getElBars", - value: function getElBars() { - return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-rangebar-series'); - } - }, { - key: "hasBars", - value: function hasBars() { - var bars = this.getElBars(); - return bars.length > 0; - } - }, { - key: "markerClick", - value: function markerClick(e, seriesIndex, dataPointIndex) { - var w = this.w; - - if (typeof w.config.chart.events.markerClick === 'function') { - w.config.chart.events.markerClick(e, this.ctx, { - seriesIndex: seriesIndex, - dataPointIndex: dataPointIndex, - w: w - }); - } - - this.ctx.fireEvent('markerClick', [e, this.ctx, { - seriesIndex: seriesIndex, - dataPointIndex: dataPointIndex, - w: w - }]); - } - }, { - key: "create", - value: function create(e, context, capturedSeries, j, ttItems) { - var shared = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; - var w = this.w; - var ttCtx = context; - - if (e.type === 'mouseup') { - this.markerClick(e, capturedSeries, j); - } - - if (shared === null) shared = this.tConfig.shared; - var hasMarkers = this.hasMarkers(); - var bars = this.getElBars(); - - if (shared) { - ttCtx.tooltipLabels.drawSeriesTexts({ - ttItems: ttItems, - i: capturedSeries, - j: j, - shared: this.showOnIntersect ? false : this.tConfig.shared - }); - - if (hasMarkers) { - if (w.globals.markers.largestSize > 0) { - ttCtx.marker.enlargePoints(j); - } else { - ttCtx.tooltipPosition.moveDynamicPointsOnHover(j); - } - } - - if (this.hasBars()) { - this.barSeriesHeight = this.tooltipUtil.getBarsHeight(bars); - - if (this.barSeriesHeight > 0) { - // hover state, activate snap filter - var graphics = new Graphics(this.ctx); - var paths = w.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(j, "']")); // de-activate first - - this.deactivateHoverFilter(); - this.tooltipPosition.moveStickyTooltipOverBars(j); - - for (var b = 0; b < paths.length; b++) { - graphics.pathMouseEnter(paths[b]); - } - } - } - } else { - ttCtx.tooltipLabels.drawSeriesTexts({ - shared: false, - ttItems: ttItems, - i: capturedSeries, - j: j - }); - - if (this.hasBars()) { - ttCtx.tooltipPosition.moveStickyTooltipOverBars(j); - } - - if (hasMarkers) { - ttCtx.tooltipPosition.moveMarkers(capturedSeries, j); - } - } - } - }]); - - return Tooltip; - }(); - - var icoPan = "\n \n \n \n \n \n \n \n"; - - var icoZoom = "\n \n \n \n"; - - var icoReset = "\n \n \n"; - - var icoZoomIn = "\n \n \n\n"; - - var icoZoomOut = "\n \n \n\n"; - - var icoSelect = "\n \n \n"; - - var icoMenu = ""; - - /** - * ApexCharts Toolbar Class for creating toolbar in axis based charts. - * - * @module Toolbar - **/ - - var Toolbar = - /*#__PURE__*/ - function () { - function Toolbar(ctx) { - _classCallCheck(this, Toolbar); - - this.ctx = ctx; - this.w = ctx.w; - this.ev = this.w.config.chart.events; - this.localeValues = this.w.globals.locale.toolbar; - } - - _createClass(Toolbar, [{ - key: "createToolbar", - value: function createToolbar() { - var w = this.w; - var elToolbarWrap = document.createElement('div'); - elToolbarWrap.setAttribute('class', 'apexcharts-toolbar'); - w.globals.dom.elWrap.appendChild(elToolbarWrap); - this.elZoom = document.createElement('div'); - this.elZoomIn = document.createElement('div'); - this.elZoomOut = document.createElement('div'); - this.elPan = document.createElement('div'); - this.elSelection = document.createElement('div'); - this.elZoomReset = document.createElement('div'); - this.elMenuIcon = document.createElement('div'); - this.elMenu = document.createElement('div'); - this.elCustomIcons = []; - this.t = w.config.chart.toolbar.tools; - - if (Array.isArray(this.t.customIcons)) { - for (var i = 0; i < this.t.customIcons.length; i++) { - this.elCustomIcons.push(document.createElement('div')); - } - } - - this.elMenuItems = []; - var toolbarControls = []; - - if (this.t.zoomin && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: this.elZoomIn, - icon: typeof this.t.zoomin === 'string' ? this.t.zoomin : icoZoomIn, - title: this.localeValues.zoomIn, - class: 'apexcharts-zoom-in-icon' - }); - } - - if (this.t.zoomout && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: this.elZoomOut, - icon: typeof this.t.zoomout === 'string' ? this.t.zoomout : icoZoomOut, - title: this.localeValues.zoomOut, - class: 'apexcharts-zoom-out-icon' - }); - } - - if (this.t.zoom && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: this.elZoom, - icon: typeof this.t.zoom === 'string' ? this.t.zoom : icoZoom, - title: this.localeValues.selectionZoom, - class: w.globals.isTouchDevice ? 'hidden' : 'apexcharts-zoom-icon' - }); - } - - if (this.t.selection && w.config.chart.selection.enabled) { - toolbarControls.push({ - el: this.elSelection, - icon: typeof this.t.selection === 'string' ? this.t.selection : icoSelect, - title: this.localeValues.selection, - class: w.globals.isTouchDevice ? 'hidden' : 'apexcharts-selection-icon' - }); - } - - if (this.t.pan && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: this.elPan, - icon: typeof this.t.pan === 'string' ? this.t.pan : icoPan, - title: this.localeValues.pan, - class: w.globals.isTouchDevice ? 'hidden' : 'apexcharts-pan-icon' - }); - } - - if (this.t.reset && w.config.chart.zoom.enabled) { - toolbarControls.push({ - el: this.elZoomReset, - icon: typeof this.t.reset === 'string' ? this.t.reset : icoReset, - title: this.localeValues.reset, - class: 'apexcharts-reset-zoom-icon' - }); - } - - if (this.t.download) { - toolbarControls.push({ - el: this.elMenuIcon, - icon: typeof this.t.download === 'string' ? this.t.download : icoMenu, - title: this.localeValues.menu, - class: 'apexcharts-menu-icon' - }); - } - - for (var _i = 0; _i < this.elCustomIcons.length; _i++) { - toolbarControls.push({ - el: this.elCustomIcons[_i], - icon: this.t.customIcons[_i].icon, - title: this.t.customIcons[_i].title, - index: this.t.customIcons[_i].index, - class: 'apexcharts-toolbar-custom-icon ' + this.t.customIcons[_i].class - }); - } - - toolbarControls.forEach(function (t, index) { - if (t.index) { - Utils.moveIndexInArray(toolbarControls, index, t.index); - } - }); - - for (var _i2 = 0; _i2 < toolbarControls.length; _i2++) { - Graphics.setAttrs(toolbarControls[_i2].el, { - class: toolbarControls[_i2].class, - title: toolbarControls[_i2].title - }); - toolbarControls[_i2].el.innerHTML = toolbarControls[_i2].icon; - elToolbarWrap.appendChild(toolbarControls[_i2].el); - } - - elToolbarWrap.appendChild(this.elMenu); - Graphics.setAttrs(this.elMenu, { - class: 'apexcharts-menu' - }); - var menuItems = [{ - name: 'exportSVG', - title: this.localeValues.exportToSVG - }, { - name: 'exportPNG', - title: this.localeValues.exportToPNG - }]; - - for (var _i3 = 0; _i3 < menuItems.length; _i3++) { - this.elMenuItems.push(document.createElement('div')); - this.elMenuItems[_i3].innerHTML = menuItems[_i3].title; - Graphics.setAttrs(this.elMenuItems[_i3], { - class: "apexcharts-menu-item ".concat(menuItems[_i3].name), - title: menuItems[_i3].title - }); - this.elMenu.appendChild(this.elMenuItems[_i3]); - } - - if (w.globals.zoomEnabled) { - this.elZoom.classList.add('selected'); - } else if (w.globals.panEnabled) { - this.elPan.classList.add('selected'); - } else if (w.globals.selectionEnabled) { - this.elSelection.classList.add('selected'); - } - - this.addToolbarEventListeners(); - } - }, { - key: "addToolbarEventListeners", - value: function addToolbarEventListeners() { - var _this = this; - - this.elZoomReset.addEventListener('click', this.handleZoomReset.bind(this)); - this.elSelection.addEventListener('click', this.toggleSelection.bind(this)); - this.elZoom.addEventListener('click', this.toggleZooming.bind(this)); - this.elZoomIn.addEventListener('click', this.handleZoomIn.bind(this)); - this.elZoomOut.addEventListener('click', this.handleZoomOut.bind(this)); - this.elPan.addEventListener('click', this.togglePanning.bind(this)); - this.elMenuIcon.addEventListener('click', this.toggleMenu.bind(this)); - this.elMenuItems.forEach(function (m) { - if (m.classList.contains('exportSVG')) { - m.addEventListener('click', _this.downloadSVG.bind(_this)); - } else if (m.classList.contains('exportPNG')) { - m.addEventListener('click', _this.downloadPNG.bind(_this)); - } - }); - - for (var i = 0; i < this.t.customIcons.length; i++) { - this.elCustomIcons[i].addEventListener('click', this.t.customIcons[i].click); - } - } - }, { - key: "toggleSelection", - value: function toggleSelection() { - this.toggleOtherControls(); - this.w.globals.selectionEnabled = !this.w.globals.selectionEnabled; - - if (!this.elSelection.classList.contains('selected')) { - this.elSelection.classList.add('selected'); - } else { - this.elSelection.classList.remove('selected'); - } - } - }, { - key: "toggleZooming", - value: function toggleZooming() { - this.toggleOtherControls(); - this.w.globals.zoomEnabled = !this.w.globals.zoomEnabled; - - if (!this.elZoom.classList.contains('selected')) { - this.elZoom.classList.add('selected'); - } else { - this.elZoom.classList.remove('selected'); - } - } - }, { - key: "getToolbarIconsReference", - value: function getToolbarIconsReference() { - var w = this.w; - - if (!this.elZoom) { - this.elZoom = w.globals.dom.baseEl.querySelector('.apexcharts-zoom-icon'); - } - - if (!this.elPan) { - this.elPan = w.globals.dom.baseEl.querySelector('.apexcharts-pan-icon'); - } - - if (!this.elSelection) { - this.elSelection = w.globals.dom.baseEl.querySelector('.apexcharts-selection-icon'); - } - } - }, { - key: "enableZooming", - value: function enableZooming() { - this.toggleOtherControls(); - this.w.globals.zoomEnabled = true; - - if (this.elZoom) { - this.elZoom.classList.add('selected'); - } - - if (this.elPan) { - this.elPan.classList.remove('selected'); - } - } - }, { - key: "enablePanning", - value: function enablePanning() { - this.toggleOtherControls(); - this.w.globals.panEnabled = true; - - if (this.elPan) { - this.elPan.classList.add('selected'); - } - - if (this.elZoom) { - this.elZoom.classList.remove('selected'); - } - } - }, { - key: "togglePanning", - value: function togglePanning() { - this.toggleOtherControls(); - this.w.globals.panEnabled = !this.w.globals.panEnabled; - - if (!this.elPan.classList.contains('selected')) { - this.elPan.classList.add('selected'); - } else { - this.elPan.classList.remove('selected'); - } - } - }, { - key: "toggleOtherControls", - value: function toggleOtherControls() { - var w = this.w; - w.globals.panEnabled = false; - w.globals.zoomEnabled = false; - w.globals.selectionEnabled = false; - this.getToolbarIconsReference(); - - if (this.elPan) { - this.elPan.classList.remove('selected'); - } - - if (this.elSelection) { - this.elSelection.classList.remove('selected'); - } - - if (this.elZoom) { - this.elZoom.classList.remove('selected'); - } - } - }, { - key: "handleZoomIn", - value: function handleZoomIn() { - var w = this.w; - var centerX = (w.globals.minX + w.globals.maxX) / 2; - var newMinX = (w.globals.minX + centerX) / 2; - var newMaxX = (w.globals.maxX + centerX) / 2; - - if (!w.globals.disableZoomIn) { - this.zoomUpdateOptions(newMinX, newMaxX); - } - } - }, { - key: "handleZoomOut", - value: function handleZoomOut() { - var w = this.w; // avoid zooming out beyond 1000 which may result in NaN values being printed on x-axis - - if (w.config.xaxis.type === 'datetime' && new Date(w.globals.minX).getUTCFullYear() < 1000) { - return; - } - - var centerX = (w.globals.minX + w.globals.maxX) / 2; - var newMinX = w.globals.minX - (centerX - w.globals.minX); - var newMaxX = w.globals.maxX - (centerX - w.globals.maxX); - - if (!w.globals.disableZoomOut) { - this.zoomUpdateOptions(newMinX, newMaxX); - } - } - }, { - key: "zoomUpdateOptions", - value: function zoomUpdateOptions(newMinX, newMaxX) { - var xaxis = { - min: newMinX, - max: newMaxX - }; - var beforeZoomRange = this.getBeforeZoomRange(xaxis); - - if (beforeZoomRange) { - xaxis = beforeZoomRange.xaxis; - } - - this.w.globals.zoomed = true; - - this.ctx._updateOptions({ - xaxis: xaxis - }, false, this.w.config.chart.animations.dynamicAnimation.enabled); - - this.zoomCallback(xaxis); - } - }, { - key: "zoomCallback", - value: function zoomCallback(xaxis, yaxis) { - if (typeof this.ev.zoomed === 'function') { - this.ev.zoomed(this.ctx, { - xaxis: xaxis, - yaxis: yaxis - }); - } - } - }, { - key: "getBeforeZoomRange", - value: function getBeforeZoomRange(xaxis, yaxis) { - var newRange = null; - - if (typeof this.ev.beforeZoom === 'function') { - newRange = this.ev.beforeZoom(this, { - xaxis: xaxis, - yaxis: yaxis - }); - } - - return newRange; - } - }, { - key: "toggleMenu", - value: function toggleMenu() { - if (this.elMenu.classList.contains('open')) { - this.elMenu.classList.remove('open'); - } else { - this.elMenu.classList.add('open'); - } - } - }, { - key: "downloadPNG", - value: function downloadPNG() { - var downloadPNG = new Exports(this.ctx); - downloadPNG.exportToPng(this.ctx); - this.toggleMenu(); - } - }, { - key: "downloadSVG", - value: function downloadSVG() { - var downloadSVG = new Exports(this.ctx); - downloadSVG.exportToSVG(); - this.toggleMenu(); - } - }, { - key: "handleZoomReset", - value: function handleZoomReset(e) { - var _this2 = this; - - var charts = this.ctx.getSyncedCharts(); - charts.forEach(function (ch) { - var w = ch.w; - - if (w.globals.minX !== w.globals.initialminX && w.globals.maxX !== w.globals.initialmaxX) { - ch.revertDefaultAxisMinMax(); - - if (typeof w.config.chart.events.zoomed === 'function') { - _this2.zoomCallback({ - min: w.config.xaxis.min, - max: w.config.xaxis.max - }); - } - - w.globals.zoomed = false; - - ch._updateSeries(w.globals.initialSeries, w.config.chart.animations.dynamicAnimation.enabled); - } - }); - } - }, { - key: "destroy", - value: function destroy() { - if (this.elZoomReset) { - this.elZoomReset.removeEventListener('click', this.handleZoomReset.bind(this)); - this.elSelection.removeEventListener('click', this.toggleSelection.bind(this)); - this.elZoom.removeEventListener('click', this.toggleZooming.bind(this)); - this.elZoomIn.removeEventListener('click', this.handleZoomIn.bind(this)); - this.elZoomOut.removeEventListener('click', this.handleZoomOut.bind(this)); - this.elPan.removeEventListener('click', this.togglePanning.bind(this)); - this.elMenuIcon.removeEventListener('click', this.toggleMenu.bind(this)); - } - - this.elZoom = null; - this.elZoomIn = null; - this.elZoomOut = null; - this.elPan = null; - this.elSelection = null; - this.elZoomReset = null; - this.elMenuIcon = null; - } - }]); - - return Toolbar; - }(); - - /** - * ApexCharts Zoom Class for handling zooming and panning on axes based charts. - * - * @module ZoomPanSelection - **/ - - var ZoomPanSelection = - /*#__PURE__*/ - function (_Toolbar) { - _inherits(ZoomPanSelection, _Toolbar); - - function ZoomPanSelection(ctx) { - var _this; - - _classCallCheck(this, ZoomPanSelection); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(ZoomPanSelection).call(this, ctx)); - _this.ctx = ctx; - _this.w = ctx.w; - _this.dragged = false; - _this.graphics = new Graphics(_this.ctx); - _this.eventList = ['mousedown', 'mousemove', 'touchstart', 'touchmove', 'mouseup', 'touchend']; - _this.clientX = 0; - _this.clientY = 0; - _this.startX = 0; - _this.endX = 0; - _this.dragX = 0; - _this.startY = 0; - _this.endY = 0; - _this.dragY = 0; - return _this; - } - - _createClass(ZoomPanSelection, [{ - key: "init", - value: function init(_ref) { - var _this2 = this; - - var xyRatios = _ref.xyRatios; - var w = this.w; - var me = this; - this.xyRatios = xyRatios; - this.zoomRect = this.graphics.drawRect(0, 0, 0, 0); - this.selectionRect = this.graphics.drawRect(0, 0, 0, 0); - this.gridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid'); - this.zoomRect.node.classList.add('apexcharts-zoom-rect'); - this.selectionRect.node.classList.add('apexcharts-selection-rect'); - w.globals.dom.elGraphical.add(this.zoomRect); - w.globals.dom.elGraphical.add(this.selectionRect); - - if (w.config.chart.selection.type === 'x') { - this.slDraggableRect = this.selectionRect.draggable({ - minX: 0, - minY: 0, - maxX: w.globals.gridWidth, - maxY: w.globals.gridHeight - }).on('dragmove', this.selectionDragging.bind(this, 'dragging')); - } else if (w.config.chart.selection.type === 'y') { - this.slDraggableRect = this.selectionRect.draggable({ - minX: 0, - maxX: w.globals.gridWidth - }).on('dragmove', this.selectionDragging.bind(this, 'dragging')); - } else { - this.slDraggableRect = this.selectionRect.draggable().on('dragmove', this.selectionDragging.bind(this, 'dragging')); - } - - this.preselectedSelection(); - this.hoverArea = w.globals.dom.baseEl.querySelector(w.globals.chartClass); - this.hoverArea.classList.add('zoomable'); - this.eventList.forEach(function (event) { - _this2.hoverArea.addEventListener(event, me.svgMouseEvents.bind(me, xyRatios), { - capture: false, - passive: true - }); - }); - } // remove the event listeners which were previously added on hover area - - }, { - key: "destroy", - value: function destroy() { - var _this3 = this; - - var me = this; - this.eventList.forEach(function (event) { - if (_this3.hoverArea) { - _this3.hoverArea.removeEventListener(event, me.svgMouseEvents.bind(me, me.xyRatios), { - capture: false, - passive: true - }); - } - }); - - if (this.slDraggableRect) { - this.slDraggableRect.draggable(false); - this.slDraggableRect.off(); - this.selectionRect.off(); - } - - this.selectionRect = null; - this.zoomRect = null; - this.gridRect = null; - } - }, { - key: "svgMouseEvents", - value: function svgMouseEvents(xyRatios, e) { - var w = this.w; - var me = this; - var toolbar = this.ctx.toolbar; - var zoomtype = w.globals.zoomEnabled ? w.config.chart.zoom.type : w.config.chart.selection.type; - - if (e.shiftKey) { - this.shiftWasPressed = true; - toolbar.enablePanning(); - } else { - if (this.shiftWasPressed) { - toolbar.enableZooming(); - this.shiftWasPressed = false; - } - } - - var falsePositives = e.target.classList.contains('apexcharts-selection-rect') || e.target.parentNode.classList.contains('apexcharts-toolbar'); - if (falsePositives) return; - me.clientX = e.type === 'touchmove' || e.type === 'touchstart' ? e.touches[0].clientX : e.type === 'touchend' ? e.changedTouches[0].clientX : e.clientX; - me.clientY = e.type === 'touchmove' || e.type === 'touchstart' ? e.touches[0].clientY : e.type === 'touchend' ? e.changedTouches[0].clientY : e.clientY; - - if (e.type === 'mousedown' && e.which === 1) { - var gridRectDim = me.gridRect.getBoundingClientRect(); - me.startX = me.clientX - gridRectDim.left; - me.startY = me.clientY - gridRectDim.top; - me.dragged = false; - me.w.globals.mousedown = true; - } - - if (e.type === 'mousemove' && e.which === 1 || e.type === 'touchmove') { - me.dragged = true; - - if (w.globals.panEnabled) { - w.globals.selection = null; - - if (me.w.globals.mousedown) { - me.panDragging({ - context: me, - zoomtype: zoomtype, - xyRatios: xyRatios - }); - } - } else { - if (me.w.globals.mousedown && w.globals.zoomEnabled || me.w.globals.mousedown && w.globals.selectionEnabled) { - me.selection = me.selectionDrawing({ - context: me, - zoomtype: zoomtype - }); - } - } - } - - if (e.type === 'mouseup' || e.type === 'touchend') { - // we will be calling getBoundingClientRect on each mousedown/mousemove/mouseup - var _gridRectDim = me.gridRect.getBoundingClientRect(); - - if (me.w.globals.mousedown) { - // user released the drag, now do all the calculations - me.endX = me.clientX - _gridRectDim.left; - me.endY = me.clientY - _gridRectDim.top; - me.dragX = Math.abs(me.endX - me.startX); - me.dragY = Math.abs(me.endY - me.startY); - - if (w.globals.zoomEnabled || w.globals.selectionEnabled) { - me.selectionDrawn({ - context: me, - zoomtype: zoomtype - }); - } - } - - if (w.globals.zoomEnabled) { - me.hideSelectionRect(this.selectionRect); - } - - me.dragged = false; - me.w.globals.mousedown = false; - } - - this.makeSelectionRectDraggable(); - } - }, { - key: "makeSelectionRectDraggable", - value: function makeSelectionRectDraggable() { - var w = this.w; - if (!this.selectionRect) return; - var rectDim = this.selectionRect.node.getBoundingClientRect(); - - if (rectDim.width > 0 && rectDim.height > 0) { - this.slDraggableRect.selectize().resize({ - constraint: { - minX: 0, - minY: 0, - maxX: w.globals.gridWidth, - maxY: w.globals.gridHeight - } - }).on('resizing', this.selectionDragging.bind(this, 'resizing')); - } - } - }, { - key: "preselectedSelection", - value: function preselectedSelection() { - var w = this.w; - var xyRatios = this.xyRatios; - - if (!w.globals.zoomEnabled) { - if (typeof w.globals.selection !== 'undefined' && w.globals.selection !== null) { - this.drawSelectionRect(w.globals.selection); - } else { - if (w.config.chart.selection.xaxis.min !== undefined && w.config.chart.selection.xaxis.max !== undefined) { - var x = (w.config.chart.selection.xaxis.min - w.globals.minX) / xyRatios.xRatio; - var width = w.globals.gridWidth - (w.globals.maxX - w.config.chart.selection.xaxis.max) / xyRatios.xRatio - x; - var selectionRect = { - x: x, - y: 0, - width: width, - height: w.globals.gridHeight, - translateX: 0, - translateY: 0, - selectionEnabled: true - }; - this.drawSelectionRect(selectionRect); - this.makeSelectionRectDraggable(); - - if (typeof w.config.chart.events.selection === 'function') { - w.config.chart.events.selection(this.ctx, { - xaxis: { - min: w.config.chart.selection.xaxis.min, - max: w.config.chart.selection.xaxis.max - }, - yaxis: {} - }); - } - } - } - } - } - }, { - key: "drawSelectionRect", - value: function drawSelectionRect(_ref2) { - var x = _ref2.x, - y = _ref2.y, - width = _ref2.width, - height = _ref2.height, - translateX = _ref2.translateX, - translateY = _ref2.translateY; - var w = this.w; - var zoomRect = this.zoomRect; - var selectionRect = this.selectionRect; - - if (this.dragged || w.globals.selection !== null) { - var scalingAttrs = { - transform: 'translate(' + translateX + ', ' + translateY + ')' // change styles based on zoom or selection - // zoom is Enabled and user has dragged, so draw blue rect - - }; - - if (w.globals.zoomEnabled && this.dragged) { - zoomRect.attr({ - x: x, - y: y, - width: width, - height: height, - fill: w.config.chart.zoom.zoomedArea.fill.color, - 'fill-opacity': w.config.chart.zoom.zoomedArea.fill.opacity, - stroke: w.config.chart.zoom.zoomedArea.stroke.color, - 'stroke-width': w.config.chart.zoom.zoomedArea.stroke.width, - 'stroke-opacity': w.config.chart.zoom.zoomedArea.stroke.opacity - }); - Graphics.setAttrs(zoomRect.node, scalingAttrs); - } // selection is enabled - - - if (w.globals.selectionEnabled) { - selectionRect.attr({ - x: x, - y: y, - width: width > 0 ? width : 0, - height: height > 0 ? height : 0, - fill: w.config.chart.selection.fill.color, - 'fill-opacity': w.config.chart.selection.fill.opacity, - stroke: w.config.chart.selection.stroke.color, - 'stroke-width': w.config.chart.selection.stroke.width, - 'stroke-dasharray': w.config.chart.selection.stroke.dashArray, - 'stroke-opacity': w.config.chart.selection.stroke.opacity - }); - Graphics.setAttrs(selectionRect.node, scalingAttrs); - } - } - } - }, { - key: "hideSelectionRect", - value: function hideSelectionRect(rect) { - if (rect) { - rect.attr({ - x: 0, - y: 0, - width: 0, - height: 0 - }); - } - } - }, { - key: "selectionDrawing", - value: function selectionDrawing(_ref3) { - var context = _ref3.context, - zoomtype = _ref3.zoomtype; - var w = this.w; - var me = context; - var gridRectDim = this.gridRect.getBoundingClientRect(); - var startX = me.startX - 1; - var startY = me.startY; - var selectionWidth = me.clientX - gridRectDim.left - startX; - var selectionHeight = me.clientY - gridRectDim.top - startY; - var translateX = 0; - var translateY = 0; - var selectionRect = {}; - - if (Math.abs(selectionWidth + startX) > w.globals.gridWidth || me.clientX - gridRectDim.left < 0) { - // user dragged the mouse outside drawing area - // TODO: test the selectionRect and make sure it doesn't crosses drawing area - me.hideSelectionRect(this.zoomRect); - me.dragged = false; - me.w.globals.mousedown = false; - } // inverse selection X - - - if (startX > me.clientX - gridRectDim.left) { - selectionWidth = Math.abs(selectionWidth); - translateX = -selectionWidth; - } // inverse selection Y - - - if (startY > me.clientY - gridRectDim.top) { - selectionHeight = Math.abs(selectionHeight); - translateY = -selectionHeight; - } - - if (zoomtype === 'x') { - selectionRect = { - x: startX, - y: 0, - width: selectionWidth, - height: w.globals.gridHeight, - translateX: translateX, - translateY: 0 - }; - } else if (zoomtype === 'y') { - selectionRect = { - x: 0, - y: startY, - width: w.globals.gridWidth, - height: selectionHeight, - translateX: 0, - translateY: translateY - }; - } else { - selectionRect = { - x: startX, - y: startY, - width: selectionWidth, - height: selectionHeight, - translateX: translateX, - translateY: translateY - }; - } - - me.drawSelectionRect(selectionRect); - me.selectionDragging('resizing'); - return selectionRect; - } - }, { - key: "selectionDragging", - value: function selectionDragging(type, e) { - var _this4 = this; - - var w = this.w; - var xyRatios = this.xyRatios; - var selRect = this.selectionRect; - var timerInterval = 0; - - if (type === 'resizing') { - timerInterval = 30; - } - - if (typeof w.config.chart.events.selection === 'function' && w.globals.selectionEnabled) { - // a small debouncer is required when resizing to avoid freezing the chart - clearTimeout(this.w.globals.selectionResizeTimer); - this.w.globals.selectionResizeTimer = window.setTimeout(function () { - var gridRectDim = _this4.gridRect.getBoundingClientRect(); - - var selectionRect = selRect.node.getBoundingClientRect(); - var minX = w.globals.xAxisScale.niceMin + (selectionRect.left - gridRectDim.left) * xyRatios.xRatio; - var maxX = w.globals.xAxisScale.niceMin + (selectionRect.right - gridRectDim.left) * xyRatios.xRatio; - var minY = w.globals.yAxisScale[0].niceMin + (gridRectDim.bottom - selectionRect.bottom) * xyRatios.yRatio[0]; - var maxY = w.globals.yAxisScale[0].niceMax - (selectionRect.top - gridRectDim.top) * xyRatios.yRatio[0]; - w.config.chart.events.selection(_this4.ctx, { - xaxis: { - min: minX, - max: maxX - }, - yaxis: { - min: minY, - max: maxY - } - }); - }, timerInterval); - } - } - }, { - key: "selectionDrawn", - value: function selectionDrawn(_ref4) { - var context = _ref4.context, - zoomtype = _ref4.zoomtype; - var w = this.w; - var me = context; - var xyRatios = this.xyRatios; - var toolbar = this.ctx.toolbar; - - if (me.startX > me.endX) { - var tempX = me.startX; - me.startX = me.endX; - me.endX = tempX; - } - - if (me.startY > me.endY) { - var tempY = me.startY; - me.startY = me.endY; - me.endY = tempY; - } - - var xLowestValue = w.globals.xAxisScale.niceMin + me.startX * xyRatios.xRatio; - var xHighestValue = w.globals.xAxisScale.niceMin + me.endX * xyRatios.xRatio; // TODO: we will consider the 1st y axis values here for getting highest and lowest y - - var yHighestValue = []; - var yLowestValue = []; - w.config.yaxis.forEach(function (yaxe, index) { - yHighestValue.push(Math.floor(w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[index] * me.startY)); - yLowestValue.push(Math.floor(w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[index] * me.endY)); - }); - - if (me.dragged && (me.dragX > 10 || me.dragY > 10) && xLowestValue !== xHighestValue) { - if (w.globals.zoomEnabled) { - var yaxis = Utils.clone(w.config.yaxis); // before zooming in/out, store the last yaxis and xaxis range, so that when user hits the RESET button, we get the original range - // also - make sure user is not already zoomed in/out - otherwise we will store zoomed values in lastAxis - - if (!w.globals.zoomed) { - w.globals.lastXAxis = Utils.clone(w.config.xaxis); - w.globals.lastYAxis = Utils.clone(w.config.yaxis); - } - - var xaxis = { - min: xLowestValue, - max: xHighestValue - }; - - if (zoomtype === 'xy' || zoomtype === 'y') { - yaxis.forEach(function (yaxe, index) { - yaxis[index].min = yLowestValue[index]; - yaxis[index].max = yHighestValue[index]; - }); - } - - if (w.config.chart.zoom.autoScaleYaxis) { - var scale = new Range(me.ctx); - yaxis = scale.autoScaleY(me.ctx, { - xaxis: xaxis - }); - } - - if (toolbar) { - var beforeZoomRange = toolbar.getBeforeZoomRange(xaxis, yaxis); - - if (beforeZoomRange) { - xaxis = beforeZoomRange.xaxis ? beforeZoomRange.xaxis : xaxis; - yaxis = beforeZoomRange.yaxis ? beforeZoomRange.yaxe : yaxis; - } - } - - me.ctx._updateOptions({ - xaxis: xaxis, - yaxis: yaxis - }, false, me.w.config.chart.animations.dynamicAnimation.enabled); - - if (typeof w.config.chart.events.zoomed === 'function') { - toolbar.zoomCallback(xaxis, yaxis); - } - - w.globals.zoomed = true; - } else if (w.globals.selectionEnabled) { - var _yaxis = null; - var _xaxis = null; - _xaxis = { - min: xLowestValue, - max: xHighestValue - }; - - if (zoomtype === 'xy' || zoomtype === 'y') { - _yaxis = Utils.clone(w.config.yaxis); - - _yaxis.forEach(function (yaxe, index) { - _yaxis[index].min = yLowestValue[index]; - _yaxis[index].max = yHighestValue[index]; - }); - } - - w.globals.selection = me.selection; - - if (typeof w.config.chart.events.selection === 'function') { - w.config.chart.events.selection(me.ctx, { - xaxis: _xaxis, - yaxis: _yaxis - }); - } - } - } - } - }, { - key: "panDragging", - value: function panDragging(_ref5) { - var context = _ref5.context, - zoomtype = _ref5.zoomtype; - var w = this.w; - var me = context; - var moveDirection; // check to make sure there is data to compare against - - if (typeof w.globals.lastClientPosition.x !== 'undefined') { - // get the change from last position to this position - var deltaX = w.globals.lastClientPosition.x - me.clientX; - var deltaY = w.globals.lastClientPosition.y - me.clientY; // check which direction had the highest amplitude and then figure out direction by checking if the value is greater or less than zero - - if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX > 0) { - moveDirection = 'left'; - } else if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX < 0) { - moveDirection = 'right'; - } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY > 0) { - moveDirection = 'up'; - } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY < 0) { - moveDirection = 'down'; - } - } // set the new last position to the current for next time (to get the position of drag) - - - w.globals.lastClientPosition = { - x: me.clientX, - y: me.clientY - }; - var xLowestValue = w.globals.minX; - var xHighestValue = w.globals.maxX; - this.panScrolled(moveDirection, xLowestValue, xHighestValue); - } - }, { - key: "panScrolled", - value: function panScrolled(moveDirection, xLowestValue, xHighestValue) { - var w = this.w; - var xyRatios = this.xyRatios; - var yaxis = Utils.clone(w.config.yaxis); - - if (moveDirection === 'left') { - xLowestValue = w.globals.minX + w.globals.gridWidth / 15 * xyRatios.xRatio; - xHighestValue = w.globals.maxX + w.globals.gridWidth / 15 * xyRatios.xRatio; - } else if (moveDirection === 'right') { - xLowestValue = w.globals.minX - w.globals.gridWidth / 15 * xyRatios.xRatio; - xHighestValue = w.globals.maxX - w.globals.gridWidth / 15 * xyRatios.xRatio; - } - - if (xLowestValue < w.globals.initialminX || xHighestValue > w.globals.initialmaxX) { - xLowestValue = w.globals.minX; - xHighestValue = w.globals.maxX; - } - - var xaxis = { - min: xLowestValue, - max: xHighestValue - }; - - if (w.config.chart.zoom.autoScaleYaxis) { - var scale = new Range(me.ctx); - yaxis = scale.autoScaleY(me.ctx, { - xaxis: xaxis - }); - } - - this.ctx._updateOptions({ - xaxis: { - min: xLowestValue, - max: xHighestValue - }, - yaxis: yaxis - }, false, false); - - if (typeof w.config.chart.events.scrolled === 'function') { - w.config.chart.events.scrolled(this.ctx, { - xaxis: { - min: xLowestValue, - max: xHighestValue - } - }); - } - } - }]); - - return ZoomPanSelection; - }(Toolbar); - - var TitleSubtitle = - /*#__PURE__*/ - function () { - function TitleSubtitle(ctx) { - _classCallCheck(this, TitleSubtitle); - - this.ctx = ctx; - this.w = ctx.w; - } - - _createClass(TitleSubtitle, [{ - key: "draw", - value: function draw() { - this.drawTitleSubtitle('title'); - this.drawTitleSubtitle('subtitle'); - } - }, { - key: "drawTitleSubtitle", - value: function drawTitleSubtitle(type) { - var w = this.w; - var tsConfig = type === 'title' ? w.config.title : w.config.subtitle; - var x = w.globals.svgWidth / 2; - var y = tsConfig.offsetY; - var textAnchor = 'middle'; - - if (tsConfig.align === 'left') { - x = 10; - textAnchor = 'start'; - } else if (tsConfig.align === 'right') { - x = w.globals.svgWidth - 10; - textAnchor = 'end'; - } - - x = x + tsConfig.offsetX; - y = y + parseInt(tsConfig.style.fontSize) + 2; - - if (tsConfig.text !== undefined) { - var graphics = new Graphics(this.ctx); - var titleText = graphics.drawText({ - x: x, - y: y, - text: tsConfig.text, - textAnchor: textAnchor, - fontSize: tsConfig.style.fontSize, - fontFamily: tsConfig.style.fontFamily, - foreColor: tsConfig.style.color, - opacity: 1 - }); - titleText.node.setAttribute('class', "apexcharts-".concat(type, "-text")); - w.globals.dom.Paper.add(titleText); - } - } - }]); - - return TitleSubtitle; - }(); - - (function (root, factory) { - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define(function () { - return factory(root, root.document); - }); - /* below check fixes #412 */ - } else if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object' && typeof module !== 'undefined') { - module.exports = root.document ? factory(root, root.document) : function (w) { - return factory(w, w.document); - }; - } else { - root.SVG = factory(root, root.document); - } - })(typeof window !== 'undefined' ? window : undefined, function (window, document) { - // Find global reference - uses 'this' by default when available, - // falls back to 'window' otherwise (for bundlers like Webpack) - var globalRef = typeof this !== 'undefined' ? this : window; // The main wrapping element - - var SVG = globalRef.SVG = function (element) { - if (SVG.supported) { - element = new SVG.Doc(element); - - if (!SVG.parser.draw) { - SVG.prepare(); - } - - return element; - } - }; // Default namespaces - - - SVG.ns = 'http://www.w3.org/2000/svg'; - SVG.xmlns = 'http://www.w3.org/2000/xmlns/'; - SVG.xlink = 'http://www.w3.org/1999/xlink'; - SVG.svgjs = 'http://svgjs.com/svgjs'; // Svg support test - - SVG.supported = function () { - return true; // !!document.createElementNS && - // !! document.createElementNS(SVG.ns,'svg').createSVGRect - }(); // Don't bother to continue if SVG is not supported - - - if (!SVG.supported) return false; // Element id sequence - - SVG.did = 1000; // Get next named element id - - SVG.eid = function (name) { - return 'Svgjs' + capitalize(name) + SVG.did++; - }; // Method for element creation - - - SVG.create = function (name) { - // create element - var element = document.createElementNS(this.ns, name); // apply unique id - - element.setAttribute('id', this.eid(name)); - return element; - }; // Method for extending objects - - - SVG.extend = function () { - var modules, methods, key, i; // Get list of modules - - modules = [].slice.call(arguments); // Get object with extensions - - methods = modules.pop(); - - for (i = modules.length - 1; i >= 0; i--) { - if (modules[i]) { - for (key in methods) { - modules[i].prototype[key] = methods[key]; - } - } - } // Make sure SVG.Set inherits any newly added methods - - - if (SVG.Set && SVG.Set.inherit) { - SVG.Set.inherit(); - } - }; // Invent new element - - - SVG.invent = function (config) { - // Create element initializer - var initializer = typeof config.create === 'function' ? config.create : function () { - this.constructor.call(this, SVG.create(config.create)); - }; // Inherit prototype - - if (config.inherit) { - initializer.prototype = new config.inherit(); - } // Extend with methods - - - if (config.extend) { - SVG.extend(initializer, config.extend); - } // Attach construct method to parent - - - if (config.construct) { - SVG.extend(config.parent || SVG.Container, config.construct); - } - - return initializer; - }; // Adopt existing svg elements - - - SVG.adopt = function (node) { - // check for presence of node - if (!node) return null; // make sure a node isn't already adopted - - if (node.instance) return node.instance; // initialize variables - - var element; // adopt with element-specific settings - - if (node.nodeName == 'svg') { - element = node.parentNode instanceof window.SVGElement ? new SVG.Nested() : new SVG.Doc(); - } else if (node.nodeName == 'linearGradient') { - element = new SVG.Gradient('linear'); - } else if (node.nodeName == 'radialGradient') { - element = new SVG.Gradient('radial'); - } else if (SVG[capitalize(node.nodeName)]) { - element = new SVG[capitalize(node.nodeName)](); - } else { - element = new SVG.Element(node); - } // ensure references - - - element.type = node.nodeName; - element.node = node; - node.instance = element; // SVG.Class specific preparations - - if (element instanceof SVG.Doc) { - element.namespace().defs(); - } // pull svgjs data from the dom (getAttributeNS doesn't work in html5) - - - element.setData(JSON.parse(node.getAttribute('svgjs:data')) || {}); - return element; - }; // Initialize parsing element - - - SVG.prepare = function () { - // Select document body and create invisible svg element - var body = document.getElementsByTagName('body')[0], - draw = (body ? new SVG.Doc(body) : SVG.adopt(document.documentElement).nested()).size(2, 0); // Create parser object - - SVG.parser = { - body: body || document.documentElement, - draw: draw.style('opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden').node, - poly: draw.polyline().node, - path: draw.path().node, - native: SVG.create('svg') - }; - }; - - SVG.parser = { - native: SVG.create('svg') - }; - document.addEventListener('DOMContentLoaded', function () { - if (!SVG.parser.draw) { - SVG.prepare(); - } - }, false); // Storage for regular expressions - - SVG.regex = { - // Parse unit value - numberAndUnit: /^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i, - // Parse hex value - hex: /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i, - // Parse rgb value - rgb: /rgb\((\d+),(\d+),(\d+)\)/, - // Parse reference id - reference: /#([a-z0-9\-_]+)/i, - // splits a transformation chain - transforms: /\)\s*,?\s*/, - // Whitespace - whitespace: /\s/g, - // Test hex value - isHex: /^#[a-f0-9]{3,6}$/i, - // Test rgb value - isRgb: /^rgb\(/, - // Test css declaration - isCss: /[^:]+:[^;]+;?/, - // Test for blank string - isBlank: /^(\s+)?$/, - // Test for numeric string - isNumber: /^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, - // Test for percent value - isPercent: /^-?[\d\.]+%$/, - // Test for image url - isImage: /\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i, - // split at whitespace and comma - delimiter: /[\s,]+/, - // The following regex are used to parse the d attribute of a path - // Matches all hyphens which are not after an exponent - hyphen: /([^e])\-/gi, - // Replaces and tests for all path letters - pathLetters: /[MLHVCSQTAZ]/gi, - // yes we need this one, too - isPathLetter: /[MLHVCSQTAZ]/i, - // matches 0.154.23.45 - numbersWithDots: /((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi, - // matches . - dots: /\./g - }; - SVG.utils = { - // Map function - map: function map(array, block) { - var i, - il = array.length, - result = []; - - for (i = 0; i < il; i++) { - result.push(block(array[i])); - } - - return result; - }, - // Filter function - filter: function filter(array, block) { - var i, - il = array.length, - result = []; - - for (i = 0; i < il; i++) { - if (block(array[i])) { - result.push(array[i]); - } - } - - return result; - }, - // Degrees to radians - radians: function radians(d) { - return d % 360 * Math.PI / 180; - }, - // Radians to degrees - degrees: function degrees(r) { - return r * 180 / Math.PI % 360; - }, - filterSVGElements: function filterSVGElements(nodes) { - return this.filter(nodes, function (el) { - return el instanceof window.SVGElement; - }); - } - }; - SVG.defaults = { - // Default attribute values - attrs: { - // fill and stroke - 'fill-opacity': 1, - 'stroke-opacity': 1, - 'stroke-width': 0, - 'stroke-linejoin': 'miter', - 'stroke-linecap': 'butt', - fill: '#000000', - stroke: '#000000', - opacity: 1, - // position - x: 0, - y: 0, - cx: 0, - cy: 0, - // size - width: 0, - height: 0, - // radius - r: 0, - rx: 0, - ry: 0, - // gradient - offset: 0, - 'stop-opacity': 1, - 'stop-color': '#000000', - // text - 'font-size': 16, - 'font-family': 'Helvetica, Arial, sans-serif', - 'text-anchor': 'start' - } // Module for color convertions - - }; - - SVG.Color = function (color) { - var match; // initialize defaults - - this.r = 0; - this.g = 0; - this.b = 0; - if (!color) return; // parse color - - if (typeof color === 'string') { - if (SVG.regex.isRgb.test(color)) { - // get rgb values - match = SVG.regex.rgb.exec(color.replace(SVG.regex.whitespace, '')); // parse numeric values - - this.r = parseInt(match[1]); - this.g = parseInt(match[2]); - this.b = parseInt(match[3]); - } else if (SVG.regex.isHex.test(color)) { - // get hex values - match = SVG.regex.hex.exec(fullHex(color)); // parse numeric values - - this.r = parseInt(match[1], 16); - this.g = parseInt(match[2], 16); - this.b = parseInt(match[3], 16); - } - } else if (_typeof(color) === 'object') { - this.r = color.r; - this.g = color.g; - this.b = color.b; - } - }; - - SVG.extend(SVG.Color, { - // Default to hex conversion - toString: function toString() { - return this.toHex(); - }, - // Build hex value - toHex: function toHex() { - return '#' + compToHex(this.r) + compToHex(this.g) + compToHex(this.b); - }, - // Build rgb value - toRgb: function toRgb() { - return 'rgb(' + [this.r, this.g, this.b].join() + ')'; - }, - // Calculate true brightness - brightness: function brightness() { - return this.r / 255 * 0.30 + this.g / 255 * 0.59 + this.b / 255 * 0.11; - }, - // Make color morphable - morph: function morph(color) { - this.destination = new SVG.Color(color); - return this; - }, - // Get morphed color at given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; // normalise pos - - pos = pos < 0 ? 0 : pos > 1 ? 1 : pos; // generate morphed color - - return new SVG.Color({ - r: ~~(this.r + (this.destination.r - this.r) * pos), - g: ~~(this.g + (this.destination.g - this.g) * pos), - b: ~~(this.b + (this.destination.b - this.b) * pos) - }); - } - }); // Testers - // Test if given value is a color string - - SVG.Color.test = function (color) { - color += ''; - return SVG.regex.isHex.test(color) || SVG.regex.isRgb.test(color); - }; // Test if given value is a rgb object - - - SVG.Color.isRgb = function (color) { - return color && typeof color.r === 'number' && typeof color.g === 'number' && typeof color.b === 'number'; - }; // Test if given value is a color - - - SVG.Color.isColor = function (color) { - return SVG.Color.isRgb(color) || SVG.Color.test(color); - }; // Module for array conversion - - - SVG.Array = function (array, fallback) { - array = (array || []).valueOf(); // if array is empty and fallback is provided, use fallback - - if (array.length == 0 && fallback) { - array = fallback.valueOf(); - } // parse array - - - this.value = this.parse(array); - }; - - SVG.extend(SVG.Array, { - // Make array morphable - morph: function morph(array) { - this.destination = this.parse(array); // normalize length of arrays - - if (this.value.length != this.destination.length) { - var lastValue = this.value[this.value.length - 1], - lastDestination = this.destination[this.destination.length - 1]; - - while (this.value.length > this.destination.length) { - this.destination.push(lastDestination); - } - - while (this.value.length < this.destination.length) { - this.value.push(lastValue); - } - } - - return this; - }, - // Clean up any duplicate points - settle: function settle() { - // find all unique values - for (var i = 0, il = this.value.length, seen = []; i < il; i++) { - if (seen.indexOf(this.value[i]) == -1) { - seen.push(this.value[i]); - } - } // set new value - - - return this.value = seen; - }, - // Get morphed array at given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; // generate morphed array - - for (var i = 0, il = this.value.length, array = []; i < il; i++) { - array.push(this.value[i] + (this.destination[i] - this.value[i]) * pos); - } - - return new SVG.Array(array); - }, - // Convert array to string - toString: function toString() { - return this.value.join(' '); - }, - // Real value - valueOf: function valueOf() { - return this.value; - }, - // Parse whitespace separated string - parse: function parse(array) { - array = array.valueOf(); // if already is an array, no need to parse it - - if (Array.isArray(array)) return array; - return this.split(array); - }, - // Strip unnecessary whitespace - split: function split(string) { - return string.trim().split(SVG.regex.delimiter).map(parseFloat); - }, - // Reverse array - reverse: function reverse() { - this.value.reverse(); - return this; - }, - clone: function clone() { - var clone = new this.constructor(); - clone.value = array_clone(this.value); - return clone; - } - }); // Poly points array - - SVG.PointArray = function (array, fallback) { - SVG.Array.call(this, array, fallback || [[0, 0]]); - }; // Inherit from SVG.Array - - - SVG.PointArray.prototype = new SVG.Array(); - SVG.PointArray.prototype.constructor = SVG.PointArray; - SVG.extend(SVG.PointArray, { - // Convert array to string - toString: function toString() { - // convert to a poly point string - for (var i = 0, il = this.value.length, array = []; i < il; i++) { - array.push(this.value[i].join(',')); - } - - return array.join(' '); - }, - // Convert array to line object - toLine: function toLine() { - return { - x1: this.value[0][0], - y1: this.value[0][1], - x2: this.value[1][0], - y2: this.value[1][1] - }; - }, - // Get morphed array at given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; // generate morphed point string - - for (var i = 0, il = this.value.length, array = []; i < il; i++) { - array.push([this.value[i][0] + (this.destination[i][0] - this.value[i][0]) * pos, this.value[i][1] + (this.destination[i][1] - this.value[i][1]) * pos]); - } - - return new SVG.PointArray(array); - }, - // Parse point string and flat array - parse: function parse(array) { - var points = []; - array = array.valueOf(); // if it is an array - - if (Array.isArray(array)) { - // and it is not flat, there is no need to parse it - if (Array.isArray(array[0])) { - // make sure to use a clone - return array.map(function (el) { - return el.slice(); - }); - } else if (array[0].x != null) { - // allow point objects to be passed - return array.map(function (el) { - return [el.x, el.y]; - }); - } - } else { - // Else, it is considered as a string - // parse points - array = array.trim().split(SVG.regex.delimiter).map(parseFloat); - } // validate points - https://svgwg.org/svg2-draft/shapes.html#DataTypePoints - // Odd number of coordinates is an error. In such cases, drop the last odd coordinate. - - - if (array.length % 2 !== 0) array.pop(); // wrap points in two-tuples and parse points as floats - - for (var i = 0, len = array.length; i < len; i = i + 2) { - points.push([array[i], array[i + 1]]); - } - - return points; - }, - // Move point string - move: function move(x, y) { - var box = this.bbox(); // get relative offset - - x -= box.x; - y -= box.y; // move every point - - if (!isNaN(x) && !isNaN(y)) { - for (var i = this.value.length - 1; i >= 0; i--) { - this.value[i] = [this.value[i][0] + x, this.value[i][1] + y]; - } - } - - return this; - }, - // Resize poly string - size: function size(width, height) { - var i, - box = this.bbox(); // recalculate position of all points according to new size - - for (i = this.value.length - 1; i >= 0; i--) { - if (box.width) this.value[i][0] = (this.value[i][0] - box.x) * width / box.width + box.x; - if (box.height) this.value[i][1] = (this.value[i][1] - box.y) * height / box.height + box.y; - } - - return this; - }, - // Get bounding box of points - bbox: function bbox() { - if (!SVG.parser.draw) { - SVG.prepare(); - } - - SVG.parser.poly.setAttribute('points', this.toString()); - return SVG.parser.poly.getBBox(); - } - }); - var pathHandlers = { - M: function M(c, p, p0) { - p.x = p0.x = c[0]; - p.y = p0.y = c[1]; - return ['M', p.x, p.y]; - }, - L: function L(c, p) { - p.x = c[0]; - p.y = c[1]; - return ['L', c[0], c[1]]; - }, - H: function H(c, p) { - p.x = c[0]; - return ['H', c[0]]; - }, - V: function V(c, p) { - p.y = c[0]; - return ['V', c[0]]; - }, - C: function C(c, p) { - p.x = c[4]; - p.y = c[5]; - return ['C', c[0], c[1], c[2], c[3], c[4], c[5]]; - }, - S: function S(c, p) { - p.x = c[2]; - p.y = c[3]; - return ['S', c[0], c[1], c[2], c[3]]; - }, - Q: function Q(c, p) { - p.x = c[2]; - p.y = c[3]; - return ['Q', c[0], c[1], c[2], c[3]]; - }, - T: function T(c, p) { - p.x = c[0]; - p.y = c[1]; - return ['T', c[0], c[1]]; - }, - Z: function Z(c, p, p0) { - p.x = p0.x; - p.y = p0.y; - return ['Z']; - }, - A: function A(c, p) { - p.x = c[5]; - p.y = c[6]; - return ['A', c[0], c[1], c[2], c[3], c[4], c[5], c[6]]; - } - }; - var mlhvqtcsa = 'mlhvqtcsaz'.split(''); - - for (var i = 0, il = mlhvqtcsa.length; i < il; ++i) { - pathHandlers[mlhvqtcsa[i]] = function (i) { - return function (c, p, p0) { - if (i == 'H') c[0] = c[0] + p.x;else if (i == 'V') c[0] = c[0] + p.y;else if (i == 'A') { - c[5] = c[5] + p.x, c[6] = c[6] + p.y; - } else { - for (var j = 0, jl = c.length; j < jl; ++j) { - c[j] = c[j] + (j % 2 ? p.y : p.x); - } - } - return pathHandlers[i](c, p, p0); - }; - }(mlhvqtcsa[i].toUpperCase()); - } // Path points array - - - SVG.PathArray = function (array, fallback) { - SVG.Array.call(this, array, fallback || [['M', 0, 0]]); - }; // Inherit from SVG.Array - - - SVG.PathArray.prototype = new SVG.Array(); - SVG.PathArray.prototype.constructor = SVG.PathArray; - SVG.extend(SVG.PathArray, { - // Convert array to string - toString: function toString() { - return arrayToString(this.value); - }, - // Move path string - move: function move(x, y) { - // get bounding box of current situation - var box = this.bbox(); // get relative offset - - x -= box.x; - y -= box.y; - - if (!isNaN(x) && !isNaN(y)) { - // move every point - for (var l, i = this.value.length - 1; i >= 0; i--) { - l = this.value[i][0]; - - if (l == 'M' || l == 'L' || l == 'T') { - this.value[i][1] += x; - this.value[i][2] += y; - } else if (l == 'H') { - this.value[i][1] += x; - } else if (l == 'V') { - this.value[i][1] += y; - } else if (l == 'C' || l == 'S' || l == 'Q') { - this.value[i][1] += x; - this.value[i][2] += y; - this.value[i][3] += x; - this.value[i][4] += y; - - if (l == 'C') { - this.value[i][5] += x; - this.value[i][6] += y; - } - } else if (l == 'A') { - this.value[i][6] += x; - this.value[i][7] += y; - } - } - } - - return this; - }, - // Resize path string - size: function size(width, height) { - // get bounding box of current situation - var i, - l, - box = this.bbox(); // recalculate position of all points according to new size - - for (i = this.value.length - 1; i >= 0; i--) { - l = this.value[i][0]; - - if (l == 'M' || l == 'L' || l == 'T') { - this.value[i][1] = (this.value[i][1] - box.x) * width / box.width + box.x; - this.value[i][2] = (this.value[i][2] - box.y) * height / box.height + box.y; - } else if (l == 'H') { - this.value[i][1] = (this.value[i][1] - box.x) * width / box.width + box.x; - } else if (l == 'V') { - this.value[i][1] = (this.value[i][1] - box.y) * height / box.height + box.y; - } else if (l == 'C' || l == 'S' || l == 'Q') { - this.value[i][1] = (this.value[i][1] - box.x) * width / box.width + box.x; - this.value[i][2] = (this.value[i][2] - box.y) * height / box.height + box.y; - this.value[i][3] = (this.value[i][3] - box.x) * width / box.width + box.x; - this.value[i][4] = (this.value[i][4] - box.y) * height / box.height + box.y; - - if (l == 'C') { - this.value[i][5] = (this.value[i][5] - box.x) * width / box.width + box.x; - this.value[i][6] = (this.value[i][6] - box.y) * height / box.height + box.y; - } - } else if (l == 'A') { - // resize radii - this.value[i][1] = this.value[i][1] * width / box.width; - this.value[i][2] = this.value[i][2] * height / box.height; // move position values - - this.value[i][6] = (this.value[i][6] - box.x) * width / box.width + box.x; - this.value[i][7] = (this.value[i][7] - box.y) * height / box.height + box.y; - } - } - - return this; - }, - // Test if the passed path array use the same path data commands as this path array - equalCommands: function equalCommands(pathArray) { - var i, il, equalCommands; - pathArray = new SVG.PathArray(pathArray); - equalCommands = this.value.length === pathArray.value.length; - - for (i = 0, il = this.value.length; equalCommands && i < il; i++) { - equalCommands = this.value[i][0] === pathArray.value[i][0]; - } - - return equalCommands; - }, - // Make path array morphable - morph: function morph(pathArray) { - pathArray = new SVG.PathArray(pathArray); - - if (this.equalCommands(pathArray)) { - this.destination = pathArray; - } else { - this.destination = null; - } - - return this; - }, - // Get morphed path array at given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; - var sourceArray = this.value, - destinationArray = this.destination.value, - array = [], - pathArray = new SVG.PathArray(), - i, - il, - j, - jl; // Animate has specified in the SVG spec - // See: https://www.w3.org/TR/SVG11/paths.html#PathElement - - for (i = 0, il = sourceArray.length; i < il; i++) { - array[i] = [sourceArray[i][0]]; - - for (j = 1, jl = sourceArray[i].length; j < jl; j++) { - array[i][j] = sourceArray[i][j] + (destinationArray[i][j] - sourceArray[i][j]) * pos; - } // For the two flags of the elliptical arc command, the SVG spec say: - // Flags and booleans are interpolated as fractions between zero and one, with any non-zero value considered to be a value of one/true - // Elliptical arc command as an array followed by corresponding indexes: - // ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y] - // 0 1 2 3 4 5 6 7 - - - if (array[i][0] === 'A') { - array[i][4] = +(array[i][4] != 0); - array[i][5] = +(array[i][5] != 0); - } - } // Directly modify the value of a path array, this is done this way for performance - - - pathArray.value = array; - return pathArray; - }, - // Absolutize and parse path to array - parse: function parse(array) { - // if it's already a patharray, no need to parse it - if (array instanceof SVG.PathArray) return array.valueOf(); // prepare for parsing - - var s, - arr, - paramCnt = { - 'M': 2, - 'L': 2, - 'H': 1, - 'V': 1, - 'C': 6, - 'S': 4, - 'Q': 4, - 'T': 2, - 'A': 7, - 'Z': 0 - }; - - if (typeof array === 'string') { - array = array.replace(SVG.regex.numbersWithDots, pathRegReplace) // convert 45.123.123 to 45.123 .123 - .replace(SVG.regex.pathLetters, ' $& ') // put some room between letters and numbers - .replace(SVG.regex.hyphen, '$1 -') // add space before hyphen - .trim() // trim - .split(SVG.regex.delimiter); // split into array - } else { - array = array.reduce(function (prev, curr) { - return [].concat.call(prev, curr); - }, []); - } // array now is an array containing all parts of a path e.g. ['M', '0', '0', 'L', '30', '30' ...] - - - var arr = [], - p = new SVG.Point(), - p0 = new SVG.Point(), - index = 0, - len = array.length; - - do { - // Test if we have a path letter - if (SVG.regex.isPathLetter.test(array[index])) { - s = array[index]; - ++index; // If last letter was a move command and we got no new, it defaults to [L]ine - } else if (s == 'M') { - s = 'L'; - } else if (s == 'm') { - s = 'l'; - } - - arr.push(pathHandlers[s].call(null, array.slice(index, index = index + paramCnt[s.toUpperCase()]).map(parseFloat), p, p0)); - } while (len > index); - - return arr; - }, - // Get bounding box of path - bbox: function bbox() { - if (!SVG.parser.draw) { - SVG.prepare(); - } - - SVG.parser.path.setAttribute('d', this.toString()); - return SVG.parser.path.getBBox(); - } - }); // Module for unit convertions - - SVG.Number = SVG.invent({ - // Initialize - create: function create(value, unit) { - // initialize defaults - this.value = 0; - this.unit = unit || ''; // parse value - - if (typeof value === 'number') { - // ensure a valid numeric value - this.value = isNaN(value) ? 0 : !isFinite(value) ? value < 0 ? -3.4e+38 : +3.4e+38 : value; - } else if (typeof value === 'string') { - unit = value.match(SVG.regex.numberAndUnit); - - if (unit) { - // make value numeric - this.value = parseFloat(unit[1]); // normalize - - if (unit[5] == '%') { - this.value /= 100; - } else if (unit[5] == 's') { - this.value *= 1000; - } // store unit - - - this.unit = unit[5]; - } - } else { - if (value instanceof SVG.Number) { - this.value = value.valueOf(); - this.unit = value.unit; - } - } - }, - // Add methods - extend: { - // Stringalize - toString: function toString() { - return (this.unit == '%' ? ~~(this.value * 1e8) / 1e6 : this.unit == 's' ? this.value / 1e3 : this.value) + this.unit; - }, - toJSON: function toJSON() { - return this.toString(); - }, - // Convert to primitive - valueOf: function valueOf() { - return this.value; - }, - // Add number - plus: function plus(number) { - number = new SVG.Number(number); - return new SVG.Number(this + number, this.unit || number.unit); - }, - // Subtract number - minus: function minus(number) { - number = new SVG.Number(number); - return new SVG.Number(this - number, this.unit || number.unit); - }, - // Multiply number - times: function times(number) { - number = new SVG.Number(number); - return new SVG.Number(this * number, this.unit || number.unit); - }, - // Divide number - divide: function divide(number) { - number = new SVG.Number(number); - return new SVG.Number(this / number, this.unit || number.unit); - }, - // Convert to different unit - to: function to(unit) { - var number = new SVG.Number(this); - - if (typeof unit === 'string') { - number.unit = unit; - } - - return number; - }, - // Make number morphable - morph: function morph(number) { - this.destination = new SVG.Number(number); - - if (number.relative) { - this.destination.value += this.value; - } - - return this; - }, - // Get morphed number at given position - at: function at(pos) { - // Make sure a destination is defined - if (!this.destination) return this; // Generate new morphed number - - return new SVG.Number(this.destination).minus(this).times(pos).plus(this); - } - } - }); - SVG.Element = SVG.invent({ - // Initialize node - create: function create(node) { - // make stroke value accessible dynamically - this._stroke = SVG.defaults.attrs.stroke; - this._event = null; // initialize data object - - this.dom = {}; // create circular reference - - if (this.node = node) { - this.type = node.nodeName; - this.node.instance = this; // store current attribute value - - this._stroke = node.getAttribute('stroke') || this._stroke; - } - }, - // Add class methods - extend: { - // Move over x-axis - x: function x(_x) { - return this.attr('x', _x); - }, - // Move over y-axis - y: function y(_y) { - return this.attr('y', _y); - }, - // Move by center over x-axis - cx: function cx(x) { - return x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2); - }, - // Move by center over y-axis - cy: function cy(y) { - return y == null ? this.y() + this.height() / 2 : this.y(y - this.height() / 2); - }, - // Move element to given x and y values - move: function move(x, y) { - return this.x(x).y(y); - }, - // Move element by its center - center: function center(x, y) { - return this.cx(x).cy(y); - }, - // Set width of element - width: function width(_width) { - return this.attr('width', _width); - }, - // Set height of element - height: function height(_height) { - return this.attr('height', _height); - }, - // Set element size to given width and height - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.width(new SVG.Number(p.width)).height(new SVG.Number(p.height)); - }, - // Clone element - clone: function clone(parent) { - // write dom data to the dom so the clone can pickup the data - this.writeDataToDom(); // clone element and assign new id - - var clone = assignNewId(this.node.cloneNode(true)); // insert the clone in the given parent or after myself - - if (parent) parent.add(clone);else this.after(clone); - return clone; - }, - // Remove element - remove: function remove() { - if (this.parent()) { - this.parent().removeElement(this); - } - - return this; - }, - // Replace element - replace: function replace(element) { - this.after(element).remove(); - return element; - }, - // Add element to given container and return self - addTo: function addTo(parent) { - return parent.put(this); - }, - // Add element to given container and return container - putIn: function putIn(parent) { - return parent.add(this); - }, - // Get / set id - id: function id(_id) { - return this.attr('id', _id); - }, - // Checks whether the given point inside the bounding box of the element - inside: function inside(x, y) { - var box = this.bbox(); - return x > box.x && y > box.y && x < box.x + box.width && y < box.y + box.height; - }, - // Show element - show: function show() { - return this.style('display', ''); - }, - // Hide element - hide: function hide() { - return this.style('display', 'none'); - }, - // Is element visible? - visible: function visible() { - return this.style('display') != 'none'; - }, - // Return id on string conversion - toString: function toString() { - return this.attr('id'); - }, - // Return array of classes on the node - classes: function classes() { - var attr = this.attr('class'); - return attr == null ? [] : attr.trim().split(SVG.regex.delimiter); - }, - // Return true if class exists on the node, false otherwise - hasClass: function hasClass(name) { - return this.classes().indexOf(name) != -1; - }, - // Add class to the node - addClass: function addClass(name) { - if (!this.hasClass(name)) { - var array = this.classes(); - array.push(name); - this.attr('class', array.join(' ')); - } - - return this; - }, - // Remove class from the node - removeClass: function removeClass(name) { - if (this.hasClass(name)) { - this.attr('class', this.classes().filter(function (c) { - return c != name; - }).join(' ')); - } - - return this; - }, - // Toggle the presence of a class on the node - toggleClass: function toggleClass(name) { - return this.hasClass(name) ? this.removeClass(name) : this.addClass(name); - }, - // Get referenced element form attribute value - reference: function reference(attr) { - return SVG.get(this.attr(attr)); - }, - // Returns the parent element instance - parent: function parent(type) { - var parent = this; // check for parent - - if (!parent.node.parentNode) return null; // get parent element - - parent = SVG.adopt(parent.node.parentNode); - if (!type) return parent; // loop trough ancestors if type is given - - while (parent && parent.node instanceof window.SVGElement) { - if (typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent; - if (!parent.node.parentNode || parent.node.parentNode.nodeName == '#document') return null; // #759, #720 - - parent = SVG.adopt(parent.node.parentNode); - } - }, - // Get parent document - doc: function doc() { - return this instanceof SVG.Doc ? this : this.parent(SVG.Doc); - }, - // return array of all ancestors of given type up to the root svg - parents: function parents(type) { - var parents = [], - parent = this; - - do { - parent = parent.parent(type); - if (!parent || !parent.node) break; - parents.push(parent); - } while (parent.parent); - - return parents; - }, - // matches the element vs a css selector - matches: function matches(selector) { - return _matches(this.node, selector); - }, - // Returns the svg node to call native svg methods on it - native: function native() { - return this.node; - }, - // Import raw svg - svg: function svg(_svg) { - // create temporary holder - var well = document.createElement('svg'); // act as a setter if svg is given - - if (_svg && this instanceof SVG.Parent) { - // dump raw svg - well.innerHTML = '' + _svg.replace(/\n/, '').replace(/<([\w:-]+)([^<]+?)\/>/g, '<$1$2>') + ''; // transplant nodes - - for (var i = 0, il = well.firstChild.childNodes.length; i < il; i++) { - this.node.appendChild(well.firstChild.firstChild); - } // otherwise act as a getter - - } else { - // create a wrapping svg element in case of partial content - well.appendChild(_svg = document.createElement('svg')); // write svgjs data to the dom - - this.writeDataToDom(); // insert a copy of this node - - _svg.appendChild(this.node.cloneNode(true)); // return target element - - - return well.innerHTML.replace(/^/, '').replace(/<\/svg>$/, ''); - } - - return this; - }, - // write svgjs data to the dom - writeDataToDom: function writeDataToDom() { - // dump variables recursively - if (this.each || this.lines) { - var fn = this.each ? this : this.lines(); - fn.each(function () { - this.writeDataToDom(); - }); - } // remove previously set data - - - this.node.removeAttribute('svgjs:data'); - - if (Object.keys(this.dom).length) { - this.node.setAttribute('svgjs:data', JSON.stringify(this.dom)); - } // see #428 - - - return this; - }, - // set given data to the elements data property - setData: function setData(o) { - this.dom = o; - return this; - }, - is: function is(obj) { - return _is(this, obj); - } - } - }); - SVG.easing = { - '-': function _(pos) { - return pos; - }, - '<>': function _(pos) { - return -Math.cos(pos * Math.PI) / 2 + 0.5; - }, - '>': function _(pos) { - return Math.sin(pos * Math.PI / 2); - }, - '<': function _(pos) { - return -Math.cos(pos * Math.PI / 2) + 1; - } - }; - - SVG.morph = function (pos) { - return function (from, to) { - return new SVG.MorphObj(from, to).at(pos); - }; - }; - - SVG.Situation = SVG.invent({ - create: function create(o) { - this.init = false; - this.reversed = false; - this.reversing = false; - this.duration = new SVG.Number(o.duration).valueOf(); - this.delay = new SVG.Number(o.delay).valueOf(); - this.start = +new Date() + this.delay; - this.finish = this.start + this.duration; - this.ease = o.ease; // this.loop is incremented from 0 to this.loops - // it is also incremented when in an infinite loop (when this.loops is true) - - this.loop = 0; - this.loops = false; - this.animations = {// functionToCall: [list of morphable objects] - // e.g. move: [SVG.Number, SVG.Number] - }; - this.attrs = {// holds all attributes which are not represented from a function svg.js provides - // e.g. someAttr: SVG.Number - }; - this.styles = {// holds all styles which should be animated - // e.g. fill-color: SVG.Color - }; - this.transforms = [// holds all transformations as transformation objects - // e.g. [SVG.Rotate, SVG.Translate, SVG.Matrix] - ]; - this.once = {// functions to fire at a specific position - // e.g. "0.5": function foo(){} - }; - } - }); - SVG.FX = SVG.invent({ - create: function create(element) { - this._target = element; - this.situations = []; - this.active = false; - this.situation = null; - this.paused = false; - this.lastPos = 0; - this.pos = 0; // The absolute position of an animation is its position in the context of its complete duration (including delay and loops) - // When performing a delay, absPos is below 0 and when performing a loop, its value is above 1 - - this.absPos = 0; - this._speed = 1; - }, - extend: { - /** - * sets or returns the target of this animation - * @param o object || number In case of Object it holds all parameters. In case of number its the duration of the animation - * @param ease function || string Function which should be used for easing or easing keyword - * @param delay Number indicating the delay before the animation starts - * @return target || this - */ - animate: function animate(o, ease, delay) { - if (_typeof(o) === 'object') { - ease = o.ease; - delay = o.delay; - o = o.duration; - } - - var situation = new SVG.Situation({ - duration: o || 1000, - delay: delay || 0, - ease: SVG.easing[ease || '-'] || ease - }); - this.queue(situation); - return this; - }, - - /** - * sets a delay before the next element of the queue is called - * @param delay Duration of delay in milliseconds - * @return this.target() - */ - delay: function delay(_delay) { - // The delay is performed by an empty situation with its duration - // attribute set to the duration of the delay - var situation = new SVG.Situation({ - duration: _delay, - delay: 0, - ease: SVG.easing['-'] - }); - return this.queue(situation); - }, - - /** - * sets or returns the target of this animation - * @param null || target SVG.Element which should be set as new target - * @return target || this - */ - target: function target(_target) { - if (_target && _target instanceof SVG.Element) { - this._target = _target; - return this; - } - - return this._target; - }, - // returns the absolute position at a given time - timeToAbsPos: function timeToAbsPos(timestamp) { - return (timestamp - this.situation.start) / (this.situation.duration / this._speed); - }, - // returns the timestamp from a given absolute positon - absPosToTime: function absPosToTime(absPos) { - return this.situation.duration / this._speed * absPos + this.situation.start; - }, - // starts the animationloop - startAnimFrame: function startAnimFrame() { - this.stopAnimFrame(); - this.animationFrame = window.requestAnimationFrame(function () { - this.step(); - }.bind(this)); - }, - // cancels the animationframe - stopAnimFrame: function stopAnimFrame() { - window.cancelAnimationFrame(this.animationFrame); - }, - // kicks off the animation - only does something when the queue is currently not active and at least one situation is set - start: function start() { - // dont start if already started - if (!this.active && this.situation) { - this.active = true; - this.startCurrent(); - } - - return this; - }, - // start the current situation - startCurrent: function startCurrent() { - this.situation.start = +new Date() + this.situation.delay / this._speed; - this.situation.finish = this.situation.start + this.situation.duration / this._speed; - return this.initAnimations().step(); - }, - - /** - * adds a function / Situation to the animation queue - * @param fn function / situation to add - * @return this - */ - queue: function queue(fn) { - if (typeof fn === 'function' || fn instanceof SVG.Situation) { - this.situations.push(fn); - } - - if (!this.situation) this.situation = this.situations.shift(); - return this; - }, - - /** - * pulls next element from the queue and execute it - * @return this - */ - dequeue: function dequeue() { - // stop current animation - this.stop(); // get next animation from queue - - this.situation = this.situations.shift(); - - if (this.situation) { - if (this.situation instanceof SVG.Situation) { - this.start(); - } else { - // If it is not a SVG.Situation, then it is a function, we execute it - this.situation.call(this); - } - } - - return this; - }, - // updates all animations to the current state of the element - // this is important when one property could be changed from another property - initAnimations: function initAnimations() { - var i, j, source; - var s = this.situation; - if (s.init) return this; - - for (i in s.animations) { - source = this.target()[i](); - - if (!Array.isArray(source)) { - source = [source]; - } - - if (!Array.isArray(s.animations[i])) { - s.animations[i] = [s.animations[i]]; - } // if(s.animations[i].length > source.length) { - // source.concat = source.concat(s.animations[i].slice(source.length, s.animations[i].length)) - // } - - - for (j = source.length; j--;) { - // The condition is because some methods return a normal number instead - // of a SVG.Number - if (s.animations[i][j] instanceof SVG.Number) { - source[j] = new SVG.Number(source[j]); - } - - s.animations[i][j] = source[j].morph(s.animations[i][j]); - } - } - - for (i in s.attrs) { - s.attrs[i] = new SVG.MorphObj(this.target().attr(i), s.attrs[i]); - } - - for (i in s.styles) { - s.styles[i] = new SVG.MorphObj(this.target().style(i), s.styles[i]); - } - - s.initialTransformation = this.target().matrixify(); - s.init = true; - return this; - }, - clearQueue: function clearQueue() { - this.situations = []; - return this; - }, - clearCurrent: function clearCurrent() { - this.situation = null; - return this; - }, - - /** stops the animation immediately - * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately. - * @param clearQueue A Boolean indicating whether to remove queued animation as well. - * @return this - */ - stop: function stop(jumpToEnd, clearQueue) { - var active = this.active; - this.active = false; - - if (clearQueue) { - this.clearQueue(); - } - - if (jumpToEnd && this.situation) { - // initialize the situation if it was not - !active && this.startCurrent(); - this.atEnd(); - } - - this.stopAnimFrame(); - return this.clearCurrent(); - }, - - /** resets the element to the state where the current element has started - * @return this - */ - reset: function reset() { - if (this.situation) { - var temp = this.situation; - this.stop(); - this.situation = temp; - this.atStart(); - } - - return this; - }, - // Stop the currently-running animation, remove all queued animations, and complete all animations for the element. - finish: function finish() { - this.stop(true, false); - - while (this.dequeue().situation && this.stop(true, false)) { - } - - this.clearQueue().clearCurrent(); - return this; - }, - // set the internal animation pointer at the start position, before any loops, and updates the visualisation - atStart: function atStart() { - return this.at(0, true); - }, - // set the internal animation pointer at the end position, after all the loops, and updates the visualisation - atEnd: function atEnd() { - if (this.situation.loops === true) { - // If in a infinite loop, we end the current iteration - this.situation.loops = this.situation.loop + 1; - } - - if (typeof this.situation.loops === 'number') { - // If performing a finite number of loops, we go after all the loops - return this.at(this.situation.loops, true); - } else { - // If no loops, we just go at the end - return this.at(1, true); - } - }, - // set the internal animation pointer to the specified position and updates the visualisation - // if isAbsPos is true, pos is treated as an absolute position - at: function at(pos, isAbsPos) { - var durDivSpd = this.situation.duration / this._speed; - this.absPos = pos; // If pos is not an absolute position, we convert it into one - - if (!isAbsPos) { - if (this.situation.reversed) this.absPos = 1 - this.absPos; - this.absPos += this.situation.loop; - } - - this.situation.start = +new Date() - this.absPos * durDivSpd; - this.situation.finish = this.situation.start + durDivSpd; - return this.step(true); - }, - - /** - * sets or returns the speed of the animations - * @param speed null || Number The new speed of the animations - * @return Number || this - */ - speed: function speed(_speed) { - if (_speed === 0) return this.pause(); - - if (_speed) { - this._speed = _speed; // We use an absolute position here so that speed can affect the delay before the animation - - return this.at(this.absPos, true); - } else return this._speed; - }, - // Make loopable - loop: function loop(times, reverse) { - var c = this.last(); // store total loops - - c.loops = times != null ? times : true; - c.loop = 0; - if (reverse) c.reversing = true; - return this; - }, - // pauses the animation - pause: function pause() { - this.paused = true; - this.stopAnimFrame(); - return this; - }, - // unpause the animation - play: function play() { - if (!this.paused) return this; - this.paused = false; // We use an absolute position here so that the delay before the animation can be paused - - return this.at(this.absPos, true); - }, - - /** - * toggle or set the direction of the animation - * true sets direction to backwards while false sets it to forwards - * @param reversed Boolean indicating whether to reverse the animation or not (default: toggle the reverse status) - * @return this - */ - reverse: function reverse(reversed) { - var c = this.last(); - if (typeof reversed === 'undefined') c.reversed = !c.reversed;else c.reversed = reversed; - return this; - }, - - /** - * returns a float from 0-1 indicating the progress of the current animation - * @param eased Boolean indicating whether the returned position should be eased or not - * @return number - */ - progress: function progress(easeIt) { - return easeIt ? this.situation.ease(this.pos) : this.pos; - }, - - /** - * adds a callback function which is called when the current animation is finished - * @param fn Function which should be executed as callback - * @return number - */ - after: function after(fn) { - var c = this.last(), - wrapper = function wrapper(e) { - if (e.detail.situation == c) { - fn.call(this, c); - this.off('finished.fx', wrapper); // prevent memory leak - } - }; - - this.target().on('finished.fx', wrapper); - return this._callStart(); - }, - // adds a callback which is called whenever one animation step is performed - during: function during(fn) { - var c = this.last(), - wrapper = function wrapper(e) { - if (e.detail.situation == c) { - fn.call(this, e.detail.pos, SVG.morph(e.detail.pos), e.detail.eased, c); - } - }; // see above - - - this.target().off('during.fx', wrapper).on('during.fx', wrapper); - this.after(function () { - this.off('during.fx', wrapper); - }); - return this._callStart(); - }, - // calls after ALL animations in the queue are finished - afterAll: function afterAll(fn) { - var wrapper = function wrapper(e) { - fn.call(this); - this.off('allfinished.fx', wrapper); - }; // see above - - - this.target().off('allfinished.fx', wrapper).on('allfinished.fx', wrapper); - return this._callStart(); - }, - // calls on every animation step for all animations - duringAll: function duringAll(fn) { - var wrapper = function wrapper(e) { - fn.call(this, e.detail.pos, SVG.morph(e.detail.pos), e.detail.eased, e.detail.situation); - }; - - this.target().off('during.fx', wrapper).on('during.fx', wrapper); - this.afterAll(function () { - this.off('during.fx', wrapper); - }); - return this._callStart(); - }, - last: function last() { - return this.situations.length ? this.situations[this.situations.length - 1] : this.situation; - }, - // adds one property to the animations - add: function add(method, args, type) { - this.last()[type || 'animations'][method] = args; - return this._callStart(); - }, - - /** perform one step of the animation - * @param ignoreTime Boolean indicating whether to ignore time and use position directly or recalculate position based on time - * @return this - */ - step: function step(ignoreTime) { - // convert current time to an absolute position - if (!ignoreTime) this.absPos = this.timeToAbsPos(+new Date()); // This part convert an absolute position to a position - - if (this.situation.loops !== false) { - var absPos, absPosInt, lastLoop; // If the absolute position is below 0, we just treat it as if it was 0 - - absPos = Math.max(this.absPos, 0); - absPosInt = Math.floor(absPos); - - if (this.situation.loops === true || absPosInt < this.situation.loops) { - this.pos = absPos - absPosInt; - lastLoop = this.situation.loop; - this.situation.loop = absPosInt; - } else { - this.absPos = this.situation.loops; - this.pos = 1; // The -1 here is because we don't want to toggle reversed when all the loops have been completed - - lastLoop = this.situation.loop - 1; - this.situation.loop = this.situation.loops; - } - - if (this.situation.reversing) { - // Toggle reversed if an odd number of loops as occured since the last call of step - this.situation.reversed = this.situation.reversed != Boolean((this.situation.loop - lastLoop) % 2); - } - } else { - // If there are no loop, the absolute position must not be above 1 - this.absPos = Math.min(this.absPos, 1); - this.pos = this.absPos; - } // while the absolute position can be below 0, the position must not be below 0 - - - if (this.pos < 0) this.pos = 0; - if (this.situation.reversed) this.pos = 1 - this.pos; // apply easing - - var eased = this.situation.ease(this.pos); // call once-callbacks - - for (var i in this.situation.once) { - if (i > this.lastPos && i <= eased) { - this.situation.once[i].call(this.target(), this.pos, eased); - delete this.situation.once[i]; - } - } // fire during callback with position, eased position and current situation as parameter - - - if (this.active) this.target().fire('during', { - pos: this.pos, - eased: eased, - fx: this, - situation: this.situation - }); // the user may call stop or finish in the during callback - // so make sure that we still have a valid situation - - if (!this.situation) { - return this; - } // apply the actual animation to every property - - - this.eachAt(); // do final code when situation is finished - - if (this.pos == 1 && !this.situation.reversed || this.situation.reversed && this.pos == 0) { - // stop animation callback - this.stopAnimFrame(); // fire finished callback with current situation as parameter - - this.target().fire('finished', { - fx: this, - situation: this.situation - }); - - if (!this.situations.length) { - this.target().fire('allfinished'); // Recheck the length since the user may call animate in the afterAll callback - - if (!this.situations.length) { - this.target().off('.fx'); // there shouldnt be any binding left, but to make sure... - - this.active = false; - } - } // start next animation - - - if (this.active) this.dequeue();else this.clearCurrent(); - } else if (!this.paused && this.active) { - // we continue animating when we are not at the end - this.startAnimFrame(); - } // save last eased position for once callback triggering - - - this.lastPos = eased; - return this; - }, - // calculates the step for every property and calls block with it - eachAt: function eachAt() { - var i, - len, - at, - self = this, - target = this.target(), - s = this.situation; // apply animations which can be called trough a method - - for (i in s.animations) { - at = [].concat(s.animations[i]).map(function (el) { - return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el; - }); - target[i].apply(target, at); - } // apply animation which has to be applied with attr() - - - for (i in s.attrs) { - at = [i].concat(s.attrs[i]).map(function (el) { - return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el; - }); - target.attr.apply(target, at); - } // apply animation which has to be applied with style() - - - for (i in s.styles) { - at = [i].concat(s.styles[i]).map(function (el) { - return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el; - }); - target.style.apply(target, at); - } // animate initialTransformation which has to be chained - - - if (s.transforms.length) { - // get initial initialTransformation - at = s.initialTransformation; - - for (i = 0, len = s.transforms.length; i < len; i++) { - // get next transformation in chain - var a = s.transforms[i]; // multiply matrix directly - - if (a instanceof SVG.Matrix) { - if (a.relative) { - at = at.multiply(new SVG.Matrix().morph(a).at(s.ease(this.pos))); - } else { - at = at.morph(a).at(s.ease(this.pos)); - } - - continue; - } // when transformation is absolute we have to reset the needed transformation first - - - if (!a.relative) { - a.undo(at.extract()); - } // and reapply it after - - - at = at.multiply(a.at(s.ease(this.pos))); - } // set new matrix on element - - - target.matrix(at); - } - - return this; - }, - // adds an once-callback which is called at a specific position and never again - once: function once(pos, fn, isEased) { - var c = this.last(); - if (!isEased) pos = c.ease(pos); - c.once[pos] = fn; - return this; - }, - _callStart: function _callStart() { - setTimeout(function () { - this.start(); - }.bind(this), 0); - return this; - } - }, - parent: SVG.Element, - // Add method to parent elements - construct: { - // Get fx module or create a new one, then animate with given duration and ease - animate: function animate(o, ease, delay) { - return (this.fx || (this.fx = new SVG.FX(this))).animate(o, ease, delay); - }, - delay: function delay(_delay2) { - return (this.fx || (this.fx = new SVG.FX(this))).delay(_delay2); - }, - stop: function stop(jumpToEnd, clearQueue) { - if (this.fx) { - this.fx.stop(jumpToEnd, clearQueue); - } - - return this; - }, - finish: function finish() { - if (this.fx) { - this.fx.finish(); - } - - return this; - }, - // Pause current animation - pause: function pause() { - if (this.fx) { - this.fx.pause(); - } - - return this; - }, - // Play paused current animation - play: function play() { - if (this.fx) { - this.fx.play(); - } - - return this; - }, - // Set/Get the speed of the animations - speed: function speed(_speed2) { - if (this.fx) { - if (_speed2 == null) { - return this.fx.speed(); - } else { - this.fx.speed(_speed2); - } - } - - return this; - } - } - }); // MorphObj is used whenever no morphable object is given - - SVG.MorphObj = SVG.invent({ - create: function create(from, to) { - // prepare color for morphing - if (SVG.Color.isColor(to)) return new SVG.Color(from).morph(to); // check if we have a list of values - - if (SVG.regex.delimiter.test(from)) { - // prepare path for morphing - if (SVG.regex.pathLetters.test(from)) return new SVG.PathArray(from).morph(to); // prepare value list for morphing - else return new SVG.Array(from).morph(to); - } // prepare number for morphing - - - if (SVG.regex.numberAndUnit.test(to)) return new SVG.Number(from).morph(to); // prepare for plain morphing - - this.value = from; - this.destination = to; - }, - extend: { - at: function at(pos, real) { - return real < 1 ? this.value : this.destination; - }, - valueOf: function valueOf() { - return this.value; - } - } - }); - SVG.extend(SVG.FX, { - // Add animatable attributes - attr: function attr(a, v, relative) { - // apply attributes individually - if (_typeof(a) === 'object') { - for (var key in a) { - this.attr(key, a[key]); - } - } else { - this.add(a, v, 'attrs'); - } - - return this; - }, - // Add animatable styles - style: function style(s, v) { - if (_typeof(s) === 'object') { - for (var key in s) { - this.style(key, s[key]); - } - } else { - this.add(s, v, 'styles'); - } - - return this; - }, - // Animatable x-axis - x: function x(_x2, relative) { - if (this.target() instanceof SVG.G) { - this.transform({ - x: _x2 - }, relative); - return this; - } - - var num = new SVG.Number(_x2); - num.relative = relative; - return this.add('x', num); - }, - // Animatable y-axis - y: function y(_y2, relative) { - if (this.target() instanceof SVG.G) { - this.transform({ - y: _y2 - }, relative); - return this; - } - - var num = new SVG.Number(_y2); - num.relative = relative; - return this.add('y', num); - }, - // Animatable center x-axis - cx: function cx(x) { - return this.add('cx', new SVG.Number(x)); - }, - // Animatable center y-axis - cy: function cy(y) { - return this.add('cy', new SVG.Number(y)); - }, - // Add animatable move - move: function move(x, y) { - return this.x(x).y(y); - }, - // Add animatable center - center: function center(x, y) { - return this.cx(x).cy(y); - }, - // Add animatable size - size: function size(width, height) { - if (this.target() instanceof SVG.Text) { - // animate font size for Text elements - this.attr('font-size', width); - } else { - // animate bbox based size for all other elements - var box; - - if (!width || !height) { - box = this.target().bbox(); - } - - if (!width) { - width = box.width / box.height * height; - } - - if (!height) { - height = box.height / box.width * width; - } - - this.add('width', new SVG.Number(width)).add('height', new SVG.Number(height)); - } - - return this; - }, - // Add animatable width - width: function width(_width2) { - return this.add('width', new SVG.Number(_width2)); - }, - // Add animatable height - height: function height(_height2) { - return this.add('height', new SVG.Number(_height2)); - }, - // Add animatable plot - plot: function plot(a, b, c, d) { - // Lines can be plotted with 4 arguments - if (arguments.length == 4) { - return this.plot([a, b, c, d]); - } - - return this.add('plot', new (this.target().morphArray)(a)); - }, - // Add leading method - leading: function leading(value) { - return this.target().leading ? this.add('leading', new SVG.Number(value)) : this; - }, - // Add animatable viewbox - viewbox: function viewbox(x, y, width, height) { - if (this.target() instanceof SVG.Container) { - this.add('viewbox', new SVG.ViewBox(x, y, width, height)); - } - - return this; - }, - update: function update(o) { - if (this.target() instanceof SVG.Stop) { - if (typeof o === 'number' || o instanceof SVG.Number) { - return this.update({ - offset: arguments[0], - color: arguments[1], - opacity: arguments[2] - }); - } - - if (o.opacity != null) this.attr('stop-opacity', o.opacity); - if (o.color != null) this.attr('stop-color', o.color); - if (o.offset != null) this.attr('offset', o.offset); - } - - return this; - } - }); - SVG.Box = SVG.invent({ - create: function create(x, y, width, height) { - if (_typeof(x) === 'object' && !(x instanceof SVG.Element)) { - // chromes getBoundingClientRect has no x and y property - return SVG.Box.call(this, x.left != null ? x.left : x.x, x.top != null ? x.top : x.y, x.width, x.height); - } else if (arguments.length == 4) { - this.x = x; - this.y = y; - this.width = width; - this.height = height; - } // add center, right, bottom... - - - fullBox(this); - }, - extend: { - // Merge rect box with another, return a new instance - merge: function merge(box) { - var b = new this.constructor(); // merge boxes - - b.x = Math.min(this.x, box.x); - b.y = Math.min(this.y, box.y); - b.width = Math.max(this.x + this.width, box.x + box.width) - b.x; - b.height = Math.max(this.y + this.height, box.y + box.height) - b.y; - return fullBox(b); - }, - transform: function transform(m) { - var xMin = Infinity, - xMax = -Infinity, - yMin = Infinity, - yMax = -Infinity, - bbox; - var pts = [new SVG.Point(this.x, this.y), new SVG.Point(this.x2, this.y), new SVG.Point(this.x, this.y2), new SVG.Point(this.x2, this.y2)]; - pts.forEach(function (p) { - p = p.transform(m); - xMin = Math.min(xMin, p.x); - xMax = Math.max(xMax, p.x); - yMin = Math.min(yMin, p.y); - yMax = Math.max(yMax, p.y); - }); - bbox = new this.constructor(); - bbox.x = xMin; - bbox.width = xMax - xMin; - bbox.y = yMin; - bbox.height = yMax - yMin; - fullBox(bbox); - return bbox; - } - } - }); - SVG.BBox = SVG.invent({ - // Initialize - create: function create(element) { - SVG.Box.apply(this, [].slice.call(arguments)); // get values if element is given - - if (element instanceof SVG.Element) { - var box; // yes this is ugly, but Firefox can be a pain when it comes to elements that are not yet rendered - - try { - if (!document.documentElement.contains) { - // This is IE - it does not support contains() for top-level SVGs - var topParent = element.node; - - while (topParent.parentNode) { - topParent = topParent.parentNode; - } - - if (topParent != document) throw new Error('Element not in the dom'); - } // the element is NOT in the dom, throw error - // disabling the check below which fixes issue #76 - // if (!document.documentElement.contains(element.node)) throw new Exception('Element not in the dom') - // find native bbox - - - box = element.node.getBBox(); - } catch (e) { - if (element instanceof SVG.Shape) { - if (!SVG.parser.draw) { - // fixes apexcharts/vue-apexcharts #14 - SVG.prepare(); - } - - var clone = element.clone(SVG.parser.draw.instance).show(); - box = clone.node.getBBox(); - clone.remove(); - } else { - box = { - x: element.node.clientLeft, - y: element.node.clientTop, - width: element.node.clientWidth, - height: element.node.clientHeight - }; - } - } - - SVG.Box.call(this, box); - } - }, - // Define ancestor - inherit: SVG.Box, - // Define Parent - parent: SVG.Element, - // Constructor - construct: { - // Get bounding box - bbox: function bbox() { - return new SVG.BBox(this); - } - } - }); - SVG.BBox.prototype.constructor = SVG.BBox; - SVG.extend(SVG.Element, { - tbox: function tbox() { - console.warn('Use of TBox is deprecated and mapped to RBox. Use .rbox() instead.'); - return this.rbox(this.doc()); - } - }); - SVG.RBox = SVG.invent({ - // Initialize - create: function create(element) { - SVG.Box.apply(this, [].slice.call(arguments)); - - if (element instanceof SVG.Element) { - SVG.Box.call(this, element.node.getBoundingClientRect()); - } - }, - inherit: SVG.Box, - // define Parent - parent: SVG.Element, - extend: { - addOffset: function addOffset() { - // offset by window scroll position, because getBoundingClientRect changes when window is scrolled - this.x += window.pageXOffset; - this.y += window.pageYOffset; - return this; - } - }, - // Constructor - construct: { - // Get rect box - rbox: function rbox(el) { - if (el) return new SVG.RBox(this).transform(el.screenCTM().inverse()); - return new SVG.RBox(this).addOffset(); - } - } - }); - SVG.RBox.prototype.constructor = SVG.RBox; - SVG.Matrix = SVG.invent({ - // Initialize - create: function create(source) { - var i, - base = arrayToMatrix([1, 0, 0, 1, 0, 0]); // ensure source as object - - source = source instanceof SVG.Element ? source.matrixify() : typeof source === 'string' ? arrayToMatrix(source.split(SVG.regex.delimiter).map(parseFloat)) : arguments.length == 6 ? arrayToMatrix([].slice.call(arguments)) : Array.isArray(source) ? arrayToMatrix(source) : _typeof(source) === 'object' ? source : base; // merge source - - for (i = abcdef.length - 1; i >= 0; --i) { - this[abcdef[i]] = source[abcdef[i]] != null ? source[abcdef[i]] : base[abcdef[i]]; - } - }, - // Add methods - extend: { - // Extract individual transformations - extract: function extract() { - // find delta transform points - var px = deltaTransformPoint(this, 0, 1), - py = deltaTransformPoint(this, 1, 0), - skewX = 180 / Math.PI * Math.atan2(px.y, px.x) - 90; - return { - // translation - x: this.e, - y: this.f, - transformedX: (this.e * Math.cos(skewX * Math.PI / 180) + this.f * Math.sin(skewX * Math.PI / 180)) / Math.sqrt(this.a * this.a + this.b * this.b), - transformedY: (this.f * Math.cos(skewX * Math.PI / 180) + this.e * Math.sin(-skewX * Math.PI / 180)) / Math.sqrt(this.c * this.c + this.d * this.d), - // skew - skewX: -skewX, - skewY: 180 / Math.PI * Math.atan2(py.y, py.x), - // scale - scaleX: Math.sqrt(this.a * this.a + this.b * this.b), - scaleY: Math.sqrt(this.c * this.c + this.d * this.d), - // rotation - rotation: skewX, - a: this.a, - b: this.b, - c: this.c, - d: this.d, - e: this.e, - f: this.f, - matrix: new SVG.Matrix(this) - }; - }, - // Clone matrix - clone: function clone() { - return new SVG.Matrix(this); - }, - // Morph one matrix into another - morph: function morph(matrix) { - // store new destination - this.destination = new SVG.Matrix(matrix); - return this; - }, - // Get morphed matrix at a given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; // calculate morphed matrix at a given position - - var matrix = new SVG.Matrix({ - a: this.a + (this.destination.a - this.a) * pos, - b: this.b + (this.destination.b - this.b) * pos, - c: this.c + (this.destination.c - this.c) * pos, - d: this.d + (this.destination.d - this.d) * pos, - e: this.e + (this.destination.e - this.e) * pos, - f: this.f + (this.destination.f - this.f) * pos - }); - return matrix; - }, - // Multiplies by given matrix - multiply: function multiply(matrix) { - return new SVG.Matrix(this.native().multiply(parseMatrix(matrix).native())); - }, - // Inverses matrix - inverse: function inverse() { - return new SVG.Matrix(this.native().inverse()); - }, - // Translate matrix - translate: function translate(x, y) { - return new SVG.Matrix(this.native().translate(x || 0, y || 0)); - }, - // Scale matrix - scale: function scale(x, y, cx, cy) { - // support uniformal scale - if (arguments.length == 1) { - y = x; - } else if (arguments.length == 3) { - cy = cx; - cx = y; - y = x; - } - - return this.around(cx, cy, new SVG.Matrix(x, 0, 0, y, 0, 0)); - }, - // Rotate matrix - rotate: function rotate(r, cx, cy) { - // convert degrees to radians - r = SVG.utils.radians(r); - return this.around(cx, cy, new SVG.Matrix(Math.cos(r), Math.sin(r), -Math.sin(r), Math.cos(r), 0, 0)); - }, - // Flip matrix on x or y, at a given offset - flip: function flip(a, o) { - return a == 'x' ? this.scale(-1, 1, o, 0) : a == 'y' ? this.scale(1, -1, 0, o) : this.scale(-1, -1, a, o != null ? o : a); - }, - // Skew - skew: function skew(x, y, cx, cy) { - // support uniformal skew - if (arguments.length == 1) { - y = x; - } else if (arguments.length == 3) { - cy = cx; - cx = y; - y = x; - } // convert degrees to radians - - - x = SVG.utils.radians(x); - y = SVG.utils.radians(y); - return this.around(cx, cy, new SVG.Matrix(1, Math.tan(y), Math.tan(x), 1, 0, 0)); - }, - // SkewX - skewX: function skewX(x, cx, cy) { - return this.skew(x, 0, cx, cy); - }, - // SkewY - skewY: function skewY(y, cx, cy) { - return this.skew(0, y, cx, cy); - }, - // Transform around a center point - around: function around(cx, cy, matrix) { - return this.multiply(new SVG.Matrix(1, 0, 0, 1, cx || 0, cy || 0)).multiply(matrix).multiply(new SVG.Matrix(1, 0, 0, 1, -cx || 0, -cy || 0)); - }, - // Convert to native SVGMatrix - native: function native() { - // create new matrix - var matrix = SVG.parser.native.createSVGMatrix(); // update with current values - - for (var i = abcdef.length - 1; i >= 0; i--) { - matrix[abcdef[i]] = this[abcdef[i]]; - } - - return matrix; - }, - // Convert matrix to string - toString: function toString() { - // Construct the matrix directly, avoid values that are too small - return 'matrix(' + float32String(this.a) + ',' + float32String(this.b) + ',' + float32String(this.c) + ',' + float32String(this.d) + ',' + float32String(this.e) + ',' + float32String(this.f) + ')'; - } - }, - // Define parent - parent: SVG.Element, - // Add parent method - construct: { - // Get current matrix - ctm: function ctm() { - return new SVG.Matrix(this.node.getCTM()); - }, - // Get current screen matrix - screenCTM: function screenCTM() { - /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537 - This is needed because FF does not return the transformation matrix - for the inner coordinate system when getScreenCTM() is called on nested svgs. - However all other Browsers do that */ - if (this instanceof SVG.Nested) { - var rect = this.rect(1, 1); - var m = rect.node.getScreenCTM(); - rect.remove(); - return new SVG.Matrix(m); - } - - return new SVG.Matrix(this.node.getScreenCTM()); - } - } - }); - SVG.Point = SVG.invent({ - // Initialize - create: function create(x, y) { - var source, - base = { - x: 0, - y: 0 // ensure source as object - - }; - source = Array.isArray(x) ? { - x: x[0], - y: x[1] - } : _typeof(x) === 'object' ? { - x: x.x, - y: x.y - } : x != null ? { - x: x, - y: y != null ? y : x - } : base; // If y has no value, then x is used has its value - // merge source - - this.x = source.x; - this.y = source.y; - }, - // Add methods - extend: { - // Clone point - clone: function clone() { - return new SVG.Point(this); - }, - // Morph one point into another - morph: function morph(x, y) { - // store new destination - this.destination = new SVG.Point(x, y); - return this; - }, - // Get morphed point at a given position - at: function at(pos) { - // make sure a destination is defined - if (!this.destination) return this; // calculate morphed matrix at a given position - - var point = new SVG.Point({ - x: this.x + (this.destination.x - this.x) * pos, - y: this.y + (this.destination.y - this.y) * pos - }); - return point; - }, - // Convert to native SVGPoint - native: function native() { - // create new point - var point = SVG.parser.native.createSVGPoint(); // update with current values - - point.x = this.x; - point.y = this.y; - return point; - }, - // transform point with matrix - transform: function transform(matrix) { - return new SVG.Point(this.native().matrixTransform(matrix.native())); - } - } - }); - SVG.extend(SVG.Element, { - // Get point - point: function point(x, y) { - return new SVG.Point(x, y).transform(this.screenCTM().inverse()); - } - }); - SVG.extend(SVG.Element, { - // Set svg element attribute - attr: function attr(a, v, n) { - // act as full getter - if (a == null) { - // get an object of attributes - a = {}; - v = this.node.attributes; - - for (n = v.length - 1; n >= 0; n--) { - a[v[n].nodeName] = SVG.regex.isNumber.test(v[n].nodeValue) ? parseFloat(v[n].nodeValue) : v[n].nodeValue; - } - - return a; - } else if (_typeof(a) === 'object') { - // apply every attribute individually if an object is passed - for (v in a) { - this.attr(v, a[v]); - } - } else if (v === null) { - // remove value - this.node.removeAttribute(a); - } else if (v == null) { - // act as a getter if the first and only argument is not an object - v = this.node.getAttribute(a); - return v == null ? SVG.defaults.attrs[a] : SVG.regex.isNumber.test(v) ? parseFloat(v) : v; - } else { - // BUG FIX: some browsers will render a stroke if a color is given even though stroke width is 0 - if (a == 'stroke-width') { - this.attr('stroke', parseFloat(v) > 0 ? this._stroke : null); - } else if (a == 'stroke') { - this._stroke = v; - } // convert image fill and stroke to patterns - - - if (a == 'fill' || a == 'stroke') { - if (SVG.regex.isImage.test(v)) { - v = this.doc().defs().image(v, 0, 0); - } - - if (v instanceof SVG.Image) { - v = this.doc().defs().pattern(0, 0, function () { - this.add(v); - }); - } - } // ensure correct numeric values (also accepts NaN and Infinity) - - - if (typeof v === 'number') { - v = new SVG.Number(v); - } // ensure full hex color - else if (SVG.Color.isColor(v)) { - v = new SVG.Color(v); - } // parse array values - else if (Array.isArray(v)) { - v = new SVG.Array(v); - } // if the passed attribute is leading... - - - if (a == 'leading') { - // ... call the leading method instead - if (this.leading) { - this.leading(v); - } - } else { - // set given attribute on node - typeof n === 'string' ? this.node.setAttributeNS(n, a, v.toString()) : this.node.setAttribute(a, v.toString()); - } // rebuild if required - - - if (this.rebuild && (a == 'font-size' || a == 'x')) { - this.rebuild(a, v); - } - } - - return this; - } - }); - SVG.extend(SVG.Element, { - // Add transformations - transform: function transform(o, relative) { - // get target in case of the fx module, otherwise reference this - var target = this, - matrix, - bbox; // act as a getter - - if (_typeof(o) !== 'object') { - // get current matrix - matrix = new SVG.Matrix(target).extract(); - return typeof o === 'string' ? matrix[o] : matrix; - } // get current matrix - - - matrix = new SVG.Matrix(target); // ensure relative flag - - relative = !!relative || !!o.relative; // act on matrix - - if (o.a != null) { - matrix = relative // relative - ? matrix.multiply(new SVG.Matrix(o)) // absolute - : new SVG.Matrix(o); // act on rotation - } else if (o.rotation != null) { - // ensure centre point - ensureCentre(o, target); // apply transformation - - matrix = relative // relative - ? matrix.rotate(o.rotation, o.cx, o.cy) // absolute - : matrix.rotate(o.rotation - matrix.extract().rotation, o.cx, o.cy); // act on scale - } else if (o.scale != null || o.scaleX != null || o.scaleY != null) { - // ensure centre point - ensureCentre(o, target); // ensure scale values on both axes - - o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1; - o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1; - - if (!relative) { - // absolute; multiply inversed values - var e = matrix.extract(); - o.scaleX = o.scaleX * 1 / e.scaleX; - o.scaleY = o.scaleY * 1 / e.scaleY; - } - - matrix = matrix.scale(o.scaleX, o.scaleY, o.cx, o.cy); // act on skew - } else if (o.skew != null || o.skewX != null || o.skewY != null) { - // ensure centre point - ensureCentre(o, target); // ensure skew values on both axes - - o.skewX = o.skew != null ? o.skew : o.skewX != null ? o.skewX : 0; - o.skewY = o.skew != null ? o.skew : o.skewY != null ? o.skewY : 0; - - if (!relative) { - // absolute; reset skew values - var e = matrix.extract(); - matrix = matrix.multiply(new SVG.Matrix().skew(e.skewX, e.skewY, o.cx, o.cy).inverse()); - } - - matrix = matrix.skew(o.skewX, o.skewY, o.cx, o.cy); // act on flip - } else if (o.flip) { - if (o.flip == 'x' || o.flip == 'y') { - o.offset = o.offset == null ? target.bbox()['c' + o.flip] : o.offset; - } else { - if (o.offset == null) { - bbox = target.bbox(); - o.flip = bbox.cx; - o.offset = bbox.cy; - } else { - o.flip = o.offset; - } - } - - matrix = new SVG.Matrix().flip(o.flip, o.offset); // act on translate - } else if (o.x != null || o.y != null) { - if (relative) { - // relative - matrix = matrix.translate(o.x, o.y); - } else { - // absolute - if (o.x != null) matrix.e = o.x; - if (o.y != null) matrix.f = o.y; - } - } - - return this.attr('transform', matrix); - } - }); - SVG.extend(SVG.FX, { - transform: function transform(o, relative) { - // get target in case of the fx module, otherwise reference this - var target = this.target(), - matrix, - bbox; // act as a getter - - if (_typeof(o) !== 'object') { - // get current matrix - matrix = new SVG.Matrix(target).extract(); - return typeof o === 'string' ? matrix[o] : matrix; - } // ensure relative flag - - - relative = !!relative || !!o.relative; // act on matrix - - if (o.a != null) { - matrix = new SVG.Matrix(o); // act on rotation - } else if (o.rotation != null) { - // ensure centre point - ensureCentre(o, target); // apply transformation - - matrix = new SVG.Rotate(o.rotation, o.cx, o.cy); // act on scale - } else if (o.scale != null || o.scaleX != null || o.scaleY != null) { - // ensure centre point - ensureCentre(o, target); // ensure scale values on both axes - - o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1; - o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1; - matrix = new SVG.Scale(o.scaleX, o.scaleY, o.cx, o.cy); // act on skew - } else if (o.skewX != null || o.skewY != null) { - // ensure centre point - ensureCentre(o, target); // ensure skew values on both axes - - o.skewX = o.skewX != null ? o.skewX : 0; - o.skewY = o.skewY != null ? o.skewY : 0; - matrix = new SVG.Skew(o.skewX, o.skewY, o.cx, o.cy); // act on flip - } else if (o.flip) { - if (o.flip == 'x' || o.flip == 'y') { - o.offset = o.offset == null ? target.bbox()['c' + o.flip] : o.offset; - } else { - if (o.offset == null) { - bbox = target.bbox(); - o.flip = bbox.cx; - o.offset = bbox.cy; - } else { - o.flip = o.offset; - } - } - - matrix = new SVG.Matrix().flip(o.flip, o.offset); // act on translate - } else if (o.x != null || o.y != null) { - matrix = new SVG.Translate(o.x, o.y); - } - - if (!matrix) return this; - matrix.relative = relative; - this.last().transforms.push(matrix); - return this._callStart(); - } - }); - SVG.extend(SVG.Element, { - // Reset all transformations - untransform: function untransform() { - return this.attr('transform', null); - }, - // merge the whole transformation chain into one matrix and returns it - matrixify: function matrixify() { - var matrix = (this.attr('transform') || ''). // split transformations - split(SVG.regex.transforms).slice(0, -1).map(function (str) { - // generate key => value pairs - var kv = str.trim().split('('); - return [kv[0], kv[1].split(SVG.regex.delimiter).map(function (str) { - return parseFloat(str); - })]; - }) // merge every transformation into one matrix - .reduce(function (matrix, transform) { - if (transform[0] == 'matrix') return matrix.multiply(arrayToMatrix(transform[1])); - return matrix[transform[0]].apply(matrix, transform[1]); - }, new SVG.Matrix()); - return matrix; - }, - // add an element to another parent without changing the visual representation on the screen - toParent: function toParent(parent) { - if (this == parent) return this; - var ctm = this.screenCTM(); - var pCtm = parent.screenCTM().inverse(); - this.addTo(parent).untransform().transform(pCtm.multiply(ctm)); - return this; - }, - // same as above with parent equals root-svg - toDoc: function toDoc() { - return this.toParent(this.doc()); - } - }); - SVG.Transformation = SVG.invent({ - create: function create(source, inversed) { - if (arguments.length > 1 && typeof inversed !== 'boolean') { - return this.constructor.call(this, [].slice.call(arguments)); - } - - if (Array.isArray(source)) { - for (var i = 0, len = this.arguments.length; i < len; ++i) { - this[this.arguments[i]] = source[i]; - } - } else if (_typeof(source) === 'object') { - for (var i = 0, len = this.arguments.length; i < len; ++i) { - this[this.arguments[i]] = source[this.arguments[i]]; - } - } - - this.inversed = false; - - if (inversed === true) { - this.inversed = true; - } - }, - extend: { - arguments: [], - method: '', - at: function at(pos) { - var params = []; - - for (var i = 0, len = this.arguments.length; i < len; ++i) { - params.push(this[this.arguments[i]]); - } - - var m = this._undo || new SVG.Matrix(); - m = new SVG.Matrix().morph(SVG.Matrix.prototype[this.method].apply(m, params)).at(pos); - return this.inversed ? m.inverse() : m; - }, - undo: function undo(o) { - for (var i = 0, len = this.arguments.length; i < len; ++i) { - o[this.arguments[i]] = typeof this[this.arguments[i]] === 'undefined' ? 0 : o[this.arguments[i]]; - } // The method SVG.Matrix.extract which was used before calling this - // method to obtain a value for the parameter o doesn't return a cx and - // a cy so we use the ones that were provided to this object at its creation - - - o.cx = this.cx; - o.cy = this.cy; - this._undo = new SVG[capitalize(this.method)](o, true).at(1); - return this; - } - } - }); - SVG.Translate = SVG.invent({ - parent: SVG.Matrix, - inherit: SVG.Transformation, - create: function create(source, inversed) { - this.constructor.apply(this, [].slice.call(arguments)); - }, - extend: { - arguments: ['transformedX', 'transformedY'], - method: 'translate' - } - }); - SVG.Rotate = SVG.invent({ - parent: SVG.Matrix, - inherit: SVG.Transformation, - create: function create(source, inversed) { - this.constructor.apply(this, [].slice.call(arguments)); - }, - extend: { - arguments: ['rotation', 'cx', 'cy'], - method: 'rotate', - at: function at(pos) { - var m = new SVG.Matrix().rotate(new SVG.Number().morph(this.rotation - (this._undo ? this._undo.rotation : 0)).at(pos), this.cx, this.cy); - return this.inversed ? m.inverse() : m; - }, - undo: function undo(o) { - this._undo = o; - return this; - } - } - }); - SVG.Scale = SVG.invent({ - parent: SVG.Matrix, - inherit: SVG.Transformation, - create: function create(source, inversed) { - this.constructor.apply(this, [].slice.call(arguments)); - }, - extend: { - arguments: ['scaleX', 'scaleY', 'cx', 'cy'], - method: 'scale' - } - }); - SVG.Skew = SVG.invent({ - parent: SVG.Matrix, - inherit: SVG.Transformation, - create: function create(source, inversed) { - this.constructor.apply(this, [].slice.call(arguments)); - }, - extend: { - arguments: ['skewX', 'skewY', 'cx', 'cy'], - method: 'skew' - } - }); - SVG.extend(SVG.Element, { - // Dynamic style generator - style: function style(s, v) { - if (arguments.length == 0) { - // get full style - return this.node.style.cssText || ''; - } else if (arguments.length < 2) { - // apply every style individually if an object is passed - if (_typeof(s) === 'object') { - for (v in s) { - this.style(v, s[v]); - } - } else if (SVG.regex.isCss.test(s)) { - // parse css string - s = s.split(/\s*;\s*/) // filter out suffix ; and stuff like ;; - .filter(function (e) { - return !!e; - }).map(function (e) { - return e.split(/\s*:\s*/); - }); // apply every definition individually - - while (v = s.pop()) { - this.style(v[0], v[1]); - } - } else { - // act as a getter if the first and only argument is not an object - return this.node.style[camelCase(s)]; - } - } else { - this.node.style[camelCase(s)] = v === null || SVG.regex.isBlank.test(v) ? '' : v; - } - - return this; - } - }); - SVG.Parent = SVG.invent({ - // Initialize node - create: function create(element) { - this.constructor.call(this, element); - }, - // Inherit from - inherit: SVG.Element, - // Add class methods - extend: { - // Returns all child elements - children: function children() { - return SVG.utils.map(SVG.utils.filterSVGElements(this.node.childNodes), function (node) { - return SVG.adopt(node); - }); - }, - // Add given element at a position - add: function add(element, i) { - if (i == null) { - this.node.appendChild(element.node); - } else if (element.node != this.node.childNodes[i]) { - this.node.insertBefore(element.node, this.node.childNodes[i]); - } - - return this; - }, - // Basically does the same as `add()` but returns the added element instead - put: function put(element, i) { - this.add(element, i); - return element; - }, - // Checks if the given element is a child - has: function has(element) { - return this.index(element) >= 0; - }, - // Gets index of given element - index: function index(element) { - return [].slice.call(this.node.childNodes).indexOf(element.node); - }, - // Get a element at the given index - get: function get(i) { - return SVG.adopt(this.node.childNodes[i]); - }, - // Get first child - first: function first() { - return this.get(0); - }, - // Get the last child - last: function last() { - return this.get(this.node.childNodes.length - 1); - }, - // Iterates over all children and invokes a given block - each: function each(block, deep) { - var i, - il, - children = this.children(); - - for (i = 0, il = children.length; i < il; i++) { - if (children[i] instanceof SVG.Element) { - block.apply(children[i], [i, children]); - } - - if (deep && children[i] instanceof SVG.Container) { - children[i].each(block, deep); - } - } - - return this; - }, - // Remove a given child - removeElement: function removeElement(element) { - this.node.removeChild(element.node); - return this; - }, - // Remove all elements in this container - clear: function clear() { - // remove children - while (this.node.hasChildNodes()) { - this.node.removeChild(this.node.lastChild); - } // remove defs reference - - - delete this._defs; - return this; - }, - // Get defs - defs: function defs() { - return this.doc().defs(); - } - } - }); - SVG.extend(SVG.Parent, { - ungroup: function ungroup(parent, depth) { - if (depth === 0 || this instanceof SVG.Defs || this.node == SVG.parser.draw) return this; - parent = parent || (this instanceof SVG.Doc ? this : this.parent(SVG.Parent)); - depth = depth || Infinity; - this.each(function () { - if (this instanceof SVG.Defs) return this; - if (this instanceof SVG.Parent) return this.ungroup(parent, depth - 1); - return this.toParent(parent); - }); - this.node.firstChild || this.remove(); - return this; - }, - flatten: function flatten(parent, depth) { - return this.ungroup(parent, depth); - } - }); - SVG.Container = SVG.invent({ - // Initialize node - create: function create(element) { - this.constructor.call(this, element); - }, - // Inherit from - inherit: SVG.Parent - }); - SVG.ViewBox = SVG.invent({ - create: function create(source) { - var base = [0, 0, 0, 0]; - var x, - y, - width, - height, - box, - view, - we, - he, - wm = 1, - // width multiplier - hm = 1, - // height multiplier - reg = /[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?/gi; - - if (source instanceof SVG.Element) { - we = source; - he = source; - view = (source.attr('viewBox') || '').match(reg); - box = source.bbox; // get dimensions of current node - - width = new SVG.Number(source.width()); - height = new SVG.Number(source.height()); // find nearest non-percentual dimensions - - while (width.unit == '%') { - wm *= width.value; - width = new SVG.Number(we instanceof SVG.Doc ? we.parent().offsetWidth : we.parent().width()); - we = we.parent(); - } - - while (height.unit == '%') { - hm *= height.value; - height = new SVG.Number(he instanceof SVG.Doc ? he.parent().offsetHeight : he.parent().height()); - he = he.parent(); - } // ensure defaults - - - this.x = 0; - this.y = 0; - this.width = width * wm; - this.height = height * hm; - this.zoom = 1; - - if (view) { - // get width and height from viewbox - x = parseFloat(view[0]); - y = parseFloat(view[1]); - width = parseFloat(view[2]); - height = parseFloat(view[3]); // calculate zoom accoring to viewbox - - this.zoom = this.width / this.height > width / height ? this.height / height : this.width / width; // calculate real pixel dimensions on parent SVG.Doc element - - this.x = x; - this.y = y; - this.width = width; - this.height = height; - } - } else { - // ensure source as object - source = typeof source === 'string' ? source.match(reg).map(function (el) { - return parseFloat(el); - }) : Array.isArray(source) ? source : _typeof(source) === 'object' ? [source.x, source.y, source.width, source.height] : arguments.length == 4 ? [].slice.call(arguments) : base; - this.x = source[0]; - this.y = source[1]; - this.width = source[2]; - this.height = source[3]; - } - }, - extend: { - toString: function toString() { - return this.x + ' ' + this.y + ' ' + this.width + ' ' + this.height; - }, - morph: function morph(x, y, width, height) { - this.destination = new SVG.ViewBox(x, y, width, height); - return this; - }, - at: function at(pos) { - if (!this.destination) return this; - return new SVG.ViewBox([this.x + (this.destination.x - this.x) * pos, this.y + (this.destination.y - this.y) * pos, this.width + (this.destination.width - this.width) * pos, this.height + (this.destination.height - this.height) * pos]); - } - }, - // Define parent - parent: SVG.Container, - // Add parent method - construct: { - // get/set viewbox - viewbox: function viewbox(x, y, width, height) { - if (arguments.length == 0) // act as a getter if there are no arguments - { - return new SVG.ViewBox(this); - } // otherwise act as a setter - - - return this.attr('viewBox', new SVG.ViewBox(x, y, width, height)); - } - } - }) // Add events to elements - ; - ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout', 'mousemove', // , 'mouseenter' -> not supported by IE - // , 'mouseleave' -> not supported by IE - 'touchstart', 'touchmove', 'touchleave', 'touchend', 'touchcancel'].forEach(function (event) { - // add event to SVG.Element - SVG.Element.prototype[event] = function (f) { - // bind event to element rather than element node - SVG.on(this.node, event, f); - return this; - }; - }); // Initialize listeners stack - - SVG.listeners = []; - SVG.handlerMap = []; - SVG.listenerId = 0; // Add event binder in the SVG namespace - - SVG.on = function (node, event, listener, binding, options) { - // create listener, get object-index - var l = listener.bind(binding || node.instance || node), - index = (SVG.handlerMap.indexOf(node) + 1 || SVG.handlerMap.push(node)) - 1, - ev = event.split('.')[0], - ns = event.split('.')[1] || '*'; // ensure valid object - - SVG.listeners[index] = SVG.listeners[index] || {}; - SVG.listeners[index][ev] = SVG.listeners[index][ev] || {}; - SVG.listeners[index][ev][ns] = SVG.listeners[index][ev][ns] || {}; - - if (!listener._svgjsListenerId) { - listener._svgjsListenerId = ++SVG.listenerId; - } // reference listener - - - SVG.listeners[index][ev][ns][listener._svgjsListenerId] = l; // add listener - - node.addEventListener(ev, l, options || false); - }; // Add event unbinder in the SVG namespace - - - SVG.off = function (node, event, listener) { - var index = SVG.handlerMap.indexOf(node), - ev = event && event.split('.')[0], - ns = event && event.split('.')[1], - namespace = ''; - if (index == -1) return; - - if (listener) { - if (typeof listener === 'function') listener = listener._svgjsListenerId; - if (!listener) return; // remove listener reference - - if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns || '*']) { - // remove listener - node.removeEventListener(ev, SVG.listeners[index][ev][ns || '*'][listener], false); - delete SVG.listeners[index][ev][ns || '*'][listener]; - } - } else if (ns && ev) { - // remove all listeners for a namespaced event - if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns]) { - for (listener in SVG.listeners[index][ev][ns]) { - SVG.off(node, [ev, ns].join('.'), listener); - } - - delete SVG.listeners[index][ev][ns]; - } - } else if (ns) { - // remove all listeners for a specific namespace - for (event in SVG.listeners[index]) { - for (namespace in SVG.listeners[index][event]) { - if (ns === namespace) { - SVG.off(node, [event, ns].join('.')); - } - } - } - } else if (ev) { - // remove all listeners for the event - if (SVG.listeners[index][ev]) { - for (namespace in SVG.listeners[index][ev]) { - SVG.off(node, [ev, namespace].join('.')); - } - - delete SVG.listeners[index][ev]; - } - } else { - // remove all listeners on a given node - for (event in SVG.listeners[index]) { - SVG.off(node, event); - } - - delete SVG.listeners[index]; - delete SVG.handlerMap[index]; - } - }; // - - - SVG.extend(SVG.Element, { - // Bind given event to listener - on: function on(event, listener, binding, options) { - SVG.on(this.node, event, listener, binding, options); - return this; - }, - // Unbind event from listener - off: function off(event, listener) { - SVG.off(this.node, event, listener); - return this; - }, - // Fire given event - fire: function fire(event, data) { - // Dispatch event - if (event instanceof window.Event) { - this.node.dispatchEvent(event); - } else { - this.node.dispatchEvent(event = new SVG.CustomEvent(event, { - detail: data, - cancelable: true - })); - } - - this._event = event; - return this; - }, - event: function event() { - return this._event; - } - }); - SVG.Defs = SVG.invent({ - // Initialize node - create: 'defs', - // Inherit from - inherit: SVG.Container - }); - SVG.G = SVG.invent({ - // Initialize node - create: 'g', - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Move over x-axis - x: function x(_x3) { - return _x3 == null ? this.transform('x') : this.transform({ - x: _x3 - this.x() - }, true); - }, - // Move over y-axis - y: function y(_y3) { - return _y3 == null ? this.transform('y') : this.transform({ - y: _y3 - this.y() - }, true); - }, - // Move by center over x-axis - cx: function cx(x) { - return x == null ? this.gbox().cx : this.x(x - this.gbox().width / 2); - }, - // Move by center over y-axis - cy: function cy(y) { - return y == null ? this.gbox().cy : this.y(y - this.gbox().height / 2); - }, - gbox: function gbox() { - var bbox = this.bbox(), - trans = this.transform(); - bbox.x += trans.x; - bbox.x2 += trans.x; - bbox.cx += trans.x; - bbox.y += trans.y; - bbox.y2 += trans.y; - bbox.cy += trans.y; - return bbox; - } - }, - // Add parent method - construct: { - // Create a group element - group: function group() { - return this.put(new SVG.G()); - } - } - }); - SVG.Doc = SVG.invent({ - // Initialize node - create: function create(element) { - if (element) { - // ensure the presence of a dom element - element = typeof element === 'string' ? document.getElementById(element) : element; // If the target is an svg element, use that element as the main wrapper. - // This allows svg.js to work with svg documents as well. - - if (element.nodeName == 'svg') { - this.constructor.call(this, element); - } else { - this.constructor.call(this, SVG.create('svg')); - element.appendChild(this.node); - this.size('100%', '100%'); - } // set svg element attributes and ensure defs node - - - this.namespace().defs(); - } - }, - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Add namespaces - namespace: function namespace() { - return this.attr({ - xmlns: SVG.ns, - version: '1.1' - }).attr('xmlns:xlink', SVG.xlink, SVG.xmlns).attr('xmlns:svgjs', SVG.svgjs, SVG.xmlns); - }, - // Creates and returns defs element - defs: function defs() { - if (!this._defs) { - var defs; // Find or create a defs element in this instance - - if (defs = this.node.getElementsByTagName('defs')[0]) { - this._defs = SVG.adopt(defs); - } else { - this._defs = new SVG.Defs(); - } // Make sure the defs node is at the end of the stack - - - this.node.appendChild(this._defs.node); - } - - return this._defs; - }, - // custom parent method - parent: function parent() { - if (!this.node.parentNode || this.node.parentNode.nodeName == '#document') return null; - return this.node.parentNode; - }, - // Fix for possible sub-pixel offset. See: - // https://bugzilla.mozilla.org/show_bug.cgi?id=608812 - spof: function spof() { - var pos = this.node.getScreenCTM(); - - if (pos) { - this.style('left', -pos.e % 1 + 'px').style('top', -pos.f % 1 + 'px'); - } - - return this; - }, - // Removes the doc from the DOM - remove: function remove() { - if (this.parent()) { - this.parent().removeChild(this.node); - } - - return this; - }, - clear: function clear() { - // remove children - while (this.node.hasChildNodes()) { - this.node.removeChild(this.node.lastChild); - } // remove defs reference - - - delete this._defs; // add back parser - - if (SVG.parser.draw && !SVG.parser.draw.parentNode) { - this.node.appendChild(SVG.parser.draw); - } - - return this; - }, - clone: function clone(parent) { - // write dom data to the dom so the clone can pickup the data - this.writeDataToDom(); // get reference to node - - var node = this.node; // clone element and assign new id - - var clone = assignNewId(node.cloneNode(true)); // insert the clone in the given parent or after myself - - if (parent) { - (parent.node || parent).appendChild(clone.node); - } else { - node.parentNode.insertBefore(clone.node, node.nextSibling); - } - - return clone; - } - } - }); // ### This module adds backward / forward functionality to elements. - // - - SVG.extend(SVG.Element, { - // Get all siblings, including myself - siblings: function siblings() { - return this.parent().children(); - }, - // Get the curent position siblings - position: function position() { - return this.parent().index(this); - }, - // Get the next element (will return null if there is none) - next: function next() { - return this.siblings()[this.position() + 1]; - }, - // Get the next element (will return null if there is none) - previous: function previous() { - return this.siblings()[this.position() - 1]; - }, - // Send given element one step forward - forward: function forward() { - var i = this.position() + 1, - p = this.parent(); // move node one step forward - - p.removeElement(this).add(this, i); // make sure defs node is always at the top - - if (p instanceof SVG.Doc) { - p.node.appendChild(p.defs().node); - } - - return this; - }, - // Send given element one step backward - backward: function backward() { - var i = this.position(); - - if (i > 0) { - this.parent().removeElement(this).add(this, i - 1); - } - - return this; - }, - // Send given element all the way to the front - front: function front() { - var p = this.parent(); // Move node forward - - p.node.appendChild(this.node); // Make sure defs node is always at the top - - if (p instanceof SVG.Doc) { - p.node.appendChild(p.defs().node); - } - - return this; - }, - // Send given element all the way to the back - back: function back() { - if (this.position() > 0) { - this.parent().removeElement(this).add(this, 0); - } - - return this; - }, - // Inserts a given element before the targeted element - before: function before(element) { - element.remove(); - var i = this.position(); - this.parent().add(element, i); - return this; - }, - // Insters a given element after the targeted element - after: function after(element) { - element.remove(); - var i = this.position(); - this.parent().add(element, i + 1); - return this; - } - }); - SVG.Mask = SVG.invent({ - // Initialize node - create: function create() { - this.constructor.call(this, SVG.create('mask')); // keep references to masked elements - - this.targets = []; - }, - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Unmask all masked elements and remove itself - remove: function remove() { - // unmask all targets - for (var i = this.targets.length - 1; i >= 0; i--) { - if (this.targets[i]) { - this.targets[i].unmask(); - } - } - - this.targets = []; // remove mask from parent - - SVG.Element.prototype.remove.call(this); - return this; - } - }, - // Add parent method - construct: { - // Create masking element - mask: function mask() { - return this.defs().put(new SVG.Mask()); - } - } - }); - SVG.extend(SVG.Element, { - // Distribute mask to svg element - maskWith: function maskWith(element) { - // use given mask or create a new one - this.masker = element instanceof SVG.Mask ? element : this.parent().mask().add(element); // store reverence on self in mask - - this.masker.targets.push(this); // apply mask - - return this.attr('mask', 'url("#' + this.masker.attr('id') + '")'); - }, - // Unmask element - unmask: function unmask() { - delete this.masker; - return this.attr('mask', null); - } - }); - SVG.ClipPath = SVG.invent({ - // Initialize node - create: function create() { - this.constructor.call(this, SVG.create('clipPath')); // keep references to clipped elements - - this.targets = []; - }, - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Unclip all clipped elements and remove itself - remove: function remove() { - // unclip all targets - for (var i = this.targets.length - 1; i >= 0; i--) { - if (this.targets[i]) { - this.targets[i].unclip(); - } - } - - this.targets = []; // remove clipPath from parent - - this.parent().removeElement(this); - return this; - } - }, - // Add parent method - construct: { - // Create clipping element - clip: function clip() { - return this.defs().put(new SVG.ClipPath()); - } - } - }); // - - SVG.extend(SVG.Element, { - // Distribute clipPath to svg element - clipWith: function clipWith(element) { - // use given clip or create a new one - this.clipper = element instanceof SVG.ClipPath ? element : this.parent().clip().add(element); // store reverence on self in mask - - this.clipper.targets.push(this); // apply mask - - return this.attr('clip-path', 'url("#' + this.clipper.attr('id') + '")'); - }, - // Unclip element - unclip: function unclip() { - delete this.clipper; - return this.attr('clip-path', null); - } - }); - SVG.Gradient = SVG.invent({ - // Initialize node - create: function create(type) { - this.constructor.call(this, SVG.create(type + 'Gradient')); // store type - - this.type = type; - }, - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Add a color stop - at: function at(offset, color, opacity) { - return this.put(new SVG.Stop()).update(offset, color, opacity); - }, - // Update gradient - update: function update(block) { - // remove all stops - this.clear(); // invoke passed block - - if (typeof block === 'function') { - block.call(this, this); - } - - return this; - }, - // Return the fill id - fill: function fill() { - return 'url(#' + this.id() + ')'; - }, - // Alias string convertion to fill - toString: function toString() { - return this.fill(); - }, - // custom attr to handle transform - attr: function attr(a, b, c) { - if (a == 'transform') a = 'gradientTransform'; - return SVG.Container.prototype.attr.call(this, a, b, c); - } - }, - // Add parent method - construct: { - // Create gradient element in defs - gradient: function gradient(type, block) { - return this.defs().gradient(type, block); - } - } - }); // Add animatable methods to both gradient and fx module - - SVG.extend(SVG.Gradient, SVG.FX, { - // From position - from: function from(x, y) { - return (this._target || this).type == 'radial' ? this.attr({ - fx: new SVG.Number(x), - fy: new SVG.Number(y) - }) : this.attr({ - x1: new SVG.Number(x), - y1: new SVG.Number(y) - }); - }, - // To position - to: function to(x, y) { - return (this._target || this).type == 'radial' ? this.attr({ - cx: new SVG.Number(x), - cy: new SVG.Number(y) - }) : this.attr({ - x2: new SVG.Number(x), - y2: new SVG.Number(y) - }); - } - }); // Base gradient generation - - SVG.extend(SVG.Defs, { - // define gradient - gradient: function gradient(type, block) { - return this.put(new SVG.Gradient(type)).update(block); - } - }); - SVG.Stop = SVG.invent({ - // Initialize node - create: 'stop', - // Inherit from - inherit: SVG.Element, - // Add class methods - extend: { - // add color stops - update: function update(o) { - if (typeof o === 'number' || o instanceof SVG.Number) { - o = { - offset: arguments[0], - color: arguments[1], - opacity: arguments[2] - }; - } // set attributes - - - if (o.opacity != null) this.attr('stop-opacity', o.opacity); - if (o.color != null) this.attr('stop-color', o.color); - if (o.offset != null) this.attr('offset', new SVG.Number(o.offset)); - return this; - } - } - }); - SVG.Pattern = SVG.invent({ - // Initialize node - create: 'pattern', - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Return the fill id - fill: function fill() { - return 'url(#' + this.id() + ')'; - }, - // Update pattern by rebuilding - update: function update(block) { - // remove content - this.clear(); // invoke passed block - - if (typeof block === 'function') { - block.call(this, this); - } - - return this; - }, - // Alias string convertion to fill - toString: function toString() { - return this.fill(); - }, - // custom attr to handle transform - attr: function attr(a, b, c) { - if (a == 'transform') a = 'patternTransform'; - return SVG.Container.prototype.attr.call(this, a, b, c); - } - }, - // Add parent method - construct: { - // Create pattern element in defs - pattern: function pattern(width, height, block) { - return this.defs().pattern(width, height, block); - } - } - }); - SVG.extend(SVG.Defs, { - // Define gradient - pattern: function pattern(width, height, block) { - return this.put(new SVG.Pattern()).update(block).attr({ - x: 0, - y: 0, - width: width, - height: height, - patternUnits: 'userSpaceOnUse' - }); - } - }); - SVG.Shape = SVG.invent({ - // Initialize node - create: function create(element) { - this.constructor.call(this, element); - }, - // Inherit from - inherit: SVG.Element - }); - SVG.Bare = SVG.invent({ - // Initialize - create: function create(element, inherit) { - // construct element - this.constructor.call(this, SVG.create(element)); // inherit custom methods - - if (inherit) { - for (var method in inherit.prototype) { - if (typeof inherit.prototype[method] === 'function') { - this[method] = inherit.prototype[method]; - } - } - } - }, - // Inherit from - inherit: SVG.Element, - // Add methods - extend: { - // Insert some plain text - words: function words(text) { - // remove contents - while (this.node.hasChildNodes()) { - this.node.removeChild(this.node.lastChild); - } // create text node - - - this.node.appendChild(document.createTextNode(text)); - return this; - } - } - }); - SVG.extend(SVG.Parent, { - // Create an element that is not described by SVG.js - element: function element(_element, inherit) { - return this.put(new SVG.Bare(_element, inherit)); - } - }); - SVG.Symbol = SVG.invent({ - // Initialize node - create: 'symbol', - // Inherit from - inherit: SVG.Container, - construct: { - // create symbol - symbol: function symbol() { - return this.put(new SVG.Symbol()); - } - } - }); - SVG.Use = SVG.invent({ - // Initialize node - create: 'use', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Use element as a reference - element: function element(_element2, file) { - // Set lined element - return this.attr('href', (file || '') + '#' + _element2, SVG.xlink); - } - }, - // Add parent method - construct: { - // Create a use element - use: function use(element, file) { - return this.put(new SVG.Use()).element(element, file); - } - } - }); - SVG.Rect = SVG.invent({ - // Initialize node - create: 'rect', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create a rect element - rect: function rect(width, height) { - return this.put(new SVG.Rect()).size(width, height); - } - } - }); - SVG.Circle = SVG.invent({ - // Initialize node - create: 'circle', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create circle element, based on ellipse - circle: function circle(size) { - return this.put(new SVG.Circle()).rx(new SVG.Number(size).divide(2)).move(0, 0); - } - } - }); - SVG.extend(SVG.Circle, SVG.FX, { - // Radius x value - rx: function rx(_rx) { - return this.attr('r', _rx); - }, - // Alias radius x value - ry: function ry(_ry) { - return this.rx(_ry); - } - }); - SVG.Ellipse = SVG.invent({ - // Initialize node - create: 'ellipse', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create an ellipse - ellipse: function ellipse(width, height) { - return this.put(new SVG.Ellipse()).size(width, height).move(0, 0); - } - } - }); - SVG.extend(SVG.Ellipse, SVG.Rect, SVG.FX, { - // Radius x value - rx: function rx(_rx2) { - return this.attr('rx', _rx2); - }, - // Radius y value - ry: function ry(_ry2) { - return this.attr('ry', _ry2); - } - }); // Add common method - - SVG.extend(SVG.Circle, SVG.Ellipse, { - // Move over x-axis - x: function x(_x4) { - return _x4 == null ? this.cx() - this.rx() : this.cx(_x4 + this.rx()); - }, - // Move over y-axis - y: function y(_y4) { - return _y4 == null ? this.cy() - this.ry() : this.cy(_y4 + this.ry()); - }, - // Move by center over x-axis - cx: function cx(x) { - return x == null ? this.attr('cx') : this.attr('cx', x); - }, - // Move by center over y-axis - cy: function cy(y) { - return y == null ? this.attr('cy') : this.attr('cy', y); - }, - // Set width of element - width: function width(_width3) { - return _width3 == null ? this.rx() * 2 : this.rx(new SVG.Number(_width3).divide(2)); - }, - // Set height of element - height: function height(_height3) { - return _height3 == null ? this.ry() * 2 : this.ry(new SVG.Number(_height3).divide(2)); - }, - // Custom size function - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.rx(new SVG.Number(p.width).divide(2)).ry(new SVG.Number(p.height).divide(2)); - } - }); - SVG.Line = SVG.invent({ - // Initialize node - create: 'line', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Get array - array: function array() { - return new SVG.PointArray([[this.attr('x1'), this.attr('y1')], [this.attr('x2'), this.attr('y2')]]); - }, - // Overwrite native plot() method - plot: function plot(x1, y1, x2, y2) { - if (x1 == null) { - return this.array(); - } else if (typeof y1 !== 'undefined') { - x1 = { - x1: x1, - y1: y1, - x2: x2, - y2: y2 - }; - } else { - x1 = new SVG.PointArray(x1).toLine(); - } - - return this.attr(x1); - }, - // Move by left top corner - move: function move(x, y) { - return this.attr(this.array().move(x, y).toLine()); - }, - // Set element size to given width and height - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.attr(this.array().size(p.width, p.height).toLine()); - } - }, - // Add parent method - construct: { - // Create a line element - line: function line(x1, y1, x2, y2) { - // make sure plot is called as a setter - // x1 is not necessarily a number, it can also be an array, a string and a SVG.PointArray - return SVG.Line.prototype.plot.apply(this.put(new SVG.Line()), x1 != null ? [x1, y1, x2, y2] : [0, 0, 0, 0]); - } - } - }); - SVG.Polyline = SVG.invent({ - // Initialize node - create: 'polyline', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create a wrapped polyline element - polyline: function polyline(p) { - // make sure plot is called as a setter - return this.put(new SVG.Polyline()).plot(p || new SVG.PointArray()); - } - } - }); - SVG.Polygon = SVG.invent({ - // Initialize node - create: 'polygon', - // Inherit from - inherit: SVG.Shape, - // Add parent method - construct: { - // Create a wrapped polygon element - polygon: function polygon(p) { - // make sure plot is called as a setter - return this.put(new SVG.Polygon()).plot(p || new SVG.PointArray()); - } - } - }); // Add polygon-specific functions - - SVG.extend(SVG.Polyline, SVG.Polygon, { - // Get array - array: function array() { - return this._array || (this._array = new SVG.PointArray(this.attr('points'))); - }, - // Plot new path - plot: function plot(p) { - return p == null ? this.array() : this.clear().attr('points', typeof p === 'string' ? p : this._array = new SVG.PointArray(p)); - }, - // Clear array cache - clear: function clear() { - delete this._array; - return this; - }, - // Move by left top corner - move: function move(x, y) { - return this.attr('points', this.array().move(x, y)); - }, - // Set element size to given width and height - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.attr('points', this.array().size(p.width, p.height)); - } - }); // unify all point to point elements - - SVG.extend(SVG.Line, SVG.Polyline, SVG.Polygon, { - // Define morphable array - morphArray: SVG.PointArray, - // Move by left top corner over x-axis - x: function x(_x5) { - return _x5 == null ? this.bbox().x : this.move(_x5, this.bbox().y); - }, - // Move by left top corner over y-axis - y: function y(_y5) { - return _y5 == null ? this.bbox().y : this.move(this.bbox().x, _y5); - }, - // Set width of element - width: function width(_width4) { - var b = this.bbox(); - return _width4 == null ? b.width : this.size(_width4, b.height); - }, - // Set height of element - height: function height(_height4) { - var b = this.bbox(); - return _height4 == null ? b.height : this.size(b.width, _height4); - } - }); - SVG.Path = SVG.invent({ - // Initialize node - create: 'path', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Define morphable array - morphArray: SVG.PathArray, - // Get array - array: function array() { - return this._array || (this._array = new SVG.PathArray(this.attr('d'))); - }, - // Plot new path - plot: function plot(d) { - return d == null ? this.array() : this.clear().attr('d', typeof d === 'string' ? d : this._array = new SVG.PathArray(d)); - }, - // Clear array cache - clear: function clear() { - delete this._array; - return this; - }, - // Move by left top corner - move: function move(x, y) { - return this.attr('d', this.array().move(x, y)); - }, - // Move by left top corner over x-axis - x: function x(_x6) { - return _x6 == null ? this.bbox().x : this.move(_x6, this.bbox().y); - }, - // Move by left top corner over y-axis - y: function y(_y6) { - return _y6 == null ? this.bbox().y : this.move(this.bbox().x, _y6); - }, - // Set element size to given width and height - size: function size(width, height) { - var p = proportionalSize(this, width, height); - return this.attr('d', this.array().size(p.width, p.height)); - }, - // Set width of element - width: function width(_width5) { - return _width5 == null ? this.bbox().width : this.size(_width5, this.bbox().height); - }, - // Set height of element - height: function height(_height5) { - return _height5 == null ? this.bbox().height : this.size(this.bbox().width, _height5); - } - }, - // Add parent method - construct: { - // Create a wrapped path element - path: function path(d) { - // make sure plot is called as a setter - return this.put(new SVG.Path()).plot(d || new SVG.PathArray()); - } - } - }); - SVG.Image = SVG.invent({ - // Initialize node - create: 'image', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // (re)load image - load: function load(url) { - if (!url) return this; - var self = this, - img = new window.Image(); // preload image - - SVG.on(img, 'load', function () { - SVG.off(img); - var p = self.parent(SVG.Pattern); - if (p === null) return; // ensure image size - - if (self.width() == 0 && self.height() == 0) { - self.size(img.width, img.height); - } // ensure pattern size if not set - - - if (p && p.width() == 0 && p.height() == 0) { - p.size(self.width(), self.height()); - } // callback - - - if (typeof self._loaded === 'function') { - self._loaded.call(self, { - width: img.width, - height: img.height, - ratio: img.width / img.height, - url: url - }); - } - }); - SVG.on(img, 'error', function (e) { - SVG.off(img); - - if (typeof self._error === 'function') { - self._error.call(self, e); - } - }); - return this.attr('href', img.src = this.src = url, SVG.xlink); - }, - // Add loaded callback - loaded: function loaded(_loaded) { - this._loaded = _loaded; - return this; - }, - error: function error(_error) { - this._error = _error; - return this; - } - }, - // Add parent method - construct: { - // create image element, load image and set its size - image: function image(source, width, height) { - return this.put(new SVG.Image()).load(source).size(width || 0, height || width || 0); - } - } - }); - SVG.Text = SVG.invent({ - // Initialize node - create: function create() { - this.constructor.call(this, SVG.create('text')); - this.dom.leading = new SVG.Number(1.3); // store leading value for rebuilding - - this._rebuild = true; // enable automatic updating of dy values - - this._build = false; // disable build mode for adding multiple lines - // set default font - - this.attr('font-family', SVG.defaults.attrs['font-family']); - }, - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Move over x-axis - x: function x(_x7) { - // act as getter - if (_x7 == null) { - return this.attr('x'); - } - - return this.attr('x', _x7); - }, - // Move over y-axis - y: function y(_y7) { - var oy = this.attr('y'), - o = typeof oy === 'number' ? oy - this.bbox().y : 0; // act as getter - - if (_y7 == null) { - return typeof oy === 'number' ? oy - o : oy; - } - - return this.attr('y', typeof _y7.valueOf() === 'number' ? _y7 + o : _y7); - }, - // Move center over x-axis - cx: function cx(x) { - return x == null ? this.bbox().cx : this.x(x - this.bbox().width / 2); - }, - // Move center over y-axis - cy: function cy(y) { - return y == null ? this.bbox().cy : this.y(y - this.bbox().height / 2); - }, - // Set the text content - text: function text(_text) { - // act as getter - if (typeof _text === 'undefined') { - var _text = ''; - var children = this.node.childNodes; - - for (var i = 0, len = children.length; i < len; ++i) { - // add newline if its not the first child and newLined is set to true - if (i != 0 && children[i].nodeType != 3 && SVG.adopt(children[i]).dom.newLined == true) { - _text += '\n'; - } // add content of this node - - - _text += children[i].textContent; - } - - return _text; - } // remove existing content - - - this.clear().build(true); - - if (typeof _text === 'function') { - // call block - _text.call(this, this); - } else { - // store text and make sure text is not blank - _text = _text.split('\n'); // build new lines - - for (var i = 0, il = _text.length; i < il; i++) { - this.tspan(_text[i]).newLine(); - } - } // disable build mode and rebuild lines - - - return this.build(false).rebuild(); - }, - // Set font size - size: function size(_size) { - return this.attr('font-size', _size).rebuild(); - }, - // Set / get leading - leading: function leading(value) { - // act as getter - if (value == null) { - return this.dom.leading; - } // act as setter - - - this.dom.leading = new SVG.Number(value); - return this.rebuild(); - }, - // Get all the first level lines - lines: function lines() { - var node = (this.textPath && this.textPath() || this).node; // filter tspans and map them to SVG.js instances - - var lines = SVG.utils.map(SVG.utils.filterSVGElements(node.childNodes), function (el) { - return SVG.adopt(el); - }); // return an instance of SVG.set - - return new SVG.Set(lines); - }, - // Rebuild appearance type - rebuild: function rebuild(_rebuild) { - // store new rebuild flag if given - if (typeof _rebuild === 'boolean') { - this._rebuild = _rebuild; - } // define position of all lines - - - if (this._rebuild) { - var self = this, - blankLineOffset = 0, - dy = this.dom.leading * new SVG.Number(this.attr('font-size')); - this.lines().each(function () { - if (this.dom.newLined) { - if (!self.textPath()) { - this.attr('x', self.attr('x')); - } - - if (this.text() == '\n') { - blankLineOffset += dy; - } else { - this.attr('dy', dy + blankLineOffset); - blankLineOffset = 0; - } - } - }); - this.fire('rebuild'); - } - - return this; - }, - // Enable / disable build mode - build: function build(_build) { - this._build = !!_build; - return this; - }, - // overwrite method from parent to set data properly - setData: function setData(o) { - this.dom = o; - this.dom.leading = new SVG.Number(o.leading || 1.3); - return this; - } - }, - // Add parent method - construct: { - // Create text element - text: function text(_text2) { - return this.put(new SVG.Text()).text(_text2); - }, - // Create plain text element - plain: function plain(text) { - return this.put(new SVG.Text()).plain(text); - } - } - }); - SVG.Tspan = SVG.invent({ - // Initialize node - create: 'tspan', - // Inherit from - inherit: SVG.Shape, - // Add class methods - extend: { - // Set text content - text: function text(_text3) { - if (_text3 == null) return this.node.textContent + (this.dom.newLined ? '\n' : ''); - typeof _text3 === 'function' ? _text3.call(this, this) : this.plain(_text3); - return this; - }, - // Shortcut dx - dx: function dx(_dx) { - return this.attr('dx', _dx); - }, - // Shortcut dy - dy: function dy(_dy) { - return this.attr('dy', _dy); - }, - // Create new line - newLine: function newLine() { - // fetch text parent - var t = this.parent(SVG.Text); // mark new line - - this.dom.newLined = true; // apply new hy¡n - - return this.dy(t.dom.leading * t.attr('font-size')).attr('x', t.x()); - } - } - }); - SVG.extend(SVG.Text, SVG.Tspan, { - // Create plain text node - plain: function plain(text) { - // clear if build mode is disabled - if (this._build === false) { - this.clear(); - } // create text node - - - this.node.appendChild(document.createTextNode(text)); - return this; - }, - // Create a tspan - tspan: function tspan(text) { - var node = (this.textPath && this.textPath() || this).node, - tspan = new SVG.Tspan(); // clear if build mode is disabled - - if (this._build === false) { - this.clear(); - } // add new tspan - - - node.appendChild(tspan.node); - return tspan.text(text); - }, - // Clear all lines - clear: function clear() { - var node = (this.textPath && this.textPath() || this).node; // remove existing child nodes - - while (node.hasChildNodes()) { - node.removeChild(node.lastChild); - } - - return this; - }, - // Get length of text element - length: function length() { - return this.node.getComputedTextLength(); - } - }); - SVG.TextPath = SVG.invent({ - // Initialize node - create: 'textPath', - // Inherit from - inherit: SVG.Parent, - // Define parent class - parent: SVG.Text, - // Add parent method - construct: { - morphArray: SVG.PathArray, - // Create path for text to run on - path: function path(d) { - // create textPath element - var path = new SVG.TextPath(), - track = this.doc().defs().path(d); // move lines to textpath - - while (this.node.hasChildNodes()) { - path.node.appendChild(this.node.firstChild); - } // add textPath element as child node - - - this.node.appendChild(path.node); // link textPath to path and add content - - path.attr('href', '#' + track, SVG.xlink); - return this; - }, - // return the array of the path track element - array: function array() { - var track = this.track(); - return track ? track.array() : null; - }, - // Plot path if any - plot: function plot(d) { - var track = this.track(), - pathArray = null; - - if (track) { - pathArray = track.plot(d); - } - - return d == null ? pathArray : this; - }, - // Get the path track element - track: function track() { - var path = this.textPath(); - - if (path) { - return path.reference('href'); - } - }, - // Get the textPath child - textPath: function textPath() { - if (this.node.firstChild && this.node.firstChild.nodeName == 'textPath') { - return SVG.adopt(this.node.firstChild); - } - } - } - }); - SVG.Nested = SVG.invent({ - // Initialize node - create: function create() { - this.constructor.call(this, SVG.create('svg')); - this.style('overflow', 'visible'); - }, - // Inherit from - inherit: SVG.Container, - // Add parent method - construct: { - // Create nested svg document - nested: function nested() { - return this.put(new SVG.Nested()); - } - } - }); - SVG.A = SVG.invent({ - // Initialize node - create: 'a', - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Link url - to: function to(url) { - return this.attr('href', url, SVG.xlink); - }, - // Link show attribute - show: function show(target) { - return this.attr('show', target, SVG.xlink); - }, - // Link target attribute - target: function target(_target2) { - return this.attr('target', _target2); - } - }, - // Add parent method - construct: { - // Create a hyperlink element - link: function link(url) { - return this.put(new SVG.A()).to(url); - } - } - }); - SVG.extend(SVG.Element, { - // Create a hyperlink element - linkTo: function linkTo(url) { - var link = new SVG.A(); - - if (typeof url === 'function') { - url.call(link, link); - } else { - link.to(url); - } - - return this.parent().put(link).put(this); - } - }); - SVG.Marker = SVG.invent({ - // Initialize node - create: 'marker', - // Inherit from - inherit: SVG.Container, - // Add class methods - extend: { - // Set width of element - width: function width(_width6) { - return this.attr('markerWidth', _width6); - }, - // Set height of element - height: function height(_height6) { - return this.attr('markerHeight', _height6); - }, - // Set marker refX and refY - ref: function ref(x, y) { - return this.attr('refX', x).attr('refY', y); - }, - // Update marker - update: function update(block) { - // remove all content - this.clear(); // invoke passed block - - if (typeof block === 'function') { - block.call(this, this); - } - - return this; - }, - // Return the fill id - toString: function toString() { - return 'url(#' + this.id() + ')'; - } - }, - // Add parent method - construct: { - marker: function marker(width, height, block) { - // Create marker element in defs - return this.defs().marker(width, height, block); - } - } - }); - SVG.extend(SVG.Defs, { - // Create marker - marker: function marker(width, height, block) { - // Set default viewbox to match the width and height, set ref to cx and cy and set orient to auto - return this.put(new SVG.Marker()).size(width, height).ref(width / 2, height / 2).viewbox(0, 0, width, height).attr('orient', 'auto').update(block); - } - }); - SVG.extend(SVG.Line, SVG.Polyline, SVG.Polygon, SVG.Path, { - // Create and attach markers - marker: function marker(_marker, width, height, block) { - var attr = ['marker']; // Build attribute name - - if (_marker != 'all') attr.push(_marker); - attr = attr.join('-'); // Set marker attribute - - _marker = arguments[1] instanceof SVG.Marker ? arguments[1] : this.doc().marker(width, height, block); - return this.attr(attr, _marker); - } - }); // Define list of available attributes for stroke and fill - - var sugar = { - stroke: ['color', 'width', 'opacity', 'linecap', 'linejoin', 'miterlimit', 'dasharray', 'dashoffset'], - fill: ['color', 'opacity', 'rule'], - prefix: function prefix(t, a) { - return a == 'color' ? t : t + '-' + a; - } // Add sugar for fill and stroke - - }; - ['fill', 'stroke'].forEach(function (m) { - var i, - extension = {}; - - extension[m] = function (o) { - if (typeof o === 'undefined') { - return this; - } - - if (typeof o === 'string' || SVG.Color.isRgb(o) || o && typeof o.fill === 'function') { - this.attr(m, o); - } else // set all attributes from sugar.fill and sugar.stroke list - { - for (i = sugar[m].length - 1; i >= 0; i--) { - if (o[sugar[m][i]] != null) { - this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]]); - } - } - } - - return this; - }; - - SVG.extend(SVG.Element, SVG.FX, extension); - }); - SVG.extend(SVG.Element, SVG.FX, { - // Map rotation to transform - rotate: function rotate(d, cx, cy) { - return this.transform({ - rotation: d, - cx: cx, - cy: cy - }); - }, - // Map skew to transform - skew: function skew(x, y, cx, cy) { - return arguments.length == 1 || arguments.length == 3 ? this.transform({ - skew: x, - cx: y, - cy: cx - }) : this.transform({ - skewX: x, - skewY: y, - cx: cx, - cy: cy - }); - }, - // Map scale to transform - scale: function scale(x, y, cx, cy) { - return arguments.length == 1 || arguments.length == 3 ? this.transform({ - scale: x, - cx: y, - cy: cx - }) : this.transform({ - scaleX: x, - scaleY: y, - cx: cx, - cy: cy - }); - }, - // Map translate to transform - translate: function translate(x, y) { - return this.transform({ - x: x, - y: y - }); - }, - // Map flip to transform - flip: function flip(a, o) { - o = typeof a === 'number' ? a : o; - return this.transform({ - flip: a || 'both', - offset: o - }); - }, - // Map matrix to transform - matrix: function matrix(m) { - return this.attr('transform', new SVG.Matrix(arguments.length == 6 ? [].slice.call(arguments) : m)); - }, - // Opacity - opacity: function opacity(value) { - return this.attr('opacity', value); - }, - // Relative move over x axis - dx: function dx(x) { - return this.x(new SVG.Number(x).plus(this instanceof SVG.FX ? 0 : this.x()), true); - }, - // Relative move over y axis - dy: function dy(y) { - return this.y(new SVG.Number(y).plus(this instanceof SVG.FX ? 0 : this.y()), true); - }, - // Relative move over x and y axes - dmove: function dmove(x, y) { - return this.dx(x).dy(y); - } - }); - SVG.extend(SVG.Rect, SVG.Ellipse, SVG.Circle, SVG.Gradient, SVG.FX, { - // Add x and y radius - radius: function radius(x, y) { - var type = (this._target || this).type; - return type == 'radial' || type == 'circle' ? this.attr('r', new SVG.Number(x)) : this.rx(x).ry(y == null ? x : y); - } - }); - SVG.extend(SVG.Path, { - // Get path length - length: function length() { - return this.node.getTotalLength(); - }, - // Get point at length - pointAt: function pointAt(length) { - return this.node.getPointAtLength(length); - } - }); - SVG.extend(SVG.Parent, SVG.Text, SVG.Tspan, SVG.FX, { - // Set font - font: function font(a, v) { - if (_typeof(a) === 'object') { - for (v in a) { - this.font(v, a[v]); - } - } - - return a == 'leading' ? this.leading(v) : a == 'anchor' ? this.attr('text-anchor', v) : a == 'size' || a == 'family' || a == 'weight' || a == 'stretch' || a == 'variant' || a == 'style' ? this.attr('font-' + a, v) : this.attr(a, v); - } - }); - SVG.Set = SVG.invent({ - // Initialize - create: function create(members) { - // Set initial state - Array.isArray(members) ? this.members = members : this.clear(); - }, - // Add class methods - extend: { - // Add element to set - add: function add() { - var i, - il, - elements = [].slice.call(arguments); - - for (i = 0, il = elements.length; i < il; i++) { - this.members.push(elements[i]); - } - - return this; - }, - // Remove element from set - remove: function remove(element) { - var i = this.index(element); // remove given child - - if (i > -1) { - this.members.splice(i, 1); - } - - return this; - }, - // Iterate over all members - each: function each(block) { - for (var i = 0, il = this.members.length; i < il; i++) { - block.apply(this.members[i], [i, this.members]); - } - - return this; - }, - // Restore to defaults - clear: function clear() { - // initialize store - this.members = []; - return this; - }, - // Get the length of a set - length: function length() { - return this.members.length; - }, - // Checks if a given element is present in set - has: function has(element) { - return this.index(element) >= 0; - }, - // retuns index of given element in set - index: function index(element) { - return this.members.indexOf(element); - }, - // Get member at given index - get: function get(i) { - return this.members[i]; - }, - // Get first member - first: function first() { - return this.get(0); - }, - // Get last member - last: function last() { - return this.get(this.members.length - 1); - }, - // Default value - valueOf: function valueOf() { - return this.members; - }, - // Get the bounding box of all members included or empty box if set has no items - bbox: function bbox() { - // return an empty box of there are no members - if (this.members.length == 0) { - return new SVG.RBox(); - } // get the first rbox and update the target bbox - - - var rbox = this.members[0].rbox(this.members[0].doc()); - this.each(function () { - // user rbox for correct position and visual representation - rbox = rbox.merge(this.rbox(this.doc())); - }); - return rbox; - } - }, - // Add parent method - construct: { - // Create a new set - set: function set(members) { - return new SVG.Set(members); - } - } - }); - SVG.FX.Set = SVG.invent({ - // Initialize node - create: function create(set) { - // store reference to set - this.set = set; - } - }); // Alias methods - - SVG.Set.inherit = function () { - var m, - methods = []; // gather shape methods - - for (var m in SVG.Shape.prototype) { - if (typeof SVG.Shape.prototype[m] === 'function' && typeof SVG.Set.prototype[m] !== 'function') { - methods.push(m); - } - } // apply shape aliasses - - - methods.forEach(function (method) { - SVG.Set.prototype[method] = function () { - for (var i = 0, il = this.members.length; i < il; i++) { - if (this.members[i] && typeof this.members[i][method] === 'function') { - this.members[i][method].apply(this.members[i], arguments); - } - } - - return method == 'animate' ? this.fx || (this.fx = new SVG.FX.Set(this)) : this; - }; - }); // clear methods for the next round - - methods = []; // gather fx methods - - for (var m in SVG.FX.prototype) { - if (typeof SVG.FX.prototype[m] === 'function' && typeof SVG.FX.Set.prototype[m] !== 'function') { - methods.push(m); - } - } // apply fx aliasses - - - methods.forEach(function (method) { - SVG.FX.Set.prototype[method] = function () { - for (var i = 0, il = this.set.members.length; i < il; i++) { - this.set.members[i].fx[method].apply(this.set.members[i].fx, arguments); - } - - return this; - }; - }); - }; - - SVG.extend(SVG.Element, { - // Store data values on svg nodes - data: function data(a, v, r) { - if (_typeof(a) === 'object') { - for (v in a) { - this.data(v, a[v]); - } - } else if (arguments.length < 2) { - try { - return JSON.parse(this.attr('data-' + a)); - } catch (e) { - return this.attr('data-' + a); - } - } else { - this.attr('data-' + a, v === null ? null : r === true || typeof v === 'string' || typeof v === 'number' ? v : JSON.stringify(v)); - } - - return this; - } - }); - SVG.extend(SVG.Element, { - // Remember arbitrary data - remember: function remember(k, v) { - // remember every item in an object individually - if (_typeof(arguments[0]) === 'object') { - for (var v in k) { - this.remember(v, k[v]); - } - } // retrieve memory - else if (arguments.length == 1) { - return this.memory()[k]; - } // store memory - else { - this.memory()[k] = v; - } - - return this; - }, - // Erase a given memory - forget: function forget() { - if (arguments.length == 0) { - this._memory = {}; - } else { - for (var i = arguments.length - 1; i >= 0; i--) { - delete this.memory()[arguments[i]]; - } - } - - return this; - }, - // Initialize or return local memory object - memory: function memory() { - return this._memory || (this._memory = {}); - } - }); // Method for getting an element by id - - SVG.get = function (id) { - var node = document.getElementById(idFromReference(id) || id); - return SVG.adopt(node); - }; // Select elements by query string - - - SVG.select = function (query, parent) { - return new SVG.Set(SVG.utils.map((parent || document).querySelectorAll(query), function (node) { - return SVG.adopt(node); - })); - }; - - SVG.extend(SVG.Parent, { - // Scoped select method - select: function select(query) { - return SVG.select(query, this.node); - } - }); - - function pathRegReplace(a, b, c, d) { - return c + d.replace(SVG.regex.dots, ' .'); - } // creates deep clone of array - - - function array_clone(arr) { - var clone = arr.slice(0); - - for (var i = clone.length; i--;) { - if (Array.isArray(clone[i])) { - clone[i] = array_clone(clone[i]); - } - } - - return clone; - } // tests if a given element is instance of an object - - - function _is(el, obj) { - return el instanceof obj; - } // tests if a given selector matches an element - - - function _matches(el, selector) { - return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector); - } // Convert dash-separated-string to camelCase - - - function camelCase(s) { - return s.toLowerCase().replace(/-(.)/g, function (m, g) { - return g.toUpperCase(); - }); - } // Capitalize first letter of a string - - - function capitalize(s) { - return s.charAt(0).toUpperCase() + s.slice(1); - } // Ensure to six-based hex - - - function fullHex(hex) { - return hex.length == 4 ? ['#', hex.substring(1, 2), hex.substring(1, 2), hex.substring(2, 3), hex.substring(2, 3), hex.substring(3, 4), hex.substring(3, 4)].join('') : hex; - } // Component to hex value - - - function compToHex(comp) { - var hex = comp.toString(16); - return hex.length == 1 ? '0' + hex : hex; - } // Calculate proportional width and height values when necessary - - - function proportionalSize(element, width, height) { - if (width == null || height == null) { - var box = element.bbox(); - - if (width == null) { - width = box.width / box.height * height; - } else if (height == null) { - height = box.height / box.width * width; - } - } - - return { - width: width, - height: height - }; - } // Delta transform point - - - function deltaTransformPoint(matrix, x, y) { - return { - x: x * matrix.a + y * matrix.c + 0, - y: x * matrix.b + y * matrix.d + 0 - }; - } // Map matrix array to object - - - function arrayToMatrix(a) { - return { - a: a[0], - b: a[1], - c: a[2], - d: a[3], - e: a[4], - f: a[5] - }; - } // Parse matrix if required - - - function parseMatrix(matrix) { - if (!(matrix instanceof SVG.Matrix)) { - matrix = new SVG.Matrix(matrix); - } - - return matrix; - } // Add centre point to transform object - - - function ensureCentre(o, target) { - o.cx = o.cx == null ? target.bbox().cx : o.cx; - o.cy = o.cy == null ? target.bbox().cy : o.cy; - } // PathArray Helpers - - - function arrayToString(a) { - for (var i = 0, il = a.length, s = ''; i < il; i++) { - s += a[i][0]; - - if (a[i][1] != null) { - s += a[i][1]; - - if (a[i][2] != null) { - s += ' '; - s += a[i][2]; - - if (a[i][3] != null) { - s += ' '; - s += a[i][3]; - s += ' '; - s += a[i][4]; - - if (a[i][5] != null) { - s += ' '; - s += a[i][5]; - s += ' '; - s += a[i][6]; - - if (a[i][7] != null) { - s += ' '; - s += a[i][7]; - } - } - } - } - } - } - - return s + ' '; - } // Deep new id assignment - - - function assignNewId(node) { - // do the same for SVG child nodes as well - for (var i = node.childNodes.length - 1; i >= 0; i--) { - if (node.childNodes[i] instanceof window.SVGElement) { - assignNewId(node.childNodes[i]); - } - } - - return SVG.adopt(node).id(SVG.eid(node.nodeName)); - } // Add more bounding box properties - - - function fullBox(b) { - if (b.x == null) { - b.x = 0; - b.y = 0; - b.width = 0; - b.height = 0; - } - - b.w = b.width; - b.h = b.height; - b.x2 = b.x + b.width; - b.y2 = b.y + b.height; - b.cx = b.x + b.width / 2; - b.cy = b.y + b.height / 2; - return b; - } // Get id from reference string - - - function idFromReference(url) { - var m = (url || '').toString().match(SVG.regex.reference); - if (m) return m[1]; - } // If values like 1e-88 are passed, this is not a valid 32 bit float, - // but in those cases, we are so close to 0 that 0 works well! - - - function float32String(v) { - return Math.abs(v) > 1e-37 ? v : 0; - } // Create matrix array for looping - - - var abcdef = 'abcdef'.split(''); // Add CustomEvent to IE9 and IE10 - - if (typeof window.CustomEvent !== 'function') { - // Code from: https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent - var CustomEventPoly = function CustomEventPoly(event, options) { - options = options || { - bubbles: false, - cancelable: false, - detail: undefined - }; - var e = document.createEvent('CustomEvent'); - e.initCustomEvent(event, options.bubbles, options.cancelable, options.detail); - return e; - }; - - CustomEventPoly.prototype = window.Event.prototype; - SVG.CustomEvent = CustomEventPoly; - } else { - SVG.CustomEvent = window.CustomEvent; - } // requestAnimationFrame / cancelAnimationFrame Polyfill with fallback based on Paul Irish - - - (function (w) { - var lastTime = 0; - var vendors = ['moz', 'webkit']; - - for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { - w.requestAnimationFrame = w[vendors[x] + 'RequestAnimationFrame']; - w.cancelAnimationFrame = w[vendors[x] + 'CancelAnimationFrame'] || w[vendors[x] + 'CancelRequestAnimationFrame']; - } - - w.requestAnimationFrame = w.requestAnimationFrame || function (callback) { - var currTime = new Date().getTime(); - var timeToCall = Math.max(0, 16 - (currTime - lastTime)); - var id = w.setTimeout(function () { - callback(currTime + timeToCall); - }, timeToCall); - lastTime = currTime + timeToCall; - return id; - }; - - w.cancelAnimationFrame = w.cancelAnimationFrame || w.clearTimeout; - })(window); - - return SVG; - }); - - /*! svg.filter.js - v2.0.2 - 2016-02-24 - * https://github.com/wout/svg.filter.js - * Copyright (c) 2016 Wout Fierens; Licensed MIT */ - (function() { - - // Main filter class - SVG.Filter = SVG.invent({ - create: 'filter', - inherit: SVG.Parent, - extend: { - // Static strings - source: 'SourceGraphic', - sourceAlpha: 'SourceAlpha', - background: 'BackgroundImage', - backgroundAlpha: 'BackgroundAlpha', - fill: 'FillPaint', - stroke: 'StrokePaint', - - autoSetIn: true, - // Custom put method for leaner code - put: function(element, i) { - this.add(element, i); - - if(!element.attr('in') && this.autoSetIn){ - element.attr('in',this.source); - } - if(!element.attr('result')){ - element.attr('result',element); - } - - return element - }, - // Blend effect - blend: function(in1, in2, mode) { - return this.put(new SVG.BlendEffect(in1, in2, mode)) - }, - // ColorMatrix effect - colorMatrix: function(type, values) { - return this.put(new SVG.ColorMatrixEffect(type, values)) - }, - // ConvolveMatrix effect - convolveMatrix: function(matrix) { - return this.put(new SVG.ConvolveMatrixEffect(matrix)) - }, - // ComponentTransfer effect - componentTransfer: function(components) { - return this.put(new SVG.ComponentTransferEffect(components)) - }, - // Composite effect - composite: function(in1, in2, operator) { - return this.put(new SVG.CompositeEffect(in1, in2, operator)) - }, - // Flood effect - flood: function(color, opacity) { - return this.put(new SVG.FloodEffect(color, opacity)) - }, - // Offset effect - offset: function(x, y) { - return this.put(new SVG.OffsetEffect(x,y)) - }, - // Image effect - image: function(src) { - return this.put(new SVG.ImageEffect(src)) - }, - // Merge effect - merge: function() { - //pass the array of arguments to the constructor because we dont know if the user gave us an array as the first arguemnt or wether they listed the effects in the arguments - var args = [undefined]; - for(var i in arguments) args.push(arguments[i]); - return this.put(new (SVG.MergeEffect.bind.apply(SVG.MergeEffect,args))) - }, - // Gaussian Blur effect - gaussianBlur: function(x,y) { - return this.put(new SVG.GaussianBlurEffect(x,y)) - }, - // Morphology effect - morphology: function(operator,radius){ - return this.put(new SVG.MorphologyEffect(operator,radius)) - }, - // DiffuseLighting effect - diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){ - return this.put(new SVG.DiffuseLightingEffect(surfaceScale,diffuseConstant,kernelUnitLength)) - }, - // DisplacementMap effect - displacementMap: function(in1,in2,scale,xChannelSelector,yChannelSelector){ - return this.put(new SVG.DisplacementMapEffect(in1,in2,scale,xChannelSelector,yChannelSelector)) - }, - // SpecularLighting effect - specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){ - return this.put(new SVG.SpecularLightingEffect(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength)) - }, - // Tile effect - tile: function(){ - return this.put(new SVG.TileEffect()); - }, - // Turbulence effect - turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){ - return this.put(new SVG.TurbulenceEffect(baseFrequency,numOctaves,seed,stitchTiles,type)) - }, - // Default string value - toString: function() { - return 'url(#' + this.attr('id') + ')' - } - } - }); - - //add .filter function - SVG.extend(SVG.Defs, { - // Define filter - filter: function(block) { - var filter = this.put(new SVG.Filter); - - /* invoke passed block */ - if (typeof block === 'function') - block.call(filter, filter); - - return filter - } - }); - SVG.extend(SVG.Container, { - // Define filter on defs - filter: function(block) { - return this.defs().filter(block) - } - }); - SVG.extend(SVG.Element, SVG.G, SVG.Nested, { - // Create filter element in defs and store reference - filter: function(block) { - this.filterer = block instanceof SVG.Element ? - block : this.doc().filter(block); - - if(this.doc() && this.filterer.doc() !== this.doc()){ - this.doc().defs().add(this.filterer); - } - - this.attr('filter', this.filterer); - - return this.filterer - }, - // Remove filter - unfilter: function(remove) { - /* also remove the filter node */ - if (this.filterer && remove === true) - this.filterer.remove(); - - /* delete reference to filterer */ - delete this.filterer; - - /* remove filter attribute */ - return this.attr('filter', null) - } - }); - - // Create SVG.Effect class - SVG.Effect = SVG.invent({ - create: function(){ - this.constructor.call(this); - }, - inherit: SVG.Element, - extend: { - // Set in attribute - in: function(effect) { - return effect == null? this.parent() && this.parent().select('[result="'+this.attr('in')+'"]').get(0) || this.attr('in') : this.attr('in', effect) - }, - // Named result - result: function(result) { - return result == null? this.attr('result') : this.attr('result',result) - }, - // Stringification - toString: function() { - return this.result() - } - } - }); - - // create class for parent effects like merge - // Inherit from SVG.Parent - SVG.ParentEffect = SVG.invent({ - create: function(){ - this.constructor.call(this); - }, - inherit: SVG.Parent, - extend: { - // Set in attribute - in: function(effect) { - return effect == null? this.parent() && this.parent().select('[result="'+this.attr('in')+'"]').get(0) || this.attr('in') : this.attr('in', effect) - }, - // Named result - result: function(result) { - return result == null? this.attr('result') : this.attr('result',result) - }, - // Stringification - toString: function() { - return this.result() - } - } - }); - - //chaining - var chainingEffects = { - // Blend effect - blend: function(in2, mode) { - return this.parent() && this.parent().blend(this, in2, mode) //pass this as the first input - }, - // ColorMatrix effect - colorMatrix: function(type, values) { - return this.parent() && this.parent().colorMatrix(type, values).in(this) - }, - // ConvolveMatrix effect - convolveMatrix: function(matrix) { - return this.parent() && this.parent().convolveMatrix(matrix).in(this) - }, - // ComponentTransfer effect - componentTransfer: function(components) { - return this.parent() && this.parent().componentTransfer(components).in(this) - }, - // Composite effect - composite: function(in2, operator) { - return this.parent() && this.parent().composite(this, in2, operator) //pass this as the first input - }, - // Flood effect - flood: function(color, opacity) { - return this.parent() && this.parent().flood(color, opacity) //this effect dont have inputs - }, - // Offset effect - offset: function(x, y) { - return this.parent() && this.parent().offset(x,y).in(this) - }, - // Image effect - image: function(src) { - return this.parent() && this.parent().image(src) //this effect dont have inputs - }, - // Merge effect - merge: function() { - return this.parent() && this.parent().merge.apply(this.parent(),[this].concat(arguments)) //pass this as the first argument - }, - // Gaussian Blur effect - gaussianBlur: function(x,y) { - return this.parent() && this.parent().gaussianBlur(x,y).in(this) - }, - // Morphology effect - morphology: function(operator,radius){ - return this.parent() && this.parent().morphology(operator,radius).in(this) - }, - // DiffuseLighting effect - diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){ - return this.parent() && this.parent().diffuseLighting(surfaceScale,diffuseConstant,kernelUnitLength).in(this) - }, - // DisplacementMap effect - displacementMap: function(in2,scale,xChannelSelector,yChannelSelector){ - return this.parent() && this.parent().displacementMap(this,in2,scale,xChannelSelector,yChannelSelector) //pass this as the first input - }, - // SpecularLighting effect - specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){ - return this.parent() && this.parent().specularLighting(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength).in(this) - }, - // Tile effect - tile: function(){ - return this.parent() && this.parent().tile().in(this) - }, - // Turbulence effect - turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){ - return this.parent() && this.parent().turbulence(baseFrequency,numOctaves,seed,stitchTiles,type).in(this) - } - }; - SVG.extend(SVG.Effect,chainingEffects); - SVG.extend(SVG.ParentEffect,chainingEffects); - - //crea class for child effects, like MergeNode, FuncR and lights - SVG.ChildEffect = SVG.invent({ - create: function(){ - this.constructor.call(this); - }, - inherit: SVG.Element, - extend: { - in: function(effect){ - this.attr('in',effect); - } - //dont include any "result" functions because these types of nodes dont have them - } - }); - - // Create all different effects - var effects = { - blend: function(in1,in2,mode){ - this.attr({ - in: in1, - in2: in2, - mode: mode || 'normal' - }); - }, - colorMatrix: function(type,values){ - if (type == 'matrix') - values = normaliseMatrix(values); - - this.attr({ - type: type - , values: typeof values == 'undefined' ? null : values - }); - }, - convolveMatrix: function(matrix){ - matrix = normaliseMatrix(matrix); - - this.attr({ - order: Math.sqrt(matrix.split(' ').length) - , kernelMatrix: matrix - }); - }, - composite: function(in1, in2, operator){ - this.attr({ - in: in1, - in2: in2, - operator: operator - }); - }, - flood: function(color,opacity){ - this.attr('flood-color',color); - if(opacity != null) this.attr('flood-opacity',opacity); - }, - offset: function(x,y){ - this.attr({ - dx: x, - dy: y - }); - }, - image: function(src){ - this.attr('href', src, SVG.xlink); - }, - displacementMap: function(in1,in2,scale,xChannelSelector,yChannelSelector){ - this.attr({ - in: in1, - in2: in2, - scale: scale, - xChannelSelector: xChannelSelector, - yChannelSelector: yChannelSelector - }); - }, - gaussianBlur: function(x,y){ - if(x != null || y != null) - this.attr('stdDeviation', listString(Array.prototype.slice.call(arguments))); - else - this.attr('stdDeviation', '0 0'); - }, - morphology: function(operator,radius){ - this.attr({ - operator: operator, - radius: radius - }); - }, - tile: function(){ - - }, - turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){ - this.attr({ - numOctaves: numOctaves, - seed: seed, - stitchTiles: stitchTiles, - baseFrequency: baseFrequency, - type: type - }); - } - }; - - // Create all parent effects - var parentEffects = { - merge: function(){ - var children; - - //test to see if we have a set - if(arguments[0] instanceof SVG.Set){ - var that = this; - arguments[0].each(function(i){ - if(this instanceof SVG.MergeNode) - that.put(this); - else if(this instanceof SVG.Effect || this instanceof SVG.ParentEffect) - that.put(new SVG.MergeNode(this)); - }); - } - else{ - //if the first argument is an array use it - if(Array.isArray(arguments[0])) - children = arguments[0]; - else - children = arguments; - - for(var i = 0; i < children.length; i++){ - if(children[i] instanceof SVG.MergeNode){ - this.put(children[i]); - } - else this.put(new SVG.MergeNode(children[i])); - } - } - }, - componentTransfer: function(compontents){ - /* create rgb set */ - this.rgb = new SVG.Set - - /* create components */ - ;(['r', 'g', 'b', 'a']).forEach(function(c) { - /* create component */ - this[c] = new SVG['Func' + c.toUpperCase()]('identity'); - - /* store component in set */ - this.rgb.add(this[c]); - - /* add component node */ - this.node.appendChild(this[c].node); - }.bind(this)); //lost context in foreach - - /* set components */ - if (compontents) { - if (compontents.rgb) { - (['r', 'g', 'b']).forEach(function(c) { - this[c].attr(compontents.rgb); - }.bind(this)); - - delete compontents.rgb; - } - - /* set individual components */ - for (var c in compontents) - this[c].attr(compontents[c]); - } - }, - diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){ - this.attr({ - surfaceScale: surfaceScale, - diffuseConstant: diffuseConstant, - kernelUnitLength: kernelUnitLength - }); - }, - specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){ - this.attr({ - surfaceScale: surfaceScale, - diffuseConstant: diffuseConstant, - specularExponent: specularExponent, - kernelUnitLength: kernelUnitLength - }); - }, - }; - - // Create child effects like PointLight and MergeNode - var childEffects = { - distantLight: function(azimuth, elevation){ - this.attr({ - azimuth: azimuth, - elevation: elevation - }); - }, - pointLight: function(x,y,z){ - this.attr({ - x: x, - y: y, - z: z - }); - }, - spotLight: function(x,y,z,pointsAtX,pointsAtY,pointsAtZ){ - this.attr({ - x: x, - y: y, - z: z, - pointsAtX: pointsAtX, - pointsAtY: pointsAtY, - pointsAtZ: pointsAtZ - }); - }, - mergeNode: function(in1){ - this.attr('in',in1); - } - } - - // Create compontent functions - ;(['r', 'g', 'b', 'a']).forEach(function(c) { - /* create class */ - childEffects['Func' + c.toUpperCase()] = function(type) { - this.attr('type',type); - - // take diffent arguments based on the type - switch(type){ - case 'table': - this.attr('tableValues',arguments[1]); - break - case 'linear': - this.attr('slope',arguments[1]); - this.attr('intercept',arguments[2]); - break - case 'gamma': - this.attr('amplitude',arguments[1]); - this.attr('exponent',arguments[2]); - this.attr('offset',arguments[2]); - break - } - }; - }); - - //create effects - foreach(effects,function(effect,i){ - - /* capitalize name */ - var name = i.charAt(0).toUpperCase() + i.slice(1); - var proto = {}; - - /* create class */ - SVG[name + 'Effect'] = SVG.invent({ - create: function() { - //call super - this.constructor.call(this, SVG.create('fe' + name)); - - //call constructor for this effect - effect.apply(this,arguments); - - //set the result - this.result(this.attr('id') + 'Out'); - }, - inherit: SVG.Effect, - extend: proto - }); - }); - - //create parent effects - foreach(parentEffects,function(effect,i){ - - /* capitalize name */ - var name = i.charAt(0).toUpperCase() + i.slice(1); - var proto = {}; - - /* create class */ - SVG[name + 'Effect'] = SVG.invent({ - create: function() { - //call super - this.constructor.call(this, SVG.create('fe' + name)); - - //call constructor for this effect - effect.apply(this,arguments); - - //set the result - this.result(this.attr('id') + 'Out'); - }, - inherit: SVG.ParentEffect, - extend: proto - }); - }); - - //create child effects - foreach(childEffects,function(effect,i){ - - /* capitalize name */ - var name = i.charAt(0).toUpperCase() + i.slice(1); - var proto = {}; - - /* create class */ - SVG[name] = SVG.invent({ - create: function() { - //call super - this.constructor.call(this, SVG.create('fe' + name)); - - //call constructor for this effect - effect.apply(this,arguments); - }, - inherit: SVG.ChildEffect, - extend: proto - }); - }); - - // Effect-specific extensions - SVG.extend(SVG.MergeEffect,{ - in: function(effect){ - if(effect instanceof SVG.MergeNode) - this.add(effect,0); - else - this.add(new SVG.MergeNode(effect),0); - - return this - } - }); - SVG.extend(SVG.CompositeEffect,SVG.BlendEffect,SVG.DisplacementMapEffect,{ - in2: function(effect){ - return effect == null? this.parent() && this.parent().select('[result="'+this.attr('in2')+'"]').get(0) || this.attr('in2') : this.attr('in2', effect) - } - }); - - // Presets - SVG.filter = { - sepiatone: [ .343, .669, .119, 0, 0 - , .249, .626, .130, 0, 0 - , .172, .334, .111, 0, 0 - , .000, .000, .000, 1, 0 ] - }; - - // Helpers - function normaliseMatrix(matrix) { - /* convert possible array value to string */ - if (Array.isArray(matrix)) - matrix = new SVG.Array(matrix); - - /* ensure there are no leading, tailing or double spaces */ - return matrix.toString().replace(/^\s+/, '').replace(/\s+$/, '').replace(/\s+/g, ' ') - } - - function listString(list) { - if (!Array.isArray(list)) - return list - - for (var i = 0, l = list.length, s = []; i < l; i++) - s.push(list[i]); - - return s.join(' ') - } - - function foreach(){ //loops through mutiple objects - var fn = function(){}; - if(typeof arguments[arguments.length-1] == 'function'){ - fn = arguments[arguments.length-1]; - Array.prototype.splice.call(arguments,arguments.length-1,1); - } - for(var k in arguments){ - for(var i in arguments[k]){ - fn(arguments[k][i],i,arguments[k]); - } - } - } - - }).call(undefined); - - (function() { - - SVG.extend(SVG.PathArray, { - morph: function(array) { - - var startArr = this.value - , destArr = this.parse(array); - - var startOffsetM = 0 - , destOffsetM = 0; - - var startOffsetNextM = false - , destOffsetNextM = false; - - while(true){ - // stop if there is no M anymore - if(startOffsetM === false && destOffsetM === false) break - - // find the next M in path array - startOffsetNextM = findNextM(startArr, startOffsetM === false ? false : startOffsetM+1); - destOffsetNextM = findNextM( destArr, destOffsetM === false ? false : destOffsetM+1); - - // We have to add one M to the startArray - if(startOffsetM === false){ - var bbox = new SVG.PathArray(result.start).bbox(); - - // when the last block had no bounding box we simply take the first M we got - if(bbox.height == 0 || bbox.width == 0){ - startOffsetM = startArr.push(startArr[0]) - 1; - }else{ - // we take the middle of the bbox instead when we got one - startOffsetM = startArr.push( ['M', bbox.x + bbox.width/2, bbox.y + bbox.height/2 ] ) - 1; - } - } - - // We have to add one M to the destArray - if( destOffsetM === false){ - var bbox = new SVG.PathArray(result.dest).bbox(); - - if(bbox.height == 0 || bbox.width == 0){ - destOffsetM = destArr.push(destArr[0]) - 1; - }else{ - destOffsetM = destArr.push( ['M', bbox.x + bbox.width/2, bbox.y + bbox.height/2 ] ) - 1; - } - } - - // handle block from M to next M - var result = handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM); - - // update the arrays to their new values - startArr = startArr.slice(0, startOffsetM).concat(result.start, startOffsetNextM === false ? [] : startArr.slice(startOffsetNextM)); - destArr = destArr.slice(0, destOffsetM).concat(result.dest , destOffsetNextM === false ? [] : destArr.slice( destOffsetNextM)); - - // update offsets - startOffsetM = startOffsetNextM === false ? false : startOffsetM + result.start.length; - destOffsetM = destOffsetNextM === false ? false : destOffsetM + result.dest.length; - - } - - // copy back arrays - this.value = startArr; - this.destination = new SVG.PathArray(); - this.destination.value = destArr; - - return this - } - }); - - - - // sorry for the long declaration - // slices out one block (from M to M) and syncronize it so the types and length match - function handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM, undefined){ - - // slice out the block we need - var startArrTemp = startArr.slice(startOffsetM, startOffsetNextM || undefined) - , destArrTemp = destArr.slice( destOffsetM, destOffsetNextM || undefined); - - var i = 0 - , posStart = {pos:[0,0], start:[0,0]} - , posDest = {pos:[0,0], start:[0,0]}; - - do{ - - // convert shorthand types to long form - startArrTemp[i] = simplyfy.call(posStart, startArrTemp[i]); - destArrTemp[i] = simplyfy.call(posDest , destArrTemp[i]); - - // check if both shape types match - // 2 elliptical arc curve commands ('A'), are considered different if the - // flags (large-arc-flag, sweep-flag) don't match - if(startArrTemp[i][0] != destArrTemp[i][0] || startArrTemp[i][0] == 'M' || - (startArrTemp[i][0] == 'A' && - (startArrTemp[i][4] != destArrTemp[i][4] || startArrTemp[i][5] != destArrTemp[i][5]) - ) - ) { - - // if not, convert shapes to beziere - Array.prototype.splice.apply(startArrTemp, [i, 1].concat(toBeziere.call(posStart, startArrTemp[i]))); - Array.prototype.splice.apply(destArrTemp, [i, 1].concat(toBeziere.call(posDest, destArrTemp[i]))); - - } else { - - // only update positions otherwise - startArrTemp[i] = setPosAndReflection.call(posStart, startArrTemp[i]); - destArrTemp[i] = setPosAndReflection.call(posDest , destArrTemp[i]); - - } - - // we are at the end at both arrays. stop here - if(++i == startArrTemp.length && i == destArrTemp.length) break - - // destArray is longer. Add one element - if(i == startArrTemp.length){ - startArrTemp.push([ - 'C', - posStart.pos[0], - posStart.pos[1], - posStart.pos[0], - posStart.pos[1], - posStart.pos[0], - posStart.pos[1], - ]); - } - - // startArr is longer. Add one element - if(i == destArrTemp.length){ - destArrTemp.push([ - 'C', - posDest.pos[0], - posDest.pos[1], - posDest.pos[0], - posDest.pos[1], - posDest.pos[0], - posDest.pos[1] - ]); - } - - - }while(true) - - // return the updated block - return {start:startArrTemp, dest:destArrTemp} - } - - // converts shorthand types to long form - function simplyfy(val){ - - switch(val[0]){ - case 'z': // shorthand line to start - case 'Z': - val[0] = 'L'; - val[1] = this.start[0]; - val[2] = this.start[1]; - break - case 'H': // shorthand horizontal line - val[0] = 'L'; - val[2] = this.pos[1]; - break - case 'V': // shorthand vertical line - val[0] = 'L'; - val[2] = val[1]; - val[1] = this.pos[0]; - break - case 'T': // shorthand quadratic beziere - val[0] = 'Q'; - val[3] = val[1]; - val[4] = val[2]; - val[1] = this.reflection[1]; - val[2] = this.reflection[0]; - break - case 'S': // shorthand cubic beziere - val[0] = 'C'; - val[6] = val[4]; - val[5] = val[3]; - val[4] = val[2]; - val[3] = val[1]; - val[2] = this.reflection[1]; - val[1] = this.reflection[0]; - break - } - - return val - - } - - // updates reflection point and current position - function setPosAndReflection(val){ - - var len = val.length; - - this.pos = [ val[len-2], val[len-1] ]; - - if('SCQT'.indexOf(val[0]) != -1) - this.reflection = [ 2 * this.pos[0] - val[len-4], 2 * this.pos[1] - val[len-3] ]; - - return val - } - - // converts all types to cubic beziere - function toBeziere(val){ - var retVal = [val]; - - switch(val[0]){ - case 'M': // special handling for M - this.pos = this.start = [val[1], val[2]]; - return retVal - case 'L': - val[5] = val[3] = val[1]; - val[6] = val[4] = val[2]; - val[1] = this.pos[0]; - val[2] = this.pos[1]; - break - case 'Q': - val[6] = val[4]; - val[5] = val[3]; - val[4] = val[4] * 1/3 + val[2] * 2/3; - val[3] = val[3] * 1/3 + val[1] * 2/3; - val[2] = this.pos[1] * 1/3 + val[2] * 2/3; - val[1] = this.pos[0] * 1/3 + val[1] * 2/3; - break - case 'A': - retVal = arcToBeziere(this.pos, val); - val = retVal[0]; - break - } - - val[0] = 'C'; - this.pos = [val[5], val[6]]; - this.reflection = [2 * val[5] - val[3], 2 * val[6] - val[4]]; - - return retVal - - } - - // finds the next position of type M - function findNextM(arr, offset){ - - if(offset === false) return false - - for(var i = offset, len = arr.length;i < len;++i){ - - if(arr[i][0] == 'M') return i - - } - - return false - } - - - - // Convert an arc segment into equivalent cubic Bezier curves - // Depending on the arc, up to 4 curves might be used to represent it since a - // curve gives a good approximation for only a quarter of an ellipse - // The curves are returned as an array of SVG curve commands: - // [ ['C', x1, y1, x2, y2, x, y] ... ] - function arcToBeziere(pos, val) { - // Parameters extraction, handle out-of-range parameters as specified in the SVG spec - // See: https://www.w3.org/TR/SVG11/implnote.html#ArcOutOfRangeParameters - var rx = Math.abs(val[1]), ry = Math.abs(val[2]), xAxisRotation = val[3] % 360 - , largeArcFlag = val[4], sweepFlag = val[5], x = val[6], y = val[7] - , A = new SVG.Point(pos), B = new SVG.Point(x, y) - , primedCoord, lambda, mat, k, c, cSquare, t, O, OA, OB, tetaStart, tetaEnd - , deltaTeta, nbSectors, f, arcSegPoints, angle, sinAngle, cosAngle, pt, i, il - , retVal = [], x1, y1, x2, y2; - - // Ensure radii are non-zero - if(rx === 0 || ry === 0 || (A.x === B.x && A.y === B.y)) { - // treat this arc as a straight line segment - return [['C', A.x, A.y, B.x, B.y, B.x, B.y]] - } - - // Ensure radii are large enough using the algorithm provided in the SVG spec - // See: https://www.w3.org/TR/SVG11/implnote.html#ArcCorrectionOutOfRangeRadii - primedCoord = new SVG.Point((A.x-B.x)/2, (A.y-B.y)/2).transform(new SVG.Matrix().rotate(xAxisRotation)); - lambda = (primedCoord.x * primedCoord.x) / (rx * rx) + (primedCoord.y * primedCoord.y) / (ry * ry); - if(lambda > 1) { - lambda = Math.sqrt(lambda); - rx = lambda*rx; - ry = lambda*ry; - } - - // To simplify calculations, we make the arc part of a unit circle (rayon is 1) instead of an ellipse - mat = new SVG.Matrix().rotate(xAxisRotation).scale(1/rx, 1/ry).rotate(-xAxisRotation); - A = A.transform(mat); - B = B.transform(mat); - - // Calculate the horizontal and vertical distance between the initial and final point of the arc - k = [B.x-A.x, B.y-A.y]; - - // Find the length of the chord formed by A and B - cSquare = k[0]*k[0] + k[1]*k[1]; - c = Math.sqrt(cSquare); - - // Calculate the ratios of the horizontal and vertical distance on the length of the chord - k[0] /= c; - k[1] /= c; - - // Calculate the distance between the circle center and the chord midpoint - // using this formula: t = sqrt(r^2 - c^2 / 4) - // where t is the distance between the cirle center and the chord midpoint, - // r is the rayon of the circle and c is the chord length - // From: http://www.ajdesigner.com/phpcircle/circle_segment_chord_t.php - // Because of the imprecision of floating point numbers, cSquare might end - // up being slightly above 4 which would result in a negative radicand - // To prevent that, a test is made before computing the square root - t = (cSquare < 4) ? Math.sqrt(1 - cSquare/4) : 0; - - // For most situations, there are actually two different ellipses that - // satisfy the constraints imposed by the points A and B, the radii rx and ry, - // and the xAxisRotation - // When the flags largeArcFlag and sweepFlag are equal, it means that the - // second ellipse is used as a solution - // See: https://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands - if(largeArcFlag === sweepFlag) { - t *= -1; - } - - // Calculate the coordinates of the center of the circle from the midpoint of the chord - // This is done by multiplying the ratios calculated previously by the distance between - // the circle center and the chord midpoint and using these values to go from the midpoint - // to the center of the circle - // The negative of the vertical distance ratio is used to modify the x coordinate while - // the horizontal distance ratio is used to modify the y coordinate - // That is because the center of the circle is perpendicular to the chord and perpendicular - // lines are negative reciprocals - O = new SVG.Point((B.x+A.x)/2 + t*-k[1], (B.y+A.y)/2 + t*k[0]); - // Move the center of the circle at the origin - OA = new SVG.Point(A.x-O.x, A.y-O.y); - OB = new SVG.Point(B.x-O.x, B.y-O.y); - - // Calculate the start and end angle - tetaStart = Math.acos(OA.x/Math.sqrt(OA.x*OA.x + OA.y*OA.y)); - if (OA.y < 0) { - tetaStart *= -1; - } - tetaEnd = Math.acos(OB.x/Math.sqrt(OB.x*OB.x + OB.y*OB.y)); - if (OB.y < 0) { - tetaEnd *= -1; - } - - // If sweep-flag is '1', then the arc will be drawn in a "positive-angle" direction, - // make sure that the end angle is above the start angle - if (sweepFlag && tetaStart > tetaEnd) { - tetaEnd += 2*Math.PI; - } - // If sweep-flag is '0', then the arc will be drawn in a "negative-angle" direction, - // make sure that the end angle is below the start angle - if (!sweepFlag && tetaStart < tetaEnd) { - tetaEnd -= 2*Math.PI; - } - - // Find the number of Bezier curves that are required to represent the arc - // A cubic Bezier curve gives a good enough approximation when representing at most a quarter of a circle - nbSectors = Math.ceil(Math.abs(tetaStart-tetaEnd) * 2/Math.PI); - - // Calculate the coordinates of the points of all the Bezier curves required to represent the arc - // For an in-depth explanation of this part see: http://pomax.github.io/bezierinfo/#circles_cubic - arcSegPoints = []; - angle = tetaStart; - deltaTeta = (tetaEnd-tetaStart)/nbSectors; - f = 4*Math.tan(deltaTeta/4)/3; - for (i = 0; i <= nbSectors; i++) { // The <= is because a Bezier curve have a start and a endpoint - cosAngle = Math.cos(angle); - sinAngle = Math.sin(angle); - - pt = new SVG.Point(O.x+cosAngle, O.y+sinAngle); - arcSegPoints[i] = [new SVG.Point(pt.x+f*sinAngle, pt.y-f*cosAngle), pt, new SVG.Point(pt.x-f*sinAngle, pt.y+f*cosAngle)]; - - angle += deltaTeta; - } - - // Remove the first control point of the first segment point and remove the second control point of the last segment point - // These two control points are not used in the approximation of the arc, that is why they are removed - arcSegPoints[0][0] = arcSegPoints[0][1].clone(); - arcSegPoints[arcSegPoints.length-1][2] = arcSegPoints[arcSegPoints.length-1][1].clone(); - - // Revert the transformation that was applied to make the arc part of a unit circle instead of an ellipse - mat = new SVG.Matrix().rotate(xAxisRotation).scale(rx, ry).rotate(-xAxisRotation); - for (i = 0, il = arcSegPoints.length; i < il; i++) { - arcSegPoints[i][0] = arcSegPoints[i][0].transform(mat); - arcSegPoints[i][1] = arcSegPoints[i][1].transform(mat); - arcSegPoints[i][2] = arcSegPoints[i][2].transform(mat); - } - - - // Convert the segments points to SVG curve commands - for (i = 1, il = arcSegPoints.length; i < il; i++) { - pt = arcSegPoints[i-1][2]; - x1 = pt.x; - y1 = pt.y; - - pt = arcSegPoints[i][0]; - x2 = pt.x; - y2 = pt.y; - - pt = arcSegPoints[i][1]; - x = pt.x; - y = pt.y; - - retVal.push(['C', x1, y1, x2, y2, x, y]); - } - - return retVal - } - }()); - - /*! svg.draggable.js - v2.2.1 - 2016-08-25 - * https://github.com/wout/svg.draggable.js - * Copyright (c) 2016 Wout Fierens; Licensed MIT */ - (function() { - - // creates handler, saves it - function DragHandler(el){ - el.remember('_draggable', this); - this.el = el; - } - - - // Sets new parameter, starts dragging - DragHandler.prototype.init = function(constraint, val){ - var _this = this; - this.constraint = constraint; - this.value = val; - this.el.on('mousedown.drag', function(e){ _this.start(e); }); - this.el.on('touchstart.drag', function(e){ _this.start(e); }); - }; - - // transforms one point from screen to user coords - DragHandler.prototype.transformPoint = function(event, offset){ - event = event || window.event; - var touches = event.changedTouches && event.changedTouches[0] || event; - this.p.x = touches.pageX - (offset || 0); - this.p.y = touches.pageY; - return this.p.matrixTransform(this.m) - }; - - // gets elements bounding box with special handling of groups, nested and use - DragHandler.prototype.getBBox = function(){ - - var box = this.el.bbox(); - - if(this.el instanceof SVG.Nested) box = this.el.rbox(); - - if (this.el instanceof SVG.G || this.el instanceof SVG.Use || this.el instanceof SVG.Nested) { - box.x = this.el.x(); - box.y = this.el.y(); - } - - return box - }; - - // start dragging - DragHandler.prototype.start = function(e){ - - // check for left button - if(e.type == 'click'|| e.type == 'mousedown' || e.type == 'mousemove'){ - if((e.which || e.buttons) != 1){ - return - } - } - - var _this = this; - - // fire beforedrag event - this.el.fire('beforedrag', { event: e, handler: this }); - - // search for parent on the fly to make sure we can call - // draggable() even when element is not in the dom currently - this.parent = this.parent || this.el.parent(SVG.Nested) || this.el.parent(SVG.Doc); - this.p = this.parent.node.createSVGPoint(); - - // save current transformation matrix - this.m = this.el.node.getScreenCTM().inverse(); - - var box = this.getBBox(); - - var anchorOffset; - - // fix text-anchor in text-element (#37) - if(this.el instanceof SVG.Text){ - anchorOffset = this.el.node.getComputedTextLength(); - - switch(this.el.attr('text-anchor')){ - case 'middle': - anchorOffset /= 2; - break - case 'start': - anchorOffset = 0; - break; - } - } - - this.startPoints = { - // We take absolute coordinates since we are just using a delta here - point: this.transformPoint(e, anchorOffset), - box: box, - transform: this.el.transform() - }; - - // add drag and end events to window - SVG.on(window, 'mousemove.drag', function(e){ _this.drag(e); }); - SVG.on(window, 'touchmove.drag', function(e){ _this.drag(e); }); - SVG.on(window, 'mouseup.drag', function(e){ _this.end(e); }); - SVG.on(window, 'touchend.drag', function(e){ _this.end(e); }); - - // fire dragstart event - this.el.fire('dragstart', {event: e, p: this.startPoints.point, m: this.m, handler: this}); - - // prevent browser drag behavior - e.preventDefault(); - - // prevent propagation to a parent that might also have dragging enabled - e.stopPropagation(); - }; - - // while dragging - DragHandler.prototype.drag = function(e){ - - var box = this.getBBox() - , p = this.transformPoint(e) - , x = this.startPoints.box.x + p.x - this.startPoints.point.x - , y = this.startPoints.box.y + p.y - this.startPoints.point.y - , c = this.constraint - , gx = p.x - this.startPoints.point.x - , gy = p.y - this.startPoints.point.y; - - var event = new CustomEvent('dragmove', { - detail: { - event: e - , p: p - , m: this.m - , handler: this - } - , cancelable: true - }); - - this.el.fire(event); - - if(event.defaultPrevented) return p - - // move the element to its new position, if possible by constraint - if (typeof c == 'function') { - - var coord = c.call(this.el, x, y, this.m); - - // bool, just show us if movement is allowed or not - if (typeof coord == 'boolean') { - coord = { - x: coord, - y: coord - }; - } - - // if true, we just move. If !false its a number and we move it there - if (coord.x === true) { - this.el.x(x); - } else if (coord.x !== false) { - this.el.x(coord.x); - } - - if (coord.y === true) { - this.el.y(y); - } else if (coord.y !== false) { - this.el.y(coord.y); - } - - } else if (typeof c == 'object') { - - // keep element within constrained box - if (c.minX != null && x < c.minX) - x = c.minX; - else if (c.maxX != null && x > c.maxX - box.width){ - x = c.maxX - box.width; - }if (c.minY != null && y < c.minY) - y = c.minY; - else if (c.maxY != null && y > c.maxY - box.height) - y = c.maxY - box.height; - - if(this.el instanceof SVG.G) - this.el.matrix(this.startPoints.transform).transform({x:gx, y: gy}, true); - else - this.el.move(x, y); - } - - // so we can use it in the end-method, too - return p - }; - - DragHandler.prototype.end = function(e){ - - // final drag - var p = this.drag(e); - - // fire dragend event - this.el.fire('dragend', { event: e, p: p, m: this.m, handler: this }); - - // unbind events - SVG.off(window, 'mousemove.drag'); - SVG.off(window, 'touchmove.drag'); - SVG.off(window, 'mouseup.drag'); - SVG.off(window, 'touchend.drag'); - - }; - - SVG.extend(SVG.Element, { - // Make element draggable - // Constraint might be an object (as described in readme.md) or a function in the form "function (x, y)" that gets called before every move. - // The function can return a boolean or an object of the form {x, y}, to which the element will be moved. "False" skips moving, true moves to raw x, y. - draggable: function(value, constraint) { - - // Check the parameters and reassign if needed - if (typeof value == 'function' || typeof value == 'object') { - constraint = value; - value = true; - } - - var dragHandler = this.remember('_draggable') || new DragHandler(this); - - // When no parameter is given, value is true - value = typeof value === 'undefined' ? true : value; - - if(value) dragHandler.init(constraint || {}, value); - else { - this.off('mousedown.drag'); - this.off('touchstart.drag'); - } - - return this - } - - }); - - }).call(undefined); - - (function() { - - function SelectHandler(el) { - - this.el = el; - el.remember('_selectHandler', this); - this.pointSelection = {isSelected: false}; - this.rectSelection = {isSelected: false}; - - } - - SelectHandler.prototype.init = function (value, options) { - - var bbox = this.el.bbox(); - this.options = {}; - - // Merging the defaults and the options-object together - for (var i in this.el.selectize.defaults) { - this.options[i] = this.el.selectize.defaults[i]; - if (options[i] !== undefined) { - this.options[i] = options[i]; - } - } - - this.parent = this.el.parent(); - this.nested = (this.nested || this.parent.group()); - this.nested.matrix(new SVG.Matrix(this.el).translate(bbox.x, bbox.y)); - - // When deepSelect is enabled and the element is a line/polyline/polygon, draw only points for moving - if (this.options.deepSelect && ['line', 'polyline', 'polygon'].indexOf(this.el.type) !== -1) { - this.selectPoints(value); - } else { - this.selectRect(value); - } - - this.observe(); - this.cleanup(); - - }; - - SelectHandler.prototype.selectPoints = function (value) { - - this.pointSelection.isSelected = value; - - // When set is already there we dont have to create one - if (this.pointSelection.set) { - return this; - } - - // Create our set of elements - this.pointSelection.set = this.parent.set(); - // draw the circles and mark the element as selected - this.drawCircles(); - - return this; - - }; - - // create the point-array which contains the 2 points of a line or simply the points-array of polyline/polygon - SelectHandler.prototype.getPointArray = function () { - var bbox = this.el.bbox(); - - return this.el.array().valueOf().map(function (el) { - return [el[0] - bbox.x, el[1] - bbox.y]; - }); - }; - - // The function to draw the circles - SelectHandler.prototype.drawCircles = function () { - - var _this = this, array = this.getPointArray(); - - // go through the array of points - for (var i = 0, len = array.length; i < len; ++i) { - - var curriedEvent = (function (k) { - return function (ev) { - ev = ev || window.event; - ev.preventDefault ? ev.preventDefault() : ev.returnValue = false; - ev.stopPropagation(); - - var x = ev.pageX || ev.touches[0].pageX; - var y = ev.pageY || ev.touches[0].pageY; - _this.el.fire('point', {x: x, y: y, i: k, event: ev}); - }; - })(i); - - // add every point to the set - this.pointSelection.set.add( - // a circle with our css-classes and a touchstart-event which fires our event for moving points - this.nested.circle(this.options.radius) - .center(array[i][0], array[i][1]) - .addClass(this.options.classPoints) - .addClass(this.options.classPoints + '_point') - .on('touchstart', curriedEvent) - .on('mousedown', curriedEvent) - ); - } - - }; - - // every time a circle is moved, we have to update the positions of our circle - SelectHandler.prototype.updatePointSelection = function () { - var array = this.getPointArray(); - - this.pointSelection.set.each(function (i) { - if (this.cx() === array[i][0] && this.cy() === array[i][1]) { - return; - } - this.center(array[i][0], array[i][1]); - }); - }; - - SelectHandler.prototype.updateRectSelection = function () { - var bbox = this.el.bbox(); - - this.rectSelection.set.get(0).attr({ - width: bbox.width, - height: bbox.height - }); - - // set.get(1) is always in the upper left corner. no need to move it - if (this.options.points) { - this.rectSelection.set.get(2).center(bbox.width, 0); - this.rectSelection.set.get(3).center(bbox.width, bbox.height); - this.rectSelection.set.get(4).center(0, bbox.height); - - this.rectSelection.set.get(5).center(bbox.width / 2, 0); - this.rectSelection.set.get(6).center(bbox.width, bbox.height / 2); - this.rectSelection.set.get(7).center(bbox.width / 2, bbox.height); - this.rectSelection.set.get(8).center(0, bbox.height / 2); - } - - if (this.options.rotationPoint) { - if (this.options.points) { - this.rectSelection.set.get(9).center(bbox.width / 2, 20); - } else { - this.rectSelection.set.get(1).center(bbox.width / 2, 20); - } - } - }; - - SelectHandler.prototype.selectRect = function (value) { - - var _this = this, bbox = this.el.bbox(); - - this.rectSelection.isSelected = value; - - // when set is already p - this.rectSelection.set = this.rectSelection.set || this.parent.set(); - - // helperFunction to create a mouse-down function which triggers the event specified in `eventName` - function getMoseDownFunc(eventName) { - return function (ev) { - ev = ev || window.event; - ev.preventDefault ? ev.preventDefault() : ev.returnValue = false; - ev.stopPropagation(); - - var x = ev.pageX || ev.touches[0].pageX; - var y = ev.pageY || ev.touches[0].pageY; - _this.el.fire(eventName, {x: x, y: y, event: ev}); - }; - } - - // create the selection-rectangle and add the css-class - if (!this.rectSelection.set.get(0)) { - this.rectSelection.set.add(this.nested.rect(bbox.width, bbox.height).addClass(this.options.classRect)); - } - - // Draw Points at the edges, if enabled - if (this.options.points && !this.rectSelection.set.get(1)) { - var ename ="touchstart", mname = "mousedown"; - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(0, 0).attr('class', this.options.classPoints + '_lt').on(mname, getMoseDownFunc('lt')).on(ename, getMoseDownFunc('lt'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width, 0).attr('class', this.options.classPoints + '_rt').on(mname, getMoseDownFunc('rt')).on(ename, getMoseDownFunc('rt'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width, bbox.height).attr('class', this.options.classPoints + '_rb').on(mname, getMoseDownFunc('rb')).on(ename, getMoseDownFunc('rb'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(0, bbox.height).attr('class', this.options.classPoints + '_lb').on(mname, getMoseDownFunc('lb')).on(ename, getMoseDownFunc('lb'))); - - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width / 2, 0).attr('class', this.options.classPoints + '_t').on(mname, getMoseDownFunc('t')).on(ename, getMoseDownFunc('t'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width, bbox.height / 2).attr('class', this.options.classPoints + '_r').on(mname, getMoseDownFunc('r')).on(ename, getMoseDownFunc('r'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width / 2, bbox.height).attr('class', this.options.classPoints + '_b').on(mname, getMoseDownFunc('b')).on(ename, getMoseDownFunc('b'))); - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(0, bbox.height / 2).attr('class', this.options.classPoints + '_l').on(mname, getMoseDownFunc('l')).on(ename, getMoseDownFunc('l'))); - - this.rectSelection.set.each(function () { - this.addClass(_this.options.classPoints); - }); - } - - // draw rotationPint, if enabled - if (this.options.rotationPoint && ((this.options.points && !this.rectSelection.set.get(9)) || (!this.options.points && !this.rectSelection.set.get(1)))) { - - var curriedEvent = function (ev) { - ev = ev || window.event; - ev.preventDefault ? ev.preventDefault() : ev.returnValue = false; - ev.stopPropagation(); - - var x = ev.pageX || ev.touches[0].pageX; - var y = ev.pageY || ev.touches[0].pageY; - _this.el.fire('rot', {x: x, y: y, event: ev}); - }; - this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width / 2, 20).attr('class', this.options.classPoints + '_rot') - .on("touchstart", curriedEvent).on("mousedown", curriedEvent)); - - } - - }; - - SelectHandler.prototype.handler = function () { - - var bbox = this.el.bbox(); - this.nested.matrix(new SVG.Matrix(this.el).translate(bbox.x, bbox.y)); - - if (this.rectSelection.isSelected) { - this.updateRectSelection(); - } - - if (this.pointSelection.isSelected) { - this.updatePointSelection(); - } - - }; - - SelectHandler.prototype.observe = function () { - var _this = this; - - if (MutationObserver) { - if (this.rectSelection.isSelected || this.pointSelection.isSelected) { - this.observerInst = this.observerInst || new MutationObserver(function () { - _this.handler(); - }); - this.observerInst.observe(this.el.node, {attributes: true}); - } else { - try { - this.observerInst.disconnect(); - delete this.observerInst; - } catch (e) { - } - } - } else { - this.el.off('DOMAttrModified.select'); - - if (this.rectSelection.isSelected || this.pointSelection.isSelected) { - this.el.on('DOMAttrModified.select', function () { - _this.handler(); - }); - } - } - }; - - SelectHandler.prototype.cleanup = function () { - - //var _this = this; - - if (!this.rectSelection.isSelected && this.rectSelection.set) { - // stop watching the element, remove the selection - this.rectSelection.set.each(function () { - this.remove(); - }); - - this.rectSelection.set.clear(); - delete this.rectSelection.set; - } - - if (!this.pointSelection.isSelected && this.pointSelection.set) { - // Remove all points, clear the set, stop watching the element - this.pointSelection.set.each(function () { - this.remove(); - }); - - this.pointSelection.set.clear(); - delete this.pointSelection.set; - } - - if (!this.pointSelection.isSelected && !this.rectSelection.isSelected) { - this.nested.remove(); - delete this.nested; - - } - }; - - - SVG.extend(SVG.Element, { - // Select element with mouse - selectize: function (value, options) { - - // Check the parameters and reassign if needed - if (typeof value === 'object') { - options = value; - value = true; - } - - var selectHandler = this.remember('_selectHandler') || new SelectHandler(this); - - selectHandler.init(value === undefined ? true : value, options || {}); - - return this; - - } - }); - - SVG.Element.prototype.selectize.defaults = { - points: true, // If true, points at the edges are drawn. Needed for resize! - classRect: 'svg_select_boundingRect', // Css-class added to the rect - classPoints: 'svg_select_points', // Css-class added to the points - radius: 7, // radius of the points - rotationPoint: true, // If true, rotation point is drawn. Needed for rotation! - deepSelect: false // If true, moving of single points is possible (only line, polyline, polyon) - }; - }()); - - (function() { - (function () { - - function ResizeHandler(el) { - - el.remember('_resizeHandler', this); - - this.el = el; - this.parameters = {}; - this.lastUpdateCall = null; - this.p = el.doc().node.createSVGPoint(); - } - - ResizeHandler.prototype.transformPoint = function(x, y, m){ - - this.p.x = x - (this.offset.x - window.pageXOffset); - this.p.y = y - (this.offset.y - window.pageYOffset); - - return this.p.matrixTransform(m || this.m); - - }; - - ResizeHandler.prototype._extractPosition = function(event) { - // Extract a position from a mouse/touch event. - // Returns { x: .., y: .. } - return { - x: event.clientX != null ? event.clientX : event.touches[0].clientX, - y: event.clientY != null ? event.clientY : event.touches[0].clientY - } - }; - - ResizeHandler.prototype.init = function (options) { - - var _this = this; - - this.stop(); - - if (options === 'stop') { - return; - } - - this.options = {}; - - // Merge options and defaults - for (var i in this.el.resize.defaults) { - this.options[i] = this.el.resize.defaults[i]; - if (typeof options[i] !== 'undefined') { - this.options[i] = options[i]; - } - } - - // We listen to all these events which are specifying different edges - this.el.on('lt.resize', function(e){ _this.resize(e || window.event); }); // Left-Top - this.el.on('rt.resize', function(e){ _this.resize(e || window.event); }); // Right-Top - this.el.on('rb.resize', function(e){ _this.resize(e || window.event); }); // Right-Bottom - this.el.on('lb.resize', function(e){ _this.resize(e || window.event); }); // Left-Bottom - - this.el.on('t.resize', function(e){ _this.resize(e || window.event); }); // Top - this.el.on('r.resize', function(e){ _this.resize(e || window.event); }); // Right - this.el.on('b.resize', function(e){ _this.resize(e || window.event); }); // Bottom - this.el.on('l.resize', function(e){ _this.resize(e || window.event); }); // Left - - this.el.on('rot.resize', function(e){ _this.resize(e || window.event); }); // Rotation - - this.el.on('point.resize', function(e){ _this.resize(e || window.event); }); // Point-Moving - - // This call ensures, that the plugin reacts to a change of snapToGrid immediately - this.update(); - - }; - - ResizeHandler.prototype.stop = function(){ - this.el.off('lt.resize'); - this.el.off('rt.resize'); - this.el.off('rb.resize'); - this.el.off('lb.resize'); - - this.el.off('t.resize'); - this.el.off('r.resize'); - this.el.off('b.resize'); - this.el.off('l.resize'); - - this.el.off('rot.resize'); - - this.el.off('point.resize'); - - return this; - }; - - ResizeHandler.prototype.resize = function (event) { - - var _this = this; - - this.m = this.el.node.getScreenCTM().inverse(); - this.offset = { x: window.pageXOffset, y: window.pageYOffset }; - - var txPt = this._extractPosition(event.detail.event); - this.parameters = { - type: this.el.type, // the type of element - p: this.transformPoint(txPt.x, txPt.y), - x: event.detail.x, // x-position of the mouse when resizing started - y: event.detail.y, // y-position of the mouse when resizing started - box: this.el.bbox(), // The bounding-box of the element - rotation: this.el.transform().rotation // The current rotation of the element - }; - - // Add font-size parameter if the element type is text - if (this.el.type === "text") { - this.parameters.fontSize = this.el.attr()["font-size"]; - } - - // the i-param in the event holds the index of the point which is moved, when using `deepSelect` - if (event.detail.i !== undefined) { - - // get the point array - var array = this.el.array().valueOf(); - - // Save the index and the point which is moved - this.parameters.i = event.detail.i; - this.parameters.pointCoords = [array[event.detail.i][0], array[event.detail.i][1]]; - } - - // Lets check which edge of the bounding-box was clicked and resize the this.el according to this - switch (event.type) { - - // Left-Top-Edge - case 'lt': - // We build a calculating function for every case which gives us the new position of the this.el - this.calc = function (diffX, diffY) { - // The procedure is always the same - // First we snap the edge to the given grid (snapping to 1px grid is normal resizing) - var snap = this.snapToGrid(diffX, diffY); - - // Now we check if the new height and width still valid (> 0) - if (this.parameters.box.width - snap[0] > 0 && this.parameters.box.height - snap[1] > 0) { - // ...if valid, we resize the this.el (which can include moving because the coord-system starts at the left-top and this edge is moving sometimes when resized) - - /* - * but first check if the element is text box, so we can change the font size instead of - * the width and height - */ - - if (this.parameters.type === "text") { - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y); - this.el.attr("font-size", this.parameters.fontSize - snap[0]); - return; - } - - snap = this.checkAspectRatio(snap); - - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y + snap[1]).size(this.parameters.box.width - snap[0], this.parameters.box.height - snap[1]); - } - }; - break; - - // Right-Top - case 'rt': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 1 << 1); - if (this.parameters.box.width + snap[0] > 0 && this.parameters.box.height - snap[1] > 0) { - if (this.parameters.type === "text") { - this.el.move(this.parameters.box.x - snap[0], this.parameters.box.y); - this.el.attr("font-size", this.parameters.fontSize + snap[0]); - return; - } - - snap = this.checkAspectRatio(snap); - - this.el.move(this.parameters.box.x, this.parameters.box.y + snap[1]).size(this.parameters.box.width + snap[0], this.parameters.box.height - snap[1]); - } - }; - break; - - // Right-Bottom - case 'rb': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 0); - if (this.parameters.box.width + snap[0] > 0 && this.parameters.box.height + snap[1] > 0) { - if (this.parameters.type === "text") { - this.el.move(this.parameters.box.x - snap[0], this.parameters.box.y); - this.el.attr("font-size", this.parameters.fontSize + snap[0]); - return; - } - - snap = this.checkAspectRatio(snap); - - this.el.move(this.parameters.box.x, this.parameters.box.y).size(this.parameters.box.width + snap[0], this.parameters.box.height + snap[1]); - } - }; - break; - - // Left-Bottom - case 'lb': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 1); - if (this.parameters.box.width - snap[0] > 0 && this.parameters.box.height + snap[1] > 0) { - if (this.parameters.type === "text") { - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y); - this.el.attr("font-size", this.parameters.fontSize - snap[0]); - return; - } - - snap = this.checkAspectRatio(snap); - - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y).size(this.parameters.box.width - snap[0], this.parameters.box.height + snap[1]); - } - }; - break; - - // Top - case 't': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 1 << 1); - if (this.parameters.box.height - snap[1] > 0) { - // Disable the font-resizing if it is not from the corner of bounding-box - if (this.parameters.type === "text") { - return; - } - - this.el.move(this.parameters.box.x, this.parameters.box.y + snap[1]).height(this.parameters.box.height - snap[1]); - } - }; - break; - - // Right - case 'r': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 0); - if (this.parameters.box.width + snap[0] > 0) { - if (this.parameters.type === "text") { - return; - } - - this.el.move(this.parameters.box.x, this.parameters.box.y).width(this.parameters.box.width + snap[0]); - } - }; - break; - - // Bottom - case 'b': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 0); - if (this.parameters.box.height + snap[1] > 0) { - if (this.parameters.type === "text") { - return; - } - - this.el.move(this.parameters.box.x, this.parameters.box.y).height(this.parameters.box.height + snap[1]); - } - }; - break; - - // Left - case 'l': - // s.a. - this.calc = function (diffX, diffY) { - var snap = this.snapToGrid(diffX, diffY, 1); - if (this.parameters.box.width - snap[0] > 0) { - if (this.parameters.type === "text") { - return; - } - - this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y).width(this.parameters.box.width - snap[0]); - } - }; - break; - - // Rotation - case 'rot': - // s.a. - this.calc = function (diffX, diffY) { - - // yes this is kinda stupid but we need the mouse coords back... - var current = {x: diffX + this.parameters.p.x, y: diffY + this.parameters.p.y}; - - // start minus middle - var sAngle = Math.atan2((this.parameters.p.y - this.parameters.box.y - this.parameters.box.height / 2), (this.parameters.p.x - this.parameters.box.x - this.parameters.box.width / 2)); - - // end minus middle - var pAngle = Math.atan2((current.y - this.parameters.box.y - this.parameters.box.height / 2), (current.x - this.parameters.box.x - this.parameters.box.width / 2)); - - var angle = (pAngle - sAngle) * 180 / Math.PI; - - // We have to move the element to the center of the box first and change the rotation afterwards - // because rotation always works around a rotation-center, which is changed when moving the element - // We also set the new rotation center to the center of the box. - this.el.center(this.parameters.box.cx, this.parameters.box.cy).rotate(this.parameters.rotation + angle - angle % this.options.snapToAngle, this.parameters.box.cx, this.parameters.box.cy); - }; - break; - - // Moving one single Point (needed when an element is deepSelected which means you can move every single point of the object) - case 'point': - this.calc = function (diffX, diffY) { - - // Snapping the point to the grid - var snap = this.snapToGrid(diffX, diffY, this.parameters.pointCoords[0], this.parameters.pointCoords[1]); - - // Get the point array - var array = this.el.array().valueOf(); - - // Changing the moved point in the array - array[this.parameters.i][0] = this.parameters.pointCoords[0] + snap[0]; - array[this.parameters.i][1] = this.parameters.pointCoords[1] + snap[1]; - - // And plot the new this.el - this.el.plot(array); - }; - } - - this.el.fire('resizestart', {dx: this.parameters.x, dy: this.parameters.y, event: event}); - // When resizing started, we have to register events for... - // Touches. - SVG.on(window, 'touchmove.resize', function(e) { - _this.update(e || window.event); - }); - SVG.on(window, 'touchend.resize', function() { - _this.done(); - }); - // Mouse. - SVG.on(window, 'mousemove.resize', function (e) { - _this.update(e || window.event); - }); - SVG.on(window, 'mouseup.resize', function () { - _this.done(); - }); - - }; - - // The update-function redraws the element every time the mouse is moving - ResizeHandler.prototype.update = function (event) { - - if (!event) { - if (this.lastUpdateCall) { - this.calc(this.lastUpdateCall[0], this.lastUpdateCall[1]); - } - return; - } - - // Calculate the difference between the mouseposition at start and now - var txPt = this._extractPosition(event); - var p = this.transformPoint(txPt.x, txPt.y); - - var diffX = p.x - this.parameters.p.x, - diffY = p.y - this.parameters.p.y; - - this.lastUpdateCall = [diffX, diffY]; - - // Calculate the new position and height / width of the element - this.calc(diffX, diffY); - - // Emit an event to say we have changed. - this.el.fire('resizing', {dx: diffX, dy: diffY, event: event}); - }; - - // Is called on mouseup. - // Removes the update-function from the mousemove event - ResizeHandler.prototype.done = function () { - this.lastUpdateCall = null; - SVG.off(window, 'mousemove.resize'); - SVG.off(window, 'mouseup.resize'); - SVG.off(window, 'touchmove.resize'); - SVG.off(window, 'touchend.resize'); - this.el.fire('resizedone'); - }; - - // The flag is used to determine whether the resizing is used with a left-Point (first bit) and top-point (second bit) - // In this cases the temp-values are calculated differently - ResizeHandler.prototype.snapToGrid = function (diffX, diffY, flag, pointCoordsY) { - - var temp; - - // If `pointCoordsY` is given, a single Point has to be snapped (deepSelect). That's why we need a different temp-value - if (typeof pointCoordsY !== 'undefined') { - // Note that flag = pointCoordsX in this case - temp = [(flag + diffX) % this.options.snapToGrid, (pointCoordsY + diffY) % this.options.snapToGrid]; - } else { - // We check if the flag is set and if not we set a default-value (both bits set - which means upper-left-edge) - flag = flag == null ? 1 | 1 << 1 : flag; - temp = [(this.parameters.box.x + diffX + (flag & 1 ? 0 : this.parameters.box.width)) % this.options.snapToGrid, (this.parameters.box.y + diffY + (flag & (1 << 1) ? 0 : this.parameters.box.height)) % this.options.snapToGrid]; - } - - - diffX -= (Math.abs(temp[0]) < this.options.snapToGrid / 2 ? - temp[0] : - temp[0] - (diffX < 0 ? -this.options.snapToGrid : this.options.snapToGrid)); - diffY -= (Math.abs(temp[1]) < this.options.snapToGrid / 2 ? - temp[1] : - temp[1] - (diffY < 0 ? -this.options.snapToGrid : this.options.snapToGrid)); - - return this.constraintToBox(diffX, diffY, flag, pointCoordsY); - - }; - - // keep element within constrained box - ResizeHandler.prototype.constraintToBox = function (diffX, diffY, flag, pointCoordsY) { - //return [diffX, diffY] - var c = this.options.constraint || {}; - var orgX, orgY; - - if (typeof pointCoordsY !== 'undefined') { - orgX = flag; - orgY = pointCoordsY; - } else { - orgX = this.parameters.box.x + (flag & 1 ? 0 : this.parameters.box.width); - orgY = this.parameters.box.y + (flag & (1<<1) ? 0 : this.parameters.box.height); - } - - if (typeof c.minX !== 'undefined' && orgX + diffX < c.minX) { - diffX = c.minX - orgX; - } - - if (typeof c.maxX !== 'undefined' && orgX + diffX > c.maxX) { - diffX = c.maxX - orgX; - } - - if (typeof c.minY !== 'undefined' && orgY + diffY < c.minY) { - diffY = c.minY - orgY; - } - - if (typeof c.maxY !== 'undefined' && orgY + diffY > c.maxY) { - diffY = c.maxY - orgY; - } - - return [diffX, diffY]; - }; - - ResizeHandler.prototype.checkAspectRatio = function (snap) { - if (!this.options.saveAspectRatio) { - return snap; - } - - var updatedSnap = snap.slice(); - var aspectRatio = this.parameters.box.width / this.parameters.box.height; - var newW = this.parameters.box.width + snap[0]; - var newH = this.parameters.box.height - snap[1]; - var newAspectRatio = newW / newH; - - if (newAspectRatio < aspectRatio) { - // Height is too big. Adapt it - updatedSnap[1] = newW / aspectRatio - this.parameters.box.height; - } else if (newAspectRatio > aspectRatio) { - // Width is too big. Adapt it - updatedSnap[0] = this.parameters.box.width - newH * aspectRatio; - } - - return updatedSnap; - - }; - - SVG.extend(SVG.Element, { - // Resize element with mouse - resize: function (options) { - - (this.remember('_resizeHandler') || new ResizeHandler(this)).init(options || {}); - - return this; - - } - - }); - - SVG.Element.prototype.resize.defaults = { - snapToAngle: 0.1, // Specifies the speed the rotation is happening when moving the mouse - snapToGrid: 1, // Snaps to a grid of `snapToGrid` Pixels - constraint: {}, // keep element within constrained box - saveAspectRatio: false // Save aspect ratio when resizing using lt, rt, rb or lb points - }; - - }).call(this); - }()); - - function styleInject(css, ref) { - if ( ref === void 0 ) ref = {}; - var insertAt = ref.insertAt; - - if (!css || typeof document === 'undefined') { return; } - - var head = document.head || document.getElementsByTagName('head')[0]; - var style = document.createElement('style'); - style.type = 'text/css'; - - if (insertAt === 'top') { - if (head.firstChild) { - head.insertBefore(style, head.firstChild); - } else { - head.appendChild(style); - } - } else { - head.appendChild(style); - } - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - style.appendChild(document.createTextNode(css)); - } - } - - var css = ".apexcharts-canvas {\n position: relative;\n user-select: none;\n /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px;\n}\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0,0,0,.5);\n box-shadow: 0 0 1px rgba(255,255,255,.5);\n -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);\n}\n.apexcharts-canvas.dark {\n background: #343F57;\n}\n\n.apexcharts-inner {\n position: relative;\n}\n\n.legend-mouseover-inactive {\n transition: 0.15s ease all;\n opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0;\n}\n\n.apexcharts-gridline, .apexcharts-text {\n pointer-events: none;\n}\n\n.apexcharts-tooltip {\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px #999;\n cursor: default;\n font-size: 14px;\n left: 62px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 20px;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: 0.15s ease all;\n}\n.apexcharts-tooltip.light {\n border: 1px solid #e3e3e3;\n background: rgba(255, 255, 255, 0.96);\n}\n.apexcharts-tooltip.dark {\n color: #fff;\n background: rgba(30,30,30, 0.8);\n}\n.apexcharts-tooltip * {\n font-family: inherit;\n}\n\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line {\n pointer-events: none;\n}\n\n.apexcharts-tooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip-title {\n padding: 6px;\n font-size: 15px;\n margin-bottom: 4px;\n}\n.apexcharts-tooltip.light .apexcharts-tooltip-title {\n background: #ECEFF1;\n border-bottom: 1px solid #ddd;\n}\n.apexcharts-tooltip.dark .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #333;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n font-weight: 600;\n margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-z-label:empty,\n.apexcharts-tooltip-text-z-value:empty {\n display: none;\n}\n\n.apexcharts-tooltip-text-value, \n.apexcharts-tooltip-text-z-value {\n font-weight: 600;\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0px;\n margin-right: 10px;\n border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 0 10px;\n display: none;\n text-align: left;\n justify-content: left;\n align-items: center;\n}\n\n.apexcharts-tooltip-series-group.active .apexcharts-tooltip-marker {\n opacity: 1;\n}\n.apexcharts-tooltip-series-group.active, .apexcharts-tooltip-series-group:last-child {\n padding-bottom: 4px;\n}\n.apexcharts-tooltip-series-group-hidden {\n opacity: 0;\n height: 0;\n line-height: 0;\n padding: 0 !important;\n}\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px;\n}\n.apexcharts-tooltip-candlestick {\n padding: 4px 8px;\n}\n.apexcharts-tooltip-candlestick > div {\n margin: 4px 0;\n}\n.apexcharts-tooltip-candlestick span.value {\n font-weight: bold;\n}\n\n.apexcharts-tooltip-rangebar {\n padding: 5px 8px;\n}\n\n.apexcharts-tooltip-rangebar .category {\n font-weight: 600;\n color: #777;\n}\n\n.apexcharts-tooltip-rangebar .series-name {\n font-weight: bold;\n display: block;\n margin-bottom: 5px;\n}\n\n.apexcharts-xaxistooltip {\n opacity: 0;\n padding: 9px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip.dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-xaxistooltip:after, .apexcharts-xaxistooltip:before {\n\tleft: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-left: -6px;\n}\n.apexcharts-xaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after, .apexcharts-xaxistooltip-bottom:before {\n bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-top:after, .apexcharts-xaxistooltip-top:before {\n top: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-bottom.dark:after {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-bottom.dark:before {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top:after {\n border-top-color:#ECEFF1\n}\n.apexcharts-xaxistooltip-top:before {\n border-top-color: #90A4AE;\n}\n.apexcharts-xaxistooltip-top.dark:after {\n border-top-color:rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-top.dark:before {\n border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n\n.apexcharts-xaxistooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n opacity: 0;\n padding: 4px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip.dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-yaxistooltip:after, .apexcharts-yaxistooltip:before {\n\ttop: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n.apexcharts-yaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-top: -6px;\n}\n.apexcharts-yaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after, .apexcharts-yaxistooltip-left:before {\n left: 100%;\n}\n\n.apexcharts-yaxistooltip-right:after, .apexcharts-yaxistooltip-right:before {\n right: 100%;\n}\n\n.apexcharts-yaxistooltip-left:after {\n border-left-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-left:before {\n border-left-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-left.dark:after {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-left.dark:before {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right:after {\n border-right-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-right:before {\n border-right-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-right.dark:after {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-right.dark:before {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip.active {\n opacity: 1;\n}\n\n.apexcharts-xcrosshairs, .apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.active, .apexcharts-ycrosshairs.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0;\n}\n\n.apexcharts-zoom-rect {\n pointer-events: none;\n}\n.apexcharts-selection-rect {\n cursor: move;\n}\n\n.svg_select_points, .svg_select_points_rot {\n opacity: 0;\n visibility: hidden;\n}\n.svg_select_points_l, .svg_select_points_r {\n cursor: ew-resize;\n opacity: 1;\n visibility: visible;\n fill: #888;\n}\n.apexcharts-canvas.zoomable .hovering-zoom {\n cursor: crosshair\n}\n.apexcharts-canvas.zoomable .hovering-pan {\n cursor: move\n}\n\n.apexcharts-xaxis,\n.apexcharts-yaxis {\n pointer-events: none;\n}\n\n.apexcharts-zoom-icon, \n.apexcharts-zoom-in-icon,\n.apexcharts-zoom-out-icon,\n.apexcharts-reset-zoom-icon, \n.apexcharts-pan-icon, \n.apexcharts-selection-icon,\n.apexcharts-menu-icon, \n.apexcharts-toolbar-custom-icon {\n cursor: pointer;\n width: 20px;\n height: 20px;\n line-height: 24px;\n color: #6E8192;\n text-align: center;\n}\n\n\n.apexcharts-zoom-icon svg, \n.apexcharts-zoom-in-icon svg,\n.apexcharts-zoom-out-icon svg,\n.apexcharts-reset-zoom-icon svg,\n.apexcharts-menu-icon svg {\n fill: #6E8192;\n}\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(0.76)\n}\n\n.dark .apexcharts-zoom-icon svg, \n.dark .apexcharts-zoom-in-icon svg,\n.dark .apexcharts-zoom-out-icon svg,\n.dark .apexcharts-reset-zoom-icon svg, \n.dark .apexcharts-pan-icon svg, \n.dark .apexcharts-selection-icon svg,\n.dark .apexcharts-menu-icon svg, \n.dark .apexcharts-toolbar-custom-icon svg{\n fill: #f3f4f5;\n}\n\n.apexcharts-canvas .apexcharts-zoom-icon.selected svg, \n.apexcharts-canvas .apexcharts-selection-icon.selected svg, \n.apexcharts-canvas .apexcharts-reset-zoom-icon.selected svg {\n fill: #008FFB;\n}\n.light .apexcharts-selection-icon:not(.selected):hover svg,\n.light .apexcharts-zoom-icon:not(.selected):hover svg, \n.light .apexcharts-zoom-in-icon:hover svg, \n.light .apexcharts-zoom-out-icon:hover svg, \n.light .apexcharts-reset-zoom-icon:hover svg, \n.light .apexcharts-menu-icon:hover svg {\n fill: #333;\n}\n\n.apexcharts-selection-icon, .apexcharts-menu-icon {\n position: relative;\n}\n.apexcharts-reset-zoom-icon {\n margin-left: 5px;\n}\n.apexcharts-zoom-icon, .apexcharts-reset-zoom-icon, .apexcharts-menu-icon {\n transform: scale(0.85);\n}\n\n.apexcharts-zoom-in-icon, .apexcharts-zoom-out-icon {\n transform: scale(0.7)\n}\n\n.apexcharts-zoom-out-icon {\n margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n transform: scale(0.62);\n position: relative;\n left: 1px;\n top: 0px;\n}\n.apexcharts-pan-icon svg {\n fill: #fff;\n stroke: #6E8192;\n stroke-width: 2;\n}\n.apexcharts-pan-icon.selected svg {\n stroke: #008FFB;\n}\n.apexcharts-pan-icon:not(.selected):hover svg {\n stroke: #333;\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n top: 0px;\n right: 3px;\n max-width: 176px;\n text-align: right;\n border-radius: 3px;\n padding: 0px 6px 2px 6px;\n display: flex;\n justify-content: space-between;\n align-items: center; \n}\n\n.apexcharts-toolbar svg {\n pointer-events: none;\n}\n\n.apexcharts-menu {\n background: #fff;\n position: absolute;\n top: 100%;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 3px;\n right: 10px;\n opacity: 0;\n min-width: 110px;\n transition: 0.15s ease all;\n pointer-events: none;\n}\n\n.apexcharts-menu.open {\n opacity: 1;\n pointer-events: all;\n transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n padding: 6px 7px;\n font-size: 12px;\n cursor: pointer;\n}\n.light .apexcharts-menu-item:hover {\n background: #eee;\n}\n.dark .apexcharts-menu {\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n}\n\n@media screen and (min-width: 768px) {\n .apexcharts-toolbar {\n /*opacity: 0;*/\n }\n\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1;\n } \n}\n\n.apexcharts-datalabel.hidden {\n opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabel, .apexcharts-datalabel-label, .apexcharts-datalabel-value {\n cursor: default;\n pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease;\n}\n\n.apexcharts-canvas .hidden {\n opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, .apexcharts-radar-series path, .apexcharts-radar-series polygon {\n pointer-events: none;\n}\n\n/* markers */\n\n.apexcharts-marker {\n transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}"; - styleInject(css); - - /* - * classList.js: Cross-browser full element.classList implementation. - * 1.2.20171210 - * - * By Eli Grey, http://eligrey.com - * License: Dedicated to the public domain. - * See https://github.com/eligrey/classList.js/blob/master/LICENSE.md - */ - - /*global self, document, DOMException */ - - /*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js */ - if ("document" in self) { - // Full polyfill for browsers with no classList support - // Including IE < Edge missing SVGElement.classList - if (!("classList" in document.createElement("_")) || document.createElementNS && !("classList" in document.createElementNS("http://www.w3.org/2000/svg", "g"))) { - (function (view) { - - if (!('Element' in view)) return; - - var classListProp = "classList", - protoProp = "prototype", - elemCtrProto = view.Element[protoProp], - objCtr = Object, - strTrim = String[protoProp].trim || function () { - return this.replace(/^\s+|\s+$/g, ""); - }, - arrIndexOf = Array[protoProp].indexOf || function (item) { - var i = 0, - len = this.length; - - for (; i < len; i++) { - if (i in this && this[i] === item) { - return i; - } - } - - return -1; - } // Vendors: please allow content code to instantiate DOMExceptions - , - DOMEx = function DOMEx(type, message) { - this.name = type; - this.code = DOMException[type]; - this.message = message; - }, - checkTokenAndGetIndex = function checkTokenAndGetIndex(classList, token) { - if (token === "") { - throw new DOMEx("SYNTAX_ERR", "The token must not be empty."); - } - - if (/\s/.test(token)) { - throw new DOMEx("INVALID_CHARACTER_ERR", "The token must not contain space characters."); - } - - return arrIndexOf.call(classList, token); - }, - ClassList = function ClassList(elem) { - var trimmedClasses = strTrim.call(elem.getAttribute("class") || ""), - classes = trimmedClasses ? trimmedClasses.split(/\s+/) : [], - i = 0, - len = classes.length; - - for (; i < len; i++) { - this.push(classes[i]); - } - - this._updateClassName = function () { - elem.setAttribute("class", this.toString()); - }; - }, - classListProto = ClassList[protoProp] = [], - classListGetter = function classListGetter() { - return new ClassList(this); - }; // Most DOMException implementations don't allow calling DOMException's toString() - // on non-DOMExceptions. Error's toString() is sufficient here. - - - DOMEx[protoProp] = Error[protoProp]; - - classListProto.item = function (i) { - return this[i] || null; - }; - - classListProto.contains = function (token) { - return ~checkTokenAndGetIndex(this, token + ""); - }; - - classListProto.add = function () { - var tokens = arguments, - i = 0, - l = tokens.length, - token, - updated = false; - - do { - token = tokens[i] + ""; - - if (!~checkTokenAndGetIndex(this, token)) { - this.push(token); - updated = true; - } - } while (++i < l); - - if (updated) { - this._updateClassName(); - } - }; - - classListProto.remove = function () { - var tokens = arguments, - i = 0, - l = tokens.length, - token, - updated = false, - index; - - do { - token = tokens[i] + ""; - index = checkTokenAndGetIndex(this, token); - - while (~index) { - this.splice(index, 1); - updated = true; - index = checkTokenAndGetIndex(this, token); - } - } while (++i < l); - - if (updated) { - this._updateClassName(); - } - }; - - classListProto.toggle = function (token, force) { - var result = this.contains(token), - method = result ? force !== true && "remove" : force !== false && "add"; - - if (method) { - this[method](token); - } - - if (force === true || force === false) { - return force; - } else { - return !result; - } - }; - - classListProto.replace = function (token, replacement_token) { - var index = checkTokenAndGetIndex(token + ""); - - if (~index) { - this.splice(index, 1, replacement_token); - - this._updateClassName(); - } - }; - - classListProto.toString = function () { - return this.join(" "); - }; - - if (objCtr.defineProperty) { - var classListPropDesc = { - get: classListGetter, - enumerable: true, - configurable: true - }; - - try { - objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); - } catch (ex) { - // IE 8 doesn't support enumerable:true - // adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36 - // modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected - if (ex.number === undefined || ex.number === -0x7FF5EC54) { - classListPropDesc.enumerable = false; - objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); - } - } - } else if (objCtr[protoProp].__defineGetter__) { - elemCtrProto.__defineGetter__(classListProp, classListGetter); - } - })(self); - } // There is full or partial native classList support, so just check if we need - // to normalize the add/remove and toggle APIs. - - - (function () { - - var testElement = document.createElement("_"); - testElement.classList.add("c1", "c2"); // Polyfill for IE 10/11 and Firefox <26, where classList.add and - // classList.remove exist but support only one argument at a time. - - if (!testElement.classList.contains("c2")) { - var createMethod = function createMethod(method) { - var original = DOMTokenList.prototype[method]; - - DOMTokenList.prototype[method] = function (token) { - var i, - len = arguments.length; - - for (i = 0; i < len; i++) { - token = arguments[i]; - original.call(this, token); - } - }; - }; - - createMethod('add'); - createMethod('remove'); - } - - testElement.classList.toggle("c3", false); // Polyfill for IE 10 and Firefox <24, where classList.toggle does not - // support the second argument. - - if (testElement.classList.contains("c3")) { - var _toggle = DOMTokenList.prototype.toggle; - - DOMTokenList.prototype.toggle = function (token, force) { - if (1 in arguments && !this.contains(token) === !force) { - return force; - } else { - return _toggle.call(this, token); - } - }; - } // replace() polyfill - - - if (!("replace" in document.createElement("_").classList)) { - DOMTokenList.prototype.replace = function (token, replacement_token) { - var tokens = this.toString().split(" "), - index = tokens.indexOf(token + ""); - - if (~index) { - tokens = tokens.slice(index); - this.remove.apply(this, tokens); - this.add(replacement_token); - this.add.apply(this, tokens.slice(1)); - } - }; - } - - testElement = null; - })(); - } - - /** - * Detect Element Resize - * - * https://github.com/sdecima/javascript-detect-element-resize - * Sebastian Decima - * - * version: 0.5.3 - **/ - (function () { - var stylesCreated = false; - - function resetTriggers(element) { - var triggers = element.__resizeTriggers__, - expand = triggers.firstElementChild, - contract = triggers.lastElementChild, - expandChild = expand.firstElementChild; - contract.scrollLeft = contract.scrollWidth; - contract.scrollTop = contract.scrollHeight; - expandChild.style.width = expand.offsetWidth + 1 + 'px'; - expandChild.style.height = expand.offsetHeight + 1 + 'px'; - expand.scrollLeft = expand.scrollWidth; - expand.scrollTop = expand.scrollHeight; - } - - function checkTriggers(element) { - return element.offsetWidth != element.__resizeLast__.width || element.offsetHeight != element.__resizeLast__.height; - } - - function scrollListener(e) { - var element = this; - resetTriggers(this); - if (this.__resizeRAF__) cancelFrame(this.__resizeRAF__); - this.__resizeRAF__ = requestFrame(function () { - if (checkTriggers(element)) { - element.__resizeLast__.width = element.offsetWidth; - element.__resizeLast__.height = element.offsetHeight; - - element.__resizeListeners__.forEach(function (fn) { - fn.call(e); - }); - } - }); - } - - function createStyles() { - if (!stylesCreated) { - // opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360 - var css = (animationKeyframes || '') + '.resize-triggers { ' + (animationStyle || '') + 'visibility: hidden; opacity: 0; } ' + '.resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \" \"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }', - head = document.head || document.getElementsByTagName('head')[0], - style = document.createElement('style'); - style.type = 'text/css'; - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - style.appendChild(document.createTextNode(css)); - } - - head.appendChild(style); - stylesCreated = true; - } - } - - var requestFrame = function () { - var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (fn) { - return window.setTimeout(fn, 20); - }; - - return function (fn) { - return raf(fn); - }; - }(); - - var cancelFrame = function () { - var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout; - return function (id) { - return cancel(id); - }; - }(); - /* Detect CSS Animations support to detect element display/re-attach */ - - - var animation = false, - keyframeprefix = '', - animationstartevent = 'animationstart', - domPrefixes = 'Webkit Moz O ms'.split(' '), - startEvents = 'webkitAnimationStart animationstart oAnimationStart MSAnimationStart'.split(' '), - pfx = ''; - { - var elm = document.createElement('fakeelement'); - - if (elm.style.animationName !== undefined) { - animation = true; - } - - if (animation === false) { - for (var i = 0; i < domPrefixes.length; i++) { - if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) { - pfx = domPrefixes[i]; - keyframeprefix = '-' + pfx.toLowerCase() + '-'; - animationstartevent = startEvents[i]; - break; - } - } - } - } - var animationName = 'resizeanim'; - var animationKeyframes = '@' + keyframeprefix + 'keyframes ' + animationName + ' { from { opacity: 0; } to { opacity: 0; } } '; - var animationStyle = keyframeprefix + 'animation: 1ms ' + animationName + '; '; - - window.addResizeListener = function (element, fn) { - if (!element.__resizeTriggers__) { - if (getComputedStyle(element).position == 'static') element.style.position = 'relative'; - createStyles(); - element.__resizeLast__ = {}; - element.__resizeListeners__ = []; - (element.__resizeTriggers__ = document.createElement('div')).className = 'resize-triggers'; - element.__resizeTriggers__.innerHTML = '
' + '
'; - element.appendChild(element.__resizeTriggers__); - resetTriggers(element); - element.addEventListener('scroll', scrollListener, true); - /* Listen for a css animation to detect element display/re-attach */ - - animationstartevent && element.__resizeTriggers__.addEventListener(animationstartevent, function (e) { - if (e.animationName == animationName) { - resetTriggers(element); - } - }); - } - - element.__resizeListeners__.push(fn); - }; - - window.removeResizeListener = function (element, fn) { - if (element) { - element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1); - - if (!element.__resizeListeners__.length) { - element.removeEventListener('scroll', scrollListener); - element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__); - } - } - }; - })(); - - window.Apex = {}; - /** - * - * @module ApexCharts - **/ - - var ApexCharts$1 = - /*#__PURE__*/ - function () { - function ApexCharts(el, opts) { - _classCallCheck(this, ApexCharts); - - this.opts = opts; - this.ctx = this; // Pass the user supplied options to the Base Class where these options will be extended with defaults. The returned object from Base Class will become the config object in the entire codebase. - - this.w = new Base(opts).init(); - this.el = el; - this.w.globals.cuid = (Math.random() + 1).toString(36).substring(4); - this.w.globals.chartID = this.w.config.chart.id ? this.w.config.chart.id : this.w.globals.cuid; - this.initModules(); - this.create = Utils.bind(this.create, this); - this.windowResizeHandler = this.windowResize.bind(this); - } - /** - * The primary method user will call to render the chart. - */ - - - _createClass(ApexCharts, [{ - key: "render", - value: function render() { - var _this = this; - - // main method - return new Promise$1(function (resolve, reject) { - // only draw chart, if element found - if (_this.el !== null) { - if (typeof Apex._chartInstances === 'undefined') { - Apex._chartInstances = []; - } - - if (_this.w.config.chart.id) { - Apex._chartInstances.push({ - id: _this.w.globals.chartID, - group: _this.w.config.chart.group, - chart: _this - }); - } // set the locale here - - - _this.setLocale(_this.w.config.chart.defaultLocale); - - var beforeMount = _this.w.config.chart.events.beforeMount; - - if (typeof beforeMount === 'function') { - beforeMount(_this, _this.w); - } - - _this.fireEvent('beforeMount', [_this, _this.w]); - - window.addEventListener('resize', _this.windowResizeHandler); - window.addResizeListener(_this.el.parentNode, _this.parentResizeCallback.bind(_this)); - - var graphData = _this.create(_this.w.config.series, {}); - - if (!graphData) return resolve(_this); - - _this.mount(graphData).then(function () { - resolve(graphData); - - if (typeof _this.w.config.chart.events.mounted === 'function') { - _this.w.config.chart.events.mounted(_this, _this.w); - } - - _this.fireEvent('mounted', [_this, _this.w]); - }).catch(function (e) { - reject(e); // handle error in case no data or element not found - }); - } else { - reject(new Error('Element not found')); - } - }); - } - }, { - key: "initModules", - value: function initModules() { - this.animations = new Animations(this); - this.core = new Core(this.el, this); - this.grid = new Grid(this); - this.coreUtils = new CoreUtils(this); - this.config = new Config({}); - this.crosshairs = new Crosshairs(this); - this.options = new Options(); - this.responsive = new Responsive(this); - this.series = new Series(this); - this.theme = new Theme(this); - this.formatters = new Formatters(this); - this.titleSubtitle = new TitleSubtitle(this); - this.legend = new Legend(this); - this.toolbar = new Toolbar(this); - this.dimensions = new Dimensions(this); - this.zoomPanSelection = new ZoomPanSelection(this); - this.w.globals.tooltip = new Tooltip(this); - } - }, { - key: "addEventListener", - value: function addEventListener(name$$1, handler) { - var w = this.w; - - if (w.globals.events.hasOwnProperty(name$$1)) { - w.globals.events[name$$1].push(handler); - } else { - w.globals.events[name$$1] = [handler]; - } - } - }, { - key: "removeEventListener", - value: function removeEventListener(name$$1, handler) { - var w = this.w; - - if (!w.globals.events.hasOwnProperty(name$$1)) { - return; - } - - var index = w.globals.events[name$$1].indexOf(handler); - - if (index !== -1) { - w.globals.events[name$$1].splice(index, 1); - } - } - }, { - key: "fireEvent", - value: function fireEvent(name$$1, args) { - var w = this.w; - - if (!w.globals.events.hasOwnProperty(name$$1)) { - return; - } - - if (!args || !args.length) { - args = []; - } - - var evs = w.globals.events[name$$1]; - var l = evs.length; - - for (var i = 0; i < l; i++) { - evs[i].apply(null, args); - } - } - }, { - key: "create", - value: function create(ser, opts) { - var w = this.w; - this.initModules(); - var gl = this.w.globals; - gl.noData = false; - gl.animationEnded = false; - this.responsive.checkResponsiveConfig(opts); - - if (this.el === null) { - gl.animationEnded = true; - return null; - } - - this.core.setupElements(); - - if (gl.svgWidth === 0) { - // if the element is hidden, skip drawing - gl.animationEnded = true; - return null; - } - - var combo = CoreUtils.checkComboSeries(ser); - gl.comboCharts = combo.comboCharts; - gl.comboChartsHasBars = combo.comboChartsHasBars; - - if (ser.length === 0 || ser.length === 1 && ser[0].data && ser[0].data.length === 0) { - this.series.handleNoData(); - } - - this.setupEventHandlers(); // Handle the data inputted by user and set some of the global variables (for eg, if data is datetime / numeric / category). Don't calculate the range / min / max at this time - - this.core.parseData(ser); // this is a good time to set theme colors first - - this.theme.init(); // as markers accepts array, we need to setup global markers for easier access - - var markers = new Markers(this); - markers.setGlobalMarkerSize(); // labelFormatters should be called before dimensions as in dimensions we need text labels width - - this.formatters.setLabelFormatters(); - this.titleSubtitle.draw(); // legend is calculated here before coreCalculations because it affects the plottable area - - this.legend.init(); // check whether in multiple series, all series share the same X - - this.series.hasAllSeriesEqualX(); // coreCalculations will give the min/max range and yaxis/axis values. It should be called here to set series variable from config to globals - - if (gl.axisCharts) { - this.core.coreCalculations(); - - if (w.config.xaxis.type !== 'category') { - // as we have minX and maxX values, determine the default DateTimeFormat for time series - this.formatters.setLabelFormatters(); - } - } // we need to generate yaxis for heatmap separately as we are not showing numerics there, but seriesNames. There are some tweaks which are required for heatmap to align labels correctly which are done in below function - // Also we need to do this before calcuting Dimentions plotCoords() method of Dimensions - - - this.formatters.heatmapLabelFormatters(); // We got plottable area here, next task would be to calculate axis areas - - this.dimensions.plotCoords(); - var xyRatios = this.core.xySettings(); - this.grid.createGridMask(); - var elGraph = this.core.plotChartType(ser, xyRatios); // after all the drawing calculations, shift the graphical area (actual charts/bars) excluding legends - - this.core.shiftGraphPosition(); - var dim = { - plot: { - left: w.globals.translateX, - top: w.globals.translateY, - width: w.globals.gridWidth, - height: w.globals.gridHeight - } - }; - return { - elGraph: elGraph, - xyRatios: xyRatios, - elInner: w.globals.dom.elGraphical, - dimensions: dim - }; - } - }, { - key: "mount", - value: function mount() { - var graphData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var me = this; - var w = me.w; - return new Promise$1(function (resolve, reject) { - // no data to display - if (me.el === null) { - return reject(new Error('Not enough data to display or target element not found')); - } else if (graphData === null || w.globals.allSeriesCollapsed) { - me.series.handleNoData(); - } - - me.annotations = new Annotations(me); - me.core.drawAxis(w.config.chart.type, graphData.xyRatios); - me.grid = new Grid(me); - - if (w.config.grid.position === 'back') { - me.grid.drawGrid(); - } - - if (w.config.annotations.position === 'back') { - me.annotations.drawAnnotations(); - } - - if (graphData.elGraph instanceof Array) { - for (var g = 0; g < graphData.elGraph.length; g++) { - w.globals.dom.elGraphical.add(graphData.elGraph[g]); - } - } else { - w.globals.dom.elGraphical.add(graphData.elGraph); - } - - if (w.config.grid.position === 'front') { - me.grid.drawGrid(); - } - - if (w.config.xaxis.crosshairs.position === 'front') { - me.crosshairs.drawXCrosshairs(); - } - - if (w.config.yaxis[0].crosshairs.position === 'front') { - me.crosshairs.drawYCrosshairs(); - } - - if (w.config.annotations.position === 'front') { - me.annotations.drawAnnotations(); - } - - if (!w.globals.noData) { - // draw tooltips at the end - if (w.config.tooltip.enabled && !w.globals.noData) { - me.w.globals.tooltip.drawTooltip(graphData.xyRatios); - } - - if (w.globals.axisCharts && w.globals.isXNumeric) { - if (w.config.chart.zoom.enabled || w.config.chart.selection && w.config.chart.selection.enabled || w.config.chart.pan && w.config.chart.pan.enabled) { - me.zoomPanSelection.init({ - xyRatios: graphData.xyRatios - }); - } - } else { - var tools = w.config.chart.toolbar.tools; - tools.zoom = false; - tools.zoomin = false; - tools.zoomout = false; - tools.selection = false; - tools.pan = false; - tools.reset = false; - } - - if (w.config.chart.toolbar.show && !w.globals.allSeriesCollapsed) { - me.toolbar.createToolbar(); - } - } - - if (w.globals.memory.methodsToExec.length > 0) { - w.globals.memory.methodsToExec.forEach(function (fn) { - fn.method(fn.params, false, fn.context); - }); - } - - resolve(me); - }); - } - }, { - key: "clearPreviousPaths", - value: function clearPreviousPaths() { - var w = this.w; - w.globals.previousPaths = []; - w.globals.allSeriesCollapsed = false; - w.globals.collapsedSeries = []; - w.globals.collapsedSeriesIndices = []; - } - /** - * Allows users to update Options after the chart has rendered. - * - * @param {object} options - A new config object can be passed which will be merged with the existing config object - * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there - * @param {boolean} animate - should animate or not on updating Options - */ - - }, { - key: "updateOptions", - value: function updateOptions(options$$1) { - var redraw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var animate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var overwriteInitialConfig = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; - var w = this.w; - - if (options$$1.series) { - if (options$$1.series[0].data) { - options$$1.series = options$$1.series.map(function (s, i) { - return _objectSpread({}, w.config.series[i], { - name: s.name ? s.name : w.config.series[i] && w.config.series[i].name, - type: s.type ? s.type : w.config.series[i] && w.config.series[i].type, - data: s.data ? s.data : w.config.series[i] && w.config.series[i].data - }); - }); - } // user updated the series via updateOptions() function. - // Hence, we need to reset axis min/max to avoid zooming issues - - - this.revertDefaultAxisMinMax(); - } // user has set x-axis min/max externally - hence we need to forcefully set the xaxis min/max - - - if (options$$1.xaxis) { - if (options$$1.xaxis.min || options$$1.xaxis.max) { - this.forceXAxisUpdate(options$$1); - } - /* fixes apexcharts.js#369 and react-apexcharts#46 */ - - - if (options$$1.xaxis.categories && options$$1.xaxis.categories.length && w.config.xaxis.convertedCatToNumeric) { - options$$1 = Defaults.convertCatToNumeric(options$$1); - } - } - - if (w.globals.collapsedSeriesIndices.length > 0) { - this.clearPreviousPaths(); - } - /* update theme mode#459 */ - - - if (options$$1.theme) { - options$$1 = this.theme.updateThemeOptions(options$$1); - } - - return this._updateOptions(options$$1, redraw, animate, overwriteInitialConfig); - } - /** - * private method to update Options. - * - * @param {object} options - A new config object can be passed which will be merged with the existing config object - * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there - * @param {boolean} animate - should animate or not on updating Options - * @param {boolean} overwriteInitialConfig - should update the initial config or not - */ - - }, { - key: "_updateOptions", - value: function _updateOptions(options$$1) { - var redraw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var animate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var overwriteInitialConfig = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - var charts = this.getSyncedCharts(); - charts.forEach(function (ch) { - var w = ch.w; - w.globals.shouldAnimate = animate; - - if (!redraw) { - w.globals.resized = true; - w.globals.dataChanged = true; - - if (animate) { - ch.series.getPreviousPaths(); - } - } - - if (options$$1 && _typeof(options$$1) === 'object') { - ch.config = new Config(options$$1); - options$$1 = CoreUtils.extendArrayProps(ch.config, options$$1); - w.config = Utils.extend(w.config, options$$1); - - if (overwriteInitialConfig) { - // we need to forget the lastXAxis and lastYAxis is user forcefully overwriteInitialConfig. If we do not do this, and next time when user zooms the chart after setting yaxis.min/max or xaxis.min/max - the stored lastXAxis will never allow the chart to use the updated min/max by user. - w.globals.lastXAxis = []; - w.globals.lastYAxis = []; // After forgetting lastAxes, we need to restore the new config in initialConfig/initialSeries - - w.globals.initialConfig = Utils.extend({}, w.config); - w.globals.initialSeries = JSON.parse(JSON.stringify(w.config.series)); - } - } - - return ch.update(options$$1); - }); - } - /** - * Allows users to update Series after the chart has rendered. - * - * @param {array} series - New series which will override the existing - */ - - }, { - key: "updateSeries", - value: function updateSeries() { - var newSeries = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - this.revertDefaultAxisMinMax(); - return this._updateSeries(newSeries, animate, overwriteInitialSeries); - } - /** - * Allows users to append a new series after the chart has rendered. - * - * @param {array} newSerie - New serie which will be appended to the existing series - */ - - }, { - key: "appendSeries", - value: function appendSeries(newSerie) { - var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var newSeries = this.w.config.series.slice(); - newSeries.push(newSerie); - this.revertDefaultAxisMinMax(); - return this._updateSeries(newSeries, animate, overwriteInitialSeries); - } - /** - * Private method to update Series. - * - * @param {array} series - New series which will override the existing - */ - - }, { - key: "_updateSeries", - value: function _updateSeries(newSeries, animate) { - var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var w = this.w; - this.w.globals.shouldAnimate = animate; - w.globals.dataChanged = true; // if user has collapsed some series with legend, we need to clear those - - if (w.globals.allSeriesCollapsed) { - w.globals.allSeriesCollapsed = false; - } - - if (animate) { - this.series.getPreviousPaths(); - } - - var existingSeries; // axis charts - - if (w.globals.axisCharts) { - existingSeries = newSeries.map(function (s, i) { - return _objectSpread({}, w.config.series[i], { - name: s.name ? s.name : w.config.series[i] && w.config.series[i].name, - type: s.type ? s.type : w.config.series[i] && w.config.series[i].type, - data: s.data ? s.data : w.config.series[i] && w.config.series[i].data - }); - }); - - if (existingSeries.length === 0) { - existingSeries = [{ - data: [] - }]; - } - - w.config.series = existingSeries; - } else { - // non-axis chart (pie/radialbar) - w.config.series = newSeries.slice(); - } - - if (overwriteInitialSeries) { - w.globals.initialConfig.series = JSON.parse(JSON.stringify(w.config.series)); - w.globals.initialSeries = JSON.parse(JSON.stringify(w.config.series)); - } - - return this.update(); - } - /** - * Get all charts in the same "group" (including the instance which is called upon) to sync them when user zooms in/out or pan. - */ - - }, { - key: "getSyncedCharts", - value: function getSyncedCharts() { - var chartGroups = this.getGroupedCharts(); - var allCharts = [this]; - - if (chartGroups.length) { - allCharts = []; - chartGroups.forEach(function (ch) { - allCharts.push(ch); - }); - } - - return allCharts; - } - /** - * Get charts in the same "group" (excluding the instance which is called upon) to perform operations on the other charts of the same group (eg., tooltip hovering) - */ - - }, { - key: "getGroupedCharts", - value: function getGroupedCharts() { - var _this2 = this; - - return Apex._chartInstances.filter(function (ch) { - if (ch.group) { - return true; - } - }).map(function (ch) { - return _this2.w.config.chart.group === ch.group ? ch.chart : _this2; - }); - } - /** - * Allows users to append Data to series. - * - * @param {array} newData - New data in the same format as series - */ - - }, { - key: "appendData", - value: function appendData(newData) { - var overwriteInitialSeries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var me = this; - me.w.globals.dataChanged = true; - me.series.getPreviousPaths(); - var newSeries = me.w.config.series.slice(); - - for (var i = 0; i < newSeries.length; i++) { - if (typeof newData[i] !== 'undefined') { - for (var j = 0; j < newData[i].data.length; j++) { - newSeries[i].data.push(newData[i].data[j]); - } - } - } - - me.w.config.series = newSeries; - - if (overwriteInitialSeries) { - me.w.globals.initialSeries = JSON.parse(JSON.stringify(me.w.config.series)); - } - - return this.update(); - } - }, { - key: "update", - value: function update(options$$1) { - var _this3 = this; - - return new Promise$1(function (resolve, reject) { - _this3.clear(); - - var graphData = _this3.create(_this3.w.config.series, options$$1); - - if (!graphData) return resolve(_this3); - - _this3.mount(graphData).then(function () { - if (typeof _this3.w.config.chart.events.updated === 'function') { - _this3.w.config.chart.events.updated(_this3, _this3.w); - } - - _this3.fireEvent('updated', [_this3, _this3.w]); - - _this3.w.globals.isDirty = true; - resolve(_this3); - }).catch(function (e) { - reject(e); - }); - }); - } - }, { - key: "forceXAxisUpdate", - value: function forceXAxisUpdate(options$$1) { - var w = this.w; - - if (typeof options$$1.xaxis.min !== 'undefined') { - w.config.xaxis.min = options$$1.xaxis.min; - w.globals.lastXAxis.min = options$$1.xaxis.min; - } - - if (typeof options$$1.xaxis.max !== 'undefined') { - w.config.xaxis.max = options$$1.xaxis.max; - w.globals.lastXAxis.max = options$$1.xaxis.max; - } - } - /** - * This function reverts the yaxis and xaxis min/max values to what it was when the chart was defined. - * This function fixes an important bug where a user might load a new series after zooming in/out of previous series which resulted in wrong min/max - * Also, this should never be called internally on zoom/pan - the reset should only happen when user calls the updateSeries() function externally - */ - - }, { - key: "revertDefaultAxisMinMax", - value: function revertDefaultAxisMinMax() { - var w = this.w; - w.config.xaxis.min = w.globals.lastXAxis.min; - w.config.xaxis.max = w.globals.lastXAxis.max; - w.config.yaxis.map(function (yaxe, index) { - if (w.globals.zoomed) { - // if user has zoomed, and this function is called - // then we need to get the lastAxis min and max - if (typeof w.globals.lastYAxis[index] !== 'undefined') { - yaxe.min = w.globals.lastYAxis[index].min; - yaxe.max = w.globals.lastYAxis[index].max; - } - } - }); - } - }, { - key: "clear", - value: function clear() { - if (this.zoomPanSelection) { - this.zoomPanSelection.destroy(); - } - - if (this.toolbar) { - this.toolbar.destroy(); - } - - this.animations = null; - this.annotations = null; - this.core = null; - this.grid = null; - this.series = null; - this.responsive = null; - this.theme = null; - this.formatters = null; - this.titleSubtitle = null; - this.legend = null; - this.dimensions = null; - this.options = null; - this.crosshairs = null; - this.zoomPanSelection = null; - this.toolbar = null; - this.w.globals.tooltip = null; - this.clearDomElements(); - } - }, { - key: "killSVG", - value: function killSVG(draw) { - return new Promise$1(function (resolve, reject) { - draw.each(function (i, children) { - this.removeClass('*'); - this.off(); - this.stop(); - }, true); - draw.ungroup(); - draw.clear(); - resolve('done'); - }); - } - }, { - key: "clearDomElements", - value: function clearDomElements() { - var domEls = this.w.globals.dom; - - if (this.el !== null) { - // remove all child elements - resetting the whole chart - while (this.el.firstChild) { - this.el.removeChild(this.el.firstChild); - } - } - - this.killSVG(domEls.Paper); - domEls.Paper.remove(); - domEls.elWrap = null; - domEls.elGraphical = null; - domEls.elLegendWrap = null; - domEls.baseEl = null; - domEls.elGridRect = null; - domEls.elGridRectMask = null; - domEls.elGridRectMarkerMask = null; - domEls.elDefs = null; - } - /** - * Destroy the chart instance by removing all elements which also clean up event listeners on those elements. - */ - - }, { - key: "destroy", - value: function destroy() { - this.clear(); // remove the chart's instance from the global Apex._chartInstances - - var chartID = this.w.config.chart.id; - - if (chartID) { - Apex._chartInstances.forEach(function (c, i) { - if (c.id === chartID) { - Apex._chartInstances.splice(i, 1); - } - }); - } - - window.removeEventListener('resize', this.windowResizeHandler); - window.removeResizeListener(this.el.parentNode, this.parentResizeCallback.bind(this)); - } - /** - * Allows the user to provide data attrs in the element and the chart will render automatically when this method is called by searching for the elements containing 'data-apexcharts' attribute - */ - - }, { - key: "toggleSeries", - value: function toggleSeries(seriesName) { - var targetElement = this.series.getSeriesByName(seriesName); - var seriesCnt = parseInt(targetElement.getAttribute('data:realIndex')); - var isHidden = targetElement.classList.contains('apexcharts-series-collapsed'); - this.legend.toggleDataSeries(seriesCnt, isHidden); - } - }, { - key: "resetToggleSeries", - value: function resetToggleSeries() { - this.legend.resetToggleDataSeries(); - } - }, { - key: "setupEventHandlers", - value: function setupEventHandlers() { - var w = this.w; - var me = this; - var clickableArea = w.globals.dom.baseEl.querySelector(w.globals.chartClass); - var eventList = ['mousedown', 'mousemove', 'touchstart', 'touchmove', 'mouseup', 'touchend']; - eventList.forEach(function (event) { - clickableArea.addEventListener(event, function (e) { - if (e.type === 'mousedown' && e.which === 1) ; else if (e.type === 'mouseup' && e.which === 1 || e.type === 'touchend') { - if (typeof w.config.chart.events.click === 'function') { - w.config.chart.events.click(e, me, w); - } - - me.fireEvent('click', [e, me, w]); - } - }, { - capture: false, - passive: true - }); - }); - eventList.forEach(function (event) { - document.addEventListener(event, function (e) { - w.globals.clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; - w.globals.clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY; - }); - }); - this.core.setupBrushHandler(); - } - }, { - key: "addXaxisAnnotation", - value: function addXaxisAnnotation(opts) { - var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.addXaxisAnnotationExternal(opts, pushToMemory, me); - } - }, { - key: "addYaxisAnnotation", - value: function addYaxisAnnotation(opts) { - var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.addYaxisAnnotationExternal(opts, pushToMemory, me); - } - }, { - key: "addPointAnnotation", - value: function addPointAnnotation(opts) { - var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.addPointAnnotationExternal(opts, pushToMemory, me); - } - }, { - key: "clearAnnotations", - value: function clearAnnotations() { - var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.clearAnnotations(me); - } // This method is never used internally and will be only called externally on the chart instance. - // Hence, we need to keep all these elements in memory when the chart gets updated and redraw again - - }, { - key: "addText", - value: function addText(options$$1) { - var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; - var me = this; - - if (context) { - me = context; - } - - me.annotations.addText(options$$1, pushToMemory, me); - } - }, { - key: "getChartArea", - value: function getChartArea() { - var el = this.w.globals.dom.baseEl.querySelector('.apexcharts-inner'); - return el; - } - }, { - key: "getSeriesTotalXRange", - value: function getSeriesTotalXRange(minX, maxX) { - return this.coreUtils.getSeriesTotalsXRange(minX, maxX); - } - }, { - key: "getHighestValueInSeries", - value: function getHighestValueInSeries() { - var seriesIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - var range = new Range$1(this.ctx); - var minYmaxY = range.getMinYMaxY(seriesIndex); - return minYmaxY.highestY; - } - }, { - key: "getLowestValueInSeries", - value: function getLowestValueInSeries() { - var seriesIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - var range = new Range$1(this.ctx); - var minYmaxY = range.getMinYMaxY(seriesIndex); - return minYmaxY.lowestY; - } - }, { - key: "getSeriesTotal", - value: function getSeriesTotal() { - return this.w.globals.seriesTotals; - } - }, { - key: "setLocale", - value: function setLocale(localeName) { - this.setCurrentLocaleValues(localeName); - } - }, { - key: "setCurrentLocaleValues", - value: function setCurrentLocaleValues(localeName) { - var locales = this.w.config.chart.locales; // check if user has specified locales in global Apex variable - // if yes - then extend those with local chart's locale - - if (window.Apex.chart && window.Apex.chart.locales && window.Apex.chart.locales.length > 0) { - locales = this.w.config.chart.locales.concat(window.Apex.chart.locales); - } // find the locale from the array of locales which user has set (either by chart.defaultLocale or by calling setLocale() method.) - - - var selectedLocale = locales.filter(function (c) { - return c.name === localeName; - })[0]; - - if (selectedLocale) { - // create a complete locale object by extending defaults so you don't get undefined errors. - var ret = Utils.extend(en, selectedLocale); // store these locale options in global var for ease access - - this.w.globals.locale = ret.options; - } else { - throw new Error('Wrong locale name provided. Please make sure you set the correct locale name in options'); - } - } - }, { - key: "dataURI", - value: function dataURI() { - var exp = new Exports(this.ctx); - return exp.dataURI(); - } - }, { - key: "paper", - value: function paper() { - return this.w.globals.dom.Paper; - } - }, { - key: "parentResizeCallback", - value: function parentResizeCallback() { - if (this.w.globals.animationEnded) { - this.windowResize(); - } - } - /** - * Handle window resize and re-draw the whole chart. - */ - - }, { - key: "windowResize", - value: function windowResize() { - var _this4 = this; - - clearTimeout(this.w.globals.resizeTimer); - this.w.globals.resizeTimer = window.setTimeout(function () { - _this4.w.globals.resized = true; - _this4.w.globals.dataChanged = false; // we need to redraw the whole chart on window resize (with a small delay). - - _this4.update(); - }, 150); - } - }], [{ - key: "initOnLoad", - value: function initOnLoad() { - var els = document.querySelectorAll('[data-apexcharts]'); - - for (var i = 0; i < els.length; i++) { - var el = els[i]; - var options$$1 = JSON.parse(els[i].getAttribute('data-options')); - var apexChart = new ApexCharts(el, options$$1); - apexChart.render(); - } - } - /** - * This static method allows users to call chart methods without necessarily from the - * instance of the chart in case user has assigned chartID to the targetted chart. - * The chartID is used for mapping the instance stored in Apex._chartInstances global variable - * - * This is helpful in cases when you don't have reference of the chart instance - * easily and need to call the method from anywhere. - * For eg, in React/Vue applications when you have many parent/child components, - * and need easy reference to other charts for performing dynamic operations - * - * @param {string} chartID - The unique identifier which will be used to call methods - * on that chart instance - * @param {function} fn - The method name to call - * @param {object} opts - The parameters which are accepted in the original method will be passed here in the same order. - */ - - }, { - key: "exec", - value: function exec(chartID, fn) { - var chart = this.getChartByID(chartID); - if (!chart) return; - - for (var _len = arguments.length, opts = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - opts[_key - 2] = arguments[_key]; - } - - switch (fn) { - case 'updateOptions': - { - return chart.updateOptions.apply(chart, opts); - } - - case 'updateSeries': - { - return chart.updateSeries.apply(chart, opts); - } - - case 'appendData': - { - return chart.appendData.apply(chart, opts); - } - - case 'appendSeries': - { - return chart.appendSeries.apply(chart, opts); - } - - case 'toggleSeries': - { - return chart.toggleSeries.apply(chart, opts); - } - - case 'dataURI': - { - return chart.dataURI.apply(chart, opts); - } - - case 'addXaxisAnnotation': - { - return chart.addXaxisAnnotation.apply(chart, opts); - } - - case 'addYaxisAnnotation': - { - return chart.addYaxisAnnotation.apply(chart, opts); - } - - case 'addPointAnnotation': - { - return chart.addPointAnnotation.apply(chart, opts); - } - - case 'addText': - { - return chart.addText.apply(chart, opts); - } - - case 'clearAnnotations': - { - return chart.clearAnnotations.apply(chart, opts); - } - - case 'paper': - { - return chart.paper.apply(chart, opts); - } - - case 'destroy': - { - return chart.destroy(); - } - } - } - }, { - key: "merge", - value: function merge(target, source) { - return Utils.extend(target, source); - } - }, { - key: "getChartByID", - value: function getChartByID(chartID) { - var c = Apex._chartInstances.filter(function (ch) { - return ch.id === chartID; - })[0]; - - return c.chart; - } - }]); - - return ApexCharts; - }(); - - return ApexCharts$1; - -})); diff --git a/static/libs/apexcharts/apexcharts.min.js b/static/libs/apexcharts/apexcharts.min.js deleted file mode 100644 index 7b07a5a6f..000000000 --- a/static/libs/apexcharts/apexcharts.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * ApexCharts v3.6.12 - * (c) 2018-2019 Juned Chhipa - * Released under the MIT License. - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).ApexCharts=e()}(this,function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){for(var i=0;i>16,r=i>>8&255,o=255&i;return"#"+(16777216+65536*(Math.round((s-n)*a)+n)+256*(Math.round((s-r)*a)+r)+(Math.round((s-o)*a)+o)).toString(16).slice(1)}},{key:"shadeColor",value:function(t,e){return e.length>7?this.shadeRGBColor(t,e):this.shadeHexColor(t,e)}}],[{key:"bind",value:function(t,e){return function(){return t.apply(e,arguments)}}},{key:"isObject",value:function(e){return e&&"object"===t(e)&&!Array.isArray(e)&&null!=e}},{key:"listToArray",value:function(t){var e,i=[];for(e=0;e1?(e.shift(),this.addProps(s,e,i)):t[e[0]]=i,t}},{key:"clone",value:function(e){if("[object Array]"===Object.prototype.toString.call(e)){for(var i=[],s=0;s0&&void 0!==arguments[0]?arguments[0]:"#999999",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.6;"#"!==t.substring(0,1)&&(t="#999999");var i=t.replace("#","");i=i.match(new RegExp("(.{"+i.length/3+"})","g"));for(var s=0;s1&&void 0!==arguments[1]?arguments[1]:"x",i=t.toString().slice();return i=i.replace(/[` ~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi,e)}},{key:"negToZero",value:function(t){return t<0?0:t}},{key:"moveIndexInArray",value:function(t,e,i){if(i>=t.length)for(var s=i-t.length+1;s--;)t.push(void 0);return t.splice(i,0,t.splice(e,1)[0]),t}},{key:"extractNumber",value:function(t){return parseFloat(t.replace(/[^\d\.]*/g,""))}},{key:"randomString",value:function(t){for(var e="",i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",s=0;s-1}},{key:"isIE11",value:function(){if(-1!==window.navigator.userAgent.indexOf("MSIE")||window.navigator.appVersion.indexOf("Trident/")>-1)return!0}},{key:"isIE",value:function(){var t=window.navigator.userAgent,e=t.indexOf("MSIE ");if(e>0)return parseInt(t.substring(e+5,t.indexOf(".",e)),10);if(t.indexOf("Trident/")>0){var i=t.indexOf("rv:");return parseInt(t.substring(i+3,t.indexOf(".",i)),10)}var s=t.indexOf("Edge/");return s>0&&parseInt(t.substring(s+5,t.indexOf(".",s)),10)}}]),i}(),u=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"getDefaultFilter",value:function(t,e){var i=this.w;t.unfilter(!0),(new window.SVG.Filter).size("120%","180%","-5%","-40%"),"none"!==i.config.states.normal.filter?this.applyFilter(t,e,i.config.states.normal.filter.type,i.config.states.normal.filter.value):i.config.chart.dropShadow.enabled&&this.dropShadow(t,i.config.chart.dropShadow,e)}},{key:"addNormalFilter",value:function(t,e){var i=this.w;i.config.chart.dropShadow.enabled&&this.dropShadow(t,i.config.chart.dropShadow,e)}},{key:"addLightenFilter",value:function(t,e,i){var s=this,a=this.w,n=i.intensity;if(!d.isFirefox()){t.unfilter(!0);var r=new window.SVG.Filter;r.size("120%","180%","-5%","-40%"),t.filter(function(t){var i=a.config.chart.dropShadow;(r=i.enabled?s.addShadow(t,e,i):t).componentTransfer({rgb:{type:"linear",slope:1.5,intercept:n}})}),t.filterer.node.setAttribute("filterUnits","userSpaceOnUse")}}},{key:"addDarkenFilter",value:function(t,e,i){var s=this,a=this.w,n=i.intensity;if(!d.isFirefox()){t.unfilter(!0);var r=new window.SVG.Filter;r.size("120%","180%","-5%","-40%"),t.filter(function(t){var i=a.config.chart.dropShadow;(r=i.enabled?s.addShadow(t,e,i):t).componentTransfer({rgb:{type:"linear",slope:n}})}),t.filterer.node.setAttribute("filterUnits","userSpaceOnUse")}}},{key:"applyFilter",value:function(t,e,i){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.5;switch(i){case"none":this.addNormalFilter(t,e);break;case"lighten":this.addLightenFilter(t,e,{intensity:s});break;case"darken":this.addDarkenFilter(t,e,{intensity:s})}}},{key:"addShadow",value:function(t,e,i){var s=i.blur,a=i.top,n=i.left,r=i.color,o=i.opacity,l=t.flood(Array.isArray(r)?r[e]:r,o).composite(t.sourceAlpha,"in").offset(n,a).gaussianBlur(s).merge(t.source);return t.blend(t.source,l)}},{key:"dropShadow",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=e.top,a=e.left,n=e.blur,r=e.color,o=e.opacity,l=e.noUserSpaceOnUse;return t.unfilter(!0),r=Array.isArray(r)?r[i]:r,(new window.SVG.Filter).size("120%","180%","-5%","-40%"),t.filter(function(t){var e=null;e=d.isSafari()||d.isFirefox()||d.isIE()?t.flood(r,o).composite(t.sourceAlpha,"in").offset(a,s).gaussianBlur(n):t.flood(r,o).composite(t.sourceAlpha,"in").offset(a,s).gaussianBlur(n).merge(t.source),t.blend(t.source,e)}),l||t.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),t}},{key:"setSelectionFilter",value:function(t,e,i){var s=this.w;if(void 0!==s.globals.selectedDataPoints[e]&&s.globals.selectedDataPoints[e].indexOf(i)>-1){t.node.setAttribute("selected",!0);var a=s.config.states.active.filter;"none"!==a&&this.applyFilter(t,e,a.type,a.value)}}}]),t}(),g=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.setEasingFunctions()}return s(t,[{key:"setEasingFunctions",value:function(){var t;switch(this.w.config.chart.animations.easing){case"linear":t="-";break;case"easein":t="<";break;case"easeout":t=">";break;case"easeinout":t="<>";break;case"swing":t=function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1};break;case"bounce":t=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375};break;case"elastic":t=function(t){return t===!!t?t:Math.pow(2,-10*t)*Math.sin((t-.075)*(2*Math.PI)/.3)+1};break;default:t="<>"}this.w.globals.easing=t}},{key:"animateLine",value:function(t,e,i,s){t.attr(e).animate(s).attr(i)}},{key:"animateCircleRadius",value:function(t,e,i,s,a){e||(e=0),t.attr({r:e}).animate(s,a).attr({r:i})}},{key:"animateCircle",value:function(t,e,i,s,a){t.attr({r:e.r,cx:e.cx,cy:e.cy}).animate(s,a).attr({r:i.r,cx:i.cx,cy:i.cy})}},{key:"animateRect",value:function(t,e,i,s,a){t.attr(e).animate(s).attr(i).afterAll(function(){a()})}},{key:"animatePathsGradually",value:function(t){var e=t.el,i=t.j,s=t.pathFrom,a=t.pathTo,n=t.speed,r=t.delay,o=t.strokeWidth,l=this.w,h=0;l.config.chart.animations.animateGradually.enabled&&(h=l.config.chart.animations.animateGradually.delay),l.config.chart.animations.dynamicAnimation.enabled&&l.globals.dataChanged&&(h=0),this.morphSVG(e,i,s,a,n,o,r*h)}},{key:"showDelayedElements",value:function(){this.w.globals.delayedElements.forEach(function(t){t.el.classList.remove("hidden")})}},{key:"morphSVG",value:function(t,e,i,s,a,n,r){var o=this,l=this.w;i||(i=t.attr("pathFrom")),s||(s=t.attr("pathTo")),(!i||i.indexOf("undefined")>-1||i.indexOf("NaN")>-1)&&(i="M 0 ".concat(l.globals.gridHeight),a=1),(s.indexOf("undefined")>-1||s.indexOf("NaN")>-1)&&(s="M 0 ".concat(l.globals.gridHeight),a=1),l.globals.shouldAnimate||(a=1),t.plot(i).animate(1,l.globals.easing,r).plot(i).animate(a,l.globals.easing,r).plot(s).afterAll(function(){d.isNumber(e)?e===l.globals.series[l.globals.maxValsInArrayIndex].length-2&&l.globals.shouldAnimate&&(l.globals.animationEnded=!0):l.globals.shouldAnimate&&(l.globals.animationEnded=!0,"function"==typeof l.config.chart.events.animationEnd&&l.config.chart.events.animationEnd(o.ctx,l)),o.showDelayedElements()})}}]),t}(),f=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"drawLine",value:function(t,e,i,s){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"#a8a8a8",n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null;return this.w.globals.dom.Paper.line().attr({x1:t,y1:e,x2:i,y2:s,stroke:a,"stroke-dasharray":n,"stroke-width":r})}},{key:"drawRect",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"#fefefe",r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:1,o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,l=arguments.length>8&&void 0!==arguments[8]?arguments[8]:null,h=arguments.length>9&&void 0!==arguments[9]?arguments[9]:0,c=this.w.globals.dom.Paper.rect();return c.attr({x:t,y:e,width:i>0?i:0,height:s>0?s:0,rx:a,ry:a,fill:n,opacity:r,"stroke-width":null!==o?o:0,stroke:null!==l?l:"none","stroke-dasharray":h}),c}},{key:"drawPolygon",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#e1e1e1",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none";return this.w.globals.dom.Paper.polygon(t).attr({fill:i,stroke:e})}},{key:"drawCircle",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.w.globals.dom.Paper.circle(2*t);return null!==e&&i.attr(e),i}},{key:"drawPath",value:function(t){var e=t.d,i=void 0===e?"":e,s=t.stroke,a=void 0===s?"#a8a8a8":s,n=t.strokeWidth,r=void 0===n?1:n,o=t.fill,l=t.fillOpacity,h=void 0===l?1:l,c=t.strokeOpacity,d=void 0===c?1:c,u=t.classes,g=t.strokeLinecap,f=void 0===g?null:g,p=t.strokeDashArray,x=void 0===p?0:p,b=this.w;return null===f&&(f=b.config.stroke.lineCap),(i.indexOf("undefined")>-1||i.indexOf("NaN")>-1)&&(i="M 0 ".concat(b.globals.gridHeight)),b.globals.dom.Paper.path(i).attr({fill:o,"fill-opacity":h,stroke:a,"stroke-opacity":d,"stroke-linecap":f,"stroke-width":r,"stroke-dasharray":x,class:u})}},{key:"group",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w.globals.dom.Paper.group();return null!==t&&e.attr(t),e}},{key:"move",value:function(t,e){var i=["M",t,e].join(" ");return i}},{key:"line",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=null;return null===i?s=["L",t,e].join(" "):"H"===i?s=["H",t].join(" "):"V"===i&&(s=["V",e].join(" ")),s}},{key:"curve",value:function(t,e,i,s,a,n){var r=["C",t,e,i,s,a,n].join(" ");return r}},{key:"quadraticCurve",value:function(t,e,i,s){return["Q",t,e,i,s].join(" ")}},{key:"arc",value:function(t,e,i,s,a,n,r){var o="A";arguments.length>7&&void 0!==arguments[7]&&arguments[7]&&(o="a");var l=[o,t,e,i,s,a,n,r].join(" ");return l}},{key:"renderPaths",value:function(t){var e,i=t.i,s=t.j,a=t.realIndex,r=t.pathFrom,o=t.pathTo,l=t.stroke,h=t.strokeWidth,c=t.strokeLinecap,d=t.fill,f=t.animationDelay,p=t.initialSpeed,x=t.dataChangeSpeed,b=t.className,m=t.id,v=t.shouldClipToGrid,y=void 0===v||v,w=t.bindEventsOnPaths,k=void 0===w||w,A=t.drawShadow,S=void 0===A||A,C=this.w,L=new u(this.ctx),z=new g(this.ctx),P=this.w.config.chart.animations.enabled,M=P&&this.w.config.chart.animations.dynamicAnimation.enabled,E=!!(P&&!C.globals.resized||M&&C.globals.dataChanged&&C.globals.shouldAnimate);E?e=r:(e=o,this.w.globals.animationEnded=!0);var T=C.config.stroke.dashArray,X=0;X=Array.isArray(T)?T[a]:C.config.stroke.dashArray;var I=this.drawPath({d:e,stroke:l,strokeWidth:h,fill:d,fillOpacity:1,classes:b,strokeLinecap:c,strokeDashArray:X});if(I.attr("id","".concat(m,"-").concat(i)),I.attr("index",a),y&&I.attr({"clip-path":"url(#gridRectMask".concat(C.globals.cuid,")")}),"none"!==C.config.states.normal.filter.type)L.getDefaultFilter(I,a);else if(C.config.chart.dropShadow.enabled&&S&&(!C.config.chart.dropShadow.enabledSeries||C.config.chart.dropShadow.enabledSeries&&-1!==C.config.chart.dropShadow.enabledSeries.indexOf(a))){var Y=C.config.chart.dropShadow;L.dropShadow(I,Y,a)}k&&(I.node.addEventListener("mouseenter",this.pathMouseEnter.bind(this,I)),I.node.addEventListener("mouseleave",this.pathMouseLeave.bind(this,I)),I.node.addEventListener("mousedown",this.pathMouseDown.bind(this,I))),I.attr({pathTo:o,pathFrom:r});var F={el:I,j:s,pathFrom:r,pathTo:o,strokeWidth:h};return!P||C.globals.resized||C.globals.dataChanged?!C.globals.resized&&C.globals.dataChanged||z.showDelayedElements():z.animatePathsGradually(n({},F,{speed:p,delay:f})),C.globals.dataChanged&&M&&E&&z.animatePathsGradually(n({},F,{speed:x})),I}},{key:"drawPattern",value:function(t,e,i){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"#a8a8a8",a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;return this.w.globals.dom.Paper.pattern(e,i,function(n){"horizontalLines"===t?n.line(0,0,i,0).stroke({color:s,width:a+1}):"verticalLines"===t?n.line(0,0,0,e).stroke({color:s,width:a+1}):"slantedLines"===t?n.line(0,0,e,i).stroke({color:s,width:a}):"squares"===t?n.rect(e,i).fill("none").stroke({color:s,width:a}):"circles"===t&&n.circle(e).fill("none").stroke({color:s,width:a})})}},{key:"drawGradient",value:function(t,e,i,s,a){var n,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,h=arguments.length>8&&void 0!==arguments[8]?arguments[8]:0,c=this.w;e=d.hexToRgba(e,s),i=d.hexToRgba(i,a);var u=0,g=1,f=1,p=null;null!==o&&(u=void 0!==o[0]?o[0]/100:0,g=void 0!==o[1]?o[1]/100:1,f=void 0!==o[2]?o[2]/100:1,p=void 0!==o[3]?o[3]/100:null);var x=!("donut"!==c.config.chart.type&&"pie"!==c.config.chart.type&&"bubble"!==c.config.chart.type);if(n=null===l||0===l.length?c.globals.dom.Paper.gradient(x?"radial":"linear",function(t){t.at(u,e,s),t.at(g,i,a),t.at(f,i,a),null!==p&&t.at(p,e,s)}):c.globals.dom.Paper.gradient(x?"radial":"linear",function(t){(Array.isArray(l[h])?l[h]:l).forEach(function(e){t.at(e.offset/100,e.color,e.opacity)})}),x){var b=c.globals.gridWidth/2,m=c.globals.gridHeight/2;"bubble"!==c.config.chart.type?n.attr({gradientUnits:"userSpaceOnUse",cx:b,cy:m,r:r}):n.attr({cx:.5,cy:.5,r:.8,fx:.2,fy:.2})}else"vertical"===t?n.from(0,0).to(0,1):"diagonal"===t?n.from(0,0).to(1,1):"horizontal"===t?n.from(0,1).to(1,1):"diagonal2"===t&&n.from(0,1).to(2,2);return n}},{key:"drawText",value:function(t){var e,i=this.w,s=t.x,a=t.y,n=t.text,r=t.textAnchor,o=t.fontSize,l=t.fontFamily,h=t.foreColor,c=t.opacity;return void 0===n&&(n=""),r||(r="start"),h||(h=i.config.chart.foreColor),l=l||i.config.chart.fontFamily,(e=Array.isArray(n)?i.globals.dom.Paper.text(function(t){for(var e=0;e-1){var o=i.globals.selectedDataPoints[a].indexOf(n);i.globals.selectedDataPoints[a].splice(o,1)}}else{if(!i.config.states.active.allowMultipleDataPointsSelection&&i.globals.selectedDataPoints.length>0){i.globals.selectedDataPoints=[];var l=i.globals.dom.Paper.select(".apexcharts-series path").members,h=i.globals.dom.Paper.select(".apexcharts-series circle, .apexcharts-series rect").members;l.forEach(function(t){t.node.setAttribute("selected","false"),s.getDefaultFilter(t,a)}),h.forEach(function(t){t.node.setAttribute("selected","false"),s.getDefaultFilter(t,a)})}t.node.setAttribute("selected","true"),r="true",void 0===i.globals.selectedDataPoints[a]&&(i.globals.selectedDataPoints[a]=[]),i.globals.selectedDataPoints[a].push(n)}if("true"===r){var c=i.config.states.active.filter;"none"!==c&&s.applyFilter(t,a,c.type,c.value)}else"none"!==i.config.states.active.filter.type&&s.getDefaultFilter(t,a);"function"==typeof i.config.chart.events.dataPointSelection&&i.config.chart.events.dataPointSelection(e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:a,dataPointIndex:n,w:i}),this.ctx.fireEvent("dataPointSelection",[e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:a,dataPointIndex:n,w:i}])}},{key:"rotateAroundCenter",value:function(t){var e=t.getBBox();return{x:e.x+e.width/2,y:e.y+e.height/2}}},{key:"getTextRects",value:function(t,e,i,s){var a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],n=this.w,r=this.drawText({x:-200,y:-200,text:t,textAnchor:"start",fontSize:e,fontFamily:i,foreColor:"#fff",opacity:0});s&&r.attr("transform",s),n.globals.dom.Paper.add(r);var o=r.bbox();return a||(o=r.node.getBoundingClientRect()),r.remove(),{width:o.width,height:o.height}}},{key:"placeTextWithEllipsis",value:function(t,e,i){if(t.textContent=e,e.length>0&&t.getSubStringLength(0,e.length)>=i){for(var s=e.length-3;s>0;s-=3)if(t.getSubStringLength(0,s)<=i)return void(t.textContent=e.substring(0,s)+"...");t.textContent="..."}}}],[{key:"setAttrs",value:function(t,e){for(var i in e)e.hasOwnProperty(i)&&t.setAttribute(i,e[i])}}]),t}();var p={name:"en",options:{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"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],toolbar:{exportToSVG:"Download SVG",exportToPNG:"Download PNG",menu:"Menu",selection:"Selection",selectionZoom:"Selection Zoom",zoomIn:"Zoom In",zoomOut:"Zoom Out",pan:"Panning",reset:"Reset Zoom"}}},x=function(){function t(){e(this,t),this.yAxis={show:!0,showAlways:!1,seriesName:void 0,opposite:!1,reversed:!1,logarithmic:!1,tickAmount:void 0,forceNiceScale:!1,max:void 0,min:void 0,floating:!1,decimalsInFloat:void 0,labels:{show:!0,minWidth:0,maxWidth:160,offsetX:0,offsetY:0,align:void 0,rotate:0,padding:20,style:{colors:[],fontSize:"11px",fontFamily:void 0,cssClass:""},formatter:void 0},axisBorder:{show:!1,color:"#78909C",offsetX:0,offsetY:0},axisTicks:{show:!1,color:"#78909C",width:6,offsetX:0,offsetY:0},title:{text:void 0,rotate:90,offsetY:0,offsetX:0,style:{color:void 0,fontSize:"11px",fontFamily:void 0,cssClass:""}},tooltip:{enabled:!1,offsetX:0},crosshairs:{show:!0,position:"front",stroke:{color:"#b6b6b6",width:1,dashArray:0}}},this.xAxisAnnotation={x:0,x2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",opacity:.3,offsetX:0,offsetY:0,label:{borderColor:"#c2c2c2",borderWidth:1,text:void 0,textAnchor:"middle",orientation:"vertical",position:"top",offsetX:0,offsetY:0,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,cssClass:"",padding:{left:5,right:5,top:2,bottom:2}}}},this.yAxisAnnotation={y:0,y2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",opacity:.3,offsetX:0,offsetY:0,yAxisIndex:0,label:{borderColor:"#c2c2c2",borderWidth:1,text:void 0,textAnchor:"end",position:"right",offsetX:0,offsetY:-3,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,cssClass:"",padding:{left:5,right:5,top:0,bottom:2}}}},this.pointAnnotation={x:0,y:null,yAxisIndex:0,seriesIndex:0,marker:{size:0,fillColor:"#fff",strokeWidth:2,strokeColor:"#333",shape:"circle",offsetX:0,offsetY:0,radius:2,cssClass:""},label:{borderColor:"#c2c2c2",borderWidth:1,text:void 0,textAnchor:"middle",offsetX:0,offsetY:-15,style:{background:"#fff",color:void 0,fontSize:"11px",fontFamily:void 0,cssClass:"",padding:{left:5,right:5,top:0,bottom:2}}},customSVG:{SVG:void 0,cssClass:void 0,offsetX:0,offsetY:0}}}return s(t,[{key:"init",value:function(){return{annotations:{position:"front",yaxis:[this.yAxisAnnotation],xaxis:[this.xAxisAnnotation],points:[this.pointAnnotation]},chart:{animations:{enabled:!0,easing:"easeinout",speed:800,animateGradually:{delay:150,enabled:!0},dynamicAnimation:{enabled:!0,speed:350}},background:"transparent",locales:[p],defaultLocale:"en",dropShadow:{enabled:!1,enabledSeries:void 0,top:2,left:2,blur:4,color:"#000",opacity:.35},events:{animationEnd:void 0,beforeMount:void 0,mounted:void 0,updated:void 0,click:void 0,legendClick:void 0,markerClick:void 0,selection:void 0,dataPointSelection:void 0,dataPointMouseEnter:void 0,dataPointMouseLeave:void 0,beforeZoom:void 0,zoomed:void 0,scrolled:void 0},foreColor:"#373d3f",fontFamily:"Helvetica, Arial, sans-serif",height:"auto",parentHeightOffset:15,id:void 0,group:void 0,offsetX:0,offsetY:0,selection:{enabled:!1,type:"x",fill:{color:"#24292e",opacity:.1},stroke:{width:1,color:"#24292e",opacity:.4,dashArray:3},xaxis:{min:void 0,max:void 0},yaxis:{min:void 0,max:void 0}},sparkline:{enabled:!1},brush:{enabled:!1,autoScaleYaxis:!1,target:void 0},stacked:!1,stackType:"normal",toolbar:{show:!0,tools:{download:!0,selection:!0,zoom:!0,zoomin:!0,zoomout:!0,pan:!0,reset:!0,customIcons:[]},autoSelected:"zoom"},type:"line",width:"100%",zoom:{enabled:!0,type:"x",zoomedArea:{fill:{color:"#90CAF9",opacity:.4},stroke:{color:"#0D47A1",opacity:.4,width:1}}}},plotOptions:{bar:{horizontal:!1,columnWidth:"70%",barHeight:"70%",distributed:!1,endingShape:"flat",colors:{ranges:[],backgroundBarColors:[],backgroundBarOpacity:1},dataLabels:{maxItems:100,hideOverflowingLabels:!0,position:"top"}},candlestick:{colors:{upward:"#00B746",downward:"#EF403C"},wick:{useFillColor:!0}},heatmap:{radius:2,enableShades:!0,shadeIntensity:.5,reverseNegativeShade:!0,distributed:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},radialBar:{size:void 0,inverseOrder:!1,startAngle:0,endAngle:360,offsetX:0,offsetY:0,hollow:{margin:5,size:"50%",background:"transparent",image:void 0,imageWidth:150,imageHeight:150,imageOffsetX:0,imageOffsetY:0,imageClipped:!0,position:"front",dropShadow:{enabled:!1,top:0,left:0,blur:3,color:"#000",opacity:.5}},track:{show:!0,startAngle:void 0,endAngle:void 0,background:"#f2f2f2",strokeWidth:"97%",opacity:1,margin:5,dropShadow:{enabled:!1,top:0,left:0,blur:3,color:"#000",opacity:.5}},dataLabels:{show:!0,name:{show:!0,fontSize:"16px",fontFamily:void 0,color:void 0,offsetY:0},value:{show:!0,fontSize:"14px",fontFamily:void 0,color:void 0,offsetY:16,formatter:function(t){return t+"%"}},total:{show:!1,label:"Total",color:void 0,formatter:function(t){return t.globals.seriesTotals.reduce(function(t,e){return t+e},0)/t.globals.series.length+"%"}}}},rangeBar:{},pie:{size:void 0,customScale:1,offsetX:0,offsetY:0,expandOnClick:!0,dataLabels:{offset:0,minAngleToShowLabel:10},donut:{size:"65%",background:"transparent",labels:{show:!1,name:{show:!0,fontSize:"16px",fontFamily:void 0,color:void 0,offsetY:-10},value:{show:!0,fontSize:"20px",fontFamily:void 0,color:void 0,offsetY:10,formatter:function(t){return t}},total:{show:!1,label:"Total",color:void 0,formatter:function(t){return t.globals.seriesTotals.reduce(function(t,e){return t+e},0)}}}}},radar:{size:void 0,offsetX:0,offsetY:0,polygons:{strokeColors:"#e8e8e8",connectorColors:"#e8e8e8",fill:{colors:void 0}}}},colors:void 0,dataLabels:{enabled:!0,enabledOnSeries:void 0,formatter:function(t){return t},textAnchor:"middle",offsetX:0,offsetY:0,style:{fontSize:"12px",fontFamily:void 0,colors:void 0},dropShadow:{enabled:!1,top:1,left:1,blur:1,color:"#000",opacity:.45}},fill:{type:"solid",colors:void 0,opacity:.85,gradient:{shade:"dark",type:"horizontal",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]},image:{src:[],width:void 0,height:void 0},pattern:{style:"sqaures",width:6,height:6,strokeWidth:2}},grid:{show:!0,borderColor:"#e0e0e0",strokeDashArray:0,position:"back",xaxis:{lines:{show:!1,animate:!1}},yaxis:{lines:{show:!0,animate:!1}},row:{colors:void 0,opacity:.5},column:{colors:void 0,opacity:.5},padding:{top:0,right:10,bottom:0,left:12}},labels:[],legend:{show:!0,showForSingleSeries:!1,showForNullSeries:!0,showForZeroSeries:!0,floating:!1,position:"bottom",horizontalAlign:"center",fontSize:"12px",fontFamily:void 0,width:void 0,height:void 0,formatter:void 0,offsetX:-20,offsetY:0,labels:{colors:void 0,useSeriesColors:!1},markers:{width:12,height:12,strokeWidth:0,strokeColor:"#fff",radius:12,customHTML:void 0,offsetX:0,offsetY:0,onClick:void 0},itemMargin:{horizontal:0,vertical:5},onItemClick:{toggleDataSeries:!0},onItemHover:{highlightDataSeries:!0}},markers:{discrete:[],size:0,colors:void 0,strokeColors:"#fff",strokeWidth:2,strokeOpacity:.9,fillOpacity:1,shape:"circle",radius:2,offsetX:0,offsetY:0,hover:{size:void 0,sizeOffset:3}},noData:{text:void 0,align:"center",verticalAlign:"middle",offsetX:0,offsetY:0,style:{color:void 0,fontSize:"14px",fontFamily:void 0}},responsive:[],series:void 0,states:{normal:{filter:{type:"none",value:0}},hover:{filter:{type:"lighten",value:.15}},active:{allowMultipleDataPointsSelection:!1,filter:{type:"darken",value:.65}}},title:{text:void 0,align:"left",margin:10,offsetX:0,offsetY:0,floating:!1,style:{fontSize:"14px",fontFamily:void 0,color:void 0}},subtitle:{text:void 0,align:"left",margin:10,offsetX:0,offsetY:30,floating:!1,style:{fontSize:"12px",fontFamily:void 0,color:void 0}},stroke:{show:!0,curve:"smooth",lineCap:"butt",width:2,colors:void 0,dashArray:0},tooltip:{enabled:!0,enabledOnSeries:void 0,shared:!0,followCursor:!1,intersect:!1,inverseOrder:!1,custom:void 0,fillSeriesColor:!1,theme:"light",style:{fontSize:"12px",fontFamily:void 0},onDatasetHover:{highlightDataSeries:!1},x:{show:!0,format:"dd MMM",formatter:void 0},y:{formatter:void 0,title:{formatter:function(t){return t}}},z:{formatter:void 0,title:"Size: "},marker:{show:!0},items:{display:"flex"},fixed:{enabled:!1,position:"topRight",offsetX:0,offsetY:0}},xaxis:{type:"category",categories:[],offsetX:0,offsetY:0,labels:{show:!0,rotate:-45,rotateAlways:!1,hideOverlappingLabels:!0,trim:!0,minHeight:void 0,maxHeight:120,showDuplicates:!0,style:{colors:[],fontSize:"12px",fontFamily:void 0,cssClass:""},offsetX:0,offsetY:0,format:void 0,formatter:void 0,datetimeFormatter:{year:"yyyy",month:"MMM 'yy",day:"dd MMM",hour:"HH:mm",minute:"HH:mm:ss"}},axisBorder:{show:!0,color:"#78909C",width:"100%",height:1,offsetX:0,offsetY:0},axisTicks:{show:!0,color:"#78909C",height:6,offsetX:0,offsetY:0},tickAmount:void 0,tickPlacement:"on",min:void 0,max:void 0,range:void 0,floating:!1,position:"bottom",title:{text:void 0,offsetX:0,offsetY:0,style:{color:void 0,fontSize:"12px",fontFamily:void 0,cssClass:""}},crosshairs:{show:!0,width:1,position:"back",opacity:.9,stroke:{color:"#b6b6b6",width:1,dashArray:3},fill:{type:"solid",color:"#B1B9C4",gradient:{colorFrom:"#D8E3F0",colorTo:"#BED1E6",stops:[0,100],opacityFrom:.4,opacityTo:.5}},dropShadow:{enabled:!1,left:0,top:0,blur:1,opacity:.4}},tooltip:{enabled:!0,offsetY:0,formatter:void 0,style:{fontSize:"12px",fontFamily:void 0}}},yaxis:this.yAxis,theme:{mode:"light",palette:"palette1",monochrome:{enabled:!1,color:"#008FFB",shadeTo:"light",shadeIntensity:.65}}}}}]),t}(),b=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.graphics=new f(this.ctx),this.w.globals.isBarHorizontal&&(this.invertAxis=!0),this.xDivision=this.w.globals.gridWidth/this.w.globals.dataPoints}return s(t,[{key:"drawAnnotations",value:function(){var t=this.w;if(t.globals.axisCharts){for(var e=this.drawYAxisAnnotations(),i=this.drawXAxisAnnotations(),s=this.drawPointAnnotations(),a=t.config.chart.animations.enabled,n=[e,i,s],r=[i.node,e.node,s.node],o=0;o<3;o++)t.globals.dom.elGraphical.add(n[o]),!a||t.globals.resized||t.globals.dataChanged||r[o].classList.add("hidden"),t.globals.delayedElements.push({el:r[o],index:0});this.annotationsBackground()}}},{key:"addXaxisAnnotation",value:function(t,e,i){var s=this.w,a=this.invertAxis?s.globals.minY:s.globals.minX,n=this.invertAxis?s.globals.yRange[0]:s.globals.xRange,r=(t.x-a)/(n/s.globals.gridWidth),o=t.label.text;if("category"===s.config.xaxis.type||s.config.xaxis.convertedCatToNumeric){var l=s.globals.labels.indexOf(t.x),h=s.globals.dom.baseEl.querySelector(".apexcharts-xaxis-texts-g text:nth-child("+(l+1)+")");h&&(r=parseFloat(h.getAttribute("x")))}var c=t.strokeDashArray;if(!(r<0||r>s.globals.gridWidth)){if(null===t.x2){var d=this.graphics.drawLine(r+t.offsetX,0+t.offsetY,r+t.offsetX,s.globals.gridHeight+t.offsetY,t.borderColor,c);e.appendChild(d.node)}else{var u=(t.x2-a)/(n/s.globals.gridWidth);if(us){var g=s;s=a,a=g}if(h){var f=this.graphics.drawRect(0+t.offsetX,a+t.offsetY,n.globals.gridWidth+t.offsetX,s-a,0,t.fillColor,t.opacity,1,t.borderColor,r);e.appendChild(f.node)}}var p="right"===t.label.position?n.globals.gridWidth:0,x=this.graphics.drawText({x:p+t.label.offsetX,y:(a||s)+t.label.offsetY-3,text:h,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,foreColor:t.label.style.color,cssClass:"apexcharts-yaxis-annotation-label "+t.label.style.cssClass});x.attr({rel:i}),e.appendChild(x.node)}},{key:"drawYAxisAnnotations",value:function(){var t=this,e=this.w,i=this.graphics.group({class:"apexcharts-yaxis-annotations"});return e.config.annotations.yaxis.map(function(e,s){t.addYaxisAnnotation(e,i.node,s)}),i}},{key:"clearAnnotations",value:function(t){var e=t.w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations");(e=d.listToArray(e)).forEach(function(t){for(;t.firstChild;)t.removeChild(t.firstChild)})}},{key:"addPointAnnotation",value:function(t,e,i){var s=this.w,a=0,n=0,r=0;if(this.invertAxis&&console.warn("Point annotation is not supported in horizontal bar charts."),"string"==typeof t.x){var o=s.globals.labels.indexOf(t.x),l=s.globals.dom.baseEl.querySelector(".apexcharts-xaxis-texts-g text:nth-child("+(o+1)+")");a=parseFloat(l.getAttribute("x"));var h=t.y;null===t.y&&(h=s.globals.series[t.seriesIndex][o]),n=s.globals.gridHeight-(h-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight)-parseInt(t.label.style.fontSize)-t.marker.size,r=s.globals.gridHeight-(h-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight),s.config.yaxis[t.yAxisIndex]&&s.config.yaxis[t.yAxisIndex].reversed&&(n=(h-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight)+parseInt(t.label.style.fontSize)+t.marker.size,r=(h-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight))}else a=(t.x-s.globals.minX)/(s.globals.xRange/s.globals.gridWidth),n=s.globals.gridHeight-(parseFloat(t.y)-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight)-parseInt(t.label.style.fontSize)-t.marker.size,r=s.globals.gridHeight-(t.y-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight),s.config.yaxis[t.yAxisIndex]&&s.config.yaxis[t.yAxisIndex].reversed&&(n=(parseFloat(t.y)-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight)-parseInt(t.label.style.fontSize)-t.marker.size,r=(t.y-s.globals.minYArr[t.yAxisIndex])/(s.globals.yRange[t.yAxisIndex]/s.globals.gridHeight));if(!(a<0||a>s.globals.gridWidth)){var c={pSize:t.marker.size,pWidth:t.marker.strokeWidth,pointFillColor:t.marker.fillColor,pointStrokeColor:t.marker.strokeColor,shape:t.marker.shape,radius:t.marker.radius,class:"apexcharts-point-annotation-marker "+t.marker.cssClass},d=this.graphics.drawMarker(a+t.marker.offsetX,r+t.marker.offsetY,c);e.appendChild(d.node);var u=t.label.text?t.label.text:"",g=this.graphics.drawText({x:a+t.label.offsetX,y:n+t.label.offsetY,text:u,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,foreColor:t.label.style.color,cssClass:"apexcharts-point-annotation-label "+t.label.style.cssClass});if(g.attr({rel:i}),e.appendChild(g.node),t.customSVG.SVG){var f=this.graphics.group({class:"apexcharts-point-annotations-custom-svg "+t.customSVG.cssClass});f.attr({transform:"translate(".concat(a+t.customSVG.offsetX,", ").concat(n+t.customSVG.offsetY,")")}),f.node.innerHTML=t.customSVG.SVG,e.appendChild(f.node)}}}},{key:"drawPointAnnotations",value:function(){var t=this,e=this.w,i=this.graphics.group({class:"apexcharts-point-annotations"});return e.config.annotations.points.map(function(e,s){t.addPointAnnotation(e,i.node,s)}),i}},{key:"setOrientations",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.w;if("vertical"===t.label.orientation){var s=null!==e?e:0,a=i.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(s,"']"));if(null!==a){var n=a.getBoundingClientRect();a.setAttribute("x",parseFloat(a.getAttribute("x"))-n.height+4),"top"===t.label.position?a.setAttribute("y",parseFloat(a.getAttribute("y"))+n.width):a.setAttribute("y",parseFloat(a.getAttribute("y"))-n.width);var r=this.graphics.rotateAroundCenter(a),o=r.x,l=r.y;a.setAttribute("transform","rotate(-90 ".concat(o," ").concat(l,")"))}}}},{key:"addBackgroundToAnno",value:function(t,e){var i=this.w;if(!e.label.text)return null;var s=i.globals.dom.baseEl.querySelector(".apexcharts-grid").getBoundingClientRect(),a=t.getBoundingClientRect(),n=e.label.style.padding.left,r=e.label.style.padding.right,o=e.label.style.padding.top,l=e.label.style.padding.bottom;"vertical"===e.label.orientation&&(o=e.label.style.padding.left,l=e.label.style.padding.right,n=e.label.style.padding.top,r=e.label.style.padding.bottom);var h=a.left-s.left-n,c=a.top-s.top-o;return this.graphics.drawRect(h,c,a.width+n+r,a.height+o+l,0,e.label.style.background,1,e.label.borderWidth,e.label.borderColor,0)}},{key:"annotationsBackground",value:function(){var t=this,e=this.w,i=function(i,s,a){var n=e.globals.dom.baseEl.querySelector(".apexcharts-".concat(a,"-annotations .apexcharts-").concat(a,"-annotation-label[rel='").concat(s,"']"));if(n){var r=n.parentNode,o=t.addBackgroundToAnno(n,i);o&&r.insertBefore(o.node,n)}};e.config.annotations.xaxis.map(function(t,e){i(t,e,"xaxis")}),e.config.annotations.yaxis.map(function(t,e){i(t,e,"yaxis")}),e.config.annotations.points.map(function(t,e){i(t,e,"point")})}},{key:"addText",value:function(t,e,i){var s=t.x,a=t.y,n=t.text,r=t.textAnchor,o=t.appendTo,l=void 0===o?".apexcharts-inner":o,h=t.foreColor,c=t.fontSize,d=t.fontFamily,u=t.cssClass,g=t.backgroundColor,f=t.borderWidth,p=t.strokeDashArray,x=t.radius,b=t.borderColor,m=t.paddingLeft,v=void 0===m?4:m,y=t.paddingRight,w=void 0===y?4:y,k=t.paddingBottom,A=void 0===k?2:k,S=t.paddingTop,C=void 0===S?2:S,L=i,z=L.w,P=z.globals.dom.baseEl.querySelector(l),M=this.graphics.drawText({x:s,y:a,text:n,textAnchor:r||"start",fontSize:c||"12px",fontFamily:d||z.config.chart.fontFamily,foreColor:h||z.config.chart.foreColor,cssClass:u});P.appendChild(M.node);var E=M.bbox();if(n){var T=this.graphics.drawRect(E.x-v,E.y-C,E.width+v+w,E.height+A+C,x,g,1,f,b,p);M.before(T)}return e&&z.globals.memory.methodsToExec.push({context:L,method:L.addText,params:{x:s,y:a,text:n,textAnchor:r,appendTo:l,foreColor:h,fontSize:c,cssClass:u,backgroundColor:g,borderWidth:f,strokeDashArray:p,radius:x,borderColor:b,paddingLeft:v,paddingRight:w,paddingBottom:A,paddingTop:C}}),i}},{key:"addPointAnnotationExternal",value:function(t,e,i){return void 0===this.invertAxis&&(this.invertAxis=i.w.globals.isBarHorizontal),this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:"point",contextMethod:i.addPointAnnotation}),i}},{key:"addYaxisAnnotationExternal",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:"yaxis",contextMethod:i.addYaxisAnnotation}),i}},{key:"addXaxisAnnotationExternal",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:"xaxis",contextMethod:i.addXaxisAnnotation}),i}},{key:"addAnnotationExternal",value:function(t){var e=t.params,i=t.pushToMemory,s=t.context,a=t.type,n=t.contextMethod,r=s,o=r.w,l=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(a,"-annotations")),h=l.childNodes.length+1,c=new x,u=Object.assign({},"xaxis"===a?c.xAxisAnnotation:"yaxis"===a?c.yAxisAnnotation:c.pointAnnotation),g=d.extend(u,e);switch(a){case"xaxis":this.addXaxisAnnotation(g,l,h);break;case"yaxis":this.addYaxisAnnotation(g,l,h);break;case"point":this.addPointAnnotation(g,l,h)}var f=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(a,"-annotations .apexcharts-").concat(a,"-annotation-label[rel='").concat(h,"']")),p=this.addBackgroundToAnno(f,g);return p&&l.insertBefore(p.node,f),i&&o.globals.memory.methodsToExec.push({context:r,method:n,params:e}),s}}]),t}(),m=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.months31=[1,3,5,7,8,10,12],this.months30=[2,4,6,9,11],this.daysCntOfYear=[0,31,59,90,120,151,181,212,243,273,304,334]}return s(t,[{key:"isValidDate",value:function(t){return!isNaN(this.parseDate(t))}},{key:"getUTCTimeStamp",value:function(t){return Date.parse(t)?new Date(new Date(t).toISOString().substr(0,25)).getTime():t}},{key:"parseDate",value:function(t){var e=Date.parse(t);if(!isNaN(e))return this.getUTCTimeStamp(t);var i=Date.parse(t.replace(/-/g,"/").replace(/[a-z]+/gi," "));return i=this.getUTCTimeStamp(i)}},{key:"treatAsUtc",value:function(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}},{key:"formatDate",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=this.w.globals.locale,n=["\0"].concat(c(a.months)),r=["\x01"].concat(c(a.shortMonths)),o=["\x02"].concat(c(a.days)),l=["\x03"].concat(c(a.shortDays));function h(t,e){var i=t+"";for(e=e||2;i.length12?f-12:0===f?12:f;e=(e=(e=(e=e.replace(/(^|[^\\])HH+/g,"$1"+h(f))).replace(/(^|[^\\])H/g,"$1"+f)).replace(/(^|[^\\])hh+/g,"$1"+h(p))).replace(/(^|[^\\])h/g,"$1"+p);var x=i?t.getUTCMinutes():t.getMinutes();e=(e=e.replace(/(^|[^\\])mm+/g,"$1"+h(x))).replace(/(^|[^\\])m/g,"$1"+x);var b=i?t.getUTCSeconds():t.getSeconds();e=(e=e.replace(/(^|[^\\])ss+/g,"$1"+h(b))).replace(/(^|[^\\])s/g,"$1"+b);var m=i?t.getUTCMilliseconds():t.getMilliseconds();e=e.replace(/(^|[^\\])fff+/g,"$1"+h(m,3)),m=Math.round(m/10),e=e.replace(/(^|[^\\])ff/g,"$1"+h(m)),m=Math.round(m/10);var v=f<12?"AM":"PM";e=(e=(e=e.replace(/(^|[^\\])f/g,"$1"+m)).replace(/(^|[^\\])TT+/g,"$1"+v)).replace(/(^|[^\\])T/g,"$1"+v.charAt(0));var y=v.toLowerCase();e=(e=e.replace(/(^|[^\\])tt+/g,"$1"+y)).replace(/(^|[^\\])t/g,"$1"+y.charAt(0));var w=-t.getTimezoneOffset(),k=i||!w?"Z":w>0?"+":"-";if(!i){var A=(w=Math.abs(w))%60;k+=h(Math.floor(w/60))+":"+h(A)}e=e.replace(/(^|[^\\])K/g,"$1"+k);var S=(i?t.getUTCDay():t.getDay())+1;return e=(e=(e=(e=(e=e.replace(new RegExp(o[0],"g"),o[S])).replace(new RegExp(l[0],"g"),l[S])).replace(new RegExp(n[0],"g"),n[u])).replace(new RegExp(r[0],"g"),r[u])).replace(/\\(.)/g,"$1")}},{key:"getTimeUnitsfromTimestamp",value:function(t,e){var i=this.w;void 0!==i.config.xaxis.min&&(t=i.config.xaxis.min),void 0!==i.config.xaxis.max&&(e=i.config.xaxis.max);var s=new Date(t).getFullYear(),a=new Date(e).getFullYear(),n=new Date(t).getMonth(),r=new Date(e).getMonth(),o=new Date(t).getDate(),l=new Date(e).getDate(),h=new Date(t).getHours(),c=new Date(e).getHours();return{minMinute:new Date(t).getMinutes(),maxMinute:new Date(e).getMinutes(),minHour:h,maxHour:c,minDate:o,maxDate:l,minMonth:n,maxMonth:r,minYear:s,maxYear:a}}},{key:"isLeapYear",value:function(t){return t%4==0&&t%100!=0||t%400==0}},{key:"calculcateLastDaysOfMonth",value:function(t,e,i){return this.determineDaysOfMonths(t,e)-i}},{key:"determineDaysOfYear",value:function(t){var e=365;return this.isLeapYear(t)&&(e=366),e}},{key:"determineRemainingDaysOfYear",value:function(t,e,i){var s=this.daysCntOfYear[e]+i;return e>1&&this.isLeapYear()&&s++,s}},{key:"determineDaysOfMonths",value:function(t,e){var i=30;switch(t=d.monthMod(t),!0){case this.months30.indexOf(t)>-1:2===t&&(i=this.isLeapYear(e)?29:28);break;case this.months31.indexOf(t)>-1:default:i=31}return i}}]),t}(),v=function(){function t(i){e(this,t),this.opts=i}return s(t,[{key:"line",value:function(){return{chart:{animations:{easing:"swing"}},dataLabels:{enabled:!1},stroke:{width:5,curve:"straight"},markers:{size:0,hover:{sizeOffset:6}},xaxis:{crosshairs:{width:1}}}}},{key:"sparkline",value:function(t){this.opts.yaxis[0].labels.show=!1,this.opts.yaxis[0].floating=!0;return d.extend(t,{grid:{show:!1,padding:{left:0,right:0,top:0,bottom:0}},legend:{show:!1},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1}},chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1}})}},{key:"bar",value:function(){return{chart:{stacked:!1,animations:{easing:"swing"}},plotOptions:{bar:{dataLabels:{position:"center"}}},dataLabels:{style:{colors:["#fff"]}},stroke:{width:0},fill:{opacity:.85},legend:{markers:{shape:"square",radius:2,size:8}},tooltip:{shared:!1},xaxis:{tooltip:{enabled:!1},crosshairs:{width:"barWidth",position:"back",fill:{type:"gradient"},dropShadow:{enabled:!1},stroke:{width:0}}}}}},{key:"candlestick",value:function(){return{stroke:{width:1,colors:["#333"]},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(t){var e=t.seriesIndex,i=t.dataPointIndex,s=t.w;return'
Open: '+s.globals.seriesCandleO[e][i]+'
High: '+s.globals.seriesCandleH[e][i]+'
Low: '+s.globals.seriesCandleL[e][i]+'
Close: '+s.globals.seriesCandleC[e][i]+"
"}},states:{active:{filter:{type:"none"}}},xaxis:{crosshairs:{width:1}}}}},{key:"rangeBar",value:function(){return{stroke:{width:0},plotOptions:{bar:{dataLabels:{position:"center"}}},dataLabels:{enabled:!1,formatter:function(t,e){e.ctx;var i=e.seriesIndex,s=e.dataPointIndex,a=e.w,n=a.globals.seriesRangeStart[i][s];return a.globals.seriesRangeEnd[i][s]-n},style:{colors:["#fff"]}},tooltip:{shared:!1,followCursor:!0,custom:function(t){var e=t.ctx,i=t.seriesIndex,s=t.dataPointIndex,a=t.w,n=a.globals.seriesRangeStart[i][s],r=a.globals.seriesRangeEnd[i][s],o="",l="",h=a.globals.colors[i];if(void 0===a.config.tooltip.x.formatter)if("datetime"===a.config.xaxis.type){var c=new m(e);o=c.formatDate(new Date(n),a.config.tooltip.x.format,!0,!0),l=c.formatDate(new Date(r),a.config.tooltip.x.format,!0,!0)}else o=n,l=r;else o=a.config.tooltip.x.formatter(n),l=a.config.tooltip.x.formatter(r);var d=a.globals.labels[s];return'
'+(a.config.series[i].name?a.config.series[i].name:"")+'
'+d+': '+o+' - '+l+"
"}},xaxis:{tooltip:{enabled:!1},crosshairs:{stroke:{width:0}}}}}},{key:"area",value:function(){return{stroke:{width:4},fill:{type:"gradient",gradient:{inverseColors:!1,shade:"light",type:"vertical",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}},markers:{size:0,hover:{sizeOffset:6}},tooltip:{followCursor:!1}}}},{key:"brush",value:function(t){return d.extend(t,{chart:{toolbar:{autoSelected:"selection",show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1},stroke:{width:1},tooltip:{enabled:!1},xaxis:{tooltip:{enabled:!1}}})}},{key:"stacked100",value:function(){var t=this;this.opts.dataLabels=this.opts.dataLabels||{},this.opts.dataLabels.formatter=this.opts.dataLabels.formatter||void 0;var e=this.opts.dataLabels.formatter;this.opts.yaxis.forEach(function(e,i){t.opts.yaxis[i].min=0,t.opts.yaxis[i].max=100}),"bar"===this.opts.chart.type&&(this.opts.dataLabels.formatter=e||function(t){return"number"==typeof t&&t?t.toFixed(0)+"%":t})}},{key:"bubble",value:function(){return{dataLabels:{style:{colors:["#fff"]}},tooltip:{shared:!1,intersect:!0},xaxis:{crosshairs:{width:0}},fill:{type:"solid",gradient:{shade:"light",inverse:!0,shadeIntensity:.55,opacityFrom:.4,opacityTo:.8}}}}},{key:"scatter",value:function(){return{dataLabels:{enabled:!1},tooltip:{shared:!1,intersect:!0},markers:{size:6,strokeWidth:2,hover:{sizeOffset:2}}}}},{key:"heatmap",value:function(){return{chart:{stacked:!1,zoom:{enabled:!1}},fill:{opacity:1},dataLabels:{style:{colors:["#fff"]}},stroke:{colors:["#fff"]},tooltip:{followCursor:!0,marker:{show:!1},x:{show:!1}},legend:{position:"top",markers:{shape:"square",size:10,offsetY:2}},grid:{padding:{right:20}}}}},{key:"pie",value:function(){return{chart:{toolbar:{show:!1}},plotOptions:{pie:{donut:{labels:{show:!1}}}},dataLabels:{formatter:function(t){return t.toFixed(1)+"%"},style:{colors:["#fff"]},dropShadow:{enabled:!0}},stroke:{colors:["#fff"]},fill:{opacity:1,gradient:{shade:"dark",shadeIntensity:.35,inverseColors:!1,stops:[0,100,100]}},padding:{right:0,left:0},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"donut",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(t){return t.toFixed(1)+"%"},style:{colors:["#fff"]},dropShadow:{enabled:!0}},stroke:{colors:["#fff"]},fill:{opacity:1,gradient:{shade:"dark",shadeIntensity:.4,inverseColors:!1,type:"vertical",opacityFrom:1,opacityTo:1,stops:[70,98,100]}},padding:{right:0,left:0},tooltip:{theme:"dark",fillSeriesColor:!0},legend:{position:"right"}}}},{key:"radar",value:function(){return this.opts.yaxis[0].labels.style.fontSize="13px",this.opts.yaxis[0].labels.offsetY=6,{dataLabels:{enabled:!0,style:{colors:["#a8a8a8"],fontSize:"11px"}},stroke:{width:2},markers:{size:3,strokeWidth:1,strokeOpacity:1},fill:{opacity:.2},tooltip:{shared:!1,intersect:!0,followCursor:!0},grid:{show:!1},xaxis:{tooltip:{enabled:!1},crosshairs:{show:!1}}}}},{key:"radialBar",value:function(){return{chart:{animations:{dynamicAnimation:{enabled:!0,speed:800}},toolbar:{show:!1}},fill:{gradient:{shade:"dark",shadeIntensity:.4,inverseColors:!1,type:"diagonal2",opacityFrom:1,opacityTo:1,stops:[70,98,100]}},padding:{right:0,left:0},legend:{show:!1,position:"right"},tooltip:{enabled:!1,fillSeriesColor:!0}}}}],[{key:"convertCatToNumeric",value:function(t){t.xaxis.type="numeric",t.xaxis.convertedCatToNumeric=!0,t.xaxis.labels=t.xaxis.labels||{},t.xaxis.labels.formatter=t.xaxis.labels.formatter||function(t){return t},t.chart=t.chart||{},t.chart.zoom=t.chart.zoom||window.Apex.chart&&window.Apex.chart.zoom||{};var e=t.xaxis.labels.formatter,i=t.xaxis.categories&&t.xaxis.categories.length?t.xaxis.categories:t.labels;return i&&i.length&&(t.xaxis.labels.formatter=function(t){return e(i[t-1])}),t.xaxis.categories=[],t.labels=[],t.chart.zoom.enabled=t.chart.zoom.enabled||!1,t}}]),t}(),y=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"getStackedSeriesTotals",value:function(){for(var t=this.w,e=[],i=0;i0&&void 0!==arguments[0]?arguments[0]:null;return null===t?this.w.config.series.reduce(function(t,e){return t+e},0):this.w.globals.series[t].reduce(function(t,e){return t+e},0)}},{key:"isSeriesNull",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return 0===(null===t?this.w.config.series.filter(function(t){return null!==t}):this.w.globals.series[t].filter(function(t){return null!==t})).length}},{key:"seriesHaveSameValues",value:function(t){return this.w.globals.series[t].every(function(t,e,i){return t===i[0]})}},{key:"getLargestSeries",value:function(){var t=this.w;t.globals.maxValsInArrayIndex=t.globals.series.map(function(t){return t.length}).indexOf(Math.max.apply(Math,t.globals.series.map(function(t){return t.length})))}},{key:"getLargestMarkerSize",value:function(){var t=this.w,e=0;return t.globals.markers.size.forEach(function(t){e=Math.max(e,t)}),t.globals.markers.largestSize=e,e}},{key:"getSeriesTotals",value:function(){var t=this.w;t.globals.seriesTotals=t.globals.series.map(function(t,e){var i=0;if(Array.isArray(t))for(var s=0;st&&i.globals.seriesX[a][r]1)throw new Error("Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false");e.yaxis[0].reversed&&(e.yaxis[0].opposite=!0),e.xaxis.tooltip.enabled=!1,e.yaxis[0].tooltip.enabled=!1,e.chart.zoom.enabled=!1}return"bar"!==e.chart.type&&"rangeBar"!==e.chart.type||e.tooltip.shared&&("barWidth"===e.xaxis.crosshairs.width&&e.series.length>1&&(console.warn('crosshairs.width = "barWidth" is only supported in single series, not in a multi-series barChart.'),e.xaxis.crosshairs.width="tickWidth"),e.plotOptions.bar.horizontal&&(e.states.hover.type="none",e.tooltip.shared=!1),e.tooltip.followCursor||(console.warn("followCursor option in shared columns cannot be turned off. Please set %ctooltip.followCursor: true","color: blue;"),e.tooltip.followCursor=!0)),"candlestick"===e.chart.type&&e.yaxis[0].reversed&&(console.warn("Reversed y-axis in candlestick chart is not supported."),e.yaxis[0].reversed=!1),e.chart.group&&0===e.yaxis[0].labels.minWidth&&console.warn("It looks like you have multiple charts in synchronization. You must provide yaxis.labels.minWidth which must be EQUAL for all grouped charts to prevent incorrect behaviour."),Array.isArray(e.stroke.width)&&"line"!==e.chart.type&&"area"!==e.chart.type&&(console.warn("stroke.width option accepts array only for line and area charts. Reverted back to Number"),e.stroke.width=e.stroke.width[0]),e}}]),i}(),k=function(){function t(){e(this,t)}return s(t,[{key:"globalVars",value:function(t){return{chartID:null,cuid:null,events:{beforeMount:[],mounted:[],updated:[],clicked:[],selection:[],dataPointSelection:[],zoomed:[],scrolled:[]},colors:[],clientX:null,clientY:null,fill:{colors:[]},stroke:{colors:[]},dataLabels:{style:{colors:[]}},radarPolygons:{fill:{colors:[]}},markers:{colors:[],size:t.markers.size,largestSize:0},animationEnded:!1,isTouchDevice:"ontouchstart"in window||navigator.msMaxTouchPoints,isDirty:!1,initialConfig:null,lastXAxis:[],lastYAxis:[],series:[],seriesRangeStart:[],seriesRangeEnd:[],seriesPercent:[],seriesTotals:[],stackedSeriesTotals:[],seriesX:[],seriesZ:[],labels:[],timelineLabels:[],invertedTimelineLabels:[],seriesNames:[],noLabelsProvided:!1,allSeriesCollapsed:!1,collapsedSeries:[],collapsedSeriesIndices:[],ancillaryCollapsedSeries:[],ancillaryCollapsedSeriesIndices:[],risingSeries:[],dataFormatXNumeric:!1,selectedDataPoints:[],ignoreYAxisIndexes:[],padHorizontal:0,maxValsInArrayIndex:0,zoomEnabled:"zoom"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.zoom&&t.chart.zoom.enabled,panEnabled:"pan"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.pan,selectionEnabled:"selection"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.selection,yaxis:null,minY:Number.MIN_VALUE,maxY:-Number.MAX_VALUE,minYArr:[],maxYArr:[],maxX:-Number.MAX_VALUE,initialmaxX:-Number.MAX_VALUE,minX:Number.MIN_VALUE,initialminX:Number.MIN_VALUE,minZ:Number.MIN_VALUE,maxZ:-Number.MAX_VALUE,minXDiff:Number.MAX_VALUE,mousedown:!1,lastClientPosition:{},visibleXRange:void 0,yRange:[],zRange:0,xRange:0,yValueDecimal:0,total:0,SVGNS:"http://www.w3.org/2000/svg",svgWidth:0,svgHeight:0,noData:!1,locale:{},dom:{},memory:{methodsToExec:[]},shouldAnimate:!0,skipLastTimelinelabel:!1,delayedElements:[],axisCharts:!0,isXNumeric:!1,isDataXYZ:!1,resized:!1,resizeTimer:null,comboCharts:!1,comboChartsHasBars:!1,dataChanged:!1,previousPaths:[],seriesXvalues:[],seriesYvalues:[],seriesCandleO:[],seriesCandleH:[],seriesCandleL:[],seriesCandleC:[],allSeriesHasEqualX:!0,dataPoints:0,pointsArray:[],dataLabelsRects:[],lastDrawnDataLabelsIndexes:[],hasNullValues:!1,easing:null,zoomed:!1,gridWidth:0,gridHeight:0,yAxisScale:[],xAxisScale:null,xAxisTicksPositions:[],timescaleTicks:[],rotateXLabels:!1,defaultLabels:!1,xLabelFormatter:void 0,yLabelFormatters:[],xaxisTooltipFormatter:void 0,ttKeyFormatter:void 0,ttVal:void 0,ttZFormatter:void 0,LINE_HEIGHT_RATIO:1.618,xAxisLabelsHeight:0,yAxisLabelsWidth:0,scaleX:1,scaleY:1,translateX:0,translateY:0,translateYAxisX:[],yLabelsCoords:[],yTitleCoords:[],yAxisWidths:[],translateXAxisY:0,translateXAxisX:0,tooltip:null,tooltipOpts:null}}},{key:"init",value:function(t){var e=this.globalVars(t);return e.initialConfig=d.extend({},t),e.initialSeries=JSON.parse(JSON.stringify(e.initialConfig.series)),e.lastXAxis=JSON.parse(JSON.stringify(e.initialConfig.xaxis)),e.lastYAxis=JSON.parse(JSON.stringify(e.initialConfig.yaxis)),e}}]),t}(),A=function(){function t(i){e(this,t),this.opts=i}return s(t,[{key:"init",value:function(){var t=new w(this.opts).init();return{config:t,globals:(new k).init(t)}}}]),t}(),S=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.opts=null,this.seriesIndex=0}return s(t,[{key:"clippedImgArea",value:function(t){var e=this.w,i=e.config,s=parseInt(e.globals.gridWidth),a=parseInt(e.globals.gridHeight),n=s>a?s:a,r=t.image,o=0,l=0;void 0===t.width&&void 0===t.height?void 0!==i.fill.image.width&&void 0!==i.fill.image.height?(o=i.fill.image.width+1,l=i.fill.image.height):(o=n+1,l=n):(o=t.width,l=t.height);var h=document.createElementNS(e.globals.SVGNS,"pattern");f.setAttrs(h,{id:t.patternID,patternUnits:t.patternUnits?t.patternUnits:"userSpaceOnUse",width:o+"px",height:l+"px"});var c=document.createElementNS(e.globals.SVGNS,"image");h.appendChild(c),c.setAttributeNS("http://www.w3.org/1999/xlink","href",r),f.setAttrs(c,{x:0,y:0,preserveAspectRatio:"none",width:o+"px",height:l+"px"}),c.style.opacity=t.opacity,e.globals.dom.elDefs.node.appendChild(h)}},{key:"getSeriesIndex",value:function(t){var e=this.w;return"bar"===e.config.chart.type&&e.config.plotOptions.bar.distributed||"heatmap"===e.config.chart.type?this.seriesIndex=t.seriesNumber:this.seriesIndex=t.seriesNumber%e.globals.series.length,this.seriesIndex}},{key:"fillPath",value:function(t){var e=this.w;this.opts=t;var i,s,a,n=this.w.config;this.seriesIndex=this.getSeriesIndex(t);var r=this.getFillColors(),o=r[this.seriesIndex];"function"==typeof o&&(o=o({seriesIndex:this.seriesIndex,value:t.value,w:e}));var l=this.getFillType(this.seriesIndex),h=Array.isArray(n.fill.opacity)?n.fill.opacity[this.seriesIndex]:n.fill.opacity,c=o;return t.color&&(o=t.color),-1===o.indexOf("rgb")?c=d.hexToRgba(o,h):o.indexOf("rgba")>-1&&(h="0."+d.getOpacityFromRGBA(r[this.seriesIndex])),"pattern"===l&&(s=this.handlePatternFill(s,o,h,c)),"gradient"===l&&(a=this.handleGradientFill(a,o,h,this.seriesIndex)),n.fill.image.src.length>0&&"image"===l?t.seriesNumber0){if(t.globals.markers.size.length0&&(l=h.group({class:"apexcharts-series-markers"})).attr("clip-path","url(#gridRectMarkerMask".concat(n.globals.cuid,")")),o.x instanceof Array)for(var c=function(t){var c=i;1===i&&0===t&&(c=0),1===i&&1===t&&(c=1);var g="apexcharts-marker";if("line"!==n.config.chart.type&&"area"!==n.config.chart.type||n.globals.comboCharts||n.config.tooltip.intersect||(g+=" no-pointer-events"),Array.isArray(n.config.markers.size)?n.globals.markers.size[e]>0:n.config.markers.size>0){d.isNumber(o.y[t])?g+=" w".concat((Math.random()+1).toString(36).substring(4)):g="apexcharts-nullpoint";var f=a.getMarkerConfig(g,e);n.config.markers.discrete.map(function(t){t.seriesIndex===e&&t.dataPointIndex===c&&(f.pointStrokeColor=t.strokeColor,f.pointFillColor=t.fillColor,f.pSize=t.size)}),n.config.series[r].data[i]&&(n.config.series[r].data[i].fillColor&&(f.pointFillColor=n.config.series[r].data[i].fillColor),n.config.series[r].data[i].strokeColor&&(f.pointStrokeColor=n.config.series[r].data[i].strokeColor)),(s=h.drawMarker(o.x[t],o.y[t],f)).attr("rel",c),s.attr("j",c),s.attr("index",e),s.node.setAttribute("default-marker-size",f.pSize),new u(a.ctx).setSelectionFilter(s,e,c),a.addEvents(s),l&&l.add(s)}else void 0===n.globals.pointsArray[e]&&(n.globals.pointsArray[e]=[]),n.globals.pointsArray[e].push([o.x[t],o.y[t]])},g=0;gp.x+p.width+2||e>p.y+p.height+2||t+c4&&void 0!==arguments[4]?arguments[4]:"top",a=this.w,n=new f(this.ctx),r=a.config.dataLabels,o=0,l=0,h=i,c=null;if(!r.enabled||t.x instanceof Array!=!0)return c;(c=n.group({class:"apexcharts-data-labels"})).attr("clip-path","url(#gridRectMarkerMask".concat(a.globals.cuid,")"));for(var d=0;d-1)){var p={x:s,y:a,drawnextLabel:!0};if(g&&(p=this.dataLabelsCorrection(s,a,o,n,r,d,parseInt(c.style.fontSize))),e.globals.zoomed||(s=p.x,a=p.y),p.drawnextLabel){var x=i.drawText({width:100,height:parseInt(c.style.fontSize),x:s,y:a,foreColor:e.globals.dataLabels.style.colors[n],textAnchor:l||c.textAnchor,text:o,fontSize:c.style.fontSize,fontFamily:c.style.fontFamily});if(x.attr({class:"apexcharts-datalabel",cx:s,cy:a}),c.dropShadow.enabled){var b=c.dropShadow;new u(this.ctx).dropShadow(x,b)}h.add(x),void 0===e.globals.lastDrawnDataLabelsIndexes[n]&&(e.globals.lastDrawnDataLabelsIndexes[n]=[]),e.globals.lastDrawnDataLabelsIndexes[n].push(r)}}}}]),t}(),P=function(){function t(i,s){e(this,t),this.ctx=i,this.w=i.w;var a=this.w;this.barOptions=a.config.plotOptions.bar,this.isHorizontal=this.barOptions.horizontal,this.strokeWidth=a.config.stroke.width,this.isNullValue=!1,this.xyRatios=s,null!==this.xyRatios&&(this.xRatio=s.xRatio,this.yRatio=s.yRatio,this.invertedXRatio=s.invertedXRatio,this.invertedYRatio=s.invertedYRatio,this.baseLineY=s.baseLineY,this.baseLineInvertedY=s.baseLineInvertedY),this.yaxisIndex=0,this.seriesLen=0}return s(t,[{key:"draw",value:function(t,e){var i=this.w,s=new f(this.ctx),a=new y(this.ctx,i);t=a.getLogSeries(t),this.series=t,this.yRatio=a.getLogYRatios(this.yRatio),this.initVariables(t);var n=s.group({class:"apexcharts-bar-series apexcharts-plot-series"});i.config.dataLabels.enabled&&this.totalItems>i.config.plotOptions.bar.dataLabels.maxItems&&console.warn("WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.");for(var r=0,o=0;r0&&(this.visibleI=this.visibleI+1);var A=0,S=0,C=0;this.yRatio.length>1&&(this.yaxisIndex=w),this.isReversed=i.config.yaxis[this.yaxisIndex]&&i.config.yaxis[this.yaxisIndex].reversed;var L=this.initialPositions();b=L.y,S=L.barHeight,h=L.yDivision,u=L.zeroW,x=L.x,C=L.barWidth,l=L.xDivision,c=L.zeroH,this.horizontal||v.push(x+C/2);for(var z=s.group({class:"apexcharts-datalabels"}),P=0,M=i.globals.dataPoints;P0&&v.push(x+C/2),m.push(b);var T=this.getPathFillColor(t,r,P,w);k=this.renderSeries({realIndex:w,pathFill:T,j:P,i:r,pathFrom:p,pathTo:g,strokeWidth:A,elSeries:k,x:x,y:b,series:t,barHeight:S,barWidth:C,elDataLabelsWrap:z,visibleSeries:this.visibleI,type:"bar"})}i.globals.seriesXvalues[w]=v,i.globals.seriesYvalues[w]=m,n.add(k)}return n}},{key:"getPathFillColor",value:function(t,e,i,s){var a=this.w,n=new S(this.ctx),r=null,o=this.barOptions.distributed?i:e;this.barOptions.colors.ranges.length>0&&this.barOptions.colors.ranges.map(function(s){t[e][i]>=s.from&&t[e][i]<=s.to&&(r=s.color)});return a.config.series[e].data[i]&&a.config.series[e].data[i].fillColor&&(r=a.config.series[e].data[i].fillColor),n.fillPath({seriesNumber:this.barOptions.distributed?o:s,color:r,value:t[e][i]})}},{key:"renderSeries",value:function(t){var e=t.realIndex,i=t.pathFill,s=t.lineFill,a=t.j,n=t.i,r=t.pathFrom,o=t.pathTo,l=t.strokeWidth,h=t.elSeries,c=t.x,d=t.y,g=t.series,p=t.barHeight,x=t.barWidth,b=t.elDataLabelsWrap,m=t.visibleSeries,v=t.type,y=this.w,w=new f(this.ctx);s||(s=this.barOptions.distributed?y.globals.stroke.colors[a]:y.globals.stroke.colors[e]),y.config.series[n].data[a]&&y.config.series[n].data[a].strokeColor&&(s=y.config.series[n].data[a].strokeColor),this.isNullValue&&(i="none");var k=a/y.config.chart.animations.animateGradually.delay*(y.config.chart.animations.speed/y.globals.dataPoints)/2.4,A=w.renderPaths({i:n,j:a,realIndex:e,pathFrom:r,pathTo:o,stroke:s,strokeWidth:l,strokeLineCap:y.config.stroke.lineCap,fill:i,animationDelay:k,initialSpeed:y.config.chart.animations.speed,dataChangeSpeed:y.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(v,"-area"),id:"apexcharts-".concat(v,"-area")});A.attr("clip-path","url(#gridRectMask".concat(y.globals.cuid,")")),new u(this.ctx).setSelectionFilter(A,e,a),h.add(A);var S=this.calculateDataLabelsPos({x:c,y:d,i:n,j:a,series:g,realIndex:e,barHeight:p,barWidth:x,renderedPath:A,visibleSeries:m});return null!==S&&b.add(S),h.add(b),h}},{key:"initVariables",value:function(t){var e=this.w;this.series=t,this.totalItems=0,this.seriesLen=0,this.visibleI=-1,this.visibleItems=1;for(var i=0;i0&&(this.seriesLen=this.seriesLen+1,this.totalItems+=t[i].length),e.globals.isXNumeric)for(var s=0;se.globals.minX&&e.globals.seriesX[i][s]0&&(n=this.getPathFrom(x,p));var v={barHeight:i,strokeWidth:s,barYPosition:m,x:o=void 0===this.series[g][p]||null===this.series[g][p]?r:r+this.series[g][p]/this.invertedYRatio-2*(this.isReversed?this.series[g][p]/this.invertedYRatio:0),zeroW:r},y=this.barEndingShape(d,v,this.series,g,p);if(a=a+u.line(y.newX,m)+y.path+u.line(r,m+i-s)+u.line(r,m),n=n+u.line(r,m)+y.ending_p_from+u.line(r,m+i-s)+u.line(r,m+i-s)+u.line(r,m),d.globals.isXNumeric||(l+=h),this.barOptions.colors.backgroundBarColors.length>0&&0===g){b>=this.barOptions.colors.backgroundBarColors.length&&(b=0);var w=this.barOptions.colors.backgroundBarColors[b],k=u.drawRect(0,m-i*this.visibleI,d.globals.gridWidth,i*this.seriesLen,0,w,this.barOptions.colors.backgroundBarOpacity);c.add(k),k.node.classList.add("apexcharts-backgroundBar")}return{pathTo:a,pathFrom:n,x:o,y:l,barYPosition:m}}},{key:"drawColumnPaths",value:function(t){var e=t.indexes,i=t.x,s=t.y,a=t.xDivision,n=t.pathTo,r=t.pathFrom,o=t.barWidth,l=t.zeroH,h=t.strokeWidth,c=t.elSeries,d=this.w,u=new f(this.ctx),g=e.i,p=e.j,x=e.realIndex,b=e.bc;d.globals.isXNumeric&&(i=(d.globals.seriesX[g][p]-d.globals.minX)/this.xRatio-o/2);var m=i+o*this.visibleI;n=u.move(m,l),r=u.move(m,l),d.globals.previousPaths.length>0&&(r=this.getPathFrom(x,p));var v={barWidth:o,strokeWidth:h,barXPosition:m,y:s=void 0===this.series[g][p]||null===this.series[g][p]?l:l-this.series[g][p]/this.yRatio[this.yaxisIndex]+2*(this.isReversed?this.series[g][p]/this.yRatio[this.yaxisIndex]:0),zeroH:l},y=this.barEndingShape(d,v,this.series,g,p);if(n=n+u.line(m,y.newY)+y.path+u.line(m+o-h,l)+u.line(m-h/2,l),r=r+u.line(m,l)+y.ending_p_from+u.line(m+o-h,l)+u.line(m+o-h,l)+u.line(m-h/2,l),d.globals.isXNumeric||(i+=a),this.barOptions.colors.backgroundBarColors.length>0&&0===g){b>=this.barOptions.colors.backgroundBarColors.length&&(b=0);var w=this.barOptions.colors.backgroundBarColors[b],k=u.drawRect(m-o*this.visibleI,0,o*this.seriesLen,d.globals.gridHeight,0,w,this.barOptions.colors.backgroundBarOpacity);c.add(k),k.node.classList.add("apexcharts-backgroundBar")}return{pathTo:n,pathFrom:r,x:i,y:s,barXPosition:m}}},{key:"getPathFrom",value:function(t,e){for(var i,s=this.w,a=0;a0&&parseInt(n.realIndex)===parseInt(t)&&void 0!==s.globals.previousPaths[a].paths[e]&&(i=s.globals.previousPaths[a].paths[e].d)}return i}},{key:"calculateDataLabelsPos",value:function(t){var e=t.x,i=t.y,s=t.i,a=t.j,n=t.realIndex,r=t.series,o=t.barHeight,l=t.barWidth,h=t.visibleSeries,c=t.renderedPath,d=this.w,u=new f(this.ctx),g=Array.isArray(this.strokeWidth)?this.strokeWidth[n]:this.strokeWidth,p=e+parseFloat(l*h),x=i+parseFloat(o*h);d.globals.isXNumeric&&!d.globals.isBarHorizontal&&(p=e+parseFloat(l*(h+1))-g,x=i+parseFloat(o*(h+1))-g);var b=e,m=i,v={},y=d.config.dataLabels,w=this.barOptions.dataLabels,k=y.offsetX,A=y.offsetY,S={width:0,height:0};return d.config.dataLabels.enabled&&(S=u.getTextRects(d.globals.yLabelFormatters[0](d.globals.maxY),parseInt(y.style.fontSize))),v=this.isHorizontal?this.calculateBarsDataLabelsPosition({x:e,y:i,i:s,j:a,renderedPath:c,bcy:x,barHeight:o,barWidth:l,textRects:S,strokeWidth:g,dataLabelsX:b,dataLabelsY:m,barDataLabelsConfig:w,offX:k,offY:A}):this.calculateColumnsDataLabelsPosition({x:e,y:i,i:s,j:a,renderedPath:c,realIndex:n,bcx:p,bcy:x,barHeight:o,barWidth:l,textRects:S,strokeWidth:g,dataLabelsY:m,barDataLabelsConfig:w,offX:k,offY:A}),c.attr({cy:v.bcy,cx:v.bcx,j:a,val:r[s][a],barHeight:o,barWidth:l}),this.drawCalculatedDataLabels({x:v.dataLabelsX,y:v.dataLabelsY,val:r[s][a],i:n,j:a,barWidth:l,barHeight:o,textRects:S,dataLabelsConfig:y})}},{key:"calculateColumnsDataLabelsPosition",value:function(t){var e,i=this.w,s=t.i,a=t.j,n=t.y,r=t.bcx,o=t.barWidth,l=t.barHeight,h=t.textRects,c=t.dataLabelsY,d=t.barDataLabelsConfig,u=t.strokeWidth,g=t.offX,f=t.offY,p=i.globals.gridWidth/i.globals.dataPoints;r-=u/2,e=i.globals.isXNumeric?r-o/2+g:r-p+o/2+g;var x=this.series[s][a]<=0;switch(this.isReversed&&(n-=l),d.position){case"center":c=x?n+l/2+h.height/2+f:n+l/2+h.height/2-f;break;case"bottom":c=x?n+l+h.height+u+f:n+l-h.height/2+u-f;break;case"top":c=x?n-h.height/2-f:n+h.height+f}return i.config.chart.stacked||(c<0?c=0+u:c+h.height/3>i.globals.gridHeight&&(c=i.globals.gridHeight-u)),{bcx:r,bcy:n,dataLabelsX:e,dataLabelsY:c}}},{key:"calculateBarsDataLabelsPosition",value:function(t){var e=this.w,i=t.x,s=t.i,a=t.j,n=t.bcy,r=t.barHeight,o=t.barWidth,l=t.textRects,h=t.dataLabelsX,c=t.strokeWidth,d=t.barDataLabelsConfig,u=t.offX,g=t.offY,f=n-e.globals.gridHeight/e.globals.dataPoints+r/2+l.height/2+g-3,p=this.series[s][a]<=0;switch(this.isReversed&&(i+=o),d.position){case"center":h=p?i-o/2-u:i-o/2+u;break;case"bottom":h=p?i-o-c-Math.round(l.width/2)-u:i-o+c+Math.round(l.width/2)+u;break;case"top":h=p?i-c+Math.round(l.width/2)-u:i-c-Math.round(l.width/2)+u}return e.config.chart.stacked||(h<0?h=h+l.width+c:h+l.width/2>e.globals.gridWidth&&(h=e.globals.gridWidth-l.width-c)),{bcx:i,bcy:n,dataLabelsX:h,dataLabelsY:f}}},{key:"drawCalculatedDataLabels",value:function(t){var e=t.x,i=t.y,s=t.val,a=t.i,n=t.j,r=t.textRects,o=t.barHeight,l=t.barWidth,h=t.dataLabelsConfig,c=this.w,d=new z(this.ctx),u=new f(this.ctx),g=h.formatter,p=null,x=c.globals.collapsedSeriesIndices.indexOf(a)>-1;if(h.enabled&&!x){p=u.group({class:"apexcharts-data-labels"});var b="";null!=s&&(b=g(s,{seriesIndex:a,dataPointIndex:n,w:c})),0===s&&c.config.chart.stacked&&(b=""),c.config.chart.stacked&&this.barOptions.dataLabels.hideOverflowingLabels&&(this.isHorizontal?(l=this.series[a][n]/this.yRatio[this.yaxisIndex],r.width/1.6>l&&(b="")):(o=this.series[a][n]/this.yRatio[this.yaxisIndex],r.height/1.6>o&&(b=""))),d.plotDataLabelsText({x:e,y:i,text:b,i:a,j:n,parent:p,dataLabelsConfig:h,alwaysDrawDataLabel:!0,offsetCorrection:!0})}return p}},{key:"barEndingShape",value:function(t,e,i,s,a){var n=new f(this.ctx);if(this.isHorizontal){var r=null,o=e.x;if(void 0!==i[s][a]||null!==i[s][a]){var l=i[s][a]<0,h=e.barHeight/2-e.strokeWidth;switch(l&&(h=-e.barHeight/2-e.strokeWidth),t.config.chart.stacked||"rounded"===this.barOptions.endingShape&&(o=e.x-h/2),this.barOptions.endingShape){case"flat":r=n.line(o,e.barYPosition+e.barHeight-e.strokeWidth);break;case"rounded":r=n.quadraticCurve(o+h,e.barYPosition+(e.barHeight-e.strokeWidth)/2,o,e.barYPosition+e.barHeight-e.strokeWidth)}}return{path:r,ending_p_from:"",newX:o}}var c=null,d=e.y;if(void 0!==i[s][a]||null!==i[s][a]){var u=i[s][a]<0,g=e.barWidth/2-e.strokeWidth;switch(u&&(g=-e.barWidth/2-e.strokeWidth),t.config.chart.stacked||"rounded"===this.barOptions.endingShape&&(d+=g/2),this.barOptions.endingShape){case"flat":c=n.line(e.barXPosition+e.barWidth-e.strokeWidth,d);break;case"rounded":c=n.quadraticCurve(e.barXPosition+(e.barWidth-e.strokeWidth)/2,d-g,e.barXPosition+e.barWidth-e.strokeWidth,d)}}return{path:c,ending_p_from:"",newY:d}}}]),t}(),M=function(t){function i(){return e(this,i),h(this,o(i).apply(this,arguments))}return r(i,P),s(i,[{key:"draw",value:function(t,e){var i=this.w;this.graphics=new f(this.ctx),this.fill=new S(this.ctx),this.bar=new P(this.ctx,this.xyRatios);var s=new y(this.ctx,i);t=s.getLogSeries(t),this.yRatio=s.getLogYRatios(this.yRatio),this.initVariables(t),"100%"===i.config.chart.stackType&&(t=i.globals.seriesPercent.slice()),this.series=t,this.totalItems=0,this.prevY=[],this.prevX=[],this.prevYF=[],this.prevXF=[],this.prevYVal=[],this.prevXVal=[],this.xArrj=[],this.xArrjF=[],this.xArrjVal=[],this.yArrj=[],this.yArrjF=[],this.yArrjVal=[];for(var a=0;a0&&(this.totalItems+=t[a].length);for(var n=this.graphics.group({class:"apexcharts-bar-series apexcharts-plot-series"}),r=0,o=0,l=0,h=0;l1&&(this.yaxisIndex=w),this.isReversed=i.config.yaxis[this.yaxisIndex]&&i.config.yaxis[this.yaxisIndex].reversed;var k=this.graphics.group({class:"apexcharts-series",seriesName:d.escapeString(i.globals.seriesNames[w]),rel:l+1,"data:realIndex":w}),A=this.graphics.group({class:"apexcharts-datalabels"}),C=0,L=0,z=0,M=this.initialPositions(r,o,g,p,x,b);o=M.y,L=M.barHeight,p=M.yDivision,b=M.zeroW,r=M.x,z=M.barWidth,g=M.xDivision,x=M.zeroH,this.yArrj=[],this.yArrjF=[],this.yArrjVal=[],this.xArrj=[],this.xArrjF=[],this.xArrjVal=[];for(var E=0;E0){var y=o;this.prevXVal[f-1][p]<0?y=this.series[f][p]>=0?this.prevX[f-1][p]+m-2*(this.isReversed?m:0):this.prevX[f-1][p]:this.prevXVal[f-1][p]>=0&&(y=this.series[f][p]>=0?this.prevX[f-1][p]:this.prevX[f-1][p]-m+2*(this.isReversed?m:0)),e=y}else e=o;l=null===this.series[f][p]?e:e+this.series[f][p]/this.invertedYRatio-2*(this.isReversed?this.series[f][p]/this.invertedYRatio:0);var w={barHeight:s,strokeWidth:a,invertedYRatio:this.invertedYRatio,barYPosition:g,x:l},k=this.bar.barEndingShape(u,w,this.series,f,p);if(this.series.length>1&&f!==this.endingShapeOnSeriesNumber&&(k.path=this.graphics.line(k.newX,g+s-a)),this.xArrj.push(k.newX),this.xArrjF.push(Math.abs(e-k.newX)),this.xArrjVal.push(this.series[f][p]),n=this.graphics.move(e,g),r=this.graphics.move(e,g),u.globals.previousPaths.length>0&&(r=this.bar.getPathFrom(x,p,!1)),n=n+this.graphics.line(k.newX,g)+k.path+this.graphics.line(e,g+s-a)+this.graphics.line(e,g),r=r+this.graphics.line(e,g)+this.graphics.line(e,g+s-a)+this.graphics.line(e,g+s-a)+this.graphics.line(e,g+s-a)+this.graphics.line(e,g),u.config.plotOptions.bar.colors.backgroundBarColors.length>0&&0===f){b>=u.config.plotOptions.bar.colors.backgroundBarColors.length&&(b=0);var A=u.config.plotOptions.bar.colors.backgroundBarColors[b],S=this.graphics.drawRect(0,g,u.globals.gridWidth,s,0,A,u.config.plotOptions.bar.colors.backgroundBarOpacity);d.add(S),S.node.classList.add("apexcharts-backgroundBar")}return{pathTo:n,pathFrom:r,x:l,y:h+=c}}},{key:"drawColumnPaths",value:function(t){var e=t.indexes,i=t.x,s=t.y,a=t.xDivision,n=t.pathTo,r=t.pathFrom,o=t.barWidth,l=t.zeroH,h=t.strokeWidth,c=t.elSeries,d=this.w,u=e.i,g=e.j,f=e.realIndex,p=e.bc;if(d.globals.isXNumeric){var x=d.globals.seriesX[u][g];x||(x=0),i=(x-d.globals.minX)/this.xRatio-o/2}for(var b,m=i,v=0,y=0;y0&&!d.globals.isXNumeric||u>0&&d.globals.isXNumeric&&d.globals.seriesX[u-1][g]===d.globals.seriesX[u][g]){var w=this.prevY[u-1][g];b=this.prevYVal[u-1][g]<0?this.series[u][g]>=0?w-v+2*(this.isReversed?v:0):w:this.series[u][g]>=0?w:w+v-2*(this.isReversed?v:0)}else b=d.globals.gridHeight-l;s=b-this.series[u][g]/this.yRatio[this.yaxisIndex]+2*(this.isReversed?this.series[u][g]/this.yRatio[this.yaxisIndex]:0);var k={barWidth:o,strokeWidth:h,yRatio:this.yRatio[this.yaxisIndex],barXPosition:m,y:s},A=this.bar.barEndingShape(d,k,this.series,u,g);if(this.yArrj.push(A.newY),this.yArrjF.push(Math.abs(b-A.newY)),this.yArrjVal.push(this.series[u][g]),n=this.graphics.move(m,b),r=this.graphics.move(m,b),d.globals.previousPaths.length>0&&(r=this.bar.getPathFrom(f,g,!1)),n=n+this.graphics.line(m,A.newY)+A.path+this.graphics.line(m+o-h,b)+this.graphics.line(m-h/2,b),r=r+this.graphics.line(m,b)+this.graphics.line(m+o-h,b)+this.graphics.line(m+o-h,b)+this.graphics.line(m+o-h,b)+this.graphics.line(m-h/2,b),d.config.plotOptions.bar.colors.backgroundBarColors.length>0&&0===u){p>=d.config.plotOptions.bar.colors.backgroundBarColors.length&&(p=0);var S=d.config.plotOptions.bar.colors.backgroundBarColors[p],C=this.graphics.drawRect(m,0,o,d.globals.gridHeight,0,S,d.config.plotOptions.bar.colors.backgroundBarOpacity);c.add(C),C.node.classList.add("apexcharts-backgroundBar")}return i+=a,{pathTo:n,pathFrom:r,x:d.globals.isXNumeric?i-a:i,y:s}}},{key:"checkZeroSeries",value:function(t){for(var e=t.series,i=this.w,s=0;s=0;r--)this.zeroSerieses.indexOf(r)>-1&&r===this.endingShapeOnSeriesNumber&&(this.endingShapeOnSeriesNumber-=1)}}]),i}(),E=function(t){function i(){return e(this,i),h(this,o(i).apply(this,arguments))}return r(i,P),s(i,[{key:"draw",value:function(t,e){var i=this.w,s=new f(this.ctx),a=new S(this.ctx);this.candlestickOptions=this.w.config.plotOptions.candlestick;var n=new y(this.ctx,i);t=n.getLogSeries(t),this.series=t,this.yRatio=n.getLogYRatios(this.yRatio),this.initVariables(t);for(var r=s.group({class:"apexcharts-candlestick-series apexcharts-plot-series"}),o=0,l=0;o0&&(this.visibleI=this.visibleI+1);var k,A,C=0;this.yRatio.length>1&&(this.yaxisIndex=v);var L=this.initialPositions();x=L.y,k=L.barHeight,p=L.x,A=L.barWidth,h=L.xDivision,c=L.zeroH,m.push(p+A/2);for(var z=s.group({class:"apexcharts-datalabels"}),P=0,M=i.globals.dataPoints;P0&&m.push(p+A/2),b.push(x);var X=a.fillPath({seriesNumber:v,color:E,value:t[o][P]}),I=this.candlestickOptions.wick.useFillColor?E:void 0;w=this.renderSeries({realIndex:v,pathFill:X,lineFill:I,j:P,i:o,pathFrom:g,pathTo:u,strokeWidth:C,elSeries:w,x:p,y:x,series:t,barHeight:k,barWidth:A,elDataLabelsWrap:z,visibleSeries:this.visibleI,type:"candlestick"})}i.globals.seriesXvalues[v]=m,i.globals.seriesYvalues[v]=b,r.add(w)}return r}},{key:"drawCandleStickPaths",value:function(t){var e=t.indexes,i=t.x,s=(t.y,t.xDivision),a=t.pathTo,n=t.pathFrom,r=t.barWidth,o=t.zeroH,l=t.strokeWidth,h=this.w,c=new f(this.ctx),d=e.i,u=e.j,g=!0,p=h.config.plotOptions.candlestick.colors.upward,x=h.config.plotOptions.candlestick.colors.downward,b=this.yRatio[this.yaxisIndex],m=e.realIndex,v=this.getOHLCValue(m,u),y=o,w=o;v.o>v.c&&(g=!1);var k=Math.min(v.o,v.c),A=Math.max(v.o,v.c);h.globals.isXNumeric&&(i=(h.globals.seriesX[d][u]-h.globals.minX)/this.xRatio-r/2);var S=i+r*this.visibleI;return void 0===this.series[d][u]||null===this.series[d][u]?k=o:(k=o-k/b,A=o-A/b,y=o-v.h/b,w=o-v.l/b),c.move(S,o),n=c.move(S,k),h.globals.previousPaths.length>0&&(n=this.getPathFrom(m,u,!0)),a=c.move(S,A)+c.line(S+r/2,A)+c.line(S+r/2,y)+c.line(S+r/2,A)+c.line(S+r,A)+c.line(S+r,k)+c.line(S+r/2,k)+c.line(S+r/2,w)+c.line(S+r/2,k)+c.line(S,k)+c.line(S,A-l/2),n+=c.move(S,k),h.globals.isXNumeric||(i+=s),{pathTo:a,pathFrom:n,x:i,y:A,barXPosition:S,color:g?p:x}}},{key:"getOHLCValue",value:function(t,e){var i=this.w;return{o:i.globals.seriesCandleO[t][e],h:i.globals.seriesCandleH[t][e],l:i.globals.seriesCandleL[t][e],c:i.globals.seriesCandleC[t][e]}}}]),i}(),T=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"drawXCrosshairs",value:function(){var t=this.w,e=new f(this.ctx),i=new u(this.ctx),s=t.config.xaxis.crosshairs.fill.gradient,a=t.config.xaxis.crosshairs.dropShadow,n=t.config.xaxis.crosshairs.fill.type,r=s.colorFrom,o=s.colorTo,l=s.opacityFrom,h=s.opacityTo,c=s.stops,g=a.enabled,p=a.left,x=a.top,b=a.blur,m=a.color,v=a.opacity,y=t.config.xaxis.crosshairs.fill.color;if(t.config.xaxis.crosshairs.show){"gradient"===n&&(y=e.drawGradient("vertical",r,o,l,h,null,c,null));var w=e.drawRect();1===t.config.xaxis.crosshairs.width&&(w=e.drawLine()),w.attr({class:"apexcharts-xcrosshairs",x:0,y:0,y2:t.globals.gridHeight,width:d.isNumber(t.config.xaxis.crosshairs.width)?t.config.xaxis.crosshairs.width:0,height:t.globals.gridHeight,fill:y,filter:"none","fill-opacity":t.config.xaxis.crosshairs.opacity,stroke:t.config.xaxis.crosshairs.stroke.color,"stroke-width":t.config.xaxis.crosshairs.stroke.width,"stroke-dasharray":t.config.xaxis.crosshairs.stroke.dashArray}),g&&(w=i.dropShadow(w,{left:p,top:x,blur:b,color:m,opacity:v})),t.globals.dom.elGraphical.add(w)}}},{key:"drawYCrosshairs",value:function(){var t=this.w,e=new f(this.ctx),i=t.config.yaxis[0].crosshairs;if(t.config.yaxis[0].crosshairs.show){var s=e.drawLine(0,0,t.globals.gridWidth,0,i.stroke.color,i.stroke.dashArray,i.stroke.width);s.attr({class:"apexcharts-ycrosshairs"}),t.globals.dom.elGraphical.add(s)}var a=e.drawLine(0,0,t.globals.gridWidth,0,i.stroke.color,0,0);a.attr({class:"apexcharts-ycrosshairs-hidden"}),t.globals.dom.elGraphical.add(a)}}]),t}(),X=function(){function t(i,s){e(this,t),this.ctx=i,this.w=i.w,this.xRatio=s.xRatio,this.yRatio=s.yRatio,this.negRange=!1,this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.rectRadius=this.w.config.plotOptions.heatmap.radius,this.strokeWidth=this.w.config.stroke.width}return s(t,[{key:"draw",value:function(t){var e=this.w,i=new f(this.ctx),s=i.group({class:"apexcharts-heatmap"});s.attr("clip-path","url(#gridRectMask".concat(e.globals.cuid,")"));var a=e.globals.gridWidth/e.globals.dataPoints,n=e.globals.gridHeight/e.globals.series.length,r=0,o=!1;this.checkColorRange();var l=t.slice();e.config.yaxis[0].reversed&&(o=!0,l.reverse());for(var h=o?0:l.length-1;o?h=0;o?h++:h--){var c=i.group({class:"apexcharts-series apexcharts-heatmap-series",seriesName:d.escapeString(e.globals.seriesNames[h]),rel:h+1,"data:realIndex":h});if(e.config.chart.dropShadow.enabled){var g=e.config.chart.dropShadow;new u(this.ctx).dropShadow(c,g,h)}for(var p=0,x=0;x0&&e.colorScale.ranges.map(function(e,i){e.from<0&&(t.negRange=!0)})}},{key:"determineHeatColor",value:function(t,e){var i=this.w,s=i.globals.series[t][e],a=i.config.plotOptions.heatmap,n=a.colorScale.inverse?e:t,r=i.globals.colors[n],o=Math.min.apply(Math,c(i.globals.series[t])),l=Math.max.apply(Math,c(i.globals.series[t]));a.distributed||(o=i.globals.minY,l=i.globals.maxY),void 0!==a.colorScale.min&&(o=a.colorScale.mini.globals.maxY?a.colorScale.max:i.globals.maxY);var h=Math.abs(l)+Math.abs(o),d=100*s/(0===h?h-1e-6:h);a.colorScale.ranges.length>0&&a.colorScale.ranges.map(function(t,e){if(s>=t.from&&s<=t.to){r=t.color,o=t.from,l=t.to;var i=Math.abs(l)+Math.abs(o);d=100*s/(0===i?i-1e-6:i)}});return{color:r,percent:d}}},{key:"calculateHeatmapDataLabels",value:function(t){var e=t.x,i=t.y,s=t.i,a=t.j,n=(t.series,t.rectHeight),r=t.rectWidth,o=this.w,l=o.config.dataLabels,h=new f(this.ctx),c=new z(this.ctx),d=l.formatter,u=null;if(l.enabled){u=h.group({class:"apexcharts-data-labels"});var g=l.offsetX,p=l.offsetY,x=e+r/2+g,b=i+n/2+parseInt(l.style.fontSize)/3+p,m=d(o.globals.series[s][a],{seriesIndex:s,dataPointIndex:a,w:o});c.plotDataLabelsText({x:x,y:b,text:m,i:s,j:a,parent:u,dataLabelsConfig:l})}return u}},{key:"animateHeatMap",value:function(t,e,i,s,a,n){var r=this;new g(this.ctx).animateRect(t,{x:e+s/2,y:i+a/2,width:0,height:0},{x:e,y:i,width:s,height:a},n,function(){r.w.globals.animationEnded=!0})}},{key:"animateHeatColor",value:function(t,e,i,s){t.attr({fill:e}).animate(s).attr({fill:i})}}]),t}(),I=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animBeginArr=[0],this.animDur=0,this.donutDataLabels=this.w.config.plotOptions.pie.donut.labels;var s=this.w;this.lineColorArr=void 0!==s.globals.stroke.colors?s.globals.stroke.colors:s.globals.colors,this.defaultSize=s.globals.svgHeightthis.fullAngle?e.endAngle=e.endAngle-(s+r):s+r=360&&(l=359.99);var h=Math.PI*(l-90)/180,c=e.centerX+a*Math.cos(o),u=e.centerY+a*Math.sin(o),g=e.centerX+a*Math.cos(h),f=e.centerY+a*Math.sin(h),p=d.polarToCartesian(e.centerX,e.centerY,e.donutSize,l),x=d.polarToCartesian(e.centerX,e.centerY,e.donutSize,r),b=s>180?1:0;return"donut"===n.config.chart.type?["M",c,u,"A",a,a,0,b,1,g,f,"L",p.x,p.y,"A",e.donutSize,e.donutSize,0,b,0,x.x,x.y,"L",c,u,"z"].join(" "):"pie"===n.config.chart.type?["M",c,u,"A",a,a,0,b,1,g,f,"L",e.centerX,e.centerY,"L",c,u].join(" "):["M",c,u,"A",a,a,0,b,1,g,f].join(" ")}},{key:"renderInnerDataLabels",value:function(t,e){var i=this.w,s=new f(this.ctx),a=s.group({class:"apexcharts-datalabels-group",transform:"translate(".concat(e.translateX?e.translateX:0,", ").concat(e.translateY?e.translateY:0,")")}),n=t.total.show;a.node.style.opacity=e.opacity;var r,o,l=e.centerX,h=e.centerY;r=void 0===t.name.color?i.globals.colors[0]:t.name.color,o=void 0===t.value.color?i.config.chart.foreColor:t.value.color;var c=t.value.formatter,d="",u="";if(n?(r=t.total.color,u=t.total.label,d=t.total.formatter(i)):1===i.globals.series.length&&(d=c(i.globals.series[0],i),u=i.globals.seriesNames[0]),t.name.show){var g=s.drawText({x:l,y:h+parseInt(t.name.offsetY),text:u,textAnchor:"middle",foreColor:r,fontSize:t.name.fontSize,fontFamily:t.name.fontFamily});g.node.classList.add("apexcharts-datalabel-label"),a.add(g)}if(t.value.show){var p=t.name.show?parseInt(t.value.offsetY)+16:t.value.offsetY,x=s.drawText({x:l,y:h+p,text:d,textAnchor:"middle",foreColor:o,fontSize:t.value.fontSize,fontFamily:t.value.fontFamily});x.node.classList.add("apexcharts-datalabel-value"),a.add(x)}return a}},{key:"printInnerLabels",value:function(t,e,i,s){var a,n=this.w;s?a=void 0===t.name.color?n.globals.colors[parseInt(s.parentNode.getAttribute("rel"))-1]:t.name.color:n.globals.series.length>1&&t.total.show&&(a=t.total.color);var r=n.globals.dom.baseEl.querySelector(".apexcharts-datalabel-label"),o=n.globals.dom.baseEl.querySelector(".apexcharts-datalabel-value");i=(0,t.value.formatter)(i,n),s||"function"!=typeof t.total.formatter||(i=t.total.formatter(n)),null!==r&&(r.textContent=e),null!==o&&(o.textContent=i),null!==r&&(r.style.fill=a)}},{key:"printDataLabelsInner",value:function(t,e){var i=this.w,s=t.getAttribute("data:value"),a=i.globals.seriesNames[parseInt(t.parentNode.getAttribute("rel"))-1];i.globals.series.length>1&&this.printInnerLabels(e,a,s,t);var n=i.globals.dom.baseEl.querySelector(".apexcharts-datalabels-group");null!==n&&(n.style.opacity=1)}},{key:"revertDataLabelsInner",value:function(e,i,s){var a=this,n=this.w,r=n.globals.dom.baseEl.querySelector(".apexcharts-datalabels-group");if(i.total.show&&n.globals.series.length>1){new t(this.ctx).printInnerLabels(i,i.total.label,i.total.formatter(n))}else{var o=document.querySelectorAll(".apexcharts-pie-area"),l=!1;if(o.forEach(function(t){"true"===t.getAttribute("data:pieClicked")&&(l=!0,a.printDataLabelsInner(t,i))}),!l)if(n.globals.selectedDataPoints.length&&n.globals.series.length>1)if(n.globals.selectedDataPoints[0].length>0){var h=n.globals.selectedDataPoints[0],c=n.globals.dom.baseEl.querySelector("#apexcharts-".concat(n.config.chart.type.toLowerCase(),"-slice-").concat(h));this.printDataLabelsInner(c,i)}else r&&n.globals.selectedDataPoints.length&&0===n.globals.selectedDataPoints[0].length&&(r.style.opacity=0);else r&&n.globals.series.length>1&&(r.style.opacity=0)}}}]),t}(),Y=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animDur=0;var s=this.w;this.graphics=new f(this.ctx),this.lineColorArr=void 0!==s.globals.stroke.colors?s.globals.stroke.colors:s.globals.colors,this.defaultSize=s.globals.svgHeight0&&(f=e.getPathFrom(r));for(var p=0;p=10?n[h].x>0?(i="start",r+=10):n[h].x<0&&(i="end",r-=10):i="middle",Math.abs(n[h].y)>=t.size-10&&(n[h].y<0?o-=10:n[h].y>0&&(o+=10));var u=c(l,{seriesIndex:-1,dataPointIndex:h,w:e});d.plotDataLabelsText({x:r,y:o,text:u,textAnchor:i,i:h,j:h,parent:a,dataLabelsConfig:s,offsetCorrection:!1})}}),a}},{key:"createPaths",value:function(t,e){var i=this,s=[],a=[],n=[],r=[];if(t.length){a=[this.graphics.move(e.x,e.y)],r=[this.graphics.move(e.x,e.y)];var o=this.graphics.move(t[0].x,t[0].y),l=this.graphics.move(t[0].x,t[0].y);t.forEach(function(e,s){o+=i.graphics.line(e.x,e.y),l+=i.graphics.line(e.x,e.y),s===t.length-1&&(o+="Z",l+="Z")}),s.push(o),n.push(l)}return{linePathsFrom:a,linePathsTo:s,areaPathsFrom:r,areaPathsTo:n}}},{key:"getPathFrom",value:function(t){for(var e=this.w,i=null,s=0;s0&&parseInt(a.realIndex)===parseInt(t)&&void 0!==e.globals.previousPaths[s].paths[0]&&(i=e.globals.previousPaths[s].paths[0].d)}return i}},{key:"getDataPointsPos",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.dataPointsLen;t=t||[],e=e||[];for(var s=[],a=0;a=360&&(g=360-Math.abs(this.startAngle)-.1);var p=i.drawPath({d:"",stroke:c,strokeWidth:r*parseInt(h.strokeWidth)/100,fill:"none",strokeOpacity:h.opacity,classes:"apexcharts-radialbar-area"});if(h.dropShadow.enabled){var x=h.dropShadow;a.dropShadow(p,x)}l.add(p),p.attr("id","apexcharts-radialbarTrack-"+o),new I(this.ctx).animatePaths(p,{centerX:t.centerX,centerY:t.centerY,endAngle:g,startAngle:d,size:t.size,i:o,totalItems:2,animBeginArr:0,dur:0,isTrack:!0,easing:e.globals.easing})}return s}},{key:"drawArcs",value:function(t){var e=this.w,i=new f(this.ctx),s=new S(this.ctx),a=new u(this.ctx),n=i.group(),r=this.getStrokeWidth(t);t.size=t.size-r/2;var o=e.config.plotOptions.radialBar.hollow.background,l=t.size-r*t.series.length-this.margin*t.series.length-r*parseInt(e.config.plotOptions.radialBar.track.strokeWidth)/100/2,h=l-e.config.plotOptions.radialBar.hollow.margin;void 0!==e.config.plotOptions.radialBar.hollow.image&&(o=this.drawHollowImage(t,n,l,o));var c=this.drawHollow({size:h,centerX:t.centerX,centerY:t.centerY,fill:o});if(e.config.plotOptions.radialBar.hollow.dropShadow.enabled){var g=e.config.plotOptions.radialBar.hollow.dropShadow;a.dropShadow(c,g)}var p=1;!this.radialDataLabels.total.show&&e.globals.series.length>1&&(p=0);var x=new I(this.ctx),b=null;this.radialDataLabels.show&&(b=x.renderInnerDataLabels(this.radialDataLabels,{hollowSize:l,centerX:t.centerX,centerY:t.centerY,opacity:p})),"back"===e.config.plotOptions.radialBar.hollow.position&&(n.add(c),b&&n.add(b));var m=!1;e.config.plotOptions.radialBar.inverseOrder&&(m=!0);for(var v=m?t.series.length-1:0;m?v>=0:v100?100:t.series[v])/100,z=Math.round(C*L)+this.startAngle,P=void 0;e.globals.dataChanged&&(A=this.startAngle,P=Math.round(C*d.negToZero(e.globals.previousPaths[v])/100)+A),Math.abs(z)+Math.abs(k)>=360&&(z-=.01),Math.abs(P)+Math.abs(A)>=360&&(P-=.01);var M=z-k,E=Array.isArray(e.config.stroke.dashArray)?e.config.stroke.dashArray[v]:e.config.stroke.dashArray,T=i.drawPath({d:"",stroke:w,strokeWidth:r,fill:"none",fillOpacity:e.config.fill.opacity,classes:"apexcharts-radialbar-area",strokeDashArray:E});if(f.setAttrs(T.node,{"data:angle":M,"data:value":t.series[v]}),e.config.chart.dropShadow.enabled){var X=e.config.chart.dropShadow;a.dropShadow(T,X,v)}this.addListeners(T,this.radialDataLabels);var Y=new I(this.ctx);y.add(T),T.attr({id:"apexcharts-radialbar-slice-"+v,index:0,j:v});var F=0;!Y.initialAnim||e.globals.resized||e.globals.dataChanged||(F=(z-k)/360*e.config.chart.animations.speed,this.animDur=F/(1.2*t.series.length)+this.animDur,this.animBeginArr.push(this.animDur)),e.globals.dataChanged&&(F=(z-k)/360*e.config.chart.animations.dynamicAnimation.speed,this.animDur=F/(1.2*t.series.length)+this.animDur,this.animBeginArr.push(this.animDur)),Y.animatePaths(T,{centerX:t.centerX,centerY:t.centerY,endAngle:z,startAngle:k,prevEndAngle:P,prevStartAngle:A,size:t.size,i:v,totalItems:2,animBeginArr:this.animBeginArr,dur:F,shouldSetPrevPaths:!0,easing:e.globals.easing})}return{g:n,elHollow:c,dataLabels:b}}},{key:"drawHollow",value:function(t){var e=new f(this.ctx).drawCircle(2*t.size);return e.attr({class:"apexcharts-radialbar-hollow",cx:t.centerX,cy:t.centerY,r:t.size,fill:t.fill}),e}},{key:"drawHollowImage",value:function(t,e,i,s){var a=this.w,n=new S(this.ctx),r=(Math.random()+1).toString(36).substring(4),o=a.config.plotOptions.radialBar.hollow.image;if(a.config.plotOptions.radialBar.hollow.imageClipped)n.clippedImgArea({width:i,height:i,image:o,patternID:"pattern".concat(a.globals.cuid).concat(r)}),s="url(#pattern".concat(a.globals.cuid).concat(r,")");else{var l=a.config.plotOptions.radialBar.hollow.imageWidth,h=a.config.plotOptions.radialBar.hollow.imageHeight;if(void 0===l&&void 0===h){var c=a.globals.dom.Paper.image(o).loaded(function(e){this.move(t.centerX-e.width/2+a.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-e.height/2+a.config.plotOptions.radialBar.hollow.imageOffsetY)});e.add(c)}else{var d=a.globals.dom.Paper.image(o).loaded(function(e){this.move(t.centerX-l/2+a.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-h/2+a.config.plotOptions.radialBar.hollow.imageOffsetY),this.size(l,h)});e.add(d)}}return s}},{key:"getStrokeWidth",value:function(t){var e=this.w;return t.size*(100-parseInt(e.config.plotOptions.radialBar.hollow.size))/100/(t.series.length+1)-this.margin}}]),i}(),R=function(t){function i(){return e(this,i),h(this,o(i).apply(this,arguments))}return r(i,P),s(i,[{key:"draw",value:function(t,e){var i=this.w,s=new f(this.ctx),a=new S(this.ctx);this.rangeBarOptions=this.w.config.plotOptions.rangeBar,this.series=t,this.seriesRangeStart=i.globals.seriesRangeStart,this.seriesRangeEnd=i.globals.seriesRangeEnd,this.initVariables(t);for(var n=s.group({class:"apexcharts-rangebar-series apexcharts-plot-series"}),r=0,o=0;r0&&(this.visibleI=this.visibleI+1);var k=0,A=0,C=0;this.yRatio.length>1&&(this.yaxisIndex=y);var L=this.initialPositions();b=L.y,h=L.yDivision,A=L.barHeight,u=L.zeroW,x=L.x,C=L.barWidth,l=L.xDivision,c=L.zeroH,v.push(x+C/2);for(var z=s.group({class:"apexcharts-datalabels"}),P=0,M=i.globals.dataPoints;P0&&v.push(x+C/2),m.push(b);var T=a.fillPath({seriesNumber:y}),X=i.globals.stroke.colors[y];w=this.renderSeries({realIndex:y,pathFill:T,lineFill:X,j:P,i:r,pathFrom:p,pathTo:g,strokeWidth:k,elSeries:w,x:x,y:b,series:t,barHeight:A,barWidth:C,elDataLabelsWrap:z,visibleSeries:this.visibleI,type:"rangebar"})}i.globals.seriesXvalues[y]=v,i.globals.seriesYvalues[y]=m,n.add(w)}return n}},{key:"drawRangeColumnPaths",value:function(t){var e=t.indexes,i=t.x,s=(t.y,t.strokeWidth),a=t.xDivision,n=t.pathTo,r=t.pathFrom,o=t.barWidth,l=t.zeroH,h=this.w,c=new f(this.ctx),d=e.i,u=e.j,g=this.yRatio[this.yaxisIndex],p=e.realIndex,x=this.getRangeValue(p,u),b=Math.min(x.start,x.end),m=Math.max(x.start,x.end);h.globals.isXNumeric&&(i=(h.globals.seriesX[d][u]-h.globals.minX)/this.xRatio-o/2);var v=i+o*this.visibleI;void 0===this.series[d][u]||null===this.series[d][u]?b=l:(b=l-b/g,m=l-m/g);var y=Math.abs(m-b);return c.move(v,l),r=c.move(v,b),h.globals.previousPaths.length>0&&(r=this.getPathFrom(p,u,!0)),n=c.move(v,m)+c.line(v+o,m)+c.line(v+o,b)+c.line(v,b)+c.line(v,m-s/2),r=r+c.move(v,b)+c.line(v+o,b)+c.line(v+o,b)+c.line(v,b),h.globals.isXNumeric||(i+=a),{pathTo:n,pathFrom:r,barHeight:y,x:i,y:m,barXPosition:v}}},{key:"drawRangeBarPaths",value:function(t){var e=t.indexes,i=(t.x,t.y),s=t.yDivision,a=t.pathTo,n=t.pathFrom,r=t.barHeight,o=t.zeroW,l=this.w,h=new f(this.ctx),c=e.i,d=e.j,u=e.realIndex,g=o,p=o;l.globals.isXNumeric&&(i=(l.globals.seriesX[c][d]-l.globals.minX)/this.invertedXRatio-r);var x=i+r*this.visibleI;void 0!==this.series[c][d]&&null!==this.series[c][d]&&(g=o+this.seriesRangeStart[c][d]/this.invertedYRatio,p=o+this.seriesRangeEnd[c][d]/this.invertedYRatio),h.move(o,x),n=h.move(o,x),l.globals.previousPaths.length>0&&(n=this.getPathFrom(u,d));var b=Math.abs(p-g);return a=h.move(g,x)+h.line(p,x)+h.line(p,x+r)+h.line(g,x+r)+h.line(g,x),n=n+h.line(g,x)+h.line(g,x+r)+h.line(g,x+r)+h.line(g,x),l.globals.isXNumeric||(i+=s),{pathTo:a,pathFrom:n,barWidth:b,x:p,y:i,barYPosition:x}}},{key:"getRangeValue",value:function(t,e){var i=this.w;return{start:i.globals.seriesRangeStart[t][e],end:i.globals.seriesRangeEnd[t][e]}}}]),i}(),D=function(){function t(i,s,a){e(this,t),this.ctx=i,this.w=i.w,this.xyRatios=s,this.pointsChart=!("bubble"!==this.w.config.chart.type&&"scatter"!==this.w.config.chart.type)||a,this.scatter=new L(this.ctx),this.noNegatives=this.w.globals.minX===Number.MAX_VALUE,this.yaxisIndex=0}return s(t,[{key:"draw",value:function(t,e,i){var s=this.w,a=new f(this.ctx),r=new S(this.ctx),o=s.globals.comboCharts?e:s.config.chart.type,l=a.group({class:"apexcharts-".concat(o,"-series apexcharts-plot-series")}),h=new y(this.ctx,s);t=h.getLogSeries(t);var c=this.xyRatios.yRatio;c=h.getLogYRatios(c);for(var u=this.xyRatios.zRatio,g=this.xyRatios.xRatio,p=this.xyRatios.baseLineY,x=[],b=[],m=0,v=0;v1&&(this.yaxisIndex=A),this.isReversed=s.config.yaxis[this.yaxisIndex]&&s.config.yaxis[this.yaxisIndex].reversed;var L=[],P=[],M=s.globals.gridHeight-p[this.yaxisIndex]-(this.isReversed?s.globals.gridHeight:0)+(this.isReversed?2*p[this.yaxisIndex]:0),E=M;M>s.globals.gridHeight&&(E=s.globals.gridHeight),m=k/2;var T=s.globals.padHorizontal+m,X=1;s.globals.isXNumeric&&s.globals.seriesX.length>0&&(T=(s.globals.seriesX[A][0]-s.globals.minX)/g),P.push(T);var I=void 0,Y=void 0,F=void 0,R=void 0,D=[],N=[],O=a.group({class:"apexcharts-series",seriesName:d.escapeString(s.globals.seriesNames[A])}),H=a.group({class:"apexcharts-series-markers-wrap"}),W=a.group({class:"apexcharts-datalabels"});this.ctx.series.addCollapsedClassToSeries(O,A);var B=t[v].length===s.globals.dataPoints;O.attr({"data:longestSeries":B,rel:v+1,"data:realIndex":A}),this.appendPathFrom=!0;var V=T,G=void 0,_=V,j=M,U=0;if(j=this.determineFirstPrevY({i:v,series:t,yRatio:c[this.yaxisIndex],zeroY:M,prevY:j,prevSeriesY:b,lineYPosition:U}).prevY,L.push(j),G=j,null===t[v][0]){for(var q=0;q0){var Z=this.checkPreviousPaths({pathFromLine:F,pathFromArea:R,realIndex:A});F=Z.pathFromLine,R=Z.pathFromArea}for(var $=s.globals.dataPoints>1?s.globals.dataPoints-1:s.globals.dataPoints,J=0;J<$;J++){if(s.globals.isXNumeric){var Q=s.globals.seriesX[A][J+1];void 0===s.globals.seriesX[A][J+1]&&(Q=s.globals.seriesX[A][$-1]),T=(Q-s.globals.minX)/g}else T+=k;var K=d.isNumber(s.globals.minYArr[A])?s.globals.minYArr[A]:s.globals.minY;s.config.chart.stacked?(U=v>0&&s.globals.collapsedSeries.length1&&H.node.classList.add("hidden");var st=it.plotChartMarkers(et,A,J+1);null!==st&&H.add(st)}var at=!t[v][J+1]||t[v][J+1]>t[v][J]?"top":"bottom",nt=new z(this.ctx).drawDataLabel(et,A,J+1,null,at);null!==nt&&W.add(nt)}b.push(L),s.globals.seriesXvalues[A]=P,s.globals.seriesYvalues[A]=L,this.pointsChart||s.globals.delayedElements.push({el:H.node,index:A});var rt={i:v,realIndex:A,animationDelay:v,initialSpeed:s.config.chart.animations.speed,dataChangeSpeed:s.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(o),id:"apexcharts-".concat(o)};if("area"===o)for(var ot=r.fillPath({seriesNumber:A}),lt=0;lt0;gt--)l.add(x[gt-1]);return l}},{key:"createPaths",value:function(t){var e=t.series,i=t.i,s=t.j,a=t.x,n=t.y,r=t.pX,o=t.pY,l=t.xDivision,h=t.areaBottomY,c=t.linePath,d=t.areaPath,u=t.linePaths,g=t.areaPaths,p=t.seriesIndex,x=this.w,b=new f(this.ctx),m=x.config.stroke.curve;if(Array.isArray(x.config.stroke.curve)&&(m=Array.isArray(p)?x.config.stroke.curve[p[i]]:x.config.stroke.curve[i]),"smooth"===m){var v=.35*(a-r);x.globals.hasNullValues?(null!==e[i][s]&&(null!==e[i][s+1]?(c=b.move(r,o)+b.curve(r+v,o,a-v,n,a+1,n),d=b.move(r+1,o)+b.curve(r+v,o,a-v,n,a+1,n)+b.line(a,h)+b.line(r,h)+"z"):(c=b.move(r,o),d=b.move(r,o)+"z")),u.push(c),g.push(d)):(c+=b.curve(r+v,o,a-v,n,a,n),d+=b.curve(r+v,o,a-v,n,a,n)),r=a,o=n,s===e[i].length-2&&(d=d+b.curve(r,o,a,n,a,h)+b.move(a,n)+"z",x.globals.hasNullValues||(u.push(c),g.push(d)))}else null===e[i][s+1]&&(c+=b.move(a,n),d=d+b.line(a-l,h)+b.move(a,n)),null===e[i][s]&&(c+=b.move(a,n),d+=b.move(a,h)),"stepline"===m?(c=c+b.line(a,null,"H")+b.line(null,n,"V"),d=d+b.line(a,null,"H")+b.line(null,n,"V")):"straight"===m&&(c+=b.line(a,n),d+=b.line(a,n)),s===e[i].length-2&&(d=d+b.line(a,h)+b.move(a,n)+"z",u.push(c),g.push(d));return{linePaths:u,areaPaths:g,pX:r,pY:o,linePath:c,areaPath:d}}},{key:"calculatePoints",value:function(t){var e=t.series,i=t.realIndex,s=t.x,a=t.y,n=t.i,r=t.j,o=t.prevY,l=t.categoryAxisCorrection,h=t.xRatio,c=this.w,u=[],g=[];if(0===r){var f=l+c.config.markers.offsetX;c.globals.isXNumeric&&(f=(c.globals.seriesX[i][0]-c.globals.minX)/h+c.config.markers.offsetX),u.push(f),g.push(d.isNumber(e[n][0])?o+c.config.markers.offsetY:null),u.push(s+c.config.markers.offsetX),g.push(d.isNumber(e[n][r+1])?a+c.config.markers.offsetY:null)}else u.push(s+c.config.markers.offsetX),g.push(d.isNumber(e[n][r+1])?a+c.config.markers.offsetY:null);return{x:u,y:g}}},{key:"checkPreviousPaths",value:function(t){for(var e=t.pathFromLine,i=t.pathFromArea,s=t.realIndex,a=this.w,n=0;n0&&parseInt(r.realIndex)===parseInt(s)&&("line"===r.type?(this.appendPathFrom=!1,e=a.globals.previousPaths[n].paths[0].d):"area"===r.type&&(this.appendPathFrom=!1,i=a.globals.previousPaths[n].paths[0].d,a.config.stroke.show&&(e=a.globals.previousPaths[n].paths[1].d)))}return{pathFromLine:e,pathFromArea:i}}},{key:"determineFirstPrevY",value:function(t){var e=t.i,i=t.series,s=t.yRatio,a=t.zeroY,n=t.prevY,r=t.prevSeriesY,o=t.lineYPosition,l=this.w;if(void 0!==i[e][0])n=l.config.chart.stacked?(o=e>0?r[e-1][0]:a)-i[e][0]/s+2*(this.isReversed?i[e][0]/s:0):a-i[e][0]/s+2*(this.isReversed?i[e][0]/s:0);else if(l.config.chart.stacked&&e>0&&void 0===i[e][0])for(var h=e-1;h>=0;h--)if(null!==i[h][0]&&void 0!==i[h][0]){n=o=r[h][0];break}return{prevY:n,lineYPosition:o}}}]),t}(),N=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.tooltipKeyFormat="dd MMM"}return s(t,[{key:"xLabelFormat",value:function(t,e){var i=this.w;if("datetime"===i.config.xaxis.type&&void 0===i.config.tooltip.x.formatter)return new m(this.ctx).formatDate(new Date(e),i.config.tooltip.x.format,!0,!0);return t(e)}},{key:"setLabelFormatters",value:function(){var t=this.w;return t.globals.xLabelFormatter=function(t){return t},t.globals.xaxisTooltipFormatter=function(t){return t},t.globals.ttKeyFormatter=function(t){return t},t.globals.ttZFormatter=function(t){return t},t.globals.legendFormatter=function(t){return t},"function"==typeof t.config.tooltip.x.formatter&&(t.globals.ttKeyFormatter=t.config.tooltip.x.formatter),"function"==typeof t.config.xaxis.tooltip.formatter&&(t.globals.xaxisTooltipFormatter=t.config.xaxis.tooltip.formatter),Array.isArray(t.config.tooltip.y)?t.globals.ttVal=t.config.tooltip.y:void 0!==t.config.tooltip.y.formatter&&(t.globals.ttVal=t.config.tooltip.y),void 0!==t.config.tooltip.z.formatter&&(t.globals.ttZFormatter=t.config.tooltip.z.formatter),void 0!==t.config.legend.formatter&&(t.globals.legendFormatter=t.config.legend.formatter),void 0!==t.config.xaxis.labels.formatter?t.globals.xLabelFormatter=t.config.xaxis.labels.formatter:t.globals.xLabelFormatter=function(e){return d.isNumber(e)?"numeric"===t.config.xaxis.type&&t.globals.dataPoints<50?e.toFixed(1):e.toFixed(0):e},t.config.yaxis.forEach(function(e,i){void 0!==e.labels.formatter?t.globals.yLabelFormatters[i]=e.labels.formatter:t.globals.yLabelFormatters[i]=function(i){return d.isNumber(i)?0!==t.globals.yValueDecimal?i.toFixed(void 0!==e.decimalsInFloat?e.decimalsInFloat:t.globals.yValueDecimal):t.globals.maxY-t.globals.minY<5?i.toFixed(1):i.toFixed(0):i}}),t.globals}},{key:"heatmapLabelFormatters",value:function(){var t=this.w;if("heatmap"===t.config.chart.type){t.globals.yAxisScale[0].result=t.globals.seriesNames.slice();var e=t.globals.seriesNames.reduce(function(t,e){return t.length>e.length?t:e},0);t.globals.yAxisScale[0].niceMax=e,t.globals.yAxisScale[0].niceMin=e}}}]),t}(),O=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"getLabel",value:function(t,e,i,s){var a,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],r=this.w,o=void 0===t[s]?"":t[s],l=r.globals.xLabelFormatter,h=r.config.xaxis.labels.formatter;return a=new N(this.ctx).xLabelFormat(l,o),void 0!==h&&(a=h(o,t[s],s)),e.length>0?(i=e[s].position,a=e[s].value):"datetime"===r.config.xaxis.type&&void 0===h&&(a=""),void 0===a&&(a=""),(0===(a=a.toString()).indexOf("NaN")||0===a.toLowerCase().indexOf("invalid")||a.toLowerCase().indexOf("infinity")>=0||n.indexOf(a)>=0&&!r.config.xaxis.labels.showDuplicates)&&(a=""),{x:i,text:a}}},{key:"drawYAxisTicks",value:function(t,e,i,s,a,n,r){var o=this.w,l=new f(this.ctx),h=o.globals.translateY;if(s.show){!0===o.config.yaxis[a].opposite&&(t+=s.width);for(var c=e;c>=0;c--){var d=h+e/10+o.config.yaxis[a].labels.offsetY-1;o.globals.isBarHorizontal&&(d=n*c);var u=l.drawLine(t+i.offsetX-s.width+s.offsetX,d+s.offsetY,t+i.offsetX+s.offsetX,d+s.offsetY,i.color);r.add(u),h+=n}}}}]),t}(),H=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w;var s=this.w;this.xaxisLabels=s.globals.labels.slice(),s.globals.timelineLabels.length>0&&(this.xaxisLabels=s.globals.timelineLabels.slice()),this.drawnLabels=[],"top"===s.config.xaxis.position?this.offY=0:this.offY=s.globals.gridHeight+1,this.offY=this.offY+s.config.xaxis.axisBorder.offsetY,this.xaxisFontSize=s.config.xaxis.labels.style.fontSize,this.xaxisFontFamily=s.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=s.config.xaxis.labels.style.colors,this.xaxisBorderWidth=s.config.xaxis.axisBorder.width,this.xaxisBorderWidth.indexOf("%")>-1?this.xaxisBorderWidth=s.globals.gridWidth*parseInt(this.xaxisBorderWidth)/100:this.xaxisBorderWidth=parseInt(this.xaxisBorderWidth),this.xaxisBorderHeight=s.config.xaxis.axisBorder.height,this.yaxis=s.config.yaxis[0],this.axesUtils=new O(i)}return s(t,[{key:"drawXaxis",value:function(){var t,e=this.w,i=new f(this.ctx),s=i.group({class:"apexcharts-xaxis",transform:"translate(".concat(e.config.xaxis.offsetX,", ").concat(e.config.xaxis.offsetY,")")}),a=i.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(e.globals.translateXAxisX,", ").concat(e.globals.translateXAxisY,")")});s.add(a);for(var n=e.globals.padHorizontal,r=[],o=0;oi.globals.gridWidth)){var a=this.offY+i.config.xaxis.axisTicks.offsetY,n=a+i.config.xaxis.axisTicks.height;if(i.config.xaxis.axisTicks.show){var r=new f(this.ctx).drawLine(t+i.config.xaxis.axisTicks.offsetX,a+i.config.xaxis.offsetY,s+i.config.xaxis.axisTicks.offsetX,n+i.config.xaxis.offsetY,i.config.xaxis.axisTicks.color);e.add(r),r.node.classList.add("apexcharts-xaxis-tick")}}}},{key:"getXAxisTicksPositions",value:function(){var t=this.w,e=[],i=this.xaxisLabels.length,s=t.globals.padHorizontal;if(t.globals.timelineLabels.length>0)for(var a=0;a0){var u=a[a.length-1].getBBox(),g=a[0].getBBox();u.x<-20&&a[a.length-1].parentNode.removeChild(a[a.length-1]),g.x+g.width>t.globals.gridWidth&&a[0].parentNode.removeChild(a[0]);for(var p=0;p=0;u--){var g=d[u];g=c(g,u);var p=e.config.yaxis[t].labels.padding;e.config.yaxis[t].opposite&&0!==e.config.yaxis.length&&(p*=-1);var x=i.drawText({x:p,y:h+o/10+e.config.yaxis[t].labels.offsetY+1,text:g,textAnchor:e.config.yaxis[t].opposite?"start":"end",fontSize:s,fontFamily:a,foreColor:e.config.yaxis[t].labels.style.color,cssClass:"apexcharts-yaxis-label "+e.config.yaxis[t].labels.style.cssClass});r.add(x);var b=i.rotateAroundCenter(x.node);0!==e.config.yaxis[t].labels.rotate&&x.node.setAttribute("transform","rotate(".concat(e.config.yaxis[t].labels.rotate," ").concat(b.x," ").concat(b.y,")")),h+=l}if(void 0!==e.config.yaxis[t].title.text){var m=i.group({class:"apexcharts-yaxis-title"}),v=0;e.config.yaxis[t].opposite&&(v=e.globals.translateYAxisX[t]);var y=i.drawText({x:v,y:e.globals.gridHeight/2+e.globals.translateY,text:e.config.yaxis[t].title.text,textAnchor:"end",foreColor:e.config.yaxis[t].title.style.color,fontSize:e.config.yaxis[t].title.style.fontSize,fontFamily:e.config.yaxis[t].title.style.fontFamily,cssClass:"apexcharts-yaxis-title-text "+e.config.yaxis[t].title.style.cssClass});m.add(y),n.add(m)}var w=e.config.yaxis[t].axisBorder;if(w.show){var k=31+w.offsetX;e.config.yaxis[t].opposite&&(k=-31-w.offsetX);var A=i.drawLine(k,e.globals.translateY+w.offsetY-2,k,e.globals.gridHeight+e.globals.translateY+w.offsetY+2,w.color);n.add(A),this.axesUtils.drawYAxisTicks(k,o,w,e.config.yaxis[t].axisTicks,t,l,n)}return n}},{key:"drawYaxisInversed",value:function(t){var e=this.w,i=new f(this.ctx),s=i.group({class:"apexcharts-xaxis apexcharts-yaxis-inversed"}),a=i.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(e.globals.translateXAxisX,", ").concat(e.globals.translateXAxisY,")")});s.add(a);var n=e.globals.yAxisScale[t].result.length-1,r=e.globals.gridWidth/n+.1,o=r+e.config.xaxis.labels.offsetX,l=e.globals.xLabelFormatter,h=e.globals.yAxisScale[t].result.slice(),c=e.globals.invertedTimelineLabels;c.length>0&&(this.xaxisLabels=c.slice(),n=(h=c.slice()).length),e.config.yaxis[t]&&e.config.yaxis[t].reversed&&h.reverse();var d=c.length;if(e.config.xaxis.labels.show)for(var u=d?0:n;d?u=0;d?u++:u--){var g=h[u];g=l(g,u);var p=e.globals.gridWidth+e.globals.padHorizontal-(o-r+e.config.xaxis.labels.offsetX);if(c.length){var x=this.axesUtils.getLabel(h,c,p,u,this.drawnLabels);p=x.x,g=x.text,this.drawnLabels.push(x.text)}var b=i.drawText({x:p,y:this.xAxisoffX+e.config.xaxis.labels.offsetY+30,text:"",textAnchor:"middle",foreColor:Array.isArray(this.xaxisForeColors)?this.xaxisForeColors[t]:this.xaxisForeColors,fontSize:this.xaxisFontSize,fontFamily:this.xaxisFontFamily,cssClass:"apexcharts-xaxis-label "+e.config.xaxis.labels.style.cssClass});a.add(b),b.tspan(g);var m=document.createElementNS(e.globals.SVGNS,"title");m.textContent=g,b.node.appendChild(m),o+=r}if(void 0!==e.config.xaxis.title.text){var v=i.group({class:"apexcharts-xaxis-title apexcharts-yaxis-title-inversed"}),y=i.drawText({x:e.globals.gridWidth/2,y:this.xAxisoffX+parseInt(this.xaxisFontSize)+parseInt(e.config.xaxis.title.style.fontSize)+20,text:e.config.xaxis.title.text,textAnchor:"middle",fontSize:e.config.xaxis.title.style.fontSize,fontFamily:e.config.xaxis.title.style.fontFamily,cssClass:"apexcharts-xaxis-title-text "+e.config.xaxis.title.style.cssClass});v.add(y),s.add(v)}var w=e.config.yaxis[t].axisBorder;if(w.show){var k=i.drawLine(e.globals.padHorizontal+w.offsetX,1+w.offsetY,e.globals.padHorizontal+w.offsetX,e.globals.gridHeight+w.offsetY,w.color);s.add(k)}return s}},{key:"yAxisTitleRotate",value:function(t,e){var i=this.w,s=new f(this.ctx),a={width:0,height:0},n={width:0,height:0},r=i.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(t,"'] .apexcharts-yaxis-texts-g"));null!==r&&(a=r.getBoundingClientRect());var o=i.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(t,"'] .apexcharts-yaxis-title text"));if(null!==o&&(n=o.getBoundingClientRect()),null!==o){var l=this.xPaddingForYAxisTitle(t,a,n,e);o.setAttribute("x",l.xPos-(e?10:0))}if(null!==o){var h=s.rotateAroundCenter(o);e?o.setAttribute("transform","rotate(".concat(i.config.yaxis[t].title.rotate," ").concat(h.x," ").concat(h.y,")")):o.setAttribute("transform","rotate(-".concat(i.config.yaxis[t].title.rotate," ").concat(h.x," ").concat(h.y,")"))}}},{key:"xPaddingForYAxisTitle",value:function(t,e,i,s){var a=this.w,n=0,r=0,o=10;return void 0===a.config.yaxis[t].title.text||t<0?{xPos:r,padd:0}:(s?(r=e.width+a.config.yaxis[t].title.offsetX+i.width/2+o/2,0===(n+=1)&&(r-=o/2)):(r=-1*e.width+a.config.yaxis[t].title.offsetX+o/2+i.width/2,a.globals.isBarHorizontal&&(o=25,r=-1*e.width-a.config.yaxis[t].title.offsetX-o)),{xPos:r,padd:o})}},{key:"setYAxisXPosition",value:function(t,e){var i=this.w,s=0,a=0,n=21,r=1;i.config.yaxis.length>1&&(this.multipleYs=!0),i.config.yaxis.map(function(o,l){var h=i.globals.ignoreYAxisIndexes.indexOf(l)>-1||!o.show||o.floating||0===t[l].width,c=t[l].width+e[l].width;o.opposite?i.globals.isBarHorizontal?(a=i.globals.gridWidth+i.globals.translateX-1,i.globals.translateYAxisX[l]=a-o.labels.offsetX):(a=i.globals.gridWidth+i.globals.translateX+r,h||(r=r+c+20),i.globals.translateYAxisX[l]=a-o.labels.offsetX+20):(s=i.globals.translateX-n,h||(n=n+c+20),i.globals.translateYAxisX[l]=s+o.labels.offsetX)})}},{key:"setYAxisTextAlignments",value:function(){var t=this.w,e=t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis");(e=d.listToArray(e)).forEach(function(e,i){var s=t.config.yaxis[i];if(void 0!==s.labels.align){var a=t.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(i,"'] .apexcharts-yaxis-texts-g")),n=t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(i,"'] .apexcharts-yaxis-label"));n=d.listToArray(n);var r=a.getBoundingClientRect();"left"===s.labels.align?(n.forEach(function(t,e){t.setAttribute("text-anchor","start")}),s.opposite||a.setAttribute("transform","translate(-".concat(r.width,", 0)"))):"center"===s.labels.align?(n.forEach(function(t,e){t.setAttribute("text-anchor","middle")}),a.setAttribute("transform","translate(".concat(r.width/2*(s.opposite?1:-1),", 0)"))):"right"===s.labels.align&&(n.forEach(function(t,e){t.setAttribute("text-anchor","end")}),s.opposite&&a.setAttribute("transform","translate(".concat(r.width,", 0)")))}})}}]),t}(),B=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"niceScale",value:function(t,e,i){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:10,n=this.w,r=void 0===this.w.config.yaxis[s].max&&void 0===this.w.config.yaxis[s].min||this.w.config.yaxis[s].forceNiceScale;if(t===Number.MIN_VALUE&&0===e||!d.isNumber(t)&&!d.isNumber(e)||t===Number.MIN_VALUE&&e===-Number.MAX_VALUE)return t=0,e=a,this.linearScale(t,e,a);t>e?(console.warn("yaxis.min cannot be greater than yaxis.max"),e=t+.1):t===e&&(t=0===t?0:t-.5,e=0===e?2:e+.5);var o=[],l=Math.abs(e-t);l<1&&r&&("candlestick"===n.config.chart.type||"candlestick"===n.config.series[s].type||n.globals.isRangeData)&&(e*=1.01),l<1e-5&&r&&e<10?e*=1.05:i>.1&&i<3&&r&&(e+=i/3);var h=a+1;h<2?h=2:h>2&&(h-=2);for(var c=l/h,u=Math.floor(d.log10(c)),g=Math.pow(10,u),f=parseInt(c/g)*g,p=f*Math.floor(t/f),x=f*Math.ceil(e/f),b=p;o.push(b),!((b+=f)>x););if(r)return{result:o,niceMin:o[0],niceMax:o[o.length-1]};var m=t;(o=[]).push(m);for(var v=Math.abs(e-t)/a,y=0;y<=a-1;y++)m+=v,o.push(m);return{result:o,niceMin:o[0],niceMax:o[o.length-1]}}},{key:"linearScale",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,s=Math.abs(e-t)/i;i===Number.MAX_VALUE&&(i=10,s=1);for(var a=[],n=t;i>=0;)a.push(n),n+=s,i-=1;return{result:a,niceMin:a[0],niceMax:a[a.length-1]}}},{key:"logarithmicScale",value:function(t,e,i,s){(e<0||e===Number.MIN_VALUE)&&(e=.01);for(var a=Math.log(e)/Math.log(10),n=Math.log(i)/Math.log(10),r=Math.abs(i-e)/s,o=[],l=e;s>=0;)o.push(l),l+=r,s-=1;var h=o.map(function(t,s){t<=0&&(t=.01);var r=(n-a)/(i-e),o=Math.pow(10,a+r*(t-a));return Math.round(o/d.roundToBase(o,10))*d.roundToBase(o,10)});return 0===h[0]&&(h[0]=1),{result:h,niceMin:h[0],niceMax:h[h.length-1]}}},{key:"setYScaleForIndex",value:function(t,e,i){var s=this.w.globals,a=this.w.config,n=s.isBarHorizontal?a.xaxis:a.yaxis[t];if(void 0===s.yAxisScale[t]&&(s.yAxisScale[t]=[]),n.logarithmic)s.allSeriesCollapsed=!1,s.yAxisScale[t]=this.logarithmicScale(t,e,i,n.tickAmount?n.tickAmount:Math.floor(Math.log10(i)));else if(i!==-Number.MAX_VALUE&&d.isNumber(i))if(s.allSeriesCollapsed=!1,void 0===n.min&&void 0===n.max||n.forceNiceScale){var r=Math.abs(i-e);s.yAxisScale[t]=this.niceScale(e,i,r,t,n.tickAmount?n.tickAmount:r<5&&r>1?r+1:5)}else s.yAxisScale[t]=this.linearScale(e,i,n.tickAmount);else s.yAxisScale[t]=this.linearScale(0,5,5)}},{key:"setMultipleYScales",value:function(){var t=this,e=this.w.globals,i=this.w.config,s=e.minYArr.concat([]),a=e.maxYArr.concat([]),n=[];i.yaxis.forEach(function(r,o){var l=o;i.series.forEach(function(t,i){t.name===r.seriesName&&-1===e.collapsedSeriesIndices.indexOf(i)&&(l=i,o!==i?n.push({index:i,similarIndex:o,alreadyExists:!0}):n.push({index:i}))});var h=s[l],c=a[l];t.setYScaleForIndex(o,h,c)}),this.sameScaleInMultipleAxes(s,a,n)}},{key:"sameScaleInMultipleAxes",value:function(t,e,i){var s=this,a=this.w.config,n=this.w.globals,r=[];i.forEach(function(t){t.alreadyExists&&(void 0===r[t.index]&&(r[t.index]=[]),r[t.index].push(t.index),r[t.index].push(t.similarIndex))}),r.forEach(function(t,e){r.forEach(function(i,s){var a,n;e!==s&&(a=t,n=i,a.filter(function(t){return-1!==n.indexOf(t)})).length>0&&(r[e]=r[e].concat(r[s]))})});var o=r.map(function(t){return t.filter(function(e,i){return t.indexOf(e)===i})}).map(function(t){return t.sort()});r=r.filter(function(t){return!!t});var l=o.slice(),h=l.map(function(t){return JSON.stringify(t)});l=l.filter(function(t,e){return h.indexOf(JSON.stringify(t))===e});var c=[],d=[];t.forEach(function(t,i){l.forEach(function(s,a){s.indexOf(i)>-1&&(void 0===c[a]&&(c[a]=[],d[a]=[]),c[a].push({key:i,value:t}),d[a].push({key:i,value:e[i]}))})});var u=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,Number.MIN_VALUE),g=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,-Number.MAX_VALUE);c.forEach(function(t,e){t.forEach(function(t,i){u[e]=Math.min(t.value,u[e])})}),d.forEach(function(t,e){t.forEach(function(t,i){g[e]=Math.max(t.value,g[e])})}),t.forEach(function(t,e){d.forEach(function(t,i){var r=u[i],o=g[i];t.forEach(function(i,l){t[l].key===e&&(void 0!==a.yaxis[e].min&&(r="function"==typeof a.yaxis[e].min?a.yaxis[e].min(n.minY):a.yaxis[e].min),void 0!==a.yaxis[e].max&&(o="function"==typeof a.yaxis[e].max?a.yaxis[e].max(n.maxY):a.yaxis[e].max),s.setYScaleForIndex(e,r,o))})})})}},{key:"autoScaleY",value:function(t,e){t||(t=this);var i=[];return t.w.config.series.forEach(function(t){var s,a,n=t.data.find(function(t){return t[0]>=e.xaxis.min})[1];a=s=n,t.data.forEach(function(t){t[0]<=e.xaxis.max&&t[0]>=e.xaxis.min&&(t[1]>a&&null!==t[1]&&(a=t[1]),t[1]1&&void 0!==arguments[1]?arguments[1]:Number.MAX_VALUE,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-Number.MAX_VALUE,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,a=this.w.globals,n=-Number.MAX_VALUE,r=Number.MIN_VALUE;null===s&&(s=t+1);var o=a.series,l=o,h=o;"candlestick"===this.w.config.chart.type?(l=a.seriesCandleL,h=a.seriesCandleH):a.isRangeData&&(l=a.seriesRangeStart,h=a.seriesRangeEnd);for(var c=t;cl[c][u]&&l[c][u]<0&&(r=l[c][u])):a.hasNullValues=!0}}return{minY:r,maxY:n,lowestY:e,highestY:i}}},{key:"setYRange",value:function(){var t=this.w.globals,e=this.w.config;t.maxY=-Number.MAX_VALUE,t.minY=Number.MIN_VALUE;var i=Number.MAX_VALUE;if(t.isMultipleYAxis)for(var s=0;s0?h=h+parseFloat(t.series[u][l])+1e-4:c+=parseFloat(t.series[u][l])),u===t.series.length-1&&(r.push(h),o.push(c));for(var g=0;g=0&&i<=10&&(f=0),t.minY=i-5*f/100,t.maxY=t.maxY+5*f/100}return e.yaxis.map(function(e,i){void 0!==e.max&&("number"==typeof e.max?t.maxYArr[i]=e.max:"function"==typeof e.max&&(t.maxYArr[i]=e.max(t.maxY)),t.maxY=t.maxYArr[i]),void 0!==e.min&&("number"==typeof e.min?t.minYArr[i]=e.min:"function"==typeof e.min&&(t.minYArr[i]=e.min(t.minY)),t.minY=t.minYArr[i])}),t.isBarHorizontal&&(void 0!==e.xaxis.min&&"number"==typeof e.xaxis.min&&(t.minY=e.xaxis.min),void 0!==e.xaxis.max&&"number"==typeof e.xaxis.max&&(t.maxY=e.xaxis.max)),t.isMultipleYAxis?(this.scales.setMultipleYScales(),t.minY=i,t.yAxisScale.forEach(function(e,i){t.minYArr[i]=e.niceMin,t.maxYArr[i]=e.niceMax})):(this.scales.setYScaleForIndex(0,t.minY,t.maxY),t.minY=t.yAxisScale[0].niceMin,t.maxY=t.yAxisScale[0].niceMax,t.minYArr[0]=t.yAxisScale[0].niceMin,t.maxYArr[0]=t.yAxisScale[0].niceMax),{minY:t.minY,maxY:t.maxY,minYArr:t.minYArr,maxYArr:t.maxYArr}}},{key:"setXRange",value:function(){var t,e=this.w.globals,i=this.w.config,s="numeric"===i.xaxis.type||"datetime"===i.xaxis.type||"category"===i.xaxis.type&&!e.noLabelsProvided||e.noLabelsProvided||e.isXNumeric;if(e.isXNumeric)for(var a=0;ae.dataPoints&&0!==e.dataPoints&&(t=e.dataPoints-1)):t="dataPoints"===i.xaxis.tickAmount?e.series[e.maxValsInArrayIndex].length-1:i.xaxis.tickAmount,void 0!==i.xaxis.max&&"number"==typeof i.xaxis.max&&(e.maxX=i.xaxis.max),void 0!==i.xaxis.min&&"number"==typeof i.xaxis.min&&(e.minX=i.xaxis.min),void 0!==i.xaxis.range&&(e.minX=e.maxX-i.xaxis.range),e.minX!==Number.MAX_VALUE&&e.maxX!==-Number.MAX_VALUE?e.xAxisScale=this.scales.linearScale(e.minX,e.maxX,t):(e.xAxisScale=this.scales.linearScale(1,t,t),e.noLabelsProvided&&e.labels.length>0&&(e.xAxisScale=this.scales.linearScale(1,e.labels.length,t-1),e.seriesX=e.labels.slice())),s&&(e.labels=e.xAxisScale.result.slice()));if(e.minX===e.maxX)if("datetime"===i.xaxis.type){var l=new Date(e.minX);l.setDate(l.getDate()-2),e.minX=new Date(l).getTime();var h=new Date(e.maxX);h.setDate(h.getDate()+2),e.maxX=new Date(h).getTime()}else("numeric"===i.xaxis.type||"category"===i.xaxis.type&&!e.noLabelsProvided)&&(e.minX=e.minX-2,e.maxX=e.maxX+2);return e.isXNumeric&&(e.seriesX.forEach(function(t,i){t.forEach(function(t,s){if(s>0){var a=t-e.seriesX[i][s-1];e.minXDiff=Math.min(a,e.minXDiff)}})}),this.calcMinXDiffForTinySeries()),{minX:e.minX,maxX:e.maxX}}},{key:"calcMinXDiffForTinySeries",value:function(){var t=this.w,e=t.globals.labels.length;return 1===t.globals.labels.length?t.globals.minXDiff=(t.globals.maxX-t.globals.minX)/e/3:t.globals.minXDiff===Number.MAX_VALUE&&(t.globals.timelineLabels.length>0&&(e=t.globals.timelineLabels.length),e<3&&(e=3),t.globals.minXDiff=(t.globals.maxX-t.globals.minX)/e),t.globals.minXDiff}},{key:"setZRange",value:function(){var t=this.w.globals;if(t.isDataXYZ)for(var e=0;e=t.from&&i<=t.to&&s[e].classList.remove("legend-mouseover-inactive")}}(i.config.plotOptions.heatmap.colorScale.ranges[n])}else"mouseout"===t.type&&a()}},{key:"getActiveSeriesIndex",value:function(){var t=this.w,e=0;if(t.globals.series.length>1)for(var i=t.globals.series.map(function(e,i){return e.length>0&&"bar"!==t.config.series[i].type&&"column"!==t.config.series[i].type?i:-1}),s=0;s1)for(var i=t.config.series.map(function(t,e){return t.data&&t.data.length>0?e:-1}),s=0;s0)for(var s=i.length-1;s>=0;s--)e(i,s,"line");var a=t.globals.dom.baseEl.querySelectorAll(".apexcharts-area-series .apexcharts-series");if(a.length>0)for(var n=a.length-1;n>=0;n--)e(a,n,"area");var r=t.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-series .apexcharts-series");if(r.length>0)for(var o=0;o0)for(var h=0;h0)for(var d=0;d0)for(var g=0;g0)for(var m=0;m0)for(var A=0;A0?t:[]});return t}}]),t}(),_=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.lgRect={},this.yAxisWidth=0,this.xAxisHeight=0,this.isSparkline=this.w.config.chart.sparkline.enabled,this.xPadRight=0,this.xPadLeft=0}return s(t,[{key:"plotCoords",value:function(){var t=this.w,e=t.globals,i=this.getLegendsRect();e.axisCharts?this.setGridCoordsForAxisCharts(i):this.setGridCoordsForNonAxisCharts(i),this.titleSubtitleOffset(),e.gridHeight=e.gridHeight-t.config.grid.padding.top-t.config.grid.padding.bottom,e.gridWidth=e.gridWidth-t.config.grid.padding.left-t.config.grid.padding.right-this.xPadRight-this.xPadLeft,e.translateX=e.translateX+t.config.grid.padding.left+this.xPadLeft,e.translateY=e.translateY+t.config.grid.padding.top}},{key:"conditionalChecksForAxisCoords",value:function(t,e){var i=this.w;this.xAxisHeight=(t.height+e.height)*i.globals.LINE_HEIGHT_RATIO+15,this.xAxisWidth=t.width,this.xAxisHeight-e.height>i.config.xaxis.labels.maxHeight&&(this.xAxisHeight=i.config.xaxis.labels.maxHeight),i.config.xaxis.labels.minHeight&&this.xAxisHeighta&&(this.yAxisWidth=a)}},{key:"setGridCoordsForAxisCharts",value:function(t){var e=this.w,i=e.globals,s=this.getyAxisLabelsCoords(),a=this.getxAxisLabelsCoords(),n=this.getyAxisTitleCoords(),r=this.getxAxisTitleCoords();e.globals.yLabelsCoords=[],e.globals.yTitleCoords=[],e.config.yaxis.map(function(t,i){e.globals.yLabelsCoords.push({width:s[i].width,index:i}),e.globals.yTitleCoords.push({width:n[i].width,index:i})}),this.conditionalChecksForAxisCoords(a,r),i.translateXAxisY=e.globals.rotateXLabels?this.xAxisHeight/8:-4,i.translateXAxisX=e.globals.rotateXLabels&&e.globals.isXNumeric&&e.config.xaxis.labels.rotate<=-45?-this.xAxisWidth/4:0,e.globals.isBarHorizontal&&(i.rotateXLabels=!1,i.translateXAxisY=parseInt(e.config.xaxis.labels.style.fontSize)/1.5*-1),i.translateXAxisY=i.translateXAxisY+e.config.xaxis.labels.offsetY,i.translateXAxisX=i.translateXAxisX+e.config.xaxis.labels.offsetX;var o=this.yAxisWidth,l=this.xAxisHeight;i.xAxisLabelsHeight=this.xAxisHeight,i.xAxisHeight=this.xAxisHeight;var h=10;switch(e.config.grid.show&&"radar"!==e.config.chart.type||(o=0,l=35),this.isSparkline&&(t={height:0,width:0},l=0,o=0,h=0),this.additionalPaddingXLabels(a),e.config.legend.position){case"bottom":i.translateY=h,i.translateX=o,i.gridHeight=i.svgHeight-t.height-l-(this.isSparkline?0:e.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-o;break;case"top":i.translateY=t.height+h,i.translateX=o,i.gridHeight=i.svgHeight-t.height-l-(this.isSparkline?0:e.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-o;break;case"left":i.translateY=h,i.translateX=t.width+o,i.gridHeight=i.svgHeight-l-12,i.gridWidth=i.svgWidth-t.width-o;break;case"right":i.translateY=h,i.translateX=o,i.gridHeight=i.svgHeight-l-12,i.gridWidth=i.svgWidth-t.width-o-5;break;default:throw new Error("Legend position not supported")}this.setGridXPosForDualYAxis(n,s),new W(this.ctx).setYAxisXPosition(s,n)}},{key:"setGridCoordsForNonAxisCharts",value:function(t){var e=this.w,i=e.globals,s=0;e.config.legend.show&&!e.config.legend.floating&&(s=20);var a=10,n=0;if("pie"===e.config.chart.type||"donut"===e.config.chart.type?(a+=e.config.plotOptions.pie.offsetY,n+=e.config.plotOptions.pie.offsetX):"radialBar"===e.config.chart.type&&(a+=e.config.plotOptions.radialBar.offsetY,n+=e.config.plotOptions.radialBar.offsetX),!e.config.legend.show)return i.gridHeight=i.svgHeight-35,i.gridWidth=i.gridHeight,i.translateY=a-10,void(i.translateX=n+(i.svgWidth-i.gridWidth)/2);switch(e.config.legend.position){case"bottom":i.gridHeight=i.svgHeight-t.height-35,i.gridWidth=i.gridHeight,i.translateY=a-20,i.translateX=n+(i.svgWidth-i.gridWidth)/2;break;case"top":i.gridHeight=i.svgHeight-t.height-35,i.gridWidth=i.gridHeight,i.translateY=t.height+a,i.translateX=n+(i.svgWidth-i.gridWidth)/2;break;case"left":i.gridWidth=i.svgWidth-t.width-s,i.gridHeight=i.gridWidth,i.translateY=a,i.translateX=n+t.width+s;break;case"right":i.gridWidth=i.svgWidth-t.width-s-5,i.gridHeight=i.gridWidth,i.translateY=a,i.translateX=n+10;break;default:throw new Error("Legend position not supported")}}},{key:"setGridXPosForDualYAxis",value:function(t,e){var i=this.w;i.config.yaxis.map(function(s,a){-1===i.globals.ignoreYAxisIndexes.indexOf(a)&&!i.config.yaxis[a].floating&&i.config.yaxis[a].show&&s.opposite&&(i.globals.translateX=i.globals.translateX-(e[a].width+t[a].width)-parseInt(i.config.yaxis[a].labels.style.fontSize)/1.2-12)})}},{key:"additionalPaddingXLabels",value:function(t){var e=this,i=this.w;if("category"===i.config.xaxis.type&&i.globals.isBarHorizontal||"numeric"===i.config.xaxis.type||"datetime"===i.config.xaxis.type){var s=i.globals.isXNumeric;i.config.yaxis.forEach(function(a,n){var r;(!a.show||a.floating||-1!==i.globals.collapsedSeriesIndices.indexOf(n)||s||a.opposite&&i.globals.isBarHorizontal)&&((s&&i.globals.isMultipleYAxis&&-1!==i.globals.collapsedSeriesIndices.indexOf(n)||i.globals.isBarHorizontal&&a.opposite)&&(r=t,i.config.grid.padding.lefti.globals.gridWidth?i.globals.skipLastTimelinelabel=!0:i.globals.skipLastTimelinelabel=!1:"datetime"!==i.config.xaxis.type&&i.config.grid.padding.right1&&(i+=10);var s=this.getTitleSubtitleCoords("title"),a=this.getTitleSubtitleCoords("subtitle");e.gridHeight=e.gridHeight-s.height-a.height-i,e.translateY=e.translateY+s.height+a.height+i}},{key:"getTotalYAxisWidth",value:function(){var t=this.w,e=0,i=10,s=function(e){return t.globals.ignoreYAxisIndexes.indexOf(e)>-1};return t.globals.yLabelsCoords.map(function(a,n){var r=t.config.yaxis[n].floating;a.width>0&&!r?(e=e+a.width+i,s(n)&&(e=e-a.width-i)):e+=r||!t.config.yaxis[n].show?0:5}),t.globals.yTitleCoords.map(function(a,n){var r=t.config.yaxis[n].floating;i=parseInt(t.config.yaxis[n].title.style.fontSize),a.width>0&&!r?(e=e+a.width+i,s(n)&&(e=e-a.width-i)):e+=r||!t.config.yaxis[n].show?0:5}),e}},{key:"getxAxisTimeScaleLabelsCoords",value:function(){var t,e=this.w;this.timescaleLabels=e.globals.timelineLabels.slice(),e.globals.isBarHorizontal&&"datetime"===e.config.xaxis.type&&(this.timescaleLabels=e.globals.invertedTimelineLabels.slice());var i=this.timescaleLabels.map(function(t){return t.value}),s=i.reduce(function(t,e){return void 0===t?(console.error("You have possibly supplied invalid Date format. Please supply a valid JavaScript Date"),0):t.length>e.length?t:e},0);return 1.05*(t=new f(this.ctx).getTextRects(s,e.config.xaxis.labels.style.fontSize)).width*i.length>e.globals.gridWidth&&0!==e.config.xaxis.labels.rotate&&(e.globals.overlappingXLabels=!0),t}},{key:"getxAxisLabelsCoords",value:function(){var t,e=this.w,i=e.globals.labels.slice();if(e.globals.timelineLabels.length>0){var s=this.getxAxisTimeScaleLabelsCoords();t={width:s.width,height:s.height}}else{var a="left"!==e.config.legend.position||"right"!==e.config.legend.position||e.config.legend.floating?0:this.lgRect.width,n=e.globals.xLabelFormatter,r=i.reduce(function(t,e){return t.length>e.length?t:e},0);e.globals.isBarHorizontal&&(r=e.globals.yAxisScale[0].result.reduce(function(t,e){return t.length>e.length?t:e},0)),r=new N(this.ctx).xLabelFormat(n,r);var o=new f(this.ctx),l=o.getTextRects(r,e.config.xaxis.labels.style.fontSize);(t={width:l.width,height:l.height}).width*i.length>e.globals.svgWidth-a-this.yAxisWidth&&0!==e.config.xaxis.labels.rotate?e.globals.isBarHorizontal||(e.globals.rotateXLabels=!0,l=o.getTextRects(r,e.config.xaxis.labels.style.fontSize,e.config.xaxis.labels.style.fontFamily,"rotate(".concat(e.config.xaxis.labels.rotate," 0 0)"),!1),t.height=l.height/1.66):e.globals.rotateXLabels=!1}return e.config.xaxis.labels.show||(t={width:0,height:0}),{width:t.width,height:t.height}}},{key:"getyAxisLabelsCoords",value:function(){var t=this,e=this.w,i=[],s=10;return e.config.yaxis.map(function(a,n){if(a.show&&a.labels.show&&e.globals.yAxisScale[n].result.length){var r=e.globals.yLabelFormatters[n],o=r(e.globals.yAxisScale[n].niceMax,-1);if(void 0!==o&&0!==o.length||(o=e.globals.yAxisScale[n].niceMax),e.globals.isBarHorizontal)s=0,o=r(o=e.globals.labels.slice().reduce(function(t,e){return t.length>e.length?t:e},0),-1);var l=new f(t.ctx).getTextRects(o,a.labels.style.fontSize);i.push({width:l.width+s,height:l.height})}else i.push({width:0,height:0})}),i}},{key:"getxAxisTitleCoords",value:function(){var t=this.w,e=0,i=0;if(void 0!==t.config.xaxis.title.text){var s=new f(this.ctx).getTextRects(t.config.xaxis.title.text,t.config.xaxis.title.style.fontSize);e=s.width,i=s.height}return{width:e,height:i}}},{key:"getyAxisTitleCoords",value:function(){var t=this,e=this.w,i=[];return e.config.yaxis.map(function(e,s){if(e.show&&void 0!==e.title.text){var a=new f(t.ctx).getTextRects(e.title.text,e.title.style.fontSize,e.title.style.fontFamily,"rotate(-90 0 0)",!1);i.push({width:a.width,height:a.height})}else i.push({width:0,height:0})}),i}},{key:"getTitleSubtitleCoords",value:function(t){var e=this.w,i=0,s=0,a="title"===t?e.config.title.floating:e.config.subtitle.floating,n=e.globals.dom.baseEl.querySelector(".apexcharts-".concat(t,"-text"));if(null!==n&&!a){var r=n.getBoundingClientRect();i=r.width,s=e.globals.axisCharts?r.height+5:r.height}return{width:i,height:s}}},{key:"getLegendsRect",value:function(){var t=this.w,e=t.globals.dom.baseEl.querySelector(".apexcharts-legend"),i=Object.assign({},d.getBoundingClientRect(e));return null!==e&&!t.config.legend.floating&&t.config.legend.show?this.lgRect={x:i.x,y:i.y,height:i.height,width:0===i.height?0:i.width}:this.lgRect={x:0,y:0,height:0,width:0},this.lgRect}}]),t}(),j=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w,this.timeScaleArray=[]}return s(t,[{key:"calculateTimeScaleTicks",value:function(t,e){var i=this,s=this.w;if(s.globals.allSeriesCollapsed)return s.globals.labels=[],s.globals.timelineLabels=[],[];var a=new m(this.ctx),r=(e-t)/864e5;this.determineInterval(r),s.globals.disableZoomIn=!1,s.globals.disableZoomOut=!1,r<.005?s.globals.disableZoomIn=!0:r>5e4&&(s.globals.disableZoomOut=!0);var o=a.getTimeUnitsfromTimestamp(t,e),l=s.globals.gridWidth/r,h=l/24,c=h/60,d=Math.floor(24*r),u=Math.floor(24*r*60),g=Math.floor(r),f=Math.floor(r/30),p=Math.floor(r/365),x={minMinute:o.minMinute,minHour:o.minHour,minDate:o.minDate,minMonth:o.minMonth,minYear:o.minYear},b={firstVal:x,currentMinute:x.minMinute,currentHour:x.minHour,currentMonthDate:x.minDate,currentDate:x.minDate,currentMonth:x.minMonth,currentYear:x.minYear,daysWidthOnXAxis:l,hoursWidthOnXAxis:h,minutesWidthOnXAxis:c,numberOfMinutes:u,numberOfHours:d,numberOfDays:g,numberOfMonths:f,numberOfYears:p};switch(this.tickInterval){case"years":this.generateYearScale(b);break;case"months":case"half_year":this.generateMonthScale(b);break;case"months_days":case"months_fortnight":case"days":case"week_days":this.generateDayScale(b);break;case"hours":this.generateHourScale(b);break;case"minutes":this.generateMinuteScale(b)}var v=this.timeScaleArray.map(function(t){var e={position:t.position,unit:t.unit,year:t.year,day:t.day?t.day:1,hour:t.hour?t.hour:0,month:t.month+1};return"month"===t.unit?n({},e,{value:t.value+1}):"day"===t.unit||"hour"===t.unit?n({},e,{value:t.value}):"minute"===t.unit?n({},e,{value:t.value,minute:t.value}):t});return v.filter(function(t){var e=1,a=Math.ceil(s.globals.gridWidth/120),n=t.value;void 0!==s.config.xaxis.tickAmount&&(a=s.config.xaxis.tickAmount),v.length>a&&(e=Math.floor(v.length/a));var r=!1,o=!1;switch(i.tickInterval){case"half_year":e=7,"year"===t.unit&&(r=!0);break;case"months":e=1,"year"===t.unit&&(r=!0);break;case"months_fortnight":e=15,"year"!==t.unit&&"month"!==t.unit||(r=!0),30===n&&(o=!0);break;case"months_days":e=10,"month"===t.unit&&(r=!0),30===n&&(o=!0);break;case"week_days":e=8,"month"===t.unit&&(r=!0);break;case"days":e=1,"month"===t.unit&&(r=!0);break;case"hours":"day"===t.unit&&(r=!0);break;case"minutes":n%5!=0&&(o=!0)}if("minutes"===i.tickInterval||"hours"===i.tickInterval){if(!o)return!0}else if((n%e==0||r)&&!o)return!0})}},{key:"recalcDimensionsBasedOnFormat",value:function(t,e){var i=this.w,s=this.formatDates(t),a=this.removeOverlappingTS(s);e?i.globals.invertedTimelineLabels=a.slice():i.globals.timelineLabels=a.slice(),new _(this.ctx).plotCoords()}},{key:"determineInterval",value:function(t){switch(!0){case t>1825:this.tickInterval="years";break;case t>800&&t<=1825:this.tickInterval="half_year";break;case t>180&&t<=800:this.tickInterval="months";break;case t>90&&t<=180:this.tickInterval="months_fortnight";break;case t>60&&t<=90:this.tickInterval="months_days";break;case t>30&&t<=60:this.tickInterval="week_days";break;case t>2&&t<=30:this.tickInterval="days";break;case t>.1&&t<=2:this.tickInterval="hours";break;case t<.1:this.tickInterval="minutes";break;default:this.tickInterval="days"}}},{key:"generateYearScale",value:function(t){var e=t.firstVal,i=t.currentMonth,s=t.currentYear,a=t.daysWidthOnXAxis,n=t.numberOfYears,r=e.minYear,o=0,l=new m(this.ctx);if(e.minDate>1&&e.minMonth>0){var h=l.determineRemainingDaysOfYear(e.minYear,e.minMonth,e.minDate);o=(l.determineDaysOfYear(e.minYear)-h+1)*a,r=e.minYear+1,this.timeScaleArray.push({position:o,value:r,unit:"year",year:r,month:d.monthMod(i+1)})}else 1===e.minDate&&0===e.minMonth&&this.timeScaleArray.push({position:o,value:r,unit:"year",year:s,month:d.monthMod(i+1)});for(var c=r,u=o,g=0;g1){l=(h.determineDaysOfMonths(s+1,e.minYear)-i+1)*n,o=d.monthMod(s+1);var g=a+u,f=d.monthMod(o),p=o;0===o&&(c="year",p=g,f=1,g+=u+=1),this.timeScaleArray.push({position:l,value:p,unit:c,year:g,month:f})}else this.timeScaleArray.push({position:l,value:o,unit:c,year:a,month:d.monthMod(s)});for(var x=o+1,b=l,v=0,y=1;vr.determineDaysOfMonths(e+1,i)?(g=1,o="month",c=e+=1,e):e},g=h,f=u(g,i,s);this.timeScaleArray.push({position:l,value:c,unit:o,year:s,month:d.monthMod(f),day:g});for(var p=l,x=0;xo.determineDaysOfMonths(e+1,a)&&(x=1,e+=1),{month:e,date:x}},c=function(t,e){return t>o.determineDaysOfMonths(e+1,a)?e+=1:e},u=60-e.minMinute,g=u*n,f=e.minHour+1,p=f+1;60===u&&(g=0,p=(f=e.minHour)+1);var x=i,b=c(x,s);this.timeScaleArray.push({position:g,value:f,unit:l,day:x,hour:p,year:a,month:d.monthMod(b)});for(var v=g,y=0;y=24)p=0,l="day",b=h(x+=1,b).month,b=c(x,b);var w=a+Math.floor(b/12)+0;v=0===p&&0===y?u*n:60*n+v;var k=0===p?x:p;this.timeScaleArray.push({position:v,value:k,unit:l,hour:p,day:x,year:w,month:d.monthMod(b)}),p++}}},{key:"generateMinuteScale",value:function(t){var e=t.firstVal,i=t.currentMinute,s=t.currentHour,a=t.currentDate,n=t.currentMonth,r=t.currentYear,o=t.minutesWidthOnXAxis,l=t.numberOfMinutes,h=o-(i-e.minMinute),c=e.minMinute+1,u=c+1,g=a,f=n,p=r,x=s;this.timeScaleArray.push({position:h,value:c,unit:"minute",day:g,hour:x,minute:u,year:p,month:d.monthMod(f)});for(var b=h,m=0;m=60&&(u=0,24===(x+=1)&&(x=0));var v=r+Math.floor(f/12)+0;b=o+b;var y=u;this.timeScaleArray.push({position:b,value:y,unit:"minute",hour:x,minute:u,day:g,year:v,month:d.monthMod(f)}),u++}}},{key:"createRawDateString",value:function(t,e){var i=t.year;return i+="-"+("0"+t.month.toString()).slice(-2),"day"===t.unit?i+="day"===t.unit?"-"+("0"+e).slice(-2):"-01":i+="-"+("0"+(t.day?t.day:"1")).slice(-2),"hour"===t.unit?i+="hour"===t.unit?"T"+("0"+e).slice(-2):"T00":i+="T"+("0"+(t.hour?t.hour:"0")).slice(-2),i+="minute"===t.unit?":"+("0"+e).slice(-2)+":00.000Z":":00:00.000Z"}},{key:"formatDates",value:function(t){var e=this,i=this.w;return t.map(function(t){var s=t.value.toString(),a=new m(e.ctx),n=e.createRawDateString(t,s),r=new Date(Date.parse(n));if(void 0===i.config.xaxis.labels.format){var o="dd MMM",l=i.config.xaxis.labels.datetimeFormatter;"year"===t.unit&&(o=l.year),"month"===t.unit&&(o=l.month),"day"===t.unit&&(o=l.day),"hour"===t.unit&&(o=l.hour),"minute"===t.unit&&(o=l.minute),s=a.formatDate(r,o,!0,!1)}else s=a.formatDate(r,i.config.xaxis.labels.format);return{dateString:n,position:t.position,value:s,unit:t.unit,year:t.year,month:t.month}})}},{key:"removeOverlappingTS",value:function(t){var e=this,i=new f(this.ctx),s=0,a=t.map(function(a,n){if(n>0&&e.w.config.xaxis.labels.hideOverlappingLabels){var r=i.getTextRects(t[s].value).width,o=t[s].position;return a.position>o+r+10?(s=n,a):null}return a});return a=a.filter(function(t){return null!==t})}}]),t}(),U=function(){function t(i,s){e(this,t),this.ctx=s,this.w=s.w,this.el=i,this.coreUtils=new y(this.ctx),this.twoDSeries=[],this.threeDSeries=[],this.twoDSeriesX=[]}return s(t,[{key:"setupElements",value:function(){var t=this.w.globals,e=this.w.config,i=e.chart.type;t.axisCharts=["line","area","bar","rangeBar","candlestick","radar","scatter","bubble","heatmap"].indexOf(i)>-1,t.xyCharts=["line","area","bar","rangeBar","candlestick","scatter","bubble"].indexOf(i)>-1,t.isBarHorizontal=("bar"===e.chart.type||"rangeBar"===e.chart.type)&&e.plotOptions.bar.horizontal,t.chartClass=".apexcharts"+t.cuid,t.dom.baseEl=this.el,t.dom.elWrap=document.createElement("div"),f.setAttrs(t.dom.elWrap,{id:t.chartClass.substring(1),class:"apexcharts-canvas "+t.chartClass.substring(1)}),this.el.appendChild(t.dom.elWrap),t.dom.Paper=new window.SVG.Doc(t.dom.elWrap),t.dom.Paper.attr({class:"apexcharts-svg","xmlns:data":"ApexChartsNS",transform:"translate(".concat(e.chart.offsetX,", ").concat(e.chart.offsetY,")")}),t.dom.Paper.node.style.background=e.chart.background,this.setSVGDimensions(),t.dom.elGraphical=t.dom.Paper.group().attr({class:"apexcharts-inner apexcharts-graphical"}),t.dom.elDefs=t.dom.Paper.defs(),t.dom.elLegendWrap=document.createElement("div"),t.dom.elLegendWrap.classList.add("apexcharts-legend"),t.dom.elWrap.appendChild(t.dom.elLegendWrap),t.dom.Paper.add(t.dom.elGraphical),t.dom.elGraphical.add(t.dom.elDefs)}},{key:"plotChartType",value:function(t,e){var i=this.w,s=i.config,a=i.globals,n={series:[],i:[]},r={series:[],i:[]},o={series:[],i:[]},l={series:[],i:[]},h={series:[],i:[]};a.series.map(function(e,s){void 0!==t[s].type?("column"===t[s].type||"bar"===t[s].type?(i.config.plotOptions.bar.horizontal=!1,l.series.push(e),l.i.push(s)):"area"===t[s].type?(r.series.push(e),r.i.push(s)):"line"===t[s].type?(n.series.push(e),n.i.push(s)):"scatter"===t[s].type?(o.series.push(e),o.i.push(s)):"bubble"===t[s].type||("candlestick"===t[s].type?(h.series.push(e),h.i.push(s)):console.warn("You have specified an unrecognized chart type. Available types for this propery are line/area/column/bar/scatter/bubble")),a.comboCharts=!0):(n.series.push(e),n.i.push(s))});var c=new D(this.ctx,e),d=new E(this.ctx,e),u=new I(this.ctx),g=new F(this.ctx),f=new R(this.ctx,e),p=new Y(this.ctx),x=[];if(a.comboCharts){if(r.series.length>0&&x.push(c.draw(r.series,"area",r.i)),l.series.length>0)if(i.config.chart.stacked){var b=new M(this.ctx,e);x.push(b.draw(l.series,l.i))}else{var m=new P(this.ctx,e);x.push(m.draw(l.series,l.i))}if(n.series.length>0&&x.push(c.draw(n.series,"line",n.i)),h.series.length>0&&x.push(d.draw(h.series,h.i)),o.series.length>0){var v=new D(this.ctx,e,!0);x.push(v.draw(o.series,"scatter",o.i))}}else switch(s.chart.type){case"line":x=c.draw(a.series,"line");break;case"area":x=c.draw(a.series,"area");break;case"bar":if(s.chart.stacked)x=new M(this.ctx,e).draw(a.series);else x=new P(this.ctx,e).draw(a.series);break;case"candlestick":x=new E(this.ctx,e).draw(a.series);break;case"rangeBar":x=f.draw(a.series);break;case"heatmap":x=new X(this.ctx,e).draw(a.series);break;case"pie":case"donut":x=u.draw(a.series);break;case"radialBar":x=g.draw(a.series);break;case"radar":x=p.draw(a.series);break;default:x=c.draw(a.series)}return x}},{key:"setSVGDimensions",value:function(){var t=this.w.globals,e=this.w.config;t.svgWidth=e.chart.width,t.svgHeight=e.chart.height;var i=d.getDimensions(this.el),s=e.chart.width.toString().split(/[0-9]+/g).pop();if("%"===s?d.isNumber(i[0])&&(0===i[0].width&&(i=d.getDimensions(this.el.parentNode)),t.svgWidth=i[0]*parseInt(e.chart.width)/100):"px"!==s&&""!==s||(t.svgWidth=parseInt(e.chart.width)),"auto"!==t.svgHeight&&""!==t.svgHeight)if("%"===e.chart.height.toString().split(/[0-9]+/g).pop()){var a=d.getDimensions(this.el.parentNode);t.svgHeight=a[1]*parseInt(e.chart.height)/100}else t.svgHeight=parseInt(e.chart.height);else t.axisCharts?t.svgHeight=t.svgWidth/1.61:t.svgHeight=t.svgWidth;f.setAttrs(t.dom.Paper.node,{width:t.svgWidth,height:t.svgHeight});var n=e.chart.sparkline.enabled?0:t.axisCharts?e.chart.parentHeightOffset:0;t.dom.Paper.node.parentNode.parentNode.style.minHeight=t.svgHeight+n+"px",t.dom.elWrap.style.width=t.svgWidth+"px",t.dom.elWrap.style.height=t.svgHeight+"px"}},{key:"shiftGraphPosition",value:function(){var t=this.w.globals,e=t.translateY,i={transform:"translate("+t.translateX+", "+e+")"};f.setAttrs(t.dom.elGraphical.node,i)}},{key:"coreCalculations",value:function(){new V(this.ctx).init()}},{key:"resetGlobals",value:function(){var t=this,e=this.w.globals;e.series=[],e.seriesCandleO=[],e.seriesCandleH=[],e.seriesCandleL=[],e.seriesCandleC=[],e.seriesRangeStart=[],e.seriesRangeEnd=[],e.seriesPercent=[],e.seriesX=[],e.seriesZ=[],e.seriesNames=[],e.seriesTotals=[],e.stackedSeriesTotals=[],e.labels=[],e.timelineLabels=[],e.noLabelsProvided=!1,e.timescaleTicks=[],e.resizeTimer=null,e.selectionResizeTimer=null,e.seriesXvalues=t.w.config.series.map(function(t){return[]}),e.seriesYvalues=t.w.config.series.map(function(t){return[]}),e.delayedElements=[],e.pointsArray=[],e.dataLabelsRects=[],e.isXNumeric=!1,e.isDataXYZ=!1,e.maxY=-Number.MAX_VALUE,e.minY=Number.MIN_VALUE,e.minYArr=[],e.maxYArr=[],e.maxX=-Number.MAX_VALUE,e.minX=Number.MAX_VALUE,e.initialmaxX=-Number.MAX_VALUE,e.initialminX=Number.MAX_VALUE,e.maxDate=0,e.minDate=Number.MAX_VALUE,e.minZ=Number.MAX_VALUE,e.maxZ=-Number.MAX_VALUE,e.minXDiff=Number.MAX_VALUE,e.yAxisScale=[],e.xAxisScale=null,e.xAxisTicksPositions=[],e.yLabelsCoords=[],e.yTitleCoords=[],e.xRange=0,e.yRange=[],e.zRange=0,e.dataPoints=0}},{key:"isMultipleY",value:function(){if(this.w.config.yaxis.constructor===Array&&this.w.config.yaxis.length>1)return this.w.config.chart.stacked=!1,this.w.globals.isMultipleYAxis=!0,!0}},{key:"excludeCollapsedSeriesInYAxis",value:function(){var t=this,e=this.w;e.globals.ignoreYAxisIndexes=e.globals.collapsedSeries.map(function(e,i){if(t.w.globals.isMultipleYAxis)return e.index})}},{key:"isMultiFormat",value:function(){return this.isFormatXY()||this.isFormat2DArray()}},{key:"isFormatXY",value:function(){var t=this.w.config.series.slice(),e=new G(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&null!==t[this.activeSeriesIndex].data[0]&&void 0!==t[this.activeSeriesIndex].data[0].x&&null!==t[this.activeSeriesIndex].data[0])return!0}},{key:"isFormat2DArray",value:function(){var t=this.w.config.series.slice(),e=new G(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&void 0!==t[this.activeSeriesIndex].data[0]&&null!==t[this.activeSeriesIndex].data[0]&&t[this.activeSeriesIndex].data[0].constructor===Array)return!0}},{key:"handleFormat2DArray",value:function(t,e){for(var i=this.w.config,s=this.w.globals,a=0;a-1&&(n=this.activeSeriesIndex);for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:this.ctx,i=this.w.config,s=this.w.globals,a=new m(e),n=0;n0?i.labels.slice():i.xaxis.categories.slice(),o=0;o0?i.labels.slice():i.xaxis.categories.slice();l.length>0&&(this.twoDSeriesX=l,s.seriesX.push(this.twoDSeriesX))}s.labels.push(this.twoDSeriesX);var h=t[n].data.map(function(t){return d.parseNumber(t)});s.series.push(h)}s.seriesZ.push(this.threeDSeries),void 0!==t[n].name?s.seriesNames.push(t[n].name):s.seriesNames.push("series-"+parseInt(n+1))}return this.w}},{key:"parseDataNonAxisCharts",value:function(t){var e=this.w.globals,i=this.w.config;e.series=t.slice(),e.seriesNames=i.labels.slice();for(var s=0;s0)i.labels=e.xaxis.categories;else if(e.labels.length>0)i.labels=e.labels.slice();else if(this.fallbackToCategory)i.labels=i.labels[0];else{var s=[];if(i.axisCharts){for(var a=0;a0&&(this.xaxisLabels=s.globals.timelineLabels.slice())}return s(t,[{key:"drawGridArea",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w,i=new f(this.ctx);null===t&&(t=i.group({class:"apexcharts-grid"}));var s=i.drawLine(e.globals.padHorizontal,1,e.globals.padHorizontal,e.globals.gridHeight,"transparent"),a=i.drawLine(e.globals.padHorizontal,e.globals.gridHeight,e.globals.gridWidth,e.globals.gridHeight,"transparent");return t.add(a),t.add(s),t}},{key:"drawGrid",value:function(){var t=this.w,e=new H(this.ctx),i=new W(this.ctx),s=this.w.globals,a=null;if(s.axisCharts){if(t.config.grid.show)a=this.renderGrid(),s.dom.elGraphical.add(a.el),this.drawGridArea(a.el);else{var n=this.drawGridArea();s.dom.elGraphical.add(n)}null!==a&&e.xAxisLabelCorrections(a.xAxisTickWidth),i.setYAxisTextAlignments()}}},{key:"createGridMask",value:function(){var t=this.w,e=t.globals,i=new f(this.ctx),s=Array.isArray(t.config.stroke.width)?0:t.config.stroke.width;if(Array.isArray(t.config.stroke.width)){var a=0;t.config.stroke.width.forEach(function(t){a=Math.max(a,t)}),s=a}e.dom.elGridRectMask=document.createElementNS(e.SVGNS,"clipPath"),e.dom.elGridRectMask.setAttribute("id","gridRectMask".concat(e.cuid)),e.dom.elGridRectMarkerMask=document.createElementNS(e.SVGNS,"clipPath"),e.dom.elGridRectMarkerMask.setAttribute("id","gridRectMarkerMask".concat(e.cuid)),e.dom.elGridRect=i.drawRect(-s/2,-s/2,e.gridWidth+s,e.gridHeight+s,0,"#fff"),new y(this).getLargestMarkerSize();var n=t.globals.markers.largestSize+1;e.dom.elGridRectMarker=i.drawRect(-n,-n,e.gridWidth+2*n,e.gridHeight+2*n,0,"#fff"),e.dom.elGridRectMask.appendChild(e.dom.elGridRect.node),e.dom.elGridRectMarkerMask.appendChild(e.dom.elGridRectMarker.node);var r=e.dom.baseEl.querySelector("defs");r.appendChild(e.dom.elGridRectMask),r.appendChild(e.dom.elGridRectMarkerMask)}},{key:"renderGrid",value:function(){var t=this.w,e=new f(this.ctx),i=t.config.grid.strokeDashArray,s=e.group({class:"apexcharts-grid"}),a=e.group({class:"apexcharts-gridlines-horizontal"}),n=e.group({class:"apexcharts-gridlines-vertical"});s.add(a),s.add(n);for(var r,o=8,l=0;l2));l++);if(t.globals.isBarHorizontal){if(r=o,t.config.grid.xaxis.lines.show||t.config.xaxis.axisTicks.show)for(var h,c=t.globals.padHorizontal,d=t.globals.gridHeight,u=0;u0)for(var A=0;A0&&w0)for(var n=0,r=s.globals.gridHeight/i,o=s.globals.gridWidth,l=0,h=0;l=s.config.grid.row.colors.length&&(h=0);var c=s.config.grid.row.colors[h],d=a.drawRect(0,n,o,r,0,c,s.config.grid.row.opacity);t.add(d),d.node.classList.add("apexcharts-gridRow"),n+=s.globals.gridHeight/i}if(void 0!==s.config.grid.column.colors&&s.config.grid.column.colors.length>0)for(var u=s.globals.padHorizontal,g=s.globals.padHorizontal+s.globals.gridWidth/e,p=s.globals.gridHeight,x=0,b=0;x=s.config.grid.column.colors.length&&(b=0);var m=s.config.grid.column.colors[b],v=a.drawRect(u,0,g,p,0,m,s.config.grid.column.opacity);v.node.classList.add("apexcharts-gridColumn"),t.add(v),u+=s.globals.gridWidth/e}}},{key:"animateLine",value:function(t,e,i){var s=this.w,a=s.config.chart.animations;if(a&&!s.globals.resized&&!s.globals.dataChanged){var n=a.speed;this.anim.animateLine(t,e,i,n)}}}]),t}(),ot=function(){function t(i,s){e(this,t),this.ctx=i,this.w=i.w,this.onLegendClick=this.onLegendClick.bind(this),this.onLegendHovered=this.onLegendHovered.bind(this)}return s(t,[{key:"init",value:function(){var t=this.w,e=t.globals,i=t.config;if((i.legend.showForSingleSeries&&1===e.series.length||e.series.length>1||!e.axisCharts)&&i.legend.show){for(;e.dom.elLegendWrap.firstChild;)e.dom.elLegendWrap.removeChild(e.dom.elLegendWrap.firstChild);this.drawLegends(),d.isIE11()?document.getElementsByTagName("head")[0].appendChild(this.getLegendStyles()):this.appendToForeignObject(),"bottom"===i.legend.position||"top"===i.legend.position?this.legendAlignHorizontal():"right"!==i.legend.position&&"left"!==i.legend.position||this.legendAlignVertical()}}},{key:"appendToForeignObject",value:function(){var t=this.w.globals,e=document.createElementNS(t.SVGNS,"foreignObject");e.setAttribute("x",0),e.setAttribute("y",0),e.setAttribute("width",t.svgWidth),e.setAttribute("height",t.svgHeight),t.dom.elLegendWrap.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),e.appendChild(t.dom.elLegendWrap),e.appendChild(this.getLegendStyles()),t.dom.Paper.node.insertBefore(e,t.dom.elGraphical.node)}},{key:"drawLegends",value:function(){var t=this.w,e=t.config.legend.fontFamily,i=t.globals.seriesNames,s=t.globals.colors.slice();if("heatmap"===t.config.chart.type){var a=t.config.plotOptions.heatmap.colorScale.ranges;i=a.map(function(t){return t.name?t.name:t.from+" - "+t.to}),s=a.map(function(t){return t.color})}for(var n=t.globals.legendFormatter,r=0;r<=i.length-1;r++){var o=n(i[r],{seriesIndex:r,w:t}),l=!1,h=!1;if(t.globals.collapsedSeries.length>0)for(var c=0;c0)for(var d=0;d0?l-10:0)+(h>0?h-10:0)}s.style.position="absolute",n=n+t+i.config.legend.offsetX,r=r+e+i.config.legend.offsetY,s.style.left=n+"px",s.style.top=r+"px","bottom"===i.config.legend.position?(s.style.top="auto",s.style.bottom=10+i.config.legend.offsetY+"px"):"right"===i.config.legend.position&&(s.style.left="auto",s.style.right=25+i.config.legend.offsetX+"px"),s.style.width&&(s.style.width=parseInt(i.config.legend.width)+"px"),s.style.height&&(s.style.height=parseInt(i.config.legend.height)+"px")}},{key:"legendAlignHorizontal",value:function(){var t=this.w;t.globals.dom.baseEl.querySelector(".apexcharts-legend").style.right=0;var e=this.getLegendBBox(),i=new _(this.ctx),s=i.getTitleSubtitleCoords("title"),a=i.getTitleSubtitleCoords("subtitle"),n=0;"bottom"===t.config.legend.position?n=-e.clwh/1.8:"top"===t.config.legend.position&&(n=s.height+a.height+t.config.title.margin+t.config.subtitle.margin-15),this.setLegendWrapXY(20,n)}},{key:"legendAlignVertical",value:function(){var t=this.w,e=this.getLegendBBox(),i=0;"left"===t.config.legend.position&&(i=20),"right"===t.config.legend.position&&(i=t.globals.svgWidth-e.clww-10),this.setLegendWrapXY(i,20)}},{key:"onLegendHovered",value:function(t){var e=this.w,i=t.target.classList.contains("apexcharts-legend-text")||t.target.classList.contains("apexcharts-legend-marker");if("heatmap"!==e.config.chart.type)!t.target.classList.contains("inactive-legend")&&i&&new G(this.ctx).toggleSeriesOnHover(t,t.target);else if(i){var s=parseInt(t.target.getAttribute("rel"))-1;this.ctx.fireEvent("legendHover",[this.ctx,s,this.w]),new G(this.ctx).highlightRangeInSeries(t,t.target)}}},{key:"onLegendClick",value:function(t){if(t.target.classList.contains("apexcharts-legend-text")||t.target.classList.contains("apexcharts-legend-marker")){var e=parseInt(t.target.getAttribute("rel"))-1,i="true"===t.target.getAttribute("data:collapsed"),s=this.w.config.chart.events.legendClick;"function"==typeof s&&s(this.ctx,e,this.w),this.ctx.fireEvent("legendClick",[this.ctx,e,this.w]);var a=this.w.config.legend.markers.onClick;"function"==typeof a&&t.target.classList.contains("apexcharts-legend-marker")&&(a(this.ctx,e,this.w),this.ctx.fireEvent("legendMarkerClick",[this.ctx,e,this.w])),this.toggleDataSeries(e,i)}}},{key:"getLegendStyles",value:function(){var t=document.createElement("style");t.setAttribute("type","text/css");var e=document.createTextNode("\n \n .apexcharts-legend {\n display: flex;\n overflow: auto;\n padding: 0 10px;\n }\n\n .apexcharts-legend.position-bottom, .apexcharts-legend.position-top {\n flex-wrap: wrap\n }\n .apexcharts-legend.position-right, .apexcharts-legend.position-left {\n flex-direction: column;\n bottom: 0;\n }\n\n .apexcharts-legend.position-bottom.left, .apexcharts-legend.position-top.left, .apexcharts-legend.position-right, .apexcharts-legend.position-left {\n justify-content: flex-start;\n }\n\n .apexcharts-legend.position-bottom.center, .apexcharts-legend.position-top.center {\n justify-content: center; \n }\n\n .apexcharts-legend.position-bottom.right, .apexcharts-legend.position-top.right {\n justify-content: flex-end;\n }\n\n .apexcharts-legend-series {\n cursor: pointer;\n line-height: normal;\n }\n\n .apexcharts-legend.position-bottom .apexcharts-legend-series, .apexcharts-legend.position-top .apexcharts-legend-series{\n display: flex;\n align-items: center;\n }\n\n .apexcharts-legend-text {\n position: relative;\n font-size: 14px;\n }\n\n .apexcharts-legend-text *, .apexcharts-legend-marker * {\n pointer-events: none;\n }\n\n .apexcharts-legend-marker {\n position: relative;\n display: inline-block;\n cursor: pointer;\n margin-right: 3px;\n }\n \n .apexcharts-legend.right .apexcharts-legend-series, .apexcharts-legend.left .apexcharts-legend-series{\n display: inline-block;\n }\n\n .apexcharts-legend-series.no-click {\n cursor: auto;\n }\n\n .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\n display: none !important;\n }\n\n .inactive-legend {\n opacity: 0.45;\n }");return t.appendChild(e),t}},{key:"resetToggleDataSeries",value:function(){var t=this.w,e=null,i=[];if(t.globals.axisCharts?(e=t.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:realIndex]"),(e=d.listToArray(e)).forEach(function(t){i.push(parseInt(t.getAttribute("data:realIndex")))})):(e=t.globals.dom.baseEl.querySelectorAll(".apexcharts-series[rel]"),(e=d.listToArray(e)).forEach(function(t){i.push(parseInt(t.getAttribute("rel"))-1)})),i.sort(),t.globals.collapsedSeries.length>0){for(var s=t.globals.risingSeries.slice(),a=t.config.series.slice(),n=0;n0)for(var a=0;ae.breakpoint?1:e.breakpoint>t.breakpoint?-1:0}).reverse();var n=new w({}),r=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=a[0].breakpoint,r=window.innerWidth>0?window.innerWidth:screen.width;if(r>s){var o=y.extendArrayProps(n,i.globals.initialConfig);t=d.extend(o,t),t=d.extend(i.config,t),e.overrideResponsiveOptions(t)}else for(var l=0;l2&&void 0!==arguments[2]?arguments[2]:null,s=this.w,a=e||s.globals.series.length;if(null===i&&(i="bar"===s.config.chart.type&&s.config.plotOptions.bar.distributed||"heatmap"===s.config.chart.type&&s.config.plotOptions.heatmap.colorScale.inverse),i&&(a=s.globals.series[0].length*s.globals.series.length),t.lengthr.globals.gridWidth||d>r.globals.gridHeight?(e.classList.remove("hovering-zoom"),e.classList.remove("hovering-pan")):r.globals.zoomEnabled?(e.classList.remove("hovering-pan"),e.classList.add("hovering-zoom")):r.globals.panEnabled&&(e.classList.remove("hovering-zoom"),e.classList.add("hovering-pan"));var u=Math.round(c/l);n&&(u=Math.ceil(c/l),u-=1);for(var g,f=null,p=null,x=[],b=0;b1?n=this.getFirstActiveXArray(i):r=0;var l=s[n][0],h=i[n][0],c=Math.abs(t-h),d=Math.abs(e-l),u=d+c;return s.map(function(a,n){a.map(function(a,l){var h=Math.abs(e-s[n][l]),g=Math.abs(t-i[n][l]),f=g+h;f0?e:-1}),a=0;a0)for(var s=0;s-1?g[0].parentNode.style.display="none":g[0].parentNode.style.display=o.config.tooltip.items.display)}},{key:"toggleActiveInactiveSeries",value:function(t){var e=this.w;if(t)this.tooltipUtil.toggleAllTooltipSeriesGroups("enable");else{this.tooltipUtil.toggleAllTooltipSeriesGroups("disable");var i=e.globals.dom.baseEl.querySelector(".apexcharts-tooltip-series-group");i&&(i.classList.add("active"),i.style.display=e.config.tooltip.items.display)}}},{key:"getValuesToPrint",value:function(t){var e=t.i,i=t.j,s=this.w,a=this.ctx.series.filteredSeriesX(),n="",r=null,o=null,l={series:s.globals.series,seriesIndex:e,dataPointIndex:i,w:s},h=s.globals.ttZFormatter;null===i?o=s.globals.series[e]:s.globals.isXNumeric?(n=a[e][i],0===a[e].length&&(n=a[this.tooltipUtil.getFirstActiveXArray(a)][i])):n=void 0!==s.globals.labels[i]?s.globals.labels[i]:"";var c=n;s.globals.isXNumeric&&"datetime"===s.config.xaxis.type?n=new N(this.ctx).xLabelFormat(s.globals.ttKeyFormatter,c):n=s.globals.xLabelFormatter(c,l);return void 0!==s.config.tooltip.x.formatter&&(n=s.globals.ttKeyFormatter(c,l)),s.globals.seriesZ.length>0&&s.globals.seriesZ[0].length>0&&(r=h(s.globals.seriesZ[e][i],s)),{val:o,xVal:n,xAxisTTVal:"function"==typeof s.config.xaxis.tooltip.formatter?s.globals.xaxisTooltipFormatter(c,l):n,zVal:r}}},{key:"handleCustomTooltip",value:function(t){var e=t.i,i=t.j,s=this.w;this.ttCtx.getElTooltip().innerHTML=s.config.tooltip.custom({ctx:this.ctx,series:s.globals.series,seriesIndex:e,dataPointIndex:i,w:s})}}]),t}(),ut=function(){function t(i){e(this,t),this.ttCtx=i,this.ctx=i.ctx,this.w=i.w}return s(t,[{key:"moveXCrosshairs",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.ttCtx,s=this.w,a=i.getElXCrosshairs(),n=t-i.xcrosshairsWidth/2,r=s.globals.labels.slice().length;if(null!==e&&(n=s.globals.gridWidth/r*e),"tickWidth"===s.config.xaxis.crosshairs.width||"barWidth"===s.config.xaxis.crosshairs.width?n+i.xcrosshairsWidth>s.globals.gridWidth&&(n=s.globals.gridWidth-i.xcrosshairsWidth):null!==e&&(n+=s.globals.gridWidth/r/2),n<0&&(n=0),n>s.globals.gridWidth&&(n=s.globals.gridWidth),null!==a&&(a.setAttribute("x",n),a.setAttribute("x1",n),a.setAttribute("x2",n),a.setAttribute("y2",s.globals.gridHeight),a.classList.add("active")),i.blxaxisTooltip){var o=n;"tickWidth"!==s.config.xaxis.crosshairs.width&&"barWidth"!==s.config.xaxis.crosshairs.width||(o=n+i.xcrosshairsWidth/2),this.moveXAxisTooltip(o)}}},{key:"moveYCrosshairs",value:function(t){var e=this.ttCtx;null!==e.ycrosshairs&&(f.setAttrs(e.ycrosshairs,{y1:t,y2:t}),f.setAttrs(e.ycrosshairsHidden,{y1:t,y2:t}))}},{key:"moveXAxisTooltip",value:function(t){var e=this.w,i=this.ttCtx;if(null!==i.xaxisTooltip){i.xaxisTooltip.classList.add("active");var s=i.xaxisOffY+e.config.xaxis.tooltip.offsetY+e.globals.translateY+1+e.config.xaxis.offsetY;if(t-=i.xaxisTooltip.getBoundingClientRect().width/2,!isNaN(t)){t+=e.globals.translateX;var a;a=new f(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML),i.xaxisTooltipText.style.minWidth=a.width+"px",i.xaxisTooltip.style.left=t+"px",i.xaxisTooltip.style.top=s+"px"}}}},{key:"moveYAxisTooltip",value:function(t){var e=this.w,i=this.ttCtx;null===i.yaxisTTEls&&(i.yaxisTTEls=e.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxistooltip"));var s=parseInt(i.ycrosshairsHidden.getAttribute("y1")),a=e.globals.translateY+s,n=i.yaxisTTEls[t].getBoundingClientRect().height,r=e.globals.translateYAxisX[t]-2;e.config.yaxis[t].opposite&&(r-=26),a-=n/2,-1===e.globals.ignoreYAxisIndexes.indexOf(t)?(i.yaxisTTEls[t].classList.add("active"),i.yaxisTTEls[t].style.top=a+"px",i.yaxisTTEls[t].style.left=r+e.config.yaxis[t].tooltip.offsetX+"px"):i.yaxisTTEls[t].classList.remove("active")}},{key:"moveTooltip",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=this.w,a=this.ttCtx,n=a.getElTooltip(),r=a.tooltipRect,o=null!==i?parseInt(i):1,l=parseInt(t)+o+5,h=parseInt(e)+o/2;if(l>s.globals.gridWidth/2&&(l=l-r.ttWidth-o-15),l>s.globals.gridWidth-r.ttWidth-10&&(l=s.globals.gridWidth-r.ttWidth),l<-20&&(l=-20),s.config.tooltip.followCursor){var c=a.getElGrid().getBoundingClientRect();h=a.e.clientY+s.globals.translateY-c.top-r.ttHeight/2}var d=this.positionChecks(r,l,h);l=d.x,h=d.y,isNaN(l)||(l+=s.globals.translateX,n.style.left=l+"px",n.style.top=h+"px")}},{key:"positionChecks",value:function(t,e,i){var s=this.w;return t.ttHeight+i>s.globals.gridHeight&&(i=s.globals.gridHeight-t.ttHeight+s.globals.translateY),i<0&&(i=0),{x:e,y:i}}},{key:"moveMarkers",value:function(t,e){var i=this.w,s=this.ttCtx;if(i.globals.markers.size[t]>0)for(var a=i.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(t,"'] .apexcharts-marker")),n=0;n2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,a=this.w;"bubble"!==a.config.chart.type&&this.newPointSize(t,e);var n=e.getAttribute("cx"),r=e.getAttribute("cy");if(null!==i&&null!==s&&(n=i,r=s),this.tooltipPosition.moveXCrosshairs(n),!this.fixedTooltip){if("radar"===a.config.chart.type){var o=this.ttCtx.getElGrid().getBoundingClientRect();n=this.ttCtx.e.clientX-o.left}this.tooltipPosition.moveTooltip(n,r,a.config.markers.hover.size)}}},{key:"enlargePoints",value:function(t){for(var e=this.w,i=this.ttCtx,s=t,a=e.globals.dom.baseEl.querySelectorAll(".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker"),n=e.config.markers.hover.size,r=0;rr.globals.gridWidth/2&&(s=h-n.tooltipRect.ttWidth/2+d),n.w.config.tooltip.followCursor){var g=n.getElGrid().getBoundingClientRect();a=n.e.clientY-g.top+r.globals.translateY/2-10}}return{x:s,y:a}}},{key:"handleMarkerTooltip",value:function(t){var e,i,s=t.e,a=t.opt,n=t.x,r=t.y,o=this.w,l=this.ttCtx;if(s.target.classList.contains("apexcharts-marker")){var h=parseInt(a.paths.getAttribute("cx")),c=parseInt(a.paths.getAttribute("cy")),u=parseFloat(a.paths.getAttribute("val"));if(i=parseInt(a.paths.getAttribute("rel")),e=parseInt(a.paths.parentNode.parentNode.parentNode.getAttribute("rel"))-1,l.intersect){var g=d.findAncestor(a.paths,"apexcharts-series");g&&(e=parseInt(g.getAttribute("data:realIndex")))}if(l.tooltipLabels.drawSeriesTexts({ttItems:a.ttItems,i:e,j:i,shared:!l.showOnIntersect&&o.config.tooltip.shared}),"mouseup"===s.type&&l.markerClick(s,e,i),n=h,r=c+o.globals.translateY-1.4*l.tooltipRect.ttHeight,l.w.config.tooltip.followCursor){var f=l.getElGrid().getBoundingClientRect();r=l.e.clientY+o.globals.translateY-f.top}u<0&&(r=c),l.marker.enlargeCurrentPoint(i,a.paths,n,r)}return{x:n,y:r}}},{key:"handleBarTooltip",value:function(t){var e,i,s=t.e,a=t.opt,n=this.w,r=this.ttCtx,o=r.getElTooltip(),l=0,h=0,c=0,d=this.getBarTooltipXY({e:s,opt:a});e=d.i;var u=d.barHeight,g=d.j;if(n.globals.isBarHorizontal&&r.hasBars()||!n.config.tooltip.shared?(h=d.x,c=d.y,i=Array.isArray(n.config.stroke.width)?n.config.stroke.width[e]:n.config.stroke.width,l=h):n.globals.comboCharts||n.config.tooltip.shared||(l/=2),isNaN(c)&&(c=n.globals.svgHeight-r.tooltipRect.ttHeight),h+r.tooltipRect.ttWidth>n.globals.gridWidth?h-=r.tooltipRect.ttWidth:h<0&&(h+=r.tooltipRect.ttWidth),r.w.config.tooltip.followCursor){var f=r.getElGrid().getBoundingClientRect();c=r.e.clientY-f.top}if(null===r.tooltip&&(r.tooltip=n.globals.dom.baseEl.querySelector(".apexcharts-tooltip")),n.config.tooltip.shared||(n.globals.comboChartsHasBars?r.tooltipPosition.moveXCrosshairs(l+i/2):r.tooltipPosition.moveXCrosshairs(l)),!r.fixedTooltip&&(!n.config.tooltip.shared||n.globals.isBarHorizontal&&r.hasBars())){x&&(h=n.globals.gridWidth-h),o.style.left=h+n.globals.translateX+"px";var p=parseInt(a.paths.parentNode.getAttribute("data:realIndex")),x=n.globals.isMultipleYAxis?n.config.yaxis[p]&&n.config.yaxis[p].reversed:n.config.yaxis[0].reversed;!x||n.globals.isBarHorizontal&&r.hasBars()||(c=c+u-2*(n.globals.series[e][g]<0?u:0)),r.tooltipRect.ttHeight+c>n.globals.gridHeight?(c=n.globals.gridHeight-r.tooltipRect.ttHeight+n.globals.translateY,o.style.top=c+"px"):o.style.top=c+n.globals.translateY-r.tooltipRect.ttHeight/2+"px"}}},{key:"getBarTooltipXY",value:function(t){var e=t.e,i=t.opt,s=this.w,a=null,n=this.ttCtx,r=0,o=0,l=0,h=0,c=0,d=e.target.classList;if(d.contains("apexcharts-bar-area")||d.contains("apexcharts-candlestick-area")||d.contains("apexcharts-rangebar-area")){var u=e.target,g=u.getBoundingClientRect(),f=i.elGrid.getBoundingClientRect(),p=g.height;c=g.height;var x=g.width,b=parseInt(u.getAttribute("cx")),m=parseInt(u.getAttribute("cy"));h=parseFloat(u.getAttribute("barWidth"));var v="touchmove"===e.type?e.touches[0].clientX:e.clientX;a=parseInt(u.getAttribute("j")),r=parseInt(u.parentNode.getAttribute("rel"))-1,s.globals.comboCharts&&(r=parseInt(u.parentNode.getAttribute("data:realIndex"))),n.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:r,j:a,shared:!n.showOnIntersect&&s.config.tooltip.shared}),s.config.tooltip.followCursor?s.globals.isBarHorizontal?(o=v-f.left+15,l=m-n.dataPointsDividedHeight+p/2-n.tooltipRect.ttHeight/2):(o=s.globals.isXNumeric?b-x/2:b-n.dataPointsDividedWidth+x/2,l=e.clientY-f.top-n.tooltipRect.ttHeight/2-15):s.globals.isBarHorizontal?((o=b)0&&i.setAttribute("width",e.xcrosshairsWidth)}},{key:"handleYCrosshair",value:function(){var t=this.w,e=this.ttCtx;e.ycrosshairs=t.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs"),e.ycrosshairsHidden=t.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs-hidden")}},{key:"drawYaxisTooltipText",value:function(t,e,i){var s=this.ttCtx,a=this.w,n=a.globals.yLabelFormatters[t];if(s.blyaxisTooltip){var r=s.getElGrid().getBoundingClientRect(),o=(e-r.top)*i.yRatio[t],l=a.globals.maxYArr[t]-a.globals.minYArr[t],h=a.globals.minYArr[t]+(l-o);s.tooltipPosition.moveYCrosshairs(e-r.top),s.yaxisTooltipText[t].innerHTML=n(h),s.tooltipPosition.moveYAxisTooltip(t)}}}]),t}(),xt=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w;var s=this.w;this.tConfig=s.config.tooltip,this.tooltipUtil=new ct(this),this.tooltipLabels=new dt(this),this.tooltipPosition=new ut(this),this.marker=new gt(this),this.intersect=new ft(this),this.axesTooltip=new pt(this),this.showOnIntersect=this.tConfig.intersect,this.showTooltipTitle=this.tConfig.x.show,this.fixedTooltip=this.tConfig.fixed.enabled,this.xaxisTooltip=null,this.yaxisTTEls=null,this.isBarShared=!s.globals.isBarHorizontal&&this.tConfig.shared}return s(t,[{key:"getElTooltip",value:function(t){return t||(t=this),t.w.globals.dom.baseEl.querySelector(".apexcharts-tooltip")}},{key:"getElXCrosshairs",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-xcrosshairs")}},{key:"getElGrid",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-grid")}},{key:"drawTooltip",value:function(t){var e=this.w;this.xyRatios=t,this.blxaxisTooltip=e.config.xaxis.tooltip.enabled&&e.globals.axisCharts,this.blyaxisTooltip=e.config.yaxis[0].tooltip.enabled&&e.globals.axisCharts,this.allTooltipSeriesGroups=[],e.globals.axisCharts||(this.showTooltipTitle=!1);var i=document.createElement("div");if(i.classList.add("apexcharts-tooltip"),i.classList.add(this.tConfig.theme),e.globals.dom.elWrap.appendChild(i),e.globals.axisCharts){this.axesTooltip.drawXaxisTooltip(),this.axesTooltip.drawYaxisTooltip(),this.axesTooltip.setXCrosshairWidth(),this.axesTooltip.handleYCrosshair();var s=new H(this.ctx);this.xAxisTicksPositions=s.getXAxisTicksPositions()}if((e.globals.comboCharts&&!this.tConfig.shared||this.tConfig.intersect&&!this.tConfig.shared||("bar"===e.config.chart.type||"rangeBar"===e.config.chart.type)&&!this.tConfig.shared)&&(this.showOnIntersect=!0),0!==e.config.markers.size&&0!==e.globals.markers.largestSize||this.marker.drawDynamicPoints(this),e.globals.collapsedSeries.length!==e.globals.series.length){this.dataPointsDividedHeight=e.globals.gridHeight/e.globals.dataPoints,this.dataPointsDividedWidth=e.globals.gridWidth/e.globals.dataPoints,this.showTooltipTitle&&(this.tooltipTitle=document.createElement("div"),this.tooltipTitle.classList.add("apexcharts-tooltip-title"),this.tooltipTitle.style.fontFamily=this.tConfig.style.fontFamily||e.config.chart.fontFamily,this.tooltipTitle.style.fontSize=this.tConfig.style.fontSize,i.appendChild(this.tooltipTitle));var a=e.globals.series.length;(e.globals.xyCharts||e.globals.comboCharts)&&this.tConfig.shared&&(a=this.showOnIntersect?1:e.globals.series.length),this.ttItems=this.createTTElements(a),this.addSVGEvents()}}},{key:"createTTElements",value:function(t){for(var e=this.w,i=[],s=this.getElTooltip(),a=0;a0&&this.addPathsEventListeners(u,h);var g=t.globals.dom.baseEl.querySelectorAll(".apexcharts-area-series .apexcharts-marker");g.length>0&&this.addPathsEventListeners(g,h),this.hasBars()&&!this.tConfig.shared&&this.addBarsEventListeners(h)}}},{key:"drawFixedTooltipRect",value:function(){var t=this.w,e=this.getElTooltip(),i=e.getBoundingClientRect(),s=i.width+10,a=i.height+10,n=this.tConfig.fixed.offsetX,r=this.tConfig.fixed.offsetY;return this.tConfig.fixed.position.toLowerCase().indexOf("right")>-1&&(n=n+t.globals.svgWidth-s+10),this.tConfig.fixed.position.toLowerCase().indexOf("bottom")>-1&&(r=r+t.globals.svgHeight-a-10),e.style.left=n+"px",e.style.top=r+"px",{x:n,y:r,ttWidth:s,ttHeight:a}}},{key:"addPointsEventsListeners",value:function(t){var e=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers .apexcharts-marker");this.addPathsEventListeners(e,t)}},{key:"addBarsEventListeners",value:function(t){var e=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-rangebar-area");this.addPathsEventListeners(e,t)}},{key:"addPathsEventListeners",value:function(t,e){for(var i=this,s=this,a=function(a){var n={paths:t[a],tooltipEl:e.tooltipEl,tooltipY:e.tooltipY,tooltipX:e.tooltipX,elGrid:e.elGrid,hoverArea:e.hoverArea,ttItems:e.ttItems};i.w.globals.tooltipOpts=n;["mousemove","mouseup","touchmove","mouseout","touchend"].map(function(e){return t[a].addEventListener(e,s.seriesHover.bind(s,n),{capture:!1,passive:!0})})},n=0;nl.top+l.height)this.handleMouseOut(n);else{if(Array.isArray(this.tConfig.enabledOnSeries)){var d=parseInt(n.paths.getAttribute("index"));if(this.tConfig.enabledOnSeries.indexOf(d)<0)return void this.handleMouseOut(n)}var u=this.getElTooltip(),g=this.getElXCrosshairs(),f=r.globals.xyCharts||"bar"===r.config.chart.type&&!r.globals.isBarHorizontal&&this.hasBars()&&this.tConfig.shared||r.globals.comboCharts&&this.hasBars;if(r.globals.isBarHorizontal&&this.hasBars()&&(f=!1),"mousemove"===a.type||"touchmove"===a.type||"mouseup"===a.type){if(null!==g&&g.classList.add("active"),null!==this.ycrosshairs&&this.blyaxisTooltip&&this.ycrosshairs.classList.add("active"),f&&!this.showOnIntersect){e=(o=this.tooltipUtil.getNearestValues({context:this,hoverArea:n.hoverArea,elGrid:n.elGrid,clientX:h,clientY:c,hasBars:this.hasBars})).j;var p=o.capturedSeries;if(o.hoverX<0||o.hoverX>r.globals.gridWidth)return void this.handleMouseOut(n);if(null!==p){if(null===r.globals.series[p][e])return void n.tooltipEl.classList.remove("active");void 0!==r.globals.series[p][e]?this.tConfig.shared&&this.tooltipUtil.isXoverlap(e)&&this.tooltipUtil.isinitialSeriesSameLen()?this.create(a,this,p,e,n.ttItems):this.create(a,this,p,e,n.ttItems,!1):this.tooltipUtil.isXoverlap(e)&&this.create(a,this,0,e,n.ttItems)}else this.tooltipUtil.isXoverlap(e)&&this.create(a,this,0,e,n.ttItems)}else if("heatmap"===r.config.chart.type){var x=this.intersect.handleHeatTooltip({e:a,opt:n,x:i,y:s});i=x.x,s=x.y,u.style.left=i+"px",u.style.top=s+"px"}else this.hasBars&&this.intersect.handleBarTooltip({e:a,opt:n}),this.hasMarkers&&this.intersect.handleMarkerTooltip({e:a,opt:n,x:i,y:s});if(this.blyaxisTooltip)for(var b=0;b0}},{key:"getElBars",value:function(){return this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-rangebar-series")}},{key:"hasBars",value:function(){return this.getElBars().length>0}},{key:"markerClick",value:function(t,e,i){var s=this.w;"function"==typeof s.config.chart.events.markerClick&&s.config.chart.events.markerClick(t,this.ctx,{seriesIndex:e,dataPointIndex:i,w:s}),this.ctx.fireEvent("markerClick",[t,this.ctx,{seriesIndex:e,dataPointIndex:i,w:s}])}},{key:"create",value:function(t,e,i,s,a){var n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,r=this.w,o=e;"mouseup"===t.type&&this.markerClick(t,i,s),null===n&&(n=this.tConfig.shared);var l=this.hasMarkers(),h=this.getElBars();if(n){if(o.tooltipLabels.drawSeriesTexts({ttItems:a,i:i,j:s,shared:!this.showOnIntersect&&this.tConfig.shared}),l&&(r.globals.markers.largestSize>0?o.marker.enlargePoints(s):o.tooltipPosition.moveDynamicPointsOnHover(s)),this.hasBars()&&(this.barSeriesHeight=this.tooltipUtil.getBarsHeight(h),this.barSeriesHeight>0)){var c=new f(this.ctx),d=r.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(s,"']"));this.deactivateHoverFilter(),this.tooltipPosition.moveStickyTooltipOverBars(s);for(var u=0;u\n \n \n\n',title:this.localeValues.zoomIn,class:"apexcharts-zoom-in-icon"}),this.t.zoomout&&t.config.chart.zoom.enabled&&s.push({el:this.elZoomOut,icon:"string"==typeof this.t.zoomout?this.t.zoomout:'\n \n \n\n',title:this.localeValues.zoomOut,class:"apexcharts-zoom-out-icon"}),this.t.zoom&&t.config.chart.zoom.enabled&&s.push({el:this.elZoom,icon:"string"==typeof this.t.zoom?this.t.zoom:'\n \n \n \n',title:this.localeValues.selectionZoom,class:t.globals.isTouchDevice?"hidden":"apexcharts-zoom-icon"}),this.t.selection&&t.config.chart.selection.enabled&&s.push({el:this.elSelection,icon:"string"==typeof this.t.selection?this.t.selection:'\n \n \n',title:this.localeValues.selection,class:t.globals.isTouchDevice?"hidden":"apexcharts-selection-icon"}),this.t.pan&&t.config.chart.zoom.enabled&&s.push({el:this.elPan,icon:"string"==typeof this.t.pan?this.t.pan:'\n \n \n \n \n \n \n \n',title:this.localeValues.pan,class:t.globals.isTouchDevice?"hidden":"apexcharts-pan-icon"}),this.t.reset&&t.config.chart.zoom.enabled&&s.push({el:this.elZoomReset,icon:"string"==typeof this.t.reset?this.t.reset:'\n \n \n',title:this.localeValues.reset,class:"apexcharts-reset-zoom-icon"}),this.t.download&&s.push({el:this.elMenuIcon,icon:"string"==typeof this.t.download?this.t.download:'',title:this.localeValues.menu,class:"apexcharts-menu-icon"});for(var a=0;a0&&e.height>0&&this.slDraggableRect.selectize().resize({constraint:{minX:0,minY:0,maxX:t.globals.gridWidth,maxY:t.globals.gridHeight}}).on("resizing",this.selectionDragging.bind(this,"resizing"))}}},{key:"preselectedSelection",value:function(){var t=this.w,e=this.xyRatios;if(!t.globals.zoomEnabled)if(void 0!==t.globals.selection&&null!==t.globals.selection)this.drawSelectionRect(t.globals.selection);else if(void 0!==t.config.chart.selection.xaxis.min&&void 0!==t.config.chart.selection.xaxis.max){var i=(t.config.chart.selection.xaxis.min-t.globals.minX)/e.xRatio,s={x:i,y:0,width:t.globals.gridWidth-(t.globals.maxX-t.config.chart.selection.xaxis.max)/e.xRatio-i,height:t.globals.gridHeight,translateX:0,translateY:0,selectionEnabled:!0};this.drawSelectionRect(s),this.makeSelectionRectDraggable(),"function"==typeof t.config.chart.events.selection&&t.config.chart.events.selection(this.ctx,{xaxis:{min:t.config.chart.selection.xaxis.min,max:t.config.chart.selection.xaxis.max},yaxis:{}})}}},{key:"drawSelectionRect",value:function(t){var e=t.x,i=t.y,s=t.width,a=t.height,n=t.translateX,r=t.translateY,o=this.w,l=this.zoomRect,h=this.selectionRect;if(this.dragged||null!==o.globals.selection){var c={transform:"translate("+n+", "+r+")"};o.globals.zoomEnabled&&this.dragged&&(l.attr({x:e,y:i,width:s,height:a,fill:o.config.chart.zoom.zoomedArea.fill.color,"fill-opacity":o.config.chart.zoom.zoomedArea.fill.opacity,stroke:o.config.chart.zoom.zoomedArea.stroke.color,"stroke-width":o.config.chart.zoom.zoomedArea.stroke.width,"stroke-opacity":o.config.chart.zoom.zoomedArea.stroke.opacity}),f.setAttrs(l.node,c)),o.globals.selectionEnabled&&(h.attr({x:e,y:i,width:s>0?s:0,height:a>0?a:0,fill:o.config.chart.selection.fill.color,"fill-opacity":o.config.chart.selection.fill.opacity,stroke:o.config.chart.selection.stroke.color,"stroke-width":o.config.chart.selection.stroke.width,"stroke-dasharray":o.config.chart.selection.stroke.dashArray,"stroke-opacity":o.config.chart.selection.stroke.opacity}),f.setAttrs(h.node,c))}}},{key:"hideSelectionRect",value:function(t){t&&t.attr({x:0,y:0,width:0,height:0})}},{key:"selectionDrawing",value:function(t){var e=t.context,i=t.zoomtype,s=this.w,a=e,n=this.gridRect.getBoundingClientRect(),r=a.startX-1,o=a.startY,l=a.clientX-n.left-r,h=a.clientY-n.top-o,c=0,d=0,u={};return(Math.abs(l+r)>s.globals.gridWidth||a.clientX-n.left<0)&&(a.hideSelectionRect(this.zoomRect),a.dragged=!1,a.w.globals.mousedown=!1),r>a.clientX-n.left&&(c=-(l=Math.abs(l))),o>a.clientY-n.top&&(d=-(h=Math.abs(h))),u="x"===i?{x:r,y:0,width:l,height:s.globals.gridHeight,translateX:c,translateY:0}:"y"===i?{x:0,y:o,width:s.globals.gridWidth,height:h,translateX:0,translateY:d}:{x:r,y:o,width:l,height:h,translateX:c,translateY:d},a.drawSelectionRect(u),a.selectionDragging("resizing"),u}},{key:"selectionDragging",value:function(t,e){var i=this,s=this.w,a=this.xyRatios,n=this.selectionRect,r=0;"resizing"===t&&(r=30),"function"==typeof s.config.chart.events.selection&&s.globals.selectionEnabled&&(clearTimeout(this.w.globals.selectionResizeTimer),this.w.globals.selectionResizeTimer=window.setTimeout(function(){var t=i.gridRect.getBoundingClientRect(),e=n.node.getBoundingClientRect(),r=s.globals.xAxisScale.niceMin+(e.left-t.left)*a.xRatio,o=s.globals.xAxisScale.niceMin+(e.right-t.left)*a.xRatio,l=s.globals.yAxisScale[0].niceMin+(t.bottom-e.bottom)*a.yRatio[0],h=s.globals.yAxisScale[0].niceMax-(e.top-t.top)*a.yRatio[0];s.config.chart.events.selection(i.ctx,{xaxis:{min:r,max:o},yaxis:{min:l,max:h}})},r))}},{key:"selectionDrawn",value:function(t){var e=t.context,i=t.zoomtype,s=this.w,a=e,n=this.xyRatios,r=this.ctx.toolbar;if(a.startX>a.endX){var o=a.startX;a.startX=a.endX,a.endX=o}if(a.startY>a.endY){var l=a.startY;a.startY=a.endY,a.endY=l}var h=s.globals.xAxisScale.niceMin+a.startX*n.xRatio,c=s.globals.xAxisScale.niceMin+a.endX*n.xRatio,u=[],g=[];if(s.config.yaxis.forEach(function(t,e){u.push(Math.floor(s.globals.yAxisScale[e].niceMax-n.yRatio[e]*a.startY)),g.push(Math.floor(s.globals.yAxisScale[e].niceMax-n.yRatio[e]*a.endY))}),a.dragged&&(a.dragX>10||a.dragY>10)&&h!==c)if(s.globals.zoomEnabled){var f=d.clone(s.config.yaxis);s.globals.zoomed||(s.globals.lastXAxis=d.clone(s.config.xaxis),s.globals.lastYAxis=d.clone(s.config.yaxis));var p={min:h,max:c};if("xy"!==i&&"y"!==i||f.forEach(function(t,e){f[e].min=g[e],f[e].max=u[e]}),s.config.chart.zoom.autoScaleYaxis){var x=new B(a.ctx);f=x.autoScaleY(a.ctx,{xaxis:p})}if(r){var b=r.getBeforeZoomRange(p,f);b&&(p=b.xaxis?b.xaxis:p,f=b.yaxis?b.yaxe:f)}a.ctx._updateOptions({xaxis:p,yaxis:f},!1,a.w.config.chart.animations.dynamicAnimation.enabled),"function"==typeof s.config.chart.events.zoomed&&r.zoomCallback(p,f),s.globals.zoomed=!0}else if(s.globals.selectionEnabled){var m,v=null;m={min:h,max:c},"xy"!==i&&"y"!==i||(v=d.clone(s.config.yaxis)).forEach(function(t,e){v[e].min=g[e],v[e].max=u[e]}),s.globals.selection=a.selection,"function"==typeof s.config.chart.events.selection&&s.config.chart.events.selection(a.ctx,{xaxis:m,yaxis:v})}}},{key:"panDragging",value:function(t){var e,i=t.context,s=(t.zoomtype,this.w),a=i;if(void 0!==s.globals.lastClientPosition.x){var n=s.globals.lastClientPosition.x-a.clientX,r=s.globals.lastClientPosition.y-a.clientY;Math.abs(n)>Math.abs(r)&&n>0?e="left":Math.abs(n)>Math.abs(r)&&n<0?e="right":Math.abs(r)>Math.abs(n)&&r>0?e="up":Math.abs(r)>Math.abs(n)&&r<0&&(e="down")}s.globals.lastClientPosition={x:a.clientX,y:a.clientY};var o=s.globals.minX,l=s.globals.maxX;this.panScrolled(e,o,l)}},{key:"panScrolled",value:function(t,e,i){var s=this.w,a=this.xyRatios,n=d.clone(s.config.yaxis);"left"===t?(e=s.globals.minX+s.globals.gridWidth/15*a.xRatio,i=s.globals.maxX+s.globals.gridWidth/15*a.xRatio):"right"===t&&(e=s.globals.minX-s.globals.gridWidth/15*a.xRatio,i=s.globals.maxX-s.globals.gridWidth/15*a.xRatio),(es.globals.initialmaxX)&&(e=s.globals.minX,i=s.globals.maxX);var r={min:e,max:i};s.config.chart.zoom.autoScaleYaxis&&(n=new B(me.ctx).autoScaleY(me.ctx,{xaxis:r}));this.ctx._updateOptions({xaxis:{min:e,max:i},yaxis:n},!1,!1),"function"==typeof s.config.chart.events.scrolled&&s.config.chart.events.scrolled(this.ctx,{xaxis:{min:e,max:i}})}}]),i}(),vt=function(){function t(i){e(this,t),this.ctx=i,this.w=i.w}return s(t,[{key:"draw",value:function(){this.drawTitleSubtitle("title"),this.drawTitleSubtitle("subtitle")}},{key:"drawTitleSubtitle",value:function(t){var e=this.w,i="title"===t?e.config.title:e.config.subtitle,s=e.globals.svgWidth/2,a=i.offsetY,n="middle";if("left"===i.align?(s=10,n="start"):"right"===i.align&&(s=e.globals.svgWidth-10,n="end"),s+=i.offsetX,a=a+parseInt(i.style.fontSize)+2,void 0!==i.text){var r=new f(this.ctx).drawText({x:s,y:a,text:i.text,textAnchor:n,fontSize:i.style.fontSize,fontFamily:i.style.fontFamily,foreColor:i.style.color,opacity:1});r.node.setAttribute("class","apexcharts-".concat(t,"-text")),e.globals.dom.Paper.add(r)}}}]),t}();st="undefined"!=typeof window?window:void 0,at=function(e,i){var s=(void 0!==this?this:e).SVG=function(t){if(s.supported)return t=new s.Doc(t),s.parser.draw||s.prepare(),t};if(s.ns="http://www.w3.org/2000/svg",s.xmlns="http://www.w3.org/2000/xmlns/",s.xlink="http://www.w3.org/1999/xlink",s.svgjs="http://svgjs.com/svgjs",s.supported=!0,!s.supported)return!1;s.did=1e3,s.eid=function(t){return"Svgjs"+d(t)+s.did++},s.create=function(t){var e=i.createElementNS(this.ns,t);return e.setAttribute("id",this.eid(t)),e},s.extend=function(){var t,e,i,a;for(e=(t=[].slice.call(arguments)).pop(),a=t.length-1;a>=0;a--)if(t[a])for(i in e)t[a].prototype[i]=e[i];s.Set&&s.Set.inherit&&s.Set.inherit()},s.invent=function(t){var e="function"==typeof t.create?t.create:function(){this.constructor.call(this,s.create(t.create))};return t.inherit&&(e.prototype=new t.inherit),t.extend&&s.extend(e,t.extend),t.construct&&s.extend(t.parent||s.Container,t.construct),e},s.adopt=function(t){return t?t.instance?t.instance:((i="svg"==t.nodeName?t.parentNode instanceof e.SVGElement?new s.Nested:new s.Doc:"linearGradient"==t.nodeName?new s.Gradient("linear"):"radialGradient"==t.nodeName?new s.Gradient("radial"):s[d(t.nodeName)]?new(s[d(t.nodeName)]):new s.Element(t)).type=t.nodeName,i.node=t,t.instance=i,i instanceof s.Doc&&i.namespace().defs(),i.setData(JSON.parse(t.getAttribute("svgjs:data"))||{}),i):null;var i},s.prepare=function(){var t=i.getElementsByTagName("body")[0],e=(t?new s.Doc(t):s.adopt(i.documentElement).nested()).size(2,0);s.parser={body:t||i.documentElement,draw:e.style("opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden").node,poly:e.polyline().node,path:e.path().node,native:s.create("svg")}},s.parser={native:s.create("svg")},i.addEventListener("DOMContentLoaded",function(){s.parser.draw||s.prepare()},!1),s.regex={numberAndUnit:/^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i,hex:/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,rgb:/rgb\((\d+),(\d+),(\d+)\)/,reference:/#([a-z0-9\-_]+)/i,transforms:/\)\s*,?\s*/,whitespace:/\s/g,isHex:/^#[a-f0-9]{3,6}$/i,isRgb:/^rgb\(/,isCss:/[^:]+:[^;]+;?/,isBlank:/^(\s+)?$/,isNumber:/^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,isPercent:/^-?[\d\.]+%$/,isImage:/\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i,delimiter:/[\s,]+/,hyphen:/([^e])\-/gi,pathLetters:/[MLHVCSQTAZ]/gi,isPathLetter:/[MLHVCSQTAZ]/i,numbersWithDots:/((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi,dots:/\./g},s.utils={map:function(t,e){var i,s=t.length,a=[];for(i=0;i1?1:t,new s.Color({r:~~(this.r+(this.destination.r-this.r)*t),g:~~(this.g+(this.destination.g-this.g)*t),b:~~(this.b+(this.destination.b-this.b)*t)})):this}}),s.Color.test=function(t){return t+="",s.regex.isHex.test(t)||s.regex.isRgb.test(t)},s.Color.isRgb=function(t){return t&&"number"==typeof t.r&&"number"==typeof t.g&&"number"==typeof t.b},s.Color.isColor=function(t){return s.Color.isRgb(t)||s.Color.test(t)},s.Array=function(t,e){0==(t=(t||[]).valueOf()).length&&e&&(t=e.valueOf()),this.value=this.parse(t)},s.extend(s.Array,{morph:function(t){if(this.destination=this.parse(t),this.value.length!=this.destination.length){for(var e=this.value[this.value.length-1],i=this.destination[this.destination.length-1];this.value.length>this.destination.length;)this.destination.push(i);for(;this.value.length=0;s--)this.value[s]=[this.value[s][0]+t,this.value[s][1]+e];return this},size:function(t,e){var i,s=this.bbox();for(i=this.value.length-1;i>=0;i--)s.width&&(this.value[i][0]=(this.value[i][0]-s.x)*t/s.width+s.x),s.height&&(this.value[i][1]=(this.value[i][1]-s.y)*e/s.height+s.y);return this},bbox:function(){return s.parser.draw||s.prepare(),s.parser.poly.setAttribute("points",this.toString()),s.parser.poly.getBBox()}});for(var a={M:function(t,e,i){return e.x=i.x=t[0],e.y=i.y=t[1],["M",e.x,e.y]},L:function(t,e){return e.x=t[0],e.y=t[1],["L",t[0],t[1]]},H:function(t,e){return e.x=t[0],["H",t[0]]},V:function(t,e){return e.y=t[0],["V",t[0]]},C:function(t,e){return e.x=t[4],e.y=t[5],["C",t[0],t[1],t[2],t[3],t[4],t[5]]},S:function(t,e){return e.x=t[2],e.y=t[3],["S",t[0],t[1],t[2],t[3]]},Q:function(t,e){return e.x=t[2],e.y=t[3],["Q",t[0],t[1],t[2],t[3]]},T:function(t,e){return e.x=t[0],e.y=t[1],["T",t[0],t[1]]},Z:function(t,e,i){return e.x=i.x,e.y=i.y,["Z"]},A:function(t,e){return e.x=t[5],e.y=t[6],["A",t[0],t[1],t[2],t[3],t[4],t[5],t[6]]}},n="mlhvqtcsaz".split(""),r=0,o=n.length;r=0;a--)"M"==(s=this.value[a][0])||"L"==s||"T"==s?(this.value[a][1]+=t,this.value[a][2]+=e):"H"==s?this.value[a][1]+=t:"V"==s?this.value[a][1]+=e:"C"==s||"S"==s||"Q"==s?(this.value[a][1]+=t,this.value[a][2]+=e,this.value[a][3]+=t,this.value[a][4]+=e,"C"==s&&(this.value[a][5]+=t,this.value[a][6]+=e)):"A"==s&&(this.value[a][6]+=t,this.value[a][7]+=e);return this},size:function(t,e){var i,s,a=this.bbox();for(i=this.value.length-1;i>=0;i--)"M"==(s=this.value[i][0])||"L"==s||"T"==s?(this.value[i][1]=(this.value[i][1]-a.x)*t/a.width+a.x,this.value[i][2]=(this.value[i][2]-a.y)*e/a.height+a.y):"H"==s?this.value[i][1]=(this.value[i][1]-a.x)*t/a.width+a.x:"V"==s?this.value[i][1]=(this.value[i][1]-a.y)*e/a.height+a.y:"C"==s||"S"==s||"Q"==s?(this.value[i][1]=(this.value[i][1]-a.x)*t/a.width+a.x,this.value[i][2]=(this.value[i][2]-a.y)*e/a.height+a.y,this.value[i][3]=(this.value[i][3]-a.x)*t/a.width+a.x,this.value[i][4]=(this.value[i][4]-a.y)*e/a.height+a.y,"C"==s&&(this.value[i][5]=(this.value[i][5]-a.x)*t/a.width+a.x,this.value[i][6]=(this.value[i][6]-a.y)*e/a.height+a.y)):"A"==s&&(this.value[i][1]=this.value[i][1]*t/a.width,this.value[i][2]=this.value[i][2]*e/a.height,this.value[i][6]=(this.value[i][6]-a.x)*t/a.width+a.x,this.value[i][7]=(this.value[i][7]-a.y)*e/a.height+a.y);return this},equalCommands:function(t){var e,i,a;for(t=new s.PathArray(t),a=this.value.length===t.value.length,e=0,i=this.value.length;a&&el);return n},bbox:function(){return s.parser.draw||s.prepare(),s.parser.path.setAttribute("d",this.toString()),s.parser.path.getBBox()}}),s.Number=s.invent({create:function(t,e){this.value=0,this.unit=e||"","number"==typeof t?this.value=isNaN(t)?0:isFinite(t)?t:t<0?-3.4e38:3.4e38:"string"==typeof t?(e=t.match(s.regex.numberAndUnit))&&(this.value=parseFloat(e[1]),"%"==e[5]?this.value/=100:"s"==e[5]&&(this.value*=1e3),this.unit=e[5]):t instanceof s.Number&&(this.value=t.valueOf(),this.unit=t.unit)},extend:{toString:function(){return("%"==this.unit?~~(1e8*this.value)/1e6:"s"==this.unit?this.value/1e3:this.value)+this.unit},toJSON:function(){return this.toString()},valueOf:function(){return this.value},plus:function(t){return t=new s.Number(t),new s.Number(this+t,this.unit||t.unit)},minus:function(t){return t=new s.Number(t),new s.Number(this-t,this.unit||t.unit)},times:function(t){return t=new s.Number(t),new s.Number(this*t,this.unit||t.unit)},divide:function(t){return t=new s.Number(t),new s.Number(this/t,this.unit||t.unit)},to:function(t){var e=new s.Number(this);return"string"==typeof t&&(e.unit=t),e},morph:function(t){return this.destination=new s.Number(t),t.relative&&(this.destination.value+=this.value),this},at:function(t){return this.destination?new s.Number(this.destination).minus(this).times(t).plus(this):this}}}),s.Element=s.invent({create:function(t){this._stroke=s.defaults.attrs.stroke,this._event=null,this.dom={},(this.node=t)&&(this.type=t.nodeName,this.node.instance=this,this._stroke=t.getAttribute("stroke")||this._stroke)},extend:{x:function(t){return this.attr("x",t)},y:function(t){return this.attr("y",t)},cx:function(t){return null==t?this.x()+this.width()/2:this.x(t-this.width()/2)},cy:function(t){return null==t?this.y()+this.height()/2:this.y(t-this.height()/2)},move:function(t,e){return this.x(t).y(e)},center:function(t,e){return this.cx(t).cy(e)},width:function(t){return this.attr("width",t)},height:function(t){return this.attr("height",t)},size:function(t,e){var i=g(this,t,e);return this.width(new s.Number(i.width)).height(new s.Number(i.height))},clone:function(t){this.writeDataToDom();var e=b(this.node.cloneNode(!0));return t?t.add(e):this.after(e),e},remove:function(){return this.parent()&&this.parent().removeElement(this),this},replace:function(t){return this.after(t).remove(),t},addTo:function(t){return t.put(this)},putIn:function(t){return t.add(this)},id:function(t){return this.attr("id",t)},inside:function(t,e){var i=this.bbox();return t>i.x&&e>i.y&&t/,"").replace(/<\/svg>$/,"");e.innerHTML=""+t.replace(/\n/,"").replace(/<([\w:-]+)([^<]+?)\/>/g,"<$1$2>")+"";for(var a=0,n=e.firstChild.childNodes.length;a":function(t){return-Math.cos(t*Math.PI)/2+.5},">":function(t){return Math.sin(t*Math.PI/2)},"<":function(t){return 1-Math.cos(t*Math.PI/2)}},s.morph=function(t){return function(e,i){return new s.MorphObj(e,i).at(t)}},s.Situation=s.invent({create:function(t){this.init=!1,this.reversed=!1,this.reversing=!1,this.duration=new s.Number(t.duration).valueOf(),this.delay=new s.Number(t.delay).valueOf(),this.start=+new Date+this.delay,this.finish=this.start+this.duration,this.ease=t.ease,this.loop=0,this.loops=!1,this.animations={},this.attrs={},this.styles={},this.transforms=[],this.once={}}}),s.FX=s.invent({create:function(t){this._target=t,this.situations=[],this.active=!1,this.situation=null,this.paused=!1,this.lastPos=0,this.pos=0,this.absPos=0,this._speed=1},extend:{animate:function(e,i,a){"object"===t(e)&&(i=e.ease,a=e.delay,e=e.duration);var n=new s.Situation({duration:e||1e3,delay:a||0,ease:s.easing[i||"-"]||i});return this.queue(n),this},delay:function(t){var e=new s.Situation({duration:t,delay:0,ease:s.easing["-"]});return this.queue(e)},target:function(t){return t&&t instanceof s.Element?(this._target=t,this):this._target},timeToAbsPos:function(t){return(t-this.situation.start)/(this.situation.duration/this._speed)},absPosToTime:function(t){return this.situation.duration/this._speed*t+this.situation.start},startAnimFrame:function(){this.stopAnimFrame(),this.animationFrame=e.requestAnimationFrame(function(){this.step()}.bind(this))},stopAnimFrame:function(){e.cancelAnimationFrame(this.animationFrame)},start:function(){return!this.active&&this.situation&&(this.active=!0,this.startCurrent()),this},startCurrent:function(){return this.situation.start=+new Date+this.situation.delay/this._speed,this.situation.finish=this.situation.start+this.situation.duration/this._speed,this.initAnimations().step()},queue:function(t){return("function"==typeof t||t instanceof s.Situation)&&this.situations.push(t),this.situation||(this.situation=this.situations.shift()),this},dequeue:function(){return this.stop(),this.situation=this.situations.shift(),this.situation&&(this.situation instanceof s.Situation?this.start():this.situation.call(this)),this},initAnimations:function(){var t,e,i,a=this.situation;if(a.init)return this;for(t in a.animations)for(i=this.target()[t](),Array.isArray(i)||(i=[i]),Array.isArray(a.animations[t])||(a.animations[t]=[a.animations[t]]),e=i.length;e--;)a.animations[t][e]instanceof s.Number&&(i[e]=new s.Number(i[e])),a.animations[t][e]=i[e].morph(a.animations[t][e]);for(t in a.attrs)a.attrs[t]=new s.MorphObj(this.target().attr(t),a.attrs[t]);for(t in a.styles)a.styles[t]=new s.MorphObj(this.target().style(t),a.styles[t]);return a.initialTransformation=this.target().matrixify(),a.init=!0,this},clearQueue:function(){return this.situations=[],this},clearCurrent:function(){return this.situation=null,this},stop:function(t,e){var i=this.active;return this.active=!1,e&&this.clearQueue(),t&&this.situation&&(!i&&this.startCurrent(),this.atEnd()),this.stopAnimFrame(),this.clearCurrent()},reset:function(){if(this.situation){var t=this.situation;this.stop(),this.situation=t,this.atStart()}return this},finish:function(){for(this.stop(!0,!1);this.dequeue().situation&&this.stop(!0,!1););return this.clearQueue().clearCurrent(),this},atStart:function(){return this.at(0,!0)},atEnd:function(){return!0===this.situation.loops&&(this.situation.loops=this.situation.loop+1),"number"==typeof this.situation.loops?this.at(this.situation.loops,!0):this.at(1,!0)},at:function(t,e){var i=this.situation.duration/this._speed;return this.absPos=t,e||(this.situation.reversed&&(this.absPos=1-this.absPos),this.absPos+=this.situation.loop),this.situation.start=+new Date-this.absPos*i,this.situation.finish=this.situation.start+i,this.step(!0)},speed:function(t){return 0===t?this.pause():t?(this._speed=t,this.at(this.absPos,!0)):this._speed},loop:function(t,e){var i=this.last();return i.loops=null==t||t,i.loop=0,e&&(i.reversing=!0),this},pause:function(){return this.paused=!0,this.stopAnimFrame(),this},play:function(){return this.paused?(this.paused=!1,this.at(this.absPos,!0)):this},reverse:function(t){var e=this.last();return e.reversed=void 0===t?!e.reversed:t,this},progress:function(t){return t?this.situation.ease(this.pos):this.pos},after:function(t){var e=this.last();return this.target().on("finished.fx",function i(s){s.detail.situation==e&&(t.call(this,e),this.off("finished.fx",i))}),this._callStart()},during:function(t){var e=this.last(),i=function(i){i.detail.situation==e&&t.call(this,i.detail.pos,s.morph(i.detail.pos),i.detail.eased,e)};return this.target().off("during.fx",i).on("during.fx",i),this.after(function(){this.off("during.fx",i)}),this._callStart()},afterAll:function(t){var e=function e(i){t.call(this),this.off("allfinished.fx",e)};return this.target().off("allfinished.fx",e).on("allfinished.fx",e),this._callStart()},duringAll:function(t){var e=function(e){t.call(this,e.detail.pos,s.morph(e.detail.pos),e.detail.eased,e.detail.situation)};return this.target().off("during.fx",e).on("during.fx",e),this.afterAll(function(){this.off("during.fx",e)}),this._callStart()},last:function(){return this.situations.length?this.situations[this.situations.length-1]:this.situation},add:function(t,e,i){return this.last()[i||"animations"][t]=e,this._callStart()},step:function(t){var e,i,s;(t||(this.absPos=this.timeToAbsPos(+new Date)),!1!==this.situation.loops)?(e=Math.max(this.absPos,0),i=Math.floor(e),!0===this.situation.loops||ithis.lastPos&&n<=a&&(this.situation.once[n].call(this.target(),this.pos,a),delete this.situation.once[n]);return this.active&&this.target().fire("during",{pos:this.pos,eased:a,fx:this,situation:this.situation}),this.situation?(this.eachAt(),1==this.pos&&!this.situation.reversed||this.situation.reversed&&0==this.pos?(this.stopAnimFrame(),this.target().fire("finished",{fx:this,situation:this.situation}),this.situations.length||(this.target().fire("allfinished"),this.situations.length||(this.target().off(".fx"),this.active=!1)),this.active?this.dequeue():this.clearCurrent()):!this.paused&&this.active&&this.startAnimFrame(),this.lastPos=a,this):this},eachAt:function(){var t,e,i,a=this,n=this.target(),r=this.situation;for(t in r.animations)i=[].concat(r.animations[t]).map(function(t){return"string"!=typeof t&&t.at?t.at(r.ease(a.pos),a.pos):t}),n[t].apply(n,i);for(t in r.attrs)i=[t].concat(r.attrs[t]).map(function(t){return"string"!=typeof t&&t.at?t.at(r.ease(a.pos),a.pos):t}),n.attr.apply(n,i);for(t in r.styles)i=[t].concat(r.styles[t]).map(function(t){return"string"!=typeof t&&t.at?t.at(r.ease(a.pos),a.pos):t}),n.style.apply(n,i);if(r.transforms.length){for(i=r.initialTransformation,t=0,e=r.transforms.length;t=0;--i)this[y[i]]=null!=e[y[i]]?e[y[i]]:a[y[i]]},extend:{extract:function(){var t=f(this,0,1),e=f(this,1,0),i=180/Math.PI*Math.atan2(t.y,t.x)-90;return{x:this.e,y:this.f,transformedX:(this.e*Math.cos(i*Math.PI/180)+this.f*Math.sin(i*Math.PI/180))/Math.sqrt(this.a*this.a+this.b*this.b),transformedY:(this.f*Math.cos(i*Math.PI/180)+this.e*Math.sin(-i*Math.PI/180))/Math.sqrt(this.c*this.c+this.d*this.d),skewX:-i,skewY:180/Math.PI*Math.atan2(e.y,e.x),scaleX:Math.sqrt(this.a*this.a+this.b*this.b),scaleY:Math.sqrt(this.c*this.c+this.d*this.d),rotation:i,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f,matrix:new s.Matrix(this)}},clone:function(){return new s.Matrix(this)},morph:function(t){return this.destination=new s.Matrix(t),this},at:function(t){return this.destination?new s.Matrix({a:this.a+(this.destination.a-this.a)*t,b:this.b+(this.destination.b-this.b)*t,c:this.c+(this.destination.c-this.c)*t,d:this.d+(this.destination.d-this.d)*t,e:this.e+(this.destination.e-this.e)*t,f:this.f+(this.destination.f-this.f)*t}):this},multiply:function(t){return new s.Matrix(this.native().multiply(function(t){t instanceof s.Matrix||(t=new s.Matrix(t));return t}(t).native()))},inverse:function(){return new s.Matrix(this.native().inverse())},translate:function(t,e){return new s.Matrix(this.native().translate(t||0,e||0))},scale:function(t,e,i,a){return 1==arguments.length?e=t:3==arguments.length&&(a=i,i=e,e=t),this.around(i,a,new s.Matrix(t,0,0,e,0,0))},rotate:function(t,e,i){return t=s.utils.radians(t),this.around(e,i,new s.Matrix(Math.cos(t),Math.sin(t),-Math.sin(t),Math.cos(t),0,0))},flip:function(t,e){return"x"==t?this.scale(-1,1,e,0):"y"==t?this.scale(1,-1,0,e):this.scale(-1,-1,t,null!=e?e:t)},skew:function(t,e,i,a){return 1==arguments.length?e=t:3==arguments.length&&(a=i,i=e,e=t),t=s.utils.radians(t),e=s.utils.radians(e),this.around(i,a,new s.Matrix(1,Math.tan(e),Math.tan(t),1,0,0))},skewX:function(t,e,i){return this.skew(t,0,e,i)},skewY:function(t,e,i){return this.skew(0,t,e,i)},around:function(t,e,i){return this.multiply(new s.Matrix(1,0,0,1,t||0,e||0)).multiply(i).multiply(new s.Matrix(1,0,0,1,-t||0,-e||0))},native:function(){for(var t=s.parser.native.createSVGMatrix(),e=y.length-1;e>=0;e--)t[y[e]]=this[y[e]];return t},toString:function(){return"matrix("+v(this.a)+","+v(this.b)+","+v(this.c)+","+v(this.d)+","+v(this.e)+","+v(this.f)+")"}},parent:s.Element,construct:{ctm:function(){return new s.Matrix(this.node.getCTM())},screenCTM:function(){if(this instanceof s.Nested){var t=this.rect(1,1),e=t.node.getScreenCTM();return t.remove(),new s.Matrix(e)}return new s.Matrix(this.node.getScreenCTM())}}}),s.Point=s.invent({create:function(e,i){var s;s=Array.isArray(e)?{x:e[0],y:e[1]}:"object"===t(e)?{x:e.x,y:e.y}:null!=e?{x:e,y:null!=i?i:e}:{x:0,y:0},this.x=s.x,this.y=s.y},extend:{clone:function(){return new s.Point(this)},morph:function(t,e){return this.destination=new s.Point(t,e),this},at:function(t){return this.destination?new s.Point({x:this.x+(this.destination.x-this.x)*t,y:this.y+(this.destination.y-this.y)*t}):this},native:function(){var t=s.parser.native.createSVGPoint();return t.x=this.x,t.y=this.y,t},transform:function(t){return new s.Point(this.native().matrixTransform(t.native()))}}}),s.extend(s.Element,{point:function(t,e){return new s.Point(t,e).transform(this.screenCTM().inverse())}}),s.extend(s.Element,{attr:function(e,i,a){if(null==e){for(e={},a=(i=this.node.attributes).length-1;a>=0;a--)e[i[a].nodeName]=s.regex.isNumber.test(i[a].nodeValue)?parseFloat(i[a].nodeValue):i[a].nodeValue;return e}if("object"===t(e))for(i in e)this.attr(i,e[i]);else if(null===i)this.node.removeAttribute(e);else{if(null==i)return null==(i=this.node.getAttribute(e))?s.defaults.attrs[e]:s.regex.isNumber.test(i)?parseFloat(i):i;"stroke-width"==e?this.attr("stroke",parseFloat(i)>0?this._stroke:null):"stroke"==e&&(this._stroke=i),"fill"!=e&&"stroke"!=e||(s.regex.isImage.test(i)&&(i=this.doc().defs().image(i,0,0)),i instanceof s.Image&&(i=this.doc().defs().pattern(0,0,function(){this.add(i)}))),"number"==typeof i?i=new s.Number(i):s.Color.isColor(i)?i=new s.Color(i):Array.isArray(i)&&(i=new s.Array(i)),"leading"==e?this.leading&&this.leading(i):"string"==typeof a?this.node.setAttributeNS(a,e,i.toString()):this.node.setAttribute(e,i.toString()),!this.rebuild||"font-size"!=e&&"x"!=e||this.rebuild(e,i)}return this}}),s.extend(s.Element,{transform:function(e,i){var a,n;if("object"!==t(e))return a=new s.Matrix(this).extract(),"string"==typeof e?a[e]:a;if(a=new s.Matrix(this),i=!!i||!!e.relative,null!=e.a)a=i?a.multiply(new s.Matrix(e)):new s.Matrix(e);else if(null!=e.rotation)x(e,this),a=i?a.rotate(e.rotation,e.cx,e.cy):a.rotate(e.rotation-a.extract().rotation,e.cx,e.cy);else if(null!=e.scale||null!=e.scaleX||null!=e.scaleY){if(x(e,this),e.scaleX=null!=e.scale?e.scale:null!=e.scaleX?e.scaleX:1,e.scaleY=null!=e.scale?e.scale:null!=e.scaleY?e.scaleY:1,!i){var r=a.extract();e.scaleX=1*e.scaleX/r.scaleX,e.scaleY=1*e.scaleY/r.scaleY}a=a.scale(e.scaleX,e.scaleY,e.cx,e.cy)}else if(null!=e.skew||null!=e.skewX||null!=e.skewY){if(x(e,this),e.skewX=null!=e.skew?e.skew:null!=e.skewX?e.skewX:0,e.skewY=null!=e.skew?e.skew:null!=e.skewY?e.skewY:0,!i){r=a.extract();a=a.multiply((new s.Matrix).skew(r.skewX,r.skewY,e.cx,e.cy).inverse())}a=a.skew(e.skewX,e.skewY,e.cx,e.cy)}else e.flip?("x"==e.flip||"y"==e.flip?e.offset=null==e.offset?this.bbox()["c"+e.flip]:e.offset:null==e.offset?(n=this.bbox(),e.flip=n.cx,e.offset=n.cy):e.flip=e.offset,a=(new s.Matrix).flip(e.flip,e.offset)):null==e.x&&null==e.y||(i?a=a.translate(e.x,e.y):(null!=e.x&&(a.e=e.x),null!=e.y&&(a.f=e.y)));return this.attr("transform",a)}}),s.extend(s.FX,{transform:function(e,i){var a,n,r=this.target();return"object"!==t(e)?(a=new s.Matrix(r).extract(),"string"==typeof e?a[e]:a):(i=!!i||!!e.relative,null!=e.a?a=new s.Matrix(e):null!=e.rotation?(x(e,r),a=new s.Rotate(e.rotation,e.cx,e.cy)):null!=e.scale||null!=e.scaleX||null!=e.scaleY?(x(e,r),e.scaleX=null!=e.scale?e.scale:null!=e.scaleX?e.scaleX:1,e.scaleY=null!=e.scale?e.scale:null!=e.scaleY?e.scaleY:1,a=new s.Scale(e.scaleX,e.scaleY,e.cx,e.cy)):null!=e.skewX||null!=e.skewY?(x(e,r),e.skewX=null!=e.skewX?e.skewX:0,e.skewY=null!=e.skewY?e.skewY:0,a=new s.Skew(e.skewX,e.skewY,e.cx,e.cy)):e.flip?("x"==e.flip||"y"==e.flip?e.offset=null==e.offset?r.bbox()["c"+e.flip]:e.offset:null==e.offset?(n=r.bbox(),e.flip=n.cx,e.offset=n.cy):e.flip=e.offset,a=(new s.Matrix).flip(e.flip,e.offset)):null==e.x&&null==e.y||(a=new s.Translate(e.x,e.y)),a?(a.relative=i,this.last().transforms.push(a),this._callStart()):this)}}),s.extend(s.Element,{untransform:function(){return this.attr("transform",null)},matrixify:function(){return(this.attr("transform")||"").split(s.regex.transforms).slice(0,-1).map(function(t){var e=t.trim().split("(");return[e[0],e[1].split(s.regex.delimiter).map(function(t){return parseFloat(t)})]}).reduce(function(t,e){return"matrix"==e[0]?t.multiply(p(e[1])):t[e[0]].apply(t,e[1])},new s.Matrix)},toParent:function(t){if(this==t)return this;var e=this.screenCTM(),i=t.screenCTM().inverse();return this.addTo(t).untransform().transform(i.multiply(e)),this},toDoc:function(){return this.toParent(this.doc())}}),s.Transformation=s.invent({create:function(e,i){if(arguments.length>1&&"boolean"!=typeof i)return this.constructor.call(this,[].slice.call(arguments));if(Array.isArray(e))for(var s=0,a=this.arguments.length;s=0},index:function(t){return[].slice.call(this.node.childNodes).indexOf(t.node)},get:function(t){return s.adopt(this.node.childNodes[t])},first:function(){return this.get(0)},last:function(){return this.get(this.node.childNodes.length-1)},each:function(t,e){var i,a,n=this.children();for(i=0,a=n.length;in/r?this.height/r:this.width/n,this.x=i,this.y=a,this.width=n,this.height=r)}else e="string"==typeof e?e.match(u).map(function(t){return parseFloat(t)}):Array.isArray(e)?e:"object"===t(e)?[e.x,e.y,e.width,e.height]:4==arguments.length?[].slice.call(arguments):[0,0,0,0],this.x=e[0],this.y=e[1],this.width=e[2],this.height=e[3]},extend:{toString:function(){return this.x+" "+this.y+" "+this.width+" "+this.height},morph:function(t,e,i,a){return this.destination=new s.ViewBox(t,e,i,a),this},at:function(t){return this.destination?new s.ViewBox([this.x+(this.destination.x-this.x)*t,this.y+(this.destination.y-this.y)*t,this.width+(this.destination.width-this.width)*t,this.height+(this.destination.height-this.height)*t]):this}},parent:s.Container,construct:{viewbox:function(t,e,i,a){return 0==arguments.length?new s.ViewBox(this):this.attr("viewBox",new s.ViewBox(t,e,i,a))}}}),["click","dblclick","mousedown","mouseup","mouseover","mouseout","mousemove","touchstart","touchmove","touchleave","touchend","touchcancel"].forEach(function(t){s.Element.prototype[t]=function(e){return s.on(this.node,t,e),this}}),s.listeners=[],s.handlerMap=[],s.listenerId=0,s.on=function(t,e,i,a,n){var r=i.bind(a||t.instance||t),o=(s.handlerMap.indexOf(t)+1||s.handlerMap.push(t))-1,l=e.split(".")[0],h=e.split(".")[1]||"*";s.listeners[o]=s.listeners[o]||{},s.listeners[o][l]=s.listeners[o][l]||{},s.listeners[o][l][h]=s.listeners[o][l][h]||{},i._svgjsListenerId||(i._svgjsListenerId=++s.listenerId),s.listeners[o][l][h][i._svgjsListenerId]=r,t.addEventListener(l,r,n||!1)},s.off=function(t,e,i){var a=s.handlerMap.indexOf(t),n=e&&e.split(".")[0],r=e&&e.split(".")[1],o="";if(-1!=a)if(i){if("function"==typeof i&&(i=i._svgjsListenerId),!i)return;s.listeners[a][n]&&s.listeners[a][n][r||"*"]&&(t.removeEventListener(n,s.listeners[a][n][r||"*"][i],!1),delete s.listeners[a][n][r||"*"][i])}else if(r&&n){if(s.listeners[a][n]&&s.listeners[a][n][r]){for(i in s.listeners[a][n][r])s.off(t,[n,r].join("."),i);delete s.listeners[a][n][r]}}else if(r)for(e in s.listeners[a])for(o in s.listeners[a][e])r===o&&s.off(t,[e,r].join("."));else if(n){if(s.listeners[a][n]){for(o in s.listeners[a][n])s.off(t,[n,o].join("."));delete s.listeners[a][n]}}else{for(e in s.listeners[a])s.off(t,e);delete s.listeners[a],delete s.handlerMap[a]}},s.extend(s.Element,{on:function(t,e,i,a){return s.on(this.node,t,e,i,a),this},off:function(t,e){return s.off(this.node,t,e),this},fire:function(t,i){return t instanceof e.Event?this.node.dispatchEvent(t):this.node.dispatchEvent(t=new s.CustomEvent(t,{detail:i,cancelable:!0})),this._event=t,this},event:function(){return this._event}}),s.Defs=s.invent({create:"defs",inherit:s.Container}),s.G=s.invent({create:"g",inherit:s.Container,extend:{x:function(t){return null==t?this.transform("x"):this.transform({x:t-this.x()},!0)},y:function(t){return null==t?this.transform("y"):this.transform({y:t-this.y()},!0)},cx:function(t){return null==t?this.gbox().cx:this.x(t-this.gbox().width/2)},cy:function(t){return null==t?this.gbox().cy:this.y(t-this.gbox().height/2)},gbox:function(){var t=this.bbox(),e=this.transform();return t.x+=e.x,t.x2+=e.x,t.cx+=e.x,t.y+=e.y,t.y2+=e.y,t.cy+=e.y,t}},construct:{group:function(){return this.put(new s.G)}}}),s.Doc=s.invent({create:function(t){t&&("svg"==(t="string"==typeof t?i.getElementById(t):t).nodeName?this.constructor.call(this,t):(this.constructor.call(this,s.create("svg")),t.appendChild(this.node),this.size("100%","100%")),this.namespace().defs())},inherit:s.Container,extend:{namespace:function(){return this.attr({xmlns:s.ns,version:"1.1"}).attr("xmlns:xlink",s.xlink,s.xmlns).attr("xmlns:svgjs",s.svgjs,s.xmlns)},defs:function(){var t;this._defs||((t=this.node.getElementsByTagName("defs")[0])?this._defs=s.adopt(t):this._defs=new s.Defs,this.node.appendChild(this._defs.node));return this._defs},parent:function(){return this.node.parentNode&&"#document"!=this.node.parentNode.nodeName?this.node.parentNode:null},spof:function(){var t=this.node.getScreenCTM();return t&&this.style("left",-t.e%1+"px").style("top",-t.f%1+"px"),this},remove:function(){return this.parent()&&this.parent().removeChild(this.node),this},clear:function(){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return delete this._defs,s.parser.draw&&!s.parser.draw.parentNode&&this.node.appendChild(s.parser.draw),this},clone:function(t){this.writeDataToDom();var e=this.node,i=b(e.cloneNode(!0));return t?(t.node||t).appendChild(i.node):e.parentNode.insertBefore(i.node,e.nextSibling),i}}}),s.extend(s.Element,{siblings:function(){return this.parent().children()},position:function(){return this.parent().index(this)},next:function(){return this.siblings()[this.position()+1]},previous:function(){return this.siblings()[this.position()-1]},forward:function(){var t=this.position()+1,e=this.parent();return e.removeElement(this).add(this,t),e instanceof s.Doc&&e.node.appendChild(e.defs().node),this},backward:function(){var t=this.position();return t>0&&this.parent().removeElement(this).add(this,t-1),this},front:function(){var t=this.parent();return t.node.appendChild(this.node),t instanceof s.Doc&&t.node.appendChild(t.defs().node),this},back:function(){return this.position()>0&&this.parent().removeElement(this).add(this,0),this},before:function(t){t.remove();var e=this.position();return this.parent().add(t,e),this},after:function(t){t.remove();var e=this.position();return this.parent().add(t,e+1),this}}),s.Mask=s.invent({create:function(){this.constructor.call(this,s.create("mask")),this.targets=[]},inherit:s.Container,extend:{remove:function(){for(var t=this.targets.length-1;t>=0;t--)this.targets[t]&&this.targets[t].unmask();return this.targets=[],s.Element.prototype.remove.call(this),this}},construct:{mask:function(){return this.defs().put(new s.Mask)}}}),s.extend(s.Element,{maskWith:function(t){return this.masker=t instanceof s.Mask?t:this.parent().mask().add(t),this.masker.targets.push(this),this.attr("mask",'url("#'+this.masker.attr("id")+'")')},unmask:function(){return delete this.masker,this.attr("mask",null)}}),s.ClipPath=s.invent({create:function(){this.constructor.call(this,s.create("clipPath")),this.targets=[]},inherit:s.Container,extend:{remove:function(){for(var t=this.targets.length-1;t>=0;t--)this.targets[t]&&this.targets[t].unclip();return this.targets=[],this.parent().removeElement(this),this}},construct:{clip:function(){return this.defs().put(new s.ClipPath)}}}),s.extend(s.Element,{clipWith:function(t){return this.clipper=t instanceof s.ClipPath?t:this.parent().clip().add(t),this.clipper.targets.push(this),this.attr("clip-path",'url("#'+this.clipper.attr("id")+'")')},unclip:function(){return delete this.clipper,this.attr("clip-path",null)}}),s.Gradient=s.invent({create:function(t){this.constructor.call(this,s.create(t+"Gradient")),this.type=t},inherit:s.Container,extend:{at:function(t,e,i){return this.put(new s.Stop).update(t,e,i)},update:function(t){return this.clear(),"function"==typeof t&&t.call(this,this),this},fill:function(){return"url(#"+this.id()+")"},toString:function(){return this.fill()},attr:function(t,e,i){return"transform"==t&&(t="gradientTransform"),s.Container.prototype.attr.call(this,t,e,i)}},construct:{gradient:function(t,e){return this.defs().gradient(t,e)}}}),s.extend(s.Gradient,s.FX,{from:function(t,e){return"radial"==(this._target||this).type?this.attr({fx:new s.Number(t),fy:new s.Number(e)}):this.attr({x1:new s.Number(t),y1:new s.Number(e)})},to:function(t,e){return"radial"==(this._target||this).type?this.attr({cx:new s.Number(t),cy:new s.Number(e)}):this.attr({x2:new s.Number(t),y2:new s.Number(e)})}}),s.extend(s.Defs,{gradient:function(t,e){return this.put(new s.Gradient(t)).update(e)}}),s.Stop=s.invent({create:"stop",inherit:s.Element,extend:{update:function(t){return("number"==typeof t||t instanceof s.Number)&&(t={offset:arguments[0],color:arguments[1],opacity:arguments[2]}),null!=t.opacity&&this.attr("stop-opacity",t.opacity),null!=t.color&&this.attr("stop-color",t.color),null!=t.offset&&this.attr("offset",new s.Number(t.offset)),this}}}),s.Pattern=s.invent({create:"pattern",inherit:s.Container,extend:{fill:function(){return"url(#"+this.id()+")"},update:function(t){return this.clear(),"function"==typeof t&&t.call(this,this),this},toString:function(){return this.fill()},attr:function(t,e,i){return"transform"==t&&(t="patternTransform"),s.Container.prototype.attr.call(this,t,e,i)}},construct:{pattern:function(t,e,i){return this.defs().pattern(t,e,i)}}}),s.extend(s.Defs,{pattern:function(t,e,i){return this.put(new s.Pattern).update(i).attr({x:0,y:0,width:t,height:e,patternUnits:"userSpaceOnUse"})}}),s.Shape=s.invent({create:function(t){this.constructor.call(this,t)},inherit:s.Element}),s.Bare=s.invent({create:function(t,e){if(this.constructor.call(this,s.create(t)),e)for(var i in e.prototype)"function"==typeof e.prototype[i]&&(this[i]=e.prototype[i])},inherit:s.Element,extend:{words:function(t){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return this.node.appendChild(i.createTextNode(t)),this}}}),s.extend(s.Parent,{element:function(t,e){return this.put(new s.Bare(t,e))}}),s.Symbol=s.invent({create:"symbol",inherit:s.Container,construct:{symbol:function(){return this.put(new s.Symbol)}}}),s.Use=s.invent({create:"use",inherit:s.Shape,extend:{element:function(t,e){return this.attr("href",(e||"")+"#"+t,s.xlink)}},construct:{use:function(t,e){return this.put(new s.Use).element(t,e)}}}),s.Rect=s.invent({create:"rect",inherit:s.Shape,construct:{rect:function(t,e){return this.put(new s.Rect).size(t,e)}}}),s.Circle=s.invent({create:"circle",inherit:s.Shape,construct:{circle:function(t){return this.put(new s.Circle).rx(new s.Number(t).divide(2)).move(0,0)}}}),s.extend(s.Circle,s.FX,{rx:function(t){return this.attr("r",t)},ry:function(t){return this.rx(t)}}),s.Ellipse=s.invent({create:"ellipse",inherit:s.Shape,construct:{ellipse:function(t,e){return this.put(new s.Ellipse).size(t,e).move(0,0)}}}),s.extend(s.Ellipse,s.Rect,s.FX,{rx:function(t){return this.attr("rx",t)},ry:function(t){return this.attr("ry",t)}}),s.extend(s.Circle,s.Ellipse,{x:function(t){return null==t?this.cx()-this.rx():this.cx(t+this.rx())},y:function(t){return null==t?this.cy()-this.ry():this.cy(t+this.ry())},cx:function(t){return null==t?this.attr("cx"):this.attr("cx",t)},cy:function(t){return null==t?this.attr("cy"):this.attr("cy",t)},width:function(t){return null==t?2*this.rx():this.rx(new s.Number(t).divide(2))},height:function(t){return null==t?2*this.ry():this.ry(new s.Number(t).divide(2))},size:function(t,e){var i=g(this,t,e);return this.rx(new s.Number(i.width).divide(2)).ry(new s.Number(i.height).divide(2))}}),s.Line=s.invent({create:"line",inherit:s.Shape,extend:{array:function(){return new s.PointArray([[this.attr("x1"),this.attr("y1")],[this.attr("x2"),this.attr("y2")]])},plot:function(t,e,i,a){return null==t?this.array():(t=void 0!==e?{x1:t,y1:e,x2:i,y2:a}:new s.PointArray(t).toLine(),this.attr(t))},move:function(t,e){return this.attr(this.array().move(t,e).toLine())},size:function(t,e){var i=g(this,t,e);return this.attr(this.array().size(i.width,i.height).toLine())}},construct:{line:function(t,e,i,a){return s.Line.prototype.plot.apply(this.put(new s.Line),null!=t?[t,e,i,a]:[0,0,0,0])}}}),s.Polyline=s.invent({create:"polyline",inherit:s.Shape,construct:{polyline:function(t){return this.put(new s.Polyline).plot(t||new s.PointArray)}}}),s.Polygon=s.invent({create:"polygon",inherit:s.Shape,construct:{polygon:function(t){return this.put(new s.Polygon).plot(t||new s.PointArray)}}}),s.extend(s.Polyline,s.Polygon,{array:function(){return this._array||(this._array=new s.PointArray(this.attr("points")))},plot:function(t){return null==t?this.array():this.clear().attr("points","string"==typeof t?t:this._array=new s.PointArray(t))},clear:function(){return delete this._array,this},move:function(t,e){return this.attr("points",this.array().move(t,e))},size:function(t,e){var i=g(this,t,e);return this.attr("points",this.array().size(i.width,i.height))}}),s.extend(s.Line,s.Polyline,s.Polygon,{morphArray:s.PointArray,x:function(t){return null==t?this.bbox().x:this.move(t,this.bbox().y)},y:function(t){return null==t?this.bbox().y:this.move(this.bbox().x,t)},width:function(t){var e=this.bbox();return null==t?e.width:this.size(t,e.height)},height:function(t){var e=this.bbox();return null==t?e.height:this.size(e.width,t)}}),s.Path=s.invent({create:"path",inherit:s.Shape,extend:{morphArray:s.PathArray,array:function(){return this._array||(this._array=new s.PathArray(this.attr("d")))},plot:function(t){return null==t?this.array():this.clear().attr("d","string"==typeof t?t:this._array=new s.PathArray(t))},clear:function(){return delete this._array,this},move:function(t,e){return this.attr("d",this.array().move(t,e))},x:function(t){return null==t?this.bbox().x:this.move(t,this.bbox().y)},y:function(t){return null==t?this.bbox().y:this.move(this.bbox().x,t)},size:function(t,e){var i=g(this,t,e);return this.attr("d",this.array().size(i.width,i.height))},width:function(t){return null==t?this.bbox().width:this.size(t,this.bbox().height)},height:function(t){return null==t?this.bbox().height:this.size(this.bbox().width,t)}},construct:{path:function(t){return this.put(new s.Path).plot(t||new s.PathArray)}}}),s.Image=s.invent({create:"image",inherit:s.Shape,extend:{load:function(t){if(!t)return this;var i=this,a=new e.Image;return s.on(a,"load",function(){s.off(a);var e=i.parent(s.Pattern);null!==e&&(0==i.width()&&0==i.height()&&i.size(a.width,a.height),e&&0==e.width()&&0==e.height()&&e.size(i.width(),i.height()),"function"==typeof i._loaded&&i._loaded.call(i,{width:a.width,height:a.height,ratio:a.width/a.height,url:t}))}),s.on(a,"error",function(t){s.off(a),"function"==typeof i._error&&i._error.call(i,t)}),this.attr("href",a.src=this.src=t,s.xlink)},loaded:function(t){return this._loaded=t,this},error:function(t){return this._error=t,this}},construct:{image:function(t,e,i){return this.put(new s.Image).load(t).size(e||0,i||e||0)}}}),s.Text=s.invent({create:function(){this.constructor.call(this,s.create("text")),this.dom.leading=new s.Number(1.3),this._rebuild=!0,this._build=!1,this.attr("font-family",s.defaults.attrs["font-family"])},inherit:s.Shape,extend:{x:function(t){return null==t?this.attr("x"):this.attr("x",t)},y:function(t){var e=this.attr("y"),i="number"==typeof e?e-this.bbox().y:0;return null==t?"number"==typeof e?e-i:e:this.attr("y","number"==typeof t.valueOf()?t+i:t)},cx:function(t){return null==t?this.bbox().cx:this.x(t-this.bbox().width/2)},cy:function(t){return null==t?this.bbox().cy:this.y(t-this.bbox().height/2)},text:function(t){if(void 0===t){t="";for(var e=this.node.childNodes,i=0,a=e.length;i=0;i--)t.childNodes[i]instanceof e.SVGElement&&b(t.childNodes[i]);return s.adopt(t).id(s.eid(t.nodeName))}function m(t){return null==t.x&&(t.x=0,t.y=0,t.width=0,t.height=0),t.w=t.width,t.h=t.height,t.x2=t.x+t.width,t.y2=t.y+t.height,t.cx=t.x+t.width/2,t.cy=t.y+t.height/2,t}function v(t){return Math.abs(t)>1e-37?t:0}["fill","stroke"].forEach(function(t){var e,i={};i[t]=function(i){if(void 0===i)return this;if("string"==typeof i||s.Color.isRgb(i)||i&&"function"==typeof i.fill)this.attr(t,i);else for(e=l[t].length-1;e>=0;e--)null!=i[l[t][e]]&&this.attr(l.prefix(t,l[t][e]),i[l[t][e]]);return this},s.extend(s.Element,s.FX,i)}),s.extend(s.Element,s.FX,{rotate:function(t,e,i){return this.transform({rotation:t,cx:e,cy:i})},skew:function(t,e,i,s){return 1==arguments.length||3==arguments.length?this.transform({skew:t,cx:e,cy:i}):this.transform({skewX:t,skewY:e,cx:i,cy:s})},scale:function(t,e,i,s){return 1==arguments.length||3==arguments.length?this.transform({scale:t,cx:e,cy:i}):this.transform({scaleX:t,scaleY:e,cx:i,cy:s})},translate:function(t,e){return this.transform({x:t,y:e})},flip:function(t,e){return e="number"==typeof t?t:e,this.transform({flip:t||"both",offset:e})},matrix:function(t){return this.attr("transform",new s.Matrix(6==arguments.length?[].slice.call(arguments):t))},opacity:function(t){return this.attr("opacity",t)},dx:function(t){return this.x(new s.Number(t).plus(this instanceof s.FX?0:this.x()),!0)},dy:function(t){return this.y(new s.Number(t).plus(this instanceof s.FX?0:this.y()),!0)},dmove:function(t,e){return this.dx(t).dy(e)}}),s.extend(s.Rect,s.Ellipse,s.Circle,s.Gradient,s.FX,{radius:function(t,e){var i=(this._target||this).type;return"radial"==i||"circle"==i?this.attr("r",new s.Number(t)):this.rx(t).ry(null==e?t:e)}}),s.extend(s.Path,{length:function(){return this.node.getTotalLength()},pointAt:function(t){return this.node.getPointAtLength(t)}}),s.extend(s.Parent,s.Text,s.Tspan,s.FX,{font:function(e,i){if("object"===t(e))for(i in e)this.font(i,e[i]);return"leading"==e?this.leading(i):"anchor"==e?this.attr("text-anchor",i):"size"==e||"family"==e||"weight"==e||"stretch"==e||"variant"==e||"style"==e?this.attr("font-"+e,i):this.attr(e,i)}}),s.Set=s.invent({create:function(t){Array.isArray(t)?this.members=t:this.clear()},extend:{add:function(){var t,e,i=[].slice.call(arguments);for(t=0,e=i.length;t-1&&this.members.splice(e,1),this},each:function(t){for(var e=0,i=this.members.length;e=0},index:function(t){return this.members.indexOf(t)},get:function(t){return this.members[t]},first:function(){return this.get(0)},last:function(){return this.get(this.members.length-1)},valueOf:function(){return this.members},bbox:function(){if(0==this.members.length)return new s.RBox;var t=this.members[0].rbox(this.members[0].doc());return this.each(function(){t=t.merge(this.rbox(this.doc()))}),t}},construct:{set:function(t){return new s.Set(t)}}}),s.FX.Set=s.invent({create:function(t){this.set=t}}),s.Set.inherit=function(){var t=[];for(var e in s.Shape.prototype)"function"==typeof s.Shape.prototype[e]&&"function"!=typeof s.Set.prototype[e]&&t.push(e);for(var e in t.forEach(function(t){s.Set.prototype[t]=function(){for(var e=0,i=this.members.length;e=0;t--)delete this.memory()[arguments[t]];return this},memory:function(){return this._memory||(this._memory={})}}),s.get=function(t){var e=i.getElementById(function(t){var e=(t||"").toString().match(s.regex.reference);if(e)return e[1]}(t)||t);return s.adopt(e)},s.select=function(t,e){return new s.Set(s.utils.map((e||i).querySelectorAll(t),function(t){return s.adopt(t)}))},s.extend(s.Parent,{select:function(t){return s.select(t,this.node)}});var y="abcdef".split("");if("function"!=typeof e.CustomEvent){var w=function(t,e){e=e||{bubbles:!1,cancelable:!1,detail:void 0};var s=i.createEvent("CustomEvent");return s.initCustomEvent(t,e.bubbles,e.cancelable,e.detail),s};w.prototype=e.Event.prototype,s.CustomEvent=w}else s.CustomEvent=e.CustomEvent;return function(t){for(var i=0,s=["moz","webkit"],a=0;a1&&(s=Math.sqrt(s),P*=s,M*=s);a=(new SVG.Matrix).rotate(E).scale(1/P,1/M).rotate(-E),F=F.transform(a),R=R.transform(a),n=[R.x-F.x,R.y-F.y],o=n[0]*n[0]+n[1]*n[1],r=Math.sqrt(o),n[0]/=r,n[1]/=r,l=o<4?Math.sqrt(1-o/4):0,T===X&&(l*=-1);h=new SVG.Point((R.x+F.x)/2+l*-n[1],(R.y+F.y)/2+l*n[0]),c=new SVG.Point(F.x-h.x,F.y-h.y),d=new SVG.Point(R.x-h.x,R.y-h.y),u=Math.acos(c.x/Math.sqrt(c.x*c.x+c.y*c.y)),c.y<0&&(u*=-1);g=Math.acos(d.x/Math.sqrt(d.x*d.x+d.y*d.y)),d.y<0&&(g*=-1);X&&u>g&&(g+=2*Math.PI);!X&&un.maxX-e.width&&(s=n.maxX-e.width),null!=n.minY&&an.maxY-e.height&&(a=n.maxY-e.height),this.el instanceof SVG.G?this.el.matrix(this.startPoints.transform).transform({x:r,y:o},!0):this.el.move(s,a));return i},t.prototype.end=function(t){var e=this.drag(t);this.el.fire("dragend",{event:t,p:e,m:this.m,handler:this}),SVG.off(window,"mousemove.drag"),SVG.off(window,"touchmove.drag"),SVG.off(window,"mouseup.drag"),SVG.off(window,"touchend.drag")},SVG.extend(SVG.Element,{draggable:function(e,i){"function"!=typeof e&&"object"!=typeof e||(i=e,e=!0);var s=this.remember("_draggable")||new t(this);return(e=void 0===e||e)?s.init(i||{},e):(this.off("mousedown.drag"),this.off("touchstart.drag")),this}})}.call(void 0),function(){function t(t){this.el=t,t.remember("_selectHandler",this),this.pointSelection={isSelected:!1},this.rectSelection={isSelected:!1}}t.prototype.init=function(t,e){var i=this.el.bbox();for(var s in this.options={},this.el.selectize.defaults)this.options[s]=this.el.selectize.defaults[s],void 0!==e[s]&&(this.options[s]=e[s]);this.parent=this.el.parent(),this.nested=this.nested||this.parent.group(),this.nested.matrix(new SVG.Matrix(this.el).translate(i.x,i.y)),this.options.deepSelect&&-1!==["line","polyline","polygon"].indexOf(this.el.type)?this.selectPoints(t):this.selectRect(t),this.observe(),this.cleanup()},t.prototype.selectPoints=function(t){return this.pointSelection.isSelected=t,this.pointSelection.set?this:(this.pointSelection.set=this.parent.set(),this.drawCircles(),this)},t.prototype.getPointArray=function(){var t=this.el.bbox();return this.el.array().valueOf().map(function(e){return[e[0]-t.x,e[1]-t.y]})},t.prototype.drawCircles=function(){for(var t=this,e=this.getPointArray(),i=0,s=e.length;i0&&this.parameters.box.height-i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y+i[1]).size(this.parameters.box.width-i[0],this.parameters.box.height-i[1])}};break;case"rt":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height-i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).size(this.parameters.box.width+i[0],this.parameters.box.height-i[1])}};break;case"rb":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height+i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x,this.parameters.box.y).size(this.parameters.box.width+i[0],this.parameters.box.height+i[1])}};break;case"lb":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0&&this.parameters.box.height+i[1]>0){if("text"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr("font-size",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).size(this.parameters.box.width-i[0],this.parameters.box.height+i[1])}};break;case"t":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.height-i[1]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).height(this.parameters.box.height-i[1])}};break;case"r":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).width(this.parameters.box.width+i[0])}};break;case"b":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.height+i[1]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).height(this.parameters.box.height+i[1])}};break;case"l":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0){if("text"===this.parameters.type)return;this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).width(this.parameters.box.width-i[0])}};break;case"rot":this.calc=function(t,e){var i=t+this.parameters.p.x,s=e+this.parameters.p.y,a=Math.atan2(this.parameters.p.y-this.parameters.box.y-this.parameters.box.height/2,this.parameters.p.x-this.parameters.box.x-this.parameters.box.width/2),n=180*(Math.atan2(s-this.parameters.box.y-this.parameters.box.height/2,i-this.parameters.box.x-this.parameters.box.width/2)-a)/Math.PI;this.el.center(this.parameters.box.cx,this.parameters.box.cy).rotate(this.parameters.rotation+n-n%this.options.snapToAngle,this.parameters.box.cx,this.parameters.box.cy)};break;case"point":this.calc=function(t,e){var i=this.snapToGrid(t,e,this.parameters.pointCoords[0],this.parameters.pointCoords[1]),s=this.el.array().valueOf();s[this.parameters.i][0]=this.parameters.pointCoords[0]+i[0],s[this.parameters.i][1]=this.parameters.pointCoords[1]+i[1],this.el.plot(s)}}this.el.fire("resizestart",{dx:this.parameters.x,dy:this.parameters.y,event:t}),SVG.on(window,"touchmove.resize",function(t){e.update(t||window.event)}),SVG.on(window,"touchend.resize",function(){e.done()}),SVG.on(window,"mousemove.resize",function(t){e.update(t||window.event)}),SVG.on(window,"mouseup.resize",function(){e.done()})},t.prototype.update=function(t){if(t){var e=this._extractPosition(t),i=this.transformPoint(e.x,e.y),s=i.x-this.parameters.p.x,a=i.y-this.parameters.p.y;this.lastUpdateCall=[s,a],this.calc(s,a),this.el.fire("resizing",{dx:s,dy:a,event:t})}else this.lastUpdateCall&&this.calc(this.lastUpdateCall[0],this.lastUpdateCall[1])},t.prototype.done=function(){this.lastUpdateCall=null,SVG.off(window,"mousemove.resize"),SVG.off(window,"mouseup.resize"),SVG.off(window,"touchmove.resize"),SVG.off(window,"touchend.resize"),this.el.fire("resizedone")},t.prototype.snapToGrid=function(t,e,i,s){var a;return void 0!==s?a=[(i+t)%this.options.snapToGrid,(s+e)%this.options.snapToGrid]:(i=null==i?3:i,a=[(this.parameters.box.x+t+(1&i?0:this.parameters.box.width))%this.options.snapToGrid,(this.parameters.box.y+e+(2&i?0:this.parameters.box.height))%this.options.snapToGrid]),t-=Math.abs(a[0])r.maxX&&(t=r.maxX-a),void 0!==r.minY&&n+er.maxY&&(e=r.maxY-n),[t,e]},t.prototype.checkAspectRatio=function(t){if(!this.options.saveAspectRatio)return t;var e=t.slice(),i=this.parameters.box.width/this.parameters.box.height,s=this.parameters.box.width+t[0],a=this.parameters.box.height-t[1],n=s/a;return ni&&(e[0]=this.parameters.box.width-a*i),e},SVG.extend(SVG.Element,{resize:function(e){return(this.remember("_resizeHandler")||new t(this)).init(e||{}),this}}),SVG.Element.prototype.resize.defaults={snapToAngle:.1,snapToGrid:1,constraint:{},saveAspectRatio:!1}}).call(this)}();return function(t,e){void 0===e&&(e={});var i=e.insertAt;if(t&&"undefined"!=typeof document){var s=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css","top"===i&&s.firstChild?s.insertBefore(a,s.firstChild):s.appendChild(a),a.styleSheet?a.styleSheet.cssText=t:a.appendChild(document.createTextNode(t))}}('.apexcharts-canvas {\n position: relative;\n user-select: none;\n /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px;\n}\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0,0,0,.5);\n box-shadow: 0 0 1px rgba(255,255,255,.5);\n -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);\n}\n.apexcharts-canvas.dark {\n background: #343F57;\n}\n\n.apexcharts-inner {\n position: relative;\n}\n\n.legend-mouseover-inactive {\n transition: 0.15s ease all;\n opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0;\n}\n\n.apexcharts-gridline, .apexcharts-text {\n pointer-events: none;\n}\n\n.apexcharts-tooltip {\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px #999;\n cursor: default;\n font-size: 14px;\n left: 62px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 20px;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: 0.15s ease all;\n}\n.apexcharts-tooltip.light {\n border: 1px solid #e3e3e3;\n background: rgba(255, 255, 255, 0.96);\n}\n.apexcharts-tooltip.dark {\n color: #fff;\n background: rgba(30,30,30, 0.8);\n}\n.apexcharts-tooltip * {\n font-family: inherit;\n}\n\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line {\n pointer-events: none;\n}\n\n.apexcharts-tooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip-title {\n padding: 6px;\n font-size: 15px;\n margin-bottom: 4px;\n}\n.apexcharts-tooltip.light .apexcharts-tooltip-title {\n background: #ECEFF1;\n border-bottom: 1px solid #ddd;\n}\n.apexcharts-tooltip.dark .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #333;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n font-weight: 600;\n margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-z-label:empty,\n.apexcharts-tooltip-text-z-value:empty {\n display: none;\n}\n\n.apexcharts-tooltip-text-value, \n.apexcharts-tooltip-text-z-value {\n font-weight: 600;\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0px;\n margin-right: 10px;\n border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 0 10px;\n display: none;\n text-align: left;\n justify-content: left;\n align-items: center;\n}\n\n.apexcharts-tooltip-series-group.active .apexcharts-tooltip-marker {\n opacity: 1;\n}\n.apexcharts-tooltip-series-group.active, .apexcharts-tooltip-series-group:last-child {\n padding-bottom: 4px;\n}\n.apexcharts-tooltip-series-group-hidden {\n opacity: 0;\n height: 0;\n line-height: 0;\n padding: 0 !important;\n}\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px;\n}\n.apexcharts-tooltip-candlestick {\n padding: 4px 8px;\n}\n.apexcharts-tooltip-candlestick > div {\n margin: 4px 0;\n}\n.apexcharts-tooltip-candlestick span.value {\n font-weight: bold;\n}\n\n.apexcharts-tooltip-rangebar {\n padding: 5px 8px;\n}\n\n.apexcharts-tooltip-rangebar .category {\n font-weight: 600;\n color: #777;\n}\n\n.apexcharts-tooltip-rangebar .series-name {\n font-weight: bold;\n display: block;\n margin-bottom: 5px;\n}\n\n.apexcharts-xaxistooltip {\n opacity: 0;\n padding: 9px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip.dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-xaxistooltip:after, .apexcharts-xaxistooltip:before {\n\tleft: 50%;\n\tborder: solid transparent;\n\tcontent: " ";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-left: -6px;\n}\n.apexcharts-xaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after, .apexcharts-xaxistooltip-bottom:before {\n bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-top:after, .apexcharts-xaxistooltip-top:before {\n top: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-bottom.dark:after {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-bottom.dark:before {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top:after {\n border-top-color:#ECEFF1\n}\n.apexcharts-xaxistooltip-top:before {\n border-top-color: #90A4AE;\n}\n.apexcharts-xaxistooltip-top.dark:after {\n border-top-color:rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-top.dark:before {\n border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n\n.apexcharts-xaxistooltip.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n opacity: 0;\n padding: 4px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n\tbackground: #ECEFF1;\n border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip.dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-yaxistooltip:after, .apexcharts-yaxistooltip:before {\n\ttop: 50%;\n\tborder: solid transparent;\n\tcontent: " ";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n.apexcharts-yaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-top: -6px;\n}\n.apexcharts-yaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after, .apexcharts-yaxistooltip-left:before {\n left: 100%;\n}\n\n.apexcharts-yaxistooltip-right:after, .apexcharts-yaxistooltip-right:before {\n right: 100%;\n}\n\n.apexcharts-yaxistooltip-left:after {\n border-left-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-left:before {\n border-left-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-left.dark:after {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-left.dark:before {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right:after {\n border-right-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-right:before {\n border-right-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-right.dark:after {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-right.dark:before {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip.active {\n opacity: 1;\n}\n\n.apexcharts-xcrosshairs, .apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.active, .apexcharts-ycrosshairs.active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0;\n}\n\n.apexcharts-zoom-rect {\n pointer-events: none;\n}\n.apexcharts-selection-rect {\n cursor: move;\n}\n\n.svg_select_points, .svg_select_points_rot {\n opacity: 0;\n visibility: hidden;\n}\n.svg_select_points_l, .svg_select_points_r {\n cursor: ew-resize;\n opacity: 1;\n visibility: visible;\n fill: #888;\n}\n.apexcharts-canvas.zoomable .hovering-zoom {\n cursor: crosshair\n}\n.apexcharts-canvas.zoomable .hovering-pan {\n cursor: move\n}\n\n.apexcharts-xaxis,\n.apexcharts-yaxis {\n pointer-events: none;\n}\n\n.apexcharts-zoom-icon, \n.apexcharts-zoom-in-icon,\n.apexcharts-zoom-out-icon,\n.apexcharts-reset-zoom-icon, \n.apexcharts-pan-icon, \n.apexcharts-selection-icon,\n.apexcharts-menu-icon, \n.apexcharts-toolbar-custom-icon {\n cursor: pointer;\n width: 20px;\n height: 20px;\n line-height: 24px;\n color: #6E8192;\n text-align: center;\n}\n\n\n.apexcharts-zoom-icon svg, \n.apexcharts-zoom-in-icon svg,\n.apexcharts-zoom-out-icon svg,\n.apexcharts-reset-zoom-icon svg,\n.apexcharts-menu-icon svg {\n fill: #6E8192;\n}\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(0.76)\n}\n\n.dark .apexcharts-zoom-icon svg, \n.dark .apexcharts-zoom-in-icon svg,\n.dark .apexcharts-zoom-out-icon svg,\n.dark .apexcharts-reset-zoom-icon svg, \n.dark .apexcharts-pan-icon svg, \n.dark .apexcharts-selection-icon svg,\n.dark .apexcharts-menu-icon svg, \n.dark .apexcharts-toolbar-custom-icon svg{\n fill: #f3f4f5;\n}\n\n.apexcharts-canvas .apexcharts-zoom-icon.selected svg, \n.apexcharts-canvas .apexcharts-selection-icon.selected svg, \n.apexcharts-canvas .apexcharts-reset-zoom-icon.selected svg {\n fill: #008FFB;\n}\n.light .apexcharts-selection-icon:not(.selected):hover svg,\n.light .apexcharts-zoom-icon:not(.selected):hover svg, \n.light .apexcharts-zoom-in-icon:hover svg, \n.light .apexcharts-zoom-out-icon:hover svg, \n.light .apexcharts-reset-zoom-icon:hover svg, \n.light .apexcharts-menu-icon:hover svg {\n fill: #333;\n}\n\n.apexcharts-selection-icon, .apexcharts-menu-icon {\n position: relative;\n}\n.apexcharts-reset-zoom-icon {\n margin-left: 5px;\n}\n.apexcharts-zoom-icon, .apexcharts-reset-zoom-icon, .apexcharts-menu-icon {\n transform: scale(0.85);\n}\n\n.apexcharts-zoom-in-icon, .apexcharts-zoom-out-icon {\n transform: scale(0.7)\n}\n\n.apexcharts-zoom-out-icon {\n margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n transform: scale(0.62);\n position: relative;\n left: 1px;\n top: 0px;\n}\n.apexcharts-pan-icon svg {\n fill: #fff;\n stroke: #6E8192;\n stroke-width: 2;\n}\n.apexcharts-pan-icon.selected svg {\n stroke: #008FFB;\n}\n.apexcharts-pan-icon:not(.selected):hover svg {\n stroke: #333;\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n top: 0px;\n right: 3px;\n max-width: 176px;\n text-align: right;\n border-radius: 3px;\n padding: 0px 6px 2px 6px;\n display: flex;\n justify-content: space-between;\n align-items: center; \n}\n\n.apexcharts-toolbar svg {\n pointer-events: none;\n}\n\n.apexcharts-menu {\n background: #fff;\n position: absolute;\n top: 100%;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 3px;\n right: 10px;\n opacity: 0;\n min-width: 110px;\n transition: 0.15s ease all;\n pointer-events: none;\n}\n\n.apexcharts-menu.open {\n opacity: 1;\n pointer-events: all;\n transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n padding: 6px 7px;\n font-size: 12px;\n cursor: pointer;\n}\n.light .apexcharts-menu-item:hover {\n background: #eee;\n}\n.dark .apexcharts-menu {\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n}\n\n@media screen and (min-width: 768px) {\n .apexcharts-toolbar {\n /*opacity: 0;*/\n }\n\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1;\n } \n}\n\n.apexcharts-datalabel.hidden {\n opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabel, .apexcharts-datalabel-label, .apexcharts-datalabel-value {\n cursor: default;\n pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease;\n}\n\n.apexcharts-canvas .hidden {\n opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, .apexcharts-radar-series path, .apexcharts-radar-series polygon {\n pointer-events: none;\n}\n\n/* markers */\n\n.apexcharts-marker {\n transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}'),"document"in self&&("classList"in document.createElement("_")&&(!document.createElementNS||"classList"in document.createElementNS("http://www.w3.org/2000/svg","g"))||function(t){if("Element"in t){var e=t.Element.prototype,i=Object,s=String.prototype.trim||function(){return this.replace(/^\s+|\s+$/g,"")},a=Array.prototype.indexOf||function(t){for(var e=0,i=this.length;e div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',i=document.head||document.getElementsByTagName("head")[0],s=document.createElement("style");s.type="text/css",s.styleSheet?s.styleSheet.cssText=e:s.appendChild(document.createTextNode(e)),i.appendChild(s),t=!0}}(),s.__resizeLast__={},s.__resizeListeners__=[],(s.__resizeTriggers__=document.createElement("div")).className="resize-triggers",s.__resizeTriggers__.innerHTML='
',s.appendChild(s.__resizeTriggers__),e(s),s.addEventListener("scroll",i,!0),h&&s.__resizeTriggers__.addEventListener(h,function(t){"resizeanim"==t.animationName&&e(s)})),s.__resizeListeners__.push(a)},window.removeResizeListener=function(t,e){t&&(t.__resizeListeners__.splice(t.__resizeListeners__.indexOf(e),1),t.__resizeListeners__.length||(t.removeEventListener("scroll",i),t.__resizeTriggers__=!t.removeChild(t.__resizeTriggers__)))}}(),window.Apex={},function(){function i(t,s){e(this,i),this.opts=s,this.ctx=this,this.w=new A(s).init(),this.el=t,this.w.globals.cuid=(Math.random()+1).toString(36).substring(4),this.w.globals.chartID=this.w.config.chart.id?this.w.config.chart.id:this.w.globals.cuid,this.initModules(),this.create=d.bind(this.create,this),this.windowResizeHandler=this.windowResize.bind(this)}return s(i,[{key:"render",value:function(){var t=this;return new $(function(e,i){if(null!==t.el){void 0===Apex._chartInstances&&(Apex._chartInstances=[]),t.w.config.chart.id&&Apex._chartInstances.push({id:t.w.globals.chartID,group:t.w.config.chart.group,chart:t}),t.setLocale(t.w.config.chart.defaultLocale);var s=t.w.config.chart.events.beforeMount;"function"==typeof s&&s(t,t.w),t.fireEvent("beforeMount",[t,t.w]),window.addEventListener("resize",t.windowResizeHandler),window.addResizeListener(t.el.parentNode,t.parentResizeCallback.bind(t));var a=t.create(t.w.config.series,{});if(!a)return e(t);t.mount(a).then(function(){e(a),"function"==typeof t.w.config.chart.events.mounted&&t.w.config.chart.events.mounted(t,t.w),t.fireEvent("mounted",[t,t.w])}).catch(function(t){i(t)})}else i(new Error("Element not found"))})}},{key:"initModules",value:function(){this.animations=new g(this),this.core=new U(this.el,this),this.grid=new rt(this),this.coreUtils=new y(this),this.config=new w({}),this.crosshairs=new T(this),this.options=new x,this.responsive=new lt(this),this.series=new G(this),this.theme=new ht(this),this.formatters=new N(this),this.titleSubtitle=new vt(this),this.legend=new ot(this),this.toolbar=new bt(this),this.dimensions=new _(this),this.zoomPanSelection=new mt(this),this.w.globals.tooltip=new xt(this)}},{key:"addEventListener",value:function(t,e){var i=this.w;i.globals.events.hasOwnProperty(t)?i.globals.events[t].push(e):i.globals.events[t]=[e]}},{key:"removeEventListener",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){var s=i.globals.events[t].indexOf(e);-1!==s&&i.globals.events[t].splice(s,1)}}},{key:"fireEvent",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){e&&e.length||(e=[]);for(var s=i.globals.events[t],a=s.length,n=0;n0&&void 0!==arguments[0]?arguments[0]:null,e=this,i=e.w;return new $(function(s,a){if(null===e.el)return a(new Error("Not enough data to display or target element not found"));if((null===t||i.globals.allSeriesCollapsed)&&e.series.handleNoData(),e.annotations=new b(e),e.core.drawAxis(i.config.chart.type,t.xyRatios),e.grid=new rt(e),"back"===i.config.grid.position&&e.grid.drawGrid(),"back"===i.config.annotations.position&&e.annotations.drawAnnotations(),t.elGraph instanceof Array)for(var n=0;n0&&i.globals.memory.methodsToExec.forEach(function(t){t.method(t.params,!1,t.context)}),s(e)})}},{key:"clearPreviousPaths",value:function(){var t=this.w;t.globals.previousPaths=[],t.globals.allSeriesCollapsed=!1,t.globals.collapsedSeries=[],t.globals.collapsedSeriesIndices=[]}},{key:"updateOptions",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=this.w;return t.series&&(t.series[0].data&&(t.series=t.series.map(function(t,e){return n({},a.config.series[e],{name:t.name?t.name:a.config.series[e]&&a.config.series[e].name,type:t.type?t.type:a.config.series[e]&&a.config.series[e].type,data:t.data?t.data:a.config.series[e]&&a.config.series[e].data})})),this.revertDefaultAxisMinMax()),t.xaxis&&((t.xaxis.min||t.xaxis.max)&&this.forceXAxisUpdate(t),t.xaxis.categories&&t.xaxis.categories.length&&a.config.xaxis.convertedCatToNumeric&&(t=v.convertCatToNumeric(t))),a.globals.collapsedSeriesIndices.length>0&&this.clearPreviousPaths(),t.theme&&(t=this.theme.updateThemeOptions(t)),this._updateOptions(t,e,i,s)}},{key:"_updateOptions",value:function(e){var i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];this.getSyncedCharts().forEach(function(n){var r=n.w;return r.globals.shouldAnimate=s,i||(r.globals.resized=!0,r.globals.dataChanged=!0,s&&n.series.getPreviousPaths()),e&&"object"===t(e)&&(n.config=new w(e),e=y.extendArrayProps(n.config,e),r.config=d.extend(r.config,e),a&&(r.globals.lastXAxis=[],r.globals.lastYAxis=[],r.globals.initialConfig=d.extend({},r.config),r.globals.initialSeries=JSON.parse(JSON.stringify(r.config.series)))),n.update(e)})}},{key:"updateSeries",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return this.revertDefaultAxisMinMax(),this._updateSeries(t,e,i)}},{key:"appendSeries",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=this.w.config.series.slice();return s.push(t),this.revertDefaultAxisMinMax(),this._updateSeries(s,e,i)}},{key:"_updateSeries",value:function(t,e){var i,s=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=this.w;return this.w.globals.shouldAnimate=e,a.globals.dataChanged=!0,a.globals.allSeriesCollapsed&&(a.globals.allSeriesCollapsed=!1),e&&this.series.getPreviousPaths(),a.globals.axisCharts?(0===(i=t.map(function(t,e){return n({},a.config.series[e],{name:t.name?t.name:a.config.series[e]&&a.config.series[e].name,type:t.type?t.type:a.config.series[e]&&a.config.series[e].type,data:t.data?t.data:a.config.series[e]&&a.config.series[e].data})})).length&&(i=[{data:[]}]),a.config.series=i):a.config.series=t.slice(),s&&(a.globals.initialConfig.series=JSON.parse(JSON.stringify(a.config.series)),a.globals.initialSeries=JSON.parse(JSON.stringify(a.config.series))),this.update()}},{key:"getSyncedCharts",value:function(){var t=this.getGroupedCharts(),e=[this];return t.length&&(e=[],t.forEach(function(t){e.push(t)})),e}},{key:"getGroupedCharts",value:function(){var t=this;return Apex._chartInstances.filter(function(t){if(t.group)return!0}).map(function(e){return t.w.config.chart.group===e.group?e.chart:t})}},{key:"appendData",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this;i.w.globals.dataChanged=!0,i.series.getPreviousPaths();for(var s=i.w.config.series.slice(),a=0;a1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,s=this;i&&(s=i),s.annotations.addXaxisAnnotationExternal(t,e,s)}},{key:"addYaxisAnnotation",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,s=this;i&&(s=i),s.annotations.addYaxisAnnotationExternal(t,e,s)}},{key:"addPointAnnotation",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,s=this;i&&(s=i),s.annotations.addPointAnnotationExternal(t,e,s)}},{key:"clearAnnotations",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,e=this;t&&(e=t),e.annotations.clearAnnotations(e)}},{key:"addText",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,s=this;i&&(s=i),s.annotations.addText(t,e,s)}},{key:"getChartArea",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-inner")}},{key:"getSeriesTotalXRange",value:function(t,e){return this.coreUtils.getSeriesTotalsXRange(t,e)}},{key:"getHighestValueInSeries",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new V(this.ctx).getMinYMaxY(t).highestY}},{key:"getLowestValueInSeries",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new V(this.ctx).getMinYMaxY(t).lowestY}},{key:"getSeriesTotal",value:function(){return this.w.globals.seriesTotals}},{key:"setLocale",value:function(t){this.setCurrentLocaleValues(t)}},{key:"setCurrentLocaleValues",value:function(t){var e=this.w.config.chart.locales;window.Apex.chart&&window.Apex.chart.locales&&window.Apex.chart.locales.length>0&&(e=this.w.config.chart.locales.concat(window.Apex.chart.locales));var i=e.filter(function(e){return e.name===t})[0];if(!i)throw new Error("Wrong locale name provided. Please make sure you set the correct locale name in options");var s=d.extend(p,i);this.w.globals.locale=s.options}},{key:"dataURI",value:function(){return new nt(this.ctx).dataURI()}},{key:"paper",value:function(){return this.w.globals.dom.Paper}},{key:"parentResizeCallback",value:function(){this.w.globals.animationEnded&&this.windowResize()}},{key:"windowResize",value:function(){var t=this;clearTimeout(this.w.globals.resizeTimer),this.w.globals.resizeTimer=window.setTimeout(function(){t.w.globals.resized=!0,t.w.globals.dataChanged=!1,t.update()},150)}}],[{key:"initOnLoad",value:function(){for(var t=document.querySelectorAll("[data-apexcharts]"),e=0;e2?s-2:0),n=2;n -1; - }, - get: function get(key) { - return values[keys.indexOf(key)]; - }, - set: function set(key, value) { - if (keys.indexOf(key) === -1) { - keys.push(key); - values.push(value); - } - }, - delete: function _delete(key) { - var index = keys.indexOf(key); - if (index > -1) { - keys.splice(index, 1); - values.splice(index, 1); - } - } - }; - }(); - - var createEvent = function createEvent(name) { - return new Event(name, { bubbles: true }); - }; - try { - new Event('test'); - } catch (e) { - // IE does not support `new Event()` - createEvent = function createEvent(name) { - var evt = document.createEvent('Event'); - evt.initEvent(name, true, false); - return evt; - }; - } - - function assign(ta) { - if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return; - - var heightOffset = null; - var clientWidth = null; - var cachedHeight = null; - - function init() { - var style = window.getComputedStyle(ta, null); - - if (style.resize === 'vertical') { - ta.style.resize = 'none'; - } else if (style.resize === 'both') { - ta.style.resize = 'horizontal'; - } - - if (style.boxSizing === 'content-box') { - heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom)); - } else { - heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth); - } - // Fix when a textarea is not on document body and heightOffset is Not a Number - if (isNaN(heightOffset)) { - heightOffset = 0; - } - - update(); - } - - function changeOverflow(value) { - { - // Chrome/Safari-specific fix: - // When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space - // made available by removing the scrollbar. The following forces the necessary text reflow. - var width = ta.style.width; - ta.style.width = '0px'; - // Force reflow: - /* jshint ignore:start */ - ta.offsetWidth; - /* jshint ignore:end */ - ta.style.width = width; - } - - ta.style.overflowY = value; - } - - function getParentOverflows(el) { - var arr = []; - - while (el && el.parentNode && el.parentNode instanceof Element) { - if (el.parentNode.scrollTop) { - arr.push({ - node: el.parentNode, - scrollTop: el.parentNode.scrollTop - }); - } - el = el.parentNode; - } - - return arr; - } - - function resize() { - if (ta.scrollHeight === 0) { - // If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM. - return; - } - - var overflows = getParentOverflows(ta); - var docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240) - - ta.style.height = ''; - ta.style.height = ta.scrollHeight + heightOffset + 'px'; - - // used to check if an update is actually necessary on window.resize - clientWidth = ta.clientWidth; - - // prevents scroll-position jumping - overflows.forEach(function (el) { - el.node.scrollTop = el.scrollTop; - }); - - if (docTop) { - document.documentElement.scrollTop = docTop; - } - } - - function update() { - resize(); - - var styleHeight = Math.round(parseFloat(ta.style.height)); - var computed = window.getComputedStyle(ta, null); - - // Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box - var actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight; - - // The actual height not matching the style height (set via the resize method) indicates that - // the max-height has been exceeded, in which case the overflow should be allowed. - if (actualHeight < styleHeight) { - if (computed.overflowY === 'hidden') { - changeOverflow('scroll'); - resize(); - actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight; - } - } else { - // Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands. - if (computed.overflowY !== 'hidden') { - changeOverflow('hidden'); - resize(); - actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight; - } - } - - if (cachedHeight !== actualHeight) { - cachedHeight = actualHeight; - var evt = createEvent('autosize:resized'); - try { - ta.dispatchEvent(evt); - } catch (err) { - // Firefox will throw an error on dispatchEvent for a detached element - // https://bugzilla.mozilla.org/show_bug.cgi?id=889376 - } - } - } - - var pageResize = function pageResize() { - if (ta.clientWidth !== clientWidth) { - update(); - } - }; - - var destroy = function (style) { - window.removeEventListener('resize', pageResize, false); - ta.removeEventListener('input', update, false); - ta.removeEventListener('keyup', update, false); - ta.removeEventListener('autosize:destroy', destroy, false); - ta.removeEventListener('autosize:update', update, false); - - Object.keys(style).forEach(function (key) { - ta.style[key] = style[key]; - }); - - map.delete(ta); - }.bind(ta, { - height: ta.style.height, - resize: ta.style.resize, - overflowY: ta.style.overflowY, - overflowX: ta.style.overflowX, - wordWrap: ta.style.wordWrap - }); - - ta.addEventListener('autosize:destroy', destroy, false); - - // IE9 does not fire onpropertychange or oninput for deletions, - // so binding to onkeyup to catch most of those events. - // There is no way that I know of to detect something like 'cut' in IE9. - if ('onpropertychange' in ta && 'oninput' in ta) { - ta.addEventListener('keyup', update, false); - } - - window.addEventListener('resize', pageResize, false); - ta.addEventListener('input', update, false); - ta.addEventListener('autosize:update', update, false); - ta.style.overflowX = 'hidden'; - ta.style.wordWrap = 'break-word'; - - map.set(ta, { - destroy: destroy, - update: update - }); - - init(); - } - - function destroy(ta) { - var methods = map.get(ta); - if (methods) { - methods.destroy(); - } - } - - function update(ta) { - var methods = map.get(ta); - if (methods) { - methods.update(); - } - } - - var autosize = null; - - // Do nothing in Node.js environment and IE8 (or lower) - if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') { - autosize = function autosize(el) { - return el; - }; - autosize.destroy = function (el) { - return el; - }; - autosize.update = function (el) { - return el; - }; - } else { - autosize = function autosize(el, options) { - if (el) { - Array.prototype.forEach.call(el.length ? el : [el], function (x) { - return assign(x, options); - }); - } - return el; - }; - autosize.destroy = function (el) { - if (el) { - Array.prototype.forEach.call(el.length ? el : [el], destroy); - } - return el; - }; - autosize.update = function (el) { - if (el) { - Array.prototype.forEach.call(el.length ? el : [el], update); - } - return el; - }; - } - - exports.default = autosize; - module.exports = exports['default']; -}); \ No newline at end of file diff --git a/static/libs/autosize/autosize.min.js b/static/libs/autosize/autosize.min.js deleted file mode 100644 index 4d9b4e9a7..000000000 --- a/static/libs/autosize/autosize.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - autosize 4.0.2 - license: MIT - http://www.jacklmoore.com/autosize -*/ -!function(e,t){if("function"==typeof define&&define.amd)define(["module","exports"],t);else if("undefined"!=typeof exports)t(module,exports);else{var n={exports:{}};t(n,n.exports),e.autosize=n.exports}}(this,function(e,t){"use strict";var n,o,p="function"==typeof Map?new Map:(n=[],o=[],{has:function(e){return-1 0; - this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent); - - this._addEventListeners(); - } // Getters - - - var _proto = Carousel.prototype; - - // Public - _proto.next = function next() { - if (!this._isSliding) { - this._slide(Direction.NEXT); - } - }; - - _proto.nextWhenVisible = function nextWhenVisible() { - // Don't call next when the page isn't visible - // or the carousel or its parent isn't visible - if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') { - this.next(); - } - }; - - _proto.prev = function prev() { - if (!this._isSliding) { - this._slide(Direction.PREV); - } - }; - - _proto.pause = function pause(event) { - if (!event) { - this._isPaused = true; - } - - if (this._element.querySelector(Selector$2.NEXT_PREV)) { - Util.triggerTransitionEnd(this._element); - this.cycle(true); - } - - clearInterval(this._interval); - this._interval = null; - }; - - _proto.cycle = function cycle(event) { - if (!event) { - this._isPaused = false; - } - - if (this._interval) { - clearInterval(this._interval); - this._interval = null; - } - - if (this._config.interval && !this._isPaused) { - this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); - } - }; - - _proto.to = function to(index) { - var _this = this; - - this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); - - var activeIndex = this._getItemIndex(this._activeElement); - - if (index > this._items.length - 1 || index < 0) { - return; - } - - if (this._isSliding) { - $(this._element).one(Event$2.SLID, function () { - return _this.to(index); - }); - return; - } - - if (activeIndex === index) { - this.pause(); - this.cycle(); - return; - } - - var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; - - this._slide(direction, this._items[index]); - }; - - _proto.dispose = function dispose() { - $(this._element).off(EVENT_KEY$2); - $.removeData(this._element, DATA_KEY$2); - this._items = null; - this._config = null; - this._element = null; - this._interval = null; - this._isPaused = null; - this._isSliding = null; - this._activeElement = null; - this._indicatorsElement = null; - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default, config); - Util.typeCheckConfig(NAME$2, config, DefaultType); - return config; - }; - - _proto._handleSwipe = function _handleSwipe() { - var absDeltax = Math.abs(this.touchDeltaX); - - if (absDeltax <= SWIPE_THRESHOLD) { - return; - } - - var direction = absDeltax / this.touchDeltaX; // swipe left - - if (direction > 0) { - this.prev(); - } // swipe right - - - if (direction < 0) { - this.next(); - } - }; - - _proto._addEventListeners = function _addEventListeners() { - var _this2 = this; - - if (this._config.keyboard) { - $(this._element).on(Event$2.KEYDOWN, function (event) { - return _this2._keydown(event); - }); - } - - if (this._config.pause === 'hover') { - $(this._element).on(Event$2.MOUSEENTER, function (event) { - return _this2.pause(event); - }).on(Event$2.MOUSELEAVE, function (event) { - return _this2.cycle(event); - }); - } - - if (this._config.touch) { - this._addTouchEventListeners(); - } - }; - - _proto._addTouchEventListeners = function _addTouchEventListeners() { - var _this3 = this; - - if (!this._touchSupported) { - return; - } - - var start = function start(event) { - if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { - _this3.touchStartX = event.originalEvent.clientX; - } else if (!_this3._pointerEvent) { - _this3.touchStartX = event.originalEvent.touches[0].clientX; - } - }; - - var move = function move(event) { - // ensure swiping with one touch and not pinching - if (event.originalEvent.touches && event.originalEvent.touches.length > 1) { - _this3.touchDeltaX = 0; - } else { - _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX; - } - }; - - var end = function end(event) { - if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { - _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX; - } - - _this3._handleSwipe(); - - if (_this3._config.pause === 'hover') { - // If it's a touch-enabled device, mouseenter/leave are fired as - // part of the mouse compatibility events on first tap - the carousel - // would stop cycling until user tapped out of it; - // here, we listen for touchend, explicitly pause the carousel - // (as if it's the second time we tap on it, mouseenter compat event - // is NOT fired) and after a timeout (to allow for mouse compatibility - // events to fire) we explicitly restart cycling - _this3.pause(); - - if (_this3.touchTimeout) { - clearTimeout(_this3.touchTimeout); - } - - _this3.touchTimeout = setTimeout(function (event) { - return _this3.cycle(event); - }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval); - } - }; - - $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) { - return e.preventDefault(); - }); - - if (this._pointerEvent) { - $(this._element).on(Event$2.POINTERDOWN, function (event) { - return start(event); - }); - $(this._element).on(Event$2.POINTERUP, function (event) { - return end(event); - }); - - this._element.classList.add(ClassName$2.POINTER_EVENT); - } else { - $(this._element).on(Event$2.TOUCHSTART, function (event) { - return start(event); - }); - $(this._element).on(Event$2.TOUCHMOVE, function (event) { - return move(event); - }); - $(this._element).on(Event$2.TOUCHEND, function (event) { - return end(event); - }); - } - }; - - _proto._keydown = function _keydown(event) { - if (/input|textarea/i.test(event.target.tagName)) { - return; - } - - switch (event.which) { - case ARROW_LEFT_KEYCODE: - event.preventDefault(); - this.prev(); - break; - - case ARROW_RIGHT_KEYCODE: - event.preventDefault(); - this.next(); - break; - - default: - } - }; - - _proto._getItemIndex = function _getItemIndex(element) { - this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : []; - return this._items.indexOf(element); - }; - - _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { - var isNextDirection = direction === Direction.NEXT; - var isPrevDirection = direction === Direction.PREV; - - var activeIndex = this._getItemIndex(activeElement); - - var lastItemIndex = this._items.length - 1; - var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; - - if (isGoingToWrap && !this._config.wrap) { - return activeElement; - } - - var delta = direction === Direction.PREV ? -1 : 1; - var itemIndex = (activeIndex + delta) % this._items.length; - return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; - }; - - _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { - var targetIndex = this._getItemIndex(relatedTarget); - - var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM)); - - var slideEvent = $.Event(Event$2.SLIDE, { - relatedTarget: relatedTarget, - direction: eventDirectionName, - from: fromIndex, - to: targetIndex - }); - $(this._element).trigger(slideEvent); - return slideEvent; - }; - - _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { - if (this._indicatorsElement) { - var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE)); - $(indicators).removeClass(ClassName$2.ACTIVE); - - var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; - - if (nextIndicator) { - $(nextIndicator).addClass(ClassName$2.ACTIVE); - } - } - }; - - _proto._slide = function _slide(direction, element) { - var _this4 = this; - - var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); - - var activeElementIndex = this._getItemIndex(activeElement); - - var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); - - var nextElementIndex = this._getItemIndex(nextElement); - - var isCycling = Boolean(this._interval); - var directionalClassName; - var orderClassName; - var eventDirectionName; - - if (direction === Direction.NEXT) { - directionalClassName = ClassName$2.LEFT; - orderClassName = ClassName$2.NEXT; - eventDirectionName = Direction.LEFT; - } else { - directionalClassName = ClassName$2.RIGHT; - orderClassName = ClassName$2.PREV; - eventDirectionName = Direction.RIGHT; - } - - if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) { - this._isSliding = false; - return; - } - - var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); - - if (slideEvent.isDefaultPrevented()) { - return; - } - - if (!activeElement || !nextElement) { - // Some weirdness is happening, so we bail - return; - } - - this._isSliding = true; - - if (isCycling) { - this.pause(); - } - - this._setActiveIndicatorElement(nextElement); - - var slidEvent = $.Event(Event$2.SLID, { - relatedTarget: nextElement, - direction: eventDirectionName, - from: activeElementIndex, - to: nextElementIndex - }); - - if ($(this._element).hasClass(ClassName$2.SLIDE)) { - $(nextElement).addClass(orderClassName); - Util.reflow(nextElement); - $(activeElement).addClass(directionalClassName); - $(nextElement).addClass(directionalClassName); - var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10); - - if (nextElementInterval) { - this._config.defaultInterval = this._config.defaultInterval || this._config.interval; - this._config.interval = nextElementInterval; - } else { - this._config.interval = this._config.defaultInterval || this._config.interval; - } - - var transitionDuration = Util.getTransitionDurationFromElement(activeElement); - $(activeElement).one(Util.TRANSITION_END, function () { - $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName$2.ACTIVE); - $(activeElement).removeClass(ClassName$2.ACTIVE + " " + orderClassName + " " + directionalClassName); - _this4._isSliding = false; - setTimeout(function () { - return $(_this4._element).trigger(slidEvent); - }, 0); - }).emulateTransitionEnd(transitionDuration); - } else { - $(activeElement).removeClass(ClassName$2.ACTIVE); - $(nextElement).addClass(ClassName$2.ACTIVE); - this._isSliding = false; - $(this._element).trigger(slidEvent); - } - - if (isCycling) { - this.cycle(); - } - } // Static - ; - - Carousel._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$2); - - var _config = _objectSpread({}, Default, $(this).data()); - - if (typeof config === 'object') { - _config = _objectSpread({}, _config, config); - } - - var action = typeof config === 'string' ? config : _config.slide; - - if (!data) { - data = new Carousel(this, _config); - $(this).data(DATA_KEY$2, data); - } - - if (typeof config === 'number') { - data.to(config); - } else if (typeof action === 'string') { - if (typeof data[action] === 'undefined') { - throw new TypeError("No method named \"" + action + "\""); - } - - data[action](); - } else if (_config.interval && _config.ride) { - data.pause(); - data.cycle(); - } - }); - }; - - Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { - var selector = Util.getSelectorFromElement(this); - - if (!selector) { - return; - } - - var target = $(selector)[0]; - - if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) { - return; - } - - var config = _objectSpread({}, $(target).data(), $(this).data()); - - var slideIndex = this.getAttribute('data-slide-to'); - - if (slideIndex) { - config.interval = false; - } - - Carousel._jQueryInterface.call($(target), config); - - if (slideIndex) { - $(target).data(DATA_KEY$2).to(slideIndex); - } - - event.preventDefault(); - }; - - _createClass(Carousel, null, [{ - key: "VERSION", - get: function get() { - return VERSION$2; - } - }, { - key: "Default", - get: function get() { - return Default; - } - }]); - - return Carousel; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler); - $(window).on(Event$2.LOAD_DATA_API, function () { - var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE)); - - for (var i = 0, len = carousels.length; i < len; i++) { - var $carousel = $(carousels[i]); - - Carousel._jQueryInterface.call($carousel, $carousel.data()); - } - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$2] = Carousel._jQueryInterface; - $.fn[NAME$2].Constructor = Carousel; - - $.fn[NAME$2].noConflict = function () { - $.fn[NAME$2] = JQUERY_NO_CONFLICT$2; - return Carousel._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$3 = 'collapse'; - var VERSION$3 = '4.3.1'; - var DATA_KEY$3 = 'bs.collapse'; - var EVENT_KEY$3 = "." + DATA_KEY$3; - var DATA_API_KEY$3 = '.data-api'; - var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3]; - var Default$1 = { - toggle: true, - parent: '' - }; - var DefaultType$1 = { - toggle: 'boolean', - parent: '(string|element)' - }; - var Event$3 = { - SHOW: "show" + EVENT_KEY$3, - SHOWN: "shown" + EVENT_KEY$3, - HIDE: "hide" + EVENT_KEY$3, - HIDDEN: "hidden" + EVENT_KEY$3, - CLICK_DATA_API: "click" + EVENT_KEY$3 + DATA_API_KEY$3 - }; - var ClassName$3 = { - SHOW: 'show', - COLLAPSE: 'collapse', - COLLAPSING: 'collapsing', - COLLAPSED: 'collapsed' - }; - var Dimension = { - WIDTH: 'width', - HEIGHT: 'height' - }; - var Selector$3 = { - ACTIVES: '.show, .collapsing', - DATA_TOGGLE: '[data-toggle="collapse"]' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Collapse = - /*#__PURE__*/ - function () { - function Collapse(element, config) { - this._isTransitioning = false; - this._element = element; - this._config = this._getConfig(config); - this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); - var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE)); - - for (var i = 0, len = toggleList.length; i < len; i++) { - var elem = toggleList[i]; - var selector = Util.getSelectorFromElement(elem); - var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { - return foundElem === element; - }); - - if (selector !== null && filterElement.length > 0) { - this._selector = selector; - - this._triggerArray.push(elem); - } - } - - this._parent = this._config.parent ? this._getParent() : null; - - if (!this._config.parent) { - this._addAriaAndCollapsedClass(this._element, this._triggerArray); - } - - if (this._config.toggle) { - this.toggle(); - } - } // Getters - - - var _proto = Collapse.prototype; - - // Public - _proto.toggle = function toggle() { - if ($(this._element).hasClass(ClassName$3.SHOW)) { - this.hide(); - } else { - this.show(); - } - }; - - _proto.show = function show() { - var _this = this; - - if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) { - return; - } - - var actives; - var activesData; - - if (this._parent) { - actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) { - if (typeof _this._config.parent === 'string') { - return elem.getAttribute('data-parent') === _this._config.parent; - } - - return elem.classList.contains(ClassName$3.COLLAPSE); - }); - - if (actives.length === 0) { - actives = null; - } - } - - if (actives) { - activesData = $(actives).not(this._selector).data(DATA_KEY$3); - - if (activesData && activesData._isTransitioning) { - return; - } - } - - var startEvent = $.Event(Event$3.SHOW); - $(this._element).trigger(startEvent); - - if (startEvent.isDefaultPrevented()) { - return; - } - - if (actives) { - Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide'); - - if (!activesData) { - $(actives).data(DATA_KEY$3, null); - } - } - - var dimension = this._getDimension(); - - $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING); - this._element.style[dimension] = 0; - - if (this._triggerArray.length) { - $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true); - } - - this.setTransitioning(true); - - var complete = function complete() { - $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW); - _this._element.style[dimension] = ''; - - _this.setTransitioning(false); - - $(_this._element).trigger(Event$3.SHOWN); - }; - - var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); - var scrollSize = "scroll" + capitalizedDimension; - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - this._element.style[dimension] = this._element[scrollSize] + "px"; - }; - - _proto.hide = function hide() { - var _this2 = this; - - if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) { - return; - } - - var startEvent = $.Event(Event$3.HIDE); - $(this._element).trigger(startEvent); - - if (startEvent.isDefaultPrevented()) { - return; - } - - var dimension = this._getDimension(); - - this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; - Util.reflow(this._element); - $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW); - var triggerArrayLength = this._triggerArray.length; - - if (triggerArrayLength > 0) { - for (var i = 0; i < triggerArrayLength; i++) { - var trigger = this._triggerArray[i]; - var selector = Util.getSelectorFromElement(trigger); - - if (selector !== null) { - var $elem = $([].slice.call(document.querySelectorAll(selector))); - - if (!$elem.hasClass(ClassName$3.SHOW)) { - $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false); - } - } - } - } - - this.setTransitioning(true); - - var complete = function complete() { - _this2.setTransitioning(false); - - $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN); - }; - - this._element.style[dimension] = ''; - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - }; - - _proto.setTransitioning = function setTransitioning(isTransitioning) { - this._isTransitioning = isTransitioning; - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$3); - this._config = null; - this._parent = null; - this._element = null; - this._triggerArray = null; - this._isTransitioning = null; - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default$1, config); - config.toggle = Boolean(config.toggle); // Coerce string values - - Util.typeCheckConfig(NAME$3, config, DefaultType$1); - return config; - }; - - _proto._getDimension = function _getDimension() { - var hasWidth = $(this._element).hasClass(Dimension.WIDTH); - return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; - }; - - _proto._getParent = function _getParent() { - var _this3 = this; - - var parent; - - if (Util.isElement(this._config.parent)) { - parent = this._config.parent; // It's a jQuery object - - if (typeof this._config.parent.jquery !== 'undefined') { - parent = this._config.parent[0]; - } - } else { - parent = document.querySelector(this._config.parent); - } - - var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; - var children = [].slice.call(parent.querySelectorAll(selector)); - $(children).each(function (i, element) { - _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); - }); - return parent; - }; - - _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { - var isOpen = $(element).hasClass(ClassName$3.SHOW); - - if (triggerArray.length) { - $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); - } - } // Static - ; - - Collapse._getTargetFromElement = function _getTargetFromElement(element) { - var selector = Util.getSelectorFromElement(element); - return selector ? document.querySelector(selector) : null; - }; - - Collapse._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var $this = $(this); - var data = $this.data(DATA_KEY$3); - - var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {}); - - if (!data && _config.toggle && /show|hide/.test(config)) { - _config.toggle = false; - } - - if (!data) { - data = new Collapse(this, _config); - $this.data(DATA_KEY$3, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - _createClass(Collapse, null, [{ - key: "VERSION", - get: function get() { - return VERSION$3; - } - }, { - key: "Default", - get: function get() { - return Default$1; - } - }]); - - return Collapse; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) { - // preventDefault only for
elements (which change the URL) not inside the collapsible element - if (event.currentTarget.tagName === 'A') { - event.preventDefault(); - } - - var $trigger = $(this); - var selector = Util.getSelectorFromElement(this); - var selectors = [].slice.call(document.querySelectorAll(selector)); - $(selectors).each(function () { - var $target = $(this); - var data = $target.data(DATA_KEY$3); - var config = data ? 'toggle' : $trigger.data(); - - Collapse._jQueryInterface.call($target, config); - }); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$3] = Collapse._jQueryInterface; - $.fn[NAME$3].Constructor = Collapse; - - $.fn[NAME$3].noConflict = function () { - $.fn[NAME$3] = JQUERY_NO_CONFLICT$3; - return Collapse._jQueryInterface; - }; - - /**! - * @fileOverview Kickass library to create and place poppers near their reference elements. - * @version 1.14.7 - * @license - * Copyright (c) 2016 Federico Zivolo and contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; - - var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; - var timeoutDuration = 0; - for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { - if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) { - timeoutDuration = 1; - break; - } - } - - function microtaskDebounce(fn) { - var called = false; - return function () { - if (called) { - return; - } - called = true; - window.Promise.resolve().then(function () { - called = false; - fn(); - }); - }; - } - - function taskDebounce(fn) { - var scheduled = false; - return function () { - if (!scheduled) { - scheduled = true; - setTimeout(function () { - scheduled = false; - fn(); - }, timeoutDuration); - } - }; - } - - var supportsMicroTasks = isBrowser && window.Promise; - - /** - * Create a debounced version of a method, that's asynchronously deferred - * but called in the minimum time possible. - * - * @method - * @memberof Popper.Utils - * @argument {Function} fn - * @returns {Function} - */ - var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce; - - /** - * Check if the given variable is a function - * @method - * @memberof Popper.Utils - * @argument {Any} functionToCheck - variable to check - * @returns {Boolean} answer to: is a function? - */ - function isFunction(functionToCheck) { - var getType = {}; - return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; - } - - /** - * Get CSS computed property of the given element - * @method - * @memberof Popper.Utils - * @argument {Eement} element - * @argument {String} property - */ - function getStyleComputedProperty(element, property) { - if (element.nodeType !== 1) { - return []; - } - // NOTE: 1 DOM access here - var window = element.ownerDocument.defaultView; - var css = window.getComputedStyle(element, null); - return property ? css[property] : css; - } - - /** - * Returns the parentNode or the host of the element - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} parent - */ - function getParentNode(element) { - if (element.nodeName === 'HTML') { - return element; - } - return element.parentNode || element.host; - } - - /** - * Returns the scrolling parent of the given element - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} scroll parent - */ - function getScrollParent(element) { - // Return body, `getScroll` will take care to get the correct `scrollTop` from it - if (!element) { - return document.body; - } - - switch (element.nodeName) { - case 'HTML': - case 'BODY': - return element.ownerDocument.body; - case '#document': - return element.body; - } - - // Firefox want us to check `-x` and `-y` variations as well - - var _getStyleComputedProp = getStyleComputedProperty(element), - overflow = _getStyleComputedProp.overflow, - overflowX = _getStyleComputedProp.overflowX, - overflowY = _getStyleComputedProp.overflowY; - - if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) { - return element; - } - - return getScrollParent(getParentNode(element)); - } - - var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); - var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); - - /** - * Determines if the browser is Internet Explorer - * @method - * @memberof Popper.Utils - * @param {Number} version to check - * @returns {Boolean} isIE - */ - function isIE(version) { - if (version === 11) { - return isIE11; - } - if (version === 10) { - return isIE10; - } - return isIE11 || isIE10; - } - - /** - * Returns the offset parent of the given element - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} offset parent - */ - function getOffsetParent(element) { - if (!element) { - return document.documentElement; - } - - var noOffsetParent = isIE(10) ? document.body : null; - - // NOTE: 1 DOM access here - var offsetParent = element.offsetParent || null; - // Skip hidden elements which don't have an offsetParent - while (offsetParent === noOffsetParent && element.nextElementSibling) { - offsetParent = (element = element.nextElementSibling).offsetParent; - } - - var nodeName = offsetParent && offsetParent.nodeName; - - if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { - return element ? element.ownerDocument.documentElement : document.documentElement; - } - - // .offsetParent will return the closest TH, TD or TABLE in case - // no offsetParent is present, I hate this job... - if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') { - return getOffsetParent(offsetParent); - } - - return offsetParent; - } - - function isOffsetContainer(element) { - var nodeName = element.nodeName; - - if (nodeName === 'BODY') { - return false; - } - return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element; - } - - /** - * Finds the root node (document, shadowDOM root) of the given element - * @method - * @memberof Popper.Utils - * @argument {Element} node - * @returns {Element} root node - */ - function getRoot(node) { - if (node.parentNode !== null) { - return getRoot(node.parentNode); - } - - return node; - } - - /** - * Finds the offset parent common to the two provided nodes - * @method - * @memberof Popper.Utils - * @argument {Element} element1 - * @argument {Element} element2 - * @returns {Element} common offset parent - */ - function findCommonOffsetParent(element1, element2) { - // This check is needed to avoid errors in case one of the elements isn't defined for any reason - if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) { - return document.documentElement; - } - - // Here we make sure to give as "start" the element that comes first in the DOM - var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING; - var start = order ? element1 : element2; - var end = order ? element2 : element1; - - // Get common ancestor container - var range = document.createRange(); - range.setStart(start, 0); - range.setEnd(end, 0); - var commonAncestorContainer = range.commonAncestorContainer; - - // Both nodes are inside #document - - if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) { - if (isOffsetContainer(commonAncestorContainer)) { - return commonAncestorContainer; - } - - return getOffsetParent(commonAncestorContainer); - } - - // one of the nodes is inside shadowDOM, find which one - var element1root = getRoot(element1); - if (element1root.host) { - return findCommonOffsetParent(element1root.host, element2); - } else { - return findCommonOffsetParent(element1, getRoot(element2).host); - } - } - - /** - * Gets the scroll value of the given element in the given side (top and left) - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @argument {String} side `top` or `left` - * @returns {number} amount of scrolled pixels - */ - function getScroll(element) { - var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top'; - - var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft'; - var nodeName = element.nodeName; - - if (nodeName === 'BODY' || nodeName === 'HTML') { - var html = element.ownerDocument.documentElement; - var scrollingElement = element.ownerDocument.scrollingElement || html; - return scrollingElement[upperSide]; - } - - return element[upperSide]; - } - - /* - * Sum or subtract the element scroll values (left and top) from a given rect object - * @method - * @memberof Popper.Utils - * @param {Object} rect - Rect object you want to change - * @param {HTMLElement} element - The element from the function reads the scroll values - * @param {Boolean} subtract - set to true if you want to subtract the scroll values - * @return {Object} rect - The modifier rect object - */ - function includeScroll(rect, element) { - var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - var scrollTop = getScroll(element, 'top'); - var scrollLeft = getScroll(element, 'left'); - var modifier = subtract ? -1 : 1; - rect.top += scrollTop * modifier; - rect.bottom += scrollTop * modifier; - rect.left += scrollLeft * modifier; - rect.right += scrollLeft * modifier; - return rect; - } - - /* - * Helper to detect borders of a given element - * @method - * @memberof Popper.Utils - * @param {CSSStyleDeclaration} styles - * Result of `getStyleComputedProperty` on the given element - * @param {String} axis - `x` or `y` - * @return {number} borders - The borders size of the given axis - */ - - function getBordersSize(styles, axis) { - var sideA = axis === 'x' ? 'Left' : 'Top'; - var sideB = sideA === 'Left' ? 'Right' : 'Bottom'; - - return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10); - } - - function getSize(axis, body, html, computedStyle) { - return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0); - } - - function getWindowSizes(document) { - var body = document.body; - var html = document.documentElement; - var computedStyle = isIE(10) && getComputedStyle(html); - - return { - height: getSize('Height', body, html, computedStyle), - width: getSize('Width', body, html, computedStyle) - }; - } - - var classCallCheck = function (instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - }; - - var createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; - }(); - - - - - - var defineProperty = function (obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - }; - - var _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - /** - * Given element offsets, generate an output similar to getBoundingClientRect - * @method - * @memberof Popper.Utils - * @argument {Object} offsets - * @returns {Object} ClientRect like output - */ - function getClientRect(offsets) { - return _extends({}, offsets, { - right: offsets.left + offsets.width, - bottom: offsets.top + offsets.height - }); - } - - /** - * Get bounding client rect of given element - * @method - * @memberof Popper.Utils - * @param {HTMLElement} element - * @return {Object} client rect - */ - function getBoundingClientRect(element) { - var rect = {}; - - // IE10 10 FIX: Please, don't ask, the element isn't - // considered in DOM in some circumstances... - // This isn't reproducible in IE10 compatibility mode of IE11 - try { - if (isIE(10)) { - rect = element.getBoundingClientRect(); - var scrollTop = getScroll(element, 'top'); - var scrollLeft = getScroll(element, 'left'); - rect.top += scrollTop; - rect.left += scrollLeft; - rect.bottom += scrollTop; - rect.right += scrollLeft; - } else { - rect = element.getBoundingClientRect(); - } - } catch (e) {} - - var result = { - left: rect.left, - top: rect.top, - width: rect.right - rect.left, - height: rect.bottom - rect.top - }; - - // subtract scrollbar size from sizes - var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {}; - var width = sizes.width || element.clientWidth || result.right - result.left; - var height = sizes.height || element.clientHeight || result.bottom - result.top; - - var horizScrollbar = element.offsetWidth - width; - var vertScrollbar = element.offsetHeight - height; - - // if an hypothetical scrollbar is detected, we must be sure it's not a `border` - // we make this check conditional for performance reasons - if (horizScrollbar || vertScrollbar) { - var styles = getStyleComputedProperty(element); - horizScrollbar -= getBordersSize(styles, 'x'); - vertScrollbar -= getBordersSize(styles, 'y'); - - result.width -= horizScrollbar; - result.height -= vertScrollbar; - } - - return getClientRect(result); - } - - function getOffsetRectRelativeToArbitraryNode(children, parent) { - var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - var isIE10 = isIE(10); - var isHTML = parent.nodeName === 'HTML'; - var childrenRect = getBoundingClientRect(children); - var parentRect = getBoundingClientRect(parent); - var scrollParent = getScrollParent(children); - - var styles = getStyleComputedProperty(parent); - var borderTopWidth = parseFloat(styles.borderTopWidth, 10); - var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10); - - // In cases where the parent is fixed, we must ignore negative scroll in offset calc - if (fixedPosition && isHTML) { - parentRect.top = Math.max(parentRect.top, 0); - parentRect.left = Math.max(parentRect.left, 0); - } - var offsets = getClientRect({ - top: childrenRect.top - parentRect.top - borderTopWidth, - left: childrenRect.left - parentRect.left - borderLeftWidth, - width: childrenRect.width, - height: childrenRect.height - }); - offsets.marginTop = 0; - offsets.marginLeft = 0; - - // Subtract margins of documentElement in case it's being used as parent - // we do this only on HTML because it's the only element that behaves - // differently when margins are applied to it. The margins are included in - // the box of the documentElement, in the other cases not. - if (!isIE10 && isHTML) { - var marginTop = parseFloat(styles.marginTop, 10); - var marginLeft = parseFloat(styles.marginLeft, 10); - - offsets.top -= borderTopWidth - marginTop; - offsets.bottom -= borderTopWidth - marginTop; - offsets.left -= borderLeftWidth - marginLeft; - offsets.right -= borderLeftWidth - marginLeft; - - // Attach marginTop and marginLeft because in some circumstances we may need them - offsets.marginTop = marginTop; - offsets.marginLeft = marginLeft; - } - - if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') { - offsets = includeScroll(offsets, parent); - } - - return offsets; - } - - function getViewportOffsetRectRelativeToArtbitraryNode(element) { - var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var html = element.ownerDocument.documentElement; - var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html); - var width = Math.max(html.clientWidth, window.innerWidth || 0); - var height = Math.max(html.clientHeight, window.innerHeight || 0); - - var scrollTop = !excludeScroll ? getScroll(html) : 0; - var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0; - - var offset = { - top: scrollTop - relativeOffset.top + relativeOffset.marginTop, - left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft, - width: width, - height: height - }; - - return getClientRect(offset); - } - - /** - * Check if the given element is fixed or is inside a fixed parent - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @argument {Element} customContainer - * @returns {Boolean} answer to "isFixed?" - */ - function isFixed(element) { - var nodeName = element.nodeName; - if (nodeName === 'BODY' || nodeName === 'HTML') { - return false; - } - if (getStyleComputedProperty(element, 'position') === 'fixed') { - return true; - } - var parentNode = getParentNode(element); - if (!parentNode) { - return false; - } - return isFixed(parentNode); - } - - /** - * Finds the first parent of an element that has a transformed property defined - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} first transformed parent or documentElement - */ - - function getFixedPositionOffsetParent(element) { - // This check is needed to avoid errors in case one of the elements isn't defined for any reason - if (!element || !element.parentElement || isIE()) { - return document.documentElement; - } - var el = element.parentElement; - while (el && getStyleComputedProperty(el, 'transform') === 'none') { - el = el.parentElement; - } - return el || document.documentElement; - } - - /** - * Computed the boundaries limits and return them - * @method - * @memberof Popper.Utils - * @param {HTMLElement} popper - * @param {HTMLElement} reference - * @param {number} padding - * @param {HTMLElement} boundariesElement - Element used to define the boundaries - * @param {Boolean} fixedPosition - Is in fixed position mode - * @returns {Object} Coordinates of the boundaries - */ - function getBoundaries(popper, reference, padding, boundariesElement) { - var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; - - // NOTE: 1 DOM access here - - var boundaries = { top: 0, left: 0 }; - var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference); - - // Handle viewport case - if (boundariesElement === 'viewport') { - boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition); - } else { - // Handle other cases based on DOM element used as boundaries - var boundariesNode = void 0; - if (boundariesElement === 'scrollParent') { - boundariesNode = getScrollParent(getParentNode(reference)); - if (boundariesNode.nodeName === 'BODY') { - boundariesNode = popper.ownerDocument.documentElement; - } - } else if (boundariesElement === 'window') { - boundariesNode = popper.ownerDocument.documentElement; - } else { - boundariesNode = boundariesElement; - } - - var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); - - // In case of HTML, we need a different computation - if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) { - var _getWindowSizes = getWindowSizes(popper.ownerDocument), - height = _getWindowSizes.height, - width = _getWindowSizes.width; - - boundaries.top += offsets.top - offsets.marginTop; - boundaries.bottom = height + offsets.top; - boundaries.left += offsets.left - offsets.marginLeft; - boundaries.right = width + offsets.left; - } else { - // for all the other DOM elements, this one is good - boundaries = offsets; - } - } - - // Add paddings - padding = padding || 0; - var isPaddingNumber = typeof padding === 'number'; - boundaries.left += isPaddingNumber ? padding : padding.left || 0; - boundaries.top += isPaddingNumber ? padding : padding.top || 0; - boundaries.right -= isPaddingNumber ? padding : padding.right || 0; - boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; - - return boundaries; - } - - function getArea(_ref) { - var width = _ref.width, - height = _ref.height; - - return width * height; - } - - /** - * Utility used to transform the `auto` placement to the placement with more - * available space. - * @method - * @memberof Popper.Utils - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) { - var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; - - if (placement.indexOf('auto') === -1) { - return placement; - } - - var boundaries = getBoundaries(popper, reference, padding, boundariesElement); - - var rects = { - top: { - width: boundaries.width, - height: refRect.top - boundaries.top - }, - right: { - width: boundaries.right - refRect.right, - height: boundaries.height - }, - bottom: { - width: boundaries.width, - height: boundaries.bottom - refRect.bottom - }, - left: { - width: refRect.left - boundaries.left, - height: boundaries.height - } - }; - - var sortedAreas = Object.keys(rects).map(function (key) { - return _extends({ - key: key - }, rects[key], { - area: getArea(rects[key]) - }); - }).sort(function (a, b) { - return b.area - a.area; - }); - - var filteredAreas = sortedAreas.filter(function (_ref2) { - var width = _ref2.width, - height = _ref2.height; - return width >= popper.clientWidth && height >= popper.clientHeight; - }); - - var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key; - - var variation = placement.split('-')[1]; - - return computedPlacement + (variation ? '-' + variation : ''); - } - - /** - * Get offsets to the reference element - * @method - * @memberof Popper.Utils - * @param {Object} state - * @param {Element} popper - the popper element - * @param {Element} reference - the reference element (the popper will be relative to this) - * @param {Element} fixedPosition - is in fixed position mode - * @returns {Object} An object containing the offsets which will be applied to the popper - */ - function getReferenceOffsets(state, popper, reference) { - var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - - var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference); - return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition); - } - - /** - * Get the outer sizes of the given element (offset size + margins) - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Object} object containing width and height properties - */ - function getOuterSizes(element) { - var window = element.ownerDocument.defaultView; - var styles = window.getComputedStyle(element); - var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0); - var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0); - var result = { - width: element.offsetWidth + y, - height: element.offsetHeight + x - }; - return result; - } - - /** - * Get the opposite placement of the given one - * @method - * @memberof Popper.Utils - * @argument {String} placement - * @returns {String} flipped placement - */ - function getOppositePlacement(placement) { - var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; - return placement.replace(/left|right|bottom|top/g, function (matched) { - return hash[matched]; - }); - } - - /** - * Get offsets to the popper - * @method - * @memberof Popper.Utils - * @param {Object} position - CSS position the Popper will get applied - * @param {HTMLElement} popper - the popper element - * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this) - * @param {String} placement - one of the valid placement options - * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper - */ - function getPopperOffsets(popper, referenceOffsets, placement) { - placement = placement.split('-')[0]; - - // Get popper node sizes - var popperRect = getOuterSizes(popper); - - // Add position, width and height to our offsets object - var popperOffsets = { - width: popperRect.width, - height: popperRect.height - }; - - // depending by the popper placement we have to compute its offsets slightly differently - var isHoriz = ['right', 'left'].indexOf(placement) !== -1; - var mainSide = isHoriz ? 'top' : 'left'; - var secondarySide = isHoriz ? 'left' : 'top'; - var measurement = isHoriz ? 'height' : 'width'; - var secondaryMeasurement = !isHoriz ? 'height' : 'width'; - - popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2; - if (placement === secondarySide) { - popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement]; - } else { - popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)]; - } - - return popperOffsets; - } - - /** - * Mimics the `find` method of Array - * @method - * @memberof Popper.Utils - * @argument {Array} arr - * @argument prop - * @argument value - * @returns index or -1 - */ - function find(arr, check) { - // use native find if supported - if (Array.prototype.find) { - return arr.find(check); - } - - // use `filter` to obtain the same behavior of `find` - return arr.filter(check)[0]; - } - - /** - * Return the index of the matching object - * @method - * @memberof Popper.Utils - * @argument {Array} arr - * @argument prop - * @argument value - * @returns index or -1 - */ - function findIndex(arr, prop, value) { - // use native findIndex if supported - if (Array.prototype.findIndex) { - return arr.findIndex(function (cur) { - return cur[prop] === value; - }); - } - - // use `find` + `indexOf` if `findIndex` isn't supported - var match = find(arr, function (obj) { - return obj[prop] === value; - }); - return arr.indexOf(match); - } - - /** - * Loop trough the list of modifiers and run them in order, - * each of them will then edit the data object. - * @method - * @memberof Popper.Utils - * @param {dataObject} data - * @param {Array} modifiers - * @param {String} ends - Optional modifier name used as stopper - * @returns {dataObject} - */ - function runModifiers(modifiers, data, ends) { - var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends)); - - modifiersToRun.forEach(function (modifier) { - if (modifier['function']) { - // eslint-disable-line dot-notation - console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); - } - var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation - if (modifier.enabled && isFunction(fn)) { - // Add properties to offsets to make them a complete clientRect object - // we do this before each modifier to make sure the previous one doesn't - // mess with these values - data.offsets.popper = getClientRect(data.offsets.popper); - data.offsets.reference = getClientRect(data.offsets.reference); - - data = fn(data, modifier); - } - }); - - return data; - } - - /** - * Updates the position of the popper, computing the new offsets and applying - * the new style.
- * Prefer `scheduleUpdate` over `update` because of performance reasons. - * @method - * @memberof Popper - */ - function update() { - // if popper is destroyed, don't perform any further update - if (this.state.isDestroyed) { - return; - } - - var data = { - instance: this, - styles: {}, - arrowStyles: {}, - attributes: {}, - flipped: false, - offsets: {} - }; - - // compute reference element offsets - data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); - - // compute auto placement, store placement inside the data object, - // modifiers will be able to edit `placement` if needed - // and refer to originalPlacement to know the original value - data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); - - // store the computed placement inside `originalPlacement` - data.originalPlacement = data.placement; - - data.positionFixed = this.options.positionFixed; - - // compute the popper offsets - data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); - - data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; - - // run the modifiers - data = runModifiers(this.modifiers, data); - - // the first `update` will call `onCreate` callback - // the other ones will call `onUpdate` callback - if (!this.state.isCreated) { - this.state.isCreated = true; - this.options.onCreate(data); - } else { - this.options.onUpdate(data); - } - } - - /** - * Helper used to know if the given modifier is enabled. - * @method - * @memberof Popper.Utils - * @returns {Boolean} - */ - function isModifierEnabled(modifiers, modifierName) { - return modifiers.some(function (_ref) { - var name = _ref.name, - enabled = _ref.enabled; - return enabled && name === modifierName; - }); - } - - /** - * Get the prefixed supported property name - * @method - * @memberof Popper.Utils - * @argument {String} property (camelCase) - * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix) - */ - function getSupportedPropertyName(property) { - var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O']; - var upperProp = property.charAt(0).toUpperCase() + property.slice(1); - - for (var i = 0; i < prefixes.length; i++) { - var prefix = prefixes[i]; - var toCheck = prefix ? '' + prefix + upperProp : property; - if (typeof document.body.style[toCheck] !== 'undefined') { - return toCheck; - } - } - return null; - } - - /** - * Destroys the popper. - * @method - * @memberof Popper - */ - function destroy() { - this.state.isDestroyed = true; - - // touch DOM only if `applyStyle` modifier is enabled - if (isModifierEnabled(this.modifiers, 'applyStyle')) { - this.popper.removeAttribute('x-placement'); - this.popper.style.position = ''; - this.popper.style.top = ''; - this.popper.style.left = ''; - this.popper.style.right = ''; - this.popper.style.bottom = ''; - this.popper.style.willChange = ''; - this.popper.style[getSupportedPropertyName('transform')] = ''; - } - - this.disableEventListeners(); - - // remove the popper if user explicity asked for the deletion on destroy - // do not use `remove` because IE11 doesn't support it - if (this.options.removeOnDestroy) { - this.popper.parentNode.removeChild(this.popper); - } - return this; - } - - /** - * Get the window associated with the element - * @argument {Element} element - * @returns {Window} - */ - function getWindow(element) { - var ownerDocument = element.ownerDocument; - return ownerDocument ? ownerDocument.defaultView : window; - } - - function attachToScrollParents(scrollParent, event, callback, scrollParents) { - var isBody = scrollParent.nodeName === 'BODY'; - var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent; - target.addEventListener(event, callback, { passive: true }); - - if (!isBody) { - attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents); - } - scrollParents.push(target); - } - - /** - * Setup needed event listeners used to update the popper position - * @method - * @memberof Popper.Utils - * @private - */ - function setupEventListeners(reference, options, state, updateBound) { - // Resize event listener on window - state.updateBound = updateBound; - getWindow(reference).addEventListener('resize', state.updateBound, { passive: true }); - - // Scroll event listener on scroll parents - var scrollElement = getScrollParent(reference); - attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents); - state.scrollElement = scrollElement; - state.eventsEnabled = true; - - return state; - } - - /** - * It will add resize/scroll events and start recalculating - * position of the popper element when they are triggered. - * @method - * @memberof Popper - */ - function enableEventListeners() { - if (!this.state.eventsEnabled) { - this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate); - } - } - - /** - * Remove event listeners used to update the popper position - * @method - * @memberof Popper.Utils - * @private - */ - function removeEventListeners(reference, state) { - // Remove resize event listener on window - getWindow(reference).removeEventListener('resize', state.updateBound); - - // Remove scroll event listener on scroll parents - state.scrollParents.forEach(function (target) { - target.removeEventListener('scroll', state.updateBound); - }); - - // Reset state - state.updateBound = null; - state.scrollParents = []; - state.scrollElement = null; - state.eventsEnabled = false; - return state; - } - - /** - * It will remove resize/scroll events and won't recalculate popper position - * when they are triggered. It also won't trigger `onUpdate` callback anymore, - * unless you call `update` method manually. - * @method - * @memberof Popper - */ - function disableEventListeners() { - if (this.state.eventsEnabled) { - cancelAnimationFrame(this.scheduleUpdate); - this.state = removeEventListeners(this.reference, this.state); - } - } - - /** - * Tells if a given input is a number - * @method - * @memberof Popper.Utils - * @param {*} input to check - * @return {Boolean} - */ - function isNumeric(n) { - return n !== '' && !isNaN(parseFloat(n)) && isFinite(n); - } - - /** - * Set the style to the given popper - * @method - * @memberof Popper.Utils - * @argument {Element} element - Element to apply the style to - * @argument {Object} styles - * Object with a list of properties and values which will be applied to the element - */ - function setStyles(element, styles) { - Object.keys(styles).forEach(function (prop) { - var unit = ''; - // add unit if the value is numeric and is one of the following - if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) { - unit = 'px'; - } - element.style[prop] = styles[prop] + unit; - }); - } - - /** - * Set the attributes to the given popper - * @method - * @memberof Popper.Utils - * @argument {Element} element - Element to apply the attributes to - * @argument {Object} styles - * Object with a list of properties and values which will be applied to the element - */ - function setAttributes(element, attributes) { - Object.keys(attributes).forEach(function (prop) { - var value = attributes[prop]; - if (value !== false) { - element.setAttribute(prop, attributes[prop]); - } else { - element.removeAttribute(prop); - } - }); - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} data.styles - List of style properties - values to apply to popper element - * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The same data object - */ - function applyStyle(data) { - // any property present in `data.styles` will be applied to the popper, - // in this way we can make the 3rd party modifiers add custom styles to it - // Be aware, modifiers could override the properties defined in the previous - // lines of this modifier! - setStyles(data.instance.popper, data.styles); - - // any property present in `data.attributes` will be applied to the popper, - // they will be set as HTML attributes of the element - setAttributes(data.instance.popper, data.attributes); - - // if arrowElement is defined and arrowStyles has some properties - if (data.arrowElement && Object.keys(data.arrowStyles).length) { - setStyles(data.arrowElement, data.arrowStyles); - } - - return data; - } - - /** - * Set the x-placement attribute before everything else because it could be used - * to add margins to the popper margins needs to be calculated to get the - * correct popper offsets. - * @method - * @memberof Popper.modifiers - * @param {HTMLElement} reference - The reference element used to position the popper - * @param {HTMLElement} popper - The HTML element used as popper - * @param {Object} options - Popper.js options - */ - function applyStyleOnLoad(reference, popper, options, modifierOptions, state) { - // compute reference element offsets - var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); - - // compute auto placement, store placement inside the data object, - // modifiers will be able to edit `placement` if needed - // and refer to originalPlacement to know the original value - var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding); - - popper.setAttribute('x-placement', placement); - - // Apply `position` to popper before anything else because - // without the position applied we can't guarantee correct computations - setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' }); - - return options; - } - - /** - * @function - * @memberof Popper.Utils - * @argument {Object} data - The data object generated by `update` method - * @argument {Boolean} shouldRound - If the offsets should be rounded at all - * @returns {Object} The popper's position offsets rounded - * - * The tale of pixel-perfect positioning. It's still not 100% perfect, but as - * good as it can be within reason. - * Discussion here: https://github.com/FezVrasta/popper.js/pull/715 - * - * Low DPI screens cause a popper to be blurry if not using full pixels (Safari - * as well on High DPI screens). - * - * Firefox prefers no rounding for positioning and does not have blurriness on - * high DPI screens. - * - * Only horizontal placement and left/right values need to be considered. - */ - function getRoundedOffsets(data, shouldRound) { - var _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - var round = Math.round, - floor = Math.floor; - - var noRound = function noRound(v) { - return v; - }; - - var referenceWidth = round(reference.width); - var popperWidth = round(popper.width); - - var isVertical = ['left', 'right'].indexOf(data.placement) !== -1; - var isVariation = data.placement.indexOf('-') !== -1; - var sameWidthParity = referenceWidth % 2 === popperWidth % 2; - var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1; - - var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor; - var verticalToInteger = !shouldRound ? noRound : round; - - return { - left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left), - top: verticalToInteger(popper.top), - bottom: verticalToInteger(popper.bottom), - right: horizontalToInteger(popper.right) - }; - } - - var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent); - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function computeStyle(data, options) { - var x = options.x, - y = options.y; - var popper = data.offsets.popper; - - // Remove this legacy support in Popper.js v2 - - var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) { - return modifier.name === 'applyStyle'; - }).gpuAcceleration; - if (legacyGpuAccelerationOption !== undefined) { - console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'); - } - var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration; - - var offsetParent = getOffsetParent(data.instance.popper); - var offsetParentRect = getBoundingClientRect(offsetParent); - - // Styles - var styles = { - position: popper.position - }; - - var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox); - - var sideA = x === 'bottom' ? 'top' : 'bottom'; - var sideB = y === 'right' ? 'left' : 'right'; - - // if gpuAcceleration is set to `true` and transform is supported, - // we use `translate3d` to apply the position to the popper we - // automatically use the supported prefixed version if needed - var prefixedProperty = getSupportedPropertyName('transform'); - - // now, let's make a step back and look at this code closely (wtf?) - // If the content of the popper grows once it's been positioned, it - // may happen that the popper gets misplaced because of the new content - // overflowing its reference element - // To avoid this problem, we provide two options (x and y), which allow - // the consumer to define the offset origin. - // If we position a popper on top of a reference element, we can set - // `x` to `top` to make the popper grow towards its top instead of - // its bottom. - var left = void 0, - top = void 0; - if (sideA === 'bottom') { - // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar) - // and not the bottom of the html element - if (offsetParent.nodeName === 'HTML') { - top = -offsetParent.clientHeight + offsets.bottom; - } else { - top = -offsetParentRect.height + offsets.bottom; - } - } else { - top = offsets.top; - } - if (sideB === 'right') { - if (offsetParent.nodeName === 'HTML') { - left = -offsetParent.clientWidth + offsets.right; - } else { - left = -offsetParentRect.width + offsets.right; - } - } else { - left = offsets.left; - } - if (gpuAcceleration && prefixedProperty) { - styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)'; - styles[sideA] = 0; - styles[sideB] = 0; - styles.willChange = 'transform'; - } else { - // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties - var invertTop = sideA === 'bottom' ? -1 : 1; - var invertLeft = sideB === 'right' ? -1 : 1; - styles[sideA] = top * invertTop; - styles[sideB] = left * invertLeft; - styles.willChange = sideA + ', ' + sideB; - } - - // Attributes - var attributes = { - 'x-placement': data.placement - }; - - // Update `data` attributes, styles and arrowStyles - data.attributes = _extends({}, attributes, data.attributes); - data.styles = _extends({}, styles, data.styles); - data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles); - - return data; - } - - /** - * Helper used to know if the given modifier depends from another one.
- * It checks if the needed modifier is listed and enabled. - * @method - * @memberof Popper.Utils - * @param {Array} modifiers - list of modifiers - * @param {String} requestingName - name of requesting modifier - * @param {String} requestedName - name of requested modifier - * @returns {Boolean} - */ - function isModifierRequired(modifiers, requestingName, requestedName) { - var requesting = find(modifiers, function (_ref) { - var name = _ref.name; - return name === requestingName; - }); - - var isRequired = !!requesting && modifiers.some(function (modifier) { - return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order; - }); - - if (!isRequired) { - var _requesting = '`' + requestingName + '`'; - var requested = '`' + requestedName + '`'; - console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!'); - } - return isRequired; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function arrow(data, options) { - var _data$offsets$arrow; - - // arrow depends on keepTogether in order to work - if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) { - return data; - } - - var arrowElement = options.element; - - // if arrowElement is a string, suppose it's a CSS selector - if (typeof arrowElement === 'string') { - arrowElement = data.instance.popper.querySelector(arrowElement); - - // if arrowElement is not found, don't run the modifier - if (!arrowElement) { - return data; - } - } else { - // if the arrowElement isn't a query selector we must check that the - // provided DOM node is child of its popper node - if (!data.instance.popper.contains(arrowElement)) { - console.warn('WARNING: `arrow.element` must be child of its popper element!'); - return data; - } - } - - var placement = data.placement.split('-')[0]; - var _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - - var isVertical = ['left', 'right'].indexOf(placement) !== -1; - - var len = isVertical ? 'height' : 'width'; - var sideCapitalized = isVertical ? 'Top' : 'Left'; - var side = sideCapitalized.toLowerCase(); - var altSide = isVertical ? 'left' : 'top'; - var opSide = isVertical ? 'bottom' : 'right'; - var arrowElementSize = getOuterSizes(arrowElement)[len]; - - // - // extends keepTogether behavior making sure the popper and its - // reference have enough pixels in conjunction - // - - // top/left side - if (reference[opSide] - arrowElementSize < popper[side]) { - data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize); - } - // bottom/right side - if (reference[side] + arrowElementSize > popper[opSide]) { - data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide]; - } - data.offsets.popper = getClientRect(data.offsets.popper); - - // compute center of the popper - var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; - - // Compute the sideValue using the updated popper offsets - // take popper margin in account because we don't have this info available - var css = getStyleComputedProperty(data.instance.popper); - var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10); - var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10); - var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; - - // prevent arrowElement from being placed not contiguously to its popper - sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0); - - data.arrowElement = arrowElement; - data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow); - - return data; - } - - /** - * Get the opposite placement variation of the given one - * @method - * @memberof Popper.Utils - * @argument {String} placement variation - * @returns {String} flipped placement variation - */ - function getOppositeVariation(variation) { - if (variation === 'end') { - return 'start'; - } else if (variation === 'start') { - return 'end'; - } - return variation; - } - - /** - * List of accepted placements to use as values of the `placement` option.
- * Valid placements are: - * - `auto` - * - `top` - * - `right` - * - `bottom` - * - `left` - * - * Each placement can have a variation from this list: - * - `-start` - * - `-end` - * - * Variations are interpreted easily if you think of them as the left to right - * written languages. Horizontally (`top` and `bottom`), `start` is left and `end` - * is right.
- * Vertically (`left` and `right`), `start` is top and `end` is bottom. - * - * Some valid examples are: - * - `top-end` (on top of reference, right aligned) - * - `right-start` (on right of reference, top aligned) - * - `bottom` (on bottom, centered) - * - `auto-end` (on the side with more space available, alignment depends by placement) - * - * @static - * @type {Array} - * @enum {String} - * @readonly - * @method placements - * @memberof Popper - */ - var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']; - - // Get rid of `auto` `auto-start` and `auto-end` - var validPlacements = placements.slice(3); - - /** - * Given an initial placement, returns all the subsequent placements - * clockwise (or counter-clockwise). - * - * @method - * @memberof Popper.Utils - * @argument {String} placement - A valid placement (it accepts variations) - * @argument {Boolean} counter - Set to true to walk the placements counterclockwise - * @returns {Array} placements including their variations - */ - function clockwise(placement) { - var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var index = validPlacements.indexOf(placement); - var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index)); - return counter ? arr.reverse() : arr; - } - - var BEHAVIORS = { - FLIP: 'flip', - CLOCKWISE: 'clockwise', - COUNTERCLOCKWISE: 'counterclockwise' - }; - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function flip(data, options) { - // if `inner` modifier is enabled, we can't use the `flip` modifier - if (isModifierEnabled(data.instance.modifiers, 'inner')) { - return data; - } - - if (data.flipped && data.placement === data.originalPlacement) { - // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides - return data; - } - - var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed); - - var placement = data.placement.split('-')[0]; - var placementOpposite = getOppositePlacement(placement); - var variation = data.placement.split('-')[1] || ''; - - var flipOrder = []; - - switch (options.behavior) { - case BEHAVIORS.FLIP: - flipOrder = [placement, placementOpposite]; - break; - case BEHAVIORS.CLOCKWISE: - flipOrder = clockwise(placement); - break; - case BEHAVIORS.COUNTERCLOCKWISE: - flipOrder = clockwise(placement, true); - break; - default: - flipOrder = options.behavior; - } - - flipOrder.forEach(function (step, index) { - if (placement !== step || flipOrder.length === index + 1) { - return data; - } - - placement = data.placement.split('-')[0]; - placementOpposite = getOppositePlacement(placement); - - var popperOffsets = data.offsets.popper; - var refOffsets = data.offsets.reference; - - // using floor because the reference offsets may contain decimals we are not going to consider here - var floor = Math.floor; - var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom); - - var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left); - var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right); - var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top); - var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom); - - var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; - - // flip the variation if required - var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; - var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom); - - if (overlapsRef || overflowsBoundaries || flippedVariation) { - // this boolean to detect any flip loop - data.flipped = true; - - if (overlapsRef || overflowsBoundaries) { - placement = flipOrder[index + 1]; - } - - if (flippedVariation) { - variation = getOppositeVariation(variation); - } - - data.placement = placement + (variation ? '-' + variation : ''); - - // this object contains `position`, we want to preserve it along with - // any additional property we may add in the future - data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement)); - - data = runModifiers(data.instance.modifiers, data, 'flip'); - } - }); - return data; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function keepTogether(data) { - var _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - - var placement = data.placement.split('-')[0]; - var floor = Math.floor; - var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; - var side = isVertical ? 'right' : 'bottom'; - var opSide = isVertical ? 'left' : 'top'; - var measurement = isVertical ? 'width' : 'height'; - - if (popper[side] < floor(reference[opSide])) { - data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement]; - } - if (popper[opSide] > floor(reference[side])) { - data.offsets.popper[opSide] = floor(reference[side]); - } - - return data; - } - - /** - * Converts a string containing value + unit into a px value number - * @function - * @memberof {modifiers~offset} - * @private - * @argument {String} str - Value + unit string - * @argument {String} measurement - `height` or `width` - * @argument {Object} popperOffsets - * @argument {Object} referenceOffsets - * @returns {Number|String} - * Value in pixels, or original string if no values were extracted - */ - function toValue(str, measurement, popperOffsets, referenceOffsets) { - // separate value from unit - var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/); - var value = +split[1]; - var unit = split[2]; - - // If it's not a number it's an operator, I guess - if (!value) { - return str; - } - - if (unit.indexOf('%') === 0) { - var element = void 0; - switch (unit) { - case '%p': - element = popperOffsets; - break; - case '%': - case '%r': - default: - element = referenceOffsets; - } - - var rect = getClientRect(element); - return rect[measurement] / 100 * value; - } else if (unit === 'vh' || unit === 'vw') { - // if is a vh or vw, we calculate the size based on the viewport - var size = void 0; - if (unit === 'vh') { - size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); - } else { - size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); - } - return size / 100 * value; - } else { - // if is an explicit pixel unit, we get rid of the unit and keep the value - // if is an implicit unit, it's px, and we return just the value - return value; - } - } - - /** - * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. - * @function - * @memberof {modifiers~offset} - * @private - * @argument {String} offset - * @argument {Object} popperOffsets - * @argument {Object} referenceOffsets - * @argument {String} basePlacement - * @returns {Array} a two cells array with x and y offsets in numbers - */ - function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) { - var offsets = [0, 0]; - - // Use height if placement is left or right and index is 0 otherwise use width - // in this way the first offset will use an axis and the second one - // will use the other one - var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; - - // Split the offset string to obtain a list of values and operands - // The regex addresses values with the plus or minus sign in front (+10, -20, etc) - var fragments = offset.split(/(\+|\-)/).map(function (frag) { - return frag.trim(); - }); - - // Detect if the offset string contains a pair of values or a single one - // they could be separated by comma or space - var divider = fragments.indexOf(find(fragments, function (frag) { - return frag.search(/,|\s/) !== -1; - })); - - if (fragments[divider] && fragments[divider].indexOf(',') === -1) { - console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.'); - } - - // If divider is found, we divide the list of values and operands to divide - // them by ofset X and Y. - var splitRegex = /\s*,\s*|\s+/; - var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments]; - - // Convert the values with units to absolute pixels to allow our computations - ops = ops.map(function (op, index) { - // Most of the units rely on the orientation of the popper - var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width'; - var mergeWithPrevious = false; - return op - // This aggregates any `+` or `-` sign that aren't considered operators - // e.g.: 10 + +5 => [10, +, +5] - .reduce(function (a, b) { - if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) { - a[a.length - 1] = b; - mergeWithPrevious = true; - return a; - } else if (mergeWithPrevious) { - a[a.length - 1] += b; - mergeWithPrevious = false; - return a; - } else { - return a.concat(b); - } - }, []) - // Here we convert the string values into number values (in px) - .map(function (str) { - return toValue(str, measurement, popperOffsets, referenceOffsets); - }); - }); - - // Loop trough the offsets arrays and execute the operations - ops.forEach(function (op, index) { - op.forEach(function (frag, index2) { - if (isNumeric(frag)) { - offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1); - } - }); - }); - return offsets; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @argument {Number|String} options.offset=0 - * The offset value as described in the modifier description - * @returns {Object} The data object, properly modified - */ - function offset(data, _ref) { - var offset = _ref.offset; - var placement = data.placement, - _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - - var basePlacement = placement.split('-')[0]; - - var offsets = void 0; - if (isNumeric(+offset)) { - offsets = [+offset, 0]; - } else { - offsets = parseOffset(offset, popper, reference, basePlacement); - } - - if (basePlacement === 'left') { - popper.top += offsets[0]; - popper.left -= offsets[1]; - } else if (basePlacement === 'right') { - popper.top += offsets[0]; - popper.left += offsets[1]; - } else if (basePlacement === 'top') { - popper.left += offsets[0]; - popper.top -= offsets[1]; - } else if (basePlacement === 'bottom') { - popper.left += offsets[0]; - popper.top += offsets[1]; - } - - data.popper = popper; - return data; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function preventOverflow(data, options) { - var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); - - // If offsetParent is the reference element, we really want to - // go one step up and use the next offsetParent as reference to - // avoid to make this modifier completely useless and look like broken - if (data.instance.reference === boundariesElement) { - boundariesElement = getOffsetParent(boundariesElement); - } - - // NOTE: DOM access here - // resets the popper's position so that the document size can be calculated excluding - // the size of the popper element itself - var transformProp = getSupportedPropertyName('transform'); - var popperStyles = data.instance.popper.style; // assignment to help minification - var top = popperStyles.top, - left = popperStyles.left, - transform = popperStyles[transformProp]; - - popperStyles.top = ''; - popperStyles.left = ''; - popperStyles[transformProp] = ''; - - var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); - - // NOTE: DOM access here - // restores the original style properties after the offsets have been computed - popperStyles.top = top; - popperStyles.left = left; - popperStyles[transformProp] = transform; - - options.boundaries = boundaries; - - var order = options.priority; - var popper = data.offsets.popper; - - var check = { - primary: function primary(placement) { - var value = popper[placement]; - if (popper[placement] < boundaries[placement] && !options.escapeWithReference) { - value = Math.max(popper[placement], boundaries[placement]); - } - return defineProperty({}, placement, value); - }, - secondary: function secondary(placement) { - var mainSide = placement === 'right' ? 'left' : 'top'; - var value = popper[mainSide]; - if (popper[placement] > boundaries[placement] && !options.escapeWithReference) { - value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height)); - } - return defineProperty({}, mainSide, value); - } - }; - - order.forEach(function (placement) { - var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary'; - popper = _extends({}, popper, check[side](placement)); - }); - - data.offsets.popper = popper; - - return data; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function shift(data) { - var placement = data.placement; - var basePlacement = placement.split('-')[0]; - var shiftvariation = placement.split('-')[1]; - - // if shift shiftvariation is specified, run the modifier - if (shiftvariation) { - var _data$offsets = data.offsets, - reference = _data$offsets.reference, - popper = _data$offsets.popper; - - var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1; - var side = isVertical ? 'left' : 'top'; - var measurement = isVertical ? 'width' : 'height'; - - var shiftOffsets = { - start: defineProperty({}, side, reference[side]), - end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement]) - }; - - data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]); - } - - return data; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function hide(data) { - if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) { - return data; - } - - var refRect = data.offsets.reference; - var bound = find(data.instance.modifiers, function (modifier) { - return modifier.name === 'preventOverflow'; - }).boundaries; - - if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) { - // Avoid unnecessary DOM access if visibility hasn't changed - if (data.hide === true) { - return data; - } - - data.hide = true; - data.attributes['x-out-of-boundaries'] = ''; - } else { - // Avoid unnecessary DOM access if visibility hasn't changed - if (data.hide === false) { - return data; - } - - data.hide = false; - data.attributes['x-out-of-boundaries'] = false; - } - - return data; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function inner(data) { - var placement = data.placement; - var basePlacement = placement.split('-')[0]; - var _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - - var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1; - - var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1; - - popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0); - - data.placement = getOppositePlacement(placement); - data.offsets.popper = getClientRect(popper); - - return data; - } - - /** - * Modifier function, each modifier can have a function of this type assigned - * to its `fn` property.
- * These functions will be called on each update, this means that you must - * make sure they are performant enough to avoid performance bottlenecks. - * - * @function ModifierFn - * @argument {dataObject} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {dataObject} The data object, properly modified - */ - - /** - * Modifiers are plugins used to alter the behavior of your poppers.
- * Popper.js uses a set of 9 modifiers to provide all the basic functionalities - * needed by the library. - * - * Usually you don't want to override the `order`, `fn` and `onLoad` props. - * All the other properties are configurations that could be tweaked. - * @namespace modifiers - */ - var modifiers = { - /** - * Modifier used to shift the popper on the start or end of its reference - * element.
- * It will read the variation of the `placement` property.
- * It can be one either `-end` or `-start`. - * @memberof modifiers - * @inner - */ - shift: { - /** @prop {number} order=100 - Index used to define the order of execution */ - order: 100, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: shift - }, - - /** - * The `offset` modifier can shift your popper on both its axis. - * - * It accepts the following units: - * - `px` or unit-less, interpreted as pixels - * - `%` or `%r`, percentage relative to the length of the reference element - * - `%p`, percentage relative to the length of the popper element - * - `vw`, CSS viewport width unit - * - `vh`, CSS viewport height unit - * - * For length is intended the main axis relative to the placement of the popper.
- * This means that if the placement is `top` or `bottom`, the length will be the - * `width`. In case of `left` or `right`, it will be the `height`. - * - * You can provide a single value (as `Number` or `String`), or a pair of values - * as `String` divided by a comma or one (or more) white spaces.
- * The latter is a deprecated method because it leads to confusion and will be - * removed in v2.
- * Additionally, it accepts additions and subtractions between different units. - * Note that multiplications and divisions aren't supported. - * - * Valid examples are: - * ``` - * 10 - * '10%' - * '10, 10' - * '10%, 10' - * '10 + 10%' - * '10 - 5vh + 3%' - * '-10px + 5vh, 5px - 6%' - * ``` - * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap - * > with their reference element, unfortunately, you will have to disable the `flip` modifier. - * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373). - * - * @memberof modifiers - * @inner - */ - offset: { - /** @prop {number} order=200 - Index used to define the order of execution */ - order: 200, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: offset, - /** @prop {Number|String} offset=0 - * The offset value as described in the modifier description - */ - offset: 0 - }, - - /** - * Modifier used to prevent the popper from being positioned outside the boundary. - * - * A scenario exists where the reference itself is not within the boundaries.
- * We can say it has "escaped the boundaries" — or just "escaped".
- * In this case we need to decide whether the popper should either: - * - * - detach from the reference and remain "trapped" in the boundaries, or - * - if it should ignore the boundary and "escape with its reference" - * - * When `escapeWithReference` is set to`true` and reference is completely - * outside its boundaries, the popper will overflow (or completely leave) - * the boundaries in order to remain attached to the edge of the reference. - * - * @memberof modifiers - * @inner - */ - preventOverflow: { - /** @prop {number} order=300 - Index used to define the order of execution */ - order: 300, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: preventOverflow, - /** - * @prop {Array} [priority=['left','right','top','bottom']] - * Popper will try to prevent overflow following these priorities by default, - * then, it could overflow on the left and on top of the `boundariesElement` - */ - priority: ['left', 'right', 'top', 'bottom'], - /** - * @prop {number} padding=5 - * Amount of pixel used to define a minimum distance between the boundaries - * and the popper. This makes sure the popper always has a little padding - * between the edges of its container - */ - padding: 5, - /** - * @prop {String|HTMLElement} boundariesElement='scrollParent' - * Boundaries used by the modifier. Can be `scrollParent`, `window`, - * `viewport` or any DOM element. - */ - boundariesElement: 'scrollParent' - }, - - /** - * Modifier used to make sure the reference and its popper stay near each other - * without leaving any gap between the two. Especially useful when the arrow is - * enabled and you want to ensure that it points to its reference element. - * It cares only about the first axis. You can still have poppers with margin - * between the popper and its reference element. - * @memberof modifiers - * @inner - */ - keepTogether: { - /** @prop {number} order=400 - Index used to define the order of execution */ - order: 400, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: keepTogether - }, - - /** - * This modifier is used to move the `arrowElement` of the popper to make - * sure it is positioned between the reference element and its popper element. - * It will read the outer size of the `arrowElement` node to detect how many - * pixels of conjunction are needed. - * - * It has no effect if no `arrowElement` is provided. - * @memberof modifiers - * @inner - */ - arrow: { - /** @prop {number} order=500 - Index used to define the order of execution */ - order: 500, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: arrow, - /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */ - element: '[x-arrow]' - }, - - /** - * Modifier used to flip the popper's placement when it starts to overlap its - * reference element. - * - * Requires the `preventOverflow` modifier before it in order to work. - * - * **NOTE:** this modifier will interrupt the current update cycle and will - * restart it if it detects the need to flip the placement. - * @memberof modifiers - * @inner - */ - flip: { - /** @prop {number} order=600 - Index used to define the order of execution */ - order: 600, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: flip, - /** - * @prop {String|Array} behavior='flip' - * The behavior used to change the popper's placement. It can be one of - * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid - * placements (with optional variations) - */ - behavior: 'flip', - /** - * @prop {number} padding=5 - * The popper will flip if it hits the edges of the `boundariesElement` - */ - padding: 5, - /** - * @prop {String|HTMLElement} boundariesElement='viewport' - * The element which will define the boundaries of the popper position. - * The popper will never be placed outside of the defined boundaries - * (except if `keepTogether` is enabled) - */ - boundariesElement: 'viewport' - }, - - /** - * Modifier used to make the popper flow toward the inner of the reference element. - * By default, when this modifier is disabled, the popper will be placed outside - * the reference element. - * @memberof modifiers - * @inner - */ - inner: { - /** @prop {number} order=700 - Index used to define the order of execution */ - order: 700, - /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */ - enabled: false, - /** @prop {ModifierFn} */ - fn: inner - }, - - /** - * Modifier used to hide the popper when its reference element is outside of the - * popper boundaries. It will set a `x-out-of-boundaries` attribute which can - * be used to hide with a CSS selector the popper when its reference is - * out of boundaries. - * - * Requires the `preventOverflow` modifier before it in order to work. - * @memberof modifiers - * @inner - */ - hide: { - /** @prop {number} order=800 - Index used to define the order of execution */ - order: 800, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: hide - }, - - /** - * Computes the style that will be applied to the popper element to gets - * properly positioned. - * - * Note that this modifier will not touch the DOM, it just prepares the styles - * so that `applyStyle` modifier can apply it. This separation is useful - * in case you need to replace `applyStyle` with a custom implementation. - * - * This modifier has `850` as `order` value to maintain backward compatibility - * with previous versions of Popper.js. Expect the modifiers ordering method - * to change in future major versions of the library. - * - * @memberof modifiers - * @inner - */ - computeStyle: { - /** @prop {number} order=850 - Index used to define the order of execution */ - order: 850, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: computeStyle, - /** - * @prop {Boolean} gpuAcceleration=true - * If true, it uses the CSS 3D transformation to position the popper. - * Otherwise, it will use the `top` and `left` properties - */ - gpuAcceleration: true, - /** - * @prop {string} [x='bottom'] - * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. - * Change this if your popper should grow in a direction different from `bottom` - */ - x: 'bottom', - /** - * @prop {string} [x='left'] - * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. - * Change this if your popper should grow in a direction different from `right` - */ - y: 'right' - }, - - /** - * Applies the computed styles to the popper element. - * - * All the DOM manipulations are limited to this modifier. This is useful in case - * you want to integrate Popper.js inside a framework or view library and you - * want to delegate all the DOM manipulations to it. - * - * Note that if you disable this modifier, you must make sure the popper element - * has its position set to `absolute` before Popper.js can do its work! - * - * Just disable this modifier and define your own to achieve the desired effect. - * - * @memberof modifiers - * @inner - */ - applyStyle: { - /** @prop {number} order=900 - Index used to define the order of execution */ - order: 900, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: applyStyle, - /** @prop {Function} */ - onLoad: applyStyleOnLoad, - /** - * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier - * @prop {Boolean} gpuAcceleration=true - * If true, it uses the CSS 3D transformation to position the popper. - * Otherwise, it will use the `top` and `left` properties - */ - gpuAcceleration: undefined - } - }; - - /** - * The `dataObject` is an object containing all the information used by Popper.js. - * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks. - * @name dataObject - * @property {Object} data.instance The Popper.js instance - * @property {String} data.placement Placement applied to popper - * @property {String} data.originalPlacement Placement originally defined on init - * @property {Boolean} data.flipped True if popper has been flipped by flip modifier - * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper - * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier - * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`) - * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`) - * @property {Object} data.boundaries Offsets of the popper boundaries - * @property {Object} data.offsets The measurements of popper, reference and arrow elements - * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values - * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values - * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0 - */ - - /** - * Default options provided to Popper.js constructor.
- * These can be overridden using the `options` argument of Popper.js.
- * To override an option, simply pass an object with the same - * structure of the `options` object, as the 3rd argument. For example: - * ``` - * new Popper(ref, pop, { - * modifiers: { - * preventOverflow: { enabled: false } - * } - * }) - * ``` - * @type {Object} - * @static - * @memberof Popper - */ - var Defaults = { - /** - * Popper's placement. - * @prop {Popper.placements} placement='bottom' - */ - placement: 'bottom', - - /** - * Set this to true if you want popper to position it self in 'fixed' mode - * @prop {Boolean} positionFixed=false - */ - positionFixed: false, - - /** - * Whether events (resize, scroll) are initially enabled. - * @prop {Boolean} eventsEnabled=true - */ - eventsEnabled: true, - - /** - * Set to true if you want to automatically remove the popper when - * you call the `destroy` method. - * @prop {Boolean} removeOnDestroy=false - */ - removeOnDestroy: false, - - /** - * Callback called when the popper is created.
- * By default, it is set to no-op.
- * Access Popper.js instance with `data.instance`. - * @prop {onCreate} - */ - onCreate: function onCreate() {}, - - /** - * Callback called when the popper is updated. This callback is not called - * on the initialization/creation of the popper, but only on subsequent - * updates.
- * By default, it is set to no-op.
- * Access Popper.js instance with `data.instance`. - * @prop {onUpdate} - */ - onUpdate: function onUpdate() {}, - - /** - * List of modifiers used to modify the offsets before they are applied to the popper. - * They provide most of the functionalities of Popper.js. - * @prop {modifiers} - */ - modifiers: modifiers - }; - - /** - * @callback onCreate - * @param {dataObject} data - */ - - /** - * @callback onUpdate - * @param {dataObject} data - */ - - // Utils - // Methods - var Popper = function () { - /** - * Creates a new Popper.js instance. - * @class Popper - * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper - * @param {HTMLElement} popper - The HTML element used as the popper - * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) - * @return {Object} instance - The generated Popper.js instance - */ - function Popper(reference, popper) { - var _this = this; - - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - classCallCheck(this, Popper); - - this.scheduleUpdate = function () { - return requestAnimationFrame(_this.update); - }; - - // make update() debounced, so that it only runs at most once-per-tick - this.update = debounce(this.update.bind(this)); - - // with {} we create a new object with the options inside it - this.options = _extends({}, Popper.Defaults, options); - - // init state - this.state = { - isDestroyed: false, - isCreated: false, - scrollParents: [] - }; - - // get reference and popper elements (allow jQuery wrappers) - this.reference = reference && reference.jquery ? reference[0] : reference; - this.popper = popper && popper.jquery ? popper[0] : popper; - - // Deep merge modifiers options - this.options.modifiers = {}; - Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) { - _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {}); - }); - - // Refactoring modifiers' list (Object => Array) - this.modifiers = Object.keys(this.options.modifiers).map(function (name) { - return _extends({ - name: name - }, _this.options.modifiers[name]); - }) - // sort the modifiers by order - .sort(function (a, b) { - return a.order - b.order; - }); - - // modifiers have the ability to execute arbitrary code when Popper.js get inited - // such code is executed in the same order of its modifier - // they could add new properties to their options configuration - // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`! - this.modifiers.forEach(function (modifierOptions) { - if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) { - modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state); - } - }); - - // fire the first update to position the popper in the right place - this.update(); - - var eventsEnabled = this.options.eventsEnabled; - if (eventsEnabled) { - // setup event listeners, they will take care of update the position in specific situations - this.enableEventListeners(); - } - - this.state.eventsEnabled = eventsEnabled; - } - - // We can't use class properties because they don't get listed in the - // class prototype and break stuff like Sinon stubs - - - createClass(Popper, [{ - key: 'update', - value: function update$$1() { - return update.call(this); - } - }, { - key: 'destroy', - value: function destroy$$1() { - return destroy.call(this); - } - }, { - key: 'enableEventListeners', - value: function enableEventListeners$$1() { - return enableEventListeners.call(this); - } - }, { - key: 'disableEventListeners', - value: function disableEventListeners$$1() { - return disableEventListeners.call(this); - } - - /** - * Schedules an update. It will run on the next UI update available. - * @method scheduleUpdate - * @memberof Popper - */ - - - /** - * Collection of utilities useful when writing custom modifiers. - * Starting from version 1.7, this method is available only if you - * include `popper-utils.js` before `popper.js`. - * - * **DEPRECATION**: This way to access PopperUtils is deprecated - * and will be removed in v2! Use the PopperUtils module directly instead. - * Due to the high instability of the methods contained in Utils, we can't - * guarantee them to follow semver. Use them at your own risk! - * @static - * @private - * @type {Object} - * @deprecated since version 1.8 - * @member Utils - * @memberof Popper - */ - - }]); - return Popper; - }(); - - /** - * The `referenceObject` is an object that provides an interface compatible with Popper.js - * and lets you use it as replacement of a real DOM node.
- * You can use this method to position a popper relatively to a set of coordinates - * in case you don't have a DOM node to use as reference. - * - * ``` - * new Popper(referenceObject, popperNode); - * ``` - * - * NB: This feature isn't supported in Internet Explorer 10. - * @name referenceObject - * @property {Function} data.getBoundingClientRect - * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method. - * @property {number} data.clientWidth - * An ES6 getter that will return the width of the virtual reference element. - * @property {number} data.clientHeight - * An ES6 getter that will return the height of the virtual reference element. - */ - - - Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils; - Popper.placements = placements; - Popper.Defaults = Defaults; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$4 = 'dropdown'; - var VERSION$4 = '4.3.1'; - var DATA_KEY$4 = 'bs.dropdown'; - var EVENT_KEY$4 = "." + DATA_KEY$4; - var DATA_API_KEY$4 = '.data-api'; - var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4]; - var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key - - var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key - - var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key - - var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key - - var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key - - var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) - - var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); - var Event$4 = { - HIDE: "hide" + EVENT_KEY$4, - HIDDEN: "hidden" + EVENT_KEY$4, - SHOW: "show" + EVENT_KEY$4, - SHOWN: "shown" + EVENT_KEY$4, - CLICK: "click" + EVENT_KEY$4, - CLICK_DATA_API: "click" + EVENT_KEY$4 + DATA_API_KEY$4, - KEYDOWN_DATA_API: "keydown" + EVENT_KEY$4 + DATA_API_KEY$4, - KEYUP_DATA_API: "keyup" + EVENT_KEY$4 + DATA_API_KEY$4 - }; - var ClassName$4 = { - DISABLED: 'disabled', - SHOW: 'show', - DROPUP: 'dropup', - DROPRIGHT: 'dropright', - DROPLEFT: 'dropleft', - MENURIGHT: 'dropdown-menu-right', - MENULEFT: 'dropdown-menu-left', - POSITION_STATIC: 'position-static' - }; - var Selector$4 = { - DATA_TOGGLE: '[data-toggle="dropdown"]', - FORM_CHILD: '.dropdown form', - MENU: '.dropdown-menu', - NAVBAR_NAV: '.navbar-nav', - VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' - }; - var AttachmentMap = { - TOP: 'top-start', - TOPEND: 'top-end', - BOTTOM: 'bottom-start', - BOTTOMEND: 'bottom-end', - RIGHT: 'right-start', - RIGHTEND: 'right-end', - LEFT: 'left-start', - LEFTEND: 'left-end' - }; - var Default$2 = { - offset: 0, - flip: true, - boundary: 'scrollParent', - reference: 'toggle', - display: 'dynamic' - }; - var DefaultType$2 = { - offset: '(number|string|function)', - flip: 'boolean', - boundary: '(string|element)', - reference: '(string|element)', - display: 'string' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Dropdown = - /*#__PURE__*/ - function () { - function Dropdown(element, config) { - this._element = element; - this._popper = null; - this._config = this._getConfig(config); - this._menu = this._getMenuElement(); - this._inNavbar = this._detectNavbar(); - - this._addEventListeners(); - } // Getters - - - var _proto = Dropdown.prototype; - - // Public - _proto.toggle = function toggle() { - if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) { - return; - } - - var parent = Dropdown._getParentFromElement(this._element); - - var isActive = $(this._menu).hasClass(ClassName$4.SHOW); - - Dropdown._clearMenus(); - - if (isActive) { - return; - } - - var relatedTarget = { - relatedTarget: this._element - }; - var showEvent = $.Event(Event$4.SHOW, relatedTarget); - $(parent).trigger(showEvent); - - if (showEvent.isDefaultPrevented()) { - return; - } // Disable totally Popper.js for Dropdown in Navbar - - - if (!this._inNavbar) { - /** - * Check for Popper dependency - * Popper - https://popper.js.org - */ - if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)'); - } - - var referenceElement = this._element; - - if (this._config.reference === 'parent') { - referenceElement = parent; - } else if (Util.isElement(this._config.reference)) { - referenceElement = this._config.reference; // Check if it's jQuery element - - if (typeof this._config.reference.jquery !== 'undefined') { - referenceElement = this._config.reference[0]; - } - } // If boundary is not `scrollParent`, then set position to `static` - // to allow the menu to "escape" the scroll parent's boundaries - // https://github.com/twbs/bootstrap/issues/24251 - - - if (this._config.boundary !== 'scrollParent') { - $(parent).addClass(ClassName$4.POSITION_STATIC); - } - - this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); - } // If this is a touch-enabled device we add extra - // empty mouseover listeners to the body's immediate children; - // only needed because of broken event delegation on iOS - // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - - - if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) { - $(document.body).children().on('mouseover', null, $.noop); - } - - this._element.focus(); - - this._element.setAttribute('aria-expanded', true); - - $(this._menu).toggleClass(ClassName$4.SHOW); - $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget)); - }; - - _proto.show = function show() { - if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) { - return; - } - - var relatedTarget = { - relatedTarget: this._element - }; - var showEvent = $.Event(Event$4.SHOW, relatedTarget); - - var parent = Dropdown._getParentFromElement(this._element); - - $(parent).trigger(showEvent); - - if (showEvent.isDefaultPrevented()) { - return; - } - - $(this._menu).toggleClass(ClassName$4.SHOW); - $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget)); - }; - - _proto.hide = function hide() { - if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) { - return; - } - - var relatedTarget = { - relatedTarget: this._element - }; - var hideEvent = $.Event(Event$4.HIDE, relatedTarget); - - var parent = Dropdown._getParentFromElement(this._element); - - $(parent).trigger(hideEvent); - - if (hideEvent.isDefaultPrevented()) { - return; - } - - $(this._menu).toggleClass(ClassName$4.SHOW); - $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$4); - $(this._element).off(EVENT_KEY$4); - this._element = null; - this._menu = null; - - if (this._popper !== null) { - this._popper.destroy(); - - this._popper = null; - } - }; - - _proto.update = function update() { - this._inNavbar = this._detectNavbar(); - - if (this._popper !== null) { - this._popper.scheduleUpdate(); - } - } // Private - ; - - _proto._addEventListeners = function _addEventListeners() { - var _this = this; - - $(this._element).on(Event$4.CLICK, function (event) { - event.preventDefault(); - event.stopPropagation(); - - _this.toggle(); - }); - }; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config); - Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType); - return config; - }; - - _proto._getMenuElement = function _getMenuElement() { - if (!this._menu) { - var parent = Dropdown._getParentFromElement(this._element); - - if (parent) { - this._menu = parent.querySelector(Selector$4.MENU); - } - } - - return this._menu; - }; - - _proto._getPlacement = function _getPlacement() { - var $parentDropdown = $(this._element.parentNode); - var placement = AttachmentMap.BOTTOM; // Handle dropup - - if ($parentDropdown.hasClass(ClassName$4.DROPUP)) { - placement = AttachmentMap.TOP; - - if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { - placement = AttachmentMap.TOPEND; - } - } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) { - placement = AttachmentMap.RIGHT; - } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) { - placement = AttachmentMap.LEFT; - } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { - placement = AttachmentMap.BOTTOMEND; - } - - return placement; - }; - - _proto._detectNavbar = function _detectNavbar() { - return $(this._element).closest('.navbar').length > 0; - }; - - _proto._getOffset = function _getOffset() { - var _this2 = this; - - var offset = {}; - - if (typeof this._config.offset === 'function') { - offset.fn = function (data) { - data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {}); - return data; - }; - } else { - offset.offset = this._config.offset; - } - - return offset; - }; - - _proto._getPopperConfig = function _getPopperConfig() { - var popperConfig = { - placement: this._getPlacement(), - modifiers: { - offset: this._getOffset(), - flip: { - enabled: this._config.flip - }, - preventOverflow: { - boundariesElement: this._config.boundary - } - } // Disable Popper.js if we have a static display - - }; - - if (this._config.display === 'static') { - popperConfig.modifiers.applyStyle = { - enabled: false - }; - } - - return popperConfig; - } // Static - ; - - Dropdown._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$4); - - var _config = typeof config === 'object' ? config : null; - - if (!data) { - data = new Dropdown(this, _config); - $(this).data(DATA_KEY$4, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - Dropdown._clearMenus = function _clearMenus(event) { - if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { - return; - } - - var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE)); - - for (var i = 0, len = toggles.length; i < len; i++) { - var parent = Dropdown._getParentFromElement(toggles[i]); - - var context = $(toggles[i]).data(DATA_KEY$4); - var relatedTarget = { - relatedTarget: toggles[i] - }; - - if (event && event.type === 'click') { - relatedTarget.clickEvent = event; - } - - if (!context) { - continue; - } - - var dropdownMenu = context._menu; - - if (!$(parent).hasClass(ClassName$4.SHOW)) { - continue; - } - - if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) { - continue; - } - - var hideEvent = $.Event(Event$4.HIDE, relatedTarget); - $(parent).trigger(hideEvent); - - if (hideEvent.isDefaultPrevented()) { - continue; - } // If this is a touch-enabled device we remove the extra - // empty mouseover listeners we added for iOS support - - - if ('ontouchstart' in document.documentElement) { - $(document.body).children().off('mouseover', null, $.noop); - } - - toggles[i].setAttribute('aria-expanded', 'false'); - $(dropdownMenu).removeClass(ClassName$4.SHOW); - $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); - } - }; - - Dropdown._getParentFromElement = function _getParentFromElement(element) { - var parent; - var selector = Util.getSelectorFromElement(element); - - if (selector) { - parent = document.querySelector(selector); - } - - return parent || element.parentNode; - } // eslint-disable-next-line complexity - ; - - Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { - // If not input/textarea: - // - And not a key in REGEXP_KEYDOWN => not a dropdown command - // If input/textarea: - // - If space key => not a dropdown command - // - If key is other than escape - // - If key is not up or down => not a dropdown command - // - If trigger inside the menu => not a dropdown command - if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { - return; - } - - event.preventDefault(); - event.stopPropagation(); - - if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) { - return; - } - - var parent = Dropdown._getParentFromElement(this); - - var isActive = $(parent).hasClass(ClassName$4.SHOW); - - if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { - if (event.which === ESCAPE_KEYCODE) { - var toggle = parent.querySelector(Selector$4.DATA_TOGGLE); - $(toggle).trigger('focus'); - } - - $(this).trigger('click'); - return; - } - - var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS)); - - if (items.length === 0) { - return; - } - - var index = items.indexOf(event.target); - - if (event.which === ARROW_UP_KEYCODE && index > 0) { - // Up - index--; - } - - if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { - // Down - index++; - } - - if (index < 0) { - index = 0; - } - - items[index].focus(); - }; - - _createClass(Dropdown, null, [{ - key: "VERSION", - get: function get() { - return VERSION$4; - } - }, { - key: "Default", - get: function get() { - return Default$2; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType$2; - } - }]); - - return Dropdown; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + " " + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) { - event.preventDefault(); - event.stopPropagation(); - - Dropdown._jQueryInterface.call($(this), 'toggle'); - }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) { - e.stopPropagation(); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$4] = Dropdown._jQueryInterface; - $.fn[NAME$4].Constructor = Dropdown; - - $.fn[NAME$4].noConflict = function () { - $.fn[NAME$4] = JQUERY_NO_CONFLICT$4; - return Dropdown._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$5 = 'modal'; - var VERSION$5 = '4.3.1'; - var DATA_KEY$5 = 'bs.modal'; - var EVENT_KEY$5 = "." + DATA_KEY$5; - var DATA_API_KEY$5 = '.data-api'; - var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5]; - var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key - - var Default$3 = { - backdrop: true, - keyboard: true, - focus: true, - show: true - }; - var DefaultType$3 = { - backdrop: '(boolean|string)', - keyboard: 'boolean', - focus: 'boolean', - show: 'boolean' - }; - var Event$5 = { - HIDE: "hide" + EVENT_KEY$5, - HIDDEN: "hidden" + EVENT_KEY$5, - SHOW: "show" + EVENT_KEY$5, - SHOWN: "shown" + EVENT_KEY$5, - FOCUSIN: "focusin" + EVENT_KEY$5, - RESIZE: "resize" + EVENT_KEY$5, - CLICK_DISMISS: "click.dismiss" + EVENT_KEY$5, - KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY$5, - MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY$5, - MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY$5, - CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5 - }; - var ClassName$5 = { - SCROLLABLE: 'modal-dialog-scrollable', - SCROLLBAR_MEASURER: 'modal-scrollbar-measure', - BACKDROP: 'modal-backdrop', - OPEN: 'modal-open', - FADE: 'fade', - SHOW: 'show' - }; - var Selector$5 = { - DIALOG: '.modal-dialog', - MODAL_BODY: '.modal-body', - DATA_TOGGLE: '[data-toggle="modal"]', - DATA_DISMISS: '[data-dismiss="modal"]', - FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', - STICKY_CONTENT: '.sticky-top' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Modal = - /*#__PURE__*/ - function () { - function Modal(element, config) { - this._config = this._getConfig(config); - this._element = element; - this._dialog = element.querySelector(Selector$5.DIALOG); - this._backdrop = null; - this._isShown = false; - this._isBodyOverflowing = false; - this._ignoreBackdropClick = false; - this._isTransitioning = false; - this._scrollbarWidth = 0; - } // Getters - - - var _proto = Modal.prototype; - - // Public - _proto.toggle = function toggle(relatedTarget) { - return this._isShown ? this.hide() : this.show(relatedTarget); - }; - - _proto.show = function show(relatedTarget) { - var _this = this; - - if (this._isShown || this._isTransitioning) { - return; - } - - if ($(this._element).hasClass(ClassName$5.FADE)) { - this._isTransitioning = true; - } - - var showEvent = $.Event(Event$5.SHOW, { - relatedTarget: relatedTarget - }); - $(this._element).trigger(showEvent); - - if (this._isShown || showEvent.isDefaultPrevented()) { - return; - } - - this._isShown = true; - - this._checkScrollbar(); - - this._setScrollbar(); - - this._adjustDialog(); - - this._setEscapeEvent(); - - this._setResizeEvent(); - - $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) { - return _this.hide(event); - }); - $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () { - $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) { - if ($(event.target).is(_this._element)) { - _this._ignoreBackdropClick = true; - } - }); - }); - - this._showBackdrop(function () { - return _this._showElement(relatedTarget); - }); - }; - - _proto.hide = function hide(event) { - var _this2 = this; - - if (event) { - event.preventDefault(); - } - - if (!this._isShown || this._isTransitioning) { - return; - } - - var hideEvent = $.Event(Event$5.HIDE); - $(this._element).trigger(hideEvent); - - if (!this._isShown || hideEvent.isDefaultPrevented()) { - return; - } - - this._isShown = false; - var transition = $(this._element).hasClass(ClassName$5.FADE); - - if (transition) { - this._isTransitioning = true; - } - - this._setEscapeEvent(); - - this._setResizeEvent(); - - $(document).off(Event$5.FOCUSIN); - $(this._element).removeClass(ClassName$5.SHOW); - $(this._element).off(Event$5.CLICK_DISMISS); - $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS); - - if (transition) { - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $(this._element).one(Util.TRANSITION_END, function (event) { - return _this2._hideModal(event); - }).emulateTransitionEnd(transitionDuration); - } else { - this._hideModal(); - } - }; - - _proto.dispose = function dispose() { - [window, this._element, this._dialog].forEach(function (htmlElement) { - return $(htmlElement).off(EVENT_KEY$5); - }); - /** - * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API` - * Do not move `document` in `htmlElements` array - * It will remove `Event.CLICK_DATA_API` event that should remain - */ - - $(document).off(Event$5.FOCUSIN); - $.removeData(this._element, DATA_KEY$5); - this._config = null; - this._element = null; - this._dialog = null; - this._backdrop = null; - this._isShown = null; - this._isBodyOverflowing = null; - this._ignoreBackdropClick = null; - this._isTransitioning = null; - this._scrollbarWidth = null; - }; - - _proto.handleUpdate = function handleUpdate() { - this._adjustDialog(); - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default$3, config); - Util.typeCheckConfig(NAME$5, config, DefaultType$3); - return config; - }; - - _proto._showElement = function _showElement(relatedTarget) { - var _this3 = this; - - var transition = $(this._element).hasClass(ClassName$5.FADE); - - if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { - // Don't move modal's DOM position - document.body.appendChild(this._element); - } - - this._element.style.display = 'block'; - - this._element.removeAttribute('aria-hidden'); - - this._element.setAttribute('aria-modal', true); - - if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) { - this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0; - } else { - this._element.scrollTop = 0; - } - - if (transition) { - Util.reflow(this._element); - } - - $(this._element).addClass(ClassName$5.SHOW); - - if (this._config.focus) { - this._enforceFocus(); - } - - var shownEvent = $.Event(Event$5.SHOWN, { - relatedTarget: relatedTarget - }); - - var transitionComplete = function transitionComplete() { - if (_this3._config.focus) { - _this3._element.focus(); - } - - _this3._isTransitioning = false; - $(_this3._element).trigger(shownEvent); - }; - - if (transition) { - var transitionDuration = Util.getTransitionDurationFromElement(this._dialog); - $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); - } else { - transitionComplete(); - } - }; - - _proto._enforceFocus = function _enforceFocus() { - var _this4 = this; - - $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop - .on(Event$5.FOCUSIN, function (event) { - if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) { - _this4._element.focus(); - } - }); - }; - - _proto._setEscapeEvent = function _setEscapeEvent() { - var _this5 = this; - - if (this._isShown && this._config.keyboard) { - $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) { - if (event.which === ESCAPE_KEYCODE$1) { - event.preventDefault(); - - _this5.hide(); - } - }); - } else if (!this._isShown) { - $(this._element).off(Event$5.KEYDOWN_DISMISS); - } - }; - - _proto._setResizeEvent = function _setResizeEvent() { - var _this6 = this; - - if (this._isShown) { - $(window).on(Event$5.RESIZE, function (event) { - return _this6.handleUpdate(event); - }); - } else { - $(window).off(Event$5.RESIZE); - } - }; - - _proto._hideModal = function _hideModal() { - var _this7 = this; - - this._element.style.display = 'none'; - - this._element.setAttribute('aria-hidden', true); - - this._element.removeAttribute('aria-modal'); - - this._isTransitioning = false; - - this._showBackdrop(function () { - $(document.body).removeClass(ClassName$5.OPEN); - - _this7._resetAdjustments(); - - _this7._resetScrollbar(); - - $(_this7._element).trigger(Event$5.HIDDEN); - }); - }; - - _proto._removeBackdrop = function _removeBackdrop() { - if (this._backdrop) { - $(this._backdrop).remove(); - this._backdrop = null; - } - }; - - _proto._showBackdrop = function _showBackdrop(callback) { - var _this8 = this; - - var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : ''; - - if (this._isShown && this._config.backdrop) { - this._backdrop = document.createElement('div'); - this._backdrop.className = ClassName$5.BACKDROP; - - if (animate) { - this._backdrop.classList.add(animate); - } - - $(this._backdrop).appendTo(document.body); - $(this._element).on(Event$5.CLICK_DISMISS, function (event) { - if (_this8._ignoreBackdropClick) { - _this8._ignoreBackdropClick = false; - return; - } - - if (event.target !== event.currentTarget) { - return; - } - - if (_this8._config.backdrop === 'static') { - _this8._element.focus(); - } else { - _this8.hide(); - } - }); - - if (animate) { - Util.reflow(this._backdrop); - } - - $(this._backdrop).addClass(ClassName$5.SHOW); - - if (!callback) { - return; - } - - if (!animate) { - callback(); - return; - } - - var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); - $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); - } else if (!this._isShown && this._backdrop) { - $(this._backdrop).removeClass(ClassName$5.SHOW); - - var callbackRemove = function callbackRemove() { - _this8._removeBackdrop(); - - if (callback) { - callback(); - } - }; - - if ($(this._element).hasClass(ClassName$5.FADE)) { - var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); - - $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); - } else { - callbackRemove(); - } - } else if (callback) { - callback(); - } - } // ---------------------------------------------------------------------- - // the following methods are used to handle overflowing modals - // todo (fat): these should probably be refactored out of modal.js - // ---------------------------------------------------------------------- - ; - - _proto._adjustDialog = function _adjustDialog() { - var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; - - if (!this._isBodyOverflowing && isModalOverflowing) { - this._element.style.paddingLeft = this._scrollbarWidth + "px"; - } - - if (this._isBodyOverflowing && !isModalOverflowing) { - this._element.style.paddingRight = this._scrollbarWidth + "px"; - } - }; - - _proto._resetAdjustments = function _resetAdjustments() { - this._element.style.paddingLeft = ''; - this._element.style.paddingRight = ''; - }; - - _proto._checkScrollbar = function _checkScrollbar() { - var rect = document.body.getBoundingClientRect(); - this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; - this._scrollbarWidth = this._getScrollbarWidth(); - }; - - _proto._setScrollbar = function _setScrollbar() { - var _this9 = this; - - if (this._isBodyOverflowing) { - // Note: DOMNode.style.paddingRight returns the actual value or '' if not set - // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set - var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); - var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding - - $(fixedContent).each(function (index, element) { - var actualPadding = element.style.paddingRight; - var calculatedPadding = $(element).css('padding-right'); - $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px"); - }); // Adjust sticky content margin - - $(stickyContent).each(function (index, element) { - var actualMargin = element.style.marginRight; - var calculatedMargin = $(element).css('margin-right'); - $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px"); - }); // Adjust body padding - - var actualPadding = document.body.style.paddingRight; - var calculatedPadding = $(document.body).css('padding-right'); - $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); - } - - $(document.body).addClass(ClassName$5.OPEN); - }; - - _proto._resetScrollbar = function _resetScrollbar() { - // Restore fixed content padding - var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); - $(fixedContent).each(function (index, element) { - var padding = $(element).data('padding-right'); - $(element).removeData('padding-right'); - element.style.paddingRight = padding ? padding : ''; - }); // Restore sticky content - - var elements = [].slice.call(document.querySelectorAll("" + Selector$5.STICKY_CONTENT)); - $(elements).each(function (index, element) { - var margin = $(element).data('margin-right'); - - if (typeof margin !== 'undefined') { - $(element).css('margin-right', margin).removeData('margin-right'); - } - }); // Restore body padding - - var padding = $(document.body).data('padding-right'); - $(document.body).removeData('padding-right'); - document.body.style.paddingRight = padding ? padding : ''; - }; - - _proto._getScrollbarWidth = function _getScrollbarWidth() { - // thx d.walsh - var scrollDiv = document.createElement('div'); - scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER; - document.body.appendChild(scrollDiv); - var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; - document.body.removeChild(scrollDiv); - return scrollbarWidth; - } // Static - ; - - Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { - return this.each(function () { - var data = $(this).data(DATA_KEY$5); - - var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {}); - - if (!data) { - data = new Modal(this, _config); - $(this).data(DATA_KEY$5, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](relatedTarget); - } else if (_config.show) { - data.show(relatedTarget); - } - }); - }; - - _createClass(Modal, null, [{ - key: "VERSION", - get: function get() { - return VERSION$5; - } - }, { - key: "Default", - get: function get() { - return Default$3; - } - }]); - - return Modal; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) { - var _this10 = this; - - var target; - var selector = Util.getSelectorFromElement(this); - - if (selector) { - target = document.querySelector(selector); - } - - var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data()); - - if (this.tagName === 'A' || this.tagName === 'AREA') { - event.preventDefault(); - } - - var $target = $(target).one(Event$5.SHOW, function (showEvent) { - if (showEvent.isDefaultPrevented()) { - // Only register focus restorer if modal will actually get shown - return; - } - - $target.one(Event$5.HIDDEN, function () { - if ($(_this10).is(':visible')) { - _this10.focus(); - } - }); - }); - - Modal._jQueryInterface.call($(target), config, this); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$5] = Modal._jQueryInterface; - $.fn[NAME$5].Constructor = Modal; - - $.fn[NAME$5].noConflict = function () { - $.fn[NAME$5] = JQUERY_NO_CONFLICT$5; - return Modal._jQueryInterface; - }; - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.3.1): tools/sanitizer.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']; - var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; - var DefaultWhitelist = { - // Global attributes allowed on any supplied element below. - '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], - a: ['target', 'href', 'title', 'rel'], - area: [], - b: [], - br: [], - col: [], - code: [], - div: [], - em: [], - hr: [], - h1: [], - h2: [], - h3: [], - h4: [], - h5: [], - h6: [], - i: [], - img: ['src', 'alt', 'title', 'width', 'height'], - li: [], - ol: [], - p: [], - pre: [], - s: [], - small: [], - span: [], - sub: [], - sup: [], - strong: [], - u: [], - ul: [] - /** - * A pattern that recognizes a commonly useful subset of URLs that are safe. - * - * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts - */ - - }; - var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi; - /** - * A pattern that matches safe data URLs. Only matches image, video and audio types. - * - * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts - */ - - var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i; - - function allowedAttribute(attr, allowedAttributeList) { - var attrName = attr.nodeName.toLowerCase(); - - if (allowedAttributeList.indexOf(attrName) !== -1) { - if (uriAttrs.indexOf(attrName) !== -1) { - return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN)); - } - - return true; - } - - var regExp = allowedAttributeList.filter(function (attrRegex) { - return attrRegex instanceof RegExp; - }); // Check if a regular expression validates the attribute. - - for (var i = 0, l = regExp.length; i < l; i++) { - if (attrName.match(regExp[i])) { - return true; - } - } - - return false; - } - - function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { - if (unsafeHtml.length === 0) { - return unsafeHtml; - } - - if (sanitizeFn && typeof sanitizeFn === 'function') { - return sanitizeFn(unsafeHtml); - } - - var domParser = new window.DOMParser(); - var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); - var whitelistKeys = Object.keys(whiteList); - var elements = [].slice.call(createdDocument.body.querySelectorAll('*')); - - var _loop = function _loop(i, len) { - var el = elements[i]; - var elName = el.nodeName.toLowerCase(); - - if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { - el.parentNode.removeChild(el); - return "continue"; - } - - var attributeList = [].slice.call(el.attributes); - var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []); - attributeList.forEach(function (attr) { - if (!allowedAttribute(attr, whitelistedAttributes)) { - el.removeAttribute(attr.nodeName); - } - }); - }; - - for (var i = 0, len = elements.length; i < len; i++) { - var _ret = _loop(i, len); - - if (_ret === "continue") continue; - } - - return createdDocument.body.innerHTML; - } - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$6 = 'tooltip'; - var VERSION$6 = '4.3.1'; - var DATA_KEY$6 = 'bs.tooltip'; - var EVENT_KEY$6 = "." + DATA_KEY$6; - var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6]; - var CLASS_PREFIX = 'bs-tooltip'; - var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); - var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']; - var DefaultType$4 = { - animation: 'boolean', - template: 'string', - title: '(string|element|function)', - trigger: 'string', - delay: '(number|object)', - html: 'boolean', - selector: '(string|boolean)', - placement: '(string|function)', - offset: '(number|string|function)', - container: '(string|element|boolean)', - fallbackPlacement: '(string|array)', - boundary: '(string|element)', - sanitize: 'boolean', - sanitizeFn: '(null|function)', - whiteList: 'object' - }; - var AttachmentMap$1 = { - AUTO: 'auto', - TOP: 'top', - RIGHT: 'right', - BOTTOM: 'bottom', - LEFT: 'left' - }; - var Default$4 = { - animation: true, - template: '', - trigger: 'hover focus', - title: '', - delay: 0, - html: false, - selector: false, - placement: 'top', - offset: 0, - container: false, - fallbackPlacement: 'flip', - boundary: 'scrollParent', - sanitize: true, - sanitizeFn: null, - whiteList: DefaultWhitelist - }; - var HoverState = { - SHOW: 'show', - OUT: 'out' - }; - var Event$6 = { - HIDE: "hide" + EVENT_KEY$6, - HIDDEN: "hidden" + EVENT_KEY$6, - SHOW: "show" + EVENT_KEY$6, - SHOWN: "shown" + EVENT_KEY$6, - INSERTED: "inserted" + EVENT_KEY$6, - CLICK: "click" + EVENT_KEY$6, - FOCUSIN: "focusin" + EVENT_KEY$6, - FOCUSOUT: "focusout" + EVENT_KEY$6, - MOUSEENTER: "mouseenter" + EVENT_KEY$6, - MOUSELEAVE: "mouseleave" + EVENT_KEY$6 - }; - var ClassName$6 = { - FADE: 'fade', - SHOW: 'show' - }; - var Selector$6 = { - TOOLTIP: '.tooltip', - TOOLTIP_INNER: '.tooltip-inner', - ARROW: '.arrow' - }; - var Trigger = { - HOVER: 'hover', - FOCUS: 'focus', - CLICK: 'click', - MANUAL: 'manual' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Tooltip = - /*#__PURE__*/ - function () { - function Tooltip(element, config) { - /** - * Check for Popper dependency - * Popper - https://popper.js.org - */ - if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)'); - } // private - - - this._isEnabled = true; - this._timeout = 0; - this._hoverState = ''; - this._activeTrigger = {}; - this._popper = null; // Protected - - this.element = element; - this.config = this._getConfig(config); - this.tip = null; - - this._setListeners(); - } // Getters - - - var _proto = Tooltip.prototype; - - // Public - _proto.enable = function enable() { - this._isEnabled = true; - }; - - _proto.disable = function disable() { - this._isEnabled = false; - }; - - _proto.toggleEnabled = function toggleEnabled() { - this._isEnabled = !this._isEnabled; - }; - - _proto.toggle = function toggle(event) { - if (!this._isEnabled) { - return; - } - - if (event) { - var dataKey = this.constructor.DATA_KEY; - var context = $(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $(event.currentTarget).data(dataKey, context); - } - - context._activeTrigger.click = !context._activeTrigger.click; - - if (context._isWithActiveTrigger()) { - context._enter(null, context); - } else { - context._leave(null, context); - } - } else { - if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) { - this._leave(null, this); - - return; - } - - this._enter(null, this); - } - }; - - _proto.dispose = function dispose() { - clearTimeout(this._timeout); - $.removeData(this.element, this.constructor.DATA_KEY); - $(this.element).off(this.constructor.EVENT_KEY); - $(this.element).closest('.modal').off('hide.bs.modal'); - - if (this.tip) { - $(this.tip).remove(); - } - - this._isEnabled = null; - this._timeout = null; - this._hoverState = null; - this._activeTrigger = null; - - if (this._popper !== null) { - this._popper.destroy(); - } - - this._popper = null; - this.element = null; - this.config = null; - this.tip = null; - }; - - _proto.show = function show() { - var _this = this; - - if ($(this.element).css('display') === 'none') { - throw new Error('Please use show on visible elements'); - } - - var showEvent = $.Event(this.constructor.Event.SHOW); - - if (this.isWithContent() && this._isEnabled) { - $(this.element).trigger(showEvent); - var shadowRoot = Util.findShadowRoot(this.element); - var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); - - if (showEvent.isDefaultPrevented() || !isInTheDom) { - return; - } - - var tip = this.getTipElement(); - var tipId = Util.getUID(this.constructor.NAME); - tip.setAttribute('id', tipId); - this.element.setAttribute('aria-describedby', tipId); - this.setContent(); - - if (this.config.animation) { - $(tip).addClass(ClassName$6.FADE); - } - - var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; - - var attachment = this._getAttachment(placement); - - this.addAttachmentClass(attachment); - - var container = this._getContainer(); - - $(tip).data(this.constructor.DATA_KEY, this); - - if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) { - $(tip).appendTo(container); - } - - $(this.element).trigger(this.constructor.Event.INSERTED); - this._popper = new Popper(this.element, tip, { - placement: attachment, - modifiers: { - offset: this._getOffset(), - flip: { - behavior: this.config.fallbackPlacement - }, - arrow: { - element: Selector$6.ARROW - }, - preventOverflow: { - boundariesElement: this.config.boundary - } - }, - onCreate: function onCreate(data) { - if (data.originalPlacement !== data.placement) { - _this._handlePopperPlacementChange(data); - } - }, - onUpdate: function onUpdate(data) { - return _this._handlePopperPlacementChange(data); - } - }); - $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra - // empty mouseover listeners to the body's immediate children; - // only needed because of broken event delegation on iOS - // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - - if ('ontouchstart' in document.documentElement) { - $(document.body).children().on('mouseover', null, $.noop); - } - - var complete = function complete() { - if (_this.config.animation) { - _this._fixTransition(); - } - - var prevHoverState = _this._hoverState; - _this._hoverState = null; - $(_this.element).trigger(_this.constructor.Event.SHOWN); - - if (prevHoverState === HoverState.OUT) { - _this._leave(null, _this); - } - }; - - if ($(this.tip).hasClass(ClassName$6.FADE)) { - var transitionDuration = Util.getTransitionDurationFromElement(this.tip); - $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - } else { - complete(); - } - } - }; - - _proto.hide = function hide(callback) { - var _this2 = this; - - var tip = this.getTipElement(); - var hideEvent = $.Event(this.constructor.Event.HIDE); - - var complete = function complete() { - if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) { - tip.parentNode.removeChild(tip); - } - - _this2._cleanTipClass(); - - _this2.element.removeAttribute('aria-describedby'); - - $(_this2.element).trigger(_this2.constructor.Event.HIDDEN); - - if (_this2._popper !== null) { - _this2._popper.destroy(); - } - - if (callback) { - callback(); - } - }; - - $(this.element).trigger(hideEvent); - - if (hideEvent.isDefaultPrevented()) { - return; - } - - $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra - // empty mouseover listeners we added for iOS support - - if ('ontouchstart' in document.documentElement) { - $(document.body).children().off('mouseover', null, $.noop); - } - - this._activeTrigger[Trigger.CLICK] = false; - this._activeTrigger[Trigger.FOCUS] = false; - this._activeTrigger[Trigger.HOVER] = false; - - if ($(this.tip).hasClass(ClassName$6.FADE)) { - var transitionDuration = Util.getTransitionDurationFromElement(tip); - $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - } else { - complete(); - } - - this._hoverState = ''; - }; - - _proto.update = function update() { - if (this._popper !== null) { - this._popper.scheduleUpdate(); - } - } // Protected - ; - - _proto.isWithContent = function isWithContent() { - return Boolean(this.getTitle()); - }; - - _proto.addAttachmentClass = function addAttachmentClass(attachment) { - $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); - }; - - _proto.getTipElement = function getTipElement() { - this.tip = this.tip || $(this.config.template)[0]; - return this.tip; - }; - - _proto.setContent = function setContent() { - var tip = this.getTipElement(); - this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle()); - $(tip).removeClass(ClassName$6.FADE + " " + ClassName$6.SHOW); - }; - - _proto.setElementContent = function setElementContent($element, content) { - if (typeof content === 'object' && (content.nodeType || content.jquery)) { - // Content is a DOM node or a jQuery - if (this.config.html) { - if (!$(content).parent().is($element)) { - $element.empty().append(content); - } - } else { - $element.text($(content).text()); - } - - return; - } - - if (this.config.html) { - if (this.config.sanitize) { - content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn); - } - - $element.html(content); - } else { - $element.text(content); - } - }; - - _proto.getTitle = function getTitle() { - var title = this.element.getAttribute('data-original-title'); - - if (!title) { - title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; - } - - return title; - } // Private - ; - - _proto._getOffset = function _getOffset() { - var _this3 = this; - - var offset = {}; - - if (typeof this.config.offset === 'function') { - offset.fn = function (data) { - data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {}); - return data; - }; - } else { - offset.offset = this.config.offset; - } - - return offset; - }; - - _proto._getContainer = function _getContainer() { - if (this.config.container === false) { - return document.body; - } - - if (Util.isElement(this.config.container)) { - return $(this.config.container); - } - - return $(document).find(this.config.container); - }; - - _proto._getAttachment = function _getAttachment(placement) { - return AttachmentMap$1[placement.toUpperCase()]; - }; - - _proto._setListeners = function _setListeners() { - var _this4 = this; - - var triggers = this.config.trigger.split(' '); - triggers.forEach(function (trigger) { - if (trigger === 'click') { - $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) { - return _this4.toggle(event); - }); - } else if (trigger !== Trigger.MANUAL) { - var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN; - var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT; - $(_this4.element).on(eventIn, _this4.config.selector, function (event) { - return _this4._enter(event); - }).on(eventOut, _this4.config.selector, function (event) { - return _this4._leave(event); - }); - } - }); - $(this.element).closest('.modal').on('hide.bs.modal', function () { - if (_this4.element) { - _this4.hide(); - } - }); - - if (this.config.selector) { - this.config = _objectSpread({}, this.config, { - trigger: 'manual', - selector: '' - }); - } else { - this._fixTitle(); - } - }; - - _proto._fixTitle = function _fixTitle() { - var titleType = typeof this.element.getAttribute('data-original-title'); - - if (this.element.getAttribute('title') || titleType !== 'string') { - this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); - this.element.setAttribute('title', ''); - } - }; - - _proto._enter = function _enter(event, context) { - var dataKey = this.constructor.DATA_KEY; - context = context || $(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $(event.currentTarget).data(dataKey, context); - } - - if (event) { - context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; - } - - if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) { - context._hoverState = HoverState.SHOW; - return; - } - - clearTimeout(context._timeout); - context._hoverState = HoverState.SHOW; - - if (!context.config.delay || !context.config.delay.show) { - context.show(); - return; - } - - context._timeout = setTimeout(function () { - if (context._hoverState === HoverState.SHOW) { - context.show(); - } - }, context.config.delay.show); - }; - - _proto._leave = function _leave(event, context) { - var dataKey = this.constructor.DATA_KEY; - context = context || $(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $(event.currentTarget).data(dataKey, context); - } - - if (event) { - context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; - } - - if (context._isWithActiveTrigger()) { - return; - } - - clearTimeout(context._timeout); - context._hoverState = HoverState.OUT; - - if (!context.config.delay || !context.config.delay.hide) { - context.hide(); - return; - } - - context._timeout = setTimeout(function () { - if (context._hoverState === HoverState.OUT) { - context.hide(); - } - }, context.config.delay.hide); - }; - - _proto._isWithActiveTrigger = function _isWithActiveTrigger() { - for (var trigger in this._activeTrigger) { - if (this._activeTrigger[trigger]) { - return true; - } - } - - return false; - }; - - _proto._getConfig = function _getConfig(config) { - var dataAttributes = $(this.element).data(); - Object.keys(dataAttributes).forEach(function (dataAttr) { - if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) { - delete dataAttributes[dataAttr]; - } - }); - config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {}); - - if (typeof config.delay === 'number') { - config.delay = { - show: config.delay, - hide: config.delay - }; - } - - if (typeof config.title === 'number') { - config.title = config.title.toString(); - } - - if (typeof config.content === 'number') { - config.content = config.content.toString(); - } - - Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType); - - if (config.sanitize) { - config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn); - } - - return config; - }; - - _proto._getDelegateConfig = function _getDelegateConfig() { - var config = {}; - - if (this.config) { - for (var key in this.config) { - if (this.constructor.Default[key] !== this.config[key]) { - config[key] = this.config[key]; - } - } - } - - return config; - }; - - _proto._cleanTipClass = function _cleanTipClass() { - var $tip = $(this.getTipElement()); - var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); - - if (tabClass !== null && tabClass.length) { - $tip.removeClass(tabClass.join('')); - } - }; - - _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { - var popperInstance = popperData.instance; - this.tip = popperInstance.popper; - - this._cleanTipClass(); - - this.addAttachmentClass(this._getAttachment(popperData.placement)); - }; - - _proto._fixTransition = function _fixTransition() { - var tip = this.getTipElement(); - var initConfigAnimation = this.config.animation; - - if (tip.getAttribute('x-placement') !== null) { - return; - } - - $(tip).removeClass(ClassName$6.FADE); - this.config.animation = false; - this.hide(); - this.show(); - this.config.animation = initConfigAnimation; - } // Static - ; - - Tooltip._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$6); - - var _config = typeof config === 'object' && config; - - if (!data && /dispose|hide/.test(config)) { - return; - } - - if (!data) { - data = new Tooltip(this, _config); - $(this).data(DATA_KEY$6, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - _createClass(Tooltip, null, [{ - key: "VERSION", - get: function get() { - return VERSION$6; - } - }, { - key: "Default", - get: function get() { - return Default$4; - } - }, { - key: "NAME", - get: function get() { - return NAME$6; - } - }, { - key: "DATA_KEY", - get: function get() { - return DATA_KEY$6; - } - }, { - key: "Event", - get: function get() { - return Event$6; - } - }, { - key: "EVENT_KEY", - get: function get() { - return EVENT_KEY$6; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType$4; - } - }]); - - return Tooltip; - }(); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - - $.fn[NAME$6] = Tooltip._jQueryInterface; - $.fn[NAME$6].Constructor = Tooltip; - - $.fn[NAME$6].noConflict = function () { - $.fn[NAME$6] = JQUERY_NO_CONFLICT$6; - return Tooltip._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$7 = 'popover'; - var VERSION$7 = '4.3.1'; - var DATA_KEY$7 = 'bs.popover'; - var EVENT_KEY$7 = "." + DATA_KEY$7; - var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7]; - var CLASS_PREFIX$1 = 'bs-popover'; - var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g'); - - var Default$5 = _objectSpread({}, Tooltip.Default, { - placement: 'right', - trigger: 'click', - content: '', - template: '' - }); - - var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, { - content: '(string|element|function)' - }); - - var ClassName$7 = { - FADE: 'fade', - SHOW: 'show' - }; - var Selector$7 = { - TITLE: '.popover-header', - CONTENT: '.popover-body' - }; - var Event$7 = { - HIDE: "hide" + EVENT_KEY$7, - HIDDEN: "hidden" + EVENT_KEY$7, - SHOW: "show" + EVENT_KEY$7, - SHOWN: "shown" + EVENT_KEY$7, - INSERTED: "inserted" + EVENT_KEY$7, - CLICK: "click" + EVENT_KEY$7, - FOCUSIN: "focusin" + EVENT_KEY$7, - FOCUSOUT: "focusout" + EVENT_KEY$7, - MOUSEENTER: "mouseenter" + EVENT_KEY$7, - MOUSELEAVE: "mouseleave" + EVENT_KEY$7 - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Popover = - /*#__PURE__*/ - function (_Tooltip) { - _inheritsLoose(Popover, _Tooltip); - - function Popover() { - return _Tooltip.apply(this, arguments) || this; - } - - var _proto = Popover.prototype; - - // Overrides - _proto.isWithContent = function isWithContent() { - return this.getTitle() || this._getContent(); - }; - - _proto.addAttachmentClass = function addAttachmentClass(attachment) { - $(this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment); - }; - - _proto.getTipElement = function getTipElement() { - this.tip = this.tip || $(this.config.template)[0]; - return this.tip; - }; - - _proto.setContent = function setContent() { - var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events - - this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle()); - - var content = this._getContent(); - - if (typeof content === 'function') { - content = content.call(this.element); - } - - this.setElementContent($tip.find(Selector$7.CONTENT), content); - $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW); - } // Private - ; - - _proto._getContent = function _getContent() { - return this.element.getAttribute('data-content') || this.config.content; - }; - - _proto._cleanTipClass = function _cleanTipClass() { - var $tip = $(this.getTipElement()); - var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1); - - if (tabClass !== null && tabClass.length > 0) { - $tip.removeClass(tabClass.join('')); - } - } // Static - ; - - Popover._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$7); - - var _config = typeof config === 'object' ? config : null; - - if (!data && /dispose|hide/.test(config)) { - return; - } - - if (!data) { - data = new Popover(this, _config); - $(this).data(DATA_KEY$7, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - _createClass(Popover, null, [{ - key: "VERSION", - // Getters - get: function get() { - return VERSION$7; - } - }, { - key: "Default", - get: function get() { - return Default$5; - } - }, { - key: "NAME", - get: function get() { - return NAME$7; - } - }, { - key: "DATA_KEY", - get: function get() { - return DATA_KEY$7; - } - }, { - key: "Event", - get: function get() { - return Event$7; - } - }, { - key: "EVENT_KEY", - get: function get() { - return EVENT_KEY$7; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType$5; - } - }]); - - return Popover; - }(Tooltip); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - - $.fn[NAME$7] = Popover._jQueryInterface; - $.fn[NAME$7].Constructor = Popover; - - $.fn[NAME$7].noConflict = function () { - $.fn[NAME$7] = JQUERY_NO_CONFLICT$7; - return Popover._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$8 = 'scrollspy'; - var VERSION$8 = '4.3.1'; - var DATA_KEY$8 = 'bs.scrollspy'; - var EVENT_KEY$8 = "." + DATA_KEY$8; - var DATA_API_KEY$6 = '.data-api'; - var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8]; - var Default$6 = { - offset: 10, - method: 'auto', - target: '' - }; - var DefaultType$6 = { - offset: 'number', - method: 'string', - target: '(string|element)' - }; - var Event$8 = { - ACTIVATE: "activate" + EVENT_KEY$8, - SCROLL: "scroll" + EVENT_KEY$8, - LOAD_DATA_API: "load" + EVENT_KEY$8 + DATA_API_KEY$6 - }; - var ClassName$8 = { - DROPDOWN_ITEM: 'dropdown-item', - DROPDOWN_MENU: 'dropdown-menu', - ACTIVE: 'active' - }; - var Selector$8 = { - DATA_SPY: '[data-spy="scroll"]', - ACTIVE: '.active', - NAV_LIST_GROUP: '.nav, .list-group', - NAV_LINKS: '.nav-link', - NAV_ITEMS: '.nav-item', - LIST_ITEMS: '.list-group-item', - DROPDOWN: '.dropdown', - DROPDOWN_ITEMS: '.dropdown-item', - DROPDOWN_TOGGLE: '.dropdown-toggle' - }; - var OffsetMethod = { - OFFSET: 'offset', - POSITION: 'position' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var ScrollSpy = - /*#__PURE__*/ - function () { - function ScrollSpy(element, config) { - var _this = this; - - this._element = element; - this._scrollElement = element.tagName === 'BODY' ? window : element; - this._config = this._getConfig(config); - this._selector = this._config.target + " " + Selector$8.NAV_LINKS + "," + (this._config.target + " " + Selector$8.LIST_ITEMS + ",") + (this._config.target + " " + Selector$8.DROPDOWN_ITEMS); - this._offsets = []; - this._targets = []; - this._activeTarget = null; - this._scrollHeight = 0; - $(this._scrollElement).on(Event$8.SCROLL, function (event) { - return _this._process(event); - }); - this.refresh(); - - this._process(); - } // Getters - - - var _proto = ScrollSpy.prototype; - - // Public - _proto.refresh = function refresh() { - var _this2 = this; - - var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION; - var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; - var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; - this._offsets = []; - this._targets = []; - this._scrollHeight = this._getScrollHeight(); - var targets = [].slice.call(document.querySelectorAll(this._selector)); - targets.map(function (element) { - var target; - var targetSelector = Util.getSelectorFromElement(element); - - if (targetSelector) { - target = document.querySelector(targetSelector); - } - - if (target) { - var targetBCR = target.getBoundingClientRect(); - - if (targetBCR.width || targetBCR.height) { - // TODO (fat): remove sketch reliance on jQuery position/offset - return [$(target)[offsetMethod]().top + offsetBase, targetSelector]; - } - } - - return null; - }).filter(function (item) { - return item; - }).sort(function (a, b) { - return a[0] - b[0]; - }).forEach(function (item) { - _this2._offsets.push(item[0]); - - _this2._targets.push(item[1]); - }); - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$8); - $(this._scrollElement).off(EVENT_KEY$8); - this._element = null; - this._scrollElement = null; - this._config = null; - this._selector = null; - this._offsets = null; - this._targets = null; - this._activeTarget = null; - this._scrollHeight = null; - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {}); - - if (typeof config.target !== 'string') { - var id = $(config.target).attr('id'); - - if (!id) { - id = Util.getUID(NAME$8); - $(config.target).attr('id', id); - } - - config.target = "#" + id; - } - - Util.typeCheckConfig(NAME$8, config, DefaultType$6); - return config; - }; - - _proto._getScrollTop = function _getScrollTop() { - return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; - }; - - _proto._getScrollHeight = function _getScrollHeight() { - return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); - }; - - _proto._getOffsetHeight = function _getOffsetHeight() { - return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; - }; - - _proto._process = function _process() { - var scrollTop = this._getScrollTop() + this._config.offset; - - var scrollHeight = this._getScrollHeight(); - - var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); - - if (this._scrollHeight !== scrollHeight) { - this.refresh(); - } - - if (scrollTop >= maxScroll) { - var target = this._targets[this._targets.length - 1]; - - if (this._activeTarget !== target) { - this._activate(target); - } - - return; - } - - if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { - this._activeTarget = null; - - this._clear(); - - return; - } - - var offsetLength = this._offsets.length; - - for (var i = offsetLength; i--;) { - var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); - - if (isActiveTarget) { - this._activate(this._targets[i]); - } - } - }; - - _proto._activate = function _activate(target) { - this._activeTarget = target; - - this._clear(); - - var queries = this._selector.split(',').map(function (selector) { - return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]"; - }); - - var $link = $([].slice.call(document.querySelectorAll(queries.join(',')))); - - if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) { - $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE); - $link.addClass(ClassName$8.ACTIVE); - } else { - // Set triggered link as active - $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active - // With both
    and
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:vn},Ln="show",xn="out",Pn={HIDE:"hide"+Tn,HIDDEN:"hidden"+Tn,SHOW:"show"+Tn,SHOWN:"shown"+Tn,INSERTED:"inserted"+Tn,CLICK:"click"+Tn,FOCUSIN:"focusin"+Tn,FOCUSOUT:"focusout"+Tn,MOUSEENTER:"mouseenter"+Tn,MOUSELEAVE:"mouseleave"+Tn},Hn="fade",jn="show",Rn=".tooltip-inner",Fn=".arrow",Mn="hover",Wn="focus",Un="click",Bn="manual",qn=function(){function i(t,e){if("undefined"==typeof be)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=p(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(p(this.getTipElement()).hasClass(jn))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),p.removeData(this.element,this.constructor.DATA_KEY),p(this.element).off(this.constructor.EVENT_KEY),p(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&p(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===p(this.element).css("display"))throw new Error("Please use show on visible elements");var t=p.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){p(this.element).trigger(t);var n=m.findShadowRoot(this.element),i=p.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=m.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&p(o).addClass(Hn);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();p(o).data(this.constructor.DATA_KEY,this),p.contains(this.element.ownerDocument.documentElement,this.tip)||p(o).appendTo(l),p(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new be(this.element,o,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:Fn},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),p(o).addClass(jn),"ontouchstart"in document.documentElement&&p(document.body).children().on("mouseover",null,p.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,p(e.element).trigger(e.constructor.Event.SHOWN),t===xn&&e._leave(null,e)};if(p(this.tip).hasClass(Hn)){var h=m.getTransitionDurationFromElement(this.tip);p(this.tip).one(m.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=p.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==Ln&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),p(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(p(this.element).trigger(i),!i.isDefaultPrevented()){if(p(n).removeClass(jn),"ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),this._activeTrigger[Un]=!1,this._activeTrigger[Wn]=!1,this._activeTrigger[Mn]=!1,p(this.tip).hasClass(Hn)){var r=m.getTransitionDurationFromElement(n);p(n).one(m.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){p(this.getTipElement()).addClass(Dn+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(p(t.querySelectorAll(Rn)),this.getTitle()),p(t).removeClass(Hn+" "+jn)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=bn(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?p(e).parent().is(t)||t.empty().append(e):t.text(p(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:m.isElement(this.config.container)?p(this.config.container):p(document).find(this.config.container)},t._getAttachment=function(t){return Nn[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)p(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Bn){var e=t===Mn?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===Mn?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;p(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),p(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||p(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Wn:Mn]=!0),p(e.getTipElement()).hasClass(jn)||e._hoverState===Ln?e._hoverState=Ln:(clearTimeout(e._timeout),e._hoverState=Ln,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===Ln&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||p(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Wn:Mn]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=xn,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===xn&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=p(this.element).data();return Object.keys(e).forEach(function(t){-1!==An.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),m.typeCheckConfig(wn,t,this.constructor.DefaultType),t.sanitize&&(t.template=bn(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=p(this.getTipElement()),e=t.attr("class").match(In);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(p(t).removeClass(Hn),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=p(this).data(Cn),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),p(this).data(Cn,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return kn}},{key:"NAME",get:function(){return wn}},{key:"DATA_KEY",get:function(){return Cn}},{key:"Event",get:function(){return Pn}},{key:"EVENT_KEY",get:function(){return Tn}},{key:"DefaultType",get:function(){return On}}]),i}();p.fn[wn]=qn._jQueryInterface,p.fn[wn].Constructor=qn,p.fn[wn].noConflict=function(){return p.fn[wn]=Sn,qn._jQueryInterface};var Kn="popover",Qn="bs.popover",Vn="."+Qn,Yn=p.fn[Kn],zn="bs-popover",Xn=new RegExp("(^|\\s)"+zn+"\\S+","g"),Gn=l({},qn.Default,{placement:"right",trigger:"click",content:"",template:''}),$n=l({},qn.DefaultType,{content:"(string|element|function)"}),Jn="fade",Zn="show",ti=".popover-header",ei=".popover-body",ni={HIDE:"hide"+Vn,HIDDEN:"hidden"+Vn,SHOW:"show"+Vn,SHOWN:"shown"+Vn,INSERTED:"inserted"+Vn,CLICK:"click"+Vn,FOCUSIN:"focusin"+Vn,FOCUSOUT:"focusout"+Vn,MOUSEENTER:"mouseenter"+Vn,MOUSELEAVE:"mouseleave"+Vn},ii=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){p(this.getTipElement()).addClass(zn+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},o.setContent=function(){var t=p(this.getTipElement());this.setElementContent(t.find(ti),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(ei),e),t.removeClass(Jn+" "+Zn)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=p(this.getTipElement()),e=t.attr("class").match(Xn);null!==e&&0=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t 0; - this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent); - - this._addEventListeners(); - } // Getters - - - var _proto = Carousel.prototype; - - // Public - _proto.next = function next() { - if (!this._isSliding) { - this._slide(Direction.NEXT); - } - }; - - _proto.nextWhenVisible = function nextWhenVisible() { - // Don't call next when the page isn't visible - // or the carousel or its parent isn't visible - if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') { - this.next(); - } - }; - - _proto.prev = function prev() { - if (!this._isSliding) { - this._slide(Direction.PREV); - } - }; - - _proto.pause = function pause(event) { - if (!event) { - this._isPaused = true; - } - - if (this._element.querySelector(Selector$2.NEXT_PREV)) { - Util.triggerTransitionEnd(this._element); - this.cycle(true); - } - - clearInterval(this._interval); - this._interval = null; - }; - - _proto.cycle = function cycle(event) { - if (!event) { - this._isPaused = false; - } - - if (this._interval) { - clearInterval(this._interval); - this._interval = null; - } - - if (this._config.interval && !this._isPaused) { - this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); - } - }; - - _proto.to = function to(index) { - var _this = this; - - this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); - - var activeIndex = this._getItemIndex(this._activeElement); - - if (index > this._items.length - 1 || index < 0) { - return; - } - - if (this._isSliding) { - $(this._element).one(Event$2.SLID, function () { - return _this.to(index); - }); - return; - } - - if (activeIndex === index) { - this.pause(); - this.cycle(); - return; - } - - var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; - - this._slide(direction, this._items[index]); - }; - - _proto.dispose = function dispose() { - $(this._element).off(EVENT_KEY$2); - $.removeData(this._element, DATA_KEY$2); - this._items = null; - this._config = null; - this._element = null; - this._interval = null; - this._isPaused = null; - this._isSliding = null; - this._activeElement = null; - this._indicatorsElement = null; - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default, config); - Util.typeCheckConfig(NAME$2, config, DefaultType); - return config; - }; - - _proto._handleSwipe = function _handleSwipe() { - var absDeltax = Math.abs(this.touchDeltaX); - - if (absDeltax <= SWIPE_THRESHOLD) { - return; - } - - var direction = absDeltax / this.touchDeltaX; // swipe left - - if (direction > 0) { - this.prev(); - } // swipe right - - - if (direction < 0) { - this.next(); - } - }; - - _proto._addEventListeners = function _addEventListeners() { - var _this2 = this; - - if (this._config.keyboard) { - $(this._element).on(Event$2.KEYDOWN, function (event) { - return _this2._keydown(event); - }); - } - - if (this._config.pause === 'hover') { - $(this._element).on(Event$2.MOUSEENTER, function (event) { - return _this2.pause(event); - }).on(Event$2.MOUSELEAVE, function (event) { - return _this2.cycle(event); - }); - } - - if (this._config.touch) { - this._addTouchEventListeners(); - } - }; - - _proto._addTouchEventListeners = function _addTouchEventListeners() { - var _this3 = this; - - if (!this._touchSupported) { - return; - } - - var start = function start(event) { - if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { - _this3.touchStartX = event.originalEvent.clientX; - } else if (!_this3._pointerEvent) { - _this3.touchStartX = event.originalEvent.touches[0].clientX; - } - }; - - var move = function move(event) { - // ensure swiping with one touch and not pinching - if (event.originalEvent.touches && event.originalEvent.touches.length > 1) { - _this3.touchDeltaX = 0; - } else { - _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX; - } - }; - - var end = function end(event) { - if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { - _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX; - } - - _this3._handleSwipe(); - - if (_this3._config.pause === 'hover') { - // If it's a touch-enabled device, mouseenter/leave are fired as - // part of the mouse compatibility events on first tap - the carousel - // would stop cycling until user tapped out of it; - // here, we listen for touchend, explicitly pause the carousel - // (as if it's the second time we tap on it, mouseenter compat event - // is NOT fired) and after a timeout (to allow for mouse compatibility - // events to fire) we explicitly restart cycling - _this3.pause(); - - if (_this3.touchTimeout) { - clearTimeout(_this3.touchTimeout); - } - - _this3.touchTimeout = setTimeout(function (event) { - return _this3.cycle(event); - }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval); - } - }; - - $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) { - return e.preventDefault(); - }); - - if (this._pointerEvent) { - $(this._element).on(Event$2.POINTERDOWN, function (event) { - return start(event); - }); - $(this._element).on(Event$2.POINTERUP, function (event) { - return end(event); - }); - - this._element.classList.add(ClassName$2.POINTER_EVENT); - } else { - $(this._element).on(Event$2.TOUCHSTART, function (event) { - return start(event); - }); - $(this._element).on(Event$2.TOUCHMOVE, function (event) { - return move(event); - }); - $(this._element).on(Event$2.TOUCHEND, function (event) { - return end(event); - }); - } - }; - - _proto._keydown = function _keydown(event) { - if (/input|textarea/i.test(event.target.tagName)) { - return; - } - - switch (event.which) { - case ARROW_LEFT_KEYCODE: - event.preventDefault(); - this.prev(); - break; - - case ARROW_RIGHT_KEYCODE: - event.preventDefault(); - this.next(); - break; - - default: - } - }; - - _proto._getItemIndex = function _getItemIndex(element) { - this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : []; - return this._items.indexOf(element); - }; - - _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { - var isNextDirection = direction === Direction.NEXT; - var isPrevDirection = direction === Direction.PREV; - - var activeIndex = this._getItemIndex(activeElement); - - var lastItemIndex = this._items.length - 1; - var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; - - if (isGoingToWrap && !this._config.wrap) { - return activeElement; - } - - var delta = direction === Direction.PREV ? -1 : 1; - var itemIndex = (activeIndex + delta) % this._items.length; - return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; - }; - - _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { - var targetIndex = this._getItemIndex(relatedTarget); - - var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM)); - - var slideEvent = $.Event(Event$2.SLIDE, { - relatedTarget: relatedTarget, - direction: eventDirectionName, - from: fromIndex, - to: targetIndex - }); - $(this._element).trigger(slideEvent); - return slideEvent; - }; - - _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { - if (this._indicatorsElement) { - var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE)); - $(indicators).removeClass(ClassName$2.ACTIVE); - - var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; - - if (nextIndicator) { - $(nextIndicator).addClass(ClassName$2.ACTIVE); - } - } - }; - - _proto._slide = function _slide(direction, element) { - var _this4 = this; - - var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); - - var activeElementIndex = this._getItemIndex(activeElement); - - var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); - - var nextElementIndex = this._getItemIndex(nextElement); - - var isCycling = Boolean(this._interval); - var directionalClassName; - var orderClassName; - var eventDirectionName; - - if (direction === Direction.NEXT) { - directionalClassName = ClassName$2.LEFT; - orderClassName = ClassName$2.NEXT; - eventDirectionName = Direction.LEFT; - } else { - directionalClassName = ClassName$2.RIGHT; - orderClassName = ClassName$2.PREV; - eventDirectionName = Direction.RIGHT; - } - - if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) { - this._isSliding = false; - return; - } - - var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); - - if (slideEvent.isDefaultPrevented()) { - return; - } - - if (!activeElement || !nextElement) { - // Some weirdness is happening, so we bail - return; - } - - this._isSliding = true; - - if (isCycling) { - this.pause(); - } - - this._setActiveIndicatorElement(nextElement); - - var slidEvent = $.Event(Event$2.SLID, { - relatedTarget: nextElement, - direction: eventDirectionName, - from: activeElementIndex, - to: nextElementIndex - }); - - if ($(this._element).hasClass(ClassName$2.SLIDE)) { - $(nextElement).addClass(orderClassName); - Util.reflow(nextElement); - $(activeElement).addClass(directionalClassName); - $(nextElement).addClass(directionalClassName); - var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10); - - if (nextElementInterval) { - this._config.defaultInterval = this._config.defaultInterval || this._config.interval; - this._config.interval = nextElementInterval; - } else { - this._config.interval = this._config.defaultInterval || this._config.interval; - } - - var transitionDuration = Util.getTransitionDurationFromElement(activeElement); - $(activeElement).one(Util.TRANSITION_END, function () { - $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName$2.ACTIVE); - $(activeElement).removeClass(ClassName$2.ACTIVE + " " + orderClassName + " " + directionalClassName); - _this4._isSliding = false; - setTimeout(function () { - return $(_this4._element).trigger(slidEvent); - }, 0); - }).emulateTransitionEnd(transitionDuration); - } else { - $(activeElement).removeClass(ClassName$2.ACTIVE); - $(nextElement).addClass(ClassName$2.ACTIVE); - this._isSliding = false; - $(this._element).trigger(slidEvent); - } - - if (isCycling) { - this.cycle(); - } - } // Static - ; - - Carousel._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$2); - - var _config = _objectSpread({}, Default, $(this).data()); - - if (typeof config === 'object') { - _config = _objectSpread({}, _config, config); - } - - var action = typeof config === 'string' ? config : _config.slide; - - if (!data) { - data = new Carousel(this, _config); - $(this).data(DATA_KEY$2, data); - } - - if (typeof config === 'number') { - data.to(config); - } else if (typeof action === 'string') { - if (typeof data[action] === 'undefined') { - throw new TypeError("No method named \"" + action + "\""); - } - - data[action](); - } else if (_config.interval && _config.ride) { - data.pause(); - data.cycle(); - } - }); - }; - - Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { - var selector = Util.getSelectorFromElement(this); - - if (!selector) { - return; - } - - var target = $(selector)[0]; - - if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) { - return; - } - - var config = _objectSpread({}, $(target).data(), $(this).data()); - - var slideIndex = this.getAttribute('data-slide-to'); - - if (slideIndex) { - config.interval = false; - } - - Carousel._jQueryInterface.call($(target), config); - - if (slideIndex) { - $(target).data(DATA_KEY$2).to(slideIndex); - } - - event.preventDefault(); - }; - - _createClass(Carousel, null, [{ - key: "VERSION", - get: function get() { - return VERSION$2; - } - }, { - key: "Default", - get: function get() { - return Default; - } - }]); - - return Carousel; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler); - $(window).on(Event$2.LOAD_DATA_API, function () { - var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE)); - - for (var i = 0, len = carousels.length; i < len; i++) { - var $carousel = $(carousels[i]); - - Carousel._jQueryInterface.call($carousel, $carousel.data()); - } - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$2] = Carousel._jQueryInterface; - $.fn[NAME$2].Constructor = Carousel; - - $.fn[NAME$2].noConflict = function () { - $.fn[NAME$2] = JQUERY_NO_CONFLICT$2; - return Carousel._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$3 = 'collapse'; - var VERSION$3 = '4.3.1'; - var DATA_KEY$3 = 'bs.collapse'; - var EVENT_KEY$3 = "." + DATA_KEY$3; - var DATA_API_KEY$3 = '.data-api'; - var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3]; - var Default$1 = { - toggle: true, - parent: '' - }; - var DefaultType$1 = { - toggle: 'boolean', - parent: '(string|element)' - }; - var Event$3 = { - SHOW: "show" + EVENT_KEY$3, - SHOWN: "shown" + EVENT_KEY$3, - HIDE: "hide" + EVENT_KEY$3, - HIDDEN: "hidden" + EVENT_KEY$3, - CLICK_DATA_API: "click" + EVENT_KEY$3 + DATA_API_KEY$3 - }; - var ClassName$3 = { - SHOW: 'show', - COLLAPSE: 'collapse', - COLLAPSING: 'collapsing', - COLLAPSED: 'collapsed' - }; - var Dimension = { - WIDTH: 'width', - HEIGHT: 'height' - }; - var Selector$3 = { - ACTIVES: '.show, .collapsing', - DATA_TOGGLE: '[data-toggle="collapse"]' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Collapse = - /*#__PURE__*/ - function () { - function Collapse(element, config) { - this._isTransitioning = false; - this._element = element; - this._config = this._getConfig(config); - this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); - var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE)); - - for (var i = 0, len = toggleList.length; i < len; i++) { - var elem = toggleList[i]; - var selector = Util.getSelectorFromElement(elem); - var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { - return foundElem === element; - }); - - if (selector !== null && filterElement.length > 0) { - this._selector = selector; - - this._triggerArray.push(elem); - } - } - - this._parent = this._config.parent ? this._getParent() : null; - - if (!this._config.parent) { - this._addAriaAndCollapsedClass(this._element, this._triggerArray); - } - - if (this._config.toggle) { - this.toggle(); - } - } // Getters - - - var _proto = Collapse.prototype; - - // Public - _proto.toggle = function toggle() { - if ($(this._element).hasClass(ClassName$3.SHOW)) { - this.hide(); - } else { - this.show(); - } - }; - - _proto.show = function show() { - var _this = this; - - if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) { - return; - } - - var actives; - var activesData; - - if (this._parent) { - actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) { - if (typeof _this._config.parent === 'string') { - return elem.getAttribute('data-parent') === _this._config.parent; - } - - return elem.classList.contains(ClassName$3.COLLAPSE); - }); - - if (actives.length === 0) { - actives = null; - } - } - - if (actives) { - activesData = $(actives).not(this._selector).data(DATA_KEY$3); - - if (activesData && activesData._isTransitioning) { - return; - } - } - - var startEvent = $.Event(Event$3.SHOW); - $(this._element).trigger(startEvent); - - if (startEvent.isDefaultPrevented()) { - return; - } - - if (actives) { - Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide'); - - if (!activesData) { - $(actives).data(DATA_KEY$3, null); - } - } - - var dimension = this._getDimension(); - - $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING); - this._element.style[dimension] = 0; - - if (this._triggerArray.length) { - $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true); - } - - this.setTransitioning(true); - - var complete = function complete() { - $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW); - _this._element.style[dimension] = ''; - - _this.setTransitioning(false); - - $(_this._element).trigger(Event$3.SHOWN); - }; - - var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); - var scrollSize = "scroll" + capitalizedDimension; - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - this._element.style[dimension] = this._element[scrollSize] + "px"; - }; - - _proto.hide = function hide() { - var _this2 = this; - - if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) { - return; - } - - var startEvent = $.Event(Event$3.HIDE); - $(this._element).trigger(startEvent); - - if (startEvent.isDefaultPrevented()) { - return; - } - - var dimension = this._getDimension(); - - this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; - Util.reflow(this._element); - $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW); - var triggerArrayLength = this._triggerArray.length; - - if (triggerArrayLength > 0) { - for (var i = 0; i < triggerArrayLength; i++) { - var trigger = this._triggerArray[i]; - var selector = Util.getSelectorFromElement(trigger); - - if (selector !== null) { - var $elem = $([].slice.call(document.querySelectorAll(selector))); - - if (!$elem.hasClass(ClassName$3.SHOW)) { - $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false); - } - } - } - } - - this.setTransitioning(true); - - var complete = function complete() { - _this2.setTransitioning(false); - - $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN); - }; - - this._element.style[dimension] = ''; - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - }; - - _proto.setTransitioning = function setTransitioning(isTransitioning) { - this._isTransitioning = isTransitioning; - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$3); - this._config = null; - this._parent = null; - this._element = null; - this._triggerArray = null; - this._isTransitioning = null; - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default$1, config); - config.toggle = Boolean(config.toggle); // Coerce string values - - Util.typeCheckConfig(NAME$3, config, DefaultType$1); - return config; - }; - - _proto._getDimension = function _getDimension() { - var hasWidth = $(this._element).hasClass(Dimension.WIDTH); - return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; - }; - - _proto._getParent = function _getParent() { - var _this3 = this; - - var parent; - - if (Util.isElement(this._config.parent)) { - parent = this._config.parent; // It's a jQuery object - - if (typeof this._config.parent.jquery !== 'undefined') { - parent = this._config.parent[0]; - } - } else { - parent = document.querySelector(this._config.parent); - } - - var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; - var children = [].slice.call(parent.querySelectorAll(selector)); - $(children).each(function (i, element) { - _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); - }); - return parent; - }; - - _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { - var isOpen = $(element).hasClass(ClassName$3.SHOW); - - if (triggerArray.length) { - $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); - } - } // Static - ; - - Collapse._getTargetFromElement = function _getTargetFromElement(element) { - var selector = Util.getSelectorFromElement(element); - return selector ? document.querySelector(selector) : null; - }; - - Collapse._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var $this = $(this); - var data = $this.data(DATA_KEY$3); - - var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {}); - - if (!data && _config.toggle && /show|hide/.test(config)) { - _config.toggle = false; - } - - if (!data) { - data = new Collapse(this, _config); - $this.data(DATA_KEY$3, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - _createClass(Collapse, null, [{ - key: "VERSION", - get: function get() { - return VERSION$3; - } - }, { - key: "Default", - get: function get() { - return Default$1; - } - }]); - - return Collapse; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) { - // preventDefault only for elements (which change the URL) not inside the collapsible element - if (event.currentTarget.tagName === 'A') { - event.preventDefault(); - } - - var $trigger = $(this); - var selector = Util.getSelectorFromElement(this); - var selectors = [].slice.call(document.querySelectorAll(selector)); - $(selectors).each(function () { - var $target = $(this); - var data = $target.data(DATA_KEY$3); - var config = data ? 'toggle' : $trigger.data(); - - Collapse._jQueryInterface.call($target, config); - }); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$3] = Collapse._jQueryInterface; - $.fn[NAME$3].Constructor = Collapse; - - $.fn[NAME$3].noConflict = function () { - $.fn[NAME$3] = JQUERY_NO_CONFLICT$3; - return Collapse._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$4 = 'dropdown'; - var VERSION$4 = '4.3.1'; - var DATA_KEY$4 = 'bs.dropdown'; - var EVENT_KEY$4 = "." + DATA_KEY$4; - var DATA_API_KEY$4 = '.data-api'; - var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4]; - var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key - - var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key - - var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key - - var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key - - var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key - - var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) - - var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); - var Event$4 = { - HIDE: "hide" + EVENT_KEY$4, - HIDDEN: "hidden" + EVENT_KEY$4, - SHOW: "show" + EVENT_KEY$4, - SHOWN: "shown" + EVENT_KEY$4, - CLICK: "click" + EVENT_KEY$4, - CLICK_DATA_API: "click" + EVENT_KEY$4 + DATA_API_KEY$4, - KEYDOWN_DATA_API: "keydown" + EVENT_KEY$4 + DATA_API_KEY$4, - KEYUP_DATA_API: "keyup" + EVENT_KEY$4 + DATA_API_KEY$4 - }; - var ClassName$4 = { - DISABLED: 'disabled', - SHOW: 'show', - DROPUP: 'dropup', - DROPRIGHT: 'dropright', - DROPLEFT: 'dropleft', - MENURIGHT: 'dropdown-menu-right', - MENULEFT: 'dropdown-menu-left', - POSITION_STATIC: 'position-static' - }; - var Selector$4 = { - DATA_TOGGLE: '[data-toggle="dropdown"]', - FORM_CHILD: '.dropdown form', - MENU: '.dropdown-menu', - NAVBAR_NAV: '.navbar-nav', - VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' - }; - var AttachmentMap = { - TOP: 'top-start', - TOPEND: 'top-end', - BOTTOM: 'bottom-start', - BOTTOMEND: 'bottom-end', - RIGHT: 'right-start', - RIGHTEND: 'right-end', - LEFT: 'left-start', - LEFTEND: 'left-end' - }; - var Default$2 = { - offset: 0, - flip: true, - boundary: 'scrollParent', - reference: 'toggle', - display: 'dynamic' - }; - var DefaultType$2 = { - offset: '(number|string|function)', - flip: 'boolean', - boundary: '(string|element)', - reference: '(string|element)', - display: 'string' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Dropdown = - /*#__PURE__*/ - function () { - function Dropdown(element, config) { - this._element = element; - this._popper = null; - this._config = this._getConfig(config); - this._menu = this._getMenuElement(); - this._inNavbar = this._detectNavbar(); - - this._addEventListeners(); - } // Getters - - - var _proto = Dropdown.prototype; - - // Public - _proto.toggle = function toggle() { - if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) { - return; - } - - var parent = Dropdown._getParentFromElement(this._element); - - var isActive = $(this._menu).hasClass(ClassName$4.SHOW); - - Dropdown._clearMenus(); - - if (isActive) { - return; - } - - var relatedTarget = { - relatedTarget: this._element - }; - var showEvent = $.Event(Event$4.SHOW, relatedTarget); - $(parent).trigger(showEvent); - - if (showEvent.isDefaultPrevented()) { - return; - } // Disable totally Popper.js for Dropdown in Navbar - - - if (!this._inNavbar) { - /** - * Check for Popper dependency - * Popper - https://popper.js.org - */ - if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)'); - } - - var referenceElement = this._element; - - if (this._config.reference === 'parent') { - referenceElement = parent; - } else if (Util.isElement(this._config.reference)) { - referenceElement = this._config.reference; // Check if it's jQuery element - - if (typeof this._config.reference.jquery !== 'undefined') { - referenceElement = this._config.reference[0]; - } - } // If boundary is not `scrollParent`, then set position to `static` - // to allow the menu to "escape" the scroll parent's boundaries - // https://github.com/twbs/bootstrap/issues/24251 - - - if (this._config.boundary !== 'scrollParent') { - $(parent).addClass(ClassName$4.POSITION_STATIC); - } - - this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); - } // If this is a touch-enabled device we add extra - // empty mouseover listeners to the body's immediate children; - // only needed because of broken event delegation on iOS - // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - - - if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) { - $(document.body).children().on('mouseover', null, $.noop); - } - - this._element.focus(); - - this._element.setAttribute('aria-expanded', true); - - $(this._menu).toggleClass(ClassName$4.SHOW); - $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget)); - }; - - _proto.show = function show() { - if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) { - return; - } - - var relatedTarget = { - relatedTarget: this._element - }; - var showEvent = $.Event(Event$4.SHOW, relatedTarget); - - var parent = Dropdown._getParentFromElement(this._element); - - $(parent).trigger(showEvent); - - if (showEvent.isDefaultPrevented()) { - return; - } - - $(this._menu).toggleClass(ClassName$4.SHOW); - $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget)); - }; - - _proto.hide = function hide() { - if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) { - return; - } - - var relatedTarget = { - relatedTarget: this._element - }; - var hideEvent = $.Event(Event$4.HIDE, relatedTarget); - - var parent = Dropdown._getParentFromElement(this._element); - - $(parent).trigger(hideEvent); - - if (hideEvent.isDefaultPrevented()) { - return; - } - - $(this._menu).toggleClass(ClassName$4.SHOW); - $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$4); - $(this._element).off(EVENT_KEY$4); - this._element = null; - this._menu = null; - - if (this._popper !== null) { - this._popper.destroy(); - - this._popper = null; - } - }; - - _proto.update = function update() { - this._inNavbar = this._detectNavbar(); - - if (this._popper !== null) { - this._popper.scheduleUpdate(); - } - } // Private - ; - - _proto._addEventListeners = function _addEventListeners() { - var _this = this; - - $(this._element).on(Event$4.CLICK, function (event) { - event.preventDefault(); - event.stopPropagation(); - - _this.toggle(); - }); - }; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config); - Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType); - return config; - }; - - _proto._getMenuElement = function _getMenuElement() { - if (!this._menu) { - var parent = Dropdown._getParentFromElement(this._element); - - if (parent) { - this._menu = parent.querySelector(Selector$4.MENU); - } - } - - return this._menu; - }; - - _proto._getPlacement = function _getPlacement() { - var $parentDropdown = $(this._element.parentNode); - var placement = AttachmentMap.BOTTOM; // Handle dropup - - if ($parentDropdown.hasClass(ClassName$4.DROPUP)) { - placement = AttachmentMap.TOP; - - if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { - placement = AttachmentMap.TOPEND; - } - } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) { - placement = AttachmentMap.RIGHT; - } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) { - placement = AttachmentMap.LEFT; - } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { - placement = AttachmentMap.BOTTOMEND; - } - - return placement; - }; - - _proto._detectNavbar = function _detectNavbar() { - return $(this._element).closest('.navbar').length > 0; - }; - - _proto._getOffset = function _getOffset() { - var _this2 = this; - - var offset = {}; - - if (typeof this._config.offset === 'function') { - offset.fn = function (data) { - data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {}); - return data; - }; - } else { - offset.offset = this._config.offset; - } - - return offset; - }; - - _proto._getPopperConfig = function _getPopperConfig() { - var popperConfig = { - placement: this._getPlacement(), - modifiers: { - offset: this._getOffset(), - flip: { - enabled: this._config.flip - }, - preventOverflow: { - boundariesElement: this._config.boundary - } - } // Disable Popper.js if we have a static display - - }; - - if (this._config.display === 'static') { - popperConfig.modifiers.applyStyle = { - enabled: false - }; - } - - return popperConfig; - } // Static - ; - - Dropdown._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$4); - - var _config = typeof config === 'object' ? config : null; - - if (!data) { - data = new Dropdown(this, _config); - $(this).data(DATA_KEY$4, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - Dropdown._clearMenus = function _clearMenus(event) { - if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { - return; - } - - var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE)); - - for (var i = 0, len = toggles.length; i < len; i++) { - var parent = Dropdown._getParentFromElement(toggles[i]); - - var context = $(toggles[i]).data(DATA_KEY$4); - var relatedTarget = { - relatedTarget: toggles[i] - }; - - if (event && event.type === 'click') { - relatedTarget.clickEvent = event; - } - - if (!context) { - continue; - } - - var dropdownMenu = context._menu; - - if (!$(parent).hasClass(ClassName$4.SHOW)) { - continue; - } - - if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) { - continue; - } - - var hideEvent = $.Event(Event$4.HIDE, relatedTarget); - $(parent).trigger(hideEvent); - - if (hideEvent.isDefaultPrevented()) { - continue; - } // If this is a touch-enabled device we remove the extra - // empty mouseover listeners we added for iOS support - - - if ('ontouchstart' in document.documentElement) { - $(document.body).children().off('mouseover', null, $.noop); - } - - toggles[i].setAttribute('aria-expanded', 'false'); - $(dropdownMenu).removeClass(ClassName$4.SHOW); - $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); - } - }; - - Dropdown._getParentFromElement = function _getParentFromElement(element) { - var parent; - var selector = Util.getSelectorFromElement(element); - - if (selector) { - parent = document.querySelector(selector); - } - - return parent || element.parentNode; - } // eslint-disable-next-line complexity - ; - - Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { - // If not input/textarea: - // - And not a key in REGEXP_KEYDOWN => not a dropdown command - // If input/textarea: - // - If space key => not a dropdown command - // - If key is other than escape - // - If key is not up or down => not a dropdown command - // - If trigger inside the menu => not a dropdown command - if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { - return; - } - - event.preventDefault(); - event.stopPropagation(); - - if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) { - return; - } - - var parent = Dropdown._getParentFromElement(this); - - var isActive = $(parent).hasClass(ClassName$4.SHOW); - - if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { - if (event.which === ESCAPE_KEYCODE) { - var toggle = parent.querySelector(Selector$4.DATA_TOGGLE); - $(toggle).trigger('focus'); - } - - $(this).trigger('click'); - return; - } - - var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS)); - - if (items.length === 0) { - return; - } - - var index = items.indexOf(event.target); - - if (event.which === ARROW_UP_KEYCODE && index > 0) { - // Up - index--; - } - - if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { - // Down - index++; - } - - if (index < 0) { - index = 0; - } - - items[index].focus(); - }; - - _createClass(Dropdown, null, [{ - key: "VERSION", - get: function get() { - return VERSION$4; - } - }, { - key: "Default", - get: function get() { - return Default$2; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType$2; - } - }]); - - return Dropdown; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + " " + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) { - event.preventDefault(); - event.stopPropagation(); - - Dropdown._jQueryInterface.call($(this), 'toggle'); - }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) { - e.stopPropagation(); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$4] = Dropdown._jQueryInterface; - $.fn[NAME$4].Constructor = Dropdown; - - $.fn[NAME$4].noConflict = function () { - $.fn[NAME$4] = JQUERY_NO_CONFLICT$4; - return Dropdown._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$5 = 'modal'; - var VERSION$5 = '4.3.1'; - var DATA_KEY$5 = 'bs.modal'; - var EVENT_KEY$5 = "." + DATA_KEY$5; - var DATA_API_KEY$5 = '.data-api'; - var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5]; - var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key - - var Default$3 = { - backdrop: true, - keyboard: true, - focus: true, - show: true - }; - var DefaultType$3 = { - backdrop: '(boolean|string)', - keyboard: 'boolean', - focus: 'boolean', - show: 'boolean' - }; - var Event$5 = { - HIDE: "hide" + EVENT_KEY$5, - HIDDEN: "hidden" + EVENT_KEY$5, - SHOW: "show" + EVENT_KEY$5, - SHOWN: "shown" + EVENT_KEY$5, - FOCUSIN: "focusin" + EVENT_KEY$5, - RESIZE: "resize" + EVENT_KEY$5, - CLICK_DISMISS: "click.dismiss" + EVENT_KEY$5, - KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY$5, - MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY$5, - MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY$5, - CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5 - }; - var ClassName$5 = { - SCROLLABLE: 'modal-dialog-scrollable', - SCROLLBAR_MEASURER: 'modal-scrollbar-measure', - BACKDROP: 'modal-backdrop', - OPEN: 'modal-open', - FADE: 'fade', - SHOW: 'show' - }; - var Selector$5 = { - DIALOG: '.modal-dialog', - MODAL_BODY: '.modal-body', - DATA_TOGGLE: '[data-toggle="modal"]', - DATA_DISMISS: '[data-dismiss="modal"]', - FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', - STICKY_CONTENT: '.sticky-top' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Modal = - /*#__PURE__*/ - function () { - function Modal(element, config) { - this._config = this._getConfig(config); - this._element = element; - this._dialog = element.querySelector(Selector$5.DIALOG); - this._backdrop = null; - this._isShown = false; - this._isBodyOverflowing = false; - this._ignoreBackdropClick = false; - this._isTransitioning = false; - this._scrollbarWidth = 0; - } // Getters - - - var _proto = Modal.prototype; - - // Public - _proto.toggle = function toggle(relatedTarget) { - return this._isShown ? this.hide() : this.show(relatedTarget); - }; - - _proto.show = function show(relatedTarget) { - var _this = this; - - if (this._isShown || this._isTransitioning) { - return; - } - - if ($(this._element).hasClass(ClassName$5.FADE)) { - this._isTransitioning = true; - } - - var showEvent = $.Event(Event$5.SHOW, { - relatedTarget: relatedTarget - }); - $(this._element).trigger(showEvent); - - if (this._isShown || showEvent.isDefaultPrevented()) { - return; - } - - this._isShown = true; - - this._checkScrollbar(); - - this._setScrollbar(); - - this._adjustDialog(); - - this._setEscapeEvent(); - - this._setResizeEvent(); - - $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) { - return _this.hide(event); - }); - $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () { - $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) { - if ($(event.target).is(_this._element)) { - _this._ignoreBackdropClick = true; - } - }); - }); - - this._showBackdrop(function () { - return _this._showElement(relatedTarget); - }); - }; - - _proto.hide = function hide(event) { - var _this2 = this; - - if (event) { - event.preventDefault(); - } - - if (!this._isShown || this._isTransitioning) { - return; - } - - var hideEvent = $.Event(Event$5.HIDE); - $(this._element).trigger(hideEvent); - - if (!this._isShown || hideEvent.isDefaultPrevented()) { - return; - } - - this._isShown = false; - var transition = $(this._element).hasClass(ClassName$5.FADE); - - if (transition) { - this._isTransitioning = true; - } - - this._setEscapeEvent(); - - this._setResizeEvent(); - - $(document).off(Event$5.FOCUSIN); - $(this._element).removeClass(ClassName$5.SHOW); - $(this._element).off(Event$5.CLICK_DISMISS); - $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS); - - if (transition) { - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $(this._element).one(Util.TRANSITION_END, function (event) { - return _this2._hideModal(event); - }).emulateTransitionEnd(transitionDuration); - } else { - this._hideModal(); - } - }; - - _proto.dispose = function dispose() { - [window, this._element, this._dialog].forEach(function (htmlElement) { - return $(htmlElement).off(EVENT_KEY$5); - }); - /** - * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API` - * Do not move `document` in `htmlElements` array - * It will remove `Event.CLICK_DATA_API` event that should remain - */ - - $(document).off(Event$5.FOCUSIN); - $.removeData(this._element, DATA_KEY$5); - this._config = null; - this._element = null; - this._dialog = null; - this._backdrop = null; - this._isShown = null; - this._isBodyOverflowing = null; - this._ignoreBackdropClick = null; - this._isTransitioning = null; - this._scrollbarWidth = null; - }; - - _proto.handleUpdate = function handleUpdate() { - this._adjustDialog(); - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default$3, config); - Util.typeCheckConfig(NAME$5, config, DefaultType$3); - return config; - }; - - _proto._showElement = function _showElement(relatedTarget) { - var _this3 = this; - - var transition = $(this._element).hasClass(ClassName$5.FADE); - - if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { - // Don't move modal's DOM position - document.body.appendChild(this._element); - } - - this._element.style.display = 'block'; - - this._element.removeAttribute('aria-hidden'); - - this._element.setAttribute('aria-modal', true); - - if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) { - this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0; - } else { - this._element.scrollTop = 0; - } - - if (transition) { - Util.reflow(this._element); - } - - $(this._element).addClass(ClassName$5.SHOW); - - if (this._config.focus) { - this._enforceFocus(); - } - - var shownEvent = $.Event(Event$5.SHOWN, { - relatedTarget: relatedTarget - }); - - var transitionComplete = function transitionComplete() { - if (_this3._config.focus) { - _this3._element.focus(); - } - - _this3._isTransitioning = false; - $(_this3._element).trigger(shownEvent); - }; - - if (transition) { - var transitionDuration = Util.getTransitionDurationFromElement(this._dialog); - $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); - } else { - transitionComplete(); - } - }; - - _proto._enforceFocus = function _enforceFocus() { - var _this4 = this; - - $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop - .on(Event$5.FOCUSIN, function (event) { - if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) { - _this4._element.focus(); - } - }); - }; - - _proto._setEscapeEvent = function _setEscapeEvent() { - var _this5 = this; - - if (this._isShown && this._config.keyboard) { - $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) { - if (event.which === ESCAPE_KEYCODE$1) { - event.preventDefault(); - - _this5.hide(); - } - }); - } else if (!this._isShown) { - $(this._element).off(Event$5.KEYDOWN_DISMISS); - } - }; - - _proto._setResizeEvent = function _setResizeEvent() { - var _this6 = this; - - if (this._isShown) { - $(window).on(Event$5.RESIZE, function (event) { - return _this6.handleUpdate(event); - }); - } else { - $(window).off(Event$5.RESIZE); - } - }; - - _proto._hideModal = function _hideModal() { - var _this7 = this; - - this._element.style.display = 'none'; - - this._element.setAttribute('aria-hidden', true); - - this._element.removeAttribute('aria-modal'); - - this._isTransitioning = false; - - this._showBackdrop(function () { - $(document.body).removeClass(ClassName$5.OPEN); - - _this7._resetAdjustments(); - - _this7._resetScrollbar(); - - $(_this7._element).trigger(Event$5.HIDDEN); - }); - }; - - _proto._removeBackdrop = function _removeBackdrop() { - if (this._backdrop) { - $(this._backdrop).remove(); - this._backdrop = null; - } - }; - - _proto._showBackdrop = function _showBackdrop(callback) { - var _this8 = this; - - var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : ''; - - if (this._isShown && this._config.backdrop) { - this._backdrop = document.createElement('div'); - this._backdrop.className = ClassName$5.BACKDROP; - - if (animate) { - this._backdrop.classList.add(animate); - } - - $(this._backdrop).appendTo(document.body); - $(this._element).on(Event$5.CLICK_DISMISS, function (event) { - if (_this8._ignoreBackdropClick) { - _this8._ignoreBackdropClick = false; - return; - } - - if (event.target !== event.currentTarget) { - return; - } - - if (_this8._config.backdrop === 'static') { - _this8._element.focus(); - } else { - _this8.hide(); - } - }); - - if (animate) { - Util.reflow(this._backdrop); - } - - $(this._backdrop).addClass(ClassName$5.SHOW); - - if (!callback) { - return; - } - - if (!animate) { - callback(); - return; - } - - var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); - $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); - } else if (!this._isShown && this._backdrop) { - $(this._backdrop).removeClass(ClassName$5.SHOW); - - var callbackRemove = function callbackRemove() { - _this8._removeBackdrop(); - - if (callback) { - callback(); - } - }; - - if ($(this._element).hasClass(ClassName$5.FADE)) { - var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); - - $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); - } else { - callbackRemove(); - } - } else if (callback) { - callback(); - } - } // ---------------------------------------------------------------------- - // the following methods are used to handle overflowing modals - // todo (fat): these should probably be refactored out of modal.js - // ---------------------------------------------------------------------- - ; - - _proto._adjustDialog = function _adjustDialog() { - var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; - - if (!this._isBodyOverflowing && isModalOverflowing) { - this._element.style.paddingLeft = this._scrollbarWidth + "px"; - } - - if (this._isBodyOverflowing && !isModalOverflowing) { - this._element.style.paddingRight = this._scrollbarWidth + "px"; - } - }; - - _proto._resetAdjustments = function _resetAdjustments() { - this._element.style.paddingLeft = ''; - this._element.style.paddingRight = ''; - }; - - _proto._checkScrollbar = function _checkScrollbar() { - var rect = document.body.getBoundingClientRect(); - this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; - this._scrollbarWidth = this._getScrollbarWidth(); - }; - - _proto._setScrollbar = function _setScrollbar() { - var _this9 = this; - - if (this._isBodyOverflowing) { - // Note: DOMNode.style.paddingRight returns the actual value or '' if not set - // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set - var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); - var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding - - $(fixedContent).each(function (index, element) { - var actualPadding = element.style.paddingRight; - var calculatedPadding = $(element).css('padding-right'); - $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px"); - }); // Adjust sticky content margin - - $(stickyContent).each(function (index, element) { - var actualMargin = element.style.marginRight; - var calculatedMargin = $(element).css('margin-right'); - $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px"); - }); // Adjust body padding - - var actualPadding = document.body.style.paddingRight; - var calculatedPadding = $(document.body).css('padding-right'); - $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); - } - - $(document.body).addClass(ClassName$5.OPEN); - }; - - _proto._resetScrollbar = function _resetScrollbar() { - // Restore fixed content padding - var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); - $(fixedContent).each(function (index, element) { - var padding = $(element).data('padding-right'); - $(element).removeData('padding-right'); - element.style.paddingRight = padding ? padding : ''; - }); // Restore sticky content - - var elements = [].slice.call(document.querySelectorAll("" + Selector$5.STICKY_CONTENT)); - $(elements).each(function (index, element) { - var margin = $(element).data('margin-right'); - - if (typeof margin !== 'undefined') { - $(element).css('margin-right', margin).removeData('margin-right'); - } - }); // Restore body padding - - var padding = $(document.body).data('padding-right'); - $(document.body).removeData('padding-right'); - document.body.style.paddingRight = padding ? padding : ''; - }; - - _proto._getScrollbarWidth = function _getScrollbarWidth() { - // thx d.walsh - var scrollDiv = document.createElement('div'); - scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER; - document.body.appendChild(scrollDiv); - var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; - document.body.removeChild(scrollDiv); - return scrollbarWidth; - } // Static - ; - - Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { - return this.each(function () { - var data = $(this).data(DATA_KEY$5); - - var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {}); - - if (!data) { - data = new Modal(this, _config); - $(this).data(DATA_KEY$5, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](relatedTarget); - } else if (_config.show) { - data.show(relatedTarget); - } - }); - }; - - _createClass(Modal, null, [{ - key: "VERSION", - get: function get() { - return VERSION$5; - } - }, { - key: "Default", - get: function get() { - return Default$3; - } - }]); - - return Modal; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) { - var _this10 = this; - - var target; - var selector = Util.getSelectorFromElement(this); - - if (selector) { - target = document.querySelector(selector); - } - - var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data()); - - if (this.tagName === 'A' || this.tagName === 'AREA') { - event.preventDefault(); - } - - var $target = $(target).one(Event$5.SHOW, function (showEvent) { - if (showEvent.isDefaultPrevented()) { - // Only register focus restorer if modal will actually get shown - return; - } - - $target.one(Event$5.HIDDEN, function () { - if ($(_this10).is(':visible')) { - _this10.focus(); - } - }); - }); - - Modal._jQueryInterface.call($(target), config, this); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$5] = Modal._jQueryInterface; - $.fn[NAME$5].Constructor = Modal; - - $.fn[NAME$5].noConflict = function () { - $.fn[NAME$5] = JQUERY_NO_CONFLICT$5; - return Modal._jQueryInterface; - }; - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.3.1): tools/sanitizer.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']; - var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; - var DefaultWhitelist = { - // Global attributes allowed on any supplied element below. - '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], - a: ['target', 'href', 'title', 'rel'], - area: [], - b: [], - br: [], - col: [], - code: [], - div: [], - em: [], - hr: [], - h1: [], - h2: [], - h3: [], - h4: [], - h5: [], - h6: [], - i: [], - img: ['src', 'alt', 'title', 'width', 'height'], - li: [], - ol: [], - p: [], - pre: [], - s: [], - small: [], - span: [], - sub: [], - sup: [], - strong: [], - u: [], - ul: [] - /** - * A pattern that recognizes a commonly useful subset of URLs that are safe. - * - * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts - */ - - }; - var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi; - /** - * A pattern that matches safe data URLs. Only matches image, video and audio types. - * - * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts - */ - - var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i; - - function allowedAttribute(attr, allowedAttributeList) { - var attrName = attr.nodeName.toLowerCase(); - - if (allowedAttributeList.indexOf(attrName) !== -1) { - if (uriAttrs.indexOf(attrName) !== -1) { - return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN)); - } - - return true; - } - - var regExp = allowedAttributeList.filter(function (attrRegex) { - return attrRegex instanceof RegExp; - }); // Check if a regular expression validates the attribute. - - for (var i = 0, l = regExp.length; i < l; i++) { - if (attrName.match(regExp[i])) { - return true; - } - } - - return false; - } - - function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { - if (unsafeHtml.length === 0) { - return unsafeHtml; - } - - if (sanitizeFn && typeof sanitizeFn === 'function') { - return sanitizeFn(unsafeHtml); - } - - var domParser = new window.DOMParser(); - var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); - var whitelistKeys = Object.keys(whiteList); - var elements = [].slice.call(createdDocument.body.querySelectorAll('*')); - - var _loop = function _loop(i, len) { - var el = elements[i]; - var elName = el.nodeName.toLowerCase(); - - if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { - el.parentNode.removeChild(el); - return "continue"; - } - - var attributeList = [].slice.call(el.attributes); - var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []); - attributeList.forEach(function (attr) { - if (!allowedAttribute(attr, whitelistedAttributes)) { - el.removeAttribute(attr.nodeName); - } - }); - }; - - for (var i = 0, len = elements.length; i < len; i++) { - var _ret = _loop(i, len); - - if (_ret === "continue") continue; - } - - return createdDocument.body.innerHTML; - } - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$6 = 'tooltip'; - var VERSION$6 = '4.3.1'; - var DATA_KEY$6 = 'bs.tooltip'; - var EVENT_KEY$6 = "." + DATA_KEY$6; - var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6]; - var CLASS_PREFIX = 'bs-tooltip'; - var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); - var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']; - var DefaultType$4 = { - animation: 'boolean', - template: 'string', - title: '(string|element|function)', - trigger: 'string', - delay: '(number|object)', - html: 'boolean', - selector: '(string|boolean)', - placement: '(string|function)', - offset: '(number|string|function)', - container: '(string|element|boolean)', - fallbackPlacement: '(string|array)', - boundary: '(string|element)', - sanitize: 'boolean', - sanitizeFn: '(null|function)', - whiteList: 'object' - }; - var AttachmentMap$1 = { - AUTO: 'auto', - TOP: 'top', - RIGHT: 'right', - BOTTOM: 'bottom', - LEFT: 'left' - }; - var Default$4 = { - animation: true, - template: '', - trigger: 'hover focus', - title: '', - delay: 0, - html: false, - selector: false, - placement: 'top', - offset: 0, - container: false, - fallbackPlacement: 'flip', - boundary: 'scrollParent', - sanitize: true, - sanitizeFn: null, - whiteList: DefaultWhitelist - }; - var HoverState = { - SHOW: 'show', - OUT: 'out' - }; - var Event$6 = { - HIDE: "hide" + EVENT_KEY$6, - HIDDEN: "hidden" + EVENT_KEY$6, - SHOW: "show" + EVENT_KEY$6, - SHOWN: "shown" + EVENT_KEY$6, - INSERTED: "inserted" + EVENT_KEY$6, - CLICK: "click" + EVENT_KEY$6, - FOCUSIN: "focusin" + EVENT_KEY$6, - FOCUSOUT: "focusout" + EVENT_KEY$6, - MOUSEENTER: "mouseenter" + EVENT_KEY$6, - MOUSELEAVE: "mouseleave" + EVENT_KEY$6 - }; - var ClassName$6 = { - FADE: 'fade', - SHOW: 'show' - }; - var Selector$6 = { - TOOLTIP: '.tooltip', - TOOLTIP_INNER: '.tooltip-inner', - ARROW: '.arrow' - }; - var Trigger = { - HOVER: 'hover', - FOCUS: 'focus', - CLICK: 'click', - MANUAL: 'manual' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Tooltip = - /*#__PURE__*/ - function () { - function Tooltip(element, config) { - /** - * Check for Popper dependency - * Popper - https://popper.js.org - */ - if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)'); - } // private - - - this._isEnabled = true; - this._timeout = 0; - this._hoverState = ''; - this._activeTrigger = {}; - this._popper = null; // Protected - - this.element = element; - this.config = this._getConfig(config); - this.tip = null; - - this._setListeners(); - } // Getters - - - var _proto = Tooltip.prototype; - - // Public - _proto.enable = function enable() { - this._isEnabled = true; - }; - - _proto.disable = function disable() { - this._isEnabled = false; - }; - - _proto.toggleEnabled = function toggleEnabled() { - this._isEnabled = !this._isEnabled; - }; - - _proto.toggle = function toggle(event) { - if (!this._isEnabled) { - return; - } - - if (event) { - var dataKey = this.constructor.DATA_KEY; - var context = $(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $(event.currentTarget).data(dataKey, context); - } - - context._activeTrigger.click = !context._activeTrigger.click; - - if (context._isWithActiveTrigger()) { - context._enter(null, context); - } else { - context._leave(null, context); - } - } else { - if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) { - this._leave(null, this); - - return; - } - - this._enter(null, this); - } - }; - - _proto.dispose = function dispose() { - clearTimeout(this._timeout); - $.removeData(this.element, this.constructor.DATA_KEY); - $(this.element).off(this.constructor.EVENT_KEY); - $(this.element).closest('.modal').off('hide.bs.modal'); - - if (this.tip) { - $(this.tip).remove(); - } - - this._isEnabled = null; - this._timeout = null; - this._hoverState = null; - this._activeTrigger = null; - - if (this._popper !== null) { - this._popper.destroy(); - } - - this._popper = null; - this.element = null; - this.config = null; - this.tip = null; - }; - - _proto.show = function show() { - var _this = this; - - if ($(this.element).css('display') === 'none') { - throw new Error('Please use show on visible elements'); - } - - var showEvent = $.Event(this.constructor.Event.SHOW); - - if (this.isWithContent() && this._isEnabled) { - $(this.element).trigger(showEvent); - var shadowRoot = Util.findShadowRoot(this.element); - var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); - - if (showEvent.isDefaultPrevented() || !isInTheDom) { - return; - } - - var tip = this.getTipElement(); - var tipId = Util.getUID(this.constructor.NAME); - tip.setAttribute('id', tipId); - this.element.setAttribute('aria-describedby', tipId); - this.setContent(); - - if (this.config.animation) { - $(tip).addClass(ClassName$6.FADE); - } - - var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; - - var attachment = this._getAttachment(placement); - - this.addAttachmentClass(attachment); - - var container = this._getContainer(); - - $(tip).data(this.constructor.DATA_KEY, this); - - if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) { - $(tip).appendTo(container); - } - - $(this.element).trigger(this.constructor.Event.INSERTED); - this._popper = new Popper(this.element, tip, { - placement: attachment, - modifiers: { - offset: this._getOffset(), - flip: { - behavior: this.config.fallbackPlacement - }, - arrow: { - element: Selector$6.ARROW - }, - preventOverflow: { - boundariesElement: this.config.boundary - } - }, - onCreate: function onCreate(data) { - if (data.originalPlacement !== data.placement) { - _this._handlePopperPlacementChange(data); - } - }, - onUpdate: function onUpdate(data) { - return _this._handlePopperPlacementChange(data); - } - }); - $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra - // empty mouseover listeners to the body's immediate children; - // only needed because of broken event delegation on iOS - // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - - if ('ontouchstart' in document.documentElement) { - $(document.body).children().on('mouseover', null, $.noop); - } - - var complete = function complete() { - if (_this.config.animation) { - _this._fixTransition(); - } - - var prevHoverState = _this._hoverState; - _this._hoverState = null; - $(_this.element).trigger(_this.constructor.Event.SHOWN); - - if (prevHoverState === HoverState.OUT) { - _this._leave(null, _this); - } - }; - - if ($(this.tip).hasClass(ClassName$6.FADE)) { - var transitionDuration = Util.getTransitionDurationFromElement(this.tip); - $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - } else { - complete(); - } - } - }; - - _proto.hide = function hide(callback) { - var _this2 = this; - - var tip = this.getTipElement(); - var hideEvent = $.Event(this.constructor.Event.HIDE); - - var complete = function complete() { - if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) { - tip.parentNode.removeChild(tip); - } - - _this2._cleanTipClass(); - - _this2.element.removeAttribute('aria-describedby'); - - $(_this2.element).trigger(_this2.constructor.Event.HIDDEN); - - if (_this2._popper !== null) { - _this2._popper.destroy(); - } - - if (callback) { - callback(); - } - }; - - $(this.element).trigger(hideEvent); - - if (hideEvent.isDefaultPrevented()) { - return; - } - - $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra - // empty mouseover listeners we added for iOS support - - if ('ontouchstart' in document.documentElement) { - $(document.body).children().off('mouseover', null, $.noop); - } - - this._activeTrigger[Trigger.CLICK] = false; - this._activeTrigger[Trigger.FOCUS] = false; - this._activeTrigger[Trigger.HOVER] = false; - - if ($(this.tip).hasClass(ClassName$6.FADE)) { - var transitionDuration = Util.getTransitionDurationFromElement(tip); - $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - } else { - complete(); - } - - this._hoverState = ''; - }; - - _proto.update = function update() { - if (this._popper !== null) { - this._popper.scheduleUpdate(); - } - } // Protected - ; - - _proto.isWithContent = function isWithContent() { - return Boolean(this.getTitle()); - }; - - _proto.addAttachmentClass = function addAttachmentClass(attachment) { - $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); - }; - - _proto.getTipElement = function getTipElement() { - this.tip = this.tip || $(this.config.template)[0]; - return this.tip; - }; - - _proto.setContent = function setContent() { - var tip = this.getTipElement(); - this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle()); - $(tip).removeClass(ClassName$6.FADE + " " + ClassName$6.SHOW); - }; - - _proto.setElementContent = function setElementContent($element, content) { - if (typeof content === 'object' && (content.nodeType || content.jquery)) { - // Content is a DOM node or a jQuery - if (this.config.html) { - if (!$(content).parent().is($element)) { - $element.empty().append(content); - } - } else { - $element.text($(content).text()); - } - - return; - } - - if (this.config.html) { - if (this.config.sanitize) { - content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn); - } - - $element.html(content); - } else { - $element.text(content); - } - }; - - _proto.getTitle = function getTitle() { - var title = this.element.getAttribute('data-original-title'); - - if (!title) { - title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; - } - - return title; - } // Private - ; - - _proto._getOffset = function _getOffset() { - var _this3 = this; - - var offset = {}; - - if (typeof this.config.offset === 'function') { - offset.fn = function (data) { - data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {}); - return data; - }; - } else { - offset.offset = this.config.offset; - } - - return offset; - }; - - _proto._getContainer = function _getContainer() { - if (this.config.container === false) { - return document.body; - } - - if (Util.isElement(this.config.container)) { - return $(this.config.container); - } - - return $(document).find(this.config.container); - }; - - _proto._getAttachment = function _getAttachment(placement) { - return AttachmentMap$1[placement.toUpperCase()]; - }; - - _proto._setListeners = function _setListeners() { - var _this4 = this; - - var triggers = this.config.trigger.split(' '); - triggers.forEach(function (trigger) { - if (trigger === 'click') { - $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) { - return _this4.toggle(event); - }); - } else if (trigger !== Trigger.MANUAL) { - var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN; - var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT; - $(_this4.element).on(eventIn, _this4.config.selector, function (event) { - return _this4._enter(event); - }).on(eventOut, _this4.config.selector, function (event) { - return _this4._leave(event); - }); - } - }); - $(this.element).closest('.modal').on('hide.bs.modal', function () { - if (_this4.element) { - _this4.hide(); - } - }); - - if (this.config.selector) { - this.config = _objectSpread({}, this.config, { - trigger: 'manual', - selector: '' - }); - } else { - this._fixTitle(); - } - }; - - _proto._fixTitle = function _fixTitle() { - var titleType = typeof this.element.getAttribute('data-original-title'); - - if (this.element.getAttribute('title') || titleType !== 'string') { - this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); - this.element.setAttribute('title', ''); - } - }; - - _proto._enter = function _enter(event, context) { - var dataKey = this.constructor.DATA_KEY; - context = context || $(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $(event.currentTarget).data(dataKey, context); - } - - if (event) { - context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; - } - - if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) { - context._hoverState = HoverState.SHOW; - return; - } - - clearTimeout(context._timeout); - context._hoverState = HoverState.SHOW; - - if (!context.config.delay || !context.config.delay.show) { - context.show(); - return; - } - - context._timeout = setTimeout(function () { - if (context._hoverState === HoverState.SHOW) { - context.show(); - } - }, context.config.delay.show); - }; - - _proto._leave = function _leave(event, context) { - var dataKey = this.constructor.DATA_KEY; - context = context || $(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $(event.currentTarget).data(dataKey, context); - } - - if (event) { - context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; - } - - if (context._isWithActiveTrigger()) { - return; - } - - clearTimeout(context._timeout); - context._hoverState = HoverState.OUT; - - if (!context.config.delay || !context.config.delay.hide) { - context.hide(); - return; - } - - context._timeout = setTimeout(function () { - if (context._hoverState === HoverState.OUT) { - context.hide(); - } - }, context.config.delay.hide); - }; - - _proto._isWithActiveTrigger = function _isWithActiveTrigger() { - for (var trigger in this._activeTrigger) { - if (this._activeTrigger[trigger]) { - return true; - } - } - - return false; - }; - - _proto._getConfig = function _getConfig(config) { - var dataAttributes = $(this.element).data(); - Object.keys(dataAttributes).forEach(function (dataAttr) { - if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) { - delete dataAttributes[dataAttr]; - } - }); - config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {}); - - if (typeof config.delay === 'number') { - config.delay = { - show: config.delay, - hide: config.delay - }; - } - - if (typeof config.title === 'number') { - config.title = config.title.toString(); - } - - if (typeof config.content === 'number') { - config.content = config.content.toString(); - } - - Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType); - - if (config.sanitize) { - config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn); - } - - return config; - }; - - _proto._getDelegateConfig = function _getDelegateConfig() { - var config = {}; - - if (this.config) { - for (var key in this.config) { - if (this.constructor.Default[key] !== this.config[key]) { - config[key] = this.config[key]; - } - } - } - - return config; - }; - - _proto._cleanTipClass = function _cleanTipClass() { - var $tip = $(this.getTipElement()); - var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); - - if (tabClass !== null && tabClass.length) { - $tip.removeClass(tabClass.join('')); - } - }; - - _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { - var popperInstance = popperData.instance; - this.tip = popperInstance.popper; - - this._cleanTipClass(); - - this.addAttachmentClass(this._getAttachment(popperData.placement)); - }; - - _proto._fixTransition = function _fixTransition() { - var tip = this.getTipElement(); - var initConfigAnimation = this.config.animation; - - if (tip.getAttribute('x-placement') !== null) { - return; - } - - $(tip).removeClass(ClassName$6.FADE); - this.config.animation = false; - this.hide(); - this.show(); - this.config.animation = initConfigAnimation; - } // Static - ; - - Tooltip._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$6); - - var _config = typeof config === 'object' && config; - - if (!data && /dispose|hide/.test(config)) { - return; - } - - if (!data) { - data = new Tooltip(this, _config); - $(this).data(DATA_KEY$6, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - _createClass(Tooltip, null, [{ - key: "VERSION", - get: function get() { - return VERSION$6; - } - }, { - key: "Default", - get: function get() { - return Default$4; - } - }, { - key: "NAME", - get: function get() { - return NAME$6; - } - }, { - key: "DATA_KEY", - get: function get() { - return DATA_KEY$6; - } - }, { - key: "Event", - get: function get() { - return Event$6; - } - }, { - key: "EVENT_KEY", - get: function get() { - return EVENT_KEY$6; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType$4; - } - }]); - - return Tooltip; - }(); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - - $.fn[NAME$6] = Tooltip._jQueryInterface; - $.fn[NAME$6].Constructor = Tooltip; - - $.fn[NAME$6].noConflict = function () { - $.fn[NAME$6] = JQUERY_NO_CONFLICT$6; - return Tooltip._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$7 = 'popover'; - var VERSION$7 = '4.3.1'; - var DATA_KEY$7 = 'bs.popover'; - var EVENT_KEY$7 = "." + DATA_KEY$7; - var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7]; - var CLASS_PREFIX$1 = 'bs-popover'; - var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g'); - - var Default$5 = _objectSpread({}, Tooltip.Default, { - placement: 'right', - trigger: 'click', - content: '', - template: '' - }); - - var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, { - content: '(string|element|function)' - }); - - var ClassName$7 = { - FADE: 'fade', - SHOW: 'show' - }; - var Selector$7 = { - TITLE: '.popover-header', - CONTENT: '.popover-body' - }; - var Event$7 = { - HIDE: "hide" + EVENT_KEY$7, - HIDDEN: "hidden" + EVENT_KEY$7, - SHOW: "show" + EVENT_KEY$7, - SHOWN: "shown" + EVENT_KEY$7, - INSERTED: "inserted" + EVENT_KEY$7, - CLICK: "click" + EVENT_KEY$7, - FOCUSIN: "focusin" + EVENT_KEY$7, - FOCUSOUT: "focusout" + EVENT_KEY$7, - MOUSEENTER: "mouseenter" + EVENT_KEY$7, - MOUSELEAVE: "mouseleave" + EVENT_KEY$7 - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Popover = - /*#__PURE__*/ - function (_Tooltip) { - _inheritsLoose(Popover, _Tooltip); - - function Popover() { - return _Tooltip.apply(this, arguments) || this; - } - - var _proto = Popover.prototype; - - // Overrides - _proto.isWithContent = function isWithContent() { - return this.getTitle() || this._getContent(); - }; - - _proto.addAttachmentClass = function addAttachmentClass(attachment) { - $(this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment); - }; - - _proto.getTipElement = function getTipElement() { - this.tip = this.tip || $(this.config.template)[0]; - return this.tip; - }; - - _proto.setContent = function setContent() { - var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events - - this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle()); - - var content = this._getContent(); - - if (typeof content === 'function') { - content = content.call(this.element); - } - - this.setElementContent($tip.find(Selector$7.CONTENT), content); - $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW); - } // Private - ; - - _proto._getContent = function _getContent() { - return this.element.getAttribute('data-content') || this.config.content; - }; - - _proto._cleanTipClass = function _cleanTipClass() { - var $tip = $(this.getTipElement()); - var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1); - - if (tabClass !== null && tabClass.length > 0) { - $tip.removeClass(tabClass.join('')); - } - } // Static - ; - - Popover._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$7); - - var _config = typeof config === 'object' ? config : null; - - if (!data && /dispose|hide/.test(config)) { - return; - } - - if (!data) { - data = new Popover(this, _config); - $(this).data(DATA_KEY$7, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - _createClass(Popover, null, [{ - key: "VERSION", - // Getters - get: function get() { - return VERSION$7; - } - }, { - key: "Default", - get: function get() { - return Default$5; - } - }, { - key: "NAME", - get: function get() { - return NAME$7; - } - }, { - key: "DATA_KEY", - get: function get() { - return DATA_KEY$7; - } - }, { - key: "Event", - get: function get() { - return Event$7; - } - }, { - key: "EVENT_KEY", - get: function get() { - return EVENT_KEY$7; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType$5; - } - }]); - - return Popover; - }(Tooltip); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - - $.fn[NAME$7] = Popover._jQueryInterface; - $.fn[NAME$7].Constructor = Popover; - - $.fn[NAME$7].noConflict = function () { - $.fn[NAME$7] = JQUERY_NO_CONFLICT$7; - return Popover._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$8 = 'scrollspy'; - var VERSION$8 = '4.3.1'; - var DATA_KEY$8 = 'bs.scrollspy'; - var EVENT_KEY$8 = "." + DATA_KEY$8; - var DATA_API_KEY$6 = '.data-api'; - var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8]; - var Default$6 = { - offset: 10, - method: 'auto', - target: '' - }; - var DefaultType$6 = { - offset: 'number', - method: 'string', - target: '(string|element)' - }; - var Event$8 = { - ACTIVATE: "activate" + EVENT_KEY$8, - SCROLL: "scroll" + EVENT_KEY$8, - LOAD_DATA_API: "load" + EVENT_KEY$8 + DATA_API_KEY$6 - }; - var ClassName$8 = { - DROPDOWN_ITEM: 'dropdown-item', - DROPDOWN_MENU: 'dropdown-menu', - ACTIVE: 'active' - }; - var Selector$8 = { - DATA_SPY: '[data-spy="scroll"]', - ACTIVE: '.active', - NAV_LIST_GROUP: '.nav, .list-group', - NAV_LINKS: '.nav-link', - NAV_ITEMS: '.nav-item', - LIST_ITEMS: '.list-group-item', - DROPDOWN: '.dropdown', - DROPDOWN_ITEMS: '.dropdown-item', - DROPDOWN_TOGGLE: '.dropdown-toggle' - }; - var OffsetMethod = { - OFFSET: 'offset', - POSITION: 'position' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var ScrollSpy = - /*#__PURE__*/ - function () { - function ScrollSpy(element, config) { - var _this = this; - - this._element = element; - this._scrollElement = element.tagName === 'BODY' ? window : element; - this._config = this._getConfig(config); - this._selector = this._config.target + " " + Selector$8.NAV_LINKS + "," + (this._config.target + " " + Selector$8.LIST_ITEMS + ",") + (this._config.target + " " + Selector$8.DROPDOWN_ITEMS); - this._offsets = []; - this._targets = []; - this._activeTarget = null; - this._scrollHeight = 0; - $(this._scrollElement).on(Event$8.SCROLL, function (event) { - return _this._process(event); - }); - this.refresh(); - - this._process(); - } // Getters - - - var _proto = ScrollSpy.prototype; - - // Public - _proto.refresh = function refresh() { - var _this2 = this; - - var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION; - var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; - var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; - this._offsets = []; - this._targets = []; - this._scrollHeight = this._getScrollHeight(); - var targets = [].slice.call(document.querySelectorAll(this._selector)); - targets.map(function (element) { - var target; - var targetSelector = Util.getSelectorFromElement(element); - - if (targetSelector) { - target = document.querySelector(targetSelector); - } - - if (target) { - var targetBCR = target.getBoundingClientRect(); - - if (targetBCR.width || targetBCR.height) { - // TODO (fat): remove sketch reliance on jQuery position/offset - return [$(target)[offsetMethod]().top + offsetBase, targetSelector]; - } - } - - return null; - }).filter(function (item) { - return item; - }).sort(function (a, b) { - return a[0] - b[0]; - }).forEach(function (item) { - _this2._offsets.push(item[0]); - - _this2._targets.push(item[1]); - }); - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$8); - $(this._scrollElement).off(EVENT_KEY$8); - this._element = null; - this._scrollElement = null; - this._config = null; - this._selector = null; - this._offsets = null; - this._targets = null; - this._activeTarget = null; - this._scrollHeight = null; - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {}); - - if (typeof config.target !== 'string') { - var id = $(config.target).attr('id'); - - if (!id) { - id = Util.getUID(NAME$8); - $(config.target).attr('id', id); - } - - config.target = "#" + id; - } - - Util.typeCheckConfig(NAME$8, config, DefaultType$6); - return config; - }; - - _proto._getScrollTop = function _getScrollTop() { - return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; - }; - - _proto._getScrollHeight = function _getScrollHeight() { - return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); - }; - - _proto._getOffsetHeight = function _getOffsetHeight() { - return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; - }; - - _proto._process = function _process() { - var scrollTop = this._getScrollTop() + this._config.offset; - - var scrollHeight = this._getScrollHeight(); - - var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); - - if (this._scrollHeight !== scrollHeight) { - this.refresh(); - } - - if (scrollTop >= maxScroll) { - var target = this._targets[this._targets.length - 1]; - - if (this._activeTarget !== target) { - this._activate(target); - } - - return; - } - - if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { - this._activeTarget = null; - - this._clear(); - - return; - } - - var offsetLength = this._offsets.length; - - for (var i = offsetLength; i--;) { - var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); - - if (isActiveTarget) { - this._activate(this._targets[i]); - } - } - }; - - _proto._activate = function _activate(target) { - this._activeTarget = target; - - this._clear(); - - var queries = this._selector.split(',').map(function (selector) { - return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]"; - }); - - var $link = $([].slice.call(document.querySelectorAll(queries.join(',')))); - - if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) { - $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE); - $link.addClass(ClassName$8.ACTIVE); - } else { - // Set triggered link as active - $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active - // With both
    and
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Ee},je="show",He="out",Re={HIDE:"hide"+De,HIDDEN:"hidden"+De,SHOW:"show"+De,SHOWN:"shown"+De,INSERTED:"inserted"+De,CLICK:"click"+De,FOCUSIN:"focusin"+De,FOCUSOUT:"focusout"+De,MOUSEENTER:"mouseenter"+De,MOUSELEAVE:"mouseleave"+De},xe="fade",Fe="show",Ue=".tooltip-inner",We=".arrow",qe="hover",Me="focus",Ke="click",Qe="manual",Be=function(){function i(t,e){if("undefined"==typeof u)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=g(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(g(this.getTipElement()).hasClass(Fe))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),g.removeData(this.element,this.constructor.DATA_KEY),g(this.element).off(this.constructor.EVENT_KEY),g(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&g(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===g(this.element).css("display"))throw new Error("Please use show on visible elements");var t=g.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){g(this.element).trigger(t);var n=_.findShadowRoot(this.element),i=g.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=_.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&g(o).addClass(xe);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();g(o).data(this.constructor.DATA_KEY,this),g.contains(this.element.ownerDocument.documentElement,this.tip)||g(o).appendTo(l),g(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new u(this.element,o,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:We},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),g(o).addClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().on("mouseover",null,g.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,g(e.element).trigger(e.constructor.Event.SHOWN),t===He&&e._leave(null,e)};if(g(this.tip).hasClass(xe)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=g.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==je&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),g(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(g(this.element).trigger(i),!i.isDefaultPrevented()){if(g(n).removeClass(Fe),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[Ke]=!1,this._activeTrigger[Me]=!1,this._activeTrigger[qe]=!1,g(this.tip).hasClass(xe)){var r=_.getTransitionDurationFromElement(n);g(n).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Ae+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(g(t.querySelectorAll(Ue)),this.getTitle()),g(t).removeClass(xe+" "+Fe)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Se(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?g(e).parent().is(t)||t.empty().append(e):t.text(g(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:_.isElement(this.config.container)?g(this.config.container):g(document).find(this.config.container)},t._getAttachment=function(t){return Pe[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)g(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Qe){var e=t===qe?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===qe?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;g(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),g(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Me:qe]=!0),g(e.getTipElement()).hasClass(Fe)||e._hoverState===je?e._hoverState=je:(clearTimeout(e._timeout),e._hoverState=je,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===je&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Me:qe]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=He,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===He&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=g(this.element).data();return Object.keys(e).forEach(function(t){-1!==Oe.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),_.typeCheckConfig(be,t,this.constructor.DefaultType),t.sanitize&&(t.template=Se(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ne);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(g(t).removeClass(xe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ie),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ie,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return Le}},{key:"NAME",get:function(){return be}},{key:"DATA_KEY",get:function(){return Ie}},{key:"Event",get:function(){return Re}},{key:"EVENT_KEY",get:function(){return De}},{key:"DefaultType",get:function(){return ke}}]),i}();g.fn[be]=Be._jQueryInterface,g.fn[be].Constructor=Be,g.fn[be].noConflict=function(){return g.fn[be]=we,Be._jQueryInterface};var Ve="popover",Ye="bs.popover",ze="."+Ye,Xe=g.fn[Ve],$e="bs-popover",Ge=new RegExp("(^|\\s)"+$e+"\\S+","g"),Je=l({},Be.Default,{placement:"right",trigger:"click",content:"",template:''}),Ze=l({},Be.DefaultType,{content:"(string|element|function)"}),tn="fade",en="show",nn=".popover-header",on=".popover-body",rn={HIDE:"hide"+ze,HIDDEN:"hidden"+ze,SHOW:"show"+ze,SHOWN:"shown"+ze,INSERTED:"inserted"+ze,CLICK:"click"+ze,FOCUSIN:"focusin"+ze,FOCUSOUT:"focusout"+ze,MOUSEENTER:"mouseenter"+ze,MOUSELEAVE:"mouseleave"+ze},sn=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){g(this.getTipElement()).addClass($e+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},o.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(nn),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(on),e),t.removeClass(tn+" "+en)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ge);null!==e&&0=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t0?e:t)(n)},u=Math.min,i=function(t){return t>0?u(n(t),9007199254740991):0},r=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},a="".repeat||function(t){var e=String(r(this)),u="",i=n(t);if(i<0||i==1/0)throw RangeError("Wrong number of repetitions");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(u+=e);return u},s=function(t,e,n,u){var s,o,l=String(r(t)),h=l.length,c=void 0===n?" ":String(n),f=i(e);return f<=h||""==c?l:(s=f-h,(o=a.call(c,Math.ceil(s/c.length))).length>s&&(o=o.slice(0,s)),u?o+l:l+o)},o="object"==typeof window&&window&&window.Math==Math?window:"object"==typeof self&&self&&self.Math==Math?self:Function("return this")(),l=o.navigator,h=l&&l.userAgent||"",c=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(h),f=function(t){try{return!!t()}catch(t){return!0}},p=!f(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),d={}.propertyIsEnumerable,v=Object.getOwnPropertyDescriptor,k={f:v&&!d.call({1:2},1)?function(t){var e=v(this,t);return!!e&&e.enumerable}:d},g=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},y={}.toString,m="".split,_=f(function(){return!Object("z").propertyIsEnumerable(0)})?function(t){return"String"==function(t){return y.call(t).slice(8,-1)}(t)?m.call(t,""):Object(t)}:Object,A=function(t){return _(r(t))},C=function(t){return"object"==typeof t?null!==t:"function"==typeof t},F=function(t,e){if(!C(t))return t;var n,u;if(e&&"function"==typeof(n=t.toString)&&!C(u=n.call(t)))return u;if("function"==typeof(n=t.valueOf)&&!C(u=n.call(t)))return u;if(!e&&"function"==typeof(n=t.toString)&&!C(u=n.call(t)))return u;throw TypeError("Can't convert object to primitive value")},E={}.hasOwnProperty,b=function(t,e){return E.call(t,e)},S=o.document,B=C(S)&&C(S.createElement),D=!p&&!f(function(){return 7!=Object.defineProperty((t="div",B?S.createElement(t):{}),"a",{get:function(){return 7}}).a;var t}),w=Object.getOwnPropertyDescriptor,T={f:p?w:function(t,e){if(t=A(t),e=F(e,!0),D)try{return w(t,e)}catch(t){}if(b(t,e))return g(!k.f.call(t,e),t[e])}},x=function(t){if(!C(t))throw TypeError(String(t)+" is not an object");return t},P=Object.defineProperty,M={f:p?P:function(t,e,n){if(x(t),e=F(e,!0),x(n),D)try{return P(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},O=p?function(t,e,n){return M.f(t,e,g(1,n))}:function(t,e,n){return t[e]=n,t};function I(t,e){return t(e={exports:{}},e.exports),e.exports}var R,V,j,N,L=function(t,e){try{O(o,t,e)}catch(n){o[t]=e}return e},H=I(function(t){var e=o["__core-js_shared__"]||L("__core-js_shared__",{});(t.exports=function(t,n){return e[t]||(e[t]=void 0!==n?n:{})})("versions",[]).push({version:"3.0.1",mode:"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})}),G=H("native-function-to-string",Function.toString),z=o.WeakMap,U="function"==typeof z&&/native code/.test(G.call(z)),Y=0,Z=Math.random(),W=H("keys"),$={},K=o.WeakMap;if(U){var q=new K,J=q.get,Q=q.has,X=q.set;R=function(t,e){return X.call(q,t,e),e},V=function(t){return J.call(q,t)||{}},j=function(t){return Q.call(q,t)}}else{var tt=W[N="state"]||(W[N]=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++Y+Z).toString(36))}(N));$[tt]=!0,R=function(t,e){return O(t,tt,e),e},V=function(t){return b(t,tt)?t[tt]:{}},j=function(t){return b(t,tt)}}var et,nt={set:R,get:V,has:j,enforce:function(t){return j(t)?V(t):R(t,{})},getterFor:function(t){return function(e){var n;if(!C(e)||(n=V(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}}},ut=I(function(t){var e=nt.get,n=nt.enforce,u=String(G).split("toString");H("inspectSource",function(t){return G.call(t)}),(t.exports=function(t,e,i,r){var a=!!r&&!!r.unsafe,s=!!r&&!!r.enumerable,l=!!r&&!!r.noTargetGet;"function"==typeof i&&("string"!=typeof e||b(i,"name")||O(i,"name",e),n(i).source=u.join("string"==typeof e?e:"")),t!==o?(a?!l&&t[e]&&(s=!0):delete t[e],s?t[e]=i:O(t,e,i)):s?t[e]=i:L(e,i)})(Function.prototype,"toString",function(){return"function"==typeof this&&e(this).source||G.call(this)})}),it=Math.max,rt=Math.min,at=(et=!1,function(t,e,u){var r,a=A(t),s=i(a.length),o=function(t,e){var u=n(t);return u<0?it(u+e,0):rt(u,e)}(u,s);if(et&&e!=e){for(;s>o;)if((r=a[o++])!=r)return!0}else for(;s>o;o++)if((et||o in a)&&a[o]===e)return et||o||0;return!et&&-1}),st=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"].concat("length","prototype"),ot={f:Object.getOwnPropertyNames||function(t){return function(t,e){var n,u=A(t),i=0,r=[];for(n in u)!b($,n)&&b(u,n)&&r.push(n);for(;e.length>i;)b(u,n=e[i++])&&(~at(r,n)||r.push(n));return r}(t,st)}},lt={f:Object.getOwnPropertySymbols},ht=o.Reflect,ct=ht&&ht.ownKeys||function(t){var e=ot.f(x(t)),n=lt.f;return n?e.concat(n(t)):e},ft=function(t,e){for(var n=ct(e),u=M.f,i=T.f,r=0;r=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(u=0;u=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}function Mt(t,e){return!e||"object"!=typeof e&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function Ot(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=Tt(t)););return t}function It(t,e,n){return(It="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,n){var u=Ot(t,e);if(u){var i=Object.getOwnPropertyDescriptor(u,e);return i.get?i.get.call(n):i.value}})(t,e,n||t)}function Rt(t,e,n,u){return(Rt="undefined"!=typeof Reflect&&Reflect.set?Reflect.set:function(t,e,n,u){var i,r=Ot(t,e);if(r){if((i=Object.getOwnPropertyDescriptor(r,e)).set)return i.set.call(u,n),!0;if(!i.writable)return!1}if(i=Object.getOwnPropertyDescriptor(u,e)){if(!i.writable)return!1;i.value=n,Object.defineProperty(u,e,i)}else St(u,e,n);return!0})(t,e,n,u)}function Vt(t,e,n,u,i){if(!Rt(t,e,n,u||t)&&i)throw new Error("failed to set property");return n}function jt(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=[],u=!0,i=!1,r=void 0;try{for(var a,s=t[Symbol.iterator]();!(u=(a=s.next()).done)&&(n.push(a.value),!e||n.length!==e);u=!0);}catch(t){i=!0,r=t}finally{try{u||null==s.return||s.return()}finally{if(i)throw r}}return n}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function Nt(t){return"string"==typeof t||t instanceof String}At({target:"String",proto:!0,forced:c},{padEnd:function(t){return s(this,t,arguments.length>1?arguments[1]:void 0,!1)}}),At({target:"String",proto:!0,forced:c},{padStart:function(t){return s(this,t,arguments.length>1?arguments[1]:void 0,!0)}}),At({target:"String",proto:!0},{repeat:a});var Lt={NONE:"NONE",LEFT:"LEFT",FORCE_LEFT:"FORCE_LEFT",RIGHT:"RIGHT",FORCE_RIGHT:"FORCE_RIGHT"};function Ht(t){return t.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}var Gt="undefined"!=typeof window&&window||"undefined"!=typeof global&&global.global===global&&global||"undefined"!=typeof self&&self.self===self&&self||{},zt=function(){function t(e,n,u,i){for(Ft(this,t),this.value=e,this.cursorPos=n,this.oldValue=u,this.oldSelection=i;this.value.slice(0,this.startChangePos)!==this.oldValue.slice(0,this.startChangePos);)--this.oldSelection.start}return bt(t,[{key:"startChangePos",get:function(){return Math.min(this.cursorPos,this.oldSelection.start)}},{key:"insertedCount",get:function(){return this.cursorPos-this.startChangePos}},{key:"inserted",get:function(){return this.value.substr(this.startChangePos,this.insertedCount)}},{key:"removedCount",get:function(){return Math.max(this.oldSelection.end-this.startChangePos||this.oldValue.length-this.value.length,0)}},{key:"removed",get:function(){return this.oldValue.substr(this.startChangePos,this.removedCount)}},{key:"head",get:function(){return this.value.substring(0,this.startChangePos)}},{key:"tail",get:function(){return this.value.substring(this.startChangePos+this.insertedCount)}},{key:"removeDirection",get:function(){return!this.removedCount||this.insertedCount?Lt.NONE:this.oldSelection.end===this.cursorPos||this.oldSelection.start===this.cursorPos?Lt.RIGHT:Lt.LEFT}}]),t}(),Ut=function(){function t(e){Ft(this,t),Bt(this,{inserted:"",rawInserted:"",skip:!1,tailShift:0},e)}return bt(t,[{key:"aggregate",value:function(t){return this.rawInserted+=t.rawInserted,this.skip=this.skip||t.skip,this.inserted+=t.inserted,this.tailShift+=t.tailShift,this}},{key:"offset",get:function(){return this.tailShift+this.inserted.length}}]),t}(),Yt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,u=arguments.length>2?arguments[2]:void 0;Ft(this,t),this.value=e,this.from=n,this.stop=u}return bt(t,[{key:"toString",value:function(){return this.value}},{key:"extend",value:function(t){this.value+=String(t)}},{key:"appendTo",value:function(t){return t.append(this.toString(),{tail:!0})}},{key:"shiftBefore",value:function(t){if(this.from>=t||!this.value.length)return"";var e=this.value[0];return this.value=this.value.slice(1),e}},{key:"state",get:function(){return{value:this.value,from:this.from,stop:this.stop}},set:function(t){Bt(this,t)}}]),t}(),Zt=function(){function t(e){Ft(this,t),this._value="",this._update(e),this.isInitialized=!0}return bt(t,[{key:"updateOptions",value:function(t){Object.keys(t).length&&this.withValueRefresh(this._update.bind(this,t))}},{key:"_update",value:function(t){Bt(this,t)}},{key:"reset",value:function(){this._value=""}},{key:"resolve",value:function(t){return this.reset(),this.append(t,{input:!0},""),this.doCommit(),this.value}},{key:"nearestInputPos",value:function(t,e){return t}},{key:"extractInput",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.value.length;return this.value.slice(t,e)}},{key:"extractTail",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.value.length;return new Yt(this.extractInput(t,e),t)}},{key:"_storeBeforeTailState",value:function(){this._beforeTailState=this.state}},{key:"_restoreBeforeTailState",value:function(){this.state=this._beforeTailState}},{key:"_resetBeforeTailState",value:function(){this._beforeTailState=null}},{key:"appendTail",value:function(t){return Nt(t)&&(t=new Yt(String(t))),t.appendTo(this)}},{key:"_appendCharRaw",value:function(t){return this._value+=t,new Ut({inserted:t,rawInserted:t})}},{key:"_appendChar",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;if(!(t=this.doPrepare(t,e)))return new Ut({skip:!0});var u,i=this.state,r=this._appendCharRaw(t,e);if(r.inserted){var a=!1!==this.doValidate(e);if(a&&null!=n){this._storeBeforeTailState(),this.overwrite&&(u=n.state,n.shiftBefore(this.value.length));var s=this.appendTail(n);(a=s.rawInserted===n.toString())&&s.inserted&&this._restoreBeforeTailState()}a||(r.rawInserted=r.inserted="",this.state=i,n&&u&&(n.state=u))}return r}},{key:"append",value:function(t,e,n){if(!Nt(t))throw new Error("value should be string");for(var u=new Ut,i=Nt(n)?new Yt(String(n)):n,r=0;r0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.value.length;return this._value=this.value.slice(0,t)+this.value.slice(e),new Ut}},{key:"withValueRefresh",value:function(t){if(this._refreshing||!this.isInitialized)return t();this._refreshing=!0;var e=this.unmaskedValue,n=this.value,u=t();return this.resolve(n)!==n&&(this.unmaskedValue=e),delete this._refreshing,u}},{key:"doPrepare",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.prepare?this.prepare(t,this,e):t}},{key:"doValidate",value:function(t){return(!this.validate||this.validate(this.value,this,t))&&(!this.parent||this.parent.doValidate(t))}},{key:"doCommit",value:function(){this.commit&&this.commit(this.value,this)}},{key:"splice",value:function(t,e,n,u){var i=t+e,r=this.extractTail(i),a=this.nearestInputPos(t,u);return new Ut({tailShift:a-t}).aggregate(this.remove(a)).aggregate(this.append(n,{input:!0},r))}},{key:"state",get:function(){return{_value:this.value}},set:function(t){this._value=t._value}},{key:"value",get:function(){return this._value},set:function(t){this.resolve(t)}},{key:"unmaskedValue",get:function(){return this.value},set:function(t){this.reset(),this.append(t,{},""),this.doCommit()}},{key:"typedValue",get:function(){return this.unmaskedValue},set:function(t){this.unmaskedValue=t}},{key:"rawInputValue",get:function(){return this.extractInput(0,this.value.length,{raw:!0})},set:function(t){this.reset(),this.append(t,{raw:!0},""),this.doCommit()}},{key:"isComplete",get:function(){return!0}}]),t}();function Wt(t){if(null==t)throw new Error("mask property should be defined");return t instanceof RegExp?Gt.IMask.MaskedRegExp:Nt(t)?Gt.IMask.MaskedPattern:t instanceof Date||t===Date?Gt.IMask.MaskedDate:t instanceof Number||"number"==typeof t||t===Number?Gt.IMask.MaskedNumber:Array.isArray(t)||t===Array?Gt.IMask.MaskedDynamic:t.prototype instanceof Gt.IMask.Masked?t:t instanceof Function?Gt.IMask.MaskedFunction:(console.warn("Mask not found for mask",t),Gt.IMask.Masked)}function $t(t){var e=(t=Dt({},t)).mask;return e instanceof Gt.IMask.Masked?e:new(Wt(e))(t)}var Kt={0:/\d/,a:/[\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,"*":/./},qt=function(){function t(e){Ft(this,t);var n=e.mask,u=Pt(e,["mask"]);this.masked=$t({mask:n}),Bt(this,u)}return bt(t,[{key:"reset",value:function(){this._isFilled=!1,this.masked.reset()}},{key:"remove",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.value.length;return 0===t&&e>=1?(this._isFilled=!1,this.masked.remove(t,e)):new Ut}},{key:"_appendChar",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this._isFilled)return new Ut;var n=this.masked.state,u=this.masked._appendChar(t,e);return u.inserted&&!1===this.doValidate(e)&&(u.inserted=u.rawInserted="",this.masked.state=n),u.inserted||this.isOptional||this.lazy||e.input||(u.inserted=this.placeholderChar),u.skip=!u.inserted&&!this.isOptional,this._isFilled=Boolean(u.inserted),u}},{key:"append",value:function(){var t;return(t=this.masked).append.apply(t,arguments)}},{key:"_appendPlaceholder",value:function(){var t=new Ut;return this._isFilled||this.isOptional?t:(this._isFilled=!0,t.inserted=this.placeholderChar,t)}},{key:"extractTail",value:function(){var t;return(t=this.masked).extractTail.apply(t,arguments)}},{key:"appendTail",value:function(){var t;return(t=this.masked).appendTail.apply(t,arguments)}},{key:"extractInput",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.value.length,n=arguments.length>2?arguments[2]:void 0;return this.masked.extractInput(t,e,n)}},{key:"nearestInputPos",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Lt.NONE,n=this.value.length,u=Math.min(Math.max(t,0),n);switch(e){case Lt.LEFT:case Lt.FORCE_LEFT:return this.isComplete?u:0;case Lt.RIGHT:case Lt.FORCE_RIGHT:return this.isComplete?u:n;case Lt.NONE:default:return u}}},{key:"doValidate",value:function(){var t,e;return(t=this.masked).doValidate.apply(t,arguments)&&(!this.parent||(e=this.parent).doValidate.apply(e,arguments))}},{key:"doCommit",value:function(){this.masked.doCommit()}},{key:"value",get:function(){return this.masked.value||(this._isFilled&&!this.isOptional?this.placeholderChar:"")}},{key:"unmaskedValue",get:function(){return this.masked.unmaskedValue}},{key:"isComplete",get:function(){return Boolean(this.masked.value)||this.isOptional}},{key:"state",get:function(){return{masked:this.masked.state,_isFilled:this._isFilled}},set:function(t){this.masked.state=t.masked,this._isFilled=t._isFilled}}]),t}(),Jt=function(){function t(e){Ft(this,t),Bt(this,e),this._value=""}return bt(t,[{key:"reset",value:function(){this._isRawInput=!1,this._value=""}},{key:"remove",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._value.length;return this._value=this._value.slice(0,t)+this._value.slice(e),this._value||(this._isRawInput=!1),new Ut}},{key:"nearestInputPos",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Lt.NONE,n=this._value.length;switch(e){case Lt.LEFT:case Lt.FORCE_LEFT:return 0;case Lt.NONE:case Lt.RIGHT:case Lt.FORCE_RIGHT:default:return n}}},{key:"extractInput",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._value.length;return(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).raw&&this._isRawInput&&this._value.slice(t,e)||""}},{key:"_appendChar",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=new Ut;if(this._value)return n;var u=this.char===t[0]&&(this.isUnmasking||e.input||e.raw)&&!e.tail;return u&&(n.rawInserted=this.char),this._value=n.inserted=this.char,this._isRawInput=u&&(e.raw||e.input),n}},{key:"_appendPlaceholder",value:function(){var t=new Ut;return this._value?t:(this._value=t.inserted=this.char,t)}},{key:"extractTail",value:function(){arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.value.length;return new Yt("")}},{key:"appendTail",value:function(t){return Nt(t)&&(t=new Yt(String(t))),t.appendTo(this)}},{key:"append",value:function(t,e,n){var u=this._appendChar(t,e);return null!=n&&(u.tailShift+=this.appendTail(n).tailShift),u}},{key:"doCommit",value:function(){}},{key:"value",get:function(){return this._value}},{key:"unmaskedValue",get:function(){return this.isUnmasking?this.value:""}},{key:"isComplete",get:function(){return!0}},{key:"state",get:function(){return{_value:this._value,_isRawInput:this._isRawInput}},set:function(t){Bt(this,t)}}]),t}(),Qt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Ft(this,t),this.chunks=e,this.from=n}return bt(t,[{key:"toString",value:function(){return this.chunks.map(String).join("")}},{key:"extend",value:function(e){if(String(e)){Nt(e)&&(e=new Yt(String(e)));var n=this.chunks[this.chunks.length-1],u=n&&(n.stop===e.stop||null==e.stop)&&e.from===n.from+n.toString().length;if(e instanceof Yt)u?n.extend(e.toString()):this.chunks.push(e);else if(e instanceof t){if(null==e.stop)for(var i;e.chunks.length&&null==e.chunks[0].stop;)(i=e.chunks.shift()).from+=e.from,this.extend(i);e.toString()&&(e.stop=e.blockIndex,this.chunks.push(e))}}}},{key:"appendTo",value:function(e){if(!(e instanceof Gt.IMask.MaskedPattern))return new Yt(this.toString()).appendTo(e);for(var n=new Ut,u=0;u=0)&&n.aggregate(e._appendPlaceholder(a)),s=i instanceof t&&e._blocks[a]),s){var o=s.appendTail(i);o.skip=!1,n.aggregate(o),e._value+=o.inserted;var l=i.toString().slice(o.rawInserted.length);l&&n.aggregate(e.append(l,{tail:!0}))}else n.aggregate(e.append(i.toString(),{tail:!0}))}return n}},{key:"shiftBefore",value:function(t){if(this.from>=t||!this.chunks.length)return"";for(var e=t-this.from,n=0;n0&&void 0!==arguments[0]?arguments[0]:{};return Ft(this,e),t.definitions=Bt({},Kt,t.definitions),Mt(this,Tt(e).call(this,Dt({},e.DEFAULTS,t)))}return wt(e,Zt),bt(e,[{key:"_update",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t.definitions=Bt({},this.definitions,t.definitions),It(Tt(e.prototype),"_update",this).call(this,t),this._rebuildMask()}},{key:"_rebuildMask",value:function(){var t=this,n=this.definitions;this._blocks=[],this._stops=[],this._maskedBlocks={};var u=this.mask;if(u&&n)for(var i=!1,r=!1,a=0;a1&&void 0!==arguments[1]?arguments[1]:{},n=this._mapPosToBlock(this.value.length),u=new Ut;if(!n)return u;for(var i=n.index;;++i){var r=this._blocks[i];if(!r)break;var a=r._appendChar(t,e),s=a.skip;if(u.aggregate(a),s||a.rawInserted)break}return u}},{key:"extractTail",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.value.length,u=new Qt;return e===n?u:(this._forEachBlocksInRange(e,n,function(e,n,i,r){var a=e.extractTail(i,r);a.stop=t._findStopBefore(n),a.from=t._blockStartPos(n),a instanceof Qt&&(a.blockIndex=n),u.extend(a)}),u)}},{key:"extractInput",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.value.length,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(t===e)return"";var u="";return this._forEachBlocksInRange(t,e,function(t,e,i,r){u+=t.extractInput(i,r,n)}),u}},{key:"_findStopBefore",value:function(t){for(var e,n=0;n1&&void 0!==arguments[1]?arguments[1]:this.value.length,n=arguments.length>2?arguments[2]:void 0,u=this._mapPosToBlock(t);if(u){var i=this._mapPosToBlock(e),r=i&&u.index===i.index,a=u.offset,s=i&&r?i.offset:this._blocks[u.index].value.length;if(n(this._blocks[u.index],u.index,a,s),i&&!r){for(var o=u.index+1;o0&&void 0!==arguments[0]?arguments[0]:0,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.value.length,u=It(Tt(e.prototype),"remove",this).call(this,t,n);return this._forEachBlocksInRange(t,n,function(t,e,n,i){u.aggregate(t.remove(n,i))}),u}},{key:"nearestInputPos",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Lt.NONE,n=this._mapPosToBlock(t)||{index:0,offset:0},u=n.offset,i=n.index,r=this._blocks[i];if(!r)return t;var a=u;0!==a&&a0){var l=o-1,h=this._blocks[l],c=h.nearestInputPos(0,Lt.NONE);if(!h.value.length||c!==h.value.length)return this._blockStartPos(o)}for(var f=o;f=0;--A){var C=this._blocks[A],F=C.nearestInputPos(C.value.length,Lt.FORCE_LEFT);if(null!=m||C.value&&0===F||(m=A),0!==F){if(F!==C.value.length)return this._blockStartPos(A)+F;_=A;break}}if(e===Lt.LEFT)for(var E=_+1;E<=Math.min(o,this._blocks.length-1);++E){var b=this._blocks[E],S=b.nearestInputPos(0,Lt.NONE),B=this._blockStartPos(E)+S;if((!b.value.length&&B===this.value.length||S!==b.value.length)&&B<=t)return B}if(_>=0)return this._blockStartPos(_)+this._blocks[_].value.length;if(e===Lt.FORCE_LEFT||this.lazy&&!this.extractInput()&&!function(t){if(!t)return!1;var e=t.value;return!e||t.nearestInputPos(0,Lt.NONE)!==e.length}(this._blocks[o]))return 0;if(null!=m)return this._blockStartPos(m);for(var D=o;D=0;--N){var L=this._blocks[N],H=L.nearestInputPos(L.value.length,Lt.LEFT);if(0!==H){var G=this._blockStartPos(N)+H;if(G>=t)return G;break}}}return t}},{key:"maskedBlock",value:function(t){return this.maskedBlocks(t)[0]}},{key:"maskedBlocks",value:function(t){var e=this,n=this._maskedBlocks[t];return n?n.map(function(t){return e._blocks[t]}):[]}},{key:"state",get:function(){return Dt({},It(Tt(e.prototype),"state",this),{_blocks:this._blocks.map(function(t){return t.state})})},set:function(t){var n=t._blocks,u=Pt(t,["_blocks"]);this._blocks.forEach(function(t,e){return t.state=n[e]}),Vt(Tt(e.prototype),"state",u,this,!0)}},{key:"isComplete",get:function(){return this._blocks.every(function(t){return t.isComplete})}},{key:"unmaskedValue",get:function(){return this._blocks.reduce(function(t,e){return t+e.unmaskedValue},"")},set:function(t){Vt(Tt(e.prototype),"unmaskedValue",t,this,!0)}},{key:"value",get:function(){return this._blocks.reduce(function(t,e){return t+e.value},"")},set:function(t){Vt(Tt(e.prototype),"value",t,this,!0)}}]),e}();Xt.DEFAULTS={lazy:!0,placeholderChar:"_"},Xt.STOP_CHAR="`",Xt.ESCAPE_CHAR="\\",Xt.InputDefinition=qt,Xt.FixedDefinition=Jt;var te=function(t){function e(){return Ft(this,e),Mt(this,Tt(e).apply(this,arguments))}return wt(e,Xt),bt(e,[{key:"_update",value:function(t){t=Dt({to:this.to||0,from:this.from||0},t);var n=String(t.to).length;null!=t.maxLength&&(n=Math.max(n,t.maxLength)),t.maxLength=n;for(var u=String(t.from).padStart(n,"0"),i=String(t.to).padStart(n,"0"),r=0;r1&&void 0!==arguments[1]?arguments[1]:{};if(t=It(Tt(e.prototype),"doPrepare",this).call(this,t,n).replace(/\D/g,""),!this.autofix)return t;for(var u=String(this.from).padStart(this.maxLength,"0"),i=String(this.to).padStart(this.maxLength,"0"),r=this.value,a="",s=0;sthis.to?a+=i[o.length-1]:a+=t[s]}return a}},{key:"doValidate",value:function(){var t,n=this.value;if(-1===n.search(/[^0]/)&&n.length<=this._matchFrom)return!0;for(var u=jt(this.boundaries(n),2),i=u[0],r=u[1],a=arguments.length,s=new Array(a),o=0;o=0&&this._listeners[t].splice(n,1),this}},{key:"_onInput",value:function(){if(this._abortUpdateCursor(),!this._selection)return this.updateValue();var t=new zt(this.el.value,this.cursorPos,this.value,this._selection),e=this.masked.rawInputValue,n=this.masked.splice(t.startChangePos,t.removed.length,t.inserted,t.removeDirection).offset,u=e===this.masked.rawInputValue?t.removeDirection:Lt.NONE,i=this.masked.nearestInputPos(t.startChangePos+n,u);this.updateControl(),this.updateCursor(i)}},{key:"_onChange",value:function(){this.value!==this.el.value&&this.updateValue(),this.masked.doCommit(),this.updateControl(),this._saveSelection()}},{key:"_onDrop",value:function(t){t.preventDefault(),t.stopPropagation()}},{key:"_onFocus",value:function(t){this.selectionStart===this.cursorPos&&(this._selection&&(this.cursorPos=this._selection.end),this.alignCursorFriendly())}},{key:"destroy",value:function(){this._unbindEvents(),this._listeners.length=0,delete this.el}},{key:"mask",get:function(){return this.masked.mask},set:function(t){if(!(null==t||t===this.masked.mask||t===Date&&this.masked instanceof ee))if(this.masked.constructor!==Wt(t)){var e=$t({mask:t});e.unmaskedValue=this.masked.unmaskedValue,this.masked=e}else this.masked.updateOptions({mask:t})}},{key:"value",get:function(){return this._value},set:function(t){this.masked.value=t,this.updateControl(),this.alignCursor()}},{key:"unmaskedValue",get:function(){return this._unmaskedValue},set:function(t){this.masked.unmaskedValue=t,this.updateControl(),this.alignCursor()}},{key:"typedValue",get:function(){return this.masked.typedValue},set:function(t){this.masked.typedValue=t,this.updateControl(),this.alignCursor()}},{key:"selectionStart",get:function(){return this._cursorChanging?this._changingCursorPos:this.el.selectionStart}},{key:"cursorPos",get:function(){return this._cursorChanging?this._changingCursorPos:this.el.selectionEnd},set:function(t){this.el.isActive&&(this.el.select(t,t),this._saveSelection())}}]),t}(),re=function(t){function e(){return Ft(this,e),Mt(this,Tt(e).apply(this,arguments))}return wt(e,Xt),bt(e,[{key:"_update",value:function(t){t.enum&&(t.mask="*".repeat(t.enum[0].length)),It(Tt(e.prototype),"_update",this).call(this,t)}},{key:"doValidate",value:function(){for(var t,n=this,u=arguments.length,i=new Array(u),r=0;r=0})&&(t=It(Tt(e.prototype),"doValidate",this)).call.apply(t,[this].concat(i))}}]),e}(),ae=function(t){function e(t){return Ft(this,e),Mt(this,Tt(e).call(this,Dt({},e.DEFAULTS,t)))}return wt(e,Zt),bt(e,[{key:"_update",value:function(t){It(Tt(e.prototype),"_update",this).call(this,t),this._updateRegExps()}},{key:"_updateRegExps",value:function(){var t="^"+(this.allowNegative?"[+|\\-]?":""),e=(this.scale?"("+Ht(this.radix)+"\\d{0,"+this.scale+"})?":"")+"$";this._numberRegExpInput=new RegExp(t+"(0|([1-9]+\\d*))?"+e),this._numberRegExp=new RegExp(t+"\\d*"+e),this._mapToRadixRegExp=new RegExp("["+this.mapToRadix.map(Ht).join("")+"]","g"),this._thousandsSeparatorRegExp=new RegExp(Ht(this.thousandsSeparator),"g")}},{key:"_removeThousandsSeparators",value:function(t){return t.replace(this._thousandsSeparatorRegExp,"")}},{key:"_insertThousandsSeparators",value:function(t){var e=t.split(this.radix);return e[0]=e[0].replace(/\B(?=(\d{3})+(?!\d))/g,this.thousandsSeparator),e.join(this.radix)}},{key:"doPrepare",value:function(t){for(var n,u=arguments.length,i=new Array(u>1?u-1:0),r=1;r1&&void 0!==arguments[1]&&arguments[1],n=0,u=0;u0&&void 0!==arguments[0]?arguments[0]:this._value;return this._separatorsCount(this._removeThousandsSeparators(t).length,!0)}},{key:"extractInput",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.value.length,u=arguments.length>2?arguments[2]:void 0,i=jt(this._adjustRangeWithSeparators(t,n),2);return t=i[0],n=i[1],this._removeThousandsSeparators(It(Tt(e.prototype),"extractInput",this).call(this,t,n,u))}},{key:"_appendCharRaw",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!this.thousandsSeparator)return It(Tt(e.prototype),"_appendCharRaw",this).call(this,t,n);var u=this._separatorsCountFromSlice(n.tail&&this._beforeTailState?this._beforeTailState._value:this._value);this._value=this._removeThousandsSeparators(this.value);var i=It(Tt(e.prototype),"_appendCharRaw",this).call(this,t,n);this._value=this._insertThousandsSeparators(this._value);var r=this._separatorsCountFromSlice(n.tail&&this._beforeTailState?this._beforeTailState._value:this._value);return i.tailShift+=(r-u)*this.thousandsSeparator.length,i}},{key:"_findSeparatorAround",value:function(t){if(this.thousandsSeparator){var e=t-this.thousandsSeparator.length+1,n=this.value.indexOf(this.thousandsSeparator,e);if(n<=t)return n}return-1}},{key:"_adjustRangeWithSeparators",value:function(t,e){var n=this._findSeparatorAround(t);n>=0&&(t=n);var u=this._findSeparatorAround(e);return u>=0&&(e=u+this.thousandsSeparator.length),[t,e]}},{key:"remove",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.value.length,n=jt(this._adjustRangeWithSeparators(t,e),2);t=n[0],e=n[1];var u=this.value.slice(0,t),i=this.value.slice(e),r=this._separatorsCount(u.length);this._value=this._insertThousandsSeparators(this._removeThousandsSeparators(u+i));var a=this._separatorsCountFromSlice(u);return new Ut({tailShift:(a-r)*this.thousandsSeparator.length})}},{key:"nearestInputPos",value:function(t,e){if(!this.thousandsSeparator)return t;switch(e){case Lt.NONE:case Lt.LEFT:case Lt.FORCE_LEFT:var n=this._findSeparatorAround(t-1);if(n>=0){var u=n+this.thousandsSeparator.length;if(t=0)return i+this.thousandsSeparator.length}return t}},{key:"doValidate",value:function(t){var n=(t.input?this._numberRegExpInput:this._numberRegExp).test(this._removeThousandsSeparators(this.value));if(n){var u=this.number;n=n&&!isNaN(u)&&(null==this.min||this.min>=0||this.min<=this.number)&&(null==this.max||this.max<=0||this.number<=this.max)}return n&&It(Tt(e.prototype),"doValidate",this).call(this,t)}},{key:"doCommit",value:function(){if(this.value){var t=this.number,n=t;null!=this.min&&(n=Math.max(n,this.min)),null!=this.max&&(n=Math.min(n,this.max)),n!==t&&(this.unmaskedValue=String(n));var u=this.value;this.normalizeZeros&&(u=this._normalizeZeros(u)),this.padFractionalZeros&&(u=this._padFractionalZeros(u)),this._value=u}It(Tt(e.prototype),"doCommit",this).call(this)}},{key:"_normalizeZeros",value:function(t){var e=this._removeThousandsSeparators(t).split(this.radix);return e[0]=e[0].replace(/^(\D*)(0*)(\d*)/,function(t,e,n,u){return e+u}),t.length&&!/\d$/.test(e[0])&&(e[0]=e[0]+"0"),e.length>1&&(e[1]=e[1].replace(/0*$/,""),e[1].length||(e.length=1)),this._insertThousandsSeparators(e.join(this.radix))}},{key:"_padFractionalZeros",value:function(t){if(!t)return t;var e=t.split(this.radix);return e.length<2&&e.push(""),e[1]=e[1].padEnd(this.scale,"0"),e.join(this.radix)}},{key:"unmaskedValue",get:function(){return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix,".")},set:function(t){Vt(Tt(e.prototype),"unmaskedValue",t.replace(".",this.radix),this,!0)}},{key:"number",get:function(){return Number(this.unmaskedValue)},set:function(t){this.unmaskedValue=String(t)}},{key:"typedValue",get:function(){return this.number},set:function(t){this.number=t}},{key:"allowNegative",get:function(){return this.signed||null!=this.min&&this.min<0||null!=this.max&&this.max<0}}]),e}();ae.DEFAULTS={radix:",",thousandsSeparator:"",mapToRadix:["."],scale:2,signed:!1,normalizeZeros:!0,padFractionalZeros:!1};var se=function(t){function e(){return Ft(this,e),Mt(this,Tt(e).apply(this,arguments))}return wt(e,Zt),bt(e,[{key:"_update",value:function(t){t.mask&&(t.validate=function(e){return e.search(t.mask)>=0}),It(Tt(e.prototype),"_update",this).call(this,t)}}]),e}(),oe=function(t){function e(){return Ft(this,e),Mt(this,Tt(e).apply(this,arguments))}return wt(e,Zt),bt(e,[{key:"_update",value:function(t){t.mask&&(t.validate=t.mask),It(Tt(e.prototype),"_update",this).call(this,t)}}]),e}(),le=function(t){function e(t){var n;return Ft(this,e),(n=Mt(this,Tt(e).call(this,Dt({},e.DEFAULTS,t)))).currentMask=null,n}return wt(e,Zt),bt(e,[{key:"_update",value:function(t){It(Tt(e.prototype),"_update",this).call(this,t),"mask"in t&&(this.compiledMasks=Array.isArray(t.mask)?t.mask.map(function(t){return $t(t)}):[])}},{key:"_appendCharRaw",value:function(){var t,e=this._applyDispatch.apply(this,arguments);this.currentMask&&e.aggregate((t=this.currentMask)._appendChar.apply(t,arguments));return e}},{key:"_applyDispatch",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.tail&&this._beforeTailState?this._beforeTailState._value:this.value,u=this.rawInputValue,i=e.tail&&this._beforeTailState?this._beforeTailState._rawInputValue:u,r=u.slice(i.length),a=this.currentMask,s=new Ut,o=a&&a.state,l=a&&a._beforeTailState;if(this.currentMask=this.doDispatch(t,e),this.currentMask)if(this.currentMask!==a){this.currentMask.reset();var h=this.currentMask.append(i,{raw:!0});s.tailShift=h.inserted.length-n.length,r&&(s.tailShift+=this.currentMask.append(r,{raw:!0,tail:!0}).tailShift)}else this.currentMask.state=o,this.currentMask._beforeTailState=l;return s}},{key:"doDispatch",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.dispatch(t,this,e)}},{key:"doValidate",value:function(){for(var t,n,u=arguments.length,i=new Array(u),r=0;r1&&void 0!==arguments[1]?arguments[1]:{};return new ie(t,e)}return le.DEFAULTS={dispatch:function(t,e,n){if(e.compiledMasks.length){var u=e.rawInputValue,i=e.compiledMasks.map(function(e,i){return e.rawInputValue=u,e.append(t,n),{weight:e.rawInputValue.length,index:i}});return i.sort(function(t,e){return e.weight-t.weight}),e.compiledMasks[i[0].index]}}},he.InputMask=ie,he.Masked=Zt,he.MaskedPattern=Xt,he.MaskedEnum=re,he.MaskedRange=te,he.MaskedNumber=ae,he.MaskedDate=ee,he.MaskedRegExp=se,he.MaskedFunction=oe,he.MaskedDynamic=le,he.createMask=$t,he.MaskElement=ne,he.HTMLMaskElement=ue,Gt.IMask=he,he}); -//# sourceMappingURL=imask.min.js.map diff --git a/static/libs/imask/imask.min.js.map b/static/libs/imask/imask.min.js.map deleted file mode 100644 index 8481f5144af3d25b3075df2f3d105ab891e01d8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177108 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
    i- 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 elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - - - - var preservedScriptAttributes = { - type: true, - src: true, - noModule: true - }; - - function DOMEval( code, doc, node ) { - doc = doc || document; - - var i, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - if ( node[ i ] ) { - script[ i ] = node[ i ]; - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.3.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android <=4.0 only - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - - if ( copyIsArray ) { - copyIsArray = false; - clone = src && Array.isArray( src ) ? src : []; - - } else { - clone = src && jQuery.isPlainObject( src ) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - - /* eslint-disable no-unused-vars */ - // See https://github.com/eslint/eslint/issues/6125 - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a global context - globalEval: function( code ) { - DOMEval( code ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // Support: Android <=4.0 only - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.3 - * https://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2016-08-08 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - disabledAncestor = addCombinator( - function( elem ) { - return elem.disabled === true && ("form" in elem || "label" in elem); - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { - - // ID selector - if ( (m = match[1]) ) { - - // Document context - if ( nodeType === 9 ) { - if ( (elem = context.getElementById( m )) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && (elem = newContext.getElementById( m )) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( (m = match[3]) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !compilerCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - - if ( nodeType !== 1 ) { - newContext = context; - newSelector = selector; - - // qSA looks outside Element context, which is not what we want - // Thanks to Andrew Dupont for this workaround technique - // Support: IE <=8 - // Exclude object elements - } else if ( context.nodeName.toLowerCase() !== "object" ) { - - // Capture the context ID, setting it first if necessary - if ( (nid = context.getAttribute( "id" )) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", (nid = expando) ); - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[i] = "#" + nid + " " + toSelector( groups[i] ); - } - newSelector = groups.join( "," ); - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key + " " ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement("fieldset"); - - try { - return !!fn( el ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - disabledAncestor( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = elem && (elem.ownerDocument || elem).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9-11, Edge - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - if ( preferredDoc !== document && - (subWindow = document.defaultView) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert(function( el ) { - el.className = "i"; - return !el.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( el ) { - el.appendChild( document.createComment("") ); - return !el.getElementsByTagName("*").length; - }); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - }); - - // ID filter and find - if ( support.getById ) { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute("id") === attrId; - }; - }; - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( (elem = elems[i++]) ) { - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( el ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll("[msallowcapture^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push("~="); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push(".#.+[+~]"); - } - }); - - assert(function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement("input"); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll(":enabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll(":disabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( el ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { - return -1; - } - if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === document ? -1 : - b === document ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - // Make sure that attribute selectors are quoted - expr = expr.replace( rattributeQuotes, "='$1']" ); - - if ( support.matchesSelector && documentIsHTML && - !compilerCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch (e) {} - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return (sel + "").replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[6] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); - }); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, what, argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( (node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - // Use previously-cached element index if available - if ( useCache ) { - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - // Don't keep the element (issue #299) - input[0] = null; - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo(function() { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( (tokens = []) ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push({ - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push({ - value: matched, - type: type, - matches: match - }); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( (oldCache = uniqueCache[ key ]) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); - } else { - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), - len = elems.length; - - if ( outermost ) { - outermostContext = context === document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - if ( !context && elem.ownerDocument !== document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context || document, xml) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( el ) { - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( el ) { - return el.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -return Sizzle; - -})( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( nodeName( elem, "iframe" ) ) { - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - jQuery.contains( elem.ownerDocument, elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - -var swap = function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // Support: IE <=9 only - option: [ 1, "" ], - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
    " ], - col: [ 2, "", "
    " ], - tr: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - - _default: [ 0, "", "" ] -}; - -// Support: IE <=9 only -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, contains, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -} )(); -var documentElement = document.documentElement; - - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 only -// See #13393 for more info -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = {}; - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - // Make a writable jQuery.Event from the native event object - var event = jQuery.event.fix( nativeEvent ); - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or 2) have namespace(s) - // a subset or equal to those in the bound event (both can have no namespace). - if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - this.focus(); - return false; - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - /* eslint-disable max-len */ - - // See https://github.com/eslint/eslint/issues/3229 - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, - - /* eslint-enable */ - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.access( src ); - pdataCur = dataPriv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), doc, node ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html.replace( rxhtmlTag, "<$1>" ); - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = jQuery.contains( elem.ownerDocument, elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - div.style.position = "absolute"; - scrollboxSizeVal = div.offsetWidth === 36 || "absolute"; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }, - - cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style; - -// Return a css property mapped to a potentially vendor prefixed property -function vendorPropName( name ) { - - // Shortcut for names that are not vendor prefixed - if ( name in emptyStyle ) { - return name; - } - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a property mapped along what jQuery.cssProps suggests or to -// a vendor prefixed property. -function finalPropName( name ) { - var ret = jQuery.cssProps[ name ]; - if ( !ret ) { - ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; - } - return ret; -} - -function setPositiveNumber( elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - ) ); - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - val = curCSS( elem, dimension, styles ), - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox; - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - // Check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = valueIsBorderBox && - ( support.boxSizingReliable() || val === elem.style[ dimension ] ); - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - if ( val === "auto" || - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) { - - val = elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ]; - - // offsetWidth/offsetHeight provide border-box values - valueIsBorderBox = true; - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - if ( type === "number" ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra && boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ); - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && support.scrollboxSize() === styles.position ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && - ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || - jQuery.cssHooks[ tween.prop ] ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = Date.now(); - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; - } - } - match = responseHeaders[ key.toLowerCase() ]; - } - return match == null ? null : match; - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - - -jQuery._evalUrl = function( url ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - "throws": true - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain requests - if ( s.crossDomain ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " + {% endfor %} - + - + From 0a99205e188d87c165d8497c72fd161bc70e08da Mon Sep 17 00:00:00 2001 From: codecalm Date: Sun, 20 Oct 2019 12:24:48 +0200 Subject: [PATCH 10/70] wrong directory in js paths fix --- pages/_includes/layout/js.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/_includes/layout/js.html b/pages/_includes/layout/js.html index d9b1cfbb6..1036cb54f 100644 --- a/pages/_includes/layout/js.html +++ b/pages/_includes/layout/js.html @@ -6,7 +6,7 @@ {% for lib in site.data.libs %} - + {% endfor %} From 0b7470b3219ba20e11c7fa982a1d2692d9d6eac9 Mon Sep 17 00:00:00 2001 From: codecalm Date: Sun, 20 Oct 2019 12:55:52 +0200 Subject: [PATCH 11/70] dirname fix in libs --- build/copy-libs.js | 8 +++++--- pages/_includes/layout/css.html | 6 +++--- pages/_includes/layout/js.html | 6 +++--- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/build/copy-libs.js b/build/copy-libs.js index 424747a62..27055c2ac 100755 --- a/build/copy-libs.js +++ b/build/copy-libs.js @@ -1,7 +1,9 @@ -const libs = require('../pages/_data/libs'); -const { exec } = require('child_process'); +const libs = require('../pages/_data/libs'), + path = require('path'), + { exec } = require('child_process'); libs.forEach(function (lib) { - let cmd = `mkdir -p "dist/libs/${lib}" && cp -r node_modules/${lib} dist/libs/${lib}`; + let dirname = path.dirname(lib); + let cmd = `mkdir -p "dist/libs/${dirname}" && cp -r node_modules/${lib} dist/libs/${lib}`; exec(cmd) }); diff --git a/pages/_includes/layout/css.html b/pages/_includes/layout/css.html index a7342051f..6949987e9 100644 --- a/pages/_includes/layout/css.html +++ b/pages/_includes/layout/css.html @@ -1,3 +1,3 @@ - - - + + + diff --git a/pages/_includes/layout/js.html b/pages/_includes/layout/js.html index 1036cb54f..8912b13bc 100644 --- a/pages/_includes/layout/js.html +++ b/pages/_includes/layout/js.html @@ -6,13 +6,13 @@ {% for lib in site.data.libs %} - + {% endfor %} - + - + From d3299d42422647ecaa01f6bad77f9bbc687d42b6 Mon Sep 17 00:00:00 2001 From: onagurna Date: Mon, 21 Oct 2019 21:42:42 +0300 Subject: [PATCH 12/70] Fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cc4f31b44..4583b84ca 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ When completed, you'll be able to run the various commands provided from the com 3. Any change in `/pages` directory will build application and refresh the page. **Note**: -Run `npm run build` for rerforms a one off build application without refresh. +Run `npm run build` for reforms a one off build application without refresh. Open [http://localhost:3001](http://localhost:3001) to configure the Web server. ## Feature requests From a20750bf071d90eb1ebe34ef44a14427e0bf3a69 Mon Sep 17 00:00:00 2001 From: codecalm Date: Tue, 22 Oct 2019 20:20:05 +0200 Subject: [PATCH 13/70] jqvmap plugin, ui fixes --- build/copy-libs.js | 4 +++- js/tabler.js | 1 - package.json | 8 ++++---- pages/_data/libs.json | 28 +++++++++++++++++++--------- pages/_data/maps.yml | 31 ++++++++++--------------------- pages/_includes/js/maps.html | 21 +++++---------------- pages/_includes/layout/css.html | 10 ++++++++++ pages/_includes/layout/js.html | 12 ++++++------ pages/_includes/ui/map.html | 18 ++++++++++++++++++ pages/_layouts/base.html | 5 +++-- pages/maps.html | 21 ++++++++++++--------- scss/tabler.scss | 1 + scss/vendor/_jqvmap.scss | 17 +++++++++++++++++ 13 files changed, 108 insertions(+), 69 deletions(-) create mode 100644 pages/_includes/ui/map.html create mode 100644 scss/vendor/_jqvmap.scss diff --git a/build/copy-libs.js b/build/copy-libs.js index 27055c2ac..f4e6525cc 100755 --- a/build/copy-libs.js +++ b/build/copy-libs.js @@ -2,7 +2,9 @@ const libs = require('../pages/_data/libs'), path = require('path'), { exec } = require('child_process'); -libs.forEach(function (lib) { +const all_libs = libs.js.concat(libs.css); + +all_libs.forEach(function (lib) { let dirname = path.dirname(lib); let cmd = `mkdir -p "dist/libs/${dirname}" && cp -r node_modules/${lib} dist/libs/${lib}`; exec(cmd) diff --git a/js/tabler.js b/js/tabler.js index 0942a6762..e3e0914c8 100644 --- a/js/tabler.js +++ b/js/tabler.js @@ -134,7 +134,6 @@ $(document).ready(function() { (function() { const elements = document.querySelectorAll('[data-toggle="autosize"]'); - console.log('elements.length', elements.length); if (elements.length) { elements.forEach(function(element) { console.log('1', element); diff --git a/package.json b/package.json index 5b3c8fb20..44ada661d 100644 --- a/package.json +++ b/package.json @@ -65,16 +65,16 @@ "clean-css-cli": "4.3.0", "cross-env": "6.0.3", "eslint": "6.5.1", - "eslint-config-xo": "0.27.1", + "eslint-config-xo": "0.27.2", "eslint-plugin-import": "2.18.2", "eslint-plugin-unicorn": "12.1.0", "http-server": "0.11.1", "icon-font-generator": "2.1.10", "node-sass": "4.12.0", - "nodemon": "1.19.3", + "nodemon": "1.19.4", "npm-run-all": "4.1.5", "postcss-cli": "6.1.3", - "rollup": "1.24.0", + "rollup": "1.25.1", "rollup-plugin-babel": "4.3.3", "rollup-plugin-babel-minify": "9.1.0", "rollup-plugin-commonjs": "10.1.0", @@ -94,8 +94,8 @@ "bootstrap": "twbs/bootstrap#8d56c19", "imask": "5.2.1", "jquery": "3.4.1", + "jqvmap": "1.5.1", "peity": "3.3.0", - "popper.js": "1.15.0", "selectize": "0.12.6" }, "bundlesize": [ diff --git a/pages/_data/libs.json b/pages/_data/libs.json index 4e1b409b1..296b41f79 100644 --- a/pages/_data/libs.json +++ b/pages/_data/libs.json @@ -1,9 +1,19 @@ -[ - "jquery/dist/jquery.min.js", - "bootstrap/dist/js/bootstrap.bundle.min.js", - "autosize/dist/autosize.min.js", - "imask/dist/imask.min.js", - "selectize/dist/js/standalone/selectize.min.js", - "apexcharts/dist/apexcharts.min.js", - "peity/jquery.peity.min.js" -] +{ + "js": [ + "jquery/dist/jquery.min.js", + "bootstrap/dist/js/bootstrap.bundle.min.js", + "autosize/dist/autosize.min.js", + "imask/dist/imask.min.js", + + "selectize/dist/js/standalone/selectize.min.js", + "apexcharts/dist/apexcharts.min.js", + "jqvmap/dist/jquery.vmap.min.js", + "jqvmap/dist/maps/jquery.vmap.world.js", + "jqvmap/dist/maps/jquery.vmap.usa.js", + "jqvmap/dist/maps/continents/jquery.vmap.europe.js", + "peity/jquery.peity.min.js" + ], + "css": [ + "jqvmap/dist/jqvmap.min.css" + ] +} diff --git a/pages/_data/maps.yml b/pages/_data/maps.yml index 92aaf601e..b74c2aaea 100644 --- a/pages/_data/maps.yml +++ b/pages/_data/maps.yml @@ -1,23 +1,12 @@ world: - map: "world_en" - backgroundColor: 'transparent' - borderColor: '#ffffff' - borderWidth: 0.25 - borderOpacity: 0.25 - color: 'rgba(120,130,140, 0.1)' - enableZoom: false - showTooltip: true - selectedColor: null - hoverColor: 'red' + title: World map + map: world_en -france: - map: 'france_fr' - backgroundColor: 'transparent' - borderColor: '#ffffff' - borderWidth: 0.25 - borderOpacity: 0.25 - color: 'rgba(120,130,140, 0.1)' - enableZoom: false - showTooltip: true - selectedColor: null - hoverColor: null \ No newline at end of file +europe: + title: Map of Europe + map: europe_en + zoom: true + +usa: + title: Map of USA + map: usa_en diff --git a/pages/_includes/js/maps.html b/pages/_includes/js/maps.html index c01fd575d..6feb3ef77 100644 --- a/pages/_includes/js/maps.html +++ b/pages/_includes/js/maps.html @@ -1,20 +1,9 @@ \ No newline at end of file + diff --git a/pages/_includes/layout/css.html b/pages/_includes/layout/css.html index 6949987e9..dc681ccf7 100644 --- a/pages/_includes/layout/css.html +++ b/pages/_includes/layout/css.html @@ -1,3 +1,13 @@ +{% if site.data.libs %} + +{% for lib in site.data.libs.css %} + +{% endfor %} +{% endif %} + + + + diff --git a/pages/_includes/layout/js.html b/pages/_includes/layout/js.html index 8912b13bc..928740860 100644 --- a/pages/_includes/layout/js.html +++ b/pages/_includes/layout/js.html @@ -4,15 +4,15 @@ }; - -{% for lib in site.data.libs %} - -{% endfor %} +{% if site.data.libs %} + + {% for lib in site.data.libs.js %} + + {% endfor %} +{% endif %} - - diff --git a/pages/_includes/ui/map.html b/pages/_includes/ui/map.html new file mode 100644 index 000000000..d2cc5cc03 --- /dev/null +++ b/pages/_includes/ui/map.html @@ -0,0 +1,18 @@ +{% assign id = include.map %} +{% assign height = include.height | default: 20 %} +{% assign data = site.data.maps[id] %} + +{% if data %} +
    + +{% endif %} diff --git a/pages/_layouts/base.html b/pages/_layouts/base.html index 4455d01d0..67724577a 100644 --- a/pages/_layouts/base.html +++ b/pages/_layouts/base.html @@ -26,9 +26,11 @@ {% endif %} - {% include layout/css.html %} {% include layout/og.html %} + {% include layout/css.html %} + {% include layout/js.html %} + document.body.style.display = 'block'; diff --git a/pages/maps.html b/pages/maps.html index e5154517d..de971f190 100644 --- a/pages/maps.html +++ b/pages/maps.html @@ -3,13 +3,16 @@ title: Maps page-title: Maps --- +
    + {% for map in site.data.maps %} +
    -{% for map in site.data.maps %} -{% assign title = map[0] %} -{% assign key = 'map-' | append: title %} - -
    - -{% include js/maps.html id=key data=map %} - -{% endfor %} +
    +
    + {% assign id = map[0] %} + {% include ui/map.html map=id %} +
    +
    +
    + {% endfor %} +
    diff --git a/scss/tabler.scss b/scss/tabler.scss index 6fe829974..45d21bf0f 100644 --- a/scss/tabler.scss +++ b/scss/tabler.scss @@ -50,6 +50,7 @@ @import "vendor/pace"; @import "vendor/selectize"; +@import "vendor/jqvmap"; @import "utils/border"; @import "utils/background"; diff --git a/scss/vendor/_jqvmap.scss b/scss/vendor/_jqvmap.scss new file mode 100644 index 000000000..19d74f453 --- /dev/null +++ b/scss/vendor/_jqvmap.scss @@ -0,0 +1,17 @@ +.jqvmap-zoomin, +.jqvmap-zoomout { + @extend .btn; + @extend .btn-sm; + @extend .btn-secondary; + height: auto; + width: auto; + left: .5rem; +} + +.jqvmap-zoomin { + top: .5rem; +} + +.jqvmap-zoomout { + top: 2rem; +} From 30388d2e32c6f469138ab0edc51b612c69ab6e3b Mon Sep 17 00:00:00 2001 From: codecalm Date: Tue, 22 Oct 2019 20:20:45 +0200 Subject: [PATCH 14/70] comma fix --- pages/_includes/ui/map.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/_includes/ui/map.html b/pages/_includes/ui/map.html index d2cc5cc03..df9632fc2 100644 --- a/pages/_includes/ui/map.html +++ b/pages/_includes/ui/map.html @@ -10,7 +10,7 @@ map: '{{ data.map }}', backgroundColor: 'transparent', color: 'rgba(120, 130, 140, .1)', - borderColor: 'transparent' + borderColor: 'transparent', {% if data.zoom %}enableZoom: true,{% endif %} }); }); From 04488c4036528de4cbd224974fa8577630148c4d Mon Sep 17 00:00:00 2001 From: codecalm Date: Tue, 22 Oct 2019 21:17:02 +0200 Subject: [PATCH 15/70] maps data --- pages/_data/maps.yml | 1 + pages/_includes/cards/map.html | 12 ++++++++++++ pages/_includes/layout/homepage.html | 7 +++++++ pages/_includes/ui/map.html | 13 ++++++++++++- scss/vendor/_jqvmap.scss | 8 ++++++++ 5 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 pages/_includes/cards/map.html diff --git a/pages/_data/maps.yml b/pages/_data/maps.yml index b74c2aaea..903220127 100644 --- a/pages/_data/maps.yml +++ b/pages/_data/maps.yml @@ -1,6 +1,7 @@ world: title: World map map: world_en + values: '{"af":16,"al":11,"dz":158,"ao":85,"ag":1,"ar":351,"am":8,"au":1219,"at":366,"az":52,"bs":7,"bh":21,"bd":105,"bb":3,"by":52,"be":461,"bz":1,"bj":6,"bt":1,"bo":19,"ba":16,"bw":12,"br":2023,"bn":11,"bg":44,"bf":8,"bi":1,"kh":11,"cm":21,"ca":1563,"cv":1,"cf":2,"td":7,"cl":199,"cn":5745,"co":283,"km":0,"cd":12,"cg":11,"cr":35,"ci":22,"hr":59,"cy":22,"cz":195,"dk":304,"dj":1,"dm":0,"do":50,"ec":61,"eg":216,"sv":21,"gq":14,"er":2,"ee":19,"et":30,"fj":3,"fi":231,"fr":2555,"ga":12,"gm":1,"ge":11,"de":3305,"gh":18,"gr":305,"gd":0,"gt":40,"gn":4,"gw":0,"gy":2,"ht":6,"hn":15,"hk":226,"hu":132,"is":12,"in":1430,"id":695,"ir":337,"iq":84,"ie":204,"il":201,"it":2036,"jm":13,"jp":5390,"jo":27,"kz":129,"ke":32,"ki":0,"kr":986,"undefined":5,"kw":117,"kg":4,"la":6,"lv":23,"lb":39,"ls":1,"lr":0,"ly":77,"lt":35,"lu":52,"mk":9,"mg":8,"mw":5,"my":218,"mv":1,"ml":9,"mt":7,"mr":3,"mu":9,"mx":1004,"md":5,"mn":5,"me":3,"ma":91,"mz":10,"mm":35,"na":11,"np":15,"nl":770,"nz":138,"ni":6,"ne":5,"ng":206,"no":413,"om":53,"pk":174,"pa":27,"pg":8,"py":17,"pe":153,"ph":189,"pl":438,"pt":223,"qa":126,"ro":158,"ru":1476,"rw":5,"ws":0,"st":0,"sa":434,"sn":12,"rs":38,"sc":0,"sl":1,"sg":217,"sk":86,"si":46,"sb":0,"za":354,"es":1374,"lk":48,"kn":0,"lc":1,"vc":0,"sd":65,"sr":3,"sz":3,"se":444,"ch":522,"sy":59,"tw":426,"tj":5,"tz":22,"th":312,"tl":0,"tg":3,"to":0,"tt":21,"tn":43,"tr":729,"tm":0,"ug":17,"ua":136,"ae":239,"gb":2258,"us":4624,"uy":40,"uz":37,"vu":0,"ve":285,"vn":101,"ye":30,"zm":15,"zw":5}' europe: title: Map of Europe diff --git a/pages/_includes/cards/map.html b/pages/_includes/cards/map.html new file mode 100644 index 000000000..c0f0e988e --- /dev/null +++ b/pages/_includes/cards/map.html @@ -0,0 +1,12 @@ +{% assign map = include.map | default: "world" %} +
    + {% if include.title %} +
    +

    {{ include.title }}

    +
    + {% endif %} +
    + + {% include ui/map.html map=map color="blue" %} +
    +
    diff --git a/pages/_includes/layout/homepage.html b/pages/_includes/layout/homepage.html index d74af3e22..95e003c03 100644 --- a/pages/_includes/layout/homepage.html +++ b/pages/_includes/layout/homepage.html @@ -49,6 +49,13 @@
+
+ +
+
+ {% include cards/map.html title="Top users" %} +
+
{% include cards/small-stats-3.html number=43 title="New Tickets" percentage=6 %}
diff --git a/pages/_includes/ui/map.html b/pages/_includes/ui/map.html index df9632fc2..075096765 100644 --- a/pages/_includes/ui/map.html +++ b/pages/_includes/ui/map.html @@ -1,6 +1,7 @@ {% assign id = include.map %} {% assign height = include.height | default: 20 %} {% assign data = site.data.maps[id] %} +{% assign color = include.color | default: data.color | default: 'green' %} {% if data %}
@@ -10,8 +11,18 @@ map: '{{ data.map }}', backgroundColor: 'transparent', color: 'rgba(120, 130, 140, .1)', - borderColor: 'transparent', + borderColor: 'transparent', {% if data.zoom %}enableZoom: true,{% endif %} + {% if data.values %} + scaleColors: [tabler.colorVariation('{{ color }}', 'lightest'), tabler.colors.{{ color }}], + normalizeFunction: 'polynomial', + values: (chart_data = {{ data.values }}), + onLabelShow: function (event, label, code) { + if (chart_data[code] > 0) { + label.append(': ' + chart_data[code] + ''); + } + }, + {% endif %} }); }); diff --git a/scss/vendor/_jqvmap.scss b/scss/vendor/_jqvmap.scss index 19d74f453..43ab9b345 100644 --- a/scss/vendor/_jqvmap.scss +++ b/scss/vendor/_jqvmap.scss @@ -15,3 +15,11 @@ .jqvmap-zoomout { top: 2rem; } + +.jqvmap-label { + font-family: inherit; + font-size: $h6-font-size; + line-height: 1; + padding: .25rem; + background: $dark; +} From 00dcd2d9d5d18adb2102a1a8bf813ee81ae80cde Mon Sep 17 00:00:00 2001 From: codecalm Date: Tue, 22 Oct 2019 23:32:28 +0200 Subject: [PATCH 16/70] dropdowns page --- pages/_includes/ui/dropdown-menu.html | 33 +++++++++---- pages/dropdowns.html | 19 ++++++++ scss/_variables.scss | 6 +++ scss/ui/_dropdowns.scss | 69 +++++++++++++-------------- 4 files changed, 82 insertions(+), 45 deletions(-) create mode 100644 pages/dropdowns.html diff --git a/pages/_includes/ui/dropdown-menu.html b/pages/_includes/ui/dropdown-menu.html index b8f23db87..2ab0943a4 100644 --- a/pages/_includes/ui/dropdown-menu.html +++ b/pages/_includes/ui/dropdown-menu.html @@ -1,10 +1,25 @@ -{% assign items = include.items | default: "Action|Another action|Something else|-|Separated link" | split: "|" %} - \ No newline at end of file +
diff --git a/pages/_includes/cards/user-profile-4.html b/pages/_includes/cards/user-profile-4.html index ffb17128d..0a52e1c15 100644 --- a/pages/_includes/cards/user-profile-4.html +++ b/pages/_includes/cards/user-profile-4.html @@ -10,9 +10,9 @@
{{ p.email }}
{{ p.ssn }}
- {% include ui/icon-brand.html icon="facebook-f" class="mr-2 icon-filled text-facebook" %} - {% include ui/icon-brand.html icon="twitter" class="icon-filled text-twitter mx-2" %} - {% include ui/icon-brand.html icon="youtube" class="icon-filled text-youtube mx-2" %} + {% include ui/icon.html icon="brand/facebook" class="mr-2 text-facebook" %} + {% include ui/icon.html icon="brand/twitter" class="text-twitter mx-2" %} + {% include ui/icon.html icon="brand/youtube" class="text-youtube mx-2" %}
diff --git a/pages/_includes/layout/homepage.html b/pages/_includes/layout/homepage.html index 95e003c03..289d9dcf8 100644 --- a/pages/_includes/layout/homepage.html +++ b/pages/_includes/layout/homepage.html @@ -1,4 +1,4 @@ -
+
{% include cards/charts/sales.html %}
@@ -49,32 +49,30 @@
-
+
+
+
+ {% include cards/project-summary.html stage-color="red" %} +
+
+ {% include cards/project-summary.html title="UI Redesign" date="11 Nov 2019" stage="Final review" avatar-limit=3 avatar-offset=9 project-color="green" percentage=80 percentage-color="green" %} +
+
+ {% include cards/small-stats-3.html number=43 title="New Tickets" percentage=6 %} +
+
+ {% include cards/small-stats-3.html number="$95" title="Daily Earnings" percentage=-2 %} +
+
+ {% include cards/small-stats-3.html number=7 title="New Replies" percentage=9 %} +
+
-
+
{% include cards/map.html title="Top users" %}
-
- {% include cards/small-stats-3.html number=43 title="New Tickets" percentage=6 %} -
-
- {% include cards/small-stats-3.html number=17 title="Closed Today" percentage=-3 %} -
-
- {% include cards/small-stats-3.html number=7 title="New Replies" percentage=9 %} -
-
- {% include cards/small-stats-3.html number="27.3K" title="Followers" percentage=3 %} -
-
- {% include cards/small-stats-3.html number="$95" title="Daily Earnings" percentage=-2 %} -
-
- {% include cards/small-stats-3.html number=621 title="Products" percentage=-1 %} -
-
{% include cards/charts/card.html name="temperature" title="A" height=12 %}
@@ -125,7 +123,7 @@
{% comment %} -
+
{% for article in site.data.articles limit: 2 %}
{% include cards/blog-single.html article=article type="aside" %} @@ -134,7 +132,7 @@
{% endcomment %} -
+
{% comment %}
diff --git a/pages/_includes/layout/topnav.html b/pages/_includes/layout/topnav.html index bd3162ab8..ff27ea74c 100644 --- a/pages/_includes/layout/topnav.html +++ b/pages/_includes/layout/topnav.html @@ -1,4 +1,4 @@ -
-
\ No newline at end of file +
diff --git a/pages/store.html b/pages/store.html index 22143b2cd..234c39202 100644 --- a/pages/store.html +++ b/pages/store.html @@ -4,7 +4,7 @@ page-title: Store --- -
+
diff --git a/pages/users-list.html b/pages/users-list.html index 6452610d1..c49e6534d 100644 --- a/pages/users-list.html +++ b/pages/users-list.html @@ -5,7 +5,7 @@ page-title: Users done: true --- -
+
diff --git a/scss/_variables.scss b/scss/_variables.scss index 01f5ff4fe..819485d64 100644 --- a/scss/_variables.scss +++ b/scss/_variables.scss @@ -38,8 +38,8 @@ $lime: #7bd235 !default; $green: #5eba00 !default; $teal: #2bcbba !default; $cyan: #17a2b8 !default; -$black: #000 !default; -$white: #fff !default; +$black: #000000 !default; +$white: #ffffff !default; $light: #f5f7fb !default; $dark: #354052 !default; @@ -50,12 +50,15 @@ $body-color: $dark !default; $text-muted: #8a91a5 !default; $border-color: #dce3e9 !default; +$border-color-alpha: rgba(138, 160, 180, .3) !default; + +$hover-bg: rgba(138, 160, 180, 0.1) !default; $social-colors: ( "facebook": #3b5998, "twitter": #1da1f2, "google": #dc4e41, - "youtube": #f00, + "youtube": #ff0000, "vimeo": #1ab7ea, "dribbble": #ea4c89, "github": #181717, @@ -241,8 +244,15 @@ $close-font-size: 1.5rem !default; //dropdown $dropdown-item-padding-x: 1rem !default; $dropdown-font-size: $h5-font-size !default; -$dropdown-divider-bg: $border-color !default; +$dropdown-divider-bg: $border-color-alpha !default; $dropdown-padding-y: .5rem !default; +$dropdown-link-hover-bg: $hover-bg !default; +$dropdown-link-hover-color: inherit !default; + +//navbar +$navbar-bg: $white !default; +$navbar-border-color: $border-color !default; +$navbar-border-color: $border-color !default; //nav $nav-link-padding-y: .25rem !default; diff --git a/scss/layout/_navbar.scss b/scss/layout/_navbar.scss index 4be1b4c61..21a43a051 100644 --- a/scss/layout/_navbar.scss +++ b/scss/layout/_navbar.scss @@ -1,10 +1,8 @@ .navbar { - display: flex; - width: 100%; - min-height: 3.5rem; - color: $body-color; - background: #fff; - border-bottom: 1px solid $border-color; + border-bottom: 1px solid; + + background-color: $navbar-bg; + border-color: $navbar-border-color; .nav-link { color: inherit; @@ -86,11 +84,6 @@ Navbar toggler border: 0; } -.navbar-toggler-icon { - width: 2rem; - height: 2rem; -} - /* Sidebar */ diff --git a/scss/ui/_avatars.scss b/scss/ui/_avatars.scss index aa4695530..b226d8916 100644 --- a/scss/ui/_avatars.scss +++ b/scss/ui/_avatars.scss @@ -63,7 +63,7 @@ .avatar-list-stacked { .avatar { - margin-right: -.5em; + margin-right: -.5em !important; box-shadow: 0 0 0 2px #fff; @at-root .card-footer & { diff --git a/scss/ui/_badges.scss b/scss/ui/_badges.scss index 34ccf8edf..2ab7b9560 100644 --- a/scss/ui/_badges.scss +++ b/scss/ui/_badges.scss @@ -1,4 +1,7 @@ .badge { + @extend .subheader; + background: $gray-200; + @at-root a#{&} { color: $white; } diff --git a/scss/ui/_cards.scss b/scss/ui/_cards.scss index df8fdfa43..44ae47c0c 100644 --- a/scss/ui/_cards.scss +++ b/scss/ui/_cards.scss @@ -134,6 +134,7 @@ } .card-progress { + height: .25rem; &:last-child { border-radius: 0 0 2px 2px; diff --git a/scss/utils/_colors.scss b/scss/utils/_colors.scss index 502f98042..de911800d 100644 --- a/scss/utils/_colors.scss +++ b/scss/utils/_colors.scss @@ -11,11 +11,6 @@ COLORS VARIATIONS .bg-#{$color}-dark { background: mix($value, #000, 80%); } .bg-#{$color}-darker { background: mix($value, #000, 40%); } .bg-#{$color}-darkest { background: mix($value, #000, 20%); } - - .bg-#{$color}-lt { - color: $value !important; - background: theme-color-lighter($value) !important; - } } } From 86a85250bc7ffe0e98cc0b7315a184adcc31cd26 Mon Sep 17 00:00:00 2001 From: codecalm Date: Fri, 25 Oct 2019 08:40:55 +0200 Subject: [PATCH 18/70] selectize plugin, sidenav init --- package.json | 2 +- pages/_data/libs.json | 6 +- pages/_data/menu.yml | 2 +- pages/_data/people.json | 272 +++++++-------- pages/_data/selects.yml | 38 +++ pages/_docs/autosize.md | 1 + pages/_includes/forms/form-elements-2.html | 31 +- pages/_includes/layout/sidenav.html | 4 +- pages/_includes/ui/form/selectize.html | 77 +++++ pages/_layouts/default.html | 4 +- pages/cards.html | 1 + pages/form-elements.html | 54 --- scss/ui/_typo.scss | 4 + scss/vendor/_pace.scss | 18 - scss/vendor/_selectize.scss | 364 +++------------------ 15 files changed, 310 insertions(+), 568 deletions(-) create mode 100644 pages/_data/selects.yml create mode 100644 pages/_includes/ui/form/selectize.html diff --git a/package.json b/package.json index 44ada661d..0acf9ebed 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "jquery": "3.4.1", "jqvmap": "1.5.1", "peity": "3.3.0", - "selectize": "0.12.6" + "selectize": "^0.12.6" }, "bundlesize": [ { diff --git a/pages/_data/libs.json b/pages/_data/libs.json index 296b41f79..f088df092 100644 --- a/pages/_data/libs.json +++ b/pages/_data/libs.json @@ -11,9 +11,11 @@ "jqvmap/dist/maps/jquery.vmap.world.js", "jqvmap/dist/maps/jquery.vmap.usa.js", "jqvmap/dist/maps/continents/jquery.vmap.europe.js", - "peity/jquery.peity.min.js" + "peity/jquery.peity.min.js", + "selectize/dist/js/selectize.min.js" ], "css": [ - "jqvmap/dist/jqvmap.min.css" + "jqvmap/dist/jqvmap.min.css", + "selectize/dist/css/selectize.css" ] } diff --git a/pages/_data/menu.yml b/pages/_data/menu.yml index d9c8388be..603303471 100644 --- a/pages/_data/menu.yml +++ b/pages/_data/menu.yml @@ -3,7 +3,7 @@ home: title: Home icon: home -form-elements: +forms: url: form-elements.html title: Form elements icon: check-square diff --git a/pages/_data/people.json b/pages/_data/people.json index 2acdf25c3..0a5f37532 100644 --- a/pages/_data/people.json +++ b/pages/_data/people.json @@ -23,7 +23,7 @@ "bitcoin_address": "1Fomujp67Pd2bdcz4DSkKePwfqwoBGkxmB", "birth_date": "04/12/1955", "ip_address": "156.98.195.172", - "photo": "/img/avatars/000m.jpg" + "photo": "img/avatars/000m.jpg" }, { "id": 2, @@ -49,7 +49,7 @@ "bitcoin_address": "1NvUquhGpiEqpedb4H2HCHawrPaG8i4zap", "birth_date": "20/04/1999", "ip_address": "207.39.45.122", - "photo": "/img/avatars/001m.jpg" + "photo": "img/avatars/001m.jpg" }, { "id": 3, @@ -75,7 +75,7 @@ "bitcoin_address": "1HsdjFVXjqSTnJG8XeK2Vods3ipKXC8qRL", "birth_date": "15/11/1953", "ip_address": "77.105.132.193", - "photo": "/img/avatars/002m.jpg" + "photo": "img/avatars/002m.jpg" }, { "id": 4, @@ -101,7 +101,7 @@ "bitcoin_address": "1Nc3EHi5yVFz2HzSh1do9jfr342JTndi2L", "birth_date": "15/10/1972", "ip_address": "179.194.172.88", - "photo": "/img/avatars/003m.jpg" + "photo": "img/avatars/003m.jpg" }, { "id": 5, @@ -127,7 +127,7 @@ "bitcoin_address": "1KvLamQQTdx2gPNruiZ6NdEzi3c92dYNRp", "birth_date": "17/06/1951", "ip_address": "121.26.43.156", - "photo": "/img/avatars/000f.jpg" + "photo": "img/avatars/000f.jpg" }, { "id": 6, @@ -153,7 +153,7 @@ "bitcoin_address": "1NYYDTwAXgAqe9cnagEWhHNA7Qr67YjWZ5", "birth_date": "21/07/1973", "ip_address": "112.193.142.49", - "photo": "/img/avatars/001f.jpg" + "photo": "img/avatars/001f.jpg" }, { "id": 7, @@ -179,7 +179,7 @@ "bitcoin_address": "1B4Z2mefCpudYsixuC1gZKzfXyp8224XwD", "birth_date": "01/05/1978", "ip_address": "18.191.234.41", - "photo": "/img/avatars/004m.jpg" + "photo": "img/avatars/004m.jpg" }, { "id": 8, @@ -205,7 +205,7 @@ "bitcoin_address": "156U97kC3NGgYnFUKcnKaW5qhfCDGyjHB9", "birth_date": "05/07/1991", "ip_address": "108.111.178.24", - "photo": "/img/avatars/002f.jpg" + "photo": "img/avatars/002f.jpg" }, { "id": 9, @@ -231,7 +231,7 @@ "bitcoin_address": "1SWhpRb8HWKELuFS5F5u59kqtTdSuucH3", "birth_date": "18/11/1978", "ip_address": "208.205.141.84", - "photo": "/img/avatars/003f.jpg" + "photo": "img/avatars/003f.jpg" }, { "id": 10, @@ -257,7 +257,7 @@ "bitcoin_address": "1MAkh5f9Em7A8Af8K4kpebxDWgq5mRreiR", "birth_date": "31/05/1959", "ip_address": "239.192.13.146", - "photo": "/img/avatars/005m.jpg" + "photo": "img/avatars/005m.jpg" }, { "id": 11, @@ -283,7 +283,7 @@ "bitcoin_address": "1BYZDvQbr6ycV4RQrwLAANYBc7JQ7zDPyB", "birth_date": "20/01/1965", "ip_address": "25.82.255.177", - "photo": "/img/avatars/006m.jpg" + "photo": "img/avatars/006m.jpg" }, { "id": 12, @@ -309,7 +309,7 @@ "bitcoin_address": "1J67rws2nf58UCaFMM7yUcbai4scPjziTi", "birth_date": "07/06/1965", "ip_address": "175.83.164.96", - "photo": "/img/avatars/004f.jpg" + "photo": "img/avatars/004f.jpg" }, { "id": 13, @@ -335,7 +335,7 @@ "bitcoin_address": "1BBixJ6D1NoqbveyVKrnAXrJ2uM4otDPQo", "birth_date": "10/02/1981", "ip_address": "59.136.129.215", - "photo": "/img/avatars/007m.jpg" + "photo": "img/avatars/007m.jpg" }, { "id": 14, @@ -361,7 +361,7 @@ "bitcoin_address": "14DNMF4e5A7TAfHW1YrU786kTA7F6HhJxd", "birth_date": "11/05/1989", "ip_address": "103.33.220.252", - "photo": "/img/avatars/008m.jpg" + "photo": "img/avatars/008m.jpg" }, { "id": 15, @@ -387,7 +387,7 @@ "bitcoin_address": "16SL9aTE3JpdH6EwMu1Mbvnp6mjK3opn3b", "birth_date": "30/01/1961", "ip_address": "116.61.159.252", - "photo": "/img/avatars/009m.jpg" + "photo": "img/avatars/009m.jpg" }, { "id": 16, @@ -413,7 +413,7 @@ "bitcoin_address": "19EV3M3R66VFHMSJTYS2edqND5P268iM6y", "birth_date": "05/09/1976", "ip_address": "7.233.47.79", - "photo": "/img/avatars/010m.jpg" + "photo": "img/avatars/010m.jpg" }, { "id": 17, @@ -439,7 +439,7 @@ "bitcoin_address": "1ExSCqr9LSx2mxS3c3vF12gHYT5xQAEj8U", "birth_date": "03/11/1980", "ip_address": "190.197.135.238", - "photo": "/img/avatars/005f.jpg" + "photo": "img/avatars/005f.jpg" }, { "id": 18, @@ -465,7 +465,7 @@ "bitcoin_address": "1NMXAmwzvX48gSk64qsXK7P1kJkTpACLNr", "birth_date": "15/07/1964", "ip_address": "35.152.226.151", - "photo": "/img/avatars/006f.jpg" + "photo": "img/avatars/006f.jpg" }, { "id": 19, @@ -491,7 +491,7 @@ "bitcoin_address": "1DZzgRGCNCfBBNQt6SVsf9m3y8a5oKfkeo", "birth_date": "18/04/1998", "ip_address": "236.25.68.167", - "photo": "/img/avatars/007f.jpg" + "photo": "img/avatars/007f.jpg" }, { "id": 20, @@ -517,7 +517,7 @@ "bitcoin_address": "14ywuL4HTuEHrbGeDisXESN46o5C3ENAKw", "birth_date": "22/05/1981", "ip_address": "223.52.68.90", - "photo": "/img/avatars/008f.jpg" + "photo": "img/avatars/008f.jpg" }, { "id": 21, @@ -543,7 +543,7 @@ "bitcoin_address": "1CsBw6VN8MC7uNDQpqHp8n4UAsHbjfC5B1", "birth_date": "10/05/1973", "ip_address": "127.79.183.160", - "photo": "/img/avatars/009f.jpg" + "photo": "img/avatars/009f.jpg" }, { "id": 22, @@ -569,7 +569,7 @@ "bitcoin_address": "1JU7QLVsLVQFV329rnuPDq56sC2EZmsRxW", "birth_date": "07/12/1994", "ip_address": "107.205.68.194", - "photo": "/img/avatars/010f.jpg" + "photo": "img/avatars/010f.jpg" }, { "id": 23, @@ -595,7 +595,7 @@ "bitcoin_address": "186cUsPpjvcKgK4HfcLGrxDTZunxji82jk", "birth_date": "21/03/1953", "ip_address": "106.182.202.103", - "photo": "/img/avatars/011m.jpg" + "photo": "img/avatars/011m.jpg" }, { "id": 24, @@ -621,7 +621,7 @@ "bitcoin_address": "1AgN5NVAgsdtKVHBWqjf4ayyN8wcZBzrRG", "birth_date": "12/02/1967", "ip_address": "54.16.119.126", - "photo": "/img/avatars/012m.jpg" + "photo": "img/avatars/012m.jpg" }, { "id": 25, @@ -647,7 +647,7 @@ "bitcoin_address": "13yBegJnC76GAu31fM8EEkxfG4usXsSxL4", "birth_date": "13/01/1985", "ip_address": "62.213.39.184", - "photo": "/img/avatars/011f.jpg" + "photo": "img/avatars/011f.jpg" }, { "id": 26, @@ -673,7 +673,7 @@ "bitcoin_address": "1PTFDKo9kEwM5q7b4yY2J4upYhbUG63mXu", "birth_date": "19/08/1970", "ip_address": "96.127.127.192", - "photo": "/img/avatars/012f.jpg" + "photo": "img/avatars/012f.jpg" }, { "id": 27, @@ -699,7 +699,7 @@ "bitcoin_address": "14vEHyB6BnRc6QJ8zC1jjJKd38LA8RNTXs", "birth_date": "19/12/1994", "ip_address": "15.95.14.4", - "photo": "/img/avatars/013m.jpg" + "photo": "img/avatars/013m.jpg" }, { "id": 28, @@ -725,7 +725,7 @@ "bitcoin_address": "19BhKivMa1WizVK3VXcdhdsGQt5fyYfF3y", "birth_date": "14/10/1995", "ip_address": "102.138.19.104", - "photo": "/img/avatars/013f.jpg" + "photo": "img/avatars/013f.jpg" }, { "id": 29, @@ -751,7 +751,7 @@ "bitcoin_address": "1DqT7amUSs2cj4zqickvh9EeENCLdpVxhV", "birth_date": "04/04/1978", "ip_address": "0.216.229.213", - "photo": "/img/avatars/014f.jpg" + "photo": "img/avatars/014f.jpg" }, { "id": 30, @@ -777,7 +777,7 @@ "bitcoin_address": "1CYehF8FMjV9r9M8ymznPmMP5RkxLsPwwx", "birth_date": "07/01/1962", "ip_address": "123.77.5.192", - "photo": "/img/avatars/015f.jpg" + "photo": "img/avatars/015f.jpg" }, { "id": 31, @@ -803,7 +803,7 @@ "bitcoin_address": "18w22JWzFW3zqehHWMhtEQiRWnJ4XypvXC", "birth_date": "31/07/1977", "ip_address": "50.4.71.163", - "photo": "/img/avatars/014m.jpg" + "photo": "img/avatars/014m.jpg" }, { "id": 32, @@ -829,7 +829,7 @@ "bitcoin_address": "1MAXVBLubfkcRakoAGEKWuKpTRZYYC6cYV", "birth_date": "21/08/1979", "ip_address": "64.141.194.112", - "photo": "/img/avatars/016f.jpg" + "photo": "img/avatars/016f.jpg" }, { "id": 33, @@ -855,7 +855,7 @@ "bitcoin_address": "1BUa1UG1g1bPqo9vFL9BRwU4PjDHS3TF8P", "birth_date": "16/10/1997", "ip_address": "45.233.5.146", - "photo": "/img/avatars/015m.jpg" + "photo": "img/avatars/015m.jpg" }, { "id": 34, @@ -881,7 +881,7 @@ "bitcoin_address": "1xCZH1WLYacSw9oF6fPihGdiuHK1zFpYj", "birth_date": "13/05/1976", "ip_address": "34.8.102.23", - "photo": "/img/avatars/017f.jpg" + "photo": "img/avatars/017f.jpg" }, { "id": 35, @@ -907,7 +907,7 @@ "bitcoin_address": "12ss1a5ufGfevXQCDhsGcrL93L37eL2AK9", "birth_date": "20/09/1957", "ip_address": "246.79.222.37", - "photo": "/img/avatars/018f.jpg" + "photo": "img/avatars/018f.jpg" }, { "id": 36, @@ -933,7 +933,7 @@ "bitcoin_address": "1HCQcc8yTnPTbTosS3wVcPesVXG62v4jEW", "birth_date": "25/06/1953", "ip_address": "49.208.113.80", - "photo": "/img/avatars/016m.jpg" + "photo": "img/avatars/016m.jpg" }, { "id": 37, @@ -959,7 +959,7 @@ "bitcoin_address": "1HG6dPaeB5oCAf9xZTEwJa3pEybbHiCNvT", "birth_date": "15/09/1985", "ip_address": "133.90.80.143", - "photo": "/img/avatars/019f.jpg" + "photo": "img/avatars/019f.jpg" }, { "id": 38, @@ -985,7 +985,7 @@ "bitcoin_address": "15CBQ8dK16DKtB6DdWVDSTHtbN1bMsXdov", "birth_date": "22/05/1964", "ip_address": "100.88.202.172", - "photo": "/img/avatars/017m.jpg" + "photo": "img/avatars/017m.jpg" }, { "id": 39, @@ -1011,7 +1011,7 @@ "bitcoin_address": "12uYNFzwP3iGUWXeCuAyLfvMEcja145Y2b", "birth_date": "16/06/2000", "ip_address": "36.114.215.141", - "photo": "/img/avatars/018m.jpg" + "photo": "img/avatars/018m.jpg" }, { "id": 40, @@ -1037,7 +1037,7 @@ "bitcoin_address": "1GhQ9jZkj9dKeNwBoywm8BEhhZiogbPS3r", "birth_date": "22/10/1966", "ip_address": "129.182.202.166", - "photo": "/img/avatars/019m.jpg" + "photo": "img/avatars/019m.jpg" }, { "id": 41, @@ -1063,7 +1063,7 @@ "bitcoin_address": "1NaDMMutu7SjmnYFmtejFZsivqawwrxzzA", "birth_date": "28/03/1992", "ip_address": "66.247.227.142", - "photo": "/img/avatars/020m.jpg" + "photo": "img/avatars/020m.jpg" }, { "id": 42, @@ -1089,7 +1089,7 @@ "bitcoin_address": "14c7oRM97U1vBjcPvAV9aKa6G1uSZdhpXd", "birth_date": "24/05/1973", "ip_address": "74.226.130.120", - "photo": "/img/avatars/021m.jpg" + "photo": "img/avatars/021m.jpg" }, { "id": 43, @@ -1115,7 +1115,7 @@ "bitcoin_address": "1ARG48x1TvyGWdCpygygA9KYQ5DUamx4an", "birth_date": "01/08/1955", "ip_address": "152.130.188.54", - "photo": "/img/avatars/022m.jpg" + "photo": "img/avatars/022m.jpg" }, { "id": 44, @@ -1141,7 +1141,7 @@ "bitcoin_address": "14XQtTchfnTR7qkAJpmcRsaikarVXtvzRM", "birth_date": "21/08/1953", "ip_address": "155.156.252.5", - "photo": "/img/avatars/023m.jpg" + "photo": "img/avatars/023m.jpg" }, { "id": 45, @@ -1167,7 +1167,7 @@ "bitcoin_address": "12cUSvTsKSHs3AE4H5sDNadRRFaUs2yYF2", "birth_date": "10/06/1989", "ip_address": "193.229.97.16", - "photo": "/img/avatars/024m.jpg" + "photo": "img/avatars/024m.jpg" }, { "id": 46, @@ -1193,7 +1193,7 @@ "bitcoin_address": "1F3UbwGAyR5Vk1e796abNruyfsLahPS3KH", "birth_date": "20/01/1974", "ip_address": "197.173.231.214", - "photo": "/img/avatars/020f.jpg" + "photo": "img/avatars/020f.jpg" }, { "id": 47, @@ -1219,7 +1219,7 @@ "bitcoin_address": "1J3n44oNTYRZ5SfYrEkcwchesqWGX4h839", "birth_date": "28/04/1983", "ip_address": "43.176.240.39", - "photo": "/img/avatars/025m.jpg" + "photo": "img/avatars/025m.jpg" }, { "id": 48, @@ -1245,7 +1245,7 @@ "bitcoin_address": "1JeWzo8rZz9ZCrhapYsjUVguibCvV7x5m7", "birth_date": "12/03/1981", "ip_address": "53.69.104.136", - "photo": "/img/avatars/026m.jpg" + "photo": "img/avatars/026m.jpg" }, { "id": 49, @@ -1271,7 +1271,7 @@ "bitcoin_address": "164dZqofDWsekz2QGUX9rhf29jmZirnKdw", "birth_date": "30/07/1995", "ip_address": "125.147.218.229", - "photo": "/img/avatars/021f.jpg" + "photo": "img/avatars/021f.jpg" }, { "id": 50, @@ -1297,7 +1297,7 @@ "bitcoin_address": "13WJm9UperfK17JCeoJWXHijzcTDLfaLNr", "birth_date": "20/03/1987", "ip_address": "30.187.134.176", - "photo": "/img/avatars/022f.jpg" + "photo": "img/avatars/022f.jpg" }, { "id": 51, @@ -1323,7 +1323,7 @@ "bitcoin_address": "1AHm4WCeDD1KbYmi5UNHWBf5uWTgEzmVq5", "birth_date": "14/04/1978", "ip_address": "16.110.142.210", - "photo": "/img/avatars/023f.jpg" + "photo": "img/avatars/023f.jpg" }, { "id": 52, @@ -1349,7 +1349,7 @@ "bitcoin_address": "1LJhBBXQz1Q8c6nxxV7d3wUYivo97xiZee", "birth_date": "13/05/1995", "ip_address": "157.28.117.151", - "photo": "/img/avatars/027m.jpg" + "photo": "img/avatars/027m.jpg" }, { "id": 53, @@ -1375,7 +1375,7 @@ "bitcoin_address": "1AD3Vz9R9VNcePq3jPrp1RhDfjSvtqhK81", "birth_date": "06/09/1983", "ip_address": "24.249.88.94", - "photo": "/img/avatars/024f.jpg" + "photo": "img/avatars/024f.jpg" }, { "id": 54, @@ -1401,7 +1401,7 @@ "bitcoin_address": "137zghgG1Dm4uu4iVWfgDRVWaziKrN2UrX", "birth_date": "26/01/1998", "ip_address": "50.111.75.60", - "photo": "/img/avatars/025f.jpg" + "photo": "img/avatars/025f.jpg" }, { "id": 55, @@ -1427,7 +1427,7 @@ "bitcoin_address": "1EBHEjm191mefCDP9agWVkCYg1oEzbNAQN", "birth_date": "13/01/1977", "ip_address": "216.246.59.167", - "photo": "/img/avatars/026f.jpg" + "photo": "img/avatars/026f.jpg" }, { "id": 56, @@ -1453,7 +1453,7 @@ "bitcoin_address": "12r5ai6zFmCjprmTKHv1WqsbGYoNax3BSJ", "birth_date": "20/04/1974", "ip_address": "248.180.150.17", - "photo": "/img/avatars/028m.jpg" + "photo": "img/avatars/028m.jpg" }, { "id": 57, @@ -1479,7 +1479,7 @@ "bitcoin_address": "1HxQ6KdnHwEtfQsE8Kzd8KChZkNXpkzEp8", "birth_date": "14/09/1966", "ip_address": "214.245.182.176", - "photo": "/img/avatars/027f.jpg" + "photo": "img/avatars/027f.jpg" }, { "id": 58, @@ -1505,7 +1505,7 @@ "bitcoin_address": "1B2AQC3btND9a6DFKoAfwhsBhXV3MgbM4i", "birth_date": "21/08/1999", "ip_address": "168.205.206.173", - "photo": "/img/avatars/029m.jpg" + "photo": "img/avatars/029m.jpg" }, { "id": 59, @@ -1531,7 +1531,7 @@ "bitcoin_address": "1PPyD6JJ1Mq1RHXATL51iq7wxV5TyTcRTF", "birth_date": "24/09/1999", "ip_address": "163.97.77.226", - "photo": "/img/avatars/030m.jpg" + "photo": "img/avatars/030m.jpg" }, { "id": 60, @@ -1557,7 +1557,7 @@ "bitcoin_address": "19vwYRD6TV3Krypb1fM1aC6wNDjfrjJcew", "birth_date": "26/06/1956", "ip_address": "158.220.87.62", - "photo": "/img/avatars/028f.jpg" + "photo": "img/avatars/028f.jpg" }, { "id": 61, @@ -1583,7 +1583,7 @@ "bitcoin_address": "1A2x9FSCCNFhV1UT1LrMYTBg1p6RbZVsXG", "birth_date": "01/05/1962", "ip_address": "11.151.91.237", - "photo": "/img/avatars/029f.jpg" + "photo": "img/avatars/029f.jpg" }, { "id": 62, @@ -1609,7 +1609,7 @@ "bitcoin_address": "15zhJTxRyejszLiswhtgN1qypF6tKmvbzw", "birth_date": "24/03/1972", "ip_address": "132.86.59.30", - "photo": "/img/avatars/030f.jpg" + "photo": "img/avatars/030f.jpg" }, { "id": 63, @@ -1635,7 +1635,7 @@ "bitcoin_address": "1FL2NCj78p6zvMuNftaYix5fWiTNxjBvUM", "birth_date": "06/05/1973", "ip_address": "88.200.145.169", - "photo": "/img/avatars/031m.jpg" + "photo": "img/avatars/031m.jpg" }, { "id": 64, @@ -1661,7 +1661,7 @@ "bitcoin_address": "1NoewbL8gqFufSowcj7N4dc4tkLUuFDQoY", "birth_date": "09/07/1966", "ip_address": "76.221.42.16", - "photo": "/img/avatars/031f.jpg" + "photo": "img/avatars/031f.jpg" }, { "id": 65, @@ -1687,7 +1687,7 @@ "bitcoin_address": "15My2pYdsJpHezkU2JbPxh8mETk7tVamN1", "birth_date": "19/07/1967", "ip_address": "24.195.247.197", - "photo": "/img/avatars/032f.jpg" + "photo": "img/avatars/032f.jpg" }, { "id": 66, @@ -1713,7 +1713,7 @@ "bitcoin_address": "1AysDUVJBrdL5mThwBX5cYHY38kzeRwf9e", "birth_date": "27/04/1969", "ip_address": "226.131.40.125", - "photo": "/img/avatars/033f.jpg" + "photo": "img/avatars/033f.jpg" }, { "id": 67, @@ -1739,7 +1739,7 @@ "bitcoin_address": "1DPfvLncV6uERKpQN2HTQ3iMoUkXfyqtn3", "birth_date": "23/12/1955", "ip_address": "66.234.138.134", - "photo": "/img/avatars/034f.jpg" + "photo": "img/avatars/034f.jpg" }, { "id": 68, @@ -1765,7 +1765,7 @@ "bitcoin_address": "1JfcXBGh8jECVBET3p6aVGEA647ysMVZn5", "birth_date": "04/07/1972", "ip_address": "34.118.13.140", - "photo": "/img/avatars/035f.jpg" + "photo": "img/avatars/035f.jpg" }, { "id": 69, @@ -1791,7 +1791,7 @@ "bitcoin_address": "1NQKbEzfUTJAceTxJMyGKt2McwghYyRJhv", "birth_date": "22/12/1986", "ip_address": "102.201.19.76", - "photo": "/img/avatars/032m.jpg" + "photo": "img/avatars/032m.jpg" }, { "id": 70, @@ -1817,7 +1817,7 @@ "bitcoin_address": "1H9CSeSGbuSEjaFXN72TSWR89K2Myc1CsF", "birth_date": "03/09/1993", "ip_address": "153.22.124.67", - "photo": "/img/avatars/033m.jpg" + "photo": "img/avatars/033m.jpg" }, { "id": 71, @@ -1843,7 +1843,7 @@ "bitcoin_address": "14XRf5jB6fdEGhk3yK15ZDvXWZa7ZTQ83G", "birth_date": "03/06/1997", "ip_address": "36.174.183.235", - "photo": "/img/avatars/034m.jpg" + "photo": "img/avatars/034m.jpg" }, { "id": 72, @@ -1869,7 +1869,7 @@ "bitcoin_address": "16jKwhpm7JPxLB4yep3nuXzvuM1W6sKEY7", "birth_date": "22/03/1969", "ip_address": "173.68.16.225", - "photo": "/img/avatars/036f.jpg" + "photo": "img/avatars/036f.jpg" }, { "id": 73, @@ -1895,7 +1895,7 @@ "bitcoin_address": "19QAXzuMgKPh2QC31VomjichTKvKGEsC5F", "birth_date": "23/05/1955", "ip_address": "222.111.215.174", - "photo": "/img/avatars/037f.jpg" + "photo": "img/avatars/037f.jpg" }, { "id": 74, @@ -1921,7 +1921,7 @@ "bitcoin_address": "1DB2awfU2uSGmeQsoQE4fNd92W85nc4ioq", "birth_date": "01/04/1960", "ip_address": "201.87.83.246", - "photo": "/img/avatars/035m.jpg" + "photo": "img/avatars/035m.jpg" }, { "id": 75, @@ -1947,7 +1947,7 @@ "bitcoin_address": "14TLncT2ehesL2RDQ5pRrqSJ7rzjwqjChV", "birth_date": "14/04/1951", "ip_address": "41.75.247.30", - "photo": "/img/avatars/036m.jpg" + "photo": "img/avatars/036m.jpg" }, { "id": 76, @@ -1973,7 +1973,7 @@ "bitcoin_address": "1DkKj97Hb3EWceXrwnRsPE1uSXXNJ1s4my", "birth_date": "04/01/1990", "ip_address": "30.32.206.177", - "photo": "/img/avatars/037m.jpg" + "photo": "img/avatars/037m.jpg" }, { "id": 77, @@ -1999,7 +1999,7 @@ "bitcoin_address": "1Es18TeufERSTTFnTAXfR9M6RPwPXyzySG", "birth_date": "31/12/1994", "ip_address": "56.53.22.67", - "photo": "/img/avatars/038f.jpg" + "photo": "img/avatars/038f.jpg" }, { "id": 78, @@ -2025,7 +2025,7 @@ "bitcoin_address": "1HaC3GZ2SW1KniJL2c55APb8jhEXNi9YGF", "birth_date": "30/09/1951", "ip_address": "100.224.191.225", - "photo": "/img/avatars/038m.jpg" + "photo": "img/avatars/038m.jpg" }, { "id": 79, @@ -2051,7 +2051,7 @@ "bitcoin_address": "19dDBXBhyFugdU535BkkgERUWY55bxHvai", "birth_date": "17/03/1989", "ip_address": "2.219.95.99", - "photo": "/img/avatars/039m.jpg" + "photo": "img/avatars/039m.jpg" }, { "id": 80, @@ -2077,7 +2077,7 @@ "bitcoin_address": "164SUYZgkwpnTC7tYFCpATprzNsC6zcbLf", "birth_date": "19/12/1993", "ip_address": "155.252.250.114", - "photo": "/img/avatars/039f.jpg" + "photo": "img/avatars/039f.jpg" }, { "id": 81, @@ -2103,7 +2103,7 @@ "bitcoin_address": "17Uvny7fM6dawsN5QPTRDjjTjxMebQpd8x", "birth_date": "23/12/1954", "ip_address": "21.0.129.24", - "photo": "/img/avatars/040f.jpg" + "photo": "img/avatars/040f.jpg" }, { "id": 82, @@ -2129,7 +2129,7 @@ "bitcoin_address": "14YS52jbpg2VZCwDnxVAh4KYmKi7KMxWSU", "birth_date": "08/01/1966", "ip_address": "104.248.141.191", - "photo": "/img/avatars/040m.jpg" + "photo": "img/avatars/040m.jpg" }, { "id": 83, @@ -2155,7 +2155,7 @@ "bitcoin_address": "1NvspfpiXJGwgdvYT6Rbk1b5BoLniiTVr5", "birth_date": "08/10/1959", "ip_address": "47.169.97.249", - "photo": "/img/avatars/041m.jpg" + "photo": "img/avatars/041m.jpg" }, { "id": 84, @@ -2181,7 +2181,7 @@ "bitcoin_address": "1P9U6HW7x5SoHZ6kY3rqR5wgWShnjWFhAY", "birth_date": "20/06/1992", "ip_address": "154.133.110.93", - "photo": "/img/avatars/042m.jpg" + "photo": "img/avatars/042m.jpg" }, { "id": 85, @@ -2207,7 +2207,7 @@ "bitcoin_address": "1LtjbXLjG5LbUFcnRsVMvm8BLqVkNPtRmi", "birth_date": "26/12/1958", "ip_address": "173.251.117.141", - "photo": "/img/avatars/041f.jpg" + "photo": "img/avatars/041f.jpg" }, { "id": 86, @@ -2233,7 +2233,7 @@ "bitcoin_address": "16L6H6JSPNAfRdnZjFvhAgASf7wLEPW5Kn", "birth_date": "01/02/1992", "ip_address": "204.237.148.154", - "photo": "/img/avatars/042f.jpg" + "photo": "img/avatars/042f.jpg" }, { "id": 87, @@ -2259,7 +2259,7 @@ "bitcoin_address": "1PoCsBfv6USH436dMT8R7XyjQnmR4ct7GL", "birth_date": "20/06/1982", "ip_address": "74.73.72.232", - "photo": "/img/avatars/043m.jpg" + "photo": "img/avatars/043m.jpg" }, { "id": 88, @@ -2285,7 +2285,7 @@ "bitcoin_address": "1GzJmV9991YZ8UYuyRKQM8uwZqVRJ4uufe", "birth_date": "17/12/1972", "ip_address": "17.9.209.133", - "photo": "/img/avatars/044m.jpg" + "photo": "img/avatars/044m.jpg" }, { "id": 89, @@ -2311,7 +2311,7 @@ "bitcoin_address": "1EcvYSA7z6uHG6eHsLG9cjxFdSLTZNMR8v", "birth_date": "09/04/1959", "ip_address": "149.31.70.156", - "photo": "/img/avatars/045m.jpg" + "photo": "img/avatars/045m.jpg" }, { "id": 90, @@ -2337,7 +2337,7 @@ "bitcoin_address": "1ChmKdmM3dMft68hcw191TLZw9TsgiuAg9", "birth_date": "03/05/1995", "ip_address": "74.43.182.156", - "photo": "/img/avatars/046m.jpg" + "photo": "img/avatars/046m.jpg" }, { "id": 91, @@ -2363,7 +2363,7 @@ "bitcoin_address": "16PJ4eEVZ8joPVwCazdBm5iPauGB1Jmnp6", "birth_date": "12/08/1986", "ip_address": "132.19.226.26", - "photo": "/img/avatars/043f.jpg" + "photo": "img/avatars/043f.jpg" }, { "id": 92, @@ -2389,7 +2389,7 @@ "bitcoin_address": "18oc9XdXSWgDxn6Fv9JZhPu6Jm15vyTJUo", "birth_date": "15/05/1968", "ip_address": "35.178.125.248", - "photo": "/img/avatars/047m.jpg" + "photo": "img/avatars/047m.jpg" }, { "id": 93, @@ -2415,7 +2415,7 @@ "bitcoin_address": "16iosH9PwbuLGuoNJeCij17MABRpiC7ouW", "birth_date": "30/11/1981", "ip_address": "192.153.181.234", - "photo": "/img/avatars/048m.jpg" + "photo": "img/avatars/048m.jpg" }, { "id": 94, @@ -2441,7 +2441,7 @@ "bitcoin_address": "1MU1F1xpos7BsioaqN2e57Sx6cXNsqHaBU", "birth_date": "25/08/1964", "ip_address": "24.171.11.240", - "photo": "/img/avatars/044f.jpg" + "photo": "img/avatars/044f.jpg" }, { "id": 95, @@ -2467,7 +2467,7 @@ "bitcoin_address": "1FPXLRh7o5GUGR4Tnm4oPBvBS3viCf7bkU", "birth_date": "01/08/1971", "ip_address": "255.128.151.215", - "photo": "/img/avatars/045f.jpg" + "photo": "img/avatars/045f.jpg" }, { "id": 96, @@ -2493,7 +2493,7 @@ "bitcoin_address": "16RFePCBDLvzSXNPkoJSrfzrAjgAJRffGp", "birth_date": "29/10/1983", "ip_address": "188.86.31.136", - "photo": "/img/avatars/046f.jpg" + "photo": "img/avatars/046f.jpg" }, { "id": 97, @@ -2519,7 +2519,7 @@ "bitcoin_address": "1My69PNXPoDrKMEypauxRBTN2SsV2dha1E", "birth_date": "02/10/1956", "ip_address": "240.162.130.51", - "photo": "/img/avatars/047f.jpg" + "photo": "img/avatars/047f.jpg" }, { "id": 98, @@ -2545,7 +2545,7 @@ "bitcoin_address": "13YsgF6yXny7aLhq7VSSEGfDDBxLnL2PfQ", "birth_date": "21/11/1955", "ip_address": "26.17.83.81", - "photo": "/img/avatars/049m.jpg" + "photo": "img/avatars/049m.jpg" }, { "id": 99, @@ -2571,7 +2571,7 @@ "bitcoin_address": "1MW2dS59o3SHL8LrACYHtuSc2XxiAsGzoq", "birth_date": "30/10/1978", "ip_address": "164.203.44.154", - "photo": "/img/avatars/048f.jpg" + "photo": "img/avatars/048f.jpg" }, { "id": 100, @@ -2597,7 +2597,7 @@ "bitcoin_address": "18uSEq1AQ1WfDeywh1v3UpRu316cpZxqW8", "birth_date": "10/12/1979", "ip_address": "161.1.203.63", - "photo": "/img/avatars/050m.jpg" + "photo": "img/avatars/050m.jpg" }, { "id": 101, @@ -2623,7 +2623,7 @@ "bitcoin_address": "13TqHr4mwkC1LSqczrTEmeWQeB3LT9LgtP", "birth_date": "25/11/1963", "ip_address": "82.73.60.78", - "photo": "/img/avatars/049f.jpg" + "photo": "img/avatars/049f.jpg" }, { "id": 102, @@ -2649,7 +2649,7 @@ "bitcoin_address": "1BFCA2159ELuG4HsT5jdAMi8FytHpMEFLj", "birth_date": "01/07/1979", "ip_address": "116.156.217.200", - "photo": "/img/avatars/051m.jpg" + "photo": "img/avatars/051m.jpg" }, { "id": 103, @@ -2675,7 +2675,7 @@ "bitcoin_address": "1NXoXaboxhe4Q2CiD7UuL7fTQHsP2w3orP", "birth_date": "04/12/1968", "ip_address": "140.215.93.88", - "photo": "/img/avatars/050f.jpg" + "photo": "img/avatars/050f.jpg" }, { "id": 104, @@ -2701,7 +2701,7 @@ "bitcoin_address": "1HeY1VDLADKx5vkwRQbgWZjjZRTcLDqWxU", "birth_date": "30/12/1993", "ip_address": "23.221.14.164", - "photo": "/img/avatars/051f.jpg" + "photo": "img/avatars/051f.jpg" }, { "id": 105, @@ -2727,7 +2727,7 @@ "bitcoin_address": "14JaswtPQUXfFCrNnntXp9WmB8mqchH4Tb", "birth_date": "15/03/1992", "ip_address": "178.151.192.131", - "photo": "/img/avatars/052f.jpg" + "photo": "img/avatars/052f.jpg" }, { "id": 106, @@ -2753,7 +2753,7 @@ "bitcoin_address": "1N8aLzKt7Nb7iWZZeMQpQ9HFoD3BWu3dvH", "birth_date": "06/11/1968", "ip_address": "225.63.13.37", - "photo": "/img/avatars/053f.jpg" + "photo": "img/avatars/053f.jpg" }, { "id": 107, @@ -2779,7 +2779,7 @@ "bitcoin_address": "1BxNNcaE3gtJkpGsmWNSinGxUrQTm6Qxty", "birth_date": "27/12/1995", "ip_address": "153.98.90.41", - "photo": "/img/avatars/052m.jpg" + "photo": "img/avatars/052m.jpg" }, { "id": 108, @@ -2805,7 +2805,7 @@ "bitcoin_address": "1Co2nVrrQtm2KLWppKDzhVhE1DJiccJ9t1", "birth_date": "12/10/1951", "ip_address": "34.179.87.152", - "photo": "/img/avatars/054f.jpg" + "photo": "img/avatars/054f.jpg" }, { "id": 109, @@ -2831,7 +2831,7 @@ "bitcoin_address": "1PFnVTZTfxHo74qtnpK7LWtoKZjscXm2pU", "birth_date": "27/07/1963", "ip_address": "121.163.159.50", - "photo": "/img/avatars/053m.jpg" + "photo": "img/avatars/053m.jpg" }, { "id": 110, @@ -2857,7 +2857,7 @@ "bitcoin_address": "15J6sNR9sPJuijHTX1j5KXg2vcPEjtsALJ", "birth_date": "10/05/1966", "ip_address": "74.101.233.106", - "photo": "/img/avatars/054m.jpg" + "photo": "img/avatars/054m.jpg" }, { "id": 111, @@ -2883,7 +2883,7 @@ "bitcoin_address": "1FrtqFBksRXUayMR6QYcckKHj2BmGoCFzV", "birth_date": "01/08/1975", "ip_address": "89.228.139.214", - "photo": "/img/avatars/055m.jpg" + "photo": "img/avatars/055m.jpg" }, { "id": 112, @@ -2909,7 +2909,7 @@ "bitcoin_address": "1GKGMvd1rTTSGvuyioPXCb7GZxEUh6wwem", "birth_date": "03/08/1990", "ip_address": "83.19.183.176", - "photo": "/img/avatars/056m.jpg" + "photo": "img/avatars/056m.jpg" }, { "id": 113, @@ -2935,7 +2935,7 @@ "bitcoin_address": "165ykcwPPcMtx5MHH5YiSMC9L1iigxbBfr", "birth_date": "04/10/1972", "ip_address": "128.90.196.192", - "photo": "/img/avatars/057m.jpg" + "photo": "img/avatars/057m.jpg" }, { "id": 114, @@ -2961,7 +2961,7 @@ "bitcoin_address": "13Jst15HGAj7qJNZni6vGynqUmQd7Z9WHr", "birth_date": "23/01/1989", "ip_address": "141.72.118.0", - "photo": "/img/avatars/055f.jpg" + "photo": "img/avatars/055f.jpg" }, { "id": 115, @@ -2987,7 +2987,7 @@ "bitcoin_address": "1BaSbgpw7EskvR7y3vrRuFKBEEpzFJmpk1", "birth_date": "24/03/1993", "ip_address": "135.254.213.202", - "photo": "/img/avatars/058m.jpg" + "photo": "img/avatars/058m.jpg" }, { "id": 116, @@ -3013,7 +3013,7 @@ "bitcoin_address": "1LV5ouSDe6CivGobjKU5yc2Fv7M1Wjc3WQ", "birth_date": "25/08/1994", "ip_address": "145.139.53.97", - "photo": "/img/avatars/056f.jpg" + "photo": "img/avatars/056f.jpg" }, { "id": 117, @@ -3039,7 +3039,7 @@ "bitcoin_address": "17GtJt63drcyEW49ccF6xu2azWoeZf38nq", "birth_date": "11/01/1992", "ip_address": "209.133.77.252", - "photo": "/img/avatars/057f.jpg" + "photo": "img/avatars/057f.jpg" }, { "id": 118, @@ -3065,7 +3065,7 @@ "bitcoin_address": "1AdY7EAmrrkT6y954NKgxktzzASX9NozdT", "birth_date": "13/06/1988", "ip_address": "161.108.240.212", - "photo": "/img/avatars/058f.jpg" + "photo": "img/avatars/058f.jpg" }, { "id": 119, @@ -3091,7 +3091,7 @@ "bitcoin_address": "16PCgmJwampuG9MU5PkUVC6p5n9id8va31", "birth_date": "27/10/1956", "ip_address": "45.166.27.243", - "photo": "/img/avatars/059m.jpg" + "photo": "img/avatars/059m.jpg" }, { "id": 120, @@ -3117,7 +3117,7 @@ "bitcoin_address": "1D7SeYJTgRTTQwEE7QM85TvHMAg4VRVYDL", "birth_date": "16/12/1969", "ip_address": "140.50.151.81", - "photo": "/img/avatars/060m.jpg" + "photo": "img/avatars/060m.jpg" }, { "id": 121, @@ -3143,7 +3143,7 @@ "bitcoin_address": "1LwfML1mJibps2Xbz7cXCojim3NVgvSVds", "birth_date": "29/01/1991", "ip_address": "89.3.225.160", - "photo": "/img/avatars/061m.jpg" + "photo": "img/avatars/061m.jpg" }, { "id": 122, @@ -3169,7 +3169,7 @@ "bitcoin_address": "18nvZ4Z3ECGPrfrxXe44uSv7Nshu6zu2Vu", "birth_date": "30/12/1953", "ip_address": "63.158.223.3", - "photo": "/img/avatars/059f.jpg" + "photo": "img/avatars/059f.jpg" }, { "id": 123, @@ -3195,7 +3195,7 @@ "bitcoin_address": "1E9BWdzceBm6FLpehthuA8NW4bM97t52NP", "birth_date": "27/05/1964", "ip_address": "117.173.115.61", - "photo": "/img/avatars/062m.jpg" + "photo": "img/avatars/062m.jpg" }, { "id": 124, @@ -3221,7 +3221,7 @@ "bitcoin_address": "1DJKs8KKPixtyZ9kqiboLdt6yhobpRgmrt", "birth_date": "31/10/1952", "ip_address": "65.191.243.255", - "photo": "/img/avatars/063m.jpg" + "photo": "img/avatars/063m.jpg" }, { "id": 125, @@ -3247,7 +3247,7 @@ "bitcoin_address": "1MJ1VidpxQHPgq8wGVryNFEa6TfBKo8Afn", "birth_date": "20/12/1983", "ip_address": "159.246.215.164", - "photo": "/img/avatars/060f.jpg" + "photo": "img/avatars/060f.jpg" }, { "id": 126, @@ -3273,7 +3273,7 @@ "bitcoin_address": "1FeBaH4RWvZspJGMrM66se2URXm1djLihK", "birth_date": "04/12/1974", "ip_address": "243.88.161.176", - "photo": "/img/avatars/064m.jpg" + "photo": "img/avatars/064m.jpg" }, { "id": 127, @@ -3299,7 +3299,7 @@ "bitcoin_address": "1AZc6WQPaWKno5hPLqztf8tUzqiqTEKAPp", "birth_date": "14/05/1978", "ip_address": "34.208.0.199", - "photo": "/img/avatars/065m.jpg" + "photo": "img/avatars/065m.jpg" }, { "id": 128, @@ -3325,7 +3325,7 @@ "bitcoin_address": "1MCaZjaCpSDAjhzR3w8XLv8eCqCAFQgZWf", "birth_date": "30/04/1954", "ip_address": "148.39.193.188", - "photo": "/img/avatars/061f.jpg" + "photo": "img/avatars/061f.jpg" }, { "id": 129, @@ -3351,7 +3351,7 @@ "bitcoin_address": "1P4z6rGdRpzvERgHbWq2zpJYmrCHFynBb4", "birth_date": "13/04/1958", "ip_address": "34.183.203.136", - "photo": "/img/avatars/066m.jpg" + "photo": "img/avatars/066m.jpg" }, { "id": 130, @@ -3377,7 +3377,7 @@ "bitcoin_address": "1Kkc3UZK2H5BT9V3FZRmYcfT512ric81xF", "birth_date": "13/07/1988", "ip_address": "212.122.85.204", - "photo": "/img/avatars/067m.jpg" + "photo": "img/avatars/067m.jpg" }, { "id": 131, @@ -3403,7 +3403,7 @@ "bitcoin_address": "1BcQAjbLav77LYdCYLKFSd8E9uRDHgWkUp", "birth_date": "09/05/1954", "ip_address": "193.45.81.119", - "photo": "/img/avatars/068m.jpg" + "photo": "img/avatars/068m.jpg" }, { "id": 132, @@ -3429,7 +3429,7 @@ "bitcoin_address": "1ECs4gaRtzt7TChAtsnUNw4gWXb2iBsEMW", "birth_date": "06/02/1990", "ip_address": "193.137.0.162", - "photo": "/img/avatars/062f.jpg" + "photo": "img/avatars/062f.jpg" }, { "id": 133, @@ -3455,7 +3455,7 @@ "bitcoin_address": "1AJZ2Hd9MTz8Rut9rr2DcuFDPvsKRKQqpv", "birth_date": "08/08/1963", "ip_address": "247.73.227.39", - "photo": "/img/avatars/063f.jpg" + "photo": "img/avatars/063f.jpg" }, { "id": 134, @@ -3481,7 +3481,7 @@ "bitcoin_address": "15mLo32V3GiWRaXQ7huMhHxmZ92twHY33r", "birth_date": "09/10/1988", "ip_address": "3.60.44.181", - "photo": "/img/avatars/064f.jpg" + "photo": "img/avatars/064f.jpg" }, { "id": 135, @@ -3507,7 +3507,7 @@ "bitcoin_address": "15kH2jMVGDhVcLHC4WhvsUW4tAi2Dn261y", "birth_date": "30/06/1965", "ip_address": "39.19.222.27", - "photo": "/img/avatars/065f.jpg" + "photo": "img/avatars/065f.jpg" }, { "id": 136, @@ -3533,6 +3533,6 @@ "bitcoin_address": "1ArvHRgtefPxkbYUFiVAPtx5eXQejLLZmb", "birth_date": "24/02/1989", "ip_address": "234.151.118.15", - "photo": "/img/avatars/069m.jpg" + "photo": "img/avatars/069m.jpg" } ] diff --git a/pages/_data/selects.yml b/pages/_data/selects.yml new file mode 100644 index 000000000..9bcc49620 --- /dev/null +++ b/pages/_data/selects.yml @@ -0,0 +1,38 @@ +users: + value: 3 + options: + 1: + name: Chuck Tesla + 2: + name: Elon Musk + 3: + name: Paweł Kuna + 4: + name: Nikola Tesla + +tags: + value: dev, test + options: + - dev + - live + - test + +countries: + value: pl + options: + pl: + name: Poland + image: img/flags/pl.svg + de: + name: Germany + image: img/flags/de.svg + cz: + name: Czech Republic + image: img/flags/cz.svg + br: + name: Brazil + image: img/flags/br.svg + +people: + value: 4 + options: people diff --git a/pages/_docs/autosize.md b/pages/_docs/autosize.md index f3461f319..33771fef8 100644 --- a/pages/_docs/autosize.md +++ b/pages/_docs/autosize.md @@ -1,5 +1,6 @@ --- title: Autosize +menu: docs.autosize done: true --- diff --git a/pages/_includes/forms/form-elements-2.html b/pages/_includes/forms/form-elements-2.html index d83500471..5227c55de 100644 --- a/pages/_includes/forms/form-elements-2.html +++ b/pages/_includes/forms/form-elements-2.html @@ -1,5 +1,3 @@ - -
{% include ui/input-group.html prepend="@" placeholder="username" %} @@ -42,38 +40,21 @@
- + {% include ui/form/selectize.html key="tags" %} +
- - + + {% include ui/form/selectize.html key="users" %}
- + {% include ui/form/selectize.html key="people" %}
- + {% include ui/form/selectize.html key="countries" %}
diff --git a/pages/_includes/layout/sidenav.html b/pages/_includes/layout/sidenav.html index 33eb47ffb..0e498e0dd 100644 --- a/pages/_includes/layout/sidenav.html +++ b/pages/_includes/layout/sidenav.html @@ -1,5 +1,7 @@ {% assign menu = page.menu | default: layout.menu %} -
{% endif %} {% endfor %} diff --git a/pages/_includes/layout/sidenav-content.html b/pages/_includes/layout/sidenav-content.html index b455404ce..ee703fc3e 100644 --- a/pages/_includes/layout/sidenav-content.html +++ b/pages/_includes/layout/sidenav-content.html @@ -1,21 +1,15 @@ {% assign id = 0 | random_id %} - + + + +
- + {% include layout/menu.html menu=include.menu class="mb-md-4" %} - +
diff --git a/pages/_includes/layout/sidenav.html b/pages/_includes/layout/sidenav.html index 0e498e0dd..54559d97a 100644 --- a/pages/_includes/layout/sidenav.html +++ b/pages/_includes/layout/sidenav.html @@ -1,7 +1,6 @@ {% assign menu = page.menu | default: layout.menu %} -
diff --git a/pages/_includes/cards/charts/sales.html b/pages/_includes/cards/charts/sales.html index a57482301..fba63825c 100644 --- a/pages/_includes/cards/charts/sales.html +++ b/pages/_includes/cards/charts/sales.html @@ -9,9 +9,7 @@
75%
Conversion rate
-
- 24% {% include ui/icon.html icon="trending-up" class="icon-thin" %} -
+
{% include ui/trending.html value=7 %}
{% include ui/progress.html percentage=75 color="blue" size="sm" %}
diff --git a/pages/_includes/cards/company-employees.html b/pages/_includes/cards/company-employees.html index 7dabfb7b9..18c2aba89 100644 --- a/pages/_includes/cards/company-employees.html +++ b/pages/_includes/cards/company-employees.html @@ -12,7 +12,7 @@ {% for person in site.data.people limit: 5 offset: 20 %} - {% include ui/avatar.html src=person.photo %} + {% include ui/avatar.html src=person.photo %} {{ person.full_name }} {{ person.department }} {{ forloop.index | random_number: 30, 90 }}% diff --git a/pages/_includes/cards/development-activity.html b/pages/_includes/cards/development-activity.html new file mode 100644 index 000000000..c07357d5b --- /dev/null +++ b/pages/_includes/cards/development-activity.html @@ -0,0 +1,58 @@ +
+ {% include ui/chart.html chart-id="development-activity" height=10 class="mt-4" %} + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UserCommitDate
+ {% include ui/avatar.html person-id=10 %} + {{ site.data.people[10].full_name }}Initial commitMay 6, 2019
+ {% include ui/avatar.html person-id=17 %} + {{ site.data.people[17].full_name }}Main structureApril 22, 2019
+ {% include ui/avatar.html person-id=16 %} + {{ site.data.people[16].full_name }}Left sidebar adjustmentsApril 15, 2019
+ {% include ui/avatar.html person-id=12 %} + {{ site.data.people[12].full_name }}Topbar dropdown styleApril 8, 2019
+ {% include ui/avatar.html person-id=19 %} + {{ site.data.people[19].full_name }}Fixes #625April 9, 2019
+
+
+ diff --git a/pages/_includes/cards/invoices.html b/pages/_includes/cards/invoices.html index 48621847e..c6cbf2be9 100644 --- a/pages/_includes/cards/invoices.html +++ b/pages/_includes/cards/invoices.html @@ -6,7 +6,8 @@ - + + @@ -20,6 +21,7 @@ {% for invoice in site.data.invoices limit: 5 %} + diff --git a/pages/_includes/cards/map.html b/pages/_includes/cards/map.html index c0f0e988e..bd7766125 100644 --- a/pages/_includes/cards/map.html +++ b/pages/_includes/cards/map.html @@ -7,6 +7,6 @@ {% endif %}
- {% include ui/map.html map=map color="blue" %} + {% include ui/map.html map-id=map color="blue" %}
diff --git a/pages/_includes/cards/order-statistics.html b/pages/_includes/cards/order-statistics.html new file mode 100644 index 000000000..a82392ed1 --- /dev/null +++ b/pages/_includes/cards/order-statistics.html @@ -0,0 +1,27 @@ +
+
+ +
Total orders
+ +
+
2,137
+
{% include ui/trending.html value=7 %}
+
+ + {% include ui/progress.html values="40,15,25,15,5" class="mb-4" %} + +
    + {% for item in site.data.orders %} +
  • +
    +
    + {{ item.title }} +
    {{ item.subtitle }}
    +
    +
    {{ forloop.index | random_number: 500, 2000 | intcomma }} orders
    +
  • + {% endfor %} +
+
+ +
diff --git a/pages/_includes/cards/small-stats.html b/pages/_includes/cards/small-stats.html index 9500c865d..7c68c4c77 100644 --- a/pages/_includes/cards/small-stats.html +++ b/pages/_includes/cards/small-stats.html @@ -1,7 +1,7 @@ {% assign chart-type = include.chart-type | default: 'line' %} {% assign chart-position = include.chart-position | default: 'right' %}
-
+
{% if include.icon %} {% include ui/icon.html icon=include.icon %} {% elsif include.person-id %} diff --git a/pages/_includes/layout/css.html b/pages/_includes/layout/css.html index dc681ccf7..9743cdf14 100644 --- a/pages/_includes/layout/css.html +++ b/pages/_includes/layout/css.html @@ -6,8 +6,8 @@ {% endif %} - + - - + + diff --git a/pages/_includes/layout/homepage.html b/pages/_includes/layout/homepage.html index 289d9dcf8..7c5670502 100644 --- a/pages/_includes/layout/homepage.html +++ b/pages/_includes/layout/homepage.html @@ -6,47 +6,11 @@ {% include cards/charts/revenue.html %}
-
-
-
-
New clients
-
- {% include parts/dropdown/days.html %} -
-
-
-
6,782
-
- 5% {% include ui/icon.html icon="trending-down" class="icon-thin" %} -
-
- -
- {% include js/charts.html id="chart-active-users" chart-id="new-clients" %} -
-
+ {% include cards/charts/new-clients.html %}
-
-
-
-
Active users
-
- {% include parts/dropdown/days.html %} -
-
-
-
2,986
-
- 4% {% include ui/icon.html icon="trending-up" class="icon-thin" %} -
-
- -
- {% include js/charts.html id="chart-active-users2" chart-id="active-users" %} -
-
+ {% include cards/charts/active-users.html %}
@@ -73,21 +37,26 @@ {% include cards/map.html title="Top users" %}
-
- {% include cards/charts/card.html name="temperature" title="A" height=12 %} +
+ {% include cards/development-activity.html %}
-
- {% include cards/charts/card.html name="donut" title="B" height=12 %} -
-
- {% include cards/charts/card.html name="pie" title="C" height=12 %} +
+
+
+ {% include cards/charts/card.html chart-id="temperature" height=10 %} +
+
+ {% include cards/charts/card.html chart-id="donut" height=10 %} +
+
{% comment %} -
- {% comment %}{% include cards/development-activity.html %}{% endcomment %} +
+ {% include cards/order-statistics.html %}
+
Are you in trouble? Read our documentation with code samples.
diff --git a/pages/_includes/layout/js.html b/pages/_includes/layout/js.html index 928740860..aaaddb1ca 100644 --- a/pages/_includes/layout/js.html +++ b/pages/_includes/layout/js.html @@ -16,3 +16,7 @@ + +{% removeemptylines %} +{{ site.capture_global.scripts }} +{% endremoveemptylines %} diff --git a/pages/_includes/js/charts.html b/pages/_includes/ui/chart.html similarity index 83% rename from pages/_includes/js/charts.html rename to pages/_includes/ui/chart.html index 56cff6889..f629620bb 100644 --- a/pages/_includes/js/charts.html +++ b/pages/_includes/ui/chart.html @@ -1,14 +1,16 @@ -{% capture_global scripts %} -{% removeemptylines %} {% assign data = site.data.charts[include.chart-id] %} +{% assign id = include.id | default: include.chart-id %} +{% assign height = include.height %} {% if data %} +
+{% capture_global scripts %} -{% endif %} -{% endremoveemptylines %} {% endcapture_global %} +{% endif %} diff --git a/pages/_includes/ui/map.html b/pages/_includes/ui/map.html index e6ad76b9b..cf82165a1 100644 --- a/pages/_includes/ui/map.html +++ b/pages/_includes/ui/map.html @@ -1,4 +1,4 @@ -{% assign id = include.map %} +{% assign id = include.map-id %} {% assign height = include.height | default: 20 %} {% assign data = site.data.maps[id] %} {% assign color = include.color | default: data.color | default: 'green' %} @@ -7,8 +7,10 @@
{% capture_global scripts %} diff --git a/pages/_plugins/jekyll-humanize.rb b/pages/_plugins/jekyll-humanize.rb new file mode 100644 index 000000000..0eb1fb356 --- /dev/null +++ b/pages/_plugins/jekyll-humanize.rb @@ -0,0 +1,257 @@ +module Jekyll + + module Humanize + ## + # This is a port of the Django app `humanize` which adds a "human touch" + # to data. Given that Jekyll produces static sites, some of the original + # methods do not make logical sense (e.g. naturaltime). + # + # Source code can be viewed here: + # https://github.com/django/django + # + # Copyright (c) Django Software Foundation and individual contributors. + # All rights reserved. + + #################### + # PUBLIC METHODS # + #################### + + def ordinal(value, flag=nil) + ## + # Converts an integer to its ordinal as a string. 1 is '1st', 2 is '2nd', + # 3 is '3rd', etc. Works for any integer. + # + # Usage: + # {{ somenum }} >>> 3 + # {{ somenum | ordinal }} >>> '3rd' + # {{ somenum | ordinal: "super" }} >>> '3rd' + + begin + value = value.to_i + flag.to_s.downcase! + rescue Exception => e + puts "#{e.class} #{e}" + return value + end + + suffix = "" + suffixes = ["th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th"] + unless [11, 12, 13].include? value % 100 then + suffix = suffixes[value % 10] + else + suffix = suffixes[0] + end + + unless flag and flag == "super" + return "#{value}%s" % suffix + else + return "#{value}%s" % suffix + end + + end + + def intcomma(value, delimiter=",") + ## + # Converts an integer to a string containing commas every three digits. + # For example, 3000 becomes '3,000' and 45000 becomes '45,000'. + # Optionally supports a delimiter override for commas. + # + # Usage: + # {{ post.content | number_of_words }} >>> 12345 + # {{ post.content | number_of_words | intcomma }} >>> '12,345' + # {{ post.content | number_of_words | intcomma: '.' }} >>> '12.345' + + begin + orig = value.to_s + delimiter = delimiter.to_s + rescue Exception => e + puts "#{e.class} #{e}" + return value + end + + copy = orig.strip + copy = orig.gsub(/^(-?\d+)(\d{3})/, "\\1#{delimiter}\\2") + orig == copy ? copy : intcomma(copy, delimiter) + end + + INTWORD_HELPERS = [ + [6, "million"], + [9, "billion"], + [12, "trillion"], + [15, "quadrillion"], + [18, "quintillion"], + [21, "sextillion"], + [24, "septillion"], + [27, "octillion"], + [30, "nonillion"], + [33, "decillion"], + [100, "googol"], + ] + + def intword(value) + ## + # Converts a large integer to a friendly text representation. Works best + # for numbers over 1 million. For example, 1000000 becomes '1.0 million', + # 1200000 becomes '1.2 million' and 1200000000 becomes '1.2 billion'. + # + # Usage: + # {{ largenum }} >>> 1200000 + # {{ largenum | intword }} >>> '1.2 million' + + begin + value = value.to_i + rescue Exception => e + puts "#{e.class} #{e}" + return value + end + + if value < 1000000 + return value + end + + for exponent, text in INTWORD_HELPERS + large_number = 10 ** exponent + + if value < large_number * 1000 + return "%#{value}.1f #{text}" % (value / large_number.to_f) + end + + end + + return value + end + + def apnumber(value) + ## + # For numbers 0-9, returns the number spelled out. Otherwise, returns the + # number. This follows Associated Press style. + # + # Usage: + # {{ num }} >>> 6 + # {{ num | apnumber }} >>> six + + begin + value = value.to_i + rescue Exception => e + puts "#{e.class} #{e}" + return value + end + + unless value >= 0 and value < 10 then + return value + else + return ["zero", "one", "two", "three", "four", "five", "six", + "seven", "eight", "nine"][value] + end + + end + + def naturalday(date) + ## + # For date values that are within a 9 day stretch from present day, this + # will attempt to return the string representation in the format of today, + # tomorrow, yesterday, "in # days" or "# days ago". Otherwise, returns a + # string formatted according to the "date_format" setting in your + # _config.yml file using strftime format (if not defined, it will default + # to "%m/%d/%Y"). + # + # Usage: + # TODAY == 01/26/2014 + # {{ post.updated }} >>> 01/25/2014 + # {{ post.updated | naturalday }} >>> 'yesterday' + # {{ post.date }} >>> 01/19/2014 + # {{ post.date | naturalday }} >>> 'seven days ago' + + begin + site = @context.registers[:site] + date_format = site.config['humanize']['date_format'] + date = time(date).to_date + rescue Exception => e + puts "#{e.class} #{e}" + return date + end + + unless date_format then + date_format = "%m/%d/%Y" + end + + today = time(Time.now).to_date + delta = (date - today).to_i + + case delta + when 0 + return "today" + when 1 + return "tomorrow" + when 2..9 + delta = apnumber(delta) + return "in #{delta} days" + when -1 + return "yesterday" + when -9..-2 + delta = apnumber(delta * -1) + return "#{delta} days ago" + else + return date.strftime("#{date_format}") + end + + end + + def filesize(value) + ## + # For filesize values in bytes, returns the number rounded to 3 + # decimal places with the correct suffix. + # + # Usage: + # {{ bytes }} >>> 123456789 + # {{ bytes | filesize }} >>> 117.738 MB + filesize_tb = 1099511627776.0 + filesize_gb = 1073741824.0 + filesize_mb = 1048576.0 + filesize_kb = 1024.0 + + begin + value = value.to_f + rescue Exception => e + puts "#{e.class} #{e}" + return value + end + + if value >= filesize_tb + return "%s TB" % (value / filesize_tb).to_f.round(3) + elsif value >= filesize_gb + return "%s GB" % (value / filesize_gb).to_f.round(3) + elsif value >= filesize_mb + return "%s MB" % (value / filesize_mb).to_f.round(3) + elsif value >= filesize_kb + return "%s KB" % (value / filesize_kb).to_f.round(0) + elsif value == 1 + return "1 byte" + else + return "%s bytes" % value.to_f.round(0) + end + + end + + ##################### + # PRIVATE METHODS # + ##################### + + private + def time(input) + case input + when Time + input + when String + Time.parse(input) + else + Jekyll.logger.error "Invalid Date:", "'#{input}' not valid datetime." + exit(1) + end + end + + end + +end + +Liquid::Template.register_filter(Jekyll::Humanize) diff --git a/pages/charts.html b/pages/charts.html index 356ffa3b0..1f26188a9 100644 --- a/pages/charts.html +++ b/pages/charts.html @@ -7,9 +7,8 @@ menu: charts {% for chart in site.data.charts %} {% if chart[1].display %} {% assign chart-name = chart[0] %} - {% assign chart-data = chart[1] %}
- {% include cards/charts/card.html name=chart-name data=chart-data %} + {% include cards/charts/card.html chart-id=chart-name %}
{% endif %} {% endfor %} diff --git a/pages/maps.html b/pages/maps.html index de971f190..7231bfd42 100644 --- a/pages/maps.html +++ b/pages/maps.html @@ -10,7 +10,7 @@ page-title: Maps
{% assign id = map[0] %} - {% include ui/map.html map=id %} + {% include ui/map.html map-id=id %}
diff --git a/pages/users-list.html b/pages/users-list.html index c49e6534d..194b01a6c 100644 --- a/pages/users-list.html +++ b/pages/users-list.html @@ -56,8 +56,8 @@ done: true
No.No. Invoice Subject Client VAT No.
00{{ forloop.index | plus: 1400 }} {{ invoice.name }} @@ -38,9 +40,9 @@ {{ invoice.price }} - Manage - + + {% include ui/dropdown-menu.html %}
- - + + diff --git a/scss/tabler.scss b/scss/tabler.scss index 45d21bf0f..1e69217d4 100644 --- a/scss/tabler.scss +++ b/scss/tabler.scss @@ -31,6 +31,7 @@ @import "ui/forms/input.imagecheck"; @import "ui/forms/input.selectgroup"; @import "ui/forms/input.custom"; +@import "ui/legend"; @import "ui/lists"; @import "ui/loaders"; @import "ui/login"; @@ -51,6 +52,7 @@ @import "vendor/pace"; @import "vendor/selectize"; @import "vendor/jqvmap"; +@import "vendor/apexcharts"; @import "utils/border"; @import "utils/background"; diff --git a/scss/ui/_icons.scss b/scss/ui/_icons.scss index 154ebd2d4..8f5a5835c 100644 --- a/scss/ui/_icons.scss +++ b/scss/ui/_icons.scss @@ -12,6 +12,10 @@ fill: currentColor; } +.icon-thin { + stroke-width: 1.5; +} + .icon-md { font-size: px2rem(20px); } diff --git a/scss/ui/_legend.scss b/scss/ui/_legend.scss new file mode 100644 index 000000000..f794c87ea --- /dev/null +++ b/scss/ui/_legend.scss @@ -0,0 +1,7 @@ +.legend { + display: inline-block; + background: $gray-300; + width: .75em; + height: .75em; + border-radius: $border-radius; +} diff --git a/scss/ui/_stamps.scss b/scss/ui/_stamps.scss index 7e46d22ba..43c83f256 100644 --- a/scss/ui/_stamps.scss +++ b/scss/ui/_stamps.scss @@ -1,5 +1,8 @@ .stamp { - display: inline-block; + display: inline-flex; + align-items: center; + justify-content: center; + min-width: px2rem(40px); height: px2rem(40px); padding: 0 .25rem; diff --git a/scss/vendor/_apexcharts.scss b/scss/vendor/_apexcharts.scss new file mode 100644 index 000000000..02cb07c5f --- /dev/null +++ b/scss/vendor/_apexcharts.scss @@ -0,0 +1,3 @@ +.apexcharts-title-text { + font-weight: 600; +} From 021e703a93d8f7629714aa4cc71307a0c54c99c9 Mon Sep 17 00:00:00 2001 From: codecalm Date: Mon, 28 Oct 2019 22:23:38 +0100 Subject: [PATCH 33/70] homepage charts --- js/tabler-charts.js | 8 +++- pages/_data/charts.yml | 5 ++- pages/_includes/cards/small-stats.html | 4 +- pages/_includes/ui/chart.html | 14 ++++--- scss/tabler.scss | 1 + scss/ui/_charts.scss | 51 ------------------------- scss/vendor/_apexcharts.scss | 30 ++++++++++++++- scss/vendor/_sparkline.scss | 31 +++++++++++++++ static/img/products/product-1.jpg | Bin 0 -> 51516 bytes static/img/products/product-10.jpg | Bin 0 -> 150462 bytes static/img/products/product-11.jpg | Bin 0 -> 79959 bytes static/img/products/product-12.jpg | Bin 0 -> 112684 bytes static/img/products/product-13.jpg | Bin 0 -> 74934 bytes static/img/products/product-2.jpg | Bin 0 -> 44776 bytes static/img/products/product-4.jpg | Bin 0 -> 40845 bytes static/img/products/product-5.jpg | Bin 0 -> 56613 bytes static/img/products/product-6.jpg | Bin 0 -> 45011 bytes static/img/products/product-7.jpg | Bin 0 -> 46807 bytes static/img/products/product-8.jpg | Bin 0 -> 51794 bytes static/img/products/product-9.jpg | Bin 0 -> 130553 bytes 20 files changed, 80 insertions(+), 64 deletions(-) create mode 100644 scss/vendor/_sparkline.scss create mode 100644 static/img/products/product-1.jpg create mode 100644 static/img/products/product-10.jpg create mode 100644 static/img/products/product-11.jpg create mode 100644 static/img/products/product-12.jpg create mode 100644 static/img/products/product-13.jpg create mode 100644 static/img/products/product-2.jpg create mode 100644 static/img/products/product-4.jpg create mode 100644 static/img/products/product-5.jpg create mode 100644 static/img/products/product-6.jpg create mode 100644 static/img/products/product-7.jpg create mode 100644 static/img/products/product-8.jpg create mode 100644 static/img/products/product-9.jpg diff --git a/js/tabler-charts.js b/js/tabler-charts.js index 79f2157ac..8d9a34bd1 100644 --- a/js/tabler-charts.js +++ b/js/tabler-charts.js @@ -72,7 +72,6 @@ if (window.Apex) { dataLabels: { enabled: false, - offsetY: -6, dropShadow: { enabled: false, }, @@ -83,7 +82,6 @@ if (window.Apex) { customScale: 1, expandOnClick: false, dataLabels: { - offset: -8, minAngleToShowLabel: 10, }, }, @@ -145,6 +143,12 @@ if (window.Apex) { colors: mutedColor, fontSize: '12px', }, + datetimeFormatter: { + year: 'yyyy', + month: 'MMM \'yy', + day: 'd MMM', + hour: 'HH:mm' + } }, tooltip: { enabled: false, diff --git a/pages/_data/charts.yml b/pages/_data/charts.yml index 75c2c4e2f..dda7bb82e 100644 --- a/pages/_data/charts.yml +++ b/pages/_data/charts.yml @@ -25,14 +25,14 @@ development-activity: type: area groups: [1, 2, 3] hide-points: true - hide-tooltip: true remove-padding: true legend-position: 'top' sparkline: true + days-labels-count: 30 series: - name: 'Purchases' color: blue - data: [0, 5, 1, 2, 7, 5, 6, 8, 24, 7, 12, 5, 6, 3, 2, 2, 6, 30, 10, 10, 15, 14, 47, 65, 55] + data: [3, 5, 4, 6, 7, 5, 6, 8, 24, 7, 12, 5, 6, 3, 8, 4, 14, 30, 17, 19, 15, 14, 25, 32, 40, 55, 60, 48, 52, 70] line: name: Employment Growth @@ -256,6 +256,7 @@ donut: name: Lorem ipsum display: true type: donut + sparkline: true hide-legend: true series: - name: Maximum diff --git a/pages/_includes/cards/small-stats.html b/pages/_includes/cards/small-stats.html index 7c68c4c77..44bb69d0c 100644 --- a/pages/_includes/cards/small-stats.html +++ b/pages/_includes/cards/small-stats.html @@ -1,7 +1,7 @@ {% assign chart-type = include.chart-type | default: 'line' %} {% assign chart-position = include.chart-position | default: 'right' %}
-
+
{% if include.icon %} {% include ui/icon.html icon=include.icon %} {% elsif include.person-id %} @@ -21,7 +21,7 @@ {% include ui/icon.html icon=include.small-icon color=include.color class="icon-sm ml-1" %} {% endif %}
-
{{ include.description | default: "Users" }}
+
{{ include.description | default: "Users" }}
{% if include.second-icon %} diff --git a/pages/_includes/ui/chart.html b/pages/_includes/ui/chart.html index f629620bb..a4cdd0717 100644 --- a/pages/_includes/ui/chart.html +++ b/pages/_includes/ui/chart.html @@ -3,17 +3,17 @@ {% assign height = include.height %} {% if data %} -
+
{% capture_global scripts %} {% endcapture_global %} diff --git a/scss/tabler.scss b/scss/tabler.scss index 1e69217d4..b3f799ca7 100644 --- a/scss/tabler.scss +++ b/scss/tabler.scss @@ -53,6 +53,7 @@ @import "vendor/selectize"; @import "vendor/jqvmap"; @import "vendor/apexcharts"; +@import "vendor/sparkline"; @import "utils/border"; @import "utils/background"; diff --git a/scss/ui/_charts.scss b/scss/ui/_charts.scss index 340be5f55..242dc6b89 100644 --- a/scss/ui/_charts.scss +++ b/scss/ui/_charts.scss @@ -22,54 +22,3 @@ background-size: 14.14px 14.14px; } -.sparkline { - position: relative; - width: 4rem; - height: 2.5rem; - line-height: 1; -} - -.sparkline-square { - width: 2.5rem; -} - -.sparkline-wide { - width: 6rem; -} - -.sparkline-label { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - display: flex; - align-items: center; - justify-content: center; - font-size: px2rem(11px); - - .icon { - width: 1rem; - height: 1rem; - } -} - - -// stylelint-disable declaration-no-important -.apexcharts-tooltip { - line-height: 1; - color: #fff; - background: $dark !important; - border: 0 !important; - border-radius: 3px !important; -} - -.apexcharts-tooltip-title { - margin: 0 !important; - background: transparent !important; - border: 0 !important; -} - -.apexcharts-tooltip-series-group { - padding: 0 8px !important; -} diff --git a/scss/vendor/_apexcharts.scss b/scss/vendor/_apexcharts.scss index 02cb07c5f..a403adc3b 100644 --- a/scss/vendor/_apexcharts.scss +++ b/scss/vendor/_apexcharts.scss @@ -1,3 +1,31 @@ .apexcharts-title-text { - font-weight: 600; + font-weight: 600 !important; +} + +.apexcharts-tooltip-title { + font-weight: 600 !important; + padding-bottom: .25rem !important; +} + +.apexcharts-tooltip { + line-height: 1; + color: #fff; + background: $dark !important; + border: 0 !important; + border-radius: 3px !important; +} + +.apexcharts-tooltip-title { + margin: 0 !important; + background: transparent !important; + border: 0 !important; +} + +.apexcharts-tooltip-series-group { + padding: 0 8px !important; +} + +.apexcharts-tooltip-marker { + width: .5rem; + height: .5rem; } diff --git a/scss/vendor/_sparkline.scss b/scss/vendor/_sparkline.scss new file mode 100644 index 000000000..54b97a997 --- /dev/null +++ b/scss/vendor/_sparkline.scss @@ -0,0 +1,31 @@ +.sparkline { + position: relative; + width: 4rem; + height: 2.5rem; + line-height: 1; +} + +.sparkline-square { + width: 2.5rem; +} + +.sparkline-wide { + width: 6rem; +} + +.sparkline-label { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: flex; + align-items: center; + justify-content: center; + font-size: px2rem(11px); + + .icon { + width: 1rem; + height: 1rem; + } +} diff --git a/static/img/products/product-1.jpg b/static/img/products/product-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a4a54885c6c5b6c818094b75da1067e37f79ff21 GIT binary patch literal 51516 zcmeFYcUV(hwm2NBf{3C5N)zdXUP1>^Dbl3|LI4o~1BO889aJn7QL0jvP69+~fB>N* zA|PD|y+fq;{>Ass%)QSubLYOlneWdz4UBO40>yOSANcX?NVqBbmpm;bdbKUtpDyO;L1I~L0 zq&+7{R7S*3LRy?tR$f#>MqC;sA4iXcW5fPVA5SLSsl;Hf!#YGwo`Pf0h zNKNA}W08I-bN%I|yuH0ey`@AENJlXVd3kv;aY->rNf8o;h`X32ZZrweM?Em|D z|6#}OCcdurVn+7v2v4M)JqexrH?gb2J*2&@2Lfq=Ks@~`7au%9cp%)LAY3``-TTco zIZgpRTRWJ`Z=m2GRC;;}S}yJ$wk~$|T58H%q<%zUu*VA0;&-LRLF$tC?%tD?kWiPq zb4Og`&Rt26yu@8eH4PbwztXB9>^$N2E*^iSef;0FQvWOMZ-s!nl15guN5Z`9A8Q~H zaLzwoTmkkEo<&OXo{XfV#NGe3zrWBv{s+(U7utLOE3FvmVZ?rm_kW1{uON~R{l5L1 z@{)f1P5td%NIH)sDfihbfc_7a1w5`N84=kT0q_DqO-V^fMM+IXMNLCZ`oD0Vn)>_& zI$GKbw6t`W>HfGb)6rkLe2Jd!>eXx4u3lwhWo2c%`L~Pg+_`fX=`LQseEB*HBLgGL z-x~hx%~?Hw;XI`(r78s(1Av@?jDmsetQmkISvm!Pf{cvpZ?gayIRzyZ_4#u&B;fDs zZw;hZ`Q3CGKu$(ZNkMszl7^Cuf}Dzq1ZJSPB|%Ab$MA}+8}+%+_n(WouAXm@ynAiE zXKKUfQ3f|7@>xvDJt@2AjZDVwnbM%%*is%f22$VTWE2z>m_T4*Z7$|KY%Y zIPf11{D%Yo;lO`5@E;ERhXemN2grex{Zy(i>%&8q>uK_6LqUI#*eW;Oq3$o2$ryxn zf%alnxQ#6XuR2;~*7cSKU5))F5rd#_kV!1|EUkHJruu&m@^4}=KmkdijARcO$$?~F zNZ+@<((aIfIq4s2zq>j}nJ=?W5rG-ot)*ifBnmI(p$0nMM{M&g>y)LA3|abXCXF5s ztp`05A=G+X@O&{7X-91?Cu+;V=U~d#Q30YlORwIH)n$qhs)YOY$<+zfzVsHoh2OQMWqc z4=#rgvFu-4b#6|ZD*121{YQ3}+Ok%-OH2J`OXJenEaj#MqGy1I1EZyR&m&Weo$?hp zide(9+`kiFEe+1+p6|5hN!m`gSnvHeS@wUCtE&R?7$9Vfvy}bk^Dh5nT;2r`$p$Gs zL%|AU);Z&}we^lcC+N$>erVW-V8&sM3x`QJ#Fs#I3hQZ6-(4o7X2J0Rf)e3acfavo7UVmlC0HyF?RsC%dY; zPbj+uV42)lRr{fy>i;FOf32O;n&y}1L(rA61$}0IRhkFF=R`8 zU%;vq54ytrcKs?B%SFp0Z++9(NAz9$yar0GO*vEw{%D!|x<Medi$`lq6WwJgsKY`P)PQ@G26k01S2HDY zX5dD{fP%Jirzul0+ZlkYlTcd+KLhOlTF%TXy)@TCeOmAmUSnU`4nN9yxS}U2 zqOhChx5gpcY8aQBU4hD&v#2;_lk{P)gdSLN)G?How7y^Vnv3=Dj6{bHS>xp4N7kA3 zhj}|rg$2w|m+WDr;89OU{7}>(Q;g~7hG7ECVHvI4NwgR~6btjzpC4bT0?#R^yX7EG z+XgpwyD(96&QYn|#*W@`c~>9&F(J0E?~n4W2RYl6cArq&H!c_e}q(0k<)Va)nz zW6u0B=+9m5L>GRr8AMjb^6)MQdl@jkfST-Yr?ZBTM9{nase!-Al!-BHUL4 z(b+S-3WXR;e=9Gij?`LV@SbRwKA2zj<;9xFP3N~Kgc*V|?)KfyZsTl%lEtUNO7*U> zMSi!zLapr@YjdgYy1_?BV2gs1ZlA-Shuv={*OFbL-3Ve!~P;*u;^$iB&S5b2r#bY9CCeDM`WOAoOCmFF(NRjOG>V-O-gQwl zx!5%h4cS2%_ZY&sTc0>uF@{f1(TA(hUu-!8^b@h(7ZI9LP2PC18TpairpiSjYxh2b zGr-b&c|MO5p#X2z)8b#Cgfl?dILL-!7GvTQ%-U**&x+BGDmP74>^fE{g4VswwYU!L zwXRr3Yw?`{m`z~Oc}o~?84H#p=V2J%ujm$sUL? zg;YPh|Ian`Uur%7(DV!NCnGs4Ia^4RVLtZJ_oC4bfg)t4&tW72+iG8@tOCAt0ly#N zRqN$7<2GD+2AFE291LvxKD#h}Schkh%BlN!Vy$B-l&Er?GO?v_)Gak&lYS6}J$1Al zBaxB@h*ktT5qnFhOtLZyg7$}w4;$7YzVQFn4-mV|P z>Mm})nI+U<^i!i|P!LOI)+KG5QR`od9W8!S^8WHcZ2b^O+x4=#0G>GqkT$)DQTnp_ zd^)TpXl-D%LZ}3bidwv*5-yB%v9R0aP@cCN!ssLpCDT{1ti;|!KS$L*8clQNh=(2- zWHwZIBrYDXjm-F~6!{KxZh`wxpDCL4X6IluwkmTAmfMc}oPo3O++)$%!=<0Tp1pd+ z32z*XH()F8d36D-Y;dd-J`s+fo(r=(?W>^#PH-L?DaX` z5#OhNnP06cemUV{664< zcRv?8*r%&?3FB>cf?fq(%)e`ux1k)1Yw_ul4bo52su&$$RAGclI9hY81{CF5*lWm$ z$W$HO{H?;z&LCi zs(3lVYQCocVr891ba|H)mtbn>`DAy058X27ygRhWEGjS>=PMJPwZG7{Lber>obX7H zW0mT2`W0{$8DY-9KJ@F!4y>#+vlGvrNZ-~JbbUPFUL}Me6G00}HS!p6;wv;Sh5@@y zhVi)T>ZV6P+1aF=8ZSJocX1b(4naCt-1))2Gqj$cGH>NMkH-Z%3*uFq7g zj~t)YrE}ofUCUR@K0jPA2WJ}!p#12nm3FsmhbPur7J?0&R+wxEE(F+Nl=BgE@56Av z&$IsAVrO>zi4Kho_9dv4*Zr4lThQVHeg)GjUHy95qXHxmXxI-4>mS-`(OFSS)&-YZ ze%Lsb!Ww)V%oi$(f!?H(OP<+rd_PFE)zb*mHkauuk}H2ny;D27yX}#jina3^G^WRC zZ$nOnkomnf z2FDBcoBhGgu`rKF#OXM@Zg4#7A8>YIjvt;nt~mTzzsZ{0zZai$y&Z-j%HAlrQf%8O zb}|IL5Z3h7B^Z1N@%S~)8sFCFSF3pjP_M)v(TTOp${L{3r9noCv%eNA2*@M6Xd5)~ z2&1j@6M8-RMzwF-e9(L@yW^X3!xyDtI6R*U8c1>B)rF>Uk@1R?y?Zsm@A1LLnFElT zxve63xmH-E3;~s(=f*2>^9L();Y6{^4tBuhm&uf{&fu#*sj#s#ZPHG=SI(i zt)VB2SVb#CXO$+%pjUKifM-Tpa*H3)BLm0lcYDp|%aMx8aIcDubnAd3=-a8qu0G)m zP$JQxSdNku$GRlnR_&dLajT-?Nz%u}y`T2a zTr}YHwy^1SfoK^THf}#khM5)n9@5u|wC)CS1WVaefQhfFwkF;lEIG`|vf~WZd%V6E zwtOpFjzq_t0gRMX3|7wo{JraI!@=Mg$nX-TSGG`tXwEB_Z=9rWo}#D>#(0^J2888s*9%-{q*!~d;sQN zEV$6N+|8efF&p^V)n8J@%xp7nBHdKCPF=Vha0{Dn=YBsotGY_Nc~rSyev24I#8MCU z%GJqNB!pkdhT!O6;poZz$9B;;%UusbtafX{@w(Xp(}V(RA5PKhZE16=O!nncPGb?8*gdlNpBRU)U+Cqa} zNc-Ml#p2rebI)ZK<%r&?(maWyFHRrh^64}C+M4jC-R+%OJGR+d3ms#kV?E0Hs1u?$ z-)EPBH+JW=_y=Se_fn#B3rai#-szESS(Y}E^v17ew-fIZv0ccGMX9ZyE5-pr7tVnvHNh0y;d?RjO5hi;bHmt zuQ&JhYWqA+SEs6+Ko_z77-;G@r85BQqqkCN;WWp{l7vi-=Lhp(WEZg{p}v|FxcuHpIjFk31X`~Hx* z0Z>+0MAX7SZegPJY4`_s%%gw7PW~wg9qku^pNvoGa_SqA6wydkH+%PtS^Hy=+Yi{8 zmK+k;m`?>2gUL1gLXxR zfZWYHa*A&!SYx7wZJ9+sg3|N0-QbHe9q7RoW|2ay0dlPJo7Y0`{3*Xc8)d5Nq%UcX zpLn~VWrOi$uhMS|FC;9x^%0+rl`{@JcMa4s{?g6yb9QK-L!)X2uaEiEopT`8t+Yx= zJp<5=45@qS+zXTkf+wp}Zep`GeT}m)h%oG!V@<#sQu|6|nn?A4t7rb4|N9%Brc>aE z$1EeUL{r}@1<1Gr>9u?ow`29Ut(fw+iG~h);793d_#E|_lL<6idU;cL_P3%-l3xh* zM`;rkqZ8YZPSZjV&hP8;Q(RvpSbg8L7jyFs%Y5(3Mu{JrWv9Eyj^oTF79Sg9Y`0$K zP?M=|yDY1C>en76u#t({%m%j0wI)sDL#s6@$YWPtVS75#tEcEwHIX9HMy1OnQregM z$~_q>vpM(S{lFRr5QoOPjLta#$5_m`6{G2#2Si_|mT!0_iYgwMeb*#!d*kiTWRKAM z?XwbM&E{BP?enLMHn6^R*sq0yiapnImN9FTK6tfjSAH~Q{tS>`>Tbcdy1VzdFbmC+ zRb^9d}H&N%o&Y&2DO)J1js8`^?di)n$`Oh(}d zTyHqNAwrlXSJ*fH;U=_)Qi<5~j-~DVWG$Nobp_v)*VW*#TpM4YO3R_~ctURd$V!Qk zm8DCG6|i#KCOl?0$NdrB8F`03iz1(lUDeTe#E2BKJ@yI6AJ`61?3okmV{EypQWxn7`5GW%tR!&1{NQHt z;W>AQw;2)zWkZ?3&B!{YZtpi0GAGuzg>0}Y-QPWAZk-=%%Rk2QC78bD$2)Ck?<6^w zzp!WCi}8dSYrb;Kkr$DNBpEKlP5nFF#?e;YFS+$fPV&q9=z^^EOa~sypY*lW3j5!r za3Lbbyx4WBdN#$N@hwSOR@!mUX;01^2HkWKgq(Pl^P;Hm;RnDr@AvwfsWe>Np~dYnyJGjvBNLb>f;ZWLk}ZVAoi zwJ{8mIh68>t#w8CbU!XO!{~28MH z;rc$NypfEKFH|NzLvH~MTfUkAF`-`PXLD-QfqFCi)=y}n?|LL$h<0W7s_r*!ldIts zW_}nxwGsF-GFwRso?~*;QR2GeZ&=Y!h-r9Oxl0>w&v>mmV|g<{4fEoin=yl-?;BFw+Km4t@blH?o!_3Hs%qb*~2~F+@U;al^uhqxg_wCiws zRQGf``eP}v4UCR@v|KE~5)?esDGkDzVYRfe)aYf$%$L*OwzhOTZoVFQk?Efk*P0fI z3bY*F;)sUBVQ~J)OpcF!;!6H|ejc^#kuKjPjBH+kema<~xC$fo%96A35g8qgGv+-~ zeHG~<)^P9EuKBh%+f1T6t;hsWAWin-(=F?Z=$iSM?Vz>nL)7|sqFs+=!dQO)s?4v} zaWu*md+Fo(tdYdlkpy4%Z33*|gKx!j0wFPS!*PJ*T~=F;=wa^V{D9QnxHIYmF7nVa z>}hWmI^{cE!KGgW1u+*)c#D|etNf7BTl&^>_i}2Cq_Dh2SF2<;eCmWKeB6;DW3TR- z=tJ{u^!Z*Kk7!OcML4hA&@f7l$u^2E`IP5Vu~}rxlzRIjJBNs){&eI#@fBlpc&FM0 zjR+NhPKpiVZs^694OKO$P`VG3ag@)1!-uP&FgtA}ck*=R>96!MbvMZaZtJRXKbs~R z8=6I7d2rgGI1!#|v)d6h=bM1j*P<%12IjhD$+2B}xzFZasy&NR=$X=GSJcMz1cXnR zbrlPY`b{*PA`?Hc}7wuns5~lpbOZJ#DBo6@4CU>F?`G1(i z{xK>QDZ@xg!mv`vi%V3A%MH0apcm<=sh`o`XY(DWh*k`-^O`;|4Soj04)aW%0bpti z9a4o}8@sI=3$ir4D32Bufdj?1k=|;nZkx}&1mb{`2yC*{+wpqv@P{PJ5m7?>*g^Lj zCAZ1Nu30tM_VmGj-uPF!B3S42MYdpwti@2QF~KWe-oJXtw67JRSNiMHlF2;kNd6>2b z^-l5LtMy!v5r2FTlY`hzq{@p+Zkg%&1YRL`!$?M`^K5KiHZawGjkqkFRSnahWVC|M zhm^)HwTUX#ce#b@VQ^pRX4iFIaj0^p*ch45QXXR)-14Z{0_&S}JX%qhGRh?g@Bz8b zuZNBpEOQPjnAz;EP@!8m8tx^^_p->%2`JASZF?(>T|2`xGsBii4_{iD;V`GIlz!RP z9F)lT>snEp{UEf5IF(m%=whCV+ns<{@!37848FHp*vR^JC}Z>%uYj}kE+(gBe=@zM zDfYt$CS4lc3!FSOBmpv!Klpbi5Asi{3=b}n>UlN~NrfjQg54nP6k*P_BgxP7YW-Lqt~uD=b%&oB%6lTS@!gH?{Jet5Qa+Lx!EU!Cf%S-@_a39i@0Fni!*>2 zUjpqjAyguQ?uHs60X9F>G#&+9Hnm}*d!s$Q|4B5qF+G#KCo;+T)%4fr3O#+IrqYGm zn4=90OUt3Fl;Ixpd)B_O8q~0;*5GQ4RL^K&g}wTTaLXgSsu7py{}3mQsy6x8e{7b2 z7D`D*66J6EB^8oA$w<}1jzTSLrDzoU3HX_E#@i$Ki3N3I8I8n>I!8t#*2EVdOSVwu&!d88a_2^N%EyokNT2_+P^K8hV&8g z?$65dAK{VehfirMs4U49ikr_blNW}9ReszS*vjl$+NUti8rfzI@WfRVb=tH8MiFMI({k^JBD1>)Gt1@w@mMcf?jV_7ZPkRRa>CL z&^NJpO=XVm9Zn1R@jQ04*mmLiNHc*819`%!?$B^{WI#Ni3_6knvUqSY(`DAp!?P=cc3TuBS2QX5`MIyC z8oNV|IQa3>UI~aXPNda16DI5gjo`^xpI$r)8Jy+%Vvcf%7nfp4HkU*R>9;kbGLfi2 zgG*(fg?)^aLQXoC-2MCv#LdEum$21~j!yB7V3A`(`9YaL+Z#9RGamj;zUDNlfOkAJ zHz7M$c-xD-W^);r-`hdz zJfCS3=jwZ_DyG=xgey6jxup+^INlXpgP7X*zf)UpeZxhII$RehXPs#+xM8MM!+2%> zD{pU{b<8ukZ367@eg?7-*}?HcNYG4Mq(_NxUM*8?fAhTT;svI~glpNVMbhL;Mbe&M z!(R=*Dx=i`SeSjfi+HQcInHUJ*PC(#h_}w=`BHQ}jI_$!GMpT?nc(^tPx{t*UmETo0%4>K&jXRIwgi-MgEh+EQo*#H3Noy40Q`axf4|?^B69aZR541FDlL^mN%Vrkt4{Z4cF5N8kP3WGv zeQDLy5EA&5Tec}rN7uD;=nh@9d zgD{I+fgTl=3N=T$vdtFYUg(o-eccP?_j@E?(wh4t0mUl|(653*Wwe3=>um{luF9M4PNWYRfo7HVw@N+G4553NU2j3ni&CWSXH8z?B%+FAmQYAWLy9EMq*K> zodcR-NJjRYm|vgi^HBPIV6H^D>XVmFekvR5T}1Z2CV!0uW>a*}aOH$kc*JgV6aC0l ziYH$$UM2rSfPLg&X;klDp?XJ28S*Dh>F?3Ve#`Avs2P>{wTJe6)X0Z!tM@PQ&Ib*h zT6Rn@z_*uEw!xw!Hr)=1+-HCX#p~Z$z)oj?D|#xr1Q*k?ULWtR^AWLyj7|xGQ|d~B z&96JF1Q*gczVPxlUjV7$bYjov$W@a$YBpRp+%A#})3fwwDoy;vRpKNE8V~ujh&{$6#puldZ{+q#l(Yw~We6pKx_*<}2lgs%???n082Ci}Ag! zdX?%>Jj%~5xtV+^_sNZRh25gZrV8nwI1e1_MJ?5PjDIl5nPdc+R8k0OTuM?k(D9KW zm$8NZWE_NL3JGOT&%Fa1%k_a;UuJwZG?NE!AnmXA-EIk=9KIaYJ{`MFN0XFYmJQrg zyS^jaL}7HXP%u}UueR^ET@#NgbMnXOasqKLew6#-+_3oU~258SjB zVm#D+tOlnEEqhG;{vnKs`c0_Ee;JtSzp=oH1M6Q>l0MMnk#zPSZs^j3TF)`9RN5F7 zE7=A~mP?-jUQW9Ot*cN@>>jKTTCw+d`$YIMR$itB6OyBUIw{D#k8NVJw!hz(z0fRb z%rb}uMDb+u++jck2rve4fWC6egNKr6H5rrERw)DpO%+Oj##!NSVo~s-YxOtO{POj0 zNya64OnuL2FI%P(6(}3=vHi$MQ`EEZKp65p zLx{zJGT%O4(7KhX#3M&3#00nz>m&Xqid#vw=2Nmk^ku24>*`oD+tY}MMTW1A;t zg@XM0(w~^Ew2Va?GmOG#^zUED%KB1hCK_V8GaYA%0lfG$YH6`~G7C0E5(;9W?y`)D zI(pKmZ-tLiKJ_&eybk|Hh^*rwe*bvgDvI}|ZqDUQ4fNfHZ^ceUQ3Fa0B0^>5^dC^` z;?Wa9iQW#s_Fp;1HeM+&D8rr7T*>JkhkuX6z6cq)LhXmikWT^0)^b?)18r#tuM&@kspqB_WRw&F8TFw?E$<) z9?AKK_sFkbduSLMSxRvuw6*da)A~*66JxlIShK&z65~s(x{y?WLfIB9Sogi1AD$uF z#O@VOC&{>qimsbds#&?ZybiAu`bEQp)gD;*XqvfdqH4^z1Xx}#5*a8tucfp(S5NtH z02W=7r!5-yJ-m=5Q|Gd1a<s0I_0PphtNA_Vj(nfnNyx$zcG@4 z?!J;KuXEFj(OJ&patc|UHyc0ddE#F9Qb-mgwOw+QU-=I*I zv3D!{9XlL<49jW|O=kPcD@TUr)}Os@I# zc`)<5n@hycJMBN zj;wSj!f`_}t1lV1)8NNrjxHFDG>#$McC>Is>dohS&1L>?(Wc0q+fokh4@$i*d%Ahe zy!cWm6f0*S2Cqn!V6WH!B~5s*Z5t+Q4c-phg5FpQsMwvQUVn(7rrvl6r>1^SzIcI* zQ=8n36lkjcSsnO0Jd#5Ep%sy|_eqoV^-+o_S9;#b+boAkBWD1q$wHi~&h!uGYJSlN z{dX`&cbGuvdC{bYsm{ruc+;%;LFZ7aOsWW|wwSgn=CX)DSv=DXa2e1{Vlpi_gY#on z!X;FQ!^T%39X+Gy-k;toyQ#V{Q2P8( zw_dQPs|<$2$GiDxES+{=N{3Zp43ffKxeRj|z12I`t|5&?y0vrnkPy1U$6nI_sU#0&^BlQaTfGpJ|Uw;O~^~ zPXjpr=H=N5*S9`&D{?q@W$&_*W-<;kdR#uSy}cZdzF-O$J}lcZ-ZK$i-5)nWl+O^Q zM{#FDG_V>osQKkI5P44y&2$U%k_XzvK-3&b8=V;CuBsLjf!+}mnlU!-;FFY+h#odYH|<;HIrr(?cWP67Nbr#FK4;SzDdX=Y7k12>Y}C{LMWK z!`ShBA^(1+(?VnV(IuHvM-DtV*WhX_BC~fX;Nz&$9pFB`#WG<}$T@$d`uwS-4&%3y z2GPYdc+ClB#g9J>L@f8m(D_PCrKV@EaIp0*jRvh^Oilw2ysDtY%rk(t+)VO&eEKC; zg84cm{R~jkFMr40;liYKDa42Abh+ycaB%a$?&7Ys^}e(A+FJFP%(G5lTF!E07Cu2_ zN9V`eiD9>{)tlp+^&EP%y{p39ggz>Te$gNm?FM%j zoo5jWgv4pWUQ(LOIIlqCN+DX0Zz+c`S&)@ZU*ou<2%CXn2D*c}{Wh^>L!MxELT`LW zS4mvfa=t!-C3QiQ6&jUn8tgRcao8!HTB!b}bq@XB!!6FrSeJXn-~!_PM1VXNL7VD_ z(+20q;Mn+yJ|AtzEFU5{>qqG5)vmLuhnD>|1(Hjq%12rBL%8Hm>;B&%l6F=8C0wPr zF;6WEn1NEf@t~(K)w<{qYn+i(;A!S!4m$&^HZ-kJOu^0G&ZmR@_1ui+-h3PFYr3x0 z_Dk5q%|%_%E_u>442>#l*cCTJ$9i})yfCbREz^Eb`3N2n@6hPW0R;rrGj_a#a?Nol z!8E=Wn9)Y4)JJ$K)zamemB;&EX3Cg~I8kRbp#OoYvelKy{Sw|@W2r+sNte&d8{VC0 zo27|+eGOTV{?n8#_N`b+_M4aVofYd(EfRtR%rZH8_~?X3PQ-;Qtd%`7Orfuf;K|CO zlIZ0r(#a0!D{CRP##`9KMj^hFheoNNS%$Mx?5KodgJ06LAHHWCTT)W2gGRa-7_f_c ztPvxMHZ}{U2FVT>+{qWwts1Pr)0xLu=Dy)pEG$1z&S@@}WrZ@fZ{Oo+a8n#e*DPIM zdui*RvG%G4H@J4COYzlfjG}_4LCYq-oYt?)(tU$SOw{x7m07v@89sh(%Ny*Z0Na0s zSnqm+>bN)63G}}92sPBDO`9Jqu|VifEss`PM+Blv3CAzj$BxodMpv9`v`{9<0R&6_ zHxX<^RGxHVc3R+ZkzVS~#(vq_*r90q+-jow^(OVKzLg~N1xHO6COh7w7EzR+zWejQ zRaiiw^oJo_ZSiDb4l}RUtlw(;K!<3HcK-_IxiVB{Yq$2}stV`2SlH*=-K#8C7lMQO zSNUa0oBPpXwiDK(%4{;Tv$LzmgqGW;9P|XVvwg4im>A#CchcblJ?|a8!}om)f!tCN z<9Ln@a6k5=Vn>y;ChBE(PVByIMzmft&ZPqtgkqjScpf=sZq~ZwT2(sP=MRqKQ2m{Q z-fP-mKH_mNJZZ?{%8DuWb4qbGLxtq5Cc^OOXPqj-rL!Pky)A@P{&oI5s3a+H=(sfF z={EuB*5kK$;wd7wJsK6%#F%uVO~?J7ntI)btcF7s!5qTU5L%#GO|F^-FsPxit``pZ zJEi}#0P^dMzg-#HFM^yBX%FpO=|SJ?r>&;X-Dq#s){$PW1qArc*Y#K6CA?37Q6kDF z7=lTc?2?=Dsk%orvrIA~yimK!o=VFP zV3r_gI0JbgBv64$$6ixwEV5xVV|%ZrZT;mu%4n`P|D5$lgHGl%{3coIxTcPc$ z%-U3EiZcbGb@R-_rH>j*ox*FP=t#$BfDa$E@GXB(cU#)^Yqa%un-NYVhm1z`!)P_H zD-FRUHMz!i)LEm{#hMR3Hrjf+$(~ed&-nuVTd!WU%k9^>p&>KGk#E{pbs2_G-^%WB z(*HFEyRKec-oR_7Q}(JAx02h@&A2Km+52lRj;9w~ZZlkgv#jcSr9^M(tDp%FfD=dH z`qa8M-8g|7j6Q;{8JNIY!^U~FG zCgd8UFj`Fru~^4Uo2yzA=y%2QgCc%`<$MirW-nlV|csP|81^8W^coe z26$DY{|Zz{2IaRiIq2=Prn0;36ScQ|^IKp#N(L*o362MM{IK*k1)p=hYln;FCRBG2YDaFPg4mv?IjO-Z0RYh z#3VVxk-?%dK?w$7wIj(|BTCR!XHQA@lx(EYQEx1~Znv|O$6?LM7CYvFY;e@K*MYu< z?{X)jeHasJne1MevI7bhI;huw34GJr+6je}EhSOBs+<9Uf2HdXP>{k2r`R*VUWMuJt_+=u3gN;1LH2QW~@pZY* z8cBy|;te|>8`pL&I~S#tbhg{(WzE(yv(wX`pL;(3_HBId?e^klmWq;a^pWn^6tA~` zaA<%520P@4z$==I<}zO|%6&DyBoCi;W(Q4=@A|Rh+SjgH#l)WhI+h-7d5d~>oQmsC zVLxIr%Qj?c$1(6t%e(!-x2wl02XBiR!0vdaH6vSaSM8Z|$Dh;wer@`G~>U>AFja}ow)NMTB;3q!VRV}y#PV)A&ku7Re# z-TnFL1(&(Onf2`slz9QLlCS+W9=PCSHjz%B9QY{p9ksmzx5{8kfm zwW!7tJ|ef)SyW5>G;q)|JKov5!`i%;yj)&d@v{m!ZlW_kdf=+8u#X+AAsqOglTig%drZWpZ_EC1gx{o4ohbMX~@ZIIrWl{ZK#iy_;=4m`I*-u2hyYXNe z$_M=bN1T&Y+b8?_HqpQ-Za-;y^L($KA@8-%O_hxFNVuIz$tT8GQ|(G6OY)Lo6f@x?q$!5sCJJ2Qs)9QU2wM+fTUbH>ca*;hQpO-fQ_ErFQ`+nKyq`{E6Dtk*To6QQcjWRbJ?1v3$a zW3QD_oLS|=Pbl{~WA_&H8DO{jmGqw9)qY|Sf1lX1#u#&cgSR?^1|8)#P27o@J#ePk zI4^?4D>G)Xs&UNc@>Pk7p|M(zXq(bTk`d*kninHz11j%ICpv29PtT4l;0SG5ZH~@P zOa)fN0pgQ6=DmsB^okd)U^%Y`V=@FceaLIxFl!OJ(Fp0fcR0Cf{7oNYwL?$;_&h`D zDX<_Xq4ct0!{yeyOtc~x4v^FW%I=>ya zE-n4sA9#0ddBJS>%M)S4TpFjbG2L1r)M(%<5{jdL;>DU;jN^wfrLHX@ueh|#pnmgm zxypc4cIm->-V_*2z4wEI*HDC&zvjg%Y%Q@K-#Y&GS5XUDY%!TfBG%c}#Ml^@ViG^B6W~ zjXO^X%R8c9DhhSkdr0j9?&qEtA24CHsaH#sa{&i}k&HO4#tnK(O#kjG^>W9m-G4m#Bo=n;M(}}=r2%}_=o_6Xb z6uvQej{%BSU~fDQF3;+>nobcOP0TzW`t1y`f?@bZsJfU7nPPi97V!qSm$AdfddLoc z<1tYxBzejjkv%m|EfUQ5RT!3f*WMpuiM2FKSuI=Ac@THf9xLI1$o$gh18!zX3P>%r z@>Bxv+Eez;m?cmn_(})zbB21xVM^$Yu$}(hHU}m9Jlyr{HehM$rpKO(&(V>hj>-d{ z&{ix6qR3!jh>Jcn{B}@XZE)3ZeyJuiIkSJw(`w9tRO*&vY1Vq-j@O|We+3m! zIV8#}$HYYYK{-dkxK>5}*BN{|HnXCRzHZHb3d5sB0n{=442hlsi*|WBr$WrfAE#Ds)V;JqVA#k?Vl|Og0FTT_{yx6LiG4^HRs1cxWeMX z#j1k7rR`3+Q|r;f24SD=qv7SLk7?z72{Yx*K9`aojb|8xGkLO>Pq*}i&gmO`T#e0a zLYRzgFeNo#%Y|E~7)L_FUl{w=q2FTqEm{-b&+o9FhK{*YVcO33=P*E_)KosrvJedzXDu`I(9%X5mXc%~i^MM#TI9>ze(YPP~K02EU_F z-B7LB_(Z~WVcHfXeB~z)sPPF|xYA>A^8ss{X6{>9#hn_)yuhDDKco+0kWG}~zy)D+ z2yI1-cK+dO+K+sPr0j}OFJh{#RH2O0usr_CR5MpQ&$`9dj4Cf*f=>SA!2?0vMcg|e zOJjV?%&-w{QIdNhY@8vH?P@N|H8#ubxlt;g0V=a!La@EZ=kCcXLMjd7&?`Wdp>_Is z>}{&2N#jNNIy$WGiCYktOF!Sgw2rw1kooO`{UCW?GS5kN=0UPEiq}l4|GEbT_#^%h zsL!Mj42}A2WuyQ-LYn$Y`320JK0_60;vnrRzH693FKIyi;by|GGG%;v%rKh7T~Tkd{uDz&sINUtZ5jzsh=KM*RJFd10$AN(AAX+Z@VX!eN$bIarcyy2 zaUSu*qe-ZREm1ak+5PR0UejG;&bjz03>n<}+O|K(5WHhr3pRO}5zmX5HnQseIEP!Y zUTQ0F6B{QKLQ1`u;6Jf`cu_O>-A)BoQ@3!anS;Uv7^>^#$qcF}(rVo~CGG4n$sQQs z1&1RjkHj@x^-=`KQVE7$h5E$Y)2yqh%v0LwPnxAHx}+YYU|NQ=oClBz#ZX=_i=g`? z&#uUxXEpxnKJt6|f~*x@OKuQmU`QkAy6A@OUkAx~Z^x%rdF~YVI~@#&X z@ZRhoR4Htu47Iki-o`e~)-?yrX$%PAroB;*`s#gq7 z-j+PlRIdtD^EtA-LHKe85TfBjBXX{^9pnv97#t(mTnXJHyD>@**p^d)p@DH6^_XQ` z=8&-aQD^1=hB|52cXtz8SHyT?y@Lt_dm5Vy+Ne!(NT5(O;t7+MtuFonvsNF~u+asc-rS;4br#X=#B0xZAt#5E&@xhbp#J{9w>9$j4*vpLaY0VWKdR8p=UApGqTI+{8NZkT?L&e-Da$@* z$N39O8@g1>ca3ql(7SlejZX2nO@H`)II%D=l(4`&9{m52_Elj~z3baUDIg+^AOeEa zkRnKjC?JD0LrIEAj6-*WA_xLXOA8D&bT>#h!Z4sSba!|8E!_J%`tO5%{q`KrwT{-i zp1kADQFP%xdSG1tH4;*gKa#O2evz3xRwHtuIJ+t3>${p&DX%;3J7Is&J+v@BS=?1! z=^{QPB-t=rRmu2ZSiWGSo^JUnHN)4)2Xk@nT>O69+MQk>is-n5;+m^_GB;et?mhHD}4NFb@ku>saN> z)TW9i3umv$6yqmoRVkW^s${dfhYEZq6c>6Gw(f~y)BJ8)Ui~JF(|GBfKESo|s+2Qpr9OYsY(+-+KE5by$>`fu@IW(Y=%i>(RbxcRO+ z`ZJ(hFDYi8+SNzceU(p-XQ&M_CRZlt4v95z(E*5UUkG!QG;~kXK-BI$JLi4nUr6I= zp;TBsX`_}t(GE0J6cO&OTM;OJ&zAS$c%`IlM34b`Q9(ekmcA)w#FWb39qq{3Ky80S z=6tWQDXB1)sltcP_F&w$UOSbxVr_%xX!70H4ZuQadq3wQ1+U@+bMI7NUWGj2syyf~YPYT%nBlA5a1{yvG@DCuGh$z#IO3)lspO-oYY3fHs=I#q7YYpK zK7btW5hJr*2!n$eAly7qiO0C%4!9}5Kd3RB%Y7ed3JowM4sE!vLFHmSnn4Xyv!V&N zR$OH+yZk}VQ(s2h;E1sA4}^7oi!ri4CNR=TIh}c~&tahB4^bPfZ>fY$50!xXvW4_@ z1wLg(`S$yyL(V6KVf6cWss)~~NWK>Gj6Rxu9I8>xaM7H$QJj3JDb`(=-;}zzGat#t z^Wazg3trStul<0uoe(}`T+=o|vNYTD?WS~&PKw|Q;?A$`4fjq=JQOKCE3V}2o#EyQ z_Z2@LqOcdw5Tidvbc$L5Yy>f?DZO5v`!O3`sQoA+V}hUK4`@kVc~h`2`o@hAfMg0J%ld+w1NQjY2n685_bRj0UUsCL2v47c8FIcWf@;K z+M(kGtlRyt4x%z}e3N;R_|6gEGI%8}lW%AX@?pn*d&!Ti7rJbETWF^VivAd8r6W@(%;7#>tT5*!Q^Y6zf0EaQUJf zGUo7Q!nR+hl2E&VrKh;XL2Fs#WwimevD7=u>-|KXs$o2d2zByZq4k}?iZEHLxwWh* zp&t#jU^4o6C|890+Z&&~Gb+xB7tsQ0)v{jz=JX|-vtIf)B_fUL3-kv3K z-S4rIBe={S>g`0l8-K4d|8tp*!q=nXIEjpj3!Kt5B$`w2qG5X9Ali88Gn;3(K)4p3 zo&dmdau*POk7pH-f!lqH8Keec`%ee(-~IQmV~PUSrZhK1$QV2d0H%|y!`qw5yGz(B zwI4}KpZM}7MhsIbFUFc{n%8Kg<$l}Nd*&HS?+JTzMWZSB!lBGH@|bGz-hYnh+Z+Nh(KP6MoY9=Y^Z;0{84pjqk^NjAlEVI6!E zm$KG$of;<=hU@&8rxqf2_v2I$sbW6~lT>EV_bCl)C1oQ&LP|5UrSyv?WFzHYb(J2a zBiYbIPc;tNqYO1KpE5EzRStV9NB561sa`(WTGyQ^G!E)5AGTo?Ez+o`mwEScw0Jzd zJNyehfP8|0a7y3BbH6^PYtkpa|9^KT|KX|YW4b01F5J)@2#9H!e|en~X=d(1CTx2! zX%lrRwZ|&X&F)OpwrBcqUyiYrDT-3x#paWqOpUq?)EdNDI|>(>U-M>HmMw)wcxZ&o zT`11`7hTg!;<~pueFQ@rxYVL0#Ibf5d@+q998yEsg2X;P3+iGJE3xiZeBW5k2%$q9 z#uhek$%AECwvhzipWroZHQn6XTtS3+*<8ElvUSTXEPY_ z`Gv}*D-23lbQ?PRvNd<7=>9B_{8|)Y-Gs=2m}kCac);P6wT%$K!nC(ILw^Pm-x6R$ zHQ@FW7Qx2w5c8Y3f_mvx1H~_BG*y%LzRPC@GyEnPFAv1+d0kteM+2R23!(LJ#MSa? zQHEyelFI5=Wf~I=mk}1P8sAT66TwWgwc|pa;fNHi{#$jz3|}q`9j22Rk6SkvMiRj_X0jtB_d6`P0jSixkgppqoZ<7Fx>15 zunsi6u1<3|e!AmaW2W7JJmG&J=i&fO29>F%tc8GJ0)tlwsc`#EiY0(X%>z0;UxU3< zpEwF1;l6j~_SSK;l0E*Qhentwe&blXfODMGLRYN8h(^+i+@>zS2|h!>rm%w>tL^QN z?E6Jvp$gKKl=Wx5IW0@wHia)nHDB%SXiCS)_W_W}T#;tja zFL~a}#$GeZ;#rb;*?*f=c;vDjIxGK@+pwiUp!*j4%1ObRtZGqAj$l|mpKyL#LuiPu zG~L6~k2?9*`#op^&AXkkzB5#|kYqus-rWqB0bq7@R63qjf1s9g^ZDhBTuSev!rnZ@ zX@eQVL}5M5zJd(b&AKfUN7NakKU}OwSgTp994^(u#-2j&lXvMa2g{eFGPYyG+`Q)% zJTRiv;OS^+bu<2VrPHvTCv3+@uv&CLT17muF?cfZwxLTMFJBdDDO#`6v#~tT4r3NC zNOJr2jZz?pfSnTT-R%s5pR_>U^T%QS4=L@x`wJjYXI@XQf{A!s3pW{O7+|$H?KL+U z=kWH5bA8J9jc=49Kf`!Qk#pXeu0qExrG+LE@8bPxHmf0X8k6!fJ4MVY;JQXw4RKX@ zUkF`;4&6TPy`0q+;wJ5bqxaxi*VhC_J`5mxTnRCMZ!B))FAdUKfBo~8$P#AE0fF)t za&`6s!l4=>B|a*`vaWEhP@@275nrU_H~BGZ8I2oX-F?zuAsHT>gBncW9w4L&bbhEJ za1xSI40fe@G}9;{E0OIT)NgvmajF?2jX~ zI~M$_p-_{KzF03}q2wJyw!TOQd`yh_&hT#Lc7OWWS(2gE#4DD9q6@gB!GOhkLK}0s zRZAG6uJ|L8U1Ls|3xj5l<>HaDV0!DJT=xeQy|-=IG->&o^4f$g0&3iI7jmRdh<*bc zkDdTuxfdde}WW zLf4$!@ftzpE356NHz$t9G@@@YF|Q!@Dt#oigit^8ytM~}HwYni(k519BQV-jD-z6N zJE7g&Aaazz=n-K-iZO#6ax&qjVN0Ye(d$y&Lgri-Fn7x>ehh&{8a}?x3l>aPuGs z?SbO}+xS)p*K&Ix_g$f^JUX6fs~5o#v_)dNcJ&W%!|E4Gh4lzYG3MJU%aIS8Mu?H2 zpW1}qL%VNvs?0)u6gR5#(t#ykd6;*N5X84Jtey6KlaK9((l1Rn1V9bUAhW7Jg{obi z%s#}PGm%MtJT+_65C@wB%AkW_6yHvzG3CUQWAKo&Cv8R=;ed0qje?EtMhVN42w7u* z@(ffWfhT_(y|8Og5NICK|I^$5@BaHY{4w}~L!nLMOYl7x z=#QfX@?=Dh=Uo!_U0jOdbzH8l1hUl?oG;XiCK^xYN}rSeZYMm5h2TFgZ6QR+mi3WQ z5weAu*_ZW!7#jT_b=c1lWUQ2=Q_^XTC(yj_@VZM2T{{l28B3|%CuZwR>8oJbtmESc zACZA;3U*9&DzuG5ONb;XBHMn9lkqZ~j7PeY8}|#Elmy<>6NbKA!H4SP=_J!o<4#k& zx7Iqf-oov9xOT~zzLvP^ymrAKX-e<2f-2QXm)F(|%UGa>-I;^WhqLTEFOZ{7qI%c0 z^o85VWFTk8lUHh?F0bApUaSj^vt*nMPIoccmlS84TEq?G?gA16paTa^2Z*5(q3iJZ zUzBp!d~|4l&J93*^%kHl%uVPAwAcC1za+7l7iLRz!CM#-cde}U2&%(=_B3abuJU1&S-%}vaHJigX2OcT9 zv(?l|P8mH5DdEI=oLN!d2PE&i_FLPyfQrPD(av9fjAG4kdx4r9mS3ce@OdLYvHZMN zT(|ktQ)S{Foo`ojw_G$1wFtI2=e7mHC;1KUYj(yg-Q@1soW4*@c%}2b?x_tkqHQ*M z)pr+i{o>;1_wtNSN6XPk^lP?&R=aD z5>E^#W*_fX2r17Pvjg7}u#O;MFU4DK&Vv`W`TVry@)j@Tc@2zcwu}p5+#09810DyW z=fq;;_azdbR^@tEC85%Wf!~+V#%5#~y>kiKLO)Yt-`0>KX2SQ;FFCQCpXEN8Z4(Ba zx#Dm!vllhCC{X8;GAkIhaCfGI{gba+*ehVa2$1py1PoVv-k`EXpNUqUL}GhF2J3*&KbfL0<>7wc zb|S)z?v5F#JTL6o3;&hfSo&HRxg4Ict?~zChH!H;S6wQ>1M{p;1O&k#W|1K9xsLBn zXq_YIJTU*~b61vpn~>1HYBDey@I}eAD*;1w9&kO;N67p#S*S^p_ohM1Pp~fGnw+s%_7jF%_d8Wn$NCPzxFv&Nemdt3wprFU)u9=CnP0MzEFn#nj-KwhbnB zH@iJwL%7Jjf`dj+VBu4FsCd;$(bz91Bx}rkT~@ApXrPh)TlfK)@Be`I0Z9wk%zmL$ zF}?9v*1H@EV#z$Y@I>mll?5Zq)#1_>jS=)WDHG&gyoAw z7!tE-h##3_aCGt`d0KPWchkx5qGzM#@N=j}4Z6n2b=IQ`nHoaB$+R}|5cd?==Thf~ z(+`OUXalt${eCOMXO?=vl_MH=$3|2UAIH$4uMQC4i_f%*=(^XM#j4*kaDeAml^17m zBc|awN+`)oT-KF4h|B5a6E_#^!z*5?KF^S%El)0j<3=*+A9UGkkA+z8mxYgY$x;`4yYY-_LPLSmA-*t@ykn?7p`2gUA+vyGlp zo0P;A#MMfCMAgAj)wkOe{S+M!YoK9;xGefyoULzEin)ZHL0x2hs*s#S$JA-t(e zLEGur-NMNx$1Im4K7-F5J$$+6>Uk#W9p5Yp9C3m2ZVH6S-%&HYW$bU5{B=9{rw4SM zw17CF>%QKB0*f_19-zd_nlW?HIjag@(WK?x`EoIhiTgc2Fw(C3V}DWf4=7tLk3PI^ zplI1RDJKw5IfbjD)DRTfh3@#G#V5>ZVX#Z+&uswQRKQM^_dF*uEAUm3DK#fqJ}02m zFx63xW2R`U0H5%WK7S0w!D!t1g>QlRjdK=Ccqy zocN8?dc&|$BvAbWBF*u!TXdrh%+9JPqccZ2uQq%1cS^W?wbJieTB43U>p1JRHQ_;gsn94qftO?F@OL6jz{(v)MgPNL$8GxSEi8k^gv)K`VSlY}wdh z>Kz6Y@}+JeoNH$$VJHk>eYDU#dT2e+C4)Fq3-#6o{CDu&AHSKD6fU*evNe8K?WSR_ zm0MM$k1_}|Au)eZ+vAdze*#UesVSc>JgakZoS1NqzF%i?5+5dMIj2UwB>?C%3Oxt3 zS@#N+Gic^*sf%AeAh?^~puZV?hZ;LPVz$Lr5jR&?({U zr;VnL?=`4ok9W$D7ON16462_nT`JS3q@hrj|`h};DD#e--6ttpLYJP}`^9eoUX4ghq<;FG2a<4HbqaSbK{ao=j ztT1??UtSL1I-t-*4^qVTuq9eI#Vq#kZ_Zy7zcMcL{_OYCH`1$J{I*Px>mBl`4~45D z+{Xvv&C&Ro*|o19rR2^Y*UfT7xI0MtVX?`cQmCHs?6;3^k3TItdH>9Op9*a~OEX(o zdHkKLt|=*O_&CDT5sp|{Z)U6?Z1gS0X*%_*->mWz%PN|$?p1NYgt@_oUHlv|8}pPa z4yWRqBL~GveRJ>}{V~b5c+CPMU1G-IC?fQcWSbiL_*a|jnfK0B)#Jj=_fEALHKp)p z8Z;-1yPPu~6|0qLCWoF+){EC=hEJ6vyiF)a_Q5CiIPJvB%v@ar+WrwgA6Ul9@iis~ zj%FhvW*BmJM66&7X_-@8nnSg#sOW(3Iv!vNN3x~tv@?aS;V|i6<%Ou7W-@;AdTo)o z`B&RYfNH=j@!cMOxjTRp^cU_AbHV9M>?e8Se-XU)45r&4 zR<%Xst;07_&hh(UR?{#&dVgw2I%$o)%Ox*NbDO2+SJMG*QDKujx$)1CRqG>Z&d?y; zZ_noq>UZFS?Vt5?-mED}bj-HdIr>l$(MVY(BU(|01~%eHe^2%S_dhOc^_ zYp2epSBBbZti@uDn?Je5cP)3aPcN#mb`IJ$PDu%k#28o?&`S-aetx`|@KnZ>lF^y@ zlF9Oeh}uKRr-*#dv^(nuN#VKk&|4#(US$hcbg8xz@$13JW`JrcbNmP77XG{8S^c}j zV7I3powswGR3zU`WOEmZy>(fb9rr*FMJB=d71tOk_ivg{00V!1%4D^@11y72sMd8+ zJLj!qmR8qRZ^9ezEt7k2-_nB<@4RM|C9T(v^iaJ)y$@T}mfcRT1HaJp7AjsMrk9r6ef}QFgPFg zff_G*V7zyTX@k6apYIpy_aqO;kJaUI_Ihi|h)a3(E_p*uj*GG`yet zzcP!91N7zG-Ej0Rws0#B9dH?+Y8X0ov#g@uQ1i>6K!J8g0WA}mN?f~!Eoar;@ac=l zczR{{*wV*?4M=m_Lj+UB0OXQ}hxIwYUG53^R~`hC;mnOvpw(e!bHbhYr5Y~1}YXC{|{gWFNgg>Cw()KA8dKc`L# zI|>K|lyasM$Wgie;+-ta?Rt4Wvf zihDT&^&%1u<$E(tcNOz(DV&2uZ)G=gsw(dmNnPq>T$~jfy0M||>X@_o!w|?iA`yKR_1QpZpfB7Qs}zT zw0^Nv1y-*FJCtUx80}dmz1MfDyvjkQ!5$TC(z`1Kubz>!K!^-BX^}ec>(b(GCAMJIxQK}#?rB_lrW5S3GqqjSdzlAp zH7h+SF9y*bii;R{aqO*OyZoqd!#bcdu#NGl z`p$WN(Kjm3`*q{-M@GT5HX`>8-^NsukH}3H#}3L&oKL23L`UtLV0Y7y=$x6fx=mxi zDtTu*e(!_JJ;tD|xZ)MIqUiCVbIc2DO{VK|Z}1PFPU^&}6sr`qw4S~JEG(iawfK8S zSKGsy$N{&;s*V&DY@)>2;S<`9dq>)twi}ExPev`2IPJe5)Oa{O@@jJX+7b5c_h>`O z_Z1KI9ZpS^VfF=#k^_8!MoK4RGDT|r9yrG0zDgKIMWs*B(J}NxlpcSV-<+gYL4D&m z{qLONg$5BvH$KA=p_s!&uU(}&Z+pmsxvERRv~Qg5ZSg+oFtAV>@%>ciVoL$Jh7)Z% z&u!kL$*QYkUe~n|j4PJ55;OV-M4iGT{bsX^KXiVzs(I9-AuJgtWn9c?F5x9P)@*{D zaKWUs>2vVvlx=KJ!N=#53b}h_TwL!TCM4Kn-(g{d5RDj1I?+MW(x?GxtNNGy+T$=j z^8=}{PNpS0NM}x_QZ0hcDmE7NTI2mm;XzL=mlngMTKvHLh4|o5;g1ECWpvA~?uU&& zrTbW$N>`CLTSJb+q6k6-UgwF@mnKZ#7#T<}7!?mT_D>mQ4q=SELTFvj&0f<=G|OS?L7jz7)CHWVITuuU>gA+`RvcZyIO|Kc{h^ZE&WVjW(Hi#^ zq7Dj-gC}cms+q_rJsHyvt=n{|jYLZ}@57XHrk&{rF1bYxj!gkOHd~=eQPlUt4&B8I z21iMWlkr!341j1|6QpVW7psZC zPCx*V1$1S7%%aC+46ra@RM!vq@P+!lMlH}50Va;~k&ln^;Hg3r2Zhc^&ri8~t831} z$ak)JhpW~vX0aIoY9@fFz z9EaV3;&gQR3VZmi=_ZeT@1Q%`3ykBv5XS3&q7Dbc6q z>`^tx^xj#GJ=z2-spRy`M)PC1EqG&7Nuil4+4L+gh<9>X)l$;Z@N5<?-k5>|ivOsrM=$?>n*<_TZD=AKgm^lRt|79D`boatZ6nF0mA&$@y=s^V!yPrKdu`;(ZE%N*@h2KxX{0P z;>I;d-h6Agq2K};I@y)`nVZ{(Pid|+g7XO0_vBk7&4kJQQlqUPcgnVL>Qh^jrD{Sn zf1jM~=<9W+k1F!IyIi__HVqR2IFNIR`244}6!h;}3iv$<{$2L}WUx*b-Iuj|cymBT zquylk!s4_&?>;=t4K}E~8ed5x!g$lPZi0>Kk|Z-$rde@)j^Mr*CxOG^2RWB5Tqarr zZQ?#=&PlIcmV!Wo_B%?m>v2UVc0SlGHZHXVlTr?o&0aqBm}o=Pi+#s_N0^`9;f~?% zwhUy|^|DPjeUw)&nf{Ccxv%=MMK+=595<#1O|YJ7cPUsptVc|5I?-LJwyDV=TG`)*Wdt4%OQ z$tkC^{|cC7H=WZgnJx!ob8BiU-)mcbU$mP`c`1Azmw1$Yz-yE``TC&Pc~Gm-b5xu< zuUE!ZQ(Z&tp+`lW<<&CMi;w^EQPsMHh;Y$W+AaEoSIxGk;EzP<-2Q( z0~~#s!CT^DVs)=*d9ZPHwlr6A>m!|quZt%15Dbr2hkiLMOu4$v%{NXihX_@Rz>eH* zNqkH_fUg|H6(h?}b$JJJ7~_e+m7`PK;5qx*g~Wb+;|O1g##3bp$t9$Un-a1yt8QlN zS90M%E5zP0EORv(M#rbZ*yAL)^E>RLo@R4H?&4;B;IPSQb6j~|k?S_NSYA+U&w4Lq zXT76mx3;~gb2;2wey>Qc)ORXsU@Ml}mA6%BrI3p~Iew}$k}`R>;_%z0kzIV_ChEZD zEPUP#oef;xd8`%x>T^*aqK7XQ%#k7>J}Bj~$r>?H51$&pEziNFMfVmMq6Z$uRJY^J z#WDDQ+&RW!SYNfEjNlK(B^nZ7l@#446bW4J2N%{gDSuV>-d~WHH}djXd|tQoR0kOj zVF5RWh07I29l3p_h_`-PHMgF)^mN=Xz7MScd#^&}Q#@ldbdeKyq~hXP^c%3L zn!bGb*yuubjMC_0p>OA>HoMh1vXgMg1g6G=#&KnYRa$G2G`7h z30ZSCf2Pkq5V)U+HO7sq`Czh-!e=PY?^kK=#Xa+SlxLK44n+j!>}1E=A=f%A+Xe9$ z{9rsXHzc_A8x<2(cdlI;=rd-B{u~r!s7KS8d@j4~O~-!hRc9#flKAQ`_bA%K zyJ1Ks`rK*L95r{f;nlmcj6y$b+B8vfyJNNzDFx3MS5p!zO8fTuz*E@36%*cV-^cY# zRQdg*rf54fDl%%_H@-g27Zv_(iwqb8qqutA*faOGnLR-hoV|3a^xFH&@f|Dd|?_*xr96qnnoGJ>exfcHm}V zVe@eQmSA*fOe$|aR8!d7JrNtF9H}EbUu8KQv2Sf-kx`kmx-w!ATf4^bp-60CFhz7& zuHsWT+q%!BNaw>LOIEdlmEm6~8(#gC>8F)`*8mOcBe7AE&~dJiT@> zRuKzKsclCeU!%Q=U%aM^-o5dcZnfs{#Z7_1tzs=#8#ngFhq+n1)-(>?@$s;=Ud@<9 z$LQ!;LnmQY8cdO%7C{T1JHCnsj`U2PGClK0BFirX#%v^s3-Zrqv_%^pF+0j;xb%%u z-=6QS$T}7Zxkh^%SGwLPlnoN$* z_dr6eZYkD z79geseEv&oUApEWfA-%oc7dm*?j7rmdgf%++wN_smPQ|?m+r-V^yAl69AdTE=AVsx zoktz7!`SNAB?V7+f6=M|?@d^XB4xXDTz0ML26=|(a{GSF8&z4Uas-wJx zz6}*;d7X&z-#^_%VZ@E5j45Jx`;_m?jUvfnkJ0qX8e%fvY-K(QR5HfW`LY(%E~cD6 z9uW1JygeN|+647{4AC!!^dI)0HMlW`J%jpArEVn(`o#nLht2q7!_B%@?WNi?lFh6} zU8AkqXmml+5}*P$ z1+cPxS%;+?l(J@QA@@x}4sMyuZjQ@CE-rc7!{mk_uWMXIs~8 zC588Cgr5KMw8vwJ6DuGN@hOO8@D{3ODUCzfRdGY|#a$36PRd_u z_T?kOkE^Njls!SudXC6RK?taq9%a<_oCX~r%-LZpK&Dv{o939bdo_{qwwHeqp;w{sK_D~ zz<^-vtv(DS6mbn;$c}+vWB{#2`&z+q6>1U&&Q_6t2SCyQ({v1A34@R?K*(B%=b_ zB@9V_U+nk}*CU%+_gs!8c^F^GcZX^*fz*^LcW0;qO#OI<%-Q=Fftqq(Ne1J)8*~e@ zdN|TsJm1sYtnor9)%3`XpQ@=@tE>DBWTFVUoKY1%C(LG(<0iZ9pL0h8$BUQ)LkJ#A z&6&W@cf=i;#U>acyEy#G#;A{dzLSSbw8R08>wbw|30UBUl-weX8BOG27Mab;?ZRQBk zvl<+sqk#JjVlg!LbMcP$a3Z{=T6E^JOzg|GDo|(sM5&r zJ2adX^mJWS2*j?NwgTVli-0WP_5RHfFb4nOYc5vHKlg+D>kfLoQFFwj!|6(uby!Zg z+YcbOJpm_?qn+d92#knm7w2F{k88&v|C=y+^ocFnCAXLR3DlJWsXbKvMc&9}oF!z# zgG_g1rytmznNoBySm6tsVDPnwW2i;HC>#Ie{@wLWuEupq)&)WQK=;dylFP>|$u`;< z89wclx?ji*Iq|DMK6r_%MN+d1T9pf+zH8bWvcZyb2QACNgt<{AR97f>)sYnMWkxg1 zx96r`*qCuvNLsDP*`=FPo8v|cZT?2fShJ{C{UO%AMFp{8^ll4f^HbS=QV4TbgwBTj zyIxnm_Mqyce58_vrd@T{D}#B|Vnw7w&8bp8%Kd6Q=zzYusMJr*Tt9ol_LVF3x~&l?yi&5-zxPDeCD-WZEcRK z#cDXB0^3L~?;g$#ikJ3q}D(9z%RmwvX^&#l)vwqCk+1J!+U_Ozk>b1Y&K~Y9Ec}OeDIJvu=)eazhR@h{_~B( zj;S>nkilRepm}``G_Qa4hS&DL|L}LcPrVi#Y63WeKy5pz5MaA#E_6dsFW~eKC{^P1 z*r`u$Eeg#`y<((XX5Dca$X6UEbX!qlVqh$#Ey|rubt5EHT4*SY7^%W{5y%pm3X(VS zggiidK4$(rbq7RU1mf-|L>3a$<-ZLK*ZTP!+HCt&mBCmvJ%NeQ5EL7X!K3&{w+~u{ zszGqwziKEXkV=KHz)~D>CE^H4-wsu*i}>_*PG+pe6+`*LXqNd>^G5Qyn)njvracM< z>{O(6Np((VecG%?R$az9?4arBUe`jK4QQ*#rq4MoxanS)xZ|UaA(72VRMLA}NlWyo zS^L`DQL2tRcsjH}{ytyE0(@mdehO_E-Aa?5ob#mSphKLGXMcZBKityuz}}kAwJ~Sk z#BHDDva$8DndtYcx9tdOM9_-dQN{vq^T*BKO3od?LYPQXIGdg06XNoB;q+r4&zFiy zbNqL=r&vCIoZ9rI{a)4TTA^NPL!-^=>f_W(1nqrs;IKQu&S9Ar9k)GJS18<#X|`F2 za`-T}fQY3OuIMkBuPM7UQQk@w1Ln`eS@^L-b+*^X#q`u582^vf&4gbm@Chw%TWlkm zNc5n5X;q|5e{5(segr$4R9F+YEFHgkVe-YjtMBq{>c(+l)aK;5bt5`&RBd}*XwojP z>(yPIV*2{hlQ*6x9*2#Lsi4LaosjUD6qr*g0xpy|K!r=L#|f zxcM!3di$JU-BMF(3X>An_sCF$?4{dkwCkxf+c-SRkF;KyFZSXnv8M6UH-ygv_=19A zh$IM&ljVeG1(XATtVjab8rxrAvk-&t|Ia?xyVpI<=f9?J@nizPgrx#>x1ClbZ~fOK zb*uk?zV1|QXXI!#X4Q@~C*CUb8ztX;H@C5#bE8z#db~6Vj_u$eMZC}GaQ*VkTPlER zO;4RbSH~F^@Lal;5a~0O&PrgA-|&SzRV-HXxdKB8r;8&f(a#Lut0p7JegR)xrXP=AcLP-)`p0RV7t-JzJaQPQ$g~i^_p=quM(FHTa0b=0;PF-RNpzePQcX+LD9@ z`d6~;@0j^8jbyJ!Q2K5DH`s{5%FY34@7rY?lPPsaJ;+fEs-C`(cR)xRJuWP2tfJJ* z`*r~-|FskD>)x0emfak=$f2u0{q^_KGi}a;E2B=G3)#xuRktTtk;<{TDLzkku~%)8 z9bXsr>Xo*Qr%7Gvy%a@S{g#B|T<%G)XN^u^j^Az>M}Nq(*|%L@Vl_;*(B)z{-6|WX zY&0*9EW#>hqYxh9%U0-(^VrR1s9K7}*yAu&5#GM7i7-R9Z7FZBfhF^{o-XH_Vx`6D zNEd0EQIjeJ=gOgGQ8w8Jj{Vm&v)sBcB?&tc%FV%GK3@sX^+{~k!k9C*-2K$3VBDmd z_v2-wLNJu=_CwE%MSZ^JI0TeVR91#gcO{MV8=k(rvBmQezuQeAm%nPCOnZz+!jEbjS<~1PtsicCF3!{o=B;`-9%BE1 z5@@TNZ>~tnAb-jk6q07{-*Syvlo$!_JN08zi22O*lKY1SgXoDb&Fpk^(lW>D75Dp+ zljF{N1m6rWZepv2HIPx=m+WX@Af7NBO;fh1nAug>rfKGn6E8h=?dpIQS$O1}eW5C%qmuXV1nEjobl>6I0DTU9P@UMvLZ}uxe*}v4kt7B#p2bB* zn6lEWKgSM{*xw-DUAi$Y6!pPo`6hp?EwJM;G6)(Q^_%?2**+~on&hA_*cuT#RI;*E zrBC+Kf)nysHR`>J^s;*C1WY7v{U}^|e4oQktzxZGa6~^D+M^(jxD{_=U}Q2;&zLW! z^>uN4v(d9LX((p(CsxQaytfZib*tnue zm6gk`OGL4n&7nu_50Oi#U|&hq9v;9P8v*8lCn5BT0su!EfQ4fS`~jQXf2wFBYbo%* zUb!jZ#QX$EKV6AXU%G}SosV{@5^Sge9aQKt5=}IVNjZBOf)CxQ5 z7Olm_eRa^#h^^-A(G_#yTVrsW8Yn$*MMW4nt<8W@jCz+jx(pJ$B>W~=bduJ}DjK_% zIQXcUF(Tg~^HWG#2uM~)*G2dO@>zr zXV>q~-dJ070L!WBaULAK1-JzD*$s)SzuRLFVh|@Ett7{oRCu+{rKMYH@h#M6aj3YK zqiSegf+1f!xd+f-kn%<|J*Rh=57e1o;4l`fuUqW z=Z&WxlJ(w2k=WpSg)l&Z?^JM?Vr}*RfS77K543{nT@N2c!<`}Mc7!NOjI$@z*LqAh zr>nV6N1`fr)lCW-DtcgOD_kTHrS;K$o{qIBUQqY`VMl59@4J%`NEPlcmHP#Ut-7$` z{dYZvz+D0z2}>z#&NGegjzewTcnb#)H+h%Y#JIoKs(x}&1#4+TA<=MpR8gb;LJejv zFK6^uM8?26P|UG4MQUn9qL`Y!^KWw6a2HkyhiQdnp~DEtI-4{5a3ji@dezd_jG*Vh zjVE}_p&FV&_)jHeUC%?Q7rQ73m(^M6P5qPoG@i4!RFk}5Wwao%nFeLr#6BfkZ4)3b zvWo}hbLm4yf z-`)}sCs{tcp#|udnFWBHaxJ}}OP7({ABSBW$5$62^jGX!*MO3S`q0!;*Q7hFmT_*B zjmGdez!+L{Ho93jpX!w0hP%$Tq(2oZ6m!CrQP7~i{BX~@Qm|ypIk#r2np?z7coac& zxiFrd1mkx-m|AzD%paXb8@p}y6)lWtMz;|n?iR~w^OY%mz`|@{OiKEBvwaEVo6P1% zF{-AI=5TyN@G_YLKe>~Edo!VV_|go44BSaL##FcxK4vd>^kNJu5RW!k9*m{rrbo?B z5tuOAeZq%kYuGd^3a~WDW!IoV`mO=D&p_bySf);A{w` zu(ol6)USqUM^q~b#fxEV7W~%wM~kyeyCdYQZnE&)PQNjX_q?S+512p!J>|7q6OHUY zj4_gb#aIDw9R(lCFvJFOQ%X&$aw1 zBSE(&WGw=%WvS+5O)By~KYH`LSWi>W&5^K32-;S`sd0Zs4fp1%`bX{>-0loP_gx%5 zQ^n?AxWyyXLYMDY7|k@xn1#D@brLd&^h`Cl#m_aU!AOdbD368b4#MibO%Grrr%&q@ zVf!~NM|(!FqY8k549aQ7?}%F9{3fE+F>H`GXGO3N_U_s!{s&-}fW`qVEdXTq3y`Qv z{<&KM^4bjhuVc{lBm`{yKm4Q<5RAeTRp6WZd(0CvvcoxlrKJf^5I*6Cu*@WCq_crvOZEMv(HD zvkc-d8X&~1MNB|HqYZ(V&}H0E-XvxVc}A_7i)sBFBHf{&A@pP3;49RfN6NeRedhmb z@7klGYTN#vZAOe_Fq1>kq(;tpiJ~xNCK@>m#`!QMg$z+nF`7{hsho0%4#xQ$38n%=@ z-Nm=?2foRpUQ21*iM;8UO|=*lkKZj&b>U*w*?lRrQxZ=3r5;}|t)D`tmM1&6U*@_= zV?Kv66qPxS^K{5h1{KiZ(C}}#WZZ91p|p9i;ezPKQ=SSW1*fr7+aLoY zH}Vg)lFB^$#mM4{?2PlJi?i^dP_50mGb;Dh0>++)?5-XgCR6CLY2LdXeti>?i^8z8Cc-YLr?z|MgrXLz3 zJMuI#^4xQ5s*V-1zMBlOore?yJDu1G7SoMai1u_Wu%Airq8{*FM9LMag7lq;=HyU` zBe?hY0(V|xO{Rus{Tl>o^ERGW@AKOqZ9(*OdF|WOFG=w*@cO!Vs=lX3-Xbge_H3zi z-AgeN8+Bs)ZD^4GN@Ii4+6dgSP6%>T&MSoo{-9w*YD(fA&+*ZvU$Wr>_F;hO)F zcQ@;`L77Kvl!R*6aFTeVy}^J~b9wQTeX5x$`wr^2kJ-r}?%|0N5|VI?Pjec1mItl- zWc-s<{#%s@Dam)cv*CRxoY|Ha(_A{e0PhU&02Vz1`b+Vc8{fqz-9l0V8#yBIp4g!_ z`3O`j`1oNsh6$StBMQdhm0w4r;WFO0e_x1x$*& z1NP`JxqlEkk>Iw8XL8vz5ZMgMo$za-P7iE%=PbP#olI`%$i56sZivNUAHr zIlS!ZmHjq;RE*7TGT$J9G;5AmULy)6Z6OE`n$RCJq>>rdSq;1`SHUVqF6uL0Aem6P zT7r#ST!QTt{eX~!k)v5WMaU5USiOO!SVHHuDjsNm=5g@*beB2-b@Z`QC|88g3GVst z`q}1+gaxeLRrCBchM|{3L#R_Kpxi?wsU1rf=v}|Htdmsd@!iSa?Lym(2rW5h&OJf? zlZ)W?Yo1sQ6He|iv}S4EfcTbiK}(?NbOj`YQPp2GcSF zDvw?X)f;dg$(NK|`6CevX7$&U@Jq}^Po@G1N*L!iF+5rVrqH8}!XpNfY6zVMY$2gls1v8}Lmw{u;W>{pNQxl4T`ugz&c$^PsGd7Hj z(pY8~h!c4Sv_fE)WooSFeZ*>k-{Q@MN0E@fs;v-k5xt19+ zhjdH`C!Qkgbx5H{S~UIO_D-oRo(rJNlttbVS)&*9EO-~y_6=nao)uok<5uL$bYahf zt^2RBPa|ADua`RXcIe6V zZ;!z458<+6sYP-T7&VX<=g>iH&|AR8iOrE&1X&d3F{}#5Mrw4~EY3lc8f^9rQ>N&6 z`9jSf%@5zWZHMZf)ruFp8$by{>Nm&gjJOkqo&_oPmc7_5`;uu<$D%Aaq$4W|jJ+rp zZ*xPoHDAXZut*c|qzaYJA@|#ydvD(8c0}qLJKosCj&V_6x+<{oUd+{*caZXzwPa$@ z7v^~UbPf}`dWn`wIOIu!F)EFq7NM)tjc(c=2;h#3%!2l=b5auP>7goV=&W-SWLdKk zgeVd&;+M%6{BBQbiA>Kq{Sa}8$d>g!%ls?XvS&8E?}Pin-j^EtwYH{<-}VaH>2raU zIv1>|7vW+Lb_qwN@}jW%y4rdSy6zsDv}yH#*^=^jm0!#M$vK<2JQ|7z;&>uwE0t z=6oF2%azb_J)e2)Z|PpsNs}X=&#n|cF4P$^DXkrszFT)ZBSG@$pfB6@oI}aZO1nB3 z=3SL$sP2=G!-9IF7>vPI)Dl$Ic$UW!D&K4)NQyU7gC$XQqwrP;OCg1AK8LqZpkzM0 zc4xlw5+f*r56f374&$p=q8`&llHoGF@@i}*X0kzvG;RT-eEbA@(OHJVcyVi(lG5W2 z9B!nUp=YG_v0>-J?u-|_*KKIpSVN&@*nvloOX~#bLm%MGhwQ!k6zTQOJov`aT6IzV zi%`~`RodLDZKAn9$;bQj^0T#2{8F)b4U&VzA{Rn#gN#(%Gg!0=&-A3!8p6?C0qAt4e-*ztoJ zKtV2)ogsJ%Mn-LWn%1-xpXCL71=gMk_JaxIv9PhYc7|DMNm|HQgiu_-n2B_Paiz52 z(cH%!y9(F<J!q#2nof>#m9K_~Drm86q9ymWCu6h}AJ0q3QfhqT zi4wsb3bR$6`H%E>C`~-P?5Vk%TvQ~PK56F^s!H1%$kiQSS>~}VHN}>{=<$0$_3x=E zz0*4vj`rO4Z_g_{xH+lxa{_u|(A@A{L{qFs|F%XfO_Z5=6442of(;yDut9kM0Gv|7 zqNolOlzqyP1FCoM>9LMTMb-_ykdF3z zS#gUmrM(D8V-;i@6Z1qR@9oowFbr(Vyuw`|lq9!`6my;e-RiJMKz}OH+JL+I3Q|B) z6e3v(-KsGUOZoB+)*}^>jo~o~alJ|y!%H&>)mLy`q~Hko15f-|*D~uQJMwboKyzNHKKr6qaf{9^&rF0se6ZXg1-} zzzZ~K=lWV|)t?^Swf)56zDnHi>iAFKWOI4&rb=V(QZ>q}xHQ2#)r;@QmIE>7n$FK+ zhyknM&ady#Jbo7&Lv?X&48ZBxMST2x8hmn)a`4C=rO{Kua}#j0Ud$n75E+u=k35B* z9e;Y&^yd9T45ilw$P~@a(5>yv(C0Vaj?&-^qtQQa|nA` zZ4*t*EIRDW=X&^J2L4)sVh!Z5X>Q}vADV&wxbz$Na+wzxDKIKPg1Qah*?7nCK!glv z7@o6ADdYBz5Q8oZF%ob_23nnb9k|pQ;97m5CI3U1?>Cc~V@t*Z*au&gn4Ppku@wa+ z)i&?rS{PzAeY0S(LI}DcGD;LCbeyM=iF9f&lO6daqhk+B#3NJA`=dmZuRhIJXh=bk zJj&mr^5qhW0rdL_bQ6kqEcvjLWfF)mbx*$^q@@PlpMF`QnwUQbF-MlqQ_^>anGQ?$ zHGPt4|2XZTNmL)j``VrfJ!D+-QdhTfT1_Y*sMb5FT3C+#U9YS1R?VsbIV&t=Xgt4q zo9DWkH(MYs=-&95RhuroY}?06S&jUAl4XdVD$;4x6wAaE#EFDm&N z?3gVV^ARm}xPsn9gUSe|oUL#jlF?3`X6@jW7wVdW3L|QZ+1^RR4c_H%{+xWCyQ}Dk zDt#o4GM>CyZ2T#*BqDeYW@N`Sdhr&JSV<5x3Si2!%_Gg&a8mXGc5yca_bV-w{c@2u6hui-N9*@>>R%%jGXiveDIVJS53 zslt@XoCn@B_sG|6gBt}ut6!21dNyKy=8Q|7M|b_#QBt?pxb@QYY==JA)e~<$I&HH* zX1%$uTrnAZsk4Tj+4?n*o-x(ZP-B#Q)^mE9w{YBQ;PN-0_Cb}@Jr#q8s^_)4Ggc&` z4a8dHE1ec|K37f7N!cv*(n!N-MV#AU+t$u2baFaRuet`a(A^hS=nkDMr6QQKX9=G? z)!G(p8wA?`YXYAPQx0ngq`>>8% z)IDW`L8)Iq)24jc5z`)fTk`MRw_Gd8)^6O>R_77!`NoBsmex7YNu(xRJ69PVWO`zI zeUe5^YsGgjE`8VUz^LXq_0XsWwHq<}Zp3rPRv>yxl!}QaiK&GpMF`_@STxuT z!%H({00aQT{(^VI7c9hO!e9Yt5Qv2FLp>A5>6>_9XW*==R#qQZlff#b!*iMYKo@ui z0!RT^!g%0M@wH+6e?JIU28ci|^f?k>K^9vF2D zc;~`T!2G0DchK1Re3Nnw&2L1L&XPop_Xr!R-ZO`+%LMc@=U4*8OoV~>2Wmu;Z=^?eknO$SpF9K zwqBQKv=3dS7b?`dY56g|`$N*|&hBQj33i}m7k8IO+{pgC(V!DqlycR$96FbFMN&>Z*HNAAAL;~Z|=m~+u~g~(?BU55syzm zNi#TNX&(#^t?{H80082F|APa|1HerH0E++^Xix@jB7pnwxVf@e@dvRoH_z^(#%NjU z!qiWoc85FI@@$Y!OrEU?(8%(|TuE!$B0cDQu(#J+A9MX%V$%B}Sh!?h$XF_A*IIV%NEYuAbDQlS zVl7-suEXrBb=p#KJUP%XXG%vGY2f$v&dN}y^(A&yUzM}Av2!_Hd&Q|zrkb|w#~1tK zV!{0zKY{eON5qcT1rLqw<)3v`taN!ZB^zJVA8z?0Gi$G_uu_}FTr0V?sxaZ)H<(^_ z5F@(X7x+<06)GEH*hA9iVHX?bKh=lbyG?@Ox(#sMCc{^t&sRXT#`EREoKXrK^da2; zcLH#9H+23V9U!D0AU!SvGBoi~F%no!;MIEK%kLrz4v}|ncO=x71dxQyj(T7q|-y%V+(T6(3se(b|$@DB^X{$T*9X>U->TviI=)tpgK#Qoi4KCOVT;HdW&@ zZRZXNF!eCXtZ#j0w1`7U;$+RICC{HgQ?&hnbAKHBdQR)KdT}N#auAX#?R^vXl)DB^ z%%S-+8@Wb%+YT{142G!o%+ zsWk_i>>KANo^dlrNs^`N+fY!(h>ojjLPT8129Wq z7mMc;xE+X2f zmd~`@?uM`f!cn_2wtIt`_zRFa>v}nWGZvWhZ zfAv2c@XEzZaoWRRApy=Q$WhJkj!lpLYz7)&Y0(i{%A3?j`yU+Q}L0|H0#b cKl(QUecTW}8nLU4!Rt_?KSxFisQTN0cE3+~cDW5FE~oTeerNN{&M zyzl+Kz0Z%m@3>>{yU+Ra%`tk6wQALzRrPe$T+`O${NpNsLebC39sp2L;RIj;{+%B8 z0EDl6Y+U>SNC4EQW+?#RaTP_t(c9ZYf{)M5i`UB5-P(@V#vRD#XXU{sz{}4EkdpQD zu(ENn^JcKNb8vE#W;%p+GBG&WN;4S>tMjXSDA+kVy$zkme4n1rAJ!#{}WX*5q;dkLLaO8*$^ z=}wyIABzHm!MtE0UUyFiJ^^uYaXx-QK0!gArye|B{%+n@emrho%>R_|%FfHi)5*iz z$=!|NFNs#x?mphqOiwfYf0h9B_&2ftAy)reM|Ji8_pU(TUjY0q*2`PR?%(J89}4!; z^Y^gh)3Nh%_wlr`d+N^o7qf?if~TF8x4WmFySwW@QPgsD_jdPkboXFTQ1}ZqF^1>r zRyIyHOa&84m`q2lJ{ZRKWTr}9dg=}8W+las9kKfm~^SK|CH6kaNb3J55Q$;cmgV**ypNr6c%FFjO8NR>%-v90I{%6zE9{TI@-!|{l&A)AbJGZAj z@A8NoArTw-Dp5@KQ+YHDg4`hO!N3=9lBTs#T_0tzZpLQ<-Kd+`7D;;{=rh>0qP zDu;qZ2tX!8LLo$Y>;=?5opclc3KG)4D*+^A6jU^H3{0da`VXHF0FaT9kWtZ)(9uwk z(NF+5NXP&}6ht+ z64Dd}ug66IF3MAPLKH%PEZ|=9uSx!k{)NE55cn4Y|3ctDL;x8_H?p8ItMbJ$KO6GD z=wAr@3xR(j@Lxb+AnwV8{l7_=yamzW3K`2W7zCeo8DS5LHMe{OWIh61HahoGMZHB`aRFMI_+Z_ZN5DC)(*WVzBj6S< zyWUJA^t9S#$#-F3z!yKK+m5z*C}+;P<<}re#2)a5?b@Mi6!fz%q=>sCqkPQv5g_<* zcz6tk=Zf?!IP8Bk9D$TOO@6-7*t-!`btv{3-)@ta4cR@Ck` zs%7vIzzSP0vNhXJ#;j2UIjUp5q01Jn{RQiR zAGYB$sn$5t$jiDZff|YXUtQ=Q0qmvAbL7_;m%iu~7L09ZCgOTxOMWR7=0Amkqm&*2 zRZ`_%%RcO)Rrf6qhJES0&$9c|JsqFHK+TZdl&g zKCrjayyq3Pxj7SJ>P}77N5J)=an+&N+}de&^>J_y zm(0ryNwrU+KGqUWX9%HLSfc61_rr{)qpJIwb;FAU*&S&~J+023s?$RPyctCIL<#YFmTioKS=-OYqY^m%?JeCt~1o_BHxRY5{%e!wIv@* zM~ctz`}GK5)B&!>UVt>5o%dP@!PO75M_}8bfLiV03Gpf_-?>`n;eRZiN_u4|>pfqMak=|4G83Pu@M@U*~ zgdC!CuF*5SzcgK5&fQ;Pt$?3^s=l^9;qoxu)q3~NR)*s9*LzN1-&_2~M}S3c0`2l) zv3P6l)?LdHN3r|+mho9Rojl&=hY_{uXq74StR@ED>^eS9Dt~2&tK`IcTMrBq)2qJvt{zEtB;#+be{ZcKHzy z{CfwQxU|x8+vYC_mSu(00LVn$u`k>=AHdes@0< zNz+=j6t|2({#d3jUoZ{X$r~<8UuWk<*P2I{^7CMzU)s`X5hPnj5q7CYOLaT&Z#v0_ z`d7W^*~&>^wMe|~OcaS{H5HrdmI==Nebar9$bnSO&E8&NUR5ei6x-ldtenN6m`VX& zR;&BLd!;6i-msW=Gh)XrIkS&|>dRvb0qOqvS&|rv`_(>}ZcVV1HR3jegE*C#S6S@D zb|{q-piE1%T&P9oslJf8W?h*e>U|B$=7^LYhht*U!Hd}t!M3|+vz~h?TT&s1ERdG! z=7Sw29Z$52ncDc$ct4+D;q-p?XQSg58jk?7kS(_@oFEww7fjhjTb8EZ(k~|-oDlb# zup9R(ueI~wG!vmIf0;v53m!E+wNYrtB>@`wd_R`vcBiWcz2{tzYojg zIidK)y=b|=%CX16WxMzU?^oy}fd4|Z&G-I&i#a=U_;~Yksk<#3_g`QyxMWbaWJiIx zvN}98Ed*PFYTk zHl(1Fxb_<#pRoFwdE>d(aa!u%8iLq-uxUrDyKFgiCW{s5r1d7Qg%s4g<3Vkrz`8yN zm)OrIgz7GkH&(W_TME%xpW}ENszy~V(F;i@u@S4yqi}~X7~6W$qQ=W_y!^^??V_SM zQfj?3PL0^N+^Q|yo?DZpZ_g@cl-%iSIf?lxw9|DC@Dl0sUTa%58_)8>^?gE-0#lA&<4ejqcYc4s`?*nohmA?u2&b}2xIJi8gHF07 zkwl;PGHvAI_VvKZ#YRoI+?VqDZ{&sNo1qUfBeyQGxl-dZ+Ye~_M(?xg2Q}Y&&_8@y zzAn~XZOMVWr%@IKF8KOW#@Jp>q==>Gh(w!r#7`_?< z9p)RD5`e9l3aBuYj|avNZAcp%nSihl-F*>8O*pJKUj-%D$+^(T)W^DIiCDm(==;Fq zMAZccHTbuY4^w1n&O`PPY?!)2_Gv&C2uhw{`fF1>J{1!X$>mw&M&_rsLH96Q4&64D#ZQn^R50R)u=Hg9}^8nQU}OI$pUI zSe9)BE*9p#!8LY|TD>mIKrUPF%V{6ZzXcll5Y~7(9~0}E*+=WZmf`@}3#N=Aa7;Cq z`l;sAUu+aHE{gr~tP8&%h?R(k?gz~>Hwql=G#H`7}SXO)nI-JpUf@HF4^ zoxq6`i-XZ9H{50rit6OY22ENMP)__;jX&e!PiGvi+Jj%-azAtXwZ)L~L6?ICx%42Z z7@Q8!BL3>$v<+Ns3Vs9x#@r?pAzE9D4{qZo+*8?f7T0DH9t=w=*{y-89}=j6h_cwG zE=8npNdcQlDpJ>_4M;mKC%OobQURcm{=dDM<2 zuC{^EuR-q$>FM;rynHyL!(-c=u$Wp(bOiWb&GsE^;e^JGwCTWCOQdqPHCiA#-QZ(k zaw41zQ%l6cB*eWKE6ab?8v7G#8e`;8f~ zhIe2Bnl5>P#co`l`+%w<4vMtY7nBKykO9YvunUR>sPz0Tvgig5t3Qr8E4hY@>@Vq& zvXIvI?pB=Lw@);!$Z#814|R{?%O)PseKtXK$a|s|Y}-^XNK*T(upiE^txA=FHeP+l3#Cs|v{>Cwm(0);_V?vvm#{XSonONNY_2Utv~Rwj7}LfBLzHE2~0HQlUofK?O9p#$2-BYs2+%xw#=nesO~~NcTc2?J-%_R*_|7VU6)rl_1u@v*CazZ zpsKAxbGwh)ca}czm4mP0`|{!s3J^K5sSnIg$9Ei<3oHHmt$VQR`j>~aa;p)M zd*6e{g)iuH>+IVU%vbGiGu|v3xSYMY6ZrL%ejxl2fCvf+N(yOXofb)hP<(xV0zB?Ie|ce ztZSX=#qEg68g~md-E6+&7Y6Y+H6jm$UWs7b3JdI#WjiBjV7Yyz?7RtBJ<~oxXfUya97r8D#aCc=^xiJQhWyV->zY^oGk}Z*Q$Pq zw&&i6;Ia}qYwlPnyhQCp3Z8i1b$x3`;zOhY!XPXOx1$ue%o+<37CwygoL0RmO1>!l zM6f2*oo-3B<^bp8hi}hKjyrvxh?tbm%3Phnv#lu zmqK;`lp;?=;W%!6z7Lu!GKEOO%N-T=EIQqnvbr3va7xcNhMWrtC%XKVQnl?S(yUC~ z8=A49pq;W}kM9!iG{t!razf5NZ-$1ZCers_Hg{3n%B+GuAV+iajJ;DPlz#So7Yu9z zD}kGH)}kg(o8?8bFfOsqb*S$hY>Gh=;MUavduWG)+elX1K1IsNi7Xumr(KXU`O+x< z1_-|s-TLiy8uuVDa7mApGwm$otMLqH+U0W0=X;Kdlqm1Wk4!s?5bDOk7Vf*y!6~%b z0y^1l=h1WSf$Kf%(8SLHvLDpaJ?|3eUs@kfrfGbgA;Vm)IBoCy0&Kqx*%H-Mn;-|l zZXYHMP;EFm8A&Kp!?gS@BDN3ugG`f9=%n6^mzjrme|h~1%B`o=6yLsf{;72ITPD76 zz>Y(RYQ;n`l?Tu80=mevkDI%T^dj>1AITdG!WD;v2Iv$Mp3iGGM-Ua3MXF=t;aSkm z4aBX_MJoMXAIM_B@}CD9ej_IZF`RCv{~Cf{mI?4*)>d)8@%X)xz{2*hE8)k?8E22H(=wn8@k-R{m=7iBL4%r>D{n+SE7d}>OCs1 z*Co6I$-fTKE1sQDdN*1R{40Q?48C2t=yY}w9r}$oq?N|L-9Wjpu-6J}23GMbBZ|f5 zw{NRYCiY$B+nXkqv}$x|d4g4P;yd5$nu~oU$3G07%H>UaatU6r7dKuNcSzQEeDWi% zagvk_NnGjNSQG;XD|seVw><^;LUxArEc@O!TKk|-4l2gxHSYvD$V`0qcA$2jUxgpu zWEUo+wchXFLR;CFuhoVE0>u&=eCFOhS^SIMzDF<_iDtgm9dpSXudTztcl0d>S!~K1 z$+2uNT9+4d28KOHflu$JMBWg5E~pQ})Su?~#5K6Vz;|S};`{ zz0Owjm87Dk3U4B_53qn)o-fARxh>qfj6CdBgTF`boaVW>;I287$iXWn&lefy8X@$M zpC4iAQ*K$1`#v!)70icLn>^gHx|Elo?bq~EIDp(uPfQ)5$-Bt*wnP0J5HH%3_H6OJ za#6(zF;S35W3F0y>u{|%l{KzJEPdZuODV@^K}eIla$P|DPm&Ji-s>@yTvojlJq~N4 zgJwgX-s_VHoLgI3YK2C>y@vu*1SQ!ewY7~}xY185Z!oopyY6`^)fRTA>iZf})UcS> zs5uyXGJ+m!v4?;XfJ6yRKx_3Il+S-`yG!Uc1^>%y7JMIJHgBard7;`C zrJp1|SesZ*y}LS|`-Ff<2>;lU4Z28N3RxUVN(ybV9f_OAj>G#}PT&wa@17OVd}x2< z!QXmm!9H&7|1sM5JcxE-yIW~ozX3oO@!hi^3?WWbo2V`8P@_oBw#%2d z8~JibLG6fo*ZaW1w(A#S7vqNc-kHXE%dhWkT|5cZ2Er2|+79rv#vH{Hhks7;IpDI= z^F--?QAod}XNnr372zN}j>J0)5@!-F8{68c$AB=(_A;aE;`HJWXOx zwAsWFsidTIlnMA|CE;se6!%n{jFB$(d)*6msu|FC3Pdj@Q=@eIDOkcO}3 z2TGN%L6~90w~q&Rs{hdt?*QM3i3T1N`A82OB*LY4McY>{@jsb3dO@6zCxO|gu(Kyc z2!Z698ZP;WdQ}yj*o`?b3(1lxdrnJnkM}nJUWHb_NFu0NRNARS0)*(B2V4zhXA^8E z+7M0;{E}-Q^=Hk+K@cr{L?SQYFwjDp&tFKCWQ+75FlhcD6;jZ!FLMll0)jaqy}3R@ z&=(&m7Cz#RtP(^Qpu*k7xuH0cn#9bj+4~3bw&rZ*lL;?l z8ULPvRxj#csJ3674b`y}uc!kg;1v-zvk?Y!2>qZ&6zHc*x4D(E78`>$rxJbH{S^vvE^E`izZw&l@^o5o_P8D$gDwAdb@wuAIlM!Gdt0 z)s_1vc;}05A)1UjAza5|2JwsM*xx)mISC;|pd-rcvOImo+opxr04*Q@bu7T^2yjF8 zGrfcXO5DIv1^_j8v&LlkSk6!D3YBV+Q0tRceP>^+7}9at!=r4N{#qRNn=MIC9EU;9 zOhIJUN>QmT6i>yC9Q!-`2TTWrgM5p! zv|L0gid3bJccn#M(SPr^ea-FB;Z-*P50V}9?JcO1fq$}f!Rd%D(%u0sZSg@?d=FuP zyOPcRQsACV_SFaCmL@pNK`i@d_Q#wiigZHL%3MdteihH0ap04VB8za6Rvm-~*~Hd%=}@kP3vhz-fg#=E!$Q3O_4(y6{WO5e7)JM@7XoB|hRp(p9^ zlIqaoPjZvBSjvgN97+YI>Mzd8-RY$(9szDOrlEwNv-$4ewW!9dCZ5%E-4*K?dCCcp@iU#N)c!o zULHLR9!u-^vDi??p?7qPUN*BA8W%6GVR?A-{+B2%iKIWCceKFoSoS&DW2!&q71+!71t#;+w9&|oex)&i^IE^4;3 zPr6&Q_fonw#gMohdFizstYqU)?z3sTN5FRO)p>iu-d@j=rZk-4{}1Ap`^%hspDg8u zX2OHR5dL>S3#IkG=a{yHz4;Itq~9x|$bNu2uAakl+pKB?pMHvIslr23I-M*HWbdLn z>u33yg+n( zCmT}1c9qBb{_^_$2J*p=<9Ux#@|M_jrYob>iaqa##QNOb5PZB9ZTPT6!tPz#Z8bmh z?MByY40{^qxF$cp9CinXsQ{sS;A!X7Q_B1H@4)g_hgVzwKLPbMM;WNb4iiOsqRU2Fr6{Bv+-lV;l-`Ok`D2kZ;L65PRipB zGx=6_Y6+vp3QYom@_#G@H7R*g*PLs0kP6L!;dmbdlR=7byS^Mv!q8uAekZ1!!Id$v zXlwlQB`)jTt_LTdA;MUJOZk^^`LO^j^hUHOY$G^CKGY{8?KThzjCz1shU;VFkez;b zO?mLLiF7!waQ|+xNm=+xnGs|+;EMCrosI<+Su3}|gffv8xhjfMxY09VA)U{|$Ce~` z)WJmv#j(;d4AngwOKU+Mx2ab`8_f2J)|;u5T-;VEcN?`e(kd?THKQpU8G|<8VG7pb zndoT4PAr)1%WcC7X(pHRs0rY4_z*nwUTg z^UKzWD)XyB!9#HX1n@=j6DnY~z#RGA=t2T56x_HOSN(ZDcdZ?U|5R{Kfu>KIe|9y} zq|y@=VCGk%P5R^2QW$nWmSp-(Wg_9=NOo_YH&B&aJey5Hj}++Zg6n zfO+Y5V+JjY`nZ{SJA3W@(&g8K8XFAmmW^@=FI9X_NF7`gyzIV78wREmZo}@1Qi%zP zfb(^q8Y~CINxpYtS`gC6=Kq<1aSpYd17RXNCgv&fzo|^~XO$KI$W!|zSNe$Z)uD-^ zi@MVMF>$JV@qlbCTMQ z6FkYQ8Iit!kNau-HQcpVXx**|WiZ(0-KsbM9#_HNALwMs4Xw=aBC6XZc z5x`Phe0%UiGQwQ(r@U;h25m-`NGR=<+0vbj8s#$|_?^$nBOq&D*44OS1_{MDXKD%p zK3?GxGW8oEt{ESRy?6)|jTOE!uMwXfaz@vb|7a|@1a zvp`#=ii#`>8|#k(I2g>~-9xt<`|Ea|y@Cs3O^H{1NO4GtiP3W^*+HR%TA&%CVN#_{ z;G0B%tk9SX48oYTZh2VUWE^dG_gpNv_)}ewPKEmH*Z@Q=YfyxC{@IQ4N@B{!nd~vU zr?UUDCENYzo7J#wH1++Phwt@+H@VBC+krThiQgv}w+a56#85-<+zSbroP)g!pS>HS zr}GK-oKVok3g1#tXwQY328Ju+97b#IS}r?tD{==5)|vU#Hnr$p7R2OIYP`A~&XY@InXP+oQU)z>nEor;0arl*`AoXprw3hdCF1bs7^eS&DxMrZ6ACFT6P%z zJU#X~9ui((c%boRtX>`J@M8`>1NU1*@bW_4QsaoO)d?+jMZrq~k?rqx*3wt4+FA)- zPIj=D%&ybx+WnjZlAWy%RLrLw35qcT|8IHv$bE&j=GY8>5CPB@#3ITj~DouzV=I-Gx&=bjFm3O*ck)vXtGUx zshE<98okT%u$E{Emn)k&yM36>t3#G`&b|{dw0E?IZ?PM%;+15Sj4`lB3knZvzEC!7 zVomDJ5_-%};lCPb|C~+mq5EhWAO^`!ZyM!R#Z?nX=^;w#*feczoGT(u8LDc#>m-y} zbphDwgZAqswJ&ymhB%lpQykpgj(*(pz%VG%uI+le7A!VE42>4BZ{9y9DvgJ@>kp)V zrua1;aqPgXxG1gy-1tGc^(y4EC&G8;;s-N$wQ>mz%7nRc>9ok3+GUBns9V>Gd?oUl zJz>q>OYEp@OjNRJ-N3UKDX}W-EI%GlO<7(jAK9|fc)}>UB$T%F`)z!OdGfHzYEO$h ziLHZI4N-76WyVLH%|^IsM4d{BUFFX3u!*is5%PO8fU}LW9y$tVQhOlTCy&+2h7PTYD1o|?L?GRW&WT+88)T@k+!LW8J;TbbnJr&eW>LJNe~S4BorQ#&qn3y zY}<$XG+)=`sp}G{RI$uOXO?9_I8|`b2&9#N$RrOD84)aE|JDu$9F=crN6IgTMWT^) z=avUnRZ8K4RP^Udmu> zshb?t#&}_dQrx#%*9bprW4*9~L8e1BJC zHuJL|Xf6dO@V~L^^|S$??~tf;R_;o-Jh|2<+XrpsF{7LQ4f~#wmtWD+luVmFeKTW^ zsg951PpJb^TgQfYgSl_jw#b3URf}{Z?QZbC9n!mJ5p%k3VD|?TK}4oacijQMsQY42 zlv`8vJa{)lqu9AqK=?230QTe^xTUUbf=e)l?pj#|4xp~VzktXI!z?G+(vmkKCJ)dG zmyo7*O8WwPe<@fQ$~D6ZA&9ZZ9BU8pSe%K>1wn3%H`%?m_4PWOLsW zt^G1;C9Y+%hSL|xVsF;JQyUgc1??C{1nv>{1g!t}lGvCwTKt3ODC-s*^d|!c&tS3= zfzRUlBGz7^CD<+*e}s0t4Cok`-`m+A-!*rKUIw-X*3yeVEq*xkDXI$s4y=HSp8@-h zd=ZOpXa?0aS7fpZ&N`x$-F!z64%=%^E^o(+b=KfgG^Sz@i9eJh7P?vz7W3?E`=bMr zgg9>i0FgCQ0DgAc9XtBQNRacsoLM6>W)sU5zW%C!W3&8pqw~9uQbB*NR8m;8UVaQv zDW{M0OJ>QQv2d!RiPYnl$RrK5zzR0%<}I)if1d5^hdr5W>3`4Cx;<(fOC<0a8&hVr zdaTs$u2pUP+$IU_tY*=*JfN(dWez<%Rqu8GHqf9z>qo<>?EU(7TYPxJ1Y?b1-5V;-7jsHvV#)VUH4jAKTovk^SUS0s z3@*22tLW(z+uuA6FqU;BtR>y(`i%{mD~1-dDnS=amhd0ZTZP6GnU!(b>HWftiXCfV zX?9HGYvNeEY3#&g%5~aG_YFAV@t~4Bm$hl8A(&}JNpanua00+fhNZy@m)HKvCsoU@;YA5u1LdN#;Flpc}#L13R` zk8-njj_!AJtHZ2qP=6B9*7Sp_B!fO-t^NqlS;-I|;*`OlIH1{2xq{|8K8fF9Lz2)? zANiMg;l3jB+KJQSimjENRWd|d(jAJ*cM6_?PFa)^l{u|=P`+uK#1MRJR8uzr@g<9M zK~mbcu{cHd^~R&4{67`yIc0wJD4L0sZuHw<(acvdCJ8SrVOdMR$`QNHfI_i^9Z`@4 zsw)Wa^(Q&B-wI5rd?oE3)+3q^n>YW#v=3U*4X(4GTcBwDY2i(}gd$AsB7q~-kxT4( z$%bnw5dq+pHsT^8+tm%aaw1n(4C`wKo~?iHONhsR%59FTzuGk0AvHFn;4V=CkV&MS zOsTWLirs6qdK}f#T0de^zts23x@#-S=^@AGDZzCb`H0qte3dFJGhGf4A$1`&k)P6W zKOjJo*ZLlbJg$f*hRqy(({Iq5&rxJX0e@eb?-Y7q+lbyM&9zfBH~r>#+VkXN2}{lM zOfk|14>~fNG4dbDu?RcTw59VCdevX*Q>yTH+@m-`{HzAUrHykR3jHWq$a%uiS$(ZZ zRcnze(;Wdv7}?`I!(~yNWuB6W-;n#RCusng&HPXqsZS&^O0bXGHdTe02#4&^FI>Zy zW$Chm((SEPGLL`;PMA_wNu_pfng(p&{kTfX1(xj-d1`(20Izs|eE(1(?mnk`;is|5 zx)Pc@K;{bDF#Vd;{X@o`np#ZA`XI@mkl0tIN37MP^R)e>Z-sBiqC?YbJ;adcxy9iv zP4IBhicVO7MxA$+h%4kCJP&QT#)RD-MvP^CkU4D#naO(h2fHtQVLJ65Y@3M~`ttyY z3#DC*s@VyL;Me83EnZVoX-dLfI#!3KR%!FA)c+X2X(pL3KgX;bT~DC#8?SP3!+(Vs zNUA#5XN%S&A+a$BdIMFUTV&(3b+0=3b)R=*bzw(gyDu^PL6UV%*%cZ%;4dg~DUipc z_=(=6StuImtTtT|7lL5^h6E!@(r%~tuv&6As%EO1`-F`GXB1Z)Q5iA>Kv}U+`@=3x zT^IlK;)CsehtDew*3v&m?5NJzF`-J^Ur=^JQg5>Z{<@hwlYGrL_Z^HyP)b zX2}TGU+sp@#R-$p5?AeMc`BFT3ChV8vusHkPU;F9^0=^ZwNKpNq=|a5APp<5RnggQ!?@S2^7M6o zD95GxY@Hl%ezVb+lph9E#L6pV6_JU1rCBiI<8LSr^U-TIMG)kF*qn+yLJ)VzGY1~@ z$K;uA$5Xv4i#_*%A!vjRzBRGqy3WGmNJ>=6YxTTNg`})m5`iD^!UstPP0mItv)FS? zvwa?Rdz4I0YUX)Td1pP}>llWuTm^My^p+>(T326L=l^q1iBPozN(X8<+dP>7bqSmq9t!B5E!aZEY_q2lDA zh$>CS-&$G(@*rLsS5A-^-+J3iWWNANV&GGeOQ~$Jz#TqTDKow{fqx&hNtk>tz}%(E zRHnoo=s^^&mvT9p{EKsAb|==(aOqEPEg*Z<;N7$CXE)Iz%b~2=26e3YUl=|c)Rt0Z zuA|PhvcItO4w|21U~ShU_bCf8*GEu)XZ=AXB%@~HNwsu)0k8MOE|X%jP5HwZj;~dE ziGw^Y=Vj|yg8t69N9s$xM+bt{SY8f?bqQp0l$k9U?ExEC0*ncvn1RiloW-1wL_;|5wIIyO+;Hi@OW_q z-|YVK#};~L>wcYYFUt5wve%h#$di$OaqtONC6z4=y3@2u^H^B`ZwPWwh56KrH=m1Y z!fSI{fw`nRApka%6X~+}NTGUhDG`x8!^2#Q*6~A)Lk!+AA=(|EwV`@BgC!yrHS5Z@ zz47>8)k~f~Bty^V zPi2Z_)v9CeoVe0=-|l!rX|`alb2eM2<#WEQU$Kvyn#>^0$=)g_#Cg-dpgK_6vz-t3 zqs~Z%A|$jL1^qt96R8?8RqBVHF5HG$nxG7tpR%esY&ZTuUk05@|Y* zP`snDzRk!zuNr4zJ{Jeefn+^W7h#tLE%V#wqZKdTJ4e9rxX0891MY?K-e&6CG~GE~ z`3;Tf5W$;DdDr5x>o?fE)mYqW2w(R%`Bw5*kymH?msK{eFM`E>SNR!lb{lu)nTBXnkv=tTV%n=mYYu>+ndT!^ONUK@sDLUtzYaU zwe=3)P%UUzG$FzY4v}KbY^Tl8nQzL!eyXQu^j<16;w-N%J0~dUzZYhmv2!$0pI-^= zyi4fv;h*z($oR_NUolE-xv1h`?_6sDe)b#!XwhqNeb;4zZ4eII*1ebUG;4LlVDz?s zK~ss2y_8VW_U<|Z6jN?1MY+r*(#mj z_#YN)_2MNd6wWG6eR}|LHEqGTwAqRiVe}lY*|2X6LnbN{{jhkdKJ|Bo4(>2p`~HNd z?~v{UYegy?g~Yd9*tWlS(hu2b(O_nPZVLz&YA+ecva0hR0okofrVe_s(4^HGq7PyH z2@U1(k=Pox$1N;V=F>`&s0f3_mnmJza)i4_u`95_?uShUtMs+5o|oTfe<(eb1uu=J z=lU3PaRd*hAIBE;tLK-l7Ox#=)~kDFm}S8%MQw*N!>zt?k8QKv$PuaJ?r}Z>3cuBY zUC=(_H8-giHX*mEjYA-eDQR#u5^`oI>(TuHH%{TxtY$T8Fxjh7c_pNmMI3H`pPT*} zLJ10ra@R=KeWqdIgOUl*uU9H=OlA8?YtM`1v}cDMKeOzkUVY`T%@{0L9mp`u!*haA zyeND|$E|tv#SN;n^AiG`+*c%{+K>8uH;C+6Td5UxOL)v>(ce87+b_9ED{r zfzG6F12k87)|v@O@Is)^yMNUAAi8-=J{TY=7nz2ADC*7!+hL4kg3{vz1zoE zZk`HbTKg|7X13_!2`N3%OfClAei0${E33I%pOAnRC%V^;3UHgI*^jkoG=TXh-z_X;y(^mg-ov+qEh^xyi#CtR(K!6#=01!c2yV|jAx zzQh#S1l>mhpe~Wzbv=C;Ea@vz-#2v$^O~xjFv2ulcTq@;io2ZvdNrO(Hn+PE)RUmR zZxoQqYy^DmuCJU)=%4d~)p9kkCijGC^%^(bS*T1cubVOheep^qrhLSiwZ>L;#rabc zIm;{eshH7_Cr}I@0k20DU#8{(+9hsAWJPd~FoNkky&gOpTN5u>iJ z4Y%l4TP1x?@T81(Y9i1X=unR`#|^Ql-IofLfavFvok#C&_EWozYdiK0VXw+jjo7=d z>Q$aMKdT*PM3TSEP7-x70UVKcs|#AmX-Jum5UN+dMy-~VJxGfm<|RyN#n;daW=Q>J z^^oGgIVs~a2(sg**27oCD+5M)u{jV^#+D1OBqOi&&m|A&rl<=4dE3H0^J~|SPN96S zTw2{<(4}!f9nf}hHLWTHYtsJCqCC{VAvq$nf%@DsY7zqGU z=jeg~Vhn8DX;Hi@q{Gy_!d;#;fe9i^*$d*-@3q#*@_{Y=p*1-P5_Le{uKK7s>rQfa zl;6zK@HSk0ku~;`=N`?ela=)u+B3?%y=yU08-xDlL=_!V>zcO{XzWL^Tij`;_eHUr z%gqURab{trvCWRLrA@!Fgd}}hEKtu4HjvDkblAddkjGkX8xmFsB=rdL;qvys`{%v! zNnidhWALOVn>56Nr|DYee&!7l-ryOaJ1%F`zo?D$?1$=bqcaz!m#$unj*Q>wCp-dx zX;jj2_E{Vv1LlnO$2smI+U+ywT`|M*ie#@ldqV~X{5XX=Ug)<)5bmcc%5N(F;^~E? z^qHmO%@*^jo&v>0=QN0hPTn;qXo9{vArwCXa_)wX(9P!i(NgsXahwu{Dh)v|FlB<) z+mgnT-$>-mr>TYemZF%Q8UjM6S^ z_JO%X42@r-5?ZaDq8u3A+Zu#Yg1Xxi?={Pk1@e+~Bfb(a_pa6;IK}`N zD>>919DcsY&rkJ}OqkyFEFdfN40h~+FdCqi;qC6E@4t(0D#Z5cZ^){bd<1OO<`NG> zu3eRH-Ir)vIXGh3c(?Jt@I@nj+e=V)8os$4p{h6g*?Q~Wp({AUK6vMxM6P4RAnVTr zS{h5ea%Y2#(?f*npT!LV-SN#~tk@{9;Klo>xWM-2^9jljdssyvhAp>fPV6o=#+zas z25L5cV%`A8@9MKkSszK1g|Yq4Jp|-v7xWk;cjfSY5i9D^;aLnAt(W7fM1j@!ZR#=j zhj~}J3@N3b!eS3sfQrpE#tgytJ>lEE!^*8>`n7psUw~%J$c?J6ytJM7Bpwp|xI;C>kX@r4{eO{m7HVyE z-5L!}vEuGt++ACsxE1%}#ogWA-QC>+1ef3rMS=&1&>}@j;X6F%7XFLaYwb1Xc*l#3 zLY75Xr^w23&ynSoB-$_^bzYxa25920gizFEFsDwYkDNHQ^Tk;aEbBR_a5OvhrhF~< zxvG^po)XdDPhf9ie0Id#(c9q^d8}b5|CQ(jY8HvL%Xp*{2QZ!;|w&8H#8ecXXp+^7X2BF8Q51-6nBz5V77Zw=J}Kf71we@Gy5iPTHl>SGdFM z6>R`mgA0a_sPr2NjBnIZ(o4%(X4`L(5%)xp)>T^uuXD$5qr z7D)Lkft;3r_GGj(u8>o*j=US%3Pv%d6i2BL9d9Pa6U+;BAs?+iCy6m~QT$7koxqLN zT6Qon#3vohC?Q9LaZ!maYy*HXP8rKRSPc0p#CpPx8Ul}$XJ_j+UBhz1_PUVlbevZl zek(VK+I%IR#^~Wjx1wNfc#F5V;Faj{JVcH{wY(p&z0D0s&}eb&kbk;}GY2T*Y&#Y{bgMET zHGT~{WZT%I>gW(37qy$x9CKpZ{jA`go=-8U#cHV0$!^fPxOX4hfZiH-+;xV}nz%|F zE}bmFqfDSR5 zGiSl}#Q82w{bT5db+kwv9lK@YKzZqBmSpzwbB-OfULHC^Ikpl4#t>(u`U768K4}sU zMELq;I6j9UI3o_`{xJCxsisD0HY`{GJ-O3=fKH=9l6RE~%D=j+r_~EcD5P}R&EpXo z&?@NS;~Y1W60{0?iBu16xqe8qd-^Sbx4Fk~ssGZ|{dmrMcqKZEwmIOBiri)~v2&=& zM^0Q6#2a4?QZ2j&+UdWU3LLLX1{rj{?^GoTb-_D?$?Fl&iE5jFB9Xn%FxNLGmi8dX z>}iRAf0J5EDtO|gpfGUo@6>@#aO2mB)NtDUUGAcpBd@~0Tb2itJ}%kyf2(}{b_LG5 zJoj%{3Aw{{N}0_zh~#vIJEuU!BwV-V<4lgUH9Oeh{;;n((~b8i4U;-s&(`RD2TQ^6 z(Q7VVG;7or{Mh^QNruI();)o+eyeiw;)`Dzol~E1T~6+*e=eK3WR)9B$QC+H0N?2W z$GMOya}WC$5_O9Fl>i=F+(~GM{Q*<51DjG?2C7Kwp+({cYX4jX#Oo%6j5PZq@2l|h z!9$bdpZn3Z93eO%{ILra0~g!{K&ky4oL~H0jyI|!zuR0Bj**=jp4AgZ*GrpoR{eGT> znqsT#GF9~I;>v~uV3@!yA1zQ;LRj)^6}j9Ys7Uje^oV#P z45Eh(k5jVMr?$t-!%Pwn1JQOhiNiI?*uNtc7LV_-yaq#>KO7OorOVduA<{TPa1&>} zy?r;ViySgDVvkQH=-P+v3C3sr`#E&-BWr9IVMPW*TxxoXh8ezwOj>{?E6UV0!Is=w zdI%++o7wc_Lbkx?YHi2ydgG%dg10n%`ta;TH>jnqM!J*EW{j=)@acRtLEF=h z2hwtZ_bj&TpF)Uhy1y!@aI1rTGS&-rf8dq?0yso;iS;nIBcbt$)P3qllH0wO)g>KZ zGDI@@i;cZm07Mrfj3#l+?ut#+twE2rM-{n^8)hs&Q)a2F#zg|WW#S}; zK1PmTsRV8p#+zTP4B1dISO3C21}@JAAQ30%f!Xr=!T558a6Lc9^X%;3*)SBa>!O>V z`X6kk-Wea)QX-L4V5(3xCACWm)tb*Goxw|jV;e!E797J)vl9iFnCgcPcqJyp+XayW zBKTK_W$}m$n&Fm=O%iNl6Kh>!Hz(ifGhl8WGeQ5!eEOG%2)} z%Kbc^W8J4eaDrI+)fbru#A047!8t5s_M*%2nhqRwD0mYQ?O|wZ4j(U4uvRQ};nldz z7t%k6x1f|{kX-)tK^OY~WjKtFn7!ZulntAtmNn!3qo2*gv79Mu7ed7T)KGRys9N=p zzGeC;=2GrePM5(2$4-Huo9k}zgJ3|P{PTZ+@9z`s;O;k`b(V)7Ras9y6$%eY{cESa z{FS{?5g~8KSHYQUFQKlZUoXgRUfzS08}nP#JYgc;Ppa%&4m-(zc2yj1;vPu8e19Fx z&3g}x6jsTd2vSHErTy_b{KFKGpJsZ~1YiFBX*)(mav~tLx!l+7Ko~av92~47_(QC| zI2(;=Cg7(Cd-6SKQEO?d;RF1C03xl+xu5rcy%+4R3rs+r^X|~GnR=0$2?GKXi~;NF z^g-vUb+N{8lu|sjj8|s78+^o^$Uhr6Kjm9z-53eZU9~T;eFr^opZT^L zY@70tf|)o~#wb6!(i^irrL|EQCJAN_(N;u|&G_r>E_i$Zh1bt^dl_!6tP`jepBsyME0 z{ZpgUo&N8ET5-GTsX1OK^72Uo@2<3Mg|LpOEYxnegYS0k*9r znzYurGJib0OIO{N;VrN%Cz$3!_}oac;g?t_-<>Y9U8adwisjm*Yd|pI z@Njnzp4aU&E-JaMT?_m@V7FqAq;?#ig^Yv^?n_yxPKgHVF^8)(0?NY@s_SC7*D_I( zbO8T5cjoK_rJjo4o`|QG7_L{=vMuJVTs1%3oEV$d<%K`0b^I}WE^|w8&d0*ByK|ml z?eHUM6);QK+s|ZDcX~i()v2`;o2mjUS4po~BE=k3`_SkXYhw@?(zIluqHr=XHpS$Z ztmT)8#)b+s_i-A;!`A)7gOO~Q@7ZE;T#F|B!6OeI_T4P33r7uIOfPgnudcAbmhhsU z6pNJkE}>+UTJ$pnT~?hR^RPNJHew{28@+3M14*?cwE5;#^RIG6H!Dn!ntQ_&LBnzr z>SmFX={QM}lSzm=K(x}JUpJn?xB{w_r%oM56+=0tSMc{ba+5;DR!3qZQjyYli>j3C z%qF%Ob0)Fqbc2UvH1&Q+^|@GxIlkaEi^_V^S=iAXL6kB{ysP=`u&(RZ&Sd46Rako_EQqSR&9L(q6~Z1vplxWy(H`)Rb1}%t z$j~Y6sht1eHQ6^={WW=#;~foSN$|zt*jocRzCv)%IV074W8J)iyIbF^CU(9fjA_sZ z-g;aM+&3542lY6->>Z0bgsx>D1qq!E=HlNRG^OL=SrxbYUFQzCp1r|=RVRSJ57%Y8 znp-uE(&S>*h1XSrrYKBm;aPRM#M>`{ixBlRw5ukR!g*HDTl;jE3ej{a%%;hHMf~Iy z!$XHz8{jSyLL!Wi12!~s|&gY}|r%r8$L zB=%HAFp=L4yKQobu+o0)y1{pF<{!1)X8>8BCm9h5prL1PRD9yARQaX2ElXN?>gsWr ztnnssZHjWuv8l+x7ZCZCS5^_uA_Q3YF}Ta5$av5OLrB_X)LakbC!!Ufu6=0<6EBZR3lg8a;>Ggl;kpJR+t8oVh<|( zkD7fS{WhPORKsnBLzLR?bEt_+r18#X{Wo2U$Y(_waHozGV$VTy;tw2IQZAYtyrvy~ zF{E*Vh6G*G8Z2jiaT;<(!|ip zXJucPm)UZz;2*6p?Fo?AXM?1L5#l$p+iYj@tk}3zG-{d#sJ5zDZm5{RQx2%phLxs^H1a{*Wvn*o>xb3X-R>zD~A5B!keZ=g6tqVvK-6UiP^|s`FaVr zV5_0{%y}+PHb*JI5<-P(*pqCVm2w>Wt%ci6YzSs0Azf{Bgwph#l`eRdxG|F^E^&fh!;n(s<8s6wD#OSVxC8dN{aSw=n}4c&#=Vy% ztzhn2`Hy^}^}nA3it2P=*YnL?PqChW9$loUY=_QU+$yfE#`;4IwLvwzFW%(SEM%5DTzM#a7eYpw zw~IVz-L_N@3i;gMB6@X(8OJB~HDN4;IE)}C*#(`WBBY{_O_%iLfbz>D9p%bn@#v#+ zLOJzA;{66w&d(0s)ra)8#l23B?4y}(qu850&hU4sgUvQ{e!y7E_es?;%lL)!8e$Po zs=s5D^g`9M{SQoC670TZaUB+SSocwlWPG_B()Q@o+PLkUM*K4PX-hOE_STei;}J(^ zx&r;B@}S-0weZVLf`35cYc}ldD(~TL&|%Ehw#bOTTyW6&;sW+NGuH!R692Hv{|4c- zj~)C*Xak;LERO|#pHVgU-MxLQ?Y&D<%~-+O<6Trjskf`KGbae7U0}UA7Rk3r>#%~P zZ?pd`%hlT<2>FIpV-hMnsJ-UtmrPzuVW*_K)?cr3W)9b#M(yh$dz0Qu<74RA6hRQ!Z}3?Z^Hky-tF zEo$WhF{y5yG!&ZNM&iGeN*!j+E;#dK%<;159`1m0oOvP8RmI-`SK;62)11@K3X_rIQ7@5bys9!)<|u1aQ0&&K z(Dio>T6Caa7;3pv<#I7qg9$qFBz&Y(Hi!-BW;y!RTv}AFuG}q&13X@2&eMgVlL+|v zQ5(ne6bBbR0=c6}#l}R$=SiLv&0xzZ)oAHpVxB+?t$H?3SP%f9Bmx`OX7K0Hd@fmT z;P2eoJYXZFW~IF#j(13Gf~+Q5%g|a|czE;r6|22V=M{hXA=uq) zwF?~D6zE}Wl5-eULfkSrCZcc@QJah+igNi1>yFErC!;yL0GhhEgfv>r1LTlt1=p%? zF&q8cA+17-wGM@w2(ARrzL?Bd+=Avo$oRy!*2<1@Aq~t>^9#S6+fpcpWk))@c!ilb z5PuA*wDXflZo^IadF~(Y9Bntvcm@JkHp3tFeyL+nK^L|xd+dA(myUqW@r?DL6_sLj@TFQp^(*deLqZYSqc1vH5&> znHk}RU#Olj&qxyE5K__|P^5cW>rL`tWHELi{*qYV9IXNFRI=5P-j9cp`7Xz9hX>ei z*@hbr-hhvAW2VAp15(`ADwWdOVr=ncT6nztYfTtRSpm(`ZY@; zUI_J4<)4{7E**`ea=T<>P?q%&DZ4BhlV992^rZvq;H(2@vCq6I;09?LvZd7{8WDP9 zv;lh@b=kC17C^6@q3sWZIL^tCX=#l*LIG@2G~rIt^>gNKjg_7+xY6dnsnex;$Wf0O z{e!b|7eHxoVep2E#v~ZIcQ-^n9vy;k($ z2r|MmlVI`W^okzTY_ZqmnD?@66*J*9n?N0lLH{eJ=)tDvv?!PF0abbIAGd=_s zlyxvmRH zO1bh%kv}4|spn;bMJ5mYQ+4)-iYf!GewQ*W*!JAMRIw+QLfmF;sam(TwJP&U0;J~-%`k~CkyMg9jkE&?t+LhEe;eD}UV3e%nj=r+1$hd66e z8(xx%IM(OqIlpaS4@n%N9*!neg*E^5_}goH<>O8r;Me&Hr~nGGsy z#B5bU20r^JL0@35DNv2mMP%(g{&pPDMZr5RhEZ6Q;PvmHg;j_7t6np z(e@a#*3h~ncNnk$kZ6l1oHXjeH(W78A`}w~pdZ_3si?v9_6n+Sm%Ps^JDy{Nf@cT` zrNtB|-G#Ie?KCrHzbaBGhWMt>&J^7^0Ez4%gZF91{7=gtUSDY2dZ)1V8-A$MvGxzP2ShG+NN znU$33)+2shqp-Pb`sy&gTX(kdflEU1wt(!USJZSl_f>TYPyAqD2LX(Mx`C(A}+@+YtxleRiF@^F)jO2d_B%^lk8Le zL{F`H9*?Gmp=-n?q6-TXx{NF<IUu*R?TUQi)aD}IYWT%l&z1bW>yso`YIXY3PgFvmXY7~=y74r0YYgihYZQmoZlXhe~CpQ<%k;)b2Z6@7R zMmg?SbsR8|Hre?--#nYmIA3a1x&!Uy=>BMC;q6&w=Eb7d5txqi6%k#r^^s)fL14bY zhIB!IiY&+S`i)FFqR=^ur?d=9$;)HF-jq|1~;bBUTLg zZp7`66~dG6{1MH&W+RC6nA`r^OZ=~mv_Z&3V(_krx9Ee3VV7Au?g9~O@9_1b zDSxOGWalBg8x3<4z#lu&?j>;l3$_zAxb<&48L~4n5H#^g8rTiPF;1q7$P^bbNl$)P z2JDCe15fsDi`0~J^GS&&Qd2demThr;F{`Kl6j?#?4o_~F%R z!UYR4ETxWdat3JK-C@3wjjWzaw!mWePwCX?u-+_sN8;_}TEySqCmh<`dD_`6%OE${ zSclBmRT*$kYB==0K1~DxF`Fa`SOh=IN<#%FTVQgASUSD-7 zcJTyk#%o@xuXguOUi-JQ1TK3_4cA?rBtJ9F`R688`VZ`$T6%vAo&Dc-h6`Msp=*!v zrJ;9wx6Rg~$(#KrdHVsrD9aDUuitv^UpFotJ;krL@9Xc1aEZE!s;bpq76u+3MNPST z6-@G>ZRlV<7^`6c8B2)Ui`u48?@D~Wl^;2#-O%-x&Mi|##1YV>$=VlEp6f@uR_hgn z^o|y&9p9wlHcD%PqiQgj&n9Lr2|svg>%e(f$Y&`biKPFzOOr;O8}x&c-Rc>GYv9HL z5xahjnXCbk*zCbqck7w6arwyO+WCSHKaN=jpMc1Xge83?r-{2S~q$Q7JNSTlXbd+X#n&-=Yivi77G^bw)z zpdru`l{S&wJV7y z$#mkw%@YlvlmSP;VrT9uO(Ht~`gRU}fQ6=;M2Lo1y|LJd*YB0+DP8YRJK7vfTLM9B zrCu-yFzmcGO&Rv+~N4#y_L#9P~V6mdm$`A-Nu@B+CdHSrwuj znEQRAj0e~)F`}8e<@PaI@*$wGro2La?)U`i$Rx37#^qdc8fshnl)rGUKC{R>3;ilr z5~pfv^{HYKlk+*)Ud%Vf3e$DC=Un~d^6UGX=j;^aDK6mD13$sL`u}7CR zIHaI%W401Z+Y6I~C~QM3HnnJnS(_y(-A!az3Tr&fSCf<{Qf||;b85!ov`u9(974Sf z@_L$eU7}bN;n8;MO(O#)5@c+_p^wDZ?rT*ItW^u^`nmg^x>C&X)R;p%w!#~SoDpp$ zse7~0YqbY zuwA@A?3im**Tg$Rr!A`8-y@{ZgjPXS_LpPfm%%J>RCeFf{Wbnh6f@i#F9qv4q;2od zUSywh!nA}W%b@p-Fmb1Mf4bM43__2z0Vunk8yN5kx=phe%MBoz>=tF=+h{w1ZIWgW zPmr!FG`lBU-=tOTs@Z2?G`I=9@>^|@X?`GOrpj0#a>^5i852>dbBHe}wAo&hX8neY z&MP?&WoUMTnJh)o3Wv#RxXvlR2lUZi=G0khS(x2eOB^PJS652kWjnUADU}Pbk9(c8 zpg9RlsLy^)P-+hALcw8cOsL}8QSKPC0C!BNAw167@4a4hL*X8@)oQOSHElor6HR6% zXJV??u?)=q_kFuy5crUX$mLR=^1TD?Kfthr`vuwm(|bl&{vVdTCjY0Z5`wAo&~&uy7DVxRk@n2=|sD>0-YdD^5Oj<1Sp_L_LibNGC&+{8K zfMjb)ISJHJw0}4RCulexrleu1OHGVby0+f`;J(E@!rw+wIvcv#7HUm{uUa--4%gh4 zqGXwfrHe4AMJ324g&eW=aEHh>1d~8LNlqufUS2=63e_Z5Pn1BWySls@raOE?<$OmDEsftCcC#$dAW@Q2*l~qR8bG7&O@x5MII^1&!bwqJ@$zs7FlznMpQNN( zh^6!%)Mckr-A+f~5cJR-?rz@)D}BQ&YyLxNlc8k!Pv%Gybi;ZLXxi@+6!&N)Z81hn zJJtTipK_ta1uozIUS>*ns1}k3d8~}Z!h2H$H=d6-cV8g^wnwHCe*YWn9#?E4=S;VF zQTDD{#>OlAB^i?o0z-2FQG*&W(mm4t04#dyn|1jGZ)a|ce4xYX#)E~F*MWe1d0C|C z*!I!=w(IJ&V#^~D^Tns2Eo=gXrm_G;nd9uvTK5*ckBnig08dp`gHi#i;VpV9m?oD#=jm@>yP~Gp`|DR54$c6_u7h z^z4T#A4$%BJ?X;{)&KJ9Nm;+|H?YaW-Uq0@!B&O&7D`NUX%J39hLXwy)QCGRb*8t9 z;>(6^UQ}+fWAZTG<4aVcx1^tm{NP??wboa!Zz55xtRYsaRh{f6nB-E8rGbWu08Ray zWgcejF2Xt*zd<|-+d!+yC`~d5P09wz2ZA6f1*;Pa)Lqih#)!f=)uraYa!70WwpMoF zOj)_O0RFTwr8*5D8~ATh^tX{d<+Qc3t?(8gu%wKc>&5q#Hj#=wHKi79qMDex@uQ+o za+kH^F=WoI*tUzOGBV1Tyf98B{J>DguTzwDL_5W5+@t5DRNU9FuI4K_Wq~~J9>!N8+Tp8fa{$6m!hAiUQ zgRQN^6Od#TtTX7ojnqFO01C$@#`-cHO(JBbZA5!y{E`9Ky-0IblNyxZwswUavOwt& z7SXxkR5k!^rp>~&VNG)><|^x*IdzE~_vVU;Ua!`cxx&nD zlX9Py9P@MJAwRI(AKy?{wXpOxYY;!j)RDz@2%zKiZgoH#V`UY&v53Rg`;H7nlHNmV zdXwF-LJGwLn$@PALs-6s_1n3)+no`+k9fLG1Gb~|uKpk)DDQNZ$(E?vKRkWC*dD7gO$*|Je2Q<^^bxFAsS-^1yv_ks7#0QZF``>)OY&mdxE z2q>JHEV9V4ae=qC>e2{eouraw;n*=yXDlsD{6n_8DLomOwy%Ss-xj9r=(dRXaVja1 zV7)+p2Qp@mqc@5A(d1fstyG*r$fa&sjix*yXKNUel3tm;d!%zA>76k;f7Q z5I}PyXamXrKE%qpnl3Zi){yEUj*uthc*xUC1NqX?&hw zKOIt|s^y10h^iWLQx?Q`{b6RAB&wYMBt|48O#$Z(?-M$NGrRbAf=?+5!IQUcaa(vd z#2(v>b6Z?%)+5kEQW`2O%(G_50Q3Lz4dB-hTrr-iY3po0l-Y|8g{s#Wm`@8tt|;~* z+7sZGYH!7gz^yFX7rvU;eJ*Y9%CPT@L2rf+t~*+lLZog}f*Z0$iPS1%)@U_5KMjIM zQvLa@rc{PKkG$h1JA?;a0FKj2;bvb!0*Bd|1$BdjI8nZdH10ORQsLbE!*03GK0F>c z%yXZls07hPHYc-@@ ziv4Oo1<&&#Q)bVf4~dC+>#wc(>yHARuk`ZW-60<`N1Axtn!k4Q+y4iM5r_nwj47Xr zc-0B~0rMmx-xdx~*sA{lotZZ?=M2f(COcRtwGuQvngb zoPTVTT{Nx9C6Xen+eFMBG&`Rqe(c-WsKQI2O?H$pKJ z(*Olz&79r)u?U%wP6Z3x4=}J`gZAhnTmJlJ%pxCa2xZ5LCGPcbI`yEC$fWr_I@@sH z?T<-eYDs--#seo}4sa78ok!muc;i(|MdMP)$+424TvnU|P}+S33sUJ6Nq_fnf_rK-C24B~j`gz~7HU#t{3 z`i+JB&_<}kl-g63rWiBf`+~e|rGlk%+L2`h-S>O?w&pRyj1x1u!IWn}b7qTrz! zSEE0I{r>Q_RM(gp^)Q=G?DV#z^G7FB)4V(`ajs!gQ0kC2jr zmSFwlo6c=n2wGY9J6%!MeS@o9$WKqseq54~Qb1Hk}1AZeZyaIA1k7nilbC_om=b?t9hyi*%z=3$U$liO4W zKn?!`Y>I7#JsF|VfrS2G)+Z^;yFo0hPt#Esos~w~fZ734%D@cwJGSq?l`A`2Rr;hX z<00w~+FIA=q(!7RKW)8(+d%D*w}UH)p|F${@EQoA(tUb!sEUK<#fv*%a%}!lfXSU7LOb3yt+MDqN`-sG7Nr`HiDMq8)q*kc zTYT*)KOt79ce4YVW9VGteF#1-kNUZ$EkYlCV*Xu&z%Rr4M;o3%i6zxbm^+?`m4>4- zBedI2-+?oFk6}p$2`RJ$A@d_Z*;s~4!=_@X9w8fHw4g;^9nMl+3yYK#@!V9OcbC_3 zS}~I*sqh_C3gzdw^4Q)qZ-l`2L?w;T~XQjp~U7t)kvUy~#JBHmwC zrawyVOMdfxN|CE9Yr@cxjZh76<#~&Hip4E0F%G^HR7tKL#J_MfB&a@|GX(bJN z3{dz@emKoW%pp4!gNuATUdeGNqQI1pvw|-trU#Q&;X%_vjyd>wdi$j02zw&7i(omK z%=c!zn3Uhh@L7kq55W`6s8|ZHoiujn3XpC?0_X)~;Dg*ixj+eR7adEasKDzACMQ@& z&E|VUEKgZyoyW+0d4R=+W^64k2`c`M&P z?J6;!D2{_K1-U%g^cIfy`1es3&&A((9cO>*4}Y#xZ*o}W3Qr711z^5>PE;u-ac@eG zqp5*TbVRZt^MT>keA??>==~J9g?9Jgs+K_TP&OWR4zYxx6<5x$QA-uM(4t+0uk4z9lJ1Fpo6I3@J!TnEUns|6hp4dOJ#p#n7wE)ET$5@f8$C}PW z5cH4)>vFfz$oJP|0AhBOD`c36v%CBd&Q(A>ZXPpDTwk7O#D*9;AzoI_^J@$rnW!sv zHN?l1qlpLBU1^9#5Kz(6a<7yIXJm0cJ(drAFX;K6<1q!K6F+j?g}~@L(X?a_CJKJC zt)$W9w6Xx?z+E-X=h6$_0-(ECi8ak((a?vDuyWh&cM7SQq(W+J_yb0bTtW!$=Q|fQ zI+8VvLVY)uu!_R6y3oa&eOi~eCc$r6Q8{V77xU2zNdr8a)p1s3E5ef4e z*BmEwKLmRe&;wR)i1-r;7!Yh(&Z5W9&DXu8-%C6!^>YY6hh}o4d5M3yhF+wpzL{?n zAfzTzln97V$T5AJJUoJL5HsQ%0hbsdk?;ocy>r~Bi^M!d;? zfWslP?M>j z6gWMIzHzc0_-<)H!{sB>+mIY_vk+HV$$}-kw+LtYB}ZE6`~rE}iw}5hN`(#2U$Re6 z?c3yDTL%gb2n!fl`+#&xK(TBkD?3hQB9U0%t91mT?O{pw+mHtiMxOJPHwvd^0!t!ef;xf{0ntGhUU*|kzf~@HlR9n>lmt8 zKL^@|X2A0l=T-wUPe=+RnxRxCylU4IdLUR(o_~{z_AdzqtQZxTrEq}~drN3Tr0e9R z@1MWv+N*n}3gMcA9L`EU;+Vd-)%4spm;U&luoE~0@5dU^}&Q1o}n?2`FlIL1~og`fxYoqmfP4bUmkchr`vXl)bo2~4Bazon?C@hBS( zUHW3@a}jWqMq<9n&5iUa*Dm>EWs=$4lyBLnE5lX?SwSuI5Wbj>DTD@zASvV;N&b8g zn22e9qmB`$n5a}(8eJDN*diAL@Xq|!1Ma{INftV4_21@qgnVTYd8Tw@mnU>cqFpTp z86F=~hn48=Bjj}Q?+1L%$)-&p=2#YCYXzLKxiVJ9G>y~!;3JH5Rax_>PVDI6%Cxb; zn1IkHy~7heu4(5V4il_0G&?uTwEUW<4LI`oY}Qcf=2{RmOP;6PYOoH_5K%ZZCDp0q zsiMm9gpU!tPN9D-LndMuf2?{Ym>E(aB7WNXZ}8tu$sD#Nc{8Xe`(#-)DwJ zoIO`De*F8bLj80!b<#>`8>tf?M_$lk46X#(R3+67g8R{vokTWjtN{TKeN&A0jqn_D zq)P2LfAyC`HLb+c(z6X6;edl%)HdFdX-msh9`L^7bA%I^|B9>jA$P1(P%U+@RNqU& zcz81e;9zibBIB(98P^JS9r-lg+8Ua|T-ji@8@Rk2EJ3eblme2`BgOjdNs8Qwx3bScfnS$Vb|#+H60E==Cs>Aq zt&bMRf6-`_PG}x_p`074Y2+!A#uCz}C`K2>zZ_DhtnfOC!WPZiwsp$6IV)jJuBjP9n}yQez!qXOvb`B^INn0h z1QI;A3|B?h^o-1|&#D>00=qbz!n>b(GBa8%mm8T|!5#qSMLUj@R>+tDhTYjkUA$vQ zAqhBaf#)Ohyr&F&L@3CuGFwVO|GniWErw^o;y!|}zGliMFp1y~ufD9Q_CrB<_n$lg z){&?5dHr1sf)ETP3P){wTXHAHC?e#I%%zZTD|Kao0Zy_fks7v@)9|RC$YEFjV1WTm z=AMs~V9!>Kqb<|nic+mrioq(rHj{lA4?5`Qy62h16dD2DHt~qC&?tN_B8Kg2Ihc1; z{E+gYwiTwcTn6+g)bFA2k$I7!-Iqf5L}Po0o0hbwpzK|7w9Y!hB6Vwm@hf93P&q@_ zVKRhNEnRsN;G|0Wr2SKU1~~3JU!~SE(>E7^iQh?H7Owc}-B%)w)CkngIzX8ulzF?$ zVM>dC@sRd^loDrQhVAneSt5Xm)YEsPi0WQamFV*9_Jqx7lm-H&s9t!OsXv%4{3);!y83=+j4$s68jJ7Tq1!xv zb^h&~IPi_zUSsFs$(^FQzBZr-nMkDQ#PrSm|42K_wln$Rgf5Y#7d%wGnW4q4l{Kn^YjcP4^i<0&T`ru#=lXvJ0~2 zAXfDUwDeV)_kY$Okrp=3gTssR2fT-=gsG)T=bdXA^q~l*oYR^1B9v;O3ATJ558C`J z#UfZIr9NZDySMH(hwsF|+9Mhftx@ZHL`b;rl6JW>1Ie}g82hooxMTS%PS5j&MC)yhpU+cbHDN^QNLb|=T$obyXjS!O$>KYN<6)2 zO$%Kvi*E$8PT+BR218j>6EKP4TdkeCTx_iu8B;h)5%l^y707pV?T5A#YKkGXdRw_( z-tDIs#q7{9iSYcgP^Ak=)-N15IAz?quWIIXymq#fN~qF%mbtuavyp^dKijH#54QR; z@fq}#+X}bLnvO%mHG6LRmtuO6r|dZ2$~I>NjdwJ6o{8-v*Mirm9yuD0=)5@3IP^H9 zn2IFQ!jrj#=;I1k1cU|}d(wB@$-SB6bi{Rue4^a6w}% zY$Dg3$jlnbElq9j!GEJ#ZSn!^C2=p9{rVaD)MvlfQ zBV5TzDuo!fdsDXK7Y|<|xG6VqC5Tj7YeJ)BxzrI@=Ph76365bmfaD9CO4OpO!JyS*7jwL9-?Q9I_#!r&8N?#Vb*FLMyh{Sj| zGG1klH~604659c`IaO_J$$Njd>xrMR)=nu8L+^d-+tp;;C(K+?cN5YD$Cnl7i@}-GUSKttkit;y@P11E7L`50e{V}bxSSp z!FyKgI7Jpophl!~hn|woaYW`h8`=@8?a?!n>Jlt<5EQARw2^9tJ?bDPB4llusjP+R zbs!zhR9+|}w+f=m>?@5pX&;SK4pThqj}bRtG*G5|HREPP;@C+eS$-#@08 zpzGM<>dSZG2D;=geD%=M(XBC^P4UU^`nk3$S;ON?=BiIwqUFL6hvi-7y8(Mc?3A5t zIda&6+qJJ7GO{%O^dZf=#rqr>kZx|Ey$W#7?J06|6=X4iz6AzGeNs@bRT&Ot0SH$= zyN^zM0}V41t4AkHHzjb2f#%)@_Zc)rWzn7;Z1_R_6wqdx+1hr8 zij}VVBG=a2Qkc)o!(K4Xx?34&LfWL zPs!G};norODM-EN4=0EdN$fNU>KiR;lS&HiOeRnniX-LTSb@r9P6$Ai136MIMUf!O zyGO}2GVU`9Dv-7V9o2-Vv&`KVb(@dcnluNO-Ps?8cI3bhe~&6dtlRfX&-OV#?e+@0 z{!iQ^rWf`_{)nIk*1&}463KFlWPHJ~GxYlQVE?P{*j0mW*X{&m8XI+7GB8QpZJ;tu z)Y9FXNc*Y`Ls^1zv5?L`#)G&*Jn9`s_1z| zN571ry~IGbm81>BI)n`H?K9L^)mmzW>IbdRI6fEX959hrWrFG|)v+0H_nA__xEL=m zZr`qAU&tt9fY3adYik|B=72s;q@`_vF52=He~NCGA1aKA`fZd-GZh(gzAGJHhP~4a zCyGTNhx~lR!dS`FF?OFZ=Pu^`7TViLLj?t$j!S!`MSpcdJ|PH6yvpYqoXv$dI>sOO z)m^igfF{oV5^}XOpLtX+Q#Tc`fQUPz6%_ErNCerX<`+%N_c(pI5a(!Of*<;h!wSIq{c zJ}*PQ4~bw{#w|Eq2#84fWq*oI#{eCQwgA?fWqrQLy zcT@Rqh<3CvDi}J0AVt{HC5zQ&*xil?C4ypTyyl8s#vZ*Oly@lQngE5UyeYoDU+rxk zeRO7a8Y%Jo4YSCfwYtM<=4E!SVc|))W%eZ>cFIL-HF^U8yc&kHn?U+;z+uYp_WI0@ z^Vkvp#K&#I=ktk~PK*)ZQSK#T|3my}yfD!FhN6a)tYa}DOfjDj{-$C>rt1LjoLklM z4p$t|p{+|$!vMa#$lb7GODU$?0I$;124_orZX;;XtUVmFi!K*ndT=@!@59UTn zu=0CielyzMS2L_ou(Edwl6RXmO_7g+*Is1xb;rYowAKL(h{q2emuN7TSV1d9)_PFO z#48dtE#970w>evfZZZq=nj@3dR4MgA9baXPPu^)Cu2B13t?5|C7=spJJXxA!c@t2Q1&1bqepR(vDB-0 zqiU99i+oWU(~Uvm8};&({sE54AQ`~O z=u)cCYqkQ0MDqg0X=TY-%Vh;iy=(Txv~SICato|4s`E^^4SbZQ*L*14U-p%a=_dFu z{4FqZ+C5x%&h%;R`eY`3`|j-Fy?A8%iA2+w+yYs%*+4+Py7>GZ*s8V;G6tQx#p`3f zEI|bH4$`|w)K`{4#7`}x9<1`n_j~D&s!)fg!hFEr6q@04kM>wLS z^uOf0EZQDEuSxIbs{84;Q27gg@nQ*G^r~;k$GH4cAoI03GZx&_FALxxV3)(HwWm>= zJY~XM2r3WL<56=y!Cmkr9x#2&t{`s?M6`%f8_I!&f45EFjVA7mYtO7biRO?qTXnrA z(%TMM6d2ZU9MrR~kI#JqTC`Hb#Zm1KpNuAr3(<4gf3X)AAoN) z@c{lXwH!y;WTWzj&A}1;BSS=OLWb3+V@mpl{b$XvCcfS8;OSuNLHIq?4K)4Ty1R-S z5hhvFZ70&1%cF604JzFojlfBjl~vIBTxTyUX^))tbd*6OotWu05$no8n4j;OYmN#) z0p5Lqf=d)!p{?C9yFO${wxAIH^!mfsK%nePuSY7v@vHN+2x6;GXpGLeC|>ggXZPdh z>?@$d`u5UUK*CUr@JOuAX${7*0luT^;8}*g>|6EKw1wJ!)7-ltmI`^dP7-(Rwl(>M zLgwcbJE1X+pT^6|=od9K5PeFFSHOAlW+xZt(gBAuorM*;685l}TUr~cV4PJa``q6s zdj|p&ReE}_$#r%?=cIK8wW!8didqaWT^x`da!ItJik~UQY8o^@R<9E)R3N_^vgfwz z_Xhz6318t^KZ5$=N9NlP>8flF000IUPo4dbZK`(Q&k$g47+!7maZh?M#v@bN+6J;_gN_{1PnfLU#JDqjSaL*~wg z5t@MaVMB_0F9!xcCXRj8BuL{R0hxA9^YK|up%(E0EXyT$$A8HM)=~#PKElP>&G^`Z zW;I6dMehyRz#>|Ya)H)g1A1AFd51LH+P>NfZe`JmQ8{G6`2>bx^&ibK-0B~~lm??{ z$x1!l(@G%mKmD$6acmC>qoH7c1fs%+wB(cuC9r&LGqxo;hn`z#NDj?I+f}nB+0Q)_ zWS#X|&Z)k0!z@P6mgxrE_FMAvWfsYo54&3nJ>xn>j2BJPo6>-}XaDnB))9dOM{t3|o*IIJ`|bV~vf+O7JH+ZpD5;riD1 z%#?*qw24UBDF_4S$*1*sR{78i1NHF|aEvT9Wm1 zEiN3mpcqkl#K!JWfN;p`3Ff{)wEor;pcS;7PINN4kdSigBFOyNXnP}!9@lq&x<1V6 z*;4Z3Qo8dVd(Ghf;>o5%HTfhaC&u68rJ;TIhJ ztzm;FnZ|?J732N!q+yodS3|Kz^r_%N`3g~V45X>m^_Zc%*GoDRlA3SxHrM%Ugat7| zf7X#=PUEik9}X(psBs{jq)s3u37vGJcc1-z-R>#9Cq30V?j*v}Xc=um!>%w&B}q=d zDP_p3Y8Vb2y*4zIj7-#H;ZNKTCLl$#h<U-`DpLg~^NwNGi*ck?qx+;1$EQ=LYe!!4*55_F$P^2sxTogI`dI^Ui7E zv;|ao&!pjR(pj$ye#i*l4O`%M^xqsXH_v~7;mW}6UbR#It;7*C$Y6G-9lN7%>AbOz z^UM|w$=I=)G0o*+=1;|r@g#fLclFr@>n6C>AM8YgZ`|&5lHE5aI1Bz7gs5aJp}t|( zo8_wuS;OA@4CnPz(M!?I1~c`a{!uAtc~(iTU%ZRoEgIE3jO*=5ey19@ls&a3DEE0; zdy4W6)ysxC=TD-qQl!Ptl28s=605{+Cu6r5(!YckBEF@4qic)8u=gf_a+`$v%Ue1#r= zdn;=z+i#_fH^G0;HY5!n6|`tjH8z|>ops;TFXbfmX&l`ksTgs6)eB%(Tj*6#>>b}MkPL52}R{lwMwp-Gemgn#SRNcOQyDS zSu?(I_uD{bUZAljlN-=iP$R78=a%)5h#KT4Dlz(Y|`X*X@iDY{l zWll~7)UBY<2A1q*)S>Kw@|fq7aya*fT%}P}yep49+JG$hg%5;##MdM|*(SYosd;YI zCM`X(nQ>?<-jrvU3audf3 z&o^O$2uyJOQ;J&08g{O$vCLoG@Gxkhw*76Xw~rM~n0@1xS(m>(nlhF!@xw4XLf0Kq zbZLxg3+hN~1L<|+#uU=+Qoaid!`!!~Rda_h38gwQFyWIxA3K7~iSz+)&S^xGq8PgA`H{TDP^-8nHfBneJPv}T3z|_1z26{_A zd>`Lx*w6#Df6*9i?R7X3CbyyXy(N~lqadZunEMU*MP9%l8>Q4Y)I|zZZ4~rQXS=*C z+LcEI%^_YY%-1b@T|QP8?Y9dHh(x8P8=p>?KTV`lj$k>~psJ~*Agorj_S-f(L7x26 z_pc1c47vIi^*rKPVt;t^z@5z}Azq^Znu;EoIQx3(7Q^_15AV75MpJT}UP{4Omyeeq zLzmTd*rd3jtnc{o>najO99U3-RLQ+<y;APz_+;_iXLA_0qrJ^GZ1K+S$!(FitJ>me zAcD5bzmHW8%n3iV5dy??*Gm-C9QM?m0=TKwGaB~Jf2tXy^YomaqWN^RXMyB;KHM#s zSXd+!Hd2ey{X)+#YCApD5~UYyEp$bK?A|xyA}~-`!#K)u&)Qy73_#mSFZ;Nkh*EmRhnGD$T}%gX;`&0DI+!-7!Y>W{PWeDED>ISh2#HCVib5 zXMc*~ky7bdFEue`GS1%NHH_ETp<^Gdjqq{t9`aRrS4X@T;cdp%YjQNog(G zK-_f109j_+m>T=(JQk;G*L)}Vo`SCe0vqF+PqNw2n(k1`@;|xzYJeVWHlTM-4|xI3 zX#<^<%@CK>$C}i-r>wx7fpEJ|l8Wi@wIJj65Uy;_pK{Lj>M4c#fLY@uG z6e9!E$mlJ|e`-g7R`-ge&&Is#;667`;g;(!FcJh00ROwR)Lwdj?IU1?M_!j%S~EkhXlUZ=sSMUdO?i7jnaRY|>;lXEH)dWi}DC;-%LW~&?G=O8MT2TgH* z+vCPquc-#@d`?&3_@QgKT~W3$VX86*UpD|yplZ3|2my!#ZFXG!3ooX9mu1|%k0|o| z=wNd=rz67u0DwQmSF|~Y2c4_eKGa)|h0@pm&5HhlMta+eSKJw4-~YJrY;_Xl@-W=( za5xEJs~7Y_f7%annf3VxSdyfdy5j0M($BcfTFdeE%$Kfwo<9^hZrexf-1H>sI$2%e zkWr_+OEpOIUpg<~(Fadsc{t`C>3%lgUM$m_fy6unzCrIa8qI_)0*Li|zry=BGhoiT zZ*hcHL%CY2L0ANmrNDkijbu%FGNfHf86%FABS7cJODRFja2Mij3bm5xp(y*cY6g4z z%LX5sMeTSwM_)?0a%T}r7wpSRZ+846>HdNZ8df(LLnTY;EHXNDJA+cED54-EuGE&}5v z(ewM*n0fJtsyRau&l~zx2=Y@y8tiTE4VlJYM!oXd>xnDWo7@;Flj~lX&T!$Qo_RuL$QqLZM|qn;tVm2i;`qiryJ+d=qPax0aVidmP!p zCu}=KIjdhzpw?S7;oo8~x9{T&lOgQ13>$0XCx@jgd6)d6dWi41D=EXXKk>x&T}el+ z^rHqU!^^rAET&~~I|oB$uuD7v7xcYAGdPNd_3HWNvu+7p(6M&dv>-XBr_6q!5d_eA9{YBi0GQEm!jSDYoTvce$(58c&eRF?D zI6{g#LV9m0iV#UAmIrR>TdFiKVxSVhZ&Em;TN~)X{AkU-l`-=m#Y$5hRgbU&l~wl+ z>NSu&9B__@RrZJEV^^@Fk+qfvuXu)Db!-;kXqCX|P=JScr_ZAaxySW;Zr}Kqz(`pt(4^1(_`H+15REB}7Pvv{A=dj^xAG8&DDoJElNi`}8$^0te$rt`r5B z;&Y&nfHP!TcbL^v5TjiPy+G3QB9DIu+y@CN6z<%jXkf|-_y>sf$9nh&NE!|6r;pK1 zVjNM03fLmo?7cc_a2Wshl#lRd!k(VKH6Q%7Jr^LV=hqE^zG_IHvtgd_QouR+n#E+8 zTMPOrNa`HT3*X6=`KizI_e0~N&Gh{w_2GoA#FtI_Dq&1m?@mXlx*qmLANG95A9rkr zT@HX0SYh_>&a1y|AYG7o5&B1Ga3WMzSTFRiGtE9U*kL9){X`iB<=wbh_4hhg357_z z#L%5As)tglYEQXjd(?z=#U1;+zas|MF<4&gPz+Mz$rgH&ij+yKrYA@t8DS3M;VbnZ zxlIXR)I0+1Jmq8f1{hLll~(H3tN$CB-b;{Mpu9W_{BM(cSfm#m*~~%`PxvLIAb_Fo z&B_g9$Ufpnp`?={Pd~`yQVOd(^7Fw6cr=rwqRIuP&c4ACMV0fou?(@_dbj=SA z$ZKnSUg*SJtum+=JkVKq-=I*uu<9?jOmSDp$k{|SHK&9p#<$>0O$-Rt{rv(kBV=Zc z?SNyDOG8o3`kX4uS?s9_WjcAeDMUfaNa|F-foL5^z^~FNa+!Jt$W{QPrmV<@LkcjO z{TsKR5ja$IvZFuPOV_U=QKvTA3Ci3XfKwn*cDMorHb}kvf}lLKmVA2}rpeA}wk&#C zi+ZRL-;Lornxto0Ra|Gv%JTWGi-+@qPyy9=;JjXWBx5Ni7*n|C=L^Wp-6w(g8Z!^! zCCe{W<-ndAs{YdNj%H%4d1TScqy+mTm}BqQ+mxM zweO?+l9|c!dfgh7J(u;esb@%U$Y_6E`8?A&pIkow(%Q}`(;eD?D4K7s0ST^_eo0jx zj9NF&;OAD$F(Ip~x1xBpLY+)MSES0BHhA(l!641sW9?-{8$-Qz} z^`zrvRkGAE7|rhc#bQcRZSO9`b5bkbii8b?crBzQa%1G6!&PhUI0cPTZRAJXF2?&s zgx(`N=kYs%?C@P!RoDy5*g=Z5j(Hj5-5%}^U1ji6dtUn3uXgn>c{Xuh7_wZ(K()qj zYCF6O`R^_vR&3+zRandd7-;rC`&L=@3aE9v{fJuvipb2n4DHlW>bU^KbsfVlLmDPI zEmqXY4=&JEa$}^k>XPcQM7>27z8026yKu#>x2VOJ>YciH^z;71ZdMQbXiWZP6iRbt zQLa2@n?%U{PgUqkpPDb>_ZHb!7QQVaN_H+E9jl6YVr{vh%T^zqMd+! z=nqy!$+GK@LVG}()`?#Yg5*sRZA)JEm0BWtCEYfVoG2uIh1E)XEl|_H z#A-Mh>B2ZW+MsMjtQmE2hoqmn)rZ_Y#W4LnTBa}*+2-ucPko*|l@^)ezg>b&pBozG zdu)%dTDKx&P*1HvpWGJme>%URt#bc7sqcr8AGNwTHm&QIj_B8 zzwM>p3vj47fqwr=dr5A>vf{C@0=)r$A28eiO~dT0E?08+P3gAXY_t$F1iI*j#5ITF zAaLK+#H6j=Xno%vXq&5vl%TfjqF7SbfXkz7zYSwniQ-=O<-4XG_WGrWLSl+(Vsz($ zF%jYK-Bk>q>!kGW8kPO>vJ}842h6#kwHUyu16lAStJ6FMlgtOU8;oK{1;MgL=6?V~ zuifxd7NLaIJsT|w6i>nPirZecMB?>Dpg=o&19t@78zi1VVPD$&&~)(EA1C8=y?dV&_^{lt z^6ZU-JHqo;iqU;};Z%>^dvmNDO%{s-)34*l<9d5@1r=AU5rh3IUB2ziG3NCe-B+RE zQ8oLR_J)E|$XxCc*XlpOTXGJ5-j>=0F_co0hCaKMm)Y+-R;TI=!o9K7gFYx#uX_6v z(yy^M}zzgkbj7f~pJUM0yqvH4H!1MEq2McZc_7^&y8|KHAGG*9`81LDy z2-49qZqdkIj5sB88HX|axp&V*`dOr&F@%@uQHBWFW(H1`dwTSItli#4g)&F{NoA*K z%LH*cTw^yj{>j9g%fY2F=bcHEP1%0563f$er3@#t?AKl!O2#nCDL_>xfimJy<+O)t zRzg<-|8gFsqo#pkSI^F=|`#BYf&dvdLW{yD1o>R1l%?Ll1`&+#$ z_VCcd8KgMaWqF?MutKn*eTDC< zpQl>s7m=Ok6xJMIdQLZ2eT?g=Ya0G!o%?4BSJw;66}y$A8C0^-PV(Lqcfc@MsisKl zAscOw@y88D+rERzbuH8I%jEKb&;4K>AL541<~OxaNV2uU>hg~U>E!4A(AS4n6IZ&b z6ZSNE3K%4>2^Yy!QYHfhw>?A^97vTuCS+l2Bs*L>3sW|JKBcK>Ea-C|vKw)Nw|TFU z*hL6Z} zM&o14@f#-!Ly%!QfZ7e*v3&ULnL{$LtO=MX8!shGYP+h8QCk^>irz{o@8Zfp)KKY= zEP}PpV|G7Q(tI6}*ev@=#l#IO17(17!Jw-oL%SoBynKtFs{3ymC4YnY=DzF{Zh}z^ zRpGvvF4R{p&^GLK?5PekW}^`oc_U`a(1l^(*L9JR8wHy+GQXbW{R|>D^w%|X`7ym9 zy(v`IrL*9~sIh<^s+vnJT;K&efvGVV(A5B5MtIHqmcO7!@F#{pCWW(xtOe~bl{8?f z)yC5nJG5Oar6c~&YD|N1hv@!s?Umr&dI;%d_LdxfYK`3XuYUG`EarL%-#Bcik%MnV zZ*R;`+`<;5MRrH}0IwrPpPEcy%Hn`uuNldFsT7NI;id~};dte!a{hguC}` zy+n>Nk58+|V7Yp|ZRmV=osoS)!BQ2;a!Lr5#{Ij~jh7}bbyBN2GtjW4DUW0BYj%;O z_DgXy#P$Z6xietG;i$0J9wXa8|P+f4u6 z^qpPnGyK}l+tGxQa`UKdW>eHWDv*aP|k@wV`nvu~vPhlTp6e{Q3J1{AilB z-9n`AqKsGR?xu3^F=<^`Uaz6U8=%PetVau7Q~p3t1o zeguk~Ear8^Y7tKkuYHZdEVjEGC!n~JH?X{yv2F1^m`!Q*RomfoW!9Vk9;ZUAkIR@M zo@IO5;CuL+^$d)LjATP_TQ#S`SEcwDxSbj^qN#=v_@d{JExWqat4hXPCCz_RhVlt7 z;^T-0s#cq8Fi(FJRz;w)G5p3VmX(ZpDJh+jB7O>8YgA@BjfzfTFE;zc916t@B@^X& zdOiD&4dp|4?d?}783Vc4%uQLecfb44SG9n1s zWjUwzydU>7UhCI*H*A5&Z!Lw5Na(Nm{pt?DGsS3R=|ymd+8`Hi3hD~23{MTIIu_{q zl=ycP9Ea27&PLFBNXdQ=xJ(p*VC2eEw(JbXV6SzMoywom)o&XR{(Z0+YTruHA6wSc zq7M2gCR|xp+aBJpwXFlr+659{;6)!egm-4x=hqR$D8|up8*}rmOPKSX z@b>{pNpqqZVJ6QJz@iZlaX3n6W#+KfP9jE(>FS4>{FP*Ok zLiwpy)^Kp}!Fa=m6Mu5jC?AGN_-PuHJTm*#?Li{abaW(N!9%CEoxZ$XyFZd}iGU!| zYVYb=+eX5jHw1{4%%3HluV^q*n|G*bPh4ENvrL^NW^V;1>;u=4wJCAZyoa>o3aU3Ci@X;Z5zWDn#5UoQxR2u26|~GrozO>H?cj0q$5o!;PC47Zt??ByG{GxW3w~zGv%G zKkj;b!Iu|XZ-w*ViQdlT^J%Q}(}b!Qxf=UfD+PXXCRb`Sl{<56NL`jUtBcDKXATtDA(=nlU~ij3>4rFJ z+2l08A?gJ$;boW34MR?e`k!!B%6I|xQ?=VeeiH_@aOPt2TE^ZuHr&~tUn4h3r&K6p z_3wx&PfuIi6m(Jl?zG*pOVh+ncKVCC)I5Rc9`+N_XX<3y6n_MWP=sq|u*ejGk> z^S06(Ic_ts_he4)Mbmtn!(`MTi}K4faS=fGKD}uGJZ|ql@~d7CGEioaFK4M(75ZZm zEjX8X07J8?+R{+7jG$N2Wk8p1VV-(~yi&*e_IOIUF~u-+8}hP_4eMao2oNInjT;7s zxJ0%oX1J#4i)QHNqHq!?$N|g}lrw6DX4_VsBg5~K=*1W#n!#XfNr%ja(A4pv_REpa~TqZhdk1P#~ZG zt#u1ZTN=kp=p@E`6=Ls6z$`5C)FWVdD&|xgI?Bj1M?r_BT0P7c_lr-f0Ys4wI|vB& zp+TBKCO0IX_dcaDsuj$=8X}>5LnrW!BuzobHlfAl=mrM_Bt>~RGO~RdH zl)59=&+C~_X;<#GtV`^1&AtWo3imVgBm#o@y+0~gSQpz*oxbdGste&RlP4tFikLy$ zm>j7sY*tB?cXFG(shD_nFA_Y~4gx=v)ci81!BNl`RF&WZymmB^9_3ol=Mc9D!~hW% z75$>1g-r{TL9HPSvJ@$L{ znNaG*5MsST-pfb6TceKl6{FPq3Z^C-1 zB-aj()S|pw^6rQ(!a}`x%{U5U$EM45z|Aph?R{c?d+%;tu~6?S-Gl8cv5N^)|^(&@I%n)i{#vQ{uns#nI|eQ_{LQl0NB8{v2kC?mfRe*kMT(@-PZT~Rl-j(8n&43E%YQlHB zM=DdT64V|-#iid~e>O(!ic;2V7Y}@$5^*=oX11|2BID89SG>r%@-Sg52lY!R^naw= zVDl}&I?Fsnx6u;~h!`vWL`fmtW(A}pA1z<=%0{epil}oO$Ut(|uD2$x@w^Zo0bdYM7l`t^3YRBgy{~-5X~K+e}MfwYHn}OvxvAZH-FPfq~069%UMau{5oL* zu-ku|bKvzlb9=n~_g>#OkQP`0&pSOhRvfXE;hHBPI`)H-f0yY}K!8X@h^|3&(rsx- zUG)w3`h*aML8L4Rhc=98a~Ly^_fPf%)B+m?d|W|(R4?~(Z9RHKiCVVh_>=>9Dl&vJd`N7j@()1hBTI15woZ}0<)Dn2?R!LM za?x80F*Hq@zi~^d&}2OPZzDfrWU?qN(o$1?dVyEU$~?&4LSKq1^Al^gv7kR7B;(Xg z3xlSfmObh1&E{aRx8i6(LdS+xNR;CUMwof^`A>f-zfxN9YZ>Ys1tRtaBqS`8H7-<= z-H#UB1vPdoOi?K^SL#hn#Rr6tKiQ$zMmlN4@=MVYT+<^DySjzTm$mbD6_XL-S~QQ& zTx94Nwnf-I?brCocb~bF-;nk=MY7zYiiaitfTjJlnk6w`)ZL- zEA2)TguIYY794hwmNBa{e+TCH_L4Hlk7iaH?fG)i1goN6L<^6gGT&D%+b*R(={XVe z?ien_(8+8r3vfnWas4E+R`6u0sQTN7swMufE}*%KVM7 zPi=o!jptZaAby)Y*2dVg3f05NTCZ1{O)&l9p1tc~m!7d&^}U&TRfzU|9Fbp&5CkEA znf|W6Yf2u=?NzzKp-LdjTJGX|Q3@rNjvF+AOY<&cvxK4CN6JspE$#h(SMVP`w>Jzz zONYmhp7!h8nhp|Y-W9#&Q`Z+w#0fN+qJ1e@UX$~XsML|g7Hc3LHfLG9Y^;r*bT8no zIjbASXInLmP_wQ|B%MeF!I+=hF`DC&WzQze%t2yh(FWiMkoCRY%}R0(Np*Eh$Z^la zN9b)F5aE1O<%p->v2~g_`}3$T-f<5%b6E!ln)g8z6*kI)y{kuuO}rm5GqnjMBydi7z+tqA0WDB5EL=q|%;b9D4fPJJaIpgwQ%B(dt%doZbuLmJ8 z)>fU?$@mJdxp83#Sl$<^PaG^@>};VhT5+vj^&nq$#U{llzomWkAup3rL25fk8OF(# z1S9(#wjF5G*`Mij+`9hS(157pFLh`IkWQLa`Sma02xB1%%&m4quUwOgXXitK7-HAL zn@yGYXKdGJb(fGanKIvrAxby+kY=|*Bu-iL>sb7Cj-drr@UL3uF*7P50q8?#&$yN> z2;1UTlaZAbGDvLseYyQ4EE?C35Q9dY0UpRP#8g5>w+#53Q28FnEM+Z$gtSCNu8{1E(^H%6sZ$`6A-;PXJSFzk=oc);(b>tP7ty= zrhV@dL8zRXRPe}3hWH2Y2t4~SgVv!I!53Nl!THsYrb|6kitFn?065-lO|s6Lo;II^ z9`RWBBdG2U2^4x4kuP~S;pM&NpVq4~)CI0_7L}Ia#kvZhPeCVS74i~F(!1M$T1j@- zYNia4cRqa&>oUlbS_NQbmi_|>POCf@Wc*oO`Y7HhHTAe98mp-}8t6BKbG$$X%i3v8 zvd!nYbs0BqaLMzb$Njo-d%D$O?5#!K@urH63it72<*6_{sF1l5Dgi2i!+e;U#^akH zz#d(rLfXoHje1BD?i#{_9jG8n2|E{RwRrFE?VGaA?TNT9IqENslqFT-iq2(-U{}U6 zc4jSW8W*;cZ#%*vMXRpYC?b{gobR7hP9JL^2?7 zBZ3WNKsPso-y8A}BR|}a{578GJa6G$tlIfb6{5E?>q5v5vFqm;(3TbSs&`P5yy3q! zt5eX>{cUE3`DGq#iBwRo-+z1B*n;D#2uPspP{xJSJ@Axy3Ct(u-bW%k#7b`0 z)AuKrWEvUX^mW-embP!71oLnd>0qrqZcVL*$k3rX>Vj|reJIyA7KKc{BKlt=0P6~=U?R4=!P0L7adBr zU*d&5U-bMBbTtUzs^i&wJ{My-F@xme+ui;`EM>emD!sVzY5B&@Dr&v2U)a)p4_?d%a zJx@oz)lfyiHD34sv^`LshET6pGmDym!)@1rL^$tW`Rfhy3nhr2s|4qYqH*xb8Pdul znw^y&bv;Sz9PJ3!zeIEk%c4YEFU(zmk7x`N4q3g(f%@hr1{O2c)5(Cbj;S!2nr}Z< z-72Ne_>p~>V;V=N?zZcl>!G&`#zad-`9g`N6x*BKhC5=$v=Lf$1{{lDrJ>UA4Qu1e zl%_}xwZ3q|tx`I3zg3=V4rpuEH$8VzXqgHq&_E!(rj!$i~W@{}c*y@TmY0$I;B#D8=syya-W36toDS2;L*YPj(mv?=bsR@gZ;cOGUJR|DvwdHT+}vCW2`fS zT%@;sd%;wOqCps^5CWZ7UkLCaH&ORnqG&a3*oxJ>YWQ=#W(6EyY1B~j15uEXc{i^m ze=0YdnaYA@!hHe})Q3J2T4P~|{x%6*t=En93R``L;@RUVfk6zltteU4q?;lfY&%6^ z4M#gdFU<&m*4hISXdkRBPsy46f$})ctQ8e8=FqRs5s}ji9^X>l-BY+PD`Op`*-rZKZO z^AbF1tq5n4;mtRbQUj>}>A@oJ1etr$t~!_p2mS+ydYdktS`<3x!zBGs{@{N5e{-1n zU*vtJly-4DNYh#5pjSF*MdSzwdS)KEovzE0FjW+(yRBGtBU-4FU2xWsGEMZh%U{X^ zH56hM-SFeI>v;r`H>V?M5h5Cq%vo%XTK%-hu=oxBMT0DI6j#>2zdZV9-rtP9#SJ3PbjsTtAC7$m<;lvLWh{ukomd2DgjVkcxc#2yJ?{_UD-us&?}nq+kiKf)z%ZnvVf(S@`cIs9AhD1|}e-u!oH2kWY;Jh9cwb`u1wE z@4}0(r>opH)_tEg~XKdC%az+tgMQ0G}SK_L+6C!;te%e2Fg`x+AJ~a^ma^c@35sl ziXqPRR65Rz+K!LQw3OO7kl8rD689);nz6b4QTavr&qZd^EU*ps?Y?gj>&e2_gogZ% z$wl?w3ZvX+G-QB?!Ts(P;*4e*3?**~iqEvy1T|}e6>VSV#nc#ESl=1Ofdwg#9S|TQ zjC;qI7B7X9_r||~YWfSr^JB3#-2O+}S#`D9M(s9ui@Upfad&qs!QC~uLy_VToZ=LB zmmtB4TPekzLZB3v;-z%w8)JVb`)rT*A4Eo;`_8qlHRnM+rFPE}7eofw1&DvMJY?;s z7o5z(kzJzlR}bMH9HUR@U+iBc^sT)Qs1!%b&b$AnZq#VBVO#jAz})5`;BQ^xdaG;& zW7{r14rS^=korW|I-dQ+dF%scmOW)Skx5zRp1)m}1ah~nYJWh|ZXRlrR+Dh*aGC1H z2RUy-w2fg5TOYMPq5v#T;eAUS2y@`VBd3lyA?tK~iK2LJ+p%mc)G#Y=yle#5)0-WI zxv0&qP4QRd3sP{!oB%L|Ka*~2Zg0!(0tx3yT$zl$hgW&47(S`s!k+z7PpANKf$4s#i%|+x39t8YZilzX!WN?4jSLg$PqWV=! zVsxNEYZrM$+K;@Ax@Dr~m7r>gTQsj(^9TE5Q5vq8wuNp-0?zHkT-k`*3p>Oq2I)__jg8Tt=;IqS{$r zHbOd=MiQi6lUVU)GmwLW?$}jGxR^Zb8n*ePaZQLaakiXneAAFVZL&Iwhv8dFCV}y8 zb|B6ThV9tRF2RlsQw~MiP})S;-RJwY;%|$UP`3sPpOFh6DP?lukl$3jJ3B`Zs^N7s zU=@st0t|iUegiUqRkx3kZ-f%b1U+1FCfVi!l&Bl~d+Nq09KuHZJksG1_ zJn<3|)hZmPtnMbC9CW1POstksu3_4yvZdkY3~Q;0){#;1MoFb-T{-SM$wv8T&yEqZ z0raJifw>PAZE^FKAQkXsn1bY&ygCz^vo%jkjTVqt75i6?-A#}>!RYS73O#0`gLs9u zmmxmB7BxHoHms_?Y7$eB{|dy+*s|=8+laJB63<>X(ZnmA&q2e;FMDVD|0W6Ly&zGK zTn=y@M;nv=7FJ~YcyZ;$`j}Ga-wD5+7ax5O_|W+M;O~1-#(?l951G6-i=3eF?Pte@ zp4>pQo$`He?BHXW>yt*`eSsoSpU>@1CZ4|z9{{1Uv7i>vS~H)y?^pn(EPOH^#_P>- zzY=mPM*d(~k&Zm6)`+_OG*^h44b3uY>2zS+DeGc=v3#_q$38@jq-?nJT#X}>;YVlW zW$uu*J?D*h^QCddFKMG+&@pwJIV8HVro$espp^N`{4d|6ny9f=(7a5$(yA6E8hH*W zJ1!OU3pzrZQ;Tp(eWJ?u@pGd~xd1j=)WK#XeoWeYNqtVIcbAcv7kjeIu@UP~v44Py zHWf$(kD`m()@BmLJhg;CeX<=;=9CuIMDN4m9J@fre7`AnW#hZ-e}K}w)pR|yjxQY# zxJfKER3o3WylzBj@$(T((_;3Pp^-N^@s#?idgKw}Z|5V&;fEo0Vnsc(Q{1alc2pf9PvVm0x<=Z=(H!W5etG8$NUvh0K19+ z_9p6-l#Gw=Fo?-HjVcApmi~cAsIvqejV*7qZr=b%Mu?F0TFl4Qo8Lh3LaW|;bI|BY zqF1Wx%Nxg>@@46OhJ3-%!j?Ca|7>!#Cq_zsqI$k;kadrnael^4jR!BikZzi0OYoR> zF$M{Ib)B~zW)gror*Ye)9~-`i64O$m$bN%iLd|cKP&btsV$2mHyTzFf4wE%{8bq>>XW*S z!xEt@Thqd%JhZ+=O6JX)Ts!Z{R4_pLloxWO_1ztq3X&ZD>Ow$jrw>ULl-t4|oi{524pIB3>b6sUi{7tn5RR#)e~F3e%?PC}DM&G-Dm`&WDsqt|+@ zRi3J*<7>Pd%E>REV+jZQuHPhL+) z!kzb6GIV(XF#`HJd)2xOpZb29D4}2q5jZ_#qlILM8TY97?$I|L5T8^TP&Yv^`~Cqo zr;YJTm;BI>svzy?VyB9MqjivY534svWq*YkKKLP>HTQI zErH+O`_J`V;_z}~7u!3G{o+4(BiFlhsTEzeyH)n+;TY6{Eb9IN=YvoO{8{xqv*L3k zn!@ubP9K=oDJ~@|VDqruu1k3FWI)doYJ^ts9+_BoomR*nBJ8 zJH0*Fgg#yjx}5jU{to6$ZtA|XbLTTPi8xqUY^=FDlz8IJ;p2lSmFc509x&Cqr^Gp% z3yr2tC*x8&rz+^mP$6D4G5VmoID*yEdyK;>|7s5jvQ3SrR&`E<7S=rBF&>8+bk%Gf{+eeo`JtV4^Wf!E!KTn9NsW9?4u^`b@TZrtq1Ak{ z-uDH71+V#qlB9r``6vwK>gAL01s-GOLwy`c)R z5w7x8&L_pFc7WPiIV3fe8sE+=rv!t*qO8-mS62#A7V)EL+8gAa`hNgtB5JuWtYw+q zQ6miAD4np!=sa^=RQh<$8tEGx@kOT`voe)?pj?f)WZOn7@`+}6O=jX19$6bRy$~y1 z;WaVJNnjZLHXkFe4JH2oa3L3fG>C6Y*~1MK=pGj;5jGfUDo@~oSKERPb2%;qzQk+l z>gzIMp$?dgC3fp?B$~{F9*j9NjLgvw<*K~t`0T>|$a0SqzgZ&n=H6SXjWmUx6 z3;w7G;iYJ_sMP`6{O%e8lQbWAN`W$E(H8gk@_1cfGv|vi^pj**<9I@z{ZMW*-Qs?J z`UrR|o$@I3Qw&TDDc(yi_g9H`P6(cMwdz89Txxf2}ayJ@H z+juyq8*vDJ0_v7-&K3wV<)7B##Q?#~!uR*JTN6(Dy4Gz7wJ1&HeiIbUpttO^F~at< z{l;!JXs$G#z*d^L00zdM1@9LU$}O7?_+47DuCz`2Cwge;5w|Xa53e`jrQNR|0CZQ+ z1DPKTyu8Lz{7V2)^`eqTT+S#ooQADIBmfx=K@30y0Ffwnf{*Fn9){^S-2;Bsoe(dGuvhyjys>RpuWo0;3TsKT*7ay~37IZ)Hm7?xXS4FnS z?pdwvBQF~*8$|@LuN1?)Q19vwLYdu&4ACKP6*m+S6i-d;CA1Tg_!J9a2;Qiq%QYq~ zlAHoMhVj=6%z;D;AD)K)uAYB*z(sC@VIxt^eo?b5j#da{=WHn@;T4L9%hIhAwv551#gp1W>^E2FG~dqGm1FHr2xf zgoQ-22LZ_hR+T9k1cp}QXuULjyD8>P9sOy2{WoQ$%B&|uqehnYqgLJWv`2H--Nj8o zUXIE=8nrZNQZF8XU3Kf776VwDL74kXnoYZlS`7qAxpb^PqC1agtbfE{R7lp?L)JpU zyC7Fn59oYD-dItx7UZ>Q!OTC|%6Js^gU3oP@=Ldi)E_k>Rjs>Guyn9sqxL=b`fcu!MCibjsA<{68h(HVoIz`;hjxQ@luX%x*Owxot`X#O;xX#UeK{dcB2>`0*j|O9C_YwUc{K!8;-KyEsHAvA|Mm>G zx|~iT*i7&B5v<-g!$dhABeix+We1cXSh4V?zI(=&xQ&YRO-Q%Fc$a8DvCo18GFLdFs*F zg`*7VPt{ETLA!5xi$s}SfC$$8+PYiL-4-QHtkvp3AN##GxS8WIGtQ=?V%D zNwv7NN^hk7vU2UGsCCrGO+#EOQ``Lp;DliYG* zJCSU9V&+g&0T}0vJ}P`>C&s2EUwZPw@Enx;g`5?+>8#St?Lh<;fU8xA##V69nxbsQ zHvDO{gudA9^zX*j)@K*p+=~z$qYPcNa+BU8d<;9Y*oe-s2pgg?&2=f{DNcf(MQ0hE zk5*15_0AsB6}I$KgA8q@_lwp$fVN5j2usYAFQb!J7CU*?xnb+^+vb|!&I4wj?BS8k zH@L6)6rPQzHri^uFSL(vQFc(Yoef}eWPS|d;@4Y^Ru%EXMoUhv5qYvfN#dikK}qMb zJ)ECI?o4)Z0c@eHB((OFOPd|@GZf>l>TF`xT>BZsIth-+MdY>lu3m)F0U8jC z$>fBL3I#YQv6lPX*O<&Alnb5%x*aV-DT=PmN^ogqO0mY4eJ`lAL$!RexDlE6VR@W>!YB=$3M~F`J zxBt*XWR8ia&o9W>W$QC@j8QeB9PtTBL9oL}Wu0ezfr#b}YJ1y%?uF{uPqJyY`O#r2 zT1r=}R`)VUR?b+VOV0N*3jLH3B*q~kFdpyABvTwv0(yUmJP{y6IPg8N|KX*?7x6LY zBNaNNBC=X_K5~vbh|?oo&eo2MsDazeg+kBl8ac>|fWUO*i!0{%q@6gtE^-cgAMi~b zrsUy~$V6lYsCM3RzN4ZwZXF6z1rhm)lWdpiKV#kTx+97CP$uV?i-&$Ao*lukB@Ng3 ztlhT}F;EnjnCUoeqismjGL6)`h{%&o0ZfbtK-w1}dRc%;vG0d=fqDj{rD#Cgt*vev zLKzotXo+4Vj^4@p3(rhV41PTN+?DtFJ}w}-b$8vt5b)6^;r&S5+w(i=yUmcF1kL;& z!~M(-X8!;TyB34HFD~}l5A3Nkw?&fei|roQyV2W89?6c^>ykT1`+S}7XS!K`dxjQN z7V$R!WY&Ebj-AnjI0RXbJjRJ!g=#qph=VR!+yZy1;IBZqI}dvFVO=l0@!C5?CztOf zg)$Evd$nIlzkX!LseNxb{=bAU#+NFgi5)uwWLy>6>+3_QhxLnZXp?vLGuhV-Tz=2L zoQhFj>VnOU%PFWQTI~HOWc^B8c;}JIKF%5@--xwiZ~gd5V!BbngG?afzE{0cjZHr7 zu7Zw2C6DOVa)s=f&RVwULS#~^w5fhbC|fD6POB5fGIDl=p5A4;-^ZFyV@ay;tg;b7 zP-@>Q*Bvxej>?Loa)TOgN%8yYlNZhsN=l@!Z5XFibtD)e;x>lWB&tR{vV4^72p1q8 z>{i19EOktPXDxV$^6rXs#)(Dx2nt{iOBgdsdZv#ZDkMpm2%)SzANyt?{&}&byTEO@-IiQKc!G6~?z5=is32L;<*o|t8+n#Ig zj%9RFVZ3B;B7&J!Y=bM*4oUM6O7szbCICLxrO#%LRkSmEF7mgh0((4`aYlR!ScW2p zqvzIR8rlmLvnkI3{4u6FoLEqV>)!>N#hkyO@ZMpSxum*`3s$p*GL1YxGe|s0u?D+7 z9-;`>+nH(M07_g2?{dhG%XA+wWlm%PzaVc8-cYB*2ogTol9hB-DQ%5+JMWEpKY~P*R*J-G6T4<7O30F<9ZYLilzb1(=?qhSH-Yzi{qglG4PxW_7T6mpI zP;ZY2V9!ADTZfGS*r@k9!Fby1v+7>oQfllfS+*QG(KB#$cgCk9Ul&X91b-L={f4-O zjcdEX>*#t$xTPp7-zVbgTtQpL7{(7+=Q-T61NTV#y2@{zoG+Xv6sAxI?%E3%PY{AH7ux=$gs?ZgocZzP)vGi$u)13BJZ)5 zWME8@edj1yS?D8+ot?^@WuJ$`1nQ{Mf5}PgSbEF@Z`^0 z+jje_$dmYI@Ko5uko^N&% znQ;fsmHCM}bAf7d%;E)|cUI7%)DX@Lu7i~XySWIs3O}f)(3e*LjN%Z}PB^|D@4ZRG z3#%u@-Z#Q0?_r~+od_(4$j!s{?$zutd(dLyD?^pNLLS?EZ9 z3FS_mA9^YOv)Kk(d_W6|ju_Z6O9~a?C6Zb_F8JLBCkp)O@7@jF4j<>;F2|inqh#qB zG&(tNw!U6>B}E1?=Z$?w?`NpbdH%*x-(~3P+KSm+QZ}L|9jB=^z_THT4p@j_i-!{X z!ovxpsptZXmBP0SUg$Wh#0*OqDg3t5RF_*&`A;^H7d|dCM=W6f09{o@R z0{6Rg=7uoF_n>7icx5!7m!w)X`M@Nqr?a)(1q(#~I&zz$q>S8FS%7-RWso0LJu%G^ z6q$fBO%*x5qXDms-qIrgn6S|+6ZX*#UnLIkE7DFC z01mdbH^|ZEvbKM9lb;ao*KEmiO87pHb$nL)D`9J{QSBU>!r?j5sn`1)#_>S_Gj9|x zRm^tE3f&dyy=}FVKc!UuR+oEw*Oa};4+W|zQpf`>G zR|&>ym19m+saH26=q;ox3?Gu6<6opWXq+jI3^$6+q|_wP3S7$J-?CTUx}~ zrYed&K&h%hs8ng{4fbABRK6LhTLM`ap-9x7eS107N&Q&Zpt;Y9fBmjRF^a%a4B@rR#_#Xl2 z&zc^2-TP@)BV-yMU4L0pU5wWaf>RS-ctwt%?k`DU52$veZ!uxP{FyzrtCd$N~)OAh0{a}7M*+i=j4+4o$}0=?AfWp6wb-1*tvBLRhN9 zwf1i0oPdKq4M%eGknaWt=BbdVlR5Yz&*a7(w)e~o1iePs^!W3K#Nir*sh3B!NGrB} zS{~uyhC6rqU*jYkE$%%8{=k{kg?wV#Yv^L!TNaKg_AK{o@?S316)i~D@33%qS@Jmn zm_d+vdBK>yC613cZw#YGz)+kUsZfr<>j0Hd&Nw}+>*BHP)BE*{iM81UZHx~qxnIVv zb8p~v2?d=0+Bw~?Y=aF7BB{@=xcVUBApo~ozZV$;jzpK2z%F>{}(9h(^ zu6ta$n@dHjY=XDY=FQSo*rF%%1G`A6NAk+Ybjr)*K{ zYf0u(8N}vfQYcJ)*eFG=w(E-JvoJs6DqTZsu94@F{yMZIJfJQcoXS>}q@istRpbtR z{}Q(IOU6)6sW_h`{5~(=lZ+MRw&j3GZ#eSz_E2iW@{d&WSJ8_>$lsZb8m543pc1s9 zh%<26RpPS7{hQXR2mI5~liHK=I{$CuPF#`x$)%x_kaQ)qpWlA7SpOZo#J+1T=OvT5 z!bS?mcU=BUQ~M8Kb`|=t%u^E_cb^BPpA9fxB6PJNytOIe5l;{b zZ3-$1qxzaM=6`<5?gm2NscJW@1O{q#UU_7UpS@EN+g@Ld6UB8kz?>DVV=*7E!DY&i z$8HR%_iDFj)6V&vWu*p@!$8~$Kpf7Tdr(X#3>e=62nGAPNC%+fPZ@GpZ)~7&>+9to zlQ8cyLY6lQ6kSu*Q2!d5jEj%SxbH*Go61lNMSn+z=GT4tev>keWqCF)KH{p@#m_S2(0{W2T1{;Wh& zQo01_h|?9UbSIali>D(`n)F^M7~sSU3|sG4_Py%pf}VOs1XG`dc3#Zr?6SU%N7rG8 z6UD&;IX^60140a;vdG(yhZTjyV{L9WfcL$S+8?J z_h70Hd^!R7Ihy`q%4blLt|A&z#OTa*?c?nfd(@xZ*KhGj%aF4(Y`s3jHpd+K27=Z^?cQkK?}y~{4|nC zd1}E@Se$K);7*q31ru|xCf?F6%o_2fAR~(3m?PiSr{F%FF=wG#wlzNxA{vLxcA%a& z$O}^8RL1Y|r-)KIPCs7rp_L|II;icCt^s{!-|@fCaR2%(*xu|huBB$W<_Bi-m+p6m zgJUpmxLuOi0S!Y)*>+TPq5n(Wy9IC_!NfdYV+_!>;(AWSE?4 zwD(^eHYz@mp?;t1*nmZ^))x=PIpqS|cQjSTov>0qm9WlZe%2;)*cJ~P*KjhVRYbO7 z_ve9-%&v+h`AEnn_KF&qn7%FHe6!Gl>k+LzBW~fvKRBddwUDC`Gs(x+0f?BsZ$snt6Iuc(n7g(9}CnlGOeOiRR)r2M~mEwnkCyN*806cU!4Pakg(1QBH zszvrB=$DPry4SLZQPjW{NMYX0^6_sid*9!U~ip&Ug!_nRa~e-!84ERLv7f=$kX zT=^GwKfi_yU`uE(lebV!1ZB~&`~##t&e%>Bq19W2@$=uFe;%pv8t{s8Fu0KRI3y0+ zdber!4={|rN+U%O04h@5_SU`|!1Uo~84V37mi!#7(?T-3wXw@*7qe3rM2m_IIjYU@io~bu&cTLSKF08uMmE*Sw-BD!eom6VY#{DFy1@-pO zli2dvP6`81HzW+>)er1@T@iTsBM>pR+|mGoj{%4u9-%Gq>?6cSTfMF>s_H*RaY*ON z`06i1<4DPWk(j&G!2L}2i)6T7cx9hZ02FI0@N>(XSyG8=@OpARUTp9T=Wk zk?gDC4^D@neGh=I?~XrLZQF-7cRK6<4v()^!s4`!T*nG6p!rL+`t0`F{w#{YRx>HM35=t4YhRBAlnxvhI&(ep8)B8yb zRGPfjjw5l@5-#c}CQAiNh#~~d>u^#A6jCQKEIafYtAeKde*ADKf{65I(NI+PPHz!L!XKpQEfRxu#$WK9JLCTW zl3iSNLeY}z+UdA4OfP;0S|XUutuyhoLv`Kkdqs;-GJLP#KGUF3@~GrZsvKguKn=;Ir*t(ci~>agA{mKFA4G(;nYVX=T&7YC>^GD=+&_A5BvbzKHmvq??n&j|N~e#Q07qq;6_~%>zYSyb zLhQ&Kcq9W-4SQhr>%Z}G?diE7cO6cKkf{}d(=eT%E73Y+h(CfqS$KJY1M#Yzyvy2Q zL$fNIruwl4RH1>sC(Hr+*Y*6Qg+`z8{4o2w-DiK!)L6^tN&bZUBbS}Z`^>2b)`ML_;u zoyB8}OfrshGZL$JvT6`fIcw{O!IBn(6Yn09^JIm{R&f1!?$Lg?vdKA9>;p;y@Rr|6 z_~Y`3IfDXFEt^Ri_Eu9la1i&+7D98I={_wpLh|MM1qda;)wJ_2#ey2uY^#Z!RR$4- zWK18|S*fwdR4aJ)yBsM8d*a&gY9y9LQ*5}xzrH~_KYQ?<3S*Y~s!)YQ#5Y(MvAOB@;5YgwFG<*_p# ze-#6#U2&)L0KIIL&i-76aX7Cxqr9T^D6Vq#S>%JB5Z!I0|@cJU?FZ45_$2Q7`B`7SjP|5C33WKjM^>3z=r zA7!cX1SCtUA>CL0gRWUn>#aDqU6a|2!hh0UVE)E1qH^@@vkFamIbV-^w3z5_R?^7* zwt<9m;MjNzUi-fcu3Po}M{SU_QNjZi#9I+jz#95 z6JZMEZauZeUFmkz;l97Qv%h6sYDUM3ECs9dqirtVC7acZ+D;jCC)@$VYI5`EZb^}r zfTq+9TzvviJgM)9mtGXIVtDqsVTDZg^y5ED2<*UN3Rh^a3+!I-c|S+XRzs5jxogLh zBB6JZ41RguZ;3Fy+3)D^@j2s1jkyj0r3i4EOQr^KIqPF3Q^5-Ogb}|iv8B_V>7yV4 zboOR&*siXg0kJCaa-Qd>hxsaJ4P;B9?IhVL);0uax-7pW9iJ&+NTe9?eZn} zH`)^83s47t1fBU=-zmWBM|gUU0dTZPct|kfOh5{80%K3feA(t)*6EgY6~EZN+ZBEc zH_Ym{jPgRZzjZ9G#N;>V^s_U2JGFSFt86Rg`W75-2!o{GGxJbnMR;RPSNp3=YBWzc z-CQRJAkmH&)W32t;UM+IZY$@I<_Lckp@s6gnqn-SY`+_SplOaz=CY*U9Jpg2@~cc? zyj`WJ$5#VVVJrJSAZ(VkA{!y4-_+Vq&{Z-Z*x>_XPv0E*Cz3v?4(YRXqI9*C;DXI# zqsd>&jlDTz!uqPctfuuQmq9%~%`|Td#_qdW>7O_`qJv{s^yIFXziHDLu4e6=uN#+}1>4(fs<=3g{n~EK(&IGB z?L$E)neD+V*e3sOvO$u^0`|-i$?YR~qw&pNa+>>s${VX=R)FhhQoqYXV1|dMJ}X?l z`ozfE*Ue~2)78Ov6g0VZlkCJ{MMc-eAzT+J7TNKanQ8W`E2?~nH8f~zwhpID;cjJD zF^ruB^bas=9uhN=_Gz}FFj%kHMd{1*VAj|5ypcTizYyXE>J1_ObW)>R$Xv-chmIcM z3s{lYrkoa>`&JQN*3bQL;dn6C~qDaP&g+@QEvp3 zQEHet%mG1UQ$Y_tia@>?3gMdRaMicO>!2>9C9WB_qnQih8P}XU;X$pM>52<-@+P$f z_Z24~9>SM&wfaMvn;rzEeD>qf%x_tcQ}JY{TFjgzQl`Qh%oTZ}J9NqyCRn2qR6m2j z6?9xuwZyg>hsR%hhaM8a?u5TdW<{lT?AEz#H|}YavB@Xaw0$zlJp%85b zL9^e?M`QoIul=F7X|k@VCU*=FSVf6_T%)13aqrS;t!)bse&{Yv42 zmZ_*N0{0Cj2D!Mr=O4x)Zr!DZm4nzxnE~o_L#x;%lvo)xwodfuI(&iMdfX3v$+=`r zN)W=g0+gQQfnSZ@rCfIdl1JHOhJuaq_ZfR1IWEInp`}}|8|NzSN7M%n$So}%39#|d zF6d@TWyrv$f3VlCR(s)px|&CteXK$=--64gCI109@8x^`!he?SAL;Fgj-3AiPXFg? zdJg`+^swo(&^-G%w{>SWxgVrGaKEZNbCIfiEvnUEy76<}BD39bgLn!P zfg@GjWk6}X@Th1h{Ts=)(Ry%JqX#lELvhz}-gpU86o9sXj%>C5tWhS?e+sO!+vSsK zhehUb6?t6CSdy&9W81w`8jKj_OC78jVKLL=h-F0wplE(qEix3th&aK#vY1d&C3tdp z%NrWg6?MkO{@l6H0~{CNBQdKuXzfOK0N|E{qd$-HmeevCIc>?qCwc?QISUr_Pn5Ao z-OsrgdymR#SNweJb)JP*iJY6@MtEN5F+byz1xAIXPjt;Mx2#n%d{ck^`&*(r(Uj7d z3j_B3#*hfG?5v3@JZc0D~vX}90SzaK5O+wmzxz0yOG`$Z6e&StJ2oa(;AS| zu;sNK@pmO|)E^K!eexO04OXd}_hg9evrlu7@uRgbA$%=?FX~zc{?b^*R>@44=NG%} zLppo0unpiVYz~XL7}`T0pu9dVTZT0zWgs+3Zv& zBxN#IMHj_K1rC>iE9q%U0iE+~Uy#N}zR8VoncgZBKXL z%8<#TxyLl)`2LkCJC3fH_F>yIc&kb)lSoQG8U?B#|r6hjQKS#qq$3)C7(}Dy|`5&p@ z=UM$pkqAL>k4TOg?kx&q4;3uT1hWqzBoH?4$#;Ag?+}MLA4_@rTq_QjIgIL`PYo{R z+o{iUQHupv`MCA(+UlC6kT9V#+Hz^i_%sHoGbiY%>LXJ@RXKqjoEw($Ik_1m!KJiB zHe4RE28w^}4l}X%`&n(1+5F$O3VV`Y9!m;2_+C9ll|z#-*Q#Q)f*=y3sh}4 zgncJ4kBQ#W5*SbL|ItlEq*$=>gvP*-reCkl2BCj@ zZi)tl&$m+R;3dfC_MFne#Q}?x|7CRX_e`8W1nE#AQOWc?lXPt7K5D+?+I>w}n^=3k8u@0ff1%QGV5yKI1{hq}R*NbXA?G7}So z!D3UTAzhJ>g5zP4M1Ek@z;uz;;!>!v*MNjVTc}3kJYlJ$k3y1Z`|!((qGRiNLnR`> zvtRfYWTNSyU>w$88NeeS`mi#Xb)9jbFLXp6i{M(SvTY$DlS3M7`r-Xz8X{qqPF2M9 z-hrFO8&(7qy<4WpAJx+xD`vU6yQJPqd#P7Q(~o`#Gjqn=5=#9z8nWKe#-&RfMP9ip z=&sCq)=$PwMDUMP;UZ3>=X*K z&@Dn;Ct<#Hx)bv)=c1aKP}}$W;lNaAPyr&HeBVRi<*<77tbLv0Y`AVT-DR|8j7w3C zn47;+ zaOeG21vW4D+1c*Mtc_GZI!{}eocI{$Ih#6f0RXsUPR6Un3!!%D1o2=}RCC#lAGn+@ zYM*s}gTHd7=&D$hr?Fu{LC}N~tk+m|zJ&3!CQDqafH*Rj-0o-3qq~f+yoOw@88Qfv zcC4REsC{v+6qI!~_mAu$X;4aCYw(~psnwp2pb^?~Q+j)9UXR(jR}`Uv1^{9C9{~GV z2p}mFDWeXtOx?&XR^}+=Hnm#LWT<8A4AxH_F=N$Kt%`3ok6iwun+>s_8v0lt;-Z`* z%3n+gwRaWfNFUdXnHL23qKo*2>ns}ARwaySh!Wl4^3|9nmO>~t>K}!=@I}>oZ9M7! zjJUJc@z)@^a?lZKo`h%RKB4c>rYx5VG@fvnWKg`eou(tC0fhe~mP9k+a^BI@T;qM@ zFxZ;rZ9Wn0e6O|y*yl{lOkM(d*xT+5VN7Dr@97+O{6_b@_k|NO2F%=Mz~1bq1NBbURf-7d>J;KHoSqBDo;_N8%l6Y5 z6h5&l-9CSs)Rd~}H|pm-BXj6bhYsq{Y8^cJw+DqPO?hqL!Wm?pDEro{7+gISXD7urJ1yu~`mA z<~!%Kpulj_Q|-Tu7X^86{~fjD-!6weP3eiygj2Cwc-zl;Cfwli=}bhM{otWnE;MI$ z@4fXZjbHNb`6$ppdn%mUA{Ow?<+9Lr#eaRqb|jOU7S|m`C`pMyH(;spsXB8I1To!w zo)B1WhuIX#6gt;AD}YwrE$Y}E%ni}Arc8%U#4LYeO}UKrB*e0J&%3*?J$TW{qYqfT z_uohtMKZ>&OBuaQL%bjd(mYQ|5Z2S$5+b(MT|imn{PqQ&H-lWB!2w$d*r!lhv@hZ#<*0TL|nyx<+y0TlCi6y z!#zm*9$Jca(n>_HEz-2Fuya$$Q}Gdo(|bD0M)J>Lw|{pU+a4yL-g$K`_KpvdA5{jq zAhynDN=h|&xiy=v^}}TC%5~f)DiAb>{HS~dC7K$RH?zO`Rw6ObA0aP5_V>SThqHZo z7l4}99Ys;SJJfcYv5|k$f($trt}FG@;ZX2k-2U(GVD=OCdol!abZl?QO)&@mI4 zf7R%%Y1A(oe))z|QD(|v@RRm-*6U zu|4Aeg^*zOL|`XbG)kamnOw?h4LcgjQ}#Sx=jl43#?KF8U(pOMQp{}99M7c&j)s%f zBvO^rI#6UU)fLlH3n&%TC-=oh^P;%QxUUf`h2ty*stAk=UD$C?Cu8sevT34EkN89N zCvkCW4!6K$GHp1BhMAy*G@=D{lvT~rniSV&tm^ml+`JL;w-@YRFA!yfT%9SKv+@pV zLhB;qB{e!$n=U=CShDro9J{>jLp{JcCELkS#!Y$h<~Y=8ee4c1ey;4cqjgG3ayo%Y zOh!grmRj!({e4vl60hrRM3sa#5VcDr@e0^q431Ogk1jV{rh#Lq2E265D8Wsb{itTs;HdRrz>jUx-t#7GPR(Oe&*- zxz|Im8>z;6yxhN+lY%P3jUU!Ax&I|Z%tbmqxhxXw0<~nw`sH5I#eS$3YCpUOAbMkI zi;CG0S8{c#XdwP4AGotI1uNXItqbzHtR>BRc>>I z%PjQoy3a_q1$3i6wzG*R06yS~j&qG3K2nk*4m<-z$CbWh{sRPfiNy>k7w&RzFq2Fo zIBa}LEK)5wV%Bb^b#U~cBhEtyAMo7Kk!MyNt>(eF+q>4-_4y)CM7g|5P=vYGIVGOR zeC{#$QHRGSr*as$n&#^}m1}64@#a(~dgZQUxxoHtaG#G48f{FO+X-4E-h?jOMO=U) z;mmob4*Dn}>ZfXzZbfe>s+*g9wl|g&iA9@12g$T~d!BB`$E=tglo*y8`Yv9R)o914 zy7Jp;WFU?;*aTN_w^^FagOG0kB{W)UyR1L6yp|k*5l(SPVLxgPctgEYdXE`LM$|&3 ziPM{_oC?}`6S3LK7bhVMGM8zSlqqtZHgn-Tn@Mx8*a^T+Gw8-KWMEt&gFDnIZMuUy^03}7{T(VBw#rkhh|jG;||R$=i)zy zl_?AlDej-UJPNzqW+(!+(Kq=a5>!W!BC4DzZUs$FR6+S64fi~#&+E33SLM~#V!!O) zhYL(XA}Zd8+@&?f#69Kb&dlm?ZMCO!kAOc+**-55&e@Yq53Ou62pNk1sO+ z22}PwO@v&T&q%u`2nd69`NU3spj(&LQDXl3)0n&MkrXCg-pWoisiQPbJqJJEL;U{= zF8KW}PaA1LsKu&l#jtkn&R=q-Xj2qImFaR`Dh1eVg3dj%dKB1Uc3e=`=e6@*+K9K5 ztiSm-y}1u%4ewa#2%E-*uv+W(_V|g4Weny72i+jwTVtB39_Fg56D21e+l8cdj}~#+ zm1OjJP}EHbhK@(y9{$xbZRfsh-3C8~Wd!0_{ij4HB656AWa#8iy5@JZW8C_j+s`kLq{d z*uo8{G2{1lwq(Br;3&B)huA2T8qN*?R?uOIo64cBlSd9~DWDvd5r_7jx#v zbnDrpWr&k0tCd2cXG3ILZrMx@I`RJl2yue3zr238%bXom{LPKb_`_Te`XYAEW<-f% zV0;G*g}AN(y`ohswlmnc zx&7NKXp8m*%Uf&RG+c6rwU=1qwPcUOIlqM+6>`48R=l&<-j92i>(bK(jkChC1$=79 z`nL$$`@HSQ+e$g2vHPBwSo3mcX+%qnN4q%LiN~$$NQP=&US7sbcl+)<4e!GGNe0ua zDBIU~{dWES#cEM;2-cZ#Rii`k#A+5ka501^=tT^4+dYF?DBFp^&Uc!Je|K|KXx8eh zE*IRbx6kL+od$vAt2b#w@_uDoh!H<8N_%!Iegw`?$wos<_Et?rjaX=n%Q zkQs_UOA{w!Op0q7-Q#l?C|Y~Q#d9_CUw5@r9Q7_NcVAI`L&))~Kh=9e*k3}Rixc}g z)7_O{e(`2%rwcV3;3fh*5me(#4U~XT?Sk8C{r)x#=su6^MBk4&*Rp6ptn=OO+&i|gB% zSGk5)lBZ~vgmgM=zbOhp_%eeuOcwQGSj@^a)p4TOd9ekaGoaImxayKnjbVWDDqP%4 z*y$`UEjIvFxKD*YqIMuDg!2+cE%uVcu9AMz();EcZdbm4)AQkL9?8AGvV({Jztx=o zf3NX;V(3i##rq$xo`a6H<<`WzN`!xXrOcb_U-8@fAC8x7)j?}#w_L5;lm5-<&xbb{ zp1r=p^M~w9ZYaiaDt+s=&-!eMBn6|@7fqDmpmZ62d>mjN@LVnbQbyHF^3W*~@I!n$ z%d0FKw*h{6EUna}%aTl>@;(;38JiJz2TDe^1638?g&Nu{YM1+xtQptO=1!BDSiip@ zb}Yv?jN95K%xDQfQzlHz=)G!&3h4SS{Y``g##Ka4l^41?qb7mwb`sp$cK$lcF5lAW z#$BVF-5F}e0}YNyKkD>B^$5#LKLAZFg|CF!v;L+betlFVU|&OB`f`h(^kXcs`Q>!k z9FcJWFgh0*yyyl!J0%bezbu6S6et=yRoqC&Uc>c2_!}KKfKcg$x(J%&)C2 zRZcLIGt#L}#P_rebPk#f0mWwK^on&yWK-)q7+7ci<_+1+X;r{9@#uN!ZJc!{M9uh` zU;0&+iEWc>wJ?DQPh@1)&Z1BPSKH48w{Y|El*`4B^0(;9ll^X~SP>_!U|nyzM2AG* z6?!rO{$#A?ypqXqCaGxS^@wmB1!bLY_dm_!cjGU2jNt^r6NZhy$xBtrJY@B~&If;z zbO#UvlRea_zcvj{z8_aM6*p+Zuh!mU8-NQh{A;2D5sgJ;9Ge)rK?mkmj82&&9^P2} z!-m=3bJd;P2sAVheN@1K34K)->*{F8AQ_0!ho9N1%IaTeWVacr3M;V6Ns=hA`_aj^ z0R5spYaBvXklMf3w1Erqdd^}&ftm>}czawzZe4soA#0f7!$->R`}irLhSsQk%1hRE zj(%dG%YOh*JO3JvoNVV>{Y>(a0W?~I2Ia)C)PR8a5{JoC#xYTmXdF*+VO{)i{^FN> zt<>Dg7T>@$t1ExowKA~uSequNL96N1B4Z{SQ(oJ$J3>s#tTAXjvyx7j!&^eWA9V$6 zTwN(U>}kwNt^fu~s>#ODmhPWPO_*LqjQya+T!l^gfVT1Dm&_V8Kx6f_y7pX~fGH6G zuC+_z?X4y_VADGHB_f5?SmjV;)~G#zX%}?78~@e>FC4wY1C;P`1)yDId;5~D7{Ek# zGn`UAejIyCI6GJ+<-+PW`(Z7ZnWM_=nL9KXokFZPsCX zMnL$$hP+T#DC#ln9?n@bE2ZDT)O+{($NP#zG|jy3*Z3+xI;xYIq9mkGgRcVZ;Mc33<9zVoLXTyfqzB&^KAY|2-vLn zL|S&=@#00*o~%0M537I8H-N_}fQ^-q4EMe0XS!4FXOr<_>-D2Y6_q}Z&J#iZ4zBPD z%s{Hf`cafKW3GHh8boP*ij60SvG%qUeiJ0+?=12ow+A6(QX}WT3WTT!XHMq|JgScE zzyZg>ixa{PwXn7x2ZY0++yB61G~=b}W*_}+pKknhIeBjXv8&sv7~vRO8h(TYA>E*> zkR4fVb-%`aMgU%nI$u}+Xv$l>mpI;Uw;&3VKAlg~x@>PNG8KlYUcY6z3h#e_+ z7#vZ5+r~o1stsGM(HAx@QTD>V9Td5pijy^XMS)>Nxq?4jJ%eq9iTV$V8aHO`%!QHJ ze~RYc{(^5!i#sTz`iEmMWVJ_UCYF>L|8FlP{0Ze$+j=K!wXOd{!5@R?k?ZFkr%p1@WfzawiWO9<5SI{;G@fmb*sutx zq$s?H7kHq>Zr()uBvx^>&^&gc1d5ZFO`9~j?D+jyFhOS6)BimSK3?njOtR0FYW}!J<^oUh4NtU~)A32cgdM(9)}eGZZi90b;L*SNB6Jd^gdU}@;NIHptYBAKyWQe*g5awCf$ZjOq#NRs0g(GA62@lz zY8xYux3ONTv3`YTRvoS|8SI(0mMyry^08k)sFrdZ+3| zC!jkVyWW{ovHb`2r>1FfTI1n~C{V)+=?}OF1~9Disl`2aK9_=-YfE;E|5I4$tT|hj zWym)P;pxKW&FaZm+z5y_I`H)11@Qe-nJGe(NX1~`+o$k=N)6Tk-)gZ%?>}6%`&{D9 zDi9wd%NL~!T;`y+nXX0a(sgE30=sNQUjg`fR+8gFj#!->xukPaWXj%C(SPz5?p_a8 zv=%5BpVMsBaQnUh%)8tuccwWNv>#vAzU6z-L#uyA6Qr`vtSCktPubQA-C;`iVUR7M zfjPozm0EV~O>T$<@gqis=OU=XLv~@gXT~|%jAN81Xi3ZHtBRIq(js$?emSIgxq_V6 z)5~L1#MsNazLtT@QA+~i7s{F5VBJmkU>lVIoCv#3LL?iAEN4oFotaOW-QV&hx4Cu! zisL47aHf@*G)b;V2B4hRC8oU0WSl{%NV#N&ar0MiPAe+bICaS94#%M*yBt^9LM!;m z3@$0mFckWr~a9Yre%o*iPBUt=e@7r8bDw4cZQKuZhU;vl>v`muv!QF zbe%BfIaP`b9cF1wiStJi@^6W~frQ9|Md--GquBcKe48de<&KJZy|oMQYA<#du>Vm4 zq?bJC4CXK_G4hLlq!UXh6tcB z@Ag8_EVq1ry;;>*{8|?-+6yeyP-Dya3^((eke0jCL9K}H*xiaEWP05@f4Cn9G1Om$ z<#%0~?V=Wo5<5AFmT92?28^{-t7o)`?w8-Q#TF2;sOBR+s%P^sZ8;|f$ZhXJA)(!c zDwWv#*VSbbV$TgXcdqKbMP#2-Ke+7le!wlGUG{>IUG{s*zzA|Ehkq@iV#47j}fdxHE5v7A=zzfpsp{pPlLV5Mqtcd%=}Ce`mw zmKZ$+TdY2I85Vz8?A0998+TPR`qC1v1Vzv7Xb63D%x3HK^0{zK!AlZw$6UqAarabJ z!#sFI-AvA}Ud3(-V-^0<_^}b53R0$#GOP}rXC#f)BOSI~p2JcXEOEc_vK+UCDbEXX zPChFW>v)|Y!-2Yl))#Y*VibL8Te5IWamZVrWOouG9AwwLqtc*|PcfarD}$mP0(-Z^ zdTg!Y*cR&EB2lz7OP-UjKihAb;644n9zM5t4e0LBUcyFjo^vmrLZKTdbJd@<CP*1~Z}&0s{>jt*m0`nlvs%(>@RJ z#AkFU;%2W7j$@C>Hda(e#wH^W^6UX@_x*TT?-?Jns@Jytv+a z-uYQXp}(*a8!dj#US)B^XM`$9qrLVcS8%gvLm^bmYKYzb2(S&V()hT;CJ2^hJVg$3 zMBDBBQ(w_$*N*A9fJwqQ#5>cPF+9i@0(Fo&XA%HesLCHY z$k3pAV@XAT9iiA!4*31PtcXL=?(AF+=3mT20A5g;nb)+hBuR~7ARMV4>%aT z-(@`SIF>sx3vu#TVvYF{W0}9R13G zxWTGt0tiOl*S$&mKpj~($06eRuUY6%`q%`dm71K-KqV9@rAk+lRMcp~PhHkzc~E0{ zn`4~Vz)M}b#QHA78Z9(*MonL5tAui?45oGCZBg|pxb(akU^NvLxrrs}YIMqenqXmz zlHEm(fjb1z#V{1X$(H}qAZ2M=@(tK1#t&&XO3T4_OV0U#L2ZfsGogCCUFGd>2u2^3 zh>i2HrNwZ!lwOf;zA|`jVQef24fxK}Zu<9k(eEGLkDt`~0Vue5XI!XJizx4t=#;pG z!zv`o*b9zZ;DO2ti_Dq3OZacb+1~J)cv{3;&9=P6`MRN9X$NF{YU(6yd3&FcDVjiHiCr?u|l@Kk=?&ci3}O1dc!wjG77DMZ>Fd( z>tko{i@A5|l~Q?E+xj~wqqT73_m0otZsSd-PoC4b+SabP&XxnP@y4s$wmAbAV8IU| z#@f5K;9&#+ksA|=iY=2G5(R$!MdFiAc;7rq$-rwbU zywFeCl(g+Rzg7`OPB|;w6DsW4d!3z-$b;qxmj>^$#0yx>AS3`l+IwK^yT&? zK-w8=JE1T|)@X+rbCVihXDeIYy)@~Yzw5t{Pjwqi_}Ofdw&s?V5Rre&sfE96`kq&j zc2aF4r%eK9cS$<%&va`w;1j9#t;$5zyI%%%a;Hc+|4|BkyRD9izg}dc4`13pXw$Ad zw6A$6x~6_GD=Io(FFL*RuRN&yvm1bWck$TEA}TdKAeADm0SKIy$#To*{ePvZ*Tp4d8DP7u9e$UAnbA|IUoQ!SY<+;7Jbzkhurn4x@#ayqd{zuN#++VX3-2dZ2|Rs)6vH!2SdD7w5FNk?Id95Rpbz*@T*2)os$*H^c7u!bIS2Q`;R=5K|hBm8~0|V}G zx|koE5gLuoeej@*^YqC2-UDgVv=?Aq(;&UHO@TM}ohcF}nRer0D@e6@8oEp2t~J=7 zIH_@6WsBo^C};(%d|t4Z&emGnD4p7J;vAECG3(ObY7BInrKr^RTMs<2SN zTUcol0`DbFD7!uy^}3(QhwdDN6SqF~q|K;O(}2`;L3T z@=wq)&L*)FI%bhlInRcqEy@&@Ve1B6ZsHKXIwdg+D6GgJk-wrL_1&S`1@n2^aUk&1 z)src$3G$i&7mXyg`-YAwXt9zsE?t-oqU!te6($)A+dQ?DILeMDjI;rtn1o+QyK8z4 zqhapA!tEU^-!+u9(pYO}ZqbV=7*obN7}!`uZP;KRwgbW}J^qqR#gXZin!|yaqMG=I zN0Zu&lc|hhIpx^lq9s|CEY9M^^*$=KNIPcqrlhAOh55ETQXJfz*0iP3XT5KXYo_U^ ziPZfE2O`#5-c!bbYj}qlye9527832Mk78{{gU&w%H9CdFAkbEJu#pGl()bVV)CNLg z)|_9(L9g3GvlT}K`4&sG5nX({VR{46EsjJAL?F*ZVc zxr2+A(V+E!gjK*=WiF~AQY@mg%%UQFzKUt&&eP}7(Levo?qp2qcV05=2-C$wKWy(y zIqj!jvZTr`m*1b;sPeCuC;gRZXmbRkHOT>ZN~T3OAG9lfu6q?VcATemJvRJ(j6wdn zV@Tj?P=VN4`qJJzzSq(Ig$iq4^FgM$&&{;mced%Cs2(hODpjbL5E#W&jlFBY3vZ+t z8)9g8>(NJ+escR?it2Ufzw2X{7?g8FeR3)7bVJU6Ds5YH8$q&r(v_UnpLinYv0iCp z^NG9Nav2{aX4dHju{drP({lWIDkc4mjYWJ&3hh3yfCB_8s(TY*OkpIgT|Tl5*{93t z)yl~@kvB*0!SQsec+Z=tKryJ!yE6(l;ghjBL0Fl+*GF@_^~$s) zPcGInhP+jFKSp`Z$S==u=!t-xsHI65&>!jUz>UJe`UEc2ahp>pnt7vtkq^N_^T&zG zVpJ5Ei;xg)98}O1J~RmSJ4TPtWsAoa6+bcsO0=m>25-`0ly&)*|_LHF6S+uFD1KY+WC?a%PDpNZ$ij~c4?!xdp_caQkrc75#F zjcf^{9)8&^Ol9|6Sh_*MVz&uZ-m8_eX<>Qk*E$9b!d{o_^KD~vUP9;#qTe~!d?|c6 z^8OXc>D%$Gb+|1Zi=~lWaw{97dTQB(3&_i{bg^e!lc9slgW)~=F!8cCzuM>&4}0ER zo-wsEnAIy_`p$}$9CXOj(@Ge!g2>)yx=I{A@hblZpf@l(QK|E%(=ozcR|Xec?g*(w zl}TVlVAAy`rB@YW2sM)WyeF-t<;k00Xp~Ehu~F1dF3~Hg9~^7s3SxMbq4$l}Se1N1=S+cL?Ea@qj9F?Z-N~{)ixDdf*zd9pYA;?DT+5>QAov$)AH5(! z3%tE}P5=6VL$KH;#j-=s8G}sn!Y!nXdau%E0EVr}q`ikp+=Q;W5cJc|k}Br<(~9V9 zx)ZxsZ~6hXkHF!qd3rXvatZlg`i2f|6|!o{aI~64o|Aqfv-yfx8F@a*wfdp*y9KZY z%dReZCXbp_&MT?uJQE`E@h@ywhl9x-zD6`y&FD9w_%MlCn)|~DY0c&m;0z0uSE(WA zeN=nm(!`K9`#*fv=`TtUuZ;ojz{?-F!V6A*zu7{f@U-b;==W-jY&vfOLs_pv5=3FO zjb(hmikC+EWgnGW`}`q|>Et)c3HhJ6IhmObxf-1oqmh;A2BZySUh)2+uWyDR6-)w3<^AmQQKb7sb?VtQ|S+GRgQzhweH_$T%$A287qW z(`%-R;ZawHfz_ApyIn4(;O`zv-GD-_sGKjADUs>x{-q3iSg<$M&Waa4`Z>XRgIa?Q zv5`n%`Q~C=J_Pr7Lvai?*pzIrM-jwz&?E5O9M23G+2pT$#vZvrlM97NZ?{j}(J+I+ z_!()2_)(eC7`zdVmLU6_QSUvYW_kmvC&?s$heeng{%Od~c6+Db?kOhg|0 zT)Hw~HQ>YEyn6Y?T2)BzT*xV&T@&Q*>kg&HxY74{2Nvsv-PbEir(|Q39nW@Mw)Z!M zX}_tR%sy755Le0Wg))7kVfb*w4n1TWfl*C)9n4j`h1J6KWnmS=kFWD!SckoVXJ-_G z!#2vAu_I0Dq2m>o;vcE8VgS1=@ZRgiBjB<5l#-yPD84zwM7^+4`}i5aweMD&?Op$p z{aaF=u0T%Adga&m(IWPw?B^l`=z9ZMjXPXF@Ce+n-(VxJKP44ZvW%wsDb`3>)PDcV zRhwTo!+T-6kjQ23dvakiBR3M-{~_DgTCdfbN#K+%#m(V|%D3`g%!dY-zi|IP&@^0x zY6t$+{afmT~&m2q%kor$--jki|?YJbl3anvO5NGmGDA%VOQrw3PHCjJ@f5UJK0Do z+9iGJjOa}3u&Ja4*l?n_LZkExJ&k$;LHm$Kwx0D6sJVh_7Wyyz5z%5=B$i)Ya=>=Cz9&(5?7#>Y_iKs4?3NG%DR0YjS3|Jn|iY zjDN(;m-%ng0sgndo^Xdmgcdc4-uJ6YfMgEW`I=QgyZL`y>>bTmDzkBODMo>*j z+@GkLkfm8L7|0hTUYeGh=^0KLkLM@6CLO}k>3wc!zxnb_yZkZs;P(ahMq1%4Ry|%C z`GM-U%EB)tKYj{LL#kAmzgQa#XLqudc{h*hFCYGR@^x4v@}&$L1W=}UD1Hd?sjX!& zqRDB3oRkts1b)Dk72NqNm>z~WwVjZM{VYZ6FjAi~jB|}Su8sM)q4#|$bJQ%jo?3{w zhhT4G;h1_F-j03R_ADew)+p^Pz^8BGE=oW(y-D6?EZzOvZ5cCR8DyETcIrOJ)1tZq0MAJT0DQ^_ zN*jXc?P9W~FAewJVZVP? z#Os|AhOID3Nn(_A&K! z^Oa@f60KOCmwmcU3@2Zc$0`57kzZa(KHiy=p{QV!9GB*GxUK>vo>G?zQDuBPl52?G z79jhMW`IZ1XcPy-YpX$98sz^Vm1l?QPPEfeH6Bg(CZ(R$tGzsvvtM^~vhg-*rp*w` z#@yAjrf!FAXp6E1?LczzdKh??~6u{v7N)aW86?XLjTMsVfFc<)^BB>|MdpH zM?R1JMVmyic2E1BRd-A{oa^j$17Dpb6`=<4p)hJ>L$81q710d?L&tuxIku0wa_Z`hQ8SAM`DX6#n$B1kph} zw{q8BpGr{azC~|aNZ;R*>~iG)l9iNnXO^lhs$jzx=Vl&Yvrn?^QvC}-i6B>9+f47S z1570ei;RO>3kE!FzuN18YiNHkJ+!@=4|`%N#9NtmCC&tV4f`&}voQ?K009Aa&nbCdC3%@i_JPaQWdw?Q`; zJ{HSftNpJk{V!<4Hsuc<78m*-|2=yhtMIQ?iR;QdeoT9=Yb*W_pc2YI8}M8Z*ezFc z@)UFy@~|`A72?;cSheKVSFtO=zh3Tx1r-c+|9)t8D@;quoBUpGX9AiLRUr` zin2B&)x;hY+qdpt-Nx%&Fx?*?4Z1!)t~6e%bGuco>q7rTUEMCO*Q_GA@2=4-xQbZJeabBM`;;2#&z*U8CTC0P=&goo zYj`0|Qdxg2UX{;#2CvTPtCHKSj_AR(?6 z;oKE3M%_G`EdG~Bp{J4O8}@LuB@8Iid`vC)^_1qZcB3YVHK_5e^Me8 z6?$sE%*j>S#C%M~u##_nvOB!*39Qd0KWege$F$f}YHP(9x?$;=rhGcQeX25T6_1(? zFyvZEX|b8r%*P}1Yo1($RXXek)&`&>j)SxR1H5*o#i#f_wR*m{I>;)seD*JpU&@R~{k{-tBTIZnj zM_H<#&;VnPzHXO4=6f}3>ZB8{NHkfAy);fiwuo-sk1gYu_x^|gYIh|U?|bEru?}M_ zs+_v{UBU{$8ix1|n_6eLn;$*KC#k_4lcf!HH8YBQdt4; zQIRq_Gjk^^F~piTluOOJee^EoXErwZM4nJ>fsG)x1!EGK4WtR9KHme0P#nVT@mQQy zcXZgU_=(N15SH3GP1n}~d&;BdtS!SI5jNt%&1O!I*b-Ri>GC!$(O042ia=X2CEMtz z^JM<#)yfx`!fHl|qn8^E%o$isbh;0D@n)wux(Jk<`+S4Z_H=aqnHkzEoi9)0uS@Fx zlxeVW%}`h2e>Y0E)fr?W)ps)PQFQ#LwuRs?_3L3y?7t`J6hb-q@T8&Uafh|ftEMFifl-f= zzPZ;CA!OjJ@>*xG3$4)K~)pq26CL-^CKiJc)bj0m{8DjHye6_w`WRu9i0?`6rMa<<1m0NnH2vp9j*e*KMyS zW|iCgSlR4zob!{MT{&3(RA*^!hQ8FVLlk1%F`d}xD?`wmY8XIW7DjH%NWEZSicy{Q z{O7=_BSH5pX#vWykNL0utAI)DK0KFU#o3!xP+8I0P*s*mkBBN^xOK(^K#mit7u zMe0=8H#&)kH?>oW?buep2BSN(nZTcF@c^Sg_poyErtQA|@!=t^x*Ih8#CPq55++g0 zX~JWMt|f*u%+++_^wOxFYcdH^^selWlH{09sxjx;xM|-bW@<>GldtCpqCC?%bqRLV zJ7U1{{bI`o!;?cXooR8C4UAm0ubs8Q<$nmXCGuceaIkzUwpOE%(Xlhc7*J=|*DPa<^2bdgRhvL5W3q`Xg?r1i{E&P_jn~$_|_EIPt<1nGUav$sF zAV|H=71La+i>esP%#`UT?G)i9m%%hH5Xt>TDKvK6FO)_lZ&ez6XL%ta!X}Pi&1Ym$ z7RGqfQw#kRKu;>XA$$XL`7~ifDq!iB!#H+GircyPb(UB$-E_=Yslm?r7V-e<`5kHfA{jPOdE zFS)`wN=t^_7?RpCo*c3*gM(g9lqyQ@l$C^j^8!D1%P_~JS(#D)X6mX8@ttTe4zTkF zc(HskB_L-*6-tu$ubz(rYuYs{&wR+_aXG7&^^|?x%FMH6;Lf7{*AL-!ZJVBgTy^g9 zUlgEXTdjj2tzTrDlVQYP^V!ahY?{B8a71VY9y>f#Hv3e0{1hJA-`MkfUbb0_XtNn3 z|4Kx1@4w6?eO2^pu2D$ZEM2O3gFCB2Fr*4(8qL78Dk#JstI-eyztseZx3$ z1WL@N+a^c=u+(Yv>l;O8x*~>)sX*?IuD7g1yeEC-#eR@F5H*F}*z10dJXjGO%m~q4 zDXoF7r-hL(w(WmbN9z9%g=!V!>+}1_E zhZH?Qk#>Ll*TyY!vts^Ni+j>3UX-2t4=Tn}eD}E(72|2yMR`l8MxN+&?yHNw%?H@k z?bGpphRDcqJzgbciv*pY{X?aAAWnA;|4hnn>l?c?(g=CGJ)WEbr~IxbP*9#!pshIw z$g5<}_VsX=aFabh@LAh_NdQ`6VP8}b70rI+)g&Af>MCFx!%)VdNbv{1CE2%E^upWEP`|(mbe2=_|G)oT} z{i?6b4qdIm=@y2^-$nzIky7V&Q2UMhWrr;&KEd`$PH zD(L34@N=ogzIp_DB06|4O!v+V(;_eyL(|1Dm{A0+%^9KA9>MJCDUWRPO)PPlXg^EQ zw^e~+MQ%k2$U#Do8BXuDm|I31#w&Ho9t_J}h;%q&? zI|l}dbE;w4^&@n4eMsUQ!;oK`bGK4b8M|FQKfz2Pi~bt;zLcV}*GEvZ$wOq4{YlFq z7u-ptQdDZ~3(39$0=f9JO|+a|wVv9qi%R`#y)}dC92ukcr(3#U6zh5 z9`T;PsTO3UQd1V!p7-TRk_A#wXkR)bdktprJ7&aRS=y%h&VQiF?esd?UX0+QZplJ| zE|6#^iCsEd0#$sg>c%+EjUq0Cv;|Je5?CSl(Uu}4f&WgfV<%GqCZp}ILDzbq7}>&Z z{MVmgtAY9po5L2xj&{*lV9pKG!M{jQqG`JSvDZl;aUPiLGBT;(!%pi3vyUmQ-vg+= z&7$a_ITJRL&jcT_5JWWYQ=iYDre97rF};j|zDkTSQSn297flq0Z)diqc}HL4%_F4D z*QAW($6Xd(eM>8nd`x7?)(*WUad*K~PUdwaus2~MRKDfNdk1L3(Qtdtp)v9f zX=;n#`qp6bYs{8MFz*ohn%`L5#LKn%k}s{yf5N_Hz@$E_E$NP(Mwy`%?DELNU83hp zv&=AwyU_t53WK#?-t8KBiAsT^gwp=sJ-@pld*)rPuxBs_{yfQrNftuOhmqjh&g6vC)m~=Q;Oza&kzOe_>u)i>2(4r3 z!s`8fdauJsm!>qY2_MDD!{-!OIN`HYpT*Jp6v`Pn`z7Rh9eCqrHQKf11MY4}o?Xai zv2f=KuYi@jUd) zMdQ0871SkIeGA^A2pqzKNH**89PCe+by=M&PSL!P9jVmcS!f?Nk#hGj-HK8XbsRG@ zULO*#g@4iL+9$WgKAy_wivRJxL2*ZhNp@xUWZQ6WSleVWHA5FZ8e>eY`#7roM)Y)^ z*sJ#KbVxr~a4m93AzDg_|!*7_hL16S6hXjQNo@xJ$lLpVTi<^5QosnAuo^ zoMEgPXpP~gdbDliSnu<~$pOro(&CUgZS;gLqSha4<*!{F0)mnRC-X}pSFpm-*3>H` z8AN)$x4#>a=ehzsoOibdkJNdM?XQ@>$p1mR{IKLQ@W!j9n!Gf;6TUFHA27i~_E~}S z#kSZF8|yQykct8$5EnEv1FKWmJX|uu8|Vc2F=qCPNjH>NIYL%Rn|8RU{t(RTYv5V# zfWP48e0>kAv-0*od5ydKj+DleZGs3Oa+lS%vjsDA=Bp)&u6)yO4Ot8c`TRAOcdVDW zi>vOf_sf-u{Te@!#xk?QHF7TtdzFzyUl5-E>zdMA3u4=(7CZ7>>E0=q07GqxOai{WteZZ z^t4=`X9qczn$78ye8QOS)TlK<9cD^7DO9?r!ul~x#kV#jL*^+ z(OyCIMkD!MnXm5Llkxn#-Od(Hv5E?|mj*5ZezGM5h0@g{XRmXWWc94=Tb<>Za%Q|6 zD%8OTxLx2u^jE`bzyz$w@14C6mfW3@N`*|)C|e4GlM+2)>V?q9;U%HbJmDK2KdeZ3Xm7gvj*hADqFUE?llz>2+(VBNvdJY_O`xZ^tIa){lvx>t zHc&QyVNsXOCsbJc(gctYn{Wx9yj*Em57|TTiD+)R8}nyP+WXkOsYd@*=l91Y$}Tl? zEp4QQLl(iIRqLi$UDoE)*Q>rYWx&vuGp#y^OYp_0?T`NWjFZP^Q8c9C_O9vk(XmtYn^5>Dg56!WS-8Iqdl z7xnRLI-_z=AjQaBRlpWg2LvA!pcUrA<;@*jz6-1!4o73kl!tRL429Td191!Ep}d?8 z!crgmN^cE5*~#=Vm5d!h0?X1GEMDnXC5Ex?Iy=73W;MInUA@BvOH0Xf@V3uij0=!j z_il-NuerW{1rI;mq%R%PdmU-YWIO@pG;}I$h;Tj{39Dj`8`(mfoS9jE_;nq>7D5<` z==zee4LUi#GTZExPvVx6MTALqdGNXORm}ctLfjd!AH!h2@V55@Nfn`EaL~_OF9()}-wR+RD;h5lX(y1Iy5ok%VIF}U|-zqIzG2-uk zL}49gHVH3fT_eEr#f5B2gFwa$yB2}1R&TwaMoc66yEenkJrcvNW5?;QBU^XqhQoHP)^^U4MZtE)=djo*3F4sD!RW z3>A2gOXx&OSb>O-_r#-lTpKd-F&9^l>>MZ6uC#uiG1&bFpu91?c*JQ>_Fr?w{oAlG zf!*c1T^aHpU_o?sVe#mJckX!hXkU5l{~WgYzkQd|^bL*)vWb!oXWV~d&A;cD`{$cx z`_b!`6xM7CPLSP2@lRXvuE&}&ftJ9ePrrJu&Hpj)-Xpv$ni9R*#NGfpJ6r27CF^~Q z`oQcfq}U7Ri#%s~Pe#&(kCr(z@4=g#=D^J}ifXY6t@Dqp8jH2fWyIDg5M|1%e~z~!m#Cn8huJ5ygv=U z3j2a_DozM{J)!n}toTZbPIzZtiXqWRXp7S!7!lsXH64{qAn=>R8#5ToKYp#k^{wPb zk%R%p9V)CZxuoboXPm^KAoWJ6n2a?OVEb)k4O3G#mw=wDy%Yz?!Cm_00j(IuI%kuRV(tya!!FKPbx?o$GxVHTi~d| z*8cF@Yws?W51X;vLz6rHbA#_pUV|z#<$`fRrV+C3lvI9=y4~QH_8Ut~cTe!J%Y0>R z8`h64E4_&C*dTk?DBAl9x64A!(010pqgY?;$Bt=xk2}!1?cM$#(%ventuOxe4PM+` zio1KU;uMz>+)A(_!J)VnC&e8K6c6qatZ0zp9^6{AXrV=ZH|N~9d+)=!a1*qac*qNG(} zK$VQ0vq03X7v3ZAdBhmW(cu#Pvl5 z);EFis2YIu$E7X1c z8+km)rrt<^9e=S%z=w=!<*N{>T<1^q_6-lB=+)Nx?MY>0dD!GJFbeh=zYh3bVq`lQ z#k8tX_}-m{<)3OhyH^cUF{;%Te%mPziLd0nlUjz=<~9kZ5=)R_a6-c}V~lM${OZru8elaDc8 zggZeRBZxH=f0E&g?zf*)%cr^8bw`?;-R^VlD0!m?5WQ`D)^T7m^p68jN{@Z!`ax*< zYFm*fWR;G08{1Rp%c@o}hzda>44{u^yIZSfe0v14V0rU{Vi>x=Ve#ReRJ#FcyJ|~A zWYrFf?`V;~*C@m6uhB&FRcJ|#9Pb~W+3Wl}@9Nlv{{X`wzOc zfbHo|Meh-{fmVZ8$)&nnzy7CHR`lyv5%Wj1UQs(Xp|;54FTb~IFZ;h6jb?M3QIsw( zM9xC97pH%;-B{f_NUQ*_>V2@{7{shZwzg}1{>b`&u*U_o`eHHmZef+peYG}DY@-`W znrmBpk;dV@LTwdERPm5?eG<#iIuvUN5LBW`=_1+AwIIx3*;8qwj}K=$8Jm^j~=RqZ&% zb$8&Fnr)%Tz1Jf(J`t0Jwvoy2x4lcfpDR7f(ov_$hvCSRuJ)2|6C@`M2~*cg9Id!a;7NEXFx*J zr7Nj;+H{WgCNvXJ^WxsRGmsqGswA>H8=m-{fEmAXyLt%586*{RaxgV(IDuOMm;2-f z8kkB|a?4BNddX8ubzfB9R%gyV4=#P0Rs#ZYT$~!s2O8pXTTm^pYTV(wF|$CbJoaBq zGNT2ynxDv1HY=X&p!puJBw%{@r(%byFy}hA4T=*NAXdax8>%BCY6;SFE(*kc+D~{O zVTm7LFI?h0u<5)k2*0pCVSS zrYM4{8{q*k+Af7yzuK4IW1loCxnWRIm@QSk=A4HPu>S_yXm3qxtSi*qBH4Iyx09;D zp}hlghl+aYx11cdFs5SM|aluk{_31|)d;_0lxGL^fbJSpq%bYGk7w zqffMBzw<_W+brs7as)w5_(6%K4Du9oJx3n#_G%VRwK^3WMXo*s8H#V7LE;W|3aY`z zDUyn<-bh2;b|@igI|A>U5nQL1Ej*X zeqh-C_9QY)TQvOy-uM2+cNY}k&THfV<0veW5Hd~Q58|y|-pmfwYd}RKzDpG8_jyLp z(YhahC6`^tGYNHR2bLo4O<+mEKD2EOeNz4sm9T!dM3~kL#eV>%@WbDso)ii9^z95+ zJ~dF*%l+E@WANx!QOs$Z|5d+OPWA6c3RZ4^q(6Iga(fTQUAHPNEavxq4-(UptbR#- z?N8r1o|(_iyV@jD#a$oL_Gd7Chw$@F@A6vv-bed>aJ^3E9HMFF%n?3SUTw?+2~;g5 zF-Eg+Gyn>E%H42it^#?!so?olj;HNU2kjEZydWRXpG54>il74CT zSraVb*t_#0n{cqfODnD7Ek%7-;MbE|9*DF&aVp@#Y|uU#07{HZB(RU}n$KOmH^~5% zq-=VB257isRC_qAtjVj4J^n%TQq(!9ugR-Ex-PVl+2MR7))Q+i?eO(RGtbNJb*8#N zi7b=^qa4T5D|E+yV|12hlLrC>IpQvR#WLt3^-^JFHQDI2Qa5STz=(-=jKbmmuCRvs z>~_=QZXQ?QTwVuh=jq>f90ge?c1HF#=BmB8x3hHcx=?td60xH)0%(E%dN@El6(dug zYC0)asj<;OM#AOEc8e!wHG>kp`jxt|_Q2V?7`JM%j{IZJp|HZ9_ZC()^*Vm_V2+uP6xmMP759 zsC)y&u$gAsd|JP6_pu}~zVKa=LXPqN!9c2AKAx+`A^)CgcqitMY(?x3fkJZ;G#k?i z8C&(ykc!RKXjJ}*^Y=Th8x{tl6ENA@k6GUpxnj<%;WcQ(ry~5`t~?SB{OzS1KpySBt3U1Tkpv5z^(H_ruISyHD;w<*9h&vrsKbhHS8N|lrRXJjP*)~fj^^)y$Z(Do$N>y(@HXCzxfv3T=T*AiSf!x zMpBbKhK3IKC6XN8%fHv)r#lGP>p$NWIa%pos~6WP6E7cU%l9S@LX(HtplDQY-6FIh=_j#a+oaK{9c&i${=wX=8K?~=K8#fqGLqwiK6kAheO}3(B z!S0RdARkIi^~!dma#ZC@=I%I75pyGq#g2CzIyYm&qCp)CU9x!hsPL?atP&|syE=zw zYL#lQ(dRmGLwYqRFDv7$sq6YMfV7lmnFeHlF0#zS-S5$-Klw5s9;p}nidlDR*t4A7 zdOQi<%OHO|zn4?VhS*os)CEBikS46^?=ViR-Q&gUbiZ@am#t8q=%s`+I8mR61pa}E zuEsujHRi+A+GMtyzQ(iQV(sb@rsybQB%i}$-)5V^+hT0`KftH`m!bR0VgGQqdki9% z5LALaRfsp@kMYXfrp!h#vgHtbgL$$2Q`-K{2Hra%cC{YdFzQ|jvqENWW66sSNz+>V z3&%lf2ca@{?`OQieIJd~E7qPQvLV;z9emjbavXf?_nTQdo2!?+#R&@q`L}DxwC#M` zn*foKT&$0mxvx-Qp@)yb-D}@AOjR~hL~ znOQ2V72@dp(pv}}Df@ohcKhXu!=nlP*W${>p8KP(aO7WCs;rv!l}u>beSMoSVj={G z`Td>+h^=OWya`8+*a}DmlpYDY>H9C_R;}COI@da9U2L!!*doNFLXiooK>yy=KiTx} z9t-{=Z7~0{YyV!ej3B$mQi~AsAD}>**|_N@|VDsz7}lIgE@n>U6_ z8}Z~N)6&b#%!f2+{B-%gDHhnDAl<&66mHPiVuSyV?$mVQ^w-(##TNuM_bdHxX=O$O zy7=n790n)rGu>H(wxYvov*=YqMGEPhLFC#S(b#lPcvBC8fa* zEk_A48~W;aRoYVf-`;M>l#jmc${e*Eaxt|DRJ>g}orz0dh~lEU207pyX8ck|*p6)V z4CiJlC1pX|xE0o_ZrBL_sRo7GBJ!PZe#KSHWi&MqS4ojDPDqeIciTW8O!Vs6b3Brm zFR(h_g|v$@-`0K1*6q=nMx|ancn_>-|9ox@uuoTPF#o8eM-wiU23Y4Zdl}rVcSOD5=utX~jfyFOR>p^viqes_aTfmlRVt&K!YGqEZNVI^H9Q z0nzw9F0)WJeIxO8EN65p^c63o6 zLp*xXS#8A{O+s=#(-N-uncFCG&%o)TUr$bW?*_|W>g5_8N`8-;3Ykw$&6Kzbe!peJ{(a5cV|QzhN2E40aRw^3?R)6_yq2O( z8YhRg^G@(Aw*L-_$?slExo*Htb0I4O%8FuiuPRJa7mT(ra1DC+x$rv2Kf>8#Nbkl zX*D;#0tpxUH?7mY{mhYdfEW$Vtx!Vvy`@f#mKb|V+;JEDX;ob#Yu+)l-NL@fk@<1k zcDVob^+T#|*V=s)HzB*s>CmWSdH26R<}V13tdGGwv%w-kAuC?H|AgfzN0QbI{tB(J zeIgyL4|v&gbS+$aP3|k>Su-wG3h7L-n~JTw|MoDme}tc&bpd6i8JqdVj4{6 zVg7)VPT?Gq`tb+6V6hQ;XZ&>hCfIe~94jh1>+Ythzq>E+4Kx;!sbOa*{qE05CS22f z%Cvp`8p|CwZ)(PkIJiX3kCyMjW^>zo=jQ7YPdjQM zc7^YYg8zuU53Lnj|NlWf|DUVzZW2xCB?1d)k;*YN%Wv{UlAM2T64`^vmPIZAFf zA5Q*`X(G8k+J7IZxi(Dc2)>1^w0GqMAD#0oJ~_VU!*>UM7}Lq@qtI!Itvy`57_Fiz zwkIn=*%HWE(R0+y&wbw`NUN9%@=$pc7*aQ=)ln>4UZ}=!>e%w_5~UVvj^S0wvyp=K zsO{#(rIr25gL6Q@jc@Ti|EU^P(lV}TccOGME&p|*1wQUg@FJ9)k@9G2PZ5LhA8N*G zZYVw~bO3cAkM0*TSgT(OTSFP-KkZA44%^^N%t?XT5}26&xpuf=6<#_aq^?{2%W914 z4(Pz06#yEwsYUBZQGsVg~9s` z4&Z_TE@k%O9a#5Nbyc$sRr2Ww_tJF4oTDr!P7EVW!d(_X<}h|c!voE415qjo;W*)9 zX8#_vZA{1js00aID+yQZ56;Tb^1=C0Tqg)M4HkI9K2?;mb|>70CbaNhY*F46qMFiC z8$mt5YIU@)xilFu|2fTyJMHjV1VrzrGqC*5E$j-Pb(H;E713kT=e(u7s->+>pK7qr z#Jkl)_L+7_S1sc$9dIsl zu#$YQO$|oTgJNlw@gzv=Z1L>LMY_MX<^Pf4q#yns7An&B%Sqv=SZf@E@3|l@9QtS@ zLWJv#6yA@;rX72LsKTALK#g#}+ut$~dzd|kU6CFQ)+&v9upa=f;I>`%(-O+z_so52 zw74}Nk1J6fTNEo|t=9A!e5sJCAwIBI^pPr}h7-%QJ9hMD8eq5h4k zCb8O1P(i$+?fp^06NDF*L*H$>@HI_)b237c=0m}5uY71uN`8AU14;q`+g zrwD{vKFI|1SRRG}oM=fb7nnPn!fQv~YO%E?=vU;=UeDhPyz#f%o_|3_sES&cVKSL! zn)rfkjO~x_ezJQ*y{un!4inI_J12{!{W@g=^^S|vKd-2hTYSN}*jf|BCy%&XP6&gU z+WpNud^;}NbrI%r?{3#Eb;yaiq0#|anzC^E71|6<16@YAoeqOx1rxA4j4a1nu_U+_!?*m!F{LEiqm!308 z-f~#d^}1g!QbKF|@g^kaQOXiZBx&gCUgc*6?6QSNRxN;wC3as5QOI*ky$+ljh_430+ zXYD?^)kz@T*wifZpwiShbAF|udYw7jnQQ{m07QfX)tpXV9vg3s-MCT$GPR?%wZY7l zbHtNWh2l-XQ+J|TGilv!+4+~;^^Mow#e(p9kSSKj06OmQ@2f;M#Fx8l@_)F0?mc?P z2K`Jk*4x>yAkgsQBlfDiNv3p*8d~N2{ zEfsBJ$6_mx+nU)rXA}N#5@-N%x&FS)zau^9nqKQG)LiX^pTS4Xam7O_=&R_}rAj$R zOh#-mnt0E$JSkN+3YRQq=_wf8a1=o2T^7xA&F#LKs$T8dtHzn0w1L!6+t1x9Rd}`S z_}rVfzoD`chJ&T(n3fV?8zpD>U~)8r)ZekPHuiXMsvWI;@ld|m3lpRLtDhh2)o{wt ze%TrSutT{b0Yy80Bw`3?coLwB5)+Vg)zAK%4`DtTixY8pk?S9zx6WZQ=Ow9C8L0Gf1L#{LfHlJK@~ zLWjR*8oBE+)cRMsbDlrLg+yz|Jce;N0Yc(#$vCsak0Yb=%h-!J%o%i<=H@fUB8VMm zy%AaXEJ{1%37br{MWAX6~)i(#I}jwF-dtf3CY5*BA3uE52WT;O&ZQ;pC-s`;60$zqP5e z{1`Bvsd;Fz(=?aTA|hU>Cg1J3OA@GA9qTdL<#Z6TsDUsL*hRk;?r2t&h z6IxNHj7si&`^fIimj|WZ9Je(Q7g6yc<1rvC`m7$s406qyw7OV^!xT;!P&;Xs`H=0o zlga$fxRCyLO*SjGttFL&Xe6d@uC#LaV#IN3Qpt%!69Q`=LO}jvI->T+bCDEox%h5u zoeN%Fe8SE6ZO|%eY{$}yEHwuIY0U;WRm&|>nJ3$~{5G!WmiT(a_%6Ppi&!_A1%wh= z%#)gx1G7prUVNL;ZJPG0oepwQ&HGM!&Dv6-4*LDm@zALDf^OqPE^cLqJyGHJWk@ub zLM?flcVvPSO6qdHPL)Nqcnm5^B{lk~Y)Xghgf6RcY%3{#V)fXwYr!Rkcz&zDquF0)kMus;ECFe(4Pjt|G4s+c z)pS28b0>bfRQfr{AU?B;1arD!iu*3fqhO>r<>PE73w;ZJqMZq=OK6y>tVNF&I_fKm z*cX{ETPX)y^J+Dd6XcGHnBtbiCMo-6=X8L29N$vb9)l83AyB;PS&q7NMkFd{i}RLs zaA4PUnKQL&NEHgY`=3>3rGz%D_ZAph``SPPLHex)5loh~Ve>lAeQ8b7k$2boq%x0Y zAII}uEq3f$wN2GeXkDCktGY|YL?8rUtZBbk*aQDPrlK*smMfxQ>ky2N@(>*Qcjo*) zFfiYp9XZlZ{27L}DQCT&a~3;(^}LGpTv@c$vU!4pes&wdMI3G68P*~mpJ z@?m77c;S614$Z@Kzs~VO@A9aBSo6cm)=Vm9=|QM)m3J^w0RPB0oc-s27cwS1DHY_t z5VAnKk=laJRMnowI%NLth{M1ioS)@c#1_iI4LXClz8T^?dz|WQK5fg?)iVfo3pf_A zGVfk{LD)NZTsQb5j;7Bq-ZC6mIcmHSC$3r-y_x@H{%5?>pWvs1S<1sP?uDNF2R#gE z9#E`2y&6ey6-WX3jLmOv9KyDPz|-f&F2%EkQ&TfO<|0Rtun9RuYtlA3e%_j7O?w8k z&s}2#Zx@fk4U2u@ZmZRPcXoL4TlhZECC!=G!@u7si9qR0Q<{u&M;0Jmum1qrhR@k$ zmK*GEJ4A2}1CeEi#dscgW%Q-m=SquXnb%o5$Y2MhKzms7W9dfd>iL&m^x{4_nbXnW zpS_4LbwO4u$kyIpKY^?Nr$(Xw?{!KZf>K-OK7umHmWDq=o##PcH!go9vcG+rkk7KP zD9=rv*p`lOykEocVEuF|_j~pC^lP4FL}IM;-nEb>Wh=mEB^KpS`q^nr`?!gm$EZ%8 zmYX-Pd*h9+gm;tKio*Lz;K|B4tiRb_4O`|M=VH#eq}*|t(84_LTmjD| ztLoJ$f2Fkh4}eDXgN9Kd2qI{eCCh3pj=L*j#FJDF>H%x_+WTTCTrbidvGu*8vCSDr z87(`cH6b3L*kyR@(Js}-ud0;l>+4pAa?-tUp7uPkz%Y>ioxC-cN#bI2piwHawBW}$ zb)QHpWMbgG559^|y4t9-p~866hUHwH7=wKVL^R3X=#2!4T4!bSM{|>7Ym>1wdupx> zN;aM^!csm9I=0MZHIywaLbiHBD+#}_4=qZi{Hb)9x^nhIR6wuZVTQMi>6pb!d>oF$ zGnjSahKmEpM-+OMJEyA__kx`??#Si_iG53GUNeX=)Gpv8Qs}Bv0QRdX+=8D1G&*%C zs0I(5(NS^T$nErcK|a%;Es*2S({dXE!(PmV!QX`z(@q(uj%=1({`j#Ga_OPyIo(_t zM5x`uM7ToEw%Tq0;{vx!(yTk20VsYMgbz?hsZ$zUwk|o~a8Jp6@kZDgms7m>;R@aG zaDhq{(Ohi%&SvMpgX~u>25BWBPR?*IESrmM@WlTDWm3YZhkLq563*t;a>(mNoH{s% z=v?7`{B}OP6Q>wkT}5G}hj~alo&SI=290iOY^TqMv+O??~ zls9`cO!-=>1gJ`~kbwbN?G^T$u$pXY7%{x~A-@*v2WT_(lNife+}{NOBFttFDtxAn)?dFUqoDrSY)iK4l$9K8iF}%_lXJe-P z89e%a9OWY(h{H1Q=5~Xc4?)<<+e$Zm!avv^{7O~6VKUaM-T_B%2};w8bhEcb zkU-G5AFl~iv>&rEUm}hDmMA+h>CLPOyp2qU;sukG>$S8L#1^CRKd*A8K4e4Y<|SOX zRiV2n;UlsmG*D9&si4FeD`axPYMUkf@HKiu)IG;o_jz6y7zRrkf={uvvmA#VuPV@J2U+SLL4_wp{8v2oK>MG&M$j|zP zP{fIn-|7c^q3rswzWELrIXISKKR{M93ON5j{4p`9Uw-IMcl8^K?Ai&I)Uo^zP~-a& zBJ%mVUZM6a#|?I}yK1oIAZPJsij`#k>aj70se6LmizQt*)0(j=%o>pfL?T#W+e3+O_v8pGQ^cUQw_O_U7vc>7* za@_rhTS1s(T^%*-Mf3KzlOh3sz85fZ{y}(dL)N0Yoz7~MoH$alrIKsI5`t=TLpi#} zQr5Jx{cVaythLcE`^ww3Z|G-?SGO0ejsm8y{y&iY|L3;=pX7J^HAk_ubKE8fBO?AL zKSf>r2UrW;`|S~3+*QCyLnJ}(xEdl*U6>zSB=*}66msKRM45pSh%^7NMklEoR4qcU zop}=Ens|B9*+J{7%hg_`!$qlk7>j_Gr)H`F$~xEcGZJ=W4hItJ z4Cm;zDn=-F0_$rA_4&JcYaLY=&-vvkv>D1@3^YaFTQIhWq>!yA;?N8xGXPSl=Jenu zbXIE{*w3;ft|8sYhrB%_3hnP3v%U$X40&K(H)ec1<5FF(>yJ*?Qd@FClHg93IQ26y zZA##*m~J>xi+$WaNr$$TjQ6-K{PWnp>;qWoI6wJC7rg|W`00w_s-voHynUE)45Y~e z?<+xeVm9ZPkcb&yZSTQ0&XFaHG=k!oM&uif?sB(EgnEvgxjTE=umD=ukt`^wf0=2l zkiN+m_v<#I*0Qs%Bq^I}5va4^rqIim)b>vYYJ5y-fHxq_^TyR#`(x|59M+&I$zsN; zM!QOgE6r?`Sos%4t)FQ-qlV;6@s>Jsfl))}|5V7Ce>GxYR>_)qut!T!D;K%5h@Usi z`KTWbeQ9SgNfhYNs9*MB6$FjFw>vG%mdSM9^0MQ0wK|lky1hQ+z{jE3@`R?Sdtkh2 zcbIL&iYZVAQRBdKm3SD@0;{DsW!_P;X9dTFmpXTwVW8*N?1=RRUNc+V7Z{HU(eQn` z#rt$lJ{WiN$lArK?lvLRx9(*v{zy}@^EuETt?DYBYT57Rqt*d^l01tM_xhEzul;_j zhlsgpTaLl^BKeb7?W{f#)mT%L1^AW&7D-g~?5kwy{*|~iUds+T^n041ao1Db&etAa z^5p92u&;<~cUUo~61g}(Mv@GiVJ+Pv%gzlYPFz>Vlu`V_Hb?;Pt9p_j1iT2QozD^| z%HZP9^D%Ev#W(_~vKjt};}lD;I&BCjjJ7RnFYmI*PeoCT0uBu5et9&K>ps zYAu#n3epqi#^l9P?Z!EJOO|DYiuF#Je@azkkziSRI^hj19oYIcv1{!o65KDW^)N$& z8i69(bXWQFMR&4Sr`oO!8nSFFmdra-Nh3hb~gzN%ee>=2r=?aFZ<(5CnpR zi`6eSlkRbiR1?dTv_njI1as9i$iqb_lSqRoMB{)S5$4{NK_Vob+Jk|f5-ecNRWPGd z2lP=;&L*gdcXL4+jq0H%R&T@pAdQL}`CctjO=#=jjOIls_F@3lbT^d_{j?WHtE%?P z8v5#{Az9r+vN7jo1@fENh2Y8b5mju%#}*q1gm$S95fejqtv$*1xph?0W8vj(mO~Lu z#X>W>XV4a?aPuKbO4hvuaez^kvuMfvBzr)ZUGPooaFF};>v6xWHHEERe-t=d?=bto z?K4LQ%)bVqx#_q%wJURGP5_E(eF!}aOm^84mtcpVlvuNhoc1Hn9faJnkSnbFuy6P;Xbn8S122yyXUv7I{bI;I!I&Votnn+d|!}G zrFd7z(O*Muz{`Jt{V48VXu^DR{{bdNI&_Mj{OfWb#ws3UN?~W287ace%k(4gM$W(I z2OPNuQybB8HC9Q@@SK$VgYc1IwlnHpgHj~fiHWTn$BLY3){9wgR8GM^IPUV z`vypdzB5zVcu-XwFK1KzjW()Y8(l(W{D%@!qsaz$CVm*-S%v%<&21i&p>PaZ{0G*q z*`WUbR~%lG+y0WK5II5pcO|3uF7>UB$XI2!=HBl|+`8nd8R`?F|Jfy3IDxc@-X|&# zJpBiFaXgnz-dOXBsPNJ1_G~VGy;p(s5Zyb1rE7-%ec5oIi5h(R$ii66OUqJpRb&kI z>nZH9f;EKxWnxiNPIrbV=Qn_zV36>N5hJOH67nfDB)y-#yUv)! zzBHw?jFHRj723a;-TQdEf>#+vNW==Vh-ohRdLem@BDJBtj9nT26;W-YP$7ogxBF!( zYdK~~hbiF{l(ZjMdYOo9?Z&35{0nktd6#kaaFkn*2V>;M?DES>08KED7K&LzMH<}j!=x#3>S8yJCSxkxdb<|Z{!61>#tEUR zhg%_2;NnoZ@UtvyRW#(HB!Yv-ymvW43~g#^N|%ZMylI<-XqileLHf?6kM4~+duOyE z_eD!Zdqh0uUsCJO-r3BQn;Kq`t0F=GK{n*;MYq=CJx)Yir=mi)6=2hovFPRcG%2y# zLp7v)P;hlf5B1ba$}4R@lFZf4Dhnv9qzM`tcG+dX7qu$M8a;EQ21C)MjZt}$nM4Bo z4>D6%E7KCzHQJE%XEI4!t%C{eIH(imxr;c> zF{Ltv;Zb*fcYPvo*xT<4qkW?D0ANbaX=-|9reqTxxnF^bvczR>Yu0ss4G zY8>*AXB9$qo8yy3dU-Hr*{0XK=BQN6!H>yp@y{9*wKskFCHrg(zje4c)`ziCGc%yH z+{B;W?73JHa_$?IcsBVDN8RZ_7pGp5YMWFnVU#&9Pcl_Xr zvC;E1S4x2q2iLLaziupNj>*rzB5ZaD_((G;TaitnXpDop)5vgabhx9-ReMtqIz))| zn87gglz0_TRY4Dpb+5`~6#U>{J_A~}wr<~ibF$x=dz187k`nAVY17+}@OQ}(qS@M$ zkvpDgVd%}icN>b$EL`djGHrh9E>!bg+rJ?ClnJ;XO|C3k+wC4{F~1SEv*;ICKQbiW zelk_*AO6)=br5K)<#YDjtJ3{c5Q-2qe1>fb-X4x4`bDat4eeg;h@ux*Fq?MAyW6l1 z@==b#cSh$3b}^N^h@@1<*rc21&D@z#x#fRmPQNin)-s6CnR5vlJpqjo;|rEB0O4&AUR)&MO}hrx(1NaLVu%E8cWx~k9SXC>Go6OpGujR z8Ku6+xcYO+5afSnvFu)KKHU#e!Zh}ym2kfg$imW`Q+Xk_0J#>inoZM1M_{;rqSk#c zzKOw~#jhjsk7pq)5!P{zth1{?ofu*cKSQDTVMEyBbNsC95E$Usn|0=k z3fsFZTRN4KJwsP+}aJX1{ko-AS(d_5RXSbwba;wf>oDpvEJ+y2UBuv zylkSRX8oAV40a3z0aF#Ey>RQ(qRzYWrTd#l=nW~=Le@{-xpA8HB26gO+lX-*Ii?N| zoG33&ruc7@F#S;n@JGe!6g+#Nuo&QghOUzV)r#g@`O1f31?BnGh+&+6@t#wYs* zjwkC1tiUFK+rJaZ_}l_+FM|c~{flL-IPHha`H|trw7Rx4E+C;F5RTBU+J8xN0AP0P zvu2+-?0x@aRN$|cORo9K+l^E09ZNh6{j_9Wz#|5|k)qd5AFblHsR7$2gOO8@ca4Rj z9k8oRudMGu_ZhBTmsCEBL*az8KUpvnJD~m}Hnh4}&(g(98m(HazJnn@+Ni0{jVDlW z-OX3-TL4Y=`^ebEUomkg@F#_ci z6nA2Iu{bEfhj}_*dRN=Ar)J|$`v14*>s-1LWLMZAb=KGm$`;N4?# z)A6Dkw6x;F%W>Gb{`N--*cGJ%6?0znSIO{J<+SbiWZnp6DYdK=Cw?~f@}?_VM{d1{ zvH3Fw!DadLAS|v`SJn`fclL$kc<5DQX)<%9ITM;KK3%V`1f!uxdclQJF~plcXd)t~ z;6vsl05xxCc#~LU7lPTTSkKB|qAF`~64EC12zq{U&zQcD3JZH32_GXKu1*g51{twz z({~uG{C6#4-r|)W`8|R^UwzBp-nTc3CTd#Nye7Y<6{nLOd-|N7?gCIfqEmQcM_S9ZHuGWbe{63GuVhaiw^^>8F@OIK zvJSCq-INzgZuj!J5O;l%ZruABZ2SBTd?ELm$2=@x?O;HCkwVWWJ!B#H8CK4^93WZP z2c+*mKRXNCxj=R&0`|~eH+%g?@>oOHjNRsiF5YVHd1uPg?)NDR!g_0i<;HuFJfWM_ z8J=CM^u4;5_x;k-gIhQIb*;5%I6G$JI~;{83zZ!QTie(5&pGwT=q^@Qi--N4!7s&# zW3hcHl8*^TmXtOggdOP|!0rpl3E6*LxA`LCKgX_^>vhhYC#cnMrMT;%Q)<#DNYe+R zQ&mtlDc4ZQLgUp1eYZdu&A#&Fr}6D^#?GPkd0@D-u!EjcdUfFSix5~kBte?T#$iHs z-picWQq5hVY3P{5_P8QGXfyVl|MXF}@a&o=+Vu;4^eXvx-F@txC`@FESNsBtepWa&X*Rv8h z&^_GNE%z)>hSzgJ9{sVw&AaU;zqLX4O1T@F)rBd&;QWrZmGO(36{b*xS1q}(4HS*OuDH~y;dSk_4o1Ib9!?JNd+Dk&l3pi%4&Xo$^>7c`^y z-dOr0+W4=M_V`T7VG;9T_t<(aCr0tt%vy27Le;Mh!+EjV59(*7B8-sdc4C-}t>}0% zbIOYHog^cXCcc9Ho@A!5rnKMVupJeFj{`C)_2bKTY(vZ!inmqD)6#x_xe|)r=vz8u z6B#LV<^jY~)dnR#Qh4g%buHWhJTMOkipARAvk(ZuT)T-`nE-s`0B-S3h>Z)V(Bmdu z9|sEULJMj~VNyvCL}`enc02q|fzGeWeGoo?WhqLpR2~zRRFK787m<)Q#4fmOILn0c z)a{uyc}2-PF^p1$hw8@tF%|=~D-scGHTjzwvlV*glp?uyIAECHBFRHk#^f;fZgaN# zTlHM6*Rl)eY@WQoox{!-zeXF^=f?o`nY6?AbEXul3>0lj;jq~a&p8rVNBSUNkOzgU zv*acFewJ42TIwb+7cG(;e?GE@U>6=Rb@Z-hE`u)?CCVi?M|jmB&@a`Pf9rQ7dy|~e z6h2h^XCpQcR4PbQ_-VX0$C8>!x`PK_Nrcw+OV269`t#y~ugW8|Ev=SOO#Sh3wrS8Fegsz4iyGOA zqooZ#x@zFci0)3g@Kv*@jC$H*F$0Pr>rTFmZZa;zT8P||AN8WarvAd`_oOaZ&DiMX zf_o^3Lar_2pF}KtA>9(i9NtXrDES5$)?78dS|ay3EGgR+*er~A)ESpX%r5hh(gpRx z-y**!vN?65_=(;miq4snLgX3G#wrGV0im{^PA%|8`-y%3sH)t*rVg#mRXsH-DMmJ8 zWJ@maQ1h!%J*21pK!ckCFxkiWy^XXg%-XxiYF4@rYJ^jPCmiks_1+?}X@}On;z=rj zU=bb?bQ#0?FLe6vNrPJXSnyYZ2-&mg3vV) zh}?JgbHt`(4mwi^N3%Fq2r!K|2$^! zuP~j-WD5p8NCy{r-$xqb+g(9gi7a_Gy5bekSHR>Ifb%L|PrZ>Wn zxR=9l7e&$8wa5LX_`(fR`Wc=V^?@~{XNd1Slj;kHhB#`CJ|lzj&7mw|C3wuhSx0E# z%!^-Z8+SuoJAT8j4w0s?2ryQXE;Nl_%-MzUBP~!x?3R6oBUfS68G?N?eZji$@Ufyb ziGHv@GD7TNI?Z}n3%ix9Lj)ru8sugx(8P%uAQSmI$u?+zdB>B$g$3OA3vdY$I`;4%@f~d~CxqafgUKRVP+3ufr1YFskcuAikB_KV?%reY) z&HGwkgz=nVkc)PN(y@1tTROFJqkM5;+`8cEJ5j>8Jr-a!1$jG-nsg0AKe#y{(aM>T zNFraL2VZ_KbX*h=*nR-S>E_{1G5m_TlKgKh)rhqw#ZZ>WDG}ZJwP5I9$st_2cb=T< zrf5QvH<*p`2LqQfGG%ub{{fVn@b+17?RlM;iPTZLz;sW;>e1upkI{;VrQ1vx-STpd zc;-)jPegkxS-n;z6;qrF$Pgm}blFiw;LDcIUV|}8WsYuX8HI~Oh-n3iP0FnxhnqA7 zJ_l#zXJojSqKdaIw!ktdPY9Ei}$RGk-`Y=*R3;TwAn`h&NHxbDWVz@n_nRBu26%CM8A)!Cd&{Q381e`iT>D_nu?CUAfE=fKe3R?x<+dGKK z^5K~3-Hz{qsf6Fny9V=c?8f|51w9m2ml~hKH`*W3_r@U9L~lt?xeaNs3}nhS-46!VHQno{1_(lBREOa8qf@1tP;aS9lmmmg{hJ57(>qW1*9T@BhQGhV6Cf*&ujrr zkcdW6eTs>|h&;dK_UW@V|0c>4_rg7{wRl?YL>Bb~b`<>xk=+0j-7XKB#j~HKy{V5i z&G+>EXjz5G2G5s~0TxIC@353AvAxn>SJZZyjZ5n{ov*vziC`kncrF7w5v?)K&y4E& z-{W^ne%@yPCK`r3H2d6v{Sh6EVoL64m6C-w*BZ0-QzchbTz!cE34AqU-JIOpY3^?s z#r0}!8Ih(cYnI?nq}_IA6k9(BQd{}a_=9s>XC5u~p|6)yRLU>%rn|ICb}0bE@ zneh1X|BJM@ii#uZx^^2USb*S-1$PZjaQDXDAz0%U+}+*X-5UuK+})c7f+WEqNU$WQ zzki&o|2-Gy9betm9(7r@Ywfk>eC9!oizCCB?J1^2)<3LjdpR|9*vqDNH%8v7U2osY-qvDT_UzFToojQ{e;1Url z+i|xWw(5#ZQO9B1t%taaKso;1Edsm9yn%p2 zFPc;LLly}y858f`)b2boO0pCBG1L+K*p<8p)@CHUs65vuc<2c+4|Uj+EwI1j1L}TG?qWZwWbK&3T6a^0d^g#guPb#h0kGq*JJyD-St1fTNu*Ir*AJ+{{VkX&uft#Y%Mu=|3~=yIDwuws7M`dd(Mi2EO)H0R{9>+TAUp%6J5D`Nfq_-AL2E1z9t zU`!-~{i!uXkxb>TiDBl&XY1C;tNvluJs{fl2zQYF<`XWT_jIR@sisTLR^Ou+PkX{m zTmX{g--W}%pVs4BEwt%n-6BISG#~PQ8{9h==@fn`TH~P}mIf$#nF(l}0w3*s)rsbe zf1I+qP+;LkO`}}y+PN;?{iIc5O~^2F!?td}u>K%`yqM`SQWa&?lo5YE+Jh=f35!5S z@6@K5IcYk}of{XdO_wl<+4iA!pxbOC9oh&`yWD$=fSCD?nsHBOuV3N7mx513Z`{=P zC|8jrrc-%5OHK(xX%j+rI_K4p_v&xg{3U4lGPwH@XX~6B5GIeU8v2{`mh#Y9VDoq2 z!1;ORjv6udf9&@E%>p91e(1(;X=$XAC$&u0&nZUEbz>4HoI z1KVf2=UH2N0H;krRcKv~Zq(Ffgq@6x3dAq?7)wW}gcZ@PfwMSdPHiDJeAWEnAIo~a%c-Nf}87=ESi_gNbCxj3tQ{GaP3zly;%)!u5-%yoSe$m zG`3KrDJqIp?Hgbj;ESpbVkW3fSQg8U=SDU*1Mjuc?0QKG3Y-r}MDC;;m9Ut_s8WLw ze320H67hCe(L^E5$L!~7j}wsE3jxR=paW}39783F+qa@7YnKgk^h)g2PtKmTY~j=-{mRRjctnpAsg{N*$*n z(L=%YY%S99=~HZ?Q|vEEnfIXqn9A-JpB6fQFS_dEvu2~{vi{CxfN|Ajk_@W9!=Hv` zMxN6<)+Hw+adE+quKDUwQ3hmOD+#J%CAIdzUO|iX)UiKckEx&ugVbc>&bx# zFIrn9rmkf~?Zjb&Ve;TazC--891HIqyo|x_b95&cryE;HmDyIhd`Q-?>c%&^exwlFoDZU&#*QAw zaSsu3!%dGmFeHe#+`!@!7AF`Dg@O_8j>AAhWSsmSqF^Q-6$HAQ8-Kal#TCt zoYLHI^BN;uOYWJGA|HL<&B0Npf@`DEiAA|7Fv<|6c9ky=cQx9o$N#?ageS#)CjcbcB3+|>AjJQ z8xotV+lBIvQtK3={&+Rj;`dXTP|ov-t033G#@X|0V7xZ4hPw8c9nB{m{2Ua;0@ znrwNCA#9gF7nofd-?0R1^xjjZrvc+ z39bX2!iQh4h1Bc2{-*(@x>UCP_E4x7>fx6@=v2=MCzl4fT&PddBmSul0%Eu!?P5jT z-V_9y3^c3$fr?#d2|o1~i5jK0)b5mOQPQyFu6HzfO!W2iR47dM_Gz{e0g^JX`kCrP zQBLXZerX?1B~v*+k;Z%tMN07cLcqr6*bHh5D0k{QEEHn7bF)E!pGyV9lA;9G{sDd# z(id3%a)(=wKb09d>rSN-q}zs=H0;exyUn$|#_L-m(UONomNR!zU>V6_y*+665$IDz z&KB%qab{1r9F4%R0n{#HX2^M8x|4c8~p6_XyvR!grFmgoF0MlmDYI@_7y2{0Fdk$sfEJ1FLKa+Dp69 z{GECTR@yt=f=t~~zBmhK`F2y`pQA2&5-1{>wNLv88k9G-p7u!?QG|BpcDhNxTpL}c zKNqTT%)0XkvGmnkm}%iMnb;f73z3zP3G*)p8morx``Qx{kB@0&BB{?K&^_wIj~!XI zxoY3R4JDdQm5R&v0wxl2Tr5M2NZwo_rjSqLNmT~7gnGhcLI&}(l%4qHgGVh&9 zLX}n#UP4fn3bD)Dm-QV+NfeVa|7RQryWZZMBv)t^50dQ3%X9*SdEBK@&F% z9e`jSY{P z;n2TVlcVlrJz7nszT+_H-BmOM12QK|8nH`bSFMhNhd+IUwbiyb&zIo7S#$!s_*{ot z<`!;pG15{80>C4y6{bbSZ+PiQd*nbW=pc(|5ZOuTw;ya+{u2tI{*;W#4~)5D-hwl- zZG=+3mo|+M$@5JyfFd99xVIHhsxMzN6CU-T8x5*CU~uj^c65acAD@2GaGDV!-^z5)2iT6VuRwlx3kCA1V0#;%Tpb&lCdG}~|gaV?k0hHi_ zmuq@|DyC>P&YL@BX|T(nL5wyc^@%sUBr9EdEJx_%B`8Eo?oO*@BK2mNS)WLi=GJ;8 zOXA*`Oe?Uc#yvl&D(T!La(BNUakiH7(b>(i3qP{{GMPD(sFA*^RH&PG;k!k4@1Azi z!!rd6De*p%QnoZw62{$j%kLNgKiy$b?O+8nnS0+8)?vRUj5B`qh*ag$QHibqk2X|o zea^i7tNAo4F_|83S&t{&{2ApDjr_#?p9>>q&f8*k=zb26jtxmr{M z!hJdSI<#8TcWxHkbJuz?V}8-cAWS)Ogu_6!{M{w^6xR3TG_Ce-xNSN%{18s#Lp=|Y zUE@J>0p}^PWJ73KSdQjfSyw z^r0Fgyx5pg%KX`Op7q0K=A$i-qTg)2aEE}bMQ6-p$^MQa&0PBwZ!n>h6RB^p6Xss3 z{>8SBy`h(D{LqN4IgqSdpIV+04>$y9TX0FQkwSiIcrpY{Dp63RxpQ4>$_b-o&8C^t2{%W4L93E=yn zbN>!(akNxU(QiGWHTnm5O&@zM=*c|s$KKX|X8TnX``;Az|M@IZ><%Xhg}5)AKU6e0 zXA(N{QqJL8?&6yBEBw1Q(yPp~OSxCDoT%yB)h??b|HIK&tHe<<+QiRE9;ZHzoyQjk z_kppLTf#WHPJhB`8x}-r$Dm36E=0{ix{`I|Aw-PGLy036Y~ME%i5oEXC9=tK71gqJ zREL0c0+_$-dFt9l#Ma(?`TKFqC=#!tJ4}G5D?TONM8-^ku<@EZnU>ij;|`S$l~JRM zQ;m|Fdkib8AxoEfu^$Pks=9b_lz1W`(_BZ-hQ&=pJvo`PBC8G%Xxz2lzaZIl_6M&T z8E1m}f{`)=X>B5D!^BFTx`x=woAre3oy@7^vhnL$>2S^vhmM3spvd4Nm;ocKyyf^%zA-bUsK-gxoI&H4Oa*%%7(b^TUmLoSDTx8?wL9zN=Jxg_Vr#I>q=Ja{eg#vM0JFR<`MaV-hx$)YQ@^)Z3I@ zyo(oOMw8;!`s}P?aUu$P7ykh|j5v2KFuuWXaw*VdoHAHC%LBx=oJKG48-uGmju7-w zHH1B{84dd#l!bDMaqw#pLkIm?PD#Lo=9DsL5<4bqvSXR`<_OdE?_}HvA^LsQylBi59%n?}LMqJpxcWK{{uLQbFcdGb12I1S6t;Yu8Q!9GH6mR9ox@KB0=-ao*V zR<=+Llo?h`P2`j!w@Beh7WP&Q)yf6Elk!9i%5C)}(^732Qpp})m%TDZFk0#E@8AYq z?ppL@eN}F_t!`Qh~}k;;JE#haA;g zhT7S@X|7M@1|eq8=>MEpauK56E>2( z7m0lL4`9kG@C6UH*@owPwQa*MU>fr0RmFgj(pnPegQC$LdxCuSWxY$#tuOhD$s*dr zS77TQb(&fp6d+XmhW^I^yd*DuREq2{Vp)Ur5b#$4XNapr%0~Ug?!?7xmi|X^at1CJh5vtSwg7>)Z6 z5YFQB-Z7-_+p!15$Gs=$yoHbYuh=UMIB`x#9p|=XY^R0@+!{(DlGrDn^g;$}3TRty z8w|WIgvL|s*~0oDiOh!WycN(@=!=i_;( zI#vcN7aaNLVq_aDNuD0Oec$cT^HosoH*H`;1(vg(6?v1BXa2qG=}N-5|7%tQFY?7C zNB1VHwP^}8cYe2SU#XDp?tAW%{Ak?*6bc^qZTB)DLcJt&gKEz0YJZ#}C%}=_8vIn< zc^CNDCE8qj@y(3p+#NhC8{$d)53s@fQ25dNi%6y4UXrto0(P}pLGxN8u#ls{n}5TW zKSS@0@@b1x{PNuAc?kcwh=zV2(bu~Yp_JaU>52lW%pAn88S7yH`d5A=@BAI^90A0=9;kHg|cwHl|)E_;~D8XG=TUbrI zkyDQn3( znAdj;u-p9wf&c(yRPSNJvsCt_;;`%+$YJaaTW&^Eeb-6Td5{)ovYRFX_M;BWk911I zyI4bfnlv%wp4Pqt(KprF!0NCsVj^CNhgsX$8h^r77jXm#1Pv7N%e9`^zv-=n3~FGQ)x-_~h?GU zP{8}(<`XmhAfB!UCcd&E@U-u*oMh{!2LVfM^80FVxj9UJRgjE~G|??n8*z4Xep|d| zLQ@K1xdNWjeuF}NgbZmw$V_ZobEm$cD818p~z@DgiwAL zC0m|f;J#0fp40ga&=5czgEW$DBcPQ%0)=B;d8eS8NGuK|?d7{2elfMReLZ{*n4Q_w zVMPaNia_n%%*W)2$$Grhz)`x*KQh$2hu$+)m&LSfE7F(;HVE!fa;^hEG1e84<88!v zMXEW&rWf8>bKvRZq~8$@Hzg;mpK!?*uGUJXye}VAGO56JOx96k6eX;&blnNuDtSXU%o4MyJ+DWD|(%iXzclClX zFS(ZIORmU=@J2%VB5bD;cMi0-H@C))w$VRp**ygmGZg;w3uaXwu2a@uHsV#me zSv$GWeW8Ep^IpO#TG4&bqxG;zs$Fw0F8l(w7hj_%Es==l&2{^$soX=7KCC-lT^GREx9_eB+zkGznq+fM zAJH!T5~oCWM(&y?kO#iwv8oo2f`gR5z@s8BNcdeM0wSm`UqoR=a*TPqi?+S#Y8Az2 zz0M}R-$sn*k`MlJio6Sq_T4mF18TC2{!ys@3z#ZfD=X@z3Xm_t@MvSzF#k4HBP<=N}~S-39P2+CIwoVrlL>ilX4 zIvMM=ho9Wri5{kpMoD!dQQHt`ov$=j_k{Ro-3}UXb&JaOGmU!__d}~W2b>>*rVrGAB&-<^on`_{CU{@z2KLp(1kT@#~0kD;|X>oAmW9-J+ zgq8KucJGC`=@6Qc<$AyyRr%-nivGEd-de;-O>e6DZcrXx^~&d>Z~kKSikv@ zA)JT3poPs27Ke;u+w(NXjz3-Rz(b_~wM@>9i$(AYr4FB*AkU5ZA>nIw{ zZJdB^W^cSpU<&MN(L=sItbhpQak}(qzzPx2pofn&H@PdZQcn^#B3Xl&p?cbWzKNo= zxFE&%N-eJaGPN2~;WGBMd3Ade&gS-M3tAT%d$rXB+;C?Y2@f z6t5OEA+~up=zgfJ`466pPZpo~w}}E>s;5h1$;JP;2<9!M^((hr1q70{^xe97k781Y`dJU^)~y6BVtS`s)#HCUi%1ymf$C z1^!Tl@=vPUo8=@t>4|gYHO!6)l^5@IC%3m3MH6xhB1!YPq3WOGc0~{%?{tBYpH&r; zLkkivl9@TCkCjo`&>bnLQ-=>!=CEprVwF$$94b=Rny<4($6s>V3wbPO>YL)!>0Z8b z-xk&+IA*OmPj5G3()w_X46{dsdj7_YV%>0<88TDY5sDel(aHJF7T;~qDM#>z>=IV_ z=a&kGm1L@q!w@szvW|SdILcuMv$SK{h*1j;HtpUL&J=wJZJ0YQ4JTSkmBxd39aPbJ zg^$drf%-y9-iJ=kLV6*IBw62rSSwXsm*|~(s6Jz0q!@%yDBFDA$Z98&%Slj(i}WsV zAQ02hT1i2)qtptjhr=>ZHIFA;^`lghWb=`o!Ebf5DsmaPATdhmj&|B9xCnOTNmX+s zvR#899a{+7l zr4$bRPT$iZcRJ2#(dJ}*f?Pyzq~Uo?vW9BSnW_k|f-cYMWPsqgI%fp1*JetRVUgNFjB zAme>L%^|{2U%%K>y@>UUw!~0Ef|B+7%|>BD0huJ~G+Xvd8l3awgnEMs{d92LO6dNO zBj=kS%dPx(wSJnRVJZ9Pl_#pu&&hZUTc2EV64axa*=18DwIKt9k0E_%%MJp{;t-d( z@$P~{>r>8j`-yC3)^>jZg-Q8F^97^AH=Qm-oGw|K*idV72dG9O5DHjDt9d`5=|nW3?{}1q>6@1WhM(t+u4idN`VbT6JEYV25BGjx!+q zX3Fy;=f^9h*{7pEU91iYsY1Cg^Gl_4+6QN|7mat9Y|V?^ZCE+!G}m5OViCqq@{5iC zO^N@X&m#7G{C}AbdRKpEe~Wkg)gmF9O0Y2^ZsJFKGCub=*)3{<9_;@X2{ie*^7Sd2 z=6pegDQeX$^dCU+_wI(rvCl`e@#7C9ArfoN8uF}pXJGfc-ALh#bEL><9dMmm`NCCE zpa-26cA~5^)KS0n$jg9`nq%DZjm4?1Ax$@41D&2Nk9H|)juEzBOur9^694-x{>F(T zDaxtg7!G3eExvk7BYVo)SKuI94O8wTEY?)oDO8YHz=Dp1P1_aY<0 zu6JJU{1(LB8?yrngkUJ}$DDO+V80RZf{RI|NB~gp$AogfjW|MKQhz(y#0!zlY{XSC z`YFOaT)Iwg(sGD#N{~3j&DI&P2|78PRTR)Hcc8h@M%ab4Fp`?JFH9Rlp$uG06oHH2 zT15^YLW_r_;)=OErY6-=4DvMQjCwCe@BjHgF`elWp(mYKp=zgMjDM^E#BM^Q$~b8D zz!4l|Alhkbk;Lo>8E-wml-#%msw}|QzE_cN(N2eKgK~MUNkCIOi?US4{dp>XmKBph zR;tq2$V)?qjAF(R_$tMh#eyJW2k6td66oH*MZYC8CUIySt0yuIk-`5{8RGB zr%TrSry@`q(b!BwR4Vh8M$vFME*Gt*6i~Z4BkyYEWf?>My)loc54(ERJ1HA1cyY>C zy~j(`n1Z;9u&pJbt(mt7+K6hCeAB{;;wnjCRJ2qhy1LUbJ!b&czgT6dYsC;n|Bf;B zfuu0RhFK;G+vdD`AL*^)4XR6@xVwe7u|p-li8D-T{PlwV>3I02mQsh{^U!Nq7gNB8(ZcMOXm;ih}~2&)_yKqApuqm7UppK zlD}d!wo^w;xup7a1}4xUtFjdSwdaVgPjS|jn>F>VfJ)8v%9yGuVYuZx!b4|B1hJ^y z5PMzO&m}2AP;pM{5)e4|)t$Rdcj7P22k8Ab1|gb5BKm~{E+2VSonEJW#ClZ{d&asg zJ#>zzz(KdEN%B6TkN#(?4Xhz}vAmH71q!F6YS+Z~K>PddHB~$-RWbqN93^t|3(LBM zkHd0VWeZ)?LVMiw3oc*cqb5r(&&CPR=%vA+y7G(Xo8!`STn(Bi9a~a4e$9%YTJX{&@H-ZU{|0M3Y>Pso1y80_BXm+N9ypjB7 zB3Nze)u$R5V7Z3^BMgpN=*l?^05))RZ@&sIEg$ZjuLRsI%<-Gp_>Gs;xnU@4o=N~! z3rh@EDLtl&IEH~V=bt3XHZNTj0nYF!JmFh%n{;DR6Kp~0Ov-o=ZA~pOx8VjYWA2v$ zX)P9prHunLg%yaUyA>kZ`&rfWIkk-!jfju&ZcVAM;U6F(d{lcZkInW3g4?kZhnV`a zac-p-p1hTptv!5}$t|2=@%-5yCB@ERSMKriRD6(ffw)uvn!8AG)cGwAcEa1&e(@7A ztw#8~ae;Vn8CKZVbNj#Lz(svS3f*Z8M=E_%TlJx6_V~ZGJ1S4c>f!y96@L1mrUH%X z0}mp%JWm`=J9g&-tV|l@ei{0N@{zeaXDZcd-%ecHtYtBLoQWpQoQszk3wtfL62XF* z*tHy_!e3$)i3S=2?Lr5^G`bZ>g*PD*10eK?>=MyMo*PN8FweY@WX@|rV zTH=dQ%N<|V8Q_xH*7|;p)!Q1u$rUwuxg$4A1?vV`+ThKbwBNYkuA3jjj@~Ya?7drm z=A#1Lod^b1zi^%~h{V?!=w=9R`w()Dx(ic1jP_4Y`bYdFM7-PaBzM|l*|+VmCjLTD zrXvluF!m&a8Go*Kbv>WtZhep7x*!`v6C>JmnK0gy%hS|7L&%27BpBPc=8fsTGHgl@ znoD*M-BA$L4j*1%;h8_y7v5@@z{Q`B>y&y7{AE5p)zLDQ@-8;EY>1hkKeXH4-SlMa zUE&+22tH0_>i4mhZxKc$_bqoF%ClI^G80EM-ynX~{PLFhle=zx0{*EVL25TU8KE`T ztJ!_-bORE<>M4-c_I;+db4vh1dc=h5R}4U@j-=*@i=uPsa5DAhxt-Md!!J&VJatVM z6)P0wj^Ogg;Dp)UI3jwIcijjbX*e?GeEWg``Uz*maI&;gpfh*bk!hvpB1nvoujnq- zYg#yDaywtjFT@mQRutt;K4d7<)#q3nM*{>k1XSc>PS(6upQlGmx7$n-*y(SYzq1E8 zEykaks4qL{=Pb!cg%(bGg@1YvGYoNA7&mfHqxFb5sm3A2-Lz=NF~45sMu8;uf%F?u zHIz;77xDb=9%F{fnLcv7X^0GKxr5NE{!N8+Q@M>3G#gZ6jDo1_;G>RrF)L7%B(_LB zT#@ANj&AEve@zE=uEP@rGRy<8q$mahV3n}*+RM_gT2^?Fc2$7oPMplE+uBqm% zvLohJ)J!@}+58h!^C2@a2QqUzXcNhAkO@1t>#*17d`TO#iHuJ~0%pG6CPxS4{EzpD zw#qE|NydyD}h_ z<)i8&J1yX`(|yl58Q`L@?_*_xcAYL(ICy;;_yhQZ*L)0 z!^vuqQ8swP{>CMp2t~!=3ELU4SDWt&r>JMgv~ zWg=%zZ=OpG7QE*m92MY}wd(e3vvO#iY@IH`~Dq9{mE>mrpbYY$%v=bn)z8Cl5qV`Nn0Pq8jSv4QH?d8GWil4}Wl`9m_yZ zL`+cXOHtltCdyN_8K#W8(psLNObYW z)o$I^ql`c>JdvM_O|nAOAfO51Lpayh{if|3%sj>U0eo?&vwhr()KnfN+`q9SLqZ7_E*dRE)k5 zoEl}+OBhSotS8cYdbF*2D>w1}ci^y#!-XR-oUCfSvvt^t%)*k}8kEppB6t%P8ZOZD zDHQEjEtR!FQ*oNBo`cJ@X|&?@5US=j5!!jSDDojPW5;&aimcoQVNLzb58@;pgnVjJ z;CqIs1ELtZG>5uFk`=@TNJdEC8{!sU*X@y9o|!VD?_q@t%hDhbbm5RSN2_F}6$lS4 zzbLpHuigDhN4O~>e`VPQ>Ll1M()J#wqAQxPdH=8x0n*}2+VYbdb(goX4pYR=srXDH*QpNzznPKdR_Dmg6t}mWSfKn)W!+<_3 z$}4B2r1ecJbt(0aMv_ha!Z*M2S`u@2tWl)W?pypi4)4~xXBD|@u#h?Sd_s(0q%^jMhhGpP6 z$%X2tlsI_5D+PV~##e*^Q)7LAmJSmGJ5Uyo{?LwF{)j~H7vMCvKhMH1KTaM4=U3jn{DUV?WH-d_dB2UUk7Yq` zR9wXq^ifxv+nWed^!SwU>4xI#=pI_(`2AQurxVI|Qm)(sJU6I^8RXxCf?o~TzjZti-fof?l~CO^TyHfIxeGT&Kl3p z3G!)wa+kF#H&6T`th$LdZoueg*h*FHAI6~R98d90y(UTTm{FWIj3U*I{jLXX*RV<# zyOhjMVcCEWA8aC9&(z*hI0FeK;G_1qPAOyRAB;#{kJ^q5(^G#-338Z#YcxkcE(RxD zx)NjQWM*IxVE-b2G`{{@3%Q@Z{}^?(VzsxxzW4u);Qar+>gFFhj-~}`szUpbeCuO# z5p)tzU;P_BH|QSl4?tL~eh25^mBUlO0^uoOPZQCPT?iq)>kZfCVr6G=6;5yeC(C_+ zsxza`Hp!`|C(UP={`p0dFN%T2DRvFE^0=#;-Hz^w*ZNHsK;wkpYmj6pan>LX?SIQv+)U;&Ua zUDZ9M0|ZiETO3(O8Dwq?grM@QvNt;25Xv+!8~^&A>P}FDQHo2U6AZ#ck_nxDt+?3f z!fff1v>X9j)~^!$qP;_yIc-1?FFm>RQTif@SkjymXBF7&ShoADiQf7+ zFeP+qVKRBPOianUI$aT^OTk~-x$!uYz@Twn7nn7vXo@AP!7#tnET%cNfU!uVlAo)S zgHq4v$ovh?ANBoOqbnqwfg73bTz^LNHd?6QXRD^ds6dS-Izmd?8}i4SnG*6x;`g&tbJzAtZ0&_aBaFogN z<4AHy1qJoq_jopyIt9V6I&^yaT8$<}qJqD&bJ8C3-`mh39U&|(u4E?9FtCMT7O(nD z)shq1-BQDU!>*(FCV}G^Fs!0bL;4IO7xwt zs8a2#3*8R8?8g0&rm9kIugPyma_PyJ>OBxr6ztivK=qS4YZ4DWPf8F0YJf68Xcsm6 zJz6zfG@YQjd(U)p$B|)s{G2~?BUHMVBnthV^PwB?_VWZj3uz%bwKb5ys*_3E4Ot-Z zCYz*E!781Wr5zDLjV?p(YOhK)#hQMHDSF!RI zwvKWmp1T(M_Q*RRG}+M9zbTpOjYnM@XX_gjca}nlKa4Q#HhC$b!haNEmPeyE~ zX>u>c7~7!MP_Ti`MD>dm1{~)MNLBh3O6p1=vA}9Sp*G-?20x=3$2(1Pr}?;eOA+9u zVuYTSH~yj>R+)W>Y5U$u3uHZHQkN(LEdKng+c~Wa>345M!dcd?vz9PE04ho`Iio2v zCbhY}j(zZXm@@EitaZcW|?gVMVOfaWFD2LF89@&t6 z`tkBa7j304!LZxNpG#s+zup5?N;s6RMxd(KIAo-sM#0i!kxV&P+6XcB_{>Bdi8$O$9 zK`WY51N>2@kuZ@T^;eXNZQ6b~4u3OkZ*jW-4x|vx2~rn&);Avu2O8A3w}-a@z0VgT zPmvJ?lN`1`tF>DqGltV6bkJfpzptU;kh!Fa`-(UWY!6@=xS$)doQjknfrVG{o)fWoYB*)HoPoRF z3adi|Pk&60EyP1IUtTuAg~O?MR{i4J>}eK^;2KK^HpI zN;n?%y!=5H616SBgk6JrHbiKH3`fS-PI}jvG&!83Sop;gs#X|9O7nmB-qB)B(-%-i z7|*#DcWMhrC5Tzbb|oCGIVE!|Exk>2j$4Fu|I}WR)c<HNy36`$(*`J8;8yPs=DMC9XSwUHV!USi+WC&|#;qzY~2X=RG@Q$#;2+bwC~YwE=# ziU&-0$t8qXBY3Tz$xk;~e|nDQ7(y=z?EmH$!VhqHp0kh0HM%BJZK{evg!$sl-{F6* zbEAw$rYQGXYEf6j40swpqFU5^s6mcjMKE7meqd$fg~>Q}p^l6A?bkr^A)3N*AvN z86RV0zQ@H4MIy3cOgt4-hR`UE{&0ww(-=L3jRu*2M!iln4^8C$A>#0xU@}I+QFOSF zmVX4@DMs1S)@ad)h=Lk~9DJ`iHHSKi`+{Br-Hby{?NJ5qd|9Bdbe``FAeA}1lSw8b?3RV)Tc^rk}7D)GL;58Owu}ko1C%8%2g8$=eU!zvf%^d3#WRG46F9! z7}xnYqugwfiE-UGdgk$&opFxg>i#O@3(GdoFCU4%PB_U_I`W7$F_8+9yJth^EZxD* zt7-d$RlPH;kI=!Pj6iaif*NXMQcP613zQ^lUz&a6h zGv42PDIWfWBKQxW-9_F|5(YIgIXi5IepI)D&+T6P14v+h$W4E|t9HB<#0~3jvcAN1 zY~;fqRNUO^6X}IF+&fyoCh?9R!$jAhtUxy+Mb9fPhIoak7%0WIqw#qonO5IV4T5_kK&9!26jRV9Hmo_#jc<` z7XiDMoLV>85@C{UZ-sv}V?56f8Z5MjcgbmBYJr zBsS)}h~H@g8F$nPVuzL0I~5fpzO%evoJH!hVV^4iQrU*QdBwD|Pp4<6xmxJdI|3ezS8GZLfKUakL|ih|{6(XlPH8 zmMitHQ;mNG45&aQuzai=3YY1|5*|MQ`f#AB_ey~0B7S0|ci(HKy;a7W?k0;JRhXQ~ zeT!5U#c7m%3dVj*GF~{?OONTSDYvfMxUR!?$`M;rSNQmw7mc4iY_shx02?GmeUnb0 zAV~Pe9mS6%tb{KNqRSqfk@rKk{?KN%b{jh+QXNk(NS(g0&j+(f)hG`1fo0g`x-p=l z9pYzLE{x?5LYM20^@^tO}CSd9}J zJZ#dXcc-81+t)b?R}<7=X=a{p>gv*Z)O-iVFtAh>;GQ(ruGgeX{2Y3ubXP#Rn@CL& zZlw4kLFlgr75>GY#I3V?stXGxpQ{PUs?TLY%N0}y;S`h{h$d&{3kVdK4AS_;QvT9&; zPaqftL|fqtv5AxIn3h!FlcTaA z77DmQsmn9XoWh)^>serFeVvs24hFMIS)4KcRvhb^I+Gyz6xx_|PRu40#3)91) zb2Vu6&u8T#%SaRcXm}5sfKa&>?bj``Yqro)jD!zQZ+k7unZyUtqzF=b{2GBsbd5nZ zUI!QFFK>&PI(0O>-fP|=kWk8BCo2ciJX}oS|6RfYjA|G#)pyv*f4_|_#v|p%PE6kf zu5ty@yC}i@LYtx^+I`rX@OjagDiSkvGa&>6^okqVNQ~8QSVoTqz2f=8aO5zyDJ1DY z$2I9{*a+8IYZ<(RUE5#1K79R&*PLKk6+3mw#R2GG`v^O}XH=C>*|)T`f5c=-@lFUj zU_#gCVsu*{YLUFIWxpA�K20r4)SPSd_L0_kHdB@u27*(TR-C&dWuQPUuh`3#uBR zVcg6`l^6U)$a2@|SV~yiao{-4T^DoCk8dKCp8k%hH9*+2w6E}lh!x&fJyaTN1?9zgA~Sdc6%65{C>Br25sPcq^1#A!S~0run_{} z--GsyjPKF+$&Y0BJO-TdUAkIdcmNmM!pap+l^LF3HjJbJBu%<%d;1)XpKRs7-0x2#QI)r#cw_Xp?f+OEHUa#ZX;dHIQlx%~r7 zz9z-#@f^4#;Z4}l7{!=Wt#m9Lz+0YL zX9LZ4)#{J#9!eeDq58$LSSL^!8xK+25#lhYYu%}-8R52lV?#OjR{Es(sbQ`EHHFco zt5ln3)2*zvR1F=B^m*d{A?>W9+KSqB9h~A&Jh&A1;_gt~-Q9w_L!menr?|TW3l7Dt z6bbHDtf4@$7U{`8w`cD$&L015#=OYQT64{BKJWVkOc}0W_;~7%f}2=@8k{EAtRn52t`D z0;8+W!wd3DYlN+kH-yqxJn{OBol7mJOwKS{+8D2`flpnSz=#G-uqoD{c**YKk+oxA7anv%a(8iMv-jPdRrq1^0a z|Cse~qW+aGkVexg+$wvWQxe6Hl^zR3*n*K7nXjpc*gQRzA-n=-JsEpg=agGT+?U$d zL0FD!TVnPVa<*>km>^5i2=OwaEKKX^^ zpV@V;orbndP6OugZq6+{y?E5d3CX%|ZdWq`?`7lT>4^n;ndPJPG3O`=@JGCB+vK?!{!}kzk?fFiP_mf0*bL&mY(g8lea zn^l{`_OKZvUDg8+WmbNKY$%~sP_*@=2$^?ot}k^jm}0k6ba`=!q&pdr*%~hvb^Ocq z-?{H?UFW0VML#l#!z1TWi&gQP;dAVre8)mDhwxfS4Q+qZu1BLAo6R<>$Jh0HgnxjE z=XeGFMoGG`ss7)hzkaWc?u)T$q>uC5Q@^W=(XiP)yyV$s^xg|py#@LId^KS=c|YLt zpk&eiXBLa=sc1Vm)5f<1J1Eq4-4jwB46$r8J`SPM`4tl8LbBx-wtd|e-??y8J9g=J z*5eO)`UWvNx^4JSB_-I}y7F3-FCbn1D6ApiS=ehgx9V~Kz}tIj+I3zg&QaATG<#^S z^ev7fEu9Zv)!&fjY}uB4{)SH{htY&*;~1MoP3t>Bi56B*^ZZtR@Um&%8-Y9{D7V{J z-SaJf;MJa8#sH(%^xFHnJrsLA4-F9srg205QBTXumCiI?>?2Buv7<{2mA9Zk2+?1* zebLCR5J`tGKRXHACN!D<0q`XhYazgfP@EY!SJQ_5pY`k0j@3pE&GlLOyujV=-PiW8 z&82+cq2wd9`R@#iMY@E|8`yx304Ev#bdg>yk;KEA`<=1{DS)!m zr$xvj6LwcsyVNZGiJO^BiOp2^^!;<=oR6T}@^{uTtszE(_-YFIWKy=Eiaj}=4jfz@ z7PqAEE@$QwrpffTojANeO^A`FttT?ZkU)r$kf~_%z^;u#pMfri z4kG!s&)HyfSvgas78!BuAw@Pe56TZ9F;=PKx>r7-1tL=^E`_qMYuJlBgzr^PgH)KuSD9^8G{QH4Og6Dde6qOlKifv zVcR%GKwO52QVU_6BdRltX1#^|Mjx?*;E+|HJ$Ix@EhZe>5%&ib{b<~ZDJJY5TFcRq z>AGv;l&S-eC;E-1TyQjv_!PaNT{qUFLwmLzf=1?@tOZCr&O&5f*2?NZ5X|9eQPtJ8)AKo%S%F3t>C*(!ViB;vsv8~tbNQ@y9GH{ zz+K2qA?0b&>EE)sEG5Ju0NBa8(L*brKTfOjq67Ui2@_7#8V|@%$8{gB*;>$Rj`By< z%o6qlap3b*)yCv)dF$;&9aTI%JyZsl@53rg;z~(^shc}VGG}Q~)fG2`x5*nvaZC0; zZOHs-4sGVQq!3@H0xv!b^9tkW_Mp-|;4W;QvHPu~eqU4;^(GAYQur2X_tU0kBpbF3Md;~Z$ITG&Qw{)K1*!&czuj{rq<-q!mh-WUi^l$GxUsr8G~_% z9o=eZl@CsLc;4vAG>T`%ym7bBPjxoybR>E*lx+^5<>G-*JZGInEu67s5YJ_jEo}o_FrGa@ASp6+$aNJI!kU1cB-a8a==@DrgPXgVRoKwoH~O|t9ECqLGnar0U^T- zz6139zXtY0By!?P0_PV5pJ+!4?jJOs{57^azC!z+%|3U%rYW~rePB0n`MKBW+QuFoM90=R~!|q9^U~V}6Ff|mvuSn^ zITe{2znuO2o>%qZd6^@_e#E)PP$YQ-wA$A039d-D!|L z6x429(pmCMWQHOkUbt>j8-ESOI*#l+ch+@n6=YH>E$mkw-dLg|Nt@Gljdst=^s@Ct zw%6U&r3K}iAyD9EcD}O+e2L!v2k?G!=KbR7C)%hzT5z84PK$cxN< z{a;`;|L@ZO0&PwxEPchltL(z-Zo;4QuXop9FaJ1%IO3qJFZ{BUQoa4ztk0>wb{l`e3zyk+4*q&(kV z+MufbK))+ocXmOq4-n)7Fp?3t`mq6%v~NA>y?+LuLaD^0t$%B#d95 z;1b3+#rWvdMDGrggHS}{soj<9_w0JkyAa$Wb!efjFdDQaiDrT>imsIkxE4%&Th%15bwW2lgL7?!f1|67} z9f@UpW~EM+o*s|62>nDWJZ*yF9`?h^PtR2tO#wMV0&C^Ah z$YA8YhX^Vd15oPDwMzfSeaqBwAzrsbe=jVh=zk+fKTXbz^JI zoJb@aNyR5J^UaWQ9lz--QrM44TpWs2F0uiV8#~=jOjs?-hb$U4RKO;6%?~VyIxE=M zj;%k=A7zr5^>O|xiS7@y$pEN+jC4Dp%}w~em6@y%B41yYwn+*a1?u%!qQ)pokT4GN zCk^4AJ5%6DDXqq}qUP-Lf6Wvg-viSK&Hq4zrD6`AyyaGwk|i`7C&SjV7>ePlilj)EZt02 zK|*i|Td%^0^Lp?J2UHI)Bl(m9WCBF0&GK=@G3UG zl(6y0>l%z`;t$5@w_=Srcz@2;<@MaUDMTmO?KX|7S)Q^iLZw$)Zi;0chyi|~5$I(^ z?f;tjcF6N8CwGCA0%G#jyv*&Fzear=T%UAh5CMDgOl|vf`Bgq;wdVm`7i+9Np^3W^ zT+|G2-QDHh+vS5mnCvH>ir}%SX1Fr;aRwzB@pQoSuLIVLDAV;h7x3imb&Qwfa2tR` z&@I1%ojJ;vP_EF8NoT~TYR7^J_psm)PIj}UNw)st_4_GClzgXd-Y^Hd3GZAtx*Xt? z;qzO6wGyOoK=V!PlK;^kQpJ9!mXqSQeovzMDDK|H%aNYItFMSYly4K9Y4B<#R$#T( zsO&QfzkDSJ%Xa=!oA3a;@QtHe;y&B?Gur}{#+8wLBiz*fz)!@`;YzT8_&QMzOUuz+ zVC_oNA81$iQlw5?^4RLD2tzu$ZWEe+jc=eqlKBC1q-%*7f{j}HIscgeQVpoF-ZIE^O(Xg_~2 zhz7bJa(W+BvC9duwMY1(_<8I%V~ff4LYVk}{se$~ML!Q&O+NkGsvT#ldk z2^+)@tMTj*t^WkMG$J~Y{S=q7g|bZc3-0V#`lbk^0G>0zL_EO&XqS2$0AQ z8*26N){bbi()5cc?UY@Fy5w-WbHA zdBoupINPJao<^9QNm@VGR`{f2Q}ZUk3(Awk9y3;ME2?6&<``rF>Un*u<;_VHdiglV zF~om~t1GLA(Dmw$^p3|%$}EemcAg@(vwN|q{mGJtjk4EBFTyJ6*H(E(bQLU6;bN1T zW|@$=&;3k~QP-K>OcCGzK7Km(laPZso(zRC_dsWtC8_?k*#mE5Su+`hu<>b|Lw53PC_b9TstEfo%jG zK2oCTgttN3*{i-S*9zN7|MIr3r`H92 zG!}ug_r%QE2}9Hd714d<*YE%yU$7T3sch$%)K52}ufW8WegBJn?I185VbN=~?PZkK zs$tdD347~*ufo9Fmb}L=OkOGtF?E?+P5i&|v%>BKdSv2t0JG!~FyCY$LgdSrHk!?p zd#o{e9YU;+!prJArOgN^3c6}AGgZRYbc{;{V(iD8T0?T$2nICE zh)xaIiqvm7xAjy9E`K&*VzB06YJn%`S6)y`G$!!ZYbZ9_;nvp6e<(EM%b(w%zhST@uXL%E`aoNJW%&>5{bttR9c+F%!&jhZm+juHNfCtzcAtftGX80!nUm%_ zUoB71)SqY5#UBcfW-6>XE&b9tp7d7y_UcdjBNI=YY0WjMp~B~ z5$G<^xMHquuZ)aN(yt0Z#zNWmL|ZISap2$^o?eELQ;YrABd*|WzfmEMq1D(z&9GdnS;mg6D?RuBFVn|wtv1u)|*x%zg>ih)dJmQ-CB%%mr_c|`O265 z{5-tb-s;aWVuW$B+d{2S{1+ybE#c99N>z;Wja{D{MAN(Q~ynLC$$*v)7 z!NLy!9OyxnJrG5A?YD{qWccK7fv0ns!^J_`cGuGq<5^yuFIS(hcO@DIc05E+twG zHPo62Y6OJj*TlQYG22^bZz{J$W>^tD2B79dEO~KClDkUPzWW{^VXX$SAu z8u3CqtQ@|nIhhmusclEKDoaPOq$*ll6NhI%RHK8f2sgW>+b=~7-a-*{nlh~&=+1E# z($JXvwomF}JXov!ajaFg5FZXKi@9()Iin5P_l@608~Gut2*CUP7B!T zcSxy#h-xrre>Yj%@20n@x{fKym#OFIkEDExy!z6?J>Z3Iu{d5c6|jzthFMzaCTKdh zD>|x#E+{nakAjA|+=B@<6e~BsGv)kYNyzPGitng=Bv~4tA>Qjr$4gOHGnM1HW#$;+ zziU8gU{3c=G@7+AbI7e90nKCnb2X>Wu)sE40FIg7sqo8Nvve`nxf5qe-Y}z4`5uF! zSBI{J>8(=+zFE1~UnSYc*lO8^fx-~gn&!_&y4?15n!p+~np<(;Ulm)}eLS0;jtf>! zUnOYMGXG2@X8$(nH(6AtID-*uecFOH*GSCcH@`jh?EH0c+{KHFl5i5%4d;rU>$eJX z6RfwW$i@QxLB6ZzbYic}O$WNkaC|;3fAw$R%R-E-mV&ME1A?|L`Ib^i2=2$W1TO^z z>qcANx3*w@=k|ar-pLvVDdRx%yItdigJn= z&yrDP1aMu1&*9&|_ZuPfA}-CK#|{r7b$L_EdV%Fp+4Bm=vu}=%WJNITWcm4b6&|Lk zuaqxq9o8J>NDxp#t8m_$r=`ts(0${#0iG|o{=JVl$DPd&q|}|(a5!9wqp8}czG|mx z=OXjc-vV*;S%7<}tiC`P(I;)D>4GUGbJ(XJ`VY|hym6+n2-Dkg+ZyGO`brWEva$N` zh`&GV>zbmc1%66MO~VRC5=nBcsBx>zkl|8x?fNeH-Uz~HY`EBnpg`tynAY zx6UXmv@6x(mGx2}>|~grzae2}QJJJAB`Ae1a94M;C?~1u1Uz^zu`S{G^FLH;@y@-E zTz+sFNBb^0Lm7V=ZvP;M3EHKzMVs89e$nZ@eR(ZvzxEZs+`6s*UF@$~!%@>;x&exbxdzTlf0;pv96yJ8tO9DZiAwvvGLK*PL>? zfv#%(R~K^;hMUs!GAATgK0 zj2kEs#NR{bc|1|Fo6PQU#NF`~bp2B@yz&@`0RAdbGW zVlEqBpKwG?SFjpQo=-UU)J$gvx`8MHyz(G3m!@x=han(M*>{VLrDak-&~^!>Fy>T_ z%*s`R;F0rJtF!I^b!w=otL?awodDjGt02dP?OF2`uS*U0i)tQ4mS0QW8@3EzIG3xU zb!1z>P@LA7u2QRcC~yBFDh7AwRKIE3K2X?eNElPe;{OcV%mr6((qID}H$Ebc(&L( z4lM~CV;fB__%=s%HX6NHxZ2l|3k?zxyp1m9qP#>YvQc%Mos3ftJloHOxl`V%%kiWj z5NcYpCnw?m^}BPFvmi<)h@rs_qO9<+6G1YSItqE`6eDF5zb(VsY6M`zw69++&h$2y z@~fMG0yaD&rRBFdFRpSZPqQX*ekS;%X=^E!pxiVW2L(JTJJ8tUD&lX%#H%&-R)kRv z5bas3dctn#cBGqg5bd(KFQY^oNYRrW0A2osLubX8dWg9&7H7m7=v3v8@tp@yfSvf&;PkffOB9+-c&v> zj&^v#oc|699wjxZiD){rbP4IuJi2h)I2U7_W6r_KLjrgTEKY3F#ntt!j4AUMo|fB~ z^%lB?qGw}sZemsFT^zF4)zQ^G1-5c>&mx4x>4kkPl?++#UXfF06wRcC6QK?hX$S^Y zdtvFIez;_{_mc1r`WA;j2V!*utL{a}rF{TKPoqc|PD&6W%Y5-U>Q{I3= zr4qgEV3Ra`csBi=XhJ~)N7T7lqb!Fcwu`$m^7vY};gMUNE=cnqAl@Ib#BD!R(kTO( zEXTP-TR(eQkWegUeg1K@V6ieY=G+$rdk43YUYWDX7|aJ z0V&ya{4*0Ug1ZW@pB-CGnq3h6E!)$n?zrD8cWBCiOuBg{<__E#B;6R zqu&oPXdyc{o#P>mE^AR)^D^+$70$HzS2zpm7b-@IC6Dv#CH8OsU`VjDL*B*ijVwP> zZ?z71Cqu^TgF0Pb>ec%d5XK<#4}g9snguu#)y+n`vUvb721HbT!o@{jYL_1bV$t45 zkw0Kh3lnRG$7N)f@xq)L-kk`rk(C9IZ&s%8!XBSTseRKx4jTad^Np&M{77i%bw#Ba zKu2}<3--ucDu!3t!-H1y_1CgTc;8Vy>n7|1+k9VsfOWa2n|np28h26;LG!I6LOik^ zCu+3G0ef6OIEofXd@P3h1G&)9(d6dypDr@jvaf}O5r~@=j)Y%GURN^+)VE8(o1YaV zm;AJ(Z0}&?Ux=Fex|K)F^h=sVU8S=|oH5uu8?mDeOzplMaAX*e6&lA_PxZ_fsf=n_ z3Q=;}dyM`jZfvRx(vKJ=yH5@ke33LnQ|QDV)UY_&@U>Q~SRg0ORN4w%v7FP;NqZw2 zNxpWr95A(I$-qc}-akH#s;_ef^;ngqkc(v<;@QYs&@Ei)1uhOPh>-CVM}YN(bb<+F zvq!(Rdk~I=feSy3VYHAA>G}cMXt3Bj8-(yrbo~3hdU~+R>0Lu|I=~&gx8xgKpYvJ| zk&SLXCt0(9gqPzrd{|(Dk>8}dt z$>q`SavmvU0_oj`VJ(9%(RLEdQjIc%d8Gs17G23aEz>8O{Y87 z8H>Gx8`~y_TE9N%hAd!^#=git6?8V#RATH!{D0Z13QaW8f$ZZ1BEJnT{C$ZK+YdsxzI zlv?fLMdbzRAI3lJ6x_zCO9i2X(+S^LSrtC>zK2G z%x%ODsT=4M0xv54HKRJDR*Q~N8do)K)Z1ogzlwI*!nUTevOEUuvb?cukr~{p$kRDM zH7=q>BO!(G|E+63dwTfObWl81yZoq^?manii0S)dYwr_Ewr9atPGP>mIiZ)xja`KN zcNGHa>t7oI)JFg!_L%-%`G4fP4;0(4yWLsv1@p|+jL{euq+FsP8 zZ~H~Nj0Rq|732O@3QU_is>QzVG$7Mv z9Dxy&`v7w6J^mMBpbR;<4UPQFRVTH!C%;f-YL zKK@fu6p``s?k;PD#TbVoB;9jR(I+3X(|Hs_JooQ$PxhX?eC!D^D7G$W8z`-aXsG31 ztH90vYkF`opQyshna`RoAY7nVX&|J^4VKQ(NcazshyqFQ)U_Y^~wwkGUB(1vDbE49U$e`C`p>1J6E z&QTCc3HDj3e?gL=@Xj`RSs;EoJ$KRYCIjaD0>%^EJkM)a2g)mI;+|#GEZm5swtfKD z>Ol*e5>RYHzfb%F>>xehk2{DD(r`eCkM;S-AgEG`$Ce@VyuEf7;dJD*@mMJUsEgvzPFYo`h^$B{7^K|{ zMZhwiL>TH^b5Xg<23@k7@6yfR!8SOgMFY&Ux^sTzEwb{Y|ANp{KHGEB-$PlM#?4FC#Wl@`-HW2kH>4X zq!knuDiBDDl4Nn+JvUSt2G%SYQniXxyicx1hs&Q4fA zzYRXiB>|EO6#T@towLzOM=_h~0%NH7Xz8Qn(?Xs2eOIrgSR?aB6jp%b88*g>g-9j4TUKB^GtwoCgBC8r)o2x)7 zoDK<2Mt}5E>dohuL%HfBp&k-pdBvRD1I~k;T1!N%?)D4UEzp3K*orydXE_qoZB5w1 zCO)fY7h!n?9@ngbaJV-IFRu;VbcS3BCw$Iw8mjT_Xcp) zZL6YhX~0IT|KMcU%36s%P~mfU+ZZ?{6ySH5of*QGgFclJ=ryLUvW3ed9e%iC)JyUf za;GX(+y$o{!|0EA4uvAc2V{C>vv*JyuyFN@_%b$4AYof4@gBd$oBd31VFM5Pj0)^2 zK4>m(uSm*gm+SukO}mMSe%bUr`XkrBM#8Ob6gu-uHqPK;;F-dIfSWV0PmvyErb+-7 z=1qPEJ09Dn`v>T0mgbr71fA_-0=Hl1)GfPv=U&{)2Of{6O7>)87n^feJYh?q-NQb3 z?av|6Bl~3dKG4>dI@f%7M;I>k@G~dQENhc7cCllL7k=}bo3N9{p!~~|!G*IRfl1g2Qs#dY z@r{Ux9Gw#yIu8b`c}Vj81LQs-ZM@$8BE>MB z2AlJGEb9wAB^K=A5E9~ra}LxBc?{D6?=Woo@&L3SYR!#*$yyAvFA07E5k^=Vge{Lk zoxZgKMNf0>{IgT&jE{hq)w~W z2~)KnV;O>-z|AVMA-L3TbrXxK-mu@MpPcEaT`{~b%_Afkm^Uz+6v~qiH@}g%FNvi0 z`p1fP$Y1$1Zv8P&R|^hft#`Z6;_Vb1FD;}>CQz(2^$;6wNeRq@?bR9dM8*5g$7+9_ zSPPZ<=24SPcfry!5iN|2UqU-jB&k${YM`LuCZbyk1Yg!0Ak{ljHCKGgVXO-ycGtqf znU_Hbiq$fZ9h%NFv?pz~d6Pr>EXDV>b`KRcl2lYMQ|Th)luA3@6r>q zN77xN5}mAaR2~ted#O1PrF1p`C<3~V(+o%{$eG$EYO1)CXCEo_MDhu_JYaN?BkyV{ zw3i@=P|h^8VCIV^ax>61?LFhtb=(S);^pHPD*`YlM~O+AF-bVS;di+qr@Ezg;qj!H zbY9fnB!z_CD%&K@1C^OP$9gjLPzi0v!}+yxEX@ubu@F=v+{#C_?@XcHd(nrd0A{Zy zt*y7|Q5V*6&gHXmJ@<*$=M}A0$7K~A1f9j1TnFik^2=F4P+OV9SOIpTrreezzc1x{ z_CE7jvhjJ+pcdUjgk~ur%=uVz-lI1%P$~a$Y=UpL`k8D-zPPU3t^pdI32vc7O8d@8 z@5-Lx(#dlM*s2TQC~H2_GBU`P$f^RiiT+J|;-cm80SH8*S?Q;LdDrwV>Jz9TGVeSq zk~IRM=E&~1em;_w!+3H_B{Ft5{~^@zV%$OGpi)|%iIVFqvRgY=qft0VEF2uOMl|VV z;|s^?vGIp<6IUg0kZYD&)4o?q{w~daVEO8^lyfJHW z+9fha*j&YybQ4oRP+rRaaBZ7Js)blt;U?Wdm6c3u429;?mdxh(6UFO%aQDEX0$ zA@}vP5SAKRwbWHmCyn|E!@P8yCu=e|$wgHFreM6p@#taXw1-bp`U7{LOYsgnY`F&F>?;KpqEb8A{Pvvs;Cp9;SXC zTw}Q1cqtS4{kC?$N566fo=C);+RWid^yO-Hks4c|9?5wnDgYtvCMK9^i#B+Q{^Fkr_f(v~XTWu-fQEC4w}CP!4OMH(uUzTsUjy5XD+{U#+fah053fAttTuKeCK zsn4*!b6b3(!Ip|XfWq2*ON%xBk+5mMJl49x8`xzi_WIa9ObQ0@@zs0CY;IgkTov=+ znE=gi>V{(%_lLAzgxNjQ=XU4c002hCSG9iD0c(xXpZ6@Kc1*l%m^^6Lc+|LRM99l; z@vB8QXNmOm{PB|m)?07Y48@*@61@+s+BzL{k};1*b!$~CeTd|+N4&W{&ZfHzKXU5I zo7&n*4M($VcBgUZUkVI_R6;~_r9zB6StOQ>fZ&camqdU_GTcRH6!?YXGGWE~6U-p#}W@EjYTw<_N^>7mD@p`yLx`*6Ea3njqK?5B9ig33~D_zia)DugSe^X|)BUv6;Mn_r%`eMH!d6?PbN@%8E zWUE^{GVF|A))DQNS62;q_}uNy=2HsgE++yEtvPB5DDT;| zOJ=O{5ZW(;^YAOF6NH9+Q9ln_SoB$1e7w*e2g?@n| z=BkEn9yg(@kx>p=yM|{&#N?g_^HD6ds{>!EyO69fZGxjCcAdWsT-H`$hy{i~c*pz- z_l_JGFp&j*(EWAFh6K(O?dwnV`a;grfi-UZj-Dv0tszO}3J*l;Oiefy$qnMFC2oT} zTv(n;vEvfSNw6KC-e>7gnycfCY|~xP|ZSo=s(z$Zky8xjp)-so)Mn7&Qk{R&TJj?cztJp}a-Fn9zxj`BedR(abJ5+}x9{vHB#{7}|;we1@0P z9~Q>N*ek5=C*2y;=y65PIC}o5&hA*x{c&8_$YifJbo&&~$sv)hEE;C2s}I}0AK*vM z0Quu9YD%lHj$9_PpKL-#Bj+Mj{(T~lEB|x2?-NBzW|zgt*#MoijLq7ZaI%#g5MW^ZUw`N z-{l7vC!#r@1_|Fl-3s__5Bz&fQFJx4&VRexjhw zXU6sU*I!3BNA&45w1gziKpg3OhfTBD-{G zX?onAGQW_o-g2hnbRSnRh~wTCklLr5viq5};luSBlB2X`Z`_HClg-a;m(32kpDYkT zh`ba%Pv<{?6PsnU4&UJwBI?GDiz6$U;6}!X*LAI~<)(_8oop%2N@9=}QVrL~&sbJo z;{A3$K;1^p1!DuIC+oBQ&7Zt!e^6pQs{XzVR2kElFy5}lC8_U1<=MJb6DY?n^{qcf zjy7Jc2)W?P`C_5hQ^#FS!U0{6TWYd;QIFSi=poY^S7%)=9g5yuHzs3ji=kNuv#=3N z*c%gr8mDe|N~D^`2_1`o3}ILXx>Y%VI`+a72BS9{b*awf5%t#U-&2>id>gC@Xx|`i z>oz3K-IF^a^Gsy*(_ghFk||OQIzx73SgQ{Ai2%P)Yp!Q^XgQgD%@cT=cyKc|J@x-;yvQ0E?aXhwb(&^b;u`{y@f`z zK~Z<4D~ejJQ@gDiKuzX3Iqi8FnhQv7&gD%eiT3x;bl0q{2k|<8Q#7X{xIB*l#)X3i(t!b4_4 zUpNL>frR+uRy5ja*hP03sh1ydloq2Gk^XG|{?u-?u%=7SwKtR6gYqK=WyoBG-lLxC ziR>E%&CWa=>B=fmDF9ju426vSN>65o(Y(squh$q%g*0LEWv+J2VYE4E04lJliwQ+I z3x>KdY$wJHPx9ou+sWqW<94@duU4hjkE_6W_OIOErYl>I+WPP5I2WfiNCwrg4Kmxz z&H7OMV(it*$$$y2$k~fEjYQqv-}JD)#xe**#d6p1QwV`ecIZsKt8_k53U;KoBBN%| z)`8F}5W`Nl14mFJ^-^S$4r%N0Ld%UsyJM+5um0@QO?WaI8NH0*S^)_A{LNfUl|CE2 z7N+#MVr$nE&wHY&LH7BZRmQH3@#tCECyXoq~@rOux8#{Rqt@s2JM-W18uR?M%LOa#od8^?es ztg!mFe)OgypON_fUQeAn$qnMTB0l8vqrs8ILa6)uJvqdyTaaL#y}!4f70D)%r$z1h zIxnARt6SIZfo;to$XaTs?5hL{0{u(hyBA{5C*?-(Uarl-9?_C=$m7llZ|qJ(je%@w zXI=BE%iD2MLu1QBX$37db)vUlyeoTDAi^UV<+m@tRmxAp+Xms&CE!!=$?uRI^|Ril3tIL# zT~=BNqJ6Pq|GUr^P{G+D{?2JIWxx1N!|^T4QSa#gN^$-_F2?$uXh`Yc1@RCQ{3F=% z`s?0diqUBFE%(W(v*gg+E_nCs!fk+auy?blFwE{}%FYp@ySbRdDb>!2&2eDAyY)IM zKT?TVeMEo>*-G;1vybA1eCVma&y0u--UsmFZp^hr$l)%SNa>{&j|a^ zm1UdL7QlFyTY*C+=2Qwj~DmI$@;u@}{hG}=_ z{e29XM)=uKA2v(_DWeHK=oY-yAe}WRlc4$?FJ{)HA8+Izzr@mUEs-u^o{|OWHjTLG zQeX`K1UA7b zbyZI0 zRvu$P%f6x_NOw!!;d`pWGx^sR*#g&Ta`hXeE+JADSm$qcv(XAVyQ%1Y5~nEx=Z)$i zrhC(FX6b%zt&z3HQ7b9<5>$1(R{5TOA1^dz7E_ukX7q^b(F(iddv7p(MS>$VHXLG5 z5eAuTR;1n^MC^FR$Hu12yzEtUgBHizP=t1_Jx8eARmVaI_F1{6JNaJ}FYuRe(TroL zCAQCIu(kj)J7vk>d7`+#lb7ow$1M3V>sApT1f6r==tg{kqnT+p4NXV8Wm4^d2@c$YMb?d70m*6g=+nnNc7 z>_nq|xNg3IY(~{p^MTB^J(%fmD@Xzy$E!#D0FY0~!Ixrp3RiHK?-0d6lOHTih1Q&i z@3Y-9GBA1`FzTSb7SH{TD)1X$UHRUiCW|3_V5!wrlrz|LyiZeEU&vAkD<|Om>c?WeG`Pj~3P;C!EPBuYf3?TJlU%*2%5@pJB5& z_*&XndqX0)4&r2wz3M6VU`caq$ZjmH=zxxzEQ*CISlpRt47BF+XhZxGaMpDLf|4%C zpMEveA+()V(og(-(V1Uqga&c9o>s*q7ydG(`<{r0azlQ(d!XJ{j-e>|15UJNKv&x}h_*Q5!Sr+)QJ z8QWGi^5Guw@bPUVnYRERNkp4$=fHj-$jhOjAZ!?KX!|U164xPv5W`tMCPntIv!>in zxG42+Q1F~)A}(vzO5q*p!sP5;U=`^bI*@N-Q0?uIU*)d`N(fmC^|75RYC2FgW!0o4 z%Wm!zR1t)s%=_d(k!wT7c;IH}LV{ovq?CNuV~JCcfHD>}i}SP{^T^~5MRlhq>(!^e zq*l#}d-7glc_55y`Ho>ig5jAT7ucj`eMJPddt%RBJIDP3q+j;0>gN32`pP?QjxUd< zVlGFlkY#6&;jb|XfhQLmH@@ao;pOXKQYFnUkB+z+!Gx1LBhhqo=_JLP`E|_EC9;=& z20mS_HP}kA$s^wXyuFXwGoMtMK9>kT)@b(VLJ9AOOSD&Vm4_O}kg@r)Pnan(NaZjZ zh-Vc=(5;ea%QFOMq*!>YE3vpikp?#`B5@1wGWkpSkFMCtNr}ak1EpI=b&t#qMQW6} zJxr+U<9@%-4w7|v!onF*Z@x}yyze)5wXfH~V%RS{)T3W+pn()dljpjV2VM4dy_M?u z>*Dl7#nNoyy96P=!9$xhc@-E@C+rqi?+km$q@6y9SI#I@)wwT_E!x|uCxL1$ExJG? z3E_Ctt4iHWI}ZlbhD$<2Wm5*M8$U0+1l_>hkON#Yk1%JT6K*y=F?u#hVS- zvKkdB2cD0Ix*Kz4f-GFUIQPWOw+9R%6!Frd@f7c41l?Y)T$n^|Yw0p#)PGNO$nJXZ zeSvZzGK`C{c8>u^s(9!v&pF3mi8b@PPGhP$zApFf+)r^~vCu9zD}FlFIFi8%ou-?8 zQXwl<3I=2GTzTM5s%Sk23TkN<+i}i!U2efFJwd8NiHgCj;i2>mymwa*|iq{+9T zpK?Nry+BiqB|;%F$#(;Rh?O+rv26lfy=iTduCRxanznV=%X%C#O;@`+ohRLr>)ioM zq<8bl18oLhcSbDJg?pZ|+Ew@MaBCV6~wQm;tdplHgV%c)i83*x;C3^kgD719!gk}l9 z8F+S?^{$k(Y(72bjf0ze(cB7zg@y7==x>I~H*G@f0~kxsqVjFYDua~4KC@`Zf%nC5 zcYZp%oUjQ8{Q`)pNY#ZmkVx{wU|Lz{+z5e7jWWRu6S_@NS(v%IrK``adKh&VCV7WY zBQF$gdohx375#YPA5a*$R6;=8Hl=-#C_T`g#ulut3ePH>f>PGhWnr7>#(QYb!F|Oo z-nH*ji#ItH_{8>4vW!mZs@msYC=CBPa$CusD)CdP>^s&Vqr@rj&sYIPl;p+sz}c~? z_H_zJr)RrU2DEy9s1J?_dXtvqNnVZ;^N`_oq$hpIg3Mb{(4xJ|-%x8~S@71X!?=B< z#KEu^F5zew!si{LjBYENY>`#J3~B2tQnj0MCG+j)xa!gNI-UiWqYs0cS8ak?Hazjo z$2e?2+qV`W*rAH?6sVm20mHTq{qdU(ER;<9zn8<2Z}F zQGE)+x5NA+Am&VsuT1?sJo)x`SJBBnUQiauQNxd}zEBdE%2EzNgb zDnurmiY~GKYR1k@$+!1unc9Bxt#YtgTkvA$L>_l632`kqG+wwK$H*@*vNcn%*-vA7 zJx!$jjVp?ZW%L;*Cfw9{_9!&WurKD?!#PN^j1DJR`(iXSO-;Jom~SeyEM5>S9I#+i zER=XSyUzU0DZYxnBX26t_aOrHsGPYmH=B#%zAdFfQj%DR?tE86Qu zH3vHnx-51?9^Z^?YrFXji)0n3l|jsx=9ME&6-GuYQRcP&s&5KK1SWv?$aKtq#LKh3 znc(|cYd0st7>eZ*^$eL_H;Z0ZiWb%7wSD~S8=IvOdWs8V@WhMc(Mt-yEaXeswZb1J zoX>rDKO|{REr@~bE@yP&l~HK|mi(@YryOe@eV^g7#=Fj~NV4-MQwDvPHShU|(hU;> z{PD6j*;6)y9yR`u+7`AudGBi_1G}5?Y>D}gVmyEa@@1H$^?PNRy!T0QE zzLeZ%D|;%3nf&#`JqD5*0zTkL5-1M?o1%@p&m4I1S;+!YTTY2x0&0NdV=xsL$LjS6 zX!?Wq?kY@i-eqqbNg#>DpV8#SXG+QO{Slt0AP;fHmXB?t&6kW!A9WkOf=Z>!;s??o z_jED@s!e&CFR?ur3Xx6&iivr#`==lx?+zQ;A(rT))JiJ;=3@l9$=EMfmJvArj~ktx2u`Z z-o>Yqw6&$K$9m&i(|0(Nzs7kpz@4cX%fX{im}Ts50&b&`(B7HDE=e9v_?8{c5ZU;9 z8z(i?wpG4$3bI4H4mIslG@vSWea}urDXG|an})!J2&NoCd5T++L(qis0i|YH$eXYq zaC=}DmIJs@9{Wy!j@9AN%7TWU-Re*e+fN|=1$4Kaoes^RJ z(s;ArE&Y!&9sjlw>UWudtCBUk6LN$;#!m-9$pgPa3~|?7NQt?8i-iFWBc${h#QL^+ zQ611?voHBDW|G-WFWmEN*yE{=;ZN(|cs&OPe!lkRW6=CDSHvkk?t4Sg!TBe2ba^_H z6Z!2&yFMr$u~f~{1I?v~xL%&0wNxoaMgW;o>&jJHO>+6GHyia``~|)g>Rc*2Cs@2z zImX`8$st?1=gh%#Ud33amNt?;j}6aw;Ap4T`6m5^_kA*Dw z`;JoqzPsUf7)M7{eX;lm+4WPY%+~RgzpDA*`fyrSE?)GHV3y|*IPRy`r17K3q1K`$ zFLUIkV?M1CNfv4J%)kDkdNTWz`Ij%!$tAW3X`&hR+t3g`Enz~Qgbl}8D#fJ7ij%u3 zw<}|97s1tSQ~3#L&gaFWEkwy7Q_q%fW$T~o?0BuuW6Oz6TC)w!E+FZ8;1B4Z{$Omx zfyD33*839MSGiTXM@ub`axTnV6ygiw_2pYXIpX@SA@iR}EL4B}{2=%Ohn+Dyc zp}FV8>lvpzY{r6V5ewqsSV`rNocwG;JMOC%odzfx@IW_as>lpv zq@j>6_DE)7;yKJ}_rcbkSdP-8&=(G$Jm*nRo>9Nal|kRTL=}hWpcZt&xj;o3s@~>( zkbHFqYBwuj?jR3EDL86^k?jkXfJxiHAML+K8Qebv39T>3@==8uOwR9lCM_shD$GA> z+v$eQRvqfVAjA`W8I-RqJ;~F_Ck#G`MjmfuK*x%diLV{Dw+O1*3O+eauRdCJhN_Bd zW(CY!ZrHQuTv=bnZYujA+?#>;u;a-H0mR;R>*}xP_9y5lri%9Ymng4UTWkQz_;~^j z2JkC8vkgH|%wm_V!nLYhrV4aG%l~4CsO0~L_5L>wKT3ZYG6fg!rR{1z1?8gY_&Dan zIrA4D`(hdZmTk=h{xj>I=Pa+ugux2Y;?9V=d>fPwn5M(n;?d?yN4B4T3^lA)JpkbA<`|Fx* z@_6YRFZ+E%hnkMjMRy8|g@@BUD`p3&*P9=XEAssepR6+0Pd6|5KcQLh_;RMbSTJVD z?}?lDjYoB2nrCu1mqTW&7J#%Lq24+owYz1bm~tH^?ppZ=b1wqr&Kap^yG{cRyCn9h z@t4&2gPucru*DwoRlXL#ivLT=;z=Xbvw5v}#yrhdql}WI%dg*-H=lwgugA?`qs8*z zC+S9|XUaX{px%0%bOb>8EViv)>87Q2=XN(X-?jN3k(3r4KSN&z1@|{+tu=)Fp5aH> zUya)SMeBUAbd^2e!h^hZZj0b??bMWe!qa==7943HW*SUq*{ITh=)eP_JU<6F2&+%0 z5PBJ*c%}9pJ$DleaYVgYVsaZJfBhGTBGfGw5mtP0;vOuR+n3RA5XkHWfTpX883)iW zIK02|l~?Qpz-keK+)q}vm`*{xhs33@60ri^7FvfhO7Pd&DcDLvYfI)>UfXu^+3*h*_-9qiCK>7w2>~Y}5Kqt=k2MInE?N#k?p2=fd z>?<4B3*39!I+$Py1c;6)s=njzVC{eOby#eamR{Me<0$T^YcbA;d}GxDNw`%OfG9B8 zWf~=cfqFP=-)0Tdne3e8K;Od^YFR$RO8L%!RpV8sm7TH)Sj;T{ttS`{X$ZYj?2!*s z$#@Q}lY0s>cX~go=Ls&gc%gnfQ^Vbm0nkgsY85>KcN(V#sEHgI44SM<#(GhG{-c^R z#WuX0mn&(T*S`R{AB}VQLO}U2BhMI5&sUSbrFJa_O$ zvR+-F9&F;1rtEM{^=sO2T!-FF;WcC^yqJvuDwkhT zQk?A+2~#Uo=0=?o`SHy+_i*$Prwsw6dT1RrDCM`dTFv@qPzq$Y{OF) z&xswI_0{vj1a?pevu9^^dYG@GaGKHT8ArU2U!s75PAH0!Ne(EwzYEW*I)oqSKJU7< zPx;8#;jN%kNqeVwHy?0^Dn>KaY}(8QQETL*MU}R}W1(Qatw6JBB%*QhbA`s$KVy#o zLK4gYPGz;Bjk;41L*OW(bL(DH^hlwbooeu(6TlnxKmT?n_W*uSP5U$0CvFFh2sqT9F|1wiKti~15uhWiT~(F_>Y@M zaB40t*@UcW`1@NOUBNg=V?p$p=SHqR-igPl4}2q_NUt)W?;>!JJ&(H2N5TvXTj^J# z=m#??v>50RPW?fNtbHmqCeg&;cT6fO{9z@H(+i)w%ViRRESJF@Qr$6*z7MGM5;DOq z$hJ<9XJvwWLWb9amG`%8rK%!ty9R7NOU2rFn?zPJTIqbb1gEu=s09t$>jjg24HC7_ zcHeO`v-_hTT+s&B( zR3BbKrBt#9j|G2uz~OeQkkH?P46i{u3!gT&NRz{RSZJ0vfdm6W*F$~B!aHec8a}(X zYn%3Bo)%y7B}Hs!*#Y0j{EG}2K>tBVu$kT|KOk#2`V{1{zk+S>SlQaM&H6Kh4NQBm zK?Gc6KY&P7Pg)|9O|X0@w8^2m3ROZ!(#632I%PD8VuXX+?D#;|AlOblr#N0!cNFIv zvjI)&Lu1ivBmaH`{m<-p%ipq-#sm`+J&m&lnjtTB#$5TD)7IY2*Yf)M2cpkDA2(&y z<>*3JDrk1pI3t2%Z{CQMbJsx8RvnHb^Bj%3$R2J1prsY!zNpeLP;@c_I-I`MK5;NN ze?ais+@E#8+Q-$Nf>;ChfZlZ^T6T!W15uRb&i5#Cksbgtm?(AICqupSPbONb|0G}I zh^(Mx;&a$$fODNnK)Ch>lr(RWgxWl*gtQy~jpH~4g>9PxDF(QytFcNHgKID00YENE zELN&u8Z3GbLwcs&2>E!^hF) z=)E$Qa$p1JnfQjn{$9OQ^CwpOKaXkw@TiP`V{1;n*_H^cd E02pWoLI3~& literal 0 HcmV?d00001 diff --git a/static/img/products/product-11.jpg b/static/img/products/product-11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4a4c86824a6c61f9912cac99664c1d35beefb754 GIT binary patch literal 79959 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

LcEqb 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

*%)(!Gj6*WsL|`U_Y!XEkOue6tPwt?|Vkm+7m7 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

9oZgV&nrpb^ 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 literal 0 HcmV?d00001 diff --git a/static/img/products/product-12.jpg b/static/img/products/product-12.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c81300d3ab111dd47c4d0fb561c111994608b9e GIT binary patch literal 112684 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%0DM{tAR** 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 literal 0 HcmV?d00001 diff --git a/static/img/products/product-5.jpg b/static/img/products/product-5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7e26d8a6bf9720cba3528ade92069e250ccdd4b GIT binary patch literal 56613 zcmeFYcTii&wmvH7fWu&$U@+hznj`@x$1yfAfB_R_f?&uNAPGdyGd38TIAoK@tSS4p+i`&+Aff4x@kUaMQD&GoX%X3eC6fkt_T9bJ%P3k2s=lh zJpu;uvvmha0wq8IWi>x{TYFbWuZMPy&QQ1t?-~xz`w;4&!V8wslhAX2>i7!!a{$uO zI6&XTKETyp!GTvz^`Ww#q94p1=ICYn&=2MY_f+&#;r)kl#k1?bszJOD{{iuGRpEW| zSE~b-dQ6oGVnCDC?z2&2a=EhNyv&zNGeLmD@sW| z{ExzW)*8~mNzv$;=6|$x_DhBLKOV~0*B9vf7>GbRgCrFc6hIPEASo&FGlaOOKitdK zPaN*a_fHMa96jxkPCe5_w=%b+dFDMQ{g?+1B5~y6s2UJ%1X(p zKY6PDR8CS-L;lGV3C$Qc`%WhMV9`wU_44ReHh{ZrQAzhu?_N7=s&0_J|! z@-s&y)W^|56N!L5{KtbULjUK!$p4S}{zKN`f9{LI|0oMO>kR0x;r(yJ{m-g18~W?= zKaKb7$A6l?BmB(fk!QwzN(bEfhsgpQKAkzyxl44#fz6NUcPkc^0munAEv99 zFJEQ4as4{e_3Jl&xbctj!;M?Ff4F_?#@)O3?%lonfRmH+0ndMyb62ihxq0Iz`wu^` zbFeV8aQx?u|Lw);Cjj%+i$7ib>B2c?z&_2=^XD#HIDhfNe{i6QS@Td6A^ zzo{GX-HZRoQZ;Dzn1B5<^7T{JnS@;9jW1WLhwMEQr3Idu2(qy=pJ_k;m$I{R@xotS zILCbc#|x5A?p!pq^;qY<`&*S%{O7@s>UPMPjeAC?lYkp%sI$hH0cwClum9HNzc2r0 z;BN;0X5eoI{$}8B2L5K?ZwCHm;BN;0X5eoI{$}8B2L5K?ZwCG~2CiiM&aD)0{m`$X zZ96#N9D+~n3P+R>@95h@(ZuLb^vA?YnGDWNqO;)WM952hsnD+9LW(cF_}AL{*QHn& zkiWjnTK4-bkFH9ak!J!f2qmEUlix}Uiw+(AII~-wv8xwUSp*?|xzM>+>F4>ih{gF( zh(&sO4Sov9keSP0B7AfA3F--LBN8?oP67Npa!l`1o|-dyD@jEq{WJmWzD(uQbXt>l zpiGpH--9B7(6G6=`J7xJTzoh;I`{CnAT$vclxlA0IALSzU!kPn0hti)Zu2RRiZ37< zEn-4mWs%iDs{XP1(@`DVkd)DVQW#v_#b<%#kv_00$wo6>iNw_X{QAhR+y6QX-!JJm z_d9EW$8Yb`(&D1xJcR^T#q1~bNKGEJNZr{^%(XEDWOr zhS%JE{}vBAS)yAup8{l3Hp;aRC9004ZBojpHdo^VB~Kn77P^KLA*e4FXqF>R13L5^F^1xb6Jz?Cyd4 zkgSx$6gcR9d-9tVy{jFV4{>U5j}}h>LH*?EBg>@vJq`R4!Epw}DHC#gJv+6Xw(Sv= zU3rvO`6aY<)dMJasrA$Uk7IC8ANo*CfA+!?axkUMXPyI>D d|4=WxgF_k=W;4w? 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 G_J08QXp!&$ literal 0 HcmV?d00001 diff --git a/static/img/products/product-6.jpg b/static/img/products/product-6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce4100048dc822886133fc03b3691d510c5f59a2 GIT binary patch literal 45011 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

gH>h6049vhRjgoT7Sco^E}EE%)jVjjF=pj{@@n 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 literal 0 HcmV?d00001 diff --git a/static/img/products/product-7.jpg b/static/img/products/product-7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..602a3ece238a2cbc42250a480fd961a83b80eff1 GIT binary patch literal 46807 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

IEyZQU zqYxN2ukxdA-X-^fR&nKsFp3f>z{uM3_qL!c#JXUDqacoSa^Nq|2^ew)db!Y@DO%)J z7VOIz0GbDp!S-_L&8|z6Ed1doHQcFMBs;||afAout}wdM$J|hae(05Ad<4u!;u%MN zwn={AyuCFBWmMP0jQKjEatqw%QreOjHlAZsjUZ1>mFzxWtAu{Y@~vsjX_mANw|#WV zzGy0c5O`D+3L%|VPff0duv>6eoQO=``IK^)FjFO$+H$98Xt`Gh_2cmwz^(5n`7}pt zI~P-6l>d343#?qzw1hdY(6QhUytmWm-PaS1`E;5v><9(>6^iG`8(dK@)Q;C*AWYyr zzqGzL9kxO0gLl9CA_wLwK6zc@r#8$oW2%?F5w`NOtD$^+EWZI)xbp&?-{ z3j}N(0Xk=CSV;*T>VGcwgCeQ%g?U@O^F~I};XB)sw8AdJ;&iIS;7*h5R5jPovAxn0 zUvdUy9nxR^IdjkLaBr&l6P@1)=~QwRX8;SkgdAAdeZoq4#|M0V+KGuO zT{rYbNBI5SpxuGxV1uLA*}nIH98Zp>2E!{>$>N?+Jr*wiS;~rW6yLM4x13;qDlM}m zZ%X5GTk0*x9XburOOAJP`u|omE+rC6=l%sZPCF@Tp*H%ESXm990J$eqw}ou$&P!MN ziKSbO>A5x9a(6d&GDbvNIpl_5YUFbSg8Vy31~QZBpDSJSLFxU$#dlWf-(D8 zaLWgM8nik6QKdPjX;zt3%-Iq(c!;uI#)|c~7fz<;wCsrILB;OcS@3L=lFZ|HLDr9S zYKlQ-6I(MgReSt7wel>mh|}k5-cSpKM`ecL0%MkKev;_SjylL}C)49a!S>p+Xz0<; zqJ`Q0R?ol(x9opkpVeLvj<+f$8*r1)vh#)aRT3=JT9PagVx5J?96O)}Of8AY-mK7| zU2xU{7KjBS`CJRlfkm3A$?tHYNy@F+t4dvHt6aJ8ZM z&6Y2Otvym0N9_?oOL78!QE|LSI^w2H8>w zFHrc2-Gxk+Ac;HCyXStk&Yl}+ITy3fQBHcxnmWys^Yb>^7a)XBu4Ic^cc|csZfV8K z?~PWeFYlGw`OmTG8Yf$piAqblieQH7T)D+3{q1)Y?-V6{sYz`N$GMmssY)rPH+syw z;`{nuwg5pNuzSC(kdy|r^R41iT$-!zd^9#RIeG)_i?DMKDJI`Ou_<@2!d_JW>Vh8H zL?|l@PNSsKQ`F`3YV2R){9{jDx>ocy1Zo|uc1OyuviBW5cRC~;zp@DoUf*D|s%-7i z3xRtVGKteyXATcJ5GIywpjAVa%10tKSi5X4G!7X|Kr85`#(IIz-(#uHsZiIUT+8Q_)8=rJ2#m?R z%r9vAt?SMiK(q^tIsp}+N5xLQ$4xfwRy!B3tcEJr%XgRZL>xO~+&4*(U^rtzMNjNc zTtOU85;_GQjrs4 znAaR-kLbFm=`{Y0_k-WnhqlBoDG}4OA+M>Q&-MpW^*6f|wUsMB@@`D8+YJjT?giKD zIK+TqAu*vmQ@200Dg^|1KpR|l7bZ_oYbmYK&zz!`ne43iCWo07(Ks0maF>lwxsEJEl)=kxVK>`dunW@)zhjX!_>Zm-@Fob zr}WyHD0|U~B5~!qVp6(`&epPVUQa5=9gA06R|R1DU02ON5$Vl5%$z*e zVWWFt#gnKyMhj?!yysG}dkg0P#$f%RHGi`&Pj7s!uCcEvfWsz+P-@aNJ9Uw_sp?Hj zx=l19~)&_v56oLxj26pBkF<0j^FQ+HXB+qDDJ@*E>RD}}+U^`^8S>*1DLIexxCej$18 z7r%*Nfs<&MN5?k=dLRhg1Xy5Xj!b z;{z)@hroKR?2_+?_l} zH}KaC1)wG@>h^#bv1=(U^LkeGxu!roDMD6LRoz!e#hJ+?u*&;Yt#5y;M?f8FMp1K{ z|Ki>H9!3M1QTHNPuYHCd627f>5van>6kl6PVA>D{jk#nX9w@)IY69`hsCrz)>xu5O zw^b*NpH=9Riw)cHkw|JPayC zY$W5$d~H#xaL-&FI_!sA>vIwW?0cE1gJ@g$z@epRQmjZA2Yg0xm>94{@jX8G<~2ug zB!_mIIZYsHm#X34dexvrYEuinqXe~x;G!SitQuRVj>pP8GSB&_vKY9VfUWnZ95CLw zWPJLdC)Drc>iQ*-_Au!~#{l=yssL`wYVA+Ss6qctD|}DL^SqUP$GKM)O>TP^kwhD{ z#-ZSmX!(maIj?Nv{W^6w94ALrSv}9=-s>;& zO}g4&H5FNiX$mV9vzICDW1?v*AU(W|*`}G|1b1Kf|Xw-+bN0 z`N|7JVhvIdTffXcV6eW$se;e33eHJ*^G4`MY`{A^ z6J0-6kGEjrrG8NKC*r7@>-bVrDwI44K2aH1N*9mE4*4}T2(L+@`u`DC_G?TVd{BNRV3Vd4bY zfq9$M+_1Y`o`4H8&#b!2czA+5wcR&xnx9eV!NZG6hHV5YnZp~mQGBa~dh&L{JAyrl zD|gh>T6?BWD=PEk>*7+g^5hp}wOQ=;{#QH+usW5r;J6s^=E}9&(VZhAG6K2h%Rzz>(UvZ0wPl5JHpiv^I^Nx zaY4EY8&3IihB?d0ss5C5Xs>C4kVmO1@(8S6d|FLBlpn4t#dA2-<%pC)cS97=I#wt_ zK_Q*P98UW?u7^LE7N<6MVZL>l6X@2%ksV)OR2mjOx+hf~d<8e1?;&iQc9rQ|Uw?PF zfjZq_uMFm7l1DjgX9Yqo^fm3wgFn$5ufkG<3a`HN*0YYwYCzjfZi;^9P2S4T${t1i zQ;c>WJL$5*G8;C9LM!L?Snly+EHlMU85OBtW%46W5J0E2Svs4)Z@Qki9mOoHinS*H zW>tJjx3ERdsiPoJ5fUD|(@2CpsD}P9oV3PbkxUm#$aRQiTM;(RfDL|Ll5!}!C-E~eG3Kkoo`!8WC~QR+Fv2;sM5 zZEnxWzQxm&g8;9}2~w5daLW)mcFHYBghi~Ezpl~t^t^E%K|H)wX*5AdTOVN?14SPA zRC0=Zb3X8G%{MB`6e-li#&_dEfxU#<^xuFY>IC;4JF)bKOa5m0Vqde8Jj6N%o4Q^5 zL&6av)gPy}#~&!bD(W^3&5pWbI#vdco6|KX@AfdpFB!^KmUL6B%+9&lmgRBfZii)g z9=thPTW_NytTn0`+%=^btY9lMoyh{A1W4xID7kSriqDeqPTQpHo)g^?!|Q*;Z~*`w z{k~xfxGN~}OHOTDX)wid(cH={>=@{r=lMxG=fVwDcG3w>(>Q2EyQ95V1Y>8IFDH%&OLda7&ka%1S+brDE;| zGacEaAfx4jR|3yvU@IjF$^I4v#|r!TvP}e0ptj*n2Uq@7F+Gm57)6!Rucgmj`1#5{ zxyx(`&2T0e0^e40yO&yL{nB_rrle%QiZRvNxQMF1GfAiQmUFMHuj6nr%Hsy)OTC() z%1KU8aQq8n15vNQqNkt7N4LWS5Ky^vXaBx#%@sRmzNK|}k#_8mcstRq5uasW#X8x+L2m%}=jsnxM zl&}cHw9OlN4^dF-_fTDSg#6M$q6*g&XOEpz2yklY;Ho)tuudq#U`SN{sM4bzll9-) zd+%_z_xFEXm)7b~YHLqx?-iT&oEEh!M2v{qjflOeYHJ+()QC-6f+WODB4$fbiBY=* zwL*=UrIb3qocHJRUBAzN=l%ZkT&{S%5?3PE{k+%nem?HUo$+CX?r4lH0gE~K1Q*Iq z)w;>FIaEkRj3_%AI1ZK`dNzHr>^eChS?E3eI3QFGZ8xk8GJ6vMK}GqO!cnvXc1=^j z4^Yuofa?BqW(!p@+g1c-mrN9p)sC~vF@)*0)B=P69Zxy{hElrc19MUb&FiH@=z|Ze zO4GBHw2u+l9N+swhK*G+dZpa`t97lyvvSN7eT}U=X?7OizHxk8Yc0*(Z7=xyqChA$ zC z&27L|yt%8b2@(U&>Eq>OaDtbWY-!XLE87h4l7xPqY z@>4}a>mt72!@I(|Js17F72&LEj@tmv^{b9wHoYV&ObJDRop;lzYSs4J?IS<%)K3}B z-q$nXEczDaJRhKfgteraW@kT(W@5cR3(@db3$@~NwxQqGl5YGE_t|tk^)anGaV~Id zz2O5nSRL=8mpcdJmrHoROli+hcpNMbwl(|Ld)rNluaKUqezn$=N3^z9(PzG`gg8(p zR;zw1rlbniYQp`uL;4^(Uaqh%8PVTw$o8?RE?vl}5lwo>a{K(N$og|Z-~TS?oHgETXM|7S1Co=`h;HBdI3ZHC(M6@9k*56WlkyCwtJHGG#jNw)P!#<-* z-ZN}&#mEE>SlXK{tuXkf5M2YnKwQ?2c4&g7y32B}dJEJ?SX)tTo6$Tgl82HS z)7E+8D);Nx{{5!lPapk_Xg%_m_evM{lj+`q-C)xgIh$wKcQGKH-W5dG(Ig z+~tYCcGjB=(ilunR>=#cr3F#T;P`q>&ohtq0&zZlQ$Vt7iqXzind5Kt*%M&0>Wl?R zK29KONB-_~YSZSC1Eafr1zZ>V5keFolnWrsljRI}>#^_MwF#pg{5c#Z?4IY0CpPFC zkZH$oFWaQTp6;XVwUjFZYt+S%4VZVU#yo#+1- z?3%WZSgEO`BoHp}Po~RaE3#(5$wd2{UMIGMkyN(yJ-$QZP&<;KBq%NIHhCq>IMq-z zGwR*wef27q-Q&i*1jx+TXYyJMw})fW_8SsQM~_)iK9N2q)iAQNAYHUG+HmL(5Z3*? z;U$7B2)nJ`e0*^Y0y2BmS*J_Q)w%z^R&=7q9(Pqve1pI_T|!0=Tn6r?fLs2Nwhtk#w#O-d;=~ccY%*M9-YI!qB<)AVBVcf6N``@sAM$4{e5qQCc-HiNM)esb zyN^LdFkLI-Jdj6^Pio%lZ)uAij(AxX^icj4fB|e;qfQ3~{mCTV(H=IAkX{ZBq?e#1 z2JUjg`$m#j4Ck^Oqpxlfn`PhPw*1&sdhQ1m*RfV2@i@X^sND9}#m3s7s#AC6y$Y?M z$^}SZ#>wRfM0Rs|iQq|_+o)PjQ_GG|?x1{BUd#BOOn#RLOL(;(p>EH$TOGnRcnRoS z_~@*$`5R2b9)}+3SG!3)us~6X1{`F^7uYFzt%90z9z<`jCmgxj+u?l>%=s8-fu#n* zQf|dGISOLed4meE*YH|tek1v{JJG7Ehoa1`9#Jj{K}h+f_!;g7YI=TqaQxs64B{7# zf4q0#?0#gLlwJCI8mWv$`5pZ3l;D`suV@Gh?2XLVmwa8|7L!70Eqd64Y&{ol(z?2P z!|kMzXeKYHyH{FDjhz5<$7A<(ZO&V_vzVn=V3u~!&Xib(4-Iyhz$(saUHyGpl8At>{R%od0dFOr(Jkb7toliCBCz0LbKUEe8^>yt`Ct33byPLgDnvYw2oP14b}3h zjHLzI-h8%?-J?@i^tL+xWV$wCE?@k^;{-Y@vvIWQyn7bz^T!Q@b~Fib99?wF_^K$Q zQm^#4Ds6w+r&B3&D(mZC)z3hK*DgpOFs;nijhwBVpSuv&1$AI&tn z6ShTgO>`-TvNh|?@*np5@=k>SN} z{xh-4unR_5zyha`Z<`5*4Z~f-=xv!vZz+L;JFJJUaLHw9BRK$0zx;BrQ!6FpfarvN zLMl@(=PJeE!H>5tqcK0w_(m@%-#0|QVz{YDg$8`3y6XwHOM5SPyM^6uy>gyaY1FIbg11Nv z!0@pRE}7FWk@nJ9EE%j>?>XbVu#+NrQ~u^10T89OCjE$;oMZW6#b#1=oor^2WZ?_i z+f#m_r!j5@>iZTwf2{6pN`SekwdMHTxu>!Tqp~2%ggK7R{!HfYm6g z>Kg5169WdtBo{uy#ECp%={ZuI-O_$V?9`z@CjSj&{p(CxSZA0wq`*E>0d{)PLD=l* zPbU5!N*$*D9wB67Cb8%nh%?^Qvmcm>Zas{iIrE3o-;HI=H>0nS)z6$?U=*_}xVAo@ zja?UvM*DwhVI7H;%3~aGiSlGXazrDKTO-6SU!UFh1w%zl<4v6RG<>kDr_V-;!&Hzd#(}DBBiAj<1o~_9QWOE&#~!S>j19d-XZ@Tz5Y1g#2-hA zb%VQuw>v;uguvb*5D=vQ;@YUy>jF_n{`d@U^ltm*@Pi{T|oYii;*t*|0HN#sm9^Ytg+VI7H$ zPVtpT-$4;V{Vsdb+68{K<$iSw(G)%%f~w`$$TEcHD> z$86`(h5Xwq&&f5b`mCx26|3?lB#fU1OxGuG%ZuY<*lV*J7r$U zvpq8F7o&+A>P5<5xpqTYs4dG>Q?O!@X8|rtQzM&7-d`{l@89JtMI)-z3116uvPT-a zKR75T6yesfYX>pT2i*P3=D}KrK=Bz7C%fOZ1EbumSsH|;dMa-2q*dIKr2_*unPfUk(v?K z1zAc1Wkra>)~xQOB2a(m4Fdt+?=x@wjdtO8yUIM(g9ECb-UlAlEm5QPh7VWgcF#Uh zkfEL(do6p9W#N3%E!BHo(SN^Jn$g5!#K66~GxEPjQnNJ|1gOuLBxV~fXuT>41!*%Z z26`)N?zpFpJ{|MDS;AUlx&bM9bSL$P)3^4!tAjigTA^{dk&<6JN-0WQMz^dmO>wlz zv43A*g_IttQ@VW+bl}t#Lt|+)1?D)z*7Dut5*K6Dm9_LJQrF&g<2y1bJs(zryuAvi zJONcOx=iqddrmn{-7>`wol^4F9*mOgGHscvF1}u*fOP2y#!A8q?ab#Xcds;z;}bh# z6w0oH22(VYja__@Q%7i$MR-ZN&uzCPnh;$UgyP#Vma@FPRu3{BDuJLa{aS8~#Q%Xq z@Lx+3n4F%iVZbD1l;O`SNi!}e;@VJlk4^8NOneEH!ga^k{X9&Vv!FM6><|F562z7F zce1}M9P3`UrfEnwP&lB>wBWVHc)1z6ZgwJXaIFV|Wt#NUWE(zj3#z<;KKW(FA&XMy zKOd{i=!eO;^wRYA;pHigt^jk~b) zr(%kZvT1j2R4K>_z&zbfU5pii>UA4Z!VoI~SH=Lg;(2A}eHmVIzP0uEfb%P5shB_; zzS$~V(X1lzK`YR)${Brnk)zB8bsWOwnm)#3w2gtXeK68!CYhFwSTwWWUd)2qO>AoR z$pGV~)=SG;K^RgTclBYR7(dlL#Ejp0=6df$XF@Av$xrQj6e8C?sfT%@VYQM*!bvBO zq&(SPXcWr*Vvfuf46?q<;*wcu2$bBL15WsOs8$(hHqf#@EZZn^4Xu|qn^dDOTN~iCJ8eIR8I{uNg2t>&RcE6mL|k5{=OyL zM~q@b52r={FI)p!u=wGVFXh^f@>xN``4UDJe!WZn)#Ve-eL+wpPFw=xV5=K-KFtyA zE}g_@)>nwdB(|Zt_`^};4{)^6j7s^7y}@&UfP*4CT?oVyB?KQR;~(*U|iK79(8;jbfd^Dq`V^T2Mn4ON4x8&@YfhB&Rf5}gfQJl2; zuhJ_mUX&!;!m$Nl)mnG}>bXB)3|`zNl%;+cM^w=?OYWQ)N4_=UudyOl$df)x@{=ctrM^20?(d}#t&keDLXJrR+-9y(%;T($VMN$DUh|9C zj{|Hs7A1`2Sv5qk-DqHGso@2_HDHG%EVXNO>li$L7jVAD&->NBr&Uqq z)2@yWm=R#*jfy5U^upA(fuj2jJ0nbs8+V*7=a6?-E2|N-Y#ZkZvKjff5~e@(Qw4q= zi3x|B1jt=NHBwI~IFKPQ57sI3>};pHUQ{3ASBX+=Y}klY;V;=2F*BZ0iltdSN%L{C z;(hDmv#22u5 zb7?KFwT*n=q^ii|7HV^Z?E=yeb#LBVsI@eIc%2RqY}N=Lc&_o=KK@1~9@BolA6%qM zBnA>;{zOJgSgdgT$2KtC^_nx2ZNmlZJv+j?S|*WuJ}=MRay#?)YUzI&0RK7b8U`5P z-6ho3TLnz$s853QuA*B3TXx^im>Irrlbjpr#hF~;p4BPzVSuYL&j_-FJWgK>d#p)$b12#59>_$w^`1 zs6MDSzd}&jrmgBgsE0kd<;}&itRPTE;QN5zdP*D;ep9y?l20`5c{dm9@ag zWpLqe#LA^q1 zd4-(owD>C<2K#bhud6=HO39qlZQw1ed`@Y_e>jIbS;1P5NBrUP`h5D1oNZU47pHdn}+J-^kLYB0^DOb_NXsRbrNE z-lsG4_pf$HjG9W#+dr8k^X!^ES$#jv=2Q%+{4^I9^Lr_+h(C$T?zx#1cjbi=5<5Tz zmEzT#^r0eFoR5ZQ^M3UW9jjbwNf8sAp-=FVBt_othgr(Q(6ov@ElO%YWvwr+6bTCb z^lcT}unkFR?3PNhN-w_vwc+qz$y?d7&*}@X9i>;ty-h}{M4B4t>T&m>~7NO>o09NwP#Y7J3vSq%e2q%%eLVI(Nq$5><#wgdEe}6l`P-?)FOSG#D0DQGS_d8ZF{mfvy zhuS@j@ASV^now)bTx9D1IP`Rr&K807pY&u6xrzS9y~T>Yd=X^Pt5vH@>S7tsibhN$$xnKqsE{`+(8E-g8W`T{R*g^M9tjtKmsMHAg zz@KJmlNM09$;2&sO`?C#^E;GDq1I%ql&ArBLiv^K+OKR!ui!Uos?P`#j-LA8}NDA87A;BqCGbEp2zkLt?S?~7Zo!p+Mx-MV;YXeJe zN;An66&W#g9|-!^!0^JwCSZ^-*P)0zxVpOjGV2jFqFrv~VtlrW_wKiKf8veu9`5f) z1=Or6il1p2TIB0EbdFy3l_u;N=S69$`=em46bWPyw%m}jZ^8ZA3qA@Qy419?lEMtE zl-~9OX26zcc4IBc*1ls<1f!GTN4l{vR9Am{x)_G|jfZO5J^MS@^1Y^$xl(9AixjjT zE9^e+S+?#~wRkiB!!&IGk!8o#2~LZ4$Cm*jmGrU(*2vy%m9sLX^92ESN|cNmU3$}z zs>!}sj)z2ITxLN=r`m%1xT;H#U$-|4P}aFo>EZaRs*3RiVCObqdmWB-r&@Ssr6^I( zWmW4`5YsbNB;B0##Mm59`WaFgDKVST-|p$6x8WZ2TX)-4AA^y*3%er zKT_5rO4M65zvsfs-W^ftCq|l9rDFo!jn2F5vUX*Jl8gKS-Pm_oxhGBbpjC^`{&b?$ z3|i!5PhYxd2(bP~8U^TCN0vW1pBw;kEw^i!L&c-2H0IobewS~QvgDf4_S{vBTZr5L zO{vr`og&P3Dmo!TXc^y?1G}wTn3iRy#a=NZ#)m-)$HN0b3nyct!YNmzwyYK^>c7kJ z@|$3r-qydu{Az^d$N1@`2Gb(SKt00hVYk7>1TAVP<+m`*!o!_|o&XP?iv|XId6YXP zJ@uc1mjtpZ@Np=|t1I|<2G$^>q~GGMv(A-t62kTT!Ml1dHtT4-7sKH`V5VrEAu#+^y^`Hqap5Q&Af#@ny za(kDPOvmlMK?!RFC3Hc>$>H>%M4V&*Ux(f?uXe>^r=axv+}l5M+xzl{_fc^*n64$~?pNM&Qe-Qmz^=+Cv-$=+!7F<~o>*f!>5uE$ zYDI!V1L&EIDpBzLmIY0Zc(ovyJ@N_=saVZg7)Y{hD#;v$TdpBweN*rBt4nT|K+v+t8(%? z2Qu>AB-6Ra|LuVP*5xk_xqJ83&v3myZ%N2uK9Qn)PqNF*{_BsM#otyEj~s!k^+Yv3y|VlRLEj&m8+#7sW%jK+ zH!3DN#-BX=wtt{a|L8acIr7J(!nUI%MyO@OW%-&C{#9IEs%2)+U*}Ef^LBg043MIvk_^R~mH-RY( zc(%0u(da8QME2*m(x39Ip5Og+`1|m&Yy&`0Nuc2xO8ZF?JLx!~Y$t3X@KXleY-8b# zL>biw2%Co**y`GRfr6}R`(_LctuZl1TN?`v9k~|H0bvB(=8%CL+s=|O0^3}dl!@(8 z?Kj}~qQBvQAw^B+b*LDh4x4Xy*lL7E5EuZxh_BAn<$=KhJd=3z4cX`3!ynlmoeh27 zbj~e@&vuTv_utqU{$&;n8Y926k`FGSm~J(*zLxO*iyq@=b}Exa^ApxhIXSF$UT7JE zD=~9(UJy)$=SR9(mrUJqt zJ7pGjsN&mY3KRCGh9C?PT*PN3Y+E@T>S5$pQhin?Wd(ME_m^uN8qEc?v+EC+C5G3- z1-q&=1w!@Hld`yl(^_bdgX5%6wGyI66Z>7xt%fci2P`K&Xv6$4aTXZ?NXupG+9DgG zfFI0o_zIwxk^Aq>6DcoZ?7M*_n4Zhfs0(EBviEnz%GY(~3s6CAMw4bqwPR+4`*cIO z9wlBmsOm&h%0H7k!0c7noWJiYor6&^lBOnk_v5e}u!kXEc(v%;QH-<45&x2DEzD{J@`lF(#JkaqwDTDSP=YS*VwVCqC4*+pWkd-;vnloUUZ#n!0jrtXYyhL z%LB8 z-+uuMfq(-oJaeWc0xR<^(=L0086ZQqw0vb=vZP^`%UW6oYOzZoD4&()foZ@FuXPI? zilo2om+8G>?G$cZjU5+Gpdu^oP8|Z@cnxyjL@m;vV5UZ$#LtiUeaOn67iqOX;x1>| z4Bb`^t(=TQf!51cms%p@Mv3g61;WT_pc$45T(B;sLe)t(jo5x$DhG(eV!1*N;ef9?`1%QNDPsHK%cUA`>bd zr#p-YHLYgzZ=9?6Qp9D`#5?ZRVKO?Dk>xS|T~bvOH%(U7g1QLIl2=Rt#RSMy2|Q8+J zy9Qm6#prKXf}D|ZQgW816$1>U={4tlV3%PAU{tEIu@18l&xUCi_hdjl$07o}(^ zcRd=fOD}y@sdL?ZJ4+$u`m*tjQG$=epw&paVHYta(!{~01)paJ617LHEdJK9&bA-YYu8$ zeVHQesLQNsiXp#9ftybi`j#xah<2F+yd{UmlSY>HoiB=d!_Y?~8GWNPXSVN_FGh-2 z5At4p0cq%{OFCx+Mq;h|uV=;bne(0)s~qhen?>=qD3a0%=|TR1rpq-;@CV~=t+^*u zgs7gN-L7oxJl7@}EX)QB@=ax9S6+PX>p9DlDPW`C)ctB{x98>Mbl=tcL2L(YmX&rE zrD${GWtXwR@ou8G&Z8IQWw}yfN0_|@fQiTv*?J_c%gDmz1?9TB%O%+@Hw@56Y#3C< zbKVrMI%fRL-{0FeRd&sHATjfxP$gwmoE*FUM^qj#X)bLcD1(L2XjxE;lAQlu$Z4I; zpW(@ZDioNzQ}oe3eF2s{zU>LlNE{KiUHo->g&1$?nztXI7+;Jy3?`_LfMCG+?yc+y z_{AzIkL;RP6wm#itqoZ-T@`xHQ*R;mYS_U^M<|uiqjP}3T{9i&kv~QYC#Xl_`s)$4 zFQi#qa;|q2%`(|ET%g{wB}C`l@{0b<@rmhgV*>s=sXrU-`RN+@mY(|InSZhM{UI@1 zcflC>uG;@IH|-)H=<&qP@4_xk&A>s6dfDz-R<*aSz6Lt@h;Xe_>7}2RrPI`zERr5t zZ&&>@1Ku|0O&~S2u(xV@&F>3mqHH@yw4b)QWqlnX&VS7Gw$F(DIJAuuo2hal2f)hsgBoA?l^W|e z-6ZEr={#<%jq@N>&b~2ktW?c=_uNV~%=j!N^XB}gCd zV}DgsFwfvkxl71Fq>tB;sm>A#-L>7nOe*c`f0*XilnHU+8i9n(=elEY zbqt50f#U92K-wJMfW>*|JlN_lPcob<=I4K<5SPdxe;z)X`x%Et9{X0(l4y2^OLpBB zC*w7fY#w1$h!IkE8Q0 zv8n#SBYR8c9m`ursrnCrNB?Hx!BAC3KPF=;K}pV4Gl@%bzrD6HP9)n3w zSchLGVdgI8Zx)T#juLj;iHWHTthk$LuLcpq18GB%;NEcJ!&YLm1SD3_-c0`8V*JQR z$i)C+8Q1&)UpN3~w&&#i4JLu9c7YBL2#J063(?Y|`tX*=Ok7dwuUo|(&D#S<8!+NO zEEiy{-s%YJyyYWblboPz4h$NUeGWi%s2dPLh~UItX9E4KG9Z3c`aE{x!V&;vklv8C zWR9%+^%p+@Rmw}3@&ppavda%p3Hki{WMlhWvfoi10?f1WQZ#|kSRgM!6vsVd4IJr} zQ&G<5$W8two~3LRQY_ddAHqCk*F9!8H!&H;1+G|FSIG6 zqQYE_CD)@kp+k&g-O%b6Ildy4>k(O!8pDzuDZmuJ>g$LI*VZ`mkM||q{38|00Q!v{ zu9vIE3)TdEJB`{TVq=?)z_&3OI3IafOC!DV)u$JxQs<1&1J_H5qR)qO* zf1a8uNwo5+r93T4D@CBBNs(6iMNhFCLa34PiSo#mof)e%;@$c!%~fIfA)J@w;valVYx@Ct6+ z=L&8)`a85g1$4H7?tiwWs*zm#zA}36>ChBGGb`6yb?4Evp0&li8T|0wN?S35TIXvI z_pVvh5Du|vH2ntEwPPS~)7)Wq&RcaD2%B^JIuW8vkHr`+?KwudVF1(bkbp zOt$Y#1l@Vt)u``JNqKop-M|d^5>Pn!7PejEX7oBSoLk`3_usc zP9tykEmf4#P?c+0+U!;x1zQyjbE5^m#vS-KB%%EYx=^Fh&(GAv(kVn&lT;;x@?!*(Wmf2wEQBVlAiZ(2pE2lG22mOeVMFPfs`^2xWrOhdlDSo85zOA$StR z)PSRe8r*IekXmuh+s7?+-BYyn69%)YAo$~t9=%pV zvxFIk5uhWU?WQHPr)UPT3Q<^a*P;!!x(L?nNzn#oybv?yK-lS~1PN|NVN4?;(-Od^ zkh&)fQ0x~8OSt@#aF-yFlZ0#r>_ke_qYq%4oCmT|%ixw*tSc?8c^laIPH{f2z&>e! z#0hC$4>deb?F1N2NO6}QNbU*gNOt4e4^76s9HzWM**v>cqz@0b$+xip4TRDPA=zlL z(19P=?_rd|0suM6L!Oz`0<)R1@hxAcVe)a0EV{-#7qXRzL1YfIDq@j)i|UAlQm$uy z2Z_CIQtWG^;!8>7Y{FXTuI(Os#BPE!_zCRcANwhG3$0!59|-ow>{8>}f8exKnt7wL zvD%TgE)t-A0H)7cHAQg5yYc#YDm^|;knP2=9H6q!Hk&0opyb=WMAe6p{YYH{*=qT_ z!QVTZ-8;%vPItA(n*zlQHjenMa%=%&TYc%I6;cyNTJq^yN%6 zV@j{+)jNJ?HSS%adB3)9b|#%M+x+s55&a&q*2lbED`c>BT)fh#1&5DqH0jyTpjN{q zp9v--%AiHXLqQ9Nkr}vygB7>%;LZ2l7K7{qH*|4@b-Q~EipIA^MPYoMILI+I++rK2 ztLF&{aaXEz#X=(!8~`n(h=DAlfqrgb#giB+eXb_fyRV~l@fEj(Vgq0W@ zxy(Mmqhad*y$oHBk<|3R!*^Pl&LPIky+nb}{b#c}AkL#q%^1o!7)~Uhyb8RURi~{1zP%+-m zB<704$bAPpC_u-_2bpqh=%g{;A&ki%;2 zK03}JyxBYZFtUUcVGuUr)9COrm|7_(Q=HJf9zVK9&kqp3A5@naB!-4OZRwkzg^<3h z(ltl^%F8h$c%xOvba(iOD!FX2yn90!g>FH=PjCqOa#`nRDc!Uj%!S3omCL*5n`V`L zMK6e$enr1hsH@9|>ha;OBtC%4mWcDDnk%$jr%n%Y_>CbzhL!7sefjx3-1uM!k9uNE>I>(ti?QbwbxxxW|yQiMeVzIdqylz;fThg}eSN&+Kg zcjrK!V@fR6!CI2uBGZ`H?I87C0S!7qINya3BU{lSDU)h0ygyRwj5avzt0ix&AsEDF z#_>0m{TauiSmF;^`tpK;1=eRn?apA^VD-1640sv+#_ZH7gUB!#dY8DT)f?Zpv2lPa zY}N~~B|c%h8qL{#%ZGQAWBBZYx^sa==FtK&pnH?Il%mQ1D=hq*S4Mtp9nEN261+F` zfr0G!rQrHm)Vjvp1%c)$3D)}hxeJJa;qHYGmEH&}!R-gsv!(c~EfPPq9&l41poHcUg&Bzb;X-D}&pK#ZCvAhz9kVUdiy@%Yv*xWGX95>Zr>=bl+ zLVKt{%QSOqs_ID#zgx)o?y`3{FmDV#BBvO}BX4le;7hl{_`L{cpeE#RKYoW(@9NI+=LoNvd6IpW$Qtl5 z2Nq`yV_EftSnHSYWMO##nk{wM9m*LOndxLMi9;89MT(yL8a0%dbO*<;-nA`V_)75Y zxcON!jnKF~)pEEalT=V|Gcr1Bd$G9d!HT4gBnW&S>2k5Tq;3^lx<6}WEFJl@l%U~5 zjSoQJ4K4IDDKGA%Yy=)O`xwFHIh}eu*XRWF5MV9xe5w|>#=Yp=P zKI9la7s%|t%cxD=`#0D9f4`l%;T(tDEzhxgV}Gsx?aX_LzKrbDwwg&ALOncVw>(oB z{hXTVV9kC-ZQ3Dgq^UvFzt4p*>+6}wdD6CZM*x;xj{W8k+ICZReWt2y^*F(<9oB8J z_#XFU(dFy@!Aj2F#DT0#-7&k(KCCJBXFm4$(w3G&c>r8aTJUAV6i8=aczPHZ3qF5% zX;lpeT||*J+bqZQlA-XAbxA2-)#2N*80>y#dfuPxo#${KsY~?!Zh=MWAq;5 zSNgdi{zH|zbCTM;0-~o(ZZb?C{}!F~|6b((=SG3Kim@9Rws?1m#?5#zF|x^2Ys`7& z+BwF2XP>{;UH1~J)@eS2kU3ZlnMH{d<}X?LlZj#X-)7fCBfmGE7JjM4oKlXcA&`2g zhipT{kM;-E#arQ~>≦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%0Aj3{_)sJ2^AaD`2TP8nUwwmd%s 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 Zz#kg;Lj!+k;13P_p@IK58u)Sae*iBn`J(^; literal 0 HcmV?d00001 diff --git a/static/img/products/product-9.jpg b/static/img/products/product-9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..350de4223bcfdc80d330c4353ca330f8da52d295 GIT binary patch literal 130553 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 Date: Mon, 28 Oct 2019 23:12:11 +0100 Subject: [PATCH 34/70] fullcalendar --- package.json | 5 ++++- pages/_data/libs.json | 10 ++++++++-- pages/_data/menu.yml | 5 +++++ pages/_includes/ui/chart.html | 10 +++++----- pages/_includes/ui/fullcalendar.html | 16 ++++++++++++++++ pages/calendar.html | 11 +++++++++++ 6 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 pages/_includes/ui/fullcalendar.html create mode 100644 pages/calendar.html diff --git a/package.json b/package.json index b1f5e7a17..256d122e5 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "bundlesize": "bundlesize", "browsersync": "node build/browsersync.js", "assets-copy": "mkdir -p dist-demo/dist && cp -R dist/* dist-demo/dist/ && cp -R static/* dist-demo/", - "html-watch": "JEKYLL_ENV=development bundle exec jekyll build --watch --incremental", + "html-watch": "JEKYLL_ENV=development bundle exec jekyll build --watch", "html-build": "JEKYLL_ENV=production bundle exec jekyll build --destination dist-demo", "lint": "npm-run-all --parallel js-lint css-lint", "clean": "rm -rf dist && mkdir dist && mkdir dist/css && mkdir dist/js", @@ -90,9 +90,12 @@ "yaml": "1.7.2" }, "dependencies": { + "@fullcalendar/core": "^4.3.1", + "@fullcalendar/daygrid": "^4.3.0", "apexcharts": "3.10.0", "autosize": "4.0.2", "bootstrap": "twbs/bootstrap#9ee9b8a", + "fullcalendar": "3.10.1", "imask": "5.2.1", "jquery": "3.4.1", "jqvmap": "1.5.1", diff --git a/pages/_data/libs.json b/pages/_data/libs.json index f088df092..4e0746cd5 100644 --- a/pages/_data/libs.json +++ b/pages/_data/libs.json @@ -12,10 +12,16 @@ "jqvmap/dist/maps/jquery.vmap.usa.js", "jqvmap/dist/maps/continents/jquery.vmap.europe.js", "peity/jquery.peity.min.js", - "selectize/dist/js/selectize.min.js" + "selectize/dist/js/selectize.min.js", + + "@fullcalendar/core/main.min.js", + "@fullcalendar/daygrid/main.min.js" ], "css": [ "jqvmap/dist/jqvmap.min.css", - "selectize/dist/css/selectize.css" + "selectize/dist/css/selectize.css", + + "@fullcalendar/core/main.min.css", + "@fullcalendar/daygrid/main.min.css" ] } diff --git a/pages/_data/menu.yml b/pages/_data/menu.yml index 208065334..a584c39c0 100644 --- a/pages/_data/menu.yml +++ b/pages/_data/menu.yml @@ -18,6 +18,11 @@ charts: title: Charts icon: pie-chart +calendar: + title: Calendar + icon: calendar + url: calendar.html + layouts: title: Layouts icon: layout diff --git a/pages/_includes/ui/chart.html b/pages/_includes/ui/chart.html index a4cdd0717..6c83a3b81 100644 --- a/pages/_includes/ui/chart.html +++ b/pages/_includes/ui/chart.html @@ -9,11 +9,11 @@ document.addEventListener("DOMContentLoaded", function(event) { {% if jekyll.environment == 'development' %}window.tabler_chart = window.tabler_chart || {};{% endif %} - var chartElement = document.getElementById('chart-{{ id }}'); - window.ApexCharts && ({% if jekyll.environment == 'development' %}window.tabler_chart["chart-{{ include.chart-id }}"] = {% endif %}new ApexCharts(chartElement, { + var chartEl = document.getElementById('chart-{{ id }}'); + window.ApexCharts && chartEl && ({% if jekyll.environment == 'development' %}window.tabler_chart["chart-{{ include.chart-id }}"] = {% endif %}new ApexCharts(chartEl, { chart: { type: '{{ data.type }}', - height: chartElement.offsetHeight, + height: chartEl.offsetHeight, {% if data.sparkline %} sparkline: { enabled: true @@ -61,7 +61,7 @@ document.addEventListener("DOMContentLoaded", function(event) { {% if data.type == 'pie' or data.type == 'donut' %} pie: { - height: chartElement.offsetHeight + height: chartEl.offsetHeight }, {% endif %} @@ -133,7 +133,7 @@ document.addEventListener("DOMContentLoaded", function(event) { {% endif %} })).render(); - console.log('chartElement.offsetHeight', chartElement.offsetHeight); + console.log('chartEl.offsetHeight', chartEl.offsetHeight); }); {% endcapture_global %} diff --git a/pages/_includes/ui/fullcalendar.html b/pages/_includes/ui/fullcalendar.html new file mode 100644 index 000000000..081e0b145 --- /dev/null +++ b/pages/_includes/ui/fullcalendar.html @@ -0,0 +1,16 @@ +{% assign calendar-id = include.calendar-id | default: 'main' %} + +

+ +{% capture_global scripts %} + +{% endcapture_global %} diff --git a/pages/calendar.html b/pages/calendar.html new file mode 100644 index 000000000..301fb1399 --- /dev/null +++ b/pages/calendar.html @@ -0,0 +1,11 @@ +--- +title: Calendar +page-title: Calendar +menu: calendar +--- + +
+
+ {% include ui/fullcalendar.html %} +
+
From 10416d7e7438d72c36399c336961d97c0c654f63 Mon Sep 17 00:00:00 2001 From: codecalm Date: Mon, 28 Oct 2019 23:15:07 +0100 Subject: [PATCH 35/70] libs `@` fix --- build/copy-libs.js | 4 ++-- pages/_includes/layout/css.html | 2 +- pages/_includes/layout/js.html | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build/copy-libs.js b/build/copy-libs.js index f4e6525cc..362d0a41f 100755 --- a/build/copy-libs.js +++ b/build/copy-libs.js @@ -5,7 +5,7 @@ const libs = require('../pages/_data/libs'), const all_libs = libs.js.concat(libs.css); all_libs.forEach(function (lib) { - let dirname = path.dirname(lib); - let cmd = `mkdir -p "dist/libs/${dirname}" && cp -r node_modules/${lib} dist/libs/${lib}`; + let dirname = path.dirname(lib).replace('@', ''); + let cmd = `mkdir -p "dist/libs/${dirname}" && cp -r node_modules/${lib} dist/libs/${lib.replace('@', '')}`; exec(cmd) }); diff --git a/pages/_includes/layout/css.html b/pages/_includes/layout/css.html index 9743cdf14..5ab11da6a 100644 --- a/pages/_includes/layout/css.html +++ b/pages/_includes/layout/css.html @@ -1,7 +1,7 @@ {% if site.data.libs %} {% for lib in site.data.libs.css %} - + {% endfor %} {% endif %} diff --git a/pages/_includes/layout/js.html b/pages/_includes/layout/js.html index aaaddb1ca..d94a69d23 100644 --- a/pages/_includes/layout/js.html +++ b/pages/_includes/layout/js.html @@ -7,7 +7,7 @@ {% if site.data.libs %} {% for lib in site.data.libs.js %} - + {% endfor %} {% endif %} From 9431abcf4beacdee1daa7b32d447ceae5068f6f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Kuna?= <1282324+codecalm@users.noreply.github.com> Date: Tue, 29 Oct 2019 08:38:10 +0100 Subject: [PATCH 36/70] Update README.md --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4583b84ca..2358e0b3c 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,14 @@ # Tabler + +Premium and Open Source dashboard template with responsive and high-quality UI. + +👉 [Become a sponsor to Tabler](https://github.com/sponsors/codecalm) 🚀 + +


+ [![Backers on Open Collective](https://opencollective.com/tabler/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/tabler/sponsors/badge.svg)](#sponsors) -Premium and Open Source dashboard template with responsive and high-quality UI.
View Demo | View React Version | Download ZIP | Join us on Slack From ea02e8692a942c902986884e25241d1cf7881f2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Kuna?= <1282324+codecalm@users.noreply.github.com> Date: Tue, 29 Oct 2019 08:55:22 +0100 Subject: [PATCH 37/70] Update FUNDING.yml --- .github/FUNDING.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 7568ff105..6f0752bd3 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,6 +1,6 @@ # These are supported funding model platforms -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +github: codecalm # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] patreon: # Replace with a single Patreon username open_collective: tabler ko_fi: # Replace with a single Ko-fi username From e12c86a44dd99eca3bd544b9b0122fe32b1f9d2f Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 29 Oct 2019 15:43:06 +0000 Subject: [PATCH 38/70] Bump rollup from 1.25.1 to 1.26.0 Bumps [rollup](https://github.com/rollup/rollup) from 1.25.1 to 1.26.0. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v1.25.1...v1.26.0) Signed-off-by: dependabot-preview[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 256d122e5..640383d8c 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "nodemon": "1.19.4", "npm-run-all": "4.1.5", "postcss-cli": "6.1.3", - "rollup": "1.25.1", + "rollup": "1.26.0", "rollup-plugin-babel": "4.3.3", "rollup-plugin-babel-minify": "9.1.0", "rollup-plugin-commonjs": "10.1.0", From 3eb1aa443c7db09b012a738476207ea47174d508 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 29 Oct 2019 15:45:50 +0000 Subject: [PATCH 39/70] Bump node-sass from 4.12.0 to 4.13.0 Bumps [node-sass](https://github.com/sass/node-sass) from 4.12.0 to 4.13.0. - [Release notes](https://github.com/sass/node-sass/releases) - [Changelog](https://github.com/sass/node-sass/blob/master/CHANGELOG.md) - [Commits](https://github.com/sass/node-sass/compare/v4.12.0...v4.13.0) Signed-off-by: dependabot-preview[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 640383d8c..524110ba9 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "eslint-plugin-unicorn": "12.1.0", "http-server": "0.11.1", "icon-font-generator": "2.1.10", - "node-sass": "4.12.0", + "node-sass": "4.13.0", "nodemon": "1.19.4", "npm-run-all": "4.1.5", "postcss-cli": "6.1.3", From 6ea85a54b38a017177b63837b07873aded284389 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 29 Oct 2019 16:02:33 +0000 Subject: [PATCH 40/70] Bump eslint from 6.5.1 to 6.6.0 Bumps [eslint](https://github.com/eslint/eslint) from 6.5.1 to 6.6.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v6.5.1...v6.6.0) Signed-off-by: dependabot-preview[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 524110ba9..de9e403f1 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "bundlesize": "0.18.0", "clean-css-cli": "4.3.0", "cross-env": "6.0.3", - "eslint": "6.5.1", + "eslint": "6.6.0", "eslint-config-xo": "0.27.2", "eslint-plugin-import": "2.18.2", "eslint-plugin-unicorn": "12.1.0", From ff86e3feb146e81ee938826eee016722f5f59df5 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 29 Oct 2019 16:04:15 +0000 Subject: [PATCH 41/70] Bump stylelint-config-twbs-bootstrap from 0.7.0 to 0.8.0 Bumps [stylelint-config-twbs-bootstrap](https://github.com/twbs/stylelint-config-twbs-bootstrap) from 0.7.0 to 0.8.0. - [Release notes](https://github.com/twbs/stylelint-config-twbs-bootstrap/releases) - [Commits](https://github.com/twbs/stylelint-config-twbs-bootstrap/compare/v0.7.0...v0.8.0) Signed-off-by: dependabot-preview[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index de9e403f1..fa11fdd41 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "rollup-plugin-node-resolve": "5.2.0", "shx": "0.3.2", "stylelint": "11.1.1", - "stylelint-config-twbs-bootstrap": "0.7.0", + "stylelint-config-twbs-bootstrap": "0.8.0", "svgo": "1.3.0", "terser": "4.3.9", "yaml": "1.7.2" From e67f6d20ec9a0f8271bc1f7dc5ad91d8ba5f53c5 Mon Sep 17 00:00:00 2001 From: codecalm Date: Tue, 29 Oct 2019 21:30:26 +0100 Subject: [PATCH 42/70] users list, fullcalendar, snippets --- package.json | 3 + pages/_components/progress.html | 8 +- pages/_data/libs.json | 9 +- pages/_data/menu.yml | 12 ++- pages/_docs/progress.md | 4 +- pages/_includes/cards/charts/sales.html | 2 +- pages/_includes/cards/progress-multi.html | 8 +- pages/_includes/cards/project-kanban.html | 2 +- pages/_includes/cards/project-summary.html | 2 +- pages/_includes/layout/homepage.html | 8 +- pages/_includes/layout/page-title.html | 27 ++++-- pages/_includes/ui/badge.html | 1 + pages/_includes/ui/button.html | 7 +- pages/_includes/ui/fullcalendar.html | 18 +++- pages/_includes/ui/progress-description.html | 14 ++-- pages/_includes/ui/progress.html | 26 +++--- pages/gallery.html | 10 ++- pages/snippets.html | 4 +- pages/users-list.html | 84 ------------------- pages/users.html | 63 ++++++++++++++ scss/ui/_buttons.scss | 10 +++ static/img/photos/1b73704b282a8ec6.jpg | Bin 261709 -> 205285 bytes static/img/photos/35b88fc04a518c1b.jpg | Bin 165942 -> 176221 bytes static/img/photos/36e273986ed577b8.jpg | Bin 175463 -> 145029 bytes static/img/photos/3d2998219313cd37.jpg | Bin 89771 -> 230100 bytes static/img/photos/546fd146c83f428c.jpg | Bin 89788 -> 142334 bytes static/img/photos/6ab3200b14549f8a.jpg | Bin 179324 -> 168190 bytes static/img/photos/6d35d9a2bd6c63c2.jpg | Bin 125953 -> 389495 bytes static/img/photos/75b555b99d5b38c4.jpg | Bin 97129 -> 345537 bytes static/img/photos/8a26974ee6444acd.jpg | Bin 148105 -> 203014 bytes static/img/photos/8fdeb4785d2b82ef.jpg | Bin 125938 -> 248677 bytes 31 files changed, 183 insertions(+), 139 deletions(-) create mode 100644 pages/_includes/ui/badge.html delete mode 100644 pages/users-list.html create mode 100644 pages/users.html diff --git a/package.json b/package.json index fa11fdd41..48c2f5d46 100644 --- a/package.json +++ b/package.json @@ -92,6 +92,9 @@ "dependencies": { "@fullcalendar/core": "^4.3.1", "@fullcalendar/daygrid": "^4.3.0", + "@fullcalendar/interaction": "^4.3.0", + "@fullcalendar/list": "^4.3.0", + "@fullcalendar/timegrid": "^4.3.0", "apexcharts": "3.10.0", "autosize": "4.0.2", "bootstrap": "twbs/bootstrap#9ee9b8a", diff --git a/pages/_components/progress.html b/pages/_components/progress.html index 7359ad82e..bbcae1f94 100644 --- a/pages/_components/progress.html +++ b/pages/_components/progress.html @@ -3,7 +3,7 @@ title: Progress bar columns: 1 --- -{% include ui/progress-description.html percentage=45 %} -{% include ui/progress-description.html percentage=32 color="red" %} -{% include ui/progress-description.html percentage=90 color="yellow" %} -{% include ui/progress-description.html percentage=51 color="green" %} +{% include ui/progress-description.html value=45 %} +{% include ui/progress-description.html value=32 color="red" %} +{% include ui/progress-description.html value=90 color="yellow" %} +{% include ui/progress-description.html value=51 color="green" %} diff --git a/pages/_data/libs.json b/pages/_data/libs.json index 4e0746cd5..899d3e094 100644 --- a/pages/_data/libs.json +++ b/pages/_data/libs.json @@ -15,13 +15,18 @@ "selectize/dist/js/selectize.min.js", "@fullcalendar/core/main.min.js", - "@fullcalendar/daygrid/main.min.js" + "@fullcalendar/daygrid/main.min.js", + "@fullcalendar/interaction/main.min.js", + "@fullcalendar/timegrid/main.min.js", + "@fullcalendar/list/main.min.js" ], "css": [ "jqvmap/dist/jqvmap.min.css", "selectize/dist/css/selectize.css", "@fullcalendar/core/main.min.css", - "@fullcalendar/daygrid/main.min.css" + "@fullcalendar/daygrid/main.min.css", + "@fullcalendar/timegrid/main.min.css", + "@fullcalendar/list/main.min.css" ] } diff --git a/pages/_data/menu.yml b/pages/_data/menu.yml index a584c39c0..7a8051b4e 100644 --- a/pages/_data/menu.yml +++ b/pages/_data/menu.yml @@ -1,6 +1,6 @@ home: url: index.html - title: Home + title: Dashboard icon: home forms: @@ -23,6 +23,16 @@ calendar: icon: calendar url: calendar.html +users: + title: Users + icon: users + url: users.html + +gallery: + title: Gallery + icon: image + url: gallery.html + layouts: title: Layouts icon: layout diff --git a/pages/_docs/progress.md b/pages/_docs/progress.md index c795ac88c..9f32dc4c9 100644 --- a/pages/_docs/progress.md +++ b/pages/_docs/progress.md @@ -14,13 +14,13 @@ To create a default progress bar, add a `.progress` class to a `
` element: ### Small progress {% example html %} -{% include ui/progress.html percentage=57 size="sm" %} +{% include ui/progress.html value=57 size="sm" %} {% endexample %} ### Progress with value {% example html %} -{% include ui/progress.html percentage=75 show-value=true %} +{% include ui/progress.html value=75 show-value=true %} {% endexample %} ### Indeterminate progress diff --git a/pages/_includes/cards/charts/sales.html b/pages/_includes/cards/charts/sales.html index fba63825c..07301d02a 100644 --- a/pages/_includes/cards/charts/sales.html +++ b/pages/_includes/cards/charts/sales.html @@ -11,6 +11,6 @@
Conversion rate
{% include ui/trending.html value=7 %}
- {% include ui/progress.html percentage=75 color="blue" size="sm" %} + {% include ui/progress.html value=75 color="blue" size="sm" %} diff --git a/pages/_includes/cards/progress-multi.html b/pages/_includes/cards/progress-multi.html index e77716ef5..bd700c544 100644 --- a/pages/_includes/cards/progress-multi.html +++ b/pages/_includes/cards/progress-multi.html @@ -1,8 +1,8 @@
- {% include ui/progress.html color="yellow" class="mb-2" percentage=10 %} - {% include ui/progress.html color="red" class="mb-2" percentage=30 %} - {% include ui/progress.html color="green" class="mb-2" percentage=80 %} - {% include ui/progress.html size="xs" color="blue" percentage=70 %} + {% include ui/progress.html color="yellow" class="mb-2" value=10 %} + {% include ui/progress.html color="red" class="mb-2" value=30 %} + {% include ui/progress.html color="green" class="mb-2" value=80 %} + {% include ui/progress.html size="xs" color="blue" value=70 %}
diff --git a/pages/_includes/cards/project-kanban.html b/pages/_includes/cards/project-kanban.html index d268ff8a5..d7e92e0f3 100644 --- a/pages/_includes/cards/project-kanban.html +++ b/pages/_includes/cards/project-kanban.html @@ -4,7 +4,7 @@ {% assign percentage-color = include.percentage-color | default: "green" %} {% assign due = include.due | default: "2 days" %}
- {% include ui/progress.html percentage=percentage class="card-progress" color=percentage-color %} + {% include ui/progress.html value=percentage class="card-progress" color=percentage-color %}
- {% include ui/progress.html class="card-progress" percentage=include.percentage color=include.percentage-color %} + {% include ui/progress.html class="card-progress" value=include.percentage color=include.percentage-color %}
diff --git a/pages/_includes/layout/homepage.html b/pages/_includes/layout/homepage.html index 7c5670502..be62dbe11 100644 --- a/pages/_includes/layout/homepage.html +++ b/pages/_includes/layout/homepage.html @@ -19,17 +19,17 @@ {% include cards/project-summary.html stage-color="red" %}
- {% include cards/project-summary.html title="UI Redesign" date="11 Nov 2019" stage="Final review" avatar-limit=3 avatar-offset=9 project-color="green" percentage=80 percentage-color="green" %} + {% include cards/project-summary.html title="UI Redesign" date="11 Nov 2019" stage="Final review" avatar-limit=3 avatar-offset=9 project-color="green" value=80 percentage-color="green" %}
- {% include cards/small-stats-3.html number=43 title="New Tickets" percentage=6 %} + {% include cards/small-stats-3.html number=43 title="New Tickets" value=6 %}
- {% include cards/small-stats-3.html number="$95" title="Daily Earnings" percentage=-2 %} + {% include cards/small-stats-3.html number="$95" title="Daily Earnings" value=-2 %}
- {% include cards/small-stats-3.html number=7 title="New Replies" percentage=9 %} + {% include cards/small-stats-3.html number=7 title="New Replies" value=9 %}
diff --git a/pages/_includes/layout/page-title.html b/pages/_includes/layout/page-title.html index a7c4b23a4..c839622ba 100644 --- a/pages/_includes/layout/page-title.html +++ b/pages/_includes/layout/page-title.html @@ -3,11 +3,11 @@
-
+
{% if page.page-pretitle %}
- Overview + {{ page.page-pretitle }}
{% endif %}

@@ -15,13 +15,26 @@

+ {% if page.page-title-description %} +
+
{{ page.page-title-description }}
+
+ {% endif %} + {% if page.page-title-actions %} -
- - {% include ui/button.html text="New view" color="secondary" icon="plus" %} - - {% include ui/button.html text="Create new report" color="primary" class="ml-3" %} +
+ {% if page.page-title-actions == 'users' %} +
+ + {% include ui/button.html text="New user" color="primary" icon="plus" %} +
+ {% else %} + + {% include ui/button.html text="New view" color="secondary" icon="plus" %} + + {% include ui/button.html text="Create new report" color="primary" class="ml-3" %} + {% endif %}
{% endif %}
diff --git a/pages/_includes/ui/badge.html b/pages/_includes/ui/badge.html new file mode 100644 index 000000000..cf8f1d02d --- /dev/null +++ b/pages/_includes/ui/badge.html @@ -0,0 +1 @@ +{{ include.text }} diff --git a/pages/_includes/ui/button.html b/pages/_includes/ui/button.html index 30d325aa9..37979e8bf 100644 --- a/pages/_includes/ui/button.html +++ b/pages/_includes/ui/button.html @@ -2,13 +2,14 @@ {% assign spinner-class = false %} {% assign provider = include.provider | default: 'fe' %} {% if include.text %}{% assign spinner-class="mr-2" %}{% endif %} -{% assign e = include.element | default: 'button' %} -<{{ e }}{% if e == 'a' %} href="{{ include.href | default: '#' }}"{% endif %}{% if include.type %} type="{{ include.type }}"{% endif %} class="btn{% if include.height %} btn-{{ include.height }}{% endif %}{% if include.color %} btn-{% if include.outline %}outline-{% endif %}{{ include.color }}{% endif %}{% if include.disabled %} disabled{% endif %}{% if include.square %} btn-square{% endif %}{% if include.pill %} btn-pill{% endif %}{% if include['size'] %} btn-{{ include['size'] }}{% endif %}{% if include.class %} {{ include.class }}{% endif %}{% if include.block %} btn-block{% endif %}{% if include.link %} btn-link{% endif %}{% if include.label %} btn-label{% endif %}"> +{% assign e = include.element | default: 'a' %} +<{{ e }}{% if e == 'a' %} href="{{ include.href | default: '#' }}"{% endif %}{% if include.type %} type="{{ include.type }}"{% endif %} class="btn{% if include.height %} btn-{{ include.height }}{% endif %}{% if include.color %} btn-{% if include.outline %}outline-{% endif %}{{ include.color }}{% endif %}{% if include.disabled %} disabled{% endif %}{% if include.square %} btn-square{% endif %}{% if include.pill %} btn-pill{% endif %}{% if include['size'] %} btn-{{ include['size'] }}{% endif %}{% if include.class %} {{ include.class }}{% endif %}{% if include.block %} btn-block{% endif %}{% if include.link %} btn-link{% endif %}{% if include.label %} btn-label{% endif %}{% if include.icon-only %} btn-icon{% endif %}"> {% if include.spinner %} {% include ui/spinner.html color=false size="sm" class=spinner-class element="span" %}{% endif %} {% if include.icon %}{% include ui/icon.html icon=include.icon use-svg=true %}{% endif %} +{% unless include.icon-only %} {{ include.text | default: "Button" }} {% if include.icon-right %}{% include ui/icon.html icon=include.icon-right use-svg=true right=true %}{% endif %} - +{% endunless %} {% endremoveemptylines %} diff --git a/pages/_includes/ui/fullcalendar.html b/pages/_includes/ui/fullcalendar.html index 081e0b145..8bc9a2926 100644 --- a/pages/_includes/ui/fullcalendar.html +++ b/pages/_includes/ui/fullcalendar.html @@ -9,8 +9,22 @@ var calendarEl = document.getElementById('calendar-{{ calendar-id }}'); window.FullCalendar && ({% if jekyll.environment == 'development' %}window.tabler_calendar["calendar-{{ calendar-id }}"] = {% endif %}new FullCalendar.Calendar(calendarEl, { - plugins: ['dayGrid'] - })).render(); + plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ], + themeSystem: 'standard', + + header: { + left: 'prev,next today', + center: 'title', + right: 'dayGridMonth,timeGridWeek,timeGridDay' + }, + views: { + dayGridMonth: { buttonText: 'month' }, + timeGridWeek: { buttonText: 'week' }, + timeGridDay: { buttonText: 'day' } + }, + defaultView: 'dayGridMonth', + + })).render(); }); {% endcapture_global %} diff --git a/pages/_includes/ui/progress-description.html b/pages/_includes/ui/progress-description.html index bdd0f06d0..6acfe5fe7 100644 --- a/pages/_includes/ui/progress-description.html +++ b/pages/_includes/ui/progress-description.html @@ -1,11 +1,13 @@ {% assign size = include['size'] | default: 'sm' %} {% assign color = include.color | default: 'blue' %} -
-
-
Label
-
Description
- {{ include.percentage }}% + +
+
{{ include.label | default: 'Label' }}
+ {% if include.description %} +
{{ include.description }}
+ {% endif %} + {{ include.value }}%
- {% include ui/progress.html size=size percentage=include.percentage color=color %} + {% include ui/progress.html size=size value=include.value color=color %}
diff --git a/pages/_includes/ui/progress.html b/pages/_includes/ui/progress.html index a1d7d0b68..7604cecde 100644 --- a/pages/_includes/ui/progress.html +++ b/pages/_includes/ui/progress.html @@ -1,20 +1,20 @@ -{% assign percentage = include.percentage | default: 38 %} +{% assign percentage = include.value | default: 38 %} {% assign colors = include.colors | default: 'blue,red,green,yellow,dark' | split: ',' %}
{% if include.indeterminate %} -
+
{% elsif include.values %} - {% assign values = include.values | split: ',' %} - {% for value in values %} -
- {% endfor %} + {% assign values = include.values | split: ',' %} + {% for value in values %} +
+ {% endfor %} {% else %} -
- {% if include.show-value %} - {{ percentage }}% - {% else %} - {{ percentage }}% Complete - {% endif %} -
+
+ {% if include.show-value %} + {{ percentage }}% + {% else %} + {{ percentage }}% Complete + {% endif %} +
{% endif %}
diff --git a/pages/gallery.html b/pages/gallery.html index d8687b222..237a77048 100644 --- a/pages/gallery.html +++ b/pages/gallery.html @@ -1,7 +1,9 @@ --- title: Gallery page-title: Gallery +page-title-description: 1-12 of 241 photos done: true +menu: gallery --- {% assign horizontal = 0 %} @@ -12,10 +14,10 @@ done: true
-
+
{% include ui/avatar.html person=person class="mr-3" %}
-
{{ person.full_name }}
+
{{ person.full_name }}
{{ forloop.index | random_date_ago: 10 | timeago }}
@@ -39,3 +41,7 @@ done: true {% endif %} {% endfor %}
+ +
+ {% include parts/pagination.html class="ml-auto" %} +
diff --git a/pages/snippets.html b/pages/snippets.html index 1eb0cff78..bfd5c0856 100644 --- a/pages/snippets.html +++ b/pages/snippets.html @@ -56,8 +56,8 @@ page-title-right: date {% include cards/_full.html %}
- {% include cards/project-kanban.html title="Tabler UI" badge="v1.0" percentage=30 percentage-color="red" limit=4 offset=0 due="72 days" %} - {% include cards/project-kanban.html title="Tabler React" percentage=80 offset=20 %} + {% include cards/project-kanban.html title="Tabler UI" badge="v1.0" value=30 percentage-color="red" limit=4 offset=0 due="72 days" %} + {% include cards/project-kanban.html title="Tabler React" value=80 offset=20 %} {% include cards/_full-2.html %}
diff --git a/pages/users-list.html b/pages/users-list.html deleted file mode 100644 index 194b01a6c..000000000 --- a/pages/users-list.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -layout: default -title: Users list -page-title: Users -done: true ---- - -
-
-
-
-
-
Filter
- -
-
-
Calendar
- -
-
-
Group
-
- - - - - -
-
-
-
Country
- -
-
- - - -
-
-
-
Name Date Amount
- - - - - - - - {% for user in site.data.people limit: 20 offset: 40 %} - - - - - - - - {% endfor %} -
NameDateAmount
- - {{ user.first_name }} {{user.last_name }}{{ user.birth_date | date: '%B %d, %Y' }}${{ forloop.index | random_number: 500, 2000, 2 }}
-
- - {% include parts/pagination.html %} -
-
diff --git a/pages/users.html b/pages/users.html new file mode 100644 index 000000000..c1690db91 --- /dev/null +++ b/pages/users.html @@ -0,0 +1,63 @@ +--- +layout: default +title: Users list +page-title: Users +page-title-actions: users +page-title-description: 1-18 of 413 people +done: true +menu: users +--- + +
+ {% for person in site.data.people limit: 18 %} + {% assign progress = forloop.index | random_number: 4, 95 %} + {% assign online_counter = forloop.index | random_number: 1, 10 %} +
+
+
+
+
+ {% include ui/avatar.html person=person size="md" %} +
+
+

{{ person.full_name }}

+
{{ person.job_title }}
+
+ {% comment %} +
+ + {% include ui/button.html color="twitter" icon="brand/twitter" icon-only=true outline=true %} + {% include ui/button.html color="facebook" icon="brand/facebook" icon-only=true outline=true %} +
+ {% endcomment %} + + {% if online_counter > 7 %} +
+ {% include ui/badge.html text="online" color="green-lt" %} +
+ {% elsif online_counter > 5 %} +
+ {% include ui/badge.html text="offline" color="gray-lt" %} +
+ {% endif %} +
+
+
+ {% include ui/progress-description.html value=progress size="sm" label="Progress" %} +
+
+
+ {% include ui/button.html text="Chat" color="secondary" size="sm" %} + {% include ui/button.html text="Profile" color="secondary" size="sm" %} +
+
+
+
+
+
+ {% endfor %} +
+ +
+ {% include parts/pagination.html class="ml-auto" %} +
diff --git a/scss/ui/_buttons.scss b/scss/ui/_buttons.scss index 62fe22986..ebfa35a06 100644 --- a/scss/ui/_buttons.scss +++ b/scss/ui/_buttons.scss @@ -50,6 +50,12 @@ border-radius: 10rem; } +.btn-icon { + .icon { + margin: 0 -.5em; + } +} + // stylelint-disable declaration-no-important .btn-link { box-shadow: none !important; @@ -82,6 +88,10 @@ .btn-#{$vendor} { @include button-variant($color, $color); } + + .btn-outline-#{$vendor} { + @include button-outline-variant($color, $color); + } } } diff --git a/static/img/photos/1b73704b282a8ec6.jpg b/static/img/photos/1b73704b282a8ec6.jpg index 68d735a2f2d58e9196e62fd5b781c3e9a03ef04c..3db499bbfd17924da26a7dc0757602970baf63fb 100644 GIT binary patch literal 205285 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

5SZfsKGN|n^EPRmyrP6vjgWCl~-|_lIw5qos zKIN6F1)#rZO$Czys+Nwm=l7Qo{#b()00|h1T>_yzvXE@Y>h2XSg)H zHpFXHJUhti12yUbX2qcxpFFhk+VT?3Y-Qa$cz0 z<28&yM}by^yf(gf)XR(gJLu-s!e#SNi_N(%azjh6CGiPqq`+wxoc-e1>_ttsXU@5e zd=Rv&0J9($r`)q>q5wCcZPBA{u`fys4*<9msN|~UqHhxBuxhG;5CdCL1uYgHwQRLh zv`XMSC1&!5bJy_)o*7!KZ}Z0~f&RHdl9IYxfEoa9QO$Sc2IN!cul47>+smLDW}4#sQBLN>yR@ehVg*C#0KAUe_> zCGOjT&?^wIN91Y%mYraJ^9ZfWmmXz#uNLuIh=_F!K9BPXl1zhzdPtXXTN0PtWkBe0 z`HgP|`4aoVD!K1a^BQ8Ce8fv8m$w%?7_HTBC`o#5O1%3*kxF)Bm2sP05Tlo zeuyP;u~-dUCa)4Iy0<@{^+yr``CDH4yn2^%5WsU74dbE8_=irQYOgA{#%S&+HsvwP z%lr{76sb$R7Z+TCua=3e3p6{x`_ktfKV4Kgo^ZG}jRKRbK);B7oa$>&K8=Eau zQ>=dSt}GF!OZT0`003Zg6&NJ~fvS!Bxp45B)#9AyRSR_+TGpFk=`fyrXb3M})CDXO&@cFJ>iL-069t#6yfM1;0PR zhdI21{D|_htQYei66I<6hYqyZwPe6C>M4n%6?hMIRdKX5W|*z{?#MO1?T=(j)L9p+ zt1dP!0?XEHcu)09MU||1Y_;tW-zNTEe8Hfose!zOp3F?OqSA-D#eT6Zu;8-!6ua!q zz5=U79pvDb(}|Hxp<>UHQr3(39is}HCUtMjRGKLOaKP7-2?j@NRky`6B(Y0auIm0djgCt36eWTVIhQR4 zLhae+T?*Q59l#H>Al)2Wn(=W*DBW@PfmZ(jw0x8oZmMia32QLTYAoRuJAkC}mz{%E zdBhEf>{=RLGYT+(cq;enFtA#X&6=}siLmg~4Wjyl^o=?8%aI5&y)TL*vf=`Dbme_@ z5Hqo=m3FeGOnCPI# zxxGP6jN?xq69pW~d!EiHt{{S-&8+*`kTtEU@ zAa$HRE-4FSD)PplMOYT4Ta2E5&TvQ<$91lH^5D2HG z?ET=&nS+G*?26ae2HjnnWk}Y9YbQCHa&k&hz3Kb4U32dQ>VuX4 zZc3X|Jm_C(~e*_GrnK3sBoHPo3Dv)jSVS(m@2W? zBBDIE<;md8Ci1N?K&f%NqGR-i=yPx)QUO><>J@cbiKU6LsPnXVTo2wgNaS6-Bd@%) z5kpzB{6r>}4G(ri1&dHm8X#)JE%-e7sG8ul z&ywt}vlHZ@py;=^s*OsT+8`a#D%F%#tcTy62)F7A-a1> zRh+L?G5{MJdpvlG&3!SSv0Uo|T|Rdyh9z@3(EdaNL>6SnjbN3^(YKUgtX)UI3*B4` z1t{pW=2>el+@OFE(3-v?tD$`2SY1VS4c)hjJj9@^hz?h(8n2mk5&&~RjK9BW*r}qT zGfvIWz6P)K+**~X656vB bu;C0WtCV#4wi9n;Pr= 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 literal 261709 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 diff --git a/static/img/photos/35b88fc04a518c1b.jpg b/static/img/photos/35b88fc04a518c1b.jpg index 3cde6401a680aa43d383fda63e48678f0a73cd82..47410b9947acbdbe9922c203245e5772a54d7f15 100644 GIT binary patch literal 176221 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%0AL)-X$EUaP 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%0Dv1aVHj425a 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 DvdBoz literal 165942 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

dk*D~4tvqUy3~g{ZC-YVb=Pk>V#aFyW;k3yW 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 YntA~cPnJyYR6jxgucBGDU<+@Fq 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

Fl$1wWdGN&61nyVlHlD94I1 zW%Uc?7CCitnK|7aF@j0`={%R`apa$FX=IW!bv#sSxEz66vFTwHVauk+k+TEZT6A=uEi5VsZBttF+0X2^<>U1?R)h~a-rijM0x8y=<6CW85#7dZWIYMw ze_F+=(`STRQT{nD!;>7HHaNYw4y}%ck>nA9`(bHIb_JA<()1g1}gnR@dxP8^6@w_^a=NEIhblYoY;AFg>c9 z`fZ_!U9RsCF#CaF)YnXkNVAC7rxosW_*NJwBZViq+ZtY8t41S1l^tm{JnNH@(G+8aS#X2>x zUl3ZmU1jjx)-mC&{BMrwmR}MVC*pg3cnb0lAJ@yRr8*JF4}l zgr77ft8!zv+Nad~e%01{VICJp7NwG0zQtP5hUJ1ctwHEJ(k)Wf5fZB5S$ZN5xARh8 zT)2~B90AuIXdT4!&2qC%Cgoh6Tu^&dZ-NwKf;wZ0*>cRkpOLBb zYJzZlfn5gZ22V=gTDms2acK6=M2<5%jyA7WQSx*9413WROtBv{^j?2{-`uxbv>(wda`Et&*d=2pia&G@dJr`xL8M!@q_e*~&X`%W?sdcCu)rL^+D5yFMf z>?p$?T$vq1=8??*08#J$qg47;Vp0U;XZgGT0L2U8ZDwd}aNMbO%-N=+8+{_DsY*Y@Zb}@fk%&3@sG&h4b3=K7 zk0&JaTg4{ML9arUDm+xBZLs!52u3-e=7TY39Ms8ik;u+zlo0uryMP2y&~{eY3iSrH zr`Hy%v;aENtBYeB9CW6c8V0Xduxr>p)WG$6y;}v(dH~edtH*<0paN1-7Xr3361z`N zY8V=xB-}D+7e?zjCu;gv;;ot`(#LEH04k*MZ8;qcIMLfN70A!cG=j?|)XY4xTRXqC zME74!AY#qs^}wSv*kYU0GWOzz)ony_m5bKC#8iTT&D?jn3y^ygS|Uvi!evNbdL3-$ zhkW_L9R)hmW=rUXapo!MO%Y|2N3ch9np_SkJgB@tAW<3s~y&Ze(i!{?t5aoT)>#fP8g0U6uw2oQ(E5-yCZ!hIY*uk zX!ilkcQ)h{la~0aJ^iQFh?+73kBa4bUDVnJrq;3slF~->x3zTJU0&V|HKpDQqU3zl zQ*Ap%k*2vPv9)U^D?1l2??Y-!(@+9k}#4>61>@-WzQ>-ZmNQiaztg_9p4>!sbTj6m?kFbDLu&vej$liB#G%`?_Cn&)+x~LQJSdulG&grb{&h+lys&l6(x=Qv9io^ z2TuG{i>Ex%dC{BE_Oyne_B$8(SQM z+Km{cdQov4YaqjS#W9fJ;2Mi0Z-P1+@GhsVXe0xzZRP?qNMx%!3Y8}eK4=oztf6q( z3&j=z(j1SHYC(W8KrGF>EWImtl(5L+oq$&rsQ`)$O2fTLETLDgG*}Re2)y$n43ks+ zG)6L|1`S2$39j)Rj!yKHeFi0x6pSp41

o3)3$ygGZef$yQoAiC4N~=` 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ⓈxehY9xBI0v1^+P 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 z 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 diff --git a/static/img/photos/3d2998219313cd37.jpg b/static/img/photos/3d2998219313cd37.jpg index bb14b9432b2e2cb19899872f8e3a74fb6dbd847c..256f35f6d2f65d45eaf188c89c0bf2b46a460d4d 100644 GIT binary patch literal 230100 zcmb4q({~*X6K!nUwr$%!C$`x*4IA6GPOK9fZDXFC*lA;@v6}wwx7J!e=$B>(P;E_i?G?UhkFGvxz?ofTPQ(@A7hP@Udb|{cK&N>vkL8n zWiS+7O9b;ZN@dOlu<=Ov`{`d1Sk#H&Jye>QN$W4t=7O<3*r-S>3?_$zWa! zs8kyS#`NlBH#|L~J*wZ%G!aoU{u{0WVN+I*XIXCd9oqc3$6|aITS1IOl~1@O7O;5S zlO^CW%p7|NSjlBb6>(0XRxWz+_{6!hZCFc!^c|*&moCG@Qe7s4CMA?jx|{}YTe|3U zB1yDbxe72gNsaG9LV#f(U?y5&i?v2pa%yD?vq=p*>cF{@dFIghF)yz%^VxMg^+z39 zlk)zyyBAz#($HGz((~=lfO%^kFB4pzr3#B#*h(VCkNEevMBATmxY`BW_yQ(RX`nR8m2jz?;E%nQd_NCO1n9E_UM1sIy|AGJ1`bI2s;2H28}w& zu8+u4ONnH8+AhR%3A=Cxj$ z*vUC#)JB`lusEhqBI(wy$7Yhyd6`;mq|~_RcJO6W{6tD3X`%me_-|yD&JrPZ>B|^} zkB^o`@@A&~lhz>4tVQ}Cx=HA35E2V$P-bwU^HW()4Vhdrso;nV#3b|Db8c4^>gJZ+@3)TM1|HThpubiwV_+~GA= z!~ESCEjP2g;lK-4j`Tv7#zjgw?13)U5fX|l^`_sbJ%kNx0yHD$c6)|~+ z6AOIBL)@#%hBssM6W~Z{J)0(GHM61?5LhjJvBGJ5?DIo#yPNU0#rCj(6T%I>n=JW& zSiCWQrH`#v1C)Q)@dH^7=4z1W1-1T@KT~K-@K@p^5~0!K(!y zH)wzcU^S46sZVdDZ4@G{F1d8fHEU8U@%DlBvyH+l3XA+KUJNcZd zWAtozZBPcmNj8CRmJnbLs>1hAEi}=Uu+YpL@!*sn}RK> z$^2Y^amyO=L__x?)~B1zgq;3CPk&EuL9rw@5A}k^zv$|<2S1*Y zmc201)=`XaCc8aUDRmEGUWlchn7wC@O+23ncpv7~{A`=Wpk*r}#D4pFx)5^16?!}THEmkza`^2; zF@cLwVxm1%R=75ar??-MNen7@ZIppvuF_}$!GHIvPZ$37f2<<)-vlw9$}EJ7;kuaj z0zHiWg4I_0!V)*}5jeaQ=s?oAKz!fdfvy;ML_N^;Mw4o>9c90+-mA^nt|wj^k`C@_ z29K40iiE+?G71r~sc-QV%noz+FSqFiH9Wpls*-i}fWv%|Loi($c<@>4-{GFkyE>35 z@8ZdIltP!(?-&ccyV;vBjqo3X($iEw6~|LUWqA^Waj0RX@5;t0|M^QqRqtgber{#*G{ zXlko$K_YRSsZ9VG0eybyi0Q_8;N#3$mrAO3ce7(0B`{U&F7(mT?^a@3c;Dwp>SgC% z^U-q>Lip9m86(CjXLc!-oY3WE+N{et_;PK4QVnJJ#&pZfUn-iLp?}B-4pdW=qwGJo z?_)djELywUXG5*!fFDqOME0S)s9#}U+%L%p?VUwseIq6e%L4 zK6dPu-AW}pj|5h$c;=tb`MriTZGdJ!a)UrJwp*g$>%Da)c9ezLH3VLaI zFM@y`rr4)00HS)+rajGulv-#&6>~Q9#zCBT102P5@4Ud5P3QR1@mcvBS`iY61B23J z=2lc0n_-`DCjwUYPp6ntJZ<9xkzN6}=q~x@s73?{Kx}$`NaCz(5|Lva@0&@iYXxEj zW`R_n@JQfA(XU%q1CZ8;BE=O~Oz*T20RSnD6llzlm4B3q_Ggq@N>$j*=XU93EF_pY z%@OMc75sl7NbaI~Pm#RPH5+=`-o;cI|JJ1KR4;CZX^FsBA|e7Nc$4V!0IR$L-DOz}bb4A~uz}aG1~J(Ax_x zMB41($YOdfWbFGdVUf6j=xgmA0UIzZs%u-?<4A?;I6|nl)uqPXBVQ-~Uh6YF6ZE$x zjUI%OuxFC6(GLop{;o9j-Ki_bKT!v-&;R<;5`aNqR0#k39m@q!jS;Y4%71Ot*=A@k zsG=Zww~ssf_*r-Md+@#q_Y*Vs-fFqUsO)!COmd^zU|I0KoyLNsf2U61ReQjrnaN@N z-?NlkwowYHfH4d2t;La&0FL$B&=tS0;N7zL`2KTUQ7-76b4)} z3?$c%mrA69cQ-(O(PozVX*Y)gvp?fM2vQedWD0Tg(ja}$dQHy_HA`UP5_M*?NvXk} z(#iQzMhOZjl*7}hzKmZ>kpjbr3N!H6Utso<5OJ;tD*S|-9ed)cT#E0jcBA{uR*C!CGkwM?qCH(>ilT{-cCvWwi z)_Fx-MOy-i^B@I(jQSVlsf&FAPY&<~dl*Xhp>NpZvSj4`llD_sxcXCrH>OP(nJ=dT zXMC-}Wh|e~@Xa2(+8!p)Bf4HTcV|)Ph)Vj_#uW7UdNu(=%`#-KsbVMjxZh0Mo`P)4 zB`ex^aPkuACI%~h>b;mv%BAh#S*4PNEFEq$VJg98gj_W?vC2*YQhQ22UM$s)zN`uw zy}oQqeH^D)O)wCbfyvnye>}O!PD;Gn?ruVD9QY+(r(3^zK|BIWR5M*uY{PrT>NOs8M4`}lO4U4 zdfAje^$6XSCGPrylGv<_zP}#;Q2NWMuNKvWilW!$7QvD%OssjZ@1$V*lPUeuFLks z;{9|X)XKM8SON@bpMGKTz5IISEO9!Z|MWx#_{9t%c%He4RW4RW`v}rg#xz;_oO)95 z=u+{Sa*84Rt;hdiV9Jj?Og*sUIa=;W2;OO9MWg*~{>_lnr*M^~Wo-EuiA&WP3bq@& zip>P@blU#1jQ*_XTucSjd)gOt{WQH@oRI~BlR$2 zr9y3hQ)cA@rz62T)mZKG6pTw0OCRq7^9y{$(->X9xLht1jq z_z}u!AhPvuqp0puac-T8BnWO`&P&<;DFK(Y`b*1TTvE+h6SNT`?f;|V zGdKEhp-G)p?oo?H8F*9GBn5T-74x}2{KU)8$)n+n^+XN`L6q06HnC)GbD5L^f-wS$ zT^mAF)QF-@HdPOsq_9J4MC^MEWb{5|WGws63`3xZJ;~ofujJ6lY9)Hg90hW?j2(*A?dmEEbgUBh zD`LIX)xQCxg{lvv^qDb{4ZDry*Z{u>3Le_UmoQ7V)I&{;riJ66_DLLI|C_B;os6ce zK}&n26(6fywc1^%`|%)?p>}G>OGgaF!K~!t!-Y!bOR}j6X#IaoCP1Z^s2#-Ne*vf* zlvhA}>0#;;{syciz>pBc0@;zt8z32>Dr4%5o?fIErKvVbnOqF98C>XyU3HIV20EM< zJ);!)&$jFrdh~H6I#84{Ib?pb5EZG&SghSGMCf;+DC9xuZ@0)xG^p8WOT&`Ly7L|~ zD(+;677sv9Exk3T6B9C_-oDMGEwFV~cMn7?Sh@(Q8bRhc!vSbVH^ zyI%lpHS8K$-lOtJONb7;{Kv}%5>r%|cvLIH&!7p>9N&X(d9dLT`+p!w;m@;9+o;qp z*K0kPJnZSfnc89QrVr$F(g}qXHG0#Yi$;b5W4-;;aH*IC`Gy0>->dUs8uctFPjjcT&s!AVd&>f`urDNq%&`LO($AM~0k&?BlyJK;LUpSFv5LK@W4Z$i6d$zlW;rx2`9rp@a|X(i4sDj!ErXdI|gAl~rq z4U!e~6bN6T-uY(;nkX`q?D0B#3XceLvA2NxN#eN*-N9dq$}JJG<5{DgrAo6$l_Jaj z-M%z77MpOC`rdQ8vA=`diY0qk8u$Pf%L{Eu+;*(6ZA3C#;^tIST21S#(4Og{v~la~ z#UOq3#!^n z@GXqZdVam@`%F5j0c=2bm~}}F1g$flFlCPfn~L2VIj?)p+32^*{Vv88Y+1ZIJgk{|15oikYeRYVv@EZdZLrMRpdg#;KHyRxaPf|FJ`t?0@D_TrZ}33ZW*)JX(OCB#3ub~}Q?F!Nt& zi@}5#?ZW%+XAgVT`ET$7!l27aR)|G_Bcr#y|Xib~W>Xo!wypOq(-O1#{B zlRur0lcK=8Em#lo{L_772A0c075p~no!&~&;I6_i+)hxcHX5h-oe-1anT01q9LI02 z6;Vu}RGzx@g>lqj%T${UawJgRUt3i#uj47N&B>oqIT$-d4yv_vBp734A7&ZXo{CFr zt^v;3XUdboOBUw-GvX=~vu`!`dupa>E-(19x86vxrC$DbnA&wsk{{;v{;aA0{99Rw z)rKR5uCW>lUED(G!}U1e-#jfvdSh|+vSFMlkX*_Ds zUcbE}dv3RBfp+uzoF5l!vmqEk;`3$a(%-}ijpHc$VIqZ62|a5C88B5>L^Q^Oe=QhT zfYsM+i@*_T!c}Q$5NJOWi^m$U5qc2*4UMVV3sUOGakL?T-1Y7cssQ?>FiUkwgc&Cy^WR8|tla-XTjF)(QB8MMd3ll$wOO3@g!AEuYnK>%D7-wSjtliwXnA za6IKr9rfi7dTK+2)ovWg5gij(K<$8&3Id5Cws}%@tKEL+%__2t^CYeAzBSjwn?bV#o{CGT_F|T)cJA zcKp_X0?MVj54VkzhCe@Wj|^VxNi&k+ZJr&`VMDP|E+(@7i6>O)~jzAafg?y`8k`Imj>_;l`!#?9EM*eVbOJh1Ek0rp6X~R6Ar<27#lp@Zk zH~cIlT?~A5c6=aq0-A8`WR`0pgsLFRp@Qhhqhyzx zbUTCQ9_RhCuV+Qul=ujl&KNGLn3IwLUmkH_vzeO1-m5X=g9bBJ3Kr%A`#^d=H3TT9 zG{-06ClHbWEAOSd6iPwSNaq%#j|&5WN4LacY4w$mEzawS9>31Zqr?>B<;4f7gtD); z;hwV2Tee-+bU#Olzf_V}&Z$tD+ypvttOv$XC7m~sdAl=E=Ce6fCKDUn>;4Vo{3MpI zjIF(HuyGZ=i7~zl8{qn*5Nz!EGcSoP{4~vxw>z?t(aU_#u&38N{gdt@m?@{qE{835EWE#vtd>1mMrt7drVRRIJ zw+9|HYQ}K?Pfh{XnU=p&1W6U7E+gLD%Q|Ndbqs>!X|wZ9@rkgW^1)yuGb1(vBibV!bp-{b7h#=PPMcf*U2+<3FC(*DDhaE^~r^h+viO|FlbW9V^g z!NYA573{6^b9hQ?A^uZ@?jdaQsmyTAk#<^9(&-#qAB8udZ7J+p0R>R!Uq-fMnwmJ~ zLOL6k%vcViQx7-MoLatpwR0z|T2pH5ScQ1!+tF4!!*@Jh4lWZfJ&k0f3IKkTf1XlG@p+(e)pkzOEYnnTXrk062b~cIu*jTr%96fkQ07$jdB9{dy;+* z*Da_nO)l@MSQW1cp~c55aQH<3R^=0A;PDRg?Z{MrDwRwAN zQst0P!rN7ii=%(@nR-ZExHUvh%HnqmQ+9Oj&`WEW5pTeFsO<6a>AyT+$#h?U_TJ0C zH|kV&V1M+}In>2f?R6;&$_`XZt;x!8e3f%694+LsS=-so8zG+2w+{4Nz?ZzZv<4tk zB7V(aRKgh7PeAKEQ(cFQ5zr(YuE7b`F0!5fk^P(yOzQgI;LD@rVY&>YI1H4q}qEgzVvoQS7Us4XUF<)Y1kO)p^EpEk9Kq>*DhmA> z$aTe^mXZP&{dg0uet9aams)}t1-;qr`{U%N>~CWOI5Z(OhvS0}wU~BiMAocNMkFDr zf(_~oK|T>^q@(b{Nuu4+0sN4pD(1*~AhK6hBAd_esvbQp(8~q=lT8kE+L|8DpDeV6%{wNgmomKSGD?CLh@eTpkNqYONKWao$MSJJ$jI*Dy*_zpI+ zKZF8t72GGTpxg_IE-jBt)|8QmA`xNmv`u?#k{(r%>wI1*GwFe)VU8k7s=nr z38BK-*{ngiqnwFl;=mz*0PRaZ#rB89I$p!`VLH?3x<#l^w;|i&&aD+$3?LLUc7hA@ z^;dy%Br!N<8X@4DVn8dUvF$f_VL!K~mFM2JLsByyvVR*;0l0GVc+iQwF%{a{8|4TN z@hnqIa7E5=1n!Xot8s^U9y>dT9%iNaAfr`pTUvr#2bCWp`dFB$*<^EE)zlXG20teCcgC{xL3-~;=n_~d3U%-=K!2e%_};u`)jGwm z%|*}nzRMre&ly?UV4*nn{+^T8UX$dVT3kcE-Bz#Vt#iLsb2lf}ZEe&o=NCE>)SIfm zh9(IGfh~IfgDL!~_wth~%zLQN%{7TrsAHUzYcsJ4E9I?Olf3vt78bp&(TZ=fG7`+y z*dZA{8?%~tvoWPMY%SH<vt%tWh77`C3{#j281 z){E-O>Nn3RwX8=x`^M zE+^9Tbyrs)5+Qk;@ECZ7qYwM;q|4`uK?T4xWif24A6_(Al&KlwIWn$zHg80eiUF*0%3x!$Mx!QqT@|IRgM)^Y|LGA76(SRY~{NfIqAhG5Iz-g zpjix=;ynu8OCuDwB1;+K0O+3SU(=V&ziK}n{al@Kn1JOw|H@*5VR!u@FKc5UNik!B zI2UT1Sb)5RfJ zcM?4~yH(PF*9^y64bTNkSd9^`O_Ft`IbW;&JA=#kncjv8>mkbJXKNii-1)-;Hh|W0 zo}E8ifH8@~FsFFyUDrLNu5!2T@G!yk+UnGPK}~QvgQ+UMlSY z-5C9_)FoCv1=7ys-M!%ACPg$ksDwpJ8sbu+uAW=EV?{h+c6Q31MUDIs%paTJ? zp5+XaB_a`n)`3Os3=LW^@2@Q**a?A|dvybBoX*Ky%NA^ud zCeWzCB*>xjZfF8vF59^-?9RfUSo(@5S{+I)-V05@}`w>kSP|$qa>Yo34u5gBf4` z&25Uqs5sDF4MYC#oKY9W>Ak196mg9wBkO)m$f)SWR=A$W3IBu1Z%o_{~4qA&E< z=(XkW%2{`rn?oT_g;FE0!{v<%@eb^#D3q{dsB#EO1;o{;7Z*PT8xTX+EX-q$G|2P< zYj5;@{JJ><2Fwqd((sT1t z64Dn4+2We<*GmKx_Q6&yPjx>VHkHp6-Db;DCURo`d;k%_3vrVdlhOjNYr+C+{m^j z@)9oprui%tX+Q{ESan{kpkDSMo7yRTC03U5ZpJE<%AMmhLy3{hVmXi{dX)CLU}zDR zT-Ck%x=;)|FUxP_)FRDeFGFWu;<5crAe)ifzy>j9cH!TGH%%hz7JT@l7gf9x zXRK+Da%_1v1}tibg?G;8|C?HmY26_)JrQJSV7Q5=ZZ57X8*J3E?Hw-$evkBxd0Od)S z9{KoMHONkOs!I`^T$;=z#J+Zd?4iABDQ<4S+4VC|k5jPspA^0ZCM}7zI&~fmSg+ow z2te)PTX4L_-k`vx&t65#+HA=k(A_zT)r&LfoU62s6T^JF?eE?wX$3b|Vqa($CK)%? zskz$}278eG-nCc$%wufHzWebfQ6d0bjq~;@KE4+_H0o>9o+Nq;G9L66XjivF>#zu6 zX>EFDr16_S6~s#g!%OAx9N4a5ZOxAY2Y*ZIwwNNx6uhK#-z3>Vv({8XuzQcz`wblu z#b+Zqyc9S5G>HT;#`wiw>eIvp`>M6abUet8{cujN(ksGZ zst%fzigsZl77i*XDS>UH+15f@uQJw$!-^eDJL7mBy{dc?FVIuhT4gX^ZMLB0qyVUi zU0Vt*=6xo(ulU^94X`0A$Cw1Usy>0aHeGG2!SKe+Uk zRU*F-e~w|p@Z3e`2G`D(GUt*9cdfA@djF=-%r)Jw-(>8hOVqq?z1Yaw-ZGM%REPI`5HhD4(DdzK%N5vg7JRiH(e9zLh^*!>mQs4wG?6$}L?8=Q1%vR*3 z+dX8L7Q_-z7w%mk=gYo{3FP??CR2;SqaV@f*)4t?v@pb&_-Bs>lEpRr+#$%hL=lrc zAszTpDd6lNcJU5B!P$7FiSBV2Wb=B>QXdR%4(JQKTX@T09cE6bvfhysVO+0v4w8d~webPWo}Z9YrKm1rlttvYYCQ?j_(y_k6Y>B~Dg7BXtN!vUhBKoW?`>yrjVV zgAta1OkO7L{r8YxBay3&xC&Fpt z+ph%9)q0n#fq1UbR=fV#qKtfw8imiR@ia|b3)ia^goYm9{spjtBrVghzmqX}#fr=U z&}&ow5D!;Rl`Nt4%H~RbCi5~8g_unl+5Rb15Tpcvdb?naez*x)L!Zh7rv~N z{1b@Oy)0m=Kf<8zdq6=1ORb_WPY<&)rwo<78QS9lMdj;K4=qRMPL7HM40JC&Ojr@2 zC32V+n&{yewOC*n%MIAbz!XWq5=A>{P1J$)9@!XLp~R)L-#prDOv@azXwV`Ns;Wjx z8x3XTW))}^iQSO!1{aVR?j=HMp>d@#+3mxYku=zBU&%s!S7m zXCllTvD^(ms>L19@%pv)jLTi89&B zJUhpGjrI{)5~gw_ggriosfN9^-uw3FxDZc;&eLBC>EgH3^=Bbp#Z#^oUl^e$jEE?} ztbmo-CS&GX?R%x?YPs9niBB8G=+^TLj1&c>CnYlS(cf4{JeVT{OH-THj&*hcwgqQ> zRl8P2MKR4dGO4iM9C_dMkOLO?O)WcnRNY2yhpm3?YeU}8FI#)AprP6_9hi5LV0t2t zyRwyD`(h{N$j7@E6*~!%zxDCEe|{yuzifRV?1YM)^BzQ?(p*Vj`n;$jRuu3kE9Vk5 z<4j7NmWDh(x7^eX9u-;lsRQaWt~g0%e|;FHR_iQggKQz>uA+_X!{IZf)Z?753_KYE zzVxCh!Yrg4&>V6<{8d7x692ej0B7Bczg?AMV1$Zye}iTAP#c1s<}!BGj!dsU4^)UJ zVT{kStSPbDvEQ~mp)(^*6kUCtG%PjiBs`2^igF5Na=W380%QDO%liRmTF}%pC3DAH zUFACz%}+q@5p*FES0lL(Vb`8>76YHYQ~6LAe|(Wy0@X-OHZ+@HIZ@l6@;c+_B*}$T z6PgXn`u0F*wYeM%qr+Gq85m(Rr37q{VTB}rww9E)3PtD@r^DtUVXc|Eq&Jt=x?F_b zTi~$JUt|qSM=5@vty!5jL1K3iOGGJcXX0M0<*&w6jTb!1l3OgM1nQaR46f!Y)0um8 zmgIJRR?11H<)ouD3)wFoft7kxAOCtg~IbWi^uDuqAvZr9zjP zMtH2gL>l@v^r-_|TRIoBos!7tZKnMjA~XsroWHeB^?N1|gkoWZznGIrXc+d($Ix7Q zlt?tPylRzSsxu3!x9*#(V%A~St_#7H!yo+z^Yeyxq5jg2)=V#CWw#y4u7ZGZldfcgXzdHp&BtB1f&u{*Naqx6S#VSMt+Bdg1qx#73x|B^S@Nc%Mb=a#m zpuv?NW23eqV4G*`wA$0Ik!`NWpgJ+E<>$dx$~!f>Vn}VAb4V+gzy5gQaj%z5aW6zV@TD|VsPy+sqAG_UR{+G06-7+1^c;Tj*h%)1M{m>7%TD&75Z2;q0cMy%+gb3-A0H@c`= zEBcU+Tgm&0x;<&;?5L%MsyTXQ&!s5W+Fb zcRpCZUXA99>|XeelYrr)VVps#-cgeZqqvVRXHn@65hK{DuG}+G>MGwh(Q@PuI(R)X z>)PpGDVP#+%uI}kgEDNes@7~7jwuWAO4kt?Ynyyn4;2lb`6I)ni3nF{mSAS7iFwM@ zStBhM7=Sz3Eb4ElEjY&J*e#VO*zYo)_TBz_S#)N*0m^gf`E_Sf)ZU+soohSL-WmsH|9hgm>=dYQ zu&&-u{1Zl6c#-;w`!%|Ky(V6!1og#Ocgn@J`hp?kd7lIfA;T+vA*aR{jp+Ra4rP6e zd~YWLL;<}1!2do~aSIU5Gic9M2mZwUo4cE7f;-aI`X7ujR6)#Hw3fZ;J?*r5T{6X4 zrAc$1c$~|AMheY;qa~tlpqn{+Mu%}74fcusk;@Ha9NxF1+4g8l5E%*MRm9|%IUVeZ z#ZE&PG=0gkFkWsBfj8^kH&$pXBtEhfvFrQYxEcPQ6_#Zrv$)R^#hN{{@?6RT)cEnv zCgH}Ee_s>rsKKnwq`7@@iivTI-(>1pJLij%QNLogl&?8sOrlF@zjAxQU%uL0bmJ5l zeskRZMTzyxW3sYNSiLL&pEQIDivN*HCqGmi)GIvUeou7kjCaR&<#kHr3RPis%^}Pp5)J=^i3AymR8n?`f+*ln~rANMK zSY~k;VJ7nt`$KHdIVtLp>p4*tBKx~alsZw6?6vcE6Z{sFffG41!p&?y^>BF-7P(9Va%$!f4_b8{vd)+l*1u}y#6t<}~1FoWa zV4c_@*Z_`C2Jbe?hK>j$HvUzhHApKF6IVN>nrsatZ2OY)q5zG!Oub2GnZ!q;t9G7U zU76DK!tUYAqAwKlAqCdS50v|QFjFZVMsAhB(V+}@+@<*NU&uv;LV1zn8V4C11+1@A zTE`Lfo65tp#Vq~Gc_B+caV%|m)>n2~cp#~0w4M!{bUz2#Pl-xAFnW>!{Z~9{73Jwoo7IgL(w_pN0a>2<$qzYq z=RLnlzs8$lSq1!9GKICXl-qTPeKZtQt!~=Z#;RJ}bR-=x=hp0z_f9DfEj>p+LcX`HS89yKJ zSWRDz6w23r7zFP3ATxc$ahoCL@EWwpok#iO&xIZ}uy{0pN=Vx`(O;4K#9o446tJoF z^|pcS#5ScBX9_u|qlWc#iRL7W*3p)FQAMh=Xac-d`P=Rd*g*Z&p#` z64JG7iPnlSuRUF8W*MA5TASuC569i&sUlfz?RiUC&b2}5uXbH>PMD62gYo{6_J;aM{85)E zu3Jd)|G{7?js&+>t>NH(SLr@@RryR44|JN_hDl2|L6^Mb!NG`>Zu}2M*JU@FQ@-gz z|Dn$T=Jc7iU`hIH^k>IxoNFxApVpt8#+qfSaSR5B%KIH7X|{-OgY$$gw<49=g@0TF z$7}hYYk;(3H7jO*$zxX+v(2L76JBzcz=Z0= zY2>ZLnzp>bgt3iNlJE#&c{D~&imP_*L~L>4@2I~$4d?EFiG;q#2paJ~H!I*jK6T{N zWty4&br^+0-dffEo)ZD;Szx`~ODB81la>zMv8Fx#lRE}`} zXb$93_@C#H+E_+Iy1g*#MZIw@o&1<{z2t*|6pS-b(}ruk3SUAw_8#qo26$GyA--z)vP}iahCtJ zXdYt=Zipan)$aprG{LbJI{d#+P=06z3beaEP9NSHf*6P#e z0ESPL=+g5$NV;%?i@$a_0hmhTy@Nbq{(zTtSRaGNQsl)>3=FF9(VEZWd;m9re5YEa z^PZuR+kOY0Qi?3YgOx(WSX_=ZjhY`LXTbeu3cUPLatZeMjhpfC*DY;@1w767$qkC1 zhvZKEh&f2DZA$>DC0OVCGjqCFfMHiZUxs@ypsyB^yY>~Fd#Bd(W_hw2SbMs7h|3bsNYhk@ADm)It@MW~`STP| z*|Am(Yt-m54uUjRd=P!yu#B9%qmu<`9El#0t=QKMetEa|a`u76$t&{oyo_}iDD~@S zdxV;{R+=0@zAMq!vI$BWsH2*23v;RIZlj6t=15mD2pO)`&u~0Q2YoaR3b7Pcq8=K~3 zTZ;nQ5zfX{oFC-GN+a-B_`J(+^2*6dQKzTe0_&O64czqwH$R^W79|WOP$ds2T}Udc zKUup}G@O&QmFeFv+F0R;xfuJA!<*7>D4Wlg-h5R1?#y~m0bF5y@xhjbVWq~>6T|x5LFpIhQ zvB9cI(FdD4YK6tzP3TQ8br!7InW*!0{$}Q48m*!Y9iO8@!>h82TV2y}aFu+9_}dd2 zk))d;wreUN{{TN%W76#iMPZ;LSUH^DBv4)>DI?T&zt1DD=nQJ(l&I)Tsmlc%#^!eP z=9KAHbPP;y(vxs#^hqr;Y>9#WHETd#%X|>kW&DnSotF*QYAq3I=ku*|h3!1G+lCrF zOt7%PtX%n4ORE0>p6_ULD!I32wewPYr6cPcsEjVMi&yV7ub*AA!?~)ISN%n#!4EEQ~KHJ;6VGMxi4ftIl}U z8QkM5i1S!q&_A7FkeT?yqLR~$ATKd7C#xCOy+Ng>Wr^N(YWc>S!^~+zGHo5XVQt+3 z3(pHM8`ABjBmvoltr%oR#LJa7P2JThxp7x~7br#LX2#|-{C;-$k$O+(v*dNXB!ScF z-YQ7Qp_0SV9S7}HFzcE8>NF#CY&1Q>%I1c-8=uI5^jLxT0Y3e6q1oAm;uE@?4^kxMh@T^UU>Wq3_jMQn%=hXwb$auY}o_!L-YVDjmGhQ$%gZPBYQE zGM)Qbx&%!%cWapFiU%3q2CwB`X@E5efG;hRY|pc=r+$Qnx|Vvny0V-H4!YE3VN9sa zN1Y$MYel`n?eW3E2`LN6<~&(<>h?$gv{#XFc);%5+#EVp1Nq9?_dN(sTEnraEa)N4 zVhTf8*u{Q~z=(qfqB7%RnqCJX*SlOXU2UT?ozn&#%&dpOi7(qz9+0q`su-rM!Gc^P zMT3sDis`F-YY4u)=lIV>2(c%+GOU$!_Hnk^h$d(G?KX{sqFz_oZ4Ip%Wf{tu-6DW| zc2@G4xY^4x1<@_t;BZXPcdTWddv6(-pC4BCjYNBiDgxA)Posnn<4;T^Fb)QIWM#{L z52x`B0j-r}g05*!7|FXdrl;uIiXev$E#s@S3=)I%4g$izQ%|RhNO-6k9ZV`GEsRcg zsphFw;hmg{y%KFU*!0CvZP#tB9>EOoLqtC?yXv{iE`^>MBbaAbt{EzUplHZ!EH+`U zeXi9o3+q>}UbliBHK1Es$m{D_zKrk*S1T&(%EVAJitA@fZq3EiR;*yzlZ`|d5tZ!C zAwv4!5pi97D~F5KYOOz|xm(T?JTD&uV(`~Sy4Ec%u&u3UB(0XSbTn+*CUbDXP`Oys zmWJ8e@b(~9-gErw?e3{@Zs<9-BiTc}eEdJWcX|QSuxM*7x;l@RDw3>6DY;3eQM`Mn z6T#mY(47HfU@u%|i4XJ*ktQvP9{!k{`ZtOp2dOhpR~@+E>R3(=CN{%lN@eJ)jOq;!-d@hR~3+oT5YD~367OU+` zMT|Hxq&p;9#w5CE@UEaKpyn-Q%;sn?&dMm(yN)tdyh|=wx7U#IY?zl#Q!&1KGZr?? z+{5LoE{rOz+A@(dR2GPoUqCzVYQ5o2a`GO$I0M=iUO-_+^!qzHmasKzEzvfm56d5{ z?%k_Gq+YHk4SQ)=%M_nlQ+0`a%M=)%ej1l!*!C1X6*n1eSgLTc#+{-QN>R`L(u&yu zub8Bw(2AY}?xMw5j8#?v3bsHxcNB=wp1=}pC3O^5tjL~dBF)CZ;68nI$k^K0u_gLl zvR7(*$lR?=KRXf4S$l>{Q|n_vX_+@mwBfN8Y0Q;<79FQhUo62Afk8R_MsyVF{+-?x zQ@1?y@WldylS(#by6YK2sL6|(j@}FL_OYiFDHLB)8nOl8`i>3e=9}h^%-E1OhKK~I zod(dsBQ6~f;r?q`DGj-_YSwm?-uA$r>oXnI5_#l6c}_X1n6*(cBu_*e(|GdSH{h*t z`h)5_=6FjpSG752D?=TxVAktPj3fuE#+7J9niKPs!oWOubtJ7!G%lvU8vR*hLz{Us5k%=)N1T8rQ1NxwxF zOLie8VH8*Xx_1mOvf^!x1jpgU-|2^;II6n(9*8RuHoZ-*>RaZ%O(Z@~EBV-JzI+2z zSj@AIwLHOXue-evTpuA~lm?NbZZ5gFeT1czx1{PQ>GQ}@lR*&0Ll{4$%Ya8x!w*^* zoZ*S)+JYF5EzcBPS!C-%Ys_d_Mec=Yx-i=8qet|PdfnMPnA1Y0cwvh)PWHX%KSZX_ zq$N{Lv!WvcW>g{iP*t=QF_z0RR>k1`Eg(Ai+XjMDHO(z;g^|p$VR|c3q>Q^uEUFWz zK(V@yYs!EIqs!`XcfB}53Yxo%VWhnuBh~XgmXGH?#^{;NGfdLez2fQ1b!iX1ERgfh zPhM#W^x9NLj6n8NSBexnK~%fK_9H!OEdKy$N*VJ*_~dlxY+d@lK3`-#tEs9JQAU3qH2lxn7a`oe%YnIBcuAoP79Tuaj?02A~* z3xY94G=dMAR)KFuTY%|b)x&9CWx@B?1Fae(jwNAc+I(#jr#+JR%UZ_&9eKE*k|Ka zLP>pP9+rXa+cDJVwi6oIs$pAkMgHODLygXPp>XmS(rx~I^FU%#K4~{C?rGZ)H!n2F9hCH0ZUmqEA#rLiaKmvhg4@ruW=$EdF$m8B@=$bFA)l*4NX>U; z%s^k#a;v$NJzlxsu-%w-(=v1$MY=Ec!JV%>^(r=dEt#OF;Z`jM!olBI{{S~d6n|Z7 z(giI>U37Z}{rR2;Nuq4MlqOr0_2kVG4VHu-o5(l3B3uB`ynvLL0V2p-oc{n+293|q z?~;CWeG0=C&GrPM6M&C&Y3w01V;OyDz#Kf(+7jB z0i4-Ew8TSD!w;EMF6xn4r|)M&76R9?WnQ#d$Bt*C`>|pwBf0w9ctF=)qKZAS3XvLR z5Z3Js>aA&;7_>|!l~k0Gzm-*w#gpRSJ=xv0?vQH2Oe0T5Q?;|86bC22&PS1_14`s;>@4PO5M-=hBj zGgAEsywi@ueVrdl{PaHE_IKPDM>(W-fq;qBCGS1`CmQlrmX%MA*gY=>V=&>N;JqKE zwCC}8MxEMW5>x?`qgD{hQEVWYiQ#+#;?%392fyekq3gtYwckvfQPdBF9{F>^%MNK6%}SjUKXg{JIA^_18BB zz*S9{kjF-U&SbQUj#<`A7t){5t!Kr&cxuNx+!7e`(b@>C`&9hzxPiCXe*S^NU^`%%xNz!u1 z;^??B8cQAVB%b>p-PYp$>pHCY=jcVWT=3IoWC^24$_|;KtK`}97KPIeJg?8B9ba;K z&H}d#xH+wTI$Y%A#$YL%C}uG!!x*#M^Oi%M*Kk}YMO*ZXJ$&6<^39UugRIs&d7~`y zc%t~Wk)f_C*%St`K0<Z&a&1pw2t*{7ooP(GVZOVBe`!Z7}P9aD=yyL~95*A#hx?MH`Exv%J@ zJZK|h23!@FOvz3W==MDmGtCQmT~8!B^~Q8~{5xh5VY5&|Q3;@y$fByg=v9;yN=-Vs z@6E$1YI*w@8GlprTQChey*?w6vFy;yg0<DxE;{s9B+mSDH&L z6Tv{WHG|ez7fj5~H#2eKvTbdJ7qs~02N?^X8TWA?pLn}v$yK*X%Plx~N9;{t-iX_E z44pk54{Ht}-YfHp?>#|z`$i0$*iAX@;a~HRe!ZO8yK#K(Qv)7j9>ALYqfeJ-Y10LMz(YA3|mS0HHFxPV+3;`~@{tQAbpP#bu<0P>@YcxRz}p zH*x!RAjY`vk}FPLQuj^GSEv`#n6fbM4O&0v0rdEd?P5>UY!=sYkw7THAH44f;w>2A zexzq~g5`0=rUL5k33`JHVCSV==9aRJL<1N=e3i5ZN7k1A06*D{n^esY>gfwFHEk&6 z5bQ1l0Z5c(TCRrDvf{#{i`89i^VV?<=(RV)8Du@O{&ijM;rPo$l*zj);+8yZB(etf z!rY#vzvUSBR^(su>p&6=>Z+bvXq(0Qa4_lWxy^>s7xb)uLPxf&^w)~bM@~mj;mcRC ziT2jzYZDs>HXA7#{S#*GEL~-Gr=ENBl;p+%>cc4V&O~@rSI`*qvYF1`buQ`5wOF>h zj`jhu0%?>&rI%h_5I{I2hx*VbBbFyQn;vDu}W zb)#)lVxEl_hg0ciyA8o@TXt`i%^^~OAhWEn}%TCDy%RkV=jEr;!r`DwP&TQPfqO4_u`TEm#l%Kuam{uY&LOy);h4ezz zu6y|LGex+HmnX@k0I#i%KszRIGg7dihoc~hjL$&bG*~eER-7MD7+mWnmb{FLD^JjP zWKu|*n$gK#qiu4gGek?;gFA9occ1#q7`x(ahwB zH@xR29vi+a5sorij%cCP<37eF5^rFVyfo%BNkKixI=VgDSYeQ?L4?}dS!Ls_zg5k% zs$O+#PkG9<*SRy4b@j-3k+8b;i?QFO*9Y6|j~l@TX%+Kr0mTItD`cPSBM{%>Bv zP-Gt*&=W3bt&5A=x3trkXyhQBb&4SEA)F6J*^XlcG0lrQ$0{&uk9Pk6K2`!6_KzrE zwHYwj*6esvW!@h)+<6MUx!~l@_ZGy8d)|43kLRx~UxF*!t^y;wq&knDER|7@mcn$H zM!2X~FQ_Qq!^($`h>dA&#fJn~*0Ho&-TP-?ofB5KNh-MUWcfA^>(yfK%bt^FV5|r{ zgj((AsXJFVA^jUTAE?t%RMzuQ@t31VPGY*G0qvGN&q|W@3&QcGlDlZ-Mr3vlBCcd* z4IIvoIZ_G<5J-~#=uW39)&-Spi@15*K#E4*KNTWF3d1g=XB4%KEdyN z-}jgZY`9fk?cMgdky8(==dMs&zDEB5syZ8HO5uy%8A52yJUU>F#t3Qu0G^k)w_edU z(0f;S{rl=P^q?V#O;Sp=Ixs}z1>tL=Z(L%vjI-%!*kf_P37C>aLc~(pb~+1` zy3pZEyQOe8pv=WqT|Uy8I&ti1{$SJ$WGsumbcdn9Af2}M1zt#bx%x8RL&bvo_EJtplGX~9X7^4&Aa@$i{13e$I$Y2fvzsR9v0SdaK;=D6 z()%SRK})&ah2aZ$%9QeE$Gaof9GbA{w4p`)e(>1Mdjixv8R%)H8g>Y8+oJt!9gok#QU1 z)g~qgx;JLTUUzuZ!NyBHN+(nEjaxeh(_9xfJeg}=ORu6cVyPr`QyKDmB}rvv&wgez zo6xd*i$oq76cf{eYC5my(5L3Ld4V?H(v^0I-zwNmTbJ$rfgPPTJTEC`6e1*KXfDj$ z2};J6cQk^inQv+P0>9@$(qE1aFA|!@qnl6%6-no(#hs?IK#p9tm8=?<|HJ?q0RRI5 z0RaI3000000000000RUC0s#O9|Jncu0Rj*J004wcWs=OJp8%W4$;|UPFL|7Mo7p|A z_&DD4&S-n_JG}IpCi#E|USymSykNxF0J1D&xKGagk?wDL3B* zP7vMcweAIMFkf>a6C2SwDVG7yW1Zh{K6}$!R1PuXlb-hs%;%@*WbXIR42Ivk-sB7H zo)EE-lcgbj(E|l1OW%9gTt;DH`D`47AcU2LbqFt^6nyrJ zj|A)!o%e(_aLGgr`<>}GzWXA{HQoDL7lN}p8Mv@o?({sS$#su!$Mm0@*U&fY_{0+3 z_K0mVqxgwf0@k;HWu|w}a{?H!RyYoOoz}apbD8$Lp5tfcKmvE9^1@@j$BL29%wtA4 zXGX=^0uOhfkDA#_yfReMsGvwp5o|Wj@!a8la|AAj&vUxxHLmlT_c`G3^@}ahh3(+0?_Tclm3K+g-+{o#rHBK~-C^SLrYDbAvqGG^|a*syUspuww=6T3D! zhKYn7(!19)-y0+Mwooa-YxB5gzT!C@ptUynXF;Z0ZtlasJVWQ z2f{VE>NDOj1~u;NqROuIeRm%A4pH-j!jtGRlW(EJS{mzVt%Y2%>?^H0n;DN^S}%Ma zvyAk33N5IuFP-c3+4l^6MQ1zHN$+Gf#x+s9!F$5ia%TOJYGnFNlU>$U(|zD4Q1>{h zu6S#5lC0zt>+pp37Gd53d3+H+3e*KM)fzl0%g>&m5;79|#$y6qCMt7+9(JJ);e?>% z3jY8ZCViETUiMjA$Aqp4oCB{a)>I4qH+(TZK_eciS33xrGQB+p95%I&n4zCgQQYN% zt}RWhe`rhdL+0CHAe}vm{$!lUmv>wQ*61pAh1LC$>36ln2vYCb4&MhP4dR9MO)~@2 z2RmfuQI_8dCp)4TBJO2cH<}We8AIbU$v{Tou-OO91@7iS8)Y`r$i=;jQz?wI9pQXY zmk+DiI%kJz5(1XMAvkStP#WG2yFNQY7d$yujh9A`bD?)dUVh#-fYC?c<*uxQ4vR!b zBf-m_%rJJPQE#k>XJa!%&1!zJpStdsF18RZ*D&JRSCvI3 zr?d}vD?6}Ml`lGYlUd=Hx8x+;%!gar#5ym>Abyda%urOJ*>B3nsP|S0a@1!*+=hf29@vEeV$voXB$f;hp)azp&t1wh@6VR2dVOZneu z1fI)tPMC4@lscXg$~H<=rPUkT$O4{Or{qy*j6$L+{8i6kgtn1cCIOHlGJ$M?jqJ&Jv|z7~mbup4-y=7ew-<9*=9mY7LF26ETZ4XG6r93N`>d+7ctvH+N6}aMU_QjN6$*mR z=RBdfpPis_s73xp?R|nplI0&2SMaS(7n57WH+AQ^<;ddx0Y&dRnl7fowNkGtWo~K7 zM&k+cWABO>et|lyBm#z*g_7tKtqxVT`~~Rz@6LUI-HvJ*((5+88Pt2BPsLecwuwOT zQX8V`{XyJPKsr_RcSCdK*5{j)=uQ>q+1X$Qo|}4F>~*pD-JCX^6x(bLe;xS)-VWv2 za03WgQLs}Mvp+0C`u_kbw%cl799ubE8i1mir#>#LPdJ?CfYPq2R-l9EutgzT@2JQw zA0D^mMyu?LESxH+&&mBuqC~Y#l(Fn}Iw#M&B7{4SBp}dak=oCux~`iO6WE<yBy9i-gHCxMKEuf`!6V!hkfL*9)N{op(LZFa{<`g zYZBN|<&K&A-6PhG638+v1np#DY`#3nx3wIKk&V&j;MdnnHGTEc^CuSZE2sQQSL~&Rg>?a=TG-6|Zp>E8y!U}C+--VGZ9sU4U1W32{*{$b3gG>5Rzt0tJ6djI^9_dA z8wgv^zJDJ_11JG6`BYNm}D=r-e1vaxVR;8KGKF7I?u(>rR+@aKa z-4sf?kwSZ{CV7purIof>L~VJ@xgWeX%(Kd{MAEdrQEp*qrq%#gw!Hq=T=JKqKrk8K zK&Mkh#NB6mFNfhcfS;1{Eq9SCo^p(%VRafthStZWIY9hLpirE@PvT6W?y#zs=bCA8 zwpDupXxR+YR9_2-r6D6e>WoP$RD2@3QS4f0=jiboV_<00Yo9w<3)Pqdv(pNDu$!rq zfwX9<0k%C)%_UF7ZY()&7ahSz+8V&*w#QZQwWk0F$I-=fxM`d*on=N%^LA%GJ$YeN zerTD;ge7tG2s#vK@^g48%|4OXkSoG>08?g1J zS8RpYNjrza&!Jj#0ev?&F0PjH$hF2e%9}9aeL@UjskYLctdP@N*Ou!PR#XmmhfIvF z__(~vT~)|!ytsAe3@BA6SxKT0N>QJlV98e4M@Qbm=h}XK4vSpj4nFo}tTLl$*G5ma zQq6P#Hk)E7h~am+boJx;Ey<=yRbw1;S^60E4fCa-lU!>U&>dL^!jWl&Z@97LuUFYv z$uzF8Hl3WoCD&*QI;}}_kIwX3q4U-y+G>1{QXa`R{Q6u~$qLna1q8gRRj5p}pPi(} zkas;~*c!_+Saq09%4--=9xyQ4pmA+vb?}cGLX+d1;9i`r*_0>rlJ+IsEcBp#a>h;9 zqg_)kL`KGgg&sjqpifW2BOY>9FBfL;6&6U9AuWH|=p|Fq*m8Ft;w|eeEA8v9aAs$* zOsj)mC!Ly7K8W(uLdi6hTu-kqsL+*ZDl@}McdAHyzdKN2vnr>8!#qh6?0IWAu|3gB zdyFJ>5u;17%{lD>j-K za$f8x#&Ned55|6Bjlz3$feGU@jNmKu?Jp*WdOtgmXFeV&F{LIy#l%vaasGmOg*KW- zkT?n^#K%5jo-X|9vg?wSwet405%+-5f;QWhGEtcDxk626VVe%)pE|AFzG=^7e$jfr zF@ZE!F+ZkFz~zIMC5SFfzKa@hQVxzI?@=h4m&(2mq4HBH!Lx|;{&xF&etPU=T_Vl| zho5|ZIYo`}cr7+3!_Dme$Be%OBlwO990!jSS~BQefY&KaZ>@xM!-?)AE`v_|t8X*h z&Y4?TlX6R5tG$d{hgb&iTnoOLq0|oNNVp~sI+TYB#xODUOcAr|vzSR5?gs}1>(Dmq z8``+z=ioOvh}2!mi@eVwP?1cjj+e?*B@$%h&a}QJ zzduEDeVI*JX16q^B&%_m%ga;WOMOu4T9!B(99hN7HLIYLfH2m*i0)k-+8GtN9E~>FI*z0rn@@F2!8Qtv;KxYZ6xyLYBh8EOR;ImbLIYwi~uB2hVe3&rIaNhfjN0@lhFekt$Uqew}p957JBGX($ zjmXcupHk6Uu2*Fm6}>i|&CZht=OH%cnHxIC6<48eTD zXc+JO+h0HR6hkIG3axfStD@Fpi5f{Be~x=qR#3|Nn*J~fMY_*1HSIK1rDvlv3{^~R z^qK08#;hdGLOrhwx{xwbCkYIKzmNaK02%=R0|5a60RR9100000000020|W&D00#fs z00;pC5C8xG!fHj8bF=!D@V&-x{DqHtUFSXT7dSraddJ+!VPCuM7rD=PXf*S@5jPh- z=IGcFWX$Slah!0-JnOt31#`7GiFXvwd8Qx<=S!XEx!)fFd?IPn>yB82c)%|6+#gzL zo1Etw-j9u%R3kPYK8ji2MJ%K55qHWY3yJ)qPak~4;*dOgcwG0meGp%anqg&~kpc{K z-S2n++Ko~Nxz;m-(rvAhC9$+pUgT5GJoih!7R&CF&69A5N!<4oE`^1`=eyBgsCW-& zzRpSvo$Qmx?gHHZ03`#?`>f|WZEsSp_^YJ4F;0Q^JKmRyR(sUCFL9n*h?;9!{K6U5 zJmC6^oVkK}tKvLLpyeKyL=C`|FP-;1U1{{Z95uDBW5zkr;tzL+-YKBHJpT8c=N-pW z#euEPR4DKdn`I!$0ZyaJF9QuL>GVU)^1xT&9`%nfA8?2p-!`61wTg_qJ~i=!!k&+G zcwI$TE@$(V`h4*4`Gsg!5T6)*4s+fv`4uHtD(`^-e}&KH&4cp#asPOX0Y{ysjU*#t4tQ?$QYHvxwq| z+2H3^boLW3Ih|8i5YyT_M}0JNtjdd!HVpmax`8f$^{z@NN>;J!o`!jSWsy46Oa#Rp zYC!kNp(Dn#p~73+2aTL}d=Kg-Z70X}T+Vo##$PKM3E@}h#JsRNmQdR$@gvi&V(^ti z%3U%=gofCJ2W7jmhg#1MNKFZMiHGHtK1zFkMAw$KrlzZuB9Z}37IqL>08-SfXpD^t z@m8Vt8(j4q>mp~Rs+7zUo{FRQSY^)>B~Z{kYdoW*5UT3;IXsRL>y)u)SR|U7r6o@i zsUgoCX4E9PPglUaUtE(5oM}ytT(Zl39?M}HIz4g}3$0|<4;;h_bRHt5mp#;wtP98D z8afKkWj&x0Kz@w+p?vgEp*N1aG6!2jBnz3zv9D-$2k_a@Z&TzdrL~5>xr>$7IA=&S zNW;rRdOa>1Km#%LQR&uTrbwc|?mPxYgRB?wxA}Yx7M@!RoHgSjK);&^FLf%~W zDJhpt#u6bfO(oDnD;fBGXH>9(mpusKv8hUx#I!Sk=S7YnoMX8U4yN`mj*w`fg*?Whe>$&U)_D^(sgZ%! z635c|^#Tk~bQDX_d#K2wgUx?<(OLH;)N5mEuQ1JScTy29*zcQ;tWxG9#&xQG7#F%w z>WI1Q$#WA0O6$-J^!+xbw6+kZuodjq$WtsVm-$TbaZp!nSsQTWx`Z8mlc0{G`F)}s z2Xl{|l&9QhkYye3TER4zhjcat5Q3CzKj@)b9*zLx}5wXVo#Q&Jh|np!bB+|1|F zp4sf?RVr7dBc78A7A*<^z^`z+wP^6?8#yB)RiqqRSwjML06v-J?L!rGHbgG-W@~vR zYil7Ys>s?rnOtCXqF&OOik~BsCI)n;Wx}=l6#U-kunFgc-sEsvI zFtyUKWuk^>Jpoc4k@Lz;&tnTaH5KPRMjVx*-lDH88|@y)Q{Vyd&(SNGQqDp$ULIP( z#EWJpJ~3p+UuAuH@?YdoHBPymYz~{R2{bvUh81=Ti$6y{y+(w#0(4g%kU5Aq%$t;5 z%BgCyrocRzp#K0YCACJ2z*^bljP15kc9sgLHM4}WM>R9M)K^A5taK=(p}7jPkPv7G zyo=YzOGA3)3E4GS4?!aOIUz+%uc1nr&Pa0M?Xn=D<&@6dIVF^s!CiUxBbP$9s*;I^ zGbf=5kB*OJsUXwd%9ECGuy;ZR8=udPmjkn8a$9-y(%ZJ zA#w4-$47E4m5{f`p{?`FfGO)u9GGiMme@2B3tM=nJ3@Jhh|=z5Two@JxYoYao67oe z1%!gOkcw8mCxfQX(4W+qa;*0BbjAe}{)$X=$hv4?EKqZ^#cY)3+XkW#$?wvFPg5(c z&$33Zuk(R@WjV;W7d_r2T~DKxS|bHP-1gd-E2Nc1b$+<#vP4qqXPtzQq25M=Qw*9OP=gT;qNvPu#1g#NniOhl z)|tHNrn7h|@Jo0ybK!dargq*)CqPTRmeaz{kA*3oUjMOtlIf55;8CK}eBSq_1RW`q} z^;F42KBD&*qQuceuHbT+dCO4sdGnki%>^HOqx046wI4X?eK*pVxtO#ow?{y+sx1yK zHFcv2(_VOz>yx~fN`%Eh4t+442A0tIYNATTYOg%me6&c$soAZ&i}y&eewOrQ#M1EnG2o=njx;H!c(0Y?*!}eE>Yi15V+CJKrjoZxgA}(S}Hn9H!*6H zNsA@;arSIEAa;8Z^k?rUIdl6%I`q6koknM~nSx0whieJ26Y=&TZEBh9m7R`FDO#r4 z)eTeVdRjf3vo!i@7fQ6*Po{T7IPVbWyFa#T`^eAG99u$r5?p@GI1}mfJ*rK)_n>rg zN%{H_I*HMAy+s-5)`_e3m!>PT^%W(`O=+KAC;K&}Nt%3o@baF?D^Q!XMrmuNEX!iN zRLQk&P9+UjJTDc~o>k7miPAQ)mYDT1-y^%%CG{-~qCGg%Xf(r(mb}`*o~eBIxIGFz zkaWcV08+0t-NnDz+OxiYRMiiLK4$TGGl8HiIhyaw5!(a)tL zvTAmC(cH~Bui&vfB`FHriA$|kO*6U+9c16N)}_i;34QWam8^--eCLR;EU z$*|=J^)hLqeN4m(YW9uN*dIHj;=$8{a27zMqS>a|W@QGGol;c#R$JK1g^ost(tKo~ z-c`y92T$!5Lc>;=!&Ej?Ha+?#kmnvgl^RekDl4k_T~;b8uji@?t?EjCAyoP;8U}J% zN9E~G?d(|O)Xb`wYWfe7o|QV8>|DBeN1}lmL83HgYOOgs8Z4b9=NB=wWPym&W`T~V z{Dy%eGj~5l-3}pQ2FdJllubOAs@p5bmoonVN26pCFg(>zvTkqCb1S-VQm6G4G8Skj zI326xdVbhQ%GJ+2_Ug~AnYpF%scSKvr!JB8dFGh=7KU238l=bS zWzZfjeH~ndb4nW(EdgbpJ*H=d>o4L4Mn1W-`q}e0SzjdCPtDxc;hpTUo|G7rzmv>e zZ;iF_Bh)X$(@a`W8#=bbtL4RRzp&aG5NazPm)z_vA1^oB?*(wO+pereU78oWTQaLK zQ%3jAh+M`Z_$&l0sgg49OTN%el4miXx)**G+2>_>W8GOr8x+M1bl!~+#ioXqUWaqV zHd{mDEbX`2R zqe-}KI%?wO=b1MtkPhB(PHg^bj$YKA%GHYWY$Ss!nD+^xh(A{cS0|{VX}j$0JoDZ5 zS!iTw24ynabn|FMX+@c>G^KQU@}?1%v^xt}2b-RK-tVBQElR#yL9r?E>GwRSy(8;JWIdVG z%0|d<79kn*eKvoK40YwApL*|`xisiLT&~VL+TSQvz8=S^6!Np^6v+weQZw0J%r#5| z=ux3Oezg}(E9|yT&wrO6eMev;)5N-r(s)rmG3ykGqYpJ?j)y5AxxxO>EJ=!zFQgifRBIVb`opU^54KSyH zR(XI@{M#nxVbtvPa_6GxSFe_|eH3_~MRrvZXY}lBO5K3x_brVZMU$P=+RqVYsA7#8 zApZcI(~G|6cAxXw9C>n03g^#mspjYQphn(B#uEF%$)?gdG-Xc4ROR$}7{5!{bn&`^ zqhl^T{O3hLS&;2=%gAFXQmDG+AyDiLnOacvc~*{j4vKpwhK_nBRlVZbzlPg>Z`(9a zFNVyiirnqAXcl6fv5A}XaMs_PtQVtfeXeSAXz9lHJ2N@`;~MQENXsUgaW9e5`PvB< zvb95`bEk<(X!t9nqDD@vdSoh1S(HN5YgE-k+N#Hp>ePn?ta~V*Qejk@ehA%EYF9{@ z>uH){gFx|vZ#D-y*5_X~r!yMZ>oMfM(CM;WJi0OT6-f+3RLkW#x_X?Eh*qvpt4_Qq z-1<;T+KvKNfw>G+lF)r)Dx=aVdGxmnT&IssdO7_Eh_2wE55kq4{{Tym?F{fk(_7}N z=Wle2+QzR)s_C2f>lQC zXe$-?WYCsvT4SOy>gZ#jyXF3kFj1$Gbqn)wj$PUX^Jn#zfB(b)BoF`s0|5X70RaI4 z0RaI400065009IA1`rVv6Ce~77BC0@+5iXv0RRC40r&zUaiqFrJ4L1hE7x3dxu)(F z${MeODh#P!t}wmIdG-=A5|(<*Q=N4rTQOVAo{OYF3QY^ipu5DOM?{x zs;(}OKad}vlNVRyhU&)Z>fuABQex<5&z2+~feNdI4%u!dk(bc5+O1J?tK_&|uKic4 zmFl3umt_C^5w#pFWq|hx*E9RVJb4& zX(W>F?`?7=-pi=l0jiZN(0ZwGq0fs7AIVqBpKi|CcYdx^`BJ5NuUB_ImHMw&Dp#w! zySuWs5tZHCxpL}ewaS%C6j#9ZQPQZY>gc@{nO&+TE)1zv@Q3sA6gYO<DxUWT@*Y0FpTV%X|-6&mFT5a`nYz> zc{rJO>aBL7Q2_~6*?qgaEBY{HN}qm>{=ZgVq9e11E({nG?U9oR$e~^T0Qgj>6FgOo z#zuO-@KWmP=g(CXHya;H508wbMcVK6xxD7vU3Uh)e7Sc~bTYkMx%mpORbMU?yDKs) z^fTpDuU~5FeZP0=rBAZGUEST;5j2YL)k3S6K2+r=w#CKLg>_Qr+qPLxg)TBO$eKi7 zRcN(Al`GZMxp1t>gzIEEeyRjrs=$P(zh7?bit5J3RQvbu+bS=%S7&gl#;9m->6Md6 zuI}ak0E_ohy#z#D8T6q`{{SBfU0oFUE7d}bhd>ujro~d=*_PAFON^nRpDrEz2sK{r ze1is8tA`34J1tg+Wi!|Av!TSs`xcgV9d;)uh3uF_Wj(ie}4VDDB0(ph}hQ<-?4Pw-YR-&x2o|$WXz$y1%mS z?)_DbjnBVs?*9N(U$3<;gnuPc?1+f$p?kT1=kMCTqiZD+%B-PF{{S~H(R=wW?i5&l zPM~UN*vy&gXl=@s2mIZU4XzFS`SFs*)@rpF3=w4>gSzxJRX%#ZcPdr= z`d4;kc6WCHYe43_$C=40{NhhxlO>`mSGGn=u=R78t?}{DrA5+3BDfN&r^ryFA;(6; zAJ6CIRaI40ReG!Y_wV1gb#-HZufMOhU#c(H=si_KtA#Gg%I^IvX$)NWRe$23+U;Z( zH*lr@0IT(K{rss^RH3-Y`BXF%Q}ed4K#!T#n>SxfxIU^6yR*Nc0uP~uf0_$jtd_-) zCTTLCnh(d%pC`+rm0vDjufI&L?1-3AA)O0ArqXH9ho=^PO1!1N5qWGSU)!>_SiqGA zvduB|q7)daO(rgaRIhgm9A!2#tbad?U*?9Ys-;h~RexpQ-@ks*QGL6+`*-^KHWyN* z!i5g*9h50@rd5h{D(mz4v9Y@KQFf~W8-*|Ye7SPv`>#P)Uk0u=J_UTL`9sq#ZB($q zlcBJW-9Urvtjp@CeGL6n8le1I%or}AaSgBYRVsdIf5yP52jr)=*X-oaAjZUNG)|!<Id)tPGm9>(50Dqy{4H5on#<%_z%r7j!@ z5M}||ZLI^Keu@7eeD^eik(_xdX< zIdbLCkpYknbQm(KhJ?Vz>c$LQTn|O*YjbGA*$P~_^VLYzY;s)o-r`zWiu!Waf zZ9w&2stmIIU6i;LRrmG!0#&XIsdjTyGpqA;aN)$QDq8FaSsNQG)xw1e9hqJI`ijUo z>0;JrrLO6e$;__V{QQWjmj>m_m+5n1buWlH}51r8iI$x@|2zqf3= z^?t5>`*-*4db#$lr{BMC)k?7{Kh+hHS>4N@FV-PVJhhm>l~qIy56|Z4BA`IJmj!zE zp$nB8WeeR(feY17rERc-=xFBBZE-6Q_jL`7A9rI_2!`R^K=pP-`U62O=%|R8T?XV` z%Y|k`NCgE|#zx0mFVRE0g&7Lv!I|qQ=cQMYZQ)_~Q0G~kKv7!sc2-w$mdhz} z?Q7?1MOIW57LJY z&f7l9u)o#WT)Vk;Qt$2Gs+a1eO1k%d>aXnk_FOMYtbkLb$h%#Qh15Daxpi@N77-)U z+0Dk|T@5nI?iZ?+2A4&3F6ua$YoDddv#`mwafeYj)I$QkK(CB~B@W=qmux1Tu_l89 z1EOK+Vr%thcXELMx*CUWJqCAj?#QlPot^!^N|?tuqPqHdIi=ZK3-UBnVjwm1;L861 zD;M2Mg$f-Q{(m`v3Nh6_u4kK1^>%j4GI7=Ym4C0)s_h6Sd#Y{Qj@7BSay<@%{mU=OO78FxN}2xZUBytZE= zwv<&ShOSkvzFl1$IsvF4!F9Us(r7R+D!zt{3A?kYRY0|XtYKSC=F4T3k$$f1uFfB# zE4=rPv)5-=k76HJ3Um*coigRi8uf5*@81B*KsCQzcXiaO=X_AnsO)xnIjmNyqHv7uqmJtxf`j1{aFK87m3e6g{y{3?NZ z1@X|LZ6p?`M?N~n0EmbP0M*@@xZ7+d5!oNoKerAPD=Yh&@J!QFF(7?i-SyebUeYgD zQmW_Q*V>;_R3$20xL&?~QoPHW*imEm=i&5r%R9Kwe`@~GB7lDnSyjTjmFlH>xqg8q zQ|zi(h+6DR)%yE)E>!1?-bZ8TV(zEfBC@-M61TG|2)@M7Q>gu1zhf5y51^x$MOQ-> z2vrArW?71Ff&w*PE-Her)xxQBIE_4XE$cd6B9{VgcR4mL6;M!6P}kql8(70>v4w21 zFX{TLySpgKclRX0I~qKHD9V>*c3ZEU8VIhXOQ=xq^fy=3e~;$SXX@qM`}vh&8e13x zcV?<8)n-kyyNCX&WVP4j;QF{;tJO;Na^e@x!{iwy`czd=7%(oOd%tU}LvyBg1Jyx; zcXfAVK8P@s7h`^tLt1UV?xjkJp_S|B%c85SIB{jE*68b;`p;WE4G5g5svlo|mHI^t zaJ5=eg?>v6sW@e z1g}>`OqD*Soq2|%B}He6v|+<8jDheb+Nph;sz}r$kL@tv$hl5?FP@+ z+qTBW7FI*z4SNJH&_V07Jd9^m7`YS2+tSKNA!g&;1 zT6if``_e{6Rz-LI)LASc*F+1|*UGA|S2C-YpJO_1mnxSMLS#p0E*;(7{gp9_Y4^}M zP;LwxxKr#vX>N77!DDp-1^p=h0P*srQYb1^`S9ayg@HGE-pRW7)g2cquIj%vKAqW7 zeyRjb3}iTP#exF!$Qf01RKfg>1pR$Ep!K+zKE9Q(nnhyMQy3puj3SJB+)spML%OQvii*EhYA)N`op~zex>Ez>b!Ii-9Vtf?O!y z@m_{!fd;CoTsY$6q(`Buqo&Ej7D9t6?$kcch-$9J1kWlm95~7;L$tWr*F_49Y<^d^ zO{cAjiCa-{qhn>*MarKFh*?>)>zP)QQBi)#j`Ykc?KUc^1XbA_WMt?!hnI80Rh6<_ zDRBdtai+q!)7vV!!&SO6&dSKX{rl_exmV9MT+>Ms9@jQ zv$C?gySepqpF>?DJC$R9YFDd^7M4`)B9#{v1`P#WIu-ntDpaYO4GnrIRnrbadV0M& zXq-jpxIV|w*Tbt4uY(5jdOKt&%b{ygSr#(q%c85VZ@qI&&s<#HtN237eH9E;8CCG< zgUwGF9c{=pogeDTuQejIokh=qMKastNl|fxqE*%0Id)R3B9<&Cum@RWzNB4XtDOQn zbSt~{Qoa4Vsgm>EM^@1M-FmM|4t9E-jaOndRzIJTy<9j~a_`sF%p-HIcj}dTO*t5rknf7tv3c;j2TcUp-ZFnP;V&Qag!Kz zOua1SW(Xdx6fa+8+sjOH`B|p+eoRPQCtni+4ER-*8qMSk&eWY9ot+mTG?73Wp@R-% znr!c;&PGngK(9Q${jdBCmg8avi}n(M?&R8ym6A1~ciSLS{Dcl8&R#xl3B^L6?8 z^XEMogIjt}su^C2u60Nu}t8wCXYZgj^q24tVY_AloyZc2RvYxyN5<>IDr|R5_G&z?cVni1S)y zON9z0d6OJ+6XADZ6jY(dvFUj}m zdPPvWn+jj}sm~Nvi|LoTy1KEv!scT}*ZztW!Jmnjt*~IlRM&sw=cG!N2(u`sOx87D zE?w-rlPrCVC_aV{yN7VSX0*)&@>l?Lo&%Y6Yk^YXMqL$`)>+#oG}UiyN`)C5HWn94 zvA?(#Q>&xxMa=d$_A;=Caf1S?4MMcdQ=;A$Pbu0rlF{g;&&Fhcu!_dCIs9T! zeyUaemowE;bMzfW_TZzm!L`^#OPcOg{r6E;Gw2V^N0zh_#JwHqyfmwA{rWzJ4EqZ1 z{*-onbh)Pg01E@Yley@k0!>u=4%>gRJ0rFi+zaSA#Rjezn3$CvMc#bfHgGa^waS4r z!MUEZR%+bEP*qCxbL&eY{{ULaa~&pqxk9w844Pv!G>m1;GpR9xsrRbPUq$F3dbr7Q zr;Tzt2nm3bbsi=^E{d|}%Z0VodX}}aG8`h$KjtCCADuAhsD|oQD!ITTzCK*P@mGa! zEmirV$F$8yQZctAPjA+b-sC z=8mQe!bpP|8&^j{Jk+dvFIeM7qbhB%rVCi@40ZE-Dk{1vx~fHB3a+i3D*pfqrPm`S zru8&^tEp@0IBis*8d#k={@1$oRwYJ&j4Z<85x8*UBd?Gymw#6(55KldWtkpn(=0<& z??ii8kZW^NqCH$F%Xtr`6PP8;M)tkebq4xK?*_imtmV zRLEKEVNEp-WnNIxqe%kwUDGQ>JD6fCpgF4M_;qz+b#*chFuB+wqN}U*Qxb--FR1+| zQ|}#qKA$(%GY|@Z6ukn^Req}Kwb<7FDB@j{Tl*V zCjPEfWM6QUBT%JSOtY%)PF~BjO#xFSuGKSuQwf(h={rb-2={XV_mFOGD9So9DydXg zaIUL}pD)rkQ8$c&?rg8x=0yzL)2!=sI%Vj;pD|4HU?5pG5m)Bvm2>AjGl|a0U0oFw zTu4q-*JF7ra24J~KcRyMmy z4d$%WiMGIHM#?nS$7BRXljGq`cB!0D1sQiWx$VTi&_bDqJq2f`-olNBCN>|Rg&8hk zUnF|k233vVG|!q8ynIf%QRfiT*aL(hIDMD%b$H+{rmf=)P4kj)iT^wRy`BXT>9B?DxmrzCRP3l z9Q@~`imO5DW0`?n7p}4jDRoy0GTC%D9edAhFN!KDpRdi;PwI-Mr)G52@hx`S)9 z*i3bRZWOBd9R`MUUCBpzw;N6ynI=)p14V5n7T2IO8VPr#xuEHsRZqPI87_=}KbxbC zmpRJl9H~;LJo8va2`LJxsIxDs?3QNcJ->ZsnXKtmvdI4cR|?MV1m#leMB6@H7_f4n z<^(mGCgSywd|wxo?U;uEHnaNZSzY?M_wU-jzpYJsF(#o~P7NH%O?^~@Y~qGgAD8@OJ+&$I8X%*ZI8SZ-pyYqOluQ0}pTLkyb2Jm89X zRRY&diHCa2L37j6aKuc}Qm^mRvy?Hntof-xcJ%&KwX9e8{C;U>IxiA5v-hdL;-x@| zBwEJ+bqqaSmAdj*Mf{xohmWGGqh1uDam<>Twfx-snL}2B$uU=8v5ekTbVOfHd?-Uuy2k?p)6~f)&y$m*}QtvhpqD zy6ZdF8GID^zNu4=2(42zJLwTZpGxo7-@ktJo6KF=o0?1mOFD$x~;sv2RH{OM@Kok+3#+{GEQkzEqYM>=LVR%QCL z`gUZ(JLV@-7*f5ebL~)VRjJvM`g)l)6N=?Zy11+76?*R7Pq$@vcX=l|r(CKOyHJ$C ztvgZsA}(`RWrrSS7OP%ux~RIX(2Jcw=OiaGeL4xGpgm%sbUmT<-&}$4yNQ@_Z3+F zYQB8@tN zu*QCxe>v)}Rp^Kdpv-kQ9yN7bSLpR4WUS(#NN8?EYaw+wnqusGkY2vs)v9u!LcZkr z@`UN0xmA*zI^_SENJ zm+GSLkzo#YeGjG+Zl@S>)8|IukIb33pE+Y)x8JTB`9bCn^fNrgMt{69vB@>-tRdE~ z@G)VuzL3(GCt_%!Ob}%AhVyr2Jpx$$q zodwc&KEDr(fd*V@)abX1leNC??o=2x`JqKn*kT;in(a2OuNmj)bq|_}-*DZ`^PZ%E z6AkVn-u@;$tA#`)E={Yn&l^{I@Y3eTmFA|;=0W+m*`{S*FqgUF{7 zXI2Q|9QARl>+_z!Lu;ICTx{%1u$OHju$)0e)q0QaaQvxVGQg)_UAO6>c$EAL6N1oqCR-2jQUl`m228ukpAg`bzMpVby)RD$_pU7PKMXMeCPr zyRfmD;^uMs%hqOm@yI=m3@%U=wtz;eFq+K_O5^z?MsI&n{SIB)~4P1 zshBzW&>C5hY$A=DS3#b$xAhvn$1$se6*#d`)3qwb)WkV+#1&l>))tq>3@}1v)g^7NI zlLbc?SOcVXReImXPel2s#vS&$e9EqVb<+*Z#gnObIa%7&urKRt*GRC}EDGqVZa#YM z4E;w-j$*4A`76rr*iL3_$}3bFA}DmxVpc4?x`CfszSlH@CUNO;mEE9~1Y1suoKXqa zXX_;eV_#|9#MOBjm0aSlj=wU0s*0HC=7ZzX=CeUEX!kt+|R#tQ3#WaA<6en6{xtK63qQ}}t6*3k5`odv! zU%>c^i%hbMv4GjEW;iPfrg7+qa%; z^vnDD@3Vj-LJF;nyUxGRfeGHN1)$3~b64dWZtnin=cf`BI*%flc7J{tu}dA3`dXHM zUY@@&fdk2;(MgcX}|S!tYco#Ppda09KU&skr5ioR~I9n0m~y;N0Vr&g)P3Yw;R zy6CS3`3%2RGXjGs73Lu$V~<6uGV%@~+IZR31kerzXeJR|LcLRtw?+`!S=7(+2nK7% z{{T9ZnLrVi^4U2#^N(fKO1zZfvitRf6Bu-~u&`$5XY$=2e*K~gq6x`Xwj$G6tI3+B z^jt%x`Kio03$)vq(Uo6KhFVLlr;m{#*4O=c4pqj}8BFpfc(S!m%7?7X3es#R50pEfwMQJD&ov><70aE`&sft+>`~0qmNz_v z^U_C}9j#oj%rCvsfyqX=qC53bQ=YdkRdN8O#lkL;;I8byL0G{cfMi1{%xN*EnAyo# z4^X(y>ZLV|BZ;T>h-+z3J83%1dFo~KjLRt^Xdt*zYU)3U zi@UEDI~)k?>c8<GO@0yFgqjfVlWJpt)R`z`m=j77frl7t< z5LIlw#h*uIo;0q37p>*bPU1`wB6(anp0Nj$KK<2la^+P^v@c!hdYP2Q%6y$E%TJd- zJNdg5bUIPH1{z$c*Bpa^XFH6T#{iu23&Oms8tZ7~sYB9bR)zBihMzQl=IT_=I95q_ zFPaUDmmQ-+FprW~qz+KXDxxZa+hLX3Ro!jub7=+I7F4U3g#Oe3}x zPHMc9P5a1>c60{T;a}%`=pI&OYDm2l-+nSXNTv-qG^nmS-jgqldxdSBbGZ$Iv8ou6xpSreA@D?w+6BT=R9gr{j2>| z{HiI(4uR;I=Q)i)+t}m%=1t@Y&#i^GP9+#HITK<{N}!+>*UzjXvyHq!n(4K%lbQf7 z0964;vjVk7Oc}F>ds`({56?&rLN*q&$T)|jTc6I%B3I4NqRM#_u`eQ{Nh{Reww^Xc z4?{-RT&RQQH8xeDU>SpyJD7^Nk_W#X=O{`A+5H;<`F5Gg4w*76IV>^KZ6+08CihN*c|qUN zomtTOZS!3^C`gS31o}jGahEcKZ&i?g4syT=RKLe-UykDHH19ACb{^ScDx})2Ry?$4 z4zqF!<|*X;UmwAxyPJbPVa+$5%fN*T$wRTQ1Dln_*wb*OK)ynfKbEhdIEuwVEKoU7_t`%cnm$=}E@-gLZL+!t>!o~IY z66`+UPB0?0#}7G0J51#(IQATDNoBqgJe}D=vsp~4=VS!-OOPs>EmNpvYA!MEuD%o{ zRrin@8Ac^mBUe`0&J07*FN;=l&Ra>uWo5#x_q^~|Vce{hPrWCV_%!PUjX|ovq+d*m zC~}VCwbIRe^@v*k03A&kl7V%)*1Y4}(n2W&e-d4<_;NEc`tIW|DEBwKrWV!E+r31+9;^KXPm%IRW`e2)ceKQSsp$L9+&Z(}59OlekoKG-y~|=V>+gACkXWuX4P9W%mdfa`dx%yrH+}$6;|s| z06MvC>5F0AR|q;pxwV*(3w7!}2BFB>KZ8=NtjLa7C{Q}+sA;v%0T0H4>}ug*+TE?^ zXQI??fB>*x@+FesK)nc0g&O#$X5SWhE7wYF5p zV_GJvTQRoT zk;TpxbV{^tGG`c3U1yYBO$@3S*~n8PVgTmU@tM#UK@d+IH*r@W)Ot>ql(Ags z(XV7iLqb2#Fh;|mtrMCRUp$L{A0sPEGACPeFSn-YVzB}EWBJCGS4Q*UT6`&_}ada+boSGTF`QR1U zJfWCdJCjiHSHwq=8sHC3W64pD$4tJo!z%NRvO6dfg?+)s%TD}!6*RP$MM|0Kr3+40n(3mms8xV^H_KC^14Zh;- z`55;&y=IML4xmL!mk!Vf4K@fAc6M?3{c*d_9Q9;g#^Md6HE@cf3#+Sxh-Q{P>Qph% zzvr1bYU~Q{^Tn;!^X7<-ocl1*0e!k)8uHhDhcc&?lRDT{5VpdXV@;2}&H~Q_f&M-n zv*``eZ$18ZrIpW^qu95sj{1eN=1I(|o98$fS}#1yT1!>!rq_&T^0%buNh=P9oTHX7 zx|1v$&s|gcRuhC<*NsXI3FND=!kvXERTVyHnWr>5Hh_p7(Knv-tpQ>+vSpapQ%o=w z&`|B1sA5pbjQW684AE+)6ASfLsgO$igMR}PXGcdfH$m8y-+$Rwf~z93#Jhz`UteZ) z@-q2zaVeM1R@P)3`813ewR9x)0>00lCXGKY2pE!J- zw>k^{Yl*71&T!!!P$;Hw*lwJbY6Vy4N2knyRQjR0RW()%C}hhj0aY&l07#6DH!)_$ z^CBmZ@5;Vje%8Dx-g&?;Lw|p}H8Pw{&sl`!3t7<9#l(^G7IN2(SXbD70GegXjVis3 z;Ni3DY{=3pV4vvVRvH-ihd9P!t<1(I^xP`Yo{m)8c7J?Rp?xJ|#fb?Gjmo^LZL&18 z)YE-)PCjLR{{Wv-veRaYd?|u1ZklhEGtR;DD;OB`2Xf~=u+%82*?ksb7xW%Mm3&op zG%=jvvex7?MEPxYhP7?V-``D@cWb^8s&%L}sn|!#Sv1y#1Of|m>>Gd#H1whKQ?oZ6Zok+m^J zwDPYU4`n+W3FxY&K*5k8J*9+2XSs81tA#J71Ro!PXe*%taE4r3dHJ2(fJvs?mRN5dq zi=7=>`UdO;MamB(-^aZ+11da{8=6anpSIM72X=R21)FT>gG#QbbB2Sv`f+occ#F#kQ--N1lX>PL08P7D@Pn_kd8!!Ut(?Jxu)PIj+?CB%WKQToH#JZPb zYrbuiZEY7mi6+$Yvy!o#|yoQAZzFPcJ5&C0x4R z&LXZhI=W)I=7?76=r4~|HU>I2{{Yd}aovX~6J}WhxPQ+Ivj&QBwV0H{q1B)t6#S=j zackJJh*DF~8TRcn5aB;BEQ7~hveg+%yv|W+&9Y{g1@VTsxxJr$;3mN=%vJmdvw1eI zSF5{UFb!lKadj;7yA;YD*F5g(^G+hWdbk+3IHpx?*cXgDy9kQT%Ka+5e>!hddmA}e z`&)8`YU+~aRe27sSYZm93FWM}Gb)n3nwOxXM)R++=j<(k2)eu5=g4p^X(y zZzk+GBg_Uf9WJ`|u)?vO7U|H^@x*ySZExjarP<~h_}Hr33bBZXT(0i^=7^YIVCt&dbtc8^{f(b;gMA22?vmUB~#FH@E<71c6i=2Gjrt?Rm)aUas}Yxa07aUw4fz4)5xbfzbtbaKlcu$05F(?S2s^mASjG3!npgQ+`8j%S;bQ7&#-)o_ z)y>RDm1sM%D=WW3K0lQeyG@F#rK`tNmaOzM61KlA!U>K&OnG&m&du|@>$MhZAv)u* zXH`c8v)>pO4uCt_c)9W~OF9?JKyV1^3!A0pUg#djbGC3=cV~+BFWj+#K+y< z5F&3G?=1AInkK12icwv#G*)I*({(=^zzJ4^3C$fwC!Fr@S64?ZcR7OE>1nFabveL+ zb*_eNf+?ofx-p3yfYVuOE*kUKk~rl6o_!Qq>tS-kDE5hSm|Zv5qrQC*=MKSRqa{ME zS65bSqr@Gn;l;*H;k6%*a`R0_@YcIZRa2Lm?WNC6(bj~jZE;y$-TJA|$;-}H(A9@O zk?y5&RhGLi=dUn%j=oS~38k7?xuw1}k85|QN=EV$rj_!IceQ;Lfo8rMy>v9LxjDBp zk{T4c{({;ewoNmh8d~XDUwKm4vi)g4<(N=f4DZNZm8l|+#&)IwsOYp_i>g!-SzPH? zI@et$VxOLXM3T!jD_rb?UP_S4=K0xl0PsYOlI&LYZOH%-WdOLhD>) z;x6Y%(x3VMp{izTeCCQLOFp5@ZD?Q9oauCnRfN=eBWA0sBYUtn6?gB5v7?&nP%^QK z@2957mPyK;ZR2C@YUk!LR*kW<$TYGPE0^mMIk|I(XKz0*Pfzn&aDpdAy!3_iUCmxf zacOMr>Evb7?Hd3$) zt=U!3(1qbfq}u+vB~-jK$o25D_nDJ8XZ}s4mm-do;A@$n)dCxHH}$@AS32y&DsGI3 zB_3H#CVbC&8A;Tw6U7tc2J=e0{AL(aToHJ+9Zaz@5X_?K=&~{CBm-3l{`-jLF+t6FhHJ+**{C*o+i;J0s z_cH$gis4;flPK)rdsy;wV^>R7RWzQ^6pnG$#0GHkZJ5`95nI^S8L+rny4^%-$)UH= zP)r2MWaKt>P(#S9(WTPWkT54S@?+*LwoK68>o~0Ev%9ODx3yx^JH&-7#fy6EP%esM zho(;)DE=&7$h+VVd8u;rG0i;Hb5k+0jn|AFdyf>UvOXsB))j9A8L&_C5#z4>Wgb(j znzv5ms=}{(UG1oq{Uac;S$i=C2 zIa8Q)>`%*!lff<{7g_f-Du!zJYT_X}6Zhu*MxD$hrnqQ)`KrxwDy+sSLc-t%&jk zG88LHBB)y9dkpkd28lWxD+}k&R}gM1&3aMd8=6M zAu%PBPS5%dj4kaWDv%vJ&aRB(FP=V7d6uBN8p51u>z^*Lj>)bm0grz-{(RZ=Rv={R zmReyxGS1jq9KuTZc*0c1GikK0gfgqB%zm9Wvy+>1@c@C$kGKB-T`Oq3ZjC?-M?F~w zud9!fxw6ajE#sA2Pa524O@<+K=o3!o2QQKA^f!r^!I|`>1lmDkHrIU|0dse0#+-}F z++&=hVOGKEOhhl{D9v@b$qYH_j{g9mIGpyZx=hHXj)2af6Plx==Z&w-3`kCkJjgv0 zX=gAjAOqDU4qA_!DHYCMO7CdOx*V$1HCwNau9GnWX@k~U*Un7pm|a+t2#(5f8LqOX zqoS46E*kUCAZ9QTb*DZI>mHHvLm29@71C{}*_$F;c*G`a2-0=3&h(kk=jLL~pJ{U` zaLc6cwOH4p^uM2FG@VyHT`hbijcTx^i?cq}H)Q4G-OC(hSisr&${kHsR)4+#>}Nc4 z2V~Hztb?+~b~JGE`4+tl_JZY@*G)Nzkf$O40KTH}ES&P=W$tV7?lNgV?QMRX?ds_9%$lshVll;`pS_pC4=QC?+U*sd`s~Yr$mM|}=TH`u z(c324MRL~G-Gyfr*1P@m55&{utX#&oPM|4y0h6e~m2_8g;Z7`MP(JeuZKuUuO>qNr zO@>q@*R;7Kly#OtaOG;tSTgcXbvXHJ)=Xt>w=~VbgyCBDELGa-Nk?6rUqj+S5$M6 zg0d4_-1$zq8GG9J%I61@Gm%a<-gw&bq2eo;w@ofc;z-Zx)7P!N9969MXv=;#mF8vi zjNPw8oBc$pWgjBgHL9YOKfalRw* zuqD8(nXFxT5Vak2%M7+Y3al`#^PoSR@7R2$b@b<61XMc`v4%DTTHz_eOP4w6=)mS> z=czQe4#MUyIP{oj`^#OeFCe~R`g;EW)@jPSuFCNm6`}Tg-hWF+Cp}kf{yd!3&}TY` z*?FTUk*5lAFG0NVsB|+@bsXr9MPnYdva+innHkx&u5ObfGQvIm&uj_H$*-arj9WRu zgmVj_lI^o!q71d6s2mx;ImGLsHQxz65a@I9LMknc28NAVXuqfSC)p@j4s+G`*E0;> zd}Z@Pt$#-Qnk~T%KvW z{pXxhsnZT_E4|mtPfJd9^7C~x+~%jCWZrJIw96&kbW_e)O|Ht8SN$u10?mLK^H*XD zxCqq7Ss9y5&GvGp8t13C&|33h)wjp_osf7wv8O<)wGk4CrrM}Oo^5XFpLnvNGIc+tPXj;a}B7O{Rt7&!jdUG1$tkGVqUN%<6U@LbwCuH_x2m+cOI* zp7qQtxpPcB1s$JRaJj0%~oy&_YOx8)Rcx}=CFWPU6)e{0X)sz>p+>H89rrsj? zi|df1`R5|McT=o<)pQ)O#Ey*`F)hhRy&$ztv@qeSiSVJ#7jc&9%gh1fi%&k7ZNiQy z^oK%?98?1WbT8_Q?&z3x^<&J>=~3mmj+_zV-tkD)ooWYB+)(~m1|Vv*UOLKMMhwaw zhGq^*(K|239ahyRDs6MVeBtKTQu5PpX=GQCKbjn%&pQl6=`gJf=akV~D-bTKcbtP= z)nQ)a$0`wMZ&kSmRpre~Ln^d0T*gFjLg+1I;?~z`F3KH$Yz%@!)MgigUXSXI#bUV00Dy+ zSGvD0nWm|5?e})uAyPQ`Jeaj_wP#*MamQSEh;gSFYILrOm<-cO22CZ#&6bFUedxWh zEA2DKmGXdY>p<%UMN*dgxPU^P3e*zppmf7SC!&{Vcua%`n+SII|G*if3nzM!l0CpS9hI;jk>%W~dCBVtdU;~v< zBL!=^Xwi!_muGJuGDq}h`!ms}XH{Cx@~u;0=qj~_^UGZ6w^!f4=m(F@P;7qU$Ur3Tn_WrC8P%~mEYjBMaopu5i}a}WF!tXKUR>Q!BTG5evbQ5jvoG@U z8I3@`g_%lq9u=H1&Yoa&+s^}ypcd#iCH*qNIkRbKE$`;1v8JVlaCGRmfQ{%g*m0*;B_k@1``G zdUf=+ZzAIcA%6KsGwX;Ok&LlFrCvf_G_K<_O^s_<=d<<4!_Y^PYw=+3K^CM}bDvMG z6_|XDoa#B(yS(*@OkS~c!mOk64eov=ZZ8&EZ@+V(+-;`Ra`&eywAsXtQ6lNNAm!Z8 zT=Cs#q)Y?k2Z39OE7tP9q4Sy3yb~2&?62jFJM6-~QqxUkUyoDAqJpg#%-M%g8cNTg z*G_JCRuS#G*tTLVXWG%t&4nc$Ix~QWKpK?dW{?W~TX3_=rxPwIxV3B1(|+?|dgiYH zXCA@oFtrZmW?vm$9e?c!X@fv(8&M2E&!o%~4ksk{D@g2^>lps&_rImD60t0)737SjQDtsP%}VPi3v}Nj zD=M@Mqc{rO0|Yus#J?pDHhk^qv#k3s*W0||Lzr?8X!o-Uv5#X*RE2l1ZkHi;j zVQy#d8#B+FW7t)7m{uBAYsd@-scO1h1#`e**T>%XmDKB{6{5Lxh??3-uIs_=tl`j} zKzNsWIa)LiNqa8@#|ms?C-0u6ib191I{^Oxc^S~W=)kVaF_%ERbe&0D3jzwc{C+wV z=wk!QT{6`Uef#%>v<^B{>>Vv(&}M4!{N85&097i#AB@>K_>`^tH|h8lff`RL`MJ6p zKd)Kbkmj%d0O%Tdw<DbcK{^9Klo+R(GNMH*3%>;A~OsTAq4;rYh;gCtghzr>UG7 z7*w{`9D22|^EFeOItEVDdZ`P|M>W#{Q#H2w59d>2EmQ8o<_D0LK=T7d(=_RG0$`b8 zO~yrc^BSh3rK+B409K*qq?gPCna5G?&_q@@y?UU|O)3o1Si`>Vdht?+QPn!F{0(7! zHEbM{6Fw3;X0YZdlQnj=ZEhZCLmxW1D@bEr#%7vd!yN=6be#uPWJN#|P&|<`&Xm(n ztCv3V7l5*f&XhuOS8q=nCboGa=fR*F9Jw;)LbmGPqQZa|%*^(2a)j$@&Rfrno_Kjq zoED4a*J_t4i+2;Doou!iy?tJwIn(bKPEF6&T6AjV*X{2vhhMz?2*KmL+)3W>P0n0< zds#X8*?eR2jVNXX^x}aqrl{MZ$a0@rdL^E5;72y$mZ_9D2m%A*E6J>ji>IE= z>*}dv%K=|sUUAJ_)#!xI{@zY>4$Ru(*Uv`wludJSC3+@79YXzh=8e2+(GQw|~ zDWX#17ju(&2UVK&mZqtEtleIQ)A>R935z~-C0jJ^)phV|lbfX62*Qq|+U%0&JsKMM zny^lFbO4pp*Tm(aBOY#lkT}_rw1e_tEYALhrp^HGXG5j0cQ=<@?}>L*^RM}$V5s2* zZ7u}!Ci1Js5c{ATv(#ExqR!r)yz?0Da#)$In1vPHXN-=c?z1&-qk%~*@6h*^TIMh+ z>KbNA`c$_!xUb~SVx?Uz3$jNuz+57$TLz=%PCZ%iU z26t_p2jNCE8$h;`HT6h`nh3?@og9~x&}f|mXLnDrlM?u-2d`=Ib1{hr&V3>cE;Kja z34UhIa`@{2u_8BWcHIbP{TkcINmDN=BDxpMTUoUHeqb*oETy%zXp{kGZIx>-d^x>K znaSG)^XD3 zC2lVo0h=$P#u--=H+83*MS$WFJlW8n=j5gRKd1El@e#GW)MQ^p`<|faw}_k-+`T#3 zp3jMgYdY@noNX&|Td?|#9S>g%ITuSpEhdXm^g5utd^{*%YmJA&v-5PWmg^X5iW`3EdIp8&-@sC07yw}T~OGIv9MA#V91(WLMHWhSf z3lP?MNJtcs-sP7pO8ff0m9pT?x4QZBAoSao`VDJ2BbYhs0`6V`)dhdfhMbfF+&JI%s-Bsva1@pkMFmdHA)ZFXtn_$^ySRI=wNiX_Zsm|sbs#XF@{HK5{)ku zSjWu=+0(&JRqVc`u~LZn`H+%n>GB;Pe*Ik}KzX^2{EJ`S5}aJ+)h@uMJY zZpZz*JE*bfUi#+_TJ9DQ^Bo{29E5HzVDzsfVXiG^yy#NeTO1XxBzfW0cU|~%W6E<; z)XKbu^>Z?FRZwkq!OGvjxAdDRX+$yobDQ69Hg?R)?57=1woU@Zbl67X<{^_b@))JE za=GbVtv94+N1dl3FXxZr*4{pKj-%~q3q-^ir~SJfn%`WVMyKV&n?Vt49E)nahdSvY zHW7y_o3CJ}{&1YJ>Z2&Ux_Y=c`i?Ts>v?$4va_SHm^5X!Ok?Bf%<(>soh}ryYo)6a zG)zO-U=|S7eDK;@Wltu*8VwV-J`Bpd`Tqc(;$&L#FE^)EUq!`fm_l^4WUg*vuOZcN zuI}O%vC=(>&K$F=6@6mKnCC5CO739XOjzYuhKZ8Nk8bB+PW!b-kxn4by@Ufit)0uFPxjc{tv#I8cWCpDeLu8G$4AjXeVdb}N)5N_AeS#zt%uh1{!ClO1VSZvaGLzJ%Z zze@|7kM??cy#x$Pu`jx@cL;PJCoj*P{Ey~wGjBAbkK>~|L&$k4eD*0-#;&F`XK3W9 z+NCeOyNyno^e7a-Jx#+g-uEguUo~Bg?$M0%#+J$A^{&6SS8v}R9-Z++%$J23M6o`Q5zy;qzkgP}Yq(wW(vxSk}|fc(a0^PjJ6Rs%=XVv}ow+ zMCJx+@_h$qez758j~0p0oMmIK+cMv*wRn>9Eqh(PZqsn?+v7Gf3>K~6U$#hwG zf-ZI&^AdccYFMXp0|L&0ofdQ^Qx~)sSXdS0t;;z&@2NWTA!4r~yByhrG8NWWj*8pa z(bjfAmMa5&CxIX z{Fz?&MQDKrcAb&fKjcL`JOy{S%>@!O^p|PCzk+H99G@nN( zsAiJnFUZJp@q~-C^Z_21^-nDTja3cox}}5ZF@Ck5OG>MYp&1J|kvo-n=VZ~39xd|- zcZZ%?ou!*viN_AtV;r}!nl$Xw6<2L6)rPw(<6>p<^0McWbTIVs^t;+H4=r7KY}u>C zkjgtC#BR)&baYm=$2T&&s^xR~Jw9}x(5}3I*@uyj0_spE**TWK}R4<*o>(C$R*mp#wc z{fa%USmd9+v1c5UD!~}l(KeO^`Chz0_HxB^H+IWyrpZ7bwN1G;F7mS~O9{V6ksld! z%@v0rrI&QMSi9Gdd z+uYHCeDqoB6#*+YjXO1x92#T@*)b7eziuTJe#B)jn_Es>ayLEs z82-pYdU76Wg!tP{cV$uV=K8CDd%%MUCKF`{(34f`p`Z6stMGwkI)JU_1oW-MTqV0$ z{f!Ub%M8rOR4uczDJ(&Xk>9yVP_+ioTSC8J_zdQ#-QeR8FIYhOU1FJUy8_k3+rrmvDHow) zu;^o)^d!Ndu{Xy z*m(UA@0xrRz1P{NQ`)Ka-=Ni-U|&yKBbQd}zCQNmNKgLOx7L~T>ZjicLy4041Tu9d z9~JE{Ad$t}tSxg4U9npr7c;s5Prd_@$+d6>-|h1lwg3>v%1Fq?@R6i^{+OJq@E3uK zx@yu!Y`xMkH?8D+E~}g^!SuLg-!m0c-+*mOx0bS-9sTU8cL^_4(e-bOF01G~6=cf9e0>4Gg|PYp>wOm6thp2E(*o4jAs+ZQ6AGh*RsxgznAF(C3|R z?y|Z}ybk(3=DQMCQHL$G(|JxMtTr9P1QT~#nCp>OnSOjEg<&h`tQAg~?PLU{pb_TU z1?^1Y;&=2xZygBRUB`GWGZ+gMByg3ikED^Epn8o+0m%Eicd0HVj{MuGhZ6DMnTp@q zjXMbZ(Q;NK+09G|AgrPEj|8sJX;gLObVkm;;f<7Up*JK6(l<9fc<_ZrmOIDvSFwxr z9E}`9!X7e;i$TSvs$K;#JQ%@MRxRYG%@+bD**4+re_)W2V=h9OrEcHW?r=6UX6bQi zJ-`$W(=bjgG1@WqGBf;#_iUvfU0W2pAY7tiZ?9zpy>Fx)OMMKb5TVD0{$EJ2| z-7%F=VAA7muv4F3f@DO~Yw5xTXo%w7!P_51+p!fe8407YPz`xmKtS=au>GT&&(1Cj zW7_YgN?e4>j3#_kO(+fR)Z+H+ycr2!$@3XK_%2J8S@qsm$N?v9CYvn>EOB4 zZv=Tf|Dw(3zs#OVw;42gGm9=jCa8iTVXHFWywWp4ILS9#UK`OiR_o0)J~v)z*e=m{ z>WCC2?%X_r-1^8(N`J4>+(6Bbd=!(-9qu5-`Z|3bs|rNsW01Z!HT{N8A?uo8{*U@!`Dt_Lm%KsD)dW0r*S(eBH(U zCQ18*j%OC5aRVf5;SAuWm<@+981eesKd#XK9B+TpbA9L$7us67HE_W-8PLs5-Ozhp z@cuGoNR@6plQIH-N;HwJIU%zwWr{P1D z|Nb`U7YJHMv=rrYBgl>JTM5Ianjf>gX>p4-U>Kw58zy~26d-*y?`L|gc-rHmCaUqa zhMO=zC{YT!KR>cL_N>5a{UZV))AF|H^{kHrX}c)ib{75)1D{8{;$z0BA*Q6zfF52J z!5;Yf)n3_i_|I<#U60zFe#`y+npb&=i3Zo5YL#l32LJ}C$n>R`+pljBO`)$vhnCj* zEf&W=YNRu%4uQXmHe1pfiD?yL6 z>oO|S7O;13aI%L#Od0fFSoT9sPJ1gSM59_=8=_V6-@=jCU+rIt0_w?FlEbynb97gr z7M<4*wZzxU{OFfb&{j$-($RCGbFdcFFpiwsUq6TA+nJolCACMs`Qh>3SeoIG64+sc zY@i*UkKda!C}UYJ@Y(+TFHoHw%hVu$Gui-PQYti;Rxh>_>A@816Vz5IkS8Td1^h@` zmf)_y4-pinSY=gTrHr{#*`Nk6Qp|55v(HdL_i=7y^Axr_!~u8n`y4+kO+oYiXu8o( zcOa8%tc2OF^&9(Woi`2|JUO(%9c-_P08c&qHicH|~e`>eH7O&Cm4l#cvM~%PjJ9A+ig-tHb z{*=TDk0mVI5tMBVgdhw!oKuTYZx28Dm%|o0GLMJZK5Dv=OYS=F#X#dtegy@|>rDJ< ztbF;@6#dsJ^ArvI@f~<99Jntu2dmHKSMMgvG@9ArM^0xZ^ve{BN3f0ksfF>{rHfxh zvrZjh`xX@jP4zy_wgo?sfp_k9L=ybBLH76c(Ax@Yue8~>}n=b=hS-RncQTV{ptX2P@Thnzx06Dn{m94-Q?}F>U&x~^OAK)T(oM9A&$$1zZO!q%aDl^MFgKSt;w7{)YMln zqBEn(kPqrNJNqNm1TBdbZG8^RA^zM)Xc}e++HhxD50E+7BmjVS_!sGfjUzws8Ug6R zNMIV2&Q#G{&z8eDw;^*CAoHH!blgnxBzqrmT8Dsl zEwyJ6_3oT|>QQ*tmlH*<&AvBH;s)hedg!yL8dktMd5UB z$F4uup?NwK-9xy3uDku9j(%JNCp(Px3e8cu_4&vFl9J^=0wZIcsVP<}9s zk0&PwOjidoHlHqh@-igcGk1GFY^k@?EH;nHv=-SCC~&aLx73c9_uqnggwTVATLhWy^pV66dMUbsX@m}=-ExZXCmPMTFZK$>(F7YjM zxaIgFbi4L*>&e8v z8PsQz(#+X6gMs&O3@czFZ!CRuqQ>bc7~# zU-r{%4VNLmU*>;dalX@3>2z}I`WaY{r6E1v{7sAcph1ytIr>+klkGlK6Fjx? z{j@^u+a6tEU8TY~q^VQs+_U%fkeO+nWA0Pnn2a_4jynsyB?{Hl4@yFS^3PaJb?DeR zzBbH4tskbCL`H^GCSl*kY}4>z_cp9|cb_eU<_Q{yD&k3()dyqRriNUo&A?e_*|J7u zRrZ|jzRQv}0mzpx{)ky|%Z~OjHyAK-#vK;(?kfz`A*T1$-7cE3e$n>Xnz`D>tj3wxC+y_zmZ#uuCv-GX@~Zx4)?lirebEiSm<1 z`ODn~T^kQC$h??BHADuP>t#7UVvkz>7a=|cbT#-j9~-8E&lnVG7iWuZ$b z4`X89{CF0UcEdrb?^5<_N`-Wwc56kC)m-I*j+}vUoC2<&39gg4l4O;*chni&v?oqn z>E^^S_Kxm#-T3$WAjQ2}+`=@#)ZXVDeTFkvn_kz z{*&958;RGi#q~E);X+?`@o)kn4@QYW9Q{jN zAN6MO7i534_Hs`C?MrM(f3pi);iyS(!_t3SFH55bGkxtLPkypynaMzsgIX5+Q^C{| zC;6B>Mpk%Brd+0lMFk~p0t7hS2#uLzaxbDn!`Xb z{nqY8St=xASiChkE;1oAYbLm9{Sro6pXF*q{4K6%IYtd!29 zy~-h0;3Y-OuIAqE zVd!l@{9bDkWysf9%qLRH1x|lRQ=>)^7w%e*=@yzw1B^D7@%+KO{d*e%8!>Z%%-{)l8%{SE!)ZYLLLN6}zrfn~MI2=t@X7X*!vwP&pA!2z8h4GCsy; zq0UYxsV@3psWf+t<@{1y%rxjjliYcIT3`t79+$vf^M+rMTgHBndei8Iy}@jVe8+-~ zYN9#Sr`jy3TDKHiMFV@ZI-zf3TrD)5`G)p{F(jR z;KW zr7`gamzCG4Em{HQAOVt@_wm&X?7*~?SY;i`REu)b6teNzH(SOJ+~&BAtNuD$wBn*p z>}$#6=P8-tAZiyb?yf*8H|F`?IAD_*M@#Fft>Cd!7O)F@&%F-9#mSxY}#OA zhSWgfR$`~LC(39)oAi!AOn-gnL|K-vW~B5{dSd5r#t&d5-g`^Em4e*gj$vYB`ZogB zUJ&=R`^WE9Cp0c#p;A|Wmj!~C&*q99aVi>5y|{=&*01-1&rSuf zSCw;MmRTTXe53*~maXom0hQjHQKNhr2B(v~DW|x)IoGO0isyV?f3|ESO4%ZN-_tO6 zL1ZAgIqKfgtUH7!zBAqEzomj6Fk_neX3UvzE*9Lc;NW7}(pIs3eEOj++VhW(o86D~ zt$ped8{}x=Uo!=O@n=BIST?2hoXztaJm_kj^)9xAzN)yxX)!bs>foUDmTQ(`x$VVp z8@G#iJ4m-=bHbR%=lJ2jl;a+%>g9@l&Jpr~Tx} z2!JT_)a~}W+hHR>$dzAD>TH`Xlv&Q5pTtv4%V=dK8K;10!lk2awv}fzw|M#KhYHyS zm;8%M2?t}aVIRb}vAt^j{3Fn#5(%D&2*NRh%cZ?)o*G^1q9wWI{nw8B;J8K9?J*`Ff*u?UZ zGu^g^NGFQCuYPW=@#j-tX4v#xcB;j+on=~by$<(>YsKNNSQ?i(NyZ+Q=ckE7=~vct zVvgL8{QmaHE+7Xz1Z%q8CH}nmu9!x;s*Xm9nty%RF_1jqR*>Zj1n>z*P(2M>g7!-A?$tERJ zvPazru5IlDyW_;;J1;?hH}}iR9D>YF@d3Y=EL)B9(Ns?!BK0=^!(X@E-5no+@FB8q z>t9*r!OOd{lPf-`2ly9<%r1*&GI6Did17(b+So?BSh4@^tS-d(9&n>ev7iy z(>cG~9#m!YN{}y8ZG0A={c=ILgAXFBY@zjuPkC&iG}M0ry z#UTS{S@x9S@+V$~tp|+~bGz@^&l$n`OD&_r!-G>g9`Tsd@@g7GLpeV#=>vDWJ2Fdc z?aay{n?bQBrW4~mVE;c_HzHJ^+`L7~LV*yY5_s)0Jedmxkkty{Knh%6JU>Do$@ z?;GAp(jJp#Q+t7sY}MP&<5uSGQr%c5dEVrXADUY_&pIkng!Qxw%SJBhyxglShGur9 zBCWqQiW)TJR% zrhBQ~smc&(>8haXxp!K|H+Ru$Sn{^EpkvD7*k2DEOJfbWhf-dux*R#~CC4n?E^QVS zpnqx1r^LNd9&I&Q+t@yG>S<5E5LX&T7>bwn0sZh-5)Vofo{gIQidJBk{IRE$kwhk{ zogAg$`?-^O%Z_4jaI|~9XtX^2L9g5-5eND=mywZE`TLwPdoz{jUnzN8vO&Ia-aN~H zPx&q1=nUtVD(Ca7*qtZ`nRf7O9K)$7k0t^yJF8A}Gc%PVoqidp>W4OA6$d?KV&)^14D-q!n=sfHHmjIvCV zqN8Zt?Z#afazfx;+J{eP;zZ&U4x-PC9csj6D3po*&3G?Km?Z_HJ^dL8e48_2R0H~ybav@;uj zQ|R2AVRya4e#hw%SgvzJJrMJ%svT0yv{^(W{0nV2JuDh;pup?B+xII>Xq3nxfKS|x z8Smb$HXQFs2xrF7`R62QgOK(Qn;Ug|&EJ1dUOW8yS%wCV9JtT_Ry=*k8W5NANI6{S zpVvP{!UW<`D0;8gFxfos&f8`9seu29UN>%xn=4y?^^Nr zR^lUK1aQO9nNtRMmVB*Yip*&+7FRcg7fa;`gRfC-XH^0M#o6K4eNPJ;!M_ty6xjGK zqc84S=oXU4bX4Wa9pUrDjgpNMu20n?lu5i0k#z?t&m7bt*StXQSR}AGcYfG}N*GKE z5z_u3zto!Fx*a~3zYwrZS$+c@Ni9kH-qkkxF~>*bx5$1gF7~zAFkvlvngV}~qDuS} zfwmGG5&Zcm87H7)7r;S7`-Q&m&aDSm<;Z&IBvfcS9P7WWqcYQyl!$0a8a3WJRjeoqDq7n6Ir1

V0llvN!t($03+$)G-AFwE5DplY;tC}XH+NMl^NsP3go zduo4IkxH^qb^pv`9c>wBF%;rS986q`X~-` z@U&&x67o!yi5xxWo(QUVvuD4&uH3~BTrb?I@QN38cp8+qPPy3?lX)A=f~88*x`=*l zty5RBcU>)b;`>J?`MH}TM&HS<_zwq@2;ds4F-&CrP#b#o!vKD{B24uKIRhlwt3lz7 z?*jkZBxKrnV$AoHjZM2&!VA*a+Gxw5sk7((8&#!4l{7jNYcvm$vAF&CoYuQ6+VZz^ ze&84dN9Arukbk_SKuG?9tU*5-^rBh6SSo*vYD;3tX4*Jk8mUU+O1#NywaEBONHMptX1@au?J z59E9J%+zanQ8v1Y*<7Z$=x}gxGb&T;OBF3xNNWC+dU12K^4Xl9;M{PBv4~~Xfbw^I zm@-=S#oVyq4vJ`-zMGxHFMf-8dNh6ui*=PHU9~&qkCvm@+@4*7i9{wF_Q2_8r?)f_ z0YUAtfOVT)g9p@^Ek?QGGXDSYs2N9PRys?iU5LCPh$chD9(0AyLrM1H`>0okeT+#- z^g+wUzCN^dCt&6#Xw| z`uYAI#AuT?CeV=V##bLH^)71}XND_c?I|Jslh9yn%3``Pi(NfkFwtzxmQAFd%R!ih z?Nq>qN}%bl-OKAztZ1~q1;yW$#lbz^bJ+Tptc^E7T8KqB+Ld{*ZPm9&f-nqWzW|zW zf20x|d$o}9@+<(7sA=lc;BgW_{P}0CtS3gDHf=>L&lC}~kHyN8o_z*X20m`OxcD&R zx8Bw$`OyR9Zo{7uZ_X4!z<7W2$Sz9z7!V@$X6pt8fV8IA&*Xh_ubMCM9EQq_I3}RZLXok+tUe!aWK!r})3+2Q)TdNiy{=AD@8qfP1nuG)x{95KHy*06v@$ z8Q7tRlp6c^@Si2bHz!y+1GX5{+O^o^l!Hefm{J+UAikDeEe6^8oYTP|r@jx4k}`OG zYBRtE$>g&Vm3JCGSD>n4O>ev29_Y=E8`1Nx4;?MKT1@e7{D-&HSM#!T;X)ck zjsiA@$d=k_ms|e_BI?kAZ4RW8fo-i4#(N!(vI+`FQ@E2R<}pyyEsGXUkx@(rY$5&V4WbUp9$OvexL7m6xzs!d zsd*Y`h-`j{ZWmZL*IDf??vM0=6DM=1+G_#`*x$+*$Gr^6PWJI>xfl0dXR37A4P^V$wn{yQZAi2E zzDMt-)&oo2qT9}2h3os1^e=Zf{S1OK?E3z~L^q$8;L#DgyZh-bXk`A8a4fImJCB}Y zl`i`HXB2kjT343s#WB{;P#zB2Su5|W^8gGcNVOe)6JXtn6Ksa8A+;zxq*+B)pI2&R zT)b?`ijs#M4L+!RYI(ibiBR!|K6n1jS7q{|H27O6WPs`Dr)QgtQ>{QaSG@yFVCuKWX*q@HuN$*+To!qupYWlsrq43-sMI#sH*T+~a3M{pX z@X;FQd@V9R17wy}Wh%9%Do4|(#ViupxI<-%uzN?9X$;K+iw%H#qVh_9tj>VPoPwov zS^SPB&-Dh6pn7q2IGKVwRg7_2@@=|fnekA!C1zf}Zfv4H_$Wg*a`G^fj*g33@Coh28GB-eZ5U6Hg(dI{XKz1s}E%whGDDzT1i= zr-Ppd! z`eEwlvv1bcAZhR@Vk@95O=M#%;WW5&lxXBvFxx#$KXvXsi@Mw)hb8dlSKb^gub;Y? zsb@gig*esg}o5ff1i+7>(x!Cs60W;`5AL;V3U}CqAOPS|1O7w3iv6dEF46f)~}A= zRqX+aloE3RSy%PFY=UoKImDqGkSqBPDF7K8UOnbhU2Sh?6hL0k4u+dhdLDm`zs4rq z%XK2U7AJlC%&;|rj|Wf!gskrHveeZ7!{dl24q`lZ=x5`*+U}003?*bEKkh+>v$5O@ z{lmMZXXuP)Kb1b&J`N5Ns_n6;sj1UzjWcF20Rzgc)lAme!*hDj6-w>0{t ztj+Sn>MLQ7P&VL&3D|xi-_;ogO#+1U;+}GBtrM;A4=)l;&Vz|#x((t1diGXCN-2Xf z5{vR_kK=^9(5nt74)+@Je5IHlK}_pE@QUY0HFN4{cP8^!I$4g9QSvNTxZZWa_-oD3 zQ6y$PPU?o61+t2!_-Sp;_KvXSG+i#mtK?Ytisp)DJs$Tsn_j3w_-NJapUgavuGRcI z0f#-!dkO#TdmZ*LHpUZ&V+fLsJah=XdgEVYZ4-g8iQv0>O2_N+K-$e@&86e* zj^Qu8nBv(lkK%jK{~hbB{8%7v|kz zbxa5g+_l9xlvsgqsz096m=;FZoh{nsT3q+-6*ElP>;>%96<6*~NZN_aPL?mI6Y%8f z&S48OSf_YUCiVJCv@eJ99(a6#;RR#z^rI@;4IfK=6aYW|*w#bw7_oR0)qo_26U9@~ z`)BM*KV?1@)%`@Db_0@P%PlxA zM1NLK0?7YYTAcf4wh_VeznuM&2|b=T*scP{BD&?`Lh=P@JdhO z9{a0@t%hBR_@g77oJ^)>H$gDS5H6ed5$VN~>>3PQDwmqdMrckQk`r$@{Hchqs$OZ^ z4FgffSLPDxt3UwMLn?gYsY&dxN0eed6|j+?;DvBlwt3aV zn(4>$v2pu3CkkI7Bs)YVU3lxRKliE2%37x@ysg8Dklkc#+(3@c86hPc%38w2Pd$5< z9U_faPSZ|qa2|a0K>ba8MUc@t8;gHCgIyZ8!A`+NU;_9v?$d`@ozGJ0@#Hzg3J+#V8K;@v;sF^!3df?WNET1zml^-banXgK4p?)r zC8cF%{94cLF#=Xl?@`bl&tkjJFzRffv(u4oV}FdsL6<^wa}epx8BAm zf=HO4Jk#-Z?^jvA)7_^lB2_x?a2OUsEQ~?2@T@;2nr%|nDcPL7X)Te@`tP|(ZD^GqU(u84>eQ*%kN5mYe+4CVgT=D!^SxqiQ*2FT{C|&9TBTpj# z^hK-nj{{%Cm@GvKZ@5$3->YCCgS0mk%EBr3GOO(=UnpuF89$H$g;IzVO<;f?b+wqt z1n{<)?ppqk(4eukAbTD`j~e zIm||8qU;BjZ1pO@MQ|0GEscpM|H((m&Qnkm`~fsAo`YCW9QaKpcEoGNyQt|-UJ4ZM zm8a4ERHU;P$iL@1j(}Mlh0;sukaLrQNe#If-ynPCnbv_qxgl%{n<8~JE$Zndeg4~V zdY(!deD*uDJ{R&4%>0fR&W|2@@oY*+mQwwKE*~Qs`&bn1BJ+~u1aZ^0D->)|@1*x8 zz#-C*Qu_8kZ*F(;Y-!7AAfL6WLD?VD*-!MeIpm)4^#0q(=^APmjpg%Zo_~0cuAr4S zb`r7lkvIM!>CPO41_$ft&mz7|+Ot7#`l3H|DeDxHvm10GS=dAeEGkI}K2--DLxE4L zap9(4D4T$OLvMSc9SEcdcDr|d%e*|x@OKhV$GD7JDJB3gPW)hIUkA}BO5&mpF# zr%&8$NcIH1ii#&T_IHR3k|wh|z0rHsY0&&CMx5n$i9aH}i_6aOadAaF`BiP7?&L2y z_XQG{dZFra8|zhcc$s?7rz+ttF`mFK-IjlNH088$th}tN@l0j955`Qsr)f2d`5nhm zOQ}Y)yeM@v(e0^UMMsk$2Ay{Q;feSb*L}#&`Y{{CXrf!YhE<`LvQ}G%6;x4-`Gfz`--ln%@YtQz87bW0Vw{mQ4afHj|(7sRXZ@YS~wU`{2 z=UE_YiMiZlq}#j-0x}R9uLfAKrM$zM^5777Xgh zD0h}0JR)mZmQ^&~4Ye0^o=Lp`X$(~0mNK_?y++3?)2tBfEjDd?=kP9i$aC3F>&*sq z21$n7h92toAn|m0XJDk;ipC9(>FE`S>33S=6sUM+cpGCLuOXQ2ot)g4NtqSbFJ#?m z^*s&rH|@W`;cz}rB>C~R8-KxNBTa1F$G3g|fo5tuH9Ts20c_l)1c`9h5()_&JIFM` zyOa!mf=k9t?>NR2%tudgHiR3ANP@+(a(qdo6bUM;^I@eTm{ZHDH_TI|pz;YvNy$ja zT|)Ui<2rPrw*om$-5eLhviv`wa0;sMZzp?1DKp(2=2pC6Tl> zrJOe1y94X^wvWRZD~n%ms+r>Gg;y(_+c`Z72Z;3IYVCiCMuI4!q9>kMTl;t*sVwC* zitKD6r4&6?id?=NhMVs*h|h}dum}~67edMP&(@LTrMQUV7!K3x7Fvn*D_vTm)XXxT z8FC@@GEJW^$J@uOrPC4_A7K>s>G6{jB#t5M0o0cyr0ZP$KJUgWZLGm%%~LTR_&vI1 zTCXsiK~-rD<`W5`=J14EFFe#;ebn!+)#5OuQ2)>!GDMIZ|hqQb#bLA_j)zoQ!Nt+``dY;%t*}#}kL%mOcIV z)HVVhC|fCf3^a#v%4yUguG#I6m8eDg%G*OISd~9VS$Hi)z`nG?L?^#f_v{GMvjesu z{7`<7(Yze=rxNWqAzQrD!1-71j^ALl2l*es4qs8fwY1o1h1yZCK*3HB%wespj$Z5S z`A$zyYlz8~(v4oKt*iaE=pYSZIf3Q$W627+oxeFCfiEhaa5B$Ww{jFtX>=4iPrtZ2 z;WZT7bU?yz>|3|kSz%9MAqd@P;~OE?^6tq6YXame@O{GTc4Z~x>UOVCO+h!O$+WZl zY?V3wb57N0c_x?uXgaCJqFf`*AdWPLjk?m3MMgzke6J~1u+F_FgvR|&HQ)KMpS(a6 z0<5pT>G=C&Pf8AhQWPB|kABLH*f!_2<&)S`-AZ^<+Uf3jJf+kS4u#w4ki6q<&47Cj z`Mp0zTLPb2Kx(%Z++Mq6ETXG%j|~%eyXz?I_c9CzR>FXg^%Nos-I-s2pu_fyC*N#}!mm|XJg~Pcd>≥B$)c_z#2AWiGyCNyUT+{Y}CMkMz7Z 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 Y`9QQ#0yl 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 C7{;Ff literal 89788 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 z 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 diff --git a/static/img/photos/6ab3200b14549f8a.jpg b/static/img/photos/6ab3200b14549f8a.jpg index 8124c47e8e4ef23ddfd6061dde381b54cf0b4934..1ceb3fb7f4c7bec68b64d91013139f12bf49e744 100644 GIT binary patch literal 168190 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 z z)(%fB`=<2T?TNbC6dD?iB2P&kycop6(Aa>M*5U=jZHBA zrw6pSbUULv&SAAf>~nD2@p-`YT>-&qyUEY4mc_VYsoZJJL(5pq6ao*cm6Z&f5);3> z{_^eiH)D{SK-s4|rK`UHo`WF8UFMA8yD9$k3kzlyjh{xgv!ep*pB+OivU&Ng3smPP zCq9TT&+4d(4EaefjBw}$`A&99|u z&dufOiup72WC5RJYJu>%@#IBi^}@A;%f+Adw_~E`4>eOazqpU=^4m*^80hO;_te-cQPA?zNEQ`m$@;W%|J)*_ZoBkSe_4i|MF$QLDSb$ zk8|&?k@;Uvb_GY$D1nLdo`M{l-QlgSYX9dTiawOgy-c@P<)IZ%_ZthKtA;*XH|CO= zzy1QOIz6?_^PO_P`@ZwR7$XVylP;*RN?gBn^Qry#%&A~L zUtsyisl_(a#Ob%Y72n4{dql)f!8?mikI3h1Wii__{>aIbKfP}8U4I-c^30mnCq69> z-hP#_trM~lQVJubq?AtzAp@$(#p5B^(j@c6ci^>8%eCW|QqP&T=WbgxT z9_%9v^LYOluA?StK98YYEevx87tQz9zkHXd-SY`(>q@LXfqn`~bRXWi(;fHE`TpZC zK=X@KyPxi5L7vTO&hqUU*B^iE{zvIv~^;YD?9aDDI&{#?8#UEuGb)Y({ zJ}@bUC54VsSRI(GZe3bsc<-N(mEnIxtp8*Gt78QK2nhd2$ohX}tb|nm+=pq|cin!M zY@X-0SGBSt3^hlKsb%TKjf7uiMDjCIzQnm2`wbfg9L`q+z1g3iU%n6?TV9@)JuUV) ze?9d*cek?TK%x|;)dvO>^QU(Rr8m#l9A)%AKDfO6RZhS3U~3vSCY?InK9XCv*{R9r z*jOU`1pvmZI<%H9HCt>+)GiJrR;=SM+W1{Zs(W!+J9ta?m*(FEG|RHnl7*JE5gx48 zWzeKniw^Ct(#`W3vfCQp57&LpbJ7(b{9F$1%*=nt^RycP3l~OciVud=m9nkl@)~vWTOdKJHSREzC(uNmVHu9lwx{-PYdv({=l+OC-kajg4Qou1~8{ z{I`oAJG9x$B_?s4puvbxHAHgmdP~RM3(uV|`v$h9O+vv@Zw@c7HFCRt35}HFe7|DV z45+!-sK^Yx*|Ta6gby;uouCQ-N!@Wh)5PWM<}ljo#YVFMl?W;FsQI6+H9}gcpI)SY zN4p0kc~X|hI4*V>VVLjbRPIkLi^liKCXENg&sd7o z9R@ShqBX)u0ZR4xGAPDct)0%ib@Z0kxK$At=9k8)t^`!Krl!pSb8y%*2WPk7MHrn4wVQ|mc6jF>#iZw6?kFkr6il?nCa)#Q?ZRB*bcQVxKwOy_Kl z@jN<&mmrUWML9`9A3&dKa^N6Zr=cT5m$SfkMpdOin*axLL=XUgO0#&wLQ-9huUH*T z6s`|I048%uRwJ_psOy{GdT+o>wLZ6ROZU9*I0F#!rt9I=xd3u$Kx%n(y>)!sg!*z% zryYuLC_;l+-k!9fkCd0RFfv_fs@yYv-@@UVEMbO{J0wk>m$wpB$e|EnVjVy9?+8q- zpmO@zVMB^irDV24q1;r3Wb%-7JLq(QxzyK60{gDB$WUuI6@XL|UC04c8*HS0li?^#)z4S(R3Q5;oXX?z`)TX8Mm3ey5GNPMssY&9zu4F|E}pZ1i+nykd?=AKzdU`2d|dl->PBq7I0`b2 zh*3@>(+7vh8ka;I9xs*}rUw3!{*zJY8<@8rbSHK%ZeV_szXBB}6n$Jx%oc*?D14ao z^`wQ1BlFw&;rr}M|M?FeFHv8Yam7{wBgIVF-SKR$ z;onZr={ZGP6{|+6y^=Wg))p~hRjeSW6^hct-siM-j3$W2EH!I}8ZnPOVpJ(nN{vvZ zO3YY&{oddE$NPLf&;QqRJ@ekjUssoQP*sax zwp;L_8>Pa~SD$PdjeM?Ydx@cxvr@gY`1Q>^%=8OBg*uLgYDQ_$%bM@`g4IqBJ(Num z!87#3>i&9tNKAdk?}~rC9zPVnqQ}II&m!|`LPFHT(G5IXgK=l{`P_AxHhXl3#(W3A zef6e6;}cuZn`9WHn(YRmQ->qB<^1HXT z+CI7tnT~aI0X!{5O|A@17KLgocIl+nWVg4fc&M)BMK(^rw^GA@&K5A{1QwAwuBEL1 z&S@(l9DKE;z|F~r8_f~>E&FuMJW^;wWZpKZMpNySPi5U}%FrE(H-Dmv;UOXuwfzIC z_9p}9`3~3jyah~T?j3v~(T+E27E^uM%%RMHe>h3gQZI(GjUitq)IM!4#mS@>n1=tD zk*&dRs8TzQH*{tk;f+|*{JhQ*a1&V%Z0dAUU;DR+K@ zWlv=!mayaAs+l97&Xz`;IZH~7s1LFKsR{hL3#BttP%y1ex$x%GZgYs6(4bjF=w^T*y3#qbS{2IvsOZ!Tpv z%A(Dhp&rE)QFwJIHM{NMpB>-`t0%ubXSjWO<=Tl{o^*|?^Pa=$4f$YFW?=x$e}AL4 z3+0dIuep>?^ewIve9qw5xukRt8M+QhW65cb+CJR;HUYF-N^y3uoaXX!_ ztgu!~`(3Z))`SXVp+n7Tlr)^Xv4I*_JKp+K)_O2#vJq@9OXl2)emxMlw0-azlSugO zx}AwPc#e=+?KN+_j&v8FSpIv-^b2U~2kF3gLJyn^OkP|{M+Ti%{VIb6Q~0?wfQ#o>JwWO{VOeP3l%FHb$JLo+nsi(~kv@`#_!-I7os zj|;^3D`iU==!<)256GrQMT7-U3=baQWgaLSt*liC9R|%P`mPBHjk?=5Kf6*WF)%jG zluz}wo_G+tvG@GK7w@^TM%%B9%<7b}FL!i%DO*nLuzkqz>ff7U{(St+>BHZDQ0a?l zU4^cWQT)cAe$MmfFB}q+{R41At%_q_2Ul71Jr3Qg(&0bRbaI}vR8Ww6;b`POl`21& zrQQ+V!Hf(Uym{*KwbIwfzr&6pmeWvnWHnz+l}4b2{%np2{(joBK`uR2EVA7{{+2g0 z+g1O1s1Tx&UNmWRrm%>iL8od$r~^gCB@7* z1i*yv_AP(yxX4qivGrgj_|19g`%Fds8LYl|YEEjD@4e=&xo7`g zYo9I4A`i*R2?j4}UPUv6AbvQ6dx#p>d@fJr_&0IyEs7BBW6Nfv3 z5YeRir0Z}lsmjbu8zs+0H(1XSPtn`L8x`7{uOy^O80s4Iyn0K+T-AGF*1H@Lfo`Sc z51Cq#64xcJLowDoKL%usMt)*oc6dtus-mQXL~I5$i5>Xn z`U^ayJmdE!alQMg53l{p&h)Rf1nlu|PXdw|SWHoJpNI1y7!D~3hVo_*l!<`>=%mjF zWOz5zx)DM5$OQZ&We%)1sC)c4gMs6>$G^FTwR+^_4ZC!^!{F?hSKrIP%=GV*KfE{( zT1<6Y`|mfn;jh;**gm{gqWy~DhIEa6%gVLB5~(}hw*PS2KD;i)0QrZ}yn5xk2jIi~ zw!S*3-NQE-4CbW|A2PsaC`%^Ksm>hCHF+)jeeW>ZUW%`zIGGs!;JnUA6nA{Rf@5Yb zZDDudU2dl4oez#<~3_DvJNd^tDJ$mM!x8x_|6xlp}(APmJ^S#fEw^ z^5LhMJs^&u>V+KxZ~K17oIiJ)F?Dk@+0<6;^gMipCF;b#TmE+&`*ANM!;IUTH_XVN znigt$qC~~-8}hHmFLL)fBb;XfXEoNj>soycVGnsmlO(PkY=Or8nRD-VCez?Qrcw^+ zV!m=)2Py{>{MBzBBR^bz>u8A!F^J`! z3`G3~O!|%0^7kpYJJPpSy{5|h?ZkhF;pek_Eko)Trc2Dtg?XW&?m0eQqcs~U98d1Q zVKHUoRBYdHC>d{cEx0P#R@40cyqWfPXK*xNE6_8<6?dkbB=$)n& zXpB3c@+LHvq8!uA-e!SYI?yz_?7iH!(>-#2%Z8oDouaeoT#2-?xleA${?+zCt%8C{xh0c-Rf{O+~7j*SML+U`Bi zYc<{p)8PKOROW<+QB6MKNOAC9hQ2EHF^ z$a!++p~=r#nY8{apMd45Pstv6@PUWy569koBpa7hDd0*w)Had>+Ak10!Gl+PRBb`( zC24|8MQrgLx%g8{DX%csF+ic1@1n>*B$*e{DF<07WpY~cx4ka#!ci_ttd({+x{n*R zWe|lkc;rm7zq&S02)9*L{On2C>gB&|mrg4%C9I|RO~uKRL;q!U&$v_Mf!EBm{fEm2 zp4}qs;7jxm3%$_D^Uv=zoKku8?Z*rM_97duaNC0gDX6Ct?gU0`o;#vw{@>i@IZAiZ&SZnhv~azueKh6i-<0?m{Ee&_cyr6!NtcL3An>lhgR%08Yg_43_cSe9i5K9c`2 zNd_YS@xVmh>`6+@|Bqqi2f4sua>Aw-5!}B?PX4l}>JBpkXvLfPnF{dY(=A}Rs$s|} zm8Qqm>i@9uYn|mP&jvzHqpEgSl_$u{OOc{K{jwBHwS1%B9UIYo9RgGDz2B@IPmkDjwxiOLPD zEr?Xo#ftRLY9dm4e`fQVN0JDYYXDR?WBm5kZ`*H)I@dT?CfWM>ey+m zlRo+UAmH0ZM=<*J!K5&-cpOPORc$3K)hKKG%F)>;N3R3@2Kh9*P&=6^)i>Nv2#G8Ca=HeU2+I84mj;>Yn=egYH@=~2V!ZMy`1riqLJ8l1dn_VM}O{-#;0LlwrYa&E@Y53^&5k6`^)sq zskDO0)QIp!yUjfR4Na%!Ru3|LT+OFJw;7O$Zt~x#u^P8)ZLP`UvavhuOnF)wap{yv z<~K3(xPAF-Ttky*5KON&Ydk)*5Xhr{Df+Gq=D2>niY@oQ%|O|jEE~Hn*U2D~>)7%h z{lYOSwB;u`J-(K&Wuw;7_Km7ig>>u}q9Fsw@W>i#B$P49;eexz0QWY3vRrb0`g~LkteIfp3sK_% z6c6@(NqPyfgXyzeUntSLnJkxfeRKtm>vnZns3i#X#lipC5Qr9{4i2NK7)EXrc|~ zeN~hclX_aJjWh}!h2ulKhe@LDWcSmAL~Js4GXjNqpG>~W2#}omKy>MQ>wkZ>(DZd? zoqIe$_U?HbotYWuRtz%eGs@!vBSt;soujPj000Q{in1h>m|=*&yQ?k!=F4OsqQO2( z*EN*=o3=R-%qILHqqz`EqP|HhaQQMxsG3!4&56Ql5*g=e#;Gjbmh& zgrco$=t4WoQqZ-mB$#bUFnQrw$FBP>jHsWS;bh(CtsSCqCq_mxExU(b324s|ON^M6 z86tnZ>JCS`7(=NloYas7lKUD((Zkq1x)GB@oF<14Ww}An#Q=CjU%-n6t2lvmbtIJ0pVrVmVI)dn8lQu6 zD26K0PC_dBc73crkH#BGev&fMw%7!_xpS13V3Hs^g0xO(a=JWsa$l*bo{I%<&&eXi zi2w-EfC0paXY49vw?y=c-D=U`vnO?38u=_Z>MkOSR*RwGuYN7B%iNXM_FCqmj5tL! z*aHQ58PTS?B`*?LolzZnyAU$g&9T@Py%Ls^s)sT*`*YY}T+huNUFFBBZX87D)Bg6e zLUFB#L(T`blCx0pRJSrvNN&0ewq^cE{=XwZXwOS~K)%DE4NQ)7Q$QLHwZ7+IINHg@ zH~KkM=hc@>2<8u;M0Hx}%xGbsT2v8Wf;VrsvuLnWhKr^wvraJ}y7ZI$Fs`m4V56+= z8*l>@yFnrIpC;*<}%w2r~oRrqlniCi@8~! z)Z>|N+09vhN`1a3ulv>`RxS1qN)f!$(1g#7MZznUhkhtotqO$exRpE`mriQ01}Lf- z&P=D6+*~VF#UXt-IR_-7yn2e;uDnLhP)W3y3IKzDUlDR#3zB)U^yfJyVhqFR?5jVr zo6Z+gBZ{FWb+5YgTrEXOHY`x)1^9tr5sLLlo|O=u_GcZ8FPS35i)|2P&edlL&^uTx zuUT}s@i7nn1+a{KwP_M0s`oT3B4!s>w~mx7lk|N4fqZ@FqsPCz+j>gyc}~N5|I`&; zJiJ|Ap0vVUtQ2_>U8CvlwbjKy`l=h2~glw=T)G)Np#jV2Wo{s z88B#SuLmVR#$*j@ptUUxy zMbsqb0SiEZaR;a*d1@et*>H-6B56xoa`n z!u*T|d#bH2GQzTG>ad2L%s2@&`iefo396uwpl@Sp zk~9!@-xmoyN*9q@f#?mlkx@zkr zil`6_)o*(wXqUdN4uD`Qp7o2Ua&(rXaLAwsJgB-GUk9tjk^m4E{5 zXxEh$IvO@8VsMk(2_44SoONsUY1S6C5|O67iB`%B2F;*4N622pF)#1c&Qd~*BB>!r zooaS1K_RQ3#1*9n0;H5nFE;*#qFjT-qyoHr+sb{n zrC6^p;KTalO53X{sc$K|l7&_e?xful;>f_F&4D5q*0mK$so1+z>jBFApBUy$94@hc zk25Z(AaXb2CpJ`hL#O8wvfHUFGuntW;v`DWad5weiR|pXY!y4?!+b5CYE@yPuX=R7 zBKc9Ttd!@DBd2_&EJ`}(30ZZ-TM@1_zLKQ{DrWUDjPrln__Ke8}}4b!UIH z!3gSUGL8zXqrT{o^GtF0%Y4D#&21#u^jnF|BSQs)8Sw;=Q5IO$OAnDn4bd_cdiO%q zZii~Pk(K#ORVWet;FS*TN9?YS3%&>|>4g;SQgC=h_cRkV=O#FE9Ig{0eOBA`>ih-o@Kc{CzT#dvxE!b?xL~HsQBeSwTim)`pfy(tGkiM6rE9Ds_ENPZN;+7Pa>O~bKM%Xgeo-mo)QjFBlw%RtsG!3q@nk6R3 zDjfAt2hGD%>yIDYiMQf14jE+5;`=CSGf$`_JkCodx8y=3ZWo)c5azY0qpNu3CYIY2 zr>rJcSLBJ_y9(yMjMjuLHqnvycAo%8;a|_s=C6w-@#(&mdGqcIcMLfN5to|_vAR*8 z)@N7XR2eb$d5cBy3)N<{s7v)X8(F{(w?~$K~-s9}a%ni*pz`EU|Mke!BNbsOr;* zMp#tGjbW33mBrXF0;8Gw>|g5-@DUSaxQ5?a-zyCIV~HO^pwo1_e^7`@PL469n9SYUf2+O8O?gd4F$qJq{V)Ry2XN{67}E|BuZB7Ls>aQ{x;A;9h4Oyq(3iriFytgB*S3 z(!rwQ;-MNs+eYc}E25BJ48>)R@@2292W=bK_5vBlCO)kdhH`e(jUoi3>B<`rM8(K^ zw~cvrsIGf?tTdOrrxQXM?r;Om?JtWyZ#e*n2m-px zG5xOh=)WQNM47@&g3YU()bW0Pt!l+*6DPU(yAV@hg__JX9_?yD)Xj5fQ%_A>z6eBO z*;P$D*G_>Aj1-nDDUKOhQi`*En^?X%HJv`XbDlfqv!o{Qnw;h*_lrSto|hg>P3_C) zT8l_y3a(ph5xkWpB6Ok=Kn>|nwYx_L>WSnlA$!2WE@p^3d6+B(HgTb~yX%-lr@spQ zi%08xx`qd;uu@|=ST+}*(a9Bskg}v9%gbdO^DrRr zNTe|RUN7@z&%i`*bkvEL#rb>%k?D{%tlOm2FSs%%POBu)Ye$K`p16V2mG~GTcOVv~ zL(!RMCiK@R3ALpnogL~+V`DJIsx<>HYc6y6d7Nul)__E^(bpAsIfQu=7cXeXi1|q) z9}8oO{oT!%bdCuhDRm)^XD#d1g)2lWH!m^OIX1i>?j>)tI;+?Nypz~fkDy;37wh{Q zmGzO**JGX_4aQuo?k=)^Nbi?UagU$Yb&)vB46xRb+(90R2I+}nxc^M(8!b{5Y)g4k z+aiYdGpj+Ye`T660cv&^K#)FcxO4bWgcYd*>vBn|y{ z=elKF!oWJL_k+*gU+_Tq`dscfvXfIu^hJ+7ZP1nE<40?#*j8QW8n@3}*^5>=&)8OV zV$Kp67Smw8OUWw701f9@?h=XnLZ>%%Ig)T8@F59GPS4+R)alXDUP2y5Uj3#|m)xC! zfn9xPS`*lq@<7v7^?cTc|Atw5lk7sycd!$63EUfek-{AZv%`s}g)_qIc3+4NQyPbK z7>81;h6{Z}TbkKKr3v;T^;LI@9f$;b0qA<%svTg>AlzTX{*OdX8ox4)zpr`i$HoKU zy7qyM;fDo~8!t#lV^XI&k2f*WVeD0AkQ?&fSDp zrFLZ4+qMBA%2}$7ls{}Cr?Yno3z)@AG-Aa-sIFl|p3(V|^Ai&I5oE_u{{Rnk5Uf>2 zKLD|Cjda?b4+FFfg5+8L*mhcI2)_-wlQPHSIYk7D9|*S`X!CMIfs?+@VtFbE5xo8PtdGSY@m+3<9CLW6cp9s6U;aP1`1-t>qG>a$`0zh6^_QOo{; zH1fuWrA*c#68dC7q`3!BN3FO9YwDj1zqR}bfiq}|Gl%$2uu;-U;kWgYaSc6~t9}HY zeoi)`Bp{47wcu9l#8D&whJAMC*a_y9q5d2L+eb{t3^osUdT-JE)|^0f2F;>-WYnC{ zY!7v)%lYSvUZoevXQ~oy2Hpy>%xsa^XNs_9Lz zC+5hCmml@&ru-%Cg9s^eRW{fw>y)SJ;B(8}4+f}n9B=S%dAo+mR4(=Yp{|VcLz>ym z7FqgGl+KzFrv^VG4}3>j&`QcoiS=}uKhMyVx|?h-_}4Ri@p=(=AF}h?`^(O>C0ssW zk_8(|>;^OtG|UKq6Fhwzot9i&%OZDa~o-J zNJzutL2DL4U^Cc&UIXK0ZzEd7E{+>iweSbU+MZ)6U6Q(i}J~Y)!$vA(LCay-vGk({y7SV9}A-j;#>7r#s zdpw7xjxVXikvZk?a(GZ|dn_;EO2sM$(J@F1h=jYz{g-Jl=u+}jUS05JZ>pu1WeV$? z>R6J->-o4eJV)h*pgZ%>CV0!wKI%8R)?Cf2P}_TW|gj4Z}Jif8Wm7A=>y%&^b?gMM14 zH=;F2cj#{rSPrzpC|>u%Y%Sb>YN2Hf(K1-6pj$nJcYf>>Q01l}+)F&?Hja&RI%+)R zt9g)R&v-L}>`c!|+xV~t?+hS2T!kk#{L7{5hj(8c3@iz<$wsiO`(m zlGzEsNYo?R^)t)?Mt|mL$jK5VnJu&(!}d9sgt8%fB!W8)$I5twwGrQsC4b#bO&+Db zT-TvlORsS%2@F@=J*Rv2 zPd-oQTwRB3wIM{4QqXoAF)EvD zC1|5{Gz-@{@XmRR^2_;bVVcc&R{>-%${P~XUYV-xie(pe{d>)Wx4)=A!BaKKjYL!D z<=V$DoFyrV#?D1+x}0||e3)bzb^80&IVRM4zj|W{s}Z0~C80RkbrYcjR}>E!%gHH! zi!K{G@IaSwC2gE&W z$=j8#R9_joXVWDFMl3}67|Pxo+)s>JzM{WZuih+~l+oTRu2Ve})r`8($Z(V6)Xl7W zMq3)MJ3l!^eP}Ai--vQ__(RBRNu$f9d2ES`>NKurk1dHDG_ij))g$X;J`yK;Gg@3f z-v86K_3pC!t-+1zy3_L*R#%B4OS@&~^J-$#13yZQ6K+W``V}b}8&f5fu;k*Pjze)6 z-7d^tv4K?iKEM^;_<~f)ekV(2Yq`{x9UcC;QM6{KAjm#~wLJzWate^Ef_koQ^q3!U zQgvSTwMT0kr;m}caN93CsfpUZ7_NHTwQ=^iWkd-{iv^@!Zx^~9i{rnHFcH27fi$8s zG)L0w$p8omL>uOG|Ha@;^pje2q5nw&B^&W_@t4#!afU$DQ{bIUCvXGeU3`zZafZ)s zb575oJvNcOsKH>RCElXMGtt6&AY|eTusB*VMa!2VMlyw0$oG(G`~j{sA}3~Ur-zZ?OgO{_VMyp?qB8xj02Le}ajx#%|v>XBNvXF9q^=H-qR zg2|w`_?3EYUq!(+QnV23ojG8Do||eoSBR`EZOTZgw7^;Kb9(x{Z3tp`AvQl571^l$ z$;&d;NlM{>Fo!2#KijcgE>0`7_XutaE{66F%iTWyY5a}E_^r? zpUH;%F;N{e?24*CSsKF-U%QhDm^9vH7lnBab&z4D#*?-@YtiDsZduA$TsY_GA%B|r z&o%S1NLveoyn$FY>0@5x3DW)2s&^z}_CwbQ5OgNojflCTf3sTNBpT}OF|Ydh%jteU zyVX2Is*a6oKjh6QKg-p%bS~O|Ixti>JV1@nw!@yL+blWnfG}rSd~tn89J%=}Cu0(S$*jvf1XMgG6-@GtkgaGE(gkwnn(I)2XUkpb)vHb?gmc}OtvcIG&Y!#NKP~y&8Ro z18b_haCJwD3d~Fat2TBTV6bZz8WsbtndetcZ&w>NVM;FbYUcFyo8~+9JWj|la)lNgDPFc)U{X6wk z_C?nl_syvFZy$XNiFtR6&LtlztD_?m+c!4H6RaWQ@^{n;@#?G7U3A~GwgIiuqC6js zy(-Cw>-|82t*_{ORJzyouNDr*J2eK~F61!9=j84BA4!=NXZMH%i<*OOl;O8OcvEu1 z?!~Bc5=EdY8eD2UO3l+vGMO|DU;E=@g~aJAHs%{*;YSjrD#2GzMS5lO9UtKa=FxW% zbny^ZE~lON>M!2CbIqkhtFX;|+CV@~|>%>XDC;g=C+txvN{SR_v*6 z_Vga_hiL6pBFY!y9UBMDv7>vY2_tHKf(Ow{#Q6H+bCu@fOF03cZ7=;t8f+m| za#vx7YX_OJnB(d)tHE3lpJYd{A>JsWXmVDyx&I(Z5)OsGwTX%-eb;1s)W5aft`hzI zj$VJqZbh$UZfzt>_xOdKQ1x|FwVS%OM>5Yw$rSUCD+`XRVc$Fl5Ev=ZwLa~o{5+n_ z$U8p27~=N?<}TMx>^>Y?;DECC&ST=PAV=PLUYDE827K%4IF=V%nj0t=E`V~G^H({P zD};4X=6w`}Io;}Iwh^C*Kp7YRG@?|Kyiz~!j)bUOwf?4Vlf=N}DGn0`NVS=Oa>w=# z^gY#+Sh=4*l^$c(CtSpNBJtg^H&}XLFLKz|q9IZ{SxH0vRyf`^E`d`4LPmshCq59% z=6+^Gz$7NB8kO(~^kzJhI_+|XJPNdv$n>n$_3h~Ii!M@9`ObclpgNTbEjR=Dkx)Mgdqg%+h+=o*3y+=Y^Wp-#A6=D!w_+j}x-IK6ahHUL7zCtJ8glVppu@Pzmo_{hE{F8Rn({6p#xcQOuQIN9BZ8U`<=K`SZ)_v08)s-hnjbHQ+ z6n!kKD*>JJfDfP2CEq9dsze3~bsUTSHKAu6R{~9i`~XO;IXhGBi$Fm_{hpP$mCPRi z8Fju4uIW6RwlK~>rw=83)1N%WO72Y!jlMBu_vuLAh6{KYP;%;`)0l~Mg;mL&yzeq;=tCMivJle9 zo)NSCEC|q81o*-07LpUL&LEtbpQ=*nr8yuNIXXIq*8b2jq<4`3(apdRVs?oOt$HCf zROnEqH94V^_4t0nj>+d?fWB`Al*h{mrLXfS<(n2%gCi_yuk;r~`X!frTcQ?cqeP(g z-f?ORVh2K*0?ldvSgNa7bnN?-8GB>UI`NZvqIE;KTy{pI8wZX(Z&=}{zn0Ux9yiw+ zuf>;7ArSrwR=%jX*hJfoB>c;h+*R&w{u*Xn#E>$7Ip zMcSorP4@GHBgZw_ZIstknM`%puxNE^4^V@jnRykp8U;y-r`9g8`Y73@+OT!Eamn+3 zJz(Vy&jS1EsbN#Fs?jf}ZLyBjixfkvWWznJzIRH<{wFb4oe^=_*pwy>jqQME06RGt z*62%W*q78`o4Wi0n9Rac%|xL*RmNn8%m7uByisGSD-A=EjXa@`-MtBhSam zf=!`#z`NldZ&8cHugiUoUpOMq5oPx;hJAhzt@#xI5_g2Z~kkde;bwuDCa@_F~0z z^TOctxqXH!Qt4|WrNWkM^vz*aoAU)0cKpF^&>2z+we>MIg>~CgQmJ}Dvp0TJsLp-v zaa&KmTq~)0nTFEW)=q4?kw&beYjNp|-)w{0Wj>QURA`I7u5gkn7HCb@HC5ZT2%c-G z{N`}+_X@|iiC+wyP))!2KZ5(eUfM0SXxXnUX(&*p{k|}ADk-aH%#ygnIa%@4qGqXC z!vkF2`RkpBWo{7QdJw*1E^+HV- zOP}8RNWh`s(|44U5*e0+(GL0PveJ2?z9=YIdU~Qv9F4~kZ*5z&VJ%ULM*zQ;^#)(H z#I{GAk;D4hk{yit#rV&!PIGl;^^_KG9lXj+QRc7Jc0vg0rX*H7D$Il>X;Bq3Wjx?aqz9Ut?tzi=*qyCdV?Az9gSa@FH|TE zJ1v-=rDwJ5J@#{zHiN0>Xc~@bro~J(YW(ah*{%Dqjs4nskc(_qF)SZIXgVQoYh@)q zx=@5L*$M}t6l;s9g*QL)yiZWf-oFbs7->`Cl>jQ5#`<7;88n{so2 zOsu)85G*608~?%Y5&JI6nx{dKw?Q;M9AWlWAg))L>$lTq7o(_ieV&TTq_Cli1F;eg z!nRlm?^`v%5em~QE^;3vHMlPX4%>^j>XxGrTtiMA7WmE}acAJMg zzhv@twapwZ^Ss4K^2U0wWH*Et*O&-0%mPI`E%Ppgnsoxw0b_m@+T0TTw@O-0lDwZe zeHe3eOj2_CuAwDn-y$@Q>(CF4_WH%JZ6#%SIDCQcjpFLNzc@8@Td6i)`8vh-q+JF2 z3^>T<`CU~>P@T0Rz@E-_D#WBrsXAA&Q_J!_mgrZ>RGj2y6sq!j5tg30t1VgNuB!(a zd7YFTMHYyurFT7J3iQ{@U9X<>U#@HX3+DJPbuDLlHN8@0%R9WlRSt5%S#C2XUCpT8 zWRCzN5LGRM>oxi#GtA7P!F2moUtKNBVGSVIvc|`OYb`OG{Al`Cd%f7e1S2}PXj21j!a<<}v82l>OQko;9I1HS zDd8PZ5}7dVxET4)nr2gRM7oZQ&_8`%a5Q8B<#O_0*=_VBe?d>#Z4oUJ-aoqrLod9A zkZp*jcZS}J-%u|Bc-`yJ&N)cvNYofAgVNgbW9$rq8%Hv$-zsG59!TjJ?MogIwk`2U ziz*sbau|_LTKXeGbUrcqq~3Rd%&Y(_wxIy2KqGh zQH(9e@@Lpj1h+NsY2M$o2u}^7B)^}|s2Uwi7}#yeZ_!() zHcENPF)LKTN-L(4x!ml|C>2(aLlfNyv!j9Ht{31A&o6e&-y5Z#XF8RZdK`Xu3vJ|* z4AG2UKzil6oZUiV9KW5o{$j}TKC{>F<2W&-eTXwy59bh<)GuULageuKDF2-85D#LS zZZ`?f6qM-D-S$BGE4gIw#eQ@c#)J6yJI4DiwAYf`SR%m6!$zp6VCDyhGM8Py7$95) z@kJMtFiptMQtk)JikC0-OKpVSRz77fQKNnPnEi9dDxh53;%TH$s+dAc60Gu(dq$+u zjYKXPniB2Jm83b)aln}fCvU@}Wn6lCoxS81p(N*TzHq;ry@V)F`t+wY9FzraPlRtj)?0uA6+HpZbS@yVf zG_1Yi^KrwmuC&n?!oK6l^9R!_T&LqQjyz@aIJNrN^~Qr&=1CuXhu-~^TYnHwWzRdUPat4UOlAD#03b<0|=eB*X<4G6m&;(JRHC2vu1R8+MpRi9yPxp>ulhCV;;IiIB!zO<1` z4*4cxiw8cyHYwe?q8I-Pw@59cKG>{x6?!bScP)vq3~8f}dyHsXNnS zeC=p5oF%cHW}X`Qi-Gvn>9l|#bEMm1XI&pp({!;}F0NUA7he3>ybP+~^CNr5*t_x( zpZMWP!FkeHh!w}-$iZ46-;{xgo|H7Pvnq$AoROR^b|iLc*ggD|yhZWquaSg`d|!ts zengt2H^B@+u}P4+vy7^;3JLuHQ(Nry3MSK8gA>1ZMU>@ey3H>JY^H)6^|a_Tt91dF z+hB>OhJi~gXR_~<;=WJU8gH@wJ8rQ+>z=o*&iKnA$xS1v1$|>hs|2-^IA`t7WX5byw;fU zD~n{|m5Z(j@2j?+c^t;oxx(7B>6G+~VQ5u(rQp3w9sGI5=Tw*ChB5arKpx)0xVYfs z3cg7nMZq1pP5M|g^)#A%i3O%TYJ5O)Hgs$Dhq$~C3s7h|X7#!Afs)@WXa#~(d7CV< zk2p*eRPMRLoGeqhtSo*psIox}!rRN^%x*lHbSsLl$}11DC}QQxc~#>{XaR zpOV{jR~E`_*DwD%=vk##E;q;-FZ>fH z>?p--T2u`mD?&$ib2mBY?>KItp8Cr@p1YHbJ`9%Xbx>M2_5%Oj>bBM<=ky5O9J?1s z6(!^X<;-7PZf3YFJhe>qUTSV|OM1T#`{`H6tC#!KJUv&qJzI(zTOut21y!@jO*_b0 zpXJJrl>BL9T`kcuE>N0m3OdBbq;6_I(=%f3$WriRwpham8MuI6*O;R)St3 zZZLZuf;zyOFHoGb&L9S6hl#xYc#qLCF+$!s=bIBAR2>_nAaUdCjIS6oU0Tx0JUKXj z39@5eR52*3?rB@SaoG=Tc1wI_nbb}Ex?9MxPdAWp}UIy(Tr$=|Bw%c-3Ts*`L4V_%2AbkgQeS_4#ZDD7x z2s!-WyMQS>FYPFyj&rrB3reo$-}wB#H&?nG;$cu&=FfUL$iTkomIu0-1NVS1Z^8r^ z?d<7IiN?KY&Ka>vGkzKreX4T$t|V0PNb-zQ;%HIYbzoT$g^3o0HcgR0w!LHS4f1mr zEC9L0td0rReq1^A1$$BhDN;6xl&%y1ro)1=k}FV%7Q9J8cPV(aY)2@1)Mh)r_Okk( zlopn5bS0^8fy-q}?Ug!>{+P;^P)6?rTVdyQQGB|Ukn#Y1V$VR8&H7=a@vv#n*2+^o z^>s<}WN}qLv7bj$7mC0>u?R=a=Xf4?^A96x(7;JoMoXinMA+A2kP)S0$bH8_wqNum zs|=XpAR?yh|FUG&`muemM_h@wC@w$gOdx(t^aJ&h^o!wCC0oJrJ^JP8RonDCi}YB1 zg5W3E)CIwA?~Lt5uFpq7zM`JUhyWWe6luV6*cAQqn=WkU`FABdJ}WaOBPq%0_P`zM z5`4)_i4{_`kb7P)Uchl^B*R|}dxK7G5*9=GpWD7U05a@6189Sa5!FGqfzjw(VU6)4$H80X!{dPXlFut8 zFm$7GS$KVV%00=`w$aku*$?J6;*K#2ha6H%# zo0r@*oUn0I;}BSvv579hltu3`@ZAD_lXzf^4K@dAOrL|+vDyn+d z2(c4E5!Buz_H2t-QEE48#;8%XYE`R!@;on|e;_ZCoac31$Mt9yjK4SNem|oLfn$nC+({Mx^kp-sY_r)_;u07eDi6YEw>DAwn@pi zp-EVy`4^v=gG}hT>ohLJ_Q|h1>LA(HQ6h6naUd_fv9Mg+Mqa1Ee>kgp0qd6|M+^BS zaH&G1_Z%2_AviF2fqhTPXW)-h)!(u|cqs5+jp9au$?uD?@F7i zlz`5?k(155-I4;?H-lu8yCjYC%CBq=`G~ELFMiZUN*7j}{Jp{Q-U?=*Yi@mt;$yBY zh=Wa%H{3cw#Fp0C-}k@j43%5o4ar>!iG1>S^Lua3@Zzy~8_B#z#lP5yEsVGV8kbG+ zTGHlU4PwGl%GXeH{js-~Ev40$FLYnMlPI91e}cbL-n+gBBI`~B=!(dbJ?&Yw&#Y#r zy;tm+#(~|he3|wjx!(e{!;&enLHX8Mgixg6`Uz1=!;Ob!-IqV*dNhz-waKzVN?KeV zUIkN}SlZf;AB5RU;?E`KOQ^rDE1tJ)|8`iJ6|dALhfx|8U+Qu&xU+Zza5dMwEu~?F zBKL4bxz{vHvA&o7JvFcGa(DVdXb$M{2iEGpvi=;{(Nn|0B8#Jv8W{Li)%VAB+u={0 z@VRs#dk?4Qo*U;_VuQ!7V=+jgocT##E{h+?tZP}wzeFqH`MSpiP{1QTn4ESpInC`j zJh*)q&SckdAS^Yeius8ct}sg@YEfz`o*zYbl`HF3V#8ouB?dyfE80zCvX*Xt7+Lb~ z8!1zcBi=gY&+g*2jIbS}`C$Dv-6u)@ajw%8l~L8qU1Gj2y9h*l*ugfFpI3(sr2}p~ zNJ}!U;+Dr)Cmy6S#D@!6n|~Q0gK=M;YuC72dGJubV<@foEl}zGMC$QJP(Fuh>NoTc zl8pls&RpPH)@;Qp@sA#m8qfyo4|m=?*9q?&ZGMe}NnG0{PKle2Sp~uK-sRTVva8c4 z*uS_?4?7tjOGC@jSbpWoG>9yH;w&DB^5V9dH0xGV1j~tM zaJo0rdMch>f;<#Zj8 zc7fODm7=0UypehF(rMlz<{h^DGroTgUYcpVQ`KJ$|6~+`bB*vzWA87U(oHD?&hJmC zCOuoR*)>E~l)52%l9D1>8<&s1kNWu4QpkgM)FrbWuYUX)AZ<9>nWc3sPY7I@Las1- zpYhgHLh7G3F<}9W1L3_Rdl}$uCBi4dvTE?^==%&_&flB+(08#Cn)Ss|bVWfW)|2nA z6S6f1sz8yF_q+GpyrzF^{n>~~o~Z&gb(6-qJVW3WKM&~n`7{`TT~!>% zBXutqKz_L3Dk|Y-UlN-Usb;_OnesY2PB}}Rk^PWe7Z=Vyki!d!$lUF zJIlLU8RTbpX%@X2NXW$xj?Gdv)o^^M$NwC}%SZ=-@8|w7aQ~6OKHbiA93E)kmhEZ| z7A@koSpRL9c>h;gqQ#hIS@%8&{+(mwsMWC!@NP>l^k|E%JM;N2$*%VdEbdxf{0TLt zU^BcBWWTxI=#5!Dzf<}}b}?AGB2MGGTXHc9Y#aXh>t&<{MWx&@C-weH;HHEMP8(}K zzr0|z``s<}rCx<(lhradB)F$_pVET6OrFVzF{vJ@Q@Hd1G;Qw-vXIIp*>GS7RsG^j zYh&dZu%Cj_A5Sk!;UfFkGBaLXdTEvnoLexV?v*~I*5Ze?704jIiqcD$m;J@~-^Yf3 z>XeMFqF_J8y4AV*j`oU`g56|*t{4n#X2A=)z9S3{-bcIrt^sVU3g~20iU4$J2%ebrkk|%RT5bPr* z>+G4hm6k?;s<(R(z_@19wB2*@p?0P#rg!X0JQHq??1YfbZkC$6cY>2z6BK;LNR_h~ z|KNm%b+H;->3*hj;dgX_}A-!?& zZ$kXh+}|5R`;=EBhRV$@Vn)?KZLYl4x+hq2_9`CaKSK}0t{l*FNb&f9O9o~%;Ta2Z z9}4l8wqnZ}DR{ioPphF!U1KjZamzGjU6Z2#@yfZh69e0+sE_Nc>!6N`p8-?XdPk>4 zSN_S3b##ji$mdcPE_{AgRRv?G!#Z1w<0&S=3P1gSZMuYlCEvs4=l6?r3E5Y$hxA|o zdP@Dfivm!6G|+TG4plufRUrHVKMrzr&uSB|4CGTbzE38mC@Bc5BM--4NsvcP$!_*% z2LAZIBje_0-o7H{6`6=ylr&*(%Wsohxr@8$n4A`(cNn)Xx=>hiE9#x#t19L((fTc` z_3^8$EeYa|ozxv(L-D~Uv(_0Q*sN_vyP$$Dp=T}y2U-mSgD`8u;G)5@5Li3yz!ybp z4OVE-nD2yeJQ>$5E?d#R;+DB%K)yQN3-~P?@;w{gE2`_9X`}ha2|QY}wd+zb@YO7r z7}&Dg->}vDU@`FhLmW;@tXnRAJ$T4!+KN>EWAoJ|j;{XOtF7oOdKUgchg3P)l=mi> zk|J0d3J;GhS-fS_d@}j@aNgbO7h9D&Y3@{)zR!K$EqsQu8uGcYB8A+~UDZ;|OYg~V za4t5>YvWsl%H?X ztGau)HX!L}Pn@S%f^k0n&&6c6yUuRx-y3yL{@!34%yehJ&!L#T}+Ony7a)Y7F^=jhug&R1ZdTV6e~1LN>n)MYO7dW>QWUsJBoG_?6L0IaK1o0AHUUQ!^H8- zL_YP-4(vM=J>EF zC>`XE4Qayfjpc?eh5B-l6pC(D9- zqHe^>);lz#rhcoZw$|cQmN~Iw&)!AVjmyi7>_&Jg1dV6x_d0U}P1HfZBQh=Q{We{U zWyaNE^~?G;DGtp=e_ZQN6Q=!3w6!O)hMFP@odZ8F#Sm*v7C6SbXRZBxX`VEx8D=Fe z`5n(O6i_P3(oAXY1?N^^-`Avo1(q25TF;qG-RXK*oZjKx=!bXv!%W9D%!PR<$$F-G z;wYkN_wS9S@{5C^g%1=3Kyu}tl?8brM@_{v*)41NQ}cV{EdgWp)Ag|Mms2``?^hY% zH>Y2|V1EqTKR(Vpv&&?|KA$`e{}I9N&FRY}Ic{HoBJlw7yVC$st%C->Yq$UVZHQ78(1+C}>O4;bQS-6(5I; zOU}{7-y07SBp9`|^JZUg@MX`|HO~g_z6Z5-UWi+ayu%;(A@$@7Hkts=gc zDtPmZGekVw3et^F>D~_p0duz?1@7L2+3Ahk)|0&`k*RN5>yZw3VJiN9o0Rr@xdj?vuqv4hwn5a;`=WdHGUH+nADX#4DOA?}uy1*hc1^?bDC{p@vO^`5YHk7~O zB^R(nwBaYXm*1jA>+@K2HxRbSdy~_(C$a6Bim|c*!H(hhKvB(V6ZADM9yW1Rz@62Z zOq2+UJ=h;TLRZ$eNKA#~7w#9PV$XG=6s;$#C=Q2|_PDX1ijvSNQPuT~7k3nwVhf#> z-j#ZH^rAjzcNzz0S7sVkc~)7KmR;+*I<)`P%gYY+-Iart$5BJ`)s;XN1>P(@`El&N zW?3ufh)*nqCn{Z}xc6qFZq627Mg*MqbP9#)&)sYRqohVSK9awcU%VCAWt>nhO0D7E( zyiS)^tn7tU={8>Nt}e5fMVdUpi)y_15Skn^y~$P`RpSPP%4ISI7-M$O z(eZpb(cdRIpdF%`+-}U576+Z3;fR_29{Vnae_&q2Jay%dKRv}CMXC$=dqZj`tR4$% z-BPMt{)zn}IH+o80D1Ooa-4bgTzF7lsLs~p)q)%pt2B$7ad|$pG~Yj%7-)2+e&-oN z%dj0ZM#xGW@otj!f+^c_*>Xh$>luGcF4$zv;I6oNC_I$q+af`n-|H4tt#49r?Nwzk zEYC46$Q3%^NiB6ba|J0#bYKdDuVS6*W5W=R2RdHiFID-4Gj({2Yq(kW_FSupFY5v; ze9tswWuX?3@+^06%EhOfU>t!+Y;A3}$2xHtR0L(Jp_$8C_!{RF~{_0e9lCL)kuD|sg)I;yq9$WCc^Sk62u|i3MZL=Z`4E$ewmG(6Kh}5%7q)T zKeJ;E44{k^s)!_J1^ayV)2YVqPX4(SU*$_b82{3EvrQ_NeK|2bAY$Wab?5I5DzkIW ztw8$gaY;lD;oI$E;QKsiU5UFzmdCG*=Y851qEf|!M|*AEP2!Oc538T7RULh7`zHQd zrQik3aN{z9?Ilb1xfC&5XsP{0a>dQ1%DGw~@4FM(GCtd!ea#`2re~2Rkh_&xW#D#F zvh?tEnF{gFJcVE`*%61X6#E&4)KL#O;t^@|WA>z@hh;`hk0L>dy$7SF*1c!qGt(Ed zA%)3#Xt3lMbdoIjD+Cj#z*xE43FzjhvpCn$6Ss8Srq?k~`Fq2B^FYbjZ{IcZa9_`B zODlf5RDVzB$IH|HJu$}m?Bxn7tjx5^Xj=^{0m|5af=!L3NA9R+&1kvxkLN^C_ z`a73KJR#-o{b=}wy%g8=dM)G2`r%ukH>Y3pCaSY|=^<^SCyj|UyVX3q8rK0fQF^Td3tkmpTn19FW z5pqxn&b83yFQO1+aQ{UUqUhSyfd~C_ivFVRL z^hh=@hgxTSB3_P#yc`p}s0%b^8XBKPbOl7+5L039II=D=)8j%P zMF7XXUp+7qv>0hE7I~_HTjllO=>Mu3gQqS52v5 z;}#j+V*Qrm%h_~p=yPf9#=YWIdHnzmj-jQ~*1q4cC zN?@}bYZgeizV*T^t@_1vqL%_VG33+~S&Pe*R+T-?RPln;KI@?Hwakz}{K0)X0|sVEj_(xhg`3HKm&u(iM6RLY!Uyy84$HB~S9al&9P zYViPOxWJb8sua_Fg-+8KxPv|H1Qp1iPhwZgxmm}I>_g$@dl3Z|?jL`H)tT)Iy>aT` zOC7}?L-ZWWqE2Py{IQ%@u`9*92FaH{ozp%Nn~6KwgTu<+76&Rs-o$)KOGwVZbu%@r z>rQ!JfC~zBmIh()%FLIx+-QS=ws^Am*2lj$qBE)gWa8OOtQreQr=t5hwA*n3a3-XLGi{H$ckI z8uygo`|#hL5HkmRw%&&{ee*}#Vipm+mOvFAoQ}qwVl(sr@d48F3i)HgcuPgy@1vjX z+yA#=nW_w#SJpGqtgq%XWXYc4Yg@m@rj{z}d#mC@{%v;tqQ5sthPshV zBdUUV8)eg?)Prn@`wm7F%C^Z0is)DQCfF&T>Ye7n{ zB5x_#PB_zGxqyl<@9zzl4a$?-qqL-9j0i@U>N7?w!?s94cN_^vxY0w?P%_3g6aV|O$yU&7CU z;_amhZV$Qr%h8X zt>U^25d}e181JIP{j5`M24CR#z_T?NH=B+?2ATa+5YfCgvvxuV(>^YASeDOL;3rjiw0q`70`x>f+lpdPlm-02Sk`O5_>@$|K@Lk& z^u}p0<@2`9<|dMxjqRGU9VE_mB=ON@s>l&WEq;KY$D#8ran(au6IWtHqpl~Qqd zh34=XsdYPxJ5!uUBeAjS`TO^H&S$Seh-NMC6*^vMTe@+D*@?Z|bmG|0<1I6psT#Bh z!rDzg(UPp5`Q7^qCzbKpR!F}q2OA2m-YvU}=lNsR#cN@gXG5uXXK^Sy&IA0tbAq>LL>>rw_I zz|-WNt)(&=SY2+DSnI8|UZA&XwZ>)zm%Z)R^ujo!Ds@=M?8dBSztomp;>3@tj?z8K zvzeuG?miK$@=){%tH_^irsCH4(h^6{_Y5j8u)8o51*0*0{)_%~z|?Qrz!vL5XMah$ zFU7EB!;j~nE9==Zn0XSh6%3L-#@I7E-sc0F>q!r@><%?2TfQ5PDUg2N+xrnS#$~L| zxMx}iOMwPjs(F^z6K7&O+~|6vw(0ExcVT~TILFz7$9`R-jE2JNDuU9usOM(f;nVN@ zgU*u=T7dXs4sgt+MDT);ZczU)81Nsf4z&md5$PupO~KmZ{=) ze{Vpd8dmLys+s?(oATPLsF011gvo!MqP`JzNnS}m#Dx!nL z7ab#D=z&F@s$H&|M1wiLK>kZccpVAX<0%dlD`qR=bgz;^eHx;iGlRha&?#12N>zu4 zJ}+a&`D=$Vg{pcLEO)N^s#r}Y)WTcr(DfHs&vjcQoCpuWAW>QmH>p14x=QzoY9Lx=y@UoWJ*^@5+fXi$S@ zMFVb*^=^MIhH|K4#FDxh<|U4>Qri8Lz}0w;u#4#(;?;1!c7Gd zan)~({Mu!lX7|u;MwVy$fq8D?^Auvhr&?6c zvRF23(s!hER=`fFTf6>L{Q4#>F1*s= zoG4q|70r}voWpwBTS-0GS2|D%Omg08@4V7kPMel*109%5w}Mm`7^ihm4(YYC7OuFb zqhHh{i?~|eMHixAH2r%(yCqRp_S=Zj9c%J#|AFjF(c509!Gi!D5V~-8tjIjZl5fU$ z6&`0BFddR%Yim~+7ybkquq3+flII%5rMRn$7jwsnk2TM(1OMI_=5tQ4a0ED!GE8Jt zFcpw-FVmoB&J8X@(dBEaW_Q>6;mdMlOj4$5}K#vQj;y_tu!Ga+>WKj48)ByQtdvP@1+jb0dg3a> zK1}5HBp>aCSATsW$-*UgSR`6SyX5(Gz-iCK`T4$u-%MKX8}hR=Evp|-4#GoJogg^i zU2)^_Q2zDS);{J`_kce&>WQs_d_s;}b&Y>-ER`>qtvGOJw`B?H63#}lEK3!H*~tz~ z>OqrDsYyY1b3K_uqc$H0t$fL$d>IHGSo6%ZyQ!6ZV#C%M&FQJYPd`u%VI~-`=WVvT zpZHiEywGd9JJb4$eQBGwrT5|1opci*YUW89o7fgatAArQf@bL#Glfhsc`PcZj~}V} zvt9XeHHxsG{h5Kwy*dNj6;9?XPm8x5pQ)No zt*}2v_vQ>5nO9&kS~ksoCy0$YZthP1c9r|a5y-}8EPV2P?SieT3QGH%O|t6U4C~RB zr^{BNaHzg(lYMTzG zj6>nLl4p5lcBZ@fta+vu>&+T(FHuH&ZIeZ|m17hPne*&xyS*U)Vc=b$H(joa&)9*y z_IJOHX|1f-)(A%J?4SzROpuvB96rVy(>N?8MIu)@N^ARrJwpb$v=YjTe&f7GbM+N} zrNys{P3kXFTIJ!p1|sjax5g4+22}z~MuB%0?*ydX=31;C1RFn7^A6$Fv8v#_3g(py zsZr<=2%IUuLJw_yY~oeeemBfRhe=5l%CadBlfJsYSuqGpj+8BqlEv|rnpf@(4oGbu z1h&e~m>vWiAKx|J(!bBLJY@^Bv~1^tlF90K?gaRYef~;8!!&LSFxX*R{5GF#eZ%*= zwG;-yjiuN1$6v5hw8*8K>N2L-41|e<(7}PGsJTPpm_)lzs8)aOI3Ph1uQy8>mf+BF za7EL|Pqy>-_eX62R~9p~tqQiwUP1|($kywxaBQ#frQPLuzqtC4&1X__?j-C%+^cXNx!XdQL=2D>aa1T5Mf^4Ux2f~rqEn5u~N z-nQwj`d=}-l+w-C;N z2+By_f2aKKeSr8NZwK3}`2Wk|MMtDf2ON)E-qqKC?h1xgms(^r^P3DpFgvnyMTG6M zzPeN?kC-64cf*WyP2sJSjZBuiRZ`sGM87idOnh+s+afNA*WpsioW5Caalq-;0P)uc z^W^RP=is3o10##n+q${lP~&n>dpx1xE~?!{(aw=e6y(PgA!U*lY5iZW z5$!9j-8hPwAF|jw2iXooiuVGqe^Auh;uQ7v{}XOgoZJ8W`~No3{f}9YNk-G`o>Sm! z^n)UN-xT@i_|gAYYzwBx=}q2yhHMeX*h%u%-NB`~pr6KA=#aO+3io|giT*i)0w_F& z=qjHmpT6P&h=FZ0m6OF7+)tR(1K7(2XkgAMEyZwG)628 za`h+<@7BS?!y`(w#X{hz?CsVUs(~`h#z3OIUMi{qG9{H~yO!(+9^)7W30Mzt+J2JK4hdMo*9i zLW6+FOCJON+@eUt=|>g-Nv>pNd9?`6kCRYAC=U+@)HaZ_8Q}69sgx^cCB{6t9M2RTpQY zgSOD5pkTdgqV1Z$*fg@qZ?x!;4|&u^ZO;M}1Z{dj#E`Wkyquq@4DM+smf~bKTky$h zyu0Nyr$C8wrb>iYQzKTIHDMr3n`dAx3G>vR`yNS;+l&=oq-�^N56%m$}Wa%-U=S zK&PrBH=X?mqy0V^f#o!uEKcgwen`TfVY6Ac^|32Iqo=z})^SAL$+&_6L}4FP1mQx@ zFzT_#tm(@lIeT2WPZLnbWb1XTDJ#{9h6g(1Y~os33~}?wzc<1h4Y-{XUJ6&Kh;pM_ zq;F*lu@@n>psxRT1ggnk`UBEqhT>i$&9v!4`)aAhfe>e>I;In7o3g&lyMX|JkFOqy zkiN{So%UFHabC1=Oeu~~)ON~)X zHr%$cXWB8^*Lq(3kSbQ`pGX9f2N1}r7J^QTz0>$$d0YJGzGgLB;350l%_P!V<8KZo z5^w06>BbnL9|U<>V#2*Nh#j&r>g`$4O<9qyCZ?hH$sUEa2)>Y7iK!$X*7*^ZM|wg{ zF3wM5XQae220?v24}@g@5G%q)N~I zmbGl5;C+Y%Qz)*8P6b5MC!8SklSxpz<@Qa-Ul-fShL zsyzOq(mSjxl4VzH8qp`}z6n#Wr7b9dzUoo9)d)M&%1*{pH&01%o)Cp!Gqsmt1&MQlGg1d&}I%75ryrOb0D zYE8{?ntzm&{_BU((?7z}3USz~Gc5743mFD4**?Cc(idH&0XWCT?jiM7Vwo_iw;S_$ z6Ceh+C&%jt%k=3d*B#^NFc8;%sRS`^)_LUtNt2@YtH~wkHJqY)@>(?Yy=baSGbdVZ z9@otUia})2O;JPHNNEr>j?37i#9{hLI>Hj^q%jBONL^M%m6(Qx%#A%s^FQ#moVQHgh5&C@0w zi-;HkFTUo&^Cf49E{Vn>Y%Cwj6l>~~ zzu7kwtTpt;ze~w7vLP+tt8f3CI?5#kz)?sY)1d^Gd(jVUSRW?eQPv|Jb3&n*|7n}f zo4%dQbe;^Y<>5g;a*qblg#dtj8wWt}PBF6#6*InNQILApyfraf3vg$FQ8lH^smbj99p3TsHwwLb&(|!edD=Gd-8ZAF@K$a~e-P zx*P49Y?hoFx8S!jEa|W=7B+d7dYejL&n?wPlyq`5iDjG;avg>Qh(__Q>-Rg;pt(ltY-zWl>)|D@|I{DasPD$X?(p;9C+sNAm2&Ae0pukUCe zo1|;{<_|V`>11sz$O$jWz%9+qRaB~(u$HA=yT(ezG=i>pf^L0slT8sRrwwsJAJ-~m zy3sw5q0v|7#+cf&f?bRCAz5Eg-_OP%jJ4`6?r+}YFg(!>mDY|fvLRUH@b}mrL;uKb9|Z_NWj_iX_{d0T5%dI$j&plVj}{d#a&wG!st>$`$in0&oyp|P~|8}5mg}HKU|#X`D-I=5viL|BWC4M%%Jr+nSjJ#D(O@wlwuBQvJ#DD(7i>I(5@xg-|F8nVd)Km+L+&J4r6WZ7E9q8zC1KfZu| z?J5YaO{LvMill$5O+g%DP#l#|{Z`A83B)8XuYh6JX3`gSaiQ5fNRIoJ8{lwKhwSE?JV2xN3lM;XUQ zvKTDTf9Q?od&9bX=eejXkCRFt$FO`pE>+Z9S?i9wQJ=WEfCMWm&}`vW<=a@B0Rcm- zPA;3BFvQ|fV*muFG8%QXzD$*G6#Oxq-!WCojVp_@a$M`Uj*ikMusMVKw z9)ju7C=2U6i-BlykO+{p@9Raq#m*dr3>byvIPSY)HJnb3xm_k9aX{pPtYCfY#M-Bd zj~6&+C@_Vb)DNxUOzyE$GknvOgh0wXD)RBZ8~@4EOg_Ng6%jo~nXCQZ4qj2Vew59` zbrf&UR@uZ9KgTR&V?^8OTG%&RBX2rGFHXP$BthfZ=?0bYee`qoLWSzjr~%P z@vA(-PMt}!<4o%)xm1TKRFsBG@WG?U`|Xm?`9leL+RWFCA#^Lt3D((wfQiwZxN>3q zc$VQxEGy;H9jP#qNGC0Rq=)c1u-_0Nq8()Xk&8_&NGlHr_!x0(F(lTneBayDf2C!4%p1gln5!gtc4_Qc>n+N~J27(MQyOSZh7FSoKZY9ob? zskm9V{(+F#&Y6o(q?woQa3Isa=5aEAq3(2cp`O?JK=LsRQdj0(n4)S--*wSjpmH)} zmlH~u)~iE#@U!Rx(&z%YB3MN#eOxb#-@Hw7Lu)w*>#A}Y52+b`jqRA0TI?qV7^Y4c zv5mPpq!>6`0a=B#prG2-nUNB%+62qX6mhTEHz`Aco&`H>Z&Ni$;IQY#Gnx33=JN3@MW4bF*u%{kg zcsUIkcZ7j{ql-azh7~l`2s%-R;bipr`m)LsdsAP_H3IhmCT{YwMhmIaO@Ud^1>Bn^s&WGIxR{xlbvih+T}kmx*{^SX zV^Km@2PE)nD>Bsxysdi=;mp}gP`e{lau1RFUiGVc);lI2}^>q|prbCaf~x)Odwm9+_a8uc2E- z%VDB@hsw_+)`-3@<;x(7=b9DO4`XtW)bA4t(=u{KPcRFI1Zg7N=;PA|W5=5vC2q&Z z%FGZ_P;}01fE|n6t!7OnK(L)3Q#{?6LUqLRI7T5uS zl2Kp#rI20RyD1+?M{iK+gbHmIJU0*D5zu6T+V8<4i<=#9Vbd>B7W+0;nmj?PKtVDv z#l$f#ASd2NGoj3Ytd zLeiho&8SMlS!mdRf%r*1;5ie#42xD#zSSLZmnzWpdkVm$JYh?dy+(kWRY^#SNsvj{ zDVGgE%O~ethn(FQ$*@_QVa-^Zj>*8?UxNx$YmO%)W>_Lc)mBWa%sE%+bZ_@Gi1x{* z{=*&)(&DjY7d#rj9F<^E6EePy)eppx8MXN1x3q}-gdqI9=}=HGit0Kk9Gz-#tM-M< z1ph}L?e~ynd=W1$hAx3Q0PA2n?V`s$80oy0 zLm99Ab}jyPKo*`mmfGjpKM4KeMHLi_vlbp}p~r(xpj+fw!?7%$1Awc?LQR$Lshou1 zi+4RAY2I(PHR|i*m(M`Eg$2iglrwhlAF$p0G@Wd3{kGERMUu8J`NB%SHXdC!jQ?^YQ!>M;{{aOrp+6dll%p(tZl;(+AEaOgBG5@rpLU0%3qi-1+a@&UZ1T zWKmW?r?WHUCtLi@GBP>Q%!k9qe=?RSD>j}X{u{3|wQ%h)hWS)G-JEXIV0Az1f;@3= z;U~Wp_-<{jGEPJV(aya~>i&Sl;u$A}}Cpdq6tVjS*QZFn@ z^{7wACd%aq0&zV{A=JAUCy~)I&h!}9Q?>ox$ylDEUt{OO zI+y1R#iaS~lz~94{+=;v$O{Qx_Ecf>TsVR<{g}gt8gS>!vn+< zq%ZoLmp7Fm@N$5s2_Nx(T}>FHi?C7DuvtU&0Pwq4=J zHU*=^huK>f60{2)=R!}td>V}@s|^hGcJ#`3lW`OLT;RZz+a-okIp5=Y6oI-^TQmy< z8?Bf$mVq;rFe6=9av3e-iZ6<30vQx4M>!3adGS86V1*bhr?fZv!#7>I z_aAxkM3PS=SsSMpnm!N^S+ACafWnE;;U1|J?9fuW-lI}fw6I>6&ECKyDhk!5UZU=D zh(vX>W`t>BfZe&H7c8UKmw^`&%MtX#=-gIHx zl8`CtH&Z z*AvzhVMDnDJ!~gXOe?!%DIp8=$vGG=){kjVCSMu`Nab&M7VUc<8{2%oS*v|0E_`$^ zgOnQrPU6F@$Btv;vmO85Ncuk%o%=tN|NqC|F>H=AhcKrdn6oCwa@>Z^nMy+`8zJP7 zG#wOXHs{SL5#~_ptumyOa+-5AI!#H#M5T)DPOF zE8$uj;l`G{*A4|Pzu{@+3oVXE7#8%#h(a^r|NcqJ7S`@KGy2+-t~3$SZ2$L< zWZ;nHO1_R9(IRjX8E!hvOOy{+sr6ha0>sKMn}0n1-ky0LdG6VAmV0aO>&W%EEx_yQZc;w>JVawiNLIHIY#}0TR{2LE&E;mar5a#0H1GJ1%4Q>~x5-&* z0iu<_c-864ejPTT^=|S|{&U2Unt~ZcY2VElW5ZR74*QXMS6Bh@q%?hZ(Lv@Ml{$f# z!lup_9)ur3tmk#QgN;cc&T^zwOMZnR_=6edYoWJEn4mj6uy1WRgm@0xm)=nabgEN| zxY0l9S)`a$8Cgd_p3Yyt3lg{$obMmtH63Qq1=_X@4)63Os!v;@WpoOzht#jD}{R|n~&m%4A7PMfx4eMRW64BeG*J%Y#! zitbUokm_fr+0x1w*z|f2An)k0t;`p9#`7pTjxosrdzom83kaF5|5{zYen3eZf^b_F zT~J;LgMb}?K3Xb~eTZSi^S;-*;MvE@KT&dFB4WNqb^pxK`O<1Kzs-$nD9;s~f0kwt z&N%)#4p-{YmikL$s6Uc`Y(G*suT4&`X#ooF8suFxm;|8kiEdrAufh_XHAJPsI}d7T zQ2Y(bUX7WuvWBh6dW=NR5+KMlYlzFslMXfuB|GXAeedxZI4J|ALG+W{Y^l=0;5U>t zYSD-^KkYI zb5fpB$K^2CRV>ln!!lg*)|Pok!nX3??bAD=o72`` zT=H=<$(%LhdgT=s9*mKX>}D^ghlA2@YcsAb$c3UzbvwESULcMFwMl>B>mGfnXzZIwS)gdSP%!!Py~L-ks_Q}nVO`sd{5(na;T zeSlmPn`*DS6Edj_=8VuCMD9wC(D^5vGTW6H^h2--{`EQd2FjjA(~^k(2Uqd$Fs zjvj#JjK-o%_k{^rntKmUDN`ywnX@M@q*ZNHnM`SYk*t3JaNU8Ks^3^U68d^x94t)EM?Nk>c^2s3Zm7z`S1FZ*8k*VLX<}9zo_yn zFXZj&1vcjwu2AFA}<$2??f(^Ks=M5EcP$OQiA7R=P};6V zpq$d&ocvuetBD4MCh-|4wcNK2fPsrwr;R*lzm-!=bIR=#Sj+Om9|sx3Yf8X7$tY** z;J@f|yVn$0M!cADP;W*`lBK!QFy?5@3i$(V+R-tYcDfilrH45gF#A1E*Lktv^g{9I z2;;8WZwNP{o&p6=%gsn4Ge*^QH5+`XUti}GE+lm)-7#3%ggkdFHYHLBtC47OO^PeS z)}X*AGerK+Kt3vPRQitJdnkVmQde{V>6GSAK@nbyo8iwDF9bPV}J zu6^dBzaz^vH^{isa4v4BCqMpFA~^}o|6ad?8ZNLE9Bi-4*{(g@w{Xe%K#@#q9P!U$ z=7IRK7JCv}Rwv}HTNXP!AW=M^4uIHP4SZ}hCQ_6stb;HpTNAm*y$l=iEhuVf{A<$Ja20E(a z&LCNW6qJ<4nZ_!3Cms#1=nHRPDM0BRr=D|F0%p@}ag+Jr3Tnp7YR!~QH?hqmrFpIVG$UMd$W7-#P*N%0D zkP@cbR^!mmfaQD4>4-VE|Egqo_x;--Qx4bxMO*+2f1Rez3%##T7iO`3^-_#lFx4xCQXk7m$Ulm-I5;ZK@$AZXZ_3kzzgx?G94p z`*DVBX`Bi19H4Do;}YlN9{g(+U@eV1WT2&y&5z0UOGOF^QXMH2pfD6%W)Qt^fdA^J zE6qx(HklOvK{nNFAbzA$2F46>*+ctQ6p%b%q_X>=EWhcCB#5_Vja~dR(2vp(9>=qc1IkH;h{l%VFO|Q8t`-_F zdBq?uC>Q`mS^1%$(Hepp#|)gKqXEV@?*hL>G@Xgi{^)-JO zeJWvTG7ahs3T!f$PwZ39ed|nrJFKfsxm{?K-yRe$ryZdUTDVyFk&FKM?}Xw&Y`&Ok zH!PL_8Xi>g*h0YfyoCg$WJtjW_qd{4Jbv<x(p{^MOeq}YmJ60 zr3H@o)+9W|(s+>NJ0EZ!F$gm};a+KU(D|e7d2ZiNWdQN}?Zwh>5RMMzsEVM=E_(Ic z{E|QnbCR{8yXj77rzc%R^gSJ%Z*}xJL@$l;)FjCiKPa=rc|-JrbRG?jI7LuSui^=k zSsW{GvZltevFelBLD!{=D*FK=tZKu9NMW8zVW|OF2&?ati(iO2HQMEpg*ib;LkMF? z-dRUkz8^PQ8Rn%yrDX|`YCFKzNH1)_s?cpgE@k`2CW{hu5uwfd z-kYoHRB{{XqIPVsCCR++I$`s_+(j9~fdO@0dv#6|!LlY%-8|~ozy{~g{PLgg3sQ}x zM60Bp@Jn9EG&ouv=7@Y~925Tngj6*J8QcT1W=N2Q@uWnu8!&^>h&k3h3GL@9XC1lb z6Kf;L2ercj!TbNV~c#6|h;ksowJ5Hf`uRfqnf z&1 zH*=sQUGG?O6|~lacdbYZrE0sx8tor;$nci20X^yKB0R|S>mR#3yUjlUzm)B^)_?r7 zQlF9~P*6+VZ?DIm9`27*8d$4XIT)t|K2@Kup9O@sy}{WO4;}c!N^xSLBx^(Uv-3q? zi@o*vmw&h&2& zM=3P$mln1~8J3PU^g4Gk3jt#59Y3}8Zakcj*|{buI_JZjV$sR+LU*ra}!BO3S72U85z!0kZ=6ue>ocDk3I%+aW_`-hNgX*Z14uN0Fn& zw25e0aq8%9<>5Me;(1g9GKPZF7LUU;!%Z!TUbd!@av=r=%4FOnWtYLe-rDrR?bE{Y z82}iopQ(aP*;|@v3V{&t0i@!rnNFnke7LQBWl?QX-Y~*U%(^qR#J^%N94t!d7Mo|;3qI$wN+t>F!`*dP2UPwPjb_D@ z+{IIQCBR3=Ibu$(V14N9qD@f>6#%|NfT+{q>rqUgegVP^X$sDJ1ZPMSB+T5DUVLBH zOWK*%wKm*JLCXS9KcIh}d_H?@SAKzGt6%zajqDmT&J#I#N+xW6$#Gw5vpHQ!X+}qu zT3|zUlG9#-SVgErGH$8skZaa+XvN`1-tr-N2swzK)}Xd>_&#SHt@Vzz0y0K)-rg)S z{d8dwz(7k|P^)a8rLM~`D14I@s%dNum!{UVYb*7mbuXp-YYg6viLkZf7U@5K2z>J_KidcAw6ofpg8UmUL8y!5yH}Rwv|;f{ zn=k|wRWUOD?CQY40GC`X!g~=jTYKN+%>@@-xG}27TJQU5eL+P_>#t&RJAo35^rc>a zoMAOHa9Sw#{rxCl(MX~8uK)d`c9eFY3}S$YjWc(OND%d^;0GC0kSKfnW$H% zR-R)fBn>7D{?#s4Rkl41&^S3X2F(G+L6vjoTaj+EXjRZJbJ&)jgS{5x+1g+fjJ}{$ zD+e~Q-Iv{su2BLmZ&&@)j67YKzqc;8t+GJ|a4h@ze-#G8o^bgZB&(kQ8Es|5^-syX zj8EToJU1z-?}$ENvQN!@i??KN-7qfgX}n~EKgF#uui)S4vZY;Xq_8&2v?H# z@|Y^jE2*)arNodk2r;$82Dj9HZBL3x_7tp#zjxs>mciy*z6>s(`8B2H*7b z0*tkZQ&*e{t9PFoUF3wGo$ofU7G>zoOYAQRP~AH5((yN{N7r$8>$8?5#7Bqm?_nLA z*#x=~(?eF{BscJ&wVF9OQ*Il9))WxW&kJ?b&q#>;84&*}?^YZAUy)dU;E_wE584N$UHJD8N4NNtjA8 zR*q7w)}CO01zdz=j(*a*#O$nVeVSGTjB({>IfgbkDw_i;3-3rh=Hp3YPD%=3r+kGd zsQokh&wBGkWOQyr^mC5tD$KP)bBN)os$au@<9qc`?iWDQi5G@BmrlcVb6VH0!s#rJ zCXN!16^YBuhYoN{OEYUe?$gg+E?}J>mL5lvi64pqefCo>?7|wQ5Ntnle?N3+@XDYH zDN1p4th+MO5n@VSaZQq@yOq=|;%>ftdC;n*eQe5VRX81?05F;o;RqHvV82m=#~0(Fykb;6AG3@z9$8wYbmG5*fF0csK8zQN#`OD1bB$-YAp<2JKHs zbGw-VGN{DN?J=y9xPAN@n;X9L4!&}#jT}y(+&^eu662>+m}6@-m#aoqbr5ePfD~;1 zkGdPAwB&Ifr{ehj=bfSoYM&+l+IMPV$XW^Gs2FtJ zV$n~oSCq5xr{*f`lqc$($_g^g_VtXs4xM0ha(IA9Ml^;S5ifBXfa&7ZARU>(^$XUY z>a(Mc8YUy>^y4hIZ5HkC2}CwTA?6wZ-w>R>=`FZ;3)XB_zU%1>o8WdD_ndtgirg{; z@j@jtJB`4YE1+{C1j~ic*uPNBlIhZR;QE(-w zUGb1}#B(qFcfOzqpcQ1>myy%nwzqm1aH1RXXa44qfO-q5_$0GXrur}>jsh$ zZwjiFyV0xu4N0SR^Y)9Da_J$*G=!ysa%7U5(YBYGkyF9D%-iGGm_v%^t>9>@YIo^{ zoTr-TP-}0Jh#BKLJtd#1BDhkM&bdDa+mGxVT0LDw_>7T)gc#2#j~;=H!<=bShr^I@ z8Gfc1?v)^KOtWmDZLEP**e{)_bGAmdJv}l-ap5yKO)onT2QKJ{B$vG}ADf2Vile^6sQ{+!- zIYrVJ930mDa3dt>b2!xw!QJ-1I<5|q(ov9c+vB%t^G?~Ygc8L2NsC3kXY|I~pl=tx zhd9Ypz$!3-ogPmV3<`#`2&zheQRFrZn#t1tnRSn2Y{uuE&8PC8x1*OvUd%Z_)baRj zgKf~mf(I;xD)`nu*Vk(tr)=-vrT^k8cNF8_s-9%{t~@5B7^!J&bvpYruuxjCP?`fj zHq@hTUKp}$bdur}(H}nA-qb`}{m^$9QxFjWSMKW_F5Y}i9zOqo+}v;FB1drftkhOm_b8`xE< zy0ITIq`nSd6cC1#dw>Ypi;G8Mg~@Qca|V;zpw1X?Qgq{S#=Qtm#5v8~xxFu~xRP-f z3&QkQ-?$$TW?>AZz@64ZN=*T|Wdv&M@t%>k^G`s~w!4xE^pk@2EAQ_ix_q^xe%meC z!hQ{egsDO3nce-Xej$^F(jAd-D}gpI_pZzr;G8l^ub{|2o)V5EmiMlq(-*}d8+|`T z`TfWJdLK2`n6pQYN&OMfd>R@}Q^K{&hh?!2uk37(O&u;S$3CCUKOS$KY=J zK#Wj!I#(695851yGG5K=vZPidthlY{w^*Hn$~^_#;=eanO&bO}hh%<%PVK`$w0@|% z`SaHIsx{=Z;^M8Vl~W0>C&fFn74hIsTaL(!;hikTY5DD1?a=M$tcY&@^%Ho06HbjvG;9=Cy6L?6j8BV&Nao|)y-^6a9GzcuasE7X(S4a`6G3> zgXTh+qm3}<&s!}DxcP6|_IB-hsWlg@Gy^P#)}dixXFx_aVZHE|yJNSwyoX?cwW zBE+ZGHNp60EjZaqlENcsl?wJop=81a;d$0Y<%^8}Q23L!wkuqV>-g&FX?Ur`OYTA^ zCP#Gx3YX?I(~{?Z01vkR3R|Jdx|--hks)Fe!*Vw)Q32WjTpRqE7{&4uSO2jjYRAah za6x>WWBR8P_&o>0HV%=uvb(H)Cx*1A%l1^dNz14Zc3$gDofZ!%ND3$~hNe+6lWw4H61Td{tv?8GysV?qK~S8b^%ZQ{{ZC9Sr4z`@_eNzfbBt2vpdmwe3CO;ip{=x+ zL`pe3f6^Fq&R$I~Sv3RaOf9|+(SM0Mu~F6UFibqbc#f+(jhqjOmef@lAkKw%xb(gv zIUWxn%N~&x*tz{(HkFn7<}XaN7=d$3zLuEb+x*)8qh1FZL>_H8V>JETZOZfbbxUGd zI{?Xj*jsi#x5}`igWW{f5jp!=f;G9S8T`JWsofqteodSg6n0|JDc5{qN`u{!q#xc=8%|w~ z>qwWbQ7axws(N79)PMkSX(mG7kw>58Vge3k8WR8aPxeW&PU2XyO_d7djU|BekeR_4 zdZ7Iy;?^5P%?D)vD@TcB5HsO#;d@(Gp-DiQf;p&*XLp=6ARd;g(-X-d?sBPlk3H=@ zM%8I*%zV{=DS$&K(g4UJegGC&R{?+@a*41Sa-CiufZ}J8ta{N@y{%ShJ91GwI`c$| z^;KPfCl^*YW5)j%$cztAQKDoMnThZdbXZ%ds;Zk0l4!V*n5;HhvM^K=AA{8$?A3Tp zLpMtj6mM!=&3cdlt3UW?vDhbxlN7_o((v4-b+4llRRoa$!Wq3h#6u*YNq!c+dvmx4ADpu8&MSnQZTGmExr-ZeoRT9Ckz# zmzIa+aXyrC)1A^kg|P`i48JilY6>|uWD0g%`B~)NNV=*@4^!>*4MB6Aq^#^z$Vmo+ z?H=vcih=GNePr`u1GWfln~zY}NtTj4ZUB%(R^hG{n+CX&iI>UH4dU{cliTBiC55U- zRWP`cQB{KV9l#Y(6U@)=pFzFL*O<;8(JE#q>jWWf`6`xP?jrXa{C}@&Hre90{M5PB zMoQ*tHU*N&NOR53bYeMd+9!bDs#8^hd<$nIm{-Ku* zT5w*OKk1h&8Q|z5E~9q$K4<vy6n;=MzmvQJ$Z*9(+UT)I`3sAq{B4 z6*C94w2Vh3a3_vqKRKKNpuwK*%XPAvo%k8}>tj^l^6nkW6C$Q0cb@nf#GmOcd9CRd zpCH1A*~C;LoMgOkZ!wPckhfTE<6L8rR!HQgYtC$VZi`>OgSr+0BzX~Lc|CxQq^ihc zbmXzjUf5$$O<**Vmn;9D?s|L|WCL|zyubfQ#z+CKb(+VUc5B(P$@hzxFxZ6T#MFn51_#s^d81&>RcG zelrNV&0NGJju=&?>^pZPiVYK&Cm%=CbD_NRitF=VOj}_bZxiij_8V_PQMQdA-(S@Q^ktgBH>*@WmG#hh9HR zt`J-%y&KwL7}DLUd+#L*ULT}m&T~F{ac{lL4ocZynvBgfR9=Z(fgeWODcKyv8mpE* zG<^yL6FA@K;Pci(R{>?wJnTpre6WsYdv=$xm+jz)(UuA-UG{_-VfDmoj1iz^$WErZ z^9JwZO?7o+hZrIjiZ@eAvt4OY(Yc;$%pYMXP*QxX?V;w1?(`97GuMM(E`5p2Q#vSf za&f0;8*2JR95WO3Nvyt5I^hE5A9$z3f(OBeyZ1)*y){oWkRb9pM8s^~P;UD^@J6mW z+&#XronXXtE_VBPF^Ru(40}CJn_MiQRH-GDuAZeC3B`qRcA_!9q$U@P+&0>Ck->bW z6QY!h;n_CFCvVzfN=X{`N%)}myU)05vEWT6T`5ko5&c0LHB>L+N3+n9oQ*wZ5MH>n z*GsJGwbC8EUJ5t-E{{38F50$hm`ECUvH4iSGu<$U|7q5X`M;{@hrBqe~ zMZ*GhI=7Zv&@zpX!8HE0!o)W-Af3b|^jpP!f>xh|{hG}_u|Ey%Gab-B zPQoS5^S}L5ehc>s?o?CqE@0?^_Xc|3Iml27u3cX4QQ3h@%%6S6@tF@}E*84&eMshq z=v#VUktc;1l@%md@2QqP4_Q64a-w-7fr|0M9Ox9D_zz!ADH^{?ZT>HR9cISxRR+au zL-y8}Z3F*Y<(OOeLl4F$x=CNza&XYdHD?2LS^YM9b5B*mR(uslZm)?6XHT?h!&FUE zQdxBit}ovk9W=Z05K6JIlcJ8U#?CVxPH|V#?9>)B(e05!>`bJ5z)N-u65Bqa4#y7< z^Z>`!!$Dxzc9s!V7s@6nVTkp{Fub9s1hQ)8pSK|}+y0}iDyM<%@}z+L6a(3Z6|`S& zdmCV#u&)iAhlUCk9xpf#M>$W3^(+L2N}YPfme*fNiuV*Yp5>IQDqS`_@j|vUhVj?$~&f(o8iFk==6A-Jsh{Q9F&zrk}y5LM=)3x{-KGEYg-+HADI(>OJwgeYUT zV5zSw2X1NIygP3OKJ(h(+}>o#26Yuqo_E%^m->l=QYvXW97B_vIP!TFpN2rr2Z7^5 zkDRz8e?8e}JrBmZ_-o4)F9!0<#MeP-6rr~+IB9c4%*#ee28nnpha#_I)N(`Cd%IB7 z6{bm~tymPMtHxf*4D7fHo&+J!RvC(hd==OG{?5l~7jL`FS`I<98nZaf^U~b5X3iJD zs;?Ly4ECOhC@L&v8=c$VWy&x%!o7ms8X2VLg=t3z&UjD*sEE0jHeVUrzS_Ol+AlIf zb?=18lyuq@O+ie6st^c|1X7q+rH91lRFgWTZ>}B)>Nj{;r1FRKLYjsB_<@CPL8(t) zWSRUOH9Dm8Fpk}F)+eN4H^8!atd2y{T_lrKZOj_mmA8PBGtvtF?z$|Uc1BJE#rqwH8n(ay5-9ELj7UK!nDUk6C?Ry0an1ItbtA}JpWGYtUZAGe1 zC0A>)l7{UpUzf-`!nTaLGAXblpL3=yaoxI#8v-gxNp`qR??D2xkXPlx ziXo@@MAKrrCX8b9`+-4$Qib3cpR4w|@YUu1JQru>$lVLP8igfe)fDtO94O5sRHM2y z^DzXfo>w0qrn}xti}?u^SZs#tXEd1#=+|&|yWaX^d?Q2t3SAw#_Uo<>!D>jS05HSW z!~+`BvB38CWy=w}UsxZc-)o9&u!rY18?!qfIBz^o?IF1q-hVngZr8yRR|S&^;KPO% zS;rTDYt#S38z)}m+>{}bNo|wS$eJe48@;UD1cmSJt4VM1!j=?FhfibVm{GyyCPo4b z(H46fV7wxTjraZQY2M}ZMDd`h>-+h3&66&Oz19Z+Aq`gVkcdK;o|V?`nZ{q^kCeaX z07|`hOyf#of?+?#BuTTLcxqlY*yj;4{+FEv016u=DB^RiV<<^zm3h?S9{g1W3xFU} z^sEI^b8s(fXx~`m$QL<^&zU7;K4g!99v+LGqs$@wLEMO$4mTHUu=3h)gzX&lU4`|x z94TPHr(NQ=kh-tbEew#uu`^M7)sWBJ^io(XJt1OfECY}X>4A7^tl8~p$m!Ep+9y5t z88o1@lDs@U3{Fs4x`Innm&P?{T<+~dz=5z#G~KWB-0{US3vr4RaA~V4Vg6y{d5z%< zbkMX-Kc4coK53POoOdDDA7J?$`RrL0$F?mZSGWZmn6_UQ;HC=4XDfJ%wmx|X>D&(u zYRE1>f_~M5Chu9sy!>12g__D!2Ko3KUHd%I8E!@MygU;>JI`n?5I6m6q@JeIt&+jMyV&!hn0OoLb=sj3I%* zym#z#(rB@c)Of)&YNI6YGod{1E>x#&jYcTKD9G|4v1Xyy(4Tcjx_B3wW?@PZPYCev zFg_1gcg)H`m}A08>0hWHYzc1kaxR)_Q}z(yOUm#ow2AL1Z5BSq);S|JK`^&|Qd*Y}?C>np=M<>l_P zlOf-MBEP4h$A%YsHy@~~UdXv81E41u+I*FP9+Rn-Fxj&8Xxf4VJSb^RLYoDofTJBs zu`@lWY+YMs1k|Vui*-<8j(C9u8M$jpa-Ors5C&>u!7;SbVJkFeRoI}%u|dR_^e0_V zZa9QZH5^3-5?>Ws!59LAk&D=WA$bs-n^;yNI2(yO9rO)oY5Q8v|et7h!tlws=Bs3+q z-<9rcIko!Mxp0L3S@r2Y4Y3zLQ-}WFKUZUkDKF2DGKR@FIsXfj8 zIy~j1r3UU>Ej5I@$wro3B^@pB<#VwW4TRfG8T|EGqm&p{)3Ham&zk3X_boXyi0STk ztRGPi+n*7VkQ?Xdt}mxC`?Y@4{NVU3pl%18>(<*Hs*j@@1wazBsHM=-mo(ScLrMOX zF5^Gpd#at~Bvfg2NPPY;1EUV*)yRzX!|N#Pkf>3pwsHym%y5eTpGtcE!t66zX(bmVQf?N1&ajCmc!X;^ILi#AsbmCO2-FmmmqOBU5`E z_Mt#sajOLDPz*Mi^Ncbx1Q5iFA&i>SQ0VY8#~Y1DMie#`Ca;=R3=QM8n+)GURGSrF zBJo(Nd~Gf}ZB`C)eWy@!pURch$~_sYUUNUJ9YPm01{hz(GU)@49wj}2>)SN5TwG@! zL*gHm{z1u7v^oRm?Z4Dn(SvCBMv2sz8esp*iO#?<_1pIm9<~!rhe4z4^ZYGbL2}Yv z4lH=fR&aGEUjxoDQ0P2UVtB3ah2d$ryAymoSz_2Rk#pe)EeX#~Y=ep# zZ3UHSd2%%14RftK{JRDz<5=cmc1_=J_tImqGgt_$V)pkp@q%@2hrx=$sop znikul>bvp8a>JZeTyRMs`3D*J+qd9S{pXbT$|;BONdHSBrsE-#O@)AL3TCf6IV|CU zVNg)UM>WO=9!s&I$9*fsVb{~;Q9#$0^}JD@b^BZJX5i9_$Lkn4?qE5hfDIi9S10V# z``Pil5&lPN^6jZU+o35g0fb(_8; zOoal$R$=i4{o+N67v5T*<}41JA9Rm7#bqdrx=X~L3>5i(&lOs`VcVv~V*PO>NjKcu z_QLvdbUXoWp(E?y^UXcfpj_QXkz?wXPn;sSUTg93C%FXWDSy|$w~Kh@-4@(>?xr&b z{#X26Vjvz7`%9r-2h_y#+0*~~=dz0gaPvjjW{%;!ePGTNqt)=7Tj09YAOGY-juaxB z{H~{1_(n(&RPSqqQ*o0+gT?_>iXdqlMknXdfjhFgctd;D)@fn-xHOI}AKU;ap~U(W zj!zqwy+vkgfUYKcshB)+nXUiUBN?Uth}N^KL80R*s43ULoo(~WEcn`{Q}F!ER05~+ z%>Vx3xyjYMSeeV;5c{DGVp2v?kV{$PY2J&9I~r|wx1%lK9_Mgv!Adb{IeS;b0=5)5 zPls}g6s;x}zk$p0!5JV>`^+R+mb!Y1Hm^`h^vRcZNBXH!8nN8KVVcp+hj4o`{|m4b z7g@-TQ7s$EI<~7kE}q(TqTV*{88AKIoQ(eK#mHE;%5BxJ1k{SZ!=e8kYmJ3{{57Ik zo}-a3i~w|ZhjWGXA7%cI#S6WM&liL+Y{P^}5XplYDl_j)o^*&Ka>%ok z^KU1G>aTXM2B>)FYqGKue4iufgLhKn04y#sKU!8_fj8{nU<{fiY2YN%UUR$fjuZB19=y@*I2G{y#rwAbZrUxdzCejj2*;$i2mlGLMKT zvF_Gth_6BVyM41wmhKz@6vy0=+Kf-Qo7IK0a_G1JyW1hGeXt5XMC8h(Ja0G7kcu5zni%i{bEJHWU_DkVld_na&|ABZA3*s46=EdzhyY3ZZ@V3 zDknJt669kYOeY{>aBz1~SC#)Cc`?h-xL=SEV(SZwJ7xEZB|NM?aD~v*zOqd^+^ySb zvM?G^$GdS^1r(JzS2a0M>a6`+T$|hn-N$w*I z=`}2Kucp23utXYW)fe{F4es{X`C8WT%II^1ZL9_JUk~ocIKTXvN+M;`>RLiC=i}9s z(e4xXXLN%+s6%hIM{I(z-Cy&DlkGryYl4O8{n}VaE2`{fWduy`N^EB$*WWJCCD`gW)wSciSpk&F}wy9(s`Jev}dU zx@c(dMUG;)6Gyyb34E1ypaJltXy~n~fmLkwYGHyswwgJTpo-%FA7cEhX9n}`)>ar4*h8y;4x z^m|+w5M3ICKkrkR8C4C0495G^Dt#z}d-g~zP?@WKl2>ldP;evnCX^!{py0Magm+r* z@XeBW4}3Ix9;fI0_{t;wz;dRD-X08n=gKE&$t={Hlji1v3?N=dOt{BcGsk^351R>u=Y|At3 z>b3yL4-LoufHe>8a<}t!anvy)WKsesA28qup#t zvc7%|%oCrGS$l^3CFUHsr1e&~FFl=vjGRPmpJhM-UU&-9=XU=nn{-5&GrU_>Sn)rd z3V&%0&Nr-o*PA1&(2%2#wFj9zYbtkxZkTHgdqf<$v(HhbX%IY|f{LMRECP>0$35s_ zN%%*ev${=w{*#h_kNaEsZQji~#^1_NSlAbPMEhwv|7jWfT(4mIJa%flV*On9|Ng13 zz!v+DZTVEQD-JnJfATphtUfX?1H^5tGLAnDl{$E3O<@ueN=~R<8WZF_G`K$VNWh3(|HnX?EfDjJ4 z2lV7@vwLb8;zIYqP7Ma7HAj0tTBE?AGv9J&32ulPXE{= z7nxA^6>-WklO17+wdp4x+&b*5+;1n!FDvg9pBmH7^t^tbG_8mNKR6@%Tvf&6m&Y+3NRjPchc z->R8%nOzC(6i5-$S;3slEntYZy;LokDF zO|zXrC0m=9M*I4_B%88+5DpV06p1rI-DU!p-P3Qx<^Wq@}~Hi8^m=b{1|9W zzUV@_=+tw!+U`r?T7%Wf5?TkH3NnsR+{-I7ET4ZooE24u3us>0T|pK7Eu?$h{E+kj zhkuBTyd*R+-Y{0)mQE-P?RQ2V{L_9D^=Qa4rZKz8u_^}tfsPLZt|*o`LGadR?iY)M z568EdP0qUow$sVdW| zul*^&tJ(JF|Nh}3W{(M)t1)ov`cofu@4D?e{aPyDr`&*-t1D)4q@nG>jafP?)5l6) zAAfg#Q3^0BWx%+FfS|YC?z#+_1#zoYdf|RF@f{)z2Un|jV8u`RSG}YMpi+-d z8Ddzj{Fd&HI-?!8D&*Gy#!5-5c@tGgu_3LHxM)N>g4a|HiRkptV_*7`3Hl;ctnt1* z_p!`;T}}QnzF6GJ>W2Fs0^Whj-=rlLnkB!)Vh&%*bb%Z_ui23>P6=?@b)9-3Oh2(^ zMAQ|i=rPKl5j*>6!*Br$%T_4v6U)wPij&4q=tyX#<%Cmb8@E*TJWP(Ta{r_U4i_=f z4+wuQ6eV?Q(C|B*8&A{yR9qZ>2u9h!nlp^xE8?*1qqI|pZx`HbWX*zaQ2ijk{*F{N zzF}xo-uWPL{bLp?ZP>x^{X7WP$(~lH(yE*q;){nRdrr(lk8K+4D`|cZbLHmI%0aE8 zOpj}_Dl7NltJoV11XF}tlTWxU4`q=eHvro51uzSDiC-XL{LeA=Eb7LLJ>!5Re;Ia8*6X05(Tj$~8T-YFD77N=C}Pav8M%OyueVp{=UwR{^mnjR`bb^@ z-toHm0?zZVQE(oHusgUs^|8C~lJEmVTUd$=+k!y(xTRRQ)fp@;?!9cS7Mo`-HCcr+ z)gzR}cv1*%JF+c$dqNGQx^1(#W8n9Y6#s7TA+F9)aIJIUbit)7ivz7mner}wUH-_H zrHy(l{qG-rhuT0FNqaxjP5smrw`X;~j_!trYTBI!t;SjJ$UrRH@y|nU?=2LQZ{lwM zqz-((6!`ZioX~LINKl&jMd4$d3WKKfRi*dRxP|{|%YNYZ{B=Kj^_`yQs{UX49M4uR zirUc{iT%i+d~yWqS49Xhn6ds{MI;Oi*MQp!?*)BS(DZF4K@QghGDlmgAhABwqC4NL6zJ}+Nl&BSy594AvOB(w?Z zy##vV{OzwA>d$3r=;P9OtBP^qn{C4be}9}1D?7N|uFJ~vA4I>DdTA!e%v>C4@AEoh z{;+f4LQhT&lXBOxr*{Xc4ld=Q4l+9$Qnt11e&K}m%o+JtCCGjDHVhHbZ%>`-y^Dz= zqv_WV0eLSn%`Qbi4hJ4E=p+TfeSQ&Kq}Vs^x^=~7UsodK-}vRR>HuSOP+?1Ab4be* zVx_Uere8bZyEAEs`tayAJnv$kr**Acfwts#vFc~bR{H$F5K6&9OnFWMsF?g@G{wnpI{B8Pg z8f)iC0o}wsrkL#VQq~Gu#4sWLN-m@Y>xJ(^1|w^_+e5-+;MD{0P)tSvB zK{#*hNXyav;FrxVRAo8f-fW*!!DukpIFV$lAq4Y(;b4h|F^Ad}L)~@e*e%Qd$-Z=g z0iQQv#6R*8pxu?)?GH*)!v z2TPa;>T40(4!23`lHpL4rIF9hV)~f{vDz&Aqt>(IrF35^neNHqnHaRwsU1!7ry1^C zN*wG3`4-aeeRTT?v6`!RgzJyEgD>?4)wrj3dqsyc{`XIOS+z2s+I$k}YhbQYxCeZ7 z(0V#-%jWq!bkis2rb+WDmdia5oGI(DM+<5{s2R>6C19JN6bNKC%=~5%nF!jBJ=?J z-(&@wye}H$C`P_!#O_DV3EbVE3gSdGto6O0&@D~u{XVIG9ex){yGbDN2kH!q zhThN19_ASEYW~G;duUE}E0118e+tp-<#_)8CtoYG^S^(JfzR+Y`ui{jruKS({uMgG z)gOF}<)J0X7xEt?DlmI32-Ch=`3w^^XlX(cwr|UufH8S1XOH}_Zk*sT=zQPmuQ&-B zQdE8c(Pd$*%9tEk1XltsuGiG&S96n1AO;Wr@1IF0HHE!hPib3EY|VHZ zP*v?a&e^#|wRQE9dxE6$g*rHu{P zkKSOaeB{dS6i?Ik#yMS*)z!G41H_|tBe^SDO}}dJ{MW?|ew%L5zw9eYi=+O%xUIh4 zYS8BfXB0#t&&5&?B%4lI2;B!2k_@$Pm*HP{+GiSedOh&He*N%3LCogqMf;kV#i701 z>w?VfW@LoXlw|n#Ck%ql_80IX(DY1JIlK88T(76k;M}NQEFvULJARJ^e|8os^`) zoH%eE(pv_oR=;p(pIspCYUtO&e4?v^IP{?re|0X8%y|^&<+z9trTiW0e~9;{rg*e7 zuxycG(cx@J?Z8qmPxZGJ!7^*SYs9It_X_Yr$r4@{0dS~$p#{aK`MX)rnmfK@wW?h_ z7_U~B*ZB9W#CrvZG|k2lv6kCEl%2VO14ZUsNiti;ewSbl8eDbl?wKl6SiD$xm2sm7 z=Udn3bU%IubNP+D6*{Kdz$gk0B_(8HAz;(Z$SlK^6!cAK>OQ1<9QjND-q+Sni}$~O za_dwBC(}jC6H4KGhSWis97psmuaK7k4$S~_qS2!E zA2>rZqGv`icLSNh|E!nHfgrkF^+b%APv;OEgJHz%-R&vBP}!yI^0q%J4?H1WoJXOu zFW;BY%EXKw(WC<8;U1$U4$|nn`0qKHDn4!(<2Q%IoX3c(KF!~rpR$lTNw7w?u6Q4^ zll&8jotW8g7K3b0_&)%kKwrNlu`gjHP}=4Orx^?h=!u;~LnEjnaB5z~sD}*DHOXq3 z8d!)Uflh^4WoSw{8p=dsQz*o!R!#>FTA^VD?uWS?kToKjgoa1l{{VyqI)T$$PP!XX zpwOSu{{W*jsE3aDwAPqkw0Xlko!VO z)Qp8~1ePe)B!uX1AyZ+(e}*y6Ac1*Li^Iah@UeAM*qR9KEND^Csi*W54YkPMWWgko zNQ99j3dwXhO2-h7*qL%nvWMdcQCTlrZ?R%9tM(>szXap0z>m^aku$5n(DufOLS#4* zYYU_(#TR3K3qo9oZ8veHD%kE1=-Ka~EuQA`BcZ@uC1C_q+TkI1y9jIrRMG|*KZX)j zNO`h299ZjuoFGB*E%I`gz>=R4d=(Mi%Tv)Mq-hsug2J85m@2yA}#{`YNjhvjC@In$A z#x}Xu4d8}?Jhv23;6tJkaD+sVK-Z}xljE`sNYC6h6Vg2bCnY|FM$6Gh5gvp!V@qce zfVQrX(`lk~F-qi0s_BX}sb0oMAaWI?G^^Q*k^}Q?XhYpCq6vsy+ z-$ay~@<6J@)N4!oB_y38q3YbEv{-m?^mcFkpsMVC2P7a?k|H$M0;8Zs6lHQXpZZAL znxfbCAt^F=XKopYn#u)>@e+r6JyBr8yYwkkl6@dfpR(#oH77`r%_5@UOtTi&!$D9% zT2ew5Q?Y#*v&9fIk)TSEr9|L}PKnsixadKNJq-}+Xo-(27eXz{6s05C{fz*oO&Fze zOmjAby@Y&@+e2uxTM4Z~X5W_(Q1_H5h7Hd>3g+02Dq1%g1I~z+grJy9rV%F9jr4*O z&IZMZ^81(`c{#%K=PMqwB_so5Ljprbp#%`o1Yr**ssztVk$*51Ag3Nj!$Ty#fqj#;g5fIH$O+O?#4$Jl=<*aU|%0wNR(KgVA zTYD#INN0Csnqi492&qUxssb`sJ(6b3W~YGLH{k0uh&G^}R6KJmRTazcp&SOC<|0HX z8;P;xg94~oX?zVurvjdR!^4J>C2q#XPv!?Lu8mTD8%}4V*C`n)e7i3bUZuCrhboR& z^dgu_Kjh?wl8y*T%6uWrK`gXJ#NPCO!CmeB33^Fn{1hatgvi~uOp=T)M6P*W#wj-< z4N;5uC2VoB$rKBPR;X&f0f~g`1w;qL1Xgs|l0-pvaP1Jb*+A09kdj!V4s?eXMzvG$pa9MN8rc&h@TbV$;h$CgdgN$-9E9!NDzafMv$G^VFssTejyEgQuH?41`(N5E!Ap98jq53KINe;gc6+BLPBPH zd~u6;xF~8w%7nHe2$!+bv3v;}Acbs!LWSEmG(7Fk1$O*&Y&77n#nB=ZiV-cviAeZk zN;S7j2(Fq#pwu@3YJbZdwQxFAC8EVFRH1WD!}Jiu=(1H)bKqBXf>4R<-PIH!L-Zz$ zi|HqE4oEPXiO{4#$bnSWr#^5m8a6)QU5w&^529M4E1;pJ6cPI<-vqK;A9gJSjl`yV z9RfL}ye+aQq!9`Z2@!TdF@6Q1E1Q$#lW&0pKjdiS%l1OH{{YcRtrOrXKK}qAS+6IK zJb3W=h2hD`7vizbetG=IUHG(qO9=BJAY7ivhJd~Ln=S+Y!ua_s^m&YslTp zsT!rCsBfXUAWF>IrhnlLad=E6+qC;~C{{TEFgnTGu@U}4<@eWj|8;L@QlZZ&kv7yRivc@GGC*Zn;mNH|J z8nF|*L6(B=_akvj$@H)nBZQA@Ly zp8@W3mES{$=(lsB+SCq!Du9E8iJ1oivRXrgrwnk1eQcB7Al*5_{C-7xSN#!5+p(Hf zlP!!#zal$p;wZ27h;a5{@FMh<8tp%HM&x7TBY zrreKqb|QKQV3{Pw&}F8_LpA>ZLuBjhLCaD56a`2sDUOph1=QvCPuIwVEtF-EMMI}Q zz!_Jvy=e(BRwP9MSF}^T367ENt_AMga+{VApsDOh#J!1CHvJN5@({N5n~OW218ar0 zhHPAM$mHIPOp6kcGz(UQyGT5eAVST^N;XL$c~TmniDgfrbEF}o9lL?@JW!^Dha8$@ zrur^eR>G%*NRTojn6Y6M=z$?n-3c(;W4ERI9ded-F*ZuhS#A3!&jD=OIr2)MgYcZO zcx%sv{Cws-V=?8g;+$!XuMyCSd3}Ph`XUl0U!qzXy0Im)IEoI!1`9|MjkzJG2u;a0 zS1TKU){4_*mtV;S+*g8Hs_H~ZTkJ0(Y~;G6Qc@^FQtWo(zeK2?ho*jE8ymps7Vc$} z%3dIU+>9WYndqURyThto4!NDSS{g|s6?RPnt_KxGro{P4dljr)nehp!<&b+DpPdfJ zC)ebYN+3)16s_@WL{YJ$4wOicg~Ot5QkIc0K1Z^Mud?*gV?;GuAlAadAvP|?s5Yk)`8=o`gVefit0difu%fC~~l!4XF-#9BCHEN+q%+R?+ZPYm(XGc1Y|tSP)3P z$j)06R*1dO#UgzVc-PzsA)`rROG*#WhWA!C%Q__9P>c zF$W*Yyg1Ka!~W)RymN}j1Y!8`{4k(?h9ot|LQaMn!dqfpSU^Ne-3qckvg*}~seKUo z7ShEBA4M4*TNP75jHXLe$f*s>7MQSVB&1^N{hLBvGHtYo%D1-I zp1&~mdla6>7&(~3iE!<9Bb?*xU6oa$ZoQ5^93UY$5|XS^H}LjwqTb+Z`6PDn&5%;0 zH;7socUJ?8vxY|wN1|i|zh=}88aPsNRd#5boLo zxyZ(usU(!y6-Z%~oY1txWXqMo4hn`LRya=*hF2=1IvQX}61bn>Ue}>hP&gz?!r!1W z5X%^g;CfAB!Qu!cNP^4DHE#b=)=@Q>j4esD&9`8*@wHIFZUP~ z`Dc%thXX{bZJ`R9{Pa3Wq}y(W;mr@&k@C&*KPf&NL~W<~9gvFWGRW+VI2hW6-3g!y zQZ{N-3X@Nm8Ke_rM%2dK(B_7x?8gbUWBvf4wXv}O01_$eOO}(}38HV9;AAhhkoy7X z1!#@PW7MvN4T?~cNtU>vt6MBj8fdmY`-rF^WU}iDq1YNlu_BkCG*k^&QN4h&;aU)q z14ae1wEGmAI}+OG4aWpfw?kc(h>C{B`vkYc&{f*dW$&pgGkqHn9WO)LqS>wxX9Tfm zVkyw6fq~c+w8VsZ3V5{1?0YXWMFV7wh*2^vHlTu22=}DQBtgY7O446T2ve4Khi3mo`IhrBGmC*wXT2-xpLPmLOa=FfwsKSHWNB0bR$ z@G3{>h(-;PWRgkS(8Q;~u-K=f6KS-%Hz zi)Nu*wnzsrp^>G|$&ll0F=tX9ja?Bjr_niBWwj}#Iw`4Kzxo{%6Xy9p7$Gat_E}GF zX2XgxKUI};^k-A;*y?G+)AT4boJ28xXQ1n!kfdEi{)9aszxoolUyekqzMK;* zGCJ>aI4Kz=IGQ~&J* z(<~{1%efu$4G?H|92%!b7=D~~ExP4d6MLijhKHRJ%fBW(aw*G2=jqSzeDnA-=Z6^h zXk*71vG^|rP_-0oonU%|g@kmGDUr#`8HzrOktQl|*z--!?4puk4^!xCn>C6hz-px) zNU(+Z8@pmH$mvf4G$b11PKKeW-?N0rJ2oRK^fYzp@9Ger@G%Che#UDN6h@9{lpXpm zxp%FOVG369?USKZdw&-WVgw7Ea7>j77y%d`Sp;CUB?2H z-XXBTCgGA%7F97s$lqcS(`fYsW4ENLq3M+k(GR9%J$$QvXH3gQC5)9M=D}xOY}DAl({rgp|G4$sI*w;Ea+;f zR>pH8B~!m+Rs3(}KI6YF7v%hT@RMT9crhGhkwfxio*hB$Xv-x1rjC=A@$vT!^l}0z#di2g*`N{Rm2O)$m+5Qa7ONM?yJ< zAi>o$%nmb>Q$n}}!7*r(y%5&dvdndnQYFY*fjcV{Vl0$avC;iJEL>E<_xN zSq6re1B(f?#uCReIQ4+`>wrI*JrdN|s9uU4gf>iEnv_36lfUl4n^4Z zh?ct0oTV!8NKdVgaT(G!M!v!r;Ne~#AK+P&eh9eB#_+MvkD;7ngPnLrH;z2`Bl%Ms zWD>NZbjn~FSVv~fVd7;DbZA9<%ph#T*3#L6lXH+oo{)}QGG!vj@cXzEcX_BJA$ktx|!4K*T7 z=tQq%2#GT?Z>lDeG#!m(xoniZ5v20LTD}A)LcP5iN1O-vqVIZg`Wrd)N zK(YwJceXcC$s*B~7HC6c8-B_*Ph;>1G{)tWy%*y4h`vtXLU#WEMI&dmjw`N6fgAjZ zztAM&4?>q3JsTS2U7LX-Lbf7bkmTW#r@)q0Xh%7Z6n(?~E^#Fs{{SL4;I>6#FqK5# z3C<+wU09+x!h=r88W@EXNGLrMaJKJ6P5UddB?%VNeP6wxg%#oC0pL&Mt1 zQ+FehA0rXEVwtHMO_$JgRSq~VHfzwB*T8$SdzOeHzwsJ|O&st$DTnw&MyC1pkb588&d77I%G>_M$zLrT$=qq^ShxQGB1Kvx&c{uQNVtd}#Q8#E#kT@Z zM&Bl@dLk!A#ma1M-$6HIDae6(vur*F5RQ_GSSVj^2SmyQO_qxm-H5S`;=2{9oDRCk zMwqHbXEI2u*hSSu3gHPt;fk!*`YvN!2$qCx8I=D3k$WOt5KS)*TBcaETpB`Ok(^$J zmdkQ9b3``SPdtAM z{#pJ$ePTv3#^OkZF2XJi6NO7bwG!M3N}5Ry4674v&ZH2(s8*?P@iV=c&9%`m>FDJ+ zVT^BMxW>oDHuxv5A`=ZuV$h3$+VWt2h-2)u}9bXhQV7Ci}>+Y}}d9FbjxU!igtM1>z3Ea8>VxkV1*!r#G3I!(UD8Qy}d zIj%h%M;^v?G^PEVMH&}mP@D#-N^EsxJ3sJgB7Z_IVtH^OEX6^<=ynpDVhVQ1(h}9! zN1licGICHakrEBU70DpOJWNVr}-NdOJpkaqkQ=sNi7knbI96LLK4~} zHBN-2iyS5@WZ@2T$~JtPG1S~~7L0^U(a1VFWl3Srz_(-G&P7b6vLh+3O))IolyFQs z6t^YJ+9Dhucqo@*N)nU|zJ^oHjVc_#_)5mek`tCYd(r(6rlYe%nZ1+w5d}oH5?Mds zTgL}JF^8UW#vkx;{IAcFOB04P*o8w?jb*=x{Emc*lEk5wg0f6Wu@k#Vq$Dke00`*U zd9c#ofuP!Y64Y;j8QdgE55J)qi9Kv_ziA301gd4ju@Us5NSgLD=5S>pB`u6m{LXQ*T_MyL1lhNtZP3z- zP(~wffvy0W_9C0`2_dD5nw~`k@TKh9BsQ56hw;f+P5~y+^!%F(^@xCq4H5dD{)F(` z>@!QXxD=-f9beFQZT{}CVnl9R^BADF57@ug}gMt45Ks>EYjV$fJ(Hf&{P}4(^ zv<4i}xyXd0G~kn@a@@1HKt{imIngdiuM#Fj4GExcv7~_*5ZWVxNJ_b}n0$%bG&4ll z#M4}%)1jfx&v_4|O?9EV93tSHxO7VGCFnX05H9dLPcF@w2)%GdhaHIn+eXA<(IhG= zcA3Bb02d$4v7hD_zvEsUW%x<|!~iA`0RRF50s;a900RL5000000RRypF+ovbaeabZl>37e)q9BM z`h`xe2Fwum%n6+ziNM8siAXLcu(G(CFt_Fle{q0v@duOJdz7Y^xcBdvU{Jx-#60s5 z8LCT|2t5}XS_yZ#n&ZsUvR9b9Lx&d?Rl9nN#ZljgjalYtT?Asb57bT$d`3TnwTaA0 zR=;pf!QP%LWug?LIG;rf@q`!G;j?g7@^)YK`tjbE#jF!}K* zXxGb$ z`P@OE5awd_#8U}z$wD1PHE$#Z29U%~)X<7Dl~oNISwU{K7L1MSJiw&O;emU9xU|uh zJ#~ymoS5nk-=rZ*b6cAvP($dA;yq=y))|}%q$QFUS-3uoyRE@-#I3?4LegG{du0d& zdxKO9!8gV7brjOxW!4cB1TDuA2?~MuPOWRGd0?;`VGDnAbC%)`4tk9N zUr+$!jphM(KG{^Js<$3&-Y#i$)~+DiubA49Hx`oXGp6gAO%a1zR4-vQ=zgk!>m53({1LU&w>TzFeo7#7g!xEZly5V=__bVS@QnD7H;i0ocR zABZ+s3r!>?F9OE@01#M5Y)zUU6FxiUG{yWz^=p}V+CxQknQG1c<(hHSF-C4tZHhiK z%;z^mDNZAV$M}k5uy7Q28g)fZNFvIasc=ag5 zlU+gE+!_$oYE;Gu;O5;x6|_rr^*J+L?pjkTn(-?`FkEMmVW+skEB7oH+_7jMnO0wz zAg{O=d8+1CI}wk8roAjd0@;UL!zMEj2M{9_7Z_WWIKR1GjQNOBQ+&l)=bFrXuDncl z{hBR4;rUL7+-sL)ETX~%s=OJCWJ}dVX58^H<_UFi>=W}GhYip`$yk7=OVl#gdFBEV zuBSj>m@193DPS=!yEb!)obkSqv^nZu*(+R2+M=RTZK%wOaZr*X%=ZC63yq43t|x{i zF?8FX5%5tf!3$vcK4VG;6IrT1aml7#6+FAeSwcj#y}5cMi??h%T^drNpSHsA(U}G~Y7_ zsteQ#qUBiUiRgt{X~HlTVxQtWSxdWz%l*NSg4Y+~3t=lz+CnI|zj26YB@o0BN1#7b!KhB2dwHG(xM2mVwS7 zh8H|~fEM3VOT2zaLm>@SS2~o5rl%m!65w**#1Ds2zJCPO1AmCIMxa~c#PR3uT8Hu! zzRhP-GuEXcxk}<@UopoH`Hq}2o$JKFD;-?5oKFvlpOKkLRN`?hsE2>OL0GJJ0bD#1 zkAzaYF&5WxF%Dh8DX1-3n=S|qG|bv(G3!29XJ>OaA8=LfP_8ZWC{3Hh8yx+{|Q7ZV3QJ)JQ4$>xMQaLiKX~by2g*}Wq+B>*H@ff@o z%2{gO;A+gdhWQT>-WsmrVw?HIuFB5iD8*Lb4l5^7!1%eGlpf&XY!+7K;I5QqL9o|w zuvw_gEuGv2%KreliolfNPb3Dq;^WvSA5z6a4$o|NBl1C#m6)0;w-8IbbK)zsynZD- z+cH~s+{CJ?#0pmst!fT9Hz+c1KM)hc_b~3pCh6QB9L}-KT-Y8+V!i#q4c=m&f<$})C?Lmm^9>gVYNYs$niZUSL$@uB9k_A)2x_ z=}_KWN^NWAULWL9bjK5$2sK>A7~ffsB`N;^b1k#2!064wr+(*`%+mwZS|}-n_qZ26 zYZFV4Qlgw(1eXRi9_TMnRks&2!s)mIl-K=;y7QWen*pkqTFhLCmE6h8R9>zPW}Dsa z7)b3-6Yf6#O_ZKyjHwCV1hUP(7^)0Nk zJT3!nJ|Gz$Dk`DNm=wCJXDG=82rcdaQCXF$$cFeM(zHMYVBE)wrULPd+@KLPvU=dKnI+Z(f4uISFi&q0Gh{{Tpn^X60BqEHP~!#Hnq656pUb==LDL~D$rK)v{exgl0pU2zq;XEDagd-E$& znCg2sc!pVA%!9^QcFpyjOsK-9iI~+|b1O_XI(@~=93#Ui;~bEqcZ0;oSoeB@OU|It zPstkS@i)bN?of+(mOXbYq}_D{zdaKL;Dv>Te=@$A<}135Z2VKXW$Ly;Rr-R6I`f#c zj96=ZMh)&~Z4b<{^hWpJ40$nW=M#I6WMg|CiAHsJmHh*FThJD9~Q4@t~BC^=?7QJ6^Dg2q5aZqu#qwe9v7n-kfz`vMLq96+6 z#J`iouUF~`qO-;Ajf?$9XmbV6rKyIGe=v-SxDZ`m;s7!CFQvWpiA%riuWd|Syui3Q zbtztc;8>@`vy#ZlZu2n=@u=S>BVoVs1ef1)19!wgFCEKHx{F}TGclEbm*zO^*H9N+ zL_NBIW&sBHmaB2@E-6>IZ%e+;BLZA75pWb<1|YfdELxYv!M!lF)D=T~kOOP(3KoZ^ z0*4=P&>QAfRvVYp(X7PMijJnLsu_$7Uva8jR0jV5>VPRzGj&F_wa2xsT#gr*Pv0#m%VZ?%+TJ*;tK=LCr%6w!UX`2HsRh zXFu47lFp@+GIJISd-XD{tnmSn1WVn%tx>e?8G>q z@MZxl9l(}{i2hjUQs?m&svt3Z+;)eqAw@P2M7qZjs#iYZ7~&|_x!WurJwc5ri=0y_ zPTGo6Io@MqI_fmYYHfHwQGB?S^IYb7p#YEKCD-C6&QV~o&gHyQ=$st$2c3l5OX?&_ ztDVK%OMY>QkaOH!v#6lERs~jA_kRmJ{l7F_{bjn>Vsxrwr~nbba|YWnIH1%4w2D_LhTvR7ivrFWuX z{Z8Rv1y^#3=-fM2xBmdaOG@4DI;zwFe(q7cYsA91tw9FW3=u6`c0$=dQL1YE!bKVT zfr1RDdNB$b#6N9707j;2C>NgKDm#erUSNWE)C~xKBI}f8zd!C$&H1=F;nhtB z4j$(0i_RHNExp0ay;pDouTq?|F)-)cHjX%ew&Dp{uYJRzck4G5MZN|Ju`{}NE}3p= z*0_sBH>!#fuhB7#z9ADd*D*lYUg4zx_ZU@CV@wUeP+treWE|>eV6Lwbws?k1M9INK z4-RT0cZ-eJ`6e9dSOjVpkN|gxTq29U;93BBkAjDo5h+N0l#iGRR!G@Kyu?;4VIUac zby0PD;v#Yt#78>vP6EzbBhlXFqPNrqo6l2PsihoobGyY$Fa>&)Rubv0GUF#b%3HOW zuKu7XYnh2U;yz3mLC!B8pomi{3CHH;qG8_qmKq}D-tC4K{K4~BmA#MLF>g2C zh#SVbm!p0-i@}~8L5Od_^A-^hVDZjj6y@$1-kf8ZjeOli4RbLp%eY?;+_=T3F*G5V zsO#=F>=ouI9^h8-Elbv*-s8%`VS~Um61)gr)x^QrexQn}X8@LJ>6@0`Gu(LQ8M6L5 zgGzDC%;!?>mR{#)&1xd+=_3ANPl6@jDlDmKEQW`qAx8f0;mzi~(6H54V5ICX^uVPh9yWB-@nwmm4etp7qw;5p9 z=iCz7CF2o;gr|JsQH5fwy`Q4{M^3(0J88}e8QsbnKP|pm^XMDY6d6FJlfl+$(tRp z0~&5^yxg@+HOJh`HS=`>j(!4z5|FH70~flKrRsQ0b2&_R61PSoE*xv-7RZ;pu+%kJ z@ex&Wc!n(@8pCreLcV5!tZp|2!!P#kqCJwk@jocUzc3su~N33wVKC?%ffn)ubHh^1w>1 zN7M?9aSm7|yUZLct_;Nl<8kbXo>e#b@pAj7d6qeE+*0EVr+iAi1f=ySQkLMu&Nm+{ zqNb>#HwtkFHr_QIZR#b}X*<1wGx)qjK7EzMw6Api><=9u7JakyNlI%XZlb8&UfpxjG? zN8(-G_+h)>QH#CI7i8znaTA;}=}OJ%>J6>n)Eyayvzd16n>ooXqneI_^}Nf^gJ~M7 zDRX21qWECM z&k2@Tc+?uzd6c}l3G)SO+548_d`BHAs%m1J#nh~JIjF}o=3laS?qC&K z)C`qwiEOB>WR%A4zNHyzW4y|-tgjtRs(0c(t@SBGV;5*8V$sB*ZtJ*<3cn;{?%I2V z4VtQe4+lhY!&rl>H336!sbG`9lt6ft6?Z6XN82)3HPvn+{Cka+QT7DZCEuaj4S;NZ zqmeJW<|fH27>g{59L5R;wNOJCiraGnR$k}Lf~BzY6Au*&C8{6~m^RZN0=+`o;y5}p zxUPdPGagKaM0{{SFqqTFf~Xx?JfM8dpYLWc^Dryy`9#grUvr5kOr($waFzW|X6H&+?04p?qbiD2{2H3eh7 zqe{IIZplG+tw#!X6>Ie_uFL#GDTvveaRsGa#G=13?_TGbl?7vLlvfhab&@?epL=7L zW&v}-q8F?H_>IAr8O9(3e&Y_~ytwf!Hr&h34NrY}iPP#SD0~vts^`RW!~%Zc3tdeG z#lh_0l_P;UHT;P4aH^)UEXnGK(VWXT-pNh@+{j(bb*V}fXK_`Vf9=6fb2XYh!TzcZ z;jdDO1lF$QwBGoD8MbBh#x)psY%3O~u09;~Dx6?-P%J4;U6Oz?$C%X)c#7ATa2K`w zM@v+Bmnvr8E+#HqR4qlWAZ=mXd#Bh;+j;4fj*+r`Ga99<%%%h6BY&8V7V&tR=b1pI zzU3m?e3+@g=ZRiQ>R?u`C7U>wG)7Ry670EZgnnZ`W}?BwPz?BjCC(-ornCsQkBh{{ z{V2q-q8vb%t-vdTk1sqLmt6fVI zw{sSod`wQ#j&I+IRqkf$wFYras(94cHSrN!+~9esmzQw`{w9I1FwdUz%o9T970Zpv zwKwW3Z*DOMLVsn3`-qh0x_~)znBCqxd5X}4six{EjvAD?$#DzjJ~A6^sFGJQE?@v{ z^D##f+b+78j_vMdtCm#(eZ-q+)pZ{~#L2b|S>B~alU&SoFTP<_MLC6QX%^CF%v1hS zn(aCC-$bS1VbgC@nmWuu(0YRC${QPotY2iYb@`Z9T7M8}RnFsKam^^leaygAHd^_X zvlzd;LH_`>YsFLffkn~Xz$JNMORy`qPzzU&46T%HztcCjuMuw+?+wI!-%u@j^i0)w zh-hnxXyw@xqUC3}!}$ZI9|UgalHwknN1?sIQsBv!q`ylQ$9{_xibYnLV z3HnDWaCp>o&N1p)O`PUAW9A7<_96=YC9Jk<>MGKUESa}Dif~{!W>i?*w!7zvW=&=} zP@EauAQauhw1!y)Iff|TxoQgQ8O*NkuJtP~A51bzbi0+R&S)x7D!9TjG0^9pA|?BQ z6qPT`1+xc;8q4wA1!}5Y(~MNTJTs~jo5xVxHwz5P8mViXazn&XBL$yPXtJ?em2Yl$ zxPeU5!zgu8db;Z64GZdet<<5Xb9#(uynIS_)4+fQYL!Y!E*iu&jt_(0CM9u zm;^!JF_bN_qp4_9US>Cd_?7qE#2K$Tik1V2Hu0;419ug`%n;+44=LJKpNM56H3K8@ z64YX;+)?o`G|U1%wncZSK?8yJj$SDbr#0=C^39MP^RT& zIS%0OdeYXrl2$-IU|Bxl;~ZQQPs|p9eZp0BMD;fTWn4fJ)%OQ2z9p+xr{%b*^6sFBBiOCC+8BCyMQgV)x<$olKkr5 zs2WV>2z$&oHuagZWS#Q|(CVNJ{$@{51(302+)!FWtv}e5RrQ%xwtu;yyNQyDUE&>U zGnT$c>`Lxcg^KDIc!an1%cMSLCMuwmFLJmQeb(Y^Z;43b!w{_EHmiB~f;`>k4W0Rg z4J+KC$#5C1F#%@0M6fh>7K)~^GXS17>4>Ob+!z3%u{`RSVA%#ZszT zY767+s6@JT8pD5>oQ*Fr&=AM7xB`^Dg>e-r)TX`M+>PB49R{GKS9LKtT3^bpJxtUW zsIUj_AgYY4LENf`F1G-mNW&yZ8PE0gpwC)H)7)dx9!8iRM0_hWqMVJ6*LGJJc|G zIghoRMYpPmEQG03xX9NLt0PWfYSuhlJ=Jj#ZEvhWW0-ejSE~7xt_WMV?pPFO&gNpb z^$TU&%pv0UEO%a`!Cc0O3R=9ycondg)Npn=5!7L}H8ab4i}ajFh_%$W z$ke-Rj1)Fq#vb2^hZfAQ)u(Zg$u}9OFtLA0`-I;{5ri8TIjM*-7VA3y0LX>RJIHS0 z-Pgei4daIqF+&yO9^y|vVvHH6TU=&Tcq&vXXTj!c&BRO`T+L=leAmob{t;DUAGiwd zP!uTl>TG$G4ojEhsY%8@rDhN<)Y$8ZdecC^Ge1OI-T9Syc!GO4gjpMAxkAGq1fT`r za|>`^%otgz-taYuG%4=pWrh(a8<^vNxGPQbFxgHq5F9IoSlQw=4Nh$yCM}OJtFpUb zC}i@?0Ebn?#xfF=!#u*&wz*9WF;-eUBkEm;8!2?=q7@N$RbFB#v~;7EU|JTx60>VD zW(ekL{ll*=W$jc!Wsfkxe6rTvaVmN07TbSuk-U3}i(F$YyatZu1R|I*_Zv;(r!5>@ z*Hz*OLJ(z-G4eR`DNu{sD5JXE7zMn;FdSi>PgOdqI3n6c0YEBPUZ&Qc%((*AC5M6~ zrA*&4%?uexI~jaRCTkAhK4t{j`hjdK%*epFt`q)Azf}wkYAve?3aq5fw=onoXYOP# z;v9x8(U{iU6$Tv3EYTe9Rm0I7mGFYw91)6_;`)vbE2*32`G6wUPGRh?G2Ok-P7BP= zO0RKirV^=4T(QpMrm-wkN;ccnDup|V(`F!pkK7@8Ph7@}Hp;Ouvx#iu9n3ojv0UzF zqcIB}Np_soLAlgG!Ec#vTj7jd{{X3Zzlg0o&T6NYaveYM3LPVs9QcV$RsJEkFZEKR zPrbzk7>YNVq7dF|qT&^3-4j7;=H>tvO5{ag!?SR2CEVmI0LtoDehrZ}zDV}hb#lNB zI;h|&2!(NVam2QJm!Nm|3|+s7E#Ikk{OBM`VLbShBYke*LC^k7-BO~CMO0oe`iNbX zTd3Cu)B&=WyurLtxY)Lge8(0AUlQOe#-Uve#V>{-S^U9YeBvN6e-UDvxre*)Japz= zC7SONpk%w3iqOPnt61|Aw*LS-gOq+JL!T1UZupJHD{dMnBH}jj zDx2KV1KeI6_Dt~U#-Lt*?8x^szcFR%rd#7SMgSVc%L&2!f>yus1&XWp7_o@DP4>)% zxZTWGdFpLzm{o6Im<(R~W1@o&rK|jCFDaSA(%KM9Rd#Dt=x#nKB%y0hgU83nV2IWa=aLXf_S5V`YsE@Ztmg`q7PNl9I ztL9%?%wQm%o?r&?pKu#qF}Xm0)IilPSX+o#R;2)K46AecmYLtJL2@ufHA#=|= zo)4p`c`r2)Yjxa3tC?Wi_ZsW!0c-aL?=?_T_gusqKYNTDs4}&JH}<-Vn7`N|5rKH@ z#2PEyNO9^4+c}FeF^jpEl8$Cc7xxm-Z&N9e(JQxE*#w}a^~9pPsKSf*nSpeCLPS?- zn?j@n*ukg*gSnio>JrAN#d4mAQr83$?O>%=yNe@r)Kh6MJBnB=Y76cq&;lp}w~1zj z!giU7cEmY1=3fBmT@m`&;-@$zab3dD-u+EccL-Jcl&_f5tu@TF3cKZ%U1?AZDQmJE zsb>3_l~*%(AE}Y8rDCkJsaQqDVS;krztj$|#4Ojua=hFGH}!JS2XMUq0L;se#$tsJ zm?GFW3~4A*+1bn{!ucggk7Pw*@=N&V&ZfSHnOKj3mc?4e%!fIPcFCAsHItulODz#s zE5}mH%p5Batu=8|DV<^gRPF^Wl~BQF#KU2oR^nJYZzM|7<~`0YQ5_esi9>ITgO-F& zqB#Emh|@P4P3Le6oV`WMXNciMGb{F-S7` zf?34NxIQ1|6<3d2iGPE+NIw$?f>5wh>0R!kIkvua8?%_2uUKQj!wZ1IhlI8SxdHvx|-m^H4!qn6*|X z`I2tK*h6W0Vvd9BF@Owdv^?rm=LZlOAJzC?hSbOIQ1}=n5qDwsHVg4 zv05(f^>IVnh+@k4A`YvZv906c2GfK$$%~oQR%Y(z2PNlwi(^@yZahXaq;zaK>IZ8Z zFVbHzPNKsc=HgXZSZZ2bbD2iW9ZiDUx?;3z6C}KNhSkviql{(=p>t9_uZXdl^#a`U zHg?zC@P$S{Dn{B2{%0P%Pb;0rl`ZuwD*i4e?p#d?h*=GIhICWB#uYU9{y>)x)V=^+ zM;N`t2&{rKGnxtg#h5bsl)$rbgMe9(tB=h^Kc0RPIUwUxXi6z5LjCO05RSe zsEu<5s!A^f$1|L61p^nJqVhqu2tCn}N0MsDOI5I}Vn3N^pD`(xpBR@x$(T~Hms26C zsAVWc6=%nB87$QD2#ST6Azw1gyb#LU^X6b77fXn^ZY45fsY(@#VOKVOC0WC$;g=@_ zv1jT8bErAXLn|#}F+Vt#{dE<)M^EE1y3A?!aaVVEmwj$4p1O(!F1d}57ykedjVRHn zZE$L1He9zk&T$oYdz1`fDh%g{uCLFyT`kXY?Vq@2?NVf+k23{vE!-t8yM+esrUL%? zm^6H6QtG&2fEJNhSD0|UL8UtCF+jrgQvuTgxoErihk=4NH2e~>lA>%rV+R*4D!$`G zhB%1(maiGyw$2$-oE_9Mqw0At%mP_|$P)&oHFGKr%M%7+B+Ot^D7%=Vq-|=dfPQ?s z8XU^4e7(%{FA>T$xLpk$OVO`;jA`hw+#hn$8f&On;d+Lu?xsqh?O=xf32?TpxrL^| zh8;Ps<-uMH+!yB@OB&aTS+-T~=51>ynN+F?mW75NvBYdUy5Sfj-gtK?YaFWXI;6(Xz4V4gyZ+@kfSC1HtM}18T z&)1oRKoup58opsu^2?DH{5p-QobxML*OvHKQhR3qN4DJb@UQRBe3m-Z{-&hX|)9)@%t-)NRJVH zrrDH-wqS&Oc;#6xC^`HzE0*R|#fD|Fuq`Km`}zdB=68V4gf3^!{gpOFVi9lwf@XI# zQDcQ;a(vizY}Picd-BjWj`r@D+C5(?_R@&|LH7`^GIHW{4c+aYo+K%F2CC@k#+0g_-?@vHwvlw8)dhU) zoQ`C^EVlNMh^ZV_ts#`ncKN{p#&sBQ#1CwN_|;Wz++6F z3u))crl~8|i278a?pTF+xmU2o6{8X!4|fdUEG{yH{qh|&`vn%zFJa!dcRP&glb^ji z)@2hX7TJ0$B1Rs!FiQ$F82z|3qq$|bJpk8V2G``cG<-ospK|kkm#5PyQ|cf{{7MYge4|^E>3p8|{y;Ulyv?pQF3Z@y zESGl&;|LnohZX!s^+lZLF2RjO6QhO8S%i0K$L&J8ZdL} zT2ZBKLr&gKN;9QSAG8`|^uIBBPhvhy6QUaAWXH_l%pJlPm!19-A&ejKxeFN7aw1Ny zd1nnh4A-<(bBtDBjW66YqkjY|@emdNx*wM&j_iJBamc>b@suuUMuZRVQG8ZtwLzq3 zmu(X^O-q_Rw!gVYp(ERXVR=={Vc_2J1=ZAya9AtT@k2H1Ocu+LGvmHR*lIuUEBY6* z7_`br^KVYLGTONDu}-o$Vd;G`LU8mLsx%%>T}J;cW3}+bZUt$_Ca$!0=|rLQfw7Qs zGgg=|NKU#jBoPw&OTs~J`3rca3o|`}w2LR*2;73*l)vW>VrT%3V-0F+@Ji2|)X3^x z`)Hf(^&6q>w4t#@P0U2A`=cyLg6U1DJ8_l7tl^ zF;RVqhkE+!eC2`A>+80X?Ds@5ipK02vh|+-oj1C9*H1+~x#dE0Q0A67>(~9oZFjN^ zzMsow1slD#AgTGkdcRaNGe1M zB&m@Pkf9=2jS-25jJXSgZ`qhKdJt8C=i+tr`x2XJ&2C*Dl{DU{g7oBuxZnC!<) zjV`7wpQtxvXTHsLb~_~RB8Lxgd*BpW*+XgvXxlUYHPzUZ8sr;qgUv`tq=MHh%+Nt#zF95*VuP>spbA#a2VqfStTJW(VS zj{tk|f-g{v_^rejB^$Bc$YfV^k9^YmX6n}Z7ZQrMu0V|8vFRR{Ahj$exe()^jqezr6(LzZmO1gy03!f&WdA_l{_8LW7&bv zDtN24ao=4?4pqUt#+TMSl}w;;^f3}_Z8sJS#|Q=0<2Q@i2^AlkOn z^&(^L?!>Vo)X*C_>*}SFEZbSq_4SX9I7fEG(BwjB2CgjUIIQi9I7q`_VplRa_=^yV zNMGtPjFYVjyRlJ z9;+2PbMRHqYf_~I*p$&LlO<14@&e+5x~UN)w|96d+i;HdARAlb! z@~=}ck8HV4nYo6n7j!V4lRVzCyL~YlZS=L3z0vG&yqU{}V}pYeSv;V^^sCOCMOYM_ zGo}Fu`m>1T)T)jYyf!?-cLjM_=D4A-On~7FrK@MH>1*CgqBot)0_KC6OB;HBhvws4 z6{<2(0(qee+!#UnTAv%WUO5RZT^t*vAnQRR`73FWT3B~p6Y7@xt&ws~*a)iXF)c>% z&qt$UHwq%~FGqB|_fY`HXOf3f`%d-%(dSLo({~|!bON2!uadZ|A%X|-2zm293I8_L z?dw~Y7g5r}g4>oMZ)^G$@!H>}F5^DA@d>AvR}vu?dMCo-{X@&ZD%KT4T}iM2BILec z0AfOGX8%YHTm(}N#|<#!jLRWawaD_;RJMnKEY<)P-{@r3*B$G-6#q z9o|7^0+VAne~xgrHq2R<#BcEVGOch~5p*W@PZj2zQQ@M5kmp3Y^#HXq=44+c^-W{e zx|N?w9=h82T5E^-1KG2TSjeBe<<<@n>ID^==Hcqz$7C{_7g?*fF{fRMn6zsX72}2? zuAeZi*t)e!Ek1RdB((8yQ*By@WWwBt)YFYej30IptouX-aAI6pLr5Q>=^yrfX?Gp{ zBgHs__eUFI;P->*VF}CMl1ZAfU01v0s}CB3=IW$^1o>D8Ha-w_lgKem>w#{q#CZFYW{e4&a!fe^v`4Z*AbGG^kO^cUx5bl4 zrAPAh%Qf2UssIRH?WPU-^<}D1_&2m8K+MtCX;B_gRiSe^slHwgO`zN#ypdAHY}x%z zJU@WH@`!OaD>4Mjv`hf)qeSygR0I27pt`ye3Z6$X(x!a4@hK7;yTS1R%~X5DVx`lI zW77EpOLK(oVMA}U4$TT5ouvmK7@o`6@oHuqAYj(nS|-F1&h(~zwG+Z3O&0Z!oQL;5 zP`9&1a4+GM-&Y!0Ya#)?noN7SON*NmZ3JY;gXo;d_owKw+80%^KT?H@a2ofOk&nCP z#%R>;F?n!Cq=8Y|= zD7i74eYx}G1^Fy%45M)kpir2#Yx$3=LuAt^FlNQ@H!)efNkG}G;~}e0zcX2xk4y|= zg4go+pV|yu8Aq--7vb0WIB&lQFmB_RQv0K;SA2oxCi=BsWR_k?wh62L*ga*`CpbYX z&$2(I#i3G6bXV>XY_tZxY-<)y=g-@_mMWaV1Pu{caiubDr4Btnse59oza#qQeH^r{ zr)*qrErmEoWB?OqzJ`&6_-=Ue{^O7IP#^5PTXT%39@t zlW06H_TKFScdO*zP%h}=SBA@uc5~EgIx3gI)_VU3h?84=Fn8R9gZPA%{(QvYw2}x= z5LTy>t0Ymmu=Pc@VWb4C|8=L4TftOXic0)@CjDY%>=F*j$rF?g<6@0Zn@-`7u{PQu z`;|2$GgH{htt*+jkj0{4GNiJ5CUNwg(?jodly=LJRu|fXE}>L2S&0hCY{BJ-?eAJ) zkB{aWTZqh#TWD~d+xlOO_I9jyHd{GXZS#F<^E2K?FLx7CH>>k0=RveRueI?nC?X_I zjj$f*9op*Qep73-+_du?suxF~9&uFvqRASu8_hL&U%lh3%wTL5&g7)2Gq~SS--L57 zxOdYZ_O0H27C_`(IV$v&U>>n~4C;omv`yKhg3bz}D`p1k5^g(Sx?G9ejuT0sJ?XAZ zBk}j!Osz0&^Ygsiq35=NTcP&WUet2=hcO~`(=lNQeF=o10ZC&QiWb{Mv@H0buVm1} zFS8X3@{-X=_VrgMOTs`bK7| z&awN~SqvH6^oBE!f^9WbaJM_fYz$cNgFQbmoiNV1E1ckT`cIV|+^6-R%-nq#jv#Go zvza!ON<#x=0o_```O~wPI&dj4m1SoSV?!^WE>-Am=5_^g=D`U9nsB-wor#WaqbVE3 zUoH@zFm#(DfXe2l;`~E{CK9vJN~brO30?9=B8@>*QoP(t=5)is;IM?;a3(Z-K#F?4 zTlk&rr<^WyLC1|&{5Wl(pgJqz2J4@D@5Z!hFTumO#nU&P=Jb2ZHYE(B_ z^>;Boy*0B94!$-RF)!@-O9x$Iu8TDr@_v7RifJNJv4Z&Kepxk_Lj~KNbdaKV&TFWe z%&-oN_K1Hh9z=2WFZ^vVfr-rC_}9lyE^(4jVV0@&+njj-W_W2volYToxb1%F&xjoA zaM>qC#q6uz6d$8kKXZ>PUW}xS@aXsyF+&~SP;{C@q~?g7^YO>VVJ&9TDfqxUf9-Eo zn9XG>N@N)6q(fO>?Dw)^CJ1pa{qRlU z9^?!=lS>x-RN(%EUO%&OeG1T@7hFmdy0;>ufq+Q~6@Xn|%UA`5V1a8;I+Y9LhD%?; zX#lPr22!>O-# z3scJeBrgxd$=FU<4|Op__ou2H7x?F^Wg->`eAfFXax$#F)S?FSw1(*2i$Xgr#CueU zIzrZitlK^1-;W$@!A%#P-mNU*q(roPdUH32sDMqK>B1VT>+iL?PQ&54{TbyN2^9=P z`omKpJyZ+N(pbVHYCj<*a*lDH{|THbhG$O1KVLI`Adyp zLs=iC*jQSUK$FU<))u#h&PX1nniyBtkW#fw+Q6PZg5H^qK$u84#ytK6nW6qCM|&(M z^7G9P${c*~A1CVCZmD?zz%2ER1$8gHa0b!ON+PhT1%MbyG{%#RSBrb>S9+$izXPMS3eee>ibl zZ+6ZK?1Jlu{6~eqmIb{J8AQfzZ@|F88zM!;(5+*ok%)ChCohW9+`A(Ji{lq4gQGqF z(1i0729@Pg8>^pCR%MQ=M1jl*MT-)9Y4#saG9vq&;+IUFUDIMI814XE@W%|HS--w@zUsClo%NdO1Kotr_j0GT1@ ze;74Xdcm_%F+x+0B_L%Uv-Vj5++a9SN1dV_u05up?#1EtKA;ekc}8Ir=%Fu%;&>=Z zYXO}Ku1_E=;RA4L!U#cczOMnol#t`>zpc!7f==C!%+%@2C~g_$aXp^#PHF!pXx)kZ z1Mg3vGpm~tl6=)P!dX`LhEEB-*jT_s+#Q-aI8q8B+0{YMQd|3xA+WC4>L+J8RhmpK zJY4ZtMoWhcXO>C(YO^coYTr95F1zeaL>nJecaynD^%Bj-cWZz!Ivdmu=88ORW#`s#%Vlg#%_G{;<*3#R2JT{!3gjxr5nDDeDpNo<8n1|^Tpf?oqnjglRZORjIx(@ zwNG=tmoc`vQTF`l36Wp5yYV-GbLlUpn3WJW9IP4UIAWu84V>pB0$ej+vZ}K1;%fI2 z0S(sY#XiLyV0h=(6S^Kl<{t77H~hOGej8vzv8vzPP_%-60z#gTt4tHC<^p00-Ec@8 z?N|Pf>W;`Ig~oqGFlSIFD;OJ_N^`Yaz@Zf6YW~?ZHuuY_qB|NHcE^M=F*f$#rR+6?eGJMmcZg`S6v`!=PjA9Xi_PnVz=Y4ZGW;uODTPV6!tuyDQFvpdOs z@_A}+D>CH86=+~T8q*_>A9Ju~%q8nHo$zkv-+M4Q*;nkFjT{|8hdPV(S%E-$!LE)j zpV&>68xp7)n^I+fXRv3U;J_og@(Yw6_wb#Upxwyjn^b=bFsbxs6QgumM>J(R#^$t4 zqsjheA7Ad2oAXbc+@ell*CiC$bPwR`_;k_q&AuKJ75TW2G8B2Ar_z(k_*e~@r?g=w z>RC6P&x4PI^}G;2sAh~nRJUB39g}7SrqB>-D2*IzUCbkVUH<6d5lg$%4ox=Vq{aoa z;5hY+*-p#dFZ9jzl1;a&eO`8L@6fI~SoYmF?pSt`L=vl)Q za-?j&eUU>StreBB7Fe#{M&$o;KViz|$q5!XDBA?9{sp1A_8S&418On|{G8J<=5p0P z!#mxE6CWi;-MVgW{jtIkw)Wb41KZw|X!J2$FfaTJKyy?uRm2|LKIJoi$|MA@3ESda z2@>rTm0Gr(ud2P)t&r(STQ;FmmCa@4p9(8$Wph!@UD9N3)e&Lyz?Y^5(ZW$=mKw{P z=J&!A!5`@N((_kv4y`Y*HBv24i?AmrT+|G}9J#}E2}Fvz+3=pSMJSm2kNej*%-gV7 zB8y}Q{hI-J#IShH8y@zcFyXFTj=uPx0~xD0#|qJ#j025$2fKFOp9gAxUsnSAkK|}> z-cAh2DN(7RQsLMP)PW0k*D3DBmJ!LMUFY@*XInxMhOsif!T5c&?P6R)?z|++aFVg80e!gqor{ZvqO$2 z!it`R%viRyH@qN4`T0-ql-j6TaA4iYaO~%tQfy=9x?OXv;}(LHyAj%U=4aq(SvYxMu(x|oC8 zy)ZQdxzNgDhyE-FZik^R3er63$rPcNM8)qZ{j6e2-4rDwcPc0pTcB|l#Qi6CQ$aEp zN?;5x|D?D|p?y#tnHzD$&eDTxTAZ)<89P8WWTvH1xlecE>85jIt{8%}NFASM0i&k9y4v)Lxuy1>W2YjHJ~)kJ z$>5kL<19?~>$)ju6r>9`%8+E{g=q1-ClL`6NxnSgW5YZ#<^$`&`rR60<)DaAUF3;w zUo;7EfhKx0n>gXEE=P#l_#OJsA)pT(h^p>1$rov6I5q*FmE8@c*d1 zn~q3+n~U>cs>5?eE50Lg2caQMvf|T=A=0#~jcZ z;Titpfb!c^RH~d{g^3>pnHktSw+m8!a5+c5ERlh5xFKi-=O+5+x>Tr!jAxaZHJ0e5 zBPj(~BwTkq<`05y0KTq=ZJ}9E5svu8Bi!-c@9fR6xKuKccZslC~G;%?3>LSwovp3E?N36qG?*)aDg6g`=QK^NF+0x{!`^2&%l`%`BfpqQfs&R zQ&gL*YMiM8g#r5T?YF_iv@J}fC)w_&P(0k{$v(TM?bslL+9%UD9PhvUwK5o^cS&nm zi2|wyHzf5^1BVVU!h8sA(+Dw+^?lrZmNW4jS^&qFpMNLr0yfKyG`>Np8`VyE76a$> zMXWc2S=h)>28$HDnYszy2{>#r+K;wg0TtL$bWRzbUk`%Cj#1?`&?jmSnmnk#XZx zabYatfpGQBOp228Z^-6_)UJV{Y9vsnWiD5R1VW9KD*fbdRV@%RhUu!^ z#fK@MC?6MITBm{UfdhCLlHFc+fX4$v`ex+|_k1n!Y>X6yR=2Z3qmpV8yN(zSmf0hv z;i1}!qD7qcKo;X@@(!Vc;5Iy6s6&hu`%(R`wG}RkbU6e0lio;T@j=Wbiwh{bo+!uR z-A1>PtVMQ_9f7*3G@gxY+S+quot@k#i4Hb}1{5W}0i3p3tM@cJQLafb0QLS^Jw*b_SQOEc<;@|6+a+LWasZ66;NKA?!QycepIynNBoQic-GrI(T(_j zIW`6I9xLa(YqP(`lX?f0VQjivCF+hj23c$OudzwrA4Rdt+GqJ^eJzQLm`Zx9@H6?g zxk&=Dz-Z|@d&oZJ`-Q;RenPl;poZmvcK=6p^LiH)CR{Y8i*SWOdAc_pF}y7ko+4x4 zKiv@C?Mr>f@dyT!7>X;3^W6P;hCb~Su=kVzHRZ8n>6S5kFZu~)6g0G#;!@^XQwcbX z;!6kZV1?Ixr)(mw-`JKTqj+>eh-|}0LVy)$i|cY7xAqd?NVcu~;ftY%Clm$24Oasr z9*7QN0cyX2fiz|R6Wo>^xgT5Hq4amAbEk!aSDSI{3pk()W8-hIPCjf1o(M0;3DRDH zAaj7o>#4wIHnbfO>=`rws;sTQLTzxwN{YPrzJzm|;dmHk$N`M{o{``3<@Vxtih9=} zX3#FhTTBk(_HpU-1|OzFCjl;obproKWmj59WT2NcM}wYr9>SG2xgMds)_o9P!aV?i zb=rg-rE*BETxpI;r#@KRY1c^RgpPcXllOPLBPS$eE21v8lvOdAn4MD(H_*Mp<^^_A zuB4&Y392$-3pVyA4gXQSmvA(yxrKjlwBHb>Jc#jLAm4Hdse(gYaIMG5m9z=z8h%L5 zuEiA(KVL9aTk-_%J_6%?^9+9L_NX}(I03K8<(4jvq9?xeKk7KZlj z$#r0sXGzRw-jCl_cE@Hq<&}oLBf9L5@M*lelG{*a(qTBcosf`=nS z38)MA;GC(voam5V#3UH!fS7Wj5tTdV87|B*5uHu1<4ViKyFH@V_2Y`!@=6?T$%Y+q zD9wstb(~)Bgbcc0H!QM7Tw3$u|4zPvLZ<>$9%d=2S+eLs5pG&XXvMVWBvx1U>?u|1 z-JHOk<-N==*G`vD(G2>3ayUO;O)8(4x@an`I8%h)xm&p_TDPpo)7d@!f(8n6F@3ddp4Zpp3TOW|ql!R{o=6$*>z!4^Es)CDFc^{gWDZx1(16@67ZHT=0Vz zS-8pG^!SvwycR?=x%0GDlk=E@FyKL*WWx@+lO^kBr(n`_MmA2X23ZtCnTIlxpsp>o ziN~>p-~XhyjIc_qh0xsjXBDy|vq#~HB3G`4fo}&D?nYbcX0d~D_ea$19YuFq4r7Ud z10jC%)Fju`&`dYh9mQn|lW8>3g@;15n;qdcwZWd2e2qQ!PBp$)B0_gQN?LELSoG zH1?I6X+MFF(ofck{quL(TjIR5@~vu?z0p_PRn`06a$`mj9N4NvPeO_FS>{v-`%RQ< zrk35m*uulUw-3Eub~7 zwE?AR_vl=(T=L$W+Lyi0*}JOIK-{AzM5mBrYtP%REhY_fHdRGlAj(@+6J8XCZL~PGVXQUhDZJLQy+b_Lva+0FkrT!i^#M z7q2s?0wOxQpsl1m%HXCoJ@arh$MSk!oVBr0qci6((nVG$lz7uMtbD9T9Rrl>{;eA8 zZKe0YIxo2q$TEB4hCylBS?A9-v}ZOw9V>OqE&3{?^5?ZSng4X0M*Od779%VZq}KSQ zk@1tmA;NLGNaYps0V241xfxNKZ1@>Y3H$4ixRi?i65iM3n9_x{oJ`L)QTDJG-C<0p>|<9cV|no(T(%fZkt0#baTrWndwjzkU9f#ch!0@Sz_z{&XvUQ z5`NGZ3Ayh&+@by@XVW+5#ng#P{CR4K-2hg-sZA{(nVSimmp*BQKw}g;+sKcFPDIv0 zArOK#^GKh07@B@l#;?Fv2hj*|t>4SAwpV_&kfk#cD-NkR;eRWOeM`$&qc-_t%ZBGW z-kPR$?S)ITS57MWmcz6cm-kW5bH`+KMp_%!?RwJ9aF%87(_#L9iA1mBxF=ltg1QKw z={RXPK(8p3BJ0hDx?xvWdEF*lcRXYbb+~}&r^d8yFLN^%=x@|@tfK*qShqo-v>NO9>v{^BV2Mh?w&OfQ80Q$Y^r41 zn)2=0{IN%GB1pPX2hGzD9U(0rpne zReaQoc+MVn`F>?p-P^fU;>|q?sZY7KgQu`34X>q+7qH{Oxt|#M1oA*GhwfwZh8)37 z5uwTrNlK^6I$JypN({9&Cm_!(JTh^$#Wi)nVRQS9P%eO>KZ z)L-J7T=~nn1v8{>pg%a;^o=YK6YeS9CeKw@^~l;qTzLMp{sVXQ9OW@sZt(%T}R(=u=x-&sq;kVZGGyADqdXKh@wmy)iQ#8+i)#zi|lS zgJ69Hi#v1>S|jQPS9b#Oo6Tgmd29i56fNM5?H9Mwj25fiXx#R%Xqk75@ulWE_xAO@ zYXUGWgN8p$OI*sx@?pftxFe2Cw_y5#LXi!cW%Nemoa7rWzy}h)b|~X~xXsK29z#Mr z3|G=rP0iwQI>ym``w4?8J+j^G8%{`PRh+;`)uoW&TAHY_aV**`0!y!0!)qp=jT`G9 z=PXwlJHV=ugPo-9eir`hh#3Em%3oK8z`dL_DRJnCF%L&qqWIu^j(dpzJ+$XzY`e6O zNbaDz_s;Bk-ZZevT!P$Ir}wozQ4pBDBG|3O!hg5@=7(n3&9a`zGR=$6y2{1>;yiV9 z9#d8H+-+aK5U*v#PgJEFDD-m6kZ*(%q?(`C9yH`OpDNVg8HIastK)S2C%kdK^uNsq z+=^}OiMMG8JMU*vbdhu|K!w{aUFx7=irl);uQ9Z9!8vZOh9^oIm1r3=15&d4z0Sw^Xv%g9$ZJnAdZMeJY9*U36{Wy{h~P{W5Ek`}+=u0;0bImB3<^+8w(nZ9*QBL_Nhto&L_ z+W5iB-T!Hln2M>{e|{QoLYu=m^ERG`DVH?BY4@N7~7+SYqif$(F->A2IrH~ zIoWfqCnz4-vs#OGUz>5H^$nB#_bwVj6%KGe`-+FmCnya``3sBKPX#L=QRc@@6OP8C zP|dM3ED%s4l??iZcT_*Gc)bpWcbwkp_<-Hjh@tPVF!w(}Xt=^8Q;42w#4d#a5?#s$ zGN3f)yKuC~k#%Ly3Q+^FC1q@xrQ~oFu`=(?)Al#(vZGS)_#gA)^YU9}Vc;VzhC|LJ zK7P3RyASp`B?SfvrP*`wg&(67Gh8$1%PrJseq)WMWI}aI78`u!-KN$57fT4&XqZCm z>?T(-GbKC)8x?F|5}I{G2!giAG|Rr=2~F1SQzb}86a3%VMrHK}=Loq&&Yh4_+e4^L z-O(G4O+H%%FA?3M)@a7Bmk&bAfmyO!IAN(o>)))idBLe>%nt1VXxEV*an>+?TnOSj zy2OfhL$;=8?@GYkHvjP)Rmd~Ex4{X2&S9<0Qp$tlupGLC&{;Q6CtZtbS3Gp5QncaP2phBT(Z;*fqi=E4}Ln!4aRaY z%&2yxZj>aH3*HYM+$Sm%y3+(xl;k)EIuc*lkoGcGD&;pB8|ltrUClwT-pfR zx&!5Y5SJRFJ?SkySylaGxzc;G&V_l3dIZMGh4+4Jk@;M?T#O423YoZWK$?4ByOAs2 zI1`^|<-J|{*0VbPrbOd10ABL^NK7Yd`O9wi%J|(}GC>}@-sOx}n`_rgL0gSzG8b_` zZ^%*5!pyT1KHE~$8F9F1;GaxH3Uoso+CjPNW>SPg-v`W?m38XN$eV&|`q2$=RMJeZLpXZcYyANZ{CVs$Ujco3NA0ICOe|Y=I-Evvs zoR!6Nkf4dDJb`T3p5|tgxsTSHe0|qH%&MrtXt=UI3U`IGfKR!T4KW)2 zm&R^xe*uc;pV&K==VW2gZc|YeCB!fwRz>CRxT60+0r!p=1H2C=-|u5b2(H|SmY&Bux{LFjQPVTM=>2` zM7u9*^{aq7A@eP}4FQR_uWP|xPXVpBooY+);}w6>$IIaI`!E$Y{0GNUp2+nfyVEJ0&WBk#p#}E&TocY z!ci>UiSD|w?qZ0v`9~2>vsZOS9k+i``YicLLh|k$I1b^`SVSU*_B8U}qkb3_kJ>UH z?#`35+_w6}IoaXk2SQ(RJ`O^)LSWp$}g>i8&=(Jh&x-&-0sGC^pD=GqbP1fhL zG_Wq)ijw~Gr;KQ$D!ew1*+R)7-FAw6;o>$e$-F&dxSl9j!Kry z&G@cCmpCJDKD@eva|7sMXFiI|(9U9vsu85dU#k8N(GgtjK}gN?jo%JkPgr;AWa41p zo2PWR=?2vo;IthihzG&l%keK8JJX|SJwPnU??0+?Yl+V7wetsQk6>M;*DQzXd;7V> z*3cb_LWq5$q;86eUI1L2{~oAdf6DfrPethWJc|%=TvWKhBOa&KKy4MuZ?aVJ>m&@M z!vbBBKY$b7xx^a&&oiI(92V@=7v;~SCv=7upzD~w& zm%2I7a*~YT`(T}3#d)jrk*|t9O{(^;)nrYV5#3Z_gg%0X#C-D)MJesyi9woq=?5t> z+ARsUYx`58dgyKZ@SVhqg2;~ms`Ya?i$UjNREV(jMuw%b8vapa!^ncF+OE5~D^K6z z7U{PCMn>FQ1AsMf?^d~sS}i!-wq5_#KH-|^%yEGgd!)A6q100NVBW)M0L{^knfJhRjnh<;2$zuiBeWxfNdTX1)RXwi&Me zp?#wot9(w!3OGx}PtN_CXgJ2W*?YkTj%R8Y?;2PCoeBe?Uo|NS=*A;}a&wlRca4WO zAoVu{H4ht%c88@hLAQZhC}-5pyn5Zug01sB2pcLOPhXs#54Um3-uQv1Av}K)55?1J zI&1BnL{xrBG@jJY;&2DRLTYlc*GtUW@ik>bjEgyGj&Q(Fk^AAu zkEwJR!)*oYW@$}O9`4Ce-%3+>aH{YDKR^?QF1%kp`{Wca6eTzQg6+)>(GK3@MjiO8 zKT>=0j<{CQ1Jo}Ovs%3`;)A3vj;8o68x`nBD~~l&jdLlP(ZHRj++LAd^-B6cr^Gqm zN>mK-jwbfigBb(+c_}B0{sNivDa2EE2Rh%dar2XkDHhz2K?0&_8)K1nksYtwT6-k+ z*wdG%#o)a_oy2 z@U`opeuSm4kqtf7V<-(7^`#QHf~&F7@xxd5ux&rpnN{$IDwpb=D0IbTcZ6f+cHOWK z2CoPx-R}jz7-Q3E=dPRBmK0=){fRm8yD+WM$r`!tUSbMdycszQ-Y^W%5?FY%FGUA2%CH-rMUa< zGO(IFqSabdBVCZg+=!l*Iz)}ASZO>ur`$|j2c#PnVVy7!s_MziU4OPn5R8t-&@Wwy ze{OpSZk*~}A_V(#;;$V7`meyO=+b( zit~KcFR~-DQC;`5m)eWQRzU_6MfGUBi0%|D{Ej|c8BtA#S8vPtgkKE*TF#qf-YfgP zK&a$9C+PD&V^AsJglE=i{^l0nx7+T+_g`zO%sF!fHxGlWfcvVdIS45w(;Rc$CxM%o z&_CEG%Qt&z%a;>P3QBQKQ@CJkbJ%E?q`li>e*rT#Kr;ol(W)t1L-%0Umm?C>vvPu~ zI{a+gkeTV&Fv=IYnfEhu!XAF>ROeL-h~;y#5B$6@X)MsjX7ZbwuD zwgftR06A1{SQQbhu~#+*#L&SvLBRXI(7atf;ZQ|~j_YAci^H-UUwQYGspI#=PBai+ z|DB}MKE)oB3Pn%R9YhIaU2ofN#x?&@xtmBACd~>}bAIk}LG|=5Aga&57Nm{K4v4e5 z#7PAR!ad{BK3yuw+ghOjG);#x`<-9Npp$FG>8CYk>+3y?|FvFW)>K`66Jx+61rbfp z>Yx`A60o|+L8(ia$a=-(ZR&%X#GBsbkSt^IDbO(s;K)gWHscoC3O$$WR_-x4J{E^@0 zs<3GRM5&j|6=q;QFTZK|aR1(3xsE?w?5!?G$DAUa;s`W_=9MV8G(!k$;))rlx?a`P z7K!q%rEj28%0$K%MEWyL`H-Az9^1xmaPG}RoxFSkPgkL9eH`j`jVs)?X|SE)p|nqk z|4zCM4~dFFBY^WQ-8uNdR%E`dA0y3;gxrGwvti)*s|U@4B}&C|bH@E)|I1QlAh7x`Gjr!&?SSwq8TIJ;-`ck38kaxe+#@i)F09-8Ke)F8nsQzK z2e^Jqft}Kq=j?rhBvy6P$aO~t-hzNK@I>yz+NKd?(N`80OI9(v)jjG*{0nNiO`hs9 z!7bXh0|~dkyOUkIvmo^NFNDU1ZxYKNJb=G2Yq}H>ChX144YZ;L_8$d3DXLQEYz%PO ztIu`yc>jn##%8FSeb;8Ql#3(5a&!x!MH+k?mg*^8=agtVkswuLGdI6x^+>-U-E8Hz zjZG-Y?Z{cZUXoAa3W)j3hd7Caj}6~0?w7~5Ww}o@T?B`H+IbWDa^K_O7W?~vf9j=w z5P2UOKD$nddVk4`rm|^TKo=I-3ci9%4diCum4+%5R7x`vy`LHAm!c@dJEACeJ&NwA z0asWQN~BCzAC~iAmhUHGspVAFkUy)e!CxD;G^Vil1`mjo0y#$Z;-C>?%o{m$ZVE2h>2@aY}nq|G|lzPM{g(mEV$iUXnYo9+xo;Q!8I-%R(Ht?s+V{=)G;h`@2 zon|s|b8Jo)r?SzM-Yj=Wx~pmXSr_$HaoL-6ikXP!CK3)6vAd4EWvzy!YLL2V%JxNzkJ;hY5V(dOW z?B$tPASPT&EUPCPhjpCti&e96^VzzwVU3?3_C4Hcc-0Cr>CMaVOle>B(#^H&Rb9hT z95HcW%#TdTD&0_OodtSvlwTsrPhfCPT9)7`TG^_W4Rz^0N3e*t-l&?d4k*8pF1cn~ zsn()>TPlb_pOW|gqVFcx8<^fpTr%df=*BUP4%e7?Z$-?PM=Lgu*z!zQyvVzG*5*iq zq65pxpHqjqE}5**p679i<!kJxS3`8>-!bMZi9<#UywIu0;e;wQV#YDk)Mv}O-N>nkk8O-#6Wc|S zl&g?*thmUCcApu|{*&P^hW_z`;A1fMfnA=yvUvfeG?Ik*@duU_wZ^VJDJQTs$k}ZX zGxQ?8?^JJ4AGEZsY5N16@v60USH$@37j*;Od5I5Sq7Y#KPsvN1Fz{7I-WF;*8msPf z(K46K236fp_vt9biSR|M5g|`hKsHP|*rXWU@fLGK=E0#kLwlCw`*oBRtf*(V%+fBO zLiMXm!mr2JFO^$RQ(<%P0kx>`rNx=tRZZT5Q`ri@i2yH3qkYjO_5B(qMA{JA=G?}a z5kr)5gzz6$Ovq(#=QcJBUDen44W^A;aD*f`#-v1usH|_Bt@z?GlHs>u z@tWo?R#B)SZ8{FwyM+V@ouyAkbIFj-N+En|XOX1P@8mkHUrUs*BVRtg8mAJYJ}F36 zP@&|2Xp2;2P&~W)5i!*SR+i3}vzRDH{I3&KTlv_$7fd$)Jkw1uV~Z%)S$1?+uRMUx zp(lf^boF`i{h)b^8HjzaTC%CgwI20iDWi^ezstsr5Binpy|EDGyTH!v;bm(lMxyRG zBgj3kFm{eWe}g7suc^iTt=?sNIo7C-GlZ~j=(u!To-;}Q*ZkQTF2>wF!j~k3ja)i^ zy|F=4B8yX2^`hpzh>xa^YIr6HW-Rafk^X5!MTp0&#f3+`8`BJ_nKwi`Xs;5v**!gQ zuD&u4zwNUJR{9&i!Yvdh^P`v}kt1@{b8_wP^&_or*VHnf;o9y5-@Sx_2&sxc8Na%;8Z8mskFCB=ME8|% ziLp0odNr6wc4J02@3jVw+csu^Mv#vck^3YHUv8vSGRU}r8pe1Oppej~W zv~e5NTt!RYH~&CRPR{TA&Xec)em|dqSVR3Q)jmlK_kwyGO#3|_pmT0oHYw-cKOCBo z)d?Wh=9VhopCvaT&su#pQ%aPh_lsl1A9^gDSCn=Pw~SWUuhlmCUWeb&r8lvcI2yUm zkM3h5nU5vwsf#qT2dY3x<){o0!`GM#g6>_2n3lwor0fHYGD4KIAc z0VV)JGVq`%Zn`Gs&)jDJJ7m@OO}}zhYwLsf;>J$#|L~3V$lMQ|>?Wf_L*-B$?WV$_ z%vwoIi#8?#MUYm;AP=!u|LjP6k)TMvGSJoKu8Ocz14erk^&mgPsr=08vQvmOHA$br zq|51XrsS$9|0>ogRky#JNzX^pW>r-Q7CI1`vTz1g_U39Ar{aRv<>W`an(wwo#Vp?~ zuT9&^1(P%%Vi)!oYAl1%(RORrIZ*o_lGwdaSY(mgN{{@C#%8I^{6d4(j;wr{flld->?8LKsaCte`3JKiGuj0zDCyr`;2kxLmWyl+U`BqpsnR7?FY<4&^;6m3f#ryn z>a|>F^?8m~O2Bwhx#jFx)<5yrgIP&2BDd{V`>bIV*qDnZHR?}v6_Gji{*OPhim$Ae z<%tR^G?i6XfE$NzNK^xs>@Q4wHdv0I{h?;M9$4DUvZxNI^=o)a(7FH`Z5UomzHbX| z`swpjyu)&sfnN<&(Kq~Sb`1A0NO3C0gQo-FUW0enxQ43ApyrTfr&p%#c+s_3Mx7MC z&tD&Y^pv^5U|fNdOGA++V0erb~p zW3*Y1(Pff!Tu|PFd7a=~ipO1e7^~DxAFX2nMEFI~-i!Kg(~TN*RrM)n4as$_(WGLQ z?sdh;>L8vK2xG5S3{ihaai8BH+s_?fvISPqt=%~^5pji_tg>(8flGqk_Z*tigP{F$ zbMM-#&>Z_OMNZkDy>#C{X3>QfPy_2?V|>_NAd-C1+F1)v{r+UW{B&<)s&Xs89!&0rmYYvqw#E%a}q-WLm=C?5;5G8AmW6kAf_IzED<>;sP z^EWGfBXud@kg5BmA!pTmg!!fUq39`LBhW7?yv0j@QTEgFuS~A3hWIS9Lvh;NL^Ceo zF!g2T0&pV!nZtN;!N+Jl8Rr>;C}n8mrFqf4xsFRY`$bi1K!x#LH9pJ4epYE7&e^jK=(XEL>H-~OE zQ2~+u>l|$-WL-rn*YhNdVn$2%_IDqUH_k`L1O@c0TO7(dOs7D?F)5p2K0V(5W0I#` zShasVYz+x@Z7E~bImAo@Br1QFMJu^W8cMS!!<^Y05CnZ$^<#4t*6}{%$J_SC6g%{A zUO6@Fe6^A6?9F zopS4lx|K)|JSp9!>Mg?cTpBB?2d#BG|Fh~Qb+%t$#4yqo2%<_mmNP?xZCFO5LHX|k z4GEgp@DhO4tpAt~Giu92GTYPsm3zmccdE5w8-sY%KW)rs{5n=^_4~BH^2wFM+33!R)MSC zg_bKpAS$KPm9DnG^4Me$nd5&f!o7A&BM}^WpU~Kf(v}!ZvwE>`?fu%U;L87)Y9N-km?pgl zrs#%pHNk*nd(WS>;oCyY)7}EjBJ;9i$H?LjoAYWG~&X3AzUsKSaEma->{8WeyJ zzS&I1E;kmJU>J)WxF4JUCByi-U_=dQO3P4|Kk+cxb`#mzBN@I#HXs_U zeL4_z>Zq!qI8$BSXnjhHwVWD*Go68eoR45tP-x>lfEV6vNVJ;{^`TcJzy%4MEAHO5it@+iN_ zH;PBKJ3UjH3ql6;KNocteV_VMle|2gb}JAlndz636GaO(_821=0zV3;@bMJyL2H~F zqWA*$!_|hQ$Rd~X-!steU&7(XOz~*GHL5@FFWIe^7F?@{^2EFNiL(=(-762uDa`&B zG^*ZTiksscL~VP2NwKnaHx6Zf#yv zE9)U`7Dtin7ytY>(b71mG5f}+w!>>#q-g+N;#X_IJ3p?4c=$t2iks~D)}9tg!E)Bn z=U3{~?HdNhliHh=MJq4qL`YFmF8_DQ5lToLhhN9a4fLAK@u_lWBH> zB(Y@7$ge8$1^(mK9;|PhrWkTL-Pm-74eWL+{A1b@!lUfzd`9I?;eKn^0UI&9Z!cQ4 zl^^09Qbap#E8u%Rg$dM5L|xh%XE`<-1ZU+(M<}Tp1gh^R2ER0%hNU z=2|nvI4RD;iHlYWiV^Ss7@d1UJUl(*M_*H&3ihrdF5s6Nl`Mwnx zfDMN#C7Jyf*N;`xrz=j_SWMv3LaB~*cvSkEnQc7K1IZN)x2!r5dWyI@cvDH~AZ=p4 zj}0}A_hL(D2DIiWyp5Y82*+K4L+Yslrin4D-mI9)A{YQCNC*1$Hl9kWboeXygzi6w~oEIp)R;zmulmNS# z=Log+tNU#mv8?j@$@8Edwk1L0re2VWT}sm)Gf^btTK4(&Mgu);tA4)eOO9Yy2x9skN_^yXvRxaNjeq z`0Hbh+Th2`Vc!7i1r~DVi?X{7WVg6>FPiv}E}qK`Td8o&+J_Vxd9t>%VmYRw&udn_ z+AE%}!95*yb!0fp?A|GWPlBJ3E#fGOU$p zYS)>b9AxQSOYQVZrSm~B@OeS=6Rm%@)%)#3V16?`mwhU$g*6Dir+jv01J7DA zLASB3u6!!Gx^MBe>Z5R#Hf;e`p!M4Vazh#ET5IHiz(;@amYWJimbWShjAjT}NksYN z#%E*s4>k(o7t`}KhK;NxwK8R&vR2ii$fwZO1V5ynIMF+PioHtl!ix7PeppyH zE3j=Jo)`>T9W{30^^TCRS+iem@#au*9g?R@MVbuZJ%n5AKkwCZa|%3fRFPKsbpV$Y zU)=R7w+2!e+QY|9w^VZ!^$ubdodC7+ zx>Bbb0gr62bfh_XF2~D%6tVQM zRPirkz-#&_TKMd{Bug)|sXRQe>$u71&qVC%*mXi&^lkc zkNY1}ej@N!)+wDL>b(l^uMPBCE+N`%nB*_N*2o+Vg1{l~*A*Q3-SZQtX@MPyMblBj z96a7JPrmaDu#91zvg(kG0D#O2v1-E+z;xe=lttPo(`Z zUUVwoi|-Zhb|{6?lS`+RdM$qYb)l)O7VEsl$%F}8r0c;qv#2#f``RapSK0N0)Y)2( zhe?6U+4djF`|V77N*q_|B5!yMbhAjJT%vZ3!Kt$x!U7-W0G?CI8AuNhoI}{zYg|(l z4H!r@D}k&wHaw#PhBuBC+GA)y`qu)fn#o+Nl!AtoU**Pcm1ttSCz25*0I9ZZyS~@Q zS3B{s!rF9+)asW5TiW21o6r;l?p|wbT-%lo`d*K9rS+$Btmu+@Ej&fnF3W#~(>cH((od$!5)&1ps zP8A12c-4OUBo%FxljD}o(F=!Nd#F)E=|M!6^53y!hvCHRKR+R-SK^7lEe^Sf^Hv*i zw{|c`!Hw8&ry{SwKh#S-kl1=U@FZZ!^Pu(K_e7s)xAgiio)I}=vWIay^}~T5u#lfD z5htEDH5!>C=9mrS^U?3~yv?pTIL+gW%nvJbD>^q~c~8)wYTcajgLN$H;2o<5sC?z( zwqQ5YfAdq@#I;=o^+3f6eB77I3Y+w#qT414kwaAX3hOrcizvq%VkBEDkoZHp8n3D9 zGxW$B(!}iyxhb(?el&*Q*?d_!Omrf*7I?)g{?!{6yT#I`I;&wu)2SP=h5y7Xv{qGJ z*C|g{)6ydHCHu5Lp!ge)I!S`5d$s9TM}2Q4h3XKYAuCVsxL}3*C4Sh};YP$uhZ{3{ zA;i6@H32HkzU9`-2v}l8&Wq*=d*C)_V@EEYUb73~rm+C1!tkOXjq2ne{r;2npf5)fICjhRYifrxUxY?>e z`)5Qg+O6sl4Gz_%@1hYZKy0lqQ+i_%%UQ5>f|;!3%D7v`wTX}F znU1N1^21Y(*OPkDpE8vtWn~>>do1}RD)hF>IV0BWxWB3G9@%yM@I$JQq6M2oVg)6M zue_{0Zna2%?VJuNnt0PnZ30{fX^Ccl=|5XGf7hSP^b(wQtZF_HKDD<#a7m2va?qTW zdNtER86l@V`Q~)&#!cghe}+%}iVvN>w5jYss3Hct$gpFo!{@0~zdP*<6IyLc3{y_j z-qY6jabjR@uCsKZp^Piv5^!z@4EXLE{KDyY(Z6CXb@GVFzL9=K%;TkRcyD?$N^Z|t zmxjx``k0!r_1xXN)kHtB>friZJ5@X3__tr@%zdJ2Ik`8(p}WEdKLpaxH`76jG-jbRAzw-HfBU7#iT)ijf|RjN{n#?ymJ z85CI`PD4MKhjrwo|>Q%v$aZVCFsnvEIjWPR9Bs=KRg@mc1gR z`N>u+{;Wt#4e}}t*u2;8e1!F#`NZrPB1IHWt zi5}3g6YfzrxYYyW1Q70ALsfjW;jALp!6QB6sp;T_4Pa&;)ao{MUe<@r3i>kjbAF&Xt8(r}7?BJBdH$EFGbN5qh;~Zt||8zr?o7I2aqyzGg zTbIOWJ|Gw3#P(2TcoONA@l3OK}){ zoQoS!QPm}bBE5;Km8U9+?Gws{pQx-?TIjwOM3%X^13N`na-I(}NaiPgO8c9cJTS(Z zFN)HU*d%F=TLQb^{SX+kLF_+NuaMKNjs3lEe_71cM`8t>knZ$@Y?_lQY=1X+CSi>) z&2mR=7yWL0D+T<-FGGrD06Z_t7&MFzSyRWH^^{xd*0ZpE5<1sIsK4ZKZFxMXJn9|D zp;g`St+4HlKRR?3kBLf+wmXa4|0)*WcMNPaTcdIiaklQ*G)tfM{F*rg9WFxo$MHAb zDRoLby1n)k&~ddHyx;9;IO8Qzmm5}emS5$WSgPQH58F&G_%|B85@{30H&?11jh0KM zq@xIb%-|rgYTI}7hF-jz*>v}EwQ;tT&sX(Jf$KN}xu1OC$rVHlo zW0^AYr<`3do)fCPoOjGyr-GHFHVFwcA!L<^rEA&yDqBrf7NidBQ2Ay{11F^VNe7YJ zvsSnC)5W-^Hfs=q|5S3dy~wHWPpiqTH!TJ$5H@A=pK`oh<+AB}^HO%!2OhVu6Zp5e zM@X=B9B`KJSVquF=|(Ie=;g(N0wdP67X8ir63@`$ZeQW#rU-4SLC&p zpM;+PTQl1!HfazB)@I`tJ>Xu}YXz137>rK&inDD!&U@Q_lb&W4HrJ#OW*8*#WzAoN-&fGPeoP zHdU}E<7lRHeLG!Iy6AQjh&ev4 zKrAs6=*P85aqZ_>XVZ^^Dh1_wAn9_l&~!7+^4mY$ zl9O^m2q{umQ?Xu_KVG}#-X_e{V_aRnAvbJ<6djxGb>9`gQ-vY(AA`g_L;Ay!Q?1iR z!ii+gy|^`C3Td)r#FFv1I;@J-P8kLw*cpgthpodJEs|Geqoc2_70Wr=j0i|?1;5Hf z;ws#N^@_jw)WmOGbt%Y_oKSqd^dlUyaBoI3f0enaLSSA^@K(1}Jq$M^OG^HkOEHar z`Dus#-7&Wp)Wti5T>eG#X1SbmVMH*t>H{N*ks|`SAE;N&!X>j>JRoQqF;C#0MqJb8 zJssg#3h4QY$(scj7iJ3I)Vb!OY@u7Nef6mufls(Q8F`&JS+X1(FfxY=Sus_I@ttS# zekxxhHhInGqsZ}X*+X&WOI~Jee~!TwJ|veVdP+p9$BmK0t^#tqDbY3;QCi{)gsr>4$&ZKlHy2Z? z|2+(&+^I>M`+N$qF>`fEtZ*sQ_kk@DnlFUHT)PxyhRC;E;hbCgbY3shGoJ}FC!?{{ z=`BP5zwIQEUt9?8hh(iEFtHVxFju?zd2D|rBBi+hM+LCMZkA^>B`=-{^kYr}S~2YN z@K^Q+4P2=6vzRZ**~2z|;$=g{BDjAuM>76Z_RohJobo<)xFei4SMHjPg`#HT2)WK$ zA?Gq%l^sI<40X!40$GW2+M%6FvRsWHqiLZ$G^FZyTf1dDBmd#K+vMea@#36VrTDKg zZ+y`reoJu-QxoUZmMq$kqAK}bmnIa<8TUb)q6;1rf7D}mTj9>2px>`di_~%1p*Hls z{S;ppJ!TuPHzp^@;@kHr$84)tV&)&EKu4@huVc|u%~-{+B^tNHSL`Z zhB_F(!v4Wi%7K4HL8fCiVFtp}y`;w7dtSXsky}DS9(`=1$DzUq9{h_9&cU+?0fsw} zD;k02ysKU@9h%E^a3UbVR6I9$jsHcxpL84o{gbK~O zbfCca;x>+vP|@Y{L5oIk)Te@J`=%F;P2KG4t zrs~L8xXX?ov^pFi??P3?4q9B*#?C77(fP*p^6JunL5lCv^$80%n)}~NRLS4=#uq~c z?u+WzD30qqvDt*^2CU{_wb>nkEd(JoxLy+rJV%XQ%-Z~o5WTi=B?&W{-8veQV9aj8 zt#PdE+!s0Na%SGug%2$4%lr*xfe>M^urs;5PRhcx3txHg9K z9W@u%QYtce$GIXCCgw=H<<1ZFN!(ScanG*$dm5>F?fNFatan(s`=-ZVBj5lQ=+-f- zgpbDKcpfWQjnzT6K;UtUiy5QIgVu?+?^&>h;Olt+(nex(P9Tb;(cJ2{m`HG!SSQEr zsZEtOh#sSgLrvCx$Yl^`#S4gQt&cQnreOLHtNmx1$^%o%*E4Sw7hkQu%hwQ}T7_~W zNA)bR)ZW(bL-r5yw|JHxtIZ?Hm1bJJ<5n-a)soK9u<*mqCv;d z@-eryc-d^RtcSTz@YR(3^d&sdkG#E=TuoUb>~`bo)n9%%&laP~T?Z0~ey6D>S4Id~ zhbMrDZoAO(rZkf*aSC5Nls$#OJv$l6bW{Q61MTO&3hr3g=oZvF%X#lg(e3_sUh_m1 zXbsPyAP}7M7bqM4w|8{%&7<}K<_Lu?UPc~s z`!+Akn0IeVZ?E)fra;p@Kfb);+tC#q{f)5IoN;jp=W=D$*X7 zg8TB9CA1^C)JyvSZ>ilC<~xBPwhKZbK@BXYLi|PZIiP1>W`~IGhoA z_@(v}@uHp;kf*USn4!||d&tv*t-8_^?h%Pc-whTTp~gF1pBq8dS3=UO9sBtXq_Zacn! z|Eh2{ylOPfn700A^=_@C1Yl;-fTVS#7&}DsE#Z~a1!0$iKoseibB`~wk`VEHzF%~H zY}YfAOco6!;XY8j2P)6YdpJfdRqvY4m1WZ<K@A1NEpf_zjOFtl`hDkgN4FtDhac-h<2^f-bZDWe%DJlLh@;5g%o0fbr}*KG z5yL?K%UWxHw6pv~Wu8K?+C;8>rze}=%|fAKLs=dxkHOX_-W_zMtD&=K?T0@Kee+Vg zT$P;0y_I-kW!Ct;JA6vB2IfEI_^9TXLzZf9_45

`d|#+6J*-puC$$LZ7NN4TIG` z-#yCTIYEA3mGQ5cbzgRSh*+`ezC}=4v3x(AX%U`#*J%ZE9hX2?&3f4tRF)gp!`1Siszxp%MxM02Tydrhd^7J}a&#fHbQ-Rw$hT~6P`R63RC?4tA~@=l zB_6V`(;OJ$92^qdpEF=X6KCGN_MJbL7f5$UiG=G{_yBErxXxC6S?$MJ%N_q3yXExU z`%QCHJRdlA3qrV|EulDaG57B@19_VG8kxY5Cb2HZoO^y-UIYK|N}CGm7MPLh2giCj zabSwd3q~zbOo>GbO^Kx)@abu0h1LKMwcx0F&4{rm`>Ji^M*#GO9ZPZQ+#MqKSiMJL zj%pq*Dv{5>`^`DZhTLS~vp{x4^;}xUln};Lf1S#+&SFe*@bdvq5ga0}v!u{~-&T_Y zW>m_`A7jzQ2M}omqT*SG&%qg7>3uw2!D|CAG335Yc=_G$gyZ84pxMrq_GQdJ*kdlw zOZ7Rv@ar>^xU2y6Ajbj)jP_X;qSGa=RH7F<5MA3R72?OW=r*LPt+>_5JQtpl)9+s1 zvEZ|Kk^%m!mda=Pv!E-^y4Tp|{cG@ZGZ?uu%=4{+{-X2;gFVb7C*}6~S%r_E!N_rI z!4dK0(O)Jb8MmCCz3~qr^_fTGhn@B0P|Fk7U!J46)lG^ZRaEXxn$ChcYLMa%iEYpD zy5DNQx*@~!><>H1WL)@g7noP)EGz46eTu2kRUcOKqyk7bowZMNDOSpo@O4%o?8r`V ziORv{Ph>j6a~4kXJ}a~WQ6%RH+Qx?hYc=aY#jK_q;`y&ts3O@jP{@cy2S>V`@fdk9 z^;98Aw~DvMvZ>v`Ru~(u>=(#@a((VC*DA>-G2SaJFVsns{?&f2-gh47>SlewC8GGI zP*G^8%Z4T-Nlvow(XhT@QnkKML2SCVd{;<*P>j_Gq-GpOEZwYneV$i=hUZ)O6PuaC zi9$wrh|mf_Hz@rfFm7M{`S-wk8y=682lIW+EL#$fVy)NFQF{+eU3bZxwg~wXGBl;t z#-Du#+0j0-PJFTCaD;PS_QDV99dk4MF)uTNbzhvQ-Xv(`e6-BXQsFA~h+AYCofCvF zGbg9WCddwzvVSJ)4ypJEO>gI8c%9ScS9CGL96^y+O85I>+F6gmQ6(*v3{*=7p=XV4 zL<{Pt&ab$pbPnv>lY^*v zYr`6k%*>w}Fha5CWOswGYjlvX@2Gik*9m(7akeVe%DD@WJfNcTM6tJJy~7CjowULH zIrGyrS-~kfi7eu1``p&cy4nr7yN2CX75p-C0<6H#4aPD3>pe1q~rRm+2#rE)k;!khywL_Fc*Od@;|01*?kL# zFY^}mSg4p(P~y53smI6D^2z1|lEoly0lN^Tbm;h|NfKn(^i1sGjF3(#qKUnqULS2G zX-Q#%k=PF1Ka<`v7s_^v5E#L~4D^BvQHxRk8y_$9dR!U%D>Ogd{u4(@4U zFx%2$E87;TcxB1J@Ae~fo5to70N@$?-EIL0MRgZ#Kswu$SEZp` zE3)(hx2%l?cwu|m#AIGgIg-l5P|#iRGMF)tVTvXuWVZ*|c_a7O=s-OZm5Jp((d6+l zh;qP8VpwE27|UQswvThYO`#+c21@J1;k&)JKsmQ(Fs37_{8%YQ_l1L+WAY6*=-A+PI3yXv23ab=*RO|h zsf432s`#01thJRh$YD)Q_+c-20h+7)yCLt7cai>oc34m4mL`_9LhFxU&&j{*UbW4D zfl}7SMSJ+frA>>(GvuPp;#KHpsz1}1>@Gf7{L&M?^pL%%8r$KO^DX3!)#x;E~#zeu*^w1QCYk%`0xevdY44`pnhrpsamu| z5yUAOxjz*n$MpcUTy3man25|dZ&|P0gO7yUM@OIKe0Qfx9P@DhVeR_DzR7Ej1FDqG zx?m(`eO4|&@?yLH4>)q3A`)|`Ua1^g>mME@J>z-|L4~(GA59FD_8HHr$j}fNx$Aht z-t*pnLlsm}1yQG~j)J0d4pJXwUfE&rBGt!PhKT>D7~hc}_uZi02JVPYt=^Oqkhl|3LCFR~`NaCe)us*n^+eA@FYLeeZh1leDPLtePabZ_G-#4fA5yAIMraaDVs0& zck4*|k&RhFdI{1%B|LM3ueJi?hEaMm zZmZKmG6<_VaFKt$(AmX@q@DhmY;k=vCDs#3Y+8ZX6-u#qy1gbDGpg8)saE%n8uI_1 z_eQG(0^D*vOOlFJ$^=DrNdspmoOrP@J!){Ji;LuB-_Pty4KjP_5zck-nMOEafCr(j zR}N+GyLGd|p(L-`sFT07Pv=B&km3wKdo;3tBG7+UT6@3VC%)Y0;Pdis{F z=336DR@X3OQo#vsx;XHI2clzg!1K-_HX-!Fc-@ZgZPW+7&iO&PCWS7)wHrviiCj(B zoT*R()P4yG7&9cFIzD)P4g$Cc0?2-vhNHH2e{mI$h9$0&?OlDulz&wuTtYbdRGu3w zM%1y3EXRvH6~+7ZZ-CgG^vMFQFPZv#3Bv>OAN#ObC33P*;cyQW(=0r3tm)DSYuLbx z8J%J?bi6r9)zMYq47JZTUQ~e`>%s9%t}-glE#3&aEk}i zk*~oOGA|(t0`B$yV=5ie90~^4=g0lMRcJ}%yfDAzUE6dXj3!(;N2{JIH{B1gkUfFx z;5E8dn1}9LEB^jxJD1iFh^kjsaJ(=0gs#RV`_UcGB}@?`OrE#o7TniGGwf-+*V+QJ zgZAIO$CURJ$6r@r_yHNgGM8iotFkx#eNuMgto2KYz_EtM1-3d{U4QgQtoku>tM*)- z-zn~6_X!i3d_La3ZRPD1T{4@{Z@muaKxr$|D>yy^im?Yqv9xjNUpE;Y3oI-Fs7?EK z+H_v$c|Y4Sn7t}KbyrQTIxJ>a{-dJKf||$B9emvyMK(xO)S(H=IO9ehU=T7tPXv1R z=GD1G*vY%Y(RV4J#Jytibbb?wy=E-zqgcW46eSY=lJ6w0ue>-gV(@dG1kRf+;_V7J znBT4wh^dM&l=e4|4R9_;bu~eJrU$$2ga`W7B5*PJW8}OqNKQc)9g1tsFjXk4Z6~s) zUjHQk)j(*}hDpEK&+6=WEU8W>D7-&bov{5`>a|?t`AXfM?E9CVq(-jHJkep{a#lG< zAn26F8rH(k)nL(vUi!_?lm$y~25_OM=lL5W|AwbkWeiDMyfPBEuJTbXje z_ZzJCS5n>(ek5RuU}QU}l2v$bOAXGcJU*fL5m(83uh(He_Zqh4=7TXq8Mkq&i=P-4 zuiNsldzpK@e|5d-zWSQov?aOxwB`L%NUp160Y&lfj`^n89{N>BQceN_0D6jKEgc>? zR(Kk!V8OmJ`FVk=%*#u}zVX1nk0U*w&VMSTnm{MR_(ZWZ;jTKo$K777^gzXlLwuw9 zuhPI~va(VbR6n`s%kM_4b&@Qv!-24XQ6Nb{(mcy;gz>O8$7&Cc$*Qjg7Oi^qB)Ak> zLq-`mjC?-~f=h5AqV&abOBF}{p;-O{+IipsFvg;@c*OGERJ2|7%Oiq?@ftRXjVfm! z(ef&*)^E>Qa!{>O^TqVlxJgD)JB`eSSD!GgEN|SGR{TcC!AM^}Na>^PMA2#+dD@nApVR zc$a9}IKX5VEh?t!cr#C;<>T?j$8B_g2<-ztCYdb!X>==0^TUFX@{Ug7`cg!U;C!wo zD3>GTS6RHpLX@DX)#VIv@K{rfIwM!;1*7e|tUgb@AoGFGe5>5Q_6aVL4&2s@2(_$s z5v4|!^MEwQo_GC;_fo5kv!dQq4Urq*IoAOkmv|M@CfSf?JrxUvqTm1hsWs;n`*`oG zQNS!-bF8s(Kh4Z^iUi!x@nz&$StmRmE(t1$jWxbEiOXdfnF~9kNu*%nh6)X+jU3Mq znium6S81AXOkwmNw4DmqaDoo|?WBq~VK<8nOhj8Fcj2my=XpJ+nv#r9UiC45(vH@F zVX+(^CPt}E2ZBrR)c&Owc6K1asB>kGEgb#W#xvfY7q#Sp)Ca1xg)i!tYm;6qhR6Qp z5;q-6gLQLUodpQC6BYTazeUDt&8n@ECS;;B1X-Unv;lSVhGp%r*%MyV;U9Iql#RD8 zXH<^UeQ%jUp+6nbLmt+m8HWC8M|k^@eN?b^JV@)}ZQ5UF5F(*H&GEJ z|12lDRI%tI0^pl|D*@_3irHG+bvqy+kiHUU#a62N1*KT z*n>%Li{WysKl@84tDxt~>Kz8zkGdFi@H{oU-gxFlHkIamcG5CZ8AUr(&tXOaj@36m zXE)VdZGO-8&jo~$UlDOXR#awNjBGFQ_)#oD_^dKA9q;b{#QT{e_bEjb>R#0bq(RD8 z8C22qw{9Kt+uyIt9rFt(`MGFTTfKe3zHkHkUAHvmhA2pDmr;%OB2*u>{Gj?e`1K3G z<_VFp(+`>8#j=nL$FNm7dj^)FDo%}ShOJaSiFR`|-p<7ORnRFrHdX`SR>LIQ1rlQ2 z;8t}Q_ot+vmiy7h{Ga~De>*FyKE!UjVgo|e?PtI9MQX4=cB|3(r)0Qg>UvOcXmEKz z4otc(1KUEheNX@fio=I@%+{WLzZvpms6_EthYM&vvGX3g_}acvBBPIM@DP)CVd|y3 zjm>OOMK@XM;PMBgYfpsx;)&0DeH9RBrcWukI6}M_${Mtf;e2W@r2MN^*H*Tsg9eoY z9=m92lg2wzO($GiBYo^C!Z^7VD5LyB)w$NkqRdS7h5h+u2o@+Ca;+2NGeH*g4nYWc zWR*oBrQQl0fdAtob4^dq9is0&pFj$8hm<>GD^49I^8?VOQ9)i0jaGkItJA7&HNp&w^|`@ zyuF=J$j90?#KbhA)00E)LjzQ$s092*QCHTF5Cn#827#_!IJpn<9QeUlls~G&G7Bc4zCd`UOJMJ%s6C`5DqUyusBnIgZdR``VW$VbZC&Ecpl*@}`o zWttM`3O@#UW4nOlI2mu!qI}ohLpP+17MU$Wtr#aQ!9C`f8_0>wP9z;QUQj>E5 z;&YkpG%qx3xf@X8rA*m*tp0!Fa!Y^c)^#mg&r@|gUV0vxR&1yjkmiDKyonoxDED!y zqZ(T(^6<=9)HAGCUiCuwm#YF2WRLJBZ!7u09Gx!}d5h;I^XRIER3T66pLdL;aEctp z@RcbK{D$y+8kh{TB*t7!H|`r)%)u5LW&79Sy7eIvhbzQkaC#H8+ zkr*R66Z|kN56;)hm6to<9G3lR;2*xm2~2xAsG?))&kZKWAISH!*y}8{%`&IV0R!h^ zuMC3jd`Y3)#&mP40YhtZeZrp-xh5|s&Y*-^IWL2Gtw@STu8Q&@BLhRQp>qcPv9&E=0w%>qM z(nJQ)9g8qo#VNedO%=u(AU&mk{}YV+gfs66=RARboT~BXrBSn%#A?I1@Ttm=vlB%I z3+Y$6n8$@Vj=31?Ta#nW&PyC|tX_K7T88y0WTrGJ&I>)+YVgsx%u#x(NjqU)9LA+N zKj+y03>RC@QZ$(f3SAv8vtcD0ESK&V3=y`bnu3`O2l*wtbkGyCY+G9Wc+2f=4OWt8 z;Qtvq>%S)7HVltOy1Nl1Mt7(*z6_Ka-8ecnx};+x4Pt~!2#hX)jglCkFhFI9$fzMh zr%VwM5aj#v4?I6T&*#3M^SrL(Xu87oR61g$JHGKMYWplZ=#6;WonhCX-cy_YWLt ze9!MFbj|DqF$z5C$4k_&WXvd5ex8k5@ki>uITYoUV{@z^mWSU$>lfP^_WR zzS4NX0B<8PnV@x+J*6miQ+yXCJ)CNFXOfD;#vp&*j4^u3zweV%&*Lva`mAPXKx&iI z861W4k>5qebvbh0OWd!Ja9MEjh1taFZTu~kvW;li*?7o2G$wUJn(PpmhN}Er89q!A zuyoLCAiz?_cKXgl_M1ga<|$-h8a*;+yD}BQV}-+%F}?p_2^wh`&H6yFuq93H&(IHC zOm}4N4I|feDQ9K6xUnZuYLq0y_BVI`9rdsNT~xtb8UH;|kcU>hsC4*QM&=2@ zums1cevhi6nBvw4GaSb1;c6EZy?k?WM^u|#iRko?)j%A54|LjVv(~@l{G2Xex4Qey zvDVXmmQ-Rbvj-(m>lo#2yhiBunpE!fhJQR&H-{-G6u*MnkkI9EYGJJ>%n_|pu1f9a z1(0E)(q8B~heEDowh)ObwW+)f)o9DY#x|Ta?ME+A>Rxw5)B53J@#B}uVoOO_tJw&} zRwj?2c=zAz7O#+-2dgyfuEphx-q}Em1Kh@lmc|_$`zpeu-&O z`-7JKzN83UVTc!he!cW{!fN%A3OE2bX4^}wz_R+pnY65-4rE6TX)P|WFLcv+N`~=n zH1H0EB@Q($sG#Eye5cc;20)X-c=i=e_X{F3d>aaG8oOeXq${}-RNspd;+6;^YuL{) zvg}<4YdYUCgo~qC?K8Gr38s2Cvk^zg9(|~mik_dtbSg3CQmWR=3nFsEzMv)$=ul_P zv{!4C@MBUeR>8fk-U^~UJ)ZzEwBblh$Y|AcU%H%!e+WPFg}*^%Cdo7QhDVv**oU*nk#ayWqU3V!2H_YOcLEn5@3paQZOiHmiF9>8!tb}@A z2AH$?J#5zZnU*XJ2z$@AN6H^nKUHocSfx;e^-ln!gA|8^2h;DGm9Xty_^Ha?5&_x6 z=k{|VX1&i!a_OsEZ5T8NtwuSgg-n` zs(p=%*m6jxd!7!cF=h!MZf@Q0nL1Lg*+1rOcr3*W8wOrX%tO`bLIh$f_h3fDe=CMA zdJmad`k|CwQ;XYb8<8W67HAapw^X0Ov}n56v(hM!_G&f5@}7IN-G|s(2XDl@9YYAV z`OcZF4=9g-b02PLYqtas<2zywS;-%po#H(vdbTrv4?af@Z9K&uM2hVdYMY~k7Yo_#w@lrN*CCuhnT5ql+a3s`jL1qx6lmbkGAW=ju9$Y`XO zhmKM-Wr2yMdP}ILL~$%>4L(*cw<)f+JvVw;FPw0se^k=q>(*i1zm5*5THKHA<0B+z zX|)llOeT0P>qpqNSXAGkWHRy~b8ay7q}F>$_i<9bd`q=ZQ$i)_$9- z5R2}C$m|aNPDl=*lKP}vwN$9!=wZv+7E-?dr+U#!U`w-^)v^{`>DkD8MAugu>usf8ZI}DzQ70;KIp7nDxVd=oT4zH6i)2=>I+s`ZDIw2v{ z=>8~U`_?YeIXCN6VlR8wA&d1h84ByZYCLlbQgM}QrsN8__{VHf1JG)<=jDkw2rAZcRSwfHn7!ryFIs-_ z7?tO*i#i_L8`$)!_ceVcbALm2cjA=}=OQpxD;6=i7|*n0*GdYNeQ-4qcY?cO8}b=7 z5Ef#25{Ge(?1?SKF7!OUC0D#0DWP$+kRmd19C|v zzRyQe^PE*)GJ@t}NdVQUckK%!r_&aBsZuX1Z(4<+&Ky6;nkSY9sa=(|q4ZM15zl%U zMe`6A#uS&CuM0+nT2snA#bp&WY!X#WWG@AG)Vd<+mcD0FmVKLp^>o zpfL7-@omVnf7p=kmc00w4;1OPpT~-T)8&nUfQq-W5Dk*7B2l!n&n!n|AOd1=CxTE`Ol{4G;o^S3IWA$6rTtPG*5| zAeEb@kFv2p(3u6J4)V$^@%Fjj-YEQfM*?UIUfi`3BC}Ltsn|(A+94$OSluUdys%#% zWd7_YRH^Yqc|PY*Jz^_)M;o>Bz*wP;gV*A3L6o1~&Xr-V^_%?>4Oj6*R54}m;pF&w ziG9Wjh?CD_8R4R>zUWS3<1KG|8eBDXBrb5Iktk)CE^*P@>(u0W(}?FYMe{>&I-OH< zRS1gGTPdfoo`9-e4$)UCqRa)CgSXT57xycVPkw z9&t#y?mE1vCNgFr(CktX6Nox+&Aq;UcgOi@2&>HZ^55)uTQc1$j+f(sV+xZYR+TS+ z3y)Q8@zP?Uu81~zZ|dl@#qoikI%|c15gZ9c){IBX9R%TrvQl08mvEikp`71zbQe5c zCSj(;lXH{e2($NEOeuke=cPZdO#rQkyQFVeq0jo|*V`1Uve}^$=0h;-b&Vt`rpo7> zX_7RH6zS&9`V(hoq)mx5cS^CLxqO`y0SIMNxYjVC!KrKL@mfFR80a44jb?iIRfCm< z;!xTwsVdN%r{n^%}}GBV$C&7D&P!2$kwU)E=saz5ClOmZk%s}&dZW!5fTA8R|VM{)f7y@F4+ zfMURu8n4{P)k>Ly`GkkKyym-F9Ur2o@bnjx>f&*&VYh$rtj6O^wc<*rdGwKPYe-(E z_3N75kynYnln!=$9?9bgsRUq!+Ky@Vpj%fZ(*AJ%nYUhU&MX%aF8XvFtn5WpNLytH z>htQMxfO7iCn2AO2eqm_NY_}9Oz{jJ+qF5tY7Av+JhwJFBC{!uc$`{${|OpRLM}`= zDC=ew5p;IvdA?Ovfx6Uaw90iYkA%fS;+j1cEk>-G$M#c`k&p)NkB>rlKGhHR+~&Sx zW~D~*d@UAOn~C<3v>+65-(SMDsqR_OvmS{wog=a?A6E{AO4B$J<4y^q0YxBhJ_>ao zbYV`HHaIk504F+=M%n$iL>t3qPUtl#WWFm{S>HT5FA@4!2Y4nE z#O8865D^Cd?O~z+bS}o3C^4L3tfV58D~MaPHEV+ev~qU$~-QUOgkJ`rs!HbCCwu2>8g75np!`uRDCHcd8|}1Vs^_+b(hc< z<&6zhDEr@Y9x|9((Hi6t60jIeYyFTM)JAqPc@Ag3n_}k0M17>RABcjyFX7hizk?QE zvwD6ll}4uaHw!ZYSEId!-mT>887}Kc;F!Gn=$> zL0}A)>xy-qzWq~~3ibWky5)wlCWnN6gT(Y=OGIoWOOwJ-j_AjE{#djOZEi`vW$&oD zAWtwcl!sX7a$A+PoJJ^}c4KDpKR}Dy_YsitO1wf&dJClMUundLq*5P+I{Pq+T7#?s zV-{n{O``(2umV9lL@KLkmdNq7kr0|DIt9GXbhV4$I~`i5N=N5yQ+KmI|H?Gve)&i*CO(UkE* z%Kj~3c%46wO~HAPKT^W(dgL}40?l@Qx&;Hb0h9lcgbPKh8MVZWJ-@0r!PFyM!ZS=)()gi4!| zN}G@)!n~WvT+^aoyLi+=-S9h>W@O|PDxg;2i29)e%AirLWeff1@Nel}49xDcD6=A- zdFjsn+B!9pEmXzXle65mJz$7mdvll2N!!tEWf*aNMiLuDH5g_j5o|6^g|IPxs%*<; zH@(LH1Yx77Lc<$rU*>#anv!B{G0ZbV8it1gysGu7upJ{v9-PMMo+Y`5VJ+IuF_UTpOVWn8U@&ihRw0AE`^v&lUTuXPIg#6VYcM` zUMgxZM5t9B8CM+jlh5xn#ZD9Lz8@nSTSXt|(q;4lsB4QxeojNHbS3T+ZduIc`th&(FvwUum0ot}tm zmij;EzWaT%dznaV;!Iz%Z-MloN^{fO#z95Qel%7;Fi>Hj8_CrpT$7K-$h93GVy|J* z#85oQB*##INO+AK8J%){^S5GNORldArnf_q$&sSCEXs4f{xtvi{SO@PlPiXK#)I<; z=2f8#z>Rn@>W_CVymhdxZR{KqpbquFtHXG)_9(mvZ@VJ1+u;4^{2yFxoUYNrj5J8K zTz~1JDHPyXxj==`1W+=zWWc_ZQ<{i6wU5MsA{MU8G2q{|TUP~<`hlt2ZD&LI&6?v0 z!`DV`>Ck}>--rN0T{0bgTPzZk4=_1HrXiL1d2tP&cp`1EesYyk|Hp*e!NxBqmoiUh zZ69DF8g`eQQK7)`?xpZ}J9DuwF6lIjqSc?SM&b)@ifsb_fpSq&pT6L&SlOeElG3X} zg~}d>r*N&O?i$;?LVrlVlAo)_WmmPfY=7vdN1@(#qT)<4>i3>Fcc++p!EjvpGybrq zONb!PQOe|we!=u@C`rahZVzjcOtSBZPgC2vyVJddePfW}`VHMS$cxNN4A4n2I+Rh- zInsGOCiBzsL|5?W$|}k&`@DT=y;I`QD+Q#I19ANi@V}UVBPzf@509wJ`VH_Z%R(SO zj>-VN2YjWWU>b{mEfCdyqOp0Tc+rq`Z2JXF7D&p8`ZvBMwp|(rTGVh>-{)X+OyL?V zG-~j!Oo}Ak=h4SFc;ETinWj$eBI-xpR&{MTWKz4@Jis=Rx=?4EwLsIDu@j-%O4{*J zy!J+)j>Z zVty*0>f3URKFI0Euedh_N1)z&ew8bsC;gc z5Fk{w2XFvq0i!4ER?I{DeSTmUskw4?!35>>T^84RwnHcegcN(Pi{>`^Qz4_~&gL<_ zb5mrpb+1>-iG$>9h#kAIqDRS)ul{3$Bj$45*~CKZoT(_v62x*M-7St4BS?^Gh}2h} zx4;kUA~RMc(D`vZ@58AZgq!BG^MVml41FtOO!Xu&s9gCbyd0pTue(6ip74m=@yJ zognxnQ!*RO8z4+)jOR0Y=Q_QLvym)TQir9Tf+J`Ca$0fywR|v zmnr-g1t~w6nkpJDWt2pz0LLuTPe*#PtT24v%j<<_bPezF31o7@tv-&))$k-^!+WSmkNCLCwhTmQkym>a9@Z?hbAe|`sS4M zOD!Vbr=JrxN~zNE9`g=lJJJ>^{VL4MZXDrb!gNXu9Uz>*k0R{?EMj>r=}0n4WZ=jU zdSKui(%oj27dqW_%a5*-O%qi!+xYIx~RQFbG0XZ|S_;m`>q`_N;LK^R!xE1@+ z(k!WNBWZ&t8ndRAXo8w1y@QM6)$?et1rAWNN|GH+gb)(9q~_o4F~9WB4cGo$@!eLq zQ4lxUiU>5#6q0&n&5}6O>$}3Xm)Re|#ro6&a7%`d^=rXIIzhYXb!+TT<54gyI!u6^ zi2eKsNT3O=BW1kmNXE&74-(?RnGQbWZ^jMxeJ_$QI&eu8yxFohXhu=wY(;3f9=DvJtNX9_NSm>(YtN@r|H8V^s1b1bMv+n+Ruq@2EP_(c4A6IKq>CRqvB9bPm1i}Jq&ax z^o>r67LA-!01R@5*fhkC32*uZD`6gt1o&-q9}wz?d{1%U@qZH^nhNcE^s?U>PD$tcfSQ&h5(cz=j| zGv^1&<_%8_@RpO{I!gsdbjNQq=YObW-MmOuVETKDZn;iXT;=!K$(84rm^8%NmVJ>& z%aEbe0QlL$DzsaH$0iR>@MN&h{&FPLaznH(#MzIE4$IiU_49<~{#jwfF0P5)pYvOx zS)?`l`Zf~b|5-QgVw%jx|66;KEa?23t%7_#9gK*)@fU934`SeB{(gb|yXJP6^K){R zneujL#y0M~Vr8NKRiI_Y!k?*4F^v_MYB-5f-G}sOa>^{))V%0LB*v`LimAH@kJS&UoD#VvoeEj{_Ks) zD-fH(Ks-_Q4frfyG4hWx=r^vQmc$KJHB?1W3y%5Ey$!N{H$Q|6U+6{cvSVA@{c13$ z${d8(JLj4n-FMwX=DnG4roWxmOMguTN$A2D6TKw;=5ty6k2$qDHXdD=ewGpCM=A+f z)qny+u_)HKdA=6C^rQa(ejX!QXu38TniqFm&H{~zA7>tN)Eo=Rjle_$?X!)htzhBA z`tB0!@|Bss23${Am^53o58C z6~dZ%hy>ga5&!t9;nq(2B%#08qkUB!?Ich=uvX)q_Bx=z%ut;&B-8iwSarT-CiI+l z#BXP&_z>`MrqJ{T^l%pg@_6CYL-H(iIDdLOswa2ELuny^zGq}^@Mg5oh;`T+0t{6# z_&!JToZI?eV`4P*xENWn;&1MJEFchP4E;;t$>UH2+tTnN_ugFH6O_gmKe7vD8KWXE ze1c+(^vwMQ(tBo+-Hjuw7}Gz}>D(_P!WS=0Q-Xbf@YbF7=f))toZIqy#+ro{Z#QOgs1H@#qECk)J1P&tukA!=Q;pla3~kv-u=Id z8k{Z-)nxsb9J=-;I3Q~C6#jK@3FjR6$>>)x@P)1^(jvpO)sVBmGrTG{M#Q-pf0kLTr9Med8RG44cG*5G)Yv z3ey5DLii%q**-SWgRLl&CMu735!;+m!_6-m?bXaeZG(#Sq$7Gb{ zSg4HbwF7W1w4W;%hEe2CKh&#)G?3^n4qy?V2P>2Q*v^{?dEc(bwJ)rOU4kG^-zz2D zh^l!vC%UMX>`ap=JlSqajWdV!ZhnI*k4c|qak!`A0EHhD=cV|JXy~)u<>&Mz=yp_M zfshIz7I;$tW87w$;e8~4hWPK$YgvxDrE7&4JncSFeZiT6d;Va~*HW*Nnck(WqqqEL z68S3Rhf?;%Am2hh`^g-hXN4OS1Vk%()|?{R1BQKQWKx^yUfIQGb2G8R?7UOg%r&Ed z7?kJUt$OFN-6|cDR|$nrNr8qg5^kyondcUdezC;O`&|2jkLRbRHz8)B(doMssewy> zi@t+&k$u(H&MoYGQAi;3p`6%xdX)R2+*I-QPggYZU|CE?ub6L8r4`#2vD3Fn+R85* zRAUlv0PMnOTj6CEx<|AwIN{hzlm7s2r9Zr6ZtGBgD=2Um@4er%D@nBqM_%YG+IIHZx-11_w_U8hu0 zb?iG@BzK9|CsdXCs)jTkR-R9)$XaH18$CQ;QG|*ONb2e9Kqf(};yx^jE*8gyKXQ=m z@md}_vrR%XPsFG!z23q)0~HbFOi7u0mPB{C2C7Ogk8AaRR`-co2}RtcutOdOxhK_j#nvg#6lC7QyTaOsy$I(J^J9c^s{+@wRgc< zj1hg4$3z_Aveq?6imkuCHl&}m$Z{C{DDLwJcg;Msy~|Ps-!U&(0|p)PJ8#eaV)o2x zF_*1X>OBFHjS|wEPW?1Xb?SLauGva5FH|-uu>akDGt8*j`8Vg$E3R+Aac48few;%8 zD2dIkbXhL?vQb{+ORn60ROyei+ds}S_u2WG6B8j?O*gfTnJQ8x9lvKlVj0UxZVO(! z;D(kA%Xn*7U{X$|b4x+we*lP&H|k(vPGHlQhrXgjLpGAk8+uo|Uy(wrVD7{5_0dK~ z+IeWJodEYHJv1C?!JS0E|{@aRxTqjn<6!7BDj{ zxs?isI9xkcA2%|3i5Ex`oK@TBHZwO?yg3>4(qBI(elOiWMx@6=inpZ+>iAKph)p{p zAZOLq&E#+H6FR@OH2YX&S$Q{$1*Zei`(ndn=h#jHaw6*bM#O8TM_xkLAAU6K3|rn+ z`w;U(H+sSQbB>_E`kP~Vfn{p8QWX`rC}&TRjJlU5-YNQN&qMGY%S6h^bhzDGelHN zWd)6hRqw3*Fym)Lt8UiQdDvZ=N#(X+^I1*3;u}%keGF!N;}H$zbnOIlushduJWheD zYSp&{7g9?|UefQZZyUsStZv@q%FR)-TM@TIlzp(Mu7mun5Glct#LX;Uy#&euMmyau zOa*u|+asRL>}kFh>i|B~_EfEZJNr@9WUt0}B#48hd7$<!e+i^ za+4^J(Vqb^<&S%G-5FmF8I!a{(C0(NGP>Z~sJHfZ-{1%sY`pS_13VH`11Z62QMd)1 zwlO)!oVQG|%-}I)>3#uSI8`7rmByO(MnLe3S+gDc0lIe){#N;)YTqA~iiVrYSKWW- z*|Wc6Nptt1f?QY$oF)rnQ&R$!mbVlUV?58tlqB_GCFF|Y>2~E>qV%@Q5I%7*)?b`b zOMff)haso)wF~|fnruNwEnN~Wp!|D0fLGvH`_{PN7 zvgi5i-)FJz0-7rls>0#kkwp=z{(cW;$^`^b^c{~3aJa#!$y!*a-#X4p`8+(m{lcSlI^jf-KDIRn z3|_Uf8j^l0*!m|S!)RUAnt1b|+@!T=Ht9A_i0KT`o`yP%4>-@JdzED?|F}+)-Bu^; zJJSvkFsT9k4-l;vJ99!e2RqLyoss+xfGYl|_9VGdn3$+nJlapEl7&G^jotZ4XGjqE zLIFo_Qft|OIhVkA_Cp7QO6$m6%}$t|i|%Y?oZIqhG|MJrd*<4KT9;~M)e(cpWF4xm z4(r}Jvy(LluZ#Rw$Rr4tYP+rKEGsiJqlgULf;TN1lrOra`{FF*M@Ms&Q)kW)sQv;itzw z+n%Q@CT~)>B}9oa^E|VnONFH0Q3XH2JWLVHeY478aA_*WfGR)JL(BLhH+&bSVPT%$ zgn{`FjY+Iqs@nl*%6;0rs2nFSG3>+N(yk14EvL*KYCN=R#MGz_Ria8P|C2WvQcu?@ z2-e>iMp|fvNB;+S1!w3OzRbJ-KVMMq2vNL|c;>DCB@%u|*G26?vIp0(%1&q5ygD6U zAGEA4WYrtx&&l*Xm!RbT{P#T+>mKEAe!lu(h&OJ$zw>WFtceG91vp%8u7mlO9nbqH z7l!xKUq^*cHCs1;D!quBa>NCp?1|9ltI@>#e5k^Tx1v$A^171gdTgoEJW)|I z&76jBMv~a6kEYFR2eDQ;k=EvoPcmyr+ThBp@3T;o&GXWZ&p1(j1lZjhwe@11<*p@S z;;h2$MXraB7bNAuBG*dY9a3waaMeD(f4@YvdOp7h$))O|OQLBONh}T!B}z2Jfn+{} z*t-24kWh?%jsN;TO7tkmCd4b`5T`Q|Ws^WLY)6k)LRu_|jNV>8zOW;zRM~=wBaIk8 z{-nSO%M_E1$%AGNtxK7cd-r?f746p|SybKQfv|g+Os6HB5vie(89`iCb=M^l!;5!C z8vU4*aVU;~Lp|Yi`X!{ZRH|R}X%3_B_j1xH@&Mt0)i26QZLF?$zD4Hvco9PVUB;pZ zKhe#J+BxFCahqc<$1%KdMj71y$Y0Y#x9=X}2`E$E^Bvc-$YTxHhMFlAUY_=@@@w%A zDfDcO!L7*w+{&_y9SMZqkI!liLnK96pD?M-4XUsA#Vc{9O7#b6@jcFJa(T0d*9*w9 zvlX@2`XXJJdgrcXsaEFpYE}I&9=G&37W_@7;twKXL=#)pgOU!5hy5FxmwvXovuOwH zj>2KL2OK*qj1>&6>mOVX&EmNfd;|(WLI%@$FVWJpVvPVsT>EZ{0>cNUhq3mpTaQ@9OA5|jsPp9^U~LsGQT!&s~Pl& z7!4YXSd@LUgW+AjX0_pZJCE3nPLSUh^0>OWJ&Z^cJ9fhp z1PJsXDpUavyZW=$G}voCk1KrMO{4eRbWcI6!Th`8P^{Ln5>Ipu_ww~NCHltqp$Qq? z8xx~WX&hmS$Xh~3!uPEZuFAvDn&Xw`XZD5Y2v9GrLd!zhl+WqxI+#ZkQgOt!LA$wA zQmDxIa5QEypwmvic_^zMS-p#=fzQlRD-PJK+1oGNmG3$bM_ISyxrc#s? zT__|134DLoS@=^I@<1hJCiL)uS@SLX7W7X;k|8o-8J$&}yfU?2DeADeC;p?xlBgZK>IbGYk9|ZDYC`*PBRi^^$lk6d$_n-%9IA!ok-?)&``V+R46cJ zVegTF9Oq{B;0`ktX`datG4&kdFDX+a%s|p2?o>}l5|u@2g%4z`wC#@{PAsVxOtv&P z`WTu)WlDRj?vm%*%H-Dbgl|rn``iAqfd22>^CLO)TDI0l#nm`HqITV*YzgH*@p@RE zXqC9bk2TAzQW8``3i4BIdZj4(4ET4Zt`f|%A**2mZSg=)6Kl@r&evco7KX~nJanY% zo)40@u249A7hxVJ-Cx3eqp8X7oTPBAE9l@6-=W|Yr*nFIbf4=A`s3>GHrp;l+RlNc zmd;D&X}0@BYD0?CrO$G?*GkWX5Z3|y*_9aGiCG}hJY{xUPv<{CHijwg(xm-Uln7^S zll*%zUxS-z5Nyklq557vgx>TOr_qdj=%U-N3bPrSh}Lt&m+7yOIsRlPo#$%F>Z0=u z9urJFkM!PD#y7G_BwW4y${joSp}Qem4?})Ea_4z?!KEkAfGT?e&nmvHDqmh}(uEI~ zJj5(`K^*+E#F|_LkgV?(tUMl3`RDpzbe{R`bh+2qnYpxM)yyybYY&g*Mgq%ea$W%g zgTLgQweb4l>=*KA>kB-M)&s8`jY#v!IHJN^3m!0JVcfGIOKk(gTsCY4PdKY-xtPgW zs?vHKD?g7u7{04qP$$Zft}0ew9lh>BLwTA}n!2y>v4flnGRcQ@pLzGvZCB1pslUa` z2lCZebrpH`wt&{*)V#`_hVL)t*X-4QHvf@pVp;5voSwE+sz{3$t`L5$mGiD(o+$PL zbIoNi;tW&3n~`>g(qvj4@Y8avp-Q4CLd?#*orM>nUmCIwU2@yKx|!Qk0^~b0?zFO< zBPR+Gew&itghP0jN%LNXpfDbcoaNv^pdy8y>54>ToMZD`o9Fu!$xkGQrUrU6`n~ z&b=;t#PljEwA>04X1T@rNI`^~nJr~L&PIPexy`LUl~1HS#j~c|HAs)3XBr8s z+`Y{~KJKzLEIonCRv!aNUZDrjBsJ!U_SSM5kNFYl(fJpgzH^7q)uNM?wOiXpXq_VC zTatqYTk;K*uYEJM(O^P1azHtF%e!ENa^2vIJqJW5sM0A6lCX^Jlc z2lfi%2)`N+YRqkTg9RuP_j>oX>>qc+pa4Noi&0ZAE&93#FUNacE?_QMRx?`hewJBl zmBq1med}Axe3lNbhc&hAS_?-!%q15MXM&*{Obi!PL z4OGmD*ONIBvcQQGd8t!G)j0IZV#0OOpY==pJI_Jye}Gjx7aM?%l_JUI_2MfUW07#C z%mqr2$tt_$ANN`q){i)(2HHJQ(bsxf?Aap-aA!)pZ!(AS=qw(^=BZaSq$5@TmUpkh zTwEdhxt#Y5{b&* z$Ht^pjod&SRkdE}n7|a*cho^$)Um(wF%K9`6x5(D4z_=G+4yq=)Yk4$*J7WS>{dyz*E%m6`Hacv!y0;458N;qvGV5jxJB~lb{)ir?6ErPiz7mA z$wUz)wfUD3&37BtT6KNCM59zpPv~)1CRb&+Xk*{Kzg1m8$h)!;b5fpg=0&u+r0HVg zuReSC)agDKv83fk7yaJY)hC8eOlzd9vEZPjMJ}~+8j^a28 zjyjhgPAD)X>+p1}Y_(gq20RTQ#BPN;fO)H_% z!j3R0>5W(2iuAr(sB%OD0#-J_%4uwoE0w-C7aSzPa=;^nYojLd#;-LmKWB{-swdq**8cOKGh+0qJG{2l*Snox0e~zGe z?1Xz#FCUK(vpIX6e@RwkCVNP`#+nF0FxX$|wE5DQw~KFI)vJw9x^funFp}}lgz_D{ zTWKX3IzK@_^Ya6MI65akPSFkqKer9}ns#tE@0A_vmC#(%6i9aAJ*fnTp5}o@{S@39 zzxvAO#@lw%;Da_I6H9mFUs9Z6(_G76M)Y0z!T=;s!EcWhaliKUvscecH)IlI+`*^l zouorm)+w2YK_Oo3%->iM@;{6202!b=o`zZ_4!5y|ooNgKt50!W+GmN!^9TnSJ^YYn zcgbRTn~}FTu@E}UT;lIB{%IJ!5^$u~g>(9sP`bjY+esh&>~HR~SH0D|&(&u5`s7yC zJPmE)-B3SPCid?S$KyiN(Lp?gi6Yngp@&5KZ*#<;E53%Kd}lq9g@eu<$~Wtxc2;;x z+Py6z;?1ge#=-kr~zat@!^Llm#^oGyKICXw5YUl(QYf936LD-sY z$<%=P^Rm2cu5{8ixS@H~^V~SI`r^J}K4N6~Lb14^f(^(0FvCxd92obNO!dAGtNCHE z7R%hue190Nz!wWwg2eLNHM@gw^F?ulMXQ(HgBF%65%)+fs@P+tA4566A`uzgw`zyJ zY5_#cWg?&Mk-z~?p+3YKW9gXsYitfoO(kqgmPl7FrP{sEY>k$RAe!Iou17-NT?r6M zrIDNuRQr`GOwvW%?oa~6^3FA1Hz)bw3(^j}i|-o?S9zprdGNyk zpAJ`e^ZhabkyII{K7m~gpXQo*h*vy}E1O@fTgMUWtCNK5-VjvbY<-VA&mNR@Ev9#E zA|!3FF{86TSiud1`vD*oCP0WAcp5@Aw=BJVx@^ z#S`hIDk;G=vE23jBF!hr9DY=ga*7!nn~YD=b|r@{y7WWcFHE`)SDy>4a(58^E1qC7 zH?ZArf|0bF#?BlgJ32phjGD}-KT$zTxMNmK>>j@UD*MZotk|l0)t!PCYYE1;%F=*3g)c&=MfIVor)kmQDfdS{j^e5QXn;G@i=TAmC=}*X$h{DW#+mol&g& z?`o5cSfQ^%0Y3CC=(_%(gaRhQ*3}2M>v!4sd04z4$An3Nj%r3a4o%RCOYjFD;9o4; zdB5SBcrY155>T~or0pKt7WR9S&#&d7R31%guUK=rDdmP=gin)b>2+#n2Yh>tsqtnKDPSuPq%cPnUHtyhgEm}VLSwY%!q^{G0^|S&M zoT<}rwpILzNKzB4IO1`yS8oW9>T~-Amzamn_%!%Tf*&({>AvvQ1{`CUi!YCg-7lSI zk29a#*FB+IIMphUN-r0=>IM?=s#&VwkE5&HCi008A;(=2P?F0sRYsBJLT4l*?Kef< zII;z&ful**BtW}Fj~VkkVtK3DMP|MyVom$pT^4e_!kdg9a?w&aXsGW>`z#p4O#L&UGHdbL(}~2$c=lp)5VIPX0L{fbs=W{c-N7P;J)HPM@|toO5>`?t`Gtm#u*mI#9VBI~(nhHOf#`DG-tbve-;&A3%CBU_S}nrJCcV(K zFky*5`i4uu;!F!6;?T>t>sCOQb9C5<9yUG}lNC>M0~MZ_c&H9b#(sT&qR<_dv)wx` zd-?HM&C~!U<7YEa%iR7Ni)ws=dHl9-N4Nxa=B$Hr%V{xS1k{sS0Jv`AsTH|Ut8Cn80z%5Ec;1fYT3)(= z16`sV7zM^nOU&o_E!vW7&3Yx|pnc0qT)W~aSKQ5C11+o>l|!M_Y)3vWE6DjFtC95; zB`jwVuA64yg!*}eHAO(Z73v=~;xuyUSE6t{zXT46+ci?q=Xcz$k2U^DL^g6Gg3jo; zmxdlE0i(ka!r&UJm}={B*zBndnHq}5xr<(JG0I?p*48%?lseC}1LkBPC{0lD2HLDg za@U%yZXVNg)SxJ_lqv0%sh%f}p}7mRA)WT(~sq z90iUC70e`49rXh3%a{)c7c#UqRg*ol+`!KN08?XJO|zSFMC30~Gy6=U?BZ|~hgQ6@ z=B*{;TyRbfUBjB*ac-b$TPeAfMBS_66s@Vif53c22B5AfFItOAdejesU}`Tzp_I#_ zuVPi-vm2B8>ed!2G%0mRQR6Yufyqm0m8qgBT(kW}uUXA#T>p>%+wKA?_z3_C>c4bFIgdl!jIKm>hh;=^R&e z!zrv9@9{meGJ!okd|EqIz-w-X@p-s4tN z@iGo^2Ntxe$zL#HTV`8(ev674(}gT_U;S%6$*57huFK*t1Q#p993Z5zv0gvyLDXAv z3HZ2(6dFNYw*pgw)jbWLw9$TL(tY*fEkIoHD3W^smj}$o7#rdtJ#!7!WcuK^st<>` zVD##10^?!vmRn9Q%%vZsO6+R095>w0CU=RVs~nkg1p!>2m|G@0^Bk+cnwp=vb5&BqFVxb3hiAM&c*z7#*|09pa9O@# z%S3IwW}%FqaTnCXtV_I??g`Ywe#wZaQ%CkuO_Rd9I++GvPzArZnkdv)ht0s&({mkS zV5Vejm5aIR7B45A&ZYAmnU*Z5ds2V0uJWZQ@#F}t(EC{|PX>Fz{maSU#P_XF$QBK@ zRwc3p7nEwD0F;R5C+$(GV%fwI=?PYrO7k4T3od%yE@iC8sOvhr!>Mm7+p;nn41eM|D%OX=Q05v(+yER_ zK4Fs=exmBG;}3F*uJ4|uThmN2i}Xd-yfHeVeMc%^i>Y`M_X6p`&B8HuGvSsCb%|lc zf3^AuNzyIYI(1paHdin0`Q@*@1i;w~z5DTC_6r7q2jTBWxVqj79^re*xuU>aD&F)J>Id zUL`59iJOHD;S#$0F;|PMz+0PTRz?ittx8p{u?+tJn1jQrU{gi1+F7zvQ+UKubz6wb zoWVx8;s*uy7XAB{f)D0fSow|c&xi*aF|!RY9u?H8qKGIetDH)~e=N@!d`B%uH=~@v z<=>n@UFVUFeK_tpbLF_206fP5iknSERWo^9-!G^j0}8sV!m(VE!FE*3JVXYW<}}fG z;$v8rjbisX)xF#=zGjLp?&4QGZZ*k|sbE)#w$M=@PA{mjRmaH#H&(}5&oe5pXLa{mh+dy?^PibjR1?u0 zh1|j4xH!VHwfI&3!FY z9ZZ}^b(Xw;tV#PswoA6^XMl@k|^Zx*Nn8yaeNSn_a_X6nEh2&VoNTTxxj+w6WF^pnel}EdmSnqHxboXp@YOx5FksOsz#C$ez(JBFV6>(!8<4b|d zxD_n7Z!roLiBZ6s@hM%=tK4x<<|;P(>QHd=215XAsIHn~+#jt(bN*(V5#l?#f;eN3 zP*2P-V`RGPfa-FGz+!NrgZ^NCVI!o#a0NqBYf*|Q$}pP*C}`+r2OV%kOF1q3j#S_* z+tJWDSOJvST>y#2{E!kufm`EJmp(A9P)u&o(XPKyTx)!adIv!*pwPg+em>&55jeKK zrf;W78ZBpRc>r;$ik8M;6OAQYSRtNZ;T)~OINYf>EMls=nbQvk5L^UXcZe2aF;T2A zIOY#h?S`XjW8yl%#mRYh9PgN`@#;B$#%6|zi%{)&>RbIHS6E-T({TYgVWQ2EH;Glw zxP@Dnc$he1ZLIp4bDt8|l|-X2#Cq4coc^JmXN!nGvowJkLa`~k>!{^YQE>cA6!ZL! zE}1bdoMXgZ6LAioQmM=1cZr+EM5fSyV>bKd20VCSLl~ld7(Kp-`Ccv&Yl&0=#GwS& zBySO|&PB0e#x!`DV6ruLc5%e4x%E*IP(EeeR#22?9g3-^&o?f=q_<9SvKAEslHYN` ztn(dU#HETij}qzO^)G#CsdxI!Z>G0XhA}RRO6D25!!cZHrXF=N8N}(khMP-VRYPg1 z=a3s0EVZ}Y@3Y3mGa zDVWw!CLD9)m^)MM8+E6KUE`RnqQ?~y%#!64p5_t&C;gV%^%As5v%qGRGa&4Ia(j7V@`vGK~p_Kh`PWlzKwbsMO6UGu~-@|0#?3cdlqU)abo>8RZUdOQo<oE0!uDq^D?+bk3df|@>29}ST@W&MwL7|b*xU9#y?Fda{r_z9Zt45o zzsP*ey@7cgdr!nDj$9CtSaHXgNtJck*USa*01XBrkY&WPU-d(_#*tSUOv$G3f8;1O z8bwSE5`j#NKuUL>^A2v?FfLPDVIbp1rv)2$3AcoTfKjPLjGP;r3bf5e;?)GFCsOoe zea88?Gg;1AZ!Y{r;%Ot1NtYN5wq!Om|wn7_xE;b_m8U-}}L!#@XPZu))23}t*v z4>zxKV~fX`gr*%dJbR8V)xb7=48pJXaMK?#p+>HygL~|`b(gabC%cZR zs3+dD|>vveIB4aoOzhf5k#XKh~pnD#V&OOS|(3(1tuYn2NLU_ikJg= z<~q9hC0fo-W43eV3|sXaGu#bZEgaY8U52sD8hDu5sI4yHmHUY2@5E4gu#KTcrd@7Z z^EU2YF}QHL>QO*(+zh$IH)TH%d?db|MQb|qF#GGM7ll4z>x<1)3mfZeDBDwpKNA$z z<3n|w!J$6{yzf4uY`DH)7VMW^Jd&3{9~?%oS7x4>H5oQp^jMY}MvoJwR#E8S4>ANr;|PpHnOTAt`4M zD^O${1|~}kZRDj{2EAtxpbBx!xuh1FgluNfyhWs6 z4;_#NqQb{yIIOqAKmp)&F#^-fG_iwNl&$>0a@CQ}+pZu=1{gOj_<|EOMWejLwCdyS zH!`SGV6}HH^4zSZqcbs(e-S)5-NkAJ?o)ZUxB%UTqj|7qc^ir~Mfsf89%9XN#9L$8 z1c5;9fWdE=nzgBGka7`vE&NI_Yn&}h@EA0JdcsmM<=ZQxjJ*>AH!t1m@iOUY$hiY z<$ogdVyfj}<=yHcGM*w63iwE1UJfPkQk6O$rns(HB{ep;T|i*d&zV<8?jy=t0Ol+( zOOV6dwvK(q!=tE}5skh%sPj$xfum=M;C#R-7%As4!B>{96fJWcZC9a+-f9@n)Z-G4 z*oF)`)Nto|uA_(nh5CaxkqEnD;iHl|fq5m#w^bIUFP+L#!TiU$3eClUSZ_+QR!2O& zOyw0gjRoM`LY4eaQn#FHQgnHa_0JJ3GoEEzSH|Fdr48de!BE7dt;~*AjwW!_v90@= zuP2GlHpVy3t|eT2T(oji2HZfvy7MaP^TfBncP|_995&*2-*CGeO(&K6i?L#+_|q=S zH#eJoOD$;iEbu;hiN@~YFLh)RS-Pk^M(eB0Tc>2ZIh;@B;DRFO}VsC5=)t)(;%IicbvtM!cH7bi% z;=@-?Y6HW~!GLp#;hf7`>MhZqP`eb@nZ^e7A6yHgID_{5LTJdc?He*Mxw?&&rH`z(+C=^7yWZIitNidf5b@^tU$qS!s^Lq zL=u6A^DEdfqmQ`OnuXGY+J+`hA21L1E;m?#csxpRE>^5xF~r!#&AHg(8cD~P?Zj7E zvbP7oe~C<&oyAS%%vmODxGNhu#BAcXlTmk8{@t}CHv^UTx>=Ky~3 zIorg1Rc;;i8?Yf)`>fqeZCC}~3fJNTgXFCfDi>g;_{PXD4jUieGaiYZw@j+g8mg9u zA;F*cjkgz>XcSF+GN4rj+y4Mm9=xb12B_&NhZ){|OC4pIrI?mx?*9OC+RK;bD7=!_ zhT@}o+@ig-%VIgI)U`(I9L+8`iCNWV;J+M20hK{ZlyN9+YNc;2N(;-93(pY_UoA|a zfKnzsZZ_;*8L&9HLb0Brty{%P9p|ZS)iI3f8>T)edEyrP>R(0tPsr<;n#Q+tjP(Os z+^byq%QHc{f~7mmv4U)PugX}Pd>;x}F;<5-kw)kh1gO(<1+o&~<3H9|v2qAQaP1_RjpWHH((*}0@$K8L4vwDi=~Jnl3eW!=}fBYN-RA$Z4#3g?e9vC{yj%ml-qa;vf8V)9f|4W^u8Wt#Ya zrRDR))`7W;+yprDEHn9v0ePM_UIJm}r)@o4Jf3E24S0;qHQXRq#B$cEWH02D4~R7kf2FQUF-6cW;@1U_275ktmA?bXeq1S_k=b;*od7Us7LZbG>p zpp^kbqCOa`hTEx5A~U_LRq!wxFlTVw#+V-)9Lve;5ww+?(9!iC!z89G-E6Z0#*vrj z3n>&P52iE%zM#J}dyZwaA-^mKhlr#b;x;j@w>w;}&0~@la^#kwc<7eqh5gPrejtP2KU7-pAT zKctmuT56?np`4Wcux+(6#JakUx~?Y_VQgp2wuc?c4X5TfC6($W2J=@0P-unOdEHDY zylM+ryYVbNxPw$Vm*$r`hry|K)X+G_+_#pjLoaPoVSMc z-08IHQnprj?g$Izm@|*$0MW!cV?D<&1aJ77Dzzx2ElGw|iHy2Ibm`E`!MND*1*wE%R~DZ0H{{nyUGh3_`1fc$G~Yz^_*obY?1{&(%SrI=a^zqz)hcInlLa{UGfQaIN-ke?%ga$dpi#hQb0F~qtJjLTOtnO-W}JpNf>6iA zGh_RS_2OZ1x|*&1%qB0xD(N)C%R0uT7T&m&wQq8_MlKn^na45S8s#f^r zxMhqosAFdRu)Njyt|IW^;gtUX)=_%_VDje|aWAIzE2(vjM7?Y~nfUGtZGL436Sg&} zvA6|ozY|aQD=&@19N&qX$#YKfVk>ve+&QK^?p-ZcaM^OS>C{}_u3h$otd;Jn7%y>N zrmCFFZu3&#eq|0|FZnj75Gk0)7q}4A!;h+Q5zABRmU5TomVUXo+Hz8 zo_t~gm09jJhF&!bv#Xa*p<%1JjBor#{O(mQE}+YDi^^Fo6cjrmD8;v1mb|oj%-VO{ z(qGpy{o))}ekG1fcCP92x%!TT89}H2DK1Aaa4*DB9y2x8Y8M(W%x$Ylb8NJ8h;7(!K1ji?%!9$uUvq} zB0|CFtC$`2O0&q5F#{xX>IgTsBUU<7D0yEM1P0j!FiA6xAYo>Y5hoRcwBm01ioE?o z+_!Am%M)4Db9t8YiDNiZn1ri)oZlSEZ5UX6^$|@`-!lqvcbK8A#;+ex9X-vkW*D-M zFrmAZ>mG9&H+g|WXVmA6{oDmNh};>Z#42D}chpmp%398d^e$yjEEwC2{vk$XFxSuW z0ks<~T@fM5+6S83h+mR9`~ZufkjX*do!IUNU+oBJinkaw^(ll_7tK|lm~e5cn(^t} zz5A!RRazdrL@mXeAggV63bK8&?XTe#O&^{ho}+&J#ju+{aK+vH60kRu5i2E~LWZ9# zKs<39bx}Z-RJ_M;7X}`EO9lyKQu8&OxR^GxPz!?{?-;t!X& zlorPNR4B!KLd37cs{7(!?}>rVC1=MoESmEku9!0a021!0$B5zasnOP}aNGu}lz5o4 ztK8=;7gYfLaK*xoN8#MT$$P<%Ssg_%J`Q5s@i z70;;7Tz03ZY)+wjJ0h|U$~SC366Ct9OBbIYrd-LnR>Te&Yis_@+;XhU9J%)WmRXE-I&<1(qg_ZMOOV>8G&23q8Y98HCo1b^-#i%dIqn7K5q{{WOxb1YrDA}BiIE5XRZJA1ia z$BHIao!s91R%34HUzC5WdZ^XNCZG;Ca)3dA>%?OXjNWEO9_t4j!r>L7JSYkVqSQu( zXXX%MH(%qJYjc_w81tNB9P)JtqG!xeTS<4E zc!NRl8lS^H81iUe?mHgm0fek`8jWBBMYxJphcf~%ps#G9+a~A3P_-ePn7HDC15N}~ z!3)AK@fNr#DO92Yf`LJk3fGu{dk6>hW1?-zSUG&W$Ha-w@f#UIM_fk9SGmkr%-kbh z4Z!C&%P~wpFiUN|swknSxGFMPnXW8+O(RB(gl@BNC^LkJrW>lMN*LL7xv_2h#Hcmm zg03*M_bzExr7t*`F7DWzvEnPGcigwPY{z!W=C{qmJbLpmzuu))AM-PPkTUM|iO+^8 z(Wvp%K&z*xxRk%SLiH~fdVyZ%{AQxGr-+NM#4Wpk?um_2O?r*E%6Mj*$GJr=@#b3? z#KX>Ex+(-RH&NBxbF5MF%`110a>Dlas3m0|H7OHknP^>e>MaulvVNS zRh2m2t5EPW^d|C{-Jj zR%US+7P+pzV&2(ySvHx>G+22ts_EA5Szn|E8$?)IT-<33zual9_qeNH?q>nl6GFND zv8v1SFO7MW;c0apDhCr+{{WD|S+5fiVBA@&_k-e80iD_3#lM0LNkA&%ENJ$Wouy(J zD^)^2>M=pVsAAhdyqqy<^5O|;$kjrOC3uaJ!~x8B?PE7&Eoq!$JNA``47sea7;7%P zB&`X01gV_J2`J2&+!!kIB{kGK#Z9H)G$N(Ju|t7FcIGa@6>1RX7^oFya3 zp%VtKboX&800OMMKCZVAlx%+q>eGSp7Nf+@`F<)b#T%{2(1z)F_0< z#K6U}in>SC%~ACWDBVEH)_MN`+U+N<5NNZ0A?Dk@wn$h znLzV!ftqLz-X+jYkzlYrs9%-=02K}g_#n&{wRwY?w6^i)qO+#!hj33b1iSUzLk#A! zOOAr$&RZ7Ziz_Wc&O4{&6a z2)BbOx`LQ!d?Y#;1JC4+h>ecl5f!>LA2DqhnQ9avxN`?^5H4OqX_JT-idqf`;u7)> z<>KEk3bU7~O)S!#ekFka0M#g7-*eBL%EuMps9zJs*h|}$UmAsTvwz|QP~#*EEY_`n zZ_ckW<$yQe5GdYtLlq1M2;}n*#Olq9oSrW;77$yFhCh&aMSVm9g&BOoQ^PGB%NU6< zoe?zS&PV&1iL0c_wk2!TXU`wjHd(|M%TXR}^(@%>jo$h0Qmp;KYg&z>W#VC%b*q-X z4r`b(X&m#S* zVYBqips#DaTw(US#bp4ixu0{>QLqL0mgWpOB3&6|A~z|6anaiONBsN@9$>BKvN?5k z_b(+k>Lu1k8I@&-uQv}UR($R|6Lpz)#$p=A0J4?0^(f);k##D7B4N8pRym9k(}B1P zP2yFL(ue2E?*x7+wknnIJVb@2sQ&=IWl0syF;So_X5gfmc+4)H@$MS+a&tyssFy}s z=-Q4@{P}>zN&zV^Wl8{CM|5lT4=1zopX|U1kWN|wzotJL;qWmjidDrw9ihjWM_{yA z6wY#Rj7|kG7{7Bjv8CmQNSk3ahOQi3D;xGq0h3BT>{~CEzj1sPe_YnDrf` zD6O&KXu`Ge7c#h5OAy&8qYe}p1dYay6}dw|pcDjRz~(Uq_ZFKFiGaH?0lx@f^A9C) z3ibV((WAa)S<>H80#ekdqU-f5CIhJJl8)muRh_^!FO9b>1yDmidyNF2*e!%Z%G)$F zFJFqM1dPt-`o+ZXVURbuR-ogawC+!ufvp?%8TkUT-LvzdtY^(xu9 z&ld|{d`k;+lBt52*_gXIzsxS)FU(=m5gJ4@JK~s~3YMHe9<`@c3^i@*WTLf9MrI+G z%)q^z)Ir4Tg6QsBtN4f#iGV7X9#XrAnz~@ELxv!7@VLdkrCNg@_bBflxEG!tBGzcH zF|RW7{f#a1VrG{Fw#-~HnAS6j=3aBCt-stlXT)ED+!37_s9ul$!Q%{0xng4L600E( zGK^+;E+A*;)Zi*rcAry^e=#?|6O$U6Ph8Ab@5D`&o+4JabE5ts;Y;FX**sM4K&6f> zgMSlJrSJ{RL!7=Gx|Ft3+EsG{D(H;{A!ikcjts;tj1{$YxRQmLkO*F0f?-z*>ZU^# z-(=_Habk$T9%fS0m$#^hG`m;z7$lB)_bLt;97dK#%-2}vDB3(LaM1zZA7KiRm;p-4 zC`TBBj(NcxY72wa=XK&MR?XdJH8%c{i_Oe^cU(tCZ3u3-Bz0Rskp3csvZ}b=VD(mw zF&{AG)Ab4_hG^WSy`*kt(lu_MQDM?n$1>Tja!cOuSmX?wD^X|)ngf_!th{Ha{{TPg zFf+hB2Wu-v-(I%8w>s+jw08( ziwTNxi_{TqYTi1EviNiD@YdX8NOpt{^qNGLWR8=6HGJ=6qYz0F=&K~XPrAQ&5;4CZFg9Pj84c2p=C!%8CZN~V4*#koRcc5%*jkw42Rri1*Rn%0$yd7 zIZ6|)@u`OkQO3!W;~wJKWtRmu7x4w;(-pO-okHTnM=;PC-?)?_uKAB3VRZm_ET=37 z3#T{CzR}~%Nv#FzI8iD=pa8|iEC!C>2G~JSbIrjJ?TRw=G-bR$QME!(vBqW8D~#wn zqp5idC9ff7{Nhl9oRn46a*4YlU#{bwYdl1-UH)UF-FU>Zplb_>TDDDS-cfsK4X6yMBTfWvv*4iBhdtjaw6 z_dFfTuCpnAm{IG*4*6qT(8@#JdWDag<~hN{Gxs?aX$swY;v<%r*|diigIrBFDw40v zSmt+XB z&zO}8TwY%into%73lFOtF3OrE*;4mQ^#J84sZ3TO;vOM!XNc{L%Lze(rSA&{LRzjk zmawNBLIk56MHw!u^#v8G@fsyhClO&&zUXKj2Z0ViZVM@{$;%kV7W(gz`>YKDk}gwKjvbpik!aLg3ZXV{{T{~QPr}`H@VMg z?mLjNu%(PjfsHqqUKcH_XjnjEly|H!i=!?9l_a?U%qoGqXkryXw@osz)E2OKW1Rsx zz91W{@Ih09(|#1sAt!hUP7%>`m>YAiDFa+c85BEZ~dEcpL>f&Cg=r5Bq1rnh$|;| zm*ycL(Pt8yENY$(YB{oC>6}0fJCC^Vtfvst2rHhTSW1xACRGbi{y@gqS$pOT6lIp9 zNdhwKxL6bkku1_e!R}Zn;WRvKyR4jb?!T5pA!Btk?vNh zNvep2;4d=EL!RJAituU`1$4HR+xUQ2E4ni)kPa+4jserf@dDr%n;Xm_MU-+Ob2$XG zbPp^w0iHBhSbWlDNH4~Sk<;}YDjltt)Kyn*@hDD2AcuziLE6bZm> z_cw%C4nj$`X~WrArN$_$BnJg8u+07U=AV3)Jp$o76s6cFXhE@QK7T zcDafZ3e;ayg5iqSkBL>CTyMx@a4^MoOMx(0s``lTNF78vVcv9RWV9H>M)IvqI_!bL z)@mx%^T`@xuAyF7_}StBznRV#IEFv=SEra^xI9)NPI0J|=#_bE6N<|-MM}KQ;iz6N z>$oV+GcTUGso*SyR0MA@yY}i{D~NK@+|M=QP>nbJf|b2^l9HK70Nj(v*uN6GUZ=TDw?c6oJThT_EqsJp@u9%4IWLbMv14yhqKf(4{oEoBc>MH zxQ*`$s<>^dVN+1iL7ETDDV)mkp))OVkf26ZQ$)eq>id9-i*oFQrzTE*VKpv-7Iws3 zgebZU;^P4^;CA_n6G{j|lOG?s)uF0@BfICQuD9gO#xPN+sVLy2r3JmaJwm5#H+>)3 zNV5jf&b6r34X);73^QtkfEQQ($U4>pYdupcEiLl#EP+6cA8DQS05S_sQD;w@ES zczi}0o=k;I%9A9r6Bh)WeT}wj@d*1$ybhra=m%vWM1QubTtf}!^W5LIKPV%%4AK*R zq6}2BP*Bs5<}!xbWv&o~ioHxn?JolhnWf0oYm$dihIXCJLRX1NL1PkhNuxATLiH1Ji1Q@WmgZQ}B zj8Puz8&7O7vb}iT1h}$n8utdT;Ehe0?3s4HCIv_5sZEsLBHT129zlypDmF6c1g=}u zCIwv6aLBBcOt$hfGa|QmK4FzW#p)0Zn9iYLRc?(%bztn-7G;fxm^2Q0reG1Qda_a! zvy8?#>{}HE)0JWX1@Lz@G#BOhi$QI%P}KA#^D0(HTBYDK5h`kou>@eal^e!ue8MUH zq8CMOrHe(){%R|dIlsk4*b#mc*NCepHkiL;0f=VPG4)1KPHGNTGP;JsLV?0ZU^WIm zCOoNYchL!AG(GKrRScVo$lmW!MQq^g#7L`@O#74mW^Ii9o?)JE?b4O<`KAG6IIa)w>3-<-mNx03;w_^ z>aMMixK!^^d-o_dgDefA#g0BBc!tzl{!Edw7rKP#8gYC}(i$x@50ur#P^P;`-Y>+W zB@~gLa;hJ({vonxPM|JM&VNy9fmMiUPIlg^7Kxah&7e@+GZ|BLFOnWfVgbImm&I~2 zs;UU&pUhFa7gFd_rA#iXQI2uMYm3h6<(-&96iz)su&9B2LO3|>f&=K3rXMnz>Ej7V z?3ED_Ob$~Z*}0Ij1Jo=IfWW2Ie9NIYnC0{00L3PknRl#s5&;8N_=UEhwvN3+cTrVg zCawyacTmW-kSrIJ<~U~|UVV4CM;H&7fy-{DI}gX)7je6cM-U(PIJT{ zw3SuMFzxDA@v}0s;#0#u5i-v0hq!PQrA)IU zO+cmYrQ(B4ZJpk9yh6P`P%+eI5rMs!Ax(5vQ>%*Tf&=>u8gh1esnYOmuuutZN=#Ju zZ~d4iZB{n`02nJ>d_@u@@Ghnr!s+buE?0Gnbu#dp#%AmRJ$RhNBKrRTa4aFLV>cMf zq%Ny+i3)9dmqBB9!4l&pokq#Rw6&ix+ifz&DpJcj@f<`hM5D!X0@|pH?zn$*VFipKHbRQ3%;2Tyuh}y>Z3BO8IY3TjS zfqb_$AH>%k9?13h!czP96IGxmTvWU)_ykfZC<3X0B}LU*_>Q}QvBk#lDozNhaNs;I znQXY9J%iEU-QPEft~&Nm7=h1?S<5VkW^L2c*fyo z=uo??#K)WJ1x2F{Sn|ao6c>XPQd3*$xL^ow@T#%CHz`v{+2zl2=}tG21v{^BdvfvO zZ3esywW|(^y#8W|$HZ>&ip58G(Jj(_OqA9pEHBjC)8o4Ya50&hEtvF#H%$N z((l~SlF{6Ab#WBN6B3TI!4qk-$%y6gDKoC>bIN>N(&~$b$8fL<{6kJJJBf{IrD#(r zb7ZP=)#nh?pQsqVJjBOQdEVx8oBT@U#L;P^s9o;L&C9wX?O1tJ7^y~T4Q(sTPA}AI z%3FAVsl$lZiJU40IK{)e^?b@L;wL+~(|-`NR62*>tkG2|WJe=&D=!RIWu0eK$`b1o zH4&wYyK=(D{^u&0z3~%ROP0ugFHuRt1EAigv*4&+WtqTJ%jwpYNdGb z(+lHCz1>Oz;yU0AZ^YiSug=g^|;7bMO`i9)C!|b_2mp&>a)H+1NSj^CL*9#+3-r?P-JPH^3%iS1#1E4r~nQn ztcZZ~)@w{6TlTjbDiIZQ`TU(HUI839Sv@LJ7Wg zT5>#kit-pGR2JLm!VQHQ6gB2h9NxiZ?jGw};Zo#F3i_6&Y7454R;x7KM#4*Teax;! zV{xK81g4l&7-c{v`(^RsJ3&4(5e^!Ktw7+EwBv|^vo2V%IU^QOt9LFhOnH{If~}^2 z2LZ&eTsa|xD*5gKP3BNr$%P_^D#2uL8z9!R<8T*QbeXBeXNbx!0(OtId^Cf{mQ`7v zT}F*8)hiWpE&l*KN`i%M-TW}E1=U$85h0r69eltc?3kEh%OZEV#Dc+KhHP-%SlmNO z6d*Kp4_ z0qj_C1kHH!4Jm)>U7399A#ZEkF|!}I7;#*{r@2&LA#lBJzYuf#8Ka7pSDgLJGQWt8 ztL^|6)VXVsmk5VTl-H5_i!`HBgBKKD1@kCB5ge+sdX?TD5E|2=5ME5~U0@+X@#X+s zPHItUO=5_%!0Kkv!;7eGXUykn3J!XJC=!cgjOn|)aTIbZfNCbuop~Y>GXgcvAeW7_ zE(IAHqihNgQF}>Q3{zST0$jdV`3GLrL@kY;Nb4dUp#K24!3VPo?k8*6d(2oCfWrE7 za+USodP?s$4)2n?n1iUh2xX1CtiiSeKE;PmPxd_lhKu#wVIFPCZNKD88&hM9_bhp1 z68_^!^W~mxAPUjF?-MX`nL|#)exYwP0gvh$U?7i(Dl5KYQW(F9LxKd>0b#HBk9vSL z)J5uBwB?I|vaYimv6F3W?kOT*s~kYF$8K1vJy}ysd2Pj&@{Z4)*>rPeH zVuBW;%B}YhYf2#CzDUJEi*&Ca*^bqxO+3NYxpaN-%WO_bZA)|&>iXhcoNLZ9cRu!ybHRUwtP#ui1!v!cB zd5u;~V~FIlsc1LRD`0}q1b^h)a^w2O59v~fFp8Neuz`SZMefKnHT+7$;rgB&Khi%6j zH1jY+R}*%X8#ty8b5fXdTwJ=Ud7H9?>Nv3j(JB7`2)X|NFzMG){{Y->oMv*M--uhD zB~}Sq-ZK*%Uzt?qIeWdzqb}oP{z=cwJ{@r##Nf2~4; zJZ7i|&%NGlOP%B0+B&$mR;}J#vMGKi^vfG;NnF_=F zji7Az131i3C~gWjzZsRVw@J*W0^>w3EK3x?5rdkB+zrYUM!DQUOpmx6GiKqH&0E)^ zQ;=L20XuOG##;+Yc#U&cpzbO`xBH71MXrpnOhDEq3%b?U#6a-1cLxkCG{18i#kLN- z!~j!;*%XE&Zhj%IKvwPNxO_lbp3n6bn#>l(G~7|aL-IXKeoQxI`MyZ1N-LlIBJ#+T z0*Rl92yC{>nz1HAQ6Y3Ojz&^xOJ?1Srj(_=6$cS8-JV+12DB>CPktf1yG3XG&K%t|TC&<=lrUEZ#6v-_+siCc8wt4WP}!^j7Mxn2 zXJVa2tXfv#P>PnDdSD+jx^K^kSdrTPW5X>{QuP)<>kM2a^jclG{YIlz z2UP$`FtKvV9hYjbjMWZa zA{hHzzTr4pENUIHL|c4wHnahToakaH6> zLgvPv1k~Om2q*4Wf!`cF;+lcC_4xP zELxdbv~ci3YZ0KSPmO*4;al>L>=fA5w)_&-V%On_3&*qSR6~jjs4lEnxPey%o^u2l zsJlCfA{Rk&qMDUvp)#8i!m}vd=0M}yDPg|8kC>%s0n3|Dkc;x_ps#Vg0L)YD@J0ry zC|B78=+Z;#-ick*sxy3Fh~&J9&P^Gfz@r^8-4d1|TVdhipjhh)v0EHey1QH4$4?ME zimn0(dH}qq3~_#8MC+y?pSeo5^knL0P0CLt8Aj>W7iA|5%$|DsA zgI;@FvFM7dgM-A#TTj|BIMl2@pqt)UU^6_E$d= zhd4I6XE7BS)HZ*Z2EfrMVuZ92Z{||fYVtNak5F-IeZy62gSMldoE8WTjwXy-0POWH zW5a!Qh$_v%FF)dM*MmWWx{OzbHI}9aC@HU~JrUVaE_fPo4-!~$sDlo5non(H>EG*!x3teX5VK~3J#0YV00Sy1=HQ~@7TB!{||nCzoI+&<w(H_p zfMbbA7FW5RwXbswl;)w5{{RyU6|< z^IM67`7iG86N*fBP5f>od3labC(GPCKBBAhy~@T*ypo=i(G{R(0IFlj7h><5;&3Ye z05X*?UZr8~=33ciCzIk+V=ksFt>R?xpY=mCiI-*l%R@oZUyUCSTyO?f7^Lv|ijH_5 zUf?aGMbyDm!AoLm!=}9ND&UK})wdRbW+g)VmAQ+1RD`*RAXyUEuj?kl+HFKlW< zqgO0p35~(Q0_(R^0@>sDDmI~l037b^+bpF;f9V}nsmyhuXT#h;1G_vEP#iq@jwJ%v zmfM`lF)G$ahqxP73bAhs<*SQ|Jr|+dC>?Q|uoeZ+4x+Rih~nelL!0JM31-%Y9X_;d zZr#kG&N;tbz9K@trCb@lIhL^|tXk-ojs@dS{KPAZN*A6bqnaowyj=8*tCL=0$Y>*f z@hT$L(V`zNBUz5995g$}Fr?^lF)oDF!94hy8lXojJT_-C^Hze@+GVvvu<&2ZIdc#T ze{5m~4<@>d+A7iJ42mWFpow0Ne8C|>geoKQP`u5i*ltyI2$mQ|;x@snN|w-O+JOLd zv5i>3-4OuW8f!7fl)zeJx@)dj6o#ImjKeMR%pjFfZ*q4pdT*$!Z-R&wNbHGR!qw#F z6$tpGf)z#u;oJC(a5J}k#GM)2MS6jB6RRp3jt3fMkQ02dRn93~SV{}Lw@5v3m9)8I z#8sH4HFpHCC_2We=x5J2-9j{BLA5de0Cf_TSiu~Hc!eCFalpKI*+1+@H+$~k zbe}a0sl?aIsAlN(Hr?(eInB$b0}ZRsQtvigw)+0XZp%N!FM5+>IEYzS zM67sf1?w{bYTJ%(^IVYE5e4AJryW-?Y)xWqSNL_6*tZR89 z7i#kozCA{Cp54o71?_biCV33XtIp~D!~_REVks5X-QS5)E|o?HpV5>$%gxH74BhTm z399)(hJVTiRN5SvWzjEj8r?8(OU}BmRW%l}(1Aj2f&T!?cMiq43bzfYrxU#h`o@e$KpG%b4)cy?}*oN@|<`b+}_4Dcono_!Fz8Iy&&l-O9Xtw(30#9OAkTn+%~io_f= z1Zu}B-c{5q5a{M*k--sNE`k35RK_PG+#p+~^nYhKssan-DSwzyofh6zl{(YUETl>` z>h7f$3N6iWj2~bxhyzer*D=e_a}j2_bj7?J&Y{Vwj^1SvIW}K7c#Y$d^$wafeas>) z7z4$zS);I{FA}Kiv^H>em>Phapbs|hcS4w^p+#6T5cFGtWfVMwzxr3Bh`(v$H{23c zV}W^?ID~lr08xalLpEoqRn<+K%v=h-4_C}VqM-qY6}h4k+s4s{rx9xb?BZZgQ8+QV z=V0HzF@Li)$8*ZEdVa!1PV5WrKz&+;xrP< z)L<~Z2UwyTKWoy1iieZ)9udG6(m z7l~GdwtZXzG>b|#l(>!qLz*BcQr+)RP%oX#L5q+;rAsAl<}d)P{w`du4glP`X%>2o zuq~{e`IwP*r?f&n&YqyNRf3)r)Ks3E2e=kuAEIRA{c_90+w5c|AiZhY(qszM*1d?=vVU@=Lvs5xa)F zbVRVK_XvV&1U4cyr!@w3jXU{|0*746Lpy3@2SThM;EtXl75A$R&EXgdwPqS*mU~*! z#H*@|p~R>-RZzUGWxU)3=iJ;A0PUP6GfalzHBj~|fIsG9uA`+2op}XQ&GRg6$o~M& zB>@)F?e#5%?P$hLSJI-cQSf;s*jCfO5jT(lcAR2X=+>2Y4^enpmI}q+n9YR}e*x1_ zcp$ckt*>vG^a5V`_vTeg2P_K#9abZyfytIMJB0+>EX{mP%3m&m0Ipau4C$euTec|D z?6P+dqKipFsL;8Kz^Sh$ByLe_zThT;hx|)pq+H-%Q(MptbV{la0*zk;RbVx-a_5U8 z2F{>gkle}Y`jkl%ou%{Zi-nE7v`W1{6AsKtx)=buYN&f{)a& z8&~rh=G+QSB9hvuoLZJjNi}Ov+X&@DcbMe2#$ymE&UY&4ps0b1;ohOO0+yhv%B`>= za&up}y&XhQ0q?n+>zqrh3e>`{$^wGlnyJ}FYVfl!h=l3={2{f+fS37~rt{2q(duBI zu?ukHlbF>7y+;R_0`P?iSoJceUSnW)E}c`<&0`ZuqJE=xRfHP6f8<`>@f$UM`iY!f zTnMYKV&|UiiJivE*0&Bl!NFrg`R-b5V%e^Kq3xa`(d)Rc6z^fU(7aJ|4}vR`^8ngl z#4us65l8<3CL2EDsOK*-_h-#T##)F>U20ic2~JGMA(DtT^lAm&B(m+eyqnZO{{W~$ zj$5|vn}uV!MVhY>TyIPjbpo!gQNZb#B|1wPF#%V&FN z1#n$P0u_`uD(qh^eqv6lNLa~z=0Nn8HH?&Tfd1+w)G9tZ-8zaDtcP_hFY6b z&-jP_LzZ8L45N@0tB9AnyG=oYUz4}Eo~Y=qe8keiRbx`>J*-Tw0QD6IB||^~=U8Ed ztuc?NjE4hIXB85m6tsEj9Gj0;S6s0ojihr`uX3wRnHHKK5Zi#PsdDE~E(D;?h9Xtq ze-MQbyxe7%iy?`0G{++=jP4rm3PFaAuTdn<<)j=FnP8R|hh4;F7XD!Z0H|uB8^|GC5weQPLjyMM7UO z*IK06y`*4*S$^a1n5l28=P|_UZn>wKjp1+}D*QyEwTjL-VrIdarscT^99(^n35zQ6 zPo@og)|-YiB)b0qP(8OGxtG%6r}xZtccd>ng^lDGCL#j?c~(a>oTFC|;g+Tjn<+i) zmn=C;*%g39tK-a9^f25YNMz(Cq&XczL1ME6NDG546&M_M0ofYxlt%6@u2Uef;woGN zIf|BR5Y~6B>HH`vm9_*Dwx|r}- zp6w;hg-S0U`B7CPm5q_J9FvveCQrMpLs`jS$#q+nHB`mBV}?J}URtOlVSh8MV2Ju4 zfmp3vO!0E*HSVRq;tl!t0)u!sirUxWEES?xG|$_aibCg&q#Wlm$}vw8^G;?MO)v#x z#5aN$VxW|@U%6@Pbi@}goyELw9n{3l%M9{)h4Q{*RgFWXrr=S>)XpjRi*<zSG?R50nB;TIH)yr)Wf4X zqlraD6xXOKIrPM+L70RX>Sb<=(8jP;z|YJ#UfUyr4C7I8s=t_2UcJjQ0p?uTwnLcE zHWXj(Qo@(KRC0I|K?Q)Gj0&e{)Kg(vb=W| zXbp~o%L|lS;$E{FWezB@$C+ExPC?=BTs8|Etar@Lz>75dIUx}*%0k(bn5k^KLt43O z*aK|ND&ycFrnVPB5>mZyY)GovcJVAh*W6mXY|OcDQxO52!dhD4#5I9#2I!QS!e@ds z#o8Tr1x2-=gwDu^Zyu%$Q+HK0C-P?n2?&EA@;mbtq}V9#sUst)kwY$0G-5yv?6&IS z9p9k}<-`kH)LWL^{-zoXNq5;PztSr|!7`8ouuYyCf-!+nt?B{p$~UF=EhJLkEDX-l zazaA4Jz`Q?iDg&ZBc4eA0Im}KI4z@a7DgxL8fzVM9ACu8SlCy7W|dbSej{X~aebbp z72&rD^9hPW(Zr;M&JcnJ5_y=5vm;$am!~&F11z-D%2(H62^qQejt1T!tLPlBr zMNUz7a|@W_&`1Tl-P}QUSE!f^6U0kuyBHNJy~Y<;!MTvZxU1qdAe~ezEgZKloplo4 z4^UhvOdDMOzf$f3fwj80LIJ*5`iK}R)iF`QbY9^_QS5TW(lg7vaWjhV1Fr-~EoEuT z2my7K%415wJDi$TsJVulzYNVgHm6amS_QbIfA4ciFEPPa$BT~WwG`ludnn_XhKi2c z#A$b3T(B{y_^o})${BG2Zw2Py=(ivB#LhtO<4Q^h+bfQuP;bl*vF0ZCxY?SpDctTp zbZ!@PP#>eXjVcj3yK@~^xM`fS zlceX&DQUdsRvc@B5z2>fwLh~?cELS+n%#b7;%@-`B^nj)5LJ_1%rJf-$B^LuLx8mN zF2Z740GY;gz_2P|6af6jUM%WZCOGjClieV35D*ov;?cDDl%qo;nv~iX1DKf-+4Jfw z54Uke*r7N~h)o71tV6dXECXj~dbvcNF~j8204 z!?1k}75xiq(k4Ihz9wZN)RPl*?#s&l$693Gm2u^P80`?lyW$5B8A0twKH<6_8xxvw zGfY}!KA=OlF6pQ8C3C7h9Ydi&;#e|V9Y#TSmMzoNv76wO%X}gwReB|iGBS)Sux6vA zqK~K?ru6nqysVFyCNgro5e9bG^b)_fF7iXD+Eud%R{^)gLZFPRtV_#P$R0pYktg$RnO>4>@Hw4too<_7)o0IYDDxEpcLEF~>A z)a`hU+cKxm6Jq#LH(G(XZjC<%r7aohC)Mp}5 zVeyFEz_YjNS*7?#aZZn#irg)FHT#BD00?l!VM;24WL|2ZS#AloCaExT40T-yZT9M0 zj>CO3EyXfF+?w2X#2_v+Xn~`~9Y)!6g&oUg^#vijZt5WBd6>5sqyF3! zt_wQ%5gBYSxLENF5UUahFAunucQP*h%r=nY^2}mVuyGQa*Og0(Z0MOw9$q6scILGz zkfV3R6%FsiA+;sj%4PtTekMV8T3~9f*7Gek>ROLlX(S-<^*&H6|= zUo)(p^B<2M7!_9LRb-fIwdw(c{4BlPHSFZ zy)I@QX@j!QsJpth8{MC&TGd>x@kGrPhl!dPU5j%U)?tzuJ!%lyQw&q_D@*}qj)*LV zU(8`ZE4@q=r6ViV#`!wc!Nb8WFh!WVnJkj`+;JsOiHz!iDF3KvJ1vv6Z$ zkB+A6PrbklXlmJVtT|rTGi-D*4S;E=5h-6|sL#>(*STk5t|B|^7W`G>RuL6Y=`H5-KYYv-pj#CLA_G29(B0=QL`d1c{fvs=b4S|>f? z!&dW|Y;_XqT>y(Mo@MfYeGcHe8bd;kSag0%!RNTQ5ooGTAvR#6n)eBCiuPshA;9^L zytB*mFX?z*-#0RuW$<$~vEBI~Ri*&ky**z}nY#Dw6>ip@MuN^bdzTPW&(K9tn!{f( z?`uUJM2loN{6W3wL6bKj_>RWZU6HMJ*UvLNpjp&yAQQ=bz(#JxRcv<(Dokxxs75%! z%qr-n<`K1Em1?ViYEm^7D!pCht;#`JSTvcK#7dxfF8cSSc zh~C4R)Yulnh=|np<}ejgcfSXjKtL4Q#C@Z|0T%{=mNamM@xBR!tS?63fma(irYwPb z0RF@&R;DW$9iHRh#i6%f?qmX}-(CLzWBJ=r);AM(Yka}ad926PFHk7c3~`tzJJd`M z9L+hy5wi+R)oxLe`|c*y@iAR`l=TaD`-|7tQKxsg(3Pr!`#iv;UM8I4<{X|Oi@&LP z9Q@1a^9r!d&Q+uHHQi`nVw;qJ&@p+NeZaPC%nbq^JTllfbl{aj%uri6;%MLYJEdjg z6@R&l&0}%Kjr>cmH`G~qYp5c*<55rX8?&DfaD7U_jlntVo*_b%yz6{&csEyCp-`Q1j+0G znZH#mdw_5~O7%EP51WYHh|*hx*tfNOf4HqPu&w;S#%Z;P5IvV?g6B+vyIbUjMh!sJ z?1s@^~Bnn~`+TO%AZMRYDN~o{g5S^e12nQqj zw#3hwO6E~rL-{Hf$~rOWG_dQycq8(l3&{9mm@Svp&MnQk;wl2s&av(hA#UiG_g2ft zANQ$Fp;-2Lg>W3@7ZexV^D)jLIUf<%p3asUQ5AHtsOUZYMxD5D!ix^&ZbNr5+bX(@ zcG*--VSLoEDDGe4H&bwI=45z(Q7Lq+H7+ttWCGPGyj6dgtB}`3Dw{8ftwsDUAS$Np zIF*2di`}rcaVActFy^VZ)MzYi##x9ioKedOo!5h^h$M19k<}H@^##<+9!wW(g*$*1 zybV=m03}r`U?#usFoo+Q1R%};M9yJ`^qBJ6J?i^e3ABefP47>JAs?{DPtLLkl zJFcadkNk#C2n{^NQ&}89@hHbWWd-9kE#=}-d8py#@i=QXd`l}D=5XUZMbNqYOI>S* z;l~8?`XY|B@ibxp>i%P5UO)KIuf8K*c}2l{AhbQAUTYIIfxl4v{^7kAj6{U2ibHftXC}zSvO0gU zK_bS>-V;%FY3oK^;MUdu0Ogu`oS)o9S6*6>8ZPoe{94}L|B6w7GS zojW7yGel*6ES929isc-f8e)g+l_iau67ZoSgo+;N6~Aw0$0`%GdsXx_P}ktmMR-|d zmLw>g4kCd~TCsTwGMgJqUp^dv?G z5!o1=Nh&)csOC#26H86DLL62Prr%?Mr=*1xEs;f8#H!tlj-!hfyl&b4TTdMy=D*Po zRR`V(>c&o!*`cD3RP#tkY_|5umGnkDKiKxa8nJlL(3N>|a>R!mSkTvn6j5GQS!I{v zh@oL@krc-0adH$z2F0Q+B+v24X(*I7k*hD!r#8DK>hz=AAN+=j`6vGXC;tG#5f&w9 z(qqzgOH1@|V?#ql6j4N5PSK<4IpOwC)g;7V745$U zS#~BVe$ghRuu((7f{uq@1AY(MiXxj78zZFI^yo^C7uhoTqFP@lT1(`5 z5oEnL=>Gr^)bz=GjxHq)QAAr#(EIa>wnjCQydLY>W8JR`G9v}O?C)tR_9&x^7L#Jo zV$o;PA*96!!Caa3^rP}>df0!}SuasJe?!%ieU1FGQX~D1iP9XuN6AHggo@fsgm5Uf zB$sA|dX6TO%GTXW>N^wR<(>hRgC#!ip$y zC_-X!KB7+u`oGZ+Qj`0Z2zuQvnm@?VlEWpfr5~Fm>ze*3)Yg`!WcSG8IG<`Qd>6HB z{CK62JK4r38AaS#4^=3tnjz{TKa$HVvdc!K>!VXq)ew&&aBHH4rn_QXdKO0n#|E7r zP5g;hU!8t8niJaS-gMScbQ%fpbJl5OD~4r0jN zY?jQlaz%*RE{NZ_u=7w~X@Bh&uH6&{4E#=$!r#qb4ZP^Rsn?InebvIz=Rfmt&Dgw2N#?j1EQq$Ei$uwb7T@qu}}c z3;Q0|;{2SF9PNAE{v-D&OJ~tasBI)XlqExA-K!#~mI$Wu%n2sPNW18!ILr1$951nH z$MkVW6|&iT@^p*wzipOZ=h=HzkD(Ski~AhD1+|SzOv1sEB$c00EFp9>auvS!mqa?w z>wB`x_FR%1zjpVrrpjp)b?vWq{i?F4yB<0vCXkbsTM}q*iW5y1k{!2^5oV-q8hUYA zMeN_`h5YY3ctllg^SjB{wJCe;`#1SkTkx&Yqmtt-(s@prd- zr+#hUyvi@}FWG(%dl;94LW)@#SAi-gE-M0)lgcuL#Myoip>1o;m9_f~`xaS#S9>pM zi}9F?JMhnfdr8tEZ!BucD6bZVib&;RO&qBDf@%1qQF}QYnaP}s`~;}1-~J=pB1O=f zZ+0!D-$;*M+`7P(4V-T*;=TnFp*!&GW&4d<_8;P}!D3~WUyYV8-?t}9&#n7DqkSSV zmu-$oV|F)^_e1w@*vnuwUIyTX6Smc>d&bk+0OboAv^qLB}MsKy79aG z``()9dTvi7BgK2XQ6wx6QoadlO7JOiUvVx!2vLvABDp$6C4xVTd$oR2hc3vjD!eQ6 z>&>edvqcnfER>y}Q~DmGlca{D+>fhY#9Fu76HKB`kGsPC#^}2h{Qm&%QA4q8#!-Yh z(xfdHEQ{0s0AkWecq1ab8>1{<#q8zqjwr$tPp@L=yjtm~ti7JgX{MJ_NyYQ5ed9gG$MsJ}>d(V05D3Owv;J?bR!hS48 zmNro6SR}u0t2q4?kB zQA0-*P~s@Bk->ZkR@BP#W~8RDh)zoblWPKt?d-joONz1%Q~RH@e#2vvMvkW`v{`<` z+WZ^*3iH1j+KMQm%e|~_g(CK`F}2X5uFEWK9IGT|rR;j0W}g&kYU;|eMpm}J8BQ_m zi?{4*8k3v*O*kzzfjyHi+Od`R>)Wdmp}ILQgOd3XC1Q^riRwF~Ei1^9M`Z9Rwp$Ys z^(gww#>-%%l@$L^L{eiG47p~r`05^l-H)(@t|r~5vPUt)ug@nYLj zYosKE&O^T9DO&KH)J{%WU5friE*N5xYS)&wpVWVHAr%#ZEo`f2Y^ENJN$?HZqL}e)~IwPwXswL`Cr#?@j%0>pPT^S`FN`e6_U``%sohYN)TfqHh*1#gmAlC{VV#HFarJ zN2^l6wWT%op(&BTrA7FynP(#H_*ecGo|~JtJ`hxgC-8-(DG>DT@{BQ7U-TJ(+MiQ4spQmlyn3Z5# zF@Js!c84XVvTC?D$}CcUvMu)5lbbl=g-FrV&2HqPt(yL&$y5iENzyqt_SqQmRT420 z^7T6Z07^LRnv-v~LJiRblEF1&Pqs#F4Y%3-A`%n7CUUV23kXb1vc~)`bp6T~w;xY= zkr*hdMQpsA8#^0Ac6x-{!AC-s;8ITrqDiNcEQhH{eZ%#T{{X79SJb^%TPW5D!c7`5 zxmqI9!|&MjkMBdJmT1a6mp4cG8f~b>+htiV?Bc|b>`&l~oJ8$kgC9j5402c4n%?$E zTVBs({hRlm%h+seMU$2=OX@}BR(Dp@bel{oVUd!5|it}u8 zO9P@Jnr);?HnK}i^zhT`}U&`mT@B*>}_<9 z_DLyrI3$f(@K_+N+ZLzj{!jL4dPgO5!Kdl;^#1^gDzdk)ydP!JjvCi?U5ZI2?XUu7xIvOB97`ERdqoBL?z9*J724 zjFPeoX8B36b!egqn!Q-j6+i&bKOUVm>$j8s)ErqjVB z-VzjLr-mhK1fv+M8~Gi#f-&ZZ#YIur*U8F;@H~(t={7^5AtqPaYsQk>vZzI!{u&hz z!;?8Pmxb2UR?h-oC6~4rLXR%cqL9r^8EU(1(ex3Fxk-svi*&MTHzk9MvrlU!hir~> zLw5G)j4v!pv}x%_O;mR1j3p^@X0ND@khNB-x*S^UmD#Bz@QpY*VH#3t3!$+V6B(e}tPG_H67$?}F?|O?(ahgtwM(C0?H7^68a^J2>qn zXo#5weUgk^aoH_6%B_;pis_CcMGM@1%4Pc$*-W8}B?w|eMHIcJ=$1t*@RBNp*(ZT5 zqO+2*WQgsq{syg+g~W==kr`SXY>X5#OHMNFA4#TB8D8j;B&TU7gOyL%-D5~x`qsd(`v6?R42Vj|iTC)JbEanZ7s95R3yfPyd9y+k;j%<6w=S0tG1#p zwzfA&OjqzZ&!_n5(P~Tk8u3iM(O-pL%X_ABY;!Vkypditw3(NIFDhjh%1!RrhOCN` z=uS<2-tL~0nB!gerDIj#ut|LX0OB`WIJJ@sA{8;gJfcmcL|1;rSB-6CXH1L9*?I6p zpU1hST(U`H1e5Z-Q3W57Y3aP#Hv{V0svEy5{HQ|m$<^;HTsB)zjfT5z93f3ABdJabF_Tya~|qQC`d<8 zMTy^M6OPHJ*2!4>5ku4FhMZ+gocOC_)Uw&7I%HFk#G;2)f`=Bn^7PY$U))Y~?mZKi zA~UYXoz~UiUxt%ro|L63qELi#(K$H|B1CXb{tj|Vi95?N`Y&qm)z)^>EYp>$BI%8m zOZFp6wv16kp_A#KPY2Q@r5=fW*&IayLmij!wyn^S7@E2YanEO}TyVsOMdbAFlnEk= zB81^3lu5;^v1!Hpi$j<3WT4{d_-VMc##l8p+&l5Ttgm8<+B#B@{XCgdtajB_#?ux^qywZH0x_dJq`#G|2&4Gk2E-i>WVryKb@+Ald17Ez}T zZiiVR(WdHRijuP{v82C}II5&Z4fb$8nJppdFVXanwCHdgO4@{kMpQW-zyAQyY{ZXC zELP18ZIpbAtQt+nvQ+X-FM%s((TtM5&!WBwCc7WtQAZg(vy+d=^)qa9viFWnIk=kI z_lTC+7SUEGM<&O$?L{0;C}T28d=;}&Zf@AdMG-_gG-t-&?`Yu=e{mH`igq@ewpZ(- zQAlaDUlOej38R8z(;NwD5`n}>;v`nys$8{R==9I-TUCxDNTP)tU~N?~vbI`@_H$nX z)r(akb$IqK+LohuMKQ+56tdaJ?#*QtV8y1+MM-r>a$g#4?GrqQTyEXN>x{q5j$|6Ke zOkItd3G%h@IJ&_uk|8Hf#T+Xnl1`2?L}guz1Hs5oX}pRqKY_*2NW!O7B(@ltNAcqa8>p$hS$ljug%nY+Rn-l zh590_TQ+EE@r}QdF=JnC7UJoWn@Z7YvRtu5QkABODoGi59icHulM~u9z@Hi7 zzvx|$bk9pVbT{DHe(e-i>trJKYh;chiC#~}R=N|xCjJKh0At5RD>2xab=j}4&+T0m zLwmL%5LP%ib|yBLMuvo>`AAQW5bZR^uF;honsenGjg##oPVjQKMK>B6g9H$VK>F7FgcxwmU<1d=x#Ktg~BN zo2Af(#?SSQ9G}6kVRTP`}8dB(SQduOqQ$v;Zh<%u3A0PB(eXHb) zwPcf7Lv%LYL?NnHe|`^d`3+CCL-r&w?wuZ%T#+dJmE`{b7Rxza$ zt*B+$CZe)x>pe$Ht(=DTTf|0!{foN!6nMTVjx9=$smWB2sOtig$p)IDiOEU-0HVI! z{FQ8+Q)ur9ZSfPqSR#qW(AGALM}@LIR;N8z{R^$ognC)it(`V;8YrWP*We^IUJY#P z<7*Lb;6rpIF(Qh|XZzXUZPhaIfs&MBt(w};QU3r%jgNGm$dBlXG-F6^q+8={5S2R; z;)}1e(@*&ke5HZvQlcq#h}GEL$ZUlBI#gAU?TwMjvP@)F%;?mg2ssNm-RzdyQl>%j zh}8(8p)c7~G0|S~V<>p?p)3(!C&^02Bv#E@FXMK0=xwJ$?DZ3E*35e>?6yP*_9w>( zo*jQgU)w``dLrAiyr1+Tj)&b5{Sovu@4^QXllH%M{^bxd>aw;k@TtA6qbux z8WCR3{{YaXX5?>1@jY+YtsF?kv~jawm1$i2OhaRl7}%DL>0^<;$w+LJi8dupLPwtYJuG>#J#(Kg>i(_NV;QEl)oYeZT&WZ`Ow zdUaM#HR6clv|ia8lS7#sZ=Dy7jhl-bEWH~W9*cqKkSd81bs);Tdu!N$z}+$rZtLS!I@3%R57!*G$O^`=Uux@J@_*T4dUv zL?q%yq$Eu=LE7+q3RX%(nHlm}^?nzkL*Z(RH_-`S;!#C-HcCe<=#-7*U7Zctu@T_h zWXO^-WZwA}WgZb6oEdYqz~$M#Fo$#hE;;;pR{ z6D^*dQnoP^wQh+$-|Jb$u1GtVgJbcrKiMaKQA#}uUjkx&7GJYkQC=*QA38Ek30S0} zZyrR6XC8Ks`E+E?8{{ZM?Lv`8p zP_n8cllEE@6D+dJ(WKQgHVvG_ho$MZED(>u^doj9OH{_oB`wAHaEta=lG3#2;EQSU zSlQWZwl*jG7rfafhct<1Q9iAYk>sw3OLE|FoRD)HB#8Qy`#ZbcssU3(0;WDs`CsEFUcz)H&BozKvA#!Wc5RbJ#>rrlTr(%5&D>b9=7Z%5870!9K92tYxtQ?A z3ZjZg;Naatog14i{E64IdRsS14aQ2OiTXIn+#M72(}%&dqiIDOS&JU-%y^P^$-Sf| zpJk6H!W+KyQ)p66S@jUz{{Vxb=(^S=svAqAy&WWOHyex6Ee+BhwXIm|!KS;`iYTuZ z+4Q0M9w>f?hAjFY$neOHDqWiz=&7MfO;bc-?~(qO_^07RBcelRWsR0zm3lr(E61%C zoexA=epX+w(?-^F@+Ds4(fiTHjv%xRwZJMD=x>uM>WdPyrdZ#TVkG|nM<-f;vw<`+#@q6K`dt1BM$)Ut{Q5s0we2F4L6k8szRoO4&L_KP>uNJ%#vcCm76o(=HWALpnUc{4Ql8*@um27BA z#Y>}tL>)46Z;eqe<5-ROqrYh{!LRVwt9DfuCdMboqaMazh5q$^7wt7(Yy8q2n-O$3 zWFn;bB^4FJD#zyZuQl!0vqgW9zXzi1l`f0+6B8SV7r;3drT!sS}px?%tPX(Ih2LgX57lx;R|2>~HdGN+?8Sx1vtn{{V_!^^s_7T^qke zKar~IRE|6=+)BzAzxWlMi8d;T=7%d3Sl5kM>3eip%Nnl=E5e83{{YG@6pOOUM&vy& z*{{Kir(>0u;D`A&`4!-mjZ!E`p|8P=9EPh)FWz62nCtP9@JQT{-Hb}jsrGD1a5$7u z{k0nuRC^lWarh+){0P7bKqd$kh!E4SNY` zLbCLJ<3)ZQ(A|j*6{U^Y7^=2i_Ew(*6zEMp#*#jrj|&`H@QimlL}an5k7V4W?Tsqr zYs(vGn~VP6V;(8b`%xSTe{&pmx_?`K=LJUX|`Y#YjvO+lqLmQCsC`X=#k@WX22AbjdVVaC-5}oi$EUF#o zsD5ZfXl}HvEPmVkIxQdQjyCyYNj^=jixXqS#HhA%C#~193cgRN#|HE{q0N?9qTY~P zk^QtvR?Vup5>-r}E1wu+zF3=G7~F}--CdHE`$=evzXXf+tncvDTO*Aw#M1a1lN3rr zm*}F0z@CnWPr}R5Cd_zj%^i}jEK%m!COmFW?J=ixhUzpoOx`&*IoS2bj@`2!H27n| z7)$PBc+w^JE>S37BUR*vv`9*qh3kF~^5rzTEy>t~$NtBqoQz0G4HQt~Y-5Wyu|bf4 zswnjhIV#r1%otq0=44gDOQZh)DSxvD6qe>?n~UI+-0k^b!@4_}ivsS9vWz&hBaEeJ zweT#AjY*j)d=I}ih`KJxQ#ScO&QPPW(kyP!$iLX@;O|Q!J_{_TE>M)Kk;G_R9Ii&$ zm3)?1xiI0k$d=VcM2vAu?yiR|&g4p8$ljJ%o}Ql%)OPwrVv^wAlu60A$%*YkY4C|- zOo~gQRaQ1icge>8sUiuu154|Yx5A0_4(DJgoLPUq7k>q>6Q974cXreQ2m=*HlwbE z7RaJ<+DdM0RJkQ5k@Cpxt)$l1!FocsEymn&=8TcMk|^}?`dInw?IAT1Nl8834;zcW zgB~s41C2T*8j+GF&MlcGT@S(wH?jky#3XteCJv7xUE_gA%aZZ69#LUpP~ zWwJ)rm9jFXU+llpE=c2SP>gyOjgp;qKT}*p{{WRFxHmbzM3O^RQ;V@J!-8s<(L%*H z(j~b?MTzsssqjYS(UDJu7hke@Rx~NO_tCjk5t~njIdUeOvYfg29BEOL4WdzTbjsB) zf=ZT{BhKgWci;Vu*&^(vM1&))8Y{tmHF(gpT#b%MazmAgHac7(T0?At+{f1ie#OEv zXRZ+}vXOcu-$p!j%Oj3I`j1f<@w94~=GO_IDGnB6f{%Th+UT7%YyQzV?R*%b=Es?0 z{{UpYT%LT($d^2hM(ZH{5z#D>fjo|0IQVp9#l^Byt|-Zq^f_5ivJoQr zB`Yk9t@31pPiT_Cj^*1WCns-AX{ES}jCpKwj!sdzMVRL~x=4h1X#Um7l3N)$xjQ*T zW$-xImozRrCqx$MBqejdgk6oFBwgs%ks2Q!?RmTLq*5!wuT90Bi}@tVD@2Cqau*_! zf}~3~91ouurrje1RyWGFeN{$Q-$P8IJgP*v;EZY)`_Un~;SzR}Gh~$I_h`9f@9XeH_3K}%wOJ%`+wNgjjw_K z03=wnXiA31_>?bViaH$?rH!^#X+lF|(mV~{l8ckz#-kn)EU6OB#|PDaCD@gfwF$P# zKZ2}$X@6}QJJSqzOOaqph%fswK|%7&@RT0o9$l{3^QJ;~%Ulhq_D-571tF?>BcaH$ z4w_?pP}P#-p*ESxZ6QgCmOsp~BGN4vr$yNGy)3uwB;Q6p5w^Lp>ki8$$}vaoy%i0K zi>7AyEcCJY6Qn8Bi8Rwh@qC`tek>vOsli+$mTO0T{5mjt|$cDtl(=vP! zi*At`irZt#ktuHG#V!X0CCNN4D$&uquDTURR`6*sW16SsAp?wo8&} zCC9rtsEOZ;bSHifkv|L3tJ22*052Ngzky5OmnDwSrusHqt&*14$vH(whvKxcyC0iY zOQof8;TORtZ%g*4b-@?Nn)0ubPG1K6olzAbW9IBiw0hZpm7g<*5$wZt$c4!Y=x#Sw zJ_pdB6g6t}Qchc0mJ8(iN7I#A*RuR&b-{x!_$%y}M1JU|D2o)|!8~pxJ0;(@DQ#AL zP24_(8t9AgZi_6k%Pg|X{5+YIIx$LecKRRiPEIP>^&e-{RbqGI;G4E3LLtX2jtS3{ ziD8@_G)WtDT*pk$Z0uQo_a9My#U_N+6N3K$LydKK{#G4NitUxk;W_bn61qOQe~Z-hn0 z2w4~Ca%{=UFz~rHMY}>&bLWQwq~4ho@;HeUL-aIyr&P_-yL}2=5Xr|U)>lm*Tb@z% z(HTNSe$#N|N&f&IOp`L?Nc8@;Sm#Tl(aBHlT?|Ckqt>S!ltP6f$-jhs@q980UC`$x z@I1+Oh{;Q@3GQ5?6H@EOiYr&G>$tMXWsG|x>LETN#gX4cW~IW?%hAa$&#fDyB-`R7 z@yRP}!-@9Ew*|qDR=E>56=l$*ZnJ`l@bvheSy#cr>qfZXq4rK&RhRa~lI-#4(@JfAX(L@Jo~Wjysj1a7EaqdT?I_r1>XP=#LJFwl_%nvWwwxeOK~Dr`NRg za$=C#Vr7pc7YI>|`Jyo5kfTLv*^wq<#ayzG=yE3)F4-J$ieh5uQA@FoX6oouV#y&f z9CktCATqeW=>=(Z1FvbjnJiHBAPbu3a9R)BQENU5r9SjF8aLRD^ojM{0xl6w{qF(T?2Pzxp%ci*c@r&Zg9OMmfrE zDoc)tXAqi|v|5HBeSA z#5Ki}iR$q!1i>{H&TouPGw7MI1MK}GYrS#uUJEhrgM5w>nLnZq!Mp^3f@1E7# zWb#J8*rb&A*TJ?ki=0;`JQ0+fWT~%_<7#Qct1A<=HQ6@tsLeiq{urgYZNHME6}d4a z`K}2?F~{K%R7;)+@J=nUrw&o|IOL3*N2iYOQ3U@0XnhG*hU7eMu@>Q{onI%MWMtw5I&sFN-6|sDiil5ywH6-Ab(H8iT zY0d33;n_Qn{gI6~$%mM>-P<#$D__C%lp(nn6_ayZ5SrV^?8=jWX(xS&a7iZ}$d4mb z$tymcl2VF4rQvh+F>QY%64JEw5ZxAxv8gmDJFzYZuh_-Tj8WFc#4()dWtLu!*qwG> zvP@Ar7bP}0P|6qR>qW?rqHWQBg%pt#ozWDd(4Dh#6B4p9z7gs0eKm6LM2ai+f3Z>} z!X*Ao^7~mY{4|>Q7pl#CnQ~{{QFde9l1?kP*%?a`sXyRZC5`>2Ic>PU1&PI6UnWKM zsjtzRJJaKzf}=Z|eNi|h+J8L%0HYj}e@&ZP;gC^-+wf0k(9YV6#Ym*{Cnk}-K2qXq?uTkPyeOGl?f*xx6qllVS2d=Do0@0>{FP8P?5 zV^W6<{{W7+z15c1^$SWcMhw@A+E;tu=qVGqisE+8fBH213((zNWd?o>)op>#@3AwDc@w)Bjs=_W7H(G#U*Casd4|P!{Fx$_+W!DT`+n4a`Css5`>8QLFZ5;QIT;nChPd2q zqc`2dKlG53+`ru!e%y^O*p}zX2gsWlLPSsLNk37~>5rm1A&7k$7YD40SqMHxxbRGi b>Cou4~UD3Ny&;z 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 >bpt%}SIu&kso@}EgS*rV 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

d<{06Ki?zIo)jlq%;3pcUCkw`}J{IXh$ro=MJn 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 Dp8i5@ diff --git a/static/img/photos/6d35d9a2bd6c63c2.jpg b/static/img/photos/6d35d9a2bd6c63c2.jpg index a8815c75355af793127e0828bf2df0f3958cfdbb..f5effe31b4ae340bc75ccc775e8300da2ee8afea 100644 GIT binary patch literal 389495 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
62GR=c<&_d8*21dX`XM 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

e{*vLIRmwpi)DWq;uMF?p9Cp>g_5eJ|3# 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 diff --git a/static/img/photos/75b555b99d5b38c4.jpg b/static/img/photos/75b555b99d5b38c4.jpg index 255508ed3d8e7e0d99a66a1a2b9708089aa11381..699c1b3dbae310a3c01286af9c2444dd9d76c552 100644 GIT binary patch literal 345537 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

=J;T6Gg;9AS0Mm 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 a6C(3ax#7_R3CNJVLUm+m^h0XhfB)GG+LCzy literal 97129 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 HAs_$QEDO%0 literal 175463 zcmb5VXIK+!)HXWwBAo>3(n$g+B|*BhgboS4tAI#CGk{1DrAQ0C354D|3Q|QBgir