@linzjs/step-ag-grid 29.14.1 → 29.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@linzjs/step-ag-grid",
3
3
  "repository": "github:linz/step-ag-grid.git",
4
4
  "license": "MIT",
5
- "version": "29.14.1",
5
+ "version": "29.16.0",
6
6
  "keywords": [
7
7
  "aggrid",
8
8
  "ag-grid",
@@ -44,14 +44,14 @@
44
44
  "uuid": "^13.0.0"
45
45
  },
46
46
  "scripts": {
47
- "build": "run-s clean lint css bundle",
47
+ "build": "run-s clean linters css bundle",
48
48
  "yalc": "run-s clean css bundle && yalc push",
49
49
  "clean": "rimraf dist && mkdirp ./dist",
50
50
  "bundle": "rollup -c",
51
51
  "css": "sass ./src/styles/index.scss:dist/index.css --no-source-map",
52
52
  "test": "cross-env NODE_OPTIONS='--no-experimental-global-navigator' vitest run",
53
53
  "test:watch": "vitest --watch",
54
- "lint": "run-s lint:eslint lint:circulardeps",
54
+ "linters": "run-s lint:eslint lint:circulardeps",
55
55
  "lint:eslint": "eslint ./src --ext .js,.ts,.tsx --cache --ignore-path .gitignore",
56
56
  "lint:circulardeps": "npx madge --circular --extensions ts,tsx ./src",
57
57
  "lint:fix": "eslint ./src --ext .js,.ts,.tsx --fix --cache --ignore-path .gitignore",
@@ -59,7 +59,6 @@
59
59
  "build-storybook": "storybook build",
60
60
  "deploy-storybook": "npx --yes -p @storybook/storybook-deployer storybook-to-ghpages",
61
61
  "chromatic": "chromatic --exit-zero-on-changes",
62
- "semantic-release": "semantic-release",
63
62
  "upgrade": "npx ncu -i --format group"
64
63
  },
65
64
  "eslintConfig": {
@@ -80,30 +79,29 @@
80
79
  ]
81
80
  },
82
81
  "optionalDependencies": {
83
- "@rollup/rollup-linux-x64-gnu": "^4.53.2",
84
- "@swc/core-linux-x64-gnu": "^1.15.1"
82
+ "@rollup/rollup-linux-x64-gnu": "^4.53.3",
83
+ "@swc/core-linux-x64-gnu": "^1.15.3"
85
84
  },
