Skip to content

Commit 9937b7d

Browse files
committed
🎉 Initial commit: OpenGridX v0.1.1" -m "Initial release of the high-performance React DataGrid engine.
Features include: - Row and Column Virtualization (100k+ rows at 60fps) - Row Grouping, Tree Data, and Aggregate functions - Advanced layouts: Column/Row Spanning and Pinning - Full slots API for custom components - Zero-dependency architecture (Core) - Built-in Excel, CSV, and JSON export utilities - Pre-configured GitHub Actions deploy workflow
1 parent 82b54c3 commit 9937b7d

File tree

224 files changed

+35861
-2
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

224 files changed

+35861
-2
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: Deploy OpenGridX Demo
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
8+
jobs:
9+
build-and-deploy:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- name: Checkout 🛎️
13+
uses: actions/checkout@v4
14+
15+
- name: Setup Node ⚙️
16+
uses: actions/setup-node@v4
17+
with:
18+
node-version: 20
19+
cache: 'npm'
20+
21+
- name: Install Dependencies 📦
22+
run: npm ci
23+
24+
- name: Build Demo 🚀
25+
run: npm run build
26+
27+
- name: Prepare Deployment Directory đź“‚
28+
run: |
29+
mkdir -p deploy-out
30+
cp -r demo/dist/* deploy-out/
31+
touch deploy-out/.nojekyll
32+
33+
- name: Deploy to GitHub Pages 🚀
34+
uses: JamesIves/github-pages-deploy-action@v4
35+
with:
36+
folder: deploy-out
37+
branch: gh-pages

‎.gitignore‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Logs
2+
logs
3+
*.log
4+
npm-debug.log*
5+
yarn-debug.log*
6+
yarn-error.log*
7+
pnpm-debug.log*
8+
lerna-debug.log*
9+
10+
node_modules
11+
dist
12+
dist-ssr
13+
demo/dist/*
14+
*.local
15+
16+
# Editor directories and files
17+
.vscode/*
18+
!.vscode/extensions.json
19+
.idea
20+
.DS_Store
21+
*.suo
22+
*.ntvs*
23+
*.njsproj
24+
*.sln
25+
*.sw?
26+
27+
# Agent and Research files
28+
.agent/
29+
docs/research/
30+
research/

‎.npmignore‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Dependencies
2+
node_modules/
3+
4+
# Build outputs
5+
dist/
6+
*.tsbuildinfo
7+
8+
# Demo app
9+
demo/
10+
11+
# Tests
12+
*.test.ts
13+
*.test.tsx
14+
*.spec.ts
15+
*.spec.tsx
16+
__tests__/
17+
18+
# Config files
19+
tsconfig.json
20+
tsconfig.build.json
21+
vite.config.js
22+
eslint.config.js
23+
.gitignore
24+
25+
# Development
26+
.vscode/
27+
.idea/
28+
*.log
29+
.DS_Store
30+
31+
# Source files (only dist should be published)
32+
lib/
33+
src/

‎CHANGELOG.md‎

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
# OpenGridX — Changelog
2+
3+
**Package**: `@opencorestack/opengridx`
4+
**License**: MIT © 2026 Open Core Stack
5+
6+
---
7+
8+
## [0.1.1] — March 6, 2026 🔧
9+
10+
### Fixed
11+
- ExcelJS correctly marked as external in Vite build config (consistent with `peerDependencies`)
12+
- Clipboard programmatic copy button now correctly reads live selection state via `apiRef.getSelectedRows()`
13+
- `Ctrl+C` keyboard shortcut now works when grid checkboxes are focused
14+
15+
### Improved
16+
- Package size reduced from 8.4 MB → 1.8 MB unpacked (ExcelJS no longer bundled)
17+
- README rewritten with Getting Started first, basic example, and full API reference table
18+
- Cleaned devDependencies (removed unused `strip-comment`, `strip-comments`)
19+
20+
---
21+
22+
## [0.1.0] — March 6, 2026 🚀
23+
24+
> **Status: ✅ RELEASE READY — 100% feature-complete for v0.1.0 scope**
25+
26+
This is the initial public release of OpenGridX. All planned v0.1.0 features are implemented, tested, and included in the production bundle.
27+
28+
### âś… Core Features
29+
- **High-Performance Virtualization** — Custom row + column virtual scrolling engine, 60fps at 100k+ rows
30+
- **Multi-Column Sorting** — Client-side and server-side; stable multi-field sort
31+
- **Advanced Filtering** — 11+ operators (contains, equals, startsWith, etc.) with AND/OR filter builder UI
32+
- **Pagination** — Client-side and server-side modes with configurable page sizes
33+
- **Row Selection** — Single and multi-row checkbox selection with `rowSelectionModel` controlled/uncontrolled API
34+
35+
### âś… Advanced UI & Layout
36+
- **Column Pinning** — Left and right sticky columns with correct z-index layering
37+
- **Row Pinning** — Top and bottom pinned rows with visual separation
38+
- **Column Resizing** — Throttled drag-to-resize at 60fps with minimum width enforcement
39+
- **Column Reordering** — Drag-and-drop column reorder
40+
- **Row Reordering** — Drag-and-drop row reorder with `onRowOrderChange` callback
41+
- **Detail Panels** — Expandable master-detail rows via `getDetailPanelContent`
42+
- **Cell & Row Spanning** — `colSpan` and `rowSpan` support for merged-cell layouts
43+
- **List View Mode** — Card-based responsive layout via `listView` / `listViewColumn`
44+
- **Column Grouping** — Multi-level column header groups via `columnGroupingModel`
45+
- **Toolbar** — Built-in toolbar with column visibility, filter, and density controls; fully replaceable via `slots`
46+
47+
### âś… Data Management
48+
- **Inline Cell Editing** — Double-click or Enter to edit; `editable` per column; `processRowUpdate` callback
49+
- **Tree Data** — Client-side hierarchical rows via `treeData` + `getTreeDataPath`
50+
- **Row Grouping** — Group rows by column value with collapsible groups and aggregation summaries
51+
- **Aggregation** — SUM, AVG, COUNT, MIN, MAX in group footers and global sticky footer
52+
- **Pivot Mode** — Multidimensional data pivoting via `pivotMode` + `pivotModel`
53+
54+
### âś… Server-Side Integration
55+
- **Data Source API** — `useGridDataSource` hook for unified server-side fetching
56+
- **Server-Side Sorting, Filtering & Pagination** — All offloaded cleanly to the backend
57+
- **Infinite Scroll** — Viewport-triggered batch-loading (`paginationMode="infinite"`)
58+
- **Server-Side Tree Data** — Lazy children loading via `dataSource.getChildren`
59+
- **Server-Side Aggregation** — Fetch summary totals directly from API responses
60+
61+
### âś… Export
62+
- **CSV Export** — `exportToCsv()` utility, respects `valueFormatter`
63+
- **Excel Export** — Basic `.xlsx` via `exportToExcel()`; advanced pixel-perfect image-embedded export via `exportToExcelAdvanced()` (lazy-loads ExcelJS)
64+
- **JSON Export** — `exportToJson()`
65+
- **Print** — `printGrid()` with print-optimised CSS
66+
67+
### âś… Clipboard
68+
- **Keyboard Copy** — `Ctrl+C` / `Cmd+C` copies selected rows as TSV (tab-separated values)
69+
- **Programmatic Copy** — `apiRef.current.copySelectedRows()` for button-triggered copying
70+
- **Excel/Sheets Compatible** — TSV output pastes cleanly into any spreadsheet app
71+
- **Smart Focus Handling** — Does not intercept `Ctrl+C` in text inputs; correctly handles checkbox-focused grid cells
72+
73+
### âś… Theming
74+
- **`DataGridThemeProvider`** — React context-based global theming
75+
- **5 Built-in Themes** — `darkTheme`, `roseTheme`, `emeraldTheme`, `amberTheme`, `compactTheme`
76+
- **CSS Variables** — Full `--ogx-*` token system; Shadow DOM compatible
77+
- **`cellClassName` / `headerClassName`** — Per-column custom class injection
78+
79+
### âś… Accessibility (WCAG 2.1 AA)
80+
- Semantic ARIA roles: `grid`, `row`, `gridcell`, `columnheader`
81+
- `aria-sort`, `aria-selected`, `aria-expanded`, `aria-readonly`, `aria-label` throughout
82+
- Full keyboard navigation: Arrow keys, Tab, Enter, Escape, Home/End, PageUp/PageDown
83+
- Visible focus ring in keyboard mode (CSS classname-toggled, zero React state overhead)
84+
85+
### âś… State Persistence
86+
- **`initialState` prop** — Restore column widths, visibility, sort, and filter on mount
87+
- **`useGridStateStorage(key)` hook** — Auto-saves to `localStorage`; pluggable storage backend
88+
89+
### âś… Developer Experience
90+
- **`apiRef`** — Full imperative API: `getSelectedRows`, `copySelectedRows`, `selectRow`, `sortColumn`, `setFilterModel`, `getVisibleRows`, `scrollToIndexes`, and more
91+
- **`slots` System** — Replace Toolbar, Pagination, NoRowsOverlay, LoadingOverlay, Footer
92+
- **`slotProps`** — Pass custom props to slot components
93+
- **TypeScript** — 100% typed; full `index.d.ts` output via `vite-plugin-dts`
94+
- **Zero UI Dependencies** — No Ant Design, MUI, or Radix. Pure React + vanilla CSS (BEM)
95+
96+
### 📦 Bundle
97+
| Artifact | Minified | Gzipped |
98+
|---|---|---|
99+
| `opengridx.es.js` (ES Module) | 226 KB | **52 KB** |
100+
| `opengridx.umd.js` (UMD) | 1,089 KB | 315 KB |
101+
| `opengridx.css` | 59 KB | **10 KB** |
102+
| `exceljs` (lazy, Excel export only) | 1,385 KB | 302 KB |
103+
104+
---
105+
106+
## 🗺️ Planned for v0.2.0
107+
108+
- **Rich Excel Styling** — Bold headers, background fill, border styles natively via ExcelJS (no post-processing)
109+
- **Cell Range Clipboard** — Select a rectangular cell region (mouse drag), copy to clipboard, paste from Excel back into editable cells
110+
111+
---
112+
113+
*Last Updated: March 6, 2026*

0 commit comments

Comments
 (0)