Skip to content

Commit ca361f6

Browse files
committed
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular into deps-update
2 parents e3a9ce9 + 0136080 commit ca361f6

File tree

493 files changed

+15164
-696
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

493 files changed

+15164
-696
lines changed

CHANGELOG.md

Lines changed: 61 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,59 @@
22

33
All notable changes for each version of this project will be documented in this file.
44

5+
56
## 20.1.0
7+
68
### New Features
7-
- `IgxCarousel`
8-
- Added `select` method overload accepting index.
9-
```ts
10-
this.carousel.select(2, Direction.NEXT);
11-
```
9+
1210
- `IgxGrid`, `IgxTreeGrid`, `IgxHierarchicalGrid`
11+
- Introduced a new cell merging feature that allows you to configure and merge cells in a column based on same data or other custom condition, into a single cell.
12+
13+
It can be enabled on the individual columns:
14+
15+
```html
16+
<igx-column field="field" [merge]="true"></igx-column>
17+
```
18+
The merging can be configured on the grid level to apply either:
19+
- `onSort` - only when the column is sorted.
20+
- `always` - always, regardless of data operations.
21+
22+
```html
23+
<igx-grid [cellMergeMode]="'always'">
24+
</igx-grid>
25+
```
26+
27+
The default `cellMergeMode` is `onSort`.
28+
29+
The functionality can be modified by setting a custom `mergeStrategy` on the grid, in case some other merge conditions or logic is needed for a custom scenario.
30+
31+
It's possible also to set a `mergeComparer` on the individual columns, in case some custom handling is needed for a particular data field.
32+
1333
- Added ability to pin individual columns to a specific side (start or end of the grid), so that you can now have pinning from both sides. This can be done either declaratively by setting the `pinningPosition` property on the column:
1434

15-
```html
16-
<igx-column [field]="'Col1'" [pinned]='true' [pinningPosition]='pinningPosition'>
17-
</igx-column>
18-
```
35+
```html
36+
<igx-column [field]="'Col1'" [pinned]='true' [pinningPosition]='pinningPosition'>
37+
</igx-column>
38+
```
1939

20-
```ts
21-
public pinningPosition = ColumnPinningPosition.End;
22-
```
40+
```ts
41+
public pinningPosition = ColumnPinningPosition.End;
42+
```
2343

24-
Or with the API, via optional parameter:
44+
Or with the API, via optional parameter:
2545

26-
```ts
46+
```ts
2747
grid.pinColumn('Col1', 0, ColumnPinningPosition.End);
2848
grid.pinColumn('Col2', 0, ColumnPinningPosition.Start);
29-
```
49+
```
3050

31-
If property `pinningPosition` is not set on a column, the column will default to the position specified on the grid's `pinning` options for `columns`.
51+
If property `pinningPosition` is not set on a column, the column will default to the position specified on the grid's `pinning` options for `columns`.
52+
53+
- `IgxCarousel`
54+
- Added `select` method overload accepting index.
55+
```ts
56+
this.carousel.select(2, Direction.NEXT);
57+
```
3258

3359
- `IgxDateRangePicker`
3460
- Now has a complete set of properties to customize the calendar:
@@ -75,10 +101,10 @@ All notable changes for each version of this project will be documented in this
75101

76102
- `IgxTooltip`
77103
- The tooltip now remains open while interacting with it.
104+
78105
- `IgxTooltipTarget`
79106
- Introduced several new properties to enhance customization of tooltip content and behavior. Those include `positionSettings`, `hasArrow`, `sticky`, `closeButtonTemplate`. For detailed usage and examples, please refer to the Tooltip [README](https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/directives/tooltip/README.md).
80107

81-
82108
### General
83109
- `IgxDropDown` now exposes a `role` input property, allowing users to customize the role attribute based on the use case. The default is `listbox`.
84110

@@ -88,6 +114,14 @@ All notable changes for each version of this project will be documented in this
88114
- The `hideDelay` input property now defaults to `300`.
89115
- The `showTooltip` and `hideTooltip` methods do not take `showDelay`/`hideDelay` into account.
90116

