igniteui-angular 19.2.13 → 19.2.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/fesm2022/igniteui-angular.mjs +365 -261
  2. package/fesm2022/igniteui-angular.mjs.map +1 -1
  3. package/lib/combo/combo.common.d.ts +8 -6
  4. package/lib/combo/combo.component.d.ts +1 -8
  5. package/lib/core/styles/components/calendar/_calendar-theme.scss +2 -1
  6. package/lib/core/styles/components/date-picker/_date-picker-theme.scss +8 -1
  7. package/lib/core/styles/components/drop-down/_drop-down-theme.scss +1 -1
  8. package/lib/core/styles/components/input/_input-group-theme.scss +20 -41
  9. package/lib/core/styles/components/query-builder/_query-builder-theme.scss +22 -8
  10. package/lib/directives/date-time-editor/date-time-editor.directive.d.ts +2 -0
  11. package/lib/directives/for-of/base.helper.component.d.ts +6 -1
  12. package/lib/directives/radio/radio-group.directive.d.ts +13 -1
  13. package/lib/grids/filtering/excel-style/excel-style-default-expression.component.d.ts +1 -1
  14. package/lib/radio/radio.component.d.ts +13 -2
  15. package/lib/time-picker/time-picker.directives.d.ts +6 -0
  16. package/migrations/migration-collection.json +5 -0
  17. package/migrations/update-19_2_15/index.d.ts +3 -0
  18. package/migrations/update-19_2_15/index.js +106 -0
  19. package/package.json +1 -1
  20. package/styles/igniteui-angular-dark.css +1 -1
  21. package/styles/igniteui-angular.css +1 -1
  22. package/styles/igniteui-bootstrap-dark.css +1 -1
  23. package/styles/igniteui-bootstrap-light.css +1 -1
  24. package/styles/igniteui-dark-green.css +1 -1
  25. package/styles/igniteui-fluent-dark-excel.css +1 -1
  26. package/styles/igniteui-fluent-dark-word.css +1 -1
  27. package/styles/igniteui-fluent-dark.css +1 -1
  28. package/styles/igniteui-fluent-light-excel.css +1 -1
  29. package/styles/igniteui-fluent-light-word.css +1 -1
  30. package/styles/igniteui-fluent-light.css +1 -1
  31. package/styles/igniteui-indigo-dark.css +1 -1
  32. package/styles/igniteui-indigo-light.css +1 -1
  33. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  34. package/styles/maps/igniteui-angular.css.map +1 -1
  35. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  36. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  37. package/styles/maps/igniteui-dark-green.css.map +1 -1
  38. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  39. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  40. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  41. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  42. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  43. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  44. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  45. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -55,11 +55,6 @@ export declare const enum DataTypes {
55
55
  export interface IComboFilteringOptions {
56
56
  /** Defines filtering case-sensitivity */
57
57
  caseSensitive?: boolean;
58
- /**
59
- * Defines whether filtering is allowed
60
- * @deprecated in version 18.2.0. Use the `disableFiltering` property instead.
61
- */
62
- filterable?: boolean;
63
58
  /** Defines optional key to filter against complex list items. Default to displayKey if provided.*/
64
59
  filteringKey?: string;
65
60
  }
@@ -86,6 +81,11 @@ export declare abstract class IgxComboBaseDirective implements IgxComboBase, Aft
86
81
  * ```
87
82
  */
88
83
  showSearchCaseIcon: boolean;
84
+ /**
85
+ * Enables/disables filtering in the list. The default is `false`.
86
+ */
87
+ get disableFiltering(): boolean;
88
+ set disableFiltering(value: boolean);
89
89
  /**
90
90
  * Set custom overlay settings that control how the combo's list of items is displayed.
91
91
  * Set:
@@ -689,6 +689,7 @@ export declare abstract class IgxComboBaseDirective implements IgxComboBase, Aft
689
689
  protected compareCollator: Intl.Collator;
690
690
  protected computedStyles: any;
691
691
  private _id;
692
+ private _disableFiltering;
692
693
  private _type;
693
694
  private _dataType;
694
695
  private _itemHeight;
@@ -823,8 +824,9 @@ export declare abstract class IgxComboBaseDirective implements IgxComboBase, Aft
823
824
  protected abstract setSelection(newSelection: Set<any>, event?: Event): void;
824
825
  protected abstract createDisplayText(newSelection: any[], oldSelection: any[]): any;
825
826
  static ɵfac: i0.ɵɵFactoryDeclaration<IgxComboBaseDirective, [null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
826
- static ɵdir: i0.ɵɵDirectiveDeclaration<IgxComboBaseDirective, never, never, { "showSearchCaseIcon": { "alias": "showSearchCaseIcon"; "required": false; }; "overlaySettings": { "alias": "overlaySettings"; "required": false; }; "id": { "alias": "id"; "required": false; }; "width": { "alias": "width"; "required": false; }; "allowCustomValues": { "alias": "allowCustomValues"; "required": false; }; "itemsMaxHeight": { "alias": "itemsMaxHeight"; "required": false; }; "itemHeight": { "alias": "itemHeight"; "required": false; }; "itemsWidth": { "alias": "itemsWidth"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "data": { "alias": "data"; "required": false; }; "valueKey": { "alias": "valueKey"; "required": false; }; "displayKey": { "alias": "displayKey"; "required": false; }; "groupKey": { "alias": "groupKey"; "required": false; }; "groupSortingDirection": { "alias": "groupSortingDirection"; "required": false; }; "filterFunction": { "alias": "filterFunction"; "required": false; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "type": { "alias": "type"; "required": false; }; "resourceStrings": { "alias": "resourceStrings"; "required": false; }; "filteringOptions": { "alias": "filteringOptions"; "required": false; }; }, { "opening": "opening"; "opened": "opened"; "closing": "closing"; "closed": "closed"; "addition": "addition"; "searchInputUpdate": "searchInputUpdate"; "dataPreLoad": "dataPreLoad"; }, ["itemTemplate", "headerTemplate", "footerTemplate", "headerItemTemplate", "addItemTemplate", "emptyTemplate", "toggleIconTemplate", "clearIconTemplate", "label", "prefixes", "suffixes"], never, true, never>;
827
+ static ɵdir: i0.ɵɵDirectiveDeclaration<IgxComboBaseDirective, never, never, { "showSearchCaseIcon": { "alias": "showSearchCaseIcon"; "required": false; }; "disableFiltering": { "alias": "disableFiltering"; "required": false; }; "overlaySettings": { "alias": "overlaySettings"; "required": false; }; "id": { "alias": "id"; "required": false; }; "width": { "alias": "width"; "required": false; }; "allowCustomValues": { "alias": "allowCustomValues"; "required": false; }; "itemsMaxHeight": { "alias": "itemsMaxHeight"; "required": false; }; "itemHeight": { "alias": "itemHeight"; "required": false; }; "itemsWidth": { "alias": "itemsWidth"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "data": { "alias": "data"; "required": false; }; "valueKey": { "alias": "valueKey"; "required": false; }; "displayKey": { "alias": "displayKey"; "required": false; }; "groupKey": { "alias": "groupKey"; "required": false; }; "groupSortingDirection": { "alias": "groupSortingDirection"; "required": false; }; "filterFunction": { "alias": "filterFunction"; "required": false; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "type": { "alias": "type"; "required": false; }; "resourceStrings": { "alias": "resourceStrings"; "required": false; }; "filteringOptions": { "alias": "filteringOptions"; "required": false; }; }, { "opening": "opening"; "opened": "opened"; "closing": "closing"; "closed": "closed"; "addition": "addition"; "searchInputUpdate": "searchInputUpdate"; "dataPreLoad": "dataPreLoad"; }, ["itemTemplate", "headerTemplate", "footerTemplate", "headerItemTemplate", "addItemTemplate", "emptyTemplate", "toggleIconTemplate", "clearIconTemplate", "label", "prefixes", "suffixes"], never, true, never>;
827
828
  static ngAcceptInputType_showSearchCaseIcon: unknown;
829
+ static ngAcceptInputType_disableFiltering: unknown;
828
830
  static ngAcceptInputType_allowCustomValues: unknown;
829
831
  static ngAcceptInputType_disabled: unknown;
830
832
  }
@@ -63,11 +63,6 @@ export declare class IgxComboComponent extends IgxComboBaseDirective implements
63
63
  * When `false`, the combo's list item container will be focused instead
64
64
  */
65
65
  autoFocusSearch: boolean;
66
- /**
67
- * Enables/disables filtering in the list. The default is `false`.
68
- */
69
- get disableFiltering(): boolean;
70
- set disableFiltering(value: boolean);
71
66
  /**
72
67
  * Defines the placeholder value for the combo dropdown search field
73
68
  *
@@ -100,7 +95,6 @@ export declare class IgxComboComponent extends IgxComboBaseDirective implements
100
95
  set filteredData(val: any[] | null);
101
96
  protected _prevInputValue: string;
102
97
  private _displayText;
103
- private _disableFiltering;
104
98
  constructor(elementRef: ElementRef, cdr: ChangeDetectorRef, selectionService: IgxSelectionAPIService, comboAPI: IgxComboAPIService, document: any, _inputGroupType: IgxInputGroupType, _injector: Injector, _iconService?: IgxIconService);
105
99
  onArrowDown(event: Event): void;
106
100
  /** @hidden @internal */
@@ -198,7 +192,6 @@ export declare class IgxComboComponent extends IgxComboBaseDirective implements
198
192
  /** Returns a string that should be populated in the combo's text box */
199
193
  private concatDisplayText;
200
194
  static ɵfac: i0.ɵɵFactoryDeclaration<IgxComboComponent, [null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
201
- static ɵcmp: i0.ɵɵComponentDeclaration<IgxComboComponent, "igx-combo", never, { "autoFocusSearch": { "alias": "autoFocusSearch"; "required": false; }; "disableFiltering": { "alias": "disableFiltering"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; }, { "selectionChanging": "selectionChanging"; }, never, ["[igxLabel]", "igx-prefix,[igxPrefix]", "igx-hint, [igxHint]", "igx-suffix,[igxSuffix]"], true, never>;
195
+ static ɵcmp: i0.ɵɵComponentDeclaration<IgxComboComponent, "igx-combo", never, { "autoFocusSearch": { "alias": "autoFocusSearch"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; }, { "selectionChanging": "selectionChanging"; }, never, ["[igxLabel]", "igx-prefix,[igxPrefix]", "igx-hint, [igxHint]", "igx-suffix,[igxSuffix]"], true, never>;
202
196
  static ngAcceptInputType_autoFocusSearch: unknown;
203
- static ngAcceptInputType_disableFiltering: unknown;
204
197
  }
@@ -660,7 +660,8 @@
660
660
  inner-size: $inner-size,
661
661
  theme: map.get($schema, '_meta', 'theme'),
662
662
  _meta: map.merge(if($meta, $meta, ()), (
663
- variant: map.get($schema, '_meta', 'theme')
663
+ variant: map.get($schema, '_meta', 'theme'),
664
+ theme-variant: map.get($schema, '_meta', 'variant')
664
665
  )),
665
666
  ));
666
667
  }
@@ -14,6 +14,7 @@
14
14
  /// @param {Map} $theme - The calendar theme used to style the component.
15
15
  @mixin date-picker($theme) {
16
16
  $variant: map.get($theme, '_meta', 'variant');
17
+ $theme-variant: map.get($theme, '_meta', 'theme-variant');
17
18
  $bootstrap-theme: $variant == 'bootstrap';
18
19
  $border-shadow: 0 0 0 rem(1px) var-get($theme, 'border-color');
19
20
 
@@ -26,11 +27,17 @@
26
27
 
27
28
  %date-picker {
28
29
  // TODO move the shadow in the schemas
29
- box-shadow: $border-shadow, elevation(24),;
30
+ box-shadow: $border-shadow, elevation(24);
30
31
  border-radius: var-get($theme, 'border-radius');
31
32
  background: var-get($theme, 'content-background');
32
33
  overflow: hidden;
33
34
 
35
+ @if $variant == 'indigo' and $theme-variant == 'light' {
36
+ box-shadow: $border-shadow, elevation(5);
37
+ } @else if $variant == 'indigo' and $theme-variant == 'dark' {
38
+ box-shadow: $border-shadow, elevation(7);
39
+ }
40
+
34
41
  igx-calendar,
35
42
  %days-view,
36
43
  %months-view,
@@ -243,7 +243,7 @@
243
243
  -webkit-overflow-scrolling: touch;
244
244
  position: relative;
245
245
 
246
- igx-display-container {
246
+ .igx-display-container--scrollbar {
247
247
  padding-inline-end: var(--vhelper-scrollbar-size);
248
248
  }
249
249
  }
@@ -396,19 +396,15 @@
396
396
 
397
397
  @if $variant == 'material' {
398
398
  %form-group-display--border {
399
+ --label-position: calc((#{var-get($theme, 'size')} / 2) - #{rem(1px)});
400
+
401
+
399
402
  &:has(input:-webkit-autofill, input:autofill) {
400
403
  %igx-input-group__notch--border {
401
404
  border-block-start-color: transparent;
402
405
  }
403
406
 
404
- %form-group-label {
405
- --label-position: #{sizable(18px, 22px, 26px)};
406
-
407
- transform: translateY(calc(var(--label-position) * -1));
408
- margin-top: 0;
409
- overflow: hidden;
410
- will-change: font-size, color, transform;
411
- }
407
+ @extend %form-group-label--float-border;
412
408
  }
413
409
  }
414
410
  }
@@ -1005,11 +1001,9 @@
1005
1001
 
1006
1002
  @if $variant == 'material' {
1007
1003
  %form-group-label--float {
1008
- --floating-label-position: -73%;
1009
-
1010
1004
  @include type-style('caption');
1011
1005
 
1012
- transform: translateY(var(--floating-label-position));
1006
+ translate: 0 -73%;
1013
1007
  }
1014
1008
  }
1015
1009
 
@@ -1090,12 +1084,19 @@
1090
1084
  }
1091
1085
 
1092
1086
  %form-group-label--float-border {
1093
- --label-position: #{sizable(18px, 22px, 26px)};
1094
-
1095
- transform: translateY(calc(var(--label-position) * -1));
1087
+ translate: 0 calc(var(--label-position) * -1);
1096
1088
  margin-top: 0;
1097
1089
  overflow: hidden;
1098
- will-change: font-size, color, transform;
1090
+ will-change: font-size, color, transform, translate;
1091
+ }
1092
+
1093
+ %textarea-group {
1094
+ // 3 lines * 22px + 8px bottom padding + 8px top padding
1095
+ --textarea-size: #{sizable(
1096
+ rem(82px, map.get($base-scale-size, 'compact')),
1097
+ rem(82px, map.get($base-scale-size, 'cosy')),
1098
+ rem(82px, map.get($base-scale-size, 'comfortable'))
1099
+ )};
1099
1100
  }
1100
1101
 
1101
1102
  @if $variant == 'material' {
@@ -1139,12 +1140,6 @@
1139
1140
  }
1140
1141
 
1141
1142
  %form-group-textarea-group-bundle {
1142
- // 3 lines * 22px + 8px bottom padding + 8px top padding
1143
- --textarea-size: #{sizable(
1144
- rem(82px, map.get($base-scale-size, 'compact')),
1145
- rem(82px, map.get($base-scale-size, 'cosy')),
1146
- rem(82px, map.get($base-scale-size, 'comfortable'))
1147
- )};
1148
1143
  min-height: var(--textarea-size) !important;
1149
1144
  height: auto !important;
1150
1145
 
@@ -1156,12 +1151,12 @@
1156
1151
  @if $material-theme {
1157
1152
  %form-group-textarea-label {
1158
1153
  top: calc($input-top-padding - #{rem(1px)});
1159
- margin-block-end: auto;
1160
1154
  }
1161
1155
 
1162
1156
  %textarea-group--outlined {
1163
1157
  %form-group-textarea-label {
1164
1158
  top: calc($input-top-padding - #{rem(3px)});
1159
+ margin-block-end: auto;
1165
1160
  }
1166
1161
  }
1167
1162
 
@@ -1171,16 +1166,10 @@
1171
1166
  }
1172
1167
  }
1173
1168
 
1174
- %textarea-group-label--focused {
1175
- transform: translateY(0);
1176
- top: calc(#{$input-top-padding} / 4);
1177
- }
1178
-
1179
1169
  %textarea-group-label--filled--border,
1180
1170
  %textarea-group-label--focused--border {
1181
1171
  top: 0;
1182
- transform: translateY(-50%);
1183
- margin-block-end: auto !important;
1172
+ translate: 0 -50%;
1184
1173
  }
1185
1174
 
1186
1175
  %textarea-group-notch--focused {
@@ -1361,12 +1350,6 @@
1361
1350
  }
1362
1351
 
1363
1352
  %form-group-textarea {
1364
- --textarea-size: #{sizable(
1365
- rem(82px, map.get($base-scale-size, 'compact')),
1366
- rem(82px, map.get($base-scale-size, 'cosy')),
1367
- rem(82px, map.get($base-scale-size, 'comfortable'))
1368
- )};
1369
-
1370
1353
  min-height: var(--textarea-size);
1371
1354
  height: auto;
1372
1355
  resize: vertical;
@@ -1374,7 +1357,7 @@
1374
1357
 
1375
1358
  @if $material-theme {
1376
1359
  padding: 0;
1377
- inset-block-start: rem(-3px);
1360
+ margin-block-start: rem(20px) !important;
1378
1361
  }
1379
1362
 
1380
1363
  // resets typography styles
@@ -1390,14 +1373,10 @@
1390
1373
  %form-group-textarea-group-bundle-main {
1391
1374
  overflow: hidden;
1392
1375
 
1393
- @if $material-theme or $indigo-theme {
1376
+ @if $indigo-theme {
1394
1377
  height: calc(100% - #{rem(2px)});
1395
1378
  top: rem(1px);
1396
1379
  }
1397
-
1398
- @if $material-theme {
1399
- padding-block-start: $input-top-padding;
1400
- }
1401
1380
  }
1402
1381
 
1403
1382
  %form-group-textarea--disabled {
@@ -114,6 +114,14 @@
114
114
  %advanced-filter {
115
115
  @include sizable();
116
116
 
117
+ --tree-scrollbar-gutter: #{rem(16px)};
118
+
119
+ @if $variant == 'bootstrap' {
120
+ --query-builder-outer-padding: #{rem(16px)};
121
+ } @else {
122
+ --query-builder-outer-padding: #{rem(24px)};
123
+ }
124
+
117
125
  width: auto;
118
126
  min-width: rem(660px);
119
127
  background-color: var-get($theme, 'background');
@@ -122,11 +130,19 @@
122
130
  overflow: hidden;
123
131
 
124
132
  &:has(:not(igx-query-builder-header)) {
125
- padding-block-start: if($variant != 'bootstrap', rem(24px), rem(16px))
133
+ padding-block-start: var(--query-builder-outer-padding);
134
+
135
+ %query-level-0 {
136
+ padding-block: 0 var(--query-builder-outer-padding);
137
+ }
126
138
  }
127
139
 
128
140
  &:has(igx-query-builder-header) {
129
141
  padding-block-start: 0;
142
+
143
+ %query-level-0 {
144
+ padding-block: if($variant != 'bootstrap', 0, rem(16px)) var(--query-builder-outer-padding);
145
+ }
130
146
  }
131
147
 
132
148
  .igx-chip__ghost {
@@ -145,10 +161,8 @@
145
161
  %query-level-0 {
146
162
  display: block;
147
163
  width: 100%;
148
- padding-inline: if($variant != 'bootstrap', rem(24px), rem(16px));
149
- padding-block:
150
- if($variant != 'bootstrap', 0, rem(16px))
151
- if($variant != 'bootstrap', rem(24px), rem(16px));
164
+
165
+ padding-inline: var(--query-builder-outer-padding);
152
166
 
153
167
  > %advanced-filter__main {
154
168
  gap: rem(16px);
@@ -159,7 +173,7 @@
159
173
  max-height: rem(570px);
160
174
  overflow-y: auto;
161
175
  overflow-x: hidden;
162
- padding-inline-end: rem(16px);
176
+ padding-inline-end: var(--tree-scrollbar-gutter);
163
177
  }
164
178
  }
165
179
  }
@@ -230,8 +244,8 @@
230
244
  margin-bottom: 0;
231
245
  border-block-end: rem(1px) solid var-get($theme, 'header-border');
232
246
 
233
- padding-inline: if($variant != 'bootstrap', rem(24px), rem(16px));
234
- padding-block: if($variant != 'bootstrap', rem(24px), rem(16px)) rem(16px);
247
+ padding-inline: var(--query-builder-outer-padding);
248
+ padding-block: var(--query-builder-outer-padding) rem(16px);
235
249
  }
236
250
 
237
251
  %advanced-filter__title {
@@ -156,7 +156,9 @@ export declare class IgxDateTimeEditorDirective extends IgxMaskDirective impleme
156
156
  * ```
157
157
  */
158
158
  validationFailed: EventEmitter<IgxDateTimeEditorEventArgs>;
159
+ private readonly SCROLL_THRESHOLD;
159
160
  private _inputFormat;
161
+ private _scrollAccumulator;
160
162
  private _displayFormat;
161
163
  private _oldValue;
162
164
  private _dateValue;
@@ -1,4 +1,4 @@
1
- import { ElementRef, ChangeDetectorRef, OnDestroy, AfterViewInit, NgZone } from '@angular/core';
1
+ import { ElementRef, ChangeDetectorRef, OnDestroy, AfterViewInit, NgZone, Renderer2 } from '@angular/core';
2
2
  import { Subject } from 'rxjs';
3
3
  import { PlatformUtil } from '../../core/utils';
4
4
  import * as i0 from "@angular/core";
@@ -15,6 +15,9 @@ export declare class VirtualHelperBaseDirective implements OnDestroy, AfterViewI
15
15
  private _afterViewInit;
16
16
  private _scrollNativeSize;
17
17
  private _detached;
18
+ protected renderer: Renderer2;
19
+ protected platformId: Object;
20
+ protected ngZone: NgZone;
18
21
  constructor(elementRef: ElementRef<HTMLElement>, cdr: ChangeDetectorRef, _zone: NgZone, document: any, platformUtil: PlatformUtil);
19
22
  onScroll(event: any): void;
20
23
  ngAfterViewInit(): void;
@@ -25,6 +28,8 @@ export declare class VirtualHelperBaseDirective implements OnDestroy, AfterViewI
25
28
  get size(): number;
26
29
  get scrollNativeSize(): number;
27
30
  protected get isAttachedToDom(): boolean;
31
+ private toggleClass;
32
+ private updateScrollbarClass;
28
33
  protected handleMutations(event: any): void;
29
34
  protected restoreScroll(): void;
30
35
  static ɵfac: i0.ɵɵFactoryDeclaration<VirtualHelperBaseDirective, never>;
@@ -302,13 +302,25 @@ export declare class IgxRadioGroupDirective implements ControlValueAccessor, OnD
302
302
  * @internal
303
303
  */
304
304
  private _setRadioButtonsRequired;
305
+ /**
306
+ * Registers a radio button with this radio group.
307
+ * This method is called by radio button components when they are created.
308
+ * @hidden @internal
309
+ */
310
+ _addRadioButton(radioButton: IgxRadioComponent): void;
311
+ /**
312
+ * Unregisters a radio button from this radio group.
313
+ * This method is called by radio button components when they are destroyed.
314
+ * @hidden @internal
315
+ */
316
+ _removeRadioButton(radioButton: IgxRadioComponent): void;
305
317
  /**
306
318
  * @hidden
307
319
  * @internal
308
320
  */
309
321
  private _setRadioButtonsInvalid;
310
322
  static ɵfac: i0.ɵɵFactoryDeclaration<IgxRadioGroupDirective, [{ optional: true; self: true; }, null, null]>;
311
- static ɵdir: i0.ɵɵDirectiveDeclaration<IgxRadioGroupDirective, "igx-radio-group, [igxRadioGroup]", ["igxRadioGroup"], { "value": { "alias": "value"; "required": false; }; "name": { "alias": "name"; "required": false; }; "required": { "alias": "required"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "invalid": { "alias": "invalid"; "required": false; }; "alignment": { "alias": "alignment"; "required": false; }; }, { "change": "change"; }, ["_radioButtons"], never, true, never>;
323
+ static ɵdir: i0.ɵɵDirectiveDeclaration<IgxRadioGroupDirective, "igx-radio-group, [igxRadioGroup]", ["igxRadioGroup"], { "value": { "alias": "value"; "required": false; }; "name": { "alias": "name"; "required": false; }; "required": { "alias": "required"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "invalid": { "alias": "invalid"; "required": false; }; "alignment": { "alias": "alignment"; "required": false; }; }, { "change": "change"; }, never, never, true, never>;
312
324
  static ngAcceptInputType_required: unknown;
313
325
  static ngAcceptInputType_invalid: unknown;
314
326
  }
@@ -50,7 +50,7 @@ export declare class IgxExcelStyleDefaultExpressionComponent implements AfterVie
50
50
  onConditionsChanged(eventArgs: any): void;
51
51
  getCondition(value: string): IFilteringOperation;
52
52
  getConditionFriendlyName(name: string): string;
53
- onValuesInput(eventArgs: any): void;
53
+ updateSearchValueOnBlur(eventArgs: any): void;
54
54
  onLogicOperatorButtonClicked(eventArgs: any, buttonIndex: number): void;
55
55
  onLogicOperatorKeyDown(eventArgs: KeyboardEvent, buttonIndex: number): void;
56
56
  onRemoveButtonClick(): void;
@@ -1,4 +1,4 @@
1
- import { AfterViewInit, EventEmitter } from '@angular/core';
1
+ import { AfterViewInit, EventEmitter, OnDestroy } from '@angular/core';
2
2
  import { ControlValueAccessor } from '@angular/forms';
3
3
  import { EditorProvider } from '../core/edit-provider';
4
4
  import { CheckboxBaseDirective } from '../checkbox/checkbox-base.directive';
@@ -16,9 +16,10 @@ import * as i0 from "@angular/core";
16
16
  * </igx-radio>
17
17
  * ```
18
18
  */
19
- export declare class IgxRadioComponent extends CheckboxBaseDirective implements AfterViewInit, ControlValueAccessor, EditorProvider {
19
+ export declare class IgxRadioComponent extends CheckboxBaseDirective implements AfterViewInit, OnDestroy, ControlValueAccessor, EditorProvider {
20
20
  /** @hidden @internal */
21
21
  blurRadio: EventEmitter<any>;
22
+ private radioGroup;
22
23
  /**
23
24
  * Returns the class of the radio component.
24
25
  * ```typescript
@@ -120,6 +121,16 @@ export declare class IgxRadioComponent extends CheckboxBaseDirective implements
120
121
  * @hidden
121
122
  */
122
123
  onBlur(): void;
124
+ /**
125
+ * @hidden
126
+ * @internal
127
+ */
128
+ ngAfterViewInit(): void;
129
+ /**
130
+ * @hidden
131
+ * @internal
132
+ */
133
+ ngOnDestroy(): void;
123
134
  static ɵfac: i0.ɵɵFactoryDeclaration<IgxRadioComponent, never>;
124
135
  static ɵcmp: i0.ɵɵComponentDeclaration<IgxRadioComponent, "igx-radio", never, { "checked": { "alias": "checked"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "invalid": { "alias": "invalid"; "required": false; }; }, {}, never, ["*"], true, never>;
125
136
  static ngAcceptInputType_checked: unknown;
@@ -16,6 +16,12 @@ export declare class IgxItemListDirective implements OnInit, OnDestroy {
16
16
  tabindex: number;
17
17
  type: string;
18
18
  isActive: boolean;
19
+ private readonly SCROLL_THRESHOLD;
20
+ private readonly PAN_THRESHOLD;
21
+ /**
22
+ * accumulates wheel scrolls and triggers a change action above SCROLL_THRESHOLD
23
+ */
24
+ private scrollAccumulator;
19
25
  constructor(timePicker: IgxTimePickerBase, elementRef: ElementRef, touchManager: HammerGesturesManager);
20
26
  get defaultCSS(): boolean;
21
27
  get hourCSS(): boolean;
@@ -226,6 +226,11 @@
226
226
  "version": "19.2.0",
227
227
  "description": "Updates Ignite UI for Angular from v19.1.0 to v19.2.0",
228
228
  "factory": "./update-19_2_0"
229
+ },
230
+ "migration-46": {
231
+ "version": "19.2.15",
232
+ "description": "Updates Ignite UI for Angular from v19.2.0 to v19.2.15",
233
+ "factory": "./update-19_2_15"
229
234
  }
230
235
  }
231
236
  }
@@ -0,0 +1,3 @@
1
+ import type { Rule } from '@angular-devkit/schematics';
2
+ declare const _default: () => Rule;
3
+ export default _default;
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const compiler_1 = require("@angular/compiler");
13
+ const UpdateChanges_1 = require("../common/UpdateChanges");
14
+ const util_1 = require("../common/util");
15
+ const import_helper_js_1 = require("igniteui-angular/migrations/common/import-helper.js");
16
+ const version = '19.2.15';
17
+ exports.default = () => (host, context) => __awaiter(void 0, void 0, void 0, function* () {
18
+ context.logger.info(`Applying migration for Ignite UI for Angular to version ${version}`);
19
+ const { HtmlParser } = yield (0, import_helper_js_1.nativeImport)('@angular/compiler');
20
+ const update = new UpdateChanges_1.UpdateChanges(__dirname, host, context);
21
+ const changes = new Map();
22
+ const parser = new HtmlParser();
23
+ const warnMsg = "Manual migration needed: please use 'disableFiltering' instead of filteringOptions.filterable." +
24
+ "Since it has been deprecated.'";
25
+ const applyChanges = () => {
26
+ for (const [path, fileChanges] of changes.entries()) {
27
+ let content = host.read(path).toString();
28
+ fileChanges.sort((a, b) => b.position - a.position).forEach(c => {
29
+ content = c.apply(content);
30
+ });
31
+ host.overwrite(path, content);
32
+ }
33
+ };
34
+ const addChange = (path, change) => {
35
+ if (!changes.has(path)) {
36
+ changes.set(path, []);
37
+ }
38
+ changes.get(path).push(change);
39
+ };
40
+ const COMBO_TAGS = ['igx-simple-combo', 'igx-combo'];
41
+ for (const path of update.templateFiles) {
42
+ const nodes = (0, util_1.findElementNodes)((0, util_1.parseFile)(parser, host, path), COMBO_TAGS);
43
+ for (const node of nodes) {
44
+ if (!(node instanceof compiler_1.Element))
45
+ continue;
46
+ const hasDisableFiltering = node.attrs.some(a => a.name.includes('disableFiltering'));
47
+ const attr = node.attrs.find(a => a.name === '[filteringOptions]');
48
+ if (!attr)
49
+ continue;
50
+ const attrVal = attr.value.trim();
51
+ const offset = (0, util_1.getSourceOffset)(node);
52
+ const file = offset.file;
53
+ let replacementText = '';
54
+ if (attrVal.startsWith('{')) {
55
+ // inline object literal
56
+ const normalized = attrVal
57
+ .replace(/'/g, '"')
58
+ .replace(/([{,]\s*)(\w+)\s*:/g, '$1"$2":');
59
+ const parsed = JSON.parse(normalized);
60
+ const filterable = parsed.filterable;
61
+ if (filterable === false && !hasDisableFiltering) {
62
+ replacementText += `[disableFiltering]="true"`;
63
+ }
64
+ const remaining = Object.assign({}, parsed);
65
+ delete remaining.filterable;
66
+ const remainingProps = Object.entries(remaining)
67
+ .map(([k, v]) => `${k}: ${JSON.stringify(v)}`)
68
+ .join(', ');
69
+ if (remainingProps.length > 0) {
70
+ replacementText += ` [filteringOptions]="{ ${remainingProps} }"`;
71
+ }
72
+ // Replace whole [filteringOptions] attribute
73
+ const match = node.sourceSpan.toString().match(/\[filteringOptions\]="([^"]+)"/);
74
+ if (match) {
75
+ const attrText = match[0];
76
+ const attrPos = file.content.indexOf(attrText, offset.startTag.start);
77
+ addChange(file.url, new util_1.FileChange(attrPos, replacementText, attrText, 'replace'));
78
+ }
79
+ }
80
+ else {
81
+ // log for manual TS edit
82
+ const comment = `\n<!-- ${warnMsg} -->\n`;
83
+ addChange(file.url, new util_1.FileChange(offset.startTag.end, comment));
84
+ }
85
+ }
86
+ }
87
+ applyChanges();
88
+ for (const path of update.tsFiles) {
89
+ const content = host.read(path).toString();
90
+ const lines = content.split('\n');
91
+ const newLines = [];
92
+ let modified = false;
93
+ for (const line of lines) {
94
+ if (/\.filteringOptions\.filterable\s*=/.test(line) ||
95
+ /\.filteringOptions\s*=/.test(line)) {
96
+ newLines.push('// ' + warnMsg);
97
+ modified = true;
98
+ }
99
+ newLines.push(line);
100
+ }
101
+ if (modified) {
102
+ host.overwrite(path, newLines.join('\n'));
103
+ }
104
+ }
105
+ update.applyChanges();
106
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "igniteui-angular",
3
- "version": "19.2.13",
3
+ "version": "19.2.15",
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",