@ynmstudio/utils
Version:
YNM Utilities for Angular
1 lines • 17.3 kB
Source Map (JSON)
{"version":3,"file":"ynmstudio-utils-scrollspy.mjs","sources":["../../../projects/ynm-utils/scrollspy/src/lib/scroll-spy-item/scroll-spy-item.directive.ts","../../../projects/ynm-utils/scrollspy/src/lib/scroll-spy-service/scroll-spy.service.ts","../../../projects/ynm-utils/scrollspy/src/lib/scroll-spy/scroll-spy.directive.ts","../../../projects/ynm-utils/scrollspy/src/lib/scroll-spy-section/scroll-spy-section.directive.ts","../../../projects/ynm-utils/scrollspy/src/lib/scroll-spy.module.ts","../../../projects/ynm-utils/scrollspy/src/public_api.ts","../../../projects/ynm-utils/scrollspy/src/ynmstudio-utils-scrollspy.ts"],"sourcesContent":["import {\n Directive,\n Input,\n HostBinding,\n ChangeDetectorRef,\n EventEmitter,\n Output,\n} from '@angular/core';\n\n/**\n * A directive used to add an `active` class to a nav item\n * when the section is in the viewport\n *\n * @example\n * ```html\n * <a snScrollSpyItem for=\"foo\" href=\"#section1\">Section 1</a>\n * ```\n *\n */\n@Directive({\n selector: '[snScrollSpyItem]',\n standalone: true\n})\nexport class ScrollSpyItemDirective {\n\n private activeClass: string = 'active';\n\n /**\n * True if the nav item is the active item in the `items` list\n * for `ScrollSpyDirective` instance\n *\n * @memberof ScrollSpyItemDirective\n */\n @HostBinding('class') get getActiveClass() {\n return this.active ? this.activeClass : '';\n }\n\n /**\n * Emits when the `active` property changes\n */\n @Output() activeChange = new EventEmitter<boolean>();\n\n private _active = false;\n set active(state: boolean) {\n if (this._active === state) return;\n this.activeChange.emit(state);\n this._active = state;\n }\n get active() {\n return this._active;\n }\n\n @Input()\n set snScrollSpyItemActive(data: string) {\n this.activeClass = data;\n }\n /**\n * ID of `ScrollSpyDirective` instance\n *\n * @memberof ScrollSpyItemDirective\n */\n @Input()\n public for!: string;\n /**\n * Hash for section to link to\n *\n * @memberof ScrollSpyItemDirective\n */\n @Input()\n public href!: string;\n /**\n * If true means the section is in the viewport\n *\n * @memberof ScrollSpyItemDirective\n */\n public inViewport = false;\n /**\n * Id of section that links navigates to\n *\n * @readonly\n * @memberof ScrollSpyItemDirective\n */\n public get section(): string {\n return this.href.replace('#', '');\n }\n /**\n * Creates an instance of ScrollSpyItemDirective.\n * @memberof ScrollSpyItemDirective\n */\n constructor(private cdRef: ChangeDetectorRef) { }\n /**\n * Manually trigger change detection\n *\n * @memberof ScrollSpyItemDirective\n */\n public detectChanges(): void {\n this.cdRef.detectChanges();\n }\n}\n","import { Injectable, QueryList } from '@angular/core';\n\nimport { ScrollSpyItemDirective } from '../scroll-spy-item/scroll-spy-item.directive';\nimport { Spy } from '../shared/spy.model';\n\n/**\n * Service that stores a list of `Spy`'s and the state\n * of their nav items `inViewport` and `active` state\n *\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScrollSpyService {\n /**\n * List of `Spy`'s\n *\n * @memberof ScrollSpyService\n */\n public spys: Spy[] = [];\n /**\n * Stores requests to add items to spy when spy hasn't been created\n * yet. Once spy has been added then request will be made again.\n *\n * @memberof ScrollSpyService\n */\n public buffer: any[] = [];\n /**\n * Add spy to list of `spys`\n *\n * @memberof ScrollSpyService\n */\n public addSpy(id: string, items: QueryList<ScrollSpyItemDirective>): void {\n this.spys.push({ id, items });\n const buffer = this.buffer.filter(i => i.spyId === id);\n this.buffer = this.buffer.filter(i => i.spyId !== id);\n buffer.forEach(i => this.setSpySectionStatus(i.sectionId, i.spyId, i.inViewport));\n }\n /**\n * Remove spy from list of `spys`\n *\n * @memberof ScrollSpyService\n */\n public removeSpy(id: string): void {\n const i = this.spys.findIndex(s => s.id === id);\n this.spys.splice(i, 1);\n }\n /**\n * Set the `inViewport` status for a spy item then sets the active\n * to true for the first item in the list that has `inViewport`\n * set to true\n *\n * @memberof ScrollSpyService\n */\n public setSpySectionStatus(\n sectionId: string,\n spyId: string,\n inViewport: boolean,\n ): void {\n const spy = this.spys.find(s => s.id === spyId);\n if (!spy) {\n this.buffer.push({ sectionId, spyId, inViewport });\n return;\n }\n const item = spy.items.find(i => i.section === sectionId);\n if (!item) {\n return;\n }\n\n item.inViewport = inViewport;\n const firstInViewport = spy.items.find(i => i.inViewport);\n spy.items.forEach(i => i.active = firstInViewport === i);\n if (firstInViewport) {\n firstInViewport.detectChanges();\n }\n }\n}\n","import {\n Directive,\n ContentChildren,\n QueryList,\n AfterViewInit,\n Input,\n OnDestroy,\n} from '@angular/core';\n\nimport { ScrollSpyItemDirective } from '../scroll-spy-item/scroll-spy-item.directive';\nimport { ScrollSpyService } from '../scroll-spy-service/scroll-spy.service';\n\n/**\n * Adds `active` class to navigation links when section is in the viewport.\n * Used in conjuction with `snScrollItem` directive which should be added\n * to anchor links in the nav\n *\n * @example\n * ```\n * <ul role=\"navigation\" snScrollSpy id=\"foo\">\n * <li><a snScrollSpyItem for=\"foo\" href=\"#section1\">Section 1</a></li>\n * <li><a snScrollSpyItem for=\"foo\" href=\"#section2\">Section 2</a></li>\n * <li><a snScrollSpyItem for=\"foo\" href=\"#section3\">Section 3</a></li>\n * <li><a snScrollSpyItem for=\"foo\" href=\"#section4\">Section 4</a></li>\n * </ul>\n * ```\n *\n */\n@Directive({\n selector: '[snScrollSpy]',\n standalone: true\n})\nexport class ScrollSpyDirective implements AfterViewInit, OnDestroy {\n /**\n * Collection of `ScrollSpyItem`. They are the list of\n * nav items.\n *\n * @memberof ScrollSpyDirective\n */\n @ContentChildren(ScrollSpyItemDirective, { descendants: true })\n public items!: QueryList<ScrollSpyItemDirective>;\n /**\n * ID of scrollSpy instance\n *\n * @memberof ScrollSpyDirective\n */\n @Input()\n public id!: string;\n /**\n * Creates an instance of ScrollSpyDirective.\n * @memberof ScrollSpyDirective\n */\n constructor(private scrollSpySvc: ScrollSpyService) { }\n /**\n * Adds spy to list of spys in `ScrollSpyService`\n *\n * @memberof ScrollSpyDirective\n */\n public ngAfterViewInit(): void {\n this.scrollSpySvc.addSpy(this.id, this.items);\n }\n /**\n * Remove spy from list of spys when directive is destroyed\n *\n * @memberof ScrollSpyDirective\n */\n public ngOnDestroy(): void {\n this.scrollSpySvc.removeSpy(this.id);\n }\n}\n","import { Directive, HostListener, inject, InjectionToken, Input } from '@angular/core';\nimport { INTERSECTION_OBSERVER_INIT, InViewportDirective } from '@ynmstudio/utils/inviewport';\nimport { ScrollSpyService } from '../scroll-spy-service/scroll-spy.service';\n\nexport const SCROLL_SPY_INTERSECTION_OBSERVER_INIT = new InjectionToken<IntersectionObserverInit>('Options for IntersectionObserver within ScrollSpy', {\n factory: () => ({ rootMargin: '-100px 0px 50px 0px' })\n});\n\n/**\n * A component to wrap section content within that will update the\n * `ScrollSpyService` when it's in view\n *\n * @example\n * ```html\n * <section sn-scroll-spy-section id=\"section1\" for=\"foo\">\n * ...\n * </section>\n * ```\n */\n@Directive({\n selector: '[sn-scroll-spy-section]',\n standalone: true,\n hostDirectives: [\n {\n directive: InViewportDirective,\n outputs: ['inViewportChange'],\n }\n ],\n providers: [\n {\n provide: INTERSECTION_OBSERVER_INIT,\n useExisting: SCROLL_SPY_INTERSECTION_OBSERVER_INIT,\n }\n ]\n})\nexport class ScrollSpySectionDirective {\n /**\n * Identifies the section\n *\n * @memberof ScrollSpySectionComponent\n */\n @Input()\n public id!: string;\n /**\n * Specifies which `ScrollSpy` instance to update\n *\n * @memberof ScrollSpySectionComponent\n */\n @Input()\n public for!: string;\n /**\n * Creates an instance of ScrollSpySectionComponent.\n * @memberof ScrollSpySectionComponent\n */\n constructor(private scrollSpySvc: ScrollSpyService) { }\n /**\n * Updates `ScrollSpy` section when element enters/leaves viewport\n *\n * @memberof ScrollSpySectionComponent\n */\n @HostListener('inViewportChange', ['$event']) public onInViewportChange(inViewport: boolean): void {\n this.scrollSpySvc.setSpySectionStatus(this.id, this.for, inViewport);\n }\n\n @Input()\n public inViewportOptions = inject(SCROLL_SPY_INTERSECTION_OBSERVER_INIT, { optional: true });\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { ScrollSpyDirective } from './scroll-spy/scroll-spy.directive';\nimport { ScrollSpySectionDirective } from './scroll-spy-section/scroll-spy-section.directive';\nimport { ScrollSpyItemDirective } from './scroll-spy-item/scroll-spy-item.directive';\nimport { ScrollSpyService } from './scroll-spy-service/scroll-spy.service';\nimport { InViewportDirective } from '@ynmstudio/utils/inviewport';\n\n/**\n * A simple lightweight library for Angular which automatically\n * updates links to indicate the currently active section in the viewport\n *\n */\n@NgModule({\n imports: [InViewportDirective, ScrollSpySectionDirective, ScrollSpyDirective, ScrollSpyItemDirective],\n declarations: [],\n exports: [ScrollSpyDirective, ScrollSpyItemDirective, ScrollSpySectionDirective],\n})\nexport class ScrollSpyModule {\n /**\n * Specify a static method for root module to ensure providers are\n * only provided once but allows the module to still be imported\n * into other modules without reproviding services.\n *\n * @memberof ScrollSpyModule\n */\n public static forRoot(): ModuleWithProviders<ScrollSpyModule> {\n return {\n ngModule: ScrollSpyModule,\n providers: [ScrollSpyService],\n };\n }\n}\n","/*\n * Public API Surface of ngx-scrollspy\n */\n\nexport * from './lib/scroll-spy/scroll-spy.directive';\nexport * from './lib/scroll-spy-item/scroll-spy-item.directive';\nexport * from './lib/scroll-spy-section/scroll-spy-section.directive';\nexport * from './lib/scroll-spy-service/scroll-spy.service';\nexport * from './lib/shared/spy.model';\nexport * from './lib/scroll-spy.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.ScrollSpyService"],"mappings":"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"}