igniteui-cli 15.2.2 → 15.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 (130) hide show
  1. package/lib/commands/build.js +7 -12
  2. package/package.json +4 -4
  3. package/templates/blazor/igb/projects/ai-config/files/skills/AGENTS.md +0 -5
  4. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/SKILL.md +2 -0
  5. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/charts.md +7 -35
  6. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/data-display.md +0 -54
  7. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/feedback.md +0 -38
  8. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/form-controls.md +0 -68
  9. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/layout-manager.md +1 -124
  10. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/layout.md +0 -62
  11. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-theming/SKILL.md +1 -1
  12. package/templates/react/igr-ts/projects/_base/files/package.json +1 -0
  13. package/templates/react/igr-ts/projects/_base/files/src/app/app.tsx +4 -2
  14. package/templates/react/igr-ts/projects/_base/files/src/setupTests.ts +12 -0
  15. package/templates/react/igr-ts/projects/_base/files/styles.css +6 -0
  16. package/templates/react/igr-ts/projects/_base_with_home/files/index.html +2 -1
  17. package/templates/react/igr-ts/projects/_base_with_home/files/src/app/home/home.tsx +60 -10
  18. package/templates/react/igr-ts/projects/_base_with_home/files/src/app/home/style.module.css +79 -20
  19. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-components/SKILL.md +0 -8
  20. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-components/reference/CHARTS-GRIDS.md +6 -36
  21. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-components/reference/COMPONENT-CATALOGUE.md +8 -142
  22. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-components/reference/EVENT-HANDLING.md +2 -0
  23. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-customize-theme/SKILL.md +7 -14
  24. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-customize-theme/reference/CSS-THEMING.md +2 -0
  25. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-customize-theme/reference/MCP-SERVER.md +0 -8
  26. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-generate-from-image-design/SKILL.md +2 -2
  27. package/templates/react/igr-ts/projects/ai-config/files/skills/igniteui-react-generate-from-image-design/reference/component-mapping.md +60 -74
  28. package/templates/react/igr-ts/projects/empty/index.js +2 -2
  29. package/templates/react/igr-ts/projects/side-nav/files/src/app/app-routes.tsx +5 -0
  30. package/templates/react/igr-ts/projects/side-nav/files/src/app/app.css +82 -0
  31. package/templates/react/igr-ts/projects/side-nav/files/src/app/app.tsx +104 -0
  32. package/templates/react/igr-ts/projects/side-nav/files/src/app/home/home.tsx +69 -0
  33. package/templates/react/igr-ts/projects/side-nav/files/src/app/home/style.module.css +105 -0
  34. package/templates/react/igr-ts/projects/{top-nav → side-nav}/index.d.ts +2 -2
  35. package/templates/react/igr-ts/projects/{top-nav → side-nav}/index.js +7 -7
  36. package/templates/react/igr-ts/projects/side-nav-auth/files/index.html +19 -0
  37. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/app-routes.tsx +24 -0
  38. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/app.css +84 -0
  39. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/app.tsx +124 -0
  40. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/AuthContext.tsx +73 -0
  41. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/AuthGuard.tsx +14 -0
  42. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/Login.module.css +93 -0
  43. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/Login.tsx +69 -0
  44. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/LoginBar.module.css +42 -0
  45. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/LoginBar.tsx +44 -0
  46. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/LoginDialog.module.css +14 -0
  47. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/LoginDialog.tsx +49 -0
  48. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/Register.module.css +74 -0
  49. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/components/Register.tsx +67 -0
  50. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/models/external-login.ts +10 -0
  51. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/models/login.ts +4 -0
  52. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/models/register-info.ts +6 -0
  53. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/models/user.ts +19 -0
  54. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/pages/Profile.module.css +87 -0
  55. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/pages/Profile.tsx +42 -0
  56. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/pages/RedirectFacebook.tsx +44 -0
  57. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/pages/RedirectGoogle.tsx +40 -0
  58. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/pages/RedirectMicrosoft.tsx +40 -0
  59. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/authentication.ts +37 -0
  60. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/external-auth-config.ts +44 -0
  61. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/externalAuth.ts +272 -0
  62. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/fakeBackend.ts +88 -0
  63. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/jwtUtil.ts +10 -0
  64. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/pkce.ts +29 -0
  65. package/templates/react/igr-ts/projects/side-nav-auth/files/src/app/authentication/services/userStore.ts +39 -0
  66. package/templates/react/igr-ts/projects/side-nav-auth/index.d.ts +15 -0
  67. package/templates/react/igr-ts/projects/side-nav-auth/index.js +46 -0
  68. package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/app-routes.tsx +5 -0
  69. package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/app.css +109 -0
  70. package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/app.test.tsx +20 -0
  71. package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/app.tsx +81 -0
  72. package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/home/home.tsx +69 -0
  73. package/templates/react/igr-ts/projects/side-nav-mini/files/src/app/home/style.module.css +105 -0
  74. package/templates/react/igr-ts/projects/side-nav-mini/index.d.ts +15 -0
  75. package/templates/react/igr-ts/projects/side-nav-mini/index.js +46 -0
  76. package/templates/react/igr-ts/projects/side-nav-mini-auth/files/src/app/app.css +106 -0
  77. package/templates/react/igr-ts/projects/side-nav-mini-auth/files/src/app/app.tsx +101 -0
  78. package/templates/react/igr-ts/projects/side-nav-mini-auth/index.d.ts +15 -0
  79. package/templates/react/igr-ts/projects/side-nav-mini-auth/index.js +50 -0
  80. package/templates/webcomponents/igc-ts/projects/_base/files/src/app/app.ts +6 -1
  81. package/templates/webcomponents/igc-ts/projects/_base/files/styles.css +1 -0
  82. package/templates/webcomponents/igc-ts/projects/_base_with_home/files/index.html +2 -0
  83. package/templates/webcomponents/igc-ts/projects/_base_with_home/files/src/app/home/home.ts +103 -9
  84. package/templates/webcomponents/igc-ts/projects/_base_with_home/files/src/assets/wc.png +0 -0
  85. package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-choose-components/SKILL.md +122 -160
  86. package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-customize-component-theme/SKILL.md +83 -311
  87. package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-customize-component-theme/references/mcp-setup.md +69 -0
  88. package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-generate-from-image-design/SKILL.md +4 -1
  89. package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-generate-from-image-design/references/component-mapping.md +60 -61
  90. package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-generate-from-image-design/references/gotchas.md +15 -11
  91. package/templates/webcomponents/igc-ts/projects/ai-config/files/skills/igniteui-wc-optimize-bundle-size/SKILL.md +23 -274
  92. package/templates/webcomponents/igc-ts/projects/empty/index.js +1 -1
  93. package/templates/webcomponents/igc-ts/projects/side-nav/files/index.html +21 -0
  94. package/templates/webcomponents/igc-ts/projects/side-nav/files/src/app/app-routing.ts +9 -0
  95. package/templates/webcomponents/igc-ts/projects/side-nav/files/src/app/app.ts +192 -22
  96. package/templates/webcomponents/igc-ts/projects/side-nav/files/src/app/home/home.ts +175 -0
  97. package/templates/webcomponents/igc-ts/projects/side-nav/index.js +1 -1
  98. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/index.html +25 -0
  99. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/app-routing.ts +37 -0
  100. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/app.ts +251 -0
  101. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.ts +124 -0
  102. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.ts +253 -0
  103. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/models/external-login.ts +10 -0
  104. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/models/login.ts +4 -0
  105. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/models/register-info.ts +6 -0
  106. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/models/user.ts +19 -0
  107. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/authentication.ts +37 -0
  108. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/external-auth-config.ts +44 -0
  109. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/externalAuth.ts +272 -0
  110. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/fakeBackend.ts +88 -0
  111. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/jwtUtil.ts +10 -0
  112. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/pkce.ts +29 -0
  113. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/authentication/services/userStore.ts +39 -0
  114. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/profile/profile.ts +142 -0
  115. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/redirect/redirect-facebook.ts +57 -0
  116. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/redirect/redirect-google.ts +53 -0
  117. package/templates/webcomponents/igc-ts/projects/side-nav-auth/files/src/app/redirect/redirect-microsoft.ts +53 -0
  118. package/templates/webcomponents/igc-ts/projects/side-nav-auth/index.d.ts +15 -0
  119. package/templates/webcomponents/igc-ts/projects/side-nav-auth/index.js +46 -0
  120. package/templates/webcomponents/igc-ts/projects/side-nav-mini/files/src/app/app-routing.ts +13 -0
  121. package/templates/webcomponents/igc-ts/projects/side-nav-mini/files/src/app/app.ts +238 -0
  122. package/templates/webcomponents/igc-ts/projects/side-nav-mini/index.d.ts +14 -0
  123. package/templates/webcomponents/igc-ts/projects/side-nav-mini/index.js +45 -0
  124. package/templates/webcomponents/igc-ts/projects/side-nav-mini-auth/files/src/app/app.ts +258 -0
  125. package/templates/webcomponents/igc-ts/projects/side-nav-mini-auth/index.d.ts +15 -0
  126. package/templates/webcomponents/igc-ts/projects/side-nav-mini-auth/index.js +50 -0
  127. package/templates/react/igr-ts/projects/top-nav/files/src/app/app.css +0 -62
  128. package/templates/react/igr-ts/projects/top-nav/files/src/app/app.tsx +0 -18
  129. package/templates/react/igr-ts/projects/top-nav/files/src/components/navigation-header/index.tsx +0 -19
  130. /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 | Key Properties |
