igniteui-angular 22.2.0-rc.0 → 22.2.0-rc.2

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 (111) hide show
  1. package/README.md +1 -1
  2. package/button-group/README.md +42 -9
  3. package/calendar/README.md +30 -20
  4. package/card/README.md +1 -1
  5. package/fesm2022/igniteui-angular-accordion.mjs +7 -7
  6. package/fesm2022/igniteui-angular-action-strip.mjs +11 -22
  7. package/fesm2022/igniteui-angular-action-strip.mjs.map +1 -1
  8. package/fesm2022/igniteui-angular-avatar.mjs +7 -7
  9. package/fesm2022/igniteui-angular-badge.mjs +7 -7
  10. package/fesm2022/igniteui-angular-banner.mjs +10 -10
  11. package/fesm2022/igniteui-angular-bottom-nav.mjs +22 -22
  12. package/fesm2022/igniteui-angular-button-group.mjs +32 -35
  13. package/fesm2022/igniteui-angular-button-group.mjs.map +1 -1
  14. package/fesm2022/igniteui-angular-calendar.mjs +132 -180
  15. package/fesm2022/igniteui-angular-calendar.mjs.map +1 -1
  16. package/fesm2022/igniteui-angular-card.mjs +47 -58
  17. package/fesm2022/igniteui-angular-card.mjs.map +1 -1
  18. package/fesm2022/igniteui-angular-carousel.mjs +22 -22
  19. package/fesm2022/igniteui-angular-chat-extras.mjs +6 -6
  20. package/fesm2022/igniteui-angular-chat.mjs +12 -12
  21. package/fesm2022/igniteui-angular-checkbox.mjs +7 -7
  22. package/fesm2022/igniteui-angular-chips.mjs +10 -10
  23. package/fesm2022/igniteui-angular-combo.mjs +69 -67
  24. package/fesm2022/igniteui-angular-combo.mjs.map +1 -1
  25. package/fesm2022/igniteui-angular-core.mjs +139 -92
  26. package/fesm2022/igniteui-angular-core.mjs.map +1 -1
  27. package/fesm2022/igniteui-angular-date-picker.mjs +53 -70
  28. package/fesm2022/igniteui-angular-date-picker.mjs.map +1 -1
  29. package/fesm2022/igniteui-angular-dialog.mjs +13 -13
  30. package/fesm2022/igniteui-angular-directives.mjs +194 -194
  31. package/fesm2022/igniteui-angular-drop-down.mjs +29 -29
  32. package/fesm2022/igniteui-angular-expansion-panel.mjs +28 -28
  33. package/fesm2022/igniteui-angular-grids-core.mjs +737 -661
  34. package/fesm2022/igniteui-angular-grids-core.mjs.map +1 -1
  35. package/fesm2022/igniteui-angular-grids-grid.mjs +49 -49
  36. package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs +37 -37
  37. package/fesm2022/igniteui-angular-grids-lite.mjs +25 -17
  38. package/fesm2022/igniteui-angular-grids-lite.mjs.map +1 -1
  39. package/fesm2022/igniteui-angular-grids-pivot-grid.mjs +80 -80
  40. package/fesm2022/igniteui-angular-grids-pivot-grid.mjs.map +1 -1
  41. package/fesm2022/igniteui-angular-grids-tree-grid.mjs +55 -55
  42. package/fesm2022/igniteui-angular-icon.mjs +10 -10
  43. package/fesm2022/igniteui-angular-input-group.mjs +59 -55
  44. package/fesm2022/igniteui-angular-input-group.mjs.map +1 -1
  45. package/fesm2022/igniteui-angular-list.mjs +40 -40
  46. package/fesm2022/igniteui-angular-navbar.mjs +13 -13
  47. package/fesm2022/igniteui-angular-navigation-drawer.mjs +43 -38
  48. package/fesm2022/igniteui-angular-navigation-drawer.mjs.map +1 -1
  49. package/fesm2022/igniteui-angular-paginator.mjs +19 -19
  50. package/fesm2022/igniteui-angular-progressbar.mjs +19 -19
  51. package/fesm2022/igniteui-angular-query-builder.mjs +22 -22
  52. package/fesm2022/igniteui-angular-radio.mjs +25 -21
  53. package/fesm2022/igniteui-angular-radio.mjs.map +1 -1
  54. package/fesm2022/igniteui-angular-select.mjs +29 -33
  55. package/fesm2022/igniteui-angular-select.mjs.map +1 -1
  56. package/fesm2022/igniteui-angular-simple-combo.mjs +9 -9
  57. package/fesm2022/igniteui-angular-simple-combo.mjs.map +1 -1
  58. package/fesm2022/igniteui-angular-slider.mjs +28 -28
  59. package/fesm2022/igniteui-angular-snackbar.mjs +7 -7
  60. package/fesm2022/igniteui-angular-splitter.mjs +13 -13
  61. package/fesm2022/igniteui-angular-stepper.mjs +34 -34
  62. package/fesm2022/igniteui-angular-switch.mjs +7 -7
  63. package/fesm2022/igniteui-angular-tabs.mjs +34 -34
  64. package/fesm2022/igniteui-angular-time-picker.mjs +26 -36
  65. package/fesm2022/igniteui-angular-time-picker.mjs.map +1 -1
  66. package/fesm2022/igniteui-angular-toast.mjs +7 -7
  67. package/fesm2022/igniteui-angular-tree.mjs +28 -28
  68. package/fesm2022/igniteui-angular-virtual-scroll.mjs +497 -145
  69. package/fesm2022/igniteui-angular-virtual-scroll.mjs.map +1 -1
  70. package/migrations/common/UpdateChanges.d.ts +56 -0
  71. package/migrations/common/UpdateChanges.js +366 -38
  72. package/migrations/common/UpdateChanges.spec.js +829 -0
  73. package/migrations/migration-collection.json +1 -1
  74. package/migrations/update-22_2_0/index.js +145 -0
  75. package/migrations/update-22_2_0/index.spec.js +206 -0
  76. package/navigation-drawer/README.md +1 -1
  77. package/package.json +3 -3
  78. package/schematics/tsconfig.tsbuildinfo +1 -1
  79. package/skills/igniteui-angular-components/SKILL.md +9 -5
  80. package/skills/igniteui-angular-components/references/form-controls.md +1 -1
  81. package/skills/igniteui-angular-components/references/mcp-setup.md +14 -2
  82. package/skills/igniteui-angular-figma-to-app/SKILL.md +112 -525
  83. package/skills/igniteui-angular-figma-to-app/references/asset-extraction.md +49 -75
  84. package/skills/igniteui-angular-figma-to-app/references/design-provenance.md +201 -0
  85. package/skills/igniteui-angular-figma-to-app/references/design-token-bridge.md +175 -52
  86. package/skills/igniteui-angular-figma-to-app/references/figma-component-map.md +153 -99
  87. package/skills/igniteui-angular-figma-to-app/references/figma-exploration.md +226 -0
  88. package/skills/igniteui-angular-figma-to-app/references/mcp-setup.md +71 -105
  89. package/skills/igniteui-angular-figma-to-app/references/project-setup.md +63 -0
  90. package/skills/igniteui-angular-figma-to-app/references/theme-generation.md +120 -0
  91. package/skills/igniteui-angular-figma-to-app/references/validation-patterns.md +48 -50
  92. package/skills/igniteui-angular-generate-from-image-design/SKILL.md +11 -7
  93. package/skills/igniteui-angular-grids/SKILL.md +7 -3
  94. package/skills/igniteui-angular-grids/references/editing.md +1 -2
  95. package/skills/igniteui-angular-grids/references/grid-migration.md +1 -1
  96. package/skills/igniteui-angular-theming/SKILL.md +9 -5
  97. package/skills/igniteui-angular-theming/references/mcp-setup.md +12 -2
  98. package/types/igniteui-angular-button-group.d.ts +49 -34
  99. package/types/igniteui-angular-calendar.d.ts +33 -50
  100. package/types/igniteui-angular-card.d.ts +12 -17
  101. package/types/igniteui-angular-combo.d.ts +6 -0
  102. package/types/igniteui-angular-core.d.ts +25 -8
  103. package/types/igniteui-angular-grids-core.d.ts +48 -4
  104. package/types/igniteui-angular-grids-lite.d.ts +5 -1
  105. package/types/igniteui-angular-grids-pivot-grid.d.ts +1 -1
  106. package/types/igniteui-angular-input-group.d.ts +17 -3
  107. package/types/igniteui-angular-navigation-drawer.d.ts +1 -0
  108. package/types/igniteui-angular-radio.d.ts +5 -0
  109. package/types/igniteui-angular-time-picker.d.ts +0 -1
  110. package/types/igniteui-angular-virtual-scroll.d.ts +41 -13
  111. package/virtual-scroll/README.md +32 -1
