@igniteui/angular-templates 21.1.14100-alpha.2 → 21.1.14100-alpha.4
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/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-components/SKILL.md +68 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-components/references/charts.md +457 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-components/references/data-display.md +360 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-components/references/directives.md +272 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-components/references/feedback.md +149 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-components/references/form-controls.md +313 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-components/references/layout-manager.md +420 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-components/references/layout.md +225 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-components/references/setup.md +166 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-grids/SKILL.md +110 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-grids/references/data-operations.md +445 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-grids/references/editing.md +491 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-grids/references/features.md +234 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-grids/references/paging-remote.md +397 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-grids/references/state.md +314 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-grids/references/structure.md +299 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-grids/references/types.md +507 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-theming/SKILL.md +439 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-theming/references/common-patterns.md +45 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-theming/references/contributing.md +471 -0
- package/igx-ts/projects/_base/files/__dot__claude/skills/igniteui-angular-theming/references/mcp-setup.md +77 -0
- package/igx-ts/projects/_base/files/__dot__vscode/mcp.json +2 -2
- package/package.json +2 -2
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
# Layout Manager & Dock Manager
|
|
2
|
+
|
|
3
|
+
> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.**
|
|
4
|
+
> For app setup, providers, and import patterns — see [`setup.md`](./setup.md).
|
|
5
|
+
|
|
6
|
+
## Contents
|
|
7
|
+
|
|
8
|
+
- [Layout Manager Directives](#layout-manager-directives)
|
|
9
|
+
- [Dock Manager](#dock-manager)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Layout Manager Directives
|
|
14
|
+
|
|
15
|
+
> **Docs:** [Layout Manager](https://www.infragistics.com/products/ignite-ui-angular/angular/components/layout)
|
|
16
|
+
|
|
17
|
+
The Layout Manager is a pair of Angular directives (`igxLayout` / `igxFlex`) that wrap CSS Flexbox. Apply `igxLayout` to any container to control its children's flow; apply `igxFlex` to individual children to control their flex properties.
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
import { IgxLayoutDirective, IgxFlexDirective } from 'igniteui-angular/directives';
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<!-- Basic row layout -->
|
|
25
|
+
<div igxLayout igxLayoutDir="row" igxLayoutJustify="space-between">
|
|
26
|
+
<div igxFlex>Item 1</div>
|
|
27
|
+
<div igxFlex>Item 2</div>
|
|
28
|
+
<div igxFlex>Item 3</div>
|
|
29
|
+
</div>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Common Layout Patterns
|
|
33
|
+
|
|
34
|
+
#### App Shell (Sidebar + Content)
|
|
35
|
+
|
|
36
|
+
```html
|
|
37
|
+
<div igxLayout igxLayoutDir="row" style="height: 100vh;">
|
|
38
|
+
|
|
39
|
+
<!-- Sidebar column -->
|
|
40
|
+
<div igxFlex igxFlexGrow="0" igxFlexShrink="0" igxFlexBasis="240px"
|
|
41
|
+
igxLayout igxLayoutDir="column" class="sidebar">
|
|
42
|
+
<div igxFlex>Nav item 1</div>
|
|
43
|
+
<div igxFlex>Nav item 2</div>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<!-- Main content column -->
|
|
47
|
+
<div igxFlex igxLayout igxLayoutDir="column" class="main">
|
|
48
|
+
<div igxFlex igxFlexGrow="0" class="header">Header</div>
|
|
49
|
+
<div igxFlex class="body">
|
|
50
|
+
<!-- Nested row -->
|
|
51
|
+
<div igxLayout igxLayoutDir="row">
|
|
52
|
+
<div igxFlex>Col 1</div>
|
|
53
|
+
<div igxFlex>Col 2</div>
|
|
54
|
+
<div igxFlex>Col 3</div>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
<div igxFlex igxFlexGrow="0" class="footer">Footer</div>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
</div>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
#### Centered Content
|
|
64
|
+
|
|
65
|
+
```html
|
|
66
|
+
<div igxLayout igxLayoutDir="row" igxLayoutJustify="center" igxLayoutItemAlign="center"
|
|
67
|
+
style="height: 100vh;">
|
|
68
|
+
<div igxFlex igxFlexGrow="0">Centered content</div>
|
|
69
|
+
</div>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
#### Wrapping Tiles
|
|
73
|
+
|
|
74
|
+
```html
|
|
75
|
+
<div igxLayout igxLayoutDir="row" igxLayoutWrap="wrap" igxLayoutJustify="flex-start">
|
|
76
|
+
@for (item of items; track item.id) {
|
|
77
|
+
<div igxFlex igxFlexBasis="200px" igxFlexGrow="0" class="tile">
|
|
78
|
+
{{ item.title }}
|
|
79
|
+
</div>
|
|
80
|
+
}
|
|
81
|
+
</div>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### `igxLayout` Directive Inputs
|
|
85
|
+
|
|
86
|
+
| Input | Values | Default | Description |
|
|
87
|
+
|---|---|---|---|
|
|
88
|
+
| `igxLayoutDir` | `'row'` \| `'column'` | `'row'` | Flex direction |
|
|
89
|
+
| `igxLayoutReverse` | `true` \| `false` | `false` | Reverse flow order |
|
|
90
|
+
| `igxLayoutWrap` | `'nowrap'` \| `'wrap'` \| `'wrap-reverse'` | `'nowrap'` | Child wrapping |
|
|
91
|
+
| `igxLayoutJustify` | `'flex-start'` \| `'center'` \| `'flex-end'` \| `'space-between'` \| `'space-around'` | `'flex-start'` | Main axis alignment |
|
|
92
|
+
| `igxLayoutItemAlign` | `'flex-start'` \| `'center'` \| `'flex-end'` \| `'stretch'` \| `'baseline'` | `'stretch'` | Cross axis alignment |
|
|
93
|
+
|
|
94
|
+
### `igxFlex` Directive Inputs
|
|
95
|
+
|
|
96
|
+
| Input | Type | Default | Description |
|
|
97
|
+
|---|---|---|---|
|
|
98
|
+
| `igxFlexGrow` | `number` | `1` | How much the element grows to fill space |
|
|
99
|
+
| `igxFlexShrink` | `number` | `1` | How much the element shrinks when space is limited |
|
|
100
|
+
| `igxFlexBasis` | `string` | `'auto'` | Initial main-axis size (e.g., `'200px'`, `'30%'`) |
|
|
101
|
+
| `igxFlexOrder` | `number` | `0` | Visual order among siblings |
|
|
102
|
+
|
|
103
|
+
### Key Rules for Layout Manager
|
|
104
|
+
|
|
105
|
+
- `igxLayout` affects its **immediate children only** — nest multiple `igxLayout` containers for deeper control
|
|
106
|
+
- Combine `igxLayoutDir="column"` on the outer container with `igxFlex` on children to create page shells
|
|
107
|
+
- `igxFlexGrow="0"` on headers/footers/sidebars prevents them from stretching; leave it at `1` (default) for the main content area
|
|
108
|
+
- This is a thin CSS Flexbox wrapper — the container element gets `display: flex` applied
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Dock Manager
|
|
113
|
+
|
|
114
|
+
> **Docs:** [Dock Manager (Angular)](https://www.infragistics.com/products/ignite-ui-angular/angular/components/dock-manager)
|
|
115
|
+
> **Full API Docs:** [Dock Manager Web Component](https://www.infragistics.com/products/ignite-ui-web-components/web-components/components/dock-manager.html)
|
|
116
|
+
|
|
117
|
+
The Dock Manager is a **separate package** (`igniteui-dockmanager`) and is implemented as a **Web Component** (`<igc-dockmanager>`). It provides IDE-style dockable, resizable, floating, and tabbed pane layouts. It is a **premium** (licensed) component.
|
|
118
|
+
|
|
119
|
+
### Installation
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
npm install igniteui-dockmanager
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Setup
|
|
126
|
+
|
|
127
|
+
Because Dock Manager is a Web Component, it requires two one-time setup steps:
|
|
128
|
+
|
|
129
|
+
**1. Register custom elements — `main.ts`:**
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
import { defineCustomElements } from 'igniteui-dockmanager/loader';
|
|
133
|
+
|
|
134
|
+
// Must be called before bootstrapApplication
|
|
135
|
+
defineCustomElements();
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**2. Add `CUSTOM_ELEMENTS_SCHEMA` to every standalone component that uses `<igc-dockmanager>`:**
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
142
|
+
|
|
143
|
+
@Component({
|
|
144
|
+
selector: 'app-dock-manager',
|
|
145
|
+
templateUrl: './dock-manager.component.html',
|
|
146
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
|
147
|
+
})
|
|
148
|
+
export class DockManagerComponent { ... }
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Basic Usage
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
155
|
+
import {
|
|
156
|
+
IgcDockManagerLayout,
|
|
157
|
+
IgcDockManagerPaneType,
|
|
158
|
+
IgcSplitPaneOrientation
|
|
159
|
+
} from 'igniteui-dockmanager';
|
|
160
|
+
|
|
161
|
+
@Component({
|
|
162
|
+
selector: 'app-dock-manager',
|
|
163
|
+
templateUrl: './dock-manager.component.html',
|
|
164
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
165
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
166
|
+
})
|
|
167
|
+
export class DockManagerComponent {
|
|
168
|
+
layout: IgcDockManagerLayout = {
|
|
169
|
+
rootPane: {
|
|
170
|
+
type: IgcDockManagerPaneType.splitPane,
|
|
171
|
+
orientation: IgcSplitPaneOrientation.horizontal,
|
|
172
|
+
panes: [
|
|
173
|
+
{
|
|
174
|
+
type: IgcDockManagerPaneType.contentPane,
|
|
175
|
+
contentId: 'sidebar',
|
|
176
|
+
header: 'Explorer'
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
type: IgcDockManagerPaneType.documentHost,
|
|
180
|
+
rootPane: {
|
|
181
|
+
type: IgcDockManagerPaneType.splitPane,
|
|
182
|
+
orientation: IgcSplitPaneOrientation.horizontal,
|
|
183
|
+
allowEmpty: true,
|
|
184
|
+
panes: [
|
|
185
|
+
{
|
|
186
|
+
type: IgcDockManagerPaneType.tabGroupPane,
|
|
187
|
+
panes: [
|
|
188
|
+
{
|
|
189
|
+
type: IgcDockManagerPaneType.contentPane,
|
|
190
|
+
header: 'File 1',
|
|
191
|
+
contentId: 'doc1',
|
|
192
|
+
documentOnly: true
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
type: IgcDockManagerPaneType.contentPane,
|
|
196
|
+
header: 'File 2',
|
|
197
|
+
contentId: 'doc2',
|
|
198
|
+
documentOnly: true
|
|
199
|
+
}
|
|
200
|
+
]
|
|
201
|
+
}
|
|
202
|
+
]
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
type: IgcDockManagerPaneType.splitPane,
|
|
207
|
+
orientation: IgcSplitPaneOrientation.vertical,
|
|
208
|
+
size: 280,
|
|
209
|
+
panes: [
|
|
210
|
+
{
|
|
211
|
+
type: IgcDockManagerPaneType.contentPane,
|
|
212
|
+
contentId: 'properties',
|
|
213
|
+
header: 'Properties'
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
type: IgcDockManagerPaneType.contentPane,
|
|
217
|
+
contentId: 'output',
|
|
218
|
+
header: 'Output',
|
|
219
|
+
isPinned: false // starts unpinned (auto-hidden)
|
|
220
|
+
}
|
|
221
|
+
]
|
|
222
|
+
}
|
|
223
|
+
]
|
|
224
|
+
},
|
|
225
|
+
floatingPanes: [
|
|
226
|
+
{
|
|
227
|
+
type: IgcDockManagerPaneType.splitPane,
|
|
228
|
+
orientation: IgcSplitPaneOrientation.horizontal,
|
|
229
|
+
floatingWidth: 300,
|
|
230
|
+
floatingHeight: 200,
|
|
231
|
+
floatingLocation: { x: 200, y: 150 },
|
|
232
|
+
panes: [
|
|
233
|
+
{
|
|
234
|
+
type: IgcDockManagerPaneType.contentPane,
|
|
235
|
+
contentId: 'search',
|
|
236
|
+
header: 'Search'
|
|
237
|
+
}
|
|
238
|
+
]
|
|
239
|
+
}
|
|
240
|
+
]
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
```html
|
|
246
|
+
<!-- Each slot value matches a contentId in the layout -->
|
|
247
|
+
<igc-dockmanager [layout]="layout" style="height: 100vh; display: block;">
|
|
248
|
+
<div slot="sidebar">File explorer content</div>
|
|
249
|
+
<div slot="doc1">Document 1 content</div>
|
|
250
|
+
<div slot="doc2">Document 2 content</div>
|
|
251
|
+
<div slot="properties">Properties panel</div>
|
|
252
|
+
<div slot="output">Output panel</div>
|
|
253
|
+
<div slot="search">Search panel</div>
|
|
254
|
+
</igc-dockmanager>
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Full Example (from user-provided code)
|
|
258
|
+
|
|
259
|
+
```typescript
|
|
260
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
261
|
+
import {
|
|
262
|
+
IgcDockManagerLayout,
|
|
263
|
+
IgcDockManagerPaneType,
|
|
264
|
+
IgcSplitPaneOrientation
|
|
265
|
+
} from 'igniteui-dockmanager';
|
|
266
|
+
|
|
267
|
+
@Component({
|
|
268
|
+
selector: 'app-dock-manager',
|
|
269
|
+
templateUrl: './dock-manager.component.html',
|
|
270
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
|
271
|
+
})
|
|
272
|
+
export class DockManagerComponent {
|
|
273
|
+
layout: IgcDockManagerLayout = {
|
|
274
|
+
rootPane: {
|
|
275
|
+
type: IgcDockManagerPaneType.splitPane,
|
|
276
|
+
orientation: IgcSplitPaneOrientation.horizontal,
|
|
277
|
+
panes: [
|
|
278
|
+
{
|
|
279
|
+
type: IgcDockManagerPaneType.splitPane,
|
|
280
|
+
orientation: IgcSplitPaneOrientation.vertical,
|
|
281
|
+
panes: [
|
|
282
|
+
{ type: IgcDockManagerPaneType.contentPane, contentId: 'content1', header: 'Content Pane 1' },
|
|
283
|
+
{ type: IgcDockManagerPaneType.contentPane, contentId: 'content2', header: 'Unpinned Pane 1', isPinned: false }
|
|
284
|
+
]
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
type: IgcDockManagerPaneType.splitPane,
|
|
288
|
+
orientation: IgcSplitPaneOrientation.vertical,
|
|
289
|
+
size: 200,
|
|
290
|
+
panes: [
|
|
291
|
+
{
|
|
292
|
+
type: IgcDockManagerPaneType.documentHost,
|
|
293
|
+
size: 200,
|
|
294
|
+
rootPane: {
|
|
295
|
+
type: IgcDockManagerPaneType.splitPane,
|
|
296
|
+
orientation: IgcSplitPaneOrientation.horizontal,
|
|
297
|
+
allowEmpty: true,
|
|
298
|
+
panes: [
|
|
299
|
+
{
|
|
300
|
+
type: IgcDockManagerPaneType.tabGroupPane,
|
|
301
|
+
panes: [
|
|
302
|
+
{ type: IgcDockManagerPaneType.contentPane, header: 'Document 1', contentId: 'content3', documentOnly: true },
|
|
303
|
+
{ type: IgcDockManagerPaneType.contentPane, header: 'Document 2', contentId: 'content4', documentOnly: true }
|
|
304
|
+
]
|
|
305
|
+
}
|
|
306
|
+
]
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
{ type: IgcDockManagerPaneType.contentPane, contentId: 'content5', header: 'Unpinned Pane 2', isPinned: false }
|
|
310
|
+
]
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
type: IgcDockManagerPaneType.splitPane,
|
|
314
|
+
orientation: IgcSplitPaneOrientation.vertical,
|
|
315
|
+
panes: [
|
|
316
|
+
{
|
|
317
|
+
type: IgcDockManagerPaneType.tabGroupPane,
|
|
318
|
+
size: 200,
|
|
319
|
+
panes: [
|
|
320
|
+
{ type: IgcDockManagerPaneType.contentPane, contentId: 'content6', header: 'Tab 1' },
|
|
321
|
+
{ type: IgcDockManagerPaneType.contentPane, contentId: 'content7', header: 'Tab 2' },
|
|
322
|
+
{ type: IgcDockManagerPaneType.contentPane, contentId: 'content8', header: 'Tab 3' },
|
|
323
|
+
{ type: IgcDockManagerPaneType.contentPane, contentId: 'content9', header: 'Tab 4' },
|
|
324
|
+
{ type: IgcDockManagerPaneType.contentPane, contentId: 'content10', header: 'Tab 5' }
|
|
325
|
+
]
|
|
326
|
+
},
|
|
327
|
+
{ type: IgcDockManagerPaneType.contentPane, contentId: 'content11', header: 'Content Pane 2' }
|
|
328
|
+
]
|
|
329
|
+
}
|
|
330
|
+
]
|
|
331
|
+
},
|
|
332
|
+
floatingPanes: [
|
|
333
|
+
{
|
|
334
|
+
type: IgcDockManagerPaneType.splitPane,
|
|
335
|
+
orientation: IgcSplitPaneOrientation.horizontal,
|
|
336
|
+
floatingHeight: 150,
|
|
337
|
+
floatingWidth: 250,
|
|
338
|
+
floatingLocation: { x: 300, y: 200 },
|
|
339
|
+
panes: [
|
|
340
|
+
{ type: IgcDockManagerPaneType.contentPane, contentId: 'content12', header: 'Floating Pane' }
|
|
341
|
+
]
|
|
342
|
+
}
|
|
343
|
+
]
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
```html
|
|
349
|
+
<igc-dockmanager [layout]="layout" style="height: 600px;">
|
|
350
|
+
<div slot="content1" class="dockManagerContent">Content 1</div>
|
|
351
|
+
<div slot="content2" class="dockManagerContent">Content 2</div>
|
|
352
|
+
<div slot="content3" class="dockManagerContent">Content 3</div>
|
|
353
|
+
<div slot="content4" class="dockManagerContent">Content 4</div>
|
|
354
|
+
<div slot="content5" class="dockManagerContent">Content 5</div>
|
|
355
|
+
<div slot="content6" class="dockManagerContent">Content 6</div>
|
|
356
|
+
<div slot="content7" class="dockManagerContent">Content 7</div>
|
|
357
|
+
<div slot="content8" class="dockManagerContent">Content 8</div>
|
|
358
|
+
<div slot="content9" class="dockManagerContent">Content 9</div>
|
|
359
|
+
<div slot="content10" class="dockManagerContent">Content 10</div>
|
|
360
|
+
<div slot="content11" class="dockManagerContent">Content 11</div>
|
|
361
|
+
<div slot="content12" class="dockManagerContent">Content 12</div>
|
|
362
|
+
</igc-dockmanager>
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
### Pane Types
|
|
366
|
+
|
|
367
|
+
| `IgcDockManagerPaneType` | Purpose |
|
|
368
|
+
|---|---|
|
|
369
|
+
| `splitPane` | Splits space horizontally or vertically between child panes |
|
|
370
|
+
| `contentPane` | A single leaf pane that renders a slotted element via `contentId` |
|
|
371
|
+
| `tabGroupPane` | Groups multiple `contentPane` children as tabs |
|
|
372
|
+
| `documentHost` | A special area for `documentOnly: true` panes (like an editor area) |
|
|
373
|
+
|
|
374
|
+
### `IgcSplitPaneOrientation`
|
|
375
|
+
|
|
376
|
+
| Value | Layout |
|
|
377
|
+
|---|---|
|
|
378
|
+
| `horizontal` | Children placed left-to-right |
|
|
379
|
+
| `vertical` | Children placed top-to-bottom |
|
|
380
|
+
|
|
381
|
+
### Key `contentPane` Properties
|
|
382
|
+
|
|
383
|
+
| Property | Type | Description |
|
|
384
|
+
|---|---|---|
|
|
385
|
+
| `contentId` | `string` | Matches the `slot` attribute on the rendered HTML element |
|
|
386
|
+
| `header` | `string` | Tab/title bar label |
|
|
387
|
+
| `isPinned` | `boolean` | `false` = auto-hidden (collapsed to edge); default `true` |
|
|
388
|
+
| `documentOnly` | `boolean` | Restricts pane to `documentHost` areas only |
|
|
389
|
+
| `size` | `number` | Relative size within parent split |
|
|
390
|
+
| `allowClose` | `boolean` | Show close button (default `true`) |
|
|
391
|
+
| `allowPinning` | `boolean` | Allow user to pin/unpin (default `true`) |
|
|
392
|
+
| `allowFloating` | `boolean` | Allow user to float the pane (default `true`) |
|
|
393
|
+
|
|
394
|
+
### Key `splitPane` / floating pane Properties
|
|
395
|
+
|
|
396
|
+
| Property | Type | Description |
|
|
397
|
+
|---|---|---|
|
|
398
|
+
| `orientation` | `IgcSplitPaneOrientation` | `horizontal` or `vertical` |
|
|
399
|
+
| `size` | `number` | Relative size in the parent split |
|
|
400
|
+
| `allowEmpty` | `boolean` | Allow pane to remain when all children are closed |
|
|
401
|
+
| `floatingWidth` | `number` | Initial width of floating pane (px) |
|
|
402
|
+
| `floatingHeight` | `number` | Initial height of floating pane (px) |
|
|
403
|
+
| `floatingLocation` | `{x, y}` | Initial top-left corner position of floating pane |
|
|
404
|
+
|
|
405
|
+
### Key Rules for Dock Manager
|
|
406
|
+
|
|
407
|
+
1. **Separate package** — `igniteui-dockmanager` is installed independently of `igniteui-angular`
|
|
408
|
+
2. **Call `defineCustomElements()` in `main.ts`** before `bootstrapApplication` — without this the `<igc-dockmanager>` element renders as an unknown element
|
|
409
|
+
3. **Add `CUSTOM_ELEMENTS_SCHEMA`** to every standalone component or NgModule that uses `<igc-dockmanager>`
|
|
410
|
+
4. **Slot names = `contentId` values** — the `slot="..."` attribute on child elements must exactly match the `contentId` string in the layout
|
|
411
|
+
5. **Premium component** — requires a licensed Ignite UI subscription; verify availability before recommending to users
|
|
412
|
+
6. **Not part of `igniteui-angular`** — do not import from `igniteui-angular` entry points; all Dock Manager types come from `igniteui-dockmanager`
|
|
413
|
+
|
|
414
|
+
## See Also
|
|
415
|
+
|
|
416
|
+
- [`setup.md`](./setup.md) — App providers, architecture, all entry points
|
|
417
|
+
- [`layout.md`](./layout.md) — Tabs, Stepper, Accordion, Splitter, Navigation Drawer
|
|
418
|
+
- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components
|
|
419
|
+
- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner
|
|
420
|
+
- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# Layout Components
|
|
2
|
+
|
|
3
|
+
> **Part of the [`igniteui-angular-components`](../SKILL.md) skill hub.**
|
|
4
|
+
> For app setup, providers, and import patterns — see [`setup.md`](./setup.md).
|
|
5
|
+
|
|
6
|
+
## Contents
|
|
7
|
+
|
|
8
|
+
- [Tabs](#tabs)
|
|
9
|
+
- [Bottom Navigation](#bottom-navigation)
|
|
10
|
+
- [Stepper](#stepper)
|
|
11
|
+
- [Accordion](#accordion)
|
|
12
|
+
- [Splitter](#splitter)
|
|
13
|
+
- [Navigation Drawer](#navigation-drawer)
|
|
14
|
+
|
|
15
|
+
## Tabs
|
|
16
|
+
|
|
17
|
+
> **Docs:** [Tabs Component](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tabs)
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
import { IGX_TABS_DIRECTIVES } from 'igniteui-angular/tabs';
|
|
21
|
+
import { IgxIconComponent } from 'igniteui-angular/icon';
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
```html
|
|
25
|
+
<igx-tabs [(selectedIndex)]="activeTab">
|
|
26
|
+
<igx-tab-item>
|
|
27
|
+
<igx-tab-header>
|
|
28
|
+
<igx-icon igxTabHeaderIcon>info</igx-icon>
|
|
29
|
+
<span igxTabHeaderLabel>Info</span>
|
|
30
|
+
</igx-tab-header>
|
|
31
|
+
<igx-tab-content>Content for Info tab</igx-tab-content>
|
|
32
|
+
</igx-tab-item>
|
|
33
|
+
<igx-tab-item>
|
|
34
|
+
<igx-tab-header>
|
|
35
|
+
<span igxTabHeaderLabel>Settings</span>
|
|
36
|
+
</igx-tab-header>
|
|
37
|
+
<igx-tab-content>Settings content</igx-tab-content>
|
|
38
|
+
</igx-tab-item>
|
|
39
|
+
</igx-tabs>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Key inputs: `[(selectedIndex)]`, `[tabAlignment]` (`'start'` | `'end'` | `'center'` | `'justify'`), `[disableAnimation]`.
|
|
43
|
+
|
|
44
|
+
## Bottom Navigation
|
|
45
|
+
|
|
46
|
+
> **Docs:** [Bottom Navigation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tabbar)
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
import { IgxBottomNavComponent, IgxBottomNavItemComponent, IgxBottomNavHeaderComponent, IgxBottomNavContentComponent } from 'igniteui-angular/bottom-nav';
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
```html
|
|
53
|
+
<igx-bottom-nav [(selectedIndex)]="activeNavItem">
|
|
54
|
+
<igx-bottom-nav-item>
|
|
55
|
+
<igx-bottom-nav-header>
|
|
56
|
+
<igx-icon>home</igx-icon>
|
|
57
|
+
<span>Home</span>
|
|
58
|
+
</igx-bottom-nav-header>
|
|
59
|
+
<igx-bottom-nav-content>Home content</igx-bottom-nav-content>
|
|
60
|
+
</igx-bottom-nav-item>
|
|
61
|
+
<igx-bottom-nav-item>
|
|
62
|
+
<igx-bottom-nav-header>
|
|
63
|
+
<igx-icon>settings</igx-icon>
|
|
64
|
+
<span>Settings</span>
|
|
65
|
+
</igx-bottom-nav-header>
|
|
66
|
+
<igx-bottom-nav-content>Settings content</igx-bottom-nav-content>
|
|
67
|
+
</igx-bottom-nav-item>
|
|
68
|
+
</igx-bottom-nav>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Stepper
|
|
72
|
+
|
|
73
|
+
> **Docs:** [Stepper Component](https://www.infragistics.com/products/ignite-ui-angular/angular/components/stepper)
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
import { IGX_STEPPER_DIRECTIVES } from 'igniteui-angular/stepper';
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
```html
|
|
80
|
+
<igx-stepper [linear]="true" [orientation]="'horizontal'">
|
|
81
|
+
<igx-step [completed]="step1Done">
|
|
82
|
+
<div igxStepTitle>Account</div>
|
|
83
|
+
<div igxStepSubtitle>Create your account</div>
|
|
84
|
+
<div igxStepContent>
|
|
85
|
+
<!-- form fields -->
|
|
86
|
+
</div>
|
|
87
|
+
</igx-step>
|
|
88
|
+
<igx-step [optional]="true">
|
|
89
|
+
<div igxStepTitle>Profile</div>
|
|
90
|
+
<div igxStepSubtitle>Optional step</div>
|
|
91
|
+
<div igxStepContent>...</div>
|
|
92
|
+
</igx-step>
|
|
93
|
+
<igx-step>
|
|
94
|
+
<div igxStepTitle>Confirm</div>
|
|
95
|
+
<div igxStepContent>Review and submit</div>
|
|
96
|
+
</igx-step>
|
|
97
|
+
</igx-stepper>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Key inputs: `[linear]`, `[orientation]` (`'horizontal'` | `'vertical'`), `[stepType]` (`'indicator'` | `'title'` | `'full'`), `[animationType]`.
|
|
101
|
+
|
|
102
|
+
Events: `(activeStepChanging)`, `(activeStepChanged)`.
|
|
103
|
+
|
|
104
|
+
Programmatic navigation:
|
|
105
|
+
```typescript
|
|
106
|
+
stepper = viewChild.required(IgxStepperComponent);
|
|
107
|
+
|
|
108
|
+
next() { this.stepper().next(); }
|
|
109
|
+
prev() { this.stepper().prev(); }
|
|
110
|
+
navigateTo(index: number) { this.stepper().navigateTo(index); }
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Accordion
|
|
114
|
+
|
|
115
|
+
> **Docs:** [Accordion Component](https://www.infragistics.com/products/ignite-ui-angular/angular/components/accordion)
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
import { IgxAccordionComponent } from 'igniteui-angular/accordion';
|
|
119
|
+
import { IGX_EXPANSION_PANEL_DIRECTIVES } from 'igniteui-angular/expansion-panel';
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
```html
|
|
123
|
+
<igx-accordion [singleBranchExpand]="true">
|
|
124
|
+
<igx-expansion-panel>
|
|
125
|
+
<igx-expansion-panel-header>
|
|
126
|
+
<igx-expansion-panel-title>Panel 1</igx-expansion-panel-title>
|
|
127
|
+
<igx-expansion-panel-description>Subtitle text</igx-expansion-panel-description>
|
|
128
|
+
</igx-expansion-panel-header>
|
|
129
|
+
<igx-expansion-panel-body>
|
|
130
|
+
Content for panel 1
|
|
131
|
+
</igx-expansion-panel-body>
|
|
132
|
+
</igx-expansion-panel>
|
|
133
|
+
<igx-expansion-panel>
|
|
134
|
+
<igx-expansion-panel-header>
|
|
135
|
+
<igx-expansion-panel-title>Panel 2</igx-expansion-panel-title>
|
|
136
|
+
</igx-expansion-panel-header>
|
|
137
|
+
<igx-expansion-panel-body>Content for panel 2</igx-expansion-panel-body>
|
|
138
|
+
</igx-expansion-panel>
|
|
139
|
+
</igx-accordion>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Standalone `igx-expansion-panel` (without accordion):
|
|
143
|
+
```html
|
|
144
|
+
<igx-expansion-panel [(collapsed)]="isCollapsed">
|
|
145
|
+
<igx-expansion-panel-header>
|
|
146
|
+
<igx-expansion-panel-title>Settings</igx-expansion-panel-title>
|
|
147
|
+
</igx-expansion-panel-header>
|
|
148
|
+
<igx-expansion-panel-body>Content</igx-expansion-panel-body>
|
|
149
|
+
</igx-expansion-panel>
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Splitter
|
|
153
|
+
|
|
154
|
+
> **Docs:** [Splitter Component](https://www.infragistics.com/products/ignite-ui-angular/angular/components/splitter)
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
import { IgxSplitterComponent, IgxSplitterPaneComponent, SplitterType } from 'igniteui-angular/splitter';
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
```html
|
|
161
|
+
<!-- Horizontal split (side by side) -->
|
|
162
|
+
<igx-splitter [type]="SplitterType.Horizontal" style="height: 400px">
|
|
163
|
+
<igx-splitter-pane [size]="'30%'" [minSize]="'20%'">
|
|
164
|
+
Left panel content
|
|
165
|
+
</igx-splitter-pane>
|
|
166
|
+
<igx-splitter-pane>
|
|
167
|
+
Right panel content
|
|
168
|
+
</igx-splitter-pane>
|
|
169
|
+
</igx-splitter>
|
|
170
|
+
|
|
171
|
+
<!-- Vertical split (top/bottom) -->
|
|
172
|
+
<igx-splitter [type]="SplitterType.Vertical" style="height: 600px">
|
|
173
|
+
<igx-splitter-pane [size]="'50%'">Top panel</igx-splitter-pane>
|
|
174
|
+
<igx-splitter-pane>Bottom panel</igx-splitter-pane>
|
|
175
|
+
</igx-splitter>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Navigation Drawer
|
|
179
|
+
|
|
180
|
+
> **Docs:** [Navigation Drawer](https://www.infragistics.com/products/ignite-ui-angular/angular/components/navdrawer)
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
import { IgxNavigationDrawerComponent, IgxNavDrawerItemDirective, IgxNavDrawerTemplateDirective, IgxNavDrawerMiniTemplateDirective } from 'igniteui-angular/navigation-drawer';
|
|
184
|
+
import { IgxIconComponent } from 'igniteui-angular/icon';
|
|
185
|
+
import { IgxRippleDirective } from 'igniteui-angular/directives';
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
```html
|
|
189
|
+
<igx-nav-drawer #drawer [isOpen]="drawerOpen" [pinThreshold]="1024" [pin]="isDesktop">
|
|
190
|
+
<ng-template igxDrawer>
|
|
191
|
+
<nav>
|
|
192
|
+
<span igxDrawerItem [isHeader]="true">Navigation</span>
|
|
193
|
+
<span igxDrawerItem igxRipple [active]="activeRoute === 'home'" routerLink="/home">
|
|
194
|
+
<igx-icon>home</igx-icon>
|
|
195
|
+
<span>Home</span>
|
|
196
|
+
</span>
|
|
197
|
+
<span igxDrawerItem igxRipple [active]="activeRoute === 'settings'" routerLink="/settings">
|
|
198
|
+
<igx-icon>settings</igx-icon>
|
|
199
|
+
<span>Settings</span>
|
|
200
|
+
</span>
|
|
201
|
+
</nav>
|
|
202
|
+
</ng-template>
|
|
203
|
+
<!-- Mini mode (icons only, shown when drawer is collapsed but pinned) -->
|
|
204
|
+
<ng-template igxDrawerMini>
|
|
205
|
+
<span igxDrawerItem igxRipple routerLink="/home"><igx-icon>home</igx-icon></span>
|
|
206
|
+
<span igxDrawerItem igxRipple routerLink="/settings"><igx-icon>settings</igx-icon></span>
|
|
207
|
+
</ng-template>
|
|
208
|
+
</igx-nav-drawer>
|
|
209
|
+
|
|
210
|
+
<button igxButton (click)="drawer.toggle()">Toggle Menu</button>
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Key inputs: `[isOpen]`, `[pin]` (dock to content), `[pinThreshold]` (auto-pin at viewport width), `[width]`, `[miniWidth]`.
|
|
214
|
+
|
|
215
|
+
Events: `(opened)`, `(closed)`, `(pinChange)`.
|
|
216
|
+
|
|
217
|
+
> **AGENT INSTRUCTION:** The Navigation Drawer uses the Ignite UI overlay/animation system — ensure `provideAnimations()` is in `app.config.ts`.
|
|
218
|
+
|
|
219
|
+
## See Also
|
|
220
|
+
|
|
221
|
+
- [`setup.md`](./setup.md) — App providers, architecture, all entry points
|
|
222
|
+
- [`form-controls.md`](./form-controls.md) — Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider
|
|
223
|
+
- [`data-display.md`](./data-display.md) — List, Tree, Card and other display components
|
|
224
|
+
- [`feedback.md`](./feedback.md) — Dialog, Snackbar, Toast, Banner
|
|
225
|
+
- [`directives.md`](./directives.md) — Button, Ripple, Tooltip, Drag and Drop
|