@angular/cdk 6.4.6 → 6.4.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 (151) hide show
  1. package/a11y/typings/focus-monitor/focus-monitor.d.ts +1 -1
  2. package/a11y/typings/focus-trap/focus-trap.d.ts +1 -1
  3. package/a11y/typings/index.metadata.json +1 -1
  4. package/accordion/typings/accordion.d.ts +6 -1
  5. package/accordion/typings/index.metadata.json +1 -1
  6. package/bundles/cdk-a11y.umd.js +9 -7
  7. package/bundles/cdk-a11y.umd.js.map +1 -1
  8. package/bundles/cdk-a11y.umd.min.js +1 -1
  9. package/bundles/cdk-a11y.umd.min.js.map +1 -1
  10. package/bundles/cdk-accordion.umd.js +28 -4
  11. package/bundles/cdk-accordion.umd.js.map +1 -1
  12. package/bundles/cdk-accordion.umd.min.js +1 -1
  13. package/bundles/cdk-accordion.umd.min.js.map +1 -1
  14. package/bundles/cdk-collections.umd.js +9 -3
  15. package/bundles/cdk-collections.umd.js.map +1 -1
  16. package/bundles/cdk-collections.umd.min.js +1 -1
  17. package/bundles/cdk-collections.umd.min.js.map +1 -1
  18. package/bundles/cdk-observers.umd.js +5 -10
  19. package/bundles/cdk-observers.umd.js.map +1 -1
  20. package/bundles/cdk-observers.umd.min.js +1 -1
  21. package/bundles/cdk-observers.umd.min.js.map +1 -1
  22. package/bundles/cdk-overlay.umd.js.map +1 -1
  23. package/bundles/cdk-overlay.umd.min.js.map +1 -1
  24. package/bundles/cdk-scrolling.umd.js +1 -1
  25. package/bundles/cdk-scrolling.umd.js.map +1 -1
  26. package/bundles/cdk-scrolling.umd.min.js.map +1 -1
  27. package/bundles/cdk-stepper.umd.js +36 -6
  28. package/bundles/cdk-stepper.umd.js.map +1 -1
  29. package/bundles/cdk-stepper.umd.min.js +1 -1
  30. package/bundles/cdk-stepper.umd.min.js.map +1 -1
  31. package/bundles/cdk-table.umd.js +29 -9
  32. package/bundles/cdk-table.umd.js.map +1 -1
  33. package/bundles/cdk-table.umd.min.js +1 -1
  34. package/bundles/cdk-table.umd.min.js.map +1 -1
  35. package/bundles/cdk-text-field.umd.js +12 -23
  36. package/bundles/cdk-text-field.umd.js.map +1 -1
  37. package/bundles/cdk-text-field.umd.min.js +1 -1
  38. package/bundles/cdk-text-field.umd.min.js.map +1 -1
  39. package/bundles/cdk-tree.umd.js.map +1 -1
  40. package/bundles/cdk-tree.umd.min.js.map +1 -1
  41. package/bundles/cdk.umd.js +1 -1
  42. package/bundles/cdk.umd.js.map +1 -1
  43. package/bundles/cdk.umd.min.js +1 -1
  44. package/bundles/cdk.umd.min.js.map +1 -1
  45. package/collections/typings/index.metadata.json +1 -1
  46. package/collections/typings/selection.d.ts +6 -0
  47. package/esm2015/a11y.js +10 -4
  48. package/esm2015/a11y.js.map +1 -1
  49. package/esm2015/accordion.js +18 -1
  50. package/esm2015/accordion.js.map +1 -1
  51. package/esm2015/cdk.js +1 -1
  52. package/esm2015/cdk.js.map +1 -1
  53. package/esm2015/collections.js +9 -3
  54. package/esm2015/collections.js.map +1 -1
  55. package/esm2015/observers.js +4 -4
  56. package/esm2015/observers.js.map +1 -1
  57. package/esm2015/overlay.js.map +1 -1
  58. package/esm2015/scrolling.js +1 -1
  59. package/esm2015/scrolling.js.map +1 -1
  60. package/esm2015/stepper.js +32 -4
  61. package/esm2015/stepper.js.map +1 -1
  62. package/esm2015/table.js +30 -8
  63. package/esm2015/table.js.map +1 -1
  64. package/esm2015/text-field.js +9 -9
  65. package/esm2015/text-field.js.map +1 -1
  66. package/esm2015/tree.js.map +1 -1
  67. package/esm5/a11y.es5.js +9 -7
  68. package/esm5/a11y.es5.js.map +1 -1
  69. package/esm5/accordion.es5.js +25 -1
  70. package/esm5/accordion.es5.js.map +1 -1
  71. package/esm5/cdk.es5.js +1 -1
  72. package/esm5/cdk.es5.js.map +1 -1
  73. package/esm5/collections.es5.js +9 -3
  74. package/esm5/collections.es5.js.map +1 -1
  75. package/esm5/observers.es5.js +5 -10
  76. package/esm5/observers.es5.js.map +1 -1
  77. package/esm5/overlay.es5.js.map +1 -1
  78. package/esm5/scrolling.es5.js +1 -1
  79. package/esm5/scrolling.es5.js.map +1 -1
  80. package/esm5/stepper.es5.js +34 -4
  81. package/esm5/stepper.es5.js.map +1 -1
  82. package/esm5/table.es5.js +28 -7
  83. package/esm5/table.es5.js.map +1 -1
  84. package/esm5/text-field.es5.js +12 -23
  85. package/esm5/text-field.es5.js.map +1 -1
  86. package/esm5/tree.es5.js.map +1 -1
  87. package/observers/typings/index.metadata.json +1 -1
  88. package/observers/typings/observe-content.d.ts +6 -1
  89. package/overlay/typings/index.metadata.json +1 -1
  90. package/overlay/typings/position/connected-position-strategy.d.ts +1 -1
  91. package/package.json +3 -3
  92. package/stepper/typings/index.metadata.json +1 -1
  93. package/stepper/typings/stepper.d.ts +10 -2
  94. package/table/typings/index.metadata.json +1 -1
  95. package/table/typings/sticky-styler.d.ts +3 -1
  96. package/table/typings/table.d.ts +10 -1
  97. package/text-field/typings/autofill.d.ts +13 -2
  98. package/text-field/typings/autosize.d.ts +1 -1
  99. package/text-field/typings/index.metadata.json +1 -1
  100. package/tree/typings/index.metadata.json +1 -1
  101. package/tree/typings/nested-node.d.ts +2 -2
  102. package/tree/typings/padding.d.ts +1 -1
  103. package/tree/typings/tree.d.ts +2 -2
  104. package/typings/a11y/focus-monitor/focus-monitor.d.ts +1 -1
  105. package/typings/a11y/focus-trap/focus-trap.d.ts +1 -1
  106. package/typings/a11y/index.metadata.json +1 -1
  107. package/typings/accordion/accordion.d.ts +6 -1
  108. package/typings/accordion/index.metadata.json +1 -1
  109. package/typings/collections/index.metadata.json +1 -1
  110. package/typings/collections/selection.d.ts +6 -0
  111. package/typings/esm5/a11y/focus-monitor/focus-monitor.d.ts +1 -1
  112. package/typings/esm5/a11y/focus-trap/focus-trap.d.ts +1 -1
  113. package/typings/esm5/a11y/index.metadata.json +1 -1
  114. package/typings/esm5/accordion/accordion.d.ts +6 -1
  115. package/typings/esm5/accordion/index.metadata.json +1 -1
  116. package/typings/esm5/collections/index.metadata.json +1 -1
  117. package/typings/esm5/collections/selection.d.ts +6 -0
  118. package/typings/esm5/index.metadata.json +1 -1
  119. package/typings/esm5/observers/index.metadata.json +1 -1
  120. package/typings/esm5/observers/observe-content.d.ts +6 -1
  121. package/typings/esm5/overlay/index.metadata.json +1 -1
  122. package/typings/esm5/overlay/position/connected-position-strategy.d.ts +1 -1
  123. package/typings/esm5/stepper/index.metadata.json +1 -1
  124. package/typings/esm5/stepper/stepper.d.ts +10 -2
  125. package/typings/esm5/table/index.metadata.json +1 -1
  126. package/typings/esm5/table/sticky-styler.d.ts +3 -1
  127. package/typings/esm5/table/table.d.ts +10 -1
  128. package/typings/esm5/text-field/autofill.d.ts +13 -2
  129. package/typings/esm5/text-field/autosize.d.ts +1 -1
  130. package/typings/esm5/text-field/index.metadata.json +1 -1
  131. package/typings/esm5/tree/index.metadata.json +1 -1
  132. package/typings/esm5/tree/nested-node.d.ts +2 -2
  133. package/typings/esm5/tree/padding.d.ts +1 -1
  134. package/typings/esm5/tree/tree.d.ts +2 -2
  135. package/typings/index.metadata.json +1 -1
  136. package/typings/observers/index.metadata.json +1 -1
  137. package/typings/observers/observe-content.d.ts +6 -1
  138. package/typings/overlay/index.metadata.json +1 -1
  139. package/typings/overlay/position/connected-position-strategy.d.ts +1 -1
  140. package/typings/stepper/index.metadata.json +1 -1
  141. package/typings/stepper/stepper.d.ts +10 -2
  142. package/typings/table/index.metadata.json +1 -1
  143. package/typings/table/sticky-styler.d.ts +3 -1
  144. package/typings/table/table.d.ts +10 -1
  145. package/typings/text-field/autofill.d.ts +13 -2
  146. package/typings/text-field/autosize.d.ts +1 -1
  147. package/typings/text-field/index.metadata.json +1 -1
  148. package/typings/tree/index.metadata.json +1 -1
  149. package/typings/tree/nested-node.d.ts +2 -2
  150. package/typings/tree/padding.d.ts +1 -1
  151. package/typings/tree/tree.d.ts +2 -2