15
- |---|---|---|
16
- | Top navigation bar | `IgcNavbarComponent` | `slot="start"`, default slot, `slot="end"` |
17
- | Side navigation | `IgcNavDrawerComponent` | `open`, `position`, default slot, `slot="mini"` |
18
- | Content cards/panels | `IgcCardComponent` | `<igc-card-header>`, `<igc-card-content>`, `<igc-card-actions>` |
19
- | Tabbed content | `IgcTabsComponent` | `<igc-tab>` children, `alignment`, `activation` |
20
- | Accordion sections | `IgcAccordionComponent` | `IgcExpansionPanelComponent` children |
21
- | Split layouts | `IgcSplitterComponent` | pane-based layout, nested split regions |
22
- | Tile dashboard | `IgcTileManagerComponent` | drag/resize tiles |
23
- | IDE-style dock layout | `IgcDockManagerComponent` | floating/docking panels (Commercial) |
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
- | UI Pattern | Ignite UI Component | Key Properties |
51
- |---|---|---|
52
- | Area chart | `IgcCategoryChartComponent` | `chartType`, `markerTypes`, `brushes`, `outlines` |
53
- | Line chart | `IgcCategoryChartComponent` | `chartType`, `markerTypes`, `brushes` |
54
- | Column chart | `IgcCategoryChartComponent` | `chartType`, `markerTypes`|
55
- | Bar chart | `IgcDataChartComponent` | `IgxBarSeriesComponent`, `valueMemberPath`, `argumentMemberPath` |
56
- | Sparkline (mini chart) | `IgcSparklineComponent` | `displayType`, `valueMemberPath` |
57
- | Pie chart | `IgcPieChartComponent` | `valueMemberPath`, `labelMemberPath` |
58
- | Donut chart | `IgcDoughnutChartComponent` | `innerExtent`; bind data via child `IgcRingSeriesBaseComponent` with `valueMemberPath`, `labelMemberPath` |
59
- | Financial chart | `IgcFinancialChartComponent` | OHLC/candlestick data |
60
- | Complex multi-series | `IgcDataChartComponent` | multiple series plus axes |
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 | Key Properties |
71
- |---|---|---|
72
- | Item list | `IgcListComponent` + `IgcListItemComponent` | `slot="title"`, `slot="subtitle"`, `slot="start"`, `slot="end"` |
73
- | User avatar | `IgcAvatarComponent` | `initials`, `shape`, `src` |
74
- | Status badge | `IgcBadgeComponent` | `value`, styling |
75
- | Icons | `IgcIconComponent` | `name`, `collection`, styling |
76
- | Progress bar | `IgcLinearProgressComponent` | `value`, `max` |
77
- | Circular progress | `IgcCircularProgressComponent` | `value`, `max` |
78
- | Flat data grid | `IgcGridComponent` | Grid Lite or full Data Grid depending features |
79
- | Hierarchical/tree data grid | `IgcTreeGridComponent` / `IgcHierarchicalGridComponent` | hierarchical data support |
80
- | Filter/tag chips | `IgcChipComponent` | `removable`, `selectable` |
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 | Key Properties |
92
- |---|---|---|
93
- | Text input | `IgcInputComponent` | `type`, `value`, prefix/suffix/helper slots |
94
- | Dropdown select | `IgcSelectComponent` | `<igc-select-item>` children, prefix/suffix slots |
95
- | Searchable multi-select | `IgcComboComponent` | data binding, display/value keys, selection mode |
96
- | Date picker | `IgcDatePickerComponent` | `value`, `min`, `max` |
97
- | Time or date-time entry | `IgcDateTimeInputComponent` | typed editing for date/time fields |
98
- | Toggle switch | `IgcSwitchComponent` | checked state, change events |
99
- | Checkbox | `IgcCheckboxComponent` | checked state, validation |
100
- | Radio button group | `IgcRadioGroupComponent` + `IgcRadioComponent` | grouped selection |
101
- | Slider | `IgcSliderComponent` | `min`, `max`, labels/ticks |
102
- | Multi-step wizard | `IgcStepperComponent` + `IgcStepComponent` | orientation, linear step flow |
103
- | Chip filter bar | `IgcChipComponent` or `IgcButtonGroupComponent` | choose based on chip versus segmented-control anatomy |
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 | Key Properties |
108
- |---|---|---|
109
- | Calendar view | `IgcCalendarComponent` | `value`, selection mode |
110
- | Date range picker | `IgcDateRangePickerComponent` | `value`, range selection |
111
- | Month/year picker | `IgcCalendarComponent` | month/year modes when the calendar UI is primary |
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
- The main `igniteui-webcomponents` package contains general UI components (list, avatar, navbar, drawer, card, badge, progress, icon, inputs, scheduling, layout, etc.).
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. Resolve the exact package layout from the current workspace before installing or importing.
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` does NOT exist on `igc-category-chart`
35
- Use CSS to style the chart container background instead.
36
-
37
- ### `areaFillOpacity` exists on `IgcCategoryChartComponent`
38
- It does NOT exist on `IgcSparklineComponent`.
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
- The drawer sizing hooks in the current implementation are `--menu-full-width` and `--menu-mini-width`:
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: <extracted-sidebar-width>;
101
- --menu-mini-width: <extracted-mini-drawer-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
 
@@ -97,92 +97,24 @@ For more details, see the [igniteui-wc-integrate-with-framework](../igniteui-wc-
97
97
 
98
98
  ## Analyzing Your Bundle
99
99
 
100
- ### Using Webpack Bundle Analyzer
101
-
102
- **Installation:**
103
-
104
- ```bash
105
- npm install --save-dev webpack-bundle-analyzer
106
- ```
107
-
108
- **Configuration (`webpack.config.js`):**
109
-
110
- ```javascript
111
- const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
112
-
113
- module.exports = {
114
- plugins: [
115
- new BundleAnalyzerPlugin({
116
- analyzerMode: 'static',
117
- openAnalyzer: false,
118
- reportFilename: 'bundle-report.html'
119
- })
120
- ]
121
- };
122
- ```
123
-
124
- **Run analysis:**
125
-
126
- ```bash
127
- npm run build
128
- # Open bundle-report.html to see what's included
129
- ```
130
-
131
- ### Using Vite Bundle Analyzer
132
-
133
- **Installation:**
100
+ Use a bundle analyzer to identify what's being included before and after optimization.
134
101
 
102
+ **Vite projects** — [rollup-plugin-visualizer](https://www.npmjs.com/package/rollup-plugin-visualizer):
135
103
  ```bash
