Skip to content

Commit 26cdb0e

Browse files
committed
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular into mdragnev/fix-16035-master
2 parents 2bc0b60 + 894a1d1 commit 26cdb0e

File tree

609 files changed

+19394
-2942
lines changed

Some content is hidden

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

609 files changed

+19394
-2942
lines changed

CHANGELOG.md

Lines changed: 93 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,54 +4,107 @@ All notable changes for each version of this project will be documented in this
44

55

66
## 20.1.0
7+
78
### New Features
8-
`IgxDateRangePicker`
9-
- Added cancel button to the dialog, allowing the user to cancel the selection.
109

11-
- `IgxCarousel`
12-
- Added `select` method overload accepting index.
13-
```ts
14-
this.carousel.select(2, Direction.NEXT);
15-
```
1610
- `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+
1733
- 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:
1834

19-
```html
20-
<igx-column [field]="'Col1'" [pinned]='true' [pinningPosition]='pinningPosition'>
21-
</igx-column>
22-
```
35+
```html
36+
<igx-column [field]="'Col1'" [pinned]='true' [pinningPosition]='pinningPosition'>
37+
</igx-column>
38+
```
2339

24-
```ts
25-
public pinningPosition = ColumnPinningPosition.End;
26-
```
40+
```ts
41+
public pinningPosition = ColumnPinningPosition.End;
42+
```
2743

28-
Or with the API, via optional parameter:
44+
Or with the API, via optional parameter:
2945

30-
```ts
46+
```ts
3147
grid.pinColumn('Col1', 0, ColumnPinningPosition.End);
3248
grid.pinColumn('Col2', 0, ColumnPinningPosition.Start);
33-
```
49+
```
50+
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`.
3452

