@ngstarter-ui/components 21.0.24 → 21.0.25
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.
- package/ai/component-registry.json +13 -4
- package/fesm2022/ngstarter-ui-components-avatar.mjs +3 -3
- package/fesm2022/ngstarter-ui-components-avatar.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-badge.mjs +1 -2
- package/fesm2022/ngstarter-ui-components-badge.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-breadcrumbs.mjs +0 -2
- package/fesm2022/ngstarter-ui-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-button-toggle.mjs +1 -1
- package/fesm2022/ngstarter-ui-components-button-toggle.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-button.mjs +2 -2
- package/fesm2022/ngstarter-ui-components-button.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-calendar.mjs +1 -1
- package/fesm2022/ngstarter-ui-components-calendar.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-card-overlay.mjs +0 -1
- package/fesm2022/ngstarter-ui-components-card-overlay.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-card.mjs +7 -12
- package/fesm2022/ngstarter-ui-components-card.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-carousel.mjs +0 -3
- package/fesm2022/ngstarter-ui-components-carousel.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-chips.mjs +13 -16
- package/fesm2022/ngstarter-ui-components-chips.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-code-highlighter.mjs +4 -1
- package/fesm2022/ngstarter-ui-components-code-highlighter.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-command-bar.mjs +2 -2
- package/fesm2022/ngstarter-ui-components-command-bar.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-comment-editor.mjs +4 -16
- package/fesm2022/ngstarter-ui-components-comment-editor.mjs.map +1 -1
- package/fesm2022/{ngstarter-ui-components-content-editor-code-block.component-Czb0bvcr.mjs → ngstarter-ui-components-content-editor-code-block.component-CKrOhA7h.mjs} +2 -2
- package/fesm2022/{ngstarter-ui-components-content-editor-code-block.component-Czb0bvcr.mjs.map → ngstarter-ui-components-content-editor-code-block.component-CKrOhA7h.mjs.map} +1 -1
- package/fesm2022/{ngstarter-ui-components-content-editor-embed-block-c8Pq0Jdq.mjs → ngstarter-ui-components-content-editor-embed-block-zSApBzF3.mjs} +2 -2
- package/fesm2022/{ngstarter-ui-components-content-editor-embed-block-c8Pq0Jdq.mjs.map → ngstarter-ui-components-content-editor-embed-block-zSApBzF3.mjs.map} +1 -1
- package/fesm2022/{ngstarter-ui-components-content-editor-heading-block.component-CT5g3MLZ.mjs → ngstarter-ui-components-content-editor-heading-block.component-Dv8d0nCy.mjs} +2 -2
- package/fesm2022/{ngstarter-ui-components-content-editor-heading-block.component-CT5g3MLZ.mjs.map → ngstarter-ui-components-content-editor-heading-block.component-Dv8d0nCy.mjs.map} +1 -1
- package/fesm2022/{ngstarter-ui-components-content-editor-image-block.component-Cp_Yo7zI.mjs → ngstarter-ui-components-content-editor-image-block.component-g-H7a5Z_.mjs} +2 -2
- package/fesm2022/{ngstarter-ui-components-content-editor-image-block.component-Cp_Yo7zI.mjs.map → ngstarter-ui-components-content-editor-image-block.component-g-H7a5Z_.mjs.map} +1 -1
- package/fesm2022/{ngstarter-ui-components-content-editor-list-block.component-BvineUWy.mjs → ngstarter-ui-components-content-editor-list-block.component-PgqisgxY.mjs} +2 -2
- package/fesm2022/{ngstarter-ui-components-content-editor-list-block.component-BvineUWy.mjs.map → ngstarter-ui-components-content-editor-list-block.component-PgqisgxY.mjs.map} +1 -1
- package/fesm2022/{ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-4_TqxgpH.mjs → ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-BuMm25ea.mjs} +12 -13
- package/fesm2022/ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-BuMm25ea.mjs.map +1 -0
- package/fesm2022/{ngstarter-ui-components-content-editor-paragraph-block.component-sH44U1I8.mjs → ngstarter-ui-components-content-editor-paragraph-block.component-DS_6CzuA.mjs} +2 -2
- package/fesm2022/{ngstarter-ui-components-content-editor-paragraph-block.component-sH44U1I8.mjs.map → ngstarter-ui-components-content-editor-paragraph-block.component-DS_6CzuA.mjs.map} +1 -1
- package/fesm2022/{ngstarter-ui-components-content-editor-quote-block.component-CA3KoZ-u.mjs → ngstarter-ui-components-content-editor-quote-block.component-Df92Nqvp.mjs} +2 -2
- package/fesm2022/{ngstarter-ui-components-content-editor-quote-block.component-CA3KoZ-u.mjs.map → ngstarter-ui-components-content-editor-quote-block.component-Df92Nqvp.mjs.map} +1 -1
- package/fesm2022/{ngstarter-ui-components-content-editor-table-block.component-GTZiYUjU.mjs → ngstarter-ui-components-content-editor-table-block.component-D4rdPkGz.mjs} +2 -2
- package/fesm2022/{ngstarter-ui-components-content-editor-table-block.component-GTZiYUjU.mjs.map → ngstarter-ui-components-content-editor-table-block.component-D4rdPkGz.mjs.map} +1 -1
- package/fesm2022/{ngstarter-ui-components-content-editor-video-block.component-CzMZ1s6C.mjs → ngstarter-ui-components-content-editor-video-block.component-DqS9Lhp_.mjs} +2 -2
- package/fesm2022/{ngstarter-ui-components-content-editor-video-block.component-CzMZ1s6C.mjs.map → ngstarter-ui-components-content-editor-video-block.component-DqS9Lhp_.mjs.map} +1 -1
- package/fesm2022/ngstarter-ui-components-content-editor.mjs +1 -1
- package/fesm2022/ngstarter-ui-components-core.mjs +0 -9
- package/fesm2022/ngstarter-ui-components-core.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-country-select.mjs +11 -11
- package/fesm2022/ngstarter-ui-components-country-select.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-data-view.mjs +0 -3
- package/fesm2022/ngstarter-ui-components-data-view.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-datepicker.mjs +21 -17
- package/fesm2022/ngstarter-ui-components-datepicker.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-dialog.mjs +0 -1
- package/fesm2022/ngstarter-ui-components-dialog.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-empty-state.mjs +6 -6
- package/fesm2022/ngstarter-ui-components-empty-state.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-expansion.mjs +6 -6
- package/fesm2022/ngstarter-ui-components-expansion.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-filter-builder.mjs +0 -3
- package/fesm2022/ngstarter-ui-components-filter-builder.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-form-field.mjs +4 -4
- package/fesm2022/ngstarter-ui-components-form-field.mjs.map +1 -1
- package/fesm2022/{ngstarter-ui-components-form-renderer-autocomplete-many-field-BLhfO1zC.mjs → ngstarter-ui-components-form-renderer-autocomplete-many-field-CGQ3pJaG.mjs} +2 -2
- package/fesm2022/{ngstarter-ui-components-form-renderer-autocomplete-many-field-BLhfO1zC.mjs.map → ngstarter-ui-components-form-renderer-autocomplete-many-field-CGQ3pJaG.mjs.map} +1 -1
- package/fesm2022/{ngstarter-ui-components-form-renderer-datepicker-field-DRSVe0gK.mjs → ngstarter-ui-components-form-renderer-datepicker-field-Cf3jfPv7.mjs} +2 -2
- package/fesm2022/{ngstarter-ui-components-form-renderer-datepicker-field-DRSVe0gK.mjs.map → ngstarter-ui-components-form-renderer-datepicker-field-Cf3jfPv7.mjs.map} +1 -1
- package/fesm2022/{ngstarter-ui-components-form-renderer-input-field-DpGLKZjz.mjs → ngstarter-ui-components-form-renderer-input-field-tZHU8-_L.mjs} +2 -2
- package/fesm2022/{ngstarter-ui-components-form-renderer-input-field-DpGLKZjz.mjs.map → ngstarter-ui-components-form-renderer-input-field-tZHU8-_L.mjs.map} +1 -1
- package/fesm2022/{ngstarter-ui-components-form-renderer-radio-group-field-DUCSU3iT.mjs → ngstarter-ui-components-form-renderer-radio-group-field-lc1V-NeL.mjs} +2 -2
- package/fesm2022/{ngstarter-ui-components-form-renderer-radio-group-field-DUCSU3iT.mjs.map → ngstarter-ui-components-form-renderer-radio-group-field-lc1V-NeL.mjs.map} +1 -1
- package/fesm2022/{ngstarter-ui-components-form-renderer-select-field-CCbpYyZo.mjs → ngstarter-ui-components-form-renderer-select-field-DyBidcIU.mjs} +2 -2
- package/fesm2022/{ngstarter-ui-components-form-renderer-select-field-CCbpYyZo.mjs.map → ngstarter-ui-components-form-renderer-select-field-DyBidcIU.mjs.map} +1 -1
- package/fesm2022/{ngstarter-ui-components-form-renderer-textarea-field-D89GlMDO.mjs → ngstarter-ui-components-form-renderer-textarea-field-DxbPsw3z.mjs} +2 -2
- package/fesm2022/{ngstarter-ui-components-form-renderer-textarea-field-D89GlMDO.mjs.map → ngstarter-ui-components-form-renderer-textarea-field-DxbPsw3z.mjs.map} +1 -1
- package/fesm2022/{ngstarter-ui-components-form-renderer-timezone-field-C9wz7zPg.mjs → ngstarter-ui-components-form-renderer-timezone-field-DAWrM-jS.mjs} +2 -2
- package/fesm2022/{ngstarter-ui-components-form-renderer-timezone-field-C9wz7zPg.mjs.map → ngstarter-ui-components-form-renderer-timezone-field-DAWrM-jS.mjs.map} +1 -1
- package/fesm2022/ngstarter-ui-components-form-renderer.mjs +9 -9
- package/fesm2022/ngstarter-ui-components-form-renderer.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-guided-tour.mjs +4 -5
- package/fesm2022/ngstarter-ui-components-guided-tour.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-headless-stepper.mjs +2 -2
- package/fesm2022/ngstarter-ui-components-headless-stepper.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-icon.mjs +1 -1
- package/fesm2022/ngstarter-ui-components-icon.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-image-designer.mjs +1 -1
- package/fesm2022/ngstarter-ui-components-image-designer.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-marquee.mjs +78 -8
- package/fesm2022/ngstarter-ui-components-marquee.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-notifications.mjs +4 -5
- package/fesm2022/ngstarter-ui-components-notifications.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ngstarter-ui-components-card.d.ts +1 -1
- package/types/ngstarter-ui-components-chips.d.ts +2 -2
- package/types/ngstarter-ui-components-datepicker.d.ts +6 -6
- package/types/ngstarter-ui-components-expansion.d.ts +2 -2
- package/types/ngstarter-ui-components-form-field.d.ts +2 -2
- package/types/ngstarter-ui-components-guided-tour.d.ts +1 -1
- package/types/ngstarter-ui-components-marquee.d.ts +19 -11
- package/fesm2022/ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-4_TqxgpH.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngstarter-ui-components-guided-tour.mjs","sources":["../../../projects/components/guided-tour/src/tour.types.ts","../../../projects/components/guided-tour/src/tour-backdrop/tour-backdrop.ts","../../../projects/components/guided-tour/src/tour-backdrop/tour-backdrop.html","../../../projects/components/guided-tour/src/tour-step/tour-step.ts","../../../projects/components/guided-tour/src/tour-step/tour-step.html","../../../projects/components/guided-tour/src/tour.service.ts","../../../projects/components/guided-tour/src/tour-anchor/tour-anchor.directive.ts","../../../projects/components/guided-tour/ngstarter-ui-components-guided-tour.ts"],"sourcesContent":["import { InjectionToken, Provider, TemplateRef } from '@angular/core';\n\nexport interface TourConfig {\n /**\n * Default padding for the highlighted element.\n * @default 4\n */\n padding?: number;\n /**\n * Whether to close the tour when clicking on the backdrop.\n * @default false\n */\n closeOnBackdropClick?: boolean;\n /**\n * Whether to enable keyboard navigation (arrows and Esc).\n * @default true\n */\n keyboardNavigation?: boolean;\n /**\n * Default text for the \"Next\" button.\n */\n nextBtnText?: string;\n /**\n * Default text for the \"Prev\" button.\n */\n prevBtnText?: string;\n /**\n * Default text for the \"Finish\" button.\n */\n finishBtnText?: string;\n /**\n * Default text for the \"Skip\" button.\n */\n skipBtnText?: string;\n}\n\nexport const TOUR_CONFIG = new InjectionToken<TourConfig>('TOUR_CONFIG');\n\nexport function provideTourConfig(config: TourConfig): Provider {\n return {\n provide: TOUR_CONFIG,\n useValue: config\n };\n}\n\nexport type TourStepPosition = 'below-start' | 'below-center' | 'below-end' |\n 'above-start' | 'above-center' | 'above-end' |\n 'before-start' | 'before-center' | 'before-end' |\n 'after-start' | 'after-center' | 'after-end';\n\nexport interface TourStepConfig {\n /**\n * Unique identifier for the tour step anchor or a function that returns an element or selector.\n */\n anchorId: string | (() => HTMLElement | string);\n /**\n * Title of the tour step.\n */\n title?: string;\n /**\n * Content of the tour step.\n */\n content?: string;\n /**\n * HTML content of the tour step.\n */\n htmlContent?: string;\n /**\n * Template for the tour step.\n */\n template?: TemplateRef<any>;\n /**\n * Context for the template.\n */\n templateContext?: any;\n /**\n * Custom data for the tour step.\n */\n data?: any;\n /**\n * Whether to show a backdrop and highlight the anchor element.\n */\n withBackdrop?: boolean;\n /**\n * Whether to disable interaction with the highlighted element.\n */\n disableInteraction?: boolean;\n /**\n * Padding for the highlighted element.\n * If not provided, the default from TourConfig will be used.\n */\n padding?: number;\n /**\n * Route to navigate to before showing the step.\n */\n route?: string;\n /**\n * CSS selector to wait for before showing the step.\n */\n waitFor?: string;\n /**\n * Callback before showing the step.\n */\n onShow?: () => void | Promise<void>;\n /**\n * Callback before hiding the step.\n */\n onHide?: () => void | Promise<void>;\n /**\n * Callback when \"Next\" is clicked.\n */\n onNext?: () => void | Promise<void>;\n /**\n * Callback when \"Prev\" is clicked.\n */\n onPrev?: () => void | Promise<void>;\n /**\n * Whether to hide the arrow pointing to the anchor.\n */\n hideArrow?: boolean;\n /**\n * Whether to close the tour when clicking on the backdrop.\n * If not provided, the default from TourConfig will be used.\n */\n closeOnBackdropClick?: boolean;\n /**\n * Text for the \"Next\" button.\n */\n nextBtnText?: string;\n /**\n * Text for the \"Prev\" button.\n */\n prevBtnText?: string;\n /**\n * Text for the \"Finish\" button.\n */\n finishBtnText?: string;\n /**\n * Text for the \"Skip\" button.\n */\n skipBtnText?: string;\n /**\n * Explicit position for the tour step.\n * If not provided, the best position will be chosen automatically.\n */\n position?: TourStepPosition;\n}\n\nexport enum TourState {\n OFF,\n ON,\n PAUSED\n}\n\nexport const TOUR_STEP_COMPONENT = new InjectionToken<any>('TOUR_STEP_COMPONENT');\n","import { Component, ElementRef, inject, signal, HostListener, computed, output, input } from '@angular/core';\n\n@Component({\n selector: 'ngs-tour-backdrop',\n standalone: true,\n templateUrl: './tour-backdrop.html',\n styleUrl: './tour-backdrop.scss',\n host: {\n '[class.is-initial]': 'isInitial()',\n '[class.animate-enter]': 'animateEnterClass()',\n '[class.animate-leave]': 'animateLeaveClass()',\n '[style.pointer-events]': '\"none\"',\n },\n})\nexport class TourBackdrop {\n private readonly elementRef = inject(ElementRef);\n\n backdropClick = output<void>();\n\n animateEnterClass = input(true);\n\n animateLeaveClass = input(false);\n\n rect = signal<{ top: number; left: number; width: number; height: number }>({ top: 0, left: 0, width: 0, height: 0 });\n rx = signal<number>(0);\n padding = signal<number>(0);\n disableInteraction = signal<boolean>(false);\n viewBox = signal<string>(`0 0 ${window.innerWidth || 1000} ${window.innerHeight || 1000}`);\n isInitial = signal<boolean>(true);\n\n backdropPath = computed(() => {\n const { top, left, width, height } = this.rect();\n const p = this.padding();\n const radius = this.rx();\n const w = window.innerWidth;\n const h = window.innerHeight;\n\n const rectTop = top - p;\n const rectLeft = left - p;\n const rectWidth = width + 2 * p;\n const rectHeight = height + 2 * p;\n\n // Outer rectangle (entire screen)\n const screenPath = `M0,0 H${w} V${h} H0 Z`;\n\n // Hole (inner contour)\n const holePath = `\n M${rectLeft + radius},${rectTop}\n L${rectLeft + rectWidth - radius},${rectTop}\n A${radius},${radius} 0 0 1 ${rectLeft + rectWidth},${rectTop + radius}\n L${rectLeft + rectWidth},${rectTop + rectHeight - radius}\n A${radius},${radius} 0 0 1 ${rectLeft + rectWidth - radius},${rectTop + rectHeight}\n L${rectLeft + radius},${rectTop + rectHeight}\n A${radius},${radius} 0 0 1 ${rectLeft},${rectTop + rectHeight - radius}\n L${rectLeft},${rectTop + radius}\n A${radius},${radius} 0 0 1 ${rectLeft + radius},${rectTop}\n Z\n `.replace(/\\s+/g, ' ');\n\n return `${screenPath} ${holePath}`;\n });\n\n constructor() {\n this.updateViewBox();\n }\n\n @HostListener('window:resize')\n @HostListener('window:scroll')\n onResize(): void {\n this.updatePositionFromAnchor();\n this.updateViewBox();\n }\n\n private anchorElement: HTMLElement | null = null;\n\n updatePosition(rect: DOMRect, borderRadius: string, anchorElement?: HTMLElement, padding = 0, disableInteraction = false): void {\n if (anchorElement) {\n this.anchorElement = anchorElement;\n }\n const isInitial = this.isInitial();\n this.rect.set({\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height\n });\n\n const radius = parseInt(borderRadius, 10) || 0;\n this.rx.set(radius);\n this.padding.set(padding);\n this.disableInteraction.set(disableInteraction);\n\n this.updateViewBox();\n\n if (isInitial) {\n setTimeout(() => {\n this.isInitial.set(false);\n });\n }\n }\n\n private updatePositionFromAnchor(): void {\n if (this.anchorElement) {\n const rect = this.anchorElement.getBoundingClientRect();\n this.rect.set({\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height\n });\n }\n }\n\n private updateViewBox(): void {\n const w = window.innerWidth || 1000;\n const h = window.innerHeight || 1000;\n this.viewBox.set(`0 0 ${w} ${h}`);\n }\n}\n","<svg\n class=\"absolute top-0 left-0 w-full h-full pointer-events-none\"\n [attr.viewBox]=\"viewBox()\"\n preserveAspectRatio=\"xMinYMin slice\"\n>\n <path\n fill-rule=\"evenodd\"\n [attr.d]=\"backdropPath()\"\n (click)=\"backdropClick.emit()\"\n />\n <rect\n [attr.x]=\"rect().left - padding()\"\n [attr.y]=\"rect().top - padding()\"\n [attr.width]=\"rect().width + 2 * padding()\"\n [attr.height]=\"rect().height + 2 * padding()\"\n [attr.rx]=\"rx()\"\n [class.interactive]=\"!disableInteraction()\"\n ></rect>\n</svg>\n","import {\n Component,\n input,\n ChangeDetectionStrategy,\n signal, inject, computed\n} from '@angular/core';\nimport { CommonModule, NgClass, NgTemplateOutlet } from '@angular/common';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { TourService } from '../tour.service';\nimport { ConnectedPosition } from '@angular/cdk/overlay';\nimport { TourStepConfig, TOUR_CONFIG } from '../tour.types';\nimport { Button } from '@ngstarter-ui/components/button';\n\n@Component({\n selector: 'ngs-tour-step',\n standalone: true,\n imports: [\n NgTemplateOutlet,\n NgClass,\n CommonModule,\n Button\n ],\n templateUrl: './tour-step.html',\n styleUrl: './tour-step.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-tour-step not-prose',\n '[class.animate-enter]': 'animateEnterClass()',\n '[class.animate-leave]': 'animateLeaveClass()',\n }\n})\nexport class TourStep {\n readonly tourService = inject(TourService);\n private _sanitizer = inject(DomSanitizer);\n\n step = input.required<TourStepConfig>();\n isFirst = input(false);\n isLast = input(false);\n position = input<ConnectedPosition | null>(null);\n\n animateEnterClass = input(true);\n animateLeaveClass = input(false);\n\n readonly config = inject(TOUR_CONFIG, { optional: true });\n\n protected readonly htmlContent = computed(() => {\n const html = this.step().htmlContent;\n return html ? this._sanitizer.bypassSecurityTrustHtml(html) : null;\n });\n\n getArrowClasses(pos: ConnectedPosition | null): string {\n if (!pos) {\n return 'hidden';\n }\n\n const classes = [];\n\n // Vertical position of the arrow on the step\n if (pos.overlayY === 'top' && pos.originY === 'bottom') {\n classes.push('pos-top'); // Arrow on the top edge of the step\n } else if (pos.overlayY === 'bottom' && pos.originY === 'top') {\n classes.push('pos-bottom'); // Arrow on the bottom edge of the step\n } else if (pos.overlayX === 'start' && pos.originX === 'end') {\n // Step is to the right of the element (AFTER)\n classes.push('pos-left');\n } else if (pos.overlayX === 'end' && pos.originX === 'start') {\n // Step is to the left of the element (BEFORE)\n classes.push('pos-right');\n }\n\n // Alignment of the arrow on the chosen edge\n if (classes.includes('pos-top') || classes.includes('pos-bottom')) {\n if (pos.overlayX === 'center') {\n classes.push('align-center');\n } else if (pos.overlayX === 'start') {\n classes.push('align-start');\n } else if (pos.overlayX === 'end') {\n classes.push('align-end');\n }\n } else if (classes.includes('pos-left') || classes.includes('pos-right')) {\n if (pos.overlayY === 'center') {\n classes.push('align-center');\n } else if (pos.overlayY === 'top') {\n classes.push('align-start');\n } else if (pos.overlayY === 'bottom') {\n classes.push('align-end');\n }\n }\n\n return classes.join(' ');\n }\n}\n","@if (!step().hideArrow) {\n <div class=\"tour-step-arrow\" [ngClass]=\"getArrowClasses(position())\"></div>\n}\n<div class=\"relative z-[1] transform-gpu\">\n @if (step().title) {\n <h3 class=\"mt-0 mb-2 font-semibold text-base leading-none tracking-tight\">{{ step().title }}</h3>\n }\n\n <div class=\"text-sm text-on-surface-variant\">\n @if (step().template) {\n <ng-container *ngTemplateOutlet=\"step().template!; context: step().templateContext\"/>\n } @else if (htmlContent()) {\n <div [innerHTML]=\"htmlContent()\"></div>\n } @else {\n {{ step().content }}\n }\n </div>\n\n <div class=\"flex justify-between gap-4 mt-4\">\n <button ngsButton (click)=\"tourService.end()\" class=\"button\">\n {{ step().skipBtnText || config?.skipBtnText || 'Close' }}\n </button>\n <div class=\"flex gap-2\">\n <button ngsButton=\"tonal\" (click)=\"tourService.prev()\" [disabled]=\"isFirst()\" class=\"button\">\n {{ step().prevBtnText || config?.prevBtnText || 'Prev' }}\n </button>\n <button ngsButton=\"filled\" (click)=\"tourService.next()\" class=\"button\">\n @if (isLast()) {\n {{ step().finishBtnText || config?.finishBtnText || 'Finish' }}\n } @else {\n {{ step().nextBtnText || config?.nextBtnText || 'Next' }}\n }\n </button>\n </div>\n </div>\n</div>\n","import { Injectable, signal, computed, inject, ViewContainerRef, ComponentRef, Type, OnDestroy } from '@angular/core';\nimport { TourStepConfig, TourState, TOUR_STEP_COMPONENT, TOUR_CONFIG, TourStepPosition } from './tour.types';\nimport { Subject } from 'rxjs';\nimport { Overlay, OverlayRef, ConnectedPosition, PositionStrategy, FlexibleConnectedPositionStrategy, ConnectedOverlayPositionChange } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { PositionManager, OverlayPosition } from '@ngstarter-ui/components/overlay';\nimport { TourBackdrop } from './tour-backdrop/tour-backdrop';\nimport { TourStep } from './tour-step/tour-step';\nimport { DOCUMENT } from '@angular/common';\nimport { Router } from '@angular/router';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TourService implements OnDestroy {\n private readonly overlay = inject(Overlay);\n private readonly config = inject(TOUR_CONFIG, { optional: true });\n private readonly document = inject(DOCUMENT);\n private readonly router = inject(Router);\n private backdropOverlayRef: OverlayRef | null = null;\n private backdropComponentRef: ComponentRef<TourBackdrop> | null = null;\n\n private readonly _steps = signal<TourStepConfig[]>([]);\n private readonly _currentStepIndex = signal<number>(-1);\n private readonly _state = signal<TourState>(TourState.OFF);\n private readonly _anchors = new Map<string, any>();\n private stepOverlayRef: OverlayRef | null = null;\n private stepComponentRef: ComponentRef<any> | null = null;\n private readonly customStepComponent = inject(TOUR_STEP_COMPONENT, { optional: true });\n\n constructor() {\n this.document.addEventListener('keydown', this.handleKeyDown);\n }\n\n ngOnDestroy(): void {\n this.document.removeEventListener('keydown', this.handleKeyDown);\n }\n\n private readonly handleKeyDown = (event: KeyboardEvent): void => {\n if (this.state() !== TourState.ON || this.config?.keyboardNavigation === false) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowRight':\n void this.next();\n break;\n case 'ArrowLeft':\n void this.prev();\n break;\n case 'Escape':\n void this.end();\n break;\n }\n };\n\n readonly steps = this._steps.asReadonly();\n readonly currentStepIndex = this._currentStepIndex.asReadonly();\n readonly state = this._state.asReadonly();\n\n readonly currentStep = computed(() => {\n const index = this._currentStepIndex();\n const steps = this._steps();\n return index >= 0 && index < steps.length ? steps[index] : null;\n });\n\n readonly stepShow$ = new Subject<TourStepConfig>();\n readonly stepHide$ = new Subject<TourStepConfig>();\n readonly start$ = new Subject<void>();\n readonly end$ = new Subject<void>();\n\n registerAnchor(id: string, anchor: any): void {\n this._anchors.set(id, anchor);\n }\n\n unregisterAnchor(id: string): void {\n this._anchors.delete(id);\n }\n\n start(steps: TourStepConfig[]): void {\n this._steps.set(steps);\n this._state.set(TourState.ON);\n this.start$.next();\n void this.goToStep(0);\n }\n\n async end(): Promise<void> {\n const currentStep = this.currentStep();\n if (currentStep) {\n if (currentStep.onHide) {\n await currentStep.onHide();\n }\n this.stepHide$.next(currentStep);\n // Start hiding step and backdrop in parallel\n const hideStepPromise = this._hideStep(currentStep);\n const hideBackdropPromise = this.hideBackdrop(true);\n\n await Promise.all([hideStepPromise, hideBackdropPromise]);\n } else {\n await this.hideBackdrop(true);\n }\n\n this._state.set(TourState.OFF);\n this._currentStepIndex.set(-1);\n this._steps.set([]);\n this.end$.next();\n }\n\n async next(): Promise<void> {\n const currentStep = this.currentStep();\n if (currentStep?.onNext) {\n await currentStep.onNext();\n }\n\n if (this._currentStepIndex() < this._steps().length - 1) {\n await this.goToStep(this._currentStepIndex() + 1);\n } else {\n await this.end();\n }\n }\n\n async prev(): Promise<void> {\n const currentStep = this.currentStep();\n if (currentStep?.onPrev) {\n await currentStep.onPrev();\n }\n\n if (this._currentStepIndex() > 0) {\n await this.goToStep(this._currentStepIndex() - 1);\n }\n }\n\n async goToStep(index: number): Promise<void> {\n const currentStep = this.currentStep();\n const nextStep = this._steps()[index];\n\n if (currentStep) {\n if (currentStep.onHide) {\n await currentStep.onHide();\n }\n this.stepHide$.next(currentStep);\n await this._hideStep(currentStep);\n }\n\n if (currentStep?.withBackdrop && !nextStep?.withBackdrop) {\n this.hideBackdrop(false);\n }\n\n if (nextStep?.route) {\n const currentUrl = this.router.url;\n const targetUrl = nextStep.route;\n\n // Compare only path without params and fragment if needed,\n // but usually Router.url returns full path.\n // If URL differs, perform transition.\n if (currentUrl !== targetUrl) {\n await this.router.navigateByUrl(targetUrl);\n }\n }\n\n if (nextStep?.onShow) {\n await nextStep.onShow();\n }\n\n if (nextStep?.waitFor) {\n try {\n await this.waitForElement(nextStep.waitFor);\n } catch (e) {\n console.warn(`TourService: Element \"${nextStep.waitFor}\" not found after timeout.`);\n }\n }\n\n this._currentStepIndex.set(index);\n if (nextStep) {\n this.stepShow$.next(nextStep);\n this._showStep(nextStep);\n }\n }\n\n private waitForElement(selector: string, timeout = 3000): Promise<Element> {\n return new Promise((resolve, reject) => {\n const element = document.querySelector(selector);\n if (element) {\n return resolve(element);\n }\n\n const observer = new MutationObserver(() => {\n const element = document.querySelector(selector);\n if (element) {\n observer.disconnect();\n clearTimeout(timer);\n resolve(element);\n }\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true\n });\n\n const timer = setTimeout(() => {\n observer.disconnect();\n reject(new Error(`Timeout waiting for element: ${selector}`));\n }, timeout);\n });\n }\n\n showBackdrop(rect: DOMRect, borderRadius: string, viewContainerRef?: ViewContainerRef, anchorElement?: HTMLElement, padding = 0, disableInteraction = false): void {\n if (!this.backdropOverlayRef) {\n this.backdropOverlayRef = this.overlay.create({\n positionStrategy: this.overlay.position().global(),\n scrollStrategy: this.overlay.scrollStrategies.block(),\n hasBackdrop: false\n });\n const portal = new ComponentPortal(TourBackdrop, viewContainerRef);\n this.backdropComponentRef = this.backdropOverlayRef.attach(portal);\n\n this.backdropComponentRef.instance.backdropClick.subscribe(() => {\n const step = this.currentStep();\n const closeOnBackdropClick = step?.closeOnBackdropClick ?? this.config?.closeOnBackdropClick ?? false;\n if (closeOnBackdropClick) {\n this.end();\n }\n });\n }\n this.backdropComponentRef?.instance.updatePosition(rect, borderRadius, anchorElement, padding, disableInteraction);\n }\n\n async hideBackdrop(animate: boolean): Promise<void> {\n const overlayRef = this.backdropOverlayRef;\n const componentRef = this.backdropComponentRef;\n\n if (!overlayRef) {\n return;\n }\n\n if (this.backdropOverlayRef === overlayRef) {\n this.backdropOverlayRef = null;\n this.backdropComponentRef = null;\n }\n\n if (animate) {\n if (componentRef) {\n const safeSetInput = (name: string, value: any) => {\n try {\n componentRef.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n safeSetInput('animateEnterClass', false);\n safeSetInput('animateLeaveClass', true);\n }\n return new Promise(resolve => {\n setTimeout(() => {\n overlayRef.dispose();\n resolve();\n }, 150);\n });\n } else {\n overlayRef.dispose();\n return Promise.resolve();\n }\n }\n\n private _showStep(step: TourStepConfig): void {\n const anchorId = typeof step.anchorId === 'function' ? step.anchorId() : step.anchorId;\n let anchorElement: HTMLElement | null = null;\n let anchorDirective: any = null;\n\n if (typeof anchorId === 'string') {\n anchorDirective = this._anchors.get(anchorId);\n if (anchorDirective) {\n anchorDirective.showStep(step);\n return;\n }\n anchorElement = document.querySelector(anchorId) as HTMLElement;\n\n if (!anchorElement) {\n anchorElement = document.getElementById(anchorId);\n }\n } else if (anchorId instanceof HTMLElement) {\n anchorElement = anchorId;\n }\n\n if (anchorElement) {\n this.showStepForElement(anchorElement, step);\n }\n }\n\n private showStepForElement(element: HTMLElement, step: TourStepConfig): void {\n if (this.stepOverlayRef) {\n const oldOverlayRef = this.stepOverlayRef;\n const oldComponentRef = this.stepComponentRef;\n this.stepOverlayRef = null;\n this.stepComponentRef = null;\n oldOverlayRef.dispose();\n }\n\n const rect = element.getBoundingClientRect();\n const isVisible = (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n\n if (!isVisible) {\n element.scrollIntoView({\n behavior: 'instant' as any,\n block: 'center',\n inline: 'nearest'\n });\n }\n\n setTimeout(() => {\n if (this.state() === TourState.OFF) {\n return;\n }\n\n const rect = element.getBoundingClientRect();\n const style = window.getComputedStyle(element);\n const padding = step.padding ?? this.config?.padding ?? 4;\n\n let positionStrategy: PositionStrategy;\n const positionManager = new PositionManager();\n const defaultPositions: ConnectedPosition[] = [\n ...positionManager.build('below-center'),\n ...positionManager.build('above-center'),\n ...positionManager.build('after-center'),\n ...positionManager.build('before-center'),\n ].map(p => ({ ...p, ...this._getOffset(p, padding) }));\n\n const preferredPositions = step.position\n ? positionManager.build(step.position as any as OverlayPosition).map(p => ({ ...p, ...this._getOffset(p, padding) }))\n : defaultPositions;\n\n positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(element)\n .withPush(false)\n .withPositions(preferredPositions);\n\n this.stepOverlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n hasBackdrop: false,\n panelClass: 'ngs-tour-step-overlay'\n });\n\n if (step.withBackdrop) {\n this.showBackdrop(rect, style.borderRadius, undefined, element, padding, step.disableInteraction);\n }\n\n const componentType = (this.customStepComponent as Type<any>) || TourStep;\n const portal = new ComponentPortal(componentType);\n\n this.stepComponentRef = this.stepOverlayRef.attach(portal);\n\n const safeSetInput = (name: string, value: any) => {\n try {\n this.stepComponentRef?.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n positionStrategy.positionChanges.subscribe((change: ConnectedOverlayPositionChange) => {\n safeSetInput('position', change.connectionPair);\n });\n }\n\n const steps = this.steps();\n const index = this.currentStepIndex();\n const isFirst = index === 0;\n const isLast = index === steps.length - 1;\n\n safeSetInput('step', step);\n safeSetInput('isFirst', isFirst);\n safeSetInput('isLast', isLast);\n\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n this.stepOverlayRef.updatePosition();\n }\n\n }, 0);\n }\n\n private _getOffset(position: ConnectedPosition, padding: number): { offsetX?: number, offsetY?: number } {\n const offset = 8 + padding;\n if (position.originY === 'bottom' && position.overlayY === 'top') {\n return { offsetY: offset };\n }\n if (position.originY === 'top' && position.overlayY === 'bottom') {\n return { offsetY: -offset };\n }\n if (position.originX === 'end' && position.overlayX === 'start') {\n return { offsetX: offset };\n }\n if (position.originX === 'start' && position.overlayX === 'end') {\n return { offsetX: -offset };\n }\n return {};\n }\n\n private async _hideStep(step: TourStepConfig): Promise<void> {\n const anchorId = typeof step.anchorId === 'function' ? step.anchorId() : step.anchorId;\n if (typeof anchorId === 'string') {\n const anchor = this._anchors.get(anchorId);\n if (anchor) {\n await anchor.hideStep();\n return;\n }\n }\n\n const overlayRef = this.stepOverlayRef;\n const componentRef = this.stepComponentRef;\n\n if (overlayRef) {\n if (this.stepOverlayRef === overlayRef) {\n this.stepOverlayRef = null;\n this.stepComponentRef = null;\n }\n\n const safeSetInput = (name: string, value: any) => {\n try {\n componentRef?.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n\n safeSetInput('animateEnterClass', false);\n safeSetInput('animateLeaveClass', true);\n\n await new Promise(resolve => setTimeout(resolve, 150));\n overlayRef.dispose();\n }\n }\n}\n","import {\n Directive,\n ElementRef,\n input,\n OnDestroy,\n OnInit,\n ViewContainerRef,\n inject,\n Type,\n ComponentRef\n} from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { TourService } from '../tour.service';\nimport { TourStepConfig, TOUR_STEP_COMPONENT, TOUR_CONFIG, TourStepPosition } from '../tour.types';\nimport { TourStep } from '../tour-step/tour-step';\nimport { TourBackdrop } from '../tour-backdrop/tour-backdrop';\nimport { PositionManager, OverlayPosition } from '@ngstarter-ui/components/overlay';\nimport { ConnectedPosition, FlexibleConnectedPositionStrategy, ConnectedOverlayPositionChange } from '@angular/cdk/overlay';\n\n@Directive({\n selector: '[ngsTourAnchor]',\n standalone: true\n})\nexport class TourAnchorDirective implements OnInit, OnDestroy {\n anchorId = input.required<string>({ alias: 'ngsTourAnchor' });\n\n private readonly elementRef = inject(ElementRef);\n private readonly tourService = inject(TourService);\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly customStepComponent = inject(TOUR_STEP_COMPONENT, { optional: true });\n private readonly config = inject(TOUR_CONFIG, { optional: true });\n\n private overlayRef: OverlayRef | null = null;\n private componentRef: ComponentRef<any> | null = null;\n\n ngOnInit(): void {\n this.tourService.registerAnchor(this.anchorId(), this);\n }\n\n ngOnDestroy(): void {\n this.tourService.unregisterAnchor(this.anchorId());\n this.hideStep();\n }\n\n showStep(step: TourStepConfig): void {\n const currentOverlayRef = this.overlayRef;\n const currentComponentRef = this.componentRef;\n\n if (this.overlayRef === currentOverlayRef) {\n this.overlayRef = null;\n this.componentRef = null;\n }\n\n if (currentOverlayRef) {\n currentOverlayRef.dispose();\n }\n\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const isVisible = (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n\n if (!isVisible) {\n this.elementRef.nativeElement.scrollIntoView({\n behavior: 'instant' as any,\n block: 'center',\n inline: 'nearest'\n });\n }\n\n const timeout = 0;\n\n // Give time for scroll to finish before calculating coordinates for the backdrop\n setTimeout(() => {\n if (this.tourService.state() === 0) { // TourState.OFF\n return;\n }\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const style = window.getComputedStyle(this.elementRef.nativeElement);\n const padding = step.padding ?? this.config?.padding ?? 4;\n\n const positionManager = new PositionManager();\n const defaultPositions: ConnectedPosition[] = [\n ...positionManager.build('below-center'),\n ...positionManager.build('above-center'),\n ...positionManager.build('after-center'),\n ...positionManager.build('before-center'),\n ].map(p => ({ ...p, ...this._getOffset(p, padding) }));\n\n const preferredPositions = step.position\n ? positionManager.build(step.position as any as OverlayPosition).map(p => ({ ...p, ...this._getOffset(p, padding) }))\n : defaultPositions;\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPush(false)\n .withPositions(preferredPositions);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n hasBackdrop: false,\n panelClass: 'ngs-tour-step-overlay'\n });\n\n if (step.withBackdrop) {\n this.tourService.showBackdrop(rect, style.borderRadius, this.viewContainerRef, this.elementRef.nativeElement, padding, step.disableInteraction);\n }\n\n const componentType = (this.customStepComponent as Type<any>) || TourStep;\n const portal = new ComponentPortal(componentType, this.viewContainerRef);\n this.componentRef = this.overlayRef.attach(portal);\n\n const safeSetInput = (name: string, value: any) => {\n try {\n this.componentRef?.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n positionStrategy.positionChanges.subscribe((change: ConnectedOverlayPositionChange) => {\n safeSetInput('position', change.connectionPair);\n });\n\n // Trigger position calculation to emit initial value\n this.overlayRef.updatePosition();\n }\n\n const steps = this.tourService.steps();\n const index = this.tourService.currentStepIndex();\n const isFirst = index === 0;\n const isLast = index === steps.length - 1;\n\n safeSetInput('step', step);\n safeSetInput('isFirst', isFirst);\n safeSetInput('isLast', isLast);\n }, timeout);\n }\n\n async hideStep(): Promise<void> {\n const overlayRef = this.overlayRef;\n const componentRef = this.componentRef;\n\n if (this.overlayRef === overlayRef) {\n this.overlayRef = null;\n this.componentRef = null;\n }\n\n if (overlayRef) {\n const safeSetInput = (name: string, value: any) => {\n try {\n componentRef?.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n\n safeSetInput('animateEnterClass', false);\n safeSetInput('animateLeaveClass', true);\n\n await new Promise(resolve => setTimeout(resolve, 200));\n overlayRef.dispose();\n }\n }\n\n private _getOffset(position: ConnectedPosition, padding: number): { offsetX?: number, offsetY?: number } {\n const offset = 8 + padding;\n if (position.originY === 'bottom' && position.overlayY === 'top') {\n return { offsetY: offset };\n }\n if (position.originY === 'top' && position.overlayY === 'bottom') {\n return { offsetY: -offset };\n }\n if (position.originX === 'end' && position.overlayX === 'start') {\n return { offsetX: offset };\n }\n if (position.originX === 'start' && position.overlayX === 'end') {\n return { offsetX: -offset };\n }\n return {};\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngstarter-ui-components-guided-tour.mjs","sources":["../../../projects/components/guided-tour/src/tour.types.ts","../../../projects/components/guided-tour/src/tour-backdrop/tour-backdrop.ts","../../../projects/components/guided-tour/src/tour-backdrop/tour-backdrop.html","../../../projects/components/guided-tour/src/tour-step/tour-step.ts","../../../projects/components/guided-tour/src/tour-step/tour-step.html","../../../projects/components/guided-tour/src/tour.service.ts","../../../projects/components/guided-tour/src/tour-anchor/tour-anchor.directive.ts","../../../projects/components/guided-tour/ngstarter-ui-components-guided-tour.ts"],"sourcesContent":["import { InjectionToken, Provider, TemplateRef } from '@angular/core';\n\nexport interface TourConfig {\n /**\n * Default padding for the highlighted element.\n * @default 4\n */\n padding?: number;\n /**\n * Whether to close the tour when clicking on the backdrop.\n * @default false\n */\n closeOnBackdropClick?: boolean;\n /**\n * Whether to enable keyboard navigation (arrows and Esc).\n * @default true\n */\n keyboardNavigation?: boolean;\n /**\n * Default text for the \"Next\" button.\n */\n nextBtnText?: string;\n /**\n * Default text for the \"Prev\" button.\n */\n prevBtnText?: string;\n /**\n * Default text for the \"Finish\" button.\n */\n finishBtnText?: string;\n /**\n * Default text for the \"Skip\" button.\n */\n skipBtnText?: string;\n}\n\nexport const TOUR_CONFIG = new InjectionToken<TourConfig>('TOUR_CONFIG');\n\nexport function provideTourConfig(config: TourConfig): Provider {\n return {\n provide: TOUR_CONFIG,\n useValue: config\n };\n}\n\nexport type TourStepPosition = 'below-start' | 'below-center' | 'below-end' |\n 'above-start' | 'above-center' | 'above-end' |\n 'before-start' | 'before-center' | 'before-end' |\n 'after-start' | 'after-center' | 'after-end';\n\nexport interface TourStepConfig {\n /**\n * Unique identifier for the tour step anchor or a function that returns an element or selector.\n */\n anchorId: string | (() => HTMLElement | string);\n /**\n * Title of the tour step.\n */\n title?: string;\n /**\n * Content of the tour step.\n */\n content?: string;\n /**\n * HTML content of the tour step.\n */\n htmlContent?: string;\n /**\n * Template for the tour step.\n */\n template?: TemplateRef<any>;\n /**\n * Context for the template.\n */\n templateContext?: any;\n /**\n * Custom data for the tour step.\n */\n data?: any;\n /**\n * Whether to show a backdrop and highlight the anchor element.\n */\n withBackdrop?: boolean;\n /**\n * Whether to disable interaction with the highlighted element.\n */\n disableInteraction?: boolean;\n /**\n * Padding for the highlighted element.\n * If not provided, the default from TourConfig will be used.\n */\n padding?: number;\n /**\n * Route to navigate to before showing the step.\n */\n route?: string;\n /**\n * CSS selector to wait for before showing the step.\n */\n waitFor?: string;\n /**\n * Callback before showing the step.\n */\n onShow?: () => void | Promise<void>;\n /**\n * Callback before hiding the step.\n */\n onHide?: () => void | Promise<void>;\n /**\n * Callback when \"Next\" is clicked.\n */\n onNext?: () => void | Promise<void>;\n /**\n * Callback when \"Prev\" is clicked.\n */\n onPrev?: () => void | Promise<void>;\n /**\n * Whether to hide the arrow pointing to the anchor.\n */\n hideArrow?: boolean;\n /**\n * Whether to close the tour when clicking on the backdrop.\n * If not provided, the default from TourConfig will be used.\n */\n closeOnBackdropClick?: boolean;\n /**\n * Text for the \"Next\" button.\n */\n nextBtnText?: string;\n /**\n * Text for the \"Prev\" button.\n */\n prevBtnText?: string;\n /**\n * Text for the \"Finish\" button.\n */\n finishBtnText?: string;\n /**\n * Text for the \"Skip\" button.\n */\n skipBtnText?: string;\n /**\n * Explicit position for the tour step.\n * If not provided, the best position will be chosen automatically.\n */\n position?: TourStepPosition;\n}\n\nexport enum TourState {\n OFF,\n ON,\n PAUSED\n}\n\nexport const TOUR_STEP_COMPONENT = new InjectionToken<any>('TOUR_STEP_COMPONENT');\n","import { Component, ElementRef, inject, signal, HostListener, computed, output, input } from '@angular/core';\n\n@Component({\n selector: 'ngs-tour-backdrop',\n exportAs: 'ngsTourBackdrop',\n templateUrl: './tour-backdrop.html',\n styleUrl: './tour-backdrop.scss',\n host: {\n '[class.is-initial]': 'isInitial()',\n '[class.animate-enter]': 'animateEnterClass()',\n '[class.animate-leave]': 'animateLeaveClass()',\n '[style.pointer-events]': '\"none\"',\n },\n})\nexport class TourBackdrop {\n private readonly elementRef = inject(ElementRef);\n\n backdropClick = output<void>();\n\n animateEnterClass = input(true);\n\n animateLeaveClass = input(false);\n\n rect = signal<{ top: number; left: number; width: number; height: number }>({ top: 0, left: 0, width: 0, height: 0 });\n rx = signal<number>(0);\n padding = signal<number>(0);\n disableInteraction = signal<boolean>(false);\n viewBox = signal<string>(`0 0 ${window.innerWidth || 1000} ${window.innerHeight || 1000}`);\n isInitial = signal<boolean>(true);\n\n backdropPath = computed(() => {\n const { top, left, width, height } = this.rect();\n const p = this.padding();\n const radius = this.rx();\n const w = window.innerWidth;\n const h = window.innerHeight;\n\n const rectTop = top - p;\n const rectLeft = left - p;\n const rectWidth = width + 2 * p;\n const rectHeight = height + 2 * p;\n\n // Outer rectangle (entire screen)\n const screenPath = `M0,0 H${w} V${h} H0 Z`;\n\n // Hole (inner contour)\n const holePath = `\n M${rectLeft + radius},${rectTop}\n L${rectLeft + rectWidth - radius},${rectTop}\n A${radius},${radius} 0 0 1 ${rectLeft + rectWidth},${rectTop + radius}\n L${rectLeft + rectWidth},${rectTop + rectHeight - radius}\n A${radius},${radius} 0 0 1 ${rectLeft + rectWidth - radius},${rectTop + rectHeight}\n L${rectLeft + radius},${rectTop + rectHeight}\n A${radius},${radius} 0 0 1 ${rectLeft},${rectTop + rectHeight - radius}\n L${rectLeft},${rectTop + radius}\n A${radius},${radius} 0 0 1 ${rectLeft + radius},${rectTop}\n Z\n `.replace(/\\s+/g, ' ');\n\n return `${screenPath} ${holePath}`;\n });\n\n constructor() {\n this.updateViewBox();\n }\n\n @HostListener('window:resize')\n @HostListener('window:scroll')\n onResize(): void {\n this.updatePositionFromAnchor();\n this.updateViewBox();\n }\n\n private anchorElement: HTMLElement | null = null;\n\n updatePosition(rect: DOMRect, borderRadius: string, anchorElement?: HTMLElement, padding = 0, disableInteraction = false): void {\n if (anchorElement) {\n this.anchorElement = anchorElement;\n }\n const isInitial = this.isInitial();\n this.rect.set({\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height\n });\n\n const radius = parseInt(borderRadius, 10) || 0;\n this.rx.set(radius);\n this.padding.set(padding);\n this.disableInteraction.set(disableInteraction);\n\n this.updateViewBox();\n\n if (isInitial) {\n setTimeout(() => {\n this.isInitial.set(false);\n });\n }\n }\n\n private updatePositionFromAnchor(): void {\n if (this.anchorElement) {\n const rect = this.anchorElement.getBoundingClientRect();\n this.rect.set({\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height\n });\n }\n }\n\n private updateViewBox(): void {\n const w = window.innerWidth || 1000;\n const h = window.innerHeight || 1000;\n this.viewBox.set(`0 0 ${w} ${h}`);\n }\n}\n","<svg\n class=\"absolute top-0 left-0 w-full h-full pointer-events-none\"\n [attr.viewBox]=\"viewBox()\"\n preserveAspectRatio=\"xMinYMin slice\"\n>\n <path\n fill-rule=\"evenodd\"\n [attr.d]=\"backdropPath()\"\n (click)=\"backdropClick.emit()\"\n />\n <rect\n [attr.x]=\"rect().left - padding()\"\n [attr.y]=\"rect().top - padding()\"\n [attr.width]=\"rect().width + 2 * padding()\"\n [attr.height]=\"rect().height + 2 * padding()\"\n [attr.rx]=\"rx()\"\n [class.interactive]=\"!disableInteraction()\"\n ></rect>\n</svg>\n","import {\n Component,\n input,\n ChangeDetectionStrategy,\n signal, inject, computed\n} from '@angular/core';\nimport { CommonModule, NgClass, NgTemplateOutlet } from '@angular/common';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { TourService } from '../tour.service';\nimport { ConnectedPosition } from '@angular/cdk/overlay';\nimport { TourStepConfig, TOUR_CONFIG } from '../tour.types';\nimport { Button } from '@ngstarter-ui/components/button';\n\n@Component({\n selector: 'ngs-tour-step',\n exportAs: 'ngsTourStep',\n imports: [\n NgTemplateOutlet,\n NgClass,\n CommonModule,\n Button\n ],\n templateUrl: './tour-step.html',\n styleUrl: './tour-step.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-tour-step not-prose',\n '[class.animate-enter]': 'animateEnterClass()',\n '[class.animate-leave]': 'animateLeaveClass()',\n }\n})\nexport class TourStep {\n readonly tourService = inject(TourService);\n private _sanitizer = inject(DomSanitizer);\n\n step = input.required<TourStepConfig>();\n isFirst = input(false);\n isLast = input(false);\n position = input<ConnectedPosition | null>(null);\n\n animateEnterClass = input(true);\n animateLeaveClass = input(false);\n\n readonly config = inject(TOUR_CONFIG, { optional: true });\n\n protected readonly htmlContent = computed(() => {\n const html = this.step().htmlContent;\n return html ? this._sanitizer.bypassSecurityTrustHtml(html) : null;\n });\n\n getArrowClasses(pos: ConnectedPosition | null): string {\n if (!pos) {\n return 'hidden';\n }\n\n const classes = [];\n\n // Vertical position of the arrow on the step\n if (pos.overlayY === 'top' && pos.originY === 'bottom') {\n classes.push('pos-top'); // Arrow on the top edge of the step\n } else if (pos.overlayY === 'bottom' && pos.originY === 'top') {\n classes.push('pos-bottom'); // Arrow on the bottom edge of the step\n } else if (pos.overlayX === 'start' && pos.originX === 'end') {\n // Step is to the right of the element (AFTER)\n classes.push('pos-left');\n } else if (pos.overlayX === 'end' && pos.originX === 'start') {\n // Step is to the left of the element (BEFORE)\n classes.push('pos-right');\n }\n\n // Alignment of the arrow on the chosen edge\n if (classes.includes('pos-top') || classes.includes('pos-bottom')) {\n if (pos.overlayX === 'center') {\n classes.push('align-center');\n } else if (pos.overlayX === 'start') {\n classes.push('align-start');\n } else if (pos.overlayX === 'end') {\n classes.push('align-end');\n }\n } else if (classes.includes('pos-left') || classes.includes('pos-right')) {\n if (pos.overlayY === 'center') {\n classes.push('align-center');\n } else if (pos.overlayY === 'top') {\n classes.push('align-start');\n } else if (pos.overlayY === 'bottom') {\n classes.push('align-end');\n }\n }\n\n return classes.join(' ');\n }\n}\n","@if (!step().hideArrow) {\n <div class=\"tour-step-arrow\" [ngClass]=\"getArrowClasses(position())\"></div>\n}\n<div class=\"relative z-[1] transform-gpu\">\n @if (step().title) {\n <h3 class=\"mt-0 mb-2 font-semibold text-base leading-none tracking-tight\">{{ step().title }}</h3>\n }\n\n <div class=\"text-sm text-on-surface-variant\">\n @if (step().template) {\n <ng-container *ngTemplateOutlet=\"step().template!; context: step().templateContext\"/>\n } @else if (htmlContent()) {\n <div [innerHTML]=\"htmlContent()\"></div>\n } @else {\n {{ step().content }}\n }\n </div>\n\n <div class=\"flex justify-between gap-4 mt-4\">\n <button ngsButton (click)=\"tourService.end()\" class=\"button\">\n {{ step().skipBtnText || config?.skipBtnText || 'Close' }}\n </button>\n <div class=\"flex gap-2\">\n <button ngsButton=\"tonal\" (click)=\"tourService.prev()\" [disabled]=\"isFirst()\" class=\"button\">\n {{ step().prevBtnText || config?.prevBtnText || 'Prev' }}\n </button>\n <button ngsButton=\"filled\" (click)=\"tourService.next()\" class=\"button\">\n @if (isLast()) {\n {{ step().finishBtnText || config?.finishBtnText || 'Finish' }}\n } @else {\n {{ step().nextBtnText || config?.nextBtnText || 'Next' }}\n }\n </button>\n </div>\n </div>\n</div>\n","import { Injectable, signal, computed, inject, ViewContainerRef, ComponentRef, Type, OnDestroy } from '@angular/core';\nimport { TourStepConfig, TourState, TOUR_STEP_COMPONENT, TOUR_CONFIG, TourStepPosition } from './tour.types';\nimport { Subject } from 'rxjs';\nimport { Overlay, OverlayRef, ConnectedPosition, PositionStrategy, FlexibleConnectedPositionStrategy, ConnectedOverlayPositionChange } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { PositionManager, OverlayPosition } from '@ngstarter-ui/components/overlay';\nimport { TourBackdrop } from './tour-backdrop/tour-backdrop';\nimport { TourStep } from './tour-step/tour-step';\nimport { DOCUMENT } from '@angular/common';\nimport { Router } from '@angular/router';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TourService implements OnDestroy {\n private readonly overlay = inject(Overlay);\n private readonly config = inject(TOUR_CONFIG, { optional: true });\n private readonly document = inject(DOCUMENT);\n private readonly router = inject(Router);\n private backdropOverlayRef: OverlayRef | null = null;\n private backdropComponentRef: ComponentRef<TourBackdrop> | null = null;\n\n private readonly _steps = signal<TourStepConfig[]>([]);\n private readonly _currentStepIndex = signal<number>(-1);\n private readonly _state = signal<TourState>(TourState.OFF);\n private readonly _anchors = new Map<string, any>();\n private stepOverlayRef: OverlayRef | null = null;\n private stepComponentRef: ComponentRef<any> | null = null;\n private readonly customStepComponent = inject(TOUR_STEP_COMPONENT, { optional: true });\n\n constructor() {\n this.document.addEventListener('keydown', this.handleKeyDown);\n }\n\n ngOnDestroy(): void {\n this.document.removeEventListener('keydown', this.handleKeyDown);\n }\n\n private readonly handleKeyDown = (event: KeyboardEvent): void => {\n if (this.state() !== TourState.ON || this.config?.keyboardNavigation === false) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowRight':\n void this.next();\n break;\n case 'ArrowLeft':\n void this.prev();\n break;\n case 'Escape':\n void this.end();\n break;\n }\n };\n\n readonly steps = this._steps.asReadonly();\n readonly currentStepIndex = this._currentStepIndex.asReadonly();\n readonly state = this._state.asReadonly();\n\n readonly currentStep = computed(() => {\n const index = this._currentStepIndex();\n const steps = this._steps();\n return index >= 0 && index < steps.length ? steps[index] : null;\n });\n\n readonly stepShow$ = new Subject<TourStepConfig>();\n readonly stepHide$ = new Subject<TourStepConfig>();\n readonly start$ = new Subject<void>();\n readonly end$ = new Subject<void>();\n\n registerAnchor(id: string, anchor: any): void {\n this._anchors.set(id, anchor);\n }\n\n unregisterAnchor(id: string): void {\n this._anchors.delete(id);\n }\n\n start(steps: TourStepConfig[]): void {\n this._steps.set(steps);\n this._state.set(TourState.ON);\n this.start$.next();\n void this.goToStep(0);\n }\n\n async end(): Promise<void> {\n const currentStep = this.currentStep();\n if (currentStep) {\n if (currentStep.onHide) {\n await currentStep.onHide();\n }\n this.stepHide$.next(currentStep);\n // Start hiding step and backdrop in parallel\n const hideStepPromise = this._hideStep(currentStep);\n const hideBackdropPromise = this.hideBackdrop(true);\n\n await Promise.all([hideStepPromise, hideBackdropPromise]);\n } else {\n await this.hideBackdrop(true);\n }\n\n this._state.set(TourState.OFF);\n this._currentStepIndex.set(-1);\n this._steps.set([]);\n this.end$.next();\n }\n\n async next(): Promise<void> {\n const currentStep = this.currentStep();\n if (currentStep?.onNext) {\n await currentStep.onNext();\n }\n\n if (this._currentStepIndex() < this._steps().length - 1) {\n await this.goToStep(this._currentStepIndex() + 1);\n } else {\n await this.end();\n }\n }\n\n async prev(): Promise<void> {\n const currentStep = this.currentStep();\n if (currentStep?.onPrev) {\n await currentStep.onPrev();\n }\n\n if (this._currentStepIndex() > 0) {\n await this.goToStep(this._currentStepIndex() - 1);\n }\n }\n\n async goToStep(index: number): Promise<void> {\n const currentStep = this.currentStep();\n const nextStep = this._steps()[index];\n\n if (currentStep) {\n if (currentStep.onHide) {\n await currentStep.onHide();\n }\n this.stepHide$.next(currentStep);\n await this._hideStep(currentStep);\n }\n\n if (currentStep?.withBackdrop && !nextStep?.withBackdrop) {\n this.hideBackdrop(false);\n }\n\n if (nextStep?.route) {\n const currentUrl = this.router.url;\n const targetUrl = nextStep.route;\n\n // Compare only path without params and fragment if needed,\n // but usually Router.url returns full path.\n // If URL differs, perform transition.\n if (currentUrl !== targetUrl) {\n await this.router.navigateByUrl(targetUrl);\n }\n }\n\n if (nextStep?.onShow) {\n await nextStep.onShow();\n }\n\n if (nextStep?.waitFor) {\n try {\n await this.waitForElement(nextStep.waitFor);\n } catch (e) {\n console.warn(`TourService: Element \"${nextStep.waitFor}\" not found after timeout.`);\n }\n }\n\n this._currentStepIndex.set(index);\n if (nextStep) {\n this.stepShow$.next(nextStep);\n this._showStep(nextStep);\n }\n }\n\n private waitForElement(selector: string, timeout = 3000): Promise<Element> {\n return new Promise((resolve, reject) => {\n const element = document.querySelector(selector);\n if (element) {\n return resolve(element);\n }\n\n const observer = new MutationObserver(() => {\n const element = document.querySelector(selector);\n if (element) {\n observer.disconnect();\n clearTimeout(timer);\n resolve(element);\n }\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true\n });\n\n const timer = setTimeout(() => {\n observer.disconnect();\n reject(new Error(`Timeout waiting for element: ${selector}`));\n }, timeout);\n });\n }\n\n showBackdrop(rect: DOMRect, borderRadius: string, viewContainerRef?: ViewContainerRef, anchorElement?: HTMLElement, padding = 0, disableInteraction = false): void {\n if (!this.backdropOverlayRef) {\n this.backdropOverlayRef = this.overlay.create({\n positionStrategy: this.overlay.position().global(),\n scrollStrategy: this.overlay.scrollStrategies.block(),\n hasBackdrop: false\n });\n const portal = new ComponentPortal(TourBackdrop, viewContainerRef);\n this.backdropComponentRef = this.backdropOverlayRef.attach(portal);\n\n this.backdropComponentRef.instance.backdropClick.subscribe(() => {\n const step = this.currentStep();\n const closeOnBackdropClick = step?.closeOnBackdropClick ?? this.config?.closeOnBackdropClick ?? false;\n if (closeOnBackdropClick) {\n this.end();\n }\n });\n }\n this.backdropComponentRef?.instance.updatePosition(rect, borderRadius, anchorElement, padding, disableInteraction);\n }\n\n async hideBackdrop(animate: boolean): Promise<void> {\n const overlayRef = this.backdropOverlayRef;\n const componentRef = this.backdropComponentRef;\n\n if (!overlayRef) {\n return;\n }\n\n if (this.backdropOverlayRef === overlayRef) {\n this.backdropOverlayRef = null;\n this.backdropComponentRef = null;\n }\n\n if (animate) {\n if (componentRef) {\n const safeSetInput = (name: string, value: any) => {\n try {\n componentRef.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n safeSetInput('animateEnterClass', false);\n safeSetInput('animateLeaveClass', true);\n }\n return new Promise(resolve => {\n setTimeout(() => {\n overlayRef.dispose();\n resolve();\n }, 150);\n });\n } else {\n overlayRef.dispose();\n return Promise.resolve();\n }\n }\n\n private _showStep(step: TourStepConfig): void {\n const anchorId = typeof step.anchorId === 'function' ? step.anchorId() : step.anchorId;\n let anchorElement: HTMLElement | null = null;\n let anchorDirective: any = null;\n\n if (typeof anchorId === 'string') {\n anchorDirective = this._anchors.get(anchorId);\n if (anchorDirective) {\n anchorDirective.showStep(step);\n return;\n }\n anchorElement = document.querySelector(anchorId) as HTMLElement;\n\n if (!anchorElement) {\n anchorElement = document.getElementById(anchorId);\n }\n } else if (anchorId instanceof HTMLElement) {\n anchorElement = anchorId;\n }\n\n if (anchorElement) {\n this.showStepForElement(anchorElement, step);\n }\n }\n\n private showStepForElement(element: HTMLElement, step: TourStepConfig): void {\n if (this.stepOverlayRef) {\n const oldOverlayRef = this.stepOverlayRef;\n const oldComponentRef = this.stepComponentRef;\n this.stepOverlayRef = null;\n this.stepComponentRef = null;\n oldOverlayRef.dispose();\n }\n\n const rect = element.getBoundingClientRect();\n const isVisible = (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n\n if (!isVisible) {\n element.scrollIntoView({\n behavior: 'instant' as any,\n block: 'center',\n inline: 'nearest'\n });\n }\n\n setTimeout(() => {\n if (this.state() === TourState.OFF) {\n return;\n }\n\n const rect = element.getBoundingClientRect();\n const style = window.getComputedStyle(element);\n const padding = step.padding ?? this.config?.padding ?? 4;\n\n let positionStrategy: PositionStrategy;\n const positionManager = new PositionManager();\n const defaultPositions: ConnectedPosition[] = [\n ...positionManager.build('below-center'),\n ...positionManager.build('above-center'),\n ...positionManager.build('after-center'),\n ...positionManager.build('before-center'),\n ].map(p => ({ ...p, ...this._getOffset(p, padding) }));\n\n const preferredPositions = step.position\n ? positionManager.build(step.position as any as OverlayPosition).map(p => ({ ...p, ...this._getOffset(p, padding) }))\n : defaultPositions;\n\n positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(element)\n .withPush(false)\n .withPositions(preferredPositions);\n\n this.stepOverlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n hasBackdrop: false,\n panelClass: 'ngs-tour-step-overlay'\n });\n\n if (step.withBackdrop) {\n this.showBackdrop(rect, style.borderRadius, undefined, element, padding, step.disableInteraction);\n }\n\n const componentType = (this.customStepComponent as Type<any>) || TourStep;\n const portal = new ComponentPortal(componentType);\n\n this.stepComponentRef = this.stepOverlayRef.attach(portal);\n\n const safeSetInput = (name: string, value: any) => {\n try {\n this.stepComponentRef?.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n positionStrategy.positionChanges.subscribe((change: ConnectedOverlayPositionChange) => {\n safeSetInput('position', change.connectionPair);\n });\n }\n\n const steps = this.steps();\n const index = this.currentStepIndex();\n const isFirst = index === 0;\n const isLast = index === steps.length - 1;\n\n safeSetInput('step', step);\n safeSetInput('isFirst', isFirst);\n safeSetInput('isLast', isLast);\n\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n this.stepOverlayRef.updatePosition();\n }\n\n }, 0);\n }\n\n private _getOffset(position: ConnectedPosition, padding: number): { offsetX?: number, offsetY?: number } {\n const offset = 8 + padding;\n if (position.originY === 'bottom' && position.overlayY === 'top') {\n return { offsetY: offset };\n }\n if (position.originY === 'top' && position.overlayY === 'bottom') {\n return { offsetY: -offset };\n }\n if (position.originX === 'end' && position.overlayX === 'start') {\n return { offsetX: offset };\n }\n if (position.originX === 'start' && position.overlayX === 'end') {\n return { offsetX: -offset };\n }\n return {};\n }\n\n private async _hideStep(step: TourStepConfig): Promise<void> {\n const anchorId = typeof step.anchorId === 'function' ? step.anchorId() : step.anchorId;\n if (typeof anchorId === 'string') {\n const anchor = this._anchors.get(anchorId);\n if (anchor) {\n await anchor.hideStep();\n return;\n }\n }\n\n const overlayRef = this.stepOverlayRef;\n const componentRef = this.stepComponentRef;\n\n if (overlayRef) {\n if (this.stepOverlayRef === overlayRef) {\n this.stepOverlayRef = null;\n this.stepComponentRef = null;\n }\n\n const safeSetInput = (name: string, value: any) => {\n try {\n componentRef?.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n\n safeSetInput('animateEnterClass', false);\n safeSetInput('animateLeaveClass', true);\n\n await new Promise(resolve => setTimeout(resolve, 150));\n overlayRef.dispose();\n }\n }\n}\n","import {\n Directive,\n ElementRef,\n input,\n OnDestroy,\n OnInit,\n ViewContainerRef,\n inject,\n Type,\n ComponentRef\n} from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { TourService } from '../tour.service';\nimport { TourStepConfig, TOUR_STEP_COMPONENT, TOUR_CONFIG } from '../tour.types';\nimport { TourStep } from '../tour-step/tour-step';\nimport { PositionManager, OverlayPosition } from '@ngstarter-ui/components/overlay';\nimport { ConnectedPosition, FlexibleConnectedPositionStrategy, ConnectedOverlayPositionChange } from '@angular/cdk/overlay';\n\n@Directive({\n selector: '[ngsTourAnchor]',\n})\nexport class TourAnchorDirective implements OnInit, OnDestroy {\n anchorId = input.required<string>({ alias: 'ngsTourAnchor' });\n\n private readonly elementRef = inject(ElementRef);\n private readonly tourService = inject(TourService);\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly customStepComponent = inject(TOUR_STEP_COMPONENT, { optional: true });\n private readonly config = inject(TOUR_CONFIG, { optional: true });\n\n private overlayRef: OverlayRef | null = null;\n private componentRef: ComponentRef<any> | null = null;\n\n ngOnInit(): void {\n this.tourService.registerAnchor(this.anchorId(), this);\n }\n\n ngOnDestroy(): void {\n this.tourService.unregisterAnchor(this.anchorId());\n this.hideStep();\n }\n\n showStep(step: TourStepConfig): void {\n const currentOverlayRef = this.overlayRef;\n const currentComponentRef = this.componentRef;\n\n if (this.overlayRef === currentOverlayRef) {\n this.overlayRef = null;\n this.componentRef = null;\n }\n\n if (currentOverlayRef) {\n currentOverlayRef.dispose();\n }\n\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const isVisible = (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n\n if (!isVisible) {\n this.elementRef.nativeElement.scrollIntoView({\n behavior: 'instant' as any,\n block: 'center',\n inline: 'nearest'\n });\n }\n\n const timeout = 0;\n\n // Give time for scroll to finish before calculating coordinates for the backdrop\n setTimeout(() => {\n if (this.tourService.state() === 0) { // TourState.OFF\n return;\n }\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const style = window.getComputedStyle(this.elementRef.nativeElement);\n const padding = step.padding ?? this.config?.padding ?? 4;\n\n const positionManager = new PositionManager();\n const defaultPositions: ConnectedPosition[] = [\n ...positionManager.build('below-center'),\n ...positionManager.build('above-center'),\n ...positionManager.build('after-center'),\n ...positionManager.build('before-center'),\n ].map(p => ({ ...p, ...this._getOffset(p, padding) }));\n\n const preferredPositions = step.position\n ? positionManager.build(step.position as any as OverlayPosition).map(p => ({ ...p, ...this._getOffset(p, padding) }))\n : defaultPositions;\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPush(false)\n .withPositions(preferredPositions);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n hasBackdrop: false,\n panelClass: 'ngs-tour-step-overlay'\n });\n\n if (step.withBackdrop) {\n this.tourService.showBackdrop(rect, style.borderRadius, this.viewContainerRef, this.elementRef.nativeElement, padding, step.disableInteraction);\n }\n\n const componentType = (this.customStepComponent as Type<any>) || TourStep;\n const portal = new ComponentPortal(componentType, this.viewContainerRef);\n this.componentRef = this.overlayRef.attach(portal);\n\n const safeSetInput = (name: string, value: any) => {\n try {\n this.componentRef?.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n positionStrategy.positionChanges.subscribe((change: ConnectedOverlayPositionChange) => {\n safeSetInput('position', change.connectionPair);\n });\n\n // Trigger position calculation to emit initial value\n this.overlayRef.updatePosition();\n }\n\n const steps = this.tourService.steps();\n const index = this.tourService.currentStepIndex();\n const isFirst = index === 0;\n const isLast = index === steps.length - 1;\n\n safeSetInput('step', step);\n safeSetInput('isFirst', isFirst);\n safeSetInput('isLast', isLast);\n }, timeout);\n }\n\n async hideStep(): Promise<void> {\n const overlayRef = this.overlayRef;\n const componentRef = this.componentRef;\n\n if (this.overlayRef === overlayRef) {\n this.overlayRef = null;\n this.componentRef = null;\n }\n\n if (overlayRef) {\n const safeSetInput = (name: string, value: any) => {\n try {\n componentRef?.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n\n safeSetInput('animateEnterClass', false);\n safeSetInput('animateLeaveClass', true);\n\n await new Promise(resolve => setTimeout(resolve, 200));\n overlayRef.dispose();\n }\n }\n\n private _getOffset(position: ConnectedPosition, padding: number): { offsetX?: number, offsetY?: number } {\n const offset = 8 + padding;\n if (position.originY === 'bottom' && position.overlayY === 'top') {\n return { offsetY: offset };\n }\n if (position.originY === 'top' && position.overlayY === 'bottom') {\n return { offsetY: -offset };\n }\n if (position.originX === 'end' && position.overlayX === 'start') {\n return { offsetX: offset };\n }\n if (position.originX === 'start' && position.overlayX === 'end') {\n return { offsetX: -offset };\n }\n return {};\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -68,7 +68,7 @@ class HeadlessStep {
|
|
|
68
68
|
}
|
|
69
69
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: HeadlessStep, decorators: [{
|
|
70
70
|
type: Component,
|
|
71
|
-
args: [{ selector: 'ngs-headless-step', exportAs: 'ngsHeadlessStep',
|
|
71
|
+
args: [{ selector: 'ngs-headless-step', exportAs: 'ngsHeadlessStep', template: `<ng-content/>`, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
72
72
|
'class': 'ngs-headless-step',
|
|
73
73
|
'[style.display]': 'isActive() ? "block" : "none"',
|
|
74
74
|
}, styles: [":host{display:block}\n"] }]
|
|
@@ -179,7 +179,7 @@ class HeadlessStepper {
|
|
|
179
179
|
}
|
|
180
180
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: HeadlessStepper, decorators: [{
|
|
181
181
|
type: Component,
|
|
182
|
-
args: [{ selector: 'ngs-headless-stepper', exportAs: 'ngsHeadlessStepper',
|
|
182
|
+
args: [{ selector: 'ngs-headless-stepper', exportAs: 'ngsHeadlessStepper', template: `<ng-content/>`, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
183
183
|
'class': 'ngs-headless-stepper',
|
|
184
184
|
}, styles: [":host{display:block}\n"] }]
|
|
185
185
|
}], ctorParameters: () => [], propDecorators: { linear: [{ type: i0.Input, args: [{ isSignal: true, alias: "linear", required: false }] }], selectedIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedIndex", required: false }] }, { type: i0.Output, args: ["selectedIndexChange"] }], steps: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => HeadlessStep), { isSignal: true }] }] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngstarter-ui-components-headless-stepper.mjs","sources":["../../../projects/components/headless-stepper/src/headless-step.ts","../../../projects/components/headless-stepper/src/headless-stepper.ts","../../../projects/components/headless-stepper/ngstarter-ui-components-headless-stepper.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n input,\n signal,\n computed,\n effect,\n inject,\n DestroyRef\n} from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { startWith } from 'rxjs/operators';\n\n@Component({\n selector: 'ngs-headless-step',\n exportAs: 'ngsHeadlessStep',\n standalone: true,\n template: `<ng-content/>`,\n styles: [`\n :host {\n display: block;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-headless-step',\n '[style.display]': 'isActive() ? \"block\" : \"none\"',\n }\n})\nexport class HeadlessStep {\n /** Form control associated with this step */\n stepControl = input<AbstractControl | undefined>(undefined);\n /** Whether the step is optional */\n optional = input(false, {\n transform: coerceBooleanProperty\n });\n\n /** Whether the user has interacted with this step (writable signal) */\n readonly interacted = signal(false);\n /** Whether this step is currently active (writable signal, controlled by Stepper) */\n readonly isActive = signal(false);\n /** Internal writable signal tracking the validity of the stepControl */\n private readonly _isValid = signal(true); // Default to true if no control\n\n private _destroyRef = inject(DestroyRef); // Inject DestroyRef for automatic cleanup\n\n constructor() {\n effect(() => {\n const control = this.stepControl(); // Read the input signal\n\n if (control) {\n // Set initial validity based on the control's current state when the effect runs\n this._isValid.set(control.valid);\n\n // Subscribe to statusChanges and update the _isValid signal\n // Use takeUntilDestroyed for automatic cleanup when the component is destroyed\n control.statusChanges.pipe(\n startWith(control.status), // Emit initial status immediately to sync _isValid\n takeUntilDestroyed(this._destroyRef) // Automatically unsubscribe on component destroy\n ).subscribe(() => {\n // Update the internal validity signal whenever the control's status changes\n this._isValid.set(control.valid);\n });\n\n } else {\n // If no control is provided, consider the step inherently valid for completion\n this._isValid.set(true);\n }\n });\n }\n\n /** Computed signal indicating if the step is completed */\n readonly completed = computed(() => {\n // A step is completed if it doesn't have a stepControl or\n // if the internal _isValid signal (reflecting the control's validity) is true.\n return !this.stepControl() || this._isValid();\n });\n\n /**\n * Checks if the step is currently valid.\n * Considers the validity of the associated stepControl if provided.\n * @returns boolean True if the step is valid, false otherwise.\n */\n public isValid(): boolean {\n return this._isValid(); // Directly return the tracked validity state\n }\n\n /** Resets the step's interacted state */\n reset(): void {\n this.interacted.set(false);\n }\n\n /** Sets the active state of the step */\n setActive(active: boolean): void {\n this.isActive.set(active);\n }\n\n /** Sets the interacted state of the step */\n setInteracted(interacted: boolean): void {\n this.interacted.set(interacted);\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n effect,\n computed,\n input,\n model,\n contentChildren,\n} from '@angular/core';\nimport { HeadlessStep } from './headless-step';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Component({\n selector: 'ngs-headless-stepper',\n exportAs: 'ngsHeadlessStepper',\n standalone: true,\n template: `<ng-content/>`,\n styles: [`\n :host {\n display: block;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-headless-stepper',\n },\n})\nexport class HeadlessStepper {\n /** Whether the stepper should operate in linear mode. */\n readonly linear = input(false, {\n transform: coerceBooleanProperty\n });\n /** The index of the active step (two-way bound). */\n readonly selectedIndex = model(0);\n\n /** Collection of child StepComponent instances. */\n readonly steps = contentChildren(HeadlessStep);\n\n /** Computed signal for the total number of steps. */\n readonly stepsCount = computed(() => {\n return this.steps()?.length ?? 0;\n });\n\n /** The currently selected StepComponent instance. */\n readonly selected = computed(() => {\n const index = this.selectedIndex();\n const stepList = this.steps();\n // Use the stepsCount() computed signal for checking length\n return stepList && index >= 0 && index < this.stepsCount() ? stepList[index] : undefined;\n });\n\n /** Checks if the user can navigate to the next step. */\n readonly canMoveNext = computed(() => {\n const index = this.selectedIndex();\n // Use stepsCount() signal\n const totalSteps = this.stepsCount();\n const currentSelected = this.selected();\n const isLinear = this.linear();\n\n // Cannot move next if there are no steps or already on the last step\n if (totalSteps === 0 || index >= totalSteps - 1) {\n return false;\n }\n if (!isLinear || !currentSelected) {\n return true;\n }\n return currentSelected.completed() || currentSelected.optional();\n });\n\n /** Computed signal indicating if the current step is the first step. */\n readonly isFirstStep = computed(() => {\n const index = this.selectedIndex();\n // Use stepsCount() signal\n return index === 0 && this.stepsCount() > 0;\n });\n\n /** Computed signal indicating if the current step is the last step. */\n readonly isLastStep = computed(() => {\n const index = this.selectedIndex();\n // Use stepsCount() signal\n const totalSteps = this.stepsCount();\n return totalSteps > 0 && index === totalSteps - 1;\n });\n\n /** Computed signal calculating the progress percentage. */\n readonly progressPercent = computed(() => {\n const totalSteps = this.stepsCount();\n const index = this.selectedIndex();\n\n if (totalSteps === 0) {\n return 0;\n }\n\n const progress = (100 / totalSteps) * (index + 1);\n return Math.max(0, Math.min(100, progress));\n });\n\n constructor() {\n effect(() => {\n const currentSteps = this.steps();\n const currentIndex = this.selectedIndex();\n currentSteps.forEach((step, index) => step.setActive(index === currentIndex));\n });\n\n effect((onCleanup) => { // Mark as interacted\n const currentSelected = this.selected();\n if (currentSelected && !currentSelected.interacted()) {\n currentSelected.setInteracted(true);\n }\n });\n\n effect(() => { // Validate index\n const totalSteps = this.stepsCount();\n const currentIndex = this.selectedIndex();\n\n if (totalSteps > 0) {\n const newIndex = Math.max(0, Math.min(currentIndex, totalSteps - 1));\n if (newIndex !== currentIndex) this.selectedIndex.set(newIndex);\n } else if (currentIndex !== 0) {\n this.selectedIndex.set(0);\n }\n });\n }\n\n /** Navigates to the next step if possible. */\n next(): void {\n if (this.canMoveNext()) {\n this.selectedIndex.update(i => i + 1);\n }\n }\n\n /** Navigates to the previous step if possible. */\n previous(): void {\n // Use renamed computed signal for check\n if (!this.isFirstStep()) {\n this.selectedIndex.update(i => i - 1);\n }\n }\n\n /** Resets the stepper to the first step. */\n reset(): void {\n this.steps().forEach(step => step.reset());\n this.selectedIndex.set(0);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngstarter-ui-components-headless-stepper.mjs","sources":["../../../projects/components/headless-stepper/src/headless-step.ts","../../../projects/components/headless-stepper/src/headless-stepper.ts","../../../projects/components/headless-stepper/ngstarter-ui-components-headless-stepper.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n input,\n signal,\n computed,\n effect,\n inject,\n DestroyRef\n} from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { startWith } from 'rxjs/operators';\n\n@Component({\n selector: 'ngs-headless-step',\n exportAs: 'ngsHeadlessStep',\n template: `<ng-content/>`,\n styles: [`\n :host {\n display: block;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-headless-step',\n '[style.display]': 'isActive() ? \"block\" : \"none\"',\n }\n})\nexport class HeadlessStep {\n /** Form control associated with this step */\n stepControl = input<AbstractControl | undefined>(undefined);\n /** Whether the step is optional */\n optional = input(false, {\n transform: coerceBooleanProperty\n });\n\n /** Whether the user has interacted with this step (writable signal) */\n readonly interacted = signal(false);\n /** Whether this step is currently active (writable signal, controlled by Stepper) */\n readonly isActive = signal(false);\n /** Internal writable signal tracking the validity of the stepControl */\n private readonly _isValid = signal(true); // Default to true if no control\n\n private _destroyRef = inject(DestroyRef); // Inject DestroyRef for automatic cleanup\n\n constructor() {\n effect(() => {\n const control = this.stepControl(); // Read the input signal\n\n if (control) {\n // Set initial validity based on the control's current state when the effect runs\n this._isValid.set(control.valid);\n\n // Subscribe to statusChanges and update the _isValid signal\n // Use takeUntilDestroyed for automatic cleanup when the component is destroyed\n control.statusChanges.pipe(\n startWith(control.status), // Emit initial status immediately to sync _isValid\n takeUntilDestroyed(this._destroyRef) // Automatically unsubscribe on component destroy\n ).subscribe(() => {\n // Update the internal validity signal whenever the control's status changes\n this._isValid.set(control.valid);\n });\n\n } else {\n // If no control is provided, consider the step inherently valid for completion\n this._isValid.set(true);\n }\n });\n }\n\n /** Computed signal indicating if the step is completed */\n readonly completed = computed(() => {\n // A step is completed if it doesn't have a stepControl or\n // if the internal _isValid signal (reflecting the control's validity) is true.\n return !this.stepControl() || this._isValid();\n });\n\n /**\n * Checks if the step is currently valid.\n * Considers the validity of the associated stepControl if provided.\n * @returns boolean True if the step is valid, false otherwise.\n */\n public isValid(): boolean {\n return this._isValid(); // Directly return the tracked validity state\n }\n\n /** Resets the step's interacted state */\n reset(): void {\n this.interacted.set(false);\n }\n\n /** Sets the active state of the step */\n setActive(active: boolean): void {\n this.isActive.set(active);\n }\n\n /** Sets the interacted state of the step */\n setInteracted(interacted: boolean): void {\n this.interacted.set(interacted);\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n effect,\n computed,\n input,\n model,\n contentChildren,\n} from '@angular/core';\nimport { HeadlessStep } from './headless-step';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Component({\n selector: 'ngs-headless-stepper',\n exportAs: 'ngsHeadlessStepper',\n template: `<ng-content/>`,\n styles: [`\n :host {\n display: block;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-headless-stepper',\n },\n})\nexport class HeadlessStepper {\n /** Whether the stepper should operate in linear mode. */\n readonly linear = input(false, {\n transform: coerceBooleanProperty\n });\n /** The index of the active step (two-way bound). */\n readonly selectedIndex = model(0);\n\n /** Collection of child StepComponent instances. */\n readonly steps = contentChildren(HeadlessStep);\n\n /** Computed signal for the total number of steps. */\n readonly stepsCount = computed(() => {\n return this.steps()?.length ?? 0;\n });\n\n /** The currently selected StepComponent instance. */\n readonly selected = computed(() => {\n const index = this.selectedIndex();\n const stepList = this.steps();\n // Use the stepsCount() computed signal for checking length\n return stepList && index >= 0 && index < this.stepsCount() ? stepList[index] : undefined;\n });\n\n /** Checks if the user can navigate to the next step. */\n readonly canMoveNext = computed(() => {\n const index = this.selectedIndex();\n // Use stepsCount() signal\n const totalSteps = this.stepsCount();\n const currentSelected = this.selected();\n const isLinear = this.linear();\n\n // Cannot move next if there are no steps or already on the last step\n if (totalSteps === 0 || index >= totalSteps - 1) {\n return false;\n }\n if (!isLinear || !currentSelected) {\n return true;\n }\n return currentSelected.completed() || currentSelected.optional();\n });\n\n /** Computed signal indicating if the current step is the first step. */\n readonly isFirstStep = computed(() => {\n const index = this.selectedIndex();\n // Use stepsCount() signal\n return index === 0 && this.stepsCount() > 0;\n });\n\n /** Computed signal indicating if the current step is the last step. */\n readonly isLastStep = computed(() => {\n const index = this.selectedIndex();\n // Use stepsCount() signal\n const totalSteps = this.stepsCount();\n return totalSteps > 0 && index === totalSteps - 1;\n });\n\n /** Computed signal calculating the progress percentage. */\n readonly progressPercent = computed(() => {\n const totalSteps = this.stepsCount();\n const index = this.selectedIndex();\n\n if (totalSteps === 0) {\n return 0;\n }\n\n const progress = (100 / totalSteps) * (index + 1);\n return Math.max(0, Math.min(100, progress));\n });\n\n constructor() {\n effect(() => {\n const currentSteps = this.steps();\n const currentIndex = this.selectedIndex();\n currentSteps.forEach((step, index) => step.setActive(index === currentIndex));\n });\n\n effect((onCleanup) => { // Mark as interacted\n const currentSelected = this.selected();\n if (currentSelected && !currentSelected.interacted()) {\n currentSelected.setInteracted(true);\n }\n });\n\n effect(() => { // Validate index\n const totalSteps = this.stepsCount();\n const currentIndex = this.selectedIndex();\n\n if (totalSteps > 0) {\n const newIndex = Math.max(0, Math.min(currentIndex, totalSteps - 1));\n if (newIndex !== currentIndex) this.selectedIndex.set(newIndex);\n } else if (currentIndex !== 0) {\n this.selectedIndex.set(0);\n }\n });\n }\n\n /** Navigates to the next step if possible. */\n next(): void {\n if (this.canMoveNext()) {\n this.selectedIndex.update(i => i + 1);\n }\n }\n\n /** Navigates to the previous step if possible. */\n previous(): void {\n // Use renamed computed signal for check\n if (!this.isFirstStep()) {\n this.selectedIndex.update(i => i - 1);\n }\n }\n\n /** Resets the stepper to the first step. */\n reset(): void {\n this.steps().forEach(step => step.reset());\n this.selectedIndex.set(0);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -48,7 +48,7 @@ class Icon {
|
|
|
48
48
|
}
|
|
49
49
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: Icon, decorators: [{
|
|
50
50
|
type: Component,
|
|
51
|
-
args: [{ selector: 'ngs-icon',
|
|
51
|
+
args: [{ selector: 'ngs-icon', exportAs: 'ngsIcon', template: '<span [innerHTML]="_iconHtml()" style="display: contents"></span>', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
52
52
|
'class': 'ngs-icon',
|
|
53
53
|
}, styles: [":host{display:inline-flex;flex:none;align-items:center;justify-content:center;line-height:0}:host svg{flex:none}:host:not([class*=text-]){color:var(--ngs-icon-color)}:host:not([class*=w-]):not([class*=size-]){width:var(--ngs-icon-size)}:host:not([class*=h-]):not([class*=size-]){height:var(--ngs-icon-size)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
|
|
54
54
|
}], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngstarter-ui-components-icon.mjs","sources":["../../../projects/components/icon/src/icon/icon.ts","../../../projects/components/icon/ngstarter-ui-components-icon.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n OnChanges,\n OnInit, signal,\n SimpleChanges\n} from '@angular/core';\nimport { loadIcon } from 'iconify-icon';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { v7 as uuid } from 'uuid';\n\n@Component({\n selector: 'ngs-icon',\n
|
|
1
|
+
{"version":3,"file":"ngstarter-ui-components-icon.mjs","sources":["../../../projects/components/icon/src/icon/icon.ts","../../../projects/components/icon/ngstarter-ui-components-icon.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n OnChanges,\n OnInit, signal,\n SimpleChanges\n} from '@angular/core';\nimport { loadIcon } from 'iconify-icon';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { v7 as uuid } from 'uuid';\n\n@Component({\n selector: 'ngs-icon',\n exportAs: 'ngsIcon',\n template: '<span [innerHTML]=\"_iconHtml()\" style=\"display: contents\"></span>',\n styleUrl: './icon.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-icon',\n }\n})\nexport class Icon implements OnInit, OnChanges {\n private _sanitizer = inject(DomSanitizer);\n protected _iconHtml = signal<SafeHtml | null>(null);\n\n name = input.required<string>();\n\n private loaded = false;\n\n async ngOnInit() {\n await this._loadIcon();\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes['name'] && !changes['name'].isFirstChange()) {\n if (changes['name'].previousValue === changes['name'].currentValue) {\n return;\n }\n\n this.loaded = false;\n await this._loadIcon();\n }\n }\n\n private async _loadIcon() {\n if (this.loaded) {\n return;\n }\n\n if (!this.name()) {\n this.loaded = true;\n return;\n }\n\n const data = await loadIcon(this.name());\n let body = data.body;\n\n // If svg icon has mask of defs with id, we need to replace to unique id\n // because the same icons can be used on the same page and use the same id, which can cause problems.\n const allIdMatches = [...body.matchAll(/id=\"(\\w+)\"/g)];\n\n if (allIdMatches.length > 0) {\n allIdMatches.forEach(match => {\n body = body.replaceAll(match[1], uuid());\n });\n }\n\n const iconHtml = `<svg viewBox=\"0 0 ${data.width} ${data.height}\">${body}</svg>`;\n this._iconHtml.set(this._sanitizer.bypassSecurityTrustHtml(iconHtml));\n this.loaded = true;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid"],"mappings":";;;;;;MAuBa,IAAI,CAAA;AACP,IAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;AAC/B,IAAA,SAAS,GAAG,MAAM,CAAkB,IAAI,gFAAC;AAEnD,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,0EAAU;IAEvB,MAAM,GAAG,KAAK;AAEtB,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,IAAI,CAAC,SAAS,EAAE;IACxB;IAEA,MAAM,WAAW,CAAC,OAAsB,EAAA;AACtC,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,EAAE;AACvD,YAAA,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,aAAa,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE;gBAClE;YACF;AAEA,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,YAAA,MAAM,IAAI,CAAC,SAAS,EAAE;QACxB;IACF;AAEQ,IAAA,MAAM,SAAS,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB;QACF;QAEA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACxC,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI;;;QAIpB,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAEtD,QAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,YAAY,CAAC,OAAO,CAAC,KAAK,IAAG;AAC3B,gBAAA,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAEA,EAAI,EAAE,CAAC;AAC1C,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,MAAM,QAAQ,GAAG,CAAA,kBAAA,EAAqB,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,EAAA,EAAK,IAAI,QAAQ;AAChF,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IACpB;uGAjDW,IAAI,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAJ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAI,sRAPL,mEAAmE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0XAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOlE,IAAI,EAAA,UAAA,EAAA,CAAA;kBAVhB,SAAS;+BACE,UAAU,EAAA,QAAA,EACV,SAAS,EAAA,QAAA,EACT,mEAAmE,mBAE5D,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,OAAO,EAAE,UAAU;AACpB,qBAAA,EAAA,MAAA,EAAA,CAAA,0XAAA,CAAA,EAAA;;;ACrBH;;AAEG;;;;"}
|