136
104
  npm install --save-dev rollup-plugin-visualizer
137
105
  ```
106
+ Add `visualizer()` to the Vite `plugins` array and run `npm run build`. The plugin opens a treemap in the browser.
138
107
 
139
- **Configuration (`vite.config.ts`):**
140
-
141
- ```typescript
142
- import { defineConfig } from 'vite';
143
- import { visualizer } from 'rollup-plugin-visualizer';
144
-
145
- export default defineConfig({
146
- plugins: [
147
- visualizer({
148
- open: true,
149
- gzipSize: true,
150
- brotliSize: true,
151
- })
152
- ]
153
- });
154
- ```
155
-
156
- **Run analysis:**
157
-
108
+ **Webpack projects** — [webpack-bundle-analyzer](https://www.npmjs.com/package/webpack-bundle-analyzer):
158
109
  ```bash
159
- npm run build
160
- # Opens stats.html automatically
110
+ npm install --save-dev webpack-bundle-analyzer
161
111
  ```
112
+ Add `BundleAnalyzerPlugin` to `webpack.config.js` plugins and run `npm run build`.
162
113
 
163
- ### Using source-map-explorer
164
-
165
- **Installation:**
166
-
114
+ **Framework-agnostic** [source-map-explorer](https://www.npmjs.com/package/source-map-explorer):
167
115
  ```bash