35-
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`.
53+
- `IgxCarousel`
54+
- Added `select` method overload accepting index.
55+
```ts
56+
this.carousel.select(2, Direction.NEXT);
57+
```
3658

3759
- `IgxDateRangePicker`
38-
- Added new properties:
60+
- Now has a complete set of properties to customize the calendar:
61+
- `headerOrientation`
62+
- `orientation`
63+
- `hideHeader`
64+
- `activeDate`
65+
- `disabledDates`
66+
- `specialDates`
67+
68+
- As well as the following templates, available to customize the contents of the calendar header in `dialog` mode:
69+
- `igxCalendarHeader`
70+
- `igxCalendarHeaderTitle`
71+
- `igxCalendarSubheader`
72+
73+
- Added new properties:
3974
- `usePredefinedRanges` - Whether to render built-in predefined ranges
4075
- `customRanges` - Allows the user to provide custom ranges rendered as chips
4176
- `resourceStrings` - Allows the user to provide set of resource strings
4277

43-
- `IgxPredefinedRangesAreaComponent`
44-
- Added new component for rendering the predefined or custom ranges inside the calendar of the `IgxDateRangePicker`
78+
- **Behavioral Changes**
79+
- Added cancel button to the dialog, allowing the user to cancel the selection.
80+
- The calendar is displayed with header in `dialog` mode by default.
81+
- The picker remains open when typing (in two-inputs and `dropdown` mode).
82+
- The calendar selection is updated with the typed value.
83+
- The calendar view is updated as per the typed value.
84+
- The picker displays a clear icon by default in single input mode.
85+
86+
- `IgxPredefinedRangesAreaComponent`
87+
- Added new component for rendering the predefined or custom ranges inside the calendar of the `IgxDateRangePicker`
88+
89+
- `IgxDatePicker`
90+
- Similar to the `IgxDateRangePicker`, also completes the ability to customize the calendar by introducing the following
91+
properties in addition to the existing ones:
92+
- `hideHeader`
93+
- `orientation`
94+
- `activeDate`
95+
- **Behavioral Changes**
96+
- The calendar selection is updated with the typed value.
97+
- The calendar view is updated as per the typed date value.
4598

4699
- `IgxOverlay`
47100
- Position Settings now accept a new optional `offset` input property of type `number`. Used to set the offset of the element from the target in pixels.
48101

49102
- `IgxTooltip`
50103
- The tooltip now remains open while interacting with it.
104+
51105
- `IgxTooltipTarget`
52106
- 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).
53107

54-
55108
### General
56109
- `IgxDropDown` now exposes a `role` input property, allowing users to customize the role attribute based on the use case. The default is `listbox`.
57110

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

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+
64125
## 20.0.6
65126
### General
66127
- `IgxSimpleCombo`
@@ -152,24 +213,24 @@ All notable changes for each version of this project will be documented in this
152213
- Added the `canCommit`, `commit` and `discard` public methods that allows the user to save/discard the current state of the expression tree.
153214
- Added option to template the search value input:
154215
```
155-
<ng-template igxQueryBuilderSearchValue
216+
<ng-template igxQueryBuilderSearchValue
156217
let-searchValue
157-
let-selectedField = "selectedField"
218+
let-selectedField = "selectedField"
158219
let-selectedCondition = "selectedCondition"
159220
let-defaultSearchValueTemplate = "defaultSearchValueTemplate">
160221
@if (selectedField?.field === 'Id' && selectedCondition === 'equals'){
161222
<input type="text" required [(ngModel)]="searchValue.value"/>
162-
} @else {
223+
} @else {
163224
<ng-container #defaultTemplate *ngTemplateOutlet="defaultSearchValueTemplate"></ ng-container>
164225
}
165-
</ng-template>
226+
</ng-template>
166227
```
167-
- **Behavioral Changes**
228+
- **Behavioral Changes**
168229
- Expression enters edit mode on single click, `Enter` or `Space`.
169230
- Selecting conditions inside the `IgxQueryBuilderComponent` is no longer supported. Grouping/ungrouping expressions is now achieved via the newly exposed Drag & Drop functionality.
170231
- Deleting multiple expressions through the context menu is no longer supported.
171232
- `IgxQueryBuilderHeaderComponent`
172-
- **Behavioral Change**
233+
- **Behavioral Change**
173234
- Legend is no longer shown.
174235
- If the `title` input property is not set, by default it would be empty string.
175236
- **Deprecation**
@@ -251,9 +312,9 @@ All notable changes for each version of this project will be documented in this
251312

252313
### Themes
253314
- **Breaking Change** `Palettes`
254-
- 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.
255316

256-
Example:
317+
Example:
257318
```css
258319
/* 18.1.x and before: */
259320
background: hsl(var(--ig-primary-600));
@@ -264,7 +325,7 @@ All notable changes for each version of this project will be documented in this
264325

265326
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.
266327

267-
Example:
328+
Example:
268329
```scss
269330
/* 18.1.x and before: */
270331
$my-palette: palette($primary: #09f, ...);
@@ -304,7 +365,7 @@ For Firefox users, we provide limited scrollbar styling options through the foll
304365
- `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`.
305366

306367
- **Behavioral Changes** - the `keyboardSupport` input property now defaults to `false`.
307-
- **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`.
308369

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

angular.json

