Skip to content

Commit 4fb0c52

Browse files
committed
chore(release): 3.3.0
1 parent 7f674c6 commit 4fb0c52

11 files changed

Lines changed: 23 additions & 12 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.2.2"
37+
placeholder: "3.3.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.3.0] — 2026-10-07
99

1010
### Added
1111

‎CLAUDE.md‎

Lines changed: 12 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.2.2
17+
- **Current version:** 3.3.0
1818

1919
---
2020

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

154154
---
155155

156+
## v3.3.0 — significant changes
157+
158+
- **Cell range selection** (`cellSelection`, design: `docs/superpowers/specs/2026-10-01-cell-range-selection-design.md`). `useGridCellSelection` runs after `useGridSpanning` and before `useGridKeyboardNavigation` (feeds it `cellSelection.keyboard`); `useGridCellSelectionApi` runs after `useGridPointerFocusHandlers`, keeps the anchor in sync with `focusedCell` and installs the six `apiRef` methods. Pure helpers in `lib/utils/cellSelection.ts`
159+
- The model stores corner row ids + fields and is resolved each render against `allRenderableRows` and the data columns of `navigationColumns`, so a range follows sorting; a missing corner clears it with reason `'dataChange'`. Only the first range is used. `isRangeColumnField` excludes system fields and `__group__`; synthetic rows are highlighted but skipped by copy and `getSelectedCells`
160+
- `Row` is `React.memo` (`areRowPropsEqual`, `cellRange` compared by value); row renderers pass `getRowCellRange(...)`, `null` outside the range. **Handlers passed to rows must keep a stable identity**, or every row re-renders
161+
- With `cellSelection` on, the Ctrl/Cmd+C shortcut copies the range (or the focused cell) through `useGridClipboard`'s `getShortcutText`, no header line; `copySelectedRows` is unchanged. A drag clears the page text selection (WebKit otherwise extends it outside the grid and takes over Ctrl+C)
162+
- Browser tests drive held-mouse drags with the Playwright-backed `commands.pointerMoveTo` / `pointerDown` / `pointerUp` from `vitest.config.ts`
163+
- **Wrapped header text**: `wrapHeaderText` (grid) and `GridColDef.wrapHeaderText` (column wins); `lib/utils/headerWrap.ts` (`getHeaderLineClamp`, `HEADER_WRAP_LINE_HEIGHT` 16 must match `Header.css`). The header never grows; class `ogx__header-cell--wrap`
164+
- **React Compiler**: ESLint runs `react-hooks` `recommended-latest` (only `set-state-in-effect` off). `npm run check:compiler` should report only `useGridDataSource` (try/finally) plus the two `'use no memo'` wrappers (`InlineToolbar`, `CellRenderTarget` — they call consumer functions that may use hooks). `REACT_COMPILER=1 npx vitest run …` tests `lib/` compiled. In components and hooks: no `?.`/`??`/`||`/ternaries inside `try` (use `attempt()` from `lib/utils/attempt.ts`), no `try/finally`, no callback naming itself (go through a ref), default array/object props as module-level constants
165+
- Vitest's unit project excludes `.claude/**` (agent worktrees)
166+
156167
## v3.2.2 — significant changes
157168

158169
- Regexes that run on cell text or consumer input must be linear (CodeQL scans every push): no adjacent overlapping quantifiers such as `\s*(px)?\s*` or `[\d\s]*\d[\d\s]*`; use a lookahead, trim first, or a plain loop. Tests in `lib/utils/export/exportShared.test.ts` time 50k-char worst cases

‎demo/App.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ export default function App() {
151151
<img src={`${import.meta.env.BASE_URL}logo.png`} alt="OpenGridX Logo" className="app-logo" />
152152
<h2 className="app-title">
153153
OpenGridX
154-
<span className="app-version">v3.2.2</span>
154+
<span className="app-version">v3.3.0</span>
155155
</h2>
156156
</div>
157157

‎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.2.2</span>
66+
<span className="home-badge">OpenGridX v3.3.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.2.2
3+
# Version: 3.3.0
44
# Docs: https://opencorestack.github.io/OpenGridX/
55
# This file is machine-readable. AI developers: start here.
66

‎docs/roadmap.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ This document tracks the current status of features in `OpenGridX` and outlines
8282

8383
| Release | Target | Headline | Also in it |
8484
| :--- | :--- | :--- | :--- |
85-
| **3.3.0** | 30 Oct | **Cell range selection** (opt-in `cellSelection` prop): mouse drag, Shift+click, Shift+arrows; Ctrl+C / Cmd+C copies the block as TSV | Selection status bar (count, sum, average of selected cells); wrapped header text; React Compiler compatibility check |
85+
| **3.3.0** ✅ | shipped 7 Oct | **Cell range selection** (opt-in `cellSelection` prop): mouse drag, Shift+click, Shift+arrows; Ctrl+C / Cmd+C copies the block as TSV | Selection status bar (count, sum, average of selected cells); wrapped header text; React Compiler compatibility check |
8686
| **3.4.0** | 20 Nov | **Paste from Excel / Google Sheets** into the selection, through `processRowUpdate` (values parsed per column type, non-editable cells skipped, `onClipboardPasteError`). **Undo / redo** for cell edits and pastes (Ctrl+Z, Ctrl+Shift+Z / Ctrl+Y, `apiRef.undo()` / `redo()`) | **AI toolkit, part 1** in a new `@opencorestack/opengridx/ai` entry point: `getGridAiSchema(columns)` (JSON Schema of the filter, sort, grouping, aggregation, pivot and visibility models the columns allow) and `validateGridAiState(json, columns)` (drops unknown fields and operators, coerces values, returns errors) |
8787
| **3.5.0** | 15 Dec | **AI toolkit, part 2**: `aiAssistant={{ onPrompt }}` prompt panel that calls the app's own model, shows the proposed changes as removable chips and applies them with undo; `createGridAgentTools(apiRef)` (plain tool objects for CopilotKit, the Vercel AI SDK or WebMCP) | Header filter row; **fill handle** as a stretch goal (moves to Q1 2027 if 3.3–3.4 run late) |
8888
| Freeze | 19 Dec – 5 Jan | Bug fixes only | — |

‎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.2.2
3+
# Version: 3.3.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.2.2**. It is a full custom implementation — not a wrapper around MUI or any
11+
Current version: **3.3.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.

0 commit comments

Comments
 (0)