UNPKG

@rosen-group/ngx-onboarding

Version:

Onboarding module for Angular applications

1 lines 82.6 kB
{"version":3,"file":"rosen-group-ngx-onboarding.mjs","sources":["../../../projects/ngx-onboarding/src/lib/services/browser-dom-selector.service.ts","../../../projects/ngx-onboarding/src/lib/models/onboarding-item-container.model.ts","../../../projects/ngx-onboarding/src/lib/models/onboarding-html-element-helper.ts","../../../projects/ngx-onboarding/src/lib/services/enabled-status-base.service.ts","../../../projects/ngx-onboarding/src/lib/models/onboarding-buttons-position.enum.ts","../../../projects/ngx-onboarding/src/lib/services/seen-selectors-base.service.ts","../../../projects/ngx-onboarding/src/lib/services/onboarding.service.ts","../../../projects/ngx-onboarding/src/lib/services/translator-base.service.ts","../../../projects/ngx-onboarding/src/lib/pipes/primitive-translate.pipe.ts","../../../projects/ngx-onboarding/src/lib/onboarding-button.component.ts","../../../projects/ngx-onboarding/src/lib/onboarding-button.component.html","../../../projects/ngx-onboarding/src/lib/models/onboarding-item.model.ts","../../../projects/ngx-onboarding/src/lib/models/visible-onboarding-item.model.ts","../../../projects/ngx-onboarding/src/lib/services/window-ref.service.ts","../../../projects/ngx-onboarding/src/lib/onboarding-item.component.ts","../../../projects/ngx-onboarding/src/lib/onboarding-item.component.html","../../../projects/ngx-onboarding/src/lib/onboarding.component.ts","../../../projects/ngx-onboarding/src/lib/onboarding.component.html","../../../projects/ngx-onboarding/src/lib/services/local-storage-seen-selectors.service.ts","../../../projects/ngx-onboarding/src/lib/services/local-storage-enabled-status.service.ts","../../../projects/ngx-onboarding/src/lib/services/build-in-translator.service.ts","../../../projects/ngx-onboarding/src/lib/onboarding.module.ts","../../../projects/ngx-onboarding/src/public_api.ts","../../../projects/ngx-onboarding/src/rosen-group-ngx-onboarding.ts"],"sourcesContent":["import {Inject, Injectable} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n/**\n * Wrapper for native implementations of querySelector from window.document\n */\n@Injectable()\nexport class BrowserDOMSelectorService {\n\n    constructor(@Inject(DOCUMENT) private doc: any) {\n    }\n\n    /** see https://developer.mozilla.org/de/docs/Web/API/Document/querySelectorAll */\n    public querySelectorAll(cssQuery: string): any[] {\n        return this.doc.querySelectorAll(cssQuery);\n    }\n\n    /** see https://developer.mozilla.org/de/docs/Web/API/Document/querySelector */\n    public querySelector(cssQuery: string): any {\n        return this.doc.querySelector(cssQuery);\n    }\n\n\n}\n","import { VisibleOnboardingItem } from './visible-onboarding-item.model';\n\n/**\n * Container to pass visible onboarding elements from onboarding service\n * to onboarding component (which can be grouped by their \"group\" field).\n *\n * Current group of elements can be accessed via currentItems(). Next group can be accessed via nextItems().\n *\n * Container does not have immediate access to grouping keys since elements are stored in jagged array.\n */\nexport class OnboardingItemContainer {\n\n    private items: Array<VisibleOnboardingItem> = [];\n    private totalCount = 0;\n    private currentGroupIndex = 0;\n\n    public get isEmpty(): boolean {\n        return !this.items || this.totalCount === 0;\n    }\n\n    /**\n     * Check if there is another group of visible onboarding items\n     */\n    public get hasNext(): boolean {\n        return this.items && this.currentGroupIndex < (this.items.length - 1);\n    }\n\n    /**\n     * Return current group of visible onboarding items\n     */\n    public get currentItem(): VisibleOnboardingItem {\n        if (this.items && this.currentGroupIndex < this.items.length) {\n            return this.items[this.currentGroupIndex];\n        }\n        return null;\n    }\n\n    /**\n     * Return list of All visible onboarding items (regardless of grouping)\n     */\n    public get allItems(): Array<VisibleOnboardingItem> {\n        return this.items.slice();\n    }\n\n    /**\n     * Return count of all items (regardless of grouping)\n     */\n    public get totalLength() {\n        return this.totalCount;\n    }\n\n    /**\n     * Return next group of visible onboarding items\n     */\n    public nextItem(): VisibleOnboardingItem {\n        if (this.hasNext) {\n            this.currentGroupIndex++;\n            return this.currentItem;\n        }\n        return null;\n    }\n\n    /**\n     * Add new group of items\n     */\n    public add(items: Array<VisibleOnboardingItem>) {\n        if (items) {\n            this.items.push(...items);\n            this.totalCount += items.length;\n        }\n    }\n\n    /**\n     * Clear items from container\n     */\n    public clear(): void {\n        this.items = [];\n        this.totalCount = 0;\n        this.currentGroupIndex = 0;\n    }\n}\n","/**\n * contains static helper methods for [[HTMLELement]]\n */\n\nexport class OnboardingHtmlElementHelper {\n\n    public static isVisible(htmlElement: HTMLElement): boolean {\n        if (!htmlElement || typeof getComputedStyle !== 'function') {\n            return false;\n        }\n\n        const style = getComputedStyle(htmlElement);\n\n        if (!htmlElement.offsetParent && style.position !== 'fixed') {\n            return false;\n        }\n\n        return !(style.opacity === '0' || style.display === 'none' || style.visibility === 'hidden' || style.visibility === 'collapse');\n    }\n\n    /**\n     * true if element is visible in view (not scrolled out) or false if not\n     */\n    public static isNotScrolledOut(htmlElement: HTMLElement): boolean {\n        if (!htmlElement || !htmlElement.offsetParent) {\n            return false;\n        }\n        const parent = <HTMLElement>htmlElement.offsetParent;\n        const parentTop = parent.scrollTop;\n        const parentBottom = parentTop + parent.offsetHeight;\n        const elementTop = htmlElement.offsetTop;\n        const elementBottom = elementTop + htmlElement.offsetHeight;\n\n        return parentTop < elementTop && parentBottom > elementBottom;\n    }\n\n    /**\n     * true if element and all parents are visible in view (not scrolled out) or false if not\n     */\n    public static isVisibleInViewWithParents(htmlElement: HTMLElement): boolean {\n        do {\n            if (htmlElement && htmlElement.tagName && htmlElement.tagName.toLowerCase() === 'body') {\n                return true;\n            }\n            if (!OnboardingHtmlElementHelper.isVisible(htmlElement)) {\n                return false;\n            }\n            if (htmlElement.scrollTop > 0) {\n                if (!OnboardingHtmlElementHelper.isNotScrolledOut(htmlElement)) {\n                    return false;\n                }\n            }\n        } while (htmlElement = <HTMLElement>htmlElement.offsetParent);\n        return true;\n    }\n\n    /**\n     * returns the position of element in document\n     */\n    public static getPosition(htmlElement: HTMLElement) {\n        const rect: ClientRect | DOMRect = htmlElement.getBoundingClientRect();\n        if (typeof DOMRect !== 'undefined' && rect instanceof DOMRect) {\n            return {\n                fixed: OnboardingHtmlElementHelper.isFixed(htmlElement),\n                x: rect.x,\n                y: rect.y,\n                width: rect.width,\n                height: rect.height\n            };\n        }\n        return {\n            fixed: OnboardingHtmlElementHelper.isFixed(htmlElement),\n            x: rect.left,\n            y: rect.top,\n            width: rect.width,\n            height: rect.height\n        };\n    }\n\n    private static isFixed(htmlElement: HTMLElement) {\n        if (!htmlElement || typeof getComputedStyle !== 'function') {\n            return false;\n        }\n        const style = getComputedStyle(htmlElement);\n        if (style.position === 'fixed') {\n            return true;\n        }\n        return OnboardingHtmlElementHelper.isFixed(<HTMLElement>htmlElement.offsetParent);\n    }\n\n}\n","import {Observable} from 'rxjs';\n\n/**\n * Base class for storing the onboarding item enabled status. Can be overridden with own implementations\n * if you don't want to store the settings in the local storage\n */\nexport abstract class EnabledStatusBaseService {\n\n    /**\n     * saves the status to a persistent storage\n     */\n    abstract save(enabled: boolean): void;\n\n    /**\n     * loads the status from the persistent storage\n     * @returns status (true = enabled, false = disabled)\n     */\n    abstract load(): Observable<boolean>;\n}\n","export enum OnboardingButtonsPosition {\n    BottomRight,\n    Bottom,\n    BottomLeft,\n    Left,\n    TopLeft,\n    Top,\n    TopRight,\n    Right\n}\n","import {Observable} from 'rxjs';\n\n/**\n * Base class for storing the onboarding item seen status. Can be overridden with own implementations\n * if you don't want to store the settings in the local storage\n */\nexport abstract class SeenSelectorsBaseService {\n\n    /**\n     * loads seen items from a persistent storage\n     * @returns string array of all seen selectors\n     */\n    abstract load(): Observable<Array<string>>;\n\n    /**\n     * save items to a persistent storage\n     */\n    abstract save(seenSelectors: Array<string>): void;\n\n}\n","import {interval, Subscription, timer} from 'rxjs';\nimport {ErrorHandler, EventEmitter, Injectable, NgZone} from '@angular/core';\nimport {BrowserDOMSelectorService} from './browser-dom-selector.service';\nimport {OnboardingItemContainer} from '../models/onboarding-item-container.model';\nimport {OnboardingConfiguration} from '../models/onboarding-configuration.model';\nimport {VisibleOnboardingItem} from '../models/visible-onboarding-item.model';\nimport {OnboardingHtmlElementHelper} from '../models/onboarding-html-element-helper';\nimport {OnboardingItem} from '../models/onboarding-item.model';\nimport {EnabledStatusBaseService} from './enabled-status-base.service';\nimport {OnboardingButtonsPosition} from '../models/onboarding-buttons-position.enum';\nimport {SeenSelectorsBaseService} from './seen-selectors-base.service';\n\nconst addSeenSelectorDebounceTime = 1000;\nconst enabledChangedDebounceTime = 1000;\nconst refreshTime = 2000;\n\n\n/**\n * The OnboardingService manages the configuration and the status of the onboarding component.\n *\n * The OnboardingComponent listens to the visibleItemsChanged event and retrieves new onboarding items from the visibleItems object.\n */\n@Injectable({\n    providedIn: 'root' /* makes sure that service stays a single instance among seperate modules */\n})\nexport class OnboardingService {\n\n    /**\n     * Container with currently visible onboarding items (grouped).\n     * OnboardingComponent must iterate through these groups.\n     *\n     * called by OnboardingComponent\n     */\n    public readonly visibleItems = new OnboardingItemContainer();\n    /**\n     * called by OnboardingComponent\n     */\n    public visibleItemsChanged = new EventEmitter();\n    private addSeenSelectorDebounceSubscription: Subscription;\n    private enabledChangedDebounceSubscription: Subscription;\n    private refreshSubscription: Subscription;\n    private items: Array<OnboardingItem>;\n    private seenSelectors: Array<string>;\n    private enabled: boolean;\n    private configuration: OnboardingConfiguration;\n\n    private readonly defaultConfiguration: OnboardingConfiguration = {\n        iconConfiguration: {\n            matIconName: 'contact_support',\n            matBadgeColor: 'accent',\n            matBadgePosition: 'below after',\n            matBadgeSize: 'medium'\n        },\n        textConfiguration: {\n            regularFontFamily: 'Roboto, \"Segoe UI\", Helvetica, Arial, sans-serif;',\n            scriptFontFamily: '\"Gochi Hand\", Georgia, \"Segoe Script\",  \"Comic Sans MS\", serif'\n        },\n        buttonsConfiguration: {\n            position: OnboardingButtonsPosition.BottomRight,\n            horizontalDistanceToBorderInPx: 50,\n            verticalDistanceToBorderInPx: 40\n        }\n    };\n\n    constructor(private browserDomSelectorService: BrowserDOMSelectorService,\n                private loadAndSaveSeenSelectorsService: SeenSelectorsBaseService,\n                private loadAndSaveEnabledStatusService: EnabledStatusBaseService,\n                private errorHandler: ErrorHandler,\n                private zone: NgZone) {\n        this.configuration = this.defaultConfiguration;\n        /* this is the default setting. can be changed by configure()*/\n        this.init();\n    }\n\n    /**\n     * returns the count of the registered items\n     */\n    public get registeredItemsCount(): number {\n        return this.items.length;\n    }\n\n    /**\n     * Configures the onboarding icons and fonts.\n     *\n     * If you want to change the default settings, then call this in your module where you import this\n     * service as provider and set global defaults like icon properties\n     */\n    public configure(configuration: OnboardingConfiguration) {\n        if (typeof configuration === 'undefined') {\n            throw new Error('Configuration must not be undefined or null');\n        }\n        // new merge default configuration with user configuration\n        const mergedConfig: OnboardingConfiguration = {\n            iconConfiguration: Object.assign({}, this.defaultConfiguration.iconConfiguration),\n            textConfiguration: Object.assign({}, this.defaultConfiguration.textConfiguration),\n            buttonsConfiguration: Object.assign({}, this.defaultConfiguration.buttonsConfiguration)\n        };\n\n        if (configuration.iconConfiguration) {\n            Object.assign(\n                mergedConfig.iconConfiguration,\n                configuration.iconConfiguration\n            );\n            // icon shape configurations are mutually exclusive so a special checks are needed for that\n            if (!configuration.iconConfiguration.matIconName &&\n                (configuration.iconConfiguration.fontSet || configuration.iconConfiguration.svgIcon)) {\n                mergedConfig.iconConfiguration.matIconName = undefined; // if the user wants fontSet than we have to disable matIconName\n            }\n        }\n\n        if (configuration.textConfiguration) {\n            Object.assign(\n                mergedConfig.textConfiguration,\n                configuration.textConfiguration\n            );\n        }\n\n        if (configuration.buttonsConfiguration) {\n            Object.assign(\n                mergedConfig.buttonsConfiguration,\n                configuration.buttonsConfiguration\n            );\n        }\n\n        this.configuration = mergedConfig;\n    }\n\n    /** used internal only to retrieve to configuration from configure()*/\n    public getConfiguration() {\n        return this.configuration;\n    }\n\n    /**\n     * registers [[OnboardingItem]]s in items, returns the method to unregister items (e.g. in ngOnDestroy)\n     */\n    public register(items: Array<OnboardingItem>): Function {\n        this.items.push(...items);\n        return () => {\n            // this.items = filter(this.items, thisItem => !some(items, item => thisItem.selector === item.selector));\n            this.items = this.items.filter(thisItem => !items.some( item => thisItem.selector === item.selector));\n        };\n    }\n\n    /**\n     * Check which onboarding items are visible. Emit visibleItemsChanged event.\n     * called by OnboardingComponent\n     */\n    public check() {\n        try {\n            if (this.isEnabled() && this.visibleItems && this.visibleItems.totalLength > 0) {\n                return;\n            }\n            const matches: Array<VisibleOnboardingItem> = [];\n            const notSeenItems = this.getNotSeenItems();\n            if (notSeenItems) {\n                notSeenItems.forEach( item => {\n                    const elements = Array.from(this.browserDomSelectorService.querySelectorAll(item.selector));\n                    if (elements && elements.length > 0) {\n                        let element: HTMLElement = elements.find(\n                            (e: HTMLElement) => OnboardingHtmlElementHelper.isVisibleInViewWithParents(e)\n                        );\n                        if (element) {\n                            if (item.toParent && element.offsetParent) {\n                                element = <HTMLElement>element.offsetParent;\n                            }\n                            if (element) {\n                                matches.push({\n                                    item: item,\n                                    element: element\n                                });\n                            }\n                        }\n                    }\n                });\n            }\n\n            this.visibleItems.clear();\n            this.visibleItems.add(matches);\n            this.visibleItemsChanged.emit();\n        } catch (error) {\n            this.errorHandler.handleError(error);\n        }\n    }\n\n    /**\n     * Mark all visible items as SEEN, remove them from visible list and emit change event.\n     * called by OnboardingComponent\n     */\n    public hide() {\n\n        this.visibleItems.allItems.forEach( i => {\n            this.addToSeenSelectors(i.item.selector);\n        });\n\n        this.visibleItems.clear();\n        this.visibleItemsChanged.emit();\n    }\n\n    /**\n     * called by OnboardingComponent\n     *\n     * Disables the onboarding\n     */\n    public disable() {\n        this.hide();\n        this.enabled = false;\n        this.visibleItemsChanged.emit();\n        this.enabledChanged();\n    }\n\n    /**\n     * called by OnboardingComponent\n     *\n     * Enables the onboarding\n     */\n    public enable() {\n        this.enabled = true;\n        this.visibleItems.clear();\n        this.check();\n        this.enabledChanged();\n    }\n\n    /**\n     * called by OnboardingComponent\n     */\n    public isEnabled(): boolean {\n        return this.enabled;\n    }\n\n    /**\n     * called by OnboardingComponent\n     */\n    public clearSeenSelectors(): void {\n        this.seenSelectors = [];\n        this.seenSelectorsChanged();\n    }\n\n    private init() {\n        this.items = [];\n        this.seenSelectors = [];\n        this.visibleItems.clear();\n        this.loadSeenSelectors();\n        this.loadEnabledStatus();\n        this.startRefreshTimer();\n    }\n\n    private addToSeenSelectors(selector: string) {\n        this.seenSelectors.push(selector);\n        this.seenSelectorsChanged();\n    }\n\n    private seenSelectorsChanged(): void {\n        if (this.addSeenSelectorDebounceSubscription) {\n            this.addSeenSelectorDebounceSubscription.unsubscribe();\n        }\n        const source = timer(addSeenSelectorDebounceTime);\n        this.addSeenSelectorDebounceSubscription = source.subscribe(() => {\n            this.saveSeenSelectors();\n        });\n    }\n\n    private enabledChanged() {\n        if (this.enabledChangedDebounceSubscription) {\n            this.enabledChangedDebounceSubscription.unsubscribe();\n        }\n        const source = timer(enabledChangedDebounceTime);\n        this.enabledChangedDebounceSubscription = source.subscribe(() => {\n            this.saveEnabledStatus();\n        });\n    }\n\n    private getNotSeenItems(): Array<OnboardingItem> {\n        return this.items.filter(i => !this.seenSelectors.some( seen => seen === i.selector));\n    }\n\n    private startRefreshTimer() {\n        if (this.refreshSubscription) {\n            this.refreshSubscription.unsubscribe();\n        }\n        const source = interval(refreshTime);\n        this.zone.runOutsideAngular(() => {\n            this.refreshSubscription = source.subscribe(() => {\n                this.zone.run(() => {\n                    this.check();\n                });\n            });\n        });\n    }\n\n    private loadSeenSelectors() {\n        this.loadAndSaveSeenSelectorsService.load().subscribe(seenSelectors => {\n            this.seenSelectors = seenSelectors;\n        });\n    }\n\n    private saveSeenSelectors() {\n        this.loadAndSaveSeenSelectorsService.save(this.seenSelectors);\n    }\n\n    private loadEnabledStatus() {\n        this.loadAndSaveEnabledStatusService.load().subscribe(enabled => {\n            this.enabled = enabled;\n        });\n    }\n\n    private saveEnabledStatus() {\n        this.loadAndSaveEnabledStatusService.save(this.enabled);\n    }\n\n}\n","import {EventEmitter} from '@angular/core';\n\n/**\n * Base interface for translatorservice (used for core ngx-onboarding labels)\n */\nexport abstract class TranslatorBaseService {\n\n    /**\n     * implement an EventEmitter with the language key as one its arguments\n     * the argument has the minimium properties lang: string (where lang is the new language code)\n     */\n    abstract onLangChange: EventEmitter<{ lang: string }>;\n\n    /**\n     * The language (code) currently used\n     */\n    abstract get currentLang(): string;\n\n    /**\n     * Returns a translation instantly from the internal state of loaded translation.\n     * the keys (with translation examples in english) are\n     'ONBOARDING': 'Onboarding',\n     'ONBOARDING_FAILED_TO_LOAD_USER_SETTINGS': 'Failed to load onboarding settings.',\n     'ONBOARDING_FAILED_TO_SAVE_USER_SETTINGS': 'Failed to save onboarding settings.',\n     'ONBOARDING_GOT_IT_MSG': 'Got it',\n     'ONBOARDING_DO_NOT_SHOW_AGAIN_MSG': 'Turn off',\n     'ONBOARDING_NEXT_MSG': 'Next',\n     'ONBOARDING_ENABLE': 'Turn on',\n     'ONBOARDING_DISABLE': 'Turn off',\n     'ONBOARDING_CLEAR': 'Reset'\n     */\n    abstract instant(key: string): string;\n\n}\n","import {TranslatorBaseService} from '../services/translator-base.service';\nimport {Pipe, PipeTransform} from '@angular/core';\n\n/**\n * Pipe for internal usage to translate the text on the onboarding component like disable, enable\n */\n@Pipe({\n    name: 'translate',\n    pure: true,\n    standalone: false\n})\nexport class PrimitiveTranslatePipe implements PipeTransform {\n\n    constructor(private translateService: TranslatorBaseService) {\n    }\n\n    public transform(query: string, ...args: any[]): any {\n        return this.translateService.instant(query);\n    }\n}\n","import {OnboardingIconConfiguration} from './models/onboarding-icon-configuration.interface';\nimport {OnboardingService} from './services/onboarding.service';\nimport {Component, ViewEncapsulation} from '@angular/core';\n\n\n/**\n * onboarding button including context menu (see header.component in rolib/navigation)\n */\n@Component({\n    selector: 'rosen-onboarding-button',\n    templateUrl: './onboarding-button.component.html',\n    styleUrls: ['./onboarding-button.component.less'],\n    encapsulation: ViewEncapsulation.None,\n    standalone: false\n})\nexport class OnboardingButtonComponent {\n\n    /** used by template to apply the customizations on icons */\n    public iconConfig: OnboardingIconConfiguration;\n\n    constructor(private onboardingService: OnboardingService) {\n        const config = onboardingService.getConfiguration();\n        if (config) {\n            this.iconConfig = config.iconConfiguration;\n        }\n    }\n\n    /**\n     * if true, the count is visible\n     * is true, if the onboarding service is disabled and at least one onboarding item is visible\n     */\n    public get showOnboardingItemCount(): boolean {\n        return !this.onboardingService.isEnabled() &&\n            this.onboardingService.visibleItems &&\n            this.onboardingService.visibleItems.totalLength > 0;\n    }\n\n    /**\n     * gets the visible item count\n     */\n    public get onboardingItemCount(): number {\n        return this.onboardingService.visibleItems.totalLength;\n    }\n\n    /**\n     * used by template\n     * enables the onboarding service\n     */\n    public enableOnboarding(): void {\n        this.onboardingService.enable();\n    }\n\n    /**\n     * disables the onboarding service\n     */\n    public disableOnboarding(): void {\n        this.onboardingService.disable();\n    }\n\n    /**\n     * resets the onboarding service\n     * removes all selectors from seen selectors\n     */\n    public clearOnboarding(): void {\n        this.onboardingService.clearSeenSelectors();\n    }\n\n    /**\n     * is true, if the onboarding service is enabled\n     */\n    public isOnboardingEnabled(): boolean {\n        return this.onboardingService.isEnabled();\n    }\n}\n","<div class=\"onboarding-button-container\">\n    <mat-menu #onboardingMenu=\"matMenu\">\n        <button mat-menu-item (click)=\"enableOnboarding()\" *ngIf=\"!isOnboardingEnabled()\"\n                class=\"onboarding-menu-button\">\n            <mat-icon>add_alert</mat-icon>\n            {{'ONBOARDING_ENABLE'|translate}}\n        </button>\n        <button mat-menu-item (click)=\"disableOnboarding()\" *ngIf=\"isOnboardingEnabled()\"\n                class=\"onboarding-menu-button\">\n            <mat-icon>notifications_off</mat-icon>\n            {{'ONBOARDING_DISABLE'|translate}}\n        </button>\n        <button mat-menu-item (click)=\"clearOnboarding()\" class=\"onboarding-menu-button\">\n            <mat-icon>undo</mat-icon>\n            {{'ONBOARDING_CLEAR'|translate}}\n        </button>\n    </mat-menu>\n    <button *ngIf=\"iconConfig\" mat-icon-button [matMenuTriggerFor]=\"onboardingMenu\" class=\"onboarding-button\" [title]=\"'ONBOARDING'|translate\">\n        <mat-icon *ngIf=\"iconConfig.matIconName && !iconConfig.svgIcon && !iconConfig.fontSet\"\n                  [matBadgeColor]=\"iconConfig.matBadgeColor\" [matBadgeHidden]=\"isOnboardingEnabled()\" [matBadge]=\"onboardingItemCount\"\n                  [matBadgePosition]=\"iconConfig.matBadgePosition\" [matBadgeSize]=\"iconConfig.matBadgeSize\"\n                  [matBadgeOverlap]=\"true\">{{iconConfig.matIconName}}\n        </mat-icon>\n        <mat-icon *ngIf=\"iconConfig.svgIcon || iconConfig.fontSet\"\n                  [svgIcon]=\"iconConfig.svgIcon\"\n                  [fontSet]=\"iconConfig.fontSet\" [fontIcon]=\"iconConfig.fontIcon\"\n                  [matBadgeColor]=\"iconConfig.matBadgeColor\" [matBadgeHidden]=\"isOnboardingEnabled()\" [matBadge]=\"onboardingItemCount\"\n                  [matBadgePosition]=\"iconConfig.matBadgePosition\" [matBadgeSize]=\"iconConfig.matBadgeSize\"\n                  [matBadgeOverlap]=\"true\">\n        </mat-icon>\n    </button>\n</div>\n","import { OnboardingItemDescription } from './onboarding-item-description.model';\n\nexport class OnboardingItem {\n    public selector: string;\n    public headline: string;\n    public details: string;\n    public textAlign?: 'center' | 'left' | 'right';\n    public position: string;\n    public descriptions: Array<OnboardingItemDescription>;\n    public disableSpotlight = false;\n    public disableBackground = false;\n    public transparentSpotlight = false;\n    public toParent = false;\n}\n","import { OnboardingItem } from './onboarding-item.model';\n\nexport class VisibleOnboardingItem {\n\n    constructor(public item?: OnboardingItem, public element?: HTMLElement) {\n    }\n\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * return the global native browser window object\n */\nfunction _window(): any {\n    return window;\n}\n\n/**\n * Abstraction of the window reference\n */\n@Injectable(\n    {providedIn: 'root' /* makes sure that service stays a single instance among seperate modules */}\n)\nexport class WindowRef {\n\n    public get nativeWindow(): any {\n        return _window();\n    }\n}\n","import {VisibleOnboardingItem} from './models/visible-onboarding-item.model';\nimport {TranslatorBaseService} from './services/translator-base.service';\nimport {WindowRef} from './services/window-ref.service';\nimport {OnboardingHtmlElementHelper} from './models/onboarding-html-element-helper';\nimport {Component, ElementRef, Input, ViewChild, ViewEncapsulation} from '@angular/core';\n\nconst topPadding = 25;\nconst rightPadding = 25;\nconst leftPadding = 25;\n\n/**\n * used by onboarding component\n * shows the headline and detail text of the OnboardingItem\n * calculates the positions of the item\n */\n@Component({\n    selector: 'rosen-onboarding-item',\n    templateUrl: './onboarding-item.component.html',\n    styleUrls: ['./onboarding-item.component.less'],\n    encapsulation: ViewEncapsulation.None,\n    standalone: false\n})\nexport class OnboardingItemComponent {\n\n    /**\n     * the onboarding item with headline and text and the target html element\n     */\n    @Input()\n    public item: VisibleOnboardingItem;\n\n    /**\n     * the onboarding item container\n     * used to calculate the position\n     */\n    @ViewChild('container', { static: true })\n    private container: ElementRef;\n\n    constructor(private translatorService: TranslatorBaseService, private windowRef: WindowRef) {\n    }\n\n    /**\n     * calculates the position of the OnboardingItemComponent\n     */\n    public getStyle() {\n        const pos = OnboardingHtmlElementHelper.getPosition(this.item.element);\n        let transform = 'none';\n\n        switch (this.item.item.position) {\n            case 'top':\n                pos.x += this.item.element.offsetWidth / 2;\n                if (pos.x < this.getContainerWidth() / 2) {\n                    pos.x = this.getContainerWidth() / 2;\n                } else if (pos.x > this.getWindowScreenWidth() - this.getContainerWidth()) {\n                    pos.x = this.getWindowScreenWidth() - this.getContainerWidth();\n                }\n                pos.y -= topPadding;\n                transform = 'translate(-50%,-100%)';\n                break;\n            case 'right':\n                pos.x += Math.min(this.item.element.offsetWidth + rightPadding, this.getWindowScreenWidth() - this.getContainerWidth() / 2);\n                pos.y += this.item.element.offsetHeight / 2;\n                if (pos.y < 0) {\n                    pos.y = 0;\n                } else if (pos.y > this.getWindowScreenHeight() - this.getContainerHeight() / 2) {\n                    pos.y = this.getWindowScreenHeight() - this.getContainerHeight() / 2;\n                }\n                transform = 'translateY(-50%)';\n                break;\n            case 'left':\n                pos.x -= leftPadding;\n                pos.y += this.item.element.offsetHeight / 2;\n                if (pos.y < 0) {\n                    pos.y = 0;\n                } else if (pos.y > this.getWindowScreenHeight() - this.getContainerHeight() / 2) {\n                    pos.y = this.getWindowScreenHeight() - this.getContainerHeight() / 2;\n                }\n                transform = 'translate(-100%,-50%)';\n                break;\n            case 'topleft':\n                pos.x -= leftPadding;\n                pos.y -= topPadding;\n                if (pos.y < 0) {\n                    pos.y = 0;\n                } else if (pos.y > this.getWindowScreenHeight() - this.getContainerHeight() / 2) {\n                    pos.y = this.getWindowScreenHeight() - this.getContainerHeight() / 2;\n                }\n                transform = 'translate(-100%,-100%)';\n                break;\n\n            case 'bottom':\n            default:\n                pos.x += this.item.element.offsetWidth / 2;\n                if (pos.x < this.getContainerWidth() / 2) {\n                    pos.x = this.getContainerWidth() / 2;\n                } else if (pos.x > this.getWindowScreenWidth() - this.getContainerWidth()) {\n                    pos.x = this.getWindowScreenWidth() - this.getContainerWidth();\n                }\n                pos.y += this.item.element.offsetHeight;\n                transform = 'translate(-50%,25%)';\n                break;\n        }\n        return {\n            left: pos.x + 'px',\n            transform: transform,\n            top: pos.y + 'px'\n        };\n    }\n\n    public getHeadline(): string {\n        const description = this.item.item.descriptions?.find( d => d.language === this.translatorService.currentLang);\n        return description ? description.headline : this.item.item.headline;\n    }\n\n    public getDetails(): string {\n        const description = this.item.item.descriptions?.find( d => d.language === this.translatorService.currentLang);\n        return description ? description.details : this.item.item.details;\n    }\n\n    public getTextAlignClass(): string {\n        if ((this.item.item.textAlign == null) || this.item.item.textAlign === 'center') {\n            return ''; // ==> center\n        }\n        return `align-${this.item.item.textAlign}`;\n    }\n\n    private getContainerWidth(): number {\n        return this.container.nativeElement.offsetWidth;\n    }\n\n    private getContainerHeight(): number {\n        return this.container.nativeElement.offsetHeight;\n    }\n\n    private getWindowScreenWidth(): number {\n        return this.windowRef.nativeWindow ? this.windowRef.nativeWindow.screen.width : 1024;\n    }\n\n    private getWindowScreenHeight(): number {\n        return this.windowRef.nativeWindow ? this.windowRef.nativeWindow.screen.height : 768;\n    }\n}\n","<div #container class=\"onboarding-item\" [ngStyle]=\"getStyle()\">\n    <div class=\"onboarding-item-header text-color animated script-font fade-in-left\" ngClass=\"getTextAlignClass()\">\n        {{getHeadline()}}\n    </div>\n    <div class=\"onboarding-item-details text-color animated regular-font fade-in-right\" ngClass=\"getTextAlignClass()\">\n        {{getDetails()}}\n    </div>\n</div>\n","import {DomSanitizer, SafeStyle} from '@angular/platform-browser';\nimport {OnboardingButtonsPosition} from './models/onboarding-buttons-position.enum';\nimport {OnboardingButtonsConfiguration} from './models/onboarding-buttons-configuration.interface';\nimport {VisibleOnboardingItem} from './models/visible-onboarding-item.model';\nimport {OnboardingTextConfiguration} from './models/onboarding-text-configuration.interface';\nimport {OnboardingItemContainer} from './models/onboarding-item-container.model';\nimport {OnboardingService} from './services/onboarding.service';\nimport {OnboardingHtmlElementHelper} from './models/onboarding-html-element-helper';\nimport {OnboardingItem} from './models/onboarding-item.model';\nimport {AfterViewInit, Component, OnDestroy, OnInit, ViewEncapsulation} from '@angular/core';\nimport {Subscription} from 'rxjs';\n\n/**\n * Main component of the onboarding module.\n * Handles the visualization of the onboarding items\n */\n@Component({\n    selector: 'rosen-onboarding',\n    templateUrl: './onboarding.component.html',\n    styleUrls: ['./onboarding.component.less'],\n    encapsulation: ViewEncapsulation.None,\n    standalone: false\n})\nexport class OnboardingComponent implements OnInit, AfterViewInit, OnDestroy {\n\n    /**\n     * current visible onboarding item\n     */\n    public visibleItem: VisibleOnboardingItem;\n\n    /**\n     * if true, the \"show next\" button is visible\n     * it false, the \"got it\" button is visible\n     * is true, if there are more items to show\n     */\n    public hasNext: boolean;\n\n    /**\n     * Do not assign directly use onboardingSevice.configure\n     * Name of the material icon to use (defaults to contact_support) (excludes fontSet,fontIcon and svgIcon)\n     **/\n    public matIconName: string;\n    /**\n     * Do not assign directly use onboardingSevice.configure\n     * icon class for span (bootstrap style) (excludes matIconeName and svgIcon)\n     */\n    public fontSet: string;\n    /**\n     * Do not assign directly use onboardingSevice.configure\n     *  icon class for span (bootstrap style) (excludes matIconeName and svgIcon)\n     */\n    public fontIcon: string;\n    /**\n     * Do not assign directly use onboardingSevice.configure\n     *  name of registered svg icon (excludes matIconeName,fontSet and fontIcon)\n     */\n    public svgIcon: string;\n    public dynamicCss: SafeStyle;\n    private textConfig: OnboardingTextConfiguration;\n    private buttonConfig: OnboardingButtonsConfiguration;\n    private visibleItemsChangedSubscription: Subscription;\n\n    constructor(public onboardingService: OnboardingService, private domSanitizer: DomSanitizer) {\n        this.visibleItem = null;\n        const config = onboardingService.getConfiguration();\n        this.textConfig = config.textConfiguration;\n        this.buttonConfig = config.buttonsConfiguration;\n        if (config.iconConfiguration) { // we expect the config to be present always but just in case\n            this.matIconName = config.iconConfiguration.matIconName;\n            this.fontSet = config.iconConfiguration.fontSet;\n            this.fontIcon = config.iconConfiguration.fontIcon;\n            this.svgIcon = config.iconConfiguration.svgIcon;\n        }\n\n    }\n\n    public ngOnInit() {\n        // Dynamic generated css is needed because these options have be configurable\n        let dynCss = ``;\n        // for this component\n        dynCss += `<style type=\"text/css\">`;\n        dynCss += `.onboarding-component-container .script-font { font-family: ${this.textConfig.scriptFontFamily}}`;\n        dynCss += `.onboarding-component-container .regular-font { font-family: ${this.textConfig.regularFontFamily}}`;\n        dynCss += `</style>`;\n        this.dynamicCss = this.domSanitizer.bypassSecurityTrustHtml(dynCss);\n    }\n\n    public ngAfterViewInit() {\n\n        this.visibleItemsChangedSubscription = this.onboardingService.visibleItemsChanged.subscribe(() => {\n            this.visibleItem = this.onboardingService.visibleItems.currentItem;\n            this.hasNext = this.onboardingService.visibleItems.hasNext;\n            if (this.visibleItem) {\n                this.showItem(this.visibleItem);\n            }\n        });\n    }\n\n    public ngOnDestroy(): void {\n        if (this.visibleItemsChangedSubscription) {\n            this.visibleItemsChangedSubscription.unsubscribe();\n        }\n        this.onboardingService.hide(); // hide ALL items\n    }\n\n    /**\n     * gets the fixed position of the html element\n     * used by template to set the position of the spotlight\n     */\n    public getPositionStyle(ele: HTMLElement) {\n        const pos = OnboardingHtmlElementHelper.getPosition(ele);\n        const style: any = {\n            position: 'fixed',\n            left: pos.x + 'px',\n            top: pos.y + 'px',\n            width: pos.width + 'px',\n            height: pos.height + 'px'\n        };\n        if (pos.fixed) {\n            style.background = 'transparent';\n        }\n        return style;\n    }\n\n    public isSpotlightTransparent(item: OnboardingItem) {\n        return item.transparentSpotlight;\n    }\n\n    /**\n     * used by turn off button in template\n     */\n    public disable(): void {\n        if (this.visibleItem) {\n            this.hideItem(this.visibleItem); // hide old item\n        }\n        this.onboardingService.disable();\n    }\n\n    /**\n     * hide current group (show next one if one is available\n     */\n    public hide(): void {\n        if (this.onboardingService.visibleItems && this.hasNext) {\n            // hide current and show next item\n            this.hideItem(this.visibleItem); // hide OLD items\n            this.visibleItem = this.onboardingService.visibleItems.nextItem();\n            this.hasNext = this.onboardingService.visibleItems.hasNext; // show NEW ones\n            this.showItem(this.visibleItem);\n        } else {\n            this.hideItem(this.visibleItem);\n            this.onboardingService.hide(); // mark all items as seen...\n            this.visibleItem = null;\n            this.hasNext = false;\n        }\n    }\n\n    public buttonsPositionStyle(): any {\n        switch (this.buttonConfig.position) {\n            case OnboardingButtonsPosition.Bottom:\n                return {\n                    bottom: this.buttonConfig.verticalDistanceToBorderInPx + 'px',\n                    left: '50%',\n                    transform: 'translateX(-50%)',\n                };\n            case OnboardingButtonsPosition.BottomLeft:\n                return {\n                    bottom: this.buttonConfig.verticalDistanceToBorderInPx + 'px',\n                    left: this.buttonConfig.horizontalDistanceToBorderInPx + 'px',\n                };\n            case OnboardingButtonsPosition.Left:\n                return {\n                    top: '50%',\n                    transform: 'translateY(-50%)',\n                    left: this.buttonConfig.horizontalDistanceToBorderInPx + 'px'\n                };\n            case OnboardingButtonsPosition.TopLeft:\n                return {\n                    top: this.buttonConfig.verticalDistanceToBorderInPx + 'px',\n                    left: this.buttonConfig.horizontalDistanceToBorderInPx + 'px'\n                };\n            case OnboardingButtonsPosition.Top:\n                return {\n                    top: this.buttonConfig.verticalDistanceToBorderInPx + 'px',\n                    left: '50%',\n                    transform: 'translateX(-50%)',\n                };\n            case OnboardingButtonsPosition.TopRight:\n                return {\n                    top: this.buttonConfig.verticalDistanceToBorderInPx + 'px',\n                    right: this.buttonConfig.horizontalDistanceToBorderInPx + 'px'\n                };\n            case OnboardingButtonsPosition.Right:\n                return {\n                    top: '50%',\n                    transform: 'translateY(-50%)',\n                    right: this.buttonConfig.horizontalDistanceToBorderInPx + 'px'\n                };\n            case OnboardingButtonsPosition.BottomRight:\n            default:\n                return {\n                    bottom: this.buttonConfig.verticalDistanceToBorderInPx + 'px',\n                    right: this.buttonConfig.horizontalDistanceToBorderInPx + 'px'\n                };\n        }\n    }\n\n    /**\n     * Show onboarding item\n     */\n    private showItem(i: VisibleOnboardingItem) {\n        if (this.onboardingService.isEnabled()) {\n            i.element.classList.add('onboarding-highlighted');\n            if (!i.element.style.position || i.element.style.position === 'static') {\n                i.element.classList.add('onboarding-highlighted-on-static');\n            }\n        }\n    }\n\n    /**\n     * Hide SINGLE element without change notification\n     */\n    private hideItem(i: VisibleOnboardingItem) {\n        i.element.classList.remove('onboarding-highlighted');\n        i.element.classList.remove('onboarding-highlighted-on-static');\n    }\n\n\n}\n","<span [innerHtml]=\"dynamicCss\"></span>\n\n<div class=\"onboarding-component-container\" *ngIf=\"onboardingService.isEnabled() && visibleItem\">\n    <div class=\"onboarding-header script-font\" *ngIf=\"onboardingService.isEnabled() && visibleItem\">\n        <mat-icon *ngIf=\"matIconName && !svgIcon && !fontSet\">{{matIconName}}</mat-icon>\n        <mat-icon *ngIf=\"svgIcon || fontSet\" [svgIcon]=\"svgIcon\" [fontSet]=\"fontSet\" [fontIcon]=\"fontIcon\"></mat-icon>\n        {{'ONBOARDING' |translate|uppercase}}\n    </div>\n    <div class=\"onboarding-shadow\"\n         [ngStyle]=\"getPositionStyle(visibleItem.element)\"></div>\n    <div class=\"onboarding-spotlight\"\n         [class.onboarding-spotlight-transparent]=\"isSpotlightTransparent(visibleItem.item)\"\n         [ngStyle]=\"getPositionStyle(visibleItem.element)\"></div>\n    <div class=\"onboarding-items\">\n        <div *ngFor=\"let currentItem of onboardingService.visibleItems.allItems\">\n            <rosen-onboarding-item [item]=\"currentItem\" *ngIf=\"currentItem === visibleItem\"></rosen-onboarding-item>\n        </div>\n    </div>\n    <div class=\"onboarding-overlay\" (click)=\"hide()\"></div>\n    <div class=\"onboarding-buttons\" [ngStyle]=\"buttonsPositionStyle()\">\n        <button mat-flat-button color=\"warn\" (click)=\"disable()\">\n            <span>{{'ONBOARDING_DO_NOT_SHOW_AGAIN_MSG' |translate}}</span>\n        </button>\n        <button mat-flat-button color=\"primary\" (click)=\"hide()\">\n            <span *ngIf=\"!hasNext\">{{'ONBOARDING_GOT_IT_MSG' |translate}}</span>\n            <span *ngIf=\"hasNext\">{{'ONBOARDING_NEXT_MSG' | translate}}</span>\n        </button>\n    </div>\n</div>\n","import { SeenSelectorsBaseService } from './seen-selectors-base.service';\nimport {ErrorHandler, Injectable} from '@angular/core';\nimport {Observable, of} from 'rxjs';\n\n/**\n * Unique key to identify the seen onboarding items in the local storage\n */\nconst seenSelectorsLocalStorageKey = '894ae732-b4bd-45c9-b543-6f9c5c5a86b6';\n\n/**\n * Stores the seen onboarding items to the local storage\n *\n * If you want to implement an own service to store the data e.g. in a database you can extend\n * your own service from theSeenSelectorsBaseService and use the provide feature in your app.module with\n * {provide: SeenSelectorsBaseService, useClass: YourOwnSeenSelectorsService}\n */\n@Injectable()\nexport class LocalStorageSeenSelectorsService extends SeenSelectorsBaseService {\n\n    constructor(private errorHandler: ErrorHandler) {\n        super();\n    }\n\n    /**\n     * loads seen items from localStorage\n     * @returns string array of all seen selectors\n     */\n    public load(): Observable<Array<string>> {\n        const seenSelectorsString = localStorage.getItem(seenSelectorsLocalStorageKey);\n        if (seenSelectorsString?.length > 0) {\n            try {\n                return of(JSON.parse(seenSelectorsString));\n            } catch (error) {\n                this.errorHandler.handleError(error);\n            }\n        }\n        return of([]);\n    }\n\n    /**\n     * save items to localStorage\n     * @returns success of the operation (true = good, false = failed)\n     */\n    public save(seenSelectors: Array<string>): void {\n        try {\n            localStorage.setItem(seenSelectorsLocalStorageKey, JSON.stringify(seenSelectors));\n        } catch (error) {\n            this.errorHandler.handleError(error);\n        }\n    }\n}\n","import { EnabledStatusBaseService } from './enabled-status-base.service';\nimport {ErrorHandler, Injectable} from '@angular/core';\nimport {Observable, of} from 'rxjs';\n\n/**\n * Unique key to identify the onboarding enabled status in the local storage\n */\nconst enabledLocalStorageKey = '42cfe10a-c2d3-42ba-9c55-6198545a0c49';\n\n/**\n * Stores the enabled status of the onboarding to the local storage\n *\n * If you want to implement an own service to store the data e.g. in a database you can extend your own service\n * from the EnabledStatusBaseService and use the provide feature in your app.module with\n * {provide: EnabledStatusBaseService, useClass: YourOwnEnabledStatusService}\n */\n@Injectable(\n    {providedIn: 'root' /* makes sure that service stays a single instance among seperate modules */}\n)\nexport class LocalStorageEnabledStatusService extends EnabledStatusBaseService {\n\n    constructor(private errorHandler: ErrorHandler) {\n        super();\n    }\n\n    /**\n     * loads the status from the persistent storage\n     * @returns status (true = enabled, false = disabled)\n     */\n    public load(): Observable<boolean> {\n        try {\n            return of('true' === localStorage.getItem(enabledLocalStorageKey));\n        } catch (error) {\n            this.errorHandler.handleError(error);\n        }\n        return of(true);\n    }\n\n    /**\n     * saves the status to localStorage\n     * @returns success of the operation (true = good, false = failed)\n     */\n    public save(enabled: boolean): void {\n        try {\n            localStorage.setItem(enabledLocalStorageKey, enabled ? 'true' : 'false');\n        } catch (error) {\n            this.errorHandler.handleError(error);\n        }\n    }\n}\n","import { TranslatorBaseService } from './translator-base.service';\nimport {EventEmitter, Injectable} from '@angular/core';\n\n/**\n * Service for the translations of internal text\n */\n@Injectable(\n    {providedIn: 'root' /* makes sure that service stays a single instance among seperate modules */}\n)\nexport class BuildInTranslatorService extends TranslatorBaseService {\n\n    /**\n     *  An EventEmitter to listen to lang change events.\n     *  A LangChangeEvent is an object with the minimium properties lang: string (where lang is the new language code)\n     */\n    public onLangChange: EventEmitter<{ lang: string }> = new EventEmitter<{ lang: string }>();\n    private translations = {\n        'ONBOARDING': 'Onboarding',\n        'ONBOARDING_FAILED_TO_LOAD_USER_SETTINGS': 'Failed to load onboarding settings.',\n        'ONBOARDING_FAILED_TO_SAVE_USER_SETTINGS': 'Failed to save onboarding settings.',\n        'ONBOARDING_GOT_IT_MSG': 'Got it',\n        'ONBOARDING_DO_NOT_SHOW_AGAIN_MSG': 'Turn off',\n        'ONBOARDING_NEXT_MSG': 'Next',\n        'ONBOARDING_ENABLE': 'Turn on',\n        'ONBOARDING_DISABLE': 'Turn off',\n        'ONBOARDING_CLEAR': 'Reset'\n    };\n\n    /**\n     * The language (code) currently used\n     */\n    public get currentLang(): string {\n        return 'en';\n    }\n\n    /**\n     * Returns a translation instantly from the internal state of loaded translation.\n     */\n    public instant(key: string): string {\n        const text = this.translations[key];\n        if (typeof text === 'string') {\n            return text;\n        }\n        return key;\n    }\n\n\n}\n","import { OnboardingComponent } from './onboarding.component';\nimport { OnboardingItemComponent } from './onboarding-item.component';\nimport { OnboardingButtonComponent } from './onboarding-button.component';\nimport {PrimitiveTranslatePipe} from './pipes/primitive-translate.pipe';\nimport {BrowserDOMSelectorService} from './services/browser-dom-selector.service';\nimport {WindowRef} from './services/window-ref.service';\nimport {SeenSelectorsBaseService} from './services/seen-selectors-base.service';\nimport {EnabledStatusBaseService} from './services/enabled-status-base.service';\nimport {TranslatorBaseService} from './services/translator-base.service';\nimport {LocalStorageSeenSelectorsService} from './services/local-storage-seen-selectors.service';\nimport {LocalStorageEnabledStatusService} from './services/local-storage-enabled-status.service';\nimport {BuildInTranslatorService} from './services/build-in-translator.service';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatBadgeModule} from '@angular/material/badge';\nimport {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatMenuModule} from '@angular/material/menu';\n\n/**\n * Module for ngx-onboarding.\n * Import this into your \"main\" module e.g. AppModule\n */\n@NgModule({ declarations: [\n        OnboardingComponent,\n        OnboardingItemComponent,\n        OnboardingButtonComponent,\n        PrimitiveTranslatePipe\n    ],\n    exports: [\n        OnboardingComponent,\n        OnboardingButtonComponent\n    ], imports: [CommonModule,\n        MatButtonModule,\n        MatBadgeModule,\n        MatIconModule,\n        MatMenuModule], providers: [\n        BrowserDOMSelectorService,\n        WindowRef,\n        {\n            provide: SeenSelectorsBaseService, useClass: LocalStorageSeenSelectorsService\n        },\n        {\n            provide: EnabledStatusBaseService, useClass: LocalStorageEnabledStatusService\n        },\n        {\n            provide: TranslatorBaseService, useClass: BuildInTranslatorService\n        },\n        provideHttpClient(withInterceptorsFromDi())\n    ] })\nexport class OnboardingModule {\n}\n","/*\n * Public API Surface of ngx-onboarding\n */\n\nexport * from './lib/services/onboarding.service';\nexport * from './lib/onboarding-button.component';\nexport * from './lib/models/onboarding-item.model';\nexport * from './lib/models/onboarding-buttons-position.enum';\nexport * from './lib/onboarding.component';\nexport * from './lib/onboarding.module';\nexport * from './lib/services/seen-selectors-base.service';\nexport * from './lib/services/enabled-status-base.service';\nexport * from './lib/services/translator-base.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.BrowserDOMSelectorService","i2.SeenSelectorsBaseService","i3.EnabledStatusBaseService","i1.TranslatorBaseService","i1.OnboardingService","i2","i3","i7.PrimitiveTranslatePipe","i2.WindowRef","i4","i6.OnboardingItemComponent"],"mappings":"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"}