@angular/cdk-experimental 19.1.0-next.2 → 19.1.0-rc.0

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.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License
2
2
 
3
- Copyright (c) 2024 Google LLC.
3
+ Copyright (c) 2025 Google LLC.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -11,6 +11,7 @@ import { Injector } from '@angular/core';
11
11
  import { NgZone } from '@angular/core';
12
12
  import { Observable } from 'rxjs';
13
13
  import { OnDestroy } from '@angular/core';
14
+ import { OnInit } from '@angular/core';
14
15
  import { Overlay } from '@angular/cdk/overlay';
15
16
  import { OverlayRef } from '@angular/cdk/overlay';
16
17
  import { Provider } from '@angular/core';
@@ -138,6 +139,8 @@ export declare const COLUMN_RESIZE_OPTIONS: InjectionToken<ColumnResizeOptions>;
138
139
  * provide common events and services for column resizing.
139
140
  */
140
141
  export declare abstract class ColumnResize implements AfterViewInit, OnDestroy {
142
+ private _renderer;
143
+ private _eventCleanups;
141
144
  protected readonly destroyed: Subject<void>;
142
145
  abstract readonly columnResizeNotifier: ColumnResizeNotifier;
143
146
  abstract readonly elementRef: ElementRef<HTMLElement>;
@@ -299,7 +302,7 @@ declare namespace i4 {
299
302
  * Base class for Resizable directives which are applied to column headers to make those columns
300
303
  * resizable.
301
304
  */
302
- export declare abstract class Resizable<HandleComponent extends ResizeOverlayHandle> implements AfterViewInit, OnDestroy {
305
+ export declare abstract class Resizable<HandleComponent extends ResizeOverlayHandle> implements AfterViewInit, OnDestroy, OnInit {
303
306
  protected minWidthPxInternal: number;
304
307
  protected maxWidthPxInternal: number;
305
308
  protected inlineHandle?: HTMLElement;
@@ -328,6 +331,7 @@ export declare abstract class Resizable<HandleComponent extends ResizeOverlayHan
328
331
  /** The maximum width to allow the column to be sized to. */
329
332
  get maxWidthPx(): number;
330
333
  set maxWidthPx(value: number);
334
+ ngOnInit(): void;
331
335
  ngAfterViewInit(): void;
332
336
  ngOnDestroy(): void;
333
337
  protected abstract getInlineHandleCssClassName(): string;
@@ -353,6 +357,7 @@ export declare abstract class Resizable<HandleComponent extends ResizeOverlayHan
353
357
  * for handling column resize mouse events and displaying any visible UI on the column edge.
354
358
  */
355
359
  export declare abstract class ResizeOverlayHandle implements AfterViewInit, OnDestroy {
360
+ private _renderer;
356
361
  protected readonly destroyed: Subject<void>;
357
362
  protected abstract readonly columnDef: CdkColumnDef;
358
363
  protected abstract readonly document: Document;
@@ -376,6 +381,7 @@ export declare abstract class ResizeOverlayHandle implements AfterViewInit, OnDe
376
381
  private _updateOverlayOffset;
377
382
  private _isLtr;
378
383
  private _notifyResizeEnded;
384
+ private _observableFromEvent;
379
385
  static ɵfac: i0.ɵɵFactoryDeclaration<ResizeOverlayHandle, never>;
380
386
  static ɵdir: i0.ɵɵDirectiveDeclaration<ResizeOverlayHandle, never, never, {}, {}, never, never, true, never>;
381
387
  }
@@ -394,11 +400,14 @@ export declare class ResizeRef {
394
400
  * Provides an implementation for resizing a column.
395
401
  * The details of how resizing works for tables for flex mat-tables are quite different.
396
402
  */
397
- export declare abstract class ResizeStrategy {
403
+ export declare abstract class ResizeStrategy implements OnDestroy {
398
404
  protected abstract readonly columnResize: ColumnResize;
399
405
  protected abstract readonly styleScheduler: _CoalescedStyleScheduler;
400
406
  protected abstract readonly table: CdkTable<unknown>;
401
407
  private _pendingResizeDelta;
408
+ private _tableObserved;
409
+ private _elemSizeCache;
410
+ private _resizeObserver;
402
411
  /** Updates the width of the specified column. */
403
412
  abstract applyColumnSize(cssFriendlyColumnName: string, columnHeader: HTMLElement, sizeInPx: number, previousSizeInPx?: number): void;
404
413
  /** Applies a minimum width to the specified column, updating its current width as needed. */
@@ -407,6 +416,12 @@ export declare abstract class ResizeStrategy {
407
416
  abstract applyMaxColumnSize(cssFriendlyColumnName: string, columnHeader: HTMLElement, minSizeInPx: number): void;
408
417
  /** Adjusts the width of the table element by the specified delta. */
409
418
  protected updateTableWidthAndStickyColumns(delta: number): void;
419
+ /** Gets the style.width pixels on the specified element if present, otherwise its offsetWidth. */
420
+ protected getElementWidth(element: HTMLElement): number;
421
+ /** Informs the ResizeStrategy instance of a column that may be resized in the future. */
422
+ registerColumn(column: HTMLElement): void;
423
+ ngOnDestroy(): void;
424
+ private _updateCachedSizes;
410
425
  static ɵfac: i0.ɵɵFactoryDeclaration<ResizeStrategy, never>;
411
426
  static ɵprov: i0.ɵɵInjectableDeclaration<ResizeStrategy>;
412
427
  }
@@ -1,7 +1,7 @@
1
1
  import { Version } from '@angular/core';
2
2
 
3
3
  /** Current version of the CDK Experimental package. */
4
- const VERSION = new Version('19.1.0-next.2');
4
+ const VERSION = new Version('19.1.0-rc.0');
5
5
 
6
6
  export { VERSION };
7
7
  //# sourceMappingURL=cdk-experimental.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cdk-experimental.mjs","sources":["../../../../../../src/cdk-experimental/version.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Version} from '@angular/core';\n\n/** Current version of the CDK Experimental package. */\nexport const VERSION = new Version('19.1.0-next.2');\n"],"names":[],"mappings":";;AAUA;MACa,OAAO,GAAG,IAAI,OAAO,CAAC,mBAAmB;;;;"}
1
+ {"version":3,"file":"cdk-experimental.mjs","sources":["../../../../../../src/cdk-experimental/version.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Version} from '@angular/core';\n\n/** Current version of the CDK Experimental package. */\nexport const VERSION = new Version('19.1.0-rc.0');\n"],"names":[],"mappings":";;AAUA;MACa,OAAO,GAAG,IAAI,OAAO,CAAC,mBAAmB;;;;"}
@@ -1,8 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, Directive, Input, Injectable, NgZone, CSP_NONCE, ElementRef, NgModule, Injector } from '@angular/core';
2
+ import { InjectionToken, inject, Renderer2, Directive, Input, Injectable, NgZone, CSP_NONCE, ElementRef, NgModule, Injector } from '@angular/core';
3
3
  import { _IdGenerator } from '@angular/cdk/a11y';
4
- import { Subject, fromEvent, merge, combineLatest, Observable } from 'rxjs';
5
- import { map, takeUntil, filter, mapTo, take, startWith, pairwise, distinctUntilChanged, share, skip } from 'rxjs/operators';
4
+ import { Subject, merge, combineLatest, Observable } from 'rxjs';
5
+ import { mapTo, take, takeUntil, startWith, pairwise, distinctUntilChanged, share, map, skip, filter } from 'rxjs/operators';
6
6
  import { _closest } from '@angular/cdk-experimental/popover-edit';
7
7
  import { _COALESCED_STYLE_SCHEDULER, CdkTable } from '@angular/cdk/table';
8
8
  import { DOCUMENT } from '@angular/common';
@@ -24,6 +24,8 @@ const COLUMN_RESIZE_OPTIONS = new InjectionToken('CdkColumnResizeOptions');
24
24
  * provide common events and services for column resizing.
25
25
  */
26
26
  class ColumnResize {
27
+ _renderer = inject(Renderer2);
28
+ _eventCleanups;
27
29
  destroyed = new Subject();
28
30
  /** Unique ID for this table instance. */
29
31
  selectorId = inject(_IdGenerator).getId('cdk-column-resize-');
@@ -41,6 +43,7 @@ class ColumnResize {
41
43
  this._listenForHoverActivity();
42
44
  }
43
45
  ngOnDestroy() {
46
+ this._eventCleanups?.forEach(cleanup => cleanup());
44
47
  this.destroyed.next();
45
48
  this.destroyed.complete();
46
49
  }
@@ -59,13 +62,17 @@ class ColumnResize {
59
62
  _listenForRowHoverEvents() {
60
63
  this.ngZone.runOutsideAngular(() => {
61
64
  const element = this.elementRef.nativeElement;
62
- fromEvent(element, 'mouseover')
63
- .pipe(map(event => _closest(event.target, HEADER_CELL_SELECTOR)), takeUntil(this.destroyed))
64
- .subscribe(this.eventDispatcher.headerCellHovered);
65
- fromEvent(element, 'mouseleave')
66
- .pipe(filter(event => !!event.relatedTarget &&
67
- !event.relatedTarget.matches(RESIZE_OVERLAY_SELECTOR)), mapTo(null), takeUntil(this.destroyed))
68
- .subscribe(this.eventDispatcher.headerCellHovered);
65
+ this._eventCleanups = [
66
+ this._renderer.listen(element, 'mouseover', (event) => {
67
+ this.eventDispatcher.headerCellHovered.next(_closest(event.target, HEADER_CELL_SELECTOR));
68
+ }),
69
+ this._renderer.listen(element, 'mouseleave', (event) => {
70
+ if (event.relatedTarget &&
71
+ !event.relatedTarget.matches(RESIZE_OVERLAY_SELECTOR)) {
72
+ this.eventDispatcher.headerCellHovered.next(null);
73
+ }
74
+ }),
75
+ ];
69
76
  });
70
77
  }
71
78
  _listenForResizeActivity() {
@@ -87,10 +94,10 @@ class ColumnResize {
87
94
  }
88
95
  });
89
96
  }
90
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: ColumnResize, deps: [], target: i0.ɵɵFactoryTarget.Directive });
91
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.0-next.2", type: ColumnResize, isStandalone: true, inputs: { liveResizeUpdates: "liveResizeUpdates" }, ngImport: i0 });
97
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: ColumnResize, deps: [], target: i0.ɵɵFactoryTarget.Directive });
98
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.0-next.3", type: ColumnResize, isStandalone: true, inputs: { liveResizeUpdates: "liveResizeUpdates" }, ngImport: i0 });
92
99
  }
93
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: ColumnResize, decorators: [{
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: ColumnResize, decorators: [{
94
101
  type: Directive
95
102
  }], propDecorators: { liveResizeUpdates: [{
96
103
  type: Input
@@ -107,10 +114,10 @@ class ColumnResizeNotifierSource {
107
114
  resizeCompleted = new Subject();
108
115
  /** Triggers a resize action. */
109
116
  triggerResize = new Subject();
110
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: ColumnResizeNotifierSource, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
111
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: ColumnResizeNotifierSource });
117
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: ColumnResizeNotifierSource, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
118
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: ColumnResizeNotifierSource });
112
119
  }
113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: ColumnResizeNotifierSource, decorators: [{
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: ColumnResizeNotifierSource, decorators: [{
114
121
  type: Injectable
115
122
  }] });
116
123
  /** Service for triggering column resizes imperatively or being notified of them. */
@@ -127,10 +134,10 @@ class ColumnResizeNotifier {
127
134
  isStickyColumn: true,
128
135
  });
129
136
  }
