@rosen-group/ngx-onboarding
Version:
Onboarding module for Angular applications
1 lines • 73.6 kB
Source Map (JSON)
{"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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"}