Lines changed: 95 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,8 @@
213213
"lintFilePatterns": [
214214
"projects/igniteui-angular/**/*.ts",
215215
"projects/igniteui-angular/**/*.html"
216-
]
216+
],
217+
"eslintConfig": "projects/igniteui-angular/eslint.config.mjs"
217218
}
218219
},
219220
"cypress-run": {
@@ -306,8 +307,8 @@
306307
{
307308
"type": "bundle",
308309
"name": "styles",
309-
"maximumWarning": "450kb",
310-
"maximumError": "480kb"
310+
"maximumWarning": "500kb",
311+
"maximumError": "550kb"
311312
},
312313
{
313314
"type": "anyComponentStyle",
@@ -478,6 +479,97 @@
478479
}
479480
}
480481
}
482+
},
483+
"igniteui-angular-performance": {
484+
"projectType": "application",
485+
"schematics": {
486+
"@schematics/angular:component": {
487+
"style": "scss"
488+
}
489+
},
490+
"root": "projects/igniteui-angular-performance",
491+
"sourceRoot": "projects/igniteui-angular-performance/src",
492+
"prefix": "app",
493+
"architect": {
494+
"build": {
495+
"builder": "@angular/build:application",
496+
"options": {
497+
"browser": "projects/igniteui-angular-performance/src/main.ts",
498+
"polyfills": [
499+
"zone.js"
500+
],
501+
"tsConfig": "projects/igniteui-angular-performance/tsconfig.app.json",
502+
"inlineStyleLanguage": "scss",
503+
"assets": [
504+
"projects/igniteui-angular-performance/src/assets"
505+
],
506+
"styles": [
507+
"projects/igniteui-angular-performance/src/styles.scss"
508+
],
509+
"stylePreprocessorOptions": {
510+
"includePaths": ["node_modules"]
511+
}
512+
},
513+
"configurations": {
514+
"production": {
515+
"budgets": [
516+
{
517+
"type": "initial",
518+
"maximumWarning": "500kB",
519+
"maximumError": "1MB"
520+
},
521+
{
522+
"type": "anyComponentStyle",
523+
"maximumWarning": "4kB",
524+
"maximumError": "8kB"
525+
}
526+
],
527+
"outputHashing": "all"
528+
},
529+
"development": {
530+
"optimization": false,
531+
"extractLicenses": false,
532+
"sourceMap": true
533+
}
534+
},
535+
"defaultConfiguration": "production"
536+
},
537+
"serve": {
538+
"builder": "@angular/build:dev-server",
539+
"configurations": {
540+
"production": {
541+
"buildTarget": "igniteui-angular-performance:build:production"
542+
},
543+
"development": {
544+
"buildTarget": "igniteui-angular-performance:build:development"
545+
}
546+
},
547+
"defaultConfiguration": "development"
548+
},
549+
"extract-i18n": {
550+
"builder": "@angular/build:extract-i18n"
551+
},
552+
"test": {
553+
"builder": "@angular/build:karma",
554+
"options": {
555+
"polyfills": [
556+
"zone.js",
557+
"zone.js/testing"
558+
],
559+
"tsConfig": "projects/igniteui-angular-performance/tsconfig.spec.json",
560+
"inlineStyleLanguage": "scss",
561+
"assets": [
562+
{
563+
"glob": "**/*",
564+
"input": "projects/igniteui-angular-performance/public"
565+
}
566+
],
567+
"styles": [
568+
"projects/igniteui-angular-performance/src/styles.scss"
569+
]
570+
}
571+
}
572+
}
481573
}
482574
},
483575
"cli": {

eslint.config.mjs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ export default [{
2323
],
2424
}, ...compat.extends(
2525
"plugin:@angular-eslint/recommended",
26-
"plugin:@angular-eslint/template/process-inline-templates",
2726
).map(config => ({
2827
...config,
2928
files: ["**/*.ts"],
@@ -34,16 +33,6 @@ export default [{
3433
"@typescript-eslint": typescriptEslint,
3534
},
3635

37-
languageOptions: {
38-
ecmaVersion: 5,
39-
sourceType: "script",
40-
41-
parserOptions: {
42-
project: ["tsconfig.json"],
43-
createDefaultProgram: true,
44-
},
45-
},
46-
4736
rules: {
4837
"no-shadow": "off",
4938
"no-prototype-builtins": "off",
@@ -83,6 +72,7 @@ export default [{
8372
}],
8473

8574
"@angular-eslint/no-input-rename": "off",
75+
"@angular-eslint/prefer-inject": "warn",
8676

8777
"brace-style": ["error", "1tbs"],
8878
"id-blacklist": "off",

0 commit comments

Comments
 (0)