@@ -46,10 +46,10 @@ class IgxNavigationService {
46
46
  return this.navs[id].close(...args);
47
47
  }
48
48
  }
49
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxNavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
50
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxNavigationService, providedIn: 'root' }); }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxNavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
50
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxNavigationService, providedIn: 'root' }); }
51
51
  }
52
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxNavigationService, decorators: [{
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxNavigationService, decorators: [{
53
53
  type: Injectable,
54
54
  args: [{ providedIn: 'root' }]
55
55
  }], ctorParameters: () => [] });
@@ -71,10 +71,10 @@ class IgxNavigationToggleDirective {
71
71
  toggleNavigationDrawer() {
72
72
  this.state.toggle(this.target, true);
73
73
  }
74
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxNavigationToggleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
75
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: IgxNavigationToggleDirective, isStandalone: true, selector: "[igxNavToggle]", inputs: { target: ["igxNavToggle", "target"] }, host: { listeners: { "click": "toggleNavigationDrawer()" } }, ngImport: i0 }); }
74
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxNavigationToggleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
75
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.2.0", type: IgxNavigationToggleDirective, isStandalone: true, selector: "[igxNavToggle]", inputs: { target: ["igxNavToggle", "target"] }, host: { listeners: { "click": "toggleNavigationDrawer()" } }, ngImport: i0 }); }
76
76
  }