130
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: ColumnResizeNotifier, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
131
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: ColumnResizeNotifier });
137
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: ColumnResizeNotifier, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
138
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: ColumnResizeNotifier });
132
139
  }
133
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: ColumnResizeNotifier, decorators: [{
140
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: ColumnResizeNotifier, decorators: [{
134
141
  type: Injectable
135
142
  }] });
136
143
 
@@ -182,10 +189,10 @@ class HeaderRowEventDispatcher {
182
189
  complete: () => observer.complete(),
183
190
  }));
184
191
  }
185
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: HeaderRowEventDispatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
186
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: HeaderRowEventDispatcher });
192
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: HeaderRowEventDispatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
193
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: HeaderRowEventDispatcher });
187
194
  }
188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: HeaderRowEventDispatcher, decorators: [{
195
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: HeaderRowEventDispatcher, decorators: [{
189
196
  type: Injectable
190
197
  }] });
191
198
 
@@ -195,11 +202,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2",
195
202
  */
196
203
  class ResizeStrategy {
197
204
  _pendingResizeDelta = null;
205
+ _tableObserved = false;
206
+ _elemSizeCache = new WeakMap();
207
+ _resizeObserver = globalThis?.ResizeObserver
208
+ ? new globalThis.ResizeObserver(entries => this._updateCachedSizes(entries))
209
+ : null;
198
210
  /** Adjusts the width of the table element by the specified delta. */
199
211
  updateTableWidthAndStickyColumns(delta) {
200
212
  if (this._pendingResizeDelta === null) {
201
213
  const tableElement = this.columnResize.elementRef.nativeElement;
202
- const tableWidth = getElementWidth(tableElement);
214
+ const tableWidth = this.getElementWidth(tableElement);
203
215
  this.styleScheduler.schedule(() => {
204
216
  tableElement.style.width = coerceCssPixelValue(tableWidth + this._pendingResizeDelta);
205
217
  this._pendingResizeDelta = null;
@@ -210,10 +222,45 @@ class ResizeStrategy {
210
222
  }
211
223
  this._pendingResizeDelta = (this._pendingResizeDelta ?? 0) + delta;
212
224
  }
213
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: ResizeStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
214
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: ResizeStrategy });
225
+ /** Gets the style.width pixels on the specified element if present, otherwise its offsetWidth. */
226
+ getElementWidth(element) {
227
+ // Optimization: Check style.width first as we probably set it already before reading
228
+ // offsetWidth which triggers layout.
229
+ return (coercePixelsFromCssValue(element.style.width) ||
230
+ this._elemSizeCache.get(element)?.width ||
231
+ element.offsetWidth);
232
+ }
233
+ /** Informs the ResizeStrategy instance of a column that may be resized in the future. */
234
+ registerColumn(column) {
235
+ if (!this._tableObserved) {
236
+ this._tableObserved = true;
237
+ this._resizeObserver?.observe(this.columnResize.elementRef.nativeElement, {
238
+ box: 'border-box',
239
+ });
240
+ }
241
+ this._resizeObserver?.observe(column, { box: 'border-box' });
242
+ }
243
+ ngOnDestroy() {
244
+ this._resizeObserver?.disconnect();
245
+ }
246
+ _updateCachedSizes(entries) {
247
+ for (const entry of entries) {
248
+ const newEntry = entry.borderBoxSize?.length
249
+ ? {
250
+ width: entry.borderBoxSize[0].inlineSize,
251
+ height: entry.borderBoxSize[0].blockSize,
252
+ }
253
+ : {
254
+ width: entry.contentRect.width,
255
+ height: entry.contentRect.height,
256
+ };
257
+ this._elemSizeCache.set(entry.target, newEntry);
258
+ }
259
+ }
260
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: ResizeStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
261
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: ResizeStrategy });
215
262
  }
