Skip to content

Commit 14643a2

Browse files
committed
chore(release): 3.6.0
1 parent 6a5ddba commit 14643a2

10 files changed

Lines changed: 25 additions & 11 deletions

File tree

‎.github/ISSUE_TEMPLATE/bug_report.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ body:
3434
id: version
3535
attributes:
3636
label: OpenGridX version
37-
placeholder: "3.5.1"
37+
placeholder: "3.6.0"
3838
validations:
3939
required: true
4040
- type: dropdown

‎CHANGELOG.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
---
77

8-
## [Unreleased]
8+
## [3.6.0] — 2026-10-12
99

1010
### Added
1111

‎CLAUDE.md‎

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ This file is auto-loaded by Claude Code and other AI coding assistants. It provi
1414
- **Build:** `npm run build:lib` produces the published `dist/opengridx.es.js` / `dist/opengridx.umd.js`. `npm run build` type-checks the lib and builds the **demo site**.
1515
- **Published:** yes — on npm as `@opencorestack/opengridx` with external consumers. Treat public types and behaviour changes as semver-relevant.
1616
- **Lint:** `npm run lint` (ESLint). Must pass before every commit.
17-
- **Current version:** 3.5.1
17+
- **Current version:** 3.6.0
1818

1919
---
2020

@@ -153,6 +153,20 @@ The GitHub wiki is generated from `docs/` + `wiki/` by `scripts/build-wiki.mjs`
153153

154154
---
155155

156+
## v3.6.0 — significant changes
157+
158+
- **Sorting** encodes each key into typed arrays (`encodeSortColumn`): rank 0–4 (number, date, boolean, string, other), empty = 5, plus a number per row; strings/other get their position among the distinct texts in collator order. Only keys where an item carries both `comparator` and `params` use the per-pair `callSortComparator` path. Never call the collator inside a comparator over rows
159+
- `getCellValue` returns `row[field]` without allocating when the column has no `valueGetter` — keep it allocation-free. Built-in aggregations go through `aggregateRows` (row by row, same addition order); `AGGREGATION_FUNCTIONS` stays the value-array API for pivot and cell selection
160+
- Quick filter: `filterRows` keeps texts by index for the last rows array per `GridColumnLookup` (reused when the same object is at the same index); `createRowFilter` keeps a per-row WeakMap. Joining texts into one string was measured and rejected
161+
- Row-grouping leaf `GridRowMeta` objects are one per row (sharing per depth was reverted: `params.rowMeta` is public). Equivalence tests with the old code as oracles: `*.equivalence.test.ts`
162+
- **`dist/opengridx.es.js` starts with `'use client'`** (banner in `vite.config.lib.js`, checked by check-bundle); the UMD build has none
163+
- **Every optional-peer `import()` (`exceljs`, `jspdf`, `jspdf-autotable`) must stay inside `try`** — webpack and Turbopack only treat it as optional there; a hidden variable specifier breaks apps that install the peers. The `nopeers` smoke fixture (webpack 5, no peers, port 4321, `e2e/nopeers.spec.ts`) guards it; fixtures must keep webpack from resolving the root `node_modules`
164+
- `validateGridAiState` skips a top-level string `message`; the prompt handler surfaces it as `result.message` for object, JSON-string and fenced input
165+
- **RTL**: read/write horizontal scroll only through `getScrollStart` / `setScrollStart` (`lib/utils/direction.ts`; scroll state is the offset from the inline start, never negative); map arrows with `logicalArrowKey(key, isRtl(el))`; panels with `getPanelPosition`. `pinnedColumns.left` / `right` are logical (inline start / end): sticky offsets use `insetInlineStart` / `insetInlineEnd` (jsdom: `style.getPropertyValue('inset-inline-start')`), borders `border-inline-*`, box-shadow x-offsets need `:dir(rtl)` mirrors. The column menu pins by screen side. `useGridScrollSync` observes `dir` mutations
166+
- Testing RTL: Playwright's headless Chromium runs with `--hide-scrollbars`; with classic scrollbars and `scrollbar-gutter: stable`, RTL cannot reach `scrollLeft` 0 — compare against the scroll origin. Reproduce on macOS with `defaults write chrome-headless-shell AppleShowScrollBars Always`. The grid's `scrollbar-width` / `scrollbar-color` disable `::-webkit-scrollbar` in Chromium
167+
- Header filter strings are in `localeText` (`headerFilter*`, resolved in `lib/utils/headerFilterLocale.ts`)
168+
- Not in this release: the time-sliced pipeline (Option A of `docs/superpowers/specs/2026-10-12-nonblocking-pipeline-proposal.md`) is held for 3.7.0 until its overhead is within ~20 %
169+
156170
## v3.5.1 — significant changes
157171

