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.
Files changed (40) hide show
  1. package/lib/PromptSession.d.ts +1 -1
  2. package/lib/PromptSession.js +2 -2
  3. package/lib/commands/ai-config.d.ts +3 -5
  4. package/lib/commands/ai-config.js +68 -23
  5. package/lib/commands/new.js +1 -1
  6. package/package.json +4 -4
  7. package/templates/blazor/igb/index.d.ts +1 -0
  8. package/templates/blazor/igb/index.js +12 -0
  9. package/templates/blazor/igb/projects/ai-config/files/AGENTS.md +65 -0
  10. package/templates/blazor/igb/projects/ai-config/files/skills/AGENTS.md +65 -0
  11. package/templates/blazor/igb/projects/ai-config/files/skills/README.md +61 -0
  12. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/SKILL.md +118 -0
  13. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/charts.md +302 -0
  14. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/data-display.md +350 -0
  15. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/feedback.md +178 -0
  16. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/form-controls.md +365 -0
  17. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/layout-manager.md +180 -0
  18. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/layout.md +322 -0
  19. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/mcp-setup.md +78 -0
  20. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-components/references/setup.md +214 -0
  21. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-generate-from-image-design/SKILL.md +284 -0
  22. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-generate-from-image-design/references/component-mapping.md +281 -0
  23. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-generate-from-image-design/references/gotchas.md +503 -0
  24. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/SKILL.md +188 -0
  25. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/data-operations.md +264 -0
  26. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/editing.md +297 -0
  27. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/features.md +447 -0
  28. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/mcp-setup.md +78 -0
  29. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/paging-remote.md +299 -0
  30. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/sizing.md +284 -0
  31. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/state.md +160 -0
  32. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/structure.md +497 -0
  33. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-grids/references/types.md +553 -0
  34. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-theming/SKILL.md +259 -0
  35. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-theming/references/common-patterns.md +276 -0
  36. package/templates/blazor/igb/projects/ai-config/files/skills/igniteui-blazor-theming/references/mcp-setup.md +81 -0
  37. package/templates/blazor/igb/projects/ai-config/index.d.ts +22 -0
  38. package/templates/blazor/igb/projects/ai-config/index.js +62 -0
  39. package/templates/blazor/index.d.ts +3 -0
  40. package/templates/blazor/index.js +11 -0