@@ -153,7 +153,7 @@ class ScrollDispatcher {
153
153
  if (element == scrollableElement) {
154
154
  return true;
155
155
  }
156
- } while (element = element.parentElement);
156
+ } while (element = /** @type {?} */ ((element)).parentElement);
157
157
  return false;
158
158
  }
159
159
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"scrolling.js","sources":["../../../src/cdk/scrolling/scrolling-module.ts","../../../src/cdk/scrolling/viewport-ruler.ts","../../../src/cdk/scrolling/scrollable.ts","../../../src/cdk/scrolling/scroll-dispatcher.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.io/license\n */\n\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {NgModule} from '@angular/core';\nimport {CdkScrollable} from './scrollable';\n\n@NgModule({\n imports: [PlatformModule],\n exports: [CdkScrollable],\n declarations: [CdkScrollable],\n})\nexport class ScrollDispatchModule {}\n","/**\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.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {Injectable, NgZone, OnDestroy, Optional, SkipSelf} from '@angular/core';\nimport {merge, of as observableOf, fromEvent, Observable, Subscription} from 'rxjs';\nimport {auditTime} from 'rxjs/operators';\n\n/** Time in ms to throttle the resize events by default. */\nexport const DEFAULT_RESIZE_TIME = 20;\n\n/**\n * Simple utility for getting the bounds of the browser viewport.\n * @docs-private\n */\n@Injectable({providedIn: 'root'})\nexport class ViewportRuler implements OnDestroy {\n /** Cached viewport dimensions. */\n private _viewportSize: {width: number; height: number};\n\n /** Stream of viewport change events. */\n private _change: Observable<Event>;\n\n /** Subscription to streams that invalidate the cached viewport dimensions. */\n private _invalidateCache: Subscription;\n\n constructor(private _platform: Platform, ngZone: NgZone) {\n this._change = _platform.isBrowser ? ngZone.runOutsideAngular(() => {\n return merge<Event>(fromEvent(window, 'resize'), fromEvent(window, 'orientationchange'));\n }) : observableOf();\n\n this._invalidateCache = this.change().subscribe(() => this._updateViewportSize());\n }\n\n ngOnDestroy() {\n this._invalidateCache.unsubscribe();\n }\n\n /** Returns the viewport's width and height. */\n getViewportSize(): Readonly<{width: number, height: number}> {\n if (!this._viewportSize) {\n this._updateViewportSize();\n }\n\n const output = {width: this._viewportSize.width, height: this._viewportSize.height};\n\n // If we're not on a browser, don't cache the size since it'll be mocked out anyway.\n if (!this._platform.isBrowser) {\n this._viewportSize = null!;\n }\n\n return output;\n }\n\n /** Gets a ClientRect for the viewport's bounds. */\n getViewportRect(): ClientRect {\n // Use the document element's bounding rect rather than the window scroll properties\n // (e.g. pageYOffset, scrollY) due to in issue in Chrome and IE where window scroll\n // properties and client coordinates (boundingClientRect, clientX/Y, etc.) are in different\n // conceptual viewports. Under most circumstances these viewports are equivalent, but they\n // can disagree when the page is pinch-zoomed (on devices that support touch).\n // See https://bugs.chromium.org/p/chromium/issues/detail?id=489206#c4\n // We use the documentElement instead of the body because, by default (without a css reset)\n // browsers typically give the document body an 8px margin, which is not included in\n // getBoundingClientRect().\n const scrollPosition = this.getViewportScrollPosition();\n const {width, height} = this.getViewportSize();\n\n return {\n top: scrollPosition.top,\n left: scrollPosition.left,\n bottom: scrollPosition.top + height,\n right: scrollPosition.left + width,\n height,\n width,\n };\n }\n\n /** Gets the (top, left) scroll position of the viewport. */\n getViewportScrollPosition() {\n // While we can get a reference to the fake document\n // during SSR, it doesn't have getBoundingClientRect.\n if (!this._platform.isBrowser) {\n return {top: 0, left: 0};\n }\n\n // The top-left-corner of the viewport is determined by the scroll position of the document\n // body, normally just (scrollLeft, scrollTop). However, Chrome and Firefox disagree about\n // whether `document.body` or `document.documentElement` is the scrolled element, so reading\n // `scrollTop` and `scrollLeft` is inconsistent. However, using the bounding rect of\n // `document.documentElement` works consistently, where the `top` and `left` values will\n // equal negative the scroll position.\n const documentRect = document.documentElement.getBoundingClientRect();\n\n const top = -documentRect.top || document.body.scrollTop || window.scrollY ||\n document.documentElement.scrollTop || 0;\n\n const left = -documentRect.left || document.body.scrollLeft || window.scrollX ||\n document.documentElement.scrollLeft || 0;\n\n return {top, left};\n }\n\n /**\n * Returns a stream that emits whenever the size of the viewport changes.\n * @param throttleTime Time in milliseconds to throttle the stream.\n */\n change(throttleTime: number = DEFAULT_RESIZE_TIME): Observable<Event> {\n return throttleTime > 0 ? this._change.pipe(auditTime(throttleTime)) : this._change;\n }\n\n /** Updates the cached viewport size. */\n private _updateViewportSize() {\n this._viewportSize = this._platform.isBrowser ?\n {width: window.innerWidth, height: window.innerHeight} :\n {width: 0, height: 0};\n }\n}\n\n\n/** @docs-private @deprecated @breaking-change 7.0.0 */\nexport function VIEWPORT_RULER_PROVIDER_FACTORY(parentRuler: ViewportRuler,\n platform: Platform,\n ngZone: NgZone) {\n return parentRuler || new ViewportRuler(platform, ngZone);\n}\n\n/** @docs-private @deprecated @breaking-change 7.0.0 */\nexport const VIEWPORT_RULER_PROVIDER = {\n // If there is already a ViewportRuler available, use that. Otherwise, provide a new one.\n provide: ViewportRuler,\n deps: [[new Optional(), new SkipSelf(), ViewportRuler], Platform, NgZone],\n useFactory: VIEWPORT_RULER_PROVIDER_FACTORY\n};\n","/**\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.io/license\n */\n\nimport {Directive, ElementRef, OnInit, OnDestroy, NgZone} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\nimport {ScrollDispatcher} from './scroll-dispatcher';\n\n\n/**\n * Sends an event when the directive's element is scrolled. Registers itself with the\n * ScrollDispatcher service to include itself as part of its collection of scrolling events that it\n * can be listened to through the service.\n */\n@Directive({\n selector: '[cdk-scrollable], [cdkScrollable]'\n})\nexport class CdkScrollable implements OnInit, OnDestroy {\n private _elementScrolled: Subject<Event> = new Subject();\n private _scrollListener = (event: Event) => this._elementScrolled.next(event);\n\n constructor(private _elementRef: ElementRef,\n private _scroll: ScrollDispatcher,\n private _ngZone: NgZone) {}\n\n ngOnInit() {\n this._ngZone.runOutsideAngular(() => {\n this.getElementRef().nativeElement.addEventListener('scroll', this._scrollListener);\n });\n\n this._scroll.register(this);\n }\n\n ngOnDestroy() {\n this._scroll.deregister(this);\n\n if (this._scrollListener) {\n this.getElementRef().nativeElement.removeEventListener('scroll', this._scrollListener);\n }\n\n this._elementScrolled.complete();\n }\n\n /**\n * Returns observable that emits when a scroll event is fired on the host element.\n */\n elementScrolled(): Observable<any> {\n return this._elementScrolled.asObservable();\n }\n\n getElementRef(): ElementRef {\n return this._elementRef;\n }\n}\n","/**\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.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {\n ElementRef,\n Injectable,\n NgZone,\n OnDestroy,\n Optional,\n SkipSelf,\n} from '@angular/core';\nimport {fromEvent, of as observableOf, Subject, Subscription, Observable} from 'rxjs';\nimport {auditTime, filter} from 'rxjs/operators';\nimport {CdkScrollable} from './scrollable';\n\n\n/** Time in ms to throttle the scrolling events by default. */\nexport const DEFAULT_SCROLL_TIME = 20;\n\n/**\n * Service contained all registered Scrollable references and emits an event when any one of the\n * Scrollable references emit a scrolled event.\n */\n@Injectable({providedIn: 'root'})\nexport class ScrollDispatcher implements OnDestroy {\n constructor(private _ngZone: NgZone, private _platform: Platform) { }\n\n /** Subject for notifying that a registered scrollable reference element has been scrolled. */\n private _scrolled = new Subject<CdkScrollable|void>();\n\n /** Keeps track of the global `scroll` and `resize` subscriptions. */\n _globalSubscription: Subscription | null = null;\n\n /** Keeps track of the amount of subscriptions to `scrolled`. Used for cleaning up afterwards. */\n private _scrolledCount = 0;\n\n /**\n * Map of all the scrollable references that are registered with the service and their\n * scroll event subscriptions.\n */\n scrollContainers: Map<CdkScrollable, Subscription> = new Map();\n\n /**\n * Registers a scrollable instance with the service and listens for its scrolled events. When the\n * scrollable is scrolled, the service emits the event to its scrolled observable.\n * @param scrollable Scrollable instance to be registered.\n */\n register(scrollable: CdkScrollable): void {\n const scrollSubscription = scrollable.elementScrolled()\n .subscribe(() => this._scrolled.next(scrollable));\n\n this.scrollContainers.set(scrollable, scrollSubscription);\n }\n\n /**\n * Deregisters a Scrollable reference and unsubscribes from its scroll event observable.\n * @param scrollable Scrollable instance to be deregistered.\n */\n deregister(scrollable: CdkScrollable): void {\n const scrollableReference = this.scrollContainers.get(scrollable);\n\n if (scrollableReference) {\n scrollableReference.unsubscribe();\n this.scrollContainers.delete(scrollable);\n }\n }\n\n /**\n * Returns an observable that emits an event whenever any of the registered Scrollable\n * references (or window, document, or body) fire a scrolled event. Can provide a time in ms\n * to override the default \"throttle\" time.\n *\n * **Note:** in order to avoid hitting change detection for every scroll event,\n * all of the events emitted from this stream will be run outside the Angular zone.\n * If you need to update any data bindings as a result of a scroll event, you have\n * to run the callback using `NgZone.run`.\n */\n scrolled(auditTimeInMs: number = DEFAULT_SCROLL_TIME): Observable<CdkScrollable|void> {\n return this._platform.isBrowser ? Observable.create(observer => {\n if (!this._globalSubscription) {\n this._addGlobalListener();\n }\n\n // In the case of a 0ms delay, use an observable without auditTime\n // since it does add a perceptible delay in processing overhead.\n const subscription = auditTimeInMs > 0 ?\n this._scrolled.pipe(auditTime(auditTimeInMs)).subscribe(observer) :\n this._scrolled.subscribe(observer);\n\n this._scrolledCount++;\n\n return () => {\n subscription.unsubscribe();\n this._scrolledCount--;\n\n if (!this._scrolledCount) {\n this._removeGlobalListener();\n }\n };\n }) : observableOf<void>();\n }\n\n ngOnDestroy() {\n this._removeGlobalListener();\n this.scrollContainers.forEach((_, container) => this.deregister(container));\n this._scrolled.complete();\n }\n\n /**\n * Returns an observable that emits whenever any of the\n * scrollable ancestors of an element are scrolled.\n * @param elementRef Element whose ancestors to listen for.\n * @param auditTimeInMs Time to throttle the scroll events.\n */\n ancestorScrolled(elementRef: ElementRef, auditTimeInMs?: number): Observable<CdkScrollable|void> {\n const ancestors = this.getAncestorScrollContainers(elementRef);\n\n return this.scrolled(auditTimeInMs).pipe(filter(target => {\n return !target || ancestors.indexOf(target) > -1;\n }));\n }\n\n /** Returns all registered Scrollables that contain the provided element. */\n getAncestorScrollContainers(elementRef: ElementRef): CdkScrollable[] {\n const scrollingContainers: CdkScrollable[] = [];\n\n this.scrollContainers.forEach((_subscription: Subscription, scrollable: CdkScrollable) => {\n if (this._scrollableContainsElement(scrollable, elementRef)) {\n scrollingContainers.push(scrollable);\n }\n });\n\n return scrollingContainers;\n }\n\n /** Returns true if the element is contained within the provided Scrollable. */\n private _scrollableContainsElement(scrollable: CdkScrollable, elementRef: ElementRef): boolean {\n let element = elementRef.nativeElement;\n let scrollableElement = scrollable.getElementRef().nativeElement;\n\n // Traverse through the element parents until we reach null, checking if any of the elements\n // are the scrollable's element.\n do {\n if (element == scrollableElement) { return true; }\n } while (element = element.parentElement);\n\n return false;\n }\n\n /** Sets up the global scroll listeners. */\n private _addGlobalListener() {\n this._globalSubscription = this._ngZone.runOutsideAngular(() => {\n return fromEvent(window.document, 'scroll').subscribe(() => this._scrolled.next());\n });\n }\n\n /** Cleans up the global scroll listener. */\n private _removeGlobalListener() {\n if (this._globalSubscription) {\n this._globalSubscription.unsubscribe();\n this._globalSubscription = null;\n }\n }\n}\n\n\n/** @docs-private @deprecated @breaking-change 7.0.0 */\nexport function SCROLL_DISPATCHER_PROVIDER_FACTORY(\n parentDispatcher: ScrollDispatcher, ngZone: NgZone, platform: Platform) {\n return parentDispatcher || new ScrollDispatcher(ngZone, platform);\n}\n\n/** @docs-private @deprecated @breaking-change 7.0.0 */\nexport const SCROLL_DISPATCHER_PROVIDER = {\n // If there is already a ScrollDispatcher available, use that. Otherwise, provide a new one.\n provide: ScrollDispatcher,\n deps: [[new Optional(), new SkipSelf(), ScrollDispatcher], NgZone, Platform],\n useFactory: SCROLL_DISPATCHER_PROVIDER_FACTORY\n};\n"],"names":["observableOf"],"mappings":"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"}
1
+ {"version":3,"file":"scrolling.js","sources":["../../../src/cdk/scrolling/scrolling-module.ts","../../../src/cdk/scrolling/viewport-ruler.ts","../../../src/cdk/scrolling/scrollable.ts","../../../src/cdk/scrolling/scroll-dispatcher.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.io/license\n */\n\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {NgModule} from '@angular/core';\nimport {CdkScrollable} from './scrollable';\n\n@NgModule({\n imports: [PlatformModule],\n exports: [CdkScrollable],\n declarations: [CdkScrollable],\n})\nexport class ScrollDispatchModule {}\n","/**\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.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {Injectable, NgZone, OnDestroy, Optional, SkipSelf} from '@angular/core';\nimport {merge, of as observableOf, fromEvent, Observable, Subscription} from 'rxjs';\nimport {auditTime} from 'rxjs/operators';\n\n/** Time in ms to throttle the resize events by default. */\nexport const DEFAULT_RESIZE_TIME = 20;\n\n/**\n * Simple utility for getting the bounds of the browser viewport.\n * @docs-private\n */\n@Injectable({providedIn: 'root'})\nexport class ViewportRuler implements OnDestroy {\n /** Cached viewport dimensions. */\n private _viewportSize: {width: number; height: number};\n\n /** Stream of viewport change events. */\n private _change: Observable<Event>;\n\n /** Subscription to streams that invalidate the cached viewport dimensions. */\n private _invalidateCache: Subscription;\n\n constructor(private _platform: Platform, ngZone: NgZone) {\n this._change = _platform.isBrowser ? ngZone.runOutsideAngular(() => {\n return merge<Event>(fromEvent(window, 'resize'), fromEvent(window, 'orientationchange'));\n }) : observableOf();\n\n this._invalidateCache = this.change().subscribe(() => this._updateViewportSize());\n }\n\n ngOnDestroy() {\n this._invalidateCache.unsubscribe();\n }\n\n /** Returns the viewport's width and height. */\n getViewportSize(): Readonly<{width: number, height: number}> {\n if (!this._viewportSize) {\n this._updateViewportSize();\n }\n\n const output = {width: this._viewportSize.width, height: this._viewportSize.height};\n\n // If we're not on a browser, don't cache the size since it'll be mocked out anyway.\n if (!this._platform.isBrowser) {\n this._viewportSize = null!;\n }\n\n return output;\n }\n\n /** Gets a ClientRect for the viewport's bounds. */\n getViewportRect(): ClientRect {\n // Use the document element's bounding rect rather than the window scroll properties\n // (e.g. pageYOffset, scrollY) due to in issue in Chrome and IE where window scroll\n // properties and client coordinates (boundingClientRect, clientX/Y, etc.) are in different\n // conceptual viewports. Under most circumstances these viewports are equivalent, but they\n // can disagree when the page is pinch-zoomed (on devices that support touch).\n // See https://bugs.chromium.org/p/chromium/issues/detail?id=489206#c4\n // We use the documentElement instead of the body because, by default (without a css reset)\n // browsers typically give the document body an 8px margin, which is not included in\n // getBoundingClientRect().\n const scrollPosition = this.getViewportScrollPosition();\n const {width, height} = this.getViewportSize();\n\n return {\n top: scrollPosition.top,\n left: scrollPosition.left,\n bottom: scrollPosition.top + height,\n right: scrollPosition.left + width,\n height,\n width,\n };\n }\n\n /** Gets the (top, left) scroll position of the viewport. */\n getViewportScrollPosition() {\n // While we can get a reference to the fake document\n // during SSR, it doesn't have getBoundingClientRect.\n if (!this._platform.isBrowser) {\n return {top: 0, left: 0};\n }\n\n // The top-left-corner of the viewport is determined by the scroll position of the document\n // body, normally just (scrollLeft, scrollTop). However, Chrome and Firefox disagree about\n // whether `document.body` or `document.documentElement` is the scrolled element, so reading\n // `scrollTop` and `scrollLeft` is inconsistent. However, using the bounding rect of\n // `document.documentElement` works consistently, where the `top` and `left` values will\n // equal negative the scroll position.\n const documentRect = document.documentElement.getBoundingClientRect();\n\n const top = -documentRect.top || document.body.scrollTop || window.scrollY ||\n document.documentElement.scrollTop || 0;\n\n const left = -documentRect.left || document.body.scrollLeft || window.scrollX ||\n document.documentElement.scrollLeft || 0;\n\n return {top, left};\n }\n\n /**\n * Returns a stream that emits whenever the size of the viewport changes.\n * @param throttleTime Time in milliseconds to throttle the stream.\n */\n change(throttleTime: number = DEFAULT_RESIZE_TIME): Observable<Event> {\n return throttleTime > 0 ? this._change.pipe(auditTime(throttleTime)) : this._change;\n }\n\n /** Updates the cached viewport size. */\n private _updateViewportSize() {\n this._viewportSize = this._platform.isBrowser ?\n {width: window.innerWidth, height: window.innerHeight} :\n {width: 0, height: 0};\n }\n}\n\n\n/** @docs-private @deprecated @breaking-change 7.0.0 */\nexport function VIEWPORT_RULER_PROVIDER_FACTORY(parentRuler: ViewportRuler,\n platform: Platform,\n ngZone: NgZone) {\n return parentRuler || new ViewportRuler(platform, ngZone);\n}\n\n/** @docs-private @deprecated @breaking-change 7.0.0 */\nexport const VIEWPORT_RULER_PROVIDER = {\n // If there is already a ViewportRuler available, use that. Otherwise, provide a new one.\n provide: ViewportRuler,\n deps: [[new Optional(), new SkipSelf(), ViewportRuler], Platform, NgZone],\n useFactory: VIEWPORT_RULER_PROVIDER_FACTORY\n};\n","/**\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.io/license\n */\n\nimport {Directive, ElementRef, OnInit, OnDestroy, NgZone} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\nimport {ScrollDispatcher} from './scroll-dispatcher';\n\n\n/**\n * Sends an event when the directive's element is scrolled. Registers itself with the\n * ScrollDispatcher service to include itself as part of its collection of scrolling events that it\n * can be listened to through the service.\n */\n@Directive({\n selector: '[cdk-scrollable], [cdkScrollable]'\n})\nexport class CdkScrollable implements OnInit, OnDestroy {\n private _elementScrolled: Subject<Event> = new Subject();\n private _scrollListener = (event: Event) => this._elementScrolled.next(event);\n\n constructor(private _elementRef: ElementRef,\n private _scroll: ScrollDispatcher,\n private _ngZone: NgZone) {}\n\n ngOnInit() {\n this._ngZone.runOutsideAngular(() => {\n this.getElementRef().nativeElement.addEventListener('scroll', this._scrollListener);\n });\n\n this._scroll.register(this);\n }\n\n ngOnDestroy() {\n this._scroll.deregister(this);\n\n if (this._scrollListener) {\n this.getElementRef().nativeElement.removeEventListener('scroll', this._scrollListener);\n }\n\n this._elementScrolled.complete();\n }\n\n /**\n * Returns observable that emits when a scroll event is fired on the host element.\n */\n elementScrolled(): Observable<any> {\n return this._elementScrolled.asObservable();\n }\n\n getElementRef(): ElementRef {\n return this._elementRef;\n }\n}\n","/**\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.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {\n ElementRef,\n Injectable,\n NgZone,\n OnDestroy,\n Optional,\n SkipSelf,\n} from '@angular/core';\nimport {fromEvent, of as observableOf, Subject, Subscription, Observable} from 'rxjs';\nimport {auditTime, filter} from 'rxjs/operators';\nimport {CdkScrollable} from './scrollable';\n\n\n/** Time in ms to throttle the scrolling events by default. */\nexport const DEFAULT_SCROLL_TIME = 20;\n\n/**\n * Service contained all registered Scrollable references and emits an event when any one of the\n * Scrollable references emit a scrolled event.\n */\n@Injectable({providedIn: 'root'})\nexport class ScrollDispatcher implements OnDestroy {\n constructor(private _ngZone: NgZone, private _platform: Platform) { }\n\n /** Subject for notifying that a registered scrollable reference element has been scrolled. */\n private _scrolled = new Subject<CdkScrollable|void>();\n\n /** Keeps track of the global `scroll` and `resize` subscriptions. */\n _globalSubscription: Subscription | null = null;\n\n /** Keeps track of the amount of subscriptions to `scrolled`. Used for cleaning up afterwards. */\n private _scrolledCount = 0;\n\n /**\n * Map of all the scrollable references that are registered with the service and their\n * scroll event subscriptions.\n */\n scrollContainers: Map<CdkScrollable, Subscription> = new Map();\n\n /**\n * Registers a scrollable instance with the service and listens for its scrolled events. When the\n * scrollable is scrolled, the service emits the event to its scrolled observable.\n * @param scrollable Scrollable instance to be registered.\n */\n register(scrollable: CdkScrollable): void {\n const scrollSubscription = scrollable.elementScrolled()\n .subscribe(() => this._scrolled.next(scrollable));\n\n this.scrollContainers.set(scrollable, scrollSubscription);\n }\n\n /**\n * Deregisters a Scrollable reference and unsubscribes from its scroll event observable.\n * @param scrollable Scrollable instance to be deregistered.\n */\n deregister(scrollable: CdkScrollable): void {\n const scrollableReference = this.scrollContainers.get(scrollable);\n\n if (scrollableReference) {\n scrollableReference.unsubscribe();\n this.scrollContainers.delete(scrollable);\n }\n }\n\n /**\n * Returns an observable that emits an event whenever any of the registered Scrollable\n * references (or window, document, or body) fire a scrolled event. Can provide a time in ms\n * to override the default \"throttle\" time.\n *\n * **Note:** in order to avoid hitting change detection for every scroll event,\n * all of the events emitted from this stream will be run outside the Angular zone.\n * If you need to update any data bindings as a result of a scroll event, you have\n * to run the callback using `NgZone.run`.\n */\n scrolled(auditTimeInMs: number = DEFAULT_SCROLL_TIME): Observable<CdkScrollable|void> {\n return this._platform.isBrowser ? Observable.create(observer => {\n if (!this._globalSubscription) {\n this._addGlobalListener();\n }\n\n // In the case of a 0ms delay, use an observable without auditTime\n // since it does add a perceptible delay in processing overhead.\n const subscription = auditTimeInMs > 0 ?\n this._scrolled.pipe(auditTime(auditTimeInMs)).subscribe(observer) :\n this._scrolled.subscribe(observer);\n\n this._scrolledCount++;\n\n return () => {\n subscription.unsubscribe();\n this._scrolledCount--;\n\n if (!this._scrolledCount) {\n this._removeGlobalListener();\n }\n };\n }) : observableOf<void>();\n }\n\n ngOnDestroy() {\n this._removeGlobalListener();\n this.scrollContainers.forEach((_, container) => this.deregister(container));\n this._scrolled.complete();\n }\n\n /**\n * Returns an observable that emits whenever any of the\n * scrollable ancestors of an element are scrolled.\n * @param elementRef Element whose ancestors to listen for.\n * @param auditTimeInMs Time to throttle the scroll events.\n */\n ancestorScrolled(elementRef: ElementRef, auditTimeInMs?: number): Observable<CdkScrollable|void> {\n const ancestors = this.getAncestorScrollContainers(elementRef);\n\n return this.scrolled(auditTimeInMs).pipe(filter(target => {\n return !target || ancestors.indexOf(target) > -1;\n }));\n }\n\n /** Returns all registered Scrollables that contain the provided element. */\n getAncestorScrollContainers(elementRef: ElementRef): CdkScrollable[] {\n const scrollingContainers: CdkScrollable[] = [];\n\n this.scrollContainers.forEach((_subscription: Subscription, scrollable: CdkScrollable) => {\n if (this._scrollableContainsElement(scrollable, elementRef)) {\n scrollingContainers.push(scrollable);\n }\n });\n\n return scrollingContainers;\n }\n\n /** Returns true if the element is contained within the provided Scrollable. */\n private _scrollableContainsElement(scrollable: CdkScrollable, elementRef: ElementRef): boolean {\n let element: HTMLElement | null = elementRef.nativeElement;\n let scrollableElement = scrollable.getElementRef().nativeElement;\n\n // Traverse through the element parents until we reach null, checking if any of the elements\n // are the scrollable's element.\n do {\n if (element == scrollableElement) { return true; }\n } while (element = element!.parentElement);\n\n return false;\n }\n\n /** Sets up the global scroll listeners. */\n private _addGlobalListener() {\n this._globalSubscription = this._ngZone.runOutsideAngular(() => {\n return fromEvent(window.document, 'scroll').subscribe(() => this._scrolled.next());\n });\n }\n\n /** Cleans up the global scroll listener. */\n private _removeGlobalListener() {\n if (this._globalSubscription) {\n this._globalSubscription.unsubscribe();\n this._globalSubscription = null;\n }\n }\n}\n\n\n/** @docs-private @deprecated @breaking-change 7.0.0 */\nexport function SCROLL_DISPATCHER_PROVIDER_FACTORY(\n parentDispatcher: ScrollDispatcher, ngZone: NgZone, platform: Platform) {\n return parentDispatcher || new ScrollDispatcher(ngZone, platform);\n}\n\n/** @docs-private @deprecated @breaking-change 7.0.0 */\nexport const SCROLL_DISPATCHER_PROVIDER = {\n // If there is already a ScrollDispatcher available, use that. Otherwise, provide a new one.\n provide: ScrollDispatcher,\n deps: [[new Optional(), new SkipSelf(), ScrollDispatcher], NgZone, Platform],\n useFactory: SCROLL_DISPATCHER_PROVIDER_FACTORY\n};\n"],"names":["observableOf"],"mappings":"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"}
@@ -5,15 +5,15 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
- import { Directive, TemplateRef, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, EventEmitter, forwardRef, Inject, Input, Optional, Output, ViewChild, ViewEncapsulation, NgModule } from '@angular/core';
8
+ import { Directive, TemplateRef, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, EventEmitter, ElementRef, forwardRef, Inject, Input, Optional, Output, ViewChild, ViewEncapsulation, NgModule } from '@angular/core';
9
9
  import { FocusKeyManager } from '@angular/cdk/a11y';
