From d22d8b48ecb8f1cbb82defdb960302b3d122ee84 Mon Sep 17 00:00:00 2001 From: Ian Webster Date: Mon, 24 Jan 2022 21:34:36 -0800 Subject: [PATCH] Upstream update (v1.2.2) (#3) * Use font.lineHeight instead of font.size for labelling in line annotation (#475) * Fixes #474 * removes 1.5 adjustment fo textbaseline set to top * Update src/types/line.js Co-authored-by: Jukka Kurkela * uses 'middle' instead of 'top' to textBaseline option Co-authored-by: Jukka Kurkela * Fix type for CoreAnnotationOptions.borderDash * Bump version to 1.1.0, update deps (#486) * Update last node version in actions (#489) * Fix syntax error from previous commit (#490) * Documentation versioning (#492) * Documentation versioning * master instead of $VERSION * Add executable bit to docs-config.sh (#493) * Add executable bit to docs-config.sh * Add docs-config.sh to pull_request * Fixes #498 (#500) * Fix broken 'View this example' link (#499) * Add borderCapStyle and borderJoinStyle options to BoxAnnotation (#501) * Add borderCapStyle and borderJoinStyle options to BoxAnnotation * removes consistency check on canvas context, too conservative * Add LABEL annotation and label node to BOX annotation (#502) * Add LABEL annotation and label node to BOX annotation * fixes review and remove inheritance from ellipse annotation * fixes code climate issues * fixes code climate issues (2) * add documentation and sample * adds type definitions * fixes import in options types * re-enables cornerRadius (deprecated) * improves inRange checking the real box of the element * does not export setBorderStyle from helpers because used internally * implements position as object(to manage horizontal and vertical align) * Update test/fixtures/label/scriptableOptions.js Co-authored-by: Jukka Kurkela * Update test/fixtures/box/missingScale.js Co-authored-by: Jukka Kurkela * fixes review items * adds left and right values for textAlign * fixes content options in box label test case Co-authored-by: Jukka Kurkela * Fix line annotation documentation (#505) * Enable label padding as object (#506) * Enable label padding as object * adds test cases * adds types * adds documentation * adds test for padding scriptable option invocation * improves the usage of padding instance among functions * re-implements xPadding and yPadding to maintain compatibility * reduces amount of lines of code on applyLabel function * changes content of label keeping them aligned with padding values * Add missing options to types definition (#517) * Fixes #516 and #509 * replaced by the version of master * Add POLYGON annotation (#503) * Add POLYGON annotation * fixes complexity and max args for a function * adds test cases * adds types * adds documentation * removes polygon sample from "old-samples" folder * Add callout and point nodes to the label annotation (#507) * Enable callout node in label annotation * adds test cases * fixes code climate * common drawPoint function in helpers * adds documnetation * adds types definitions * adds checks to start option in order to be between 0 and 1 * enables start option as number(px) or string (percentage) * adds check to inRange method if the mouse point is inRange of point * adds test case for events on the point of the callout * adds POINT node to label annotation * reduces Cognitive Complexity to the draw method * adds dblclick test case * removes useless "drawPoint" option from test cases * fixes xScale and yScale options (adding suffix ID) because are wrong. * Throw error when non-existing scale id is used (#518) * Throw error when non-existing scale id is used * Improve test * Move annotation types handling to types/index.js (#519) * Log a warning instead of throwing when non-existing scale id is used (#526) * Revert "Throw error when non-existing scale id is used (#518)" This reverts commit f2e2481b23a52938fe6992aa618a2488d8e38f92. * Restore Chrome flags * Warn instead * Updates README with new features (#525) * updates README with new features for 1.2.0 version * changes link to license * Add clip option (#523) * Add clip option * Add types and test * Add pointStyle and rotation to point options (label and point annotations) (#521) * adds pointStyle and rotation to point options * adds test cases * adds test cases for label annotation * adds types definitions * adds documentation * fixes source formatting * changes rotation to 180 * replaces by master version * Add test cases to coverage all events cases (#520) * changes test cases specs adding common events tests * Add test cases * dedicated source file for common events tests * improves objects use in events.js and test case difference percentage * adds additional event test cases and review the display spec * fixes lint issue * adds timeout to simulate 2 clicks instead of dblclick * fixes typo on annotation type for ellipse * Log warning when unknown annotation type is used (#530) * Run event tests on plugin and annotation levels (#529) * Use the context of element for events dispatching (#528) * Use the context of element for dispatching events * Adds test case * Add point positioning by box options for point, polygon and label annotations (#527) * adds point location by box options (x/yMin and x/yMax) * adds box location to polygon annotation * adds types * adds box positioning for label annotation * fixes test case for label * adds documentation * fixes code climate issue * fixes as suggested by review * change tollerance * fixes review * fixes review * Add note about clip option usage and events catching (#536) * Fixes #531 * fixes sentence * Enable HTMLCanvasElement as label content (#534) * Enable HTMLCanvasElement as label content * adds test case for line annotation * updates types * updates docs * renames isImage to isImageOrCanvas function * Enforce unix linebreaks (#542) * Enforce unix linebreaks * Fix remaining files * Enable label annotation animations (#541) * Enable label annotation animations * cc * Split helpers * Add random seed reporting to test runs (#543) * Resolve circulare dependencies (#544) * Add samples to the documentation (#538) * Add samples to the documentation * removes tabs * adds samples to line and box annotations * removes useless assignment * removes CRLF going to LF * temporary commit with checking on CRLF * fixes CRLF * test CRLF avoidance on html files * reverts all files changed for CRLF * adds point samples * adds polygon samples * removes old samples on types folder * adds sample for dataset bars annotation * fixes drawTime * adds label visibility sample * Fix random test failures (#546) * Disclosure box sample is made responsive (#548) * Fix `isBoundToPoint` function implementation (#550) * Fix `isBoundToPoint` function implementation * adds test cases * uses 'defined' function of CHARTJS helpers * Make a consistent implementations of `inRange` in all annotations (#547) * Enable a consistent implementations of 'inRange' in all annotations * updates line implementation, removing labelRect property * fixes test case because the previous result was wrong (spaceAround) * fixed max number of arguments for a method * some code improvements in inRange method of line annotation * fixes polygon use final position implementation * Add `xAdjust` and `yAdjust` options to point and polygon annotations (#551) * first commit * adds test cases * adds docs, samples and types * adds adjustment to the samples * renames samples files * additional test case * Fix #556 (#558) * Enable label `position` as percentage of the size (#554) * Fix #553 * adds box implementation * fixes multiple returns * fixes test case and complexity in box position calculation * reduces duplication code * adds label implementation * changes getSize and toPercent with default * adds documentation * adds types * Update types/label.d.ts Co-authored-by: Jukka Kurkela * Update src/types/box.js Co-authored-by: Jukka Kurkela * Update src/types/label.js Co-authored-by: Jukka Kurkela * Update src/types/label.js Co-authored-by: Jukka Kurkela * applies some review updates * getRelativePosition * temporary commit having a look how to simply the position calculation * rebase to merge PR * fixes double content options in test cases and sample * fixes typo * Update test/fixtures/box/labelPosition.js Co-authored-by: Jukka Kurkela * adds fixture for position label box Co-authored-by: Jukka Kurkela * Fixes #559 (#560) * Bump version to 1.2.0, update dependencies (#561) * Remove old samples (#564) * remove old samples * remove old samples from the lint * Build docs before releasing as latest/next (#566) * Remove point node from label annotations in the test cases (#568) * Publish latest/next docs in separate job (#567) * Publish latest/next docs in separate job * Missing env * remove if * Add integration tests (ts) (#569) * Add integration tests (ts) * increase timeout * Increase the integration test timeout to 5 min (#573) * Workaround for array syntax bug with Chart.js * Update src/scale.js Co-authored-by: Jukka Kurkela * applies review Co-authored-by: Jukka Kurkela * Change var to const in the samples (#584) * Remove undefined event listeners from state if disabled at runtime (#582) * Removes undefined event listeners from state if disabled at runtime * Update src/events.js Co-authored-by: Jukka Kurkela * Update test/events.js Co-authored-by: Jukka Kurkela * applies review * revert hint about delete statement Co-authored-by: Jukka Kurkela * Fix events catching on rotated ellipse annotations (#583) * Fix events catching on rotated ellipse annotations * adds specific test for rotated ellipse * new annotation types added to ElementOptionsByType (#586) Co-authored-by: elias.stocker * Fix event test case for rotated ellipse annotation (#588) * Add borderJoinStyle round to the road signals sample (#587) * Properly consider the line thickness in the intersect calculation (#591) * Consider the line thickness in the intersect calculation * fixes similar code * apply review * remove breaking change * Place `performance` commits under Development (#596) Co-authored-by: Jukka Kurkela * Fix dynamically showing/hiding line label (#595) * Fix dynamically showing/hiding line label * chore * add test for box * remove borderdash (drawn differently by ff) * inconsistent inRange * Empty label behavior * Revert "Empty label behavior" This reverts commit 32c29c9a7bc5c2ee74d81543a9b3d81b54e44e40. * Hide empty labels * cc Co-authored-by: Jukka Kurkela * Bump version to 1.2.2, update deps (#592) Co-authored-by: Jukka Kurkela * Normalize border style setting (#598) * Use PI constant of Chartjs helpers instead of Math.PI (#599) * Fixes events triggering on the label of a line annotation (#603) * Add JSDoc to `labelIsVisible` method of line annotation (#604) * Add JSDoc to labelIsVisible method of line annotation * fix lint * apply review * Update src/types/line.js Co-authored-by: Jukka Kurkela Co-authored-by: Jukka Kurkela * Remove renaming of callback to callHandler (#605) * Enable shadowing on the annotations (#600) * adds shadow options to annotations and common functions to set and reset * sets transparent as shadow color default * enables shadowing on point * fixes FF test case tool * adds test cases * adds documentation * adds types * adds samples * applies review * remove a function in favor to a const * changes shadowColor to background/border shadow color * apply review 2 * adds test case on point annotation with borderWidth = 0 * Sort alphabetically the options definitions in the documentation (#606) * Remove point node from label annotation sample (#607) * Update labelVisibility sample to demonstrate different approaches (#609) * Update labelVisibility sample to demonstrate different approaches I wanted to capture some of the discussion from #589 for other users' benefit. I also removed some properties that were using their default values in order to make the example more focused. * Fix block directives * Sort shadow color default options alphabetically (#612) * Enable the link to label configuration from the guide navigation menu (#613) * Enable link to label configuration from the guide navigation menu * fixes typo * Add test cases to test one or both missing scales (#622) * Add test cases to test one or both missing scales * changes label position in order to recognize the missing scale * applies review * Add specific test cases for ellipse annotation event handling (#616) * Remove `readValueToProps` function of options helpers (#617) * Simplify readValueToProps function of options helpers * applies review * Normalize table headers and samples blocks sequence in the documentation (#623) * Improve event handling adding test cases (#614) * Add test cases for event handling * adds click callback to test state.moveListened * adds test case for an unmanaged event type * adds test case without any callback but triggering an event * removes if statement because not used * adds test on the state.listened and moveListened * reverts the removing of if statement on event hooks scanning * Fix the scale limit update when annotation value is 0 (#627) * Fix the default options value in the documentation (#628) * Remove (some) reduntant properties from fixtures (#631) * Remove (some) reduntant properties from fixtures * spriteText instead of tolerance * remove "common" * Properly consider the border thickness on the annotations' events (#619) * Properly consider the border thickness on the annotations' events * adds test cases on label annotation * changes line label inRange calculation * uses testEvents to test events considering border and not * removes decomposition of not used properties * reduces similar code on events test file * refactoring of event test file * applies tests one pixel in the other direction not triggering the hooks * sets borderWidth:0 * adds additional common tests * optimizes the invocation of common code among the specs * adds test cases removing borderWidth at runtime * reduces test cases * refactoring of events test cases * remove comment * fixes ellipse spec test case * fixes annotation type * fixes polygon event test case * adds test cases, removed before cleaning up * removes useless test case because internal * adds test cases for an undefined borderwidth * remove useless options * Remove not used default route on backgroundColor options (#633) * Box: change event tests to inRange tests (#632) * Box: change event tests to inRange tests * copy/paste excesss properties * Add arrows decoration to line annotation (#608) * Add arrowheads options to line annotation * fixes CC 1 * manages borderWidth and the apex of the arrow * adds first 2 test cases * renames function and options and fixes CC * the line is not shown if borderWidth is 0 and more test cases * removes use checks and fixes CC lines of code in the draw method * adds arrowHeadsOptions types * adds documentation * re-applies previous table headers def * apply arrow heads to existing samples * adds test case with scriptable options * fix CC duplicated code * fixes background shadow color for arrow heads and the line * fixes CC max lines per function * applies shadow on border for lines and background on filled arrows * removes useless beginPath * changes display to enabled to be aligned with label subnode * changes display to enabled to be aligned with label subnode - types * apply review about shadow options * enables fallback of arrowHeads.start and arrowHeads.end * apply review 2 * enables borderWidth at arrowHeads level * changes way to get the options to describe for fallback * apply review * fixes label background color in order to work both Chrome and FF * changes defaults in arrowHeads in order to engage the fallback * updates documentation with defaults in fallback * Update src/types/line.js Co-authored-by: Jukka Kurkela * optimized arrowHeads node default Co-authored-by: Jukka Kurkela * Enable sub elements (#555) * Enable sub elements * Box chore * helpers chore * CC * Docs, initProperties (for animation staring point) * subElements drawn within clip * Fix clipping + modify fixture to catch * Another fixture * and another fixture * ffs * Box: test borderWidths. Ellipse: change events tests to inRange tests (#634) * Box: test with different borderWidths * Ellipse: change events tests to inRage tests * Fix auto callout position calculation in label annotation (#635) * Add test cases for label annotation to test auto callout position * fixes bug related to auto position calculation in the callout * removes useless if statements * if borderWidth of callout is not > 0 the callout is not drawn * adds test cases with wrong position for callout * apply review * Chart.js < v3.7 warning instead of exception (#638) * Tests: use helper function to fetch elements (#637) * Remove old test cases (#639) * Label fixtures: remove point tests, update padding (#640) * Label fixtures: remove point tests, update padding * create stringify helper * Label fixtures: combine border tests to one file (#641) * Label fixtures: combine border tests to one file * Add no border and some backgrounds * forgot tolerance * Label fixtures: merge position tests in vertical and horizontal ones (#643) * Label fixtures: remove position tests with percentage or points * changes max of position vertical chart scale * adds 0%, 100% and invalid position cases * Add tests for missing and empty label content (#644) * Add label fixture to test missing and empty content * revert * Add label fixture to test invalid and empty content * Label fixtures: merge missing scales test cases (#645) * Label fixtures: merge missing scales tests * removes useless options * Label fixtures: merge similar callout test cases (#646) * Label: change event tests to inRange tests (#648) * Label fixtures: merge canvas test cases and remove useless point test (#647) * Label fixtures: merge canvas test cases and remove obsolete point test * apply review * Point: change event tests to inRange tests (#649) * Point: change event tests to inRange tests * apply review * changes location of point 3 * apply review 2 * reverts the context removing * removes context from radius 0 * Polygon: change event tests to inRange tests (#651) * Polygon: change event tests to inRange tests * fixes polygon inRange checking the radius * adds borderWidth: 0 on some annotations * removes cycles on borderwidth because useless * uses getCenterPoint * removes storing of the vertices * Fix wrong dataset index in sample (#654) * more fixes * fix defaults * build Co-authored-by: stockiNail Co-authored-by: Jukka Kurkela Co-authored-by: Marcel <14852157+Marcel0024@users.noreply.github.com> Co-authored-by: Jacco van den Berg <39033624+LeeLenaleee@users.noreply.github.com> Co-authored-by: elitastic <6397763+elitastic@users.noreply.github.com> Co-authored-by: elias.stocker Co-authored-by: Jukka Kurkela Co-authored-by: Josh Kelley --- .eslintrc.yml | 1 + .gitattributes | 7 + .github/release-drafter.yml | 1 + .github/workflows/ci.yml | 5 +- .github/workflows/documentation.yml | 21 +- .github/workflows/npmpublish.yml | 62 +- README.md | 13 +- dist/chartjs-plugin-annotation.esm.js | 1765 ++++++-- dist/chartjs-plugin-annotation.js | 1769 ++++++-- dist/chartjs-plugin-annotation.min.js | 6 +- docs/.vuepress/config.js | 116 +- docs/guide/configuration.md | 69 + docs/guide/index.md | 2 +- docs/guide/interaction.md | 21 - docs/guide/options.md | 8 + docs/guide/types/box.md | 99 +- docs/guide/types/ellipse.md | 60 +- docs/guide/types/label.md | 225 + docs/guide/types/line.md | 152 +- docs/guide/types/point.md | 68 +- docs/guide/types/polygon.md | 179 + docs/samples/{types/box.md => box/basic.md} | 36 +- docs/samples/box/disclosure.md | 69 + docs/samples/box/quarters.md | 137 + docs/samples/charts/bar.md | 8 +- docs/samples/charts/line.md | 9 +- .../{types/ellipse.md => ellipse/basic.md} | 37 +- docs/samples/ellipse/rotation.md | 127 + docs/samples/intro.md | 33 +- docs/samples/label/basic.md | 121 + docs/samples/label/callout.md | 98 + docs/samples/label/lowerUpper.md | 157 + docs/samples/label/point.md | 122 + docs/samples/line/animation.md | 75 + docs/samples/line/average.md | 102 + docs/samples/line/basic.md | 93 + docs/samples/line/datasetBars.md | 161 + docs/samples/line/labelVisibility.md | 150 + docs/samples/line/limited.md | 126 + .../{types/line.md => line/lowerUpper.md} | 67 +- docs/samples/line/standardDeviation.md | 161 + docs/samples/line/visibility.md | 81 + .../{types/point.md => point/basic.md} | 49 +- docs/samples/point/combined.md | 137 + docs/samples/point/outsideChartArea.md | 106 + docs/samples/point/shadow.md | 144 + docs/samples/polygon/basic.md | 147 + docs/samples/polygon/outsideChartArea.md | 119 + docs/samples/polygon/shadow.md | 182 + docs/samples/polygon/stop.md | 170 + karma.conf.js | 9 +- old_samples/.eslintrc.yml | 8 - old_samples/animation.html | 89 - old_samples/autoRotation.html | 144 - old_samples/bar.html | 209 - old_samples/box.html | 159 - old_samples/bubble.html | 212 - old_samples/combo-bar-line.html | 135 - old_samples/ellipse.html | 158 - old_samples/horizontal-line.html | 195 - old_samples/imageLabels.html | 212 - old_samples/labels.html | 181 - old_samples/line-logarithmic.html | 152 - old_samples/line-time-scale.html | 257 -- old_samples/pie.html | 118 - old_samples/point.html | 156 - old_samples/polar-area.html | 142 - old_samples/radar.html | 167 - old_samples/updates.html | 170 - package-lock.json | 3953 ++++++++++------- package.json | 22 +- scripts/docs-config.sh | 30 + src/annotation.js | 229 +- src/events.js | 36 +- src/helpers.js | 35 - src/helpers/helpers.canvas.js | 122 + src/helpers/helpers.chart.js | 134 + src/helpers/helpers.core.js | 50 + src/helpers/helpers.geometric.js | 34 + src/helpers/helpers.options.js | 57 + src/helpers/index.js | 5 + src/scale.js | 66 + src/types/box.js | 167 +- src/types/ellipse.js | 67 +- src/types/index.js | 39 + src/types/label.js | 225 + src/types/line.js | 423 +- src/types/point.js | 85 +- src/types/polygon.js | 115 + test/events.js | 192 + test/fixtures/box/adjustScaleFalse.js | 53 + test/fixtures/box/adjustScaleFalse.png | Bin 0 -> 21166 bytes test/fixtures/box/adjustScaleIgnore.js | 53 + test/fixtures/box/adjustScaleIgnore.png | Bin 0 -> 21166 bytes test/fixtures/box/adjustScaleMax.js | 42 + test/fixtures/box/adjustScaleMax.png | Bin 0 -> 20209 bytes test/fixtures/box/adjustScaleMin.js | 42 + test/fixtures/box/adjustScaleMin.png | Bin 0 -> 20481 bytes test/fixtures/box/borderDash.js | 6 - test/fixtures/box/borderRadius.js | 6 - test/fixtures/box/borderWidth0.js | 2 - test/fixtures/box/category-index.js | 6 - test/fixtures/box/label-dynamic.js | 54 + test/fixtures/box/label-dynamic.png | Bin 0 -> 1518 bytes test/fixtures/box/label.js | 93 + test/fixtures/box/label.png | Bin 0 -> 24314 bytes test/fixtures/box/labelCanvas.js | 101 + test/fixtures/box/labelCanvas.png | Bin 0 -> 22522 bytes test/fixtures/box/labelMultiline.js | 88 + test/fixtures/box/labelMultiline.png | Bin 0 -> 23806 bytes test/fixtures/box/labelPadding.js | 96 + test/fixtures/box/labelPadding.png | Bin 0 -> 24773 bytes test/fixtures/box/labelPosition.js | 102 + test/fixtures/box/labelPosition.png | Bin 0 -> 21645 bytes test/fixtures/box/missingBothScales.js | 39 + test/fixtures/box/missingBothScales.png | Bin 0 -> 15813 bytes test/fixtures/box/missingXScale.js | 39 + test/fixtures/box/missingXScale.png | Bin 0 -> 15918 bytes test/fixtures/box/missingYScale.js | 39 + test/fixtures/box/missingYScale.png | Bin 0 -> 18750 bytes test/fixtures/box/shadow.js | 95 + test/fixtures/box/shadow.png | Bin 0 -> 26702 bytes test/fixtures/box/shadowColors.js | 99 + test/fixtures/box/shadowColors.png | Bin 0 -> 28085 bytes test/fixtures/ellipse/borderDash.js | 6 - test/fixtures/ellipse/missingBothScales.js | 39 + test/fixtures/ellipse/missingBothScales.png | Bin 0 -> 15813 bytes test/fixtures/ellipse/missingXScale.js | 39 + test/fixtures/ellipse/missingXScale.png | Bin 0 -> 24760 bytes test/fixtures/ellipse/missingYScale.js | 39 + test/fixtures/ellipse/missingYScale.png | Bin 0 -> 28292 bytes test/fixtures/ellipse/shadow.js | 65 + test/fixtures/ellipse/shadow.png | Bin 0 -> 43465 bytes test/fixtures/ellipse/shadowColors.js | 69 + test/fixtures/ellipse/shadowColors.png | Bin 0 -> 53602 bytes test/fixtures/label/border.js | 86 + test/fixtures/label/border.png | Bin 0 -> 14204 bytes test/fixtures/label/boxLocation.js | 112 + test/fixtures/label/boxLocation.png | Bin 0 -> 23612 bytes test/fixtures/label/boxNotVisible.js | 49 + test/fixtures/label/boxNotVisible.png | Bin 0 -> 18625 bytes test/fixtures/label/calloutBasic.js | 90 + test/fixtures/label/calloutBasic.png | Bin 0 -> 32699 bytes test/fixtures/label/calloutCanvas.js | 43 + test/fixtures/label/calloutCanvas.png | Bin 0 -> 23356 bytes .../label/calloutHorizontalPosition.js | 167 + .../label/calloutHorizontalPosition.png | Bin 0 -> 33831 bytes .../label/calloutScriptableOptions.js | 63 + .../label/calloutScriptableOptions.png | Bin 0 -> 21396 bytes test/fixtures/label/calloutSizing.js | 207 + test/fixtures/label/calloutSizing.png | Bin 0 -> 41064 bytes .../fixtures/label/calloutVerticalPosition.js | 161 + .../label/calloutVerticalPosition.png | Bin 0 -> 31282 bytes test/fixtures/label/canvas.js | 49 + test/fixtures/label/canvas.png | Bin 0 -> 12217 bytes test/fixtures/label/clip-false.js | 44 + test/fixtures/label/clip-false.png | Bin 0 -> 14801 bytes test/fixtures/label/contentMultiline.js | 81 + test/fixtures/label/contentMultiline.png | Bin 0 -> 34634 bytes test/fixtures/label/missingScales.js | 58 + test/fixtures/label/missingScales.png | Bin 0 -> 26961 bytes test/fixtures/label/padding.js | 101 + test/fixtures/label/padding.png | Bin 0 -> 24785 bytes test/fixtures/label/positionHorizontal.js | 140 + test/fixtures/label/positionHorizontal.png | Bin 0 -> 31624 bytes test/fixtures/label/positionVertical.js | 142 + test/fixtures/label/positionVertical.png | Bin 0 -> 27306 bytes test/fixtures/label/scriptableOptions.js | 57 + test/fixtures/label/scriptableOptions.png | Bin 0 -> 23871 bytes test/fixtures/label/shadow.js | 95 + test/fixtures/label/shadow.png | Bin 0 -> 16186 bytes test/fixtures/label/shadowColors.js | 98 + test/fixtures/label/shadowColors.png | Bin 0 -> 24412 bytes test/fixtures/line/arrowHeads.js | 218 + test/fixtures/line/arrowHeads.png | Bin 0 -> 66893 bytes .../line/arrowHeadsDeleteAtRuntime.js | 119 + .../line/arrowHeadsDeleteAtRuntime.png | Bin 0 -> 27177 bytes test/fixtures/line/arrowHeadsFallback.js | 81 + test/fixtures/line/arrowHeadsFallback.png | Bin 0 -> 30507 bytes test/fixtures/line/arrowHeadsFill.js | 241 + test/fixtures/line/arrowHeadsFill.png | Bin 0 -> 69697 bytes .../line/arrowHeadsFillScriptableOptions.js | 107 + .../line/arrowHeadsFillScriptableOptions.png | Bin 0 -> 47779 bytes test/fixtures/line/borderWidth0.js | 35 + test/fixtures/line/borderWidth0.png | Bin 0 -> 24664 bytes test/fixtures/line/label-border.js | 1 - test/fixtures/line/label-border.png | Bin 21746 -> 21952 bytes test/fixtures/line/label-dynamic-hide.js | 60 + test/fixtures/line/label-dynamic-hide.png | Bin 0 -> 12782 bytes test/fixtures/line/label-dynamic-show.js | 55 + test/fixtures/line/label-dynamic-show.png | Bin 0 -> 18520 bytes test/fixtures/line/labelCanvas.js | 48 + test/fixtures/line/labelCanvas.png | Bin 0 -> 15890 bytes test/fixtures/line/labelShadow.js | 92 + test/fixtures/line/labelShadow.png | Bin 0 -> 12531 bytes test/fixtures/line/labelShadowColors.js | 104 + test/fixtures/line/labelShadowColors.png | Bin 0 -> 23617 bytes test/fixtures/line/label_drawTime.png | Bin 13915 -> 15124 bytes .../fixtures/line/labelsScriptableOptions.png | Bin 39150 -> 40095 bytes test/fixtures/line/out-of-range-value0.js | 35 + test/fixtures/line/out-of-range-value0.png | Bin 0 -> 22926 bytes test/fixtures/line/padding.js | 78 + test/fixtures/line/padding.png | Bin 0 -> 36301 bytes test/fixtures/line/paddingXY.js | 79 + test/fixtures/line/paddingXY.png | Bin 0 -> 32334 bytes test/fixtures/line/partial-range.js | 2 - test/fixtures/line/position.png | Bin 13702 -> 14279 bytes test/fixtures/line/positionPercent.js | 171 + test/fixtures/line/positionPercent.png | Bin 0 -> 34127 bytes test/fixtures/line/rotation.js | 11 - test/fixtures/line/rotation.png | Bin 39150 -> 40095 bytes test/fixtures/line/scriptableOptions.png | Bin 39150 -> 40095 bytes test/fixtures/line/shadow.js | 57 + test/fixtures/line/shadow.png | Bin 0 -> 19311 bytes test/fixtures/line/shadowArrowHeads.js | 117 + test/fixtures/line/shadowArrowHeads.png | Bin 0 -> 37015 bytes test/fixtures/line/shadowArrowHeadsFill.js | 123 + test/fixtures/line/shadowArrowHeadsFill.png | Bin 0 -> 34326 bytes test/fixtures/line/shadowBorderColor.js | 57 + test/fixtures/line/shadowBorderColor.png | Bin 0 -> 24355 bytes test/fixtures/point/adjust.js | 133 + test/fixtures/point/adjust.png | Bin 0 -> 49131 bytes test/fixtures/point/basic.js | 3 - test/fixtures/point/basicBorderWidth0.js | 35 + test/fixtures/point/basicBorderWidth0.png | Bin 0 -> 9363 bytes test/fixtures/point/borderDash.js | 3 - test/fixtures/point/boundToPoint0.js | 36 + test/fixtures/point/boundToPoint0.png | Bin 0 -> 21576 bytes test/fixtures/point/boxLocation.js | 69 + test/fixtures/point/boxLocation.png | Bin 0 -> 35442 bytes test/fixtures/point/boxLocationAdjust.js | 157 + test/fixtures/point/boxLocationAdjust.png | Bin 0 -> 49881 bytes test/fixtures/point/boxLocationRadius.js | 69 + test/fixtures/point/boxLocationRadius.png | Bin 0 -> 31325 bytes test/fixtures/point/canvas.js | 35 + test/fixtures/point/canvas.png | Bin 0 -> 21146 bytes test/fixtures/point/cross.js | 57 + test/fixtures/point/cross.png | Bin 0 -> 18574 bytes test/fixtures/point/crossRot.js | 57 + test/fixtures/point/crossRot.png | Bin 0 -> 20411 bytes test/fixtures/point/crossRotShadow.js | 69 + test/fixtures/point/crossRotShadow.png | Bin 0 -> 15465 bytes test/fixtures/point/crossShadow.js | 69 + test/fixtures/point/crossShadow.png | Bin 0 -> 12737 bytes test/fixtures/point/dash.js | 57 + test/fixtures/point/dash.png | Bin 0 -> 17853 bytes test/fixtures/point/dashShadow.js | 69 + test/fixtures/point/dashShadow.png | Bin 0 -> 9861 bytes test/fixtures/point/line.js | 57 + test/fixtures/point/line.png | Bin 0 -> 17797 bytes test/fixtures/point/lineShadow.js | 69 + test/fixtures/point/lineShadow.png | Bin 0 -> 9723 bytes test/fixtures/point/rect.js | 57 + test/fixtures/point/rect.png | Bin 0 -> 18886 bytes test/fixtures/point/rectRot.js | 57 + test/fixtures/point/rectRot.png | Bin 0 -> 21048 bytes test/fixtures/point/rectRotShadow.js | 69 + test/fixtures/point/rectRotShadow.png | Bin 0 -> 13561 bytes test/fixtures/point/rectRounded.js | 57 + test/fixtures/point/rectRounded.png | Bin 0 -> 21698 bytes test/fixtures/point/rectRoundedShadow.js | 69 + test/fixtures/point/rectRoundedShadow.png | Bin 0 -> 17721 bytes test/fixtures/point/rectShadow.js | 69 + test/fixtures/point/rectShadow.png | Bin 0 -> 11840 bytes test/fixtures/point/rotation.js | 60 + test/fixtures/point/rotation.png | Bin 0 -> 27262 bytes test/fixtures/point/scriptableOptions.js | 80 +- test/fixtures/point/scriptableOptions.png | Bin 13190 -> 18668 bytes test/fixtures/point/shadow.js | 39 + test/fixtures/point/shadow.png | Bin 0 -> 9256 bytes test/fixtures/point/shadowColors.js | 40 + test/fixtures/point/shadowColors.png | Bin 0 -> 21863 bytes .../point/shadowColorsBorderWidth0.js | 40 + .../point/shadowColorsBorderWidth0.png | Bin 0 -> 13828 bytes test/fixtures/point/star.js | 57 + test/fixtures/point/star.png | Bin 0 -> 21070 bytes test/fixtures/point/starShadow.js | 69 + test/fixtures/point/starShadow.png | Bin 0 -> 18390 bytes test/fixtures/point/triangle.js | 57 + test/fixtures/point/triangle.png | Bin 0 -> 22941 bytes test/fixtures/point/triangleShadow.js | 69 + test/fixtures/point/triangleShadow.png | Bin 0 -> 15799 bytes test/fixtures/polygon/adjust.js | 139 + test/fixtures/polygon/adjust.png | Bin 0 -> 44249 bytes test/fixtures/polygon/borderDash.js | 61 + test/fixtures/polygon/borderDash.png | Bin 0 -> 31729 bytes test/fixtures/polygon/boundToPoint0.js | 39 + test/fixtures/polygon/boundToPoint0.png | Bin 0 -> 24388 bytes test/fixtures/polygon/boxLocation.js | 93 + test/fixtures/polygon/boxLocation.png | Bin 0 -> 41270 bytes test/fixtures/polygon/boxLocationAdjust.js | 167 + test/fixtures/polygon/boxLocationAdjust.png | Bin 0 -> 33893 bytes test/fixtures/polygon/boxLocationRadius.js | 71 + test/fixtures/polygon/boxLocationRadius.png | Bin 0 -> 29421 bytes test/fixtures/polygon/decagon.js | 40 + test/fixtures/polygon/decagon.png | Bin 0 -> 22522 bytes test/fixtures/polygon/heptagon.js | 40 + test/fixtures/polygon/heptagon.png | Bin 0 -> 22745 bytes test/fixtures/polygon/hexagon.js | 40 + test/fixtures/polygon/hexagon.png | Bin 0 -> 22250 bytes test/fixtures/polygon/hexagonWithPoints.js | 52 + test/fixtures/polygon/hexagonWithPoints.png | Bin 0 -> 5181 bytes test/fixtures/polygon/invalidSides.js | 50 + test/fixtures/polygon/invalidSides.png | Bin 0 -> 19364 bytes test/fixtures/polygon/nonagon.js | 40 + test/fixtures/polygon/nonagon.png | Bin 0 -> 22968 bytes test/fixtures/polygon/octagon.js | 40 + test/fixtures/polygon/octagon.png | Bin 0 -> 23140 bytes test/fixtures/polygon/pentagon.js | 40 + test/fixtures/polygon/pentagon.png | Bin 0 -> 22528 bytes test/fixtures/polygon/pentagonShadow.js | 44 + test/fixtures/polygon/pentagonShadow.png | Bin 0 -> 18228 bytes test/fixtures/polygon/pentagonShadowColors.js | 45 + .../fixtures/polygon/pentagonShadowColors.png | Bin 0 -> 31420 bytes test/fixtures/polygon/rhombus.js | 40 + test/fixtures/polygon/rhombus.png | Bin 0 -> 20782 bytes test/fixtures/polygon/rhombusShadow.js | 44 + test/fixtures/polygon/rhombusShadow.png | Bin 0 -> 14586 bytes test/fixtures/polygon/rotation.js | 51 + test/fixtures/polygon/rotation.png | Bin 0 -> 25079 bytes test/fixtures/polygon/scriptableOptions.js | 60 + test/fixtures/polygon/scriptableOptions.png | Bin 0 -> 28468 bytes test/fixtures/polygon/square.js | 41 + test/fixtures/polygon/square.png | Bin 0 -> 20069 bytes test/fixtures/polygon/squareShadow.js | 45 + test/fixtures/polygon/squareShadow.png | Bin 0 -> 13271 bytes test/fixtures/polygon/triangle.js | 39 + test/fixtures/polygon/triangle.png | Bin 0 -> 21931 bytes test/fixtures/polygon/triangleShadow.js | 43 + test/fixtures/polygon/triangleShadow.png | Bin 0 -> 17035 bytes test/index.js | 11 + test/integration/.eslintrc.yml | 2 + test/integration/integration-test.js | 46 + test/integration/ts/basic.ts | 34 + test/integration/ts/package.json | 19 + test/integration/ts/test.js | 19 + test/integration/ts/tsconfig.json | 8 + test/seed-reporter.js | 13 + test/specs/annotation.spec.js | 41 + test/specs/box.spec.js | 45 + test/specs/display.spec.js | 61 - test/specs/ellipse.spec.js | 71 + test/specs/events.spec.js | 205 +- test/specs/helpers.spec.js | 25 + test/specs/label.spec.js | 47 + test/specs/line.spec.js | 20 + test/specs/lineLabel.spec.js | 28 + test/specs/point.spec.js | 213 +- test/specs/polygon.spec.js | 115 + test/utils.js | 55 + types/events.d.ts | 4 + types/index.d.ts | 6 +- types/label.d.ts | 180 +- types/options.d.ts | 113 +- types/tests/exports.ts | 1 + 355 files changed, 19732 insertions(+), 6625 deletions(-) create mode 100644 .gitattributes create mode 100644 docs/guide/configuration.md delete mode 100644 docs/guide/interaction.md create mode 100644 docs/guide/types/label.md create mode 100644 docs/guide/types/polygon.md rename docs/samples/{types/box.md => box/basic.md} (85%) create mode 100644 docs/samples/box/disclosure.md create mode 100644 docs/samples/box/quarters.md rename docs/samples/{types/ellipse.md => ellipse/basic.md} (83%) create mode 100644 docs/samples/ellipse/rotation.md create mode 100644 docs/samples/label/basic.md create mode 100644 docs/samples/label/callout.md create mode 100644 docs/samples/label/lowerUpper.md create mode 100644 docs/samples/label/point.md create mode 100644 docs/samples/line/animation.md create mode 100644 docs/samples/line/average.md create mode 100644 docs/samples/line/basic.md create mode 100644 docs/samples/line/datasetBars.md create mode 100644 docs/samples/line/labelVisibility.md create mode 100644 docs/samples/line/limited.md rename docs/samples/{types/line.md => line/lowerUpper.md} (69%) create mode 100644 docs/samples/line/standardDeviation.md create mode 100644 docs/samples/line/visibility.md rename docs/samples/{types/point.md => point/basic.md} (77%) create mode 100644 docs/samples/point/combined.md create mode 100644 docs/samples/point/outsideChartArea.md create mode 100644 docs/samples/point/shadow.md create mode 100644 docs/samples/polygon/basic.md create mode 100644 docs/samples/polygon/outsideChartArea.md create mode 100644 docs/samples/polygon/shadow.md create mode 100644 docs/samples/polygon/stop.md delete mode 100644 old_samples/.eslintrc.yml delete mode 100644 old_samples/animation.html delete mode 100644 old_samples/autoRotation.html delete mode 100644 old_samples/bar.html delete mode 100644 old_samples/box.html delete mode 100644 old_samples/bubble.html delete mode 100644 old_samples/combo-bar-line.html delete mode 100644 old_samples/ellipse.html delete mode 100644 old_samples/horizontal-line.html delete mode 100644 old_samples/imageLabels.html delete mode 100644 old_samples/labels.html delete mode 100644 old_samples/line-logarithmic.html delete mode 100644 old_samples/line-time-scale.html delete mode 100644 old_samples/pie.html delete mode 100644 old_samples/point.html delete mode 100644 old_samples/polar-area.html delete mode 100644 old_samples/radar.html delete mode 100644 old_samples/updates.html create mode 100755 scripts/docs-config.sh delete mode 100644 src/helpers.js create mode 100644 src/helpers/helpers.canvas.js create mode 100644 src/helpers/helpers.chart.js create mode 100644 src/helpers/helpers.core.js create mode 100644 src/helpers/helpers.geometric.js create mode 100644 src/helpers/helpers.options.js create mode 100644 src/helpers/index.js create mode 100644 src/scale.js create mode 100644 src/types/index.js create mode 100644 src/types/label.js create mode 100644 src/types/polygon.js create mode 100644 test/events.js create mode 100644 test/fixtures/box/adjustScaleFalse.js create mode 100644 test/fixtures/box/adjustScaleFalse.png create mode 100644 test/fixtures/box/adjustScaleIgnore.js create mode 100644 test/fixtures/box/adjustScaleIgnore.png create mode 100644 test/fixtures/box/adjustScaleMax.js create mode 100644 test/fixtures/box/adjustScaleMax.png create mode 100644 test/fixtures/box/adjustScaleMin.js create mode 100644 test/fixtures/box/adjustScaleMin.png create mode 100644 test/fixtures/box/label-dynamic.js create mode 100644 test/fixtures/box/label-dynamic.png create mode 100644 test/fixtures/box/label.js create mode 100644 test/fixtures/box/label.png create mode 100644 test/fixtures/box/labelCanvas.js create mode 100644 test/fixtures/box/labelCanvas.png create mode 100644 test/fixtures/box/labelMultiline.js create mode 100644 test/fixtures/box/labelMultiline.png create mode 100644 test/fixtures/box/labelPadding.js create mode 100644 test/fixtures/box/labelPadding.png create mode 100644 test/fixtures/box/labelPosition.js create mode 100644 test/fixtures/box/labelPosition.png create mode 100644 test/fixtures/box/missingBothScales.js create mode 100644 test/fixtures/box/missingBothScales.png create mode 100644 test/fixtures/box/missingXScale.js create mode 100644 test/fixtures/box/missingXScale.png create mode 100644 test/fixtures/box/missingYScale.js create mode 100644 test/fixtures/box/missingYScale.png create mode 100644 test/fixtures/box/shadow.js create mode 100644 test/fixtures/box/shadow.png create mode 100644 test/fixtures/box/shadowColors.js create mode 100644 test/fixtures/box/shadowColors.png create mode 100644 test/fixtures/ellipse/missingBothScales.js create mode 100644 test/fixtures/ellipse/missingBothScales.png create mode 100644 test/fixtures/ellipse/missingXScale.js create mode 100644 test/fixtures/ellipse/missingXScale.png create mode 100644 test/fixtures/ellipse/missingYScale.js create mode 100644 test/fixtures/ellipse/missingYScale.png create mode 100644 test/fixtures/ellipse/shadow.js create mode 100644 test/fixtures/ellipse/shadow.png create mode 100644 test/fixtures/ellipse/shadowColors.js create mode 100644 test/fixtures/ellipse/shadowColors.png create mode 100644 test/fixtures/label/border.js create mode 100644 test/fixtures/label/border.png create mode 100644 test/fixtures/label/boxLocation.js create mode 100644 test/fixtures/label/boxLocation.png create mode 100644 test/fixtures/label/boxNotVisible.js create mode 100644 test/fixtures/label/boxNotVisible.png create mode 100644 test/fixtures/label/calloutBasic.js create mode 100644 test/fixtures/label/calloutBasic.png create mode 100644 test/fixtures/label/calloutCanvas.js create mode 100644 test/fixtures/label/calloutCanvas.png create mode 100644 test/fixtures/label/calloutHorizontalPosition.js create mode 100644 test/fixtures/label/calloutHorizontalPosition.png create mode 100644 test/fixtures/label/calloutScriptableOptions.js create mode 100644 test/fixtures/label/calloutScriptableOptions.png create mode 100644 test/fixtures/label/calloutSizing.js create mode 100644 test/fixtures/label/calloutSizing.png create mode 100644 test/fixtures/label/calloutVerticalPosition.js create mode 100644 test/fixtures/label/calloutVerticalPosition.png create mode 100644 test/fixtures/label/canvas.js create mode 100644 test/fixtures/label/canvas.png create mode 100644 test/fixtures/label/clip-false.js create mode 100644 test/fixtures/label/clip-false.png create mode 100644 test/fixtures/label/contentMultiline.js create mode 100644 test/fixtures/label/contentMultiline.png create mode 100644 test/fixtures/label/missingScales.js create mode 100644 test/fixtures/label/missingScales.png create mode 100644 test/fixtures/label/padding.js create mode 100644 test/fixtures/label/padding.png create mode 100644 test/fixtures/label/positionHorizontal.js create mode 100644 test/fixtures/label/positionHorizontal.png create mode 100644 test/fixtures/label/positionVertical.js create mode 100644 test/fixtures/label/positionVertical.png create mode 100644 test/fixtures/label/scriptableOptions.js create mode 100644 test/fixtures/label/scriptableOptions.png create mode 100644 test/fixtures/label/shadow.js create mode 100644 test/fixtures/label/shadow.png create mode 100644 test/fixtures/label/shadowColors.js create mode 100644 test/fixtures/label/shadowColors.png create mode 100644 test/fixtures/line/arrowHeads.js create mode 100644 test/fixtures/line/arrowHeads.png create mode 100644 test/fixtures/line/arrowHeadsDeleteAtRuntime.js create mode 100644 test/fixtures/line/arrowHeadsDeleteAtRuntime.png create mode 100644 test/fixtures/line/arrowHeadsFallback.js create mode 100644 test/fixtures/line/arrowHeadsFallback.png create mode 100644 test/fixtures/line/arrowHeadsFill.js create mode 100644 test/fixtures/line/arrowHeadsFill.png create mode 100644 test/fixtures/line/arrowHeadsFillScriptableOptions.js create mode 100644 test/fixtures/line/arrowHeadsFillScriptableOptions.png create mode 100644 test/fixtures/line/borderWidth0.js create mode 100644 test/fixtures/line/borderWidth0.png create mode 100644 test/fixtures/line/label-dynamic-hide.js create mode 100644 test/fixtures/line/label-dynamic-hide.png create mode 100644 test/fixtures/line/label-dynamic-show.js create mode 100644 test/fixtures/line/label-dynamic-show.png create mode 100644 test/fixtures/line/labelCanvas.js create mode 100644 test/fixtures/line/labelCanvas.png create mode 100644 test/fixtures/line/labelShadow.js create mode 100644 test/fixtures/line/labelShadow.png create mode 100644 test/fixtures/line/labelShadowColors.js create mode 100644 test/fixtures/line/labelShadowColors.png create mode 100644 test/fixtures/line/out-of-range-value0.js create mode 100644 test/fixtures/line/out-of-range-value0.png create mode 100644 test/fixtures/line/padding.js create mode 100644 test/fixtures/line/padding.png create mode 100644 test/fixtures/line/paddingXY.js create mode 100644 test/fixtures/line/paddingXY.png create mode 100644 test/fixtures/line/positionPercent.js create mode 100644 test/fixtures/line/positionPercent.png create mode 100644 test/fixtures/line/shadow.js create mode 100644 test/fixtures/line/shadow.png create mode 100644 test/fixtures/line/shadowArrowHeads.js create mode 100644 test/fixtures/line/shadowArrowHeads.png create mode 100644 test/fixtures/line/shadowArrowHeadsFill.js create mode 100644 test/fixtures/line/shadowArrowHeadsFill.png create mode 100644 test/fixtures/line/shadowBorderColor.js create mode 100644 test/fixtures/line/shadowBorderColor.png create mode 100644 test/fixtures/point/adjust.js create mode 100644 test/fixtures/point/adjust.png create mode 100644 test/fixtures/point/basicBorderWidth0.js create mode 100644 test/fixtures/point/basicBorderWidth0.png create mode 100644 test/fixtures/point/boundToPoint0.js create mode 100644 test/fixtures/point/boundToPoint0.png create mode 100644 test/fixtures/point/boxLocation.js create mode 100644 test/fixtures/point/boxLocation.png create mode 100644 test/fixtures/point/boxLocationAdjust.js create mode 100644 test/fixtures/point/boxLocationAdjust.png create mode 100644 test/fixtures/point/boxLocationRadius.js create mode 100644 test/fixtures/point/boxLocationRadius.png create mode 100644 test/fixtures/point/canvas.js create mode 100644 test/fixtures/point/canvas.png create mode 100644 test/fixtures/point/cross.js create mode 100644 test/fixtures/point/cross.png create mode 100644 test/fixtures/point/crossRot.js create mode 100644 test/fixtures/point/crossRot.png create mode 100644 test/fixtures/point/crossRotShadow.js create mode 100644 test/fixtures/point/crossRotShadow.png create mode 100644 test/fixtures/point/crossShadow.js create mode 100644 test/fixtures/point/crossShadow.png create mode 100644 test/fixtures/point/dash.js create mode 100644 test/fixtures/point/dash.png create mode 100644 test/fixtures/point/dashShadow.js create mode 100644 test/fixtures/point/dashShadow.png create mode 100644 test/fixtures/point/line.js create mode 100644 test/fixtures/point/line.png create mode 100644 test/fixtures/point/lineShadow.js create mode 100644 test/fixtures/point/lineShadow.png create mode 100644 test/fixtures/point/rect.js create mode 100644 test/fixtures/point/rect.png create mode 100644 test/fixtures/point/rectRot.js create mode 100644 test/fixtures/point/rectRot.png create mode 100644 test/fixtures/point/rectRotShadow.js create mode 100644 test/fixtures/point/rectRotShadow.png create mode 100644 test/fixtures/point/rectRounded.js create mode 100644 test/fixtures/point/rectRounded.png create mode 100644 test/fixtures/point/rectRoundedShadow.js create mode 100644 test/fixtures/point/rectRoundedShadow.png create mode 100644 test/fixtures/point/rectShadow.js create mode 100644 test/fixtures/point/rectShadow.png create mode 100644 test/fixtures/point/rotation.js create mode 100644 test/fixtures/point/rotation.png create mode 100644 test/fixtures/point/shadow.js create mode 100644 test/fixtures/point/shadow.png create mode 100644 test/fixtures/point/shadowColors.js create mode 100644 test/fixtures/point/shadowColors.png create mode 100644 test/fixtures/point/shadowColorsBorderWidth0.js create mode 100644 test/fixtures/point/shadowColorsBorderWidth0.png create mode 100644 test/fixtures/point/star.js create mode 100644 test/fixtures/point/star.png create mode 100644 test/fixtures/point/starShadow.js create mode 100644 test/fixtures/point/starShadow.png create mode 100644 test/fixtures/point/triangle.js create mode 100644 test/fixtures/point/triangle.png create mode 100644 test/fixtures/point/triangleShadow.js create mode 100644 test/fixtures/point/triangleShadow.png create mode 100644 test/fixtures/polygon/adjust.js create mode 100644 test/fixtures/polygon/adjust.png create mode 100644 test/fixtures/polygon/borderDash.js create mode 100644 test/fixtures/polygon/borderDash.png create mode 100644 test/fixtures/polygon/boundToPoint0.js create mode 100644 test/fixtures/polygon/boundToPoint0.png create mode 100644 test/fixtures/polygon/boxLocation.js create mode 100644 test/fixtures/polygon/boxLocation.png create mode 100644 test/fixtures/polygon/boxLocationAdjust.js create mode 100644 test/fixtures/polygon/boxLocationAdjust.png create mode 100644 test/fixtures/polygon/boxLocationRadius.js create mode 100644 test/fixtures/polygon/boxLocationRadius.png create mode 100644 test/fixtures/polygon/decagon.js create mode 100644 test/fixtures/polygon/decagon.png create mode 100644 test/fixtures/polygon/heptagon.js create mode 100644 test/fixtures/polygon/heptagon.png create mode 100644 test/fixtures/polygon/hexagon.js create mode 100644 test/fixtures/polygon/hexagon.png create mode 100644 test/fixtures/polygon/hexagonWithPoints.js create mode 100644 test/fixtures/polygon/hexagonWithPoints.png create mode 100644 test/fixtures/polygon/invalidSides.js create mode 100644 test/fixtures/polygon/invalidSides.png create mode 100644 test/fixtures/polygon/nonagon.js create mode 100644 test/fixtures/polygon/nonagon.png create mode 100644 test/fixtures/polygon/octagon.js create mode 100644 test/fixtures/polygon/octagon.png create mode 100644 test/fixtures/polygon/pentagon.js create mode 100644 test/fixtures/polygon/pentagon.png create mode 100644 test/fixtures/polygon/pentagonShadow.js create mode 100644 test/fixtures/polygon/pentagonShadow.png create mode 100644 test/fixtures/polygon/pentagonShadowColors.js create mode 100644 test/fixtures/polygon/pentagonShadowColors.png create mode 100644 test/fixtures/polygon/rhombus.js create mode 100644 test/fixtures/polygon/rhombus.png create mode 100644 test/fixtures/polygon/rhombusShadow.js create mode 100644 test/fixtures/polygon/rhombusShadow.png create mode 100644 test/fixtures/polygon/rotation.js create mode 100644 test/fixtures/polygon/rotation.png create mode 100644 test/fixtures/polygon/scriptableOptions.js create mode 100644 test/fixtures/polygon/scriptableOptions.png create mode 100644 test/fixtures/polygon/square.js create mode 100644 test/fixtures/polygon/square.png create mode 100644 test/fixtures/polygon/squareShadow.js create mode 100644 test/fixtures/polygon/squareShadow.png create mode 100644 test/fixtures/polygon/triangle.js create mode 100644 test/fixtures/polygon/triangle.png create mode 100644 test/fixtures/polygon/triangleShadow.js create mode 100644 test/fixtures/polygon/triangleShadow.png create mode 100644 test/integration/.eslintrc.yml create mode 100644 test/integration/integration-test.js create mode 100644 test/integration/ts/basic.ts create mode 100644 test/integration/ts/package.json create mode 100644 test/integration/ts/test.js create mode 100644 test/integration/ts/tsconfig.json create mode 100644 test/seed-reporter.js create mode 100644 test/specs/annotation.spec.js delete mode 100644 test/specs/display.spec.js create mode 100644 test/specs/helpers.spec.js create mode 100644 test/specs/label.spec.js create mode 100644 test/specs/lineLabel.spec.js create mode 100644 test/specs/polygon.spec.js create mode 100644 test/utils.js diff --git a/.eslintrc.yml b/.eslintrc.yml index 389c35be5..875ccdcb0 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -31,3 +31,4 @@ rules: es/no-regexp-named-capture-groups: "error" es/no-regexp-s-flag: "error" es/no-regexp-unicode-property-escapes: "error" + linebreak-style: ["error", "unix"] diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..7535f72b9 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,7 @@ +# We'll let Git's auto-detection algorithm infer if a file is text. If it is, +# enforce LF line endings regardless of OS or git configurations. +* text=auto eol=lf + +# Isolate binary files in case the auto-detection algorithm fails and +# marks them as text files (which could brick them). +*.{png,jpg,jpeg,gif,webp,woff,woff2} binary diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 81176ec1d..92ce08363 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -19,6 +19,7 @@ categories: - title: 'Development' labels: - 'chore' + - 'performance' exclude-labels: - 'infrastructure' change-template: '- #$NUMBER $TITLE' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6e4079928..56e287000 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,10 @@ jobs: steps: - uses: actions/checkout@v2 - name: Use Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v2 + with: + cache: npm + node-version: 16 - run: | npm ci npm run build diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 686e80b9e..a699bc0e2 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -8,31 +8,36 @@ on: jobs: checks: - if: github.event_name != 'push' + if: github.event_name == 'pull_request' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - uses: actions/setup-node@v1 + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 with: - node-version: '14.x' + cache: npm + node-version: 16 - name: Test Build run: | npm ci + ./scripts/docs-config.sh master npm run docs gh-release: - if: github.event_name != 'pull_request' + if: github.event_name == 'push' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - uses: actions/setup-node@v1 + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 with: - node-version: '14.x' + cache: npm + node-version: 16 - name: Build run: | npm ci + ./scripts/docs-config.sh master npm run docs - name: Release to GitHub Pages uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GH_AUTH_TOKEN }} publish_dir: dist/docs + destination_dir: master diff --git a/.github/workflows/npmpublish.yml b/.github/workflows/npmpublish.yml index 54dad571b..9a62ff970 100644 --- a/.github/workflows/npmpublish.yml +++ b/.github/workflows/npmpublish.yml @@ -20,7 +20,10 @@ jobs: steps: - uses: actions/checkout@v2 - name: Use Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v2 + with: + cache: npm + node-version: 16 - name: Test run: | npm ci @@ -31,10 +34,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 + - uses: actions/setup-node@v2 with: - node-version: 12 + cache: npm + node-version: 16 registry-url: https://registry.npmjs.org/ + - name: Setup and build run: | npm ci @@ -45,13 +50,64 @@ jobs: npm pack env: VERSION: ${{ needs.setup.outputs.version }} + - name: Publish @next run: npm publish --tag next if: "github.event.release.prerelease" env: NODE_AUTH_TOKEN: ${{secrets.NPM_AUTH_TOKEN}} + - name: Publish @latest run: npm publish --tag latest if: "!github.event.release.prerelease" env: NODE_AUTH_TOKEN: ${{secrets.NPM_AUTH_TOKEN}} + + - name: Build docs + run: | + ./scripts/docs-config.sh "$VERSION" release + npm run docs + env: + VERSION: ${{ needs.setup.outputs.version }} + + - name: Release to GitHub Pages (version) + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GH_AUTH_TOKEN }} + publish_dir: dist/docs + destination_dir: ${{ needs.setup.outputs.version }} + + publish-docs: + needs: [test, setup] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: 16 + registry-url: https://registry.npmjs.org/ + + - name: Build docs (latest/next) + run: | + npm ci + npm run build + ./scripts/docs-config.sh "$VERSION" + npm run docs + env: + VERSION: ${{ needs.setup.outputs.version }} + + - name: Release to GitHub Pages (latest) + if: "!github.event.release.prerelease" + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GH_AUTH_TOKEN }} + publish_dir: dist/docs + destination_dir: latest + + - name: Release to GitHub Pages (next) + if: "github.event.release.prerelease" + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GH_AUTH_TOKEN }} + publish_dir: dist/docs + destination_dir: next diff --git a/README.md b/README.md index af25005e6..64b7a460a 100644 --- a/README.md +++ b/README.md @@ -15,20 +15,13 @@ An annotation plugin for Chart.js >= 3.0.0 For Chart.js 2.4.0 to 2.9.x support, use [version 0.5.7 of this plugin](https://github.com/chartjs/chartjs-plugin-annotation/releases/tag/v0.5.7) -This plugin draws lines, boxes, points and ellipses on the chart area. +This plugin draws lines, boxes, points, labels, polygons and ellipses on the chart area. Annotations work with line, bar, scatter and bubble charts that use linear, logarithmic, time, or category scales. Annotations will not work on any chart that does not have exactly two axes, including pie, radar, and polar area charts. ![Example Screenshot](docs/guide/banner.png) -[View this example](https://chartjs.org/chartjs-plugin-annotation/samples/intro.html) - -## To-do Items - -The following features still need to be done: - -* Box annotation labels -* Text annotations +[View this example](https://www.chartjs.org/chartjs-plugin-annotation/latest/samples/intro.html) ## Documentation @@ -40,4 +33,4 @@ Before submitting an issue or a pull request to the project, please take a momen ## License -Chart.Annotation.js is available under the [MIT license](http://opensource.org/licenses/MIT). +Chart.Annotation.js is available under the [MIT license](LICENSE.md). diff --git a/dist/chartjs-plugin-annotation.esm.js b/dist/chartjs-plugin-annotation.esm.js index 606d6fb7a..6a540f449 100644 --- a/dist/chartjs-plugin-annotation.esm.js +++ b/dist/chartjs-plugin-annotation.esm.js @@ -1,21 +1,19 @@ /*! -* chartjs-plugin-annotation v1.0.2 +* chartjs-plugin-annotation v1.2.2 * https://www.chartjs.org/chartjs-plugin-annotation/index - * (c) 2021 chartjs-plugin-annotation Contributors + * (c) 2022 chartjs-plugin-annotation Contributors * Released under the MIT License */ import ChartJsV3, { Element, defaults, Chart, Animations } from 'chart.js-v3'; -import { Image } from 'canvas'; +import { Image as Image$1 } from 'canvas'; -const {distanceBetweenPoints} = ChartJsV3.helpers; -const callHandler = ChartJsV3.helpers.callback; +const {distanceBetweenPoints, defined: defined$2, callback} = ChartJsV3.helpers; const clickHooks = ['click', 'dblclick']; const moveHooks = ['enter', 'leave']; const hooks = clickHooks.concat(moveHooks); function updateListeners(chart, state, options) { - const annotations = state.annotations || []; state.listened = false; state.moveListened = false; @@ -23,6 +21,8 @@ function updateListeners(chart, state, options) { if (typeof options[hook] === 'function') { state.listened = true; state.listeners[hook] = options[hook]; + } else if (defined$2(state.listeners[hook])) { + delete state.listeners[hook]; } }); moveHooks.forEach(hook => { @@ -32,7 +32,7 @@ function updateListeners(chart, state, options) { }); if (!state.listened || !state.moveListened) { - annotations.forEach(scope => { + state.annotations.forEach(scope => { if (!state.listened) { clickHooks.forEach(hook => { if (typeof scope[hook] === 'function') { @@ -52,21 +52,21 @@ function updateListeners(chart, state, options) { } } -function handleEvent(chart, state, event, options) { +function handleEvent(state, event, options) { if (state.listened) { switch (event.type) { case 'mousemove': case 'mouseout': - handleMoveEvents(chart, state, event); + handleMoveEvents(state, event); break; case 'click': - handleClickEvents(chart, state, event, options); + handleClickEvents(state, event, options); break; } } } -function handleMoveEvents(chart, state, event) { +function handleMoveEvents(state, event) { if (!state.moveListened) { return; } @@ -80,20 +80,20 @@ function handleMoveEvents(chart, state, event) { const previous = state.hovered; state.hovered = element; - dispatchMoveEvents(chart, state, {previous, element}, event); + dispatchMoveEvents(state, {previous, element}, event); } -function dispatchMoveEvents(chart, state, elements, event) { +function dispatchMoveEvents(state, elements, event) { const {previous, element} = elements; if (previous && previous !== element) { - dispatchEvent(chart, previous.options.leave || state.listeners.leave, previous, event); + dispatchEvent(previous.options.leave || state.listeners.leave, previous, event); } if (element && element !== previous) { - dispatchEvent(chart, element.options.enter || state.listeners.enter, element, event); + dispatchEvent(element.options.enter || state.listeners.enter, element, event); } } -function handleClickEvents(chart, state, event, options) { +function handleClickEvents(state, event, options) { const listeners = state.listeners; const element = getNearestItem(state.elements, event); if (element) { @@ -104,22 +104,22 @@ function handleClickEvents(chart, state, event, options) { // 2nd click before timeout, so its a double click clearTimeout(element.clickTimeout); delete element.clickTimeout; - dispatchEvent(chart, dblclick, element, event); + dispatchEvent(dblclick, element, event); } else if (dblclick) { // if there is a dblclick handler, wait for dblClickSpeed ms before deciding its a click element.clickTimeout = setTimeout(() => { delete element.clickTimeout; - dispatchEvent(chart, click, element, event); + dispatchEvent(click, element, event); }, options.dblClickSpeed); } else { // no double click handler, just call the click handler directly - dispatchEvent(chart, click, element, event); + dispatchEvent(click, element, event); } } } -function dispatchEvent(chart, handler, element, event) { - callHandler(handler, [{chart, element}, event]); +function dispatchEvent(handler, element, event) { + callback(handler, [element.$context, event]); } function getNearestItem(elements, position) { @@ -145,7 +145,71 @@ function getNearestItem(elements, position) { .slice(0, 1)[0]; // return only the top item } -const {isFinite: isFinite$1} = ChartJsV3.helpers; +const {isFinite: isFinite$1, valueOrDefault: valueOrDefault$2, defined: defined$1} = ChartJsV3.helpers; + +function adjustScaleRange(chart, scale, annotations) { + const range = getScaleLimits(scale, annotations); + let changed = changeScaleLimit(scale, range, 'min', 'suggestedMin'); + changed = changeScaleLimit(scale, range, 'max', 'suggestedMax') || changed; + if (changed && typeof scale.handleTickRangeOptions === 'function') { + scale.handleTickRangeOptions(); + } +} + +function verifyScaleOptions(annotations, scales) { + for (const annotation of annotations) { + verifyScaleIDs(annotation, scales); + } +} + +function changeScaleLimit(scale, range, limit, suggestedLimit) { + if (isFinite$1(range[limit]) && !scaleLimitDefined(scale.options, limit, suggestedLimit)) { + const changed = scale[limit] !== range[limit]; + scale[limit] = range[limit]; + return changed; + } +} + +function scaleLimitDefined(scaleOptions, limit, suggestedLimit) { + return defined$1(scaleOptions[limit]) || defined$1(scaleOptions[suggestedLimit]); +} + +function verifyScaleIDs(annotation, scales) { + for (const key of ['scaleID', 'xScaleID', 'yScaleID']) { + if (annotation[key] && !scales[annotation[key]]) { + console.warn(`No scale found with id '${annotation[key]}' for annotation '${annotation.id}'`); + } + } +} + +function getScaleLimits(scale, annotations) { + const axis = scale.axis; + const scaleID = scale.id; + const scaleIDOption = axis + 'ScaleID'; + const limits = { + min: valueOrDefault$2(scale.min, Number.NEGATIVE_INFINITY), + max: valueOrDefault$2(scale.max, Number.POSITIVE_INFINITY) + }; + for (const annotation of annotations) { + if (annotation.scaleID === scaleID) { + updateLimits(annotation, scale, ['value', 'endValue'], limits); + } else if (annotation[scaleIDOption] === scaleID) { + updateLimits(annotation, scale, [axis + 'Min', axis + 'Max', axis + 'Value'], limits); + } + } + return limits; +} + +function updateLimits(annotation, scale, props, limits) { + for (const prop of props) { + const raw = annotation[prop]; + if (defined$1(raw)) { + const value = scale.parse(raw); + limits.min = Math.min(limits.min, value); + limits.max = Math.max(limits.max, value); + } + } +} const clamp = (x, from, to) => Math.min(to, Math.max(from, x)); @@ -156,23 +220,249 @@ function clampAll(obj, from, to) { return obj; } -function scaleValue(scale, value, fallback) { - value = typeof value === 'number' ? value : scale.parse(value); - return isFinite$1(value) ? scale.getPixelForValue(value) : fallback; +function inPointRange(point, center, radius, borderWidth) { + if (!point || !center || radius <= 0) { + return false; + } + const hBorderWidth = borderWidth / 2 || 0; + return (Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2)) <= Math.pow(radius + hBorderWidth, 2); +} + +function inBoxRange(mouseX, mouseY, {x, y, width, height}, borderWidth) { + const hBorderWidth = borderWidth / 2 || 0; + return mouseX >= x - hBorderWidth && + mouseX <= x + width + hBorderWidth && + mouseY >= y - hBorderWidth && + mouseY <= y + height + hBorderWidth; +} + +function getElementCenterPoint(element, useFinalPosition) { + const {x, y} = element.getProps(['x', 'y'], useFinalPosition); + return {x, y}; +} + +const isOlderPart = (act, req) => req > act || (act.length > req.length && act.substr(0, req.length) === req); + +function requireVersion(pkg, min, ver, strict = true) { + const parts = ver.split('.'); + let i = 0; + for (const req of min.split('.')) { + const act = parts[i++]; + if (parseInt(req, 10) < parseInt(act, 10)) { + break; + } + if (isOlderPart(act, req)) { + if (strict) { + throw new Error(`${pkg} v${ver} is not supported. v${min} or newer is required.`); + } else { + return false; + } + } + } + return true; +} + +const {isObject: isObject$1, valueOrDefault: valueOrDefault$1, defined} = ChartJsV3.helpers; + +const isPercentString = (s) => typeof s === 'string' && s.endsWith('%'); +const toPercent = (s) => clamp(parseFloat(s) / 100, 0, 1); + +function getRelativePosition(size, positionOption) { + if (positionOption === 'start') { + return 0; + } + if (positionOption === 'end') { + return size; + } + if (isPercentString(positionOption)) { + return toPercent(positionOption) * size; + } + return size / 2; +} + +function getSize(size, value) { + if (typeof value === 'number') { + return value; + } else if (isPercentString(value)) { + return toPercent(value) * size; + } + return size; +} + +function calculateTextAlignment(size, options) { + const {x, width} = size; + const textAlign = options.textAlign; + if (textAlign === 'center') { + return x + width / 2; + } else if (textAlign === 'end' || textAlign === 'right') { + return x + width; + } + return x; +} + +function toPosition(value) { + if (isObject$1(value)) { + return { + x: valueOrDefault$1(value.x, 'center'), + y: valueOrDefault$1(value.y, 'center'), + }; + } + value = valueOrDefault$1(value, 'center'); + return { + x: value, + y: value + }; +} + +function isBoundToPoint(options) { + return options && (defined(options.xValue) || defined(options.yValue)); +} + +const {addRoundedRectPath, isArray: isArray$1, toFont, toTRBLCorners, valueOrDefault} = ChartJsV3.helpers; + +const widthCache = new Map(); + +function isImageOrCanvas(content) { + return content instanceof Image$1 || content instanceof Image || content instanceof HTMLCanvasElement; +} + +/** + * Apply border options to the canvas context before drawing a shape + * @param {CanvasRenderingContext2D} ctx - chart canvas context + * @param {Object} options - options with border configuration + * @returns {boolean} true is the border options have been applied + */ +function setBorderStyle(ctx, options) { + if (options && options.borderWidth) { + ctx.lineCap = options.borderCapStyle; + ctx.setLineDash(options.borderDash); + ctx.lineDashOffset = options.borderDashOffset; + ctx.lineJoin = options.borderJoinStyle; + ctx.lineWidth = options.borderWidth; + ctx.strokeStyle = options.borderColor; + return true; + } +} + +/** + * Apply shadow options to the canvas context before drawing a shape + * @param {CanvasRenderingContext2D} ctx - chart canvas context + * @param {Object} options - options with shadow configuration + */ +function setShadowStyle(ctx, options) { + ctx.shadowColor = options.backgroundShadowColor; + ctx.shadowBlur = options.shadowBlur; + ctx.shadowOffsetX = options.shadowOffsetX; + ctx.shadowOffsetY = options.shadowOffsetY; +} + +/** + * Measure the label size using the label options. + * @param {CanvasRenderingContext2D} ctx - chart canvas context + * @param {Object} options - options to configure the label + * @returns {{width: number, height: number}} the measured size of the label + */ +function measureLabelSize(ctx, options) { + const content = options.content; + if (isImageOrCanvas(content)) { + return { + width: getSize(content.width, options.width), + height: getSize(content.height, options.height) + }; + } + const font = toFont(options.font); + const lines = isArray$1(content) ? content : [content]; + const mapKey = lines.join() + font.string + (ctx._measureText ? '-spriting' : ''); + if (!widthCache.has(mapKey)) { + ctx.save(); + ctx.font = font.string; + const count = lines.length; + let width = 0; + for (let i = 0; i < count; i++) { + const text = lines[i]; + width = Math.max(width, ctx.measureText(text).width); + } + ctx.restore(); + const height = count * font.lineHeight; + widthCache.set(mapKey, {width, height}); + } + return widthCache.get(mapKey); +} + +/** + * Draw a box with the size and the styling options. + * @param {CanvasRenderingContext2D} ctx - chart canvas context + * @param {{x: number, y: number, width: number, height: number}} rect - rect to draw + * @param {Object} options - options to style the box + * @returns {undefined} + */ +function drawBox(ctx, rect, options) { + const {x, y, width, height} = rect; + ctx.save(); + setShadowStyle(ctx, options); + const stroke = setBorderStyle(ctx, options); + ctx.fillStyle = options.backgroundColor; + ctx.beginPath(); + addRoundedRectPath(ctx, { + x, y, w: width, h: height, + // TODO: v2 remove support for cornerRadius + radius: clampAll(toTRBLCorners(valueOrDefault(options.cornerRadius, options.borderRadius)), 0, Math.min(width, height) / 2) + }); + ctx.closePath(); + ctx.fill(); + if (stroke) { + ctx.shadowColor = options.borderShadowColor; + ctx.stroke(); + } + ctx.restore(); +} + +function drawLabel(ctx, rect, options) { + const content = options.content; + if (isImageOrCanvas(content)) { + ctx.drawImage(content, rect.x, rect.y, rect.width, rect.height); + return; + } + const labels = isArray$1(content) ? content : [content]; + const font = toFont(options.font); + const lh = font.lineHeight; + const x = calculateTextAlignment(rect, options); + const y = rect.y + (lh / 2); + ctx.font = font.string; + ctx.textBaseline = 'middle'; + ctx.textAlign = options.textAlign; + ctx.fillStyle = options.color; + labels.forEach((l, i) => ctx.fillText(l, x, y + (i * lh))); +} + +/** + * @typedef {import('chart.js').Point} Point + */ + +/** + * @param {{x: number, y: number, width: number, height: number}} rect + * @returns {Point} + */ +function getRectCenterPoint(rect) { + const {x, y, width, height} = rect; + return { + x: x + width / 2, + y: y + height / 2 + }; } /** * Rotate a `point` relative to `center` point by `angle` - * @param {{x: number, y: number}} point - the point to rotate - * @param {{x: number, y: number}} center - center point for rotation + * @param {Point} point - the point to rotate + * @param {Point} center - center point for rotation * @param {number} angle - angle for rotation, in radians - * @returns {{x: number, y: number}} rotated point + * @returns {Point} rotated point */ function rotated(point, center, angle) { - var cos = Math.cos(angle); - var sin = Math.sin(angle); - var cx = center.x; - var cy = center.y; + const cos = Math.cos(angle); + const sin = Math.sin(angle); + const cx = center.x; + const cy = center.y; return { x: cx + cos * (point.x - cx) - sin * (point.y - cy), @@ -180,105 +470,227 @@ function rotated(point, center, angle) { }; } -const {addRoundedRectPath: addRoundedRectPath$1, toTRBLCorners: toTRBLCorners$1, valueOrDefault: valueOrDefault$2} = ChartJsV3.helpers; +const {isFinite} = ChartJsV3.helpers; -class BoxAnnotation extends Element { - inRange(mouseX, mouseY, useFinalPosition) { - const {x, y, width, height} = this.getProps(['x', 'y', 'width', 'height'], useFinalPosition); +/** + * @typedef { import("chart.js").Chart } Chart + * @typedef { import("chart.js").Scale } Scale + * @typedef { import("chart.js").Point } Point + * @typedef { import('../../types/options').CoreAnnotationOptions } CoreAnnotationOptions + * @typedef { import('../../types/options').PointAnnotationOptions } PointAnnotationOptions + */ - return mouseX >= x && - mouseX <= x + width && - mouseY >= y && - mouseY <= y + height; - } +/** + * @param {Scale} scale + * @param {number|string} value + * @param {number} fallback + * @returns {number} + */ +function scaleValue(scale, value, fallback) { + value = typeof value === 'number' ? value : scale.parse(value); + return isFinite(value) ? scale.getPixelForValue(value) : fallback; +} - getCenterPoint(useFinalPosition) { - const {x, y, width, height} = this.getProps(['x', 'y', 'width', 'height'], useFinalPosition); +/** + * @param {Scale} scale + * @param {{start: number, end: number}} options + * @returns {{start: number, end: number}} + */ +function getChartDimensionByScale(scale, options) { + if (scale) { + const min = scaleValue(scale, options.min, options.start); + const max = scaleValue(scale, options.max, options.end); return { - x: x + width / 2, - y: y + height / 2 + start: Math.min(min, max), + end: Math.max(min, max) }; } + return { + start: options.start, + end: options.end + }; +} - draw(ctx) { - const {x, y, width, height, options} = this; +/** + * @param {Chart} chart + * @param {CoreAnnotationOptions} options + * @returns {Point} + */ +function getChartPoint(chart, options) { + const {chartArea, scales} = chart; + const xScale = scales[options.xScaleID]; + const yScale = scales[options.yScaleID]; + let x = chartArea.width / 2; + let y = chartArea.height / 2; + + if (xScale) { + x = scaleValue(xScale, options.xValue, x); + } - ctx.save(); + if (yScale) { + y = scaleValue(yScale, options.yValue, y); + } + return {x, y}; +} - ctx.lineWidth = options.borderWidth; - ctx.strokeStyle = options.borderColor; - ctx.fillStyle = options.backgroundColor; +/** + * @param {Chart} chart + * @param {CoreAnnotationOptions} options + * @returns {{x?:number, y?: number, x2?: number, y2?: number, width?: number, height?: number}} + */ +function getChartRect(chart, options) { + const xScale = chart.scales[options.xScaleID]; + const yScale = chart.scales[options.yScaleID]; + let {top: y, left: x, bottom: y2, right: x2} = chart.chartArea; - ctx.setLineDash(options.borderDash); - ctx.lineDashOffset = options.borderDashOffset; + if (!xScale && !yScale) { + return {}; + } - ctx.beginPath(); - addRoundedRectPath$1(ctx, { - x, y, w: width, h: height, - // TODO: v2 remove support for cornerRadius - radius: clampAll(toTRBLCorners$1(valueOrDefault$2(options.cornerRadius, options.borderRadius)), 0, Math.min(width, height) / 2) - }); - ctx.closePath(); - ctx.fill(); + const xDim = getChartDimensionByScale(xScale, {min: options.xMin, max: options.xMax, start: x, end: x2}); + x = xDim.start; + x2 = xDim.end; + const yDim = getChartDimensionByScale(yScale, {min: options.yMin, max: options.yMax, start: y, end: y2}); + y = yDim.start; + y2 = yDim.end; - // If no border, don't draw it - if (options.borderWidth) { - ctx.stroke(); - } + return { + x, + y, + x2, + y2, + width: x2 - x, + height: y2 - y + }; +} - ctx.restore(); +/** + * @param {Chart} chart + * @param {PointAnnotationOptions} options + */ +function getChartCircle(chart, options) { + const point = getChartPoint(chart, options); + return { + x: point.x + options.xAdjust, + y: point.y + options.yAdjust, + width: options.radius * 2, + height: options.radius * 2 + }; +} + +/** + * @param {Chart} chart + * @param {PointAnnotationOptions} options + * @returns + */ +function resolvePointPosition(chart, options) { + if (!isBoundToPoint(options)) { + const box = getChartRect(chart, options); + const point = getRectCenterPoint(box); + let radius = options.radius; + if (!radius || isNaN(radius)) { + radius = Math.min(box.width, box.height) / 2; + options.radius = radius; + } + return { + x: point.x + options.xAdjust, + y: point.y + options.yAdjust, + width: radius * 2, + height: radius * 2 + }; } + return getChartCircle(chart, options); +} - resolveElementProperties(chart, options) { - const xScale = chart.scales[options.xScaleID]; - const yScale = chart.scales[options.yScaleID]; - let {top: y, left: x, bottom: y2, right: x2} = chart.chartArea; - let min, max; +const {toPadding: toPadding$2} = ChartJsV3.helpers; - if (!xScale && !yScale) { - return {options: {}}; - } +class BoxAnnotation extends Element { + inRange(mouseX, mouseY, useFinalPosition) { + return inBoxRange(mouseX, mouseY, this.getProps(['x', 'y', 'width', 'height'], useFinalPosition), this.options.borderWidth); + } - if (xScale) { - min = scaleValue(xScale, options.xMin, x); - max = scaleValue(xScale, options.xMax, x2); - x = Math.min(min, max); - x2 = Math.max(min, max); - } + getCenterPoint(useFinalPosition) { + return getRectCenterPoint(this.getProps(['x', 'y', 'width', 'height'], useFinalPosition)); + } - if (yScale) { - min = scaleValue(yScale, options.yMin, y2); - max = scaleValue(yScale, options.yMax, y); - y = Math.min(min, max); - y2 = Math.max(min, max); - } + draw(ctx) { + ctx.save(); + drawBox(ctx, this, this.options); + ctx.restore(); + } - return { - x, - y, - x2, - y2, - width: x2 - x, - height: y2 - y + drawLabel(ctx) { + const {x, y, width, height, options} = this; + const {label, borderWidth} = options; + const halfBorder = borderWidth / 2; + const position = toPosition(label.position); + const padding = toPadding$2(label.padding); + const labelSize = measureLabelSize(ctx, label); + const labelRect = { + x: calculateX(this, labelSize, position, padding), + y: calculateY(this, labelSize, position, padding), + width: labelSize.width, + height: labelSize.height }; + + ctx.save(); + ctx.beginPath(); + ctx.rect(x + halfBorder + padding.left, y + halfBorder + padding.top, + width - borderWidth - padding.width, height - borderWidth - padding.height); + ctx.clip(); + drawLabel(ctx, labelRect, label); + ctx.restore(); + } + + resolveElementProperties(chart, options) { + return getChartRect(chart, options); } } BoxAnnotation.id = 'boxAnnotation'; BoxAnnotation.defaults = { - display: true, adjustScaleRange: true, + backgroundShadowColor: 'transparent', + borderCapStyle: 'butt', borderDash: [], borderDashOffset: 0, - borderWidth: 1, + borderJoinStyle: 'miter', borderRadius: 0, - xScaleID: 'x', - xMin: undefined, + borderShadowColor: 'transparent', + borderWidth: 1, + cornerRadius: undefined, // TODO: v2 remove support for cornerRadius + display: true, + label: { + borderWidth: undefined, + color: 'black', + content: null, + drawTime: undefined, + enabled: false, + font: { + family: undefined, + lineHeight: undefined, + size: undefined, + style: undefined, + weight: 'bold' + }, + height: undefined, + padding: 6, + position: 'center', + textAlign: 'start', + xAdjust: 0, + yAdjust: 0, + width: undefined + }, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, xMax: undefined, - yScaleID: 'y', + xMin: undefined, + xScaleID: 'x', + yMax: undefined, yMin: undefined, - yMax: undefined + yScaleID: 'y' }; BoxAnnotation.defaultRoutes = { @@ -286,13 +698,47 @@ BoxAnnotation.defaultRoutes = { backgroundColor: 'color' }; -const {addRoundedRectPath, isArray: isArray$1, toFontString, toRadians: toRadians$1, toTRBLCorners, valueOrDefault: valueOrDefault$1} = ChartJsV3.helpers; +BoxAnnotation.descriptors = { + label: { + _fallback: true + } +}; + +function calculateX(box, labelSize, position, padding) { + const {x: start, x2: end, width: size, options} = box; + const {xAdjust: adjust, borderWidth} = options.label; + return calculatePosition$1({start, end, size}, { + position: position.x, + padding: {start: padding.left, end: padding.right}, + adjust, borderWidth, + size: labelSize.width + }); +} + +function calculateY(box, labelSize, position, padding) { + const {y: start, y2: end, height: size, options} = box; + const {yAdjust: adjust, borderWidth} = options.label; + return calculatePosition$1({start, end, size}, { + position: position.y, + padding: {start: padding.top, end: padding.bottom}, + adjust, borderWidth, + size: labelSize.height + }); +} + +function calculatePosition$1(boxOpts, labelOpts) { + const {start, end} = boxOpts; + const {position, padding: {start: padStart, end: padEnd}, adjust, borderWidth} = labelOpts; + const availableSize = end - borderWidth - start - padStart - padEnd - labelOpts.size; + return start + borderWidth / 2 + adjust + padStart + getRelativePosition(availableSize, position); +} + +const {PI: PI$2, toRadians: toRadians$1, toPadding: toPadding$1} = ChartJsV3.helpers; -const PI = Math.PI; const pointInLine = (p1, p2, t) => ({x: p1.x + t * (p2.x - p1.x), y: p1.y + t * (p2.y - p1.y)}); const interpolateX = (y, p1, p2) => pointInLine(p1, p2, Math.abs((y - p1.y) / (p2.y - p1.y))).x; const interpolateY = (x, p1, p2) => pointInLine(p1, p2, Math.abs((x - p1.x) / (p2.x - p1.x))).y; -const toPercent = (s) => typeof s === 'string' && s.endsWith('%') && parseFloat(s) / 100; +const sqr = v => v * v; function isLineInArea({x, y, x2, y2}, {top, right, bottom, left}) { return !( @@ -330,10 +776,11 @@ function limitLineToArea(p1, p2, area) { } class LineAnnotation extends Element { - intersects(x, y, epsilon = 0.001) { + + // TODO: make private in v2 + intersects(x, y, epsilon = 0.001, useFinalPosition) { // Adapted from https://stackoverflow.com/a/6853926/25507 - const sqr = v => v * v; - const {x: x1, y: y1, x2, y2} = this; + const {x: x1, y: y1, x2, y2} = this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition); const dx = x2 - x1; const dy = y2 - y1; const lenSq = sqr(dx) + sqr(dy); @@ -352,29 +799,37 @@ class LineAnnotation extends Element { return (sqr(x - xx) + sqr(y - yy)) < epsilon; } - labelIsVisible(chartArea) { - const label = this.options.label; - - const inside = !chartArea || isLineInArea(this, chartArea); - return inside && label && label.enabled && label.content; + /** + * @todo make private in v2 + * @param {boolean} useFinalPosition - use the element's animation target instead of current position + * @param {top, right, bottom, left} [chartArea] - optional, area of the chart + * @returns {boolean} true if the label is visible + */ + labelIsVisible(useFinalPosition, chartArea) { + const labelOpts = this.options.label; + if (!labelOpts || !labelOpts.enabled) { + return false; + } + return !chartArea || isLineInArea(this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), chartArea); } - isOnLabel(mouseX, mouseY) { - const {labelRect} = this; - if (!labelRect || !this.labelIsVisible()) { + // TODO: make private in v2 + isOnLabel(mouseX, mouseY, useFinalPosition) { + if (!this.labelIsVisible(useFinalPosition)) { return false; } - - const {x, y} = rotated({x: mouseX, y: mouseY}, labelRect, -labelRect.rotation); - const w2 = labelRect.width / 2; - const h2 = labelRect.height / 2; - return x >= labelRect.x - w2 && x <= labelRect.x + w2 && - y >= labelRect.y - h2 && y <= labelRect.y + h2; + const {labelX, labelY, labelWidth, labelHeight, labelRotation} = this.getProps(['labelX', 'labelY', 'labelWidth', 'labelHeight', 'labelRotation'], useFinalPosition); + const {x, y} = rotated({x: mouseX, y: mouseY}, {x: labelX, y: labelY}, -labelRotation); + const hBorderWidth = this.options.label.borderWidth / 2 || 0; + const w2 = labelWidth / 2 + hBorderWidth; + const h2 = labelHeight / 2 + hBorderWidth; + return x >= labelX - w2 && x <= labelX + w2 && + y >= labelY - h2 && y <= labelY + h2; } - inRange(x, y) { - const epsilon = this.options.borderWidth || 1; - return this.intersects(x, y, epsilon) || this.isOnLabel(x, y); + inRange(mouseX, mouseY, useFinalPosition) { + const epsilon = sqr(this.options.borderWidth / 2); + return this.intersects(mouseX, mouseY, epsilon, useFinalPosition) || this.isOnLabel(mouseX, mouseY, useFinalPosition); } getCenterPoint() { @@ -386,28 +841,55 @@ class LineAnnotation extends Element { draw(ctx) { const {x, y, x2, y2, options} = this; - ctx.save(); - ctx.lineWidth = options.borderWidth; - ctx.strokeStyle = options.borderColor; - ctx.setLineDash(options.borderDash); - ctx.lineDashOffset = options.borderDashOffset; + ctx.save(); + if (!setBorderStyle(ctx, options)) { + // no border width, then line is not drawn + return ctx.restore(); + } + setShadowStyle(ctx, options); + const angle = Math.atan2(y2 - y, x2 - x); + const length = Math.sqrt(Math.pow(x2 - x, 2) + Math.pow(y2 - y, 2)); + const {startOpts, endOpts, startAdjust, endAdjust} = getArrowHeads(this); - // Draw + ctx.translate(x, y); + ctx.rotate(angle); ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(x2, y2); + ctx.moveTo(0 + startAdjust, 0); + ctx.lineTo(length - endAdjust, 0); + ctx.shadowColor = options.borderShadowColor; ctx.stroke(); - + drawArrowHead(ctx, 0, startAdjust, startOpts); + drawArrowHead(ctx, length, -endAdjust, endOpts); ctx.restore(); } drawLabel(ctx, chartArea) { - if (this.labelIsVisible(chartArea)) { - ctx.save(); - drawLabel(ctx, this, chartArea); - ctx.restore(); + if (!this.labelIsVisible(false, chartArea)) { + return; } + const {labelX, labelY, labelWidth, labelHeight, labelRotation, labelPadding, labelTextSize, options: {label}} = this; + + ctx.save(); + ctx.translate(labelX, labelY); + ctx.rotate(labelRotation); + + const boxRect = { + x: -(labelWidth / 2), + y: -(labelHeight / 2), + width: labelWidth, + height: labelHeight + }; + drawBox(ctx, boxRect, label); + + const labelTextRect = { + x: -(labelWidth / 2) + labelPadding.left + label.borderWidth / 2, + y: -(labelHeight / 2) + labelPadding.top + label.borderWidth / 2, + width: labelTextSize.width, + height: labelTextSize.height + }; + drawLabel(ctx, labelTextRect, label); + ctx.restore(); } resolveElementProperties(chart, options) { @@ -440,189 +922,164 @@ class LineAnnotation extends Element { } } const inside = isLineInArea({x, y, x2, y2}, chart.chartArea); - return inside + const properties = inside ? limitLineToArea({x, y}, {x: x2, y: y2}, chart.chartArea) : {x, y, x2, y2, width: Math.abs(x2 - x), height: Math.abs(y2 - y)}; + + const label = options.label; + if (label && label.content) { + return loadLabelRect(properties, chart, label); + } + return properties; } } LineAnnotation.id = 'lineAnnotation'; + +const arrowHeadsDefaults = { + backgroundColor: undefined, + backgroundShadowColor: undefined, + borderColor: undefined, + borderDash: undefined, + borderDashOffset: undefined, + borderShadowColor: undefined, + borderWidth: undefined, + enabled: undefined, + fill: undefined, + length: undefined, + shadowBlur: undefined, + shadowOffsetX: undefined, + shadowOffsetY: undefined, + width: undefined +}; + LineAnnotation.defaults = { - display: true, adjustScaleRange: true, - borderWidth: 2, + arrowHeads: { + enabled: false, + end: Object.assign({}, arrowHeadsDefaults), + fill: false, + length: 12, + start: Object.assign({}, arrowHeadsDefaults), + width: 6 + }, borderDash: [], borderDashOffset: 0, + borderShadowColor: 'transparent', + borderWidth: 2, + display: true, + endValue: undefined, label: { backgroundColor: 'rgba(0,0,0,0.8)', + backgroundShadowColor: 'transparent', borderCapStyle: 'butt', borderColor: 'black', borderDash: [], borderDashOffset: 0, borderJoinStyle: 'miter', borderRadius: 6, + borderShadowColor: 'transparent', borderWidth: 0, + color: '#fff', + content: null, + cornerRadius: undefined, // TODO: v2 remove support for cornerRadius drawTime: undefined, + enabled: false, font: { family: undefined, lineHeight: undefined, size: undefined, - style: 'bold', - weight: undefined + style: undefined, + weight: 'bold' }, - color: '#fff', - xPadding: 6, - yPadding: 6, - rotation: 0, + height: undefined, + padding: 6, position: 'center', + rotation: 0, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + textAlign: 'center', + width: undefined, xAdjust: 0, + xPadding: undefined, // TODO: v2 remove support for xPadding yAdjust: 0, - textAlign: 'center', - enabled: false, - content: null + yPadding: undefined, // TODO: v2 remove support for yPadding }, - value: undefined, - endValue: undefined, scaleID: undefined, - xScaleID: 'x', - xMin: undefined, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + value: undefined, xMax: undefined, - yScaleID: 'y', + xMin: undefined, + xScaleID: 'x', + yMax: undefined, yMin: undefined, - yMax: undefined + yScaleID: 'y' +}; + +LineAnnotation.descriptors = { + arrowHeads: { + start: { + _fallback: true + }, + end: { + _fallback: true + }, + _fallback: true + } }; LineAnnotation.defaultRoutes = { borderColor: 'color' }; +function loadLabelRect(line, chart, options) { + // TODO: v2 remove support for xPadding and yPadding + const {padding: lblPadding, xPadding, yPadding, borderWidth} = options; + const padding = getPadding(lblPadding, xPadding, yPadding); + const textSize = measureLabelSize(chart.ctx, options); + const width = textSize.width + padding.width + borderWidth; + const height = textSize.height + padding.height + borderWidth; + const labelRect = calculateLabelPosition(line, options, {width, height, padding}, chart.chartArea); + line.labelX = labelRect.x; + line.labelY = labelRect.y; + line.labelWidth = labelRect.width; + line.labelHeight = labelRect.height; + line.labelRotation = labelRect.rotation; + line.labelPadding = padding; + line.labelTextSize = textSize; + return line; +} + function calculateAutoRotation(line) { const {x, y, x2, y2} = line; const rotation = Math.atan2(y2 - y, x2 - x); // Flip the rotation if it goes > PI/2 or < -PI/2, so label stays upright - return rotation > PI / 2 ? rotation - PI : rotation < PI / -2 ? rotation + PI : rotation; + return rotation > PI$2 / 2 ? rotation - PI$2 : rotation < PI$2 / -2 ? rotation + PI$2 : rotation; } -function drawLabel(ctx, line, chartArea) { - const label = line.options.label; - - ctx.font = toFontString(label.font); - - const {width, height} = measureLabel(ctx, label); - const rect = line.labelRect = calculateLabelPosition(line, width, height, chartArea); - - ctx.translate(rect.x, rect.y); - ctx.rotate(rect.rotation); - - ctx.fillStyle = label.backgroundColor; - const stroke = setBorderStyle(ctx, label); - - ctx.beginPath(); - addRoundedRectPath(ctx, { - x: -(width / 2), y: -(height / 2), w: width, h: height, - // TODO: v2 remove support for cornerRadius - radius: clampAll(toTRBLCorners(valueOrDefault$1(label.cornerRadius, label.borderRadius)), 0, Math.min(width, height) / 2) - }); - ctx.closePath(); - ctx.fill(); - if (stroke) { - ctx.stroke(); - } - - ctx.fillStyle = label.color; - if (isArray$1(label.content)) { - ctx.textAlign = label.textAlign; - const x = calculateLabelXAlignment(label, width); - let textYPosition = -(height / 2) + label.yPadding; - for (let i = 0; i < label.content.length; i++) { - ctx.textBaseline = 'top'; - ctx.fillText( - label.content[i], - x, - textYPosition - ); - textYPosition += label.font.size + label.yPadding; - } - } else if (label.content instanceof Image) { - const x = -(width / 2) + label.xPadding; - const y = -(height / 2) + label.yPadding; - ctx.drawImage(label.content, x, y, width - (2 * label.xPadding), height - (2 * label.yPadding)); - } else { - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - ctx.fillText(label.content, 0, 0); +// TODO: v2 remove support for xPadding and yPadding +function getPadding(padding, xPadding, yPadding) { + let tempPadding = padding; + if (xPadding || yPadding) { + tempPadding = {x: xPadding || 6, y: yPadding || 6}; } + return toPadding$1(tempPadding); } -function setBorderStyle(ctx, options) { - if (options.borderWidth) { - ctx.lineCap = options.borderCapStyle; - ctx.setLineDash(options.borderDash); - ctx.lineDashOffset = options.borderDashOffset; - ctx.lineJoin = options.borderJoinStyle; - ctx.lineWidth = options.borderWidth; - ctx.strokeStyle = options.borderColor; - return true; - } -} - -function calculateLabelXAlignment(label, width) { - const {textAlign, xPadding} = label; - if (textAlign === 'start') { - return -(width / 2) + xPadding; - } else if (textAlign === 'end') { - return +(width / 2) - xPadding; - } - return 0; -} - -function getImageSize(size, value) { - if (typeof value === 'number') { - return value; - } else if (typeof value === 'string') { - return toPercent(value) * size; - } - return size; -} - -const widthCache = new Map(); -function measureLabel(ctx, label) { - const content = label.content; - if (content instanceof Image) { - return { - width: getImageSize(content.width, label.width) + 2 * label.xPadding, - height: getImageSize(content.height, label.height) + 2 * label.yPadding - }; - } - const lines = isArray$1(content) ? content : [content]; - const count = lines.length; - let width = 0; - for (let i = 0; i < count; i++) { - const text = lines[i]; - if (!widthCache.has(text)) { - widthCache.set(text, ctx.measureText(text).width); - } - width = Math.max(width, widthCache.get(text)); - } - width += 2 * label.xPadding; - - return { - width, - height: count * label.font.size + ((count + 1) * label.yPadding) - }; -} - -function calculateLabelPosition(line, width, height, chartArea) { - const label = line.options.label; - const {xAdjust, yAdjust, xPadding, yPadding, position} = label; +function calculateLabelPosition(line, label, sizes, chartArea) { + const {width, height, padding} = sizes; + const {xAdjust, yAdjust} = label; const p1 = {x: line.x, y: line.y}; const p2 = {x: line.x2, y: line.y2}; const rotation = label.rotation === 'auto' ? calculateAutoRotation(line) : toRadians$1(label.rotation); const size = rotatedSize(width, height, rotation); - const t = calculateT(line, position, size, chartArea); + const t = calculateT(line, label, {labelSize: size, padding}, chartArea); const pt = pointInLine(p1, p2, t); - const xCoordinateSizes = {size: size.w, min: chartArea.left, max: chartArea.right, padding: xPadding}; - const yCoordinateSizes = {size: size.h, min: chartArea.top, max: chartArea.bottom, padding: yPadding}; + const xCoordinateSizes = {size: size.w, min: chartArea.left, max: chartArea.right, padding: padding.left}; + const yCoordinateSizes = {size: size.h, min: chartArea.top, max: chartArea.bottom, padding: padding.top}; return { x: adjustLabelCoordinate(pt.x, xCoordinateSizes) + xAdjust, @@ -642,24 +1099,25 @@ function rotatedSize(width, height, rotation) { }; } -function calculateT(line, position, rotSize, chartArea) { - let t = 0.5; +function calculateT(line, label, sizes, chartArea) { + let t; const space = spaceAround(line, chartArea); - const label = line.options.label; - if (position === 'start') { - t = calculateTAdjust({w: line.x2 - line.x, h: line.y2 - line.y}, rotSize, label, space); - } else if (position === 'end') { - t = 1 - calculateTAdjust({w: line.x - line.x2, h: line.y - line.y2}, rotSize, label, space); + if (label.position === 'start') { + t = calculateTAdjust({w: line.x2 - line.x, h: line.y2 - line.y}, sizes, label, space); + } else if (label.position === 'end') { + t = 1 - calculateTAdjust({w: line.x - line.x2, h: line.y - line.y2}, sizes, label, space); + } else { + t = getRelativePosition(1, label.position); } return t; } -function calculateTAdjust(lineSize, labelSize, label, space) { - const {xPadding, yPadding} = label; +function calculateTAdjust(lineSize, sizes, label, space) { + const {labelSize, padding} = sizes; const lineW = lineSize.w * space.dx; const lineH = lineSize.h * space.dy; - const x = (lineW > 0) && ((labelSize.w / 2 + xPadding - space.x) / lineW); - const y = (lineH > 0) && ((labelSize.h / 2 + yPadding - space.y) / lineH); + const x = (lineW > 0) && ((labelSize.w / 2 + padding.left - space.x) / lineW); + const y = (lineH > 0) && ((labelSize.h / 2 + padding.top - space.y) / lineH); return clamp(Math.max(x, y), 0, 0.25); } @@ -672,37 +1130,83 @@ function spaceAround(line, chartArea) { return { x: Math.min(l, r), y: Math.min(t, b), - dx: l < r ? 1 : -1, - dy: t < b ? 1 : -1 + dx: l <= r ? 1 : -1, + dy: t <= b ? 1 : -1 }; } function adjustLabelCoordinate(coordinate, labelSizes) { const {size, min, max, padding} = labelSizes; const halfSize = size / 2; - if (size > max - min) { // if it does not fit, display as much as possible return (max + min) / 2; } - if (min >= (coordinate - padding - halfSize)) { coordinate = min + padding + halfSize; } - if (max <= (coordinate + padding + halfSize)) { coordinate = max - padding - halfSize; } + return coordinate; +} + +function getArrowHeads(line) { + const options = line.options; + const arrowStartOpts = options.arrowHeads && options.arrowHeads.start; + const arrowEndOpts = options.arrowHeads && options.arrowHeads.end; + return { + startOpts: arrowStartOpts, + endOpts: arrowEndOpts, + startAdjust: getLineAdjust(line, arrowStartOpts), + endAdjust: getLineAdjust(line, arrowEndOpts) + }; +} + +function getLineAdjust(line, arrowOpts) { + if (!arrowOpts || !arrowOpts.enabled) { + return 0; + } + const {length, width} = arrowOpts; + const adjust = line.options.borderWidth / 2; + const p1 = {x: length, y: width + adjust}; + const p2 = {x: 0, y: adjust}; + return Math.abs(interpolateX(0, p1, p2)); +} - return coordinate; +function drawArrowHead(ctx, offset, adjust, arrowOpts) { + if (!arrowOpts || !arrowOpts.enabled) { + return; + } + const {length, width, fill, backgroundColor, borderColor} = arrowOpts; + const arrowOffsetX = Math.abs(offset - length) + adjust; + ctx.beginPath(); + setShadowStyle(ctx, arrowOpts); + setBorderStyle(ctx, arrowOpts); + ctx.moveTo(arrowOffsetX, -width); + ctx.lineTo(offset + adjust, 0); + ctx.lineTo(arrowOffsetX, width); + if (fill === true) { + ctx.fillStyle = backgroundColor || borderColor; + ctx.closePath(); + ctx.fill(); + ctx.shadowColor = 'transparent'; + } else { + ctx.shadowColor = arrowOpts.borderShadowColor; + } + ctx.stroke(); } -const {toRadians} = ChartJsV3.helpers; +const {PI: PI$1, toRadians} = ChartJsV3.helpers; -class EllipseAnnotation extends BoxAnnotation { +class EllipseAnnotation extends Element { - inRange(x, y) { - return pointInEllipse({x, y}, this); + inRange(mouseX, mouseY, useFinalPosition) { + return pointInEllipse({x: mouseX, y: mouseY}, this.getProps(['width', 'height'], useFinalPosition), this.options.rotation, this.options.borderWidth); + } + + getCenterPoint(useFinalPosition) { + return getRectCenterPoint(this.getProps(['x', 'y', 'width', 'height'], useFinalPosition)); } draw(ctx) { @@ -715,40 +1219,45 @@ class EllipseAnnotation extends BoxAnnotation { if (options.rotation) { ctx.rotate(toRadians(options.rotation)); } - + setShadowStyle(ctx, this.options); ctx.beginPath(); - - ctx.lineWidth = options.borderWidth; - ctx.strokeStyle = options.borderColor; ctx.fillStyle = options.backgroundColor; - - ctx.setLineDash(options.borderDash); - ctx.lineDashOffset = options.borderDashOffset; - - ctx.ellipse(0, 0, height / 2, width / 2, Math.PI / 2, 0, 2 * Math.PI); - + const stroke = setBorderStyle(ctx, options); + ctx.ellipse(0, 0, height / 2, width / 2, PI$1 / 2, 0, 2 * PI$1); ctx.fill(); - ctx.stroke(); - + if (stroke) { + ctx.shadowColor = options.borderShadowColor; + ctx.stroke(); + } ctx.restore(); } + + resolveElementProperties(chart, options) { + return getChartRect(chart, options); + } + } EllipseAnnotation.id = 'ellipseAnnotation'; EllipseAnnotation.defaults = { - display: true, adjustScaleRange: true, + backgroundShadowColor: 'transparent', borderDash: [], borderDashOffset: 0, + borderShadowColor: 'transparent', borderWidth: 1, + display: true, rotation: 0, - xScaleID: 'x', - xMin: undefined, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, xMax: undefined, - yScaleID: 'y', + xMin: undefined, + xScaleID: 'x', + yMax: undefined, yMin: undefined, - yMax: undefined + yScaleID: 'y' }; EllipseAnnotation.defaultRoutes = { @@ -756,7 +1265,7 @@ EllipseAnnotation.defaultRoutes = { backgroundColor: 'color' }; -function pointInEllipse(p, ellipse) { +function pointInEllipse(p, ellipse, rotation, borderWidth) { const {width, height} = ellipse; const center = ellipse.getCenterPoint(true); const xRadius = width / 2; @@ -765,84 +1274,302 @@ function pointInEllipse(p, ellipse) { if (xRadius <= 0 || yRadius <= 0) { return false; } - - return (Math.pow(p.x - center.x, 2) / Math.pow(xRadius, 2)) + (Math.pow(p.y - center.y, 2) / Math.pow(yRadius, 2)) <= 1.0; + // https://stackoverflow.com/questions/7946187/point-and-ellipse-rotated-position-test-algorithm + const angle = toRadians(rotation || 0); + const hBorderWidth = borderWidth / 2 || 0; + const cosAngle = Math.cos(angle); + const sinAngle = Math.sin(angle); + const a = Math.pow(cosAngle * (p.x - center.x) + sinAngle * (p.y - center.y), 2); + const b = Math.pow(sinAngle * (p.x - center.x) - cosAngle * (p.y - center.y), 2); + return (a / Math.pow(xRadius + hBorderWidth, 2)) + (b / Math.pow(yRadius + hBorderWidth, 2)) <= 1.0001; } -class PointAnnotation extends Element { - - inRange(x, y) { - const {width, options} = this; - const center = this.getCenterPoint(true); - const radius = width / 2 + options.borderWidth; +const {color, toPadding} = ChartJsV3.helpers; - if (radius <= 0) { - return false; - } +class LabelAnnotation extends Element { - return (Math.pow(x - center.x, 2) + Math.pow(y - center.y, 2)) <= Math.pow(radius, 2); + inRange(mouseX, mouseY, useFinalPosition) { + return inBoxRange(mouseX, mouseY, this.getProps(['x', 'y', 'width', 'height'], useFinalPosition), this.options.borderWidth); } getCenterPoint(useFinalPosition) { - const {x, y} = this.getProps(['x', 'y'], useFinalPosition); - return {x, y}; + return getRectCenterPoint(this.getProps(['x', 'y', 'width', 'height'], useFinalPosition)); } draw(ctx) { - const {x, y, width, options} = this; + if (!this.options.content) { + return; + } + const {labelX, labelY, labelWidth, labelHeight, options} = this; + drawCallout(ctx, this); + if (this.boxVisible) { + drawBox(ctx, this, options); + } + drawLabel(ctx, {x: labelX, y: labelY, width: labelWidth, height: labelHeight}, options); + } - ctx.save(); + // TODO: make private in v2 + resolveElementProperties(chart, options) { + const point = !isBoundToPoint(options) ? getRectCenterPoint(getChartRect(chart, options)) : getChartPoint(chart, options); + const padding = toPadding(options.padding); + const labelSize = measureLabelSize(chart.ctx, options); + const boxSize = measureRect(point, labelSize, options, padding); + const bgColor = color(options.backgroundColor); + const boxVisible = options.borderWidth > 0 || (bgColor && bgColor.valid && bgColor.rgb.a > 0); + + const properties = { + boxVisible, + pointX: point.x, + pointY: point.y, + ...boxSize, + labelX: boxSize.x + padding.left + (options.borderWidth / 2), + labelY: boxSize.y + padding.top + (options.borderWidth / 2), + labelWidth: labelSize.width, + labelHeight: labelSize.height + }; + properties.calloutPosition = options.callout.enabled && resolveCalloutPosition(properties, options.callout); + return properties; + } +} - ctx.lineWidth = options.borderWidth; - ctx.strokeStyle = options.borderColor; - ctx.fillStyle = options.backgroundColor; +LabelAnnotation.id = 'labelAnnotation'; - ctx.setLineDash(options.borderDash); - ctx.lineDashOffset = options.borderDashOffset; +LabelAnnotation.defaults = { + adjustScaleRange: true, + backgroundColor: 'transparent', + backgroundShadowColor: 'transparent', + borderCapStyle: 'butt', + borderDash: [], + borderDashOffset: 0, + borderJoinStyle: 'miter', + borderRadius: 0, + borderShadowColor: 'transparent', + borderWidth: 0, + callout: { + borderCapStyle: 'butt', + borderColor: undefined, + borderDash: [], + borderDashOffset: 0, + borderJoinStyle: 'miter', + borderWidth: 1, + enabled: false, + margin: 5, + position: 'auto', + side: 5, + start: '50%', + }, + color: 'black', + content: null, + display: true, + font: { + family: undefined, + lineHeight: undefined, + size: undefined, + style: undefined, + weight: undefined + }, + height: undefined, + padding: 6, + position: 'center', + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + textAlign: 'center', + width: undefined, + xAdjust: 0, + xMax: undefined, + xMin: undefined, + xScaleID: 'x', + xValue: undefined, + yAdjust: 0, + yMax: undefined, + yMin: undefined, + yScaleID: 'y', + yValue: undefined +}; - ctx.beginPath(); - ctx.arc(x, y, width / 2, 0, Math.PI * 2); - ctx.fill(); - ctx.stroke(); +LabelAnnotation.defaultRoutes = { + borderColor: 'color' +}; - ctx.restore(); +function measureRect(point, size, options, padding) { + const width = size.width + padding.width + options.borderWidth; + const height = size.height + padding.height + options.borderWidth; + const position = toPosition(options.position); + + return { + x: calculatePosition(point.x, width, options.xAdjust, position.x), + y: calculatePosition(point.y, height, options.yAdjust, position.y), + width, + height + }; +} + +function calculatePosition(start, size, adjust = 0, position) { + return start - getRelativePosition(size, position) + adjust; +} + +function drawCallout(ctx, element) { + const {pointX, pointY, calloutPosition, options} = element; + if (!calloutPosition) { + return; } + const callout = options.callout; - resolveElementProperties(chart, options) { - const {chartArea, scales} = chart; - const xScale = scales[options.xScaleID]; - const yScale = scales[options.yScaleID]; - let x = chartArea.width / 2; - let y = chartArea.height / 2; - - if (xScale) { - x = scaleValue(xScale, options.xValue, x); - } + ctx.save(); + ctx.beginPath(); + const stroke = setBorderStyle(ctx, callout); + if (!stroke) { + return ctx.restore(); + } + const {separatorStart, separatorEnd} = getCalloutSeparatorCoord(element, calloutPosition); + const {sideStart, sideEnd} = getCalloutSideCoord(element, calloutPosition, separatorStart); + if (callout.margin > 0 || options.borderWidth === 0) { + ctx.moveTo(separatorStart.x, separatorStart.y); + ctx.lineTo(separatorEnd.x, separatorEnd.y); + } + ctx.moveTo(sideStart.x, sideStart.y); + ctx.lineTo(sideEnd.x, sideEnd.y); + ctx.lineTo(pointX, pointY); + ctx.stroke(); + ctx.restore(); +} - if (yScale) { - y = scaleValue(yScale, options.yValue, y); +function getCalloutSeparatorCoord(element, position) { + const {x, y, width, height} = element; + const adjust = getCalloutSeparatorAdjust(element, position); + let separatorStart, separatorEnd; + if (position === 'left' || position === 'right') { + separatorStart = {x: x + adjust, y}; + separatorEnd = {x: separatorStart.x, y: separatorStart.y + height}; + } else { + // position 'top' or 'bottom' + separatorStart = {x, y: y + adjust}; + separatorEnd = {x: separatorStart.x + width, y: separatorStart.y}; + } + return {separatorStart, separatorEnd}; +} + +function getCalloutSeparatorAdjust(element, position) { + const {width, height, options} = element; + const adjust = options.callout.margin + options.borderWidth / 2; + if (position === 'right') { + return width + adjust; + } else if (position === 'bottom') { + return height + adjust; + } + return -adjust; +} + +function getCalloutSideCoord(element, position, separatorStart) { + const {y, width, height, options} = element; + const start = options.callout.start; + const side = getCalloutSideAdjust(position, options.callout); + let sideStart, sideEnd; + if (position === 'left' || position === 'right') { + sideStart = {x: separatorStart.x, y: y + getSize(height, start)}; + sideEnd = {x: sideStart.x + side, y: sideStart.y}; + } else { + // position 'top' or 'bottom' + sideStart = {x: separatorStart.x + getSize(width, start), y: separatorStart.y}; + sideEnd = {x: sideStart.x, y: sideStart.y + side}; + } + return {sideStart, sideEnd}; +} + +function getCalloutSideAdjust(position, options) { + const side = options.side; + if (position === 'left' || position === 'top') { + return -side; + } + return side; +} + +function resolveCalloutPosition(element, options) { + const position = options.position; + if (position === 'left' || position === 'right' || position === 'top' || position === 'bottom') { + return position; + } + return resolveCalloutAutoPosition(element, options); +} + +function resolveCalloutAutoPosition(element, options) { + const {x, y, width, height, pointX, pointY} = element; + const {margin, side} = options; + const adjust = margin + side; + if (pointX < (x - adjust)) { + return 'left'; + } else if (pointX > (x + width + adjust)) { + return 'right'; + } else if (pointY < (y - adjust)) { + return 'top'; + } else if (pointY > (y + height + adjust)) { + return 'bottom'; + } +} + +const {drawPoint} = ChartJsV3.helpers; + +class PointAnnotation extends Element { + + inRange(mouseX, mouseY, useFinalPosition) { + const {width} = this.getProps(['width'], useFinalPosition); + return inPointRange({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), width / 2, this.options.borderWidth); + } + + getCenterPoint(useFinalPosition) { + return getElementCenterPoint(this, useFinalPosition); + } + + draw(ctx) { + const options = this.options; + const borderWidth = options.borderWidth; + if (options.radius < 0.1) { + return; + } + ctx.save(); + ctx.fillStyle = options.backgroundColor; + setShadowStyle(ctx, options); + const stroke = setBorderStyle(ctx, options); + options.borderWidth = 0; + drawPoint(ctx, options, this.x, this.y); + if (stroke && !isImageOrCanvas(options.pointStyle)) { + ctx.shadowColor = options.borderShadowColor; + ctx.stroke(); } + ctx.restore(); + options.borderWidth = borderWidth; + } - return { - x, - y, - width: options.radius * 2, - height: options.radius * 2 - }; + resolveElementProperties(chart, options) { + return resolvePointPosition(chart, options); } } PointAnnotation.id = 'pointAnnotation'; PointAnnotation.defaults = { - display: true, adjustScaleRange: true, + backgroundShadowColor: 'transparent', borderDash: [], borderDashOffset: 0, + borderShadowColor: 'transparent', borderWidth: 1, + display: true, + pointStyle: 'circle', radius: 10, + rotation: 0, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + xAdjust: 0, + xMax: undefined, + xMin: undefined, xScaleID: 'x', xValue: undefined, + yAdjust: 0, + yMax: undefined, + yMin: undefined, yScaleID: 'y', yValue: undefined }; @@ -852,32 +1579,175 @@ PointAnnotation.defaultRoutes = { backgroundColor: 'color' }; -var version = "1.0.2"; +const {PI, RAD_PER_DEG} = ChartJsV3.helpers; -const {clipArea, unclipArea, isFinite, valueOrDefault, isObject, isArray} = ChartJsV3.helpers; +class PolygonAnnotation extends Element { + inRange(mouseX, mouseY, useFinalPosition) { + return this.options.radius >= 0.1 && this.elements.length > 1 && pointIsInPolygon(this.elements, mouseX, mouseY, useFinalPosition); + } -const chartStates = new Map(); + getCenterPoint(useFinalPosition) { + return getElementCenterPoint(this, useFinalPosition); + } + + draw(ctx) { + const {elements, options} = this; + ctx.save(); + ctx.beginPath(); + ctx.fillStyle = options.backgroundColor; + setShadowStyle(ctx, options); + const stroke = setBorderStyle(ctx, options); + let first = true; + for (const el of elements) { + if (first) { + ctx.moveTo(el.x, el.y); + first = false; + } else { + ctx.lineTo(el.x, el.y); + } + } + ctx.closePath(); + ctx.fill(); + // If no border, don't draw it + if (stroke) { + ctx.shadowColor = options.borderShadowColor; + ctx.stroke(); + } + ctx.restore(); + } + + resolveElementProperties(chart, options) { + const {x, y, width, height} = resolvePointPosition(chart, options); + const {sides, radius, rotation, borderWidth} = options; + const halfBorder = borderWidth / 2; + const elements = []; + const angle = (2 * PI) / sides; + let rad = rotation * RAD_PER_DEG; + for (let i = 0; i < sides; i++, rad += angle) { + const sin = Math.sin(rad); + const cos = Math.cos(rad); + elements.push({ + type: 'point', + optionScope: 'point', + properties: { + x: x + sin * radius, + y: y - cos * radius, + bX: x + sin * (radius + halfBorder), + bY: y - cos * (radius + halfBorder) + } + }); + } + return {x, y, width, height, elements, initProperties: {x, y}}; + } +} + +PolygonAnnotation.id = 'polygonAnnotation'; + +PolygonAnnotation.defaults = { + adjustScaleRange: true, + backgroundShadowColor: 'transparent', + borderCapStyle: 'butt', + borderDash: [], + borderDashOffset: 0, + borderJoinStyle: 'miter', + borderShadowColor: 'transparent', + borderWidth: 1, + display: true, + point: { + radius: 0 + }, + radius: 10, + rotation: 0, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + sides: 3, + xAdjust: 0, + xMax: undefined, + xMin: undefined, + xScaleID: 'x', + xValue: undefined, + yAdjust: 0, + yMax: undefined, + yMin: undefined, + yScaleID: 'y', + yValue: undefined +}; + +PolygonAnnotation.defaultRoutes = { + borderColor: 'color', + backgroundColor: 'color' +}; + + +function pointIsInPolygon(points, x, y, useFinalPosition) { + let isInside = false; + let A = points[points.length - 1].getProps(['bX', 'bY'], useFinalPosition); + for (const point of points) { + const B = point.getProps(['bX', 'bY'], useFinalPosition); + if ((B.bY > y) !== (A.bY > y) && x < (A.bX - B.bX) * (y - B.bY) / (A.bY - B.bY) + B.bX) { + isInside = !isInside; + } + A = B; + } + return isInside; +} const annotationTypes = { box: BoxAnnotation, - line: LineAnnotation, ellipse: EllipseAnnotation, - point: PointAnnotation + label: LabelAnnotation, + line: LineAnnotation, + point: PointAnnotation, + polygon: PolygonAnnotation }; +/** + * Register fallback for annotation elements + * For example lineAnnotation options would be looked through: + * - the annotation object (options.plugins.annotation.annotations[id]) + * - element options (options.elements.lineAnnotation) + * - element defaults (defaults.elements.lineAnnotation) + * - annotation plugin defaults (defaults.plugins.annotation, this is what we are registering here) + */ Object.keys(annotationTypes).forEach(key => { defaults.describe(`elements.${annotationTypes[key].id}`, { _fallback: 'plugins.annotation' }); }); +var name = "chartjs-plugin-annotation"; +var version = "1.2.2"; + +const {clipArea, unclipArea, isObject, isArray} = ChartJsV3.helpers; + +const chartStates = new Map(); + var annotation = { id: 'annotation', version, + /* TODO: enable in v2 + beforeRegister() { + requireVersion('chart.js', '3.7', Chart.version); + }, + */ + afterRegister() { Chart.register(annotationTypes); + + // TODO: Remove this check, warning and workaround in v2 + if (!requireVersion('chart.js', '3.7', Chart.version, false)) { + console.warn(`${name} has known issues with chart.js versions prior to 3.7, please consider upgrading.`); + + // Workaround for https://github.com/chartjs/chartjs-plugin-annotation/issues/572 + Chart.defaults.set('elements.lineAnnotation', { + callout: {}, + font: {}, + padding: 6 + }); + } }, afterUnregister() { @@ -888,6 +1758,7 @@ var annotation = { chartStates.set(chart, { annotations: [], elements: [], + visibleElements: [], listeners: {}, listened: false, moveListened: false @@ -910,6 +1781,7 @@ var annotation = { } else if (isArray(annotationOptions)) { annotations.push(...annotationOptions); } + verifyScaleOptions(annotations, chart.scales); }, afterDataLimits(chart, args) { @@ -921,27 +1793,28 @@ var annotation = { const state = chartStates.get(chart); updateListeners(chart, state, options); updateElements(chart, state, options, args.mode); + state.visibleElements = state.elements.filter(el => !el.skip && el.options.display); }, - beforeDatasetsDraw(chart) { - draw(chart, 'beforeDatasetsDraw'); + beforeDatasetsDraw(chart, _args, options) { + draw(chart, 'beforeDatasetsDraw', options.clip); }, - afterDatasetsDraw(chart) { - draw(chart, 'afterDatasetsDraw'); + afterDatasetsDraw(chart, _args, options) { + draw(chart, 'afterDatasetsDraw', options.clip); }, - beforeDraw(chart) { - draw(chart, 'beforeDraw'); + beforeDraw(chart, _args, options) { + draw(chart, 'beforeDraw', options.clip); }, - afterDraw(chart) { - draw(chart, 'afterDraw'); + afterDraw(chart, _args, options) { + draw(chart, 'afterDraw', options.clip); }, beforeEvent(chart, args, options) { const state = chartStates.get(chart); - handleEvent(chart, state, args.event, options); + handleEvent(state, args.event, options); }, destroy(chart) { @@ -953,14 +1826,15 @@ var annotation = { }, defaults: { - drawTime: 'afterDatasetsDraw', - dblClickSpeed: 350, // ms animations: { numbers: { - properties: ['x', 'y', 'x2', 'y2', 'width', 'height'], + properties: ['x', 'y', 'x2', 'y2', 'width', 'height', 'pointX', 'pointY', 'labelX', 'labelY', 'labelWidth', 'labelHeight', 'radius'], type: 'number' }, }, + clip: true, + dblClickSpeed: 350, // ms + drawTime: 'afterDatasetsDraw', label: { drawTime: null } @@ -971,7 +1845,7 @@ var annotation = { _scriptable: (prop) => !hooks.includes(prop), annotations: { _allKeys: false, - _fallback: (prop, opts) => `elements.${annotationTypes[opts.type || 'line'].id}`, + _fallback: (prop, opts) => `elements.${annotationTypes[resolveType(opts.type)].id}`, }, }, @@ -989,6 +1863,14 @@ function resolveAnimations(chart, animOpts, mode) { return new Animations(chart, animOpts); } +function resolveType(type = 'line') { + if (annotationTypes[type]) { + return type; + } + console.warn(`Unknown annotation type: '${type}', defaulting to 'line'`); + return 'line'; +} + function updateElements(chart, state, options, mode) { const animations = resolveAnimations(chart, options.animations, mode); @@ -996,27 +1878,60 @@ function updateElements(chart, state, options, mode) { const elements = resyncElements(state.elements, annotations); for (let i = 0; i < annotations.length; i++) { - const annotation = annotations[i]; - let el = elements[i]; - const elType = annotationTypes[annotation.type] || annotationTypes.line; - if (!el || !(el instanceof elType)) { - el = elements[i] = new elType(); - } - const opts = resolveAnnotationOptions(annotation.setContext(getContext(chart, el, annotation))); - const properties = el.resolveElementProperties(chart, opts); + const annotationOptions = annotations[i]; + const element = getOrCreateElement(elements, i, annotationOptions.type); + const resolver = annotationOptions.setContext(getContext(chart, element, annotationOptions)); + const resolvedOptions = resolveAnnotationOptions(resolver); + const properties = element.resolveElementProperties(chart, resolvedOptions); + properties.skip = isNaN(properties.x) || isNaN(properties.y); - properties.options = opts; - animations.update(el, properties); + properties.options = resolvedOptions; + + if ('elements' in properties) { + updateSubElements(element, properties, resolver, animations); + // Remove the sub-element definitions from properties, so the actual elements + // are not overwritten by their definitions + delete properties.elements; + } + + animations.update(element, properties); + } +} + +function updateSubElements(mainElement, {elements, initProperties}, resolver, animations) { + const subElements = mainElement.elements || (mainElement.elements = []); + subElements.length = elements.length; + for (let i = 0; i < elements.length; i++) { + const definition = elements[i]; + const properties = definition.properties; + const subElement = getOrCreateElement(subElements, i, definition.type, initProperties); + const subResolver = resolver[definition.optionScope].override(definition); + properties.options = resolveAnnotationOptions(subResolver); + animations.update(subElement, properties); } } +function getOrCreateElement(elements, index, type, initProperties) { + const elementClass = annotationTypes[resolveType(type)]; + let element = elements[index]; + if (!element || !(element instanceof elementClass)) { + element = elements[index] = new elementClass(); + if (isObject(initProperties)) { + Object.assign(element, initProperties); + } + } + return element; +} + function resolveAnnotationOptions(resolver) { - const elType = annotationTypes[resolver.type] || annotationTypes.line; + const elementClass = annotationTypes[resolveType(resolver.type)]; const result = {}; result.id = resolver.id; result.type = resolver.type; result.drawTime = resolver.drawTime; - Object.assign(result, resolveObj(resolver, elType.defaults), resolveObj(resolver, elType.defaultRoutes)); + Object.assign(result, + resolveObj(resolver, elementClass.defaults), + resolveObj(resolver, elementClass.defaultRoutes)); for (const hook of hooks) { result[hook] = resolver[hook]; } @@ -1025,10 +1940,10 @@ function resolveAnnotationOptions(resolver) { function resolveObj(resolver, defs) { const result = {}; - for (const name of Object.keys(defs)) { - const optDefs = defs[name]; - const value = resolver[name]; - result[name] = isObject(optDefs) ? resolveObj(value, optDefs) : value; + for (const prop of Object.keys(defs)) { + const optDefs = defs[prop]; + const value = resolver[prop]; + result[prop] = isObject(optDefs) ? resolveObj(value, optDefs) : value; } return result; } @@ -1054,74 +1969,46 @@ function resyncElements(elements, annotations) { return elements; } -function draw(chart, caller) { +function draw(chart, caller, clip) { const {ctx, chartArea} = chart; - const state = chartStates.get(chart); - const elements = state.elements.filter(el => !el.skip && el.options.display); + const {visibleElements} = chartStates.get(chart); - clipArea(ctx, chartArea); - elements.forEach(el => { - if (el.options.drawTime === caller) { - el.draw(ctx); - } - }); - unclipArea(ctx); + if (clip) { + clipArea(ctx, chartArea); + } + + drawElements(ctx, visibleElements, caller); + drawSubElements(ctx, visibleElements, caller); + + if (clip) { + unclipArea(ctx); + } - elements.forEach(el => { - if ('drawLabel' in el && el.options.label && (el.options.label.drawTime || el.options.drawTime) === caller) { + visibleElements.forEach(el => { + if (!('drawLabel' in el)) { + return; + } + const label = el.options.label; + if (label && label.enabled && label.content && (label.drawTime || el.options.drawTime) === caller) { el.drawLabel(ctx, chartArea); } }); } -function adjustScaleRange(chart, scale, annotations) { - const range = getScaleLimits(scale, annotations); - let changed = false; - if (isFinite(range.min) && - typeof scale.options.min === 'undefined' && - typeof scale.options.suggestedMin === 'undefined') { - changed = scale.min !== range.min; - scale.min = range.min; - } - if (isFinite(range.max) && - typeof scale.options.max === 'undefined' && - typeof scale.options.suggestedMax === 'undefined') { - changed = scale.max !== range.max; - scale.max = range.max; - } - if (changed && typeof scale.handleTickRangeOptions === 'function') { - scale.handleTickRangeOptions(); +function drawElements(ctx, elements, caller) { + for (const el of elements) { + if (el.options.drawTime === caller) { + el.draw(ctx); + } } } -function getScaleLimits(scale, annotations) { - const axis = scale.axis; - const scaleID = scale.id; - const scaleIDOption = axis + 'ScaleID'; - let min = valueOrDefault(scale.min, Number.NEGATIVE_INFINITY); - let max = valueOrDefault(scale.max, Number.POSITIVE_INFINITY); - for (const annotation of annotations) { - if (annotation.scaleID === scaleID) { - for (const prop of ['value', 'endValue']) { - const raw = annotation[prop]; - if (raw) { - const value = scale.parse(raw); - min = Math.min(min, value); - max = Math.max(max, value); - } - } - } else if (annotation[scaleIDOption] === scaleID) { - for (const prop of [axis + 'Min', axis + 'Max', axis + 'Value']) { - const raw = annotation[prop]; - if (raw) { - const value = scale.parse(raw); - min = Math.min(min, value); - max = Math.max(max, value); - } - } +function drawSubElements(ctx, elements, caller) { + for (const el of elements) { + if (isArray(el.elements)) { + drawElements(ctx, el.elements, caller); } } - return {min, max}; } export { annotation as default }; diff --git a/dist/chartjs-plugin-annotation.js b/dist/chartjs-plugin-annotation.js index e7095ead0..e81221fe5 100644 --- a/dist/chartjs-plugin-annotation.js +++ b/dist/chartjs-plugin-annotation.js @@ -1,28 +1,26 @@ /*! -* chartjs-plugin-annotation v1.0.2 +* chartjs-plugin-annotation v1.2.2 * https://www.chartjs.org/chartjs-plugin-annotation/index - * (c) 2021 chartjs-plugin-annotation Contributors + * (c) 2022 chartjs-plugin-annotation Contributors * Released under the MIT License */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('chart.js-v3'), require('canvas')) : typeof define === 'function' && define.amd ? define(['chart.js-v3', 'canvas'], factory) : -(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global['chartjs-plugin-annotation'] = factory(global.ChartJsV3, global.canvas)); -}(this, (function (ChartJsV3, canvas) { 'use strict'; +(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global["chartjs-plugin-annotation"] = factory(global.ChartJsV3, global.canvas)); +})(this, (function (ChartJsV3, canvas) { 'use strict'; function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var ChartJsV3__default = /*#__PURE__*/_interopDefaultLegacy(ChartJsV3); -const {distanceBetweenPoints} = ChartJsV3__default['default'].helpers; -const callHandler = ChartJsV3__default['default'].helpers.callback; +const {distanceBetweenPoints, defined: defined$2, callback} = ChartJsV3__default["default"].helpers; const clickHooks = ['click', 'dblclick']; const moveHooks = ['enter', 'leave']; const hooks = clickHooks.concat(moveHooks); function updateListeners(chart, state, options) { - const annotations = state.annotations || []; state.listened = false; state.moveListened = false; @@ -30,6 +28,8 @@ function updateListeners(chart, state, options) { if (typeof options[hook] === 'function') { state.listened = true; state.listeners[hook] = options[hook]; + } else if (defined$2(state.listeners[hook])) { + delete state.listeners[hook]; } }); moveHooks.forEach(hook => { @@ -39,7 +39,7 @@ function updateListeners(chart, state, options) { }); if (!state.listened || !state.moveListened) { - annotations.forEach(scope => { + state.annotations.forEach(scope => { if (!state.listened) { clickHooks.forEach(hook => { if (typeof scope[hook] === 'function') { @@ -59,21 +59,21 @@ function updateListeners(chart, state, options) { } } -function handleEvent(chart, state, event, options) { +function handleEvent(state, event, options) { if (state.listened) { switch (event.type) { case 'mousemove': case 'mouseout': - handleMoveEvents(chart, state, event); + handleMoveEvents(state, event); break; case 'click': - handleClickEvents(chart, state, event, options); + handleClickEvents(state, event, options); break; } } } -function handleMoveEvents(chart, state, event) { +function handleMoveEvents(state, event) { if (!state.moveListened) { return; } @@ -87,20 +87,20 @@ function handleMoveEvents(chart, state, event) { const previous = state.hovered; state.hovered = element; - dispatchMoveEvents(chart, state, {previous, element}, event); + dispatchMoveEvents(state, {previous, element}, event); } -function dispatchMoveEvents(chart, state, elements, event) { +function dispatchMoveEvents(state, elements, event) { const {previous, element} = elements; if (previous && previous !== element) { - dispatchEvent(chart, previous.options.leave || state.listeners.leave, previous, event); + dispatchEvent(previous.options.leave || state.listeners.leave, previous, event); } if (element && element !== previous) { - dispatchEvent(chart, element.options.enter || state.listeners.enter, element, event); + dispatchEvent(element.options.enter || state.listeners.enter, element, event); } } -function handleClickEvents(chart, state, event, options) { +function handleClickEvents(state, event, options) { const listeners = state.listeners; const element = getNearestItem(state.elements, event); if (element) { @@ -111,22 +111,22 @@ function handleClickEvents(chart, state, event, options) { // 2nd click before timeout, so its a double click clearTimeout(element.clickTimeout); delete element.clickTimeout; - dispatchEvent(chart, dblclick, element, event); + dispatchEvent(dblclick, element, event); } else if (dblclick) { // if there is a dblclick handler, wait for dblClickSpeed ms before deciding its a click element.clickTimeout = setTimeout(() => { delete element.clickTimeout; - dispatchEvent(chart, click, element, event); + dispatchEvent(click, element, event); }, options.dblClickSpeed); } else { // no double click handler, just call the click handler directly - dispatchEvent(chart, click, element, event); + dispatchEvent(click, element, event); } } } -function dispatchEvent(chart, handler, element, event) { - callHandler(handler, [{chart, element}, event]); +function dispatchEvent(handler, element, event) { + callback(handler, [element.$context, event]); } function getNearestItem(elements, position) { @@ -152,7 +152,71 @@ function getNearestItem(elements, position) { .slice(0, 1)[0]; // return only the top item } -const {isFinite: isFinite$1} = ChartJsV3__default['default'].helpers; +const {isFinite: isFinite$1, valueOrDefault: valueOrDefault$2, defined: defined$1} = ChartJsV3__default["default"].helpers; + +function adjustScaleRange(chart, scale, annotations) { + const range = getScaleLimits(scale, annotations); + let changed = changeScaleLimit(scale, range, 'min', 'suggestedMin'); + changed = changeScaleLimit(scale, range, 'max', 'suggestedMax') || changed; + if (changed && typeof scale.handleTickRangeOptions === 'function') { + scale.handleTickRangeOptions(); + } +} + +function verifyScaleOptions(annotations, scales) { + for (const annotation of annotations) { + verifyScaleIDs(annotation, scales); + } +} + +function changeScaleLimit(scale, range, limit, suggestedLimit) { + if (isFinite$1(range[limit]) && !scaleLimitDefined(scale.options, limit, suggestedLimit)) { + const changed = scale[limit] !== range[limit]; + scale[limit] = range[limit]; + return changed; + } +} + +function scaleLimitDefined(scaleOptions, limit, suggestedLimit) { + return defined$1(scaleOptions[limit]) || defined$1(scaleOptions[suggestedLimit]); +} + +function verifyScaleIDs(annotation, scales) { + for (const key of ['scaleID', 'xScaleID', 'yScaleID']) { + if (annotation[key] && !scales[annotation[key]]) { + console.warn(`No scale found with id '${annotation[key]}' for annotation '${annotation.id}'`); + } + } +} + +function getScaleLimits(scale, annotations) { + const axis = scale.axis; + const scaleID = scale.id; + const scaleIDOption = axis + 'ScaleID'; + const limits = { + min: valueOrDefault$2(scale.min, Number.NEGATIVE_INFINITY), + max: valueOrDefault$2(scale.max, Number.POSITIVE_INFINITY) + }; + for (const annotation of annotations) { + if (annotation.scaleID === scaleID) { + updateLimits(annotation, scale, ['value', 'endValue'], limits); + } else if (annotation[scaleIDOption] === scaleID) { + updateLimits(annotation, scale, [axis + 'Min', axis + 'Max', axis + 'Value'], limits); + } + } + return limits; +} + +function updateLimits(annotation, scale, props, limits) { + for (const prop of props) { + const raw = annotation[prop]; + if (defined$1(raw)) { + const value = scale.parse(raw); + limits.min = Math.min(limits.min, value); + limits.max = Math.max(limits.max, value); + } + } +} const clamp = (x, from, to) => Math.min(to, Math.max(from, x)); @@ -163,23 +227,249 @@ function clampAll(obj, from, to) { return obj; } -function scaleValue(scale, value, fallback) { - value = typeof value === 'number' ? value : scale.parse(value); - return isFinite$1(value) ? scale.getPixelForValue(value) : fallback; +function inPointRange(point, center, radius, borderWidth) { + if (!point || !center || radius <= 0) { + return false; + } + const hBorderWidth = borderWidth / 2 || 0; + return (Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2)) <= Math.pow(radius + hBorderWidth, 2); +} + +function inBoxRange(mouseX, mouseY, {x, y, width, height}, borderWidth) { + const hBorderWidth = borderWidth / 2 || 0; + return mouseX >= x - hBorderWidth && + mouseX <= x + width + hBorderWidth && + mouseY >= y - hBorderWidth && + mouseY <= y + height + hBorderWidth; +} + +function getElementCenterPoint(element, useFinalPosition) { + const {x, y} = element.getProps(['x', 'y'], useFinalPosition); + return {x, y}; +} + +const isOlderPart = (act, req) => req > act || (act.length > req.length && act.substr(0, req.length) === req); + +function requireVersion(pkg, min, ver, strict = true) { + const parts = ver.split('.'); + let i = 0; + for (const req of min.split('.')) { + const act = parts[i++]; + if (parseInt(req, 10) < parseInt(act, 10)) { + break; + } + if (isOlderPart(act, req)) { + if (strict) { + throw new Error(`${pkg} v${ver} is not supported. v${min} or newer is required.`); + } else { + return false; + } + } + } + return true; +} + +const {isObject: isObject$1, valueOrDefault: valueOrDefault$1, defined} = ChartJsV3__default["default"].helpers; + +const isPercentString = (s) => typeof s === 'string' && s.endsWith('%'); +const toPercent = (s) => clamp(parseFloat(s) / 100, 0, 1); + +function getRelativePosition(size, positionOption) { + if (positionOption === 'start') { + return 0; + } + if (positionOption === 'end') { + return size; + } + if (isPercentString(positionOption)) { + return toPercent(positionOption) * size; + } + return size / 2; +} + +function getSize(size, value) { + if (typeof value === 'number') { + return value; + } else if (isPercentString(value)) { + return toPercent(value) * size; + } + return size; +} + +function calculateTextAlignment(size, options) { + const {x, width} = size; + const textAlign = options.textAlign; + if (textAlign === 'center') { + return x + width / 2; + } else if (textAlign === 'end' || textAlign === 'right') { + return x + width; + } + return x; +} + +function toPosition(value) { + if (isObject$1(value)) { + return { + x: valueOrDefault$1(value.x, 'center'), + y: valueOrDefault$1(value.y, 'center'), + }; + } + value = valueOrDefault$1(value, 'center'); + return { + x: value, + y: value + }; +} + +function isBoundToPoint(options) { + return options && (defined(options.xValue) || defined(options.yValue)); +} + +const {addRoundedRectPath, isArray: isArray$1, toFont, toTRBLCorners, valueOrDefault} = ChartJsV3__default["default"].helpers; + +const widthCache = new Map(); + +function isImageOrCanvas(content) { + return content instanceof canvas.Image || content instanceof Image || content instanceof HTMLCanvasElement; +} + +/** + * Apply border options to the canvas context before drawing a shape + * @param {CanvasRenderingContext2D} ctx - chart canvas context + * @param {Object} options - options with border configuration + * @returns {boolean} true is the border options have been applied + */ +function setBorderStyle(ctx, options) { + if (options && options.borderWidth) { + ctx.lineCap = options.borderCapStyle; + ctx.setLineDash(options.borderDash); + ctx.lineDashOffset = options.borderDashOffset; + ctx.lineJoin = options.borderJoinStyle; + ctx.lineWidth = options.borderWidth; + ctx.strokeStyle = options.borderColor; + return true; + } +} + +/** + * Apply shadow options to the canvas context before drawing a shape + * @param {CanvasRenderingContext2D} ctx - chart canvas context + * @param {Object} options - options with shadow configuration + */ +function setShadowStyle(ctx, options) { + ctx.shadowColor = options.backgroundShadowColor; + ctx.shadowBlur = options.shadowBlur; + ctx.shadowOffsetX = options.shadowOffsetX; + ctx.shadowOffsetY = options.shadowOffsetY; +} + +/** + * Measure the label size using the label options. + * @param {CanvasRenderingContext2D} ctx - chart canvas context + * @param {Object} options - options to configure the label + * @returns {{width: number, height: number}} the measured size of the label + */ +function measureLabelSize(ctx, options) { + const content = options.content; + if (isImageOrCanvas(content)) { + return { + width: getSize(content.width, options.width), + height: getSize(content.height, options.height) + }; + } + const font = toFont(options.font); + const lines = isArray$1(content) ? content : [content]; + const mapKey = lines.join() + font.string + (ctx._measureText ? '-spriting' : ''); + if (!widthCache.has(mapKey)) { + ctx.save(); + ctx.font = font.string; + const count = lines.length; + let width = 0; + for (let i = 0; i < count; i++) { + const text = lines[i]; + width = Math.max(width, ctx.measureText(text).width); + } + ctx.restore(); + const height = count * font.lineHeight; + widthCache.set(mapKey, {width, height}); + } + return widthCache.get(mapKey); +} + +/** + * Draw a box with the size and the styling options. + * @param {CanvasRenderingContext2D} ctx - chart canvas context + * @param {{x: number, y: number, width: number, height: number}} rect - rect to draw + * @param {Object} options - options to style the box + * @returns {undefined} + */ +function drawBox(ctx, rect, options) { + const {x, y, width, height} = rect; + ctx.save(); + setShadowStyle(ctx, options); + const stroke = setBorderStyle(ctx, options); + ctx.fillStyle = options.backgroundColor; + ctx.beginPath(); + addRoundedRectPath(ctx, { + x, y, w: width, h: height, + // TODO: v2 remove support for cornerRadius + radius: clampAll(toTRBLCorners(valueOrDefault(options.cornerRadius, options.borderRadius)), 0, Math.min(width, height) / 2) + }); + ctx.closePath(); + ctx.fill(); + if (stroke) { + ctx.shadowColor = options.borderShadowColor; + ctx.stroke(); + } + ctx.restore(); +} + +function drawLabel(ctx, rect, options) { + const content = options.content; + if (isImageOrCanvas(content)) { + ctx.drawImage(content, rect.x, rect.y, rect.width, rect.height); + return; + } + const labels = isArray$1(content) ? content : [content]; + const font = toFont(options.font); + const lh = font.lineHeight; + const x = calculateTextAlignment(rect, options); + const y = rect.y + (lh / 2); + ctx.font = font.string; + ctx.textBaseline = 'middle'; + ctx.textAlign = options.textAlign; + ctx.fillStyle = options.color; + labels.forEach((l, i) => ctx.fillText(l, x, y + (i * lh))); +} + +/** + * @typedef {import('chart.js').Point} Point + */ + +/** + * @param {{x: number, y: number, width: number, height: number}} rect + * @returns {Point} + */ +function getRectCenterPoint(rect) { + const {x, y, width, height} = rect; + return { + x: x + width / 2, + y: y + height / 2 + }; } /** * Rotate a `point` relative to `center` point by `angle` - * @param {{x: number, y: number}} point - the point to rotate - * @param {{x: number, y: number}} center - center point for rotation + * @param {Point} point - the point to rotate + * @param {Point} center - center point for rotation * @param {number} angle - angle for rotation, in radians - * @returns {{x: number, y: number}} rotated point + * @returns {Point} rotated point */ function rotated(point, center, angle) { - var cos = Math.cos(angle); - var sin = Math.sin(angle); - var cx = center.x; - var cy = center.y; + const cos = Math.cos(angle); + const sin = Math.sin(angle); + const cx = center.x; + const cy = center.y; return { x: cx + cos * (point.x - cx) - sin * (point.y - cy), @@ -187,105 +477,227 @@ function rotated(point, center, angle) { }; } -const {addRoundedRectPath: addRoundedRectPath$1, toTRBLCorners: toTRBLCorners$1, valueOrDefault: valueOrDefault$2} = ChartJsV3__default['default'].helpers; +const {isFinite} = ChartJsV3__default["default"].helpers; -class BoxAnnotation extends ChartJsV3.Element { - inRange(mouseX, mouseY, useFinalPosition) { - const {x, y, width, height} = this.getProps(['x', 'y', 'width', 'height'], useFinalPosition); +/** + * @typedef { import("chart.js").Chart } Chart + * @typedef { import("chart.js").Scale } Scale + * @typedef { import("chart.js").Point } Point + * @typedef { import('../../types/options').CoreAnnotationOptions } CoreAnnotationOptions + * @typedef { import('../../types/options').PointAnnotationOptions } PointAnnotationOptions + */ - return mouseX >= x && - mouseX <= x + width && - mouseY >= y && - mouseY <= y + height; - } +/** + * @param {Scale} scale + * @param {number|string} value + * @param {number} fallback + * @returns {number} + */ +function scaleValue(scale, value, fallback) { + value = typeof value === 'number' ? value : scale.parse(value); + return isFinite(value) ? scale.getPixelForValue(value) : fallback; +} - getCenterPoint(useFinalPosition) { - const {x, y, width, height} = this.getProps(['x', 'y', 'width', 'height'], useFinalPosition); +/** + * @param {Scale} scale + * @param {{start: number, end: number}} options + * @returns {{start: number, end: number}} + */ +function getChartDimensionByScale(scale, options) { + if (scale) { + const min = scaleValue(scale, options.min, options.start); + const max = scaleValue(scale, options.max, options.end); return { - x: x + width / 2, - y: y + height / 2 + start: Math.min(min, max), + end: Math.max(min, max) }; } + return { + start: options.start, + end: options.end + }; +} - draw(ctx) { - const {x, y, width, height, options} = this; +/** + * @param {Chart} chart + * @param {CoreAnnotationOptions} options + * @returns {Point} + */ +function getChartPoint(chart, options) { + const {chartArea, scales} = chart; + const xScale = scales[options.xScaleID]; + const yScale = scales[options.yScaleID]; + let x = chartArea.width / 2; + let y = chartArea.height / 2; + + if (xScale) { + x = scaleValue(xScale, options.xValue, x); + } - ctx.save(); + if (yScale) { + y = scaleValue(yScale, options.yValue, y); + } + return {x, y}; +} - ctx.lineWidth = options.borderWidth; - ctx.strokeStyle = options.borderColor; - ctx.fillStyle = options.backgroundColor; +/** + * @param {Chart} chart + * @param {CoreAnnotationOptions} options + * @returns {{x?:number, y?: number, x2?: number, y2?: number, width?: number, height?: number}} + */ +function getChartRect(chart, options) { + const xScale = chart.scales[options.xScaleID]; + const yScale = chart.scales[options.yScaleID]; + let {top: y, left: x, bottom: y2, right: x2} = chart.chartArea; - ctx.setLineDash(options.borderDash); - ctx.lineDashOffset = options.borderDashOffset; + if (!xScale && !yScale) { + return {}; + } - ctx.beginPath(); - addRoundedRectPath$1(ctx, { - x, y, w: width, h: height, - // TODO: v2 remove support for cornerRadius - radius: clampAll(toTRBLCorners$1(valueOrDefault$2(options.cornerRadius, options.borderRadius)), 0, Math.min(width, height) / 2) - }); - ctx.closePath(); - ctx.fill(); + const xDim = getChartDimensionByScale(xScale, {min: options.xMin, max: options.xMax, start: x, end: x2}); + x = xDim.start; + x2 = xDim.end; + const yDim = getChartDimensionByScale(yScale, {min: options.yMin, max: options.yMax, start: y, end: y2}); + y = yDim.start; + y2 = yDim.end; - // If no border, don't draw it - if (options.borderWidth) { - ctx.stroke(); - } + return { + x, + y, + x2, + y2, + width: x2 - x, + height: y2 - y + }; +} - ctx.restore(); +/** + * @param {Chart} chart + * @param {PointAnnotationOptions} options + */ +function getChartCircle(chart, options) { + const point = getChartPoint(chart, options); + return { + x: point.x + options.xAdjust, + y: point.y + options.yAdjust, + width: options.radius * 2, + height: options.radius * 2 + }; +} + +/** + * @param {Chart} chart + * @param {PointAnnotationOptions} options + * @returns + */ +function resolvePointPosition(chart, options) { + if (!isBoundToPoint(options)) { + const box = getChartRect(chart, options); + const point = getRectCenterPoint(box); + let radius = options.radius; + if (!radius || isNaN(radius)) { + radius = Math.min(box.width, box.height) / 2; + options.radius = radius; + } + return { + x: point.x + options.xAdjust, + y: point.y + options.yAdjust, + width: radius * 2, + height: radius * 2 + }; } + return getChartCircle(chart, options); +} - resolveElementProperties(chart, options) { - const xScale = chart.scales[options.xScaleID]; - const yScale = chart.scales[options.yScaleID]; - let {top: y, left: x, bottom: y2, right: x2} = chart.chartArea; - let min, max; +const {toPadding: toPadding$2} = ChartJsV3__default["default"].helpers; - if (!xScale && !yScale) { - return {options: {}}; - } +class BoxAnnotation extends ChartJsV3.Element { + inRange(mouseX, mouseY, useFinalPosition) { + return inBoxRange(mouseX, mouseY, this.getProps(['x', 'y', 'width', 'height'], useFinalPosition), this.options.borderWidth); + } - if (xScale) { - min = scaleValue(xScale, options.xMin, x); - max = scaleValue(xScale, options.xMax, x2); - x = Math.min(min, max); - x2 = Math.max(min, max); - } + getCenterPoint(useFinalPosition) { + return getRectCenterPoint(this.getProps(['x', 'y', 'width', 'height'], useFinalPosition)); + } - if (yScale) { - min = scaleValue(yScale, options.yMin, y2); - max = scaleValue(yScale, options.yMax, y); - y = Math.min(min, max); - y2 = Math.max(min, max); - } + draw(ctx) { + ctx.save(); + drawBox(ctx, this, this.options); + ctx.restore(); + } - return { - x, - y, - x2, - y2, - width: x2 - x, - height: y2 - y + drawLabel(ctx) { + const {x, y, width, height, options} = this; + const {label, borderWidth} = options; + const halfBorder = borderWidth / 2; + const position = toPosition(label.position); + const padding = toPadding$2(label.padding); + const labelSize = measureLabelSize(ctx, label); + const labelRect = { + x: calculateX(this, labelSize, position, padding), + y: calculateY(this, labelSize, position, padding), + width: labelSize.width, + height: labelSize.height }; + + ctx.save(); + ctx.beginPath(); + ctx.rect(x + halfBorder + padding.left, y + halfBorder + padding.top, + width - borderWidth - padding.width, height - borderWidth - padding.height); + ctx.clip(); + drawLabel(ctx, labelRect, label); + ctx.restore(); + } + + resolveElementProperties(chart, options) { + return getChartRect(chart, options); } } BoxAnnotation.id = 'boxAnnotation'; BoxAnnotation.defaults = { - display: true, adjustScaleRange: true, + backgroundShadowColor: 'transparent', + borderCapStyle: 'butt', borderDash: [], borderDashOffset: 0, - borderWidth: 1, + borderJoinStyle: 'miter', borderRadius: 0, - xScaleID: 'x', - xMin: undefined, + borderShadowColor: 'transparent', + borderWidth: 1, + cornerRadius: undefined, // TODO: v2 remove support for cornerRadius + display: true, + label: { + borderWidth: undefined, + color: 'black', + content: null, + drawTime: undefined, + enabled: false, + font: { + family: undefined, + lineHeight: undefined, + size: undefined, + style: undefined, + weight: 'bold' + }, + height: undefined, + padding: 6, + position: 'center', + textAlign: 'start', + xAdjust: 0, + yAdjust: 0, + width: undefined + }, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, xMax: undefined, - yScaleID: 'y', + xMin: undefined, + xScaleID: 'x', + yMax: undefined, yMin: undefined, - yMax: undefined + yScaleID: 'y' }; BoxAnnotation.defaultRoutes = { @@ -293,13 +705,47 @@ BoxAnnotation.defaultRoutes = { backgroundColor: 'color' }; -const {addRoundedRectPath, isArray: isArray$1, toFontString, toRadians: toRadians$1, toTRBLCorners, valueOrDefault: valueOrDefault$1} = ChartJsV3__default['default'].helpers; +BoxAnnotation.descriptors = { + label: { + _fallback: true + } +}; + +function calculateX(box, labelSize, position, padding) { + const {x: start, x2: end, width: size, options} = box; + const {xAdjust: adjust, borderWidth} = options.label; + return calculatePosition$1({start, end, size}, { + position: position.x, + padding: {start: padding.left, end: padding.right}, + adjust, borderWidth, + size: labelSize.width + }); +} + +function calculateY(box, labelSize, position, padding) { + const {y: start, y2: end, height: size, options} = box; + const {yAdjust: adjust, borderWidth} = options.label; + return calculatePosition$1({start, end, size}, { + position: position.y, + padding: {start: padding.top, end: padding.bottom}, + adjust, borderWidth, + size: labelSize.height + }); +} + +function calculatePosition$1(boxOpts, labelOpts) { + const {start, end} = boxOpts; + const {position, padding: {start: padStart, end: padEnd}, adjust, borderWidth} = labelOpts; + const availableSize = end - borderWidth - start - padStart - padEnd - labelOpts.size; + return start + borderWidth / 2 + adjust + padStart + getRelativePosition(availableSize, position); +} + +const {PI: PI$2, toRadians: toRadians$1, toPadding: toPadding$1} = ChartJsV3__default["default"].helpers; -const PI = Math.PI; const pointInLine = (p1, p2, t) => ({x: p1.x + t * (p2.x - p1.x), y: p1.y + t * (p2.y - p1.y)}); const interpolateX = (y, p1, p2) => pointInLine(p1, p2, Math.abs((y - p1.y) / (p2.y - p1.y))).x; const interpolateY = (x, p1, p2) => pointInLine(p1, p2, Math.abs((x - p1.x) / (p2.x - p1.x))).y; -const toPercent = (s) => typeof s === 'string' && s.endsWith('%') && parseFloat(s) / 100; +const sqr = v => v * v; function isLineInArea({x, y, x2, y2}, {top, right, bottom, left}) { return !( @@ -337,10 +783,11 @@ function limitLineToArea(p1, p2, area) { } class LineAnnotation extends ChartJsV3.Element { - intersects(x, y, epsilon = 0.001) { + + // TODO: make private in v2 + intersects(x, y, epsilon = 0.001, useFinalPosition) { // Adapted from https://stackoverflow.com/a/6853926/25507 - const sqr = v => v * v; - const {x: x1, y: y1, x2, y2} = this; + const {x: x1, y: y1, x2, y2} = this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition); const dx = x2 - x1; const dy = y2 - y1; const lenSq = sqr(dx) + sqr(dy); @@ -359,29 +806,37 @@ class LineAnnotation extends ChartJsV3.Element { return (sqr(x - xx) + sqr(y - yy)) < epsilon; } - labelIsVisible(chartArea) { - const label = this.options.label; - - const inside = !chartArea || isLineInArea(this, chartArea); - return inside && label && label.enabled && label.content; + /** + * @todo make private in v2 + * @param {boolean} useFinalPosition - use the element's animation target instead of current position + * @param {top, right, bottom, left} [chartArea] - optional, area of the chart + * @returns {boolean} true if the label is visible + */ + labelIsVisible(useFinalPosition, chartArea) { + const labelOpts = this.options.label; + if (!labelOpts || !labelOpts.enabled) { + return false; + } + return !chartArea || isLineInArea(this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), chartArea); } - isOnLabel(mouseX, mouseY) { - const {labelRect} = this; - if (!labelRect || !this.labelIsVisible()) { + // TODO: make private in v2 + isOnLabel(mouseX, mouseY, useFinalPosition) { + if (!this.labelIsVisible(useFinalPosition)) { return false; } - - const {x, y} = rotated({x: mouseX, y: mouseY}, labelRect, -labelRect.rotation); - const w2 = labelRect.width / 2; - const h2 = labelRect.height / 2; - return x >= labelRect.x - w2 && x <= labelRect.x + w2 && - y >= labelRect.y - h2 && y <= labelRect.y + h2; + const {labelX, labelY, labelWidth, labelHeight, labelRotation} = this.getProps(['labelX', 'labelY', 'labelWidth', 'labelHeight', 'labelRotation'], useFinalPosition); + const {x, y} = rotated({x: mouseX, y: mouseY}, {x: labelX, y: labelY}, -labelRotation); + const hBorderWidth = this.options.label.borderWidth / 2 || 0; + const w2 = labelWidth / 2 + hBorderWidth; + const h2 = labelHeight / 2 + hBorderWidth; + return x >= labelX - w2 && x <= labelX + w2 && + y >= labelY - h2 && y <= labelY + h2; } - inRange(x, y) { - const epsilon = this.options.borderWidth || 1; - return this.intersects(x, y, epsilon) || this.isOnLabel(x, y); + inRange(mouseX, mouseY, useFinalPosition) { + const epsilon = sqr(this.options.borderWidth / 2); + return this.intersects(mouseX, mouseY, epsilon, useFinalPosition) || this.isOnLabel(mouseX, mouseY, useFinalPosition); } getCenterPoint() { @@ -393,28 +848,55 @@ class LineAnnotation extends ChartJsV3.Element { draw(ctx) { const {x, y, x2, y2, options} = this; - ctx.save(); - ctx.lineWidth = options.borderWidth; - ctx.strokeStyle = options.borderColor; - ctx.setLineDash(options.borderDash); - ctx.lineDashOffset = options.borderDashOffset; + ctx.save(); + if (!setBorderStyle(ctx, options)) { + // no border width, then line is not drawn + return ctx.restore(); + } + setShadowStyle(ctx, options); + const angle = Math.atan2(y2 - y, x2 - x); + const length = Math.sqrt(Math.pow(x2 - x, 2) + Math.pow(y2 - y, 2)); + const {startOpts, endOpts, startAdjust, endAdjust} = getArrowHeads(this); - // Draw + ctx.translate(x, y); + ctx.rotate(angle); ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(x2, y2); + ctx.moveTo(0 + startAdjust, 0); + ctx.lineTo(length - endAdjust, 0); + ctx.shadowColor = options.borderShadowColor; ctx.stroke(); - + drawArrowHead(ctx, 0, startAdjust, startOpts); + drawArrowHead(ctx, length, -endAdjust, endOpts); ctx.restore(); } drawLabel(ctx, chartArea) { - if (this.labelIsVisible(chartArea)) { - ctx.save(); - drawLabel(ctx, this, chartArea); - ctx.restore(); + if (!this.labelIsVisible(false, chartArea)) { + return; } + const {labelX, labelY, labelWidth, labelHeight, labelRotation, labelPadding, labelTextSize, options: {label}} = this; + + ctx.save(); + ctx.translate(labelX, labelY); + ctx.rotate(labelRotation); + + const boxRect = { + x: -(labelWidth / 2), + y: -(labelHeight / 2), + width: labelWidth, + height: labelHeight + }; + drawBox(ctx, boxRect, label); + + const labelTextRect = { + x: -(labelWidth / 2) + labelPadding.left + label.borderWidth / 2, + y: -(labelHeight / 2) + labelPadding.top + label.borderWidth / 2, + width: labelTextSize.width, + height: labelTextSize.height + }; + drawLabel(ctx, labelTextRect, label); + ctx.restore(); } resolveElementProperties(chart, options) { @@ -447,189 +929,164 @@ class LineAnnotation extends ChartJsV3.Element { } } const inside = isLineInArea({x, y, x2, y2}, chart.chartArea); - return inside + const properties = inside ? limitLineToArea({x, y}, {x: x2, y: y2}, chart.chartArea) : {x, y, x2, y2, width: Math.abs(x2 - x), height: Math.abs(y2 - y)}; + + const label = options.label; + if (label && label.content) { + return loadLabelRect(properties, chart, label); + } + return properties; } } LineAnnotation.id = 'lineAnnotation'; + +const arrowHeadsDefaults = { + backgroundColor: undefined, + backgroundShadowColor: undefined, + borderColor: undefined, + borderDash: undefined, + borderDashOffset: undefined, + borderShadowColor: undefined, + borderWidth: undefined, + enabled: undefined, + fill: undefined, + length: undefined, + shadowBlur: undefined, + shadowOffsetX: undefined, + shadowOffsetY: undefined, + width: undefined +}; + LineAnnotation.defaults = { - display: true, adjustScaleRange: true, - borderWidth: 2, + arrowHeads: { + enabled: false, + end: Object.assign({}, arrowHeadsDefaults), + fill: false, + length: 12, + start: Object.assign({}, arrowHeadsDefaults), + width: 6 + }, borderDash: [], borderDashOffset: 0, + borderShadowColor: 'transparent', + borderWidth: 2, + display: true, + endValue: undefined, label: { backgroundColor: 'rgba(0,0,0,0.8)', + backgroundShadowColor: 'transparent', borderCapStyle: 'butt', borderColor: 'black', borderDash: [], borderDashOffset: 0, borderJoinStyle: 'miter', borderRadius: 6, + borderShadowColor: 'transparent', borderWidth: 0, + color: '#fff', + content: null, + cornerRadius: undefined, // TODO: v2 remove support for cornerRadius drawTime: undefined, + enabled: false, font: { family: undefined, lineHeight: undefined, size: undefined, - style: 'bold', - weight: undefined + style: undefined, + weight: 'bold' }, - color: '#fff', - xPadding: 6, - yPadding: 6, - rotation: 0, + height: undefined, + padding: 6, position: 'center', + rotation: 0, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + textAlign: 'center', + width: undefined, xAdjust: 0, + xPadding: undefined, // TODO: v2 remove support for xPadding yAdjust: 0, - textAlign: 'center', - enabled: false, - content: null + yPadding: undefined, // TODO: v2 remove support for yPadding }, - value: undefined, - endValue: undefined, scaleID: undefined, - xScaleID: 'x', - xMin: undefined, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + value: undefined, xMax: undefined, - yScaleID: 'y', + xMin: undefined, + xScaleID: 'x', + yMax: undefined, yMin: undefined, - yMax: undefined + yScaleID: 'y' +}; + +LineAnnotation.descriptors = { + arrowHeads: { + start: { + _fallback: true + }, + end: { + _fallback: true + }, + _fallback: true + } }; LineAnnotation.defaultRoutes = { borderColor: 'color' }; +function loadLabelRect(line, chart, options) { + // TODO: v2 remove support for xPadding and yPadding + const {padding: lblPadding, xPadding, yPadding, borderWidth} = options; + const padding = getPadding(lblPadding, xPadding, yPadding); + const textSize = measureLabelSize(chart.ctx, options); + const width = textSize.width + padding.width + borderWidth; + const height = textSize.height + padding.height + borderWidth; + const labelRect = calculateLabelPosition(line, options, {width, height, padding}, chart.chartArea); + line.labelX = labelRect.x; + line.labelY = labelRect.y; + line.labelWidth = labelRect.width; + line.labelHeight = labelRect.height; + line.labelRotation = labelRect.rotation; + line.labelPadding = padding; + line.labelTextSize = textSize; + return line; +} + function calculateAutoRotation(line) { const {x, y, x2, y2} = line; const rotation = Math.atan2(y2 - y, x2 - x); // Flip the rotation if it goes > PI/2 or < -PI/2, so label stays upright - return rotation > PI / 2 ? rotation - PI : rotation < PI / -2 ? rotation + PI : rotation; + return rotation > PI$2 / 2 ? rotation - PI$2 : rotation < PI$2 / -2 ? rotation + PI$2 : rotation; } -function drawLabel(ctx, line, chartArea) { - const label = line.options.label; - - ctx.font = toFontString(label.font); - - const {width, height} = measureLabel(ctx, label); - const rect = line.labelRect = calculateLabelPosition(line, width, height, chartArea); - - ctx.translate(rect.x, rect.y); - ctx.rotate(rect.rotation); - - ctx.fillStyle = label.backgroundColor; - const stroke = setBorderStyle(ctx, label); - - ctx.beginPath(); - addRoundedRectPath(ctx, { - x: -(width / 2), y: -(height / 2), w: width, h: height, - // TODO: v2 remove support for cornerRadius - radius: clampAll(toTRBLCorners(valueOrDefault$1(label.cornerRadius, label.borderRadius)), 0, Math.min(width, height) / 2) - }); - ctx.closePath(); - ctx.fill(); - if (stroke) { - ctx.stroke(); - } - - ctx.fillStyle = label.color; - if (isArray$1(label.content)) { - ctx.textAlign = label.textAlign; - const x = calculateLabelXAlignment(label, width); - let textYPosition = -(height / 2) + label.yPadding; - for (let i = 0; i < label.content.length; i++) { - ctx.textBaseline = 'top'; - ctx.fillText( - label.content[i], - x, - textYPosition - ); - textYPosition += label.font.size + label.yPadding; - } - } else if (label.content instanceof canvas.Image) { - const x = -(width / 2) + label.xPadding; - const y = -(height / 2) + label.yPadding; - ctx.drawImage(label.content, x, y, width - (2 * label.xPadding), height - (2 * label.yPadding)); - } else { - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - ctx.fillText(label.content, 0, 0); +// TODO: v2 remove support for xPadding and yPadding +function getPadding(padding, xPadding, yPadding) { + let tempPadding = padding; + if (xPadding || yPadding) { + tempPadding = {x: xPadding || 6, y: yPadding || 6}; } + return toPadding$1(tempPadding); } -function setBorderStyle(ctx, options) { - if (options.borderWidth) { - ctx.lineCap = options.borderCapStyle; - ctx.setLineDash(options.borderDash); - ctx.lineDashOffset = options.borderDashOffset; - ctx.lineJoin = options.borderJoinStyle; - ctx.lineWidth = options.borderWidth; - ctx.strokeStyle = options.borderColor; - return true; - } -} - -function calculateLabelXAlignment(label, width) { - const {textAlign, xPadding} = label; - if (textAlign === 'start') { - return -(width / 2) + xPadding; - } else if (textAlign === 'end') { - return +(width / 2) - xPadding; - } - return 0; -} - -function getImageSize(size, value) { - if (typeof value === 'number') { - return value; - } else if (typeof value === 'string') { - return toPercent(value) * size; - } - return size; -} - -const widthCache = new Map(); -function measureLabel(ctx, label) { - const content = label.content; - if (content instanceof canvas.Image) { - return { - width: getImageSize(content.width, label.width) + 2 * label.xPadding, - height: getImageSize(content.height, label.height) + 2 * label.yPadding - }; - } - const lines = isArray$1(content) ? content : [content]; - const count = lines.length; - let width = 0; - for (let i = 0; i < count; i++) { - const text = lines[i]; - if (!widthCache.has(text)) { - widthCache.set(text, ctx.measureText(text).width); - } - width = Math.max(width, widthCache.get(text)); - } - width += 2 * label.xPadding; - - return { - width, - height: count * label.font.size + ((count + 1) * label.yPadding) - }; -} - -function calculateLabelPosition(line, width, height, chartArea) { - const label = line.options.label; - const {xAdjust, yAdjust, xPadding, yPadding, position} = label; +function calculateLabelPosition(line, label, sizes, chartArea) { + const {width, height, padding} = sizes; + const {xAdjust, yAdjust} = label; const p1 = {x: line.x, y: line.y}; const p2 = {x: line.x2, y: line.y2}; const rotation = label.rotation === 'auto' ? calculateAutoRotation(line) : toRadians$1(label.rotation); const size = rotatedSize(width, height, rotation); - const t = calculateT(line, position, size, chartArea); + const t = calculateT(line, label, {labelSize: size, padding}, chartArea); const pt = pointInLine(p1, p2, t); - const xCoordinateSizes = {size: size.w, min: chartArea.left, max: chartArea.right, padding: xPadding}; - const yCoordinateSizes = {size: size.h, min: chartArea.top, max: chartArea.bottom, padding: yPadding}; + const xCoordinateSizes = {size: size.w, min: chartArea.left, max: chartArea.right, padding: padding.left}; + const yCoordinateSizes = {size: size.h, min: chartArea.top, max: chartArea.bottom, padding: padding.top}; return { x: adjustLabelCoordinate(pt.x, xCoordinateSizes) + xAdjust, @@ -649,24 +1106,25 @@ function rotatedSize(width, height, rotation) { }; } -function calculateT(line, position, rotSize, chartArea) { - let t = 0.5; +function calculateT(line, label, sizes, chartArea) { + let t; const space = spaceAround(line, chartArea); - const label = line.options.label; - if (position === 'start') { - t = calculateTAdjust({w: line.x2 - line.x, h: line.y2 - line.y}, rotSize, label, space); - } else if (position === 'end') { - t = 1 - calculateTAdjust({w: line.x - line.x2, h: line.y - line.y2}, rotSize, label, space); + if (label.position === 'start') { + t = calculateTAdjust({w: line.x2 - line.x, h: line.y2 - line.y}, sizes, label, space); + } else if (label.position === 'end') { + t = 1 - calculateTAdjust({w: line.x - line.x2, h: line.y - line.y2}, sizes, label, space); + } else { + t = getRelativePosition(1, label.position); } return t; } -function calculateTAdjust(lineSize, labelSize, label, space) { - const {xPadding, yPadding} = label; +function calculateTAdjust(lineSize, sizes, label, space) { + const {labelSize, padding} = sizes; const lineW = lineSize.w * space.dx; const lineH = lineSize.h * space.dy; - const x = (lineW > 0) && ((labelSize.w / 2 + xPadding - space.x) / lineW); - const y = (lineH > 0) && ((labelSize.h / 2 + yPadding - space.y) / lineH); + const x = (lineW > 0) && ((labelSize.w / 2 + padding.left - space.x) / lineW); + const y = (lineH > 0) && ((labelSize.h / 2 + padding.top - space.y) / lineH); return clamp(Math.max(x, y), 0, 0.25); } @@ -679,37 +1137,83 @@ function spaceAround(line, chartArea) { return { x: Math.min(l, r), y: Math.min(t, b), - dx: l < r ? 1 : -1, - dy: t < b ? 1 : -1 + dx: l <= r ? 1 : -1, + dy: t <= b ? 1 : -1 }; } function adjustLabelCoordinate(coordinate, labelSizes) { const {size, min, max, padding} = labelSizes; const halfSize = size / 2; - if (size > max - min) { // if it does not fit, display as much as possible return (max + min) / 2; } - if (min >= (coordinate - padding - halfSize)) { coordinate = min + padding + halfSize; } - if (max <= (coordinate + padding + halfSize)) { coordinate = max - padding - halfSize; } + return coordinate; +} + +function getArrowHeads(line) { + const options = line.options; + const arrowStartOpts = options.arrowHeads && options.arrowHeads.start; + const arrowEndOpts = options.arrowHeads && options.arrowHeads.end; + return { + startOpts: arrowStartOpts, + endOpts: arrowEndOpts, + startAdjust: getLineAdjust(line, arrowStartOpts), + endAdjust: getLineAdjust(line, arrowEndOpts) + }; +} + +function getLineAdjust(line, arrowOpts) { + if (!arrowOpts || !arrowOpts.enabled) { + return 0; + } + const {length, width} = arrowOpts; + const adjust = line.options.borderWidth / 2; + const p1 = {x: length, y: width + adjust}; + const p2 = {x: 0, y: adjust}; + return Math.abs(interpolateX(0, p1, p2)); +} - return coordinate; +function drawArrowHead(ctx, offset, adjust, arrowOpts) { + if (!arrowOpts || !arrowOpts.enabled) { + return; + } + const {length, width, fill, backgroundColor, borderColor} = arrowOpts; + const arrowOffsetX = Math.abs(offset - length) + adjust; + ctx.beginPath(); + setShadowStyle(ctx, arrowOpts); + setBorderStyle(ctx, arrowOpts); + ctx.moveTo(arrowOffsetX, -width); + ctx.lineTo(offset + adjust, 0); + ctx.lineTo(arrowOffsetX, width); + if (fill === true) { + ctx.fillStyle = backgroundColor || borderColor; + ctx.closePath(); + ctx.fill(); + ctx.shadowColor = 'transparent'; + } else { + ctx.shadowColor = arrowOpts.borderShadowColor; + } + ctx.stroke(); } -const {toRadians} = ChartJsV3__default['default'].helpers; +const {PI: PI$1, toRadians} = ChartJsV3__default["default"].helpers; -class EllipseAnnotation extends BoxAnnotation { +class EllipseAnnotation extends ChartJsV3.Element { - inRange(x, y) { - return pointInEllipse({x, y}, this); + inRange(mouseX, mouseY, useFinalPosition) { + return pointInEllipse({x: mouseX, y: mouseY}, this.getProps(['width', 'height'], useFinalPosition), this.options.rotation, this.options.borderWidth); + } + + getCenterPoint(useFinalPosition) { + return getRectCenterPoint(this.getProps(['x', 'y', 'width', 'height'], useFinalPosition)); } draw(ctx) { @@ -722,40 +1226,45 @@ class EllipseAnnotation extends BoxAnnotation { if (options.rotation) { ctx.rotate(toRadians(options.rotation)); } - + setShadowStyle(ctx, this.options); ctx.beginPath(); - - ctx.lineWidth = options.borderWidth; - ctx.strokeStyle = options.borderColor; ctx.fillStyle = options.backgroundColor; - - ctx.setLineDash(options.borderDash); - ctx.lineDashOffset = options.borderDashOffset; - - ctx.ellipse(0, 0, height / 2, width / 2, Math.PI / 2, 0, 2 * Math.PI); - + const stroke = setBorderStyle(ctx, options); + ctx.ellipse(0, 0, height / 2, width / 2, PI$1 / 2, 0, 2 * PI$1); ctx.fill(); - ctx.stroke(); - + if (stroke) { + ctx.shadowColor = options.borderShadowColor; + ctx.stroke(); + } ctx.restore(); } + + resolveElementProperties(chart, options) { + return getChartRect(chart, options); + } + } EllipseAnnotation.id = 'ellipseAnnotation'; EllipseAnnotation.defaults = { - display: true, adjustScaleRange: true, + backgroundShadowColor: 'transparent', borderDash: [], borderDashOffset: 0, + borderShadowColor: 'transparent', borderWidth: 1, + display: true, rotation: 0, - xScaleID: 'x', - xMin: undefined, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, xMax: undefined, - yScaleID: 'y', + xMin: undefined, + xScaleID: 'x', + yMax: undefined, yMin: undefined, - yMax: undefined + yScaleID: 'y' }; EllipseAnnotation.defaultRoutes = { @@ -763,7 +1272,7 @@ EllipseAnnotation.defaultRoutes = { backgroundColor: 'color' }; -function pointInEllipse(p, ellipse) { +function pointInEllipse(p, ellipse, rotation, borderWidth) { const {width, height} = ellipse; const center = ellipse.getCenterPoint(true); const xRadius = width / 2; @@ -772,84 +1281,302 @@ function pointInEllipse(p, ellipse) { if (xRadius <= 0 || yRadius <= 0) { return false; } - - return (Math.pow(p.x - center.x, 2) / Math.pow(xRadius, 2)) + (Math.pow(p.y - center.y, 2) / Math.pow(yRadius, 2)) <= 1.0; + // https://stackoverflow.com/questions/7946187/point-and-ellipse-rotated-position-test-algorithm + const angle = toRadians(rotation || 0); + const hBorderWidth = borderWidth / 2 || 0; + const cosAngle = Math.cos(angle); + const sinAngle = Math.sin(angle); + const a = Math.pow(cosAngle * (p.x - center.x) + sinAngle * (p.y - center.y), 2); + const b = Math.pow(sinAngle * (p.x - center.x) - cosAngle * (p.y - center.y), 2); + return (a / Math.pow(xRadius + hBorderWidth, 2)) + (b / Math.pow(yRadius + hBorderWidth, 2)) <= 1.0001; } -class PointAnnotation extends ChartJsV3.Element { - - inRange(x, y) { - const {width, options} = this; - const center = this.getCenterPoint(true); - const radius = width / 2 + options.borderWidth; +const {color, toPadding} = ChartJsV3__default["default"].helpers; - if (radius <= 0) { - return false; - } +class LabelAnnotation extends ChartJsV3.Element { - return (Math.pow(x - center.x, 2) + Math.pow(y - center.y, 2)) <= Math.pow(radius, 2); + inRange(mouseX, mouseY, useFinalPosition) { + return inBoxRange(mouseX, mouseY, this.getProps(['x', 'y', 'width', 'height'], useFinalPosition), this.options.borderWidth); } getCenterPoint(useFinalPosition) { - const {x, y} = this.getProps(['x', 'y'], useFinalPosition); - return {x, y}; + return getRectCenterPoint(this.getProps(['x', 'y', 'width', 'height'], useFinalPosition)); } draw(ctx) { - const {x, y, width, options} = this; + if (!this.options.content) { + return; + } + const {labelX, labelY, labelWidth, labelHeight, options} = this; + drawCallout(ctx, this); + if (this.boxVisible) { + drawBox(ctx, this, options); + } + drawLabel(ctx, {x: labelX, y: labelY, width: labelWidth, height: labelHeight}, options); + } - ctx.save(); + // TODO: make private in v2 + resolveElementProperties(chart, options) { + const point = !isBoundToPoint(options) ? getRectCenterPoint(getChartRect(chart, options)) : getChartPoint(chart, options); + const padding = toPadding(options.padding); + const labelSize = measureLabelSize(chart.ctx, options); + const boxSize = measureRect(point, labelSize, options, padding); + const bgColor = color(options.backgroundColor); + const boxVisible = options.borderWidth > 0 || (bgColor && bgColor.valid && bgColor.rgb.a > 0); + + const properties = { + boxVisible, + pointX: point.x, + pointY: point.y, + ...boxSize, + labelX: boxSize.x + padding.left + (options.borderWidth / 2), + labelY: boxSize.y + padding.top + (options.borderWidth / 2), + labelWidth: labelSize.width, + labelHeight: labelSize.height + }; + properties.calloutPosition = options.callout.enabled && resolveCalloutPosition(properties, options.callout); + return properties; + } +} - ctx.lineWidth = options.borderWidth; - ctx.strokeStyle = options.borderColor; - ctx.fillStyle = options.backgroundColor; +LabelAnnotation.id = 'labelAnnotation'; - ctx.setLineDash(options.borderDash); - ctx.lineDashOffset = options.borderDashOffset; +LabelAnnotation.defaults = { + adjustScaleRange: true, + backgroundColor: 'transparent', + backgroundShadowColor: 'transparent', + borderCapStyle: 'butt', + borderDash: [], + borderDashOffset: 0, + borderJoinStyle: 'miter', + borderRadius: 0, + borderShadowColor: 'transparent', + borderWidth: 0, + callout: { + borderCapStyle: 'butt', + borderColor: undefined, + borderDash: [], + borderDashOffset: 0, + borderJoinStyle: 'miter', + borderWidth: 1, + enabled: false, + margin: 5, + position: 'auto', + side: 5, + start: '50%', + }, + color: 'black', + content: null, + display: true, + font: { + family: undefined, + lineHeight: undefined, + size: undefined, + style: undefined, + weight: undefined + }, + height: undefined, + padding: 6, + position: 'center', + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + textAlign: 'center', + width: undefined, + xAdjust: 0, + xMax: undefined, + xMin: undefined, + xScaleID: 'x', + xValue: undefined, + yAdjust: 0, + yMax: undefined, + yMin: undefined, + yScaleID: 'y', + yValue: undefined +}; - ctx.beginPath(); - ctx.arc(x, y, width / 2, 0, Math.PI * 2); - ctx.fill(); - ctx.stroke(); +LabelAnnotation.defaultRoutes = { + borderColor: 'color' +}; - ctx.restore(); +function measureRect(point, size, options, padding) { + const width = size.width + padding.width + options.borderWidth; + const height = size.height + padding.height + options.borderWidth; + const position = toPosition(options.position); + + return { + x: calculatePosition(point.x, width, options.xAdjust, position.x), + y: calculatePosition(point.y, height, options.yAdjust, position.y), + width, + height + }; +} + +function calculatePosition(start, size, adjust = 0, position) { + return start - getRelativePosition(size, position) + adjust; +} + +function drawCallout(ctx, element) { + const {pointX, pointY, calloutPosition, options} = element; + if (!calloutPosition) { + return; } + const callout = options.callout; - resolveElementProperties(chart, options) { - const {chartArea, scales} = chart; - const xScale = scales[options.xScaleID]; - const yScale = scales[options.yScaleID]; - let x = chartArea.width / 2; - let y = chartArea.height / 2; - - if (xScale) { - x = scaleValue(xScale, options.xValue, x); - } + ctx.save(); + ctx.beginPath(); + const stroke = setBorderStyle(ctx, callout); + if (!stroke) { + return ctx.restore(); + } + const {separatorStart, separatorEnd} = getCalloutSeparatorCoord(element, calloutPosition); + const {sideStart, sideEnd} = getCalloutSideCoord(element, calloutPosition, separatorStart); + if (callout.margin > 0 || options.borderWidth === 0) { + ctx.moveTo(separatorStart.x, separatorStart.y); + ctx.lineTo(separatorEnd.x, separatorEnd.y); + } + ctx.moveTo(sideStart.x, sideStart.y); + ctx.lineTo(sideEnd.x, sideEnd.y); + ctx.lineTo(pointX, pointY); + ctx.stroke(); + ctx.restore(); +} - if (yScale) { - y = scaleValue(yScale, options.yValue, y); +function getCalloutSeparatorCoord(element, position) { + const {x, y, width, height} = element; + const adjust = getCalloutSeparatorAdjust(element, position); + let separatorStart, separatorEnd; + if (position === 'left' || position === 'right') { + separatorStart = {x: x + adjust, y}; + separatorEnd = {x: separatorStart.x, y: separatorStart.y + height}; + } else { + // position 'top' or 'bottom' + separatorStart = {x, y: y + adjust}; + separatorEnd = {x: separatorStart.x + width, y: separatorStart.y}; + } + return {separatorStart, separatorEnd}; +} + +function getCalloutSeparatorAdjust(element, position) { + const {width, height, options} = element; + const adjust = options.callout.margin + options.borderWidth / 2; + if (position === 'right') { + return width + adjust; + } else if (position === 'bottom') { + return height + adjust; + } + return -adjust; +} + +function getCalloutSideCoord(element, position, separatorStart) { + const {y, width, height, options} = element; + const start = options.callout.start; + const side = getCalloutSideAdjust(position, options.callout); + let sideStart, sideEnd; + if (position === 'left' || position === 'right') { + sideStart = {x: separatorStart.x, y: y + getSize(height, start)}; + sideEnd = {x: sideStart.x + side, y: sideStart.y}; + } else { + // position 'top' or 'bottom' + sideStart = {x: separatorStart.x + getSize(width, start), y: separatorStart.y}; + sideEnd = {x: sideStart.x, y: sideStart.y + side}; + } + return {sideStart, sideEnd}; +} + +function getCalloutSideAdjust(position, options) { + const side = options.side; + if (position === 'left' || position === 'top') { + return -side; + } + return side; +} + +function resolveCalloutPosition(element, options) { + const position = options.position; + if (position === 'left' || position === 'right' || position === 'top' || position === 'bottom') { + return position; + } + return resolveCalloutAutoPosition(element, options); +} + +function resolveCalloutAutoPosition(element, options) { + const {x, y, width, height, pointX, pointY} = element; + const {margin, side} = options; + const adjust = margin + side; + if (pointX < (x - adjust)) { + return 'left'; + } else if (pointX > (x + width + adjust)) { + return 'right'; + } else if (pointY < (y - adjust)) { + return 'top'; + } else if (pointY > (y + height + adjust)) { + return 'bottom'; + } +} + +const {drawPoint} = ChartJsV3__default["default"].helpers; + +class PointAnnotation extends ChartJsV3.Element { + + inRange(mouseX, mouseY, useFinalPosition) { + const {width} = this.getProps(['width'], useFinalPosition); + return inPointRange({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), width / 2, this.options.borderWidth); + } + + getCenterPoint(useFinalPosition) { + return getElementCenterPoint(this, useFinalPosition); + } + + draw(ctx) { + const options = this.options; + const borderWidth = options.borderWidth; + if (options.radius < 0.1) { + return; + } + ctx.save(); + ctx.fillStyle = options.backgroundColor; + setShadowStyle(ctx, options); + const stroke = setBorderStyle(ctx, options); + options.borderWidth = 0; + drawPoint(ctx, options, this.x, this.y); + if (stroke && !isImageOrCanvas(options.pointStyle)) { + ctx.shadowColor = options.borderShadowColor; + ctx.stroke(); } + ctx.restore(); + options.borderWidth = borderWidth; + } - return { - x, - y, - width: options.radius * 2, - height: options.radius * 2 - }; + resolveElementProperties(chart, options) { + return resolvePointPosition(chart, options); } } PointAnnotation.id = 'pointAnnotation'; PointAnnotation.defaults = { - display: true, adjustScaleRange: true, + backgroundShadowColor: 'transparent', borderDash: [], borderDashOffset: 0, + borderShadowColor: 'transparent', borderWidth: 1, + display: true, + pointStyle: 'circle', radius: 10, + rotation: 0, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + xAdjust: 0, + xMax: undefined, + xMin: undefined, xScaleID: 'x', xValue: undefined, + yAdjust: 0, + yMax: undefined, + yMin: undefined, yScaleID: 'y', yValue: undefined }; @@ -859,32 +1586,175 @@ PointAnnotation.defaultRoutes = { backgroundColor: 'color' }; -var version = "1.0.2"; +const {PI, RAD_PER_DEG} = ChartJsV3__default["default"].helpers; -const {clipArea, unclipArea, isFinite, valueOrDefault, isObject, isArray} = ChartJsV3__default['default'].helpers; +class PolygonAnnotation extends ChartJsV3.Element { + inRange(mouseX, mouseY, useFinalPosition) { + return this.options.radius >= 0.1 && this.elements.length > 1 && pointIsInPolygon(this.elements, mouseX, mouseY, useFinalPosition); + } -const chartStates = new Map(); + getCenterPoint(useFinalPosition) { + return getElementCenterPoint(this, useFinalPosition); + } + + draw(ctx) { + const {elements, options} = this; + ctx.save(); + ctx.beginPath(); + ctx.fillStyle = options.backgroundColor; + setShadowStyle(ctx, options); + const stroke = setBorderStyle(ctx, options); + let first = true; + for (const el of elements) { + if (first) { + ctx.moveTo(el.x, el.y); + first = false; + } else { + ctx.lineTo(el.x, el.y); + } + } + ctx.closePath(); + ctx.fill(); + // If no border, don't draw it + if (stroke) { + ctx.shadowColor = options.borderShadowColor; + ctx.stroke(); + } + ctx.restore(); + } + + resolveElementProperties(chart, options) { + const {x, y, width, height} = resolvePointPosition(chart, options); + const {sides, radius, rotation, borderWidth} = options; + const halfBorder = borderWidth / 2; + const elements = []; + const angle = (2 * PI) / sides; + let rad = rotation * RAD_PER_DEG; + for (let i = 0; i < sides; i++, rad += angle) { + const sin = Math.sin(rad); + const cos = Math.cos(rad); + elements.push({ + type: 'point', + optionScope: 'point', + properties: { + x: x + sin * radius, + y: y - cos * radius, + bX: x + sin * (radius + halfBorder), + bY: y - cos * (radius + halfBorder) + } + }); + } + return {x, y, width, height, elements, initProperties: {x, y}}; + } +} + +PolygonAnnotation.id = 'polygonAnnotation'; + +PolygonAnnotation.defaults = { + adjustScaleRange: true, + backgroundShadowColor: 'transparent', + borderCapStyle: 'butt', + borderDash: [], + borderDashOffset: 0, + borderJoinStyle: 'miter', + borderShadowColor: 'transparent', + borderWidth: 1, + display: true, + point: { + radius: 0 + }, + radius: 10, + rotation: 0, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + sides: 3, + xAdjust: 0, + xMax: undefined, + xMin: undefined, + xScaleID: 'x', + xValue: undefined, + yAdjust: 0, + yMax: undefined, + yMin: undefined, + yScaleID: 'y', + yValue: undefined +}; + +PolygonAnnotation.defaultRoutes = { + borderColor: 'color', + backgroundColor: 'color' +}; + + +function pointIsInPolygon(points, x, y, useFinalPosition) { + let isInside = false; + let A = points[points.length - 1].getProps(['bX', 'bY'], useFinalPosition); + for (const point of points) { + const B = point.getProps(['bX', 'bY'], useFinalPosition); + if ((B.bY > y) !== (A.bY > y) && x < (A.bX - B.bX) * (y - B.bY) / (A.bY - B.bY) + B.bX) { + isInside = !isInside; + } + A = B; + } + return isInside; +} const annotationTypes = { box: BoxAnnotation, - line: LineAnnotation, ellipse: EllipseAnnotation, - point: PointAnnotation + label: LabelAnnotation, + line: LineAnnotation, + point: PointAnnotation, + polygon: PolygonAnnotation }; +/** + * Register fallback for annotation elements + * For example lineAnnotation options would be looked through: + * - the annotation object (options.plugins.annotation.annotations[id]) + * - element options (options.elements.lineAnnotation) + * - element defaults (defaults.elements.lineAnnotation) + * - annotation plugin defaults (defaults.plugins.annotation, this is what we are registering here) + */ Object.keys(annotationTypes).forEach(key => { ChartJsV3.defaults.describe(`elements.${annotationTypes[key].id}`, { _fallback: 'plugins.annotation' }); }); +var name = "chartjs-plugin-annotation"; +var version = "1.2.2"; + +const {clipArea, unclipArea, isObject, isArray} = ChartJsV3__default["default"].helpers; + +const chartStates = new Map(); + var Annotation = { id: 'annotation', version, + /* TODO: enable in v2 + beforeRegister() { + requireVersion('chart.js', '3.7', Chart.version); + }, + */ + afterRegister() { ChartJsV3.Chart.register(annotationTypes); + + // TODO: Remove this check, warning and workaround in v2 + if (!requireVersion('chart.js', '3.7', ChartJsV3.Chart.version, false)) { + console.warn(`${name} has known issues with chart.js versions prior to 3.7, please consider upgrading.`); + + // Workaround for https://github.com/chartjs/chartjs-plugin-annotation/issues/572 + ChartJsV3.Chart.defaults.set('elements.lineAnnotation', { + callout: {}, + font: {}, + padding: 6 + }); + } }, afterUnregister() { @@ -895,6 +1765,7 @@ var Annotation = { chartStates.set(chart, { annotations: [], elements: [], + visibleElements: [], listeners: {}, listened: false, moveListened: false @@ -917,6 +1788,7 @@ var Annotation = { } else if (isArray(annotationOptions)) { annotations.push(...annotationOptions); } + verifyScaleOptions(annotations, chart.scales); }, afterDataLimits(chart, args) { @@ -928,27 +1800,28 @@ var Annotation = { const state = chartStates.get(chart); updateListeners(chart, state, options); updateElements(chart, state, options, args.mode); + state.visibleElements = state.elements.filter(el => !el.skip && el.options.display); }, - beforeDatasetsDraw(chart) { - draw(chart, 'beforeDatasetsDraw'); + beforeDatasetsDraw(chart, _args, options) { + draw(chart, 'beforeDatasetsDraw', options.clip); }, - afterDatasetsDraw(chart) { - draw(chart, 'afterDatasetsDraw'); + afterDatasetsDraw(chart, _args, options) { + draw(chart, 'afterDatasetsDraw', options.clip); }, - beforeDraw(chart) { - draw(chart, 'beforeDraw'); + beforeDraw(chart, _args, options) { + draw(chart, 'beforeDraw', options.clip); }, - afterDraw(chart) { - draw(chart, 'afterDraw'); + afterDraw(chart, _args, options) { + draw(chart, 'afterDraw', options.clip); }, beforeEvent(chart, args, options) { const state = chartStates.get(chart); - handleEvent(chart, state, args.event, options); + handleEvent(state, args.event, options); }, destroy(chart) { @@ -960,14 +1833,15 @@ var Annotation = { }, defaults: { - drawTime: 'afterDatasetsDraw', - dblClickSpeed: 350, // ms animations: { numbers: { - properties: ['x', 'y', 'x2', 'y2', 'width', 'height'], + properties: ['x', 'y', 'x2', 'y2', 'width', 'height', 'pointX', 'pointY', 'labelX', 'labelY', 'labelWidth', 'labelHeight', 'radius'], type: 'number' }, }, + clip: true, + dblClickSpeed: 350, // ms + drawTime: 'afterDatasetsDraw', label: { drawTime: null } @@ -978,7 +1852,7 @@ var Annotation = { _scriptable: (prop) => !hooks.includes(prop), annotations: { _allKeys: false, - _fallback: (prop, opts) => `elements.${annotationTypes[opts.type || 'line'].id}`, + _fallback: (prop, opts) => `elements.${annotationTypes[resolveType(opts.type)].id}`, }, }, @@ -996,6 +1870,14 @@ function resolveAnimations(chart, animOpts, mode) { return new ChartJsV3.Animations(chart, animOpts); } +function resolveType(type = 'line') { + if (annotationTypes[type]) { + return type; + } + console.warn(`Unknown annotation type: '${type}', defaulting to 'line'`); + return 'line'; +} + function updateElements(chart, state, options, mode) { const animations = resolveAnimations(chart, options.animations, mode); @@ -1003,27 +1885,60 @@ function updateElements(chart, state, options, mode) { const elements = resyncElements(state.elements, annotations); for (let i = 0; i < annotations.length; i++) { - const annotation = annotations[i]; - let el = elements[i]; - const elType = annotationTypes[annotation.type] || annotationTypes.line; - if (!el || !(el instanceof elType)) { - el = elements[i] = new elType(); - } - const opts = resolveAnnotationOptions(annotation.setContext(getContext(chart, el, annotation))); - const properties = el.resolveElementProperties(chart, opts); + const annotationOptions = annotations[i]; + const element = getOrCreateElement(elements, i, annotationOptions.type); + const resolver = annotationOptions.setContext(getContext(chart, element, annotationOptions)); + const resolvedOptions = resolveAnnotationOptions(resolver); + const properties = element.resolveElementProperties(chart, resolvedOptions); + properties.skip = isNaN(properties.x) || isNaN(properties.y); - properties.options = opts; - animations.update(el, properties); + properties.options = resolvedOptions; + + if ('elements' in properties) { + updateSubElements(element, properties, resolver, animations); + // Remove the sub-element definitions from properties, so the actual elements + // are not overwritten by their definitions + delete properties.elements; + } + + animations.update(element, properties); + } +} + +function updateSubElements(mainElement, {elements, initProperties}, resolver, animations) { + const subElements = mainElement.elements || (mainElement.elements = []); + subElements.length = elements.length; + for (let i = 0; i < elements.length; i++) { + const definition = elements[i]; + const properties = definition.properties; + const subElement = getOrCreateElement(subElements, i, definition.type, initProperties); + const subResolver = resolver[definition.optionScope].override(definition); + properties.options = resolveAnnotationOptions(subResolver); + animations.update(subElement, properties); } } +function getOrCreateElement(elements, index, type, initProperties) { + const elementClass = annotationTypes[resolveType(type)]; + let element = elements[index]; + if (!element || !(element instanceof elementClass)) { + element = elements[index] = new elementClass(); + if (isObject(initProperties)) { + Object.assign(element, initProperties); + } + } + return element; +} + function resolveAnnotationOptions(resolver) { - const elType = annotationTypes[resolver.type] || annotationTypes.line; + const elementClass = annotationTypes[resolveType(resolver.type)]; const result = {}; result.id = resolver.id; result.type = resolver.type; result.drawTime = resolver.drawTime; - Object.assign(result, resolveObj(resolver, elType.defaults), resolveObj(resolver, elType.defaultRoutes)); + Object.assign(result, + resolveObj(resolver, elementClass.defaults), + resolveObj(resolver, elementClass.defaultRoutes)); for (const hook of hooks) { result[hook] = resolver[hook]; } @@ -1032,10 +1947,10 @@ function resolveAnnotationOptions(resolver) { function resolveObj(resolver, defs) { const result = {}; - for (const name of Object.keys(defs)) { - const optDefs = defs[name]; - const value = resolver[name]; - result[name] = isObject(optDefs) ? resolveObj(value, optDefs) : value; + for (const prop of Object.keys(defs)) { + const optDefs = defs[prop]; + const value = resolver[prop]; + result[prop] = isObject(optDefs) ? resolveObj(value, optDefs) : value; } return result; } @@ -1061,78 +1976,50 @@ function resyncElements(elements, annotations) { return elements; } -function draw(chart, caller) { +function draw(chart, caller, clip) { const {ctx, chartArea} = chart; - const state = chartStates.get(chart); - const elements = state.elements.filter(el => !el.skip && el.options.display); + const {visibleElements} = chartStates.get(chart); - clipArea(ctx, chartArea); - elements.forEach(el => { - if (el.options.drawTime === caller) { - el.draw(ctx); - } - }); - unclipArea(ctx); + if (clip) { + clipArea(ctx, chartArea); + } + + drawElements(ctx, visibleElements, caller); + drawSubElements(ctx, visibleElements, caller); + + if (clip) { + unclipArea(ctx); + } - elements.forEach(el => { - if ('drawLabel' in el && el.options.label && (el.options.label.drawTime || el.options.drawTime) === caller) { + visibleElements.forEach(el => { + if (!('drawLabel' in el)) { + return; + } + const label = el.options.label; + if (label && label.enabled && label.content && (label.drawTime || el.options.drawTime) === caller) { el.drawLabel(ctx, chartArea); } }); } -function adjustScaleRange(chart, scale, annotations) { - const range = getScaleLimits(scale, annotations); - let changed = false; - if (isFinite(range.min) && - typeof scale.options.min === 'undefined' && - typeof scale.options.suggestedMin === 'undefined') { - changed = scale.min !== range.min; - scale.min = range.min; - } - if (isFinite(range.max) && - typeof scale.options.max === 'undefined' && - typeof scale.options.suggestedMax === 'undefined') { - changed = scale.max !== range.max; - scale.max = range.max; - } - if (changed && typeof scale.handleTickRangeOptions === 'function') { - scale.handleTickRangeOptions(); +function drawElements(ctx, elements, caller) { + for (const el of elements) { + if (el.options.drawTime === caller) { + el.draw(ctx); + } } } -function getScaleLimits(scale, annotations) { - const axis = scale.axis; - const scaleID = scale.id; - const scaleIDOption = axis + 'ScaleID'; - let min = valueOrDefault(scale.min, Number.NEGATIVE_INFINITY); - let max = valueOrDefault(scale.max, Number.POSITIVE_INFINITY); - for (const annotation of annotations) { - if (annotation.scaleID === scaleID) { - for (const prop of ['value', 'endValue']) { - const raw = annotation[prop]; - if (raw) { - const value = scale.parse(raw); - min = Math.min(min, value); - max = Math.max(max, value); - } - } - } else if (annotation[scaleIDOption] === scaleID) { - for (const prop of [axis + 'Min', axis + 'Max', axis + 'Value']) { - const raw = annotation[prop]; - if (raw) { - const value = scale.parse(raw); - min = Math.min(min, value); - max = Math.max(max, value); - } - } +function drawSubElements(ctx, elements, caller) { + for (const el of elements) { + if (isArray(el.elements)) { + drawElements(ctx, el.elements, caller); } } - return {min, max}; } ChartJsV3.Chart.register(Annotation); return Annotation; -}))); +})); diff --git a/dist/chartjs-plugin-annotation.min.js b/dist/chartjs-plugin-annotation.min.js index fbd240324..82fe16f7b 100644 --- a/dist/chartjs-plugin-annotation.min.js +++ b/dist/chartjs-plugin-annotation.min.js @@ -1,7 +1,7 @@ /*! -* chartjs-plugin-annotation v1.0.2 +* chartjs-plugin-annotation v1.2.2 * https://www.chartjs.org/chartjs-plugin-annotation/index - * (c) 2021 chartjs-plugin-annotation Contributors + * (c) 2022 chartjs-plugin-annotation Contributors * Released under the MIT License */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("chart.js-v3"),require("canvas")):"function"==typeof define&&define.amd?define(["chart.js-v3","canvas"],t):(e="undefined"!=typeof globalThis?globalThis:e||self)["chartjs-plugin-annotation"]=t(e.ChartJsV3,e.canvas)}(this,(function(e,t){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=n(e);const{distanceBetweenPoints:i}=o.default.helpers,a=o.default.helpers.callback,s=["click","dblclick"],r=["enter","leave"],l=s.concat(r);function d(e,t,n,o){if(t.listened)switch(n.type){case"mousemove":case"mouseout":!function(e,t,n){if(!t.moveListened)return;let o;"mousemove"===n.type&&(o=h(t.elements,n));const i=t.hovered;t.hovered=o,function(e,t,n,o){const{previous:i,element:a}=n;i&&i!==a&&c(e,i.options.leave||t.listeners.leave,i,o);a&&a!==i&&c(e,a.options.enter||t.listeners.enter,a,o)}(e,t,{previous:i,element:o},n)}(e,t,n);break;case"click":!function(e,t,n,o){const i=t.listeners,a=h(t.elements,n);if(a){const t=a.options,s=t.dblclick||i.dblclick,r=t.click||i.click;a.clickTimeout?(clearTimeout(a.clickTimeout),delete a.clickTimeout,c(e,s,a,n)):s?a.clickTimeout=setTimeout((()=>{delete a.clickTimeout,c(e,r,a,n)}),o.dblClickSpeed):c(e,r,a,n)}}(e,t,n,o)}}function c(e,t,n,o){a(t,[{chart:e,element:n},o])}function h(e,t){let n=Number.POSITIVE_INFINITY;return e.filter((e=>e.options.display&&e.inRange(t.x,t.y))).reduce(((e,o)=>{const a=o.getCenterPoint(),s=i(t,a);return se._index-t._index)).slice(0,1)[0]}const{isFinite:f}=o.default.helpers,u=(e,t,n)=>Math.min(n,Math.max(t,e));function x(e,t,n){for(const o of Object.keys(e))e[o]=u(e[o],t,n);return e}function y(e,t,n){return t="number"==typeof t?t:e.parse(t),f(t)?e.getPixelForValue(t):n}const{addRoundedRectPath:b,toTRBLCorners:p,valueOrDefault:g}=o.default.helpers;class m extends e.Element{inRange(e,t,n){const{x:o,y:i,width:a,height:s}=this.getProps(["x","y","width","height"],n);return e>=o&&e<=o+a&&t>=i&&t<=i+s}getCenterPoint(e){const{x:t,y:n,width:o,height:i}=this.getProps(["x","y","width","height"],e);return{x:t+o/2,y:n+i/2}}draw(e){const{x:t,y:n,width:o,height:i,options:a}=this;e.save(),e.lineWidth=a.borderWidth,e.strokeStyle=a.borderColor,e.fillStyle=a.backgroundColor,e.setLineDash(a.borderDash),e.lineDashOffset=a.borderDashOffset,e.beginPath(),b(e,{x:t,y:n,w:o,h:i,radius:x(p(g(a.cornerRadius,a.borderRadius)),0,Math.min(o,i)/2)}),e.closePath(),e.fill(),a.borderWidth&&e.stroke(),e.restore()}resolveElementProperties(e,t){const n=e.scales[t.xScaleID],o=e.scales[t.yScaleID];let i,a,{top:s,left:r,bottom:l,right:d}=e.chartArea;return n||o?(n&&(i=y(n,t.xMin,r),a=y(n,t.xMax,d),r=Math.min(i,a),d=Math.max(i,a)),o&&(i=y(o,t.yMin,l),a=y(o,t.yMax,s),s=Math.min(i,a),l=Math.max(i,a)),{x:r,y:s,x2:d,y2:l,width:d-r,height:l-s}):{options:{}}}}m.id="boxAnnotation",m.defaults={display:!0,adjustScaleRange:!0,borderDash:[],borderDashOffset:0,borderWidth:1,borderRadius:0,xScaleID:"x",xMin:void 0,xMax:void 0,yScaleID:"y",yMin:void 0,yMax:void 0},m.defaultRoutes={borderColor:"color",backgroundColor:"color"};const{addRoundedRectPath:w,isArray:M,toFontString:v,toRadians:D,toTRBLCorners:P,valueOrDefault:k}=o.default.helpers,I=Math.PI,S=(e,t,n)=>({x:e.x+n*(t.x-e.x),y:e.y+n*(t.y-e.y)}),C=(e,t,n)=>S(t,n,Math.abs((e-t.y)/(n.y-t.y))).x,O=(e,t,n)=>S(t,n,Math.abs((e-t.x)/(n.x-t.x))).y;function R({x:e,y:t,x2:n,y2:o},{top:i,right:a,bottom:s,left:r}){return!(ea&&n>a||ts&&o>s)}function T({x:e,y:t},n,{top:o,right:i,bottom:a,left:s}){return ei&&(t=O(i,{x:e,y:t},n),e=i),ta&&(e=C(a,{x:e,y:t},n),t=a),{x:e,y:t}}class A extends e.Element{intersects(e,t,n=.001){const o=e=>e*e,{x:i,y:a,x2:s,y2:r}=this,l=s-i,d=r-a,c=o(l)+o(d),h=0===c?-1:((e-i)*l+(t-a)*d)/c;let f,u;return h<0?(f=i,u=a):h>1?(f=s,u=r):(f=i+h*l,u=a+h*d),o(e-f)+o(t-u)=n.x-f&&o<=n.x+f&&i>=n.y-u&&i<=n.y+u}inRange(e,t){const n=this.options.borderWidth||1;return this.intersects(e,t,n)||this.isOnLabel(e,t)}getCenterPoint(){return{x:(this.x2+this.x)/2,y:(this.y2+this.y)/2}}draw(e){const{x:t,y:n,x2:o,y2:i,options:a}=this;e.save(),e.lineWidth=a.borderWidth,e.strokeStyle=a.borderColor,e.setLineDash(a.borderDash),e.lineDashOffset=a.borderDashOffset,e.beginPath(),e.moveTo(t,n),e.lineTo(o,i),e.stroke(),e.restore()}drawLabel(e,n){this.labelIsVisible(n)&&(e.save(),function(e,n,o){const i=n.options.label;e.font=v(i.font);const{width:a,height:s}=function(e,n){const o=n.content;if(o instanceof t.Image)return{width:j(o.width,n.width)+2*n.xPadding,height:j(o.height,n.height)+2*n.yPadding};const i=M(o)?o:[o],a=i.length;let s=0;for(let t=0;tI/2?a-I:a0&&(t.w/2+i-o.x)/s,d=r>0&&(t.h/2+a-o.y)/r;return u(Math.max(l,d),0,.25)}function W(e,t){const{size:n,min:o,max:i,padding:a}=t,s=n/2;return n>i-o?(i+o)/2:(o>=e-a-s&&(e=o+a+s),i<=e+a+s&&(e=i-a-s),e)}const{toRadians:N}=o.default.helpers;class V extends m{inRange(e,t){return function(e,t){const{width:n,height:o}=t,i=t.getCenterPoint(!0),a=n/2,s=o/2;if(a<=0||s<=0)return!1;return Math.pow(e.x-i.x,2)/Math.pow(a,2)+Math.pow(e.y-i.y,2)/Math.pow(s,2)<=1}({x:e,y:t},this)}draw(e){const{width:t,height:n,options:o}=this,i=this.getCenterPoint();e.save(),e.translate(i.x,i.y),o.rotation&&e.rotate(N(o.rotation)),e.beginPath(),e.lineWidth=o.borderWidth,e.strokeStyle=o.borderColor,e.fillStyle=o.backgroundColor,e.setLineDash(o.borderDash),e.lineDashOffset=o.borderDashOffset,e.ellipse(0,0,n/2,t/2,Math.PI/2,0,2*Math.PI),e.fill(),e.stroke(),e.restore()}}V.id="ellipseAnnotation",V.defaults={display:!0,adjustScaleRange:!0,borderDash:[],borderDashOffset:0,borderWidth:1,rotation:0,xScaleID:"x",xMin:void 0,xMax:void 0,yScaleID:"y",yMin:void 0,yMax:void 0},V.defaultRoutes={borderColor:"color",backgroundColor:"color"};class _ extends e.Element{inRange(e,t){const{width:n,options:o}=this,i=this.getCenterPoint(!0),a=n/2+o.borderWidth;return!(a<=0)&&Math.pow(e-i.x,2)+Math.pow(t-i.y,2)<=Math.pow(a,2)}getCenterPoint(e){const{x:t,y:n}=this.getProps(["x","y"],e);return{x:t,y:n}}draw(e){const{x:t,y:n,width:o,options:i}=this;e.save(),e.lineWidth=i.borderWidth,e.strokeStyle=i.borderColor,e.fillStyle=i.backgroundColor,e.setLineDash(i.borderDash),e.lineDashOffset=i.borderDashOffset,e.beginPath(),e.arc(t,n,o/2,0,2*Math.PI),e.fill(),e.stroke(),e.restore()}resolveElementProperties(e,t){const{chartArea:n,scales:o}=e,i=o[t.xScaleID],a=o[t.yScaleID];let s=n.width/2,r=n.height/2;return i&&(s=y(i,t.xValue,s)),a&&(r=y(a,t.yValue,r)),{x:s,y:r,width:2*t.radius,height:2*t.radius}}}_.id="pointAnnotation",_.defaults={display:!0,adjustScaleRange:!0,borderDash:[],borderDashOffset:0,borderWidth:1,radius:10,xScaleID:"x",xValue:void 0,yScaleID:"y",yValue:void 0},_.defaultRoutes={borderColor:"color",backgroundColor:"color"};const{clipArea:z,unclipArea:F,isFinite:B,valueOrDefault:J,isObject:$,isArray:U}=o.default.helpers,Y=new Map,q={box:m,line:A,ellipse:V,point:_};Object.keys(q).forEach((t=>{e.defaults.describe(`elements.${q[t].id}`,{_fallback:"plugins.annotation"})}));var H={id:"annotation",version:"1.0.2",afterRegister(){e.Chart.register(q)},afterUnregister(){e.Chart.unregister(q)},beforeInit(e){Y.set(e,{annotations:[],elements:[],listeners:{},listened:!1,moveListened:!1})},beforeUpdate(e,t,n){const o=Y.get(e).annotations=[];let i=n.annotations;$(i)?Object.keys(i).forEach((e=>{const t=i[e];$(t)&&(t.id=e,o.push(t))})):U(i)&&o.push(...i)},afterDataLimits(e,t){const n=Y.get(e);!function(e,t,n){const o=function(e,t){const n=e.axis,o=e.id,i=n+"ScaleID";let a=J(e.min,Number.NEGATIVE_INFINITY),s=J(e.max,Number.POSITIVE_INFINITY);for(const r of t)if(r.scaleID===o)for(const t of["value","endValue"]){const n=r[t];if(n){const t=e.parse(n);a=Math.min(a,t),s=Math.max(s,t)}}else if(r[i]===o)for(const t of[n+"Min",n+"Max",n+"Value"]){const n=r[t];if(n){const t=e.parse(n);a=Math.min(a,t),s=Math.max(s,t)}}return{min:a,max:s}}(t,n);let i=!1;B(o.min)&&void 0===t.options.min&&void 0===t.options.suggestedMin&&(i=t.min!==o.min,t.min=o.min);B(o.max)&&void 0===t.options.max&&void 0===t.options.suggestedMax&&(i=t.max!==o.max,t.max=o.max);i&&"function"==typeof t.handleTickRangeOptions&&t.handleTickRangeOptions()}(0,t.scale,n.annotations.filter((e=>e.display&&e.adjustScaleRange)))},afterUpdate(t,n,o){const i=Y.get(t);!function(e,t,n){const o=t.annotations||[];t.listened=!1,t.moveListened=!1,l.forEach((e=>{"function"==typeof n[e]&&(t.listened=!0,t.listeners[e]=n[e])})),r.forEach((e=>{"function"==typeof n[e]&&(t.moveListened=!0)})),t.listened&&t.moveListened||o.forEach((e=>{t.listened||s.forEach((n=>{"function"==typeof e[n]&&(t.listened=!0)})),t.moveListened||r.forEach((n=>{"function"==typeof e[n]&&(t.listened=!0,t.moveListened=!0)}))}))}(0,i,o),function(t,n,o,i){const a=function(t,n,o){if("reset"===o||"none"===o||"resize"===o)return G;return new e.Animations(t,n)}(t,o.animations,i),s=n.annotations,r=function(e,t){const n=t.length,o=e.length;if(on&&e.splice(n,o-n);return e}(n.elements,s);for(let e=0;eY.get(e),defaults:{drawTime:"afterDatasetsDraw",dblClickSpeed:350,animations:{numbers:{properties:["x","y","x2","y2","width","height"],type:"number"}},label:{drawTime:null}},descriptors:{_indexable:!1,_scriptable:e=>!l.includes(e),annotations:{_allKeys:!1,_fallback:(e,t)=>`elements.${q[t.type||"line"].id}`}},additionalOptionScopes:[""]};const G={update:Object.assign};function K(e){const t=q[e.type]||q.line,n={};n.id=e.id,n.type=e.type,n.drawTime=e.drawTime,Object.assign(n,Q(e,t.defaults),Q(e,t.defaultRoutes));for(const t of l)n[t]=e[t];return n}function Q(e,t){const n={};for(const o of Object.keys(t)){const i=t[o],a=e[o];n[o]=$(i)?Q(a,i):a}return n}function X(e,t,n){return t.$context||(t.$context=Object.assign(Object.create(e.getContext()),{element:t,id:n.id,type:"annotation"}))}function Z(e,t){const{ctx:n,chartArea:o}=e,i=Y.get(e).elements.filter((e=>!e.skip&&e.options.display));z(n,o),i.forEach((e=>{e.options.drawTime===t&&e.draw(n)})),F(n),i.forEach((e=>{"drawLabel"in e&&e.options.label&&(e.options.label.drawTime||e.options.drawTime)===t&&e.drawLabel(n,o)}))}return e.Chart.register(H),H})); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("chart.js-v3"),require("canvas")):"function"==typeof define&&define.amd?define(["chart.js-v3","canvas"],e):(t="undefined"!=typeof globalThis?globalThis:t||self)["chartjs-plugin-annotation"]=e(t.ChartJsV3,t.canvas)}(this,(function(t,e){"use strict";function o(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var n=o(t);const{distanceBetweenPoints:i,defined:r,callback:s}=n.default.helpers,a=["click","dblclick"],d=["enter","leave"],l=a.concat(d);function h(t,e,o){if(t.listened)switch(e.type){case"mousemove":case"mouseout":!function(t,e){if(!t.moveListened)return;let o;"mousemove"===e.type&&(o=u(t.elements,e));const n=t.hovered;t.hovered=o,function(t,e,o){const{previous:n,element:i}=e;n&&n!==i&&c(n.options.leave||t.listeners.leave,n,o);i&&i!==n&&c(i.options.enter||t.listeners.enter,i,o)}(t,{previous:n,element:o},e)}(t,e);break;case"click":!function(t,e,o){const n=t.listeners,i=u(t.elements,e);if(i){const t=i.options,r=t.dblclick||n.dblclick,s=t.click||n.click;i.clickTimeout?(clearTimeout(i.clickTimeout),delete i.clickTimeout,c(r,i,e)):r?i.clickTimeout=setTimeout((()=>{delete i.clickTimeout,c(s,i,e)}),o.dblClickSpeed):c(s,i,e)}}(t,e,o)}}function c(t,e,o){s(t,[e.$context,o])}function u(t,e){let o=Number.POSITIVE_INFINITY;return t.filter((t=>t.options.display&&t.inRange(e.x,e.y))).reduce(((t,n)=>{const r=n.getCenterPoint(),s=i(e,r);return st._index-e._index)).slice(0,1)[0]}const{isFinite:f,valueOrDefault:b,defined:p}=n.default.helpers;function x(t,e,o){const n=function(t,e){const o=t.axis,n=t.id,i=o+"ScaleID",r={min:b(t.min,Number.NEGATIVE_INFINITY),max:b(t.max,Number.POSITIVE_INFINITY)};for(const s of e)s.scaleID===n?w(s,t,["value","endValue"],r):s[i]===n&&w(s,t,[o+"Min",o+"Max",o+"Value"],r);return r}(e,o);let i=y(e,n,"min","suggestedMin");i=y(e,n,"max","suggestedMax")||i,i&&"function"==typeof e.handleTickRangeOptions&&e.handleTickRangeOptions()}function y(t,e,o,n){if(f(e[o])&&!function(t,e,o){return p(t[e])||p(t[o])}(t.options,o,n)){const n=t[o]!==e[o];return t[o]=e[o],n}}function g(t,e){for(const o of["scaleID","xScaleID","yScaleID"])t[o]&&!e[t[o]]&&console.warn(`No scale found with id '${t[o]}' for annotation '${t.id}'`)}function w(t,e,o,n){for(const i of o){const o=t[i];if(p(o)){const t=e.parse(o);n.min=Math.min(n.min,t),n.max=Math.max(n.max,t)}}}const m=(t,e,o)=>Math.min(o,Math.max(e,t));function v(t,e,o){for(const n of Object.keys(t))t[n]=m(t[n],e,o);return t}function M(t,e,{x:o,y:n,width:i,height:r},s){const a=s/2||0;return t>=o-a&&t<=o+i+a&&e>=n-a&&e<=n+r+a}function S(t,e){const{x:o,y:n}=t.getProps(["x","y"],e);return{x:o,y:n}}const C=(t,e)=>e>t||t.length>e.length&&t.substr(0,e.length)===e;const{isObject:D,valueOrDefault:k,defined:P}=n.default.helpers,O=t=>"string"==typeof t&&t.endsWith("%"),j=t=>m(parseFloat(t)/100,0,1);function A(t,e){return"start"===e?0:"end"===e?t:O(e)?j(e)*t:t/2}function I(t,e){return"number"==typeof e?e:O(e)?j(e)*t:t}function W(t){return D(t)?{x:k(t.x,"center"),y:k(t.y,"center")}:{x:t=k(t,"center"),y:t}}function T(t){return t&&(P(t.xValue)||P(t.yValue))}const{addRoundedRectPath:R,isArray:E,toFont:Y,toTRBLCorners:X,valueOrDefault:V}=n.default.helpers,H=new Map;function N(t){return t instanceof e.Image||t instanceof Image||t instanceof HTMLCanvasElement}function _(t,e){if(e&&e.borderWidth)return t.lineCap=e.borderCapStyle,t.setLineDash(e.borderDash),t.lineDashOffset=e.borderDashOffset,t.lineJoin=e.borderJoinStyle,t.lineWidth=e.borderWidth,t.strokeStyle=e.borderColor,!0}function z(t,e){t.shadowColor=e.backgroundShadowColor,t.shadowBlur=e.shadowBlur,t.shadowOffsetX=e.shadowOffsetX,t.shadowOffsetY=e.shadowOffsetY}function L(t,e){const o=e.content;if(N(o))return{width:I(o.width,e.width),height:I(o.height,e.height)};const n=Y(e.font),i=E(o)?o:[o],r=i.join()+n.string+(t._measureText?"-spriting":"");if(!H.has(r)){t.save(),t.font=n.string;const e=i.length;let o=0;for(let n=0;nt.fillText(e,a,d+o*s)))}function F(t){const{x:e,y:o,width:n,height:i}=t;return{x:e+n/2,y:o+i/2}}const{isFinite:J}=n.default.helpers;function q(t,e,o){return e="number"==typeof e?e:t.parse(e),J(e)?t.getPixelForValue(e):o}function U(t,e){if(t){const o=q(t,e.min,e.start),n=q(t,e.max,e.end);return{start:Math.min(o,n),end:Math.max(o,n)}}return{start:e.start,end:e.end}}function G(t,e){const{chartArea:o,scales:n}=t,i=n[e.xScaleID],r=n[e.yScaleID];let s=o.width/2,a=o.height/2;return i&&(s=q(i,e.xValue,s)),r&&(a=q(r,e.yValue,a)),{x:s,y:a}}function K(t,e){const o=t.scales[e.xScaleID],n=t.scales[e.yScaleID];let{top:i,left:r,bottom:s,right:a}=t.chartArea;if(!o&&!n)return{};const d=U(o,{min:e.xMin,max:e.xMax,start:r,end:a});r=d.start,a=d.end;const l=U(n,{min:e.yMin,max:e.yMax,start:i,end:s});return i=l.start,s=l.end,{x:r,y:i,x2:a,y2:s,width:a-r,height:s-i}}function Q(t,e){if(!T(e)){const o=K(t,e),n=F(o);let i=e.radius;return i&&!isNaN(i)||(i=Math.min(o.width,o.height)/2,e.radius=i),{x:n.x+e.xAdjust,y:n.y+e.yAdjust,width:2*i,height:2*i}}return function(t,e){const o=G(t,e);return{x:o.x+e.xAdjust,y:o.y+e.yAdjust,width:2*e.radius,height:2*e.radius}}(t,e)}const{toPadding:Z}=n.default.helpers;class tt extends t.Element{inRange(t,e,o){return M(t,e,this.getProps(["x","y","width","height"],o),this.options.borderWidth)}getCenterPoint(t){return F(this.getProps(["x","y","width","height"],t))}draw(t){t.save(),B(t,this,this.options),t.restore()}drawLabel(t){const{x:e,y:o,width:n,height:i,options:r}=this,{label:s,borderWidth:a}=r,d=a/2,l=W(s.position),h=Z(s.padding),c=L(t,s),u={x:et(this,c,l,h),y:ot(this,c,l,h),width:c.width,height:c.height};t.save(),t.beginPath(),t.rect(e+d+h.left,o+d+h.top,n-a-h.width,i-a-h.height),t.clip(),$(t,u,s),t.restore()}resolveElementProperties(t,e){return K(t,e)}}function et(t,e,o,n){const{x:i,x2:r,width:s,options:a}=t,{xAdjust:d,borderWidth:l}=a.label;return nt({start:i,end:r,size:s},{position:o.x,padding:{start:n.left,end:n.right},adjust:d,borderWidth:l,size:e.width})}function ot(t,e,o,n){const{y:i,y2:r,height:s,options:a}=t,{yAdjust:d,borderWidth:l}=a.label;return nt({start:i,end:r,size:s},{position:o.y,padding:{start:n.top,end:n.bottom},adjust:d,borderWidth:l,size:e.height})}function nt(t,e){const{start:o,end:n}=t,{position:i,padding:{start:r,end:s},adjust:a,borderWidth:d}=e;return o+d/2+a+r+A(n-d-o-r-s-e.size,i)}tt.id="boxAnnotation",tt.defaults={adjustScaleRange:!0,backgroundShadowColor:"transparent",borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderRadius:0,borderShadowColor:"transparent",borderWidth:1,cornerRadius:void 0,display:!0,label:{borderWidth:void 0,color:"black",content:null,drawTime:void 0,enabled:!1,font:{family:void 0,lineHeight:void 0,size:void 0,style:void 0,weight:"bold"},height:void 0,padding:6,position:"center",textAlign:"start",xAdjust:0,yAdjust:0,width:void 0},shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,xMax:void 0,xMin:void 0,xScaleID:"x",yMax:void 0,yMin:void 0,yScaleID:"y"},tt.defaultRoutes={borderColor:"color",backgroundColor:"color"},tt.descriptors={label:{_fallback:!0}};const{PI:it,toRadians:rt,toPadding:st}=n.default.helpers,at=(t,e,o)=>({x:t.x+o*(e.x-t.x),y:t.y+o*(e.y-t.y)}),dt=(t,e,o)=>at(e,o,Math.abs((t-e.y)/(o.y-e.y))).x,lt=(t,e,o)=>at(e,o,Math.abs((t-e.x)/(o.x-e.x))).y,ht=t=>t*t;function ct({x:t,y:e,x2:o,y2:n},{top:i,right:r,bottom:s,left:a}){return!(tr&&o>r||es&&n>s)}function ut({x:t,y:e},o,{top:n,right:i,bottom:r,left:s}){return ti&&(e=lt(i,{x:t,y:e},o),t=i),er&&(t=dt(r,{x:t,y:e},o),e=r),{x:t,y:e}}class ft extends t.Element{intersects(t,e,o=.001,n){const{x:i,y:r,x2:s,y2:a}=this.getProps(["x","y","x2","y2"],n),d=s-i,l=a-r,h=ht(d)+ht(l),c=0===h?-1:((t-i)*d+(e-r)*l)/h;let u,f;return c<0?(u=i,f=r):c>1?(u=s,f=a):(u=i+c*d,f=r+c*l),ht(t-u)+ht(e-f)=n-c&&d<=n+c&&l>=i-u&&l<=i+u}inRange(t,e,o){const n=ht(this.options.borderWidth/2);return this.intersects(t,e,n,o)||this.isOnLabel(t,e,o)}getCenterPoint(){return{x:(this.x2+this.x)/2,y:(this.y2+this.y)/2}}draw(t){const{x:e,y:o,x2:n,y2:i,options:r}=this;if(t.save(),!_(t,r))return t.restore();z(t,r);const s=Math.atan2(i-o,n-e),a=Math.sqrt(Math.pow(n-e,2)+Math.pow(i-o,2)),{startOpts:d,endOpts:l,startAdjust:h,endAdjust:c}=function(t){const e=t.options,o=e.arrowHeads&&e.arrowHeads.start,n=e.arrowHeads&&e.arrowHeads.end;return{startOpts:o,endOpts:n,startAdjust:yt(t,o),endAdjust:yt(t,n)}}(this);t.translate(e,o),t.rotate(s),t.beginPath(),t.moveTo(0+h,0),t.lineTo(a-c,0),t.shadowColor=r.borderShadowColor,t.stroke(),gt(t,0,h,d),gt(t,a,-c,l),t.restore()}drawLabel(t,e){if(!this.labelIsVisible(!1,e))return;const{labelX:o,labelY:n,labelWidth:i,labelHeight:r,labelRotation:s,labelPadding:a,labelTextSize:d,options:{label:l}}=this;t.save(),t.translate(o,n),t.rotate(s);B(t,{x:-i/2,y:-r/2,width:i,height:r},l);$(t,{x:-i/2+a.left+l.borderWidth/2,y:-r/2+a.top+l.borderWidth/2,width:d.width,height:d.height},l),t.restore()}resolveElementProperties(t,e){const o=t.scales[e.scaleID];let n,i,{top:r,left:s,bottom:a,right:d}=t.chartArea;if(o)n=q(o,e.value,NaN),i=q(o,e.endValue,n),o.isHorizontal()?(s=n,d=i):(r=n,a=i);else{const o=t.scales[e.xScaleID],n=t.scales[e.yScaleID];o&&(s=q(o,e.xMin,s),d=q(o,e.xMax,d)),n&&(r=q(n,e.yMin,r),a=q(n,e.yMax,a))}const l=ct({x:s,y:r,x2:d,y2:a},t.chartArea)?function(t,e,o){const{x:n,y:i}=ut(t,e,o),{x:r,y:s}=ut(e,t,o);return{x:n,y:i,x2:r,y2:s,width:Math.abs(r-n),height:Math.abs(s-i)}}({x:s,y:r},{x:d,y:a},t.chartArea):{x:s,y:r,x2:d,y2:a,width:Math.abs(d-s),height:Math.abs(a-r)},h=e.label;return h&&h.content?function(t,e,o){const{padding:n,xPadding:i,yPadding:r,borderWidth:s}=o,a=function(t,e,o){let n=t;(e||o)&&(n={x:e||6,y:o||6});return st(n)}(n,i,r),d=L(e.ctx,o),l=d.width+a.width+s,h=d.height+a.height+s,c=function(t,e,o,n){const{width:i,height:r,padding:s}=o,{xAdjust:a,yAdjust:d}=e,l={x:t.x,y:t.y},h={x:t.x2,y:t.y2},c="auto"===e.rotation?function(t){const{x:e,y:o,x2:n,y2:i}=t,r=Math.atan2(i-o,n-e);return r>it/2?r-it:r0&&(i.w/2+r.left-n.x)/s,l=a>0&&(i.h/2+r.top-n.y)/a;return m(Math.max(d,l),0,.25)}function xt(t,e){const{size:o,min:n,max:i,padding:r}=e,s=o/2;return o>i-n?(i+n)/2:(n>=t-r-s&&(t=n+r+s),i<=t+r+s&&(t=i-r-s),t)}function yt(t,e){if(!e||!e.enabled)return 0;const{length:o,width:n}=e,i=t.options.borderWidth/2,r={x:o,y:n+i},s={x:0,y:i};return Math.abs(dt(0,r,s))}function gt(t,e,o,n){if(!n||!n.enabled)return;const{length:i,width:r,fill:s,backgroundColor:a,borderColor:d}=n,l=Math.abs(e-i)+o;t.beginPath(),z(t,n),_(t,n),t.moveTo(l,-r),t.lineTo(e+o,0),t.lineTo(l,r),!0===s?(t.fillStyle=a||d,t.closePath(),t.fill(),t.shadowColor="transparent"):t.shadowColor=n.borderShadowColor,t.stroke()}ft.defaults={adjustScaleRange:!0,arrowHeads:{enabled:!1,end:Object.assign({},bt),fill:!1,length:12,start:Object.assign({},bt),width:6},borderDash:[],borderDashOffset:0,borderShadowColor:"transparent",borderWidth:2,display:!0,endValue:void 0,label:{backgroundColor:"rgba(0,0,0,0.8)",backgroundShadowColor:"transparent",borderCapStyle:"butt",borderColor:"black",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderRadius:6,borderShadowColor:"transparent",borderWidth:0,color:"#fff",content:null,cornerRadius:void 0,drawTime:void 0,enabled:!1,font:{family:void 0,lineHeight:void 0,size:void 0,style:void 0,weight:"bold"},height:void 0,padding:6,position:"center",rotation:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,textAlign:"center",width:void 0,xAdjust:0,xPadding:void 0,yAdjust:0,yPadding:void 0},scaleID:void 0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,value:void 0,xMax:void 0,xMin:void 0,xScaleID:"x",yMax:void 0,yMin:void 0,yScaleID:"y"},ft.descriptors={arrowHeads:{start:{_fallback:!0},end:{_fallback:!0},_fallback:!0}},ft.defaultRoutes={borderColor:"color"};const{PI:wt,toRadians:mt}=n.default.helpers;class vt extends t.Element{inRange(t,e,o){return function(t,e,o,n){const{width:i,height:r}=e,s=e.getCenterPoint(!0),a=i/2,d=r/2;if(a<=0||d<=0)return!1;const l=mt(o||0),h=n/2||0,c=Math.cos(l),u=Math.sin(l),f=Math.pow(c*(t.x-s.x)+u*(t.y-s.y),2),b=Math.pow(u*(t.x-s.x)-c*(t.y-s.y),2);return f/Math.pow(a+h,2)+b/Math.pow(d+h,2)<=1.0001}({x:t,y:e},this.getProps(["width","height"],o),this.options.rotation,this.options.borderWidth)}getCenterPoint(t){return F(this.getProps(["x","y","width","height"],t))}draw(t){const{width:e,height:o,options:n}=this,i=this.getCenterPoint();t.save(),t.translate(i.x,i.y),n.rotation&&t.rotate(mt(n.rotation)),z(t,this.options),t.beginPath(),t.fillStyle=n.backgroundColor;const r=_(t,n);t.ellipse(0,0,o/2,e/2,wt/2,0,2*wt),t.fill(),r&&(t.shadowColor=n.borderShadowColor,t.stroke()),t.restore()}resolveElementProperties(t,e){return K(t,e)}}vt.id="ellipseAnnotation",vt.defaults={adjustScaleRange:!0,backgroundShadowColor:"transparent",borderDash:[],borderDashOffset:0,borderShadowColor:"transparent",borderWidth:1,display:!0,rotation:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,xMax:void 0,xMin:void 0,xScaleID:"x",yMax:void 0,yMin:void 0,yScaleID:"y"},vt.defaultRoutes={borderColor:"color",backgroundColor:"color"};const{color:Mt,toPadding:St}=n.default.helpers;class Ct extends t.Element{inRange(t,e,o){return M(t,e,this.getProps(["x","y","width","height"],o),this.options.borderWidth)}getCenterPoint(t){return F(this.getProps(["x","y","width","height"],t))}draw(t){if(!this.options.content)return;const{labelX:e,labelY:o,labelWidth:n,labelHeight:i,options:r}=this;!function(t,e){const{pointX:o,pointY:n,calloutPosition:i,options:r}=e;if(!i)return;const s=r.callout;t.save(),t.beginPath();if(!_(t,s))return t.restore();const{separatorStart:a,separatorEnd:d}=function(t,e){const{x:o,y:n,width:i,height:r}=t,s=function(t,e){const{width:o,height:n,options:i}=t,r=i.callout.margin+i.borderWidth/2;if("right"===e)return o+r;if("bottom"===e)return n+r;return-r}(t,e);let a,d;"left"===e||"right"===e?(a={x:o+s,y:n},d={x:a.x,y:a.y+r}):(a={x:o,y:n+s},d={x:a.x+i,y:a.y});return{separatorStart:a,separatorEnd:d}}(e,i),{sideStart:l,sideEnd:h}=function(t,e,o){const{y:n,width:i,height:r,options:s}=t,a=s.callout.start,d=function(t,e){const o=e.side;if("left"===t||"top"===t)return-o;return o}(e,s.callout);let l,h;"left"===e||"right"===e?(l={x:o.x,y:n+I(r,a)},h={x:l.x+d,y:l.y}):(l={x:o.x+I(i,a),y:o.y},h={x:l.x,y:l.y+d});return{sideStart:l,sideEnd:h}}(e,i,a);(s.margin>0||0===r.borderWidth)&&(t.moveTo(a.x,a.y),t.lineTo(d.x,d.y));t.moveTo(l.x,l.y),t.lineTo(h.x,h.y),t.lineTo(o,n),t.stroke(),t.restore()}(t,this),this.boxVisible&&B(t,this,r),$(t,{x:e,y:o,width:n,height:i},r)}resolveElementProperties(t,e){const o=T(e)?G(t,e):F(K(t,e)),n=St(e.padding),i=L(t.ctx,e),r=function(t,e,o,n){const i=e.width+n.width+o.borderWidth,r=e.height+n.height+o.borderWidth,s=W(o.position);return{x:Dt(t.x,i,o.xAdjust,s.x),y:Dt(t.y,r,o.yAdjust,s.y),width:i,height:r}}(o,i,e,n),s=Mt(e.backgroundColor),a={boxVisible:e.borderWidth>0||s&&s.valid&&s.rgb.a>0,pointX:o.x,pointY:o.y,...r,labelX:r.x+n.left+e.borderWidth/2,labelY:r.y+n.top+e.borderWidth/2,labelWidth:i.width,labelHeight:i.height};return a.calloutPosition=e.callout.enabled&&function(t,e){const o=e.position;if("left"===o||"right"===o||"top"===o||"bottom"===o)return o;return function(t,e){const{x:o,y:n,width:i,height:r,pointX:s,pointY:a}=t,{margin:d,side:l}=e,h=d+l;if(so+i+h)return"right";if(an+r+h)return"bottom"}(t,e)}(a,e.callout),a}}function Dt(t,e,o=0,n){return t-A(e,n)+o}Ct.id="labelAnnotation",Ct.defaults={adjustScaleRange:!0,backgroundColor:"transparent",backgroundShadowColor:"transparent",borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderRadius:0,borderShadowColor:"transparent",borderWidth:0,callout:{borderCapStyle:"butt",borderColor:void 0,borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:1,enabled:!1,margin:5,position:"auto",side:5,start:"50%"},color:"black",content:null,display:!0,font:{family:void 0,lineHeight:void 0,size:void 0,style:void 0,weight:void 0},height:void 0,padding:6,position:"center",shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,textAlign:"center",width:void 0,xAdjust:0,xMax:void 0,xMin:void 0,xScaleID:"x",xValue:void 0,yAdjust:0,yMax:void 0,yMin:void 0,yScaleID:"y",yValue:void 0},Ct.defaultRoutes={borderColor:"color"};const{drawPoint:kt}=n.default.helpers;class Pt extends t.Element{inRange(t,e,o){const{width:n}=this.getProps(["width"],o);return function(t,e,o,n){if(!t||!e||o<=0)return!1;const i=n/2||0;return Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)<=Math.pow(o+i,2)}({x:t,y:e},this.getCenterPoint(o),n/2,this.options.borderWidth)}getCenterPoint(t){return S(this,t)}draw(t){const e=this.options,o=e.borderWidth;if(e.radius<.1)return;t.save(),t.fillStyle=e.backgroundColor,z(t,e);const n=_(t,e);e.borderWidth=0,kt(t,e,this.x,this.y),n&&!N(e.pointStyle)&&(t.shadowColor=e.borderShadowColor,t.stroke()),t.restore(),e.borderWidth=o}resolveElementProperties(t,e){return Q(t,e)}}Pt.id="pointAnnotation",Pt.defaults={adjustScaleRange:!0,backgroundShadowColor:"transparent",borderDash:[],borderDashOffset:0,borderShadowColor:"transparent",borderWidth:1,display:!0,pointStyle:"circle",radius:10,rotation:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,xAdjust:0,xMax:void 0,xMin:void 0,xScaleID:"x",xValue:void 0,yAdjust:0,yMax:void 0,yMin:void 0,yScaleID:"y",yValue:void 0},Pt.defaultRoutes={borderColor:"color",backgroundColor:"color"};const{PI:Ot,RAD_PER_DEG:jt}=n.default.helpers;class At extends t.Element{inRange(t,e,o){return this.options.radius>=.1&&this.elements.length>1&&function(t,e,o,n){let i=!1,r=t[t.length-1].getProps(["bX","bY"],n);for(const s of t){const t=s.getProps(["bX","bY"],n);t.bY>o!=r.bY>o&&e<(r.bX-t.bX)*(o-t.bY)/(r.bY-t.bY)+t.bX&&(i=!i),r=t}return i}(this.elements,t,e,o)}getCenterPoint(t){return S(this,t)}draw(t){const{elements:e,options:o}=this;t.save(),t.beginPath(),t.fillStyle=o.backgroundColor,z(t,o);const n=_(t,o);let i=!0;for(const o of e)i?(t.moveTo(o.x,o.y),i=!1):t.lineTo(o.x,o.y);t.closePath(),t.fill(),n&&(t.shadowColor=o.borderShadowColor,t.stroke()),t.restore()}resolveElementProperties(t,e){const{x:o,y:n,width:i,height:r}=Q(t,e),{sides:s,radius:a,rotation:d,borderWidth:l}=e,h=l/2,c=[],u=2*Ot/s;let f=d*jt;for(let t=0;t{t.defaults.describe(`elements.${It[e].id}`,{_fallback:"plugins.annotation"})}));const{clipArea:Wt,unclipArea:Tt,isObject:Rt,isArray:Et}=n.default.helpers,Yt=new Map;var Xt={id:"annotation",version:"1.2.2",afterRegister(){t.Chart.register(It),function(t,e,o,n=!0){const i=o.split(".");let r=0;for(const s of e.split(".")){const a=i[r++];if(parseInt(s,10){const e=i[t];Rt(e)&&(e.id=t,n.push(e))})):Et(i)&&n.push(...i),function(t,e){for(const o of t)g(o,e)}(n,t.scales)},afterDataLimits(t,e){const o=Yt.get(t);x(0,e.scale,o.annotations.filter((t=>t.display&&t.adjustScaleRange)))},afterUpdate(e,o,n){const i=Yt.get(e);!function(t,e,o){e.listened=!1,e.moveListened=!1,l.forEach((t=>{"function"==typeof o[t]?(e.listened=!0,e.listeners[t]=o[t]):r(e.listeners[t])&&delete e.listeners[t]})),d.forEach((t=>{"function"==typeof o[t]&&(e.moveListened=!0)})),e.listened&&e.moveListened||e.annotations.forEach((t=>{e.listened||a.forEach((o=>{"function"==typeof t[o]&&(e.listened=!0)})),e.moveListened||d.forEach((o=>{"function"==typeof t[o]&&(e.listened=!0,e.moveListened=!0)}))}))}(0,i,n),function(e,o,n,i){const r=function(e,o,n){if("reset"===n||"none"===n||"resize"===n)return Vt;return new t.Animations(e,o)}(e,n.animations,i),s=o.annotations,a=function(t,e){const o=e.length,n=t.length;if(no&&t.splice(o,n-o);return t}(o.elements,s);for(let t=0;t!t.skip&&t.options.display))},beforeDatasetsDraw(t,e,o){$t(t,"beforeDatasetsDraw",o.clip)},afterDatasetsDraw(t,e,o){$t(t,"afterDatasetsDraw",o.clip)},beforeDraw(t,e,o){$t(t,"beforeDraw",o.clip)},afterDraw(t,e,o){$t(t,"afterDraw",o.clip)},beforeEvent(t,e,o){h(Yt.get(t),e.event,o)},destroy(t){Yt.delete(t)},_getState:t=>Yt.get(t),defaults:{animations:{numbers:{properties:["x","y","x2","y2","width","height","pointX","pointY","labelX","labelY","labelWidth","labelHeight","radius"],type:"number"}},clip:!0,dblClickSpeed:350,drawTime:"afterDatasetsDraw",label:{drawTime:null}},descriptors:{_indexable:!1,_scriptable:t=>!l.includes(t),annotations:{_allKeys:!1,_fallback:(t,e)=>`elements.${It[Ht(e.type)].id}`}},additionalOptionScopes:[""]};const Vt={update:Object.assign};function Ht(t="line"){return It[t]?t:(console.warn(`Unknown annotation type: '${t}', defaulting to 'line'`),"line")}function Nt(t,{elements:e,initProperties:o},n,i){const r=t.elements||(t.elements=[]);r.length=e.length;for(let t=0;t{if(!("drawLabel"in t))return;const o=t.options.label;o&&o.enabled&&o.content&&(o.drawTime||t.options.drawTime)===e&&t.drawLabel(n,i)}))}function Ft(t,e,o){for(const n of e)n.options.drawTime===o&&n.draw(t)}return t.Chart.register(Xt),Xt})); diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 0334a4c2a..0bd571bf3 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -1,19 +1,64 @@ +const docsVersion = "VERSION"; +const base = process.env.NODE_ENV === "development" ? '/chartjs-plugin-annotation/master/' : `/chartjs-plugin-annotation/${docsVersion}/`; + module.exports = { dest: 'dist/docs', title: 'chartjs-plugin-annotation', description: 'Annotations for Chart.js', theme: 'chartjs', - base: '/chartjs-plugin-annotation/', + base, head: [ ['link', {rel: 'icon', href: '/favicon.png'}], ], plugins: [ + ['flexsearch'], ['redirect', { redirectors: [ // Default sample page when accessing /samples. - {base: '/samples', alternative: ['types/line']}, + {base: '/samples', alternative: ['intro']}, ], }], + ['@simonbrunel/vuepress-plugin-versions', { + filters: { + suffix: (tag) => tag ? ` (${tag})` : '', + title: (v, vars) => window.location.href.includes('master') ? 'Development (master)' : v + (vars.tag ? ` (${tag})` : ''), + }, + menu: { + text: '{{version|title}}', + items: [ + { + text: 'Documentation', + items: [ + { + text: 'Development (master)', + link: '/chartjs-plugin-annotation/master/', + target: '_self', + }, + { + type: 'versions', + text: '{{version}}{{tag|suffix}}', + link: '/chartjs-plugin-annotation/{{version}}/', + exclude: /^[0]\.[0-4]\./, + group: 'minor', + target: '_self', + } + ] + }, + { + text: 'Release notes (5 latest)', + items: [ + { + type: 'versions', + limit: 5, + target: '_blank', + group: 'patch', + link: 'https://github.com/chartjs/chartjs-plugin-annotation/releases/tag/v{{version}}' + } + ] + } + ] + }, + }], ], themeConfig: { repo: 'chartjs/chartjs-plugin-annotation', @@ -40,33 +85,80 @@ module.exports = { 'integration', 'usage', 'options', - 'interaction', + 'configuration', { title: 'Annotations', collapsable: false, children: [ 'types/box', 'types/ellipse', + 'types/label', 'types/line', - 'types/point' + 'types/point', + 'types/polygon' ] } ], '/samples/': [ 'intro', { - title: 'Types', - collapsable: false, + title: 'Box annotations', children: [ - 'types/box', - 'types/ellipse', - 'types/line', - 'types/point' - ], + 'box/basic', + 'box/quarters', + 'box/disclosure', + ] + }, + { + title: 'Ellipse annotations', + children: [ + 'ellipse/basic', + 'ellipse/rotation', + ] + }, + { + title: 'Label annotations', + children: [ + 'label/basic', + 'label/point', + 'label/callout', + 'label/lowerUpper', + ] + }, + { + title: 'Line annotations', + children: [ + 'line/basic', + 'line/lowerUpper', + 'line/limited', + 'line/average', + 'line/standardDeviation', + 'line/visibility', + 'line/labelVisibility', + 'line/datasetBars', + 'line/animation', + ] + }, + { + title: 'Point annotations', + children: [ + 'point/basic', + 'point/combined', + 'point/outsideChartArea', + 'point/shadow', + ] + }, + { + title: 'Polygon annotations', + children: [ + 'polygon/basic', + 'polygon/stop', + 'polygon/outsideChartArea', + 'polygon/shadow', + ] }, { title: 'Charts', - collapsable: false, children: [ 'charts/bar', 'charts/line', diff --git a/docs/guide/configuration.md b/docs/guide/configuration.md new file mode 100644 index 000000000..c9ac4ae1c --- /dev/null +++ b/docs/guide/configuration.md @@ -0,0 +1,69 @@ +--- +title: Configuration +--- + +## Top level options + +The following options are available at the top level. They apply to all annotations unless they are overwritten on a per-annotation basis. + +| Name | Type | [Scriptable](options#scriptable-options) | Default | Notes +| ---- | ---- | :----: | ---- | ---- +| [`animations`](#animations) | `object` | No | [see here](#default-animations) | To configure which element properties are animated and how. +| `clip` | `boolean` | No | `true` | Are the annotations clipped to the chartArea. +| `dblClickSpeed` | `number` | Yes | `350` | Time to detect a double click in ms. +| `drawTime` | `string` | Yes | `'afterDatasetsDraw'` | See [drawTime](options#draw-time). + +:::warning + +Setting `clip` to `false`, you can enable the possibility to draw part of the annotation outside of the chart area. + +Nevertheless events are only catched over the chartArea. + +::: + +## Animations + +Animations options configures which element properties are animated and how, with the same configuration of [chart.js](https://www.chartjs.org/docs/latest/configuration/animations.html#animations-2). + +```javascript +const options = { + plugins: { + annotation: { + animations: { + numbers: { + properties: ['x', 'y', 'x2', 'y2', 'width', 'height', 'radius'], + type: 'number' + }, + }, + annotations: { + box1: { + type: 'box', + xMin: 1, + xMax: 2, + yMin: 50, + yMax: 70, + backgroundColor: 'rgba(255, 99, 132, 0.5)' + } + } + } + } +}; +``` + +### Default animations + +| Name | Option | Value +| ---- | ---- | ---- +| `numbers` | `properties` | `['x', 'y', 'x2', 'y2', 'width', 'height', 'pointX', 'pointY', 'labelX', 'labelY', 'labelWidth', 'labelHeight', 'radius']` +| `numbers` | `type` | `number` + +## Events + +The following options are available for all annotation types. These options can be specified per annotation, or at the top level which apply to all annotations. + +| Name | Type | [Scriptable](options#scriptable-options) | Notes +| ---- | ---- | :----: | ---- +| `click` | `(context, event) => void` | No | Called when a single click occurs on the annotation. +| `dblClick` | `(context, event) => void` | No | Called when a double click occurs on the annotation. +| `enter` | `(context, event) => void` | No | Called when the mouse enters the annotation. +| `leave` | `(context, event) => void` | No | Called when the mouse leaves the annotation. diff --git a/docs/guide/index.md b/docs/guide/index.md index a8835bae7..e660ba4fe 100644 --- a/docs/guide/index.md +++ b/docs/guide/index.md @@ -8,7 +8,7 @@ This plugin needs to be registered. It does not function as inline plugin. An annotation plugin for Chart.js >= 3.0.0 -This plugin draws lines, boxes, points and ellipses on the chart area. Annotations work with line, bar, scatter and bubble charts that use linear, logarithmic, time, or category scales. Annotations will not work on any chart that does not have exactly two axes, including pie, radar, and polar area charts. +This plugin draws lines, boxes, labels, points, polygons and ellipses on the chart area. Annotations work with line, bar, scatter and bubble charts that use linear, logarithmic, time, or category scales. Annotations will not work on any chart that does not have exactly two axes, including pie, radar, and polar area charts. ![Banner](./banner.png) diff --git a/docs/guide/interaction.md b/docs/guide/interaction.md deleted file mode 100644 index e07b04023..000000000 --- a/docs/guide/interaction.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Interactions ---- - -## Configuration - -The following options are available at the top level. They apply to all annotations unless they are overwritten on a per-annotation basis. - -| Name | Type | [Scriptable](options#scriptable-options) | Default | Notes -| ---- | ---- | :----: | ---- | ---- -| `drawTime` | `string` | Yes | `'afterDatasetsDraw'` | See [drawTime](options#draw-time) -| `dblClickSpeed` | `number` | Yes | `350` | Time to detect a double click in ms. - -The following options are available for all annotation types. These options can be specified per annotation, or at the top level which apply to all annotations. - -| Name | Type | [Scriptable](options#scriptable-options) | Notes -| ---- | ---- | :----: | ---- -| `enter` | `(context, event) => void` | No | Called when the mouse enters the annotation. -| `leave` | `(context, event) => void` | No | Called when the mouse leaves the annotation. -| `click` | `(context, event) => void` | No | Called when a single click occurs on the annotation. -| `dblClick` | `(context, event) => void` | No | Called when a double click occurs on the annotation. diff --git a/docs/guide/options.md b/docs/guide/options.md index 39bb75123..3b97291df 100644 --- a/docs/guide/options.md +++ b/docs/guide/options.md @@ -8,6 +8,14 @@ Any color supported by [chart.js](https://www.chartjs.org/docs/master/general/co Fonts use the same format as [chart.js](https://www.chartjs.org/docs/master/general/fonts). +## Padding + +Paddings use the same format as [chart.js](https://www.chartjs.org/docs/master/general/padding.html). + +## Point Style + +Point styles use the same format as [chart.js](https://www.chartjs.org/docs/master/configuration/elements.html#point-styles). + ## Scriptable Options As with most options in chart.js, the annotation plugin options are scriptable. This means that a function can be passed which returns the value as needed. In the example below, the annotation is hidden when the screen is less than 1000px wide. diff --git a/docs/guide/types/box.md b/docs/guide/types/box.md index 624b7962a..de9981cf8 100644 --- a/docs/guide/types/box.md +++ b/docs/guide/types/box.md @@ -51,49 +51,96 @@ The following options are available for box annotations. | Name | Type | [Scriptable](../options#scriptable-options) | Default | ---- | ---- | :----: | ---- -| [`display`](#general) | `boolean` | Yes | `true` | [`adjustScaleRange`](#general) | `boolean` | Yes | `true` +| [`backgroundColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` +| [`backgroundShadowColor`](#styling) | [`Color`](../options#color) | Yes | `'transparent'` +| [`borderCapStyle`](#styling) | `string` | Yes | `'butt'` +| [`borderColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` +| [`borderDash`](#styling) | `number[]` | Yes | `[]` +| [`borderDashOffset`](#styling) | `number` | Yes | `0` +| [`borderJoinStyle`](#styling) | `string` | Yes | `'miter'` +| [`borderRadius`](#styling) | `number` \| `object` | Yes | `0` +| [`borderShadowColor`](#styling) | [`Color`](../options#color) | Yes | `'transparent'` +| [`borderWidth`](#styling) | `number`| Yes | `1` +| [`display`](#general) | `boolean` | Yes | `true` | [`drawTime`](#general) | `string` | Yes | `'afterDatasetsDraw'` -| [`xScaleID`](#general) | `string` | Yes | `'x'` -| [`yScaleID`](#general) | `string` | Yes | `'y'` -| [`xMin`](#general) | `number` \| `string` | Yes | `undefined` +| [`label`](#label) | `object` | Yes | +| [`shadowBlur`](#styling) | `number` | Yes | `0` +| [`shadowOffsetX`](#styling) | `number` | Yes | `0` +| [`shadowOffsetY`](#styling) | `number` | Yes | `0` | [`xMax`](#general) | `number` \| `string` | Yes | `undefined` +| [`xMin`](#general) | `number` \| `string` | Yes | `undefined` +| [`xScaleID`](#general) | `string` | Yes | `'x'` | [`yMin`](#general) | `number` \| `string` | Yes | `undefined` | [`yMax`](#general) | `number` \| `string` | Yes | `undefined` -| [`borderColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` -| [`borderWidth`](#styling) | `number`| Yes | `1` -| [`borderDash`](#styling) | `number[]`| Yes | `[]` -| [`borderDashOffset`](#styling) | `number`| Yes | `0` -| [`backgroundColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` -| [`borderRadius`](#styling) | `number` \| `object` | Yes | `0` +| [`yScaleID`](#general) | `string` | Yes | `'y'` ### General If one of the axes does not match an axis in the chart, the box will take the entire chart dimension. The 4 coordinates, xMin, xMax, yMin, yMax are optional. If not specified, the box is expanded out to the edges in the respective direction. -| Name | Description | -| ---- | ---- | -| `display` | Whether or not this annotation is visible -| `adjustScaleRange` | Should the scale range be adjusted if this annotation is out of range -| `drawTime` | See [drawTime](../options#draw-time) -| `xScaleID` | ID of the X scale to bind onto, default is 'x'. -| `yScaleID` | ID of the Y scale to bind onto, default is 'y'. -| `xMin` | Left edge of the box in units along the x axis. +| Name | Description +| ---- | ---- +| `adjustScaleRange` | Should the scale range be adjusted if this annotation is out of range. +| `display` | Whether or not this annotation is visible. +| `drawTime` | See [drawTime](../options#draw-time). | `xMax` | Right edge of the box in units along the x axis. -| `yMin` | Top edge of the box in units along the y axis. +| `xMin` | Left edge of the box in units along the x axis. +| `xScaleID` | ID of the X scale to bind onto, default is 'x'. | `yMax` | Bottom edge of the box in units along the y axis. +| `yMin` | Top edge of the box in units along the y axis. +| `yScaleID` | ID of the Y scale to bind onto, default is 'y'. ### Styling -| Name | Description | -| ---- | ---- | -| `borderColor` | Stroke color -| `borderWidth` | Stroke width +| Name | Description +| ---- | ---- +| `backgroundColor` | Fill color. +| `backgroundShadowColor` | The color of shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderCapStyle` | Cap style of the border line. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineCap). +| `borderColor` | Stroke color. | `borderDash` | Length and spacing of dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash). -| `borderDashOffset` | Offset for line dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset). -| `backgroundColor` | Fill color -| [`borderRadius`](#borderRadius) | Radius of box rectangle (in pixels) +| `borderDashOffset` | Offset for border line dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset). +| `borderJoinStyle` | Border line joint style. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin). +| [`borderRadius`](#borderradius) | Radius of box rectangle (in pixels). +| `borderShadowColor` | The color of the border shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderWidth` | Border line width (in pixels). +| `shadowBlur` | The amount of blur applied to shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowBlur). +| `shadowOffsetX` | The distance that shadow will be offset horizontally. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetX). +| `shadowOffsetY` | The distance that shadow will be offset vertically. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetY). #### borderRadius If this value is a number, it is applied to all corners of the rectangle (topLeft, topRight, bottomLeft, bottomRight). If this value is an object, the `topLeft` property defines the top-left corners border radius. Similarly, the `topRight`, `bottomLeft`, and `bottomRight` properties can also be specified. Omitted corners have radius of 0. + +## Label + +Namespace: `options.annotations[annotationID].label`, it defines options for the box annotation label. + +All of these options can be [Scriptable](../options#scriptable-options) + +| Name | Type | Default | Notes +| ---- | ---- | :----: | ---- +| `color` | [`Color`](../options#color) | `'black'` | Text color. +| `content` | `string`\|`string[]`\|[`Image`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/Image)\|[`HTMLCanvasElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement) | `null` | The content to show in the label. +| `drawTime` | `string` | `options.drawTime` | See [drawTime](../options#draw-time). Defaults to the box annotation draw time if unset +| `enabled` | `boolean` | `false` | Whether or not the label is shown. +| `font` | [`Font`](../options#font) | `{ weight: 'bold' }` | Label font +| `height` | `number`\|`string` | `undefined` | Overrides the height of the image or canvas element. Could be set in pixel by a number, or in percentage of current height of image or canvas element by a string. If undefined, uses the height of the image or canvas element. It is used only when the content is an image or canvas element. +| `padding` | [`Padding`](../options#padding) | `6` | The padding to add around the text label. +| [`position`](#position) | `string`\|`{x: string, y: string}` | `'center'` | Anchor position of label in the box. +| `textAlign` | `string` | `'start'` | Text alignment of label content when there's more than one line. Possible options are: `'left'`, `'start'`, `'center'`, `'end'`, `'right'`. +| `width` | `number`\|`string` | `undefined` | Overrides the width of the image or canvas element. Could be set in pixel by a number, or in percentage of current width of image or canvas element by a string. If undefined, uses the width of the image or canvas element. It is used only when the content is an image or canvas element. +| `xAdjust` | `number` | `0` | Adjustment along x-axis (left-right) of label relative to computed position. Negative values move the label left, positive right. +| `yAdjust` | `number` | `0` | Adjustment along y-axis (top-bottom) of label relative to computed position. Negative values move the label up, positive down. + +### Position + +A position can be set in 2 different values types: + +1. `'start'`, `'center'`, `'end'` which are defining where the label will be located +2. a `string`, in percentage format `'number%'`, is representing the percentage on the size where the label will be located + +If this value is a string (possible options are `'start'`, `'center'`, `'end'` or a string in percentage format), it is applied to vertical and horizontal position in the box. + +If this value is an object, the `x` property defines the horizontal alignment in the box. Similarly, the `y` property defines the vertical alignment in the box. Possible options for both properties are `'start'`, `'center'`, `'end'`, a string in percentage format. Omitted property have value of the default, `'center'`. diff --git a/docs/guide/types/ellipse.md b/docs/guide/types/ellipse.md index 29078ac99..737c86010 100644 --- a/docs/guide/types/ellipse.md +++ b/docs/guide/types/ellipse.md @@ -9,7 +9,7 @@ const options = { autocolors: false, annotation: { annotations: { - box1: { + ellipse1: { type: 'ellipse', xMin: 1, xMax: 2, @@ -51,45 +51,55 @@ The following options are available for ellipse annotations. | Name | Type | [Scriptable](../options#scriptable-options) | Default | ---- | ---- | :----: | ---- -| [`display`](#general) | `boolean` | Yes | `true` | [`adjustScaleRange`](#general) | `boolean` | Yes | `true` +| [`backgroundColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` +| [`backgroundShadowColor`](#styling) | [`Color`](../options#color) | Yes | `'transparent'` +| [`borderColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` +| [`borderDash`](#styling) | `number[]`| Yes | `[]` +| [`borderDashOffset`](#styling) | `number`| Yes | `0` +| [`borderShadowColor`](#styling) | [`Color`](../options#color) | Yes | `'transparent'` +| [`borderWidth`](#styling) | `number`| Yes | `1` +| [`display`](#general) | `boolean` | Yes | `true` | [`drawTime`](#general) | `string` | Yes | `'afterDatasetsDraw'` | [`rotation`](#general) | `number`| Yes | `0` -| [`xScaleID`](#general) | `string` | Yes | `'x'` -| [`yScaleID`](#general) | `string` | Yes | `'y'` -| [`xMin`](#general) | `number` \| `string` | Yes | `undefined` +| [`shadowBlur`](#styling) | `number` | Yes | `0` +| [`shadowOffsetX`](#styling) | `number` | Yes | `0` +| [`shadowOffsetY`](#styling) | `number` | Yes | `0` | [`xMax`](#general) | `number` \| `string` | Yes | `undefined` -| [`yMin`](#general) | `number` \| `string` | Yes | `undefined` +| [`xMin`](#general) | `number` \| `string` | Yes | `undefined` +| [`xScaleID`](#general) | `string` | Yes | `'x'` | [`yMax`](#general) | `number` \| `string` | Yes | `undefined` -| [`borderColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` -| [`borderWidth`](#styling) | `number`| Yes | `1` -| [`borderDash`](#styling) | `number[]`| Yes | `[]` -| [`borderDashOffset`](#styling) | `number`| Yes | `0` -| [`backgroundColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` +| [`yMin`](#general) | `number` \| `string` | Yes | `undefined` +| [`yScaleID`](#general) | `string` | Yes | `'y'` ### General If one of the axes does not match an axis in the chart, the ellipse will take the entire chart dimension. The 4 coordinates, xMin, xMax, yMin, yMax are optional. If not specified, the ellipse is expanded out to the edges in the respective direction. -| Name | Description | -| ---- | ---- | -| `display` | Whether or not this annotation is visible -| `adjustScaleRange` | Should the scale range be adjusted if this annotation is out of range -| `drawTime` | See [drawTime](../options#draw-time) +| Name | Description +| ---- | ---- +| `adjustScaleRange` | Should the scale range be adjusted if this annotation is out of range. +| `display` | Whether or not this annotation is visible. +| `drawTime` | See [drawTime](../options#draw-time). | `rotation` | Rotatation of the ellipse in degrees, default is 0. -| `xScaleID` | ID of the X scale to bind onto, default is 'x'. -| `yScaleID` | ID of the Y scale to bind onto, default is 'y'. -| `xMin` | Left edge of the ellipse in units along the x axis. | `xMax` | Right edge of the ellipse in units along the x axis. -| `yMin` | Top edge of the ellipse in units along the y axis. +| `xMin` | Left edge of the ellipse in units along the x axis. +| `xScaleID` | ID of the X scale to bind onto, default is 'x'. | `yMax` | Bottom edge of the ellipse in units along the y axis. +| `yMin` | Top edge of the ellipse in units along the y axis. +| `yScaleID` | ID of the Y scale to bind onto, default is 'y'. ### Styling -| Name | Description | -| ---- | ---- | -| `borderColor` | Stroke color -| `borderWidth` | Stroke width +| Name | Description +| ---- | ---- +| `backgroundColor` | Fill color. +| `backgroundShadowColor` | The color of shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderColor` | Stroke color. | `borderDash` | Length and spacing of dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash). | `borderDashOffset` | Offset for line dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset). -| `backgroundColor` | Fill color +| `borderShadowColor` | The color of the border shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderWidth` | Stroke width. +| `shadowBlur` | The amount of blur applied to shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowBlur). +| `shadowOffsetX` | The distance that shadow will be offset horizontally. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetX). +| `shadowOffsetY` | The distance that shadow will be offset vertically. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetY). diff --git a/docs/guide/types/label.md b/docs/guide/types/label.md new file mode 100644 index 000000000..ee354140c --- /dev/null +++ b/docs/guide/types/label.md @@ -0,0 +1,225 @@ +# Label Annotations + +Label annotations are used to add contents on the chart area. This can be useful for describing values that are of interest. + +```js chart-editor +/* */ +const options = { + plugins: { + autocolors: false, + annotation: { + annotations: { + label1: { + type: 'label', + xValue: 2.5, + yValue: 60, + backgroundColor: 'rgba(245,245,245)', + content: ['This is my text', 'This is my text, second line'], + font: { + size: 18 + } + } + } + } + } +}; +/* */ + +/* */ +const config = { + type: 'line', + data: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + datasets: [{ + label: 'My First Dataset', + data: [65, 59, 80, 81, 56, 55, 40], + fill: false, + borderColor: 'rgb(75, 192, 192)', + tension: 0.1 + }] + }, + options +}; +/* */ + +module.exports = { + config +}; +``` + +## Configuration + +The following options are available for label annotations. + +| Name | Type | [Scriptable](../options#scriptable-options) | Default +| ---- | ---- | :----: | ---- +| [`adjustScaleRange`](#general) | `boolean` | Yes | `true` +| [`backgroundColor`](#styling) | [`Color`](../options#color) | Yes | `transparent` +| [`backgroundShadowColor`](#styling) | [`Color`](../options#color) | Yes | `'transparent'` +| [`borderCapStyle`](#styling) | `string` | Yes | `'butt'` +| [`borderColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` +| [`borderDash`](#styling) | `number[]` | Yes | `[]` +| [`borderDashOffset`](#styling) | `number` | Yes | `0` +| [`borderJoinStyle`](#styling) | `string` | Yes | `'miter'` +| [`borderRadius`](#borderradius) | `number` \| `object` | Yes | `0` +| [`borderShadowColor`](#styling) | [`Color`](../options#color) | Yes | `'transparent'` +| [`borderWidth`](#styling) | `number`| Yes | `0` +| [`callout`](#callout) | `object` | Yes | +| [`color`](#styling) | [`Color`](../options#color) | Yes | `'black'` +| [`content`](#general) | `string`\|`string[]`\|[`Image`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/Image)\|[`HTMLCanvasElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement) | Yes | `null` +| [`display`](#general) | `boolean` | Yes | `true` +| [`drawTime`](#general) | `string` | Yes | `'afterDatasetsDraw'` +| [`font`](#styling) | [`Font`](../options#font) | Yes | `{}` +| [`height`](#general) | `number`\|`string` | Yes | `undefined` +| [`padding`](#general) | [`Padding`](../options#padding) | Yes | `6` +| [`position`](#position) | `string`\|`{x: string, y: string}` | Yes | `'center'` +| [`shadowBlur`](#styling) | `number` | Yes | `0` +| [`shadowOffsetX`](#styling) | `number` | Yes | `0` +| [`shadowOffsetY`](#styling) | `number` | Yes | `0` +| [`textAlign`](#general) | `string` | Yes | `'center'` +| [`width`](#general) | `number`\|`string` | Yes | `undefined` +| [`xAdjust`](#general) | `number` | Yes | `0` +| [`xMax`](#general) | `number` \| `string` | Yes | `undefined` +| [`xMin`](#general) | `number` \| `string` | Yes | `undefined` +| [`xScaleID`](#general) | `string` | Yes | `'x'` +| [`xValue`](#general) | `number` \| `string` | Yes | `undefined` +| [`yAdjust`](#general) | `number` | Yes | `0` +| [`yMax`](#general) | `number` \| `string` | Yes | `undefined` +| [`yMin`](#general) | `number` \| `string` | Yes | `undefined` +| [`yScaleID`](#general) | `string` | Yes | `'y'` +| [`yValue`](#general) | `number` \| `string` | Yes | `undefined` + +### General + +If one of the axes does not match an axis in the chart, the content will be rendered in the center of the chart. The 2 coordinates, xValue, yValue are optional. If not specified, the content will be rendered in the center of the chart. + +The 4 coordinates, xMin, xMax, yMin, yMax are optional. If not specified, the box is expanded out to the edges in the respective direction and the box size is used to calculated the center of the point. To enable to use the box positioning, the `radius` must be set to `0` or `NaN`. + +| Name | Description +| ---- | ---- +| `adjustScaleRange` | Should the scale range be adjusted if this annotation is out of range. +| `content` | The content to show in the text annotation. +| `display` | Whether or not this annotation is visible. +| `drawTime` | See [drawTime](../options#draw-time). +| `height` | Overrides the height of the image or canvas element. Could be set in pixel by a number, or in percentage of current height of image or canvas element by a string. If undefined, uses the height of the image or canvas element. It is used only when the content is an image or canvas element. +| `padding` | The padding to add around the text label. +| `textAlign` | Text alignment of label content when there's more than one line. Possible options are: `'left'`, `'start'`, `'center'`, `'end'`, `'right'`. +| `width` | Overrides the width of the image or canvas element. Could be set in pixel by a number, or in percentage of current width of image or canvas element by a string. If undefined, uses the width of the image or canvas element. It is used only when the content is an image or canvas element. +| `xAdjust` | Adjustment along x-axis (left-right) of label relative to computed position. Negative values move the label left, positive right. +| `xMax` | Right edge of the box in units along the x axis. +| `xMin` | Left edge of the box in units along the x axis. +| `xScaleID` | ID of the X scale to bind onto, default is 'x'. +| `xValue` | X coordinate of the point in units along the x axis. +| `yAdjust` | Adjustment along y-axis (top-bottom) of label relative to computed position. Negative values move the label up, positive down. +| `yMax` | Bottom edge of the box in units along the y axis. +| `yMin` | Top edge of the box in units along the y axis. +| `yScaleID` | ID of the Y scale to bind onto, default is 'y'. +| `yValue` | Y coordinate of the point in units along the y axis. + +### Styling + +| Name | Description +| ---- | ---- +| `backgroundColor` | Fill color. +| `backgroundShadowColor` | The color of shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderCapStyle` | Cap style of the border line. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineCap). +| `borderColor` | Stroke color. +| `borderDash` | Length and spacing of dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash). +| `borderDashOffset` | Offset for border line dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset). +| `borderJoinStyle` | Border line joint style. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin). +| `borderShadowColor` | The color of the border shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderWidth` | Stroke width (in pixels). +| `color` | Text color. +| `font` | Text font. +| `shadowBlur` | The amount of blur applied to shadow of the box where the label is located. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowBlur). +| `shadowOffsetX` | The distance that shadow, of the box where the label is located, will be offset horizontally. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetX). +| `shadowOffsetY` | The distance that shadow, of the box where the label is located, will be offset vertically. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetY). + +### Position + +A position can be set in 2 different values types: + +1. `'start'`, `'center'`, `'end'` which are defining where the label will be located +2. a `string`, in percentage format `'number%'`, is representing the percentage on the size where the label will be located + +If this value is a string (possible options are `'start'`, `'center'`, `'end'` or a string in percentage format), it is applied to vertical and horizontal position in the box. + +If this value is an object, the `x` property defines the horizontal alignment in the label, with respect to the selected point. Similarly, the `y` property defines the vertical alignment in the label, with respect to the selected point. Possible options for both properties are `'start'`, `'center'`, `'end'`, a string in percentage format. Omitted property have value of the default, `'center'`. + +#### borderRadius + +If this value is a number, it is applied to all corners of the rectangle (topLeft, topRight, bottomLeft, bottomRight). If this value is an object, the `topLeft` property defines the top-left corners border radius. Similarly, the `topRight`, `bottomLeft`, and `bottomRight` properties can also be specified. Omitted corners have radius of 0. + +## Callout + +A callout connects the label by a line to the selected point. + +Namespace: `options.annotations[annotationID].callout`, it defines options for the callout on the annotation label. + +```js chart-editor +/* */ +const options = { + plugins: { + autocolors: false, + annotation: { + annotations: { + label1: { + type: 'label', + xValue: 2.5, + yValue: 60, + xAdjust: 290, + yAdjust: -100, + backgroundColor: 'rgba(245,245,245)', + content: ['In this point of time,', 'something happened'], + textAlign: 'start', + font: { + size: 18 + }, + callout: { + enabled: true, + side: 10 + } + } + } + } + } +}; +/* */ + +/* */ +const config = { + type: 'line', + data: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + datasets: [{ + label: 'My First Dataset', + data: [65, 59, 80, 81, 56, 55, 40], + fill: false, + borderColor: 'rgb(75, 192, 192)', + tension: 0.1 + }] + }, + options +}; +/* */ + +module.exports = { + config +}; +``` + +All of these options can be [Scriptable](../options#scriptable-options). + +| Name | Type | Default | Notes +| ---- | ---- | :----: | ---- +| `borderCapStyle` | `string` | `'butt'` | Cap style of the border line of callout. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineCap). +| `borderColor` | [`Color`](../options#color) | `undefined` | Stroke color of the pointer of the callout. +| `borderDash` | `number[]` | `[]` | Length and spacing of dashes of callout. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash). +| `borderDashOffset` | `number` | `0` | Offset for line dashes of callout. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset). +| `borderJoinStyle` | `string` | `'miter'` | Border line joint style of the callout. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin). +| `borderWidth` | `number` | `1` | Stroke width of the pointer of the callout. +| `enabled` | `boolean` | `false` | If true, the callout is drawn. +| `margin` | `number` | `5` | Amount of pixels between the label and the callout separator. +| `position` | `string` | `'auto'` | The position of callout, with respect to the label. Could be `left`, `top`, `right`, `bottom` or `auto`. +| `side` | `number` | `5` | Width of the starter line of callout pointer. +| `start` | `number`\|`string` | `'50%'` | The percentage of the separator dimension to use as starting point for callout pointer. Could be set in pixel by a number, or in percentage of the separator dimension by a string. diff --git a/docs/guide/types/line.md b/docs/guide/types/line.md index e6a96ca34..11a1d0b53 100644 --- a/docs/guide/types/line.md +++ b/docs/guide/types/line.md @@ -49,34 +49,46 @@ module.exports = { The following options are available for line annotations. All of these options can be . | Name | Type | [Scriptable](../options#scriptable-options) | Default -| ---- | ---- | ---- | :----: | ---- -| [`display`](#general) | `boolean` | Yes | `true` +| ---- | ---- | :----: | ---- | [`adjustScaleRange`](#general) | `boolean` | Yes | `true` +| [`arrowHeads`](#arrow-heads) | `{start: object, end:object}` | Yes | +| [`borderColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` +| [`borderDash`](#styling) | `number[]` | Yes | `[]` +| [`borderDashOffset`](#styling) | `number` | Yes | `0` +| [`borderShadowColor`](#styling) | [`Color`](../options#color) | Yes | `'transparent'` +| [`borderWidth`](#styling) | `number` | Yes | `2` +| [`display`](#general) | `boolean` | Yes | `true` | [`drawTime`](#general) | `string` | Yes | `'afterDatasetsDraw'` +| [`endValue`](#positioning) | `number` | Yes | `undefined` +| [`label`](#label) | `object` | Yes | | [`scaleID`](#positioning) | `string` | Yes | `undefined` +| [`shadowBlur`](#styling) | `number` | Yes | `0` +| [`shadowOffsetX`](#styling) | `number` | Yes | `0` +| [`shadowOffsetY`](#styling) | `number` | Yes | `0` | [`value`](#positioning) | `number` | Yes | `undefined` -| [`endValue`](#positioning) | `number` | Yes | `undefined` -| [`xScaleID`](#positioning) | `string` | Yes | `'x'` -| [`yScaleID`](#positioning) | `string` | Yes | `'y'` -| [`xMin`](#general) | `number` \| `string` | Yes | `undefined` | [`xMax`](#general) | `number` \| `string` | Yes | `undefined` -| [`yMin`](#general) | `number` \| `string` | Yes | `undefined` +| [`xMin`](#general) | `number` \| `string` | Yes | `undefined` +| [`xScaleID`](#positioning) | `string` | Yes | `'x'` | [`yMax`](#general) | `number` \| `string` | Yes | `undefined` -| [`borderColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` -| [`borderWidth`](#styling) | `number` | Yes | `1` -| [`borderDash`](#styling) | `number[]` | Yes | `[]` -| [`borderDashOffset`](#styling) | `number` | Yes | `0` -| [`label`](#label) | `object` | Yes | +| [`yMin`](#general) | `number` \| `string` | Yes | `undefined` +| [`yScaleID`](#positioning) | `string` | Yes | `'y'` ### General -If one of the axes does not match an axis in the chart, the box will take the entire chart dimension. The 4 coordinates, xMin, xMax, yMin, yMax are optional. If not specified, the box is expanded out to the edges in the respective direction. +If one of the axes does not match an axis in the chart and the line behaviors are the following, depending how the line should be drawn: + +1. if `scaleId` is not resolved, the line will take the entire chart dimension, starting top-left vertex to bottom-right vertex of the chart +1. if `xScaleId` is not resolved, the line will take the entire chart width +1. if `yScaleId` is not resolved, the line will take the entire chart height -| Name | Description | -| ---- | ---- | -| `display` | Whether or not this annotation is visible -| `adjustScaleRange` | Should the scale range be adjusted if this annotation is out of range -| `drawTime` | See [drawTime](../options#draw-time) +The 2 coordinates, start, end, are optional. If not specified, the line is expanded out to the edges in the respective direction. +The 4 coordinates, xMin, xMax, yMin, yMax are optional. If not specified, the line is expanded out to the edges in the respective direction. + +| Name | Description +| ---- | ---- +| `adjustScaleRange` | Should the scale range be adjusted if this annotation is out of range. +| `display` | Whether or not this annotation is visible. +| `drawTime` | See [drawTime](../options#draw-time). ### Positioning @@ -84,54 +96,104 @@ The line can be positioned in two different ways. If `scaleID` is set, then `val If `scaleID` is unset, then `xScaleID` and `yScaleID` are used to draw a line from `(xMin, yMin)` to `(xMax, yMax)`. -| Name | Description | -| ---- | ---- | +| Name | Description +| ---- | ---- +| `endValue` | End two of the line when a single scale is specified. | `scaleID` | ID of the scale in single scale mode. If unset, `xScaleID` and `yScaleID` are used. | `value` | End one of the line when a single scale is specified. -| `endValue` | End two of the line when a single scale is specified. -| `xScaleID` | ID of the X scale to bind onto, default is 'x'. -| `yScaleID` | ID of the Y scale to bind onto, default is 'y'. -| `xMin` | X coordinate of end one of the line in units along the x axis. | `xMax` | X coordinate of end two of the line in units along the x axis. -| `yMin` | Y coordinate of end one of the line in units along the y axis. +| `xMin` | X coordinate of end one of the line in units along the x axis. +| `xScaleID` | ID of the X scale to bind onto, default is 'x'. | `yMax` | Y coordinate of end two of the line in units along the y axis. +| `yMin` | Y coordinate of end one of the line in units along the y axis. +| `yScaleID` | ID of the Y scale to bind onto, default is 'y'. ### Styling -| Name | Description | -| ---- | ---- | -| `borderColor` | Stroke color -| `borderWidth` | Stroke width +| Name | Description +| ---- | ---- +| `borderColor` | Stroke color. | `borderDash` | Length and spacing of dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash). | `borderDashOffset` | Offset for line dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset). -| `backgroundColor` | Fill color -| `borderRadius` | Radius of box rectangle +| `borderShadowColor` | The color of shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderWidth` | Stroke width. +| `shadowBlur` | The amount of blur applied to shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowBlur). +| `shadowOffsetX` | The distance that shadow will be offset horizontally. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetX). +| `shadowOffsetY` | The distance that shadow will be offset vertically. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetY). -### Label +## Label Namespace: `options.annotations[annotationID].label`, it defines options for the line annotation label. All of these options can be [Scriptable](../options#scriptable-options) | Name | Type | Default | Notes -| ---- | ---- | :----: | ---- | ---- +| ---- | ---- | :----: | ---- | `backgroundColor` | [`Color`](../options#color) | `'rgba(0,0,0,0.8)'` | Background color of the label container. -| `color` | [`Color`](../options#color) | `'#fff'` | Text color. -| `content` | `string`\|[`Image`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/Image) | `null` | The content to show in the label. +| `backgroundShadowColor` | [`Color`](../options#color) | `'transparent'` | The color of shadow of the box where the label is located. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderCapStyle` | `string` | `'butt'` | Cap style of the border line. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineCap). +| `borderColor` | [`Color`](../options#color) | `black` | The border line color. +| `borderDash` | `number[]` | `[]` | Length and spacing of dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash). +| `borderDashOffset` | `number` | `0` | Offset for border line dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset). +| `borderJoinStyle` | `string` | `'miter'` | Border line joint style. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin). | [`borderRadius`](#borderradius) | `number` \| `object` | `6` | Radius of label box corners in pixels. -| `drawTime` | `string` | `options.drawTime` | See [drawTime](../options#draw-time). Defaults to the line annotation draw time if unset +| `borderShadowColor` | [`Color`](../options#color) | `'transparent'` | The color of border shadow of the box where the label is located. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderWidth` | `number` | `0` | The border line width (in pixels). +| `color` | [`Color`](../options#color) | `'#fff'` | Text color. +| `content` | `string`\|`string[]`\|[`Image`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/Image)\|[`HTMLCanvasElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement) | `null` | The content to show in the label. +| `drawTime` | `string` | `options.drawTime` | See [drawTime](../options#draw-time). Defaults to the line annotation draw time if unset. | `enabled` | `boolean` | `false` | Whether or not the label is shown. -| `font` | [`Font`](../options#font) | `{ style: 'bold' }` | Label font -| `xPadding` | `number` | `6` | Padding of label to add left/right. -| `yPadding` | `number` | `6` | Padding of label to add top/bottom. +| `font` | [`Font`](../options#font) | `{ weight: 'bold' }` | Label font. +| `height` | `number`\|`string` | `undefined` | Overrides the height of the image or canvas element. Could be set in pixel by a number, or in percentage of current height of image or canvas element by a string. If undefined, uses the height of the image or canvas element. It is used only when the content is an image or canvas element. +| `padding` | [`Padding`](../options#padding) | `6` | The padding to add around the text label. +| `position` | `string` | `'center'` | Anchor position of label on line. Possible options are: `'start'`, `'center'`, `'end'`. It can be set by a string in percentage format `'number%'` which are representing the percentage on the width of the line where the label will be located. +| `rotation` | `number`\|`'auto'` | `0` | Rotation of label, in degrees, or 'auto' to use the degrees of the line. +| `shadowBlur` | `number` | `0` | The amount of blur applied to shadow of the box where the label is located. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowBlur). +| `shadowOffsetX` | `number` | `0` | The distance that shadow, of the box where the label is located, will be offset horizontally. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetX). +| `shadowOffsetY` | `number` | `0` | The distance that shadow, of the box where the label is located, will be offset vertically. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetY). +| `textAlign` | `string` | `'center'` | Text alignment of label content when there's more than one line. Possible options are: `'start'`, `'center'`, `'end'`. +| `width` | `number`\|`string` | `undefined` | Overrides the width of the image or canvas element. Could be set in pixel by a number, or in percentage of current width of image or canvas element by a string. If undefined, uses the width of the image or canvas element. It is used only when the content is an image or canvas element. | `xAdjust` | `number` | `0` | Adjustment along x-axis (left-right) of label relative to computed position. Negative values move the label left, positive right. +| `xPadding` | `number` | `6` | Padding of label to add left/right. This is **deprecated**. Use `padding`. | `yAdjust` | `number` | `0` | Adjustment along y-axis (top-bottom) of label relative to computed position. Negative values move the label up, positive down. -| `position` | `string` | `'center'` | Anchor position of label on line. Possible options are: `'start'`, `'center'`, `'end'`. -| `textAlign` | `string` | `'center'` | Text alignment of label content when there's more than one line. Possible options are: `'start'`, `'center'`, `'end'`. -| `width` | `number`\|`string` | `undefined` | Overrides the width of the image. Could be set in pixel by a number, or in percentage of current width of image by a string. If undefined, uses the width of the image. It is used only when the content is an image. -| `height` | `number`\|`string` | `undefined` | Overrides the height of the image. Could be set in pixel by a number, or in percentage of current height of image by a string. If undefined, uses the height of the image. It is used only when the content is an image. -| `rotation` | `number`\|`'auto'` | `0` | Rotation of label, in degrees, or 'auto' to use the degrees of the line +| `yPadding` | `number` | `6` | Padding of label to add top/bottom. This is **deprecated**. Use `padding`. -#### borderRadius +### borderRadius If this value is a number, it is applied to all corners of the rectangle (topLeft, topRight, bottomLeft, bottomRight). If this value is an object, the `topLeft` property defines the top-left corners border radius. Similarly, the `topRight`, `bottomLeft`, and `bottomRight` properties can also be specified. Omitted corners have radius of 0. + +## Arrow heads + +Namespace: `options.annotations[annotationID].arrowHeads`, it defines options for the line annotation arrow heads. + +All of these options can be [Scriptable](../options#scriptable-options) + +| Name | Type | Notes +| ---- | ---- | ---- +| [`end`](#arrow-head-configuration) | `object` | To configure the arrow head at the end of the line. +| [`start`](#arrow-head-configuration) | `object` | To configure the arrow head at the start of the line. + +### Arrow head configuration + +Enabling it, you can add arrow heads at start and/or end of a line. It uses the `borderWidth` of the line options to configure the line width of the arrow head. + +The following options are available for can be specified per (`start` and/or `end`) arrow head, or at the top level (`arrowHeads`) which apply to all arrow heads. + +All of these options can be [Scriptable](../options#scriptable-options) + +| Name | Type | Default | Notes +| ---- | ---- | :----: | ---- +| `backgroundColor` | [`Color`](../options#color) | `lineAnnotation.borderColor` | Background color of the arrow head. +| `backgroundShadowColor` | [`Color`](../options#color) | `'transparent'` | The color of shadow of the arrow head. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderColor` | [`Color`](../options#color) | `lineAnnotation.borderColor` | The border arrow head color. +| `borderDash` | `number[]` | `lineAnnotation.borderDash` | Length and spacing of dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash). +| `borderDashOffset` | `number` | `lineAnnotation.borderDashOffset` | Offset for border arrow head dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset). +| `borderShadowColor` | [`Color`](../options#color) | `lineAnnotation.borderShadowColor` | The color of border shadow of the arrow head. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderWidth` | `number` | `lineAnnotation.borderWidth` | The border line width (in pixels). +| `enabled` | `boolean` | `false` | Whether or not the arrow head is shown. +| `fill` | `boolean` | `false` | Whether or not the arrow head is filled. +| `length` | `number` | `12` | The length of the arrow head in pixels. +| `shadowBlur` | `number` | `lineAnnotation.shadowBlur` | The amount of blur applied to shadow of the arrow head. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowBlur). +| `shadowOffsetX` | `number` | `lineAnnotation.shadowOffsetX` | The distance that shadow, of the arrow head, will be offset horizontally. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetX). +| `shadowOffsetY` | `number` | `lineAnnotation.shadowOffsetY` | The distance that shadow, of the arrow head, will be offset vertically. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetY). +| `width` | `number` | `6` | The width of the arrow head in pixels. diff --git a/docs/guide/types/point.md b/docs/guide/types/point.md index 060cbb07a..4c0c602f6 100644 --- a/docs/guide/types/point.md +++ b/docs/guide/types/point.md @@ -49,41 +49,69 @@ The following options are available for point annotations. | Name | Type | [Scriptable](../options#scriptable-options) | Default | ---- | ---- | :----: | ---- -| [`display`](#general) | `boolean` | Yes | `true` | [`adjustScaleRange`](#general) | `boolean` | Yes | `true` +| [`backgroundColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` +| [`backgroundShadowColor`](#styling) | [`Color`](../options#color) | Yes | `'transparent'` +| [`borderColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` +| [`borderDash`](#styling) | `number[]`| Yes | `[]` +| [`borderDashOffset`](#styling) | `number`| Yes | `0` +| [`borderShadowColor`](#styling) | [`Color`](../options#color) | Yes | `'transparent'` +| [`borderWidth`](#styling) | `number`| Yes | `1` +| [`display`](#general) | `boolean` | Yes | `true` | [`drawTime`](#general) | `string` | Yes | `'afterDatasetsDraw'` +| [`pointStyle`](#styling) | [`PointStyle`](../options#point-style) | Yes | `'circle'` +| [`radius`](#general) | `number` | Yes | `10` +| [`rotation`](#general) | `number` | Yes | `0` +| [`shadowBlur`](#styling) | `number` | Yes | `0` +| [`shadowOffsetX`](#styling) | `number` | Yes | `0` +| [`shadowOffsetY`](#styling) | `number` | Yes | `0` +| [`xAdjust`](#general) | `number` | Yes | `0` +| [`xMax`](#general) | `number` \| `string` | Yes | `undefined` +| [`xMin`](#general) | `number` \| `string` | Yes | `undefined` | [`xScaleID`](#general) | `string` | Yes | `'x'` -| [`yScaleID`](#general) | `string` | Yes | `'y'` | [`xValue`](#general) | `number` \| `string` | Yes | `undefined` +| [`yAdjust`](#general) | `number` | Yes | `0` +| [`yMax`](#general) | `number` \| `string` | Yes | `undefined` +| [`yMin`](#general) | `number` \| `string` | Yes | `undefined` +| [`yScaleID`](#general) | `string` | Yes | `'y'` | [`yValue`](#general) | `number` \| `string` | Yes | `undefined` -| [`radius`](#general) | `number` | Yes | `10` -| [`borderColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` -| [`borderWidth`](#styling) | `number`| Yes | `1` -| [`borderDash`](#styling) | `number[]`| Yes | `[]` -| [`borderDashOffset`](#styling) | `number`| Yes | `0` -| [`backgroundColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` ### General If one of the axes does not match an axis in the chart, the point annotation will take the center of the chart as point. The 2 coordinates, xValue, yValue are optional. If not specified, the point annotation will take the center of the chart as point. -| Name | Description | -| ---- | ---- | -| `display` | Whether or not this annotation is visible -| `adjustScaleRange` | Should the scale range be adjusted if this annotation is out of range -| `drawTime` | See [drawTime](../options#draw-time) +The 4 coordinates, xMin, xMax, yMin, yMax are optional. If not specified, the box is expanded out to the edges in the respective direction and the box size is used to calculated the center of the point. To enable to use the box positioning, the `radius` must be set to `0` or `NaN`. + +| Name | Description +| ---- | ---- +| `adjustScaleRange` | Should the scale range be adjusted if this annotation is out of range. +| `display` | Whether or not this annotation is visible. +| `drawTime` | See [drawTime](../options#draw-time). +| `radius` | Size of the point in pixels. +| `rotation` | Rotation of point, in degrees. +| `xAdjust` | Adjustment along x-axis (left-right) of point relative to computed position. Negative values move the point left, positive right. +| `xMax` | Right edge of the box in units along the x axis. +| `xMin` | Left edge of the box in units along the x axis. | `xScaleID` | ID of the X scale to bind onto, default is 'x'. -| `yScaleID` | ID of the Y scale to bind onto, default is 'y'. | `xValue` | X coordinate of the point in units along the x axis. +| `yAdjust` | Adjustment along y-axis (top-bottom) of point relative to computed position. Negative values move the point up, positive down. +| `yMax` | Bottom edge of the box in units along the y axis. +| `yMin` | Top edge of the box in units along the y axis. +| `yScaleID` | ID of the Y scale to bind onto, default is 'y'. | `yValue` | Y coordinate of the point in units along the y axis. -| `radius` | Size of the point in pixels ### Styling -| Name | Description | -| ---- | ---- | -| `borderColor` | Stroke color -| `borderWidth` | Stroke width +| Name | Description +| ---- | ---- +| `backgroundColor` | Fill color. +| `backgroundShadowColor` | The color of shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderColor` | Stroke color. | `borderDash` | Length and spacing of dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash). | `borderDashOffset` | Offset for line dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset). -| `backgroundColor` | Fill color +| `borderShadowColor` | The color of border shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderWidth` | Stroke width. +| `pointStyle` | Style of the point. +| `shadowBlur` | The amount of blur applied to shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowBlur). +| `shadowOffsetX` | The distance that shadow will be offset horizontally. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetX). +| `shadowOffsetY` | The distance that shadow will be offset vertically. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetY). diff --git a/docs/guide/types/polygon.md b/docs/guide/types/polygon.md new file mode 100644 index 000000000..adabb37c9 --- /dev/null +++ b/docs/guide/types/polygon.md @@ -0,0 +1,179 @@ +# Polygon Annotations + +Polygon annotations are used to mark whatever polygon (for instance triangle, square or pentagon) on the chart area. This can be useful for highlighting values that are of interest. + +```js chart-editor +/* */ +const options = { + plugins: { + autocolors: false, + annotation: { + annotations: { + pentagon: { + type: 'polygon', + xValue: 1, + yValue: 60, + sides: 5, + radius: 60, + backgroundColor: 'rgba(255, 99, 132, 0.25)' + } + } + } + } +}; +/* */ + +/* */ +const config = { + type: 'line', + data: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + datasets: [{ + label: 'My First Dataset', + data: [65, 59, 80, 81, 56, 55, 40], + fill: false, + borderColor: 'rgb(75, 192, 192)', + tension: 0.1 + }] + }, + options +}; +/* */ + +module.exports = { + config +}; +``` + +## Configuration + +The following options are available for polygon annotations. + +| Name | Type | [Scriptable](../options#scriptable-options) | Default +| ---- | ---- | :----: | ---- +| [`adjustScaleRange`](#general) | `boolean` | Yes | `true` +| [`backgroundColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` +| [`backgroundShadowColor`](#styling) | [`Color`](../options#color) | Yes | `'transparent'` +| [`borderCapStyle`](#styling) | `string` | Yes | `'butt'` +| [`borderColor`](#styling) | [`Color`](../options#color) | Yes | `options.color` +| [`borderDash`](#styling) | `number[]`| Yes | `[]` +| [`borderDashOffset`](#styling) | `number`| Yes | `0` +| [`borderJoinStyle`](#styling) | `string` | Yes | `'miter'` +| [`borderShadowColor`](#styling) | [`Color`](../options#color) | Yes | `'transparent'` +| [`borderWidth`](#styling) | `number`| Yes | `1` +| [`display`](#general) | `boolean` | Yes | `true` +| [`drawTime`](#general) | `string` | Yes | `'afterDatasetsDraw'` +| [`point`](#point) | `object` | Yes | `{radius: 0}` +| [`radius`](#general) | `number` | Yes | `10` +| [`rotation`](#general) | `number` | Yes | `0` +| [`shadowBlur`](#styling) | `number` | Yes | `0` +| [`shadowOffsetX`](#styling) | `number` | Yes | `0` +| [`shadowOffsetY`](#styling) | `number` | Yes | `0` +| [`sides`](#general) | `number` | Yes | `3` +| [`xAdjust`](#general) | `number` | Yes | `0` +| [`xMax`](#general) | `number` \| `string` | Yes | `undefined` +| [`xMin`](#general) | `number` \| `string` | Yes | `undefined` +| [`xScaleID`](#general) | `string` | Yes | `'x'` +| [`xValue`](#general) | `number` \| `string` | Yes | `undefined` +| [`yAdjust`](#general) | `number` | Yes | `0` +| [`yScaleID`](#general) | `string` | Yes | `'y'` +| [`yMax`](#general) | `number` \| `string` | Yes | `undefined` +| [`yMin`](#general) | `number` \| `string` | Yes | `undefined` +| [`yValue`](#general) | `number` \| `string` | Yes | `undefined` + +### General + +If one of the axes does not match an axis in the chart, the polygon annotation will take the center of the chart as point. The 2 coordinates, xValue, yValue are optional. If not specified, the polygon annotation will take the center of the chart. + +The 4 coordinates, xMin, xMax, yMin, yMax are optional. If not specified, the box is expanded out to the edges in the respective direction and the box size is used to calculated the center of the point. To enable to use the box positioning, the `radius` must be set to `0` or `NaN`. + +| Name | Description +| ---- | ---- +| `adjustScaleRange` | Should the scale range be adjusted if this annotation is out of range. +| `display` | Whether or not this annotation is visible. +| `drawTime` | See [drawTime](../options#draw-time). +| `radius` | Size of the polygon in pixels. +| `rotation` | Rotation of polygon, in degrees. +| `sides` | Amount of sides of polygon. +| `xAdjust` | Adjustment along x-axis (left-right) of polygon relative to computed position. Negative values move the polygon left, positive right. +| `xMax` | Right edge of the box in units along the x axis. +| `xMin` | Left edge of the box in units along the x axis. +| `xScaleID` | ID of the X scale to bind onto, default is 'x'. +| `xValue` | X coordinate of the polygon in units along the x axis. +| `yAdjust` | Adjustment along y-axis (top-bottom) of polygon relative to computed position. Negative values move the polygon up, positive down. +| `yMax` | Bottom edge of the box in units along the y axis. +| `yMin` | Top edge of the box in units along the y axis. +| `yScaleID` | ID of the Y scale to bind onto, default is 'y'. +| `yValue` | Y coordinate of the polygon in units along the y axis. + +### Styling + +| Name | Description +| ---- | ---- +| `backgroundColor` | Fill color. +| `backgroundShadowColor` | The color of shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderColor` | Stroke color. +| `borderCapStyle` | Cap style of the border of polygon. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineCap). +| `borderDash` | Length and spacing of dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash). +| `borderDashOffset` | Offset for line dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset). +| `borderJoinStyle` | Border line joint style. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin). +| `borderShadowColor` | The color of the border shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderWidth` | Stroke width. +| `shadowBlur` | The amount of blur applied to shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowBlur). +| `shadowOffsetX` | The distance that shadow will be offset horizontally. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetX). +| `shadowOffsetY` | The distance that shadow will be offset vertically. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetY). + +### Point + +Polygon consists of points. These points are actually [Point Annotations](point) and all of the [styling options](point#styling) can be configured. General options affecting the location of the point are ignored. + +Namespace: `options.annotations[annotationID].point`, it defines options for the callout on the annotation label. + +```js chart-editor +/* */ +const options = { + plugins: { + autocolors: false, + annotation: { + annotations: { + pentagon: { + type: 'polygon', + xValue: 1, + yValue: 60, + sides: 4, + radius: 60, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + point: { + radius: 10, + borderWidth: 2, + borderColor: '#666', + backgroundColor: 'rgba(99, 132, 255, 0.25)', + } + } + } + } + } +}; +/* */ + +/* */ +const config = { + type: 'line', + data: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + datasets: [{ + label: 'My First Dataset', + data: [65, 59, 80, 81, 56, 55, 40], + fill: false, + borderColor: 'rgb(75, 192, 192)', + tension: 0.1 + }] + }, + options +}; +/* */ + +module.exports = { + config +}; +``` diff --git a/docs/samples/types/box.md b/docs/samples/box/basic.md similarity index 85% rename from docs/samples/types/box.md rename to docs/samples/box/basic.md index fa3fa80a1..f986fe606 100644 --- a/docs/samples/types/box.md +++ b/docs/samples/box/basic.md @@ -1,4 +1,4 @@ -# Box +# Basic ```js chart-editor // @@ -10,9 +10,9 @@ Utils.srand(8); const data = { datasets: [{ - data: Utils.points({count: DATA_COUNT, min: MIN[0], max: MAX[0]}), + data: Utils.points({count: DATA_COUNT, min: MIN[0], max: MAX[0]}) }, { - data: Utils.points({count: DATA_COUNT, min: MIN[1], max: MAX[1]}), + data: Utils.points({count: DATA_COUNT, min: MIN[1], max: MAX[1]}) }] }; // @@ -20,28 +20,28 @@ const data = { // const annotation1 = { type: 'box', - backgroundColor: 'rgba(0,150,0,0.02)', - borderColor: 'rgba(0,150,0,0.2)', - borderWidth: 1, + backgroundColor: 'rgba(0, 150, 0, 0.02)', + borderColor: 'rgba(0, 150, 0, 0.2)', borderRadius: 4, - xMin: (ctx) => min(ctx, 0, 'x') - 2, - yMin: (ctx) => min(ctx, 0, 'y') - 2, + borderWidth: 1, xMax: (ctx) => max(ctx, 0, 'x') + 2, - yMax: (ctx) => max(ctx, 0, 'y') + 2 + xMin: (ctx) => min(ctx, 0, 'x') - 2, + yMax: (ctx) => max(ctx, 0, 'y') + 2, + yMin: (ctx) => min(ctx, 0, 'y') - 2 }; // // const annotation2 = { type: 'box', - backgroundColor: 'rgba(150,0,0,0.02)', - borderColor: 'rgba(150,0,0,0.2)', - borderWidth: 1, + backgroundColor: 'rgba(150, 0, 0, 0.02)', + borderColor: 'rgba(150, 0, 0, 0.2)', borderRadius: 4, - xMin: (ctx) => min(ctx, 1, 'x') - 2, - yMin: (ctx) => min(ctx, 1, 'y') - 2, + borderWidth: 1, xMax: (ctx) => max(ctx, 1, 'x') + 2, - yMax: (ctx) => max(ctx, 1, 'y') + 2 + xMin: (ctx) => min(ctx, 1, 'x') - 2, + yMax: (ctx) => max(ctx, 1, 'y') + 2, + yMin: (ctx) => min(ctx, 1, 'y') - 2 }; // @@ -57,7 +57,7 @@ const config = { annotation2 } } - }, + } } }; /* */ @@ -75,7 +75,7 @@ function max(ctx, datasetIndex, prop) { // -var actions = [ +const actions = [ { name: 'Randomize', handler: function(chart) { @@ -85,7 +85,6 @@ var actions = [ p.y = Utils.rand(MIN[i], MAX[i]); }); }); - chart.update(); } }, @@ -105,7 +104,6 @@ var actions = [ chart.data.datasets.forEach(function(dataset, i) { dataset.data.shift(); }); - chart.update(); } } diff --git a/docs/samples/box/disclosure.md b/docs/samples/box/disclosure.md new file mode 100644 index 000000000..d9d659278 --- /dev/null +++ b/docs/samples/box/disclosure.md @@ -0,0 +1,69 @@ +# Disclosure + +```js chart-editor +// +const DATA_COUNT = 12; +const MIN = 10; +const MAX = 100; + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + datasets: [{ + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation = { + type: 'box', + backgroundColor: 'transparent', + borderWidth: 0, + label: { + drawTime: 'afterDatasetsDraw', + enabled: true, + color: 'rgba(208, 208, 208, 0.2)', + content: 'Draft', + font: { + size: (ctx) => ctx.chart.chartArea.height / 1.5 + }, + position: 'center' + } +}; +// + +/* */ +const config = { + type: 'line', + data, + options: { + plugins: { + annotation: { + annotations: { + annotation + } + } + } + } +}; +/* */ + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/box/quarters.md b/docs/samples/box/quarters.md new file mode 100644 index 000000000..2cf9e8eb7 --- /dev/null +++ b/docs/samples/box/quarters.md @@ -0,0 +1,137 @@ +# Yearly quarters + +```js chart-editor +// +const DATA_COUNT = 12; +const MIN = 10; +const MAX = 100; + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + datasets: [{ + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation1 = { + type: 'box', + backgroundColor: 'rgba(255, 245, 157, 0.2)', + borderWidth: 0, + xMax: 2.5, + xMin: -0.5, + label: { + drawTime: 'afterDraw', + enabled: true, + content: 'First quarter', + position: { + x: 'center', + y: 'start' + } + } +}; +// + +// +const annotation2 = { + type: 'box', + backgroundColor: 'rgba(188, 170, 164, 0.2)', + borderWidth: 0, + xMax: 5.5, + xMin: 2.5, + label: { + drawTime: 'afterDraw', + enabled: true, + content: 'Second quarter', + position: { + x: 'center', + y: 'start' + } + } +}; +// + +// +const annotation3 = { + type: 'box', + backgroundColor: 'rgba(165, 214, 167, 0.2)', + borderWidth: 0, + xMax: 8.5, + xMin: 5.5, + label: { + drawTime: 'afterDraw', + enabled: true, + content: 'Third quarter', + position: { + x: 'center', + y: 'start' + } + } +}; +// + +// +const annotation4 = { + type: 'box', + backgroundColor: 'rgba(159, 168, 218, 0.2)', + borderWidth: 0, + xMin: 8.5, + label: { + drawTime: 'afterDraw', + enabled: true, + content: 'Fourth quarter', + position: { + x: 'center', + y: 'start' + } + } +}; +// + +/* */ +const config = { + type: 'line', + data, + options: { + scales: { + y: { + beginAtZero: true, + max: 120, + min: 0 + } + }, + plugins: { + annotation: { + drawTime: 'beforeDraw', + annotations: { + annotation1, + annotation2, + annotation3, + annotation4 + } + } + } + } +}; +/* */ + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/charts/bar.md b/docs/samples/charts/bar.md index 831edd8f4..07fe60523 100644 --- a/docs/samples/charts/bar.md +++ b/docs/samples/charts/bar.md @@ -1,7 +1,7 @@ # Bar Chart ```js chart-editor -// +// const DATA_COUNT = 8; const MIN = 10; const MAX = 100; @@ -65,8 +65,8 @@ const annotation3 = { xMax: 3.5, yMin: 0, yMax: 100, - backgroundColor: 'rgba(250,250,0,0.4)', - borderColor: 'rgba(0,150,0,0.2)', + backgroundColor: 'rgba(250, 250, 0, 0.4)', + borderColor: 'rgba(0, 150, 0, 0.2)', drawTime: 'beforeDatasetsDraw', borderWidth: 0, borderRadius: 0, @@ -92,7 +92,7 @@ const config = { }; /* */ -var actions = [ +const actions = [ { name: 'Randomize', handler: function(chart) { diff --git a/docs/samples/charts/line.md b/docs/samples/charts/line.md index 638e17956..050b4660c 100644 --- a/docs/samples/charts/line.md +++ b/docs/samples/charts/line.md @@ -1,14 +1,13 @@ # Line Chart ```js chart-editor -// +// const DATA_COUNT = 8; const MIN = 10; const MAX = 100; Utils.srand(8); - const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; const data = { @@ -62,8 +61,8 @@ const annotation3 = { xMax: 85, yMin: 80, yMax: 90, - backgroundColor: 'rgba(250,250,0,0.4)', - borderColor: 'rgba(0,150,0,0.2)', + backgroundColor: 'rgba(250, 250, 0, 0.4)', + borderColor: 'rgba(0, 150, 0, 0.2)', drawTime: 'beforeDatasetsDraw', borderWidth: 0, borderRadius: 0, @@ -95,7 +94,7 @@ const config = { }; /* */ -var actions = [ +const actions = [ { name: 'Zoom out', handler: function(chart) { diff --git a/docs/samples/types/ellipse.md b/docs/samples/ellipse/basic.md similarity index 83% rename from docs/samples/types/ellipse.md rename to docs/samples/ellipse/basic.md index f9064629e..2b4f55c19 100644 --- a/docs/samples/types/ellipse.md +++ b/docs/samples/ellipse/basic.md @@ -1,4 +1,4 @@ -# Ellipse +# Basic ```js chart-editor // @@ -10,9 +10,9 @@ Utils.srand(8); const data = { datasets: [{ - data: Utils.points({count: DATA_COUNT, min: MIN[0], max: MAX[0]}), + data: Utils.points({count: DATA_COUNT, min: MIN[0], max: MAX[0]}) }, { - data: Utils.points({count: DATA_COUNT, min: MIN[1], max: MAX[1]}), + data: Utils.points({count: DATA_COUNT, min: MIN[1], max: MAX[1]}) }] }; // @@ -20,30 +20,26 @@ const data = { // const annotation1 = { type: 'ellipse', - backgroundColor: 'rgba(0,150,0,0.02)', - borderColor: 'rgba(0,150,0,0.2)', + backgroundColor: 'rgba(0, 150, 0, 0.02)', + borderColor: 'rgba(0, 150, 0, 0.2)', borderWidth: 1, - rotation: 0, - borderRadius: 4, - xMin: (ctx) => min(ctx, 0, 'x') - 10, - yMin: (ctx) => min(ctx, 0, 'y') - 10, xMax: (ctx) => max(ctx, 0, 'x') + 10, - yMax: (ctx) => max(ctx, 0, 'y') + 10 + xMin: (ctx) => min(ctx, 0, 'x') - 10, + yMax: (ctx) => max(ctx, 0, 'y') + 10, + yMin: (ctx) => min(ctx, 0, 'y') - 10 }; // // const annotation2 = { type: 'ellipse', - backgroundColor: 'rgba(150,0,0,0.02)', - borderColor: 'rgba(150,0,0,0.2)', + backgroundColor: 'rgba(150, 0, 0, 0.02)', + borderColor: 'rgba(150, 0, 0, 0.2)', borderWidth: 1, - rotation: 0, - borderRadius: 4, - xMin: (ctx) => min(ctx, 1, 'x') - 10, - yMin: (ctx) => min(ctx, 1, 'y') - 10, xMax: (ctx) => max(ctx, 1, 'x') + 10, - yMax: (ctx) => max(ctx, 1, 'y') + 10 + xMin: (ctx) => min(ctx, 1, 'x') - 10, + yMax: (ctx) => max(ctx, 1, 'y') + 10, + yMin: (ctx) => min(ctx, 1, 'y') - 10 }; // @@ -59,7 +55,7 @@ const config = { annotation2 } } - }, + } } }; /* */ @@ -74,10 +70,9 @@ function max(ctx, datasetIndex, prop) { const dataset = ctx.chart.data.datasets[datasetIndex]; return dataset.data.reduce((v, point) => Math.max(point[prop], v), -Infinity); } - // -var actions = [ +const actions = [ { name: 'Randomize', handler: function(chart) { @@ -87,7 +82,6 @@ var actions = [ p.y = Utils.rand(MIN[i], MAX[i]); }); }); - chart.update(); } }, @@ -107,7 +101,6 @@ var actions = [ chart.data.datasets.forEach(function(dataset, i) { dataset.data.shift(); }); - chart.update(); } } diff --git a/docs/samples/ellipse/rotation.md b/docs/samples/ellipse/rotation.md new file mode 100644 index 000000000..adaa3c386 --- /dev/null +++ b/docs/samples/ellipse/rotation.md @@ -0,0 +1,127 @@ +# Rotation + +```js chart-editor +// +const DATA_COUNT = 8; +const MIN = [25, 65]; +const MAX = [35, 75]; + +Utils.srand(8); + +const data = { + datasets: [{ + data: Utils.points({count: DATA_COUNT, min: MIN[0], max: MAX[0]}) + }, { + data: Utils.points({count: DATA_COUNT, min: MIN[1], max: MAX[1]}) + }] +}; +// + +// +const annotation1 = { + type: 'ellipse', + backgroundColor: 'rgba(0, 150, 0, 0.02)', + borderColor: 'rgba(0, 150, 0, 0.2)', + borderWidth: 1, + rotation: 90, + xMax: (ctx) => max(ctx, 0, 'x') + 10, + xMin: (ctx) => min(ctx, 0, 'x') - 10, + yMax: (ctx) => max(ctx, 0, 'y') + 10, + yMin: (ctx) => min(ctx, 0, 'y') - 10 +}; +// + +// +const annotation2 = { + type: 'ellipse', + backgroundColor: 'rgba(150, 0, 0, 0.02)', + borderColor: 'rgba(150, 0, 0, 0.2)', + borderWidth: 1, + rotation: 90, + xMax: (ctx) => max(ctx, 1, 'x') + 10, + xMin: (ctx) => min(ctx, 1, 'x') - 10, + yMax: (ctx) => max(ctx, 1, 'y') + 10, + yMin: (ctx) => min(ctx, 1, 'y') - 10 +}; +// + +/* */ +const config = { + type: 'scatter', + data, + options: { + scales: { + x: { + beginAtZero: true, + max: 100, + min: 0 + }, + y: { + beginAtZero: true, + max: 100, + min: 0 + } + }, + plugins: { + annotation: { + annotations: { + annotation1, + annotation2 + } + } + } + } +}; +/* */ + +// +function min(ctx, datasetIndex, prop) { + const dataset = ctx.chart.data.datasets[datasetIndex]; + return dataset.data.reduce((v, point) => Math.min(point[prop], v), Infinity); +} + +function max(ctx, datasetIndex, prop) { + const dataset = ctx.chart.data.datasets[datasetIndex]; + return dataset.data.reduce((v, point) => Math.max(point[prop], v), -Infinity); +} +// + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.forEach(p => { + p.x = Utils.rand(MIN[i], MAX[i]); + p.y = Utils.rand(MIN[i], MAX[i]); + }); + }); + chart.update(); + } + }, + { + name: 'Add data', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.push({x: Utils.rand(MIN[i], MAX[i]), y: Utils.rand(MIN[i], MAX[i])}); + }); + chart.update(); + } + }, + { + name: 'Remove data', + handler: function(chart) { + chart.data.labels.shift(); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.shift(); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/intro.md b/docs/samples/intro.md index 84cc2e9f4..4ffee719f 100644 --- a/docs/samples/intro.md +++ b/docs/samples/intro.md @@ -1,7 +1,7 @@ # Intro ```js chart-editor -// +// Utils.srand(8); const data = { @@ -32,37 +32,37 @@ const data = { // const annotation1 = { type: 'line', - scaleID: 'y', - value: Utils.rand(-100, 100), borderColor: 'black', borderWidth: 5, + click: function({chart, element}) { + console.log('Line annotation clicked'); + }, label: { backgroundColor: 'red', content: 'Test Label', enabled: true }, - click: function({chart, element}) { - console.log('Line annotation clicked'); - } + scaleID: 'y', + value: Utils.rand(-100, 100) }; // // const annotation2 = { - drawTime: 'beforeDatasetsDraw', type: 'box', - xScaleID: 'x', - yScaleID: 'y', - xMin: 'February', - xMax: 'April', - yMin: Utils.rand(-100, 100), - yMax: Utils.rand(-100, 100), backgroundColor: 'rgba(101, 33, 171, 0.5)', borderColor: 'rgb(101, 33, 171)', borderWidth: 1, click: function({chart, element}) { console.log('Box annotation clicked'); - } + }, + drawTime: 'beforeDatasetsDraw', + xMax: 'April', + xMin: 'February', + xScaleID: 'x', + yMax: Utils.rand(-100, 100), + yMin: Utils.rand(-100, 100), + yScaleID: 'y' }; // @@ -78,19 +78,18 @@ const config = { annotation2 } } - }, + } } }; /* */ -var actions = [ +const actions = [ { name: 'Randomize', handler: function(chart) { chart.data.datasets.forEach(function(dataset, i) { dataset.data = Utils.numbers({count: 7, min: -100, max: 100}); }); - chart.update(); } }, diff --git a/docs/samples/label/basic.md b/docs/samples/label/basic.md new file mode 100644 index 000000000..5017308aa --- /dev/null +++ b/docs/samples/label/basic.md @@ -0,0 +1,121 @@ +# Basic + +```js chart-editor +// +const DATA_COUNT = 12; +const MIN = 0; +const MAX = 100; + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + datasets: [{ + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation1 = { + type: 'label', + borderColor: (ctx) => ctx.chart.data.datasets[0].backgroundColor, + borderRadius: 6, + borderWidth: 1, + content: ['March', 'annotated'], + position: { + x: 'center', + y: 'end' + }, + xValue: 'March', + yValue: (ctx) => yValue(ctx, 'March') +}; +// + +// +const annotation2 = { + type: 'label', + borderColor: (ctx) => ctx.chart.data.datasets[0].backgroundColor, + borderRadius: 6, + borderWidth: 1, + content: ['June', 'annotated'], + position: { + x: 'center', + y: 'end' + }, + xValue: 'June', + yValue: (ctx) => yValue(ctx, 'June') +}; +// + +// +const annotation3 = { + type: 'label', + borderColor: (ctx) => ctx.chart.data.datasets[0].backgroundColor, + borderRadius: 6, + borderWidth: 1, + content: ['October', 'annotated'], + position: { + x: 'center', + y: 'end' + }, + xValue: 'October', + yValue: (ctx) => yValue(ctx, 'October') +}; +// + +/* */ +const config = { + type: 'bar', + data, + options: { + scales: { + x: { + beginAtZero: true, + max: 120, + min: 0 + }, + y: { + beginAtZero: true, + max: 120, + min: 0 + } + }, + plugins: { + annotation: { + annotations: { + annotation1, + annotation2, + annotation3 + } + } + } + } +}; +/* */ + +// +function yValue(ctx, label) { + const chart = ctx.chart; + const dataset = chart.data.datasets[0]; + return dataset.data[chart.data.labels.indexOf(label)]; +} +// + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/label/callout.md b/docs/samples/label/callout.md new file mode 100644 index 000000000..b6c81bf3f --- /dev/null +++ b/docs/samples/label/callout.md @@ -0,0 +1,98 @@ +# Callout + +```js chart-editor +// +const DATA_COUNT = 12; +const MIN = 0; +const MAX = 100; + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + datasets: [{ + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation = { + type: 'label', + backgroundColor: 'rgba(245, 245, 245)', + callout: { + enabled: true, + borderColor: (ctx) => ctx.chart.data.datasets[0].borderColor + }, + content: (ctx) => 'Maximum value is ' + maxValue(ctx).toFixed(2), + font: { + size: 16 + }, + position: { + x: (ctx) => maxIndex(ctx) <= 3 ? 'start' : maxIndex(ctx) >= 10 ? 'end' : 'center', + y: 'center' + }, + xAdjust: (ctx) => maxIndex(ctx) <= 3 ? 60 : maxIndex(ctx) >= 10 ? -60 : 0, + xValue: (ctx) => maxLabel(ctx), + yAdjust: -60, + yValue: (ctx) => maxValue(ctx) +}; +// + +/* */ +const config = { + type: 'line', + data, + options: { + scales: { + y: { + beginAtZero: true, + max: 140, + min: 0 + } + }, + plugins: { + annotation: { + annotations: { + annotation + } + } + } + } +}; +/* */ + +// +function maxValue(ctx) { + const values = ctx.chart.data.datasets[0].data; + return Math.max(...values); +} + +function maxIndex(ctx) { + const max = maxValue(ctx); + const dataset = ctx.chart.data.datasets[0]; + return dataset.data.indexOf(max); +} + +function maxLabel(ctx) { + return ctx.chart.data.labels[maxIndex(ctx)]; +} +// + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/label/lowerUpper.md b/docs/samples/label/lowerUpper.md new file mode 100644 index 000000000..e56b85258 --- /dev/null +++ b/docs/samples/label/lowerUpper.md @@ -0,0 +1,157 @@ +# Lower and upper bounds labels + +```js chart-editor +// +const DATA_COUNT = 8; +const MIN = 10; +const MAX = 100; + +Utils.srand(8); + +const labels = []; +for (let i = 0; i < DATA_COUNT; ++i) { + labels.push('' + i); +} + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: labels, + datasets: [{ + data: Utils.numbers(numberCfg) + }, { + data: Utils.numbers(numberCfg) + }, { + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation1 = { + type: 'label', + content: (ctx) => 'Lower bound: ' + minValue(ctx).toFixed(3), + position: { + x: 'start', + y: 'end' + }, + xScaleID: 'x', + xValue: 2, + yScaleID: 'y', + yValue: minValue +}; +// + +// +const annotation2 = { + type: 'label', + content: (ctx) => 'Upper bound: ' + maxValue(ctx).toFixed(3), + position: { + x: 'start', + y: 'start' + }, + xScaleID: 'x', + xValue: 2, + yScaleID: 'y', + yValue: maxValue +}; +// + +/* */ +const config = { + type: 'line', + data, + options: { + scales: { + y: { + stacked: true + } + }, + plugins: { + annotation: { + annotations: { + annotation1, + annotation2 + } + } + } + } +}; +/* */ + +// +function minValue(ctx) { + const dataset = ctx.chart.data.datasets[0]; + const min = dataset.data.reduce((max, point) => Math.min(point, max), Infinity); + return isFinite(min) ? min : 0; +} + +function maxValue(ctx) { + const datasets = ctx.chart.data.datasets; + const count = datasets[0].data.length; + let max = 0; + for (let i = 0; i < count; i++) { + let sum = 0; + for (const dataset of datasets) { + sum += dataset.data[i]; + } + max = Math.max(max, sum); + } + return max; +} +// + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Add data', + handler: function(chart) { + chart.data.labels.push(chart.data.labels.length); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.push(Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Remove data', + handler: function(chart) { + chart.data.labels.shift(); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.shift(); + }); + chart.update(); + } + }, + { + name: 'Cycle x-position', + handler: function(chart) { + const annotations = chart.options.plugins.annotation.annotations; + if (annotations.annotation1.position.x === 'start') { + annotations.annotation1.position.x = 'end'; + annotations.annotation2.position.x = 'end'; + } else if (annotations.annotation1.position.x === 'center') { + annotations.annotation1.position.x = 'start'; + annotations.annotation2.position.x = 'start'; + } else { + annotations.annotation1.position.x = 'center'; + annotations.annotation2.position.x = 'center'; + } + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/label/point.md b/docs/samples/label/point.md new file mode 100644 index 000000000..820aee1a3 --- /dev/null +++ b/docs/samples/label/point.md @@ -0,0 +1,122 @@ +# Point + +```js chart-editor +// +const DATA_COUNT = 12; +const MIN = 0; +const MAX = 100; + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + datasets: [{ + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation1 = { + type: 'label', + backgroundColor: 'rgba(245, 245, 245, 0.5)', + content: (ctx) => 'Maximum value is ' + maxValue(ctx).toFixed(2), + font: { + size: 16 + }, + padding: { + top: 6, + left: 6, + right: 6, + bottom: 12 + }, + position: { + x: (ctx) => maxIndex(ctx) <= 3 ? 'start' : maxIndex(ctx) >= 10 ? 'end' : 'center', + y: 'end' + }, + xValue: (ctx) => maxLabel(ctx), + yAdjust: -6, + yValue: (ctx) => maxValue(ctx) +}; +// + +// +const annotation2 = { + type: 'point', + backgroundColor: 'transparent', + borderColor: (ctx) => ctx.chart.data.datasets[0].borderColor, + pointStyle: 'rectRounded', + radius: 10, + xValue: (ctx) => maxLabel(ctx), + yValue: (ctx) => maxValue(ctx) +}; +// + +/* */ +const config = { + type: 'line', + data, + options: { + layout: { + padding: { + right: 10 + }, + }, + scales: { + y: { + beginAtZero: true, + max: 120, + min: 0 + } + }, + plugins: { + annotation: { + clip: false, + annotations: { + annotation1, + annotation2 + } + } + } + } +}; +/* */ + +// +function maxValue(ctx) { + let max = 0; + const dataset = ctx.chart.data.datasets[0]; + dataset.data.forEach(function(el) { + max = Math.max(max, el); + }); + return max; +} + +function maxIndex(ctx) { + const max = maxValue(ctx); + const dataset = ctx.chart.data.datasets[0]; + return dataset.data.indexOf(max); +} + +function maxLabel(ctx) { + return ctx.chart.data.labels[maxIndex(ctx)]; +} +// + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/line/animation.md b/docs/samples/line/animation.md new file mode 100644 index 000000000..66e37d39f --- /dev/null +++ b/docs/samples/line/animation.md @@ -0,0 +1,75 @@ +# Animation + + + +```js chart-editor +// +const uniqueId = new Date().getTime(); + +const data = { + datasets: [{ + backgroundColor: 'rgba(63, 184, 175, 0.3)', + borderColor: 'rgba(255, 0, 0, 0.0)', + pointRadius: 0, // no dots + tension: 0, // straight lines + showLine: true, + fill: true, + data: [ + {x: 0, y: 0}, + {x: 50, y: 0}, + {x: 50, y: 1}, + {x: 100, y: 1} + ] + }] +}; +// + +// +const line = { + type: 'line', + borderColor: 'red', + borderWidth: 3, + label: { + enabled: true, + content: 'Limit', + rotation: 90 + }, + scaleID: 'x', + value: 50 +}; +// + +/* */ +const config = { + type: 'scatter', + data, + options: { + _sampleId: uniqueId, + plugins: { + annotation: { + annotations: { + line + } + } + } + } +}; +/* */ + +// +document.getElementById('update').addEventListener('input', update); + +function update() { + const newValue = +document.querySelector('input[type=range]').value; + const chart = Object.values(Chart.instances).find(c => c.options._sampleId === uniqueId); + chart.data.datasets[0].data[1].x = newValue; + chart.data.datasets[0].data[2].x = newValue; + chart.options.plugins.annotation.annotations.line.value = newValue; + chart.update(); +} +// + +module.exports = { + config: config +}; +``` diff --git a/docs/samples/line/average.md b/docs/samples/line/average.md new file mode 100644 index 000000000..dbbd777da --- /dev/null +++ b/docs/samples/line/average.md @@ -0,0 +1,102 @@ +# Average + +```js chart-editor +// +const DATA_COUNT = 8; +const MIN = 10; +const MAX = 100; + +Utils.srand(8); + +const labels = []; +for (let i = 0; i < DATA_COUNT; ++i) { + labels.push('' + i); +} + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: labels, + datasets: [{ + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation = { + type: 'line', + borderColor: 'black', + borderDash: [6, 6], + borderDashOffset: 0, + borderWidth: 3, + label: { + enabled: true, + content: (ctx) => 'Average: ' + average(ctx).toFixed(2), + position: 'end' + }, + scaleID: 'y', + value: (ctx) => average(ctx) +}; +// + +/* */ +const config = { + type: 'line', + data, + options: { + plugins: { + annotation: { + annotations: { + annotation + } + } + } + } +}; +/* */ + +// +function average(ctx) { + const values = ctx.chart.data.datasets[0].data; + return values.reduce((a, b) => a + b, 0) / values.length; +} +// + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Add data', + handler: function(chart) { + chart.data.labels.push(chart.data.labels.length); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.push(Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Remove data', + handler: function(chart) { + chart.data.labels.shift(); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.shift(); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/line/basic.md b/docs/samples/line/basic.md new file mode 100644 index 000000000..f6e078e71 --- /dev/null +++ b/docs/samples/line/basic.md @@ -0,0 +1,93 @@ +# Basic + +```js chart-editor +// +const DATA_COUNT = 8; +const MIN = 10; +const MAX = 100; + +Utils.srand(8); + +const labels = []; +for (let i = 0; i < DATA_COUNT; ++i) { + labels.push('' + i); +} + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: labels, + datasets: [{ + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation = { + type: 'line', + borderColor: 'black', + borderWidth: 3, + scaleID: 'y', + value: 50 +}; +// + +/* */ +const config = { + type: 'line', + data, + options: { + scales: { + y: { + stacked: true + } + }, + plugins: { + annotation: { + annotations: { + annotation + } + } + } + } +}; +/* */ + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Add data', + handler: function(chart) { + chart.data.labels.push(chart.data.labels.length); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.push(Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Remove data', + handler: function(chart) { + chart.data.labels.shift(); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.shift(); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/line/datasetBars.md b/docs/samples/line/datasetBars.md new file mode 100644 index 000000000..5a9401fbb --- /dev/null +++ b/docs/samples/line/datasetBars.md @@ -0,0 +1,161 @@ +# Annotating dataset bars + +```js chart-editor +// +const DATA_COUNT = 4; +const MIN = 20; +const MAX = 100; + +Utils.srand(8); + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: ['January', 'February', 'March', 'April'], + datasets: [{ + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation1 = { + type: 'line', + borderColor: 'green', + borderWidth: 3, + label: { + enabled: true, + backgroundColor: 'green', + borderRadius: 0, + color: 'white', + content: (ctx) => middleValue(ctx, 0, 0.5).toFixed(0) + }, + xMax: indexToMax(0) + 0.05, + xMin: indexToMin(0) - 0.05, + xScaleID: 'x', + yMax: (ctx) => middleValue(ctx, 0, 0.5), + yMin: (ctx) => middleValue(ctx, 0, 0.5), + yScaleID: 'y' +}; +// + +// +const annotation2 = { + type: 'line', + borderColor: 'green', + borderWidth: 3, + label: { + enabled: true, + backgroundColor: 'green', + borderRadius: 0, + color: 'white', + content: (ctx) => middleValue(ctx, 1, 0.75).toFixed(0) + }, + xMax: indexToMax(1) + 0.05, + xMin: indexToMin(1) - 0.05, + xScaleID: 'x', + yMax: (ctx) => middleValue(ctx, 1, 0.75), + yMin: (ctx) => middleValue(ctx, 1, 0.75), + yScaleID: 'y' +}; +// + +// +const annotation3 = { + type: 'line', + borderColor: 'green', + borderWidth: 3, + label: { + enabled: true, + backgroundColor: 'green', + borderRadius: 0, + color: 'white', + content: (ctx) => middleValue(ctx, 2, 1).toFixed(0) + }, + xMax: indexToMax(2) + 0.05, + xMin: indexToMin(2) - 0.05, + xScaleID: 'x', + yMax: (ctx) => middleValue(ctx, 2, 1), + yMin: (ctx) => middleValue(ctx, 2, 1), + yScaleID: 'y' +}; +// + +// +const annotation4 = { + type: 'line', + borderColor: 'green', + borderWidth: 3, + label: { + enabled: true, + backgroundColor: 'green', + borderRadius: 0, + color: 'white', + content: (ctx) => middleValue(ctx, 3, 0.25).toFixed(0) + }, + xMax: indexToMax(3) + 0.05, + xMin: indexToMin(3) - 0.05, + xScaleID: 'x', + yMax: (ctx) => middleValue(ctx, 3, 0.25), + yMin: (ctx) => middleValue(ctx, 3, 0.25), + yScaleID: 'y' +}; +// + +/* */ +const config = { + type: 'bar', + data, + options: { + plugins: { + annotation: { + annotations: { + annotation1, + annotation2, + annotation3, + annotation4 + } + } + } + } +}; +/* */ + +// +// categoryPercentage is 0.8 by default +// barPercentage is 0.9 by default +// 1 * 0.8 * 0.9 = 0.72 +// 0.72 / 2 = 0.36 + +function indexToMin(index) { + return index - 0.36; +} + +function indexToMax(index) { + return index + 0.36; +} + +function middleValue(ctx, index, perc) { + const chart = ctx.chart; + const dataset = chart.data.datasets[0]; + return dataset.data[index] * perc; +} +// + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/line/labelVisibility.md b/docs/samples/line/labelVisibility.md new file mode 100644 index 000000000..a2ed727fb --- /dev/null +++ b/docs/samples/line/labelVisibility.md @@ -0,0 +1,150 @@ +# Label visibility + +```js chart-editor +// +const DATA_COUNT = 8; +const MIN = 10; +const MAX = 100; + +Utils.srand(8); + +const labels = []; +for (let i = 0; i < DATA_COUNT; ++i) { + labels.push('' + i); +} + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: labels, + datasets: [{ + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation1 = { + type: 'line', + borderColor: 'lightGreen', + borderWidth: 10, + label: { + enabled: false, + backgroundColor: 'green', + drawTime: 'afterDatasetsDraw', + content: (ctx) => ['Average of dataset', 'is: ' + average(ctx).toFixed(3)] + }, + scaleID: 'y', + value: (ctx) => average(ctx), + // For simple property changes, you can directly modify the annotation + // element's properties then call chart.draw(). This is faster. + enter({chart, element}, event) { + element.options.label.enabled = true; + chart.draw(); + }, + leave({chart, element}, event) { + element.options.label.enabled = false; + chart.draw(); + } +}; +// + +// +const annotation2 = { + type: 'line', + borderColor: 'lightBlue', + borderWidth: 10, + label: { + enabled: (ctx) => ctx.hovered, + backgroundColor: 'blue', + drawTime: 'afterDatasetsDraw', + content: (ctx) => ['Min of dataset', 'is: ' + min(ctx).toFixed(3)], + position: (ctx) => ctx.hoverPosition + }, + scaleID: 'y', + value: (ctx) => min(ctx), + // For more complex dynamic properties, you can store values on the persistent + // context object then retrieve them via scriptable properties. You'll have + // to call chart.update() to reprocess the chart. + enter(ctx, event) { + ctx.hovered = true; + ctx.hoverPosition = (event.x / ctx.chart.chartArea.width * 100) + '%'; + ctx.chart.update(); + }, + leave(ctx, event) { + ctx.hovered = false; + ctx.chart.update(); + } +}; +// + +/* */ +const config = { + type: 'line', + data, + options: { + plugins: { + tooltip: { + enabled: false, + }, + annotation: { + drawTime: 'beforeDatasetsDraw', + annotations: { + annotation1, + annotation2 + } + } + } + } +}; +/* */ + +// +function average(ctx) { + const values = ctx.chart.data.datasets[0].data; + return values.reduce((a, b) => a + b, 0) / values.length; +} + +function min(ctx) { + const values = ctx.chart.data.datasets[0].data; + return values.reduce((a, b) => Math.min(a, b), Infinity); +} +// + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Add data', + handler: function(chart) { + chart.data.labels.push(chart.data.labels.length); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.push(Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Remove data', + handler: function(chart) { + chart.data.labels.shift(); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.shift(); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/line/limited.md b/docs/samples/line/limited.md new file mode 100644 index 000000000..ae1f176a7 --- /dev/null +++ b/docs/samples/line/limited.md @@ -0,0 +1,126 @@ +# Limited lines + +```js chart-editor +// +const DATA_COUNT = 12; +const MIN = 10; +const MAX = 100; + +Utils.srand(8); + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + datasets: [{ + data: Utils.numbers(numberCfg) + }, { + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation1 = { + type: 'line', + borderColor: 'green', + borderWidth: 3, + label: { + enabled: true, + backgroundColor: 'lightGreen', + borderRadius: 0, + color: 'green', + content: 'Summer time' + }, + arrowHeads: { + start: { + enabled: true, + borderColor: 'green' + }, + end: { + enabled: true, + borderColor: 'green' + } + }, + xMax: 8, + xMin: 5, + xScaleID: 'x', + yMax: 110, + yMin: 110, + yScaleID: 'y' +}; +// + +// +const annotation2 = { + type: 'line', + borderColor: 'green', + borderDash: [6, 6], + borderWidth: 1, + xMax: 5, + xMin: 5, + xScaleID: 'x', + yMax: 0, + yMin: 110, + yScaleID: 'y' +}; +// + +// +const annotation3 = { + type: 'line', + borderColor: 'green', + borderDash: [6, 6], + borderWidth: 1, + xMax: 8, + xMin: 8, + xScaleID: 'x', + yMax: 0, + yMin: 110, + yScaleID: 'y' +}; +// + +/* */ +const config = { + type: 'line', + data, + options: { + scale: { + y: { + beginAtZero: true, + max: 120, + min: 0 + } + }, + plugins: { + annotation: { + drawTime: 'beforeDraw', + annotations: { + annotation1, + annotation2, + annotation3 + } + } + } + } +}; +/* */ + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/types/line.md b/docs/samples/line/lowerUpper.md similarity index 69% rename from docs/samples/types/line.md rename to docs/samples/line/lowerUpper.md index 40c4f4c4c..e78b8f4cb 100644 --- a/docs/samples/types/line.md +++ b/docs/samples/line/lowerUpper.md @@ -1,4 +1,4 @@ -# Line +# Lower and upper bounds ```js chart-editor // @@ -18,11 +18,11 @@ const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; const data = { labels: labels, datasets: [{ - data: Utils.numbers(numberCfg), + data: Utils.numbers(numberCfg) }, { - data: Utils.numbers(numberCfg), + data: Utils.numbers(numberCfg) }, { - data: Utils.numbers(numberCfg), + data: Utils.numbers(numberCfg) }] }; // @@ -30,34 +30,38 @@ const data = { // const annotation1 = { type: 'line', - scaleID: 'y', - borderWidth: 3, borderColor: 'black', - value: minValue, + borderWidth: 3, label: { + enabled: true, + backgroundColor: 'black', + borderColor: 'black', + borderRadius: 10, + borderWidth: 2, content: (ctx) => 'Lower bound: ' + minValue(ctx).toFixed(3), - enabled: true + rotation: 'auto' }, + scaleID: 'y', + value: minValue }; // // const annotation2 = { type: 'line', - scaleID: 'y', borderWidth: 3, borderColor: 'black', - value: maxValue, label: { - rotation: 'auto', + enabled: true, backgroundColor: 'black', - borderColor: 'red', - borderDash: [6, 3], + borderColor: 'black', borderRadius: 10, borderWidth: 2, content: (ctx) => 'Upper bound: ' + maxValue(ctx).toFixed(3), - enabled: true - } + rotation: 'auto' + }, + scaleID: 'y', + value: maxValue }; // @@ -66,6 +70,11 @@ const config = { type: 'line', data, options: { + scales: { + y: { + stacked: true + } + }, plugins: { annotation: { annotations: { @@ -73,12 +82,6 @@ const config = { annotation2 } } - }, - // Core options - scales: { - y: { - stacked: true - } } } }; @@ -106,14 +109,13 @@ function maxValue(ctx) { } // -var actions = [ +const actions = [ { name: 'Randomize', handler: function(chart) { chart.data.datasets.forEach(function(dataset, i) { dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); }); - chart.update(); } }, @@ -124,7 +126,6 @@ var actions = [ chart.data.datasets.forEach(function(dataset, i) { dataset.data.push(Utils.rand(MIN, MAX)); }); - chart.update(); } }, @@ -135,7 +136,23 @@ var actions = [ chart.data.datasets.forEach(function(dataset, i) { dataset.data.shift(); }); - + chart.update(); + } + }, + { + name: 'Cycle position', + handler: function(chart) { + const annotations = chart.options.plugins.annotation.annotations; + if (annotations.annotation1.label.position === 'start') { + annotations.annotation1.label.position = 'end'; + annotations.annotation2.label.position = 'end'; + } else if (annotations.annotation1.label.position === 'center') { + annotations.annotation1.label.position = 'start'; + annotations.annotation2.label.position = 'start'; + } else { + annotations.annotation1.label.position = 'center'; + annotations.annotation2.label.position = 'center'; + } chart.update(); } } diff --git a/docs/samples/line/standardDeviation.md b/docs/samples/line/standardDeviation.md new file mode 100644 index 000000000..d24c6fbf0 --- /dev/null +++ b/docs/samples/line/standardDeviation.md @@ -0,0 +1,161 @@ +# Standard deviation + +```js chart-editor +// +const DATA_COUNT = 16; +const MIN = 10; +const MAX = 100; + +Utils.srand(8); + +const labels = []; +for (let i = 0; i < DATA_COUNT; ++i) { + labels.push('' + i); +} + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: labels, + datasets: [{ + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation1 = { + type: 'line', + borderColor: 'rgb(100, 149, 237)', + borderDash: [6, 6], + borderDashOffset: 0, + borderWidth: 3, + label: { + enabled: true, + backgroundColor: 'rgb(100, 149, 237)', + content: (ctx) => 'Average: ' + average(ctx).toFixed(2) + }, + scaleID: 'y', + value: (ctx) => average(ctx) +}; +// + +// +const annotation2 = { + type: 'line', + borderColor: 'rgba(102, 102, 102, 0.5)', + borderDash: [6, 6], + borderDashOffset: 0, + borderWidth: 3, + label: { + enabled: true, + backgroundColor: 'rgba(102, 102, 102, 0.5)', + color: 'black', + content: (ctx) => (average(ctx) + standardDeviation(ctx)).toFixed(2), + position: 'start', + rotation: -90, + yAdjust: -28 + }, + scaleID: 'y', + value: (ctx) => average(ctx) + standardDeviation(ctx) +}; +// + +// +const annotation3 = { + type: 'line', + borderColor: 'rgba(102, 102, 102, 0.5)', + borderDash: [6, 6], + borderDashOffset: 0, + borderWidth: 3, + label: { + enabled: true, + backgroundColor: 'rgba(102, 102, 102, 0.5)', + color: 'black', + content: (ctx) => (average(ctx) - standardDeviation(ctx)).toFixed(2), + position: 'end', + rotation: 90, + yAdjust: 28 + }, + scaleID: 'y', + value: (ctx) => average(ctx) - standardDeviation(ctx) +}; +// + +/* */ +const config = { + type: 'line', + data, + options: { + scale: { + y: { + beginAtZero: true, + max: 120, + min: 0 + } + }, + plugins: { + annotation: { + annotations: { + annotation1, + annotation2, + annotation3 + } + } + } + } +}; +/* */ + +// +function average(ctx) { + const values = ctx.chart.data.datasets[0].data; + return values.reduce((a, b) => a + b, 0) / values.length; +} + +function standardDeviation(ctx) { + const values = ctx.chart.data.datasets[0].data; + const n = values.length; + const mean = average(ctx); + return Math.sqrt(values.map(x => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n); +} + +// + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Add data', + handler: function(chart) { + chart.data.labels.push(chart.data.labels.length); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.push(Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Remove data', + handler: function(chart) { + chart.data.labels.shift(); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.shift(); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/line/visibility.md b/docs/samples/line/visibility.md new file mode 100644 index 000000000..81c54b4ad --- /dev/null +++ b/docs/samples/line/visibility.md @@ -0,0 +1,81 @@ +# Line visibility + +```js chart-editor +// +const DATA_COUNT = 6; +const MIN = 10; +const MAX = 100; + +Utils.srand(8); +const jointValue = Utils.rand(MIN, MAX); + +const dataCfg = Utils.numbers({count: DATA_COUNT, min: MIN, max: MAX}); +dataCfg.push(jointValue, NaN, NaN, NaN, NaN, NaN, NaN); + +const futureCfg = Utils.numbers({count: DATA_COUNT - 1, min: MIN, max: MAX}); +futureCfg.splice(0, 0, NaN, NaN, NaN, NaN, NaN, NaN, jointValue); + +const data = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + datasets: [{ + data: dataCfg + }, { + data: futureCfg, + borderDash: [6, 6] + }] +}; +// + +// +const annotation = { + type: 'line', + borderColor: 'black', + borderWidth: 1, + display: (ctx) => ctx.chart.isDatasetVisible(1), + label: { + enabled: true, + content: 'Now', + position: 'start' + }, + scaleID: 'x', + value: 'July' +}; +// + +/* */ +const config = { + type: 'line', + data, + options: { + plugins: { + annotation: { + annotations: { + annotation + } + } + } + } +}; +/* */ + +const actions = [ + { + name: 'Toggle annotation', + handler: function(chart) { + const visible = chart.isDatasetVisible(1); + if (visible) { + chart.options.scales.x.max = 'July'; + } else { + chart.options.scales.x.max = undefined; + } + chart.setDatasetVisibility(1, !visible); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/types/point.md b/docs/samples/point/basic.md similarity index 77% rename from docs/samples/types/point.md rename to docs/samples/point/basic.md index 2a6dd09cf..501e608d4 100644 --- a/docs/samples/types/point.md +++ b/docs/samples/point/basic.md @@ -1,7 +1,7 @@ -# Point +# Basic ```js chart-editor -// +// const DATA_COUNT = 8; const MIN = 10; const MAX = 100; @@ -18,11 +18,11 @@ const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; const data = { labels: labels, datasets: [{ - data: Utils.numbers(numberCfg), + data: Utils.numbers(numberCfg) }, { - data: Utils.numbers(numberCfg), + data: Utils.numbers(numberCfg) }, { - data: Utils.numbers(numberCfg), + data: Utils.numbers(numberCfg) }] }; // @@ -30,10 +30,10 @@ const data = { // const annotation1 = { type: 'point', - scaleID: 'y', - borderWidth: 3, + backgroundColor: 'rgba(0, 255, 255, 0.4)', borderColor: 'black', - backgroundColor: 'rgba(0,255,255,0.4)', + borderWidth: 3, + scaleID: 'y', xValue: (ctx) => value(ctx, 0, 2, 'x'), yValue: (ctx) => value(ctx, 0, 2, 'y') }; @@ -42,16 +42,31 @@ const annotation1 = { // const annotation2 = { type: 'point', - scaleID: 'y', - borderWidth: 5, - borderColor: 'red', backgroundColor: 'transparent', + borderColor: 'red', + borderWidth: 5, + pointStyle: 'triangle', radius: 25, + scaleID: 'y', xValue: (ctx) => value(ctx, 1, 4, 'x'), yValue: (ctx) => value(ctx, 1, 4, 'y') }; // +// +const annotation3 = { + type: 'point', + borderColor: 'orange', + borderWidth: 3, + drawTime: 'beforeDraw', + pointStyle: 'star', + radius: 25, + scaleID: 'y', + xValue: (ctx) => value(ctx, 1, 6, 'x'), + yValue: (ctx) => value(ctx, 1, 6, 'y') +}; +// + /* */ const config = { type: 'line', @@ -61,15 +76,16 @@ const config = { annotation: { annotations: { annotation1, - annotation2 + annotation2, + annotation3 } } - }, + } } }; /* */ -// +// function value(ctx, datasetIndex, index, prop) { const meta = ctx.chart.getDatasetMeta(datasetIndex); const parsed = meta.controller.getParsed(index); @@ -77,14 +93,13 @@ function value(ctx, datasetIndex, index, prop) { } // -var actions = [ +const actions = [ { name: 'Randomize', handler: function(chart) { chart.data.datasets.forEach(function(dataset, i) { dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); }); - chart.update(); } }, @@ -95,7 +110,6 @@ var actions = [ chart.data.datasets.forEach(function(dataset, i) { dataset.data.push(Utils.rand(MIN, MAX)); }); - chart.update(); } }, @@ -106,7 +120,6 @@ var actions = [ chart.data.datasets.forEach(function(dataset, i) { dataset.data.shift(); }); - chart.update(); } } diff --git a/docs/samples/point/combined.md b/docs/samples/point/combined.md new file mode 100644 index 000000000..9c786643c --- /dev/null +++ b/docs/samples/point/combined.md @@ -0,0 +1,137 @@ +# Combined annotations + +```js chart-editor +// +const DATA_COUNT = 12; +const MIN = 10; +const MAX = 100; + +Utils.srand(8); + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + datasets: [{ + data: Utils.numbers(numberCfg) + }, { + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation1 = { + type: 'line', + borderColor: 'green', + borderDash: [6, 6], + borderWidth: 3, + label: { + enabled: true, + backgroundColor: 'lightGreen', + borderRadius: 0, + color: 'green', + content: 'Project timeline' + }, + arrowHeads: { + end: { + enabled: true, + fill: true, + borderColor: 'green' + } + }, + xMax: 10.5, + xMin: 2.5, + xScaleID: 'x', + yMax: 110, + yMin: 110, + yScaleID: 'y' +}; +// + +// +const annotation2 = { + type: 'line', + borderColor: 'green', + borderDash: [6, 6], + borderWidth: 1, + xMax: 2.5, + xMin: 2.5, + xScaleID: 'x', + yMax: 0, + yMin: 110, + yScaleID: 'y' +}; +// + +// +const annotation3 = { + type: 'line', + borderColor: 'green', + borderDash: [6, 6], + borderWidth: 1, + xMax: 10.5, + xMin: 10.5, + xScaleID: 'x', + yMax: 0, + yMin: 110, + yScaleID: 'y' +}; +// + +// +const annotation4 = { + type: 'point', + backgroundColor: 'green', + borderWidth: 0, + xValue: 2.5, + xScaleID: 'x', + yValue: 110, + yScaleID: 'y' +}; +// + +/* */ +const config = { + type: 'bar', + data, + options: { + scale: { + y: { + beginAtZero: true, + max: 120, + min: 0 + } + }, + plugins: { + annotation: { + drawTime: 'beforeDraw', + annotations: { + annotation1, + annotation2, + annotation3, + annotation4 + } + } + } + } +}; +/* */ + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/point/outsideChartArea.md b/docs/samples/point/outsideChartArea.md new file mode 100644 index 000000000..916e41803 --- /dev/null +++ b/docs/samples/point/outsideChartArea.md @@ -0,0 +1,106 @@ +# Points outside of chart area + +```js chart-editor +// +const DATA_COUNT = 12; +const MIN = 10; +const MAX = 100; + +Utils.srand(8); + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + datasets: [{ + data: Utils.numbers(numberCfg) + }, { + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation1 = { + type: 'point', + backgroundColor: 'lime', + borderColor: 'black', + borderWidth: 1, + pointStyle: 'triangle', + radius: 15, + xValue: 3, + xScaleID: 'x', + yAdjust: 5, + yValue: 0, + yScaleID: 'y' +}; +// + +// +const annotation2 = { + type: 'point', + backgroundColor: 'lime', + borderColor: 'black', + borderWidth: 1, + pointStyle: 'triangle', + radius: 15, + rotation: 180, + xValue: 3, + xScaleID: 'x', + yAdjust: -5, + yValue: 100, + yScaleID: 'y' +}; +// + +/* */ +const config = { + type: 'bar', + data, + options: { + layout: { + padding: { + top: 16 + } + }, + scale: { + y: { + beginAtZero: true, + max: 100, + min: 0 + } + }, + plugins: { + annotation: { + clip: false, + drawTime: 'afterDraw', + annotations: { + annotation1, + annotation2 + } + } + } + } +}; +/* */ + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + const xValue = Utils.rand(0, DATA_COUNT - 1); + chart.options.plugins.annotation.annotations.annotation1.xValue = xValue; + chart.options.plugins.annotation.annotations.annotation2.xValue = xValue; + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/point/shadow.md b/docs/samples/point/shadow.md new file mode 100644 index 000000000..603c7b71d --- /dev/null +++ b/docs/samples/point/shadow.md @@ -0,0 +1,144 @@ +# Shadow + +```js chart-editor +// +const DATA_COUNT = 8; +const MIN = 10; +const MAX = 100; + +Utils.srand(5); + +const labels = []; +for (let i = 0; i < DATA_COUNT; ++i) { + labels.push('' + i); +} + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: labels, + datasets: [{ + data: Utils.numbers(numberCfg) + }, { + data: Utils.numbers(numberCfg) + }, { + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation1 = { + type: 'point', + backgroundColor: 'rgba(0, 255, 255, 0.4)', + backgroundShadowColor: 'black', + borderColor: 'black', + borderWidth: 3, + scaleID: 'y', + shadowBlur: 3, + shadowOffsetX: 3, + shadowOffsetY: 10, + xValue: (ctx) => value(ctx, 0, 2, 'x'), + yValue: (ctx) => value(ctx, 0, 2, 'y') +}; +// + +// +const annotation2 = { + type: 'point', + backgroundColor: 'rgba(245, 245, 245, 0.5)', + borderColor: 'red', + borderShadowColor: 'gray', + borderWidth: 5, + pointStyle: 'triangle', + radius: 25, + scaleID: 'y', + shadowBlur: 3, + shadowOffsetX: 3, + shadowOffsetY: 10, + xValue: (ctx) => value(ctx, 1, 4, 'x'), + yValue: (ctx) => value(ctx, 1, 4, 'y') +}; +// + +// +const annotation3 = { + type: 'point', + borderColor: 'orange', + borderShadowColor: 'black', + borderWidth: 3, + drawTime: 'beforeDraw', + pointStyle: 'star', + radius: 25, + scaleID: 'y', + shadowBlur: 3, + shadowOffsetX: 3, + shadowOffsetY: 10, + xValue: (ctx) => value(ctx, 1, 6, 'x'), + yValue: (ctx) => value(ctx, 1, 6, 'y') +}; +// + +/* */ +const config = { + type: 'line', + data, + options: { + plugins: { + annotation: { + annotations: { + annotation1, + annotation2, + annotation3 + } + } + } + } +}; +/* */ + +// +function value(ctx, datasetIndex, index, prop) { + const meta = ctx.chart.getDatasetMeta(datasetIndex); + const parsed = meta.controller.getParsed(index); + return parsed ? parsed[prop] : NaN; +} +// + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Add data', + handler: function(chart) { + chart.data.labels.push(chart.data.labels.length); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.push(Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Remove data', + handler: function(chart) { + chart.data.labels.shift(); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.shift(); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config +}; +``` diff --git a/docs/samples/polygon/basic.md b/docs/samples/polygon/basic.md new file mode 100644 index 000000000..7ac8b92dd --- /dev/null +++ b/docs/samples/polygon/basic.md @@ -0,0 +1,147 @@ +# Basic + +```js chart-editor +// +const DATA_COUNT = 8; +const MIN = 10; +const MAX = 100; + +Utils.srand(5); + +const labels = []; +for (let i = 0; i < DATA_COUNT; ++i) { + labels.push('' + i); +} + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: labels, + datasets: [{ + data: Utils.numbers(numberCfg) + }, { + data: Utils.numbers(numberCfg) + }, { + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation1 = { + type: 'polygon', + backgroundColor: 'rgba(0, 255, 255, 0.4)', + borderColor: 'black', + borderWidth: 3, + radius: 25, + scaleID: 'y', + xValue: (ctx) => value(ctx, 0, 2, 'x'), + yValue: (ctx) => value(ctx, 0, 2, 'y') +}; +// + +// +const annotation2 = { + type: 'polygon', + backgroundColor: 'transparent', + borderColor: 'red', + borderWidth: 5, + radius: 25, + scaleID: 'y', + sides: 5, + xValue: (ctx) => value(ctx, 1, 4, 'x'), + yValue: (ctx) => value(ctx, 1, 4, 'y') +}; +// + +// +const annotation3 = { + type: 'polygon', + backgroundColor: 'transparent', + borderColor: 'gray', + borderWidth: 3, + radius: 30, + sides: 8, + scaleID: 'y', + xValue: (ctx) => value(ctx, 1, 6, 'x'), + yValue: (ctx) => value(ctx, 1, 6, 'y') +}; +// + +/* */ +const config = { + type: 'line', + data, + options: { + plugins: { + annotation: { + annotations: { + annotation1, + annotation2, + annotation3 + } + } + } + } +}; +/* */ + +// +function value(ctx, datasetIndex, index, prop) { + const meta = ctx.chart.getDatasetMeta(datasetIndex); + const parsed = meta.controller.getParsed(index); + return parsed ? parsed[prop] : NaN; +} +// + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Add data', + handler: function(chart) { + chart.data.labels.push(chart.data.labels.length); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.push(Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Remove data', + handler: function(chart) { + chart.data.labels.shift(); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.shift(); + }); + chart.update(); + } + }, + { + name: 'Add a side to annotation 1', + handler: function(chart) { + chart.options.plugins.annotation.annotations.annotation1.sides++; + chart.update(); + } + }, + { + name: 'Remove a side from annotation 1', + handler: function(chart) { + chart.options.plugins.annotation.annotations.annotation1.sides--; + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config +}; +``` diff --git a/docs/samples/polygon/outsideChartArea.md b/docs/samples/polygon/outsideChartArea.md new file mode 100644 index 000000000..141316dda --- /dev/null +++ b/docs/samples/polygon/outsideChartArea.md @@ -0,0 +1,119 @@ +# Polygons outside of chart area + +```js chart-editor +// +const DATA_COUNT = 12; +const MIN = 10; +const MAX = 100; + +Utils.srand(8); + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + datasets: [{ + data: Utils.numbers(numberCfg) + }, { + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation1 = { + type: 'line', + borderColor: 'lime', + borderWidth: 2, + scaleID: 'x', + value: 3 +}; +// + +// +const annotation2 = { + type: 'polygon', + backgroundColor: 'lime', + borderColor: 'black', + borderWidth: 1, + radius: 15, + sides: 5, + xValue: 3, + xScaleID: 'x', + yAdjust: 5, + yValue: 0, + yScaleID: 'y' +}; +// + +// +const annotation3 = { + type: 'polygon', + backgroundColor: 'lime', + borderColor: 'black', + borderWidth: 1, + pointStyle: 'triangle', + radius: 15, + rotation: 180, + sides: 5, + xValue: 3, + xScaleID: 'x', + yAdjust: -5, + yValue: 100, + yScaleID: 'y' +}; +// + +/* */ +const config = { + type: 'bar', + data, + options: { + layout: { + padding: { + top: 20 + } + }, + scale: { + y: { + beginAtZero: true, + max: 100, + min: 0 + } + }, + plugins: { + annotation: { + clip: false, + drawTime: 'afterDraw', + annotations: { + annotation1, + annotation2, + annotation3 + } + } + } + } +}; +/* */ + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + const xValue = Utils.rand(0, DATA_COUNT - 1); + chart.options.plugins.annotation.annotations.annotation1.value = xValue; + chart.options.plugins.annotation.annotations.annotation2.xValue = xValue; + chart.options.plugins.annotation.annotations.annotation3.xValue = xValue; + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/polygon/shadow.md b/docs/samples/polygon/shadow.md new file mode 100644 index 000000000..054c6f273 --- /dev/null +++ b/docs/samples/polygon/shadow.md @@ -0,0 +1,182 @@ +# Shadow + +```js chart-editor +// +const DATA_COUNT = 8; +const MIN = 10; +const MAX = 100; + +Utils.srand(5); + +const labels = []; +for (let i = 0; i < DATA_COUNT; ++i) { + labels.push('' + i); +} + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: labels, + datasets: [{ + data: Utils.numbers(numberCfg) + }, { + data: Utils.numbers(numberCfg) + }, { + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation1 = { + type: 'polygon', + backgroundColor: 'white', + backgroundShadowColor: 'black', + borderColor: 'red', + borderJoinStyle: 'round', + borderWidth: 7, + radius: 40, + rotation: 180, + shadowBlur: 3, + shadowOffsetX: 3, + shadowOffsetY: 10, + xValue: (ctx) => value(ctx, 0, 2, 'x'), + yValue: (ctx) => value(ctx, 0, 2, 'y') +}; +// + +// +const annotation2 = { + type: 'polygon', + backgroundColor: 'white', + backgroundShadowColor: 'black', + borderColor: 'red', + borderJoinStyle: 'round', + borderWidth: 7, + radius: 40, + shadowBlur: 3, + shadowOffsetX: 3, + shadowOffsetY: 10, + xValue: (ctx) => value(ctx, 0, 4, 'x'), + yValue: (ctx) => value(ctx, 0, 4, 'y') +}; +// + +// +const annotation3 = { + type: 'label', + color: 'black', + content: '!', + font: { + size: 40, + family: 'Arial', + weight: 'bold' + }, + xValue: (ctx) => value(ctx, 0, 4, 'x'), + yValue: (ctx) => value(ctx, 0, 4, 'y') +}; +// + +// +const annotation4 = { + type: 'polygon', + backgroundColor: 'red', + backgroundShadowColor: 'black', + borderColor: 'white', + borderWidth: 4, + radius: 40, + rotation: 22.5, + shadowBlur: 3, + shadowOffsetX: 3, + shadowOffsetY: 10, + sides: 8, + xValue: (ctx) => value(ctx, 0, 6, 'x'), + yValue: (ctx) => value(ctx, 0, 6, 'y') +}; +// + +// +const annotation5 = { + type: 'label', + color: 'white', + content: 'STOP', + font: { + size: 24 + }, + xValue: (ctx) => value(ctx, 0, 6, 'x'), + yValue: (ctx) => value(ctx, 0, 6, 'y') +}; +// + +/* */ +const config = { + type: 'line', + data, + options: { + scales: { + y: { + beginAtZero: true, + max: 120, + min: 0 + } + }, + plugins: { + annotation: { + annotations: { + annotation1, + annotation2, + annotation3, + annotation4, + annotation5 + } + } + } + } +}; +/* */ + +// +function value(ctx, datasetIndex, index, prop) { + const meta = ctx.chart.getDatasetMeta(datasetIndex); + const parsed = meta.controller.getParsed(index); + return parsed ? parsed[prop] : NaN; +} +// + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Add data', + handler: function(chart) { + chart.data.labels.push(chart.data.labels.length); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.push(Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Remove data', + handler: function(chart) { + chart.data.labels.shift(); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.shift(); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config +}; +``` diff --git a/docs/samples/polygon/stop.md b/docs/samples/polygon/stop.md new file mode 100644 index 000000000..9ec51c3fa --- /dev/null +++ b/docs/samples/polygon/stop.md @@ -0,0 +1,170 @@ +# Stop + +```js chart-editor +// +const DATA_COUNT = 8; +const MIN = 10; +const MAX = 100; + +Utils.srand(5); + +const labels = []; +for (let i = 0; i < DATA_COUNT; ++i) { + labels.push('' + i); +} + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX}; + +const data = { + labels: labels, + datasets: [{ + data: Utils.numbers(numberCfg) + }, { + data: Utils.numbers(numberCfg) + }, { + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation1 = { + type: 'polygon', + backgroundColor: 'white', + borderColor: 'red', + borderJoinStyle: 'round', + borderWidth: 7, + radius: 40, + rotation: 180, + xValue: (ctx) => value(ctx, 0, 2, 'x'), + yValue: (ctx) => value(ctx, 0, 2, 'y') +}; +// + +// +const annotation2 = { + type: 'polygon', + backgroundColor: 'white', + borderColor: 'red', + borderJoinStyle: 'round', + borderWidth: 7, + radius: 40, + xValue: (ctx) => value(ctx, 0, 4, 'x'), + yValue: (ctx) => value(ctx, 0, 4, 'y') +}; +// + +// +const annotation3 = { + type: 'label', + color: 'black', + content: '!', + font: { + size: 40, + family: 'Arial', + weight: 'bold' + }, + xValue: (ctx) => value(ctx, 0, 4, 'x'), + yValue: (ctx) => value(ctx, 0, 4, 'y') +}; +// + +// +const annotation4 = { + type: 'polygon', + backgroundColor: 'red', + borderColor: 'white', + borderWidth: 4, + radius: 40, + rotation: 22.5, + sides: 8, + xValue: (ctx) => value(ctx, 0, 6, 'x'), + yValue: (ctx) => value(ctx, 0, 6, 'y') +}; +// + +// +const annotation5 = { + type: 'label', + color: 'white', + content: 'STOP', + font: { + size: 24 + }, + xValue: (ctx) => value(ctx, 0, 6, 'x'), + yValue: (ctx) => value(ctx, 0, 6, 'y') +}; +// + +/* */ +const config = { + type: 'line', + data, + options: { + scales: { + y: { + beginAtZero: true, + max: 120, + min: 0 + } + }, + plugins: { + annotation: { + annotations: { + annotation1, + annotation2, + annotation3, + annotation4, + annotation5 + } + } + } + } +}; +/* */ + +// +function value(ctx, datasetIndex, index, prop) { + const meta = ctx.chart.getDatasetMeta(datasetIndex); + const parsed = meta.controller.getParsed(index); + return parsed ? parsed[prop] : NaN; +} +// + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Add data', + handler: function(chart) { + chart.data.labels.push(chart.data.labels.length); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.push(Utils.rand(MIN, MAX)); + }); + chart.update(); + } + }, + { + name: 'Remove data', + handler: function(chart) { + chart.data.labels.shift(); + chart.data.datasets.forEach(function(dataset, i) { + dataset.data.shift(); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config +}; +``` diff --git a/karma.conf.js b/karma.conf.js index e601e25ff..daf662ef2 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,3 +1,4 @@ +const jasmineSeedReporter = require('./test/seed-reporter'); const istanbul = require('rollup-plugin-istanbul'); const json = require('@rollup/plugin-json'); const resolve = require('@rollup/plugin-node-resolve').default; @@ -27,7 +28,8 @@ module.exports = function(karma) { karma.set({ frameworks: ['jasmine'], - reporters: ['progress', 'kjhtml'], + plugins: ['karma-*', jasmineSeedReporter], + reporters: ['progress', 'kjhtml', 'jasmine-seed'], browsers: (args.browsers || 'chrome,firefox').split(','), logLevel: karma.LOG_INFO, @@ -44,7 +46,10 @@ module.exports = function(karma) { chrome: { base: 'Chrome', flags: [ - '--disable-accelerated-2d-canvas' + '--disable-accelerated-2d-canvas', + '--disable-background-timer-throttling', + '--disable-backgrounding-occluded-windows', + '--disable-renderer-backgrounding' ] }, firefox: { diff --git a/old_samples/.eslintrc.yml b/old_samples/.eslintrc.yml deleted file mode 100644 index e0de7c41c..000000000 --- a/old_samples/.eslintrc.yml +++ /dev/null @@ -1,8 +0,0 @@ -globals: - Chart: true - randomScalingFactor: true - -rules: - indent: ["error", "tab", {flatTernaryExpressions: true}] - no-console: "off" - consistent-this: "off" diff --git a/old_samples/animation.html b/old_samples/animation.html deleted file mode 100644 index 2dd3bf672..000000000 --- a/old_samples/animation.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - Bar Chart - - - - - - - -
-
- -
- - - - diff --git a/old_samples/autoRotation.html b/old_samples/autoRotation.html deleted file mode 100644 index 074b91097..000000000 --- a/old_samples/autoRotation.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - -AutoRotation on Bar Chart - - - - - - - -
- -
- - - - - - - diff --git a/old_samples/bar.html b/old_samples/bar.html deleted file mode 100644 index 856257e5a..000000000 --- a/old_samples/bar.html +++ /dev/null @@ -1,209 +0,0 @@ - - - - - Bar Chart - - - - - - - -
- -
- - - - - - - - - diff --git a/old_samples/box.html b/old_samples/box.html deleted file mode 100644 index e9ed08117..000000000 --- a/old_samples/box.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - Scatter Chart - - - - - - -
-
- -
-
- - - - diff --git a/old_samples/bubble.html b/old_samples/bubble.html deleted file mode 100644 index 3febedcd0..000000000 --- a/old_samples/bubble.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - Bubble Chart - - - - - - - -
- -
- - - - - - - - - \ No newline at end of file diff --git a/old_samples/combo-bar-line.html b/old_samples/combo-bar-line.html deleted file mode 100644 index bde537b01..000000000 --- a/old_samples/combo-bar-line.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - Combo Bar-Line Chart - - - - - - - -
- -
- - - - - diff --git a/old_samples/ellipse.html b/old_samples/ellipse.html deleted file mode 100644 index 4fd7e5e6d..000000000 --- a/old_samples/ellipse.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - Scatter Chart - - - - - - -
-
- -
-
- - - - diff --git a/old_samples/horizontal-line.html b/old_samples/horizontal-line.html deleted file mode 100644 index 36cddaffb..000000000 --- a/old_samples/horizontal-line.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - Scatter Chart - - - - - - -
-
- -
-
- - - - diff --git a/old_samples/imageLabels.html b/old_samples/imageLabels.html deleted file mode 100644 index f013fb8f1..000000000 --- a/old_samples/imageLabels.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - Scatter Chart - - - - - - -
-
- -
-
- - - - diff --git a/old_samples/labels.html b/old_samples/labels.html deleted file mode 100644 index d2a9dc8ed..000000000 --- a/old_samples/labels.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - Scatter Chart - - - - - - -
-
- -
-
- - - - diff --git a/old_samples/line-logarithmic.html b/old_samples/line-logarithmic.html deleted file mode 100644 index a1803da63..000000000 --- a/old_samples/line-logarithmic.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - Logarithmic Line Chart - - - - - - - -
- -
- - - - - diff --git a/old_samples/line-time-scale.html b/old_samples/line-time-scale.html deleted file mode 100644 index 31989f00a..000000000 --- a/old_samples/line-time-scale.html +++ /dev/null @@ -1,257 +0,0 @@ - - - - - Line Chart - - - - - - - - -
- -
-
-
- - - - - - - - - diff --git a/old_samples/pie.html b/old_samples/pie.html deleted file mode 100644 index 0c4df87b8..000000000 --- a/old_samples/pie.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - Pie Chart - - - - - - -
- -
- - - - - - - \ No newline at end of file diff --git a/old_samples/point.html b/old_samples/point.html deleted file mode 100644 index 1e88af20f..000000000 --- a/old_samples/point.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - Scatter Chart - - - - - - -
-
- -
-
- - - - diff --git a/old_samples/polar-area.html b/old_samples/polar-area.html deleted file mode 100644 index 95133d6b9..000000000 --- a/old_samples/polar-area.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - Polar Area Chart - - - - - - - -
- -
- - - - - - - \ No newline at end of file diff --git a/old_samples/radar.html b/old_samples/radar.html deleted file mode 100644 index 2c8743215..000000000 --- a/old_samples/radar.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - Radar Chart - - - - - - - -
- -
- - - - - - - - - \ No newline at end of file diff --git a/old_samples/updates.html b/old_samples/updates.html deleted file mode 100644 index ddf804772..000000000 --- a/old_samples/updates.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - Scatter Chart - - - - - - -
- -
- - - - - - - diff --git a/package-lock.json b/package-lock.json index fbc08d8c0..428bc2ed1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,39 +1,39 @@ { "name": "chartjs-plugin-annotation", - "version": "1.0.2", + "version": "1.2.2", "lockfileVersion": 1, "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.16.0" } }, "@babel/compat-data": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", - "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", "dev": true }, "@babel/core": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", - "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", - "@babel/helper-module-transforms": "^7.15.0", - "@babel/helpers": "^7.14.8", - "@babel/parser": "^7.15.0", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.5.tgz", + "integrity": "sha512-wUcenlLzuWMZ9Zt8S0KmFwGlH6QKRh3vsm/dhDA3CHkiTA45YuG1XkHRcNRl73EFPXDp/d5kVOU0/y7x2w6OaQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.5", + "@babel/helper-compilation-targets": "^7.16.3", + "@babel/helper-module-transforms": "^7.16.5", + "@babel/helpers": "^7.16.5", + "@babel/parser": "^7.16.5", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.5", + "@babel/types": "^7.16.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -42,15 +42,6 @@ "source-map": "^0.5.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -66,12 +57,12 @@ } }, "@babel/generator": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", - "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.5.tgz", + "integrity": "sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA==", "dev": true, "requires": { - "@babel/types": "^7.15.0", + "@babel/types": "^7.16.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -85,33 +76,33 @@ } }, "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", + "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", - "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.5.tgz", + "integrity": "sha512-3JEA9G5dmmnIWdzaT9d0NmFRgYnWUThLsDaL7982H0XqqWr56lRrsmwheXFMjR+TMl7QMBb6mzy9kvgr1lRLUA==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-explode-assignable-expression": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-compilation-targets": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", - "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", + "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", "dev": true, "requires": { - "@babel/compat-data": "^7.15.0", + "@babel/compat-data": "^7.16.0", "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", + "browserslist": "^4.17.5", "semver": "^6.3.0" }, "dependencies": { @@ -124,33 +115,34 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz", - "integrity": "sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.5.tgz", + "integrity": "sha512-NEohnYA7mkB8L5JhU7BLwcBdU3j83IziR9aseMueWGeAjblbul3zzb8UvJ3a1zuBiqCMObzCJHFqKIQE6hTVmg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.15.0", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.0", - "@babel/helper-split-export-declaration": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-environment-visitor": "^7.16.5", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-member-expression-to-functions": "^7.16.5", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.5", + "@babel/helper-split-export-declaration": "^7.16.0" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", + "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-annotate-as-pure": "^7.16.0", "regexpu-core": "^4.7.1" } }, "@babel/helper-define-polyfill-provider": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", - "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz", + "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.13.0", @@ -171,147 +163,157 @@ } } }, + "@babel/helper-environment-visitor": { + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.5.tgz", + "integrity": "sha512-ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, "@babel/helper-explode-assignable-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", - "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", + "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" } }, "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" } }, "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", - "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.5.tgz", + "integrity": "sha512-7fecSXq7ZrLE+TWshbGT+HyCLkxloWNhTbU2QM1NTI/tDqyf0oZiMcEfYtDuUDCo528EOlt39G1rftea4bRZIw==", "dev": true, "requires": { - "@babel/types": "^7.15.0" + "@babel/types": "^7.16.0" } }, "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" } }, "@babel/helper-module-transforms": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", - "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.5.tgz", + "integrity": "sha512-CkvMxgV4ZyyioElFwcuWnDCcNIeyqTkCm9BxXZi73RR1ozqlpboqsbGUNvRTflgZtFbbJ1v5Emvm+lkjMYY/LQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.0", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.9", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/helper-environment-visitor": "^7.16.5", + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.5", + "@babel/types": "^7.16.0" } }, "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" } }, "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz", + "integrity": "sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==", "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", - "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.5.tgz", + "integrity": "sha512-X+aAJldyxrOmN9v3FKp+Hu1NO69VWgYgDGq6YDykwRPzxs5f2N+X988CBXS7EQahDU+Vpet5QYMqLk+nsp+Qxw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-wrap-function": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-wrap-function": "^7.16.5", + "@babel/types": "^7.16.0" } }, "@babel/helper-replace-supers": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", - "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.5.tgz", + "integrity": "sha512-ao3seGVa/FZCMCCNDuBcqnBFSbdr8N2EW35mzojx3TwfIbdPmNK+JV6+2d5bR0Z71W5ocLnQp9en/cTF7pBJiQ==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.15.0", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/helper-environment-visitor": "^7.16.5", + "@babel/helper-member-expression-to-functions": "^7.16.5", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.5", + "@babel/types": "^7.16.0" } }, "@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", "dev": true, "requires": { - "@babel/types": "^7.14.8" + "@babel/types": "^7.16.0" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" } }, "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true }, "@babel/helper-validator-option": { @@ -321,35 +323,35 @@ "dev": true }, "@babel/helper-wrap-function": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", - "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.5.tgz", + "integrity": "sha512-2J2pmLBqUqVdJw78U0KPNdeE2qeuIyKoG4mKV7wAq3mc4jJG282UgjZw4ZYDnqiWQuS3Y3IYdF/AQ6CpyBV3VA==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-function-name": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.5", + "@babel/types": "^7.16.0" } }, "@babel/helpers": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", - "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.5.tgz", + "integrity": "sha512-TLgi6Lh71vvMZGEkFuIxzaPsyeYCHQ5jJOOX1f0xXn0uciFuE8cEk0wyBquMcCxBXZ5BJhE2aUB7pnWTD150Tw==", "dev": true, "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.5", + "@babel/types": "^7.16.0" } }, "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -413,189 +415,198 @@ } }, "@babel/parser": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", - "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", + "version": "7.16.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.6.tgz", + "integrity": "sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ==", "dev": true }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz", + "integrity": "sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", + "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0" } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz", - "integrity": "sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.5.tgz", + "integrity": "sha512-C/FX+3HNLV6sz7AqbTQqEo1L9/kfrKjxcVtgyBCmvIgOjvuBVUWooDoi7trsLxOzCEo5FccjRvKHkfDsJFZlfA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.5", + "@babel/helper-remap-async-to-generator": "^7.16.5", "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", - "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.5.tgz", + "integrity": "sha512-pJD3HjgRv83s5dv1sTnDbZOaTjghKEz8KUn1Kbh2eAIRhGuyQ1XSeI4xVXU3UlIEVA3DAyIdxqT1eRn7Wcn55A==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.16.5", + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-proposal-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", - "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.5.tgz", + "integrity": "sha512-EEFzuLZcm/rNJ8Q5krK+FRKdVkd6FjfzT9tuSZql9sQn64K0hHA2KLJ0DqVot9/iV6+SsuadC5yI39zWnm+nmQ==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.16.5", + "@babel/helper-plugin-utils": "^7.16.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-proposal-decorators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz", - "integrity": "sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.5.tgz", + "integrity": "sha512-XAiZll5oCdp2Dd2RbXA3LVPlFyIRhhcQy+G34p9ePpl6mjFkbqHAYHovyw2j5mqUrlBf0/+MtOIJ3JGYtz8qaw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-decorators": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.16.5", + "@babel/helper-plugin-utils": "^7.16.5", + "@babel/plugin-syntax-decorators": "^7.16.5" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", - "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.5.tgz", + "integrity": "sha512-P05/SJZTTvHz79LNYTF8ff5xXge0kk5sIIWAypcWgX4BTRUgyHc8wRxJ/Hk+mU0KXldgOOslKaeqnhthcDJCJQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", - "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.5.tgz", + "integrity": "sha512-i+sltzEShH1vsVydvNaTRsgvq2vZsfyrd7K7vPLUU/KgS0D5yZMe6uipM0+izminnkKrEfdUnz7CxMRb6oHZWw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", - "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.5.tgz", + "integrity": "sha512-QQJueTFa0y9E4qHANqIvMsuxM/qcLQmKttBACtPCQzGUEizsXDACGonlPiSwynHfOa3vNw0FPMVvQzbuXwh4SQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.5", "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", - "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.5.tgz", + "integrity": "sha512-xqibl7ISO2vjuQM+MzR3rkd0zfNWltk7n9QhaD8ghMmMceVguYrNDt7MikRyj4J4v3QehpnrU8RYLnC7z/gZLA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", - "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.5.tgz", + "integrity": "sha512-YwMsTp/oOviSBhrjwi0vzCUycseCYwoXnLiXIL3YNjHSMBHicGTz7GjVU/IGgz4DtOEXBdCNG72pvCX22ehfqg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", - "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.5.tgz", + "integrity": "sha512-DvB9l/TcsCRvsIV9v4jxR/jVP45cslTVC0PMVHvaJhhNuhn2Y1SOhCSFlPK777qLB5wb8rVDaNoqMTyOqtY5Iw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", - "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.5.tgz", + "integrity": "sha512-UEd6KpChoyPhCoE840KRHOlGhEZFutdPDMGj+0I56yuTTOaT51GzmnEl/0uT41fB/vD2nT+Pci2KjezyE3HmUw==", "dev": true, "requires": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.3", + "@babel/helper-plugin-utils": "^7.16.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.5" + "@babel/plugin-transform-parameters": "^7.16.5" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", - "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.5.tgz", + "integrity": "sha512-ihCMxY1Iljmx4bWy/PIMJGXN4NS4oUj1MKynwO07kiKms23pNvIn1DMB92DNB2R0EA882sw0VXIelYGdtF7xEQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.5.tgz", + "integrity": "sha512-kzdHgnaXRonttiTfKYnSVafbWngPPr2qKw9BWYBESl91W54e+9R5pP70LtWxV56g0f05f/SQrwHYkfvbwcdQ/A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", - "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.5.tgz", + "integrity": "sha512-+yFMO4BGT3sgzXo+lrq7orX5mAZt57DwUK6seqII6AcJnJOIhBJ8pzKH47/ql/d426uQ7YhN8DpUFirQzqYSUA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.16.5", + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.5.tgz", + "integrity": "sha512-+YGh5Wbw0NH3y/E5YMu6ci5qTDmAEVNoZ3I54aB6nVEOZ5BQ7QJlwKq5pYVucQilMByGn/bvX0af+uNaPRCabA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-create-class-features-plugin": "^7.16.5", + "@babel/helper-plugin-utils": "^7.16.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", - "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.5.tgz", + "integrity": "sha512-s5sKtlKQyFSatt781HQwv1hoM5BQ9qRH30r+dK56OLDsHmV74mzwJNX7R1yMuE7VZKG5O6q/gmOGSAO6ikTudg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-syntax-async-generators": { @@ -626,12 +637,12 @@ } }, "@babel/plugin-syntax-decorators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz", - "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.5.tgz", + "integrity": "sha512-3CbYTXfflvyy8O819uhZcZSMedZG4J8yS/NLTc/8T24M9ke1GssTGvg8VZu3Yn2LU5IyQSv1CmPq0a9JWHXJwg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-syntax-dynamic-import": { @@ -662,12 +673,12 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", - "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.5.tgz", + "integrity": "sha512-42OGssv9NPk4QHKVgIHlzeLgPOW5rGgfV5jzG90AhcXXIv6hu/eqj63w4VgvRxdvZY3AlYeDgPiSJ3BqAd1Y6Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -743,55 +754,56 @@ } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", - "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.5.tgz", + "integrity": "sha512-8bTHiiZyMOyfZFULjsCnYOWG059FVMes0iljEHSfARhNgFfpsqE92OrCffv3veSw9rwMkYcFe9bj0ZoXU2IGtQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.5.tgz", + "integrity": "sha512-TMXgfioJnkXU+XRoj7P2ED7rUm5jbnDWwlCuFVTpQboMfbSya5WrmubNBAMlk7KXvywpo8rd8WuYZkis1o2H8w==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.16.5", + "@babel/helper-remap-async-to-generator": "^7.16.5" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", - "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.5.tgz", + "integrity": "sha512-BxmIyKLjUGksJ99+hJyL/HIxLIGnLKtw772zYDER7UuycDZ+Xvzs98ZQw6NGgM2ss4/hlFAaGiZmMNKvValEjw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz", - "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.5.tgz", + "integrity": "sha512-JxjSPNZSiOtmxjX7PBRBeRJTUKTyJ607YUYeT0QJCNdsedOe+/rXITjP08eG8xUpsLfPirgzdCFN+h0w6RI+pQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-classes": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz", - "integrity": "sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.5.tgz", + "integrity": "sha512-DzJ1vYf/7TaCYy57J3SJ9rV+JEuvmlnvvyvYKFbk5u46oQbBvuB9/0w+YsVsxkOv8zVWKpDmUoj4T5ILHoXevA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-environment-visitor": "^7.16.5", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-plugin-utils": "^7.16.5", + "@babel/helper-replace-supers": "^7.16.5", + "@babel/helper-split-export-declaration": "^7.16.0", "globals": "^11.1.0" }, "dependencies": { @@ -804,210 +816,210 @@ } }, "@babel/plugin-transform-computed-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", - "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.5.tgz", + "integrity": "sha512-n1+O7xtU5lSLraRzX88CNcpl7vtGdPakKzww74bVwpAIRgz9JVLJJpOLb0uYqcOaXVM0TL6X0RVeIJGD2CnCkg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-destructuring": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", - "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.5.tgz", + "integrity": "sha512-GuRVAsjq+c9YPK6NeTkRLWyQskDC099XkBSVO+6QzbnOnH2d/4mBVXYStaPrZD3dFRfg00I6BFJ9Atsjfs8mlg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", - "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.5.tgz", + "integrity": "sha512-iQiEMt8Q4/5aRGHpGVK2Zc7a6mx7qEAO7qehgSug3SDImnuMzgmm/wtJALXaz25zUj1PmnNHtShjFgk4PDx4nw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", - "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.5.tgz", + "integrity": "sha512-81tijpDg2a6I1Yhj4aWY1l3O1J4Cg/Pd7LfvuaH2VVInAkXtzibz9+zSPdUM1WvuUi128ksstAP0hM5w48vQgg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", - "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.5.tgz", + "integrity": "sha512-12rba2HwemQPa7BLIKCzm1pT2/RuQHtSFHdNl41cFiC6oi4tcrp7gjB07pxQvFpcADojQywSjblQth6gJyE6CA==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.5", + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-for-of": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", - "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.5.tgz", + "integrity": "sha512-+DpCAJFPAvViR17PIMi9x2AE34dll5wNlXO43wagAX2YcRGgEVHCNFC4azG85b4YyyFarvkc/iD5NPrz4Oneqw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", - "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.5.tgz", + "integrity": "sha512-Fuec/KPSpVLbGo6z1RPw4EE1X+z9gZk1uQmnYy7v4xr4TO9p41v1AoUuXEtyqAI7H+xNJYSICzRqZBhDEkd3kQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", - "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.5.tgz", + "integrity": "sha512-B1j9C/IfvshnPcklsc93AVLTrNVa69iSqztylZH6qnmiAsDDOmmjEYqOm3Ts2lGSgTSywnBNiqC949VdD0/gfw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", - "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.5.tgz", + "integrity": "sha512-d57i3vPHWgIde/9Y8W/xSFUndhvhZN5Wu2TjRrN1MVz5KzdUihKnfDVlfP1U7mS5DNj/WHHhaE4/tTi4hIyHwQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", - "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.5.tgz", + "integrity": "sha512-oHI15S/hdJuSCfnwIz+4lm6wu/wBn7oJ8+QrkzPPwSFGXk8kgdI/AIKcbR/XnD1nQVMg/i6eNaXpszbGuwYDRQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-module-transforms": "^7.16.5", + "@babel/helper-plugin-utils": "^7.16.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz", - "integrity": "sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.5.tgz", + "integrity": "sha512-ABhUkxvoQyqhCWyb8xXtfwqNMJD7tx+irIRnUh6lmyFud7Jln1WzONXKlax1fg/ey178EXbs4bSGNd6PngO+SQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.15.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.14.8", + "@babel/helper-module-transforms": "^7.16.5", + "@babel/helper-plugin-utils": "^7.16.5", + "@babel/helper-simple-access": "^7.16.0", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", - "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.5.tgz", + "integrity": "sha512-53gmLdScNN28XpjEVIm7LbWnD/b/TpbwKbLk6KV4KqC9WyU6rq1jnNmVG6UgAdQZVVGZVoik3DqHNxk4/EvrjA==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.5", + "@babel/helper-plugin-utils": "^7.16.5", + "@babel/helper-validator-identifier": "^7.15.7", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", - "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.5.tgz", + "integrity": "sha512-qTFnpxHMoenNHkS3VoWRdwrcJ3FhX567GvDA3hRZKF0Dj8Fmg0UzySZp3AP2mShl/bzcywb/UWAMQIjA1bhXvw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-module-transforms": "^7.16.5", + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz", - "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.5.tgz", + "integrity": "sha512-/wqGDgvFUeKELW6ex6QB7dLVRkd5ehjw34tpXu1nhKC0sFfmaLabIswnpf8JgDyV2NeDmZiwoOb0rAmxciNfjA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.16.0" } }, "@babel/plugin-transform-new-target": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", - "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.5.tgz", + "integrity": "sha512-ZaIrnXF08ZC8jnKR4/5g7YakGVL6go6V9ql6Jl3ecO8PQaQqFE74CuM384kezju7Z9nGCCA20BqZaR1tJ/WvHg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-object-super": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", - "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.5.tgz", + "integrity": "sha512-tded+yZEXuxt9Jdtkc1RraW1zMF/GalVxaVVxh41IYwirdRgyAxxxCKZ9XB7LxZqmsjfjALxupNE1MIz9KH+Zg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5", + "@babel/helper-replace-supers": "^7.16.5" } }, "@babel/plugin-transform-parameters": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", - "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.5.tgz", + "integrity": "sha512-B3O6AL5oPop1jAVg8CV+haeUte9oFuY85zu0jwnRNZZi3tVAbJriu5tag/oaO2kGaQM/7q7aGPBlTI5/sr9enA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-property-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", - "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.5.tgz", + "integrity": "sha512-+IRcVW71VdF9pEH/2R/Apab4a19LVvdVsr/gEeotH00vSDVlKD+XgfSIw+cgGWsjDB/ziqGv/pGoQZBIiQVXHg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-regenerator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", - "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.5.tgz", + "integrity": "sha512-2z+it2eVWU8TtQQRauvGUqZwLy4+7rTfo6wO4npr+fvvN1SW30ZF3O/ZRCNmTuu4F5MIP8OJhXAhRV5QMJOuYg==", "dev": true, "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", - "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.5.tgz", + "integrity": "sha512-aIB16u8lNcf7drkhXJRoggOxSTUAuihTSTfAcpynowGJOZiGf+Yvi7RuTwFzVYSYPmWyARsPqUGoZWWWxLiknw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-runtime": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.0.tgz", - "integrity": "sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.5.tgz", + "integrity": "sha512-gxpfS8XQWDbQ8oP5NcmpXxtEgCJkbO+W9VhZlOhr0xPyVaRjAQPOv7ZDj9fg0d5s9+NiVvMCE6gbkEkcsxwGRw==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.16.5", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.4.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", "semver": "^6.3.0" }, "dependencies": { @@ -1020,96 +1032,97 @@ } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", - "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.5.tgz", + "integrity": "sha512-ZbuWVcY+MAXJuuW7qDoCwoxDUNClfZxoo7/4swVbOW1s/qYLOMHlm9YRWMsxMFuLs44eXsv4op1vAaBaBaDMVg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.5.tgz", + "integrity": "sha512-5d6l/cnG7Lw4tGHEoga4xSkYp1euP7LAtrah1h1PgJ3JY7yNsjybsxQAnVK4JbtReZ/8z6ASVmd3QhYYKLaKZw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", - "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.5.tgz", + "integrity": "sha512-usYsuO1ID2LXxzuUxifgWtJemP7wL2uZtyrTVM4PKqsmJycdS4U4mGovL5xXkfUheds10Dd2PjoQLXw6zCsCbg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-template-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", - "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.5.tgz", + "integrity": "sha512-gnyKy9RyFhkovex4BjKWL3BVYzUDG6zC0gba7VMLbQoDuqMfJ1SDXs8k/XK41Mmt1Hyp4qNAvGFb9hKzdCqBRQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", - "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.5.tgz", + "integrity": "sha512-ldxCkW180qbrvyCVDzAUZqB0TAeF8W/vGJoRcaf75awm6By+PxfJKvuqVAnq8N9wz5Xa6mSpM19OfVKKVmGHSQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", - "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.5.tgz", + "integrity": "sha512-shiCBHTIIChGLdyojsKQjoAyB8MBwat25lKM7MJjbe1hE0bgIppD+LX9afr41lLHOhqceqeWl4FkLp+Bgn9o1Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", - "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.5.tgz", + "integrity": "sha512-GTJ4IW012tiPEMMubd7sD07iU9O/LOo8Q/oU4xNhcaq0Xn8+6TcUQaHtC8YxySo1T+ErQ8RaWogIEeFhKGNPzw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.16.5" } }, "@babel/preset-env": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.0.tgz", - "integrity": "sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.5.tgz", + "integrity": "sha512-MiJJW5pwsktG61NDxpZ4oJ1CKxM1ncam9bzRtx9g40/WkLRkxFP6mhpkYV0/DxcciqoiHicx291+eUQrXb/SfQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.3", + "@babel/helper-plugin-utils": "^7.16.5", "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.9", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.14.5", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-async-generator-functions": "^7.16.5", + "@babel/plugin-proposal-class-properties": "^7.16.5", + "@babel/plugin-proposal-class-static-block": "^7.16.5", + "@babel/plugin-proposal-dynamic-import": "^7.16.5", + "@babel/plugin-proposal-export-namespace-from": "^7.16.5", + "@babel/plugin-proposal-json-strings": "^7.16.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.5", + "@babel/plugin-proposal-numeric-separator": "^7.16.5", + "@babel/plugin-proposal-object-rest-spread": "^7.16.5", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.5", + "@babel/plugin-proposal-optional-chaining": "^7.16.5", + "@babel/plugin-proposal-private-methods": "^7.16.5", + "@babel/plugin-proposal-private-property-in-object": "^7.16.5", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.5", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", @@ -1124,44 +1137,44 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.9", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.14.5", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.15.0", - "@babel/plugin-transform-modules-systemjs": "^7.14.5", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.6", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.15.0", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.16.0", + "@babel/plugin-transform-arrow-functions": "^7.16.5", + "@babel/plugin-transform-async-to-generator": "^7.16.5", + "@babel/plugin-transform-block-scoped-functions": "^7.16.5", + "@babel/plugin-transform-block-scoping": "^7.16.5", + "@babel/plugin-transform-classes": "^7.16.5", + "@babel/plugin-transform-computed-properties": "^7.16.5", + "@babel/plugin-transform-destructuring": "^7.16.5", + "@babel/plugin-transform-dotall-regex": "^7.16.5", + "@babel/plugin-transform-duplicate-keys": "^7.16.5", + "@babel/plugin-transform-exponentiation-operator": "^7.16.5", + "@babel/plugin-transform-for-of": "^7.16.5", + "@babel/plugin-transform-function-name": "^7.16.5", + "@babel/plugin-transform-literals": "^7.16.5", + "@babel/plugin-transform-member-expression-literals": "^7.16.5", + "@babel/plugin-transform-modules-amd": "^7.16.5", + "@babel/plugin-transform-modules-commonjs": "^7.16.5", + "@babel/plugin-transform-modules-systemjs": "^7.16.5", + "@babel/plugin-transform-modules-umd": "^7.16.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.5", + "@babel/plugin-transform-new-target": "^7.16.5", + "@babel/plugin-transform-object-super": "^7.16.5", + "@babel/plugin-transform-parameters": "^7.16.5", + "@babel/plugin-transform-property-literals": "^7.16.5", + "@babel/plugin-transform-regenerator": "^7.16.5", + "@babel/plugin-transform-reserved-words": "^7.16.5", + "@babel/plugin-transform-shorthand-properties": "^7.16.5", + "@babel/plugin-transform-spread": "^7.16.5", + "@babel/plugin-transform-sticky-regex": "^7.16.5", + "@babel/plugin-transform-template-literals": "^7.16.5", + "@babel/plugin-transform-typeof-symbol": "^7.16.5", + "@babel/plugin-transform-unicode-escapes": "^7.16.5", + "@babel/plugin-transform-unicode-regex": "^7.16.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.0", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.4.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.19.1", "semver": "^6.3.0" }, "dependencies": { @@ -1174,9 +1187,9 @@ } }, "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1187,62 +1200,43 @@ } }, "@babel/runtime": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", - "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.5.tgz", + "integrity": "sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", "dev": true, "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" - } - } + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/traverse": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", - "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.15.0", - "@babel/types": "^7.15.0", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.5.tgz", + "integrity": "sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.5", + "@babel/helper-environment-visitor": "^7.16.5", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.5", + "@babel/types": "^7.16.0", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" - } - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -1252,47 +1246,55 @@ } }, "@babel/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", - "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.9", + "@babel/helper-validator-identifier": "^7.15.7", "to-fast-properties": "^2.0.0" } }, "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", + "debug": "^4.3.2", + "espree": "^9.2.0", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } } }, "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.0", + "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" } }, "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "@istanbuljs/schema": { @@ -1347,9 +1349,9 @@ } }, "@rollup/plugin-node-resolve": { - "version": "13.0.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.4.tgz", - "integrity": "sha512-eYq4TFy40O8hjeDs+sIxEH/jc9lyuI2k9DM557WN6rO5OpnC2qXMBNj4IKH1oHrnAazL49C5p0tgP0/VpqJ+/w==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.1.tgz", + "integrity": "sha512-6QKtRevXLrmEig9UiMYt2fSvee9TyltGRfw+qSs6xjUnxwjOzTOqy+/Lpxsgjb8mJn1EQNbCDAvt89O4uzL5kw==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -1382,14 +1384,25 @@ "is-regexp": "^2.0.0" }, "dependencies": { - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", "dev": true } } }, + "@simonbrunel/vuepress-plugin-versions": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@simonbrunel/vuepress-plugin-versions/-/vuepress-plugin-versions-0.2.0.tgz", + "integrity": "sha512-6qgrbxCVG5mIHQDqTvWfpSxGMpqcDAHKIlxScZ0MfJjUWW40Kt4xcZ3OTx4NvlsNZUDNLZVWngIPYsMah4C/mQ==", + "dev": true, + "requires": { + "node-fetch": "^2.6.1", + "semiver": "^1.1.0", + "stringify-object": "^3.3.0" + } + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -1405,12 +1418,41 @@ "defer-to-connect": "^1.0.1" } }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, "@types/component-emitter": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", - "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", "dev": true }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, "@types/cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", @@ -1429,31 +1471,99 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.27", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.27.tgz", + "integrity": "sha512-e/sVallzUTPdyOTiqi8O8pMdBBphscvI6E4JYaKlja4Lm+zh7UFSSdW5VMkRbhDtmrONqOUHOXRguPsDckzxNA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, "@types/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "requires": { "@types/minimatch": "*", "@types/node": "*" } }, + "@types/highlight.js": { + "version": "9.12.4", + "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.4.tgz", + "integrity": "sha512-t2szdkwmg2JJyuCM20e8kR2X59WCE5Zkl4bzm1u1Oukjm79zpbiAv+QjnwLnuuV0WHEcX2NgUItu0pAMKuOPww==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, + "@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", + "dev": true + }, + "@types/markdown-it": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-10.0.3.tgz", + "integrity": "sha512-daHJk22isOUvNssVGF2zDnnSyxHhFYhtjeX4oQaKD6QzL3ZR1QSgiD1g+Q6/WSWYVogNXYDXODtbgW/WiFCtyw==", + "dev": true, + "requires": { + "@types/highlight.js": "^9.7.0", + "@types/linkify-it": "*", + "@types/mdurl": "*", + "highlight.js": "^9.7.0" + } + }, "@types/mdast": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.9.tgz", - "integrity": "sha512-IUlIhG2KNPjOEuXIblTjovD1XW8HPGeulA12nEyc6xhO4Yrrcs+xczAl4ucR3cpwVlE+vb2x9Z7pRmVP4bUHng==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", "dev": true, "requires": { "@types/unist": "*" } }, + "@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", + "dev": true + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, "@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", @@ -1461,15 +1571,9 @@ "dev": true }, "@types/node": { - "version": "16.7.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.1.tgz", - "integrity": "sha512-ncRdc45SoYJ2H4eWU9ReDfp3vtFqDYhjOsKlFFUDEn8V1Bgr2RjYal8YT5byfadWIRluhPFU6JiDOl0H6Sl87A==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "version": "17.0.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.5.tgz", + "integrity": "sha512-w3mrvNXLeDYV1GKTZorGJQivK6XLCoGwpnyJFbJVK/aTBQUxOCaa/GlFAAN3OTDFcb7h5tiFG+YXCO2By+riZw==", "dev": true }, "@types/q": { @@ -1478,6 +1582,18 @@ "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", "dev": true }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, "@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -1487,94 +1603,178 @@ "@types/node": "*" } }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/tapable": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", + "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, "@types/unist": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", "dev": true }, + "@types/webpack": { + "version": "4.41.32", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz", + "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, + "@types/webpack-dev-server": { + "version": "3.11.6", + "resolved": "https://registry.npmjs.org/@types/webpack-dev-server/-/webpack-dev-server-3.11.6.tgz", + "integrity": "sha512-XCph0RiiqFGetukCTC3KVnY1jwLcZ84illFRMbyFzCcWl90B/76ew0tSqF46oBhnLC4obNDG7dMO0JfTN0MgMQ==", + "dev": true, + "requires": { + "@types/connect-history-api-fallback": "*", + "@types/express": "*", + "@types/serve-static": "*", + "@types/webpack": "^4", + "http-proxy-middleware": "^1.0.0" + } + }, + "@types/webpack-sources": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, "@typescript-eslint/eslint-plugin": { - "version": "4.29.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.2.tgz", - "integrity": "sha512-x4EMgn4BTfVd9+Z+r+6rmWxoAzBaapt4QFqE+d8L8sUtYZYLDTK6VG/y/SMMWA5t1/BVU5Kf+20rX4PtWzUYZg==", + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.8.1.tgz", + "integrity": "sha512-wTZ5oEKrKj/8/366qTM366zqhIKAp6NCMweoRONtfuC07OAU9nVI2GZZdqQ1qD30WAAtcPdkH+npDwtRFdp4Rw==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.29.2", - "@typescript-eslint/scope-manager": "4.29.2", - "debug": "^4.3.1", + "@typescript-eslint/experimental-utils": "5.8.1", + "@typescript-eslint/scope-manager": "5.8.1", + "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", "semver": "^7.3.5", "tsutils": "^3.21.0" } }, "@typescript-eslint/experimental-utils": { - "version": "4.29.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.2.tgz", - "integrity": "sha512-P6mn4pqObhftBBPAv4GQtEK7Yos1fz/MlpT7+YjH9fTxZcALbiiPKuSIfYP/j13CeOjfq8/fr9Thr2glM9ub7A==", + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.8.1.tgz", + "integrity": "sha512-fbodVnjIDU4JpeXWRDsG5IfIjYBxEvs8EBO8W1+YVdtrc2B9ppfof5sZhVEDOtgTfFHnYQJDI8+qdqLYO4ceww==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.29.2", - "@typescript-eslint/types": "4.29.2", - "@typescript-eslint/typescript-estree": "4.29.2", + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.8.1", + "@typescript-eslint/types": "5.8.1", + "@typescript-eslint/typescript-estree": "5.8.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "4.29.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.2.tgz", - "integrity": "sha512-WQ6BPf+lNuwteUuyk1jD/aHKqMQ9jrdCn7Gxt9vvBnzbpj7aWEf+aZsJ1zvTjx5zFxGCt000lsbD9tQPEL8u6g==", + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.8.1.tgz", + "integrity": "sha512-K1giKHAjHuyB421SoXMXFHHVI4NdNY603uKw92++D3qyxSeYvC10CBJ/GE5Thpo4WTUvu1mmJI2/FFkz38F2Gw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.29.2", - "@typescript-eslint/types": "4.29.2", - "@typescript-eslint/typescript-estree": "4.29.2", - "debug": "^4.3.1" + "@typescript-eslint/scope-manager": "5.8.1", + "@typescript-eslint/types": "5.8.1", + "@typescript-eslint/typescript-estree": "5.8.1", + "debug": "^4.3.2" } }, "@typescript-eslint/scope-manager": { - "version": "4.29.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.2.tgz", - "integrity": "sha512-mfHmvlQxmfkU8D55CkZO2sQOueTxLqGvzV+mG6S/6fIunDiD2ouwsAoiYCZYDDK73QCibYjIZmGhpvKwAB5BOA==", + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.8.1.tgz", + "integrity": "sha512-DGxJkNyYruFH3NIZc3PwrzwOQAg7vvgsHsHCILOLvUpupgkwDZdNq/cXU3BjF4LNrCsVg0qxEyWasys5AiJ85Q==", "dev": true, "requires": { - "@typescript-eslint/types": "4.29.2", - "@typescript-eslint/visitor-keys": "4.29.2" + "@typescript-eslint/types": "5.8.1", + "@typescript-eslint/visitor-keys": "5.8.1" } }, "@typescript-eslint/types": { - "version": "4.29.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.2.tgz", - "integrity": "sha512-K6ApnEXId+WTGxqnda8z4LhNMa/pZmbTFkDxEBLQAbhLZL50DjeY0VIDCml/0Y3FlcbqXZrABqrcKxq+n0LwzQ==", + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.8.1.tgz", + "integrity": "sha512-L/FlWCCgnjKOLefdok90/pqInkomLnAcF9UAzNr+DSqMC3IffzumHTQTrINXhP1gVp9zlHiYYjvozVZDPleLcA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.29.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.2.tgz", - "integrity": "sha512-TJ0/hEnYxapYn9SGn3dCnETO0r+MjaxtlWZ2xU+EvytF0g4CqTpZL48SqSNn2hXsPolnewF30pdzR9a5Lj3DNg==", + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.8.1.tgz", + "integrity": "sha512-26lQ8l8tTbG7ri7xEcCFT9ijU5Fk+sx/KRRyyzCv7MQ+rZZlqiDPtMKWLC8P7o+dtCnby4c+OlxuX1tp8WfafQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.29.2", - "@typescript-eslint/visitor-keys": "4.29.2", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", + "@typescript-eslint/types": "5.8.1", + "@typescript-eslint/visitor-keys": "5.8.1", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" } }, "@typescript-eslint/visitor-keys": { - "version": "4.29.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.2.tgz", - "integrity": "sha512-bDgJLQ86oWHJoZ1ai4TZdgXzJxsea3Ee9u9wsTAvjChdj2WLcVsgWYAPeY7RQMn16tKrlQaBnpKv7KBfs4EQag==", + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.8.1.tgz", + "integrity": "sha512-SWgiWIwocK6NralrJarPZlWdr0hZnj5GXHIgfdm8hNkyKvpeQuFyLP6YjSIe9kf3YBIfU6OHSZLYkQ+smZwtNg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.29.2", - "eslint-visitor-keys": "^2.0.0" + "@typescript-eslint/types": "5.8.1", + "eslint-visitor-keys": "^3.0.0" } }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, "@vue/babel-helper-vue-jsx-merge-props": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz", @@ -1588,9 +1788,9 @@ "dev": true }, "@vue/babel-plugin-jsx": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.0.6.tgz", - "integrity": "sha512-RzYsvBhzKUmY2YG6LoV+W5PnlnkInq0thh1AzCmewwctAgGN6e9UFon6ZrQQV1CO5G5PeME7MqpB+/vvGg0h4g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz", + "integrity": "sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", @@ -1627,9 +1827,9 @@ } }, "@vue/babel-preset-app": { - "version": "4.5.13", - "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-4.5.13.tgz", - "integrity": "sha512-pM7CR3yXB6L8Gfn6EmX7FLNE3+V/15I3o33GkSNsWvgsMp6HVGXKkXgojrcfUUauyL1LZOdvTmu4enU2RePGHw==", + "version": "4.5.15", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-4.5.15.tgz", + "integrity": "sha512-J+YttzvwRfV1BPczf8r3qCevznYk+jh531agVF+5EYlHF4Sgh/cGXTz9qkkiux3LQgvhEGXgmCteg1n38WuuKg==", "dev": true, "requires": { "@babel/core": "^7.11.0", @@ -1758,9 +1958,9 @@ } }, "@vue/component-compiler-utils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.2.tgz", - "integrity": "sha512-rAYMLmgMuqJFWAOb3Awjqqv5X3Q3hVr4jH/kgrFJpiU0j3a90tnNBplqbj+snzrgZhC9W128z+dtgMifOiMfJg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", "dev": true, "requires": { "consolidate": "^0.15.1", @@ -1769,7 +1969,7 @@ "merge-source-map": "^1.1.0", "postcss": "^7.0.36", "postcss-selector-parser": "^6.0.2", - "prettier": "^1.18.2", + "prettier": "^1.18.2 || ^2.0.0", "source-map": "~0.6.1", "vue-template-es2015-compiler": "^1.9.0" }, @@ -1793,20 +1993,22 @@ } }, "@vuepress/core": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-1.8.2.tgz", - "integrity": "sha512-lh9BLC06k9s0wxTuWtCkiNj49fkbW87enp0XSrFZHEoyDGSGndQjZmMMErcHc5Hx7nrW1nzc33sPH1NNtJl0hw==", + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-1.9.5.tgz", + "integrity": "sha512-Fv9obu+eLkflrPFpdL4qv42Rso0AzDDLk/0dGANF9yqi7t3XgIvWV8oiiUa1cg/m/Sgel5RlSjJxDPWrnXjDCQ==", "dev": true, "requires": { "@babel/core": "^7.8.4", "@vue/babel-preset-app": "^4.1.2", - "@vuepress/markdown": "1.8.2", - "@vuepress/markdown-loader": "1.8.2", - "@vuepress/plugin-last-updated": "1.8.2", - "@vuepress/plugin-register-components": "1.8.2", - "@vuepress/shared-utils": "1.8.2", + "@vuepress/markdown": "1.9.5", + "@vuepress/markdown-loader": "1.9.5", + "@vuepress/plugin-last-updated": "1.9.5", + "@vuepress/plugin-register-components": "1.9.5", + "@vuepress/shared-utils": "1.9.5", + "@vuepress/types": "1.9.5", "autoprefixer": "^9.5.1", "babel-loader": "^8.0.4", + "bundle-require": "2.1.8", "cache-loader": "^3.0.0", "chokidar": "^2.0.3", "connect-history-api-fallback": "^1.5.0", @@ -1814,6 +2016,7 @@ "core-js": "^3.6.4", "cross-spawn": "^6.0.5", "css-loader": "^2.1.1", + "esbuild": "0.14.7", "file-loader": "^3.0.1", "js-yaml": "^3.13.1", "lru-cache": "^5.1.1", @@ -1859,6 +2062,15 @@ } } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", @@ -2037,6 +2249,16 @@ } } }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -2145,12 +2367,12 @@ } }, "@vuepress/markdown": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-1.8.2.tgz", - "integrity": "sha512-zznBHVqW+iBkznF/BO/GY9RFu53khyl0Ey0PnGqvwCJpRLNan6y5EXgYumtjw2GSYn5nDTTALYxtyNBdz64PKg==", + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-1.9.5.tgz", + "integrity": "sha512-6W2hen+9qhkSuj/j403QaWxMcnqQSnZqjHr1qt581zNz1xLwgkSva7IzfGWxEVdCkwtM8+JWZrDEkzt4UyItXA==", "dev": true, "requires": { - "@vuepress/shared-utils": "1.8.2", + "@vuepress/shared-utils": "1.9.5", "markdown-it": "^8.4.1", "markdown-it-anchor": "^5.0.2", "markdown-it-chain": "^1.3.0", @@ -2160,12 +2382,12 @@ } }, "@vuepress/markdown-loader": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@vuepress/markdown-loader/-/markdown-loader-1.8.2.tgz", - "integrity": "sha512-mWzFXikCUcAN/chpKkqZpRYKdo0312hMv8cBea2hvrJYV6y4ODB066XKvXN8JwOcxuCjxWYJkhWGr+pXq1oTtw==", + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@vuepress/markdown-loader/-/markdown-loader-1.9.5.tgz", + "integrity": "sha512-Y4pxXQpOf2gvxGMPKEotHJKqVAIi+HfqKQAJPd/0zhsFn6F54qOsuhohXOvtx3sAUnbYmuM5+zS/Jpvh6UMebA==", "dev": true, "requires": { - "@vuepress/markdown": "1.8.2", + "@vuepress/markdown": "1.9.5", "loader-utils": "^1.1.0", "lru-cache": "^5.1.1" }, @@ -2188,20 +2410,22 @@ } }, "@vuepress/plugin-active-header-links": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-active-header-links/-/plugin-active-header-links-1.8.2.tgz", - "integrity": "sha512-JmXAQg8D7J8mcKe2Ue3BZ9dOCzJMJXP4Cnkkc/IrqfDg0ET0l96gYWZohCqlvRIWt4f0VPiFAO4FLYrW+hko+g==", + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-active-header-links/-/plugin-active-header-links-1.9.5.tgz", + "integrity": "sha512-Pi6cu5Ed4m6Ri8QatigapdXqhEcZXd/s+lyhdKWIwjJQaMSYlyAN2pX8Pqm4vqAvW6c0Dw2wEXrd989BcI7T4g==", "dev": true, "requires": { + "@vuepress/types": "1.9.5", "lodash.debounce": "^4.0.8" } }, "@vuepress/plugin-last-updated": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-last-updated/-/plugin-last-updated-1.8.2.tgz", - "integrity": "sha512-pYIRZi52huO9b6HY3JQNPKNERCLzMHejjBRt9ekdnJ1xhLs4MmRvt37BoXjI/qzvXkYtr7nmGgnKThNBVRTZuA==", + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-last-updated/-/plugin-last-updated-1.9.5.tgz", + "integrity": "sha512-coy5zMgAHVno+c8yGMwxBhkTNMBYoRJdogzuVQRgITJRDZfToiKSza3RDQkFfn1YluCps2v/9NQSHwPnhEv6eA==", "dev": true, "requires": { + "@vuepress/types": "1.9.5", "cross-spawn": "^6.0.5" }, "dependencies": { @@ -2257,33 +2481,38 @@ } }, "@vuepress/plugin-nprogress": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-nprogress/-/plugin-nprogress-1.8.2.tgz", - "integrity": "sha512-3TOBee2NM3WLr1tdjDTGfrAMggjN+OlEPyKyv8FqThsVkDYhw48O3HwqlThp9KX7UbL3ExxIFBwWRFLC+kYrdw==", + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-nprogress/-/plugin-nprogress-1.9.5.tgz", + "integrity": "sha512-XEtyCt/R/qNcQM62/F6srqOZ6V6mmxSqfQktPMYfOdQqeRW0aCXvG6N2/cy55S4xH8LeEVL4Nxg5m9Cew9AEgA==", "dev": true, "requires": { + "@vuepress/types": "1.9.5", "nprogress": "^0.2.0" } }, "@vuepress/plugin-register-components": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-register-components/-/plugin-register-components-1.8.2.tgz", - "integrity": "sha512-6SUq3nHFMEh9qKFnjA8QnrNxj0kLs7+Gspq1OBU8vtu0NQmSvLFZVaMV7pzT/9zN2nO5Pld5qhsUJv1g71MrEA==", + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-register-components/-/plugin-register-components-1.9.5.tgz", + "integrity": "sha512-2eFqboPCOSY8bh7lkd13Cs7vyUcETEzzYnK/7CjqaeDmYtiJuWCoPjF30K2RsdbpVCE5aqheyXmBSEp2uWEosA==", "dev": true, "requires": { - "@vuepress/shared-utils": "1.8.2" + "@vuepress/shared-utils": "1.9.5", + "@vuepress/types": "1.9.5" } }, "@vuepress/plugin-search": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-search/-/plugin-search-1.8.2.tgz", - "integrity": "sha512-JrSJr9o0Kar14lVtZ4wfw39pplxvvMh8vDBD9oW09a+6Zi/4bySPGdcdaqdqGW+OHSiZNvG+6uyfKSBBBqF6PA==", - "dev": true + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-search/-/plugin-search-1.9.5.tgz", + "integrity": "sha512-SDK/1UnJ44OAktgZQWiw6S8Yq8F6WkJsGp4k/e3x1gHg5fB96JJlKK4VBsGk/PUsPpYRwr5554dtEVFjFG7oWw==", + "dev": true, + "requires": { + "@vuepress/types": "1.9.5" + } }, "@vuepress/shared-utils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@vuepress/shared-utils/-/shared-utils-1.8.2.tgz", - "integrity": "sha512-6kGubc7iBDWruEBUU7yR+sQ++SOhMuvKWvWeTZJKRZedthycdzYz7QVpua0FaZSAJm5/dIt8ymU4WQvxTtZgTQ==", + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@vuepress/shared-utils/-/shared-utils-1.9.5.tgz", + "integrity": "sha512-WA6lq5YwbG3HX3yVhMsrsw6zqDUiiMsUsBJCk/gNwbWng/NTibR/f+DkUyD/tw8fYuNu5EDK8wPn+qyLhcrjJg==", "dev": true, "requires": { "chalk": "^2.3.2", @@ -2470,6 +2699,12 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", @@ -2528,6 +2763,15 @@ } } }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -2614,18 +2858,25 @@ "is-number": "^3.0.0", "repeat-string": "^1.6.1" } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true } } }, "@vuepress/theme-default": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@vuepress/theme-default/-/theme-default-1.8.2.tgz", - "integrity": "sha512-rE7M1rs3n2xp4a/GrweO8EGwqFn3EA5gnFWdVmVIHyr7C1nix+EqjpPQF1SVWNnIrDdQuCw38PqS+oND1K2vYw==", + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@vuepress/theme-default/-/theme-default-1.9.5.tgz", + "integrity": "sha512-mB919hzorh3PwEY6hzkBYEa0Xweg3kEUPhZbNx29gMXn6KBS7NqN3+sId/Frv2RydSWw5h1ax8NtphaiR0UvBQ==", "dev": true, "requires": { - "@vuepress/plugin-active-header-links": "1.8.2", - "@vuepress/plugin-nprogress": "1.8.2", - "@vuepress/plugin-search": "1.8.2", + "@vuepress/plugin-active-header-links": "1.9.5", + "@vuepress/plugin-nprogress": "1.9.5", + "@vuepress/plugin-search": "1.9.5", + "@vuepress/types": "1.9.5", "docsearch.js": "^2.5.2", "lodash": "^4.17.15", "stylus": "^0.54.8", @@ -2634,6 +2885,17 @@ "vuepress-plugin-smooth-scroll": "^0.0.3" } }, + "@vuepress/types": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@vuepress/types/-/types-1.9.5.tgz", + "integrity": "sha512-fu1Wyi+cPFyn7nfxNH4MVvU5glYvRB0RMI7besq9kiI/KkZJPb2G1hITopECJOGk+6G/cOU/iSdUDUHH4GQLgA==", + "dev": true, + "requires": { + "@types/markdown-it": "^10.0.0", + "@types/webpack-dev-server": "^3", + "webpack-chain": "^6.0.0" + } + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -2838,9 +3100,9 @@ } }, "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true }, "acorn-jsx": { @@ -2932,52 +3194,12 @@ "dev": true }, "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, "requires": { - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "string-width": "^4.1.0" } }, "ansi-colors": { @@ -3003,16 +3225,16 @@ } } }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -3041,13 +3263,10 @@ "dev": true }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "arr-diff": { "version": "4.0.0", @@ -3092,9 +3311,9 @@ "dev": true }, "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, "requires": { "safer-buffer": "~2.1.0" @@ -3159,12 +3378,6 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, "async": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", @@ -3208,18 +3421,26 @@ } }, "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", "dev": true, "requires": { "browserslist": "^4.12.0", "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", "postcss": "^7.0.32", "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + } } }, "aws-sign2": { @@ -3235,9 +3456,9 @@ "dev": true }, "babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", "dev": true, "requires": { "find-cache-dir": "^3.3.1", @@ -3256,13 +3477,13 @@ } }, "babel-plugin-polyfill-corejs2": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", - "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz", + "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==", "dev": true, "requires": { "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.2", + "@babel/helper-define-polyfill-provider": "^0.3.0", "semver": "^6.1.1" }, "dependencies": { @@ -3275,22 +3496,22 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz", - "integrity": "sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", + "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.14.0" + "@babel/helper-define-polyfill-provider": "^0.3.0", + "core-js-compat": "^3.18.0" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", - "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz", + "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.2" + "@babel/helper-define-polyfill-provider": "^0.3.0" } }, "balanced-match": { @@ -3355,9 +3576,9 @@ } }, "base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", + "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", "dev": true }, "base64-js": { @@ -3422,21 +3643,21 @@ "dev": true }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", "dev": true, "requires": { - "bytes": "3.1.0", + "bytes": "3.1.1", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" }, "dependencies": { "debug": { @@ -3550,6 +3771,12 @@ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -3643,16 +3870,16 @@ } }, "browserslist": { - "version": "4.16.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.8.tgz", - "integrity": "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001251", - "colorette": "^1.3.0", - "electron-to-chromium": "^1.3.811", + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", "escalade": "^3.1.1", - "node-releases": "^1.1.75" + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" } }, "buffer": { @@ -3710,16 +3937,22 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "bundle-require": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-2.1.8.tgz", + "integrity": "sha512-oOEg3A0hy/YzvNWNowtKD0pmhZKseOFweCbgyMqTIih4gRY1nJWsvrOCT27L9NbIyL5jMjTFrAUpGxxpW68Puw==", + "dev": true + }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", "dev": true }, "cac": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.3.tgz", - "integrity": "sha512-ECVqVZh74qgSuZG9YOt2OJPI3wGcf+EwwuF/XIOYqZBD0KZYLtgPWqFPxmDPQ6joxI1nOlvVgRV6VT53Ooyocg==", + "version": "6.7.12", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.12.tgz", + "integrity": "sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA==", "dev": true }, "cacache": { @@ -3842,6 +4075,15 @@ "semver": "^5.6.0" } }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", @@ -3988,9 +4230,9 @@ } }, "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", "dev": true }, "caniuse-api": { @@ -4006,9 +4248,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001251", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz", - "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==", + "version": "1.0.30001294", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001294.tgz", + "integrity": "sha512-LiMlrs1nSKZ8qkNhpUf5KD0Al1KCBE3zaT7OLOwEkagXMEDij98SiOovn9wxVGQpklk9vVC/pUSqgYmkmKOS8g==", "dev": true }, "caseless": { @@ -4057,21 +4299,21 @@ "dev": true }, "chart.js": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.5.1.tgz", - "integrity": "sha512-m5kzt72I1WQ9LILwQC4syla/LD/N413RYv2Dx2nnTkRS9iv/ey1xLTt0DnPc/eWV4zI+BgEgDYBIzbQhZHc/PQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.7.0.tgz", + "integrity": "sha512-31gVuqqKp3lDIFmzpKIrBeum4OpZsQjSIAqlOpgjosHDJZlULtvwLEZKtEhIAZc7JMPaHlYMys40Qy9Mf+1AAg==", "dev": true }, "chartjs-plugin-autocolors": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/chartjs-plugin-autocolors/-/chartjs-plugin-autocolors-0.0.3.tgz", - "integrity": "sha512-2lo2u0BHuKAqjrrVIHBsWVy3cWmfgeaGCOZ2V037qtxKd3mcTIpmBeE8wiJfkACvDuaOwSjkT5/xn5s6/qDA6A==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/chartjs-plugin-autocolors/-/chartjs-plugin-autocolors-0.0.5.tgz", + "integrity": "sha512-yxDDqykc4wv2g+c0lEW6JN2G5hfcQF2vp6auLiKq9znJZMjGT5Bhl2SmPsqhgCjy/C240OkjrwHIK72nZXrqAA==", "dev": true }, "chartjs-test-utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/chartjs-test-utils/-/chartjs-test-utils-0.3.0.tgz", - "integrity": "sha512-YN3K8hZgiCZaVDvfysQ91ERd3q1knvydN0NmKS8N5S9MUyW1lvVaelrDL1f8Zh3jq2Qo+IjpUyO4VeOR5XvmsQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/chartjs-test-utils/-/chartjs-test-utils-0.3.1.tgz", + "integrity": "sha512-QsRYLWOedYGsloDvJsByPNUK44TOiqnxQEO5FOrOm9SguEl5WmJDCOIdd/1ePLOX4gGRClXBDVxD7o1SJY+nWA==", "dev": true, "requires": { "jasmine": "^3.6.4", @@ -4094,6 +4336,17 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "chownr": { @@ -4137,9 +4390,9 @@ } }, "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", "dev": true, "requires": { "source-map": "~0.6.0" @@ -4306,21 +4559,15 @@ "dev": true }, "color-string": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", - "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", "dev": true, "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, - "colorette": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", - "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==", - "dev": true - }, "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -4420,15 +4667,14 @@ } }, "concurrently": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.1.tgz", - "integrity": "sha512-emgwhH+ezkuYKSHZQ+AkgEpoUZZlbpPVYCVv7YZx0r+T7fny1H03r2nYRebpi2DudHR4n1Rgbo2YTxKOxVJ4+g==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", + "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", "dev": true, "requires": { "chalk": "^4.1.0", "date-fns": "^2.16.1", "lodash": "^4.17.21", - "read-pkg": "^5.2.0", "rxjs": "^6.6.3", "spawn-command": "^0.0.2-1", "supports-color": "^8.1.0", @@ -4513,12 +4759,20 @@ "dev": true }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "content-type": { @@ -4706,6 +4960,15 @@ } } }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", @@ -4762,6 +5025,15 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -4771,18 +5043,18 @@ } }, "core-js": { - "version": "3.16.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.2.tgz", - "integrity": "sha512-P0KPukO6OjMpjBtHSceAZEWlDD1M2Cpzpg6dBbrjFqFhBHe/BwhxaP820xKOjRn/lZRQirrCusIpLS/n2sgXLQ==", + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.1.tgz", + "integrity": "sha512-btdpStYFQScnNVQ5slVcr858KP0YWYjV16eGJQw8Gg7CWtu/2qNvIM3qVRIR3n1pK2R9NNOrTevbvAYxajwEjg==", "dev": true }, "core-js-compat": { - "version": "3.16.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.16.2.tgz", - "integrity": "sha512-4lUshXtBXsdmp8cDWh6KKiHUg40AjiuPD3bOWkNVsr1xkAhpUqCjaZ8lB1bKx9Gb5fXcbRbFJ4f4qpRIRTuJqQ==", + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.1.tgz", + "integrity": "sha512-AVhKZNpqMV3Jz8hU0YEXXE06qoxtQGsAqU0u1neUngz5IusDJRX/ZJ6t3i7mS7QxNyEONbCo14GprkBrxPlTZA==", "dev": true, "requires": { - "browserslist": "^4.16.7", + "browserslist": "^4.19.1", "semver": "7.0.0" }, "dependencies": { @@ -4795,9 +5067,9 @@ } }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "cors": { @@ -4822,6 +5094,15 @@ "parse-json": "^4.0.0" }, "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", @@ -4832,14 +5113,14 @@ "resolve-from": "^3.0.0" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "resolve-from": { @@ -5060,6 +5341,12 @@ "dev": true } } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true } } }, @@ -5217,9 +5504,9 @@ } }, "date-fns": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.23.0.tgz", - "integrity": "sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz", + "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==", "dev": true }, "date-format": { @@ -5241,18 +5528,18 @@ "dev": true }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" } }, "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, "decode-uri-component": { @@ -5291,9 +5578,9 @@ "dev": true }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "deepmerge": { @@ -5438,6 +5725,12 @@ "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", "dev": true }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -5545,6 +5838,14 @@ "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } } }, "dom-walk": { @@ -5566,18 +5867,18 @@ "dev": true }, "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { "domelementtype": "^2.2.0" } }, "domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { "dom-serializer": "^1.0.1", @@ -5592,6 +5893,14 @@ "dev": true, "requires": { "is-obj": "^2.0.0" + }, + "dependencies": { + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + } } }, "duplexer3": { @@ -5629,9 +5938,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.814", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.814.tgz", - "integrity": "sha512-0mH03cyjh6OzMlmjauGg0TLd87ErIJqWiYxMcOLKf5w6p0YEOl7DJAj7BDlXEFmCguY5CQaKVOiMjAMODO2XDw==", + "version": "1.4.29", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.29.tgz", + "integrity": "sha512-N2Jbwxo5Rum8G2YXeUxycs1sv4Qme/ry71HG73bv8BvZl+I/4JtRgK/En+ST/Wh/yF1fqvVCY4jZBgMxnhjtBA==", "dev": true }, "elliptic": { @@ -5685,27 +5994,30 @@ } }, "engine.io": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.1.tgz", - "integrity": "sha512-t2E9wLlssQjGw0nluF6aYyfX8LwYU8Jj0xct+pAhfWfv/YrBn6TSNtEYsgxHIfaMqfrLx07czcMg9bMN6di+3w==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz", + "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==", "dev": true, "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~4.0.0", - "ws": "~7.4.2" + "engine.io-parser": "~5.0.0", + "ws": "~8.2.3" } }, "engine.io-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", - "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.2.tgz", + "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==", "dev": true, "requires": { - "base64-arraybuffer": "0.1.4" + "base64-arraybuffer": "~1.0.1" } }, "enhanced-resolve": { @@ -5747,9 +6059,9 @@ "dev": true }, "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "dev": true }, "envify": { @@ -5787,22 +6099,25 @@ } }, "es-abstract": { - "version": "1.18.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", - "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", - "is-callable": "^1.2.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", @@ -5828,6 +6143,150 @@ "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "dev": true }, + "esbuild": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.7.tgz", + "integrity": "sha512-+u/msd6iu+HvfysUPkZ9VHm83LImmSNnecYPfFI01pQ7TTcsFR+V0BkybZX7mPtIaI7LCrse6YRj+v3eraJSgw==", + "dev": true, + "requires": { + "esbuild-android-arm64": "0.14.7", + "esbuild-darwin-64": "0.14.7", + "esbuild-darwin-arm64": "0.14.7", + "esbuild-freebsd-64": "0.14.7", + "esbuild-freebsd-arm64": "0.14.7", + "esbuild-linux-32": "0.14.7", + "esbuild-linux-64": "0.14.7", + "esbuild-linux-arm": "0.14.7", + "esbuild-linux-arm64": "0.14.7", + "esbuild-linux-mips64le": "0.14.7", + "esbuild-linux-ppc64le": "0.14.7", + "esbuild-netbsd-64": "0.14.7", + "esbuild-openbsd-64": "0.14.7", + "esbuild-sunos-64": "0.14.7", + "esbuild-windows-32": "0.14.7", + "esbuild-windows-64": "0.14.7", + "esbuild-windows-arm64": "0.14.7" + } + }, + "esbuild-android-arm64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.7.tgz", + "integrity": "sha512-9/Q1NC4JErvsXzJKti0NHt+vzKjZOgPIjX/e6kkuCzgfT/GcO3FVBcGIv4HeJG7oMznE6KyKhvLrFgt7CdU2/w==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.7.tgz", + "integrity": "sha512-Z9X+3TT/Xj+JiZTVlwHj2P+8GoiSmUnGVz0YZTSt8WTbW3UKw5Pw2ucuJ8VzbD2FPy0jbIKJkko/6CMTQchShQ==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.7.tgz", + "integrity": "sha512-68e7COhmwIiLXBEyxUxZSSU0akgv8t3e50e2QOtKdBUE0F6KIRISzFntLe2rYlNqSsjGWsIO6CCc9tQxijjSkw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.7.tgz", + "integrity": "sha512-76zy5jAjPiXX/S3UvRgG85Bb0wy0zv/J2lel3KtHi4V7GUTBfhNUPt0E5bpSXJ6yMT7iThhnA5rOn+IJiUcslQ==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.7.tgz", + "integrity": "sha512-lSlYNLiqyzd7qCN5CEOmLxn7MhnGHPcu5KuUYOG1i+t5A6q7LgBmfYC9ZHJBoYyow3u4CNu79AWHbvVLpE/VQQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.7.tgz", + "integrity": "sha512-Vk28u409wVOXqTaT6ek0TnfQG4Ty1aWWfiysIaIRERkNLhzLhUf4i+qJBN8mMuGTYOkE40F0Wkbp6m+IidOp2A==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.7.tgz", + "integrity": "sha512-+Lvz6x+8OkRk3K2RtZwO+0a92jy9si9cUea5Zoru4yJ/6EQm9ENX5seZE0X9DTwk1dxJbjmLsJsd3IoowyzgVg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.7.tgz", + "integrity": "sha512-OzpXEBogbYdcBqE4uKynuSn5YSetCvK03Qv1HcOY1VN6HmReuatjJ21dCH+YPHSpMEF0afVCnNfffvsGEkxGJQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.7.tgz", + "integrity": "sha512-kJd5beWSqteSAW086qzCEsH6uwpi7QRIpzYWHzEYwKKu9DiG1TwIBegQJmLpPsLp4v5RAFjea0JAmAtpGtRpqg==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.7.tgz", + "integrity": "sha512-mFWpnDhZJmj/h7pxqn1GGDsKwRfqtV7fx6kTF5pr4PfXe8pIaTERpwcKkoCwZUkWAOmUEjMIUAvFM72A6hMZnA==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.7.tgz", + "integrity": "sha512-wM7f4M0bsQXfDL4JbbYD0wsr8cC8KaQ3RPWc/fV27KdErPW7YsqshZZSjDV0kbhzwpNNdhLItfbaRT8OE8OaKA==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.7.tgz", + "integrity": "sha512-J/afS7woKyzGgAL5FlgvMyqgt5wQ597lgsT+xc2yJ9/7BIyezeXutXqfh05vszy2k3kSvhLesugsxIA71WsqBw==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.7.tgz", + "integrity": "sha512-7CcxgdlCD+zAPyveKoznbgr3i0Wnh0L8BDGRCjE/5UGkm5P/NQko51tuIDaYof8zbmXjjl0OIt9lSo4W7I8mrw==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.7.tgz", + "integrity": "sha512-GKCafP2j/KUljVC3nesw1wLFSZktb2FGCmoT1+730zIF5O6hNroo0bSEofm6ZK5mNPnLiSaiLyRB9YFgtkd5Xg==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.7.tgz", + "integrity": "sha512-5I1GeL/gZoUUdTPA0ws54bpYdtyeA2t6MNISalsHpY269zK8Jia/AXB3ta/KcDHv2SvNwabpImeIPXC/k0YW6A==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.7.tgz", + "integrity": "sha512-CIGKCFpQOSlYsLMbxt8JjxxvVw9MlF1Rz2ABLVfFyHUF5OeqHD5fPhGrCVNaVrhO8Xrm+yFmtjcZudUGr5/WYQ==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.7.tgz", + "integrity": "sha512-eOs1eSivOqN7cFiRIukEruWhaCf75V0N8P0zP7dh44LIhLl8y6/z++vv9qQVbkBm5/D7M7LfCfCTmt1f1wHOCw==", + "dev": true, + "optional": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -5853,37 +6312,36 @@ "dev": true }, "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.5.0.tgz", + "integrity": "sha512-tVGSkgNbOfiHyVte8bCM8OmX+xG9PzVG/B4UCF60zx7j61WIVY/AqJECDgpLD4DbbESD0e174gOg3ZlrX15GDg==", "dev": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.2.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", + "glob-parent": "^6.0.1", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -5891,31 +6349,35 @@ "natural-compare": "^1.4.0", "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^3.1.0", + "regexpp": "^3.2.0", "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true } } }, @@ -5953,18 +6415,18 @@ } }, "eslint-plugin-html": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-6.1.2.tgz", - "integrity": "sha512-bhBIRyZFqI4EoF12lGDHAmgfff8eLXx6R52/K3ESQhsxzCzIE6hdebS7Py651f7U3RBotqroUnC3L29bR7qJWQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-6.2.0.tgz", + "integrity": "sha512-vi3NW0E8AJombTvt8beMwkL1R/fdRWl4QSNRNMhVQKWm36/X0KF0unGNAY4mqUF06mnwVWZcIcerrCnfn9025g==", "dev": true, "requires": { - "htmlparser2": "^6.0.1" + "htmlparser2": "^7.1.2" } }, "eslint-plugin-markdown": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.0.tgz", - "integrity": "sha512-Ctuc7aP1tU92qnFwVO1wDLEzf1jqMxwRkcSTw7gjbvnEqfh5CKUcTXM0sxg8CB2KDXrqpTuMZPgJ1XE9Olr7KA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.1.tgz", + "integrity": "sha512-FgWp4iyYvTFxPwfbxofTvXxgzPsDuSKHQy2S+a8Ve6savbujey+lgrFFbXQA0HPygISpRYWYBjooPzhYSF81iA==", "dev": true, "requires": { "mdast-util-from-markdown": "^0.8.5" @@ -5987,31 +6449,31 @@ "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", "dev": true }, "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz", + "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", "dev": true, "requires": { - "acorn": "^7.4.0", + "acorn": "^8.6.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "eslint-visitor-keys": "^3.1.0" } }, "esprima": { @@ -6030,9 +6492,9 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -6047,9 +6509,9 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -6208,17 +6670,17 @@ } }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", "dev": true, "requires": { "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.4.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -6232,13 +6694,13 @@ "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", @@ -6251,12 +6713,6 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -6271,6 +6727,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true } } }, @@ -6368,6 +6830,17 @@ "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "fast-json-stable-stringify": { @@ -6383,9 +6856,9 @@ "dev": true }, "fastq": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", - "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -6504,9 +6977,9 @@ } }, "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "requires": { "commondir": "^1.0.1", @@ -6515,15 +6988,21 @@ } }, "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -6535,9 +7014,15 @@ } }, "flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "flexsearch": { + "version": "0.6.32", + "resolved": "https://registry.npmjs.org/flexsearch/-/flexsearch-0.6.32.tgz", + "integrity": "sha512-EF1BWkhwoeLtbIlDbY/vDSLBen/E5l/f1Vg7iX5CDymQCamcx1vhlc3tIZxIDplPjgi0jhG37c67idFbjg+v+Q==", "dev": true }, "flush-write-stream": { @@ -6551,9 +7036,9 @@ } }, "follow-redirects": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.2.tgz", - "integrity": "sha512-yLR6WaE2lbF0x4K2qE2p9PEXKLDjUjnR/xmjS3wHAYxtlsI9MLLBJUZirAHKzUZDGLxje7w/cXR49WOUo4rbsA==", + "version": "1.14.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", + "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==", "dev": true }, "for-in": { @@ -6617,14 +7102,14 @@ } }, "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, "fs-write-stream-atomic": { @@ -6702,6 +7187,16 @@ "pump": "^3.0.0" } }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -6718,9 +7213,9 @@ } }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -6732,12 +7227,12 @@ } }, "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" } }, "glob-to-regexp": { @@ -6766,9 +7261,9 @@ } }, "globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -6786,14 +7281,6 @@ "ignore": "^5.1.4", "merge2": "^1.3.0", "slash": "^3.0.0" - }, - "dependencies": { - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - } } }, "got": { @@ -6831,8 +7318,35 @@ "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } } }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, "handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -7024,6 +7538,12 @@ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", "dev": true }, + "highlight.js": { + "version": "9.18.5", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz", + "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==", + "dev": true + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -7053,12 +7573,6 @@ } } }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, "hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", @@ -7125,15 +7639,15 @@ "dev": true }, "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", "dev": true, "requires": { "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" } }, "http-cache-semantics": { @@ -7149,196 +7663,46 @@ "dev": true }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", + "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", + "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" } }, "http-signature": { @@ -7395,9 +7759,9 @@ "dev": true }, "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "immediate": { @@ -7477,6 +7841,15 @@ "path-exists": "^3.0.0" } }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", @@ -7704,9 +8077,9 @@ } }, "is-core-module": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", - "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dev": true, "requires": { "has": "^1.0.3" @@ -7797,9 +8170,9 @@ "dev": true }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -7828,9 +8201,9 @@ "dev": true }, "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, "is-npm": { @@ -7855,9 +8228,9 @@ } }, "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, "is-path-cwd": { @@ -7893,9 +8266,9 @@ "dev": true }, "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true }, "is-plain-object": { @@ -7918,9 +8291,9 @@ } }, "is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true }, "is-resolvable": { @@ -7929,6 +8302,12 @@ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -7959,6 +8338,21 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -8011,9 +8405,9 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-instrument": { @@ -8059,9 +8453,9 @@ } }, "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { "debug": "^4.1.1", @@ -8070,9 +8464,9 @@ } }, "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.2.tgz", + "integrity": "sha512-0gHxuT1NNC0aEIL1zbJ+MTgPbbHhU77eJPuU35WKA7TgXiSNlCAx4PENoMrH0Or6M2H80TaZcWKhM0IK6V8gRw==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -8080,19 +8474,19 @@ } }, "jasmine": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.9.0.tgz", - "integrity": "sha512-JgtzteG7xnqZZ51fg7N2/wiQmXon09szkALcRMTgCMX4u/m17gVJFjObnvw5FXkZOWuweHPaPRVB6DI2uN0wVA==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.10.0.tgz", + "integrity": "sha512-2Y42VsC+3CQCTzTwJezOvji4qLORmKIE0kwowWC+934Krn6ZXNQYljiwK5st9V3PVx96BSiDYXSB60VVah3IlQ==", "dev": true, "requires": { "glob": "^7.1.6", - "jasmine-core": "~3.9.0" + "jasmine-core": "~3.10.0" } }, "jasmine-core": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.9.0.tgz", - "integrity": "sha512-Tv3kVbPCGVrjsnHBZ38NsPU3sDOtNa0XmbG2baiyJqdb5/SPpDO6GVwJYtUryl6KB4q1Ssckwg612ES9Z0dreQ==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.10.1.tgz", + "integrity": "sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA==", "dev": true }, "javascript-stringify": { @@ -8130,13 +8524,12 @@ "dev": true }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "jsbn": { @@ -8163,16 +8556,10 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, "json-schema-traverse": { @@ -8209,30 +8596,31 @@ } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" } }, "karma": { - "version": "6.3.4", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.4.tgz", - "integrity": "sha512-hbhRogUYIulfkBTZT7xoPrCYhRBnBoqbbL4fszWD0ReFGUxU+LYBr3dwKdAluaDQ/ynT9/7C+Lf7pPNW4gSx4Q==", + "version": "6.3.9", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.9.tgz", + "integrity": "sha512-E/MqdLM9uVIhfuyVnrhlGBu4miafBdXEAEqCmwdEMh3n17C7UWC/8Kvm3AYKr91gc7scutekZ0xv6rxRaUCtnw==", "dev": true, "requires": { "body-parser": "^1.19.0", @@ -8253,10 +8641,10 @@ "qjobs": "^1.2.0", "range-parser": "^1.2.1", "rimraf": "^3.0.2", - "socket.io": "^3.1.0", + "socket.io": "^4.2.0", "source-map": "^0.6.1", "tmp": "^0.2.1", - "ua-parser-js": "^0.7.28", + "ua-parser-js": "^0.7.30", "yargs": "^16.1.1" } }, @@ -8281,23 +8669,23 @@ } }, "karma-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.3.tgz", - "integrity": "sha512-atDvLQqvPcLxhED0cmXYdsPMCQuh6Asa9FMZW1bhNqlVEhJoB9qyZ2BY1gu7D/rr5GLGb5QzYO4siQskxaWP/g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.1.0.tgz", + "integrity": "sha512-uIejpnArNFQIovB6EPsKO/T4XofELdJWXcA2ADXztFlKhHbr0Ws6ba7wKTMVWsIhEs4iJxdhQkCQrkkhFJSZCw==", "dev": true, "requires": { - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^4.0.3", "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", "minimatch": "^3.0.4" } }, "karma-firefox-launcher": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.1.tgz", - "integrity": "sha512-VzDMgPseXak9DtfyE1O5bB2BwsMy1zzO1kUxVW1rP0yhC4tDNJ0p3JoFdzvrK4QqVzdqUMa9Rx9YzkdFp8hz3Q==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", + "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", "dev": true, "requires": { "is-wsl": "^2.2.0", @@ -8379,12 +8767,6 @@ "type-check": "~0.4.0" } }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, "linkify-it": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", @@ -8429,12 +8811,12 @@ } }, "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" } }, "lodash": { @@ -8498,18 +8880,22 @@ "lodash._reinterpolate": "^3.0.0" } }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "dev": true }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, "log4js": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", @@ -8532,9 +8918,9 @@ } }, "loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", + "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", "dev": true }, "lower-case": { @@ -8603,6 +8989,15 @@ "uc.micro": "^1.0.5" }, "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", @@ -8798,24 +9193,24 @@ } }, "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true }, "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "requires": { - "mime-db": "1.49.0" + "mime-db": "1.51.0" } }, "mimic-response": { @@ -8933,6 +9328,77 @@ "minimist": "^1.2.5" } }, + "mocha": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", + "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.2", + "debug": "4.3.2", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.7", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.25", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.1.5", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -8987,6 +9453,12 @@ "dev": true, "optional": true }, + "nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "dev": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -9099,6 +9571,15 @@ "lower-case": "^1.1.1" } }, + "node-fetch": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, "node-forge": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", @@ -9151,9 +9632,9 @@ } }, "node-releases": { - "version": "1.1.75", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", - "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, "nopt": { @@ -9165,26 +9646,6 @@ "abbrev": "1" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -9281,9 +9742,9 @@ } }, "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "dev": true }, "object-is": { @@ -9324,14 +9785,14 @@ } }, "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" + "es-abstract": "^1.19.1" } }, "object.pick": { @@ -9344,14 +9805,14 @@ } }, "object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" + "es-abstract": "^1.19.1" } }, "obuf": { @@ -9459,21 +9920,21 @@ "dev": true }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" } }, "p-map": { @@ -9580,15 +10041,13 @@ } }, "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "json-parse-better-errors": "^1.0.1" } }, "parseurl": { @@ -9671,9 +10130,9 @@ } }, "perfect-scrollbar": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.2.tgz", - "integrity": "sha512-McHAinFkyzKbBZrFtb4MT2mxkehp15KvOX/UrjB8C5EZZXHTHgyETo5IGFYtHRTI2Pb2bsV0OE0YnkjT9Cw3aw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.3.tgz", + "integrity": "sha512-+Lo6t61lSuCY9ghpqh1NFMXOu8fNwlYGqPoUMOZ3HTFIL4g7+L7zD7hQCLW5yjkOZ6LGTw1m9+MfEew7cngtAQ==", "dev": true }, "performance-now": { @@ -9682,6 +10141,12 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -9725,122 +10190,99 @@ "dev": true, "requires": { "find-up": "^4.0.0" - } - }, - "pngjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-4.0.1.tgz", - "integrity": "sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg==", - "dev": true - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" }, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "ms": "^2.1.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "p-locate": "^4.1.0" } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "p-try": "^2.0.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "color-name": "1.1.3" + "p-limit": "^2.2.0" } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + } + } + }, + "pngjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-4.0.1.tgz", + "integrity": "sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg==", + "dev": true + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "ms": "^2.1.1" } } } }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + } + } + }, "postcss-calc": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", @@ -10392,9 +10834,9 @@ } }, "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", + "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -10432,9 +10874,9 @@ } }, "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, "prelude-ls": { @@ -10450,9 +10892,9 @@ "dev": true }, "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true, "optional": true }, @@ -10473,9 +10915,9 @@ "dev": true }, "prismjs": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.1.tgz", - "integrity": "sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow==", + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz", + "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==", "dev": true }, "process": { @@ -10613,9 +11055,9 @@ "dev": true }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", "dev": true }, "query-string": { @@ -10679,13 +11121,13 @@ "dev": true }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", "dev": true, "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.1", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } @@ -10719,26 +11161,6 @@ "pify": "^2.3.0" } }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -10787,12 +11209,12 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", "dev": true, "requires": { - "regenerate": "^1.4.0" + "regenerate": "^1.4.2" } }, "regenerator-runtime": { @@ -10858,17 +11280,17 @@ "dev": true }, "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", "dev": true, "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^9.0.0", + "regjsgen": "^0.5.2", + "regjsparser": "^0.7.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" } }, "registry-auth-token": { @@ -10896,9 +11318,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -10944,28 +11366,46 @@ "dev": true }, "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" } }, "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, "nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, "requires": { "boolbase": "^1.0.0" @@ -11036,12 +11476,6 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -11158,9 +11592,9 @@ } }, "rollup": { - "version": "2.56.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.2.tgz", - "integrity": "sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ==", + "version": "2.62.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.62.0.tgz", + "integrity": "sha512-cJEQq2gwB0GWMD3rYImefQTSjrPYaC6s4J9pYqnstVLJ1CHa/aZNVkD4Epuvg4iLeMA4KRiq7UM7awKK6j7jcw==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -11177,9 +11611,9 @@ }, "dependencies": { "@rollup/pluginutils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.1.tgz", - "integrity": "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.2.tgz", + "integrity": "sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ==", "dev": true, "requires": { "estree-walker": "^2.0.1", @@ -11204,6 +11638,17 @@ "jest-worker": "^26.2.1", "serialize-javascript": "^4.0.0", "terser": "^5.0.0" + }, + "dependencies": { + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + } } }, "run-parallel": { @@ -11296,6 +11741,12 @@ "node-forge": "^0.10.0" } }, + "semiver": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", + "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==", + "dev": true + }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -11323,9 +11774,9 @@ } }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "dev": true, "requires": { "debug": "2.6.9", @@ -11335,9 +11786,9 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" @@ -11367,17 +11818,17 @@ "dev": true }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } }, "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -11440,15 +11891,15 @@ } }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.17.2" } }, "set-blocking": { @@ -11476,9 +11927,9 @@ "dev": true }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "sha.js": { @@ -11518,9 +11969,9 @@ } }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, "simple-swizzle": { @@ -11546,17 +11997,6 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, "smoothscroll-polyfill": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.4.tgz", @@ -11674,26 +12114,23 @@ } }, "socket.io": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.1.2.tgz", - "integrity": "sha512-JubKZnTQ4Z8G4IZWtaAZSiRP3I/inpy8c/Bsx2jrwGrTbKeVU5xd6qkKMHpChYeM3dWZSO0QACiGK+obhBNwYw==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.0.tgz", + "integrity": "sha512-bnpJxswR9ov0Bw6ilhCvO38/1WPtE3eA2dtxi2Iq4/sFebiDJQzgKNYA7AuVVdGW09nrESXd90NbZqtDd9dzRQ==", "dev": true, "requires": { - "@types/cookie": "^0.4.0", - "@types/cors": "^2.8.8", - "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "~2.0.0", - "debug": "~4.3.1", - "engine.io": "~4.1.0", - "socket.io-adapter": "~2.1.0", - "socket.io-parser": "~4.0.3" + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" } }, "socket.io-adapter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.1.0.tgz", - "integrity": "sha512-+vDov/aTsLjViYTwS9fPy5pEtTkrbEKsw2M+oVSoFGw6OD1IpvlV1VPhUzNbofCQ8oyMbdYJqDtGdmHQK6TdPg==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", "dev": true }, "socket.io-parser": { @@ -11708,20 +12145,28 @@ } }, "sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "requires": { "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", + "uuid": "^8.3.2", "websocket-driver": "^0.7.4" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } } }, "sockjs-client": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", - "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", + "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", "dev": true, "requires": { "debug": "^3.2.6", @@ -11729,7 +12174,7 @@ "faye-websocket": "^0.11.3", "inherits": "^2.0.4", "json3": "^3.3.3", - "url-parse": "^1.5.1" + "url-parse": "^1.5.3" }, "dependencies": { "debug": { @@ -11750,6 +12195,14 @@ "dev": true, "requires": { "is-plain-obj": "^1.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + } } }, "source-list-map": { @@ -11778,9 +12231,9 @@ } }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -11799,38 +12252,6 @@ "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", "dev": true }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", - "dev": true - }, "spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -11973,18 +12394,18 @@ "dev": true }, "std-env": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz", - "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.1.tgz", + "integrity": "sha512-eOsoKTWnr6C8aWrqJJ2KAReXoa7Vn5Ywyw6uCXgA/xDhxPoaIsBa5aNJmISY04dLwXPBnDHW4diGM7Sn5K4R/g==", "dev": true, "requires": { - "ci-info": "^3.0.0" + "ci-info": "^3.1.1" }, "dependencies": { "ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true } } @@ -12044,6 +12465,32 @@ "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true } } }, @@ -12054,14 +12501,14 @@ "dev": true }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "string.prototype.trimend": { @@ -12093,13 +12540,24 @@ "safe-buffer": "~5.1.0" } }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom-string": { @@ -12251,6 +12709,15 @@ "color-convert": "^1.9.0" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -12289,6 +12756,16 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -12300,40 +12777,6 @@ } } }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -12347,14 +12790,14 @@ "dev": true }, "terser": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", - "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", "dev": true, "requires": { "commander": "^2.20.0", "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" }, "dependencies": { "source-map": { @@ -12428,6 +12871,15 @@ "semver": "^5.6.0" } }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", @@ -12475,6 +12927,15 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "terser": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", @@ -12666,9 +13127,9 @@ } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, "toml": { @@ -12693,6 +13154,12 @@ "punycode": "^2.1.1" } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, "tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -12776,15 +13243,15 @@ } }, "typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", "dev": true }, "ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", + "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", "dev": true }, "uc.micro": { @@ -12824,31 +13291,31 @@ } }, "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true }, "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true }, "union-value": { @@ -12912,9 +13379,9 @@ } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "unpipe": { @@ -13087,9 +13554,9 @@ } }, "url-parse": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", - "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz", + "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", "dev": true, "requires": { "querystringify": "^2.1.1", @@ -13170,16 +13637,6 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -13201,6 +13658,14 @@ "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + } } }, "vm-browserify": { @@ -13241,15 +13706,15 @@ } }, "vue-prism-editor": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/vue-prism-editor/-/vue-prism-editor-1.2.2.tgz", - "integrity": "sha512-Lq2VgVygTx3Whn/tC8gD4m1ajA4lzSyCTqPLZA1Dq/ErbBaZA93FWRblwCoDR7AD2nXhGWuiTzb5ih3guzB7DA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/vue-prism-editor/-/vue-prism-editor-1.3.0.tgz", + "integrity": "sha512-54RfgtMGRMNr9484zKMOZs1wyLDR6EfFylzE2QrMCD9alCvXyYYcS0vX8oUHh+6pMUu6ts59uSN9cHglpU2NRQ==", "dev": true }, "vue-router": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.2.tgz", - "integrity": "sha512-807gn82hTnjCYGrnF3eNmIw/dk7/GE4B5h69BlyCK9KHASwSloD1Sjcn06zg9fVG4fYH2DrsNBZkpLtb25WtaQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.3.tgz", + "integrity": "sha512-FUlILrW3DGitS2h+Xaw8aRNvGTwtuaxrRkNSHWTizOfLUie7wuYwezeZ50iflRn8YPV5kxmU2LQuu3nM/b3Zsg==", "dev": true }, "vue-server-renderer": { @@ -13358,24 +13823,25 @@ "dev": true }, "vue2-perfect-scrollbar": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/vue2-perfect-scrollbar/-/vue2-perfect-scrollbar-1.5.0.tgz", - "integrity": "sha512-hQAjhOX9MP3/ePa/AozKKtpiHSaV0dBlniyt2L7eqC/PsDx+pu7YBmTpM0KR5WlNq5GZwreK6215L8ZG1EHC7w==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/vue2-perfect-scrollbar/-/vue2-perfect-scrollbar-1.5.2.tgz", + "integrity": "sha512-3TSBuRUgeLmiwM7bcqQ7OIoOIcltjNocGWwoHfwgHUhkVjVUVNRun2XFdwvN9hZFfjDDW9cHYsEoIQwvgsSCbw==", "dev": true, "requires": { "cssnano": "^4.1.3", - "perfect-scrollbar": "^1.5.0", + "perfect-scrollbar": "^1.5.2", "postcss-import": "^12.0.0" } }, "vuepress": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/vuepress/-/vuepress-1.8.2.tgz", - "integrity": "sha512-BU1lUDwsA3ghf7a9ga4dsf0iTc++Z/l7BR1kUagHWVBHw7HNRgRDfAZBDDQXhllMILVToIxaTifpne9mSi94OA==", + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/vuepress/-/vuepress-1.9.5.tgz", + "integrity": "sha512-cLLCKkJSxL0PCgHZILrZ13z57Wi66zABhwe2n0JaoXq/bWXdGPfr9WoObVdQ0p186I/IKRIw4Ip22Y6qy+JA8g==", "dev": true, "requires": { - "@vuepress/core": "1.8.2", - "@vuepress/theme-default": "1.8.2", + "@vuepress/core": "1.9.5", + "@vuepress/theme-default": "1.9.5", + "@vuepress/types": "1.9.5", "cac": "^6.5.6", "envinfo": "^7.2.0", "opencollective-postinstall": "^2.0.2", @@ -13458,6 +13924,16 @@ "@vuepress/shared-utils": "^1.2.0" } }, + "vuepress-plugin-flexsearch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/vuepress-plugin-flexsearch/-/vuepress-plugin-flexsearch-0.3.0.tgz", + "integrity": "sha512-dffrD35hDE6FcpN3JRTy5E9tccq1uB7l+ocdPBObuiuFjHJP/xlU+pOR3Yc6yQlsvP5ResweGOP2kaeGViorBg==", + "dev": true, + "requires": { + "@vuepress/plugin-search": "^1.8.2", + "flexsearch": "^0.6.32" + } + }, "vuepress-plugin-redirect": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/vuepress-plugin-redirect/-/vuepress-plugin-redirect-1.2.5.tgz", @@ -13486,14 +13962,6 @@ "acorn": "^8.1.0", "vue-prism-editor": "^1.2.2", "vue2-perfect-scrollbar": "^1.5.0" - }, - "dependencies": { - "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "dev": true - } } }, "watchpack": { @@ -13789,6 +14257,12 @@ "minimalistic-assert": "^1.0.0" } }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, "webpack": { "version": "4.46.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", @@ -14022,12 +14496,12 @@ } }, "webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", + "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==", "dev": true, "requires": { - "ansi-html": "0.0.7", + "ansi-html-community": "0.0.8", "bonjour": "^3.5.0", "chokidar": "^2.1.8", "compression": "^1.7.4", @@ -14167,6 +14641,12 @@ } } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -14242,6 +14722,18 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, "is-absolute-url": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", @@ -14364,6 +14856,15 @@ } } }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", @@ -14630,6 +15131,16 @@ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "when": { "version": "3.6.4", "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", @@ -14688,6 +15199,12 @@ "errno": "~0.1.7" } }, + "workerpool": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "dev": true + }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", @@ -14782,9 +15299,9 @@ } }, "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "dev": true }, "xdg-basedir": { @@ -14835,9 +15352,35 @@ } }, "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + } + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true }, "zepto": { diff --git a/package.json b/package.json index e4f1708ef..5614d020d 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "chartjs-plugin-annotation", "homepage": "https://www.chartjs.org/chartjs-plugin-annotation/index", "description": "Annotations for Chart.js", - "version": "1.0.2", + "version": "1.2.2", "author": "Evert Timberg ", "license": "MIT", "main": "dist/chartjs-plugin-annotation.js", @@ -19,32 +19,36 @@ "scripts": { "build": "rollup -c", "dev": "karma start --auto-watch --no-single-run --browsers chrome", + "dev:ff": "karma start --auto-watch --no-single-run --browsers firefox", "docs": "npm run build && vuepress build docs --no-cache", "docs:dev": "npm run build && vuepress dev docs --no-cache", "lint": "concurrently \"npm:lint-*\"", - "lint-js": "eslint \"old_samples/**/*.html\" \"test/**/*.js\" \"src/**/*.js\"", + "lint-js": "eslint \"test/**/*.js\" \"src/**/*.js\"", "lint-md": "eslint \"**/*.md\"", "lint-types": "eslint \"types/**/*.ts\" && tsc -p types/tests/", "test": "cross-env NODE_ENV=test concurrently \"npm:test-*\"", - "test-types": "tsc -p types/tests/", + "test-integration": "mocha --full-trace test/integration/*-test.js", + "test-karma": "karma start --auto-watch --single-run", "test-lint": "npm run lint", - "test-karma": "karma start --auto-watch --single-run" + "test-types": "tsc -p types/tests/" }, "devDependencies": { "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^13.0.0", - "@typescript-eslint/eslint-plugin": "^4.22.0", - "@typescript-eslint/parser": "^4.22.0", + "@simonbrunel/vuepress-plugin-versions": "^0.2.0", + "@typescript-eslint/eslint-plugin": "^5.4.0", + "@typescript-eslint/parser": "^5.4.0", "chart.js": "^3.1.0", - "chartjs-plugin-autocolors": "0.0.3", + "chartjs-plugin-autocolors": "^0.0.5", "chartjs-test-utils": "^0.3.0", "concurrently": "^6.0.2", "cross-env": "^7.0.3", - "eslint": "^7.24.0", + "eslint": "^8.2.0", "eslint-config-chartjs": "^0.3.0", "eslint-plugin-es": "^4.1.0", "eslint-plugin-html": "^6.1.2", "eslint-plugin-markdown": "^2.0.1", + "fs-extra": "^10.0.0", "karma": "^6.3.2", "karma-chrome-launcher": "^3.1.0", "karma-coverage": "^2.0.3", @@ -52,12 +56,14 @@ "karma-jasmine": "^4.0.1", "karma-jasmine-html-reporter": "^1.5.4", "karma-rollup-preprocessor": "^7.0.7", + "mocha": "^9.1.3", "pixelmatch": "^5.2.1", "rollup": "^2.45.2", "rollup-plugin-istanbul": "^3.0.0", "rollup-plugin-terser": "^7.0.2", "typescript": "^4.2.4", "vuepress": "^1.8.2", + "vuepress-plugin-flexsearch": "^0.3.0", "vuepress-plugin-redirect": "^1.2.5", "vuepress-theme-chartjs": "^0.2.0" }, diff --git a/scripts/docs-config.sh b/scripts/docs-config.sh new file mode 100755 index 000000000..25b3589d9 --- /dev/null +++ b/scripts/docs-config.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +set -e + +# tag is next|latest|master|x.x.x +# https://www.chartjs.org/chartjs-pligin-annotation/$tag/ +function tag_from_version { + local version=$1 + local mode=$2 + local tag='' + if [ "$version" == "master" ]; then + tag=master + elif [[ "$version" =~ ^[^-]+$ ]]; then + if [[ "$mode" == "release" ]]; then + tag=$version + else + tag=latest + fi + else + tag=next + fi + echo $tag +} + +VERSION=$1 +MODE=$2 + +TAG=$(tag_from_version "$VERSION" "$MODE") + +sed -i -e "s/VERSION/$TAG/g" "docs/.vuepress/config.js" diff --git a/src/annotation.js b/src/annotation.js index 8d71f4c38..3fa327399 100644 --- a/src/annotation.js +++ b/src/annotation.js @@ -1,34 +1,38 @@ -import ChartJsV3, {Animations, Chart, defaults} from 'chart.js-v3'; -const {clipArea, unclipArea, isFinite, valueOrDefault, isObject, isArray} = ChartJsV3.helpers; +import ChartJsV3, {Animations, Chart} from 'chart.js-v3'; +const {clipArea, unclipArea, isObject, isArray} = ChartJsV3.helpers; import {handleEvent, hooks, updateListeners} from './events'; -import BoxAnnotation from './types/box'; -import LineAnnotation from './types/line'; -import EllipseAnnotation from './types/ellipse'; -import PointAnnotation from './types/point'; -import {version} from '../package.json'; +import {adjustScaleRange, verifyScaleOptions} from './scale'; +import {annotationTypes} from './types'; +import {requireVersion} from './helpers'; +import {name, version} from '../package.json'; const chartStates = new Map(); -const annotationTypes = { - box: BoxAnnotation, - line: LineAnnotation, - ellipse: EllipseAnnotation, - point: PointAnnotation -}; - -Object.keys(annotationTypes).forEach(key => { - defaults.describe(`elements.${annotationTypes[key].id}`, { - _fallback: 'plugins.annotation' - }); -}); - export default { id: 'annotation', version, + /* TODO: enable in v2 + beforeRegister() { + requireVersion('chart.js', '3.7', Chart.version); + }, + */ + afterRegister() { Chart.register(annotationTypes); + + // TODO: Remove this check, warning and workaround in v2 + if (!requireVersion('chart.js', '3.7', Chart.version, false)) { + console.warn(`${name} has known issues with chart.js versions prior to 3.7, please consider upgrading.`); + + // Workaround for https://github.com/chartjs/chartjs-plugin-annotation/issues/572 + Chart.defaults.set('elements.lineAnnotation', { + callout: {}, + font: {}, + padding: 6 + }); + } }, afterUnregister() { @@ -39,6 +43,7 @@ export default { chartStates.set(chart, { annotations: [], elements: [], + visibleElements: [], listeners: {}, listened: false, moveListened: false @@ -61,6 +66,7 @@ export default { } else if (isArray(annotationOptions)) { annotations.push(...annotationOptions); } + verifyScaleOptions(annotations, chart.scales); }, afterDataLimits(chart, args) { @@ -72,27 +78,28 @@ export default { const state = chartStates.get(chart); updateListeners(chart, state, options); updateElements(chart, state, options, args.mode); + state.visibleElements = state.elements.filter(el => !el.skip && el.options.display); }, - beforeDatasetsDraw(chart) { - draw(chart, 'beforeDatasetsDraw'); + beforeDatasetsDraw(chart, _args, options) { + draw(chart, 'beforeDatasetsDraw', options.clip); }, - afterDatasetsDraw(chart) { - draw(chart, 'afterDatasetsDraw'); + afterDatasetsDraw(chart, _args, options) { + draw(chart, 'afterDatasetsDraw', options.clip); }, - beforeDraw(chart) { - draw(chart, 'beforeDraw'); + beforeDraw(chart, _args, options) { + draw(chart, 'beforeDraw', options.clip); }, - afterDraw(chart) { - draw(chart, 'afterDraw'); + afterDraw(chart, _args, options) { + draw(chart, 'afterDraw', options.clip); }, beforeEvent(chart, args, options) { const state = chartStates.get(chart); - handleEvent(chart, state, args.event, options); + handleEvent(state, args.event, options); }, destroy(chart) { @@ -104,14 +111,15 @@ export default { }, defaults: { - drawTime: 'afterDatasetsDraw', - dblClickSpeed: 350, // ms animations: { numbers: { - properties: ['x', 'y', 'x2', 'y2', 'width', 'height'], + properties: ['x', 'y', 'x2', 'y2', 'width', 'height', 'pointX', 'pointY', 'labelX', 'labelY', 'labelWidth', 'labelHeight', 'radius'], type: 'number' }, }, + clip: true, + dblClickSpeed: 350, // ms + drawTime: 'afterDatasetsDraw', label: { drawTime: null } @@ -122,7 +130,7 @@ export default { _scriptable: (prop) => !hooks.includes(prop), annotations: { _allKeys: false, - _fallback: (prop, opts) => `elements.${annotationTypes[opts.type || 'line'].id}`, + _fallback: (prop, opts) => `elements.${annotationTypes[resolveType(opts.type)].id}`, }, }, @@ -140,6 +148,14 @@ function resolveAnimations(chart, animOpts, mode) { return new Animations(chart, animOpts); } +function resolveType(type = 'line') { + if (annotationTypes[type]) { + return type; + } + console.warn(`Unknown annotation type: '${type}', defaulting to 'line'`); + return 'line'; +} + function updateElements(chart, state, options, mode) { const animations = resolveAnimations(chart, options.animations, mode); @@ -147,27 +163,60 @@ function updateElements(chart, state, options, mode) { const elements = resyncElements(state.elements, annotations); for (let i = 0; i < annotations.length; i++) { - const annotation = annotations[i]; - let el = elements[i]; - const elType = annotationTypes[annotation.type] || annotationTypes.line; - if (!el || !(el instanceof elType)) { - el = elements[i] = new elType(); - } - const opts = resolveAnnotationOptions(annotation.setContext(getContext(chart, el, annotation))); - const properties = el.resolveElementProperties(chart, opts); + const annotationOptions = annotations[i]; + const element = getOrCreateElement(elements, i, annotationOptions.type); + const resolver = annotationOptions.setContext(getContext(chart, element, annotationOptions)); + const resolvedOptions = resolveAnnotationOptions(resolver); + const properties = element.resolveElementProperties(chart, resolvedOptions); + properties.skip = isNaN(properties.x) || isNaN(properties.y); - properties.options = opts; - animations.update(el, properties); + properties.options = resolvedOptions; + + if ('elements' in properties) { + updateSubElements(element, properties, resolver, animations); + // Remove the sub-element definitions from properties, so the actual elements + // are not overwritten by their definitions + delete properties.elements; + } + + animations.update(element, properties); } } +function updateSubElements(mainElement, {elements, initProperties}, resolver, animations) { + const subElements = mainElement.elements || (mainElement.elements = []); + subElements.length = elements.length; + for (let i = 0; i < elements.length; i++) { + const definition = elements[i]; + const properties = definition.properties; + const subElement = getOrCreateElement(subElements, i, definition.type, initProperties); + const subResolver = resolver[definition.optionScope].override(definition); + properties.options = resolveAnnotationOptions(subResolver); + animations.update(subElement, properties); + } +} + +function getOrCreateElement(elements, index, type, initProperties) { + const elementClass = annotationTypes[resolveType(type)]; + let element = elements[index]; + if (!element || !(element instanceof elementClass)) { + element = elements[index] = new elementClass(); + if (isObject(initProperties)) { + Object.assign(element, initProperties); + } + } + return element; +} + function resolveAnnotationOptions(resolver) { - const elType = annotationTypes[resolver.type] || annotationTypes.line; + const elementClass = annotationTypes[resolveType(resolver.type)]; const result = {}; result.id = resolver.id; result.type = resolver.type; result.drawTime = resolver.drawTime; - Object.assign(result, resolveObj(resolver, elType.defaults), resolveObj(resolver, elType.defaultRoutes)); + Object.assign(result, + resolveObj(resolver, elementClass.defaults), + resolveObj(resolver, elementClass.defaultRoutes)); for (const hook of hooks) { result[hook] = resolver[hook]; } @@ -176,10 +225,10 @@ function resolveAnnotationOptions(resolver) { function resolveObj(resolver, defs) { const result = {}; - for (const name of Object.keys(defs)) { - const optDefs = defs[name]; - const value = resolver[name]; - result[name] = isObject(optDefs) ? resolveObj(value, optDefs) : value; + for (const prop of Object.keys(defs)) { + const optDefs = defs[prop]; + const value = resolver[prop]; + result[prop] = isObject(optDefs) ? resolveObj(value, optDefs) : value; } return result; } @@ -205,72 +254,44 @@ function resyncElements(elements, annotations) { return elements; } -function draw(chart, caller) { +function draw(chart, caller, clip) { const {ctx, chartArea} = chart; - const state = chartStates.get(chart); - const elements = state.elements.filter(el => !el.skip && el.options.display); + const {visibleElements} = chartStates.get(chart); - clipArea(ctx, chartArea); - elements.forEach(el => { - if (el.options.drawTime === caller) { - el.draw(ctx); - } - }); - unclipArea(ctx); + if (clip) { + clipArea(ctx, chartArea); + } - elements.forEach(el => { - if ('drawLabel' in el && el.options.label && (el.options.label.drawTime || el.options.drawTime) === caller) { + drawElements(ctx, visibleElements, caller); + drawSubElements(ctx, visibleElements, caller); + + if (clip) { + unclipArea(ctx); + } + + visibleElements.forEach(el => { + if (!('drawLabel' in el)) { + return; + } + const label = el.options.label; + if (label && label.enabled && label.content && (label.drawTime || el.options.drawTime) === caller) { el.drawLabel(ctx, chartArea); } }); } -function adjustScaleRange(chart, scale, annotations) { - const range = getScaleLimits(scale, annotations); - let changed = false; - if (isFinite(range.min) && - typeof scale.options.min === 'undefined' && - typeof scale.options.suggestedMin === 'undefined') { - changed = scale.min !== range.min; - scale.min = range.min; - } - if (isFinite(range.max) && - typeof scale.options.max === 'undefined' && - typeof scale.options.suggestedMax === 'undefined') { - changed = scale.max !== range.max; - scale.max = range.max; - } - if (changed && typeof scale.handleTickRangeOptions === 'function') { - scale.handleTickRangeOptions(); +function drawElements(ctx, elements, caller) { + for (const el of elements) { + if (el.options.drawTime === caller) { + el.draw(ctx); + } } } -function getScaleLimits(scale, annotations) { - const axis = scale.axis; - const scaleID = scale.id; - const scaleIDOption = axis + 'ScaleID'; - let min = valueOrDefault(scale.min, Number.NEGATIVE_INFINITY); - let max = valueOrDefault(scale.max, Number.POSITIVE_INFINITY); - for (const annotation of annotations) { - if (annotation.scaleID === scaleID) { - for (const prop of ['value', 'endValue']) { - const raw = annotation[prop]; - if (raw) { - const value = scale.parse(raw); - min = Math.min(min, value); - max = Math.max(max, value); - } - } - } else if (annotation[scaleIDOption] === scaleID) { - for (const prop of [axis + 'Min', axis + 'Max', axis + 'Value']) { - const raw = annotation[prop]; - if (raw) { - const value = scale.parse(raw); - min = Math.min(min, value); - max = Math.max(max, value); - } - } +function drawSubElements(ctx, elements, caller) { + for (const el of elements) { + if (isArray(el.elements)) { + drawElements(ctx, el.elements, caller); } } - return {min, max}; } diff --git a/src/events.js b/src/events.js index 179b70fff..dce9b48fc 100644 --- a/src/events.js +++ b/src/events.js @@ -1,13 +1,11 @@ import ChartJsV3 from 'chart.js-v3'; -const {distanceBetweenPoints} = ChartJsV3.helpers; -const callHandler = ChartJsV3.helpers.callback; +const {distanceBetweenPoints, defined, callback} = ChartJsV3.helpers; const clickHooks = ['click', 'dblclick']; const moveHooks = ['enter', 'leave']; export const hooks = clickHooks.concat(moveHooks); export function updateListeners(chart, state, options) { - const annotations = state.annotations || []; state.listened = false; state.moveListened = false; @@ -15,6 +13,8 @@ export function updateListeners(chart, state, options) { if (typeof options[hook] === 'function') { state.listened = true; state.listeners[hook] = options[hook]; + } else if (defined(state.listeners[hook])) { + delete state.listeners[hook]; } }); moveHooks.forEach(hook => { @@ -24,7 +24,7 @@ export function updateListeners(chart, state, options) { }); if (!state.listened || !state.moveListened) { - annotations.forEach(scope => { + state.annotations.forEach(scope => { if (!state.listened) { clickHooks.forEach(hook => { if (typeof scope[hook] === 'function') { @@ -44,22 +44,22 @@ export function updateListeners(chart, state, options) { } } -export function handleEvent(chart, state, event, options) { +export function handleEvent(state, event, options) { if (state.listened) { switch (event.type) { case 'mousemove': case 'mouseout': - handleMoveEvents(chart, state, event); + handleMoveEvents(state, event); break; case 'click': - handleClickEvents(chart, state, event, options); + handleClickEvents(state, event, options); break; default: } } } -function handleMoveEvents(chart, state, event) { +function handleMoveEvents(state, event) { if (!state.moveListened) { return; } @@ -73,20 +73,20 @@ function handleMoveEvents(chart, state, event) { const previous = state.hovered; state.hovered = element; - dispatchMoveEvents(chart, state, {previous, element}, event); + dispatchMoveEvents(state, {previous, element}, event); } -function dispatchMoveEvents(chart, state, elements, event) { +function dispatchMoveEvents(state, elements, event) { const {previous, element} = elements; if (previous && previous !== element) { - dispatchEvent(chart, previous.options.leave || state.listeners.leave, previous, event); + dispatchEvent(previous.options.leave || state.listeners.leave, previous, event); } if (element && element !== previous) { - dispatchEvent(chart, element.options.enter || state.listeners.enter, element, event); + dispatchEvent(element.options.enter || state.listeners.enter, element, event); } } -function handleClickEvents(chart, state, event, options) { +function handleClickEvents(state, event, options) { const listeners = state.listeners; const element = getNearestItem(state.elements, event); if (element) { @@ -97,22 +97,22 @@ function handleClickEvents(chart, state, event, options) { // 2nd click before timeout, so its a double click clearTimeout(element.clickTimeout); delete element.clickTimeout; - dispatchEvent(chart, dblclick, element, event); + dispatchEvent(dblclick, element, event); } else if (dblclick) { // if there is a dblclick handler, wait for dblClickSpeed ms before deciding its a click element.clickTimeout = setTimeout(() => { delete element.clickTimeout; - dispatchEvent(chart, click, element, event); + dispatchEvent(click, element, event); }, options.dblClickSpeed); } else { // no double click handler, just call the click handler directly - dispatchEvent(chart, click, element, event); + dispatchEvent(click, element, event); } } } -function dispatchEvent(chart, handler, element, event) { - callHandler(handler, [{chart, element}, event]); +function dispatchEvent(handler, element, event) { + callback(handler, [element.$context, event]); } function getNearestItem(elements, position) { diff --git a/src/helpers.js b/src/helpers.js deleted file mode 100644 index 256a9ff87..000000000 --- a/src/helpers.js +++ /dev/null @@ -1,35 +0,0 @@ -import ChartJsV3 from 'chart.js-v3'; -const {isFinite} = ChartJsV3.helpers; - -export const clamp = (x, from, to) => Math.min(to, Math.max(from, x)); - -export function clampAll(obj, from, to) { - for (const key of Object.keys(obj)) { - obj[key] = clamp(obj[key], from, to); - } - return obj; -} - -export function scaleValue(scale, value, fallback) { - value = typeof value === 'number' ? value : scale.parse(value); - return isFinite(value) ? scale.getPixelForValue(value) : fallback; -} - -/** - * Rotate a `point` relative to `center` point by `angle` - * @param {{x: number, y: number}} point - the point to rotate - * @param {{x: number, y: number}} center - center point for rotation - * @param {number} angle - angle for rotation, in radians - * @returns {{x: number, y: number}} rotated point - */ -export function rotated(point, center, angle) { - var cos = Math.cos(angle); - var sin = Math.sin(angle); - var cx = center.x; - var cy = center.y; - - return { - x: cx + cos * (point.x - cx) - sin * (point.y - cy), - y: cy + sin * (point.x - cx) + cos * (point.y - cy) - }; -} diff --git a/src/helpers/helpers.canvas.js b/src/helpers/helpers.canvas.js new file mode 100644 index 000000000..02779b36c --- /dev/null +++ b/src/helpers/helpers.canvas.js @@ -0,0 +1,122 @@ +import ChartJsV3 from 'chart.js-v3'; +const {addRoundedRectPath, isArray, toFont, toTRBLCorners, valueOrDefault} = ChartJsV3.helpers; + +import {Image as CanvasImage} from 'canvas'; + +import {clampAll} from './helpers.core'; +import {calculateTextAlignment, getSize} from './helpers.options'; + +const widthCache = new Map(); + +export function isImageOrCanvas(content) { + return content instanceof CanvasImage || content instanceof Image || content instanceof HTMLCanvasElement; +} + +/** + * Apply border options to the canvas context before drawing a shape + * @param {CanvasRenderingContext2D} ctx - chart canvas context + * @param {Object} options - options with border configuration + * @returns {boolean} true is the border options have been applied + */ +export function setBorderStyle(ctx, options) { + if (options && options.borderWidth) { + ctx.lineCap = options.borderCapStyle; + ctx.setLineDash(options.borderDash); + ctx.lineDashOffset = options.borderDashOffset; + ctx.lineJoin = options.borderJoinStyle; + ctx.lineWidth = options.borderWidth; + ctx.strokeStyle = options.borderColor; + return true; + } +} + +/** + * Apply shadow options to the canvas context before drawing a shape + * @param {CanvasRenderingContext2D} ctx - chart canvas context + * @param {Object} options - options with shadow configuration + */ +export function setShadowStyle(ctx, options) { + ctx.shadowColor = options.backgroundShadowColor; + ctx.shadowBlur = options.shadowBlur; + ctx.shadowOffsetX = options.shadowOffsetX; + ctx.shadowOffsetY = options.shadowOffsetY; +} + +/** + * Measure the label size using the label options. + * @param {CanvasRenderingContext2D} ctx - chart canvas context + * @param {Object} options - options to configure the label + * @returns {{width: number, height: number}} the measured size of the label + */ +export function measureLabelSize(ctx, options) { + const content = options.content; + if (isImageOrCanvas(content)) { + return { + width: getSize(content.width, options.width), + height: getSize(content.height, options.height) + }; + } + const font = toFont(options.font); + const lines = isArray(content) ? content : [content]; + const mapKey = lines.join() + font.string + (ctx._measureText ? '-spriting' : ''); + if (!widthCache.has(mapKey)) { + ctx.save(); + ctx.font = font.string; + const count = lines.length; + let width = 0; + for (let i = 0; i < count; i++) { + const text = lines[i]; + width = Math.max(width, ctx.measureText(text).width); + } + ctx.restore(); + const height = count * font.lineHeight; + widthCache.set(mapKey, {width, height}); + } + return widthCache.get(mapKey); +} + +/** + * Draw a box with the size and the styling options. + * @param {CanvasRenderingContext2D} ctx - chart canvas context + * @param {{x: number, y: number, width: number, height: number}} rect - rect to draw + * @param {Object} options - options to style the box + * @returns {undefined} + */ +export function drawBox(ctx, rect, options) { + const {x, y, width, height} = rect; + ctx.save(); + setShadowStyle(ctx, options); + const stroke = setBorderStyle(ctx, options); + ctx.fillStyle = options.backgroundColor; + ctx.beginPath(); + addRoundedRectPath(ctx, { + x, y, w: width, h: height, + // TODO: v2 remove support for cornerRadius + radius: clampAll(toTRBLCorners(valueOrDefault(options.cornerRadius, options.borderRadius)), 0, Math.min(width, height) / 2) + }); + ctx.closePath(); + ctx.fill(); + if (stroke) { + ctx.shadowColor = options.borderShadowColor; + ctx.stroke(); + } + ctx.restore(); +} + +export function drawLabel(ctx, rect, options) { + const content = options.content; + if (isImageOrCanvas(content)) { + ctx.drawImage(content, rect.x, rect.y, rect.width, rect.height); + return; + } + const labels = isArray(content) ? content : [content]; + const font = toFont(options.font); + const lh = font.lineHeight; + const x = calculateTextAlignment(rect, options); + const y = rect.y + (lh / 2); + ctx.font = font.string; + ctx.textBaseline = 'middle'; + ctx.textAlign = options.textAlign; + ctx.fillStyle = options.color; + labels.forEach((l, i) => ctx.fillText(l, x, y + (i * lh))); +} diff --git a/src/helpers/helpers.chart.js b/src/helpers/helpers.chart.js new file mode 100644 index 000000000..bc02e4227 --- /dev/null +++ b/src/helpers/helpers.chart.js @@ -0,0 +1,134 @@ +import ChartJsV3 from 'chart.js-v3'; +const {isFinite} = ChartJsV3.helpers; +import {getRectCenterPoint} from './helpers.geometric'; +import {isBoundToPoint} from './helpers.options'; + +/** + * @typedef { import("chart.js").Chart } Chart + * @typedef { import("chart.js").Scale } Scale + * @typedef { import("chart.js").Point } Point + * @typedef { import('../../types/options').CoreAnnotationOptions } CoreAnnotationOptions + * @typedef { import('../../types/options').PointAnnotationOptions } PointAnnotationOptions + */ + +/** + * @param {Scale} scale + * @param {number|string} value + * @param {number} fallback + * @returns {number} + */ +export function scaleValue(scale, value, fallback) { + value = typeof value === 'number' ? value : scale.parse(value); + return isFinite(value) ? scale.getPixelForValue(value) : fallback; +} + +/** + * @param {Scale} scale + * @param {{start: number, end: number}} options + * @returns {{start: number, end: number}} + */ +function getChartDimensionByScale(scale, options) { + if (scale) { + const min = scaleValue(scale, options.min, options.start); + const max = scaleValue(scale, options.max, options.end); + return { + start: Math.min(min, max), + end: Math.max(min, max) + }; + } + return { + start: options.start, + end: options.end + }; +} + +/** + * @param {Chart} chart + * @param {CoreAnnotationOptions} options + * @returns {Point} + */ +export function getChartPoint(chart, options) { + const {chartArea, scales} = chart; + const xScale = scales[options.xScaleID]; + const yScale = scales[options.yScaleID]; + let x = chartArea.width / 2; + let y = chartArea.height / 2; + + if (xScale) { + x = scaleValue(xScale, options.xValue, x); + } + + if (yScale) { + y = scaleValue(yScale, options.yValue, y); + } + return {x, y}; +} + +/** + * @param {Chart} chart + * @param {CoreAnnotationOptions} options + * @returns {{x?:number, y?: number, x2?: number, y2?: number, width?: number, height?: number}} + */ +export function getChartRect(chart, options) { + const xScale = chart.scales[options.xScaleID]; + const yScale = chart.scales[options.yScaleID]; + let {top: y, left: x, bottom: y2, right: x2} = chart.chartArea; + + if (!xScale && !yScale) { + return {}; + } + + const xDim = getChartDimensionByScale(xScale, {min: options.xMin, max: options.xMax, start: x, end: x2}); + x = xDim.start; + x2 = xDim.end; + const yDim = getChartDimensionByScale(yScale, {min: options.yMin, max: options.yMax, start: y, end: y2}); + y = yDim.start; + y2 = yDim.end; + + return { + x, + y, + x2, + y2, + width: x2 - x, + height: y2 - y + }; +} + +/** + * @param {Chart} chart + * @param {PointAnnotationOptions} options + */ +export function getChartCircle(chart, options) { + const point = getChartPoint(chart, options); + return { + x: point.x + options.xAdjust, + y: point.y + options.yAdjust, + width: options.radius * 2, + height: options.radius * 2 + }; +} + +/** + * @param {Chart} chart + * @param {PointAnnotationOptions} options + * @returns + */ +export function resolvePointPosition(chart, options) { + if (!isBoundToPoint(options)) { + const box = getChartRect(chart, options); + const point = getRectCenterPoint(box); + let radius = options.radius; + if (!radius || isNaN(radius)) { + radius = Math.min(box.width, box.height) / 2; + options.radius = radius; + } + return { + x: point.x + options.xAdjust, + y: point.y + options.yAdjust, + width: radius * 2, + height: radius * 2 + }; + } + return getChartCircle(chart, options); +} diff --git a/src/helpers/helpers.core.js b/src/helpers/helpers.core.js new file mode 100644 index 000000000..5af154f0a --- /dev/null +++ b/src/helpers/helpers.core.js @@ -0,0 +1,50 @@ +export const clamp = (x, from, to) => Math.min(to, Math.max(from, x)); + +export function clampAll(obj, from, to) { + for (const key of Object.keys(obj)) { + obj[key] = clamp(obj[key], from, to); + } + return obj; +} + +export function inPointRange(point, center, radius, borderWidth) { + if (!point || !center || radius <= 0) { + return false; + } + const hBorderWidth = borderWidth / 2 || 0; + return (Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2)) <= Math.pow(radius + hBorderWidth, 2); +} + +export function inBoxRange(mouseX, mouseY, {x, y, width, height}, borderWidth) { + const hBorderWidth = borderWidth / 2 || 0; + return mouseX >= x - hBorderWidth && + mouseX <= x + width + hBorderWidth && + mouseY >= y - hBorderWidth && + mouseY <= y + height + hBorderWidth; +} + +export function getElementCenterPoint(element, useFinalPosition) { + const {x, y} = element.getProps(['x', 'y'], useFinalPosition); + return {x, y}; +} + +const isOlderPart = (act, req) => req > act || (act.length > req.length && act.substr(0, req.length) === req); + +export function requireVersion(pkg, min, ver, strict = true) { + const parts = ver.split('.'); + let i = 0; + for (const req of min.split('.')) { + const act = parts[i++]; + if (parseInt(req, 10) < parseInt(act, 10)) { + break; + } + if (isOlderPart(act, req)) { + if (strict) { + throw new Error(`${pkg} v${ver} is not supported. v${min} or newer is required.`); + } else { + return false; + } + } + } + return true; +} diff --git a/src/helpers/helpers.geometric.js b/src/helpers/helpers.geometric.js new file mode 100644 index 000000000..72443a0ba --- /dev/null +++ b/src/helpers/helpers.geometric.js @@ -0,0 +1,34 @@ +/** + * @typedef {import('chart.js').Point} Point + */ + +/** + * @param {{x: number, y: number, width: number, height: number}} rect + * @returns {Point} + */ +export function getRectCenterPoint(rect) { + const {x, y, width, height} = rect; + return { + x: x + width / 2, + y: y + height / 2 + }; +} + +/** + * Rotate a `point` relative to `center` point by `angle` + * @param {Point} point - the point to rotate + * @param {Point} center - center point for rotation + * @param {number} angle - angle for rotation, in radians + * @returns {Point} rotated point + */ +export function rotated(point, center, angle) { + const cos = Math.cos(angle); + const sin = Math.sin(angle); + const cx = center.x; + const cy = center.y; + + return { + x: cx + cos * (point.x - cx) - sin * (point.y - cy), + y: cy + sin * (point.x - cx) + cos * (point.y - cy) + }; +} diff --git a/src/helpers/helpers.options.js b/src/helpers/helpers.options.js new file mode 100644 index 000000000..1c65545e5 --- /dev/null +++ b/src/helpers/helpers.options.js @@ -0,0 +1,57 @@ +import ChartJsV3 from 'chart.js-v3'; +const {isObject, valueOrDefault, defined} = ChartJsV3.helpers; +import {clamp} from './helpers.core'; + +const isPercentString = (s) => typeof s === 'string' && s.endsWith('%'); +const toPercent = (s) => clamp(parseFloat(s) / 100, 0, 1); + +export function getRelativePosition(size, positionOption) { + if (positionOption === 'start') { + return 0; + } + if (positionOption === 'end') { + return size; + } + if (isPercentString(positionOption)) { + return toPercent(positionOption) * size; + } + return size / 2; +} + +export function getSize(size, value) { + if (typeof value === 'number') { + return value; + } else if (isPercentString(value)) { + return toPercent(value) * size; + } + return size; +} + +export function calculateTextAlignment(size, options) { + const {x, width} = size; + const textAlign = options.textAlign; + if (textAlign === 'center') { + return x + width / 2; + } else if (textAlign === 'end' || textAlign === 'right') { + return x + width; + } + return x; +} + +export function toPosition(value) { + if (isObject(value)) { + return { + x: valueOrDefault(value.x, 'center'), + y: valueOrDefault(value.y, 'center'), + }; + } + value = valueOrDefault(value, 'center'); + return { + x: value, + y: value + }; +} + +export function isBoundToPoint(options) { + return options && (defined(options.xValue) || defined(options.yValue)); +} diff --git a/src/helpers/index.js b/src/helpers/index.js new file mode 100644 index 000000000..62a3fe021 --- /dev/null +++ b/src/helpers/index.js @@ -0,0 +1,5 @@ +export * from './helpers.canvas'; +export * from './helpers.chart'; +export * from './helpers.core'; +export * from './helpers.geometric'; +export * from './helpers.options'; diff --git a/src/scale.js b/src/scale.js new file mode 100644 index 000000000..437fcde91 --- /dev/null +++ b/src/scale.js @@ -0,0 +1,66 @@ +import ChartJsV3 from 'chart.js-v3'; +const {isFinite, valueOrDefault, defined} = ChartJsV3.helpers; + +export function adjustScaleRange(chart, scale, annotations) { + const range = getScaleLimits(scale, annotations); + let changed = changeScaleLimit(scale, range, 'min', 'suggestedMin'); + changed = changeScaleLimit(scale, range, 'max', 'suggestedMax') || changed; + if (changed && typeof scale.handleTickRangeOptions === 'function') { + scale.handleTickRangeOptions(); + } +} + +export function verifyScaleOptions(annotations, scales) { + for (const annotation of annotations) { + verifyScaleIDs(annotation, scales); + } +} + +function changeScaleLimit(scale, range, limit, suggestedLimit) { + if (isFinite(range[limit]) && !scaleLimitDefined(scale.options, limit, suggestedLimit)) { + const changed = scale[limit] !== range[limit]; + scale[limit] = range[limit]; + return changed; + } +} + +function scaleLimitDefined(scaleOptions, limit, suggestedLimit) { + return defined(scaleOptions[limit]) || defined(scaleOptions[suggestedLimit]); +} + +function verifyScaleIDs(annotation, scales) { + for (const key of ['scaleID', 'xScaleID', 'yScaleID']) { + if (annotation[key] && !scales[annotation[key]]) { + console.warn(`No scale found with id '${annotation[key]}' for annotation '${annotation.id}'`); + } + } +} + +function getScaleLimits(scale, annotations) { + const axis = scale.axis; + const scaleID = scale.id; + const scaleIDOption = axis + 'ScaleID'; + const limits = { + min: valueOrDefault(scale.min, Number.NEGATIVE_INFINITY), + max: valueOrDefault(scale.max, Number.POSITIVE_INFINITY) + }; + for (const annotation of annotations) { + if (annotation.scaleID === scaleID) { + updateLimits(annotation, scale, ['value', 'endValue'], limits); + } else if (annotation[scaleIDOption] === scaleID) { + updateLimits(annotation, scale, [axis + 'Min', axis + 'Max', axis + 'Value'], limits); + } + } + return limits; +} + +function updateLimits(annotation, scale, props, limits) { + for (const prop of props) { + const raw = annotation[prop]; + if (defined(raw)) { + const value = scale.parse(raw); + limits.min = Math.min(limits.min, value); + limits.max = Math.max(limits.max, value); + } + } +} diff --git a/src/types/box.js b/src/types/box.js index 8ccbb0f52..454d81702 100644 --- a/src/types/box.js +++ b/src/types/box.js @@ -1,107 +1,132 @@ import ChartJsV3, {Element} from 'chart.js-v3'; -const {addRoundedRectPath, toTRBLCorners, valueOrDefault} = ChartJsV3.helpers; -import {clampAll, scaleValue} from '../helpers'; +const {toPadding} = ChartJsV3.helpers; +import {drawBox, drawLabel, getRelativePosition, measureLabelSize, getRectCenterPoint, getChartRect, toPosition, inBoxRange} from '../helpers'; export default class BoxAnnotation extends Element { inRange(mouseX, mouseY, useFinalPosition) { - const {x, y, width, height} = this.getProps(['x', 'y', 'width', 'height'], useFinalPosition); - - return mouseX >= x && - mouseX <= x + width && - mouseY >= y && - mouseY <= y + height; + return inBoxRange(mouseX, mouseY, this.getProps(['x', 'y', 'width', 'height'], useFinalPosition), this.options.borderWidth); } getCenterPoint(useFinalPosition) { - const {x, y, width, height} = this.getProps(['x', 'y', 'width', 'height'], useFinalPosition); - return { - x: x + width / 2, - y: y + height / 2 - }; + return getRectCenterPoint(this.getProps(['x', 'y', 'width', 'height'], useFinalPosition)); } draw(ctx) { - const {x, y, width, height, options} = this; - ctx.save(); + drawBox(ctx, this, this.options); + ctx.restore(); + } - ctx.lineWidth = options.borderWidth; - ctx.strokeStyle = options.borderColor; - ctx.fillStyle = options.backgroundColor; - - ctx.setLineDash(options.borderDash); - ctx.lineDashOffset = options.borderDashOffset; + drawLabel(ctx) { + const {x, y, width, height, options} = this; + const {label, borderWidth} = options; + const halfBorder = borderWidth / 2; + const position = toPosition(label.position); + const padding = toPadding(label.padding); + const labelSize = measureLabelSize(ctx, label); + const labelRect = { + x: calculateX(this, labelSize, position, padding), + y: calculateY(this, labelSize, position, padding), + width: labelSize.width, + height: labelSize.height + }; + ctx.save(); ctx.beginPath(); - addRoundedRectPath(ctx, { - x, y, w: width, h: height, - // TODO: v2 remove support for cornerRadius - radius: clampAll(toTRBLCorners(valueOrDefault(options.cornerRadius, options.borderRadius)), 0, Math.min(width, height) / 2) - }); - ctx.closePath(); - ctx.fill(); - - // If no border, don't draw it - if (options.borderWidth) { - ctx.stroke(); - } - + ctx.rect(x + halfBorder + padding.left, y + halfBorder + padding.top, + width - borderWidth - padding.width, height - borderWidth - padding.height); + ctx.clip(); + drawLabel(ctx, labelRect, label); ctx.restore(); } resolveElementProperties(chart, options) { - const xScale = chart.scales[options.xScaleID]; - const yScale = chart.scales[options.yScaleID]; - let {top: y, left: x, bottom: y2, right: x2} = chart.chartArea; - let min, max; - - if (!xScale && !yScale) { - return {options: {}}; - } - - if (xScale) { - min = scaleValue(xScale, options.xMin, x); - max = scaleValue(xScale, options.xMax, x2); - x = Math.min(min, max); - x2 = Math.max(min, max); - } - - if (yScale) { - min = scaleValue(yScale, options.yMin, y2); - max = scaleValue(yScale, options.yMax, y); - y = Math.min(min, max); - y2 = Math.max(min, max); - } - - return { - x, - y, - x2, - y2, - width: x2 - x, - height: y2 - y - }; + return getChartRect(chart, options); } } BoxAnnotation.id = 'boxAnnotation'; BoxAnnotation.defaults = { - display: true, adjustScaleRange: true, + backgroundShadowColor: 'transparent', + borderCapStyle: 'butt', borderDash: [], borderDashOffset: 0, - borderWidth: 1, + borderJoinStyle: 'miter', borderRadius: 0, - xScaleID: 'x', - xMin: undefined, + borderShadowColor: 'transparent', + borderWidth: 1, + cornerRadius: undefined, // TODO: v2 remove support for cornerRadius + display: true, + label: { + borderWidth: undefined, + color: 'black', + content: null, + drawTime: undefined, + enabled: false, + font: { + family: undefined, + lineHeight: undefined, + size: undefined, + style: undefined, + weight: 'bold' + }, + height: undefined, + padding: 6, + position: 'center', + textAlign: 'start', + xAdjust: 0, + yAdjust: 0, + width: undefined + }, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, xMax: undefined, - yScaleID: 'y', + xMin: undefined, + xScaleID: 'x', + yMax: undefined, yMin: undefined, - yMax: undefined + yScaleID: 'y' }; BoxAnnotation.defaultRoutes = { borderColor: 'color', backgroundColor: 'color' }; + +BoxAnnotation.descriptors = { + label: { + _fallback: true + } +}; + +function calculateX(box, labelSize, position, padding) { + const {x: start, x2: end, width: size, options} = box; + const {xAdjust: adjust, borderWidth} = options.label; + return calculatePosition({start, end, size}, { + position: position.x, + padding: {start: padding.left, end: padding.right}, + adjust, borderWidth, + size: labelSize.width + }); +} + +function calculateY(box, labelSize, position, padding) { + const {y: start, y2: end, height: size, options} = box; + const {yAdjust: adjust, borderWidth} = options.label; + return calculatePosition({start, end, size}, { + position: position.y, + padding: {start: padding.top, end: padding.bottom}, + adjust, borderWidth, + size: labelSize.height + }); +} + +function calculatePosition(boxOpts, labelOpts) { + const {start, end} = boxOpts; + const {position, padding: {start: padStart, end: padEnd}, adjust, borderWidth} = labelOpts; + const availableSize = end - borderWidth - start - padStart - padEnd - labelOpts.size; + return start + borderWidth / 2 + adjust + padStart + getRelativePosition(availableSize, position); +} diff --git a/src/types/ellipse.js b/src/types/ellipse.js index 2a2255eee..621ee6b54 100644 --- a/src/types/ellipse.js +++ b/src/types/ellipse.js @@ -1,11 +1,15 @@ -import ChartJsV3 from 'chart.js-v3'; -const {toRadians} = ChartJsV3.helpers; -import BoxAnnotation from './box'; +import ChartJsV3, {Element} from 'chart.js-v3'; +const {PI, toRadians} = ChartJsV3.helpers; +import {getRectCenterPoint, getChartRect, setBorderStyle, setShadowStyle} from '../helpers'; -export default class EllipseAnnotation extends BoxAnnotation { +export default class EllipseAnnotation extends Element { - inRange(x, y) { - return pointInEllipse({x, y}, this); + inRange(mouseX, mouseY, useFinalPosition) { + return pointInEllipse({x: mouseX, y: mouseY}, this.getProps(['width', 'height'], useFinalPosition), this.options.rotation, this.options.borderWidth); + } + + getCenterPoint(useFinalPosition) { + return getRectCenterPoint(this.getProps(['x', 'y', 'width', 'height'], useFinalPosition)); } draw(ctx) { @@ -18,40 +22,45 @@ export default class EllipseAnnotation extends BoxAnnotation { if (options.rotation) { ctx.rotate(toRadians(options.rotation)); } - + setShadowStyle(ctx, this.options); ctx.beginPath(); - - ctx.lineWidth = options.borderWidth; - ctx.strokeStyle = options.borderColor; ctx.fillStyle = options.backgroundColor; - - ctx.setLineDash(options.borderDash); - ctx.lineDashOffset = options.borderDashOffset; - - ctx.ellipse(0, 0, height / 2, width / 2, Math.PI / 2, 0, 2 * Math.PI); - + const stroke = setBorderStyle(ctx, options); + ctx.ellipse(0, 0, height / 2, width / 2, PI / 2, 0, 2 * PI); ctx.fill(); - ctx.stroke(); - + if (stroke) { + ctx.shadowColor = options.borderShadowColor; + ctx.stroke(); + } ctx.restore(); } + + resolveElementProperties(chart, options) { + return getChartRect(chart, options); + } + } EllipseAnnotation.id = 'ellipseAnnotation'; EllipseAnnotation.defaults = { - display: true, adjustScaleRange: true, + backgroundShadowColor: 'transparent', borderDash: [], borderDashOffset: 0, + borderShadowColor: 'transparent', borderWidth: 1, + display: true, rotation: 0, - xScaleID: 'x', - xMin: undefined, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, xMax: undefined, - yScaleID: 'y', + xMin: undefined, + xScaleID: 'x', + yMax: undefined, yMin: undefined, - yMax: undefined + yScaleID: 'y' }; EllipseAnnotation.defaultRoutes = { @@ -59,7 +68,7 @@ EllipseAnnotation.defaultRoutes = { backgroundColor: 'color' }; -function pointInEllipse(p, ellipse) { +function pointInEllipse(p, ellipse, rotation, borderWidth) { const {width, height} = ellipse; const center = ellipse.getCenterPoint(true); const xRadius = width / 2; @@ -68,6 +77,12 @@ function pointInEllipse(p, ellipse) { if (xRadius <= 0 || yRadius <= 0) { return false; } - - return (Math.pow(p.x - center.x, 2) / Math.pow(xRadius, 2)) + (Math.pow(p.y - center.y, 2) / Math.pow(yRadius, 2)) <= 1.0; + // https://stackoverflow.com/questions/7946187/point-and-ellipse-rotated-position-test-algorithm + const angle = toRadians(rotation || 0); + const hBorderWidth = borderWidth / 2 || 0; + const cosAngle = Math.cos(angle); + const sinAngle = Math.sin(angle); + const a = Math.pow(cosAngle * (p.x - center.x) + sinAngle * (p.y - center.y), 2); + const b = Math.pow(sinAngle * (p.x - center.x) - cosAngle * (p.y - center.y), 2); + return (a / Math.pow(xRadius + hBorderWidth, 2)) + (b / Math.pow(yRadius + hBorderWidth, 2)) <= 1.0001; } diff --git a/src/types/index.js b/src/types/index.js new file mode 100644 index 000000000..f5896a685 --- /dev/null +++ b/src/types/index.js @@ -0,0 +1,39 @@ +import {defaults} from 'chart.js-v3'; +import BoxAnnotation from './box'; +import LineAnnotation from './line'; +import EllipseAnnotation from './ellipse'; +import LabelAnnotation from './label'; +import PointAnnotation from './point'; +import PolygonAnnotation from './polygon'; + +export const annotationTypes = { + box: BoxAnnotation, + ellipse: EllipseAnnotation, + label: LabelAnnotation, + line: LineAnnotation, + point: PointAnnotation, + polygon: PolygonAnnotation +}; + +export { + BoxAnnotation, + LineAnnotation, + EllipseAnnotation, + LabelAnnotation, + PointAnnotation, + PolygonAnnotation +}; + +/** + * Register fallback for annotation elements + * For example lineAnnotation options would be looked through: + * - the annotation object (options.plugins.annotation.annotations[id]) + * - element options (options.elements.lineAnnotation) + * - element defaults (defaults.elements.lineAnnotation) + * - annotation plugin defaults (defaults.plugins.annotation, this is what we are registering here) + */ +Object.keys(annotationTypes).forEach(key => { + defaults.describe(`elements.${annotationTypes[key].id}`, { + _fallback: 'plugins.annotation' + }); +}); diff --git a/src/types/label.js b/src/types/label.js new file mode 100644 index 000000000..ea1280350 --- /dev/null +++ b/src/types/label.js @@ -0,0 +1,225 @@ +import {drawBox, drawLabel, measureLabelSize, getChartPoint, getRectCenterPoint, toPosition, setBorderStyle, getSize, inBoxRange, isBoundToPoint, getChartRect, getRelativePosition} from '../helpers'; +import ChartJsV3, {Element} from 'chart.js-v3'; +const {color, toPadding} = ChartJsV3.helpers; + +export default class LabelAnnotation extends Element { + + inRange(mouseX, mouseY, useFinalPosition) { + return inBoxRange(mouseX, mouseY, this.getProps(['x', 'y', 'width', 'height'], useFinalPosition), this.options.borderWidth); + } + + getCenterPoint(useFinalPosition) { + return getRectCenterPoint(this.getProps(['x', 'y', 'width', 'height'], useFinalPosition)); + } + + draw(ctx) { + if (!this.options.content) { + return; + } + const {labelX, labelY, labelWidth, labelHeight, options} = this; + drawCallout(ctx, this); + if (this.boxVisible) { + drawBox(ctx, this, options); + } + drawLabel(ctx, {x: labelX, y: labelY, width: labelWidth, height: labelHeight}, options); + } + + // TODO: make private in v2 + resolveElementProperties(chart, options) { + const point = !isBoundToPoint(options) ? getRectCenterPoint(getChartRect(chart, options)) : getChartPoint(chart, options); + const padding = toPadding(options.padding); + const labelSize = measureLabelSize(chart.ctx, options); + const boxSize = measureRect(point, labelSize, options, padding); + const bgColor = color(options.backgroundColor); + const boxVisible = options.borderWidth > 0 || (bgColor && bgColor.valid && bgColor.rgb.a > 0); + + const properties = { + boxVisible, + pointX: point.x, + pointY: point.y, + ...boxSize, + labelX: boxSize.x + padding.left + (options.borderWidth / 2), + labelY: boxSize.y + padding.top + (options.borderWidth / 2), + labelWidth: labelSize.width, + labelHeight: labelSize.height + }; + properties.calloutPosition = options.callout.enabled && resolveCalloutPosition(properties, options.callout); + return properties; + } +} + +LabelAnnotation.id = 'labelAnnotation'; + +LabelAnnotation.defaults = { + adjustScaleRange: true, + backgroundColor: 'transparent', + backgroundShadowColor: 'transparent', + borderCapStyle: 'butt', + borderDash: [], + borderDashOffset: 0, + borderJoinStyle: 'miter', + borderRadius: 0, + borderShadowColor: 'transparent', + borderWidth: 0, + callout: { + borderCapStyle: 'butt', + borderColor: undefined, + borderDash: [], + borderDashOffset: 0, + borderJoinStyle: 'miter', + borderWidth: 1, + enabled: false, + margin: 5, + position: 'auto', + side: 5, + start: '50%', + }, + color: 'black', + content: null, + display: true, + font: { + family: undefined, + lineHeight: undefined, + size: undefined, + style: undefined, + weight: undefined + }, + height: undefined, + padding: 6, + position: 'center', + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + textAlign: 'center', + width: undefined, + xAdjust: 0, + xMax: undefined, + xMin: undefined, + xScaleID: 'x', + xValue: undefined, + yAdjust: 0, + yMax: undefined, + yMin: undefined, + yScaleID: 'y', + yValue: undefined +}; + +LabelAnnotation.defaultRoutes = { + borderColor: 'color' +}; + +function measureRect(point, size, options, padding) { + const width = size.width + padding.width + options.borderWidth; + const height = size.height + padding.height + options.borderWidth; + const position = toPosition(options.position); + + return { + x: calculatePosition(point.x, width, options.xAdjust, position.x), + y: calculatePosition(point.y, height, options.yAdjust, position.y), + width, + height + }; +} + +function calculatePosition(start, size, adjust = 0, position) { + return start - getRelativePosition(size, position) + adjust; +} + +function drawCallout(ctx, element) { + const {pointX, pointY, calloutPosition, options} = element; + if (!calloutPosition) { + return; + } + const callout = options.callout; + + ctx.save(); + ctx.beginPath(); + const stroke = setBorderStyle(ctx, callout); + if (!stroke) { + return ctx.restore(); + } + const {separatorStart, separatorEnd} = getCalloutSeparatorCoord(element, calloutPosition); + const {sideStart, sideEnd} = getCalloutSideCoord(element, calloutPosition, separatorStart); + if (callout.margin > 0 || options.borderWidth === 0) { + ctx.moveTo(separatorStart.x, separatorStart.y); + ctx.lineTo(separatorEnd.x, separatorEnd.y); + } + ctx.moveTo(sideStart.x, sideStart.y); + ctx.lineTo(sideEnd.x, sideEnd.y); + ctx.lineTo(pointX, pointY); + ctx.stroke(); + ctx.restore(); +} + +function getCalloutSeparatorCoord(element, position) { + const {x, y, width, height} = element; + const adjust = getCalloutSeparatorAdjust(element, position); + let separatorStart, separatorEnd; + if (position === 'left' || position === 'right') { + separatorStart = {x: x + adjust, y}; + separatorEnd = {x: separatorStart.x, y: separatorStart.y + height}; + } else { + // position 'top' or 'bottom' + separatorStart = {x, y: y + adjust}; + separatorEnd = {x: separatorStart.x + width, y: separatorStart.y}; + } + return {separatorStart, separatorEnd}; +} + +function getCalloutSeparatorAdjust(element, position) { + const {width, height, options} = element; + const adjust = options.callout.margin + options.borderWidth / 2; + if (position === 'right') { + return width + adjust; + } else if (position === 'bottom') { + return height + adjust; + } + return -adjust; +} + +function getCalloutSideCoord(element, position, separatorStart) { + const {y, width, height, options} = element; + const start = options.callout.start; + const side = getCalloutSideAdjust(position, options.callout); + let sideStart, sideEnd; + if (position === 'left' || position === 'right') { + sideStart = {x: separatorStart.x, y: y + getSize(height, start)}; + sideEnd = {x: sideStart.x + side, y: sideStart.y}; + } else { + // position 'top' or 'bottom' + sideStart = {x: separatorStart.x + getSize(width, start), y: separatorStart.y}; + sideEnd = {x: sideStart.x, y: sideStart.y + side}; + } + return {sideStart, sideEnd}; +} + +function getCalloutSideAdjust(position, options) { + const side = options.side; + if (position === 'left' || position === 'top') { + return -side; + } + return side; +} + +function resolveCalloutPosition(element, options) { + const position = options.position; + if (position === 'left' || position === 'right' || position === 'top' || position === 'bottom') { + return position; + } + return resolveCalloutAutoPosition(element, options); +} + +function resolveCalloutAutoPosition(element, options) { + const {x, y, width, height, pointX, pointY} = element; + const {margin, side} = options; + const adjust = margin + side; + if (pointX < (x - adjust)) { + return 'left'; + } else if (pointX > (x + width + adjust)) { + return 'right'; + } else if (pointY < (y - adjust)) { + return 'top'; + } else if (pointY > (y + height + adjust)) { + return 'bottom'; + } +} diff --git a/src/types/line.js b/src/types/line.js index 7ef18f2e6..692397abc 100644 --- a/src/types/line.js +++ b/src/types/line.js @@ -1,14 +1,11 @@ import ChartJsV3, {Element} from 'chart.js-v3'; -const {addRoundedRectPath, isArray, toFontString, toRadians, toTRBLCorners, valueOrDefault} = ChartJsV3.helpers; -import {clamp, clampAll, scaleValue, rotated} from '../helpers'; +const {PI, toRadians, toPadding} = ChartJsV3.helpers; +import {clamp, scaleValue, rotated, drawBox, drawLabel, measureLabelSize, getRelativePosition, setBorderStyle, setShadowStyle} from '../helpers'; -import {Image as CanvasImage} from 'canvas'; - -const PI = Math.PI; const pointInLine = (p1, p2, t) => ({x: p1.x + t * (p2.x - p1.x), y: p1.y + t * (p2.y - p1.y)}); const interpolateX = (y, p1, p2) => pointInLine(p1, p2, Math.abs((y - p1.y) / (p2.y - p1.y))).x; const interpolateY = (x, p1, p2) => pointInLine(p1, p2, Math.abs((x - p1.x) / (p2.x - p1.x))).y; -const toPercent = (s) => typeof s === 'string' && s.endsWith('%') && parseFloat(s) / 100; +const sqr = v => v * v; function isLineInArea({x, y, x2, y2}, {top, right, bottom, left}) { return !( @@ -46,10 +43,11 @@ function limitLineToArea(p1, p2, area) { } export default class LineAnnotation extends Element { - intersects(x, y, epsilon = 0.001) { + + // TODO: make private in v2 + intersects(x, y, epsilon = 0.001, useFinalPosition) { // Adapted from https://stackoverflow.com/a/6853926/25507 - const sqr = v => v * v; - const {x: x1, y: y1, x2, y2} = this; + const {x: x1, y: y1, x2, y2} = this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition); const dx = x2 - x1; const dy = y2 - y1; const lenSq = sqr(dx) + sqr(dy); @@ -68,29 +66,37 @@ export default class LineAnnotation extends Element { return (sqr(x - xx) + sqr(y - yy)) < epsilon; } - labelIsVisible(chartArea) { - const label = this.options.label; - - const inside = !chartArea || isLineInArea(this, chartArea); - return inside && label && label.enabled && label.content; + /** + * @todo make private in v2 + * @param {boolean} useFinalPosition - use the element's animation target instead of current position + * @param {top, right, bottom, left} [chartArea] - optional, area of the chart + * @returns {boolean} true if the label is visible + */ + labelIsVisible(useFinalPosition, chartArea) { + const labelOpts = this.options.label; + if (!labelOpts || !labelOpts.enabled) { + return false; + } + return !chartArea || isLineInArea(this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), chartArea); } - isOnLabel(mouseX, mouseY) { - const {labelRect} = this; - if (!labelRect || !this.labelIsVisible()) { + // TODO: make private in v2 + isOnLabel(mouseX, mouseY, useFinalPosition) { + if (!this.labelIsVisible(useFinalPosition)) { return false; } - - const {x, y} = rotated({x: mouseX, y: mouseY}, labelRect, -labelRect.rotation); - const w2 = labelRect.width / 2; - const h2 = labelRect.height / 2; - return x >= labelRect.x - w2 && x <= labelRect.x + w2 && - y >= labelRect.y - h2 && y <= labelRect.y + h2; + const {labelX, labelY, labelWidth, labelHeight, labelRotation} = this.getProps(['labelX', 'labelY', 'labelWidth', 'labelHeight', 'labelRotation'], useFinalPosition); + const {x, y} = rotated({x: mouseX, y: mouseY}, {x: labelX, y: labelY}, -labelRotation); + const hBorderWidth = this.options.label.borderWidth / 2 || 0; + const w2 = labelWidth / 2 + hBorderWidth; + const h2 = labelHeight / 2 + hBorderWidth; + return x >= labelX - w2 && x <= labelX + w2 && + y >= labelY - h2 && y <= labelY + h2; } - inRange(x, y) { - const epsilon = this.options.borderWidth || 1; - return this.intersects(x, y, epsilon) || this.isOnLabel(x, y); + inRange(mouseX, mouseY, useFinalPosition) { + const epsilon = sqr(this.options.borderWidth / 2); + return this.intersects(mouseX, mouseY, epsilon, useFinalPosition) || this.isOnLabel(mouseX, mouseY, useFinalPosition); } getCenterPoint() { @@ -102,28 +108,55 @@ export default class LineAnnotation extends Element { draw(ctx) { const {x, y, x2, y2, options} = this; - ctx.save(); - ctx.lineWidth = options.borderWidth; - ctx.strokeStyle = options.borderColor; - ctx.setLineDash(options.borderDash); - ctx.lineDashOffset = options.borderDashOffset; + ctx.save(); + if (!setBorderStyle(ctx, options)) { + // no border width, then line is not drawn + return ctx.restore(); + } + setShadowStyle(ctx, options); + const angle = Math.atan2(y2 - y, x2 - x); + const length = Math.sqrt(Math.pow(x2 - x, 2) + Math.pow(y2 - y, 2)); + const {startOpts, endOpts, startAdjust, endAdjust} = getArrowHeads(this); - // Draw + ctx.translate(x, y); + ctx.rotate(angle); ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(x2, y2); + ctx.moveTo(0 + startAdjust, 0); + ctx.lineTo(length - endAdjust, 0); + ctx.shadowColor = options.borderShadowColor; ctx.stroke(); - + drawArrowHead(ctx, 0, startAdjust, startOpts); + drawArrowHead(ctx, length, -endAdjust, endOpts); ctx.restore(); } drawLabel(ctx, chartArea) { - if (this.labelIsVisible(chartArea)) { - ctx.save(); - drawLabel(ctx, this, chartArea); - ctx.restore(); + if (!this.labelIsVisible(false, chartArea)) { + return; } + const {labelX, labelY, labelWidth, labelHeight, labelRotation, labelPadding, labelTextSize, options: {label}} = this; + + ctx.save(); + ctx.translate(labelX, labelY); + ctx.rotate(labelRotation); + + const boxRect = { + x: -(labelWidth / 2), + y: -(labelHeight / 2), + width: labelWidth, + height: labelHeight + }; + drawBox(ctx, boxRect, label); + + const labelTextRect = { + x: -(labelWidth / 2) + labelPadding.left + label.borderWidth / 2, + y: -(labelHeight / 2) + labelPadding.top + label.borderWidth / 2, + width: labelTextSize.width, + height: labelTextSize.height + }; + drawLabel(ctx, labelTextRect, label); + ctx.restore(); } resolveElementProperties(chart, options) { @@ -156,62 +189,137 @@ export default class LineAnnotation extends Element { } } const inside = isLineInArea({x, y, x2, y2}, chart.chartArea); - return inside + const properties = inside ? limitLineToArea({x, y}, {x: x2, y: y2}, chart.chartArea) : {x, y, x2, y2, width: Math.abs(x2 - x), height: Math.abs(y2 - y)}; + + const label = options.label; + if (label && label.content) { + return loadLabelRect(properties, chart, label); + } + return properties; } } LineAnnotation.id = 'lineAnnotation'; + +const arrowHeadsDefaults = { + backgroundColor: undefined, + backgroundShadowColor: undefined, + borderColor: undefined, + borderDash: undefined, + borderDashOffset: undefined, + borderShadowColor: undefined, + borderWidth: undefined, + enabled: undefined, + fill: undefined, + length: undefined, + shadowBlur: undefined, + shadowOffsetX: undefined, + shadowOffsetY: undefined, + width: undefined +}; + LineAnnotation.defaults = { - display: true, adjustScaleRange: true, - borderWidth: 2, + arrowHeads: { + enabled: false, + end: Object.assign({}, arrowHeadsDefaults), + fill: false, + length: 12, + start: Object.assign({}, arrowHeadsDefaults), + width: 6 + }, borderDash: [], borderDashOffset: 0, + borderShadowColor: 'transparent', + borderWidth: 2, + display: true, + endValue: undefined, label: { backgroundColor: 'rgba(0,0,0,0.8)', + backgroundShadowColor: 'transparent', borderCapStyle: 'butt', borderColor: 'black', borderDash: [], borderDashOffset: 0, borderJoinStyle: 'miter', borderRadius: 6, + borderShadowColor: 'transparent', borderWidth: 0, + color: '#fff', + content: null, + cornerRadius: undefined, // TODO: v2 remove support for cornerRadius drawTime: undefined, + enabled: false, font: { family: undefined, lineHeight: undefined, size: undefined, - style: 'bold', - weight: undefined + style: undefined, + weight: 'bold' }, - color: '#fff', - xPadding: 6, - yPadding: 6, - rotation: 0, + height: undefined, + padding: 6, position: 'center', + rotation: 0, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + textAlign: 'center', + width: undefined, xAdjust: 0, + xPadding: undefined, // TODO: v2 remove support for xPadding yAdjust: 0, - textAlign: 'center', - enabled: false, - content: null + yPadding: undefined, // TODO: v2 remove support for yPadding }, - value: undefined, - endValue: undefined, scaleID: undefined, - xScaleID: 'x', - xMin: undefined, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + value: undefined, xMax: undefined, - yScaleID: 'y', + xMin: undefined, + xScaleID: 'x', + yMax: undefined, yMin: undefined, - yMax: undefined + yScaleID: 'y' +}; + +LineAnnotation.descriptors = { + arrowHeads: { + start: { + _fallback: true + }, + end: { + _fallback: true + }, + _fallback: true + } }; LineAnnotation.defaultRoutes = { borderColor: 'color' }; +function loadLabelRect(line, chart, options) { + // TODO: v2 remove support for xPadding and yPadding + const {padding: lblPadding, xPadding, yPadding, borderWidth} = options; + const padding = getPadding(lblPadding, xPadding, yPadding); + const textSize = measureLabelSize(chart.ctx, options); + const width = textSize.width + padding.width + borderWidth; + const height = textSize.height + padding.height + borderWidth; + const labelRect = calculateLabelPosition(line, options, {width, height, padding}, chart.chartArea); + line.labelX = labelRect.x; + line.labelY = labelRect.y; + line.labelWidth = labelRect.width; + line.labelHeight = labelRect.height; + line.labelRotation = labelRect.rotation; + line.labelPadding = padding; + line.labelTextSize = textSize; + return line; +} + function calculateAutoRotation(line) { const {x, y, x2, y2} = line; const rotation = Math.atan2(y2 - y, x2 - x); @@ -219,126 +327,26 @@ function calculateAutoRotation(line) { return rotation > PI / 2 ? rotation - PI : rotation < PI / -2 ? rotation + PI : rotation; } -function drawLabel(ctx, line, chartArea) { - const label = line.options.label; - - ctx.font = toFontString(label.font); - - const {width, height} = measureLabel(ctx, label); - const rect = line.labelRect = calculateLabelPosition(line, width, height, chartArea); - - ctx.translate(rect.x, rect.y); - ctx.rotate(rect.rotation); - - ctx.fillStyle = label.backgroundColor; - const stroke = setBorderStyle(ctx, label); - - ctx.beginPath(); - addRoundedRectPath(ctx, { - x: -(width / 2), y: -(height / 2), w: width, h: height, - // TODO: v2 remove support for cornerRadius - radius: clampAll(toTRBLCorners(valueOrDefault(label.cornerRadius, label.borderRadius)), 0, Math.min(width, height) / 2) - }); - ctx.closePath(); - ctx.fill(); - if (stroke) { - ctx.stroke(); - } - - ctx.fillStyle = label.color; - if (isArray(label.content)) { - ctx.textAlign = label.textAlign; - const x = calculateLabelXAlignment(label, width); - let textYPosition = -(height / 2) + label.yPadding; - for (let i = 0; i < label.content.length; i++) { - ctx.textBaseline = 'top'; - ctx.fillText( - label.content[i], - x, - textYPosition - ); - textYPosition += label.font.size + label.yPadding; - } - } else if (label.content instanceof CanvasImage) { - const x = -(width / 2) + label.xPadding; - const y = -(height / 2) + label.yPadding; - ctx.drawImage(label.content, x, y, width - (2 * label.xPadding), height - (2 * label.yPadding)); - } else { - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - ctx.fillText(label.content, 0, 0); +// TODO: v2 remove support for xPadding and yPadding +function getPadding(padding, xPadding, yPadding) { + let tempPadding = padding; + if (xPadding || yPadding) { + tempPadding = {x: xPadding || 6, y: yPadding || 6}; } + return toPadding(tempPadding); } -function setBorderStyle(ctx, options) { - if (options.borderWidth) { - ctx.lineCap = options.borderCapStyle; - ctx.setLineDash(options.borderDash); - ctx.lineDashOffset = options.borderDashOffset; - ctx.lineJoin = options.borderJoinStyle; - ctx.lineWidth = options.borderWidth; - ctx.strokeStyle = options.borderColor; - return true; - } -} - -function calculateLabelXAlignment(label, width) { - const {textAlign, xPadding} = label; - if (textAlign === 'start') { - return -(width / 2) + xPadding; - } else if (textAlign === 'end') { - return +(width / 2) - xPadding; - } - return 0; -} - -function getImageSize(size, value) { - if (typeof value === 'number') { - return value; - } else if (typeof value === 'string') { - return toPercent(value) * size; - } - return size; -} - -const widthCache = new Map(); -function measureLabel(ctx, label) { - const content = label.content; - if (content instanceof CanvasImage) { - return { - width: getImageSize(content.width, label.width) + 2 * label.xPadding, - height: getImageSize(content.height, label.height) + 2 * label.yPadding - }; - } - const lines = isArray(content) ? content : [content]; - const count = lines.length; - let width = 0; - for (let i = 0; i < count; i++) { - const text = lines[i]; - if (!widthCache.has(text)) { - widthCache.set(text, ctx.measureText(text).width); - } - width = Math.max(width, widthCache.get(text)); - } - width += 2 * label.xPadding; - - return { - width, - height: count * label.font.size + ((count + 1) * label.yPadding) - }; -} - -function calculateLabelPosition(line, width, height, chartArea) { - const label = line.options.label; - const {xAdjust, yAdjust, xPadding, yPadding, position} = label; +function calculateLabelPosition(line, label, sizes, chartArea) { + const {width, height, padding} = sizes; + const {xAdjust, yAdjust} = label; const p1 = {x: line.x, y: line.y}; const p2 = {x: line.x2, y: line.y2}; const rotation = label.rotation === 'auto' ? calculateAutoRotation(line) : toRadians(label.rotation); const size = rotatedSize(width, height, rotation); - const t = calculateT(line, position, size, chartArea); + const t = calculateT(line, label, {labelSize: size, padding}, chartArea); const pt = pointInLine(p1, p2, t); - const xCoordinateSizes = {size: size.w, min: chartArea.left, max: chartArea.right, padding: xPadding}; - const yCoordinateSizes = {size: size.h, min: chartArea.top, max: chartArea.bottom, padding: yPadding}; + const xCoordinateSizes = {size: size.w, min: chartArea.left, max: chartArea.right, padding: padding.left}; + const yCoordinateSizes = {size: size.h, min: chartArea.top, max: chartArea.bottom, padding: padding.top}; return { x: adjustLabelCoordinate(pt.x, xCoordinateSizes) + xAdjust, @@ -358,24 +366,25 @@ function rotatedSize(width, height, rotation) { }; } -function calculateT(line, position, rotSize, chartArea) { - let t = 0.5; +function calculateT(line, label, sizes, chartArea) { + let t; const space = spaceAround(line, chartArea); - const label = line.options.label; - if (position === 'start') { - t = calculateTAdjust({w: line.x2 - line.x, h: line.y2 - line.y}, rotSize, label, space); - } else if (position === 'end') { - t = 1 - calculateTAdjust({w: line.x - line.x2, h: line.y - line.y2}, rotSize, label, space); + if (label.position === 'start') { + t = calculateTAdjust({w: line.x2 - line.x, h: line.y2 - line.y}, sizes, label, space); + } else if (label.position === 'end') { + t = 1 - calculateTAdjust({w: line.x - line.x2, h: line.y - line.y2}, sizes, label, space); + } else { + t = getRelativePosition(1, label.position); } return t; } -function calculateTAdjust(lineSize, labelSize, label, space) { - const {xPadding, yPadding} = label; +function calculateTAdjust(lineSize, sizes, label, space) { + const {labelSize, padding} = sizes; const lineW = lineSize.w * space.dx; const lineH = lineSize.h * space.dy; - const x = (lineW > 0) && ((labelSize.w / 2 + xPadding - space.x) / lineW); - const y = (lineH > 0) && ((labelSize.h / 2 + yPadding - space.y) / lineH); + const x = (lineW > 0) && ((labelSize.w / 2 + padding.left - space.x) / lineW); + const y = (lineH > 0) && ((labelSize.h / 2 + padding.top - space.y) / lineH); return clamp(Math.max(x, y), 0, 0.25); } @@ -388,27 +397,69 @@ function spaceAround(line, chartArea) { return { x: Math.min(l, r), y: Math.min(t, b), - dx: l < r ? 1 : -1, - dy: t < b ? 1 : -1 + dx: l <= r ? 1 : -1, + dy: t <= b ? 1 : -1 }; } function adjustLabelCoordinate(coordinate, labelSizes) { const {size, min, max, padding} = labelSizes; const halfSize = size / 2; - if (size > max - min) { // if it does not fit, display as much as possible return (max + min) / 2; } - if (min >= (coordinate - padding - halfSize)) { coordinate = min + padding + halfSize; } - if (max <= (coordinate + padding + halfSize)) { coordinate = max - padding - halfSize; } - return coordinate; } + +function getArrowHeads(line) { + const options = line.options; + const arrowStartOpts = options.arrowHeads && options.arrowHeads.start; + const arrowEndOpts = options.arrowHeads && options.arrowHeads.end; + return { + startOpts: arrowStartOpts, + endOpts: arrowEndOpts, + startAdjust: getLineAdjust(line, arrowStartOpts), + endAdjust: getLineAdjust(line, arrowEndOpts) + }; +} + +function getLineAdjust(line, arrowOpts) { + if (!arrowOpts || !arrowOpts.enabled) { + return 0; + } + const {length, width} = arrowOpts; + const adjust = line.options.borderWidth / 2; + const p1 = {x: length, y: width + adjust}; + const p2 = {x: 0, y: adjust}; + return Math.abs(interpolateX(0, p1, p2)); +} + +function drawArrowHead(ctx, offset, adjust, arrowOpts) { + if (!arrowOpts || !arrowOpts.enabled) { + return; + } + const {length, width, fill, backgroundColor, borderColor} = arrowOpts; + const arrowOffsetX = Math.abs(offset - length) + adjust; + ctx.beginPath(); + setShadowStyle(ctx, arrowOpts); + setBorderStyle(ctx, arrowOpts); + ctx.moveTo(arrowOffsetX, -width); + ctx.lineTo(offset + adjust, 0); + ctx.lineTo(arrowOffsetX, width); + if (fill === true) { + ctx.fillStyle = backgroundColor || borderColor; + ctx.closePath(); + ctx.fill(); + ctx.shadowColor = 'transparent'; + } else { + ctx.shadowColor = arrowOpts.borderShadowColor; + } + ctx.stroke(); +} diff --git a/src/types/point.js b/src/types/point.js index cb1fae860..08102f406 100644 --- a/src/types/point.js +++ b/src/types/point.js @@ -1,80 +1,67 @@ -import {Element} from 'chart.js-v3'; -import {scaleValue} from '../helpers'; +import ChartJsV3, {Element} from 'chart.js-v3'; +const {drawPoint} = ChartJsV3.helpers; +import {inPointRange, getElementCenterPoint, resolvePointPosition, setBorderStyle, setShadowStyle, isImageOrCanvas} from '../helpers'; export default class PointAnnotation extends Element { - inRange(x, y) { - const {width, options} = this; - const center = this.getCenterPoint(true); - const radius = width / 2 + options.borderWidth; - - if (radius <= 0) { - return false; - } - - return (Math.pow(x - center.x, 2) + Math.pow(y - center.y, 2)) <= Math.pow(radius, 2); + inRange(mouseX, mouseY, useFinalPosition) { + const {width} = this.getProps(['width'], useFinalPosition); + return inPointRange({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), width / 2, this.options.borderWidth); } getCenterPoint(useFinalPosition) { - const {x, y} = this.getProps(['x', 'y'], useFinalPosition); - return {x, y}; + return getElementCenterPoint(this, useFinalPosition); } draw(ctx) { - const {x, y, width, options} = this; - + const options = this.options; + const borderWidth = options.borderWidth; + if (options.radius < 0.1) { + return; + } ctx.save(); - - ctx.lineWidth = options.borderWidth; - ctx.strokeStyle = options.borderColor; ctx.fillStyle = options.backgroundColor; - - ctx.setLineDash(options.borderDash); - ctx.lineDashOffset = options.borderDashOffset; - - ctx.beginPath(); - ctx.arc(x, y, width / 2, 0, Math.PI * 2); - ctx.fill(); - ctx.stroke(); - + setShadowStyle(ctx, options); + const stroke = setBorderStyle(ctx, options); + options.borderWidth = 0; + drawPoint(ctx, options, this.x, this.y); + if (stroke && !isImageOrCanvas(options.pointStyle)) { + ctx.shadowColor = options.borderShadowColor; + ctx.stroke(); + } ctx.restore(); + options.borderWidth = borderWidth; } resolveElementProperties(chart, options) { - const {chartArea, scales} = chart; - const xScale = scales[options.xScaleID]; - const yScale = scales[options.yScaleID]; - let x = chartArea.width / 2; - let y = chartArea.height / 2; - - if (xScale) { - x = scaleValue(xScale, options.xValue, x); - } - - if (yScale) { - y = scaleValue(yScale, options.yValue, y); - } - - return { - x, - y, - width: options.radius * 2, - height: options.radius * 2 - }; + return resolvePointPosition(chart, options); } } PointAnnotation.id = 'pointAnnotation'; PointAnnotation.defaults = { - display: true, adjustScaleRange: true, + backgroundShadowColor: 'transparent', borderDash: [], borderDashOffset: 0, + borderShadowColor: 'transparent', borderWidth: 1, + display: true, + pointStyle: 'circle', radius: 10, + rotation: 0, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + xAdjust: 0, + xMax: undefined, + xMin: undefined, xScaleID: 'x', xValue: undefined, + yAdjust: 0, + yMax: undefined, + yMin: undefined, yScaleID: 'y', yValue: undefined }; diff --git a/src/types/polygon.js b/src/types/polygon.js new file mode 100644 index 000000000..f2d657e27 --- /dev/null +++ b/src/types/polygon.js @@ -0,0 +1,115 @@ +import ChartJsV3, {Element} from 'chart.js-v3'; +const {PI, RAD_PER_DEG} = ChartJsV3.helpers; +import {setBorderStyle, resolvePointPosition, getElementCenterPoint, setShadowStyle} from '../helpers'; + +export default class PolygonAnnotation extends Element { + inRange(mouseX, mouseY, useFinalPosition) { + return this.options.radius >= 0.1 && this.elements.length > 1 && pointIsInPolygon(this.elements, mouseX, mouseY, useFinalPosition); + } + + getCenterPoint(useFinalPosition) { + return getElementCenterPoint(this, useFinalPosition); + } + + draw(ctx) { + const {elements, options} = this; + ctx.save(); + ctx.beginPath(); + ctx.fillStyle = options.backgroundColor; + setShadowStyle(ctx, options); + const stroke = setBorderStyle(ctx, options); + let first = true; + for (const el of elements) { + if (first) { + ctx.moveTo(el.x, el.y); + first = false; + } else { + ctx.lineTo(el.x, el.y); + } + } + ctx.closePath(); + ctx.fill(); + // If no border, don't draw it + if (stroke) { + ctx.shadowColor = options.borderShadowColor; + ctx.stroke(); + } + ctx.restore(); + } + + resolveElementProperties(chart, options) { + const {x, y, width, height} = resolvePointPosition(chart, options); + const {sides, radius, rotation, borderWidth} = options; + const halfBorder = borderWidth / 2; + const elements = []; + const angle = (2 * PI) / sides; + let rad = rotation * RAD_PER_DEG; + for (let i = 0; i < sides; i++, rad += angle) { + const sin = Math.sin(rad); + const cos = Math.cos(rad); + elements.push({ + type: 'point', + optionScope: 'point', + properties: { + x: x + sin * radius, + y: y - cos * radius, + bX: x + sin * (radius + halfBorder), + bY: y - cos * (radius + halfBorder) + } + }); + } + return {x, y, width, height, elements, initProperties: {x, y}}; + } +} + +PolygonAnnotation.id = 'polygonAnnotation'; + +PolygonAnnotation.defaults = { + adjustScaleRange: true, + backgroundShadowColor: 'transparent', + borderCapStyle: 'butt', + borderDash: [], + borderDashOffset: 0, + borderJoinStyle: 'miter', + borderShadowColor: 'transparent', + borderWidth: 1, + display: true, + point: { + radius: 0 + }, + radius: 10, + rotation: 0, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + sides: 3, + xAdjust: 0, + xMax: undefined, + xMin: undefined, + xScaleID: 'x', + xValue: undefined, + yAdjust: 0, + yMax: undefined, + yMin: undefined, + yScaleID: 'y', + yValue: undefined +}; + +PolygonAnnotation.defaultRoutes = { + borderColor: 'color', + backgroundColor: 'color' +}; + + +function pointIsInPolygon(points, x, y, useFinalPosition) { + let isInside = false; + let A = points[points.length - 1].getProps(['bX', 'bY'], useFinalPosition); + for (const point of points) { + const B = point.getProps(['bX', 'bY'], useFinalPosition); + if ((B.bY > y) !== (A.bY > y) && x < (A.bX - B.bX) * (y - B.bY) / (A.bY - B.bY) + B.bX) { + isInside = !isInside; + } + A = B; + } + return isInside; +} diff --git a/test/events.js b/test/events.js new file mode 100644 index 000000000..dadc3dc2f --- /dev/null +++ b/test/events.js @@ -0,0 +1,192 @@ +const getCenterPoint = (xScale, yScale, element) => element.getCenterPoint(); + +export function testEvents(options, eventIn, eventOut) { + testEnterEvent(options, 1, eventIn); + testLeaveEvent(options, 1, eventOut); + testClickEvent(options, 1, eventIn); + testEnterEvent(options, 0, eventOut); + testLeaveEvent(options, 0, eventIn); + testClickEvent(options, 0, eventOut); +} + +function testEnterEvent(options, toBe, getEventPoint) { + const context = getTestCaseContext(toBe); + + describe('events', function() { + const pluginOpts = context.chartConfig.options.plugins.annotation; + + [pluginOpts, options].forEach(function(targetOptions) { + + it(`${context.description} detect enter event`, function(done) { + const enterSpy = jasmine.createSpy('enter'); + + targetOptions.enter = enterSpy; + pluginOpts.annotations = [options]; + + const chart = window.acquireChart(context.chartConfig); + const eventPoint = retrieveEventPoint(chart, getEventPoint); + + window.triggerMouseEvent(chart, 'mousemove', eventPoint); + window.afterEvent(chart, 'mousemove', function() { + expect(enterSpy.calls.count()).toBe(context.compare); + delete targetOptions.enter; + done(); + }); + }); + }); + }); +} + +function testLeaveEvent(options, toBe, getEventPoint) { + const context = getTestCaseContext(toBe); + + describe('events', function() { + const pluginOpts = context.chartConfig.options.plugins.annotation; + + [pluginOpts, options].forEach(function(targetOptions) { + + it(`${context.description} detect leave event`, function(done) { + const enterSpy = jasmine.createSpy('enter'); + const leaveSpy = jasmine.createSpy('leave'); + + targetOptions.enter = enterSpy; + targetOptions.leave = leaveSpy; + pluginOpts.annotations = [options]; + + const chart = window.acquireChart(context.chartConfig); + const eventPoint = retrieveEventPoint(chart, getCenterPoint); + + window.triggerMouseEvent(chart, 'mousemove', eventPoint); + window.afterEvent(chart, 'mousemove', function() { + expect(enterSpy.calls.count()).toBe(1); + + window.triggerMouseEvent(chart, 'mousemove', retrieveEventPoint(chart, getEventPoint)); + + window.afterEvent(chart, 'mousemove', function() { + expect(leaveSpy.calls.count()).toBe(context.compare); + delete targetOptions.enter; + delete targetOptions.leave; + done(); + }); + }); + }); + + it(`${context.description} detect leave (by mouseout) events`, function(done) { + const enterSpy = jasmine.createSpy('enter'); + const leaveSpy = jasmine.createSpy('leave'); + + targetOptions.enter = enterSpy; + targetOptions.leave = leaveSpy; + pluginOpts.annotations = [options]; + + const chart = window.acquireChart(context.chartConfig); + const eventPoint = retrieveEventPoint(chart, getCenterPoint); + + window.triggerMouseEvent(chart, 'mousemove', eventPoint); + window.afterEvent(chart, 'mousemove', function() { + expect(enterSpy.calls.count()).toBe(1); + + window.triggerMouseEvent(chart, 'mouseout', retrieveEventPoint(chart, getEventPoint)); + + window.afterEvent(chart, 'mouseout', function() { + expect(leaveSpy.calls.count()).toBe(1); + delete targetOptions.enter; + delete targetOptions.leave; + done(); + }); + }); + }); + }); + }); +} + +function testClickEvent(options, toBe, getEventPoint) { + const context = getTestCaseContext(toBe); + + describe('events', function() { + const pluginOpts = context.chartConfig.options.plugins.annotation; + + [pluginOpts, options].forEach(function(targetOptions) { + + it(`${context.description} detect click event`, function(done) { + const clickSpy = jasmine.createSpy('click'); + + targetOptions.click = clickSpy; + pluginOpts.annotations = [options]; + + const chart = window.acquireChart(context.chartConfig); + const eventPoint = retrieveEventPoint(chart, getEventPoint); + + window.afterEvent(chart, 'click', function() { + expect(clickSpy.calls.count()).toBe(context.compare); + delete targetOptions.click; + done(); + }); + window.triggerMouseEvent(chart, 'click', eventPoint); + }); + + it(`${context.description} detect dbl click event`, function(done) { + const dblClickSpy = jasmine.createSpy('dblclick'); + + targetOptions.dblclick = dblClickSpy; + pluginOpts.dblClickSpeed = 1000; + pluginOpts.annotations = [options]; + + const chart = window.acquireChart(context.chartConfig); + const eventPoint = retrieveEventPoint(chart, getEventPoint); + + let dblClick = false; + window.afterEvent(chart, 'click', function() { + if (!dblClick) { + dblClick = true; + window.triggerMouseEvent(chart, 'click', eventPoint); + } else { + expect(dblClickSpy.calls.count()).toBe(context.compare); + delete targetOptions.dblclick; + delete pluginOpts.dblClickSpeed; + done(); + } + }); + window.triggerMouseEvent(chart, 'click', eventPoint); + }); + }); + }); +} + +function retrieveEventPoint(chart, getEventPoint) { + const xScale = chart.scales.x; + const yScale = chart.scales.y; + return getEventPoint(xScale, yScale, window.getAnnotationElements(chart)[0]); +} + +function getTestCaseContext(toBe) { + const chartConfig = { + type: 'scatter', + options: { + animation: false, + scales: { + x: { + display: false, + min: 0, + max: 10 + }, + y: { + display: false, + min: 0, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + } + } + }, + }; + return { + description: toBe ? 'should' : 'should not', + compare: toBe, + chartConfig + }; + +} diff --git a/test/fixtures/box/adjustScaleFalse.js b/test/fixtures/box/adjustScaleFalse.js new file mode 100644 index 000000000..ef7ba5616 --- /dev/null +++ b/test/fixtures/box/adjustScaleFalse.js @@ -0,0 +1,53 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'bar', + data: { + datasets: [{ + data: [0, 5, 10, 15, 20, 22] + }] + }, + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: true + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + box1: { + type: 'box', + adjustScaleRange: false, + xMin: 1, + xMax: 3, + yMin: -2.3, + yMax: 10, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 2 + }, + box2: { + type: 'box', + adjustScaleRange: false, + xMin: 4, + xMax: 6, + yMin: 10, + yMax: 27, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 2 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/box/adjustScaleFalse.png b/test/fixtures/box/adjustScaleFalse.png new file mode 100644 index 0000000000000000000000000000000000000000..019bdd21527afd11d34fd8f507f0cec73e35e79c GIT binary patch literal 21166 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/box/adjustScaleIgnore.js b/test/fixtures/box/adjustScaleIgnore.js new file mode 100644 index 000000000..98871ce06 --- /dev/null +++ b/test/fixtures/box/adjustScaleIgnore.js @@ -0,0 +1,53 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'bar', + data: { + datasets: [{ + data: [0, 5, 10, 15, 20, 22] + }] + }, + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: true, + min: 0, + max: 25 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + box1: { + type: 'box', + xMin: 1, + xMax: 3, + yMin: -2.3, + yMax: 10, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 2 + }, + box2: { + type: 'box', + xMin: 4, + xMax: 6, + yMin: 10, + yMax: 27, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 2 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/box/adjustScaleIgnore.png b/test/fixtures/box/adjustScaleIgnore.png new file mode 100644 index 0000000000000000000000000000000000000000..019bdd21527afd11d34fd8f507f0cec73e35e79c GIT binary patch literal 21166 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/box/adjustScaleMax.js b/test/fixtures/box/adjustScaleMax.js new file mode 100644 index 000000000..5bc209992 --- /dev/null +++ b/test/fixtures/box/adjustScaleMax.js @@ -0,0 +1,42 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'bar', + data: { + datasets: [{ + data: [0, 5, 10, 15, 20, 21] + }] + }, + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: true, + min: 0 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + box: { + type: 'box', + xMin: 1.5, + xMax: 3.5, + yMin: 5, + yMax: 27, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 2 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/box/adjustScaleMax.png b/test/fixtures/box/adjustScaleMax.png new file mode 100644 index 0000000000000000000000000000000000000000..4853b0c6b1d137143dc2ffb015ddb05030995104 GIT binary patch literal 20209 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/box/adjustScaleMin.js b/test/fixtures/box/adjustScaleMin.js new file mode 100644 index 000000000..76b09b946 --- /dev/null +++ b/test/fixtures/box/adjustScaleMin.js @@ -0,0 +1,42 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'bar', + data: { + datasets: [{ + data: [0, 5, 10, 15, 20, 22] + }] + }, + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: true, + max: 30 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + box: { + type: 'box', + xMin: 1.5, + xMax: 3.5, + yMin: -2.3, + yMax: 10, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 2 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/box/adjustScaleMin.png b/test/fixtures/box/adjustScaleMin.png new file mode 100644 index 0000000000000000000000000000000000000000..fca1a0535a585b9110f48248490a82acb6868171 GIT binary patch literal 20481 zcmeHv2T+t-x8>JOR*)nLsDMPZ1w=AP5+sNO6FFUS4w7Rxq5=Y4bguUVERlPN=5364eprBM<~psVFPl zf*?5fFB~E#1^;Y#_3nayV6L~6u0lEOr{^Jv4N_5%yW?f_J?UuK84K@{@hW=dt0B*V zIFQbPo#EV9M))~6!+ziew%{Z0 z*h7vm9ATzZ`~;C+MZGXT7!Z_jNtx9x>=(7$ni(6Yzvi)3VQDGlid^yR5H0j5zt2y{ z20Q!(4j8}2;!3Lc>NaCgR-k*;K9^>j%g_3=jKQ>^iu~lNTiLM2;F9pmLmnv4O?T&rl8g`28 zQJ3W1!}Z?Qh#2)8m)a97g(Tdz26+$P2T?q~ks1dX_rh*p<4-+pDiRVUx{nn;t~ zXPF5U(Ij|vs7=rNdY8sCao-n4TstDX*JtY6C0D|s=aeaN&;D#y8r>Whgx;U#KNTsp zr6cko*QiROA>!0YeaDX$S8&@?E?XF@Ml0#{mpbKcHXd2@JnG?v?Ggy}E2|2`skf~n z4}SHpiI~)%bRv+9CB(C8(QtKM11V9#b;*0}o7Y+s4+lOK#j-!{x87#<_47k=*`^=f zOn-L6?Lr`oWJ1+=_m)Ax&NPM?Ip#fE&z)fZT18s2AsPM@*&zreN%$|t9S$psxS8ux zDl{ijlU+K-Txi+$_$Xf)n=efs1#HkfL>|M&p3Li+&ar#V?iD8cKDQ%`4I)Z8L3)v>pDE87&f`4E z3GrxMuhN2Ys&^M2E$ngbjSnuAjCu@<;rG|4%vkqy2(y-t$L%%NQp+Sd=*Uz| zK1NJV1W_wOS?R$SU*`*&oOujdJyE9usb@X+p{S9kmg?<%fbW#2t_OyZBDL??D$rQ> z=#(R4hYa3t>jo-->1p+bLCwZ|Phmr5gd9TS(9@8Kyk&p<{F|mY+_1yZflff)By#pe{_Vm%*YR$NCNJp0gYO7bE ze-kQRS3{9l6B=Cu3E#!*Lsy6{{Rn*>+Etf$mXZf_TpjLg`tAXwBf!Of*!(a5Y(8r9 zasOi-m0+wfb-AKXAsz&1Jr^7Zvi8|-cLRvSP z!mO7lb;vG*=fzy;Q1l2c;+n_jy=fzoV2iS(|3$NDAjJD`*MvMsvxt}yLEptFYC>b^ z;3oCYD?=LEQSNMix9cjD^&;wI*C12gF>}zdKaGI=cVqw82Jw4jf7>i@YyW4=;6ofF z#2oQxGei2Cp`l@pa(dvroy*IE@QHy=!ulNhFV-h`Jj>u?!RqIu{B_;$R0~g{zfw7c ztWGsrA&shh-1jF>qUTDxnxc8g5Rg{CJj3ClSNQv-Rm2l%G6yzOgm~)|u%3Vk(-8am zKy2*`haiR5^2b?%!~KHO_Z)Q}u=gW`LKMU1(?c&KPy3gbxy28AA?|8v_US%}3;qC` zs|$M}>FMaVa69F(5{ow{A(WJDbgNFiVLh3qCrkyYHUC*U|zrc>?bJpux7euwm4ohN#4w6g&3vzUDnMD$jXQ0Vy$d?f!H;LuNp z{O!6)8BnYTb4sgEJS#bliGO?gLIxSonk*%0+4_Pum^Hv_`)bHPZ}|T;N9#BHcOB;Rd@YhL_LMTeX7t1;P)C1In%5wN3OGvRR$x zM~ct1zNA-T_1{1x^ef@9gJzLsoBjH_uyafSk#Q~zwRgk+Ijp(*P^MP4?HoNs#_H#M z+PMbi(!>=a@1T+2&8t3$2I+b27X3=UQP0M?BBqp^~ zq6X_xvnfdFy#px0p+t8M_9@@2u>k-dMr}iP1_Z=aYei!6Wx{$%$ivF~XF!sD1{rvL zeMrT-V+>{<@eytHa4MIU_EDKJ;rx>-YjXaRfQg8@Wig~>wk3c*cJ zn%d<^30Q>FXA~~Bkp70bJZ&7Sie6HR#%&H5r$~{P%_jR=YU6j&)nz0m7E*U;iDE%~ zBmOJC)uBoLH=`C<6*{@r+2`P0REqG^#3~S z>sD89P^{ByC$%$Lzon4HC#KlY4#Cbsn{21VY?h9N0&o8Po4Kh%xTlEDdb}08DHptR zU-v2$-*K@XL0Hzo2(iFuk9+qaF`Fk7%*3fIJaG-`W}eCq=*4V!c*s%FGvqmP(1Oc7 z8^X;Bzi)QpGwm@uZS6P&ovq2Po`Izd$F{JL2XjS`Xkv|uq_`ZED5T^}1=oy> zRy9k@m*o6RkysQ>Ph6woN<6>@ZHj#)+$_)jkDJx_VLB!Dx>MDA%V8DEXZVaapuok`DAX?qEVl@J{eo4bD88I42u0HWLDUl6QkLM_R4>EB7&Ay1-fX&SO zsV9<_PCK(QcyB-4dP)c9M3)k4M6`yqxDkGLz)EKCyA$#hA!7xZs{{=ymf}@@&)^wC zv>j@qfKR*?zi$UJJ&=qImVwl8>H)p_m$9|-#hg>DyPd%WnYi^185!x-P>s6R*TM=? z97-^jE`(IMQ3mHioa!!nXqfE(u(d+~KuFq)Wh|PXFD)SB3_Y40slKru?+n7P_>S*Q zf?|LIq(}CEV7%w<|HF8h?m#Cl>d*wAzNefBq7>$_EKUWT3{N%KkSc}rxDOv-`!^40 zLIB((i-CfH*}>*OWEfxhIgwGf9!p|2d=_3d-{Cl|M&!hmmTKX9^C_oaJ`EL2HXtlQ zYpWpPTwTl4DG5yvLUbAjjYd^t73wnX2e}D;*zXVAMx=2Wffch8VT$g~*_!bHTBrJpZK%E;0Rqn5~ zM1Z;BTLyD%k3kL<+1PD?qJoOXLrIfp7KJtub?#}Niuk1Fx4~0jQE$jlk;~o^T12lJ z!G9dAAknMI*h-#?735NWW5f39)IcTC=#i&1KhC2#dHNhoRXmJ(BBHHiEuuxG9tTeRPJxzF=@g*B{ z>@^<`IRr;R8-Eb$I^NSURQ}&`SK^3ejb*k!QBO9Ua%#nmtd|n6orlsisC1`9@?$-P z!bN1c$x%U>EfnBMHb|ZV!ZWA#I7RiAsa@T1SSK3)1X5R6VH@S{H{GvYm^KGKuBIFqJ2|v|3_h{( zyxDGqTWcrK-8qbZR(*Cjz`nymlR8Nv`w%pMLQ7>3`U`aOWZ&EogE`hVS9$WzF^>9Q8% z$Z=BB2DoNNf=bKZh24j2MnphxhW4f+@RvjdhyL=?%D?1FQ3wd6rFRqEx>fR>zkXig z;;;O1wesM*(@OBufOg*hIFww2=b1M}mEm?53!Cs5tCWcSd{iSV^2*r$jA$d1RU$3f z8Mn^(wj0S;m|)IBy`932^mhIlwN^(7fuZPU%z$fhLQXzC36milPeKU08HhHL3BneH zq35XZGT7)C1iKTy4v!c>GxFh`=GPs~obDCYmM7k5R;4`*XxHG*VEdpkoJr6W;EEM4 z$atq&+jMth-evApa07S^Lxv=%uyJuC zQS4^44=Afh`Fe1ZQp@Z+6YBpiy*HKWE#eGM?0qj~g?H{!UNz$%AJo@CZrj7un_UUf zoE)U?-(*%05M2-<=Lec$q zo#1_Z#$)g-U*(U_FGL)e!3exFPV8+%YgBx@wJ?MB{3)JP_TV+Ef3{xng;-wwSSj*!UpzhcjS%<#or84_Kgv7{78E_qne86H^M|N_@%n(LlcCEQ}Z0oLJw*0-kK2Ex_<0Ex8&KwIU%4bxaMFpE$VZ~h4Ur_ z2pP=Xd-rV%=>Pm6=v2wW!%hVb4O*#AK+D#N0P3i`} zVBV486L3w&n_MK0X1U)?z#A{0=f4I%Mu3P9vrog$g{McsxhvM94Y_#Ixg}lx8fbg{ z-yQrtga6l>=z8Q^G6>i(feQfE{kh-f`v0%P*`z}$zUeyWR}Yc=+URKsENp#6IWSNb z;a^sbzTBwBJ^hZHkoB@i3a~fCF(nH7wh7Ya7figE;~{DrmBJr`%`x`Z=mr!l4yr8H zJoz(CHX%vPyGB(G&+}TH^a4r0>42f9Vc|2YWN&U3?{CkR_CW20n_DgZ`N2yD)aS&o zBO?t)MM=*#T>t51*X3kj1U|- zIava>zb>tSV%2cjUlf8PW_%Z&Px*d*q^Jq|XMmhfO@Zu-`?OrTRe0))Y5t$u zC)Q^>j5&yXmRA6|AfkmIO^6O3^L|DZ#%1yg&VL67{{!L)JL5e)!p=#2uP;T7=J-0L z>>usdK%C(pY7g1odEe-F;D9(OQ@%MUT5Zu3;wA6kL!Z09n|4a#W#w){)Dg$1tPsXi%@lXwhUQ6K)1( zD;IegzWc8g<>JvfIXV99%pF3^t81DS4nkT~iwMK2(wsS41#RrYYp+eCigHB;;qs7% zg=Iydk@2>hMZ-__M_SFVYHJVdMkux#imlW(7Q*wmVWlZ~@J`zD#lqYA5VuD1X$|Qe z^IR)P1TbPiS?g>ER1_dR3LD-{e)Q=CH>-b}njx*P62}Q4_D2RohQ)p#a!em>Y7eA$ zAu1ZfS#P;*kZu|&Wecv>zZR`nh&kEVxX?Fx&Ak}s?TKBuX~t72v>_nkv9Pc(bQCrh z7d5OwgVLkEzd>eo6eUe3X4VjX$mO~7Z@E01>)(zI_G5)8OHdG{Ula|h`Xd_@L}^u; z!Uol*vcA8fpbxQlO$3U~r3OuIPa)CW9-!pcQ0cvHI-BIF2i?EOXqlzKd=1U!1?u_ zE&$K|lh^#d8G`*isJ}4$#_Y2u-i6jLK5u;&_EtbNb z`&TfMV!%EBP!`Crhm~zlhMfX*81qD*g%7LWqBRaF7=T!*U2>GTM%ibM&Jnipg$xV? z9LAVs20AL+La$y8(}&u{XA>JhMQIXju7#1Yc(FNtoQ@U4j<}koC3##0f$R(+(C|Wz zFtH>;2LE#)1NNs_MVHZdoETu&nqmqp1Z=wB62M#QOTn~U=v&Gr>l`EkYCzc>z77oH zAHyGq3`C%Gj3Pp&<*OpwB6TjIeK&?Gz)s=xqE@a!zH|CeA0n0t-yz@`sn;jvGlIA_ ztF=<>``!I$Y(0lou9rjDW1aR11vI}Jfmg}j^k23t&Rv|U5~EUJ4%Uq z&WVfH>V}fM`5i_xdt{OVUI%rr3oaII&Pf#JbJ6B!m<%{_CwY^d8Oj{x+{Lj#2g@mH zqN745c=hUz$S(49=)xG!&_?Tx-)$^SrLdpZRQkk=3hepH1j7Fh${Mz*FY`P;=h5Wp zQ{VFn$vUH;%Jrm`a6q4-fmt7%mLNI-V`Q_ECh3$p&H_K}EW1Wyg4dxz_4{J;#_sb% z14h0MQ-Gx!^3ip+fk1~Ew9U*m?a$H`aGkjUHZ6&1P%KOZAYMb%uwz4ayhu}#LIk+r z`ji*)9C1;as$6ex@hF^*)o)PcuR0FOkAC*~^(P4YVc$whFg0G}d9z}Zx1k_+24EQ0 z{tY{|C+uMas?$^`Pck{+#$YTH>Yty#U4UN+8J1hmROIl5}kI|TocF38r~U94PF?Gty2aCG}U%ybRINbq;sr7Di@%m%8FPd5k!<>Jt_d zPc%Ch^5Xf%xeUyK3-$XkHeWq6N+~kn-Qblq|xB zQ9afK&kE3s&GkdQ1R=F7pfYyvyXyjkB$mjT6R4O?&A*@#2O(n%rq66RfjZ?__G%S} zMawJ$q+wrsJ54;VNvUukRT!o7R* zPeR-kWiKMwui~k8i+5;`&Ui)|`C|KWtNlh7Vh|^ec~g}w^c4sDa~qCkR+JB1*k!z( zWt4C4haFlxVZfjyq?N6Mc-_@HnDfU2!-$-lc6i5hqD2-#kG3u5!D%Hu9ZhV+q;&0F5WVu$*t?B1(@@g_Gn(az^qQD$QYb(7Xj9&h*X>g1QJwXh0TE|3EES-o(>4x1 z;?7&-bTGyj7l>1x_{eM64uS*jLprykd7&%B*3-HrA+Rv$ctH@D^oLLPt5JlD>4R|R zVTV%TtwA$tX;SO@Avan8CeA$|AlD;jzaKs&OfN-f^AZDu<3(}ba;QE|c>V*h6x3B^f^|J0hFP29F6hhJd`_ zchmnhd-yf#m!3kL$CBD2!-<(AUQ{@b1xK?eKTY&Z7t`>VIN0QoQEtJKppzs$z zcFA#1_?D6x5XPndR8RcJ!Z>|MD@%t~+sNAj9YNSs$bxikQtKXy>W=>{s>8s4EE?k_ zM8>?P2-*FOmzP16fWK-Gxf+&9qStvC@As~oano)8oPu>9N9#%h5 z2jmUB2U(u^F4B)lEu4GiA1Vd&qcy?<2K1~uUz8>%!}$9dkd=F*D^I?c4D$_BfI0-w zH5{7F-?|3y#1f_ul(U&u>-hr&2=vYum;SiAHOpHv2#4jpo;e{K{ZkZU{!`MD8lw-D zj@(lvP<918mq)hSoC4_e9g6R^#tS1X+Y>QAr(&*X87aa!We#vZe*J zMo~8^=kB`G|Ilg@--{l!<04<(dvP(Ji%MJw7q30tk{2aeT(~P7*8(llW=@Rm5gqMkJ&qEPlKW|xd=)-s6 zRg^he{wNUekFokQVjJ=5t9R2VCE93o0W)`7t-dLb21U?N5v(0>dDOD1 zwuaP=ia*#)*L{$a0rX{zlhM-NJ7l;GP-yY`rR*$@?tZ2!`Is8x_sDh(yqpn@DM9e)Rr5tpXrZYAkb^Dv+Vx!dhHD#i#piMa_He0CChJYBzIvXCr3L7`GOO zk%`6fAlG4VbvqMcf{GCYgXy?DW&%&eE_$KV!xOVD!;V@y2}d0 zUT&2@{N|!{LEHs`sNWE{0G}y%>WT-9P61Wh3Jpr8wcY#nxOudi>FQ)XuZAu2W&hm$ z;6f;zRYrQIBZZYvBbUOZJH#vU<$hdgw@eQUW~KBA#HswzDcxTiGXDy6 zSx!^h=-sU0px0D{89{^H^+w66 zG4^Opo9Osy0E-R7nT0Rxc?Tf4(AQGY`gYmHlMzmSW*b!womk)LH^x*41V3CMyk0&~ z#n)mSacgI5^gT{}XU;hCPWIXk*d~rW(-N!is4J23Dramh)A>N30g3fQo@CvhAS={| z8v{kcR7Pe_vsUyP!cAZUINS!ojw|#nar_^ z>r7!jE8e6#)%;}>_XnNO2L*_QPn~k+OA;K{T`&cC2)0)YEN~dMY)&RK^hkPlVX27^yHuax+-*~&dwLXwJIixmu&H#~MZvz}dkIFi6^SDppU`qM0=<$UH@qZc_V%0KG_VXo0azML{nYaxN zywGrNokD38Zb}BnA&CRS`K2!8-g8RZ`*D}fsj6A-JjlVXfF9{8#_tzj;Aq&;Yci2m z`L>A%k3Lr;E`Rt2DLIuIbgY{bvxU|7s0`&7jzjNeqMIMwSTVenRf$`d!MmyjwevVd zd?ci3(MyFL(vp$`yUoZPeO|iH1o4a=&XIEjE;j!*x^j}M&>K?Id9}w{w5a&X=U!*Y5VQ}g;7knu#gmhArN{XymI{V`XevUxV|0v5 zd!^Nz*}BITFbi^oa&RTKYNd^@y>3jqdMzegJT$N&t|7(TrtGNfI2Z0!^+1{A_oALj zBGzr$bXL{(o5*~3!1d($%GspYBEqQ+39VX(-qd~`-|I2%k6r4pU9uen!;)#FR>y3; zyH_p4dIK8yjvqiCXm917%@81z|8;L~52Fu;!A>~Yq&(}c=6(x$KP+B$KHT>RirJ~d z7q=ttKMpvug%;mC0=5bT+!uQ73%bqI zI613Q8G8OEXNx#1=f2RY&F0r`RsJ^O^c4~0T69X?O{Ft2!V01Bq?I`2m$Sijpt!9g z!KwrS(DG8)Ms3D(+~1S?%&w9BH#nP1^u?-aUZ-pK6b9U5w2g!;qdPMB5h>a|DNv+T#D zwbiGgU@{bi}fW$|f;g0*$BX@js~X zPyKUUh1Ow zWS|0o2ufeVZ1$||%OVz!o^PCToqcHTbmU$svL$DYEWWk)YL{oh@=mziGswCi?%UjT zB~>jtR^eK|Q~t)er0IL__2>>}k+|9IcF*c)Cj5L_3JWXlN3iPb6gf&udLvgSL%{A< z&xME81KB78$gOV|Y^_;kGSOXc>Ic)0&)V6MrQV!>td3v?+#*Xf8O2^db{_}0($;%> zypm&eam?Atk)3bfW(rAt<)v+Ym^#Z4(9vX|U7&|yoSO}*QbguD^d4j^Q#WG1u)>e$ z#y@|rk&>M4mx#peV6dj#C!x*o6(oKSW1gG*7I{I+_-to=D7Vz~-a~%BvwLa1T$&5C zgkb34rFwI3{`_V~B*{z)9i#PS?Kj=o&(Pap z=s6y8AO35=aT>L}D)2JI%r)bHaBVCVp6YNte5O4q!SL=Pz8sx{cLI+8-MS00Y; z)**dPep9C~3(D=0S}sMe-*MTEax>3`28`}@ORWsthpeLpw)?-=;t$605vQCg1>EdZ zZcM{}08yW${+aFGG-<96ZSf_$cX6&RX%xnpVWw)ObDXg3D;&MHDelI2aJq}gTI7KZ z963-i7LzSv%g_qq-V121=Qs$Lt|cR*>t+vk3m>E|!+!v~74`{O(ny?xYo5I3lk=Vl zrkTwm5_83NUuv`W_UaTXUaUfM2(0VjF`mNw#jBbYqrD$)pR#RcwvYdjcH?D~9M5`x zK?!s5l0J5!nDcyLe_uicJe8E^hq<1fV^_?*jsejMe~UL3F1neqUGCGl2t&gNjTe_* zxivh2zG=TMe?35lUUpghBs|^iDvk$u;7dS`1vizYArqoBP?{?h%l7OUr*e)P>+K*Z z^yiLu^7J1_b7MaV2U3>6Q~lf+-t`@k3Q6xvhy>Yg(YOi+o$e6bgaAZ*Tt`5QX}t%*=w&sz$+72j%vfI9<^ZZ)evr9`D?mYN1xZ)zAUibGOLuUy{DBppRH zM2qz_hc-mS9}tw1Qcs6HaKodSqC?hi9wobUJq#KvY^X?H?|jki+xzeVpKNa-*Km2M z%;1A@ZN}bQH-T69MXd}4+0v-q*}jBDK8WBWnd6r>RX8>UNA(!U;)`OU>oiKm++c6l zb5m6J*CHvl7>K9S?n2q;=5=Y?)P@@L$9MZV6FD)~na~*6V5bu9@9>)u#LzDuQNZ4I zM;f*nv~bu?=wsCwTDAJ_0n?&6iK_O9&v%IV*|?R~-OyV5)3Vn~}MUJ7!89<<_s`wiis5?xkXLZ)`lxM?mr4+}`mg zy9K6(YDB-uN#;^^KZznZU#cY6re<*V)l0*DoAz58cknUW=MgGVTA6*4cLl+6^CJH=F$i%rOdn((}j`qcb(Ew=^Ay}rjt!W=az80Ti1oK@9v+30L9Ej5kC-K&|`uakj z>~XN}D2qI!kmenq$&CwKkj{<&I9A94^$y4m5141eauIUVd^*LZQLOSfSBr~z#RfT+ zad^Kxv)G#Xt;ezP?$kzVLiLT4&l8f5c4Y+TY`d;@RXJ37s%`Cb2%Y0X`pBxZ>C&e- zTFqVOL)Z7Z>SuJI*T_ijB8CSR0-24+caz7F6GW`%+T<%v?SbGlrYYFn=YUI~E2fU% z3VkZp-KWF{`Jl_cb1=op&KUd4tmmRx=R~1}6|TqbP74z10&lSycdx2x`m7nRrT3kc zN_wjR`pPWea} ztFE0V^-6M8T@7ftw>Z;_WkMC~wHRxsQ9jbUX1nRXh4KHj7@ANCK6rh3wBQc1bA?>F9*LN>OdTjsEb>Lyo=x$v zj2=JM>D6=LL-JxXa?v_N;I=AE8AdnE`K!3IZ3ZWYga}98fnSZ?r9eD2wvA%L=V??J RIMWYOxu&j=bJgVj{{U>Vg=qi) literal 0 HcmV?d00001 diff --git a/test/fixtures/box/borderDash.js b/test/fixtures/box/borderDash.js index f7343f26f..ffd73622a 100644 --- a/test/fixtures/box/borderDash.js +++ b/test/fixtures/box/borderDash.js @@ -18,8 +18,6 @@ module.exports = { annotations: { box1: { type: 'box', - xScaleID: 'x', - yScaleID: 'y', xMin: 1.5, xMax: 3.5, yMin: 5, @@ -31,8 +29,6 @@ module.exports = { }, box2: { type: 'box', - xScaleID: 'x', - yScaleID: 'y', xMin: 'May', xMax: 'July', yMin: 11, @@ -44,8 +40,6 @@ module.exports = { }, box3: { type: 'box', - xScaleID: 'x', - yScaleID: 'y', xMin: -0.5, xMax: 'May', yMin: 16, diff --git a/test/fixtures/box/borderRadius.js b/test/fixtures/box/borderRadius.js index 684e4dd80..ea30845dc 100644 --- a/test/fixtures/box/borderRadius.js +++ b/test/fixtures/box/borderRadius.js @@ -18,8 +18,6 @@ module.exports = { annotations: { box1: { type: 'box', - xScaleID: 'x', - yScaleID: 'y', xMin: 1.5, xMax: 3.5, yMin: 5, @@ -31,8 +29,6 @@ module.exports = { }, box2: { type: 'box', - xScaleID: 'x', - yScaleID: 'y', xMin: 'July', xMax: 'May', yMin: 11, @@ -44,8 +40,6 @@ module.exports = { }, box3: { type: 'box', - xScaleID: 'x', - yScaleID: 'y', xMin: 0, xMax: 'May', yMin: 20, diff --git a/test/fixtures/box/borderWidth0.js b/test/fixtures/box/borderWidth0.js index 760f5d824..026ba5b15 100644 --- a/test/fixtures/box/borderWidth0.js +++ b/test/fixtures/box/borderWidth0.js @@ -17,8 +17,6 @@ module.exports = { annotations: { box1: { type: 'box', - xScaleID: 'x', - yScaleID: 'y', xMin: 1.5, xMax: 3.5, yMin: 5, diff --git a/test/fixtures/box/category-index.js b/test/fixtures/box/category-index.js index 6a4557834..0b9ee28b0 100644 --- a/test/fixtures/box/category-index.js +++ b/test/fixtures/box/category-index.js @@ -17,8 +17,6 @@ module.exports = { annotations: { box1: { type: 'box', - xScaleID: 'x', - yScaleID: 'y', xMin: 1.5, xMax: 3.5, yMin: 5, @@ -29,8 +27,6 @@ module.exports = { }, box2: { type: 'box', - xScaleID: 'x', - yScaleID: 'y', xMin: 'May', xMax: 'July', yMin: 11, @@ -41,8 +37,6 @@ module.exports = { }, box3: { type: 'box', - xScaleID: 'x', - yScaleID: 'y', xMin: -0.5, xMax: 'May', yMin: 16, diff --git a/test/fixtures/box/label-dynamic.js b/test/fixtures/box/label-dynamic.js new file mode 100644 index 000000000..0d21a3270 --- /dev/null +++ b/test/fixtures/box/label-dynamic.js @@ -0,0 +1,54 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: false, + min: 0, + max: 10 + }, + y: { + display: false, + min: 0, + max: 10 + } + }, + plugins: { + annotation: { + annotations: { + box: { + type: 'box', + xMin: 1, + xMax: 9, + yMin: 1, + yMax: 9, + backgroundColor: 'rgba(255, 99, 132, 0.5)', + borderColor: 'rgba(255, 99, 132)', + borderWidth: 5, + label: { + enabled: false, + content: 'This is dynamic!', + }, + enter({chart, element}) { + element.options.label.enabled = true; + chart.draw(); + } + }, + } + } + } + } + }, + options: { + canvas: { + width: 256, + height: 256 + }, + spriteText: true, + async run(chart) { + const el = window.getAnnotationElements(chart)[0]; + await window.triggerMouseEvent(chart, 'mousemove', el.getCenterPoint()); + } + } +}; diff --git a/test/fixtures/box/label-dynamic.png b/test/fixtures/box/label-dynamic.png new file mode 100644 index 0000000000000000000000000000000000000000..4a3a580ff0e7034c65da7a42dd53187441062206 GIT binary patch literal 1518 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJFNt)4E9Ar*7p-ZIRS%9dz- zSl^tZl$j!7B0vkh8{gKQ5jPtX7Q@_v28 z^nEqP3<9Sa91NHl4)QRt06AwyIq)zz@O#1UH`k80GR{b2_!7SRYhfb8GD(KNSMzFP zBpNd1OBtfFOT9vU|JAN3p8x;y_3G8PE4%e}=1*R~w>kMRgUpve_Jnf>f89F1-txr% zBVX^mD!aGH`(3m#!}r;YJI)KQdG+u8{X4T5ciiW3SbaAyy!+@Pv2NG5WxE$&fBk#k zw9`+2Y`mHkT6=%K?F0RtaiLeUwys+DI&1rF-@N6ocV(@;TDO1ws#SmM;@56{wJYzF z?fm)k`|YOfd!M~EsyF_6X{@cS?c6_+IcBqO<(Q?{n>oM!x=XD4Xnz0Z*SkK}-TSk{ zfZ;OG-s8uQzxrKQ8C%o*nj(Z_%;9IOHr%OrWJon|NQA6Z~XqK zwX0qoU%~r--%oJBHJH8r^x@357(Mm#Eys6#t2%sLZui{h&!6A-TXpSLMbP|eox{0n zfM#n?%B~YTuD5^B`*z6&>vIfetWUI0KX&+d+&-1Mw`J@1-dj02r=rd78_&O6PalSN zwYRr_l&pG}y#Lv!#KY@_LQ@&u=`t7Gbo~3}i^)D4dmF~{wfilvTYu$Ru`){;sR}pYSeue(}#6)eMKLWr6VwNfHf}>_6-F%g=ATeZIN+Ts))R&bX`n z_ouhV3-{f9|1f#&-(TGa<{U5j@$O&2rgOD#iuJ;;J}Kk>&t>rQRgYSQT?ESO2K5)lvNP=T~P2T@jggR#LpkwIYw zJbR~&aySrSpvuEgz=>S8ZTN1@K&Ui*x!^y8ysGtgyP38%z;c|y)78&qol`;+0QIC- A0{{R3 literal 0 HcmV?d00001 diff --git a/test/fixtures/box/label.js b/test/fixtures/box/label.js new file mode 100644 index 000000000..612d2d1a2 --- /dev/null +++ b/test/fixtures/box/label.js @@ -0,0 +1,93 @@ +module.exports = { + tolerance: 0.0075, + config: { + type: 'bar', + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: false, + min: 0, + max: 25 + } + }, + plugins: { + annotation: { + annotations: { + box1: { + type: 'box', + xMin: 1.5, + xMax: 3.5, + yMin: 5, + yMax: 10, + backgroundColor: 'rgba(255, 99, 132, 0.5)', + borderColor: 'rgba(255, 99, 132)', + borderDash: [6, 6], + borderWidth: 5, + label: { + enabled: true, + content: 'This is a label', + } + }, + box2: { + type: 'box', + xMin: 'May', + xMax: 'July', + yMin: 11, + yMax: 15, + backgroundColor: 'rgba(255, 99, 132, 0.5)', + borderColor: 'black', + borderWidth: 15, + label: { + enabled: true, + borderColor: 'green', + content: 'This label tests clipping', + position: 'start' + } + }, + box3: { + type: 'box', + xMin: -0.5, + xMax: 'May', + yMin: 16, + yMax: 20, + backgroundColor: 'rgba(255, 99, 132, 0.5)', + borderColor: 'rgba(255, 99, 132)', + borderDash: [6, 6], + borderWidth: 5, + label: { + enabled: true, + content: 'This is a label with different length', + position: 'end' + } + }, + box4: { + type: 'box', + xMin: 'June', + xMax: 'July', + yMin: 5, + yMax: 9, + backgroundColor: 'rgba(255, 99, 132, 0.5)', + borderColor: 'rgba(255, 99, 132)', + borderDash: [6, 6], + borderWidth: 5, + label: { + enabled: true, + content: 'This is the label', + color: 'red', + position: { + x: 'start' + } + } + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/box/label.png b/test/fixtures/box/label.png new file mode 100644 index 0000000000000000000000000000000000000000..7408bbf869e49f95e03e668bb10c3bdb860e256c GIT binary patch literal 24314 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�u%Jm}u+?2#u& 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 ['This is a label', 'type:' + ctx.type], + color: 'red', + position: { + x: 'start' + } + } + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/box/labelMultiline.png b/test/fixtures/box/labelMultiline.png new file mode 100644 index 0000000000000000000000000000000000000000..beeb3f8c916da7355ba765f8d2544ac6114ee1e9 GIT binary patch literal 23806 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 Pb9CgO`hmE8M%Vrae7G@t literal 0 HcmV?d00001 diff --git a/test/fixtures/box/labelPadding.js b/test/fixtures/box/labelPadding.js new file mode 100644 index 000000000..393f1280a --- /dev/null +++ b/test/fixtures/box/labelPadding.js @@ -0,0 +1,96 @@ +module.exports = { + config: { + type: 'bar', + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: false, + min: 0, + max: 25 + } + }, + plugins: { + annotation: { + annotations: { + box1: { + type: 'box', + xMin: 1.5, + xMax: 3.5, + yMin: 5, + yMax: 10, + backgroundColor: 'rgba(255, 99, 132, 0.5)', + borderColor: 'rgba(255, 99, 132)', + borderWidth: 5, + label: { + enabled: true, + content: 'box1: This is a label', + position: 'start', + padding: 15 + } + }, + box2: { + type: 'box', + xMin: 'May', + xMax: 'July', + yMin: 11, + yMax: 15, + backgroundColor: 'rgba(255, 99, 132, 0.5)', + borderColor: 'rgba(255, 99, 132)', + borderWidth: 5, + label: { + enabled: true, + content: 'box2: This is a label', + position: 'start', + padding: {x: 20} + } + }, + box3: { + type: 'box', + xMin: -0.5, + xMax: 'May', + yMin: 16, + yMax: 20, + backgroundColor: 'rgba(255, 99, 132, 0.5)', + borderColor: 'rgba(255, 99, 132)', + borderWidth: 5, + label: { + enabled: true, + content: 'box3: This is a label with different length', + position: 'end', + padding: {y: 10} + } + }, + box4: { + type: 'box', + xMin: 'June', + xMax: 'July', + yMin: 5, + yMax: 9, + backgroundColor: 'rgba(255, 99, 132, 0.5)', + borderColor: 'rgba(255, 99, 132)', + borderWidth: 5, + label: { + enabled: true, + content: 'box4: This is the label', + color: 'red', + position: { + x: 'start', + y: 'start' + }, + padding() { + return {left: 10, top: 5}; + } + } + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/box/labelPadding.png b/test/fixtures/box/labelPadding.png new file mode 100644 index 0000000000000000000000000000000000000000..b7bb450f25bcdaf309592a128c5ef91086f85556 GIT binary patch literal 24773 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%0A)6wYClyAZ=%4doHsM&N8Oh$ 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

|>BVslNc2N6;c+C2 zbLMzSwXA&9^^-}D_Yy38aJ{^@2a%}v_*sdF}>uH5_|6D^n% literal 0 HcmV?d00001 diff --git a/test/fixtures/box/missingBothScales.js b/test/fixtures/box/missingBothScales.js new file mode 100644 index 000000000..2749a9f2a --- /dev/null +++ b/test/fixtures/box/missingBothScales.js @@ -0,0 +1,39 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'bar', + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: false, + min: 0, + max: 25 + } + }, + plugins: { + annotation: { + annotations: { + box: { + type: 'box', + xScaleID: 'missingX', + yScaleID: 'missingY', + xMin: 'February', + xMax: 'May', + yMin: 5, + yMax: 18, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 0, + }, + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/box/missingBothScales.png b/test/fixtures/box/missingBothScales.png new file mode 100644 index 0000000000000000000000000000000000000000..f82ff15d977dd52a2abd8153e9ddd330400cc5ed GIT binary patch literal 15813 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 GZ~g~)v-k1< literal 0 HcmV?d00001 diff --git a/test/fixtures/box/missingXScale.js b/test/fixtures/box/missingXScale.js new file mode 100644 index 000000000..c0a36aa4f --- /dev/null +++ b/test/fixtures/box/missingXScale.js @@ -0,0 +1,39 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'bar', + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: false, + min: 0, + max: 25 + } + }, + plugins: { + annotation: { + annotations: { + box: { + type: 'box', + xScaleID: 'missing', + yScaleID: 'y', + xMin: 'February', + xMax: 'May', + yMin: 5, + yMax: 18, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 0, + }, + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/box/missingXScale.png b/test/fixtures/box/missingXScale.png new file mode 100644 index 0000000000000000000000000000000000000000..2d9431d89efc195a917fbbb793aa25fa26798fe8 GIT binary patch literal 15918 zcmeHOcT`i^x<4@ku~5d*i_!uXKnDZ?r3QjJib|1DXOIB_K|qJzlt4&8M$nNa#Slt@ zqkv-}A_^jypeQYvC{Y7a0+J$zno!b6-oaVVJNN$k)_d!&xAITUS?BER{q1jm<@fFV zJD0sYUDa3XtOfu;{m{W5jsn06@OA~TQWd<+CB2n^7fAe3*S$b3O>Z0k41q&G>^Yv~ zKRKvURGlbppM^ozs#rqmT-K{J?>Ecda-#2KU(g1v-_t8f0&m>vL%pyII-i!lLn|oA zq+Ldz7hxB&$7mSR`SYRu{o*NmxDWTkDV{ZRdU1GqiQMd~CiilIsI2#LN&m^@{>$6a z-~lKZTWh@_ggKDLVLkxBfmNIUQ+q} zH>gWG8}QnM+HP5R;LB*>AYNPbfYn=JX{)>3F5`EB&FoI)?FvfYJPLRj+5^WA`XBDO z`Bj$nt6*s>x*(N%1xJI7b9MzmJo`XdDi7KL>kn!G|0uwHXMOhHL|r!{IN&_I<_WpFmuGu@IJf^(&xWM#?sa zK@cDFz&-n)Q4j?8byuM-VY^NkXZ{nZgAly06H;j%2W%@x#Qd#!!m5B3|Muuh54vfz zPIZ@2c6#vEzX|&oqHGIRCvHkTe5uludibkaRq8>h2W6a8<_j?MD)Z*@_M%b`f9+W+ z^`O+l*R5`)Uwl1&Q2K?^FO+_vtfiH;^w$$lWexeiT|-)J&ejG1{lR4}fN~#e`IP!0Sz@k-opP zAIRT$88$(b41@omt#l>z!FyEtfu7GePJ>F&(6MI>;l&RxMlUW z``W8})Z6k?S`EPa?r#Qx1Xhem)VY5>MLkn4yBM_X>zU}^S(E#Y{-3cXFRKBLYHc&p z&CR7-bY{;7e02$sm>IN1u_FI@=cQ!^Y1)diiZm>=FLZIo{FeL+|7b?MPbH1p%j|%j;RlR6uHuT?hvt!H zcR1(zD6DU*+wG40lb*oF3rTuRXPQ^zu=Q>Rnfi1N7_h4^=K^ynJR zfyhREOcjF^EflT7+1)Sl=RYaO%Ek;dDdJbr?VT#-G3ldvJi87N{mPQGN@i7~XqPFb z=EPql51`7ZpMG2Cc|v&BJRVQIJ6+=^X{9g28i;d+kQwFB5!bgD_22q|MdPlC;lD;FFAnk>aSjZi-RgS4?W z=AxvJZ(I$W zyf&0viXo?fzX$jTyOAp6LW&YdC{FllU zLXZB_C-td2g~cRvNH%&Zo~TRbAr)f!=$46w5Mo1kyOIS*QWI=S!w zr*ED*?xrcs>Q?`r;eeSvEd0d|K!~1c!ZnbxnNbuyWjG&OZ4ilRI;jVIa{LL6mIL?6 znj;!O+qWI#d+g{4!pv_bYM`2&vX%#H+XA1xG#VM5GBA^em9;?v_n6dB&pdf}zCQ#v zT6D~_e*{)13)6BIvdUG{>dQH1ZG8X5C#NV&3%Y{riH63flV`4_Gaw+_`J^`m+PX8F zF5yK3R{IrG=PA0Fg?geoxQ3L>dg9W=n8Q{a$~<@6DC3GBdvn{LH3SFGA;+o5V=-K7 zBFe5!n|7Z&#&BD`CLrhxQsL=1`H-7}d*m)pK^YfiEZvJv4M%5^`L)foT{182QrHYj zAzvJODFfFb)sBv$S(gjTd3p^We!Vk$>KLp=bR?_QL6piDY3#bWc0~W}&AJ z)?(RC3Q)Us(@X=z-EEVgfsTgSHusAPTFY26?r2UldhBszDdBoe@Uk0Z1;_=sw&kB$ zX>x6RMR*@ZI@!SzKI}yf^wVrGir{MoUGjxSihi@sm9En|&bbId=V-evc~+#BoTYzm zqoQ&Cy|0Co8PHQ2p5u;t;}#(49j(mJ(D9$Y?VY1rh-+aRwSi8_+D!>fHpUf4(az99 zlI;{e0djlj4-vw;ix!XwPpAuA#HcG9WE+ni7%2(P)poq*?+$gLdC?+iUYYcS?fTS; z;$cq9M8iN-a9*50SvoYGdlK~RA)9{kUA}Bb1LOoa!yqJ`iIEG5SkX%hjOFk#dtZju z_t$2-JK{*3s)ljS8xE$rnH+Yf?r`X+wdA6y{34P_q(3dhc;w;4=&rCEjUDh5v+%r7 z342Wq;Ucv4JgC~yWuwS{bl$x0Zd?4?lheseU5m2qiZ^+fgd~NOg+$L@3DBF0%}dFK z#mGBqaO>YM3Xzj%kLVh-3Py0)<&{I!)(cXe406nE2S-$GH!kZCjF#&9fWW1g%6UXe zolII8mCPv14M;K1Q-d&o85s|Wl_d#a@T8F#uzxh-Afv-z;eJ+5ZByR{4gED(d7FVe z#xIsj!Nc109{VMUCC3^r60M=F#|VO=*y6-C-QgJYk$v!$LVm72x5P;Jt7@9#(70#Y zMe~H~vx`^v7-euBSz_8OAFrCGSCFu+R$EI55Ysm`pk_+puZ0TlC%wf7>Jg$aw?Yjr zGxS6`{F`do7<}>Z>>qSD2WAU*chVrm>3IXUHWi zEuLWQPX=`WKEY1-W!^@_a6F#~E2a@q>i*(x@7zVI?(j_Js1EaSdlKuW1?te~tsA)? zPD^_cw|1acRW6AMDO2`O*p`Op`!e8jm8XcQ3);kqsxk{OA9Q$z?(9VMpkB>9Y*Gi- zz%C>%A$W6#jwJWSv_fENO)P6PPr-OPmg^Yhld_9pQUfv6+~uRq)jkb>QJXp$o~J0k z;5xM>L8$>jgTSt-sgP z#P_j(VVycT3FKc%l!wb1Ws>3f+VeT#6Ru95e{360nRarv<2>7uWtep;c_#);YnD$q ztboa1y>;QB4dq3f;hhOrzTe+<+ym<3CyX#xq1KloUWZ6$N|`O8dY7~?G!k}+-!?Rj zS)9E<9k~WAQ&7hAr|tC6Gtb<(@6>=iR8Mfbo1G??D0*SizG*A+$oXoBVaCbKnky$K zg2w9S^&Uhd2^8hO+e2$bd6rR+%4{jw#u!LuUBu3fruBdOvuHFkF++{;d zc{`DLv9v_m&#I(8p1}E2Wd`W_W;`H&ve$8VHaFI>KsssD*!0ToTNxP1;RNX*Ph&Yd zXEnBPc8m=b2ut^jIxw4Px8XpXcgV(9>q-Vaw7EiIL`R<8$4eoTZ`_Gs>X5Y~g?M_l zrj1V`Qa+n!z-+wYRB3_EJc1<73u}Hu{D2sCY`9Ky9cB=0%i-wt?tiJ z@xJhED?@fa7M|}f`?w*GE?_PM5^`QXhw;VJmX)9-EodhTdW=k~)%G?GR@3Wdn7qAI zex*;W^X%m#dd_p#HFMTUPi5)b41WH(@fRynD9~xl1~J22(kyq6neP=D!a@bq9ifVl z^zri8xh>GJOcEU{7lu2N8*Jw}+P*e=N3arxf|v8#8le!28A*qkOPQ2SP#5#wmVnKg zdr?}~&c}r9ELFWArqA$@B|Ln%jefXP6htvrI1_`boWi9F*5crtaqFC;=3Y(o2(-ha zbFHhMr5sUFs+u-vA0T?Zp&ce2JbNVd^D$<`N&(wgGj0|Gnm*$6iB6Yd$51fi4xE-g zD2KMrRX@9^o6)kXpxMaxrCk+K`vIe0t5NS=bIPLyrQ&vx(jZtDIilPF`GxY+H}IS>jKGmpVXHTa)UMH@}kxc@SgZtc2&WhfThn0 zYeV+pKBx=E!Y4X(HQl-xQLlJgPEE>YF@V+*I@U*mwwhroO^`gRsCqGp!1p_eP?TSucMwmWRYd zNrJH`fC2^`WRz+B?(l#WCnA7OV(sJ4Kam`28+nSl=dyU!3&l1-Ia<&aFI4meBo~>K zpbCl?M|-S*t!1`1LLc{_oW$(HEHEjBkF6suEwZpa(?fV?@p6R1x!GnJX^K)N>N-vo zxYK-sd7Ei-<%=s$zbxspqtia9yO`fyZ&c{@eiJGbpOLc|q?U!fe4vOW_C7Qi^F>a&K-7YsgrSKHFTFplLJF5sz zVwc|gvn%nLxri9>M`#v=(9r^(HKZMV7&2E!yVM!`;-a%j-0Lvydy0(r-IN zdzN9?OByI{abh^U1PqbBO$p}xh!M`S@JAXz2WVn_S>=s>t@hSJSXzW;yoSIzt%bCi zXND7kCLycJ>c7b@=U7qbsZ)ivGv-nhejY*)fH;xiH@vRU1a8@xdUY|Kt;P+ft-Fdy z?+SLw6t*-_`k?aX>6;c$60+F}VQ++Lddu6Qj-0`H(@4N>?)5&NAdrasvq)-b@vhng z^*YyAwXKDH)#UiNt25zQj3oHN8rW}1p=25u_Q>Egkh~XcK&l=z1odY_P5&V9?UKAJ4 z&}rR|CZLg4hicB)Co!OCgmp1Du}W>NeUA`HZlL3HJjl`FC9bRLH5s~jvccDi1PbtN z0hyzSPZN~NWDrA2quN1K=(X$HH@uTAuDlxw&0k!}{)0}{lTI~H+wHs=K0a|+AINo< zd}@kFBF|M>$LrAQ-=7t zN6dvKC5|?WDAl&UkTcyji1V>lSJVMilf(I;UD-SujgCvnFaPr=d}$!nTlZ>{t+vGkJNJ*cD9sBGgiHH|S_J(0tgS zUna`%mGwx3dBb2F6;D2=1H@fE{ktzSKvoEQhZyK&#`1kx$>@>8J`V^Lm{jBTmfSL` zgDMIdh`Bo{NYPbYU5j?d7RFlyib_z z=l8?en|(`&3L#X(F0e~t#eeB8Zqsm#FvqzOUU_2UgD@U6f7KgvW^`lF@dB{^THP}Q zNW7$OhA!i=NR!b(4~1^n)N4K|BQxsIll@j)$o6R&JqADd<8byhm}op$`!@m7biaR%@8{?De!#s{8!KjZ2n$~3L?ztVG~G^LjS1F! z?a?0_j9#jrOU5)L`ikIb^Gnknl&E7iJ`>^L_kJlW#~~^?xm{YubWqM}4^t6w5G=eu z!#PG*5lvmHc4gHFai?L^pn2ImkRR5IfAQdZTK%;9G)jG1!TNSLgXyW8*8iD&wz^)w zv%!#VT)(}`O{@O{`_V^^`Nz452u4x=LyKDrR&juct{V8K!?m!d{d+^!;E>k~OteuA zxJB=XY~h3B0UdLwYrUcGSp(qchwnrb35GAVD8ARd84*~2wVOq+8#K3eT4~PN;1s^+ zy$SLuJ6}P+ZL29Ch^T*6aHQPyRfr{Z+$jC7O!y>p7*hU-+g|$GHl%~&e2LGP_OY0H zbWdc{NAI#cv!&L=um#? z;$;tP_;_4%&o00$aa4x>>wD^LF_M*bK)Lgj-21ODpzTho$TgoO8HRp$BkB|Q0XT4I MzvmCNdjl{07eb^Do&W#< literal 0 HcmV?d00001 diff --git a/test/fixtures/box/missingYScale.js b/test/fixtures/box/missingYScale.js new file mode 100644 index 000000000..a57b2d226 --- /dev/null +++ b/test/fixtures/box/missingYScale.js @@ -0,0 +1,39 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'bar', + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: false, + min: 0, + max: 25 + } + }, + plugins: { + annotation: { + annotations: { + box: { + type: 'box', + xScaleID: 'x', + yScaleID: 'missing', + xMin: 'February', + xMax: 'May', + yMin: 5, + yMax: 18, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 0, + }, + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/box/missingYScale.png b/test/fixtures/box/missingYScale.png new file mode 100644 index 0000000000000000000000000000000000000000..5ca51ecee20c49cf68ddc113cc50d5b0ccf35b23 GIT binary patch literal 18750 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/ellipse/borderDash.js b/test/fixtures/ellipse/borderDash.js index 9e154604d..ab507e5f7 100644 --- a/test/fixtures/ellipse/borderDash.js +++ b/test/fixtures/ellipse/borderDash.js @@ -17,8 +17,6 @@ module.exports = { annotations: { box1: { type: 'ellipse', - xScaleID: 'x', - yScaleID: 'y', xMin: 1.5, xMax: 3.5, yMin: 5, @@ -30,8 +28,6 @@ module.exports = { }, box2: { type: 'ellipse', - xScaleID: 'x', - yScaleID: 'y', xMin: 'May', xMax: 'July', yMin: 11, @@ -43,8 +39,6 @@ module.exports = { }, box3: { type: 'ellipse', - xScaleID: 'x', - yScaleID: 'y', xMin: -0.5, xMax: 'May', yMin: 16, diff --git a/test/fixtures/ellipse/missingBothScales.js b/test/fixtures/ellipse/missingBothScales.js new file mode 100644 index 000000000..eaa2f9b18 --- /dev/null +++ b/test/fixtures/ellipse/missingBothScales.js @@ -0,0 +1,39 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'bar', + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: false, + min: 0, + max: 25 + } + }, + plugins: { + annotation: { + annotations: { + ellipse: { + type: 'ellipse', + xScaleID: 'missingX', + yScaleID: 'missingY', + xMin: 'February', + xMax: 'May', + yMin: 5, + yMax: 18, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 0, + }, + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/ellipse/missingBothScales.png b/test/fixtures/ellipse/missingBothScales.png new file mode 100644 index 0000000000000000000000000000000000000000..f82ff15d977dd52a2abd8153e9ddd330400cc5ed GIT binary patch literal 15813 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 GZ~g~)v-k1< literal 0 HcmV?d00001 diff --git a/test/fixtures/ellipse/missingXScale.js b/test/fixtures/ellipse/missingXScale.js new file mode 100644 index 000000000..9b27566d8 --- /dev/null +++ b/test/fixtures/ellipse/missingXScale.js @@ -0,0 +1,39 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'bar', + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: false, + min: 0, + max: 25 + } + }, + plugins: { + annotation: { + annotations: { + ellipse: { + type: 'ellipse', + xScaleID: 'missing', + yScaleID: 'y', + xMin: 'February', + xMax: 'May', + yMin: 5, + yMax: 18, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 0, + }, + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/ellipse/missingXScale.png b/test/fixtures/ellipse/missingXScale.png new file mode 100644 index 0000000000000000000000000000000000000000..71754123eff6295c0e7f0e6f097c5d912c47c1c6 GIT binary patch literal 24760 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 TE-FMq00000NkvXXu0mjfr7=Re literal 0 HcmV?d00001 diff --git a/test/fixtures/ellipse/missingYScale.js b/test/fixtures/ellipse/missingYScale.js new file mode 100644 index 000000000..b18c4c105 --- /dev/null +++ b/test/fixtures/ellipse/missingYScale.js @@ -0,0 +1,39 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'bar', + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: false, + min: 0, + max: 25 + } + }, + plugins: { + annotation: { + annotations: { + ellipse: { + type: 'ellipse', + xScaleID: 'x', + yScaleID: 'missing', + xMin: 'February', + xMax: 'May', + yMin: 5, + yMax: 18, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 0, + }, + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/ellipse/missingYScale.png b/test/fixtures/ellipse/missingYScale.png new file mode 100644 index 0000000000000000000000000000000000000000..23f930d72564ceaf8e3078f90028cacf55f06528 GIT binary patch literal 28292 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 K{q^n38s@ls)6>__De=l1N<~R` zv1~0kHuB4S6n~U*yzXK&?W?W4*VTcRSQfQd!llHQ{r~k}Z{&TXOoU{6Az|W|i$^9EDet_>Ge_7n2Ux5lj1CU77kYjo78s@*40}Lo z_?fXjqBj`E%iHIcEZxqAS#t56O>B0hsG>}ft_`7~2wh*f_D=~PeWNgYa7C#&c$4)R z&4x%cVRO*KLNjOO*ii%eVr`A~K@M1q18khkaH88~_wV|q90U4oCYAFb{$1n1He*JW z^L~>(>aHfXa-M0j`@2l};jyC8ygSH|Zb3A@#oqm{rW*#a6pk=*IP8cXzf7_tzMAWE zcui7URXNNp$eBtgjwUHA*?`1;xpLxHU{Mf%MNl!E#G>dH4XLn`st|)-`TfsrKR>{> zNv(={dm7#wM60Hml#4bsbVgnJK2fI53#PMM)N`+@Um)*#>7`8nB0tP9t#w#9Zlp7Q zq&t3u&2$ek+#JXOW1CfxFz4IFx0t;MhWS#VD~y2Mxh?jNlfoj&3^9!+v%{o@-d*u0 zT*HgoBGd&Ah7ye~4t~~hj)wUQ3D2$hJgVv&h8 z%OkFm{sBeUu;t{4F!wrs&lfOj@1$zbs4K$T)Zj!4)7eMb+<$&1366ZJ(j9BIz%X9< z1n&s`T@H&mZuwYV@H?6Mn&zVhk1^L(x8@QyZuh;^4-HBrg9$sR=2KV|-TNG(1BZo2 zx~h-}Xfd~^x{VQ86@6AFDOgl_7V>u{EI+6$#F=VIWou4l!eV8XP=q?t0hThWQrqgX z3$vIz=76OLIiqPU_B6Yi#0_G*gW{^~%?lMBRbxT~95T|v8H!y*OO>Zxq=t{nuR8dM z(j-Lw25DIQw)#wIRQ@=%{&44*R5gNP^`jFkmQkrv5o&P@ zXxSuiF`3X3X`7Wf-TXEk5$bKm%9HT4_JZrlv0id25;lc!{^5naQ57R={Kd~7=rF!% zXH%cIs>xZ1JO2PutT!`9Wu%+5#3yaCw#DBQh7}7EiOx;2o^Oy9AEjVA9{wK@dim|P1kqmQJghSbCl&PzyrR+D zZ{pmidluE7aTQTDQfCz46bju^E1AxD`nDYnckD+f9N^Nt?hQ-SnTnT$k_IMSCI;c$i}ux^ee>#8{+%lIUPj~AUgUa z#tyKlIZyY3wDyl5U|&1;rVl6aCnE5CrHXK{F(<^pmu^nx_41m9<7dxc$%zh^-H&PQ zykMiD60w-9v~WI)*~$;FCrJVh$1mN-$(H17mDAZAXWuj6tYdcg>-xBU`wmNIw2oZOPexNt3x3T}}MK zo(T(F`R&F|uu><(2_gMhGY`i|sS-Yur3^E_-|f-Clc)XNdGYcr35}Y8N4(QCHfh|ki#_p>Q{#yGckkw0o>LdQEWCw))6+- zr|;4JUmvW;v0C0Mi?H$!e%ocXFXprWUE|uvJ^bW>QPrN5x{fG2TyOT}{XT8I(QSI6 zyC2wToyV#o{2i)f^Ys3pvCgD6)r&ICsJL}5gBHPxaO+J9xC{F(v}++G7gq{2g|-g;D02+l@N9Y!|E<(`ARtZM%a5 zODC^i=SjQeqe_1|KLFdYT6Ib&|n(ebw<+qVqWe>P+Yb-y`~?r(c#)sj#6rF%Qm;BD*2 z$N9EuV26*eul?Mq^q<*7VOys0Yq}+ZVvozdcs?#uJ<6S6W#Jm@xZh@2)cC+v%`tW( zX~k%2O0)5t@xHN}(t+1o-_)gJy9Wo*Zl5#&@ z6|&ow5@x#v!S?GmbM8-zYtDkNVJ7EAqdytgBSua3iYciJ995-S1xH_IzE91)sd z`7FE;kLnI1IX9gcJ#n%)Nw!Aa+czn9$>kEN0gmzQTHpnhJ$Zf3rE6?mE?2T9Tn8rZ zE9D5mjxI)fVHKP{1{`0nPJ(q6Z|G`x$uK6{+74}^qJDF$*XzMM@Ir9S(?LkG&f1}1rxjVo4jM)I);!8rHko>#h| zVGg4^gTr-c`%#VTpbWOcA}9sJuLut-gz`JE4KI)w#1=Tg*sfR=eJ{g9<=`UMk<#9+ zi8*fkGZdw>K7u7fv|i37c81^FXg7vrbY6h-)n;!d**@`~d?g}n$&&GLS?VQ=4(H_g zzS`xz)u9mE2&Joh8$R~;rOh@%U9K`X5R)z*C4AOreXps^e2?8!oOWogUQZwn8d##i zS9TBU$9c&?fh<9R<5Yt#qO}QnPG=l?>}N?vauLcynkK#S6e>x`wq^L(ihB zVtoWZwIrwLHKmSGa&TBTU!9Y#n zk)678p#!-+t-YkK?u8IkGi+raPI)xfsx;;IX_vb(tR1_M@0D}-jzFY`;H>ci%WWeF zSJgi5$fLnt>Y#@COJ5l6+;?OvMRZ zi32k#wuyfX!9#-(=6ql{>I#uD6fJl0vOU-#?SzWuQ>|K|K{sbw8~yL--&8uxKmeJv{7L|ULD z@zaR`DdGxR2yNWWeSA3{Vly>YqfG|n!+4kWeVvCmxLPkjx3i=28UJ{-n60v)eP}U zlHohKvayo^E9d}sMOmF?TRFY*fc4p$V!_>_v~cNbm03hqv)ji96N?(RC*ZA7s-6l1 z%I+`W%Ih=1JVp=VP9%q$@mluoVZN8{=7sF#o*fJw`DAL>FdR*}ByxH^`=J;(RhgiZ zcWRk9WzeRivpY2C6^pYyW0HxB+!iU)zC8n#%bc6(*@Tvq^i)_Qi32TL*v+{(`ndVZ zsB)J{Ov3}L{5#hRd1RHNUl~xJ0TdK&J=ghxuC{mSM(_ocSQvn-XggZkzUJnnu+5~l zO9s8O#wd#3)x$cSv}uo5_J)IrA-j&}OhQe@gE>PNH{IGI9P&Z7Lzd+)&2QJUk)B$% z-pDytAk;J_D#P$4&9th~*XuDi(GbMsL7nvL#{@N40#}~N{m}36V4Cf*^B=vVVgF>K z+Qp9suO!W+g*C7Z#iX)94qeRJO6q1N4r0QV=(5lUaY?@f(F)4+D8aai=(xJF{2g&Z zj26PMq(X=7%2_a}y{_gDAH+)b6zN%STbZQgmD3ZB$lL{L$z6&!aHmsvWyXz7=D22m z-D?Ws1Via{8*~a~ROBhVJK95uiuK?@hd=6;Ty$&K#H?jaB%k;tbKLF=BE7$xefmc2 zewFx=V8|c$cT`D#8^8jf?m5539+Y(h-RQl0w9^@bd1um|Fj6Nxe)9Si>T5Hp*SeHX zwRVk*B0{xKovpYyLHz(CuG;PcW&HMwvygirIgQXwL{3;nfPng zg)%*!*|!}I55=(roXcp&ANr-`1+d>94iVTbuWv$;sq*|HaFBCTjUo4MAOopmAxnWF zp&aB4X%5&Hh1D#pkB+a+Ok(70CsAqc)3amqC#X``c$u%+a-EK?cS(`)SlZE=_-4P- z*s)>RR)Jc=K0egvl1$jq`CuN-5-4IpIv^CV=q>x>_H!7l;)$yYoIa$###%3zB_N*| zci-fN&Nws;d5@bk_}J0V+is=ka}{S7{y(-+NS7PSzuvVlO$HiLy_R27#6H&g2!Mst zHD{FcPLp*`?(SsdoQZEm&>uZNt3|0z(AX_xWd?WJ;#)t3!_Q1?_5#j2_VIhkWf%Nr zIiRxg&9kK>x%*-DO{|Bb__L`80}5l|8s*r*{K!@9thRPC7@|}6#DZh!d!>%NbkVQW zwSt^ynfp0H-|CFVZERO_YP{NsQ8{(e4M!I;@#T@PKHPA8^S(StRz;TY?&^?II@G_y zmXe#OqcLcyzF`H8Q`PJ@(j0#RCLQWqt6?RCe=>=zq66JjSG+st-dNY0H@*PWNj2(E z#VzU9+}f+Y=o0Zq6eQPWhE<&rie6Vz;x{D;$ceVYc>G`wO}SM_hfh7(?D(%3#pSfr7On+mgYREW5`oRw3IpG*=EboR4? zZu(0X#XbAf4c!Vu$rqIRqzdAAL;QH4LkS9S%&BjRO_TBRv{x&ig#3v!gQtqJ6$99A zENJ+s>GiZktHsu;o6)KpxzC~URJvqLDdwW3uMce00=A`qpipC5SZQTu*@CAnQZ)rm z;_UOKm0aU1yCRm#z(+y(u#`vujjUJDwpXui`STmvIMPW~2jGTMLl^Z0&(47M1LI z&N_L0w_l$X0zpgNB=UBX+@#sh!`uXb^e${avP4&pjp=}y(mvh#?n<&Ck`*3T3ZjiM&;faEPkEi@xeaHde=~m#3!M= zjY@P)JmQ0CoufHYL;~RA8=b}3+O||$;3LBM($9%3$A=kIs_`L#^%X&X%oIissq1OX z3x;iN#nU2eRk8jCP_k~`QEb?5esdK!A^PgjRAyKrbJUIHcUy4hINN{=vuOH>93z<@ zFJnh(TX$jvzir}Z6Vc$8+284Nm4ZNw2`%VwY3#57YU;Y`8Sj&O-oBGSt8m8a*Y5Y51Da?KcteuVvdauY?j#o z6{eU?E~kP95gX(YTf4D#i7Q61Q^%d-pPvVe3Bam-nxER}%=AR~-NkprV>(_!ua80e zaAY1pl8AflWUhxpeiyiq4^x=q53u$K*m4@Jw8ox}&-cOY z&yT(pkb%%Yt;~=o@kbw9c;pzx&lpuxKpx6K0I| zZbPm?K9E4naAvMUP6!}3Wli7yW7g|=o9G*4m&}*JWDHY#Kig7hZGU$~E|b2IuLh^> z1EwEEf9%J`_C;rJ)@OaTwj&+Xr;pxeW)L_R#DEae4>4heoI@a80rKH~Q-9(tjlKNB z0hIc5+sm;8QhSeiEabq(Knskw+zs1&9F%FJG&yf&l4DJfk)dL|m>8QZwax=6$Ac{4 z){#N@SRg+G@8WjhyTIxsu8lAm{#h@fe5~;s0bR$FLB#mmbCdnC))Yiz{U?OV3FoOf z%kAio)W4V7+k4M;9Mvsi#7pRR3sOj#u2?4kQO0qB$>1G2*A1t+RYLxpJ-Ys@XV=TK zS-ngCz`UG2FtvyWi5}b7?dIRAB6xfv?(mo69J|s&7D_Z>!RSaXq3YljIW*{GMAhG^pH0}fkYV?0B+teQaye@u( zRv$uRwb@RQj{)FA{V3OxX<6@wh05OfStlMMto9M%*yn|T-(KJ-Flu<(hd-Qd!On*8#3tpd3eNv>0jLc~%5+Kmu)`^AQpLLR z>QqT5wlL z_yb&l>Uf6=5L!rB5Wqjk+g%H09JV@&nT?33BLryM*RjpH*~jH=Hsu^drpjYbr9iCF zEAa<(A{a*j{PD7Y4?{|0!2BFW1Ai{WcDv)b< zYkVdTvXpSYL6q--q#F`Cm*D=O>9dFd&WDvSQ>4mcA1oLdh-FcADY$q@qhya-q6~=?3<}E zj#&doNkTo@uJCp}qN~TULD26Y>HlUB= zB;#YSBg}Ei1Mwtg{|>Mmb3Wu6DI^ouPr9?poZDj4*!*l*TDYea$8rt^;sqg+uwk@o z$}xVF+WW|fEhvKoV;af|sfI${LQJk^sS}an)@dMHAjuHXqPAHDGTgzg$GCn@1dU-g z_^V$XclVWIxcl{Y`(!*A{eFX_)6xtr`_(7dU8}gpR>MzC5Dd)vC%m|R9>`~x6%am< z+XGjqA;#iAMHvGB)O&b(1fF&$In)mV@n(bk^&^_6_Ex_Rx*a#~u)u0-koWNT`aci< znxS?4Hg*s1J)6Z@&Xj1dD@rs5x6V|f`|=WhU>-4#Gb5*wbJ-7>!AExE!f}Cb#AOxu zui=ss9@efu!7+IN>F5hKsCF#!S}YD4D@DBW9KL|{Mk^V||9v_S@<;2VhzHfy2uc3( zMf>=vy})*z^VS6OQDbOQg^ zw#me6c)VSBeq0cCS_rXB4f(zhqSXzGPFd| z6Zhae6O!;xZ$Rb33{qcOl(Z8o#DE+^jbkE~)!kAH)e5)i)y*_0@kqCB+fNEB*uzc4 zd|2Y~xzii{#9r+&o-H;a6C+?Ak9`FPjnBmMOAz<#HP0K$f+NO>C#g@D_;fBvuJ4Z> zLOxKeHCJ~k7|^#6uQ4H6kHrNaP#n4bcP)zXigmjXKKy~i0$ik?X{^5|r>jtwW|1_3pFT$s zHzZ090(q;>D&c*2E3N0*TdU0*Jd0b@t(*2iFJIMgzn(5{x?{L}dr1i%o ziQH62v^iwu+b7@q3OZ-zJKd2TO6EK2;T<}|3QGk}H}>Nz*3`AyrRjc0bF>*P?Ks&r z;@6QXc!NS!_>hPGo-g?*w5&G?G`wu~WmrmAe@Ie_cS*Tu?Q1vMd$S7{?&1M}rAi@i zF4}H<=$h@;`~-|zB_ICN-tGPb2oNFErn#4+GF>U030=Qz)jhlXN+|3j;@Ff#h~jsi zE0yJQ_vpBoqK5jFbRv{qPNA({vfh2$@#I^S$J)o%>Mx2*-_vH^X`^WWta0n=D@i8! z)hyR|5{R>g@IW(?yiWzUq)dop;6=SCgpXd#p2As|6e6=b%4ys$;n<|k+O=DN0A=-H zS0xYKj}1l5>P34nm+^>zZB1cugJHCDdj_cdDUXhGeFevjFVuVsSLZ?CreXu<=gsbm zQEYPXY(R2wRaO?Hd6D>y3}OOWCHOfXY74t z2E})y=fuIkbaA^sF!A#5O~XsIO1DnyJNb&;Jx!Cvfy`tQO7kD-r9Lg`9zKpK*z2_N zKb2P5AHK9QFGTkXfU2kSj&Doym)kbm6C6sW(=vJI5`@{ylz6Imx1UN&X(TuHuZDMM zHeTP4(Hy(jMgAG2UU_ORT&G8rM6mX~9+GuTXaHGLlrxjrtWt$)e=;V42>XvEiqDy1 zi%C)cM$#u{x+Wqr0iATvoQiaFc{?&#}tvw&;Mp4v^F)Nud> ziVUxZ&}7w8i3;%L(W%4j4%6{VN&b=3NELhZ`tZ$8kCQ5SPFrc0LN9Jt`>|_EdJt#Y z(=vsnDC-;hzXpJ@VGp(qDC0wLqdZmxR+!J#^bhs_nE^j~IwV&&!6-sIkjBWCl}S*G zmwh30RZCk6I`AS%P9smu`o4)B_4960BoqfilPV_S(OHrC)u!U^Y71ds^%venYce)4 z?R)*O5X~!!NjUD4d{qEubTtw@YGp`Xbuhu|V(_Vd`go5;J=61v@#EuMAMSRY3s>L5 zU9+w+R1%ft>CMLC(@!}{9Ud$CnQ9Ya8z(Xq$!A-)37$dXj;kv&?MsjI(h!C(F>!S9 z>fj7w!*A?&3SZyv-f8uIS$dkxdJg-8s%vij@_aa>puu}pjAdY6kTHw8jNZ?4>4*^$ z2g%m9pu-yucs)N!`kL2Xs%e{i{hNs3_AX~EY`+|um_d0u8;htBT+gw-{m zC)K$>d?5u=MyK<3_B6PTx-?bkt8Sr|lofY52!cO3fWOVa&QgWyOAacWyVrCw-MOY( z_lGfd4+~eR^Ec1a!O41kE!fL*$QMtkTsUBGTb1XTl(?pLPxPbL+BGE`91}9{^}7h) zm#pQY4|okolI0O{FIg+@Jt#<`j<=YI@>u@6Rbrt@(wFp408i1q@_AiXDam(zuO{ir zYxS)&q@IiU{SP?V?}e!cZio*Dda5pSBaKEYAnEEf%r3GJNORz9)5n<);cGmMF-*0N zC-09ly>w9VY~}kIl;gV|X{DRe==z_LnWyVgtq1vD{FB9}gJD~9#_t{(?d&V4Z-C=t zty#5n1{>!rkCBSSh7ER028hiww104$*J8 z^h9I#kLXTk^cl(ZW3;+#-d;gu2Oj^8eK`VW@{4VyB`TJI>Ib-DWoSbAX%gQ* z;3!%l?Cm5gUlnen%w`)J>2x1{CyUpKy52gWe^pG$m%Zj78fNC7Ca)2eIKr*?5n9-sfuB8e`SlmPL`Qqx{#8&jd6k z>)Vh^fjKgr6!d-xyj}Q$h@1Wi>T1C&uTcd*&=iD!pb@n~vn$jz9EUecvvL_y=LUud z8k7DxvYXpq0zE%l5M(WT=8Z$k$i^nDAA9$o>q_MR zY|&n})p;({sHCVjZoy&OLJu8_L8%_vdLyz?TY)ylomKI*d(&8KkTPR*`F z5MZQ~%s$df+y^G{2JQD3Qe!mJXzk&)+Tk#U2f(bec)fk&@R5j1I$(!xA|c*`M&e$!Ah+hPYos>B;;m6m zi)b8QEF#r*5cC5tqzGQ8@X1e)&23Yp**9NtD(wfol*7lYd3N9XV2pM&3D@v)$I;Nn zR6yWTS&fp?xPHAzsT2{sflRk}XuXXFS7@r=YYx3`O6Nf^PKHkI+3bCg&HQw#R*5_s zm)F$em8>!89(*J${b1B^Pp%ZTwuv%Us1uOg&0Quj(Z+-L?##_*NBYP%r%o9ujxFf zepO(BzB}DP@kbKCYYwfmw<#spz zVT=@gmdC6>X#Rnj{`tkN6V)UE3vpV&{>gk>M2EK|R6i`cIh#zJ{fiA}%}i7fastbu z_W5SdNdcqz-5i1LY>->qr(5@QYLYi|Ft+)KMlTOc<+O#@Fp8gl z)1zwO~92d zi(-D)uX4Ln8}kUc6g2Y57eV5~rIuWrj1R8ij45gLNlAlOD*QQ+M#CNiSvqc~G9`GO z0W-K7ECF0#!pKPYdYg}WU^a~bsYbzsB&VCiPc9>0!mE26YRC4RB+yJ$r-ys~jcjHv zv%|UWC#?0CQzX7FHoOqs+v9(`#VR`Yl@Lt!PCT-!7J^8PN7pMbWZSRYhiauXt^`fGTGT%_4=y-=58S?>Uoyv7bwAfrbg*i#IV}HG!8ToW?ASEQqH(epEZZ>Hq-SJ11UWS8Of@ zW3X;;C*kG$F=rw6+tw%EuOM-$VF71j@zF3AlD_mDt`ThpAq(7WTo<$-gWb>e?ebAa z7vC_I6rhcj>Nt9a;=eI+5R3H>;*!l&2UsnsmH4IblkuZ%+&pvvHX$yY3Rg=v>+Jr# zsout`X+V-v{@ZV)Z#Z`=Haa#gCnpstvVp!}c)0r;2Ex=_b_P1gAwn{MleX4Lc;C=R?pel2fAEsglIkfotm%7N3^BNgz%=$Z% zeq(d|M5!){3G~z8vW;O)JSOQ@;J1mJ1)f~}I!B%f7KdEX61Pyy+eUjE+BfVxEw%dc zq?xe$D!Asb=@Xk`RCt{JLQ}j;n%if&Or2%ebE!?*hA74TMe_RkvQ{z{%d(54RXtnu z`2qZuOwnlk;o$*|$4&tLvS7(b0lC6%AO}#@I0YCTzf3g4%$oSIZGCozAE*vQ3 zs%>vOo0xOTfFxeF(KtJbmYtN&kfj}s4HPT)l5#ehJd>S_G=Flbr4i)EaDw+O4{`G# zM6@asJCck{pR;91g1j!+xvAk5^4&0iJu6Vr{3$4;kJkUv@QMawiG|h;x;T9zbPw8~ zo(%a+-U;c{V#1oGt*HZ*OI>GgBISIO*so+SD%R(hO0jlYO*U|Ns;M!&t%}TFww5)V zE@mHVD9c}K@w=N;04cFYa40llY&4o(Ap;nnt667T0xQ)a_W3&(GX9ahY|9&4!OWvC z*+Yxy@C{wAbOZ)9%F;qvHKM8TN&-ab2dowHCIh%+O9VQdpbW@ovK~m-FOWX*@CI&r zN@fXJ+4!5dQgq^JGL zO@?-Gu)d){{s2CE2U$wd6=?Zl23nHPD_ima1?_c$#`=kMIMZf@J%DPpu+wTee1NW5 z;amG_5WRMJMMoqYAZ8Ee&uXj8ArB}CH=!fmt-NALOWHgskp&TXpyY}-N$O%HRD1%>61Oa&e@uq;q@m&j8m*KwZl2&l~WfdfJc%lIrDDsR(k!cr!` z+$C>w|2u(Lf!-#mxME21^#w}|tGGXlJ=BiOmcP7{YQ2MTX&-{bCnq})?Gf!Mh&-P% zSMrVI2n{~%Xx$z+s96rU%b4jW7HgV6qbXx3eM8nz-MsFSO+o)?+5fH<3TLg7G=SKH zB5U0hKWlx&U@#Tj7)034g4`16GM%yn7}{6{CQv}miN1Bque(RuVT)gE1}9diBFGGU z9h(3RARK67dSmGi=gE3>>V;$te?ao4U8dw^0lr{`G2ZKRHj?b;agf)aEa*rzk^7~A zB__AubU_(Svx+RYK7(x@v}3oP|N0xXr76;r-)w_S8xL)yV6WVSL$m7m zNP=lZewZlZ(Mo8_1ZmJ^*~ybAgOg+pX6tG&+jT^|v*vEp^Nxcm zS6^?^3!R|Z@6Ma`3S8W7_~{b!!dH5USVE{UFK5S!itTISL}8P$U}N^ZIi?huIcl&c6+dUDWqz};&+ ze)1&2Ph^8W=z_bh*IzttWqn}0a<}lI?2oe#xOXWz1BlDpLKwbLa*OoI1eu8`gh!6x zHtD^2PC~WLcWD^0*!@yg;0=XvM?pLlgZcAJIcKOHfh%#=g_9GluS-*lHkGvW+mq85 zP1CQaQo)@P;m51HKC(>+8)V|9JDC_^rTE^NYQ%Z1na;L62ZmV6sE#6_i9mwje@^Nk z=7u;lphTIE1Zw@=gpTz4IJt$)4->dQF>SHQjz4h{yFz#{zbv#*ScaBz8lU#BWk2HF zeHmJ6^Wzr+3M6kY!{3om@blnmJD)?eWD=S~N+4*CCSEzy5JB%e9Gl>s*(r0wu4J2BBfk4a4UbmYyrur$^yS(IU=aUz+M5mlbZTFLIxaYw8 zgDM!MC+9j0;uCZBHLp+W>-hWPGS{-OiJKM#VFEO_1Ua$l=O|TW8Z~3rmt`h^jGa44 zupT<>A#z1)MURA7e4Zwhj&+Goejl!=yb(%Y>-tk;g}KjMBQa-tgx0-UyIin3kHe09 zeQknbSH1=njPC7;-7c95_(xxz-X>pNLQohd9R@ehzClzdyUx zm3n1GtcdJ?wdP3~j!h+o%R$e*D%08(lY;aCtp|vTfYzzIf(OwexC^nEy8}dONnsZp zup>BZyqwOC2&$;9OigP*Z7naW%h>nwibavg6w&vc2l;KEIAA&<0=hp1b-Uto=T+=x z!G(O7*TC?{NC#CZpz?dqkNyt!Kx$b1g3qI%Ug1+(dtx~(KYnvkIK7OSOyT#L{41Vk z9(sD;TQC&p3d!hduiYbY`Iie2!T+>7-n+hMaXG2YO+KMIk>8=t#8lX#=+5V`xA_6p zWlGA?w>VURT47u+p?utAHUwzy;4tY$mGdb6@2TsiL1{t!;Q=fbtl>AV6aPQvP>Xoj za3k=&NsDEEIBhUb3Xq|6#(O6Nabj1~)CZU_y_KU!Iv!@^E#6bAzNRBe>SG`vTU3#- zUfJt5pm!9C28yk@q(;%}mBIgyI}8&!gUhBlA^F&Da9RQDbBmPG#~}ivaVv#e%@MK; z!*2ux&>~oAT{Ih@ug=xOF=grumw5`8A5V#$8~^KBPwC;R24;M^^roBOjn%ZKro6)q zWMSl{nWV++Gb$3lTy`mdK9Ydi$=pkkuNNiGDKE_YU+>lBiz|O!3L9dqJSVi+qs?#g z0je3*FmnCONT8V^?s`dWvG+7EOxn?~+6G_T4y)jk=tXH}%KrBu7Iortr>ykDO>*+F z+YBnTSNq1?-UJj0z$Pl)4m+BP+%uG|jalt!UW-32q}uLwIdt*Nf)t*6J5moXNOdh_ z2J>tQIY%X|Oc!fj+YwG8`&Y}1HxvcLV!+Xo+9Jtd+Z5m7pOWF?V@N>s9)Cvj+LjB; zUrE4z{OFEqct%Ls76YM_B6p zIIKucak#?u7U!v3sxrX_nH&DUp-PaH0aQ~!LN%iTq-+zeDzih1J^J!fq^|rO7Wn!@ z3xtWoSklZMp6aW9y!VU!xMZ~bxQWB6BsNB|fK}hIZ=d}Oyb=JVECsx}4($!tSV{!J zYU0t;s#uK=T3CDW9~sixwoO(Xon;nQrPNI!@M#e|{b4wv_U$G*!tX({$08rCMWQ#8 z!qi2gxq&{7t9MxL`Zc)l#8a7n@)HAJ1gYv&UHmy;(?WmL@^qx9ig_YmT2z zeSSmrZ!wX4M8Q|A>L+$FXY6n6Yc(gg`yhW@qFLWz889Imv24iTvg-RlHuLu^_itrR zgm4F<07z)i7GO-j)dAiOX1KXJ#u=47So$w`;?O`u4%4hmF2Oo$l{Z>I?C9~Ddy5$(oi4b zSnE6dXqHiqb_1%k>f7w*w@$^@?wn4N4deaC13%peZ2Jbpt%D&m%pNO=Ts}^puxgkN zU>vMmF2mnGeJQrDZaP)+ZAgNxkPFe~OhDZRYvYUFn^h!Lc3& zhU-xCuLv^1(#PAI{^dVMAQ}mZuW48il5-PmoJYJB7=6iywg)x}t1YdJ_H}AJWdG++ z*Ca`8XWhP?&*zM0urOVYDm}3P(oby0QUm+Kh7I-qb6DOeie=eun(&Rd~ zoXPp*qcY+~bx^~wGiku=tV^R%MoG5?xPjg}Shg2uWo#KB3r?hL8TO~Y^`@{s8X~Drd>(96<=hUX!3Qd|ZlBhB1lZIO z4Y;+~909Jf60w`XZfcN2Zjd&V8^6$${d16h10T%MlqRv@^c+Z(f_JD33W(1DFwAmdO0g(kBSw|5gKmy*cJ zF&Sug%S+d*6^y-F=kn1*oaOX4K(Trq>nHuZ8O4dGfNHLMj54fa*m)Af`pT3=3OBBbOrgA3ESo^FdN`l{8Po!2{vX{f>K{rF)X7);>i zMcfdk^|PotOzdT{l#0^#WSl2DGqof6G7GtN$w1^bX35c0`D=;6pZ=|YgKm03b4FVC zB>c*M51E-kWr_)43uju)5-VzSO@|AUt%~J*VhQ*;H5biQVE%mEtiRc!zp9C2f`Sy1 zTi=IU>X`JVwCeh^Sfvc=lhfh)pZ)^WTs`p+DA2Sgv(V_=JWY`J>vVuDmi<3_`uTK0 zb5V?Zcq^5`#_$uMT_=J zrJL%LuWpm(`|s)ilabLzzs_VYxdD0dEWM!fMq2j-{K^|_kAn4CPG*NZABWH@{spJP z1?@nqtG4@0ATH0hWKO3(GVci7EMjok)$W^!a+%QKX5T=T5)27hptFUr2x5Gkjxw_A z@zpH_;|$kTYGH$bf77$b)YGShJ^~hVCHW1g{cO~0O|Yc)KMdzvRe&$li!V(JnKXtp z(cs2x0%~_oo`18OsxvS3w-jyt-*tZ1euR&^&?DJHna_yI#B!FgtI0a7R&8_cgsBVX z-z>_!-3odRMUcTzi>OzJKV;+;K^_TS$woboaN-`zFdFHv7@TIB6`}+pH?ikL3S|UG zndMvM*y6-f!d+M@iUlLf(^|BWOq3Q+WTL@e>llKa>Xih}+lvtX3vL{K+yIgYIhCzY zGDPv>?<~EiJ^aOMSV&3d!fk>@bi%?q63a)Vh1?ISYs3mK1z;XiI8OQ|>0a?b^ZQ!c z0#7I(%kbCH#|@#wA&5qiL&bgLR;=k7dxewa|4p?bLs3+JN0Y*QX~*|?iR`!p^)Xng zwLte8AVs&2gVH+vD*rTZ6Qd9^E^}>i_I6ik9foGO!Dr2;?$;)u(38D>f=n|thqtfE z<=HB#P-%4Pj_m5=MAXbOe80vDyK;9i-j(+Ov3R^|!)j8!JW{eu}Wmh3-B(BX52 zuHG5`{){pG>@=2q@1?_y$PCs;uuN{=KC$bN3y69@ zAq38`xmZRWAwvPU*Dh~pabAnFd-Czo(1?@4Tscq0wuoCM;pG3u%)E$FFw7qGG+un? zK&X#ZS*q_on;6wTIUaXVh#lU#loor<{~vqr71rePy@7s7=pCuj5fuah6{MG7!-jw~1u2S3 z04YkZ2_T{(ZHo;l5s)GR7Miqxh@iC4k=~?3=mA2KGqG*=?_8YAbMwE*^JL4;H#2M2 zde^(k%x7d2eR{P}g!6yqn)pSaNp<^2TtIU}0LC>yuk_KNTSMiD3O)*GscwiXUoy|$c!=X4bF%Qr1^W5kH7 z3VJbVMDF}0pMLFD>;1Gj&<+&PR6M*lIu~5b0}YoPvu%H?Hgm^A<`w=!iG7k|$BLmlJXAA9EF>kEtCR;yD1E2bp%Dg?8{?xfp((q1a{OY&il7 z+Yw}3H<~Wooc&uSiQ_0Ey*GO@!I5a?Zrsfvuu<72v%0VmLwbyd=tWNY1S^;=gp^Q!kZ9KWG;gxN1I;Qc?8@9LPiFZ0Un)z(Ot>2=)R}6u92n{Y~5J%>%^k^vIh53iKFX6c%V?Qo%X< zttwv5K}+AZvK74NeKlye`#Xp4AxFB_xuHZ($Q2TVb7(LQ-xhA3{v)JeAf!N1=mb>d z2YOo_=2K|bDA?{Yq-yTz-}>ktDz)N>0Y~s`4VE6y(_>g+Rh&-F_gFAGf54eJ8uXU8 z??qGm`AOB) zs#_(DVx0FNs(c{3*ORl81DCQ~sM35;kUjX*kCRD@@nqRP3$h$kPlsuMFd-UNx3ob2 zl*1nvRNX2`4_Y&?`kL#ejO+_|!~#unN~;My@|=|dtw@H2l276xBtNbBTm$@W^6%eS zLC^uE&D(DB4J&SePk#RJwAYhLwJ#NOr=SwCECe1@Hh)hw4qQH>MaKlS!|a-4PV~F` zknQ?S$o5mW zcGz(r6Ir?|C3f@Em}0am<66f9$SKSlz6x7JLw68@Yj&G&%(P##w$PovDR+9_T+K;T zYjkX|XwM|H8zIPS$As$0lEZw477$UgUn-#cf}?l!e>@L;Gd+o6s)9peN7V|JmDB+J zBi!E}WLSA+$j%! zug_M*aTfZDcvG#!9t)Mekq%K<{nB-QZE~$(|5jcJe{pJ$Yew1u`{f0hl{p^lXbKxk z#8JJ-6J-crmgEuY`Ngym^nV|iA~L|y5`yFmow!*RrZ9IDSyP?{?e5OOcXrkl%>~{B zLMt5Duh0FNndINgAIxaD)a_4I4C#7s3_>xrP|!Fb3gh-HVlw}SR-bquKaE#D=o*{y9Tk4*m zP}x}`n~)Kwb`D=8E5fjMC8K?R=*5z%{$Lt(7*eLsrT68il7OUQwOJsE&Ac7g>W*KW z5FuPm@P8vCP@FpGT9Af1)0_RcI!qUnxgj0)ao8Pyq*V=?*L%?lYZ=x3F2;=8b@B1HC43RyX(HhfXEz$B-N|M-H%Ol2 z@|0dYwH@mrl>lWiwDjYK)+jJ4scKW|&!&5NYN80<*YM_f`bdwmCG6nf0VCKVGpw*7 zBHvr%61q_JL6a;?ZLV6O@QBP;tw~=2j~U4ge#-b9n#hgiele+clqwH(!0Z^3q(@X8 zsFR%_p9p~`tIXx|QJIXE z@;NkgO80Bk4!H$TF=+JgHvP>{K;eOg;xya35b^MEh*3*YVn@N=;p4n-G^@%UDHvZq z(l9J3zWYw8nQB90egY%Azb(9~i4&S)rko%Oyp|mdCm{1qy}=#)ADC%h1?8UX!jzuN~HeR1H1_;l-7;5^o>LpetCv`Y4#N z`bI&keIQ}oz_-4nWjEB{1L1d}@T4Sz?1)mUwsXf597J=B^E#J5Qi6un#~lPwIYS;; zdh|S`#nQWAF@9gyNLk0dSm@7SH)(?*`zjOQQ*@<_+c>>qPBD(_%1CGSg?p9)*PaFK z>Z+XScAeO%Z^g*jU{b#u+9pFt%|mUKr`%tYr5X<`+n>pfm^eV)J9w0G6xpYf!obC@ z!I{d9Y97Muy09IRx)M_M=(jQ6|L4b6$+Hz;qJv!6EZGMU1q#DdclIGb3R~9dFB3EL{D<~mYNvaxt zy=4NM8%zx0-+pwQdp`x)x>YqG``hIl2N3YFiUm4?)czO&E1)xA{uFWoVFTxT$c^7g z2NcmLWAhzQ@UpSF9EJ5F1@epc`@ZL>+~L-A^NL%W>}pnh zyEbV1^q8z}+{s*&4&mQgV_e$`z=T@!;88J%g3gwJLUf!gm<6e7faT9DTI2ZP3vhM> zBaDgONWgS|Z`iqrGjxk^6zti8BaGmU{E#F17J}j1Swh)ekBf zTv@qE2mO2;OlDpzbQQR5^*p9_0KM*!dStKqxU5EPQ)t^?aakDN+q$HMdW3esA8EOR z-3(TmicL8$^RZT3CPBR9dDJg($;{FyWjCc;pcAE>=QiE_3J4=1tczilVR1jo((VAo zhU+AK?2Xd0_1AT>d&*nCC~qQPYm?7E2&!#qee5T#DJV@L_$O&h#Q+T2?seqdHdUMb|{=CD^LQur_EJ zR6R~)>g-)jquY_XMxMIvsyu(x(mOpIqlv856J~dZvgmtdyM&bGxmYbvQFdh&`^oD` z42@owH49j`e>7&x$+?qskv2Ex=tA`BJB3Zj-b2Kz4kll#X>QWWx;($IkVWjBRKHrV zo5jk5w1Hg5p-(*)6mUsRc`r@NgliUKoStynTE9CMzI|@God>!l0Msgod=Br9R>Mfc zIuJ&DtAnqZSbUF{g7z?DO4Y#r-@95{ZM@Km2|zj{78qRwZop^EPK0(bYH_l_2c_WQ zx!m~9GI{INkGGw!C0lO!KKf)JdX{H>?VSRpGQz8RTCnexE%3TQz|cHWBmH{gI3ynu zi8|KW!KsXvQbs*js-1TZHn+3+SUfjQyOhHh zV;Visqv2c6C~9D$LvXZSbV>K?dV4HlwnZ&qt5&Dz`((gHfuJD(Qtb5MJ8iuWx2W}Y zYLQP0tQ6EFo!w{adB{K=fADJCr0CJT6h*D8{SKl>_RbRo4{ahH+B?F2K-tqw@r5hN zOVWdl;_2QBWIbC>_56Hapz6uD9V_#H?(t!&9%X3U11!TM)Ef zQkXS$&i41ndE#98+9o_Nk7hAT$G%S%6>x|x>si&@jp^H|PvGF(NxYaDdy1s_{5*&E zVMEOwmlNMS39XJt0CgY&F7l1%dZ3>LO%s#ZW=QKik5bS%mum-wX?huC`|WcikbcU= z(qpyEsxw{~IL4>d5FY+Y4;#Ctg^I>$P6-Z8Eb>wU^dh$U5iRc2d710swrM3n!>)9{ z{BZKet=Dt_UB|3kPJvdB|GkGi`|A;XLU-LoA$p&W{hpsO++X z$t&luYFHMjqqr@1XW8uu{fG?h+|c~p3xI~w^p3j-X4U&egdkbz1}nC?u^46EDnWed z{YotNBQ+y89FNS^!!Xft6NGYy8??63fE8?B5jb&^T4l}o+xS98>ou8BCWuFR`BWQ- z6OMvpO>>bo9dTHf+X$o;Gb!YLzl84z#uL~L1~@^ivdG`os$Nx4`C6MeZ#+ZjI>Grk zPCl!c$|Q5uj6SN8E`-BfmVIW4@$5)9Q#@zCuHLVBfd>_R%T07YV&)!07>lVHRH)~` ztPGPsKa0?aF49CTVTn^!;8u*#-Q(gc+vC6o<1|eIHh@pY*1?0LCle>>v6wURHE@Se5nSSx!@U)0sYGACq(F z2|6+QHB=uo1NqOKBAfgnEQFtT9`_NC`Y6L~%^OwD#Ucb0gG z^PgEvMY|pyG!ALQ9uIqjltQfOX@8r+?jjz@nkt0m_f9df&}r+{3^QZJmRGQjVHB+0 z0f?7_Aq4)BYn+|=L)ejpH&urTACqlwcC%~`&kc>eoEyqTuM@W1jNTg3HH{G&__h_W zhj-*6`}T>$mGgr#7eBu@{RQ&0$r5dC(H?@(y-984tSxvMcCMOUS;@sab@jgDC>zE z1AY2^Z1%%8EVSo1j%yrI_mdIQrnNbyeaJ4{Vad)BZ>o3PXh{k7CJe6UWfTH1bf!zt zRO@+&f3u6;hy=XAD33L3*gHac_ovYN?|3>`yFY$Z!hR(0mr>K2Tq`ukr!-S`=Dw-B zuA6DzpN4#qu7nbj5>XCq6)IpIJ!KT@N7s>-&&s0Ci8+DXkL@Hq(yQ2hhsAhW6iE?M z6~l4Rf99pNcU)J)Xoqr#wHPncD-28ePUX|?idnv0kf^T-qw*Czr0ldPm^JJq`C?C& zU_?mh5w$EMA3FLw=dh#m0|mN-r{oImZ@R(^mihP{$)kgGyr;!r2KF5Y`K}yx+0{;{ zpK)fu3YjLVht1|9gr?Xk+79Y#a2x*&Dt@??hkbFxDU6RqiLj|e1Lg$t0*tRk7TXH9 zU-!6(gh}$6x{E_mVjXmRW2IQEkvK2E7(0f3WUGLZ+7*Li{`VMwprPuvbL>A^RlgU9M(fVOyV@sCVt{E}A2>-Y;cN{wS76 z?tk>2n#Y2L+j8)lo_3(x?0JtibaAURpIhUYZXlhM-gWcNVpRoEBN8}F ztmf``2EM6xi*$Ex{S;$&Wj@<7zc*nt*kOGrsjNOgU<;>&RwPIz-IW1Jh~Ikj!8n?Q zg?UgCk|RSmMtt%kRzjZrf84Vc=4)+48EX@KzIvRQSQfg`!M6;B3snw5;>vA-~o{myi}} zZYfaowNwaY^{}X|^pI9gZWvN7z2f=$q}lLAb?bek$-;T#-q4)cLjNsu9uy%B_rp4W z4wk8=`PD6@uIeR&)SLY1RxUYnGvE|-5e5fdRbDuqF{7vj)tM!pxd)Jk{o=&}P zyHQmYd-tHBaLtKN^s3_hN>lgH`sTsPFYId>v_F3Ba2*(JmhBY6te@(J&sXO$YjC|h z;hn?Ln`X_Ij5vP-n|pEZI1XLPrd5r_lG`b~EcaJPQ~tDsLfpAyydc-K?_BgU|F%X& z!-dpIoYLi0w41n#{nNB1?Tc%k`N?)nm)YvC ze}esbPp56Ky@lwzy4Px``AWOuik7d6HxA0h^w?X7y|2wkDX7ax@&1&%ImrJ!`0GgH z_5k=ai9M&}<`Ub;kEi?y&&tyClnR8kap&7Br5ZZfBI%Q`>vU6eh5CAoc^!l#0QBP;Z{E~A< z&zO>pkD7JeQ66iw+KxlGceNRAg|+E!#kH?{oMtQL49>(H&%cm5k@38=@xqOn#L}J) z$C>jcbzd5eYMi~abH_nR?cIUfPWGg?&QbGq*9CibyC@f(@fNQ6r`uR~?f$_V9ddVy z6!SAxZiPwi_p?9w>2|R}QbwiQf{Jsdy3@MY8P8to>w!r^ab4b)j&f@*5KZOVW6hNM z9v$_xTMr$ipRfh(=Ju59P{BTbsm08~6ot%u(+P``Fb$u~*w+iLEyZMTvy|Ta+QdP3 zoE+q-L}OsTS9@H)7*^86|8TH}JLO^PtE4_B}g;%rp zXt-qTxz#M<(f!PELZMyYsYa%PidW*hMw6+!+=E5J4^Pnt(^ev-D%krVuoHj%lk**w zQ^M@I4{bPI52A8jbiPpyvtl2JA5fVrczm>ox2GJJ--$Q)y!f{7sK(1V6`$uHT6*oP zpA^|d#%PY3Q*TVGj6EFYN0`Uw3|^6$+AEiYoP1NvkTgF?=XuFl8_%8JiPV2ALl!k9DVTWX@u>b;d-kF8OD?oNRm6 zB^GHSKQP&XXQ|9?C7 z8BBhX(0T-1og+!ObL{L!hlo1quC@xC(-Bro4>RoYDTdgCW zqHmHDSDm)@HS3hkXcAx<9hiKYhfQK(xqP!Xq|=#;M7Z zmwY6YTZ4K=JRN$+4xPVoaGK{vkonnn>zDqy0su;bozU`>uy1Ru%h!KX%BEp@BtRf= zC^@J)yb|l3hQKu2*`bt1(_*7ds17mKn-5=-%E$PGYhS|_cVQ}_WEdBtkmwX!X$;8( zOCRoqWM$69dax|OBFT}!3FF9gQ z1n`{Xsiu@KR8toiSX>w^i-AE~)jSNPh$*Ioy(oCE_l5+@w2FxZ-tFv<)N%g7GJfu1 zvel@}s-sViQD#8#z;tj+^00rcSc>{y!;zQ-)rNkr>q2Ym(s{~7;$@)QNjD`m#o;8? zpU)c20)4QG4C!mM&JcZftVPpt;n2L%bbxRR?0_II!xr3E2q_N5VUOQ#LZ-pNJr?v2 zupSIwtCS8)6yK~kNaHu@JlwUwrd?m9;g4AyL!}0!)JzY$ffMRCcbA;#8|#WLtjiNi zaT|$wTJp8W_3YlXUk9sqLeJ-9GqCPV zm>`E86Xpq6?K%AV$7n3#u24v{qBo|CDW1_qviz|lZ1eSx%E|9_XGxj#=a@&duZc&r z7q%x4CqFmY80&iQe(j=qYp?UP=^5gt(!0qG0Ri(3H>Xy`k1(Y3=XKyy{S~zx9th$D zeBwpeC77#>jJT#4CAfL%3b;e=U>`ENVC8RL15x+t1BQBss2@b@ryY3Ih=lJgJ%2Q5 zfiU0P=o!(Tl;~4}9#K9so~WMDoE=Fs&&xM-Rci3--`9doHX?l?yyeNvFN`A0&n$A3 z{alqWPhbx)Zd~r6{A_o^ICj2b>^*D;H(-qiA6^w9iIl@X7}-xA+2ZAMH443FmvSpP zvSzw>)V=g!MI`!MzAkV!A7&qHW<;Aj4!<2^byRNap~{xoh~i$bzKN`FbuK}VsTVX> z-_q9$(`~`;GA3#C@Ov7D_F{#39MfRo@;l;Ngnm@Pe%Vl|28)4breH)JB8}v-Vo9UdjO{o z*^L(pfngDMt{_2J%IG5cngzt%x$O0dbpInoYmxBJ`T4>LQyR`brQM{}t-|o&ipK_T zy=@N+0BcFe9*e&Q_Nlwgow}%c%Y3bUREN56yY>KtYU=me;&yJK9~v}P@I55M^ni{& zq#D`^>tZ|>#=+~)<{6BkFSz!GcUgh!f7U3j3Dy|nzB^CzdW=uz_|D~+Qz@}Z<3rcB zLSs32EQI=^y#4&iVMFT|I|+=n2f2PN^75B5(Iw~LvP`{k4d}}vUC3puW5}eQ1Cu8- z;D+TuoyH#0>Z32@`k$TCy~Ud_6)e>;J(ys!;n6}Q0&u*SpxFmN$QW=KPx}kY8b@c- zyWax@c@xU+bJFNLmmwfspDwX6@ z)~+oF3TONz`NZqdiQ3&X4wpa>{~*~Ni$fE)5c?sz!@_TxdV*KQobziPMug$znRLmB zBw;QFjpK_j{AkrJY<7sSSI)?2=%tuH9OT1ZeX~(pIRTm?L^X(5p_T|L&Nk~;aBN4P z$K^8=3zhDpF^T)1V$m3eA4}QU%SLs}Qd(g#+O@ON1YQGUqg!-?D)fkazPz3dm!(jd zRo1awMuNAr|9A-fVyQBZAohs%p#IE7feYKximHH*J*(((dvCZz3_BtX!^U<64twi= z?A0|Ijc%=ve27H1 zeb$O3yL#Px2w`)~9M{{t^|yN)7Lz#e9GpUI8hQs9kaRM1%CIQ9czU#x9d_4WPrIO> zk!h@Qhf76r(Jz6Ef9avx>snLW)fzt(<|{#44L9M_`i^c4*}Fc>FtZD6U{1Kr!QW) zq3iAPR*nJ_gF+M7d#*otTGG;Svu(0omyV4gmwAe@Gy;i$USN3;tQsn6Msc$s9Q>uU z^cwG^ORq=lEgh0^Z?z?Se<W3qSpRtti9Ac69OJ4#-!ZobrMei-Nu+EVCuCz&C2-tt_ zuusx6{v8KzK6)|VF#A4&64_mjqrQUK^1L)1n{N16j5Rh1hz2@uOvS;6f z>-&jt&!;7a0=`oxFjKUN763!%TV}vq_3eUdG4^sVs!i#@9zp$4RU-7Ue{JU8h<5Gv z5l?{FPFJ$p*KkKBsfC@?kueJgaT3YAij8^(vU{G} zvb?gV$?GwAj39mKnPFC}CcO^5#?Ch^a1YVHWPRmL?S4a_-6g7TSEvAXcJ{?I9Vj^G zuWe^ebvA$_UjWdVz3@{1%Ag(vCc*4^$c}A_0u{mpxu5p^EtfED*EN-Z&;ZwJm|g8| zkcMbXoJT8DspqOzDbG(q!wGL|ZiDw%a12D1!z6YV2qUc+@nT4A=sMmd6yYL?{de=P zxT{%D&NDA$&%vtzquU8mAASQH`fyBviyjTD9d%V2b{r-N^NK(W2ww)IK0X_x;>!;h83d^ zQ{#GC2XFWT_i0B;h>jNY5$#@YheaXhx?X?z=U46}DoLl;r1R~7(!Y0yf(*sw7z5nx zP(+mxzA2;t5mJx@?SO9g|1vLArlJjt1+U##gKc~Gkpze<)(WBtqp!+^!(k#tMh#*^ z3;s_1nq`S%9UIMVcCfIO5J?R%8+EbOWwc0aF`34;N$^_VbNK zR0_OfGO8EQl)=eqsMJO<+72xPM!66P<3y}kn~;cpAR@pzB_g5%Hq;zv3_F_5W*Bj~Ywv2@Ac{sYjbbi+667u1?MuJwM5UA*bc z=JJmUL$SzqQ9mm(p=-af$2n7fWpBA%J5|{T2Q~Bp(MZi%8}9+P4yNayYp>_5i5*l^MaLi%{W2$116yUpvm!k} z@rwy=wBweNgrwpxpLejoU1H0YBa_6a9Rb^%qhm_<0xHAeD$jr(zS~m5Cc(Gm4bjc; zBawOf{#?Jp`Z|zlL(iYQpc-b&^fX8x*`k4|ddd(B8QCeFINReet+FBmM(y3EwlDTG z)pJ-vf+$eb`->8YJ=Ct&Zd&lfHRmD@fD7p`U9bnf@+IG6i$fD|tFFig@RI=YpQT+F z&)+!N=v*%hoq(N$gB*k)zYWzJr`+zxfwoXK?3hcoso zV`v_>W_pWNChkEw@L#OMI6WeSVi|@(k6-|gpHl&$PG|h>56?neGoFNZ(j`ycv_tBB zFp&FuIsjy`>>`k$apeO-JHwe#9T|?jz1zWhi5CZPA zAs#y$C-yrB_~qtRpHiRi0sG&0+hYeCq^(jXno><*9`X$PnU0Kd#^ldl4c zyg~91DuBuu%0ZoG(jY7HdTtY}nHopXfA5-fU7URD07!pqVXWDDygqNo-esPKDX~bv zBn;oLUD~kzAe37{q&UN>%7{ZeNLHv25`@L;4U1A|qyELi(WRRpc+wehFLmJe-HS{% zhVl!c+QW1wp+(2fcbQ3z0~z8WgjAgAMl)Fx<_Y1MI!O6czVQsW98Joj z^69V)SMU#iU$fDK-*;e&g@)U29Lx#+&}Zbr09YFfY6w@ftSf|6!uR7=Da?P7g@<*< zzz#Y`JQWo^x_KeV0 zAn#h%UG~|5n$qR=>>H}nBT>SjczEtM=lI}%bmC#YR6yW$0sU0XoGN3Cj-0e*nc~xP ztZ?bPuR00r9GA$}xfhj#3b6j#{tV^&ry5DGjH&C;l>(L28<>$vf8PwxIi{HRnzBHx_ znhCi>A%yJTUODmC+IeSWXbD4*p0OG>MS@(cys?MFbB&k#mn=Eoyu1*OfjFVhcW;s! zlT0`zsiV4d1>Xtu_;U17h!_&R{pbbS_OE$yj-4EMOqdVlxs>MNO+Wsc@#(upklM<4 zVbFFWpKH-3juQqGfqD>xZtBaFFGy0PCJg(A#cn!cg$iK3gVKYf8~~Lw{=JU-6jO07%2;MF8TN&w7cs z$DuYoF$q>FiACizGgU#uCohl~7i84=H(NFX1gO%;2=X?oXQu8x%722_yf4O^u90$p zL^e-+a5M^$lyK0%PTj#kEKqf>e&F0mPcn1-NzhP+V{37u21BFB8qg!CiU9qm_tE<( zn|}wwdEer)V;X?FwJp>fc)vWyRzE0qQqu0aP%g9JLr0M3Eu51NP44x=7U$P+Y#KvoE|BrPf?OfTAbhz@x8)#rr1`eTU+YcA&C7I5YdCt8T8sdV&Ns2T zj3HOVpvJiO(I7+}2rI7$cBupw>5-y>EhA||mh+%%vyVDWl0p7eJKDC_Uq41P1z87B zH%gB8F{t`_uPgb?dEkVB>Srpj+@qyr6}}}Y?J?p#fw=Do9RLNDC&1{heAfprAf!}K z&|&LD9|lo^6{lyt;Q>@m3NcjozxmI+NU4DG*;b=WQs}_+t;uh@1Rv^D|HylK_MY|V z-nn8RO3QYLmvuQS+noWm7{bQ^Cz zFjg^RH8JjxVd%tG&d2sy#i;V56xI14(+7WPM8A>#;~pt?9k+I`g<$S|faX~7z#=lyh?5nHdHUY-B2 zJDi`n`K%Ji<($93RWcn(A9(?2p!oA^^B<-j>~U(o_pUQRKGY$ax(9z*=Nul6n*oll`MZ`zPC>~^b$^UMdffsMW@B%;sanIeQI`5@R1imNn1Aa1#xWyRqq}w5% z8_&;LIrcti@x+~wT|1x$++#$`0C^qfd&wT<{b9LJ;DQ{Mozz{ZXkC~eD_R~Tkb=mA zHRNvpS1JF^d=`JA5sksPsb-My8Z6Ybc1_^N%7<+-g#1Y5#x!ATL#1q#Xi+KvS*u%7 zEd5Up47b3rn`a2mO49=`M<;lEY;&1-axF(kU0k_Qm#ZL&a1n1qk->|gm3;lT2g7k} zC|l}~cC*EQ)!%BSe#TSvrrJQh#*P7jc>o@BOFKPQ=t8Cno~b+2{VdP9M!mIu*XQhC zr6e0`E4YyvQZ)oef+C_)k?{Mz9omHSnrVt$I=N@yrAX9uO!F*N*T`*%S);U=6>|VT z4_*Y*Oz?pYRJD)cSi4pFQ^fzPuN&cMvP=1o-tQ@41R1X}P_;dyU*2#n(pK{e|3e)~ zhbSbddH}eZOej5Tg_=>jc9E8G7UDZ;>pEsYAkxbtQ#G`CRduT^5_L@q(R^W26JySQ4wzwEDXB*;9B9fEpT1!japKD z%U^c1ktAjHQ7#HZvL66LeThFtysUp@;=0vb!o?yTxxE(ywqN?NUsgolxR<#05;zc# z^^#7U5I~m9__4SzShMYx5dWcBKJLv!_n5u&pCB4G%6CZ^VjHqj+Au&T0 zG22|Uc9&mGI<}hc_PlmkIO(a#>{W{6H1JG%Q|Cab<9}YM<=~G60omhvb&p1ChsG8@ zhAvuppfw>RF5jO%bdEc;`~|kkZqbw~y2(5FQJouFMLJvn;1Q>E2!E~j zh)HJl8PHT=IU>wdz#Yn+ztd8>!WE^x9W`uzRCV(KuWx8IsJt_{usf}fl4xJnI9N96 z?r6yqi4$6kg+8HHZ2on4|DJ%1=!c*hIuU$rwqpA=$dqM*6$w=5GPudOpnd5;zVA{n z@09PLyOAPwAKt}pHq0LspZ0BmW-#*XVO)O1t`(iq@W0BF_fymQjFdJNtUmTmtlxfc z6Qlyr00wnMn4Nuk$CTE4?AwRluV1Vj><_9wFC>bG>wVqvZ-_iMS%SB$4iU7mM)oTZ*3Y{}8Q-}e0g%BV$Whv}RYvTj+0k$qMdF1t|(Gi7vF zgji8}wtIZXyy*rJ;6UKlDAFh|Iy3O6p0j(S6LG$j{ zFR^%Cr(BM)3IfA?y9|oC;?K*PeA@+eyd589ko7IHMC0yiel37pYMtSh&!{peT}lo1 zJ#jYl&T+=T7_mlvF%@8PX-L2O$03BDSY?P+D`lsT2rWY% zFXGJ_eoP-82F^HDy^|v9bJ)}w5Yq~Ak-&(A6NQ8X| z!xuPVitXHrl+mC*mF`~%G{kBybI@BJz<&(k=emJS4fOGrV>YzIA33^^p>5taJGl^= zSu!-e=7U0K`n(`cUZJ(Z>VTxkzqK_Hz6a)a4eB*R-E-%Q;FdS_1_7`7Q$PBvyYP3v z#$R2Fzq1fOI|zTaIR7f_|8A`QzemxIiT>4b@qe=V5vKp!wfcX0^?!!*r-k|dl;QuB z;r~M!&bFnWV(sA{WyFOkJGQwRq*0l|X^o`6ZUy-N$KlBK&)8y_B>p=M=1>WyP>F5( z`14+m&abhe)>!=J%(ZQLTKa=UD@+}Ni_rs^I=6L?$CWmfEK5^%!48CV{E%ol|>d;mveA2Y`-;KKfaViixrs}8@| z4aux+PNw9%e!bsobNSj!xE3U$e(Tt^YuCOz;7=4Bjz!FNNFI={+_dK;L`Et*%Hs`^Ucl; zlPw4p=u)ZYDe(Mk#mbE%`#}4H(Fb@{wn?U`x%uNQ3W@NjjT_1vA(2&~o_TM2q^PF% z*=&%^Hh8XL26Y4x2Qp{6a-X+*&-cEJkLJ9)zCx%V+Em8OZofxwZOC&%2M-=(!N9Tn z3YW6-Y${$+HpVzRb1d=`b#04oJUg!{0in=7>noF=35Y5;9QpAW6J~3^cu4TLR&n23o!KVRlP&L$o~vTO0AbN1J9DipeoY@q zrI7ic!$Dh~FFoln&KtqZ5OsLzxfqo90z=YLfPoH*cv-X42FY3%$s1!aGqd?P^VZhZ znPyEwJb3M7uVR*Ufx+H~KHMaIl%6>Pr1;|ZnViVA#o1T`S&4%E=*+jZeI#Ri1djO! zssfuf4sHO+yJYOpl59p=pEtR9@#4(J(%8&sZRAWoj&lBV_DXMjHTd@GT%y{GXff?q z!JFR&)+STXTUyE5FJm3<>k(E`bb>6CXdf-VBB!OCF?8CRo%?NPYN}_+M^l2A3pBBJbr2o z2=o<>vL)A2pqH0VwEb}FIFO`5-B@dyerGtVfbx)E^2+#^ha@5x1UxxY#5RIc++06K z%nUqh&43+>5;}Zd$)VX)+A!HPC20MbkWOF;3p@K7Gh~r(V>a26ViCb1dY-oG`Z%eX z?ah^$na-Tke(clYKwE-H^Tjh?AIWLPpZ_6{j%*Vrut76DZ|!HgZP8|62#a&jg*SE~ zVAcg1{;OGABN5^SXlWcLv@+3T0(G>#JOj4VZBQ#k^#yTpoi^?1_RN)_?J`1TgWrB4 zFLd7+LbYc^S$??n63joPV|~7_)1yT@bK%3JSPJC+{VU&E4X17vnM9l{e^TJw1;z~u z9I6bOd14#c`Y5Fm*9!eWJr5TYP zou{p3W_7wnQy7R1Qa-Ny{_Wr9=;VXw^zY`T3qminI zp-Uz1dh!?EAP>9tU(jBxLO3lBSJQ^Ky!nM0Qo7z~bn4WpnQ#FcBife5=u#H_wqHK6 zIZu=J6Ghu*C8yZgS#n*psL9TqJ7xFpKTDfqczAgB>Z<43Sd8ujDe>qXwr_5QmYrK` zvz^}?o^*cjnC!5R(auOsOY5u(LAW_VQv+qiLWiB=x5ghDb|f5j?f^?SOFI!2_yb)! za`G!*rKYBu&i59YH9VH@EcaU}7=2`dx3{;aeeVDd^uAQ?Yh1DPS=ec~DrDx1bc(65 zvGGh{x6O}9Zc^f;^j~#!nDTLRzc_DVQaHIX3oZ7!;j*QZeUDt+&+j$zk^b7-3mrU$ zS|dvAn7L8%Qk{6t?b~$UJv9o6p)F&q0t%)c6OBuo@B4=ylBvfzzVktM*oA+{{#=sA z%k$^YcN93b$A7!A&J5WGZ@#pw@Go>4EdTJzEa$P)P-Vrf50_>>hO;_N;a}8+g@tu? zC7Sj*fk^-TC>SAM8w1uqn?{ zxKx7O!NUW_XzBpcjs)iO_DXnfnNPlk&qCtXXryBNm#gR5g;hEfuwU|(l|shF7O z93HA;Wr6%tsI;MJhy^fr-7l;f+t%Lx18*Y4gR|He!f1xn`|er;J2Mo?FaOntdziLg zugr5_J>GvYl|w`gE2MHG>qLxL?w*f{R{&sLEp+Zy=)~$F*3eWUdIs3IPK?9VtK;cT z3eb(7H+u8^A54<81I%gQslB~e^9l&qsU=x^Q)d#)tPBVKQ+Cgu<1{#SA}$R4`19BJ zeKWbmgQeLpyN$(>S1x@;PSv6GuK?tz+t$cIHwH@0z`q$Jse7ED886LfpUH}UZ`!3qiK3(xi{Q+Jg4nd}1DWYobNZJw~0ryi|S10$fgYw>?<<;eyJK0X1 zud;(k>)95zL1yYA9ED!9<}|Vpxco)BPt$8AJvm@O-D~s{GmwfTuug}yx%VxviU<93 zrsyzpyHdOIZSyA@pQXu~y&7Lpvl#wRm%p}&+njj5a@eWE=-$11Gb94e!oDurZ12NU z^F43J?ij#$3z!yZpus0=TF=b1Hrs7MBLTo`SiHhqNw$5vE_B%rQANN}^K`bRqzW(B zFg$wv__4>$cCi-nibHeax1rSItbC%Pxg4Sz>9oOt9cA>p5)D$|PY>GPx&PpSX&3|h z`CQAwubV9nvl16oMa=T$$g6m_yF&)%~}3}KQuKZ@2+%B(Xe+|d3G zb%Y=o9%B>9s5VC>Da`eT6OrwNVn{gS? zyLaz`SCi9<`{rNW`1Z~+W@H=qn!M1^P*Y3Ggsq9^Zt%M{yvUX^Gn<<;3| zhnxVv_IMhP?f2un7c&7J1j(?TV zL7Yx*30)*1I|*GaiV6>l*>VX}a%n;r*D;fHm7H91BrQkGHkaJeSaS=}VaPbBRETtx z(d0He?{AOC?~mX9+GE@I``zB3*ZcK)zW4a$Jb$8-G-}RUIP7Fzwt0+st z7GnE-GXWU+MYRzvpiKh0_@F={owm$@2J%~3SI)<>zj9|fPOBh4Ij=I%WtAlrj=ned zI6{E9syzERCNXM$dX&nWjpaU~cky^Om>)Vh+!dBUo8*BCCK*z^Y;Y3XmD;wrGp|Po zlC|%j3{Ou<`3q$ykp1WkxIrVa>6VHBtrxkcAg7_Bq2kM_yT2gOKfVTyShUaqi|o?$ zbJp(;F6;@DLmwvkwxv03wZHeBvutzZhyhW0W!*!IXul}F5U7WgZsdlCg?C{FDnLCZ z4PA-}K&dWUj@))EEiGlmiWkUW0e17RH(Mq)O%DT56|d3378;Xyh5v@vOuXTg>wSm; z;r0Yoz0JR~Veen4OP@0zG*g+ou1z_Hq9W>i;^|kIsMzJ73mV&aO_61nZeXx!lT|u~ z8H-Ox|{ueyIepmvzu+TU_X#rfs&X6~+`sKzAxv& z2Y;u@J|W^fJ5l6LlyW3dMd|o9XD)3?cr@&D_tsUN?(&M07eX#dGJo_{jgKyGArvEj z+`rF4^$n;C{lu7-j%!ZRWUt+7SKwI_&P-Ipum&mv7Y{6h_6@Sy^C_ZzivsxlO;UrBH`*UDulPyVLzb+dZc(evf*H? zM`g&6m!Q~lzyHH%l=`45M3$TklGtRzhSo!q2c0RPKaZOQbXo@Wm)UI3d#a>^^+1J@ zm!HqF&oE{JuJbyPCuq=BhXo2M&N_=qXkvS48hb4O$nEf3x8SP97WYc>&jg45V8SOD z{kz04uR}>|AK_|3Lc#8Lk%y^sAFj6rn0h(G$sA#wnT%hGyN{82(aw z_LX-1GibxHj%=3it9#_{<6Y1o4y>q|PZNN-y|H}|zQJ$yh@fDse1|L+U~!;YYD}UC zCJ!P|dk=W1fF@Za!FT6M^XulI=qxaH(he`KE4ca={_woT7}(pTYu!=>z;S`{VZjvS zpUS`t3IqueY9$a3x6DY#!O@wZA=ZWAW@a*WL7%_=^3saB`YW`>y0@mcg@d?!BKbmH0y&70D^k}O#bvwsw?$rAwa<|ak z85!wnhDcDG-e=F=?C*CoHa1q*(AYkA(yFWIgrQf7T52odQSG|l>HFh*uL=Z2JaZjcanExOr+zZrr_x;*dEn3XPb zw8+Ah%1K9Ns0;>U_4US)iyVJ3y@K6~?Afp;L78u$o{wj8t>S5zccrcho20dq8IL5d z%_JCVez42FZ$FTwy{4uK%JHs7M-FJWc>n&Sww5mzTac4lfofFx&lk* z!_l-$6Q%8`;nEwkapfG&P33qV4;vm4!Ktaaq7;C{rI(lQYHn^;KIC0BDA@h*@)?uX z=4Ki5EXCR({+l-&4#_p$mVJQpx6-T&u5xy9X<;0vySlkK1ryk>kSQvwOxe*qtLek} z&d$!bc0XqvT#0Q(8`z%Ke@^=FHJo{`}5WPOFB8-QMIyd zTs2GBbo63ZcXz|ch%U?qUDyXw`YDVPa^tJhqA+nD#w{HkYqGPm)fHqq_pCl!^%Q8V| z$aKUV%U_E&SK}D+$5M2al$2gYM@L`OOLh99==&gpzqNT*v~Aosxqo0_ftaEjb^g5L zyMcj}kdP1oU-;9wDeeNZ( yNzvsn7)QNGq>Pf15&@OQ4lQ2)|2Lg%8nSTEB3s(p4=z26AhtF*>*7P+@&5sxvs9x1 literal 0 HcmV?d00001 diff --git a/test/fixtures/ellipse/shadowColors.js b/test/fixtures/ellipse/shadowColors.js new file mode 100644 index 000000000..fa992f743 --- /dev/null +++ b/test/fixtures/ellipse/shadowColors.js @@ -0,0 +1,69 @@ +module.exports = { + config: { + type: 'bar', + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: false, + min: 0, + max: 25 + } + }, + plugins: { + annotation: { + annotations: { + box1: { + type: 'ellipse', + xMin: 1.5, + xMax: 3.5, + yMin: 5, + yMax: 10, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + backgroundShadowColor: 'black', + borderShadowColor: 'green', + shadowBlur: 3, + shadowOffsetX: 10 + }, + box2: { + type: 'ellipse', + xMin: 'May', + xMax: 'July', + yMin: 11, + yMax: 15, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 1, + backgroundShadowColor: 'black', + borderShadowColor: 'green', + shadowBlur: 3, + shadowOffsetY: 10 + }, + box3: { + type: 'ellipse', + xMin: -0.5, + xMax: 'May', + yMin: 16, + yMax: 20, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 1, + backgroundShadowColor: 'black', + borderShadowColor: 'green', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/ellipse/shadowColors.png b/test/fixtures/ellipse/shadowColors.png new file mode 100644 index 0000000000000000000000000000000000000000..63d0072231d63a911928e2a2f5852720985eefd4 GIT binary patch literal 53602 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/label/border.js b/test/fixtures/label/border.js new file mode 100644 index 000000000..b67d45eec --- /dev/null +++ b/test/fixtures/label/border.js @@ -0,0 +1,86 @@ +function content(ctx, opts) { + return window.stringifyObject({dash: opts.borderDash, width: opts.borderWidth, radius: opts.borderRadius}); +} + +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: false, + min: 0, + max: 2 + }, + y: { + display: false, + min: 0, + max: 6 + } + }, + plugins: { + annotation: { + annotations: [ + { + type: 'label', + xValue: 1, + yValue: 5, + borderColor: 'red', + borderWidth: 0, + content + }, + { + type: 'label', + xValue: 1, + yValue: 4, + backgroundColor: 'black', + borderColor: 'red', + borderDash: [6, 6], + borderWidth: 5, + content + }, + { + type: 'label', + xValue: 1, + yValue: 3, + backgroundColor: 'white', + borderColor: 'red', + borderRadius: {topLeft: 16, topRight: 8, bottomRight: 4}, + borderWidth: 3, + content + }, + { + type: 'label', + xValue: 1, + yValue: 2, + backgroundColor: 'white', + borderColor: 'red', + borderDash: [2, 6, 16], + borderWidth: 2, + borderRadius: Infinity, + content + }, + { + type: 'label', + xValue: 1, + yValue: 1, + backgroundColor: 'white', + borderColor: 'rgba(255, 0, 0, 0.75)', + borderWidth: 5, + borderRadius: 4, + content + } + ] + } + } + } + }, + options: { + spriteText: true, + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/label/border.png b/test/fixtures/label/border.png new file mode 100644 index 0000000000000000000000000000000000000000..42e73e734697efc7991a7f9b779387cfa862d3ba GIT binary patch literal 14204 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/label/boxLocation.js b/test/fixtures/label/boxLocation.js new file mode 100644 index 000000000..559089be1 --- /dev/null +++ b/test/fixtures/label/boxLocation.js @@ -0,0 +1,112 @@ +module.exports = { + threshold: 0.2, + tolerance: 0.0071, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + ticks: { + display: false + }, + min: -10, + max: 10 + }, + y: { + display: true, + ticks: { + display: false + }, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + label1: { + type: 'label', + xMin: 1, + yMin: 1, + xMax: 8, + yMax: 8, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: ['This is my text', 'and this is the second row of my text'], + padding: { + x: 10, + y: 10 + }, + position: { + y: 'end' + } + }, + point1: { + type: 'point', + xMin: 1, + yMin: 1, + xMax: 8, + yMax: 8, + radius: 10, + backgroundColor: 'red', + borderColor: 'black', + borderWidth: 1 + }, + box1: { + type: 'box', + xMin: 1, + yMin: 1, + xMax: 8, + yMax: 8, + backgroundColor: 'transparent', + borderColor: 'red', + borderWidth: 1, + }, + label2: { + type: 'label', + xMin: -8, + yMin: -8, + xMax: 1, + yMax: 1, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: ['This is my text', 'and this is the second row of my text'], + padding: { + x: 10, + y: 10 + }, + position: { + y: 'end' + }, + }, + point2: { + type: 'point', + xMin: -8, + yMin: -8, + xMax: 1, + yMax: 1, + radius: 10, + backgroundColor: 'red', + borderColor: 'black', + borderWidth: 1 + }, + box2: { + type: 'box', + xMin: -8, + yMin: -8, + xMax: 1, + yMax: 1, + backgroundColor: 'transparent', + borderColor: 'red', + borderWidth: 1, + } + } + } + } + } + } +}; diff --git a/test/fixtures/label/boxLocation.png b/test/fixtures/label/boxLocation.png new file mode 100644 index 0000000000000000000000000000000000000000..50a989f6af2264a77b0d432a7eed5163080603ad GIT binary patch literal 23612 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 z c%9F=b^(ezVDkKb09d-z+5i9m literal 0 HcmV?d00001 diff --git a/test/fixtures/label/boxNotVisible.js b/test/fixtures/label/boxNotVisible.js new file mode 100644 index 000000000..9ad1757ed --- /dev/null +++ b/test/fixtures/label/boxNotVisible.js @@ -0,0 +1,49 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'bar', + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: false, + min: 0, + max: 25 + } + }, + plugins: { + annotation: { + annotations: { + text1: { + type: 'label', + xValue: 'January', + yValue: 20, + backgroundColor: 'missing', + borderWidth: 0, + content: 'This is my text', + position: { + x: 'end' + } + }, + text3: { + type: 'label', + xValue: 'May', + yValue: 20, + backgroundColor: 'rgba(250,250,250,0)', + borderWidth: 0, + content: 'This is my text', + position: { + x: 'start' + } + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/label/boxNotVisible.png b/test/fixtures/label/boxNotVisible.png new file mode 100644 index 0000000000000000000000000000000000000000..bea9e94328056c0d380a6f16a10fafa88218fd0b GIT binary patch literal 18625 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

(}^Qxbi)&6s=vegyJ{>&%1tbGG5ukg+=V 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 Z@XyV@hVNH_&m;m4?(_Jgd{5Ao{{wZOo!|ff literal 0 HcmV?d00001 diff --git a/test/fixtures/label/calloutBasic.js b/test/fixtures/label/calloutBasic.js new file mode 100644 index 000000000..528114e13 --- /dev/null +++ b/test/fixtures/label/calloutBasic.js @@ -0,0 +1,90 @@ +module.exports = { + tolerance: 0.0075, + config: { + type: 'bar', + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: false, + min: 0, + max: 25 + } + }, + plugins: { + annotation: { + annotations: { + basic: { + type: 'label', + xValue: 'February', + yValue: 20, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: ['This is the basic', 'callout representation'], + xAdjust: 150, + yAdjust: -70, + callout: { + enabled: true, + } + }, + overlap: { + type: 'label', + xValue: 'February', + yValue: 15, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: ['Callout is not shown', 'because overlaps the point'], + xAdjust: 1, + yAdjust: 1, + callout: { + enabled: true, + } + }, + crossLabel: { + type: 'label', + xValue: 'April', + yValue: 15, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: 'Callout is crossing the label', + xAdjust: 100, + yAdjust: -50, + callout: { + enabled: true, + position: 'right', + side: 10 + } + }, + styled: { + type: 'label', + xValue: 'March', + yValue: 5, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: ['Callout borderColor: red', 'borderDash: [2, 3]'], + xAdjust: 150, + yAdjust: -100, + callout: { + enabled: true, + side: 10, + borderColor: 'red', + borderWidth: 2, + borderDash: [2, 3], + borderDashOffset: 0 + } + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/label/calloutBasic.png b/test/fixtures/label/calloutBasic.png new file mode 100644 index 0000000000000000000000000000000000000000..5059fe5a11fc193296f35d407d4f7b2db3e6fa53 GIT binary patch literal 32699 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 Dzwi=P literal 0 HcmV?d00001 diff --git a/test/fixtures/label/calloutCanvas.js b/test/fixtures/label/calloutCanvas.js new file mode 100644 index 000000000..44ddc99fb --- /dev/null +++ b/test/fixtures/label/calloutCanvas.js @@ -0,0 +1,43 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + canvas: { + type: 'label', + xValue: 6, + yValue: -6, + content: window.createCanvas, + position: { + x: 'center', + y: 'center' + }, + xAdjust: -150, + yAdjust: -230, + callout: { + enabled: true, + position: 'bottom' + } + } + } + } + } + } + } +}; diff --git a/test/fixtures/label/calloutCanvas.png b/test/fixtures/label/calloutCanvas.png new file mode 100644 index 0000000000000000000000000000000000000000..692a7e92425f9e87b809c0b6299e9ff29a46de9f GIT binary patch literal 23356 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/label/calloutVerticalPosition.js b/test/fixtures/label/calloutVerticalPosition.js new file mode 100644 index 000000000..fc53c52a7 --- /dev/null +++ b/test/fixtures/label/calloutVerticalPosition.js @@ -0,0 +1,161 @@ +module.exports = { + config: { + type: 'bar', + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: true, + min: 0, + max: 25 + } + }, + plugins: { + annotation: { + annotations: { + text1: { + type: 'label', + xValue: 2.5, + yValue: 20, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: 'position: bottom', + position: { + x: 'end', + y: 'center' + }, + xAdjust: -50, + yAdjust: -50, + callout: { + enabled: true, + position: 'bottom', + } + }, + point1: { + type: 'point', + xValue: 2.5, + yValue: 20, + radius: 3 + }, + text2: { + type: 'label', + xValue: 'May', + yValue: 10, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: 'position: top', + position: { + x: 'start', + y: 'center' + }, + xAdjust: 50, + yAdjust: 50, + callout: { + enabled: true, + position: 'top', + } + }, + point2: { + type: 'point', + xValue: 'May', + yValue: 10, + radius: 3 + }, + text3: { + type: 'label', + xValue: 'June', + yValue: 18, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: 'position: auto (top)', + position: 'center', + yAdjust: 50, + callout: { + enabled: true, + position: 'auto', + } + }, + point3: { + type: 'point', + xValue: 'June', + yValue: 18, + radius: 3 + }, + text4: { + type: 'label', + xValue: 'February', + yValue: 7, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: 'position: auto (bottom)', + position: 'center', + yAdjust: -50, + callout: { + enabled: true, + position: 'auto', + } + }, + point4: { + type: 'point', + xValue: 'February', + yValue: 7, + radius: 3 + }, + text5: { + type: 'label', + xValue: 'February', + yValue: 15, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: 'no callout', + position: 'center', + yAdjust: -50, + callout: { + enabled: true, + position: 'auto', + borderWidth: 0 + } + }, + point5: { + type: 'point', + xValue: 'February', + yValue: 15, + radius: 3 + }, + text6: { + type: 'label', + xValue: 'April', + yValue: 5, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: 'invalid position (auto)', + position: 'center', + yAdjust: 50, + callout: { + enabled: true, + position: 'wrong' + } + }, + point6: { + type: 'point', + xValue: 'April', + yValue: 5, + radius: 3 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/label/calloutVerticalPosition.png b/test/fixtures/label/calloutVerticalPosition.png new file mode 100644 index 0000000000000000000000000000000000000000..f9357ab8c5025f20c2b3328f838330801c521865 GIT binary patch literal 31282 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/label/canvas.js b/test/fixtures/label/canvas.js new file mode 100644 index 000000000..54b3174a0 --- /dev/null +++ b/test/fixtures/label/canvas.js @@ -0,0 +1,49 @@ +const canvas = window.createCanvas(); +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: false, + min: -10, + max: 10 + }, + y: { + display: false, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + canvas: { + type: 'label', + xValue: 0, + yValue: 0, + content: canvas + }, + canvasSmall: { + type: 'label', + xValue: -6, + yValue: 6, + content: canvas, + width: 100, + height: () => 100 * canvas.height / canvas.width, + }, + canvasPerc: { + type: 'label', + xValue: 6, + yValue: -6, + content: canvas, + width: '50%', + height: '50%', + } + } + } + } + } + } +}; diff --git a/test/fixtures/label/canvas.png b/test/fixtures/label/canvas.png new file mode 100644 index 0000000000000000000000000000000000000000..82ccbd23b1a8e4c2f86f5ea3769c7f6bf47d2aab GIT binary patch literal 12217 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/label/clip-false.js b/test/fixtures/label/clip-false.js new file mode 100644 index 000000000..74fd3676e --- /dev/null +++ b/test/fixtures/label/clip-false.js @@ -0,0 +1,44 @@ +module.exports = { + tolerance: 0.0075, + config: { + type: 'bar', + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + min: 0, + max: 10 + } + }, + plugins: { + annotation: { + clip: false, + annotations: { + text1: { + type: 'label', + xValue: 4, + yValue: 0, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: ['This is my text', 'and this is the second row of my text'], + position: { + x: 'end', + y: 'start' + }, + } + } + } + } + } + }, + options: { + spriteText: true, + canvas: { + width: 256, + height: 256 + } + } +}; diff --git a/test/fixtures/label/clip-false.png b/test/fixtures/label/clip-false.png new file mode 100644 index 0000000000000000000000000000000000000000..724f55f09ec8799be50c2d6ff84a99f27a28e27d GIT binary patch literal 14801 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/label/missingScales.js b/test/fixtures/label/missingScales.js new file mode 100644 index 000000000..acfbdbfed --- /dev/null +++ b/test/fixtures/label/missingScales.js @@ -0,0 +1,58 @@ +module.exports = { + tolerance: 0.0075, + config: { + type: 'bar', + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: false, + min: 0, + max: 25 + } + }, + plugins: { + annotation: { + annotations: { + missingBoth: { + type: 'label', + xScaleID: 'missingX', + yScaleID: 'missingY', + xValue: 'February', + yValue: 10, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: ['Missing x and y scales', 'located to', 'the center'] + }, + missingX: { + type: 'label', + xScaleID: 'missing', + xValue: 'February', + yValue: 2, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: ['Missing x scale', 'located to', 'horizontal center'] + }, + missingY: { + type: 'label', + yScaleID: 'missing', + xValue: 0.5, + yValue: 10, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: ['Missing y scale', 'located to', 'vertical center'] + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/label/missingScales.png b/test/fixtures/label/missingScales.png new file mode 100644 index 0000000000000000000000000000000000000000..b34f674aeb69a68bc9433522f2edb2a5896398cd GIT binary patch literal 26961 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/label/padding.js b/test/fixtures/label/padding.js new file mode 100644 index 000000000..4551e7909 --- /dev/null +++ b/test/fixtures/label/padding.js @@ -0,0 +1,101 @@ +function singleLine(ctx, opts) { + return 'padding: ' + window.stringifyObject(opts.padding); +} + +function multiLine(ctx, opts) { + return ['padding: ' + window.stringifyObject(opts.padding), 'align: ' + opts.textAlign]; +} + +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: false, + min: 0, + max: 10 + }, + y: { + display: false, + min: 0, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + text1: { + type: 'label', + xValue: 5, + yValue: 9, + borderWidth: 3, + borderColor: 'red', + content: singleLine, + padding: 15 + }, + text2: { + type: 'label', + xValue: 5, + yValue: 8, + borderWidth: 3, + borderColor: 'red', + content: singleLine, + padding: {x: 15} + }, + text3: { + type: 'label', + xValue: 5, + yValue: 6.5, + backgroundColor: 'transparent', + borderWidth: 3, + borderColor: 'red', + content: singleLine, + padding: {y: 30} + }, + text4: { + type: 'label', + xValue: 5, + yValue: 4.5, + borderWidth: 3, + borderColor: 'red', + content: multiLine, + textAlign: 'right', + padding() { + return {left: 40, top: 10, right: 5, bottom: 20}; + } + }, + text5: { + type: 'label', + xValue: 5, + yValue: 3, + borderWidth: 3, + borderColor: 'red', + content: multiLine, + textAlign: 'left', + padding() { + return {left: 40, top: 10, right: 5, bottom: 20}; + } + }, + text6: { + type: 'label', + xValue: 5, + yValue: 1, + borderWidth: 3, + borderColor: 'red', + content: multiLine, + padding() { + return {left: 5, top: 10, right: 50, bottom: 30}; + } + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/label/padding.png b/test/fixtures/label/padding.png new file mode 100644 index 0000000000000000000000000000000000000000..1fdaab9a3a1a286fb085fd68e23e3007bfdf7b3a GIT binary patch literal 24785 zcmeFZWmr{Tye+);cGDsaN+YO*h)9XlRumAWOOQ}Xx5AqXPAFLPHJf{@@( zB!rI(er-AT9)Mp6du8c6P))>`~DB#a`ywT?fm?674hrqLcE}$XOGrzwL`OuT2p{dS! z$_sxU=M6FA{(Y4&n>X}5p@-wfpQl3z^jWw7;H7pl5F%7ERmJdkiM%1C_j$M|;FVLM z5R%znKK1*brz21h??2^cL7>p*V&vbl{JDS+>Hn=ks3a2KoBmeJ#lKY|h3fx24E=wg zLbbQ!e?~Yl8-<{wczdmf?CFGaSP@pCx4vCYw*W0;*kg_FZE=9n9teSu@t#@tITAq| z4>`~ynWH>e2ew(gp)@9QW45TMNKJ=le?u*HUuEZr zH0?mDh2)}ana4tjO8%97)6J+OQ0lWi`uF&f`zTR-u&1&gfQjA95og9xSN zp+U#PEt&DfRw)*rzW@qIX=&l+31E62vpSrs=f3``?DXWY%``Q}Sl4Y?fMVJnTWFf% zw!1P@IvKpkjABzHg{rH(#qd8|2JL$Tv~Q;@l9`qxKni(B#A^~GB>336s_4Qkhcr1( za_IDAx2ElKl!ZQ{%M@9`d`gtlcU&ZMp~e>ypHnadNeM{P5}^Rv(afCk<~NLD*sL$# z2#v>UeO}Su6`Og$Q`LLYUt+CSaJW(tl^m{HZqq)PXV7-IT4NoOUDz$lK&yVNH1Ax- zfzYx4^@>L8F&?9Hyryjfl}OU=(Pl@~Pp9EFdbg##o!!z2~xL zkBJ|T$^A==!f6AK=ToOqm)Uc~nTw#rKF?xZ8r?VBgi`csJdNW#c6e!Y9F+XG+C?`X z^36uuYmq6AgjS?bj(Y6saOqCWV$Sn^qxU*mcS4Of(CG2c#(7njO$2gX#Y3S#u2OHr zUIJZu)g`D>&=-x5xbAV_(37rmrKiYTLj)O5hVbAQ%4ytqNg~d^^@c{*`RV3-Y8-YF zkHI1If`HkF{f!o$w%su=YiiK_=ZNzcorMw1Zp|Gd_8pepN#PE%EU`JhU+JtXp9*44 zSRV)LpTqa|^A&zQ^Us1fkMBzgb!nH0 ze!%`xK?kAz{JLMC<46(v_3Wx7HXT-+26|HHe!3ka$_!p_FiaY=-e?mE79Jx0m1`5d z{hLoWi~<>Mg@lln2B%U%4LjlobF4k73UTN5?;mLUIG0B@madd9wwBsX5>CIl3AP*? z6{Y$Vu*jGY3WdHlzD#-tGNFs6_1NAkx@VQwKwW@uRk19{=e}o?xNL7`Q8H{*agKPU ziOI{NV*pu;IDY5FgYTVNbAmm$ZBF-OomxVSMS%#ht!ek;Qrpyz z_sge2yUXT?pKmVkwSo?|woDS%wK~)-TlUG%-YPV>jd7T5j}gK5P6~o1XHCOjQr|IS ziSI|JWkqgu;vq=c-tZFo41pyYpAi2h+`pPGyyG0H(fT{X))GC5(j*n!wh6DO^A%Qm z1nU)AnzvFT!Gye8%$oFE9 z&Yvwj>EgIKidpS*v^EvOU5!fcS~CYi3bI>p4vc}9XghU`IE9`7_DoXTzm9NlUGj@Y z7<+XFAsx;12e2!r2B!}GAm~hEd)7C{x2~2bhCa{)&Gh|U$#-)}{LVCfl$+Y?iA;FS zlZVm5f8)oaZ4>q1T<8yd7;2)7l>AIF{3gNkfh=az?!Gr2Tewwfrzw6t3LW`CxWor+ zBE-H5-Jif1{_Y#~-H;VD4ekA!gF-T>uVAv-9V~xSbsZn_agoc7XS09VU9%+h5j^T= z-e8NO0$rTt9O!=M56%${ZK(KzU0?M7;O|j0|6a{^W|i821-tg@95rKGi4u1K~pdkH0u$pP-PAFK^%e z{yDmP@of>K7}+QX7Da2&0In2Qs{F`Jgi@*!E-!`2d7SOuShW>Jx^g27` z%D5azheemryysbyA4d{7UURH>;Xbfg}%p2F2bOZmbTPkH$3i;`HCcul+6>}NhbizJ}99FexPTD2Ri={ld> z25*V3+Y4$kcQ7?~Yhg%oygOzcd~1Qd0IZ8FkeMxVVCEy}`I4NDXI~%RhwfHQr%BUe z6X`6z__!>jr?v`>xf{&HJlEyadN*x;9~!A6%i1h(cj{UC1jo3j8T+=%l$NFOpu#I!0u;OtzZH4v!)~f5R|9 z$y$eLT6#ZFJYUFhK{YDm!L_pb6M7o*=@jM()^nV3v@6*qqveWLwu&7`TRjRTlAAfE zgv66^&J(Xc$^jIzgEf~sJvnaEd=_Jrq7Y~0FiQQ{L3>ssnkfac^E6O7$^hlg_||w& z^U}BqbeA~PH9fcbAfxP;A6+XzL}vY(&lrNFF<<@!q98SG}PW6era~FCCHs-fm_bXPwwgm~S>6AP0{w#Ma zz{9jNit+w*xR7=Aeu`L5<0crDd`#|ZKKl!qxvd$QIoO2T zP7FL(Aj4eqfgGm*Q90MJ6w2zo38I3|J48ce2P*Qy$>SverwuF>4d|*@!tFlegU5JX z=%>T`m>M2|a>e#v>-jS0MGxi@rBqOQp8L}l7Dm#EXHsKbGxh;+3@gc4yrIXdwEN`p zZTw!D_=TvHMu#$bBr(f)X8yo6Z)IW|+n0wYhpSON@*-^(Wz!#xyYA6&w;D-rj{K~6 zF4U7E$JOfAv|JWkL5-7Ar16904BolIi!(934x@O++wSSQ?y(>wy+3l&# zigQc1Rek4D68{AAFMijpx!>=9TihB=;v+?oc93G~(0HE-*+;sjHWW?)HAqe!E|1e_Yc1{#Eh z$Qxkn&Ns9I%_eF`YrpD*2qcY>v3LC3+Vz%!_dsYJu0$RduI8YOn4jn$;9lBofe)N3mRlb!hnga`!Zq} z+H~4g)*S;IX7y|R+;oE9ppCmWOheaHn)c&kD`63>1Y9izY!Kt}qFwaP;pt}FX`u*p zVN=c9IQCP{5GkVb2$Lis8Ierz2+eK!{hUDblBIWD#*NQG*kS)tzt+rRhPiJrSF^g` zyWn!1iMJH((0!kQvFI^}sX$@mLZ=qAyw0;*8;>61iRi=k-^eZVT9yyJ&TDDeci0`l z@^)QImz1h}WYFImY@pEC-MoQbls+;(eN%R30jLCuUNcF9H^Hvgn0I9w7vK+m$kp%N zUC8jereTpWxE@KS&-?&|#q6&#iiwl5-;T%ZF<-O03)UFcXDX_H;RpB^ef7Veob#Wg zPvr!oD|jU_ypkCek(mp3pFA4&I^=8 zpR~sLYrxxoguAj^NPhl4TOtoCPXf8~huN|~NXm#!)*dD3>~xl1XkhkSe?i9jkC_s4=P@jusEIu&tE7leSP$+Ex_vZ(!z%TUz&Evk-`T0!#J#1qcZvV$ zQVA!3I+?B??Od*)B_|ouX}I(vYZ#_Y8XIHTgyH^0|pB5+8w<>2p^0|ZZQ5kU&trR zJO!VBv)R_CLX3k^ws8+k3mz{OEG@n-HKd{EQPlMu0I?mqQy4(!CZt{BIbNw)Z3P71 z7@%@CY<5WKeJSdaqSJKa%B{?=atHF;#|EHQSO|`}+q+o+WK`1Ry1Qc8 z|JYirU^dn*vQPbSTPt6OXd^T9PJdPupAr-V9~Yi$TF_aBTfJw&mVEZYjrzIMb%mqS z#UtMaS$AyG{r9bUCmS?;r$?JnF;3VYS>+2E#sJAYaQ8T>9|OAGPAYft;5SjQYf>OTNNl7^Q_pPiL!20l4dY+ z-C24KrD2J*Bc6fTBI*{GpL(&=0yz#4@r{EFvYccVdBUet-`}c7(7Q~%-5C>}iC~>i zzSQBi-ayj^P@nlnEi(@LgZb1b7*%7{601Q~hy0F#s2~Uqs!9ABiJjU2}ZTHBjbp^~it`#p}x z55>UH`Q#WtS@r1d0Q$9G{!Cau?HA}%tE%mOV;>yqFT@om{X*nS#d$)FC;d+geL1{) z*IRMm#r6zXY?-e?e&;USxQpoo>Z}m}^+NU?V!IKb%{v6OBXiYr)i6sJgRbiPXIfWn zt8Eute1Uw?;QQjPUT^vaGfmY*C|)G ztb60fKxwE_`5le{@Ua49;)ck(JkSu4RlB3Z4l5%=g+TFc)vy(}z~X!RDz%!D?nwX) z@EL(5AoxH50b#6?Awzt3#NIMQi};-s4vgse3>we!+0Q)W1KeuZIb%0_((J=(>EyXX zFM*SncqGM=KW70YO!#FF^8tRZlT?Z0A6PnG{ks!zNt-9Z4AS3xHv1Ekx4A(sd?3d} z@Y(8T`4E52>51DcWdjUbrKS1p;+5V`28*;`LpcyYuep+w9r0z|PTFHwc{b?1eb+%r z|2BSnG!)>vWVYo;!lY|rBXN3UKRj2n*)C!X(74b7nI3>?uW+mPMoiKwoF5JURyjRK zj5=QZDyccnUQSrdEOYa?R&!)0@*EW4aJWWb!DjHO{}9=WvYE&hqi)6l{D2MD=`al~ zK`n!Ea%jx+FuQEMk#1Ro^*SCgtuG{VH|jleEk1}l`ShaR;d@UcmNSPXgg$8pbO>w+iVu`*3)?-rcFt6`6uVoP5kr*Ow)^a}EbPvdZmivM~9aO^0 z&NWT;5SeEeeFXSl?q9Z5R?hijHk&#G>u#rIaN7ruaOypBXuqM2EI z?2zN$XU=`$8pti1q1`-K%pJy6Bs%_#t6@Lv&*WLU4}hhGTT54f5A}Td`qF4sMVEeg z5Knb!-5=PkXp!r6dLmc_tDB)r0~c#0PS!)5h+;Q#Exiv+C>o{qO zWa-V9;YKPydisiLX)a*UB#A9jx0BH;JEoKJiO68_}R8GHgKwb2y z5Vn>Q{mpsiUtou#Je2k<%Viaa-(Rm84nOs0Skgzgg-feIt`QiqrS5ck#c^k(%WQ#MLg!~#aiFn zU|6vOjgpz3IW!b4jEKka#_pt8dSOGDi2XBdqs2YSb@0=|mLp3}fLJ54G&~Sm=DFCL z{=Vu2==d`3qSYoH+a-bNTZL=#3LQNkB?U&h0(=35D$_xBtyM0?IbltmB2H*(_Fm~g zkLHDOv{(}o+_|Z>0WbQkY?zGKoE(_DWp9+veGbyPOs>}DZ|P0&@?#IPq7R6Au6d*H zAaevDf;Rr8LRigF5Z|vCr$LK35GP1%d}n=CwVU(i9&uGMr7XY9U711?w?w}+fxrYm zO%+-e30W1Ff#Q~LoJ`rxQ~xo z=UWND4k1r3$7>Goo{C5vDfQX|{EWd?cz0*4e0ZUX6oAGTT@_?U6AT=<_IJQ`P9d$* ziUr8CxBa>=&Jp{CRI zZ+u{zD17;A%ZDx^fa`e9SJ8dt8GWmN{R&)iTmFVD01oAr&q_Y}FI4ROMxAL0`r`%o zzqAVfRg0}p+*a2Z@mlw+L6SPM3d0+9+VTC1pn+e%S?D55C?1TMoIl-gWdV#y*FwJ@ zD6!sP*joH6@c^PagDL(?d~Z_KyrFks5OL3|6H>hZY>n2eKU`sxJYul1_u;0if3yG< z7}P3dFI)eT;sr@SwVB$Jkbm@flYb)XK7Sv2SBe2b)QuK1`Ff>j_y=lVdndL`vI6kz5aaZe`^vM2#T6Ma@+Xt?b|FM zh)D8G`EO15|9e#&H8En<3T=+@F#T?@KMwSq~2&)3`e@qBS`Tr9zxm%=f4r&rG>8(k#}yH zo}PvgAxOV}#rH-(F+h4l=jt!OpDmKbpJat7kU>5-DQbOc^{J7hCN9X{xNTcrBs1wV zMhQOunis5FViNqrQWxgBN0{3YTQgwl$I zwx4-uzk%@Uh0PHoqobpY_&DJE2z*tx&i?-X1ny?7<4z|Mz*n{7KPpwit@H%v7MNn{^4O2B3ckBWJKXs*M73>N_H z+dgop5V~Z2n000Z0yh_|utzpAy0yai7A7%jMw_3W#qt6HF%BsDj)ePr0C02HfN=e2 zR#Cs!&hDjf?R?I|?eaOm9*SIaL2Tq@7^`J;lGs>-+0ouQtW(d~XqBCR-cZSvZ7d<~ zvSGN{DM|84Xw=!D_xffS<;X8~HL7(ip z2#Bk10vsE4k6N?-XythgpP1_w8cKS#I`5A1z7lH7hwtrx9EYjf!R73S=8nU#3`%!+ za(p=4XqHnplYg2*2AP#Q%Jtd+oV`3_?R6M61ROJ#4IiiAu(cK)Ia7naDM0omRFk$% z49}$AoPWyp$YB(q-Btd_a^lfaT+udwend($y40JnNs8Ukn`RF)#NM>s=jYA@v6WA& zHK(H=0VmLS_^K_8COpqsw`b<3k;L*kh%j{p#ybw^3`D!ke3}7#xtN!eOp(JA7(Ari zV(UNO4CG*iOy>`UnGoatlNRdvmmv^(iFFdV0|%!x9lGwdZO!*s=Bi}q#-)X)vTOo@ zq3_(LRr!31aZ#T-9|!`)i9G|#L2-g|?)IwJX@xN0`6B$dzvEVefXZ3sYB+__Os78x zzxHaY_d)*{lh;w63*g#BD(7+%#+1Ws)5ktPwUnc{E4ih_qpg3Bcn_D(;t3bON6@MI zWiB}m6T)BXO-v=kM-r#|9p|!C^B5gEZ{t*G=s2n+d68v9U9aQq zbGDSvrZ+TeJda!90Hz0{?ZaDGis^eV@~p?IX8@o0!mH-)aY>?Vf;&5|;f~~5%e9Iu z7tmwN?DFekGaGJ{{YzZ%P0`9^`@&}XtPPg_i9DK95W6Up1JPN;1oec9J#5ox(nD; ze%<^+j5a9gtH$3%+Iz{|S*Nar)=G3CEir2?V5tfwhlv=$8{qpPVpkSC%3UAd^89fr zoRahEtJ_Dk$qA;&wz{C(s!zcJGpat7_N{N^Sa8@v#Uw50)Jcv*=1bbINmPeN%2S`iiUUwj2Df?0rN9lj7%98Jq0%G9hM4+r z_Z#N@SKXLo=*y0D-B;&nQRsNT?@y`08t>LG1zkkMyND5soNniO6;-JS+<|>!F_S81 z(!c<4a6FSaKuhdnuB#e`&eg4YW09u8MW@6%b4ynqV&_SXwhJtxQKQYM)Y;LNY`7BR z@Q#63v7DST8HKi`g_Qu8(DR)FoX^TcrH!1XZ&T%@Ffw}XJ+*Hao^_^x*4=-E99Uum z`q>|HRPId#6@(>%;W!;&m7q-Qm&uamaCmPA_H?xv$AbBYDdReKk&ZKJLWVcJi}LuI z?S+nl%&f^qOo9CX?fxww8{HaV&B;i*$&U>jSo`+dV@5RG)Yoz=3cCBe!_{*S!tQ}}e3Esx9)nNr7K%{P!%W=kt~Tr?&t zpU{XQz|6?t(>ss*7z1j48%iP&SD3vBiTb>WGQ~kCiat!m)uXD1{eJRd+p5EK8YJu) z(UX#{>&^9!qL%lT^JncAW8GFvX@=6f182UqOqV&k#V$z^QR%pVUX#qFz2ymfe7CX~ z6pb>3S3wxN=6aFMPsf3w(?y|yE3vsIgW6Qt!Si%&eGi~8PHA`7`Y>Y-MDm#X$3#`y zoSQcL?3Rfdt+xkKeoakiW8wmF(Afj2Ml8QF8Vbq3mxuIg+qWSZ!^evHZ@;*w66DY5 znpTXu2)!FIjP1A$IpflPYRQ0Z?v1}(zP>&ku4kp;n5jGm0=fyGd%iI)PpVDkjy_<6 zfYZ{Xn|)hr;ltHJM^GDxJ_s$)L8vn-8)aV`rAt1hY$>hA^`a?E4Pn z?C0K!W#e^Pi@EJw{QwWxc{N(Znr5&vvX%<(8dF0^Me{*;%~8X_J@Ia_wYbxxRGW~} z985Q7lW=-mvmBz=)kBLqgJ{(2)MJ>Xv$7_o;IqP|n#E{9<|%Jc%9g04$^%4ZsdT9T z{OT;=gbKOk?HkON3XyvDu92I)?q!sR9TKM&bZG8!m0bReH-&M!L2HF+GLnm0cOO-L zX@k3zVW=m=Mom1!J<;->63@Uk{foUdOHmS8$+|5pHl^xB;&|)5&L!^4AZWN?fn?UA zNC@l8cLZ_^8&>^M#_T1h$gzIK4C=?SNomS`4zDs(sXP3oZWfNBF=_)jI?MX91OgcJ z-0F8-;jxPDOg6}jLpt5z!M==bIRCkcfz<6!#TDrT83|TZ;*xh1=^aB#Z{BMvno~IG z?Y}RFFkR6eXyFMvqU^{_nKa}JEJ^abc7<7c_eo_&?}Xm8roIdj>-KBLK-C|sw|K-a zeZN?XCVpFY6+pw?EJBFesYmu%+kWO#%*w7O)2gdB8x_hE4yL-%zfh1ePETc^nA*Sb>x`HSZHvhu@1IgTt zI6uotbEf9~(S{qcW6y_v-@GuS+t$4G;C}_!J$SYa7>w17<4=_88V*t3F!T1v9erV%9hj& z*+*3*Z5`&0rLKosNohww!d+=!lCodWB8oRJtYG1a1B!Q>_^{%3 zMUM}O{WsS%1(~MTKgAgrB|i(C^JEZlvUsXP1YR(zk76c$4p97;Q@+fqrUjNvX`q0! znLm15x7i?;VOQ1}n#ZV~KdOBV48-AGW1LSy^(wrk%yMSgdzcA_v@RO(@un>Og(jaN=Dj|z2bb()_AUUjERCli; zm=waSak4^R(^#Pw2@Tg#H{`}an8EB6SSXh#)T%TUD;{m(%2)L%cSHpU#U}gp^tts@ zi&{$e5xH-j?tSpFFngO;eAO%=vzT$gePGSqLAzs1V^v!(SwobY1y8kEQWaN>O@?PJ zQrOvm2S747O;f9xGb z6nUuS;yTG8=C&&q#H7VchB!SpjUB3Jb*n6-t!H{SadFR{f8sWhGwR}?En-kS=IK_^ zw*#V9D{G3GNiLl|$S^#ydKnTiWybR7t5ywxu~c8c?kc?s*f~FQ4tQ}q;BqjJyCFaR z<4T;xK;7r9CHJ;hi*li^a(S`R38|=Zly_`%y2loFB_kDofgr|p!SIN{Yr$wyF7Q^4 z*zQ}80UOT`)r@r6=G2d#_zZ1);3shnE7)N6x#4-_Y;GMQwiD6Dr~+XK%>F<99U)+@ zUJ-jWJvSED8GzwoY0WDhcXLN;uOQ+_9nzb0D^R{fdhevK4@CMq)8a$n8sGjR!T|){ zH*dgMnWdh9(9g0N5PHdh^AawfABbuR$Z_ z%$~q#2E-|CC$8d8VbIw~^zi%^TUD%>8x{}GlqjC@YEq-ucArKrk^GnoPFg3xcdvF#zyXIe*Dtp5stXrSW!QJ>(ntj<>OZ`%^X2JRni5+8Vf zevg#@tS|GNA^b;TTe}hezpmat@{e^-SWlsDa+-dq_)5O9t%ctiCu+M;@@4&E`|rf=c+nD{Ae1AXwj}oI;_{ zq*=hL@Oxum?z96Ph_U5>F;^vs)aO=X=R}^=LWh`tgey4V2F^s{b6R=?r-V>#JmTnB z7j*}wW8-hW1T(-+cb$m4Ftlv#8&PI+iUm6ixhXezEwTKE!~ggu4iAA=q!)JVs>2rB zyxGi^OP@t=I?1-Ye@$IO+x8W3-97a0X>KUxn$a;8IJEsKRPGh)b+SLCU#NVvv+{E| zt7O#G7zEnkl#xiF@VT6YK@BW&#y&?}2S!Lfi^1!BhTlmOPn-VghNj&~_h)##_Jclw z2erYPhC0wjhMm=#?L|poJ>Y`4d+9zP!YQx8}48wphnFJ!_Btbc;zokxD)^Lb)ure1Q`t>JhBLH@`g) zmc8^zP+ogB)yT1xx9O2rT32{y*E3-ED9{^d3Zog=Uaw4Pt7!4WPF5@zM`=3$desI< zq&cJe+HF{096leW2((8aj^>uZNl>sE8#ZtE6g*Qvp|$p6+od6AW) z2n-2=RDv41+Km$~a#7F2j|-dPTxKp5)FO!9>eyXfh{9d2|yjPESUcIIMT6Sv*{!E!nEo4Rj{uM zW@hCF4gndj&5zE?q}*xQtmBiYOTNp*>npAA9$Yg8r4)C2Nh9=Eb@SN$Y3XVB9LNC0 zbyKufA>Aq+l3tnXN|9YQS>|&ksz%xiB_;q6$8?c;^b&Ea1NC?4cYy?;Ly!67@THPHM*DrSKuOG9nVVw{ zJ#vD&m)>c6hK!lxLjyVtGeFrmJJ8CFq`zS(Q(-kxwS#RjF;S=+rfpV#naCohwvrJ| zt!YRm;_w_KdSM$^zyvRn^acW(Janl=OeZSL-t{6M5BdPcae&9qYb+OnVheiRf6r6 zCBi8D?&l7OIbuyyhn&?f{8sE{qV3z~Ya1Ib(!LS_AU4~k6C1+dH25_K$7WwgU+eR2 zb8FRDkmt5Z4{1O+H-jO3NbNFUyMbKc6T()+8kt>QK*P6KodwGspB5QI3{xCQh!8Hw zlR%-%n%j*!ru)ZEc1nzaK3hBns#uZ)1#~~M$ZJ>%&E*ufRg9GtV7%}4P-(P&O{ivH z?ni@v4k7>jx(j*lZIq2NyCO}J?u0od+fi;h=AGq+0#hmPG^usxOTFMFPF3dBb@veP zHH7 zRSL)vUcVkgduS4fuEJ3hd=_mhbsMVp-!i*ib~+Bhdc{ zBqC2;-gG~QtmW(cuC0z!i@>9QGRr2wbMV_sqzk-6fmUN4y8>GETeA|UL)w7R;vnMh zxn{h9ndUj+DbkAUY-itESc1~AP_SQC(bKQ+$nOPtTR`_!#UFrJIGeCtm{>5mk zvp5mmt1vCq03_7*X0=#25yu@^TAU8hMEphXFCVCGRJ3<(g)b1j_CJ+d1t6&CUKl)W zZ+B!siXEkoORSuVifG;1=1pU@HmAENy{Q#U&uIn)d~TKr`cg=%O*CBi?vYz^ZskUE zeN&HmuaYbFZM>8cW`3?Kk%A{$#dZDHuruQazZo@<80uOvrx;XI*m(P4Av3qY`^Vby=+c$1&T8olceF~`zh=02d3@Hn8FrMj zIiccw6?yhw7P1Ve6N&y=pYg`QK-%85z_{(kf&fTSr6q0qb#FM~vwysaKAF=AinPfdSNz?-O!lKL(D(TJTy#nNj1D(wnt?8_JB(IY770>GP z^Flg_c3fWfV=Waqbp(13bfzDJ$Xd3T0Qo^B$PRb%e?_fmiZ5~UdRB5j_=t)C$~F(k z^WIRFbDv{H zqe0TPvg~N7JXO1C(sl>Vi9M{`qxiWRHc`?ma}EUVC4C{2vx8ZL-gXKr=4Tr=(#<3) zXpMjfr&jEG2RoYL=K*#{Cu5;Vm4TfrVVV~&axr1rO?YQ$&9mMfJmpVro?9sMo0v$X zFKYDZ$lqrV={Vxgn?>MVSw*ZU8IJYO{-u4aS2vbCs!7T& zYIY-&aaBR$*iiZ+yrf22ge_qDEUqUYn5H{#QOTW}xTVZY7FpdHRu_;G_-_5k zK>;MJS2xXNdMq9^o}Tl~dm?D*N^7hdvId}UQQaZ!0?!FEbjR)NA!%AHx__Z#;Q@A# z3$Vw%XWZU8Nakh2r(=(L+EvUeMq!gD<@$keZni z$6=M#9|31{24C$Vgv1);$8?;A8aySvx`CAN=^+tj>mgDn(=y1_%V%eGQFsa8yOXg_ z9F=hel)B*Ho#2ivU}qin(P!%o%Zu ztXA6pGIee6$_3!4-ZOr%=_<D&iuF6kLW572!B@fyD2mo8g|B4Yk}vu1~}u5+$7p_%?n5;-DkYgKgHGGY#U#EQ(w{fWZ}gEKwRzA;7&D zR|I(iq=(%Or4UQH+cDdpsgo!@&FDIpAdiU0)x%^la%XB_7A~>4nrR)S8@RT98I?+z zbnQ(GZmBkxWw{0g_Vi@x8z}^xIOuZRCaZ}Bs-#bd=Knk__COw{B?y5xEq|$UomogY zon$&?KQ#I2{E{}#{yFA+sq2w#$%h9DA*y{gH7H-#y;};2)Hz#VSRk1SNY~KJ=G&?M z7lrCkU<~eL;jGoarWh_Vu>z^0d8==LZn}!6a4=$1rK>)0`isPi{cIVH1m0L5bHxa0 zjkqjNbGIRd#?6VVDValKGsriJOhFETUKdml<%S|@a8HvT|#ahf_#Cc2}!YK zYhY(6%)N|>%he%1kb6w8mIC~lq=!EGpa;^z;Hj$BGMu)Ujym(ULkp^4L`{85qS|u} zOP`tAE)J~?}iO%WEIp8UtUkp6>3mH!Tf3&vR!XpG1_bLkaO zejsGF)Dv&sl+#l}fvmQOglzR%V|EhIYc%>`MsUL3EZFD;)@az&g#vzoKYp-E;2cD4 z00v1q=w!g}oBVHWZx0jH6>`6Y;d?Vb;wAiRW3&Q&JF`Pl_VSO75e2+}_%Emu{|bjQ zzyxPvbs8%2*Jwxz?*4yY{=cQcAd*MJn0d>S!|6XR)L#S-E%=P}_YAc}a8TZOr^UaW zkM%D(9)jUU>g^p>`=$7_zrx)N9Bz?@&~@NI)}Fch`!gAN;MtB=8{#8_7?~SUwRL_8 z93-l|2r!7^&miOqtWIk5z>yO#&LGAS`VS$}2*wC~B&=@oA{I1H*MXC=_CxI!L`DIR zD^Ak**li|8e2C;B!9x<#-%kPF+JW=nJd9clwD$KlQpgbl{JVG~;Ku*oZi=}J!KX{P z$q@c7nlgonxp|AbPFzx~9P#B@8bfjR$gf`akrar|v#}RRNWWhJHeT`L6;1(U?LGFd z>r(jMr$@6AQe$IBGeUp!)D#q3Ra4>9TV?=x;8RI?$P1#uRxBZ58}tg};P?bS*nQ*z z;x%m`q1*sa=n7RAXK?&OD_~E9zas4_l`oug&X0KA1x$k4Pj*1&_~6(mET%2xw_wL; zv~9j-*uNE|?v7n;esrk@s3&9l4q>cY>mlL?X*Q=eVw28G*k2tdSBtH`Bx@4{v7$g;T(~hf!N=Zs zA5>k)pecA+(RKwK^dzM>@T@;eGrikx$etnm$pJv}tvb(t8eJ=!A};_|FPfuU#;xc1 zKxA?gz|zPZor*{pYb|}LJGXP%=ic4;V)3Xji*rBuV}AL@ygn6=G}f*RcpP(XIxpol zz1c{RsszVr2wtN+47<4uQt4(uv>4vk3wM9owQ&1GGDH$rW?3Q8o41INFXvy zvUSw*O%1+Im;7r*Ui?c%#O%;JCIu_PeaFU}?skjn}4V-@mz|j{;53@oz9S}a&$}QNn z1~%mW7S@3?t`+3`i||wa_BH|@?7w`!d4>GJ)u*sj;6I$Wl_D2qe5&p_26W_aA6}Z5 z7X6W0zd!ClO(Z;RPkY9d_gTp|O(<&-cpDjkw-Iy(WAQGV2rYToG8-#iKApnjfj}Q; z6RnH1pF=ii*V$+FXmYu7O25H0v40n+;r4hn%_*F=VR~aS+VjAwB&#tE&eCeI+y@6p ziPH%+$P4R9dy4$>rD%nf4t{;O&t8wRDo=L-K-!W-UMO$IzAv-Ky^Iq_0F{xZuIpmdQ{&}T0Ow2z*T9*5jKGMu z-3p`%YyJTmIYcRZw8`G_s+YAV(7?5Z$*C7Cx%A$O5!Z2fY|9HQolk}();-w#+aa+t zXuv(aCm<_Hd;kp1mi%Ki@EIJxmMu$u_QRfN!9n04s)Qr6gc!Z`u^f(9u%ZhmY<^7S zG{|OAT;=$2+#Zm^v@4L%T}6->;h@KG_tFT(?>!K!x4#=gPVo#W|I?HQ86u8J^qtsnHZ z^<-V4o(&NgqRbGPQ0MLxLoscBr;-f^_g$XBid zfvLDCz2gOq84%6N$E0#{sU2mQ^g)Z-+)HnXiE&z_dar{Mpy%!hnyXHKd z0_T=AJdD2CHKRam%Yjggo;3&-Zk)MYwP@m8p&greqhiAbsI(WjW3d(mZA+wPyw>5v zlct%xUDnfn6N#HG`vYME>=MbeI82z&{R-cU@9K(TlJXMsIn*hi!?E%rRv+4uSx)my zHGAyl!c1)2PlfZswp@Rz1bQ`W!spMNlQ^=0PXmeqt9R)cA(~VZwtL?mf0q6Bs8Zly zYJx3~1rhIfW&=JKE@r=6{Jz*?d9Lv2TlCD!&ll(;*{&y&c~3OoBO3XPt1I>dLueAA z6ISRt6n?9~*QC?BWLgdVL13Q-qt7^SbNsU3Ei3O| z-Ek2Rzq(_ZJ)l8Xvv8iBDMWN5Ae+P?xAdk5pb;~fU z-iNo?^Y1bZy`knT-&ksvtW0>Va6ifPq3S12iHwKaxz+1q6G&!oE)B|i1|z^pk<68s zT6z;~1JU@h0=E(jnm(m}ruY!9FE8FgTcU#@3G&cd-0mavHrcvLd_|5$_KOJ{dUqTc zB|rUc=BUd%H)#;#mvG;qjDfT-eqfT=pbA?oloE3Twe5S9Ub=z!1TDAzt<6@xHsBL~ zObSIlS2IfbWkEc370_1YZK1FZ2T{@jiyQgoK8c7*Xa zF)9jTeU%`uTS|fY@Ff=(yJV?nMYEYj$@H2v{uZ3%22y>FvSF zD3ikD*V6N*U!yiefW{4Hd$Q@iQ8&XEjm1k&cpD5G+DwFAP=9OVZKD79dgppm$H2mK zH8a=CXv3QB;ybT7H&*A&rrMg!cm%uShX({|h-x|M%Ft zQii$FUcjkI4s{*iU_Q(}MPnI0*$&CwK!)}YupCb$W?}JimDmL0H!xBPQ})^4 za;NG_JBs|0Z;rle1gW6E%JC*0KT&s>i78UnV1FbyzaQhWeHXL$fjJ0@N=P=T{vYjK zdpOf;9RHam=@i`*vM612<*B8MtqEI*T*6~aV$x`p(&FdRq>@w?IW0Ovu2WMEYRO_E z=gBEzGp1IDirrdH&9SsP@47zczn=5wdCtGT=Y8Mbd-=Za^ZkC_&-e2>T0xFuHfNyD za0m7Qe|%+0KuD}>zW$Ux%t*@&nth>Z9=k~Nv~_$`h?6<^M{ij9i19W)iGNPM?}eL` z?NCnLJ{=NYxD=-s%05vpxV#vReU}Vwt7)ml@KE^WA%m8V*$cE~oC8a5nycMA)_O1C zNOZ19bYeR(#)L!YG@m?08hxC5LJf4Rh|zJtq_ywF)ze%R<{nq+HS`p^%4 zN4mqX^X(HBN(Yw`Y!gdUJO<^Alo6i*<#q<6#|YN&#>`A|lji(&%lz>`{J~bboOQr5 zt1YZ_jMKsvfDp0C+4bqsMZg=sl!u4TCmtwB-xH565{`+ROG3+84dpEFT0{472B|>D zu?{Vs)wi^UMef-;4?R`fRn9h`Ub(6slx2vb8y~B&_kFHhbIx6{S40Ss=Zf%U#ektG z$)ru9Z~!`b4n>gw**jEH_bCKUK0~LFb(_BJ?r`+-I_;LbZyr^+E{v-W@S8b(8erpB zDOX&8qf#fn_rK_!6`0@`1a!$Hm3#L4Bu{!)LvE;h9K?N>O^mR8tP1AUjBZO_FGU^sW9O3*z1P&J19csPWLJNb}t^vNpXL6n{}rQ zS&MZE5ALSqRd&UhBMODQP?E+362{8+`vZkIYqPCLnE!eC)37uy&`cLW^g z47h%cek}HcgFz`}6XdRFn0|V+U#@}RjYYIgHWv|{YM6PNg)WSmIb5`QB)xffy&jx< zMMAHbxLitQh-+9S(|-2s69s18)?HopM-+g_LQ%Pos;vjxi{n{(CGM?l3f_rbs}9i& z&v@aGf#JRI+E%8}alg9DjSsn{MR0{V z(XHQNkl#6z{<2xvDKq;hizKL~dh5#o4_wn4&OelrjXGkV&DFZMk;kiUzxs6mw_pzC zjc?`hT!rnbt$J(L(GM~l)mM)!1}?wdLOTp@&-D!BP4BOhFbZ&G{B$ZOW(lcVPly#^ zsKxT7DGT`~mYMw(XqB7N8VZpNa*e?7ysBGWj3eyX18dq1adRVy z_P&%_ryCv_)9{e_+@|$gSa45c&UXuHVcJKCh1b=}e$kyq+_iCG2;3DK*M)}Ml&!Jn ziTbYve%t!qOCvoWnbUVC(8-9|Xf z4&F|mYdeI?PN@&)83f;k)&xp;iHFB&&b(~2RPEM-beWISbQ!%LAVEIGoa5;u5r9g{ z3-T?t1TrJp53ZSRE~`$5cJF`v(k20z^I80NbFLbKN*;t}8(=sOc3}%_>AOa~VxFG? zLz?$}NG^bM$oo@=%Vfi7;_^tyto}UA_YlKVV$ciW}$e3;VwBVmHh6)@V?l}?c7Xl>BwyTWC}X$`o(Gc_7AF#oz#0j zP4J=u^s{cHCa?{FM43z-vk^))0^d;0Iv8sHH;efPcy+^~xX3nH^9k_6#Uu9B*$auQ zBayfVhTnwgQNZd(lkjK1kSWnXpH6W4n?Ak*0IcMWsONLOWNxnprGKn){e}7n@L)ic l?u`J@)qmg64^&S5Xx!7-`wFv>NCLlv++4j}sy2rm{Tl;lE1&=X literal 0 HcmV?d00001 diff --git a/test/fixtures/label/positionHorizontal.js b/test/fixtures/label/positionHorizontal.js new file mode 100644 index 000000000..cd1b0b207 --- /dev/null +++ b/test/fixtures/label/positionHorizontal.js @@ -0,0 +1,140 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'line', + data: { + datasets: [ + { + borderWidth: 1, + borderColor: 'red', + data: [7, 7, 7, 7, 7, 7, 7] + }, + { + borderWidth: 1, + borderColor: 'red', + data: [16, 16, 16, 16, 16, 16, 16] + } + ] + }, + options: { + indexAxis: 'y', + scales: { + y: { + display: false, + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + x: { + display: false, + min: 0, + max: 24 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + start: { + type: 'label', + yValue: 0.5, + xValue: 7, + content: 'position: {x: start}', + position: { + x: 'start' + } + }, + center: { + type: 'label', + yValue: 2, + xValue: 7, + content: 'position: {x: center}', + }, + end: { + type: 'label', + yValue: 3.5, + xValue: 7, + content: 'position: {x: end}', + position: { + x: 'end' + } + }, + invalid: { + type: 'label', + yValue: 5, + xValue: 7, + content: 'position: {x: invalid}', + position: { + x: 'invalid' + } + }, + perc0: { + type: 'label', + yValue: 0.5, + xValue: 16, + content: 'position: {x: 0%}', + position: { + x: '0%' + } + }, + perc25: { + type: 'label', + yValue: 1.5, + xValue: 16, + content: 'position: {x: 25%}', + position: { + x: '25%' + } + }, + perc50: { + type: 'label', + yValue: 2.5, + xValue: 16, + content: 'position: {x: 50%}', + position: { + x: '50%' + }, + }, + perc75: { + type: 'label', + yValue: 3.5, + xValue: 16, + content: 'position: {x: 75%}', + position: { + x: '75%' + }, + }, + perc100: { + type: 'label', + yValue: 4.5, + xValue: 16, + content: 'position: {x: 100%}', + position: { + x: '100%' + }, + }, + percMoreThan100: { + type: 'label', + yValue: 5.5, + xValue: 16, + content: 'position: {x: > 100%}', + position: { + x: '850%' + }, + }, + percLessThan100: { + type: 'label', + yValue: 5, + xValue: 16, + content: 'position: {x: < 0%}', + position: { + x: '-850%' + }, + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/label/positionHorizontal.png b/test/fixtures/label/positionHorizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..ece45e43b997819bfd8c1ebbbe5d64c281564f7e GIT binary patch literal 31624 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%0A(w3H<6JtngB5l= zI}EbmU&^ebp?p@mA;$h1PoPhpGZs~)BhG#mA-N}+M`(3C<-VW)*7qm=~b!DNWkXWWz2S?CFlUs`^+o#RgGXBq}&4KBl6LLcT57&+mLuHzXcE7LAZ0I zTud7>54K|Pgxp&trbyYdhOfKejZZyYPkBu;Sp}fwF4;iQb0U&OR)SQCO`4t9`7qo2 zr2O`hO_gi!`-_@>k%^iiE04Mhu!IJJJ!`ZC{Q*;l=v%dcVTnaV{D;sYS}pMVzwVBe z=O~ISva0FZ3woW+yXa17-@Y(UEXsg{p*7>eHYg9sgjYgj_N_|UXhxR*|(f=z&= zM)MoZdnvN5{{~@A#@VF5_pXIN42yHVb*atie&w+;n{tOH*182HI^@*_(MQ-gCG)l# zx|1v==CjXZb07dJ zuc&*{?R3DZO#hTV`-1FmePuT4+kZyHepkYtSvoZB_4&Lyr9pi$XbG;flV|BZ>{Eq| zNs-&)oxB!Rhi)d;WuuFNuXlrfImG8`M5)jfhq-LFtxT6O9xN#o1SRpa_p+`;2gfT7 zw6NiJjI+jSgKyZZWd=EUeJ2PswE|DzO3k5kp|y}u8)%gnaYz48!}5`OT2U^BDTx*c zs<9u*6-Do=D-d<1l{u+DCvQ)H6PH2aPS4qFJQDRoF{}HRY}BA%h+6gFsqfsk7FWqU zdEBrcE#KM}GNkhK3Za}weapUl3}B7$KK7Cx;#`&N`;{STVnU1>7oM!onY_>HK5 zUqET%3HdGT79YN6-Dy*&Z--8-fHDK zuXwS@yf;Xl+2s@fba_h{kLV*cDYxMu`jwFNC@zA?ge6E5nWN9}VXY7uzWwP^j*$c| z7!EB?kAKw&%NO~yZTf`<0XtSW*8hQu2o(~BxcDK36;UlK;<|+CImPS@KkR+yqYrg@ zh@yUiRb@C_xngSfz$g|ii}0Ua`r);eOD+qnNXW0l-=RAC?=Qv^512a*2*3l((XcjD zg(r3|Y;(WG6SHfhl-%ivGLEHdm@)b7kY*{& zn8=cS!euO9=YrA#y!FFW>j`o6w})LiBPjrHVzJ6L&_gym>$1z?zqY{iC#hij4P@Mg zx5_AaeWZuq{+}WLpPpqO{4CAbD6*SEy|Bu?uj$brS}kHBvW{?(sN;10Mjx<02CE~9 zUP75&6EFIZN+J;nRi)c`$x!w~rA&->6XM3d@taM@Fze7`U5IXTgokW|X;#W30ZM@e zCCiP{`&5EYP=mq>3n7)b_URgj%o^h1C|_30B2!O)VOmk9K(VYsRA$J`iv6~`KoXS? z$XK`8dR(NJN54{fVhH2zgb1G;Z}&6B&yA^|Ww>bHm#ip2=?%r+enst0jkUw|Je8Fx zqwN`CIXQh79fbwqJENVEwVf^>av9lEqFT_!(Tg~-aI;`j;qfcO7nM5WFfs=eIqdi_ zV?TzI{&=3WcH#d8k-eUX literal 0 HcmV?d00001 diff --git a/test/fixtures/label/positionVertical.js b/test/fixtures/label/positionVertical.js new file mode 100644 index 000000000..0605772aa --- /dev/null +++ b/test/fixtures/label/positionVertical.js @@ -0,0 +1,142 @@ +module.exports = { + tolerance: 0.0060, + config: { + type: 'line', + data: { + datasets: [ + { + borderWidth: 1, + borderColor: 'red', + data: [8, 8, 8, 8, 8, 8, 8] + }, + { + borderWidth: 1, + borderColor: 'red', + data: [16, 16, 16, 16, 16, 16, 16] + }, + ] + }, + options: { + scales: { + x: { + display: false, + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: false, + min: 0, + max: 24 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + center: { + type: 'label', + xValue: 0.5, + yValue: 8, + content: ['position', '{y: center}'], + position: { + y: 'center' + } + }, + start: { + type: 'label', + xValue: 2, + yValue: 8, + content: ['position', '{y: start}'], + position: { + y: 'start' + } + }, + end: { + type: 'label', + xValue: 3.5, + yValue: 8, + content: ['position', '{y: end}'], + position: { + y: 'end' + } + }, + invalid: { + type: 'label', + xValue: 5, + yValue: 8, + content: ['position', '{y: invalid}'], + position: { + y: 'invalid' + } + }, + perc0: { + type: 'label', + xValue: 0.3, + yValue: 16, + content: ['position', '{y: 0%}'], + position: { + y: '0%' + } + }, + perc25: { + type: 'label', + xValue: 1.3, + yValue: 16, + content: ['position', '{y: 25%}'], + position: { + y: '25%' + } + }, + perc50: { + type: 'label', + xValue: 2.3, + yValue: 16, + content: ['position', '{y: 50%}'], + position: { + y: '50%' + }, + }, + perc75: { + type: 'label', + xValue: 3.3, + yValue: 16, + content: ['position', '{y: 75%}'], + position: { + y: '75%' + }, + }, + perc100: { + type: 'label', + xValue: 4.3, + yValue: 16, + content: ['position', '{y: 100%}'], + position: { + y: '100%' + }, + }, + percMoreThan100: { + type: 'label', + xValue: 5.5, + yValue: 16, + content: ['position', '{y: > 100%}'], + position: { + y: '850%' + }, + }, + percLessThan100: { + type: 'label', + xValue: 5, + yValue: 16, + content: ['position', '{y: < 0%}'], + position: { + y: '-850%' + }, + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/label/positionVertical.png b/test/fixtures/label/positionVertical.png new file mode 100644 index 0000000000000000000000000000000000000000..a058715d2ca0a4c0f7fb03153b14ac33eedbc75e GIT binary patch literal 27306 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 D<7iWQ literal 0 HcmV?d00001 diff --git a/test/fixtures/label/scriptableOptions.js b/test/fixtures/label/scriptableOptions.js new file mode 100644 index 000000000..713106475 --- /dev/null +++ b/test/fixtures/label/scriptableOptions.js @@ -0,0 +1,57 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'bar', + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: false, + min: 0, + max: 25 + } + }, + plugins: { + annotation: { + annotations: { + text1: { + type: 'label', + xValue: 'January', + yValue: 20, + backgroundColor: () => 'transparent', + borderWidth: () => 0, + content: (ctx, opts) => 'xValue: ' + opts.xValue + ', position: ' + JSON.stringify(opts.position), + position() { + return {x: 'start'}; + } + }, + text2: { + type: 'label', + xValue: 'April', + yValue: 10, + backgroundColor: () => 'transparent', + borderWidth: () => 0, + content: (ctx, opts) => 'xValue: ' + opts.xValue + ', position: ' + JSON.stringify(opts.position), + }, + text3: { + type: 'label', + xValue: 'May', + yValue: 15, + backgroundColor: () => 'transparent', + borderWidth: () => 0, + content: (ctx, opts) => 'xValue: ' + opts.xValue + ', position: ' + JSON.stringify(opts.position), + position() { + return {x: 'end'}; + } + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/label/scriptableOptions.png b/test/fixtures/label/scriptableOptions.png new file mode 100644 index 0000000000000000000000000000000000000000..4ae2b8c26a7f3cbc8bccb685788a19b0cd9f998a GIT binary patch literal 23871 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 E1@Ycbd;kCd literal 0 HcmV?d00001 diff --git a/test/fixtures/label/shadowColors.js b/test/fixtures/label/shadowColors.js new file mode 100644 index 000000000..795f076aa --- /dev/null +++ b/test/fixtures/label/shadowColors.js @@ -0,0 +1,98 @@ +module.exports = { + threshold: 0.2, + tolerance: 0.0071, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + ticks: { + display: false + }, + min: -10, + max: 10 + }, + y: { + display: true, + ticks: { + display: false + }, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + label1: { + type: 'label', + xMin: 1, + yMin: 1, + xMax: 8, + yMax: 8, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + backgroundShadowColor: 'black', + borderShadowColor: 'orange', + shadowBlur: 3, + shadowOffsetX: 10, + content: ['This is my text', 'offset x: 10'], + padding: { + x: 10, + y: 10 + }, + position: { + y: 'end' + } + }, + label2: { + type: 'label', + xMin: -8, + yMin: -8, + xMax: 1, + yMax: 1, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + backgroundShadowColor: 'black', + borderShadowColor: 'orange', + shadowBlur: 3, + shadowOffsetY: 10, + content: ['This is my text', 'offset y: 10'], + padding: { + x: 10, + y: 10 + }, + position: { + y: 'end' + }, + }, + label3: { + type: 'label', + xMin: -8, + yMin: 8, + xMax: -1, + yMax: 1, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + backgroundShadowColor: 'black', + borderShadowColor: 'orange', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10, + content: ['This is my text', 'offset x: 10, y: 10'], + padding: { + x: 10, + y: 10 + }, + } + } + } + } + } + } +}; diff --git a/test/fixtures/label/shadowColors.png b/test/fixtures/label/shadowColors.png new file mode 100644 index 0000000000000000000000000000000000000000..a5ec10e6af1d1bd696b00fe086597f6bf9a3d521 GIT binary patch literal 24412 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 Iv4QV@11`6&W&i*H literal 0 HcmV?d00001 diff --git a/test/fixtures/line/arrowHeads.js b/test/fixtures/line/arrowHeads.js new file mode 100644 index 000000000..3788e13f8 --- /dev/null +++ b/test/fixtures/line/arrowHeads.js @@ -0,0 +1,218 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: 0, + max: 100 + }, + y: { + display: true, + min: 0, + max: 100 + } + }, + plugins: { + annotation: { + annotations: { + arrow: { + type: 'line', + scaleID: 'y', + value: 0, + endValue: 80, + borderWidth: 5, + label: { + rotation: 'auto', + backgroundColor: 'red', + content: 'start: true, end: true', + enabled: true + }, + arrowHeads: { + start: { + enabled: true, + length: 30, + width: 15 + }, + end: { + enabled: true, + length: 30, + width: 15 + } + } + }, + arrow1: { + type: 'line', + xMin: 90, + yMin: 10, + xMax: 80, + yMax: 50, + borderWidth: 5, + label: { + rotation: 'auto', + backgroundColor: 'red', + content: 'start: true', + enabled: true + }, + arrowHeads: { + start: { + enabled: true, + length: 30, + width: 15 + }, + } + }, + arrow2: { + type: 'line', + xMin: 30, + yMin: 80, + xMax: 60, + yMax: 85, + borderWidth: 5, + label: { + rotation: 'auto', + backgroundColor: 'red', + content: 'end: true', + enabled: true + }, + arrowHeads: { + end: { + enabled: true, + length: 30, + width: 15 + }, + }, + }, + arrow3: { + type: 'line', + xMin: 65, + yMin: 70, + xMax: 70, + yMax: 100, + borderWidth: 5, + label: { + rotation: 'auto', + backgroundColor: 'red', + content: 'start: dash', + enabled: true + }, + arrowHeads: { + start: { + enabled: true, + borderDash: [3, 6], + borderDashOffset: 0, + length: 30, + width: 15 + }, + }, + }, + arrow4: { + type: 'line', + xMin: 10, + yMin: 60, + xMax: 30, + yMax: 70, + borderWidth: 5, + label: { + position: '0%', + rotation: 'auto', + backgroundColor: 'red', + content: 'end: width 30', + enabled: true + }, + arrowHeads: { + end: { + enabled: true, + length: 40, + width: 30 + }, + }, + }, + arrow5: { + type: 'line', + xMin: 10, + yMin: 30, + xMax: 40, + yMax: 50, + borderWidth: 0, + label: { + rotation: 'auto', + backgroundColor: 'red', + content: 'borderWidth 0', + enabled: true + }, + arrowHeads: { + start: { + enabled: true, + length: 15, + width: 5 + }, + end: { + enabled: true, + length: 15, + width: 5 + } + } + }, + arrow6: { + type: 'line', + xMin: 30, + yMin: 8, + xMax: 70, + yMax: 8, + borderWidth: 1, + label: { + rotation: 'auto', + backgroundColor: 'red', + content: 'horizontal', + enabled: true + }, + arrowHeads: { + start: { + enabled: true, + length: 15, + width: 5 + }, + end: { + enabled: true, + length: 15, + width: 5 + } + } + }, + arrow7: { + type: 'line', + xMin: 10, + yMin: 70, + xMax: 10, + yMax: 98, + borderWidth: 1, + label: { + rotation: 'auto', + backgroundColor: 'red', + content: 'vertical', + enabled: true + }, + arrowHeads: { + start: { + enabled: true, + length: 15, + width: 5 + }, + end: { + enabled: true, + length: 15, + width: 5 + } + } + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/line/arrowHeads.png b/test/fixtures/line/arrowHeads.png new file mode 100644 index 0000000000000000000000000000000000000000..733ef62e0f4a30630edcb2bf607f9378531c6180 GIT binary patch literal 66893 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 Rz(hbtxB}&Huq+3F|8)>9F1wl|!q#NmO&bRS- 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%0Aq^)dv=Zb(FIKI3=T9v|2a1AY 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 Sk^qOmKQ$$-yCt_RUi^RZkg>`D literal 0 HcmV?d00001 diff --git a/test/fixtures/line/arrowHeadsFillScriptableOptions.js b/test/fixtures/line/arrowHeadsFillScriptableOptions.js new file mode 100644 index 000000000..8e38b088c --- /dev/null +++ b/test/fixtures/line/arrowHeadsFillScriptableOptions.js @@ -0,0 +1,107 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: 0, + max: 100 + }, + y: { + display: true, + min: 0, + max: 100 + } + }, + plugins: { + annotation: { + annotations: { + arrow: { + type: 'line', + scaleID: 'y', + value: 0, + endValue: 80, + borderWidth: 5, + label: { + rotation: 'auto', + backgroundColor: 'red', + content: 'start: true, end: true', + enabled: true + }, + arrowHeads: { + start: { + enabled: () => true, + fill: () => true, + length: () => 30, + width: () => 15 + }, + end: { + enabled: () => true, + fill: () => true, + length: () => 30, + width: () => 15 + } + } + }, + arrow1: { + type: 'line', + xMin: 90, + yMin: 10, + xMax: 80, + yMax: 50, + borderWidth: 5, + label: { + rotation: 'auto', + backgroundColor: 'red', + content: 'start: true', + enabled: true + }, + arrowHeads: { + start() { + return { + enabled: true, + fill: true, + backgroundColor: 'orange', + length: 30, + width: 15 + }; + }, + } + }, + arrow2: { + type: 'line', + xMin: 30, + yMin: 80, + xMax: 60, + yMax: 85, + borderWidth: 5, + label: { + position: '0%', + rotation: 'auto', + backgroundColor: 'red', + content: 'end: true', + enabled: true + }, + arrowHeads: { + end() { + return { + enabled: true, + fill: true, + backgroundColor: 'orange', + borderColor: 'orange', + length: 30, + width: 15 + }; + }, + }, + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/line/arrowHeadsFillScriptableOptions.png b/test/fixtures/line/arrowHeadsFillScriptableOptions.png new file mode 100644 index 0000000000000000000000000000000000000000..9a777fffd8c172628dbf888086af3a95a468814c GIT binary patch literal 47779 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 Yn~1z1yKm2v5%_mrO@~ literal 0 HcmV?d00001 diff --git a/test/fixtures/line/borderWidth0.js b/test/fixtures/line/borderWidth0.js new file mode 100644 index 000000000..33b8a0dbd --- /dev/null +++ b/test/fixtures/line/borderWidth0.js @@ -0,0 +1,35 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: 0, + max: 100 + }, + y: { + display: true, + min: 0, + max: 100 + } + }, + plugins: { + annotation: { + annotations: { + line: { + type: 'line', + scaleID: 'y', + value: 0, + endValue: 80, + borderWidth: 0 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/line/borderWidth0.png b/test/fixtures/line/borderWidth0.png new file mode 100644 index 0000000000000000000000000000000000000000..aacfac77205248d558e04b4eeecc225453e55c7f GIT binary patch literal 24664 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 literal 21746 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 Uol<29uOj%!B4WcE_Z_|R521EdQUCw| diff --git a/test/fixtures/line/label-dynamic-hide.js b/test/fixtures/line/label-dynamic-hide.js new file mode 100644 index 000000000..3e45a98fc --- /dev/null +++ b/test/fixtures/line/label-dynamic-hide.js @@ -0,0 +1,60 @@ +module.exports = { + description: 'https://github.com/chartjs/chartjs-plugin-annotation/issues/589', + config: { + type: 'scatter', + options: { + scales: { + x: { + display: false, + min: 0, + max: 100 + }, + y: { + display: false, + min: 0, + max: 100 + } + }, + plugins: { + annotation: { + annotations: { + line: { + type: 'line', + scaleID: 'y', + value: 0, + endValue: 80, + borderColor: 'black', + borderWidth: 5, + label: { + rotation: 'auto', + backgroundColor: 'red', + borderColor: 'black', + borderRadius: 10, + borderWidth: 3, + borderDash: [6, 6], + content: 'dynamic label', + enabled: false + }, + enter({chart, element}) { + element.options.label.enabled = true; + chart.draw(); + }, + leave({chart, element}) { + element.options.label.enabled = false; + chart.draw(); + } + }, + } + } + } + } + }, + options: { + spriteText: true, + async run(chart) { + const el = window.getAnnotationElements(chart)[0]; + await window.triggerMouseEvent(chart, 'mousemove', el.getCenterPoint()); + await window.triggerMouseEvent(chart, 'mousemove', {x: 1, y: 1}); + } + } +}; diff --git a/test/fixtures/line/label-dynamic-hide.png b/test/fixtures/line/label-dynamic-hide.png new file mode 100644 index 0000000000000000000000000000000000000000..9a0b8207c800e04650b9aa4dd1a05dc4f181a960 GIT binary patch literal 12782 zcmeHt`#;p_`~Pdk5TQs#bZ{87B~(Ny6k#gtCh6cX)mEagI#7(6>9{3YV~d>IL?o2T zq0CI%R;z?al$fcchHAtx3^Vh&?$=2BeLTK@!ne1-Ky9#%Yw)*CKWlCCON_b9tE?pZ8>?uDKBRd%KWw+dKDuGB+)iSis z;LkKVU^0%227*kQ{Fn<1{$+hBO|E@>cpeUxdECX6jeLAAd3@r@tv45du?B{l+%J0iMLxX zM);@alEdp4w@4=MyZE(*lI78NE=XRjLOmP*zydcilX%X2crGPs)VuiO4gh883%(5cex`c_2@)f*R+${zc~3yedRn> zY*}cxK4Tz2Z3Lx zAlALC&fDbbcHxso%%9S!j28_4U&MBPOF~?Gubr=)i_JuVyVf!U2~6#e>Y=8j#K(b zfGl&t>1xht(TW3PeTK`2d*|?nGlO!n2S*C%TXTg`lrZVCMsb5tFgEFYzaw5vBK(p_zO|h3QqCB(n z*?eQ#-RC8fN0x@{!4jVcsQ5E#I5Th9wz)(Q=X2XHSJ<(8q+Q(>JN4x79K530`{yi` zJ?rO97qtDHoj-_7R{gKZX1(iKb}Z59I8Mn(61&7qK+i6+!OSloq~bRB8ZeVxC9^|{ z2=*K5MidoQMx4BFN#DRmPQfz!#wfYb=-~PPtoYfy;pgla%Iwy@zOTJb@CzKH(Qm&0 z{e|hDqDG~b$V=YoZSoEdDOZI*rMr%Tyb!7j$G)3V)kZH&>uTA+$r}mCwZU|^MXg8X zY`VeSY(krS@Wp>zbBd$SFE-0ujM$8g`TIc2`zhF--9<@d4$xq zGkTMeYb{n&rzf#bZQnC~!g{_rOvgEUj ziRufw#iR7KjqbyBRW?{z;Ot{2C>Lj_9WV)U8V-*aNv&(XklVjGjlj!sr#1dSFI!r` z%jI@As(oDcg3Q0%2<>{gEkP7F2WQqkPXHT5xKxh?j!+?M$Jx`|(IJxe@ zPHx(j4A{$UAda|74j~-U^wDQ*yYSi-Tx6Zg-A~bPbC@P*Ym)@>-l$ZxdhlHQe3c@u zW{B}`WhhtOFENl-y$wex|0~Pt)LmN6T{yQT5)$)IL zE8yq4ZKL>S+K*(|uk}ehN;@7t=YxZ9b&32rc^~mb3CRYtoPfuAAu2<&Rsdu@Y#KkU zh@Y4pP4Yk}Lp}pLSZ$OvLCGCN(Df1Wl#-b=W19RzXS%6p_mmyYnE$HwrMMkhOn25B z&qgz9A$!dt|6HNbAGC8nPG|qbdw+H&km+gmf(D2v%cK8!q-xXfQ7MW2I3K`|_d*+A z&7L?GU4@br^fDP|MV;W$vNI~wqJbq_6=|65!OKrR@R+mA*;y$9ODji|om)ea%#vTD zeBJvh|K;OBHVYiAnF7yUoWspg^j}tkASuJ^k1_3>+ZRiQ$@*ouf_dZ2e@o8(T~y8F z+w!{YuohB(B=V7cm9vgC?Q_dsnnJOSl|^Q&;d8IlMFLv&!xHcQ^g=pWTM+a2&KFpQR?8){N9y{V^wFwU zCF!!f?x$pL)8Q0P6=b5I;qTBCywt^#4C_S-Bx&twY#7h)*- zy^DRNw|L%Csi>sRFo$5Tbkhed9KnpM=Ox5KEgPZHIby%vQy{<9UhjePv%czFCUIH= z70##mk#nw4*>aL5SGggR1p%g{3eLexcc@SxOCr{vzK277|m zHJVEb)YXGA%X^rYH$0oBdf-@)o#fyH-UeyKt54>QQEu_q38~Mw>rF)8oD20@Sf2if zpRQcDui51#R&?aBXCi#jd|L3;`p3wci=C&E6aT(H88$idpDs^uo!*ulCx^hbk>)io z>XYIg%b#>DaZX|{uHImSEe_CoU<`q>PFaFw$940j2}U-tz7F~=p5B1fM*pUfFt(ZS zId9v9()>bRf4nI3)nEGz5>=>1>N`_m^@>uiZxVZsS!HIfgRGedN2b1s?1JDzSs7sr zvMD=Pldaj6gVQcr$4~Oi zk{5gM!Ujj;cJ|NSwQL-3O3S%xDIFf*I8WdAajPX?pDnG|4Z*r9E!|LztyT30By!H) zoeaVIPxs8>41I>lv1K!n_vZCBbWMl}A3#_?IGrOa*a%Uw>ArCq5uS!2v_UmHGQ$eJ zYt;9qqjS=_^P8=wgP|GTIZ5nnQ$d)#p!;iF68q!Ub7k2S zrHDh3=EwsNm5a}aq(}DC>B4@$`O_M(q66DJzlYYDvC#q4VRV4eJK8iTao>+Vo5F z2IuU_tmW*TAqk>=rQS+$FLIz)uu`|rmV{9*s`%4Ek`oF>O@?u)FLX@aAs~zdgW9%^ zN^J0elL20TSXbj=Wtu~%`14->6tL(Bk?z^|EzyH_QnLI!;N*b+DcWrnYU>rd-ym{~ z8|2=0#p1dPqL*U~aXv9dEf^cz-e-(Z&lO0Im?dhGZ#XTg{`Y3l`&?l8MVB{2g>XdZ z)5!+2q*8tsMfNd-Hc7O(8Caa3F zWOh-m64|ZcyJGLiLlb7LfgaC`$aD*Und!l4K|a#7uXetk{h@_HP131M0|1k-b)PVl znKu|7JOiC&+=Fm3Ez|msfTc72kY@P&yXXtAIwO}O^CKmi!LjIHQG!y<-||B)jOm7a z)tLcMFb=Grfa3W)vHEt2Q)~HZ$>2-&5*1@wNv`Oq3#>jywI}HWU-f=K)9+ghY>2jq z;u1HNnGA07a_ixOL2!;9LAw7G0Y;Q=CFF&rz$qS*ol1i1@@`ULy`#GI4Qg7cCxEUwY6%?T zZ(IK!3jCm$`QZxMa;AbH$}=EfEib-;1$W)GQE_8%Yn5Fkb+Js1@Nx+5X{+F@d(=b@ zGQZ?Eltlyb2Eb_$s>!2~)h;o%%zkiU-R>{zfN=+nBhDBv4AM@$4bb}X>5d4JYORN& zZf8C}qxU2M9Bucme;1LYq8M66AvT@*^L}*;%zvn_(!&JsRww( zIOSQ6nwEW%vpjn!Dv530c(8Rd*uU%cOcfVY74!u$RurYUyzW!vdb45C(H#dui0(R2 zt`ZuVpl?c@;jAYQ0)+s55FE6cIt>oo*Wxk-&Pa**I63xDC^Y$n2`in3#dg>kZV2r1 z+U7MnM$Y^+ph^4uh3Z>7qMU#mhR$wzs%EjuS*i5*or^q(q(lo;vSFu1-4XFnA1y*E zH7;OG6IAH?feS*U42Wg2j*lg(MH}I**H>&85=myHthIf0(~{Wr=EJ9FGjBtJy=4F0 z<<4;a!E58zMLJLxL&O+?F)kKmlqq^!r~t$r@5Ij<)|feEzyVd5+HE7csDZBDk;Hbn zURm??ryN47&XcFG=Rck0yumFj2TGpINeoDBS0eZlcZM4QJAZrO&2hD&z?{jwf_xb` z#oKH+a$t&?2lW&j#D|p(ZW_Wi_o2ZUs6pbO6M+&=w0Txi5a%gQFBG!gtm$k1 zrM{a=8ZVU0mCCbUbq)*9h-fyHbZj+)D})_esu4*S=6+YvKFt-pl+_Z;-}WR7`@;_Q zQyf4nKGteAZ!9;EI<9zBGxHcX4NxOAFkrt)sU`E&5~tRfYq;hxrnTJe+O>b2-64wl z;$t9d!kw8nE;#}#lm+iTU`U(~aat71^gPG?TNzQ@7+1-lZGzYrgweQD?e9YBIjwDM zm-#e%k4RrwHHts4eSbVu3trte?HQ9RAwetPi&!e{2+}r;fW9~%vk8YN${knJzEMM< zkOWighg4x7+8bZZRI_k_{1ci&BgfZi-@7cP;tD zp3PC|8(^dJtFd*VOTq0Qiq0oZNxjPrN{+n;jNuwEhFfYsBdGy}>8*0a5#oHUPjYvh z;NFqv-%IX9@JwarIsZV8iqs!!I;Xyj;wlN;dpaYPdkb>tJmkZP< z^B`%UET+CXsyB&w0y#>dq=U?~1$X~=Xj8io4sA#A-OW1o8*;=VPNhj>IS`$jr=`FU zuig}E+aH5y()ibFCDoKTR+{s=N66=ZDbgWlYT@<8L52@ZtaX^zjA=1Javh3nVe&V9 z6#~%@iA!VHo@uW?tK(7m{KoQ{IH!PvhIAlSvEb+a&FUsb)^^OW-X1qj7&Izc=STed=GU?E^)UQY2^`6aZ7aK)bFi%Qs-sBrO z`81DlM>vfW@cQ(sh?Aat644J_afjVvcY|Y0^Df0EQTQ1sl|vkKnZpxDclH}*0~Tox z?%|#@cBU%BqiGg@{iIcK34u2%)VzX_KTCjq7{@p;E8?ifFE;on2473H2AZbuy4 z=19AWUS5q}UXWLyRdLc;D4<(W3>XDfa|9zVZ4(7hLM=Q1iE|z<+CX%lQZWx_jL?ju zv~5$Z-2hnDbYh_e(R@lY8TzOS1b0fy^<==h57D|-#Rb|!nYd!;%U`f)P8dt-Dycf4 zssYSjkDBE9TQpNe5?cy!^_X0qe2V~ar2#xu@7GJ7`!}IhCCG%Oiq;NKWB#x2NGibM zHL7~^RvZU%Wpv>cS#2gFP_@tQs@87Kfgnih^kNmz-y73D-aGQhjlT}8SiI6flezeZ z*47k(_RV`3p-gCZaJOot$adM!VAG+ z|8#qj9s%^7y-~NT(vca~*RzWgCP@cY(zA8{V&jMn06D)bopqL5qbvy@6oP7FCwG1z z!{M`MdO1@oVH+QcGn3Alk4x=wh6p6r2Z%P&s8j=S-8r9)X(=}X-6+&Sclfk*OJpxzp|0U8G-cAEhR2CII&^9dP0M^pymyjbgeze8e?R!a|ug9Sy zHV0OearPxsZ4|f1Jb9Fh^kF`@CSyzMH?`3og*X@l-nay1YQRF!q^kiJr|&YKv1z=S z2bA>&ba_gUXO@61udZeWJHx!>FwnjU{;@u0)=}`kZ~Xopx-f6NiVtjqZdaUtHz^?< zgcq=$3)OLMPEM%dmF?ZA;*1=#9UK$?+~M0q<=Jcc_OLp-?R;rRcsj;3zly#*S1J=8 zD_f=+)vwRF1o~)s>COY~oh{Ge+C}-ul;7Z^4^z0dnE4xqX=k9j0Nkr!*)M(__azsHimUAEMYDJgkw#y-*g=_7;Rpr}EP6i?|BhfWy^Wt~IzDA*&$^abB+tiESfuKnp?N1OO7`PHFk z^a{$Lj-clzpqna$h}P5PBC^4!{Z51vKJ38>53zG8+LX zxmb>bn77+-@+7wH;e~M?#*I<8pN4OTlI#wdHETghW*KUE!AFDCZC?8!e@BCvy(!#z z*qBsM2zfNjark=rqzhF|A*`jpI{8-TbIyrrbhYG#ZlK3Ae7NCQUBMUs$5TIDhu&zo zUv9XMlnT7g9p+NMCcA7p;b9bTXe{K3ByP$hAEs4D&KnJF*->G9?Jj#Q%YRt+U z>dNygkVRUZ^k|5k1r3u|DUZ~k zX9UEDs(Gz~y%e?KCJc#II?{5W%EMQcVATmZho4fEXHz2WDCrC&S7^tDPF~9xFNj^|cm!Y>~3FVx=u45sU%9gAjwO4J*4lANbt> zN-PS$`T|Kg51bk-j;fpyF9G@ZO-3FBnhCq}KFGUOzh`XUqXAlnaeSRo# zH;Lng+`Cd#7*#WVfiQIYeBbLkb@MT8j4DCrs3HlB3{?8jr&~(DPmgl-S$n z5R%v3 z7SJd3?`%9~l>xV=-`cc$W(f4ByrpndbR=sGK={Je)d3DIBA$CK?;M|L!`%d2#r%Y# zXVX>K|0VUPzqUca*DiVheMV{+#6{)xe|J7=ijnZ%XybiZyBOk;yNVB<063h^X1MFc zeQ%J5K0rMQn;(Kk5nRGpHLk%mx8gr#PJoRp+fFQ ztq2V>gNOD=C|b7{b+mepwaJ@3csTGO+F4>@-4!e(d;v#6|MCK_*4^JZe&KdM{oUJqfHyds{c-cMn8er1YYb9ngR9M6UHj1 zqENBa8afBG{+^%9e{!QNy+parVbN}U=zR&Y`Qz5F_((SQIU7-EfJ=yti1i)xIir&#`vH5fS%8?Pwa<+p|{>2R?G zjp1?Jz?fxFQ@kFue;-h@z4}~P^o%Z1;u>T<=@8^`V$6xp27)#u+;BKB#QV?RTIDwn z{{eH%_ZJnxlmP-aVrDBSCurjR!uDwn8W8)*q|F?JKm;Oc$-aqIgL%InH2x!+TrqY-N&}#e6`QS6tp#-D`7DAId z1e%_AX3$cBL2S1?sDxkSKr~wxy#j=tVmAGKo`d@%9zb{W&?}^t!5`HRh3Tt{@2pfD z7tD$HPARLtPpCt#*83RKq-{pXcw0D1mQ(o6(ULQwFIkL7sL6wZJ(~I4fZ$A{MyFo7HX~vx=^+aNT<{Q_v%|^w>_97K;}N&f&}t1D7|mxOEGkS z_QcR|OfgD3WFc^%1bX!~**^_aT$-!mrWr6MB)_RP{tve!K!>^LHZlMop*1@}ouAdc z-flD6?9gqlz5xUDaEk<_Vh1K4ZL>1Z0kVxVFS2NKQsEL=9%%hNE3AiQ^pp z!+XxB%ZkA2C58rLND0FUNZB0T2oA!A&W1HC14g3sHaY50?PUi*y{Z=|(NUB5!fQ-K zaFo8_Kubz25_ibO*X{9WH0*U}nl8cMegm|Ps^uGKmsQlC?;IAnIx@R>9}Wz$wG+ z?mO{5FAcInxB*Xh#ToF&$I3W-9y<>cFZ8I`-1;#O+0X_P;8)ALP`12mLsL-Ln3HnX zOKkbA!^^`JW91(#4QO5t7lzL#C2!XDaW7PgVqiWz!SYtQBA0^HYcCPt5?DzfZ~&yV zQFk821A%Bawc>yh(Cd1bj6xl36c57`YixrNWaio>=s*SqG;ef;BKP4TG%<&-1@YHw zq6;jZ_-%%mR529^W{U&_3IANuGPzMdxc0mac9UB&r- z*cpV83ej#K_PuJJ_u$R2xM_rr6(ocD%-5LB0}f8l>6E@BtQMB&(DzTmlYR-v&A%JhnFcP1jt3y6GZu(V+UR=^otaj QWAKNv+RL?g74_)<0ak>Xj{pDw literal 0 HcmV?d00001 diff --git a/test/fixtures/line/label-dynamic-show.js b/test/fixtures/line/label-dynamic-show.js new file mode 100644 index 000000000..4f26c6742 --- /dev/null +++ b/test/fixtures/line/label-dynamic-show.js @@ -0,0 +1,55 @@ +module.exports = { + description: 'https://github.com/chartjs/chartjs-plugin-annotation/issues/589', + config: { + type: 'scatter', + options: { + scales: { + x: { + display: false, + min: 0, + max: 100 + }, + y: { + display: false, + min: 0, + max: 100 + } + }, + plugins: { + annotation: { + annotations: { + line: { + type: 'line', + scaleID: 'y', + value: 0, + endValue: 80, + borderColor: 'black', + borderWidth: 5, + label: { + rotation: 'auto', + backgroundColor: 'red', + borderColor: 'black', + borderRadius: 10, + borderWidth: 3, + borderDash: [6, 6], + content: 'dynamic label', + enabled: false + }, + enter({chart, element}) { + element.options.label.enabled = true; + chart.draw(); + } + }, + } + } + } + } + }, + options: { + spriteText: true, + async run(chart) { + const el = window.getAnnotationElements(chart)[0]; + await window.triggerMouseEvent(chart, 'mousemove', el.getCenterPoint()); + } + } +}; diff --git a/test/fixtures/line/label-dynamic-show.png b/test/fixtures/line/label-dynamic-show.png new file mode 100644 index 0000000000000000000000000000000000000000..5662238603c9c628d065f52ac7d8e34e55e8ac48 GIT binary patch literal 18520 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/line/labelCanvas.js b/test/fixtures/line/labelCanvas.js new file mode 100644 index 000000000..23252b0ba --- /dev/null +++ b/test/fixtures/line/labelCanvas.js @@ -0,0 +1,48 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: false, + min: 0, + max: 100 + }, + y: { + display: false, + min: 0, + max: 100 + } + }, + plugins: { + annotation: { + annotations: { + line1: { + type: 'line', + scaleID: 'y', + value: 0, + endValue: 80, + borderColor: 'black', + borderWidth: 5, + label: { + rotation: 'auto', + backgroundColor: 'red', + borderColor: 'black', + borderRadius: 10, + borderWidth: 3, + borderDash: [6, 6], + content: window.createCanvas, + width: '25%', + height: '25%', + enabled: true + }, + }, + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/line/labelCanvas.png b/test/fixtures/line/labelCanvas.png new file mode 100644 index 0000000000000000000000000000000000000000..f028ab1fce9b7fb102edfee0befd7b46ad19c056 GIT binary patch literal 15890 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/line/labelShadow.js b/test/fixtures/line/labelShadow.js new file mode 100644 index 000000000..1641e9afe --- /dev/null +++ b/test/fixtures/line/labelShadow.js @@ -0,0 +1,92 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: false, + min: 0, + max: 100 + }, + y: { + display: false, + min: 0, + max: 100 + } + }, + plugins: { + annotation: { + annotations: { + left: { + type: 'line', + scaleID: 'y', + value: 25, + borderColor: 'black', + borderWidth: 5, + label: { + position: 'start', + backgroundColor: 'red', + content: 'no offset', + enabled: true, + backgroundShadowColor: 'black', + shadowBlur: 12 + }, + }, + hCenter: { + type: 'line', + scaleID: 'y', + value: 50, + borderColor: 'black', + borderWidth: 5, + label: { + position: 'center', + backgroundColor: 'red', + content: 'offset x: 10', + enabled: true, + backgroundShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10 + }, + }, + right: { + type: 'line', + scaleID: 'y', + value: 75, + borderColor: 'black', + borderWidth: 5, + label: { + position: 'end', + backgroundColor: 'black', + content: 'offset y: 10', + enabled: true, + backgroundShadowColor: 'black', + shadowBlur: 3, + shadowOffsetY: 10 + }, + }, + top: { + type: 'line', + scaleID: 'x', + value: 50, + borderColor: 'blue', + borderWidth: 5, + label: { + position: 'start', + backgroundColor: 'red', + content: 'offset x: 10, y:10', + enabled: true, + backgroundShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + } + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/line/labelShadow.png b/test/fixtures/line/labelShadow.png new file mode 100644 index 0000000000000000000000000000000000000000..d6ffba449f81aff340ab5cf50296c721b6b3ba9a GIT binary patch literal 12531 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/line/labelShadowColors.js b/test/fixtures/line/labelShadowColors.js new file mode 100644 index 000000000..574ccf05f --- /dev/null +++ b/test/fixtures/line/labelShadowColors.js @@ -0,0 +1,104 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: false, + min: 0, + max: 100 + }, + y: { + display: false, + min: 0, + max: 100 + } + }, + plugins: { + annotation: { + annotations: { + left: { + type: 'line', + scaleID: 'y', + value: 25, + borderColor: 'black', + borderWidth: 5, + label: { + position: 'start', + backgroundColor: 'red', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + content: 'no offset', + enabled: true, + backgroundShadowColor: 'black', + borderShadowColor: 'orange', + shadowBlur: 12 + }, + }, + hCenter: { + type: 'line', + scaleID: 'y', + value: 50, + borderColor: 'black', + borderWidth: 5, + label: { + position: 'center', + backgroundColor: 'red', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + content: 'offset x: 10', + enabled: true, + backgroundShadowColor: 'black', + borderShadowColor: 'orange', + shadowBlur: 3, + shadowOffsetX: 10 + }, + }, + right: { + type: 'line', + scaleID: 'y', + value: 75, + borderColor: 'black', + borderWidth: 5, + label: { + position: 'end', + backgroundColor: 'black', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + content: 'offset y: 10', + enabled: true, + backgroundShadowColor: 'black', + borderShadowColor: 'orange', + shadowBlur: 3, + shadowOffsetY: 10 + }, + }, + top: { + type: 'line', + scaleID: 'x', + value: 50, + borderColor: 'blue', + borderWidth: 5, + label: { + position: 'start', + backgroundColor: 'red', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + content: 'offset x: 10, y:10', + enabled: true, + backgroundShadowColor: 'black', + borderShadowColor: 'orange', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + } + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/line/labelShadowColors.png b/test/fixtures/line/labelShadowColors.png new file mode 100644 index 0000000000000000000000000000000000000000..f114c8dbe385758d2536ed950c16fec4edc91337 GIT binary patch literal 23617 zcmeFZcTkgE*Dii1BtYm8n$%FFNEHF;gbq>_rAZY~kdD$@LPrFmbd+vKiXhS<6sbxP z>AeZkdy#f-p67YL_xomkfBfdmoS8Fc-Wg`%ZF29j_S$Q&b**dd7y~^GauOyI0079f zG*xc_02KTu6d)!9KX!e8{sBKAk8Wuw14Z2|zX1RRXsIgQ_O)ECL!`0XscJh_yfZMi zyQ=*~OY9mIjV9D|7)Ga@Hx133vd^2|LvqA?e4d^O?_?R?fsSip zV1NH5aiNmR(g+g)1o%Gqhk;_0&`|Eb{zzzY0E6D&;_3hVmJeVg`1>2~92A5EfM@C@ zYW>p?6m#`|`?XGLcO$4tU)Sm#3@-Z-7lg(j9DrjujkdK9F0<}m~7zXx} z3k}K1>T$e^2uuS6fTtuh2Jzr;J%!&ka`zH}V~T_$_%tw3v~+5}H8^~0G911aA^6^Z z{+e=G!#w&MHQqzT4Xg2#9ztY7N#ynrN_pz(w014u%Q7npR{9KVb7Vi(Vpbe6lA z)uVpgw;_$*kCN`!*=}~U(3?1P-Bq@YbWw=(O7^2g5mOntq zrbi2P3gZKQ^dt%0m&RVcQy@a0Q5m8%)?b;kbtYJ$zP7GtvhQ_LxQWCF3D>(F`!yK7 zAS~p?W`Qp;Qgipl;-4>9Co5Zj9r^BcXx_D4ek%J~8V1 zI^8rW*;p?=Z7`l(FmZRr?>j~>98n9kYdr9vx_KKF4=>?^mHs?f-7f*BO-9O0*=c_v zwdD!qF%^&*yQNx5pPamsCAWf9^lySV18;<>2E{-7dx<|JWFpz=6EA1ss3kD``1oK( z9V)Glfua^IbO@qupje?f@82Vw20u31Cdfzr_;Kr_$)~)wR#vHUtFKV z60zZTfA@RLL@-n@PF8yr9FLHS)MEPe6(>$>-@Lis@<(D`;paXFurJt(3~=(8|J+dP zv#r$-XiNfdP%%)*NRSIvW98Y%@5(cs-I@NH#Z}O&Of7m(*uMFaIyjbQmZtTm@>mEQ zb22b|s((pw@2BD6Z~c%bw(-)0+Nr`{>w}K{YqPJrO_q?YEiK_&RS3@UZw*;vz~noY)DqtFQwWDziXV|X?<@^3T`RFMzxu_Xkagj5W70%(Z*_0YKN%bigP2YNLOJy zD6l&1WS!Xv?2X7}z&4eR2>o$TY70c>fjPu0&JXF*NXEoq51j`95ho zr4f#9fTGXt$>Aqm0^ED#4{|SLvAIGl}jeO|x&L;I@7tm^eo9W4ThuD5_!^$ou= zoJ9S$?E;q#vzxNdc6q~H)@gOJiA_@k3W#f{NtA9>n`>H-d`H_i{+6!#sRhJ%(C#qbrQ%bVWE4~ZcTO@+{5`=e-f zX^PxAr(U@SSC+d-wz7u87D;Ol7hgIK$C#-~k&ALFUX{$?08Nuv3-zk{FDga@;1Ii* z6*#DC`8Lb{p^uh%{P4nq2QNJ$k25k*0S(#Gk9gu`mic@r>R!EqMcSZwb{bCC+}1xm z$n>Hws#%w*_<5EPax#Zo+keBe*b{PoJT*7+AY0AGhQm%Q`A)b<&~I&5FQq4tBmJy` z3SUi^f?`;R6cjzmFTisP-L6}jF7Ei;$(WnwcbUG*df2!1x-V@{80KQ0o7MK2N0nO~ zJjT`hW}@0{%)0fY{p8{2mtw5s5(|f^Q&A0c^D`04{Jss3NoAzSancRi``rJ{PzS>? zgeYMA%d*k+n4sgasdcuQ^VJ86kC5X7##ZtKJR!28xJ31*94s-4fRDy~#v*r6o&c8i~@fCpMO|0=Jw+^JvYtvI2bG+6oYD?oy zf4JqT#FmwL`)OSATrVemGZT%}x(?J-72J)nFTWPWQ((avygctA2tJ67vVfp820LgP zSp2$FgU*f?DfxhT2NRxUpGm(qI;bbDAaXBDK49E7@zJ?fY$DfwW76a~s5Nux53;ax zQqk)9MZ{9at7S8L{zT*@#XH~9uMt@tHZfGM1?~1}Of)P!AaE%y(VT^?0bARuqMW8>q&X4$nfTRiuqr2aky)7ML)M5S?4 ziRdq&%h7Js^J$7p-5L#{f=Qmtxm-VrV^^FMnw#<(vKVd%X*f==m2=DC$G8RWyjYhz zty;{A9doVuZlQv6*5~QuikE^;ov!grq(`D zO4(WPkE*S$g+yox(my(Q=EOA5!=TiuFu%CSzCE0~Z}Sd{@5TN=eajc<6MhT)x?`)a z#WwgS(8SO*y8OLFjUnwH4q$*GgqFYoQbK@N zI56Frj<8Kf-bzR@$Gm;gfEmhQYkg6eu)oA80Hn|H?%O$oBY8^hlO+*`FgHJKUzC`U zlM&e^5tersfTIbIALbNINUY2H3ixtnjf7nL;#02&5v39hE(T=)ydKxJB~qDwzN}Fo zWaBC%_F^mF!Wci-Lc!Kbg14r+-=g3#^R?V?UAe~cX_Sw7C~iO#f}_r|;T4Mj;OIBL zp{MP9Q0)&ZXMC`3`MNd7z^bia63o->?rE7F>ye?YiYEO^t`JkmQk@5hwL43d@%qIU zx0w1-+Kh6y*~|ZGNgXhSH3|+~vJZT}HN;nH1{eVpVarP_qaPUNeC!!)TsCRLzu*5j zc`DT6TqTvis16a8Ih!^WO9lJ?^(RuE*%qq(rbxlE|D}wEgG8x7Kj+3hvt4;cHe@>y zYUAMw5!JJUFYsOnx|?3gcHBcv-;IRw%i#m-*mK5Iv_>F%mh|Q|@zyWdIUm+TkoyHB6@wc=Q}LNj&m=hRQ^N7%;SFN2EmxTbUj zyUnw*M7y&6JTiq`C`M8<*tO?ymAKF;?B$}ha|n{IW=vF(sk!MFRlHRNd7|Zb`1XN! zevUMZtDC6(4f_f4=d?h^-o9-cbjJfo`&~%DmS8qq6pA0QYo!LoER|ZKlCFa$!MJSX z1iH!pinKjc)#laneI(0s8ieee9El5kL*WY^YVT+`w z>rl%RuY2&x`F^0RIbn5S6PzhoHfzFd9EKKPuZ{olhbo@*g~>2eQwOtm?)F!oo5FB( zkZkQ$1tkRm&Soco4j!!qasPAGAx$1$L$b5^5RWgTQ~Ib_N)mVP>c&bMUAG-?lo|$V zZ8GeO`v7}6(Cf3N+_!G@jqHUXF47b`aPD4fS3%> zExk038$>=durhse5X4q%GTk<{sNYC*NFoz4t(KYoOJ$!o=)wlJJs09f<2_KDw6$*a z5iu?t-x4yU>Li}dePP2NlGhlVGzP;cKUduWzJKO$X1;XDjAY7jl%KF4!`LoXlS+`s z=QbjIZ4v}jSKGIUzh^y7;cB(9@&HzXENgM>`0A=hB@Ef>PobzGE@hWvvCR;@hqB>= z4-_EM&SUC%8@@0oB-OUYwmbEGDctzf%*|7Hu z4z@>%4^*&`UZ6m&`EYnD1a|@8R;cFZ1iN;R{#TpMHc^OIHI+MGr zUw=vO^x^wLjH*&HS$RMsZ4)|Y^AL%1g6!*shv;AH9Fuhqx3`J3x6N3y&U4IdFP*7i zWuzD{2QKZ&jt%+S-7(a#zw?1ed&kEu+hDhG-+cdr;38=yC;q2|>SNZz>PY!&Jdq{A z#sd74*DVAS&$^oGN7ZiqsQJ=j$FXT*yPxN2ghTf0YEWB!yza7B@4jSn#aoD4pH%Bz z$t!anI-!wbQtb>(weC4w%`kicd*E^sYn(<1ck=Ad(t|USz+D1&2j8jX7aqyQyKEyL4T=0aLq zFUNQj85wPFw4Iux;MH~4__|k;)x;x`oS84@cNG@DT!l-M@cPuc2NHgB;QhAj7;Qs2 zJ4{L{Fzxs*cCC6Bkg)@S<}#ql&$95gORS2jKMPQ zDqnWkZ=bKsOtVVq{0YnZn(3JazDOaP`sNvW3idJ?Fxvg&N{58e23i}NFAJONJMsg7c?&tPN>n)jBaC}p`QK24R?c--AYZDyC6Ws4fkEF>#1qE6!a6fRIeBd~z znJymrz=#;F^tRvbpXUn<&K3iLfOP-!TWk2=pdSR!2)_IG)4wr869@>t0ieYdB?N`? z*Apfb?3ebjj4ls2_rI`2(2s!7p#FXWNBS>J@vn~l)9u9){716fQyU;%BjG1`r z$h<PP516$?4d`9?(p%?#q!P?4&MYHy^5+ zAvJ5qy=7947Pona^AI1AsE>d(YEx@Ie>GB+{ zjs!h7hl7$w6R;GcVoM^9UuVIK3xcPVT*CAInDe*W^rjHs9k8>-Pf$^^Xt{8hXDn#{ zT#v5#6q=eDE^4l8>>?67M5@;Yz8$Q43o>;6eEN9PC z3#>XG%eCirCk9O(S==fLM+-EJ+$2>YkRzNPfT$2XCLf-dUnXz`u4uyrnMH+A_aPog zQI}~aLwcQ(WmqWc_eZs| zh!?xf9w=J)XfrwhW+ImbMcG0#SUIqtc=06o;bV+EV>G6WX0&u_(A2Xbq~+n&dSX5i zfP?^@b)5rn4e+#vl(ryJByl@p!wc@w8qYpLcCiu5q!K>c`zB^ z0YWJ?F`o~PvGIyO4+;wlhbuj}^yK$`&PaN+&nf3pP5Q40oy_wpdcZMUad30$ozsmF z_OD;Rt{OX&KMZo-N49#1a|)LQ~V7iR&TE;3WJRFk^{17pnzFJ~M~ zEE8PfHvyUpXVMg~V1%tU?N`ORy6(Ca{f>`j*N?iS*X@GxdFcaYJ;0U=h(GszbYAPQN?ZCb60# zM$4Ths7qOXcX5kcm!7pMf0%rH@PsbLUgZ6TeO}N)vhn6@tVs1#rr)phv}+G2LK}0A z6-+}@Lk@;qAI4a&AGaX&r}u`e+RBG4NgJjTG`VNvf9Xrjz+MLJk4#)Xoou^&>8018 z>EXIhL#$dX{T>zYHaoa_Y{*UxO^of=lO-3a-Gs&$Qxp4QXXUK#Aw)kht{)c`^Dv&h z&Zj3D#b}b1)RZc~fe;_=92W3oT`z#B$2l#qTc`Nif~rdKH3}hKAR`801%)t^2`*&)m~%-59}|Vygx=V{;F9 zxAY=Qd)59*Q4PghYg|~{99Hm%{lmm$%*g}A<4Z;Le;(F?>4h{&7p5=HBcb{6G9(of z-putNe5%6ZT6G!e=XOvFqRZ<)l{ZfR1XvlNru&d|7_H0r&s+GPp4JDWu;!svGiNu= zkCeD%+Nzs?T_0tb#bxX+=*DPLYJ3r+f!War2mtX+lq{^;+{O4^Gv{%5pgZ8;KxB7h z6@O2+t1;7OGR7@%j#<8Q)@R&<2n3!xRiCdUI~z`g9CcZ>Hd87-m2eu&`S5|{0=tyW zv#fN_6}S=%CKamIm?E(;NZz~#Z$s0IREX5keBxG=;t3>{L8NtgpkNEcKB+Ij=<${; zTC%7Q0QVTv6F~Ga)^6{W9DAB1B<&6&T=Fub>-NCC9R>ajn%NkrHFsVrXe3)NjHE9E z|G1KLf>77_H397VwU~LjO!L@1+09()k1R^rzOyl|Rr2M6!rE)ab^D_rELw$fZwg1G zNk4k?;>2D8U9Vq6rE?dt3#T${)x z#?053hTcjdx}8eUrVE#oMUwf@{+!L6aDNMVg#mG$&&-uvhm9J_ zswa4+4dx?Qx@j>w-JUlm)EF$n35X~v@6Cpi3gcBM<$v0eQGF zp)NIy*v+o4Ef6^;g}pYwO?Bv6#`B7FC9V+76E__26p(sOpgj`}0nf}v>lT&mv`J2t z(Ldkag8MDf_$q!L1FuMcsy|l3up~N6X=FH1xpXn|`MIyAhM$t5s7G_z@?2PIF!>|e zgc&)ppIT~eH0`Y5L0vW1HC|>X1w|qG+q+1LtCz2ghn%0TClhWfK)Jv@{*>F|i!M}J1yuM4 z=ILRP^PvEa%ZDET&%!x9q4B_-@9W9%|IZ&j0dPgnQpvkBB)aPO`!wA^k3=_ZEfK8; znu~VC^i*VUm_+Tc`tf?k}aye7e1pZs(3qhj)8JCK>lY~Da&7bXB|~e7gE?jw`X&JXdM5;VL;6orGMKzEU=F7C}JZ@!DrvA=TP1^5{j`= zfp&s+$3Oul#)x)WgO43U%p>;7mHLLbi)vM$AtL&0_J}ahobF-v7nAvO{pI_-Mu+JV!0+V z@SrMx9GcJhD2_2dtNg{DtJkZJ(dgPxmuE<)-t8FMK2T@XDP|nCP&*f%b(a2cKKDf% zWz09vI*IruCtxAV%^1x>H>fAIwLL#4FMCW%L>Y*O@`BFZ-@s_PHtI+mzfY_e+q&6N zxR-XeD$5sQPx{2?I#=(d@8k6kZuEd~p@24(f*+F^eYdKLE?n}s_D~zkF0$>2NuRyE z9|mg$`6>7`>qRXhHT)6z$qHr8723u&&YLf*$`IGGLWbyo%d$+=#A+NY4-9nqs}cim zc=QrIc$h8#WH7LVMe@HMoS`y6F$F%yoP+M?ISvyzmd<^55K7nQl-F)ii+`9El zie4g0^k6MBZF8GG$#pa=l)zbdnDumJnxf=@8!iO&|UGp$|K+C)F zu=QufmwdZsVcK=)@CG3=E?1>tN!SAd8ZJNGu(`e&T0(1Geih$+yU*X>EAPzHthVpW zBx4vvbog3p{>~8Q0qwc$iB|m>9vf!}Bs;bu&D#SJxC$lHL|h*w#A@3o5y>P0enFad(7dgef@hF#7gye05SgIvf&b zH!C4~L*-7&OADNEJpTua@k_b1Y6Q^>eb7I~=M*>FUKwYa5^?D!GSQaj38%;591mF= z_Lpcvhw3^pWXu-78$h+iZ!0gbE@mFcq zE2bPH2ws(b!}xtT-sIu-TY#}+$$pF*_X&h=#0Di+O(>xqH}LT;?M^OgS}c55b!kWF zw===x%8>AbTg>x%eil^;R@O+Y5oNFW?eJgk2bNalxAkW^r3MJ1_67b%mmU;$tY=^r zb8VTQ@=(@(516TV>?_EuK91$lApzPjbJQhXCp^{={l2ploL63CKCfI&s!tP6@Q4opXTSay#F+Mb*Jcv=YndYeO%A$UQ25ys;aHcK{6%BYCGB5yDOeTyvcRs$&hPBgi_! zdA|a~mr@XmLetB{S@2++!EBkk?}@KCVxAEE<@hF7AqvZJ@j6s+{RUL}!q`8s&~Db8 zHUK+fWCjgSZ3HI>pV5NQUrtWHqZlGE8l;(#{r{k@0SEvD$e>q z8=H)*P$3~U!Irk4jNOFx{F@>~@A*-s7)!-dJhOys2A{6_9gp$$=ts!aTMv!qUy=OC zti7rBRranx=aiGeZFZQoO4xe>YTX=*{@$gndkw-Rii**19NY4cq}HF9L{lv1tIA?P zt1jsm8}$7K^e+UsqzP++f;}nw5q)#{bCJgE<;&*}W$q7dDDoBfRtW8V7W<@4o#PaJ zNk+yCOW2I3(47t{jud)*G<;W{ft41LKQEZYvvM(~I#Ne857Ok8MTIi)N1gpoKR;^t zouFr3?zOUS0-I1#cX!hw^Vv7UVil2xQsQ3)swYgZ?#-OqC$hWT2u8uI9ZG@-R|6IA z!TpxncV;nd`1>l&FODF!^6yy!I!Sx^>6<&}E3KzAQOFB7IFw;H>Lqu{tLpVD9PTyZ zt~XZ_rQW`#@bl(-Hg8`_3B?^1(V$IJ8JA$a6zKX^j@Zc?2&^7&benCt3G)0SGt%XZ zNQL9v_Bo+BB&WG!r|F6S+W7`QC%9Hdw=i|V1a3!izS4^9%=g*D2oA;Xy(DSx$fk?C z!3Caw;!Spj+&J!DiJ^0zaK7r2GvSw`TPI3V+s2DT20xNdc%hqKm(K_R&u`4@GysVa zl>1$(9O)){av^$*qn725>&N~P5s}j{9w3{@TZ?UWfR4E5qw4WZWbbWD4CM*i3Ddi_+h$R6ZqUogq zBsYO2;tld)NkbmM3{LWOC2=vEMU4EtPXhTDGX(Q?j3{g$7r3THrbUP63xlJS*|&xN z2tY-vw1M`60Kj?U%6ZpA%xs61^2*Q9$`8vB)k3N>r?v=rsm}M9K*g8KB#(pbm@+`Z z+FtT&Uy{@RzXIz2mRXggZW-l#vF*a(ig zAY{fA^8pk@5($^FHXtE@kzSHb6?%%)i~<=#r zj&EFX(u@T&M?$ca!JmaV^1UizcbpTTI`mE|9SyRdT{Zd#x^ufl#?BilgE8la3Fk{3 zfSrU&aLU7k@eMFBz)}zJVWo?io*Bj~Kd5KdeX&0sW_%Xm!t9g#x+?4d!sz;RQ%ZtZ z6M`Sme0Z2)6wir$ZBZ~pL<4x<7SvwYE)Ni2HEKB)>0X;^UAw% zDkjEBEhx*FmZmCC8}t*Ym}+nKgq-zTyyC6+$se9u>8iO8lEC;Jszea4BEW3>8#os; z2UzAnSVp|*eg)_#bD6BY1QNWxL<$o*(L5{IB6>y#3ac+dW4N{Q@^Y{Uz|!4#kAbe^ zn1M2QC5TNJ$|5Jbt_96k!lXjt3GK5~q@iI|WSj1Tz$@WzJ4bEw3k^c?#i^jV(ul=+MjLKK@o5sJE2!P57V5 zXC04t7-&0fpC2G_1%DPKPH$1^WXgEq3jm6NkR!k40Yoje!Fr3VP=_9fNsauzzAw{^ zATt8&Dlg>^)!7t5rVB9|J!*1>>)_^Um(Tu@M}`7{8&zI1L*TJI**p6_!Jj)eXcfEe ziDWRu$_XTa55FZtQD` zg1f-Y-JLZC&K`^g{@3$)b?85-L~TeS14A0Yvn0~2EbMG@yv z;jDD5#dkJn>TN|cm)K!{BD2PbJ)fDM@r#t+mS@W+z>VrR5WCB01&)$BCz2clnh{-F zK$0^(S8cg1h$rw%ZT40^3~2MQ&Fl`=h(EFaJ++9ncurLI0s1UGu~#7o%A`%YDUwYj zvT(e0ka5MCe{^Ng9KJS2X{;*O+1Fg_DWGGjNd1SUsvjUkf*3%u*3%1po;G^WR(-j{kC9UV(`hDL+dSumV7zU(L?*(&&@0 z;gtjHx;DIau%aYO2+RIle>5VOMj9S$AbxcXv{FCflgOXrm7woA(ZOc)iWspn1rF%A zzxUA61$Lf?UXfTf<~zFHD$vWQFV}72x?mVm(Ga+O-svA*Qw2qbtzENTJf`lVMA2@} zVutYdEvCO?*xiid+Sa$BkDq)kVT=NU|5MP?Scl{A#7GmfI{zYqPq&C4U~9#!!}U`K zzB8-02ws^Sm3lO|q41ZFIlw5L$ABsP%g2<+xjFQyx%bmZfsMAK!oE?D8WBByc1f|I z8I#F=8Qc*0u#C4H5G`~Oxu{KN?0L@bFPlpqLb#!M5y5vN#J`48ed7jiO)LriAioBD z-zFIwFTAd=)hUeS{v&hj&qq%Z!lJr`$S<5=@B0}-%r3!sud~KVP za9gICc$5d)J00`YhFGW$YCUi+=ib-d>d5fc+waCmidErZ1!;)9&NcM~(YDCBJ$!gv z<$csk26Vey-Xl+h47Dmtd5QEkJDu?+x3n_2K{Qyju9dz(S5V;!pvt{DDsDe=VyVJ6 z-xvcd0pACm#+ucpbT1oGIn*7k-E|6n-a(tm$ihqf_Gje68N=gLO*5U7^i_#{p~MTv zywqp-x;>&Y)cTG;GKA*MV&oyoSYMHTL;>PB@^CNfjwvJ%4rVe)gc81y6qh8Lf>;%b zG_zGW5kEuiKJT(;wENJO4n;BPy0NK;&j*ViOEDK)Nh-#I8@mg-RGK3CU(}%^THtH4 zr>&NWcpDHIk|Oh!OM-b`Fy*={pGV^G*5FXcQfLpju;v#fI9-#kUATLBK`)b#5P?I_ z-hXvLBTE7c19OsU90mW&-%SFcr<|8vj-rTNC9qD@MhV&p8d!tw1@SacoB!fdfsS!L z24reE{ZCwAS_LKr|DRN_m(aiHS?(af2^MamE?iEj3#wQN^zSbIazX#a>f*+eTrj|r zz)#F`*SCFOQ6K2^G1B}iv#b}Ug)#h_$^~+>FZf|Fd${2DAT#Z^H(;{{C&?FDM}2Mu72_a8CF!wj+&^@)91z+A2DmW$i5I1#V43N25N`i# zI)6{^_Qhf359kcRK+X)&FO-7c}@A)tT!5Y7XQ$V3w)T z$N!9$57Yv*Rz<(VKh6DT^8Z=+zxDM0R<)N}CBe+0=b`Ex)AOOMpRq8)3lggP%Sr~s zyd*Xl>088o*zCmtZ+6MDi4zGQ+Q6W7~@?U*dFuD z&+cU!NKiC{1dEN{KK^!5JDMJBQ>vxJo$t!$?CKomw{$%(Yy>EuUMoyS#*aF!k#WeqWj|qap52p?UmY1TDV+%`jIOShP+Bvi3W~Ld3RS z9OrbrVt<0hlag~dh&9%9Okn6GIA(dmhi=rq34MB(%F^n-5o}QK#S8#2&t2RLaPOuR zTis%9eH#YZKhtiU4FO>^ej0NuRd^iZY7TomEkP@6_!I$o0-U`n4FiuB@57inZtSzm zD5D`|H(@M~#z{wuh{hk!q^TbWUEc)^V|BDLl2Du<&>>ZBLEZtn^tc21BSq!X(+>l< z#OK_}gg9WkMaFFeW4Kv-_*#32g6Sq^p~aeEu`y);VtPrF4tn`}$%F)ye*k!bc}8yX zC5r+yfWLFvB{flFh-fRpFy8c&F<^pqtIb*!GC`(vU1BNaTOyD6Qtv9`<6M>47rlZ+ zO`@oIC&|!WI7@#xmz6xBb6aSkpG{+^3v-DVUd-7!d&Lp<7&Hzi!c*xq5-Ttnl5rv?IK>4y@`>ff-r(xN&8b(^=QhK`bb|UlXHCX>c6*XDU4Bs->yrB+>^W8Y`aE zIj@~W7rv535*qeXGf?EQQRZdDzvH1AWK|_^K9zk=3poSs)l1DbLR*5qiq;Gfl#qy) z-s~ErOa$O~8|eHDHx3DF+3v9pB|p?*KGUQPCfa-8#b^@} z2xu2o$;he6qY1;J;UrY4hLFSujZNw%9ohuawslCc zX)!tWTs=>?C})oD)W30ZrD;MEOL4q>D4)RJEtw>}hiI;8?G92D5s4k%{a_>hgk+U= zz*ox(Q-Y%;T5^7xaJ6rD|EB-rs#xT7}T|a-fT+5zO!BF&Y#V zfT4cXOTt7nJFKOmyXkXuj2ts@s}RhVe%pn)5no?ZJhb}ccVeMS<#;XJz8jkr#Y^&w zsKS{V7Nl#|-s7)(PyC5TWtU03g};PzVelj0Cj0A*OfqDw90~C_!tfJ9nVJH?QkB#; zy2}wb0&?x>K=1NwT`U1KqQ8#9n4nKZXX`&1f(c0ZD&a&}2zjM&> zXLCFxVMM{f<*vqTK8~yO-^#4kWRKp0<%M_1+r0W4uPSD%)yUQoaNPEglxQ zN<97?;Psdhx|Tu2(O}M;!}WYoMOB!PtzgGUG&H2#_&WM z1P&tuYk3{(ZvIUjdl`!=HQR|yc^G;*+Um?A zyZVnv!P>^i5y`W6uw5F67R12HDByKZm}CN0G6DUB|<72z$WiT;wREbc`0YQ6i zWxKQ?m>uhWEglVvR6?7VQt_$@(tg#UZPB4kr+;#VX~lJe9tcW4W%j%cB*kWRG!$IH zaRT-BOAdRTS1?%bhIpfiFp#z0q%5_hrYa2kC`036i4cA2Fwc<>;&|3c=pAuxTpz6E zIs8y_T-`=4J}){#xnFtf@J;ny3kX$_eC4)P%30#Vd21g7aJ;|P4AP&YbYDo?EOaI> zohk?=b=|rGl#-yXLj*~=-vIlmgO;{S4qILP0Hv8c(AxzH#WoGn*5so&i zZB$o(3MyoDu6;8%P7T(g_I8f;ZVn%f(oIz(z?oLpx#-xD5`y~(HL>8#@!N&t!3!JW z12*ay7PCX@1pp8?7v2Fca&R86qz3O(xMJ|*4#Yj%-F*{;%U6ZopT_6rN?7N7UDSB- zD`#LchpQ)wN+&#)l)CU8TCf;-e>oYbrFE~IobliSu`z4A%2JT|CJddOy|#JN6cVj& zK${#32qoz}e19Ax0LawPL*B%ny(V_J6a*2qZ6$LC0oeFNDW8pl=C5akZb76QwL26S z_2fAw_@LUGp5$m_I%`wQJZQ<=%6+qh`1{%MlG%zkAvj}bJ2TWTa4E?c3WnxGNIBPC zP;s8JIc3Gb#8NSgRa>Tn*4W~q`>RF0ww@EAmx6}@5 zuJyI8KQ)jm2NI;>l)c0egEv|6^uDS@8xJP6Cxz+ zmq!iy-J*HEBT@)E1QrWNZ{Jt!=xYenr3Peu)>XB%5ZgODSA+gMzCO~m)-Aiya=m_w zynSOq@`BC}UJO&Y-6?Radad_NtMM6Fz#eqIAQEzkQt?D|@S|zihYwfe4yVJU);{-_ zxX&mXho3BID0&{-FcR|Uy&TSGmmd|nVM>5AhrI(630i_>FTyT(uMW4zpTRuS@OUW7 zizFw31Z{;d-Im#EL0()b|I^7-0w<<|B+7j_zud06Pzq(P7GZ6voz+6TJQC@KnlC zHTOjzmT+8My)Af;QxL3rgMcb7N7Ombw*<@`y@TSa-|2h%OjLV?S%P;HoSkNFynmb3 zB!4hIXK9aGJhHz$UD_qw%+PSC=0lysvc|x`P~${54^`r)1#dm50m=Il$E59h1f=IK zH)m>edvo3%V4cOoRm|_9n0Bsw{*@dnw94IfYwfB{8HYTQQ_J6|!F*60#Vp z%DMhM@OkQ=4heuaJJ1tk9^Zn=f!A6Hk58r&cm5{e2gcRH%3~=MNHIQ8mOblvga%kF zgm-xM%TE)Ph}bj*-cQby0bc%`*}c{p++zN+2kL>wI*7kL`iBPp}(!o2f(oeZ>89 zs4nE7=+%_Qm2GTJgRVR9W$iXEdFpt4VU@GBN+8suBkE}AA8XtFl2VDCX^c8;Z!i=- zS_vjL7;=?WlejounS}yIucTOR^!5GP%e7!|NbP}aIuIX|Ql<1jh+$NFpPR{2@aB>T zdN|tOqHXZUMPP2hJwk!7y9V*-_+RZ@XGCHO_$uqt zL~cd$4WMP8_}LbHBP}rY_siS+pj0~p*H76{=NF9~@^|;@JN%PuhtAE7ydG#Sy}kxbx6g30b?6nHUG?jK{@|8p z+ot_W8FZv0O$yYR`s@L?{u%tS){QDnN7xrL<=vr0YwdEQG=Afyb1I=;r__{&cxu&- zHJvwl!(u}fL6>%*&g}mY-eF|F+qkdqw%xK&>d)RtB zCQrc5@$~f4aFf{yo3d|;vsfi+(gm~6zh7IaC4}z)j1mJH;6(EeLCg5c#I73w$1tOp z*Ftx-XfIms4Y#-_oXxKqD<koYZbggBw3J~M>N zOn9Dh^2k!plW`$+5sRF!dfKf$)fw#S8BXUlGkqO%%T{%X+7#_15bLbM(O0O2RK%kK zrhMT+(eSRJtT1#@%?gP$PNaQ60jle>;RizU#@WZViN>YZ8zGe_Q)UOTxu6Z*naP zd{wgfB$QnOZ7oz#zaa5bMObkEA*nsgn_S5G>rg_H?exr z3DMe-VQD>1FYy8qzMbw`i`40#@m8E1m1F`fmyR%#4qGSiiF~X7${n z&?Fl^w=gFLm8R8Gkf*GnT^n^aYh|0f5t$gV^Kqah?ORr38tvasu@aHKq3ha{S^j_mHPLQ!O`x_OGVc&RFsQE8tA!s-Oe5%)t2laf zTOq~gJkYAwrc(FUNd}xIZFPiEB|PhksW)-@2f!pcIT{t>zwI|mc@u=wck|d~z5Ayp zoU-X(4j2DPm7aMt`_-HC;m3C;mCi@D73ZCMdeo_;TUuu5IJL1WI`DLR#Pdq$%Fqqn zQdv3w_#K7CsmXGxi-NQ=sXNhW1r=tk*XnZ*m3i?So+Kg&KnIb+NuD1RJ0>oKot7v9Ud}T1#@C@sehRLw zN0)R-U++F`m^HZ{pS0k3?fqhouPur+J___P^gsz(tM0kF%-M@~?K z7!FmhhCQ&S!;@DosO7QPT2qCD5!@^@Rvk}nlSHXhvkn_TB<-_0nKvfde`wruu~f-B z!;x%(Hr?oQAy;rCkbUazEgG%j0{>u!%ZYTFvSQ7-h4H(eT#yGR@<`OEL}3-fB~sn6 z5PEhcZ2D8>*y*AAH-4$@+mHJ)jQ3&QbCmlti9TS<}m%zG1#_cN1M8m3d!(>)cn{if1; zr+BIh0%c*@pz4kr-F)l6=}%jt2mk5me0e40t6ICGVy#ivO%)RLsiC`mQ$&_87-O#t9D^`-$|bX}O%NIyZG~ zQBDA?S0$2>01HS-CIkQru@&E#&)tC<5p#DAoF%6`*0uujs8>OBG=&280zb#Q()L4I z!utzjUHZLjCRDv4cs5_iLK2vGlE}wm?gfIt6n`>tT}-6ONq#` z+5k4mCh6x^DY+Ocz#@!Q=uTUKnJrvQMnEI5x{m}FRXM^8m>D+hOgzF89_V}WSfoQr zCfW+n>zEho_Zq@1s7{Al;zi4b`@2MPJJ18Ru%oF7LaKd2dkQgt0;0qD zxtRLD4M9W#Vi;D8mv3Ao+yH4YLvSpE0AM)iI1O&-;D|%n8U?U9t}wNkCNL=mWQ9FQ z!SH|<0ED&x_7o;e(7~|?Fd@9|DyH6S$OkZYCGMeo=qT5J&&20_PZHPyqW+S&I~h+o3|R{5_APWd?Kqai-N5&ze% b;WxyPMqS@nr~Tva0Q~Is*t3i4Moaw*RlCs~ literal 0 HcmV?d00001 diff --git a/test/fixtures/line/label_drawTime.png b/test/fixtures/line/label_drawTime.png index d24e100b186f9c1aa27c72253775a533b7f862f3..b112c74b002b6a9fab685027654cbffe1a9c7f75 100644 GIT binary patch literal 15124 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 literal 13915 zcmeHuXH*nTw{Fic!XRk~f)WP-MbaPw5(I`E1r!7&BO+OloSBiN5=B8!!iZ!fDGCzj z1rg6Mhx>xtz5<%! z2qq*7DnEqy0S-TO;%&fT3A_-R5%Pc`(8M#4KLjsCv~{s)-{+4@_Ewpr<`hpwj6Cc) z>2zM(Og5EyY!KBd4|@fzSn*Dsbp$Ovw1xRCr5*2&HkF|K&AKX+DxW4R%do-gb#M@= zI9c8F18B6G)X=wrr3GDOVzk-lrV!QAh!xNvvA<2cOj*D%r2#WLrksIbb7#XB3e2+2 zv&Y^o011S0-bxY=!51prSPst6G<%?Yj=oePiupkeuWGa#M$v3g5(xhFBUR zkTVGU^EG^qEdr-cnjcMl53@1VmMaZ6wRc3aBtbAjqP<;L#tFleB=_}M$eTUHW#S|i zZs}hBPN_?rh{G>5EL1SCyg{c^&y{@bD@yi#Tmn^-ZjescZbvOdoULZrd zgXM#vJw8|1X|AD$^Ugo6wE626@={;)UJ`3p8+1=Pw7!1Z|A+WU>S;U4u)UoVAVI zl(@E44z9-M$CrO%f$37kUDidSnN$c1aU#9=Th| z$}#$cdk|@+>EYyt#w*lwZ^$ZeHrH`K3|RRB8`@ihJLpG6c&1dVM43tW`Fx){kl`AS z!qiuF@OENNQy1UzlC+@PY@_8J4Q^jvIWjb+MN0fgj!p^g3JBV4h;^@lsoU8y*6EwvLUdguj-gXN

q8*ad_aG-(p@iio%JCl9uj;sTdi*$}U`MiKzVpa`_N|G)#X|qDu9Owx z#^HEjaGY)DJz6{rF#spBpvr-1%7tZb@e;|mA@W5E6b=g(3F5&L;~_4nHi_>j-21>O zgNqCxq#T@xP?KQgBJ$b1;LSxL5g1G!j`-cy6*dYY54d;^M4<9RAmG?&~ za{f2(4ngeajzme5t~-ZPg^k)7@EJ*4{PjupI=LcLH)#=Qk}hzevZYh%N!&?mlbjv* z3MaFOkCXP)yTW=O3&GI)k=LS7j%PqTe2jl(SIwIgD&+KtKNM3HE@<~aK=h%cZr2_^ z=TW-*WY+{kM+@vbXg?O<%4~jpI(M9D;N+~Nwylc|F$OXmYLf6mN@@e2%U`XZ`O3I! zP2UPv;YPg^of9Si4fOGhp$dTGX??=e6mC9k+EHvlZ)stLYSkbZ>(u4%FBM z)^Tn%wzPWu?w+hvaRqaFkq@nO6*~;AcjjivN$8r-@fKx*0|-x^m)r6vh#|j*^X)&R zIIVnp-+BDC-=bCh&q0@((OWc+QjTHxy{6jlyp#Ess9NdJ!A*{x(L5vd(=1;Dzl#Ed zV^THb88a?xPpz)qR4gk+m;dQb_{TVibf-w-1S0S*c~vJ}<)Bz@1vB%i8<*{AFs?{VVz;$>96RJkk7 zctJ^U?4ZT3#jiY~OJi;^3FlUB->4p=R9Jq){7BL%2>|k36sl>Ob|`4E{(`v7dXEtm z0ymu*Bqn#`<0Gl9&5p3rvfxSKgZBVw#Z!_;-xUY->HSGe*qtUd8w=s1_Vw>88;1wita5-ERcr>$Z_HnO5gHaQEC>TNY>(d=)#H)cfRUbp;_=E63>-@@oIG)=7YXg3atiFK3}C~? z$Gq=Bla7IApFG^0dY1UV&?M~@=3bCF2B%`)__{Q6JEtEBU8aDekR6XB8;=EzcGQLZ zd~`B-aJA~1?T`pQ?7p}4i<4g5ATMrzu(tTJ6@a8O2QaPm=6g)iT4D}n+CN@TbRRMD zU=5SBS3F`&4Q*oh&qQD!14lJTTglvzg@68FAPm15RbL<;iSu;5Q&3AJERhbKSwq7x0kwcx(UE6Rj$ zaE&YC0|_Na-tM+KZ`F87V&Jaty=$CEmNd{`Yp>k`$`N=V!YS8u1fH7@Bn=g}j#I&B z!K1UWGH`gk0r2PBQX0I7B4Dg?#J^~Qe{%=?C^Te4gB$?wIFQWw7dRtBQS5PO6#g$n zstOQgb2i^GI0YG-o&wAX4ze-zM5z7~utIn&jvi9P;kW=)2 zh0PUTHC4i0$Q-)-4@ToRh6Wb_b%C;>0hpPX1mNrejy(X!)qowSmWOsx1d8A27&_?a zpm&@+KQZdy2iLcSPtrQ)=6T{6aKV^@X7$)9$jM+$NMq~>VAE=<{{s5O#~UNW8$bjhpc5V~b`8i8#Tm_` zhn9tY2x+(A55wzKz$}E5)ij4-S`EGV6gX9O-b7Bw_~Hf+2DwHFYain9QG1(@XzM(K zqb~Ejl4}rF`0z0;#pAQ?eEtl^_|rQ&MjjhfjLfOXVWji#SB zE7{)KA_Hs7fXU>-{%2Fq?ONy+eh%0@l5#Pbd;OCBs5d)Q=PfS^P8=H7dzhv| zPy~chz7ZGBL>_s?*)$}sJT)_T<-OTU=j77Hy)6;d%E?p#-ISR}E~TAIV`F?r<{FEp zhv@agKRxkCAhLD;sUKn{Q*-zCTS+?AqB}eY)9Sqj8Z6y=OLX`1Y6O zWecH};eYV8H5!wBf5jdv;zseX+tmR;oBd zT^49(>QyLa*nTQzN=HGPH#;z%YqH$+N_M|vTHYSg6N?97`mnJ`-XndqE`;>!=F^BJ zRo|STuX$lrANcZwLFO|QieCPQct*ffnptCL{ksI7uZ>z!`?uL%`t#DYM4KMP%x;L9 zzgk-yI~y36V~D~8Cr?B*+z|X4 zu(Eli1qQDK3cZ2uFfyGhPrv@I^lW3Qk;%v8KtNUN>~T$s-#iXO@3zG8fwTfLT!KsN zhErdohL)RHSQGv4(LOa^wC}H(i0w#Nd?wtYTVqrfY*XIpa_x$Z9o)7SEi&?0+O6x> zA)0JVv`Y)#=73*4ZY5(kZ;NMWY3Vo?acFz3+hB2#KH{cxT!ww81g_0In%@`K7#wiwfO-Z`6ucF6s#uhZ9_)aY z>?rY>yhK%;f{{*y8jTeN11!%6D!OBW@t&W7axCq>_my2gp+9F?i zmIZ!mz1L~!U7r%#=Ku*+LG1M!U0QjCAJ<__DCuk4hY=U@C_mTP52=4efmL-iqv+Fgxv)z&3E+Dg{Cfj*RhE zFCl_=u7$RrvU)ZiDRJ&HTjRc>(^wox0^=DNdM-7%H}riOdv3v(X)sWgz_Sq3XyQVH z{xR9IdVBHb{Y<6XJjSs+d&NUmNXt0&7*_Q~*4x(0RJ%RwwSkJuDat$T$}*UkskYZ9 z?i}8aDPY9;v(fohaGb+%kcm${M0%0U*cS>9Mj39WNnBk3U%00!(}|wLu)U*(!fP^B zSx^`)^2||yJ&&?{*1mdWyaOhGq|V4}(~FpK{6n=YFnH^Q)2TY&feOX1-RKs=uYn^% zaMOo5QXY708F+3@N1(IQfN-4+(m*+8k}2k~BsN4~6hOufI(HIN0maOv*r?IPMu6j` zQGoRT64whlyVD4Srz$|`k1vYf^JNy)HS!)U6|F1WjqpwA@K-qh-)QDn09L-r)vU(g zJvW#~d&8syGL6R#!nYs6C;t`cW8X2bg3s1&#d&y-X&c|B0I~k(p_x|3Fv& zhT16rBVSJ8>iipW{~?n9uN`gRk-6#aHvXW~7{^%Hgw3`1RAxp9cCaCM6#V$On zMpDLh>1&4w%pP%Mi32gh@rYdm3KSk(93u{o$ zHbz&D(-qZoKPe&E7K`Ars;=(X3E0X03GviyR6<^9R5nKXyY&LgH4_tqb@x4dP4AyGUv zG_#p@^5-m`DlUr?YU<8DCq5`RP|9Nf&B%F*A@Q6{Gg?sfV#78-#1iK-&&eK!f_^RZ zx|G%D(TG(OoDjJNZ0WLIQ)+gco~^utFB}qBMa^=W85T#p?z-2nr}ULt7MtIAo$Dm} zQa@HIPq6y!W0&a~FXd=8Zd(7^#pgZ!W)~o4aCXfLc{ir49~Vxogx!&6)Oi-gOpA|Z(1TFR}I3pj6SZ;eOw<2 zTI_vx<;5D9?OczML2p^uu1m>`$Z=|G zea_G?6aj_iljRLTNqin0>)04Ay`i+XoKVoKbaPxSj$KM9a0c_C$$vV-kDTuX{u=gM zf87xxRch2-eIkocij~5;B+k6(@Grjh!VwGAU*lk=H4PhYF>_}dH_x-EsQ@DUNJQU` zU&AU_$j)-hg=jwS<4w1Ys_4`yB<7u&-|h|C=xsUMc4|H_F5dcJt%Cl&Rz#4fX6NrT z?`=BeXRt=%OyF2O@sZ|Fo>lu*jl1VtIKA{LlMRanc;20V>{3UEGFw&de&zN>((_xZ zqx^(}()N|GZ6#Nu_Dlu&LHKR!II-%NtfOXrOT933oYB)&ZH_F+a3;&`1Os4^31axX zkwYj9EvUljj^+tHI)DEx6C`B*;fWOY&v(K+l^>WOm14!pAHrV`C6eWf2{)Yh{u0U7 zKVN0W(O6L)HMmbs7l9o06gZDpJTs<^TfKsaL-e(Ni}ANqUvM`0>a1_Zc{)o%IdRsT zyRcQz!=b%ikQN@cIG0C{f5iw^`^};fSsluz`ZcbwZ07fT*>VHuLQko-nwss$ZYZ65 z%L6BVz%)K9G|Hc=`Cb|m(Mtm@zfzu&bN$+|OXz@U$zj||Z8^{)OJi4}G`R!R&JKBm zXZnv*pMNBIYOss}##_0snvX_=FO^&E1kOB(UhB@w2KM))Ql$r!q=gcob2j+rjHRD9h2 z6tQ8Vr(9d zzc2}wR3}LOYS;SrUS5mFsU09vZ99EB#|Ot=H|9j*xle#u&e(EmeIS?rB^%Qx070u< zP>&jJdD0LA?HFuqFHl^6ux#gCTN***`w$AFE3d8l5-0`7n%|T-ia4wTO5`q!&Jy#2 zCxP%xx>yx32%?peZr7T$^_{UnKrE1ab7+xxI1>ntdkHyg0=q^qpVN~I%p2C)4#_$F zwP8-B14n@>Vpk`_4zJfHEM(mf)!k>^o3U`$(Y*ASx?Mzje`M>QBwlpJJsy1zCTp)efov|2I_RwfcOXcDmd4Tlnx)Fg@|`EPPRS&Pdxu zQd7A5gsF}^ZV^D0dJW*-KivJ)>5*Ki(q;cTo#(y~J3jwXpXA5xcr)gc5KBo;I~!aS z2mzI`<;)cAz2qA4J5P>vrw~^k6~_R=Y+X|ZQADl=n!XdT)zB6wk$E{ScbO2-?KkxY?8BU^c5$A3@x&t-LWTm;7PY9G=^SxBk9d;k19l zez14i#9G+E?rd8{+Uu6B39o#EtkSeI4$eIV7e3PVFUcZsQTJ}b5km*0<}&DP{LP&- zwta%I+g}~4$1TgmN~IdKnRc2XJ^4ucnM8ivvAwcXJi7DXfdoID?M><&gI8Ih3d(y;O8bKX1U+X8XMAhIpm@t5=x9d3daY+-$IcU zALO|3*BLsu-Qik4m&vx|n)N>Or|u?IX)h@MDR)S^^gY|7$&KTor~Se>wjjN;KmImG z%D(Nv41Lwg;FHPFsWgXIZp$$(rBaLHWgGGGJHG~By7){cn`+b)nXfMY)XI%-n-K1x z-Xde%k6B7e?8SXjNi~?|ewDZsG0Q*_P(?~wfe=>8v-h7pnT!v0sp|>vcnKrLSo8Bs1Pgf1r zF9|3E1?2Zn8pKce4A@4ikJ;^Rt+OkI1|NU;TPGP!^xgrL)LXxnIO;X(1C8U&69NPl zE9_dF-zN!N*f9TF5NT*=a9nt@$84Rh1+@+{oMpa+EhXFfQoMK?B^)brt}>;W>*wDE z?OOWef_AvFJx+_Gal|U{obOT0P{upIkMpA$(u;EekrVe9>g@EFGkgT90$Zr);;i^| z(J`NUikvuCu6JZ|EkC=)$-0Z;zD1Qydg)D+*JhwKpdxUwUZX{>!4J$mfQ4?Ge;=b? zDk?6$yHIIP2PIFRl?xU4Fekq~|E0=hV`+@SqpAz0MI+bCrYo=b{g*J?>a+ga9fkc* zs9SPQCp7CgZntE_mD8bWkWV!e78vBtQ6$!8xt>7a>p%_2x02&=-q7=fWe3ZFCjU5B z-fOd&@z%c`Q@NnF`@#U51;J#ZP1&TEnWYHnS@Ia@DlL{1u!6z4a899If~J|mr*5H12rxZnlFT9aTVPf}-`!LN#30a4 zNZj$Ua6BA*IxGd3^^U-~z!YYVno&k!t$o4 zz@P1a!2|FI=54Hb87lALScD)RNL&4qX@K=|4q1)a^qKZkk*AsH^Ey|JwFFF(q(t}} z^o$=$F=f2aef&g^YVR>ETV0#(vyB&L>5RyjVvL3Rm6LvkoJ`z2%vO05vg@&H9dyvt z>z(VZ==9c|5K?yh`S0PMy;FaQDbxe-PS=3*Mt#wH-6t?I5Niy|=Zj&0JCP@*;=E)ow5*62|fB?AYY77G}0 zk*~~)s1cq}xCzXMvfhdf+SnRM)uv5EBqA@4^TGLe;O7OwfPHXW1mmy5DfRqlEC-}Q z2|njbw1DqGZ%FUMrJ+t3-amu%A8gGEh*xRl!joYQoPHmrpsBWEiev#Wc?+*P z1EOM#uh`OJ>FlnaNASqFnCXxaXTCvP$MEm;>zxoQ9RKILtnSBoCE}!2zbxf}Nq=G> zP~s--o+=}7tuF30ztcv+w`O(;uXn)HY7J~Tu}gO2hA7Nx!u_9n7;4N*hwO$3HWChPwu> zlGRV$gF;%bA^Wd^YjtF0!NhCP`nJkgik6c%l#q&KBTyBd!qM!Xs&a|XQbYu3HmLKA z1MyyFRd%uv&CDI{0J%Vh3d_CMpd-<{e2GLG>c4hl_TL_m3vYu$$q$pIpzRL?4X_*B zOU#}TjpQM%AqvYC9Y+tA!|15g3aOrtB@1wX;z;_Muo)$PRlx;3zl)gwah)z9tsxJ6 z)@S#jI7R`w^+>QzYUj$R|4DpS0*xuFv=KpI3}W4ZV1&mvnZSNzB!{sNQ{e=loA44E zTM=w6)JP)H3vY~1g5mC)Gm{JLNLPWo?>ujE2Gi(}hRb@KhgN6P?ruYKEgQ&2Pvyv` zYKl%!hdPc0OenbdjSg5{@^CCwHX5(?YT++4GIzx9ZhPVm1iO(?90ZK{Cn&-YrFSNZh#IIxX;VzwZ(2C5P z8}HyjYoFzIC&I!wJaDk#&zDJTdpPEw^fV6`1SycrTR>(=FdJdwY#tfN{j&rMShU`0 znGxbfy)3-9Cr9Z=nYnnw>B-@Z&ktl=MlaMk?v4AmS5JgK`Tg;}Qq%qZ*8BDO)v14M zuTb3!2Zm_KgLvx}izR)TfTcQOz;*M=_$(pyGU$yK`(NpLwsZRD>!w{G%%<6Vf7n~G z)_6$m(DnT5S`*rJ%`%t!$BLM(#=(QaBnsj-zRY%S#{@VASEP%R!O4e2augL@BQCnc zyX7$zVWXYfsLJu$MYl2enYFU(Z{g;!xR7l+j1XVHuq8widFTH(tr0kZ4)=#wv@HRB zp+N%Pt9G(Mqr5X{a`#Vz!tYP6_jgYaHcTSMx*amBr+bSGp{G(5chAl7C6WW(7+*4S zAZ}Grm>dGT7+An8fWT*a_cZH@f1dgFw{||aWq&?z?Pz6pG~BM`OGVHxxc-G3!%G1= z!1HOH*Jlz0YjhXsf~SRS)VH&mLnv4jjgBm<;itO>|fPp-yDK!P=2gx{5%nED{0@O9$Gqfp416m)BWJ&J;TqA2kiCgz0)dedF1yZ*?cx1A z`{&rT`YJ@2jN+C6E6_lgdP3OhReR_A_j)q*aIpb5N7&KE*Iy!tdJw(_IHN+Si0<)k zgX;lBm)r_X{z~fs9sKtw7l6}X!p%i`zalfAa&iNF!bHIU7v(BW6M(m9~IM71}g~ z&OJTFA!sh{pVqI|m06I~OvQ@CnnMlJ&|^#7H3ftwRrdp66YoQ#2QgqdTm)7xeTZEHg@;)D_Fk~hcv!>_|4far9FvT5}S8$6r%WA z7l#7BSuPM@YULcA-vM{@oVF5HK0rfxPoD>2d;CC%DRJVSGDnG-h|B0Fs)?{u702)C z;flUXtXDDRC`Pu5`H#>1DoMWgB$b!31!BO&xF}!L5yK)ISSVHO^krw7PAL82J^G?+ zS&vu8>kBQa90i9egoOx0WjS)eb4TWHojD@;fYl6><-Z^~O3lbE{TU4K0}r>RSqMFh zZv7FK>J1W~`)B$(TMDeNDJ(3GQ;C^hGahLG3tlLQ>U*i3OnV&WhWOw-MDAc-?!ysz zdcsokw|sr~)E3qqyqF??9U`Gj8<1{-Cv``{u0d(5+1F1uMT3;f8df<1eVGNNz3~)0fWM% zk5$|%M7=rQZ8_TC+8FnrV9FuEh(U@_6sKSM067?-UKG!*ebJ;k`v3ZUdaxh7pxc+- zT*uF(-{L6Nd_B>tdPu2uyv!L1;cA)J?diJ*#rSy8nBISg z@nsU0N}19Yqm?mU2dnseeY?!}@6QZYY?hl>|6W(Bi1~-p-p{9xso2l(=G#$n%)~bL zzrw``J&>t-MG~CcxmzYm*GK+;<`ay>FC9=`57}NO8-{vUk8O}?^gR&aSJTNO1GQsD5QzM>I51JvoQ8f|j+!#-OJ(5+ zYSiMpvJ^E}Zi5L30<#-ZH_HY4;15G3EO$tW?`5GK8x-F3_EtSJi*-Q34KvMn|I zg)}7En=m6ShHna_G2`6M0ikf>S=nV^U{*r5hy=s}OMgNoB^EbPq?ZvUpL69D2$gRB+D?M&X^4@jEYs2sS3tORfSoR7Snpz^bJObLN~AFhnR zut63ldNcN003A-1yzT}=u>m)c1({OcQ};k&`nc!5XGAiIT(@lkhFfA(DB-_q^}%(N zS@{g1?+VRT19Mr{>Iv$;7}Afm%zcW5IcBqgx>(c4x^=uT)QHWXZa&kGeM%05^7{DO4q1VUCrOL!LH@!z z%Z~jD{i(ug2lfxu)Y~Bp5DT1MSMpRbm>w1!*k|9_Ah|J*D?c3cb_!2UVQ3EQ=iT33 z9Z29bk9#JH^?k2Hd~aWq9I^UO`xKC#CHhKurO#{984=iM##p4#1AW5Vsf9HTsNFJN z)a_C_)pvNG?8~ab(_#k0;&=r#b}_^z>{zC}epS&M1&OWasF_ff_^fZ_elSSo% zHdK9C7#z7a{ElG0ssK&&TIcsE{=eLtAk0uEL6Qpe(NNL{P&=s*?@UeJHzw7qym5`hk55o;Jr$z>lMy&C_Ihj=k%gf)%e(cuh8?U$* z+%oIWWznUztEF3gN6cIn{*FA{l`_=H`otYtdX*JLH3r9*CqDQh1;N8CKRPqHecrjA zOoq|4?aq`L_U={r(HIgm=06c4NL$$fCRKL>H@di*+$nBFj6MF#LtCPJwo01b-WsG6 zdGn(oR1=wzYhTLJ zqmy0dhUOoousny+5=J$-LmozPJs{ot6I2m6ZPOTB>xm*9{(Nhh#e=!+J+C3JPu$-I7tSMl^J=*{(-#zY1GDeh z405bV|J|QgPk8&5p^X=R=y8z`FS}Nen8sA!s?$d%@d9IEbFR}w+S69%obwcJ zKx&R|x#l))iGO^OtYo&ZJKCGEpfD+JL;b;>`!iZkn#0+2U|Ykn^iG9#vY`Azexyg| z`C>+H_)HFLJ%gmL;8_gjH!w0S_M1#rqyTvt_gT7lNN`PT?tjV)ogP)17~V(q=CR8n zxsCEE`kCTR;(>YJSS)YD9FeI63 zSqYpy<8oiwbPR1}xU(IDrR{sC)ikx!1USQS;~^Z)f!8C1Ypc~r4-_dF&B7@1`fiJD zv>zxTAjJOPOFNrmH@Tn7Uaw7F58hJ}x^vPX^=w0L?k2lD1x}ZD&r9!T{~oE7`KteT zEK`Y5Q)5f1h4j(E-wHuakLqzhksb)|>iS!LF}%RftQ2a2mS>P$h6dShE-hwfmf#>*fh8f0Ldr;Wc_A1 zprT-aL+w&#Eg+Ir5d%l>aOzrSDD|h6#NoynD(ei7kGfFvhGAaY`C=Wp6kAf@ck z$|#aI(M`T}#z=Z0VEvwsb^K_u8mF2)xJN1b*A<(GGHHtnyj!mCbeOR7P3X0P_M2Wb znSIk5O?HUq?qks);BlB+2MR2?OvGzfIc6wtN7AUWIxve#b@fx~AFj91YQSWFSsJ=hyViI`&VQ;2zyeR;4JQHcZ*|HGd5q=?fSf+>JpVPaQ$vPZ@6b4zy+HZU zV4DKpu{8H^1RAZk(Yg%)HA-rkckpDtH_U#aui$FanD4J!-MkoO%7roSUYYoCNe5`A zb$I?h|131~x1-eND%e2cSkHSCWi-rPWHWtR9_jem-8+KbyLVbp!)9gnKqi1JP@TuS zSqeUarQJDClHF=xYoGUW10$Puwg)5~4}7XbyBU`1&T7i_AJKtKdp*rV&!crZDFCO$NqzFEm^48Wn1HdRxiy5t$mH>RO)L8^bUT| zt5UPJ)$7@-vd0=_J1p658#-R+=rx~vvOd{zZ6rbUpd^Ng)uZoHz+5|bx7Vq{eD>|@ zq{K3c&)Of(TXjCoS;})i`57SGJhMl@lC6`b_9t&Cd-a#OF_EO|TjRSA<^HV-cGNWVhSmE>&26USF%~x%`O1pmlkq%JbJPf4j*qj~w$d zbdP|6$;SV#Ww<@xE9ahhe6Z6p9ddvl`TFGP0mtdd6uvqA-sqgW4{Lg9+gt2(g4!Q> zR`)SqmPW#s0f*nPouGTj>R4?NwIaiJ2b-hGD2OvpYxIsn6y0p<2*vw>xk7 zH>+-H8M?;1r;ObWU3y*Yakx@F9Vgv`la55+?#z_YaGC4iPiPgQQH!$(JAQP9Mukz# z@>A{Gi~Kq$%;jr4st7zQMRZ)HUWx53QTRI$#iP5m z%xBKQM!$_XuKJZodL3>LeD+=lba+#}5g@pYKhyHa-wMr>c(a|XW->{jWaOhr3D@4y zR&SQd%q_nW65t1T4z?E~AK(9pFZBJZm(O+ej-&D>=_lFykJU~H2+L0{&DjdxaRWG9 zmB!OElkXvH$5Gr_sQA&*#%5P|Rj*$t zlgC+x#fy0qYpy9bucHPy85SeTyIlcj@(MZ{JfJ64_k~_)RWmcq?mXs_Em*rd!PWI# zOgeCs@3=5hLLP?O<#G9IBtttDQE5=QR}c{-?8AWZpWsax{Wwi zZdn)B@&-Ko&F@d$>I>4O9xJ~;+IDgY&GE;}!$HxjawKd1VN=MV-y54IuAx#h=`wU2 zm8~V4R88*>&D$GOUkR)AYkl@E~ER=VLZx7dc7uUwSDsFw3zQ*bEaKUHYsr*de zB~p;nE(dD=5wjb`B|y8>i%sSz+%C@_MN$8P%DKxHOy4 zdxAdJn(bJlSt?PATZemchkMHIx$RwEwWnF`jgpHGqRih!C%ZS$AfCr+pC1ebweJzn25JX%_I>8pAtf_glwU5 zPOC>dcC+bO2BV26emL$Z%IFn|Cdhf3sRAc`hEe4Rk1+LwLXL@>KDXk;prB@W94I9g zZng>RgsVKjmv2mW=PJ;Ijnw&;jqvA5-bQJ}bKDbj5Wl^xlD3}l#J~wVr4;4&*D*eB z_H0js=iIWl2zD{3`;*(%;&4RwE;MkcUt-B3rrHfro zwhWOyR-w4SBl_Fhpen)r;XV5tGTKJ^_jh6#D%;Naht4Be&)apCTRSWCm|Le)alr9U zqI*Eo0dic<4c^o~B1|U`!0*$5{#R+%v4sh$bvKw29|dxk9f?!aD2n4=Gguga*%JFN z>7p?91vtJt`tUZ1du{E3l`yD|KT~LUbjc$}(f7;VM3{TT7C}j)+xs+hbLN|%SMKTR zkHV(Qk-0HkDX7rQm)7wU#b9zUf z_;ANB#SC5!S+XSoW1f!n*ziC)W)aKDr*a%B@WyZ6d^#>K5@bagM6t0?0&jn+iftWw zY5!zOz2EL-B7Kf(?vdv0L_vf|ny7_6GBx%)C^4O*Ae?o_zvj0fw!f~^B%CqVfjhX^ zid6mL>)hXWdQ)M9I6YnqlLW=yD)pY2lxDX$ANPjPkOi+pGNJtYzsl!aPgBjUFC{#t z`r$pJwbjgZ!>uX!3zEO+icwBkc^&yLn=qA=y{1z(na|0A1l{)duibXGje7}Y zBx6tJv(z}D#!2qVK<@=|+*oaZ|Evy3-Y3qj{Lm)VTfd6ld|0g{QGgERz98~l`_W=}O?I!h5t2f~N=@xJN7+7ZWUa$KX@mEko>$$I_1@ zMdU*ccV#Ru6A{pJ%gLQP2%EfB{O+& z|IG#1iLz^{4DI9DD$q9Pj^IjLT(t6ts4hXVJ}0wXt1b54wEjS*@|)J{ z1&#H4nxp03MDO?W1*$fP8>F_MNWQNZJD=Wv2U~rso~tKs2e15Pjf>}`n};N>ZhsOD#~CxxJx`sYrq|a zzfkx1&(C5S*|;+f`d!nqxM(_lJsh`#U#-8v`7xU76|(PZm7AZoPfCriMo?UkNIo#{ zRZDo4Dx8rWg4$5=ozGba{w5%JBhfw7ioA%2W-mOWk)@g>k0Eg+CX@;5J`OVTV|I!g z4E{Eo_{;3J&vT2EdM+U?;LQvPW_-zjpy!{V!TfJlAaf`2U;)v^)^RwGAr!3OMS`Y1*Al;(yvXj_JjYaNMiiCK2)h z-%h&3!vnXnUj>K7ISH&kRh9U*<)puT|M<0P{rz|0x{xw+zfL@x@A0j|fp%9ex6}2N zJQ0ntLmG}#%j(M{-yiHdaEyI8-|6u+iVZnl7w7<4xxfq@<>)?M$Ri40{NwwdM#GD$ z0TDC}BWtO1{14YW;Cw5j6zLiJ)@3A*E)%UH&d2d^pSr)k z`kTWderq0~c51IALT2hYDgbY;^Ce6ju06d=vF8{VP0jx?@CDZZL0I&L;ihEMq!A%6 zcuIX7-M?s@b~CMGLCkw%A#!3#;m5q$olriEj`v%t1{!=#qSRwbPf)v69jP!A;Xh~< zrE}wz+*4csD$U3$+Bv~)g2LQ;tiD(D7=wnmyI@*Wda1@z;m;sc5kx;>|5@+>s_3c= zJE84XIO%7{B~!xzwL9*z1akd_mC>Ly-FMl06KK|qyo{LKXN%3r$`cDsAF)r*Uo*`Mslp0#vE7UPb(P;^V|MsBP zE<|{|;K2I4xIO}dAH$UCg{XzMMR!0EtXbfrl`BFVAus(Rw4%i-LVPOgOqw%dvpQTL zh;L8>v-!>4oD)K*C#K)R09}e$YgceF8EE@w@fVY50vYK z_oLj<9{1Jhf+^S~zwG;BMB7g}9{lWy360T|;1W7Wd4GY2haW?6WGq*c5qOr9FXd4`PNpMwixeiM z6UJDo!Ute_aV2r?d*SDTZEo5N?~jBO&ReP|AfKebZ8b}#vV!3!cv+&rlTKYv zj`oSIVs9wm8a}|$JES|)x;gK&7=EPYOwkh}i6#|_+f`82arkTWum#hf73*kYh%F3}YEHQ&vdPWR;Db?7fqqSGg-%a3y z*^ZUmktYqySNDcjl~)?;1OS=D1sn5A`AmAJTg>kXw}#6BMD4G{FcN7YZ+ab; z4h!ld_2=V_OEwIJieM;9klb~XCCQEZBpW4OoXde#cEHa$i7|xt)8loIcc9f>y$}?^ zLKfLWmexm(x##)!BpVcl7o(48-aDl{4qLl0D(#yXw4FWUG;b<2G;GXJ8GZnz`<-#7 zq<5gj7hMB}?ef}UfaC1fu~XciFwkv|lQ(RS=j?_VwUyVRNWB?r^zOsPb;j>987?48 z6jWh9s;kE_G|JYF=gajzFD{pdY!$g$+d3S*at;ezOF0o+Uf zyTE~bf{?iv(IjjpRSc7&#(^M%Qxmf-L0v-XT*4k6S^b>1yJx-2hV>qIDSXk?1v^LL zIW7zuLwP`DIx24QC8O;>--eGodvZzH$P3g8h@I%ldjmzZoY?VzbF{rwr1B_AzPOaI z)qAksc_HncPBeTT3LuC0Pd+b`$+L->s#8fSK&o-^rGSyrAqFauG~G|G+~gEMV3SWd z{m1O6pWbAVt*v&S-~yP~KQ<;8=8;J9y-Vz}vnw-ge#1V(Bil^;cH563k6Z@>z;+@j zED;10iaRVYc6`#}B=6hUB-lDg<6eE3DRV z2HG2i8dMx!9lX@lqweSh^@nF7^#T=(^gw|X<6xHSr7wi*Vx4KXRYM)8-t~g)>G~%? z`-(gkyK?uH$veqG)|p?z#wN2w;Q0B$P99Iu*`V$}r@!=pf)PW?vw<}<5ZyypA ziZG(a@O|)k`=3T>ID$^>TtWtwjekn>kV2dM_f3$oGlf+IH*d9y{{_lk!WMlW#Fg6ai|;NdqCEHyWsm^J5%R zMPmYod`3hm0=(-LqFo`Z^xfsksXLa@W0BLMS2F89Dg-1Z; ziD8}fO2cq2oxs<^5@}=--48VhUK0~tB?dn@p&YDn*8fnk_H}TmQfPr@p7yn=BAgK_ zz5n%DSx$w^Pz5Rc-Pw?g6aT`rm+tRH|K}l$l(5l}s98%3Z%B;r5t9E%ZP=tg#rO%5 z?}b|%99k!h8(o=16`W`k1ikSVcqxC9>H$pCHi4_2TUg1 zL0=cjU0`v8X-|xDs7ZwYgA8#odk>7~gkGKvH)=PYW%0$>?Ig*tm!3C~S$jhL3~lgR z4(y$8i>hEMmjyi-ut8s-IA3WLdB&3it{mv20BZ+J;ENP*gZ`w(Z{y}P!QH#OSBxeK>GMl^AJRX3wZM8-42bFff5gPyfgZx-QMkd&k6$!u(&D+) z_BIQ(4~(fF&|)>En)RtMf+c18#E!lotu%rsO{w@(aU3KNVgvu@2r{|Nju-SCTS2oP zSuYH@NgZ}@Mnop}&l59fY1SieaC?w`-K<}3qzHhW=h>?az&K6e<4^v56h!Vjqq{065Yi6i1EPcFIHoB@_drmI z0BOUPEL}9K$f8RH(I9o4~-FXD; zV?619lpKvrff+^@a*fP8LtICW)ezg;{m~&@?<7U4KSXT z$slu}p0J-;98g|V2WqM253hrImVm|a1T+UDbi{tw)PJuv4j2ivXh33xoNKmR0P%r7 z|K%E@+@-=?{QP1N383OA+y=Z%4q^5M5?dsP5Rcg|0=p%O?=od7@dC=#yFXM#zWTIS0&6qE+PFqbefG3@ zOXNk+^Wsh|y6!o_3%>$AhOcKb z)V8a&UPFk^W?A}ON}NM>on?FB5&813@?s;U>{_>Eas$IIwwPCv2dj&;p1L;h8e`Ux1$3-HApOzfo7Y zwaoVeFw$H?F3+~I@S#Vl8>o5ojI_oA*^AHju{|L5fx1P zCcokBuJ&9~GxN0BIbv&eb&v?2oVL{&633(s zXJoLALzx_rUk0N3{jaEREvu)J4OAsz*yc-EV(~sXY=4tW#Qa17nuV+qajj|$xE$z@ z9`x)2h$eukNS9wi^EKq$=Cp$kWl4D(6E;E?AY#feQ8e}%vD5yu!iJk330Tp-DI)Fr zzgqg&pvoy-eD{=dAE?4!o0eaF+tNTmlP>F9S8}=`3@JV6NTCMK!z;w;^G~&pZ zI#Q3kywW)3&R<>Wzj_&l7LXkgpm?%A=@~r>c|USqvcFZ*^pC7ggPeM{t-^`3;{Kg9U??^3wIG1Md@le10?5L=9+8J5>PGK9MD7w* z_P+yT&f@{+lLD|-S?7B5+#iN1`Yb>v#N0^!G`Q64v4sm7%b*sylit-k*q9_Lu|b1a zH-X<8c=c};+~ADcfqF@euiJsfcJw}5nV@<;Qtd}xiyD&Dfw_;o|EjkO>cVnG`Z=*E zsxx>%=WBna$rYn3{_3vT7&YX(w|Kr?dSh$({#?)I8}DmJs>&3lm%-BT!u3MzV{Ht{ zO*@Xq=8JzeT^D8evSbCGLUuRi5B+@-Y}84^(Po!zN|S@daHU8c4pYeO2)L^>?rgF9l~%69`HZ_|1I_kkWbJsEAg%uD6a*hSKLwhuRe6rUd~E{!)hNcVLs-BO=9Fij9IYqLMJkBmoa3mgOu!xQ(rAAla3#dbkF*)5|4MEDzfDvq*x1F+{+Z#APsZg1NwQOP4ujMgDWI5N_ZweX4!nsKJE{(mp8iWCViH zx#ch1pvD+qixxwsn7*siCQ2R5gCoMwt4iTMQdm{!WW7L)#PSg_45@OV@%3ws#1IsD z-lPcZUSatY!n9|&b7L4NfXxX$&p{ zFPVG_h!q>4Z)*>ly@D$hj@_9HLuD)|N>(gLb2UF1gB$sag@Gi-TG*sU<@*oeYSwN4 zN&0N&5I`xanD|*}%&SXmxW<#e&Tl0aFz*de{{VNUk_^-#ZRS7`FO(?+=m8Pb9Ap$+kI4{%xRe@Ld)Y;RI`? zMQj(e{AW31$qdU*&qHy9Jt;+0(snnFfgcRA09Gf>`T^N=dqVqH7MnQ0{_AxiF)h1J z1*X>mDg`mm#Vnmka8aJd|0EH>kPVwX%nevhyYlr0N{y*pKr4=jslfE9^Rwi`OIJ34=h~gO1>&~-d^j# z54~=2Px!~@SN!0xq0iBa@oT+%R)B$bmoAW5V%qWv!YU9c5qTu5S3d%)>H{mJUAxuyXBz{PX5r+nM(j17V8wbD4yM(~7S(6-H_eGy0 z5=|LqptFyz$$`ZCWh!XUq^yW(_wOk}%0CRA+ku9au{4xT5Ql+0@$ux{!#h$`gcSiIF6qxOdhn<4Eq)r{tD{cvyK zvJcdw_*XQUtr8p!()eU70=;5a7#9P9MwpnSv(&{mkC~d4co`E9#CUNiY}l*{-yC{k z*6NQdV#cH<{*ADQh&2?ztxg|1y$QOMUC+gB;%mL^!PDPC2WBaqr-pjbjnNj2km@|{j*SORJkHn z1hTS>C}y|n|C>!1C#aF%)O-v>zJ=E1@qqOPV-hw!7ke<#5Gd`pIu--=T!G8T`=Vt) z3}73tm-c>qI;$Mz_J%}@^jxFlkQp%cZ*+K=YVcoiuoy0&=$qys3HFQt4YkloGgOYk z<=tiz3VqPJ6(Jrs3mKBF1JR$D$+pFFTD~Da2dYxy#Hv)H7qEd@y2i1+J*m|#-F~^* z;Q^C;4#>THEV}rznKHwvK2!nKhy+j3FmiUmZoI!kcD=%y)B7R2jPpZq5=H*kH(2yH zT^0Z?UZ!9~wI_tedi8)m_rd~0>bo@6+8Z4@_x>?zQDu|I$ zD?Kn82Q{$=+-3#>i&>Gq*9w#%DrgKJOOW_jadx_yi88pB1!oWw_mKmues}RESRhee zk2huWHc2nVBacryl6Fhk$mq|Rg2;NR25q0e^j-=pC9xr08fFm@+&v4hV?j|6(TcUO z;u==7Gqr-&ZG(>52aX81bnVRIz9FnE8nX0ub|>C(hCx$%b}J0P~uON?KU%eo9>h4O;wi9|S1x147bLG$>Z zq`iK{mv{^|QVV|0*(g(S1z;^uc?zSeNr!xWn_Z1{Tal0#{?8RW4!`FRZgQ;jE zYxo{yoeiPb;{7H^1Vbc&`cH1lBN)^s2>af@fuoWLI|=qagMVXD6}RjTGPHMYq=QxNikPIZQpW}WUgB6&b=gs55YK})f zu&4TU6WT)r$d5CG@CN%kiNn~8^F}GAtdI}X5XaDXHe>*)#{Q&R2#pPnG>3(HnjPjMaf6L<79f@@ zoW{Y@WnD8B81I7i%~jX8)}Ixf2TQ{Ld=AP=hEh@K@9a#!@+Ed510GCJ05#6?>V=GM zb;Iz&I8(@=o=-LG6_>@70GRD#N;dn=;|vnRGUi@>@{gcQJw4)-cXe-d9E>6#I?fA! zq>sH6N*Q}bgXh1w0K2#Q^3p;UP>0(6)wtZ0U~lNX7ZK+(5++qoKmM|QQs?_uW7`hU z#PY9W=6iCwg|U*ZusgFi%8d9D9gsRn+aJf@ydH(ECrVp{(*d?u3%1=0`V)HSN@NZT zPUPLgPPSddU7=P$n%jiP{Qhtc1pFvTfG85Dk>?h+Sh3zOwj(1{8MO*=32!if!?13L z2bp!;NuHu_>3*hi;Cm-p9y3T`9~_Ul1YphWB4Kr&C^AFQJM@tG#j`JjfJ!EtuQ?0= zESBV$@*c?E;QIIHTOzIjz>21q2L~w9O!uL6lq-xN;RSGrS3CsldXD>Ae_9m5gWD*n zQ9SNePDzzf^c5IWhJa*hM^s@B80sB)1l8U3TXch z;4R4`A*SP!<#{ez`XBeS518A$6Me)%A?N9ZckHhDyjTl}kKvd>r1S5R0`%L0?YgpP zh@5Ez*x(#U!sTZE@1O|mM&cm@>V}~80~i(9UK()x1C}ob>3Bc?IR|HT+pqd;`1{im zc%MLcKLdUqB>MrGd1)KljRUats!M`!0U|B60Nsl6LwI14hSu<59u&jrGskt;K-AwO z%_g@E22*F;Swvux8f)b~vE2i^JI>bpUoJ%}2Mg6VDfd6egi&54*E;xv!m4$t^IQPf zVCu`uCt!l=Jp8~Yq+!s+$!Cyrv9UcrDglrtG_LRgQCnfinqGt1#=A+4AYt0%eih=t zmnZ=OGa3H?6<8>~L_c`;a9%|6I-P@A-uO5OF-8mWXgjX6RaH4$qgUGXsmd+1_d5nmN zMxcn8AgS|wM51sC5~84OaO%eoT{s1^av(C2DPNI;lb*EU4@o6(3E`oXge@szStbD% z2Kx01VBGVXrSN|v2*QeXJ?#?&7rO>kiOBeAj4{hu;=#1{Gd|$`2;hwpn%EbrjC%zg z328?Cd%+On{{K1iAxcd7c!6kTXudKcVWV`?@HUWlGX>+i$CC#Xri_b1@2{`e2*Ur* zD-8^BK%u?-!G)Z#o{&(k$*#g+2R=MIkgKua`c*I_iB>*0_J@Ghfhr8|3=9sR{EXxl zfUP8v`NWpv3@2=EI{}74A5SJ){(o-lMTm<^`@R^LZe!^{{37R|YBDpQ&*ZfrC!I z0#QVE(`2*B02uat1Vj?TmHg8EdfcNk&mizTGF<NsT$azqiPr{Iqt7?O3=|2NEyQEzqxx$41Pk~ zwA}ZH&H}4C1SS4MdPw6ihz%6eQ2#dd9imlOs3<#UgYCskd}9aEH@~1WG656+?>7#B z1Lgly{sv~lLvvZx*Mu6Q`n2c(yig+18J=n-76uZ@%r~7~@&2dHY{mKMr_wq8HagdL;o<&gPJnxe3O& zh9qPJd<`7}vv}o4%sVl@mj%R~LH|vTO1{DCty?Dd9v;x@) z;nh88u$`A=yzTMmkzb9UG*VNaLx>~Rg?6l(_$WEv85-P9d-WKHF&B+V4&%XXvO*>% zCJj30#egDT36vaeJ;OCZCkTAvxt!@410jriOs(X>h8Ac!xVyRe2sz#SmddOMYnJ5z z$Jz%XmEB7?u*%%FzT&*_S%?zl!H$hJS{VYyVl-oZJhA_r7y>A5412}{Pb^%2D!~2lG^K-r)k`Y1IKmy&Ek>&Rc#nn zXsw77^qw5js;^@etOC((MX3-EW8E%5Kl~KYZ6kl*)javj64_7N4T)Y8@lBjg18;pA zkv*3f2JIhI4s|P>KiOjgc!qvlF8ALR2AIat7P0vnFpESC6EUy4d5}t@0HuX4$&}_< ziAE`&oW8?Bdj+PlJ24qZd~Fo8n-LYHSh7%JUe#lk$P8z500bl+-a@%TXD;`0>181G zNBwtY?w}7(I+i2%UbcR9eYSNGTmY*PEsQ**k_c+3<7N$4Xhe!zSqQZ4nx23Dk{O5c zG{DXmUDU6u=m@IZc6thU#3EwGRS55c;R;QE1g&^MvGQzN{$=ggU>*n`pYAH}M#R za{?uO_b*2OW_8uacaz!s??GQ)NZj&;lGzyuVKzS)5Bdn0pCEAoP<8YDNiS%7k(?mN z5W6M4)|sHm=)WTk$->Nnfqq0uKL*Ajbl&iXTjTLDcT8P9?yr$V#;{)6p@e6v1&y(=%; z;PUJeaK!w7BmCi}$aX3@9 z^I_q7=ls4#(G7~d;hUrb z{`203PSgN&O*}pw+fSS&f)z?bL=IbHM219o=LmTy<(0tLEPj?}JYMcc`h?YcIer?X*QrY6v*2PKsiuJTS(4$c zbP#yd0@6Ypz`K4-S5H8VZfw~;=-UJnRpi^*=G#AtFBSq}y7(4@`A+))$7LlD~lG`T!WizHWh5H(UFoPbNB#VEXF&JuM+z z>w!`Hj-Gt(zB(k|$dlq4neKNwww*Xj4;({c(Uol8f%e(-#Rp-r~d7p!LRnBzmh>HxFeuh#3&*~sVxd7u6PUAecQg~U|rx8HpE z6+vg^|2X=|`W`ZaeS3*5J7-s$qie&L*r)Dskl%>|&n9x)!ez#A2IMU58#;Mv7EoNl zNTUV)SinO^&>2NClGvKXDJBJN>BMbj8QV#`NDt$6E8;HcX>#4KCQP8b{0XXl%euMF z)K>r|OKCfQ$?Sw>^IMsW>nSfBBE`BV#2TkR{XGApJh1LmRcvm%*l87+l~SiPd#yF{ zMl@~Y8U%xiR)v;%~ch$3X#z8DVZXvjlpy0 zOmt>cO}(;u-;nuu^4GhrP%>LE=4ckO>b1zI;*)fdLmS^}U+sbUOp#y=#ipT-4+_lQ z%P-u#FX{3%H|*K8u)`d zbub@v_I%yot9VeZX|*J1;l2bw;pEmY5!FOt)AxQ!)L8KbHTx&9Um9(^AFlfGnTZbn zrRTNwtWvl|P$8i_$s4$TowTv%8ZP)+(a9C8G{lD06U#U5L$qS0f8mX&KDQ)I?cmGh z-FGY``2UzUL_vmn`;U@9_&i z?&HK5zvwu#A+6Lu!y#ig;ViDe`tO=xn~iV_c7w4K&b(@aSChsgQ*O{PgX7tJxaO zgUf!;eou!h9flI0|*i$+ujVr^HZPjrDg_4>kZ}R9fs1 zpybyUkFbBcmxkuk>8NMi3<3&QNwWdM+s+eptN^T&%thZJwDQN|H3Jj_jx1yn&k$fP zwPze|)A;5(__6*7jF>A8de=1}=T}keztUMXR7vFXb6*LT@BD_3s5in86+~V02^~Bj zRq=e(&SF1fF|% z|CoH4n!5Q7LxJ2BzCtm3Amf!rk^ko5<5X#C>Aw_pre)-R=tY`CMv6Cot=E5^1w1{? z=R`Ji=!hGjL+v_hm-P{xfeICNIQu@-PkhVqjb2fLH?ZReRf#ul$Yan`ibZ2wDAh>z z8TrocUlpZS)hEVSCv;24z_UrMb)W09pmKRzcvUIUTA0)PW+E>nj&lde{QKBQ`Pjru zcudiqTQNzTWOr%cMy#ZxcCn$DMYlqll9~HE!1=QxTey@N1TOI}U1hfMpSS$2D(~WS z_n!=bGLs#?kSX3Z#x_G+3ZgXVyrn#zf#P18C5+o6czlSu39X^H0S}eadeGQZq39Vt z+P$}d`)z<=SIzI5u!Kpyif8DKt_?0fGhXnv;?s~2P=uebd|aB*hI$osD$4y>>9VH< z9vIL;_+-u}3OGR@sPBF)g$Wt%M^q7&EV0kZHH^*Os|c1(AI1xb=jT8ZpjFdnU6yn+ zbog08mUBQ-vS_VVKm1@3IYn?0lhlCeoDpxs?96u3J z5lfCZKB>^J6$gp|=&S?#p$gV-b~N8CUrp1B))pE`e1>fR9CRAAPvj>6}lgCXv^JL-|G}!C$X`h@ogVYX4Jv<(&r;QTtU7RvhiP<5~9uK)7XV9AF+uO@kJ zYEWURwzvpZ4s>gC)xnr3jwom*MnDIue6cRP%VPqrB=%tQa(OMO!wO7S=%b(t`GbR3 z(Pu?tJpW%yA$zU4_NvM;z(?5Ny2s?Bsp92oR2*z>d=)AJ5Fa|}uJSO73Mzb2k^^!% zAsq)(0lOR}BU`}BYC$5IGmj4V7an!Y&Ku+EEn50r1pUs557xXyz2Ewy`@Sb!}P{Qto%k6K;2aiBkcl%Mb4@l*6ZbX&K&=e z>gLj>T*F<4`IDl{ufVjc)9+8D5ErdZs?{kVOx_IQ^NbaSXGd0Bo=aT~mp8;9QZ+(j zIWX;LZHL$Ndgmf`zhqUg_XG6Be7L-(ak64=vyv3y{eyeP|)E!=Q zZ(mf%z+uSB-v_;)J#DUunR{&VucDiW4%BI9vf^W z<)He+)N4W{f=#xI9E6>df%@hDFoE>zaMRN7r&7ox31F`d< zm%|X5k9gz;ov(opnri9_Sk>+R@q48gVWfwQDP1pxQ|Wq zR#Dk~{^QK}8eU4{bf^E{l-*ZTIea!M4G7k*wCiL^szi`x8CuIN^xdf86#%`6?aRtv zlyjl+6kc)%bq1i<&+dPy%@*R<9P^bc$-QR6- z2j=uMLa>f{JnM0B>23S&JCqXi8Q8Nm2S>l`v+PJ9gsKec?Zqp`H!Izs>yUz}-YE7G zByp=f3yxd#fA+RycX=rFXHc$gPRJ$yU-SAm4rHJ>$mY_cY@zQ^cWiLqZ>jiHH+aV) zI|5CKP9)?E;F}brfhiI5QevsvZ+HR#pUI~xw>bDOEI*t#-TAoSidbdf(IU?skSk;$ z>VTr)0WgAhAXWMZv~2K^^cxu!;*+U61;`DxQypNY{l6LFQ@!v_X#;41OMRjw@;N^- z7e*RNPbUVG3kWR(Pe~W~_s^f*6w)99{7ADWkD+WBAeE;xt6G3O8?V9Ec^^AQDmoVp zgK%tQ6*8s)_bctVutJ~ap&pWr>vOx_iC=CRwV*=%fCol*YrON^aeEh--&H>h;>^uyddG`h{}UCKOH0(ygwt-=xc=C z#-I3I=3r)Mi~?&q{w8~##9%}#rp}HTPG~O9Ry?9Gs3HIjigdF?0>*ytB~D&9wn$YMMHwCc+Q5=jECN4X567Fxm+T;h2?< zv#K9D`?#&(+{mcVD~;lYQ@9jH(I3J{?s7+insXhDxIyS(cQNZ#BV z>!9#!2I?i@V&5G9NP={EECXT-Jeb7K6{S4}+z2l?uRYTU%#iW|CPPH$eM1A#@P0=mdLI9Kmh2rLN9 zMQW2C;3YhZtbg4ZKgU;>l+b8^cQcKzCZr?S6ZVxVJ!dV?%o!lFzhk5A349h>?H|4S z;yx<7A;&D;c>ju2eIB8$gqz@Yl3PJ>vQr@o`c5Q@bg4Yp2I3vO_*8e@UN?WW$bJ4^ z+~FkBABZtVJo!yZ_jCZdB#t%rTz(8BtU&PO_xkHOG`@ot)F{3&lPWh3cB{EL64B-C9&=#-jq~I*orsW*dFn!nkJ}3jQ`9|rn^S)9>@}> z2;w^vNB)aZ(Xq#)rI+h{!NlMl%miMy_42KkxTsr{*S6~M+OVRwlnEjxuaBzNBd(L5 zd_Hk*iJ04edQE#f{rEh=dNNik zWFVlH3$67XU0#%?9$dCg42i^XEdI(IaF;iDOG=wmm1YQ+)NVFypZD)Bq=cTv73tYN zl>I0!`~u&Ji7RFJ4cj;f3U<0PM*01h2-0`|3$EUs67`(upxR8qg$@TSP3rhmelPLx zJRE5u%Rxm1y1!_hjU3Aoj`o`4D@U6gC|pC zo1m|^mh_aB%HB6249UT{y6sa>ULUH51`gS{`QAy7GmEOmZROAY2dB@CVCU?;9nirl{jd^sOLp&a z^hDpoKr>n)B**^CXi}%}4!P*NStgNLPk#;Mbg=~{or0mgq-&NhNsjD+I;ByW!yBWx z(^=32Jt46o-ynzK#ZolH#tqKb0=v;H1x-Do1ax^0PWWc_=Pk$kf8%KuFdvFKMbe{&& z#4LA?}>`T{~kPjamprHEl<_hfOw}E-Gcs&@9 zpkNO=`TlHs{cp9D;^~f#ph?9yX$007p5&PA05dLPFf=O%RqFd;;2eg2zMn`dX05%r zltB9ja|26U*N*k)-t^f5^tDch`+Ez$h(uE_CcH?}RdYpuA6k-&>$iRhm%SHzV09l4 z|JA8JcMW)M$|d!s-G|BZpyhgKv)6;I><@YlmX;V$t=^f^>W+1yAVgZv#3o?w=FQm9qds@9`yJ_n0DFZMnzEI@ z^&nVxOH*d;ic^~YP_FQu^)i2$Ug#yUs9d@4odZ`U^|=tSK?lI210`jAg5UyVGE?h4 z7yGzkBKI|a@snjImW%5202UA^8A7h`LlsR5n_&WwS+mYT#XXgG-ZZ7Qh!(_wd1Dh0 zIrZNzG%V&`tHQxeg4(#c>@x%?OKR`2x?i#YIn(_FKD79H_Nbo_2d^3jVXZzj7qvwd zPk$2Q>bkZ6pLt`Y3B1>$A#hNg7190tUWm%5^u1z0)#06~CC+jo9<2`!MG3rSUU>Cw zAj%LO@Qw}H(*X}`1ys)`8Fwy^4#*Y&Kc z()9R!@qV>E>McD6)v!}7%RrF<^kr|(MzAEc%6Kv*mz`XMMVK6%j(~LQ% zJS8>^L3h1t4$|#PL_PIwUltL}cDkWmdiVTg3YmL<5nzDo3Z30ciBo?Mt{nhJ5I+(LW10<^S zk^MmStu5Y4bgYrbj++7NIWOqGyDgCy@jH&&fdQc6n?40gzOh*zjA%Oa@Wu`=|)ig`} z%NoNGnyBo^Ipw&F!Y&(O3XjuYXKP-{SG7q9Op+4ye_pvvX#rRxcRt7`2c1l_n|+DN z2Zh17E7s69ZB_>Mk^U>v<@q$bTvFx*Q6%Oh>xIVNQwjEKmbFB@x#rY+{PVf1dsjMl zo5VSDqaCOvpmG20yGQ%$>u>D+x7v8jZWp+n(>Z)*Mf=BoN|0Z)s{Xs_E!@!_fv)pI z1P6w$5b@EYW*?A!`q;j9=EZeY+m66Q=`){Uqd53lAm7KUsB0Q1u9o!IAkQDYQvO|| zv7q9^f+gV5^Uv<{H7j*;phO);yjogR%#5iG9h)n_%JAO5UB1jt!^`yzdxaCNbi5+g zrFiV%ySp@-Ikd161SIJfcHhwOaHnU5YC`F=2Xr+Z?Jv>#$40xU8O|dcC3#kiForG| zcb0_QWlG%H@p{&+SCk)EzLjY1lxwQOj%4$zyIzcB$49r@4#dW}Tb%pSL*9=0~&>9Jv zX9jW!m6es_&y~94y5s}>)%1%VV=^pboK&UHzCSmF15j82i;KKg`A{ql=@L8vYMGh(VD*`>K58P;i;EbcJ zPbgV>ZGMdHBokE3sy+H?WRFHWEHpPMgU*RuI7ck739YtQ-dKI(&xGJ{26eVPTzHH< zu1xsJ?VEh=gaYYq?R@G+5Cv_?$zN}I314wXza7lT4di`LM9y6Q@we&+aoRVokzbS^ zxi#bZopOJ`sCJ7ox!%~7A}ePXGQHddSStx{d}UxL$`0a8?dl#Z(2Q7`@H7|>3KBWc zl7l@MiLqlqRl|VZ8LtNX;2QF)fZp@sta3M0tC?|Kdwsbk~oGY>N&c=J1!aSj~`qNcs@|8ZWyDYD5I%85V)OmWPSx$-l zk<;zlO#Dy}rprWb9Gf_h5V%5Np`>9^1g5O=j2Zjsu|EgD+yy;0N-f1hs~CC|8!aKp zl8???rtZP7yGt#X@p=e|i*^d+7adwY-Cm$d8x$>F-aA{`%yd|~z0 z5?ssv`ZO++^;lQ+3m0cPO4|)sV{Je5%I2ZSFkq~doay=ty-}fu6&EBOdPFACh!f3F z5u3BAgBD5~7`Vn7igdcU26@hoKUI@Mj^o~bvZ%i<#c+lo7_I#=OV<`;>!yzh6norA z?7O$Jn6|BX!t?!tcFe5{!mxbJ0WaLp_4V8SA`e;ACzb(#2V8L;Nkw2EG9wgW`NBc{jcWfdiq#X142; z!+sQ1HSY6mAwKdOQ8Pi$i72KDgY+^dJ($55E`siWhis_#tevmM>_)U>XOYyC!%dTv z216Kuoq~x&Or4>mKz?;J!4=IEo<^AewLtm$2}h~Gp?oH0cQ<(on&hriFoHfqD3N6d zIGGv!rI>4vgup@U6bw8y&kHO#`+O&8EOU?NQM#MNP$Ib^{|Gs>-arW$D8&el|qhGq!zAh7J)%p=gdL$+W zSHWsMyZJ4QF#{fBC1gM(UY+*+)tBJ{67!^`0pJoLn zo_~Sl!SiVv-g|9k>ihily2tA&t+P&F>wonW4@*7m!Jc24l_5GRHAcw@`^ zPIQDwF3>l{P#l)FX}@x}Z^-5i^)Mw|SZ#8?F(Z<@5#}&nlUzRT`xcM`MvPC{19p1f zyEKrjfCgJfx>9=YXT66KjUZ$n$pAl>ECYph1y9AT==HMEt@no2G;|P#*3{`NF+WY@ zaLz*I1!Yom8yg^-^ye>@FtMu^1UHFawBz4`!{4fSAaC3K zYu8|OLb&?Cvp9otI8&2BYj%hDx2SsQhBR7=Rl13&fyd$odQt47G?$;=7lS6(8TBQT zoQBR&L*)$i1m)B{cieVSg*JKNeQ@Er&=~=p;b`jD9Jrfu9FE7)FQn0OYZX7qEEIw8 z=K+W-wbN)Yl^YMH>HUh0>S9ztoEgY65qbn%sKBSx^c~1 zV=(nz=+pEo?h>BTsYUv5_pa^;00Rj{gA^S`31Z0ZmG4CatwinGP@>8&uMgZK0%e#QS%S;P6y~Py!eN<^_RCkMP_dJNDQIb|D8^ zF{9?LYt&|w9-0_rl$myc^iX)OU(s(E{?exvE(hrO{x(mkT)279#R2oeP`RZYCaTG; z&7yA3cWiyiPLnFFV&R9+{>T||27E#}Ij?)lCvK+6Uid--Wy#ikda7?+CIdC`jpSL- z&ekbC&NM7Os{Y8K8Sh=k8xq2Hz`dCITc=UhJb}POJEyNd_Up5?N>SIxz2)jTm(&8d z+zIK~kfN=dk*r0dMNKeXr#3UYeF5J;Wp2es_Q9M1Ji+_UNy!<`Ufop70Wud{PT}_Z zT&A*|l-T2dcEtJT!umap)b;PGY85&lsX7O7`*NNTGYcBnR6IN)caJM^xN|8dx-@Ml z%v>NScBgZc&w{m(9R4-k>%?iamJX?1%1Bt7aYa^x5fz^D(P-M!j1`{HdQmZT z^HdQP44kB*?$hEcyYhjhQ_=VdwQpl4=DgWh`2jqX7FfH{AO-`4iL9KcjPYhm6RhXJ&RT@zkFHMp zp!JQ(_YSPK%ib`U-3{I*5o?*~bE4IYrlfboo~U4nb>(40N-=UGi(P!a5NJ7*MJntu z0+ONac+E4j92}VZ@tX~%Lt>K9;>$fSn+!TumLexM-sq#sC4%( z8J=3CnC(#u@#0`laK8Mdh*SjTqoY05na0VUeyy=)kFA5z)B88%f)Ktia7962$c7W# zoQ6t#>$mR}dKT7fk!p~{9Zi5q8igAe_P~SSx58Dee+Zv^8mQORd1~?Lw#$!o5f@w& zf6pqZ^Gz03H0i4+Qu##$9$kfMXAPVI@l%P$)_xWgVn8DWyIWr#bZ4nbf4x7;PvjJ6 zHRJ0$Fl?3rNT%C>lGpz+1`2f5L*$!81|5y z4e<^nuF$y1#S*A&rMl3YR`f{^2fc{d9k9y_^fCNe+wT9~#)7-(<&HbqU*pk}{lUBV$Xk#I)+zP&%xWy7S5(hAvqFb25vOBJ1!=68!bN zJ%G@#1egqG5WDku{~Ef1FB(R2T~x^a3F{)FuH3yEAL-OLkb(a{eUL6{$t|FZ~pb* z`Wzz(ucsr|<(HJ?DRE**U0KCE{1IMS8}`(P1(NRcw<~tU^%p)w?^t{q{`ifODcFbF z<&iV)ZHXCIBdkWw^$Kz@U;VGFC$8t#h*4Gq1MLCmW4Yjhkq@f9Ry}y>kx|`^Kx{0) zwkStRV^t?t`%z5YgWc5FyW07MDjfIlSJQX@rP2w^&26~scuml>D(<^w3n=N+T|f!Y zU*T%0d(8z*=$N?tAe@xGBuVfasaE!jm64SvPO!bP=qc5-O z)Q|L=qKhS&f-izV#HyINO#kpE3z}^UEZy3w?r;j0(QufH^J(n6iR$t0gp%K;(RT zzI*?DFxWuWUuy4mC3yeivu)h#s}01f)7ZpoD1&_AB!sr$oxLv_+!*)3_zgY22~nM= z>2Mfu#4*TrCuf586f{{n{FuwsAa5VZzGDU^TqAwJYdYBJ*GiW27Vd-NmmL7pmA&;%w8Auia&Y}O)0)h9ZbjqSfv^Gd=PJYFjauOf_Uk-tyRfYxyT zC*`-CLf|qV%Wo1?uh!RR(O@Qq@{_eM0o>0b6LC3{;O*bBaNo~h;y895%l@?8EXi*F62re-9L|g~F)iK@$GSURMYy z{f)C(ZMz!yD#>s+o83)Le-dpO*rPA*fy(ECzw(_7?cbrPht1%^{&1G0ox=|bAA^E` zjJc%a=#0WnA=q|=#~w1ub1vaPOSTJeLTBPhZB~u`6{4@fWZGbGOL=)g@(#$xuiKSO zO$-_b-$30w?aH{PNnetve$*UvT05k5xFP zKi2jY_>`Ip7s7dJrsfv}Y-9%v>8;Cm0jYuzy1-cO6VS3c0oTJHD5a3I$tQ_*%f|+u z9vvo zEk3ZJoP>csy^zG-_#flRWoeMW4dxq~_%3F8tc@{Q6TJt(O3h|7^I0bFyp*oE>5Ee0 zKNT&&#zKmR9Vy0f8SCOFaV#=08xZlWuE7}Q5U;o|YqNmiOdk;;lZq%jp5(WoNygC& zNY#xMuG3Lsn9spR6aG5d+~AJ?+<|;$HeAMBQxO;TslTS2_A}M@?Uzt7NFccu|1b<2 zNmN@DTnBmi6;Qahtux22C0{^d_|esC{FA7fi$C7DLc0cE1$}TlPhkt40Oom3onxB3 zaIky(vEv-n=bQD`vVtT6y#uDHWOppEes)(p&^$ZLGx8#xgfcNAMOxl+TZdc~Pw^HlP zxOkN%iDCY-D3YV=vvKJWx3W^^mfEC92j`MyOr4&6N4|s#Mgtgb0IoGd#co&8MDKZk zG1yazPoEApCV_Sk8jSY#X5YVhw704m$<`LuaL68m;85ilaq_~Q=hC9DJAwOUO+Fx; zsDc_z?c0h3v5e__6?*}-Rfm69jKSJ)VfhP^|Ro!pi>S>92hU31d17Z?TB=*QM<)`;z-29b<|&Jsy8x_E8E}p z)zpv^+7$-3g*k~1&Hw>#|CKcrj%i|0Iq`;_hY8f2;l*jJ2^Ln&bAq4wLU=YSkjl0K zD_gbJy+NTNfE@3X)^2k62C69nYi9vTSZ9v$oxbwnnw59p*T$jIWETnT<9F~?IOxTO z0WFtnHXV#CEssFCV&eH*&trM;9Y_o4{TnjDJyl=Bui{V0#%(;80+EK3WMAN}|^}j>3s3xv(;TM%y z{fWNS2*R;mG%lyQQ|4$Z>-3MexL^zBQarCfm;6pH$v1~&^BX5%*Xtv&8(?ui zG6Es}Be=Z0`iI`ZbI_WZ{LzN~qTXk)=vPZ-mj|jFEXs)H9f})VNg>>e3`u~QfI;`v zGRHsMr@mn4)AnO1j*#OnTAOSLv9OL+NN&ukaFhTQU&cy64nYds5>)WqFTow5yNeC2 z4n9-gzxx_7Tw+H9W<;hNX|y_q;8C|XVz@M;+2!9dw%1IQ-(W(JE? z;6irl?xYaRe@Hz#BH}snDc0B+9#=_1e5;))+IJtCGMEKPo*oA#>@Yh!^1n;mfk#k} zm~|8ur$~IE2j{8REL9$`pg@vq2h`BOibVVj^5SZW49)1Ta<$^4d*tU|K=hr{5i4WR zMW@40X*U>bp2gI~EQ#ZhHR3n{*pR`6)hLfxkmo6%EI&$r5=M5=pMG{b>s}gO#&l+` zA)JX&DOZru$xmj(v(hX3qOcPsiVM|^HBQNJCZbG{7$I&5&ovL!*>N40nUhJnLqDVgLZaV71*b9z6 za|ZmsiboV4e-j(ZhiY-FI?M{Y=3?P*YLZZp6z8A^=ub#jXHwL39H>@>OCE>fU(^Nf>8|hP&4;cd7rtVrf8#C;x zHp;?IEkQ@W8J2{IGBtmTfC^R+$@wK+K}eIZ!taj%zRc^ZFuV6A(S6_Z!x11rMfA(n zXkFZ8A{%(SP{ax3>}Cl5JFY1W>=YCdErI0ts#Ak8mz}OJCRR6(-;W9~3g(cn4!K6nJ;tOF>_{dETK}wuFF4F;q2~0s;nCO*M zpE!sp*u^KXebmHn5sdn;8I2a#^p%wyDN%H+Ne?8KpV}EBsm~uJ#$-o!{m`8s{Vx+>x0)`mw-`&hrSmPlW=OPuFhS!W zH?HvCXJU!bMd?m=V9|Pjum)M34PiM0#Dd5RkiZ4#$_Kj#zu_zI%$0^f7e25r{x>Vv z!nT!mKF>-DxQx#xTH2Rhda>f2HY%K0oE-jf4v!4V+{w z@p%5{+|ks;JeaWHoW2D^8vNhQ1qkVWFc3HgKVk7evwH$O-Pxg_3IBA#;QR>iDlw0F zjP2IA)h8}16YD*>zE4<|FsHI-`0t?!7h0F_-|f0(g63!6aNzNqEer*KRkbq04O#J@ z|2sXaeK{R!B_S?uy1{|@WPk^^@j>4Tf8xR<9(o#HndE-uGLW7hHe-RuT8Zx@H2HQw z72H10ODf+Jd=bWAeogSAEvz`+>svFM(o={bF@n4arxH(zjLyIy!Jflv*uOu!4S(bc zUA!A>;*#IVg3gty0X{m+{OMB-Gfhx9Exk)FZ3Q3J!F7Qii5Xv^$aZjX0DpJ=k`aR} z6hzGZu52X>ZpnI3Mo=!ztevb8yCVb>_sjeDZR7CYwu&$)QuEnj?y)OqtjI`yJ^vPX z#pmFaX+b%nFHyKdoD%e=Q3FZx6g%)h0qfY+Y5cbWdEOlh(Tzk}-tUq4)1);=Fhme= zBRaz>I(|l+Z%~Sn9EB5>98rOs$c(BLCi>6&GX@v&;Nz3q$Z!j=x^HPTZM(nscC^2m zb!hIm^s!IL&IfgI2E0}88UJT}yzKBJxjOEd^=J8jOa|kfv~oL*t9cdtf$L;J1;>b_ zCrFRYSa(5zn{N|S$3@`aEcGwQgkZ@rV5HFU-@78QdAsbqD{%8XyESrl2HV$)?X^CC zY1#Ec4!BDK+-kwUQ{LinVQ{f+cYOTsf3ET9U6?(;Y4sxTInf60xyxE*&qqXuj<#LZ zDT6*c6~z@Nfg9|rf}qv=&(MHhjzA4IfuE!u-ZtA%faO3DKI>cE`1$C-rKkS7!pST_ zz8UM$UOf?m=3yphfE?oJzhoKwW5WObv6aC6BfaP)X{9Ykqs`^XLRR!`=4*W3KC|}?mK?S{!d_)C6Xc+Yv_NX45P`+k4_;?E}CHy?EoUVx3 ze~~nEV$?9`Jh_MIC}eISu?Yax11L={1b>r;ngY~?rM-Y(Y>ldNG5fYv$SON!v_0ClZcd7IIAeV_>EF(%7c=eoR_)>MUHS2#Lzy>}5o&J2da9F6X1E!XQ`5M$5 zB;ukuQ}bKqyz$L9*Q?@=q`Mi@u}*+giP0}GTB-ge{B3_cdK1EmB7JSg_Zy8I@Xr1< zYjCzS`YP>Ty7F=0>%z0ijtr{E5FfCb`uk`OFl5+wh=s^-Ib$4PZ=Ojj0AdV;yT)Nq!Epsq+0$

EVDvG-PMUj>9l8kcN-K(x4Jbq$^5!wxCF{qX^m#_9JpVzeYAYC7N>JXIRqUMVXiX# ze=p-J^b}Nwxb$UA(aRMwT!aW>>I&if%`{H6e#h;B)bl4tQDysJGOs&AZcVMT>FuFi zw}Rd8+<0$Vm+5y>*F6@r*A;wM0T0v?OoMs+b`73_H7JL$x#C{7CvSTh;GHD!xWv3{ zcN!et&{s>N^WC8^uEji*63NMoVS`N2xF$fGu02OmeQ}*`W_dOf%>tU2B?o7IHaRIT zLeB6SQ!#)XhzUmn(YC%?KkxJDQ9Ws`v^w3WH7sgp5jX043TgJKg`| zthC-y-=w9q**#|Rwf@X^eVg5X1E!i`1I^5ZL@@Mu!(NTU{-MnI?$T!c`DwTDsS@C% z0PdCI_&ONH>i_^_2R79yBwnC0a9C9Tt4SN!29&Lnb?=9xYJ{!@N>@zS4R_d{y6t8A z-*G}a4sjOtz|TEihbmmO!6d!&Ov&01)mcK(HBmpw^pzShJfg3^4dzxq?`5SI6%kQ+VWp^b&=pP zJMw}(*kQQCN;W{Ab`Kv;(#xiGx(pDUWr&iGWG8kl<00Zj9=&gqf=_xTUw z=iTpRVkdvTa{ocdumO0qVoqbyV1=PF!gN2)8>1(1UiK^D@ERdCR|qVgLVh^dIj^y# zTm?i5d>ntsf?dWgy568MMq+pMQa=goF4P1a?S$|LYRno}_Q}l~(4GU35>H)KJ&hM& zk`AmXFLEBpj!x{ZFYG#;@QVanK>b=^-SXSyU@Z}0^-9s(dB%aStZ^5Tm?sMv3wXEhk?N%4dNXO6C=*pInlq98EEB3i7z{q1;pHbjZAR z`xNvX{Cdy!O}v=wQzdu14jF`uW>(4NNAnWByXs559D(lMYQfp|-D;AmSAD0SR!K04 zh}7#2T@T$s{_(%$(1L@b5*J=REDZ_suHSo>D)%xXj5FXBIbYF>bwFl61nXa~1HAl$ zew%qFRXB4CS7*v*J*#&HDAmU80fB^fsMI0Zj9iT`(Dy(!ecyh0;VH7&>SX0R<-cQ_ zx(kjCWm_FX*5&id=ifykG@+Hb^o%bsA~vXtea|dyekk8C_WgU7OM=GD2%Ri9K;!o< zTwJN2t@4!LZR0s)f;3M5*mbcGKZP)~N{)x%DIy428BwKa+X&Bp>BEH}`1c4z>l5%& zYC~x2flzMsT8P}bVA7Wx5%r1v>`7P7=xWMsIxpdgC}0l0&4q5wu>OMp7#euHlE~PT zasTrZqk>DZ3__pW=LzD~3XbB(v$}8p5y$x>2OH1jEEUA@9;7h@1x)JtAk1Y_94CXh zu^`_6te!J~SwdstiUuh z?hculf3!nw=m>dG@;7N6p33ega?Koo#hrh|?fPB>B#PKBZ?=H`!NfP8&BxBal`Nad zMds^+&dY4-c9_fQiDto(oJ!YaLL6TosEeP`&m0s^1b72x%_C<`fNt)|`|tkla5o+N zYPy_xlJlZa;}EQ#k7st;c)P_XjM*J5sBj#`@xJ8f=A`id;~08(HuCxQnaFkLI^(zh z?w|?>2PS?dkx%^bM`YABN)*T9@uiL9R=XUr1LmtGK_M*XlxcE)0;d2$+d4$DYr8M& zOG-Gc&}~IK1vxnh18KR>TIq^4KoIZ*bXaFb?F&P>G*2F*+_-5M7=#w{=GxRN`+_O< z=>FvzjKSexWiToN{kWp!$l%V9820GSnxTp`^ws=|_wA4PMos@<(B(3_H4`^kZM3_Nza-^k;-ZjqzUXsVwrTwpM?0uRrgtd5 z*Zt?AG%)S5kgzz3?x~S#(U5*k*ReH;(OJ&Afv7ncM70|SKS9U2_X?Z;v7=MfA~)FP zi^NMoMjY%KB!CGgFk?a~zk!|6BxfPk;0Z62!9JtRf4wOG-RWNuACBrE)>X$_Z~&9q z!w{Y*P;1|9+ca1jH}(G81UTb01ByeQGN4&^cnmB!1Z6N0RBzBak48}9v>43qtZNGY zkinrtnCZ0o_Ng(Eh|x2Av+lqApPC@|Jpy+`ck&YFe4ds1;5cpys3lGspOMI%0XYpt zz>EI^Ruh>)B)`K@laaULC*Lg6{hm8lYYLCU6c{ZIVCxNHDc>B;yRH2yp zKSf=MBh&pK-&L3=iuxgxj+yc>&(q;pGF?PJ_K=4sGM*BVwvwC8c)I975l_k}zltY1 zC+DW)smSsmBXWf`$u)D#X216wJ^KSb`+h&)_wjmPuQ%0})gjXPslLg6&MlguR51A$ z!1Z4=s4EKCOZkRa{-~GJCFZvX8(k|LVzs8Xs2x5~<=F)9=nwiMSS z>bp*jS~hd->9M!b*Udv(gNq|eq*el(p5&d{n*)}@@~>_f_8aa-Wo#)R)lkf#v~0Au zgP(`>ORdbb_;kN^{*LTe_4)`co=cTAif)g=M~EI z;1TotZZ!>~oIoxDh$nea;dlqM$`uEZmda4KANCgQGp6gCd|CC6n-mz5%+2bM^TE3! zj=X>)A5~~!fl@zZUBfb0TEtQ9(rvRxaH%T!rin%-J1%3sbC!S^jrF|{_TA&bC9%AR(<`niBNRrIDH+uu}1~qP&qoi-kHs>_L z38RpZ5^D8wY7OOd>?m9MG-$YHnO($`tQw;jk-+k%#Z$g7q@tMspg!YGa~@^RA`bWWzGAT~VEozBt222Z`u_@&t+Kb}HS zV*eezr zX$Cj_xRo8)oA#vw7R+0~81j_e9j8X3Ku>`r7 zl(XWcj^ISyq`8ihbhT4I@1;z8&qGW0G9y-BmE%EN151N9MgXs**IBY z=^KCTGh^uPFYmG}HT_`5M<%}catOv|Ypay-SC^6(S7pn+JQ6#$`oy6b#a*+x3V4a+ z`g3kKO51|c7au7Q7u5S^sCv9Lf?D(^;#j8pojLDLJ z+MVR_zy}E-u_6htpzT?tb=|VTX6SPJCPzVQw*G z4&Qis-nxk~4!wwHbzUo@QJu$N;v%binHl6zmfH^b{2IeU+r2Eb01U@Szc{Il5w2q`hff=h5KbL zc~PQvZGcXXX*u}55a2Hm4Kd`c)8Ak@Y@eH`VO*ZYr%arbzOITHrM zPSaq8Y3Jf%&5;#)5zqIuDInUcMKdxWA5ijHS+_>zZoDkr^t42*D%eI{Wqf^W9xP)} z^mjlFG!tfMBiyFPhO>d{`BPcAAk&j7=FJp0=DU$!ITy_Ez0n(#_W-h0-!E%_id^`d zKA2P$c>WC3seK6t?6+_rY8!>EHm;A4{5QvP8)^&iq`l-odg=%w^)OWcAHHbV(94qp)$lGq&kEwj2k+ejzoCM9(&VUhyu=`m&(BK z-@AJfmIAgDHIkd1D~070b%s9Sk5&S94b3NaiK1dZCm>`Cri&$_^ogp7xpOD=meTmk z^Wg6YuuJAND8-E%;q5xXVjx@=wYPBAN>_jV)Jha&TQe%P2KdnaLltLJ*V##`=>M=S z>_?J#_75^=zuoNVJ(@!63i%|qr_eXI(SHi~$v2vT$ zbPLY|#iq(*HDw+kYJ`)W?z-~{3^<4tfpPeTz?31Nrm~hgRqy!MasDL$FYS&~xCooZu95wPU?KADXaO>vyTeKYx3T)A&Neyn>7!|LBhx=lwUUj z!{0TGxp=1YG;krRD7cA_e{ zc*R!I5c-Bb`Q}^=dKRcX(8p9)BkOiD_8qbiuJhsFJ>wOLGajtqHy}MYbZdR9^#RIz z+w7S1d~NMuXCxzxgk{VY#b+Oa8>Rs_&Dvtd^y%%uM(9o++@Ekp&96qx$16=MVBtpm z#$FncNL~FM7~WUNX@K0@UrxlK%8?Ow&2q5=HJU2Gx?8cFO`mfUeBzviz3iSw&|XKHcn=49j19ot2EtZM71 zIKg#QJes;(cG?qNxlm%m1mci(&%_p993aCc=ZQz`dP;qzYZo3*7Q z^0?z_e-Su?AJgWdCNGNZ&=yk?G0r+9<>8+EmQ5)MuxZ(eygA!wr(YO9p!9bL+THHyA zo6nu_HSYXCS=7FiqDHij)^{D%!MNxHVUNQH=YG2HxNebx2$ z^)~g5e)^&f^b)_Y@UrB8&)+XsAR#=cA05|S;+E@Yd^l3gK0QMRHG%FamHx0HR)lBEchozY?!p^#-J z`TA-|aMAz(=(Vn@T?YUO{}&0U zDByoKyax6F;00Q0myEq`FJ({<>HpkoA(*ywU3o2EsGH#WD*l_+JeL?74uqM)Adag=cStlm`)?FcIM8ObH$kgYG{ohM}2{#i0zJ z1(%9N{`XyQNfc>?xRYctsFm=lvm=Nu@)a@6zI(2>qk0ZA{QA8!#Ygb@sdGUAK;yY= zz%k77?(fqd6|1P*5N&@~uPv&f$s$6rt^oC=cAp6|5S>GiSy9m-}Yh*W2L#j)kevO-9rgZvG@iB#xPnoW&mrAWo!fsLKS}G!ww%&MPbv7@^M**C{ZH z4@|V_NUHK8sS5psTHX%OAy%xPq~-sn&A@PBF7w>kG=Q%gr1oRL&%M{kq_@6XDrfn( z(*-`Y=6f*U!^{+PAoL!A{`uZn7{yC$m7VqFrR1Fry-I%^!7OZz)aL*LN3$HD0|?`T zdY+fIBif!{GdxMsUINC50{Z|cokR;F?+d`E-g%i+lXm!(-}NMh@^dLWZFW+1IJy?9 z{HolYgnv@}K^+CnZfURs^s>BUCh7aBc>-zom@_0viGhN!B&xhLxOWeh8@vBRsGEHp zqX$Gn4r`e)R%Ci)eR@zDwbUhkBoA;E>}A6C+-ZW+$V`kPX+?6N_$o;&m#KtNXhyXg zB!d$PFcE{={YuiV25QdqtM0%i9klAWOGCxlq%S|Es;9v}mEe;D>|)w{anz)ZT{3_C zPptewHQ;8*p&1A8xh|yv*KRQ^;e&F!d&U}JijZeO>j4}{X2kn4z8BV}K;Hr-k0D2fSggt@C&jZ7`u zjLK|lAf!ljii?=_G_%zp`s6hzIXem%b`=AYr# z%x$e%PrK>Md^H40&i3B?O_FTF;FnT;apPl05BwRiDcshv6lk(hKK#~|g&TFoF{JlQ zokDc#|2dgl5VE}udh&`MoUr(R$B_Bc)`*;%!!Mzz^A^aagS&xxX%wOs_C!T*3p%{S zJ0w4&zNb7(94cGr3Q3BVeAdJB{y}(E{hd>a7n8o@$Q3EpXAmbZe09<~6U#so(R#JX zAP(-3?9#l{za6S$kvrbCCxO9kWi*S=&tm4P^X3&~E)AQkH{RWR9?Wo&DwNwtm_cz# zV#%tMOTx4CP<_^VX~^|Wc8%#3bnt1UfFN}3uT&-^3!(z7yKdYT*eyV6JXu zSz~TsL)$UF*Q-~@(nHmcW*174yd)DtK1z=lQw_Tmj1kHV!<z7d+VLHz>T_aFO%E z1NOCjS*Kr^63|j$Ksl#I_8^6lsv&2th!(9y)rJtJRvtS?3O=`y%pAa`1t|M!tkkT3 zS6uDW5zjHNw7=J15IwxV?VliSrQ)i*P4wNQX(XZ;T~jfU7z=owYW3^WP%y`3gVdyf zST!D5e{}KNA>YH%>POX6@j6RZbSEiByVc2?l&28R=N#J>>PtvZMHoGYG5Giy1nm$T zb|#JvP;8&S{Xlco1;=1q2#m`ZWbQvzk7RwmbhtkORE~CRJl4+ddoDj%q##@3i+v}} z%Yrb4+jk|;rD29)#2(4oOM~T7MJ@j&9=Ln(GsHBHUtvHGTa`xKE-`{c(UoL>DkyDt}C2%ZKNLfw(ls_!1QRH*M%D$8$;dT(RiW_*WH^}zKdv5C;QpK5|}Dr>m#9+^#tdFpq=?VXVuaC@jWKzgp8 z&l&*}T^DYSf*#}2L|$whK1Uf0aDMB0^#^O6Ub7jVU8m9eOO>%!oYfD8E4Gw%+31ux z3`4>6Pooz+(Fv$Hp2@r$aQjoj2-<8*oX*kA?sqU${X?I8%9E3k(sB5h;*%vT+zkdA zVh;3I4d%EKM8M=`{RQhTApBRdmA*|4t4#6*o1%DID8MB?r4!*Ns|H*D`z|Olcs@fXr1E;Xben9Rta)!(a|!Q9oSeL zWX#o!ZCUyArP&BT?|UTUI3TP>%o+jbEk3Eu|15dfiff<}|m31I%%yFk#?D^iK%FOrlG6*B(4;KfL*~xVitsSynO2FmhVfogQR1D>#Mu z^l;?&9G^7!zBP0aCB^KT0KtjrqhbkC(%@ryf#@whAtB_-5Ap+4p+6iPtoKwO?Jbsj zug`>`p8CZEWsyWM&)nf?1x0Y8NrVl;76<4xr%InzK4!gaY2C@{UV$5twzu}p*OotAD7mtAbW-LX zhE}}3R~W?^sf0pvfNyIOb~#xvH-cLxBOahU;~N%t!CECinxWTF^1|HUge?Gz$6ADzTo5%<_s z_Lro&JbEvkegsZk^gz$Qvv~Lui$GxvRH(%&B3plPKqS3Lif}Q;L0%j{g<^5A zOtU9bIa&}9PdQt1tYjhZ;X7BIr~VTVE|LPm8IvGVKtS`}rohBD4-^?mddwLrL0|UT z|6A1^9;lNjD#_5Csq8D^y=J@LXV-}dp%4B6{h6IRPju@V1Df?ui6bhNt1zAqrjGwA-hx6Z4nQ~YEKZFh$=U$oTG7p#8duz z8_g}zCx6tqJJ4~-Gih>r=S4?2AV|S#o(^+4Fsx!!RRNfD0~3hv;sVJ;vl%cZr_VFO zU0tNK)-1X%Z1skrH!oa^{9xq^W4ZI##Yv`>FudDz$M83`OazQv2fi|E#or(vb*vsR zgA%gjwMJwB-OZ|eBOz-?e3S8kjVsR7%Ktejd{^3cOEm{-EPH;Tu-<>NBxXdBzdh0; zPtgM1ZNcY31|o$j?>R&mAFNGspuV2#^75gwO~tW7v$WRz1$r}d7z^i`Z?Qo|0Ru$U zrT1S}s+tbF+sIVc+Rkhd-sn}D0_3M3Hj8v^YP=7jo#fHKqhSsD3}Mhagbd1+3KWlt zq9i&|2gdRZy7fXZDGw0euo#vkDo|qP{c!>N=bdZk1>Gq?_jU%cfW3D*$ttGK&m7eO zu5vY&dPKuOFlboJ%iQLIWHlUCZ0A`x3}6RG`*?O`UwZ6EZtGhC+bT7`EU>d6W()UC zZYL(_8ORzXY_HGU(V6d)-;0udU!#4(odNrloYt_x=ds7aK)atDE3}c{|Fsbk2EOn? z#Ei`CC5GJf*Q(xfIzG);XwT>DryW`#Ozn91m|XL^ViPiSuzK*TgAzJ$J3^;8F9OWf zi|Q|w9v6>ELogXHSJ-u~d{-nS|HYg&D#*5K3Yh!#E{&Q>^j7T$e}Pj^Cu1oa4=+@! zXDEOAj?pFSBSGumy~WndS5**x+@ZbT_NjEL< z(0ks>^{E_0XSPpF-&$0`-Q3maq0S`E1blFLJ^O6RwVP3aB8gCN4g zOdR9Y@~pqsl(YFiNdZy$FhNZLh0!GHr^-75AFbgDv-RzdcVvYLwhRVd;Tt-dVHI3Xu0_27LyHAAGbW4911&f))^7S zrEpBV>7c@U-(kTjS0mc>E3+mZ0$@fiWF8$z;z6BA5{Ao%$M-$vi$fw@95Y-#uj_3b zs9tHQd28i1IiiRg+NJ0T94uo@_qvO}H@rfvJWfWOf3tdu>>|sZPqb!+4A~A$D#LYb zkxUuCd;k%w*tQ30h&P{fZ}tksexhYW6q~bHzX}}cpmrzXd}=L$mEV6XmC0 z8Fdw-e-@APKdtPcFw?-kLd1Q)WIP-IVatX@7={)mna<(k9n@J%lYcFQZr8cIb{S=t zUy|_sysfv_oZppvM>Anx)bDa^)mI+EHXYcQE~EU}$%WRx@5@5CCSqEOcn`3b37)tn zX}%OE1bxx`q>Fs3t+IbC?|R3fv)Mmv#2`8_{;T$51~>cr zCz*5)?DCLS+s9d=bc)evPwX%I2_j*S| zXJ>kt<3M2$tfqDiGIA*zR4J9;igi|WS%^%Mg(ws2!_D4Uo(~=_ygOKKqq(s(%tCqF zr|6v(kG;d0A{ijYDjL0}(eyFTtN&4;8U?U9o$1B*y12;b&0PrLC^(QZ%R-MQYJqbx!lp>c+Zmz%=l z&vQ1;R;(EWW0e2Fr1v2hPc&XyvIaX<1&Sk}*%os|2+u6WQ z%7Iqy;Zu_uDOd(aI{qxq=^`|xU2%B*yWU%VGtpwDiFnvk-%Ol*Te&jOm11w6Dm1WJ zXv%28s7Pni8uM*!y0g1x!??J_ys|*cz^TIVM2K$6UAG}Z{klFBkaG4J*Va>>)+_jC zuU7~c-9Xw(Eo|1O2V=5Js#FqZsjj#2aB!P_pKFTBqpQ^7;42?y2v}hp^|+_Uf=px+mEz=tz?* zC@FBSU3A;ZwVB-hIUXwXaxAxU??)$7-5JR$h7zQ~eZtyn6 z#=~Lc((vTqzEzV$ERmPjnc9%O4XO_9^8Y(s8kwlYc4pd7zkP%6pTD_PYxb0>32xw> z0(P23tMA{K_ekB+)_jUDO;fjrJzRp2SLLW?mw_cTz@ohc$qBx=RZXE)Ujha`!JAZ!E zr9UtnXR`tigIRe#_ivaP89J*3Zv-5yYF3W+P$#);MrQi6cJFV=K6D&AzV>GIh1J3QENtaofJ>hU2D&8 zQ=4rmY|*LE%4#@gJx+9IP%ewwzL44WjN8(tdL?EMv6BDm5wf)D0Y|atB1LhlUa~~< z(rH3vkBU5m!#_$)#RrJ%2D-TS&14JL)a-v1UK<+EqyF{IBJ|oa>Io|0G1pcyvU^dHzZNi=Z<=OZi z^|=cjQvWf~|LIHepM(aQ_~f$Mn66c%z~jY@5bg^(1ZN!gxf^dKyf?eqzke&t1!c^bhy!P?~=)K^gTnd{L!R_anbc}Z@DEdU>@4F;hS4|VqwSa zZu3*}dyPFRW;bhPGX1yAm&WP_En6>S!2VnT!^O)U7k6ArIeRZrmA6SR`8SER*)2Vj z0yo}*U!@;qk9m!j1z*h0`ZH7x7?05;OM!~jOV_?W?m!4nG>dPPTA)=yF5e!<^a?BS z@hTSvhKI7pi>Xx(GhK|cYC{$IDQc!=x1)zE9c+#ccIU<$>V{P*$*l{&5h_odd+(U# z?}|lGCbuWNB=s0wkXzLU-&v-1LcUX1U4BkeXj;Zis`R9D)-PV9h!QEAUCp*=3a}?; z&UUYRnTu@)ZjX5i-XhGcO+Whmu47}0sPCxjfc9*1c*IEQNgJ#o%_gkVQeP@&o z>>yyakM;ZY)|_3%uR7&bM%0gO%g+vCDjA3f0@u%mIt8i3m-6c^DV06%KmkE^xbaj5 z1%nJk$ppokCl5!Z0_wGss~&E! zsO(O$oXPaq{AoG~V?ARbGG1q@yo1gAUnOY!3|4|s);9!(d6`a+EI6svv|E6gU#J<#ZIpKxH}&fQpa9_M;N z-3y_Bg!_!H-_D;yIF)L5=?J5e`B+X z+BZ-j*ID@aCC#Pr{tf2pz#bDSF=C~1_pi6qV+&MSysT^ zD)+U5woaJ(U8Fg(V529Sf2sP>r0WIugJ5Zd%HeT;tAJtHE?=}FN;&%boyoGw4M{nu zk;Tphlu~@S-`^t7I_=QYQu~EbjzuLSZt-T7#x9G2%m_JMSLA!IVH!fc%_8%PUM9;m zHx_@d$G*UF8gaX$4R2o^ALbP=tj~W+gXZjy`N{S`8H)Q-@7;zg>@*D9U0|vSldRsC-;_PrZX$kzy~FNf3PRT@>LmLb{VPHdl@{f3PP-y=f zo1Jt8`-Yv#rMK{ z*E`l6xP}*5m-Xr{t2BQ{3j2B`@tD7oKUT`Q>OG+ik`8Lle|eX=jSIv*pqIe+lOWq& z1Cg62mZNjDMJ~g`MY#6TzVEbS$1l4w`1kLky<4M>?)R@O&vXl0H7ddG%R}TJ`TNqz zG5b4ga`!MtlPxLJJIrS^*dHrt&#Az6MfLW$ujGd-l%t9^6i2JEfyr5_10T;7ERQ+8 z+N!>ZZSZQ`?ML8G9^J913MmC$X`zfa$~2k+4x{?GGstjc1l2epzidC2TEgs~iqGlB z)#Ba$-Z&NiDQP zlP4+ZrCc11`*TrPMrZBuweG_|{RXXV-s=*sc=X2KkwL%gb-gU#wb4KxRaf4l{lzjt zyO?t*7o4y7(OWBA9^sl%7LAW(!5jBx>hUYG*!Q|%5sUi!a{IO3+z-s7*NnF-whu?h zvEzKz=>~^nS(#15I?AEt+p@bx*I~}vS;gXxD3-=gJz@YxGEKWPCo4~={UtBOuXtNq zf?$nk*xEYaI6yiVabb|$qe{y+Yu@L2`M*@gt?3B$i)R+EVfyJCeD3szG0%KZaz-hw zijOMg{0|r4D~ljLR;q5a?#=OKO{YQ5VarT>%cN_Hv*)l~Qi|4L8a2!N`pe`mD|>hw zla?FUZk5({kkPJn$Lcg6pZcRB(Z7A{6W$%!r}~3nO{F#jdl5@X$8R1F{Csdq?8DOe zyzbK+;F2VN{c{%oZxJU}*P`Vn>cwsu<~%SbDuB9fm)EMoQ(rFRzy6zc`J+WJ&B6dR?r_mc@Osu-72VYSTBmsT2q&@0 z_P5M~LgV(OVYi7lGGc+>tYyGf-3apkhpq{`Bz_OBJrl%@t zZLIR$c-8KT++G&VwMv}wgC|;v{ytM&fi+yx3wyrN`aD(M)rViI0!!H+5pbRdE`Qyo zSAL#!!4pEco?f?H&1t*7z5Is*bpNL%^xtVK+hg_P(TtgRf0jcW$Xn+a9p&8FJ&6ya z+WT32XQU&6G*RiEA~sXh>QQAv(3ti&Q zyC5Sa_WSjD{3TGehk#Hu3&G@9Vbz(au@P?0H+uQ*auXraL0H1vEx*SAXvBh$5R_c{-yi z8GA}rV|al2kXlds5u93&lP8MsU4kPPW~}*9XRa++y4A>~Xj-cFJVWuycZ9Ws@F`vU zboP^yNPLhn!nfNd%i=UkkOxa4HU2U10QxUban7S6S!C(5yBWi-MLsoO)QHM#21d;s zn^*CFz61qH9vo{ddQ|jFC~(oD;*D#JZ_6|;pTT7#Qt1gkMYNObm@*3Aajr~ekJ#7{ zXvKwAaNZ}&LP^{~u59!-H*ijrn{wFl#pxqkv5Be9_;f`q&Tf(87&|XIA;~V5P+Pp95fYoz2 zK9QNw`_pnBWUdY6X|e2^zTf~3zDp()u!9_l<^cu>YmtvQ*aD`l>Yx|I-XluhnYYK; z)4U*GqO`Vqb_3v+{jcpT%Z7NbMa?i|&T&MwhWTDZR4Bp0Th4bUGYYh;DVz(jS8Nj$ zDKUdPF%B07Apqn)D5AqC`3SDPEjj_B$k3F$pQpgo@V(-iBIdAKnz);f>LWYX|J;9^ zz7cps#&f~Y{jWal+;jXoeRAXWFAHkfmv1hw-Mi-q3|WU@Rsp7UB8w?nR7GOiF(7GA z2=SgVKTM{>pi?b-h1x6D-JcTUUV6iWEQW)E8$bB@O#!!tEgNF3O+d4$T|C#MF{CYehlen=2ghj4}#yp(c%nQ`-pR0xA0X?IH`T1 zqQ$XzVRj=8F-l0@qcfcGrNU?q@hJd~lWZohbjU>aSF(L>M}wK(H?Qu*>G)r_7!|Tc zG?A(6jTA?}LX1}kOmSfz{wzrg&P(1WjO@csKnOGC!ccjx0&m92ECGJG2wv3DNH$Mg~{#Q_RCz=sW!E2ezNMG9=pSWYc#uDpMI%bO^x8f#Pbd|z_|js4r#7na?V;Ge-&7@ zdcU5675FL)oi?3`=TBb*`>Te$nJ4k?bnI&EBE-?Qe=p=UL9%(FOgL5vwmrU8%0*$E zciq5s_0oMf8>LCboDj1 zF-+#|*-s<{yaBifVgxC9X>$uiAZ^Gk3q$@)+f1_^u**8WN}00w=x8?qsz-a|K|qFE z$62q=qzml-rb++i8|KKzh$s~HUZBwAb=6#x*>56d4CsoX$BaDdUpgKNvKu8g=t(1>Zl@s$jJ_IH<3A3=e+8pInFi*_Cz?C&e~@HQpBNEIQ%#+Kn5{Zpi2INlLt1YLOe8=o7i^10|u=7J|x zZ=D=A_!;s^aO-WmxN!7qvb`?>_Luqn8|2ox687gDKkIKtI=O)fzCLo&Ku!aTEIxfO zpk6>!VE+~%sGE$56sx5o&A?#m$N3W?=Hh~I{mN(Bdjo|p{FC5Z^{=E`WfR?sFEv0N zr9WW7=z#h(-F!C?pOfzdg%}ZnAy@mp(?y2&1_#Ugo-q8bmf3fwn$@@oP%v^w{r>2b zYmlWPKM{5Yzv`uG?~g-~E&BWm8(;aD4EmDx4?O5tg(Bg^ui~r6e`NU{a|(0_446~4 zVreoDytR2xg<>9V43*GHF^8#RUaO4CMF`A~oCIf%US3cDT4(y{|BV{46|r;C1BZGA z>lqix1&?|U10fykOZiUe^k`SZLC&?~zE}ADjlP|sjepnQsix);L_iXS&R#(ToS^=PN``J`d5;kT;}nL!r@w#N8v6cRm+UFE zME5hz9XA}VU3h*31u`(l(zr0k&KM*94b!j{xUb7(y}$AU8u5s|YU9L+vs}nke*css z&ysB*ZR&HL5_=*_gv4Zm^GT4q6Z5=5)^&)0e)D^axxal#m$CPB%1Muh%`DdX#4C^Z z{W<1ZzXVvy!ujfi@g2B?x*C3+2Kyrvi66YP)w0A!iTrp+k+%8M32Y?Y(i(qu?+rD& z$c7T*_1t1B8Lhcz@chq(|M&dK)GK~g5oN}7!C1zPpNWU=d*la=zfqzh_GSxpXAlcJ zMm;`fzoxpu_TiMJvftO^-$00UB4{ z?4MYdW-cS>H3a#+5Yis@ED)VPSvGO6DG3!PqA(@|$pl?w!UKKMbilyTw;(yEkZ_G! zBEduHwL`STXH`2boN-Mj;%Y+rGKm#qk34RxaFGt}0Qw_1BKEj1S@VF=&RD_uy3VvC zIgyh~Q@}R3b^&ttAYnjK8m!gWIM$Vr3D56e1RDE_96t{V7c?ED&Oz@yH)K)-J)N87 z9)pn8srN6*Q(5@Jt$Xhn9aUH%^AN%4-lA;ue`abG0a5$ znc6&;;)7|Br>(zD;tQQa*n#7VZLQ040{&T-H{7{D`JxUjlQ#4o%fmeSKVJ$mMXcZx ztzj-GSD}B>0E8dqetveyJZdIN35~i81=LYPh z+G3jn==R*DwD)dLB*c6_O92Tlj`9QSaBR#a#B?5&eGx;iF#bfg#~-P1dOppu>i^a~ zL)zSAq2^XfD_V8&{fVhMw~TFGp2ox3w~*90oOA6948v}5*ylj-*~di`iPw083rbFr z8Z;?#Z146UvAKTkzv1>aRtg`%?I~#Boy#gLTr0Ve*e+oHhsAnD2zO9}#M}0u*a4J} zf(v9h$f&WpieV#+zBy+_MXZ@ z!r#XW0s{VJf(GsDm}N-C3De0wfl;_) zD%o3dXH@a=C6!~@dEyC&uN&T9>)RFtzH8;~4=TAZbkXT{n$%5M1q(Z@*V|tT1qt21 zn|)WEcZ>|q*PK7sTvL%fD4I5)#I|2RRCA)gL+^>uBY97JeNRR1GoGt!pKQelOFzt~ z+E@BM^2Lb;Q6fe;pTIO2pPxK3Xw;WH1+VZy^{0_(>r^XHA8c{qL;{ z6$Cmru-rrpsNWTw)aCoTHR7TPJNE%>Ag|b99z_p7KvJ#mtB+Xb$jv zm)Ee@K?yV-Dsl+;_fSHJ`ShRY`^*@yaCZJ4^2_294|Zp>lBFFOE_%#ip8QR=7p3IA zawXqU4I2*nn^kD{$+v^NFJMGfsa>Rr7u|4U~=}t6pVT{`aysbnju|?Cy7_%t37I{rZ^D=!;Qy(2~$Kq?)ex}tW3>pt;E{; z68gA?x~jAc#w%FKRn0U=pN!7V zzn=PX)%I=hx`~+dmDn(-66UKsL257~kF)>I$Pe$Nm*B5tsYqOrHE#Yvo)RNS2%=b)ylO=1Z8dI#0Qmfx{IH=S)*95csnpNdl6q zJru6un076`zG>3#@DzxMJ;TvZK2?2&^0hDknJlv^1hkT1tjdclIs zaE!!OzRHGJUN=g3p}BjJV|~y2HD?AeXM$6C4j(S~>U2B@S#`jnPwOwsfZb_)5e9Ol zwQkhS0@n#1D!c~x5z|cP%qA3I5Bw5Nd;DjwubJmi*0$vkmhE{#l6-Q*?WZusx8E(Q2_026xE!SJyyWt|1zGL*iwF%3RdNgi z=H)fN2LL$kb-pI?#BwyxB(P(W^>oG%_^$@kMn{iUaH~-)s_K3-t#yV?kW;!V;-;$Ab${`g^z&T0w+qqlk~FKZrB0P|;jY~#IO$I?V2{S-0y^&8i0D75eMc&AD*z}h zT0+Jp3@?}QtON%Z_4d#23ZYg{@xnKgv^t@MAi~z}y^&AnVYz+pSs;v*K%1<}@h44^ z<>ikZ5|IR`0*Ck9?z<_!**g7Lh+`l?zrv~3l4LD?T9~IQJ=%SP{$C+a)nUQxuF_dN zoV}&A2S7q#@`Z<-FiM5aX8JOaCXJnMM%9u8vP2G{+5G~|{ z0)0j;u^E0g;L=&c)7x%YSvQF{%XQiB<1dqLgy>8snlS*zL+{CGIY{J;Z4K5-yO1J{ z;DiiGQeRpq%g@b{5-)`Rb!F*{r?*>Nf01dk-Hu>@_EzcDeAQabfBV(tW!A!t1NK#M zogg^fIG&yFrt`nKrqq@E?W4(-xxq3XvBsUd14WbBoh+ZodwGTq>8!K(kB>b8UJTeT zsXIm->SJeM6hR0j<46R|!aiXR>}>1>FalAZp7~N^7rHp4San zKI14UH1+`T3bectD16#ZO)JqMq_)@*ieHWQ1iX&pWfI?5l&$lZ8)oB2I(wyF7lD8> zEpHcMXfC0Zt2A77KBtdV5~T>CN!ds}(rUtC_#I$x;&%^+jJhOr%Q?X@2ZYxtfcx5$ zA8=&xAA`}w?9B|U#R|-KqMHWYYFKuE!|IBIv&JKfd__iL^`;^U%@P>WV*C@vnpa`K zfM65BW3cXC0jsQe3%;-AE{Ui(jp}CgH^)#+mG@VlW26S8O`z0xkyY+xB3JYL!ObYxv-nGi$%=>QFu4Ns6dxQ6TMb+T_D|~PfLDtz$ltGF1H;aJdBxh zhPLv637_unj*M^AMdj6(iAIy?hRn{d&w=y<9-q0>ek;wCW=#PNTKgsNs(@I-#&yUL z<$-Ohs0aD~10$GS!-0Um_b)2)fb=Mr{n3`GktR_Te331XDhd0D{71`JpXr9gyOWvT zGaNEbzvwi1{AF5VPDR43(;9|QPyWAm1%d5djy5(OSi>HUZYSA=LHnW$ig`ok)q9EZ z&u^!)Z}{e52p&#)%=eMQnY7dh(8?r_%i%79rVqno82Gqng~Wyh3gz1HYT=$4*80BS z0-oL)=iUueVPCPL(E~V|2QCee>&z}~Pgh#MrhPyNBuZN#Op1*!!48A#*yF(*c(33l zqOD85h!wtco67L>#x)T9`gnVKz)_4yeuXG0w%wk~2bN!LyfsnXSH5r1x`7*Iw;v|% z6OXo=CRK^MjE#E>=RE%YKJhPAsm4;qNIXR3c}^ME!XTwZMZ(H4c`l3~D=F{Tn1vLa zR%o|~{~p`$6QBCZn5`hrNza>#!k)o!9GEuxdB3%&Vt`C{ba$%kwU3S_ug)5^)G#Q3 zc@BjH(v`96$X6TwEFc32?XzR^LE)l!Cm&1-%b#Z-_;X-J?(lRkR>8)KwjSK~u?u7T z(Ccm>4-tl+AL*c)p3y(uPdCO#t;Xxg; zuguzxGz102Z*+I8$eW5#X4?i|V!ACyd&u zjClPD5|aAu+=xyCg?GfvVgCctBtl^XXNIBhExg3Ty9m=_P!vmcVNbGrd}9(AdbOHZ z^tl?I=BxT~w@d0k$t(7HVz}-B5e3mfO1TGsTopwL7JTm&#%~BpE^Co=X@{8IVP?p& zfh-(D2DIB`UJ2Z1pAN>oRRUZ=$akL^o#dI&L%qs#@oD9o?wbbuA*CW1C&VcGmwtM& z`G&Va9#S}Ft%5Fvk}+>>zIxX=&*`2rWdjRx%ho%<1-B7N{OlD)Q( z8$bNDHn-$o__0GOVMARG%lZES@IZ40$T?#2b(LRbq>uoR4c;Ta+J7dKC*Y2f02UHY zR6Suqa50+(_8i8|=C)xdSZ09*Q0&TdW7Eq=Syu6l%kBm`;cg(k-0e&zjR`!vFXDg_ z>#xt!RJQYfxV{=S3Td|k#U`DN`V45x+qEzhVogY`l&tLld#MSlL`o>dXAH-L0t(h7 zlRjQgUnSu*fE6B0W+lkuy|y(EZZn|!+B|}xNo$iO_Y)1dw5*(8^daJ=nW6b@S^p*6 zS}?GkaB!uK{ZOy^A{@6Z3U9*YHqpqMz_m0njseD-xwTm@S2t9OGqwBV7_(CDdV&Q+ z^|x~qUj`b@T7u89@2v4+vR`Ybn)awB=7|R%{<5pdC{|HNep`U~ zwTT5?#vY%blGhlXHSc%s`V`&&HdoAfv215b-PSBwgmOpA`28y-B%E)UKVU$gA#exs zu@D(R55lXOpQXv=Jwyq*yJ@O{DhmTe!6Eb~Q!OC)hvbLi*)ai7Z&osuuY~6p5Hm zBBLt%ZheK5c{**B>fT%~EEQ--j37SZ{^nw6qyIidI#2-4^wAx#BzR9Pv#GzNyXh`P zp(y=L+_|?BGea44*%R!b*KHfs1dq-G4TM)$cev_{6PV^;%3Rp(u3oNPj9S1wtQre} z;V0Lk%DK?E=osvAJ|l4!NEgV|*>2ggou%YeJ^DPL&D_R_Jid9y)jdJD+kbFhK|~98 zz~1xhrgUJ79=^qnjf2Z|*g6v{=>@12HVy zDa9vh(;W%re!FfY8VxL~8XnQWoFV~g)uEumfvFlHKF{Tm3fJ=)sIfP^2Ke5LxygmJ zo!yq6z&Agk@M+n^WZoc1o}{t09e0JH8R}qVpU{*Gc{oEg?r#*17X}iK?)`oh$$1lT zby+BD9Ck0(d)0 z+@98Y;%m6shkGxGL5j=OlfCfz!-t0>tdAEd9>YSo`RH1)4PTrf(o)5b2Al#ylh4Gp za5Bw3-|o`3BY1Im6O2_uvA;Od+R^I9`9u^pJ+K9IB};zcqJeL@5NJ_y<6Q)-e*VCv zy`~dPdvi4z^AUo&mTd51ix;)Te_LgcZrKcT#`y}(f?h66`l&{U zLCFKEdjcT}eGS1Kv%gub$JxRYy^z9ENn@>h4k#%8a!jV0VhS>gZ%mYPa%2bGZi44X zSyD;{50{4;F>cJTA1nj zgC5rnLtrk*nP2Z^4o0e6T453*-6Cn_#fq2|lgR+H&`)q)aeZ?4sEmnCJJ4 zofR<=+?Z<(QpVpdT>Kv{05sx>)2?(Fxl?4lq$No`b&x{!jD%vEDL+@lj?~N3n=q^b z#)2Hn6QpZRb!3Hens%xL#A#;wgglq!m|OZEU>}eov>7REEW?7u-Fmx4AM1ZNNf&n6 z<*8QOpJ^s*zTB9OzymmpwdG@ix6Lr3N?fe2MWlEG@ofj$SK@OlHEd@;k}x8E+pJV_IRT z<2LdO4a5PorsUHGE}Ag5B$a9ZDeGzV0wPB*+`sFR!X3BvC%GzNmtqEXHJRzj01stH8lzvozj z@<@=HGsT&7BNwuP@n4UQEp?rS=(3kIE3xB?I|kKt_D;VZ%uIZ7tjMnUK;e))f*66I zk)QwM#7$$ELy!M-EvbZ`E9he48~>B>u64&22N-X^3`d8<1%xFppMa0^lCBbK;Yg#7 zc9NxvO5Xa{5m`Pq$7tC52<0NN6qOI{CkH=QF@-+od!T7#rRDti+?Xx?8*v&%Dn-ml6aEXmT`SrfKOp|Xu4@!@iAsKe8$U(II3 zyntgNM+c=KE)bs-XN>JxQ3mTdj1IzZ5PF(9>6ZaYc3@}=LnD~0$+3rE zE4)ugdvBb~+5oX>eyiOEMwT_Nl>rZ^+d4P(5RY zILqi@XAD|TiKd_fl;Hn1?bD%r-2E^E^+QlKbJQ?#GX+gixyBO3ND$IL#4R=u4w(^V z?I+%qsPnqRFWJU?bR_*4MBx7=ulUAUl=X)uT{5>+c+7NeZdrXO`cNt^6y8K@Z>Be_ z@T>sj(qyaccvQl(ykN?H&699g2vIrohj_}IxZ1On*>M_1{&0EMG&FfxViUjrm|)3T z1vCfruTV5SG~>2wNTr6@vjIxoJ?&mTxaUBn=f_rwIUGmBI#!t%3YL#a3v(%eZp)@O z>!sv>VmLI^+a!}r`cj|)15sW$P-SsR%yUVdD;`RRTjG5aawQtB+QtVb2r-oCAReI+ zGB{Z+vn!7-zDZ_zhL;j6`$`1FP^@XXdB*H6I(uExV^^X#CaaEHH&7EUu>)HEp)eVY`@*uLax zz_e4Xn=OWU6uaW8UD5cRA}RI?lI*0VK44~B zx(C_`xenY&GsC-!Gsh4S&GpFa;3}oewXJL&yOQKC7LpHgY2lm@OC5gwG_@_iKn!w4 z3Ui8ltY2v%oeQJHDJmNgP`tjk&*kyzII*=_fX{s27ed^Y^l2n-E+a`R?fl^JH`9B~>+4 znYFA6cDg%bm#6g3)%0B!;vM2fx>}5HWMfalIt)u`Hl`DS<^aKnQSxlRSBh0g`~_eT zVkC;b?p5g~sqWu$wNLKcQXR_c+*|vL=I<){I88XA;4$1Z5Mq8x1$svP8RWfIU>;J>k zcYssfzyE*EIXGmOjLei#*(#fpiflsm$}X7=+tDHsm0h8TqGV-cof0Y{E6F-YMppJX zod5ml`TqXb<$12>x*o^*jQ9I~-}mc&yOfSuST4S zzk3}CaAcDENz-B&rmPmJJAqho|K_G7lESL|8E(X9;0R)*$+KOgPnRqWXEyj`CK zBsL{7{7s{@u7yi9VtQ#qp=nUEd6h#=H88$tw@x zD8|=IIx?^{pb|NCFm7| zzaT`;yw(-3DZ4pnP~GONH~Krqj)5$TFs(yxbxnOFY4dr`8;J-wncP*0hfUI3lO(;z zU$taP?KRh%U)>p`y=Lu)ScRjJ^xvPN4Mm9WeZBjW1jwf=7!68PbC=b4^CC2`mE0r? zo#fXorFz5=it3~N89CB#?&~^VZ9aT%7FHC8^M&MU11U-}z+x2H-+AXnkVhxqS-;*_ z6uGNHq+A2jy@vGb+MZpcUD&8?8~HRuez3EcOWoc>YWr32jo<1ZL1(xZw6DXT*UQ^0 z!gV&?{1SG*`gw?jSaBS?pm*JMQZ5Bf3SS-%DNc9HEYiAI@fuh=ZG8QhR28n&h5Q0;tM^h`^g}S9`iF*2j!c#5V;d5Ipi#Ld-d0^HFBElCfV`O&!3%~3;up!>ax?X%TiZlgV z_$|Isp#26F6s=73-*=9EJ`=s0Z>qPv$x>~ZBv5Dl9SWHrfjY1Wt*+YDx0s>?!xgQ| zJRpQZhnxFEQPW7W$x?g-|$o9Ze$~YGs zAaXAfp_L$;m+4=hji!dLQ_y?1@ZA?bG1=N{O-dyxCfg@# z_Rwc-h& zJZh|UD@(H)>9U!bLEArB4V!U^J90d~njJOhwv~9q!gMxsBlzS@Zj6HakJ5YPU&ulF z!w%A=#9$?W|+~fh=dpCHlPv4)> zHkHU?B(70huT3JVR8>&T`yszu({6xlkSk!K?bu($yx`oid&n5VqPA=t@D(sK;<1Z? zw!~gl_IQKSDP71Oc&b0QnY_DgB9sLlFQ@375WJvZ%l15fc8H*X-kpS;6?%6%Du#9t zWj$m%J2+bIrA}B)l{4?7Q9U86np&|w$a~!JEA%|GVL@qtJb+RZ{C2|};Li@=NrJ)> z*J~TV{O;=Ph2e%+B$u6T#)5T0A?0Vrr~9=W(%dtHoW3uu_daxj)atp!G2l+no}c7i zAaPqcu|smmO3oMfE(vkS>G3$ae?(#b_zl?xR{unqqPVXb*T9@5GklZbE|+xEexL;d z_sS_#(x%9%jgM02!tm65W>YyUHIN+>Pl- zudGTJz>8z-2CF&&h~*hFrHdtLiv1*$Q|s?EobEcE>ZwX6JJQ<`Wr5JT5_yC`VM&8xqhdE#-vy*sQP zLp4EJ7oVu~2P2s3k2s1-V_maKNlIhgjNM}19-$T^tm@PIM@%4cwEqpL?io1w%Wv#` zlcj(+?$buVqpPut5U|*;<`$F?8&10T@*bxN-|0JgnQ`^~SB7|I#9AD%t$!l+Ak71xD>X#` zx8ff*vu+EDnozvij45+-IeVCPI-?t6#+f)9`vF%B*Z%d{8t`-*x0h40C ztIX>T^xQ^fD~6j+vZ}e9rKD~)mm-tgW!{7PKp+n^);Vtyrb7g zdX+dC$33d$bKw%OpzR9}%7{nfIgAIilj~_FC;#4foVTIGQ*jk)==!lg=UU)^cwww{ z>`Wu3^0ZPU>jabe^9ynYq>|JASfx#~`HMWW0e#+sZGEMGVfVf;E#Tbu);kVFl1o`(F5QQr;i^$WCB&I#_g~R2O&@M+hfc}V2Q0i zhxj|Pb#~A&{!kdbqzs;M=bprFqF_?&zO3Rn-dXZ{)NV!d+(i2V@{s?FF5JSf4V8ac zrSm<()h!m$(7uh~-gnY2F{E0-BvRS=_1V)^h6G3^1oopgBE-w)KA7fPGtUM6XclHl z2`kfDbc*SJWrU=tXqWeX%EAyc$LNv`jXMwJUiSm*uUcXv3NgyyNBo z#HkM|oLCk;d$U|cq6F(h07O^`@A4~%J4nWA%5VYKLZ@EjbR~b0D`Qbe#Vm(R?Hk>_ z*_Z_o?TtYMV7>Gcnt)yOxbhyH*{;n9VeQq<0&?>ET7*wE_Hu`Dm8URi`=H@WG0;UW zYkERueG`2;$(aoQcME+FHJ%{-b9KCxcV(~2wpMhv&u`7(%nJFUd7@j9^={w;f7=bQ zI)oDXX99Y5REQcW0wQSTg?RxRnCfTf&I)IP;X8&z0M#&OHUjUs3bywT4X+9@kaM<9 z@;JI7s=6W;^=f07%A3t*C&O7^FyB5`bYl)r)JA-V9g>HkDbU{VT(k4U^>-iD!gWtB zIhh>279M{^)ViH-Y+=v-=lBGMMP(MnlZmCqakO3-;|_;orbyLIv~TcEr#1xV%nhCJ z%jCa?1O+5^Io>UnJ7uC4{j|5+y62aiVHOCN%^wNE+pbJ(gEbt*Y!O-#ADNA{$kB z55_JEc2PndC=pc}J4Hs6{yP2_#`}*t3z=bmNJx4G%yGQk;#uMMCCK#!^(3)iV?~_y zIY{U@9NwDM)gC`wN@k#7iP*F6zq24ubglNG;LL#muf3Q0e1-=eRm4q)8U4ufF-(=g za5>CK3^h|CGEe$~w@3Cvqg9Zj(YC4eIt;woKdreVD6iowL*y#$@#*=a3}vTZ(DBgt z?-uN0q0kGzS39}u*U%}Kaj-oZaR%PGepCzow=m|nOvmgr--y~JqXlLvY zF*9tH$E`gh&LLuZFL(qNBbWvR3$PIClj#~N*ShZXKu6w{OciB_ch$^^So*AOuv36n24r|JtqouMaptKoQI|HLbajt_U~Nrzh_x=TJ8#CC?EG2 zIl|exlZqS%&R2coW2FETdG0Q>>-UbBXe-|{axA7QzG8S&X`_oFVJ}@|AoR!oRJR}5 zI-)cDfqThz>Xs=V!M(2TmoAR6nBO1SNtd26Bmy=K8}RZS*N8LmOBEZHW5kg8xY%j@jqM6&XjE~lT$K{;;Hf6sU zPPs`OMRYZ#8$*CYOD|>NQ|gseZbO+3cz|40#FN_xtBbGBTARJHWXEsbqq^?Dzne51 zgb1u3IKqStLt8uZk5x5=@8 zqQNv`T(0{Y!-JM%QXTBELb{g!Z2TGN4{!OTUzi!O!}CzoKyC`n{P$;sF6uyYoDOJm zA3%#08y3jTHhY_Q23+w5=P&|iu4$NsTQhuoxNJvDEY5haZ16|s#exhr2KQ;emr$FV`%YB^I0b56z^ENJmC(u@+CBJ)a>85M`r^O`Tdw#EefK4n(r_H`fX zlhu`H)Ql#WKqlMgP6nr@ruDyL1_U7sT&(#U7O$*NnZx^n4=z1wbJBP3i)DVQnR6{j z>{Le1wS6{BM3fZT=I(rE z(;E*R=zqBDL&S)Wakw;5fRL_riiMC)a?7>^#%kP;@`7t$5JaCm%er4n`H4n|@1Q75dk-fpRvDxxR=i?a=EGTK4=vw#f9Nw zkRgj_*?4pD9aNt_Z*chVv|pj-!zdaFM@}T;nQK2tCNX$0yu>9PiK4;nz}07QEC9Wr z=zQa@hiehwRhEh)t`0{;Z0*P}I3n$VNCuNw3o8~5vv|L=M{qQOlb>vy2$PS?7q?rn zfk&?dA%E2TZS|ICJZJ$^_5b6>_ye2zF!)k-u)_^vdCO33h{<%bpln#@LB6gMkuPw7 zbQeU`U+8UuRd?r0(h=w3Fdps6w?nm&vP`Wj{ci=xQv=g)t;YxeG+cueqdarpGS6Wh z2Q?)nove3ju?*CKZqA}1{M>7&`T<|s2YF_6{VoDVqnNsu&jRDV*+A@GARp{1TZ=qk z$hdl2sR}GZ&VEEiB-rgb>P`p~j~opueYsCno6NdF1iv-^zvsILBO(&dlLf~kRIVP? zU@aL_BZ+-3)9ZD63`nU1P`?H2P1bsq;`~%3k_;^l|9oXLhyR-x_OFH33$2 z=_qWW z{)W4mBl+C&oXLPFUZ_5*ijz2jT&`~j(SKC0(rb&e4OgP2&ITYLSI=8}f z4j0&Jp+q#{WcU;CxRv?&!BKD*a@^-cIu}UX+=wg4vN8IPBixQ^MjmMsIF8a@k@BIp zMBa+eEvu&tbX{xk{)?P_qo0t2TEC8yUAeI9Tmb))^Hf+p)_8li=x*b?uqvP?|J_qy za@U52a-o~Pe*OpM0?wE=p@h^VYJhzwFVO5WA4Kd5NH|%naA)gj_hL$pPq79=PKK0MvWo^EqQ*ZDqXMd zfB|bXoDx}dt`R}d7L5qy!Kt1kdfvo@e8LSRJ4?jWD#b3i#5m-9FE!A5P}jI~^Oqx4 zGK+6UUhi4s%a1y-EA3zFkeVmG$Am;W^u z*0qH+R6Hs)5@W4vLhCJRx!Nfvfj_6~vT=aS7X4488W3Kj*gOcUvlQY00kf3g6%pF%SK_WIYb zL{j>Boz1iQX%zA)xu+v$`gcv2H2pASI}I9ua>W^BE4)TVQO zh`&YQlHB{xUmqzbNFP!ydj)XF)i3^)vgTFC9Bxp`TTz)ET+*!k|1kV)e4=0NPi$)c zwTIMq;&6I~F2(6AsX)2)_p?}Lssgn|x}Fcsv^b^h`92}hiO9~-Sa^})5Q~2DzP7M% z!x;!)oyZI8YxJjHAxwaf{JnYTai)%H2BoliPR=F~3Uijt)!Dm%_ceS<(O70PkK~tF z{8sW?!12C{q}0IKGTMX?=N8HB_d_Bj9xr7>_vFoKh;6^-TsU#YSO~Y?_N*r4g)EZ5 zLI7U=S9X%>x;y-bM{gm2Vddy9+o18JRp$G87v2OD@A|Wvca%j}ZK?Jgvc-JGlkEhy zf0-K}*(W~j5e}w&##O^vrg{qA1JPg!%ZWNTDqo$6hT`(+wfP~fXOD|@OWoVGZU|j5 z)xgkU7Xzdn6#^0OTc6LP?HikTZN_r3+P*u6(?Ypqmx zG3a8X9qI;hHm#CxftZsy;CJgkdkY9pcr4;mi9rK`_u7wswvtwmgv@6nbf;e?-y?_F zyPNdOr}6XlBnx909chL$_n#oP67sEk63yNf1LYUx%~CkJ?vX>OZoCkN-a|z;RXJfd0Oe zdA1&$ET8^;73R>5U8khE`yPExT$_8_b&>njnRr!4W;Mh@z$I-z0h&&pH0Q2p{&}7w zy%u;>G>wO~XH*W;VxPe(o%r3b_6||2 z?Q4lCm3ChJg?804u3tDFkFx>kV2Sk)P&HLhujj4Xt}QbfImAmVKl1HLTG_HV>^FTzN3z7gQDs@?E1PChz*NuQ56Uof41?CGAmYb~(-8Zige9)Q+T>-QJt)(Lm} z2=c3;Pv<9al{84b_OTXqMj;_w3lkW|mZ>@I+Llo+KPRcG>~x(W3#1WusZ5Ae0e|r1 zQ&H{(s3Xe$Kq;L%j^X=0U^|kfiKVHOKiM7!ZN8?*;Z4}s-ACC!UBmtb0W8H~J6=Om zlybV@oD6dI-FIfMH=>{HEbr<}})ZGBqxc>u!gc=cI<`{~5ImfHH$t8JQneLYD z$K+*(zw^WLNuFf|1V&cNfrYS1JsM~&IQ%g91$L#0N2ilmK}%F^K%{V}*R(>xH7I0|#5 z-2@J=O@6&!YcjLvO+dosQ`b%j8NeYbqL=&+Xa{pc{b1&`or(5L)*TAivh5l)VoXBZ z9v%rMUeZ~!Rrn}OstBuF(d)Em*Xh_@G()hM)0AWWSuUhTg#HNk6P0Vn{Yl+YBko)k z*!7)iHlNcxp)qF{GY*YDrf7}Q?{0G)OtCwLv+5TO$;xFuKBoKxU?QnH>CmA;iA#E zGvtpUmNXu~K~wbqMUNVk3o3^xv(1`Q`?0Dn75;<2vLa-meeM>%@cN7>woWX;oR73T z)n(_i0d&aXJ{EF0@w07A4>0Ajsvo=@MMhf>zD9lxOExLI>&-s8F*q?qM>OiMSR5n_sGg9Kvk?d~C~X2EqxU{GDQPwhG$RT^_AZFbg%VDM?A=aY%}?RpUWuHLk7m z;57S&ZC}%kzYf|gr{`e7Snv@}9SWd3QsLDnr^}cnaU)s5r%6N9K(k9g&3L6|$@tl+ zJCkzn?W(b3RSn5btTtCylO)io3N=Oyay4Sr4{8z1m(TE!y#|#hNb z$jjdo@zWDn;-c&EM=)l6&;0fh3ozg@`c)UZe!L|)J83)vskj09+bbH<**WuH5k8UJ z0f#fg9Fb-R$UJzqw9gz%x9fvjI7|1E)`_SFB^_h?KK3x%uX{L4kG`0fa!SaCGCs9z zlMdOn^-*4ZVS^lh*gUEC+)W~#NhgUtBj8t6)ki9L1UeZrSxSIcB<~ zU`R&-!|1Oz8UgMFW-mwQBu#g&&X;S%pX)uZd|vhlM)ujj{^jioMUC57$I}|pyf~Yt zp!#{87dM0xXwlbm^Rd$KqE+*+IED3$q?feDZ|v2W1l9ReDy@tBMSRIf1Vgv~)l-Ag z@+me~Nl$?qm+>3XTe(L|5?22k`#vm`Apc{&((==H&dC%%f2~E0_nMI%$HOUs;3L{K zvt&vUD`7KEJV{Q5Tn{_Vm(sMgl>?!Bh#3@A`ZQQ0p#nu>*w*S(r-s{;Jq0N`7KQEj z>LrrKxtF^QeM{19*#`ZP8xl57=1@Xe1Q0{!;@wS4QZTmJPn;k3PTSfY>6gAmWI(*z z6=mQ_fD`H8$?R80XUZdS`15Qys)slKY=s2*yBF^>oG`<}it}M&V2nt2@cP|@VaGgA z2|XlS^+Pla(ys4IIy~|*-`r0|@~cPcx5{~kr<$~Tx@Y9z2tC>eX(gNJ658^v+isTM z@yq)ucq{B)^{ts7H@piOW#cn7Vj0K}!mamRec~VUd5x73xkU~6QRJk>{0%fE$dhRO zknWO{BG)_YaAF)wZ2744_|115FXmFVC8;n zWaP7ZF$6<~n}}}0PxA;5b}Ivr{x(A5=kC9qwrWvVW2bO;nh2iqGKcfHN^a}CI>aK> z@05TeYbBofY@a;!yy#;WQdwpu&WYWb^I-e6wjzRgtkwa7(td1K*&Fn!@?!Tp;)(t| zQKu&{s$k$HO58At*xXa@J$RuUr%qWo2|!;5htl0n41FdX$9-)|N=QfaZrEh>9ADo4 zyf1#sW4{f}%Wh97ej-4gF^7-&3*F;N_INlO@G79-Z>z+P}oNv-(Au=Dl z|De`v(0Lz2*L)>5;V36|?sB{D+EcUmUkyRqzPofcOI+mn5ot!fO_rsT z?mc*R@iSPfMhti{a)E2S8Y;lq)7rW&;*Iy6s{eTZz>qcKRa0G4wTuYUnX?e>ilrfv z4vbCMYphWoe%B;;{s{3LU}K~jPik~1Vq!XN9WfUlls~-HEAu_rkr}VE$vMP5`9&QK zT8;~gZBIKGEkg+J~?7qb@!5Ztt+O)Mv2-5nhDqw_EA?z?)8j{qpY9)5^2gB-LjNvX=a zhH<3Tu=0hz)-}b^dLCaD4|>G=jNG6RJZfJ)`pQwnl8gK_sx=8sCm(Lr-xEH;u5|*P zsWP(CJ5}Axz1OhCb(&GhraA_<;KxJ|773}qOk!qf`J-$U#|=NnCMcBNUw*#c)tdMx zZJz}8kd_e5GFIkrb|1SRf^r8$Qf$vpBS(FP1}K2`cGKf(!7y)fxLzZM;}F)E>C+)z zFFE|qA{UW|HZ4~X5mZLd;Kh+TDS>t#XdfXPJfR()cVey^?Ud-dw%BC^h3O{*0LiiaJ_sdG%jJ#_0mGIdm&*(T(U~h zwa1z*XO{@>-Khbk%4e0U7t-PxZq8`BwEirK^O;{cs#zGvq`f1mJoA5nxmpZ^7 z`azCO7#UHLYl;JlgeBXCA9)O+l+ltRw-M4x8@>F6kfX$%dq3?)T3zgprP2F(FMJh- zRt|3>`vd)xx#cwX(en-@iVcv?gIvwobZ^3YqAfeOYM@N;@?>PPq|Lix6O#pv_jT~2ZVcs>D$Vwu4T z+30$;LQp!8kw3E^Iaw^}O#8788Y7>83;*CI@dyjiXWmHF$yx#8s*Fg&bi@&h!lTy- z_1mkw-oQI5-Q}xnN8{Q3w4IbmgvMW}$I}QqFyVeM0(PeUUp+1j zl&dTZ!GhesMcK%`kFp^^!YAX_%FU-9$_JHX zc`ZD+#b}aaeXP5F!)=USh9J{0;D_vy*qSE@fwn~`YOwc-n;|uT;moGLq)CrJnA+a% zDl;^3Cr;Vi4^u=s%;d<>-p3)Y9US9vPqHMPKxBCaQ<=Bj+Qr}{@#Z#SL z33C_hrhn|&_u*tDcw$8I`VU`KRMBymTMDotcGjUr92`Py*d45+u9oQmpg>TxC6T%9 zsMlb1EGn|_w%7h-aIkWl`c;Yim@EdY86Sa88l(cgdtTh>+dXOUy2$HbSTz>TP4r+s zO@EVEf?PfId|vA#W+AdY^I~CDlj{1BnIBF9>rsY^7_r_0F5VTNHQ+pgVA5r$APwdT zpqk8ew|Q5f$4lpzq(%e%Ifo;XjU*SI_T>qCFrt@d&`{NQH~aF-vxLESiq`pw47*_L z)`2#)HQPi9tIk1-MhrBXU#bw|R)j$#kh|_GGNor;-}nJMffC-)Xs%8V)$*uS&a0D~ zcq7Y>@)ew={qy~G!>`W|i=pSDx3C4*B6DlPacr@kyQ#ruorS>4uc0=);`(ON4C60G%vOc|%^cPJA!8a1x)ftd;kIX*(UH= zGN0PkOzZCVaNps{lByi^aNp5RhMR_GzfG*bR-Om)GxWfP*$7xeJ`yK#TK=6NJD#9M zT%GM7GcrhbsT;`*S6;Pva}RYg0keho;J|(t1qR#U@bh|REk=*e-3E_S*9R3>jy zE?qU-29A{rF7J0V;lv(#3?p*1z0%u~RY;A0D`JDTu}!tBW+XsGh*Ij&Aq-=97@%UO zmB(3^d))y!<45(=q%jmsS!VjaBFx|-Hl@M}!0=@(x_U5TY}ky;auHs;V{zPSKPeN? z&g{rD5?mtZaT0RgdUnyFF2*O^i8eTqjx zx~qV%V(k?qb!cA5mV!Zn2`)661V&^@K7H>~Jn1ko@5$Bl4RcFIAwInCmpAop>I(SNTlT-g z2b^%wWi9ni+>|lP+ir%g)t~x6L{Hz9wA8L42-X^fpV@r--d!Q3xod^<{rf}j-tUU} zkKo5T)FM88Kxg>+K4v>@nzM=joxNjCuFG!FB|ycyfHg#+!hdm-XEcY+UJ!S-w_rS+ zz))>2j-V~ng=L4zKkevK?HDY8F{ZD~H7@5~Qb)t&XRTn{!2tS#p^MYzRx9rwgA=TN7Jf{h@sZStXm9&Z{d zP;${D$)kC}v6=Hv6DhB!CaIaD-Mdg~G}s1ueZe_|t@O-YtQ84SPAcA;c$~bCi4patv2Ku)4rqh z;F#cd?JGatmyN)~sF>Kww}_fs1c|(uZ{AIQyiZ8S!GH<&?bvA)&H&R0RL&X*Yyc-K zPE?8vnpPZ0kx$nKugEr41tFjV{&uLq=8;% zh4F1IuDuv48|+pgj$J(avj9OvXV)oC93{z}l{s>9L zH%KBv!Q?SirHuAxu?-@_8pTevZxYg=+mf9`D+n-$6J^7y)A<@S-LVh7zni#9&3!)7 z41CoK*jEld7HmF)?~b{(rjFEw16vwef%29gIh#tL|AEP})#4Hc=(+j|nS==iidi7)NAF2~Yu{xhB%HsG zGMfTA=9IiPw7Orr}Q4;$SqD^Qw;sQ znNTO1z$KU1?3sy+wKJhlUp|C=$;XA(^>lyzM2J3{9i4Sbwdw^A&y^5|{WlxUl)ywG zKi2Gh`9s>!_3!W`uW1nfFVP1NOGpgu5v}n6T&kUKF)bybeZnBW>oev|{>Yh_Cg0gu zkE2+UYD%&E`ro>|r7J|kfm_fsQ+AxQDeLzWwJ#$&1Vp5Fujld+ySekOUw96C zAf~JkwcmkcxCgUGb%{MBBH;5K5+9N%LH&SbIk>)(r~$y{7gndb%S5H^c2{6})fVkH z)JH%JhKd9ej>0?ELF{S2sTFAP2P8{v^+BU{9lk)@LQzo`&f(hu2sFh5NfG~a$P zH{r^$JVo#5_VleW7dkmSl7{{!@?}dlaHA%=!9uxxi?)ZztI%hqcfV;Y%x=|!g@Ao1 zMvSr@ncQdwX|cLS1uZJbML(G+#8%>*x?cJo`~CFMcXtnXaQ4ODS_tX`GtEP?ml(_L zvtqe-5%+G_K=81`$c&<5Yawj7Py(IfC4FrctRgK!Wlr>D6f$nOqzucS99I<#L&piSgVtP0zF=)QgKlV;@PSvd!}x;V`XzfPsx(*J%h@sQ8m zO?^6JQNxr&Qz1A2<^Sz~g(E;)Q#^14PkLjjTIw(`79q^5<8Z-Fg9fUQolMs0r}Q*W z2sN-OPWC6=#Gdy@C~DvSKO*=~$9o9|3Bux`xkUs-Is}==(;{1k@TB@|NgW63z1P9$ zl2*Xl`ytY<`)?;#6o^b!fHlb!=~uCpSwnE&o%J>4y{E$}S3#T8gevOae^dsoI4JTfX}z20 zI3Lu7_UH8;feVPO3I>sHLI}11kvXQ^iQS8yacd97(&|2=F|s3MMNaBc@l9#HjW4Ln z34sQ2(-`E%2^;?_V5r9-08Yn04Tgneyg>64lgb&;M?k9)@pYXP2aBAn_CJQj0&fE3 z@~G-a_Tr!G%JJyKSdS(siLog!DsjI+kHVKqkE(o*4LVZ~5Af!1nDoR?hyQ!}Y#1Nx zaPXOIyeJy+rUyAC+FKN;z~fxvQ;Pr%%FvJeMpzPHq5KWKoLyH-#>X$fW5|dzrWFf_ zK(v?q_lNx(td7(z8vj!E$2f$ zhbpGsX(0RbzH-^z|7tFWiZvL^uyR8!iV6m#vtJl#BOwo}c`rOc@9Ll==8Yne;hwK` z=W%6?eSqp~i2tT4#i&^CTt-l=W~1HK9Sl|JMdA05m|PR7AHDEP8@E%?6vz3PhBPp| z7UR;aQD>ib==c73B#$ZbD)ND1+MjuL1+mOM3y9A#DJ5?uNd)1(rE}_p*#+=RBi5rU z;_{UpfvxfhXo@>~D6!l?ROy60VU<5^dgLlD3AXP-5t);>LK^5>Q7BkU&(An_MzfT6Gp4q>3XwOWPEb# z%Wxm2%X&f^DiCl8q{cW9d7^hO)vV?4FF4q;St40Mt!ttD=z`=bJxKF-7kO49apQdZ zm*+W~$+J$dq?ABSjjgGJ1uTSZjwd~A)3f`v_rFg>Jv>BXJ0sCAZztXLC7E`;RLcAN zC%j0cJr!TWNSqG0*E*4z(Y6urLyjMu@6b!dV~qR_~tsJ$9B_=1E}m=4q5I#QGj1HPq34WBRcZLHhci+XR}ciie^xM}_~&x#3#C zeil-F4Z|ZMkam*cTFcS7HPAzKzkIl2=E{eRVMb|a=deSE@RX{BiE3+jSnxw;i{`@n z?gz+!>kGIvF}c%=Gm|qjzJ%Jn`?0mHmyB@9^N{+JrR-v$$1+lLGK$zD9nZ@_pH(s5 zRV(5!C^C(j4ysv|vBzpr7_5wC_{O-8RiGf+N2DfWN)<)CZ zGu}h>ex8pAE$h+mH}H{#-47PZ8uS^;h(4jm3c7jF`#NKXjl2Wzk*wdDP%B7fMY?~t zmz5n2sn67-7AI%0bXOFthA($$qY20AOy3Qdr#bp2V*AKF0kwbA^-^GxD2aH&$Hom4 zp+6XMS`u}oz&Nne>+=!F{D^kvwaPp>!5ftI1@~{6DYHY&GyPFK4iRxMsrebW3ZXN6 z{Z{+jv%#{JTgm_6h2Fxr#=Bf&92tN5D{aoqN|IF0f3sLiQvT2V&4}oSJi;X2^?W%$ zieP7vo5Zdsx}g@8xi0M)q{)uH_U@hnKOo}3FkkMesVNu}rLyyvRqCLOP8KbA6h;GE zmwg__sXPvHs|iHTvACG*{}=e92_t*Rj6Apcguh<%Ln5yrAbIyh4r?>Z4zKb|YDWsj zhwUsB+fGZL&7s$P%BCx2bNkI*u4XVZ@=D&;j^&QrnyY4osYnkuKs0t~y**;*23^S7 z&l8c}k6baYcSW=n(4vb#2-_C35Y4^2t_w$>gG+dw2)5B*LYUCM_dv32DVpv%u~UiDTY%r2F)UOHua=2;5`%)_1uQ2oe=4L z3VoYwk(xrJ`sSANg@07khy*2MKLFVEIA1*=9{Z3GKoGKG`SFUN^eP)4s&#b@EqD36 zyJmB`02FRY>j@6f+k^Q_eELt6_ck8)BHeIqasQ7;#}}qVKKev8g@GX;xHEah&Be=SQ$KX?kgq$2lDV|t zkaX14o*A4M;Gqg(=6af%Fs;|)N8g6dqW2ie9Kl4m>`>LN5mEPKw8D+q_~AZ6IlrPW z(wHpW{JrdGX&Dv9&tBJ~uB^^Aj_xr!1yULPLMn_7_Juj;k6uK?AZi=G9xB2=**EZ9 zQe}cWLn7C!t%(U{D+$iZaNWvUs);o^&e*n|0CJ@M1>0mY&S!-@52`fmU2%~ z-^)Gcr_PdFq-(J|f%?kC* zdL)dentXJ>FkH93cyrGJ_!Xx**RPK<+WOCM?^K1W0h`l9eGA|=ze}GV5SD&-OaKNE zKpEWHPE5)fnBT3Tzi;IPx)HFNBsjI}d?9!^ZTy-)PHK?96r7<$@T?D)^vo_2|Te5hCTZ41S=Ra$Vyf1!!S1?KYV+1 zFC`71l}+o#@QFFw8^G>pq67W9GK|EL*HtD z8JP&uZOXEl{Hs&Y3{HGdSt@sj&H3-onNaM(K}0jBdqcrtiqRw|#_J$JgC6f|_FG<1Ym*ezvrzRR$E&U3gnBQT%?| z*u3Oa%bP+v-%?r$qrr{BWH5Arg`r5(iM)z?I>M+%ObkFYk-Z`7ZcpCk_ym?c=A-g! z-{XF(Ubm8I@%HeJtP8zcp%v<#?TpSdABosr>2+RT7zu>gu&omVTN>NF4w0MeDWe;~ zE7+mY{Dc-a?4%fAn^|nWi&uk6DZM{uC+GL9Z({hORVAQysE>0E95_uUfJ#GkEu%h% zF_JWq#%~X^Idm$}IMNfvB#2Z=G%o~PpEdFi#*4P7Tf;6Uso9`2!}ZXV%^Lwy*!IGM zh{x()VH5n1d)^jUwdEB*bC`d3rMLnnxP{EVMb9wjbM))KVRAIH>Bv0b^Cj)&!N-bR z^;C5n&c#l9LGF7<{TMg_{@cd3G!MdQg=ij6b1Xi^b6#q#nh1}GO|I`%ly8n0er1*V z&hNk+46P0L1j?KDZ11hM)_ALife85Q%AfDKpNtZV^98#Y21Ruo2F?D9^M`bVUZVL! zib&|iQyp;nD$^4vEJzsi*uPKNVjG&3_fD_qhLgOXKPcH&8F#R#$kwHJ`0bvGr$& z;gY@wgTbGzc;<~v95&Za5InM3Jm900QF=~t%M1|7&!1nRwnMOX4jKx*r<3t5w2pDN|;~J?(al@!DW%`B|(a z9hzy7@+8P(bw(gh!yw}CubnqrYIsm5G5$wlUVD3JBi1$K<-~A(LF^gAi-g2yC8fMm4KD8+~u;pRGl+qs|1rLqQX1 zB2-A%)68!S-fJN7QI8fLycsu~eGhpvejI8oFM%nK|FSZU1IFSkghG)phLrr!5sz&d zukdqKa_M#vY9J^w9SB|enyP#yf7|Ab`HgjWK>b@X#1U8k#c8j8{|or^zrc7*8QC8a zPh~*j_n*6+iV2KY#oAsmU*%t)ktdh5Jd3v}p`og*n3Yo6E4HB->m-!2+OS3GUd%Jd z^tNESoU-sdXFgNXF?^Nz8~cCHO*r8v&8}9A@4>KPI^SE2Rse<6M<4jp;t@`_Yz~yD znUNHivhatZ9eLJe^z-vSA|ageDh)%!_-8%qn|&WsmhDtoc;sWkl=#1=2SrL4ws{akj{*Bn72>E#W$LK5dHoGMMr&5v`lGr= z%F=M)81rM_4-A#l`32uz+bEd6tAJ)Iw}wl!@DolGzQiLIEX-^33MF;*)EyO+T#)^{*>-2| zk#nhGJ6bTf3e=`2Pv$N+ey62ZVf!l*)~lkoqqq3vg`xPrF958BK(17Tb5j|)J)&?` zHmh~6cI{n9PM-6ymHP-72IFppt&=i0dh5?yJW*cnAKq~bx2#($X_1m=-&q?7U>yqI zx>UN`SNI0@kwU!s#On&IPwn_I6iY7}zQ@5Wc+BK~3-umjWau?C>!908ioXCQ%gfSs zj|l02XDe@}zB8lhlcdAuMV=rR9HUM@R?00AbVh!+XU0QI&KWkvWcSNGpvUsal$7|x z`@a+91Sjb-=!*Y4xoDCJb;^jJNZ6kqoLehm`9*xzT1}Y_Z(1j3%Ht=829GqxKd9rEAUBZil_~!RBnV;I zX%-vd$ZF zqSlT|>FToW79kUrYqgDBD%Kb_(nT&qG|c`E!#>YE=bxG9Jm-9K&hPzw-}k=ncWH)j zfMsY*I=vZeC4gt_K~lJu(3(orS{o9l;(8(b+WWk)T_A7L;5}kZF$Up6;=;!sI|y3I zh|3TQTSV3MXM9YkBZKmlWutJ%?2krvLXgykfw3c3{YnH@!+!DYmPBHV5j-vVcH6T) z&HG~>L1%`Fw?6nrH3>_{y^TUpd+A?SDFe-?Snz5Hpl@VB^} zCL4adTWFBQ10UYV}of>nvoZ$!?>P=cb*i6kFdYkFDnG9oBm>}A=J1xx9Bi)C>fq4PX!6brn@$C&Rr z@gT&LA!K8IR|qPfI_$K4_Rd}I27}n8v+_Qp$EDDp$WKSQu2mV0=1MZ>dO_+MJN&nq z-}UJizgXKP${0Oyn4gfmK=NiGP*8f~Cx(Q;lie=HjOKRe0kX`*OB}dq zuQI~g7TK#X5+u|b+|@5ufcB(SiQ61QTzAgj*N`_ z4DKNlW^NybVlb%#s2>EJ=NG3MghPTmbI@#%$PhcVD-HIIgkevD9RyWsV`%zyFHHHy zD8Rsl!@jes>Z`dx*H)mWNZ*=vjy+!uqza&ja77HyU^^}H_Ae&q$xlpA-P2ycig8g^ zF|_!C@F^NA>0@wkeDfNQo(RCtX97#6IM7|v=~vJ) z^eh`WfV%I|lcvJCcrz-H`!+S^JhtdIuv4^sMetWf!U&ms4Ehc!5>@jb%GK@+G={S? z^gLeWX-)xcHqw#tLX<_G=Yxse=TT&kQ3uoSIS3pgPnx^`ygwy*?)Zu3zC!7$Unkl1 z_9Xsd5e(j>l%Rnh4gLm{+h^FH9QGJx6U0UR#pnmSrv{)?i8(n3iV*vebFfuC$Qi>P zpVr4mzO*m$!F_SKsnL|CDBW980{l^_+kzSwcPD%Bx;TC#w{gJ_AS!M<(T&&X2gCp1O=#u-g$m(TFIA93>Wk#v(3zqlTzMR8WRe z+(P6|MpLU3gTCCYgLQOQa_Ak`cfzfDSejRm){Yo{fz5Be#m@5)-_1}lYTA<|JG}H{ zBD9+{F+*i0VqrhGs)-i904F$=r|g(}^?JZ1G9pcl(5 zI}lUk!aV~~4@Q+n(C7hAc9%nq=bSPFrdoH4^FWd{ez}B@zWl)K{a<)u7~l zzd~|>$<^0wx;k&*_#QVaJ6l|4c}e+OT_mpu53!DWV`zOhYW2z^HkIGkURm+@+c=9; zNHDIrR64Zb?T#~wG#hTK;{PiepqQ3uK!G#YTKq`VJprgghRDQvJ#2i4Oo!pT2F!7r zE=v`3Zds0Em1Xu-lxRQ|!L-Q`ZSfeHMvH>k>nG*UwXg&$UMB!SgeSpG`GAdQP|P)e zf8yD~)#S2wCMut7xnUJ`>WJEGHX4{{PDD8zGf_s>GnZ`Wo*kYDEAqgalnlvotsy>iIxyOJI5_Yt8_+Y2E03#@rTv z8HxhL9O1<&^abnPMN9{fyWLcbu+0IDL^M+$Cwq+y^)XpOF+Sxh9W@uI7D3}Sdd?nS zjgwVF-M`nfceXFD?MBF>P`i`Bw1nuA?Tc8*bO)MzBK^rZjKm zm!?d#)ENT2LIYD+`@M7_B%I`5i1xX}8uF00E}w_xDN!KInR-$D0Da({1VLWzRJT&s H(3AfG5OJJ_ diff --git a/test/fixtures/line/out-of-range-value0.js b/test/fixtures/line/out-of-range-value0.js new file mode 100644 index 000000000..833a19bc1 --- /dev/null +++ b/test/fixtures/line/out-of-range-value0.js @@ -0,0 +1,35 @@ +module.exports = { + config: { + type: 'line', + data: { + datasets: [{ + data: [40, 20, 30, 60, 55], + }], + labels: ['A', 'B', 'C', 'D', 'E'] + }, + options: { + plugins: { + legend: false, + annotation: { + annotations: { + annotation1: { + type: 'line', + scaleID: 'y', + borderWidth: 3, + borderColor: 'black', + value: 0, + label: { + backgroundColor: 'red', + content: 'should be drawn', + enabled: true + } + } + } + } + }, + } + }, + options: { + spriteText: true, + } +}; diff --git a/test/fixtures/line/out-of-range-value0.png b/test/fixtures/line/out-of-range-value0.png new file mode 100644 index 0000000000000000000000000000000000000000..42c0efa1d703c6571131537aa4e7d24a93c0895d GIT binary patch literal 22926 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/line/paddingXY.js b/test/fixtures/line/paddingXY.js new file mode 100644 index 000000000..46e7b2b5a --- /dev/null +++ b/test/fixtures/line/paddingXY.js @@ -0,0 +1,79 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: false, + min: 0, + max: 100 + }, + y: { + display: false, + min: 0, + max: 100 + } + }, + plugins: { + annotation: { + annotations: { + auto1: { + type: 'line', + scaleID: 'y', + value: 0, + endValue: 80, + borderColor: 'black', + borderWidth: 5, + label: { + rotation: 'auto', + position: 'start', + backgroundColor: 'red', + content: 'xPadding: 20', + enabled: true, + xPadding: 20 + }, + }, + auto2: { + type: 'line', + xMin: 90, + yMin: 10, + xMax: 80, + yMax: 50, + borderColor: 'black', + borderWidth: 5, + label: { + rotation: 'auto', + backgroundColor: 'red', + content: 'xPadding: 20, yPadding: 15', + enabled: true, + xPadding: 20, + yPadding: 15 + }, + }, + auto3: { + type: 'line', + xMin: 30, + yMin: 80, + xMax: 60, + yMax: 85, + borderColor: 'black', + borderWidth: 5, + label: { + rotation: 'auto', + backgroundColor: 'red', + content: 'yPadding: 15', + enabled: true, + yPadding() { + return 15; + }, + }, + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/line/paddingXY.png b/test/fixtures/line/paddingXY.png new file mode 100644 index 0000000000000000000000000000000000000000..c83e94ee7ba3036d023ca0bd15a7da7237f1967b GIT binary patch literal 32334 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 H(3AfG5OJJ_ diff --git a/test/fixtures/line/scriptableOptions.png b/test/fixtures/line/scriptableOptions.png index 704a19c8b99cde038e8d9f4d1a43aa397e57f3d3..4d026932fbf2f67619b01f722b2b2bcf783f352c 100644 GIT binary patch literal 40095 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 H(3AfG5OJJ_ diff --git a/test/fixtures/line/shadow.js b/test/fixtures/line/shadow.js new file mode 100644 index 000000000..833c93ab8 --- /dev/null +++ b/test/fixtures/line/shadow.js @@ -0,0 +1,57 @@ +module.exports = { + config: { + type: 'line', + options: { + scales: { + x: {type: 'linear', min: 0, max: 10}, + y: {type: 'linear', min: 0, max: 10} + }, + plugins: { + legend: false, + annotation: { + annotations: [ + { + type: 'line', + xMin: 1, + xMax: 8, + yMin: 8, + yMax: 8, + borderColor: 'blue', + borderWidth: 4, + borderShadowColor: 'black', + shadowBlur: 12 + }, + { + type: 'line', + xMin: 1, + xMax: 8, + yMin: 5, + yMax: 5, + borderColor: 'purple', + borderWidth: 4, + borderShadowColor: 'black', + shadowBlur: 12, + shadowOffsetX: 10 + }, + { + type: 'line', + xMin: 1, + xMax: 8, + yMin: 2, + yMax: 2, + borderColor: 'red', + borderWidth: 4, + borderShadowColor: 'black', + shadowBlur: 12, + shadowOffsetX: 10, + shadowOffsetY: 10 + } + ] + } + }, + } + }, + options: { + spriteText: true, + } +}; diff --git a/test/fixtures/line/shadow.png b/test/fixtures/line/shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..c13ebf2c8f91bc98001325945a15fabe6d184bed GIT binary patch literal 19311 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 P{;4TxE0)}}dioy#dIe@X literal 0 HcmV?d00001 diff --git a/test/fixtures/line/shadowArrowHeadsFill.js b/test/fixtures/line/shadowArrowHeadsFill.js new file mode 100644 index 000000000..ee31967ae --- /dev/null +++ b/test/fixtures/line/shadowArrowHeadsFill.js @@ -0,0 +1,123 @@ +module.exports = { + config: { + type: 'line', + options: { + scales: { + x: {type: 'linear', min: 0, max: 10}, + y: {type: 'linear', min: 0, max: 10} + }, + plugins: { + legend: false, + annotation: { + annotations: [ + { + type: 'line', + xMin: 1, + xMax: 8, + yMin: 8, + yMax: 8, + borderColor: 'blue', + borderWidth: 4, + borderShadowColor: 'black', + shadowBlur: 12, + arrowHeads: { + start: { + enabled: true, + fill: true, + borderColor: 'blue', + backgroundShadowColor: 'black', + shadowBlur: 12, + length: 30, + width: 15 + }, + end: { + enabled: true, + fill: true, + borderColor: 'blue', + backgroundShadowColor: 'black', + shadowBlur: 12, + length: 30, + width: 15 + } + } + }, + { + type: 'line', + xMin: 1, + xMax: 8, + yMin: 5, + yMax: 5, + borderColor: 'purple', + borderWidth: 4, + borderShadowColor: 'black', + shadowBlur: 12, + shadowOffsetX: 10, + arrowHeads: { + start: { + enabled: true, + fill: true, + borderColor: 'purple', + backgroundShadowColor: 'black', + shadowBlur: 12, + shadowOffsetX: 10, + length: 30, + width: 15 + }, + end: { + enabled: true, + fill: true, + borderColor: 'purple', + backgroundShadowColor: 'black', + shadowOffsetX: 10, + shadowBlur: 12, + length: 30, + width: 15 + } + } + }, + { + type: 'line', + xMin: 1, + xMax: 8, + yMin: 2, + yMax: 2, + borderColor: 'red', + borderWidth: 4, + borderShadowColor: 'black', + shadowBlur: 12, + shadowOffsetX: 10, + shadowOffsetY: 10, + arrowHeads: { + start: { + enabled: true, + fill: true, + borderColor: 'red', + backgroundShadowColor: 'black', + shadowBlur: 12, + shadowOffsetX: 10, + shadowOffsetY: 10, + length: 30, + width: 15 + }, + end: { + enabled: true, + fill: true, + borderColor: 'red', + backgroundShadowColor: 'black', + shadowOffsetX: 10, + shadowOffsetY: 10, + shadowBlur: 12, + length: 30, + width: 15 + } + } + } + ] + } + }, + } + }, + options: { + spriteText: true, + } +}; diff --git a/test/fixtures/line/shadowArrowHeadsFill.png b/test/fixtures/line/shadowArrowHeadsFill.png new file mode 100644 index 0000000000000000000000000000000000000000..7014da26a31af964a6321568610b63348daabddc GIT binary patch literal 34326 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ù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 F{{o3B7A61y literal 0 HcmV?d00001 diff --git a/test/fixtures/line/shadowBorderColor.js b/test/fixtures/line/shadowBorderColor.js new file mode 100644 index 000000000..833c93ab8 --- /dev/null +++ b/test/fixtures/line/shadowBorderColor.js @@ -0,0 +1,57 @@ +module.exports = { + config: { + type: 'line', + options: { + scales: { + x: {type: 'linear', min: 0, max: 10}, + y: {type: 'linear', min: 0, max: 10} + }, + plugins: { + legend: false, + annotation: { + annotations: [ + { + type: 'line', + xMin: 1, + xMax: 8, + yMin: 8, + yMax: 8, + borderColor: 'blue', + borderWidth: 4, + borderShadowColor: 'black', + shadowBlur: 12 + }, + { + type: 'line', + xMin: 1, + xMax: 8, + yMin: 5, + yMax: 5, + borderColor: 'purple', + borderWidth: 4, + borderShadowColor: 'black', + shadowBlur: 12, + shadowOffsetX: 10 + }, + { + type: 'line', + xMin: 1, + xMax: 8, + yMin: 2, + yMax: 2, + borderColor: 'red', + borderWidth: 4, + borderShadowColor: 'black', + shadowBlur: 12, + shadowOffsetX: 10, + shadowOffsetY: 10 + } + ] + } + }, + } + }, + options: { + spriteText: true, + } +}; diff --git a/test/fixtures/line/shadowBorderColor.png b/test/fixtures/line/shadowBorderColor.png new file mode 100644 index 0000000000000000000000000000000000000000..e4386fecfbf9d1a7ad62085cc3fc960eff8e6686 GIT binary patch literal 24355 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/point/basic.js b/test/fixtures/point/basic.js index 1ca44deb5..a9045c8e7 100644 --- a/test/fixtures/point/basic.js +++ b/test/fixtures/point/basic.js @@ -17,12 +17,9 @@ module.exports = { plugins: { legend: false, annotation: { - drawTime: 'afterDraw', annotations: { point: { type: 'point', - xScaleID: 'x', - yScaleID: 'y', xValue: 1, yValue: 1, backgroundColor: 'rgba(101, 33, 171, 0.5)', diff --git a/test/fixtures/point/basicBorderWidth0.js b/test/fixtures/point/basicBorderWidth0.js new file mode 100644 index 000000000..2965752bc --- /dev/null +++ b/test/fixtures/point/basicBorderWidth0.js @@ -0,0 +1,35 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: false, + min: -10, + max: 10 + }, + y: { + display: false, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + point: { + type: 'point', + xValue: 1, + yValue: 1, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 0, + radius: 50 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/basicBorderWidth0.png b/test/fixtures/point/basicBorderWidth0.png new file mode 100644 index 0000000000000000000000000000000000000000..6fb4459ab11bbcc5808143a2e4502b54a9bce8d6 GIT binary patch literal 9363 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 V!d}mAur(-fSw%}Z^P=g){{?R%BG&)_ literal 0 HcmV?d00001 diff --git a/test/fixtures/point/boxLocation.js b/test/fixtures/point/boxLocation.js new file mode 100644 index 000000000..8bfc97527 --- /dev/null +++ b/test/fixtures/point/boxLocation.js @@ -0,0 +1,69 @@ +module.exports = { + tolerance: 0.0075, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + point1: { + type: 'point', + xMin: 1, + yMin: 1, + xMax: 8, + yMax: 8, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + radius: NaN + }, + box1: { + type: 'box', + xMin: 1, + yMin: 1, + xMax: 8, + yMax: 8, + backgroundColor: 'transparent', + borderColor: 'red', + borderWidth: 1, + }, + point2: { + type: 'point', + xMin: -8, + yMin: -8, + xMax: 1, + yMax: 1, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + radius: NaN + }, + box2: { + type: 'box', + xMin: -8, + yMin: -8, + xMax: 1, + yMax: 1, + backgroundColor: 'transparent', + borderColor: 'red', + borderWidth: 1, + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/boxLocation.png b/test/fixtures/point/boxLocation.png new file mode 100644 index 0000000000000000000000000000000000000000..14bc8f7eea095fc9090f9b3057d3ad39d8c327b3 GIT binary patch literal 35442 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 Jxn}Y3{{zyBvX%e< literal 0 HcmV?d00001 diff --git a/test/fixtures/point/boxLocationAdjust.js b/test/fixtures/point/boxLocationAdjust.js new file mode 100644 index 000000000..f5747cf25 --- /dev/null +++ b/test/fixtures/point/boxLocationAdjust.js @@ -0,0 +1,157 @@ +module.exports = { + tolerance: 0.0080, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + point1: { + type: 'point', + xMin: 1, + yMin: 1, + xMax: 8, + yMax: 8, + xAdjust: 30, + yAdjust: 40, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + radius: NaN + }, + center1: { + type: 'label', + xMin: 1, + yMin: 1, + xMax: 8, + yMax: 8, + content: 'x: +30, y: +40', + position: 'start' + }, + pointCenter1: { + type: 'point', + xMin: 1, + yMin: 1, + xMax: 8, + yMax: 8, + backgroundColor: 'black', + radius: 3 + }, + point2: { + type: 'point', + xMin: -1, + yMin: 1, + xMax: -8, + yMax: 8, + xAdjust: 30, + yAdjust: -40, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + radius: NaN + }, + center2: { + type: 'label', + xMin: -1, + yMin: 1, + xMax: -8, + yMax: 8, + content: 'x: +30, y: -40', + position: { + x: 'start', + y: 'end' + } + }, + pointCenter2: { + type: 'point', + xMin: -1, + yMin: 1, + xMax: -8, + yMax: 8, + backgroundColor: 'black', + radius: 3 + }, + point3: { + type: 'point', + xMin: -1, + yMin: -1, + xMax: -8, + yMax: -8, + xAdjust: -30, + yAdjust: -40, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + radius: NaN + }, + center3: { + type: 'label', + xMin: -1, + yMin: -1, + xMax: -8, + yMax: -8, + content: 'x: -30, y: -40', + position: 'end' + }, + pointCenter3: { + type: 'point', + xMin: -1, + yMin: -1, + xMax: -8, + yMax: -8, + backgroundColor: 'black', + radius: 3 + }, + point4: { + type: 'point', + xMin: 1, + yMin: -1, + xMax: 8, + yMax: -8, + xAdjust: -30, + yAdjust: 40, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + radius: NaN + }, + center4: { + type: 'label', + xMin: 1, + yMin: -1, + xMax: 8, + yMax: -8, + content: 'x: -30, y: +40', + position: { + x: 'end', + y: 'start' + } + }, + pointCenter4: { + type: 'point', + xMin: 1, + yMin: -1, + xMax: 8, + yMax: -8, + backgroundColor: 'black', + radius: 3 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/boxLocationAdjust.png b/test/fixtures/point/boxLocationAdjust.png new file mode 100644 index 0000000000000000000000000000000000000000..84ea700613a114a7e71890db2cf93f0f7ca20064 GIT binary patch literal 49881 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 z zYZIx}b^dJ4yV;QHjG%N8>4Hg_CAx15EVEg<^E2A>mHSP6w4jB>t6U@cnD`(66XCCdMEo{vZvk_l3Rf<*3BNkmmJWZX0X*uN8|}<^iQ^PL~)X3 z)ka(tfK+53N8-3fZi6;Z8>|WDvc>HEP$R-^s|(xHs?3}r{wBj?4BqvlmdqPt8!>$i zSI!|!oZ&xB=&$*OtvH2X{=OCGO==tqPsSk!bdw|NMkJ~1G>1Q)_&a1kSvK zu6bNBKcrhoBM8pq=+dUK9OJLApoly7VuH_UbEROM7T!*8J{7?TfsT=>NiL0861 z$G{Q}Y5`pg3DF3lyzyY2VuqLBpUPUN{&%&v6fCx=Y=QwSB4G8yqe_BFx2-@j@Y1s_ z;oiQY)1#_Ss&{PH6TIqg6Bh4XBy5d6<$9lzt!%xjQ=3qD>&V$v#6kV~Bh`cgYLV2( zVAhcZ7Id@phg$U2>cyR;CHgcvtB>3VaNm0c5=K__p)XUYp7PwQ4!}ZwK}Sf5SnlQb zVg=JOPl30DDx$gX{|r+sSi_m%644QSlh0l7qlEFbga&NCDzU>hqoT$jON7L4^ka}= zX6;ZQc<&X6jx0&&zPO&FDA*KW57?gs-19=rOvNf#r@lI_U+QtMg1TphfSAJm5l_)AZRZ1s>p?#F%R=5*Fwo*oi zzwN#5gOT(4%|VP+NsV+Ysd-PMRIqGp_1nka{QExdj)9PB#Vee`m8{n;c&(^y9#zOM zqnH*OaW$QWC#!8n3;GHRxn9&PK0U$|)pafy!On9Ln{{iOYKJ_&ubJp}L|D7c%$g9) ze)sRY0!yfVRNrNIugz`p8*_g*jP$sUXV+o%HcEjx^y|QdG1uFoVHOWp7^P z8YVXi<_jW6D^=^wK@No9qZM#*^2xWw^7)@jJb*Buw2dq5TXDnj53@&ouD!XoG-hXU zg)aidQa{~Gz7#<2@Cd?__Uo}0B|bgZ$2qN%dO>b2a zBf5M?`IiezH(`7WXIpcQ1A4}x-Qu*HOLD#P9VR!Z^z|g@o$0@Q&kTl|T2L;JZqI6nck36#Tb4+2i(85U@)g&sN#;}&^3auU4 zia}L9N%IBcYbLap=5o46Ug9n*nK=MjX94BqU91!y+Z(F3k6%D?6nnu0YcgIIF<1hj zOKLsI;qriOHwgY7?xv@V{zClB!#;f7;!?3R)Zv3smkfP5S9HYIdhIt-0nPC}?RC_J z3xF~9F;;WjE;0P3e^`0i5zFctb*ZZ`s~f=+Wr6#vsMUL|*grPIne^Gtc$;**k)eT0 zgg9Qr?_`OVlpHHQkONn#zSYQ#eh0sYdE-vDk(?vN{pS+9wLl&Syk-=e#D^zfGDJ?X z)V`4jzWa<`Z+^_4fEEk$YhvA+AD;9xm{ zQtX`g{p|dS(_$!nQoQ~+;-A8J=Y|9`%`&}U376=n?cT7L(oSz~nc8c*{5##t-IO|l z9GWQ>g91A*x!fPc}HHtk70Qzp175IG36NW%FqWF zumuR_bsXr3&&irW)8noAGchFhYDb9y@B2BAA^VM&^gS&Wn=hvZC)HE0!sfYMdk~|; zb4iuz-)<`ej~YvnN@$HGWvPJk4pcdim#@&E={kIy{B8D6Ho#+6tzN*TT$y7-U$t!N zsjI~MU=7G3f3+g1GgaJiK4xWZ;JX?oRF5dCc#UoW-^*_gyv3{es~j>gvK8J?7w}7~ zJ}h<;`5!KTINhEU>@n`bN05X0JdX`sj=01Qi3mxJvj?bHbCaViMH?o+w1YLi=|rGo zNJk&JYL4(i#*h_Gvon&?AQo*AR<7^~2k4#6Q>0h>YK>nH&@9sFp}lp^?89nwr=A=~dcS)=e- zI(Rgv&%5OvDv}XRFj0M2c0RY(G4s09^)&Y@>0+J zbG#QWlDQy5hyMC)A?sAU8+KDn^hsYJ!lX+p?T(@`Z?l1ylBFTdtg!qWahP#&@GK+fxha&Hj*j+WkB#24lP3y-J*+B-;>D74a_grNk^20-6dqD~`AKlU zpi7(uoZ|DaUTJOaRZoI)mE?m#Y%&D~Rt*6&Bw0<5>+?Rf3)pvZ38s6Ib4uMxFD${c-h;<9p z>(3rc9VWNocz~$#Yq6j=fZRxy>ZZS^I&~UJbV#lBh(!*6sEd4I;UfPBh(kfr))b4! z>Q^@#N6U+$5Nc*~ge08_X5L()miU_}Zod0b>)TA8N6rR#^eClzbX)5_z*gVY!|&*1 z>!-8h5sD9!tDS#LA6q&Vsvp;%sD3N&poz?BMESJ}6@x~jfgqjK(BockCU8OXSGccO zhO>n2vcV+yGSc?VP6e@m(WE-t2I%Mlb^YrR`U|PwsFQW83HP@jW$U3+X0jVFEJv;r z-+{aIuC7FmM9kdp(l);e(^DTBJf$}Ie2L%EbBCPQP5)f;NLi&%3B=hhG13cxUGFsc zxkI%-3K6*$K2g=@f6vLV2S@Un?K$w6{zs-(r(bUS{>)wQ+)5vhPVF)q_7-K1DS_^s znZ6*KCCuiZ4l7E(w?^Ew4rofOgCUN*bT_b{?6*zZn0{;Jk4RL+RXV&)Wy~jNL5zCQ z{WOEW*LhJ;0&Z~cty}2TqdPq6Xrmzqw%*V(NmoyKJjUe~SnEw}c!pwg+;x51 z_yD>?b)2`S#=A5t^#-g`SAS5&9niG?1N!6W^<=b1(AQEc(9jLdgi<~8>y+3H1>bOU z*UoB!0XjbcQf$1^vHo{6@PFIp%8SY`z(=HcgHOQjBU0u33Kzn@uY;~|)+PD4v+tD& z3CPBB2)6(GEaLw>8^mZ&?_PzKq|`n4m>eWtcU4DN1^VSG!qU2hS{3`~l-b^zfUK9I z;?KvpyW{Ur{uy8CKQQ3`p7o?E4aSgo493AUF-2BChUxOP-f0*|loA;*aTPk5EXQrk zi7e`sa2=Zn{*l1sNq)0Ppx3L%W4P`oQFAj!aC$ea<}DD__ok9_sPQtB&DP~NlAUHw|llgR~6tM*m)CfgK=$VvhR=3^Cju$xAW7r)qN~cibmzopJCJma%E`~ak zv3yNvjs*q4{S&QEgiKl6t_>J%OsP(AD?gA2>}4*#Wnl_&tn-m+y34B>i;%h={K6W9pa+x zX?u>@*#?0AgKmkt{e2(!aory-VN~EgEf`W zK|3$Pmcc?RE)VuGR##{^T@`)-i2{A)gfoRFX#jtATtsG&c23hZ&f z>;z04PK2B}^dYyo>8*tSBR|@a|2yz%1loY26r#B1jf3gwK0Wc)EAE%+l6vejXeQnr z_E>dY(R^+ng7_G|mvPp?Q&oxng-$5yU(m6$t^ddo|3DdJMqJ)(rGnmCyH{sZQw>qf zOC%g=29K-*B5?iR!XE}!Q=_oVRXJk>KwH+1J>Q)|p4CXIK%}x+FMmoFPX@Pd1qYS^ zss3+!ka*<^5_?>ykTw`TkyEG}nGGDetSC7%z{&67@!hf#F+DOZ$~${`7zv+llJz+k zoSpyeepQj0BbIDzY4VYfU9uxH*=fn~y4!J8j6Ru~UdXI{C{wl%HhR2trF$O=uM@bu zQOgpeD0n|d8~5@zgR}l7)nn2OmwOue3>C8LwQa3iJ_IZ;!(j{=hH$(Ruawt=R`C3A!P^Z?;R+Z~jhP$}AQb@`um#5>yq9*@v(!h^24 zO&?1%`>_Pt3x8OrA9bXYzXQ&K9|3KIv>poB?da-XdrlGdWZ5;OTT25E*n?BI8aVHG z@x5dZs8g@66WK{=I5vrwTrOIh28;sUqd|P49I@F0RQ3F|v5ki(moMWTnW*HOr}{KS zl()4_VP+~5f94bO-X9b2GB$tMAkN%x$g{B=<6b?>Us>b;@$-S^boRZe-cYcDm8VF` z&*=>qaG#XGjM96UuiE=dIIhj)OZzB1#3zD)Ax^UY)?{z8`k87sK31%3wL6mQfD1m~ zLx;8%6%ra%3H4mv`P=7ZVNlW=+WEw&M?iFeBu<2 ziOk{W+VjU;!1FqI&fdVe`TVyc)r{4)D0P9jgnyvW5(0iW`+;YUy=Wy=xzXd7<8|z^ z;&Uh1u9+c6LeFffFcsS8NR9ZTXQ)W;G55cwLRv4HT9D4Lz>MwZtGi*nGAqLCyY}ulwa4pvZ5ZI?<%JPwbSlJaz|X@|uI~zHmsH&qbu*Y` zDSuAbL%9upgFqZ8MGfmD*Gxy1{9!8tWGQ%B)W114da61Ny=KJ>C?)*x)p#-Uag%Cm z%A!jq_Rt(8h$ z0gfRGjK2=GloRmRh|FZHp_2E6nJf>1)&-e-FSfw2lgj$G-c=1&qyt2 zw&wA~b2P3|+@Rw-@GJhCa}Q`TTJaT!2oREiD|nzkMX_SmlZu$}c!XgZ9&rZ91P#FVEPyDbHvdLuFG}brp|LvqZrik{U0e0h#UXE_9rVz=mf#AOQis1XFBFnq$VmHs)?TR#$Xa%E6I78;Uq0$tQz){5NTkX zBk~-|`%@kji52ojjQ*JS$FUVkKmrOM11hI3_vlqzTJ>mA{bT*byOjt47cT%4kfI~1 z-D@l*+J9P5lQ6@XcGVn~H!^>L2a_prYKSCvKhI1VvHu>5Jz@soeSa}W3LEZ(T*_PJ zZWxR_n#66}+jk>|7-sM+X}#ek;IDV{QGUhs?3<~|w)|>|FeB#a1eI}|1Oxp*Kb}4Z zXGSp&GD`e$0ehk&RdeL~ceP4#pOo=BK;<4y4P3q2YZN*h)~vj{{c=xnt)At?xN~6w zerRi6|4q6#*qtv$4H3=?rAv8XxFU`PtxZgtr$i%}(cbpvO?h7NNubExcJLT4-jNiN zAx)$s(}NB#xioe`LWm)`!~K)zX!MQ7 zo1!r1@n*KrPa5rY$Fg}VPCr<(XJml2$TUJjualST44_67uZ1r39&FE^d^23CSxe@0 zI?}l}Xy*6ELJbBag*7usuU%%8n=M>Wa*mqbQUp0YnaX-hqK*o$Jxp?V2~c5lyi=*!aE{;k{yF8NBj3&{1q|q^ zEY*?vOTlkI>Gp?4%FZ{WHPJhs1~|w!yNRS!fG4*n^)(^d=|kS8Z=PE6_9X@jfR6cq0 zsWI6?KZu*!Fmn>W5jZRKrs3b4m3MBGBf%LOyPGwDT<-Y`Ft8qinJVmuHau57S z;jie5iw96T;$MM8AK60G5F_a?XR~5nAJEOMazHcOVb4cfFMbWlnvAJ@)oHhWS?}CW z{z1$MTU4_7b>Agppfe8IWSTjtG%%T?KrMY)J=UInCXcebeXS`itZ%z$ziAL$hY4J@ zynq(&%;je<*%6ma$=t#tG+&Rm0prTSXU=4U6F%C~Ck1$k_lpGsrB72{bD<6YQc_Jk zd*|zTGUhT|vC&~Xo?qNBsE3Mt#j-g!@YjrF>vbPl^c$)E_{Jnr!I{`=^c0a(Nkj*2 zR&3!iu_I7x+7-m>yHRIF_dA$*z# zoU*_@-tKvD6`B4rn!WACHzP{c#k^3_qtGL(X)gvf$R9#{HsI}oODGCfzU6Gi;7iTOXbbqH#5}!g!W<;v^ zGt~PoCRG?cbM?2&b7bEfANp%~J}19IF~A~t+x6pg*qX9A&6B6q_nUR9Y8jx-%u}kt z4su(4Hy)tCdsEyJ7RQ*q%`D`=v%q|C7m^X#lbfw#L>X>5khG+4;@;h2eKKtlIedY2 z$bv2gm=GiHIpreWfNKj|uaOQC`$=PaVIZo!-6+xWWwajp07oJ2YbY?pRD!BG-=Hqv zJ^Q&N-BukdrCt z*m%NS9Bh6IC3w^G`v1JJ-=PV{o$DeJUrSk`lHOF(8w##3P?2K&QKdf3^@%~|yaxi< zeok_fq&E+IWrg*Lnt3MGZh_?W>pyLw-~&_mDDu+U+^RE~4doYQrz`Z7oeS^nZgH@8 zFff$$ROo%P#c0}|Pjsu{3#-LncvuZuMJfI@4{W!+w&{VG_iY2mfBC4JZSsTlEha3@ z$?G_N&C^N0Wl=<@$BKn-|h(2b#C&C_E}2w!MpT;DkI1RT>KbeGv7QL|F(Y)N*G{ zK7#Jt*vj&?v;Dj6bhY&-f;Eh;|47X7FNvKIaJEPAdxbfW!xTar8G{HmBu>K>Cu9J= z&m^fwLyNL%jNssGyY!eD+zl%c3nGJ zRUg9%s%hxKIF&D*F8D#ij`0Wet@pO?x6%@QjiyF2mIgUcC5q!@{#GC8V;wvxxZ^uo z&&u*;>klFVi~ko9bDke$D7TFn`JJpfrABfVA~kq-!z~33H#g(b3;kQ9B${b+4_~+f z6spD@64IV_&VfE#g*Rx(3%TX(K=rSzRoz*3cb%-q`z}Dx^0D~_`+zRr{}`4P)%u59 z^&Z~M@%EAPlmtBZ7|n0cMW=BCF_DiXpQ90^gB=q)y?>ra-2odd*1Ku(zNcvF-OGpc zBZCPMFyK5Z9@wa>e#KIw)1ERYQ_;?`nrR+F?e`g(i@H#{{vFMmm}&-N*T0021VTXT zu8+Aex;GoQcIU?MqQYm*XYoU|PGMwlpVJG$WUm7;@P*0o_fCK{KkMP|7k=e3VpV-k z?F|;!>rJvqYphA@!f%H<=;CM{c7jD-qiArl@1t~>kqir8*H;q@dV&t|9p$gd*37mANFL{22K#6f(L&g#IV=9i-Arq-G ze2{lD<9%kSem)djUa3fVIP>WFA%s_y8meSlU_--R(LWQDQBw0NS*@ANQUd8A&x*_1S6d`>D@m05iCh zEUuTpyiO51rDarf+T-O>k%J;F@4R+2vP&zYd5VrV|!F4C3*9isEfpz$}0p8bb?1{cq;SxLE1C86P7(~ZZ0 zVCXWkA?+qwc-`;Ql_Tx?Bz$|02^;^;*|&jX!=CGmwQr9q5PEa?1P&8j7aqlWXJCg9 zi_|Ze$eA$Y_dQl9+^0V7e=*GlrK7B0pW#fYTlt!i%8BX#fjCiUMnEso$x_HFSk6=6 zDUyb~Fv^CHQ9;KhyN#H_Z=~&M>HCaZy-^=!7)2)1nlD7K7#SU%2&6TzSQKuIMAtB; zKvaH#%G$@_zi|p03Cv>Oy;QTeHs4G^5ejZ$B0A+<6eJK}Z2yF7W8Co`X~pJO{Tf+> zdXCJzLAT8=J>S`qek^)Ebcdj!BQXcoYIV=@5iI9L#o9#buwaNFh24!hrGnOAnC$eA zUCW!^*&VBJLxCrA;|c;o@t;_4wP~MI^}GKxJuxH-PoH;&bBpZq^zKkz-{op0KFkHW z7B+8b@!6*y7IqJi!mWSWOjLQY-@Eq;!;QCO4z$Wcg{X|zvws;=b67v4OkIs^B)Q_W z^%4P80}TT0qu=E-e@-j%tt4%1V&K@F0+Se7B_o15#&oB3t*H!e!Iq99Pv4jh7wwa( zzTN(mUf!7vc8>?BQ4eu?|9Uq9eD~4Xig11O3mYOMFah8w_yW@H#r#@>1ZX$jqo99O z-_#^t`#R_Rb9J@gd1)I8U=GzJzER+wHvt|OO$yle#{sMCzqQ3;JOohg&ji%nf#gwA zzbcw`8w9&&jgs7K{0j9nFqm&KA`=_v(+Cd>E9AV3eS+dvs>Z69js#trzv5cCuPIr1 z+r4JnFF0?fqEVt6%O3w#kQlfPSGfGsF5Z{ONG!tyWR%~fun-6SOw5^iww?2o@!>dwTxbT!Heuq)5~gJydwbENugML5D{|$~hkb$Q0C3 zNH@JSw-Br%)WXDs+@nMFM<$>O$nL~ij`MC&15ziz*Fw;|nU9&RB7WKhTJx5)Hjv-* zXu|REuwgpb6h+uV4A)qI9f*Z$wZbRtlboPJK7#F+r2;PNJSUNDFP%qVeL23pE}!D+ zs(_%5Z_OS+TudK`{U`A=DfH#v;a_!HevIZh*oSm!qZrxaZDmC?tQJ269`2pclrq>A z)e>(P5srQ#-F`EpUFn!qw+U1{IzK<=mT9-RXO zt6}zoxDU0uf^s#XfO5XyyYT-GpvXt3pBytTm``Wdl&xnw{$MY(?LX|X{bHc3k9`uK zJZP?5znWGF1c}if>I;}mJF0aznE7kp@vkGPdLQoZ(TiD0jp~2@3enUqvD@0Z}_+hJSxITS1eskZa$h z`Yv_B+=BN9!%Y+E;c#Dz!;=&7B#qj=YC4_+lf`tI0qe#i_jd8iw!Vpu&XzK}@V{#SsWdm7QA^!h6=lh(nu&luGb4>VR? zQ~CLcAY6^7ZA{IUF%XA06;UME0V6?c9rYv%mm-+MrkWd(yf`mD9O-*(RcesE6GtCf z>{%kD{!%%pR01jO)nMaI6=uY0H0_RQzzJy8lXli?n~HxXdY!bxg}Vwk7~gY@M|fe4 zoxc``Q74_mX70^wtahGrcCQ?fh3`AM*iGoEsuBZb#@ur2SoPb2PqkmmHM z_BH>>kD2}7$>7i!8H^O4bW6x4xH-?`UVbgm8@p#!-G-lgNK ztKaXyZT37PfmZ)PBl!d|zh;E7 zJ1rB!@9ESF0{~S1nY4tO?eGUFX$v3`qd7?);27N6i?tl%=O=|`Trc$10YP`ZC+#d2-*DVuz z(`7i(*4zin-8dyOZCcX|qd+&ZjR2`SpvmExTNl(HN4 z4;^iJBGy>^^0c;4eiFw(W32MNg z>Z6_)w&7*peD-$&U+RYcB3~C8PkW^(#A6_$IO;s9^}$kxVZ?xgZa;~2Gt|n6;&EA?bN5of&9^y1YKcBOl04X zyx~7T37}Ij0!S3KNASack2W1Ilpf%b0>4TA&&kI$1(gHbb(5j|-%)(~FfYZ6%3?MZ TNOA=M@ZU2TMd@Nm!?*trfPZEY literal 0 HcmV?d00001 diff --git a/test/fixtures/point/boxLocationRadius.js b/test/fixtures/point/boxLocationRadius.js new file mode 100644 index 000000000..fb5d3f434 --- /dev/null +++ b/test/fixtures/point/boxLocationRadius.js @@ -0,0 +1,69 @@ +module.exports = { + tolerance: 0.0075, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + point1: { + type: 'point', + xMin: 1, + yMin: 1, + xMax: 8, + yMax: 8, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + radius: 10 + }, + box1: { + type: 'box', + xMin: 1, + yMin: 1, + xMax: 8, + yMax: 8, + backgroundColor: 'transparent', + borderColor: 'red', + borderWidth: 1, + }, + point2: { + type: 'point', + xMin: -8, + yMin: -8, + xMax: 1, + yMax: 1, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + radius: 120 + }, + box2: { + type: 'box', + xMin: -8, + yMin: -8, + xMax: 1, + yMax: 1, + backgroundColor: 'transparent', + borderColor: 'red', + borderWidth: 1, + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/boxLocationRadius.png b/test/fixtures/point/boxLocationRadius.png new file mode 100644 index 0000000000000000000000000000000000000000..1f3fac96bc0c68944c22b9fbaff7b9dea20e9fb4 GIT binary patch literal 31325 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 vY}hUQ%lX+PaO?nAg%TFtzar; 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 GEB^}(!P{j3 literal 0 HcmV?d00001 diff --git a/test/fixtures/point/cross.js b/test/fixtures/point/cross.js new file mode 100644 index 000000000..a2577e322 --- /dev/null +++ b/test/fixtures/point/cross.js @@ -0,0 +1,57 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + crossSmall: { + type: 'point', + xValue: -5, + yValue: -5, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 3, + pointStyle: 'cross', + radius: 10 + }, + cross: { + type: 'point', + xValue: 0, + yValue: 0, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 5, + pointStyle: 'cross', + radius: 25 + }, + crossBig: { + type: 'point', + xValue: 5, + yValue: 5, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 15, + pointStyle: 'cross', + radius: 50 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/cross.png b/test/fixtures/point/cross.png new file mode 100644 index 0000000000000000000000000000000000000000..b63e93a7ba42f1f1b970a54e3e65200a4e81382d GIT binary patch literal 18574 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 CJ7T8* literal 0 HcmV?d00001 diff --git a/test/fixtures/point/crossRot.js b/test/fixtures/point/crossRot.js new file mode 100644 index 000000000..18c2df444 --- /dev/null +++ b/test/fixtures/point/crossRot.js @@ -0,0 +1,57 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + crossRotSmall: { + type: 'point', + xValue: -5, + yValue: -5, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 3, + pointStyle: 'crossRot', + radius: 10 + }, + crossRot: { + type: 'point', + xValue: 0, + yValue: 0, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 5, + pointStyle: 'crossRot', + radius: 25 + }, + crossRotBig: { + type: 'point', + xValue: 5, + yValue: 5, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 15, + pointStyle: 'crossRot', + radius: 50 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/crossRot.png b/test/fixtures/point/crossRot.png new file mode 100644 index 0000000000000000000000000000000000000000..5a31c3308c877a1eb110ba822d47f812607d1b26 GIT binary patch literal 20411 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/point/crossRotShadow.js b/test/fixtures/point/crossRotShadow.js new file mode 100644 index 000000000..b5fd16ba8 --- /dev/null +++ b/test/fixtures/point/crossRotShadow.js @@ -0,0 +1,69 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + crossRotSmall: { + type: 'point', + xValue: -5, + yValue: -5, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 3, + pointStyle: 'crossRot', + radius: 10, + borderShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + }, + crossRot: { + type: 'point', + xValue: 0, + yValue: 0, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 5, + pointStyle: 'crossRot', + radius: 25, + borderShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + }, + crossRotBig: { + type: 'point', + xValue: 5, + yValue: 5, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 15, + pointStyle: 'crossRot', + radius: 50, + borderShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 15, + shadowOffsetY: 15 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/crossRotShadow.png b/test/fixtures/point/crossRotShadow.png new file mode 100644 index 0000000000000000000000000000000000000000..91e681a89829dc4f276811e829e6be84d8d1ccb0 GIT binary patch literal 15465 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 PA#~^7--~w~J@-EVI1YSn literal 0 HcmV?d00001 diff --git a/test/fixtures/point/crossShadow.js b/test/fixtures/point/crossShadow.js new file mode 100644 index 000000000..a1036cef7 --- /dev/null +++ b/test/fixtures/point/crossShadow.js @@ -0,0 +1,69 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + crossSmall: { + type: 'point', + xValue: -5, + yValue: -5, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 3, + pointStyle: 'cross', + radius: 10, + borderShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + }, + cross: { + type: 'point', + xValue: 0, + yValue: 0, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 5, + pointStyle: 'cross', + radius: 25, + borderShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + }, + crossBig: { + type: 'point', + xValue: 5, + yValue: 5, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 15, + pointStyle: 'cross', + radius: 50, + borderShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 15, + shadowOffsetY: 15 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/crossShadow.png b/test/fixtures/point/crossShadow.png new file mode 100644 index 0000000000000000000000000000000000000000..50d69554f220ad8a39ef3d854d7716e99c00e9d2 GIT binary patch literal 12737 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 K%Ksky?SBBg@QjK8 literal 0 HcmV?d00001 diff --git a/test/fixtures/point/dash.js b/test/fixtures/point/dash.js new file mode 100644 index 000000000..250e74b83 --- /dev/null +++ b/test/fixtures/point/dash.js @@ -0,0 +1,57 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + dashSmall: { + type: 'point', + xValue: -5, + yValue: -5, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 3, + pointStyle: 'dash', + radius: 10 + }, + dash: { + type: 'point', + xValue: 0, + yValue: 0, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 5, + pointStyle: 'dash', + radius: 25 + }, + dashBig: { + type: 'point', + xValue: 5, + yValue: 5, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 15, + pointStyle: 'dash', + radius: 50 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/dash.png b/test/fixtures/point/dash.png new file mode 100644 index 0000000000000000000000000000000000000000..81bd8c6d3dcf8ebb731a31ec4b1d87c893753253 GIT binary patch literal 17853 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/point/dashShadow.js b/test/fixtures/point/dashShadow.js new file mode 100644 index 000000000..d5343baf2 --- /dev/null +++ b/test/fixtures/point/dashShadow.js @@ -0,0 +1,69 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + dashSmall: { + type: 'point', + xValue: -5, + yValue: -5, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 3, + pointStyle: 'dash', + radius: 10, + borderShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + }, + dash: { + type: 'point', + xValue: 0, + yValue: 0, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 5, + pointStyle: 'dash', + radius: 25, + borderShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + }, + dashBig: { + type: 'point', + xValue: 5, + yValue: 5, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 15, + pointStyle: 'dash', + radius: 50, + borderShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 15, + shadowOffsetY: 15 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/dashShadow.png b/test/fixtures/point/dashShadow.png new file mode 100644 index 0000000000000000000000000000000000000000..fc348f8a47c1ab612cc5360c05e1b3ea7705031c GIT binary patch literal 9861 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/point/line.js b/test/fixtures/point/line.js new file mode 100644 index 000000000..d4e24c389 --- /dev/null +++ b/test/fixtures/point/line.js @@ -0,0 +1,57 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + lineSmall: { + type: 'point', + xValue: -5, + yValue: -5, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 3, + pointStyle: 'line', + radius: 10 + }, + line: { + type: 'point', + xValue: 0, + yValue: 0, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 5, + pointStyle: 'line', + radius: 25 + }, + lineBig: { + type: 'point', + xValue: 5, + yValue: 5, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 15, + pointStyle: 'line', + radius: 50 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/line.png b/test/fixtures/point/line.png new file mode 100644 index 0000000000000000000000000000000000000000..0913059e0d24c5c82826ebe2b371531a9e61117d GIT binary patch literal 17797 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 A#{d8T literal 0 HcmV?d00001 diff --git a/test/fixtures/point/lineShadow.js b/test/fixtures/point/lineShadow.js new file mode 100644 index 000000000..edafc36fc --- /dev/null +++ b/test/fixtures/point/lineShadow.js @@ -0,0 +1,69 @@ +module.exports = { + tolerance: 0.0065, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + lineSmall: { + type: 'point', + xValue: -5, + yValue: -5, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 3, + pointStyle: 'line', + radius: 10, + borderShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + }, + line: { + type: 'point', + xValue: 0, + yValue: 0, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 5, + pointStyle: 'line', + radius: 25, + borderShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + }, + lineBig: { + type: 'point', + xValue: 5, + yValue: 5, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 15, + pointStyle: 'line', + radius: 50, + borderShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 15, + shadowOffsetY: 15 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/lineShadow.png b/test/fixtures/point/lineShadow.png new file mode 100644 index 0000000000000000000000000000000000000000..b281fbdb66aece1ff0869d6f4f4d84674680350a GIT binary patch literal 9723 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/point/rect.js b/test/fixtures/point/rect.js new file mode 100644 index 000000000..b7ea90185 --- /dev/null +++ b/test/fixtures/point/rect.js @@ -0,0 +1,57 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + rectSmall: { + type: 'point', + xValue: -5, + yValue: -5, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 3, + pointStyle: 'rect', + radius: 10 + }, + rect: { + type: 'point', + xValue: 0, + yValue: 0, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 5, + pointStyle: 'rect', + radius: 25 + }, + rectBig: { + type: 'point', + xValue: 5, + yValue: 5, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 15, + pointStyle: 'rect', + radius: 50 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/rect.png b/test/fixtures/point/rect.png new file mode 100644 index 0000000000000000000000000000000000000000..7004d10df8c20e22ade14b1bf67fbefa7e261baf GIT binary patch literal 18886 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/point/rectRot.js b/test/fixtures/point/rectRot.js new file mode 100644 index 000000000..6e995a52d --- /dev/null +++ b/test/fixtures/point/rectRot.js @@ -0,0 +1,57 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + rectRotSmall: { + type: 'point', + xValue: -5, + yValue: -5, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 3, + pointStyle: 'rectRot', + radius: 10 + }, + rectRot: { + type: 'point', + xValue: 0, + yValue: 0, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 5, + pointStyle: 'rectRot', + radius: 25 + }, + rectRotBig: { + type: 'point', + xValue: 5, + yValue: 5, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 15, + pointStyle: 'rectRot', + radius: 50 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/rectRot.png b/test/fixtures/point/rectRot.png new file mode 100644 index 0000000000000000000000000000000000000000..69546f8cfdc76f9e611466421dbcd6c83edf4e5c GIT binary patch literal 21048 zcmeHv2T)V%y7meniZm4!0Z~K*5hY5M9u-Bpn<6S*kgA|`3?&wdp!6aj#X^x51Q8HI zqKE_$f`Ifc(nBIGK!E&f1vhNH`C!Tcm6ZOjLzg+Ykl=C&-1+Bg9|!p>|1%a z0sz3SeqL1%02sjkG5}kc!GC7GT9&|nV6J*fManK8YUm6d)o9GSJ&F6qIFLW11EcoAEF z8AO~^H1ocy7YN-+MkN8GVEnhbkjXJZ-%-K7N&6dhpRN+?wsb5%>Aq1aUN@eA zq;@K{5jx{vHV=;+nJR!Co;?Qe0!hR0y6hb_g+j4@4V@Dx5sG}bJ%HywkoMNxlCklk zK|cj(1O)Qx!~b}2kR~C_bE%xAHC?^dS5&ZQleKf8hvgu-`ztdpScM(6z5S4V6>B+1 zYr4@PN_w!?Zm;16E`UotE9!RZqihdeAeO_!^aaDiOxZ`)#0)Qrmd+G7gfypZ4vQxS z%9??GK^8d2-beOAWl4kS-Y@TYwyS+nvQ`d`=H>-Vy!Wb}EPry|h43_}CQ6|}TsCUb zmF4OW=sAn`d+sZI`11H%AXZd+Y@oK5-!`64eZGw8)dCqD%yG*`pugMYU{zmC8S3F+ zZO@im!DAg_0z5}q2+7QVk+#>Zemkv$wLLpYDYdm24o~Il5elaf?${uxjDAX3Z1_#vPR+K>@{z%TeF*HP56h*GEWSd1u3utWe1rIC}P(E;po~}L6_9v zZm-$VFKG0Jf&cRK3NMPIV5_*{gXjHo8W~rKhwR5)Bg<0^$6~F`6SKt4y+EVb?ze<> zmEtvZAHql4g6~o~)*O}zNCEN(;>>oLwWr_N^+|0i0O6taEkQvSke4a%cY%&H2OsKp z-!jdVmNq%5|MG*SIkVfQRu0QL4nfNG`!^X1gT7qb6gUDtvU?(oWm}|XQbw7jmDRU9 zVWr*-joU9h{XP(28mvDiHDm_%D%EyM5!N`@el^y%C(9v-9W{Ln6{{*yyF(kXeXziDF7w3A)8~B^Q%)Q8Vx2tsr)U@pmu9N~QGKFT{}4&c$#7)jJUH}9m1S<+) z!Z}+GPz*09ukfan%`l~f*)YEYZ8UfMh;~5nH($a7AT+8b7ZK0Vaa&#k_0;NkU}{1vQdjrulw4X-KCU>0mx zaL@qvr^5s&&zKCTLhL|;$-0Gh32uGI7loug^TM`nH~9Uze`Wd0I|LFd7X6ot#xBEG z8VrWw!c}gO;kPP$sPBVKb*{t?+XFX09Km_rZa&}Y6cVrd1#&V@R{$c^aK@h>rcoI2|TkIx63GnopfIyRUDS&LiDtJc@zRpOYh$G zY0+f7u-WVklM*fr+#a~E*G4YAfI@L9nnjM|FgdE zO90mb{kQ+qzPQN%M6z>(&!T43P>@D!x70M}bE|qno{BG-pfLQxNuELMwF%UL%)H-6 z8Vx&49a5<&vS0lpgSYvwr5T=s`4-UXPZHv4FM0LUHzx)_(Tf8>{~^GBhLtP zG5|v+@^BXLZA|;%<#JIoFiP?|=u%{lOD$#~x zGk8`q&d=nvyqHO9@ew#wR`B?>8O@?!B?K=U`rY(~;Lo6rRpVEa5spMo_DR8&WHhMa zVl}gK1K8;1PfR}Fs^R9eGAwq6^}B<)eFnV``I#Gi@H*2napHA7ay66FUz4j*s(GZz zt?w&84RwJ(Al2_H8OaXzxp=)jec-y7@$4XMI!nZN?9nVvyl2jVWwSGkC{6f!C>hV3 z#?jk`zT&vh%=Dynk^UCHk|6HQVIQTUy0w2a0WI&SoraE_{)s64xBLCjPhmLH{I6f3 zN-oQJ$$tnfW3WM2^WB}>GxxBZaq?duHh9rwuqL7e+5t>u%IJEiJx z@bU3+KCJoHrLW;^4h0TXzNgnb5$M4p3~LRB%%U=sjo@WSo>fK}7^dZs-h6haCFAjZ z;b>jap7vY)gf<<GJ0Br=?t@(%eg|8{s06mS82l(QNiHUG+ z;b>$hgF?y{GE*7s`oE6FV&s@%`Kh*Tj-LH9^$JfCrOC4P`?svx&~p}DVA^(_+2kHtzJ)P=h- zw))2fE514^Qv;a51^0J$cD{9Tb)8vMV#5_q%rIH-97swH@_ZxHURV@`lsSF)l>1a~ z_zLCOzGb1bw@w1Z*xfI(`DK8vK86J?YL{5}KBc9(;^N}X`Wm`3$50RB^27}eg?)`} z9@EIhaOGbOt>stc0ex5hmY+*`W5(8>6VWUcKKX>%tyI^GfgVNtvUbu_UxNH^a$V4t zy=_k_(=$ZI!46*#Vn@J&5nE$VqAGH>SQ2y6e3qo~n1ht3Y&0A+iS~eeZ;NEz#*Umx zIXoWoW;R=_?ehR5#mwcp|I$^B>3faaE{2_<1^MHmQS?LY7ZkXDyymTfcl$jMYyR9A6w3id}Tfez6+H@#SC1&e#$EVLKuk`O(c@j@Sijc3X~%!ipd+QtR&0Q%}unCZ785 z>WugBn6;nlc4>}6ik~{#`viKlZ>CRv6~o;&Z%SsEZ<;uVaha@^O)aK%^XW&i))^KS zVg>E;lU%fP>Rx1nE{}xTaLe|&_ewZC>jwJ#`kf~hTt~d6fg8k;hvHh=4$A$FO!xal zK$Dw%WZkBeG;EXhQ@2TcwQuzpH;Fk-8m@!ox5(hL!jy~|7K6?)`NA(Vl^;hv66n8^ zv9XdPNLYZL?2-&NtVj<3GqKyE)zU@T1N&=%lTxs1_aZ?IxZgIVRfSq@VvE!S^YUXV zf!!rM`7R4;l0b%Ve|x2Q`$E?QP0D;+MDl){qAqZ=`2PB=PcvC;?=|G41vBFsnJNy~ z%wx*aShir>KtLeLej_Sm$C)uXu+g%ZaS#6XS0^S1b{d`;cjs?^RlJi}rScXwTK2cU z9=+qSu)h!PFC@A$bGO~xKJmqBj^B1aPMm}X(TM4gb{|~S^!4?;`H@F>*5|@2gG}M?KdJ zpTD+Hg0{0`PE-4v6|8WYj149ti`o*kO7Yd8SLHsYu1(5vbiW1Bxc{iuy=)B&_s9V`wS zt2dP^u+iSk4N!P_fn^TP4L}NJ$I|W6-&>NtGM%pc7l_?k#Fih-oM|o!u>r- zS_;ahr*)jLdD)=;#h*gP)>Q-9+;kzGn8USZPovA_N>f@LBp{fg&zEwO*wc> zQwgIWFR-~Pl{syeqfk?s7e&uIyFb@r#9$6KN$uIX49|D~5vaig2P`)e2BhuUGGJo{ z=5}|xVRoBNhq#)jvjkfMd)fVYQ4F%Zg*&AH2%@Z52(;55&cA$_y48|k64E_VivGl; zdID$&RAI+$od*%HU5H_0z+E63=`)pc9JZYeRW+c?Sa7!soa0Rqa>3&WVT$EV6-$PO z2({=JvT?|2G>r(5nERi633#bqzgh3dLXdA~A2EF8cAxmMt^VWH=1eVTIWqIv*B7`) zQmzc%uUxjgx<4^vjQf}tuJs2AQ~HK7ut?dtBfjR_?Pzj2#qBCyB-AshZKcVBcM) zQtSn)u)aSAq;(lleaHT?@@6?W1-Y9fY~obB%B&3oGqg$ z9yQmig~Neo1YwCG#f3pf0Zh;l!k#YX=WwAc1$$PHCE0W?FNdra5DG6&&d-oDO7OV!DrwO(mDNbyJ-fasz3v?fu54L^%C2!h{Trh{aBE6$}u# ze1w1U?fG@HKb7#LyVlo;!B-l_xNj9);Z2kypoIex)V_eHRH4lCK%*?zaWc3g8_!ns zU*QF|nb_<}Rh5L@9T?)cTgT>Fg@FsBs%ZBIyGNOQ+xv}yg@zqwdr$HUYvpsJWf%gMuI!()*lBZb4g>MvKCiPft~I!XSnl)k;om;*jhm3v+nKA_`K9H#4Yzm7-g zbfcr|_AR`!aa*3brpxfj(_u<>`4(C<{8IEEU{;T~=R%SG9VZ%o0kfm&_G#n9vAywc zUq0vi4Njuxi4onpCjeg=7;@Rk|DRw^!%~cmx?GLRpFVPJ_V?sg{l{=eWe#jKo~7M& zfpi&3n0;j=H$YJb`HTk}yZ%5>mTmpfz0dah)UBvgI@4xd1;>`<3oo4nH~+ZQ*?I^; ziufG`)RdjMy`RlQemTB1ti$^c{NKWABxHigRA;*D~aM7lY z1*_Wx^pCTy8-I2=RVBxBN~%V-3@ugWrbvEuI3^ncTr**pvSCiaCk3O=#};VkKS_-# z9+6a)@EY#55AIAt=~Q9$iRY~zSt> ziZ-M2FGKLh+pE65nDwEqp=zFZAVwNSCI>l^9{8=%R81SZmkw6e@;+M>fnBar$(fgz zQ2CzybJmO!)?f8~TOI_^O&$nILQM{&nj)|92SCC9&47UQ*gA0UvlMB4>tGLA*x5k; z$j%A;$_K+g@mTToX{bAJ1)7Fx=Ez>AoqVg+4(Jz|Ymi6oMhHrWT|zj%ToX={>+SYx z)89;jA3i~ttOC<;l-O_QKEUW$_98|L^^Od8Fgr4vewebW4NXsFLVg>7XY>JiXNHG? zSaqUU%f+=IP=7rLbjBYTzbt8U#;uD|XiKgcm z>uEPD78Vz~_Y4mY&+sp~2LvnjTKcBO-R?EGgycWOF{E7crxqYm0i;W^`0iiv(}GA3 zh)OT3kRbG zcg$$dkyf+JL;sK_DP%)XEB!UbcK6r%XNso)M<*ic2~`TleAhcJ*DCQHh`~vER&D}{ zE6zu(4IlCG745pM9S}15+I2_lNqJjSZNSl-ePl5w0?7}8vLLyAp$83eN~?{1+C{N2 zEGvo`u)pE=P-E|6{E1pzr*?t3w#Jm^_Jm^sNXgf%TtN^ibb2KXc9^NqDv|tt3U6gt zSLvm0(!b4CyHNP08wi91q2C_;SW zNYYV7PzZoI4EqX^(vrVo9)Ux>m4|!L?o7LWdu|OuwFAaSeYb&o=;keNaQ7+nQhqY` zw}+L3Pu(wRm1-(-GJww6(gytirL3|-p1i2rSGUsb^WfHB?QFzl{y8D-NEYm-Q0XpmSfHNE8ag}A=L{!G2 zhpSfacRZ69knvQoL}c;#f} z8Hp%bel@7FDWTNykQAqfkf|*n4K9sbCP@Lin2LPWehi9uU!?_gb;C1L7Z>zpeV#+&let`Q6QvWSjr-ST`X+IMCGcnNZ`CAW4iGgd#4Fwh z`#R-UmopoB{onDaW{|q-m?oX)u{oI{u#`C+#tS26{J+XB3gf%u*=aBF&KS4lGRamD zV!Qjo4fm8~^bm#P^t6eJBdKxpt|l}|HwV`PuQmb;%4R_%GQK2C#j}@%v2k^T08Tnp zAVqbeJ4_QjzShe)2OPnscOX6M!)sp19> zPQ3qYCt+UtF1I3SdFPjA^LLe)leiZ1=4<^&MlyL&hlCM{!?nX-eM#dFSVq|?>03K| z?~E*6R%oC7d>ryoPYTza5RvlokG28q1PiV~(}e7S2-iZ{f>2yq14e!eM4Xl?Iv>g9 zCn0sL-KX$mb34H236sG{%0b@kKfq}qTvy%$MKwUvckKuF>K+=fD9rF)958fL3!>>U zrX7c&Ln>ytKnCE=uJ%LTIWBN=BE(sE6kZd{+hWjlk{B>WyKqS`l!s9=^#Rx-%DZ z@N4$~S{~N^@@1+puE+*-C*znk0w0Vsa?Y-AviTaRxIL@MY>4twf3RUM7=m`^-0KG$ zh1Shvyzl%`Iii{$L(Pltp-xF@q@D?1vHfP?4ExM{^aQNNJSxZUTi0fq_-31+_E;Cv zg?Nvb;4GKFsk_$p5~2(nHz>muE|kZDW>lZ1C}!Zb!%os7p#~%?HFX$XL}E|QyUa9; zNq}2XIauV2e95;a@LWSWDpWde7B=DAp+XNv4>?go*=r4(I@_D7u=OlFsMW`)*qa1m z*Ih5dT#?5a%OMAlgmLBwcvMsea_5_7j|Te3!A65v$hkZzz|iDw?^jUt2h#9=Az+lt zKuw*iS}!Chb&}?Cu_Llb;^V-QEVGtJpKZx4!{jm1;G<^GQ(xGUAsWxoNZfc>%N_l zK~U5&O1`}oZmfHD(&-}p)%wFqLh7wL)Dz?snornu#)3&9M50P+{$TC4t9tBMWFG^2AjiLxm1;|@~58vLt*w}z`rX}mWh14Klc^M8l@&bpl-q#rn z9;OQ?sBE>h-znxD=V!cgL}p?5p0yli4O7 z9)1p_sr|q8yUIxuKF}k-1KR<6XvD}cSmP7GL`cvU4)}vS5UW%M=Yd>|4maLZ)o*by ze0d?MVKqKg%igV%vYceIlpG(1^)f$LFP45~R=1g(Am{2f^+j*7Q<17>TQTEzSPaXPT+NYdQVsUI~6}=RNB3G^qmZ8LWA%q~9u+ zZY2d-)|gEDu9E`n+y*>;*1odUOhrV?5R7RTKvg1Yue;5M?EA@)eG;$jh+V?{lA`IZ z!=WD2yK(44>bAU`{v^g0!o zPme}uRD);2?XV3xeR=mUq>^ilktIV259%w}2i?ZriIJ7JA*MfO9e=0!k;1ayoNh3L z>_N#_^-+O2Gi<`J(M{GMG?Zacpo3s)3{jdl(^MV)h5iE3lL&#c)eoO9l(Z3;qkp z{b^9QLP+j%kq{q$^6GjrmgITV=-KNgVL$>{*|YY^vbLDgr{yCTK+VA@hlj}NbsN|! z3*6XrNE>0x*qHkB+eqzj2o|r9+bPo^4r&k;8pWtr$GzFK?nq0_!4t2;0O}xC zIo3Yd?RdKaB6I4W7TofXiyTThMf#wQ%kn-il#INRxXE9^;wkKs)N=Y_bKXe9O2B(; z7gh`gdC$>KqRYh3WL13k`uubexKPm|FlX<65o_8Hg69bsk{5NTiuREEdk<}n#8G)^ zGo==auGkSuKfKmNttKWL9qeOH%X8}f!Zhgs_^|zhE}n4~eiO=avL0CA`E${Czcp9L zfTT8~=iP0}HheIR1<_W*sB;3S48&4k;~2jwX{BBW3LC!A{!jT3fz|$b(1l)yRyMreepuc-b-TF zS6_?lU+7}5w8b<7EoDZ(#o3e66izb_l7gDLa+03B?dn;X`dNjjrhsyGT84e4qVJDf zN99!tcKS5O-l}#pSEC9i$p4(Z#~w#N7(?qW4~^vlzN+K$;W=%(s|vf2e-{UlY%2TH zUw(kp1&~nq?CxZy&t{$PqE*;YuP*K!^Tr+l#k+KAQfgpSSw+*)a|=0sp;=yFrj82%1IYsU ze#n>Rl$(4JgYqHdAEH^&W#9ek`DowZ7;V2Vkg&O|2AZw7|s0oNb{=tw9 z(O|au>ruFzDx?v{`2JC0KC$J<@6XW@xkjMn3snG$S_Y>pUKV&%kf39BhBJH)1Ox7E zan7@U@iV%g+fa!u?lgrkA1UBpAsArFDNab*>R3Zf;ZmQHnK`~(2F)2K{|2|<1$fE_`XqkZ^;eEX38tNAFYxiY*dA$wM%5UyS!`G{zJL75+WQA zc)E}@z^J;jZM@8{wbwB3T5IYdLEWR8=@J0)kbNHol-4jPE|OjhvET|hI+jhobKDS5 zPL3_MJ$Qddgu?y2^V>SO-?huBLy#2y79uPrc1g==Nr~peFfSd>@76P*QA_q?}?CtSHV{hnBn~>KcFHqPLf=bS2RitG z=O&?hhlZR0!-S~GSP&FprB}gedEIh5>w0w|bCyqJFmagioG_}pTqfi5Z5Mde_S)0) zTZ)$-L)COQBkyyoaZ6>g(UK8-T!<-CUVW!yW${)W(p(*$hc4Rq((5BGybnDSYST90 zY|DT*?Rs1|fyW#rhRs~{Sp8l)k3rDm$I_KCJ#r7?O`PnG^GMCe!FcesrI^#>wt=RbL|$Tauh zPZt_JKl1iCy_;~bo8iJ$OfkHm8mQFF_2A}AiiyRhZ?%;IpE+JaJk)4fU|IS=^(#JJ z98(OW8KSp(Ninet7_6<_h7Yr+x5^4m_zt$>PUH|yn+3&3xVc0=xl5RlyJFjP=Qjy3 zh(fIZgIE0Eb_#7gtc9xnvymNUaEd#iNnCqQ{`(sKo7A5<^EKXc|D)D2C`I)Kj2@aA`m^gzDclv7H z1#4B0B`Rqn76%9=z-w($Y}jo$!5}GeviQZPeEONqCS%<##_rgZ)hdV4VeWVj0%|C{@21-CT&NC&eAY! zZ%JJ`9s`}DTFlio9L4KxxI?93SFCy)d#SzHlkH1o;Cw&&khnmM`zhu}ub+xy9ft7%LDSEf5 zVE$3hpPf!mT>g1B1-eaNjj@kmjQ;x+*ikyc=|%zE9`+Ui(~-yn5&X?iX)-FTUc9s$ za`-}x___M6!<-a3*mkIF0J{?3;h;^Zo-a8 zkvNP?EUf*Qx&ry^&>3T6yEyRn6@=$F(L@^H32%D!d7m zpmWPaXPD19RVO9$%165ZV0$NYFTm~D(Y6xZEh&(`GN$uK_V2mT=36^W)pq}+slbx( zXGtqc03E^{_i6H{{c4=fIbJhbwf0rT0)(votv9W zQkWm#y4}0NO3OShh+EAZLHK%V%ANPjlskxNu3hu+9=htoL{yOS0RKoWeBa6vB&ZUc zCV%|+k^evEYlxY&b(NA0bZv+P(Q7M$F^%i$m?2oT#Cz$f&yX2}JJD;Jt%_L1DG)ta z0Q<$wb#^Wt)djYGYEX{V*gJm>VPruBBTxYs!nrLX0?0k47cC%Q%9kfd;LAYySH$xhep;y8u{@uS8$wlSVR)V$O`Q&a(#)7UOASpwx;7?_m#z!dt zO5H$rY-yI>6iKf@hw?o=h>dTQr~xL6Sj{UJE-|cO*=YY=t&3 zXDPTlS-j$iw0Wi|J(hdFp;v-5eDR>ZFLcKRB6w5CN!N7(=BFN#7&^FeMeV}x&(U?L z|66oU|L*M1g5m#m1=+u6_J6|6mUjYwDI)gXyl5>^rl-1ZMfBLV*$zaT$Y6@1{Tu|ND+umOKoDo#3LG?N8 z@X5Qm8X1BVh`&*E9brLL64H$z9&G-0{22 zLm?!z6;q^uFAVy+Z2S+TE>>$&m-npY$I*IYczW$K)FDKPS-c4mlB>D0;Y4+prGP{3 zwkev2IA)F%uoiecGdv1iS?x}X_Tx@$L-tKj`2Pn}`+H$Oq2 zie?*fy6bKaq8lN2>pQkn$F@O8A(uK_J9`l1(dMT&`EjDM@#*m528LGXQj`mlrVnB- zlM+DMo`+rFG9;e?*H&P5=ZS2=UEU5yEs4@uGxk{=?k;GsY$9zRSRJnjk_&$kiYi4% z|3%U(1#IbTySh#x!-MRg8Ut7K%YPv;bp$&XzD3ChjlFDSLxfT~7w9gSDCF+ST#G`& z`^}q!M$EbZT(YIW&)dWz03A>>Y+G~w=gnj{HBrpC8xxmK{`|e4$qu;b@$lz`Vz3gX zY#!7+Cntyi7e9LRNWo*Ye)+_+`FnTT^3iCOR-?iq?50=tiE19JM_tS(lF^RyoGM`3 zfez)9NcKWd^;HyldgJa2UaQkSqI4?`|D-i_ ze8G0mXtQU$n0HTCWWtqdV3IAhgT0`~T6HMVBLcixZRM)QSVLuq%{)oqb<)86#4X8S zo6D)5z1}0*nazY?e4d$1{CrB!>P#~w6ff#uTsYqFs(&yD)U^BGxIs(-UB7XInao^= z%8XL74rg$1=&7MtO2z#*<~5+)eg72o%oiQv4E5Wxc@%L%sk8OFyR(|@xCT4!;p5a^ zzr>T?496$ThLaj)-+gxOEn;+s3fL>ZDi{-%Kemrtp=9TMt@-h-Mx|p_F@5%RJQvDz ziJTU!*geu5-%*boStTOt%f~)C61$Lf3UAm^p@lM+cq30j(u@_6%e~LJb#X~C8TiabK&Qui>^k@Pt1+Npb0U3q{*7NapLU=2)MS@S zk@HvYrlm>0ZvhnXs?q!md*vv-rN{9lz?-1qwd(|42A6uX;%0i4soV0BUt*2}GqSdQ z>>1@Yaa2-!fv#WB=_eWC<4# z?(Xb7N-54XG3&kE;fI_81F9Pe&X>KcNbb(&ZXuOzTGEn0(Kb)yC)I9^yl>+joS%zH za-ruZKAP_3s;@BW9Yi|FC$Em%NiBV7K(6}A7|#^%SMZoj^rg=GULW?IMJ_o2!^%wV zpMtKG6#L_G_pXr&Zqry0TgGc6OI(4$D5P`m>VKUP}TN)H~v`smA1G9#jWK4TI5^ zqBOobIM?g1;6P>Shh%zT@8+xlMG_IOMSKJ!&mKedn1CBEuF}uZ((e+%X}n8zq{mFz zQjsPXRha^)$_36Z9YZCH`0FmU*BKyh;~sk_{rDgo8n$*xfwXK!8#wRIfRtphEVIRM zAjY1`$uze_0Y3BVmfsvMXCuTF=a4**(ttwdm9G6E@{1CRK7Jp*kznM{$lfhpl0X-7 zF;)-)z50oi7hXMGJBWo7=e&x zkOICo&b@x7=slKvIF_6@ zMkl^XUS#;fZa}>6=+AcyA}@z8|9a``{!b2_Fgrv$VkAD;)Jbmp>haI(vm4hl>r9Ql z{`A_;!!T#f*H<3IonC+RA=4<;I(+qooF}QjIu!g?`rXZxaqF|zg|^`fHto7C@t{8x zoD9s*AITh)=Vzy#TH9(n>f)C90pWDIy23v%-8}10Sm|dTCEqV-e5?$#X*pS5?G5k$ zdFkzC9=>1xcBG0;fG*r{*u9|fJ9qcpS5_U_U1a;y&r8GZv|?7O{mvssN2^OVvjF~M&Bc`e2Q`g!TLKP=}`Uq%$!&l8c@rx{fr z&8rx!4zKJLTll{fXPD-hu?+fdlz6NsUNP>$a28kCg@^RCnG#6|L^I{ku_qu~^ugV% z1I{^0%yz}JH_L>oM?K(NA9GGHm$NvGZ3%%7^|VbdMxh|};QAQP-(w6R&8P~y=Vi{2 zse07itjoE*m^ySx^y}oc0%J(E7W(zgu-KU$@!M+tvz10P{|^eVgBPIIyw2#O4fX@G zt{$%!RKDUuBaL=rh4+;sRbM~67CCdPIb8AaO46+_TROqV3hNsyF8m3GrHXPbW;7}E z^=DK+Cic=5RL4-gSo;F(b$i$kvjxwbGfS_ABZOp3-?R@VeEcWsJuoq8s{~Ajd*^$O_{Z&)d61Yotvb<-*q@99Xtm#{GxRG34fxEs~IQ&${n> zB@1VETPGNBkvH37bKf#6w`yHQ^6k*#0TGXHlzu_R-Kbk)8I#dgPcg&?^$ST`{?vMi z^da#wV+8i9bLUAG&YZ18u+2(|Po|z{2v=X#I+{b)ob&aRN3iW>iR&5N%gyihwo-lz zhSmr->l{z|E%AB_rCuuae6{fW%+qx7dP}7q7+WQLJoA($UT>x3fT#C`b94vW#N)oL zr(A?DDVfWE)1CkyO>#{_#?ux$Eob^#>{I%t;FnC2^YmhL^7CYiSH4b-9!Ql*EDOs8m!NBitR`M)yy47bd+U-Pc=5&-j;4lBWdG zjQ2c>wA&H;*14I*I?MW3`jyd)-OIJt<(V(eH9@Ka=WKGqe&=dO);XA)VR^Ym3qoYPX?eWZj`%#(-|-9l1mJil*@lJO9J$_@#Jo|IiZ zQdK?ryE%WGgF1SYl`;fLNc18(_bS&;R#m*unZ)z^#E>rUUTKagOb9mko9hU zT^DF8T22;y+2V(1Nb6rRHl*ZO)#K1LCAKq2DHhX(NHVS=WXZORj;RXaX;ub8Z4h( z5Wi1C-q=;TL`}7>Zr=)qHrm5pra8dffq{#-t)ggxlO@Dfiiro}(rBxU%ht z-9<{wyVm}DitZgX!qdl@6O)L28-+gAHYW6^ocUByTh^cPlD~sKd{McRMBp8S!khio zuXSDU%lKsqvW{P@FRdm12}H~A!Tfrp>N}9cz}#fDA2sN5yPbqANQUSV!5zd6n(@{* z$tUT6cDhgna$U9iI=h1luMYWP4z4av~>2%nC>OLpmY#xFi*ScDLI%+;Xu0f zb?W@+(3gS+`ULMNR5m5zg+oitFn&m_{R7RH&4Ld5sh8nUnL-4HEM1K8Q`FiwYQFRm zypEM}LZQPB@=9}Pj%Qtmn{eAnwO*T6Whuo>h2D}DKH(7*I%Smp*B~QIlZD~SUnEfw z=+P;ui4(NP1)Dn>zg#1sxxL(T=(|0Nk($^+dz`Sj!|{3A?>f0x>RI;C*H)+q7p78g z$8$Gpmei}Pd?yMthfH|%F%j+vR2HtkwQ<5*V`Zkd7!gTGLdaCM$$RpNl>>ajFckXC zC|x?pn5U7u!O=j6xPD<1NlM?fe<)MhbSnwjW|%E)m5JR%8=C4V%k}!kGxlc33*RqN z2ERx4TDXkG4kQNe`9kaMn(B(71%_AYI3cu4$-i3+-9a*u@_^XM#d5IrE||y&%g{MYJQ+t_=2aI==@4es2<5@x=slS2&3x7gk<phkQTuh_c9lQ_Q?r3+`Ugm3|eouo@&v5$`jvLMK1A81W*kB2SHaLQO_@vnNNi23{-gJ|#tNP2_K}N~ZaEHuRQEz_yd^r1_d7HgyFw8>I^^ zkgLZ+gruXW=*uwMC-{^*)lF;uZg!_V>wZB_PiFfNILJqoU)DlqPI6MWx7RGAZsG>C z7&(Yur}4@Mvst?kM`ZJ2XdX_|HAsKRGMP!VF6@JJ*Sao2RmTU=#dLl#3pw~t#$y1UT)o=N|T1VpThSK)9x>| zb}A8LgdVK?A_qZ#LZE zq)N%TZV~vPhsKBz@bv)94ndn9qoD96d5>qEzLgSo6LMCyob2?$+&m1B9*7L@@If0* z(BXvuTQ$lnIA%wc*Ot-XnDFLyMvnM-ZK_YWQv zq{%Il%Rj%Qj&CKsMkapH(kdOz6mO?&HlU2ay!WB{4}WrEQ3 z+glgv9^VWlwit;-X|$#7t;=SfhUIxtlMtW3CvrQS*I`}cflE8>Ud-fz)#6-q=$4zL z;4WQ`u1+;~H3u%~AYg}`Rv&Ux3>9Xk18J_%t!H3uce8> z*1j6>?l~;3cC!?5U)spGJ+YC2$iY4ZMo@x>sNZOm{U)*a5D3}qz9`g1fy5D>FKRuk ziQH>oL4+0NTEYX~620pwNtA{kUF;$T)hfMajUd7Tvp1m}iP5`W2)@&IwTpPG`Oa4m zVTR$zeOZMD8?FJ7%^?M||I&oVem2JzYaoqMUYkd)z=8dwt!0Ka8jtq5k2UM%vzr~UF;f5OL^stWaqD*Nq$08f{yJxhZ4!Gz%Cm&&DVabj3*7AV zHO729ocGx1mN8<}$Ucx5PCKR;loMb_Af1)u;NP{9D;MM>Q_(P?%(%xB|Fp}wL74i$ zYXh=KZmC|6V5iL`(uc(dJnK|}=v)*xa&4E}NtUAl4r5L(M>f6&>Ygjl2)m$>Y)7TZ z*Vu)|R>%XJTJfXkl9+5=w_FqrMehCD9+~hoo5voBiY}0)d}E8ugQU(lr|&? zeW8S4GYu9yAnU6zN4@@K;Fl){62g^U3bE(E?Q0SO!UzZpLGGsta6I#Ch%Z6ttiwR( z1ofOy{o0k*i7Ty(F3<`JaFpBAlPOF#Z#IUPg-(0beN-a;iM+_G;h&vp#l?wa5cMRp z=>fOuNqpZrxWw67?B$*}9T_`00`7p&%bZ_e2AB zB&LtPR}mMZ8cs21dmWJlU%0XB%M1O7g@b^3yn{@As!^_RUeych{tq+UKsv+~iV-m&?JEE>QwLH}0`h+WO}UbDv2FY(|IzA6 z+ujnrl|oV@5ThDo-8^RF)UxQSQ{D+gW|Um!5i+&0I>i0ms0@wZ>a+pBgCrE$7-#QV z4gN=y>wxF*rD3K7+>-|Pgt28N$ZPzPCuANK@NsHHwdoo2C7&LrfAhZZ8lZADLko$# zQIU@mb`OPD8RT3qR%5F@y>3H%`U(BAX(kb+eAQ2sWn)>5*Pp+7J+G%NbeqgJ37N*& zJ~F!hu5JLB**iGWOd;GI_JoW(qkHR657}K59rYyYe@Q?dkOP%dGzUC;4R%i?&uivn zBC)SAl44NDHgXuND)g+IBvFu`Lz|82gfe5@>E@P^JL)L|{?HX+)w{a+^r}c?V9PZG ze(+|Ha!9C0oRg?8Z3XPRhHVNGI6KM%r`JJ@dM#lh1Ot9u6Z>aQ6mMBGEnKNyKJKoX;|1pvhXN%skme@;CT z6_|k{8R09k#J-5Fc$}ANAsv?Nb@#iUHsBSnPjlidPJLR@ztWjwVv zHc|HIOf%(aDcomQujBil?UFf|AX9DQuDBjq-}9yi*f0wP39b9X!sknj;8aq=4!i_;yaKdeZiY*CLpr*|FWwq!0R=cSspihkMpgtvH7M0}vW?9eArdhgrn zP%7_5S4#}%vWjnvV@4&^6RVs7qnKv@p7i02icJdozhaY$nWF@y1kJ!Lo55!Nba0b} z6y+a^G=#TJX_c%~} z|Fr~tMg5Ja{s)od*F4foDVEwxPD5&snJP8>;BKy zWcy=tl^JJx+HSFW2_N<8VM|lq>7q)>lq8~--PO6hC~?X^?_Y&=vGLU)WJx+i>XJ(_x2qZFD6h3Evlj5R&9 z0x%f{bs&u|88$nmU+Z%2?s->pX7kuNd3cd|nO6 zF%sP6r`_fMa<46^P8xJ?*bPTcQ!5)o&K=NZEIF6Oz@H@yN?9oNTFI@FjS}}&jfe?W zA2>2&XUNk9R3M1@udLvUaHOAmt+O@P3?`VvgN^JwtOXeeE*I$(mc#;M`sqnN(7|DQ4mF5 z1>^gMUFph+NE7NBOJ(yz%+o`-79T(z@dyneZ9&2|+BKFa-rW1T&9@I7Cj&CSF z6o?aIg8zt;7u#E447259O8|R<* zCzUlr5qUja2+d3lIurM}XGXqjZ5AgxVb_~Ob$p>c_AlK%8@y!Zz;~ZPn*fTCwrmE8hWS@lkyd)Y}=7{EpX{1@6z z#{D!Cto&r#@qMTz{Q{7Mpjud8steR0C5zLSvqx)?FW&KS&zLedw9uyJ9iKIc&v5NkZ9@nf-(#rJ|qdlkf%lM+SN0B`HnR_fP zBRXK+P-}LT+)>y!vA;=-3U|e_ffQd?3C(9#%wPwu#im-s$th2mPnXi`AZS4u+6yrL zFfh4XPtHbHe+O2N=E+{_(uHsVVKIgjI5ly#f&D=779Ar1V`6#T_jH0=%<;Kces((O zj^(RsDhj7)xZ0H+1@^BMy6RpWe@qru5);R=UT+2PL5V4hD=2Cl?q&lx`I;ewEBv&{ z7fH6bWXwo9NxKi|v3>jPcd%l@L_ow!S@v(*(s=TF0mH}eLmD;kJT2C%K~^x*+gV(W z%7((bSE{Y1ubCq-Podg-Htanlz$>>DAo8ZrW&j%(OI-1~I{h!txdd!5zCQ%tKd*E0 zo_d+|Oj&k{ZnMotg#Z|MH8{eN0q*aMiYD>{N%7!F4TpOrTXlN6bq|TCpZVD_+&fl& zb%3v856TKWt`Y9mr4;E6ViYV4JLOcLCJ^hvNirm^dNU{CChjR4d>Tl6E+p-Jsm(*w zO#%OhoZOc}Qa411i(sCn=Af#OPgX4QDA@%{5#08c(tW#;iO)48E-<02XW^hKbn(dU zY%@MCdR7T|40HGODs>e`g$1GnfP2~zXlQHykT9#2p(&0d1JwSXk`Ybx1_hksaB1i4 znoMc0IP54rrCK1uBUTzlNwp?Jz(|v$h{lq+Qj1wZNgEWd5i7`98UW3LE4soWDu-DZ zaV8G}8uq^s!Tjf~fR64XX_|UKR*07m%uiGs-OPl-)#Q>2){scJe=-FUYTB7lXq#L}uCHft z|7~a)ar`n8*a^yEO6IpJsiP3HDV1YC^$0P4<3o4Y32II$W?psQ^I|Wlq>YNA$5*x! zkp20Q`dbC$BoJxTaU}UN$IwxJOx-|Hhmz(hRGr*`Hd|;KC{!1ThWJB6D4GOWS2PJ1 zAK{*91?TPXj}WXrIMY7Wv>gS9_U4#RvX;|p4t86DTgI&>IYbJ+0gKOq7LxnI)hOq$hWh7@0usWj z3&%bZGSzV%AEW@FJ$@Y5&B_YokR^He{wHuGD6*KN6RU))LA2LSJdQh}A090YTtC4v zac=-GHNJ~v?6juGC_P`swVsjCO_YP&nS>N)N^ndI_y}4fA;XalpsoU5r=wSLMHN_7 zya68NAVJDbnW`OM1&=+WNqsug5O8*tv_M14%zeDSMJ|AC>-dzlXsRB&lVFv?2g`9| z(`PO?Qs#*d;`faY8al{@G@6fl!}0>0kOs#6O%Xty3o%;Z)Xd@t5+)^vF7mX-CVZa) z9uw2<+XBX}p$Z-wkK6GV_TzukYnxNqwP66s`v*$+1RAYzmuw%>JNCSu6-zFi77_v!N)wNU zeeUvvJLEKKw|hg&L(GPm3m-U6P~_^R*??}M;`FJZ@9rqpu+o}7!6|T@{$a+)qG!YO z8Yk`_6ZQMvLM3aO4s9SD(VH z&)`bWhW#aztDx8&EMa9nW%RFIGAAkn9wQzU*vuRM3`*4r_tqgO6NZbc<87L}%;c7gM}82t};IX)-QfSyj1{7_!Vd;Il+{$rGKncRWixeTV#OqPP3| z^R#ZS2F^hNM`3mTYATgmt`rfzQz$EUAoA>CLDmk2qMChemPL753i2A+pDRjtIhVDk zE%K~eH})Jp5eqJXwJg9v-d@c07Dge7I7r>0hT8hA0`etT1gPL$?ymwA(#xiDQSm*- zoLRB0<0Z4xC@%I6ITf)#B*;&gkw}Mnq6!2)#khflsWk=KcfrcW-dc$ML>XOfN~I{3yv% zztY~7Gfai5w)P|1uD7-mB!e+t4ejm?*A5EWrL5c2Q=_Ku0S(XeQ@J>@9msc{(hL&` zhEUF9G2oXwK~i{!Tt@k3av;95*aW2AalDnPBQY~>tXNp!4|$8-K6;9_(V+c&$+;X7 zzV8k#&ci*^@)&N6zF$!*8I)Io;#jS4fvU5Qw^fyy6)gnWnCxklX%uGE)m|@GMq1G?%Q9U`)rftwyL3{-;s(Kb^iRZ)69^K2e1v#CYpw*WNw zJ&r)^F(F{gQqBU9fYfRtiuVc>|qyy ztHnA+FE-_t($d?bRTCsqXANvI%{(RAA zEhmh2$o>kpAsu-pj{OR@aTV>IxZGg$^(*0IsoP)%cnvZud(>syqS`aV2X;qvmYQvt zd_HtLn&2~0Rm6>gOQr@HUq2f6?Y%jd`lY01`9xIqlwyl}n`ETW#it;4p?Oi=P6Of% zRp;jl(c-v tlpIb(ejZayFU`!Gtu)%dzw=NM^yl75mvbVM!B3i?%^u$FMH_>D_%Fb!F@695 literal 0 HcmV?d00001 diff --git a/test/fixtures/point/rectRounded.js b/test/fixtures/point/rectRounded.js new file mode 100644 index 000000000..abfe53223 --- /dev/null +++ b/test/fixtures/point/rectRounded.js @@ -0,0 +1,57 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + rectRoundedSmall: { + type: 'point', + xValue: -5, + yValue: -5, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 3, + pointStyle: 'rectRounded', + radius: 10 + }, + rectRounded: { + type: 'point', + xValue: 0, + yValue: 0, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 5, + pointStyle: 'rectRounded', + radius: 25 + }, + rectRoundedBig: { + type: 'point', + xValue: 5, + yValue: 5, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 15, + pointStyle: 'rectRounded', + radius: 50 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/rectRounded.png b/test/fixtures/point/rectRounded.png new file mode 100644 index 0000000000000000000000000000000000000000..ddc227f771b58637a74126448e8c7c4245654c5f GIT binary patch literal 21698 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/point/rectShadow.js b/test/fixtures/point/rectShadow.js new file mode 100644 index 000000000..0fe1c0f70 --- /dev/null +++ b/test/fixtures/point/rectShadow.js @@ -0,0 +1,69 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + rectSmall: { + type: 'point', + xValue: -5, + yValue: -5, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 3, + pointStyle: 'rect', + radius: 10, + backgroundShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + }, + rect: { + type: 'point', + xValue: 0, + yValue: 0, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 5, + pointStyle: 'rect', + radius: 25, + backgroundShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + }, + rectBig: { + type: 'point', + xValue: 5, + yValue: 5, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 15, + pointStyle: 'rect', + radius: 50, + backgroundShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 15, + shadowOffsetY: 15 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/rectShadow.png b/test/fixtures/point/rectShadow.png new file mode 100644 index 0000000000000000000000000000000000000000..7631b1d50943299b8c45d8a3d0414d636f3a1ca8 GIT binary patch literal 11840 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 literal 13190 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 S!0&57*REJ!F1zUd@P7b}WvI^p diff --git a/test/fixtures/point/shadow.js b/test/fixtures/point/shadow.js new file mode 100644 index 000000000..7891c4ae7 --- /dev/null +++ b/test/fixtures/point/shadow.js @@ -0,0 +1,39 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: false, + min: -10, + max: 10 + }, + y: { + display: false, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + point: { + type: 'point', + xValue: 1, + yValue: 1, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 5, + radius: 50, + backgroundShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/shadow.png b/test/fixtures/point/shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..63ca14dce875013d0236e8fab0ed4e8ed5c50e82 GIT binary patch literal 9256 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 E1(8~nSO5S3 literal 0 HcmV?d00001 diff --git a/test/fixtures/point/shadowColors.js b/test/fixtures/point/shadowColors.js new file mode 100644 index 000000000..ecfeb1d1a --- /dev/null +++ b/test/fixtures/point/shadowColors.js @@ -0,0 +1,40 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: false, + min: -10, + max: 10 + }, + y: { + display: false, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + point: { + type: 'point', + xValue: 1, + yValue: 1, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 5, + radius: 50, + backgroundShadowColor: 'black', + borderShadowColor: 'orange', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/shadowColors.png b/test/fixtures/point/shadowColors.png new file mode 100644 index 0000000000000000000000000000000000000000..2aac474bb667545117c65f8e62524d4f543a4b4b GIT binary patch literal 21863 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/point/star.js b/test/fixtures/point/star.js new file mode 100644 index 000000000..fc3d92d60 --- /dev/null +++ b/test/fixtures/point/star.js @@ -0,0 +1,57 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + starSmall: { + type: 'point', + xValue: -5, + yValue: -5, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 3, + pointStyle: 'star', + radius: 10 + }, + star: { + type: 'point', + xValue: 0, + yValue: 0, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 5, + pointStyle: 'star', + radius: 25 + }, + starBig: { + type: 'point', + xValue: 5, + yValue: 5, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 15, + pointStyle: 'star', + radius: 50 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/star.png b/test/fixtures/point/star.png new file mode 100644 index 0000000000000000000000000000000000000000..15a5e2ff2811614db2025269a32b1564ad0ea12b GIT binary patch literal 21070 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/point/starShadow.js b/test/fixtures/point/starShadow.js new file mode 100644 index 000000000..5efcf0623 --- /dev/null +++ b/test/fixtures/point/starShadow.js @@ -0,0 +1,69 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + starSmall: { + type: 'point', + xValue: -5, + yValue: -5, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 3, + pointStyle: 'star', + radius: 10, + borderShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + }, + star: { + type: 'point', + xValue: 0, + yValue: 0, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 5, + pointStyle: 'star', + radius: 25, + borderShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + }, + starBig: { + type: 'point', + xValue: 5, + yValue: 5, + backgroundColor: 'rgba(255, 99, 132, 0.25)', + borderColor: 'rgb(255, 99, 132)', + borderWidth: 15, + pointStyle: 'star', + radius: 50, + borderShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 15, + shadowOffsetY: 15 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/starShadow.png b/test/fixtures/point/starShadow.png new file mode 100644 index 0000000000000000000000000000000000000000..0a464ccace5cd9261b7eb9a524342522c458ff91 GIT binary patch literal 18390 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/point/triangle.js b/test/fixtures/point/triangle.js new file mode 100644 index 000000000..026aac041 --- /dev/null +++ b/test/fixtures/point/triangle.js @@ -0,0 +1,57 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + triangleSmall: { + type: 'point', + xValue: -5, + yValue: -5, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 3, + pointStyle: 'triangle', + radius: 10 + }, + triangle: { + type: 'point', + xValue: 0, + yValue: 0, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 5, + pointStyle: 'triangle', + radius: 25 + }, + triangleBig: { + type: 'point', + xValue: 5, + yValue: 5, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 15, + pointStyle: 'triangle', + radius: 50 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/triangle.png b/test/fixtures/point/triangle.png new file mode 100644 index 0000000000000000000000000000000000000000..20ca4829d6b0c5c43a296b8c8a2b115d1a41c5b4 GIT binary patch literal 22941 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 Gum2AoB4H{3 literal 0 HcmV?d00001 diff --git a/test/fixtures/point/triangleShadow.js b/test/fixtures/point/triangleShadow.js new file mode 100644 index 000000000..bfb66c6c7 --- /dev/null +++ b/test/fixtures/point/triangleShadow.js @@ -0,0 +1,69 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + triangleSmall: { + type: 'point', + xValue: -5, + yValue: -5, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 3, + pointStyle: 'triangle', + radius: 10, + backgroundShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + }, + triangle: { + type: 'point', + xValue: 0, + yValue: 0, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 5, + pointStyle: 'triangle', + radius: 25, + backgroundShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + }, + triangleBig: { + type: 'point', + xValue: 5, + yValue: 5, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 15, + pointStyle: 'triangle', + radius: 50, + backgroundShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 15, + shadowOffsetY: 15 + } + } + } + } + } + } +}; diff --git a/test/fixtures/point/triangleShadow.png b/test/fixtures/point/triangleShadow.png new file mode 100644 index 0000000000000000000000000000000000000000..f31e0d16dc583c9668825e90c1bc74fd294444b9 GIT binary patch literal 15799 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 Nl;y!)**i}D`ES|3jb{J= literal 0 HcmV?d00001 diff --git a/test/fixtures/polygon/adjust.js b/test/fixtures/polygon/adjust.js new file mode 100644 index 000000000..ffc20ce2b --- /dev/null +++ b/test/fixtures/polygon/adjust.js @@ -0,0 +1,139 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + polygon1: { + type: 'polygon', + xValue: 4.5, + yValue: 4.5, + xAdjust: 30, + yAdjust: 40, + sides: 6, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + radius: 80 + }, + center1: { + type: 'label', + xValue: 4.5, + yValue: 4.5, + content: 'x: +30, y: +40', + position: 'start' + }, + point1: { + type: 'point', + xValue: 4.5, + yValue: 4.5, + backgroundColor: 'black', + radius: 3 + }, + polygon2: { + type: 'polygon', + xValue: -4.5, + yValue: 4.5, + xAdjust: 30, + yAdjust: -40, + sides: 6, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + radius: 80 + }, + center2: { + type: 'label', + xValue: -4.5, + yValue: 4.5, + content: 'x: +30, y: -40', + position: { + x: 'start', + y: 'end' + } + }, + point2: { + type: 'point', + xValue: -4.5, + yValue: 4.5, + backgroundColor: 'black', + radius: 3 + }, + polygon3: { + type: 'polygon', + xValue: -4.5, + yValue: -4.5, + xAdjust: -30, + yAdjust: -40, + sides: 6, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + radius: 80 + }, + center3: { + type: 'label', + xValue: -4.5, + yValue: -4.5, + content: 'x: -30, y: -40', + position: 'end', + }, + point3: { + type: 'point', + xValue: -4.5, + yValue: -4.5, + backgroundColor: 'black', + radius: 3 + }, + polygon4: { + type: 'polygon', + xValue: 4.5, + yValue: -4.5, + xAdjust: -30, + yAdjust: 40, + sides: 6, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + radius: 80 + }, + center4: { + type: 'label', + xValue: 4.5, + yValue: -4.5, + content: 'x: -30, y: +40', + position: { + x: 'end', + y: 'start' + } + }, + point4: { + type: 'point', + xValue: 4.5, + yValue: -4.5, + backgroundColor: 'black', + radius: 3 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/polygon/adjust.png b/test/fixtures/polygon/adjust.png new file mode 100644 index 0000000000000000000000000000000000000000..05009fe80b6a90df05e5f93e415811cfffb336d6 GIT binary patch literal 44249 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

5Wa`?k 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/polygon/boundToPoint0.js b/test/fixtures/polygon/boundToPoint0.js new file mode 100644 index 000000000..6d224ce95 --- /dev/null +++ b/test/fixtures/polygon/boundToPoint0.js @@ -0,0 +1,39 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -4, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + polygon: { + type: 'polygon', + xValue: 0, + yValue: 0, + sides: 5, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 15, + radius: 50 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/polygon/boundToPoint0.png b/test/fixtures/polygon/boundToPoint0.png new file mode 100644 index 0000000000000000000000000000000000000000..b1b71882585c49f03674dd7c077b3b1076d20e7e GIT binary patch literal 24388 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/polygon/boxLocation.js b/test/fixtures/polygon/boxLocation.js new file mode 100644 index 000000000..b97eb5129 --- /dev/null +++ b/test/fixtures/polygon/boxLocation.js @@ -0,0 +1,93 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + triangle1: { + type: 'polygon', + xMin: 1, + yMin: 1, + xMax: 8, + yMax: 8, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + radius: NaN + }, + box1: { + type: 'box', + xMin: 1, + yMin: 1, + xMax: 8, + yMax: 8, + backgroundColor: 'transparent', + borderColor: 'red', + borderWidth: 1, + }, + circle1: { + type: 'point', + xMin: 1, + yMin: 1, + xMax: 8, + yMax: 8, + backgroundColor: 'transparent', + borderColor: 'red', + borderWidth: 1, + radius: NaN + }, + triangle2: { + type: 'polygon', + xMin: -8, + yMin: -8, + xMax: 1, + yMax: 1, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + radius: NaN + }, + box2: { + type: 'box', + xMin: -8, + yMin: -8, + xMax: 1, + yMax: 1, + backgroundColor: 'transparent', + borderColor: 'red', + borderWidth: 1, + }, + circle2: { + type: 'point', + xMin: -8, + yMin: -8, + xMax: 1, + yMax: 1, + backgroundColor: 'transparent', + borderColor: 'red', + borderWidth: 1, + radius: NaN + }, + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/polygon/boxLocation.png b/test/fixtures/polygon/boxLocation.png new file mode 100644 index 0000000000000000000000000000000000000000..f546dde2557fe8ccd0bb0abdbacaffbbbf959075 GIT binary patch literal 41270 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/polygon/boxLocationRadius.js b/test/fixtures/polygon/boxLocationRadius.js new file mode 100644 index 000000000..f78e2d53f --- /dev/null +++ b/test/fixtures/polygon/boxLocationRadius.js @@ -0,0 +1,71 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + triangle1: { + type: 'polygon', + xMin: 1, + yMin: 1, + xMax: 8, + yMax: 8, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + radius: 10 + }, + box1: { + type: 'box', + xMin: 1, + yMin: 1, + xMax: 8, + yMax: 8, + backgroundColor: 'transparent', + borderColor: 'red', + borderWidth: 1, + }, + triangle2: { + type: 'polygon', + xMin: -8, + yMin: -8, + xMax: 1, + yMax: 1, + backgroundColor: 'rgba(101, 33, 171, 0.5)', + borderColor: 'rgb(101, 33, 171)', + borderWidth: 2, + radius: 130 + }, + box2: { + type: 'box', + xMin: -8, + yMin: -8, + xMax: 1, + yMax: 1, + backgroundColor: 'transparent', + borderColor: 'red', + borderWidth: 1, + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/polygon/boxLocationRadius.png b/test/fixtures/polygon/boxLocationRadius.png new file mode 100644 index 0000000000000000000000000000000000000000..2cd78a3c12081a022ae0a21932c248df1e247797 GIT binary patch literal 29421 zcmeFZXH*p1);3yAlY@W+p~)y&kkEiAp;dx{fCz|WkgSqXGBhYTgGiDrSwIZr(1-*D zBnKr5NX|KPSEKtqd%x%V&bYts{d2}(3>`{Ut(t3w=XvH_6?8{Mfs7bI3_%dtt(&rU zAqWTj6$c{32Y+n3^zMT{V2*bcu0uuN80R2}6}lyRO~b`tF_|b{Uo&>)WI-cZ5r@qe zZ5%n=ZN#_sJ>5{|nv3w|&Tiqv-X{;A$LFIhA<8MKYecLaL`$rM%J~nVfPP&f;qOl; zWoKXFSJI5C&)&mS(g>k4QO}>>e$s!itc(+TN7Eu=rdMjKZfwAi;8EenfxV@Z?+4yH z$+#Yo5Yg|S(5pDY%SG|$ZsS})o&KQJ$k6%uB!_(@`j;gZ?Ag+N!EM@;_x*>=+j788dX9nFsnHWHagQCWBEF&IpUf7)8pNrH$) zhCy);bXf(z=O!8#`@?z(Cjo!lx$c0;;Amb;Tx^Sp6k~bPz5`8(dNKx_{t6m*n9vk~ zUNVy+#njRlF2TmF%C<>5+&IuOw4;8y@Wqj^BwN~wgR@SpT+ZS)wc1n5N}c@PBIulV zcQ*tfZ7D|5@#8mXLi;=Z71|>5?yV0)YAh&&H=G?J8bk|tEB^KOd`f2v_-Z=2C*jy` zllW5?atu$-D_;iN>aJ}m2nlJc)6cBP;{=I(aMs*j4(rT=Dy|xDsIWWRK3Bn0>=^kD zz0s>UyD{C~@Qhq~@WNI1?Z+M)Nn@W0WOlD1Ag;n+DH?9}Gb+80Q4Zph)K`LsZ%~OA zC@h=5x~@QP?<@v|tq_zSuD5pW3a2$qmQRK^Xj>%vN$m{B;InROH04=bh`fBmUCV4` zlrWh%vWiM<<$}YG{H#XW=5QDpX4@8$oX^cPxKLrbxKjnIqlYK$+Vd5cwVzKMCZGQO;pdS-$TUoBa|H>BeIO1IJ$uu5BurY+ z{gU~EmgHe;qB|m`pFe$Ou+M?5KC{OCZX0O%eNhVWLyaWnYQ@mmH1o$nenFR{cGSpF zbp8pNyJu0H8Qid}bI#NckLA9Mq^2w3IXI_Jr`}jTCe`Pq1Gllec5pYG(zK2(!|eTz zrKKy*9a0?!uAMYo#X9+JXm>7a6KAb~ia%*MGyNB*&Y%Aa?Z1hDWTxdKkNg8)wvU4U zdSLM1%l>PU|9Z*qz`4QzY4%0k2?nJ@7K2Yx!ORU1A7~*Ewl#mgV22u1&*EDvT8UjQpEjj z8B-}i+=^&yBDVWP#5G%3HX59h>Q(vuh}nJ7hf3u#tZdkUgbej!kJO;|CTqO{nR;YR zz)wqEzhP^Tfw*=A8LbOmU>EIjFf>*aHhJ>#(STUGN~$zdGqd}}=8d1@ z42Bzx+8JYqMJVNnSa-PZi-bhGW0RKra55QY#Cfa`Jok!<^xl;DPMm=o&vNa7P4zE+ z+jLljtTE})ff>a(My`P)n@RcWC^bsvS0l`|K zttUy{eqXVm`}Sfo845mO8KDJp>3(Y7bW;+fSoW40)8PU5SPCg4V&NUNrH7d7=Lmsj zgt)B!HnVSrJ{inZ!mcU6$NOC?qk7k)ca`>HP@JJxg@MaYKbQ3{TqUj>=8JVF$FuYE z*Hu-?RiSse5n*+4qa)#DZI>2&hXWGmMk*y#gG4P9a1P$!Fh^+0n1egVEC+tP(O12JJpa7QUSB5#TDeeFj|0*Af~?#H!_0ciPK?(JdKtg z%X4LKv^EaY@{>WLCIt!cYe-P^Irk?xA71D2Agu_ncz9O`;f#O~5EX2i<^~)EH_G^E zNs{qpJVj`6geuMCN(DJQ93PF3S@Q~xmWNZ|ExeT@$G7wLYQSR(3UR&js;RMMgif;) zV>xUESwg-tA9f>?e;Ve_m`Cm20b3WmAv>u89&so1bpT5&K5O0g zG+0Z-R%cWO|FneO8SpE@WGJD?jj5Cdn$oEnMR?>h;Zm||@JNe9P$!ES@QuD9_?{2Hf^cC!@M0#8~f|ZLhY5I~%XEED3`DjHroHn@9>i zhAK_&3K<&j4LV&<1LxBRZnq888Slx?4nx=MylxN8uc0T796QxD{V^Wi4QHfS2b z7a@wMc-pKM@WR&xz#9B$*i-OXapm44kPsGw*`Fs??tQ}ytP{`U#|4$X@@?#aaBn1N z2ja6*sl9+~WYyl9(_-E3cGMy@s(tY6Mkqi-xRz01MKC@i?sKtdL4HN-0{rw6(|bet zg*sdikSdyX4!qJ^9DfHjBEp^wYVd&jEq?eI+IxX6e>ZJo7&lVwy&LxZvR}kygxeZ$};u{FfvDWhRgmWEJ$u&~uFk)jE0_6D3TA!WA31 zn0u~&yckW2F1T0NZ4x0xD?a8SV%`?-bAw!pT71;SWa9uNv452?E(rgXD-MPVf+tMT zUWZ5eRIceld|E}Heep;Vqgr3`Ke9OvBOpWBT-l-z#K#1rxC@*pu{`GEH{>aCM0TvHYH@!mucdIg z1*!YaX*%~H!rZ&^*UhonjsRXh#_n~|Z@uZFxfmANV3&)2a6#%Y7YXgP5OqW1ut<3icpkO)quO2=xaR$7akG)dRu}}t z@=NZj>zdV9!7>i_9GKv%5eP^bFxD$CEWa=~4n2A296&@Kc{c2-Dli@eDz#p*^KZEv zZ5iVF!p8aHS1e*_qv-nmp!0J-6|!J0wql@MnzU!mf+~8|5NB1*06F=q=Y_G2(l$uV zm#bi(EFm0}6L(j%IHw_wUHqIKPZzR*3MA_1F?rq`2*}$%o5m8l4KQ>_X?%dS!iAVagrBt1qz3_3p_=&m=th7oc>0g7G78}M;ksFK$+M9!{+ zH)X_^h-qLz)vMn){6>y!&+S?Hfc{Ka;4SCoAHda0n6KPb8jVLnje#6uz-MIOb~?Y@ zi{sJ!N9-32X*n)^lP>htoi zu(FFV^!;$U-aOW)T6FHBD?nMCn7}IPo}n|D-4L}1kvtAh_Qy80@24aJ>r&+m=q82} z+0`C%yjVV;P42+M3f|?#LT6?sIihK~Osl49yn~x5(4dH8dm7A+VnpxLRqAUUF=IHOfa3A6D*umVThOC z)ubC5RB`OwwMQg}HSRhWl{M z3RoxQ=u&Zxs0>Y-o0)2jn+j~+>i3Ri{jVMS203Xx9DCMs>&{UfafR#a$3E3K85ZIv zMQ(PgHILo8Or~ihNc2BC1uhME!dEe#`FvjQlT}Je!f=~nH*-6pi<#S53{T8>f%Jb*Gw|p zb}Y80^r6b>jF{z+ruXe;UU2c;$s(23%UPaP{$u1t7w-`MJpwC0a%^iDxMso zSX*5dA^#8DK}UyHV0Oio+3$*2jf(Ji4#1Ng-fKrS9_R{$h2EOXe*t3*r1$i@+2y&{ zF{|0)H9>#-MKa84=N>a!t+B;jbjBU9H~21q99saGVSpqOz@wfWY7QYLn3mRfA=PQg zx^#b&mGqlG`q-SW8l-1r{y{SNUB>gW3sMg{hLqm#FtU;}P1uhQTlnaYL3)WBoooTR zF`8}DB<@dhKYHvr6l(BZ2Kp~zWq*bUMLSor<1AgkZLZSdNeB2AU~)oblYv}!&&j|R zO99(2>5Y@SB)<>}WD)@43V_A0f>$~BM(1Px_kkz{=I@8xtTK2;LduPP2%^{J+vTj` z*S4|A7gZC%Q3F~Iq2G7sRK52nv|ucrn_ca*smGf+L#nusL-Fc}%jte8=(ahQGj6BA zr;PmrPw_(<-7SE3f(|;zuvJWjFhnJ|G=9d;7+V@af<}FdaX+Iq7`?-*3JJdu>V+Pk z06u>JLjd|7*I!Wq^iUPAONPsQm&c48n5n)Paom|4w8QhVt{nsoB{d)TjPC(FYat6EUUgsoZy7 zV4CyAr{+j^muyZNkf%|2Z(S#hx>q{mEo+9vCMY^anbP)NcS5F}x>(J86$39{sXa)H zI@O*RJC5J%*``3dH!qdx3Gh~=j~cW7oogZ?ddRkR&;01eK&`)GR(I&|TVuFD_3Ec= zqBPj5hN1MFp2qsm>J4tJL{uR8FWpn8Fk9x}dxzb3vpCW7&O_GXuYmMizShJ5;& z^(*IMU!hizq(FEYZONDI)$emi=k zzRz4x8%d=eW88%2Ohs|SWEYgQAfPz-t^?r}j)RV)R%L{MbclP)9OCH-+ za~b9AKuFr^F6LsKRnxXFq4$$&6rNvIv^u}s++M!;)-$`h);7eZ(!%xVnPZ66mRTlZ zOIqG-q$13+hHup!CQ5JB@z*TCc8JSJms`Z(#&$Qh!rTaOVZ6MfZ8RVb#Z5~(wfyWi zrExqSRG#EOH?w#%TD-Ey_u6YUeDM99*=5k^NSa(zMr#i?e;!jhx&5Iab6d%$y5yQJ z!N>Q`Po6Z=u^PH93xuAM@N*-dzy2gb;eRJ%5Szt2r-#HtX3rB0*B-nyJ<6o`E~U9w#42@H)*RY(QuUs( zm}C>p*V9>+*OIwTfh}zjUe{;3AybN)-HDK`XeELA?-r>?6V5Q?U4%KB3rhb*mt|lj zp0TV5X!y5#Mo{nq+q*i{IaG-OGU20>(ek8PU?L4azw`T67U^KD1fU?3?g%0)P(Z&@ zgT-UDK2DBbyZgTTo-UM*N1txMBc6eGFksF>_3I~oF|tvV-R0o|{rhh*vgUlN?W4!v z)Y(^&{Mw4k+2>^LGGZ54?0DFY7aX z48Rj631;DbyQP)yFO5v#{xYtOUQEn?Rr*GH#ecQX?A~iYjsACfahpsSJfdAQ;dvo$ zF7$p)czJ}$a|X5>eLdCptLXXCtX39E%pb#$rb3s$Hy+(#8YAF~-K>B$T12`UBA+eAM>*X3sE`}%5-J*Sc+7hr61H>{c zVKoFTA8@PvId#%Cegp)+>2n>38$KT{st3zuRozX3M@=i;Oq}2)Oc9&1%OIRaZMjQr z&AXF2UVk3z>rO~<kPu#(Sn2W1zSy)F`X+(I4B z`}EdXDTc@(p6K&&TOBp6$N`Ze>R~DR>Wf%)iSQ6t^d(nnmt*t&Yxhn^7XzX3B%vuOB(d(0mdH zk_gD%oK0BA>->DtW}%N!s>as6`u;fBV-|L|Gps$DTWzCmTRKA?0lP0}mhIXTc(5oj zf&GgRScc5tU$TL%>`1K6IavX z$4%vwe#yR;U=4asRD1#WthC?b27tg5@q~vIbK=rSFx~e3XsXcm@Y%&@^Ckv_csWFZ z>NJK+h0ZBUntWFi@Qvu?u}k<~rs743eLT=wPp{1ru{|7pZTj^V&!$$!yY6$TyxWRr zUwzMwvFV4$N!|1OTsFEBsOYTKW~IQN+Q3U3X^}wgh&t% z!%moOMA5wSX1Q8QV<~z5!v)Y2x%p6#PpKWWh-g8J=wAg{$3|@~f3y8u{eWiA6O@CT zB`;1jy{`$){!Lr&EllT@iET#IK9i1EqPYuJBxKxtB#BFg7UEq&At3Bn4d`~MjF?{V zbm`E|=I9ZV=8dco%VMaNQR6&u54C4?GdCfHW_C86@x|#OonUu^oO4)%s4ZJG1MnX{ z&e*Nf4-J!ejJIQ0n2IV^UmT#dO7E_WjhfW^=5Q|ce1Brnj+U1s-6LRQ;HhQa5 zC(1pd@9BF1_lRKU*Aq*I_}{LQ@4B*O9*`@-$2;t%h$nvqa&zA3`2nOKehLW~Z{3|) z>ji=Vm82hHQf*Zy0gu=lova!p+GX;Xht-RvjeZndd({@hSXAGqpo( zzBE~j=8!s=@oK*T&DP)A$Rdy&RbP305uc4Y%TPm)wF}6{<+Gd)DswBE;L&(pKx+}X zeb53cTdC#HKH-*qIza7BUT?cD2I)5U^vIdwYg}5+)4C-3c?cn)_4zRh>V0FxQw%qH)~~=U!+Ee(6nT=sc_6?P ze^CCDBb3_Q$;2(3l27WlT}osZ)Wj19QvAgvOR3ixnAFC($(<|0RoLU|WwqQdzzCUjdW@NraW zg%Au&@$YS43by+^8Qb5drppm|KFzK8I>M0ReZ%0ieH!0o4STL3^ zM%HlKOwN@7ZOzZZ*F?<(9~dG#S2%@~=zPtGp9DBeJ03bAISLZ(`p9_3}D6~j?zaG(2EpX&U+&x4SG zbT4Gh)y)S<53u*)@3&sV-ben{LeZu^R6j$rPpwfz&+~yBo|a*Io7IuwD68XR-S&d_ z<*r{tgkd&qt4_}}Li@206h-0Z&wo~V#dwIZ^z;?OMXtfe32mN#*b{l^t{i{y31N2j zY2kfCkCvDDQ+q=|?ImI4rW=Vr^JL>@(C<4j!}Y# ziem$Ef`*#M@XjBWaOx*Gok$2nN~mIc?4J2euQI#x$60?6dDlcA>AZ~`=;-{@J6P|&sUdrFKzxOMH49)vA z3O5ATQZwSP(ZgX9}jds3%TCAVm>p()8R2jg# z-j)Zf6N~Cn6lf)Fp25sEA>YJ0-~a6z>$LCdUAi`H1WRoL)m9Afje4?`@7H;G zzVFIY&w0@O`j&1g;~Fl;d40V_{Orv(`AWWzO04Vjnw~h33%8pQBKWAaE4Nm?a-~Js zlJ|c+(qh>Otrw;KHj>sHbv*;v4*>J@*86!~o6H42*`9>Cf&OEXm~}Up3#G&&eaAKq zrI+J3SoSG6RbJhMM>Z_t(|x+h3TvVV6O*2g2rR3RGV?i+W_LW>oZbkTK&8i~t2{w1 zkD!{$oVv=EaRl)%o6a#yw%^gW+G`%VY3UZxwWuO``Y7=cruz^kt?cjD z$q=-^G<)Aw*4K$9EvW}tp(tBet7dzf9$h#_v{oc*7kGVTeyN!G7Tl;<1*`nJ_sMo} zKMo_cGn22mnhHJE-$B&9DBWs+h77lD55>pe6h`|Kae`-WhKhmBAYgO2lQ^#`_j&rf zQ~T4VL>Pq;FbE^omf;V{SPHIDJP`~@ z2i}_=Eq^7dJ-CjYEM9eo-VrwLxi2qoH@J@q^Cy(9srf8s1xrKP#c|~Bzf6{J#~V52 zIv(rk=9e33*KCBGzpcAG4FAfdvmyzE?3Wq#J1Fl6)}k04FBXn zZ*M;Zt#Y4BFlv#XrI`q#&!w}LYx+!{T7;`ac=&1MqaU~Li$cT+34tm2jr;rzAKo1X z&8ruQXY(bsxSoo&a0=}zfnS+(BU$vVAlSfM+eBl?6QF_*R=X~oD-)GIc3x{dm$_EA zCI!7z*SuXGg}VN+)ac~L8`BKQ;oP|Fa(Uba>u~voFim);r9s+?U(14KNp;!io-qQ- zEo4 z*uZ7QxmFh48wz?3Z@L}9X!8p~Z?aBOJ)nY!$-c~;??LOCy%crpjTeV>>n@n6uwSMO zZZ_+g(pDN^tlLr$*)>5ms0f^PsvlSr>OI3Zx{!7#iaJIZ^|xd3zDbE3u+_~_7u1GzaNEu^^yKh%p2Zo>uF+ptw+w}^yt9lQi;q~byy0V_dE11Y8c zuzqaqBRMXa3^a~N40HuiV6=1APdRhwBv8eDnecpIeXB65R zvOh+{?!;Q%iWa~z&B$e}{2;yJ%xTy~AFYMakq-%Ob-}hU&>=SLGqOGIQ?(4g!T?gi z;z@K={gd`Z_lOJki5f|s<>@6{sO+M2Y-KUACf@%45jZ@oS&fV(V4?FI*<#Tl|bJ%tojwS@u*JMNzRf} zqEAFeL(eT8lrg(5<*8R7O%DUNdjQXd(WTf8wAHHK@@+lEAwfdqg_aP+c)|CZMvu(= zM$FaP;{dAEka|vsc1sd=ECw-Ms(cZV?Hp%*(J>Sdus^`)5-Lq4Oi>y&tPU3<}U_DUvD?1Qd z@+cLb2{yTn8Lv!9ojxe{LGgw91TyY9b1A#;CVdJSP_P#Ahwn`g1r(~K-(o?Ms5rkN zn>p%=V|2zT;3fjiRL}qB&1G4+B*Tq@XZL+^A2D^AXMfCxS=t;{?oE}NP9#CYqhK)} z(~aSUP^MgCmKiqppBs_=7L>iy;t9e+%n00u2sHS2ZkUE&U-q3>HCeYcgTFOit*GHr zjo&tg{h)EX4VYknkTzZsll8UNz_f&K`Y3*7%t^^Q(u}mky|M%4tK0mkYKGgf+ z$gdK$-K|ka5Os1c$+Lg~ooC&X3U`VMTukS+*y*3~6cu}q+REe)#CnYn67lXfvL@iM z!*d<^8qmhF=d^@MeHZ3utMt&SY<*(|H;d1!6nwZ#2lc@@qR6>dhdCl|QQXG`7Vfh9il*DA11e;j8 zXl1d*Pbl}u(yimCP8ilq+Y;o49&l7%=p@4sFIKG8+!I5x=1sYqeOc}ukJQ} znya<%i2%kPU9>z`ELO|w@6trdu(JmS$#om4qz|hi7JrI}{shl5*pH{Dt zo_uT4lO~wKZ6P^FLQ%v#u`6Su8w@^^{VS)r;!rTGx*#DSKwiaNS3w;sYo4%)O-9Yf z^+Bw^N&CV*sq!2H&ou6)^PvpCV};H{M|@Pa*=Vfk)GfE0l3@1*-)}Eph#I09#7&Kg}^L*)jbO?tc&GJ_o^3vJ9DO|D6K2w zftJG~2H2XeSQ3@52j2nfPkTp$RX$66MWnY>fla;@Z%Q}#-+9G0JO%Fk~ z6xV3-J4mI+q&ENqU#pOGC8uu%-ZB^V57Ycq1rov2SMS~-(0(FX%bB+-%@<1EV0BW7 zz`lop_LdMrhTa3zz4YB75WN-mFrV-gerqzHz98>sS-O$;|7`IKbrbi>R)GsjlcKb; zw)rXd(AT~2`eG#r``iLSRBDuHMUS`Pzj1ocT)tQ`f4+bGkP7Q9#{cjZrW4%p1dEh< zW$}^cwjPrV?T_~Uamtc0d%!y|F38>3tdWh^P1P~x)-OJGonEz#TrF{CGE6^%(inea zoyIJ=`$0kTt`es5`tPm8=!C6N0Y~s!5S$;`!yP9v+{G!X+15E+8auY$&;bp;>w2DB zeach-k2Y-XldlQ;fNYAbnE6FGQz|EH6B;1Dq0l_MmvzxkU+*rY_{CB>edSe#z6KDXYb{%wpLa0LiVmnhYst=k% z>0MfNM}4bSY& zz!ty1dsTi7+o2Gs40;75k*EWk7vl3HLy*T#)mUT2OiBoqsw5@05m_>1Q?&%RMOf(R zV6h`~)+w;r$1xS}sVCgds`Jwx%_9ey$7Ma+Nk?Cu#|G%0PL5aF+H~=s#2S*=oVQj? z9W%T8ZsAJV;)D0sw*Vv=h&gNJ-riKdHCArFm3P9IQxN>Lm=|;@5p`a43zUUB_sPif zT7T=Tg>5zV673O=5!gAufi#0o=mUKQ^;M7oi2{=wkyDhY~lYL_`e{r~H>73+94@{*5qKV)%rQkuQ?B-x)owM`bwRj^pUTa)^*c)( z?)~Qb8b#FClq3tXVS~J+uu-CV<3FH4uL4=X0Dy((KS1cvuE9rP$a!?Ho2vmkzh1Xr zQ1`HQ*&7^FG67l)Rh&UwdPco}KKJmV(Nb;}KvWaT05Tlvqy;YeYD{mD zwuKxuD*r(~xgq|#YnE=#kD7T~bDjC%f=;_dMFJOfOG&{|B|Fe3U5fC(1vo;VEX~=& z+M}Yq-Ve9j_0P=eXnxs9o*Ercg0G&vPIDB3>mZp{;J#lVQu8z10E10PKL1Ea_A0=? zk6I0n&w3wDvKT&P3X3DMgdE}xBG{xIFiTaoD*am_7kbniopEGxi&AuQ5C9Mf_tzBd?6M4d%OSc^`H$9N+ zJV^yLT+{z_2H&nu=|Pl4;l3jV6n;${i3duRzmCNcI?u8k47sLQLH=r9!E@dIjtFnc z-<6+zW7oAY(g|B~5NdZpI_O|nAd}H_e3Sf+8Bzn|cf6W54n_vF-Dp){| z#*3|0<@CM8y~&fS*Px6nz3yMkl3X=WcguGNIW6)1a@IR6LV+7t{VB<5DmP+-vv=;0 zh2L$?1*fYnf0N~-NB=L$m~~%%s-^EjSWSe=Esd(k7BAw%RM7h-QI1D60Tk~4@hRcI zGXWb8FfTf%i(em*zN?B?J7jda9O5gm!F`%~Y~!}e=MPXJsQmE4Y~e$WpecH7Wx+tpcVa?se~{FzsI^p|j42 za<}8R#fs|ZNBe~!Y}@uG@zFW8y|wMub}%w`LDB)?-XWhKtRF4gfp7XCc&f$h$Z_TC zx38hV34{wsLFED(X+~0u1kgw;Y)#$+qJNpH&RC9NsC-yJFRFo?`C+##w?u$Vr7DdAfF;2>p z-PG?$^CLhrNyTaW!yy@J!vqFex>WgE+r0(t#UxKXe$VuVG>yE!6yvmQ15OWyQUdW( zVb$b2m?wWYW+lA<_xkQ~Zr3jEehYY&#OX%zSAUwj(SJ2}OER!X5-fi5AR#xz+@S@K z>XL4-Nt3rjHQ{gHzMG(+sUhfWw@TFG$Y@~R11%brY6~6XVYvvJmL!_}hSB4Bq42mr z!DZKL+V%nH72h{Yf5?M=!{u+Efp!SI<%l8y-j~X2`Z>ajrj$}*ojI{-bcv1lcbE5d z9&_2_w0+M5Ua--iR+s&Itp>O1W)8tOx~5>Lg|i9mSLb`Ueo&g^oWH!5VkPHrZoHj> zv7l4I?Vy0*ie4~yr8{w_30JJd5ybk_NpylXR>}z~F^8n9XZU-ftr%EnS`40b(gb~d z1{ypu3_^uB;hohNyF?feUDPvMXPm+xo(-s{u)a2>1Z4&bAa(-pju|9^iO=s_;9P~> zt5@Jwl~?z{Aw9%1z zRTrJ&wJeb}Gj_1Q3?vMZY!|mHa(-=SS5nirTy5r}A!79EA zYu8|@3-uX={%Yi)`{=y;vPCT)TUST^N!amO#l}k>0J!~dg}Q}__;D|_R*+HhmyeEA zqS)D$HajiXfD3Mysdu(}uab*acmK{4=yd!I(va*OMuAVibJk}%VThc>l$M%|YPC2! zPQ+Y{y~jV`bBQy7<<+d$c^|lLRo;|+3Y)5tI@)-MuNg*5^X$qcl7H8{m`MOzem8NE zvgWR4D*hC2(jzb&euGbM@%}_n=QFA(sx+7CoYC+17vC}eso@vbXjXSl^@~5U4z)G( zyQtc@8>7%xiC@duDz}u;{t+b~DCtWNAJDm%afs5W&~kdU*`GU=I<>g|NSzT5S%20e=zPDE7v!4{ ztv^HPe+voR-B6oM+SAVGrGm*=o(#&FrjAGX)ktv3CxfH_r&j9 zClk_X+pzxP03Nu?~-zP#n^_xFTaogHAF6sq%i0w1>B-1}7#dF3$o$)+j z@IA@w%t>ktk96~?_#Ip|KyR#sOq%RtpK>|Yxlrp}8Mw7qf^e;XJQ?~`u_1v6LQ zmLIguRUt+Tc3b${|D|s>_a|8m%X-dM%!EH#{?lqD0j<^(IrzBr08Au|b^|@>cd>Ew zMmMt9469Hu&Yp<^eP_^NC1c;clfNH{+GiZ{60&|{E1Rj$;=Yr76t#gD538RGBmAB# z5?7R0#C+Bo*x0H0AFp=xkO+L3$Et_@fyqUL?d8g`58L;HT6?fkmLqGo>Fd)9>M3DI zwZ$>}a*TKw&p}f51Sem7r?-F$9PVj;paX@%t*&0f5o9AJ4Y!d<}JPF<&Y2qND z4Q&L!!_V3><-S`C2;0LU1$7T{-;;CM!eh8}!I{>{FNL6Xk{)dDH9gPcjkD3{!0j>Z z$E~j=&Zgne6)S+T1O7m4Gu(K^^^VsbUDk|^M?=`=S&Vqyo-%d@RW~lg+Lj7Px|#hT z94zo0((|QZEl-T|Z3??}7`no>zK!1CHGZKJJOD7)jjaTtx!wVTs{L{vsQ)uvGQN>U ze%4sv14~|1d$;3`Fr+GTgscT$QJ4V3jNr_ET4_25?XvDw)KJ!*nv5S-HDC)E=R`zj zyB6M?Eb3H08#RFRa?Ef}+t@%t(~eAn?=~6KQ1{rBK#wX8mfQExvbIl*q^h@e+xFfuFgIsADS*=kZh&^AA zQ54+6?SUT8RBtFjj|Pewf5jPwlL(YU?#mT3miTEf`wz_pkYqxKhd;xw|2e*aD4OqA zTp68tcVj2{a6cAp<7M1hS)4dqO}(S0oIdkjuO)hKAlKApSQe|vIX*s#b^8qn>HlP_GUp9!Q_ zeVVF{6+|HI_&q7;D&>4pFZ1)3YoOuEy56A;=^u|ebjSwiU2u0!u-{>XA&QSK`67?& zQU-erYx-(_tR{d)Wvt~~YLI`wdYT*9Vl$|y?l^0VV6WNxP@yeFilNwRt3b&6_>gnu zS8JTO3~`G%tg_YCIBUg;=8!4vk)~OYdsdf7MNkvFuF7)$zD%_2F`~0i>ZmUveGXgV zp7(2@-H^}_o0tL4;IYI>a{Z`X16ljYT(7#ST*C#>;JCH&H+5H^Mie^vd5`C62tI3) zS}5qq7TuJ2d2?OS&+A=T-F{Z22ev$1pXa&5j{w!r=t3?yn;bd}GMJ&y_#`nYN@%#F z#GgKp1y0)3ReFby0j)f@FaDuSx$t_4S1W$uMemIL7fV|a)Yy@43PmN@0yy+ahhE}> z4;iupidlnu?k|-$!7BKXEX8AcrlO>Kqk)4}HMQ4Gk>xAhr9*}{rnc^Q)Z~m-u*#0e zlK~cozN15YKL8)|8CoQLg^w}t{iF2y9beU`wKc34c$Sol9i8Ow(9h-qTq{vh0}BUO z2=ie;wsVWp4qoOuDUB zj6SX{!K%#f(JV_smDA>z6LmR0fc>a5_-UEjZ&BuX6D+V{hWnozUh*}_zaYrzGXeBHc?TvkITXW&R3A&Es%J9f@Q^rj^A+SL= zE4RwPwmXd+fT=V}-^X6-u}Q@P#GkW+>1N>S+5FxjswhA7p}gjaG(rERGipU)+^P;< zCb7X)Eyp<4UT0C=rej%fM;7NS>=!z~NOd3>siypCb4f~o4CS09M!>!!o~n?A6>%Mn zz@xdQx>F(KQ?FMSF-d8=DylUbM@25!2kU*L5(3{OVIQ`)f%cbu#woa$?~MmY*o_(o z-j$+iXGm#wF`F#zwDrq^BcXe3>qIKGQ!iiG;OSElb zyxap#k-18~f{^5}O~OD%vfo_z=L-Cb2nc`pc#!K82(nJ^RbgF z7YS;SklZz9u1m0LmjvG)-1xjauRQ0p{aXx+Sl1GB`@-`QpOv6-t?rx5Qz2> zu)Sj^C_R5hZNef$?m;_aRok%UZzcBmUrKBOsuT}P*5V&>{CPCVU(_b2;&S#n4durx z>||2pW}|`E-xF&WZw_ll#K<03UAJ9WDo!!_diu2$4L*scE@%pJ*TbsxOJ0F(KJ&bO z!wK*KwE*rTc@5+^Wz(gr&YFwtM6^VmMV%&qjL5UtW3>yqXJr?GU&h>Z1C6kE6TPyV zZvRtV&*)h}!TyqMyFhjiQ@S_KA2d$qC*3_{DAj3-z^0hnPSK9waOD|{k~Kv8x2__! z__ftm#(48HLd;?rw+ZoZLs^yqrrw6^?x}iPOh@QplODC*Rdcdi@JKms%ow=7lJ{dr zP|L~n{5q|uQK;JY1)U6o8iihca45qvFM(nP%boFxpl9ml*y?B@|LnAFyU0nR1-?zf z*hd7;>>0^0e>!o7D9W%y-zF+&zm({}YJ7~S)KM}EAW8k& zbK>k4!uC{39r_dNBKZb7*aNGc<+nq4GE3EE&;$vMPq_1HU*0c^w zS?Rt;k;FFrAs=F{Z|(E2rR8k{dmLP8lC5b$-jtO4?zqczQRg?=Db`$rG0^4#pFN<( z?xV@sJ^Ys`;8O*5)V+3>U`|hZ?-5NA`i&CAvRr=ojl){fR<;6SHjcD!mpW}EDkJj= z0Ei8XXtp_0Md1ZjFvofcUAjAv8LAAv-xW%^6EFU1&Ma;M*XUYv@Fdl2;hkz|oL6q+ zB;tE>`Dh^Vt62LE{Y`5eSH9m|GYckoHnZ!2jRwyN>voFFMpK|XIDo~-WibP`Bm4)% zO7NP;i`Dnw|7q_m|Dx)?1%9YOX;c~nMG>V#1|3RKP#RH?MnI%n1{{O|9;Hzb36Yji zy1SGP2|>akq;ml2zWboh^Ly^S|G<55{mctr=s9ceeb!!kulO$3w&@5lJTeJ)XIZ?f zbSAsy)?Gv=p{dq~?HCZ!ume??8bRRHYWCKcaA1!SRDpxsV_8ZWkcQ*#<*uHndSi;Y zDXc6tcrTb+Ye;}n4&SkM_&>slJEv;Xy(hVJ+7EP|fvVn+&qKD5)Yat8os(};sOoy} zPd)RpJ-{Cc9gfM}Zzm4j)BJto_;w}|_!T^0Lz@tVa&(7tcCZ%U+5_Q7ElR@ZBhEkfn>XtRbC-@R)VP!?rs!fz$R-cD zH5l`_kx4LcMHw&P%b7I8yOg71IFM)jNcE^P?v98_A%`6Ej}l(Y7Pv)$x+##JX>U&h zGTiD@m16`gdM+r%Nif|FOIW-FF7VZXuRM#vhcH}-$5eQ(kRfg8Vj6tx{#9${)^M{N3=m@ zZgS45%TUhxx|THUBbOlh`V$i`xm!ly%a-~x@RG4^dG>}(?E?GJ=Ua*QK91EAQP;oK zGVs?>l`H~r?uwqREt*QZ5q3Lw$9}$}jUQ8(c(iX-c0ecm-LbyLL=Zqd9nZ${n?AiF zj!WzjnD%meaYY^v*MJL+P6}yV}$MhC9sV=`o;` z6|0{2P3?UmoC}iQnqmQjIU{r28~izTwlUkDg}7jN~(2|2XrOT#N2o z=xBOO&kQ;`e6jp%j)KtOVwF3tW}_n8NqT#JB&YC_236c^rR&esN_uMyJdb`7g3N>@q!_^qm%-@+OF_Nt)>ddb)F@Aq zA4$lQ;JUJ&R_%BJu=6JAW|rOQ*?g@u`=W3$0tEMW`3Hx5_)mpO-d|k>`PN~X)f7jz z>p{)Anj@fo-ELgBiANH|q*g#eVzoFWfcJnDsUM?6xd#=V%t!jgkx;qW_iAqc_pk1I z=A5shJOPT*aiPKLCbqZoassNTRb5GmI9#(J&*WOC)1+zbl`b0&oy1X*;IklLY~a3u z7fLtl7aa!|FN4(ptxEAl;2v<`HK=5aLE71RY}RCDQEH^AG?YJGP(C-HrjpjjB zj#CP}4|5X+8}lExy^HajP^TyAI?msG7r&-;o1J5!L_~Uny8m#;?8BStsu}sCtf-w0 zmZuu!9`hee=L7pEwD?A?H{%4Bmy#PMM>OKmmgvU~lqkLE55DB45xHl{=3OI%_53?S@5lXqsjv^0th*QrCf*lcUkxBH$VEx=>|)VYq5}Zc2po!KL-8 zUteC)Co9*elRjPhAQoNP^7jWE`8`9PKeJcv@J^P|Q&rCm*|S;(yA3!W<@WoIukNBJ zhklz*d9T2D$mIvA-)hxVh`x3T$i4hz>`}KU34>As8ubb2YF#BAOZUx>3nD;%y^zMl*m3Jr62(h#9!D){$n6N_82(sf09oS%)MbxLH%w zP6m6+O&wXKK*s04p9JH{)Zy~R&-IbO9AcBz;EI_ScX3^;RGj3+6E<&Q|NYtgk=GU*A2A#g5qa-u4;JQ zSYH4FoxJ^{9tBU6mvv_<6-0k?GVF_X8G=&LN8g2c;F_A(Eur9be#WUx{wOn|vqgj8 zz-m1u3(#`pr-3yC^K%oR_BcxgEmCTPz8H}iTx34xE^?IW9FT+j9Z#!hx*(9O+B^xo zc=ES|z6I5@6%f1{T7&^g834#;Znn&Ist7%lnj0CPO5xxdj zm#DXcg>SO1O%}s|gu*O$7?tv9T(J{4S=G5g-0Q!sJ9twZM68wJSqB2hc6277&j=>7xyNAqq)l>LXkT5Aj#pl*w8zp zuf|BUYOf?hyDl9@Du#g9-8v)EaR(>FvXb5br=jw&gA(_LQQOBU)n~}Sdj9|C^MB&= z2?m8gmea3)5ZMj6Fx;=KP@-TU-%`I^vSW>a{aBgEOx!35b8<*f}@>n z`eDjCGL?)L4!bq<`q zfCX;=XFOl4?6Oq|>D|%GVP@yo_z{Zkb@*D>K9J5M~cOMiB z7FoR-?7C7%nrAy)&NbgCax_@*WCA4V&;joGYD4zDXAVt>*@y99gRxHeXO{p6pVjuG zA*-AQ&x3x?tLn=jw?}*n=d?N{;2DkJ2--G=1vVja&O8>l=ifr+^gA>%Ju%u#BU&z< zpxWQ3A@dY z`F`wy6ftiMB(ZFeQraF|`@zLX!-1{zRr|>B;ErkI6nsLIYuvNIsS~1 zyXmvbT?Uk{_M~WCLO-zK*$!Rm9BzezSg+-?Er3&qIbbL*MMA%Pk5(^w9euXJ3PQGr zUlc;Z_NC44@>f@QRoH!weMOBQvsJ9+Hp`@_<;kh+;U5R=%@oqJuGsIH+OostPm=+@ zab3FTBn_fg>}+f?lFT+uq@0CfXgIHs=_Jm^yv&LmkAFB6WLgj2edft%p~Y#*?J=K1 zfO4AeNg=6I!Qm9bN$+(sca1%Lz5o%R-$wjU6j+L4TGPQZBhO?jkcC%C5oqwQ zuu%Ytn)>_~XgPpoiHi;CiTBfd#yUFF)k5m0>gt_Wrw^%i(cwr|i1m;Edesdt2zk$P zBux_CdfB9FXTSB5K7*kzfdp-jR;cBc{|q%pvD}DI{+Wd=#K;Dk8c^zhg-Ih0>kJiy z@?Gyr$(XuUZXnQh=IXaHZjj^0@ZnhXkiQ6C3n9IEV?OKJnS%$mR5BNiQQ=iiUWn&> z1evaexnrAGTo)+uBV9>;nm+Wny5Y+N$*d=dI81DbwZ&ePjCA2C`NG_;n%A-6Vo%+X zg2foWxC4d$T>Z|1t4h30n}y&j^{LPxl)H8cA=8LEk#9|ASCu%-qH|%*vdbG)in{pP z9TuZO@fX4QFB4hFQXu_#oj=kCIbNW^29^D1_U=so88XKXEJk4Dzoz4M;UDQ4r|vL9 zOirB5`Ijp9P?f221Ghi9rin4>Lq180c+2l^#2R?e_+8-j9A__VTMyKfbhd&(hW4PJgUT7D2PKVq0Lmm9GN&- zO<7v;#8UWtX^fiVC;~Sua+RqYR^*ed`XxgD(U;}vPrp?Od{;dKP^NxG#E9q7b7qu_ zHR`88&3;$}uXd8hSqWFcjrl&s=db9Xv>UTlxsyIW7{q^;j`0&e%tw_*5?@+G;BR6t zR=X;!Lhetz-&mUKJN2vUg4L!d>-UL&l8W2uIe z@0Qt+;%(jDg&^>$A8^HraTtA~mEDD$Z(WJ9W$9=^sK}%7EL5UCYf%VhSVD@E86A!y3C3a%cQRbt;;RX}a5$xSk6jC2Nl2dkxoDP7QL76zHdO6L zvYi^n+>XZFhWTH1?O%`Jrawqx>Y}U#fMK~emsC>$l}hC#3h=4s;KXonjzS=6H}60A zHo`6QDO3}!X`U0=7<=@WZkIE_`-rGDb72H5*tbPj z$zHei_Qf#{Wn2>idwwx74Y*?B3X$VfL>!8X$$+*@pW%WIiS8N2} zY82lu+;;B!^gx?;=XQU!QJpt$Y9)VG8YL34tJ?f3aFz>5 zBk`3w+%`!$05um>A(*q$U=tf8AZ1Nx7iU>tt~oNW!1w1E=Du@UGHDEIF`m!|VdwfX zgIkxBq7r%@Q-A?UnRg}pGaz49#}mr&Qu@zdt93(q9y?R(;JGf_&NmJ-2|W7Ge6HXe zhE`hZL4z=5z#%WtX>pwll?TxB%^@qFF5Nch{nPK-&g1@n>l6y0G_p&`?h^bWX;gfQ1~=0ryOyH zwxQfBe{^6DPI zv^?{TOeW5{`e0MH9KiAW6c`!$Y6C4IM9i`>QAgMQI#QJMLYtlCoXDbj1U%&0ybjs% zKA`EDY2GA*{@y^INkP=F^1?VV95h*Lf`mGy_A+(y2Fjmi3@J6WmA_|n6VW&KS4YA{ z7U5T}R}Q|2bRKM9NeO(uIe5u+DW__ad1)ZeCxTBmmA|Uq400tJ1K{>q|4VTRAb9XV z|K>R5hr|Y@b3$@9(D})%u9Bjn$Hxo0x49J45N7DS1SX`zxP9UA!et7XtP+|A-gL=t zMw88=RP_83?q%MAvjKEGy(smOdPbddJw*aK zg??00+eXHmYVOF^v@6a_l^+*C;}o@ax4x-H7Q6cx{hPgU-UQoVjtfq>@vP@m?^@C; zzDI}M{H^?zYhT-d7x#l9pR2zslsG$tv>QFXNGijbqgMj>j@-1 zYyay#m?%liX1j6ALIYC%@xsR~I;?TGz&iqc!R3JI56xTsYZ(C1I4_o?CU&Re{WTHH z{%X_P;*9Ka1&dfwi&MkS-;|v}+oF#@m}Q5F)2$3k?a#4!?yoAKM5x?|lCveHNv#_P z1oQ8j;@wql^4uwRsZMPxkzd7|8=UWmC!qO7R{Q##tZ)e3NNHQ%=STzBl!b5&m6IVQ zaqT%3`0GzmI!cvmCg!%bU$^%d$Mt67nv`H&9qH{2ZwTwRVuHRsn;(W2Enny(Awbxr zEh;QbH*U?*wJp1Cv(7BxYER=YXBaS@;#pno`t{lj&1gX0OdRIZ#it%nJQE>~| z?4*Sid(wqWmtixT(hRX9Oi$Au6&85~pVuK=;V;Klpdud21zbLtMp_72C%Z}%p^`0GNl0fb+XRyy7g4g^PKNF=l9P!uix*Sr+*C7+}B*!eP7q-^La0yd*^jD7>0I-5JUl9Qb4rS;K!0@*BbbNaJ{H;63T1ko`fKN=&ag_OP*%4_?^#9^`D7eMDCcB3n*NH|=acKcf>9u^DOWLOR<4+lPzIlk z-RE-S9({19Ra1v#~1m{N~6A2YgBv!D9M-_JjR zr~{uQIn%@cg;q65lY$+39FI z>y8yPNjc4-uG=dEQCy|arU_gt2|^52YG3q0?y2OC_Fu}(4Vy@tFuo%ch|c0mVTQWC7WD9I>xz6K0A_ zt-}hSB(AnoJ275krl~bO$6j<|fmlmf6GTO4gDZ1h`eGT$QXr`D@a3F83A?n~7QjoX zdOr6V?^9pr7_lY=CZgh@S$(G-*3nrSRASVMaJ0`i=uv=jO^$KlVe+x0jcI1|_ZG_Nu3{>u+|wAG4XyYk)^X;DW!rKjFm2Ol|+DLcs^h44@dgO~YGe;L=-Q zRToM*YL1;LptCP*k*%xt*}4JD*>u6J;&vh5qfVQ7cgUOi|+C2WTjj#a=X9 zHN~ojT-%`38gg3!=SOv3s_L5jv@ww#y8h+p_1--pYMfeH<|;28!ML;^>*GGVLxx+*?xz_5w=WsV;(qQw-PLnHrZ55Yx$Z5<6?b3~iwe z!9hLT8X9ST%R_uc(MUQ&4;6Tytx~RJhxZ;r^+xN-Xr8OA5x5qcj*ox5@y{^-EZYCe zPZ~Wh6z`fRK6SL&cZKJ)nwGw}iC3JEIsfPd?}QyFak1h$C&SdGK3byLm7C#FC=%vE ze(HTh($JYI)vm3>lMXvjrn*E2r*X~6ykKnJAyg>=A50VYOvJD}BhmZ5|5_)S^?4|_ z3+-%Cr;fBuJO5iL2)A~>Tx@mZ;j4bquv4V#)giF2Zxe1E^n{GcoRYB%O(M2Y+OkK^ zlh=BxKV@YkYOWKp;?&TfWO$)6_}II?rAuW*5rtWmB& zEDJXCUmX=#M^&%m-N2td&6W;6MAQ(xUpY1jGcD`6%c>FOA68*&@P_BCm2mFdeyFnp zN}kYh!lP4HwwA~s?Ck1lK@P^(Kj1i}vN6mk0ez1)j$dwMLvepj&-gK3S=?(`{63=g zy>qOuabUuA;cQs(fYoNVr49|Y-nQow!K~tD=X~ZWks+g2l)tD1Vk#QMVLL*}>( zm*V(#k;c?nMTQ)b`+RlFkjMg~S{FuM2&~Un|D{yEjsmM@n{Pw4b&iN3?LgL^4m(|g z+s_lk`q?qf8z)nTd4&&!2V*~qOUrLhb~u#J!`|M$E|g5qBmXp7%v4j#y7eVv!1s5a z)ci%brU86yyZ6h8r923@kMIldoZ#Q^;Oc@4IWLW4| zsHmk3y!I+J%qDBZ-^!uxq?pwH$ihchn&^>>Wg^$S?Wjd71&bC&-!M4S!x<+69C`hneo5>UfOxb@Xs*YtNG8O{lD;} z1=B#|@zWysUqOe@+bizPqh_rS(+3E|y0j8@;?1XKT($UcEqe)E_u)#}YnXLhW{(^X zrD|>M$(3@uQBif`s4+=#C(((-qT2HP{$!5sfT=X(=I-8M;#he)+b}=-eWHZ!EJ?Q-e$T z9TY&CNM~puovqrWS-;3lAnr^r;wEZ7O6;$}GoQ2d+D^rzbd@L7AF!X$iawe={4TVU zM&~w(dwe5zI*wsQ7rRszfMdwBQ4$C@1Da za_H}Dd^qnbdqH!-jT0#d{=to2YqY38Gk*YM%}j5hZPU{up43S%yk)A|VwtiZPk9^j zla8}d|GqQU@Dzio8C+H)s<(Ip*R06|azqT|mX|aymO~-Yy5G%*@GD4c-;%QJEMjHF zqi0}1=ho+(BmSg-nm~l~^#-QP7#AUG$hhMfO9Ciws3yI3DSH@rmXQAPtXWw6HgDJV`Ghk#1WZhXR=$2sIIw}Ihhm0cF@y@ z`tZjeqbHuMsrg30*HPAdja1P|)rd@wG4sARdOZvBQ!dpd@cZF4B@E%zf|ebwQHq@vH2(kigr+PK7Bi0&au1}YGUgJ(vs%mJ^ z@VIwfC<3P@h$Yp5pA`yry_dgNv-$Yfw{|L{dAsx76BH-_68%<;ktpI7`NfY?lcsat zh5?kS55Eldl&BS5@l3uJB1k&E@H>l!ORb-!O4&-^Ej*0X)lf2i99)jHhGNee&aF4< zmUat@O9uJG(@~1edcr}pGiwjC*_sb&x~+~+rh`Tgl?N?TKM zbgRlzGi6ow5nCdT8r0xV7Oy5cIXYZ_6Eq4=avW;V?-nQ;l7e>&^Vay0@P+~EHP+_7 z`(D?LI#wOZR*iLJwxV*0eEZN^eB|{z9^wE+4)3IEs@b97L_VqqF;IoL4hw}5)x{7s zpGE{IzK;EAM$M*HFc@aBTF5bbBF@ASX)F!ED`)12Q*@}Z>|L+D4^Trdz#v?dObM-0Jf44k`W^lOE3)JN!(m8i?q3ylf6R+3X-BqNDox=j zwVaRO;KjX$v4p-c%~~D#HTOEGCfPme2JZ=i@+md6fClQky2jp)T(#bfoWfb1R$ks) z=jVP$;bsu%Ll09!9MRXLv&&f8I&n9HTk+cQa?uTb(FHSyU5Fj4lutW^U8JAK z_oEN@#}wF^yAWklX6o&9`YA%_UZ22CCxLlb|MB?y;$eSHw=1&ZH-w;-AL0}7o*Sw>^yJm=F129c>p74AyPKZ?gj z7R=P595$}LU<(dxMspkw3nL1~;MIycg6vx5@}-d1M_X~(Ggb|icJrleT5zV5^ZNHQ z^^O`MrLE*<-KsGXSUY-QB~q>E+iV7Da{uxrQ+r(({Q8Ax9#sPG!4xjrmOzsNukp&R zHsef=WxCovCgRb9%cr*sbkwf`oy&tcBI;pJ)^yhc1^+RRORirt)mL@b_yl4^1yax# zT9ihLv#&d&R;~*4MM}yC#;^NH(4X%KveQ{FxNCo5ZtwUvqq5NcvjQ;8eBeD-jh-63 zVGNw(0B%v1=8B3^puT{NNPX~dzefLsF<$-{B~_WVhzFY;3u* z%4=B*8|TisbaV%_X3BlCKFhR7%Bm<}J~GuXI@fnrV~(f1H{Pzbhb52F;(bL=W6*V-(Mmz z($&YhoF_C{stZFd8@p1R-G9y$ksEj1QrT)rp{ZcqyI&cD;1788aJP`gT-(?=h0lSP zZfSL4qhAgx!wd9HgchJV;<*z9vc=64&Ln4M`Ge=x(J7p!eTL_rP^xZOU<(V6q|R9< z*!Q?rYMO<5i*sxwe0_rY0P&0D{Dk*UUnZp)lf$<@Z`#bSZ*2MsDL@rUJ8&oSN?bi= zy~Kq--Lwz!?s>A*e+b?`{#3WEq3dRsI~vKgT|px=Uk|o!@LV9(U20w!jG0>$nMDLD zt8yeHy6f~mvou)X?DAUQl!cMc5Ep=qMz zhRH!Ch`=~tW!cyQZM06OTvOJuvo%W#b z_`XI)$dM7j_Sm(vK(3QG{QPMVb%23Zki+qVUZ{#4f12d}+*^+M9fe%E>9Gn=vE9@X z+jER@FVRm%eimn#N-%j@KK%rhfAaBH4hWwzN{se(cHOUOX1EiDv>g+0!K)-)UO7yf zcRWU^irf^uuo6%xXCLZh|DZ=ddF^iW~Nh!}t#zb>qJd0#>yv%U(sNZ-D> z6r0~hjfC8+P4;3OtzFaYr*EZIDBop{DDVfajfMX#FSy=r>k96 z=66E#GG85tEfR^DvJY>HeV3VKaDf`aQ{r0pk2^HvC2ZlJ+wlF{SsiWTM^ zlg51@GoM+RKHtR_TL3=4RN0!3WQP>=mq;!bG;V7 zdO^F&G_D!w+lmx|&PKH-v>?0Ra>KnL6Log@?uUbOd6Ljkqt}7;5nLL8HcqnbOuq`z zikC?WMu`(8C6ro)@p!QRk7H)0FHI9kss3?FcNx5)iF8ILs|+jGzAas;L&0+~W>WVf z5f~Uet#e^xgcwyej=|)lv_(ze$Rv3~3BfRjXkeb46A1`zafzfcNJ|6MVRxWH=VqGt zxr7s~R*|`$!x|qSDaR;nu8ElJ9&~Fqe7XKUtf#?`z}oL06mL@8&A`@rcvT{4K#MwH zyv)F(jqh#24Z9S?(CRokgIQPcvHxP+;CXB7Lp*NnC+fUBnJuJNG=0%B`wav-m!njP z59q!g^x#%ko4w>DtS|FZ3y`|V-W(^^n}kMWP9HCSUOtJN>9ZxtQgxaHdiNAA^&Wwt z8;kB&`owtG)?}Ee&{3Ez8Zi!BW21)9oZ%(1fZjORPp(ZXQ*hzXj$KAJ#rI|OUWGiz z-+EY+Zn*Z{6#8s(rKj-ecO6GYWPc zaC7~7oG`HCi}sAsnTHM;2=9Q-gVcejb}UZga5hh3i>)PDY1dm7#!S?H3k%O}APX$O zoLJcqMXaP%Q(qfJ!{f!PP#d%(+5~eI6b_j9na+=R{L6=~4ISiUPSba-_unv4sxltX zFh8IXdEGVLv?(b{Od_AdHfZy`AnMeWESQ&B?l!~%#L2F5(Yh@$0>R%(MN(o3IObR9 z_BpN`dr!*a&@22I8PpS<@_<1qO4VQ+l!pw%gtGj4>(Vk;vRIXE%S3wlfI|bGy)1GT zo-?#178sNe!acr*RARxvT#&^S5uCSl-8Oq4nuz)!4y&NiYhPX$eg*B!GbOu28PC%EDmw`-yjtN(OVI=A=N< zp7!hy@P9ycy1q0r!>;DGbYNcL#Sc(>s2x)Kz&KHMBh#V_tABx1?FcVq;K(xj>6auO ztGbHgCV)@lzC(L!Xy7<>ZsNH%hrOCidEJz^1vGK0BwYE_3m>UCsm*Nlm7fP44Bi<1 z494tG#ri{XNK$luTwooMUc4`i+chA2VnH@?o z-D3~{rjAwq1(2~)s&ZeZhxAKdZtitfo|OPv~#w=x_kH;{bE|E1CJL0jm+3X#6MHsRyF)DyvwQdkkpZ8$yXS( zkx~xL*2c%r>x})w;s)y`#9OgGs1=DR;^in))RtT7hd`BV_1D@Z+Hjo?^jB5i3M%%@ zR|7H7#jOR++;df`!fBhN>q7(0ASG>??O7*G@4OMH`Ym3XSb3V9>J zK8{0qM;CU#gNn(aA34v?zvMh5S?Jtz3}g4it|r{1HWei+`+yo{!91NrbEN|Ifn;pF zdx_|LbHgo}DVRTTULd9*ES9Ibm+HA3_w}8+OP>sg5mxd;Yp82iyGtq|ynnCm>(VT2 z+;LY{t0D#~BK3)fm3L$DYQ@a6Rw_|AY$0$xnUV_VE=MScr)xrCRM5g2To^dj3+jGWq%LJL9LAtiR_ zN@0vQQLO)2{Q5~*>pn9f#T|>W629~ec&1Wx?sibiEghIrUe40(cp~Jevbfw4>HpNB za@jzBZ6Xy8Z$nieyuC+tKKU$2@=wAy&c?Nya4G4&P&m2hojIr`6LqTq9$|ft`=)*K zO!Pb7yLf>f;~@1%Ca6teR&42hsg*QWsbfwwEuL z)5@?rdA=S_jmlK#xg4prdGOUUc1yl)95yRKGB&|o2OHsBRR84SO?ANzhWUdx2?z1f z`T(zj_OMh_wYx%@WaI!Pf2Bv-`@&r>pPt)bJVB(FLfYOqBuCoYJrVj~R68bfKrJpY z9jhuzB5oKz>pR#RUm`wzai#R0 zl>a=IMZDE_G#6=p{q7QGX0pe;*X4V@2Z0RN@5|6nL_1*o=qRg zQSO&V=(k4Yd2!5<&KIH<2=#j&S>ROA?;d>PD#7B z<9#-PIN?3jXG5MTcSY|$b7Jqsn=NPd&I++&M1mztw;3#$-f^s4{wyz!py!kh1DsR{ z2|AX4o?r!%$#_fi4}z#jkTiYV*ky&MxhRUo!KtJ$^1@k)AR}ku!}LeZTjsJEv;9HR zCr@3N1FYP?p@6~`&B+Snjm0D608hrioGH!wI#p#_E=x)W?}KM|F_eI#ln&hLL=LZc z&udFBS%e(F0G=^%^63mvN1O?{bh0GuqSXF-BOH*B%&Kfo>`q>YRrE4px5|c7`Q}Q0 z_@zkssl(*}XSDhFT!I}Uu;oAC0l1&K0K%G|1WAKCx3z@ZqlS0XolP`PiOU=}?rRQq zMM*!u;-Mv*Vb44puefrm(#PV6*!BqklnS0i97fuz>FHZgZAR5UsuP;ZCMg4cMN6N55JX3R<`@*0K`|$u)$jfZs*c>XyZqj+g)aK# zRy@Y^UcuLbR$HH&V|&Wjrj(d;*rO{zh&2v5@CU+3XM=wqj!d&#mTYR6P7SJbObOyH zK2_;D*Xn;JpRrdMyZQiG?7H&{<1%kxI@1$)_az0I3{s#elK@+#zfd=O^}^UE%`)s+ zHs4sAnwTT5QW(a8^@C0LvODf(80?I%i)oCNYb*K0&MfDLnQARgduOc}{-`QJG=KU_ z7-3({Wmu2bo@pT0*Hk;H2!EMA$oZk9O|KV&ver01CffqatE`iZ$&xb67C|`5_I)Rf zU|GkfU#Uci40WKQ7AXAWrijW>)LpUu+{krsjp9K)V~hgH%%#{EY)~GN6{c_2GObi+ z{|a$Ev%!CV$apcr|D?>#wF|X5ahVs*`ubnH%(aePXyJKeDm7bO+{Q)>^@gj)LjZ5# ze=Rw%Q|k}R&G02aBGb=DtfX?9b_|w)PhT^OHIZqlR8Rn?`?A{rd>7of@~*s{r<*j1Tc zx@9u~kI2-&Asv)`r7FT@BII?V&t~S(0h+*#RR1F;kK9WbWca)L_Wrwwj6$-XG{cvP zxJ$0)v-a!Ya}KfE1f8a_bBtSBPw2&{*3RwBd?5G)&Y;=#+uNS}L{bh}D`&s;N5+i|2ebSt0Yi16|80SI+b zSlEp6g*FU{*{ZH{eJbWQ{xD{mo!yj`D=?XQ(>nS zmmti2xapyg!*5LwPp?T^xzS&UuI}HmzLdIQ6?Et%KnkFb7D1sSw2Z=WTB^j+FajPN9lJz+Eu?`XG=YhV zJLc*mfXwr}!QVV!UU9qKit&6)F8Qe+szhU6PuXfc$`t^p$URo2*LzCN4wwhV+P;as z7e$oMIA{*ni2BjL1Y)G?x<=d`tv1R?rhZto_y}sG#5n4#Y&{Uu1{wCQ5`%!!f`O@CT0CzD?T9?txW8# z6CS4P*#*)*5e98|{ts0pYDA%Hq~pSWU#H>#YJQ!mNwPFsV{z}B?}dGEkl)78eSeo_ zKQ(6msG@)>Y6ejwH(pj`9Q}qQlmbB6r&v_oXHdDbEaqiU{$0>g=-36o>q_CH*Asxc zlg`EPkd-|xiZyCYpe#G8K=zJ8_*uU_FbVWA;a3Sgk~Q&*ag+4?VVn4D;+O`+|5Z$A zWj}cy-*2^b)nA36Zh@jcAXF>~VkXkT(9CfhQXuISo|x%@eY^H8|5>NwPZeJsipCmqT2P0IAsas?L)Y?M0&h^f8jE$3Fo8rP*`6qWA zMa@G_o!ZC_4(s?6=ncZ5$y?^@oc1NXHzFui6VC*g_wVgkXxHG7+YPu_=uceiPj>l? zG(^ZJ@p%y*7q!UtpI4@}tKMAs7Z9Ga7(L9H2FA_<4z|sO#0l+I{8m$(g?H~UmG)k; z;Z*cIHd?*sHF;}2f0LIQN)WNBpvzW$;7W_<#lR=t5KO>r?@}=@R6fFD_-)87Im3K2 zZNBv{AMW>TMk=q_a2|K!2iek_XFRZ2iJ?i6k$CR#sFf3pN7JAVK3$NE#`Zw%Qnigy zhx7p47{Mv?$`fC`^^9?+C$;M8#Xh?a|B(U2(SMQ4donHNvtEn&L7*JCWM@SKlmk}5 zl5N2X%$i;txMwF`^w%crOsjYRli^D-N2#GvE!#q#Y*o95taE>q6G~y)+&i`%CNOzI z`zpNn#LvX=M$x7NJxs+X-S7o)T_LWQGEhgSk|=pUESi((h>@Y|l|P zISj+C*DjjxK)GN1eAmfZB1`-l2B=I_HYar_G2@A;^It!(MN+gundaxh8GvlS`Sshx z22+HD1zj0U(vdqg@XPRR5fTU}XJ8MW62Mn31v~@9m1@>Az9-J3R# zk6tUcS}HaRa7-D$Y$t>(Jh@e9IXnR8B~GQz_9Y_QCOPydP%VwMp><8{i&=QQCz9DA zJF%3}yc~)*=Tu)KUEpgDi`6jSc?%yo+m*J_n`=}pu`=PnGsxZNJ)OJG1-ZQcp=1pT z-zT*X^P%HkDOo{0+iE3`Hpg_n`M?`jJa^r+ZG88v+Fy4hWs;CH!7$Dr}MB5 zqC=4Z8ZkvO>1CU_irwq8XmwkT%*E?UW%LB zx$T`WBAQXEZjv^*3KJAi4)fJI$A@<`h3=q-SbOyRfL$UJ{i<-k3+xD?BEs%BptqgC zYAwK@GWYh}SyP%P{05j`^6o6Govrz4lzWoT@eGl)^-*PEXZA;7nP?pw|9{6mE{*}r8#R#DUAL;aQzcZSHoT02lCqtGq zRT>2}kp5?PBp2`yF_21e@~aeY-ZRfI{0;~3gV7Er-n6eM`KAQkF{>RS)96`Pa_mBB z;j2h@VX^VQ6~MCUp8m(X@Q>l+f2e)szo6#$k4zBftDm!S0pNVZB1Gvimf~6ss}rND z9_{Vzm)oE|9*-}A&D$yg$}I^BF#xpG;^E;b!h7@syfL$gcK^St9tAQ8*zxxtm>@R8 zZQlrjD6!k%3o}N9pV|%qVAT+&GWg{WSRNS3KOM=4KUrCcWD-a0czSsi9&hz!4)eba zbbx_?_5HwN7h{lPbRydzSJ;f)MsBP=_MgQ&@J%<6n+MN5R|TFon&RT(4&Z0dwoY(o zW#E*~bcP!CtgrV)hegv|i5I>DtPF;T-y+OV>_f{2vF2E+d(?rxi@=j!@?AS{LkTLh zZc9HhmG;~Mg4p8Wz5sgZLmYuOrnbtuv z$gMRWXbQaD5?uZ3zN}$FSk3~9~&3i$BE5^28+i}1gCvl#``fbAP>#uhZ zsWTsl4!5dG8oh;me+zfmjvA>(9n=aev6s!Ngjy?Zd($GjaW zP>zz%pfdR7lM1X2G!f2B8Hh@*qXk}V%OuIxI|`JI7CUha=Q&KaN4W!wt!^NT%1kdI-he%L!&}iNg^xu4MIN%9GZX-#m-f!Ru-^eJ1M}aV z^!+#Gmj4U`5WfHK1DP1YvIv|{egAmW&-qnyzTLt z*qu^k6jb+-&n-B~KXy`>A8mF>4XWgYKKZ3?g!c8DT7 zm++bpj=io+bpGvoN0zy!x%I$8$G{AI2yST4c5M}T1hLFrxU<`y)`2Eg@GQhZPOTMgxsBYDMfX?>8KDBF9T*?Vw(AQXwXd_^6r1PW19g^e{q zY=mz2U7uqKhna{1RYOArd?j^Y;)4LtF<>HYaO2?SLQM6`2;{(Xk3m1uh#$1dA7~8) z(dB)t0c(HmTx8)8@pf9-KH~l7ye75V!u@T3ICD#ApfA)=t-SC!avzesK?jsrRz>~y z_4z$MgnOvNLs^v3bl#&FhR4@|J)=u?_YwSMLrwJOfbslax#{4r(eVDyL?iHt{4C7D z{s5l5HZv5*|4ro+9QHeg&Ci_v$Kw4nii3Fdk750Px69up0cK#NFE$i>w0_MFc9TqN z#A_Nlxszt`f{zt6&IT~xmbK*+-X^5JtfnTerN{HYBE{oR{qle7{l43Z{p!_ooe_fj zQHh#WJg<-Bt2X#vOlpqOT7Xwq;P4!rN~a0?p4Zoig#i9m=gPj`C0i zXhF5qrKj7G7GtIf8f5Wwn+tgoG2;_&>BL{cB|yU*-_|hSM8#rjD(E!=nlBBph{yre zx6t@|rQH}fF4UU#L}9sbn2WHM9$fMY0K>)5(7ZXD>>J(_Lpa)CK?Z+k8Y8} z_6TMI!N@_K_%MWODQ&I?2y(eYch=wjEl?dLf$muNSYLEoCQG{iz$emUA8yaT#;PjpYg`W(w15I_Uc9%O z%)d%O*tsf&P4KJPxDo^+3D@S7VfBI^BP4QRP{aI_H^FSL+dGNBaz1{jtC)Nwv{W%k z;-&@xQY5b|sA}O^emk9b#rXpzfC6g&!=ug)`HJhuF9SJJ)a6dS$3A)jQB+RItM=tb zaB*-8sR5<$LVi$AEFcn-9zIkP_iR7q@CH&;I-2MhB;8m#p5B0uFYBSa+*`R7xaLEzpS@Tg9*D~}BxQ0`-WusN_fG6v2}o5O%sI`Vi&%EF+aZkF7L` z)=$@2b2Wc+?eqmH z5yQNfptDa!gF^m`S6!ZtN=qQYaKgAI`eYNX1aO0z{M9X)x%%2{mZ^$24hH#VvzODV zrN_2F62&IddDBm6$^Y`26tvoMNPMbUygFW9UjFlzDTP-sX6jY8O>4Ydoy?2l&e!IL zPkMD`jX+L|El5CR;?+PWqPcCF70ft#xBNuX$lXgJzU$aMqXD6(w)X3QW(6rR=Ke1p z%8jwFEoG=^1Mpja)U}PTXR13poH3~!q@hR1fv;9pRx}6HxI*jae8&~srgKYKgB`a> zHwZFSb5-lCr&POdrkkmdaITS9kZ{{heoCv$@b#b6G8cB?RrGYSa?Km}hqd?yi$po7 zNHYOBpcb&4ZH_UR6pz5Pp;ZQpFPg^;=xXsn#7dIc+9=5S#^YUeu9^qL)qsUMgI>pt z->*J*nA}7zNCy4()|YzQ{7d#mq`!GF2MFQQf*WAJYJ%H)MCtoba9zZNCEvP{(88=E zbbOT%MMv7;+!&%!NrLm^s*O?cPBHAv#Z}zmhviU}jpWx`1EeaAadd!xGd%=no|A%n ztF#GDZ+E)Q*RgfJV^q09s2cQN*Ke&fQvrva`(Iw=nF)*RVPx*pcNf=3Vu zaeI8ZTGXbzo>S?(a>aydddsEl&;U$ZOS_JpTWce4v_*45Q<2%=-)nL`vg!gM07MRh zyc<&(|L^bkJT$nS)gC);wE=?MnBWV#RT;>R*JpH?G-4BdwxqqYyS% zngO;S{WiYO=RI31hqnuKp2l$*F$A`dc;XwQDqpYp8|53e_zH>NPCwCJ{+gm2_(ga}}NNw;51F^;)s@2ydoIkU+C2jKR!wGD!~(Y_uJP zbh5tbwHGvaP6H2)<@`nUtsZ_A@PyX2*yLBPyt*Rg$PF!AYjjjxZDv{3UIP85j`;6w z8GLV4%yq$%2zoTqRFW#^(tMdFRy%F{vtEH)m7WJ;7xq{i+I_VrV6$hWQcVA&QV3!Q z=$KtZCrsPHgFBn2KUERKI`!j7Y1H-qRD8`mADF3t9W76WxGEA5v2&b3f^1vvk8Y_( zldnG|@4CpsxxUz@V!k1NY4gb9hPrtGjdwSi)BdC1`>;K3K(?IcXIk2%J1skwSUoRZ zZ97&S@|e6Yq1sD=)Ha>5%l%VfGC00A7TY>|s<+%hX|;6;w*g1`d{eVx-1I#L9{H~2 zoM%7^{qkEY*<2r-5L*p`k!1#p;HUt?f^vhb#rilK%a%(Rc>lcHtx#q#Ijt0Md{-qp zR)w;CF@4aL-R9i!07JKdeT#$nZPlRKiyG;vc(p*Cm7Q1KtO|5lS)0&MxlBmpGF)YN5P|8*KcW0!l+sf9z!-5=CaaGj zOM$T|jA!>puRhLYdUm25|#wP%Qu1Mg-O?mmpqAXmgvbCT~4kbg&x(=Zp9J zv`sF-G=LtyE6wCeaGrNmnn~rhn{&Dj0>c~FP0L%<5OK517n+#nSgA)?G(HiM_L%uH zaw9fC8?9XFnc4$)8Mvq3`TdgHR#(8*+Q@SW%fn>-2NAM;nVy~lJoP`&x2rwMdI5HTE&s2l@3(R2Q8p20$%%3bf-qLT^8aNy5r4pK@AwaSvAWe+C*4I;|9?IwM`6GDBE^f$>H!?bWh?vmbU<0Kz z5|HFqg#N+GVojMcMD61=^BYP6q{((pkp(( z|K5Z9dsx*PvzjF(Xl3&2j-QF?$sJoN_N!Z(9D~|e(99P) Nds;^=@1#Z0{{ew+Hk<$e literal 0 HcmV?d00001 diff --git a/test/fixtures/polygon/heptagon.js b/test/fixtures/polygon/heptagon.js new file mode 100644 index 000000000..3bf1fb477 --- /dev/null +++ b/test/fixtures/polygon/heptagon.js @@ -0,0 +1,40 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + heptagon: { + type: 'polygon', + xValue: 1, + yValue: 1, + sides: 7, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 1, + radius: 50 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/polygon/heptagon.png b/test/fixtures/polygon/heptagon.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8a01dfdf0150b2fc788e6d1659edcb082fb2a8 GIT binary patch literal 22745 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 Bnlu0a literal 0 HcmV?d00001 diff --git a/test/fixtures/polygon/hexagon.js b/test/fixtures/polygon/hexagon.js new file mode 100644 index 000000000..a6b6d1d1e --- /dev/null +++ b/test/fixtures/polygon/hexagon.js @@ -0,0 +1,40 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + hexagon: { + type: 'polygon', + xValue: 1, + yValue: 1, + sides: 6, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 1, + radius: 50 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/polygon/hexagon.png b/test/fixtures/polygon/hexagon.png new file mode 100644 index 0000000000000000000000000000000000000000..b78e7be42670d84be301de4b11b109389018d408 GIT binary patch literal 22250 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 G9{n!>tbDux literal 0 HcmV?d00001 diff --git a/test/fixtures/polygon/hexagonWithPoints.js b/test/fixtures/polygon/hexagonWithPoints.js new file mode 100644 index 000000000..04dbf6b43 --- /dev/null +++ b/test/fixtures/polygon/hexagonWithPoints.js @@ -0,0 +1,52 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: false, + min: -10, + max: 10 + }, + y: { + display: false, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + drawTime: 'afterDraw', + annotations: { + octagon: { + type: 'polygon', + xScaleID: 'x', + yScaleID: 'y', + xValue: 1, + yValue: 1, + sides: 6, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 1, + radius: 50, + point: { + radius: 3, + backgroundColor: 'red', + borderColor: 'black', + borderWidth: 1 + } + } + } + } + } + } + }, + options: { + canvas: { + width: 256, + height: 256 + } + } +}; diff --git a/test/fixtures/polygon/hexagonWithPoints.png b/test/fixtures/polygon/hexagonWithPoints.png new file mode 100644 index 0000000000000000000000000000000000000000..97a4cddc20067180d969866d6d35216b2e54ccff GIT binary patch literal 5181 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

Kp(v*Ew$Aw+V3T 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/polygon/octagon.js b/test/fixtures/polygon/octagon.js new file mode 100644 index 000000000..f8a17e226 --- /dev/null +++ b/test/fixtures/polygon/octagon.js @@ -0,0 +1,40 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + octagon: { + type: 'polygon', + xValue: 1, + yValue: 1, + sides: 8, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 1, + radius: 50 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/polygon/octagon.png b/test/fixtures/polygon/octagon.png new file mode 100644 index 0000000000000000000000000000000000000000..c39164b751e046e2be8e4cff5f71a4557cd8df88 GIT binary patch literal 23140 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�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 DFYU^S literal 0 HcmV?d00001 diff --git a/test/fixtures/polygon/pentagonShadow.js b/test/fixtures/polygon/pentagonShadow.js new file mode 100644 index 000000000..8772f33a2 --- /dev/null +++ b/test/fixtures/polygon/pentagonShadow.js @@ -0,0 +1,44 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + pentagon: { + type: 'polygon', + xValue: 1, + yValue: 1, + sides: 5, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 1, + radius: 50, + backgroundShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/polygon/pentagonShadow.png b/test/fixtures/polygon/pentagonShadow.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5185f4a0ae1f83e6724d9db04bdbd7f98226ed GIT binary patch literal 18228 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 ZMm6UdT@C>kZ~!87T1!teTf_49e*l@k) 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 R_@)uszRkfl<43n&{|}L0&=UXv literal 0 HcmV?d00001 diff --git a/test/fixtures/polygon/rotation.js b/test/fixtures/polygon/rotation.js new file mode 100644 index 000000000..a80ca6384 --- /dev/null +++ b/test/fixtures/polygon/rotation.js @@ -0,0 +1,51 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + triangle: { + type: 'polygon', + xValue: 1, + yValue: 1, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 1, + radius: 50, + rotation: 180 + }, + pentagon: { + type: 'polygon', + xValue: 6, + yValue: 6, + sides: 5, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 1, + radius: 50, + rotation: 180 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/polygon/rotation.png b/test/fixtures/polygon/rotation.png new file mode 100644 index 0000000000000000000000000000000000000000..23cb3cb18984dc5fe3e7080bf327953720cb2eed GIT binary patch literal 25079 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 'rgba(255, 99, 132, 0.25)', + borderColor: () => 'black', + borderWidth: () => 2, + radius: () => 50 + }, + pentagon: { + type: 'polygon', + xValue: 1, + yValue: 1, + sides: () => 5, + backgroundColor: () => 'rgba(101, 33, 171, 0.5)', + borderColor: () => 'red', + borderDash: () => [4, 4], + borderWidth: () => 3, + radius: () => 50 + }, + rhombus: { + type: 'polygon', + xValue: 6, + yValue: 6, + sides: () => 4, + backgroundColor: () => 'rgba(153, 153, 102, 0.5)', + borderColor: () => 'green', + borderWidth: () => 1, + radius: () => 60 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/polygon/scriptableOptions.png b/test/fixtures/polygon/scriptableOptions.png new file mode 100644 index 0000000000000000000000000000000000000000..7aca883107a020ff7e1baebd9115c79ffbc88679 GIT binary patch literal 28468 zcmeFZcT`i~@;-b*AoQ+OK}0FiJ4g{wib_|cca`2-C;|bLDuN)=q$3?gKna8@Qbalk z2%$@dAicwTf`0Vg`@O$^-}RR7T3IU_*2zAz+srdF&+Kqbb!Ac_1|k3eNN?X#xC;O{ zU=s%*fPr6IUIPc<7sTzZ@(ti^*M&s@U;%C`$ZLCY();AD~>(%XP*jx zFB2Rse=k?{J9>oCsYZUtG{Em*ZOFuzm&xTb<)Z8iHzI6@x&7D65D2!wAeh-=-uswabp``)b8?wa`gc%i(2fRZ5~rD%ErD1-t4KY{rK z=R^Q}W-k^dzpY-8$9q5BHRz$vqYjn5=XH(bzb5c&ochMGt1S!~I=%VIUw;9{Qdk=* z`D*|yX16mkAQEden+s)M`La{trRxBjH zr!0$Avj^x%5sx1E=wL^)%}XLzS3kpm$oIUs^v{@>z%jAJ>6if@`Fjl9SPd+O{8zMi z!>nCajE6-Lpf13VK%40oF5hAE&ekh-UNOn)glM{4e%0A(0iKgK~ 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

0lSOpUa2K>e)K2}t9t>gjIA5QLpn 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/polygon/square.js b/test/fixtures/polygon/square.js new file mode 100644 index 000000000..f8fea15da --- /dev/null +++ b/test/fixtures/polygon/square.js @@ -0,0 +1,41 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + square: { + type: 'polygon', + xValue: 1, + yValue: 1, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 1, + radius: 50, + sides: 4, + rotation: 45 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/polygon/square.png b/test/fixtures/polygon/square.png new file mode 100644 index 0000000000000000000000000000000000000000..b4b78157da442a5ba65be4f9b214de5c3794309a GIT binary patch literal 20069 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 C*b&wM literal 0 HcmV?d00001 diff --git a/test/fixtures/polygon/squareShadow.js b/test/fixtures/polygon/squareShadow.js new file mode 100644 index 000000000..abdf98db1 --- /dev/null +++ b/test/fixtures/polygon/squareShadow.js @@ -0,0 +1,45 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + square: { + type: 'polygon', + xValue: 1, + yValue: 1, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 1, + radius: 50, + sides: 4, + rotation: 45, + backgroundShadowColor: 'black', + shadowBlur: 3, + shadowOffsetX: 10, + shadowOffsetY: 10 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/polygon/squareShadow.png b/test/fixtures/polygon/squareShadow.png new file mode 100644 index 0000000000000000000000000000000000000000..23090c36837f3298ff19f588e7dfa84b7a19344a GIT binary patch literal 13271 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/polygon/triangle.js b/test/fixtures/polygon/triangle.js new file mode 100644 index 000000000..e17451498 --- /dev/null +++ b/test/fixtures/polygon/triangle.js @@ -0,0 +1,39 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: -10, + max: 10 + }, + y: { + display: true, + min: -10, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations: { + triangle: { + type: 'polygon', + xValue: 1, + yValue: 1, + backgroundColor: 'rgba(153, 153, 102, 0.5)', + borderColor: 'rgb(153, 153, 102)', + borderWidth: 1, + radius: 50 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/polygon/triangle.png b/test/fixtures/polygon/triangle.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca4c64109a1bd0e7b96dddb0100662a94854bd3 GIT binary patch literal 21931 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 TL3%U%`>#7~b`)-NIrl#R-d$Hp literal 0 HcmV?d00001 diff --git a/test/index.js b/test/index.js index 8855511fa..11cd7351d 100644 --- a/test/index.js +++ b/test/index.js @@ -1,9 +1,18 @@ import {acquireChart, addMatchers, releaseCharts, specsFromFixtures, triggerMouseEvent, afterEvent} from 'chartjs-test-utils'; +import {testEvents} from './events'; +import {createCanvas, getAnnotationElements, scatter10x10, stringifyObject} from './utils'; +import * as helpers from '../src/helpers'; +window.helpers = helpers; window.devicePixelRatio = 1; window.acquireChart = acquireChart; window.afterEvent = afterEvent; window.triggerMouseEvent = triggerMouseEvent; +window.testEvents = testEvents; +window.createCanvas = createCanvas; +window.getAnnotationElements = getAnnotationElements; +window.scatter10x10 = scatter10x10; +window.stringifyObject = stringifyObject; jasmine.fixtures = specsFromFixtures; @@ -14,3 +23,5 @@ beforeEach(function() { afterEach(function() { releaseCharts(); }); + +console.warn('Testing with chart.js v' + Chart.version); diff --git a/test/integration/.eslintrc.yml b/test/integration/.eslintrc.yml new file mode 100644 index 000000000..b4e00d7d2 --- /dev/null +++ b/test/integration/.eslintrc.yml @@ -0,0 +1,2 @@ +rules: + no-console: "off" diff --git a/test/integration/integration-test.js b/test/integration/integration-test.js new file mode 100644 index 000000000..6fbcc42c3 --- /dev/null +++ b/test/integration/integration-test.js @@ -0,0 +1,46 @@ +'use strict'; + +const os = require('os'); +const fs = require('fs-extra'); +const path = require('path'); +const childProcess = require('child_process'); + +const {describe, it} = require('mocha'); + +function exec(command, options = {}) { + const output = childProcess.execSync(command, { + encoding: 'utf-8', + ...options, + }); + return output && output.trimEnd(); +} + +describe('Integration Tests', () => { + const tmpDir = path.join(os.tmpdir(), 'chartjs-plugin-annotation-tmp'); + fs.rmSync(tmpDir, {recursive: true, force: true}); + fs.mkdirSync(tmpDir); + + const distDir = path.resolve('./'); + const archiveName = exec(`npm --quiet pack ${distDir}`, {cwd: tmpDir}); + fs.renameSync( + path.join(tmpDir, archiveName), + path.join(tmpDir, 'plugin.tgz'), + ); + + function testOnNodeProject(projectName) { + const projectPath = path.join(__dirname, projectName); + + const packageJSONPath = path.join(projectPath, 'package.json'); + const packageJSON = JSON.parse(fs.readFileSync(packageJSONPath, 'utf-8')); + + it(packageJSON.description, () => { + const cwd = path.join(tmpDir, projectName); + fs.copySync(projectPath, cwd); + + exec('npm --quiet install', {cwd, stdio: 'inherit'}); + exec('npm --quiet test', {cwd, stdio: 'inherit'}); + }).timeout(5 * 60 * 1000); + } + + testOnNodeProject('ts'); +}); diff --git a/test/integration/ts/basic.ts b/test/integration/ts/basic.ts new file mode 100644 index 000000000..8ed682633 --- /dev/null +++ b/test/integration/ts/basic.ts @@ -0,0 +1,34 @@ +import { Chart } from 'chart.js'; +import Annotation from 'chartjs-plugin-annotation'; + +Chart.register(Annotation); + +const chart = new Chart('id', { + type: 'bar', + data: { + labels: [], + datasets: [{ + data: [] + }] + }, + options: { + plugins: { + annotation: { + clip: false, + annotations: [{ + type: 'line', + label: { + content: ['test', 'multiple'], + width: '100%' + } + }, { + type: 'box', + backgroundColor: 'red', + borderColor: (ctx, options) => options.type === 'box' ? 'red' : 'green', + } + ] + } + } + }, + plugins: [Annotation] +}); diff --git a/test/integration/ts/package.json b/test/integration/ts/package.json new file mode 100644 index 000000000..743ac29af --- /dev/null +++ b/test/integration/ts/package.json @@ -0,0 +1,19 @@ +{ + "private": true, + "description": "chartjs-plugin-annotation should compile with all supported TS versions", + "scripts": { + "test": "node test.js" + }, + "dependencies": { + "chart.js": "^3.1.0", + "chartjs-plugin-annotation": "file:../plugin.tgz", + "typescript-3.8": "npm:typescript@3.8.x", + "typescript-3.9": "npm:typescript@3.9.x", + "typescript-4.0": "npm:typescript@4.0.x", + "typescript-4.1": "npm:typescript@4.1.x", + "typescript-4.2": "npm:typescript@4.2.x", + "typescript-4.3": "npm:typescript@4.3.x", + "typescript-4.4": "npm:typescript@4.4.x", + "typescript-4.5": "npm:typescript@4.5.x" + } +} diff --git a/test/integration/ts/test.js b/test/integration/ts/test.js new file mode 100644 index 000000000..2dc0fea6d --- /dev/null +++ b/test/integration/ts/test.js @@ -0,0 +1,19 @@ +'use strict'; + +const path = require('path'); +const childProcess = require('child_process'); + +const {dependencies} = require('./package.json'); + +const tsVersions = Object.keys(dependencies) + .filter((pkg) => pkg.startsWith('typescript-')) + .sort((a, b) => b.localeCompare(a)); + +for (const version of tsVersions) { + console.log(`Testing on ${version} ...`); + childProcess.execSync('node ' + tscPath(version), {stdio: 'inherit'}); +} + +function tscPath(version) { + return path.join(__dirname, 'node_modules', version, 'bin/tsc'); +} diff --git a/test/integration/ts/tsconfig.json b/test/integration/ts/tsconfig.json new file mode 100644 index 000000000..cc1fc5314 --- /dev/null +++ b/test/integration/ts/tsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "target": "ES6", + "moduleResolution": "Node", + "alwaysStrict": true, + "noEmit": true + } +} diff --git a/test/seed-reporter.js b/test/seed-reporter.js new file mode 100644 index 000000000..6328b0bcd --- /dev/null +++ b/test/seed-reporter.js @@ -0,0 +1,13 @@ +const SeedReporter = function(baseReporterDecorator) { + baseReporterDecorator(this); + + this.onBrowserComplete = function(browser, result) { + if (result.order && result.order.random && result.order.seed) { + this.write('%s: Randomized with seed %s\n', browser, result.order.seed); + } + }; +}; + +module.exports = { + 'reporter:jasmine-seed': ['type', SeedReporter] +}; diff --git a/test/specs/annotation.spec.js b/test/specs/annotation.spec.js new file mode 100644 index 000000000..18e7414cc --- /dev/null +++ b/test/specs/annotation.spec.js @@ -0,0 +1,41 @@ +describe('Annotation plugin', function() { + it('should emit console warning when unknown element type is used', function() { + const origWarn = console.warn; + console.warn = jasmine.createSpy('warn'); + + acquireChart({ + type: 'line', + options: { + plugins: { + annotation: { + annotations: [{ + id: 'test', + type: 'invalid' + }] + } + } + } + }); + + expect(console.warn).toHaveBeenCalledWith('Unknown annotation type: \'invalid\', defaulting to \'line\''); + + acquireChart({ + type: 'line', + options: { + plugins: { + annotation: { + annotations: { + test: { + type: 'invalid2' + } + } + } + } + } + }); + + expect(console.warn).toHaveBeenCalledWith('Unknown annotation type: \'invalid2\', defaulting to \'line\''); + + console.warn = origWarn; + }); +}); diff --git a/test/specs/box.spec.js b/test/specs/box.spec.js index 9c528fc5b..b2d8b2dd3 100644 --- a/test/specs/box.spec.js +++ b/test/specs/box.spec.js @@ -1,3 +1,48 @@ describe('Box annotation', function() { describe('auto', jasmine.fixtures('box')); + + describe('inRange', function() { + const annotation = { + type: 'box', + xMin: 2, + yMin: 4, + xMax: 8, + yMax: 6, + borderWidth: 0, + rotation: 0 + }; + + const chart = window.scatter10x10({test: annotation}); + const element = window.getAnnotationElements(chart)[0]; + + it('should return true inside element', function() { + for (const borderWidth of [0, 10]) { + const halfBorder = borderWidth / 2; + element.options.borderWidth = borderWidth; + for (const x of [element.x - halfBorder, element.x + element.width / 2, element.x + element.width + halfBorder]) { + for (const y of [element.y - halfBorder, element.y + element.height / 2, element.y + element.height + halfBorder]) { + expect(element.inRange(x, y)).toEqual(true); + } + } + } + }); + + it('should return false outside element', function() { + for (const borderWidth of [0, 10]) { + const halfBorder = borderWidth / 2; + element.options.borderWidth = borderWidth; + + for (const x of [element.x - halfBorder - 1, element.x + element.width + halfBorder + 1]) { + for (const y of [element.y, element.y + element.height / 2, element.y + element.height]) { + expect(element.inRange(x, y)).toEqual(false); + } + } + for (const x of [element.x, element.x + element.width / 2, element.x + element.width]) { + for (const y of [element.y - halfBorder - 1, element.y + element.height + halfBorder + 1]) { + expect(element.inRange(x, y)).toEqual(false); + } + } + } + }); + }); }); diff --git a/test/specs/display.spec.js b/test/specs/display.spec.js deleted file mode 100644 index 3e3b4c671..000000000 --- a/test/specs/display.spec.js +++ /dev/null @@ -1,61 +0,0 @@ -describe('Display options', function() { - - it('should not throw any exception', function() { - function createAndUpdateChart() { - const config = { - type: 'line', - data: { - labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'], - datasets: [ - { - label: '# of Votes', - data: [12, 19, 3, 5, 2, 3] - } - ] - }, - options: { - scales: { - y: { - beginAtZero: true - } - }, - plugins: { - annotation: { - drawTime: 'afterDatasetsDraw', - dblClickSpeed: 350, - annotations: { - my: { - display: true, - type: 'line', - scaleID: 'y', - value: 10, - borderColor: 'red', - borderWidth: 2 - } - } - } - } - } - }; - - var chart = acquireChart(config); - - chart.update(); - chart.options.plugins.annotation.annotations.my.display = false; - chart.update(); - chart.options.plugins.annotation.annotations.my.display = function() { - return true; - }; - chart.update(); - chart.options.plugins.annotation.annotations.my.display = function() { - return false; - }; - chart.update(); - chart.options.plugins.annotation.annotations.my.display = function() { - return null; - }; - chart.update(); - } - expect(createAndUpdateChart).not.toThrow(); - }); -}); diff --git a/test/specs/ellipse.spec.js b/test/specs/ellipse.spec.js index 9f112a3da..f144d6d50 100644 --- a/test/specs/ellipse.spec.js +++ b/test/specs/ellipse.spec.js @@ -1,3 +1,74 @@ describe('Ellipse annotation', function() { describe('auto', jasmine.fixtures('ellipse')); + + describe('inRange', function() { + const rotated = window.helpers.rotated; + + for (const rotation of [0, 45, 90, 135, 180, 225, 270, 315]) { + const annotation = { + type: 'ellipse', + xMin: 3, + yMin: 4, + xMax: 7, + yMax: 5, + borderWidth: 0, + rotation + }; + + const chart = window.scatter10x10({test: annotation}); + const element = window.getAnnotationElements(chart)[0]; + const center = element.getCenterPoint(); + const xRadius = element.width / 2; + const yRadius = element.height / 2; + + it(`should return true when point is inside element\n{x: ${center.x}, y: ${center.y}, xRadius: ${xRadius.toFixed(1)}, yRadius: ${yRadius.toFixed(1)}}`, function() { + for (const borderWidth of [0, 10]) { + const halfBorder = borderWidth / 2; + element.options.borderWidth = borderWidth; + + for (const angle of [0, 45, 90, 135, 180, 225, 270, 315]) { + const rad = angle / 180 * Math.PI; + + const {x, y} = rotated({ + x: center.x + Math.cos(rad) * (xRadius + halfBorder), + y: center.y + Math.sin(rad) * (yRadius + halfBorder) + }, center, rotation / 180 * Math.PI); + + expect(element.inRange(x, y)).withContext(`rotation: ${rotation}, angle: ${angle}, borderWidth: ${borderWidth}, {x: ${x.toFixed(1)}, y: ${y.toFixed(1)}}`).toEqual(true); + } + } + }); + + it(`should return false when point is outside element\n{x: ${center.x}, y: ${center.y}, xRadius: ${xRadius.toFixed(1)}, yRadius: ${yRadius.toFixed(1)}}`, function() { + for (const borderWidth of [0, 10]) { + const halfBorder = borderWidth / 2; + element.options.borderWidth = borderWidth; + + for (const angle of [0, 45, 90, 135, 180, 225, 270, 315]) { + const rad = angle / 180 * Math.PI; + + const {x, y} = rotated({ + x: center.x + Math.cos(rad) * (xRadius + halfBorder + 1), + y: center.y + Math.sin(rad) * (yRadius + halfBorder + 1) + }, center, rotation / 180 * Math.PI); + + expect(element.inRange(x, y)).withContext(`rotation: ${rotation}, angle: ${angle}, borderWidth: ${borderWidth}, {x: ${x.toFixed(1)}, y: ${y.toFixed(1)}}`).toEqual(false); + } + } + }); + } + + it('should refurn false for zero width/height ellipse', function() { + const chart = window.scatter10x10([ + {type: 'ellipse', xMin: 1, xMax: 1, yMin: 1, yMax: 1}, + {type: 'ellipse', xMin: 2, xMax: 3, yMin: 1, yMax: 1}, + {type: 'ellipse', xMin: 1, xMax: 1, yMin: 2, yMax: 3} + ]); + const elements = window.getAnnotationElements(chart); + for (const element of elements) { + const center = element.getCenterPoint(); + expect(element.inRange(center.x, center.y)).toEqual(false); + } + }); + }); }); diff --git a/test/specs/events.spec.js b/test/specs/events.spec.js index 82d1eb505..7dc0753b0 100644 --- a/test/specs/events.spec.js +++ b/test/specs/events.spec.js @@ -1,59 +1,160 @@ -describe('Event callbacks', function() { - - it('should not throw any exception', function() { - function createAndUpdateChart() { - const config = { - type: 'line', - data: { - labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'], - datasets: [ - { - label: '# of Votes', - data: [12, 19, 3, 5, 2, 3] - } - ] - }, - options: { - scales: { - y: { - beginAtZero: true - } +describe('Common', function() { + + describe('events', function() { + const chartConfig = { + type: 'scatter', + options: { + animation: false, + scales: { + x: { + display: false, + min: 0, + max: 10 }, - plugins: { - annotation: { - drawTime: 'afterDatasetsDraw', - dblClickSpeed: 350, - annotations: { - my: { - display: true, - type: 'line', - scaleID: 'y', - value: 10, - borderColor: 'red', - borderWidth: 2, - click() { - } - }, - mydisable: { - display: false, - type: 'line', - scaleID: 'y', - value: 20, - borderColor: 'red', - borderWidth: 2, - click() { - } - } - } - } + y: { + display: false, + min: 0, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { } } - }; + } + }; + const options = { + type: 'box', + id: 'test', + xMin: 2, + yMin: 2, + xMax: 4, + yMax: 4 + }; + const x0y0 = {x: 0, y: 0}; + const center = function(chart) { + const xCenter = options.xMax - options.xMin; + const yCenter = options.yMax - options.yMin; + const xScale = chart.scales.x; + const yScale = chart.scales.y; + return {x: xScale.getPixelForValue(xCenter), y: yScale.getPixelForValue(yCenter)}; + }; + + const pluginOpts = chartConfig.options.plugins.annotation; + + [pluginOpts, options].forEach(function(targetOptions) { + it('should not detect any move events (because no callback is set)', function(done) { + const enterSpy = jasmine.createSpy('enter'); + const leaveSpy = jasmine.createSpy('leave'); + + pluginOpts.annotations = [options]; + + const chart = window.acquireChart(chartConfig); + window.triggerMouseEvent(chart, 'mousemove', center(chart)); + window.afterEvent(chart, 'mousemove', function() { + expect(enterSpy.calls.count()).toBe(0); + + window.triggerMouseEvent(chart, 'mousemove', x0y0); + + window.afterEvent(chart, 'mousemove', function() { + expect(leaveSpy.calls.count()).toBe(0); + done(); + }); + }); + }); + + it('should not detect any events (because unmanaged event)', function(done) { + const clickSpy = jasmine.createSpy('click'); + + targetOptions.click = clickSpy; + pluginOpts.annotations = [options]; + + const chart = window.acquireChart(chartConfig); + window.afterEvent(chart, 'touchstart', function() { + expect(clickSpy.calls.count()).toBe(0); + delete targetOptions.click; + done(); + }); + window.triggerMouseEvent(chart, 'touchstart', center(chart)); + }); - var chart = acquireChart(config); + it('should not call removed hook', function(done) { + const enterSpy = jasmine.createSpy('enter'); + const leaveSpy = jasmine.createSpy('leave'); - chart.update(); - } - expect(createAndUpdateChart).not.toThrow(); + pluginOpts.enter = enterSpy; + pluginOpts.leave = leaveSpy; + pluginOpts.annotations = [options]; + + const chart = window.acquireChart(chartConfig); + pluginOpts.enter = undefined; + chart.update(); + + window.triggerMouseEvent(chart, 'mousemove', center(chart)); + window.afterEvent(chart, 'mousemove', function() { + expect(enterSpy.calls.count()).toBe(0); + + window.triggerMouseEvent(chart, 'mousemove', x0y0); + + window.afterEvent(chart, 'mousemove', function() { + expect(leaveSpy.calls.count()).toBe(1); + delete pluginOpts.enter; + delete pluginOpts.leave; + done(); + }); + }); + }); + + it('should persist properties set in context', function(done) { + targetOptions.enter = function(ctx) { + ctx.persistency = true; + }; + targetOptions.leave = function(ctx) { + expect(ctx.persistency).toBe(true); + done(); + }; + pluginOpts.annotations = [options]; + + const chart = window.acquireChart(chartConfig); + window.triggerMouseEvent(chart, 'mousemove', center(chart)); + window.afterEvent(chart, 'mousemove', function() { + + window.triggerMouseEvent(chart, 'mousemove', x0y0); + + window.afterEvent(chart, 'mousemove', function() { + delete targetOptions.enter; + delete targetOptions.leave; + }); + }); + }); + + it('should detect a click event even if 2 clicks are fired', function(done) { + const dblClickSpy = jasmine.createSpy('dblclick'); + + targetOptions.dblclick = dblClickSpy; + pluginOpts.dblClickSpeed = 1; + pluginOpts.annotations = [options]; + + const chart = window.acquireChart(chartConfig); + const eventPoint = center(chart); + + let dblClick = false; + window.afterEvent(chart, 'click', function() { + if (!dblClick) { + dblClick = true; + setTimeout(() => { + window.triggerMouseEvent(chart, 'click', eventPoint); + }, 50); + } else { + expect(dblClickSpy.calls.count()).toBe(0); + delete targetOptions.dblclick; + delete pluginOpts.dblClickSpeed; + done(); + } + }); + window.triggerMouseEvent(chart, 'click', eventPoint); + }); + }); }); }); diff --git a/test/specs/helpers.spec.js b/test/specs/helpers.spec.js new file mode 100644 index 000000000..06d3d646d --- /dev/null +++ b/test/specs/helpers.spec.js @@ -0,0 +1,25 @@ +describe('helpers', function() { + + describe('requireVersion', function() { + const requireVersion = window.helpers.requireVersion; + + it('should throw error for too old version', function() { + expect(() => requireVersion('test', '3.7', '2.9.3')).toThrowError(); + expect(() => requireVersion('test', '3.7', '3.6.99-alpha3')).toThrowError(); + expect(() => requireVersion('test', '16.13.2.8', '16.13.2.8-beta')).toThrowError(); + }); + + it('should not throw error for new enough version', function() { + expect(() => requireVersion('test', '3.7', '3.7.0-beta.1')).not.toThrowError(); + expect(() => requireVersion('test', '3.7.1', '3.7.19')).not.toThrowError(); + expect(() => requireVersion('test', '3.7', '4.0.0')).not.toThrowError(); + expect(() => requireVersion('test', '16.13.2', '16.13.3-rc')).not.toThrowError(); + }); + + it('should return boolean when `strict` parameter is false', function() { + expect(requireVersion('test', '3.7', '2.9.3', false)).toBeFalse(); + expect(requireVersion('test', '3.7', '3.8', false)).toBeTrue(); + }); + }); + +}); diff --git a/test/specs/label.spec.js b/test/specs/label.spec.js new file mode 100644 index 000000000..10a07b9c7 --- /dev/null +++ b/test/specs/label.spec.js @@ -0,0 +1,47 @@ +describe('Label annotation', function() { + describe('auto', jasmine.fixtures('label')); + + describe('inRange', function() { + const annotation = { + type: 'label', + id: 'test', + xValue: 5, + yValue: 5, + content: 'This is my text', + position: 'center', + }; + + const chart = window.scatter10x10({test: annotation}); + const element = window.getAnnotationElements(chart)[0]; + + it('should return true inside element', function() { + for (const borderWidth of [0, 10]) { + const halfBorder = borderWidth / 2; + element.options.borderWidth = borderWidth; + for (const x of [element.x - halfBorder, element.x + element.width / 2, element.x + element.width + halfBorder]) { + for (const y of [element.y - halfBorder, element.y + element.height / 2, element.y + element.height + halfBorder]) { + expect(element.inRange(x, y)).toEqual(true); + } + } + } + }); + + it('should return false outside element', function() { + for (const borderWidth of [0, 10]) { + const halfBorder = borderWidth / 2; + element.options.borderWidth = borderWidth; + + for (const x of [element.x - halfBorder - 1, element.x + element.width + halfBorder + 1]) { + for (const y of [element.y, element.y + element.height / 2, element.y + element.height]) { + expect(element.inRange(x, y)).toEqual(false); + } + } + for (const x of [element.x, element.x + element.width / 2, element.x + element.width]) { + for (const y of [element.y - halfBorder - 1, element.y + element.height + halfBorder + 1]) { + expect(element.inRange(x, y)).toEqual(false); + } + } + } + }); + }); +}); diff --git a/test/specs/line.spec.js b/test/specs/line.spec.js index caec9bd59..e65644616 100644 --- a/test/specs/line.spec.js +++ b/test/specs/line.spec.js @@ -1,3 +1,23 @@ describe('Line annotation', function() { describe('auto', jasmine.fixtures('line')); + + const eventIn = function(xScale, yScale, element) { + const options = element.options; + const adjust = options.borderWidth / 2 - 1; + return {x: element.x - adjust, y: element.y}; + }; + const eventOut = function(xScale, yScale, element) { + const options = element.options; + const adjust = options.borderWidth / 2 + 1; + return {x: element.x - adjust, y: element.y}; + }; + + window.testEvents({ + type: 'line', + id: 'test', + scaleID: 'y', + value: 5, + borderWidth: 10 + }, eventIn, eventOut); + }); diff --git a/test/specs/lineLabel.spec.js b/test/specs/lineLabel.spec.js new file mode 100644 index 000000000..ec3aaa5ab --- /dev/null +++ b/test/specs/lineLabel.spec.js @@ -0,0 +1,28 @@ +describe('Label of line annotation', function() { + + const eventIn = function(xScale, yScale, element) { + const options = element.options.label; + const adjust = options.borderWidth / 2 - 1; + return {x: element.labelX + element.labelWidth / 2, y: element.labelY - element.labelHeight / 2 - adjust}; + }; + const eventOut = function(xScale, yScale, element) { + const options = element.options.label; + const adjust = options.borderWidth / 2 + 1; + return {x: element.labelX + element.labelWidth / 2, y: element.labelY - element.labelHeight / 2 - adjust}; + }; + + window.testEvents({ + type: 'line', + id: 'test', + scaleID: 'x', + value: 5, + borderWidth: 0, + label: { + enabled: true, + content: ['This is the first row', 'This is the second row'], + borderWidth: 10, + rotation: 0 + } + }, eventIn, eventOut); + +}); diff --git a/test/specs/point.spec.js b/test/specs/point.spec.js index 8984f6ecd..7c05651fb 100644 --- a/test/specs/point.spec.js +++ b/test/specs/point.spec.js @@ -1,162 +1,77 @@ describe('Point annotation', function() { describe('auto', jasmine.fixtures('point')); - describe('events', function() { - const Annotation = window['chartjs-plugin-annotation']; - - it('should detect events', function(done) { - const enterSpy = jasmine.createSpy('enter'); - const leaveSpy = jasmine.createSpy('leave'); - - const chart = window.acquireChart({ - type: 'scatter', - options: { - animation: false, - scales: { - x: { - display: false, - min: 0, - max: 10 - }, - y: { - display: false, - min: 0, - max: 10 - } - }, - plugins: { - legend: false, - annotation: { - annotations: { - point: { - type: 'point', - radius: 10, - borderWidth: 5, - enter: enterSpy, - leave: leaveSpy - }, - point2: { - type: 'point', - xScaleID: 'x', - yScaleID: 'y', - xValue: 8, - yValue: 8, - radius: 0, - borderWidth: 0, - enter: enterSpy - } - } - } + describe('inRange', function() { + const annotation1 = { + type: 'point', + xValue: 7, + yValue: 7, + radius: 30 + }; + const annotation2 = { + type: 'point', + xValue: 3, + yValue: 3, + radius: 5 + }; + const annotation3 = { + type: 'point', + xValue: 5, + yValue: 5, + radius: 0 + }; + + const chart = window.scatter10x10({annotation1, annotation2, annotation3}); + const elems = window.getAnnotationElements(chart).filter(el => el.options.radius > 0); + const elemsNoRad = window.getAnnotationElements(chart).filter(el => el.options.radius === 0); + + elems.forEach(function(element) { + it(`should return true inside element '${element.options.id}'`, function() { + for (const borderWidth of [0, 10]) { + const halfBorder = borderWidth / 2; + element.options.borderWidth = borderWidth; + const radius = element.height / 2; + for (const angle of [0, 45, 90, 135, 180, 225, 270, 315]) { + const rad = angle * (Math.PI / 180); + const {x, y} = { + x: element.x + Math.cos(rad) * (radius + halfBorder - 1), + y: element.y + Math.sin(rad) * (radius + halfBorder - 1) + }; + expect(element.inRange(x, y)).withContext(`angle: ${angle}, radius: ${radius}, borderWidth: ${borderWidth}, {x: ${x.toFixed(1)}, y: ${y.toFixed(1)}}`).toEqual(true); } - }, + } }); - const state = Annotation._getState(chart); - const point = state.elements[0]; - const point2 = state.elements[1]; - - // should be centered when there are no scales or values - expect(point.x).toEqual(256); - expect(point.y).toEqual(256); - - expect(enterSpy.calls.count()).toBe(0); - expect(leaveSpy.calls.count()).toBe(0); - - window.triggerMouseEvent(chart, 'mousemove', point); - - window.afterEvent(chart, 'mousemove', function() { - expect(enterSpy.calls.count()).toBe(1); - - window.triggerMouseEvent(chart, 'mousemove', { - x: point.x + 16, - y: point.y - }); - - window.afterEvent(chart, 'mousemove', function() { - expect(leaveSpy.calls.count()).toBe(1); - - window.triggerMouseEvent(chart, 'mousemove', { - x: point.x + 14.5, - y: point.y - }); - - window.afterEvent(chart, 'mousemove', function() { - expect(enterSpy.calls.count()).toBe(2); - - window.triggerMouseEvent(chart, 'mousemove', point2); - - window.afterEvent(chart, 'mousemove', function() { - expect(leaveSpy.calls.count()).toBe(2); - expect(enterSpy.calls.count()).toBe(2); - done(); - }); - }); - }); + it(`should return false outside element '${element.options.id}'`, function() { + for (const borderWidth of [0, 10]) { + const halfBorder = borderWidth / 2; + element.options.borderWidth = borderWidth; + const radius = element.height / 2; + for (const angle of [0, 45, 90, 135, 180, 225, 270, 315]) { + const rad = angle * (Math.PI / 180); + const {x, y} = { + x: element.x + Math.cos(rad) * (radius + halfBorder + 1), + y: element.y + Math.sin(rad) * (radius + halfBorder + 1) + }; + expect(element.inRange(x, y)).withContext(`angle: ${angle}, radius: ${radius}, borderWidth: ${borderWidth}, {x: ${x.toFixed(1)}, y: ${y.toFixed(1)}}`).toEqual(false); + } + } }); - }); - }); - describe('applying defaults', function() { - - it('should not throw any exception', function() { - function createAndUpdateChart() { - const config = { - type: 'scatter', - options: { - animation: false, - scales: { - x: { - display: false, - min: 0, - max: 10 - }, - y: { - display: false, - min: 0, - max: 10 - } - }, - plugins: { - legend: false, - annotation: { - annotations: { - point: { - type: 'point', - borderWidth: 5, - display(context, options) { - if (options) { - context.chart.annotationRadius1 = options.radius; - } - return true; - }, - }, - point2: { - type: 'point', - xScaleID: 'x', - yScaleID: 'y', - xValue: 8, - yValue: 8, - borderWidth: 0, - display(context, options) { - if (options) { - context.chart.annotationRadius2 = options.radius; - } - return true; - }, - } - } - } - } - }, - }; - - var chart = acquireChart(config); - if (isNaN(chart.annotationRadius1) || isNaN(chart.annotationRadius2)) { - throw new Error('Defaults radius is not applied to annotaions : 1-' + chart.annotationRadius1 + ', 2-' + chart.annotationRadius2); + elemsNoRad.forEach(function(element) { + it(`should return false radius is 0 element '${element.options.id}'`, function() { + for (const borderWidth of [0, 10]) { + const halfBorder = borderWidth / 2; + element.options.borderWidth = borderWidth; + for (const x of [element.x - halfBorder, element.x + halfBorder]) { + expect(element.inRange(x, element.y)).toEqual(false); + } + for (const y of [element.y - halfBorder, element.y + halfBorder]) { + expect(element.inRange(element.x, y)).toEqual(false); + } } - } - expect(createAndUpdateChart).not.toThrow(); + }); }); }); }); diff --git a/test/specs/polygon.spec.js b/test/specs/polygon.spec.js new file mode 100644 index 000000000..a77f07cf3 --- /dev/null +++ b/test/specs/polygon.spec.js @@ -0,0 +1,115 @@ +describe('Polygon annotation', function() { + describe('auto', jasmine.fixtures('polygon')); + + describe('inRange', function() { + const annotation1 = { + type: 'polygon', + xValue: 1, + yValue: 1, + borderWidth: 0, + sides: 3, + radius: 30 + }; + const annotation2 = { + type: 'polygon', + xValue: 2, + yValue: 2, + borderWidth: 10, + sides: 4, + radius: 5 + }; + const annotation3 = { + type: 'polygon', + xValue: 3, + yValue: 3, + borderWidth: 0, + sides: 5, + radius: 27 + }; + const annotation4 = { + type: 'polygon', + xValue: 4, + yValue: 4, + sides: 3, + borderWidth: 10, + rotation: 21, + radius: 20 + }; + const annotation5 = { + type: 'polygon', + xValue: 5, + yValue: 5, + sides: 4, + borderWidth: 0, + rotation: 131, + radius: 33 + }; + const annotation6 = { + type: 'polygon', + xValue: 6, + yValue: 6, + sides: 5, + borderWidth: 10, + rotation: 241, + radius: 24 + }; + const annotation7 = { + type: 'polygon', + xValue: 7, + yValue: 7, + sides: 5, + radius: 0 + }; + const annotation8 = { + type: 'polygon', + xValue: 8, + yValue: 8, + borderWidth: 10, + sides: 5, + radius: 0 + }; + + const chart = window.scatter10x10({annotation1, annotation2, annotation3, annotation4, annotation5, annotation6, annotation7, annotation8}); + const elems = window.getAnnotationElements(chart).filter(el => el.options.radius > 0); + const elemsNoRad = window.getAnnotationElements(chart).filter(el => el.options.radius === 0); + + elems.forEach(function(element) { + const center = element.getCenterPoint(); + const rotation = element.options.rotation; + const sides = element.options.sides; + const borderWidth = element.options.borderWidth; + const radius = element.height / 2; + const angle = (2 * Math.PI) / sides; + + it(`should return true inside element '${element.options.id}'`, function() { + const halfBorder = borderWidth / 2; + let rad = rotation * (Math.PI / 180); + for (let i = 0; i < sides; i++, rad += angle) { + const sin = Math.sin(rad); + const cos = Math.cos(rad); + const x = center.x + sin * (radius + halfBorder - 1); + const y = center.y - cos * (radius + halfBorder - 1); + expect(element.inRange(x, y)).withContext(`sides: ${sides}, rotation: ${rotation}, radius: ${radius}, borderWidth: ${borderWidth}, {x: ${x.toFixed(1)}, y: ${y.toFixed(1)}}`).toEqual(true); + } + }); + + it(`should return false outside element '${element.options.id}'`, function() { + const halfBorder = borderWidth / 2; + let rad = rotation * (Math.PI / 180); + for (let i = 0; i < sides; i++, rad += angle) { + const sin = Math.sin(rad); + const cos = Math.cos(rad); + const x = center.x + sin * (radius + halfBorder + 1); + const y = center.y - cos * (radius + halfBorder + 1); + expect(element.inRange(x, y)).withContext(`sides: ${sides}, rotation: ${rotation}, radius: ${radius}, borderWidth: ${borderWidth}, {x: ${x.toFixed(1)}, y: ${y.toFixed(1)}}`).toEqual(false); + } + }); + }); + + elemsNoRad.forEach(function(element) { + it(`should return false radius is 0 element '${element.options.id}'`, function() { + expect(element.inRange(element.x, element.y)).toEqual(false); + }); + }); + }); +}); diff --git a/test/utils.js b/test/utils.js new file mode 100644 index 000000000..189b863eb --- /dev/null +++ b/test/utils.js @@ -0,0 +1,55 @@ +export function createCanvas() { + const canvas = document.createElement('canvas'); + canvas.width = 230; + canvas.height = 210; + const ctx = canvas.getContext('2d'); + ctx.lineWidth = 10; + ctx.strokeRect(40, 90, 150, 110); + ctx.fillRect(95, 140, 40, 60); + ctx.beginPath(); + ctx.moveTo(15, 90); + ctx.lineTo(115, 10); + ctx.lineTo(215, 90); + ctx.closePath(); + ctx.stroke(); + return canvas; +} + +export function getAnnotationElements(chart) { + return window['chartjs-plugin-annotation']._getState(chart).elements; +} + +export function scatter10x10(annotations) { + return window.acquireChart({ + type: 'scatter', + options: { + animation: false, + scales: { + x: { + display: false, + min: 0, + max: 10 + }, + y: { + display: false, + min: 0, + max: 10 + } + }, + plugins: { + legend: false, + annotation: { + annotations + } + } + } + }); +} + +function keepInf(key, value) { + return value === Infinity ? 'Infinity' : value; +} + +export function stringifyObject(obj) { + return JSON.stringify(obj, keepInf).replaceAll('"', '').replaceAll(':', ': ').replaceAll(',', ', '); +} diff --git a/types/events.d.ts b/types/events.d.ts index 8182b392d..f2043c115 100644 --- a/types/events.d.ts +++ b/types/events.d.ts @@ -4,6 +4,8 @@ import { AnnotationElement } from './element'; export interface EventContext { chart: Chart, element: AnnotationElement, + id: string, + type: string } /** @@ -13,6 +15,8 @@ export interface EventContext { export interface PartialEventContext { chart: Chart, element?: Partial, + id?: string, + type?: string } export interface AnnotationEvents { diff --git a/types/index.d.ts b/types/index.d.ts index 06523bf6a..a713ce1e1 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,5 +1,5 @@ import { ChartType, Plugin } from 'chart.js'; -import { AnnotationPluginOptions, BoxAnnotationOptions, EllipseAnnotationOptions, LineAnnotationOptions, PointAnnotationOptions } from './options'; +import { AnnotationPluginOptions, BoxAnnotationOptions, EllipseAnnotationOptions, LabelAnnotationOptions, LineAnnotationOptions, PointAnnotationOptions, PolygonAnnotationOptions } from './options'; declare module 'chart.js' { // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -9,9 +9,11 @@ declare module 'chart.js' { interface ElementOptionsByType { boxAnnotation: BoxAnnotationOptions; - lineAnnotation: LineAnnotationOptions; ellipseAnnotation: EllipseAnnotationOptions; + labelAnnotation: LabelAnnotationOptions; + lineAnnotation: LineAnnotationOptions; pointAnnotation: PointAnnotationOptions; + polygonAnnotation: PolygonAnnotationOptions; } } diff --git a/types/label.d.ts b/types/label.d.ts index 0de011cee..f02850ea5 100644 --- a/types/label.d.ts +++ b/types/label.d.ts @@ -1,93 +1,141 @@ -import { Color, FontSpec } from 'chart.js'; +import { Color, FontSpec, BorderRadius } from 'chart.js'; import { PartialEventContext } from './events'; -import { DrawTime, Scriptable } from './options'; +import { DrawTime, Scriptable, ShadowOptions } from './options'; -export interface LabelOptions { - backgroundColor?: Scriptable, +export interface CoreLabelOptions { drawTime?: Scriptable, font?: FontSpec color?: Scriptable, /** - * Padding of label to add left/right - * @default 6 - */ - xPadding?: Scriptable, + * Padding of label + * @default 6 + */ + padding?: Scriptable, /** - * Padding of label to add top/bottom - * @default 6 - */ - yPadding?: Scriptable, - + * Text alignment when the content of the label is multi-line. + * @default 'center' + */ + textAlign?: Scriptable, + /** + * Adjustment along x-axis (left-right) of label relative to above number (can be negative) + * For horizontal lines positioned left or right, negative values move + * the label toward the edge, and positive values toward the center. + * @default 0 + */ + xAdjust?: Scriptable, + /** + * Adjustment along y-axis (top-bottom) of label relative to above number (can be negative) + * For vertical lines positioned top or bottom, negative values move + * the label toward the edge, and positive values toward the center. + * @default 0 + */ + yAdjust?: Scriptable, + /** + * Text to display in label. Provide an array to display multiple lines + */ + content: Scriptable, /** - * Border radius of the label rectangle - * @default 6 - */ - borderRadius?: Scriptable, + * Overrides the width of the image. Could be set in pixel by a number, + * or in percentage of current width of image by a string + */ + width?: Scriptable, + /** + * Overrides the height of the image. Could be set in pixel by a number, + * or in percentage of current height of image by a string + */ + height?: Scriptable, +} +export interface ContainedLabelOptions extends CoreLabelOptions { + backgroundColor?: Scriptable, + borderWidth?: Scriptable, + borderColor?: Scriptable, + /** + * Border line cap style. See MDN. + * @default 'butt' + */ + borderCapStyle?: Scriptable, + /** + * Border line dash. See MDN. + * @default [] + */ + borderDash?: Scriptable, + /** + * Border line dash offset. See MDN. + * @default 0.0 + */ + borderDashOffset?: Scriptable, + /** + * Border line join style. See MDN. + * @default 'miter' + */ + borderJoinStyle?: Scriptable, + /** + * Border radius of the label rectangle + * @default 6 + */ + borderRadius?: Scriptable, /** * @deprecated replaced by borderRadius * @todo remove at v2 */ - cornerRadius?: Scriptable, + cornerRadius?: Scriptable, +} - /** - * Anchor position of label on line. - * @default 'center' - */ +export interface LabelOptions extends ContainedLabelOptions, ShadowOptions { position?: Scriptable, - /** - * Text alignment when the content of the label is multi-line. - * @default 'center' - */ - textAlign?: Scriptable, - + * Whether the label is enabled and should be displayed + * @default true + */ + enabled?: Scriptable, /** - * Adjustment along x-axis (left-right) of label relative to above number (can be negative) - * For horizontal lines positioned left or right, negative values move - * the label toward the edge, and positive values toward the center. - * @default 0 - */ - xAdjust?: Scriptable, - + * Rotation of label, in degrees, or 'auto' to use the degrees of the line, default is 0 + * @default 90 + */ + rotation?: Scriptable /** - * Adjustment along y-axis (top-bottom) of label relative to above number (can be negative) - * For vertical lines positioned top or bottom, negative values move - * the label toward the edge, and positive values toward the center. - * @default 0 - */ - yAdjust?: Scriptable, + * Padding of label to add left/right + * @default 6 + * @deprecated + */ + xPadding?: Scriptable, + /** + * Padding of label to add top/bottom + * @default 6 + * @deprecated + */ + yPadding?: Scriptable, +} +export interface BoxLabelOptions extends CoreLabelOptions { + position?: Scriptable, /** - * Whether the label is enabled and should be displayed - * @default true - */ + * Whether the label is enabled and should be displayed + * @default true + */ enabled?: Scriptable, +} - /** - * Text to display in label. Provide an array to display multiple lines - */ - content: Scriptable, +export interface LabelTypeOptions extends ContainedLabelOptions { + position?: Scriptable, +} - /** - * Overrides the width of the image. Could be set in pixel by a number, - * or in percentage of current width of image by a string - */ - width?: Scriptable, +type percentString = string; +export type LabelPosition = 'start' | 'center' | 'end' | percentString; - /** - * Overrides the height of the image. Could be set in pixel by a number, - * or in percentage of current height of image by a string - */ - height?: Scriptable, +export type LabelTextAlign = 'left' | 'start' | 'center' | 'right' | 'end'; - /** - * Rotation of label, in degrees, or 'auto' to use the degrees of the line, default is 0 - * @default 90 - */ - rotation?: Scriptable +interface LabelPositionObject { + x?: LabelPosition, + y?: LabelPosition } -export type LabelPosition = 'start' | 'center' | 'end'; - -export type LabelTextAlign = 'start' | 'center' | 'end'; +interface LabelPadding { + top?: number, + left?: number, + right?: number, + bottom?: number, + x?: number, + y?: number +} diff --git a/types/options.d.ts b/types/options.d.ts index c4a180967..65ead6615 100644 --- a/types/options.d.ts +++ b/types/options.d.ts @@ -1,14 +1,16 @@ -import { Color } from 'chart.js'; +import { Color, PointStyle, BorderRadius } from 'chart.js'; import { AnnotationEvents, PartialEventContext } from './events'; -import { LabelOptions } from './label'; +import { LabelOptions, BoxLabelOptions, LabelTypeOptions } from './label'; export type DrawTime = 'afterDraw' | 'afterDatasetsDraw' | 'beforeDraw' | 'beforeDatasetsDraw'; export interface AnnotationTypeRegistry { - line: LineAnnotationOptions box: BoxAnnotationOptions ellipse: EllipseAnnotationOptions + label: LabelAnnotationOptions + line: LineAnnotationOptions point: PointAnnotationOptions + polygon: PolygonAnnotationOptions } export type AnnotationType = keyof AnnotationTypeRegistry; @@ -16,14 +18,21 @@ export type AnnotationType = keyof AnnotationTypeRegistry; export type AnnotationOptions = { [key in TYPE]: { type: key } & AnnotationTypeRegistry[key] }[TYPE] +interface ShadowOptions { + backgroundShadowColor?: Scriptable, + borderShadowColor?: Scriptable, + shadowBlur?: Scriptable, + shadowOffsetX?: Scriptable, + shadowOffsetY?: Scriptable +} -export interface CoreAnnotationOptions extends AnnotationEvents { +export interface CoreAnnotationOptions extends AnnotationEvents, ShadowOptions { id?: string, display?: Scriptable, adjustScaleRange?: Scriptable, borderColor?: Scriptable, borderWidth?: Scriptable, - borderDash?: Scriptable<[number, number], PartialEventContext>, + borderDash?: Scriptable, borderDashOffset?: Scriptable, drawTime?: Scriptable, endValue?: Scriptable, @@ -31,6 +40,7 @@ export interface CoreAnnotationOptions extends AnnotationEvents { value?: Scriptable, xScaleID?: Scriptable, yScaleID?: Scriptable, + yPadding?: Scriptable } export type Scriptable = T | ((ctx: TContext, options: AnnotationOptions) => T); @@ -42,34 +52,113 @@ interface AnnotationCoordinates { yMin?: Scriptable, } +interface AnnotationPointCoordinates extends AnnotationCoordinates { + xValue?: Scriptable, + yValue?: Scriptable, +} + +export interface ArrowHeadOptions extends ShadowOptions { + backgroundColor?: Scriptable, + borderColor?: Scriptable, + borderDash?: Scriptable, + borderDashOffset?: Scriptable, + borderWidth?: Scriptable, + enabled?: Scriptable, + fill?: Scriptable, + length?: Scriptable, + width?: Scriptable, +} + +export interface ArrowHeadsOptions extends ArrowHeadOptions{ + end?: ArrowHeadOptions, + start?: ArrowHeadOptions, +} + export interface LineAnnotationOptions extends CoreAnnotationOptions, AnnotationCoordinates { + arrowHeads?: ArrowHeadsOptions, label?: LabelOptions } export interface BoxAnnotationOptions extends CoreAnnotationOptions, AnnotationCoordinates { backgroundColor?: Scriptable, - borderRadius?: Scriptable, + /** + * Border line cap style. See MDN. + * @default 'butt' + */ + borderCapStyle?: Scriptable, + /** + * Border line dash. See MDN. + * @default [] + */ + borderDash?: Scriptable, + /** + * Border line dash offset. See MDN. + * @default 0.0 + */ + borderDashOffset?: Scriptable, + /** + * Border line join style. See MDN. + * @default 'miter' + */ + borderJoinStyle?: Scriptable, + borderRadius?: Scriptable, /** * @deprecated replaced by borderRadius * @todo remove at v2 */ - cornerRadius?: Scriptable + cornerRadius?: Scriptable, + label?: BoxLabelOptions } -interface EllipseAnnotationOptions extends CoreAnnotationOptions, AnnotationCoordinates { +export interface EllipseAnnotationOptions extends CoreAnnotationOptions, AnnotationCoordinates { backgroundColor?: Scriptable, + rotation?: Scriptable +} + +export interface PointAnnotationOptions extends CoreAnnotationOptions, AnnotationPointCoordinates { + backgroundColor: Scriptable, + pointStyle?: Scriptable, + radius?: Scriptable, + rotation?: Scriptable, + xAdjust?: Scriptable, + yAdjust?: Scriptable, +} + +export type CalloutPosition = 'left' | 'top' | 'bottom' | 'right' | 'auto'; + +export interface CalloutOptions { + borderCapStyle?: Scriptable, + borderColor?: Scriptable, + borderDash?: Scriptable, + borderDashOffset?: Scriptable, + borderJoinStyle?: Scriptable, + borderWidth?: Scriptable, + enabled?: Scriptable, + margin?: Scriptable, + position?: Scriptable, + side?: Scriptable, + start?: Scriptable, +} + +export interface LabelAnnotationOptions extends CoreAnnotationOptions, LabelTypeOptions, AnnotationPointCoordinates { + callout?: CalloutOptions; } -interface PointAnnotationOptions extends CoreAnnotationOptions { +interface PolygonAnnotationOptions extends CoreAnnotationOptions, AnnotationPointCoordinates { backgroundColor: Scriptable, + borderCapStyle?: Scriptable, + borderJoinStyle?: Scriptable, radius?: Scriptable, - xValue?: Scriptable; - yValue?: Scriptable; + rotation?: Scriptable, + sides?: Scriptable, + xAdjust?: Scriptable, + yAdjust?: Scriptable, } export interface AnnotationPluginOptions extends AnnotationEvents { annotations: AnnotationOptions[] | Record, + clip?: boolean, dblClickSpeed?: Scriptable, drawTime?: Scriptable, - animations: Record, + animations?: Record, } diff --git a/types/tests/exports.ts b/types/tests/exports.ts index 69c42ac59..726ef6257 100644 --- a/types/tests/exports.ts +++ b/types/tests/exports.ts @@ -15,6 +15,7 @@ const chart = new Chart('id', { options: { plugins: { annotation: { + clip: false, annotations: [{ type: 'line', label: {

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 literal 13702 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 diff --git a/test/fixtures/line/positionPercent.js b/test/fixtures/line/positionPercent.js new file mode 100644 index 000000000..91220893e --- /dev/null +++ b/test/fixtures/line/positionPercent.js @@ -0,0 +1,171 @@ +module.exports = { + config: { + type: 'scatter', + options: { + scales: { + x: { + display: true, + min: 0, + max: 100 + }, + y: { + display: true, + min: 0, + max: 100 + } + }, + plugins: { + annotation: { + annotations: { + l0: { + type: 'line', + scaleID: 'y', + value: 0, + borderColor: 'black', + borderWidth: 5, + label: { + position: '0%', + backgroundColor: 'black', + content: '0%', + enabled: true + } + }, + l1: { + type: 'line', + scaleID: 'y', + value: 10, + borderColor: 'black', + borderWidth: 5, + label: { + position: '10%', + backgroundColor: 'black', + content: '10%', + enabled: true + } + }, + l2: { + type: 'line', + scaleID: 'y', + value: 20, + borderColor: 'black', + borderWidth: 5, + label: { + position: '20%', + backgroundColor: 'black', + content: '20%', + enabled: true + } + }, + l3: { + type: 'line', + scaleID: 'y', + value: 30, + borderColor: 'black', + borderWidth: 5, + label: { + position: '30%', + backgroundColor: 'black', + content: '30%', + enabled: true + } + }, + l4: { + type: 'line', + scaleID: 'y', + value: 40, + borderColor: 'black', + borderWidth: 5, + label: { + position: '40%', + backgroundColor: 'black', + content: '40%', + enabled: true + } + }, + l5: { + type: 'line', + scaleID: 'y', + value: 50, + borderColor: 'black', + borderWidth: 5, + label: { + position: '50%', + backgroundColor: 'black', + content: '50%', + enabled: true + } + }, + l6: { + type: 'line', + scaleID: 'y', + value: 60, + borderColor: 'black', + borderWidth: 5, + label: { + position: '60%', + backgroundColor: 'black', + content: '60%', + enabled: true + } + }, + l7: { + type: 'line', + scaleID: 'y', + value: 70, + borderColor: 'black', + borderWidth: 5, + label: { + position: '70%', + backgroundColor: 'black', + content: '70%', + enabled: true + } + }, + l8: { + type: 'line', + scaleID: 'y', + value: 80, + borderColor: 'black', + borderWidth: 5, + label: { + position: '80%', + backgroundColor: 'black', + content: '80%', + enabled: true + } + }, + l9: { + type: 'line', + scaleID: 'y', + value: 90, + borderColor: 'black', + borderWidth: 5, + label: { + position: '90%', + backgroundColor: 'black', + content: '90%', + enabled: true + } + }, + l10: { + type: 'line', + scaleID: 'y', + value: 100, + borderColor: 'black', + borderWidth: 5, + label: { + position: '100%', + backgroundColor: 'black', + content: '100%', + enabled: true + } + }, + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/line/positionPercent.png b/test/fixtures/line/positionPercent.png new file mode 100644 index 0000000000000000000000000000000000000000..e25fb5d11e6d0c4cf1762feda34b3c79d8d426c0 GIT binary patch literal 34127 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
Hz9jqw?~_1X60;Zq<`~8|z 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/line/rotation.js b/test/fixtures/line/rotation.js index d217fefba..31168f584 100644 --- a/test/fixtures/line/rotation.js +++ b/test/fixtures/line/rotation.js @@ -16,7 +16,6 @@ module.exports = { }, plugins: { annotation: { - drawTime: 'afterDatasetsDraw', annotations: { auto1: { type: 'line', @@ -35,8 +34,6 @@ module.exports = { }, auto2: { type: 'line', - xScaleID: 'x', - yScaleID: 'y', xMin: 90, yMin: 10, xMax: 80, @@ -52,8 +49,6 @@ module.exports = { }, auto3: { type: 'line', - xScaleID: 'x', - yScaleID: 'y', xMin: 30, yMin: 80, xMax: 60, @@ -69,8 +64,6 @@ module.exports = { }, auto4: { type: 'line', - xScaleID: 'x', - yScaleID: 'y', xMin: 65, yMin: 70, xMax: 70, @@ -86,8 +79,6 @@ module.exports = { }, man1: { type: 'line', - xScaleID: 'x', - yScaleID: 'y', xMin: 10, yMin: 60, xMax: 30, @@ -103,8 +94,6 @@ module.exports = { }, man2: { type: 'line', - xScaleID: 'x', - yScaleID: 'y', xMin: 10, yMin: 30, xMax: 40, diff --git a/test/fixtures/line/rotation.png b/test/fixtures/line/rotation.png index 704a19c8b99cde038e8d9f4d1a43aa397e57f3d3..4d026932fbf2f67619b01f722b2b2bcf783f352c 100644 GIT binary patch literal 40095 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

$Zlr2?5tb(4+~*#!HtL=k`| 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 10, + side: () => 10, + start: () => '80%', + borderColor: () => 'green', + borderWidth: () => 2, + borderDash: () => [1], + borderDashOffset: () => 0, + } + }, + point1: { + type: 'point', + xValue: 'February', + yValue: 10, + radius: () => 10, + backgroundColor: () => 'green', + borderColor: () => 'black', + borderWidth: () => 1, + borderDash: () => [1], + borderDashOffset: () => 0 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/label/calloutScriptableOptions.png b/test/fixtures/label/calloutScriptableOptions.png new file mode 100644 index 0000000000000000000000000000000000000000..c0f1f73827ad1510d30ab0240258f71a1a730fee GIT binary patch literal 21396 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 VQ_oL+27v#LAGJ7AblC02{{z@Ip#cB@ literal 0 HcmV?d00001 diff --git a/test/fixtures/label/calloutSizing.js b/test/fixtures/label/calloutSizing.js new file mode 100644 index 000000000..684d5086c --- /dev/null +++ b/test/fixtures/label/calloutSizing.js @@ -0,0 +1,207 @@ +module.exports = { + tolerance: 0.0075, + config: { + type: 'bar', + options: { + scales: { + x: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + }, + y: { + display: true, + min: 0, + max: 25 + } + }, + plugins: { + annotation: { + annotations: { + margin10: { + type: 'label', + xValue: 2.5, + yValue: 20, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 3, + content: ['position: right', 'margin: 10'], + position: { + x: 'end', + y: 'center' + }, + xAdjust: -50, + yAdjust: -50, + callout: { + enabled: true, + margin: 10, + position: 'right', + } + }, + pointMargin10: { + type: 'point', + xValue: 2.5, + yValue: 20, + radius: 3 + }, + noMargin: { + type: 'label', + xValue: 'May', + yValue: 24, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 4, + content: ['position: left', 'margin: 0'], + position: { + x: 'start', + y: 'center' + }, + xAdjust: 50, + yAdjust: 50, + callout: { + enabled: true, + margin: 0, + position: 'left', + } + }, + pointNoMargin: { + type: 'point', + xValue: 'May', + yValue: 24, + radius: 3 + }, + side20: { + type: 'label', + xValue: 2.5, + yValue: 12.5, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: ['position: bottom', 'side: 20', 'start: 10%'], + position: { + x: 'end', + y: 'center' + }, + xAdjust: -50, + yAdjust: -50, + callout: { + enabled: true, + start: '10%', + side: 20, + position: 'bottom', + } + }, + pointSide20: { + type: 'point', + xValue: 2.5, + yValue: 12.5, + radius: 3 + }, + topSide20: { + type: 'label', + xValue: 'May', + yValue: 15, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: ['position: top', 'side: 20', 'start: 80'], + position: { + x: 'start', + y: 'center' + }, + xAdjust: 50, + yAdjust: 50, + callout: { + enabled: true, + start: 80, + side: 20, + position: 'top', + } + }, + pointTopSide20: { + type: 'point', + xValue: 'May', + yValue: 15, + radius: 3 + }, + start10Perc: { + type: 'label', + xValue: 2.5, + yValue: 6, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: 'position: bottom, start: 10%', + position: { + x: 'end', + y: 'center' + }, + xAdjust: -20, + yAdjust: -40, + callout: { + enabled: true, + start: '10%', + position: 'bottom' + } + }, + pointStart10Perc: { + type: 'point', + xValue: 2.5, + yValue: 6, + radius: 3 + }, + start80: { + type: 'label', + xValue: 3.5, + yValue: 7, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: 'position: top, start: 40', + position: { + x: 'start', + y: 'center' + }, + xAdjust: 20, + yAdjust: 50, + callout: { + enabled: true, + start: 40, + position: 'top' + } + }, + pointStart80: { + type: 'point', + xValue: 3.5, + yValue: 7, + radius: 3 + }, + startInvalid: { + type: 'label', + xValue: 'April', + yValue: 5, + backgroundColor: 'rgba(33, 101, 171, 0.5)', + borderColor: 'rgb(33, 101, 171)', + borderWidth: 1, + content: 'position: auto, start invalid', + position: 'center', + xAdjust: -70, + yAdjust: 70, + callout: { + enabled: true, + start: 'invalid' + } + }, + pointStartInvalid: { + type: 'point', + xValue: 'April', + yValue: 5, + radius: 3 + } + } + } + } + } + }, + options: { + spriteText: true + } +}; diff --git a/test/fixtures/label/calloutSizing.png b/test/fixtures/label/calloutSizing.png new file mode 100644 index 0000000000000000000000000000000000000000..167ce2e702a605af7cc48ed122cca73c54ad1cde GIT binary patch literal 41064 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