168
116
  npm install --save-dev source-map-explorer
169
- ```
170
-
171
- **Package.json:**
172
-
173
- ```json
174
- {
175
- "scripts": {
176
- "analyze": "source-map-explorer 'dist/**/*.js'"
177
- }
178
- }
179
- ```
180
-
181
- **Run:**
182
-
183
- ```bash
184
- npm run build
185
- npm run analyze
117
+ # Then: source-map-explorer 'dist/**/*.js'
186
118
  ```
187
119
 
188
120
  ## Audit Your Component Usage
@@ -381,35 +313,14 @@ export class MyComponent {
381
313
 
382
314
  ## Route-Based Code Splitting
383
315
 
384
- Load components only for specific routes.
385
-
386
- ### React Router
387
-
388
- ```tsx
389
- import { BrowserRouter, Routes, Route } from 'react-router-dom';
390
- import { lazy, Suspense } from 'react';
391
-
392
- // Lazy load route components
393
- const HomePage = lazy(() => import('./pages/Home'));
394
- const DashboardPage = lazy(() => import('./pages/Dashboard'));
316
+ Load Ignite UI components only for the routes that need them by placing `defineComponents(...)` calls inside the lazy-loaded route module for each framework.
395
317
 
396
- function App() {
397
- return (
398
- <BrowserRouter>
399
- <Suspense fallback={<div>Loading...</div>}>
400
- <Routes>
401
- <Route path="/" element={<HomePage />} />
402
- <Route path="/dashboard" element={<DashboardPage />} />
403
- </Routes>
404
- </Suspense>
405
- </BrowserRouter>
406
- );
407
- }
408
- ```
318
+ ### React (using React.lazy)
409
319
 
410
- **In route component (`pages/Dashboard.tsx`):**
320
+ Put component imports and `defineComponents` at the top of each page module. React's `lazy()` + `Suspense` handles the async split:
411
321
 
412
322
  ```tsx
