{"version":3,"sources":["node_modules/ngx-scrollbar/fesm2022/ngx-scrollbar-smooth-scroll.mjs","node_modules/ngx-scrollbar/fesm2022/ngx-scrollbar.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { InjectionToken, inject, NgZone, Injectable, ElementRef, Directive } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { coerceElement } from '@angular/cdk/coercion';\nimport { Subject, Observable, takeWhile, switchMap, merge, fromEvent, take, takeUntil, finalize } from 'rxjs';\n\n/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nconst NEWTON_ITERATIONS = 4;\nconst NEWTON_MIN_SLOPE = 0.001;\nconst SUBDIVISION_PRECISION = 0.0000001;\nconst SUBDIVISION_MAX_ITERATIONS = 10;\nconst kSplineTableSize = 11;\nconst kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\nconst float32ArraySupported = typeof Float32Array === 'function';\nfunction A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\nfunction B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n}\nfunction C(aA1) {\n return 3.0 * aA1;\n}\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n}\nfunction binarySubdivide(aX, aA, aB, mX1, mX2) {\n let currentX,\n currentT,\n i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n}\nfunction newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (let i = 0; i < NEWTON_ITERATIONS; ++i) {\n const currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n const currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\nfunction LinearEasing(x) {\n return x;\n}\nfunction bezier(mX1, mY1, mX2, mY2) {\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n if (mX1 === mY1 && mX2 === mY2) {\n return LinearEasing;\n }\n // Precompute samples table\n const sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n for (let i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n function getTForX(aX) {\n let intervalStart = 0.0;\n let currentSample = 1;\n const lastSample = kSplineTableSize - 1;\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n // Interpolate to provide an initial guess for t\n const dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n const guessForT = intervalStart + dist * kSampleStepSize;\n const initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n return function BezierEasing(x) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n}\nconst SMOOTH_SCROLL_OPTIONS = new InjectionToken('SMOOTH_SCROLL_OPTIONS');\nfunction provideSmoothScrollOptions(options) {\n return [{\n provide: SMOOTH_SCROLL_OPTIONS,\n useValue: options\n }];\n}\nlet SmoothScrollManager = /*#__PURE__*/(() => {\n class SmoothScrollManager {\n constructor() {\n this.document = inject(DOCUMENT);\n this.zone = inject(NgZone);\n // Default options\n this._defaultOptions = {\n duration: 468,\n easing: {\n x1: 0.42,\n y1: 0,\n x2: 0.58,\n y2: 1\n },\n ...inject(SMOOTH_SCROLL_OPTIONS, {\n optional: true\n })\n };\n // Keeps track of the ongoing SmoothScroll functions, so they can be handled in case of duplication.\n // Each scrolled element gets a destroyer stream which gets deleted immediately after it completes.\n // Purpose: If user called a scroll function again on the same element before the scrolls completes,\n // it cancels the ongoing scroll and starts a new one\n this.onGoingScrolls = new Map();\n }\n /**\n * Timing method\n */\n get now() {\n return this.document.defaultView.performance?.now?.bind(this.document.defaultView.performance) || Date.now;\n }\n /**\n * changes scroll position inside an element\n */\n scrollElement(el, x, y) {\n el.scrollLeft = x;\n el.scrollTop = y;\n }\n /**\n * Handles a given parameter of type HTMLElement, ElementRef or selector\n */\n getElement(el, parent) {\n if (typeof el === 'string') {\n return (parent || this.document).querySelector(el);\n }\n return coerceElement(el);\n }\n /**\n * Initializes a destroyer stream, re-initializes it if the element is already being scrolled\n */\n getScrollDestroyerRef(el) {\n if (this.onGoingScrolls.has(el)) {\n this.onGoingScrolls.get(el).next();\n }\n return this.onGoingScrolls.set(el, new Subject()).get(el);\n }\n /**\n * A function called recursively that, given a context, steps through scrolling\n */\n step(context) {\n return new Observable(subscriber => {\n let elapsed = (this.now() - context.startTime) / context.duration;\n // avoid elapsed times higher than one\n elapsed = elapsed > 1 ? 1 : elapsed;\n // apply easing to elapsed time\n const value = context.easing(elapsed);\n context.currentX = context.startX + (context.x - context.startX) * value;\n context.currentY = context.startY + (context.y - context.startY) * value;\n this.scrollElement(context.scrollable, context.currentX, context.currentY);\n // Proceed to the step\n requestAnimationFrame(() => {\n subscriber.next();\n subscriber.complete();\n });\n });\n }\n /**\n * Checks if smooth scroll has reached, cleans up the smooth scroll stream\n */\n isReached(context, destroyed) {\n if (context.currentX === context.x && context.currentY === context.y) {\n // IMPORTANT: Destroy the stream when scroll is reached ASAP!\n destroyed.next();\n return true;\n }\n return false;\n }\n /**\n * Scroll recursively until coordinates are reached\n * @param context\n * @param destroyed\n */\n scrolling(context, destroyed) {\n return this.step(context).pipe(\n // Continue while target coordinates hasn't reached yet\n takeWhile(() => !this.isReached(context, destroyed)), switchMap(() => this.scrolling(context, destroyed)));\n }\n /**\n * Deletes the destroyer function, runs if the smooth scroll has finished or interrupted\n */\n onScrollReached(el, resolve, destroyed) {\n destroyed.complete();\n this.onGoingScrolls.delete(el);\n this.zone.run(() => resolve());\n }\n /**\n * Terminates an ongoing smooth scroll\n */\n interrupted(el, destroyed) {\n return merge(fromEvent(el, 'wheel', {\n passive: true,\n capture: true\n }), fromEvent(el, 'touchmove', {\n passive: true,\n capture: true\n }), destroyed).pipe(take(1));\n }\n applyScrollToOptions(el, options) {\n if (!options.duration) {\n this.scrollElement(el, options.left, options.top);\n return Promise.resolve();\n }\n return new Promise(resolve => {\n this.zone.runOutsideAngular(() => {\n // Initialize a destroyer stream, reinitialize it if the element is already being scrolled\n const destroyed = this.getScrollDestroyerRef(el);\n const context = {\n scrollable: el,\n startTime: this.now(),\n startX: el.scrollLeft,\n startY: el.scrollTop,\n x: options.left == null ? el.scrollLeft : ~~options.left,\n y: options.top == null ? el.scrollTop : ~~options.top,\n duration: options.duration,\n easing: bezier(options.easing.x1, options.easing.y1, options.easing.x2, options.easing.y2)\n };\n this.scrolling(context, destroyed).pipe(\n // Continue until interrupted by another scroll (new smooth scroll / wheel / touchmove)\n takeUntil(this.interrupted(el, destroyed)),\n // Once finished, clean up the destroyer stream and resolve the promise\n finalize(() => this.onScrollReached(el, resolve, destroyed))).subscribe();\n });\n });\n }\n /**\n * Scrolls to the specified offsets. This is a normalized version of the browser's native scrollTo\n * method, since browsers are not consistent about what scrollLeft means in RTL. For this method\n * left and right always refer to the left and right side of the scrolling container irrespective\n * of the layout direction. start and end refer to left and right in an LTR context and vice-versa\n * in an RTL context.\n * @param scrollable element\n * @param customOptions specified the offsets to scroll to.\n */\n scrollTo(scrollable, customOptions) {\n const el = this.getElement(scrollable);\n const isRtl = getComputedStyle(el).direction === 'rtl';\n const options = {\n ...this._defaultOptions,\n ...customOptions,\n ...{\n // Rewrite start & end offsets as right or left offsets.\n left: customOptions.left == null ? isRtl ? customOptions.end : customOptions.start : customOptions.left,\n right: customOptions.right == null ? isRtl ? customOptions.start : customOptions.end : customOptions.right\n }\n };\n // Rewrite the bottom offset as a top offset.\n if (options.bottom != null) {\n options.top = el.scrollHeight - el.clientHeight - options.bottom;\n }\n // Rewrite the right offset as a left offset.\n if (isRtl) {\n if (options.left != null) {\n options.right = el.scrollWidth - el.clientWidth - options.left;\n }\n options.left = options.right ? -options.right : options.right;\n } else {\n if (options.right != null) {\n options.left = el.scrollWidth - el.clientWidth - options.right;\n }\n }\n return this.applyScrollToOptions(el, options);\n }\n /**\n * Scroll to element by reference or selector\n */\n scrollToElement(scrollable, target, customOptions = {}) {\n const scrollableEl = this.getElement(scrollable);\n const targetEl = this.getElement(target, scrollableEl);\n if (targetEl && scrollableEl) {\n const scrollableRect = scrollableEl.getBoundingClientRect();\n const targetRect = targetEl.getBoundingClientRect();\n const options = {\n ...customOptions,\n left: targetRect.left + scrollableEl.scrollLeft - scrollableRect.left + (customOptions.left || 0),\n top: targetRect.top + scrollableEl.scrollTop - scrollableRect.top + (customOptions.top || 0)\n };\n return this.scrollTo(scrollableEl, options);\n }\n return Promise.resolve();\n }\n static {\n this.ɵfac = function SmoothScrollManager_Factory(t) {\n return new (t || SmoothScrollManager)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SmoothScrollManager,\n factory: SmoothScrollManager.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return SmoothScrollManager;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet SmoothScroll = /*#__PURE__*/(() => {\n class SmoothScroll {\n constructor() {\n this.smoothScroll = inject(SmoothScrollManager);\n this.element = inject(ElementRef);\n }\n scrollTo(options) {\n return this.smoothScroll.scrollTo(this.element, options);\n }\n scrollToElement(target, options) {\n return this.smoothScroll.scrollToElement(this.element, target, options);\n }\n static {\n this.ɵfac = function SmoothScroll_Factory(t) {\n return new (t || SmoothScroll)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: SmoothScroll,\n selectors: [[\"\", \"smoothScroll\", \"\"]],\n exportAs: [\"smoothScroll\"],\n standalone: true\n });\n }\n }\n return SmoothScroll;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { SMOOTH_SCROLL_OPTIONS, SmoothScroll, SmoothScrollManager, provideSmoothScrollOptions };\n","import * as i0 from '@angular/core';\nimport { inject, ElementRef, Directive, InjectionToken, signal, NgZone, Injector, input, booleanAttribute, numberAttribute, computed, EventEmitter, runInInjectionContext, effect, Input, Output, PLATFORM_ID, Injectable, ContentChild, Component, ChangeDetectionStrategy, ViewChild, Renderer2, ApplicationRef, createComponent, NgModule } from '@angular/core';\nimport { Observable, throttleTime, tap, map, fromEvent, switchMap, of, takeUntil, merge, startWith, delay, EMPTY, takeWhile, interval, animationFrameScheduler } from 'rxjs';\nimport { Platform } from '@angular/cdk/platform';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { SmoothScrollManager } from 'ngx-scrollbar/smooth-scroll';\nimport { fromPromise } from 'rxjs/internal/observable/innerFrom';\nimport { isPlatformBrowser, DOCUMENT } from '@angular/common';\nconst _c0 = [\"scrollbarButton\", \"\"];\nfunction ScrollbarY_Conditional_5_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"button\", 5)(1, \"button\", 6);\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵclassMapInterpolate1(\"ng-scrollbar-button \", ctx_r0.cmp.buttonClass, \"\");\n i0.ɵɵadvance();\n i0.ɵɵclassMapInterpolate1(\"ng-scrollbar-button \", ctx_r0.cmp.buttonClass, \"\");\n }\n}\nfunction ScrollbarX_Conditional_5_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"button\", 5)(1, \"button\", 6);\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵclassMapInterpolate1(\"ng-scrollbar-button \", ctx_r0.cmp.buttonClass, \"\");\n i0.ɵɵadvance();\n i0.ɵɵclassMapInterpolate1(\"ng-scrollbar-button \", ctx_r0.cmp.buttonClass, \"\");\n }\n}\nconst _c1 = \"[_nghost-%COMP%]{position:absolute;inset:0;pointer-events:none;min-width:calc(var(--viewport-width) * 1px);min-height:calc(var(--viewport-height) * 1px)}.ng-scrollbar-sticky[_ngcontent-%COMP%]{top:calc(var(--_scrollbar-wrapper-top) * 1px);left:calc(var(--_scrollbar-wrapper-left) * 1px);right:calc(var(--_scrollbar-wrapper-right) * 1px);height:calc(var(--_scrollbar-wrapper-height) * 1px);width:calc(var(--_scrollbar-wrapper-width) * 1px);position:sticky;z-index:100;opacity:var(--_scrollbar-hover-opacity);transition:var(--_scrollbar-opacity-transition)}.ng-scrollbar-track-wrapper[_ngcontent-%COMP%]{touch-action:none;-webkit-user-select:none;user-select:none;top:var(--_scrollbar-track-top);bottom:var(--_scrollbar-track-bottom);right:var(--_scrollbar-track-right);left:var(--_scrollbar-track-left);pointer-events:var(--_scrollbar-pointer-events);transition:var(--scrollbar-track-wrapper-transition);position:absolute;overflow:hidden;display:flex;place-items:center}.ng-scrollbar-track[_ngcontent-%COMP%]{position:relative;width:100%;height:100%;background-color:var(--scrollbar-track-color);border-radius:var(--scrollbar-border-radius);cursor:default;z-index:1;order:2}.ng-scrollbar-thumb[_ngcontent-%COMP%]{box-sizing:border-box;position:absolute;transition:var(--scrollbar-thumb-transition);border-radius:var(--scrollbar-border-radius);height:var(--_thumb-height);width:var(--_thumb-width);animation-name:_ngcontent-%COMP%_scrollbarThumbAnimation;animation-duration:1ms;animation-timing-function:linear}@keyframes _ngcontent-%COMP%_scrollbarThumbAnimation{0%{translate:var(--_scrollbar-thumb-transform-from)}to{translate:var(--_scrollbar-thumb-transform-to)}}\";\nfunction Scrollbars_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"scrollbar-y\");\n }\n}\nfunction Scrollbars_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"scrollbar-x\");\n }\n}\nconst _c2 = [\"contentWrapper\"];\nconst _c3 = [\"*\"];\nconst _c4 = [\"externalViewport\", \"\"];\nconst _c5 = \"[_nghost-%COMP%]{display:block;position:relative;max-height:100%;max-width:100%;--scrollbar-border-radius: 0px;--scrollbar-thickness: 5;--scrollbar-offset: 0;--scrollbar-track-wrapper-transition: width 60ms linear, height 60ms linear;--scrollbar-track-color: transparent;--scrollbar-thumb-color: rgb(0 0 0 / 20%);--scrollbar-thumb-hover-color: var(--scrollbar-thumb-color);--scrollbar-hover-thickness: var(--scrollbar-thickness);--scrollbar-thumb-transition: none;--scrollbar-thumb-min-size: 20;--scrollbar-button-color: var(--scrollbar-thumb-color);--scrollbar-button-hover-color: var(--scrollbar-button-color);--scrollbar-button-active-color: var(--scrollbar-button-hover-color);--scrollbar-button-fill: white;--scrollbar-button-hover-fill: var(--scrollbar-button-fill);--scrollbar-button-active-fill: var(--scrollbar-button-hover-fill);--scrollbar-hover-opacity-transition-enter-duration: 0;--scrollbar-hover-opacity-transition-leave-duration: .4s;--scrollbar-hover-opacity-transition-leave-delay: 1s;--scrollbar-overscroll-behavior: initial;--scrollbar-mobile-overscroll-behavior: none;--_scrollbar-thickness: calc(var(--scrollbar-thickness) + var(--scrollbar-offset) * 2);--_scrollbar-pointer-events: auto;--_scrollbar-offset-px: calc(var(--scrollbar-offset) * 1px);--_scrollbar-thickness-px: calc(var(--scrollbar-thickness) * 1px);--_scrollbar-hover-thickness-px: calc(var(--scrollbar-hover-thickness) * 1px);--_viewport-padding-top: 0;--_viewport-padding-bottom: 0;--_viewport-padding-left: 0;--_viewport-padding-right: 0;--_horizontal-thumb-display: block;--_vertical-thumb-display: block;--_viewport-overflow: auto;--_thumb-x-color: var(--scrollbar-thumb-color);--_thumb-y-color: var(--scrollbar-thumb-color);--_track-y-thickness: var(--_scrollbar-thickness-px);--_track-x-thickness: var(--_scrollbar-thickness-px);--_viewport-overscroll-behavior: var(--scrollbar-overscroll-behavior);--_scrollbar-content-width: fit-content}[_nghost-%COMP%]{--_vertical-top: var(--_scrollbar-offset-px);--_vertical-bottom: var(--_scrollbar-offset-px);--_horizontal-left: var(--_scrollbar-offset-px);--_horizontal-right: var(--_scrollbar-offset-px);--_horizontal-top: initial;--_horizontal-bottom: var(--_scrollbar-offset-px);--_scrollbar-wrapper-x-top: calc(var(--viewport-height) - var(--_scrollbar-thickness));--reached-offset: 1px;--reached-offset-top: var(--reached-offset);--reached-offset-bottom: var(--reached-offset);--reached-offset-start: var(--reached-offset);--reached-offset-end: var(--reached-offset);--dropped-offset: 1px;--dropped-offset-top: var(--dropped-offset);--dropped-offset-bottom: var(--dropped-offset);--dropped-offset-start: var(--dropped-offset);--dropped-offset-end: var(--dropped-offset);--_viewport_scroll-timeline: unset;--_animation-timeline-y: unset;--_scrollbar-y-thumb-transform-to-value: unset;--_scrollbar-x-thumb-transform-to-value: unset;--_scrollbar-thumb-transform-from: unset;--_scrollbar-thumb-transform-to: unset}.ng-scrollbar-external-viewport[_nghost-%COMP%] .ng-scroll-viewport{min-height:100%;min-width:100%;height:100%;max-height:100%;max-width:100%}.ng-scroll-viewport[_nghost-%COMP%], .ng-scrollbar-external-viewport[_nghost-%COMP%] .ng-scroll-viewport{position:relative;overflow:var(--_viewport-overflow);scroll-timeline:var(--_viewport_scroll-timeline);box-sizing:border-box!important;-webkit-overflow-scrolling:touch;will-change:scroll-position;-webkit-user-select:var(--_viewport-user-select);user-select:var(--_viewport-user-select);overscroll-behavior:var(--_viewport-overscroll-behavior)}.ng-scroll-viewport[_nghost-%COMP%] > .ng-scroll-content[_ngcontent-%COMP%], .ng-scrollbar-external-viewport[_nghost-%COMP%] .ng-scroll-viewport>.ng-scroll-content{width:var(--_scrollbar-content-width);z-index:1;min-width:100%;min-height:100%;contain:content;padding:var(--_viewport-padding-top, 0) var(--_viewport-padding-right, 0) var(--_viewport-padding-bottom, 0) var(--_viewport-padding-left, 0)}.ng-scroll-viewport[_nghost-%COMP%], .ng-scrollbar-external-viewport[_nghost-%COMP%] .ng-scroll-viewport{scrollbar-width:none!important}.ng-scroll-viewport[_nghost-%COMP%]::-webkit-scrollbar, .ng-scrollbar-external-viewport[_nghost-%COMP%] .ng-scroll-viewport::-webkit-scrollbar{display:none!important}[position=invertX][_nghost-%COMP%], [position=invertAll][_nghost-%COMP%]{--_horizontal-top: var(--_scrollbar-offset-px);--_horizontal-bottom: initial;--_scrollbar-wrapper-x-top: 0}[dir=ltr][_nghost-%COMP%]{--_scrollbar-wrapper-y-right: initial;--_vertical-right: var(--_scrollbar-offset-px);--_vertical-left: initial;--_scrollbar-wrapper-y-left: calc(var(--viewport-width) - var(--_scrollbar-thickness))}[dir=ltr][position=invertY][_nghost-%COMP%], [dir=ltr][position=invertAll][_nghost-%COMP%]{--_vertical-left: var(--_scrollbar-offset-px);--_vertical-right: initial;--_scrollbar-wrapper-y-left: 0}[dir=rtl][_nghost-%COMP%]{--_scrollbar-wrapper-y-left: initial;--_vertical-left: var(--_scrollbar-offset-px);--_vertical-right: initial;--_scrollbar-wrapper-y-right: calc(var(--viewport-width) - var(--_scrollbar-thickness))}[dir=rtl][position=invertY][_nghost-%COMP%], [dir=rtl][position=invertAll][_nghost-%COMP%]{--_vertical-right: var(--_scrollbar-offset-px);--_vertical-left: initial;--_scrollbar-wrapper-y-right: 0}[verticalUsed=true][horizontalUsed=true][_nghost-%COMP%]{--_scrollbar-thickness-margin: calc(var(--scrollbar-thickness) + var(--scrollbar-offset) * 3);--_scrollbar-thickness-margin-px: calc(var(--_scrollbar-thickness-margin) * 1px)}[horizontalUsed=true][_nghost-%COMP%]{--_vertical-top: var(--_scrollbar-offset-px);--_vertical-bottom: var(--_scrollbar-thickness-margin-px)}[horizontalUsed=true][position=invertX][_nghost-%COMP%], [horizontalUsed=true][position=invertAll][_nghost-%COMP%]{--_vertical-top: var(--_scrollbar-thickness-margin-px);--_vertical-bottom: var(--_scrollbar-offset-px)}[verticalUsed=true][dir=ltr][_nghost-%COMP%]{--_horizontal-left: var(--_scrollbar-offset-px);--_horizontal-right: var(--_scrollbar-thickness-margin-px)}[verticalUsed=true][dir=rtl][_nghost-%COMP%]{--_horizontal-left: var(--_scrollbar-thickness-margin-px);--_horizontal-right: var(--_scrollbar-offset-px)}[verticalUsed=true][position=invertY][dir=ltr][_nghost-%COMP%], [verticalUsed=true][position=invertAll][dir=ltr][_nghost-%COMP%]{--_horizontal-left: var(--_scrollbar-thickness-margin-px);--_horizontal-right: var(--_scrollbar-offset-px)}[verticalUsed=true][position=invertY][dir=rtl][_nghost-%COMP%], [verticalUsed=true][position=invertAll][dir=rtl][_nghost-%COMP%]{--_horizontal-left: var(--_scrollbar-offset-px);--_horizontal-right: var(--_scrollbar-thickness-margin-px)}[appearance=native][verticalUsed=true][dir=ltr][_nghost-%COMP%]{--_viewport-padding-left: 0;--_viewport-padding-right: calc(var(--_scrollbar-thickness) * 1px)}[appearance=native][verticalUsed=true][dir=rtl][_nghost-%COMP%]{--_viewport-padding-left: calc(var(--_scrollbar-thickness) * 1px);--_viewport-padding-right: 0}[appearance=native][verticalUsed=true][position=invertY][dir=ltr][_nghost-%COMP%], [appearance=native][verticalUsed=true][position=invertAll][dir=ltr][_nghost-%COMP%]{--_viewport-padding-left: calc(var(--_scrollbar-thickness) * 1px);--_viewport-padding-right: 0}[appearance=native][verticalUsed=true][position=invertY][dir=rtl][_nghost-%COMP%], [appearance=native][verticalUsed=true][position=invertAll][dir=rtl][_nghost-%COMP%]{--_viewport-padding-left: 0;--_viewport-padding-right: calc(var(--_scrollbar-thickness) * 1px)}[appearance=native][horizontalUsed=true][_nghost-%COMP%]{--_viewport-padding-top: 0;--_viewport-padding-bottom: calc(var(--_scrollbar-thickness) * 1px)}[appearance=native][horizontalUsed=true][position=invertX][_nghost-%COMP%], [appearance=native][horizontalUsed=true][position=invertAll][_nghost-%COMP%]{--_viewport-padding-top: calc(var(--_scrollbar-thickness) * 1px);--_viewport-padding-bottom: 0}[visibility=hover][_nghost-%COMP%]{--_scrollbar-hover-opacity: 0;--_scrollbar-opacity-transition: opacity var(--scrollbar-hover-opacity-transition-leave-duration) var(--scrollbar-hover-opacity-transition-leave-delay)}[visibility=hover][_nghost-%COMP%]:hover, [visibility=hover][_nghost-%COMP%]:active, [visibility=hover][_nghost-%COMP%]:focus{--_scrollbar-hover-opacity: 1;--_scrollbar-opacity-transition: opacity var(--scrollbar-hover-opacity-transition-enter-duration)}[dir=ltr][_nghost-%COMP%] .scroll-reached-trigger-element[trigger=start], [dir=ltr][_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=start]{left:0;right:unset}[dir=ltr][_nghost-%COMP%] .scroll-reached-trigger-element[trigger=end], [dir=ltr][_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=end]{right:0;left:unset}[dir=rtl][_nghost-%COMP%] .scroll-reached-trigger-element[trigger=start], [dir=rtl][_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=start]{right:0;left:unset}[dir=rtl][_nghost-%COMP%] .scroll-reached-trigger-element[trigger=end], [dir=rtl][_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=end]{left:0;right:unset}[_nghost-%COMP%] .ng-scroll-reached-wrapper, [_nghost-%COMP%] .ng-scroll-dropped-wrapper, [_nghost-%COMP%] .scroll-reached-trigger-element, [_nghost-%COMP%] .scroll-dropped-trigger-element{position:absolute;-webkit-user-select:none;user-select:none;pointer-events:none;z-index:-9999}[_nghost-%COMP%] .ng-scroll-reached-wrapper, [_nghost-%COMP%] .ng-scroll-dropped-wrapper{visibility:hidden;inset:0;min-width:calc(var(--viewport-width) * 1px);min-height:calc(var(--viewport-height) * 1px)}[_nghost-%COMP%] [isHorizontallyScrollable=false] .scroll-reached-trigger-element[trigger=end], [_nghost-%COMP%] [isHorizontallyScrollable=false] .scroll-dropped-trigger-element[trigger=end]{display:none}[_nghost-%COMP%] [isVerticallyScrollable=false] .scroll-reached-trigger-element[trigger=bottom], [_nghost-%COMP%] [isVerticallyScrollable=false] .scroll-dropped-trigger-element[trigger=bottom]{display:none}[_nghost-%COMP%] .scroll-reached-trigger-element{background:red}[_nghost-%COMP%] .scroll-reached-trigger-element[trigger=top], [_nghost-%COMP%] .scroll-reached-trigger-element[trigger=bottom]{left:0;right:0}[_nghost-%COMP%] .scroll-reached-trigger-element[trigger=start], [_nghost-%COMP%] .scroll-reached-trigger-element[trigger=end]{top:0;bottom:0}[_nghost-%COMP%] .scroll-reached-trigger-element[trigger=top]{top:0;height:var(--reached-offset-top)}[_nghost-%COMP%] .scroll-reached-trigger-element[trigger=bottom]{bottom:0;height:var(--reached-offset-bottom)}[_nghost-%COMP%] .scroll-reached-trigger-element[trigger=start]{width:var(--reached-offset-start)}[_nghost-%COMP%] .scroll-reached-trigger-element[trigger=end]{width:var(--reached-offset-end)}[_nghost-%COMP%] .scroll-dropped-trigger-element[_ngcontent-%COMP%]{background:#00f}[_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=top][_ngcontent-%COMP%], [_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=bottom][_ngcontent-%COMP%]{left:0;right:0}[_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=start][_ngcontent-%COMP%], [_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=end][_ngcontent-%COMP%]{top:0;bottom:0}[_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=top][_ngcontent-%COMP%]{top:0;height:var(--dropped-offset-top)}[_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=bottom][_ngcontent-%COMP%]{bottom:0;height:var(--dropped-offset-bottom)}[_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=start][_ngcontent-%COMP%]{width:var(--dropped-offset-start)}[_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=end][_ngcontent-%COMP%]{width:var(--dropped-offset-end)}[verticalUsed=true][_nghost-%COMP%]{--_timeline-scope: --scrollerY;--_animation-timeline-y: --scrollerY;--_viewport_scroll-timeline: --scrollerY y;--_scrollbar-y-thumb-transform-to-value: calc(var(--track-y-length) - var(--thumb-y-length))}[horizontalUsed=true][_nghost-%COMP%]{--_timeline-scope: --scrollerX;--_animation-timeline-x: --scrollerX;--_viewport_scroll-timeline: --scrollerX x;--_scrollbar-x-thumb-transform-to-value: calc(var(--track-x-length) - var(--thumb-x-length))}[verticalUsed=true][horizontalUsed=true][_nghost-%COMP%]{--_timeline-scope: --scrollerX, --scrollerY;--_viewport_scroll-timeline: --scrollerX x, --scrollerY y}[orientation=vertical][_nghost-%COMP%]{--_viewport-overflow: hidden auto;--_scrollbar-content-width: unset}[orientation=horizontal][_nghost-%COMP%]{--_viewport-overflow: auto hidden}[disableInteraction=true][_nghost-%COMP%]{--_scrollbar-pointer-events: none}[isVerticallyScrollable=false][_nghost-%COMP%]{--_vertical-thumb-display: none}[isHorizontallyScrollable=false][_nghost-%COMP%]{--_horizontal-thumb-display: none}[dragging=x][_nghost-%COMP%], [dragging=y][_nghost-%COMP%]{--_viewport-user-select: none}[horizontalUsed=true][_nghost-%COMP%]{--thumb-x-length: max(calc(var(--viewport-width) * var(--track-x-length) / var(--content-width)), var(--scrollbar-thumb-min-size))}[verticalUsed=true][_nghost-%COMP%]{--thumb-y-length: max(calc(var(--viewport-height) * var(--track-y-length) / var(--content-height)), var(--scrollbar-thumb-min-size))}[dragging=x][_nghost-%COMP%]{--_track-x-thickness: calc(var(--scrollbar-hover-thickness) * 1px);--_thumb-x-color: var(--scrollbar-thumb-hover-color)}[dragging=y][_nghost-%COMP%]{--_track-y-thickness: calc(var(--scrollbar-hover-thickness) * 1px);--_thumb-y-color: var(--scrollbar-thumb-hover-color)}[mobile=true][_nghost-%COMP%]{--_viewport-overscroll-behavior: var(--scrollbar-mobile-overscroll-behavior)}\";\nlet ScrollViewport = /*#__PURE__*/(() => {\n class ScrollViewport {\n constructor() {\n this.nativeElement = inject(ElementRef).nativeElement;\n }\n static {\n this.ɵfac = function ScrollViewport_Factory(t) {\n return new (t || ScrollViewport)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: ScrollViewport,\n selectors: [[\"\", \"scrollViewport\", \"\"]],\n standalone: true\n });\n }\n }\n return ScrollViewport;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nvar ScrollbarUpdateReason = /*#__PURE__*/function (ScrollbarUpdateReason) {\n ScrollbarUpdateReason[\"AfterInit\"] = \"AfterInit\";\n ScrollbarUpdateReason[\"Resized\"] = \"ResizeObserver\";\n return ScrollbarUpdateReason;\n}(ScrollbarUpdateReason || {});\nconst NG_SCROLLBAR_OPTIONS = new InjectionToken('NG_SCROLLBAR_OPTIONS');\nconst NG_SCROLLBAR_POLYFILL = new InjectionToken('NG_SCROLLBAR_POLYFILL');\nfunction resizeObserver({\n element,\n contentWrapper,\n throttleDuration\n}) {\n // The first time the observer is triggered as soon as the element is observed,\n // So we need to differentiate the reason of the event fired\n let reason = ScrollbarUpdateReason.AfterInit;\n let resizeObserver;\n const stream = new Observable(observer => {\n resizeObserver = new ResizeObserver(() => {\n observer.next(reason);\n // After first init event, mark the reason to be a resize from now on.\n reason = ScrollbarUpdateReason.Resized;\n });\n resizeObserver.observe(element);\n // If a content element has a supporting content scrollbars, observe it!\n if (contentWrapper) {\n resizeObserver.observe(contentWrapper);\n }\n return () => {\n resizeObserver?.disconnect();\n };\n });\n return throttleDuration ? stream.pipe(throttleTime(throttleDuration, null, {\n leading: true,\n trailing: true\n })) : stream;\n}\nfunction mutationObserver(element, throttleDuration) {\n let mutationObserver;\n const stream = new Observable(observer => {\n mutationObserver = new MutationObserver(() => {\n observer.next();\n });\n mutationObserver.observe(element, {\n childList: true,\n subtree: true\n });\n return () => {\n mutationObserver?.disconnect();\n };\n });\n return stream.pipe(throttleTime(throttleDuration, null, {\n leading: true,\n trailing: true\n }));\n}\nfunction preventSelection(doc) {\n return tap(() => doc.onselectstart = () => false);\n}\nfunction enableSelection(doc) {\n return tap(() => doc.onselectstart = null);\n}\nfunction stopPropagation() {\n return tap(e => {\n // Have to prevent default to avoid unexpected movement whe you grab object beneath scrollbar #476\n // https://github.com/MurhafSousli/ngx-scrollbar/issues/476\n e.preventDefault();\n e.stopPropagation();\n });\n}\nvar ViewportClasses = /*#__PURE__*/function (ViewportClasses) {\n ViewportClasses[\"Viewport\"] = \"ng-scroll-viewport\";\n ViewportClasses[\"Content\"] = \"ng-scroll-content\";\n return ViewportClasses;\n}(ViewportClasses || {});\n/**\n * Class representing a viewport adapter.\n * Provides methods and properties to interact with a viewport and its content.\n */\nclass ViewportAdapter {\n constructor() {\n /*\n * A signal that indicates when viewport adapter is initialized\n */\n this.initialized = signal(false);\n }\n /** Viewport clientHeight */\n get offsetHeight() {\n return this.nativeElement.offsetHeight;\n }\n /** Viewport clientWidth */\n get offsetWidth() {\n return this.nativeElement.offsetWidth;\n }\n /** Viewport scrollTop */\n get scrollTop() {\n return this.nativeElement.scrollTop;\n }\n /** Viewport scrollLeft */\n get scrollLeft() {\n return this.nativeElement.scrollLeft;\n }\n /** Content height */\n get contentHeight() {\n return this.contentWrapperElement.offsetHeight;\n }\n /** Content width */\n get contentWidth() {\n return this.contentWrapperElement.offsetWidth;\n }\n /** The remaining vertical scrollable distance. */\n get scrollMaxX() {\n return this.contentWidth - this.offsetWidth;\n }\n /** The vertical remaining scrollable distance */\n get scrollMaxY() {\n return this.contentHeight - this.offsetHeight;\n }\n /**\n * Initialize viewport\n */\n init(viewportElement, contentElement, spacerElement) {\n // Add viewport class\n viewportElement.classList.add(ViewportClasses.Viewport);\n this.nativeElement = viewportElement;\n // Add content wrapper class\n contentElement.classList.add(ViewportClasses.Content);\n // When integrating the scrollbar with virtual scroll, the content wrapper will have fake size,\n // and a spacer element will have the real size\n // Therefore, if spaceElement is provided, it will be observed instead of the content wrapper\n if (spacerElement) {\n // Set relative position on the spacer element to enable the functionality of sticky for the scrollbars\n spacerElement.style.position = 'relative';\n this.contentWrapperElement = spacerElement;\n } else {\n // If spacer is not provided, set it as the content wrapper\n this.contentWrapperElement = contentElement;\n }\n this.initialized.set(true);\n }\n /**\n * Scrolls the viewport vertically to the specified value.\n */\n scrollYTo(value) {\n this.nativeElement.scrollTop = value;\n }\n /**\n * Scrolls the viewport horizontally to the specified value.\n */\n scrollXTo(value) {\n this.nativeElement.scrollLeft = value;\n }\n}\n\n/**\n * Injection token that can be used to query for a `NgScrollbar`.\n * Used primarily to avoid circular imports.\n */\nconst NG_SCROLLBAR = new InjectionToken('NG_SCROLLBAR');\nconst defaultOptions = {\n trackClass: '',\n thumbClass: '',\n buttonClass: '',\n orientation: 'auto',\n appearance: 'native',\n visibility: 'native',\n position: 'native',\n trackScrollDuration: 50,\n sensorThrottleTime: 0,\n disableSensor: false,\n disableInteraction: false,\n buttons: false\n};\nlet NgScrollbarCore = /*#__PURE__*/(() => {\n class NgScrollbarCore {\n constructor() {\n /** Injected options */\n this.injectedOptions = inject(NG_SCROLLBAR_OPTIONS, {\n optional: true\n });\n /** Combine injected option with default options */\n this.options = this.injectedOptions ? {\n ...defaultOptions,\n ...this.injectedOptions\n } : defaultOptions;\n this.zone = inject(NgZone);\n this.platform = inject(Platform);\n this.injector = inject(Injector);\n /** A flag that indicates if the platform is mobile */\n this.isMobile = this.platform.IOS || this.platform.ANDROID;\n this.dir = inject(Directionality);\n this.smoothScroll = inject(SmoothScrollManager);\n this.nativeElement = inject(ElementRef).nativeElement;\n /**\n * Indicates when scrollbar thumb is being dragged\n */\n this.dragging = signal('none');\n /**\n * Sets the supported scroll track of the viewport, there are 3 options:\n *\n * - `vertical` Use both vertical and horizontal scrollbar\n * - `horizontal` Use both vertical and horizontal scrollbar\n * - `auto` Use both vertical and horizontal scrollbar\n */\n this.orientation = input(this.options.orientation);\n /**\n * When to show the scrollbar, and there are 3 options:\n *\n * - `native` (default) Scrollbar will be visible when viewport is scrollable like with native scrollbar\n * - `hover` Scrollbars are hidden by default, only visible on scrolling or hovering\n * - `always` Scrollbars are always shown even if the viewport is not scrollable\n */\n this.visibility = input(this.options.visibility);\n /** Show scrollbar buttons */\n this.buttons = input(this.options.buttons, {\n transform: booleanAttribute\n });\n /** Disables scrollbar interaction like dragging thumb and jumping by track click */\n this.disableInteraction = input(this.options.disableInteraction, {\n transform: booleanAttribute\n });\n /** Whether ResizeObserver is disabled */\n this.disableSensor = input(this.options.disableSensor, {\n transform: booleanAttribute\n });\n /** Throttle interval for detecting changes via ResizeObserver */\n this.sensorThrottleTime = input(this.options.sensorThrottleTime, {\n transform: numberAttribute\n });\n this.viewportDimension = signal({\n contentHeight: 0,\n contentWidth: 0,\n offsetHeight: 0,\n offsetWidth: 0\n });\n this.state = computed(() => {\n let verticalUsed = false;\n let horizontalUsed = false;\n let isVerticallyScrollable = false;\n let isHorizontallyScrollable = false;\n const orientation = this.orientation();\n const visibility = this.visibility();\n const viewport = this.viewportDimension();\n // Check if vertical scrollbar should be displayed\n if (orientation === 'auto' || orientation === 'vertical') {\n isVerticallyScrollable = viewport.contentHeight > viewport.offsetHeight;\n verticalUsed = visibility === 'visible' || isVerticallyScrollable;\n }\n // Check if horizontal scrollbar should be displayed\n if (orientation === 'auto' || orientation === 'horizontal') {\n isHorizontallyScrollable = viewport.contentWidth > viewport.offsetWidth;\n horizontalUsed = visibility === 'visible' || isHorizontallyScrollable;\n }\n return {\n verticalUsed,\n horizontalUsed,\n isVerticallyScrollable,\n isHorizontallyScrollable\n };\n });\n this.isVerticallyScrollable = computed(() => this.state().isVerticallyScrollable);\n this.isHorizontallyScrollable = computed(() => this.state().isHorizontallyScrollable);\n this.verticalUsed = computed(() => this.state().verticalUsed);\n this.horizontalUsed = computed(() => this.state().horizontalUsed);\n /** Scroll duration when the scroll track is clicked */\n this.trackScrollDuration = this.options.trackScrollDuration;\n /**\n * Sets the appearance of the scrollbar, there are 2 options:\n *\n * - `native` (default) scrollbar space will be reserved just like with native scrollbar.\n * - `compact` scrollbar doesn't reserve any space, they are placed over the viewport.\n */\n this.appearance = this.options.appearance;\n /**\n * Sets the position of each scrollbar, there are 4 options:\n *\n * - `native` (Default) Use the default position like in native scrollbar.\n * - `invertY` Inverts vertical scrollbar position\n * - `invertX` Inverts Horizontal scrollbar position\n * - `invertAll` Inverts both scrollbar positions\n */\n this.position = this.options.position;\n /** A class forwarded to the scrollbar track element */\n this.trackClass = this.options.trackClass;\n /** A class forwarded to the scrollbar thumb element */\n this.thumbClass = this.options.thumbClass;\n /** A class forwarded to the scrollbar button element */\n this.buttonClass = this.options.thumbClass;\n /** Steam that emits when scrollbar is initialized */\n this.afterInit = new EventEmitter();\n /** Steam that emits when scrollbar is updated */\n this.afterUpdate = new EventEmitter();\n /** Viewport adapter instance */\n this.viewport = new ViewportAdapter();\n }\n ngOnInit() {\n runInInjectionContext(this.injector, () => {\n // The direction signal cannot be initialized in the constructor\n // Because it initially returns 'ltr' even if dir.value is 'rtl`\n this.direction = toSignal(this.dir.change.pipe(map(() => this.dir.value)), {\n initialValue: this.dir.value\n });\n effect(onCleanup => {\n // Check whether sensor should be enabled\n if (this.disableSensor()) {\n // If sensor is disabled update manually\n this.sizeChangeSub?.unsubscribe();\n } else {\n if (this.platform.isBrowser && this.viewport.initialized()) {\n this.sizeChangeSub?.unsubscribe();\n this.zone.runOutsideAngular(() => {\n this.sizeChangeSub = resizeObserver({\n element: this.viewport.nativeElement,\n contentWrapper: this.viewport.contentWrapperElement,\n throttleDuration: this.sensorThrottleTime()\n }).pipe(tap(reason => this.update(reason))).subscribe();\n });\n }\n }\n onCleanup(() => this.sizeChangeSub?.unsubscribe());\n });\n });\n }\n ngAfterViewInit() {\n // If sensor is disabled, update to evaluate the state\n if (this.platform.isBrowser && this.disableSensor()) {\n // In case of 3rd party library, need to wait for content to be rendered\n requestAnimationFrame(() => {\n this.update(ScrollbarUpdateReason.AfterInit);\n });\n }\n }\n /**\n * Update local state and the internal scrollbar controls\n */\n update(reason) {\n this.updateCSSVariables();\n this.zone.run(() => {\n this.viewportDimension.set({\n contentHeight: this.viewport.contentHeight,\n contentWidth: this.viewport.contentWidth,\n offsetHeight: this.viewport.offsetHeight,\n offsetWidth: this.viewport.offsetWidth\n });\n if (reason === ScrollbarUpdateReason.AfterInit) {\n this.afterInit.emit();\n } else {\n this.afterUpdate.emit();\n }\n });\n }\n /**\n * Smooth scroll functions\n */\n scrollTo(options) {\n return this.smoothScroll.scrollTo(this.viewport.nativeElement, options);\n }\n /**\n * Scroll to element by reference or selector\n */\n scrollToElement(target, options) {\n return this.smoothScroll.scrollToElement(this.viewport.nativeElement, target, options);\n }\n /**\n * Update Essential CSS variables\n */\n updateCSSVariables() {\n this.nativeElement.style.setProperty('--content-height', `${this.viewport.contentHeight}`);\n this.nativeElement.style.setProperty('--content-width', `${this.viewport.contentWidth}`);\n this.nativeElement.style.setProperty('--viewport-height', `${this.viewport.offsetHeight}`);\n this.nativeElement.style.setProperty('--viewport-width', `${this.viewport.offsetWidth}`);\n }\n static {\n this.ɵfac = function NgScrollbarCore_Factory(t) {\n return new (t || NgScrollbarCore)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgScrollbarCore,\n hostVars: 14,\n hostBindings: function NgScrollbarCore_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"verticalUsed\", ctx.verticalUsed())(\"horizontalUsed\", ctx.horizontalUsed())(\"isVerticallyScrollable\", ctx.isVerticallyScrollable())(\"isHorizontallyScrollable\", ctx.isHorizontallyScrollable())(\"mobile\", ctx.isMobile)(\"dir\", ctx.direction())(\"position\", ctx.position)(\"dragging\", ctx.dragging())(\"appearance\", ctx.appearance)(\"visibility\", ctx.visibility())(\"orientation\", ctx.orientation())(\"disableInteraction\", ctx.disableInteraction());\n i0.ɵɵclassProp(\"ng-scrollbar\", true);\n }\n },\n inputs: {\n orientation: [1, \"orientation\"],\n visibility: [1, \"visibility\"],\n buttons: [1, \"buttons\"],\n disableInteraction: [1, \"disableInteraction\"],\n disableSensor: [1, \"disableSensor\"],\n sensorThrottleTime: [1, \"sensorThrottleTime\"],\n trackScrollDuration: [2, \"trackScrollDuration\", \"trackScrollDuration\", numberAttribute],\n appearance: \"appearance\",\n position: \"position\",\n trackClass: \"trackClass\",\n thumbClass: \"thumbClass\",\n buttonClass: \"buttonClass\"\n },\n outputs: {\n afterInit: \"afterInit\",\n afterUpdate: \"afterUpdate\"\n },\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_SCROLLBAR,\n useExisting: NgScrollbarCore\n }]), i0.ɵɵInputTransformsFeature]\n });\n }\n }\n return NgScrollbarCore;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst scrollTimelinePolyfillUrl = 'https://flackr.github.io/scroll-timeline/dist/scroll-timeline.js';\nlet ScrollbarManager = /*#__PURE__*/(() => {\n class ScrollbarManager {\n constructor() {\n this.isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n this._polyfillUrl = inject(NG_SCROLLBAR_POLYFILL, {\n optional: true\n }) || scrollTimelinePolyfillUrl;\n this.document = inject(DOCUMENT);\n this.window = this.document.defaultView;\n this.scrollTimelinePolyfill = signal(null);\n if (this.isBrowser && (!this.window['ScrollTimeline'] || !CSS.supports('animation-timeline', 'scroll()'))) {\n this.initPolyfill();\n }\n }\n async initPolyfill() {\n try {\n // Create a script element\n const script = this.document.createElement('script');\n script.src = this._polyfillUrl;\n // Wait for the script to load\n await new Promise((resolve, reject) => {\n script.onload = resolve;\n script.onerror = reject;\n this.document.head.appendChild(script);\n });\n // Once loaded, access and execute the function attached to the window object\n if (this.window['ScrollTimeline']) {\n this.scrollTimelinePolyfill.set(this.window['ScrollTimeline']);\n } else {\n console.error('[NgScrollbar]: ScrollTimeline is not attached to the window object.');\n }\n } catch (error) {\n console.error('[NgScrollbar]: Error loading ScrollTimeline script:', error);\n }\n }\n static {\n this.ɵfac = function ScrollbarManager_Factory(t) {\n return new (t || ScrollbarManager)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ScrollbarManager,\n factory: ScrollbarManager.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return ScrollbarManager;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst SCROLLBAR_CONTROL = new InjectionToken('SCROLLBAR_CONTROL');\nlet ScrollbarAdapter = /*#__PURE__*/(() => {\n class ScrollbarAdapter {\n constructor() {\n // Host component reference\n this.cmp = inject(NG_SCROLLBAR);\n }\n static {\n this.ɵfac = function ScrollbarAdapter_Factory(t) {\n return new (t || ScrollbarAdapter)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: ScrollbarAdapter\n });\n }\n }\n return ScrollbarAdapter;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet PointerEventsAdapter = /*#__PURE__*/(() => {\n class PointerEventsAdapter {\n constructor() {\n // Reference to the NgScrollbar component\n this.cmp = inject(NG_SCROLLBAR);\n // Reference to the Scrollbar control component\n this.control = inject(SCROLLBAR_CONTROL);\n // Reference to the Document element\n this.document = inject(DOCUMENT);\n // Reference to angular zone\n this.zone = inject(NgZone);\n // The native element of the directive\n this.nativeElement = inject(ElementRef).nativeElement;\n effect(onCleanup => {\n if (this.cmp.disableInteraction()) {\n this._pointerEventsSub?.unsubscribe();\n } else {\n this.zone.runOutsideAngular(() => {\n this._pointerEventsSub = this.pointerEvents.subscribe();\n });\n }\n onCleanup(() => this._pointerEventsSub?.unsubscribe());\n });\n }\n static {\n this.ɵfac = function PointerEventsAdapter_Factory(t) {\n return new (t || PointerEventsAdapter)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: PointerEventsAdapter\n });\n }\n }\n return PointerEventsAdapter;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ThumbAdapter = /*#__PURE__*/(() => {\n class ThumbAdapter extends PointerEventsAdapter {\n // Returns thumb size\n get size() {\n return this.nativeElement[this.control.sizeProperty];\n }\n // The maximum space available for scrolling.\n get trackMax() {\n return this.track.size - this.size;\n }\n /**\n * Stream that emits the 'scrollTo' position when a scrollbar thumb element is dragged\n * This function is called by thumb drag event using viewport or scrollbar pointer events\n */\n get pointerEvents() {\n return fromEvent(this.nativeElement, 'pointerdown').pipe(stopPropagation(), preventSelection(this.document), switchMap(e => {\n let startTrackMax;\n let startScrollMax;\n const dragStart = of(e).pipe(tap(() => {\n // Capture scrollMax and trackMax once\n startTrackMax = this.trackMax;\n startScrollMax = this.control.viewportScrollMax;\n this.setDragging(this.control.axis);\n }));\n const dragging = fromEvent(this.document, 'pointermove').pipe(stopPropagation());\n const dragEnd = fromEvent(this.document, 'pointerup', {\n capture: true\n }).pipe(stopPropagation(), enableSelection(this.document), tap(() => this.setDragging('none')));\n return dragStart.pipe(map(startEvent => startEvent[this.control.offsetProperty]), switchMap(startOffset => dragging.pipe(map(moveEvent => moveEvent[this.control.clientProperty]),\n // Calculate how far the pointer is from the top/left of the scrollbar (minus the dragOffset).\n map(moveClient => moveClient - this.track.offset), map(trackRelativeOffset => startScrollMax * (trackRelativeOffset - startOffset) / startTrackMax), tap(scrollPosition => this.control.instantScrollTo(scrollPosition, startScrollMax)), takeUntil(dragEnd))));\n }));\n }\n constructor() {\n effect(() => {\n const script = this.manager.scrollTimelinePolyfill();\n if (script && !this._animation) {\n this._animation = startPolyfill(script, this.nativeElement, this.cmp.viewport.nativeElement, this.control.axis);\n }\n });\n super();\n this.manager = inject(ScrollbarManager);\n this.track = inject(TrackAdapter);\n }\n setDragging(value) {\n this.zone.run(() => this.cmp.dragging.set(value));\n }\n static {\n this.ɵfac = function ThumbAdapter_Factory(t) {\n return new (t || ThumbAdapter)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: ThumbAdapter,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return ThumbAdapter;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction startPolyfill(ScrollTimeline, element, source, axis) {\n return element.animate({\n translate: ['var(--_scrollbar-thumb-transform-from)', 'var(--_scrollbar-thumb-transform-to)']\n }, {\n fill: 'both',\n easing: 'linear',\n timeline: new ScrollTimeline({\n source,\n axis\n })\n });\n}\nlet TrackAdapter = /*#__PURE__*/(() => {\n class TrackAdapter extends PointerEventsAdapter {\n // Returns viewport client size\n get viewportSize() {\n return this.cmp.viewport[this.control.sizeProperty];\n }\n // Get track client rect\n get clientRect() {\n return this.nativeElement.getBoundingClientRect();\n }\n // Scrollbar track offset\n get offset() {\n return this.clientRect[this.control.clientRectProperty];\n }\n // Scrollbar track length\n get size() {\n return this.nativeElement[this.control.sizeProperty];\n }\n // Observable for track dragging events\n get pointerEvents() {\n // Observable streams for pointer events\n const pointerDown$ = fromEvent(this.nativeElement, 'pointerdown').pipe(stopPropagation(), preventSelection(this.document));\n const pointerUp$ = fromEvent(this.document, 'pointerup', {\n passive: true\n }).pipe(enableSelection(this.document));\n const pointerEnter$ = fromEvent(this.nativeElement, 'pointerover', {\n passive: true\n }).pipe(\n // When mouse is out and enters again, must set the current position first\n tap(e => this.currMousePosition = e[this.control.offsetProperty]), map(() => true));\n const pointerLeave$ = fromEvent(this.nativeElement, 'pointerout', {\n passive: true\n }).pipe(map(() => false));\n const pointerOver$ = merge(pointerEnter$, pointerLeave$).pipe(startWith(true));\n // Keep track of current mouse location while dragging\n const pointerMove$ = fromEvent(this.nativeElement, 'pointermove', {\n passive: true\n }).pipe(tap(e => this.currMousePosition = e[this.control.offsetProperty]));\n return pointerDown$.pipe(switchMap(startEvent => {\n // Track pointer location while dragging\n pointerMove$.pipe(takeUntil(pointerUp$)).subscribe();\n return this.onTrackFirstClick(startEvent).pipe(delay(200), switchMap(() => {\n // Otherwise, activate pointermove and pointerout events and switch to ongoing scroll calls\n return pointerOver$.pipe(switchMap(over => {\n const currDirection = this.getScrollDirection(this.currMousePosition);\n const sameDirection = this.scrollDirection === currDirection;\n // If mouse is out the track pause the scroll calls, otherwise keep going\n return over && sameDirection ? this.onTrackOngoingMousedown() : EMPTY;\n }));\n }), takeUntil(pointerUp$));\n }));\n }\n constructor() {\n effect(onCleanup => {\n if (this.cmp.disableSensor()) {\n this.update();\n this.sizeChangeSub?.unsubscribe();\n } else {\n this.zone.runOutsideAngular(() => {\n // Update styles with real track size\n this.sizeChangeSub = resizeObserver({\n element: this.nativeElement,\n throttleDuration: this.cmp.sensorThrottleTime()\n }).pipe(tap(() => this.update())).subscribe();\n });\n }\n onCleanup(() => this.sizeChangeSub?.unsubscribe());\n });\n super();\n }\n update() {\n this.cmp.nativeElement.style.setProperty(this.cssLengthProperty, `${this.size}`);\n }\n /**\n * Callback when mouse is first clicked on the track\n */\n onTrackFirstClick(e) {\n // Initialize variables and determine scroll direction\n this.currMousePosition = e[this.control.offsetProperty];\n this.scrollDirection = this.getScrollDirection(this.currMousePosition);\n this.scrollMax = this.control.viewportScrollMax;\n return this.scrollTo(this.nextStep());\n }\n nextStep() {\n // Check which direction should the scroll go (forward or backward)\n if (this.scrollDirection === 'forward') {\n // Scroll forward\n const scrollForwardIncrement = this.getScrollForwardStep();\n // Check if the incremental position is bigger than the scroll max\n if (scrollForwardIncrement >= this.scrollMax) {\n return this.scrollMax;\n }\n return scrollForwardIncrement;\n }\n // Scroll backward\n const scrollBackwardIncrement = this.getScrollBackwardStep();\n if (scrollBackwardIncrement <= 0) {\n return 0;\n }\n return scrollBackwardIncrement;\n }\n /**\n * Callback when mouse is still down on the track\n * Incrementally scrolls towards target position until reached\n */\n onTrackOngoingMousedown() {\n const position = this.nextStep();\n return this.scrollTo(position).pipe(takeWhile(() => !this.isReached(position)), switchMap(() => this.onTrackOngoingMousedown()));\n }\n /**\n * Returns a flag that determines whether the scroll from the given position is the final step or not\n */\n isReached(position) {\n if (this.scrollDirection === 'forward') {\n return position >= this.scrollMax;\n }\n return position <= 0;\n }\n static {\n this.ɵfac = function TrackAdapter_Factory(t) {\n return new (t || TrackAdapter)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: TrackAdapter,\n contentQueries: function TrackAdapter_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, ThumbAdapter, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.thumb = _t.first);\n }\n },\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return TrackAdapter;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet TrackXDirective = /*#__PURE__*/(() => {\n class TrackXDirective extends TrackAdapter {\n get viewportScrollSize() {\n return this.cmp.viewport.contentWidth;\n }\n constructor() {\n effect(() => {\n if (this.cmp.direction() === 'rtl') {\n this.getCurrPosition = () => {\n const offset = this.viewportScrollSize - this.viewportSize - this.control.viewportScrollOffset;\n return offset * this.size / this.viewportScrollSize;\n };\n this.getScrollDirection = position => {\n return position < this.getCurrPosition() ? 'forward' : 'backward';\n };\n } else {\n this.getCurrPosition = () => {\n return this.control.viewportScrollOffset * this.size / this.viewportScrollSize;\n };\n this.getScrollDirection = position => {\n return position > this.getCurrPosition() ? 'forward' : 'backward';\n };\n }\n });\n super();\n this.cssLengthProperty = '--track-x-length';\n }\n scrollTo(start) {\n return fromPromise(this.cmp.scrollTo({\n start,\n duration: this.cmp.trackScrollDuration\n }));\n }\n getScrollForwardStep() {\n return this.control.viewportScrollOffset + this.viewportSize;\n }\n getScrollBackwardStep() {\n return this.control.viewportScrollOffset - this.viewportSize;\n }\n static {\n this.ɵfac = function TrackXDirective_Factory(t) {\n return new (t || TrackXDirective)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: TrackXDirective,\n selectors: [[\"\", \"scrollbarTrackX\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: TrackAdapter,\n useExisting: TrackXDirective\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return TrackXDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet TrackYDirective = /*#__PURE__*/(() => {\n class TrackYDirective extends TrackAdapter {\n constructor() {\n super(...arguments);\n this.cssLengthProperty = '--track-y-length';\n }\n get viewportScrollSize() {\n return this.cmp.viewport.contentHeight;\n }\n getCurrPosition() {\n return this.control.viewportScrollOffset * this.size / this.viewportScrollSize;\n }\n getScrollDirection(position) {\n return position > this.getCurrPosition() ? 'forward' : 'backward';\n }\n scrollTo(top) {\n return fromPromise(this.cmp.scrollTo({\n top,\n duration: this.cmp.trackScrollDuration\n }));\n }\n getScrollForwardStep() {\n return this.control.viewportScrollOffset + this.viewportSize;\n }\n getScrollBackwardStep() {\n return this.control.viewportScrollOffset - this.viewportSize;\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵTrackYDirective_BaseFactory;\n return function TrackYDirective_Factory(t) {\n return (ɵTrackYDirective_BaseFactory || (ɵTrackYDirective_BaseFactory = i0.ɵɵgetInheritedFactory(TrackYDirective)))(t || TrackYDirective);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: TrackYDirective,\n selectors: [[\"\", \"scrollbarTrackY\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: TrackAdapter,\n useExisting: TrackYDirective\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return TrackYDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ThumbXDirective = /*#__PURE__*/(() => {\n class ThumbXDirective extends ThumbAdapter {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵThumbXDirective_BaseFactory;\n return function ThumbXDirective_Factory(t) {\n return (ɵThumbXDirective_BaseFactory || (ɵThumbXDirective_BaseFactory = i0.ɵɵgetInheritedFactory(ThumbXDirective)))(t || ThumbXDirective);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: ThumbXDirective,\n selectors: [[\"\", \"scrollbarThumbX\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: ThumbAdapter,\n useExisting: ThumbXDirective\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return ThumbXDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ThumbYDirective = /*#__PURE__*/(() => {\n class ThumbYDirective extends ThumbAdapter {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵThumbYDirective_BaseFactory;\n return function ThumbYDirective_Factory(t) {\n return (ɵThumbYDirective_BaseFactory || (ɵThumbYDirective_BaseFactory = i0.ɵɵgetInheritedFactory(ThumbYDirective)))(t || ThumbYDirective);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: ThumbYDirective,\n selectors: [[\"\", \"scrollbarThumbY\", \"\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: ThumbAdapter,\n useExisting: ThumbYDirective\n }]), i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return ThumbYDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ScrollbarButton = /*#__PURE__*/(() => {\n class ScrollbarButton extends PointerEventsAdapter {\n constructor() {\n super(...arguments);\n this.injector = inject(Injector);\n this.afterFirstClickDelay = 120;\n this.firstClickDuration = 100;\n this.scrollBy = 50;\n this.onGoingScrollBy = 12;\n // canScroll function can work for y-axis and x-axis for both LTR and RTL directions\n this.canScrollFunc = {\n forward: (scrollOffset, scrollMax) => scrollOffset < scrollMax,\n backward: scrollOffset => scrollOffset > 0\n };\n this.scrollStepFunc = {\n forward: (scrollBy, offset) => offset + scrollBy,\n backward: (scrollBy, offset) => offset - scrollBy\n };\n this.horizontalScrollStepFunc = {\n rtl: {\n forward: (scrollBy, offset, scrollMax) => scrollMax - offset - scrollBy,\n backward: (scrollBy, offset, scrollMax) => scrollMax - offset + scrollBy\n },\n ltr: this.scrollStepFunc\n };\n }\n get pointerEvents() {\n const pointerDown$ = fromEvent(this.nativeElement, 'pointerdown').pipe(stopPropagation(), preventSelection(this.document));\n const pointerUp$ = fromEvent(this.document, 'pointerup', {\n passive: true\n }).pipe(enableSelection(this.document));\n const pointerLeave$ = fromEvent(this.nativeElement, 'pointerleave', {\n passive: true\n });\n // Combine pointerup and pointerleave events into one stream\n const pointerUpOrLeave$ = merge(pointerUp$, pointerLeave$);\n return pointerDown$.pipe(switchMap(() => this.firstScrollStep().pipe(delay(this.afterFirstClickDelay), switchMap(() => this.onOngoingPointerdown()), takeUntil(pointerUpOrLeave$))));\n }\n ngOnInit() {\n // Get the canScroll function according to scroll direction (forward/backward)\n this.canScroll = this.canScrollFunc[this.scrollDirection];\n if (this.control.axis === 'x') {\n runInInjectionContext(this.injector, () => {\n effect(() => {\n const dir = this.cmp.direction();\n // Get the nextStep function according to scroll direction (forward/backward) and layout direction (LTR/RTL)\n this.nextStep = this.horizontalScrollStepFunc[dir][this.scrollDirection];\n });\n });\n } else {\n // Get the nextStep function according to scroll direction (forward/backward)\n this.nextStep = this.scrollStepFunc[this.scrollDirection];\n }\n }\n firstScrollStep() {\n const value = this.nextStep(this.scrollBy, this.control.viewportScrollOffset, this.control.viewportScrollMax);\n return this.control.scrollTo(value, this.firstClickDuration);\n }\n onGoingScrollStep() {\n const scrollMax = this.control.viewportScrollMax;\n const value = this.nextStep(this.onGoingScrollBy, this.control.viewportScrollOffset, scrollMax);\n this.control.instantScrollTo(value, scrollMax);\n }\n onOngoingPointerdown() {\n return interval(0, animationFrameScheduler).pipe(takeWhile(() => this.canScroll(this.control.viewportScrollOffset, this.control.viewportScrollMax)), tap(() => this.onGoingScrollStep()));\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵScrollbarButton_BaseFactory;\n return function ScrollbarButton_Factory(t) {\n return (ɵScrollbarButton_BaseFactory || (ɵScrollbarButton_BaseFactory = i0.ɵɵgetInheritedFactory(ScrollbarButton)))(t || ScrollbarButton);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: ScrollbarButton,\n selectors: [[\"button\", \"scrollbarButton\", \"\"]],\n inputs: {\n scrollbarButton: \"scrollbarButton\",\n scrollDirection: \"scrollDirection\"\n },\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n attrs: _c0,\n decls: 3,\n vars: 0,\n consts: [[1, \"ng-scrollbar-button-icon\"], [\"viewBox\", \"0 0 512 512\", \"xmlns\", \"http://www.w3.org/2000/svg\"], [\"d\", \"M413.1,327.3l-1.8-2.1l-136-156.5c-4.6-5.3-11.5-8.6-19.2-8.6c-7.7,0-14.6,3.4-19.2,8.6L101,324.9l-2.3,2.6 C97,330,96,333,96,336.2c0,8.7,7.4,15.8,16.6,15.8v0h286.8v0c9.2,0,16.6-7.1,16.6-15.8C416,332.9,414.9,329.8,413.1,327.3z\"]],\n template: function ScrollbarButton_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(1, \"svg\", 1);\n i0.ɵɵelement(2, \"path\", 2);\n i0.ɵɵelementEnd()();\n }\n },\n styles: [\"[_nghost-%COMP%]{--scrollbar-button-size: 20px;position:relative;border:none;margin:0;padding:0;border-radius:0;appearance:none;background-color:var(--scrollbar-button-color)}[_nghost-%COMP%] svg[_ngcontent-%COMP%]{fill:var(--scrollbar-button-fill)}[_nghost-%COMP%]:hover{background:var(--scrollbar-button-hover-color)}[_nghost-%COMP%]:hover svg[_ngcontent-%COMP%]{fill:var(--scrollbar-button-hover-fill)}[_nghost-%COMP%]:active{background:var(--scrollbar-button-active-color)}[_nghost-%COMP%]:active svg[_ngcontent-%COMP%]{fill:var(--scrollbar-button-active-fill)}[scrollbarButton=top][_nghost-%COMP%], [scrollbarButton=start][_nghost-%COMP%]{order:1}[scrollbarButton=bottom][_nghost-%COMP%], [scrollbarButton=end][_nghost-%COMP%]{order:3}[scrollbarButton=top][_nghost-%COMP%], [scrollbarButton=bottom][_nghost-%COMP%]{width:100%;height:var(--scrollbar-button-size)}[scrollbarButton=start][_nghost-%COMP%], [scrollbarButton=end][_nghost-%COMP%]{width:var(--scrollbar-button-size);height:100%}[scrollbarButton=bottom][_nghost-%COMP%]{--_button-rotate: 180deg}[scrollbarButton=start][_nghost-%COMP%]{--_button-rotate: -90deg}[scrollbarButton=start][_nghost-%COMP%] .ng-scrollbar-button-icon[_ngcontent-%COMP%]{writing-mode:vertical-lr}[scrollbarButton=end][_nghost-%COMP%]{--_button-rotate: 90deg}[scrollbarButton=end][_nghost-%COMP%] .ng-scrollbar-button-icon[_ngcontent-%COMP%]{writing-mode:vertical-rl}.ng-scrollbar-button-icon[_ngcontent-%COMP%]{rotate:var(--_button-rotate);display:flex;place-content:center;place-items:center;width:100%;height:100%}\"],\n changeDetection: 0\n });\n }\n }\n return ScrollbarButton;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ScrollbarY = /*#__PURE__*/(() => {\n class ScrollbarY extends ScrollbarAdapter {\n constructor() {\n super(...arguments);\n this.clientRectProperty = 'top';\n this.sizeProperty = 'offsetHeight';\n this.clientProperty = 'clientY';\n this.offsetProperty = 'offsetY';\n this.axis = 'y';\n }\n get viewportScrollMax() {\n return this.cmp.viewport.scrollMaxY;\n }\n get viewportScrollOffset() {\n return this.cmp.viewport.scrollTop;\n }\n scrollTo(top, duration) {\n return fromPromise(this.cmp.scrollTo({\n top,\n duration\n }));\n }\n instantScrollTo(value) {\n this.cmp.viewport.scrollYTo(value);\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵScrollbarY_BaseFactory;\n return function ScrollbarY_Factory(t) {\n return (ɵScrollbarY_BaseFactory || (ɵScrollbarY_BaseFactory = i0.ɵɵgetInheritedFactory(ScrollbarY)))(t || ScrollbarY);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: ScrollbarY,\n selectors: [[\"scrollbar-y\"]],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: SCROLLBAR_CONTROL,\n useExisting: ScrollbarY\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 6,\n vars: 7,\n consts: [[\"sticky\", \"\"], [1, \"ng-scrollbar-sticky\"], [1, \"ng-scrollbar-track-wrapper\"], [\"scrollbarTrackY\", \"\"], [\"scrollbarThumbY\", \"\"], [\"scrollbarButton\", \"top\", \"scrollDirection\", \"backward\"], [\"scrollbarButton\", \"bottom\", \"scrollDirection\", \"forward\"]],\n template: function ScrollbarY_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 1, 0)(2, \"div\", 2)(3, \"div\", 3);\n i0.ɵɵelement(4, \"div\", 4);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(5, ScrollbarY_Conditional_5_Template, 2, 6);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(3);\n i0.ɵɵclassMapInterpolate1(\"ng-scrollbar-track \", ctx.cmp.trackClass, \"\");\n i0.ɵɵadvance();\n i0.ɵɵclassMapInterpolate1(\"ng-scrollbar-thumb \", ctx.cmp.thumbClass, \"\");\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx.cmp.buttons() ? 5 : -1);\n }\n },\n dependencies: [TrackYDirective, ThumbYDirective, ScrollbarButton],\n styles: [\"[_nghost-%COMP%]{position:absolute;inset:0;pointer-events:none;min-width:calc(var(--viewport-width) * 1px);min-height:calc(var(--viewport-height) * 1px)}.ng-scrollbar-sticky[_ngcontent-%COMP%]{top:calc(var(--_scrollbar-wrapper-top) * 1px);left:calc(var(--_scrollbar-wrapper-left) * 1px);right:calc(var(--_scrollbar-wrapper-right) * 1px);height:calc(var(--_scrollbar-wrapper-height) * 1px);width:calc(var(--_scrollbar-wrapper-width) * 1px);position:sticky;z-index:100;opacity:var(--_scrollbar-hover-opacity);transition:var(--_scrollbar-opacity-transition)}.ng-scrollbar-track-wrapper[_ngcontent-%COMP%]{touch-action:none;-webkit-user-select:none;user-select:none;top:var(--_scrollbar-track-top);bottom:var(--_scrollbar-track-bottom);right:var(--_scrollbar-track-right);left:var(--_scrollbar-track-left);pointer-events:var(--_scrollbar-pointer-events);transition:var(--scrollbar-track-wrapper-transition);position:absolute;overflow:hidden;display:flex;place-items:center}.ng-scrollbar-track[_ngcontent-%COMP%]{position:relative;width:100%;height:100%;background-color:var(--scrollbar-track-color);border-radius:var(--scrollbar-border-radius);cursor:default;z-index:1;order:2}.ng-scrollbar-thumb[_ngcontent-%COMP%]{box-sizing:border-box;position:absolute;transition:var(--scrollbar-thumb-transition);border-radius:var(--scrollbar-border-radius);height:var(--_thumb-height);width:var(--_thumb-width);animation-name:_ngcontent-%COMP%_scrollbarThumbAnimation;animation-duration:1ms;animation-timing-function:linear}@keyframes _ngcontent-%COMP%_scrollbarThumbAnimation{0%{translate:var(--_scrollbar-thumb-transform-from)}to{translate:var(--_scrollbar-thumb-transform-to)}}\", \"[_nghost-%COMP%]{--_scrollbar-wrapper-top: 0;--_scrollbar-wrapper-left: var(--_scrollbar-wrapper-y-left);--_scrollbar-wrapper-right: var(--_scrollbar-wrapper-y-right);--_scrollbar-wrapper-height: var(--viewport-height);--_scrollbar-wrapper-width: var(--_scrollbar-thickness);--_scrollbar-track-top: var(--_vertical-top);--_scrollbar-track-bottom: var(--_vertical-bottom);--_scrollbar-track-right: var(--_vertical-right);--_scrollbar-track-left: var(--_vertical-left);--_thumb-height: calc(var(--thumb-y-length) * 1px);--_thumb-width: 100%;--_scrollbar-thumb-transform-from: 0 0;--_scrollbar-thumb-transform-to: 0 calc(var(--_scrollbar-y-thumb-transform-to-value) * 1px)}.ng-scrollbar-track-wrapper[_ngcontent-%COMP%]{width:var(--_track-y-thickness);flex-direction:column}.ng-scrollbar-track-wrapper[_ngcontent-%COMP%]:hover{--_track-y-thickness: var(--_scrollbar-hover-thickness-px);--_thumb-y-color: var(--scrollbar-thumb-hover-color)}.ng-scrollbar-thumb[_ngcontent-%COMP%]{animation-timeline:var(--_animation-timeline-y);min-height:calc(var(--scrollbar-thumb-min-size) * 1px);display:var(--_vertical-thumb-display);background-color:var(--_thumb-y-color)}\"],\n changeDetection: 0\n });\n }\n }\n return ScrollbarY;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ScrollbarX = /*#__PURE__*/(() => {\n class ScrollbarX extends ScrollbarAdapter {\n get viewportScrollMax() {\n return this.cmp.viewport.scrollMaxX;\n }\n get viewportScrollOffset() {\n // Keep scrollLeft value positive for horizontal scrollbar\n return Math.abs(this.cmp.viewport.scrollLeft);\n }\n constructor() {\n effect(() => {\n if (this.cmp.direction() === 'rtl') {\n this.handlePosition = (position, scrollMax) => -(scrollMax - position);\n } else {\n this.handlePosition = position => position;\n }\n });\n super();\n this.manager = inject(ScrollbarManager);\n this.clientRectProperty = 'left';\n this.sizeProperty = 'offsetWidth';\n this.clientProperty = 'clientX';\n this.offsetProperty = 'offsetX';\n this.axis = 'x';\n }\n scrollTo(left, duration) {\n return fromPromise(this.cmp.scrollTo({\n left,\n duration\n }));\n }\n instantScrollTo(value, scrollMax) {\n this.cmp.viewport.scrollXTo(this.handlePosition(value, scrollMax));\n }\n static {\n this.ɵfac = function ScrollbarX_Factory(t) {\n return new (t || ScrollbarX)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: ScrollbarX,\n selectors: [[\"scrollbar-x\"]],\n hostVars: 1,\n hostBindings: function ScrollbarX_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"dir\", ctx.cmp.direction());\n }\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: SCROLLBAR_CONTROL,\n useExisting: ScrollbarX\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 6,\n vars: 7,\n consts: [[\"sticky\", \"\"], [1, \"ng-scrollbar-sticky\"], [1, \"ng-scrollbar-track-wrapper\"], [\"scrollbarTrackX\", \"\"], [\"scrollbarThumbX\", \"\"], [\"scrollbarButton\", \"start\", \"scrollDirection\", \"backward\"], [\"scrollbarButton\", \"end\", \"scrollDirection\", \"forward\"]],\n template: function ScrollbarX_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 1, 0)(2, \"div\", 2)(3, \"div\", 3);\n i0.ɵɵelement(4, \"div\", 4);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(5, ScrollbarX_Conditional_5_Template, 2, 6);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵadvance(3);\n i0.ɵɵclassMapInterpolate1(\"ng-scrollbar-track \", ctx.cmp.trackClass, \"\");\n i0.ɵɵadvance();\n i0.ɵɵclassMapInterpolate1(\"ng-scrollbar-thumb \", ctx.cmp.thumbClass, \"\");\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx.cmp.buttons() ? 5 : -1);\n }\n },\n dependencies: [TrackXDirective, ThumbXDirective, ScrollbarButton],\n styles: [_c1, \"[_nghost-%COMP%]{--_scrollbar-wrapper-top: var(--_scrollbar-wrapper-x-top);--_scrollbar-wrapper-left: 0;--_scrollbar-wrapper-right: 0;--_scrollbar-wrapper-height: var(--_scrollbar-thickness);--_scrollbar-wrapper-width: var(--viewport-width);--_scrollbar-track-top: var(--_horizontal-top);--_scrollbar-track-bottom: var(--_horizontal-bottom);--_scrollbar-track-right: var(--_horizontal-right);--_scrollbar-track-left: var(--_horizontal-left);--_thumb-height: 100%;--_thumb-width: calc(var(--thumb-x-length) * 1px);--_scrollbar-thumb-transform-from: 0;--_scrollbar-thumb-transform-to: calc(var(--_scrollbar-x-thumb-transform-to-value) * 1px)}[_nghost-%COMP%] .ng-scrollbar-button[scrollbarButton=start][_ngcontent-%COMP%]{_--button-rotate:90}[_nghost-%COMP%] .ng-scrollbar-button[scrollbarButton=end][_ngcontent-%COMP%]{_--button-rotate:-90}[dir=rtl][_nghost-%COMP%] .ng-scrollbar-thumb[_ngcontent-%COMP%]{animation-name:_ngcontent-%COMP%_scrollbarThumbRTLAnimation;will-change:right;--_scrollbar-thumb-transform-to: calc(var(--_scrollbar-x-thumb-transform-to-value) * -1px)}[dir=rtl][_nghost-%COMP%] .ng-scrollbar-button[scrollbarButton=start][_ngcontent-%COMP%]{--_button-rotate: 90deg}[dir=rtl][_nghost-%COMP%] .ng-scrollbar-button[scrollbarButton=end][_ngcontent-%COMP%]{--_button-rotate: -90deg}.ng-scrollbar-track-wrapper[_ngcontent-%COMP%]{height:var(--_track-x-thickness);flex-direction:row}.ng-scrollbar-track-wrapper[_ngcontent-%COMP%]:hover{--_track-x-thickness: var(--_scrollbar-hover-thickness-px);--_thumb-x-color: var(--scrollbar-thumb-hover-color)}.ng-scrollbar-thumb[_ngcontent-%COMP%]{animation-timeline:var(--_animation-timeline-x);min-width:calc(var(--scrollbar-thumb-min-size) * 1px);display:var(--_horizontal-thumb-display);background-color:var(--_thumb-x-color)}@keyframes _ngcontent-%COMP%_scrollbarThumbRTLAnimation{0%{right:var(--_scrollbar-thumb-transform-from)}to{right:calc(var(--_scrollbar-thumb-transform-to) * -1)}}\"],\n changeDetection: 0\n });\n }\n }\n return ScrollbarX;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet Scrollbars = /*#__PURE__*/(() => {\n class Scrollbars {\n constructor() {\n this.cmp = inject(NG_SCROLLBAR);\n }\n static {\n this.ɵfac = function Scrollbars_Factory(t) {\n return new (t || Scrollbars)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: Scrollbars,\n selectors: [[\"scrollbars\"]],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 2,\n vars: 2,\n template: function Scrollbars_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, Scrollbars_Conditional_0_Template, 1, 0, \"scrollbar-y\")(1, Scrollbars_Conditional_1_Template, 1, 0, \"scrollbar-x\");\n }\n if (rf & 2) {\n i0.ɵɵconditional(ctx.cmp.verticalUsed() ? 0 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx.cmp.horizontalUsed() ? 1 : -1);\n }\n },\n dependencies: [ScrollbarX, ScrollbarY],\n styles: [\"[_nghost-%COMP%]{display:contents}\"],\n changeDetection: 0\n });\n }\n }\n return Scrollbars;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgScrollbar = /*#__PURE__*/(() => {\n class NgScrollbar extends NgScrollbarCore {\n ngOnInit() {\n this.viewport.init(this.nativeElement, this.contentWrapper.nativeElement);\n super.ngOnInit();\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgScrollbar_BaseFactory;\n return function NgScrollbar_Factory(t) {\n return (ɵNgScrollbar_BaseFactory || (ɵNgScrollbar_BaseFactory = i0.ɵɵgetInheritedFactory(NgScrollbar)))(t || NgScrollbar);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgScrollbar,\n selectors: [[\"ng-scrollbar\", 3, \"externalViewport\", \"\"]],\n viewQuery: function NgScrollbar_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c2, 7);\n i0.ɵɵviewQuery(Scrollbars, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.contentWrapper = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._scrollbars = _t.first);\n }\n },\n exportAs: [\"ngScrollbar\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_SCROLLBAR,\n useExisting: NgScrollbar\n }]), i0.ɵɵHostDirectivesFeature([ScrollViewport]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c3,\n decls: 4,\n vars: 0,\n consts: [[\"contentWrapper\", \"\"]],\n template: function NgScrollbar_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\", null, 0);\n i0.ɵɵprojection(2);\n i0.ɵɵelement(3, \"scrollbars\");\n i0.ɵɵelementEnd();\n }\n },\n dependencies: [Scrollbars],\n styles: [\"[_nghost-%COMP%]{display:block;position:relative;max-height:100%;max-width:100%;--scrollbar-border-radius: 0px;--scrollbar-thickness: 5;--scrollbar-offset: 0;--scrollbar-track-wrapper-transition: width 60ms linear, height 60ms linear;--scrollbar-track-color: transparent;--scrollbar-thumb-color: rgb(0 0 0 / 20%);--scrollbar-thumb-hover-color: var(--scrollbar-thumb-color);--scrollbar-hover-thickness: var(--scrollbar-thickness);--scrollbar-thumb-transition: none;--scrollbar-thumb-min-size: 20;--scrollbar-button-color: var(--scrollbar-thumb-color);--scrollbar-button-hover-color: var(--scrollbar-button-color);--scrollbar-button-active-color: var(--scrollbar-button-hover-color);--scrollbar-button-fill: white;--scrollbar-button-hover-fill: var(--scrollbar-button-fill);--scrollbar-button-active-fill: var(--scrollbar-button-hover-fill);--scrollbar-hover-opacity-transition-enter-duration: 0;--scrollbar-hover-opacity-transition-leave-duration: .4s;--scrollbar-hover-opacity-transition-leave-delay: 1s;--scrollbar-overscroll-behavior: initial;--scrollbar-mobile-overscroll-behavior: none;--_scrollbar-thickness: calc(var(--scrollbar-thickness) + var(--scrollbar-offset) * 2);--_scrollbar-pointer-events: auto;--_scrollbar-offset-px: calc(var(--scrollbar-offset) * 1px);--_scrollbar-thickness-px: calc(var(--scrollbar-thickness) * 1px);--_scrollbar-hover-thickness-px: calc(var(--scrollbar-hover-thickness) * 1px);--_viewport-padding-top: 0;--_viewport-padding-bottom: 0;--_viewport-padding-left: 0;--_viewport-padding-right: 0;--_horizontal-thumb-display: block;--_vertical-thumb-display: block;--_viewport-overflow: auto;--_thumb-x-color: var(--scrollbar-thumb-color);--_thumb-y-color: var(--scrollbar-thumb-color);--_track-y-thickness: var(--_scrollbar-thickness-px);--_track-x-thickness: var(--_scrollbar-thickness-px);--_viewport-overscroll-behavior: var(--scrollbar-overscroll-behavior);--_scrollbar-content-width: fit-content}[_nghost-%COMP%]{--_vertical-top: var(--_scrollbar-offset-px);--_vertical-bottom: var(--_scrollbar-offset-px);--_horizontal-left: var(--_scrollbar-offset-px);--_horizontal-right: var(--_scrollbar-offset-px);--_horizontal-top: initial;--_horizontal-bottom: var(--_scrollbar-offset-px);--_scrollbar-wrapper-x-top: calc(var(--viewport-height) - var(--_scrollbar-thickness));--reached-offset: 1px;--reached-offset-top: var(--reached-offset);--reached-offset-bottom: var(--reached-offset);--reached-offset-start: var(--reached-offset);--reached-offset-end: var(--reached-offset);--dropped-offset: 1px;--dropped-offset-top: var(--dropped-offset);--dropped-offset-bottom: var(--dropped-offset);--dropped-offset-start: var(--dropped-offset);--dropped-offset-end: var(--dropped-offset);--_viewport_scroll-timeline: unset;--_animation-timeline-y: unset;--_scrollbar-y-thumb-transform-to-value: unset;--_scrollbar-x-thumb-transform-to-value: unset;--_scrollbar-thumb-transform-from: unset;--_scrollbar-thumb-transform-to: unset}.ng-scrollbar-external-viewport[_nghost-%COMP%] .ng-scroll-viewport{min-height:100%;min-width:100%;height:100%;max-height:100%;max-width:100%}.ng-scroll-viewport[_nghost-%COMP%], .ng-scrollbar-external-viewport[_nghost-%COMP%] .ng-scroll-viewport{position:relative;overflow:var(--_viewport-overflow);scroll-timeline:var(--_viewport_scroll-timeline);box-sizing:border-box!important;-webkit-overflow-scrolling:touch;will-change:scroll-position;-webkit-user-select:var(--_viewport-user-select);user-select:var(--_viewport-user-select);overscroll-behavior:var(--_viewport-overscroll-behavior)}.ng-scroll-viewport[_nghost-%COMP%] > .ng-scroll-content[_ngcontent-%COMP%], .ng-scrollbar-external-viewport[_nghost-%COMP%] .ng-scroll-viewport>.ng-scroll-content{width:var(--_scrollbar-content-width);z-index:1;min-width:100%;min-height:100%;contain:content;padding:var(--_viewport-padding-top, 0) var(--_viewport-padding-right, 0) var(--_viewport-padding-bottom, 0) var(--_viewport-padding-left, 0)}.ng-scroll-viewport[_nghost-%COMP%], .ng-scrollbar-external-viewport[_nghost-%COMP%] .ng-scroll-viewport{scrollbar-width:none!important}.ng-scroll-viewport[_nghost-%COMP%]::-webkit-scrollbar, .ng-scrollbar-external-viewport[_nghost-%COMP%] .ng-scroll-viewport::-webkit-scrollbar{display:none!important}[position=invertX][_nghost-%COMP%], [position=invertAll][_nghost-%COMP%]{--_horizontal-top: var(--_scrollbar-offset-px);--_horizontal-bottom: initial;--_scrollbar-wrapper-x-top: 0}[dir=ltr][_nghost-%COMP%]{--_scrollbar-wrapper-y-right: initial;--_vertical-right: var(--_scrollbar-offset-px);--_vertical-left: initial;--_scrollbar-wrapper-y-left: calc(var(--viewport-width) - var(--_scrollbar-thickness))}[dir=ltr][position=invertY][_nghost-%COMP%], [dir=ltr][position=invertAll][_nghost-%COMP%]{--_vertical-left: var(--_scrollbar-offset-px);--_vertical-right: initial;--_scrollbar-wrapper-y-left: 0}[dir=rtl][_nghost-%COMP%]{--_scrollbar-wrapper-y-left: initial;--_vertical-left: var(--_scrollbar-offset-px);--_vertical-right: initial;--_scrollbar-wrapper-y-right: calc(var(--viewport-width) - var(--_scrollbar-thickness))}[dir=rtl][position=invertY][_nghost-%COMP%], [dir=rtl][position=invertAll][_nghost-%COMP%]{--_vertical-right: var(--_scrollbar-offset-px);--_vertical-left: initial;--_scrollbar-wrapper-y-right: 0}[verticalUsed=true][horizontalUsed=true][_nghost-%COMP%]{--_scrollbar-thickness-margin: calc(var(--scrollbar-thickness) + var(--scrollbar-offset) * 3);--_scrollbar-thickness-margin-px: calc(var(--_scrollbar-thickness-margin) * 1px)}[horizontalUsed=true][_nghost-%COMP%]{--_vertical-top: var(--_scrollbar-offset-px);--_vertical-bottom: var(--_scrollbar-thickness-margin-px)}[horizontalUsed=true][position=invertX][_nghost-%COMP%], [horizontalUsed=true][position=invertAll][_nghost-%COMP%]{--_vertical-top: var(--_scrollbar-thickness-margin-px);--_vertical-bottom: var(--_scrollbar-offset-px)}[verticalUsed=true][dir=ltr][_nghost-%COMP%]{--_horizontal-left: var(--_scrollbar-offset-px);--_horizontal-right: var(--_scrollbar-thickness-margin-px)}[verticalUsed=true][dir=rtl][_nghost-%COMP%]{--_horizontal-left: var(--_scrollbar-thickness-margin-px);--_horizontal-right: var(--_scrollbar-offset-px)}[verticalUsed=true][position=invertY][dir=ltr][_nghost-%COMP%], [verticalUsed=true][position=invertAll][dir=ltr][_nghost-%COMP%]{--_horizontal-left: var(--_scrollbar-thickness-margin-px);--_horizontal-right: var(--_scrollbar-offset-px)}[verticalUsed=true][position=invertY][dir=rtl][_nghost-%COMP%], [verticalUsed=true][position=invertAll][dir=rtl][_nghost-%COMP%]{--_horizontal-left: var(--_scrollbar-offset-px);--_horizontal-right: var(--_scrollbar-thickness-margin-px)}[appearance=native][verticalUsed=true][dir=ltr][_nghost-%COMP%]{--_viewport-padding-left: 0;--_viewport-padding-right: calc(var(--_scrollbar-thickness) * 1px)}[appearance=native][verticalUsed=true][dir=rtl][_nghost-%COMP%]{--_viewport-padding-left: calc(var(--_scrollbar-thickness) * 1px);--_viewport-padding-right: 0}[appearance=native][verticalUsed=true][position=invertY][dir=ltr][_nghost-%COMP%], [appearance=native][verticalUsed=true][position=invertAll][dir=ltr][_nghost-%COMP%]{--_viewport-padding-left: calc(var(--_scrollbar-thickness) * 1px);--_viewport-padding-right: 0}[appearance=native][verticalUsed=true][position=invertY][dir=rtl][_nghost-%COMP%], [appearance=native][verticalUsed=true][position=invertAll][dir=rtl][_nghost-%COMP%]{--_viewport-padding-left: 0;--_viewport-padding-right: calc(var(--_scrollbar-thickness) * 1px)}[appearance=native][horizontalUsed=true][_nghost-%COMP%]{--_viewport-padding-top: 0;--_viewport-padding-bottom: calc(var(--_scrollbar-thickness) * 1px)}[appearance=native][horizontalUsed=true][position=invertX][_nghost-%COMP%], [appearance=native][horizontalUsed=true][position=invertAll][_nghost-%COMP%]{--_viewport-padding-top: calc(var(--_scrollbar-thickness) * 1px);--_viewport-padding-bottom: 0}[visibility=hover][_nghost-%COMP%]{--_scrollbar-hover-opacity: 0;--_scrollbar-opacity-transition: opacity var(--scrollbar-hover-opacity-transition-leave-duration) var(--scrollbar-hover-opacity-transition-leave-delay)}[visibility=hover][_nghost-%COMP%]:hover, [visibility=hover][_nghost-%COMP%]:active, [visibility=hover][_nghost-%COMP%]:focus{--_scrollbar-hover-opacity: 1;--_scrollbar-opacity-transition: opacity var(--scrollbar-hover-opacity-transition-enter-duration)}[dir=ltr][_nghost-%COMP%] .scroll-reached-trigger-element[trigger=start], [dir=ltr][_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=start]{left:0;right:unset}[dir=ltr][_nghost-%COMP%] .scroll-reached-trigger-element[trigger=end], [dir=ltr][_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=end]{right:0;left:unset}[dir=rtl][_nghost-%COMP%] .scroll-reached-trigger-element[trigger=start], [dir=rtl][_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=start]{right:0;left:unset}[dir=rtl][_nghost-%COMP%] .scroll-reached-trigger-element[trigger=end], [dir=rtl][_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=end]{left:0;right:unset}[_nghost-%COMP%] .ng-scroll-reached-wrapper, [_nghost-%COMP%] .ng-scroll-dropped-wrapper, [_nghost-%COMP%] .scroll-reached-trigger-element, [_nghost-%COMP%] .scroll-dropped-trigger-element{position:absolute;-webkit-user-select:none;user-select:none;pointer-events:none;z-index:-9999}[_nghost-%COMP%] .ng-scroll-reached-wrapper, [_nghost-%COMP%] .ng-scroll-dropped-wrapper{visibility:hidden;inset:0;min-width:calc(var(--viewport-width) * 1px);min-height:calc(var(--viewport-height) * 1px)}[_nghost-%COMP%] [isHorizontallyScrollable=false] .scroll-reached-trigger-element[trigger=end], [_nghost-%COMP%] [isHorizontallyScrollable=false] .scroll-dropped-trigger-element[trigger=end]{display:none}[_nghost-%COMP%] [isVerticallyScrollable=false] .scroll-reached-trigger-element[trigger=bottom], [_nghost-%COMP%] [isVerticallyScrollable=false] .scroll-dropped-trigger-element[trigger=bottom]{display:none}[_nghost-%COMP%] .scroll-reached-trigger-element{background:red}[_nghost-%COMP%] .scroll-reached-trigger-element[trigger=top], [_nghost-%COMP%] .scroll-reached-trigger-element[trigger=bottom]{left:0;right:0}[_nghost-%COMP%] .scroll-reached-trigger-element[trigger=start], [_nghost-%COMP%] .scroll-reached-trigger-element[trigger=end]{top:0;bottom:0}[_nghost-%COMP%] .scroll-reached-trigger-element[trigger=top]{top:0;height:var(--reached-offset-top)}[_nghost-%COMP%] .scroll-reached-trigger-element[trigger=bottom]{bottom:0;height:var(--reached-offset-bottom)}[_nghost-%COMP%] .scroll-reached-trigger-element[trigger=start]{width:var(--reached-offset-start)}[_nghost-%COMP%] .scroll-reached-trigger-element[trigger=end]{width:var(--reached-offset-end)}[_nghost-%COMP%] .scroll-dropped-trigger-element[_ngcontent-%COMP%]{background:#00f}[_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=top][_ngcontent-%COMP%], [_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=bottom][_ngcontent-%COMP%]{left:0;right:0}[_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=start][_ngcontent-%COMP%], [_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=end][_ngcontent-%COMP%]{top:0;bottom:0}[_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=top][_ngcontent-%COMP%]{top:0;height:var(--dropped-offset-top)}[_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=bottom][_ngcontent-%COMP%]{bottom:0;height:var(--dropped-offset-bottom)}[_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=start][_ngcontent-%COMP%]{width:var(--dropped-offset-start)}[_nghost-%COMP%] .scroll-dropped-trigger-element[trigger=end][_ngcontent-%COMP%]{width:var(--dropped-offset-end)}[verticalUsed=true][_nghost-%COMP%]{--_timeline-scope: --scrollerY;--_animation-timeline-y: --scrollerY;--_viewport_scroll-timeline: --scrollerY y;--_scrollbar-y-thumb-transform-to-value: calc(var(--track-y-length) - var(--thumb-y-length))}[horizontalUsed=true][_nghost-%COMP%]{--_timeline-scope: --scrollerX;--_animation-timeline-x: --scrollerX;--_viewport_scroll-timeline: --scrollerX x;--_scrollbar-x-thumb-transform-to-value: calc(var(--track-x-length) - var(--thumb-x-length))}[verticalUsed=true][horizontalUsed=true][_nghost-%COMP%]{--_timeline-scope: --scrollerX, --scrollerY;--_viewport_scroll-timeline: --scrollerX x, --scrollerY y}[orientation=vertical][_nghost-%COMP%]{--_viewport-overflow: hidden auto;--_scrollbar-content-width: unset}[orientation=horizontal][_nghost-%COMP%]{--_viewport-overflow: auto hidden}[disableInteraction=true][_nghost-%COMP%]{--_scrollbar-pointer-events: none}[isVerticallyScrollable=false][_nghost-%COMP%]{--_vertical-thumb-display: none}[isHorizontallyScrollable=false][_nghost-%COMP%]{--_horizontal-thumb-display: none}[dragging=x][_nghost-%COMP%], [dragging=y][_nghost-%COMP%]{--_viewport-user-select: none}[horizontalUsed=true][_nghost-%COMP%]{--thumb-x-length: max(calc(var(--viewport-width) * var(--track-x-length) / var(--content-width)), var(--scrollbar-thumb-min-size))}[verticalUsed=true][_nghost-%COMP%]{--thumb-y-length: max(calc(var(--viewport-height) * var(--track-y-length) / var(--content-height)), var(--scrollbar-thumb-min-size))}[dragging=x][_nghost-%COMP%]{--_track-x-thickness: calc(var(--scrollbar-hover-thickness) * 1px);--_thumb-x-color: var(--scrollbar-thumb-hover-color)}[dragging=y][_nghost-%COMP%]{--_track-y-thickness: calc(var(--scrollbar-hover-thickness) * 1px);--_thumb-y-color: var(--scrollbar-thumb-hover-color)}[mobile=true][_nghost-%COMP%]{--_viewport-overscroll-behavior: var(--scrollbar-mobile-overscroll-behavior)}\"],\n changeDetection: 0\n });\n }\n }\n return NgScrollbar;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgScrollbarExt = /*#__PURE__*/(() => {\n class NgScrollbarExt extends NgScrollbarCore {\n constructor() {\n super(...arguments);\n this.renderer = inject(Renderer2);\n this.appRef = inject(ApplicationRef);\n }\n ngOnInit() {\n if (!this.skipInit) {\n this.detectExternalSelectors();\n }\n super.ngOnInit();\n }\n detectExternalSelectors() {\n let viewportElement;\n if (this.customViewport) {\n viewportElement = this.customViewport.nativeElement;\n } else {\n // If viewport selector was defined, query the element\n if (this.externalViewport) {\n viewportElement = this.nativeElement.querySelector(this.externalViewport);\n }\n if (!viewportElement) {\n console.error(`[NgScrollbar]: Could not find the viewport element for the provided selector \"${this.externalViewport}\"`);\n return;\n }\n }\n // If an external spacer selector is provided, attempt to query for it\n let spacerElement;\n if (this.externalSpacer) {\n spacerElement = this.nativeElement.querySelector(this.externalSpacer);\n if (!spacerElement) {\n console.error(`[NgScrollbar]: Spacer element not found for the provided selector \"${this.externalSpacer}\"`);\n return;\n }\n }\n // If an external content wrapper selector is provided, attempt to query for it\n let contentWrapperElement;\n if (this.externalContentWrapper && !this.skipInit) {\n contentWrapperElement = this.nativeElement.querySelector(this.externalContentWrapper);\n if (!contentWrapperElement) {\n console.error(`[NgScrollbar]: Content wrapper element not found for the provided selector \"${this.externalContentWrapper}\"`);\n return;\n }\n }\n // Make sure viewport element is defined to proceed\n if (viewportElement) {\n // If no external spacer or content wrapper is provided, create a content wrapper element\n if (!this.externalSpacer && !this.externalContentWrapper) {\n contentWrapperElement = this.renderer.createElement('div');\n // Move all content of the viewport into the content wrapper\n const childNodes = Array.from(viewportElement.childNodes);\n childNodes.forEach(node => this.renderer.appendChild(contentWrapperElement, node));\n // Append the content wrapper to the viewport\n this.renderer.appendChild(viewportElement, contentWrapperElement);\n }\n // Make sure content wrapper element is defined to proceed\n if (contentWrapperElement) {\n // Initialize viewport\n this.viewport.init(viewportElement, contentWrapperElement, spacerElement);\n // Attach scrollbars\n this.attachScrollbars();\n }\n }\n }\n attachScrollbars() {\n // Create the scrollbars component\n const scrollbarsRef = createComponent(Scrollbars, {\n environmentInjector: this.appRef.injector,\n elementInjector: Injector.create({\n providers: [{\n provide: NG_SCROLLBAR,\n useValue: this\n }]\n })\n });\n // Attach scrollbar to the content wrapper\n this.viewport.contentWrapperElement.appendChild(scrollbarsRef.location.nativeElement);\n // Attach the host view of the component to the main change detection tree, so that its lifecycle hooks run.\n this.appRef.attachView(scrollbarsRef.hostView);\n // Set the scrollbars instance\n this._scrollbars = scrollbarsRef.instance;\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgScrollbarExt_BaseFactory;\n return function NgScrollbarExt_Factory(t) {\n return (ɵNgScrollbarExt_BaseFactory || (ɵNgScrollbarExt_BaseFactory = i0.ɵɵgetInheritedFactory(NgScrollbarExt)))(t || NgScrollbarExt);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: NgScrollbarExt,\n selectors: [[\"ng-scrollbar\", \"externalViewport\", \"\"]],\n contentQueries: function NgScrollbarExt_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, ScrollViewport, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.customViewport = _t.first);\n }\n },\n hostAttrs: [\"ngSkipHydration\", \"true\"],\n hostVars: 2,\n hostBindings: function NgScrollbarExt_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"ng-scrollbar-external-viewport\", true);\n }\n },\n inputs: {\n externalViewport: \"externalViewport\",\n externalContentWrapper: \"externalContentWrapper\",\n externalSpacer: \"externalSpacer\",\n skipInit: [2, \"skipInit\", \"skipInit\", booleanAttribute]\n },\n exportAs: [\"ngScrollbar\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_SCROLLBAR,\n useExisting: NgScrollbarExt\n }, {\n provide: NgScrollbarCore,\n useExisting: NgScrollbar\n }]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n attrs: _c4,\n ngContentSelectors: _c3,\n decls: 1,\n vars: 0,\n template: function NgScrollbarExt_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n styles: [_c5],\n changeDetection: 0\n });\n }\n }\n return NgScrollbarExt;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet AsyncDetection = /*#__PURE__*/(() => {\n class AsyncDetection {\n constructor() {\n this.scrollbar = inject(NgScrollbarExt);\n this.zone = inject(NgZone);\n this.scrollbar.skipInit = true;\n }\n ngOnInit() {\n this.zone.runOutsideAngular(() => {\n this.subscription = mutationObserver(this.scrollbar.nativeElement, 100).subscribe(() => {\n if (!this.scrollbar.viewport.initialized()) {\n // Search for external viewport\n const viewportElement = this.scrollbar.nativeElement.querySelector(this.scrollbar.externalViewport);\n // Search for external content wrapper\n const contentWrapperElement = this.scrollbar.nativeElement.querySelector(this.scrollbar.externalContentWrapper);\n if (viewportElement && contentWrapperElement) {\n // If an external spacer selector is provided, search for it\n let spacerElement;\n if (this.scrollbar.externalSpacer) {\n spacerElement = this.scrollbar.nativeElement.querySelector(this.scrollbar.externalSpacer);\n }\n // Initialize viewport\n this.scrollbar.viewport.init(viewportElement, contentWrapperElement, spacerElement);\n // Attach scrollbars\n this.scrollbar.attachScrollbars();\n if (!this.asyncDetection) {\n this.subscription.unsubscribe();\n }\n }\n } else {\n const viewportElement = this.scrollbar.nativeElement.querySelector(this.scrollbar.externalViewport);\n const contentWrapperElement = this.scrollbar.nativeElement.querySelector(this.scrollbar.externalContentWrapper);\n if (!viewportElement || !contentWrapperElement) {\n this.scrollbar.viewport.nativeElement = null;\n this.scrollbar.viewport.contentWrapperElement = null;\n this.scrollbar.viewport.initialized.set(false);\n }\n }\n });\n });\n }\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n static {\n this.ɵfac = function AsyncDetection_Factory(t) {\n return new (t || AsyncDetection)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: AsyncDetection,\n selectors: [[\"ng-scrollbar\", \"externalViewport\", \"\", \"asyncDetection\", \"\"]],\n inputs: {\n asyncDetection: \"asyncDetection\"\n },\n standalone: true\n });\n }\n }\n return AsyncDetection;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgScrollbarModule = /*#__PURE__*/(() => {\n class NgScrollbarModule {\n static {\n this.ɵfac = function NgScrollbarModule_Factory(t) {\n return new (t || NgScrollbarModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: NgScrollbarModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return NgScrollbarModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction provideScrollbarOptions(options) {\n return [{\n provide: NG_SCROLLBAR_OPTIONS,\n useValue: options\n }];\n}\nfunction provideScrollbarPolyfill(url) {\n return [{\n provide: NG_SCROLLBAR_POLYFILL,\n useValue: url\n }];\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AsyncDetection, NG_SCROLLBAR, NG_SCROLLBAR_OPTIONS, NG_SCROLLBAR_POLYFILL, NgScrollbar, NgScrollbarExt, NgScrollbarModule, ScrollViewport, ScrollbarUpdateReason, provideScrollbarOptions, provideScrollbarPolyfill };\n"],"mappings":"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","names":["NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","i","newtonRaphsonIterate","aGuessT","currentSlope","LinearEasing","x","bezier","mY1","mY2","sampleValues","getTForX","intervalStart","currentSample","lastSample","dist","guessForT","initialSlope","SMOOTH_SCROLL_OPTIONS","InjectionToken","SmoothScrollManager","_SmoothScrollManager","inject","DOCUMENT","NgZone","__spreadValues","SMOOTH_SCROLL_OPTIONS","el","x","y","parent","coerceElement","Subject","context","Observable","subscriber","elapsed","value","destroyed","takeWhile","switchMap","resolve","merge","fromEvent","take","options","bezier","takeUntil","finalize","scrollable","customOptions","isRtl","__spreadProps","target","scrollableEl","targetEl","scrollableRect","targetRect","t","ɵɵdefineInjectable","_c0","ScrollbarY_Conditional_5_Template","rf","ctx","ɵɵelement","ctx_r0","ɵɵnextContext","ɵɵclassMapInterpolate1","ɵɵadvance","ScrollbarX_Conditional_5_Template","_c1","Scrollbars_Conditional_0_Template","Scrollbars_Conditional_1_Template","_c2","_c3","_c4","_c5","ScrollViewport","_ScrollViewport","inject","ElementRef","t","ɵɵdefineDirective","ScrollbarUpdateReason","NG_SCROLLBAR_OPTIONS","InjectionToken","NG_SCROLLBAR_POLYFILL","resizeObserver","element","contentWrapper","throttleDuration","reason","stream","Observable","observer","throttleTime","mutationObserver","preventSelection","doc","tap","enableSelection","stopPropagation","e","ViewportClasses","ViewportAdapter","signal","viewportElement","contentElement","spacerElement","value","NG_SCROLLBAR","defaultOptions","NgScrollbarCore","_NgScrollbarCore","__spreadValues","NgZone","Platform","Injector","Directionality","SmoothScrollManager","input","booleanAttribute","numberAttribute","computed","verticalUsed","horizontalUsed","isVerticallyScrollable","isHorizontallyScrollable","orientation","visibility","viewport","EventEmitter","runInInjectionContext","toSignal","map","effect","onCleanup","options","target","ɵɵattribute","ɵɵclassProp","ɵɵProvidersFeature","ɵɵInputTransformsFeature","scrollTimelinePolyfillUrl","ScrollbarManager","_ScrollbarManager","isPlatformBrowser","PLATFORM_ID","DOCUMENT","__async","script","resolve","reject","error","ɵɵdefineInjectable","SCROLLBAR_CONTROL","ScrollbarAdapter","_ScrollbarAdapter","PointerEventsAdapter","_PointerEventsAdapter","ThumbAdapter","_ThumbAdapter","fromEvent","switchMap","startTrackMax","startScrollMax","dragStart","of","dragging","dragEnd","startEvent","startOffset","moveEvent","moveClient","trackRelativeOffset","scrollPosition","takeUntil","startPolyfill","TrackAdapter","ɵɵInheritDefinitionFeature","ScrollTimeline","source","axis","_TrackAdapter","pointerDown$","pointerUp$","pointerEnter$","pointerLeave$","pointerOver$","merge","startWith","pointerMove$","delay","over","currDirection","sameDirection","EMPTY","scrollForwardIncrement","scrollBackwardIncrement","position","takeWhile","dirIndex","ɵɵcontentQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","TrackXDirective","_TrackXDirective","start","fromPromise","TrackYDirective","_TrackYDirective","top","ɵTrackYDirective_BaseFactory","ɵɵgetInheritedFactory","ThumbXDirective","_ThumbXDirective","ɵThumbXDirective_BaseFactory","ThumbYDirective","_ThumbYDirective","ɵThumbYDirective_BaseFactory","ScrollbarButton","_ScrollbarButton","scrollOffset","scrollMax","scrollBy","offset","pointerUpOrLeave$","dir","interval","animationFrameScheduler","ɵScrollbarButton_BaseFactory","ɵɵdefineComponent","ɵɵStandaloneFeature","ɵɵelementStart","ɵɵnamespaceSVG","ɵɵelementEnd","ScrollbarY","_ScrollbarY","duration","ɵScrollbarY_BaseFactory","ɵɵtemplate","ɵɵconditional","ScrollbarX","_ScrollbarX","left","Scrollbars","_Scrollbars","NgScrollbar","_NgScrollbar","ɵNgScrollbar_BaseFactory","ɵɵviewQuery","ɵɵHostDirectivesFeature","ɵɵprojectionDef","ɵɵprojection","NgScrollbarExt","_NgScrollbarExt","Renderer2","ApplicationRef","contentWrapperElement","node","scrollbarsRef","createComponent","ɵNgScrollbarExt_BaseFactory","AsyncDetection","_AsyncDetection","NgScrollbarModule","_NgScrollbarModule","ɵɵdefineNgModule","ɵɵdefineInjector"],"x_google_ignoreList":[0,1]}