@ruc-lib/tour-guide 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruc-lib-tour-guide.mjs","sources":["../../src/lib/model/default-config.model.ts","../../src/lib/ruclib-tour-guide/ruclib-tour-guide.component.ts","../../src/lib/ruclib-tour-guide/ruclib-tour-guide.component.html","../../src/lib/ruclib-tour-guide.module.ts","../../src/ruc-lib-tour-guide.ts"],"sourcesContent":["import { TourGuideConfig } from \"./tour-guide.model\";\r\n\r\nexport const defaultTourGuideConfig: TourGuideConfig = {\r\n type: \"advance\",\r\n showSkipButton: true,\r\n buttonsFontSize: \"14px\",\r\n titleFontSize: '16px',\r\n contentFontSize: '14px',\r\n buttonsAlignment: 'end',\r\n stepCountAlignment: 'start',\r\n stepCountStartText: 'Step',\r\n stepCountMiddleText: 'of',\r\n skipButtonText: 'Skip',\r\n prevButtonText: 'Back',\r\n nextButtonText: 'Next',\r\n finishButtonText: 'Finish',\r\n highlightBorderColor: '#007bff',\r\n highlightBorderWidth: '2px',\r\n defaultPopupWidth: '250px',\r\n}\r\n\r\nexport const DEFAULT_VALUES = {\r\n arrowRight: 'ArrowRight',\r\n arrowLeft: 'ArrowLeft',\r\n escape: 'Escape',\r\n popup: {width: 300, height: 150, top: 0, left: 0, padding: 10, safeMargin: 64},\r\n startTourButtonLabel: 'Start Tour Guide'\r\n }","import { Component, Input, Output, EventEmitter, Renderer2, OnInit, OnDestroy, ElementRef, ViewChild, OnChanges, SimpleChanges, AfterViewInit } from '@angular/core';\r\nimport { TourGuideConfig, TourGuideData } from '../model/tour-guide.model';\r\nimport { DEFAULT_VALUES, defaultTourGuideConfig } from '../model/default-config.model';\r\n\r\n@Component({\r\n selector: 'uxp-ruclib-tour-guide',\r\n templateUrl: './ruclib-tour-guide.component.html',\r\n styleUrls: ['./ruclib-tour-guide.component.scss'],\r\n})\r\nexport class RuclibTourGuideComponent implements OnInit, OnDestroy, OnChanges {\r\n @Output() rucEvent = new EventEmitter<any>();\r\n @Input() rucInputData!: TourGuideConfig;\r\n @Input() customTheme: string | undefined;\r\n @Input() showStartButton = false;\r\n @Input() dataSource: Array<TourGuideData> = [];\r\n\r\n @ViewChild('overlayRef') overlayRef!: ElementRef;\r\n\r\n public currentStepIndex = 0;\r\n private currentElement?: HTMLElement;\r\n public popupStyle!: { top: string; left: string };\r\n private originalParent?: HTMLElement;\r\n public showTour = false;\r\n public startTourButtonLabel = DEFAULT_VALUES?.startTourButtonLabel;\r\n private resizeListener: any;\r\n public config = defaultTourGuideConfig;\r\n\r\n /**\r\n * class constructor\r\n * @param tourGuideService \r\n * @param renderer \r\n */\r\n constructor(\r\n private renderer: Renderer2\r\n ) { }\r\n\r\n /**\r\n * handling input data changes\r\n * updating default config with user provided config\r\n * @param changes \r\n */\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes && changes['rucInputData'] && changes['rucInputData'].currentValue) {\r\n this.config = { ...this.config, ...changes['rucInputData'].currentValue }\r\n }\r\n }\r\n\r\n /**\r\n * handling change on component initilization\r\n */\r\n ngOnInit() {\r\n document.addEventListener('keydown', this.handleKey);\r\n this.resizeListener = this.debounce(() => this.highlightElement(), 150);\r\n window.addEventListener('resize', this.resizeListener);\r\n\r\n if (!this.showStartButton) {\r\n this.startTour()\r\n }\r\n }\r\n\r\n /**\r\n * this method handle the start of tour guide fetaure\r\n */\r\n startTour() {\r\n this.showTour = true;\r\n this.lockScroll();\r\n setTimeout(() => {\r\n if (!this.originalParent) {\r\n this.originalParent = this.renderer.parentNode(this.overlayRef?.nativeElement);\r\n }\r\n if (this.overlayRef) {\r\n this.renderer.appendChild(document.body, this.overlayRef?.nativeElement);\r\n }\r\n this.currentStepIndex = 0;\r\n if (this.config.type === 'advance') {\r\n this.highlightElement();\r\n }\r\n }, 10)\r\n }\r\n\r\n /**\r\n * this method handle the navigation to next tour guide feature\r\n */\r\n nextStep() {\r\n this.removeHighlight();\r\n this.currentStepIndex++;\r\n if (this.currentStepIndex < this.dataSource.length) {\r\n if (this.config.type === 'advance') this.highlightElement();\r\n } else {\r\n this.currentStepIndex--;\r\n this.showTour = false;\r\n this.unlockScroll();\r\n this.rucEvent.emit({ eventName: 'onTourComplete', eventOutput: null });\r\n if (this.overlayRef) {\r\n this.renderer.removeChild(document.body, this.overlayRef.nativeElement);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * this method allow us to navigate back to previous tour guide feature\r\n */\r\n previousStep() {\r\n if (this.currentStepIndex > 0) {\r\n this.removeHighlight();\r\n this.currentStepIndex--;\r\n if (this.config.type === 'advance') this.highlightElement();\r\n }\r\n }\r\n\r\n /**\r\n * method to skip the tour guide thats in progress\r\n */\r\n skip() {\r\n this.removeHighlight();\r\n this.showTour = false;\r\n this.unlockScroll();\r\n this.rucEvent.emit({ eventName: 'onTourSkip', eventOutput: null });\r\n if (this.overlayRef) {\r\n this.renderer.removeChild(document.body, this.overlayRef.nativeElement);\r\n }\r\n }\r\n\r\n /**\r\n * method to highlight feature area and changin details popup based on provide config\r\n * @returns \r\n */\r\n private async highlightElement() {\r\n const step = this.dataSource[this.currentStepIndex];\r\n if (this.config.type === 'simple' || !step?.selector) {\r\n return;\r\n }\r\n\r\n // 1. Find and scroll to the element\r\n this.currentElement = await this.findElementAndScroll(step.selector);\r\n if (!this.currentElement) {\r\n return;\r\n }\r\n\r\n // 2. Apply highlight styles\r\n this.applyHighlightStyles(this.currentElement);\r\n\r\n // 3. Calculate and apply popup position\r\n this.calculateAndApplyPopupPosition(this.currentElement, step.position);\r\n\r\n // 4. Create the visual hole in the overlay\r\n this.createTransparentHole();\r\n }\r\n\r\n /**\r\n * Finds an element by its selector, scrolls it into view, and waits for the scroll to complete.\r\n * @param selector The CSS selector for the target element.\r\n * @returns A promise that resolves to the HTMLElement or undefined if not found.\r\n */\r\n private async findElementAndScroll(selector: string): Promise<HTMLElement | undefined> {\r\n const element = document.querySelector(selector) as HTMLElement;\r\n if (!element) {\r\n return undefined;\r\n }\r\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n await this.waitForScroll();\r\n return element;\r\n }\r\n\r\n /**\r\n * Applies CSS classes and styles to visually highlight the target element.\r\n * @param element The element to highlight.\r\n */\r\n private applyHighlightStyles(element: HTMLElement): void {\r\n this.renderer.addClass(element, 'tour-highlight');\r\n this.renderer.setStyle(element, 'position', 'relative');\r\n this.renderer.setStyle(element, 'z-index', '10000');\r\n }\r\n\r\n /**\r\n * Calculates the optimal position for the tour popup and applies it.\r\n * @param element The highlighted element.\r\n * @param position The desired position ('auto', 'top', 'bottom', 'left', 'right').\r\n */\r\n private calculateAndApplyPopupPosition(element: HTMLElement, position: string = 'auto'): void {\r\n const rect = element.getBoundingClientRect();\r\n const offset = this.getAbsoluteOffset(element);\r\n\r\n // Determine the best position if set to 'auto'\r\n const finalPosition = this.determineAutoPosition(position, rect);\r\n\r\n // Get the top/left coordinates based on the position\r\n let coords = this.computePopupCoordinates(finalPosition, offset, element);\r\n\r\n // Ensure the coordinates are within the viewport\r\n coords = this.clampPopupCoordinates(coords);\r\n\r\n // Apply the final styles to the popup\r\n this.popupStyle = {\r\n top: `${coords.top}px`,\r\n left: `${coords.left}px`\r\n };\r\n\r\n // Ensure the popup itself is visible\r\n this.scrollPopupIntoView();\r\n }\r\n\r\n /**\r\n * Determines the best placement for the popup when position is 'auto'.\r\n * @param position The configured position.\r\n * @param rect The BoundingClientRect of the target element.\r\n * @returns The calculated final position.\r\n */\r\n private determineAutoPosition(position: string, rect: DOMRect): string {\r\n if (position !== 'auto') {\r\n return position;\r\n }\r\n\r\n const { padding, width: popupWidth, height: popupHeight, safeMargin } = DEFAULT_VALUES.popup;\r\n\r\n const fitsTop = rect.top >= popupHeight + padding;\r\n const fitsBottom = window.innerHeight - rect.bottom >= popupHeight + padding + safeMargin;\r\n const fitsRight = window.innerWidth - rect.right >= popupWidth + padding;\r\n const fitsLeft = rect.left >= popupWidth + padding;\r\n\r\n if (fitsRight) return 'right';\r\n if (fitsBottom) return 'bottom';\r\n if (fitsLeft) return 'left';\r\n if (fitsTop) return 'top';\r\n return 'bottom'; // fallback\r\n }\r\n\r\n /**\r\n * Computes the top and left coordinates for the popup based on the target element and desired position.\r\n * @param position The final position for the popup.\r\n * @param offset The absolute offset of the target element.\r\n * @param element The target element.\r\n * @returns An object with top and left coordinates.\r\n */\r\n private computePopupCoordinates(position: string, offset: { top: number, left: number }, element: HTMLElement): { top: number, left: number } {\r\n const { padding, width: popupWidth, height: popupHeight } = DEFAULT_VALUES.popup;\r\n let top = DEFAULT_VALUES.popup.top;\r\n let left = DEFAULT_VALUES.popup.left;\r\n\r\n switch (position) {\r\n case 'top':\r\n top = offset.top - popupHeight - padding - 20;\r\n left = offset.left + element.offsetWidth / 2 - popupWidth / 2;\r\n break;\r\n case 'bottom':\r\n top = offset.top + element.offsetHeight + padding;\r\n left = offset.left + element.offsetWidth / 2 - popupWidth / 2;\r\n break;\r\n case 'left':\r\n top = offset.top + element.offsetHeight / 2 - popupHeight / 2;\r\n left = offset.left - popupWidth - padding + 50;\r\n break;\r\n case 'right':\r\n top = offset.top + element.offsetHeight / 2 - popupHeight / 2;\r\n left = offset.left + element.offsetWidth + padding;\r\n break;\r\n }\r\n return { top, left };\r\n }\r\n\r\n /**\r\n * Clamps the popup's coordinates to ensure it stays within the visible viewport.\r\n * @param coords The calculated top and left coordinates.\r\n * @returns The adjusted coordinates.\r\n */\r\n private clampPopupCoordinates(coords: { top: number, left: number }): { top: number, left: number } {\r\n const { padding, width: popupWidth, height: popupHeight, safeMargin } = DEFAULT_VALUES.popup;\r\n const scrollTop = window.scrollY;\r\n const scrollLeft = window.scrollX;\r\n\r\n const maxTop = scrollTop + window.innerHeight - popupHeight - safeMargin;\r\n const maxLeft = scrollLeft + window.innerWidth - popupWidth - padding;\r\n\r\n const top = Math.max(scrollTop + padding, Math.min(coords.top, maxTop));\r\n const left = Math.max(scrollLeft + padding, Math.min(coords.left, maxLeft));\r\n\r\n return { top, left };\r\n }\r\n\r\n /**\r\n * If the popup is rendered inside a scrollable container, this ensures it's scrolled into view.\r\n */\r\n private scrollPopupIntoView(): void {\r\n setTimeout(() => {\r\n const popupEl = document.querySelector('.tour-popup') as HTMLElement;\r\n popupEl?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n }, 50);\r\n }\r\n\r\n /**\r\n * method to execute highlight process after scroll \r\n * @returns \r\n */\r\n private waitForScroll(): Promise<void> {\r\n return new Promise(resolve => setTimeout(resolve, 100)); // ⏱️ Adjust delay if needed\r\n }\r\n\r\n /**\r\n * method to create transparent hole in overlay for visibility of highlighted area\r\n */\r\n private createTransparentHole() {\r\n if(!this.currentElement) return;\r\n setTimeout(() => {\r\n const padding = 5;\r\n const rect: any = this.currentElement?.getBoundingClientRect();\r\n const top = Math.max(rect?.top - padding, 0);\r\n const left = Math.max(rect?.left - padding, 0);\r\n const width = rect?.width + padding * 2;\r\n const height = rect?.height + padding * 2;\r\n\r\n const holeElement = document.querySelector('.hole') as HTMLElement;\r\n this.renderer.setStyle(holeElement, 'left', `${left}px`);\r\n this.renderer.setStyle(holeElement, 'top', `${top}px`);\r\n this.renderer.setStyle(holeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(holeElement, 'height', `${height}px`);\r\n }, 50)\r\n }\r\n\r\n /**\r\n * method to get absolute offset\r\n * @param element \r\n * @returns \r\n */\r\n private getAbsoluteOffset(element: HTMLElement): { top: number; left: number } {\r\n let top = 0, left = 0;\r\n let el: HTMLElement | null = element;\r\n\r\n while (el) {\r\n top += el.offsetTop - el.scrollTop + el.clientTop;\r\n left += el.offsetLeft - el.scrollLeft + el.clientLeft;\r\n el = el.offsetParent as HTMLElement;\r\n }\r\n\r\n return { top, left };\r\n }\r\n\r\n /**\r\n * method to lock scroll when tour guide is active\r\n */\r\n private lockScroll() {\r\n this.renderer.setStyle(document.body, 'overflow', 'hidden');\r\n this.renderer.setStyle(document.documentElement, 'overflow', 'hidden');\r\n document.documentElement.classList.add('tour-scroll-lock');\r\n }\r\n\r\n /**\r\n * method to unlock scroll when tour guide is not active\r\n */\r\n private unlockScroll() {\r\n this.renderer.removeStyle(document.body, 'overflow');\r\n this.renderer.removeStyle(document.documentElement, 'overflow');\r\n document.documentElement.classList.remove('tour-scroll-lock');\r\n }\r\n\r\n /**\r\n * method to remove highlight when tour is skipped or done\r\n */\r\n private removeHighlight() {\r\n if (this.currentElement) {\r\n this.renderer.removeClass(this.currentElement, 'tour-highlight');\r\n this.renderer.removeStyle(this.currentElement, 'z-index');\r\n this.renderer.removeStyle(this.currentElement, 'position');\r\n this.renderer.removeStyle(this.currentElement, 'box-shadow');\r\n }\r\n }\r\n\r\n /**\r\n * method to navigate between tour slides or skip tour using left, right and skip key\r\n * @param event \r\n * @returns \r\n */\r\n private handleKey = (event: KeyboardEvent) => {\r\n if (!this.showTour) return;\r\n if (event.key === DEFAULT_VALUES.arrowRight) this.nextStep();\r\n else if (event.key === DEFAULT_VALUES.arrowLeft) this.previousStep();\r\n else if (event.key === DEFAULT_VALUES.escape) this.skip();\r\n };\r\n\r\n /**\r\n * debounce method for smooth operation\r\n * @param fn \r\n * @param delay \r\n * @returns \r\n */\r\n private debounce(fn: () => void, delay: number) {\r\n let timeout: any;\r\n return () => {\r\n clearTimeout(timeout);\r\n timeout = setTimeout(() => fn(), delay);\r\n };\r\n }\r\n\r\n /**\r\n * handling change on component destroy\r\n */\r\n ngOnDestroy() {\r\n document.removeEventListener('keydown', this.handleKey);\r\n\r\n // Clean up: move overlay back (optional)\r\n if (this.overlayRef && this.originalParent) {\r\n this.renderer.appendChild(this.originalParent, this.overlayRef.nativeElement);\r\n }\r\n\r\n if (this.resizeListener) {\r\n window.removeEventListener('resize', this.resizeListener);\r\n }\r\n }\r\n}\r\n","<div class=\"main\">\r\n <button color=\"primary\" *ngIf=\"showStartButton\" mat-raised-button (click)=\"startTour()\">\r\n {{startTourButtonLabel}}\r\n </button>\r\n\r\n <div id=\"tour-container\" class=\"{{ customTheme }}\" *ngIf=\"showTour\">\r\n <div #overlayRef class=\"tour-overlay\" *ngIf=\"currentStepIndex < dataSource.length\">\r\n <mat-card appearance=\"outlined\" class=\"tour-popup\" [style.minWidth]=\"config.defaultPopupWidth\"\r\n [style.minHeight]=\"dataSource[currentStepIndex].shape === 'circle' ? config.defaultPopupWidth : 'auto'\"\r\n [style.width]=\"dataSource[currentStepIndex].width || config.defaultPopupWidth\"\r\n [style.height]=\"dataSource[currentStepIndex].shape === 'circle' ? dataSource[currentStepIndex].width || config.defaultPopupWidth : 'auto'\"\r\n [ngClass]=\"dataSource[currentStepIndex].shape || 'rounded'\"\r\n [ngStyle]=\"config.type === 'advance' ? popupStyle : null\" class=\"{{config.type}}\">\r\n\r\n <!-- tour modal title -->\r\n <mat-card-header class=\"tour-guide-title\">\r\n <mat-card-title [style.fontSize]=\"config.titleFontSize\" *ngIf=\"dataSource[currentStepIndex].title\">\r\n {{ dataSource[currentStepIndex].title }}\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n <!-- tour content details -->\r\n <div class=\"tour-guide-content\" [style.fontSize]=\"config.contentFontSize\">\r\n <div [innerHTML]=\"dataSource[currentStepIndex].content\"></div>\r\n </div>\r\n\r\n <!-- tour step counter -->\r\n <div class=\"tour-guide-step-counter\" [style.justifyContent]=\"config.stepCountAlignment\">\r\n {{config.stepCountStartText}} {{ currentStepIndex + 1 }} {{config.stepCountMiddleText}} {{\r\n dataSource.length }}\r\n </div>\r\n </mat-card-content>\r\n\r\n <!-- tour action buttons -->\r\n <mat-card-actions class=\"tour-guide-action-buttons\" [style.justifyContent]=\"config.buttonsAlignment\">\r\n <button mat-raised-button [style.fontSize]=\"config.buttonsFontSize\" *ngIf=\"config.showSkipButton\"\r\n (click)=\"skip()\">{{config.skipButtonText}}</button>\r\n\r\n <button mat-raised-button [style.fontSize]=\"config.buttonsFontSize\" (click)=\"previousStep()\"\r\n [disabled]=\"currentStepIndex === 0\">{{config.prevButtonText}}</button>\r\n\r\n <button mat-raised-button [style.fontSize]=\"config.buttonsFontSize\" (click)=\"nextStep()\">\r\n {{ currentStepIndex === dataSource.length - 1 ? config.finishButtonText : config.nextButtonText\r\n }}\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n\r\n <!-- hole on overlayer for highlighted content -->\r\n <div class=\"hole\" [style.borderColor]=\"config.highlightBorderColor\"\r\n [style.borderWidth]=\"config.highlightBorderWidth\"></div>\r\n </div>\r\n\r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RuclibTourGuideComponent } from './ruclib-tour-guide/ruclib-tour-guide.component';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\n\r\n@NgModule({\r\n imports: [CommonModule, MatButtonModule, MatCardModule],\r\n declarations: [RuclibTourGuideComponent],\r\n exports: [RuclibTourGuideComponent],\r\n})\r\nexport class RuclibTourGuideModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,253 +1,3 @@
1
- import * as i0 from '@angular/core';
2
- import { OnInit, OnDestroy, OnChanges, EventEmitter, ElementRef, Renderer2, SimpleChanges } from '@angular/core';
3
-
4
- interface TourGuideConfig {
5
- /**
6
- * Defines the type of tour guide.
7
- * - 'simple': Displays a single popup with navigation buttons.
8
- * - 'advance': Highlights specific elements on the page and guides the user through them.
9
- */
10
- type: 'simple' | 'advance';
11
- /**
12
- * Whether to display a skip button in the tour guide.
13
- */
14
- showSkipButton?: boolean;
15
- /**
16
- * Font size for the buttons in the tour guide.
17
- */
18
- buttonsFontSize?: string;
19
- /**
20
- * Font size for the title of the tour guide.
21
- */
22
- titleFontSize?: string;
23
- /**
24
- * Font size for the content of the tour guide.
25
- */
26
- contentFontSize?: string;
27
- /**
28
- * Alignment of the buttons within the tour guide modal.
29
- */
30
- buttonsAlignment?: 'start' | 'center' | 'end' | 'space-between' | 'space-around' | 'space-evenly';
31
- /**
32
- * Alignment of the step count within the tour guide modal.
33
- */
34
- stepCountAlignment?: 'start' | 'center' | 'end';
35
- /**
36
- * Text for the start of the step count (e.g., "Step").
37
- */
38
- stepCountStartText?: string;
39
- /**
40
- * Text for the middle of the step count (e.g., "of").
41
- */
42
- stepCountMiddleText?: string;
43
- /**
44
- * Text for the skip button.
45
- */
46
- skipButtonText?: string;
47
- /**
48
- * Text for the previous button.
49
- */
50
- prevButtonText?: string;
51
- /**
52
- * Text for the next button.
53
- */
54
- nextButtonText?: string;
55
- /**
56
- * Text for the finish button.
57
- */
58
- finishButtonText?: string;
59
- /**
60
- * Border color for the highlighted element in 'advance' mode.
61
- */
62
- highlightBorderColor?: string;
63
- /**
64
- * Border radius for the highlighted element in 'advance' mode.
65
- */
66
- highlightBorderRadius?: string;
67
- /**
68
- * Width of the border for the highlighted element in 'advance' mode.
69
- */
70
- highlightBorderWidth?: string;
71
- /**
72
- * Default width for the tour guide popup.
73
- */
74
- defaultPopupWidth?: string;
75
- }
76
- interface TourGuideData {
77
- /**
78
- * title for feature slide
79
- */
80
- title?: string;
81
- /**
82
- * description of selected feature in slide
83
- */
84
- content: string;
85
- /**
86
- * The element to which the tour guide will point.
87
- * Only required for 'advance' type tour guide
88
- */
89
- selector?: string;
90
- /**
91
- * Position of the tour guide popup relative to the highlighted element.
92
- */
93
- position?: 'top' | 'bottom' | 'left' | 'right' | 'auto';
94
- /**
95
- * Defines the shape of the modal around the selected element.
96
- * - 'rounded': A rectangle with rounded corner modal.
97
- * - 'rectangle': A rectangular modal.
98
- * - 'circle': A circular modal.
99
- */
100
- shape?: '' | 'rounded' | 'rectangle' | 'circle';
101
- /**
102
- * Defines the width of modal for current slide.
103
- */
104
- width?: string;
105
- }
106
-
107
- declare class RuclibTourGuideComponent implements OnInit, OnDestroy, OnChanges {
108
- private renderer;
109
- rucEvent: EventEmitter<any>;
110
- rucInputData: TourGuideConfig;
111
- customTheme: string | undefined;
112
- showStartButton: boolean;
113
- dataSource: Array<TourGuideData>;
114
- overlayRef: ElementRef;
115
- currentStepIndex: number;
116
- private currentElement?;
117
- popupStyle: {
118
- top: string;
119
- left: string;
120
- };
121
- private originalParent?;
122
- showTour: boolean;
123
- startTourButtonLabel: string;
124
- private resizeListener;
125
- config: TourGuideConfig;
126
- /**
127
- * class constructor
128
- * @param tourGuideService
129
- * @param renderer
130
- */
131
- constructor(renderer: Renderer2);
132
- /**
133
- * handling input data changes
134
- * updating default config with user provided config
135
- * @param changes
136
- */
137
- ngOnChanges(changes: SimpleChanges): void;
138
- /**
139
- * handling change on component initilization
140
- */
141
- ngOnInit(): void;
142
- /**
143
- * this method handle the start of tour guide fetaure
144
- */
145
- startTour(): void;
146
- /**
147
- * this method handle the navigation to next tour guide feature
148
- */
149
- nextStep(): void;
150
- /**
151
- * this method allow us to navigate back to previous tour guide feature
152
- */
153
- previousStep(): void;
154
- /**
155
- * method to skip the tour guide thats in progress
156
- */
157
- skip(): void;
158
- /**
159
- * method to highlight feature area and changin details popup based on provide config
160
- * @returns
161
- */
162
- private highlightElement;
163
- /**
164
- * Finds an element by its selector, scrolls it into view, and waits for the scroll to complete.
165
- * @param selector The CSS selector for the target element.
166
- * @returns A promise that resolves to the HTMLElement or undefined if not found.
167
- */
168
- private findElementAndScroll;
169
- /**
170
- * Applies CSS classes and styles to visually highlight the target element.
171
- * @param element The element to highlight.
172
- */
173
- private applyHighlightStyles;
174
- /**
175
- * Calculates the optimal position for the tour popup and applies it.
176
- * @param element The highlighted element.
177
- * @param position The desired position ('auto', 'top', 'bottom', 'left', 'right').
178
- */
179
- private calculateAndApplyPopupPosition;
180
- /**
181
- * Determines the best placement for the popup when position is 'auto'.
182
- * @param position The configured position.
183
- * @param rect The BoundingClientRect of the target element.
184
- * @returns The calculated final position.
185
- */
186
- private determineAutoPosition;
187
- /**
188
- * Computes the top and left coordinates for the popup based on the target element and desired position.
189
- * @param position The final position for the popup.
190
- * @param offset The absolute offset of the target element.
191
- * @param element The target element.
192
- * @returns An object with top and left coordinates.
193
- */
194
- private computePopupCoordinates;
195
- /**
196
- * Clamps the popup's coordinates to ensure it stays within the visible viewport.
197
- * @param coords The calculated top and left coordinates.
198
- * @returns The adjusted coordinates.
199
- */
200
- private clampPopupCoordinates;
201
- /**
202
- * If the popup is rendered inside a scrollable container, this ensures it's scrolled into view.
203
- */
204
- private scrollPopupIntoView;
205
- /**
206
- * method to execute highlight process after scroll
207
- * @returns
208
- */
209
- private waitForScroll;
210
- /**
211
- * method to create transparent hole in overlay for visibility of highlighted area
212
- */
213
- private createTransparentHole;
214
- /**
215
- * method to get absolute offset
216
- * @param element
217
- * @returns
218
- */
219
- private getAbsoluteOffset;
220
- /**
221
- * method to lock scroll when tour guide is active
222
- */
223
- private lockScroll;
224
- /**
225
- * method to unlock scroll when tour guide is not active
226
- */
227
- private unlockScroll;
228
- /**
229
- * method to remove highlight when tour is skipped or done
230
- */
231
- private removeHighlight;
232
- /**
233
- * method to navigate between tour slides or skip tour using left, right and skip key
234
- * @param event
235
- * @returns
236
- */
237
- private handleKey;
238
- /**
239
- * debounce method for smooth operation
240
- * @param fn
241
- * @param delay
242
- * @returns
243
- */
244
- private debounce;
245
- /**
246
- * handling change on component destroy
247
- */
248
- ngOnDestroy(): void;
249
- static ɵfac: i0.ɵɵFactoryDeclaration<RuclibTourGuideComponent, never>;
250
- static ɵcmp: i0.ɵɵComponentDeclaration<RuclibTourGuideComponent, "uxp-ruclib-tour-guide", never, { "rucInputData": { "alias": "rucInputData"; "required": false; }; "customTheme": { "alias": "customTheme"; "required": false; }; "showStartButton": { "alias": "showStartButton"; "required": false; }; "dataSource": { "alias": "dataSource"; "required": false; }; }, { "rucEvent": "rucEvent"; }, never, never, true, never>;
251
- }
252
-
253
- export { RuclibTourGuideComponent };
1
+ export * from './lib/ruclib-tour-guide.module';
2
+ export * from './lib/ruclib-tour-guide/ruclib-tour-guide.component';
3
+ export * from './lib/model/tour-guide.model';
@@ -0,0 +1,16 @@
1
+ import { TourGuideConfig } from "./tour-guide.model";
2
+ export declare const defaultTourGuideConfig: TourGuideConfig;
3
+ export declare const DEFAULT_VALUES: {
4
+ arrowRight: string;
5
+ arrowLeft: string;
6
+ escape: string;
7
+ popup: {
8
+ width: number;
9
+ height: number;
10
+ top: number;
11
+ left: number;
12
+ padding: number;
13
+ safeMargin: number;
14
+ };
15
+ startTourButtonLabel: string;
16
+ };
@@ -0,0 +1,102 @@
1
+ export interface TourGuideConfig {
2
+ /**
3
+ * Defines the type of tour guide.
4
+ * - 'simple': Displays a single popup with navigation buttons.
5
+ * - 'advance': Highlights specific elements on the page and guides the user through them.
6
+ */
7
+ type: 'simple' | 'advance';
8
+ /**
9
+ * Whether to display a skip button in the tour guide.
10
+ */
11
+ showSkipButton?: boolean;
12
+ /**
13
+ * Font size for the buttons in the tour guide.
14
+ */
15
+ buttonsFontSize?: string;
16
+ /**
17
+ * Font size for the title of the tour guide.
18
+ */
19
+ titleFontSize?: string;
20
+ /**
21
+ * Font size for the content of the tour guide.
22
+ */
23
+ contentFontSize?: string;
24
+ /**
25
+ * Alignment of the buttons within the tour guide modal.
26
+ */
27
+ buttonsAlignment?: 'start' | 'center' | 'end' | 'space-between' | 'space-around' | 'space-evenly';
28
+ /**
29
+ * Alignment of the step count within the tour guide modal.
30
+ */
31
+ stepCountAlignment?: 'start' | 'center' | 'end';
32
+ /**
33
+ * Text for the start of the step count (e.g., "Step").
34
+ */
35
+ stepCountStartText?: string;
36
+ /**
37
+ * Text for the middle of the step count (e.g., "of").
38
+ */
39
+ stepCountMiddleText?: string;
40
+ /**
41
+ * Text for the skip button.
42
+ */
43
+ skipButtonText?: string;
44
+ /**
45
+ * Text for the previous button.
46
+ */
47
+ prevButtonText?: string;
48
+ /**
49
+ * Text for the next button.
50
+ */
51
+ nextButtonText?: string;
52
+ /**
53
+ * Text for the finish button.
54
+ */
55
+ finishButtonText?: string;
56
+ /**
57
+ * Border color for the highlighted element in 'advance' mode.
58
+ */
59
+ highlightBorderColor?: string;
60
+ /**
61
+ * Border radius for the highlighted element in 'advance' mode.
62
+ */
63
+ highlightBorderRadius?: string;
64
+ /**
65
+ * Width of the border for the highlighted element in 'advance' mode.
66
+ */
67
+ highlightBorderWidth?: string;
68
+ /**
69
+ * Default width for the tour guide popup.
70
+ */
71
+ defaultPopupWidth?: string;
72
+ }
73
+ export interface TourGuideData {
74
+ /**
75
+ * title for feature slide
76
+ */
77
+ title?: string;
78
+ /**
79
+ * description of selected feature in slide
80
+ */
81
+ content: string;
82
+ /**
83
+ * The element to which the tour guide will point.
84
+ * Only required for 'advance' type tour guide
85
+ */
86
+ selector?: string;
87
+ /**
88
+ * Position of the tour guide popup relative to the highlighted element.
89
+ */
90
+ position?: 'top' | 'bottom' | 'left' | 'right' | 'auto';
91
+ /**
92
+ * Defines the shape of the modal around the selected element.
93
+ * - 'rounded': A rectangle with rounded corner modal.
94
+ * - 'rectangle': A rectangular modal.
95
+ * - 'circle': A circular modal.
96
+ */
97
+ shape?: '' | 'rounded' | 'rectangle' | 'circle';
98
+ /**
99
+ * Defines the width of modal for current slide.
100
+ */
101
+ width?: string;
102
+ }
@@ -0,0 +1,148 @@
1
+ import { EventEmitter, Renderer2, OnInit, OnDestroy, ElementRef, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { TourGuideConfig, TourGuideData } from '../model/tour-guide.model';
3
+ import * as i0 from "@angular/core";
4
+ export declare class RuclibTourGuideComponent implements OnInit, OnDestroy, OnChanges {
5
+ private renderer;
6
+ rucEvent: EventEmitter<any>;
7
+ rucInputData: TourGuideConfig;
8
+ customTheme: string | undefined;
9
+ showStartButton: boolean;
10
+ dataSource: Array<TourGuideData>;
11
+ overlayRef: ElementRef;
12
+ currentStepIndex: number;
13
+ private currentElement?;
14
+ popupStyle: {
15
+ top: string;
16
+ left: string;
17
+ };
18
+ private originalParent?;
19
+ showTour: boolean;
20
+ startTourButtonLabel: string;
21
+ private resizeListener;
22
+ config: TourGuideConfig;
23
+ /**
24
+ * class constructor
25
+ * @param tourGuideService
26
+ * @param renderer
27
+ */
28
+ constructor(renderer: Renderer2);
29
+ /**
30
+ * handling input data changes
31
+ * updating default config with user provided config
32
+ * @param changes
33
+ */
34
+ ngOnChanges(changes: SimpleChanges): void;
35
+ /**
36
+ * handling change on component initilization
37
+ */
38
+ ngOnInit(): void;
39
+ /**
40
+ * this method handle the start of tour guide fetaure
41
+ */
42
+ startTour(): void;
43
+ /**
44
+ * this method handle the navigation to next tour guide feature
45
+ */
46
+ nextStep(): void;
47
+ /**
48
+ * this method allow us to navigate back to previous tour guide feature
49
+ */
50
+ previousStep(): void;
51
+ /**
52
+ * method to skip the tour guide thats in progress
53
+ */
54
+ skip(): void;
55
+ /**
56
+ * method to highlight feature area and changin details popup based on provide config
57
+ * @returns
58
+ */
59
+ private highlightElement;
60
+ /**
61
+ * Finds an element by its selector, scrolls it into view, and waits for the scroll to complete.
62
+ * @param selector The CSS selector for the target element.
63
+ * @returns A promise that resolves to the HTMLElement or undefined if not found.
64
+ */
65
+ private findElementAndScroll;
66
+ /**
67
+ * Applies CSS classes and styles to visually highlight the target element.
68
+ * @param element The element to highlight.
69
+ */
70
+ private applyHighlightStyles;
71
+ /**
72
+ * Calculates the optimal position for the tour popup and applies it.
73
+ * @param element The highlighted element.
74
+ * @param position The desired position ('auto', 'top', 'bottom', 'left', 'right').
75
+ */
76
+ private calculateAndApplyPopupPosition;
77
+ /**
78
+ * Determines the best placement for the popup when position is 'auto'.
79
+ * @param position The configured position.
80
+ * @param rect The BoundingClientRect of the target element.
81
+ * @returns The calculated final position.
82
+ */
83
+ private determineAutoPosition;
84
+ /**
85
+ * Computes the top and left coordinates for the popup based on the target element and desired position.
86
+ * @param position The final position for the popup.
87
+ * @param offset The absolute offset of the target element.
88
+ * @param element The target element.
89
+ * @returns An object with top and left coordinates.
90
+ */
91
+ private computePopupCoordinates;
92
+ /**
93
+ * Clamps the popup's coordinates to ensure it stays within the visible viewport.
94
+ * @param coords The calculated top and left coordinates.
95
+ * @returns The adjusted coordinates.
96
+ */
97
+ private clampPopupCoordinates;
98
+ /**
99
+ * If the popup is rendered inside a scrollable container, this ensures it's scrolled into view.
100
+ */
101
+ private scrollPopupIntoView;
102
+ /**
103
+ * method to execute highlight process after scroll
104
+ * @returns
105
+ */
106
+ private waitForScroll;
107
+ /**
108
+ * method to create transparent hole in overlay for visibility of highlighted area
109
+ */
110
+ private createTransparentHole;
111
+ /**
112
+ * method to get absolute offset
113
+ * @param element
114
+ * @returns
115
+ */
116
+ private getAbsoluteOffset;
117
+ /**
118
+ * method to lock scroll when tour guide is active
119
+ */
120
+ private lockScroll;
121
+ /**
122
+ * method to unlock scroll when tour guide is not active
123
+ */
124
+ private unlockScroll;
125
+ /**
126
+ * method to remove highlight when tour is skipped or done
127
+ */
128
+ private removeHighlight;
129
+ /**
130
+ * method to navigate between tour slides or skip tour using left, right and skip key
131
+ * @param event
132
+ * @returns
133
+ */
134
+ private handleKey;
135
+ /**
136
+ * debounce method for smooth operation
137
+ * @param fn
138
+ * @param delay
139
+ * @returns
140
+ */
141
+ private debounce;
142
+ /**
143
+ * handling change on component destroy
144
+ */
145
+ ngOnDestroy(): void;
146
+ static ɵfac: i0.ɵɵFactoryDeclaration<RuclibTourGuideComponent, never>;
147
+ static ɵcmp: i0.ɵɵComponentDeclaration<RuclibTourGuideComponent, "uxp-ruclib-tour-guide", never, { "rucInputData": "rucInputData"; "customTheme": "customTheme"; "showStartButton": "showStartButton"; "dataSource": "dataSource"; }, { "rucEvent": "rucEvent"; }, never, never, false, never>;
148
+ }
@@ -0,0 +1,10 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./ruclib-tour-guide/ruclib-tour-guide.component";
3
+ import * as i2 from "@angular/common";
4
+ import * as i3 from "@angular/material/button";
5
+ import * as i4 from "@angular/material/card";
6
+ export declare class RuclibTourGuideModule {
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<RuclibTourGuideModule, never>;
8
+ static ɵmod: i0.ɵɵNgModuleDeclaration<RuclibTourGuideModule, [typeof i1.RuclibTourGuideComponent], [typeof i2.CommonModule, typeof i3.MatButtonModule, typeof i4.MatCardModule], [typeof i1.RuclibTourGuideComponent]>;
9
+ static ɵinj: i0.ɵɵInjectorDeclaration<RuclibTourGuideModule>;
10
+ }
package/package.json CHANGED
@@ -1,18 +1,26 @@
1
1
  {
2
2
  "name": "@ruc-lib/tour-guide",
3
- "version": "3.1.0",
3
+ "version": "3.2.0",
4
+ "license": "MIT",
4
5
  "peerDependencies": {
5
- "@angular/common": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
6
- "@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
7
- "@angular/material": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
8
- "rxjs": ">=7.5.0 <8.0.0",
9
- "zone.js": "^0.13.0 || ^0.14.0"
6
+ "@angular/core": ">=15.0.0 <18.0.0",
7
+ "@angular/common": ">=15.0.0 <18.0.0",
8
+ "@angular/material": "^15.2.0",
9
+ "rxjs": ">=6.5.0 <8.0.0",
10
+ "zone.js": ">=0.11.4 <0.14.0"
10
11
  },
11
12
  "dependencies": {
12
13
  "tslib": "^2.3.0"
13
14
  },
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
14
18
  "sideEffects": false,
15
- "module": "fesm2022/ruc-lib-tour-guide.mjs",
19
+ "module": "fesm2015/ruc-lib-tour-guide.mjs",
20
+ "es2020": "fesm2020/ruc-lib-tour-guide.mjs",
21
+ "esm2020": "esm2020/ruc-lib-tour-guide.mjs",
22
+ "fesm2020": "fesm2020/ruc-lib-tour-guide.mjs",
23
+ "fesm2015": "fesm2015/ruc-lib-tour-guide.mjs",
16
24
  "typings": "index.d.ts",
17
25
  "exports": {
18
26
  "./package.json": {
@@ -20,7 +28,11 @@
20
28
  },
21
29
  ".": {
22
30
  "types": "./index.d.ts",
23
- "default": "./fesm2022/ruc-lib-tour-guide.mjs"
31
+ "esm2020": "./esm2020/ruc-lib-tour-guide.mjs",
32
+ "es2020": "./fesm2020/ruc-lib-tour-guide.mjs",
33
+ "es2015": "./fesm2015/ruc-lib-tour-guide.mjs",
34
+ "node": "./fesm2015/ruc-lib-tour-guide.mjs",
35
+ "default": "./fesm2020/ruc-lib-tour-guide.mjs"
24
36
  }
25
37
  }
26
38
  }