216
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: ResizeStrategy, decorators: [{
263
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: ResizeStrategy, decorators: [{
217
264
  type: Injectable
218
265
  }] });
219
266
  /**
@@ -228,7 +275,7 @@ class TableLayoutFixedResizeStrategy extends ResizeStrategy {
228
275
  styleScheduler = inject(_COALESCED_STYLE_SCHEDULER);
229
276
  table = inject(CdkTable);
230
277
  applyColumnSize(_, columnHeader, sizeInPx, previousSizeInPx) {
231
- const delta = sizeInPx - (previousSizeInPx ?? getElementWidth(columnHeader));
278
+ const delta = sizeInPx - (previousSizeInPx ?? this.getElementWidth(columnHeader));
232
279
  if (delta === 0) {
233
280
  return;
234
281
  }
@@ -238,19 +285,19 @@ class TableLayoutFixedResizeStrategy extends ResizeStrategy {
238
285
  this.updateTableWidthAndStickyColumns(delta);
239
286
  }
240
287
  applyMinColumnSize(_, columnHeader, sizeInPx) {
241
- const currentWidth = getElementWidth(columnHeader);
288
+ const currentWidth = this.getElementWidth(columnHeader);
242
289
  const newWidth = Math.max(currentWidth, sizeInPx);
243
290
  this.applyColumnSize(_, columnHeader, newWidth, currentWidth);
244
291
  }
245
292
  applyMaxColumnSize(_, columnHeader, sizeInPx) {
246
- const currentWidth = getElementWidth(columnHeader);
293
+ const currentWidth = this.getElementWidth(columnHeader);
247
294
  const newWidth = Math.min(currentWidth, sizeInPx);
248
295
  this.applyColumnSize(_, columnHeader, newWidth, currentWidth);
249
296
  }
250
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: TableLayoutFixedResizeStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
251
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: TableLayoutFixedResizeStrategy });
297
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: TableLayoutFixedResizeStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
298
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: TableLayoutFixedResizeStrategy });
252
299
  }
253
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: TableLayoutFixedResizeStrategy, decorators: [{
300
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: TableLayoutFixedResizeStrategy, decorators: [{
254
301
  type: Injectable
255
302
  }] });
256
303
  /**
@@ -298,6 +345,7 @@ class CdkFlexTableResizeStrategy extends ResizeStrategy {
298
345
  return `cdk-column-${cssFriendlyColumnName}`;
299
346
  }
300
347
  ngOnDestroy() {
348
+ super.ngOnDestroy();
301
349
  this._styleElement?.remove();
302
350
  this._styleElement = undefined;
303
351
  }
@@ -360,22 +408,16 @@ class CdkFlexTableResizeStrategy extends ResizeStrategy {
360
408
  const body = propertyKeys.map(key => `${key}:${properties.get(key)}`).join(';');
361
409
  this._getStyleSheet().insertRule(`${selector} {${body}}`, index);
362
410
  }
363
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkFlexTableResizeStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
364
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkFlexTableResizeStrategy });
411
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkFlexTableResizeStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
412
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkFlexTableResizeStrategy });
365
413
  }
366
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkFlexTableResizeStrategy, decorators: [{
414
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkFlexTableResizeStrategy, decorators: [{
367
415
  type: Injectable
368
416
  }] });
369
417
  /** Converts CSS pixel values to numbers, eg "123px" to 123. Returns NaN for non pixel values. */
