-
Notifications
You must be signed in to change notification settings - Fork 356
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Problems with axes with custom font size + Discrepancies in font rendering across browsers #3889
Comments
Hi @m-gallesio,
As your examination, after evaluating each axes tick text dimension, will get memoized for performance issue. Probably providing an option to let user can control the way to evaluate text dimension will solve the issue.
Tested on below browser with the example you provided, and each browser evaluated differently the text dimension.
|
Implement axis text's size evaluation option Ref naver#3889
# [3.14.0-next.1](3.13.0...3.14.0-next.1) (2024-10-11) ### Bug Fixes * **api:** Fix to return indexed categories ([55c17c6](55c17c6)), closes [#3365](#3365) * **axis:** fix error when showing tick only ([705947f](705947f)), closes [#3881](#3881) * **bar:** Fix stacking bar position on multiple xs ([216da62](216da62)), closes [#3372](#3372) * **candlestick:** Fix rendering on rotated axis ([17f5058](17f5058)), closes [#3387](#3387) * **clip:** Fix x axis hide on title.bottom ([beec1bb](beec1bb)), closes [#3364](#3364) * **event:** Fix interaction with viewBox ([243bf3c](243bf3c)), closes [#3414](#3414) * **input:** Fix touch/mouse input detection ([3d4392a](3d4392a)), closes [#3854](#3854) * **option:** Fix inconsistency of padding ([0c1ce81](0c1ce81)), closes [#3426](#3426) * **shape:** Fix circleY() undefined error ([f4ac3f1](f4ac3f1)), closes [#3388](#3388) * **size:** Fix legend overflows with padding fit mode ([8357d11](8357d11)), closes [#3872](#3872) * **subchart, zoom:** Fix returning domain value ([90338ec](90338ec)), closes [#3347](#3347) * **subchart:** Fix handlebar position ([b897cbb](b897cbb)), closes [#3358](#3358) * **title:** fix title text center align ([b254a61](b254a61)), closes [#3363](#3363) * **tooltip:** Fix tooltip.format.value call ([f7d587d](f7d587d)), closes [#3371](#3371) * **tooltip:** Fix tootip display on tooltip.init ([98e6f8b](98e6f8b)), closes [#3369](#3369) * **zoom:** Fix unzoom after dynamic data load ([385907e](385907e)), closes [#3878](#3878) ### Features * **api:** Intent to ship subchart method ([976f04a](976f04a)), closes [#3342](#3342) * **axis:** Intent to ship axis.evalTextSize ([87048e9](87048e9)), closes [#3889](#3889) * **interaction:** Intent to ship interaction.onout ([9c668e6](9c668e6)), closes [#3887](#3887) * **module:** Support dual CJS/ESM package ([437c007](437c007)), closes [#2202](#2202) * **plugin:** Intent to ship TableView plugin ([215b611](215b611)), closes [#1873](#1873) * **regions:** Intent to ship regions.label ([b4e3bc2](b4e3bc2)), closes [#3319](#3319) * **render:** Add forced init option on lazy rendering ([218ce46](218ce46)), closes [#3106](#3106) * **resize:** Intent to ship resize.auto='viewBox' ([db21387](db21387)), closes [#3893](#3893)
# [3.14.0](3.13.0...3.14.0) (2024-10-25) ### Bug Fixes * **axis:** fix error when showing tick only ([705947f](705947f)), closes [#3881](#3881) * **bar:** fix representation of radius for small data ([91b5dca](91b5dca)), closes [#3903](#3903) * **event:** Fix interaction with viewBox ([243bf3c](243bf3c)), closes [#3414](#3414) * **input:** Fix touch/mouse input detection ([3d4392a](3d4392a)), closes [#3854](#3854) * **point:** fix sensitivity error when blank area is clicked ([0060786](0060786)), closes [#3900](#3900) * **scale:** Fix non-shape's element positioned accurately ([216141b](216141b)), closes [#3907](#3907) * **size:** Fix legend overflows with padding fit mode ([8357d11](8357d11)), closes [#3872](#3872) * **zoom:** Fix unzoom after dynamic data load ([385907e](385907e)), closes [#3878](#3878) * **zoom:** Prevent error for out of range ([6f69e97](6f69e97)), closes [#3895](#3895) ### Features * **axis:** Intent to ship axis.evalTextSize ([87048e9](87048e9)), closes [#3889](#3889) * **interaction:** Intent to ship interaction.onout ([9c668e6](9c668e6)), closes [#3887](#3887) * **legend:** Pass visibility state to legend item's event callback ([ba71911](ba71911)), closes [#3897](#3897) * **render:** Add forced init option on lazy rendering ([218ce46](218ce46)), closes [#3106](#3106) * **resize:** Intent to ship resize.auto='viewBox' ([db21387](db21387)), closes [#3893](#3893)
 <h3>Snyk has created this PR to upgrade billboard.js from 3.14.0 to 3.14.2.</h3> :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project. <hr/> - The recommended version is **2 versions** ahead of your current version. - The recommended version was released on **21 days ago**. <details> <summary><b>Release notes</b></summary> <br/> <details> <summary>Package name: <b>billboard.js</b></summary> <ul> <li> <b>3.14.2</b> - <a href="https://redirect.github.com/naver/billboard.js/releases/tag/3.14.2">2024-11-26</a></br><h2><a href="https://redirect.github.com/naver/billboard.js/compare/3.14.1...3.14.2">3.14.2</a> (2024-11-26)</h2> <h3>Bug Fixes</h3> <ul> <li><strong>axis:</strong> Fix x axis extent to work (<a href="https://redirect.github.com/naver/billboard.js/commit/4d738348ee5c189274d277ce07bd31d626de303d">4d73834</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3768" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3768/hovercard">gitkraken#3768</a></li> <li><strong>tooltip:</strong> Fix tooltip position on viewBox resizing (<a href="https://redirect.github.com/naver/billboard.js/commit/582feb46500a2eaf337a83f225dcebcc4d9317e9">582feb4</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3917" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3917/hovercard">gitkraken#3917</a></li> </ul> </li> <li> <b>3.14.1</b> - <a href="https://redirect.github.com/naver/billboard.js/releases/tag/3.14.1">2024-11-18</a></br><h2><a href="https://redirect.github.com/naver/billboard.js/compare/3.14.0...3.14.1">3.14.1</a> (2024-11-18)</h2> <h3>Bug Fixes</h3> <ul> <li><strong>point:</strong> fix data.onclick working with sensitivity function (<a href="https://redirect.github.com/naver/billboard.js/commit/587d71e9b413d5abd2265a3fb13c3c09914fca80">587d71e</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3912" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3912/hovercard">gitkraken#3912</a></li> <li><strong>tooltip:</strong> Hide tooltip on redraw when unexpected error (<a href="https://redirect.github.com/naver/billboard.js/commit/35406406962c89bac0503800771d96ba2f47f56d">3540640</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3909" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3909/hovercard">gitkraken#3909</a> <a href="https://redirect.github.com/naver/billboard.js/issues/3910" data-hovercard-type="pull_request" data-hovercard-url="/naver/billboard.js/pull/3910/hovercard">gitkraken#3910</a></li> </ul> </li> <li> <b>3.14.0</b> - <a href="https://redirect.github.com/naver/billboard.js/releases/tag/3.14.0">2024-10-25</a></br><h1><a href="https://redirect.github.com/naver/billboard.js/compare/3.13.0...3.14.0">3.14.0</a> (2024-10-25)</h1> <p>The detailed new feature description can be found at:</p> <blockquote> <p><a href="https://netil.medium.com/billboard-js-3-14-release-viewbox-resizing-e1cb90ee0697" rel="nofollow">billboard.js 3.14 release: viewBox resizing!</a> (<a href="https://dev.to/netil/billboardjs-314-release-viewbox-resizing-p6e" rel="nofollow">dev.to link</a>)</p> </blockquote> <h3>Bug Fixes</h3> <ul> <li><strong>axis:</strong> fix error when showing tick only (<a href="https://redirect.github.com/naver/billboard.js/commit/705947f635807e359c5c2f869a7d906e2315a01a">705947f</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3881" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3881/hovercard">gitkraken#3881</a></li> <li><strong>bar:</strong> fix representation of radius for small data (<a href="https://redirect.github.com/naver/billboard.js/commit/91b5dca91a86779b0c808e3498d85dcb93ab5f0e">91b5dca</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3903" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3903/hovercard">gitkraken#3903</a></li> <li><strong>event:</strong> Fix interaction with viewBox (<a href="https://redirect.github.com/naver/billboard.js/commit/243bf3cf10a7d3b4b0f668240168e4b2d9ba1eba">243bf3c</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3414" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3414/hovercard">gitkraken#3414</a></li> <li><strong>input:</strong> Fix touch/mouse input detection (<a href="https://redirect.github.com/naver/billboard.js/commit/3d4392ac51dca1947c6380329f7c6a6e0b3a497a">3d4392a</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3854" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3854/hovercard">#3854</a></li> <li><strong>point:</strong> fix sensitivity error when blank area is clicked (<a href="https://redirect.github.com/naver/billboard.js/commit/00607861a96826b2e1c9fec37159065680ff278e">0060786</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3900" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3900/hovercard">#3900</a></li> <li><strong>scale:</strong> Fix non-shape's element positioned accurately (<a href="https://redirect.github.com/naver/billboard.js/commit/216141bd6a415752fbb31ba3016188b20401f5b0">216141b</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3907" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3907/hovercard">#3907</a></li> <li><strong>size:</strong> Fix legend overflows with padding fit mode (<a href="https://redirect.github.com/naver/billboard.js/commit/8357d1161fa132a6d788c1349dee1f7e99eedf39">8357d11</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3872" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3872/hovercard">gitkraken#3872</a></li> <li><strong>zoom:</strong> Fix unzoom after dynamic data load (<a href="https://redirect.github.com/naver/billboard.js/commit/385907e5cbab1af52b63f9a2987a302d479fe332">385907e</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3878" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3878/hovercard">gitkraken#3878</a></li> <li><strong>zoom:</strong> Prevent error for out of range (<a href="https://redirect.github.com/naver/billboard.js/commit/6f69e970bd31fdd9d353854c54437c2a9c95e269">6f69e97</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3895" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3895/hovercard">gitkraken#3895</a></li> </ul> <h3>Features</h3> <ul> <li><strong>axis:</strong> Intent to ship axis.evalTextSize (<a href="https://redirect.github.com/naver/billboard.js/commit/87048e9258d521ffb4da7b98a167e184fe3489a3">87048e9</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3889" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3889/hovercard">gitkraken#3889</a></li> <li><strong>interaction:</strong> Intent to ship interaction.onout (<a href="https://redirect.github.com/naver/billboard.js/commit/9c668e688624e0003d6dca6ea00fcf79a3f1b782">9c668e6</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3887" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3887/hovercard">gitkraken#3887</a></li> <li><strong>legend:</strong> Pass visibility state to legend item's event callback (<a href="https://redirect.github.com/naver/billboard.js/commit/ba71911b7c4b47b95f0b1e2bf8f12138d5b31cb1">ba71911</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3897" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3897/hovercard">gitkraken#3897</a></li> <li><strong>render:</strong> Add forced init option on lazy rendering (<a href="https://redirect.github.com/naver/billboard.js/commit/218ce4608dd7da7a5288bce1c6f95d71d8aa9c5f">218ce46</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3106" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3106/hovercard">gitkraken#3106</a></li> <li><strong>resize:</strong> Intent to ship resize.auto='viewBox' (<a href="https://redirect.github.com/naver/billboard.js/commit/db213873e2959b7c24c44f1330ec86af801406e8">db21387</a>), closes <a href="https://redirect.github.com/naver/billboard.js/issues/3893" data-hovercard-type="issue" data-hovercard-url="/naver/billboard.js/issues/3893/hovercard">gitkraken#3893</a></li> </ul> </li> </ul> from <a href="https://redirect.github.com/naver/billboard.js/releases">billboard.js GitHub release notes</a> </details> </details> --- > [!IMPORTANT] > > - Check the changes in this PR to ensure they won't cause issues with your project. > - This PR was automatically created by Snyk using the credentials of a real user. --- **Note:** _You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs._ **For more information:** <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiJkY2EwZTViMC1mNjdhLTQwZDMtODQwOS05ZDMxYWU5ZDY4YzkiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6ImRjYTBlNWIwLWY2N2EtNDBkMy04NDA5LTlkMzFhZTlkNjhjOSJ9fQ==" width="0" height="0"/> > - 🧐 [View latest project report](https://app.snyk.io/org/newkdr/project/12a8a5f5-3e19-438c-8280-eb8f4ee06d17?utm_source=github&utm_medium=referral&page=upgrade-pr) > - 📜 [Customise PR templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates?utm_source=&utm_content=fix-pr-template) > - 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/newkdr/project/12a8a5f5-3e19-438c-8280-eb8f4ee06d17/settings/integration?utm_source=github&utm_medium=referral&page=upgrade-pr) > - 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/newkdr/project/12a8a5f5-3e19-438c-8280-eb8f4ee06d17/settings/integration?pkg=billboard.js&utm_source=github&utm_medium=referral&page=upgrade-pr#auto-dep-upgrades) [//]: # 'snyk:metadata:{"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"billboard.js","from":"3.14.0","to":"3.14.2"}],"env":"prod","hasFixes":false,"isBreakingChange":false,"isMajorUpgrade":false,"issuesToFix":[],"prId":"dca0e5b0-f67a-40d3-8409-9d31ae9d68c9","prPublicId":"dca0e5b0-f67a-40d3-8409-9d31ae9d68c9","packageManager":"npm","priorityScoreList":[],"projectPublicId":"12a8a5f5-3e19-438c-8280-eb8f4ee06d17","projectUrl":"https://app.snyk.io/org/newkdr/project/12a8a5f5-3e19-438c-8280-eb8f4ee06d17?utm_source=github&utm_medium=referral&page=upgrade-pr","prType":"upgrade","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":[],"type":"auto","upgrade":[],"upgradeInfo":{"versionsDiff":2,"publishedDate":"2024-11-26T05:44:58.122Z"},"vulns":[]}'
Operating system: Microsoft Windows 10 Pro - 10.0.19045 Build 19045
Browser: Firefox 130.0.1 / Edge 129.0.2792.65
1. Custom font size in axis labels
We use custom CSS to slightly increase the font size used in charts. Of course the library is not designed for this, so this change can cause oddities when calculating the size and spacing of text elements. I noticed this in particular for axis labels, where some text can even end up truncated.
Firefox:


Edge:
After some digging through the code I found the logic which determines the font size at
AxisRendererHelper.getSizeFor1Char
:billboard.js/src/ChartInternal/Axis/AxisRendererHelper.ts
Lines 37 to 63 in 9c668e6
I assume the memoization at line 60 is meant to increase performance, but by removing it the issue gets fixed.
Firefox:

Edge:

Note the lack of truncation in the Edge version, as well as the increased line spacing in both browsers (and the fact that lines get overlapped in Firefox, but that's another issue).
I could not find a way to monkeypatch this method since it's in an internal class. Of course removing the line would cause a performance degradation which could be siginificant in more complex use cases.
2. Discrepancies in font rendering
Related to the above, I noticed Firefox renders fonts differently from Chromium which means labels often end up slightly larger and cause more line breaks.
Additionally, there seem to be some inconsistencies in the interpretation of
padding.left
+axis.x.tick.width
(related to #3550).This happens regardless of whether a custom font size is set.
Firefox:

Edge:

Source:
custom_font_size_demo.zip
Ideally the rendering of labels should be more consistent, but I acknowledge this could be outside the technical possibilities of this library.
The text was updated successfully, but these errors were encountered: