igniteui-angular 20.0.5 → 20.0.7

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 (35) hide show
  1. package/fesm2022/igniteui-angular.mjs +317 -249
  2. package/fesm2022/igniteui-angular.mjs.map +1 -1
  3. package/index.d.ts +43 -17
  4. package/lib/core/styles/components/calendar/_calendar-theme.scss +33 -5
  5. package/migrations/migration-collection.json +5 -0
  6. package/migrations/update-20_0_6/index.d.ts +3 -0
  7. package/migrations/update-20_0_6/index.js +106 -0
  8. package/package.json +2 -2
  9. package/schematics/tsconfig.tsbuildinfo +1 -1
  10. package/styles/igniteui-angular-dark.css +1 -1
  11. package/styles/igniteui-angular.css +1 -1
  12. package/styles/igniteui-bootstrap-dark.css +1 -1
  13. package/styles/igniteui-bootstrap-light.css +1 -1
  14. package/styles/igniteui-dark-green.css +1 -1
  15. package/styles/igniteui-fluent-dark-excel.css +1 -1
  16. package/styles/igniteui-fluent-dark-word.css +1 -1
  17. package/styles/igniteui-fluent-dark.css +1 -1
  18. package/styles/igniteui-fluent-light-excel.css +1 -1
  19. package/styles/igniteui-fluent-light-word.css +1 -1
  20. package/styles/igniteui-fluent-light.css +1 -1
  21. package/styles/igniteui-indigo-dark.css +1 -1
  22. package/styles/igniteui-indigo-light.css +1 -1
  23. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  24. package/styles/maps/igniteui-angular.css.map +1 -1
  25. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  26. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  27. package/styles/maps/igniteui-dark-green.css.map +1 -1
  28. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  29. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  30. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  31. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  32. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  33. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  34. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  35. package/styles/maps/igniteui-indigo-light.css.map +1 -1
package/index.d.ts CHANGED
@@ -11063,9 +11063,10 @@ declare class CheckboxBaseDirective implements AfterViewInit {
11063
11063
  * </igx-radio>
11064
11064
  * ```
11065
11065
  */
11066
- declare class IgxRadioComponent extends CheckboxBaseDirective implements AfterViewInit, ControlValueAccessor, EditorProvider {
11066
+ declare class IgxRadioComponent extends CheckboxBaseDirective implements AfterViewInit, OnDestroy, ControlValueAccessor, EditorProvider {
11067
11067
  /** @hidden @internal */
11068
11068
  blurRadio: EventEmitter<any>;
11069
+ private radioGroup;
11069
11070
  /**
11070
11071
  * Returns the class of the radio component.
11071
11072
  * ```typescript
@@ -11167,6 +11168,16 @@ declare class IgxRadioComponent extends CheckboxBaseDirective implements AfterVi
11167
11168
  * @hidden
11168
11169
  */
11169
11170
  onBlur(): void;
11171
+ /**
11172
+ * @hidden
11173
+ * @internal
11174
+ */
11175
+ ngAfterViewInit(): void;
11176
+ /**
11177
+ * @hidden
11178
+ * @internal
11179
+ */
11180
+ ngOnDestroy(): void;
11170
11181
  static ɵfac: i0.ɵɵFactoryDeclaration<IgxRadioComponent, never>;
11171
11182
  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>;
11172
11183
  static ngAcceptInputType_checked: unknown;
@@ -11664,13 +11675,25 @@ declare class IgxRadioGroupDirective implements ControlValueAccessor, OnDestroy,
11664
11675
  * @internal
11665
11676
  */
11666
11677
  private _setRadioButtonsRequired;
11678
+ /**
11679
+ * Registers a radio button with this radio group.
11680
+ * This method is called by radio button components when they are created.
11681
+ * @hidden @internal
11682
+ */
11683
+ _addRadioButton(radioButton: IgxRadioComponent): void;
11684
+ /**
11685
+ * Unregisters a radio button from this radio group.
11686
+ * This method is called by radio button components when they are destroyed.
11687
+ * @hidden @internal
11688
+ */
11689
+ _removeRadioButton(radioButton: IgxRadioComponent): void;
11667
11690
  /**
11668
11691
  * @hidden
11669
11692
  * @internal
11670
11693
  */
11671
11694
  private _setRadioButtonsInvalid;
11672
11695
  static ɵfac: i0.ɵɵFactoryDeclaration<IgxRadioGroupDirective, [{ optional: true; self: true; }, null, null]>;
11673
- 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>;
11696
+ 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>;
11674
11697
  static ngAcceptInputType_required: unknown;
11675
11698
  static ngAcceptInputType_invalid: unknown;
11676
11699
  }