117+
- `IgxGrid`, `IgxTreeGrid`, `IgxHierarchicalGrid`, `IgxPivotGrid`
118+
- **Sorting improvements**
119+
- Improved sorting algorithm efficiency using Schwartzian transformation. This is a technique, also known as decorate-sort-undecorate, which avoids recomputing the sort keys by temporarily associating them with the original data records.
120+
- Refactored sorting algorithms from recursive to iterative.
121+
- **Groupby improvements**
122+
- Refactored grouping algorithm from recursive to iterative.
123+
- Optimized grouping operations.
124+
91125
## 20.0.6
92126
### General
93127
- `IgxSimpleCombo`
@@ -179,24 +213,24 @@ All notable changes for each version of this project will be documented in this
179213
- Added the `canCommit`, `commit` and `discard` public methods that allows the user to save/discard the current state of the expression tree.
180214
- Added option to template the search value input:
181215
```
182-
<ng-template igxQueryBuilderSearchValue
216+
<ng-template igxQueryBuilderSearchValue
183217
let-searchValue
184-
let-selectedField = "selectedField"
218+
let-selectedField = "selectedField"
185219
let-selectedCondition = "selectedCondition"
186220
let-defaultSearchValueTemplate = "defaultSearchValueTemplate">
187221
@if (selectedField?.field === 'Id' && selectedCondition === 'equals'){
188222
<input type="text" required [(ngModel)]="searchValue.value"/>
189-
} @else {
223+
} @else {
190224
<ng-container #defaultTemplate *ngTemplateOutlet="defaultSearchValueTemplate"></ ng-container>
191225
}
192-
</ng-template>
226+
</ng-template>
193227
```
194-
- **Behavioral Changes**
228+
- **Behavioral Changes**
195229
- Expression enters edit mode on single click, `Enter` or `Space`.
196230
- Selecting conditions inside the `IgxQueryBuilderComponent` is no longer supported. Grouping/ungrouping expressions is now achieved via the newly exposed Drag & Drop functionality.
197231
- Deleting multiple expressions through the context menu is no longer supported.
198232
- `IgxQueryBuilderHeaderComponent`
199-
- **Behavioral Change**
233+
- **Behavioral Change**
200234
- Legend is no longer shown.
201235
- If the `title` input property is not set, by default it would be empty string.
202236
- **Deprecation**
@@ -278,9 +312,9 @@ All notable changes for each version of this project will be documented in this
278312

279313
### Themes
280314
- **Breaking Change** `Palettes`
281-
- All palette colors have been migrated to the [CSS relative colors syntax](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_colors/Relative_colors). This means that color consumed as CSS variables no longer need to be wrapped in an `hsl` function.
315+
- All palette colors have been migrated to the [CSS relative colors syntax](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_colors/Relative_colors). This means that color consumed as CSS variables no longer need to be wrapped in an `hsl` function.
282316

