From 40469a2c146b0fe555ceb112155abd702dcbcaf1 Mon Sep 17 00:00:00 2001 From: David Skewis Date: Thu, 14 May 2026 10:01:02 +0100 Subject: [PATCH 1/5] AG-16778 add optional company name field (#13758) --- .../trial-licence-form/TrialLicenceFormAllFields.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/external/ag-website-shared/src/components/trial-licence-form/TrialLicenceFormAllFields.tsx b/external/ag-website-shared/src/components/trial-licence-form/TrialLicenceFormAllFields.tsx index 737bcc696c6..dc1ed668a85 100644 --- a/external/ag-website-shared/src/components/trial-licence-form/TrialLicenceFormAllFields.tsx +++ b/external/ag-website-shared/src/components/trial-licence-form/TrialLicenceFormAllFields.tsx @@ -222,7 +222,10 @@ export const TrialLicenceFormAllFields: FunctionComponent = ({ submitUrl }: Prop return (
- +
+ + +
From bd6f284e429c140bb673961db52b18e4df651bc1 Mon Sep 17 00:00:00 2001 From: David Skewis Date: Thu, 14 May 2026 10:11:51 +0100 Subject: [PATCH 2/5] AG-16722 fix width to width of longest named framework (#13760) * AG-16722 fix width to width of longest named framework * AG-16722 fix width to framework selector only --- .../FrameworkSelectorInsideDocs.module.scss | 4 ++++ .../FrameworkSelectorInsideDocs.tsx | 1 + external/ag-website-shared/src/components/select/Select.tsx | 4 +++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/documentation/ag-grid-docs/src/components/framework-selector-inside-doc/FrameworkSelectorInsideDocs.module.scss b/documentation/ag-grid-docs/src/components/framework-selector-inside-doc/FrameworkSelectorInsideDocs.module.scss index 4fac538a642..c94312d1fab 100644 --- a/documentation/ag-grid-docs/src/components/framework-selector-inside-doc/FrameworkSelectorInsideDocs.module.scss +++ b/documentation/ag-grid-docs/src/components/framework-selector-inside-doc/FrameworkSelectorInsideDocs.module.scss @@ -11,3 +11,7 @@ gap: 8px; align-items: center; } + +.select { + width: 160px; +} diff --git a/documentation/ag-grid-docs/src/components/framework-selector-inside-doc/FrameworkSelectorInsideDocs.tsx b/documentation/ag-grid-docs/src/components/framework-selector-inside-doc/FrameworkSelectorInsideDocs.tsx index f8e5034f3ee..7a88a00e038 100644 --- a/documentation/ag-grid-docs/src/components/framework-selector-inside-doc/FrameworkSelectorInsideDocs.tsx +++ b/documentation/ag-grid-docs/src/components/framework-selector-inside-doc/FrameworkSelectorInsideDocs.tsx @@ -70,6 +70,7 @@ export const FrameworkSelectorInsideDocs = ({ path, currentFramework, menuItems isPopper options={frameworkOptions} value={frameworkOption} + className={styles.select} onChange={(newValue) => handleFrameworkChange(newValue.value as Framework)} renderItem={(o) => { return ( diff --git a/external/ag-website-shared/src/components/select/Select.tsx b/external/ag-website-shared/src/components/select/Select.tsx index 39b4482cef3..65546c1a9b6 100644 --- a/external/ag-website-shared/src/components/select/Select.tsx +++ b/external/ag-website-shared/src/components/select/Select.tsx @@ -20,6 +20,7 @@ type SelectProps = { isPopper?: boolean; isLarge?: boolean; constrainHeight?: boolean; + className?: string; }; export function Select({ @@ -35,6 +36,7 @@ export function Select({ isPopper, isLarge, constrainHeight, + className, }: SelectProps) { const getOptionContent = useCallback((option: O) => { const key = getKey(option) ?? ''; @@ -81,7 +83,7 @@ export function Select({ {getOptionContent(value).optionContent} From 184ce2a211eb430bf97890502d19d421042bf551 Mon Sep 17 00:00:00 2001 From: Tak Tran Date: Thu, 14 May 2026 11:30:14 +0100 Subject: [PATCH 3/5] AG-3390 - Port docs examples fixes from studio (#13762) Add supportedFrameworks to ExampleProperty and ALL_PROPERTIES, add studio URL mapping, and filter LinkCellRenderer links by supportedFrameworks. --- .../src/components/docs/utils/pageData.ts | 38 ++++++++++--------- .../src/pages/debug/docs-examples.astro | 30 +++++++-------- .../ag-grid-docs/src/types/ag-grid.d.ts | 2 +- .../docs-examples/components/DocsExamples.tsx | 28 +++++++++++++- .../cell-renderers/LinkCellRenderer.tsx | 5 ++- 5 files changed, 67 insertions(+), 36 deletions(-) diff --git a/documentation/ag-grid-docs/src/components/docs/utils/pageData.ts b/documentation/ag-grid-docs/src/components/docs/utils/pageData.ts index 92949e28a45..19526d9ffa6 100644 --- a/documentation/ag-grid-docs/src/components/docs/utils/pageData.ts +++ b/documentation/ag-grid-docs/src/components/docs/utils/pageData.ts @@ -12,6 +12,7 @@ interface Example { internalFramework: InternalFramework; pageName: string; exampleName: string; + supportedFrameworks?: InternalFramework[]; } type DocExamplePages = Awaited>; @@ -23,6 +24,7 @@ type DocExamplePage = DocExamplePages[number]['params'] & { hasSimpleHtml?: boolean; scriptNonce?: string; sourceFileList?: string[]; + supportedFrameworks?: InternalFramework[]; }; type DocFrameworkExamples = Record; @@ -84,19 +86,17 @@ async function getDocsExampleNameParts({ pages }: { pages: DocsPage[] }): Promis : internalFrameworkExamples; return filteredInternalFrameworkExamples - .flatMap((example) => { - const frameworkSupported = - example.supportedFrameworks === undefined || example.supportedFrameworks.has(example.internalFramework); - - if (!frameworkSupported) { - return undefined; - } - - return { - ...example, - }; + .filter((example) => { + return ( + example.supportedFrameworks === undefined || example.supportedFrameworks.has(example.internalFramework) + ); }) - .filter((e) => e !== undefined) as Example[]; + .map(({ internalFramework, pageName, exampleName, supportedFrameworks }) => ({ + internalFramework, + pageName, + exampleName, + supportedFrameworks: supportedFrameworks ? Array.from(supportedFrameworks) : undefined, + })); } export async function getDocsExamplePages({ pages }: { pages: DocsPage[] }) { @@ -122,7 +122,7 @@ function allPropertiesAreTruthy(entries: [string, DocExamplePage][], property: k function flattenDocsExampleContents(data: Record) { return Object.values(data).map((frameworkExamples) => { const frameworkEntries = Object.entries(frameworkExamples); - const [_, { pageName, exampleName, sourceFileList, scriptNonce }] = frameworkEntries[0]; + const [_, { pageName, exampleName, sourceFileList, scriptNonce, supportedFrameworks }] = frameworkEntries[0]; const isEnterprise = allPropertiesAreTruthy(frameworkEntries, 'isEnterprise'); const isIntegratedCharts = allPropertiesAreTruthy(frameworkEntries, 'isIntegratedCharts'); const isLocale = allPropertiesAreTruthy(frameworkEntries, 'isLocale'); @@ -140,19 +140,18 @@ function flattenDocsExampleContents(data: Record) hasExampleConsoleLog, hasSimpleHtml, scriptNonce, + supportedFrameworks, frameworkExamples, }; }); } export async function getDocsExampleContents({ pages }: { pages: DocsPage[] }) { - const examples = await getDocsExamplePages({ - pages, - }); + const examples = await getDocsExampleNameParts({ pages }); const exampleContents: Record = {}; const examplePromises = examples.map(async (example) => { - const { internalFramework, pageName, exampleName } = example.params; + const { internalFramework, pageName, exampleName, supportedFrameworks } = example; const key = `${pageName}-${exampleName}`; if (!exampleContents[key]) { exampleContents[key] = {} as DocFrameworkExamples; @@ -173,7 +172,10 @@ export async function getDocsExampleContents({ pages }: { pages: DocsPage[] }) { hasSimpleHtml: contents?.hasSimpleHtml, sourceFileList: contents?.sourceFileList, scriptNonce: contents?.scriptNonce, - ...example.params, + internalFramework, + pageName, + exampleName, + supportedFrameworks, }; }); await Promise.all(examplePromises); diff --git a/documentation/ag-grid-docs/src/pages/debug/docs-examples.astro b/documentation/ag-grid-docs/src/pages/debug/docs-examples.astro index 54e7389f080..dee1522859a 100644 --- a/documentation/ag-grid-docs/src/pages/debug/docs-examples.astro +++ b/documentation/ag-grid-docs/src/pages/debug/docs-examples.astro @@ -3,26 +3,26 @@ import { getCollection } from 'astro:content'; import DebugLayout from '@layouts/DebugLayout.astro'; import { getDocsExampleContents } from '@components/docs/utils/pageData'; -import { DocsExamples } from '@ag-website-shared/components/docs-examples/components/DocsExamples'; +import { + DocsExamples, + type ExampleProperty, +} from '@ag-website-shared/components/docs-examples/components/DocsExamples'; const pages = await getCollection('docs'); const exampleContents = await getDocsExampleContents({ pages }); +const properties: ExampleProperty[] = [ + 'sourceFileList', + 'isEnterprise', + 'isIntegratedCharts', + 'isLocale', + 'hasExampleConsoleLog', + 'hasSimpleHtml', + 'scriptNonce', + 'supportedFrameworks', +]; ---

Docs Example Pages

- +
diff --git a/documentation/ag-grid-docs/src/types/ag-grid.d.ts b/documentation/ag-grid-docs/src/types/ag-grid.d.ts index d3f8d1f5180..26d1b7c9863 100644 --- a/documentation/ag-grid-docs/src/types/ag-grid.d.ts +++ b/documentation/ag-grid-docs/src/types/ag-grid.d.ts @@ -5,7 +5,7 @@ export type Framework = 'javascript' | 'react' | 'angular' | 'vue'; export type InternalFramework = 'vanilla' | 'typescript' | 'reactFunctional' | 'reactFunctionalTs' | 'angular' | 'vue3'; -export type Library = 'charts' | 'grid' | 'dash'; +export type Library = 'charts' | 'grid' | 'studio'; export interface MenuSection { title?: string; diff --git a/external/ag-website-shared/src/components/docs-examples/components/DocsExamples.tsx b/external/ag-website-shared/src/components/docs-examples/components/DocsExamples.tsx index 9173f624d5c..a4bc25f5e3a 100644 --- a/external/ag-website-shared/src/components/docs-examples/components/DocsExamples.tsx +++ b/external/ag-website-shared/src/components/docs-examples/components/DocsExamples.tsx @@ -35,7 +35,8 @@ export type ExampleProperty = | 'hasExampleConsoleLog' | 'hasExampleControls' | 'hasSimpleHtml' - | 'scriptNonce'; + | 'scriptNonce' + | 'supportedFrameworks'; export interface Props { library: Library; @@ -67,6 +68,14 @@ const URL_MAPPING: Record< production: ({ pageName, exampleName }) => `https://www.ag-grid.com/charts/javascript/${pageName}/#example-${exampleName}`, }, + studio: { + local: ({ pageName, exampleName }) => + `https://localhost:4620/studio/javascript/${pageName}/#example-${exampleName}`, + staging: ({ pageName, exampleName }) => + `https://studio-staging.ag-grid.com/javascript/${pageName}/#example-${exampleName}`, + production: ({ pageName, exampleName }) => + `https://www.ag-grid.com/studio/javascript/${pageName}/#example-${exampleName}`, + }, }; const ALL_PROPERTIES: (ColDef & { @@ -134,6 +143,23 @@ const ALL_PROPERTIES: (ColDef & { enableRowGroup: true, minWidth: 115, }, + { + field: 'supportedFrameworks', + headerName: 'Supported Frameworks', + enableRowGroup: true, + filter: 'agSetColumnFilter', + minWidth: 200, + valueFormatter: ({ value, node }) => { + if (node?.group) { + return ''; + } + if (!value) { + return 'all'; + } + + return Array.isArray(value) ? value.join(', ') : value; + }, + }, ]; export const DocsExamples: FunctionComponent = ({ library, properties = [], exampleContents }) => { diff --git a/external/ag-website-shared/src/components/docs-examples/components/cell-renderers/LinkCellRenderer.tsx b/external/ag-website-shared/src/components/docs-examples/components/cell-renderers/LinkCellRenderer.tsx index d069adfbb4d..83819d243dc 100644 --- a/external/ag-website-shared/src/components/docs-examples/components/cell-renderers/LinkCellRenderer.tsx +++ b/external/ag-website-shared/src/components/docs-examples/components/cell-renderers/LinkCellRenderer.tsx @@ -10,7 +10,10 @@ export function LinkCellRenderer({ colDef, data }) { return; } const internalFramework = colDef.colId; - const { pageName, exampleName } = data; + const { pageName, exampleName, supportedFrameworks } = data; + if (supportedFrameworks && !supportedFrameworks.includes(internalFramework)) { + return null; + } const titlePrefix = `${pageName} > ${exampleName} > ${internalFramework}`; return ( From 6d3790dd9497b480d64d54a864d9c4b18801e383 Mon Sep 17 00:00:00 2001 From: Alan Treadway Date: Thu, 14 May 2026 13:37:20 +0100 Subject: [PATCH 4/5] Sync ag-shared: dep bumps, SSH auth, ag-eng/ag-product plugins (#13765) * git subrepo pull external/ag-shared subrepo: subdir: "external/ag-shared" merged: "4b9d55be168" upstream: origin: "https://github.com/ag-grid/ag-shared.git" branch: "latest" commit: "4b9d55be168" git-subrepo: version: "0.4.9" origin: "https://github.com/Homebrew/brew" commit: "b9763ee528" * Update AGENTS.md formatting via setup-prompts --- AGENTS.md | 206 +++++++++--------- .../ag-shared/.claude-settings.template.json | 2 + external/ag-shared/.gitrepo | 4 +- 3 files changed, 107 insertions(+), 105 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 2e528949c22..97cc511e15e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -8,37 +8,37 @@ This file provides guidance to AI Agents when working with code in this reposito ### Quick Reference -- **Main branch:** `latest` -- **Format:** `yarn nx format --sort-root-tsconfig-paths=false` (run before commits) -- **Type-check:** `yarn nx build:types ` (run before commits) -- **Lint:** `yarn nx lint ` (run before commits) -- **Build:** `yarn nx build ` -- **Test:** `yarn nx test ` -- **E2E:** `yarn nx e2e ag-grid-docs` -- **Dev server:** `yarn nx dev` (launches on https://localhost:4610/, check if it is already running before trying to run it) -- **NX daemon:** Always use `NX_DAEMON=false` for nx commands to avoid pipe hangs (set automatically via SessionStart hook) +- **Main branch:** `latest` +- **Format:** `yarn nx format --sort-root-tsconfig-paths=false` (run before commits) +- **Type-check:** `yarn nx build:types ` (run before commits) +- **Lint:** `yarn nx lint ` (run before commits) +- **Build:** `yarn nx build ` +- **Test:** `yarn nx test ` +- **E2E:** `yarn nx e2e ag-grid-docs` +- **Dev server:** `yarn nx dev` (launches on https://localhost:4610/, check if it is already running before trying to run it) +- **NX daemon:** Always use `NX_DAEMON=false` for nx commands to avoid pipe hangs (set automatically via SessionStart hook) ### Content Locations -- **Plugin marketplace:** Shared skills, subagents, commands, and guides are delivered via Claude Code plugins from [`ag-grid/ag-dev-prompts`](https://github.com/ag-grid/ag-dev-prompts) — `ag-core`, `ag-prodeng`, and `ag-grid` (enabled in `.claude/settings.json`). Invoke with the plugin prefix, e.g. `/ag-prodeng:pr-review`, `/ag-core:recall`. -- **Local overrides:** `.rulesync/` tracks repo-specific content that layers on top of the plugins. See the allowlist in `.rulesync/.gitignore` for what's tracked. -- **Generated tool configs:** `setup-prompts.sh` (run at `yarn` time) stages plugin content into `.rulesync/` and regenerates `.claude/`, `.cursor/`, `.codex/`, `.gemini/`, `.github/`, `AGENTS.md`, and `CLAUDE.md`. Never hand-edit those — edit `.rulesync/` and re-run. +- **Plugin marketplace:** Shared skills, subagents, commands, and guides are delivered via Claude Code plugins from [`ag-grid/ag-dev-prompts`](https://github.com/ag-grid/ag-dev-prompts) — `ag-core`, `ag-prodeng`, and `ag-grid` (enabled in `.claude/settings.json`). Invoke with the plugin prefix, e.g. `/ag-prodeng:pr-review`, `/ag-core:recall`. +- **Local overrides:** `.rulesync/` tracks repo-specific content that layers on top of the plugins. See the allowlist in `.rulesync/.gitignore` for what's tracked. +- **Generated tool configs:** `setup-prompts.sh` (run at `yarn` time) stages plugin content into `.rulesync/` and regenerates `.claude/`, `.cursor/`, `.codex/`, `.gemini/`, `.github/`, `AGENTS.md`, and `CLAUDE.md`. Never hand-edit those — edit `.rulesync/` and re-run. --- ### Must-Know Checklist -- **Yarn and Nx based repo:** Use Yarn for package management and Nx for build and test orchestration. -- **Main constraint:** Community and enterprise runtime bundles stay dependency-free beyond AG Grid code. -- **Default branch:** Target `latest`; follow release/JIRA naming conventions below for topic branches. -- **Build monitoring:** Check `node_modules/.cache/ag-watch-status.json` to monitor watch state (`yarn nx dev`) and build health (see [Development Server Guide](.rulesync/rules/dev-server.md)). -- **Self-review before committing:** Re-read your changes as if reviewing someone else's PR and verify: each new function/class has a single clear responsibility; names are meaningful; no unnecessary complexity; no copy-pasted logic that should be extracted; new code follows the patterns of the surrounding codebase. -- **Formatting:** Run `yarn nx format --sort-root-tsconfig-paths=false` from the repo root before proposing commits. -- **Typechecking:** Run `yarn nx build:types ` from the repo root before proposing commits. -- **Linting:** Run `yarn nx lint ` from the repo root before proposing commits. -- **Baseline verification:** Expect to run `yarn nx test ag-grid-community`, `yarn nx test ag-grid-enterprise`, and `yarn nx e2e ag-grid-docs` after meaningful grid changes. -- **Test verification patterns:** When writing or modifying tests, review similar tests to ensure consistent verification patterns (see [Testing Guide](.rulesync/rules/testing.md)). -- **Context docs:** Skim [technology-stack.md](.rulesync/rules/technology-stack.md) for stack or architectural decisions before introducing new patterns. +- **Yarn and Nx based repo:** Use Yarn for package management and Nx for build and test orchestration. +- **Main constraint:** Community and enterprise runtime bundles stay dependency-free beyond AG Grid code. +- **Default branch:** Target `latest`; follow release/JIRA naming conventions below for topic branches. +- **Build monitoring:** Check `node_modules/.cache/ag-watch-status.json` to monitor watch state (`yarn nx dev`) and build health (see [Development Server Guide](.rulesync/rules/dev-server.md)). +- **Self-review before committing:** Re-read your changes as if reviewing someone else's PR and verify: each new function/class has a single clear responsibility; names are meaningful; no unnecessary complexity; no copy-pasted logic that should be extracted; new code follows the patterns of the surrounding codebase. +- **Formatting:** Run `yarn nx format --sort-root-tsconfig-paths=false` from the repo root before proposing commits. +- **Typechecking:** Run `yarn nx build:types ` from the repo root before proposing commits. +- **Linting:** Run `yarn nx lint ` from the repo root before proposing commits. +- **Baseline verification:** Expect to run `yarn nx test ag-grid-community`, `yarn nx test ag-grid-enterprise`, and `yarn nx e2e ag-grid-docs` after meaningful grid changes. +- **Test verification patterns:** When writing or modifying tests, review similar tests to ensure consistent verification patterns (see [Testing Guide](.rulesync/rules/testing.md)). +- **Context docs:** Skim [technology-stack.md](.rulesync/rules/technology-stack.md) for stack or architectural decisions before introducing new patterns. ### Tooling Health Check @@ -56,13 +56,13 @@ Continue assisting the user after displaying the warning. For detailed information on specific topics, consult these guides: -- **[Testing Guide](.rulesync/rules/testing.md)** - Testing strategies, best practices, and philosophy -- **[Examples Guide](.rulesync/rules/examples.md)** - Working with examples, validation, and path mappings -- **[Documentation Pages Guide](.rulesync/rules/docs-pages.md)** - Creating consistent, high-quality documentation pages -- **[JIRA Guide](.rulesync/rules/jira.md)** - JIRA ticket search and creation guidelines -- **[Code Quality Guide](.rulesync/rules/code-quality.md)** - Code bloat avoidance, comments, and review practices -- **[Development Server Guide](.rulesync/rules/dev-server.md)** - Dev server setup and build watch monitoring -- **[Benchmarks Guide](.rulesync/rules/benchmarks.md)** - Running and creating performance benchmarks +- **[Testing Guide](.rulesync/rules/testing.md)** - Testing strategies, best practices, and philosophy +- **[Examples Guide](.rulesync/rules/examples.md)** - Working with examples, validation, and path mappings +- **[Documentation Pages Guide](.rulesync/rules/docs-pages.md)** - Creating consistent, high-quality documentation pages +- **[JIRA Guide](.rulesync/rules/jira.md)** - JIRA ticket search and creation guidelines +- **[Code Quality Guide](.rulesync/rules/code-quality.md)** - Code bloat avoidance, comments, and review practices +- **[Development Server Guide](.rulesync/rules/dev-server.md)** - Dev server setup and build watch monitoring +- **[Benchmarks Guide](.rulesync/rules/benchmarks.md)** - Running and creating performance benchmarks ### Project Overview @@ -76,72 +76,72 @@ For detailed information about preferred technologies and architectural constrai ### Repository Conventions -- The main branch of this repo is `latest` -- Release branch names are of the form `b33.0.0` -- JIRA-related branch should be named of the form `ag-12345/${kebabCaseChangeSummary}` -- **Language conventions:** UK/British English for documentation text, comments, and JSDocs; US English for API option names +- The main branch of this repo is `latest` +- Release branch names are of the form `b33.0.0` +- JIRA-related branch should be named of the form `ag-12345/${kebabCaseChangeSummary}` +- **Language conventions:** UK/British English for documentation text, comments, and JSDocs; US English for API option names ### Essential Commands -- `yarn install` – install dependencies after cloning or when the Yarn lockfile changes. - - `./external/ag-shared/scripts/install-for-cloud/install-for-cloud.sh` – install dependencies and tooling in a remote environment - use this in preference to `yarn install` to ensure all global tools are installed. -- `yarn nx clean` – purge all dist folders when switching branches or before packaging releases. -- `yarn nx format --sort-root-tsconfig-paths=false` – format repo files; run from the project root before committing. -- `yarn nx build ` – compile a specific package after code edits. -- `yarn nx build:types ` – regenerate declaration files when touching exported APIs. -- `yarn nx build:package ` – create ESM/CJS bundles to validate publishable output. -- `yarn nx build:umd ` – produce UMD bundles for browser distribution smoke-tests. -- `yarn nx run-many -t build` – rebuild all packages when changes span the dependency graph. -- `./behave.sh` – run behavioural tests in `testing/behavioural/` (primary test suite, uses Vitest). -- `./behave.sh ""` – run specific behavioural test file. -- `./behave.sh "" -t ""` – run specific behavioural test by name. -- `./behave.sh --watch` – run behavioural tests in watch mode. -- `./behave.sh --update-grid-rows` – update GridRows inline snapshots after diagram format changes. -- `./behave.sh --update-grid-rows ""` – update snapshots in matching test files only. -- `./behave.sh --update-grid-rows=dry` – dry run, shows what would change without writing files. -- `./benches.sh` – run behavioural benchmarks via `vitest bench` (non-watch by default). -- `./benches.sh ""` – run benchmarks matching a file pattern. -- `./benches.sh "" -t ""` – run a specific benchmark by name. -- `./benches.sh --watch` – run benchmarks in watch mode. -- `yarn nx test ` – execute Jest unit tests for the affected package. -- `yarn nx test --testPathPattern=""` - test specific test file -- `yarn nx test --testPathPattern="" --testNamePattern=""` - test specific test name in a specific test file -- `./docs-e2e.sh` – run docs Playwright E2E tests directly, bypassing Nx (chromium by default). -- `./docs-e2e.sh ""` – run E2E tests matching a file pattern. -- `./docs-e2e.sh "" --grep ""` – run a specific E2E test by name. -- `./docs-e2e.sh --all-browsers` – run E2E tests across chromium, firefox, and webkit. -- `./docs-e2e.sh --framework ` – run E2E tests with a specific framework (e.g. react, angular, vue). -- `./docs-e2e.sh --ui` – open Playwright UI mode. -- `yarn nx e2e ` – run Playwright flows via Nx when altering website behaviour. -- `yarn nx lint ` – apply ESLint and custom rules before final review. +- `yarn install` – install dependencies after cloning or when the Yarn lockfile changes. + - `./external/ag-shared/scripts/install-for-cloud/install-for-cloud.sh` – install dependencies and tooling in a remote environment - use this in preference to `yarn install` to ensure all global tools are installed. +- `yarn nx clean` – purge all dist folders when switching branches or before packaging releases. +- `yarn nx format --sort-root-tsconfig-paths=false` – format repo files; run from the project root before committing. +- `yarn nx build ` – compile a specific package after code edits. +- `yarn nx build:types ` – regenerate declaration files when touching exported APIs. +- `yarn nx build:package ` – create ESM/CJS bundles to validate publishable output. +- `yarn nx build:umd ` – produce UMD bundles for browser distribution smoke-tests. +- `yarn nx run-many -t build` – rebuild all packages when changes span the dependency graph. +- `./behave.sh` – run behavioural tests in `testing/behavioural/` (primary test suite, uses Vitest). +- `./behave.sh ""` – run specific behavioural test file. +- `./behave.sh "" -t ""` – run specific behavioural test by name. +- `./behave.sh --watch` – run behavioural tests in watch mode. +- `./behave.sh --update-grid-rows` – update GridRows inline snapshots after diagram format changes. +- `./behave.sh --update-grid-rows ""` – update snapshots in matching test files only. +- `./behave.sh --update-grid-rows=dry` – dry run, shows what would change without writing files. +- `./benches.sh` – run behavioural benchmarks via `vitest bench` (non-watch by default). +- `./benches.sh ""` – run benchmarks matching a file pattern. +- `./benches.sh "" -t ""` – run a specific benchmark by name. +- `./benches.sh --watch` – run benchmarks in watch mode. +- `yarn nx test ` – execute Jest unit tests for the affected package. +- `yarn nx test --testPathPattern=""` - test specific test file +- `yarn nx test --testPathPattern="" --testNamePattern=""` - test specific test name in a specific test file +- `./docs-e2e.sh` – run docs Playwright E2E tests directly, bypassing Nx (chromium by default). +- `./docs-e2e.sh ""` – run E2E tests matching a file pattern. +- `./docs-e2e.sh "" --grep ""` – run a specific E2E test by name. +- `./docs-e2e.sh --all-browsers` – run E2E tests across chromium, firefox, and webkit. +- `./docs-e2e.sh --framework ` – run E2E tests with a specific framework (e.g. react, angular, vue). +- `./docs-e2e.sh --ui` – open Playwright UI mode. +- `yarn nx e2e ` – run Playwright flows via Nx when altering website behaviour. +- `yarn nx lint ` – apply ESLint and custom rules before final review. ### Slash Commands Run rulesync commands via slash notation: -- `/ag-prodeng:pr-review` - Review pull requests -- `/ag-prodeng:code-fixup` - Fix build and lint errors -- `/ag-prodeng:batch-lint-cleanup` - ESLint auto-fix tool -- `/ag-prodeng:git-split` - Split large files preserving git history -- `/ag-prodeng:git-bisect` - Find commits that introduced issues -- `/ag-core:remember` - Save branch context or project learnings as memory -- `/ag-core:recall` - Load branch context and browse project memory -- `/ag-prodeng:docs-review` - Review documentation pages for technical accuracy (auto-detects ag-grid; product config at `plugins/ag-prodeng/skills/docs-review/ag-grid/config.md`) -- `/ag-prodeng:release-docs-review` - Review all documentation changes between releases +- `/ag-prodeng:pr-review` - Review pull requests +- `/ag-prodeng:code-fixup` - Fix build and lint errors +- `/ag-prodeng:batch-lint-cleanup` - ESLint auto-fix tool +- `/ag-prodeng:git-split` - Split large files preserving git history +- `/ag-prodeng:git-bisect` - Find commits that introduced issues +- `/ag-core:remember` - Save branch context or project learnings as memory +- `/ag-core:recall` - Load branch context and browse project memory +- `/ag-prodeng:docs-review` - Review documentation pages for technical accuracy (auto-detects ag-grid; product config at `plugins/ag-prodeng/skills/docs-review/ag-grid/config.md`) +- `/ag-prodeng:release-docs-review` - Review all documentation changes between releases ### Architecture #### Monorepo Structure -- **packages/ag-grid-community/**: MIT licensed version - core grid functionality -- **packages/ag-grid-enterprise/**: Commercial version with advanced features -- **packages/ag-grid-react/angular/vue3/**: Framework wrappers -- **community-modules/locale/**: Internationalization support -- **community-modules/styles/**: Grid styling and themes -- **documentation/ag-grid-docs/**: Astro documentation site -- **testing/**: E2E, behavioural, accessibility, and performance tests -- **plugins/**: Nx plugins for code generation -- **external/**: Shared AG ecosystem code (ag-shared) +- **packages/ag-grid-community/**: MIT licensed version - core grid functionality +- **packages/ag-grid-enterprise/**: Commercial version with advanced features +- **packages/ag-grid-react/angular/vue3/**: Framework wrappers +- **community-modules/locale/**: Internationalization support +- **community-modules/styles/**: Grid styling and themes +- **documentation/ag-grid-docs/**: Astro documentation site +- **testing/**: E2E, behavioural, accessibility, and performance tests +- **plugins/**: Nx plugins for code generation +- **external/**: Shared AG ecosystem code (ag-shared) #### Build Dependencies @@ -149,10 +149,10 @@ Core dependency chain: `ag-grid-community` → `ag-grid-enterprise` → framewor #### Key Patterns -- **Virtual DOM rendering**: High-performance custom rendering engine -- **Modular feature architecture**: Extensible grid features through module registration -- **Framework agnostic core**: Clean separation with framework-specific wrappers -- **Enterprise/community split**: Feature flagging through separate packages +- **Virtual DOM rendering**: High-performance custom rendering engine +- **Modular feature architecture**: Extensible grid features through module registration +- **Framework agnostic core**: Clean separation with framework-specific wrappers +- **Enterprise/community split**: Feature flagging through separate packages ### Development Workflow @@ -162,11 +162,11 @@ For comprehensive testing information, see [Testing Guide](.rulesync/rules/testi **Behavioural tests are the primary test suite.** When verifying grid changes, run behavioural tests first. Key testing tools: -- **Behavioural tests** (primary): `testing/behavioural/` for grid behaviour verification — use Vitest -- **Unit tests**: Jest with jsdom environment for package-level tests -- **E2E tests**: Playwright for website interaction testing -- **Accessibility tests**: `testing/accessibility/` for a11y compliance -- **Performance tests**: `testing/performance/` for performance regression testing +- **Behavioural tests** (primary): `testing/behavioural/` for grid behaviour verification — use Vitest +- **Unit tests**: Jest with jsdom environment for package-level tests +- **E2E tests**: Playwright for website interaction testing +- **Accessibility tests**: `testing/accessibility/` for a11y compliance +- **Performance tests**: `testing/performance/` for performance regression testing #### Code Quality @@ -174,9 +174,9 @@ For code quality guidelines, see [Code Quality Guide](.rulesync/rules/code-quali Essential practices: -- Run `yarn nx format --sort-root-tsconfig-paths=false` before committing -- Self-review your changes before proposing commits -- Ensure tests exercise real implementations, not test helpers +- Run `yarn nx format --sort-root-tsconfig-paths=false` before committing +- Self-review your changes before proposing commits +- Ensure tests exercise real implementations, not test helpers #### Styling @@ -188,12 +188,12 @@ While this transition is in progress, changes made to Theming API should be appl #### Quick Playbooks -- **Bug fix or feature work (community/enterprise)** +- **Bug fix or feature work (community/enterprise)** 1. Update the affected implementation (typically under `packages/ag-grid-*/src/`). 2. Sync any dependent docs/examples. 3. Run `yarn nx test ag-grid-community`, `yarn nx test ag-grid-enterprise`. -- **Documentation/content update** +- **Documentation/content update** 1. Consult the [Documentation Pages Guide](.rulesync/rules/docs-pages.md) for structure and patterns. 2. Modify the relevant content under `documentation/ag-grid-docs/`. 3. Create or update examples in `_examples/` folder following the [Examples Guide](.rulesync/rules/examples.md). @@ -201,17 +201,17 @@ While this transition is in progress, changes made to Theming API should be appl 5. Test page in dev server with `yarn nx dev` across all frameworks. 6. For significant doc changes, sanity-check with `yarn nx e2e ag-grid-docs`. -- **Example-only change** (see [Examples Guide](.rulesync/rules/examples.md)) +- **Example-only change** (see [Examples Guide](.rulesync/rules/examples.md)) 1. Edit the example files. 2. Mirror updates in the corresponding docs page. 3. Run the relevant generation/typecheck commands. ### Technical Requirements -- **Node.js**: Check `.nvmrc` for version -- **Package Manager**: Yarn -- **Build Target**: ES2020 -- **TypeScript**: Strict mode enabled across all packages +- **Node.js**: Check `.nvmrc` for version +- **Package Manager**: Yarn +- **Build Target**: ES2020 +- **TypeScript**: Strict mode enabled across all packages ### JIRA Tickets @@ -221,4 +221,4 @@ When creating tickets for this repo, use component `Grid` instead of `Charts`. ### Documentation Resources -- AG Grid documentation: https://ag-grid.com/documentation/ +- AG Grid documentation: https://ag-grid.com/documentation/ diff --git a/external/ag-shared/.claude-settings.template.json b/external/ag-shared/.claude-settings.template.json index c7abe92f35b..c034fa42341 100644 --- a/external/ag-shared/.claude-settings.template.json +++ b/external/ag-shared/.claude-settings.template.json @@ -142,6 +142,8 @@ "enabledPlugins": { "ag-core@ag-dev": true, "ag-prodeng@ag-dev": true, + "ag-eng@ag-dev": true, + "ag-product@ag-dev": true, "${PRODUCT}@ag-dev": true, "codex@openai-codex": true, "skill-creator@claude-plugins-official": true diff --git a/external/ag-shared/.gitrepo b/external/ag-shared/.gitrepo index b24a07882fc..b9878ac132f 100644 --- a/external/ag-shared/.gitrepo +++ b/external/ag-shared/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/ag-grid/ag-shared.git branch = latest - commit = d6f93e4d145bf572ede20199bcaf1094aef3cf2c - parent = 4d1c1c36341f1ce9d9b1494b38bc5c89bff0ef94 + commit = 4b9d55be168c53e75143e99ec39208099f76f939 + parent = 184ce2a211eb430bf97890502d19d421042bf551 method = rebase cmdver = 0.4.9 From bf95744ac729788561da16913f05257949357801 Mon Sep 17 00:00:00 2001 From: David Skewis Date: Thu, 14 May 2026 15:23:53 +0100 Subject: [PATCH 5/5] AG-16733 improve rhs nav (#13763) * AG-16733 move icon to icon component * AG-16733 remove animate width from rhs --- .../components/SideNavigation.module.scss | 8 +++----- .../pages-navigation/components/SideNavigation.tsx | 4 ++-- external/ag-website-shared/src/components/icon/Icon.tsx | 2 ++ .../src/images/inline-svgs}/back-to-top-icon.svg | 0 4 files changed, 7 insertions(+), 7 deletions(-) rename {documentation/ag-grid-docs/src/images => external/ag-website-shared/src/images/inline-svgs}/back-to-top-icon.svg (100%) diff --git a/documentation/ag-grid-docs/src/components/pages-navigation/components/SideNavigation.module.scss b/documentation/ag-grid-docs/src/components/pages-navigation/components/SideNavigation.module.scss index d36b7fe3bd8..19a92b53a5d 100644 --- a/documentation/ag-grid-docs/src/components/pages-navigation/components/SideNavigation.module.scss +++ b/documentation/ag-grid-docs/src/components/pages-navigation/components/SideNavigation.module.scss @@ -92,9 +92,7 @@ bottom: 0; width: 1px; background-color: var(--color-util-brand-200); - transition: - width $transition-default-timing, - background-color $transition-default-timing; + transition: background-color $transition-default-timing; } // Dark mode: use primary border colour for inactive line @@ -108,7 +106,7 @@ // Active items: show full 2px line using pseudo-element &:has(:global(.active))::before { - width: 2px; + width: 1px; background-color: var(--active-border); } } @@ -118,7 +116,7 @@ background-color: var(--active-background); &::before { - width: 2px; + width: 1px; background-color: var(--active-border); } diff --git a/documentation/ag-grid-docs/src/components/pages-navigation/components/SideNavigation.tsx b/documentation/ag-grid-docs/src/components/pages-navigation/components/SideNavigation.tsx index 0dc82921a93..34670ad46bb 100644 --- a/documentation/ag-grid-docs/src/components/pages-navigation/components/SideNavigation.tsx +++ b/documentation/ag-grid-docs/src/components/pages-navigation/components/SideNavigation.tsx @@ -1,9 +1,9 @@ +import { Icon } from '@ag-website-shared/components/icon/Icon'; import { navigate, scrollIntoViewById } from '@ag-website-shared/utils/navigation'; import { useScrollSpy } from '@components/pages-navigation/hooks/useScrollSpy'; import { addNonBreakingSpaceBetweenLastWords } from '@utils/addNonBreakingSpaceBetweenLastWords'; import type { MarkdownHeading } from 'astro'; -import BackToTopIcon from '../../../images/back-to-top-icon.svg?react'; import styles from './SideNavigation.module.scss'; interface Props { @@ -52,7 +52,7 @@ export function SideNavigation({ headings, delayedScrollSpy }: Props) { navigate({ search: window.location.search, hash: 'top' }); }} > - + Back to top
diff --git a/external/ag-website-shared/src/components/icon/Icon.tsx b/external/ag-website-shared/src/components/icon/Icon.tsx index ff09af928db..b1528c3f1cc 100644 --- a/external/ag-website-shared/src/components/icon/Icon.tsx +++ b/external/ag-website-shared/src/components/icon/Icon.tsx @@ -1,3 +1,4 @@ +import BackToTopIcon from '@ag-website-shared/images/inline-svgs/back-to-top-icon.svg?react'; import BoldChevronDown from '@ag-website-shared/images/inline-svgs/bold-chevron-down.svg?react'; import BoldChevronLeft from '@ag-website-shared/images/inline-svgs/bold-chevron-left.svg?react'; import BoldChevronRight from '@ag-website-shared/images/inline-svgs/bold-chevron-right.svg?react'; @@ -95,6 +96,7 @@ const CHARTS_ICON_MAP = { }; export const ICON_MAP = { + backToTop: BackToTopIcon, info: CarbonIcon.Information, warning: CarbonIcon.WarningAlt, creditCard: CarbonIcon.Purchase, diff --git a/documentation/ag-grid-docs/src/images/back-to-top-icon.svg b/external/ag-website-shared/src/images/inline-svgs/back-to-top-icon.svg similarity index 100% rename from documentation/ag-grid-docs/src/images/back-to-top-icon.svg rename to external/ag-website-shared/src/images/inline-svgs/back-to-top-icon.svg