@@ -12372,7 +12395,9 @@ declare class IgxDateTimeEditorDirective extends IgxMaskDirective implements OnC
12372
12395
  * ```
12373
12396
  */
12374
12397
  validationFailed: EventEmitter<IgxDateTimeEditorEventArgs>;
12398
+ private readonly SCROLL_THRESHOLD;
12375
12399
  private _inputFormat;
12400
+ private _scrollAccumulator;
12376
12401
  private _displayFormat;
12377
12402
  private _oldValue;
12378
12403
  private _dateValue;
@@ -19086,11 +19111,6 @@ interface IgxComboBase {
19086
19111
  interface IComboFilteringOptions {
19087
19112
  /** Defines filtering case-sensitivity */
19088
19113
  caseSensitive?: boolean;
19089
- /**
19090
- * Defines whether filtering is allowed
19091
- * @deprecated in version 18.2.0. Use the `disableFiltering` property instead.
19092
- */
19093
- filterable?: boolean;
19094
19114
  /** Defines optional key to filter against complex list items. Default to displayKey if provided.*/
19095
19115
  filteringKey?: string;
19096
19116
  }
@@ -19117,6 +19137,11 @@ declare abstract class IgxComboBaseDirective implements IgxComboBase, AfterViewC
19117
19137
  * ```
19118
19138
  */
19119
19139
  showSearchCaseIcon: boolean;
19140
+ /**
19141
+ * Enables/disables filtering in the list. The default is `false`.
19142
+ */
19143
+ get disableFiltering(): boolean;
19144
+ set disableFiltering(value: boolean);
19120
19145
  /**
19121
19146
  * Set custom overlay settings that control how the combo's list of items is displayed.
19122
19147
  * Set:
@@ -19720,6 +19745,7 @@ declare abstract class IgxComboBaseDirective implements IgxComboBase, AfterViewC
19720
19745
  protected compareCollator: Intl.Collator;
19721
19746
  protected computedStyles: any;
19722
19747
  private _id;
19748
+ private _disableFiltering;
19723
19749
  private _type;
19724
19750
  private _dataType;
19725
19751
  private _itemHeight;
@@ -19854,8 +19880,9 @@ declare abstract class IgxComboBaseDirective implements IgxComboBase, AfterViewC
19854
19880
  protected abstract setSelection(newSelection: Set<any>, event?: Event): void;
19855
19881
  protected abstract createDisplayText(newSelection: any[], oldSelection: any[]): any;
19856
19882
  static ɵfac: i0.ɵɵFactoryDeclaration<IgxComboBaseDirective, [null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
19857
- 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>;
19883
+ 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>;
19858
19884
  static ngAcceptInputType_showSearchCaseIcon: unknown;
19885
+ static ngAcceptInputType_disableFiltering: unknown;
19859
19886
  static ngAcceptInputType_allowCustomValues: unknown;
19860
19887
  static ngAcceptInputType_disabled: unknown;
19861
19888
  }
@@ -20093,11 +20120,6 @@ declare class IgxComboComponent extends IgxComboBaseDirective implements AfterVi
20093
20120
  * When `false`, the combo's list item container will be focused instead
20094
20121
  */
20095
20122
  autoFocusSearch: boolean;
20096
- /**
20097
- * Enables/disables filtering in the list. The default is `false`.
20098
- */
20099
- get disableFiltering(): boolean;
20100
- set disableFiltering(value: boolean);
20101
20123
  /**
20102
20124
  * Defines the placeholder value for the combo dropdown search field
20103
20125
  *
@@ -20130,7 +20152,6 @@ declare class IgxComboComponent extends IgxComboBaseDirective implements AfterVi
20130
20152
  set filteredData(val: any[] | null);
20131
20153
  protected _prevInputValue: string;
20132
20154
  private _displayText;
20133
- private _disableFiltering;
20134
20155
  constructor(elementRef: ElementRef, cdr: ChangeDetectorRef, selectionService: IgxSelectionAPIService, comboAPI: IgxComboAPIService, document: any, _inputGroupType: IgxInputGroupType, _injector: Injector, _iconService?: IgxIconService);
20135
20156
  onArrowDown(event: Event): void;
20136
20157
  /** @hidden @internal */