77
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxNavigationToggleDirective, decorators: [{
77
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxNavigationToggleDirective, decorators: [{
78
78
  type: Directive,
79
79
  args: [{
80
80
  selector: '[igxNavToggle]',
@@ -104,10 +104,10 @@ class IgxNavigationCloseDirective {
104
104
  closeNavigationDrawer() {
105
105
  this.state.close(this.target, true);
106
106
  }
107
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxNavigationCloseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
108
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: IgxNavigationCloseDirective, isStandalone: true, selector: "[igxNavClose]", inputs: { target: ["igxNavClose", "target"] }, host: { listeners: { "click": "closeNavigationDrawer()" } }, ngImport: i0 }); }
107
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxNavigationCloseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
108
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.2.0", type: IgxNavigationCloseDirective, isStandalone: true, selector: "[igxNavClose]", inputs: { target: ["igxNavClose", "target"] }, host: { listeners: { "click": "closeNavigationDrawer()" } }, ngImport: i0 }); }
109
109
  }
110
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxNavigationCloseDirective, decorators: [{
110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxNavigationCloseDirective, decorators: [{
111
111
  type: Directive,
112
112
  args: [{
113
113
  selector: '[igxNavClose]',
@@ -520,10 +520,10 @@ class PlatformUtil {
520
520
  this.KEYMAP.ARROW_DOWN, this.KEYMAP.ARROW_LEFT, this.KEYMAP.ARROW_RIGHT, this.KEYMAP.ARROW_UP
521
521
  ].includes(key);
522
522
  }
523
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: PlatformUtil, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
524
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: PlatformUtil, providedIn: 'root' }); }
523
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: PlatformUtil, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
524
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: PlatformUtil, providedIn: 'root' }); }
525
525
  }
526
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: PlatformUtil, decorators: [{
526
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: PlatformUtil, decorators: [{
527
527
  type: Injectable,
528
528
  args: [{ providedIn: 'root' }]
529
529
  }] });
@@ -1010,10 +1010,10 @@ class IgxSelectionAPIService {
1010
1010
  get_empty() {
1011
1011
  return new Set();
1012
1012
  }
1013
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxSelectionAPIService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1014
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxSelectionAPIService, providedIn: 'root' }); }
1013
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxSelectionAPIService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1014
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxSelectionAPIService, providedIn: 'root' }); }
1015
1015
  }
