{"owner":"Comcast","repo":"react-data-grid","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md"],"skills":{"AGENTS.md":"# AGENTS.md\n\n## Commands\n\n```shell\nnpm ci                       # setup\nnode --run build             # library → lib/\nnode --run typecheck         # tsc --build\nnode --run eslint            # eslint --max-warnings 0\nnode --run eslint:fix        # eslint --fix\nnode --run format            # oxfmt\nnode --run test              # vitest (browser + node)\nnode --run test -- <path>    # single test, e.g. test/browser/rowHeight.test.ts\n```\n\n## Architecture\n\nreact-data-grid is a data grid with **zero `dependencies`** (peer dependency: React 19.2+). It uses CSS Grid for layout and implements row/column virtualization in JS.\n\n```text\nsrc/\n  index.ts            # public API surface; all exports go through here\n  DataGrid.tsx        # main <DataGrid> component (generic: <R, SR, K>)\n  TreeDataGrid.tsx    # wraps DataGrid, adds row grouping (role=\"treegrid\")\n  types.ts            # shared type definitions (e.g. Column, CalculatedColumn, render props, events)\n  hooks/              # shared custom React hooks\n  utils/              # pure utilities (e.g. keyboard, DOM, events, colSpan, style)\n  style/              # build-time CSS via ecij tagged templates; layers.css declares @layer order\n  cellRenderers/      # default cell renderers (e.g. checkbox, toggleGroup, value)\n  editors/            # default editors (renderTextEditor)\ntest/\n  browser/            # vitest browser-mode tests (Playwright, Chromium + Firefox)\n  node/               # vitest SSR tests (Node.js)\n  visual/             # vitest visual regression tests (CI-only — never run locally)\nwebsite/              # demo site (Vite + TanStack Router)\n```\n\n## Conventions\n\n- **Public API** — all exports flow through `src/index.ts`. Keep `README.md` in sync with user-facing changes.\n- **Docs** — keep `AGENTS.md` in sync with tooling, conventions, or architectural changes.\n- **Default renderers** — `DataGridDefaultRenderersContext` allows overriding default renderers (`renderCheckbox`, `renderSortStatus`, `renderRow`, `renderCell`, `noRowsFallback`) without prop-drilling.\n- **TypeScript strict** with `exactOptionalPropertyTypes`, `verbatimModuleSyntax`, `erasableSyntaxOnly`. Distinguish missing properties from `undefined` values.\n- **`Maybe<T>`** (`T | undefined | null`) — used for all nullable column/render props. Do not use bare `T | undefined`.\n- **`NoInfer<>`** — wrap callback parameters to prevent reverse type inference into component generics.\n- **CSS layers** — all styles live in nested `@layer rdg.<Name>` sub-layers (e.g. `rdg.Cell`, `rdg.Row`; declared in `src/style/layers.css`). Use `ecij` `css` tagged templates (build-time extraction, not runtime CSS-in-JS). Co-locate styles in component files; `src/style/` is for shared styles.\n- **Dual classnames** — components apply both a semantic class (`rdg-cell`) and a generated hash. Preserve both.\n- **Light/dark mode** — handled via CSS `light-dark()` + `color-scheme`, not JS.\n- **Accessibility first** — ARIA attributes (e.g. `aria-colindex`, `aria-rowindex`, `aria-selected`, roles) are required. Tests query by role.\n- **Formatting** — oxfmt (not Prettier). **Linting** — ESLint (must pass with zero warnings).\n- **Build** — tsdown bundles library to `lib/`; `ecij` plugin prefixes classes with `rdg-{version}-` (dots→dashes) to avoid cross-version conflicts.\n\n## Testing\n\n- Browser tests use `vitest/browser` + Playwright. `test/setupBrowser.ts` configures `page.render()` via `vitest-browser-react` and registers custom locators via `locators.extend()` — prefer `page.getGrid()`, `page.getCell({ name })`, `page.getRow()`, `page.getHeaderCell()`, `page.getActiveCell()`, etc. over raw `page.getByRole()`.\n- Test helpers in `test/browser/utils.tsx`: `setup()`, `getRowWithCell()`, `getCellsAtRowIndex()`, `validateCellPosition()`, `scrollGrid()`, `safeTab()`, `testCount()`, `testRowCount()`.\n- `test/failOnConsole.ts` fails tests on unexpected console warnings/errors.\n- **Never run visual regression tests** — screenshots are environment-dependent so visual regression tests must run in CI only.\n\n## Validation\n\nRun before submitting changes: `node --run typecheck`, `node --run eslint`, `node --run format`, `node --run test`.\n"},"files":{"AGENTS.md":"# AGENTS.md\n\n## Commands\n\n```shell\nnpm ci                       # setup\nnode --run build             # library → lib/\nnode --run typecheck         # tsc --build\nnode --run eslint            # eslint --max-warnings 0\nnode --run eslint:fix        # eslint --fix\nnode --run format            # oxfmt\nnode --run test              # vitest (browser + node)\nnode --run test -- <path>    # single test, e.g. test/browser/rowHeight.test.ts\n```\n\n## Architecture\n\nreact-data-grid is a data grid with **zero `dependencies`** (peer dependency: React 19.2+). It uses CSS Grid for layout and implements row/column virtualization in JS.\n\n```text\nsrc/\n  index.ts            # public API surface; all exports go through here\n  DataGrid.tsx        # main <DataGrid> component (generic: <R, SR, K>)\n  TreeDataGrid.tsx    # wraps DataGrid, adds row grouping (role=\"treegrid\")\n  types.ts            # shared type definitions (e.g. Column, CalculatedColumn, render props, events)\n  hooks/              # shared custom React hooks\n  utils/              # pure utilities (e.g. keyboard, DOM, events, colSpan, style)\n  style/              # build-time CSS via ecij tagged templates; layers.css declares @layer order\n  cellRenderers/      # default cell renderers (e.g. checkbox, toggleGroup, value)\n  editors/            # default editors (renderTextEditor)\ntest/\n  browser/            # vitest browser-mode tests (Playwright, Chromium + Firefox)\n  node/               # vitest SSR tests (Node.js)\n  visual/             # vitest visual regression tests (CI-only — never run locally)\nwebsite/              # demo site (Vite + TanStack Router)\n```\n\n## Conventions\n\n- **Public API** — all exports flow through `src/index.ts`. Keep `README.md` in sync with user-facing changes.\n- **Docs** — keep `AGENTS.md` in sync with tooling, conventions, or architectural changes.\n- **Default renderers** — `DataGridDefaultRenderersContext` allows overriding default renderers (`renderCheckbox`, `renderSortStatus`, `renderRow`, `renderCell`, `noRowsFallback`) without prop-drilling.\n- **TypeScript strict** with `exactOptionalPropertyTypes`, `verbatimModuleSyntax`, `erasableSyntaxOnly`. Distinguish missing properties from `undefined` values.\n- **`Maybe<T>`** (`T | undefined | null`) — used for all nullable column/render props. Do not use bare `T | undefined`.\n- **`NoInfer<>`** — wrap callback parameters to prevent reverse type inference into component generics.\n- **CSS layers** — all styles live in nested `@layer rdg.<Name>` sub-layers (e.g. `rdg.Cell`, `rdg.Row`; declared in `src/style/layers.css`). Use `ecij` `css` tagged templates (build-time extraction, not runtime CSS-in-JS). Co-locate styles in component files; `src/style/` is for shared styles.\n- **Dual classnames** — components apply both a semantic class (`rdg-cell`) and a generated hash. Preserve both.\n- **Light/dark mode** — handled via CSS `light-dark()` + `color-scheme`, not JS.\n- **Accessibility first** — ARIA attributes (e.g. `aria-colindex`, `aria-rowindex`, `aria-selected`, roles) are required. Tests query by role.\n- **Formatting** — oxfmt (not Prettier). **Linting** — ESLint (must pass with zero warnings).\n- **Build** — tsdown bundles library to `lib/`; `ecij` plugin prefixes classes with `rdg-{version}-` (dots→dashes) to avoid cross-version conflicts.\n\n## Testing\n\n- Browser tests use `vitest/browser` + Playwright. `test/setupBrowser.ts` configures `page.render()` via `vitest-browser-react` and registers custom locators via `locators.extend()` — prefer `page.getGrid()`, `page.getCell({ name })`, `page.getRow()`, `page.getHeaderCell()`, `page.getActiveCell()`, etc. over raw `page.getByRole()`.\n- Test helpers in `test/browser/utils.tsx`: `setup()`, `getRowWithCell()`, `getCellsAtRowIndex()`, `validateCellPosition()`, `scrollGrid()`, `safeTab()`, `testCount()`, `testRowCount()`.\n- `test/failOnConsole.ts` fails tests on unexpected console warnings/errors.\n- **Never run visual regression tests** — screenshots are environment-dependent so visual regression tests must run in CI only.\n\n## Validation\n\nRun before submitting changes: `node --run typecheck`, `node --run eslint`, `node --run format`, `node --run test`.\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","title":"AGENTS.md","content":"# AGENTS.md\n\n## Commands\n\n```shell\nnpm ci                       # setup\nnode --run build             # library → lib/\nnode --run typecheck         # tsc --build\nnode --run eslint            # eslint --max-warnings 0\nnode --run eslint:fix        # eslint --fix\nnode --run format            # oxfmt\nnode --run test              # vitest (browser + node)\nnode --run test -- <path>    # single test, e.g. test/browser/rowHeight.test.ts\n```\n\n## Architecture\n\nreact-data-grid is a data grid with **zero `dependencies`** (peer dependency: React 19.2+). It uses CSS Grid for layout and implements row/column virtualization in JS.\n\n```text\nsrc/\n  index.ts            # public API surface; all exports go through here\n  DataGrid.tsx        # main <DataGrid> component (generic: <R, SR, K>)\n  TreeDataGrid.tsx    # wraps DataGrid, adds row grouping (role=\"treegrid\")\n  types.ts            # shared type definitions (e.g. Column, CalculatedColumn, render props, events)\n  hooks/              # shared custom React hooks\n  utils/              # pure utilities (e.g. keyboard, DOM, events, colSpan, style)\n  style/              # build-time CSS via ecij tagged templates; layers.css declares @layer order\n  cellRenderers/      # default cell renderers (e.g. checkbox, toggleGroup, value)\n  editors/            # default editors (renderTextEditor)\ntest/\n  browser/            # vitest browser-mode tests (Playwright, Chromium + Firefox)\n  node/               # vitest SSR tests (Node.js)\n  visual/             # vitest visual regression tests (CI-only — never run locally)\nwebsite/              # demo site (Vite + TanStack Router)\n```\n\n## Conventions\n\n- **Public API** — all exports flow through `src/index.ts`. Keep `README.md` in sync with user-facing changes.\n- **Docs** — keep `AGENTS.md` in sync with tooling, conventions, or architectural changes.\n- **Default renderers** — `DataGridDefaultRenderersContext` allows overriding default renderers (`renderCheckbox`, `renderSortStatus`, `renderRow`, `renderCell`, `noRowsFallback`) without prop-drilling.\n- **TypeScript strict** with `exactOptionalPropertyTypes`, `verbatimModuleSyntax`, `erasableSyntaxOnly`. Distinguish missing properties from `undefined` values.\n- **`Maybe<T>`** (`T | undefined | null`) — used for all nullable column/render props. Do not use bare `T | undefined`.\n- **`NoInfer<>`** — wrap callback parameters to prevent reverse type inference into component generics.\n- **CSS layers** — all styles live in nested `@layer rdg.<Name>` sub-layers (e.g. `rdg.Cell`, `rdg.Row`; declared in `src/style/layers.css`). Use `ecij` `css` tagged templates (build-time extraction, not runtime CSS-in-JS). Co-locate styles in component files; `src/style/` is for shared styles.\n- **Dual classnames** — components apply both a semantic class (`rdg-cell`) and a generated hash. Preserve both.\n- **Light/dark mode** — handled via CSS `light-dark()` + `color-scheme`, not JS.\n- **Accessibility first** — ARIA attributes (e.g. `aria-colindex`, `aria-rowindex`, `aria-selected`, roles) are required. Tests query by role.\n- **Formatting** — oxfmt (not Prettier). **Linting** — ESLint (must pass with zero warnings).\n- **Build** — tsdown bundles library to `lib/`; `ecij` plugin prefixes classes with `rdg-{version}-` (dots→dashes) to avoid cross-version conflicts.\n\n## Testing\n\n- Browser tests use `vitest/browser` + Playwright. `test/setupBrowser.ts` configures `page.render()` via `vitest-browser-react` and registers custom locators via `locators.extend()` — prefer `page.getGrid()`, `page.getCell({ name })`, `page.getRow()`, `page.getHeaderCell()`, `page.getActiveCell()`, etc. over raw `page.getByRole()`.\n- Test helpers in `test/browser/utils.tsx`: `setup()`, `getRowWithCell()`, `getCellsAtRowIndex()`, `validateCellPosition()`, `scrollGrid()`, `safeTab()`, `testCount()`, `testRowCount()`.\n- `test/failOnConsole.ts` fails tests on unexpected console warnings/errors.\n- **Never run visual regression tests** — screenshots are environment-dependent so visual regression tests must run in CI only.\n\n## Validation\n\nRun before submitting changes: `node --run typecheck`, `node --run eslint`, `node --run format`, `node --run test`.\n","category":"root","tokens":1044}]}