370
418
  function coercePixelsFromCssValue(cssValue) {
371
419
  return Number(cssValue.match(/(\d+)px/)?.[1]);
372
420
  }
373
- /** Gets the style.width pixels on the specified element if present, otherwise its offsetWidth. */
374
- function getElementWidth(element) {
375
- // Optimization: Check style.width first as we probably set it already before reading
376
- // offsetWidth which triggers layout.
377
- return coercePixelsFromCssValue(element.style.width) || element.offsetWidth;
378
- }
379
421
  /**
380
422
  * Converts CSS flex values as set in CdkFlexTableResizeStrategy to numbers,
381
423
  * eg "0 0.01 123px" to 123.
@@ -414,10 +456,10 @@ class CdkColumnResize extends ColumnResize {
414
456
  ngZone = inject(NgZone);
415
457
  notifier = inject(ColumnResizeNotifierSource);
416
458
  table = inject(CdkTable);
417
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkColumnResize, deps: null, target: i0.ɵɵFactoryTarget.Directive });
418
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.0-next.2", type: CdkColumnResize, isStandalone: true, selector: "table[cdk-table][columnResize]", providers: [...TABLE_PROVIDERS, { provide: ColumnResize, useExisting: CdkColumnResize }], usesInheritance: true, ngImport: i0 });
459
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkColumnResize, deps: null, target: i0.ɵɵFactoryTarget.Directive });
460
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.0-next.3", type: CdkColumnResize, isStandalone: true, selector: "table[cdk-table][columnResize]", providers: [...TABLE_PROVIDERS, { provide: ColumnResize, useExisting: CdkColumnResize }], usesInheritance: true, ngImport: i0 });
419
461
  }
420
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkColumnResize, decorators: [{
462
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkColumnResize, decorators: [{
421
463
  type: Directive,
422
464
  args: [{
423
465
  selector: 'table[cdk-table][columnResize]',
@@ -436,10 +478,10 @@ class CdkColumnResizeFlex extends ColumnResize {
436
478
  ngZone = inject(NgZone);
437
479
  notifier = inject(ColumnResizeNotifierSource);
438
480
  table = inject(CdkTable);
439
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkColumnResizeFlex, deps: null, target: i0.ɵɵFactoryTarget.Directive });
440
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.0-next.2", type: CdkColumnResizeFlex, isStandalone: true, selector: "cdk-table[columnResize]", providers: [...FLEX_PROVIDERS, { provide: ColumnResize, useExisting: CdkColumnResizeFlex }], usesInheritance: true, ngImport: i0 });
481
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkColumnResizeFlex, deps: null, target: i0.ɵɵFactoryTarget.Directive });
482
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.0-next.3", type: CdkColumnResizeFlex, isStandalone: true, selector: "cdk-table[columnResize]", providers: [...FLEX_PROVIDERS, { provide: ColumnResize, useExisting: CdkColumnResizeFlex }], usesInheritance: true, ngImport: i0 });
441
483
  }
442
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkColumnResizeFlex, decorators: [{
484
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkColumnResizeFlex, decorators: [{
443
485
  type: Directive,
444
486
  args: [{
445
487
  selector: 'cdk-table[columnResize]',
@@ -458,13 +500,13 @@ class CdkDefaultEnabledColumnResize extends ColumnResize {
458
500
  ngZone = inject(NgZone);
459
501
  notifier = inject(ColumnResizeNotifierSource);
460
502
  table = inject(CdkTable);
461
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkDefaultEnabledColumnResize, deps: null, target: i0.ɵɵFactoryTarget.Directive });
462
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.0-next.2", type: CdkDefaultEnabledColumnResize, isStandalone: true, selector: "table[cdk-table]", providers: [
503
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkDefaultEnabledColumnResize, deps: null, target: i0.ɵɵFactoryTarget.Directive });
504
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.0-next.3", type: CdkDefaultEnabledColumnResize, isStandalone: true, selector: "table[cdk-table]", providers: [
463
505
  ...TABLE_PROVIDERS,
464
506
  { provide: ColumnResize, useExisting: CdkDefaultEnabledColumnResize },
465
507
  ], usesInheritance: true, ngImport: i0 });
466
508
  }
467
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkDefaultEnabledColumnResize, decorators: [{
509
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkDefaultEnabledColumnResize, decorators: [{
468
510
  type: Directive,
469
511
  args: [{
470
512
  selector: 'table[cdk-table]',
@@ -486,13 +528,13 @@ class CdkDefaultEnabledColumnResizeFlex extends ColumnResize {
486
528
  ngZone = inject(NgZone);
487
529
  notifier = inject(ColumnResizeNotifierSource);
488
530
  table = inject(CdkTable);
489
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkDefaultEnabledColumnResizeFlex, deps: null, target: i0.ɵɵFactoryTarget.Directive });
490
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.0-next.2", type: CdkDefaultEnabledColumnResizeFlex, isStandalone: true, selector: "cdk-table", providers: [
531
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkDefaultEnabledColumnResizeFlex, deps: null, target: i0.ɵɵFactoryTarget.Directive });
532
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.0-next.3", type: CdkDefaultEnabledColumnResizeFlex, isStandalone: true, selector: "cdk-table", providers: [
491
533
  ...FLEX_PROVIDERS,
492
534
  { provide: ColumnResize, useExisting: CdkDefaultEnabledColumnResizeFlex },
493
535
  ], usesInheritance: true, ngImport: i0 });
494
536
  }
495
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkDefaultEnabledColumnResizeFlex, decorators: [{
537
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkDefaultEnabledColumnResizeFlex, decorators: [{
496
538
  type: Directive,
497
539
  args: [{
498
540
  selector: 'cdk-table',
@@ -508,11 +550,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2",
508
550
  * When using this module, columns are resizable by default.
509
551
  */