10
10
  import { Directionality, BidiModule } from '@angular/cdk/bidi';
11
11
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
12
12
  import { END, ENTER, HOME, SPACE } from '@angular/cdk/keycodes';
13
+ import { DOCUMENT, CommonModule } from '@angular/common';
13
14
  import '@angular/forms';
14
15
  import { Subject, of } from 'rxjs';
15
16
  import { startWith, takeUntil } from 'rxjs/operators';
16
- import { CommonModule } from '@angular/common';
17
17
 
18
18
  /**
19
19
  * @fileoverview added by tsickle
@@ -164,10 +164,13 @@ class CdkStepper {
164
164
  /**
165
165
  * @param {?} _dir
166
166
  * @param {?} _changeDetectorRef
167
+ * @param {?=} _elementRef
168
+ * @param {?=} _document
167
169
  */
168
- constructor(_dir, _changeDetectorRef) {
170
+ constructor(_dir, _changeDetectorRef, _elementRef, _document) {
169
171
  this._dir = _dir;
170
172
  this._changeDetectorRef = _changeDetectorRef;
173
+ this._elementRef = _elementRef;
171
174
  /**
172
175
  * Emits when the component is destroyed.
173
176
  */
@@ -180,6 +183,7 @@ class CdkStepper {
180
183
  this.selectionChange = new EventEmitter();
181
184
  this._orientation = 'horizontal';
182
185
  this._groupId = nextId++;
186
+ this._document = _document;
183
187
  }
184
188
  /**
185
189
  * Whether the validity of previous steps should be checked or not.
@@ -242,6 +246,11 @@ class CdkStepper {
242
246
  .pipe(startWith(this._layoutDirection()), takeUntil(this._destroyed))
243
247
  .subscribe(direction => this._keyManager.withHorizontalOrientation(direction));
244
248
  this._keyManager.updateActiveItemIndex(this._selectedIndex);
249
+ this._steps.changes.pipe(takeUntil(this._destroyed)).subscribe(() => {
250
+ if (!this.selected) {
251
+ this._selectedIndex = Math.max(this._selectedIndex - 1, 0);
252
+ }
253
+ });
245
254
  }
246
255
  /**
247
256
  * @return {?}
@@ -344,7 +353,12 @@ class CdkStepper {
344
353
  selectedStep: stepsArray[newIndex],
345
354
  previouslySelectedStep: stepsArray[this._selectedIndex],
346
355
  });
347
- this._keyManager.updateActiveItemIndex(newIndex);
356
+ // If focus is inside the stepper, move it to the next header, otherwise it may become
357
+ // lost when the active step content is hidden. We can't be more granular with the check
358
+ // (e.g. checking whether focus is inside the active step), because we don't have a
359
+ // reference to the elements that are rendering out the content.
360
+ this._containsFocus() ? this._keyManager.setActiveItem(newIndex) :
361
+ this._keyManager.updateActiveItemIndex(newIndex);
348
362
  this._selectedIndex = newIndex;
349
363
  this._stateChanged();
350
364
  }
@@ -394,6 +408,18 @@ class CdkStepper {
394
408
  _layoutDirection() {
395
409
  return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';
396
410
  }
411
+ /**
412
+ * Checks whether the stepper contains the focused element.
413
+ * @return {?}
414
+ */
415
+ _containsFocus() {
416
+ if (!this._document || !this._elementRef) {
417
+ return false;
418
+ }
419
+ const /** @type {?} */ stepperElement = this._elementRef.nativeElement;
420
+ const /** @type {?} */ focusedElement = this._document.activeElement;
421
+ return stepperElement === focusedElement || stepperElement.contains(focusedElement);
422
+ }
397
423
  }
398
424
  CdkStepper.decorators = [
399
425
  { type: Directive, args: [{
@@ -405,6 +431,8 @@ CdkStepper.decorators = [
405
431
  CdkStepper.ctorParameters = () => [
406
432
  { type: Directionality, decorators: [{ type: Optional },] },
407
433
  { type: ChangeDetectorRef, },
434
+ { type: ElementRef, },
435
+ { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] },] },
408
436
  ];
409
437
  CdkStepper.propDecorators = {
410
438
  "_steps": [{ type: ContentChildren, args: [CdkStep,] },],
@@ -1 +1 @@
1
- {"version":3,"file":"stepper.js","sources":["../../../src/cdk/stepper/stepper-module.ts","../../../src/cdk/stepper/stepper-button.ts","../../../src/cdk/stepper/stepper.ts","../../../src/cdk/stepper/step-label.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.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CdkStepper, CdkStep} from './stepper';\nimport {CommonModule} from '@angular/common';\nimport {CdkStepLabel} from './step-label';\nimport {CdkStepperNext, CdkStepperPrevious} from './stepper-button';\nimport {BidiModule} from '@angular/cdk/bidi';\n\n@NgModule({\n imports: [BidiModule, CommonModule],\n exports: [CdkStep, CdkStepper, CdkStepLabel, CdkStepperNext, CdkStepperPrevious],\n declarations: [CdkStep, CdkStepper, CdkStepLabel, CdkStepperNext, CdkStepperPrevious]\n})\nexport class CdkStepperModule {}\n","/**\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.io/license\n */\n\nimport {Directive, Input} from '@angular/core';\nimport {CdkStepper} from './stepper';\n\n/** Button that moves to the next step in a stepper workflow. */\n@Directive({\n selector: 'button[cdkStepperNext]',\n host: {\n '(click)': '_stepper.next()',\n '[type]': 'type',\n }\n})\nexport class CdkStepperNext {\n /** Type of the next button. Defaults to \"submit\" if not specified. */\n @Input() type: string = 'submit';\n\n constructor(public _stepper: CdkStepper) {}\n}\n\n/** Button that moves to the previous step in a stepper workflow. */\n@Directive({\n selector: 'button[cdkStepperPrevious]',\n host: {\n '(click)': '_stepper.previous()',\n '[type]': 'type',\n }\n})\nexport class CdkStepperPrevious {\n /** Type of the previous button. Defaults to \"button\" if not specified. */\n @Input() type: string = 'button';\n\n constructor(public _stepper: CdkStepper) {}\n}\n","/**\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.io/license\n */\n\nimport {FocusableOption, FocusKeyManager} from '@angular/cdk/a11y';\nimport {Direction, Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {END, ENTER, HOME, SPACE} from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {AbstractControl} from '@angular/forms';\nimport {CdkStepLabel} from './step-label';\nimport {Observable, Subject, of as obaservableOf} from 'rxjs';\nimport {startWith, takeUntil} from 'rxjs/operators';\n\n/** Used to generate unique ID for each stepper component. */\nlet nextId = 0;\n\n/**\n * Position state of the content of each step in stepper that is used for transitioning\n * the content into correct position upon step selection change.\n */\nexport type StepContentPositionState = 'previous' | 'current' | 'next';\n\n/** Possible orientation of a stepper. */\nexport type StepperOrientation = 'horizontal' | 'vertical';\n\n/** Change event emitted on selection changes. */\nexport class StepperSelectionEvent {\n /** Index of the step now selected. */\n selectedIndex: number;\n\n /** Index of the step previously selected. */\n previouslySelectedIndex: number;\n\n /** The step instance now selected. */\n selectedStep: CdkStep;\n\n /** The step instance previously selected. */\n previouslySelectedStep: CdkStep;\n}\n\n@Component({\n moduleId: module.id,\n selector: 'cdk-step',\n exportAs: 'cdkStep',\n template: '<ng-template><ng-content></ng-content></ng-template>',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CdkStep implements OnChanges {\n /** Template for step label if it exists. */\n @ContentChild(CdkStepLabel) stepLabel: CdkStepLabel;\n\n /** Template for step content. */\n @ViewChild(TemplateRef) content: TemplateRef<any>;\n\n /** The top level abstract control of the step. */\n @Input() stepControl: AbstractControl;\n\n /** Whether user has seen the expanded step content or not. */\n interacted = false;\n\n /** Plain text label of the step. */\n @Input() label: string;\n\n /** Aria label for the tab. */\n @Input('aria-label') ariaLabel: string;\n\n /**\n * Reference to the element that the tab is labelled by.\n * Will be cleared if `aria-label` is set at the same time.\n */\n @Input('aria-labelledby') ariaLabelledby: string;\n\n /** Whether the user can return to this step once it has been marked as complted. */\n @Input()\n get editable(): boolean { return this._editable; }\n set editable(value: boolean) {\n this._editable = coerceBooleanProperty(value);\n }\n private _editable = true;\n\n /** Whether the completion of step is optional. */\n @Input()\n get optional(): boolean { return this._optional; }\n set optional(value: boolean) {\n this._optional = coerceBooleanProperty(value);\n }\n private _optional = false;\n\n /** Whether step is marked as completed. */\n @Input()\n get completed(): boolean {\n return this._customCompleted == null ? this._defaultCompleted : this._customCompleted;\n }\n set completed(value: boolean) {\n this._customCompleted = coerceBooleanProperty(value);\n }\n private _customCompleted: boolean | null = null;\n\n private get _defaultCompleted() {\n return this.stepControl ? this.stepControl.valid && this.interacted : this.interacted;\n }\n\n constructor(@Inject(forwardRef(() => CdkStepper)) private _stepper: CdkStepper) { }\n\n /** Selects this step component. */\n select(): void {\n this._stepper.selected = this;\n }\n\n /** Resets the step to its initial state. Note that this includes resetting form data. */\n reset(): void {\n this.interacted = false;\n\n if (this._customCompleted != null) {\n this._customCompleted = false;\n }\n\n if (this.stepControl) {\n this.stepControl.reset();\n }\n }\n\n ngOnChanges() {\n // Since basically all inputs of the MatStep get proxied through the view down to the\n // underlying MatStepHeader, we have to make sure that change detection runs correctly.\n this._stepper._stateChanged();\n }\n}\n\n@Directive({\n selector: '[cdkStepper]',\n exportAs: 'cdkStepper',\n})\nexport class CdkStepper implements AfterViewInit, OnDestroy {\n /** Emits when the component is destroyed. */\n protected _destroyed = new Subject<void>();\n\n /** Used for managing keyboard focus. */\n private _keyManager: FocusKeyManager<FocusableOption>;\n\n /** The list of step components that the stepper is holding. */\n @ContentChildren(CdkStep) _steps: QueryList<CdkStep>;\n\n /** The list of step headers of the steps in the stepper. */\n _stepHeader: QueryList<FocusableOption>;\n\n /** Whether the validity of previous steps should be checked or not. */\n @Input()\n get linear(): boolean { return this._linear; }\n set linear(value: boolean) { this._linear = coerceBooleanProperty(value); }\n private _linear = false;\n\n /** The index of the selected step. */\n @Input()\n get selectedIndex() { return this._selectedIndex; }\n set selectedIndex(index: number) {\n if (this._steps) {\n // Ensure that the index can't be out of bounds.\n if (index < 0 || index > this._steps.length - 1) {\n throw Error('cdkStepper: Cannot assign out-of-bounds value to `selectedIndex`.');\n }\n\n if (this._selectedIndex != index &&\n !this._anyControlsInvalidOrPending(index) &&\n (index >= this._selectedIndex || this._steps.toArray()[index].editable)) {\n this._updateSelectedItemIndex(index);\n }\n } else {\n this._selectedIndex = index;\n }\n }\n private _selectedIndex = 0;\n\n /** The step that is selected. */\n @Input()\n get selected(): CdkStep {\n // @breaking-change 7.0.0 Change return type to `CdkStep | undefined`.\n return this._steps ? this._steps.toArray()[this.selectedIndex] : undefined!;\n }\n set selected(step: CdkStep) {\n this.selectedIndex = this._steps ? this._steps.toArray().indexOf(step) : -1;\n }\n\n /** Event emitted when the selected step has changed. */\n @Output() selectionChange: EventEmitter<StepperSelectionEvent>\n = new EventEmitter<StepperSelectionEvent>();\n\n /** Used to track unique ID for each stepper component. */\n _groupId: number;\n\n protected _orientation: StepperOrientation = 'horizontal';\n\n constructor(\n @Optional() private _dir: Directionality,\n private _changeDetectorRef: ChangeDetectorRef) {\n this._groupId = nextId++;\n }\n\n ngAfterViewInit() {\n this._keyManager = new FocusKeyManager(this._stepHeader)\n .withWrap()\n .withVerticalOrientation(this._orientation === 'vertical');\n\n (this._dir ? this._dir.change as Observable<Direction> : obaservableOf())\n .pipe(startWith(this._layoutDirection()), takeUntil(this._destroyed))\n .subscribe(direction => this._keyManager.withHorizontalOrientation(direction));\n\n this._keyManager.updateActiveItemIndex(this._selectedIndex);\n }\n\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /** Selects and focuses the next step in list. */\n next(): void {\n this.selectedIndex = Math.min(this._selectedIndex + 1, this._steps.length - 1);\n }\n\n /** Selects and focuses the previous step in list. */\n previous(): void {\n this.selectedIndex = Math.max(this._selectedIndex - 1, 0);\n }\n\n /** Resets the stepper to its initial state. Note that this includes clearing form data. */\n reset(): void {\n this._updateSelectedItemIndex(0);\n this._steps.forEach(step => step.reset());\n this._stateChanged();\n }\n\n /** Returns a unique id for each step label element. */\n _getStepLabelId(i: number): string {\n return `cdk-step-label-${this._groupId}-${i}`;\n }\n\n /** Returns unique id for each step content element. */\n _getStepContentId(i: number): string {\n return `cdk-step-content-${this._groupId}-${i}`;\n }\n\n /** Marks the component to be change detected. */\n _stateChanged() {\n this._changeDetectorRef.markForCheck();\n }\n\n /** Returns position state of the step with the given index. */\n _getAnimationDirection(index: number): StepContentPositionState {\n const position = index - this._selectedIndex;\n if (position < 0) {\n return this._layoutDirection() === 'rtl' ? 'next' : 'previous';\n } else if (position > 0) {\n return this._layoutDirection() === 'rtl' ? 'previous' : 'next';\n }\n return 'current';\n }\n\n /** Returns the type of icon to be displayed. */\n _getIndicatorType(index: number): 'number' | 'edit' | 'done' {\n const step = this._steps.toArray()[index];\n if (!step.completed || this._selectedIndex == index) {\n return 'number';\n } else {\n return step.editable ? 'edit' : 'done';\n }\n }\n\n /** Returns the index of the currently-focused step header. */\n _getFocusIndex() {\n return this._keyManager ? this._keyManager.activeItemIndex : this._selectedIndex;\n }\n\n private _updateSelectedItemIndex(newIndex: number): void {\n const stepsArray = this._steps.toArray();\n this.selectionChange.emit({\n selectedIndex: newIndex,\n previouslySelectedIndex: this._selectedIndex,\n selectedStep: stepsArray[newIndex],\n previouslySelectedStep: stepsArray[this._selectedIndex],\n });\n this._keyManager.updateActiveItemIndex(newIndex);\n this._selectedIndex = newIndex;\n this._stateChanged();\n }\n\n _onKeydown(event: KeyboardEvent) {\n const keyCode = event.keyCode;\n\n if (this._keyManager.activeItemIndex != null && (keyCode === SPACE || keyCode === ENTER)) {\n this.selectedIndex = this._keyManager.activeItemIndex;\n event.preventDefault();\n } else if (keyCode === HOME) {\n this._keyManager.setFirstItemActive();\n event.preventDefault();\n } else if (keyCode === END) {\n this._keyManager.setLastItemActive();\n event.preventDefault();\n } else {\n this._keyManager.onKeydown(event);\n }\n }\n\n private _anyControlsInvalidOrPending(index: number): boolean {\n const steps = this._steps.toArray();\n\n steps[this._selectedIndex].interacted = true;\n\n if (this._linear && index >= 0) {\n return steps.slice(0, index).some(step => {\n const control = step.stepControl;\n const isIncomplete = control ?\n (control.invalid || control.pending || !step.interacted) :\n !step.completed;\n return isIncomplete && !step.optional;\n });\n }\n\n return false;\n }\n\n private _layoutDirection(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n}\n","/**\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.io/license\n */\n\nimport {Directive, TemplateRef} from '@angular/core';\n\n@Directive({\n selector: '[cdkStepLabel]',\n})\nexport class CdkStepLabel {\n constructor(/** @docs-private */ public template: TemplateRef<any>) { }\n}\n"],"names":["obaservableOf"],"mappings":"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"}
1
+ {"version":3,"file":"stepper.js","sources":["../../../src/cdk/stepper/stepper-module.ts","../../../src/cdk/stepper/stepper-button.ts","../../../src/cdk/stepper/stepper.ts","../../../src/cdk/stepper/step-label.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.io/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CdkStepper, CdkStep} from './stepper';\nimport {CommonModule} from '@angular/common';\nimport {CdkStepLabel} from './step-label';\nimport {CdkStepperNext, CdkStepperPrevious} from './stepper-button';\nimport {BidiModule} from '@angular/cdk/bidi';\n\n@NgModule({\n imports: [BidiModule, CommonModule],\n exports: [CdkStep, CdkStepper, CdkStepLabel, CdkStepperNext, CdkStepperPrevious],\n declarations: [CdkStep, CdkStepper, CdkStepLabel, CdkStepperNext, CdkStepperPrevious]\n})\nexport class CdkStepperModule {}\n","/**\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.io/license\n */\n\nimport {Directive, Input} from '@angular/core';\nimport {CdkStepper} from './stepper';\n\n/** Button that moves to the next step in a stepper workflow. */\n@Directive({\n selector: 'button[cdkStepperNext]',\n host: {\n '(click)': '_stepper.next()',\n '[type]': 'type',\n }\n})\nexport class CdkStepperNext {\n /** Type of the next button. Defaults to \"submit\" if not specified. */\n @Input() type: string = 'submit';\n\n constructor(public _stepper: CdkStepper) {}\n}\n\n/** Button that moves to the previous step in a stepper workflow. */\n@Directive({\n selector: 'button[cdkStepperPrevious]',\n host: {\n '(click)': '_stepper.previous()',\n '[type]': 'type',\n }\n})\nexport class CdkStepperPrevious {\n /** Type of the previous button. Defaults to \"button\" if not specified. */\n @Input() type: string = 'button';\n\n constructor(public _stepper: CdkStepper) {}\n}\n","/**\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.io/license\n */\n\nimport {FocusableOption, FocusKeyManager} from '@angular/cdk/a11y';\nimport {Direction, Directionality} from '@angular/cdk/bidi';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {END, ENTER, HOME, SPACE} from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n EventEmitter,\n ElementRef,\n forwardRef,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {AbstractControl} from '@angular/forms';\nimport {CdkStepLabel} from './step-label';\nimport {Observable, Subject, of as obaservableOf} from 'rxjs';\nimport {startWith, takeUntil} from 'rxjs/operators';\n\n/** Used to generate unique ID for each stepper component. */\nlet nextId = 0;\n\n/**\n * Position state of the content of each step in stepper that is used for transitioning\n * the content into correct position upon step selection change.\n */\nexport type StepContentPositionState = 'previous' | 'current' | 'next';\n\n/** Possible orientation of a stepper. */\nexport type StepperOrientation = 'horizontal' | 'vertical';\n\n/** Change event emitted on selection changes. */\nexport class StepperSelectionEvent {\n /** Index of the step now selected. */\n selectedIndex: number;\n\n /** Index of the step previously selected. */\n previouslySelectedIndex: number;\n\n /** The step instance now selected. */\n selectedStep: CdkStep;\n\n /** The step instance previously selected. */\n previouslySelectedStep: CdkStep;\n}\n\n@Component({\n moduleId: module.id,\n selector: 'cdk-step',\n exportAs: 'cdkStep',\n template: '<ng-template><ng-content></ng-content></ng-template>',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CdkStep implements OnChanges {\n /** Template for step label if it exists. */\n @ContentChild(CdkStepLabel) stepLabel: CdkStepLabel;\n\n /** Template for step content. */\n @ViewChild(TemplateRef) content: TemplateRef<any>;\n\n /** The top level abstract control of the step. */\n @Input() stepControl: AbstractControl;\n\n /** Whether user has seen the expanded step content or not. */\n interacted = false;\n\n /** Plain text label of the step. */\n @Input() label: string;\n\n /** Aria label for the tab. */\n @Input('aria-label') ariaLabel: string;\n\n /**\n * Reference to the element that the tab is labelled by.\n * Will be cleared if `aria-label` is set at the same time.\n */\n @Input('aria-labelledby') ariaLabelledby: string;\n\n /** Whether the user can return to this step once it has been marked as complted. */\n @Input()\n get editable(): boolean { return this._editable; }\n set editable(value: boolean) {\n this._editable = coerceBooleanProperty(value);\n }\n private _editable = true;\n\n /** Whether the completion of step is optional. */\n @Input()\n get optional(): boolean { return this._optional; }\n set optional(value: boolean) {\n this._optional = coerceBooleanProperty(value);\n }\n private _optional = false;\n\n /** Whether step is marked as completed. */\n @Input()\n get completed(): boolean {\n return this._customCompleted == null ? this._defaultCompleted : this._customCompleted;\n }\n set completed(value: boolean) {\n this._customCompleted = coerceBooleanProperty(value);\n }\n private _customCompleted: boolean | null = null;\n\n private get _defaultCompleted() {\n return this.stepControl ? this.stepControl.valid && this.interacted : this.interacted;\n }\n\n constructor(@Inject(forwardRef(() => CdkStepper)) private _stepper: CdkStepper) { }\n\n /** Selects this step component. */\n select(): void {\n this._stepper.selected = this;\n }\n\n /** Resets the step to its initial state. Note that this includes resetting form data. */\n reset(): void {\n this.interacted = false;\n\n if (this._customCompleted != null) {\n this._customCompleted = false;\n }\n\n if (this.stepControl) {\n this.stepControl.reset();\n }\n }\n\n ngOnChanges() {\n // Since basically all inputs of the MatStep get proxied through the view down to the\n // underlying MatStepHeader, we have to make sure that change detection runs correctly.\n this._stepper._stateChanged();\n }\n}\n\n@Directive({\n selector: '[cdkStepper]',\n exportAs: 'cdkStepper',\n})\nexport class CdkStepper implements AfterViewInit, OnDestroy {\n /** Emits when the component is destroyed. */\n protected _destroyed = new Subject<void>();\n\n /** Used for managing keyboard focus. */\n private _keyManager: FocusKeyManager<FocusableOption>;\n\n /**\n * @breaking-change 8.0.0 Remove `| undefined` once the `_document`\n * constructor param is required.\n */\n private _document: Document | undefined;\n\n /** The list of step components that the stepper is holding. */\n @ContentChildren(CdkStep) _steps: QueryList<CdkStep>;\n\n /** The list of step headers of the steps in the stepper. */\n _stepHeader: QueryList<FocusableOption>;\n\n /** Whether the validity of previous steps should be checked or not. */\n @Input()\n get linear(): boolean { return this._linear; }\n set linear(value: boolean) { this._linear = coerceBooleanProperty(value); }\n private _linear = false;\n\n /** The index of the selected step. */\n @Input()\n get selectedIndex() { return this._selectedIndex; }\n set selectedIndex(index: number) {\n if (this._steps) {\n // Ensure that the index can't be out of bounds.\n if (index < 0 || index > this._steps.length - 1) {\n throw Error('cdkStepper: Cannot assign out-of-bounds value to `selectedIndex`.');\n }\n\n if (this._selectedIndex != index &&\n !this._anyControlsInvalidOrPending(index) &&\n (index >= this._selectedIndex || this._steps.toArray()[index].editable)) {\n this._updateSelectedItemIndex(index);\n }\n } else {\n this._selectedIndex = index;\n }\n }\n private _selectedIndex = 0;\n\n /** The step that is selected. */\n @Input()\n get selected(): CdkStep {\n // @breaking-change 7.0.0 Change return type to `CdkStep | undefined`.\n return this._steps ? this._steps.toArray()[this.selectedIndex] : undefined!;\n }\n set selected(step: CdkStep) {\n this.selectedIndex = this._steps ? this._steps.toArray().indexOf(step) : -1;\n }\n\n /** Event emitted when the selected step has changed. */\n @Output() selectionChange: EventEmitter<StepperSelectionEvent>\n = new EventEmitter<StepperSelectionEvent>();\n\n /** Used to track unique ID for each stepper component. */\n _groupId: number;\n\n protected _orientation: StepperOrientation = 'horizontal';\n\n constructor(\n @Optional() private _dir: Directionality,\n private _changeDetectorRef: ChangeDetectorRef,\n // @breaking-change 8.0.0 `_elementRef` and `_document` parameters to become required.\n private _elementRef?: ElementRef<HTMLElement>,\n @Inject(DOCUMENT) _document?: any) {\n this._groupId = nextId++;\n this._document = _document;\n }\n\n ngAfterViewInit() {\n this._keyManager = new FocusKeyManager(this._stepHeader)\n .withWrap()\n .withVerticalOrientation(this._orientation === 'vertical');\n\n (this._dir ? this._dir.change as Observable<Direction> : obaservableOf())\n .pipe(startWith(this._layoutDirection()), takeUntil(this._destroyed))\n .subscribe(direction => this._keyManager.withHorizontalOrientation(direction));\n\n this._keyManager.updateActiveItemIndex(this._selectedIndex);\n\n this._steps.changes.pipe(takeUntil(this._destroyed)).subscribe(() => {\n if (!this.selected) {\n this._selectedIndex = Math.max(this._selectedIndex - 1, 0);\n }\n });\n }\n\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n\n /** Selects and focuses the next step in list. */\n next(): void {\n this.selectedIndex = Math.min(this._selectedIndex + 1, this._steps.length - 1);\n }\n\n /** Selects and focuses the previous step in list. */\n previous(): void {\n this.selectedIndex = Math.max(this._selectedIndex - 1, 0);\n }\n\n /** Resets the stepper to its initial state. Note that this includes clearing form data. */\n reset(): void {\n this._updateSelectedItemIndex(0);\n this._steps.forEach(step => step.reset());\n this._stateChanged();\n }\n\n /** Returns a unique id for each step label element. */\n _getStepLabelId(i: number): string {\n return `cdk-step-label-${this._groupId}-${i}`;\n }\n\n /** Returns unique id for each step content element. */\n _getStepContentId(i: number): string {\n return `cdk-step-content-${this._groupId}-${i}`;\n }\n\n /** Marks the component to be change detected. */\n _stateChanged() {\n this._changeDetectorRef.markForCheck();\n }\n\n /** Returns position state of the step with the given index. */\n _getAnimationDirection(index: number): StepContentPositionState {\n const position = index - this._selectedIndex;\n if (position < 0) {\n return this._layoutDirection() === 'rtl' ? 'next' : 'previous';\n } else if (position > 0) {\n return this._layoutDirection() === 'rtl' ? 'previous' : 'next';\n }\n return 'current';\n }\n\n /** Returns the type of icon to be displayed. */\n _getIndicatorType(index: number): 'number' | 'edit' | 'done' {\n const step = this._steps.toArray()[index];\n if (!step.completed || this._selectedIndex == index) {\n return 'number';\n } else {\n return step.editable ? 'edit' : 'done';\n }\n }\n\n /** Returns the index of the currently-focused step header. */\n _getFocusIndex() {\n return this._keyManager ? this._keyManager.activeItemIndex : this._selectedIndex;\n }\n\n private _updateSelectedItemIndex(newIndex: number): void {\n const stepsArray = this._steps.toArray();\n this.selectionChange.emit({\n selectedIndex: newIndex,\n previouslySelectedIndex: this._selectedIndex,\n selectedStep: stepsArray[newIndex],\n previouslySelectedStep: stepsArray[this._selectedIndex],\n });\n\n // If focus is inside the stepper, move it to the next header, otherwise it may become\n // lost when the active step content is hidden. We can't be more granular with the check\n // (e.g. checking whether focus is inside the active step), because we don't have a\n // reference to the elements that are rendering out the content.\n this._containsFocus() ? this._keyManager.setActiveItem(newIndex) :\n this._keyManager.updateActiveItemIndex(newIndex);\n\n this._selectedIndex = newIndex;\n this._stateChanged();\n }\n\n _onKeydown(event: KeyboardEvent) {\n const keyCode = event.keyCode;\n\n if (this._keyManager.activeItemIndex != null && (keyCode === SPACE || keyCode === ENTER)) {\n this.selectedIndex = this._keyManager.activeItemIndex;\n event.preventDefault();\n } else if (keyCode === HOME) {\n this._keyManager.setFirstItemActive();\n event.preventDefault();\n } else if (keyCode === END) {\n this._keyManager.setLastItemActive();\n event.preventDefault();\n } else {\n this._keyManager.onKeydown(event);\n }\n }\n\n private _anyControlsInvalidOrPending(index: number): boolean {\n const steps = this._steps.toArray();\n\n steps[this._selectedIndex].interacted = true;\n\n if (this._linear && index >= 0) {\n return steps.slice(0, index).some(step => {\n const control = step.stepControl;\n const isIncomplete = control ?\n (control.invalid || control.pending || !step.interacted) :\n !step.completed;\n return isIncomplete && !step.optional;\n });\n }\n\n return false;\n }\n\n private _layoutDirection(): Direction {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n\n /** Checks whether the stepper contains the focused element. */\n private _containsFocus(): boolean {\n if (!this._document || !this._elementRef) {\n return false;\n }\n\n const stepperElement = this._elementRef.nativeElement;\n const focusedElement = this._document.activeElement;\n return stepperElement === focusedElement || stepperElement.contains(focusedElement);\n }\n}\n","/**\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.io/license\n */\n\nimport {Directive, TemplateRef} from '@angular/core';\n\n@Directive({\n selector: '[cdkStepLabel]',\n})\nexport class CdkStepLabel {\n constructor(/** @docs-private */ public template: TemplateRef<any>) { }\n}\n"],"names":["obaservableOf"],"mappings":"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"}
package/esm2015/table.js CHANGED
@@ -6,13 +6,14 @@
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
8
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
9
- import { ContentChild, Directive, ElementRef, Input, TemplateRef, ChangeDetectionStrategy, Component, IterableDiffers, ViewContainerRef, ViewEncapsulation, Attribute, ChangeDetectorRef, ContentChildren, isDevMode, Optional, ViewChild, NgModule } from '@angular/core';
9
+ import { ContentChild, Directive, ElementRef, Input, TemplateRef, ChangeDetectionStrategy, Component, IterableDiffers, ViewContainerRef, ViewEncapsulation, Attribute, ChangeDetectorRef, ContentChildren, isDevMode, Optional, ViewChild, Inject, NgModule } from '@angular/core';
10
10
  import { DataSource } from '@angular/cdk/collections';
11
11
  export { DataSource } from '@angular/cdk/collections';
12
+ import { DOCUMENT, CommonModule } from '@angular/common';
12
13
  import { BehaviorSubject, Observable, of, Subject } from 'rxjs';
13
14
  import { takeUntil } from 'rxjs/operators';
14
15
  import { Directionality } from '@angular/cdk/bidi';
15
- import { CommonModule } from '@angular/common';
16
+ import { Platform } from '@angular/cdk/platform';
16
17
 
17
18
  /**
18
19
  * @fileoverview added by tsickle
@@ -618,11 +619,13 @@ class StickyStyler {
618
619
  * sticky positioning applied.
619
620
  * @param {?} direction The directionality context of the table (ltr/rtl); affects column positioning
620
621
  * by reversing left/right positions.
622
+ * @param {?=} _isBrowser Whether the table is currently being rendered on the server or the client.
621
623
  */
622
- constructor(isNativeHtmlTable, stickCellCss, direction) {
624
+ constructor(isNativeHtmlTable, stickCellCss, direction, _isBrowser = true) {
623
625
  this.isNativeHtmlTable = isNativeHtmlTable;
624
626
  this.stickCellCss = stickCellCss;
625
627
  this.direction = direction;
628
+ this._isBrowser = _isBrowser;
626
629
  }
627
630
  /**
628
631
  * Clears the sticky positioning styles from the row and its cells by resetting the `position`
@@ -657,7 +660,7 @@ class StickyStyler {
657
660
  */
658
661
  updateStickyColumns(rows, stickyStartStates, stickyEndStates) {
659
662
  const /** @type {?} */ hasStickyColumns = stickyStartStates.some(state => state) || stickyEndStates.some(state => state);
660
- if (!rows.length || !hasStickyColumns) {
663
+ if (!rows.length || !hasStickyColumns || !this._isBrowser) {
661
664
  return;
662
665
  }
663
666
  const /** @type {?} */ firstRow = rows[0];
@@ -691,6 +694,10 @@ class StickyStyler {
691
694
  * @return {?}
692
695
  */
693
696
  stickRows(rowsToStick, stickyStates, position) {
697
+ // Since we can't measure the rows on the server, we can't stick the rows properly.
698
+ if (!this._isBrowser) {
699
+ return;
700
+ }
694
701
  // If positioning the rows to the bottom, reverse their order when evaluating the sticky
695
702
  // position such that the last row stuck will be "bottom: 0px" and so on.
696
703
  const /** @type {?} */ rows = position === 'bottom' ? rowsToStick.reverse() : rowsToStick;
@@ -946,12 +953,20 @@ class CdkTable {
946
953
  * @param {?} _elementRef
947
954
  * @param {?} role
948
955
  * @param {?} _dir
949
- */
950
- constructor(_differs, _changeDetectorRef, _elementRef, role, _dir) {
956
+ * @param {?=} _document
957
+ * @param {?=} _platform
958
+ */
959
+ constructor(_differs, _changeDetectorRef, _elementRef, role, _dir, /**
960
+ * @deprecated
961
+ * @breaking-change 8.0.0 `_document` and `_platform` to
962
+ * be made into a required parameters.
963
+ */
964
+ _document, _platform) {
951
965
  this._differs = _differs;
952
966
  this._changeDetectorRef = _changeDetectorRef;
953
967
  this._elementRef = _elementRef;
954
968
  this._dir = _dir;
969
+ this._platform = _platform;
955
970
  /**
956
971
  * Subject that emits when the component has been destroyed.
957
972
  */
@@ -1024,6 +1039,7 @@ class CdkTable {
1024
1039
  if (!role) {
1025
1040
  this._elementRef.nativeElement.setAttribute('role', 'grid');
1026
1041
  }
1042
+ this._document = _document;
1027
1043
  this._isNativeHtmlTable = this._elementRef.nativeElement.nodeName === 'TABLE';
1028
1044
  }
1029
1045
  /**
@@ -1691,7 +1707,9 @@ class CdkTable {
1691
1707
  { tag: 'tfoot', outlet: this._footerRowOutlet },
1692
1708
  ];
1693
1709
  for (const /** @type {?} */ section of sections) {
1694
- const /** @type {?} */ element = document.createElement(section.tag);
1710
+ // @breaking-change 8.0.0 remove the `|| document` once the `_document` is a required param.
1711
+ const /** @type {?} */ documentRef = this._document || document;
1712
+ const /** @type {?} */ element = documentRef.createElement(section.tag);
1695
1713
  element.appendChild(section.outlet.elementRef.nativeElement);
1696
1714
  this._elementRef.nativeElement.appendChild(element);
1697
1715
  }
@@ -1739,7 +1757,9 @@ class CdkTable {
1739
1757
  */
1740
1758
  _setupStickyStyler() {
1741
1759
  const /** @type {?} */ direction = this._dir ? this._dir.value : 'ltr';
1742
- this._stickyStyler = new StickyStyler(this._isNativeHtmlTable, this.stickyCssClass, direction);
1760
+ this._stickyStyler = new StickyStyler(this._isNativeHtmlTable,
1761
+ // @breaking-change 8.0.0 remove the null check for `this._platform`.
1762
+ this.stickyCssClass, direction, this._platform ? this._platform.isBrowser : true);
1743
1763
  (this._dir ? this._dir.change : of())
1744
1764
  .pipe(takeUntil(this._onDestroy))
1745
1765
  .subscribe(value => {
@@ -1766,6 +1786,8 @@ CdkTable.ctorParameters = () => [
1766
1786
  { type: ElementRef, },
1767
1787
  { type: undefined, decorators: [{ type: Attribute, args: ['role',] },] },
1768
1788
  { type: Directionality, decorators: [{ type: Optional },] },
1789
+ { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] },] },
1790
+ { type: Platform, },
1769
1791
  ];
1770
1792
  CdkTable.propDecorators = {
1771
1793
  "trackBy": [{ type: Input },],