UNPKG

@rosen-group/ngx-onboarding

Version:

Onboarding module for Angular applications

1 lines 73.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/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/**\n * Wrapper for native implementations of querySelector from window.document\n */\n@Injectable({providedIn: 'root'})\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})\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';\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from \"@angular/material/menu\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatIconButton} from \"@angular/material/button\";\nimport {TranslatorBaseService} from \"./services/translator-base.service\";\nimport {PrimitiveTranslatePipe} from \"./pipes/primitive-translate.pipe\";\nimport {MatBadge} from \"@angular/material/badge\";\n\n\n/**\n * onboarding button including context menu\n */\n@Component({\n    selector: 'rosen-onboarding-button',\n    templateUrl: './onboarding-button.component.html',\n    styleUrls: ['./onboarding-button.component.less'],\n    imports: [\n        MatMenu,\n        MatMenuItem,\n        MatIcon,\n        MatIconButton,\n        MatMenuTrigger,\n        PrimitiveTranslatePipe,\n        MatBadge\n    ],\n    encapsulation: ViewEncapsulation.None\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        @if (!isOnboardingEnabled()) {\n            <button mat-menu-item (click)=\"enableOnboarding()\"\n                    class=\"onboarding-menu-button\">\n                <mat-icon>add_alert</mat-icon>\n                {{ 'ONBOARDING_ENABLE'|translate }}\n            </button>\n        }\n        @if (isOnboardingEnabled()) {\n            <button mat-menu-item (click)=\"disableOnboarding()\"\n                    class=\"onboarding-menu-button\">\n                <mat-icon>notifications_off</mat-icon>\n                {{ 'ONBOARDING_DISABLE'|translate }}\n            </button>\n        }\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    @if (iconConfig) {\n        <button mat-icon-button [matMenuTriggerFor]=\"onboardingMenu\" class=\"onboarding-button\"\n                [title]=\"'ONBOARDING'|translate\">\n            @if (iconConfig.matIconName && !iconConfig.svgIcon && !iconConfig.fontSet) {\n                <mat-icon [matBadgeHidden]=\"isOnboardingEnabled()\"\n                          [matBadge]=\"onboardingItemCount\"\n                          [matBadgeOverlap]=\"true\">{{ iconConfig.matIconName }}\n                </mat-icon>\n            }\n            @if (iconConfig.svgIcon || iconConfig.fontSet) {\n                <mat-icon [svgIcon]=\"iconConfig.svgIcon\"\n                          [fontSet]=\"iconConfig.fontSet\" [fontIcon]=\"iconConfig.fontIcon\"\n                          [matBadgeHidden]=\"isOnboardingEnabled()\"\n                          [matBadge]=\"onboardingItemCount\"\n                          [matBadgeOverlap]=\"true\">\n                </mat-icon>\n            }\n        </button>\n    }\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';\nimport {NgClass, NgStyle} from \"@angular/common\";\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    imports: [\n        NgStyle,\n        NgClass\n    ],\n    encapsulation: ViewEncapsulation.None\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 {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';\nimport {NgStyle, UpperCasePipe} from \"@angular/common\";\nimport {OnboardingItemComponent} from \"./onboarding-item.component\";\nimport {MatButton} from \"@angular/material/button\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {PrimitiveTranslatePipe} from \"./pipes/primitive-translate.pipe\";\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    imports: [\n        PrimitiveTranslatePipe,\n        NgStyle,\n        OnboardingItemComponent,\n        MatButton,\n        MatIcon,\n        UpperCasePipe\n    ],\n    encapsulation: ViewEncapsulation.None\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@if (onboardingService.isEnabled() && visibleItem) {\n    <div class=\"onboarding-component-container\">\n        @if (onboardingService.isEnabled() && visibleItem) {\n            <div class=\"onboarding-header script-font\">\n                @if (matIconName && !svgIcon && !fontSet) {\n                    <mat-icon>{{ matIconName }}</mat-icon>\n                }\n                @if (svgIcon || fontSet) {\n                    <mat-icon [svgIcon]=\"svgIcon\" [fontSet]=\"fontSet\" [fontIcon]=\"fontIcon\"></mat-icon>\n                }\n                {{ 'ONBOARDING' | translate | uppercase }}\n            </div>\n        }\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            @for (currentItem of onboardingService.visibleItems.allItems; track currentItem) {\n                <div>\n                    @if (currentItem === visibleItem) {\n                        <rosen-onboarding-item [item]=\"currentItem\"></rosen-onboarding-item>\n                    }\n                </div>\n            }\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                @if (!hasNext) {\n                    <span>{{ 'ONBOARDING_GOT_IT_MSG' | translate }}</span>\n                }\n                @if (hasNext) {\n                    <span>{{ 'ONBOARDING_NEXT_MSG' | translate }}</span>\n                }\n            </button>\n        </div>\n    </div>\n}\n","import {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 {NgModule} from '@angular/core';\nimport {provideHttpClient, withInterceptorsFromDi} from '@angular/common/http';\n\n/**\n * Module for ngx-onboarding.\n * Import this into your \"main\" module e.g. AppModule\n */\n@NgModule({\n    providers: [\n        provideHttpClient(withInterceptorsFromDi())\n    ]\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.WindowRef"],"mappings":"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"}