gbs-add-block 2.1.0 → 2.3.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.
Files changed (129) hide show
  1. package/.gbs/skills/gbs-components/SKILL.md +190 -134
  2. package/.gbs/skills/gbs-components/references/install.md +25 -3
  3. package/.gbs/skills/gbs-components/references/styling.md +246 -207
  4. package/CHANGELOG.md +74 -0
  5. package/README.md +154 -23
  6. package/index.cjs +212 -3
  7. package/package.json +41 -10
  8. package/schema/passport-v1.schema.json +204 -0
  9. package/source/beta-components/accordion/passport.json +259 -0
  10. package/source/beta-components/accordion/styles.css +207 -208
  11. package/source/beta-components/alert/passport.json +250 -0
  12. package/source/beta-components/alert/styles.css +154 -155
  13. package/source/beta-components/avatar/passport.json +294 -0
  14. package/source/beta-components/avatar/styles.css +225 -226
  15. package/source/beta-components/badge/passport.json +332 -0
  16. package/source/beta-components/badge/styles.css +203 -204
  17. package/source/beta-components/breadcrumb/passport.json +243 -0
  18. package/source/beta-components/breadcrumb/styles.css +138 -140
  19. package/source/beta-components/button/passport.json +402 -0
  20. package/source/beta-components/button/passport.manual.json +31 -0
  21. package/source/beta-components/button/styles.css +232 -234
  22. package/source/beta-components/card/passport.json +337 -0
  23. package/source/beta-components/card/styles.css +230 -232
  24. package/source/beta-components/checkbox/passport.json +456 -0
  25. package/source/beta-components/checkbox/styles.css +211 -213
  26. package/source/beta-components/combobox/passport.json +456 -0
  27. package/source/beta-components/combobox/styles.css +419 -417
  28. package/source/beta-components/data-grid/agent/coerce.ts +368 -0
  29. package/source/beta-components/data-grid/agent/contract.ts +410 -0
  30. package/source/beta-components/data-grid/agent/dataset.ts +92 -0
  31. package/source/beta-components/data-grid/agent/engine.ts +470 -0
  32. package/source/beta-components/data-grid/agent/executors.ts +155 -0
  33. package/source/beta-components/data-grid/agent/index.ts +79 -0
  34. package/source/beta-components/data-grid/agent/intent.ts +324 -0
  35. package/source/beta-components/data-grid/agent/operations.ts +335 -0
  36. package/source/beta-components/data-grid/agent/validate.ts +630 -0
  37. package/source/beta-components/data-grid/agent/webmcp.ts +107 -0
  38. package/source/beta-components/data-grid/index.ts +14 -7
  39. package/source/beta-components/data-grid/passport.json +1051 -0
  40. package/source/beta-components/data-grid/passport.manual.json +255 -0
  41. package/source/beta-components/data-grid/react/AskGrid.tsx +164 -0
  42. package/source/beta-components/data-grid/react/DataGrid.tsx +39 -0
  43. package/source/beta-components/data-grid/styles.css +874 -716
  44. package/source/beta-components/date-picker/passport.json +407 -0
  45. package/source/beta-components/date-picker/styles.css +445 -446
  46. package/source/beta-components/dialog/passport.json +344 -0
  47. package/source/beta-components/dialog/styles.css +280 -279
  48. package/source/beta-components/file-uploader/passport.json +518 -0
  49. package/source/beta-components/file-uploader/styles.css +394 -396
  50. package/source/beta-components/input/passport.json +536 -0
  51. package/source/beta-components/input/styles.css +295 -297
  52. package/source/beta-components/menu/passport.json +322 -0
  53. package/source/beta-components/menu/styles.css +224 -223
  54. package/source/beta-components/modal/passport.json +289 -0
  55. package/source/beta-components/modal/styles.css +241 -240
  56. package/source/beta-components/number-input/passport.json +541 -0
  57. package/source/beta-components/number-input/styles.css +230 -231
  58. package/source/beta-components/popover/passport.json +238 -0
  59. package/source/beta-components/popover/styles.css +148 -147
  60. package/source/beta-components/progress/passport.json +270 -0
  61. package/source/beta-components/progress/styles.css +200 -201
  62. package/source/beta-components/radio-group/passport.json +477 -0
  63. package/source/beta-components/radio-group/styles.css +269 -270
  64. package/source/beta-components/shared/core/agent/adapter.ts +65 -0
  65. package/source/beta-components/shared/core/agent/history.ts +120 -0
  66. package/source/beta-components/shared/core/agent/index.ts +46 -0
  67. package/source/beta-components/shared/core/agent/numbers.ts +217 -0
  68. package/source/beta-components/shared/core/agent/schema.ts +180 -0
  69. package/source/beta-components/shared/core/agent/types.ts +169 -0
  70. package/source/beta-components/shared/core/agent/webmcp.ts +328 -0
  71. package/source/beta-components/shared/index.ts +9 -0
  72. package/source/beta-components/shared/react/GramproAIProvider.tsx +50 -0
  73. package/source/beta-components/shared/react/useAskAgent.ts +217 -0
  74. package/source/beta-components/shared/styles.css +79 -0
  75. package/source/beta-components/shared/version.json +4 -4
  76. package/source/beta-components/shared/version.ts +6 -6
  77. package/source/beta-components/skeleton/passport.json +251 -0
  78. package/source/beta-components/skeleton/styles.css +185 -187
  79. package/source/beta-components/spinner/passport.json +245 -0
  80. package/source/beta-components/spinner/styles.css +173 -174
  81. package/source/beta-components/switch/passport.json +421 -0
  82. package/source/beta-components/switch/styles.css +227 -229
  83. package/source/beta-components/tabs/passport.json +315 -0
  84. package/source/beta-components/tabs/styles.css +263 -264
  85. package/source/beta-components/textarea/passport.json +382 -0
  86. package/source/beta-components/textarea/styles.css +158 -160
  87. package/source/beta-components/toaster/passport.json +221 -0
  88. package/source/beta-components/toaster/styles.css +282 -282
  89. package/source/beta-components/tooltip/passport.json +170 -0
  90. package/source/beta-components/tooltip/styles.css +71 -73
  91. package/tools/env.cjs +61 -0
  92. package/tools/passport/cli.cjs +79 -0
  93. package/tools/passport/extract.cjs +493 -0
  94. package/tools/passport/index.cjs +185 -0
  95. package/tools/passport/merge.cjs +131 -0
  96. package/tools/passport/policy.cjs +65 -0
  97. package/tools/passport/validate.cjs +277 -0
  98. package/tools/ts-require.cjs +79 -0
  99. package/source/beta-components/accordion/__tests__/core.test.ts +0 -58
  100. package/source/beta-components/alert/__tests__/core.test.ts +0 -17
  101. package/source/beta-components/avatar/__tests__/core.test.ts +0 -88
  102. package/source/beta-components/badge/__tests__/core.test.ts +0 -46
  103. package/source/beta-components/breadcrumb/__tests__/core.test.ts +0 -58
  104. package/source/beta-components/button/__tests__/core.test.ts +0 -31
  105. package/source/beta-components/card/__tests__/core.test.ts +0 -57
  106. package/source/beta-components/checkbox/__tests__/core.test.ts +0 -40
  107. package/source/beta-components/combobox/__tests__/core.test.ts +0 -134
  108. package/source/beta-components/data-grid/__tests__/core.test.ts +0 -356
  109. package/source/beta-components/data-grid/__tests__/export.test.ts +0 -70
  110. package/source/beta-components/data-grid/__tests__/pdf.test.ts +0 -209
  111. package/source/beta-components/date-picker/__tests__/core.test.ts +0 -273
  112. package/source/beta-components/dialog/__tests__/core.test.ts +0 -86
  113. package/source/beta-components/file-uploader/__tests__/core.test.ts +0 -395
  114. package/source/beta-components/input/__tests__/core.test.ts +0 -75
  115. package/source/beta-components/menu/__tests__/core.test.ts +0 -120
  116. package/source/beta-components/modal/__tests__/core.test.ts +0 -55
  117. package/source/beta-components/number-input/__tests__/core.test.ts +0 -151
  118. package/source/beta-components/progress/__tests__/core.test.ts +0 -56
  119. package/source/beta-components/radio-group/__tests__/core.test.ts +0 -64
  120. package/source/beta-components/shared/__tests__/boundaries.test.ts +0 -95
  121. package/source/beta-components/shared/__tests__/core.test.ts +0 -55
  122. package/source/beta-components/shared/__tests__/position.test.ts +0 -143
  123. package/source/beta-components/skeleton/__tests__/core.test.ts +0 -41
  124. package/source/beta-components/spinner/__tests__/core.test.ts +0 -48
  125. package/source/beta-components/switch/__tests__/core.test.ts +0 -64
  126. package/source/beta-components/tabs/__tests__/core.test.ts +0 -51
  127. package/source/beta-components/textarea/__tests__/core.test.ts +0 -38
  128. package/source/beta-components/toaster/__tests__/core.test.ts +0 -256
  129. package/source/beta-components/tooltip/__tests__/core.test.ts +0 -42
