@cisstech/nge
Version:
NG Essentials is a collection of libraries for Angular developers.
1 lines • 61 kB
Source Map (JSON)
{"version":3,"file":"cisstech-nge-doc.mjs","sources":["../../../projects/nge/doc/src/nge-doc.ts","../../../projects/nge/doc/src/nge-doc.service.ts","../../../projects/nge/doc/src/renderer/renderer.component.ts","../../../projects/nge/doc/src/renderer/renderer.component.html","../../../projects/nge/doc/src/renderer/toc.directive.ts","../../../projects/nge/doc/src/layouts/default/footer/footer.component.ts","../../../projects/nge/doc/src/layouts/default/footer/footer.component.html","../../../projects/nge/doc/src/layouts/default/header/header.component.ts","../../../projects/nge/doc/src/layouts/default/header/header.component.html","../../../projects/nge/doc/src/layouts/default/sidenav/sidenav.component.ts","../../../projects/nge/doc/src/layouts/default/sidenav/sidenav.component.html","../../../projects/nge/doc/src/layouts/default/default-layout.component.ts","../../../projects/nge/doc/src/layouts/default/default-layout.component.html","../../../projects/nge/doc/src/nge-doc.component.ts","../../../projects/nge/doc/src/nge-doc.component.html","../../../projects/nge/doc/src/renderer/renderer.module.ts","../../../projects/nge/doc/src/layouts/default/default-layout.module.ts","../../../projects/nge/doc/src/nge-doc.module.ts","../../../projects/nge/doc/cisstech-nge-doc.ts"],"sourcesContent":["import { InjectionToken, Injector, Type } from '@angular/core'\n\nexport declare type StaticPage = NgeDocLink\nexport declare type DynamicPage = (\n injector: Injector\n) => NgeDocLink | Promise<NgeDocLink> | NgeDocLink[] | Promise<NgeDocLink[]>\n\nexport declare type StaticMeta = NgeDocMeta\nexport declare type DynamicMeta = (injector: Injector) => NgeDocMeta | Promise<NgeDocMeta>\n\nexport declare type NgeDocRenderer = string | Promise<string> | (() => Type<any> | Promise<Type<any>>)\n\nexport declare type NgeDocRenderers = {\n /** Markdown renderer. */\n markdown: {\n /**\n * Reference to a component that can render markdown content.\n *\n * The component should expose a `file` property to render a markdown from an url\n * and a `data` property to render markdown from a string.\n */\n component: () => Type<any> | Promise<Type<any>>\n /** Inputs objects to pass to the component instance. */\n inputs?: Record<string, any> | ((injector: Injector) => Record<string, any> | Promise<Record<string, any>>)\n }\n}\n\nexport declare type NgeDocLinkActionHandler = string | ((injector: Injector) => void | Promise<void>)\n\n/** Documentation site config. */\nexport interface NgeDocSettings {\n /** Metadata informations about a documentation site. */\n meta: StaticMeta | DynamicMeta\n /** Pages of the documentation site. */\n pages: (StaticPage | DynamicPage)[]\n}\n\n/** Metadata informations about a documentation site. */\nexport interface NgeDocMeta {\n /** Name of the documentation site. */\n name: string\n /** Root url of the documentation site. (absolute url starting with `/`) */\n root: string\n /** Url to the logo to the documentation logo. */\n logo?: string\n /** Optional back url (use of Angular [routerLink]) */\n backUrl?: string\n\n /** Optional url for the back button icon */\n backIconUrl?: string\n\n /** Optional back href */\n backUrlHref?: string\n\n /** Optional informations about a github repository linked to the site */\n repo?: {\n /** Url of the repository */\n url: string\n /** Name of the repository. */\n name: string\n }\n /** social links to show insides the footer */\n links?: {\n href: string\n icon: string\n }[]\n}\n\nexport interface NgeDocLinAction {\n /** Url to an icon to render. */\n icon?: string\n /** Title of the action. */\n title?: string\n /** Action tooltip */\n tooltip?: string\n /** Action handler. (A string value here means that the action is an url to open in a new tab) */\n run: NgeDocLinkActionHandler\n}\n\n/**\n * Representation of a link in the documentation navigation.\n */\nexport interface NgeDocLink {\n /** Url to display in the browser navigation bar. */\n href: string\n /** Title of the link */\n title: string\n /**\n * Content to render once the link is displayed.\n *\n * - A one line string value means that the renderer is an url to a markdown file to render.\n *\n * Remarks:\n * Not required if `children` is defined.\n *\n * Example:\n *\n * `renderer: assets/my-file.md`\n *\n * - A multiline string value means that the renderer is a markdown string to render.\n *\n * Example:\n *\n * `renderer: \"# My Title \\n my paragraph \\n ....\"\n *\n * - A reference to a Component type means that the renderer is a dynamic component to render.\n *\n * Example:\n *\n * `renderer: () => MyComponent` // direct reference to a component\n *\n * `renderer: () => import(....).then(m => m.MyComponent)` // reference to a lazy loaded component.\n *\n * - A reference to a Module type means that the renderer is a dynamic component to render.\n *\n * `renderer: () => MyModule` // direct reference to a module\n *\n * `renderer: () => import(....).then(m => m.MyModule)` // reference to a lazy loaded module.\n *\n * The difference between referencing a module and referencing a component is the following:\n * - If you reference a module the dependencies (CommonModule, SharedModule...) of the component\n * that you want to render will be resolved.\n * - If you reference a component the dependencies will not be loaded.\n *\n * If you choose to reference a module, the module must contains a public field `component` that indicates\n * the component that you want to render.\n */\n renderer?: NgeDocRenderer\n /** Sub links */\n children?: NgeDocLink[]\n /** A value indicating whether the link is expanded or not. */\n expanded?: boolean\n /** Inputs to pass to the dynamic renderered component if `renderer` is a dynamic component. */\n inputs?: Record<string, any>\n /** Optional icon */\n icon?: string\n /** Custom actions */\n actions?: NgeDocLinAction[]\n}\n\n/** Representation of the documentation state. */\nexport interface NgeDocState {\n /** Metadata informations about the documentation. */\n meta: NgeDocMeta\n /** Root links of the site. */\n links: NgeDocLink[]\n /** Current active link. */\n currLink?: NgeDocLink\n /** Previous link of the current link. */\n prevLink?: NgeDocLink\n /** Next link of the current link. */\n nextLink?: NgeDocLink\n}\n\n/** Custom renderers components */\nexport const NGE_DOC_RENDERERS = new InjectionToken<NgeDocRenderers>('NGE_DOC_RENDERERS')\n\nexport const isNgeDocSettings = (v: any): v is NgeDocSettings =>\n !!v && typeof v === 'object' && !Array.isArray(v) && !!v.meta && !!v.pages\n\nexport const extractNgeDocSettings = (v: any): NgeDocSettings[] => {\n let settings: NgeDocSettings[] = []\n\n if (isNgeDocSettings(v)) {\n settings.push(v)\n } else if (typeof v === 'object') {\n settings.push(\n ...Object.values(v)\n .map((v) => extractNgeDocSettings(v))\n .flat()\n )\n }\n\n return settings\n}\n","import { Location } from '@angular/common'\nimport { Injectable, Injector, OnDestroy } from '@angular/core'\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router'\nimport { BehaviorSubject, Subscription } from 'rxjs'\nimport { filter } from 'rxjs/operators'\nimport { NgeDocLink, NgeDocMeta, NgeDocState, extractNgeDocSettings } from './nge-doc'\n\n@Injectable()\nexport class NgeDocService implements OnDestroy {\n private readonly state = new BehaviorSubject<NgeDocState>({\n meta: {\n root: '',\n name: '',\n },\n links: [],\n prevLink: undefined,\n nextLink: undefined,\n currLink: undefined,\n })\n\n private readonly pages = new Map<\n string,\n {\n meta: NgeDocMeta\n links: NgeDocLink[]\n }\n >()\n\n private readonly links: NgeDocLink[] = []\n\n private readonly subscriptions: Subscription[] = []\n\n /** documentation state */\n get stateChanges() {\n return this.state.pipe(filter((state) => !!state.currLink))\n }\n\n constructor(\n private readonly router: Router,\n private readonly injector: Injector,\n private readonly location: Location,\n private readonly activatedRoute: ActivatedRoute\n ) {}\n\n ngOnDestroy(): void {\n this.reset()\n }\n\n /**\n * Loads navigation from the router configuration.\n */\n async setup(): Promise<void> {\n this.reset()\n\n const { data } = this.activatedRoute.snapshot\n const settings = extractNgeDocSettings(data)\n\n for (const setting of settings) {\n const links: NgeDocLink[] = []\n\n let meta: NgeDocMeta | undefined\n if (typeof setting.meta === 'function') {\n meta = await setting.meta(this.injector)\n } else {\n meta = setting.meta\n }\n\n if (!meta) {\n throw new Error('[nge-doc]: Missing setting.meta')\n }\n\n for (const item of setting.pages) {\n const pages: NgeDocLink[] = []\n\n let object: any\n if (typeof item === 'function') {\n object = await item(this.injector)\n } else {\n object = item\n }\n\n if (Array.isArray(object)) {\n pages.push(...object)\n } else {\n pages.push(object)\n }\n\n pages.forEach((page) => {\n links.push(page)\n this.resolvePageLinks(meta!, page)\n })\n\n this.pages.set(meta.root, {\n meta,\n links: links,\n })\n }\n }\n\n this.subscriptions.push(\n this.router.events.pipe(filter((e) => e instanceof NavigationEnd)).subscribe(this.onChangeRoute.bind(this))\n )\n\n this.onChangeRoute()\n }\n\n /**\n * Checks whether the given `link` is active.\n * @param link The link to test.\n */\n isActive(link: NgeDocLink): boolean {\n const tree = this.location.path().split('/')\n for (let i = 0; i < tree.length; i++) {\n const path = tree.slice(0, tree.length - i).join('/')\n if (path && path.endsWith(link.href)) {\n return true\n }\n }\n return false\n }\n\n /**\n * Checks whether the given `link` includes sub links.\n * @param link The link to test.\n */\n isExpandable(link: NgeDocLink): boolean {\n return !!link.children?.length\n }\n\n private join(a: string, b: string): string {\n if (a.endsWith('/')) {\n a = a.slice(0, a.length - 1)\n }\n if (b.startsWith('/')) {\n b = b.slice(1)\n }\n return a + '/' + b\n }\n\n private resolvePageLinks(meta: NgeDocMeta, page: NgeDocLink) {\n const createLink = (link: NgeDocLink, parent: string) => {\n link.href = this.join(parent, link.href)\n this.links.push(link)\n link.children?.forEach((child) => {\n createLink(child, link.href)\n })\n }\n createLink(page, meta.root)\n }\n\n private async onChangeRoute(): Promise<void> {\n if (!this.pages.size) {\n return\n }\n\n const path = this.location.path()\n const paths = [path, path + '/']\n\n let meta: NgeDocMeta | undefined\n let links: NgeDocLink[] = []\n\n for (const [k, v] of this.pages) {\n if (paths.some((path) => path.includes(k))) {\n meta = v.meta\n links = v.links\n break\n }\n }\n\n if (!meta) {\n throw new Error('[nge-doc]: Unregisted page ' + path)\n }\n\n let { currLink, prevLink, nextLink } = this.state.value\n\n // ignore same page navigation (fragment navigation)\n if (currLink && paths.some((p) => p.endsWith(currLink!.href))) {\n return\n }\n\n // calculate current, previous and next links\n\n // https://stackoverflow.com/questions/4467539/javascript-modulo-gives-a-negative-result-for-negative-numbers\n const modulo = (a: number, n: number) => {\n return ((a % n) + n) % n\n }\n\n for (let i = 0; i < this.links.length; i++) {\n const link = this.links[i]\n if (paths.some((path) => path.endsWith(link.href))) {\n const prevIndex = modulo(i - 1, this.links.length)\n const nextIndex = modulo(i + 1, this.links.length)\n currLink = link\n nextLink = this.links[nextIndex]\n prevLink = this.links[prevIndex]\n break\n }\n }\n\n // navigate to first page if currLink is not defined\n if (!currLink) {\n this.router.navigateByUrl(links[0].href, {\n replaceUrl: true,\n })\n return\n }\n\n // navigate to first children if currLink doesn't have a renderer\n if (!currLink.renderer && currLink.children?.length) {\n this.router.navigateByUrl(currLink.children[0].href, {\n replaceUrl: true,\n })\n return\n }\n\n // expand visible links\n\n this.links.forEach((link) => {\n if (paths.some((path) => path.endsWith(link.href))) {\n link.expanded = true\n }\n })\n\n // notify state change\n\n this.state.next({\n meta,\n links,\n prevLink,\n currLink,\n nextLink,\n })\n }\n\n private reset(): void {\n this.subscriptions.forEach((s) => s.unsubscribe())\n this.subscriptions.splice(0, this.subscriptions.length)\n this.pages.clear()\n this.links.splice(0, this.links.length)\n }\n}\n","import { HttpClient } from '@angular/common/http'\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n Injector,\n OnDestroy,\n OnInit,\n SimpleChanges,\n Type,\n ViewChild,\n ViewContainerRef,\n inject,\n} from '@angular/core'\nimport { CompilerService } from '@cisstech/nge/services'\nimport { Subscription, firstValueFrom } from 'rxjs'\nimport { NGE_DOC_RENDERERS, NgeDocState } from '../nge-doc'\nimport { NgeDocService } from '../nge-doc.service'\n\n@Component({\n selector: 'nge-doc-renderer',\n templateUrl: 'renderer.component.html',\n styleUrls: ['renderer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgeDocRendererComponent implements OnInit, OnDestroy {\n private readonly injector = inject(Injector)\n private readonly renderers = inject(NGE_DOC_RENDERERS)\n private readonly docService = inject(NgeDocService)\n private readonly compilerService = inject(CompilerService)\n private readonly changeDetectorRef = inject(ChangeDetectorRef)\n\n private subscriptions: Subscription[] = []\n protected loading = false\n protected noFound = false\n protected componentRefByTypes = new Map<Type<any>, ComponentRef<any>>()\n\n componentRef?: ComponentRef<any>\n\n @ViewChild('container', { read: ViewContainerRef, static: true })\n container!: ViewContainerRef\n\n ngOnInit(): void {\n this.subscriptions.push(this.docService.stateChanges.subscribe(this.onChangeState.bind(this)))\n }\n\n ngOnDestroy(): void {\n this.clearViewContainer()\n this.subscriptions.forEach((s) => s.unsubscribe())\n }\n\n private showLoading(): void {\n this.loading = true\n\n // if loading is still true after 1s then we force change detection\n // This is useful to show the loading indicator only if the loading is not too fast\n // so that the loading indicator does not blink.\n setTimeout(() => {\n if (this.loading) {\n this.changeDetectorRef.markForCheck()\n }\n }, 1000)\n }\n\n private clearViewContainer(): void {\n const componentRefs = Array.from(this.componentRefByTypes.values())\n if (this.componentRef && componentRefs.includes(this.componentRef)) {\n while (this.container.length > 0) {\n this.container.detach()\n }\n } else {\n this.componentRef?.destroy()\n this.componentRef = undefined\n this.container.clear()\n }\n }\n\n private async onChangeState(state: NgeDocState): Promise<void> {\n try {\n this.showLoading()\n this.clearViewContainer()\n\n if (state.currLink) {\n const renderer = await state.currLink.renderer\n switch (typeof renderer) {\n case 'string':\n await this.renderMarkdown(renderer)\n break\n case 'function':\n this.componentRef = await this.compilerService.render({\n type: await renderer(),\n inputs: state.currLink.inputs,\n container: this.container,\n })\n break\n }\n }\n } catch (error) {\n console.error(error)\n } finally {\n this.loading = false\n this.noFound = !this.componentRef\n this.changeDetectorRef.markForCheck()\n }\n }\n\n private async renderMarkdown(data: string): Promise<void> {\n if (!this.renderers?.markdown) {\n throw new Error('[nge-doc]: missing markdown renderer.')\n }\n\n const renderer = this.renderers.markdown\n const type = await renderer.component()\n\n const createInputs = async (): Promise<Record<string, any>> => {\n let inputs: Record<string, any> = {\n data, // we assume that data is a markdown content.\n }\n\n if (!data.includes('\\n')) {\n // if data does not include at least two lines then it's an url\n const http = this.injector.get(HttpClient, null)\n if (!http) {\n throw new Error(\n '[nge-doc] When using the `file` renderer you *have to* pass the `HttpClient` as a parameter of the `forRoot` method. See README for more information'\n )\n }\n\n inputs = {\n data: await firstValueFrom(http.get(data, { responseType: 'text' })),\n }\n }\n\n let customInputs: Record<string, any> = {}\n if (typeof renderer.inputs === 'function') {\n customInputs = await renderer.inputs(this.injector)\n } else if (typeof renderer.inputs === 'object') {\n customInputs = renderer.inputs\n }\n\n return { ...customInputs, ...inputs }\n }\n\n const markdownComponent = this.componentRefByTypes.get(type)\n if (markdownComponent) {\n this.attachComponent(markdownComponent, await createInputs())\n return\n }\n\n const componentRef = await this.compilerService.render({\n type,\n inputs: await createInputs(),\n container: this.container,\n })\n\n this.componentRef = componentRef\n this.componentRefByTypes.set(type, componentRef)\n }\n\n private async attachComponent(componentRef: ComponentRef<any>, inputs: Record<string, any>): Promise<void> {\n this.container.insert(componentRef.hostView)\n this.componentRef = componentRef\n\n // compute changes\n const changes: SimpleChanges = {}\n const { instance, changeDetectorRef } = componentRef\n Object.keys(inputs).forEach((key) => {\n changes[key] = {\n currentValue: inputs[key],\n previousValue: instance[key],\n firstChange: false,\n isFirstChange: () => false,\n }\n instance[key] = inputs[key]\n })\n\n // call ngOnChanges\n if (instance.ngOnChanges) {\n await instance.ngOnChanges(changes)\n }\n\n changeDetectorRef.markForCheck()\n }\n}\n","<div class=\"loading-container\" *ngIf=\"loading\">\n <div class=\"loading-spinner\"></div>\n <div class=\"loading-text\">Loading...</div>\n</div>\n<div *ngIf=\"noFound\">\n <h1>Ooops!</h1>\n <hr />\n <p>It looks like this page doesn't exist.</p>\n</div>\n<div #container></div>\n","import { Location } from '@angular/common'\nimport { ComponentRef, Directive, ElementRef, Input, OnChanges, OnDestroy } from '@angular/core'\nimport { ActivatedRoute, Router, Scroll } from '@angular/router'\nimport { Subscription } from 'rxjs'\n\n@Directive({ selector: '[ngeDocToc]' })\nexport class NgeDocTocDirective implements OnDestroy, OnChanges {\n private readonly subscriptions: Subscription[] = []\n private readonly observer = new MutationObserver(() => {\n this.observer?.disconnect()\n this.build()\n })\n\n private intersection?: IntersectionObserver\n private anchors: HTMLElement[] = []\n\n @Input('ngeDocToc')\n component?: ComponentRef<any>\n\n constructor(\n private readonly router: Router,\n private readonly location: Location,\n private readonly elementRef: ElementRef<HTMLElement>,\n private readonly activatedRoute: ActivatedRoute\n ) {\n this.subscriptions.push(\n this.router.events.subscribe((event) => {\n if (event instanceof Scroll && event.anchor) {\n this.scroll(event.anchor)\n }\n })\n )\n }\n\n ngOnDestroy(): void {\n this.intersection?.disconnect()\n this.subscriptions.forEach((s) => s.unsubscribe())\n }\n\n ngOnChanges(): void {\n this.build()\n }\n\n private build(): void {\n this.clear()\n\n if (!this.component) {\n return\n }\n\n const componentNode = this.component.injector.get(ElementRef).nativeElement as HTMLElement\n\n const tocContainer = this.elementRef.nativeElement\n\n const h2Nodes = Array.from(componentNode.children).filter((node) => {\n return node.tagName === 'H2' && node.parentNode?.isSameNode(componentNode)\n })\n\n this.detectIntersection()\n\n const ul = document.createElement('ul')\n h2Nodes.forEach((h2) => {\n const id = this.dashify(h2.textContent || '')\n const target = document.createElement('span')\n target.id = id\n h2.insertAdjacentElement('afterend', target)\n\n const li = document.createElement('li')\n const anchor = document.createElement('a')\n anchor.innerHTML = h2.innerHTML\n // .substring(1) will remove the leading / (prevent errors when baseHref is defined in index.html)\n anchor.href = this.location.path().substring(1) + '#' + id\n\n li.appendChild(anchor)\n ul.appendChild(li)\n\n h2.setAttribute('data-toc-id', id)\n li.setAttribute('data-toc-id', id)\n\n this.anchors.push(li)\n\n this.intersection?.observe(h2)\n })\n\n tocContainer.appendChild(ul)\n\n const { fragment } = this.activatedRoute.snapshot\n if (fragment) {\n this.scroll(fragment)\n }\n\n this.observer.observe(componentNode, {\n childList: true,\n subtree: true,\n })\n }\n\n private dashify(input: string): string {\n return input\n .trim()\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/\\W/g, (m) => (/[À-ž]/.test(m) ? m : '-'))\n .replace(/^-+|-+$/g, '')\n .replace(/-{2,}/g, (m) => '-') // Condense multiple consecutive dashes to one.\n .toLowerCase()\n }\n\n private detectIntersection(): void {\n const tocContainer = this.elementRef.nativeElement\n const rect = tocContainer.getBoundingClientRect()\n const bottom = -window.innerHeight + rect.y + 200\n\n this.intersection?.disconnect()\n this.intersection = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n this.anchors.forEach((anchor) => {\n anchor.classList.remove('active')\n const a = anchor.getAttribute('data-toc-id')\n const b = entry.target.getAttribute('data-toc-id')\n if (a === b) {\n anchor.classList.add('active')\n }\n })\n }\n })\n },\n {\n // A BOX OF 200px STARTING AT THE POSITION OF THE TOC ELEMENT\n rootMargin: `0px 0px ${bottom}px 0px`,\n }\n )\n }\n\n private clear(): void {\n const tocContainer = this.elementRef.nativeElement\n tocContainer.innerHTML = ''\n this.observer.disconnect()\n this.intersection?.disconnect()\n this.anchors = []\n }\n\n private scroll(query: string): void {\n const targetElement = document.querySelector(`h2[data-toc-id=\"${query}\"]`)\n if (!targetElement) {\n window.scrollTo(0, 0)\n } else if (!this.isInViewport(targetElement)) {\n targetElement.scrollIntoView()\n }\n }\n\n private isInViewport(elem: any): boolean {\n const bounding = elem.getBoundingClientRect()\n return (\n bounding.top >= 0 &&\n bounding.left >= 0 &&\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n bounding.right <= (window.innerWidth || document.documentElement.clientWidth)\n )\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\nimport { NgeDocService } from '../../../nge-doc.service'\n\n@Component({\n selector: 'nge-doc-footer',\n templateUrl: './footer.component.html',\n styleUrls: ['./footer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FooterComponent {\n readonly state$ = this.docService.stateChanges\n\n constructor(private readonly docService: NgeDocService) {}\n}\n","<footer *ngIf=\"state$|async as state\">\n <div>\n <ng-container *ngIf=\"state.prevLink\">\n <a class=\"icon-button\" [routerLink]=\"state.prevLink.href\">\n <img src=\"https://icongr.am/octicons/chevron-left.svg?size=36&color=FFFFFF\" alt=\"Previous page\">\n {{ state.prevLink.title }}\n </a>\n </ng-container>\n <div class=\"spacer\"></div>\n <ng-container *ngIf=\"state.nextLink\">\n <a class=\"icon-button\" [routerLink]=\"state.nextLink.href\">\n {{ state.nextLink.title }}\n <img src=\"https://icongr.am/octicons/chevron-right.svg?size=36&color=FFFFFF\" alt=\"Next page\">\n </a>\n </ng-container>\n </div>\n <div>\n <div class=\"powered-by\">\n Powered by\n <a href=\"https://cisstech.github.io/nge/docs/nge-doc/\" target=\"_blank\">Ngedoc</a>\n </div>\n <div class=\"spacer\"></div>\n <ng-container *ngIf=\"state.meta.links\">\n <ng-container *ngFor=\"let item of state.meta.links\">\n <a class=\"icon-button\" [href]=\"item.href\" target=\"_blank\">\n <img [src]=\"item.icon\">\n </a>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"state.meta.repo\">\n <a class=\"icon-button\" [href]=\"state.meta.repo.url\" target=\"_blank\" title=\"GitHub's repository\">\n <img src=\"https://icongr.am/octicons/mark-github.svg?size=24&color=FFFFFF\" >\n </a>\n </ng-container>\n </div>\n</footer>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Injector, Output } from '@angular/core'\nimport { NgeDocLinkActionHandler } from '../../../nge-doc'\nimport { NgeDocService } from '../../../nge-doc.service'\n\n@Component({\n selector: 'nge-doc-header',\n templateUrl: './header.component.html',\n styleUrls: ['./header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderComponent {\n @Output() toggle = new EventEmitter()\n state$ = this.docService.stateChanges\n\n constructor(\n readonly injector: Injector,\n readonly docService: NgeDocService\n ) {}\n\n async invoke(handler: NgeDocLinkActionHandler) {\n if (typeof handler === 'string') {\n window.open(handler, '_blank')\n } else {\n await handler(this.injector)\n }\n }\n}\n","<header *ngIf=\"state$|async as state\">\n <div class=\"action\" aria-label=\"Menu\" (click)=\"toggle.emit()\">\n <img src=\"https://icongr.am/octicons/three-bars.svg?size=24&color=currentColor\">\n </div>\n <ng-container *ngIf=\"state.meta.backUrl\">\n <a class=\"action\" aria-label=\"Back\" [routerLink]=\"state.meta.backUrl\">\n <img [src]=\"state.meta.backIconUrl ?? 'https://icongr.am/octicons/home.svg?size=24&color=currentColor'\">\n </a>\n </ng-container>\n <ng-container *ngIf=\"state.meta.backUrlHref\">\n <a class=\"action\" aria-label=\"Back\" [href]=\"state.meta.backUrlHref\">\n <img [src]=\"state.meta.backIconUrl ?? 'https://icongr.am/octicons/home.svg?size=24&color=currentColor'\">\n </a>\n </ng-container>\n <div class=\"spacer\"></div>\n <ng-container *ngIf=\"state.currLink?.actions\">\n <ng-container *ngFor=\"let action of state.currLink?.actions || []\">\n <div class=\"action\" [attr.aria-label]=\"action.title\" [title]=\"action.tooltip\" (click)=\"invoke(action.run)\">\n <ng-container *ngIf=\"action.title\">\n <span>{{action.title}}</span>\n </ng-container>\n <ng-container *ngIf=\"action.icon\">\n <img [src]=\"action.icon\">\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n</header>\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\nimport { NgeDocLink } from '../../../nge-doc'\nimport { NgeDocService } from '../../../nge-doc.service'\n\n@Component({\n selector: 'nge-doc-sidenav',\n templateUrl: './sidenav.component.html',\n styleUrls: ['./sidenav.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SidenavComponent {\n state$ = this.docService.stateChanges\n\n constructor(readonly docService: NgeDocService) {}\n\n trackBy(_: number, item: NgeDocLink) {\n return item.href\n }\n}\n","<ng-container *ngIf=\"state$|async as state\">\n <header>\n <ng-container *ngIf=\"state.meta.logo; else: nologo\">\n <img [src]=\"state.meta.logo\" alt=\"Documentation Logo\">\n </ng-container>\n <ng-template #nologo>\n <img src=\"https://icongr.am/octicons/book.svg?size=48&color=34495e\">\n </ng-template>\n <h1>{{ state.meta.name }}</h1>\n </header>\n <nav *ngIf=\"state.links.length\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: state.links }\"></ng-container>\n </nav>\n</ng-container>\n<ng-template #template let-links>\n <ul>\n <ng-container *ngFor=\"let link of links; trackBy: trackBy\">\n <li [class.caption]=\"docService.isExpandable(link)\">\n <a [routerLink]=\"link.href\" [class.active]=\"docService.isActive(link)\">\n <img *ngIf=\"link.icon\" [src]=\"link.icon\">\n {{ link.title }}\n </a>\n </li>\n <ng-container *ngIf=\"docService.isExpandable(link)\">\n <ng-container\n *ngTemplateOutlet=\"template; context: { $implicit: link.children }\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout'\nimport { Subscription } from 'rxjs'\nimport { ChangeDetectorRef } from '@angular/core'\n\n@Component({\n selector: 'nge-doc-default-layout',\n templateUrl: './default-layout.component.html',\n styleUrls: ['./default-layout.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DefaultLayoutComponent implements OnInit, OnDestroy {\n private subscription?: Subscription\n sidebarOpened = true\n showTableOfContents = true\n\n constructor(\n private readonly observer: BreakpointObserver,\n private readonly changeDetectorRef: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.observer.observe([Breakpoints.XSmall, Breakpoints.Small]).subscribe((result) => {\n this.sidebarOpened = true\n this.showTableOfContents = true\n if (result.matches) {\n this.sidebarOpened = false\n this.showTableOfContents = false\n }\n this.changeDetectorRef.markForCheck()\n })\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe()\n }\n}\n","<main>\n <aside class=\"sidebar\" [class.opened]=\"sidebarOpened\">\n <nge-doc-sidenav />\n </aside>\n <section>\n <nge-doc-header (toggle)=\"sidebarOpened = !sidebarOpened\" />\n <article>\n <nge-doc-renderer #renderer />\n <aside\n *ngIf=\"showTableOfContents\"\n [ngeDocToc]=\"renderer.componentRef\">\n </aside>\n </article>\n </section>\n</main>\n<nge-doc-footer />\n","import { Component, OnInit } from '@angular/core'\nimport { NgeDocService } from './nge-doc.service'\n\n@Component({\n selector: 'nge-doc',\n templateUrl: './nge-doc.component.html',\n providers: [NgeDocService],\n styleUrls: ['nge-doc.component.scss'],\n})\nexport class NgeDocComponent implements OnInit {\n constructor(private readonly docService: NgeDocService) {}\n\n async ngOnInit() {\n await this.docService.setup()\n }\n}\n","<nge-doc-default-layout />\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { NgeDocRendererComponent } from './renderer.component'\nimport { NgeDocTocDirective } from './toc.directive'\n\nconst declarations = [NgeDocRendererComponent, NgeDocTocDirective]\n\n@NgModule({\n imports: [CommonModule],\n exports: declarations,\n declarations,\n})\nexport class NgeDocRendererModule {}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { RouterModule } from '@angular/router'\n\nimport { NgeDocRendererModule } from '../../renderer/renderer.module'\n\nimport { FooterComponent } from './footer/footer.component'\nimport { HeaderComponent } from './header/header.component'\nimport { SidenavComponent } from './sidenav/sidenav.component'\nimport { DefaultLayoutComponent } from './default-layout.component'\n\n@NgModule({\n declarations: [FooterComponent, HeaderComponent, SidenavComponent, DefaultLayoutComponent],\n exports: [DefaultLayoutComponent],\n imports: [CommonModule, RouterModule, NgeDocRendererModule],\n})\nexport class DefaultLayoutModule {}\n","// ANGULAR\nimport { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { RouterModule } from '@angular/router'\n\n// MODULE\nimport { NgeDocComponent } from './nge-doc.component'\nimport { DefaultLayoutModule } from './layouts/default/default-layout.module'\n\n@NgModule({\n declarations: [NgeDocComponent],\n imports: [\n CommonModule,\n RouterModule.forChild([{ path: '**', pathMatch: 'full', component: NgeDocComponent }]),\n DefaultLayoutModule,\n ],\n})\nexport class NgeDocModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.NgeDocService","i3","i3.NgeDocRendererComponent","i4.NgeDocTocDirective","i5.FooterComponent","i6.HeaderComponent","i7.SidenavComponent","i2.DefaultLayoutComponent"],"mappings":"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"}