86
85
  "devDependencies": {
87
- "@chromatic-com/storybook": "^4.1.2",
88
- "@linzjs/lui": "^23.14.2",
86
+ "@chromatic-com/storybook": "^4.1.3",
87
+ "@linzjs/lui": "^24.3.1",
89
88
  "@linzjs/style": "^5.4.0",
90
- "@linzjs/windows": "^8.1.0",
91
- "@rollup/plugin-commonjs": "^28.0.8",
89
+ "@linzjs/windows": "^8.3.0",
90
+ "@rollup/plugin-commonjs": "^28.0.9",
92
91
  "@rollup/plugin-json": "^6.1.0",
93
92
  "@rollup/plugin-node-resolve": "^16.0.3",
94
- "@semantic-release/git": "^10.0.1",
95
- "@storybook/addon-docs": "^9.1.12",
96
- "@storybook/addon-links": "^9.1.12",
97
- "@storybook/react": "^9.1.12",
98
- "@storybook/react-vite": "^9.1.12",
93
+ "@storybook/addon-docs": "^9.1.16",
94
+ "@storybook/addon-links": "^9.1.16",
95
+ "@storybook/react": "^9.1.16",
96
+ "@storybook/react-vite": "^9.1.16",
99
97
  "@testing-library/dom": "^10.4.1",
100
98
  "@testing-library/react": "^16.3.0",
101
99
  "@testing-library/user-event": "^14.6.1",
102
100
  "@types/debounce-promise": "^3.1.9",
103
101
  "@types/jsdom": "^21.1.7",
104
102
  "@types/lodash-es": "^4.17.12",
105
- "@types/node": "^22.17.0",
106
- "@types/react": "^18.3.23",
103
+ "@types/node": "^22.19.2",
104
+ "@types/react": "^18.3.27",
107
105
  "@types/react-dom": "^18.3.7",
108
106
  "@types/uuid": "^11.0.0",
109
107
  "@vitejs/plugin-react-swc": "^3.11.0",
@@ -112,11 +110,11 @@
112
110
  "ag-grid-react": "34.2.0",
113
111
  "babel-preset-react-app": "^10.1.0",
114
112
  "canvas": "^3.2.0",
115
- "chromatic": "^13.3.3",
113
+ "chromatic": "^13.3.4",
116
114
  "cross-env": "^10.1.0",
117
115
  "css-loader": "^7.1.2",
118
116
  "eslint-plugin-react": "^7.37.5",
119
- "eslint-plugin-storybook": "^9.1.12",
117
+ "eslint-plugin-storybook": "^9.1.16",
120
118
  "jsdom": "^26.1.0",
121
119
  "lodash-es": "^4.17.21",
122
120
  "mkdirp": "^3.0.1",
@@ -127,20 +125,19 @@
127
125
  "react": ">=18",
128
126
  "react-app-polyfill": "^3.0.0",
129
127
  "react-dom": "^18.3.1",
130
- "rimraf": "^6.1.0",
131
- "rollup": "^4.53.2",
128
+ "rimraf": "^6.1.2",
129
+ "rollup": "^4.53.3",
132
130
  "rollup-plugin-copy": "^3.5.0",
133
131
  "rollup-plugin-peer-deps-external": "^2.2.4",
134
132
  "rollup-plugin-postcss": "^4.0.2",
135
133
  "rollup-plugin-typescript2": "^0.36.0",
136
- "sass": "^1.94.0",
134
+ "sass": "^1.96.0",
137
135
  "sass-loader": "^16.0.6",
138
- "semantic-release": "^24.2.9",
139
- "storybook": "^9.1.12",
136
+ "storybook": "^9.1.16",
140
137
  "storybook-css-modules-preset": "^1.1.1",
141
138
  "style-loader": "^4.0.0",
142
139
  "typescript": "^5.9.3",
143
- "vite": "^7.2.2",
140
+ "vite": "^7.2.7",
144
141
  "vite-plugin-html": "^3.2.2",
145
142
  "vite-tsconfig-paths": "^5.1.4",
146
143
  "vitest": "^3.2.4"
@@ -85,6 +85,7 @@ export interface GridProps<TData extends GridBaseRow = GridBaseRow> {
85
85
  // ─── Editing ──────────────────────────────────────────────────
86
86
  onBulkEditingComplete?: () => Promise<void> | void;
87
87
  singleClickEdit?: boolean;
88
+ stopEditingWhenCellsLoseFocus?: boolean;
88
89
 
89
90
  // ─── Context Menu ─────────────────────────────────────────────
90
91
  contextMenu?: GridContextMenuComponent<TData>;
@@ -149,6 +150,7 @@ export const Grid = <TData extends GridBaseRow = GridBaseRow>({
149
150
 
150
151
  // ─── Editing ──────────────────────────────────
151
152
  singleClickEdit = false,
153
+ stopEditingWhenCellsLoseFocus = false,
152
154
 
153
155
  // ─── Context Menu ─────────────────────────────
154
156
  contextMenuSelectRow = false,
@@ -1079,6 +1081,7 @@ export const Grid = <TData extends GridBaseRow = GridBaseRow>({
1079
1081
  }
1080
1082
  : undefined
1081
1083
  }
1084
+ stopEditingWhenCellsLoseFocus={stopEditingWhenCellsLoseFocus}
1082
1085
  selectionColumnDef={selectionColumnDef}
1083
1086
  suppressCellFocus={params.suppressCellFocus}
1084
1087
  suppressClickEdit={true}
@@ -8,6 +8,7 @@ import { createRoot, Root } from 'react-dom/client';
8
8
  export interface CheckboxMultiFilterParams extends IFilterParams {
9
9
  labels?: Record<string, string>;
10
10
  labelFormatter?: (value: string) => string;
11
+ customOrder?: string[];
11
12
  }
12
13
 
13
14
  export interface CheckboxMultiFilterModel {
@@ -91,9 +92,18 @@ export class GridFilterColumnsMultiSelect implements IFilterComp {
91
92
  values.add(norm);
92
93
  });
93
94
 
95
+ const { customOrder } = this.params;
96
+ const orderMap = customOrder?.length ? new Map(customOrder.map((val, idx) => [val, idx])) : null;
97
+
94
98
  return Array.from(values).sort((a, b) => {
95
- if (a === EMPTY_KEY && b !== EMPTY_KEY) return -1;
96
- if (b === EMPTY_KEY && a !== EMPTY_KEY) return 1;
99
+ if (orderMap) {
100
+ const aIdx = orderMap.get(a) ?? Infinity;
101
+ const bIdx = orderMap.get(b) ?? Infinity;
102
+ if (aIdx !== bIdx) return aIdx - bIdx;
103
+ }
104
+
105
+ if (a === EMPTY_KEY) return b === EMPTY_KEY ? 0 : -1;
106
+ if (b === EMPTY_KEY) return 1;
97
107
  return a.localeCompare(b);
98
108
  });
99
109
  }
@@ -155,10 +165,14 @@ export class GridFilterColumnsMultiSelect implements IFilterComp {
155
165
  }
156
166
 
157
167
  isFilterActive(): boolean {
158
- return this.selectedValues.size > 0;
168
+ return this.selectedValues.size !== this.allValues.length;
159
169
  }
160
170
 
161
171
  doesFilterPass(p: IDoesFilterPassParams): boolean {
172
+ if (this.selectedValues.size === 0) {
173
+ return false;
174
+ }
175
+
162
176
  const field = this.params.colDef.field as string;
163
177
  if (!p.data || typeof p.data !== 'object') {
164
178
  return this.selectedValues.has(EMPTY_KEY);
@@ -170,7 +184,10 @@ export class GridFilterColumnsMultiSelect implements IFilterComp {
170
184
  }
171
185
 
172
186
  getModel(): CheckboxMultiFilterModel | null {
173
- return this.selectedValues.size > 0 ? { values: Array.from(this.selectedValues) } : null;
187
+ if (this.selectedValues.size !== this.allValues.length) {
188
+ return { values: Array.from(this.selectedValues) };
189
+ }
190
+ return null;
174
191
  }
175
192
 
176
193
  setModel(model: CheckboxMultiFilterModel | null): void {
@@ -189,7 +206,9 @@ export class GridFilterColumnsMultiSelect implements IFilterComp {
189
206
  export const createCheckboxMultiFilterParams = (
190
207
  labels: Record<string, string> = {},
191
208
  labelFormatter?: (value: string) => string,
209
+ customOrder?: string[],
192
210
  ): Partial<CheckboxMultiFilterParams> => ({
193
211
  labels: { [EMPTY_KEY]: DEFAULT_EMPTY_LABEL, ...labels },
194
212
  labelFormatter,
213
+ customOrder,
195
214
  });
@@ -123,17 +123,7 @@ const GridCopyTemplate: StoryFn<typeof Grid<ITestRow>> = (props: GridProps<ITest
123
123
  const [rowData] = useState<ITestRow[]>(() => {
124
124
  const random = new SeededRandomForTests(1000);
125
125
  let id = 1000;
126
- const positions = [
127
- undefined,
128
- 'Tester',
129
- 'Developer',
130
- 'Lawyer',
131
- 'Barrista """',
132
- 'Manager',
133
- 'CEO',
134
- 'CTO',
135
- 'Architect',
136
- ];
126
+ const positions = [undefined, 'Tester', 'Developer', 'Lawyer', 'Barista """', 'Manager', 'CEO', 'CTO', 'Architect'];
137
127
  const result: ITestRow[] = [];
138
128
  for (let i = 0; i < 1000; i++) {
139
129
  result.push({
@@ -159,7 +149,6 @@ const GridCopyTemplate: StoryFn<typeof Grid<ITestRow>> = (props: GridProps<ITest
159
149
  {...props}
160
150
  enableRangeSelection={true}
161
151
  selectable={true}
162
- enableClickSelection={true}
163
152
  enableSelectionWithoutKeys={true}
164
153
  autoSelectFirstRow={true}
165
154
  externalSelectedIds={externalSelectedIds}
@@ -57,11 +57,15 @@ const GridFilterColumnsMultiSelectTemplate: StoryFn<typeof Grid<ITestRow>> = (pr
57
57
  field: 'position',
58
58
  headerName: 'Position',
59
59
  filter: GridFilterColumnsMultiSelect,
60
- filterParams: createCheckboxMultiFilterParams({
61
- Developer: 'FE Dev',
62
- Manager: 'Tech Manager',
63
- __EMPTY__: 'None',
64
- }),
60
+ filterParams: createCheckboxMultiFilterParams(
61
+ {
62
+ Developer: 'FE Dev',
63
+ Manager: 'Tech Manager',
64
+ __EMPTY__: 'None',
65
+ },
66
+ undefined,
67
+ ['Manager', 'Developer', '__EMPTY__', 'Tester'],
68
+ ),
65
69
  }),
66
70
  GridCell({
67
71
  field: 'desc',