From e43e55c2b78d0e386425c2163ab31c4bf6e6fd23 Mon Sep 17 00:00:00 2001 From: Takuma IMAMURA <209989118+hyperfinitism@users.noreply.github.com> Date: Wed, 6 May 2026 18:00:11 +0900 Subject: [PATCH] feat: replace render-time text wrapping with browser-native wrapping (#191) This PR uses `foreignObject` with CSS line-clamp to let the browser handle text wrapping natively instead of manually wrapping on the server. This provides better font-aware wrapping while keeping server-side line estimation for SVG height calculation. Fixes https://github.com/anuraghazra/github-readme-stats/issues/4862. ### Example card hyperfinitism-sample-repo --------- Signed-off-by: Takuma IMAMURA <209989118+hyperfinitism@users.noreply.github.com> Co-authored-by: martin-mfg <2026226+martin-mfg@users.noreply.github.com> --- .../__snapshots__/gist.test.js.snap | 30 ++- .../__snapshots__/pin.test.js.snap | 28 +- docs/advanced_documentation.md | 2 + packages/core/package.json | 3 +- packages/core/src/api/gist.js | 2 + packages/core/src/api/pin.js | 2 + packages/core/src/cards/gist.js | 69 ++++- packages/core/src/cards/repo.js | 85 ++++-- packages/core/src/cards/types.d.ts | 2 + packages/core/src/common/fmt.js | 27 +- packages/core/src/common/render.js | 245 ++++++++++++++++-- packages/core/src/fetchers/stats.js | 2 +- packages/core/src/fetchers/top-languages.js | 2 +- packages/core/tests/fmt.test.js | 22 +- packages/core/tests/render.test.js | 76 +++++- packages/core/tests/renderGistCard.test.js | 24 +- packages/core/tests/renderRepoCard.test.js | 35 ++- packages/core/tests/renderStatsCard.test.js | 2 +- pnpm-lock.yaml | 3 - 19 files changed, 537 insertions(+), 124 deletions(-) diff --git a/apps/backend/tests/public-instance/__snapshots__/gist.test.js.snap b/apps/backend/tests/public-instance/__snapshots__/gist.test.js.snap index 6e8e2779..57e28a92 100644 --- a/apps/backend/tests/public-instance/__snapshots__/gist.test.js.snap +++ b/apps/backend/tests/public-instance/__snapshots__/gist.test.js.snap @@ -30,7 +30,7 @@ exports[`Test /api/gist contract > should match the private missing-id response exports[`Test /api/gist contract > should match the public happy-path response snapshot 1`] = ` { - "content": " + "content": "