@scion/components 14.0.2 → 15.0.1

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 (49) hide show
  1. package/dimension/dimension.directive.d.ts +1 -1
  2. package/esm2020/dimension/dimension.directive.mjs +3 -3
  3. package/esm2020/dimension/dimension.module.mjs +4 -4
  4. package/esm2020/sashbox/element-ref.directive.mjs +3 -3
  5. package/esm2020/sashbox/sash-initializer.directive.mjs +3 -3
  6. package/esm2020/sashbox/sash.directive.mjs +3 -3
  7. package/esm2020/sashbox/sashbox.component.mjs +3 -3
  8. package/esm2020/sashbox/sashbox.module.mjs +4 -4
  9. package/esm2020/splitter/splitter.component.mjs +4 -4
  10. package/esm2020/splitter/splitter.module.mjs +4 -4
  11. package/esm2020/throbber/ellipsis-throbber/ellipsis-throbber.component.mjs +3 -3
  12. package/esm2020/throbber/ripple-throbber/ripple-throbber.component.mjs +3 -3
  13. package/esm2020/throbber/roller-throbber/roller-throbber.component.mjs +3 -3
  14. package/esm2020/throbber/spinner-throbber/spinner-throbber.component.mjs +3 -3
  15. package/esm2020/throbber/throbber.component.mjs +3 -3
  16. package/esm2020/throbber/throbber.module.mjs +4 -4
  17. package/esm2020/viewport/native-scrollbar-track-size-provider.service.mjs +4 -4
  18. package/esm2020/viewport/scrollable.directive.mjs +3 -3
  19. package/esm2020/viewport/scrollbar/scrollbar.component.mjs +4 -4
  20. package/esm2020/viewport/viewport.component.mjs +51 -25
  21. package/esm2020/viewport/viewport.module.mjs +4 -4
  22. package/fesm2015/scion-components-dimension.mjs +7 -7
  23. package/fesm2015/scion-components-sashbox.mjs +16 -16
  24. package/fesm2015/scion-components-splitter.mjs +7 -7
  25. package/fesm2015/scion-components-splitter.mjs.map +1 -1
  26. package/fesm2015/scion-components-throbber.mjs +19 -19
  27. package/fesm2015/scion-components-viewport.mjs +63 -37
  28. package/fesm2015/scion-components-viewport.mjs.map +1 -1
  29. package/fesm2020/scion-components-dimension.mjs +7 -7
  30. package/fesm2020/scion-components-sashbox.mjs +16 -16
  31. package/fesm2020/scion-components-splitter.mjs +7 -7
  32. package/fesm2020/scion-components-splitter.mjs.map +1 -1
  33. package/fesm2020/scion-components-throbber.mjs +19 -19
  34. package/fesm2020/scion-components-viewport.mjs +63 -37
  35. package/fesm2020/scion-components-viewport.mjs.map +1 -1
  36. package/package.json +5 -5
  37. package/sashbox/element-ref.directive.d.ts +1 -1
  38. package/sashbox/sash-initializer.directive.d.ts +1 -1
  39. package/sashbox/sash.directive.d.ts +1 -1
  40. package/sashbox/sashbox.component.d.ts +1 -1
  41. package/splitter/splitter.component.d.ts +1 -1
  42. package/throbber/ellipsis-throbber/ellipsis-throbber.component.d.ts +1 -1
  43. package/throbber/ripple-throbber/ripple-throbber.component.d.ts +1 -1
  44. package/throbber/roller-throbber/roller-throbber.component.d.ts +1 -1
  45. package/throbber/spinner-throbber/spinner-throbber.component.d.ts +1 -1
  46. package/throbber/throbber.component.d.ts +1 -1
  47. package/viewport/scrollable.directive.d.ts +1 -1
  48. package/viewport/scrollbar/scrollbar.component.d.ts +1 -1
  49. package/viewport/viewport.component.d.ts +5 -7