158172
- **Content height is capped to the browser's limit.** Firefox lays out elements up to about 17.9M px and collapses a taller one (it does not clamp like Chromium/WebKit at about 33.5M px), which made large grids unscrollable there. `useGridMaxContentHeight` (hook 32a, before `useGridVirtualization`) measures the limit once per document with an invisible probe (`lib/utils/maxElementHeight.ts`: `getMaxElementHeight`, `countReachableRows`; `undefined` until measured, `Infinity` without a layout engine), and `useGridVirtualization` returns `virtualContainerHeight` capped to it — always render the rows' container with that, never `totalHeight - pinned heights`

‎demo/App.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ export default function App() {
167167
<img src={`${import.meta.env.BASE_URL}logo.png`} alt="OpenGridX Logo" className="app-logo" />
168168
<h2 className="app-title">
169169
OpenGridX
170-
<span className="app-version">v3.5.1</span>
170+
<span className="app-version">v3.6.0</span>
171171
</h2>
172172
</div>
173173

‎demo/Home.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export default function Home(_props: HomeProps) {
6363
<div className="home-logo-hero">
6464
<img src={`${import.meta.env.BASE_URL}banner.png`} alt="OpenGridX Logo" className="home-banner-image" />
6565
</div>
66-
<span className="home-badge">OpenGridX v3.5.1</span>
66+
<span className="home-badge">OpenGridX v3.6.0</span>
6767
<p className="home-subtitle">
6868
The elite, high-performance DataGrid for modern React.
6969
Built to handle massive data with a premium developer experience.

‎demo/public/llms.txt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# OpenGridX — AI Agent Context
22
# Package: @opencorestack/opengridx
3-
# Version: 3.5.1
3+
# Version: 3.6.0
44
# Docs: https://opencorestack.github.io/OpenGridX/
55
# This file is machine-readable. AI developers: start here.
66

‎llms.txt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# OpenGridX — AI Agent Context
22
# Package: @opencorestack/opengridx
3-
# Version: 3.5.1
3+
# Version: 3.6.0
44
# Docs: https://opencorestack.github.io/OpenGridX/
55
# This file is machine-readable. AI developers: start here.
66

‎opengridx-ai-context.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ that uses the `@opencorestack/opengridx` library. Read it in full before writing
88
## What this library is
99

1010
`@opencorestack/opengridx` is a zero-dependency, high-performance React DataGrid component.
11-
Current version: **3.5.1**. It is a full custom implementation — not a wrapper around MUI or any
11+
Current version: **3.6.0**. It is a full custom implementation — not a wrapper around MUI or any
1212
other library.
1313

1414
---

‎package-lock.json‎

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@opencorestack/opengridx",
3-
"version": "3.5.1",
3+
"version": "3.6.0",
44
"description": "OpenGridX: High-performance React data infrastructure. Unlock advanced Row Grouping, Excel Export, and Column Pinning without the usual \"Pro\" gatekeeping. Built for speed, scale, and complete architectural freedom. Fully open, virtualization-ready, and feature-complete.",
55
"type": "module",
66
"main": "./dist/opengridx.umd.js",

0 commit comments

Comments
 (0)