510
552
  class CdkColumnResizeDefaultEnabledModule {
511
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkColumnResizeDefaultEnabledModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
512
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkColumnResizeDefaultEnabledModule, imports: [CdkDefaultEnabledColumnResize, CdkDefaultEnabledColumnResizeFlex], exports: [CdkDefaultEnabledColumnResize, CdkDefaultEnabledColumnResizeFlex] });
513
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkColumnResizeDefaultEnabledModule });
553
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkColumnResizeDefaultEnabledModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
554
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkColumnResizeDefaultEnabledModule, imports: [CdkDefaultEnabledColumnResize, CdkDefaultEnabledColumnResizeFlex], exports: [CdkDefaultEnabledColumnResize, CdkDefaultEnabledColumnResizeFlex] });
555
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkColumnResizeDefaultEnabledModule });
514
556
  }
515
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkColumnResizeDefaultEnabledModule, decorators: [{
557
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkColumnResizeDefaultEnabledModule, decorators: [{
516
558
  type: NgModule,
517
559
  args: [{
518
560
  imports: [CdkDefaultEnabledColumnResize, CdkDefaultEnabledColumnResizeFlex],
@@ -524,11 +566,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2",
524
566
  * When using this module, columns are not resizable by default.
525
567
  */
526
568
  class CdkColumnResizeModule {
527
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkColumnResizeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
528
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkColumnResizeModule, imports: [CdkColumnResize, CdkColumnResizeFlex], exports: [CdkColumnResize, CdkColumnResizeFlex] });
529
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkColumnResizeModule });
569
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkColumnResizeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
570
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkColumnResizeModule, imports: [CdkColumnResize, CdkColumnResizeFlex], exports: [CdkColumnResize, CdkColumnResizeFlex] });
571
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkColumnResizeModule });
530
572
  }
