igniteui-cli 15.2.2 → 15.3.1-beta.1
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/commands/build.js +7 -12
- package/package.json +7 -7
- package/templates/blazor/igb/projects/ai-config/files/skills/AGENTS.md +0 -5
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/SKILL.md +2 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/charts.md +7 -35
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/data-display.md +0 -54
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/feedback.md +0 -38
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/form-controls.md +0 -68
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/layout-manager.md +1 -124
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/layout.md +0 -62
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/grid-migration.md +322 -0
- package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-theming/SKILL.md +1 -1
- package/templates/react/igr-ts/projects/_base/files/package.json +1 -0
- package/templates/react/igr-ts/projects/_base/files/src/app/app.tsx +4 -2
- package/templates/react/igr-ts/projects/_base/files/src/setupTests.ts +12 -0
- package/templates/react/igr-ts/projects/_base/files/styles.css +6 -0
- package/templates/react/igr-ts/projects/_base_with_home/files/index.html +2 -1
- package/templates/react/igr-ts/projects/_base_with_home/files/src/app/home/home.tsx +60 -10
- package/templates/react/igr-ts/projects/_base_with_home/files/src/app/home/style.module.css +79 -20
- package/templates/react/igr-ts/projects/ai-config/files/skills/grid-lite-to-igr-grid-migration/SKILL.md +274 -0
- package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-components/SKILL.md +0 -8
- package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-components/reference/CHARTS-GRIDS.md +6 -36
- package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-components/reference/COMPONENT-CATALOGUE.md +8 -142
- package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-components/reference/EVENT-HANDLING.md +2 -0
- package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-customize-theme/SKILL.md +7 -14
- package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-customize-theme/reference/CSS-THEMING.md +2 -0
- package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-customize-theme/reference/MCP-SERVER.md +0 -8
- package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-generate-from-image-design/SKILL.md +2 -2
- package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-generate-from-image-design/reference/component-mapping.md +60 -74
- package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-generate-from-image-design/reference/gotchas.md +2 -2
- package/templates/react/igr-ts/projects/empty/index.js +2 -2
- package/templates/react/igr-ts/projects/side-nav/files/src/app/app-routes.tsx +5 -0
- package/templates/react/igr-ts/projects/side-nav/files/src/app/app.css +82 -0
- package/templates/react/igr-ts/projects/side-nav/files/src/app/app.tsx +104 -0
- package/templates/react/igr-ts/projects/side-nav/files/src/app/home/home.tsx +69 -0
- package/templates/react/igr-ts/projects/side-nav/files/src/app/home/style.module.css +105 -0
- package/templates/react/igr-ts/projects/{top-nav → side-nav}/index.d.ts +2 -2
- package/templates/react/igr-ts/projects/{top-nav → side-nav}/index.js +7 -7
- package/templates/react/igr-ts/projects/side-nav-auth/files/index.html +19 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/app-routes.tsx +24 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/app.css +84 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/app.tsx +124 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/AuthContext.tsx +73 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/AuthGuard.tsx +14 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/Login.module.css +93 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/Login.tsx +69 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/LoginBar.module.css +42 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/LoginBar.tsx +44 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/LoginDialog.module.css +14 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/LoginDialog.tsx +49 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/Register.module.css +74 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/Register.tsx +67 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/models/external-login.ts +10 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/models/login.ts +4 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/models/register-info.ts +6 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/models/user.ts +19 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/pages/Profile.module.css +87 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/pages/Profile.tsx +42 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/pages/RedirectFacebook.tsx +44 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/pages/RedirectGoogle.tsx +40 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/pages/RedirectMicrosoft.tsx +40 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/authentication.ts +37 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/external-auth-config.ts +44 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/externalAuth.ts +272 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/fakeBackend.ts +88 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/jwtUtil.ts +10 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/pkce.ts +29 -0
- package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/userStore.ts +39 -0
- package/templates/react/igr-ts/projects/side-nav-auth/index.d.ts +15 -0
- package/templates/react/igr-ts/projects/side-nav-auth/index.js +46 -0
- package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/app-routes.tsx +5 -0
- package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/app.css +109 -0
- package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/app.test.tsx +20 -0
- package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/app.tsx +81 -0
- package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/home/home.tsx +69 -0
- package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/home/style.module.css +105 -0
- package/templates/react/igr-ts/projects/side-nav-mini/index.d.ts +15 -0
- package/templates/react/igr-ts/projects/side-nav-mini/index.js +46 -0
- package/templates/react/igr-ts/projects/side-nav-mini-auth/files/src/app/app.css +106 -0
- package/templates/react/igr-ts/projects/side-nav-mini-auth/files/src/app/app.tsx +101 -0
- package/templates/react/igr-ts/projects/side-nav-mini-auth/index.d.ts +15 -0
- package/templates/react/igr-ts/projects/side-nav-mini-auth/index.js +50 -0
- package/templates/webcomponents/igc-ts/projects/_base/files/src/app/app.ts +6 -1
- package/templates/webcomponents/igc-ts/projects/_base/files/styles.css +1 -0
- package/templates/webcomponents/igc-ts/projects/_base_with_home/files/index.html +2 -0
- package/templates/webcomponents/igc-ts/projects/_base_with_home/files/src/app/home/home.ts +103 -9
- package/templates/webcomponents/igc-ts/projects/_base_with_home/files/src/assets/wc.png +0 -0
- package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-choose-components/SKILL.md +122 -160
- package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-customize-component-theme/SKILL.md +83 -311
- package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-customize-component-theme/references/mcp-setup.md +69 -0
- package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-generate-from-image-design/SKILL.md +4 -1
- package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-generate-from-image-design/references/component-mapping.md +60 -61
- package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-generate-from-image-design/references/gotchas.md +15 -11
- package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-migrate-grid-lite-to-premium/SKILL.md +446 -0
- package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-optimize-bundle-size/SKILL.md +23 -274
- package/templates/webcomponents/igc-ts/projects/empty/index.js +1 -1
- package/templates/webcomponents/igc-ts/projects/side-nav/files/index.html +21 -0
- package/templates/webcomponents/igc-ts/projects/side-nav/files/src/app/app-routing.ts +9 -0
- package/templates/webcomponents/igc-ts/projects/side-nav/files/src/app/app.ts +192 -22
- package/templates/webcomponents/igc-ts/projects/side-nav/files/src/app/home/home.ts +175 -0
- package/templates/webcomponents/igc-ts/projects/side-nav/index.js +1 -1
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/index.html +25 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/app-routing.ts +37 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/app.ts +251 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.ts +124 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.ts +253 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/models/external-login.ts +10 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/models/login.ts +4 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/models/register-info.ts +6 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/models/user.ts +19 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/authentication.ts +37 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/external-auth-config.ts +44 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/externalAuth.ts +272 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/fakeBackend.ts +88 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/jwtUtil.ts +10 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/pkce.ts +29 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/userStore.ts +39 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/profile/profile.ts +142 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/redirect/redirect-facebook.ts +57 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/redirect/redirect-google.ts +53 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/redirect/redirect-microsoft.ts +53 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/index.d.ts +15 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-auth/index.js +46 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-mini/files/src/app/app-routing.ts +13 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-mini/files/src/app/app.ts +238 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-mini/index.d.ts +14 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-mini/index.js +45 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-mini-auth/files/src/app/app.ts +258 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-mini-auth/index.d.ts +15 -0
- package/templates/webcomponents/igc-ts/projects/side-nav-mini-auth/index.js +50 -0
- package/templates/react/igr-ts/projects/top-nav/files/src/app/app.css +0 -62
- package/templates/react/igr-ts/projects/top-nav/files/src/app/app.tsx +0 -18
- package/templates/react/igr-ts/projects/top-nav/files/src/components/navigation-header/index.tsx +0 -19
- /package/templates/react/igr-ts/projects/{top-nav → side-nav}/files/src/app/app.test.tsx +0 -0
|
@@ -9,18 +9,24 @@
|
|
|
9
9
|
- [Package Requirements](#package-requirements)
|
|
10
10
|
- [Import Patterns](#import-patterns)
|
|
11
11
|
|
|
12
|
+
> **MCP lookup pattern (applies to all sections):**
|
|
13
|
+
> - Find doc names → `list_components({ framework: "webcomponents", filter: "<keyword>" })`
|
|
14
|
+
> - Usage examples and slots → `get_doc({ framework: "webcomponents", name: "<doc-name>" })`
|
|
15
|
+
> - Find exact class names → `search_api({ platform: "webcomponents", query: "<keyword>" })`
|
|
16
|
+
> - Full property/method/event API → `get_api_reference({ platform: "webcomponents", component: "<ClassName>" })`
|
|
17
|
+
|
|
12
18
|
## Dashboard & Layout Components
|
|
13
19
|
|
|
14
|
-
| UI Pattern | Ignite UI Component |
|
|
15
|
-
|
|
16
|
-
| Top navigation bar | `IgcNavbarComponent` |
|
|
17
|
-
| Side navigation | `IgcNavDrawerComponent` |
|
|
18
|
-
| Content cards/panels | `IgcCardComponent` |
|
|
19
|
-
| Tabbed content | `IgcTabsComponent` |
|
|
20
|
-
| Accordion sections | `IgcAccordionComponent` |
|
|
21
|
-
| Split layouts | `IgcSplitterComponent` |
|
|
22
|
-
| Tile dashboard | `IgcTileManagerComponent` |
|
|
23
|
-
| IDE-style dock layout | `IgcDockManagerComponent` |
|
|
20
|
+
| UI Pattern | Ignite UI Component |
|
|
21
|
+
|---|---|
|
|
22
|
+
| Top navigation bar | `IgcNavbarComponent` |
|
|
23
|
+
| Side navigation | `IgcNavDrawerComponent` |
|
|
24
|
+
| Content cards/panels | `IgcCardComponent` |
|
|
25
|
+
| Tabbed content | `IgcTabsComponent` |
|
|
26
|
+
| Accordion sections | `IgcAccordionComponent` |
|
|
27
|
+
| Split layouts | `IgcSplitterComponent` |
|
|
28
|
+
| Tile dashboard | `IgcTileManagerComponent` |
|
|
29
|
+
| IDE-style dock layout | `IgcDockManagerComponent` |
|
|
24
30
|
|
|
25
31
|
Decision rule:
|
|
26
32
|
|
|
@@ -47,17 +53,19 @@ Component decision matrix (by visual pattern, domain-neutral):
|
|
|
47
53
|
|
|
48
54
|
## Chart Components
|
|
49
55
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
|
53
|
-
|
|
54
|
-
|
|
|
55
|
-
|
|
|
56
|
-
|
|
|
57
|
-
|
|
|
58
|
-
|
|
|
59
|
-
|
|
|
60
|
-
|
|
|
56
|
+
> Use the lookup pattern above with `filter: "chart"` to find all chart doc names.
|
|
57
|
+
|
|
58
|
+
| UI Pattern | Ignite UI Component |
|
|
59
|
+
|---|---|
|
|
60
|
+
| Area chart | `IgcCategoryChartComponent` |
|
|
61
|
+
| Line chart | `IgcCategoryChartComponent` |
|
|
62
|
+
| Column chart | `IgcCategoryChartComponent` |
|
|
63
|
+
| Bar chart | `IgcDataChartComponent` |
|
|
64
|
+
| Sparkline (mini chart) | `IgcSparklineComponent` |
|
|
65
|
+
| Pie chart | `IgcPieChartComponent` |
|
|
66
|
+
| Donut chart | `IgcDoughnutChartComponent` |
|
|
67
|
+
| Financial chart | `IgcFinancialChartComponent` |
|
|
68
|
+
| Complex multi-series | `IgcDataChartComponent` |
|
|
61
69
|
|
|
62
70
|
Decision rule:
|
|
63
71
|
|
|
@@ -67,17 +75,17 @@ Decision rule:
|
|
|
67
75
|
|
|
68
76
|
## Data Display Components
|
|
69
77
|
|
|
70
|
-
| UI Pattern | Ignite UI Component |
|
|
71
|
-
|
|
72
|
-
| Item list | `IgcListComponent` + `IgcListItemComponent` |
|
|
73
|
-
| User avatar | `IgcAvatarComponent` |
|
|
74
|
-
| Status badge | `IgcBadgeComponent` |
|
|
75
|
-
| Icons | `IgcIconComponent` |
|
|
76
|
-
| Progress bar | `IgcLinearProgressComponent` |
|
|
77
|
-
| Circular progress | `IgcCircularProgressComponent` |
|
|
78
|
-
| Flat data grid | `IgcGridComponent` |
|
|
79
|
-
| Hierarchical/tree data grid | `IgcTreeGridComponent` / `IgcHierarchicalGridComponent` |
|
|
80
|
-
| Filter/tag chips | `IgcChipComponent` |
|
|
78
|
+
| UI Pattern | Ignite UI Component |
|
|
79
|
+
|---|---|
|
|
80
|
+
| Item list | `IgcListComponent` + `IgcListItemComponent` |
|
|
81
|
+
| User avatar | `IgcAvatarComponent` |
|
|
82
|
+
| Status badge | `IgcBadgeComponent` |
|
|
83
|
+
| Icons | `IgcIconComponent` |
|
|
84
|
+
| Progress bar | `IgcLinearProgressComponent` |
|
|
85
|
+
| Circular progress | `IgcCircularProgressComponent` |
|
|
86
|
+
| Flat data grid | `IgcGridComponent` |
|
|
87
|
+
| Hierarchical/tree data grid | `IgcTreeGridComponent` / `IgcHierarchicalGridComponent` |
|
|
88
|
+
| Filter/tag chips | `IgcChipComponent` |
|
|
81
89
|
|
|
82
90
|
Decision rule:
|
|
83
91
|
|
|
@@ -88,42 +96,33 @@ Decision rule:
|
|
|
88
96
|
|
|
89
97
|
## Form & Input Components
|
|
90
98
|
|
|
91
|
-
| UI Pattern | Ignite UI Component |
|
|
92
|
-
|
|
93
|
-
| Text input | `IgcInputComponent` |
|
|
94
|
-
| Dropdown select | `IgcSelectComponent` |
|
|
95
|
-
| Searchable multi-select | `IgcComboComponent` |
|
|
96
|
-
| Date picker | `IgcDatePickerComponent` |
|
|
97
|
-
| Time or date-time entry | `IgcDateTimeInputComponent` |
|
|
98
|
-
| Toggle switch | `IgcSwitchComponent` |
|
|
99
|
-
| Checkbox | `IgcCheckboxComponent` |
|
|
100
|
-
| Radio button group | `IgcRadioGroupComponent` + `IgcRadioComponent` |
|
|
101
|
-
| Slider | `IgcSliderComponent` |
|
|
102
|
-
| Multi-step wizard | `IgcStepperComponent` + `IgcStepComponent` |
|
|
103
|
-
| Chip filter bar | `IgcChipComponent` or `IgcButtonGroupComponent` |
|
|
99
|
+
| UI Pattern | Ignite UI Component |
|
|
100
|
+
|---|---|
|
|
101
|
+
| Text input | `IgcInputComponent` |
|
|
102
|
+
| Dropdown select | `IgcSelectComponent` |
|
|
103
|
+
| Searchable multi-select | `IgcComboComponent` |
|
|
104
|
+
| Date picker | `IgcDatePickerComponent` |
|
|
105
|
+
| Time or date-time entry | `IgcDateTimeInputComponent` |
|
|
106
|
+
| Toggle switch | `IgcSwitchComponent` |
|
|
107
|
+
| Checkbox | `IgcCheckboxComponent` |
|
|
108
|
+
| Radio button group | `IgcRadioGroupComponent` + `IgcRadioComponent` |
|
|
109
|
+
| Slider | `IgcSliderComponent` |
|
|
110
|
+
| Multi-step wizard | `IgcStepperComponent` + `IgcStepComponent` |
|
|
111
|
+
| Chip filter bar | `IgcChipComponent` or `IgcButtonGroupComponent` |
|
|
104
112
|
|
|
105
113
|
## Calendar & Scheduling Components
|
|
106
114
|
|
|
107
|
-
| UI Pattern | Ignite UI Component |
|
|
108
|
-
|
|
109
|
-
| Calendar view | `IgcCalendarComponent` |
|
|
110
|
-
| Date range picker | `IgcDateRangePickerComponent` |
|
|
111
|
-
| Month/year picker | `IgcCalendarComponent` |
|
|
115
|
+
| UI Pattern | Ignite UI Component |
|
|
116
|
+
|---|---|
|
|
117
|
+
| Calendar view | `IgcCalendarComponent` |
|
|
118
|
+
| Date range picker | `IgcDateRangePickerComponent` |
|
|
119
|
+
| Month/year picker | `IgcCalendarComponent` |
|
|
112
120
|
|
|
113
121
|
## Package Requirements
|
|
114
122
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
Additional packages may be required beyond the main package:
|
|
118
|
-
|
|
119
|
-
| Capability | Additional packages |
|
|
120
|
-
|---|---|
|
|
121
|
-
| Lightweight tabular data | `igniteui-grid-lite` |
|
|
122
|
-
| Advanced grids | `igniteui-webcomponents-grids` (trial) or `@infragistics/igniteui-webcomponents-grids` (licensed) |
|
|
123
|
-
| Charts / sparklines | `igniteui-webcomponents-core` + `igniteui-webcomponents-charts` (trial) or licensed equivalents |
|
|
124
|
-
| Dock manager | `igniteui-dockmanager` (trial) or `@infragistics/igniteui-dockmanager` (licensed) |
|
|
123
|
+
See [`igniteui-wc-choose-components`](../../igniteui-wc-choose-components/SKILL.md) for the full package routing table (general UI, grids, charts, dock manager, trial vs. licensed).
|
|
125
124
|
|
|
126
|
-
Install only the packages required by the components you actually selected.
|
|
125
|
+
Install only the packages required by the components you actually selected.
|
|
127
126
|
|
|
128
127
|
## Import Patterns
|
|
129
128
|
|
|
@@ -28,14 +28,21 @@ Do not assume everything comes from `igniteui-webcomponents`. Advanced grids, ch
|
|
|
28
28
|
|
|
29
29
|
## Chart Properties
|
|
30
30
|
|
|
31
|
+
> **Always use the MCP lookup pattern before coding any chart.** Chart APIs are extensive and change between versions.
|
|
32
|
+
> - Find doc names → `list_components({ framework: "webcomponents", filter: "chart" })`
|
|
33
|
+
> - Usage examples and slots → `get_doc({ framework: "webcomponents", name: "<doc-name>" })`
|
|
34
|
+
> - Find exact class names → `search_api({ platform: "webcomponents", query: "<keyword>" })`
|
|
35
|
+
> - Full property/method/event API → `get_api_reference({ platform: "webcomponents", component: "<ClassName>" })`
|
|
36
|
+
|
|
31
37
|
### Markers shown by default
|
|
32
38
|
Category charts can show markers by default. If the screenshot does not show markers, set `markerTypes` to the matching no-marker option documented for the component. Confirm the exact value shape from `get_doc`.
|
|
33
39
|
|
|
34
|
-
### `plotAreaBackground`
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
40
|
+
### `plotAreaBackground` and `areaFillOpacity` are inherited — not visible in `get_api_reference`
|
|
41
|
+
Both properties exist but are defined on parent classes, so `get_api_reference({ platform: "webcomponents", component: "IgcCategoryChartComponent" })` will not list them. Use `search_api` to find them:
|
|
42
|
+
```ts
|
|
43
|
+
chart.plotAreaBackground = 'transparent'; // inherited from IgcSeriesViewerComponent
|
|
44
|
+
chart.areaFillOpacity = 0.3; // inherited from IgcDomainChartComponent (not on IgcSparklineComponent)
|
|
45
|
+
```
|
|
39
46
|
|
|
40
47
|
### `includedProperties` must be a real array
|
|
41
48
|
Assign it as an array through JavaScript or TypeScript, not as a serialized string:
|
|
@@ -74,9 +81,6 @@ igc-category-chart {
|
|
|
74
81
|
|
|
75
82
|
## Component Properties
|
|
76
83
|
|
|
77
|
-
### Avatar shape is controlled by `shape`
|
|
78
|
-
Use the supported `shape` API (`circle`, `rounded`, `square`, etc. as documented for the component).
|
|
79
|
-
|
|
80
84
|
### List item title and subtitle are slots
|
|
81
85
|
Use the Web Components slot anatomy:
|
|
82
86
|
```html
|
|
@@ -94,11 +98,11 @@ Use the Web Components slot anatomy:
|
|
|
94
98
|
```
|
|
95
99
|
|
|
96
100
|
### Nav drawer width
|
|
97
|
-
|
|
101
|
+
Width is controlled by two CSS custom properties exposed on the host — they are **not** design tokens and won't appear in `get_component_design_tokens`. Override them directly:
|
|
98
102
|
```css
|
|
99
103
|
igc-nav-drawer {
|
|
100
|
-
--menu-full-width:
|
|
101
|
-
--menu-mini-width:
|
|
104
|
+
--menu-full-width: 280px; /* default: 240px */
|
|
105
|
+
--menu-mini-width: 56px; /* no default — collapses to content width if unset */
|
|
102
106
|
}
|
|
103
107
|
```
|
|
104
108
|
|
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: igniteui-wc-migrate-grid-lite-to-premium
|
|
3
|
+
description: Step-by-step migration guide from igniteui-grid-lite (IgcGridLite) to the premium igniteui-webcomponents-grids (IgcGridComponent), covering every import, class name, HTML tag, property, event, template, sorting, filtering, and theming API change.
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Migrate from Grid Lite to Premium Data Grid (Web Components)
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
This skill automates the migration from **Grid Lite** (`igniteui-grid-lite`, MIT licensed, `<igc-grid-lite>`) to the **Premium Data Grid** (`igniteui-webcomponents-grids`, commercially licensed, `<igc-grid>`). Use it when a project outgrows Grid Lite's read-only capabilities and needs enterprise features such as editing, selection, paging, grouping, summaries, Excel export, or state persistence.
|
|
12
|
+
|
|
13
|
+
## MANDATORY AGENT PROTOCOL
|
|
14
|
+
|
|
15
|
+
> **DO NOT write any code from memory.** Grid APIs change between versions.
|
|
16
|
+
|
|
17
|
+
Before producing migration code:
|
|
18
|
+
|
|
19
|
+
1. **Identify the current Grid Lite usage** - read the user's existing TypeScript and HTML files to understand their column configuration, cell templates, data binding, and any `dataPipelineConfiguration` usage.
|
|
20
|
+
2. **Use the MCP server** - call `mcp_igniteui-cli_get_api_reference` or `mcp_igniteui-cli_get_doc` (framework: `webcomponents`) to verify current API details when in doubt.
|
|
21
|
+
3. **Only then produce output** - base all code on verified references, not memory.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## When to Migrate
|
|
26
|
+
|
|
27
|
+
Migrate from Grid Lite to the Premium Grid when the user needs **any** of these features:
|
|
28
|
+
|
|
29
|
+
| Required Feature | Grid Lite | Premium Grid |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| Cell / Row / Batch editing | No | Yes |
|
|
32
|
+
| Row adding / deleting | No | Yes |
|
|
33
|
+
| Row / Cell / Column selection | No | Yes |
|
|
34
|
+
| Paging (client or remote) | No | Yes |
|
|
35
|
+
| GroupBy | No | Yes |
|
|
36
|
+
| Summaries (built-in & custom) | No | Yes |
|
|
37
|
+
| Column pinning | No | Yes |
|
|
38
|
+
| Column moving | No | Yes |
|
|
39
|
+
| Master-Detail rows | No | Yes |
|
|
40
|
+
| Export (Excel / CSV) | No | Yes |
|
|
41
|
+
| Toolbar | No | Yes |
|
|
42
|
+
| State persistence | No | Yes |
|
|
43
|
+
| Advanced filtering | No | Yes |
|
|
44
|
+
| Action strip | No | Yes |
|
|
45
|
+
| Row drag | No | Yes |
|
|
46
|
+
| Clipboard support | No | Yes |
|
|
47
|
+
| Cell merging | No | Yes |
|
|
48
|
+
|
|
49
|
+
> **IMPORTANT:** The upgrade path from Grid Lite is **always** to `IgcGridComponent` (`<igc-grid>`). Never recommend a different component type as a substitute.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Step 1 - Install / Verify the Premium Package
|
|
54
|
+
|
|
55
|
+
Grid Lite uses the separate `igniteui-grid-lite` npm package. The Premium Grid ships in `igniteui-webcomponents-grids` (or `@infragistics/igniteui-webcomponents-grids` for licensed builds).
|
|
56
|
+
|
|
57
|
+
> **AGENT INSTRUCTION:** Check `package.json` to determine which package variant is installed. If only `igniteui-grid-lite` is present, the user needs to install the premium package.
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# Remove Grid Lite
|
|
61
|
+
npm uninstall igniteui-grid-lite
|
|
62
|
+
|
|
63
|
+
# Open-source / trial (shows watermark)
|
|
64
|
+
npm install igniteui-webcomponents-grids
|
|
65
|
+
|
|
66
|
+
# OR licensed package (requires private registry)
|
|
67
|
+
npm install @infragistics/igniteui-webcomponents-grids
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Step 2 - Update Imports and Registration
|
|
71
|
+
|
|
72
|
+
**Before (Grid Lite):**
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
import { IgcGridLite, IgcGridLiteColumn } from 'igniteui-grid-lite';
|
|
76
|
+
import type { BaseIgcCellContext } from 'igniteui-grid-lite';
|
|
77
|
+
import 'igniteui-webcomponents/themes/light/bootstrap.css';
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**After (Premium Grid):**
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
// Side-effect import - registers all premium grid custom elements; must come first
|
|
84
|
+
import 'igniteui-webcomponents-grids/grids/combined.js';
|
|
85
|
+
|
|
86
|
+
// Type imports
|
|
87
|
+
import type {
|
|
88
|
+
IgcGridComponent,
|
|
89
|
+
IgcColumnComponent,
|
|
90
|
+
IgcCellTemplateContext,
|
|
91
|
+
IgcColumnTemplateContext,
|
|
92
|
+
IgcSortingEventArgs,
|
|
93
|
+
IgcFilteringEventArgs,
|
|
94
|
+
IgcRowSelectionEventArgs,
|
|
95
|
+
IgcSortingExpression,
|
|
96
|
+
} from 'igniteui-webcomponents-grids';
|
|
97
|
+
|
|
98
|
+
// Value imports
|
|
99
|
+
import {
|
|
100
|
+
SortingDirection,
|
|
101
|
+
IgcStringFilteringOperand,
|
|
102
|
+
IgcNumberFilteringOperand,
|
|
103
|
+
IgcBooleanFilteringOperand,
|
|
104
|
+
IgcDateFilteringOperand,
|
|
105
|
+
IgcFilteringExpressionsTree,
|
|
106
|
+
FilteringLogic,
|
|
107
|
+
IgcNoopSortingStrategy,
|
|
108
|
+
IgcNoopFilteringStrategy,
|
|
109
|
+
} from 'igniteui-webcomponents-grids';
|
|
110
|
+
|
|
111
|
+
// Theme - change to the grids-specific path
|
|
112
|
+
// Available: light|dark x bootstrap|material|fluent|indigo
|
|
113
|
+
import 'igniteui-webcomponents-grids/grids/themes/light/bootstrap.css';
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Step 3 - Update HTML Tags
|
|
117
|
+
|
|
118
|
+
| Grid Lite | Premium Grid |
|
|
119
|
+
|---|---|
|
|
120
|
+
| `<igc-grid-lite>` | `<igc-grid>` |
|
|
121
|
+
| `<igc-grid-lite-column>` | `<igc-column>` |
|
|
122
|
+
| Bare boolean attrs (`sortable`, `filterable`, `hidden`) | Quoted values (`sortable="true"`, `filterable="true"`, `hidden="true"`) |
|
|
123
|
+
| No grid-level filter toggle | `allow-filtering="true"` required on `<igc-grid>` |
|
|
124
|
+
| No height requirement | `height` attribute required for row virtualization |
|
|
125
|
+
|
|
126
|
+
**Before:**
|
|
127
|
+
|
|
128
|
+
```html
|
|
129
|
+
<igc-grid-lite id="grid" auto-generate>
|
|
130
|
+
<igc-grid-lite-column field="name" sortable filterable resizable></igc-grid-lite-column>
|
|
131
|
+
<igc-grid-lite-column field="price" data-type="number" sortable></igc-grid-lite-column>
|
|
132
|
+
</igc-grid-lite>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**After:**
|
|
136
|
+
|
|
137
|
+
```html
|
|
138
|
+
<!-- height is required for row virtualization; set it here or on a fixed-height parent -->
|
|
139
|
+
<igc-grid id="grid" auto-generate="true" allow-filtering="true" height="600px">
|
|
140
|
+
<igc-column field="name" sortable="true" filterable="true" resizable="true"></igc-column>
|
|
141
|
+
<igc-column field="price" data-type="number" sortable="true"></igc-column>
|
|
142
|
+
</igc-grid>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
> **Note:** `allow-filtering="true"` on `<igc-grid>` is required to enable filtering. Grid Lite had no grid-level filter toggle.
|
|
146
|
+
|
|
147
|
+
## Step 4 - Update TypeScript References
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
// Before
|
|
151
|
+
const grid = document.getElementById('grid') as IgcGridLite;
|
|
152
|
+
const column = document.querySelector('igc-grid-lite-column[field="name"]') as IgcGridLiteColumn;
|
|
153
|
+
|
|
154
|
+
// After
|
|
155
|
+
const grid = document.getElementById('grid') as IgcGridComponent;
|
|
156
|
+
const column = document.querySelector('igc-column[field="name"]') as IgcColumnComponent;
|
|
157
|
+
|
|
158
|
+
// grid.data = myArray - unchanged
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Step 5 - Migrate Column Properties
|
|
162
|
+
|
|
163
|
+
| Grid Lite Property | Premium Grid Property | Notes |
|
|
164
|
+
|---|---|---|
|
|
165
|
+
| `field` | `field` | Unchanged |
|
|
166
|
+
| `header` | `header` | Unchanged |
|
|
167
|
+
| `width` | `width` | Unchanged |
|
|
168
|
+
| `hidden` | `hidden` | Unchanged |
|
|
169
|
+
| `resizable` | `resizable` | Unchanged |
|
|
170
|
+
| `sortable` | `sortable` | Unchanged |
|
|
171
|
+
| `filterable` | `filterable` | Unchanged |
|
|
172
|
+
| `dataType` | `dataType` | Premium adds `dateTime`, `time`, `currency`, `percent` |
|
|
173
|
+
| `filteringCaseSensitive` | `filteringIgnoreCase` | **Logic inverted** - `true` becomes `false` |
|
|
174
|
+
| `sortingCaseSensitive` | `sortingIgnoreCase` | **Logic inverted** - `true` becomes `false` |
|
|
175
|
+
| `sortConfiguration: { comparer }` | `sortStrategy: IgcSortingStrategy` | Class-based (see below) |
|
|
176
|
+
| _(none)_ | `editable`, `pinned`, `groupable`, `hasSummary`, `disableHiding`, `disablePinning`, `selectable`, `searchable`, `formatter`, `minWidth`, `maxWidth` | Premium-only |
|
|
177
|
+
|
|
178
|
+
**Custom sort strategy migration:**
|
|
179
|
+
|
|
180
|
+
```typescript
|
|
181
|
+
// Before (Grid Lite) - function comparer on column
|
|
182
|
+
column.sortConfiguration = { comparer: (a, b) => a.length - b.length };
|
|
183
|
+
|
|
184
|
+
// After (Premium Grid) - class extending DefaultSortingStrategy
|
|
185
|
+
import { DefaultSortingStrategy } from 'igniteui-webcomponents-grids';
|
|
186
|
+
|
|
187
|
+
class LengthSort extends DefaultSortingStrategy {
|
|
188
|
+
override compareValues(a: string, b: string) { return a.length - b.length; }
|
|
189
|
+
}
|
|
190
|
+
column.sortStrategy = new LengthSort();
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Step 6 - Migrate Cell and Header Templates
|
|
194
|
+
|
|
195
|
+
| Aspect | Grid Lite | Premium Grid |
|
|
196
|
+
|---|---|---|
|
|
197
|
+
| Cell template property | `column.cellTemplate` | `column.bodyTemplate` |
|
|
198
|
+
| Cell context type | `BaseIgcCellContext` | `IgcCellTemplateContext` |
|
|
199
|
+
| Cell value | `ctx.value` | `ctx.implicit` |
|
|
200
|
+
| Row data | `ctx.row` | `ctx.cell.row.data` |
|
|
201
|
+
| Header template | no params | `IgcColumnTemplateContext` param |
|
|
202
|
+
|
|
203
|
+
**Cell template migration:**
|
|
204
|
+
|
|
205
|
+
```typescript
|
|
206
|
+
// Before (Grid Lite)
|
|
207
|
+
column.cellTemplate = (ctx) => html`<span class=${ctx.value}>${ctx.value}</span>`;
|
|
208
|
+
|
|
209
|
+
// After (Premium Grid)
|
|
210
|
+
column.bodyTemplate = (ctx: IgcCellTemplateContext) =>
|
|
211
|
+
html`<span class=${ctx.implicit}>${ctx.implicit}</span>`;
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
**Header template migration:**
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
// Before (Grid Lite) - no parameters
|
|
218
|
+
column.headerTemplate = () => html`<strong>Name</strong>`;
|
|
219
|
+
|
|
220
|
+
// After (Premium Grid) - receives IgcColumnTemplateContext
|
|
221
|
+
column.headerTemplate = (ctx: IgcColumnTemplateContext) =>
|
|
222
|
+
html`<strong>${ctx.column.header ?? ctx.column.field}</strong>`;
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Step 7 - Migrate Remote Data Operations
|
|
226
|
+
|
|
227
|
+
Grid Lite uses `dataPipelineConfiguration` (async callbacks). The Premium Grid uses **noop strategies + events**.
|
|
228
|
+
|
|
229
|
+
**Before (Grid Lite):**
|
|
230
|
+
|
|
231
|
+
```typescript
|
|
232
|
+
grid.dataPipelineConfiguration = {
|
|
233
|
+
sort: async ({ grid }) => dataService.sortRemote(grid.sortingExpressions),
|
|
234
|
+
filter: async ({ grid }) => dataService.filterRemote(grid.filterExpressions),
|
|
235
|
+
};
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**After (Premium Grid):**
|
|
239
|
+
|
|
240
|
+
```typescript
|
|
241
|
+
const grid = document.getElementById('grid') as IgcGridComponent;
|
|
242
|
+
|
|
243
|
+
// Disable built-in sort/filter so the grid does not process data locally
|
|
244
|
+
grid.sortStrategy = IgcNoopSortingStrategy.instance();
|
|
245
|
+
grid.filterStrategy = IgcNoopFilteringStrategy.instance();
|
|
246
|
+
|
|
247
|
+
// React to done events and reload data from the server
|
|
248
|
+
grid.addEventListener('sortingDone', async () => {
|
|
249
|
+
grid.data = await dataService.sortRemote(grid.sortingExpressions);
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
grid.addEventListener('filteringDone', async () => {
|
|
253
|
+
grid.data = await dataService.filterRemote(grid.filteringExpressionsTree);
|
|
254
|
+
});
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## Step 8 - Migrate Sort / Filter Events
|
|
258
|
+
|
|
259
|
+
| Grid Lite Event | Premium Grid Event | Notes |
|
|
260
|
+
|---|---|---|
|
|
261
|
+
| `sorting` | `sorting` | Same name - both cancellable (`e.detail.cancel = true`) |
|
|
262
|
+
| `sorted` | `sortingDone` | Name changed - `CustomEvent<IgcSortingExpression[]>` |
|
|
263
|
+
| `filtering` | `filtering` | Same name - both cancellable |
|
|
264
|
+
| `filtered` | `filteringDone` | Name changed - `CustomEvent<IgcFilteringExpressionsTree>` |
|
|
265
|
+
|
|
266
|
+
```typescript
|
|
267
|
+
// Cancel a sort before it applies
|
|
268
|
+
grid.addEventListener('sorting', (e: CustomEvent<IgcSortingEventArgs>) => {
|
|
269
|
+
e.detail.cancel = true;
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
// React after sort completes
|
|
273
|
+
grid.addEventListener('sortingDone', (e: CustomEvent<IgcSortingExpression[]>) => {
|
|
274
|
+
console.log('Sorted by', e.detail);
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
// Cancel a filter before it applies
|
|
278
|
+
grid.addEventListener('filtering', (e: CustomEvent<IgcFilteringEventArgs>) => {
|
|
279
|
+
e.detail.cancel = true;
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
// React after filter completes
|
|
283
|
+
grid.addEventListener('filteringDone', (e: CustomEvent<IgcFilteringExpressionsTree>) => {
|
|
284
|
+
console.log('Filter tree', e.detail);
|
|
285
|
+
});
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
## Step 9 - Migrate Programmatic Sort / Filter API
|
|
289
|
+
|
|
290
|
+
**Grid Lite API:**
|
|
291
|
+
|
|
292
|
+
```typescript
|
|
293
|
+
grid.sort({ key: 'name', direction: 'ascending' });
|
|
294
|
+
grid.filter({ key: 'age', condition: 'greaterThan', searchTerm: 21 });
|
|
295
|
+
grid.clearSort();
|
|
296
|
+
grid.clearFilter();
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
**Premium Grid API:**
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
import { SortingDirection, IgcNumberFilteringOperand } from 'igniteui-webcomponents-grids';
|
|
303
|
+
|
|
304
|
+
// Sorting - fieldName + SortingDirection enum (Asc = 1, Desc = 2, None = 0)
|
|
305
|
+
grid.sort([{ fieldName: 'name', dir: SortingDirection.Asc, ignoreCase: true }]);
|
|
306
|
+
grid.clearSort('name'); // clear one column
|
|
307
|
+
grid.clearSort(); // clear all
|
|
308
|
+
|
|
309
|
+
// Filtering - positional arguments with typed operand instances
|
|
310
|
+
grid.filter('age', 21, IgcNumberFilteringOperand.instance().condition('greaterThan'), true);
|
|
311
|
+
grid.clearFilter('age'); // clear one column
|
|
312
|
+
grid.clearFilter(); // clear all
|
|
313
|
+
|
|
314
|
+
// Multi-column filtering via expression tree
|
|
315
|
+
const tree = new IgcFilteringExpressionsTree(FilteringLogic.And);
|
|
316
|
+
tree.filteringOperands.push({
|
|
317
|
+
fieldName: 'age',
|
|
318
|
+
condition: IgcNumberFilteringOperand.instance().condition('greaterThan'),
|
|
319
|
+
searchVal: 21,
|
|
320
|
+
ignoreCase: true,
|
|
321
|
+
});
|
|
322
|
+
grid.filteringExpressionsTree = tree;
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
**Key expression shape changes:**
|
|
326
|
+
|
|
327
|
+
| Aspect | Grid Lite | Premium Grid |
|
|
328
|
+
|---|---|---|
|
|
329
|
+
| Sort target field | `key` | `fieldName` |
|
|
330
|
+
| Sort direction | `direction: 'ascending'` (string) | `dir: SortingDirection.Asc` (enum) |
|
|
331
|
+
| Filter target field | `key` | `fieldName` |
|
|
332
|
+
| Filter search value | `searchTerm` | `searchVal` (expression tree) |
|
|
333
|
+
| Case sensitivity (sort) | `caseSensitive: true` | `ignoreCase: false` (**inverted**) |
|
|
334
|
+
| Case sensitivity (filter) | `caseSensitive: true` | `ignoreCase: false` (**inverted**) |
|
|
335
|
+
| Filter criteria | `criteria` string | `FilteringLogic` enum on the tree |
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
## Adding Enterprise Features Post-Migration
|
|
340
|
+
|
|
341
|
+
Once on the Premium Grid, enable the features that motivated the migration:
|
|
342
|
+
|
|
343
|
+
### Row Editing
|
|
344
|
+
|
|
345
|
+
```html
|
|
346
|
+
<igc-grid id="grid" row-editable="true" primary-key="id" height="600px">
|
|
347
|
+
<igc-column field="name" editable="true"></igc-column>
|
|
348
|
+
<igc-column field="price" data-type="number" editable="true"></igc-column>
|
|
349
|
+
</igc-grid>
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
> **Note:** `primary-key` is strongly recommended whenever editing, selection, or row-targeted APIs (`getRowByKey`, row pinning, transactions) are used. Without it the grid falls back to object identity, which breaks across virtualization and remote data.
|
|
353
|
+
|
|
354
|
+
### Row Selection
|
|
355
|
+
|
|
356
|
+
```html
|
|
357
|
+
<igc-grid id="grid" row-selection="multiple" primary-key="id" height="600px">
|
|
358
|
+
<!-- columns -->
|
|
359
|
+
</igc-grid>
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
```typescript
|
|
363
|
+
grid.addEventListener('rowSelectionChanging', (e: CustomEvent<IgcRowSelectionEventArgs>) => {
|
|
364
|
+
console.log('Selected rows:', e.detail.added);
|
|
365
|
+
});
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### Paging
|
|
369
|
+
|
|
370
|
+
```html
|
|
371
|
+
<igc-grid id="grid" primary-key="id" height="600px">
|
|
372
|
+
<!-- columns -->
|
|
373
|
+
<igc-paginator per-page="15"></igc-paginator>
|
|
374
|
+
</igc-grid>
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### GroupBy
|
|
378
|
+
|
|
379
|
+
```html
|
|
380
|
+
<igc-grid id="grid" primary-key="id" height="600px">
|
|
381
|
+
<igc-column field="category" groupable="true"></igc-column>
|
|
382
|
+
</igc-grid>
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
```typescript
|
|
386
|
+
grid.groupBy([{ fieldName: 'category', dir: SortingDirection.Asc }]);
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### Column Pinning
|
|
390
|
+
|
|
391
|
+
```typescript
|
|
392
|
+
const column = grid.getColumnByName('name');
|
|
393
|
+
column.pin(); // pin to start (default)
|
|
394
|
+
column.unpin();
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### Summaries
|
|
398
|
+
|
|
399
|
+
```html
|
|
400
|
+
<igc-column field="price" data-type="number" has-summary="true"></igc-column>
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### Toolbar (Column Hiding, Pinning, Export)
|
|
404
|
+
|
|
405
|
+
```html
|
|
406
|
+
<igc-grid id="grid" auto-generate="true" height="600px">
|
|
407
|
+
<igc-grid-toolbar>
|
|
408
|
+
<igc-grid-toolbar-title>My Grid</igc-grid-toolbar-title>
|
|
409
|
+
<igc-grid-toolbar-actions>
|
|
410
|
+
<igc-grid-toolbar-advanced-filtering></igc-grid-toolbar-advanced-filtering>
|
|
411
|
+
<igc-grid-toolbar-hiding></igc-grid-toolbar-hiding>
|
|
412
|
+
<igc-grid-toolbar-pinning></igc-grid-toolbar-pinning>
|
|
413
|
+
<igc-grid-toolbar-exporter></igc-grid-toolbar-exporter>
|
|
414
|
+
</igc-grid-toolbar-actions>
|
|
415
|
+
</igc-grid-toolbar>
|
|
416
|
+
<!-- columns -->
|
|
417
|
+
</igc-grid>
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### Advanced Filtering Dialog
|
|
421
|
+
|
|
422
|
+
```typescript
|
|
423
|
+
grid.allowAdvancedFiltering = true;
|
|
424
|
+
grid.openAdvancedFilteringDialog();
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### Excel-Style Filter UI
|
|
428
|
+
|
|
429
|
+
```typescript
|
|
430
|
+
grid.filterMode = 'excelStyleFilter'; // default is 'quickFilter'
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
### Batch Editing
|
|
434
|
+
|
|
435
|
+
```html
|
|
436
|
+
<igc-grid id="grid" batch-editing="true" row-editable="true" primary-key="id" height="600px">
|
|
437
|
+
<igc-column field="name" editable="true"></igc-column>
|
|
438
|
+
</igc-grid>
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
## Related Skills
|
|
443
|
+
|
|
444
|
+
- **[`igniteui-wc-integrate-with-framework`](../igniteui-wc-integrate-with-framework/SKILL.md)** - Framework integration setup
|
|
445
|
+
- **[`igniteui-wc-customize-component-theme`](../igniteui-wc-customize-component-theme/SKILL.md)** - Theming and styling
|
|
446
|
+
- **[`igniteui-wc-choose-components`](../igniteui-wc-choose-components/SKILL.md)** - Choosing the right grid component
|