323
+ // pages/Dashboard.tsx
413
324
  import { IgrCard, IgrButton } from 'igniteui-react';
414
325
 
415
326
  function Dashboard() {
@@ -424,30 +335,11 @@ function Dashboard() {
424
335
  }
425
336
  ```
426
337
 
427
- ### Vue Router
428
-
429
- ```typescript
430
- // router/index.ts
431
- import { createRouter, createWebHistory } from 'vue-router';
432
-
433
- const routes = [
434
- {
435
- path: '/',
436
- component: () => import('../views/Home.vue') // Lazy load
437
- },
438
- {
439
- path: '/dashboard',
440
- component: () => import('../views/Dashboard.vue') // Lazy load
441
- }
442
- ];
338
+ Refer to your router's lazy-loading docs (React Router, TanStack Router, etc.) for how to split `pages/Dashboard` into its own chunk.
443
339
 
444
- export default createRouter({
445
- history: createWebHistory(),
446
- routes
447
- });
448
- ```
340
+ ### Vue 3
449
341
 
450
- **In route component (`views/Dashboard.vue`):**
342
+ Use `onMounted` to register components only when the route mounts:
451
343
 
452
344
  ```vue
453
345
  <script setup lang="ts">
@@ -461,109 +353,23 @@ onMounted(async () => {
461
353
  </script>
462
354
  ```
463
355
 
356
+ Refer to Vue Router docs for the `() => import('./views/Dashboard.vue')` lazy-route syntax.
357
+
464
358
  ### Angular
465
359
 
466
- ```typescript
467
- // app-routing.module.ts
468
- import { NgModule } from '@angular/core';
469
- import { RouterModule, Routes } from '@angular/router';
470
-
471
- const routes: Routes = [
472
- {
473
- path: 'dashboard',
474
- loadChildren: () => import('./dashboard/dashboard.module').then(m => m.DashboardModule)
475
- }
476
- ];
477
-
478
- @NgModule({
479
- imports: [RouterModule.forRoot(routes)],
480
- exports: [RouterModule]
481
- })
482
- export class AppRoutingModule {}
483
- ```
360
+ Place `defineComponents(...)` inside the route's module or component so it's included only in that lazy chunk. Refer to Angular Router docs for `loadChildren` / `loadComponent` lazy loading.
484
361
 
485
362
  ## Build Configuration Optimizations
486
363
 
487
- ### Vite Configuration
488
-
489
- ```typescript
490
- // vite.config.ts
491
- import { defineConfig } from 'vite';
492
-
493
- export default defineConfig({
494
- build: {
495
- // Enable minification
496
- minify: 'terser',
497
- terserOptions: {
498
- compress: {
499
- drop_console: true, // Remove console.logs
500
- drop_debugger: true
501
- }
502
- },
503
-
504
- // Optimize chunk splitting
505
- rollupOptions: {
506
- output: {
507
- manualChunks: {
508
- // Separate vendor chunks
509
- 'vendor': ['igniteui-webcomponents'],
510
- }
511
- }
512
- },
513
-
514
- // Set chunk size warning limit
515
- chunkSizeWarningLimit: 600,
516
- },
517
-
518
- // Optimize deps
519
- optimizeDeps: {
520
- include: ['igniteui-webcomponents']
521
- }
522
- });
523
- ```
364
+ Ensure your build tool is running in production mode with minification enabled. For Vite, this is the default for `vite build`. For Webpack, set `mode: 'production'`.
524
365
 
525
- ### Webpack Configuration
526
-
527
- ```javascript
528
- // webpack.config.js
529
- module.exports = {
530
- optimization: {
531
- splitChunks: {
532
- chunks: 'all',
533
- cacheGroups: {
534
- vendor: {
535
- test: /[\\/]node_modules[\\/]/,
536
- name: 'vendors',
537
- priority: 10,
538
- },
539
- igniteui: {
540
- test: /[\\/]node_modules[\\/]igniteui-webcomponents[\\/]/,
541
- name: 'igniteui',
542
- priority: 20,
543
- }
544
- }
545
- },
546
- minimize: true,
547
- },
548
-
549
- // Tree shaking
550
- mode: 'production',
551
- };
552
- ```
366
+ To reduce chunk-size warnings from Ignite UI components, increase the `chunkSizeWarningLimit` in Vite or configure `splitChunks` in Webpack to place `igniteui-*` packages in a named vendor chunk. Consult your build tool's documentation for the exact configuration options.
553
367
 
554
368
  ## Size Comparison
555
369
 
556
- Here's what you can expect in terms of bundle size:
557
-
558
- | Import Strategy | Approximate Size (gzipped) | Components Included |
559
- |----------------|---------------------------|---------------------|
560
- | `defineAllComponents()` | ~500KB+ | All 60+ components |
561
- | 10 components via `defineComponents()` | ~150-200KB | 10 components + deps |
562
- | 5 components via `defineComponents()` | ~100-150KB | 5 components + deps |
563
- | 3 components via `defineComponents()` | ~80-120KB | 3 components + deps |
564
- | 1 component via `defineComponents()` | ~50-80KB | 1 component + deps |
370
+ Actual sizes depend heavily on which components you import (grid and chart components are significantly larger than UI components). Use your bundle analyzer to measure the real impact in your project rather than relying on generic estimates.
565
371
 
566
- **Note:** Sizes vary based on which components you import (some have more dependencies than others).
372
+ The key rule: importing a subset of components with `defineComponents()` instead of `defineAllComponents()` will reduce the bundle by the weight of every component you don't include, plus all of their exclusive dependencies.
567
373
 
568
374
  ## Best Practices Checklist
569
375
 
@@ -634,64 +440,7 @@ import type { IgcButtonComponent } from 'igniteui-webcomponents';
634
440
 
635
441
  ## Monitoring Bundle Size
636
442
 
637
- ### Set up bundle size monitoring in CI/CD
638
-
639
- **Using bundlesize (for any build tool):**
640
-
641
- ```bash
642
- npm install --save-dev bundlesize
643
- ```
644
-
645
- **Package.json:**
646
-
647
- ```json
648
- {
649
- "scripts": {
650
- "test:size": "bundlesize"
651
- },
652
- "bundlesize": [
653
- {
654
- "path": "./dist/**/*.js",
655
- "maxSize": "300 kB"
656
- }
657
- ]
658
- }
659
- ```
660
-
661
- **Run in CI:**
662
-
663
- ```bash
664
- npm run build
665
- npm run test:size
666
- ```
667
-
668
- ### GitHub Actions Example
669
-
670
- ```yaml
671
- name: Bundle Size Check
672
-
673
- on: [pull_request]
674
-
675
- jobs:
676
- size:
677
- runs-on: ubuntu-latest
678
- steps:
679
- - uses: actions/checkout@v3
680
- - uses: actions/setup-node@v3
681
- - run: npm ci
682
- - run: npm run build
683
- - run: npm run test:size
684
- ```
685
-
686
- ## Expected Results
687
-
688
- After optimization, you should see:
689
-
690
- - **Initial load time reduced** by 40-60%
691
- - **Bundle size reduced** by 50-80%
692
- - **Better Core Web Vitals** scores
693
- - **Faster time to interactive**
694
- - **Lower bandwidth usage** for users
443
+ For ongoing bundle size monitoring in CI, tools like [bundlesize](https://www.npmjs.com/package/bundlesize), [size-limit](https://www.npmjs.com/package/size-limit), or the [Bundlewatch GitHub Action](https://github.com/apps/bundlewatch) can fail a pull request when the bundle exceeds a defined threshold. Configure a size limit appropriate for your project's component set after you've completed the import optimization.
695
444
 
696
445
  ## Next Steps
697
446
 
@@ -31,7 +31,7 @@ class EmptyPageTemplate extends _base_with_home_1.BaseWithHomeIgcProject {
31
31
  super(...arguments);
32
32
  this.id = "empty";
33
33
  this.name = "Empty Project";
34
- this.description = "Project structure with routing and a home page";
34
+ this.description = "Starter project with routing and a home page";
35
35
  this.framework = "webcomponents";
36
36
  this.projectType = "igc-ts";
37
37
  this.hasExtraConfiguration = false;
@@ -0,0 +1,21 @@
1
+ <!doctype html>
2
+ <html lang="en-GB">
3
+
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <base href="/">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1">
8
+ <title>Ignite UI for Web Components</title>
9
+ <link rel="icon" type="image/png" href="./src/assets/wc.png">
10
+ <link href="https://fonts.googleapis.com/css?family=Titillium+Web:300,400,600,700" rel="stylesheet">
11
+ <link rel="stylesheet" href="./node_modules/igniteui-webcomponents/themes/light/material.css">
12
+ <link rel="stylesheet" href="./styles.css">
13
+ </head>
14
+
15
+ <body class="ig-scrollbar">
16
+ <app-root></app-root>
17
+
18
+ <script type="module" src="./src/index.ts"></script>
19
+ </body>
20
+
21
+ </html>
@@ -0,0 +1,9 @@
1
+ import { type Route } from '@vaadin/router';
2
+ import './home/home.js';
3
+ import './not-found/not-found.js';
4
+
5
+ export const routes: Array<Route & { name?: string; icon?: string }> = [
6
+ { path: '/', component: 'app-home', name: 'Home', icon: 'home' },
7
+ // The fallback route should always be after other alternatives.
8
+ { path: '(.*)', component: 'app-not-found' },
9
+ ];