@@ -20228,9 +20249,8 @@ declare class IgxComboComponent extends IgxComboBaseDirective implements AfterVi
20228
20249
  /** Returns a string that should be populated in the combo's text box */
20229
20250
  private concatDisplayText;
20230
20251
  static ɵfac: i0.ɵɵFactoryDeclaration<IgxComboComponent, [null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
20231
- 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>;
20252
+ 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>;
20232
20253
  static ngAcceptInputType_autoFocusSearch: unknown;
20233
- static ngAcceptInputType_disableFiltering: unknown;
20234
20254
  }
20235
20255
 
20236
20256
  /**
@@ -25948,7 +25968,7 @@ declare class IgxExcelStyleDefaultExpressionComponent implements AfterViewInit {
25948
25968
  onConditionsChanged(eventArgs: any): void;
25949
25969
  getCondition(value: string): IFilteringOperation;
25950
25970
  getConditionFriendlyName(name: string): string;
25951
- onValuesInput(eventArgs: any): void;
25971
+ updateSearchValueOnBlur(eventArgs: any): void;
25952
25972
  onLogicOperatorButtonClicked(eventArgs: any, buttonIndex: number): void;
25953
25973
  onLogicOperatorKeyDown(eventArgs: KeyboardEvent, buttonIndex: number): void;
25954
25974
  onRemoveButtonClick(): void;
@@ -40964,6 +40984,12 @@ declare class IgxItemListDirective implements OnInit, OnDestroy {
40964
40984
  tabindex: number;
40965
40985
  type: string;
40966
40986
  isActive: boolean;
40987
+ private readonly SCROLL_THRESHOLD;
40988
+ private readonly PAN_THRESHOLD;
40989
+ /**
40990
+ * accumulates wheel scrolls and triggers a change action above SCROLL_THRESHOLD
40991
+ */
40992
+ private scrollAccumulator;
40967
40993
  constructor(timePicker: IgxTimePickerBase, elementRef: ElementRef, touchManager: HammerGesturesManager);
40968
40994
  get defaultCSS(): boolean;
40969
40995
  get hourCSS(): boolean;
@@ -157,6 +157,8 @@
157
157
  /// @param {List} $border-radius [null] - The border radius used for the calendar.
158
158
  /// @param {List} $date-border-radius [null] - The border radius used for the date.
159
159
  /// @param {List} $date-range-border-radius [null] - The border radius used for the date range selection.
160
+ /// @param {List} $date-current-border-radius [null] - The border radius used for the current date .
161
+ /// @param {List} $date-special-border-radius [null] - The border radius used for the special date.
160
162
  /// @param {List} $ym-border-radius [null] - The border radius used for the month/year.
161
163
  ///
162
164
  /// @param {Color} $actions-divider-color [null] - The border color used for the date-picker actions divider.
@@ -310,6 +312,8 @@
310
312
  $date-border-radius: null,
311
313
  $week-number-border-radius: null,
312
314
  $date-range-border-radius: null,
315
+ $date-current-border-radius: null,
316
+ $date-special-border-radius: null,
313
317
  $ym-border-radius: null,
314
318
 
315
319
  $actions-divider-color: null,
@@ -330,6 +334,22 @@
330
334
  $theme: digest-schema($calendar-schema);
331
335
  $variant: map.get($schema, '_meta', 'theme');
332
336
 
337
+ @if not($date-range-border-radius) and $date-border-radius {
338
+ $date-range-border-radius: $date-border-radius;
339
+ }
340
+
341
+ @if not($date-border-radius) and $date-range-border-radius {
342
+ $date-border-radius: $date-range-border-radius;
343
+ }
344
+
345
+ @if not($date-current-border-radius) and $date-border-radius {
346
+ $date-current-border-radius: $date-border-radius;
347
+ }
348
+
349
+ @if not($date-special-border-radius) and $date-border-radius {
350
+ $date-special-border-radius: $date-border-radius;
351
+ }
352
+
333
353
  //base start