531
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: CdkColumnResizeModule, decorators: [{
573
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: CdkColumnResizeModule, decorators: [{
532
574
  type: NgModule,
533
575
  args: [{
534
576
  imports: [CdkColumnResize, CdkColumnResizeFlex],
@@ -540,10 +582,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2",
540
582
  * Can be provided by the host application to enable persistence of column resize state.
541
583
  */
542
584
  class ColumnSizeStore {
543
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: ColumnSizeStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
544
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: ColumnSizeStore });
585
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: ColumnSizeStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
586
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: ColumnSizeStore });
545
587
  }
546
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: ColumnSizeStore, decorators: [{
588
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: ColumnSizeStore, decorators: [{
547
589
  type: Injectable
548
590
  }] });
549
591
 
@@ -599,6 +641,9 @@ class Resizable {
599
641
  this._applyMaxWidthPx();
600
642
  }
601
643
  }
644
+ ngOnInit() {
645
+ this.resizeStrategy.registerColumn(this.elementRef.nativeElement);
646
+ }
602
647
  ngAfterViewInit() {
603
648
  this._listenForRowHoverEvents();
604
649
  this._listenForResizeEvents();
@@ -747,18 +792,17 @@ class Resizable {
747
792
  this.resizeStrategy.applyMaxColumnSize(this.columnDef.cssClassFriendlyName, this.elementRef.nativeElement, this.maxWidthPx);
748
793
  }
749
794
  _appendInlineHandle() {
750
- this.styleScheduler.schedule(() => {
751
- this.inlineHandle = this.document.createElement('div');
752
- this.inlineHandle.tabIndex = 0;
753
- this.inlineHandle.className = this.getInlineHandleCssClassName();
754
- // TODO: Apply correct aria role (probably slider) after a11y spec questions resolved.
755
- this.elementRef.nativeElement.appendChild(this.inlineHandle);
756
- });
757
- }
758
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: Resizable, deps: [], target: i0.ɵɵFactoryTarget.Directive });
759
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.0-next.2", type: Resizable, isStandalone: true, ngImport: i0 });
795
+ this.inlineHandle = this.document.createElement('div');
796
+ // TODO: re-apply tab index once this element has behavior.
797
+ // this.inlineHandle.tabIndex = 0;
798
+ this.inlineHandle.className = this.getInlineHandleCssClassName();
799
+ // TODO: Apply correct aria role (probably slider) after a11y spec questions resolved.
800
+ this.elementRef.nativeElement.appendChild(this.inlineHandle);
801
+ }
802
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: Resizable, deps: [], target: i0.ɵɵFactoryTarget.Directive });
803
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.0-next.3", type: Resizable, isStandalone: true, ngImport: i0 });
760
804
  }
