fix: Add horizontal scroll to wide tables on narrow screens#1675
fix: Add horizontal scroll to wide tables on narrow screens#1675Reckbeg wants to merge 4 commits into
Conversation
* Fix package-lock file * Docs: remove CodeSandbox embedded demos and add links to working exa,ples in Stackblitz (handsontable#1621)
<!-- CURSOR_SUMMARY --> > [!NOTE] > **Low Risk** > Low risk documentation-only changes: adds new guide pages and adjusts VuePress sidebar navigation with no runtime or API impact. > > **Overview** > Adds three new AI-focused documentation pages: `ai-sdk`, `integration-with-langchain`, and `mcp-server`, describing how to use HyperFormula for deterministic spreadsheet computation in agent workflows. > > Updates the VuePress guide sidebar to surface these pages under **Integrations**, renames the section from *Framework integration* to *Integrations*, and moves the former *Overview* links into a new *About* section. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 54c541b. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY --> Co-authored-by: GreenFlux <support@greenflux.us> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
- Add idID.ts with translations for all ~400 built-in functions - Add idID export to languages/index.ts - Update docs to reflect 18 supported languages - Add Indonesian to language table in localizing-functions.md
- Add overflow-x: auto to tables on pages using widePage layout - Fixes list-of-differences and built-in-functions guides not scaling well on narrower screens - Applies to both pages for consistency Closes handsontable#1359
❌ Deploy Preview for hyperformula-dev-docs failed. Why did it fail? →
|
❌ Deploy Preview for hyperformula-docs failed. Why did it fail? →
|
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 5 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 90ffb71. Configure here.
| N: 'N', | ||
| NA: 'NA', | ||
| NETWORKDAYS: 'HARI.KERJA', | ||
| 'NETWORKDAYS.INTL': 'HARI.KERJA.INTL', |
There was a problem hiding this comment.
Duplicate translations make functions unreachable in Indonesian locale
High Severity
NETWORKDAYS and WORKDAY both translate to 'HARI.KERJA', and NETWORKDAYS.INTL and WORKDAY.INTL both translate to 'HARI.KERJA.INTL'. Since buildFunctionMapping() builds a reverse map where later keys overwrite earlier ones, NETWORKDAYS and NETWORKDAYS.INTL become unreachable by their localized names in the Indonesian locale. These are functionally different — NETWORKDAYS counts working days between dates, while WORKDAY returns a date offset by working days.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 90ffb71. Configure here.
| BITOR: 'BITATAU', | ||
| BITRSHIFT: 'BIT.GESER.KANAN', | ||
| BITXOR: 'BITXOR', | ||
| CEILING: 'BULATKAN.KEATAS', |
There was a problem hiding this comment.
CEILING and ROUNDUP share identical Indonesian translation
High Severity
CEILING and ROUNDUP both translate to 'BULATKAN.KEATAS'. The reverse function mapping built by buildFunctionMapping() will only resolve 'BULATKAN.KEATAS' to ROUNDUP (the later entry), making CEILING unreachable by its localized name. These functions have different semantics — CEILING rounds to the nearest multiple of significance, while ROUNDUP rounds away from zero.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 90ffb71. Configure here.
| ISBINARY: 'ADALAHA.BINER', | ||
| ISBLANK: 'ADALAHA.KOSONG', | ||
| ISERR: 'ADALAHA.GALAT', | ||
| ISERROR: 'ADALAHA.GALAT', |
There was a problem hiding this comment.
ISERR and ISERROR share identical Indonesian translation
Medium Severity
ISERR and ISERROR both translate to 'ADALAHA.GALAT'. The reverse function mapping will only resolve to ISERROR, making ISERR unreachable. These differ meaningfully — ISERR returns TRUE for all errors except #N/A, while ISERROR includes #N/A. Other language packs (e.g., German uses 'ISTFEHL'/'ISTFEHLER', French uses 'ESTERR'/'ESTERREUR') keep them distinct.
Reviewed by Cursor Bugbot for commit 90ffb71. Configure here.
| RIGHT: 'KANAN', | ||
| ROMAN: 'ROMAWI', | ||
| ROUND: 'BULATKAN', | ||
| ROUNDDOWN: 'BULATKAN.KEBAWAH', |
There was a problem hiding this comment.
ROUNDDOWN and FLOOR share identical Indonesian translation
High Severity
ROUNDDOWN and FLOOR both translate to 'BULATKAN.KEBAWAH'. The reverse function mapping in buildFunctionMapping() will only resolve to FLOOR (the later entry), making ROUNDDOWN unreachable by its localized name. These functions differ — ROUNDDOWN rounds toward zero, while FLOOR rounds down to the nearest multiple of significance. Other language packs use distinct translations (e.g., German: 'ABRUNDEN' / 'UNTERGRENZE').
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 90ffb71. Configure here.
| allow="accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking" | ||
| sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"> | ||
| </iframe> | ||
| Explore the full working example on [Stackblitz](https://stackblitz.com/github/handsontable/hyperformula-demos/tree/3.2.x/react-demo?v=${$page.buildDateURIEncoded}). |
There was a problem hiding this comment.
Stackblitz links won't interpolate page variable in URL
Medium Severity
The markdown links use JavaScript template literal syntax ${$page.buildDateURIEncoded} inside a plain markdown URL. VuePress compiles markdown into Vue templates, where only {{ }} works for text interpolation and :attr for dynamic attribute binding. The old iframes correctly used :src with backtick template literals. The new plain [text](url) markdown renders a static href, so ${...} appears literally in the URL instead of the actual build date value. This affects all five pages with Stackblitz links.
Additional Locations (2)
Reviewed by Cursor Bugbot for commit 90ffb71. Configure here.


Summary
Fixes #1359 — wide tables in docs overflow on narrow screens instead of being scrollable.
Problem
The List of differences with other spreadsheets guide and the Built-in functions guide both use
max-width: 1200pxvia the.widePageCSS class. However, on screens narrower than 1200px, the 5-column tables overflow the container without any scroll mechanism, making content inaccessible.Solution
Added
overflow-x: autoto tables inside.widePagepages, enabling horizontal scrolling when the table exceeds the viewport width.Changes
docs/guide/list-of-differences.md— Added scrollable table CSSdocs/guide/built-in-functions.md— Added same CSS for consistencyCSS added
This only affects pages using the
.widePagelayout, so other pages with standard tables are unaffected.Note
Low Risk
Mostly documentation/navigation updates plus a new
idIDtranslation pack export; minimal runtime impact beyond adding another supported locale. Main risk is small i18n/translation correctness and docs build/nav regressions.Overview
Expands the docs with new AI-related integration content by adding guides for
HyperFormula AI SDK,LangChain/LangGraphintegration, and anMCP server, and wiring them into the sidebar under a renamed Integrations section.Improves docs UX and demos by making wide tables horizontally scrollable on narrow screens (for
.widePagepages) and replacing embedded CodeSandbox iframes with StackBlitz links in multiple integration/custom-function guides.Adds Indonesian (
idID) localization support by introducing a fullsrc/i18n/languages/idID.tstranslation package, exporting it fromsrc/i18n/languages/index.ts, and updating i18n docs to reflect 18 supported languages. Also includes apackage-lock.jsonupdate adding platform-specific optionalesbuildpackages.Reviewed by Cursor Bugbot for commit 90ffb71. Bugbot is set up for automated code reviews on this repo. Configure here.