334
354
  @if not($header-foreground) and $header-background {
335
355
  $header-foreground: adaptive-contrast(var(--header-background));
@@ -1031,6 +1051,8 @@
1031
1051
  border-radius: $border-radius,
1032
1052
  date-border-radius: $date-border-radius,
1033
1053
  date-range-border-radius: $date-range-border-radius,
1054
+ date-current-border-radius: $date-current-border-radius,
1055
+ date-special-border-radius: $date-special-border-radius,
1034
1056
  ym-border-radius: $ym-border-radius,
1035
1057
  week-number-border-radius: $week-number-border-radius,
1036
1058
  date-border-color: $date-border-color,
@@ -1827,13 +1849,12 @@
1827
1849
  position: absolute;
1828
1850
  z-index: 0;
1829
1851
  border: $border-size solid transparent;
1852
+ border-radius: calc(var-get($theme, 'date-special-border-radius') - $border-size);
1830
1853
 
1831
1854
  @if $variant == 'fluent' {
1832
- border-radius: 50%;
1833
1855
  width: $date-inner-size;
1834
1856
  height: $date-inner-size;
1835
1857
  } @else {
1836
- border-radius: inherit;
1837
1858
  // By default initial size of the inner element is the same as the date size
1838
1859
  width: $date-size;
1839
1860
  height: $date-size;
@@ -1964,6 +1985,7 @@
1964
1985
  background: var-get($theme, 'date-special-range-hover-background');
1965
1986
 
1966
1987
  @if $variant == 'indigo' {
1988
+ // stylelint-disable-next-line
1967
1989
  &::after {
1968
1990
  border-color: var-get($theme, 'date-special-hover-border-color');
1969
1991
  }
@@ -2041,9 +2063,13 @@
2041
2063
  z-index: -1;
2042
2064
  width: $date-inner-size;
2043
2065
  height: $date-inner-size;
2044
- border-radius: 50%;
2066
+ border-radius: calc(var-get($theme, 'date-current-border-radius') - ($border-size * 2));
2045
2067
  background: var-get($theme, 'date-current-background');
2046
2068
  }
2069
+
2070
+ &::after {
2071
+ border-radius: calc(var-get($theme, 'date-current-border-radius') - $border-size);
2072
+ }
2047
2073
  }
2048
2074
 
2049
2075
  @if $variant == 'indigo' {
@@ -2089,8 +2115,8 @@
2089
2115
  &::after {
2090
2116
  border-color: var-get($theme, 'date-special-border-color');
2091
2117
 
2092
- @if $variant == 'bootstrap' {
2093
- border-radius: $date-size;
2118
+ @if $variant == 'bootstrap' or $variant == 'fluent' {
2119
+ border-radius: calc(var-get($theme, 'date-special-border-radius') - ($border-size * 2));
2094
2120
  }
2095
2121
  }
2096
2122
 
@@ -2232,6 +2258,7 @@
2232
2258
  }
2233
2259
 
2234
2260
  &:hover {
2261
+ // stylelint-disable-next-line
2235
2262
  &::after {
2236
2263
  border-color: var-get($theme, 'date-selected-special-hover-border-color');
2237
2264
  }
@@ -2343,6 +2370,7 @@
2343
2370
  }
2344
2371
 
2345
2372
  &:hover {
2373
+ // stylelint-disable-next-line
2346
2374
  &::after {
2347
2375
  border-color: var-get($theme, 'date-current-hover-border-color');
2348
2376
  }
@@ -236,6 +236,11 @@
236
236
  "version": "20.0.2",
237
237
  "description": "Updates Ignite UI for Angular from v20.0.0 to v20.0.2",
238
238
  "factory": "./update-20_0_2"
239
+ },
240
+ "migration-48": {
241
+ "version": "20.0.6",
242
+ "description": "Updates Ignite UI for Angular from v20.0.2 to v20.0.6",
243
+ "factory": "./update-20_0_6"
239
244
  }
240
245
  }
241
246
  }
@@ -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 = '20.0.6';
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": "20.0.5",
3
+ "version": "20.0.7",
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",
@@ -73,7 +73,7 @@
73
73
  "tslib": "^2.3.0",
74
74
  "igniteui-trial-watermark": "^3.1.0",
75
75
  "lodash-es": "^4.17.21",
76
- "igniteui-theming": "^18.0.1",
76
+ "igniteui-theming": "^19.1.2",
77
77
  "@igniteui/material-icons-extended": "^3.1.0"
78
78
  },
79
79
  "peerDependencies": {