igniteui-angular 21.2.0-rc.2 → 21.2.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.
- package/fesm2022/igniteui-angular-directives.mjs +15 -8
- package/fesm2022/igniteui-angular-directives.mjs.map +1 -1
- package/package.json +2 -2
- package/skills/igniteui-angular-components/references/charts.md +5 -4
- package/skills/igniteui-angular-generate-from-image-design/SKILL.md +226 -0
- package/skills/igniteui-angular-generate-from-image-design/references/component-mapping.md +144 -0
- package/skills/igniteui-angular-generate-from-image-design/references/gotchas.md +204 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "igniteui-angular",
|
|
3
|
-
"version": "21.2.0
|
|
3
|
+
"version": "21.2.0",
|
|
4
4
|
"description": "Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps",
|
|
5
5
|
"author": "Infragistics",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
}
|
|
105
105
|
},
|
|
106
106
|
"igxDevDependencies": {
|
|
107
|
-
"@igniteui/angular-schematics": "~21.
|
|
107
|
+
"@igniteui/angular-schematics": "~21.2.1500"
|
|
108
108
|
},
|
|
109
109
|
"ng-update": {
|
|
110
110
|
"migrations": "./migrations/migration-collection.json",
|
|
@@ -57,7 +57,7 @@ chartComponent.itemsSource = dataArray;
|
|
|
57
57
|
|
|
58
58
|
### Chart Type Selection
|
|
59
59
|
- **Category Chart**: `chartType` property (Auto, Area, Column, Line, Point, etc.)
|
|
60
|
-
- **Financial Chart**: `chartType` property (
|
|
60
|
+
- **Financial Chart**: `chartType` property (Auto, Candle, Line, Bar, Column)
|
|
61
61
|
- **Data Chart**: Configure explicit series (IgxAreaSeriesComponent, IgxBarSeriesComponent, IgxBarSeries, etc.)
|
|
62
62
|
- **Pie Chart**: No chartType needed; inherent pie structure
|
|
63
63
|
|
|
@@ -75,6 +75,7 @@ chartComponent.itemsSource = dataArray;
|
|
|
75
75
|
|
|
76
76
|
**IgxFinancialChartComponent** (stock data):
|
|
77
77
|
- `dataSource` — Data array with date + OHLC columns
|
|
78
|
+
- `chartType` — Chart type (Auto, Candle, Line, Bar, Column)
|
|
78
79
|
- `openMemberPath`, `highMemberPath`, `lowMemberPath`, `closeMemberPath` — OHLC field names
|
|
79
80
|
|
|
80
81
|
**IgxPieChartComponent**:
|
|
@@ -184,9 +185,9 @@ chartComponent.itemsSource = dataArray;
|
|
|
184
185
|
- **Volume Pane**: Show trading volume (column, line, or area chart)
|
|
185
186
|
- **Indicator Pane**: Financial indicators (RSI, MACD, Bollinger Bands, etc.)
|
|
186
187
|
- **Zoom Pane**: Navigation slider to zoom/pan
|
|
187
|
-
- **Chart Types**: `
|
|
188
|
+
- **Chart Types**: `Auto` (default), `Candle`, `Line`, `Bar`, `Column`
|
|
188
189
|
- **API**:
|
|
189
|
-
- `chartType` — Price display type (Line,
|
|
190
|
+
- `chartType` — Price display type (Auto, Line, Candle, Bar, Column)
|
|
190
191
|
- `volumeType` — Volume display (None, Column, Line, Area)
|
|
191
192
|
- `indicatorTypes` — Array of indicators (0 or more)
|
|
192
193
|
- `zoomSliderType` — Zoom pane display (defaults to match chartType)
|
|
@@ -257,7 +258,7 @@ transitionInDuration: number; // Animation duration (milliseconds)
|
|
|
257
258
|
|
|
258
259
|
### IgxFinancialChartComponent (Stock/Candlestick/OHLC)
|
|
259
260
|
```typescript
|
|
260
|
-
chartType: FinancialChartType; // Line,
|
|
261
|
+
chartType: FinancialChartType; // Auto, Line, Candle, Bar, Column
|
|
261
262
|
itemsSource: any[];
|
|
262
263
|
openMemberPath: string;
|
|
263
264
|
highMemberPath: string;
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: igniteui-angular-generate-from-image-design
|
|
3
|
+
description: Implement Angular application views from design images using Ignite UI Angular components. Uses MCP servers (igniteui-cli, igniteui-theming, angular-cli) to discover components, generate themes, and follow best practices. Triggers when the user provides a design image (screenshot, mockup, wireframe) and wants it built as a working Angular view with igniteui-angular components. Also triggers when the user asks to "implement this design", "build this UI", "convert this mockup", or "create a page from this image" in an Ignite UI Angular project.
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Implementing Ignite UI Angular Views from Design Images
|
|
8
|
+
|
|
9
|
+
## MANDATORY AGENT PROTOCOL
|
|
10
|
+
|
|
11
|
+
Before writing any implementation code, you must complete these steps in order:
|
|
12
|
+
|
|
13
|
+
1. Analyze the image and identify all visible regions and UI patterns.
|
|
14
|
+
2. Read [references/component-mapping.md](references/component-mapping.md) and [references/gotchas.md](references/gotchas.md).
|
|
15
|
+
3. This skill is Angular-only. Check package layout or licensing only when imports, packages, or theming depend on it.
|
|
16
|
+
4. To apply a theme, use the theming workflow from this skill and the dedicated `igniteui-angular-theming` skill; use the `igniteui-theming` MCP tools instead of styling from memory.
|
|
17
|
+
5. Call `get_doc` for every chosen component family before using it.
|
|
18
|
+
6. Only then start coding.
|
|
19
|
+
|
|
20
|
+
## Workflow
|
|
21
|
+
|
|
22
|
+
1. **Analyze the design image** - Read the image, identify every UI section, component, layout structure.
|
|
23
|
+
2. **Confirm package layout if needed** - this skill is Angular-only; check package layout or licensing only when imports, packages, or theming depend on it
|
|
24
|
+
3. **Discover components** - Call `list_components` with targeted filters to find matching components for each UI pattern
|
|
25
|
+
4. **Look up component docs** - Call `get_doc` for every chosen component family before coding
|
|
26
|
+
5. **Generate theme** - (a) To generate a theme, first extract colors and create a color palette using `create_palette` or `create_custom_palette` depending on the scenario. Then extract elevations and call `create_elevations`. Then extract typography and call `create_typography`. Then call `create_theme` with the palette, elevations, and typography. (b) After a theme exists, prefer using design tokens or scoped semantic CSS variables over raw literals. (c) For every Ignite UI component, call `get_component_design_tokens`, map extracted image tokens to token roles, then call `create_component_theme` with the tokens differing from the global theme for the specific component.
|
|
27
|
+
6. **Implement** - Build the screenshot-first layout, data, and view components
|
|
28
|
+
7. **Refine** - Use the `set_size`, `set_spacing`, `set_roundness` tools to refine the view's visual fidelity against the image, then iterate on implementation and theming until the view matches the design closely
|
|
29
|
+
8. **Validate** - Build, test, run, compare against the image, and fix differences
|
|
30
|
+
|
|
31
|
+
## Step 1: Analyze the Design Image
|
|
32
|
+
|
|
33
|
+
Read the input image carefully. For each visual section, identify:
|
|
34
|
+
|
|
35
|
+
- **Layout structure**: grid rows/columns, sidebar, navbar, content area proportions, and estimated fixed widths or percentages for major regions.
|
|
36
|
+
> Note: Do not guess the exact CSS properties at this stage; just identify the high-level structure and relative proportions. Do not try to fit the view into exact breakpoints or pixel values. Try to generate a flexible layout that preserves the observed proportions and can adapt to different screen sizes. You will refine the exact CSS rules in Step 8 after building a first version of the view.
|
|
37
|
+
- **Component type**: chart, list, card, map, gauge, table, form, etc.
|
|
38
|
+
- **Color palette**: primary, secondary, surface/background, accent, text colors
|
|
39
|
+
- **Typography**: font sizes, weights, letter-spacing patterns
|
|
40
|
+
- **Surface styling**: borders, border-radius, shadows, elevation, divider treatments
|
|
41
|
+
- **Data patterns**: what mock data is needed (time series, lists, KPIs, geographic)
|
|
42
|
+
- **Spacing system**: translate observed padding and gaps into a small reusable scale derived from the design
|
|
43
|
+
|
|
44
|
+
Before writing code, create a decomposition table with one row per visible region containing:
|
|
45
|
+
|
|
46
|
+
| Region | Visual role | Candidate component | Custom CSS required | Data type |
|
|
47
|
+
|---|---|---|---|---|
|
|
48
|
+
| Example: sidebar item list | repeated rows with icon + label | `IgxListComponent` | yes - item height, icon size | domain-appropriate mock data |
|
|
49
|
+
| Example: top bar | brand + tabs + search | `IgxNavbarComponent` | yes - multi-zone flex layout | n/a |
|
|
50
|
+
| Example: side panel | always-visible navigation | `IgxNavigationDrawerComponent` | yes - width, item styling | n/a |
|
|
51
|
+
|
|
52
|
+
Start every region with the most appropriate Ignite UI component from [references/component-mapping.md](references/component-mapping.md). Only fall back to plain semantic HTML when the component DOM structure is fundamentally incompatible with the design after CSS overrides are considered. Document the reason for any plain-HTML fallback in a code comment.
|
|
53
|
+
|
|
54
|
+
Before writing code, produce a compact implementation brief that captures:
|
|
55
|
+
|
|
56
|
+
- chosen components per region
|
|
57
|
+
- fallback HTML regions
|
|
58
|
+
- theme strategy
|
|
59
|
+
- package needs
|
|
60
|
+
- major assumptions
|
|
61
|
+
|
|
62
|
+
After the table, translate the image into CSS Grid rows and columns first. Preserve desktop proportions before adding responsive behavior, then define explicit breakpoint stacking rules for smaller screens.
|
|
63
|
+
|
|
64
|
+
## Step 2-3: Use MCP Tools for Discovery
|
|
65
|
+
|
|
66
|
+
This skill is Angular-only. Check package layout or licensing only when imports, packages, or theming depend on it.
|
|
67
|
+
|
|
68
|
+
If you need to confirm package layout or licensing state, act on the result immediately:
|
|
69
|
+
|
|
70
|
+
- If the project uses Open Source package layout, use `igniteui-angular` for all core imports.
|
|
71
|
+
- If the project is unlicensed or uses Open Source package layout, do not mark any core UI components as blocked or premium-only during implementation.
|
|
72
|
+
- If the result indicates a licensed package layout, follow the licensed import paths shown in the component reference when needed.
|
|
73
|
+
|
|
74
|
+
Then call `list_components` with `framework: "angular"` and relevant filters to find components matching each UI pattern. Common filters:
|
|
75
|
+
|
|
76
|
+
- `chart`, `sparkline` - for data visualization
|
|
77
|
+
- `list view`, `card`, `avatar`, `badge` - for data display
|
|
78
|
+
- `nav`, `navbar`, `drawer` - for navigation
|
|
79
|
+
- `progress`, `gauge` - for metrics
|
|
80
|
+
- `map` - for geographic displays
|
|
81
|
+
- `grid` - for tabular data
|
|
82
|
+
|
|
83
|
+
Use narrow search terms to reduce noisy MCP results. Search for the specific UI pattern you need, such as `list view` instead of `list`.
|
|
84
|
+
|
|
85
|
+
For component-to-Ignite-UI mapping, see [references/component-mapping.md](references/component-mapping.md).
|
|
86
|
+
|
|
87
|
+
## Step 4: Look Up Component API
|
|
88
|
+
|
|
89
|
+
For every chosen component category, call `get_doc` with the doc name from `list_components` results (e.g., `name: "card"`, `framework: "angular"`). Use the doc `name` field from the MCP results, not the result title shown in the list. This is mandatory before coding and gives exact usage patterns, inputs, and template structure.
|
|
90
|
+
|
|
91
|
+
Call `search_docs` for feature-based questions (e.g., "how to configure [component] for [specific behavior or styling need]").
|
|
92
|
+
|
|
93
|
+
## Step 5: Generate Theme with MCP
|
|
94
|
+
|
|
95
|
+
Use this skill for the image-to-view theming workflow only. The dedicated [`igniteui-angular-theming`](../igniteui-angular-theming/SKILL.md) skill remains the source of truth for palette-token behavior, global theme rules, and broader theming-system guidance.
|
|
96
|
+
|
|
97
|
+
### 5a - Existing app guard (always run first)
|
|
98
|
+
|
|
99
|
+
Before generating any theme code, inspect the project's global stylesheet (typically `styles.scss`). Look for an active `@include theme(...)` or `@include palette(...)` call that already references a palette variable.
|
|
100
|
+
|
|
101
|
+
- **Existing theme found** -> the global palette is already set. Do **not** call `create_theme` or `create_palette` unless the user explicitly wants a global theme change. Instead:
|
|
102
|
+
1. Inspect the existing theme definition and any exposed palette tokens or semantic CSS variables
|
|
103
|
+
2. Reuse the current design system, variant, and palette tokens wherever they already match the design image
|
|
104
|
+
3. Skip to **5c** and apply only minimal scoped overrides for the new view's components
|
|
105
|
+
- **No theme found / blank/default palette** -> proceed with **5b** to generate a fresh global theme.
|
|
106
|
+
|
|
107
|
+
### 5b - Global theme generation (new projects only)
|
|
108
|
+
|
|
109
|
+
Follow this order - MCP guidance first, image extraction second:
|
|
110
|
+
|
|
111
|
+
1. **Read MCP guidance first** - call `theming://guidance/colors/rules` (or `get_theming_guidance`) before looking at the image. This tells you the available theme inputs and any luminance or variant constraints.
|
|
112
|
+
2. **Resolve the design system** - infer it from the existing workspace, explicit user request, or the closest visual match in the design. Do not assume one if a stronger signal exists.
|
|
113
|
+
3. **Extract from the image** - now that you know the available slots, extract values only for the inputs you actually need.
|
|
114
|
+
4. **Call `create_theme` or `create_palette`** with the extracted seed values:
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
create_theme({
|
|
118
|
+
primaryColor: "<color extracted from image for primary slot>",
|
|
119
|
+
secondaryColor: "<color extracted from image for secondary slot>",
|
|
120
|
+
surfaceColor: "<color extracted from image for surface/background slot>",
|
|
121
|
+
variant: "<resolved theme variant>",
|
|
122
|
+
platform: "angular",
|
|
123
|
+
licensed: <detected licensing state>,
|
|
124
|
+
fontFamily: "<font extracted from image or existing app>",
|
|
125
|
+
designSystem: "<resolved design system>"
|
|
126
|
+
})
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Read and act on any luminance warnings returned. If the design needs multiple surface depths that a single generated surface color does not cover, use `create_custom_palette` or define semantic CSS variables for the additional depths in `styles.scss`.
|
|
130
|
+
|
|
131
|
+
Use `create_palette` for straightforward designs with a small, coherent color system. Use `create_custom_palette` when the design has multiple distinct surface depths, several accent families, or when the generated palette cannot reliably match the screenshot.
|
|
132
|
+
|
|
133
|
+
### 5c - Per-component token discovery and mapping (always run)
|
|
134
|
+
|
|
135
|
+
> **Scope:** this step applies only to **core Ignite UI Angular components** (grid, list, navbar, drawer, card, inputs, chips, etc.). DV components - charts, maps, gauges, and sparklines - have no Sass design tokens. Skip this step for them and set their visual properties exclusively via component inputs as described in [references/gotchas.md](references/gotchas.md) and in Step 7.
|
|
136
|
+
|
|
137
|
+
For **every** core Ignite UI component chosen in Steps 3-4, follow this MCP-first loop - query MCP before touching the image:
|
|
138
|
+
|
|
139
|
+
1. **Discover (MCP first)** - call `get_component_design_tokens(component)` before looking at the image for that component. Read the full token list with names, types, and descriptions. Identify which tokens correspond to visible surfaces, text, borders, icons, and interaction states.
|
|
140
|
+
2. **Extract (image second)** - now that you know the exact token names, go to the image region for that component and read the exact token value for each relevant token slot. Do not guess; zoom into the component region.
|
|
141
|
+
3. **Generate** - call `create_component_theme(component, platform, licensed, tokens)` passing only the tokens whose resolved value differs from the global theme. This produces scoped SCSS with the minimal override set.
|
|
142
|
+
|
|
143
|
+
**Example - theming a grid:**
|
|
144
|
+
- `get_component_design_tokens("grid")` returns `header-background`, `content-background`, `row-hover-background` among many others
|
|
145
|
+
- Look at the grid region in the image -> extract the color intent for header, row background, and hover state
|
|
146
|
+
- Resolve each value to a palette token or local semantic CSS variable
|
|
147
|
+
- Call `create_component_theme("grid", ...)` with only `{ "header-background": "<resolved token>", "content-background": "<resolved token>", "row-hover-background": "<resolved token>" }`
|
|
148
|
+
|
|
149
|
+
Apply the generated theme blocks inside `::ng-deep` scoped to the component selector as shown in the `create_component_theme` output.
|
|
150
|
+
|
|
151
|
+
Do not run `create_component_theme` for regions built with custom HTML/CSS only.
|
|
152
|
+
|
|
153
|
+
### 5d - Theming sequence summary
|
|
154
|
+
|
|
155
|
+
Apply in this exact order:
|
|
156
|
+
|
|
157
|
+
1. Inspect `styles.scss` -> existing theme or blank?
|
|
158
|
+
2. Create or update a theme: `create_theme` (Step 5b)
|
|
159
|
+
3. For each Ignite UI component: `get_component_design_tokens` -> map image design tokens -> resolve values to design tokens or semantic CSS variables -> `create_component_theme` (Step 5c)
|
|
160
|
+
4. Use `get_color` after palette generation whenever a palette token can represent the final color intent
|
|
161
|
+
|
|
162
|
+
If you use typography mixins with a comma-separated font family list, wrap the font families in parentheses as described in [references/gotchas.md](references/gotchas.md).
|
|
163
|
+
|
|
164
|
+
## Step 6: Install DV Packages
|
|
165
|
+
|
|
166
|
+
Core UI components ship with `igniteui-angular` in Open Source projects and may use `@infragistics/igniteui-angular` in licensed setups. Charts, maps, gauges, and sparklines require additional DV packages. These packages are version-sensitive: determine the installed Ignite UI version, resolve the compatible published DV package version, and install only the package set required by the selected components. See [references/component-mapping.md](references/component-mapping.md) for package names and import patterns.
|
|
167
|
+
|
|
168
|
+
If DV packages are missing, identify the exact packages and versions required first, then ask for approval before installing packages or changing dependency manifests.
|
|
169
|
+
|
|
170
|
+
In standalone Angular apps, DV chart, map, and gauge packages are imported via modules in the component `imports` array, not as standalone components.
|
|
171
|
+
|
|
172
|
+
## Step 7: Implement
|
|
173
|
+
|
|
174
|
+
### Structure
|
|
175
|
+
|
|
176
|
+
- **Layout**: use Ignite UI layout and data-display components as the starting point for standard regions, then apply CSS Grid/Flexbox and component overrides to match the screenshot. Only substitute plain semantic HTML when an Ignite UI component remains structurally incompatible after a genuine attempt
|
|
177
|
+
- **Data**: use typed mock data that matches the design's density and domain; add models/services only when they help the implementation
|
|
178
|
+
- **View**: keep layout, spacing, typography, and surface styling in SCSS rather than inline attributes
|
|
179
|
+
- **Theming**: apply the resolved design system and theme variant from Step 5, and keep color usage aligned with palette tokens or local semantic CSS variables
|
|
180
|
+
|
|
181
|
+
### Implementation Checks
|
|
182
|
+
|
|
183
|
+
- Follow Angular and repo conventions from `AGENTS.md` and `.github/copilot-instructions.md`
|
|
184
|
+
- Use [references/component-mapping.md](references/component-mapping.md) for component-choice and semantic-fallback rules
|
|
185
|
+
- Use [references/gotchas.md](references/gotchas.md) for components, theming, and API edge cases instead of re-encoding those rules inline
|
|
186
|
+
- Favor Ignite UI components over custom HTML when both approaches can reach similar visual fidelity
|
|
187
|
+
- Import standalone pipes explicitly when their template syntax requires them
|
|
188
|
+
- Preserve spacing, hierarchy, and data density before adding extra interactivity
|
|
189
|
+
- Avoid generic placeholders when the image shows domain-specific content
|
|
190
|
+
- Document brief assumptions when the image is ambiguous instead of silently guessing
|
|
191
|
+
|
|
192
|
+
## Step 8: Refine
|
|
193
|
+
|
|
194
|
+
After the first implementation pass, use the `set_size`, `set_spacing`, and `set_roundness` tools to adjust the view's visual properties and close the gap with the image. Focus on the most visually distinctive elements first (e.g., panel proportions, chart shape, button prominence) before tuning smaller details (e.g., row heights, spacing between regions).
|
|
195
|
+
|
|
196
|
+
## Step 9: Validate
|
|
197
|
+
|
|
198
|
+
Use this validation loop explicitly:
|
|
199
|
+
|
|
200
|
+
1. Build
|
|
201
|
+
2. Test
|
|
202
|
+
3. Run the app
|
|
203
|
+
4. Visually compare against the image
|
|
204
|
+
5. Adjust and repeat
|
|
205
|
+
|
|
206
|
+
In terminal-only environments, the user performs the visual comparison and provides feedback on any mismatches. Only perform the visual check directly when the environment has browser and screenshot capabilities available to the agent.
|
|
207
|
+
|
|
208
|
+
Use this checklist during the first visual comparison:
|
|
209
|
+
|
|
210
|
+
- panel proportions
|
|
211
|
+
- control density
|
|
212
|
+
- chart shape
|
|
213
|
+
- legend placement
|
|
214
|
+
- button prominence
|
|
215
|
+
- row heights
|
|
216
|
+
- spacing between regions
|
|
217
|
+
|
|
218
|
+
Fix TypeScript or template errors immediately during the build/test steps. Use the build output, component docs, [references/gotchas.md](references/gotchas.md), and the user's visual feedback to close the remaining gaps. Typical adjustments include:
|
|
219
|
+
|
|
220
|
+
- revisiting chart data density, smoothing, or marker visibility
|
|
221
|
+
- adjusting layout ratios, region spacing, or row heights
|
|
222
|
+
- correcting navigation mode, panel chrome, or component choice
|
|
223
|
+
- tuning map/filter treatment and dark-surface hierarchy
|
|
224
|
+
- re-examining the original design for overlooked sections or missing imports
|
|
225
|
+
|
|
226
|
+
After the build succeeds with zero errors, refine layout proportions, color values, missing sections, and typography until the view matches closely.
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Ignite UI Angular Component Mapping Reference
|
|
2
|
+
|
|
3
|
+
## Table of Contents
|
|
4
|
+
- [Dashboard & Layout Components](#dashboard--layout-components)
|
|
5
|
+
- [Chart Components](#chart-components)
|
|
6
|
+
- [Data Display Components](#data-display-components)
|
|
7
|
+
- [Form & Input Components](#form--input-components)
|
|
8
|
+
- [Calendar & Scheduling Components](#calendar--scheduling-components)
|
|
9
|
+
- [Map Components](#map-components)
|
|
10
|
+
- [Gauge Components](#gauge-components)
|
|
11
|
+
- [Package Requirements](#package-requirements)
|
|
12
|
+
- [Import Patterns](#import-patterns)
|
|
13
|
+
|
|
14
|
+
## Dashboard & Layout Components
|
|
15
|
+
|
|
16
|
+
| UI Pattern | Ignite UI Component | Key Properties |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| Top navigation bar | `IgxNavbarComponent` | `igxNavbarAction`, `igxNavbarTitle` |
|
|
19
|
+
| Side navigation | `IgxNavigationDrawerComponent` | `[pin]`, `[pinThreshold]`, `igxDrawer` template, `igxDrawerMini` template |
|
|
20
|
+
| Content cards/panels | `IgxCardComponent` | `igxCardHeader`, `igxCardContent`, `igxCardActions` |
|
|
21
|
+
| Tabbed content | `IgxBottomNavComponent` or `IgxTabsComponent` | Panel-based or router-based |
|
|
22
|
+
| Accordion sections | `IgxAccordionComponent` | `IgxExpansionPanelComponent` children |
|
|
23
|
+
| Split layouts | `IgxSplitterComponent` | Horizontal/vertical panes |
|
|
24
|
+
| Tile dashboard | `IgxTileManagerComponent` | Drag/resize tiles (Premium) |
|
|
25
|
+
|
|
26
|
+
Decision rule:
|
|
27
|
+
|
|
28
|
+
- Use `IgxNavbarComponent` for a top horizontal bar when its slot structure and behavior match the screenshot. Use custom projected content and CSS flex overrides to achieve multi-zone layouts inside it. Use a plain `<header>` when that is a closer structural fit.
|
|
29
|
+
- Use `IgxNavigationDrawerComponent` for a sidebar or side-navigation panel when drawer structure and behavior match the screenshot. Configure pinning and mini mode according to whether the design shows fixed, collapsible, or icon-only navigation. Use a plain `<aside>` when a static custom sidebar matches the screenshot better.
|
|
30
|
+
- Use `IgxTabsComponent` for a horizontal tab strip when the screenshot clearly shows tabbed state switching.
|
|
31
|
+
|
|
32
|
+
Component decision matrix (by visual pattern, domain-neutral):
|
|
33
|
+
|
|
34
|
+
| Visual Pattern | Recommended Component | Notes |
|
|
35
|
+
|---|---|---|
|
|
36
|
+
| Repeated rows with icon/text/action | `IgxListComponent` + `IgxListItemComponent` | Use when the row anatomy and interaction model match; use `igxListLine`, `igxListThumbnail`, `igxListAction` slots. Use native `<ul>/<li>` or custom containers when that is a closer visual fit |
|
|
37
|
+
| Spreadsheet-like editable or sortable table | `IgxGridComponent` | Use only when content is truly tabular |
|
|
38
|
+
| Hierarchical or tree-structured table | `IgxTreeGridComponent` | Use when rows have parent-child relationships |
|
|
39
|
+
| Content blocks / summary cards | `IgxCardComponent` | Use when card chrome helps match the panel shape and structure. Use `igxCardHeader`, `igxCardContent`, `igxCardActions` slots with custom projected content. Use plain `<div>` containers for flat or highly custom tiles |
|
|
40
|
+
| Any text input field | `IgxInputGroupComponent` + `IgxInputDirective` | Use when the input anatomy matches the screenshot, including search fields and inline editors. Apply CSS to match the screenshot's border/radius style |
|
|
41
|
+
| Dropdown or select | `IgxSelectComponent` | Use when the screenshot clearly shows select/dropdown behavior |
|
|
42
|
+
| Form fields with labels and inputs | `IgxInputGroupComponent`, `IgxSelectComponent`, `IgxComboComponent` | Cover text, select, combo, and date inputs |
|
|
43
|
+
| Multi-step form / wizard | `IgxStepperComponent` | Use when a sequence of steps is visually present |
|
|
44
|
+
| Filter chips / tag inputs | `IgxChipComponent` | Use when chip anatomy matches status badges, filter tags, or removable labels in the screenshot |
|
|
45
|
+
| Calendar or date picker as a primary view element | `IgxCalendarComponent`, `IgxDatePickerComponent` | Use when scheduling or date selection is the core UI |
|
|
46
|
+
| Top icon/action bar | `IgxNavbarComponent` with projected icon buttons | Use when a navbar structure matches the screenshot; use plain icon buttons or custom containers when that is a closer fit |
|
|
47
|
+
|
|
48
|
+
## Chart Components
|
|
49
|
+
|
|
50
|
+
| UI Pattern | Ignite UI Component | Key Properties |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| Area chart | `IgxCategoryChartComponent` | `chartType`, `markerTypes`, `areaFillOpacity` |
|
|
53
|
+
| Line chart | `IgxCategoryChartComponent` | `chartType`, `markerTypes` |
|
|
54
|
+
| Column/bar chart | `IgxCategoryChartComponent` | `chartType`, `markerTypes` |
|
|
55
|
+
| Sparkline (mini chart) | `IgxSparklineComponent` | `displayType`, `valueMemberPath` |
|
|
56
|
+
| Pie/donut chart | `IgxPieChartComponent` / `IgxDoughnutChartComponent` | `valueMemberPath`, `labelMemberPath` |
|
|
57
|
+
| Financial chart | `IgxFinancialChartComponent` | OHLC/candlestick data |
|
|
58
|
+
| Complex multi-series | `IgxDataChartComponent` | Multiple series + axes |
|
|
59
|
+
|
|
60
|
+
Decision rule:
|
|
61
|
+
|
|
62
|
+
- Financial or OHLC screenshot: prefer `IgxFinancialChartComponent`
|
|
63
|
+
- Simple or moderate trend panel: prefer `IgxCategoryChartComponent`; move to `IgxDataChartComponent` when you need lower-level per-series control
|
|
64
|
+
- Highly custom sparkline or microchart: use `IgxSparklineComponent` or a custom fallback if the built-in anatomy is not a close visual match
|
|
65
|
+
|
|
66
|
+
## Data Display Components
|
|
67
|
+
|
|
68
|
+
| UI Pattern | Ignite UI Component | Key Properties |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| Item list | `IgxListComponent` + `IgxListItemComponent` | `igxListLine`, `igxListThumbnail`, `igxListAction` |
|
|
71
|
+
| User avatar | `IgxAvatarComponent` | `[initials]`, `shape`, `size` |
|
|
72
|
+
| Status badge | `IgxBadgeComponent` | `[value]`, `type` |
|
|
73
|
+
| Icons | `IgxIconComponent` | icon name, family, styling |
|
|
74
|
+
| Progress bar | `IgxLinearProgressBarComponent` | `[value]`, `[max]` |
|
|
75
|
+
| Circular progress | `IgxCircularProgressBarComponent` | `[value]`, `[max]` |
|
|
76
|
+
| Flat data grid | `IgxGridComponent` | Full-featured data grid |
|
|
77
|
+
| Hierarchical/tree data grid | `IgxTreeGridComponent` | `primaryKey`, `foreignKey`, `childDataKey` |
|
|
78
|
+
| Filter/tag chips | `IgxChipComponent` | `[removable]`, `[selectable]`, `chipClick` |
|
|
79
|
+
|
|
80
|
+
Decision rule:
|
|
81
|
+
|
|
82
|
+
- Use `IgxListComponent` for repeated-row content lists when its row structure and interaction model match the screenshot. The component adds accessible keyboard navigation, item structure, and theming when those benefits fit the design. Use native `<ul>/<li>` or custom containers when they are a closer visual fit.
|
|
83
|
+
- Choose `IgxGridComponent` only when the image is truly tabular (flat rows and columns, spreadsheet-style).
|
|
84
|
+
- Choose `IgxTreeGridComponent` when rows have parent-child or hierarchical structure.
|
|
85
|
+
- Use `IgxChipComponent` when chip anatomy matches the screenshot's status badges, tags, or label pills. Use custom badge or pill markup when a simpler or more exact visual match is needed.
|
|
86
|
+
|
|
87
|
+
## Form & Input Components
|
|
88
|
+
|
|
89
|
+
| UI Pattern | Ignite UI Component | Key Properties |
|
|
90
|
+
|---|---|---|
|
|
91
|
+
| Text input | `IgxInputGroupComponent` + `IgxInputDirective` | `igxInput`, `igxLabel`, `igxHint` |
|
|
92
|
+
| Dropdown select | `IgxSelectComponent` | `<igx-select-item>` children |
|
|
93
|
+
| Searchable multi-select | `IgxComboComponent` | `[data]`, `displayKey`, `valueKey` |
|
|
94
|
+
| Date picker | `IgxDatePickerComponent` | `[value]`, `(valueChange)` |
|
|
95
|
+
| Time picker | `IgxTimePickerComponent` | `[value]`, `(valueChange)` |
|
|
96
|
+
| Toggle switch | `IgxSwitchComponent` | value binding, change events |
|
|
97
|
+
| Checkbox | `IgxCheckboxComponent` | value binding, `[indeterminate]` |
|
|
98
|
+
| Radio button group | `IgxRadioGroupDirective` + `IgxRadioComponent` | `name` |
|
|
99
|
+
| Slider | `IgxSliderComponent` | `[minValue]`, `[maxValue]`, `[type]` |
|
|
100
|
+
| Multi-step wizard | `IgxStepperComponent` + `IgxStepComponent` | `orientation`, `[linear]` |
|
|
101
|
+
| Chip filter bar | `IgxChipsAreaComponent` + `IgxChipComponent` | `(reorder)`, `(remove)` |
|
|
102
|
+
|
|
103
|
+
## Calendar & Scheduling Components
|
|
104
|
+
|
|
105
|
+
| UI Pattern | Ignite UI Component | Key Properties |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| Calendar view | `IgxCalendarComponent` | `selection`, `[value]`, `(selected)` |
|
|
108
|
+
| Date range picker | `IgxDateRangePickerComponent` | `[value]`, `(rangeSelected)` |
|
|
109
|
+
| Month/year picker | `IgxCalendarComponent` | `view="decade"` or `view="year"` |
|
|
110
|
+
|
|
111
|
+
## Map Components
|
|
112
|
+
|
|
113
|
+
| UI Pattern | Ignite UI Component | Key Properties |
|
|
114
|
+
|---|---|---|
|
|
115
|
+
| World map | `IgxGeographicMapComponent` | `[zoomable]`, `backgroundContent` |
|
|
116
|
+
| Map markers | `IgxGeographicSymbolSeriesComponent` | `latitudeMemberPath`, `longitudeMemberPath`, `markerType`, `markerBrush` |
|
|
117
|
+
| Bubble overlay | `IgxGeographicProportionalSymbolSeriesComponent` | Sized markers |
|
|
118
|
+
| Shape regions | `IgxGeographicShapeSeriesComponent` | Polygon rendering |
|
|
119
|
+
|
|
120
|
+
## Gauge Components
|
|
121
|
+
|
|
122
|
+
| UI Pattern | Ignite UI Component | Key Properties |
|
|
123
|
+
|---|---|---|
|
|
124
|
+
| Linear gauge | `IgxLinearGaugeComponent` | `[value]`, `[minimumValue]`, `[maximumValue]`, `[needleBrush]` |
|
|
125
|
+
| Radial gauge | `IgxRadialGaugeComponent` | `[value]`, `[minimumValue]`, `[maximumValue]` |
|
|
126
|
+
| Bullet graph | `IgxBulletGraphComponent` | Performance vs target |
|
|
127
|
+
|
|
128
|
+
## Package Requirements
|
|
129
|
+
|
|
130
|
+
The main `igniteui-angular` package contains core UI components in Open Source projects (list, avatar, navbar, drawer, card, badge, progress, icon, etc.). Licensed projects may use `@infragistics/igniteui-angular` instead.
|
|
131
|
+
|
|
132
|
+
Data visualization components may require **additional packages** beyond the main Angular package:
|
|
133
|
+
|
|
134
|
+
| Capability | Additional packages |
|
|
135
|
+
|---|---|
|
|
136
|
+
| Charts / sparklines | `igniteui-angular-core`, `igniteui-angular-charts` |
|
|
137
|
+
| Maps | `igniteui-angular-core`, `igniteui-angular-maps` |
|
|
138
|
+
| Gauges / bullet graphs | `igniteui-angular-core`, `igniteui-angular-gauges` |
|
|
139
|
+
|
|
140
|
+
Install only the packages required by the components you actually selected. These are bare-name packages (not `@infragistics/` scoped). Resolve the exact package version against the installed Ignite UI major and the actual published DV package versions before installing.
|
|
141
|
+
|
|
142
|
+
## Import Patterns
|
|
143
|
+
|
|
144
|
+
Treat this file as a component selection reference, not as authoritative import guidance for a specific repo. Confirm exact imports from `detect_platform`, the current workspace, Angular best practices, and `get_doc` results.
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# Ignite UI Angular Gotchas & Pitfalls
|
|
2
|
+
|
|
3
|
+
## Table of Contents
|
|
4
|
+
- [Sass Conflicts](#sass-conflicts)
|
|
5
|
+
- [Chart Properties](#chart-properties)
|
|
6
|
+
- [Component Properties](#component-properties)
|
|
7
|
+
- [Theming Pitfalls](#theming-pitfalls)
|
|
8
|
+
- [Map Component](#map-component)
|
|
9
|
+
- [Dark Theme Specifics](#dark-theme-specifics)
|
|
10
|
+
|
|
11
|
+
## Sass Conflicts
|
|
12
|
+
|
|
13
|
+
### `contrast()` function collision
|
|
14
|
+
The CSS `contrast()` filter function can collide with `igniteui-theming`'s `contrast()` Sass function. When you need the native CSS function, call it explicitly via `sass:meta`:
|
|
15
|
+
```scss
|
|
16
|
+
@use "sass:meta";
|
|
17
|
+
|
|
18
|
+
.uses-css-contrast {
|
|
19
|
+
filter: meta.call(meta.get-function("contrast", $css: true), <contrast-value>);
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
Prefer this approach over string escaping when a native CSS function name collides with a Sass function.
|
|
23
|
+
|
|
24
|
+
### Font family in typography mixin
|
|
25
|
+
Comma-separated font families are parsed as multiple Sass arguments. Wrap in parentheses:
|
|
26
|
+
```scss
|
|
27
|
+
// BAD
|
|
28
|
+
@include typography($font-family: "Primary Font", "Fallback Font", sans-serif);
|
|
29
|
+
|
|
30
|
+
// GOOD
|
|
31
|
+
@include typography($font-family: ("Primary Font", "Fallback Font", sans-serif));
|
|
32
|
+
```
|
|
33
|
+
Replace `"Primary Font"` and `"Fallback Font"` with the font families extracted from the design image.
|
|
34
|
+
|
|
35
|
+
## Chart Properties
|
|
36
|
+
|
|
37
|
+
### Markers shown by default
|
|
38
|
+
Category charts show markers at every data point by default. If the screenshot does not show markers, set `markerTypes` to the matching no-marker option documented for the component:
|
|
39
|
+
```html
|
|
40
|
+
[markerTypes]="<resolvedMarkerTypes>"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
`markerTypes` expects values such as `"Circle"` or `"None"`, or an `IgxMarkerTypeCollection`. Do not pass an array of lowercase strings.
|
|
44
|
+
|
|
45
|
+
### `plotAreaBackground` does NOT exist on `igx-category-chart`
|
|
46
|
+
Use CSS to style the chart container background instead.
|
|
47
|
+
|
|
48
|
+
### `areaFillOpacity` exists on `IgxCategoryChartComponent` (via domain chart parent)
|
|
49
|
+
It does NOT exist on `IgxSparklineComponent`.
|
|
50
|
+
|
|
51
|
+
### `includedProperties` must be a bound array
|
|
52
|
+
Use property binding, not a plain string attribute:
|
|
53
|
+
```html
|
|
54
|
+
<igx-category-chart [includedProperties]="['fieldOne', 'fieldTwo', 'fieldThree']"></igx-category-chart>
|
|
55
|
+
```
|
|
56
|
+
Replace `'fieldOne'`, `'fieldTwo'`, etc. with the actual data property names from your mock data.
|
|
57
|
+
|
|
58
|
+
### Chart callback inputs must use Angular property binding
|
|
59
|
+
Function-valued chart inputs must be bound, not passed as plain attributes:
|
|
60
|
+
```html
|
|
61
|
+
<igx-category-chart [xAxisFormatLabel]="<labelFormatter>"></igx-category-chart>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Smooth area charts
|
|
65
|
+
For smooth-looking area charts where the data should appear continuous rather than spiky:
|
|
66
|
+
- Increase data density until the line or area reads as continuous at the rendered size
|
|
67
|
+
- Apply smoothing only when the source shape in the design looks smoothed rather than point-to-point
|
|
68
|
+
- Hide markers unless the screenshot clearly shows visible data points
|
|
69
|
+
- Tune fill opacity and label density to match the screenshot instead of relying on a fixed default
|
|
70
|
+
|
|
71
|
+
### Charts inside CSS Grid can collapse
|
|
72
|
+
In a flexible CSS Grid track, set `min-height: 0` on the grid cell and `height: 100%` on the chart element:
|
|
73
|
+
```scss
|
|
74
|
+
.chart-panel {
|
|
75
|
+
min-height: 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
igx-category-chart {
|
|
79
|
+
display: block;
|
|
80
|
+
height: 100%;
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Component Properties
|
|
85
|
+
|
|
86
|
+
### `roundShape` does NOT exist on `IgxAvatarComponent`
|
|
87
|
+
Use the supported `shape` input alone. Do not add `[roundShape]="true"`.
|
|
88
|
+
|
|
89
|
+
### `IgxListLineDirective` is the directive for `igxListLine`
|
|
90
|
+
It must be imported for list item text content. Confirm the exact package variant and entry point from the workspace and component docs before adding the import.
|
|
91
|
+
|
|
92
|
+
### Avatar background color via CSS variable
|
|
93
|
+
```html
|
|
94
|
+
<igx-avatar [style.--ig-avatar-background]="color"></igx-avatar>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Theming Pitfalls
|
|
98
|
+
|
|
99
|
+
### DV components do NOT inherit Sass theme colors
|
|
100
|
+
Charts, maps, gauges, and sparklines ignore the global Sass theme. Set their visual properties explicitly via component inputs. After a palette exists, prefer palette tokens or local semantic CSS variables over leaving raw color literals in the final template:
|
|
101
|
+
```html
|
|
102
|
+
[brushes]="'<resolved-series-brush>'"
|
|
103
|
+
[outlines]="'<resolved-series-outline>'"
|
|
104
|
+
[xAxisLabelTextColor]="'<resolved-axis-label-color>'"
|
|
105
|
+
[yAxisMajorStroke]="'<resolved-grid-line-color>'"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Component theme functions
|
|
109
|
+
For core UI component theming, prefer `create_component_theme` and apply the returned theme block as generated by the MCP server.
|
|
110
|
+
|
|
111
|
+
### Nav drawer width
|
|
112
|
+
Override the drawer aside width via its internal class using the width measured from the design image:
|
|
113
|
+
```scss
|
|
114
|
+
igx-nav-drawer {
|
|
115
|
+
--ig-nav-drawer-size: <extracted-sidebar-width>; // <- Use this to overwrite the width of the full navdrawer
|
|
116
|
+
--ig-nav-drawer-size--mini: <extracted-mini-drawer-width>; // <- Use this to overwrite the width of the mini navdrawer
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Dark theme overrides for `IgxGridComponent`
|
|
121
|
+
Grid internals often need explicit dark-theme overrides. Use palette tokens or local semantic CSS variables that map to the design:
|
|
122
|
+
```scss
|
|
123
|
+
:host ::ng-deep igx-grid {
|
|
124
|
+
.igx-grid__thead,
|
|
125
|
+
.igx-grid__tr {
|
|
126
|
+
background: <resolved-surface-token>;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.igx-grid__th,
|
|
130
|
+
.igx-grid__td {
|
|
131
|
+
color: <resolved-text-token>;
|
|
132
|
+
border-color: <resolved-border-token>;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.igx-grid__tbody {
|
|
136
|
+
background: <resolved-surface-token>;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Read luminance warnings from theme generation
|
|
142
|
+
If `create_theme` returns a luminance warning for a generated surface, do not ignore it. If the design needs multiple surface depths, use `create_custom_palette` or define semantic CSS variables such as `--surface-1` and `--surface-2` in `styles.scss` instead of relying on a single generated surface color.
|
|
143
|
+
|
|
144
|
+
## Map Component
|
|
145
|
+
|
|
146
|
+
### Adding markers programmatically
|
|
147
|
+
The geographic map often requires programmatic series setup once the map instance is available:
|
|
148
|
+
```typescript
|
|
149
|
+
const symbolSeries = new IgxGeographicSymbolSeriesComponent();
|
|
150
|
+
symbolSeries.dataSource = locations;
|
|
151
|
+
symbolSeries.latitudeMemberPath = '<latitude-field>';
|
|
152
|
+
symbolSeries.longitudeMemberPath = '<longitude-field>';
|
|
153
|
+
symbolSeries.markerType = <resolvedMarkerType>;
|
|
154
|
+
symbolSeries.markerBrush = '<resolved-accent-color>';
|
|
155
|
+
symbolSeries.markerOutline = '<resolved-accent-color>';
|
|
156
|
+
map.series.add(symbolSeries);
|
|
157
|
+
// Set zoom bounds to match the geographic region visible in the design image
|
|
158
|
+
map.zoomToGeographic({ left: <min-longitude>, top: <top-latitude>, width: <longitude-span>, height: <latitude-span> });
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Dark map styling
|
|
162
|
+
OpenStreetMap tiles are light by default. For dark themes, apply a CSS filter to the container. Adjust the values to match the map tone in the design image:
|
|
163
|
+
```scss
|
|
164
|
+
.map-container {
|
|
165
|
+
/* tune grayscale (0-1) and brightness (0-1) to match the design */
|
|
166
|
+
filter: grayscale(<0-1>) brightness(<0-1>);
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Dark Theme Specifics
|
|
171
|
+
|
|
172
|
+
### Use the resolved dark schema for dark themes
|
|
173
|
+
```scss
|
|
174
|
+
@include theme(
|
|
175
|
+
$palette: $resolved-palette,
|
|
176
|
+
$schema: <resolved-dark-schema>
|
|
177
|
+
);
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### CSS custom properties for dark panels
|
|
181
|
+
When the design uses multiple dark surface depths (panels, sidebars, cards on a dark background), define reusable semantic tokens using palette references or values derived from the design intent:
|
|
182
|
+
|
|
183
|
+
```scss
|
|
184
|
+
:root {
|
|
185
|
+
--surface-primary: <resolved-surface-token>;
|
|
186
|
+
--surface-secondary: <resolved-surface-token>;
|
|
187
|
+
--accent-strong: <resolved-accent-token>;
|
|
188
|
+
--text-primary: <resolved-text-token>;
|
|
189
|
+
--text-secondary: <resolved-text-token>;
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
If `create_theme` returns a single surface color that doesn't cover all depth levels visible in the design, define additional surface tokens (`--surface-1`, `--surface-2`, etc.) for each distinct depth.
|
|
194
|
+
|
|
195
|
+
### Standalone pipes must be imported explicitly
|
|
196
|
+
When using Angular pipes in a standalone component template, add the pipe classes to the component `imports` array:
|
|
197
|
+
```typescript
|
|
198
|
+
import { CurrencyPipe, DatePipe, DecimalPipe } from '@angular/common';
|
|
199
|
+
|
|
200
|
+
@Component({
|
|
201
|
+
imports: [DecimalPipe, DatePipe, CurrencyPipe]
|
|
202
|
+
})
|
|
203
|
+
export class <ViewComponent> {}
|
|
204
|
+
```
|