@@ -1 +1 @@
1
- {"version":3,"file":"scion-components-viewport.mjs","sources":["../../../../projects/scion/components/viewport/src/native-scrollbar-track-size-provider.service.ts","../../../../projects/scion/components/viewport/src/scrollbar/scrollbar.component.ts","../../../../projects/scion/components/viewport/src/scrollbar/scrollbar.component.html","../../../../projects/scion/components/viewport/src/scrollable.directive.ts","../../../../projects/scion/components/viewport/src/viewport.component.ts","../../../../projects/scion/components/viewport/src/viewport.component.html","../../../../projects/scion/components/viewport/src/viewport.module.ts","../../../../projects/scion/components/viewport/src/public_api.ts","../../../../projects/scion/components/viewport/src/scion-components-viewport.ts"],"sourcesContent":["/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Inject, Injectable, NgZone, OnDestroy} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {BehaviorSubject, fromEvent, Observable, Subject} from 'rxjs';\nimport {debounceTime, distinctUntilChanged, map, startWith, takeUntil} from 'rxjs/operators';\n\n/**\n * Provides the native scrollbar tracksize.\n *\n * @dynamic ignore 'strictMetadataEmit' errors due to the usage of {@link Document} as ambient type for DI.\n */\n@Injectable({providedIn: 'root'})\nexport class SciNativeScrollbarTrackSizeProvider implements OnDestroy {\n\n private readonly _trackSize$ = new BehaviorSubject<NativeScrollbarTrackSize | null>(null);\n private readonly _destroy$ = new Subject<void>();\n\n constructor(@Inject(DOCUMENT) private _document: Document, private _zone: NgZone) {\n this.installNativeScrollbarTrackSizeListener();\n }\n\n /**\n * Returns an {Observable} which emits the native scrollbar track size, if any, or else `null`.\n *\n * Upon subscription, it emits the track size immediately, and then continuously emits when the track size changes.\n */\n public get trackSize$(): Observable<NativeScrollbarTrackSize | null> {\n return this._trackSize$;\n }\n\n /**\n * Returns the native scrollbar track size, if any, or else `null`.\n */\n public get trackSize(): NativeScrollbarTrackSize | null {\n return this._trackSize$.getValue();\n }\n\n /**\n * Computes the native scrollbar track size.\n *\n * @returns native track size, or `null` if the native scrollbars sit on top of the content.\n */\n private computeTrackSize(): NativeScrollbarTrackSize | null {\n // create temporary viewport and viewport client with native scrollbars to compute scrolltrack width\n const viewportDiv = this._document.createElement('div');\n setStyle(viewportDiv, {\n position: 'absolute',\n overflow: 'scroll',\n height: '100px',\n width: '100px',\n border: 0,\n visibility: 'hidden',\n });\n\n const viewportClientDiv = this._document.createElement('div');\n setStyle(viewportClientDiv, {\n height: '100%',\n width: '100%',\n border: 0,\n });\n\n viewportDiv.appendChild(viewportClientDiv);\n this._document.body.appendChild(viewportDiv);\n\n const trackSize: NativeScrollbarTrackSize = {\n hScrollbarTrackHeight: viewportDiv.offsetHeight - viewportClientDiv.offsetHeight,\n vScrollbarTrackWidth: viewportDiv.offsetWidth - viewportClientDiv.offsetWidth,\n };\n\n // destroy temporary viewport\n this._document.body.removeChild(viewportDiv);\n if (trackSize.hScrollbarTrackHeight === 0 && trackSize.vScrollbarTrackWidth === 0) {\n return null;\n }\n\n return trackSize;\n }\n\n private installNativeScrollbarTrackSizeListener(): void {\n // We compute the size of the native scrollbar track when the browser fires the onresize window event.\n // This event is also fired on page zoom or when displaying a hidden document. Hidden documents do not have\n // a scrollbar track size until being displayed, e.g., after showing hidden iframes.\n this._zone.runOutsideAngular(() => {\n fromEvent(window, 'resize')\n .pipe(\n debounceTime(5),\n startWith(null), // trigger the initial computation\n map(() => this.computeTrackSize()),\n distinctUntilChanged((t1, t2) => JSON.stringify(t1) === JSON.stringify(t2)),\n takeUntil(this._destroy$),\n )\n .subscribe(trackSize => {\n this._zone.run(() => this._trackSize$.next(trackSize));\n });\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n\n/**\n * Applies the given style(s) to the given element.\n *\n * Specify styles to be modified by passing a dictionary containing CSS property names (hyphen case).\n * To remove a style, set its value to `null`.\n *\n * @ignore\n */\nfunction setStyle(element: HTMLElement, style: {[style: string]: any | null}): void {\n Object.keys(style).forEach(key => element.style.setProperty(key, style[key]));\n}\n\n/**\n * Represents the native scrollbar track size.\n */\nexport interface NativeScrollbarTrackSize {\n hScrollbarTrackHeight: number;\n vScrollbarTrackWidth: number;\n}\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {DOCUMENT} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, ElementRef, HostBinding, Inject, Input, NgZone, OnDestroy, ViewChild} from '@angular/core';\nimport {fromEvent, merge, Observable, of, Subject, timer} from 'rxjs';\nimport {debounceTime, first, map, startWith, switchMap, takeUntil, takeWhile, withLatestFrom} from 'rxjs/operators';\nimport {fromDimension$, fromMutation$} from '@scion/toolkit/observable';\nimport {filterArray, subscribeInside} from '@scion/toolkit/operators';\n\n/**\n * Renders a vertical or horizontal scrollbar.\n *\n * The scrollbar features the following functionality:\n * - allows to move the thumb by mouse or touch\n * - enlarges the thumb if the mouse pointer is near the thumb\n * - allows paging on mousedown on the scroll track\n *\n * ### CSS styling:\n *\n * You can override the following CSS variables:\n *\n * - sci-scrollbar-color: Sets the color of the scrollbar (by default, uses `rgb(78, 78, 78)`).\n *\n * Example:\n *\n * ```css\n *\n * sci-scrollbar {\n * --sci-scrollbar-color: blue;\n * }\n * ```\n */\n@Component({\n selector: 'sci-scrollbar',\n templateUrl: './scrollbar.component.html',\n styleUrls: ['./scrollbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SciScrollbarComponent implements OnDestroy {\n\n /**\n * Timeout for debouncing viewport resize events that trigger the scroll position computation.\n *\n * Debouncing is particularly important in the context of Angular animations, since they continuously\n * trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n * expands a panel that contains a viewport.\n *\n * @internal\n */\n public static readonly VIEWPORT_RESIZE_DEBOUNCE_TIME = 50;\n\n private _destroy$ = new Subject<void>();\n private _viewport!: HTMLElement;\n private _viewportChange$ = new Subject<void>();\n private _lastDragPosition: number | null = null;\n\n private _overflow = false;\n private _thumbSizeFr = 0;\n private _thumbPositionFr = 0;\n\n /* @docs-private */\n @ViewChild('thumb_handle', {static: true})\n public thumbElement!: ElementRef<HTMLDivElement>;\n\n @HostBinding('class.vertical')\n public get vertical(): boolean {\n return this.direction === 'vscroll';\n }\n\n @HostBinding('class.horizontal')\n public get horizontal(): boolean {\n return this.direction === 'hscroll';\n }\n\n @HostBinding('class.scrolling')\n public get scrolling(): boolean {\n return this._lastDragPosition !== null;\n }\n\n /**\n * Specifies the direction of the scrollbar.\n *\n * By default, if not specified, renders a vertical scrollbar.\n */\n @Input()\n public direction: 'vscroll' | 'hscroll' = 'vscroll';\n\n /**\n * The viewport to provide scrollbars for.\n */\n @Input('viewport') // eslint-disable-line @angular-eslint/no-input-rename\n public set setViewport(viewport: HTMLElement) {\n this._viewport = viewport;\n this._viewportChange$.next();\n }\n\n constructor(private _host: ElementRef<HTMLElement>,\n @Inject(DOCUMENT) private _document: any,\n private _zone: NgZone) {\n this._viewportChange$\n .pipe(\n switchMap(() => {\n if (!this._viewport) {\n return of(undefined);\n }\n return merge(\n this.viewportScrollChange$(),\n this.viewportDimensionChange$({debounceTime: SciScrollbarComponent.VIEWPORT_RESIZE_DEBOUNCE_TIME}),\n this.viewportClientDimensionChange$({debounceTime: SciScrollbarComponent.VIEWPORT_RESIZE_DEBOUNCE_TIME}),\n );\n }),\n subscribeInside(continueFn => this._zone.runOutsideAngular(continueFn)),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n if (this._viewport) {\n this.renderScrollPosition();\n }\n else {\n this.unsetScrollPosition();\n }\n });\n }\n\n /**\n * Computes the scroll position and updates CSS variables to render the scroll position in the UI.\n */\n private renderScrollPosition(): void {\n NgZone.assertNotInAngularZone();\n const viewportSize = this.viewportSize;\n const viewportClientSize = this.viewportClientSize;\n const thumbPositionFr = this.scrollPosition / viewportClientSize;\n const thumbSizeFr = viewportSize / viewportClientSize;\n const overflow = viewportClientSize > viewportSize;\n\n if (thumbPositionFr !== this._thumbPositionFr || thumbSizeFr !== this._thumbSizeFr) {\n this._thumbPositionFr = thumbPositionFr;\n this._thumbSizeFr = thumbSizeFr;\n this.setCssVariable('--ɵsci-scrollbar-thumb-position-fr', thumbPositionFr);\n this.setCssVariable('--ɵsci-scrollbar-thumb-size-fr', thumbSizeFr);\n }\n\n if (overflow !== this._overflow) {\n this._overflow = overflow;\n overflow ? this._host.nativeElement.classList.add('overflow') : this._host.nativeElement.classList.remove('overflow');\n }\n }\n\n /**\n * Clears CSS variables used for rendering the scroll position in the UI.\n */\n private unsetScrollPosition(): void {\n NgZone.assertNotInAngularZone();\n this._thumbPositionFr = 0;\n this._thumbSizeFr = 0;\n this._overflow = false;\n this.setCssVariable('--ɵsci-scrollbar-thumb-position-fr', 0);\n this.setCssVariable('--ɵsci-scrollbar-thumb-size-fr', 0);\n this._host.nativeElement.classList.remove('overflow');\n }\n\n /* @docs-private */\n public onTouchStart(event: TouchEvent): void {\n event.preventDefault();\n this._lastDragPosition = this.vertical ? event.touches[0].screenY : event.touches[0].screenX;\n }\n\n /* @docs-private */\n public onTouchMove(event: TouchEvent): void {\n event.preventDefault();\n\n const newDragPositionPx = this.vertical ? event.touches[0].screenY : event.touches[0].screenX;\n const scrollbarPanPx = newDragPositionPx - this._lastDragPosition!;\n const viewportPanPx = this.toViewportPanPx(scrollbarPanPx);\n this._lastDragPosition = newDragPositionPx;\n this.moveViewportClient(viewportPanPx);\n }\n\n /* @docs-private */\n public onTouchEnd(event: TouchEvent): void {\n event.preventDefault();\n this._lastDragPosition = null;\n }\n\n /* @docs-private */\n public onMouseDown(mousedownEvent: MouseEvent): void {\n if (mousedownEvent.button !== 0) {\n return;\n }\n\n mousedownEvent.preventDefault();\n this._lastDragPosition = this.vertical ? mousedownEvent.screenY : mousedownEvent.screenX;\n\n // Listen for 'mousemove' events\n this._zone.runOutsideAngular(() => {\n const mousemoveListener = merge(fromEvent<MouseEvent>(this._document, 'mousemove'), fromEvent<MouseEvent>(this._document, 'sci-mousemove'))\n .pipe(takeUntil(this._destroy$))\n .subscribe(mousemoveEvent => {\n mousemoveEvent.preventDefault();\n\n const newDragPositionPx = this.vertical ? mousemoveEvent.screenY : mousemoveEvent.screenX;\n const scrollbarPanPx = newDragPositionPx - this._lastDragPosition!;\n const viewportPanPx = this.toViewportPanPx(scrollbarPanPx);\n this._lastDragPosition = newDragPositionPx;\n this.moveViewportClient(viewportPanPx);\n });\n\n // Listen for 'mouseup' events; use 'capture phase' and 'stop propagation' to not close overlays\n merge(fromEvent<MouseEvent>(this._document, 'mouseup', {capture: true}), fromEvent<MouseEvent>(this._document, 'sci-mouseup'))\n .pipe(first(), takeUntil(this._destroy$))\n .subscribe(mouseupEvent => {\n mouseupEvent.stopPropagation();\n mousemoveListener.unsubscribe();\n this._lastDragPosition = null;\n });\n });\n }\n\n /* @docs-private */\n public onScrollTrackMouseDown(event: MouseEvent, direction: 'up' | 'down'): void {\n const signum = (direction === 'up' ? -1 : +1);\n this.scrollWhileMouseDown(this.toViewportPanPx(signum * this.thumbSize), event);\n }\n\n /**\n * Projects the given scrollbar scroll pixels into viewport scroll pixels.\n */\n private toViewportPanPx(scrollbarPanPx: number): number {\n const scrollRangePx = this.trackSize - this.thumbSize;\n const scrollRatio = scrollbarPanPx / scrollRangePx;\n return scrollRatio * (this.viewportClientSize - this.viewportSize);\n }\n\n /**\n * Moves the viewport client by the specified numbers of pixels.\n */\n private moveViewportClient(viewportPanPx: number): void {\n if (this.vertical) {\n this._viewport.scrollTop += viewportPanPx;\n }\n else {\n this._viewport.scrollLeft += viewportPanPx;\n }\n }\n\n /**\n * Indicates if the content overflows.\n */\n public get overflow(): boolean {\n return this._overflow;\n }\n\n /**\n * Scrolls continuously while holding the mouse pressed, or until the mouse leaves the scrolltrack.\n */\n private scrollWhileMouseDown(viewportScrollPx: number, mousedownEvent: MouseEvent): void {\n // The `EventTarget` type of `Event.target` is not yet compatible with `FromEventTarget` used in `fromEvent`.\n // This will be fixed in rxjs version 7.0.0. Refer to https://github.com/ReactiveX/rxjs/commit/5f022d784570684632e6fd5ae247fc259ee34c4b\n // for more details.\n const scrollTrackElement = mousedownEvent.target as Element;\n\n // scroll continuously every 50ms after an initial delay of 250ms\n timer(250, 50)\n .pipe(\n // continue chain with latest mouse event\n withLatestFrom(merge(of(mousedownEvent), fromEvent<MouseEvent>(scrollTrackElement, 'mousemove')), (tick, event) => event),\n // start immediately\n startWith(mousedownEvent),\n // stop scrolling if the thumb hits the mouse pointer position\n takeWhile((event: MouseEvent) => scrollTrackElement === this._document.elementFromPoint(event.clientX, event.clientY)),\n debounceTime(10),\n // stop scrolling on mouseout or mouseup\n takeUntil(merge(fromEvent(scrollTrackElement, 'mouseout'), fromEvent(scrollTrackElement, 'mouseup'))),\n )\n .subscribe(() => {\n this.moveViewportClient(viewportScrollPx);\n });\n }\n\n /**\n * Emits whenever the viewport scrolls.\n */\n private viewportScrollChange$(): Observable<void> {\n return fromEvent(this._viewport, 'scroll', {passive: true}).pipe(map(() => undefined));\n }\n\n /**\n * Emits on subscription, and then each time the size of the viewport changes.\n */\n private viewportDimensionChange$(options: {debounceTime: number}): Observable<void> {\n return fromDimension$(this._viewport)\n .pipe(\n // Debouncing is particularly important in the context of Angular animations, since they continuously\n // trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n // expands a panel that contains a viewport.\n debounceTime(options.debounceTime),\n map(() => undefined),\n );\n }\n\n /**\n * Emits on subscription, and then each time the size or style property of the viewport client changes.\n */\n private viewportClientDimensionChange$(options: {debounceTime: number}): Observable<void> {\n return this.children$(this._viewport)\n .pipe(\n switchMap(children => merge(...children.map(child => merge(\n fromDimension$(child),\n // Observe style mutations since some transformations change the scroll position without necessarily triggering a dimension change,\n // e.g., `scale` or `translate` used by some virtual scroll implementations\n fromMutation$(child, {subtree: false, childList: false, attributeFilter: ['style']})),\n ))),\n // Debouncing is particularly important in the context of Angular animations, since they continuously\n // trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n // expands a panel that contains a viewport.\n debounceTime(options.debounceTime),\n map(() => undefined),\n );\n }\n\n /**\n * Emits the children of the passed element, and then each time child elements are added or removed.\n */\n private children$(element: HTMLElement): Observable<HTMLElement[]> {\n return fromMutation$(element, {subtree: false, childList: true})\n .pipe(\n startWith(undefined as void),\n map(() => Array.from(element.children)),\n filterArray((child: Element): child is HTMLElement => child instanceof HTMLElement),\n );\n }\n\n private setCssVariable(key: string, value: any): void {\n this._host.nativeElement.style.setProperty(key, value);\n }\n\n private get viewportSize(): number {\n return this._viewport ? (this.vertical ? this._viewport.clientHeight : this._viewport.clientWidth) : 0;\n }\n\n private get viewportClientSize(): number {\n return this._viewport ? (this.vertical ? this._viewport.scrollHeight : this._viewport.scrollWidth) : 0;\n }\n\n private get scrollPosition(): number {\n return this._viewport ? (this.vertical ? this._viewport.scrollTop : this._viewport.scrollLeft) : 0;\n }\n\n private get thumbSize(): number {\n const thumbElement = this.thumbElement.nativeElement;\n return this.vertical ? thumbElement.clientHeight : thumbElement.clientWidth;\n }\n\n private get trackSize(): number {\n const trackElement = this._host.nativeElement;\n return this.vertical ? trackElement.clientHeight : trackElement.clientWidth;\n }\n\n /* @docs-private */\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n","<!-- scrolltrack to move the viewport client upwards (paging) -->\n<div class=\"scrolltrack-start\" (mousedown)=\"onScrollTrackMouseDown($event, 'up')\"></div>\n\n<!-- scrollthumb -->\n<div #thumb_handle\n class=\"thumb-handle\"\n [class.vertical]=\"vertical\"\n [class.horizontal]=\"horizontal\"\n (mousedown)=\"onMouseDown($event)\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\"\n (touchcancel)=\"onTouchEnd($event)\">\n <div class=\"thumb\"\n [class.vertical]=\"vertical\"\n [class.horizontal]=\"horizontal\">\n </div>\n</div>\n\n<!-- scrolltrack to move the viewport client downwards (paging) -->\n<div class=\"scrolltrack-end\" (mousedown)=\"onScrollTrackMouseDown($event, 'down')\"></div>\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Directive, ElementRef, Input, OnChanges, OnDestroy, Renderer2, SimpleChanges} from '@angular/core';\nimport {NativeScrollbarTrackSize, SciNativeScrollbarTrackSizeProvider} from './native-scrollbar-track-size-provider.service';\nimport {map, takeUntil} from 'rxjs/operators';\nimport {merge, Subject} from 'rxjs';\nimport {Dictionary} from '@scion/toolkit/util';\n\n/**\n * Makes the host element natively scrollable and hides native scrollbars by default, unless native scrollbars\n * already sit on top of the viewport (e.g. in OS X).\n *\n * Because there is no cross-browser API to hide scrollbars without losing native scroll support, we set 'overflow'\n * to 'scroll' but shift the native scrollbars out of the visible viewport area. The shift offset is computed upfront.\n *\n * This directive expects its host element to be the only child in document flow in its parent DOM element. It makes the host element\n * fill up the entire space (width and height set to 100%). The parent element must have its CSS `overflow` property set to `hidden`\n * to hide the pushed out native scrollbars.\n */\n@Directive({\n selector: '[sciScrollable]',\n})\nexport class SciScrollableDirective implements OnChanges, OnDestroy {\n\n private _destroy$ = new Subject<void>();\n private _inputChange$ = new Subject<void>();\n\n /**\n * Controls whether to display native scrollbars.\n * Has no effect if the native scrollbar sits on top of the content, e.g. in OS X.\n */\n @Input('sciScrollableDisplayNativeScrollbar') // eslint-disable-line @angular-eslint/no-input-rename\n public isDisplayNativeScrollbar: boolean = false;\n\n constructor(private _host: ElementRef<HTMLDivElement>,\n private _renderer: Renderer2,\n nativeScrollbarTrackSizeProvider: SciNativeScrollbarTrackSizeProvider) {\n merge(\n nativeScrollbarTrackSizeProvider.trackSize$,\n this._inputChange$.pipe(map(() => nativeScrollbarTrackSizeProvider.trackSize)),\n )\n .pipe(takeUntil(this._destroy$))\n .subscribe(nativeScrollbarTrackSize => {\n if (nativeScrollbarTrackSize === null) { // the native scrollbar sits on top of the content\n this.useNativeScrollbars();\n }\n else {\n this.isDisplayNativeScrollbar ? this.useNativeScrollbars() : this.shiftNativeScrollbars(nativeScrollbarTrackSize);\n }\n });\n }\n\n /**\n * Uses the native scrollbars when content overflows.\n */\n private useNativeScrollbars(): void {\n this.setStyle(this._host.nativeElement, {\n overflow: 'auto',\n width: '100%',\n height: '100%',\n marginRight: 0,\n marginBottom: 0,\n });\n }\n\n /**\n * Shifts the native scrollbars out of the visible viewport area.\n */\n private shiftNativeScrollbars(nativeScrollbarTrackSize: NativeScrollbarTrackSize): void {\n this.setStyle(this._host.nativeElement, {\n overflow: 'scroll',\n width: `calc(100% + ${nativeScrollbarTrackSize.vScrollbarTrackWidth}px`,\n height: `calc(100% + ${nativeScrollbarTrackSize.hScrollbarTrackHeight}px`,\n marginRight: `-${nativeScrollbarTrackSize.vScrollbarTrackWidth}px`,\n marginBottom: `-${nativeScrollbarTrackSize.hScrollbarTrackHeight}px`,\n });\n }\n\n private setStyle(element: Element, style: Dictionary): void {\n Object.keys(style).forEach(key => this._renderer.setStyle(element, key, style[key]));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this._inputChange$.next();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {SciNativeScrollbarTrackSizeProvider} from './native-scrollbar-track-size-provider.service';\nimport {coerceElement} from '@angular/cdk/coercion';\n\n/**\n * Represents a viewport with slotted content (`<ng-content>`) used as scrollable content. By default, content is added to a CSS grid layout.\n *\n * The viewport component displays scrollbars when its content overflows. Scrollbars are displayed on top of the content, not next to it.\n * The component uses the native scrollbars of the operating system if they are already sitting on top, or falls back and renders scrollbars on top otherwise.\n * The viewport remains natively scrollable with the native scrollbars shifted out of the viewport's visible area. Consequently, the viewport keeps supporting\n * native scrolling features such as touch gestures, scroll speed acceleration, or scrolling near the viewport edges during drag-and-drop operations.\n *\n * ```html\n * <sci-viewport>\n * your content\n * </sci-viewport>\n * ```\n *\n * ## Adding the viewport to a layout\n *\n * Typically you would add the viewport component to a flexible layout, filling the remaining space vertically and horizontally, such as a flexbox container\n * with the viewport's `flex` CSS property set to either `flex: auto` or `flex: 1 1 0`.\n *\n * The viewport is sized according to its content width and height. It grows to absorb any free space, thus overflowing its content only when encountering\n * a layout constraint. Depending on the layout, different steps may be necessary to prevent the viewport from growing to infinity.\n *\n * - If practical, give the viewport a fixed size or a maximum size.\n * - If you add the viewport to a flexbox layout, make sure that it cannot exceed the available space. Instead, the viewport should fill the remaining space,\n * vertically and horizontally. Be aware that, by default, a flex item does not shrink below its minimum content size. To change this, set the viewport's\n * `flex-basis` to `0` (instead of `auto`), or use the CSS shorthand property `flex: 1 1 0`. The `flex-basis` defines the default size of a flex item before\n * the remaining extra space is distributed. If the viewport does not appear after setting this property, check its parent elements' content sizes.\n * As an alternative to setting `flex: 1 1 0`, change the setting to `flex: auto` and hide the overflow in the parent element, as follows: `overflow: hidden`.\n * Another approach would be to set the minimum height of all parents to `0`, as follows: `min-height: 0`.\n *\n * For the complete documentation on the flex layout and its features, refer to https://developer.mozilla.org/en-US/docs/Web/CSS/flex.\n *\n *\n * ## Layouting the viewport's slotted content\n *\n * By default, the viewport's content is added to a CSS grid container with a single column, filling remaining space vertically and horizontally.\n * Using the `::part(content)` pseudo element selector, you can configure the grid container or apply a different layout, such as a flex or flow layout.\n *\n * #### Example of adding slotted content to a CSS flex container.\n * ```css\n * sci-viewport::part(content) {\n * display: flex;\n * flex-direction: column;\n * }\n * ```\n *\n * #### Example of configuring CSS grid container with two columns\n * ```css\n * sci-viewport::part(content) {\n * grid-template-columns: 1fr 1fr;\n * gap: 1em;\n * }\n * ```\n *\n * ## Styling of scrollbars\n *\n * You can override the following CSS variables to control the appearance of the scrollbar:\n *\n * - sci-viewport-scrollbar-color: Sets the color of the scrollbar (by default, uses `rgb(78, 78, 78)`).\n *\n * ```css\n * sci-viewport {\n * --sci-viewport-scrollbar-color: blue;\n * }\n * ```\n */\n@Component({\n selector: 'sci-viewport',\n templateUrl: './viewport.component.html',\n styleUrls: ['./viewport.component.scss'],\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class SciViewportComponent {\n\n private _viewportElement!: HTMLDivElement;\n private _viewportClient!: HTMLDivElement;\n private _scrollbarStyle: ScrollbarStyle = 'on-top';\n\n /** @internal */\n @ViewChild('viewport', {static: true})\n public set setViewport(viewport: ElementRef<HTMLDivElement>) {\n this._viewportElement = coerceElement(viewport);\n }\n\n /** @internal */\n @ViewChild('viewport_client', {static: true})\n public set setViewportClient(viewportClient: ElementRef<HTMLDivElement>) {\n this._viewportClient = coerceElement(viewportClient);\n }\n\n /**\n * Controls whether to use native scrollbars or, which is by default, emulated scrollbars that sit on top of the viewport client.\n * In the latter, the viewport client remains natively scrollable.\n */\n @Input()\n public set scrollbarStyle(scrollbarStyle: ScrollbarStyle) {\n this._scrollbarStyle = scrollbarStyle || 'on-top';\n }\n\n public get scrollbarStyle(): ScrollbarStyle {\n return this._scrollbarStyle;\n }\n\n /**\n * Emits upon a scroll event.\n *\n * You can add [sciDimension] directive to the viewport or viewport client to be notified about layout changes.\n */\n @Output()\n public scroll = new EventEmitter<Event>(); // eslint-disable-line @angular-eslint/no-output-native\n\n constructor(public host: ElementRef<HTMLElement>, public nativeScrollbarTrackSizeProvider: SciNativeScrollbarTrackSizeProvider) {\n }\n\n @HostListener('focus')\n public focus(): void { // do not rename to expose the same focus method like `HTMLElement.focus()`.\n this._viewportElement?.focus();\n }\n\n public onScroll(event: Event): void {\n this.scroll.emit(event);\n }\n\n /**\n * Returns the number of pixels that the viewport client is scrolled vertically.\n *\n * @see Element.scrollTop\n */\n public get scrollTop(): number {\n return this._viewportElement.scrollTop;\n }\n\n /**\n * Sets the number of pixels that the viewport client is scrolled vertically.\n *\n * @see Element.scrollTop\n */\n public set scrollTop(scrollTop: number) {\n this._viewportElement.scrollTop = scrollTop;\n }\n\n /**\n * Returns the number of pixels that the viewport client is scrolled horizontally.\n *\n * @see Element.scrollLeft\n */\n public get scrollLeft(): number {\n return this._viewportElement.scrollLeft;\n }\n\n /**\n * Sets the number of pixels that the viewport client is scrolled horizontally.\n *\n * @see Element.scrollLeft\n */\n public set scrollLeft(scrollLeft: number) {\n this._viewportElement.scrollLeft = scrollLeft;\n }\n\n /**\n * Returns the height of the viewport client.\n *\n * @see Element.scrollHeight\n */\n public get scrollHeight(): number {\n return this._viewportElement.scrollHeight;\n }\n\n /**\n * Returns the width of the viewport client.\n *\n * @see Element.scrollWidth\n */\n public get scrollWidth(): number {\n return this._viewportElement.scrollWidth;\n }\n\n /**\n * Returns the viewport {HTMLElement}.\n */\n public get viewportElement(): HTMLElement {\n return this._viewportElement;\n }\n\n /**\n * Returns the viewport client {HTMLElement}.\n */\n public get viewportClientElement(): HTMLElement {\n return this._viewportClient;\n }\n\n /**\n * Checks if the specified element is scrolled into the viewport.\n *\n * @param element - the element to be checked\n * @param fit - control if the element must fully or partially fit into the viewport\n *\n * @throws if the element is not contained in the viewport's slotted content.\n */\n public isElementInView(element: ElementRef<HTMLElement> | HTMLElement, fit: 'full' | 'partial'): boolean {\n const elLeft = this.computeOffset(element, 'left');\n const elRight = elLeft + coerceElement(element).offsetWidth;\n const elTop = this.computeOffset(element, 'top');\n const elBottom = elTop + coerceElement(element).offsetHeight;\n\n const vpLeft = this._viewportElement.scrollLeft;\n const vpRight = vpLeft + this._viewportElement.clientWidth;\n const vpTop = this._viewportElement.scrollTop;\n const vpBottom = vpTop + this._viewportElement.clientHeight;\n\n switch (fit) {\n case 'full':\n return (elLeft >= vpLeft && elRight <= vpRight) && (elTop >= vpTop && elBottom <= vpBottom);\n case 'partial':\n return (elRight >= vpLeft && elLeft <= vpRight) && (elBottom >= vpTop && elTop <= vpBottom);\n default:\n throw Error('Unsupported fit strategy');\n }\n }\n\n /**\n * Scrolls the specified element into the viewport.\n *\n * @param element - the element to scroll into the viewport\n * @param offset - the gap between the element and the viewport\n *\n * @throws if the element is not contained in the viewport's slotted content.\n */\n public scrollIntoView(element: ElementRef<HTMLElement> | HTMLElement, offset: number = 50): void {\n this._viewportElement.scrollTop = this.computeOffset(element, 'top') - offset;\n this._viewportElement.scrollLeft = this.computeOffset(element, 'left') - offset;\n }\n\n /**\n * Computes the distance of the element to the viewport's left or top border.\n *\n * @throws if the element is not contained in the viewport's slotted content.\n */\n public computeOffset(element: ElementRef<HTMLElement> | HTMLElement, border: 'left' | 'top'): number {\n let offset = 0;\n let el = coerceElement(element);\n do {\n offset += (border === 'left' ? el.offsetLeft : el.offsetTop);\n el = el.offsetParent as HTMLElement;\n if (el === null) {\n throw Error(`[ElementNotContainedError] Element not contained in the viewport's slotted content`);\n }\n } while (el !== this.host.nativeElement);\n\n return offset;\n }\n}\n\n/**\n * Represents a scrollbar style.\n */\nexport type ScrollbarStyle = 'native' | 'on-top' | 'hidden';\n","<!-- viewport and viewport client -->\n<div #viewport\n class=\"viewport\"\n tabindex=\"-1\"\n sciScrollable [sciScrollableDisplayNativeScrollbar]=\"scrollbarStyle === 'native'\"\n cdkScrollable\n (scroll)=\"onScroll($event)\">\n <div #viewport_client class=\"viewport-client\" part=\"content\">\n <slot></slot>\n </div>\n</div>\n\n<!-- render emulated scrollbars which sit on-top -->\n<ng-container *ngIf=\"scrollbarStyle === 'on-top' && (nativeScrollbarTrackSizeProvider.trackSize$ | async) !== null\">\n <sci-scrollbar [direction]=\"'vscroll'\" [viewport]=\"viewport\"></sci-scrollbar>\n <sci-scrollbar [direction]=\"'hscroll'\" [viewport]=\"viewport\"></sci-scrollbar>\n</ng-container>\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SciViewportComponent} from './viewport.component';\nimport {SciScrollbarComponent} from './scrollbar/scrollbar.component';\nimport {SciScrollableDirective} from './scrollable.directive';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\n\n/**\n * Provides a viewport component with scrollbars that sit on top of the viewport client.\n */\n@NgModule({\n imports: [\n CommonModule,\n ScrollingModule,\n ],\n declarations: [\n SciViewportComponent,\n SciScrollbarComponent,\n SciScrollableDirective,\n ],\n exports: [\n SciViewportComponent,\n SciScrollbarComponent,\n SciScrollableDirective,\n ],\n})\nexport class SciViewportModule {\n}\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\n/*\n * Secondary entrypoint: '@scion/components/viewport'\n *\n * @see https://github.com/ng-packagr/ng-packagr/blob/master/docs/secondary-entrypoints.md\n */\nexport {SciViewportModule} from './viewport.module';\nexport * from './viewport.component';\nexport * from './scrollable.directive';\nexport * from './scrollbar/scrollbar.component';\nexport * from './native-scrollbar-track-size-provider.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.SciNativeScrollbarTrackSizeProvider","i4.SciScrollbarComponent","i5.SciScrollableDirective"],"mappings":"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"}
1
+ {"version":3,"file":"scion-components-viewport.mjs","sources":["../../../../projects/scion/components/viewport/src/native-scrollbar-track-size-provider.service.ts","../../../../projects/scion/components/viewport/src/scrollbar/scrollbar.component.ts","../../../../projects/scion/components/viewport/src/scrollbar/scrollbar.component.html","../../../../projects/scion/components/viewport/src/scrollable.directive.ts","../../../../projects/scion/components/viewport/src/viewport.component.ts","../../../../projects/scion/components/viewport/src/viewport.component.html","../../../../projects/scion/components/viewport/src/viewport.module.ts","../../../../projects/scion/components/viewport/src/public_api.ts","../../../../projects/scion/components/viewport/src/scion-components-viewport.ts"],"sourcesContent":["/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Inject, Injectable, NgZone, OnDestroy} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {BehaviorSubject, fromEvent, Observable, Subject} from 'rxjs';\nimport {debounceTime, distinctUntilChanged, map, startWith, takeUntil} from 'rxjs/operators';\n\n/**\n * Provides the native scrollbar tracksize.\n *\n * @dynamic ignore 'strictMetadataEmit' errors due to the usage of {@link Document} as ambient type for DI.\n */\n@Injectable({providedIn: 'root'})\nexport class SciNativeScrollbarTrackSizeProvider implements OnDestroy {\n\n private readonly _trackSize$ = new BehaviorSubject<NativeScrollbarTrackSize | null>(null);\n private readonly _destroy$ = new Subject<void>();\n\n constructor(@Inject(DOCUMENT) private _document: Document, private _zone: NgZone) {\n this.installNativeScrollbarTrackSizeListener();\n }\n\n /**\n * Returns an {Observable} which emits the native scrollbar track size, if any, or else `null`.\n *\n * Upon subscription, it emits the track size immediately, and then continuously emits when the track size changes.\n */\n public get trackSize$(): Observable<NativeScrollbarTrackSize | null> {\n return this._trackSize$;\n }\n\n /**\n * Returns the native scrollbar track size, if any, or else `null`.\n */\n public get trackSize(): NativeScrollbarTrackSize | null {\n return this._trackSize$.getValue();\n }\n\n /**\n * Computes the native scrollbar track size.\n *\n * @returns native track size, or `null` if the native scrollbars sit on top of the content.\n */\n private computeTrackSize(): NativeScrollbarTrackSize | null {\n // create temporary viewport and viewport client with native scrollbars to compute scrolltrack width\n const viewportDiv = this._document.createElement('div');\n setStyle(viewportDiv, {\n position: 'absolute',\n overflow: 'scroll',\n height: '100px',\n width: '100px',\n border: 0,\n visibility: 'hidden',\n });\n\n const viewportClientDiv = this._document.createElement('div');\n setStyle(viewportClientDiv, {\n height: '100%',\n width: '100%',\n border: 0,\n });\n\n viewportDiv.appendChild(viewportClientDiv);\n this._document.body.appendChild(viewportDiv);\n\n const trackSize: NativeScrollbarTrackSize = {\n hScrollbarTrackHeight: viewportDiv.offsetHeight - viewportClientDiv.offsetHeight,\n vScrollbarTrackWidth: viewportDiv.offsetWidth - viewportClientDiv.offsetWidth,\n };\n\n // destroy temporary viewport\n this._document.body.removeChild(viewportDiv);\n if (trackSize.hScrollbarTrackHeight === 0 && trackSize.vScrollbarTrackWidth === 0) {\n return null;\n }\n\n return trackSize;\n }\n\n private installNativeScrollbarTrackSizeListener(): void {\n // We compute the size of the native scrollbar track when the browser fires the onresize window event.\n // This event is also fired on page zoom or when displaying a hidden document. Hidden documents do not have\n // a scrollbar track size until being displayed, e.g., after showing hidden iframes.\n this._zone.runOutsideAngular(() => {\n fromEvent(window, 'resize')\n .pipe(\n debounceTime(5),\n startWith(null), // trigger the initial computation\n map(() => this.computeTrackSize()),\n distinctUntilChanged((t1, t2) => JSON.stringify(t1) === JSON.stringify(t2)),\n takeUntil(this._destroy$),\n )\n .subscribe(trackSize => {\n this._zone.run(() => this._trackSize$.next(trackSize));\n });\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n\n/**\n * Applies the given style(s) to the given element.\n *\n * Specify styles to be modified by passing a dictionary containing CSS property names (hyphen case).\n * To remove a style, set its value to `null`.\n *\n * @ignore\n */\nfunction setStyle(element: HTMLElement, style: {[style: string]: any | null}): void {\n Object.keys(style).forEach(key => element.style.setProperty(key, style[key]));\n}\n\n/**\n * Represents the native scrollbar track size.\n */\nexport interface NativeScrollbarTrackSize {\n hScrollbarTrackHeight: number;\n vScrollbarTrackWidth: number;\n}\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {DOCUMENT} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, ElementRef, HostBinding, Inject, Input, NgZone, OnDestroy, ViewChild} from '@angular/core';\nimport {fromEvent, merge, Observable, of, Subject, timer} from 'rxjs';\nimport {debounceTime, first, map, startWith, switchMap, takeUntil, takeWhile, withLatestFrom} from 'rxjs/operators';\nimport {fromDimension$, fromMutation$} from '@scion/toolkit/observable';\nimport {filterArray, subscribeInside} from '@scion/toolkit/operators';\n\n/**\n * Renders a vertical or horizontal scrollbar.\n *\n * The scrollbar features the following functionality:\n * - allows to move the thumb by mouse or touch\n * - enlarges the thumb if the mouse pointer is near the thumb\n * - allows paging on mousedown on the scroll track\n *\n * ### CSS styling:\n *\n * You can override the following CSS variables:\n *\n * - sci-scrollbar-color: Sets the color of the scrollbar (by default, uses `rgb(78, 78, 78)`).\n *\n * Example:\n *\n * ```css\n *\n * sci-scrollbar {\n * --sci-scrollbar-color: blue;\n * }\n * ```\n */\n@Component({\n selector: 'sci-scrollbar',\n templateUrl: './scrollbar.component.html',\n styleUrls: ['./scrollbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SciScrollbarComponent implements OnDestroy {\n\n /**\n * Timeout for debouncing viewport resize events that trigger the scroll position computation.\n *\n * Debouncing is particularly important in the context of Angular animations, since they continuously\n * trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n * expands a panel that contains a viewport.\n *\n * @internal\n */\n public static readonly VIEWPORT_RESIZE_DEBOUNCE_TIME = 50;\n\n private _destroy$ = new Subject<void>();\n private _viewport!: HTMLElement;\n private _viewportChange$ = new Subject<void>();\n private _lastDragPosition: number | null = null;\n\n private _overflow = false;\n private _thumbSizeFr = 0;\n private _thumbPositionFr = 0;\n\n /* @docs-private */\n @ViewChild('thumb_handle', {static: true})\n public thumbElement!: ElementRef<HTMLDivElement>;\n\n @HostBinding('class.vertical')\n public get vertical(): boolean {\n return this.direction === 'vscroll';\n }\n\n @HostBinding('class.horizontal')\n public get horizontal(): boolean {\n return this.direction === 'hscroll';\n }\n\n @HostBinding('class.scrolling')\n public get scrolling(): boolean {\n return this._lastDragPosition !== null;\n }\n\n /**\n * Specifies the direction of the scrollbar.\n *\n * By default, if not specified, renders a vertical scrollbar.\n */\n @Input()\n public direction: 'vscroll' | 'hscroll' = 'vscroll';\n\n /**\n * The viewport to provide scrollbars for.\n */\n @Input('viewport') // eslint-disable-line @angular-eslint/no-input-rename\n public set setViewport(viewport: HTMLElement) {\n this._viewport = viewport;\n this._viewportChange$.next();\n }\n\n constructor(private _host: ElementRef<HTMLElement>,\n @Inject(DOCUMENT) private _document: any,\n private _zone: NgZone) {\n this._viewportChange$\n .pipe(\n switchMap(() => {\n if (!this._viewport) {\n return of(undefined);\n }\n return merge(\n this.viewportScrollChange$(),\n this.viewportDimensionChange$({debounceTime: SciScrollbarComponent.VIEWPORT_RESIZE_DEBOUNCE_TIME}),\n this.viewportClientDimensionChange$({debounceTime: SciScrollbarComponent.VIEWPORT_RESIZE_DEBOUNCE_TIME}),\n );\n }),\n subscribeInside(continueFn => this._zone.runOutsideAngular(continueFn)),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n if (this._viewport) {\n this.renderScrollPosition();\n }\n else {\n this.unsetScrollPosition();\n }\n });\n }\n\n /**\n * Computes the scroll position and updates CSS variables to render the scroll position in the UI.\n */\n private renderScrollPosition(): void {\n NgZone.assertNotInAngularZone();\n const viewportSize = this.viewportSize;\n const viewportClientSize = this.viewportClientSize;\n const thumbPositionFr = this.scrollPosition / viewportClientSize;\n const thumbSizeFr = viewportSize / viewportClientSize;\n const overflow = viewportClientSize > viewportSize;\n\n if (thumbPositionFr !== this._thumbPositionFr || thumbSizeFr !== this._thumbSizeFr) {\n this._thumbPositionFr = thumbPositionFr;\n this._thumbSizeFr = thumbSizeFr;\n this.setCssVariable('--ɵsci-scrollbar-thumb-position-fr', thumbPositionFr);\n this.setCssVariable('--ɵsci-scrollbar-thumb-size-fr', thumbSizeFr);\n }\n\n if (overflow !== this._overflow) {\n this._overflow = overflow;\n overflow ? this._host.nativeElement.classList.add('overflow') : this._host.nativeElement.classList.remove('overflow');\n }\n }\n\n /**\n * Clears CSS variables used for rendering the scroll position in the UI.\n */\n private unsetScrollPosition(): void {\n NgZone.assertNotInAngularZone();\n this._thumbPositionFr = 0;\n this._thumbSizeFr = 0;\n this._overflow = false;\n this.setCssVariable('--ɵsci-scrollbar-thumb-position-fr', 0);\n this.setCssVariable('--ɵsci-scrollbar-thumb-size-fr', 0);\n this._host.nativeElement.classList.remove('overflow');\n }\n\n /* @docs-private */\n public onTouchStart(event: TouchEvent): void {\n event.preventDefault();\n this._lastDragPosition = this.vertical ? event.touches[0].screenY : event.touches[0].screenX;\n }\n\n /* @docs-private */\n public onTouchMove(event: TouchEvent): void {\n event.preventDefault();\n\n const newDragPositionPx = this.vertical ? event.touches[0].screenY : event.touches[0].screenX;\n const scrollbarPanPx = newDragPositionPx - this._lastDragPosition!;\n const viewportPanPx = this.toViewportPanPx(scrollbarPanPx);\n this._lastDragPosition = newDragPositionPx;\n this.moveViewportClient(viewportPanPx);\n }\n\n /* @docs-private */\n public onTouchEnd(event: TouchEvent): void {\n event.preventDefault();\n this._lastDragPosition = null;\n }\n\n /* @docs-private */\n public onMouseDown(mousedownEvent: MouseEvent): void {\n if (mousedownEvent.button !== 0) {\n return;\n }\n\n mousedownEvent.preventDefault();\n this._lastDragPosition = this.vertical ? mousedownEvent.screenY : mousedownEvent.screenX;\n\n // Listen for 'mousemove' events\n this._zone.runOutsideAngular(() => {\n const mousemoveListener = merge(fromEvent<MouseEvent>(this._document, 'mousemove'), fromEvent<MouseEvent>(this._document, 'sci-mousemove'))\n .pipe(takeUntil(this._destroy$))\n .subscribe(mousemoveEvent => {\n mousemoveEvent.preventDefault();\n\n const newDragPositionPx = this.vertical ? mousemoveEvent.screenY : mousemoveEvent.screenX;\n const scrollbarPanPx = newDragPositionPx - this._lastDragPosition!;\n const viewportPanPx = this.toViewportPanPx(scrollbarPanPx);\n this._lastDragPosition = newDragPositionPx;\n this.moveViewportClient(viewportPanPx);\n });\n\n // Listen for 'mouseup' events; use 'capture phase' and 'stop propagation' to not close overlays\n merge(fromEvent<MouseEvent>(this._document, 'mouseup', {capture: true}), fromEvent<MouseEvent>(this._document, 'sci-mouseup'))\n .pipe(first(), takeUntil(this._destroy$))\n .subscribe(mouseupEvent => {\n mouseupEvent.stopPropagation();\n mousemoveListener.unsubscribe();\n this._lastDragPosition = null;\n });\n });\n }\n\n /* @docs-private */\n public onScrollTrackMouseDown(event: MouseEvent, direction: 'up' | 'down'): void {\n const signum = (direction === 'up' ? -1 : +1);\n this.scrollWhileMouseDown(this.toViewportPanPx(signum * this.thumbSize), event);\n }\n\n /**\n * Projects the given scrollbar scroll pixels into viewport scroll pixels.\n */\n private toViewportPanPx(scrollbarPanPx: number): number {\n const scrollRangePx = this.trackSize - this.thumbSize;\n const scrollRatio = scrollbarPanPx / scrollRangePx;\n return scrollRatio * (this.viewportClientSize - this.viewportSize);\n }\n\n /**\n * Moves the viewport client by the specified numbers of pixels.\n */\n private moveViewportClient(viewportPanPx: number): void {\n if (this.vertical) {\n this._viewport.scrollTop += viewportPanPx;\n }\n else {\n this._viewport.scrollLeft += viewportPanPx;\n }\n }\n\n /**\n * Indicates if the content overflows.\n */\n public get overflow(): boolean {\n return this._overflow;\n }\n\n /**\n * Scrolls continuously while holding the mouse pressed, or until the mouse leaves the scrolltrack.\n */\n private scrollWhileMouseDown(viewportScrollPx: number, mousedownEvent: MouseEvent): void {\n // The `EventTarget` type of `Event.target` is not yet compatible with `FromEventTarget` used in `fromEvent`.\n // This will be fixed in rxjs version 7.0.0. Refer to https://github.com/ReactiveX/rxjs/commit/5f022d784570684632e6fd5ae247fc259ee34c4b\n // for more details.\n const scrollTrackElement = mousedownEvent.target as Element;\n\n // scroll continuously every 50ms after an initial delay of 250ms\n timer(250, 50)\n .pipe(\n // continue chain with latest mouse event\n withLatestFrom(merge(of(mousedownEvent), fromEvent<MouseEvent>(scrollTrackElement, 'mousemove')), (tick, event) => event),\n // start immediately\n startWith(mousedownEvent),\n // stop scrolling if the thumb hits the mouse pointer position\n takeWhile((event: MouseEvent) => scrollTrackElement === this._document.elementFromPoint(event.clientX, event.clientY)),\n debounceTime(10),\n // stop scrolling on mouseout or mouseup\n takeUntil(merge(fromEvent(scrollTrackElement, 'mouseout'), fromEvent(scrollTrackElement, 'mouseup'))),\n )\n .subscribe(() => {\n this.moveViewportClient(viewportScrollPx);\n });\n }\n\n /**\n * Emits whenever the viewport scrolls.\n */\n private viewportScrollChange$(): Observable<void> {\n return fromEvent(this._viewport, 'scroll', {passive: true}).pipe(map(() => undefined));\n }\n\n /**\n * Emits on subscription, and then each time the size of the viewport changes.\n */\n private viewportDimensionChange$(options: {debounceTime: number}): Observable<void> {\n return fromDimension$(this._viewport)\n .pipe(\n // Debouncing is particularly important in the context of Angular animations, since they continuously\n // trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n // expands a panel that contains a viewport.\n debounceTime(options.debounceTime),\n map(() => undefined),\n );\n }\n\n /**\n * Emits on subscription, and then each time the size or style property of the viewport client changes.\n */\n private viewportClientDimensionChange$(options: {debounceTime: number}): Observable<void> {\n return this.children$(this._viewport)\n .pipe(\n switchMap(children => merge(...children.map(child => merge(\n fromDimension$(child),\n // Observe style mutations since some transformations change the scroll position without necessarily triggering a dimension change,\n // e.g., `scale` or `translate` used by some virtual scroll implementations\n fromMutation$(child, {subtree: false, childList: false, attributeFilter: ['style']})),\n ))),\n // Debouncing is particularly important in the context of Angular animations, since they continuously\n // trigger resize events. Debouncing prevents the scrollbar from flickering, for example, when the user\n // expands a panel that contains a viewport.\n debounceTime(options.debounceTime),\n map(() => undefined),\n );\n }\n\n /**\n * Emits the children of the passed element, and then each time child elements are added or removed.\n */\n private children$(element: HTMLElement): Observable<HTMLElement[]> {\n return fromMutation$(element, {subtree: false, childList: true})\n .pipe(\n startWith(undefined as void),\n map(() => Array.from(element.children)),\n filterArray((child: Element): child is HTMLElement => child instanceof HTMLElement),\n );\n }\n\n private setCssVariable(key: string, value: any): void {\n this._host.nativeElement.style.setProperty(key, value);\n }\n\n private get viewportSize(): number {\n return this._viewport ? (this.vertical ? this._viewport.clientHeight : this._viewport.clientWidth) : 0;\n }\n\n private get viewportClientSize(): number {\n return this._viewport ? (this.vertical ? this._viewport.scrollHeight : this._viewport.scrollWidth) : 0;\n }\n\n private get scrollPosition(): number {\n return this._viewport ? (this.vertical ? this._viewport.scrollTop : this._viewport.scrollLeft) : 0;\n }\n\n private get thumbSize(): number {\n const thumbElement = this.thumbElement.nativeElement;\n return this.vertical ? thumbElement.clientHeight : thumbElement.clientWidth;\n }\n\n private get trackSize(): number {\n const trackElement = this._host.nativeElement;\n return this.vertical ? trackElement.clientHeight : trackElement.clientWidth;\n }\n\n /* @docs-private */\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n","<!-- scrolltrack to move the viewport client upwards (paging) -->\n<div class=\"scrolltrack-start\" (mousedown)=\"onScrollTrackMouseDown($event, 'up')\"></div>\n\n<!-- scrollthumb -->\n<div #thumb_handle\n class=\"thumb-handle\"\n [class.vertical]=\"vertical\"\n [class.horizontal]=\"horizontal\"\n (mousedown)=\"onMouseDown($event)\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\"\n (touchcancel)=\"onTouchEnd($event)\">\n <div class=\"thumb\"\n [class.vertical]=\"vertical\"\n [class.horizontal]=\"horizontal\">\n </div>\n</div>\n\n<!-- scrolltrack to move the viewport client downwards (paging) -->\n<div class=\"scrolltrack-end\" (mousedown)=\"onScrollTrackMouseDown($event, 'down')\"></div>\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Directive, ElementRef, Input, OnChanges, OnDestroy, Renderer2, SimpleChanges} from '@angular/core';\nimport {NativeScrollbarTrackSize, SciNativeScrollbarTrackSizeProvider} from './native-scrollbar-track-size-provider.service';\nimport {map, takeUntil} from 'rxjs/operators';\nimport {merge, Subject} from 'rxjs';\nimport {Dictionary} from '@scion/toolkit/util';\n\n/**\n * Makes the host element natively scrollable and hides native scrollbars by default, unless native scrollbars\n * already sit on top of the viewport (e.g. in OS X).\n *\n * Because there is no cross-browser API to hide scrollbars without losing native scroll support, we set 'overflow'\n * to 'scroll' but shift the native scrollbars out of the visible viewport area. The shift offset is computed upfront.\n *\n * This directive expects its host element to be the only child in document flow in its parent DOM element. It makes the host element\n * fill up the entire space (width and height set to 100%). The parent element must have its CSS `overflow` property set to `hidden`\n * to hide the pushed out native scrollbars.\n */\n@Directive({\n selector: '[sciScrollable]',\n})\nexport class SciScrollableDirective implements OnChanges, OnDestroy {\n\n private _destroy$ = new Subject<void>();\n private _inputChange$ = new Subject<void>();\n\n /**\n * Controls whether to display native scrollbars.\n * Has no effect if the native scrollbar sits on top of the content, e.g. in OS X.\n */\n @Input('sciScrollableDisplayNativeScrollbar') // eslint-disable-line @angular-eslint/no-input-rename\n public isDisplayNativeScrollbar: boolean = false;\n\n constructor(private _host: ElementRef<HTMLDivElement>,\n private _renderer: Renderer2,\n nativeScrollbarTrackSizeProvider: SciNativeScrollbarTrackSizeProvider) {\n merge(\n nativeScrollbarTrackSizeProvider.trackSize$,\n this._inputChange$.pipe(map(() => nativeScrollbarTrackSizeProvider.trackSize)),\n )\n .pipe(takeUntil(this._destroy$))\n .subscribe(nativeScrollbarTrackSize => {\n if (nativeScrollbarTrackSize === null) { // the native scrollbar sits on top of the content\n this.useNativeScrollbars();\n }\n else {\n this.isDisplayNativeScrollbar ? this.useNativeScrollbars() : this.shiftNativeScrollbars(nativeScrollbarTrackSize);\n }\n });\n }\n\n /**\n * Uses the native scrollbars when content overflows.\n */\n private useNativeScrollbars(): void {\n this.setStyle(this._host.nativeElement, {\n overflow: 'auto',\n width: '100%',\n height: '100%',\n marginRight: 0,\n marginBottom: 0,\n });\n }\n\n /**\n * Shifts the native scrollbars out of the visible viewport area.\n */\n private shiftNativeScrollbars(nativeScrollbarTrackSize: NativeScrollbarTrackSize): void {\n this.setStyle(this._host.nativeElement, {\n overflow: 'scroll',\n width: `calc(100% + ${nativeScrollbarTrackSize.vScrollbarTrackWidth}px`,\n height: `calc(100% + ${nativeScrollbarTrackSize.hScrollbarTrackHeight}px`,\n marginRight: `-${nativeScrollbarTrackSize.vScrollbarTrackWidth}px`,\n marginBottom: `-${nativeScrollbarTrackSize.hScrollbarTrackHeight}px`,\n });\n }\n\n private setStyle(element: Element, style: Dictionary): void {\n Object.keys(style).forEach(key => this._renderer.setStyle(element, key, style[key]));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this._inputChange$.next();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, ViewEncapsulation} from '@angular/core';\nimport {SciNativeScrollbarTrackSizeProvider} from './native-scrollbar-track-size-provider.service';\nimport {coerceElement} from '@angular/cdk/coercion';\n\n/**\n * Represents a viewport with slotted content (`<ng-content>`) used as scrollable content. By default, content is added to a CSS grid layout.\n *\n * The viewport component displays scrollbars when its content overflows. Scrollbars are displayed on top of the content, not next to it.\n * The component uses the native scrollbars of the operating system if they are already sitting on top, or falls back and renders scrollbars on top otherwise.\n * The viewport remains natively scrollable with the native scrollbars shifted out of the viewport's visible area. Consequently, the viewport keeps supporting\n * native scrolling features such as touch gestures, scroll speed acceleration, or scrolling near the viewport edges during drag-and-drop operations.\n *\n * ```html\n * <sci-viewport>\n * your content\n * </sci-viewport>\n * ```\n *\n * ## Adding the viewport to a layout\n *\n * Typically you would add the viewport component to a flexible layout, filling the remaining space vertically and horizontally, such as a flexbox container\n * with the viewport's `flex` CSS property set to either `flex: auto` or `flex: 1 1 0`.\n *\n * The viewport is sized according to its content width and height. It grows to absorb any free space, thus overflowing its content only when encountering\n * a layout constraint. Depending on the layout, different steps may be necessary to prevent the viewport from growing to infinity.\n *\n * - If practical, give the viewport a fixed size or a maximum size.\n * - If you add the viewport to a flexbox layout, make sure that it cannot exceed the available space. Instead, the viewport should fill the remaining space,\n * vertically and horizontally. Be aware that, by default, a flex item does not shrink below its minimum content size. To change this, set the viewport's\n * `flex-basis` to `0` (instead of `auto`), or use the CSS shorthand property `flex: 1 1 0`. The `flex-basis` defines the default size of a flex item before\n * the remaining extra space is distributed. If the viewport does not appear after setting this property, check its parent elements' content sizes.\n * As an alternative to setting `flex: 1 1 0`, change the setting to `flex: auto` and hide the overflow in the parent element, as follows: `overflow: hidden`.\n * Another approach would be to set the minimum height of all parents to `0`, as follows: `min-height: 0`.\n *\n * For the complete documentation on the flex layout and its features, refer to https://developer.mozilla.org/en-US/docs/Web/CSS/flex.\n *\n *\n * ## Layouting the viewport's slotted content\n *\n * By default, the viewport's content is added to a CSS grid container with a single column, filling remaining space vertically and horizontally.\n * Using the `::part(content)` pseudo element selector, you can configure the grid container or apply a different layout, such as a flex or flow layout.\n *\n * #### Example of adding slotted content to a CSS flex container.\n * ```css\n * sci-viewport::part(content) {\n * display: flex;\n * flex-direction: column;\n * }\n * ```\n *\n * #### Example of configuring CSS grid container with two columns\n * ```css\n * sci-viewport::part(content) {\n * grid-template-columns: 1fr 1fr;\n * gap: 1em;\n * }\n * ```\n *\n * ## Styling of scrollbars\n *\n * You can override the following CSS variables to control the appearance of the scrollbar:\n *\n * - sci-viewport-scrollbar-color: Sets the color of the scrollbar (by default, uses `rgb(78, 78, 78)`).\n *\n * ```css\n * sci-viewport {\n * --sci-viewport-scrollbar-color: blue;\n * }\n * ```\n */\n@Component({\n selector: 'sci-viewport',\n templateUrl: './viewport.component.html',\n styleUrls: ['./viewport.component.scss'],\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class SciViewportComponent {\n\n private _viewportElement!: HTMLDivElement;\n private _viewportClient!: HTMLDivElement;\n private _scrollbarStyle: ScrollbarStyle = 'on-top';\n\n /** @internal */\n @ViewChild('viewport', {static: true})\n public set setViewport(viewport: ElementRef<HTMLDivElement>) {\n this._viewportElement = coerceElement(viewport);\n }\n\n /** @internal */\n @ViewChild('viewport_client', {static: true})\n public set setViewportClient(viewportClient: ElementRef<HTMLDivElement>) {\n this._viewportClient = coerceElement(viewportClient);\n }\n\n /**\n * Controls whether to use native scrollbars or, which is by default, emulated scrollbars that sit on top of the viewport client.\n * In the latter, the viewport client remains natively scrollable.\n */\n @Input()\n public set scrollbarStyle(scrollbarStyle: ScrollbarStyle) {\n this._scrollbarStyle = scrollbarStyle || 'on-top';\n }\n\n public get scrollbarStyle(): ScrollbarStyle {\n return this._scrollbarStyle;\n }\n\n /**\n * Emits upon a scroll event.\n *\n * You can add [sciDimension] directive to the viewport or viewport client to be notified about layout changes.\n */\n @Output()\n public scroll = new EventEmitter<Event>(); // eslint-disable-line @angular-eslint/no-output-native\n\n constructor(public host: ElementRef<HTMLElement>, public nativeScrollbarTrackSizeProvider: SciNativeScrollbarTrackSizeProvider) {\n }\n\n @HostListener('focus')\n public focus(): void { // do not rename to expose the same focus method like `HTMLElement.focus()`.\n this._viewportElement?.focus();\n }\n\n public onScroll(event: Event): void {\n this.scroll.emit(event);\n }\n\n /**\n * Returns the number of pixels that the viewport client is scrolled vertically.\n *\n * @see Element.scrollTop\n */\n public get scrollTop(): number {\n return this._viewportElement.scrollTop;\n }\n\n /**\n * Sets the number of pixels that the viewport client is scrolled vertically.\n *\n * @see Element.scrollTop\n */\n public set scrollTop(scrollTop: number) {\n this._viewportElement.scrollTop = scrollTop;\n }\n\n /**\n * Returns the number of pixels that the viewport client is scrolled horizontally.\n *\n * @see Element.scrollLeft\n */\n public get scrollLeft(): number {\n return this._viewportElement.scrollLeft;\n }\n\n /**\n * Sets the number of pixels that the viewport client is scrolled horizontally.\n *\n * @see Element.scrollLeft\n */\n public set scrollLeft(scrollLeft: number) {\n this._viewportElement.scrollLeft = scrollLeft;\n }\n\n /**\n * Returns the height of the viewport client.\n *\n * @see Element.scrollHeight\n */\n public get scrollHeight(): number {\n return this._viewportElement.scrollHeight;\n }\n\n /**\n * Returns the width of the viewport client.\n *\n * @see Element.scrollWidth\n */\n public get scrollWidth(): number {\n return this._viewportElement.scrollWidth;\n }\n\n /**\n * Returns the viewport {HTMLElement}.\n */\n public get viewportElement(): HTMLElement {\n return this._viewportElement;\n }\n\n /**\n * Returns the viewport client {HTMLElement}.\n */\n public get viewportClientElement(): HTMLElement {\n return this._viewportClient;\n }\n\n /**\n * Checks if the specified element is scrolled into the viewport.\n *\n * @param element - the element to be checked\n * @param fit - control if the element must fully or partially fit into the viewport\n * @return `true` if the element is scrolled into the viewport, or `false` otherwise.\n */\n public isElementInView(element: ElementRef<HTMLElement> | HTMLElement, fit: 'full' | 'partial'): boolean {\n const elTop = this.computeOffset(element, 'top');\n if (elTop === null) {\n return false;\n }\n const elLeft = this.computeOffset(element, 'left');\n if (elLeft === null) {\n return false;\n }\n\n // Consider elements as scrolled into view when there is no viewport overflow.\n // The calculation of whether an element is scrolled into view may be wrong by a few pixels if the viewport contains elements with decimal sizes.\n // This can happen because `offsetLeft` and `offsetTop` operate on an integer (not a decimal), losing precision that can accumulate.\n // To avoid incorrect calculation when there is no viewport overflow, we consider all contained elements as scrolled into the view.\n if (this._viewportElement.scrollWidth <= this._viewportElement.clientWidth && this._viewportElement.scrollHeight <= this._viewportElement.clientHeight) {\n return true;\n }\n\n const elBottom = elTop + coerceElement(element).offsetHeight;\n const elRight = elLeft + coerceElement(element).offsetWidth;\n\n const vpTop = this._viewportElement.scrollTop;\n const vpLeft = this._viewportElement.scrollLeft;\n const vpBottom = vpTop + this._viewportElement.clientHeight;\n const vpRight = vpLeft + this._viewportElement.clientWidth;\n\n if (fit === 'full') {\n return (elTop >= vpTop && elBottom <= vpBottom) && (elLeft >= vpLeft && elRight <= vpRight);\n }\n else {\n return (elBottom >= vpTop && elTop <= vpBottom) && (elRight >= vpLeft && elLeft <= vpRight);\n }\n }\n\n /**\n * Scrolls the specified element into the viewport.\n *\n * @param element - the element to scroll into the viewport\n * @param offset - the gap between the element and the viewport\n */\n public scrollIntoView(element: ElementRef<HTMLElement> | HTMLElement, offset: number = 50): void {\n const top = this.computeOffset(element, 'top');\n if (top === null) {\n return;\n }\n const left = this.computeOffset(element, 'left');\n if (left === null) {\n return;\n }\n\n this._viewportElement.scrollTop = top - offset;\n this._viewportElement.scrollLeft = left - offset;\n }\n\n /**\n * Computes the distance of the element to the viewport's left or top border.\n *\n * @return distance of the element to the viewport's left or top border, or `null` if not contained\n * in the viewport or the element or any ancestor has the `display` property set to `none`.\n */\n public computeOffset(element: ElementRef<HTMLElement> | HTMLElement, border: 'left' | 'top'): number | null {\n let offset = 0;\n let el = coerceElement(element);\n do {\n offset += (border === 'left' ? el.offsetLeft : el.offsetTop);\n const offsetParent = el.offsetParent;\n if (offsetParent === null) {\n // `offsetParent` is `null` in the following situations:\n // - The element or any ancestor has the `display` property set to `none`\n // - The element has the position property set to fixed (Firefox returns <body>).\n // - The element is <body> or <html>.\n // See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent.\n return null;\n }\n if (!(offsetParent instanceof HTMLElement)) {\n return null;\n }\n el = offsetParent;\n } while (el !== this.host.nativeElement);\n\n return offset;\n }\n}\n\n/**\n * Represents a scrollbar style.\n */\nexport type ScrollbarStyle = 'native' | 'on-top' | 'hidden';\n","<!-- viewport and viewport client -->\n<div #viewport\n class=\"viewport\"\n tabindex=\"-1\"\n sciScrollable [sciScrollableDisplayNativeScrollbar]=\"scrollbarStyle === 'native'\"\n cdkScrollable\n (scroll)=\"onScroll($event)\">\n <div #viewport_client class=\"viewport-client\" part=\"content\">\n <slot></slot>\n </div>\n</div>\n\n<!-- render emulated scrollbars which sit on-top -->\n<ng-container *ngIf=\"scrollbarStyle === 'on-top' && (nativeScrollbarTrackSizeProvider.trackSize$ | async) !== null\">\n <sci-scrollbar [direction]=\"'vscroll'\" [viewport]=\"viewport\"></sci-scrollbar>\n <sci-scrollbar [direction]=\"'hscroll'\" [viewport]=\"viewport\"></sci-scrollbar>\n</ng-container>\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SciViewportComponent} from './viewport.component';\nimport {SciScrollbarComponent} from './scrollbar/scrollbar.component';\nimport {SciScrollableDirective} from './scrollable.directive';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\n\n/**\n * Provides a viewport component with scrollbars that sit on top of the viewport client.\n */\n@NgModule({\n imports: [\n CommonModule,\n ScrollingModule,\n ],\n declarations: [\n SciViewportComponent,\n SciScrollbarComponent,\n SciScrollableDirective,\n ],\n exports: [\n SciViewportComponent,\n SciScrollbarComponent,\n SciScrollableDirective,\n ],\n})\nexport class SciViewportModule {\n}\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\n/*\n * Secondary entrypoint: '@scion/components/viewport'\n *\n * @see https://github.com/ng-packagr/ng-packagr/blob/master/docs/secondary-entrypoints.md\n */\nexport {SciViewportModule} from './viewport.module';\nexport * from './viewport.component';\nexport * from './scrollable.directive';\nexport * from './scrollbar/scrollbar.component';\nexport * from './native-scrollbar-track-size-provider.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.SciNativeScrollbarTrackSizeProvider","i4.SciScrollbarComponent","i5.SciScrollableDirective"],"mappings":"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"}
@@ -68,9 +68,9 @@ class SciDimensionDirective {
68
68
  this._destroy$.next();
69
69
  }