283-
Example:
317+
Example:
284318
```css
285319
/* 18.1.x and before: */
286320
background: hsl(var(--ig-primary-600));
@@ -291,7 +325,7 @@ All notable changes for each version of this project will be documented in this
291325

292326
This change also opens up the door for declaring the base (500) variants of each color in CSS from any color, including other CSS variables, whereas before the Sass `palette` function was needed to generate color shades from a base color.
293327

294-
Example:
328+
Example:
295329
```scss
296330
/* 18.1.x and before: */
297331
$my-palette: palette($primary: #09f, ...);
@@ -331,7 +365,7 @@ For Firefox users, we provide limited scrollbar styling options through the foll
331365
- `animationType` input property is now of type `CarouselAnimationType`. `HorizontalAnimationType` can also be used, however, to accommodate the new vertical mode, which supports vertical slide animations, it is recommended to use `CarouselAnimationType`.
332366

333367
- **Behavioral Changes** - the `keyboardSupport` input property now defaults to `false`.
334-
- **Deprecation** - the `keyboardSupport` input property has been deprecated and will be removed in a future version. Keyboard navigation with `ArrowLeft`, `ArrowRight`, `Home`, and `End` keys will be supported when focusing the indicators' container via ` Tab`/`Shift+Tab`.
368+
- **Deprecation** - the `keyboardSupport` input property has been deprecated and will be removed in a future version. Keyboard navigation with `ArrowLeft`, `ArrowRight`, `Home`, and `End` keys will be supported when focusing the indicators' container via ` Tab`/`Shift+Tab`.
335369

336370
- `IgxCombo`:
337371
- **Breaking Change** The deprecated `filterable` property is replaced with `disableFiltering`.

angular.json

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,97 @@
478478
}
479479
}
480480
}
481+
},
482+
"igniteui-angular-performance": {
483+
"projectType": "application",
484+
"schematics": {
485+
"@schematics/angular:component": {
486+
"style": "scss"
487+
}
488+
},
489+
"root": "projects/igniteui-angular-performance",
490+
"sourceRoot": "projects/igniteui-angular-performance/src",
491+
"prefix": "app",
492+
"architect": {
493+
"build": {
494+
"builder": "@angular/build:application",
495+
"options": {
496+
"browser": "projects/igniteui-angular-performance/src/main.ts",
497+
"polyfills": [
498+
"zone.js"
499+
],
500+
"tsConfig": "projects/igniteui-angular-performance/tsconfig.app.json",
501+
"inlineStyleLanguage": "scss",
502+
"assets": [
503+
"projects/igniteui-angular-performance/src/assets"
504+
],
505+
"styles": [
506+
"projects/igniteui-angular-performance/src/styles.scss"
507+
],
508+
"stylePreprocessorOptions": {
509+
"includePaths": ["node_modules"]
510+
}
511+
},
512+
"configurations": {
513+
"production": {
514+
"budgets": [
515+
{
516+
"type": "initial",
517+
"maximumWarning": "500kB",
518+
"maximumError": "1MB"
519+
},
520+
{
521+
"type": "anyComponentStyle",
522+
"maximumWarning": "4kB",
523+
"maximumError": "8kB"
524+
}
525+
],
526+
"outputHashing": "all"
527+
},
528+
"development": {
529+
"optimization": false,
530+
"extractLicenses": false,
531+
"sourceMap": true
532+
}
533+
},
534+
"defaultConfiguration": "production"
535+
},
536+
"serve": {
537+
"builder": "@angular/build:dev-server",
538+
"configurations": {
539+
"production": {
540+
"buildTarget": "igniteui-angular-performance:build:production"
541+
},
542+
"development": {
543+
"buildTarget": "igniteui-angular-performance:build:development"
544+
}
545+
},
546+
"defaultConfiguration": "development"
547+
},
548+
"extract-i18n": {
549+
"builder": "@angular/build:extract-i18n"
550+
},
551+
"test": {
552+
"builder": "@angular/build:karma",
553+
"options": {
554+
"polyfills": [
555+
"zone.js",
556+
"zone.js/testing"
557+
],
558+
"tsConfig": "projects/igniteui-angular-performance/tsconfig.spec.json",
559+
"inlineStyleLanguage": "scss",
560+
"assets": [
561+
{
562+
"glob": "**/*",
563+
"input": "projects/igniteui-angular-performance/public"
564+
}
565+
],
566+
"styles": [
567+
"projects/igniteui-angular-performance/src/styles.scss"
568+
]
569+
}
570+
}
571+
}
481572
}
482573
},
483574
"cli": {

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"ng": "ng",
66
"start": "ng serve --open --hmr",
77
"start:elements": "ng serve --project igniteui-angular-elements",
8+
"start:performance": "ng serve --project igniteui-angular-performance",
89
"build": "ng build --configuration production",
910
"test": "ng test igniteui-angular",
1011
"lint": "ng lint",

projects/igniteui-angular-elements/src/analyzer/elements.config.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ export var registerConfig = [
9595
],
9696
numericProps: ["rowEnd", "colEnd", "rowStart", "colStart"],
9797
boolProps: [
98+
"merge",
9899
"sortable",
99100
"selectable",
100101
"groupable",
@@ -158,6 +159,7 @@ export var registerConfig = [
158159
"expanded",
159160
"searchable",
160161
"hidden",
162+
"merge",
161163
"sortable",
162164
"groupable",
163165
"editable",
@@ -213,6 +215,7 @@ export var registerConfig = [
213215
"collapsible",
214216
"expanded",
215217
"searchable",
218+
"merge",
216219
"sortable",
217220
"groupable",
218221
"editable",

projects/igniteui-angular-elements/src/public_api.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { IgxPivotDateDimension } from 'projects/igniteui-angular/src/lib/grids/p
1212
import { PivotDimensionType } from 'projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.interface';
1313
import { IgxDateSummaryOperand, IgxNumberSummaryOperand, IgxSummaryOperand, IgxTimeSummaryOperand } from 'projects/igniteui-angular/src/lib/grids/summaries/grid-summary';
1414
import { HorizontalAlignment, VerticalAlignment } from 'projects/igniteui-angular/src/lib/services/overlay/utilities';
15-
15+
import { ByLevelTreeGridMergeStrategy } from 'projects/igniteui-angular/src/lib/data-operations/merge-strategy';
1616

1717
/** Export Public API, TODO: reorganize, Generate all w/ renames? */
1818
export {
@@ -35,6 +35,7 @@ export {
3535

3636
NoopSortingStrategy as IgcNoopSortingStrategy,
3737
NoopFilteringStrategy as IgcNoopFilteringStrategy,
38+
ByLevelTreeGridMergeStrategy as IgcByLevelTreeGridMergeStrategy,
3839

3940
// Pivot API
4041
IgxPivotDateDimension as IgcPivotDateDimension,
14.7 KB
Binary file not shown.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<main class="wrapper">
2+
<div class="routes">
3+
@for (route of routes; track $index) {
4+
<button igxButton="contained" routerLink="/{{ route.path }}">
5+
{{ route.title }}
6+
</button>
7+
}
8+
</div>
9+
<router-outlet />
10+
</main>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
:host {
2+
width: 100%;
3+
height: 100%;
4+
display: flex;
5+
}
6+
7+
.wrapper {
8+
width: 100%;
9+
height: 100%;
10+
display: flex;
11+
flex-direction: column;
12+
}
13+
14+
.routes {
15+
padding: 1rem;
16+
display: flex;
17+
gap: 1rem;
18+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { ComponentFixture, TestBed } from '@angular/core/testing';
2+
3+
import { AppComponent } from './app.component';
4+
5+
describe('AppComponent', () => {
6+
let component: AppComponent;
7+
let fixture: ComponentFixture<AppComponent>;
8+
9+
beforeEach(async () => {
10+
await TestBed.configureTestingModule({
11+
imports: [AppComponent]
12+
})
13+
.compileComponents();
14+
15+
fixture = TestBed.createComponent(AppComponent);
16+
component = fixture.componentInstance;
17+
fixture.detectChanges();
18+
});
19+
20+
it('should create', () => {
21+
expect(component).toBeTruthy();
22+
});
23+
});
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { Component } from '@angular/core';
2+
import { RouterLink, RouterOutlet, Routes } from '@angular/router';
3+
import { IgxButtonDirective } from 'igniteui-angular';
4+
import { routes } from './app.routes';
5+
6+
@Component({
7+
selector: 'app-root',
8+
imports: [RouterOutlet, IgxButtonDirective, RouterLink],
9+
templateUrl: './app.component.html',
10+
styleUrl: './app.component.scss'
11+
})
12+
export class AppComponent {
13+
protected routes: Routes = routes;
14+
}

0 commit comments

Comments
 (0)