@@ -0,0 +1,1051 @@
1
+ {
2
+ "passportVersion": "1.0.0",
3
+ "identity": {
4
+ "component": "DataGrid",
5
+ "folder": "data-grid",
6
+ "exports": [
7
+ "AskGrid",
8
+ "COLUMN_REQUIREMENT",
9
+ "DataGrid",
10
+ "GRID_CONTRACT_VERSION",
11
+ "GRID_OPERATIONS",
12
+ "GRID_OPERATION_NAMES",
13
+ "GRID_TOOL_NAME"
14
+ ]
15
+ },
16
+ "source": {
17
+ "libraryVersion": "2.3.0",
18
+ "files": [
19
+ "agent/coerce.ts",
20
+ "agent/contract.ts",
21
+ "agent/dataset.ts",
22
+ "agent/engine.ts",
23
+ "agent/executors.ts",
24
+ "agent/index.ts",
25
+ "agent/intent.ts",
26
+ "agent/operations.ts",
27
+ "agent/validate.ts",
28
+ "agent/webmcp.ts",
29
+ "core/columnHelper.ts",
30
+ "core/columns.ts",
31
+ "core/filtering.ts",
32
+ "core/grid.ts",
33
+ "core/index.ts",
34
+ "core/rows.ts",
35
+ "core/sorting.ts",
36
+ "core/state.ts",
37
+ "core/store.ts",
38
+ "core/types.ts",
39
+ "core/values.ts",
40
+ "core/virtual.ts",
41
+ "export/csv.ts",
42
+ "export/download.ts",
43
+ "export/pdf-font.ts",
44
+ "export/pdf-writer.ts",
45
+ "export/pdf.ts",
46
+ "export/table.ts",
47
+ "export/xlsx.ts",
48
+ "export/zip.ts",
49
+ "index.ts",
50
+ "react/AskGrid.tsx",
51
+ "react/Cell.tsx",
52
+ "react/ColumnMenu.tsx",
53
+ "react/DataGrid.tsx",
54
+ "react/FilterForm.tsx",
55
+ "react/HeaderRow.tsx",
56
+ "react/Pagination.tsx",
57
+ "react/Popover.tsx",
58
+ "react/Row.tsx",
59
+ "react/Toolbar.tsx",
60
+ "react/Viewport.tsx",
61
+ "react/context.ts",
62
+ "react/hooks.ts",
63
+ "react/icons.tsx",
64
+ "react/keyboard.ts",
65
+ "react/locale.ts"
66
+ ],
67
+ "sourceHash": "sha256:7f14a5352d469fc0a345b87886162fcc237efe6d305c0a7d67e5801e6aabea6c"
68
+ },
69
+ "purpose": "Display and operate on tabular data. Virtualized; holds its own sort, filter, search, selection, column and pagination state in an external store exposed through GridApi.",
70
+ "props": [
71
+ {
72
+ "name": "agent",
73
+ "type": "other",
74
+ "typeText": "GridAgent<T> | null",
75
+ "required": true,
76
+ "origin": "derived"
77
+ },
78
+ {
79
+ "name": "agentPolicy",
80
+ "type": "other",
81
+ "typeText": "GridAgentPolicy | undefined",
82
+ "required": false,
83
+ "origin": "derived",
84
+ "description": "Columns and operations withheld from whatever is driving the grid.",
85
+ "descriptionOrigin": "jsdoc"
86
+ },
87
+ {
88
+ "name": "ai",
89
+ "type": "boolean",
90
+ "typeText": "boolean | undefined",
91
+ "required": false,
92
+ "default": false,
93
+ "origin": "derived",
94
+ "description": "Render a natural-language box above the grid.\r\n\r\nNeeds a `<GramproAIProvider>` above it supplying an adapter; without one\r\nthis renders nothing and the grid is unchanged. No model is bundled or\r\ndownloaded — the application brings its own.",
95
+ "descriptionOrigin": "jsdoc"
96
+ },
97
+ {
98
+ "name": "aria-label",
99
+ "type": "string",
100
+ "typeText": "string | undefined",
101
+ "required": false,
102
+ "origin": "derived"
103
+ },
104
+ {
105
+ "name": "autoHeight",
106
+ "type": "boolean",
107
+ "typeText": "boolean | undefined",
108
+ "required": false,
109
+ "default": false,
110
+ "origin": "derived",
111
+ "description": "Grow to fit all rows instead of scrolling (use with pagination or small data).",
112
+ "descriptionOrigin": "jsdoc"
113
+ },
114
+ {
115
+ "name": "className",
116
+ "type": "string",
117
+ "typeText": "string | undefined",
118
+ "required": false,
119
+ "origin": "derived"
120
+ },
121
+ {
122
+ "name": "classNames",
123
+ "type": "other",
124
+ "typeText": "Partial<Record<GridSlot, string>> | undefined",
125
+ "required": false,
126
+ "default": "EMPTY_CLASSNAMES",
127
+ "origin": "derived"
128
+ },
129
+ {
130
+ "name": "columns",
131
+ "type": "other",
132
+ "typeText": "readonly ColumnDef<T, unknown>[]",
133
+ "required": true,
134
+ "origin": "derived"
135
+ },
136
+ {
137
+ "name": "data",
138
+ "type": "other",
139
+ "typeText": "readonly T[]",
140
+ "required": true,
141
+ "origin": "derived"
142
+ },
143
+ {
144
+ "name": "emptyState",
145
+ "type": "other",
146
+ "typeText": "ReactNode",
147
+ "required": false,
148
+ "origin": "derived"
149
+ },
150
+ {
151
+ "name": "enableColumnHiding",
152
+ "type": "boolean",
153
+ "typeText": "boolean | undefined",
154
+ "required": false,
155
+ "default": true,
156
+ "origin": "derived"
157
+ },
158
+ {
159
+ "name": "enableColumnPinning",
160
+ "type": "boolean",
161
+ "typeText": "boolean | undefined",
162
+ "required": false,
163
+ "default": true,
164
+ "origin": "derived"
165
+ },
166
+ {
167
+ "name": "enableColumnReordering",
168
+ "type": "boolean",
169
+ "typeText": "boolean | undefined",
170
+ "required": false,
171
+ "default": true,
172
+ "origin": "derived"
173
+ },
174
+ {
175
+ "name": "enableColumnResizing",
176
+ "type": "boolean",
177
+ "typeText": "boolean | undefined",
178
+ "required": false,
179
+ "default": true,
180
+ "origin": "derived"
181
+ },
182
+ {
183
+ "name": "enableFiltering",
184
+ "type": "boolean",
185
+ "typeText": "boolean | undefined",
186
+ "required": false,
187
+ "default": true,
188
+ "origin": "derived"
189
+ },
190
+ {
191
+ "name": "enableMultiSort",
192
+ "type": "boolean",
193
+ "typeText": "boolean | undefined",
194
+ "required": false,
195
+ "origin": "derived"
196
+ },
197
+ {
198
+ "name": "enablePagination",
199
+ "type": "boolean",
200
+ "typeText": "boolean | undefined",
201
+ "required": false,
202
+ "default": true,
203
+ "origin": "derived"
204
+ },
205
+ {
206
+ "name": "enableRowSelection",
207
+ "type": "other",
208
+ "typeText": "boolean | ((row: T) => boolean) | undefined",
209
+ "required": false,
210
+ "default": false,
211
+ "origin": "derived"
212
+ },
213
+ {
214
+ "name": "enableSorting",
215
+ "type": "boolean",
216
+ "typeText": "boolean | undefined",
217
+ "required": false,
218
+ "default": true,
219
+ "origin": "derived"
220
+ },
221
+ {
222
+ "name": "exportFileName",
223
+ "type": "string",
224
+ "typeText": "string | undefined",
225
+ "required": false,
226
+ "origin": "derived"
227
+ },
228
+ {
229
+ "name": "getRowClassName",
230
+ "type": "function",
231
+ "signature": "((row: T, rowIndex: number) => string | undefined) | undefined",
232
+ "required": false,
233
+ "origin": "derived"
234
+ },
235
+ {
236
+ "name": "getRowId",
237
+ "type": "other",
238
+ "typeText": "Extract<keyof T, string> | ((row: T, index: number) => RowId) | undefined",
239
+ "required": false,
240
+ "origin": "derived",
241
+ "description": "Stable row id: a property name (recommended) or a function.\nDefaults to `row.id`, falling back to the array index.",
242
+ "descriptionOrigin": "jsdoc"
243
+ },
244
+ {
245
+ "name": "headerHeight",
246
+ "type": "number",
247
+ "typeText": "number | undefined",
248
+ "required": false,
249
+ "origin": "derived"
250
+ },
251
+ {
252
+ "name": "height",
253
+ "type": "other",
254
+ "typeText": "string | number | undefined",
255
+ "required": false,
256
+ "default": 520,
257
+ "origin": "derived",
258
+ "description": "Height of the scrolling area. Ignored with `autoHeight`. Default 520.",
259
+ "descriptionOrigin": "jsdoc"
260
+ },
261
+ {
262
+ "name": "initialState",
263
+ "type": "other",
264
+ "typeText": "Partial<GridState> | undefined",
265
+ "required": false,
266
+ "origin": "derived"
267
+ },
268
+ {
269
+ "name": "loading",
270
+ "type": "boolean",
271
+ "typeText": "boolean | undefined",
272
+ "required": false,
273
+ "default": false,
274
+ "origin": "derived"
275
+ },
276
+ {
277
+ "name": "locale",
278
+ "type": "string",
279
+ "typeText": "string | undefined",
280
+ "required": false,
281
+ "origin": "derived",
282
+ "description": "BCP 47 locale for number and date formatting.",
283
+ "descriptionOrigin": "jsdoc"
284
+ },
285
+ {
286
+ "name": "localeText",
287
+ "type": "other",
288
+ "typeText": "Partial<LocaleText> | undefined",
289
+ "required": false,
290
+ "origin": "derived"
291
+ },
292
+ {
293
+ "name": "mode",
294
+ "type": "enum",
295
+ "values": [
296
+ "client",
297
+ "server"
298
+ ],
299
+ "typeText": "'client' | 'server' | undefined",
300
+ "required": false,
301
+ "default": "client",
302
+ "origin": "derived",
303
+ "description": "`client`: the grid sorts, filters and paginates. `server`: `data` is the current page.",
304
+ "descriptionOrigin": "jsdoc",
305
+ "note": "`client` lets the grid sort, filter and paginate. `server` means `data` is already the current page and the host answers `onQueryChange`."
306
+ },
307
+ {
308
+ "name": "onCellEdit",
309
+ "type": "function",
310
+ "signature": "((event: CellEditEvent<T>) => void | Promise<void>) | undefined",
311
+ "required": false,
312
+ "origin": "derived"
313
+ },
314
+ {
315
+ "name": "onQueryChange",
316
+ "type": "function",
317
+ "signature": "((query: GridQuery) => void) | undefined",
318
+ "required": false,
319
+ "origin": "derived",
320
+ "description": "Fires when sorting, filters, search or pagination change.",
321
+ "descriptionOrigin": "jsdoc"
322
+ },
323
+ {
324
+ "name": "onRowClick",
325
+ "type": "function",
326
+ "signature": "((row: T, event: MouseEvent<HTMLElement>) => void) | undefined",
327
+ "required": false,
328
+ "origin": "derived",
329
+ "description": "Not fired for clicks on interactive content (buttons, inputs, links, checkboxes).",
330
+ "descriptionOrigin": "jsdoc"
331
+ },
332
+ {
333
+ "name": "onRowDoubleClick",
334
+ "type": "function",
335
+ "signature": "((row: T, event: MouseEvent<HTMLElement>) => void) | undefined",
336
+ "required": false,
337
+ "origin": "derived"
338
+ },
339
+ {
340
+ "name": "onStateChange",
341
+ "type": "function",
342
+ "signature": "((next: GridState, prev: GridState) => void) | undefined",
343
+ "required": false,
344
+ "origin": "derived"
345
+ },
346
+ {
347
+ "name": "pageSizeOptions",
348
+ "type": "other",
349
+ "typeText": "number[] | undefined",
350
+ "required": false,
351
+ "default": "DEFAULT_PAGE_SIZES",
352
+ "origin": "derived"
353
+ },
354
+ {
355
+ "name": "placeholder",
356
+ "type": "string",
357
+ "typeText": "string | undefined",
358
+ "required": false,
359
+ "origin": "derived"
360
+ },
361
+ {
362
+ "name": "ref",
363
+ "type": "other",
364
+ "typeText": "Ref<GridApi<T>> | undefined",
365
+ "required": false,
366
+ "origin": "derived"
367
+ },
368
+ {
369
+ "name": "rowCount",
370
+ "type": "number",
371
+ "typeText": "number | undefined",
372
+ "required": false,
373
+ "origin": "derived",
374
+ "description": "Total rows on the server (server mode).",
375
+ "descriptionOrigin": "jsdoc"
376
+ },
377
+ {
378
+ "name": "rowHeight",
379
+ "type": "number",
380
+ "typeText": "number | undefined",
381
+ "required": false,
382
+ "origin": "derived",
383
+ "description": "Fixed row height in px. Defaults to the density's height.",
384
+ "descriptionOrigin": "jsdoc"
385
+ },
386
+ {
387
+ "name": "selectionMode",
388
+ "type": "enum",
389
+ "values": [
390
+ "multiple",
391
+ "single"
392
+ ],
393
+ "typeText": "'multiple' | 'single' | undefined",
394
+ "required": false,
395
+ "default": "multiple",
396
+ "origin": "derived"
397
+ },
398
+ {
399
+ "name": "semantics",
400
+ "type": "other",
401
+ "typeText": "Readonly<Record<string, GridColumnSemantics>> | undefined",
402
+ "required": false,
403
+ "origin": "derived",
404
+ "description": "What a machine cannot read off a column definition: units, synonyms, PII.",
405
+ "descriptionOrigin": "jsdoc"
406
+ },
407
+ {
408
+ "name": "state",
409
+ "type": "other",
410
+ "typeText": "Partial<GridState> | undefined",
411
+ "required": false,
412
+ "origin": "derived",
413
+ "note": "Makes the grid controlled. Prefer `initialState` unless the host genuinely owns the state."
414
+ },
415
+ {
416
+ "name": "style",
417
+ "type": "other",
418
+ "typeText": "CSSProperties | undefined",
419
+ "required": false,
420
+ "origin": "derived"
421
+ },
422
+ {
423
+ "name": "suggestions",
424
+ "type": "other",
425
+ "typeText": "readonly string[] | undefined",
426
+ "required": false,
427
+ "origin": "derived"
428
+ },
429
+ {
430
+ "name": "toolbar",
431
+ "type": "other",
432
+ "typeText": "boolean | ToolbarOptions | undefined",
433
+ "required": false,
434
+ "default": true,
435
+ "origin": "derived"
436
+ }
437
+ ],
438
+ "events": [
439
+ {
440
+ "name": "onCellEdit",
441
+ "signature": "((event: CellEditEvent<T>) => void | Promise<void>) | undefined"
442
+ },
443
+ {
444
+ "name": "onQueryChange",
445
+ "signature": "((query: GridQuery) => void) | undefined"
446
+ },
447
+ {
448
+ "name": "onRowClick",
449
+ "signature": "((row: T, event: MouseEvent<HTMLElement>) => void) | undefined"
450
+ },
451
+ {
452
+ "name": "onRowDoubleClick",
453
+ "signature": "((row: T, event: MouseEvent<HTMLElement>) => void) | undefined"
454
+ },
455
+ {
456
+ "name": "onStateChange",
457
+ "signature": "((next: GridState, prev: GridState) => void) | undefined"
458
+ }
459
+ ],
460
+ "slots": [
461
+ "root",
462
+ "toolbar",
463
+ "viewport",
464
+ "header",
465
+ "headerCell",
466
+ "row",
467
+ "cell",
468
+ "pagination"
469
+ ],
470
+ "states": [
471
+ {
472
+ "attr": "data-active"
473
+ },
474
+ {
475
+ "attr": "data-align",
476
+ "values": [
477
+ "center",
478
+ "end"
479
+ ]
480
+ },
481
+ {
482
+ "attr": "data-col-index"
483
+ },
484
+ {
485
+ "attr": "data-density"
486
+ },
487
+ {
488
+ "attr": "data-drop",
489
+ "values": [
490
+ "after",
491
+ "before"
492
+ ]
493
+ },
494
+ {
495
+ "attr": "data-editable"
496
+ },
497
+ {
498
+ "attr": "data-editing"
499
+ },
500
+ {
501
+ "attr": "data-invalid"
502
+ },
503
+ {
504
+ "attr": "data-odd"
505
+ },
506
+ {
507
+ "attr": "data-pending"
508
+ },
509
+ {
510
+ "attr": "data-pin-edge"
511
+ },
512
+ {
513
+ "attr": "data-pinned",
514
+ "values": [
515
+ "left",
516
+ "right"
517
+ ]
518
+ },
519
+ {
520
+ "attr": "data-resizing"
521
+ },
522
+ {
523
+ "attr": "data-row-index"
524
+ },
525
+ {
526
+ "attr": "data-selected"
527
+ },
528
+ {
529
+ "attr": "data-sortable"
530
+ },
531
+ {
532
+ "attr": "data-stale"
533
+ },
534
+ {
535
+ "attr": "data-theme",
536
+ "values": [
537
+ "dark",
538
+ "light"
539
+ ]
540
+ },
541
+ {
542
+ "attr": "data-variant",
543
+ "values": [
544
+ "primary"
545
+ ]
546
+ }
547
+ ],
548
+ "accessibility": {
549
+ "supplied": [
550
+ "WAI-ARIA grid pattern: role=row/rowgroup, aria-colindex, aria-rowindex",
551
+ "aria-sort on sortable header cells",
552
+ "aria-multiselectable when row selection is enabled",
553
+ "full cell keyboard navigation, including the header row"
554
+ ],
555
+ "required": [
556
+ "aria-label on the grid when its purpose is not obvious from the page",
557
+ "a visible heading or caption nearby for screen-reader context"
558
+ ]
559
+ },
560
+ "composition": {
561
+ "notes": "Self-contained. Columns are configuration, not children. Keep `data`, `columns` and `getRowId` referentially stable — the grid memoizes on their identity."
562
+ },
563
+ "operations": {
564
+ "search": {
565
+ "summary": "Free-text match across every searchable column.",
566
+ "apiMethod": "setGlobalFilter",
567
+ "input": {
568
+ "type": "object",
569
+ "required": [
570
+ "text"
571
+ ],
572
+ "properties": {
573
+ "text": {
574
+ "type": "string",
575
+ "maxLength": 200
576
+ }
577
+ }
578
+ },
579
+ "effects": [
580
+ "filters visible rows",
581
+ "resets to page 0"
582
+ ],
583
+ "reversible": true
584
+ },
585
+ "filter": {
586
+ "summary": "Apply a typed filter to one column. Operators are constrained by the column's type.",
587
+ "apiMethod": "setFilter",
588
+ "input": {
589
+ "type": "object",
590
+ "required": [
591
+ "column",
592
+ "operator"
593
+ ],
594
+ "properties": {
595
+ "column": {
596
+ "type": "string",
597
+ "description": "Column id from the runtime contract."
598
+ },
599
+ "operator": {
600
+ "enum": [
601
+ "contains",
602
+ "notContains",
603
+ "equals",
604
+ "notEquals",
605
+ "startsWith",
606
+ "endsWith",
607
+ "gt",
608
+ "gte",
609
+ "lt",
610
+ "lte",
611
+ "between",
612
+ "before",
613
+ "after",
614
+ "in",
615
+ "isEmpty",
616
+ "isNotEmpty"
617
+ ]
618
+ },
619
+ "value": {},
620
+ "value2": {
621
+ "description": "Upper bound; only for the `between` operator."
622
+ }
623
+ }
624
+ },
625
+ "effects": [
626
+ "filters visible rows",
627
+ "resets to page 0"
628
+ ],
629
+ "reversible": true
630
+ },
631
+ "clearFilters": {
632
+ "summary": "Remove every column filter and the search text.",
633
+ "apiMethod": "clearFilters",
634
+ "effects": [
635
+ "restores every row"
636
+ ],
637
+ "reversible": true
638
+ },
639
+ "sort": {
640
+ "summary": "Sort by one column, replacing the current sort unless `append` is set.",
641
+ "apiMethod": "setSorting",
642
+ "input": {
643
+ "type": "object",
644
+ "required": [
645
+ "column",
646
+ "direction"
647
+ ],
648
+ "properties": {
649
+ "column": {
650
+ "type": "string"
651
+ },
652
+ "direction": {
653
+ "enum": [
654
+ "asc",
655
+ "desc"
656
+ ]
657
+ },
658
+ "append": {
659
+ "type": "boolean",
660
+ "default": false,
661
+ "description": "Add to the existing sort instead of replacing it."
662
+ }
663
+ }
664
+ },
665
+ "effects": [
666
+ "reorders visible rows"
667
+ ],
668
+ "reversible": true
669
+ },
670
+ "clearSort": {
671
+ "summary": "Return to the data's original order.",
672
+ "apiMethod": "setSorting",
673
+ "effects": [
674
+ "reorders visible rows"
675
+ ],
676
+ "reversible": true
677
+ },
678
+ "selectRows": {
679
+ "summary": "Select or deselect rows by id.",
680
+ "apiMethod": "toggleRowSelected",
681
+ "input": {
682
+ "type": "object",
683
+ "required": [
684
+ "rowIds"
685
+ ],
686
+ "properties": {
687
+ "rowIds": {
688
+ "type": "array",
689
+ "items": {
690
+ "type": "string"
691
+ },
692
+ "minItems": 1
693
+ },
694
+ "value": {
695
+ "type": "boolean",
696
+ "default": true
697
+ }
698
+ }
699
+ },
700
+ "effects": [
701
+ "changes rowSelection"
702
+ ],
703
+ "reversible": true
704
+ },
705
+ "selectAll": {
706
+ "summary": "Select, or clear, every row matching the current filters.",
707
+ "apiMethod": "toggleAllRowsSelected",
708
+ "input": {
709
+ "type": "object",
710
+ "properties": {
711
+ "value": {
712
+ "type": "boolean",
713
+ "default": true
714
+ }
715
+ }
716
+ },
717
+ "effects": [
718
+ "changes rowSelection"
719
+ ],
720
+ "reversible": true
721
+ },
722
+ "clearSelection": {
723
+ "summary": "Deselect every row.",
724
+ "apiMethod": "clearSelection",
725
+ "effects": [
726
+ "changes rowSelection"
727
+ ],
728
+ "reversible": true
729
+ },
730
+ "setColumnVisibility": {
731
+ "summary": "Show or hide one column.",
732
+ "apiMethod": "setColumnVisibility",
733
+ "input": {
734
+ "type": "object",
735
+ "required": [
736
+ "column",
737
+ "visible"
738
+ ],
739
+ "properties": {
740
+ "column": {
741
+ "type": "string"
742
+ },
743
+ "visible": {
744
+ "type": "boolean"
745
+ }
746
+ }
747
+ },
748
+ "effects": [
749
+ "changes columnVisibility"
750
+ ],
751
+ "reversible": true
752
+ },
753
+ "pinColumn": {
754
+ "summary": "Pin a column to an edge, or unpin it with a null side.",
755
+ "apiMethod": "pinColumn",
756
+ "input": {
757
+ "type": "object",
758
+ "required": [
759
+ "column",
760
+ "side"
761
+ ],
762
+ "properties": {
763
+ "column": {
764
+ "type": "string"
765
+ },
766
+ "side": {
767
+ "enum": [
768
+ "left",
769
+ "right",
770
+ null
771
+ ]
772
+ }
773
+ }
774
+ },
775
+ "effects": [
776
+ "changes columnPinning"
777
+ ],
778
+ "reversible": true
779
+ },
780
+ "moveColumn": {
781
+ "summary": "Move a column before or after another one.",
782
+ "apiMethod": "moveColumn",
783
+ "input": {
784
+ "type": "object",
785
+ "required": [
786
+ "column",
787
+ "target",
788
+ "placement"
789
+ ],
790
+ "properties": {
791
+ "column": {
792
+ "type": "string"
793
+ },
794
+ "target": {
795
+ "type": "string"
796
+ },
797
+ "placement": {
798
+ "enum": [
799
+ "before",
800
+ "after"
801
+ ]
802
+ }
803
+ }
804
+ },
805
+ "effects": [
806
+ "changes columnOrder"
807
+ ],
808
+ "reversible": true
809
+ },
810
+ "setColumnWidth": {
811
+ "summary": "Set a column's width in pixels, or null to restore its default.",
812
+ "apiMethod": "setColumnWidth",
813
+ "input": {
814
+ "type": "object",
815
+ "required": [
816
+ "column",
817
+ "width"
818
+ ],
819
+ "properties": {
820
+ "column": {
821
+ "type": "string"
822
+ },
823
+ "width": {
824
+ "type": [
825
+ "integer",
826
+ "null"
827
+ ],
828
+ "minimum": 1
829
+ }
830
+ }
831
+ },
832
+ "effects": [
833
+ "changes columnSizing"
834
+ ],
835
+ "reversible": true
836
+ },
837
+ "resetColumns": {
838
+ "summary": "Restore column order, width, visibility and pinning to their defaults.",
839
+ "apiMethod": "resetColumns",
840
+ "effects": [
841
+ "changes columnOrder",
842
+ "changes columnVisibility",
843
+ "changes columnSizing",
844
+ "changes columnPinning"
845
+ ],
846
+ "reversible": true
847
+ },
848
+ "setPage": {
849
+ "summary": "Jump to a page, counting from zero.",
850
+ "apiMethod": "setPageIndex",
851
+ "input": {
852
+ "type": "object",
853
+ "required": [
854
+ "index"
855
+ ],
856
+ "properties": {
857
+ "index": {
858
+ "type": "integer",
859
+ "minimum": 0
860
+ }
861
+ }
862
+ },
863
+ "effects": [
864
+ "changes the visible page"
865
+ ],
866
+ "reversible": true
867
+ },
868
+ "setPageSize": {
869
+ "summary": "Change how many rows a page holds.",
870
+ "apiMethod": "setPageSize",
871
+ "input": {
872
+ "type": "object",
873
+ "required": [
874
+ "size"
875
+ ],
876
+ "properties": {
877
+ "size": {
878
+ "type": "integer",
879
+ "minimum": 1
880
+ }
881
+ }
882
+ },
883
+ "effects": [
884
+ "changes the visible page"
885
+ ],
886
+ "reversible": true
887
+ },
888
+ "setDensity": {
889
+ "summary": "Change row height.",
890
+ "apiMethod": "setDensity",
891
+ "input": {
892
+ "type": "object",
893
+ "required": [
894
+ "density"
895
+ ],
896
+ "properties": {
897
+ "density": {
898
+ "enum": [
899
+ "compact",
900
+ "standard",
901
+ "comfortable"
902
+ ]
903
+ }
904
+ }
905
+ },
906
+ "effects": [
907
+ "changes row height"
908
+ ],
909
+ "reversible": true
910
+ },
911
+ "export": {
912
+ "summary": "Download the chosen rows as a file.",
913
+ "input": {
914
+ "type": "object",
915
+ "required": [
916
+ "format"
917
+ ],
918
+ "properties": {
919
+ "format": {
920
+ "enum": [
921
+ "csv",
922
+ "excel",
923
+ "pdf"
924
+ ]
925
+ },
926
+ "scope": {
927
+ "enum": [
928
+ "filtered",
929
+ "all",
930
+ "selected",
931
+ "page"
932
+ ],
933
+ "default": "filtered"
934
+ },
935
+ "fileName": {
936
+ "type": "string",
937
+ "maxLength": 120
938
+ }
939
+ }
940
+ },
941
+ "effects": [
942
+ "downloads a file"
943
+ ],
944
+ "reversible": false,
945
+ "requiresConfirmation": true,
946
+ "note": "Three formats, three GridApi methods (exportCsv, exportExcel, exportPdf), so no single apiMethod applies."
947
+ },
948
+ "print": {
949
+ "summary": "Open the browser's print dialog with the table laid out for paper.",
950
+ "apiMethod": "print",
951
+ "input": {
952
+ "type": "object",
953
+ "properties": {
954
+ "scope": {
955
+ "enum": [
956
+ "filtered",
957
+ "all",
958
+ "selected",
959
+ "page"
960
+ ],
961
+ "default": "filtered"
962
+ },
963
+ "title": {
964
+ "type": "string",
965
+ "maxLength": 120
966
+ }
967
+ }
968
+ },
969
+ "effects": [
970
+ "opens the print dialog"
971
+ ],
972
+ "reversible": false,
973
+ "requiresConfirmation": true
974
+ },
975
+ "copy": {
976
+ "summary": "Copy the selected rows to the clipboard as tab-separated text.",
977
+ "apiMethod": "copyToClipboard",
978
+ "effects": [
979
+ "writes to the clipboard"
980
+ ],
981
+ "reversible": false,
982
+ "requiresConfirmation": true
983
+ },
984
+ "undo": {
985
+ "summary": "Restore the state from before the last operation.",
986
+ "effects": [
987
+ "restores a previous state"
988
+ ],
989
+ "reversible": false,
990
+ "note": "Performed by the agent runtime's snapshot history, not by GridApi."
991
+ },
992
+ "redo": {
993
+ "summary": "Re-apply the operation that was last undone.",
994
+ "effects": [
995
+ "restores a later state"
996
+ ],
997
+ "reversible": false,
998
+ "note": "Performed by the agent runtime's snapshot history, not by GridApi."
999
+ }
1000
+ },
1001
+ "intentDomains": [
1002
+ "Query",
1003
+ "ActionIntent",
1004
+ "Extraction"
1005
+ ],
1006
+ "safeMutations": {
1007
+ "allowed": [
1008
+ "height",
1009
+ "autoHeight",
1010
+ "rowHeight",
1011
+ "headerHeight",
1012
+ "toolbar",
1013
+ "pageSizeOptions",
1014
+ "emptyState",
1015
+ "locale",
1016
+ "localeText",
1017
+ "aria-label"
1018
+ ],
1019
+ "forbidden": [
1020
+ "data",
1021
+ "columns",
1022
+ "getRowId",
1023
+ "mode",
1024
+ "state",
1025
+ "onStateChange",
1026
+ "onQueryChange"
1027
+ ],
1028
+ "rationale": "Presentation is safe to change. `data`/`columns`/`getRowId` are memoization keys — replacing them re-creates the grid model. `mode` and the state callbacks define the client/server contract."
1029
+ },
1030
+ "examples": [],
1031
+ "coverage": {
1032
+ "propsTotal": 45,
1033
+ "propsDescribed": 12,
1034
+ "describedPct": 27,
1035
+ "authoredSections": [
1036
+ "accessibility",
1037
+ "composition",
1038
+ "intentDomains",
1039
+ "operations",
1040
+ "purpose",
1041
+ "safeMutations"
1042
+ ]
1043
+ },
1044
+ "notImplemented": [
1045
+ "grouping — no API, no state field, no operation",
1046
+ "aggregation — no API, no state field, no operation",
1047
+ "row-level mutation — no add, delete or set-cell API; editing is a UI affordance only",
1048
+ "notIn — a column with fixed options filters by membership only; an exclusion must list the complement",
1049
+ "multi-value filter on a plain string column — one column holds one filter"
1050
+ ]
1051
+ }