Skip to content

fix: Add horizontal scroll to wide tables on narrow screens#1675

Open
Reckbeg wants to merge 4 commits into
handsontable:developfrom
Reckbeg:fix/docs-table-scroll
Open

fix: Add horizontal scroll to wide tables on narrow screens#1675
Reckbeg wants to merge 4 commits into
handsontable:developfrom
Reckbeg:fix/docs-table-scroll

Conversation

@Reckbeg
Copy link
Copy Markdown

@Reckbeg Reckbeg commented May 16, 2026

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: 1200px via the .widePage CSS 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: auto to tables inside .widePage pages, enabling horizontal scrolling when the table exceeds the viewport width.

Changes

  • docs/guide/list-of-differences.md — Added scrollable table CSS
  • docs/guide/built-in-functions.md — Added same CSS for consistency

CSS added

.page:has(.widePage) .theme-default-content:not(.custom) table {
  display: block;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

This only affects pages using the .widePage layout, so other pages with standard tables are unaffected.


Note

Low Risk
Mostly documentation/navigation updates plus a new idID translation 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/LangGraph integration, and an MCP 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 .widePage pages) and replacing embedded CodeSandbox iframes with StackBlitz links in multiple integration/custom-function guides.

Adds Indonesian (idID) localization support by introducing a full src/i18n/languages/idID.ts translation package, exporting it from src/i18n/languages/index.ts, and updating i18n docs to reflect 18 supported languages. Also includes a package-lock.json update adding platform-specific optional esbuild packages.

Reviewed by Cursor Bugbot for commit 90ffb71. Bugbot is set up for automated code reviews on this repo. Configure here.

sequba and others added 4 commits February 20, 2026 13:18
* 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
Copy link
Copy Markdown

@claude claude Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This pull request is from a fork — automated review is disabled. A repository maintainer can comment @claude review to run a one-time review.

@netlify
Copy link
Copy Markdown

netlify Bot commented May 16, 2026

Deploy Preview for hyperformula-dev-docs failed. Why did it fail? →

Name Link
🔨 Latest commit 90ffb71
🔍 Latest deploy log https://app.netlify.com/projects/hyperformula-dev-docs/deploys/6a08b76d9bff0300073fdf08

@netlify
Copy link
Copy Markdown

netlify Bot commented May 16, 2026

Deploy Preview for hyperformula-docs failed. Why did it fail? →

Name Link
🔨 Latest commit 90ffb71
🔍 Latest deploy log https://app.netlify.com/projects/hyperformula-docs/deploys/6a08b76dfac0c10007483cfa

Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 5 potential issues.

Fix All in Cursor

❌ 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',
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 90ffb71. Configure here.

BITOR: 'BITATAU',
BITRSHIFT: 'BIT.GESER.KANAN',
BITXOR: 'BITXOR',
CEILING: 'BULATKAN.KEATAS',
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 90ffb71. Configure here.

ISBINARY: 'ADALAHA.BINER',
ISBLANK: 'ADALAHA.KOSONG',
ISERR: 'ADALAHA.GALAT',
ISERROR: 'ADALAHA.GALAT',
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 90ffb71. Configure here.

RIGHT: 'KANAN',
ROMAN: 'ROMAWI',
ROUND: 'BULATKAN',
ROUNDDOWN: 'BULATKAN.KEBAWAH',
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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)
Fix in Cursor Fix in Web

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}).
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 90ffb71. Configure here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants