{"version":3,"sources":["node_modules/@angular/cdk/fesm2022/platform-610a08ae.mjs","node_modules/@angular/cdk/fesm2022/shadow-dom-9f403d00.mjs","node_modules/@angular/cdk/fesm2022/backwards-compatibility-bcbe473e.mjs","node_modules/@angular/cdk/fesm2022/directionality-0a678adc.mjs","node_modules/@angular/cdk/fesm2022/bidi-module-56dd006c.mjs","node_modules/@angular/cdk/fesm2022/observers/private.mjs","node_modules/@angular/cdk/fesm2022/element-08c51fcd.mjs","node_modules/@angular/cdk/fesm2022/array-88e1bec3.mjs","node_modules/ngx-scrollbar/fesm2022/ngx-scrollbar-smooth-scroll.mjs","node_modules/@angular/cdk/fesm2022/observe-content-a5002af1.mjs","node_modules/ngx-scrollbar/fesm2022/ngx-scrollbar.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { inject, PLATFORM_ID, Injectable } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n// Whether the current platform supports the V8 Break Iterator. The V8 check\n// is necessary to detect all Blink based browsers.\nlet hasV8BreakIterator;\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\n// the consumer is providing a polyfilled `Map`. See:\n// https://github.com/Microsoft/ChakraCore/issues/3189\n// https://github.com/angular/components/issues/15687\ntry {\n hasV8BreakIterator = typeof Intl !== 'undefined' && Intl.v8BreakIterator;\n} catch {\n hasV8BreakIterator = false;\n}\n/**\n * Service to detect the current platform by comparing the userAgent strings and\n * checking browser-specific global properties.\n */\nlet Platform = /*#__PURE__*/(() => {\n class Platform {\n _platformId = inject(PLATFORM_ID);\n // We want to use the Angular platform check because if the Document is shimmed\n // without the navigator, the following checks will fail. This is preferred because\n // sometimes the Document may be shimmed without the user's knowledge or intention\n /** Whether the Angular application is being rendered in the browser. */\n isBrowser = this._platformId ? isPlatformBrowser(this._platformId) : typeof document === 'object' && !!document;\n /** Whether the current browser is Microsoft Edge. */\n EDGE = this.isBrowser && /(edge)/i.test(navigator.userAgent);\n /** Whether the current rendering engine is Microsoft Trident. */\n TRIDENT = this.isBrowser && /(msie|trident)/i.test(navigator.userAgent);\n // EdgeHTML and Trident mock Blink specific things and need to be excluded from this check.\n /** Whether the current rendering engine is Blink. */\n BLINK = this.isBrowser && !!(window.chrome || hasV8BreakIterator) && typeof CSS !== 'undefined' && !this.EDGE && !this.TRIDENT;\n // Webkit is part of the userAgent in EdgeHTML, Blink and Trident. Therefore we need to\n // ensure that Webkit runs standalone and is not used as another engine's base.\n /** Whether the current rendering engine is WebKit. */\n WEBKIT = this.isBrowser && /AppleWebKit/i.test(navigator.userAgent) && !this.BLINK && !this.EDGE && !this.TRIDENT;\n /** Whether the current platform is Apple iOS. */\n IOS = this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) && !('MSStream' in window);\n // It's difficult to detect the plain Gecko engine, because most of the browsers identify\n // them self as Gecko-like browsers and modify the userAgent's according to that.\n // Since we only cover one explicit Firefox case, we can simply check for Firefox\n // instead of having an unstable check for Gecko.\n /** Whether the current browser is Firefox. */\n FIREFOX = this.isBrowser && /(firefox|minefield)/i.test(navigator.userAgent);\n /** Whether the current platform is Android. */\n // Trident on mobile adds the android platform to the userAgent to trick detections.\n ANDROID = this.isBrowser && /android/i.test(navigator.userAgent) && !this.TRIDENT;\n // Safari browsers will include the Safari keyword in their userAgent. Some browsers may fake\n // this and just place the Safari keyword in the userAgent. To be more safe about Safari every\n // Safari browser should also use Webkit as its layout engine.\n /** Whether the current browser is Safari. */\n SAFARI = this.isBrowser && /safari/i.test(navigator.userAgent) && this.WEBKIT;\n constructor() {}\n static ɵfac = function Platform_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Platform)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: Platform,\n factory: Platform.ɵfac,\n providedIn: 'root'\n });\n }\n return Platform;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { Platform as P };\n","let shadowDomIsSupported;\n/** Checks whether the user's browser support Shadow DOM. */\nfunction _supportsShadowDom() {\n if (shadowDomIsSupported == null) {\n const head = typeof document !== 'undefined' ? document.head : null;\n shadowDomIsSupported = !!(head && (head.createShadowRoot || head.attachShadow));\n }\n return shadowDomIsSupported;\n}\n/** Gets the shadow root of an element, if supported and the element is inside the Shadow DOM. */\nfunction _getShadowRoot(element) {\n if (_supportsShadowDom()) {\n const rootNode = element.getRootNode ? element.getRootNode() : null;\n // Note that this should be caught by `_supportsShadowDom`, but some\n // teams have been able to hit this code path on unsupported browsers.\n if (typeof ShadowRoot !== 'undefined' && ShadowRoot && rootNode instanceof ShadowRoot) {\n return rootNode;\n }\n }\n return null;\n}\n/**\n * Gets the currently-focused element on the page while\n * also piercing through Shadow DOM boundaries.\n */\nfunction _getFocusedElementPierceShadowDom() {\n let activeElement = typeof document !== 'undefined' && document ? document.activeElement : null;\n while (activeElement && activeElement.shadowRoot) {\n const newActiveElement = activeElement.shadowRoot.activeElement;\n if (newActiveElement === activeElement) {\n break;\n } else {\n activeElement = newActiveElement;\n }\n }\n return activeElement;\n}\n/** Gets the target of an event while accounting for Shadow DOM. */\nfunction _getEventTarget(event) {\n // If an event is bound outside the Shadow DOM, the `event.target` will\n // point to the shadow root so we have to use `composedPath` instead.\n return event.composedPath ? event.composedPath()[0] : event.target;\n}\nexport { _getEventTarget as _, _getShadowRoot as a, _getFocusedElementPierceShadowDom as b, _supportsShadowDom as c };\n","import { VERSION } from '@angular/core';\n\n// TODO(crisbeto): remove this function when making breaking changes for v20.\n/**\n * Binds an event listener with specific options in a backwards-compatible way.\n * This function is necessary, because `Renderer2.listen` only supports listener options\n * after 19.1 and during the v19 period we support any 19.x version.\n * @docs-private\n */\nfunction _bindEventWithOptions(renderer, target, eventName, callback, options) {\n const major = parseInt(VERSION.major);\n const minor = parseInt(VERSION.minor);\n // Event options in `listen` are only supported in 19.1 and beyond.\n // We also allow 0.0.x, because that indicates a build at HEAD.\n if (major > 19 || major === 19 && minor > 0 || major === 0 && minor === 0) {\n return renderer.listen(target, eventName, callback, options);\n }\n target.addEventListener(eventName, callback, options);\n return () => {\n target.removeEventListener(eventName, callback, options);\n };\n}\nexport { _bindEventWithOptions as _ };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, inject, EventEmitter, Injectable } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * Injection token used to inject the document into Directionality.\n * This is used so that the value can be faked in tests.\n *\n * We can't use the real document in tests because changing the real `dir` causes geometry-based\n * tests in Safari to fail.\n *\n * We also can't re-provide the DOCUMENT token from platform-browser because the unit tests\n * themselves use things like `querySelector` in test code.\n *\n * This token is defined in a separate file from Directionality as a workaround for\n * https://github.com/angular/angular/issues/22559\n *\n * @docs-private\n */\nconst DIR_DOCUMENT = /*#__PURE__*/new InjectionToken('cdk-dir-doc', {\n providedIn: 'root',\n factory: DIR_DOCUMENT_FACTORY\n});\n/**\n * @docs-private\n * @deprecated No longer used, will be removed.\n * @breaking-change 21.0.0\n */\nfunction DIR_DOCUMENT_FACTORY() {\n return inject(DOCUMENT);\n}\n\n/** Regex that matches locales with an RTL script. Taken from `goog.i18n.bidi.isRtlLanguage`. */\nconst RTL_LOCALE_PATTERN = /^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;\n/** Resolves a string value to a specific direction. */\nfunction _resolveDirectionality(rawValue) {\n const value = rawValue?.toLowerCase() || '';\n if (value === 'auto' && typeof navigator !== 'undefined' && navigator?.language) {\n return RTL_LOCALE_PATTERN.test(navigator.language) ? 'rtl' : 'ltr';\n }\n return value === 'rtl' ? 'rtl' : 'ltr';\n}\n/**\n * The directionality (LTR / RTL) context for the application (or a subtree of it).\n * Exposes the current direction and a stream of direction changes.\n */\nlet Directionality = /*#__PURE__*/(() => {\n class Directionality {\n /** The current 'ltr' or 'rtl' value. */\n value = 'ltr';\n /** Stream that emits whenever the 'ltr' / 'rtl' state changes. */\n change = new EventEmitter();\n constructor() {\n const _document = inject(DIR_DOCUMENT, {\n optional: true\n });\n if (_document) {\n const bodyDir = _document.body ? _document.body.dir : null;\n const htmlDir = _document.documentElement ? _document.documentElement.dir : null;\n this.value = _resolveDirectionality(bodyDir || htmlDir || 'ltr');\n }\n }\n ngOnDestroy() {\n this.change.complete();\n }\n static ɵfac = function Directionality_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Directionality)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: Directionality,\n factory: Directionality.ɵfac,\n providedIn: 'root'\n });\n }\n return Directionality;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { Directionality as D, _resolveDirectionality as _, DIR_DOCUMENT as a };\n","import * as i0 from '@angular/core';\nimport { EventEmitter, Directive, Output, Input, NgModule } from '@angular/core';\nimport { _ as _resolveDirectionality, D as Directionality } from './directionality-0a678adc.mjs';\n\n/**\n * Directive to listen for changes of direction of part of the DOM.\n *\n * Provides itself as Directionality such that descendant directives only need to ever inject\n * Directionality to get the closest direction.\n */\nlet Dir = /*#__PURE__*/(() => {\n class Dir {\n /** Normalized direction that accounts for invalid/unsupported values. */\n _dir = 'ltr';\n /** Whether the `value` has been set to its initial value. */\n _isInitialized = false;\n /** Direction as passed in by the consumer. */\n _rawDir;\n /** Event emitted when the direction changes. */\n change = new EventEmitter();\n /** @docs-private */\n get dir() {\n return this._dir;\n }\n set dir(value) {\n const previousValue = this._dir;\n // Note: `_resolveDirectionality` resolves the language based on the browser's language,\n // whereas the browser does it based on the content of the element. Since doing so based\n // on the content can be expensive, for now we're doing the simpler matching.\n this._dir = _resolveDirectionality(value);\n this._rawDir = value;\n if (previousValue !== this._dir && this._isInitialized) {\n this.change.emit(this._dir);\n }\n }\n /** Current layout direction of the element. */\n get value() {\n return this.dir;\n }\n /** Initialize once default value has been set. */\n ngAfterContentInit() {\n this._isInitialized = true;\n }\n ngOnDestroy() {\n this.change.complete();\n }\n static ɵfac = function Dir_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || Dir)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: Dir,\n selectors: [[\"\", \"dir\", \"\"]],\n hostVars: 1,\n hostBindings: function Dir_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"dir\", ctx._rawDir);\n }\n },\n inputs: {\n dir: \"dir\"\n },\n outputs: {\n change: \"dirChange\"\n },\n exportAs: [\"dir\"],\n features: [i0.ɵɵProvidersFeature([{\n provide: Directionality,\n useExisting: Dir\n }])]\n });\n }\n return Dir;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet BidiModule = /*#__PURE__*/(() => {\n class BidiModule {\n static ɵfac = function BidiModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BidiModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: BidiModule\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n return BidiModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { BidiModule as B, Dir as D };\n","import * as i0 from '@angular/core';\nimport { inject, NgZone, RendererFactory2, Injectable } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\nimport { filter, shareReplay, takeUntil } from 'rxjs/operators';\n\n/**\n * Handler that logs \"ResizeObserver loop limit exceeded\" errors.\n * These errors are not shown in the Chrome console, so we log them to ensure developers are aware.\n * @param e The error\n */\nconst loopLimitExceededErrorHandler = e => {\n if (e instanceof ErrorEvent && e.message === 'ResizeObserver loop limit exceeded') {\n console.error(`${e.message}. This could indicate a performance issue with your app. See https://github.com/WICG/resize-observer/blob/master/explainer.md#error-handling`);\n }\n};\n/**\n * A shared ResizeObserver to be used for a particular box type (content-box, border-box, or\n * device-pixel-content-box)\n */\nclass SingleBoxSharedResizeObserver {\n _box;\n /** Stream that emits when the shared observer is destroyed. */\n _destroyed = /*#__PURE__*/new Subject();\n /** Stream of all events from the ResizeObserver. */\n _resizeSubject = /*#__PURE__*/new Subject();\n /** ResizeObserver used to observe element resize events. */\n _resizeObserver;\n /** A map of elements to streams of their resize events. */\n _elementObservables = /*#__PURE__*/new Map();\n constructor(/** The box type to observe for resizes. */\n _box) {\n this._box = _box;\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(entries => this._resizeSubject.next(entries));\n }\n }\n /**\n * Gets a stream of resize events for the given element.\n * @param target The element to observe.\n * @return The stream of resize events for the element.\n */\n observe(target) {\n if (!this._elementObservables.has(target)) {\n this._elementObservables.set(target, new Observable(observer => {\n const subscription = this._resizeSubject.subscribe(observer);\n this._resizeObserver?.observe(target, {\n box: this._box\n });\n return () => {\n this._resizeObserver?.unobserve(target);\n subscription.unsubscribe();\n this._elementObservables.delete(target);\n };\n }).pipe(filter(entries => entries.some(entry => entry.target === target)),\n // Share a replay of the last event so that subsequent calls to observe the same element\n // receive initial sizing info like the first one. Also enable ref counting so the\n // element will be automatically unobserved when there are no more subscriptions.\n shareReplay({\n bufferSize: 1,\n refCount: true\n }), takeUntil(this._destroyed)));\n }\n return this._elementObservables.get(target);\n }\n /** Destroys this instance. */\n destroy() {\n this._destroyed.next();\n this._destroyed.complete();\n this._resizeSubject.complete();\n this._elementObservables.clear();\n }\n}\n/**\n * Allows observing resize events on multiple elements using a shared set of ResizeObserver.\n * Sharing a ResizeObserver instance is recommended for better performance (see\n * https://github.com/WICG/resize-observer/issues/59).\n *\n * Rather than share a single `ResizeObserver`, this class creates one `ResizeObserver` per type\n * of observed box ('content-box', 'border-box', and 'device-pixel-content-box'). This avoids\n * later calls to `observe` with a different box type from influencing the events dispatched to\n * earlier calls.\n */\nlet SharedResizeObserver = /*#__PURE__*/(() => {\n class SharedResizeObserver {\n _cleanupErrorListener;\n /** Map of box type to shared resize observer. */\n _observers = new Map();\n /** The Angular zone. */\n _ngZone = inject(NgZone);\n constructor() {\n if (typeof ResizeObserver !== 'undefined' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n this._ngZone.runOutsideAngular(() => {\n const renderer = inject(RendererFactory2).createRenderer(null, null);\n this._cleanupErrorListener = renderer.listen('window', 'error', loopLimitExceededErrorHandler);\n });\n }\n }\n ngOnDestroy() {\n for (const [, observer] of this._observers) {\n observer.destroy();\n }\n this._observers.clear();\n this._cleanupErrorListener?.();\n }\n /**\n * Gets a stream of resize events for the given target element and box type.\n * @param target The element to observe for resizes.\n * @param options Options to pass to the `ResizeObserver`\n * @return The stream of resize events for the element.\n */\n observe(target, options) {\n const box = options?.box || 'content-box';\n if (!this._observers.has(box)) {\n this._observers.set(box, new SingleBoxSharedResizeObserver(box));\n }\n return this._observers.get(box).observe(target);\n }\n static ɵfac = function SharedResizeObserver_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || SharedResizeObserver)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SharedResizeObserver,\n factory: SharedResizeObserver.ɵfac,\n providedIn: 'root'\n });\n }\n return SharedResizeObserver;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { SharedResizeObserver };\n","import { ElementRef } from '@angular/core';\nfunction coerceNumberProperty(value, fallbackValue = 0) {\n if (_isNumberValue(value)) {\n return Number(value);\n }\n return arguments.length === 2 ? fallbackValue : 0;\n}\n/**\n * Whether the provided value is considered a number.\n * @docs-private\n */\nfunction _isNumberValue(value) {\n // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,\n // and other non-number values as NaN, where Number just uses 0) but it considers the string\n // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.\n return !isNaN(parseFloat(value)) && !isNaN(Number(value));\n}\n\n/**\n * Coerces an ElementRef or an Element into an element.\n * Useful for APIs that can accept either a ref or the native element itself.\n */\nfunction coerceElement(elementOrRef) {\n return elementOrRef instanceof ElementRef ? elementOrRef.nativeElement : elementOrRef;\n}\nexport { _isNumberValue as _, coerceNumberProperty as a, coerceElement as c };\n","function coerceArray(value) {\n return Array.isArray(value) ? value : [value];\n}\nexport { coerceArray as c };\n","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 defaultSmoothScrollOptions = {\n duration: 468,\n easing: {\n x1: 0.42,\n y1: 0,\n x2: 0.58,\n y2: 1\n }\n};\nconst SMOOTH_SCROLL_OPTIONS = new InjectionToken('SMOOTH_SCROLL_OPTIONS', {\n providedIn: 'root',\n factory: () => defaultSmoothScrollOptions\n});\nfunction provideSmoothScrollOptions(options) {\n return [{\n provide: SMOOTH_SCROLL_OPTIONS,\n useValue: {\n ...defaultSmoothScrollOptions,\n ...options\n }\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 = inject(SMOOTH_SCROLL_OPTIONS);\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 const isRtl = getComputedStyle(scrollableEl).direction === 'rtl';\n if (!targetEl || !scrollableEl) {\n return Promise.resolve();\n }\n const scrollableRect = scrollableEl.getBoundingClientRect();\n const targetRect = targetEl.getBoundingClientRect();\n const options = {\n ...this._defaultOptions,\n ...customOptions,\n ...{\n top: targetRect.top + scrollableEl.scrollTop - scrollableRect.top + (customOptions.top || 0),\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 if (customOptions.center) {\n // Calculate the center of the container\n const containerCenterX = scrollableRect.left + scrollableRect.width / 2;\n const containerCenterY = scrollableRect.top + scrollableRect.height / 2;\n // Calculate the target's position relative to the container\n const targetCenterX = targetRect.left + targetRect.width / 2;\n const targetCenterY = targetRect.top + targetRect.height / 2;\n // Calculate the scroll position to center the target element in the container\n options.left = targetCenterX - containerCenterX + scrollableEl.scrollLeft;\n options.top = targetCenterY - containerCenterY + scrollableEl.scrollTop;\n return this.applyScrollToOptions(scrollableEl, options);\n }\n if (options.bottom != null) {\n const bottomEdge = scrollableRect.height - targetRect.height;\n options.top = targetRect.top + scrollableEl.scrollTop - scrollableRect.top - bottomEdge + (customOptions.bottom || 0);\n }\n // Rewrite the right offset as a left offset.\n if (isRtl) {\n options.left = targetRect.left - scrollableRect.left + scrollableEl.scrollLeft + (options.left || 0);\n if (options.right != null) {\n options.left = targetRect.right - scrollableRect.left + scrollableEl.scrollLeft - scrollableRect.width + (options.right || 0);\n }\n } else {\n options.left = targetRect.left - scrollableRect.left + scrollableEl.scrollLeft + (options.left || 0);\n if (options.right != null) {\n options.left = targetRect.right - scrollableRect.left + scrollableEl.scrollLeft - scrollableRect.width + (options.right || 0);\n }\n }\n const computedOptions = {\n top: options.top,\n left: options.left,\n easing: options.easing,\n duration: options.duration\n };\n return this.applyScrollToOptions(scrollableEl, computedOptions);\n }\n static {\n this.ɵfac = function SmoothScrollManager_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || 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(__ngFactoryType__) {\n return new (__ngFactoryType__ || SmoothScroll)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: SmoothScroll,\n selectors: [[\"\", \"smoothScroll\", \"\"]],\n exportAs: [\"smoothScroll\"]\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 { Injectable, inject, NgZone, ElementRef, EventEmitter, booleanAttribute, Directive, Output, Input, NgModule } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { map, filter, debounceTime } from 'rxjs/operators';\nimport { a as coerceNumberProperty, c as coerceElement } from './element-08c51fcd.mjs';\n\n// Angular may add, remove, or edit comment nodes during change detection. We don't care about\n// these changes because they don't affect the user-preceived content, and worse it can cause\n// infinite change detection cycles where the change detection updates a comment, triggering the\n// MutationObserver, triggering another change detection and kicking the cycle off again.\nfunction shouldIgnoreRecord(record) {\n // Ignore changes to comment text.\n if (record.type === 'characterData' && record.target instanceof Comment) {\n return true;\n }\n // Ignore addition / removal of comments.\n if (record.type === 'childList') {\n for (let i = 0; i < record.addedNodes.length; i++) {\n if (!(record.addedNodes[i] instanceof Comment)) {\n return false;\n }\n }\n for (let i = 0; i < record.removedNodes.length; i++) {\n if (!(record.removedNodes[i] instanceof Comment)) {\n return false;\n }\n }\n return true;\n }\n // Observe everything else.\n return false;\n}\n/**\n * Factory that creates a new MutationObserver and allows us to stub it out in unit tests.\n * @docs-private\n */\nlet MutationObserverFactory = /*#__PURE__*/(() => {\n class MutationObserverFactory {\n create(callback) {\n return typeof MutationObserver === 'undefined' ? null : new MutationObserver(callback);\n }\n static ɵfac = function MutationObserverFactory_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MutationObserverFactory)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MutationObserverFactory,\n factory: MutationObserverFactory.ɵfac,\n providedIn: 'root'\n });\n }\n return MutationObserverFactory;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** An injectable service that allows watching elements for changes to their content. */\nlet ContentObserver = /*#__PURE__*/(() => {\n class ContentObserver {\n _mutationObserverFactory = inject(MutationObserverFactory);\n /** Keeps track of the existing MutationObservers so they can be reused. */\n _observedElements = new Map();\n _ngZone = inject(NgZone);\n constructor() {}\n ngOnDestroy() {\n this._observedElements.forEach((_, element) => this._cleanupObserver(element));\n }\n observe(elementOrRef) {\n const element = coerceElement(elementOrRef);\n return new Observable(observer => {\n const stream = this._observeElement(element);\n const subscription = stream.pipe(map(records => records.filter(record => !shouldIgnoreRecord(record))), filter(records => !!records.length)).subscribe(records => {\n this._ngZone.run(() => {\n observer.next(records);\n });\n });\n return () => {\n subscription.unsubscribe();\n this._unobserveElement(element);\n };\n });\n }\n /**\n * Observes the given element by using the existing MutationObserver if available, or creating a\n * new one if not.\n */\n _observeElement(element) {\n return this._ngZone.runOutsideAngular(() => {\n if (!this._observedElements.has(element)) {\n const stream = new Subject();\n const observer = this._mutationObserverFactory.create(mutations => stream.next(mutations));\n if (observer) {\n observer.observe(element, {\n characterData: true,\n childList: true,\n subtree: true\n });\n }\n this._observedElements.set(element, {\n observer,\n stream,\n count: 1\n });\n } else {\n this._observedElements.get(element).count++;\n }\n return this._observedElements.get(element).stream;\n });\n }\n /**\n * Un-observes the given element and cleans up the underlying MutationObserver if nobody else is\n * observing this element.\n */\n _unobserveElement(element) {\n if (this._observedElements.has(element)) {\n this._observedElements.get(element).count--;\n if (!this._observedElements.get(element).count) {\n this._cleanupObserver(element);\n }\n }\n }\n /** Clean up the underlying MutationObserver for the specified element. */\n _cleanupObserver(element) {\n if (this._observedElements.has(element)) {\n const {\n observer,\n stream\n } = this._observedElements.get(element);\n if (observer) {\n observer.disconnect();\n }\n stream.complete();\n this._observedElements.delete(element);\n }\n }\n static ɵfac = function ContentObserver_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ContentObserver)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ContentObserver,\n factory: ContentObserver.ɵfac,\n providedIn: 'root'\n });\n }\n return ContentObserver;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Directive that triggers a callback whenever the content of\n * its associated element has changed.\n */\nlet CdkObserveContent = /*#__PURE__*/(() => {\n class CdkObserveContent {\n _contentObserver = inject(ContentObserver);\n _elementRef = inject(ElementRef);\n /** Event emitted for each change in the element's content. */\n event = new EventEmitter();\n /**\n * Whether observing content is disabled. This option can be used\n * to disconnect the underlying MutationObserver until it is needed.\n */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = value;\n this._disabled ? this._unsubscribe() : this._subscribe();\n }\n _disabled = false;\n /** Debounce interval for emitting the changes. */\n get debounce() {\n return this._debounce;\n }\n set debounce(value) {\n this._debounce = coerceNumberProperty(value);\n this._subscribe();\n }\n _debounce;\n _currentSubscription = null;\n constructor() {}\n ngAfterContentInit() {\n if (!this._currentSubscription && !this.disabled) {\n this._subscribe();\n }\n }\n ngOnDestroy() {\n this._unsubscribe();\n }\n _subscribe() {\n this._unsubscribe();\n const stream = this._contentObserver.observe(this._elementRef);\n this._currentSubscription = (this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream).subscribe(this.event);\n }\n _unsubscribe() {\n this._currentSubscription?.unsubscribe();\n }\n static ɵfac = function CdkObserveContent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkObserveContent)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkObserveContent,\n selectors: [[\"\", \"cdkObserveContent\", \"\"]],\n inputs: {\n disabled: [2, \"cdkObserveContentDisabled\", \"disabled\", booleanAttribute],\n debounce: \"debounce\"\n },\n outputs: {\n event: \"cdkObserveContent\"\n },\n exportAs: [\"cdkObserveContent\"]\n });\n }\n return CdkObserveContent;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ObserversModule = /*#__PURE__*/(() => {\n class ObserversModule {\n static ɵfac = function ObserversModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ObserversModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: ObserversModule\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [MutationObserverFactory]\n });\n }\n return ObserversModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { ContentObserver as C, MutationObserverFactory as M, ObserversModule as O, CdkObserveContent as a };\n","import * as i0 from '@angular/core';\nimport { inject, ElementRef, Directive, signal, Injectable, InjectionToken, NgZone, input, booleanAttribute, numberAttribute, computed, output, afterRenderEffect, untracked, effect, PLATFORM_ID, Component, ChangeDetectionStrategy, viewChild, Renderer2, ApplicationRef, linkedSignal, contentChild, createComponent, Injector, NgModule, makeEnvironmentProviders } from '@angular/core';\nimport { tap, throttleTime, combineLatest, fromEvent, map, merge, startWith, switchMap, takeUntil, delay, EMPTY, takeWhile, from, of, interval, animationFrameScheduler } from 'rxjs';\nimport { Platform } from '@angular/cdk/platform';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { SmoothScrollManager } from 'ngx-scrollbar/smooth-scroll';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { ContentObserver } from '@angular/cdk/observers';\nconst _c0 = [\"scrollbarButton\", \"\"];\nfunction ScrollbarY_Conditional_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"button\", 4)(1, \"button\", 5);\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_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"button\", 4)(1, \"button\", 5);\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);pointer-events:var(--_scrollbar-pointer-events)}.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);transition:var(--INTERNAL-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(--INTERNAL-scrollbar-track-color);border-radius:var(--INTERNAL-scrollbar-border-radius);cursor:default;z-index:1;order:2}.ng-scrollbar-thumb[_ngcontent-%COMP%]{box-sizing:border-box;position:absolute;transition:var(--INTERNAL-scrollbar-thumb-transition);border-radius:var(--INTERNAL-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%;--INTERNAL-scrollbar-border-radius: var(--scrollbar-border-radius, 0px);--INTERNAL-scrollbar-thickness: var(--scrollbar-thickness, 5);--INTERNAL-scrollbar-offset: var(--scrollbar-offset, 0);--INTERNAL-scrollbar-track-wrapper-transition: var(--scrollbar-track-wrapper-transition, width 60ms linear, height 60ms linear);--INTERNAL-scrollbar-track-color: var(--scrollbar-track-color, transparent);--INTERNAL-scrollbar-thumb-color: var(--scrollbar-thumb-color, rgb(0 0 0 / 20%));--INTERNAL-scrollbar-thumb-hover-color: var(--scrollbar-thumb-hover-color, var(--INTERNAL-scrollbar-thumb-color));--INTERNAL-scrollbar-hover-thickness: var(--scrollbar-hover-thickness, var(--INTERNAL-scrollbar-thickness));--INTERNAL-scrollbar-thumb-transition: var(--scrollbar-thumb-transition, none);--INTERNAL-scrollbar-thumb-min-size: var(--scrollbar-thumb-min-size, 20);--INTERNAL-scrollbar-button-color: var(--scrollbar-button-color, var(--INTERNAL-scrollbar-thumb-color));--INTERNAL-scrollbar-button-hover-color: var(--scrollbar-button-hover-color, var(--INTERNAL-scrollbar-button-color));--INTERNAL-scrollbar-button-active-color: var(--scrollbar-button-active-color, var(--INTERNAL-scrollbar-button-hover-color));--INTERNAL-scrollbar-button-fill: var(--scrollbar-button-fill, white);--INTERNAL-scrollbar-button-hover-fill: var(--scrollbar-button-hover-fill, var(--INTERNAL-scrollbar-button-fill));--INTERNAL-scrollbar-button-active-fill: var(--scrollbar-button-active-fill, var(--INTERNAL-scrollbar-button-hover-fill));--INTERNAL-scrollbar-button-size: var(--scrollbar-button-size, 20px);--INTERNAL-scrollbar-hover-opacity-transition-enter-duration: var(--scrollbar-hover-opacity-transition-enter-duration, 0);--INTERNAL-scrollbar-hover-opacity-transition-leave-duration: var(--scrollbar-hover-opacity-transition-leave-duration, .4s);--INTERNAL-scrollbar-hover-opacity-transition-leave-delay: var(--scrollbar-hover-opacity-transition-leave-delay, 1s);--INTERNAL-scrollbar-overscroll-behavior: var(--scrollbar-overscroll-behavior, initial);--INTERNAL-scrollbar-mobile-overscroll-behavior: var(--scrollbar-mobile-overscroll-behavior, none);--_scrollbar-thickness: calc(var(--INTERNAL-scrollbar-thickness) + var(--INTERNAL-scrollbar-offset) * 2);--_scrollbar-pointer-events: auto;--_scrollbar-offset-px: calc(var(--INTERNAL-scrollbar-offset) * 1px);--_scrollbar-thickness-px: calc(var(--INTERNAL-scrollbar-thickness) * 1px);--_scrollbar-hover-thickness-px: calc(var(--INTERNAL-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;--_viewport-pointer-events: auto;--_thumb-x-color: var(--INTERNAL-scrollbar-thumb-color);--_thumb-y-color: var(--INTERNAL-scrollbar-thumb-color);--_track-y-thickness: var(--_scrollbar-thickness-px);--_track-x-thickness: var(--_scrollbar-thickness-px);--_viewport-overscroll-behavior: var(--INTERNAL-scrollbar-overscroll-behavior);--_scrollbar-content-width: fit-content}[_nghost-%COMP%]{--_spacer-width: var(--spacer-width);--_spacer-height: var(--spacer-height);--_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);pointer-events:var(--_viewport-pointer-events)}.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)}[appearance=native][_nghost-%COMP%]{--_spacer-width: calc(var(--spacer-width) + var(--_scrollbar-thickness));--_spacer-height: calc(var(--spacer-height) + var(--_scrollbar-thickness))}.ng-scroll-viewport[_nghost-%COMP%] > .ng-scroll-spacer[_ngcontent-%COMP%], .ng-scrollbar-external-viewport[_nghost-%COMP%] .ng-scroll-viewport>.ng-scroll-spacer{position:relative;width:calc(var(--_spacer-width) * 1px);height:calc(var(--_spacer-height) * 1px)}.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(--INTERNAL-scrollbar-thickness) + var(--INTERNAL-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(--INTERNAL-scrollbar-hover-opacity-transition-leave-duration) var(--INTERNAL-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(--INTERNAL-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}[horizontalUsed=true][_nghost-%COMP%]{--_timeline-scope: --scrollerX;--_animation-timeline-x: --scrollerX;--_viewport_scroll-timeline: --scrollerX x}[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%]{--_viewport-pointer-events: none;--_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}[dragging=x][_nghost-%COMP%]{--_track-x-thickness: calc(var(--INTERNAL-scrollbar-hover-thickness) * 1px);--_thumb-x-color: var(var(--INTERNAL-scrollbar-thumb-min-size))}[dragging=y][_nghost-%COMP%]{--_track-y-thickness: calc(var(--INTERNAL-scrollbar-hover-thickness) * 1px);--_thumb-y-color: var(var(--INTERNAL-scrollbar-thumb-min-size))}[mobile=true][_nghost-%COMP%]{--_viewport-overscroll-behavior: var(--INTERNAL-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(__ngFactoryType__) {\n return new (__ngFactoryType__ || ScrollViewport)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: ScrollViewport,\n selectors: [[\"\", \"scrollViewport\", \"\"]]\n });\n }\n }\n return ScrollViewport;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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}\nfunction getThrottledStream(stream, duration) {\n return stream.pipe(throttleTime(duration || 0, null, {\n leading: false,\n trailing: true\n }));\n}\nvar ViewportClasses = /*#__PURE__*/function (ViewportClasses) {\n ViewportClasses[\"Viewport\"] = \"ng-scroll-viewport\";\n ViewportClasses[\"Content\"] = \"ng-scroll-content\";\n ViewportClasses[\"Spacer\"] = \"ng-scroll-spacer\";\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 */\nlet ViewportAdapter = /*#__PURE__*/(() => {\n class 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 spacerElement.classList.add(ViewportClasses.Spacer);\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 reset() {\n this.nativeElement = null;\n this.contentWrapperElement = null;\n this.initialized.set(false);\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 static {\n this.ɵfac = function ViewportAdapter_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ViewportAdapter)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ViewportAdapter,\n factory: ViewportAdapter.ɵfac\n });\n }\n }\n return ViewportAdapter;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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 hoverOffset: false\n};\n// This CDN link for a modified version of the polyfill to fix firefox bug https://github.com/MurhafSousli/ngx-scrollbar/issues/615\nconst defaultScrollTimelinePolyfill = 'https://cdn.statically.io/gist/MurhafSousli/c852b6a672069396953f06ddd4b64620/raw/ef55db72e2abb7bc002ed79f4ad4cf408bfdb72f/scroll-timeline-lite.js';\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', {\n providedIn: 'root',\n factory: () => defaultOptions\n});\nconst NG_SCROLLBAR_POLYFILL = new InjectionToken('NG_SCROLLBAR_POLYFILL', {\n providedIn: 'root',\n factory: () => defaultScrollTimelinePolyfill\n});\nfunction filterResizeEntries(entries, target) {\n return entries.filter(entry => entry.target === target)[0]?.contentRect;\n}\nlet NgScrollbarCore = /*#__PURE__*/(() => {\n class NgScrollbarCore {\n constructor() {\n /** Global options */\n this.options = inject(NG_SCROLLBAR_OPTIONS);\n this.sharedResizeObserver = inject(SharedResizeObserver);\n this.zone = inject(NgZone);\n this.platform = inject(Platform);\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 /** Viewport adapter instance */\n this.viewport = inject(ViewportAdapter, {\n self: true\n });\n this.nativeElement = inject(ElementRef).nativeElement;\n /**\n * Indicates if the direction is 'ltr' or 'rtl'\n */\n this.direction = toSignal(this.dir.change, {\n initialValue: this.dir.value\n });\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 /** A flag used to activate hover effect on the offset area around the scrollbar */\n this.hoverOffset = input(this.options.hoverOffset, {\n transform: booleanAttribute\n });\n /** Viewport dimension */\n this.viewportDimension = signal({\n width: 0,\n height: 0\n });\n /** Content dimension */\n this.contentDimension = signal({\n width: 0,\n height: 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 viewportDimensions = this.viewportDimension();\n const contentDimensions = this.contentDimension();\n // Check if vertical scrollbar should be displayed\n if (orientation === 'auto' || orientation === 'vertical') {\n isVerticallyScrollable = contentDimensions.height > viewportDimensions.height;\n verticalUsed = visibility === 'visible' || isVerticallyScrollable;\n }\n // Check if horizontal scrollbar should be displayed\n if (orientation === 'auto' || orientation === 'horizontal') {\n isHorizontallyScrollable = contentDimensions.width > viewportDimensions.width;\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 = input(this.options.trackScrollDuration, {\n transform: numberAttribute\n });\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 = input(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 = input(this.options.position);\n /** A class forwarded to the scrollbar track element */\n this.trackClass = input(this.options.trackClass);\n /** A class forwarded to the scrollbar thumb element */\n this.thumbClass = input(this.options.thumbClass);\n /** A class forwarded to the scrollbar button element */\n this.buttonClass = input(this.options.thumbClass);\n /** Steam that emits when scrollbar is initialized */\n this.afterInit = output();\n /** Steam that emits when scrollbar is updated */\n this.afterUpdate = output();\n let resizeSub$;\n let hasInitialized;\n afterRenderEffect({\n earlyRead: onCleanup => {\n const disableSensor = this.disableSensor();\n const throttleDuration = this.sensorThrottleTime();\n const viewportInit = this.viewport.initialized();\n untracked(() => {\n if (viewportInit) {\n // If resize sensor is disabled, update manually the first time\n if (disableSensor) {\n requestAnimationFrame(() => this.update(ScrollbarUpdateReason.AfterInit));\n } else {\n // Observe size changes for viewport and content wrapper\n this.zone.runOutsideAngular(() => {\n resizeSub$ = getThrottledStream(combineLatest([this.sharedResizeObserver.observe(this.viewport.nativeElement), this.sharedResizeObserver.observe(this.viewport.contentWrapperElement)]), throttleDuration).subscribe(() => {\n // After deep investigation, it appears that setting the dimension directly from the element properties\n // is much faster than to set them from resize callback values\n this.zone.run(() => {\n this.updateDimensions();\n if (hasInitialized) {\n this.afterUpdate.emit();\n } else {\n this.afterInit.emit();\n }\n hasInitialized = true;\n });\n });\n });\n }\n }\n onCleanup(() => resizeSub$?.unsubscribe());\n });\n }\n });\n }\n /**\n * Manual update\n */\n update(reason) {\n this.updateDimensions();\n if (reason === ScrollbarUpdateReason.AfterInit) {\n this.afterInit.emit();\n } else {\n this.afterUpdate.emit();\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 updateDimensions() {\n this.viewportDimension.set({\n width: this.viewport.offsetWidth,\n height: this.viewport.offsetHeight\n });\n this.contentDimension.set({\n width: this.viewport.contentWidth,\n height: this.viewport.contentHeight\n });\n }\n static {\n this.ɵfac = function NgScrollbarCore_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgScrollbarCore)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgScrollbarCore,\n hostVars: 22,\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.ɵɵstyleProp(\"--content-height\", ctx.contentDimension().height)(\"--content-width\", ctx.contentDimension().width)(\"--viewport-height\", ctx.viewportDimension().height)(\"--viewport-width\", ctx.viewportDimension().width);\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 hoverOffset: [1, \"hoverOffset\"],\n trackScrollDuration: [1, \"trackScrollDuration\"],\n appearance: [1, \"appearance\"],\n position: [1, \"position\"],\n trackClass: [1, \"trackClass\"],\n thumbClass: [1, \"thumbClass\"],\n buttonClass: [1, \"buttonClass\"]\n },\n outputs: {\n afterInit: \"afterInit\",\n afterUpdate: \"afterUpdate\"\n },\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_SCROLLBAR,\n useExisting: NgScrollbarCore\n }])]\n });\n }\n }\n return NgScrollbarCore;\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 this.trackSize = signal(0);\n // Host component reference\n this.cmp = inject(NG_SCROLLBAR);\n }\n static {\n this.ɵfac = function ScrollbarAdapter_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || 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 const disableInteraction = this.cmp.disableInteraction();\n untracked(() => {\n if (!disableInteraction) {\n this.zone.runOutsideAngular(() => {\n this._pointerEventsSub = this.pointerEvents.subscribe();\n });\n }\n onCleanup(() => this._pointerEventsSub?.unsubscribe());\n });\n });\n }\n static {\n this.ɵfac = function PointerEventsAdapter_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || 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 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.rectOffsetProperty];\n }\n // Scrollbar track length\n get size() {\n // Noticed that clientHeight is evaluated before getClientRect.height,\n // causing a wrong track size when integrated in dropdown integration\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 afterRenderEffect({\n earlyRead: () => {\n this.cmp.viewportDimension();\n this.cmp.contentDimension();\n untracked(() => {\n this.control.trackSize.set(this.size);\n if (!this.size) {\n // In some rare cases size could be 0 due to first render, use animation frame to give the track element time to render\n requestAnimationFrame(() => this.control.trackSize.set(this.size));\n }\n });\n }\n });\n super();\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(__ngFactoryType__) {\n return new (__ngFactoryType__ || TrackAdapter)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: TrackAdapter,\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 contentSize() {\n return this.cmp.viewport.contentWidth;\n }\n constructor() {\n effect(() => {\n if (this.cmp.direction() === 'rtl') {\n this.getCurrPosition = () => {\n const offset = this.contentSize - this.viewportSize - this.control.viewportScrollOffset;\n return offset * this.size / this.contentSize;\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.contentSize;\n };\n this.getScrollDirection = position => {\n return position > this.getCurrPosition() ? 'forward' : 'backward';\n };\n }\n });\n super();\n }\n scrollTo(start) {\n return from(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(__ngFactoryType__) {\n return new (__ngFactoryType__ || TrackXDirective)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: TrackXDirective,\n selectors: [[\"\", \"scrollbarTrackX\", \"\"]],\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 get contentSize() {\n return this.cmp.viewport.contentHeight;\n }\n getCurrPosition() {\n return this.control.viewportScrollOffset * this.size / this.contentSize;\n }\n getScrollDirection(position) {\n return position > this.getCurrPosition() ? 'forward' : 'backward';\n }\n scrollTo(top) {\n return from(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(__ngFactoryType__) {\n return (ɵTrackYDirective_BaseFactory || (ɵTrackYDirective_BaseFactory = i0.ɵɵgetInheritedFactory(TrackYDirective)))(__ngFactoryType__ || TrackYDirective);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: TrackYDirective,\n selectors: [[\"\", \"scrollbarTrackY\", \"\"]],\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 ScrollbarManager = /*#__PURE__*/(() => {\n class ScrollbarManager {\n constructor() {\n this.isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n this._polyfillUrl = inject(NG_SCROLLBAR_POLYFILL);\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(__ngFactoryType__) {\n return new (__ngFactoryType__ || 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})();\nlet ThumbAdapter = /*#__PURE__*/(() => {\n class ThumbAdapter extends PointerEventsAdapter {\n // Returns thumb size\n get size() {\n return this.nativeElement.getBoundingClientRect()[this.control.rectSizeProperty];\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 afterRenderEffect({\n earlyRead: () => {\n const script = this.manager.scrollTimelinePolyfill();\n untracked(() => {\n if (script && !this._animation) {\n this._animation = startPolyfill(script, this.nativeElement, this.cmp.viewport.nativeElement, this.control.axis);\n }\n });\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(__ngFactoryType__) {\n return new (__ngFactoryType__ || 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 ThumbXDirective = /*#__PURE__*/(() => {\n class ThumbXDirective extends ThumbAdapter {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵThumbXDirective_BaseFactory;\n return function ThumbXDirective_Factory(__ngFactoryType__) {\n return (ɵThumbXDirective_BaseFactory || (ɵThumbXDirective_BaseFactory = i0.ɵɵgetInheritedFactory(ThumbXDirective)))(__ngFactoryType__ || ThumbXDirective);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: ThumbXDirective,\n selectors: [[\"\", \"scrollbarThumbX\", \"\"]],\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(__ngFactoryType__) {\n return (ɵThumbYDirective_BaseFactory || (ɵThumbYDirective_BaseFactory = i0.ɵɵgetInheritedFactory(ThumbYDirective)))(__ngFactoryType__ || ThumbYDirective);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: ThumbYDirective,\n selectors: [[\"\", \"scrollbarThumbY\", \"\"]],\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})();\n\n// canScroll function can work for y-axis and x-axis for both LTR and RTL directions\nconst canScrollFunc = {\n forward: (scrollOffset, scrollMax) => scrollOffset < scrollMax,\n backward: scrollOffset => scrollOffset > 0\n};\nconst scrollStepFunc = {\n forward: (scrollBy, offset) => offset + scrollBy,\n backward: (scrollBy, offset) => offset - scrollBy\n};\nconst horizontalScrollStepFunc = {\n rtl: {\n forward: (scrollBy, offset, scrollMax) => scrollMax - offset - scrollBy,\n backward: (scrollBy, offset, scrollMax) => scrollMax - offset + scrollBy\n },\n ltr: scrollStepFunc\n};\nlet ScrollbarButton = /*#__PURE__*/(() => {\n class ScrollbarButton extends PointerEventsAdapter {\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 constructor() {\n effect(() => {\n const scrollDirection = this.scrollDirection();\n const dir = this.cmp.direction();\n untracked(() => {\n // Get the canScroll function according to scroll direction (forward/backward)\n this.canScroll = canScrollFunc[scrollDirection];\n if (this.control.axis === 'x') {\n // Get the nextStep function according to scroll direction (forward/backward) and layout direction (LTR/RTL)\n this.nextStep = horizontalScrollStepFunc[dir][scrollDirection];\n } else {\n // Get the nextStep function according to scroll direction (forward/backward)\n this.nextStep = scrollStepFunc[scrollDirection];\n }\n });\n });\n super();\n this.scrollbarButton = input.required();\n this.scrollDirection = input.required();\n this.afterFirstClickDelay = 120;\n this.firstClickDuration = 100;\n this.scrollBy = 50;\n this.onGoingScrollBy = 12;\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 = function ScrollbarButton_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ScrollbarButton)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: ScrollbarButton,\n selectors: [[\"button\", \"scrollbarButton\", \"\"]],\n inputs: {\n scrollbarButton: [1, \"scrollbarButton\"],\n scrollDirection: [1, \"scrollDirection\"]\n },\n features: [i0.ɵɵInheritDefinitionFeature],\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%]{position:relative;border:none;margin:0;padding:0;border-radius:0;appearance:none;background-color:var(--INTERNAL-scrollbar-button-color)}[_nghost-%COMP%] svg[_ngcontent-%COMP%]{width:100%;height:100%;fill:var(--INTERNAL-scrollbar-button-fill)}[_nghost-%COMP%]:hover{background:var(--INTERNAL-scrollbar-button-hover-color)}[_nghost-%COMP%]:hover svg[_ngcontent-%COMP%]{fill:var(--INTERNAL-scrollbar-button-hover-fill)}[_nghost-%COMP%]:active{background:var(--INTERNAL-scrollbar-button-active-color)}[_nghost-%COMP%]:active svg[_ngcontent-%COMP%]{fill:var(--INTERNAL-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(--INTERNAL-scrollbar-button-size)}[scrollbarButton=start][_nghost-%COMP%], [scrollbarButton=end][_nghost-%COMP%]{width:var(--INTERNAL-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.rectOffsetProperty = 'top';\n this.rectSizeProperty = 'height';\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 from(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(__ngFactoryType__) {\n return (ɵScrollbarY_BaseFactory || (ɵScrollbarY_BaseFactory = i0.ɵɵgetInheritedFactory(ScrollbarY)))(__ngFactoryType__ || ScrollbarY);\n };\n })();\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: ScrollbarY,\n selectors: [[\"scrollbar-y\"]],\n hostVars: 2,\n hostBindings: function ScrollbarY_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵstyleProp(\"--track-size\", ctx.trackSize());\n }\n },\n features: [i0.ɵɵProvidersFeature([{\n provide: SCROLLBAR_CONTROL,\n useExisting: ScrollbarY\n }]), i0.ɵɵInheritDefinitionFeature],\n decls: 5,\n vars: 11,\n consts: [[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\", 0)(1, \"div\", 1)(2, \"div\", 2);\n i0.ɵɵelement(3, \"div\", 3);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(4, ScrollbarY_Conditional_4_Template, 2, 6);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵclassProp(\"ng-scrollbar-hover\", ctx.cmp.hoverOffset());\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"ng-scrollbar-hover\", !ctx.cmp.hoverOffset());\n i0.ɵɵadvance();\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() ? 4 : -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);pointer-events:var(--_scrollbar-pointer-events)}.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);transition:var(--INTERNAL-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(--INTERNAL-scrollbar-track-color);border-radius:var(--INTERNAL-scrollbar-border-radius);cursor:default;z-index:1;order:2}.ng-scrollbar-thumb[_ngcontent-%COMP%]{box-sizing:border-box;position:absolute;transition:var(--INTERNAL-scrollbar-thumb-transition);border-radius:var(--INTERNAL-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-size: max(calc(var(--viewport-height) * var(--track-size) / var(--content-height)), var(--INTERNAL-scrollbar-thumb-min-size));--_thumb-height: calc(var(--thumb-size) * 1px);--_thumb-width: 100%;--_scrollbar-y-thumb-transform-to-value: calc(var(--track-size) - var(--thumb-size));--_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-hover[_ngcontent-%COMP%]:hover, .ng-scrollbar-hover[_ngcontent-%COMP%]:active{--_track-y-thickness: var(--_scrollbar-hover-thickness-px);--_thumb-y-color: var(--INTERNAL-scrollbar-thumb-hover-color)}.ng-scrollbar-thumb[_ngcontent-%COMP%]{animation-timeline:var(--_animation-timeline-y);min-height:calc(var(--INTERNAL-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.rectOffsetProperty = 'left';\n this.rectSizeProperty = 'width';\n this.sizeProperty = 'offsetWidth';\n this.clientProperty = 'clientX';\n this.offsetProperty = 'offsetX';\n this.axis = 'x';\n }\n scrollTo(left, duration) {\n return from(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(__ngFactoryType__) {\n return new (__ngFactoryType__ || ScrollbarX)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: ScrollbarX,\n selectors: [[\"scrollbar-x\"]],\n hostVars: 3,\n hostBindings: function ScrollbarX_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"dir\", ctx.cmp.direction());\n i0.ɵɵstyleProp(\"--track-size\", ctx.trackSize());\n }\n },\n features: [i0.ɵɵProvidersFeature([{\n provide: SCROLLBAR_CONTROL,\n useExisting: ScrollbarX\n }]), i0.ɵɵInheritDefinitionFeature],\n decls: 5,\n vars: 11,\n consts: [[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\", 0)(1, \"div\", 1)(2, \"div\", 2);\n i0.ɵɵelement(3, \"div\", 3);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(4, ScrollbarX_Conditional_4_Template, 2, 6);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵclassProp(\"ng-scrollbar-hover\", ctx.cmp.hoverOffset());\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"ng-scrollbar-hover\", !ctx.cmp.hoverOffset());\n i0.ɵɵadvance();\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() ? 4 : -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-size: max(calc(var(--viewport-width) * var(--track-size) / var(--content-width)), var(--INTERNAL-scrollbar-thumb-min-size));--_thumb-height: 100%;--_thumb-width: calc(var(--thumb-size) * 1px);--_scrollbar-x-thumb-transform-to-value: calc(var(--track-size) - var(--thumb-size));--_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-hover[_ngcontent-%COMP%]:hover, .ng-scrollbar-hover[_ngcontent-%COMP%]:active{--_track-x-thickness: var(--_scrollbar-hover-thickness-px);--_thumb-x-color: var(--INTERNAL-scrollbar-thumb-hover-color)}.ng-scrollbar-thumb[_ngcontent-%COMP%]{animation-timeline:var(--_animation-timeline-x);min-width:calc(var(--INTERNAL-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(__ngFactoryType__) {\n return new (__ngFactoryType__ || Scrollbars)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: Scrollbars,\n selectors: [[\"scrollbars\"]],\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 constructor() {\n effect(() => {\n const contentWrapper = this.contentWrapper().nativeElement;\n untracked(() => {\n this.viewport.init(this.nativeElement, contentWrapper);\n });\n });\n super();\n this.contentWrapper = viewChild.required('contentWrapper');\n this._scrollbars = viewChild.required(Scrollbars);\n }\n static {\n this.ɵfac = function NgScrollbar_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgScrollbar)();\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.ɵɵviewQuerySignal(ctx.contentWrapper, _c2, 5);\n i0.ɵɵviewQuerySignal(ctx._scrollbars, Scrollbars, 5);\n }\n if (rf & 2) {\n i0.ɵɵqueryAdvance(2);\n }\n },\n exportAs: [\"ngScrollbar\"],\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_SCROLLBAR,\n useExisting: NgScrollbar\n }, ViewportAdapter]), i0.ɵɵInheritDefinitionFeature],\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%;--INTERNAL-scrollbar-border-radius: var(--scrollbar-border-radius, 0px);--INTERNAL-scrollbar-thickness: var(--scrollbar-thickness, 5);--INTERNAL-scrollbar-offset: var(--scrollbar-offset, 0);--INTERNAL-scrollbar-track-wrapper-transition: var(--scrollbar-track-wrapper-transition, width 60ms linear, height 60ms linear);--INTERNAL-scrollbar-track-color: var(--scrollbar-track-color, transparent);--INTERNAL-scrollbar-thumb-color: var(--scrollbar-thumb-color, rgb(0 0 0 / 20%));--INTERNAL-scrollbar-thumb-hover-color: var(--scrollbar-thumb-hover-color, var(--INTERNAL-scrollbar-thumb-color));--INTERNAL-scrollbar-hover-thickness: var(--scrollbar-hover-thickness, var(--INTERNAL-scrollbar-thickness));--INTERNAL-scrollbar-thumb-transition: var(--scrollbar-thumb-transition, none);--INTERNAL-scrollbar-thumb-min-size: var(--scrollbar-thumb-min-size, 20);--INTERNAL-scrollbar-button-color: var(--scrollbar-button-color, var(--INTERNAL-scrollbar-thumb-color));--INTERNAL-scrollbar-button-hover-color: var(--scrollbar-button-hover-color, var(--INTERNAL-scrollbar-button-color));--INTERNAL-scrollbar-button-active-color: var(--scrollbar-button-active-color, var(--INTERNAL-scrollbar-button-hover-color));--INTERNAL-scrollbar-button-fill: var(--scrollbar-button-fill, white);--INTERNAL-scrollbar-button-hover-fill: var(--scrollbar-button-hover-fill, var(--INTERNAL-scrollbar-button-fill));--INTERNAL-scrollbar-button-active-fill: var(--scrollbar-button-active-fill, var(--INTERNAL-scrollbar-button-hover-fill));--INTERNAL-scrollbar-button-size: var(--scrollbar-button-size, 20px);--INTERNAL-scrollbar-hover-opacity-transition-enter-duration: var(--scrollbar-hover-opacity-transition-enter-duration, 0);--INTERNAL-scrollbar-hover-opacity-transition-leave-duration: var(--scrollbar-hover-opacity-transition-leave-duration, .4s);--INTERNAL-scrollbar-hover-opacity-transition-leave-delay: var(--scrollbar-hover-opacity-transition-leave-delay, 1s);--INTERNAL-scrollbar-overscroll-behavior: var(--scrollbar-overscroll-behavior, initial);--INTERNAL-scrollbar-mobile-overscroll-behavior: var(--scrollbar-mobile-overscroll-behavior, none);--_scrollbar-thickness: calc(var(--INTERNAL-scrollbar-thickness) + var(--INTERNAL-scrollbar-offset) * 2);--_scrollbar-pointer-events: auto;--_scrollbar-offset-px: calc(var(--INTERNAL-scrollbar-offset) * 1px);--_scrollbar-thickness-px: calc(var(--INTERNAL-scrollbar-thickness) * 1px);--_scrollbar-hover-thickness-px: calc(var(--INTERNAL-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;--_viewport-pointer-events: auto;--_thumb-x-color: var(--INTERNAL-scrollbar-thumb-color);--_thumb-y-color: var(--INTERNAL-scrollbar-thumb-color);--_track-y-thickness: var(--_scrollbar-thickness-px);--_track-x-thickness: var(--_scrollbar-thickness-px);--_viewport-overscroll-behavior: var(--INTERNAL-scrollbar-overscroll-behavior);--_scrollbar-content-width: fit-content}[_nghost-%COMP%]{--_spacer-width: var(--spacer-width);--_spacer-height: var(--spacer-height);--_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);pointer-events:var(--_viewport-pointer-events)}.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)}[appearance=native][_nghost-%COMP%]{--_spacer-width: calc(var(--spacer-width) + var(--_scrollbar-thickness));--_spacer-height: calc(var(--spacer-height) + var(--_scrollbar-thickness))}.ng-scroll-viewport[_nghost-%COMP%] > .ng-scroll-spacer[_ngcontent-%COMP%], .ng-scrollbar-external-viewport[_nghost-%COMP%] .ng-scroll-viewport>.ng-scroll-spacer{position:relative;width:calc(var(--_spacer-width) * 1px);height:calc(var(--_spacer-height) * 1px)}.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(--INTERNAL-scrollbar-thickness) + var(--INTERNAL-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(--INTERNAL-scrollbar-hover-opacity-transition-leave-duration) var(--INTERNAL-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(--INTERNAL-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}[horizontalUsed=true][_nghost-%COMP%]{--_timeline-scope: --scrollerX;--_animation-timeline-x: --scrollerX;--_viewport_scroll-timeline: --scrollerX x}[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%]{--_viewport-pointer-events: none;--_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}[dragging=x][_nghost-%COMP%]{--_track-x-thickness: calc(var(--INTERNAL-scrollbar-hover-thickness) * 1px);--_thumb-x-color: var(var(--INTERNAL-scrollbar-thumb-min-size))}[dragging=y][_nghost-%COMP%]{--_track-y-thickness: calc(var(--INTERNAL-scrollbar-hover-thickness) * 1px);--_thumb-y-color: var(var(--INTERNAL-scrollbar-thumb-min-size))}[mobile=true][_nghost-%COMP%]{--_viewport-overscroll-behavior: var(--INTERNAL-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 // Using `afterRenderEffect` would run twice, one when viewport directive is detected\n // and one when content wrapper is detected, therefore `effect` is better because it runs only once.\n effect(() => {\n const viewportElement = this.viewportElement();\n const contentWrapperElement = this.contentWrapperElement();\n const spacerElement = this.spacerElement();\n const viewportError = this.viewportError();\n const contentWrapperError = this.contentWrapperError();\n const spacerError = this.spacerError();\n untracked(() => {\n if (!this.skipInit) {\n const error = viewportError || contentWrapperError || spacerError;\n if (error) {\n console.error(error);\n } else {\n this.initialize(viewportElement, contentWrapperElement, spacerElement);\n }\n }\n });\n });\n super();\n this.renderer = inject(Renderer2);\n this.appRef = inject(ApplicationRef);\n this._scrollbars = signal(null);\n /**\n * Selector used to query the viewport element.\n */\n this.externalViewport = input();\n /**\n * Selector used to query the content wrapper element.\n */\n this.externalContentWrapper = input();\n /**\n * Selector used to query the spacer element (virtual scroll integration).\n * In the case of integrating the scrollbar with a virtual scroll component,\n * a spacer element is typically created to match the real size of the content.\n * The scrollbar will use the size of this spacer element for calculations instead of the content wrapper size.\n */\n this.externalSpacer = input();\n this.viewportElement = linkedSignal({\n source: this.externalViewport,\n // If viewport selector was defined, query the element\n computation: selector => this.getElement(selector) || this.customViewport()?.nativeElement\n });\n this.viewportError = computed(() => {\n return !this.viewportElement() ? `[NgScrollbar]: Could not find the viewport element for the provided selector \"${this.externalViewport()}\"` : null;\n });\n this.contentWrapperElement = linkedSignal({\n source: this.externalContentWrapper,\n computation: selector => this.getElement(selector)\n });\n this.contentWrapperError = computed(() => {\n return !this.contentWrapperElement() && this.externalContentWrapper() ? `[NgScrollbar]: Content wrapper element not found for the provided selector \"${this.externalContentWrapper()}\"` : null;\n });\n this.spacerElement = linkedSignal({\n source: this.externalSpacer,\n computation: selector => this.getElement(selector)\n });\n this.spacerError = computed(() => {\n return !this.spacerElement() && this.externalSpacer() ? `[NgScrollbar]: Spacer element not found for the provided selector \"${this.externalSpacer()}\"` : null;\n });\n /**\n * Reference to the external viewport directive if used\n */\n this.customViewport = contentChild(ScrollViewport, {\n descendants: true\n });\n }\n ngOnDestroy() {\n if (this._scrollbarsRef) {\n this.appRef.detachView(this._scrollbarsRef.hostView);\n this._scrollbarsRef.destroy();\n }\n }\n initialize(viewportElement, contentWrapperElement, spacerElement) {\n if (this.skipInit) {\n // If initialized via async detection, then we should set the signals\n this.viewportElement.set(viewportElement);\n this.contentWrapperElement.set(contentWrapperElement);\n this.spacerElement.set(spacerElement);\n }\n // If no external spacer and no content wrapper are provided, create a content wrapper element\n if (!spacerElement && !contentWrapperElement) {\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 _attachScrollbars() {\n // Create the scrollbars component\n this._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.renderer.appendChild(this.viewport.contentWrapperElement, this._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(this._scrollbarsRef.hostView);\n // Set the scrollbars instance\n this._scrollbars.set(this._scrollbarsRef.instance);\n }\n getElement(selector) {\n return selector ? this.nativeElement.querySelector(selector) : null;\n }\n static {\n this.ɵfac = function NgScrollbarExt_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgScrollbarExt)();\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.ɵɵcontentQuerySignal(dirIndex, ctx.customViewport, ScrollViewport, 5);\n }\n if (rf & 2) {\n i0.ɵɵqueryAdvance();\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: [1, \"externalViewport\"],\n externalContentWrapper: [1, \"externalContentWrapper\"],\n externalSpacer: [1, \"externalSpacer\"]\n },\n exportAs: [\"ngScrollbar\"],\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_SCROLLBAR,\n useExisting: NgScrollbarExt\n }, {\n provide: NgScrollbarCore,\n useExisting: NgScrollbar\n }, ViewportAdapter]), i0.ɵɵInheritDefinitionFeature],\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 self: true\n });\n this.zone = inject(NgZone);\n this.contentObserver = inject(ContentObserver);\n this.asyncDetection = input();\n this.scrollbar.skipInit = true;\n let sub$;\n effect(onCleanup => {\n const init = this.scrollbar.viewport.initialized();\n const externalViewport = this.scrollbar.externalViewport();\n const externalContentWrapper = this.scrollbar.externalContentWrapper();\n const externalSpacer = this.scrollbar.externalSpacer();\n const asyncDetection = this.asyncDetection();\n untracked(() => {\n let viewportElement;\n let contentWrapperElement;\n this.zone.runOutsideAngular(() => {\n // The content observer should not be throttled using the same function we use for ResizeObserver,\n // It should detect the content change asap to attach the scrollbar\n sub$ = this.contentObserver.observe(this.scrollbar.nativeElement).pipe(throttleTime(100, null, {\n leading: true,\n trailing: true\n })).subscribe(() => {\n // Search for external viewport\n viewportElement = this.scrollbar.nativeElement.querySelector(externalViewport);\n // Search for external content wrapper\n contentWrapperElement = this.scrollbar.nativeElement.querySelector(externalContentWrapper);\n this.zone.run(() => {\n if (!init && viewportElement && contentWrapperElement) {\n // If an external spacer selector is provided, search for it\n let spacerElement;\n if (externalSpacer) {\n spacerElement = this.scrollbar.nativeElement.querySelector(externalSpacer);\n }\n this.scrollbar.initialize(viewportElement, contentWrapperElement, spacerElement);\n } else if (!viewportElement || !contentWrapperElement) {\n this.scrollbar.viewport.reset();\n }\n });\n if (asyncDetection !== 'auto') {\n sub$.unsubscribe();\n }\n });\n });\n onCleanup(() => sub$?.unsubscribe());\n });\n });\n }\n static {\n this.ɵfac = function AsyncDetection_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || AsyncDetection)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: AsyncDetection,\n selectors: [[\"ng-scrollbar\", \"externalViewport\", \"\", \"asyncDetection\", \"\"]],\n inputs: {\n asyncDetection: [1, \"asyncDetection\"]\n }\n });\n }\n }\n return AsyncDetection;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet SyncSpacer = /*#__PURE__*/(() => {\n class SyncSpacer {\n constructor() {\n this.sharedResizeObserver = inject(SharedResizeObserver);\n this.scrollbar = inject(NgScrollbarExt, {\n self: true\n });\n this.zone = inject(NgZone);\n /**\n * A signal used to sync spacer dimension when content dimension changes\n */\n this.spacerDimension = signal({});\n let sub$;\n effect(onCleanup => {\n const spacerElement = this.scrollbar.spacerElement();\n const contentWrapperElement = this.scrollbar.contentWrapperElement();\n const throttleDuration = this.scrollbar.sensorThrottleTime();\n const disableSensor = this.scrollbar.disableSensor();\n untracked(() => {\n if (!disableSensor && contentWrapperElement && spacerElement) {\n // Sync spacer dimension with content wrapper dimensions to allow both scrollbars to be displayed\n this.zone.runOutsideAngular(() => {\n sub$ = getThrottledStream(this.sharedResizeObserver.observe(contentWrapperElement), throttleDuration).pipe(map(entries => filterResizeEntries(entries, contentWrapperElement))).subscribe(() => {\n this.zone.run(() => {\n // Use animation frame to avoid \"ResizeObserver loop completed with undelivered notifications.\" error\n requestAnimationFrame(() => {\n this.spacerDimension.set({\n width: contentWrapperElement.offsetWidth,\n height: contentWrapperElement.offsetHeight\n });\n });\n });\n });\n });\n }\n onCleanup(() => sub$?.unsubscribe());\n });\n });\n }\n static {\n this.ɵfac = function SyncSpacer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || SyncSpacer)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: SyncSpacer,\n selectors: [[\"ng-scrollbar\", \"externalViewport\", \"\", \"syncSpacer\", \"\"]],\n hostVars: 4,\n hostBindings: function SyncSpacer_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵstyleProp(\"--spacer-width\", ctx.spacerDimension().width)(\"--spacer-height\", ctx.spacerDimension().height);\n }\n }\n });\n }\n }\n return SyncSpacer;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgScrollbarModule = /*#__PURE__*/(() => {\n class NgScrollbarModule {\n static {\n this.ɵfac = function NgScrollbarModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || 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: {\n ...defaultOptions,\n ...options\n }\n }];\n}\nfunction provideScrollbarPolyfill(url) {\n return makeEnvironmentProviders([{\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, SyncSpacer, filterResizeEntries, provideScrollbarOptions, provideScrollbarPolyfill };\n"],"names":["hasV8BreakIterator","Platform","inject","PLATFORM_ID","isPlatformBrowser","__ngFactoryType__","ɵɵdefineInjectable","shadowDomIsSupported","_supportsShadowDom","head","_getShadowRoot","element","rootNode","_getFocusedElementPierceShadowDom","activeElement","newActiveElement","_getEventTarget","event","_bindEventWithOptions","renderer","target","eventName","callback","options","major","VERSION","minor","DIR_DOCUMENT","InjectionToken","DIR_DOCUMENT_FACTORY","inject","DOCUMENT","RTL_LOCALE_PATTERN","_resolveDirectionality","rawValue","value","Directionality","EventEmitter","_document","bodyDir","htmlDir","__ngFactoryType__","ɵɵdefineInjectable","BidiModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","SingleBoxSharedResizeObserver","Subject","_box","entries","target","Observable","observer","subscription","filter","entry","shareReplay","takeUntil","SharedResizeObserver","inject","NgZone","options","box","__ngFactoryType__","ɵɵdefineInjectable","coerceNumberProperty","value","fallbackValue","_isNumberValue","coerceElement","elementOrRef","ElementRef","coerceArray","value","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","defaultSmoothScrollOptions","SMOOTH_SCROLL_OPTIONS","InjectionToken","SmoothScrollManager","inject","DOCUMENT","NgZone","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","__spreadValues","target","scrollableEl","targetEl","scrollableRect","targetRect","containerCenterX","containerCenterY","targetCenterX","targetCenterY","bottomEdge","computedOptions","__ngFactoryType__","ɵɵdefineInjectable","MutationObserverFactory","callback","__ngFactoryType__","ɵɵdefineInjectable","ObserversModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MutationObserverFactory","_c0","ScrollbarY_Conditional_4_Template","rf","ctx","ɵɵelement","ctx_r0","ɵɵnextContext","ɵɵclassMapInterpolate1","ɵɵadvance","ScrollbarX_Conditional_4_Template","_c1","Scrollbars_Conditional_0_Template","Scrollbars_Conditional_1_Template","_c2","_c3","_c4","_c5","ScrollViewport","inject","ElementRef","__ngFactoryType__","ɵɵdefineDirective","preventSelection","doc","tap","enableSelection","stopPropagation","e","getThrottledStream","stream","duration","throttleTime","ViewportClasses","ViewportAdapter","signal","viewportElement","contentElement","spacerElement","value","ɵɵdefineInjectable","NG_SCROLLBAR","InjectionToken","defaultOptions","defaultScrollTimelinePolyfill","ScrollbarUpdateReason","NG_SCROLLBAR_OPTIONS","NG_SCROLLBAR_POLYFILL","NgScrollbarCore","inject","NG_SCROLLBAR_OPTIONS","SharedResizeObserver","NgZone","Platform","Directionality","SmoothScrollManager","ViewportAdapter","ElementRef","toSignal","signal","input","booleanAttribute","numberAttribute","computed","verticalUsed","horizontalUsed","isVerticallyScrollable","isHorizontallyScrollable","orientation","visibility","viewportDimensions","contentDimensions","output","resizeSub$","hasInitialized","afterRenderEffect","onCleanup","disableSensor","throttleDuration","viewportInit","untracked","ScrollbarUpdateReason","getThrottledStream","combineLatest","reason","options","target","__ngFactoryType__","ɵɵdefineDirective","rf","ctx","ɵɵattribute","ɵɵstyleProp","ɵɵclassProp","ɵɵProvidersFeature","NG_SCROLLBAR","SCROLLBAR_CONTROL","InjectionToken","ScrollbarAdapter","PointerEventsAdapter","DOCUMENT","effect","disableInteraction","TrackAdapter","pointerDown$","fromEvent","stopPropagation","preventSelection","pointerUp$","enableSelection","pointerEnter$","tap","e","map","pointerLeave$","pointerOver$","merge","startWith","pointerMove$","switchMap","startEvent","takeUntil","delay","over","currDirection","sameDirection","EMPTY","scrollForwardIncrement","scrollBackwardIncrement","position","takeWhile","ɵɵInheritDefinitionFeature","TrackXDirective","start","from","TrackYDirective","top","ɵTrackYDirective_BaseFactory","ɵɵgetInheritedFactory","ScrollbarManager","isPlatformBrowser","PLATFORM_ID","NG_SCROLLBAR_POLYFILL","__async","script","resolve","reject","error","ɵɵdefineInjectable","ThumbAdapter","startTrackMax","startScrollMax","dragStart","of","dragging","dragEnd","startOffset","moveEvent","moveClient","trackRelativeOffset","scrollPosition","startPolyfill","value","ScrollTimeline","element","source","axis","ThumbXDirective","ɵThumbXDirective_BaseFactory","ThumbYDirective","ɵThumbYDirective_BaseFactory","canScrollFunc","scrollOffset","scrollMax","scrollStepFunc","scrollBy","offset","horizontalScrollStepFunc","ScrollbarButton","pointerUpOrLeave$","scrollDirection","dir","interval","animationFrameScheduler","ɵɵdefineComponent","_c0","ɵɵelementStart","ɵɵnamespaceSVG","ɵɵelement","ɵɵelementEnd","ScrollbarY","duration","ɵScrollbarY_BaseFactory","ɵɵtemplate","ScrollbarY_Conditional_4_Template","ɵɵadvance","ɵɵclassMapInterpolate1","ɵɵconditional","ScrollbarX","left","ScrollbarX_Conditional_4_Template","_c1","Scrollbars","Scrollbars_Conditional_0_Template","Scrollbars_Conditional_1_Template","NgScrollbar","contentWrapper","viewChild","ɵɵviewQuerySignal","_c2","ɵɵqueryAdvance","_c3","ɵɵprojectionDef","ɵɵprojection","NgScrollbarExt","viewportElement","contentWrapperElement","spacerElement","viewportError","contentWrapperError","spacerError","Renderer2","ApplicationRef","linkedSignal","selector","contentChild","ScrollViewport","node","createComponent","Injector","dirIndex","ɵɵcontentQuerySignal","_c4","_c5","NgScrollbarModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector"],"mappings":"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","debug_id":"ae8419e8-7afa-539e-b0f5-ed1eabcc63d0"}