761
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: Resizable, decorators: [{
805
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: Resizable, decorators: [{
762
806
  type: Directive
763
807
  }] });
764
808
 
@@ -769,6 +813,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2",
769
813
  * for handling column resize mouse events and displaying any visible UI on the column edge.
770
814
  */
771
815
  class ResizeOverlayHandle {
816
+ _renderer = inject(Renderer2);
772
817
  destroyed = new Subject();
773
818
  _cumulativeDeltaX = 0;
774
819
  ngAfterViewInit() {
@@ -780,13 +825,13 @@ class ResizeOverlayHandle {
780
825
  }
781
826
  _listenForMouseEvents() {
782
827
  this.ngZone.runOutsideAngular(() => {
783
- fromEvent(this.elementRef.nativeElement, 'mouseenter')
828
+ this._observableFromEvent(this.elementRef.nativeElement, 'mouseenter')
784
829
  .pipe(mapTo(this.resizeRef.origin.nativeElement), takeUntil(this.destroyed))
785
830
  .subscribe(cell => this.eventDispatcher.headerCellHovered.next(cell));
786
- fromEvent(this.elementRef.nativeElement, 'mouseleave')
831
+ this._observableFromEvent(this.elementRef.nativeElement, 'mouseleave')
787
832
  .pipe(map(event => event.relatedTarget && _closest(event.relatedTarget, HEADER_CELL_SELECTOR)), takeUntil(this.destroyed))
788
833
  .subscribe(cell => this.eventDispatcher.headerCellHovered.next(cell));
789
- fromEvent(this.elementRef.nativeElement, 'mousedown')
834
+ this._observableFromEvent(this.elementRef.nativeElement, 'mousedown')
790
835
  .pipe(takeUntil(this.destroyed))
791
836
  .subscribe(mousedownEvent => {
792
837
  this._dragStarted(mousedownEvent);
@@ -798,9 +843,9 @@ class ResizeOverlayHandle {
798
843
  if (mousedownEvent.button !== 0) {
799
844
  return;
800
845
  }
801
- const mouseup = fromEvent(this.document, 'mouseup');
802
- const mousemove = fromEvent(this.document, 'mousemove');
803
- const escape = fromEvent(this.document, 'keyup').pipe(filter(event => event.keyCode === ESCAPE));
846
+ const mouseup = this._observableFromEvent(this.document, 'mouseup');
847
+ const mousemove = this._observableFromEvent(this.document, 'mousemove');
848
+ const escape = this._observableFromEvent(this.document, 'keyup').pipe(filter(event => event.keyCode === ESCAPE));
804
849
  const startX = mousedownEvent.screenX;
805
850
  const initialSize = this._getOriginWidth();
806
851
  let overlayOffset = 0;
@@ -889,7 +934,10 @@ class ResizeOverlayHandle {
889
934
  _notifyResizeEnded(size, completedSuccessfully = false) {
890
935
  this.updateResizeActive(false);
891
936
  this.ngZone.run(() => {
892
- const sizeMessage = { columnId: this.columnDef.name, size };
937
+ const sizeMessage = {
938
+ columnId: this.columnDef.name,
939
+ size: this._computeNewSize(size, this._cumulativeDeltaX),
940
+ };
893
941
  if (completedSuccessfully) {
894
942
  if (!this.resizeRef.liveUpdates) {
895
943
  this._triggerResize(size, this._cumulativeDeltaX);
@@ -901,10 +949,20 @@ class ResizeOverlayHandle {
901
949
  }
902
950
  });
903
951
  }
904
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: ResizeOverlayHandle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
905
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.0-next.2", type: ResizeOverlayHandle, isStandalone: true, ngImport: i0 });
952
+ _observableFromEvent(element, name) {
953
+ return new Observable(subscriber => {
954
+ const handler = (event) => subscriber.next(event);
955
+ const cleanup = this._renderer.listen(element, name, handler);
956
+ return () => {
957
+ cleanup();
958
+ subscriber.complete();
959
+ };
960
+ });
961
+ }
962
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: ResizeOverlayHandle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
963
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.0-next.3", type: ResizeOverlayHandle, isStandalone: true, ngImport: i0 });
906
964
  }
907
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.2", ngImport: i0, type: ResizeOverlayHandle, decorators: [{
965
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0-next.3", ngImport: i0, type: ResizeOverlayHandle, decorators: [{
908
966
  type: Directive
909
967
  }] });
910
968