igniteui-cli 15.1.0 → 15.2.1-alpha.3
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/lib/PromptSession.d.ts +1 -1
- package/lib/PromptSession.js +2 -2
- package/lib/commands/ai-config.d.ts +3 -5
- package/lib/commands/ai-config.js +68 -23
- package/lib/commands/new.js +1 -1
- package/package.json +4 -4
- package/templates/blazor/igb/index.d.ts +1 -0
- package/templates/blazor/igb/index.js +12 -0
- package/templates/blazor/igb/projects/ai-config/files/AGENTS.md +65 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/AGENTS.md +65 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/README.md +61 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/SKILL.md +118 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/charts.md +302 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/data-display.md +350 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/feedback.md +178 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/form-controls.md +365 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/layout-manager.md +180 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/layout.md +322 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/mcp-setup.md +78 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/setup.md +214 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-generate-from-image-design/SKILL.md +284 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-generate-from-image-design/references/component-mapping.md +281 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-generate-from-image-design/references/gotchas.md +503 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/SKILL.md +188 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/data-operations.md +264 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/editing.md +297 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/features.md +447 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/mcp-setup.md +78 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/paging-remote.md +299 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/sizing.md +284 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/state.md +160 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/structure.md +497 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/types.md +553 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-theming/SKILL.md +259 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-theming/references/common-patterns.md +276 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-theming/references/mcp-setup.md +81 -0
- package/templates/blazor/igb/projects/ai-config/index.d.ts +22 -0
- package/templates/blazor/igb/projects/ai-config/index.js +62 -0
- package/templates/blazor/index.d.ts +3 -0
- package/templates/blazor/index.js +11 -0
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
# Features - Grouping, Summaries, Merging, Toolbar, Export, Row Drag, Action Strip, Master-Detail & Clipboard
|
|
2
|
+
|
|
3
|
+
> **Part of the [`igniteui-blazor-grids`](../SKILL.md) skill hub.**
|
|
4
|
+
> For grid setup and column configuration — see [`structure.md`](./structure.md).
|
|
5
|
+
> For cell and row editing — see [`editing.md`](./editing.md).
|
|
6
|
+
|
|
7
|
+
## Contents
|
|
8
|
+
|
|
9
|
+
- [Grouping (IgbGrid Only)](#grouping-igbgrid-only)
|
|
10
|
+
- [Summaries](#summaries)
|
|
11
|
+
- [Cell Merging (IgbGrid Only)](#cell-merging-igbgrid-only)
|
|
12
|
+
- [Toolbar](#toolbar)
|
|
13
|
+
- [Export](#export)
|
|
14
|
+
- [Virtualization & Performance](#virtualization--performance)
|
|
15
|
+
- [Row Drag](#row-drag)
|
|
16
|
+
- [Action Strip](#action-strip)
|
|
17
|
+
- [Master-Detail (IgbGrid Only)](#master-detail-igbgrid-only)
|
|
18
|
+
- [Clipboard](#clipboard)
|
|
19
|
+
- [Key Rules](#key-rules)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Grouping (IgbGrid Only)
|
|
24
|
+
|
|
25
|
+
Grouping is exclusive to the Flat Grid (`IgbGrid`). Tree Grid and Hierarchical Grid do not support grouping.
|
|
26
|
+
|
|
27
|
+
### Enable grouping
|
|
28
|
+
|
|
29
|
+
```razor
|
|
30
|
+
<IgbGrid Data="data" PrimaryKey="Id" AutoGenerate="false">
|
|
31
|
+
<IgbColumn Field="Department" Header="Department" Groupable="true" />
|
|
32
|
+
<IgbColumn Field="Name" Header="Name" />
|
|
33
|
+
<IgbColumn Field="Salary" Header="Salary" DataType="GridColumnDataType.Currency" />
|
|
34
|
+
</IgbGrid>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Users can drag column headers to the group area, or click the column menu grouping option.
|
|
38
|
+
|
|
39
|
+
### Pre-set grouping expressions
|
|
40
|
+
|
|
41
|
+
```razor
|
|
42
|
+
<IgbGrid Data="data" PrimaryKey="Id" GroupingExpressions="groupingExpressions">
|
|
43
|
+
<IgbColumn Field="Department" Groupable="true" />
|
|
44
|
+
<IgbColumn Field="Name" />
|
|
45
|
+
</IgbGrid>
|
|
46
|
+
|
|
47
|
+
@code {
|
|
48
|
+
private IgbGroupingExpression[] groupingExpressions = new[]
|
|
49
|
+
{
|
|
50
|
+
new IgbGroupingExpression
|
|
51
|
+
{
|
|
52
|
+
FieldName = "Department",
|
|
53
|
+
Dir = SortingDirection.Asc
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Group row template
|
|
60
|
+
|
|
61
|
+
Customize the group row:
|
|
62
|
+
|
|
63
|
+
```razor
|
|
64
|
+
<IgbGrid Data="data" PrimaryKey="Id">
|
|
65
|
+
<IgbColumn Field="Department" Groupable="true" />
|
|
66
|
+
<GroupRowTemplate>
|
|
67
|
+
@{
|
|
68
|
+
var groupRow = (IgbGroupByRowTemplateContext)context;
|
|
69
|
+
}
|
|
70
|
+
<span>
|
|
71
|
+
<strong>@groupRow.GroupRow.Expression.FieldName</strong>:
|
|
72
|
+
@groupRow.GroupRow.Value
|
|
73
|
+
(@groupRow.GroupRow.Records.Count items)
|
|
74
|
+
</span>
|
|
75
|
+
</GroupRowTemplate>
|
|
76
|
+
</IgbGrid>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Hide group area
|
|
80
|
+
|
|
81
|
+
```razor
|
|
82
|
+
<IgbGrid Data="data" PrimaryKey="Id" HideGroupedColumns="true">
|
|
83
|
+
...
|
|
84
|
+
</IgbGrid>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Grouping events
|
|
88
|
+
|
|
89
|
+
| Event | Type | Description |
|
|
90
|
+
|---|---|---|
|
|
91
|
+
| `GroupingDone` | `EventCallback<IgbGroupingDoneEventArgs>` | Fires after a column is grouped/ungrouped |
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Summaries
|
|
96
|
+
|
|
97
|
+
### Built-in summaries
|
|
98
|
+
|
|
99
|
+
Enable with `HasSummary="true"` on a column. The built-in summaries depend on the column's data type:
|
|
100
|
+
|
|
101
|
+
| Data Type | Default Summaries |
|
|
102
|
+
|---|---|
|
|
103
|
+
| String | Count |
|
|
104
|
+
| Number | Count, Min, Max, Sum, Avg |
|
|
105
|
+
| Date | Count, Earliest, Latest |
|
|
106
|
+
| Boolean | Count |
|
|
107
|
+
|
|
108
|
+
```razor
|
|
109
|
+
<IgbGrid Data="data" PrimaryKey="Id">
|
|
110
|
+
<IgbColumn Field="Name" Header="Name" HasSummary="true" DataType="GridColumnDataType.String" />
|
|
111
|
+
<IgbColumn Field="Salary" Header="Salary" HasSummary="true" DataType="GridColumnDataType.Number" />
|
|
112
|
+
<IgbColumn Field="HireDate" Header="Hire Date" HasSummary="true" DataType="GridColumnDataType.Date" />
|
|
113
|
+
</IgbGrid>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Custom summary operands
|
|
117
|
+
|
|
118
|
+
Extend `IgbNumberSummaryOperand` (or `IgbDateSummaryOperand`, `IgbSummaryOperand`) and override `Operate()` to return `IgbSummaryResult[]`. Apply via `Summaries` parameter:
|
|
119
|
+
|
|
120
|
+
```razor
|
|
121
|
+
<IgbColumn Field="Salary" Header="Salary" HasSummary="true"
|
|
122
|
+
Summaries="typeof(MySalarySummary)" />
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
> For full custom summary class syntax, call `get_doc(framework: "blazor", slug: "grids/grid/summaries")` and use `get_api_reference` for the exact API contract.
|
|
126
|
+
|
|
127
|
+
### Summary position
|
|
128
|
+
|
|
129
|
+
```razor
|
|
130
|
+
<IgbGrid Data="data" PrimaryKey="Id" SummaryPosition="GridSummaryPosition.Top">
|
|
131
|
+
...
|
|
132
|
+
</IgbGrid>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Values: `GridSummaryPosition.Top`, `GridSummaryPosition.Bottom` (default).
|
|
136
|
+
|
|
137
|
+
### Summary calculation mode
|
|
138
|
+
|
|
139
|
+
```razor
|
|
140
|
+
<IgbGrid Data="data" PrimaryKey="Id" SummaryCalculationMode="GridSummaryCalculationMode.RootLevelOnly">
|
|
141
|
+
...
|
|
142
|
+
</IgbGrid>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Values: `GridSummaryCalculationMode.RootLevelOnly`, `GridSummaryCalculationMode.ChildLevelsOnly`, `GridSummaryCalculationMode.RootAndChildLevels`.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Cell Merging (IgbGrid Only)
|
|
150
|
+
|
|
151
|
+
Merge visually identical adjacent cells in a column:
|
|
152
|
+
|
|
153
|
+
```razor
|
|
154
|
+
<IgbGrid Data="data" PrimaryKey="Id">
|
|
155
|
+
<IgbColumn Field="Country" Header="Country" Merge="true" />
|
|
156
|
+
<IgbColumn Field="City" Header="City" Merge="true" />
|
|
157
|
+
<IgbColumn Field="Name" Header="Name" />
|
|
158
|
+
</IgbGrid>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Cell merging requires the data to be sorted by the merged columns for meaningful visual grouping.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Toolbar
|
|
166
|
+
|
|
167
|
+
The grid toolbar provides built-in UI for column hiding, column pinning, exporting, and advanced filtering.
|
|
168
|
+
|
|
169
|
+
### Basic toolbar
|
|
170
|
+
|
|
171
|
+
```razor
|
|
172
|
+
<IgbGrid Data="data" PrimaryKey="Id">
|
|
173
|
+
<IgbGridToolbar>
|
|
174
|
+
<IgbGridToolbarTitle>Employees</IgbGridToolbarTitle>
|
|
175
|
+
<IgbGridToolbarActions>
|
|
176
|
+
<IgbGridToolbarHiding />
|
|
177
|
+
<IgbGridToolbarPinning />
|
|
178
|
+
<IgbGridToolbarExporter />
|
|
179
|
+
<IgbGridToolbarAdvancedFiltering />
|
|
180
|
+
</IgbGridToolbarActions>
|
|
181
|
+
</IgbGridToolbar>
|
|
182
|
+
<IgbColumn Field="Name" Header="Name" />
|
|
183
|
+
<IgbColumn Field="Department" Header="Department" />
|
|
184
|
+
</IgbGrid>
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Toolbar components
|
|
188
|
+
|
|
189
|
+
| Component | Description |
|
|
190
|
+
|---|---|
|
|
191
|
+
| `IgbGridToolbar` | Container for the toolbar |
|
|
192
|
+
| `IgbGridToolbarTitle` | Displays a title/caption |
|
|
193
|
+
| `IgbGridToolbarActions` | Container for action buttons |
|
|
194
|
+
| `IgbGridToolbarHiding` | Column hiding UI |
|
|
195
|
+
| `IgbGridToolbarPinning` | Column pinning UI |
|
|
196
|
+
| `IgbGridToolbarExporter` | Export to Excel/CSV buttons |
|
|
197
|
+
| `IgbGridToolbarAdvancedFiltering` | Opens the advanced filtering dialog |
|
|
198
|
+
|
|
199
|
+
### Custom toolbar content
|
|
200
|
+
|
|
201
|
+
```razor
|
|
202
|
+
<IgbGridToolbar>
|
|
203
|
+
<IgbGridToolbarTitle>My Data</IgbGridToolbarTitle>
|
|
204
|
+
<IgbGridToolbarActions>
|
|
205
|
+
<IgbButton @onclick="RefreshData">Refresh</IgbButton>
|
|
206
|
+
<IgbGridToolbarExporter />
|
|
207
|
+
</IgbGridToolbarActions>
|
|
208
|
+
</IgbGridToolbar>
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Export
|
|
214
|
+
|
|
215
|
+
### Excel Export
|
|
216
|
+
|
|
217
|
+
```razor
|
|
218
|
+
<IgbGrid @ref="grid" Data="data" PrimaryKey="Id">
|
|
219
|
+
<IgbGridToolbar>
|
|
220
|
+
<IgbGridToolbarActions>
|
|
221
|
+
<IgbGridToolbarExporter ExportExcel="true" ExportCSV="false" />
|
|
222
|
+
</IgbGridToolbarActions>
|
|
223
|
+
</IgbGridToolbar>
|
|
224
|
+
...
|
|
225
|
+
</IgbGrid>
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Programmatic export
|
|
229
|
+
|
|
230
|
+
```razor
|
|
231
|
+
@inject IgbExcelExporterService ExcelExporter
|
|
232
|
+
@inject IgbCsvExporterService CsvExporter
|
|
233
|
+
|
|
234
|
+
<IgbGrid @ref="grid" Data="data" PrimaryKey="Id">
|
|
235
|
+
...
|
|
236
|
+
</IgbGrid>
|
|
237
|
+
|
|
238
|
+
<IgbButton @onclick="ExportToExcel">Export to Excel</IgbButton>
|
|
239
|
+
<IgbButton @onclick="ExportToCsv">Export to CSV</IgbButton>
|
|
240
|
+
|
|
241
|
+
@code {
|
|
242
|
+
private IgbGrid grid = default!;
|
|
243
|
+
|
|
244
|
+
private async Task ExportToExcel()
|
|
245
|
+
{
|
|
246
|
+
var options = new IgbExcelExporterOptions("employees");
|
|
247
|
+
await ExcelExporter.ExportAsync(grid, options);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
private async Task ExportToCsv()
|
|
251
|
+
{
|
|
252
|
+
var options = new IgbCsvExporterOptions("employees");
|
|
253
|
+
options.FileType = CsvFileTypes.CSV;
|
|
254
|
+
await CsvExporter.ExportAsync(grid, options);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Export options
|
|
260
|
+
|
|
261
|
+
| Option | Type | Description |
|
|
262
|
+
|---|---|---|
|
|
263
|
+
| `FileName` | `string` | Name of the exported file (without extension) |
|
|
264
|
+
| `IgnoreFiltering` | `bool` | Export all data, not just filtered |
|
|
265
|
+
| `IgnoreSorting` | `bool` | Export in original data order |
|
|
266
|
+
| `IgnoreColumnsVisibility` | `bool` | Include hidden columns in export |
|
|
267
|
+
| `ExportGroupedRows` | `bool` | Include group rows in export (IgbGrid only) |
|
|
268
|
+
|
|
269
|
+
### Export events
|
|
270
|
+
|
|
271
|
+
| Event | Description |
|
|
272
|
+
|---|---|
|
|
273
|
+
| `ExportStarted` | Fires before export begins - cancel or configure here |
|
|
274
|
+
| `ExportEnded` | Fires after export completes |
|
|
275
|
+
| `ColumnExporting` | Fires for each column - skip or modify |
|
|
276
|
+
| `RowExporting` | Fires for each row - skip or modify |
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Virtualization & Performance
|
|
281
|
+
|
|
282
|
+
Both row and column virtualization are **enabled by default** when the grid has a fixed `Height`. The grid only renders DOM elements for the visible portion.
|
|
283
|
+
|
|
284
|
+
### Requirements for virtualization
|
|
285
|
+
|
|
286
|
+
1. **Set `Height`** on the grid - virtualization needs a fixed pixel or percentage height.
|
|
287
|
+
2. **Set `Width`** on columns - column virtualization requires defined column widths when total column width exceeds the grid width.
|
|
288
|
+
|
|
289
|
+
### Best practices
|
|
290
|
+
|
|
291
|
+
- Bind to a concrete `List<T>` or `T[]`, not `IQueryable`.
|
|
292
|
+
- For large data sets (100k+ rows), consider remote paging or virtualized data loading (see `references/paging-remote.md`).
|
|
293
|
+
- Avoid complex templates on frequently re-rendered columns.
|
|
294
|
+
- Use `OnDemand` summaries if summaries on large data sets cause slow rendering.
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## Row Drag
|
|
299
|
+
|
|
300
|
+
Enable row reordering or drag-to-external targets:
|
|
301
|
+
|
|
302
|
+
```razor
|
|
303
|
+
<IgbGrid Data="data" PrimaryKey="Id" RowDraggable="true"
|
|
304
|
+
RowDragEnd="OnRowDragEnd">
|
|
305
|
+
...
|
|
306
|
+
</IgbGrid>
|
|
307
|
+
|
|
308
|
+
@code {
|
|
309
|
+
private void OnRowDragEnd(IgbRowDragEndEventArgs args)
|
|
310
|
+
{
|
|
311
|
+
// args.DragData contains the dragged row data
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### Row drag events
|
|
317
|
+
|
|
318
|
+
| Event | Type | Description |
|
|
319
|
+
|---|---|---|
|
|
320
|
+
| `RowDragStart` | `EventCallback<IgbRowDragStartEventArgs>` | Fires when drag begins |
|
|
321
|
+
| `RowDragEnd` | `EventCallback<IgbRowDragEndEventArgs>` | Fires when drag ends (drop) |
|
|
322
|
+
|
|
323
|
+
### Custom drag ghost
|
|
324
|
+
|
|
325
|
+
```razor
|
|
326
|
+
<IgbGrid Data="data" PrimaryKey="Id" RowDraggable="true">
|
|
327
|
+
<DragGhostTemplate>
|
|
328
|
+
@{
|
|
329
|
+
var row = (IgbGridRowDragGhostContext)context;
|
|
330
|
+
}
|
|
331
|
+
<div class="custom-ghost">
|
|
332
|
+
Moving: @row.RowData
|
|
333
|
+
</div>
|
|
334
|
+
</DragGhostTemplate>
|
|
335
|
+
...
|
|
336
|
+
</IgbGrid>
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## Action Strip
|
|
342
|
+
|
|
343
|
+
Add context actions (edit, delete, pin) that appear when hovering or selecting a row:
|
|
344
|
+
|
|
345
|
+
```razor
|
|
346
|
+
<IgbGrid Data="data" PrimaryKey="Id" RowEditable="true">
|
|
347
|
+
<IgbColumn Field="Name" Header="Name" Editable="true" />
|
|
348
|
+
<IgbColumn Field="Salary" Header="Salary" Editable="true" />
|
|
349
|
+
<IgbActionStrip>
|
|
350
|
+
<IgbGridEditingActions AddRow="true" />
|
|
351
|
+
<IgbGridPinningActions />
|
|
352
|
+
</IgbActionStrip>
|
|
353
|
+
</IgbGrid>
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Action strip components
|
|
357
|
+
|
|
358
|
+
| Component | Description |
|
|
359
|
+
|---|---|
|
|
360
|
+
| `IgbActionStrip` | Container for row-level actions |
|
|
361
|
+
| `IgbGridEditingActions` | Provides edit/delete/add row buttons |
|
|
362
|
+
| `IgbGridPinningActions` | Provides pin/unpin row buttons |
|
|
363
|
+
|
|
364
|
+
### Custom actions
|
|
365
|
+
|
|
366
|
+
```razor
|
|
367
|
+
<IgbActionStrip>
|
|
368
|
+
<IgbGridEditingActions />
|
|
369
|
+
<IgbButton @onclick="() => ViewDetails(currentRowId)">
|
|
370
|
+
<IgbIcon Name="visibility" Collection="material" />
|
|
371
|
+
</IgbButton>
|
|
372
|
+
</IgbActionStrip>
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
## Master-Detail (IgbGrid Only)
|
|
378
|
+
|
|
379
|
+
Show a detail view for each expanded row. This is specific to the flat grid - for multi-schema parent-child, use Hierarchical Grid instead.
|
|
380
|
+
|
|
381
|
+
```razor
|
|
382
|
+
<IgbGrid Data="customers" PrimaryKey="CustomerId" AutoGenerate="false">
|
|
383
|
+
<IgbColumn Field="CustomerId" Header="ID" />
|
|
384
|
+
<IgbColumn Field="Name" Header="Customer Name" />
|
|
385
|
+
<IgbColumn Field="Country" Header="Country" />
|
|
386
|
+
<DetailTemplate>
|
|
387
|
+
@{
|
|
388
|
+
var customer = (Customer)context;
|
|
389
|
+
}
|
|
390
|
+
<div style="padding: 16px;">
|
|
391
|
+
<h4>Orders for @customer.Name</h4>
|
|
392
|
+
<IgbGrid Data="customer.Orders" PrimaryKey="OrderId" AutoGenerate="true"
|
|
393
|
+
Width="100%" Height="200px" />
|
|
394
|
+
</div>
|
|
395
|
+
</DetailTemplate>
|
|
396
|
+
</IgbGrid>
|
|
397
|
+
|
|
398
|
+
@code {
|
|
399
|
+
private List<Customer> customers = new(); // Customer has Orders child collection
|
|
400
|
+
}
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
> **Important:** Master-detail via `DetailTemplate` is not available on Tree Grid, Hierarchical Grid, or Pivot Grid. For multi-schema hierarchies, use `IgbHierarchicalGrid` with `IgbRowIsland`.
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
|
|
407
|
+
## Clipboard
|
|
408
|
+
|
|
409
|
+
Grid supports copy-to-clipboard out of the box.
|
|
410
|
+
|
|
411
|
+
### Key bindings
|
|
412
|
+
|
|
413
|
+
| Keys | Action |
|
|
414
|
+
|---|---|
|
|
415
|
+
| `Ctrl+C` | Copy selected cells |
|
|
416
|
+
| `Ctrl+Shift+H` | Copy with headers |
|
|
417
|
+
|
|
418
|
+
### Configuration
|
|
419
|
+
|
|
420
|
+
```razor
|
|
421
|
+
<IgbGrid Data="data" PrimaryKey="Id"
|
|
422
|
+
ClipboardOptions="clipboardOptions">
|
|
423
|
+
...
|
|
424
|
+
</IgbGrid>
|
|
425
|
+
|
|
426
|
+
@code {
|
|
427
|
+
private IgbClipboardOptions clipboardOptions = new IgbClipboardOptions
|
|
428
|
+
{
|
|
429
|
+
Enabled = true,
|
|
430
|
+
CopyHeaders = true,
|
|
431
|
+
CopyFormatters = true,
|
|
432
|
+
Separator = "\t"
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
---
|
|
438
|
+
|
|
439
|
+
## Key Rules
|
|
440
|
+
|
|
441
|
+
1. **Grouping is IgbGrid only** - do not attempt `Groupable` on Tree Grid or Hierarchical Grid columns.
|
|
442
|
+
2. **Cell merging is IgbGrid only** - it has no effect on other grid types.
|
|
443
|
+
3. **Master-detail is IgbGrid only** - for other grids, use Tree Grid or Hierarchical Grid.
|
|
444
|
+
4. **Virtualization requires a fixed grid height** - without `Height`, all rows render.
|
|
445
|
+
5. **Export requires the toolbar or programmatic service injection** - register `IgbExcelExporterService` or `IgbCsvExporterService` if using programmatic export.
|
|
446
|
+
6. **Action strip requires `RowEditable="true"`** for editing actions to function.
|
|
447
|
+
7. **Summaries respect the `SummaryCalculationMode`** - set it for tree/hierarchical grids to control level-based calculations.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Setting Up the Ignite UI CLI MCP Server
|
|
2
|
+
|
|
3
|
+
> **Part of the [`igniteui-blazor-grids`](../SKILL.md) skill hub.**
|
|
4
|
+
|
|
5
|
+
## Contents
|
|
6
|
+
|
|
7
|
+
- [VS Code](#vs-code)
|
|
8
|
+
- [Cursor](#cursor)
|
|
9
|
+
- [Claude Desktop](#claude-desktop)
|
|
10
|
+
- [WebStorm / JetBrains IDEs](#webstorm--jetbrains-ides)
|
|
11
|
+
- [Verifying the Setup](#verifying-the-setup)
|
|
12
|
+
|
|
13
|
+
The Ignite UI CLI MCP server enables AI assistants to discover Ignite UI grid documentation, validate Blazor doc slugs, and avoid borrowing Angular, React, or Web Components APIs. It must be configured in your editor before these tools become available.
|
|
14
|
+
|
|
15
|
+
## VS Code
|
|
16
|
+
|
|
17
|
+
Create or edit `.vscode/mcp.json` in your project:
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"servers": {
|
|
22
|
+
"igniteui-cli": {
|
|
23
|
+
"command": "npx",
|
|
24
|
+
"args": ["-y", "igniteui-cli", "mcp"]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
This works whether `igniteui-cli` is installed locally in `node_modules` or needs to be pulled from the npm registry; `npx -y` handles both cases.
|
|
31
|
+
|
|
32
|
+
## Cursor
|
|
33
|
+
|
|
34
|
+
Create or edit `.cursor/mcp.json`:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"mcpServers": {
|
|
39
|
+
"igniteui-cli": {
|
|
40
|
+
"command": "npx",
|
|
41
|
+
"args": ["-y", "igniteui-cli", "mcp"]
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Claude Desktop
|
|
48
|
+
|
|
49
|
+
Edit the Claude Desktop config file:
|
|
50
|
+
|
|
51
|
+
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
52
|
+
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"mcpServers": {
|
|
57
|
+
"igniteui-cli": {
|
|
58
|
+
"command": "npx",
|
|
59
|
+
"args": ["-y", "igniteui-cli", "mcp"]
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## WebStorm / JetBrains IDEs
|
|
66
|
+
|
|
67
|
+
1. Go to **Settings -> Tools -> AI Assistant -> MCP Servers**
|
|
68
|
+
2. Click **+ Add MCP Server**
|
|
69
|
+
3. Set Command to `npx` and Arguments to `igniteui-cli mcp`
|
|
70
|
+
4. Click OK and restart the AI Assistant
|
|
71
|
+
|
|
72
|
+
## Verifying the Setup
|
|
73
|
+
|
|
74
|
+
After configuring the MCP server, ask your AI assistant:
|
|
75
|
+
|
|
76
|
+
> "List all available Ignite UI for Blazor grid docs"
|
|
77
|
+
|
|
78
|
+
If the MCP server is running, `list_components(framework: "blazor", filter: "grid")` or `search_docs(framework: "blazor", query: "grid")` will return available Blazor grid documentation entries.
|