1016
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxSelectionAPIService, decorators: [{
1016
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxSelectionAPIService, decorators: [{
1017
1017
  type: Injectable,
1018
1018
  args: [{
1019
1019
  providedIn: 'root',
@@ -1109,9 +1109,10 @@ class IgxTouchManager {
1109
1109
  return;
1110
1110
  }
1111
1111
  const gesture = this._createEvent(event);
1112
- // Defer `panStart` until movement actually begins, mirroring Hammer's `panstart`.
1113
- // A press with no movement (a tap) therefore never raises `panStart`.
1114
1112
  if (!this._panStarted) {
1113
+ if (!this._canStartPan(gesture)) {
1114
+ return;
1115
+ }
1115
1116
  this._panStarted = true;
1116
1117
  if (this.callbacks.panStart) {
1117
1118
  this._runInAngular(() => this.callbacks.panStart?.(gesture));
@@ -1129,15 +1130,15 @@ class IgxTouchManager {
1129
1130
  if (!this._tracking || event.pointerId !== this._pointerId || !this._accepts(event.pointerType)) {
1130
1131
  return;
1131
1132
  }
1132
- this._tracking = false;
1133
- this._pointerId = null;
1134
1133
  const gesture = this._createEvent(event);
1134
+ const panStarted = this._panStarted;
1135
+ this._resetTracking();
1135
1136
  this._runInAngular(() => {
1136
1137
  if (this.callbacks.tap && gesture.distance < this._tapThreshold) {
1137
1138
  this.callbacks.tap(gesture);
1138
1139
  return;
1139
1140
  }
1140
- if (this.callbacks.swipe &&
1141
+ if (panStarted && this.callbacks.swipe &&
1141
1142
  gesture.velocity > this._swipeVelocityThreshold &&
1142
1143
  Math.abs(gesture.deltaX) > Math.abs(gesture.deltaY)) {
1143
1144
  this.callbacks.swipe(gesture);
@@ -1152,10 +1153,9 @@ class IgxTouchManager {
1152
1153
  if (!this._tracking || event.pointerId !== this._pointerId) {
1153
1154
  return;
1154
1155
  }
1155
- this._tracking = false;
1156
- this._pointerId = null;
1156
+ const gesture = this._createEvent(event);
1157
+ this._resetTracking();
1157
1158
  if (this.callbacks.panCancel) {
1158
- const gesture = this._createEvent(event);
1159
1159
  this._runInAngular(() => this.callbacks.panCancel?.(gesture));
1160
1160
  }
1161
1161
  };
@@ -1163,14 +1163,17 @@ class IgxTouchManager {
1163
1163
  if (!(event instanceof TouchEvent)) {
1164
1164
  return;
1165
1165
  }
1166
- // Prevent scrolling only while a gesture is actively tracked.
1167
- if (this._tracking && event.cancelable) {
1166
+ // Preserve native scrolling and compatibility clicks while the contact is
1167
+ // only a tap candidate. Suppress scrolling after a pan is recognized.
1168
+ if (this._tracking && this._panStarted && event.cancelable) {
1168
1169
  event.preventDefault();
1169
1170
  }
1170
1171
  };
1171
1172
  this._pointerTypes = options.pointerTypes ?? ['touch', 'pen'];
1172
1173
  this._setPointerCapture = options.setPointerCapture ?? true;
1173
1174
  this._tapThreshold = options.tapThreshold ?? 0;
1175
+ this._panThreshold = options.panThreshold ?? 0;
1176
+ this._panAxis = options.panAxis ?? 'all';
1174
1177
  this._swipeVelocityThreshold = options.swipeVelocityThreshold ?? 0.3;
1175
1178
  this._canStart = options.canStart ?? null;
1176
1179
  this._ngZone = options.ngZone ?? null;
@@ -1197,15 +1200,14 @@ class IgxTouchManager {
1197
1200
  }
1198
1201
  /** Detaches all listeners and stops tracking. */
1199
1202
  destroy() {
1200
- if (!this._supported) {
1201
- return;
1203
+ if (this._supported) {
1204
+ this.target.removeEventListener('pointerdown', this._onPointerDown);
1205
+ this.target.removeEventListener('pointermove', this._onPointerMove);
1206
+ this.target.removeEventListener('pointerup', this._onPointerUp);
1207
+ this.target.removeEventListener('pointercancel', this._onPointerCancel);
1208
+ this.target.removeEventListener('touchmove', this._onTouchMove);
1202
1209
  }
1203
- this.target.removeEventListener('pointerdown', this._onPointerDown);
1204
- this.target.removeEventListener('pointermove', this._onPointerMove);
1205
- this.target.removeEventListener('pointerup', this._onPointerUp);
1206
- this.target.removeEventListener('pointercancel', this._onPointerCancel);
1207
- this.target.removeEventListener('touchmove', this._onTouchMove);
1208
- this._tracking = false;
1210
+ this._resetTracking();
1209
1211
  }
1210
1212
  _accepts(pointerType) {
1211
1213
  return this._pointerTypes.includes(pointerType);
@@ -1253,22 +1255,35 @@ class IgxTouchManager {
1253
1255
  }
1254
1256
  };
1255
1257
  }
1256
- /** Stops tracking the current gesture and best-effort releases the pointer capture. */
1258
+ _canStartPan(event) {
1259
+ if (event.distance < this._panThreshold) {
1260
+ return false;
1261
+ }
1262
+ if (this._panAxis === 'horizontal') {
1263
+ return Math.abs(event.deltaX) > Math.abs(event.deltaY);
1264
+ }
1265
+ if (this._panAxis === 'vertical') {
1266
+ return Math.abs(event.deltaY) > Math.abs(event.deltaX);
1267
+ }
1268
+ return true;
1269
+ }
1257
1270
  _stopTracking(pointerId) {
1258
- this._tracking = false;
1259
- this._panStarted = false;
1260
- this._pointerId = null;
1261
- this._startTarget = null;
1271
+ this._resetTracking();
1262
1272
  if (this._setPointerCapture && typeof this.target.releasePointerCapture === 'function') {
1263
1273
  try {
1264
1274
  this.target.releasePointerCapture(pointerId);
1265
1275
  }
1266
1276
  catch {
1267
- // `releasePointerCapture` can throw when the pointer is no longer captured.
1268
- // Releasing is a best-effort cleanup, so ignore it.
1277
+ // Pointer capture is best-effort and may already have been released.
1269
1278
  }
1270
1279
  }
1271
1280
  }
1281
+ _resetTracking() {
1282
+ this._tracking = false;
1283
+ this._panStarted = false;
1284
+ this._pointerId = null;
1285
+ this._startTarget = null;
1286
+ }
1272
1287
  }
1273
1288
 
1274
1289
  /**
@@ -1301,18 +1316,31 @@ class NgControlAdapter {
1301
1316
  get invalid() {
1302
1317
  return !!this.ngControl.invalid;
1303
1318
  }
1319
+ get pending() {
1320
+ return !!this.ngControl.pending;
1321
+ }
1322
+ /** Derived, not read from `status`: the Signal Forms interop throws on a status it does not know. */
1323
+ get status() {
1324
+ if (this.disabled) {
1325
+ return 'disabled';
1326
+ }
1327
+ if (this.invalid) {
1328
+ return 'invalid';
1329
+ }
1330
+ return this.pending ? 'pending' : 'valid';
1331
+ }
1304
1332
  get touchedOrDirty() {
1305
1333
  const control = this.ngControl.control;
1306
1334
  return !!(control?.touched || control?.dirty);
1307
1335
  }
1308
1336
  /**
1309
- * Signal Forms expose no rule list. A field that is required, or was ever
1310
- * invalid or pending, is known to have rules; a rule satisfied from the
1311
- * start stays undetected.
1337
+ * Signal Forms expose no rule list. A field that is required, or was invalid or
1338
+ * pending since it was last pristine and untouched, is known to have rules;
1339
+ * a rule satisfied from that point on stays undetected.
1312
1340
  */
1313
1341
  get hasValidators() {
1314
1342
  if (this.backend === 'signal') {
1315
- return this.required || this.noteErrors();
1343
+ return this.required || this.sawErrors;
1316
1344
  }
1317
1345
  const control = this.ngControl.control;
1318
1346
  return !!(control?.validator || control?.asyncValidator);
@@ -1343,10 +1371,13 @@ class NgControlAdapter {
1343
1371
  */
1344
1372
  get statusChanges() {
1345
1373
  if (this.backend === 'signal') {
1346
- return this.watch(() => [
1347
- this.ngControl.valid, this.noteErrors(), this.ngControl.pending, this.required,
1348
- this.ngControl.disabled, this.ngControl.dirty, this.ngControl.touched
1349
- ]);
1374
+ return this.watch(() => {
1375
+ this.observeErrors();
1376
+ return [
1377
+ this.ngControl.valid, this.pending, this.required,
1378
+ this.ngControl.disabled, this.ngControl.dirty, this.ngControl.touched
1379
+ ];
1380
+ });
1350
1381
  }
1351
1382
  return this.ngControl.statusChanges;
1352
1383
  }
@@ -1378,11 +1409,14 @@ class NgControlAdapter {
1378
1409
  control.setValue(value);
1379
1410
  return 'accepted';
1380
1411
  }
1381
- /** Remembers that the field had rules. Returns the current invalid or pending state. */
1382
- noteErrors() {
1383
- const hasErrors = this.invalid || !!this.ngControl.pending;
1384
- this.sawErrors ||= hasErrors;
1385
- return hasErrors || this.sawErrors;
1412
+ /**
1413
+ * Records that the field has rules. A `[formField]` switch reuses the same interop
1414
+ * `NgControl`, so an untouched, pristine control drops earlier observations and keeps
1415
+ * only its current state, e.g. an empty field failing a custom rule before the first edit.
1416
+ */
1417
+ observeErrors() {
1418
+ const kept = this.touchedOrDirty && this.sawErrors;
1419
+ this.sawErrors = kept || this.invalid || this.pending;
1386
1420
  }
1387
1421
  // Signal-backed getters are reactive, so an effect over them replaces the missing observables.
1388
1422
  // A root effect runs before change detection, like an observable would; a view effect would
@@ -1435,10 +1469,10 @@ class IgxPickerToggleComponent {
1435
1469
  event.stopPropagation();
1436
1470
  this.clicked.emit();
1437
1471
  }
1438
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxPickerToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1439
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.7", type: IgxPickerToggleComponent, isStandalone: true, selector: "igx-picker-toggle", outputs: { clicked: "clicked" }, host: { listeners: { "click": "onClick($event)" } }, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.Eager }); }
1472
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxPickerToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1473
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.2.0", type: IgxPickerToggleComponent, isStandalone: true, selector: "igx-picker-toggle", outputs: { clicked: "clicked" }, host: { listeners: { "click": "onClick($event)" } }, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.Eager }); }
1440
1474
  }
1441
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxPickerToggleComponent, decorators: [{
1475
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxPickerToggleComponent, decorators: [{
1442
1476
  type: Component,
1443
1477
  args: [{
1444
1478
  template: `<ng-content></ng-content>`,
@@ -1467,10 +1501,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
1467
1501
  * ```
1468
1502
  */
1469
1503
  class IgxPickerClearComponent extends IgxPickerToggleComponent {
1470
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxPickerClearComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1471
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.7", type: IgxPickerClearComponent, isStandalone: true, selector: "igx-picker-clear", usesInheritance: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.Eager }); }
1504
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxPickerClearComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1505
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.2.0", type: IgxPickerClearComponent, isStandalone: true, selector: "igx-picker-clear", usesInheritance: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.Eager }); }
1472
1506
  }
1473
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxPickerClearComponent, decorators: [{
1507
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxPickerClearComponent, decorators: [{
1474
1508
  type: Component,
1475
1509
  args: [{
1476
1510
  template: `<ng-content></ng-content>`,
@@ -1489,10 +1523,10 @@ class IgxPickerActionsDirective {
1489
1523
  constructor() {
1490
1524
  this.template = inject(TemplateRef);
1491
1525
  }
1492
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxPickerActionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1493
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: IgxPickerActionsDirective, isStandalone: true, selector: "[igxPickerActions]", ngImport: i0 }); }
1526
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxPickerActionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1527
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.2.0", type: IgxPickerActionsDirective, isStandalone: true, selector: "[igxPickerActions]", ngImport: i0 }); }
1494
1528
  }
1495
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxPickerActionsDirective, decorators: [{
1529
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxPickerActionsDirective, decorators: [{
1496
1530
  type: Directive,
1497
1531
  args: [{
1498
1532
  selector: '[igxPickerActions]',
@@ -5144,10 +5178,10 @@ class IgxDateFormatterPipe {
5144
5178
  transform(value, format, timezone, locale) {
5145
5179
  return this.i18nFormatter.formatDate(value, format, locale ?? this.locale_ID, timezone);
5146
5180
  }
5147
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxDateFormatterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
5148
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.1.7", ngImport: i0, type: IgxDateFormatterPipe, isStandalone: true, name: "date" }); }
5181
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxDateFormatterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
5182
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.2.0", ngImport: i0, type: IgxDateFormatterPipe, isStandalone: true, name: "date" }); }
5149
5183
  }
5150
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxDateFormatterPipe, decorators: [{
5184
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxDateFormatterPipe, decorators: [{
5151
5185
  type: Pipe,
5152
5186
  args: [{
5153
5187
  name: 'date',
@@ -5161,10 +5195,10 @@ class IgxNumberFormatterPipe {
5161
5195
  transform(value, digitsInfo, locale) {
5162
5196
  return this.i18nFormatter.formatNumber(value, locale, digitsInfo);
5163
5197
  }
5164
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxNumberFormatterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
5165
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.1.7", ngImport: i0, type: IgxNumberFormatterPipe, isStandalone: true, name: "number" }); }
5198
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxNumberFormatterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
5199
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.2.0", ngImport: i0, type: IgxNumberFormatterPipe, isStandalone: true, name: "number" }); }
5166
5200
  }
5167
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxNumberFormatterPipe, decorators: [{
5201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxNumberFormatterPipe, decorators: [{
5168
5202
  type: Pipe,
5169
5203
  args: [{
5170
5204
  name: 'number',
@@ -5178,10 +5212,10 @@ class IgxPercentFormatterPipe {
5178
5212
  transform(value, digitsInfo, locale) {
5179
5213
  return this.i18nFormatter.formatPercent(value, locale, digitsInfo);
5180
5214
  }
5181
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxPercentFormatterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
5182
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.1.7", ngImport: i0, type: IgxPercentFormatterPipe, isStandalone: true, name: "percent" }); }
5215
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxPercentFormatterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
5216
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.2.0", ngImport: i0, type: IgxPercentFormatterPipe, isStandalone: true, name: "percent" }); }
5183
5217
  }
5184
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxPercentFormatterPipe, decorators: [{
5218
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxPercentFormatterPipe, decorators: [{
5185
5219
  type: Pipe,
5186
5220
  args: [{
5187
5221
  name: 'percent',
@@ -5195,10 +5229,10 @@ class IgxCurrencyFormatterPipe {
5195
5229
  transform(value, currencyCode, display, digitsInfo, locale) {
5196
5230
  return this.i18nFormatter.formatCurrency(value, locale, display, currencyCode, digitsInfo);
5197
5231
  }
5198
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxCurrencyFormatterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
5199
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.1.7", ngImport: i0, type: IgxCurrencyFormatterPipe, isStandalone: true, name: "currency" }); }
5232
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxCurrencyFormatterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
5233
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.2.0", ngImport: i0, type: IgxCurrencyFormatterPipe, isStandalone: true, name: "currency" }); }
5200
5234
  }
5201
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxCurrencyFormatterPipe, decorators: [{
5235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxCurrencyFormatterPipe, decorators: [{
5202
5236
  type: Pipe,
5203
5237
  args: [{
5204
5238
  name: 'currency',
@@ -5266,10 +5300,10 @@ class IgxAngularAnimationService {
5266
5300
  const player = new IgxAngularAnimationPlayer(animationBuilder.create(element));
5267
5301
  return player;
5268
5302
  }
5269
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxAngularAnimationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5270
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxAngularAnimationService, providedIn: 'root' }); }
5303
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxAngularAnimationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5304
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxAngularAnimationService, providedIn: 'root' }); }
5271
5305
  }
5272
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxAngularAnimationService, decorators: [{
5306
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxAngularAnimationService, decorators: [{
5273
5307
  type: Injectable,
5274
5308
  args: [{ providedIn: 'root' }]
5275
5309
  }] });
@@ -5294,10 +5328,10 @@ class IgxOverlayOutletDirective {
5294
5328
  get nativeElement() {
5295
5329
  return this.element.nativeElement;
5296
5330
  }
5297
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxOverlayOutletDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5298
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: IgxOverlayOutletDirective, isStandalone: true, selector: "[igxOverlayOutlet]", exportAs: ["overlay-outlet"], ngImport: i0 }); }
5331
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxOverlayOutletDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5332
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.2.0", type: IgxOverlayOutletDirective, isStandalone: true, selector: "[igxOverlayOutlet]", exportAs: ["overlay-outlet"], ngImport: i0 }); }
5299
5333
  }
5300
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxOverlayOutletDirective, decorators: [{
5334
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxOverlayOutletDirective, decorators: [{
5301
5335
  type: Directive,
5302
5336
  args: [{
5303
5337
  exportAs: 'overlay-outlet',
@@ -7030,10 +7064,10 @@ class IgxOverlayService {
7030
7064
  info.size = size;
7031
7065
  }
7032
7066
  }
7033
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxOverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7034
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxOverlayService, providedIn: 'root' }); }
7067
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxOverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7068
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxOverlayService, providedIn: 'root' }); }
7035
7069
  }
7036
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxOverlayService, decorators: [{
7070
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxOverlayService, decorators: [{
7037
7071
  type: Injectable,
7038
7072
  args: [{ providedIn: 'root' }]
7039
7073
  }], ctorParameters: () => [] });
@@ -7137,6 +7171,9 @@ class BlockScrollStrategy extends ScrollStrategy {
7137
7171
  this._sourceElement.scrollTop = this._initialScrollTop;
7138
7172
  this._sourceElement.scrollLeft = this._initialScrollLeft;
7139
7173
  };
7174
+ this.preventDefault = (ev) => {
7175
+ ev.preventDefault();
7176
+ };
7140
7177
  }
7141
7178
  /**
7142
7179
  * Initializes the strategy. Should be called once
@@ -7156,6 +7193,14 @@ class BlockScrollStrategy extends ScrollStrategy {
7156
7193
  * ```
7157
7194
  */
7158
7195
  attach() {
7196
+ // Prevent scroll from mouse/trackpad/touch before it occurs.
7197
+ // `{ passive: false }` is required — without it, browsers ignore preventDefault() on these events.
7198
+ // This also fixes Safari bug #17217 where the scroll event fires after the compositor has already
7199
+ // scrolled, making scroll-position reset ineffective for wheel/touch input.
7200
+ this._document.addEventListener('wheel', this.preventDefault, { passive: false });
7201
+ this._document.addEventListener('touchmove', this.preventDefault, { passive: false });
7202
+ // Handles keyboard-driven scrolling (arrow keys, spacebar, Page Up/Down) as a fallback,
7203
+ // since keyboard input cannot be intercepted via wheel/touchmove.
7159
7204
  this._document.addEventListener('scroll', this.onScroll, true);
7160
7205
  }
7161
7206
  /**
@@ -7165,6 +7210,8 @@ class BlockScrollStrategy extends ScrollStrategy {
7165
7210
  * ```
7166
7211
  */
7167
7212
  detach() {
7213
+ this._document.removeEventListener('wheel', this.preventDefault);
7214
+ this._document.removeEventListener('touchmove', this.preventDefault);
7168
7215
  this._document.removeEventListener('scroll', this.onScroll, true);
7169
7216
  this._sourceElement = null;
7170
7217
  this._initialScrollTop = 0;
@@ -7876,10 +7923,10 @@ class IgxFlatTransactionFactory {
7876
7923
  return new IgxBaseTransactionService();
7877
7924
  }
7878
7925
  }
7879
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxFlatTransactionFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7880
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxFlatTransactionFactory, providedIn: 'root' }); }
7926
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxFlatTransactionFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7927
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxFlatTransactionFactory, providedIn: 'root' }); }
7881
7928
  }
7882
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxFlatTransactionFactory, decorators: [{
7929
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxFlatTransactionFactory, decorators: [{
7883
7930
  type: Injectable,
7884
7931
  args: [{
7885
7932
  providedIn: 'root'
@@ -7903,10 +7950,10 @@ class IgxHierarchicalTransactionFactory extends IgxFlatTransactionFactory {
7903
7950
  return new IgxBaseTransactionService();
7904
7951
  }
7905
7952
  }
7906
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxHierarchicalTransactionFactory, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
7907
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxHierarchicalTransactionFactory, providedIn: 'root' }); }
7953
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxHierarchicalTransactionFactory, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
7954
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxHierarchicalTransactionFactory, providedIn: 'root' }); }
7908
7955
  }
7909
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxHierarchicalTransactionFactory, decorators: [{
7956
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxHierarchicalTransactionFactory, decorators: [{
7910
7957
  type: Injectable,
7911
7958
  args: [{
7912
7959
  providedIn: 'root'
@@ -7971,10 +8018,10 @@ class IgxStylesRegistrar {
7971
8018
  this._document.head?.appendChild(style);
7972
8019
  }
7973
8020
  }
7974
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxStylesRegistrar, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7975
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxStylesRegistrar, providedIn: 'root' }); }
8021
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxStylesRegistrar, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8022
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxStylesRegistrar, providedIn: 'root' }); }
7976
8023
  }
7977
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: IgxStylesRegistrar, decorators: [{
8024
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: IgxStylesRegistrar, decorators: [{
7978
8025
  type: Injectable,
7979
8026
  args: [{ providedIn: 'root' }]
7980
8027
  }] });