@@ -0,0 +1,178 @@
1
+ # Feedback & Overlay Components
2
+
3
+ > **Part of the [`igniteui-blazor-components`](../SKILL.md) skill hub.**
4
+ > For project setup and module registration - see [`setup.md`](./setup.md).
5
+
6
+ ## Contents
7
+
8
+ - [Dialog](#dialog)
9
+ - [Snackbar](#snackbar)
10
+ - [Toast](#toast)
11
+ - [Banner](#banner)
12
+ - [Key Rules](#key-rules)
13
+
14
+ ---
15
+
16
+ ## Overview
17
+ This reference gives high-level guidance on feedback and overlay components, their key features, and common API members. For detailed documentation, call `get_doc` from `igniteui-cli`; use `search_api` and `get_api_reference` for Blazor API details.
18
+
19
+ ## Dialog
20
+
21
+ > **Docs:** [Dialog](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/notifications/dialog)
22
+
23
+ ```csharp
24
+ builder.Services.AddIgniteUIBlazor(typeof(IgbDialogModule));
25
+ ```
26
+
27
+ ```razor
28
+ <IgbButton @onclick="OpenDialog">Open Dialog</IgbButton>
29
+
30
+ <IgbDialog @ref="ConfirmDialog"
31
+ Title="Delete Item"
32
+ KeepOpenOnEscape="false"
33
+ CloseOnOutsideClick="false">
34
+ <p>Are you sure you want to delete this item? This action cannot be undone.</p>
35
+ <IgbButton slot="footer" Variant="@ButtonVariant.Flat" @onclick="CloseDialog">Cancel</IgbButton>
36
+ <IgbButton slot="footer" Variant="@ButtonVariant.Contained" @onclick="ConfirmDelete">Delete</IgbButton>
37
+ </IgbDialog>
38
+
39
+ @code {
40
+ public IgbDialog ConfirmDialog { get; set; }
41
+
42
+ Task OpenDialog() => ConfirmDialog.ShowAsync();
43
+ Task CloseDialog() => ConfirmDialog.HideAsync();
44
+
45
+ async Task ConfirmDelete()
46
+ {
47
+ await ConfirmDialog.HideAsync();
48
+ // perform delete
49
+ }
50
+ }
51
+ ```
52
+
53
+ Key attributes: `Title`, `KeepOpenOnEscape` (default: `false`; set `true` to prevent closing on ESC), `CloseOnOutsideClick` (default: `false`), `Open`, `HideDefaultAction`.
54
+
55
+ Slots: `footer` (action buttons). The default slot is the dialog body.
56
+
57
+ Methods: `ShowAsync()`, `HideAsync()`, `ToggleAsync()`.
58
+
59
+ Events: `Opening` (cancellable), `Opened`, `Closing` (cancellable), `Closed`.
60
+
61
+ CSS parts: `base`, `title`, `footer`, `content`.
62
+
63
+ ---
64
+
65
+ ## Snackbar
66
+
67
+ > **Docs:** [Snackbar](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/notifications/snackbar)
68
+
69
+ ```csharp
70
+ builder.Services.AddIgniteUIBlazor(typeof(IgbSnackbarModule));
71
+ ```
72
+
73
+ ```razor
74
+ <IgbButton @onclick="ShowMessage">Save</IgbButton>
75
+
76
+ <IgbSnackbar @ref="Snack"
77
+ DisplayTime="3000"
78
+ ActionText="Undo"
79
+ Action="OnUndo">
80
+ Changes saved successfully.
81
+ </IgbSnackbar>
82
+
83
+ @code {
84
+ IgbSnackbar Snack { get; set; }
85
+
86
+ async Task ShowMessage()
87
+ {
88
+ await Snack.ShowAsync();
89
+ // or use JS interop shortcut: id="snackbar" + onclick="snackbar.show()"
90
+ }
91
+
92
+ void OnUndo(IgbVoidEventArgs e) { /* undo logic */ }
93
+ }
94
+ ```
95
+
96
+ Key attributes: `DisplayTime` (ms, default 4000; 0 keeps it open), `KeepOpen` (overrides `DisplayTime`), `ActionText` (text for the action button).
97
+
98
+ Methods: `ShowAsync()`, `HideAsync()`.
99
+
100
+ Events: `Action` - fires when the action button is clicked.
101
+
102
+ CSS parts: `base`, `message`, `action`, `action-container`.
103
+
104
+ > **TIP - JS interop shortcut:** Add `id="snackbar"` to `IgbSnackbar` and `onclick="snackbar.show()"` to the trigger button as a lightweight alternative when you don't need C# event handling.
105
+
106
+ ---
107
+
108
+ ## Toast
109
+
110
+ > **Docs:** [Toast](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/notifications/toast)
111
+
112
+ ```csharp
113
+ builder.Services.AddIgniteUIBlazor(typeof(IgbToastModule));
114
+ ```
115
+
116
+ ```razor
117
+ <IgbButton @onclick="ShowToast">Show Toast</IgbButton>
118
+
119
+ <IgbToast @ref="ToastRef" DisplayTime="4000">
120
+ Operation completed successfully.
121
+ </IgbToast>
122
+
123
+ @code {
124
+ IgbToast ToastRef { get; set; }
125
+ Task ShowToast() => ToastRef.ShowAsync();
126
+ }
127
+ ```
128
+
129
+ Key attributes: `DisplayTime` (ms), `KeepOpen`.
130
+
131
+ Methods: `ShowAsync()`, `HideAsync()`.
132
+
133
+ > **AGENT INSTRUCTION - Toast vs Snackbar:** `IgbToast` is a simple auto-dismissing notification with no action button. Use `IgbSnackbar` when you need an action button (e.g., "Undo"). Check the doc via `get_doc` for the current difference, as these components evolve.
134
+
135
+ ---
136
+
137
+ ## Banner
138
+
139
+ > **Docs:** [Banner](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/notifications/banner)
140
+
141
+ ```csharp
142
+ builder.Services.AddIgniteUIBlazor(typeof(IgbBannerModule));
143
+ ```
144
+
145
+ ```razor
146
+ <IgbBanner @ref="BannerRef">
147
+ <IgbIcon slot="illustration" IconName="wifi_off" Collection="material" />
148
+ You are currently offline.
149
+ <IgbButton slot="actions" @onclick="RetryConnection">Retry</IgbButton>
150
+ </IgbBanner>
151
+
152
+ <IgbButton @onclick="ShowBanner">Show Banner</IgbButton>
153
+
154
+ @code {
155
+ IgbBanner BannerRef { get; set; }
156
+ Task ShowBanner() => BannerRef.ShowAsync();
157
+ void RetryConnection() { /* retry logic */ }
158
+ }
159
+ ```
160
+
161
+ Slots: `illustration` (icon or image), `actions` (buttons shown at the right or bottom). Default slot = message text.
162
+
163
+ Methods: `ShowAsync()`, `HideAsync()`, `ToggleAsync()`.
164
+
165
+ Events: `Opening` (cancellable), `Opened`, `Closing` (cancellable), `Closed`.
166
+
167
+ CSS parts: `spacer`, `message`, `illustration`, `actions`.
168
+
169
+ ---
170
+
171
+ ## Key Rules
172
+
173
+ 1. **Use `@ref` to obtain a component reference**, then call `ShowAsync()` / `HideAsync()` on it from C# code.
174
+ 2. **`IgbDialog.KeepOpenOnEscape` is `false` by default** - meaning the dialog closes when the user presses ESC. Set it to `true` to prevent ESC from closing the dialog (forcing users to use your footer buttons).
175
+ 3. **`IgbDialog.CloseOnOutsideClick` is `false` by default** - set it to `true` for light-dismiss dialogs.
176
+ 4. **`IgbSnackbar.DisplayTime="0"` keeps it open until `HideAsync()` is called.** Use `KeepOpen` for the same effect.
177
+ 5. **Footer buttons in `IgbDialog` must use `slot="footer"`.** Without the slot, they render in the body.
178
+ 6. **`IgbBanner` is inline** (pushes content down) while `IgbDialog` is a modal overlay. Use banners for persistent, low-urgency messages and dialogs for confirmations or blocking actions.
@@ -0,0 +1,365 @@
1
+ # Form Controls & EditForm Integration
2
+
3
+ > **Part of the [`igniteui-blazor-components`](../SKILL.md) skill hub.**
4
+ > For project setup and module registration - see [`setup.md`](./setup.md).
5
+
6
+ ## Contents
7
+
8
+ - [Input](#input)
9
+ - [Combo Box](#combo-box)
10
+ - [Select](#select)
11
+ - [Date Picker](#date-picker)
12
+ - [Date Range Picker](#date-range-picker)
13
+ - [Calendar](#calendar)
14
+ - [Date Time Input](#date-time-input)
15
+ - [Mask Input](#mask-input)
16
+ - [Checkbox](#checkbox)
17
+ - [Radio / Radio Group](#radio--radio-group)
18
+ - [Switch](#switch)
19
+ - [Slider / Range Slider](#slider--range-slider)
20
+ - [Rating](#rating)
21
+ - [Form & Binding Notes](#form--binding-notes)
22
+ - [Key Rules](#key-rules)
23
+
24
+ ---
25
+
26
+ ## Overview
27
+ This reference gives high-level guidance on form controls, their key features, and common API members. For detailed documentation, call `get_doc` from `igniteui-cli`; use `search_api` and `get_api_reference` for Blazor API details.
28
+
29
+ ## Input
30
+
31
+ > **Docs:** [Input](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/inputs/input)
32
+
33
+ ```csharp
34
+ // Program.cs
35
+ builder.Services.AddIgniteUIBlazor(typeof(IgbInputModule));
36
+ ```
37
+
38
+ ```razor
39
+ <IgbInput @bind-Value="UserName" Label="Username" Placeholder="e.g. John Doe">
40
+ <span slot="prefix">User</span>
41
+ </IgbInput>
42
+
43
+ @code {
44
+ string UserName { get; set; } = "";
45
+ }
46
+ ```
47
+
48
+ Key attributes: `Label`, `Placeholder`, `DisplayType` (`InputType.Text / Email / Password / Tel / Number`), `Required`, `Disabled`, `Readonly`, `MinLength`, `MaxLength`.
49
+
50
+ Slots: `prefix`, `suffix`, `helper-text`.
51
+
52
+ > **AGENT INSTRUCTION - Icons in slots:** Always use `IgbIcon` in `prefix`/`suffix` slots, never `<span class="material-icons">`. Font spans are `display: inline` so `vertical-align` is ignored inside the slot's flex context - the icon floats to the top. `IgbIcon` (`igc-icon`) is `display: inline-flex; align-items: center` and self-centers automatically. Register the icon in `OnAfterRenderAsync(firstRender)` after `EnsureReady()`.
53
+
54
+ Events: `IgbInput` (fires while typing), `Change` (fires on commit/blur).
55
+
56
+ > **AGENT INSTRUCTION:** `IgbInput` has **no** `GetValueAsync()` method. Read values via the synchronous `Value` property or, preferably, use `@bind-Value` bound directly to a model property - that is the correct Blazor pattern and avoids the need to imperatively read the value at all.
57
+
58
+ ---
59
+
60
+ ## Combo Box
61
+
62
+ > **Docs:** [Combo Box](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/inputs/combo/overview)
63
+
64
+ ```csharp
65
+ builder.Services.AddIgniteUIBlazor(typeof(IgbComboModule));
66
+ ```
67
+
68
+ ```razor
69
+ <IgbCombo T="string"
70
+ Data="Cities"
71
+ ValueKey="Id"
72
+ DisplayKey="Name"
73
+ Label="Select Cities"
74
+ Placeholder="Pick a city" />
75
+
76
+ @code {
77
+ private List<City> Cities = SampleData.Cities;
78
+
79
+ record City(string Id, string Name, string Country);
80
+ }
81
+ ```
82
+
83
+ Key attributes: `Data`, `ValueKey` (required for complex objects), `DisplayKey`, `T` (type parameter - must match `ValueKey` property type or `"object"` if no `ValueKey`), `Label`, `Placeholder`, `SingleSelect` (for single-selection mode), `Disabled`, `Required`.
84
+
85
+ Events: `Opening`, `Opened`, `Closing`, `Closed`, `SelectionChanging`.
86
+
87
+ > **AGENT INSTRUCTION:** `IgbCombo` does **not** work inside a standard HTML `<form>`. Use `<EditForm>` with `@bind-Value` instead.
88
+
89
+ ---
90
+
91
+ ## Select
92
+
93
+ > **Docs:** [Select](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/inputs/select)
94
+
95
+ ```csharp
96
+ builder.Services.AddIgniteUIBlazor(typeof(IgbSelectModule));
97
+ ```
98
+
99
+ ```razor
100
+ <IgbSelect Label="Fruit" Placeholder="Choose a fruit">
101
+ <IgbSelectItem Value="apple">Apple</IgbSelectItem>
102
+ <IgbSelectItem Value="orange">Orange</IgbSelectItem>
103
+ <IgbSelectItem Value="banana">Banana</IgbSelectItem>
104
+ </IgbSelect>
105
+ ```
106
+
107
+ For grouped options use `IgbSelectHeader` and `IgbSelectGroup`. Key attributes on `IgbSelect`: `Label`, `Placeholder`, `Outlined`, `Disabled`, `Required`, `Name`. On `IgbSelectItem`: `Value`, `Selected`, `Disabled`.
108
+
109
+ Slots on `IgbSelect`: `header`, `footer`, `helper-text`, `prefix`, `suffix`, `toggle-icon`.
110
+
111
+ ---
112
+
113
+ ## Date Picker
114
+
115
+ > **Docs:** [Date Picker](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/scheduling/date-picker)
116
+
117
+ ```csharp
118
+ builder.Services.AddIgniteUIBlazor(typeof(IgbDatePickerModule));
119
+ ```
120
+
121
+ ```razor
122
+ <IgbDatePicker @ref="Picker" Value="@SelectedDate" />
123
+
124
+ @code {
125
+ public IgbDatePicker Picker { get; set; }
126
+ public DateTime SelectedDate { get; set; } = DateTime.Today;
127
+ }
128
+ ```
129
+
130
+ Key attributes: `Value` (DateTime), `Min`, `Max`, `InputFormat`, `DisplayFormat`, `Locale`, `Mode` (`PickerMode.Dropdown` / `PickerMode.Dialog`), `ShowWeekNumbers`, `WeekStart`, `Disabled`, `Required`.
131
+
132
+ Slots: `calendar`, `clear`, `prefix`, `suffix`, `actions` (custom footer buttons).
133
+
134
+ Methods: `StepUp(DatePart)`, `StepDown(DatePart)`, `Clear()`, `Show()`, `Hide()`, `Toggle()`.
135
+
136
+ ---
137
+
138
+ ## Date Range Picker
139
+
140
+ > **Docs:** [Date Range Picker](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/scheduling/date-range-picker)
141
+
142
+ ```csharp
143
+ builder.Services.AddIgniteUIBlazor(typeof(IgbDateRangePickerModule));
144
+ ```
145
+
146
+ ```razor
147
+ <IgbDateRangePicker @ref="RangePicker" />
148
+
149
+ @code {
150
+ public IgbDateRangePicker RangePicker { get; set; }
151
+ }
152
+ ```
153
+
154
+ Returns a start and end `DateTime`. Key attributes: `Min`, `Max`, `InputFormat`, `Locale`, `Mode`.
155
+
156
+ ---
157
+
158
+ ## Calendar
159
+
160
+ > **Docs:** [Calendar](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/scheduling/calendar)
161
+
162
+ ```csharp
163
+ builder.Services.AddIgniteUIBlazor(typeof(IgbCalendarModule));
164
+ ```
165
+
166
+ ```razor
167
+ <IgbCalendar />
168
+ ```
169
+
170
+ Use Calendar when the UI needs an always-visible date picker rather than an input/dropdown picker. For multiple selection, range selection, special dates, disabled dates, visible months, week numbers, and localization, use the exact property names from the `calendar` MCP doc before writing markup.
171
+
172
+ ---
173
+
174
+ ## Date Time Input
175
+
176
+ > **Docs:** [Date Time Input](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/inputs/date-time-input)
177
+
178
+ ```csharp
179
+ builder.Services.AddIgniteUIBlazor(typeof(IgbDateTimeInputModule));
180
+ ```
181
+
182
+ ```razor
183
+ <IgbDateTimeInput @bind-Value="SelectedDateTime"
184
+ InputFormat="MM/dd/yyyy HH:mm"
185
+ SpinLoop="true" />
186
+
187
+ @code {
188
+ public DateTime? SelectedDateTime { get; set; } = DateTime.Now;
189
+ }
190
+ ```
191
+
192
+ Key attributes: `Value` (DateTime?), `InputFormat`, `DisplayFormat`, `Min`, `Max`, `MinutesStep`, `SpinLoop`.
193
+
194
+ Methods: `StepUp()`, `StepDown()`, `Clear()`.
195
+
196
+ ---
197
+
198
+ ## Mask Input
199
+
200
+ > **Docs:** [Mask Input](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/inputs/mask-input)
201
+
202
+ ```csharp
203
+ builder.Services.AddIgniteUIBlazor(typeof(IgbMaskInputModule));
204
+ ```
205
+
206
+ ```razor
207
+ <IgbMaskInput Mask="(000) 000-0000"
208
+ Label="Phone Number"
209
+ Placeholder="(555) 123-4567" />
210
+ ```
211
+
212
+ Key attributes: `Mask` (pattern string: `0` = digit, `L` = letter, `A` = alphanumeric), `Placeholder`, `Prompt` (fill character, default `_`), `ValueMode` (`raw` or `withFormatting`).
213
+
214
+ ---
215
+
216
+ ## Checkbox
217
+
218
+ > **Docs:** [Checkbox](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/inputs/checkbox)
219
+
220
+ ```csharp
221
+ builder.Services.AddIgniteUIBlazor(typeof(IgbCheckboxModule));
222
+ ```
223
+
224
+ ```razor
225
+ <IgbCheckbox @bind-Checked="IsSubscribed">Subscribe to newsletter</IgbCheckbox>
226
+
227
+ @code {
228
+ bool IsSubscribed { get; set; }
229
+ }
230
+ ```
231
+
232
+ Key attributes: `Checked`, `Indeterminate`, `Disabled`, `Required`, `Invalid`, `LabelPosition` (`ToggleLabelPosition.After` / `Before`), `Name`, `Value`.
233
+
234
+ CSS parts: `base`, `control`, `indicator`, `label`.
235
+
236
+ ---
237
+
238
+ ## Radio / Radio Group
239
+
240
+ > **Docs:** [Radio & Radio Group](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/inputs/radio)
241
+
242
+ ```csharp
243
+ builder.Services.AddIgniteUIBlazor(typeof(IgbRadioModule), typeof(IgbRadioGroupModule));
244
+ ```
245
+
246
+ ```razor
247
+ <IgbRadioGroup Alignment="@ContentOrientation.Vertical" Name="plan">
248
+ <IgbRadio Value="basic">Basic</IgbRadio>
249
+ <IgbRadio Value="pro">Pro</IgbRadio>
250
+ <IgbRadio Value="enterprise">Enterprise</IgbRadio>
251
+ </IgbRadioGroup>
252
+ ```
253
+
254
+ Key attributes on `IgbRadioGroup`: `Alignment` (`ContentOrientation.Horizontal` / `ContentOrientation.Vertical`), `Name`. On `IgbRadio`: `Value`, `Checked`, `Disabled`, `Invalid`, `LabelPosition`.
255
+
256
+ ---
257
+
258
+ ## Switch
259
+
260
+ > **Docs:** [Switch](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/inputs/switch)
261
+
262
+ ```csharp
263
+ builder.Services.AddIgniteUIBlazor(typeof(IgbSwitchModule));
264
+ ```
265
+
266
+ ```razor
267
+ <IgbSwitch @bind-Checked="IsDarkMode">Dark Mode</IgbSwitch>
268
+
269
+ @code {
270
+ bool IsDarkMode { get; set; }
271
+ }
272
+ ```
273
+
274
+ Key attributes: `Checked`, `Disabled`, `Required`, `LabelPosition`.
275
+
276
+ ---
277
+
278
+ ## Slider / Range Slider
279
+
280
+ > **Docs:** [Slider & Range Slider](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/inputs/slider)
281
+
282
+ ```csharp
283
+ builder.Services.AddIgniteUIBlazor(typeof(IgbSliderModule), typeof(IgbRangeSliderModule));
284
+ ```
285
+
286
+ ```razor
287
+ <!-- Single value -->
288
+ <IgbSlider Value="40" Min="0" Max="100" Step="5" Change="OnSliderChange" />
289
+
290
+ <!-- Range -->
291
+ <IgbRangeSlider Lower="20" Upper="70" Change="OnRangeChange" />
292
+
293
+ @code {
294
+ void OnSliderChange(IgbNumberEventArgs e) => Console.WriteLine(e.Detail);
295
+ void OnRangeChange(IgbRangeSliderValueEventArgs e)
296
+ {
297
+ var lower = e.Detail.Lower;
298
+ var upper = e.Detail.Upper;
299
+ }
300
+ }
301
+ ```
302
+
303
+ Key attributes on `IgbSlider`: `Value`, `Min`, `Max`, `Step`, `Disabled`, `HideTooltip`. On `IgbRangeSlider`: `Lower`, `Upper`, `Min`, `Max`, `Step`.
304
+
305
+ Events (both): `IgbInput` (fires while dragging), `Change` (fires on commit).
306
+
307
+ ---
308
+
309
+ ## Rating
310
+
311
+ > **Docs:** [Rating](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/inputs/rating)
312
+
313
+ ```csharp
314
+ builder.Services.AddIgniteUIBlazor(typeof(IgbRatingModule));
315
+ ```
316
+
317
+ ```razor
318
+ <IgbRating @bind-Value="StarRating" Max="5" />
319
+
320
+ @code {
321
+ double StarRating { get; set; } = 3;
322
+ }
323
+ ```
324
+
325
+ Key attributes: `Value`, `Max`, `Step` (for half-star: `0.5`), `Disabled`, `Readonly`, `Label`, `ValueFormat`.
326
+
327
+ Events: `Change`, `Hover`.
328
+
329
+ ---
330
+
331
+ ## Form & Binding Notes
332
+
333
+ > **AGENT INSTRUCTION:** Do not assume one universal form integration pattern. Several Ignite UI Blazor components such as `IgbCombo` and `IgbRadio` do **not** work with a standard HTML `<form>` element. Use the MCP doc for the exact component, bind values explicitly, and only use a form pattern shown by the current docs.
334
+
335
+ ```razor
336
+ <IgbInput @bind-Value="Model.Name" Label="Name" Required="true" />
337
+ <IgbCheckbox @bind-Checked="Model.Agreed">I agree to the terms</IgbCheckbox>
338
+ <IgbSelect @bind-Value="Model.Country" Label="Country" Name="country">
339
+ <IgbSelectItem Value="us">United States</IgbSelectItem>
340
+ <IgbSelectItem Value="uk">United Kingdom</IgbSelectItem>
341
+ </IgbSelect>
342
+
343
+ @code {
344
+ public class FormModel
345
+ {
346
+ [Required] public string Name { get; set; } = "";
347
+ public bool Agreed { get; set; }
348
+ public string Country { get; set; } = "";
349
+ }
350
+
351
+ FormModel Model = new();
352
+
353
+ void Save() { /* validate and persist Model using the pattern required by your app */ }
354
+ }
355
+ ```
356
+
357
+ ---
358
+
359
+ ## Key Rules
360
+
361
+ 1. **Do not wrap Ignite UI inputs in a standard HTML `<form>` unless the component doc shows that pattern.** Form behavior differs by component.
362
+ 2. **Register every module you use in `Program.cs`** using the `typeof(Igb{Name}Module)` pattern.
363
+ 3. **`IgbCombo` requires the `T` type parameter** - set it to the type of your `ValueKey` property, or `"object"` if there is no `ValueKey`.
364
+ 4. **Use `@bind-Value` / `@bind-Checked` for two-way data binding** in Blazor. Never call `GetValueAsync()` to read a field value - that method does not exist on `IgbInput`.
365
+ 5. **`IgbSlider` and `IgbRangeSlider` have separate modules** - register both if you use range sliders.