igniteui-angular 19.2.14 → 19.2.16

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 (43) hide show
  1. package/fesm2022/igniteui-angular.mjs +364 -259
  2. package/fesm2022/igniteui-angular.mjs.map +1 -1
  3. package/lib/combo/combo.common.d.ts +12 -6
  4. package/lib/combo/combo.component.d.ts +9 -8
  5. package/lib/core/i18n/combo-resources.d.ts +2 -0
  6. package/lib/core/styles/components/combo/_combo-theme.scss +8 -0
  7. package/lib/core/styles/components/input/_input-group-theme.scss +20 -41
  8. package/lib/directives/date-time-editor/date-time-editor.directive.d.ts +2 -0
  9. package/lib/directives/radio/radio-group.directive.d.ts +13 -1
  10. package/lib/grids/filtering/excel-style/excel-style-default-expression.component.d.ts +1 -1
  11. package/lib/radio/radio.component.d.ts +13 -2
  12. package/lib/simple-combo/simple-combo.component.d.ts +4 -0
  13. package/lib/time-picker/time-picker.directives.d.ts +6 -0
  14. package/migrations/migration-collection.json +5 -0
  15. package/migrations/update-19_2_15/index.d.ts +3 -0
  16. package/migrations/update-19_2_15/index.js +106 -0
  17. package/package.json +1 -1
  18. package/styles/igniteui-angular-dark.css +1 -1
  19. package/styles/igniteui-angular.css +1 -1
  20. package/styles/igniteui-bootstrap-dark.css +1 -1
  21. package/styles/igniteui-bootstrap-light.css +1 -1
  22. package/styles/igniteui-dark-green.css +1 -1
  23. package/styles/igniteui-fluent-dark-excel.css +1 -1
  24. package/styles/igniteui-fluent-dark-word.css +1 -1
  25. package/styles/igniteui-fluent-dark.css +1 -1
  26. package/styles/igniteui-fluent-light-excel.css +1 -1
  27. package/styles/igniteui-fluent-light-word.css +1 -1
  28. package/styles/igniteui-fluent-light.css +1 -1
  29. package/styles/igniteui-indigo-dark.css +1 -1
  30. package/styles/igniteui-indigo-light.css +1 -1
  31. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  32. package/styles/maps/igniteui-angular.css.map +1 -1
  33. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  34. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  35. package/styles/maps/igniteui-dark-green.css.map +1 -1
  36. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  37. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  38. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  39. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  40. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  41. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  42. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  43. 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;
@@ -779,6 +780,10 @@ export declare abstract class IgxComboBaseDirective implements IgxComboBase, Aft
779
780
  /** @hidden @internal */
780
781
  handleKeyDown(event: KeyboardEvent): void;
781
782
  /** @hidden @internal */
783
+ handleToggleKeyDown(eventArgs: KeyboardEvent): void;
784
+ /** @hidden @internal */
785
+ getAriaLabel(): string;
786
+ /** @hidden @internal */
782
787
  registerOnChange(fn: any): void;
783
788
  /** @hidden @internal */
784
789
  registerOnTouched(fn: any): void;
@@ -823,8 +828,9 @@ export declare abstract class IgxComboBaseDirective implements IgxComboBase, Aft
823
828
  protected abstract setSelection(newSelection: Set<any>, event?: Event): void;
824
829
  protected abstract createDisplayText(newSelection: any[], oldSelection: any[]): any;
825
830
  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>;
831
+ 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
832
  static ngAcceptInputType_showSearchCaseIcon: unknown;
833
+ static ngAcceptInputType_disableFiltering: unknown;
828
834
  static ngAcceptInputType_allowCustomValues: unknown;
829
835
  static ngAcceptInputType_disabled: unknown;
830
836
  }
@@ -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 */
@@ -127,10 +121,18 @@ export declare class IgxComboComponent extends IgxComboBaseDirective implements
127
121
  * @hidden @internal
128
122
  */
129
123
  get context(): any;
124
+ /**
125
+ * @hidden @internal
126
+ */
127
+ clearInput(event: Event): void;
130
128
  /**
131
129
  * @hidden @internal
132
130
  */
133
131
  handleClearItems(event: Event): void;
132
+ /**
133
+ * @hidden @internal
134
+ */
135
+ handleClearKeyDown(eventArgs: KeyboardEvent): void;
134
136
  /**
135
137
  * Select defined items
136
138
  *
@@ -198,7 +200,6 @@ export declare class IgxComboComponent extends IgxComboBaseDirective implements
198
200
  /** Returns a string that should be populated in the combo's text box */
199
201
  private concatDisplayText;
200
202
  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>;
203
+ 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
204
  static ngAcceptInputType_autoFocusSearch: unknown;
203
- static ngAcceptInputType_disableFiltering: unknown;
204
205
  }
@@ -3,5 +3,7 @@ export interface IComboResourceStrings {
3
3
  igx_combo_filter_search_placeholder?: string;
4
4
  igx_combo_addCustomValues_placeholder?: string;
5
5
  igx_combo_clearItems_placeholder?: string;
6
+ igx_combo_aria_label_options?: string;
7
+ igx_combo_aria_label_no_options?: string;
6
8
  }
7
9
  export declare const ComboResourceStringsEN: IComboResourceStrings;
@@ -276,11 +276,19 @@
276
276
  %igx-combo__toggle-button {
277
277
  color: var-get($theme, 'toggle-button-foreground-focus');
278
278
  background: var-get($theme, 'toggle-button-background-focus');
279
+
280
+ &:focus {
281
+ color: color($color: 'secondary');
282
+ }
279
283
  }
280
284
 
281
285
  %igx-combo__clear-button {
282
286
  color: var-get($theme, 'clear-button-foreground-focus');
283
287
  background: var-get($theme, 'clear-button-background-focus');
288
+
289
+ &:focus {
290
+ color: color($color: 'secondary');
291
+ }
284
292
  }
285
293
  }
286
294
 
@@ -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 {
@@ -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;
@@ -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;
@@ -124,8 +124,12 @@ export declare class IgxSimpleComboComponent extends IgxComboBaseDirective imple
124
124
  /** @hidden @internal */
125
125
  getEditElement(): HTMLElement;
126
126
  /** @hidden @internal */
127
+ clearInput(event: Event): void;
128
+ /** @hidden @internal */
127
129
  handleClear(event: Event): void;
128
130
  /** @hidden @internal */
131
+ handleClearKeyDown(event: KeyboardEvent): void;
132
+ /** @hidden @internal */
129
133
  handleOpened(): void;
130
134
  /** @hidden @internal */
131
135
  handleClosing(e: IBaseCancelableBrowserEventArgs): void;
@@ -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.14",
3
+ "version": "19.2.16",
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",