Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Production Build
BUILD_GRID_VERSION=35.1.0-beta.20260317.135
BUILD_GRID_VERSION=35.1.0-beta.20260318.948
BUILD_CHARTS_VERSION=13.1.0-beta.20260317
ENV=local
NX_BATCH_MODE=true
Expand Down
2 changes: 1 addition & 1 deletion community-modules/locale/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@ag-grid-community/locale",
"version": "35.1.0-beta.20260317.135",
"version": "35.1.0-beta.20260318.948",
"description": "Localisation Module for AG Grid, providing translations in 31 languages.",
"main": "./dist/package/main.cjs.js",
"types": "./dist/types/src/main.d.ts",
Expand Down
2 changes: 1 addition & 1 deletion community-modules/styles/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@ag-grid-community/styles",
"version": "35.1.0-beta.20260317.135",
"version": "35.1.0-beta.20260318.948",
"description": "AG Grid Styles and Themes",
"main": "_index.scss",
"files": [
Expand Down
2 changes: 1 addition & 1 deletion documentation/ag-grid-docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "ag-grid-docs",
"description": "Documentation for AG Grid",
"type": "module",
"version": "35.1.0-beta.20260317.135",
"version": "35.1.0-beta.20260318.948",
"repository": {
"type": "git",
"url": "https://github.com/ag-grid/ag-grid.git"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1000,7 +1000,7 @@
"tabToNextGridContainer": {
"more": {
"name": "Custom Navigation",
"url": "./keyboard-navigation/#custom-navigation"
"url": "./keyboard-navigation/#custom-tabbing-between-grid-containers"
}
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import type { ICellEditorAngularComp } from 'ag-grid-angular';
height: 100%;
box-sizing: border-box;
border: 1px solid transparent;
padding: 0.25rem 0.5rem;
}

.phone-cell-editor:focus {
Expand Down Expand Up @@ -54,6 +55,12 @@ export class PhoneEditor implements ICellEditorAngularComp, AfterViewInit {
setTimeout(() => {
this.inputRef.nativeElement.focus();
this.inputRef.nativeElement.select();

const { cellStartedEdit, eventKey } = this.params;

if (cellStartedEdit && eventKey.length === 1) {
this.inputRef.nativeElement.value = eventKey;
}
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ export class PhoneEditor implements ICellEditorComp<string> {
public afterGuiAttached(): void {
this.eInput.focus();
this.eInput.select();

const { cellStartedEdit, eventKey } = this.params;

if (cellStartedEdit && eventKey.length === 1) {
this.eInput.value = eventKey;
}
}

public getValue(): string {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,12 @@ export default {
nextTick(() => {
this.$refs.input.focus();
this.$refs.input.select();

const { cellStartedEdit, eventKey } = this.params;

if (cellStartedEdit && eventKey.length === 1) {
this.$refs.input.value = eventKey;
}
});
},

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import React, { memo, useCallback, useEffect, useRef, useState } from 'react';
import { useGridCellEditor } from 'ag-grid-react';
import type { CustomCellEditorProps } from 'ag-grid-react';

export default memo(({ value, onValueChange, validate }: CustomCellEditorProps) => {
export default memo(({ value, onValueChange, validate, cellStartedEdit, eventKey }: CustomCellEditorProps) => {
const inputRef = useRef<HTMLInputElement>(null);
const [internalValue, setInternalValue] = useState(value || '');

Expand All @@ -26,6 +26,10 @@ export default memo(({ value, onValueChange, validate }: CustomCellEditorProps)
useEffect(() => {
inputRef.current?.focus();
inputRef.current?.select();

if (cellStartedEdit && eventKey.length === 1) {
setInternalValue(eventKey);
}
}, []);

const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
height: 100%;
box-sizing: border-box;
border: 1px solid transparent;
padding: 0.25rem 0.5rem;
}

.phone-cell-editor:focus {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
height: 100%;
box-sizing: border-box;
border: 1px solid transparent;
padding: 0.25rem 0.5rem;
}

.phone-cell-editor:focus {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,21 +42,21 @@ let lastFocusedCell: CellPosition | null = null;
const tabToNextGridContainer: TabToNextGridContainer<IOlympicData> = (
params: TabToNextGridContainerParams<IOlympicData>
) => {
const { backwards, fromContainer, toContainer, defaultTarget } = params;
const { backwards, previousContainer, nextContainer, defaultTarget } = params;

// route tabbing out of the last grid cell into pagination controls first.
if (!backwards && fromContainer === 'gridBody' && toContainer === 'external') {
if (!backwards && previousContainer === 'gridBody' && nextContainer === 'external') {
return 'pagination';
}

// restore last focused cell when shift-tabbing from pagination back into the grid.
if (backwards && fromContainer === 'pagination' && toContainer === 'gridBody') {
if (backwards && previousContainer === 'pagination' && nextContainer === 'gridBody') {
const target = lastFocusedCell ?? defaultTarget;
return target == null ? undefined : target;
}

// from pagination forwards, allow browser default focus flow to leave the grid.
if (!backwards && fromContainer === 'pagination' && toContainer === 'external') {
if (!backwards && previousContainer === 'pagination' && nextContainer === 'external') {
return false;
}

Expand Down
2 changes: 1 addition & 1 deletion documentation/update-algolia-indices/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "update-algolia-indices",
"version": "35.1.0-beta.20260317.135",
"version": "35.1.0-beta.20260318.948",
"description": "Update algolia indices",
"main": "src/index.ts",
"type": "module",
Expand Down
36 changes: 34 additions & 2 deletions external/ag-shared/scripts/setup-prompts/verify-rulesync.sh
Original file line number Diff line number Diff line change
Expand Up @@ -207,14 +207,15 @@ generate_to_temp() {

# Resolve symlinks in the copied .rulesync to actual file content
# This is needed because symlinks point to relative paths that won't work in temp
for f in "$TEMP_DIR/.rulesync/commands/"*.md "$TEMP_DIR/.rulesync/subagents/"*.md "$TEMP_DIR/.rulesync/rules/"*.md; do
# Handles both top-level files and files in subdirectories (e.g., rules/data-engine/)
while IFS= read -r -d '' f; do
if [[ -L "$f" ]]; then
local target
target=$(resolve_symlink "$REPO_ROOT/.rulesync/${f#$TEMP_DIR/.rulesync/}")
rm "$f"
cp "$target" "$f"
fi
done 2>/dev/null || true
done < <(find "$TEMP_DIR/.rulesync/commands" "$TEMP_DIR/.rulesync/subagents" "$TEMP_DIR/.rulesync/rules" -name "*.md" -print0 2>/dev/null) || true

# Copy original AGENTS.md from repo (the expected final state)
if [[ -f "$REPO_ROOT/AGENTS.md" ]]; then
Expand Down Expand Up @@ -288,6 +289,12 @@ build_expected_inventory() {
fi
done

# Rules in subdirectories (e.g., rules/data-engine/*.md)
while IFS= read -r -d '' rule_file; do
local rel_path="${rule_file#$REPO_ROOT/.rulesync/rules/}"
EXPECTED_FILES+=("$rules_dir/$rel_path")
done < <(find "$REPO_ROOT/.rulesync/rules" -mindepth 2 -type f -name "*.md" -print0 2>/dev/null)

# Commands (claudecode only - goes to commands/)
# Skip files with _ prefix as they are internal helper files (e.g., _review-core.md)
if [[ "$TARGET" == "claudecode" ]] && [[ -d "$REPO_ROOT/.rulesync/commands" ]]; then
Expand Down Expand Up @@ -531,6 +538,31 @@ verify_content() {
fi
done

# Verify rules in subdirectories (e.g., rules/data-engine/*.md)
while IFS= read -r -d '' rule_file; do
local rel_path="${rule_file#$REPO_ROOT/.rulesync/rules/}"
local source_file
source_file=$(resolve_symlink "$rule_file")
local output_file="$temp_output/$rules_dir/$rel_path"

if [[ -f "$output_file" ]]; then
local source_content
local output_content
source_content=$(strip_frontmatter "$source_file" | normalise_content)
output_content=$(strip_frontmatter "$output_file" | normalise_content)

if [[ "$source_content" != "$output_content" ]]; then
log_error "Content mismatch: $rules_dir/$rel_path"
log_info " Source: $source_file"
log_info " Output: $output_file"
diff <(echo "$source_content") <(echo "$output_content") | head -20 || true
((content_errors++)) || true
else
log_success "Content verified: $rel_path"
fi
fi
done < <(find "$REPO_ROOT/.rulesync/rules" -mindepth 2 -type f -name "*.md" -print0 2>/dev/null)

# Verify commands content (claudecode only)
# Skip files with _ prefix as they are internal helper files (e.g., _review-core.md)
if [[ "$TARGET" == "claudecode" ]] && [[ -d "$REPO_ROOT/.rulesync/commands" ]]; then
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ag-grid",
"version": "35.1.0-beta.20260317.135",
"version": "35.1.0-beta.20260318.948",
"license": "MIT",
"scripts": {
"compressVideo": "tsx external/ag-website-shared/scripts/compress-video",
Expand Down
6 changes: 3 additions & 3 deletions packages/ag-grid-angular/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ag-grid-angular",
"version": "35.1.0-beta.20260317.135",
"version": "35.1.0-beta.20260318.948",
"description": "AG Grid Angular Component",
"scripts": {
"clean": "rimraf dist",
Expand All @@ -15,7 +15,7 @@
"module": "./dist/ag-grid-angular/fesm2022/ag-grid-angular.mjs",
"typings": "./dist/ag-grid-angular/index.d.ts",
"dependencies": {
"ag-grid-community": "35.1.0-beta.20260317.135",
"ag-grid-community": "35.1.0-beta.20260318.948",
"@angular/animations": "^18.0.7",
"@angular/common": "^18.0.7",
"@angular/compiler": "^18.0.7",
Expand All @@ -27,7 +27,7 @@
"zone.js": "~0.15.1"
},
"devDependencies": {
"ag-grid-community": "35.1.0-beta.20260317.135",
"ag-grid-community": "35.1.0-beta.20260318.948",
"@angular-devkit/build-angular": "^18.0.7",
"@angular/cli": "^18.0.7",
"@angular/forms": "^18.0.7",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{
"name": "ag-grid-angular",
"version": "35.1.0-beta.20260317.135",
"version": "35.1.0-beta.20260318.948",
"description": "AG Grid Angular Component",
"license": "MIT",
"peerDependencies": {
"@angular/common": ">= 18.0.0",
"@angular/core": ">= 18.0.0"
},
"dependencies": {
"ag-grid-community": "35.1.0-beta.20260317.135",
"ag-grid-community": "35.1.0-beta.20260318.948",
"tslib": "^2.3.0"
},
"repository": {
Expand Down
2 changes: 1 addition & 1 deletion packages/ag-grid-community/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ag-grid-community",
"version": "35.1.0-beta.20260317.135",
"version": "35.1.0-beta.20260318.948",
"description": "Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue",
"main": "./dist/package/main.cjs.js",
"types": "./dist/types/src/main.d.ts",
Expand Down
24 changes: 12 additions & 12 deletions packages/ag-grid-community/src/focus-overrides.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -784,8 +784,8 @@ describe('Focus override callbacks', () => {
expect(result).toBe(false);
expect(tabToNextGridContainer).toHaveBeenCalledWith({
backwards: false,
fromContainer: 'gridBody',
toContainer: 'pagination',
previousContainer: 'gridBody',
nextContainer: 'pagination',
defaultTarget: 'pagination',
});
});
Expand Down Expand Up @@ -820,8 +820,8 @@ describe('Focus override callbacks', () => {
expect(result).toBe(false);
expect(tabToNextGridContainer).toHaveBeenCalledWith({
backwards: false,
fromContainer: 'pagination',
toContainer: 'external',
previousContainer: 'pagination',
nextContainer: 'external',
defaultTarget: null,
});
});
Expand All @@ -844,8 +844,8 @@ describe('Focus override callbacks', () => {
expect(result).toBe(false);
expect(tabToNextGridContainer).toHaveBeenCalledWith({
backwards: false,
fromContainer: 'external',
toContainer: 'gridBody',
previousContainer: 'external',
nextContainer: 'gridBody',
defaultTarget: null,
});
});
Expand All @@ -870,8 +870,8 @@ describe('Focus override callbacks', () => {
expect(result).toBe(false);
expect(tabToNextGridContainer).toHaveBeenCalledWith({
backwards: false,
fromContainer: 'gridBody',
toContainer: 'pagination',
previousContainer: 'gridBody',
nextContainer: 'pagination',
defaultTarget: 'pagination',
});
});
Expand All @@ -895,8 +895,8 @@ describe('Focus override callbacks', () => {
expect(result).toBe(false);
expect(tabToNextGridContainer).toHaveBeenCalledWith({
backwards: false,
fromContainer: 'gridBody',
toContainer: 'gridBody',
previousContainer: 'gridBody',
nextContainer: 'gridBody',
defaultTarget: targetCell,
});
});
Expand Down Expand Up @@ -1234,8 +1234,8 @@ describe('Focus override callbacks', () => {
expect(result).toBe(false);
expect(tabToNextGridContainer).toHaveBeenCalledWith({
backwards: true,
fromContainer: 'external',
toContainer: 'pagination',
previousContainer: 'external',
nextContainer: 'pagination',
defaultTarget: 'pagination',
});
});
Expand Down
6 changes: 3 additions & 3 deletions packages/ag-grid-community/src/gridComp/gridCtrl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -142,15 +142,15 @@ export class GridCtrl extends BeanStub {
});

const nextContainerName = getGridContainerName(focusableContainers[resolvedNextIndex]);
const toContainer =
const nextContainer =
defaultTarget == null && nextContainerName === 'gridBody'
? 'gridBody'
: getDefaultTabToNextGridContainerTargetName(defaultTarget);

const userResult = userCallbackFunction({
backwards,
fromContainer: getGridContainerName(focusableContainers[indexWithFocus]),
toContainer,
previousContainer: getGridContainerName(focusableContainers[indexWithFocus]),
nextContainer,
defaultTarget,
});

Expand Down
6 changes: 3 additions & 3 deletions packages/ag-grid-community/src/interfaces/iCallbackParams.ts
Original file line number Diff line number Diff line change
Expand Up @@ -151,10 +151,10 @@ export interface TabToNextGridContainerParams<TData = any, TContext = any> exten
/** True if the Shift key is also down. */
backwards: boolean;
/** The container that currently has focus. */
fromContainer: GridContainerName;
previousContainer: GridContainerName;
/** The container the grid would normally focus next. */
toContainer: GridContainerName;
/** The target the grid would normally focus when moving to `toContainer`, or `null` if it can't be represented. */
nextContainer: GridContainerName;
/** The target the grid would normally focus when moving to `nextContainer`, or `null` if it can't be represented. */
defaultTarget: TabToNextGridContainerTarget | null;
}

Expand Down
1 change: 1 addition & 0 deletions packages/ag-grid-community/src/main-internal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,7 @@ export {
_attemptToRestoreCellFocus,
_focusGridInnerElement,
_focusNextGridCoreContainer,
_skipFocusableContainerListenerForAgGrid,
} from './utils/gridFocus';
export { _createIcon, _createIconNoSpan } from './utils/icon';
export { _consoleError, _warnOnce } from './utils/log';
Expand Down
Loading
Loading