nfTlWNl rn Ѻq$³*ɞAw@?7 ~ CѶf'މb1ʖOkMkd*_#1Iķխ}`<<@m1OGHc/>T|lu"gs|ү:KOӮ%c_qGĄ'I^ÿڼZ0táImV}5pn_ Eƨ)Hy6/K$_쵦(%1yFV|Os?>_+ࠐ7AlI1P/;m^okEc+oWj63/冟{1 nL\|HUX;yϒLLm",(>RR @5pn_ Eƨ88+wgaX20owC}OVCvC0.9oW_8,ӞX*Ջsqʽ]Fy}t%3-Q[|tMi r䛠t5!$yL4SnnO<[ɿarE9vp/e$/kx(۲#q`d|ԧԠTcZx51Ej~s!.9T>/MGU\F}1ϋZKw c[s?R-.ވMX+w9`Qhgal%WS/Ɨ&,ef-z )!MBḒoA#Zs+, *5r&@,JL\3IFY]5pn_ Eƨ(\MVs.}20o$q]5#AAdL RW@E *1jP)v>[ܞEjJ(mYvn4zkpAx$.ʸ?-C PETmP IDZU$rL!~ڼDn~HmQ/r4:u7ɤR@M!@[(/B5-^!E{[zsȳ>HVV BN;*Ԯ1I,pNnXKWt%3-k_F/Z&|PQn?ZW \8M+N4f3b(۲#q`d|ԧ,B?Z;UfMSK.!єA5Eo8uŶMp( (oWGOS$5$ʤC=|Jf>@5sv!5"w%QQT/ҫD#7Jw~Te,hᚻF~ r䛠t5!R7{|g>p+p +6oM ,g8v $#[6LEHi1Eo8uŶMp(jVÉ;h4ltT`s<|$E#ȓ;7ѡ0m+cAvءp$&CZohq Ӣ" yuigVpuPFlif "xw{QUbi=q ǐ+[`oncuec9sy?}a@-(۲#q`d|ԧ(/i2ɳ[_!бaƋf}O:(۲#q`d|ԧvR^R#mDK,Wd{M0"f [*jC[g{/n',ؤEy*藯ƭ5yԒ;&7vK]MYmDK,Wd{M0"f [nF2>RW#Q_ ^;*F.bi=q ǐˡB1^$V (AP5g[3. ۔ȧ~j g-c}Rk(۲#q`d|ԧM nsdA1?w!h Rr$ua s!vڽV[ o$fnDzAEzRݡahxTVJ/ xRb9^mOs 5-X pX7<&;SWydt~$wM)pY4#\@=ͱSe,dwuZQy`cKգ)`)U0&ӏ(Pχ]}I[Su6c &b'>b?1& tفb}-xvC "Fpx9ofHz3X~@i"'{3Ξ S9d*ia1*Xʶf?&[Ců@Іc7u]PH%迚)Q\oM(07nԞB;.>5;BTqPY(M}QUV1g3tkQ%=Y|ߋ/R&1l Q čq v4']^ Vۊ@YFE5֕|TvP}3| S,Ycp>7h'B3I\dYo\/X?bb!u5Ě3_s'2 &q.'N<շԚKۻʽC)LKY9ڬKlX8NIJrO e5Ҹ[_LR3aQ@%Ϝ: ci:9rp PSUpb@-v`կSΈwh(Z[L,(Tg|3/y[K iZ Os"저n9S]Yb]u'+/* ~N31 Ŏ6t;m-Zިjkfk˹:.]&z;o#j8SX:+0Y" i0*̭MTD p~P=W'PY1>bVޛơ+|vB:&z;o#j8SX:+0?we:l{Bs~:9`k#~P=W'PY1}/g=ۮc^oy5yɷa~g(OD=l|w_ mc-zI `ǪV|KL4j=Hog#:@S5)݇9?,$}]g=;.Ӱ#T,^ cS;bw "<[EN5崧PQ@W8Da]7؀|]<YF JWdN (X^ž?50%(`\ŰWW 嵋&ǹ.4S geQ9K|t<" nfa^^g 0ZF{/uW~ #z[ {HPlw5 P,XN%ѷ3`=/C!6n\ 3cbd~VDZ?UܶQ=:W>4qCAqiDW??cֽRא5cՏ^VND YX}bJ5h HMQXD@/;ϻ68ZΈE`Q?Worksheet $worksheet = null) { $this->worksheet = $worksheet; return $this; } public function getTitle(): ?Title { return $this->title; } /** * Set Title. * * @return $this */ public function setTitle(Title $title) { $this->title = $title; return $this; } public function getLegend(): ?Legend { return $this->legend; } /** * Set Legend. * * @return $this */ public function setLegend(Legend $legend) { $this->legend = $legend; return $this; } public function getXAxisLabel(): ?Title { return $this->xAxisLabel; } /** * Set X-Axis Label. * * @return $this */ public function setXAxisLabel(Title $label) { $this->xAxisLabel = $label; return $this; } public function getYAxisLabel(): ?Title { return $this->yAxisLabel; } /** * Set Y-Axis Label. * * @return $this */ public function setYAxisLabel(Title $label) { $this->yAxisLabel = $label; return $this; } public function getPlotArea(): ?PlotArea { return $this->plotArea; } /** * Set Plot Area. */ public function setPlotArea(PlotArea $plotArea): self { $this->plotArea = $plotArea; return $this; } /** * Get Plot Visible Only. * * @return bool */ public function getPlotVisibleOnly() { return $this->plotVisibleOnly; } /** * Set Plot Visible Only. * * @param bool $plotVisibleOnly * * @return $this */ public function setPlotVisibleOnly($plotVisibleOnly) { $this->plotVisibleOnly = $plotVisibleOnly; return $this; } /** * Get Display Blanks as. * * @return string */ public function getDisplayBlanksAs() { return $this->displayBlanksAs; } /** * Set Display Blanks as. * * @param string $displayBlanksAs * * @return $this */ public function setDisplayBlanksAs($displayBlanksAs) { $this->displayBlanksAs = $displayBlanksAs; return $this; } public function getChartAxisY(): Axis { return $this->yAxis; } /** * Set yAxis. */ public function setChartAxisY(?Axis $axis): self { $this->yAxis = $axis ?? new Axis(); return $this; } public function getChartAxisX(): Axis { return $this->xAxis; } /** * Set xAxis. */ public function setChartAxisX(?Axis $axis): self { $this->xAxis = $axis ?? new Axis(); return $this; } /** * Get Major Gridlines. * * @deprecated 1.24.0 Use Axis->getMajorGridlines() * @see Axis::getMajorGridlines() * * @codeCoverageIgnore */ public function getMajorGridlines(): ?GridLines { return $this->yAxis->getMajorGridLines(); } /** * Get Minor Gridlines. * * @deprecated 1.24.0 Use Axis->getMinorGridlines() * @see Axis::getMinorGridlines() * * @codeCoverageIgnore */ public function getMinorGridlines(): ?GridLines { return $this->yAxis->getMinorGridLines(); } /** * Set the Top Left position for the chart. * * @param string $cellAddress * @param int $xOffset * @param int $yOffset * * @return $this */ public function setTopLeftPosition($cellAddress, $xOffset = null, $yOffset = null) { $this->topLeftCellRef = $cellAddress; if ($xOffset !== null) { $this->setTopLeftXOffset($xOffset); } if ($yOffset !== null) { $this->setTopLeftYOffset($yOffset); } return $this; } /** * Get the top left position of the chart. * * Returns ['cell' => string cell address, 'xOffset' => int, 'yOffset' => int]. * * @return array{cell: string, xOffset: int, yOffset: int} an associative array containing the cell address, X-Offset and Y-Offset from the top left of that cell */ public function getTopLeftPosition(): array { return [ 'cell' => $this->topLeftCellRef, 'xOffset' => $this->topLeftXOffset, 'yOffset' => $this->topLeftYOffset, ]; } /** * Get the cell address where the top left of the chart is fixed. * * @return string */ public function getTopLeftCell() { return $this->topLeftCellRef; } /** * Set the Top Left cell position for the chart. * * @param string $cellAddress * * @return $this */ public function setTopLeftCell($cellAddress) { $this->topLeftCellRef = $cellAddress; return $this; } /** * Set the offset position within the Top Left cell for the chart. * * @param ?int $xOffset * @param ?int $yOffset * * @return $this */ public function setTopLeftOffset($xOffset, $yOffset) { if ($xOffset !== null) { $this->setTopLeftXOffset($xOffset); } if ($yOffset !== null) { $this->setTopLeftYOffset($yOffset); } return $this; } /** * Get the offset position within the Top Left cell for the chart. * * @return int[] */ public function getTopLeftOffset() { return [ 'X' => $this->topLeftXOffset, 'Y' => $this->topLeftYOffset, ]; } /** * @param int $xOffset * * @return $this */ public function setTopLeftXOffset($xOffset) { $this->topLeftXOffset = $xOffset; return $this; } public function getTopLeftXOffset(): int { return $this->topLeftXOffset; } /** * @param int $yOffset * * @return $this */ public function setTopLeftYOffset($yOffset) { $this->topLeftYOffset = $yOffset; return $this; } public function getTopLeftYOffset(): int { return $this->topLeftYOffset; } /** * Set the Bottom Right position of the chart. * * @param string $cellAddress * @param int $xOffset * @param int $yOffset * * @return $this */ public function setBottomRightPosition($cellAddress = '', $xOffset = null, $yOffset = null) { $this->bottomRightCellRef = $cellAddress; if ($xOffset !== null) { $this->setBottomRightXOffset($xOffset); } if ($yOffset !== null) { $this->setBottomRightYOffset($yOffset); } return $this; } /** * Get the bottom right position of the chart. * * @return array an associative array containing the cell address, X-Offset and Y-Offset from the top left of that cell */ public function getBottomRightPosition() { return [ 'cell' => $this->bottomRightCellRef, 'xOffset' => $this->bottomRightXOffset, 'yOffset' => $this->bottomRightYOffset, ]; } /** * Set the Bottom Right cell for the chart. * * @return $this */ public function setBottomRightCell(string $cellAddress = '') { $this->bottomRightCellRef = $cellAddress; return $this; } /** * Get the cell address where the bottom right of the chart is fixed. */ public function getBottomRightCell(): string { return $this->bottomRightCellRef; } /** * Set the offset position within the Bottom Right cell for the chart. * * @param ?int $xOffset * @param ?int $yOffset * * @return $this */ public function setBottomRightOffset($xOffset, $yOffset) { if ($xOffset !== null) { $this->setBottomRightXOffset($xOffset); } if ($yOffset !== null) { $this->setBottomRightYOffset($yOffset); } return $this; } /** * Get the offset position within the Bottom Right cell for the chart. * * @return int[] */ public function getBottomRightOffset() { return [ 'X' => $this->bottomRightXOffset, 'Y' => $this->bottomRightYOffset, ]; } /** * @param int $xOffset * * @return $this */ public function setBottomRightXOffset($xOffset) { $this->bottomRightXOffset = $xOffset; return $this; } public function getBottomRightXOffset(): int { return $this->bottomRightXOffset; } /** * @param int $yOffset * * @return $this */ public function setBottomRightYOffset($yOffset) { $this->bottomRightYOffset = $yOffset; return $this; } public function getBottomRightYOffset(): int { return $this->bottomRightYOffset; } public function refresh(): void { if ($this->worksheet !== null && $this->plotArea !== null) { $this->plotArea->refresh($this->worksheet); } } /** * Render the chart to given file (or stream). * * @param string $outputDestination Name of the file render to * * @return bool true on success */ public function render($outputDestination = null) { if ($outputDestination == 'php://output') { $outputDestination = null; } $libraryName = Settings::getChartRenderer(); if ($libraryName === null) { return false; } // Ensure that data series values are up-to-date before we render $this->refresh(); $renderer = new $libraryName($this); return $renderer->render($outputDestination); // @phpstan-ignore-line } public function getRotX(): ?int { return $this->rotX; } public function setRotX(?int $rotX): self { $this->rotX = $rotX; return $this; } public function getRotY(): ?int { return $this->rotY; } public function setRotY(?int $rotY): self { $this->rotY = $rotY; return $this; } public function getRAngAx(): ?int { return $this->rAngAx; } public function setRAngAx(?int $rAngAx): self { $this->rAngAx = $rAngAx; return $this; } public function getPerspective(): ?int { return $this->perspective; } public function setPerspective(?int $perspective): self { $this->perspective = $perspective; return $this; } public function getOneCellAnchor(): bool { return $this->oneCellAnchor; } public function setOneCellAnchor(bool $oneCellAnchor): self { $this->oneCellAnchor = $oneCellAnchor; return $this; } public function getAutoTitleDeleted(): bool { return $this->autoTitleDeleted; } public function setAutoTitleDeleted(bool $autoTitleDeleted): self { $this->autoTitleDeleted = $autoTitleDeleted; return $this; } public function getNoFill(): bool { return $this->noFill; } public function setNoFill(bool $noFill): self { $this->noFill = $noFill; return $this; } public function getRoundedCorners(): bool { return $this->roundedCorners; } public function setRoundedCorners(?bool $roundedCorners): self { if ($roundedCorners !== null) { $this->roundedCorners = $roundedCorners; } return $this; } public function getBorderLines(): GridLines { return $this->borderLines; } public function setBorderLines(GridLines $borderLines): self { $this->borderLines = $borderLines; return $this; } public function getFillColor(): ChartColor { return $this->fillColor; } }