70
70
  }
71
- SciDimensionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciDimensionDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
72
- SciDimensionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.2", type: SciDimensionDirective, selector: "[sciDimension]", inputs: { emitOutsideAngular: "emitOutsideAngular" }, outputs: { dimensionChange: "sciDimensionChange" }, exportAs: ["sciDimension"], ngImport: i0 });
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciDimensionDirective, decorators: [{
71
+ SciDimensionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciDimensionDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
72
+ SciDimensionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: SciDimensionDirective, selector: "[sciDimension]", inputs: { emitOutsideAngular: "emitOutsideAngular" }, outputs: { dimensionChange: "sciDimensionChange" }, exportAs: ["sciDimension"], ngImport: i0 });
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciDimensionDirective, decorators: [{
74
74
  type: Directive,
75
75
  args: [{
76
76
  selector: '[sciDimension]',
@@ -99,10 +99,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
99
99
  */
100
100
  class SciDimensionModule {
101
101
  }
102
- SciDimensionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciDimensionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
103
- SciDimensionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.2", ngImport: i0, type: SciDimensionModule, declarations: [SciDimensionDirective], imports: [CommonModule], exports: [SciDimensionDirective] });
104
- SciDimensionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciDimensionModule, imports: [CommonModule] });
105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciDimensionModule, decorators: [{
102
+ SciDimensionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciDimensionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
103
+ SciDimensionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: SciDimensionModule, declarations: [SciDimensionDirective], imports: [CommonModule], exports: [SciDimensionDirective] });
104
+ SciDimensionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciDimensionModule, imports: [CommonModule] });
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciDimensionModule, decorators: [{
106
106
  type: NgModule,
107
107
  args: [{
108
108
  imports: [
@@ -138,9 +138,9 @@ class SciSashDirective {
138
138
  return flexGrow / flexGrowSum;
139
139
  }
140
140
  }
141
- SciSashDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciSashDirective, deps: [{ token: i0.TemplateRef }, { token: SciSashBoxAccessor }], target: i0.ɵɵFactoryTarget.Directive });
142
- SciSashDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.2", type: SciSashDirective, selector: "ng-template[sciSash]", inputs: { size: "size", minSize: "minSize" }, exportAs: ["sciSash"], usesOnChanges: true, ngImport: i0 });
143
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciSashDirective, decorators: [{
141
+ SciSashDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciSashDirective, deps: [{ token: i0.TemplateRef }, { token: SciSashBoxAccessor }], target: i0.ɵɵFactoryTarget.Directive });
142
+ SciSashDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: SciSashDirective, selector: "ng-template[sciSash]", inputs: { size: "size", minSize: "minSize" }, exportAs: ["sciSash"], usesOnChanges: true, ngImport: i0 });
143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciSashDirective, decorators: [{
144
144
  type: Directive,
145
145
  args: [{
146
146
  selector: 'ng-template[sciSash]',
@@ -172,9 +172,9 @@ class SciSashInitializerDirective {
172
172
  this.sash.element = this._host.nativeElement;
173
173
  }
174
174
  }
175
- SciSashInitializerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciSashInitializerDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
176
- SciSashInitializerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.2", type: SciSashInitializerDirective, selector: "div[sciSashInitializer].sash", inputs: { sash: ["sciSashInitializer", "sash"] }, usesOnChanges: true, ngImport: i0 });
177
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciSashInitializerDirective, decorators: [{
175
+ SciSashInitializerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciSashInitializerDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
176
+ SciSashInitializerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: SciSashInitializerDirective, selector: "div[sciSashInitializer].sash", inputs: { sash: ["sciSashInitializer", "sash"] }, usesOnChanges: true, ngImport: i0 });
177
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciSashInitializerDirective, decorators: [{
178
178
  type: Directive,
179
179
  args: [{ selector: 'div[sciSashInitializer].sash' }]
180
180
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { sash: [{
@@ -200,9 +200,9 @@ class SciElementRefDirective {
200
200
  this.nativeElement = host.nativeElement;
201
201
  }
202
202
  }
203
- SciElementRefDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciElementRefDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
204
- SciElementRefDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.2", type: SciElementRefDirective, selector: "[sciElementRef]", exportAs: ["sciElementRef"], ngImport: i0 });
205
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciElementRefDirective, decorators: [{
203
+ SciElementRefDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciElementRefDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
204
+ SciElementRefDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: SciElementRefDirective, selector: "[sciElementRef]", exportAs: ["sciElementRef"], ngImport: i0 });
205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciElementRefDirective, decorators: [{
206
206
  type: Directive,
207
207
  args: [{ selector: '[sciElementRef]', exportAs: 'sciElementRef' }]
208
208
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
@@ -417,13 +417,13 @@ class SciSashboxComponent {
417
417
  return parseInt(value, 10);
418
418
  }
419
419
  }
420
- SciSashboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciSashboxComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
421
- SciSashboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.2", type: SciSashboxComponent, selector: "sci-sashbox", inputs: { direction: "direction" }, outputs: { sashStart: "sashStart", sashEnd: "sashEnd" }, host: { properties: { "class.sashing": "this.sashing", "class.column": "this.isColumnDirection", "class.row": "this.isRowDirection" } }, providers: [{
420
+ SciSashboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciSashboxComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
421
+ SciSashboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: SciSashboxComponent, selector: "sci-sashbox", inputs: { direction: "direction" }, outputs: { sashStart: "sashStart", sashEnd: "sashEnd" }, host: { properties: { "class.sashing": "this.sashing", "class.column": "this.isColumnDirection", "class.row": "this.isRowDirection" } }, providers: [{
422
422
  provide: SciSashBoxAccessor,
423
423
  useFactory: provideSashBoxAccessor,
424
424
  deps: [forwardRef(() => SciSashboxComponent)],
425
425
  }], queries: [{ propertyName: "setSashes", predicate: SciSashDirective }], ngImport: i0, template: "<ng-container *ngFor=\"let sash of sashes$ | async; index as i; first as first; last as last;\">\n <div class=\"sash\"\n [class.first]=\"first\"\n [class.last]=\"last\"\n [sciSashInitializer]=\"sash\"\n [style.flex-grow]=\"sash.flexGrowNormalized$ | async\"\n [style.flex-shrink]=\"sash.flexShrink\"\n [style.flex-basis]=\"sash.flexBasis\">\n <ng-container *ngTemplateOutlet=\"sash.sashTemplate\"></ng-container>\n </div>\n\n <sci-splitter *ngIf=\"!last\"\n sciElementRef #sciElementRef=\"sciElementRef\"\n [orientation]=\"isRowDirection ? 'vertical' : 'horizontal'\"\n (start)=\"onSashStart()\"\n (move)=\"onSash(sciElementRef.nativeElement, i, $event)\"\n (end)=\"onSashEnd()\"\n (reset)=\"onSashReset(i)\">\n </sci-splitter>\n</ng-container>\n", styles: [":host{--sci-sashbox-gap: 10px;--sci-sashbox-splitter-bgcolor: #d2d2d2;--sci-sashbox-splitter-bgcolor_hover: var(--sci-sashbox-splitter-bgcolor);--sci-sashbox-splitter-size: 1px;--sci-sashbox-splitter-size_hover: 8px;--sci-sashbox-splitter-touch-target-size: 15px;--sci-sashbox-splitter-cross-axis-size: 100%;--sci-sashbox-splitter-border-radius: 0;--sci-sashbox-splitter-opacity_active: 1;--sci-sashbox-splitter-opacity_hover: .3;display:flex;align-items:stretch;box-sizing:border-box;overflow:hidden;z-index:0}:host *{box-sizing:border-box}:host.column{flex-direction:column}:host.row{flex-direction:row}:host>div.sash{overflow:hidden;display:grid;grid-auto-rows:100%;grid-auto-columns:100%}:host.row>div.sash{margin:0 var(--sci-sashbox-gap)}:host.row>div.sash.first{margin-left:0}:host.row>div.sash.last{margin-right:0}:host.column>div.sash{margin:var(--sci-sashbox-gap) 0}:host.column>div.sash.first{margin-top:0}:host.column>div.sash.last{margin-bottom:0}:host.sashing>div.sash{pointer-events:none}:host>sci-splitter{--sci-splitter-bgcolor: var(--sci-sashbox-splitter-bgcolor);--sci-splitter-bgcolor_hover: var(--sci-sashbox-splitter-bgcolor_hover);--sci-splitter-size: var(--sci-sashbox-splitter-size);--sci-splitter-size_hover: var(--sci-sashbox-splitter-size_hover);--sci-splitter-touch-target-size: var(--sci-sashbox-splitter-touch-target-size);--sci-splitter-cross-axis-size: var(--sci-sashbox-splitter-cross-axis-size);--sci-splitter-border-radius: var(--sci-sashbox-splitter-border-radius);--sci-splitter-opacity_active: var(--sci-sashbox-splitter-opacity_active);--sci-splitter-opacity_hover: var(--sci-sashbox-splitter-opacity_hover);flex:none;z-index:1}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.SciSplitterComponent, selector: "sci-splitter", inputs: ["orientation"], outputs: ["start", "move", "end", "reset"] }, { kind: "directive", type: SciSashInitializerDirective, selector: "div[sciSashInitializer].sash", inputs: ["sciSashInitializer"] }, { kind: "directive", type: SciElementRefDirective, selector: "[sciElementRef]", exportAs: ["sciElementRef"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
426
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciSashboxComponent, decorators: [{
426
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciSashboxComponent, decorators: [{
427
427
  type: Component,
428
428
  args: [{ selector: 'sci-sashbox', providers: [{
429
429
  provide: SciSashBoxAccessor,
@@ -507,16 +507,16 @@ function provideSashBoxAccessor(component) {
507
507
  */
508
508
  class SciSashboxModule {
509
509
  }
510
- SciSashboxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciSashboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
511
- SciSashboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.2", ngImport: i0, type: SciSashboxModule, declarations: [SciSashboxComponent,
510
+ SciSashboxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciSashboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
511
+ SciSashboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: SciSashboxModule, declarations: [SciSashboxComponent,
512
512
  SciSashDirective,
513
513
  SciSashInitializerDirective,
514
514
  SciElementRefDirective], imports: [CommonModule,
515
515
  SciSplitterModule], exports: [SciSashboxComponent,
516
516
  SciSashDirective] });
517
- SciSashboxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciSashboxModule, imports: [CommonModule,
517
+ SciSashboxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciSashboxModule, imports: [CommonModule,
518
518
  SciSplitterModule] });
519
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciSashboxModule, decorators: [{
519
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciSashboxModule, decorators: [{
520
520
  type: NgModule,
521
521
  args: [{
522
522
  declarations: [
@@ -191,9 +191,9 @@ class SciSplitterComponent {
191
191
  this._destroy$.next();
192
192
  }
193
193
  }
194
- SciSplitterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciSplitterComponent, deps: [{ token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
195
- SciSplitterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.2", type: SciSplitterComponent, selector: "sci-splitter", inputs: { orientation: "orientation" }, outputs: { start: "start", move: "move", end: "end", reset: "reset" }, host: { properties: { "class.moving": "this.moving", "class.vertical": "this.isVertical", "class.horizontal": "this.isHorizontal", "style.cursor": "this.splitterCursor" } }, viewQueries: [{ propertyName: "touchTargetElementRef", first: true, predicate: ["touch_target"], descendants: true, static: true }], ngImport: i0, template: "<div #touch_target class=\"touch-target\">\n <div class=\"handle\"></div>\n</div>\n", styles: [":host{--sci-splitter-bgcolor: #d2d2d2;--sci-splitter-bgcolor_hover: var(--sci-splitter-bgcolor);--sci-splitter-size: 1px;--sci-splitter-size_hover: 8px;--sci-splitter-touch-target-size: 15px;--sci-splitter-cross-axis-size: 100%;--sci-splitter-border-radius: 0;--sci-splitter-opacity_active: 1;--sci-splitter-opacity_hover: .3;display:grid;position:relative;background-color:var(--sci-splitter-bgcolor);border-radius:var(--sci-splitter-border-radius);place-items:center;align-self:center}:host>div.touch-target{position:absolute;display:grid;place-items:center;pointer-events:auto}:host>div.touch-target>div.handle{position:absolute;background-color:var(--sci-splitter-bgcolor);border-radius:var(--sci-splitter-border-radius);opacity:var(--sci-splitter-opacity_hover);transition-property:width,height;transition-timing-function:ease-in;transition-duration:75ms}:host.vertical{width:var(--sci-splitter-size);height:var(--sci-splitter-cross-axis-size)}:host.vertical>div.touch-target{width:var(--sci-splitter-touch-target-size);height:100%}:host.vertical>div.touch-target>div.handle{width:var(--sci-splitter-size);height:100%}:host.horizontal{height:var(--sci-splitter-size);width:var(--sci-splitter-cross-axis-size)}:host.horizontal>div.touch-target{width:100%;height:var(--sci-splitter-touch-target-size)}:host.horizontal>div.touch-target>div.handle{width:100%;height:var(--sci-splitter-size)}:host>div.touch-target:active>div.handle{opacity:var(--sci-splitter-opacity_active)}:host.vertical.moving>div.touch-target>div.handle,:host.vertical>div.touch-target:hover>div.handle{background-color:var(--sci-splitter-bgcolor_hover);width:var(--sci-splitter-size_hover)}:host.horizontal.moving>div.touch-target>div.handle,:host.horizontal>div.touch-target:hover>div.handle{background-color:var(--sci-splitter-bgcolor_hover);height:var(--sci-splitter-size_hover)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
196
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciSplitterComponent, decorators: [{
194
+ SciSplitterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciSplitterComponent, deps: [{ token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
195
+ SciSplitterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: SciSplitterComponent, selector: "sci-splitter", inputs: { orientation: "orientation" }, outputs: { start: "start", move: "move", end: "end", reset: "reset" }, host: { properties: { "class.moving": "this.moving", "class.vertical": "this.isVertical", "class.horizontal": "this.isHorizontal", "style.cursor": "this.splitterCursor" } }, viewQueries: [{ propertyName: "touchTargetElementRef", first: true, predicate: ["touch_target"], descendants: true, static: true }], ngImport: i0, template: "<div #touch_target class=\"touch-target\">\n <div class=\"handle\"></div>\n</div>\n", styles: [":host{--sci-splitter-bgcolor: #d2d2d2;--sci-splitter-bgcolor_hover: var(--sci-splitter-bgcolor);--sci-splitter-size: 1px;--sci-splitter-size_hover: 8px;--sci-splitter-touch-target-size: 15px;--sci-splitter-cross-axis-size: 100%;--sci-splitter-border-radius: 0;--sci-splitter-opacity_active: 1;--sci-splitter-opacity_hover: .3;display:grid;position:relative;background-color:var(--sci-splitter-bgcolor);border-radius:var(--sci-splitter-border-radius);place-items:center;align-self:center}:host>div.touch-target{position:absolute;display:grid;place-items:center;pointer-events:auto}:host>div.touch-target>div.handle{position:absolute;background-color:var(--sci-splitter-bgcolor);border-radius:var(--sci-splitter-border-radius);opacity:var(--sci-splitter-opacity_hover);transition-property:width,height;transition-timing-function:ease-in;transition-duration:75ms}:host.vertical{width:var(--sci-splitter-size);height:var(--sci-splitter-cross-axis-size)}:host.vertical>div.touch-target{width:var(--sci-splitter-touch-target-size);height:100%}:host.vertical>div.touch-target>div.handle{width:var(--sci-splitter-size);height:100%}:host.horizontal{height:var(--sci-splitter-size);width:var(--sci-splitter-cross-axis-size)}:host.horizontal>div.touch-target{width:100%;height:var(--sci-splitter-touch-target-size)}:host.horizontal>div.touch-target>div.handle{width:100%;height:var(--sci-splitter-size)}:host>div.touch-target:active>div.handle{opacity:var(--sci-splitter-opacity_active)}:host.vertical.moving>div.touch-target>div.handle,:host.vertical>div.touch-target:hover>div.handle{background-color:var(--sci-splitter-bgcolor_hover);width:var(--sci-splitter-size_hover)}:host.horizontal.moving>div.touch-target>div.handle,:host.horizontal>div.touch-target:hover>div.handle{background-color:var(--sci-splitter-bgcolor_hover);height:var(--sci-splitter-size_hover)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
196
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciSplitterComponent, decorators: [{
197
197
  type: Component,
198
198
  args: [{ selector: 'sci-splitter', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #touch_target class=\"touch-target\">\n <div class=\"handle\"></div>\n</div>\n", styles: [":host{--sci-splitter-bgcolor: #d2d2d2;--sci-splitter-bgcolor_hover: var(--sci-splitter-bgcolor);--sci-splitter-size: 1px;--sci-splitter-size_hover: 8px;--sci-splitter-touch-target-size: 15px;--sci-splitter-cross-axis-size: 100%;--sci-splitter-border-radius: 0;--sci-splitter-opacity_active: 1;--sci-splitter-opacity_hover: .3;display:grid;position:relative;background-color:var(--sci-splitter-bgcolor);border-radius:var(--sci-splitter-border-radius);place-items:center;align-self:center}:host>div.touch-target{position:absolute;display:grid;place-items:center;pointer-events:auto}:host>div.touch-target>div.handle{position:absolute;background-color:var(--sci-splitter-bgcolor);border-radius:var(--sci-splitter-border-radius);opacity:var(--sci-splitter-opacity_hover);transition-property:width,height;transition-timing-function:ease-in;transition-duration:75ms}:host.vertical{width:var(--sci-splitter-size);height:var(--sci-splitter-cross-axis-size)}:host.vertical>div.touch-target{width:var(--sci-splitter-touch-target-size);height:100%}:host.vertical>div.touch-target>div.handle{width:var(--sci-splitter-size);height:100%}:host.horizontal{height:var(--sci-splitter-size);width:var(--sci-splitter-cross-axis-size)}:host.horizontal>div.touch-target{width:100%;height:var(--sci-splitter-touch-target-size)}:host.horizontal>div.touch-target>div.handle{width:100%;height:var(--sci-splitter-size)}:host>div.touch-target:active>div.handle{opacity:var(--sci-splitter-opacity_active)}:host.vertical.moving>div.touch-target>div.handle,:host.vertical>div.touch-target:hover>div.handle{background-color:var(--sci-splitter-bgcolor_hover);width:var(--sci-splitter-size_hover)}:host.horizontal.moving>div.touch-target>div.handle,:host.horizontal>div.touch-target:hover>div.handle{background-color:var(--sci-splitter-bgcolor_hover);height:var(--sci-splitter-size_hover)}\n"] }]
199
199
  }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: Document, decorators: [{
@@ -246,10 +246,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
246
246
  */
247
247
  class SciSplitterModule {
248
248
  }
249
- SciSplitterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciSplitterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
250
- SciSplitterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.2", ngImport: i0, type: SciSplitterModule, declarations: [SciSplitterComponent], imports: [CommonModule], exports: [SciSplitterComponent] });
251
- SciSplitterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciSplitterModule, imports: [CommonModule] });
252
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: SciSplitterModule, decorators: [{
249
+ SciSplitterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciSplitterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
250
+ SciSplitterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: SciSplitterModule, declarations: [SciSplitterComponent], imports: [CommonModule], exports: [SciSplitterComponent] });
251
+ SciSplitterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciSplitterModule, imports: [CommonModule] });
252
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SciSplitterModule, decorators: [{
253
253
  type: NgModule,
254
254
  args: [{
255
255
  declarations: [
@@ -1 +1 @@
1
- {"version":3,"file":"scion-components-splitter.mjs","sources":["../../../../projects/scion/components/splitter/src/splitter.component.ts","../../../../projects/scion/components/splitter/src/splitter.component.html","../../../../projects/scion/components/splitter/src/splitter.module.ts","../../../../projects/scion/components/splitter/src/public_api.ts","../../../../projects/scion/components/splitter/src/scion-components-splitter.ts"],"sourcesContent":["/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, Inject, Input, NgZone, OnDestroy, OnInit, Output, ViewChild} from '@angular/core';\nimport {fromEvent, merge, Subject} from 'rxjs';\nimport {DOCUMENT} from '@angular/common';\nimport {tapFirst} from '@scion/toolkit/operators';\nimport {first, takeUntil} from 'rxjs/operators';\n\n/**\n * Represents a splitter, a visual element that allows the user to control the size of elements next to it.\n *\n * The splitter has a handle that the user can move depending on the orientation of the splitter.\n *\n * Note that this control neither does change the size of adjacent elements nor does it (re-)position itself, but emits the distance by\n * which the user has theoretically moved the splitter. You must subscribe to these events and change your layout accordingly.\n *\n * In the toolkit, {@link SciSashboxComponent} uses this splitter to divide a layout into several resizable sections.\n * Another use case would be a resizable sidebar panel.\n *\n * ### Usage:\n *\n * ```html\n * <sci-splitter (move)=\"onSplitterMove($event.distance)\"></sci-splitter>\n * ```\n *\n * ### Theme override:\n * The default style of the splitter is made up of shades of gray.\n * You can control the appearance by overriding the following CSS variables:\n *\n * - --sci-splitter-bgcolor: Sets the background color of the splitter.\n * - --sci-splitter-bgcolor_hover: Sets the background color of the splitter when hovering it.\n * - --sci-splitter-size: Sets the size of the splitter along the main axis.\n * - --sci-splitter-size_hover: Sets the size of the splitter along the main axis when hovering it.\n * - --sci-splitter-touch-target-size: Sets the touch target size to move the splitter (accessibility).\n * - --sci-splitter-cross-axis-size: Sets the splitter size along the cross axis.\n * - --sci-splitter-border-radius: Sets the border radius of the splitter.\n * - --sci-splitter-opacity_active: Sets the opacity of the splitter while the user moves the splitter.\n * - --sci-splitter-opacity_hover: Sets the opacity of the splitter when hovering it.\n *\n * Example:\n *\n * ```scss\n * sci-splitter {\n * --sci-splitter-bgcolor: black;\n * --sci-splitter-bgcolor_hover: black;\n * }\n * ```\n *\n * @dynamic ignore 'strictMetadataEmit' errors due to the usage of {@link Document} as ambient type for DI.\n */\n@Component({\n selector: 'sci-splitter',\n templateUrl: './splitter.component.html',\n styleUrls: ['./splitter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SciSplitterComponent implements OnInit, OnDestroy {\n\n private _destroy$ = new Subject<void>();\n\n /* @docs-private */\n @HostBinding('class.moving')\n public moving = false;\n\n @HostBinding('class.vertical')\n public get isVertical(): boolean {\n return !this.isHorizontal;\n }\n\n @HostBinding('class.horizontal')\n public get isHorizontal(): boolean {\n return this.orientation === 'horizontal';\n }\n\n /**\n * Controls whether to render a vertical or horizontal splitter.\n * By default, if not specified, renders a vertical splitter.\n */\n @Input()\n public orientation: 'vertical' | 'horizontal' = 'vertical';\n\n /**\n * Emits when starting to move the splitter.\n */\n @Output()\n public start = new EventEmitter<void>(); // eslint-disable-line @angular-eslint/no-output-native\n\n /**\n * Emits the distance in pixels when the splitter is moved.\n * The event is emitted outside of the Angular zone.\n */\n @Output()\n public move = new EventEmitter<SplitterMoveEvent>();\n\n /**\n * Emits when ending to move the splitter.\n */\n @Output()\n public end = new EventEmitter<void>(); // eslint-disable-line @angular-eslint/no-output-native\n\n /**\n * Emits when to reset the splitter position.\n */\n @Output()\n public reset = new EventEmitter<void>(); // eslint-disable-line @angular-eslint/no-output-native\n\n /* @docs-private */\n @HostBinding('style.cursor')\n public get splitterCursor(): string {\n return this.isVertical ? 'ew-resize' : 'ns-resize';\n }\n\n /* @docs-private */\n @ViewChild('touch_target', {static: true})\n public touchTargetElementRef!: ElementRef<HTMLElement>;\n\n constructor(private _zone: NgZone,\n private _cd: ChangeDetectorRef,\n @Inject(DOCUMENT) private _document: Document) {\n }\n\n /* @docs-private */\n public ngOnInit(): void {\n fromEvent(this.touchTargetElementRef.nativeElement, 'dblclick')\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => this.onReset());\n\n fromEvent<TouchEvent>(this.touchTargetElementRef.nativeElement, 'touchstart')\n .pipe(takeUntil(this._destroy$))\n .subscribe((event: TouchEvent) => this.onTouchStart(event));\n\n fromEvent<MouseEvent>(this.touchTargetElementRef.nativeElement, 'mousedown')\n .pipe(takeUntil(this._destroy$))\n .subscribe((event: MouseEvent) => this.onMouseDown(event));\n }\n\n private onReset(): void {\n this.reset.emit();\n }\n\n private onTouchStart(startEvent: TouchEvent): void {\n this.installMoveListener({\n startEvent: startEvent,\n moveEventNames: ['touchmove'],\n endEventNames: ['touchend', 'touchcancel'],\n eventPositionFn: (touchEvent: TouchEvent): EventPosition => {\n const touch: Touch = touchEvent.touches[0];\n if (this.isVertical) {\n return {screenPos: touch.screenX, clientPos: touch.clientX, pagePos: touch.pageX};\n }\n else {\n return {screenPos: touch.screenY, clientPos: touch.clientY, pagePos: touch.pageY};\n }\n },\n },\n );\n }\n\n private onMouseDown(startEvent: MouseEvent): void {\n if (startEvent.button !== 0) {\n return;\n }\n\n this.installMoveListener({\n startEvent: startEvent,\n moveEventNames: ['mousemove', 'sci-mousemove'],\n endEventNames: ['mouseup', 'sci-mouseup'],\n eventPositionFn: (mouseEvent: MouseEvent): EventPosition => {\n if (this.isVertical) {\n return {screenPos: mouseEvent.screenX, clientPos: mouseEvent.clientX, pagePos: mouseEvent.pageX};\n }\n else {\n return {screenPos: mouseEvent.screenY, clientPos: mouseEvent.clientY, pagePos: mouseEvent.pageY};\n }\n },\n },\n );\n }\n\n private installMoveListener<EVENT extends Event>(config: {startEvent: EVENT; moveEventNames: string[]; endEventNames: string[]; eventPositionFn: (event: EVENT) => EventPosition}): void {\n const startEvent = config.startEvent;\n\n startEvent.preventDefault();\n\n this._zone.runOutsideAngular(() => {\n // install listeners on document level to allow fast dragging the splitter.\n const moveEvent$ = merge(...config.moveEventNames.map(eventName => fromEvent<EVENT>(this._document, eventName)));\n const endEvent$ = merge(...config.endEventNames.map(eventName => fromEvent<EVENT>(this._document, eventName)));\n let lastClientPos = config.eventPositionFn(startEvent).clientPos;\n\n // Apply cursor on document level to prevent flickering while moving the splitter\n const oldDocumentCursor = this._document.body.style.cursor;\n this._document.body.style.cursor = this.splitterCursor;\n\n // Listen for 'move' events until stop moving the splitter\n moveEvent$\n .pipe(\n tapFirst(() => this._zone.run(() => {\n this.moving = true;\n this.start.next();\n this._cd.markForCheck();\n })),\n takeUntil(merge(endEvent$, this._destroy$)),\n )\n .subscribe((moveEvent: EVENT) => {\n const eventPos = config.eventPositionFn(moveEvent);\n const newClientPos = eventPos.clientPos;\n const distance = newClientPos - lastClientPos;\n lastClientPos = newClientPos;\n\n NgZone.assertNotInAngularZone();\n this.move.emit({distance, position: eventPos});\n });\n\n // Listen for 'end' events; call 'stop propagation' to not close overlays\n endEvent$\n .pipe(first(), takeUntil(this._destroy$))\n .subscribe((endEvent: EVENT) => {\n endEvent.stopPropagation();\n this._document.body.style.cursor = oldDocumentCursor;\n this.moving && this._zone.run(() => {\n this.end.next();\n this.moving = false;\n this._cd.markForCheck();\n });\n });\n });\n }\n\n /* @docs-private */\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n\nexport interface EventPosition {\n clientPos: number;\n pagePos: number;\n screenPos: number;\n}\n\n/**\n * Event that is emitted when moving the splitter.\n */\nexport interface SplitterMoveEvent {\n /**\n * The distance in pixels by which the user has moved the splitter since the last emission.\n */\n distance: number;\n /**\n * The position where the mouse or touch event has occurred.\n */\n position: EventPosition;\n}\n","<div #touch_target class=\"touch-target\">\n <div class=\"handle\"></div>\n</div>\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SciSplitterComponent} from './splitter.component';\n\n/**\n * Provides a splitter, a visual element that allows the user to control the size of elements next to it.\n *\n * ### Usage:\n *\n * ```html\n * <sci-splitter (move)=\"onSplitterMove($event.distance)\"></sci-splitter>\n * ```\n */\n@NgModule({\n declarations: [\n SciSplitterComponent,\n ],\n imports: [\n CommonModule,\n ],\n exports: [\n SciSplitterComponent,\n ],\n})\nexport class SciSplitterModule {\n}\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\n/*\n * Secondary entrypoint: '@scion/components/splitter'\n *\n * @see https://github.com/ng-packagr/ng-packagr/blob/master/docs/secondary-entrypoints.md\n */\nexport * from './splitter.component';\nexport * from './splitter.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scion-components-splitter.mjs","sources":["../../../../projects/scion/components/splitter/src/splitter.component.ts","../../../../projects/scion/components/splitter/src/splitter.component.html","../../../../projects/scion/components/splitter/src/splitter.module.ts","../../../../projects/scion/components/splitter/src/public_api.ts","../../../../projects/scion/components/splitter/src/scion-components-splitter.ts"],"sourcesContent":["/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, Inject, Input, NgZone, OnDestroy, OnInit, Output, ViewChild} from '@angular/core';\nimport {fromEvent, merge, Subject} from 'rxjs';\nimport {DOCUMENT} from '@angular/common';\nimport {tapFirst} from '@scion/toolkit/operators';\nimport {first, takeUntil} from 'rxjs/operators';\n\n/**\n * Represents a splitter, a visual element that allows the user to control the size of elements next to it.\n *\n * The splitter has a handle that the user can move depending on the orientation of the splitter.\n *\n * Note that this control neither does change the size of adjacent elements nor does it (re-)position itself, but emits the distance by\n * which the user has theoretically moved the splitter. You must subscribe to these events and change your layout accordingly.\n *\n * In the toolkit, {@link SciSashboxComponent} uses this splitter to divide a layout into several resizable sections.\n * Another use case would be a resizable sidebar panel.\n *\n * ### Usage:\n *\n * ```html\n * <sci-splitter (move)=\"onSplitterMove($event.distance)\"></sci-splitter>\n * ```\n *\n * ### Theme override:\n * The default style of the splitter is made up of shades of gray.\n * You can control the appearance by overriding the following CSS variables:\n *\n * - --sci-splitter-bgcolor: Sets the background color of the splitter.\n * - --sci-splitter-bgcolor_hover: Sets the background color of the splitter when hovering it.\n * - --sci-splitter-size: Sets the size of the splitter along the main axis.\n * - --sci-splitter-size_hover: Sets the size of the splitter along the main axis when hovering it.\n * - --sci-splitter-touch-target-size: Sets the touch target size to move the splitter (accessibility).\n * - --sci-splitter-cross-axis-size: Sets the splitter size along the cross axis.\n * - --sci-splitter-border-radius: Sets the border radius of the splitter.\n * - --sci-splitter-opacity_active: Sets the opacity of the splitter while the user moves the splitter.\n * - --sci-splitter-opacity_hover: Sets the opacity of the splitter when hovering it.\n *\n * Example:\n *\n * ```scss\n * sci-splitter {\n * --sci-splitter-bgcolor: black;\n * --sci-splitter-bgcolor_hover: black;\n * }\n * ```\n *\n * @dynamic ignore 'strictMetadataEmit' errors due to the usage of {@link Document} as ambient type for DI.\n */\n@Component({\n selector: 'sci-splitter',\n templateUrl: './splitter.component.html',\n styleUrls: ['./splitter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SciSplitterComponent implements OnInit, OnDestroy {\n\n private _destroy$ = new Subject<void>();\n\n /* @docs-private */\n @HostBinding('class.moving')\n public moving = false;\n\n @HostBinding('class.vertical')\n public get isVertical(): boolean {\n return !this.isHorizontal;\n }\n\n @HostBinding('class.horizontal')\n public get isHorizontal(): boolean {\n return this.orientation === 'horizontal';\n }\n\n /**\n * Controls whether to render a vertical or horizontal splitter.\n * By default, if not specified, renders a vertical splitter.\n */\n @Input()\n public orientation: 'vertical' | 'horizontal' = 'vertical';\n\n /**\n * Emits when starting to move the splitter.\n */\n @Output()\n public start = new EventEmitter<void>(); // eslint-disable-line @angular-eslint/no-output-native\n\n /**\n * Emits the distance in pixels when the splitter is moved.\n * The event is emitted outside of the Angular zone.\n */\n @Output()\n public move = new EventEmitter<SplitterMoveEvent>();\n\n /**\n * Emits when ending to move the splitter.\n */\n @Output()\n public end = new EventEmitter<void>(); // eslint-disable-line @angular-eslint/no-output-native\n\n /**\n * Emits when to reset the splitter position.\n */\n @Output()\n public reset = new EventEmitter<void>(); // eslint-disable-line @angular-eslint/no-output-native\n\n /* @docs-private */\n @HostBinding('style.cursor')\n public get splitterCursor(): string {\n return this.isVertical ? 'ew-resize' : 'ns-resize';\n }\n\n /* @docs-private */\n @ViewChild('touch_target', {static: true})\n public touchTargetElementRef!: ElementRef<HTMLElement>;\n\n constructor(private _zone: NgZone,\n private _cd: ChangeDetectorRef,\n @Inject(DOCUMENT) private _document: Document) {\n }\n\n /* @docs-private */\n public ngOnInit(): void {\n fromEvent(this.touchTargetElementRef.nativeElement, 'dblclick')\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => this.onReset());\n\n fromEvent<TouchEvent>(this.touchTargetElementRef.nativeElement, 'touchstart')\n .pipe(takeUntil(this._destroy$))\n .subscribe((event: TouchEvent) => this.onTouchStart(event));\n\n fromEvent<MouseEvent>(this.touchTargetElementRef.nativeElement, 'mousedown')\n .pipe(takeUntil(this._destroy$))\n .subscribe((event: MouseEvent) => this.onMouseDown(event));\n }\n\n private onReset(): void {\n this.reset.emit();\n }\n\n private onTouchStart(startEvent: TouchEvent): void {\n this.installMoveListener({\n startEvent: startEvent,\n moveEventNames: ['touchmove'],\n endEventNames: ['touchend', 'touchcancel'],\n eventPositionFn: (touchEvent: TouchEvent): EventPosition => {\n const touch: Touch = touchEvent.touches[0];\n if (this.isVertical) {\n return {screenPos: touch.screenX, clientPos: touch.clientX, pagePos: touch.pageX};\n }\n else {\n return {screenPos: touch.screenY, clientPos: touch.clientY, pagePos: touch.pageY};\n }\n },\n },\n );\n }\n\n private onMouseDown(startEvent: MouseEvent): void {\n if (startEvent.button !== 0) {\n return;\n }\n\n this.installMoveListener({\n startEvent: startEvent,\n moveEventNames: ['mousemove', 'sci-mousemove'],\n endEventNames: ['mouseup', 'sci-mouseup'],\n eventPositionFn: (mouseEvent: MouseEvent): EventPosition => {\n if (this.isVertical) {\n return {screenPos: mouseEvent.screenX, clientPos: mouseEvent.clientX, pagePos: mouseEvent.pageX};\n }\n else {\n return {screenPos: mouseEvent.screenY, clientPos: mouseEvent.clientY, pagePos: mouseEvent.pageY};\n }\n },\n },\n );\n }\n\n private installMoveListener<EVENT extends Event>(config: {startEvent: EVENT; moveEventNames: string[]; endEventNames: string[]; eventPositionFn: (event: EVENT) => EventPosition}): void {\n const startEvent = config.startEvent;\n\n startEvent.preventDefault();\n\n this._zone.runOutsideAngular(() => {\n // install listeners on document level to allow fast dragging the splitter.\n const moveEvent$ = merge(...config.moveEventNames.map(eventName => fromEvent<EVENT>(this._document, eventName)));\n const endEvent$ = merge(...config.endEventNames.map(eventName => fromEvent<EVENT>(this._document, eventName)));\n let lastClientPos = config.eventPositionFn(startEvent).clientPos;\n\n // Apply cursor on document level to prevent flickering while moving the splitter\n const oldDocumentCursor = this._document.body.style.cursor;\n this._document.body.style.cursor = this.splitterCursor;\n\n // Listen for 'move' events until stop moving the splitter\n moveEvent$\n .pipe(\n tapFirst(() => this._zone.run(() => {\n this.moving = true;\n this.start.next();\n this._cd.markForCheck();\n })),\n takeUntil(merge(endEvent$, this._destroy$)),\n )\n .subscribe((moveEvent: EVENT) => {\n const eventPos = config.eventPositionFn(moveEvent);\n const newClientPos = eventPos.clientPos;\n const distance = newClientPos - lastClientPos;\n lastClientPos = newClientPos;\n\n NgZone.assertNotInAngularZone();\n this.move.emit({distance, position: eventPos});\n });\n\n // Listen for 'end' events; call 'stop propagation' to not close overlays\n endEvent$\n .pipe(first(), takeUntil(this._destroy$))\n .subscribe((endEvent: EVENT) => {\n endEvent.stopPropagation();\n this._document.body.style.cursor = oldDocumentCursor;\n this.moving && this._zone.run(() => {\n this.end.next();\n this.moving = false;\n this._cd.markForCheck();\n });\n });\n });\n }\n\n /* @docs-private */\n public ngOnDestroy(): void {\n this._destroy$.next();\n }\n}\n\nexport interface EventPosition {\n clientPos: number;\n pagePos: number;\n screenPos: number;\n}\n\n/**\n * Event that is emitted when moving the splitter.\n */\nexport interface SplitterMoveEvent {\n /**\n * The distance in pixels by which the user has moved the splitter since the last emission.\n */\n distance: number;\n /**\n * The position where the mouse or touch event has occurred.\n */\n position: EventPosition;\n}\n","<div #touch_target class=\"touch-target\">\n <div class=\"handle\"></div>\n</div>\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SciSplitterComponent} from './splitter.component';\n\n/**\n * Provides a splitter, a visual element that allows the user to control the size of elements next to it.\n *\n * ### Usage:\n *\n * ```html\n * <sci-splitter (move)=\"onSplitterMove($event.distance)\"></sci-splitter>\n * ```\n */\n@NgModule({\n declarations: [\n SciSplitterComponent,\n ],\n imports: [\n CommonModule,\n ],\n exports: [\n SciSplitterComponent,\n ],\n})\nexport class SciSplitterModule {\n}\n","/*\n * Copyright (c) 2018-2019 Swiss Federal Railways\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\n/*\n * Secondary entrypoint: '@scion/components/splitter'\n *\n * @see https://github.com/ng-packagr/ng-packagr/blob/master/docs/secondary-entrypoints.md\n */\nexport * from './splitter.component';\nexport * from './splitter.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}