@mathstack/app-kit 1.1.1 → 1.1.2

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/README.md CHANGED
@@ -5,26 +5,25 @@ This library was generated with [Angular CLI](https://github.com/angular/angular
5
5
 
6
6
  ## Code scaffolding
7
7
 
8
- Run `ng generate component component-name --project app-dev-kit` to generate a new component. You
9
- can also use
10
- `ng generate directive|pipe|service|class|guard|interface|enum|module --project app-dev-kit`.
8
+ Run `ng generate component component-name --project app-kit` to generate a new component. You can
9
+ also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project app-kit`.
11
10
 
12
- > Note: Don't forget to add `--project app-dev-kit` or else it will be added to the default project
13
- > in your `angular.json` file.
11
+ > Note: Don't forget to add `--project app-kit` or else it will be added to the default project in
12
+ > your `angular.json` file.
14
13
 
15
14
  ## Build
16
15
 
17
- Run `ng build app-dev-kit` to build the project. The build artifacts will be stored in the `dist`
16
+ Run `ng build app-kit` to build the project. The build artifacts will be stored in the `dist`
18
17
  directory.
19
18
 
20
19
  ## Publishing
21
20
 
22
- After building your library with `ng build app-dev-kit`, go to the dist folder `cd dist/app-dev-kit`
23
- and run `npm publish`.
21
+ After building your library with `ng build app-kit`, go to the dist folder `cd dist/app-kit` and run
22
+ `npm publish`.
24
23
 
25
24
  ## Running unit tests
26
25
 
27
- Run `ng test app-dev-kit` to execute the unit tests via [Karma](https://karma-runner.github.io).
26
+ Run `ng test app-kit` to execute the unit tests via [Karma](https://karma-runner.github.io).
28
27
 
29
28
  ## Further help
30
29
 
@@ -533,8 +533,8 @@ class AdkDocumentationConfigParser {
533
533
  *
534
534
  * This assumes that the pathFromApp matches a path through the keys of the Nested Object.
535
535
  *
536
- * If the path is 'viz-components/content/items/bars', the config object might look like this:
537
- * viz-components: {
536
+ * If the path is 'viz/content/items/bars', the config object might look like this:
537
+ * viz: {
538
538
  * content: {
539
539
  * items: {
540
540
  * bars: 'bars.md'
@@ -542,7 +542,7 @@ class AdkDocumentationConfigParser {
542
542
  * }
543
543
  * }
544
544
  *
545
- * @param pathFromApp a string representing the path from the application, for example 'viz-components/content/items/bars'
545
+ * @param pathFromApp a string representing the path from the application, for example 'viz/content/items/bars'
546
546
  * @param config a nested object representing the configuration
547
547
  * @returns a string representing the file path
548
548
  */
@@ -554,7 +554,7 @@ class AdkDocumentationConfigParser {
554
554
  }
555
555
  /**
556
556
  *
557
- * @param pathParts a string array of path parts, for example ['viz-components', 'content', 'items', 'bars]
557
+ * @param pathParts a string array of path parts, for example ['viz', 'content', 'items', 'bars]
558
558
  * @param config a nested object representing the configuration
559
559
  * @returns a string representing the file name
560
560
  */
@@ -1 +1 @@
1
- {"version":3,"file":"mathstack-app-kit.mjs","sources":["../../../libs/app-dev-kit/src/lib/assets/assets-resource.ts","../../../libs/app-dev-kit/src/lib/assets/assets-service.ts","../../../libs/app-dev-kit/src/lib/core/utilities/deep-merge.ts","../../../libs/app-dev-kit/src/lib/content-parsing/shiki-highlighter.ts","../../../libs/app-dev-kit/src/lib/content-parsing/markdown-parser.ts","../../../libs/app-dev-kit/src/lib/core/utilities/safe-assign.ts","../../../libs/app-dev-kit/src/lib/documentation-display/active-heading-tracker.ts","../../../libs/app-dev-kit/src/lib/documentation-display/document-index/document-index.component.ts","../../../libs/app-dev-kit/src/lib/documentation-display/document-index/document-index.component.html","../../../libs/app-dev-kit/src/lib/documentation-display/documentation-config-parser.ts","../../../libs/app-dev-kit/src/lib/documentation-display/documentation-content-service.ts","../../../libs/app-dev-kit/src/lib/documentation-display/navigation-siblings/navigation-siblings.component.ts","../../../libs/app-dev-kit/src/lib/documentation-display/navigation-siblings/navigation-siblings.component.html","../../../libs/app-dev-kit/src/lib/documentation-display/documentation-display.component.ts","../../../libs/app-dev-kit/src/lib/documentation-display/documentation-display.component.html","../../../libs/app-dev-kit/src/lib/ng-utilities/ng-on-changes.ts","../../../libs/app-dev-kit/src/lib/ng-utilities/run-ng-change-detection-then.ts","../../../libs/app-dev-kit/src/public-api.ts","../../../libs/app-dev-kit/src/mathstack-app-kit.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { AdkAssetResponse } from './assets-service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AdkAssetsResource {\n constructor(private http: HttpClient) {}\n\n getAsset(path: string, responseType: AdkAssetResponse): Observable<unknown> {\n return this.http.get<unknown>(path, {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n responseType: responseType as any,\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { csvParse } from 'd3';\nimport { Observable, forkJoin } from 'rxjs';\nimport { parse as yamlParse } from 'yaml';\nimport { AdkAssetsResource } from './assets-resource';\n\nexport enum AdkAssetResponse {\n ArrayBuffer = 'arraybuffer',\n Blob = 'blob',\n Json = 'json',\n Text = 'text',\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AdkAssetsService {\n private assets: { [key: string]: Observable<unknown> } = {};\n private assetsPath = 'assets/';\n\n constructor(private resource: AdkAssetsResource) {}\n\n setAssetsPath(path: string): void {\n this.assetsPath = path;\n }\n\n /**\n * Loads an asset from the assets folder.\n *\n * @param assetName The path to the asset from assets/. Should not include leading slash.\n * @returns An observable that emits the asset data.\n */\n getAsset(\n assetName: string,\n responseType: AdkAssetResponse\n ): Observable<unknown> {\n if (!this.assets[assetName]) {\n this.assets[assetName] = this.fetchAsset(assetName, responseType);\n }\n return this.assets[assetName];\n }\n\n private fetchAsset(\n assetName: string,\n responseType: AdkAssetResponse\n ): Observable<unknown> {\n return this.resource.getAsset(\n `${this.assetsPath}${assetName}`,\n responseType\n );\n }\n\n /**\n * Loads multiple assets concurrently.\n *\n * @param assetNames An array of asset names to load.\n * @returns An observable that emits an array of asset data.\n */\n getAssets(\n assetNames: string[],\n responseType: AdkAssetResponse\n ): Observable<unknown[]> {\n return forkJoin(\n assetNames.map((assetName) => this.getAsset(assetName, responseType))\n );\n }\n\n parseCsv<T>(str: string): T[] {\n return csvParse(str) as unknown as T[];\n }\n\n parseYaml<T>(str: string): T {\n return yamlParse(str) as T;\n }\n}\n","export function deepMerge<T>(target: T, source: Partial<T>): T {\n const output = Object.assign({}, target);\n if (isObject(target) && isObject(source)) {\n Object.keys(source).forEach((key) => {\n if (isObject(source[key])) {\n if (!(key in (target as object))) {\n Object.assign(output, { [key]: source[key] });\n } else {\n output[key] = deepMerge(target[key], source[key]);\n }\n } else {\n Object.assign(output, { [key]: source[key] });\n }\n });\n }\n return output;\n}\n\nfunction isObject(item: unknown): item is object {\n return item && typeof item === 'object' && !Array.isArray(item);\n}\n","import { Injectable } from '@angular/core';\nimport { Root } from 'hast';\nimport { fromParse5 } from 'hast-util-from-parse5';\nimport { parse } from 'parse5';\nimport { createHighlighter } from 'shiki/index.mjs';\nimport { BundledLanguage } from 'shiki/langs';\nimport { BundledTheme } from 'shiki/themes';\nimport { HighlighterGeneric } from 'shiki/types.mjs';\nimport { visit } from 'unist-util-visit';\nimport { AdkShikiHighlighterOptions } from './markdown-parser';\n\nexport const defaultHighlighterLangs = [\n 'json',\n 'ts',\n 'js',\n 'html',\n 'css',\n 'scss',\n 'yaml',\n 'angular-html',\n 'angular-ts',\n 'mermaid',\n 'bash',\n];\n\nexport enum ShikiTheme {\n Andromeeda = 'andromeeda',\n AuroraX = 'aurora-x',\n AyuDark = 'ayu-dark',\n CatppuccinFrappe = 'catppuccin-frappe',\n CatppuccinLatte = 'catppuccin-latte',\n CatppuccinMacchiato = 'catppuccin-macchiato',\n CatppuccinMocha = 'catppuccin-mocha',\n DarkPlus = 'dark-plus',\n DraculaTheme = 'dracula',\n DraculaThemeSoft = 'dracula-soft',\n EverforestDark = 'everforest-dark',\n EverforestLight = 'everforest-light',\n GitHubDark = 'github-dark',\n GitHubDarkDefault = 'github-dark-default',\n GitHubDarkDimmed = 'github-dark-dimmed',\n GitHubDarkHighContrast = 'github-dark-high-contrast',\n GitHubLight = 'github-light',\n GitHubLightDefault = 'github-light-default',\n GitHubLightHighContrast = 'github-light-high-contrast',\n Houston = 'houston',\n LaserWave = 'laserwave',\n LightPlus = 'light-plus',\n MaterialTheme = 'material-theme',\n MaterialThemeDarker = 'material-theme-darker',\n MaterialThemeLighter = 'material-theme-lighter',\n MaterialThemeOcean = 'material-theme-ocean',\n MaterialThemePalenight = 'material-theme-palenight',\n MinDark = 'min-dark',\n MinLight = 'min-light',\n Monokai = 'monokai',\n NightOwl = 'night-owl',\n Nord = 'nord',\n OneDarkPro = 'one-dark-pro',\n OneLight = 'one-light',\n Plastic = 'plastic',\n Poimandres = 'poimandres',\n Red = 'red',\n RosePine = 'rose-pine',\n RosePineDawn = 'rose-pine-dawn',\n RosePineMoon = 'rose-pine-moon',\n SlackDark = 'slack-dark',\n SlackOchin = 'slack-ochin',\n SnazzyLight = 'snazzy-light',\n SolarizedDark = 'solarized-dark',\n SolarizedLight = 'solarized-light',\n Synthwave84 = 'synthwave-84',\n TokyoNight = 'tokyo-night',\n Vesper = 'vesper',\n VitesseBlack = 'vitesse-black',\n VitesseDark = 'vitesse-dark',\n VitesseLight = 'vitesse-light',\n}\n\nconst MISSING_HIGHLIGHTER = `Please provide a \\`shiki\\` highlighter instance via \\`options\\`.`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AdkShikiHighlighter {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private highlighterPromise: Promise<\n HighlighterGeneric<BundledLanguage, BundledTheme>\n > | null = null;\n\n /**\n * Initialize the highlighter. This should only be called one in an application.\n *\n * @param themes an array of any Shiki themes you may want to use anywhere in the app. You can control which theme for your particular parsing by passing the theme name to the actual parsing function.\n *\n * @returns void\n */\n async initialize(\n themes: ShikiTheme[],\n langs: string[] = defaultHighlighterLangs\n ): Promise<void> {\n if (!this.highlighterPromise) {\n this.highlighterPromise = createHighlighter({\n langs,\n themes: themes.length ? themes : [ShikiTheme.GitHubLight],\n });\n }\n await this.highlighterPromise;\n }\n\n async getHighlighter(): Promise<\n HighlighterGeneric<BundledLanguage, BundledTheme>\n > {\n if (!this.highlighterPromise) {\n throw new Error(\n 'Highlighter is not initialized. Please call initialize() once in your application first.'\n );\n }\n return this.highlighterPromise;\n }\n\n remarkHighlight(options: AdkShikiHighlighterOptions): (tree: Root) => void {\n const highlighter = options.highlighter;\n if (!options.highlighter) {\n throw new Error(MISSING_HIGHLIGHTER);\n }\n const loadedLanguages = highlighter.getLoadedLanguages();\n const ignoreUnknownLanguage =\n options.ignoreUnknownLanguage === undefined\n ? true\n : options.ignoreUnknownLanguage;\n\n const visitor = (node) => {\n if (!loadedLanguages.includes(node.lang)) {\n if (ignoreUnknownLanguage) {\n node.lang = null;\n } else {\n return;\n }\n }\n\n const highlighted = highlighter.codeToHtml(node.value, {\n lang: node.lang,\n theme: options.theme,\n });\n\n node.type = 'html';\n node.value = highlighted;\n };\n\n const transformer = (tree: Root) => {\n visit(tree, 'code', visitor);\n };\n\n return transformer;\n }\n\n rehypeHighlight(options: AdkShikiHighlighterOptions): (tree: Root) => void {\n const highlighter = options.highlighter;\n if (!options.highlighter) {\n throw new Error(MISSING_HIGHLIGHTER);\n }\n\n const visitor = (node, _index, parent) => {\n if (!parent || parent.tagName !== 'pre' || node.tagName !== 'code') {\n return;\n }\n\n const [langClass] = node.properties.className;\n const lang = langClass.replace('language-', '');\n\n if (highlighter.getLoadedLanguages().includes(lang)) {\n const code = node.children[0]?.value;\n if (!code) {\n return;\n }\n const highlighted = highlighter.codeToHtml(code, {\n lang,\n theme: options.theme,\n });\n const parsed = parse(highlighted);\n const hastTree = fromParse5(parsed);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const content = (hastTree as any).children[0].children[1].children[0]\n .children[0];\n\n content.properties.class = ['shiki', 'shiki-' + lang, langClass];\n\n node.properties = content.properties;\n node.children = content.children;\n }\n };\n\n const transformer = (tree: Root) => {\n visit(tree, 'element', visitor);\n };\n\n return transformer;\n }\n\n getLanguage(node): string {\n const dataLanguage = node.properties.dataLanguage;\n\n if (dataLanguage != null) {\n return dataLanguage;\n }\n\n const className = node.properties.className || [];\n\n for (const classListItem of className) {\n if (classListItem.slice(0, 9) === 'language-') {\n return classListItem.slice(9).toLowerCase();\n }\n }\n\n return null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport rehypeAutolinkHeadings from 'rehype-autolink-headings';\nimport rehypeRaw from 'rehype-raw';\nimport rehypeSlug from 'rehype-slug';\nimport rehypeStringify from 'rehype-stringify';\nimport remarkGfm from 'remark-gfm';\nimport remarkParse from 'remark-parse';\nimport remarkRehype from 'remark-rehype';\nimport { forkJoin, from, map, mergeMap, Observable, of, switchMap } from 'rxjs';\nimport { BundledLanguage } from 'shiki/langs';\nimport { BundledTheme } from 'shiki/themes';\nimport { HighlighterGeneric } from 'shiki/types.mjs';\nimport { unified } from 'unified';\nimport { deepMerge } from '../core/utilities/deep-merge';\nimport { AdkShikiHighlighter, ShikiTheme } from './shiki-highlighter';\n\nexport interface AdkParsedContentSection<Content = string> {\n type: string;\n content: Content;\n html?: SafeHtml;\n headers: { id: string; text: string; level: number }[];\n}\n\nexport interface AdkMarkdownParsingOptions {\n highlighter?: AdkShikiHighlighterOptions;\n gfm?: boolean;\n headingIds?: boolean;\n headingFragmentLinks?: AdkHeadingFragmentLinkOptions;\n}\n\nexport interface AdkShikiHighlighterOptions {\n highlighter?: HighlighterGeneric<BundledLanguage, BundledTheme>;\n theme?: ShikiTheme;\n type?: 'html' | 'markdown';\n ignoreUnknownLanguage?: boolean;\n}\n\nexport interface AdkHeadingFragmentLinkOptions {\n createLinks?: boolean;\n behavior?: 'append' | 'prepend' | 'wrap' | 'before' | 'after';\n}\n\nconst DEFAULT_HIGHLIGHTER_OPTIONS: AdkShikiHighlighterOptions = {\n highlighter: undefined,\n theme: ShikiTheme.GitHubLight,\n type: 'markdown',\n ignoreUnknownLanguage: true,\n};\n\nconst DEFAULT_PARSING_OPTIONS: AdkMarkdownParsingOptions = {\n gfm: true,\n headingIds: true,\n headingFragmentLinks: { createLinks: false },\n highlighter: DEFAULT_HIGHLIGHTER_OPTIONS,\n};\n\n@Injectable()\nexport class AdkMarkdownParser {\n parser: typeof unified;\n\n constructor(\n private sanitizer: DomSanitizer,\n private shikiHighlighter: AdkShikiHighlighter\n ) {\n this.parser = unified;\n }\n\n parse(\n markdown: string,\n options?: AdkMarkdownParsingOptions\n ): Observable<AdkParsedContentSection[]> {\n const mergedOptions = deepMerge(DEFAULT_PARSING_OPTIONS, options || {});\n\n return of(mergedOptions).pipe(\n mergeMap((_options) => {\n if (_options.highlighter && !_options.highlighter.highlighter) {\n return from(this.shikiHighlighter.getHighlighter()).pipe(\n map((highlighter) => ({\n ..._options,\n highlighter: {\n ..._options.highlighter,\n highlighter,\n },\n }))\n );\n } else {\n return of(_options);\n }\n }),\n switchMap((_options) => {\n const sections = this.getSections(markdown);\n const parsedSections$ = sections.map((section) => {\n return this.parseSection(section, _options);\n });\n return forkJoin(parsedSections$);\n })\n );\n }\n\n private getSections(markdown: string): AdkParsedContentSection[] {\n const sections: AdkParsedContentSection[] = [];\n let currentMarkdown = '';\n\n const lines = markdown.split('\\n');\n\n for (const line of lines) {\n currentMarkdown += line + '\\n';\n }\n\n // Add any remaining markdown\n if (currentMarkdown.trim()) {\n sections.push({\n type: 'markdown',\n content: currentMarkdown,\n html: undefined,\n headers: this.getHeaders(currentMarkdown),\n });\n }\n\n return sections;\n }\n\n private parseSection(\n section: AdkParsedContentSection,\n options: AdkMarkdownParsingOptions\n ): Observable<AdkParsedContentSection> {\n const parsedContent$ = from(\n unified()\n .use(remarkParse)\n .use(options.gfm ? remarkGfm : undefined)\n .use(\n options.highlighter && options.highlighter.type === 'markdown'\n ? this.shikiHighlighter.remarkHighlight\n : undefined,\n options.highlighter\n )\n .use(remarkRehype, { allowDangerousHtml: true })\n .use(rehypeRaw)\n .use(options.headingIds ? rehypeSlug : undefined)\n .use(\n options.headingFragmentLinks ? rehypeAutolinkHeadings : undefined,\n { behavior: options.headingFragmentLinks?.behavior }\n )\n .use(rehypeStringify)\n .process(section.content)\n .then((file) => String(file))\n );\n\n return parsedContent$.pipe(\n map((parsedContent) => {\n const toReturn = {\n ...section,\n html: this.sanitizer.bypassSecurityTrustHtml(parsedContent),\n };\n return toReturn;\n })\n );\n }\n\n getHeaders(markdown: string): { id: string; text: string; level: number }[] {\n const headerRegex =\n /^(#{1,6})\\s*(.+)$|<h([1-6])(?:\\s+[^>]*)?>(.*?)<\\/h[1-6]>/gm;\n const headers: { id: string; text: string; level: number }[] = [];\n let match;\n\n while ((match = headerRegex.exec(markdown)) !== null) {\n let level: number;\n let text: string;\n\n if (match[1]) {\n // Markdown header, e.g., ## Heading\n level = match[1].length;\n text = match[2].trim();\n } else {\n // HTML header, e.g., <h2>Heading</h2>\n level = parseInt(match[3], 10);\n text = match[4].trim();\n }\n\n const id = text\n .toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^\\w-]+/g, '');\n headers.push({ id, text, level });\n }\n return headers;\n }\n\n parseComponent(content: string): { name: string; pathTo: string } {\n const cleanedLine = content.trim().slice(2, -2).trim();\n const [nameKV, pathToKV] = cleanedLine.split(',');\n const name = nameKV.split(':')[1]?.trim();\n const pathTo = pathToKV.split(':')[1]?.trim();\n return { name, pathTo };\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Safely assigns properties from a source object to a target object.\n *\n * Copies all own, enumerable properties from `source` to `target`,\n * except when the target already has a property of the same name that is a function.\n *\n * Logs a warning for each skipped property if `logConflicts` is true.\n *\n * @template TTarget The type of the target object.\n * @template TSource The type of the source object.\n * @param target The object to assign properties to.\n * @param source The object providing properties to assign.\n * @param logConflicts If true, logs when a method/property on the target prevents assignment. Default is false.\n *\n * @example\n * safeAssign(this, { log: 'hello' }, true);\n */\nexport function safeAssign<TTarget extends object, TSource extends object>(\n target: TTarget,\n source: TSource,\n logConflicts: boolean = false\n): void {\n if (!source) return;\n\n for (const key of Object.keys(source)) {\n const existing = (target as any)[key];\n const incoming = (source as any)[key];\n\n if (typeof existing === 'function') {\n if (logConflicts) {\n console.warn(\n `safeAssign: Skipped assignment for key \"${key}\" because it would overwrite an existing method.`\n );\n }\n continue;\n }\n\n (target as any)[key] = incoming;\n }\n}\n","import { DestroyRef, Injectable, NgZone } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n BehaviorSubject,\n debounceTime,\n distinctUntilChanged,\n fromEvent,\n} from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AdkActiveHeadingTracker {\n private activeHeadingId = new BehaviorSubject<string | null>(null);\n activeHeadingId$ = this.activeHeadingId.asObservable();\n\n constructor(private ngZone: NgZone) {}\n\n initScrollListener(contentEl: HTMLElement, destroyRef: DestroyRef): void {\n this.ngZone.runOutsideAngular(() => {\n fromEvent(window, 'scroll')\n .pipe(\n takeUntilDestroyed(destroyRef),\n debounceTime(50),\n distinctUntilChanged()\n )\n .subscribe(() => {\n const headings = Array.from(\n contentEl.querySelectorAll('h1, h2, h3, h4, h5, h6')\n ) as HTMLHeadingElement[];\n const activeHeading = this.findActiveHeading(headings);\n this.ngZone.run(() => {\n if (activeHeading) {\n this.activeHeadingId.next(activeHeading.id);\n }\n });\n });\n });\n }\n\n private findActiveHeading(\n headings: HTMLHeadingElement[]\n ): HTMLHeadingElement | null {\n const scrollPosition = window.scrollY;\n for (let i = headings.length - 1; i >= 0; i--) {\n const heading = headings[i];\n if (heading.offsetTop <= scrollPosition + 50) {\n return heading;\n }\n }\n return headings[0] || null;\n }\n\n setActiveHeading(heading: HTMLHeadingElement): void {\n this.activeHeadingId.next(heading.id);\n }\n\n scrollToTop(): void {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { AdkActiveHeadingTracker } from '../active-heading-tracker';\nimport { AdkHtmlHeader } from '../documentation-content-service';\n\n@Component({\n selector: 'hsi-adk-document-index',\n imports: [CommonModule],\n templateUrl: './document-index.component.html',\n styleUrls: ['./document-index.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdkDocumentIndexComponent {\n @Input() headings: AdkHtmlHeader[] = [];\n @Output() activeHeading = new EventEmitter<{\n heading: AdkHtmlHeader;\n event: KeyboardEvent | PointerEvent | MouseEvent | Event;\n }>();\n\n constructor(public activeHeadingTracker: AdkActiveHeadingTracker) {}\n\n setActiveHeading(\n event: KeyboardEvent | PointerEvent | MouseEvent | Event,\n heading: AdkHtmlHeader\n ): void {\n this.activeHeading.emit({ heading, event });\n }\n\n scrollToTop(): void {\n this.activeHeadingTracker.scrollToTop();\n }\n}\n","<nav class=\"toc\">\n @if (headings.length > 0) {\n <p class=\"index-title\">On this page</p>\n <ul class=\"links-container\">\n @for (heading of headings; track $index) {\n <li class=\"toc-item\">\n <button\n type=\"button\"\n class=\"toc-link\"\n [style.--level]=\"heading.level\"\n (click)=\"setActiveHeading($event, heading)\"\n (keydown.enter)=\"setActiveHeading($event, heading)\"\n [class.active]=\"\n heading.id === (activeHeadingTracker.activeHeadingId$ | async)\n \"\n >{{ heading.text }}</button\n >\n </li>\n }\n </ul>\n <button\n type=\"button\"\n class=\"back-to-top\"\n (click)=\"scrollToTop()\"\n (keydown.enter)=\"scrollToTop()\"\n >\n Back to top<span\n aria-hidden=\"true\"\n class=\"material-symbols-outlined arrow\"\n >arrow_upward</span\n >\n </button>\n }\n</nav>\n","import { Injectable } from '@angular/core';\n\nexport interface AdkNestedObject {\n [key: string]: string | AdkNestedObject;\n}\n\nexport interface AdkDocumentationNavigationSiblings {\n previous: string | undefined;\n next: string | undefined;\n}\n\n@Injectable()\nexport class AdkDocumentationConfigParser {\n basePath: string;\n\n /**\n * This method takes a path from the application and a configuration object, and returns a path to a file that will be fetched.\n *\n * This assumes that the pathFromApp matches a path through the keys of the Nested Object.\n *\n * If the path is 'viz-components/content/items/bars', the config object might look like this:\n * viz-components: {\n * content: {\n * items: {\n * bars: 'bars.md'\n * }\n * }\n * }\n *\n * @param pathFromApp a string representing the path from the application, for example 'viz-components/content/items/bars'\n * @param config a nested object representing the configuration\n * @returns a string representing the file path\n */\n getPathToFile(\n pathFromApp: string,\n config: AdkNestedObject,\n basePath: string\n ): string {\n const pathParts = pathFromApp.split('/');\n const fileName = this.getFileNameFromPath(pathParts, config);\n const pathToFile = basePath ? `${basePath}/${fileName}` : fileName;\n return pathToFile;\n }\n\n /**\n *\n * @param pathParts a string array of path parts, for example ['viz-components', 'content', 'items', 'bars]\n * @param config a nested object representing the configuration\n * @returns a string representing the file name\n */\n private getFileNameFromPath(\n pathParts: string[],\n config: string | AdkNestedObject\n ): string {\n const fileName = pathParts.reduce((acc, part) => {\n const level = acc[part];\n acc = level;\n return acc;\n }, config);\n return fileName as string;\n }\n\n findPreviousAndNextByPath(\n obj: AdkNestedObject,\n targetPath: string\n ): AdkDocumentationNavigationSiblings {\n const flatPaths = this.flattenObjectWithPath(obj);\n const index = flatPaths.indexOf(targetPath);\n\n if (index === -1) {\n return { previous: undefined, next: undefined };\n }\n\n return {\n previous: index > 0 ? flatPaths[index - 1] : undefined,\n next: index < flatPaths.length - 1 ? flatPaths[index + 1] : undefined,\n };\n }\n\n flattenObjectWithPath(obj: AdkNestedObject, prefix: string = ''): string[] {\n let result: string[] = [];\n for (const [key, value] of Object.entries(obj)) {\n const newPath = prefix ? `${prefix}/${key}` : key;\n if (typeof value === 'object' && value !== null) {\n result = result.concat(this.flattenObjectWithPath(value, newPath));\n } else {\n result.push(newPath);\n }\n }\n return result;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, map, switchMap, withLatestFrom } from 'rxjs';\nimport { AdkAssetResponse, AdkAssetsService } from '../assets/assets-service';\nimport {\n AdkMarkdownParser,\n AdkMarkdownParsingOptions,\n AdkParsedContentSection,\n} from '../content-parsing';\nimport {\n AdkDocumentationConfigParser,\n AdkDocumentationNavigationSiblings,\n AdkNestedObject,\n} from './documentation-config-parser';\n\nexport interface AdkDocsConfig {\n title: string;\n items: AdkFilesConfig;\n}\n\nexport interface AdkFilesConfig {\n [key: string]: AdkFilesItem;\n}\n\nexport type AdkFilesItem = string | null | AdkFilesConfig;\n\nexport interface AdkParsedMarkdownFile<Content = string> {\n sections: AdkParsedContentSection<Content>[];\n headings: AdkHtmlHeader[];\n}\n\nexport interface AdkParsedDocumentation<Content = string>\n extends AdkParsedMarkdownFile<Content> {\n siblings: AdkDocumentationNavigationSiblings;\n}\n\nexport interface AdkHtmlHeader {\n id: string;\n level: number; // starts at 1\n text: string;\n}\n\nexport interface AdkDocumentationContentOptions {\n fileConfig: AdkNestedObject;\n basePath: string;\n parsingOptions?: AdkMarkdownParsingOptions;\n}\n\n@Injectable()\nexport class AdkDocumentationContentService {\n private files: {\n [name: string]: Observable<AdkParsedContentSection[]>;\n } = {};\n\n constructor(\n private assetsService: AdkAssetsService,\n private docsConfigParser: AdkDocumentationConfigParser,\n private markdownParser: AdkMarkdownParser\n ) {}\n\n /**\n * This service requires the consuming app to provide the AdkDocumentationDisplayService, the AdkAssetsService, and the AdkDocumentationConfigParser at the level at which this service is configured.\n *\n * OPTIONAL: If the consuming app wants to use a different assets directory, they can pass it in here.\n */\n initialize(assetsDirectory?: string): void {\n this.assetsService.setAssetsPath(assetsDirectory || 'assets/');\n }\n\n /**\n * Assumes that the content path matches\n */\n getContentForCurrentContentPath(\n contentPath$: Observable<string>,\n options: AdkDocumentationContentOptions\n ): Observable<AdkParsedDocumentation> {\n return contentPath$.pipe(\n switchMap((contentPath) => {\n const pathToFile = this.docsConfigParser.getPathToFile(\n contentPath,\n options.fileConfig,\n options.basePath\n );\n return this.getParsedMarkdownFile(pathToFile, options.parsingOptions);\n }),\n withLatestFrom(contentPath$),\n map(([markdownSections, configPath]) => {\n return {\n sections: markdownSections,\n headings: markdownSections.reduce((acc, section) => {\n if (section.headers.length > 0) {\n acc.push(...section.headers);\n }\n return acc;\n }, [] as AdkHtmlHeader[]),\n siblings: this.docsConfigParser.findPreviousAndNextByPath(\n options.fileConfig,\n configPath\n ),\n };\n })\n );\n }\n\n private getParsedMarkdownFile(\n filePathFromAssets: string,\n parsingOptions?: AdkMarkdownParsingOptions\n ): Observable<AdkParsedContentSection[]> {\n if (!this.files[filePathFromAssets]) {\n this.files[filePathFromAssets] = this.assetsService\n .getAsset(filePathFromAssets, AdkAssetResponse.Text)\n .pipe(\n switchMap((text) =>\n this.markdownParser.parse(text as string, parsingOptions)\n )\n );\n }\n return this.files[filePathFromAssets];\n }\n}\n","import { CommonModule, TitleCasePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n} from '@angular/core';\nimport { AdkDocumentationNavigationSiblings } from '../documentation-config-parser';\n\n@Component({\n selector: 'hsi-adk-navigation-siblings',\n imports: [CommonModule],\n providers: [TitleCasePipe],\n templateUrl: './navigation-siblings.component.html',\n styleUrls: ['./navigation-siblings.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NavigationSiblingsComponent implements OnChanges {\n @Input() siblings: AdkDocumentationNavigationSiblings;\n @Output() nextDoc: EventEmitter<string> = new EventEmitter<string>();\n previous: string;\n next: string;\n\n constructor(private titleCase: TitleCasePipe) {}\n\n ngOnChanges(): void {\n this.setDisplayNames();\n }\n\n setDisplayNames(): void {\n this.previous = this.siblings.previous\n ? this.getDisplayName(this.siblings.previous)\n : undefined;\n this.next = this.siblings.next\n ? this.getDisplayName(this.siblings.next)\n : undefined;\n }\n\n getDisplayName(path: string): string {\n const paths = path.split('/');\n const end = paths[paths.length - 1];\n const dehyphenated = end.replace(/-/g, ' ');\n return this.titleCase.transform(dehyphenated);\n }\n\n navigateToDoc(sibling: string): void {\n this.nextDoc.emit(sibling);\n }\n}\n","@if (siblings.previous) {\n <div\n class=\"nav-panel previous\"\n role=\"link\"\n tabindex=\"0\"\n (click)=\"navigateToDoc(siblings.previous)\"\n (keydown.enter)=\"navigateToDoc(siblings.previous)\"\n ><p class=\"label\">Previous</p\n ><p class=\"name\"\n ><span aria-hidden=\"true\" class=\"material-symbols-outlined arrow\"\n >arrow_back</span\n >{{ previous }}</p\n ></div\n >\n}\n@if (siblings.next) {\n <div\n class=\"nav-panel next\"\n role=\"link\"\n tabindex=\"0\"\n (click)=\"navigateToDoc(siblings.next)\"\n (keydown.enter)=\"navigateToDoc(siblings.next)\"\n ><p class=\"label\">Next</p\n ><p class=\"name\"\n >{{ next }}\n <span aria-hidden=\"true\" class=\"material-symbols-outlined arrow\"\n >arrow_forward</span\n ></p\n ></div\n >\n}\n","import { CommonModule, DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ShikiTheme } from '../content-parsing';\nimport { AdkActiveHeadingTracker } from './active-heading-tracker';\nimport { AdkDocumentIndexComponent } from './document-index/document-index.component';\nimport { AdkNestedObject } from './documentation-config-parser';\nimport {\n AdkDocumentationContentService,\n AdkHtmlHeader,\n AdkParsedDocumentation,\n} from './documentation-content-service';\nimport { NavigationSiblingsComponent } from './navigation-siblings/navigation-siblings.component';\n\n@Component({\n selector: 'hsi-adk-documentation-display',\n imports: [\n CommonModule,\n AdkDocumentIndexComponent,\n NavigationSiblingsComponent,\n ],\n templateUrl: './documentation-display.component.html',\n styleUrls: ['./documentation-display.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AdkDocumentationDisplayComponent implements OnInit, AfterViewInit {\n /**\n * Observable that emits the current content path\n */\n @Input() contentPath$: Observable<string>;\n @Input() fileConfig: AdkNestedObject;\n @Input() highlightTheme: ShikiTheme;\n @Input() pathFromAssetsToFile: string;\n @Input() showPrevNextNavigation = true;\n @Output() nextDoc: EventEmitter<string> = new EventEmitter<string>();\n @ViewChild('file') file: ElementRef<HTMLDivElement>;\n content$: Observable<AdkParsedDocumentation>;\n @ContentChild('escapedContent', { static: false })\n escapedContentTemplateRef: TemplateRef<unknown>;\n\n constructor(\n private content: AdkDocumentationContentService,\n private activeHeading: AdkActiveHeadingTracker,\n private destroyRef: DestroyRef,\n private zone: NgZone,\n @Inject(DOCUMENT) private document: Document\n ) {}\n\n ngOnInit(): void {\n this.setContent();\n }\n\n ngAfterViewInit(): void {\n this.activeHeading.initScrollListener(\n this.file.nativeElement,\n this.destroyRef\n );\n }\n\n setContent(): void {\n this.content$ = this.content.getContentForCurrentContentPath(\n this.contentPath$,\n {\n fileConfig: this.fileConfig,\n basePath: this.pathFromAssetsToFile,\n parsingOptions: {\n highlighter: {\n theme: this.highlightTheme,\n },\n },\n }\n );\n }\n\n scrollToHeading(update: {\n heading: AdkHtmlHeader;\n event: KeyboardEvent | PointerEvent | MouseEvent | Event;\n }): void {\n const targetHeading = this.file.nativeElement.querySelector(\n `#${update.heading.id}`\n ) as HTMLHeadingElement;\n targetHeading.focus();\n this.scrollToItemById(\n targetHeading,\n (update.event as KeyboardEvent).key === 'Enter'\n );\n }\n\n scrollToItemById(\n item: HTMLHeadingElement,\n needsChangeDetection = false\n ): void {\n this.activeHeading.setActiveHeading(item as HTMLHeadingElement);\n const currentOffset = item.offsetTop;\n if (needsChangeDetection) {\n this.zone.run(() => {\n this.scrollToItem(currentOffset);\n });\n } else {\n this.scrollToItem(currentOffset);\n }\n }\n\n scrollToItem(top: number): void {\n this.document.getElementsByTagName('HTML')[0].scrollTo({\n top,\n behavior: 'smooth',\n });\n }\n\n navigateToDoc(sibling: string): void {\n this.nextDoc.emit(sibling);\n }\n}\n","<div class=\"documentation-container\" #file>\n @if (content$ | async; as content) {\n <div class=\"documentation-content\">\n <div class=\"main-content\">\n @for (section of content.sections; track $index) {\n @if (section.type === 'markdown') {\n <div class=\"injected-html\" [innerHTML]=\"section.html\"></div>\n } @else if (section.type === 'escaped') {\n <ng-container\n *ngIf=\"escapedContentTemplateRef\"\n [ngTemplateOutlet]=\"escapedContentTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: section }\"\n >\n </ng-container>\n }\n }\n @if (showPrevNextNavigation) {\n <hsi-adk-navigation-siblings\n class=\"nav-siblings\"\n [siblings]=\"content.siblings\"\n (nextDoc)=\"navigateToDoc($event)\"\n ></hsi-adk-navigation-siblings>\n }\n </div>\n <hsi-adk-document-index\n class=\"document-index\"\n [headings]=\"content.headings.slice(1)\"\n (activeHeading)=\"scrollToHeading($event)\"\n ></hsi-adk-document-index>\n </div>\n }\n</div>\n","import { SimpleChanges } from '@angular/core';\nimport { get, isEqual } from 'lodash-es';\n\n/**\n * A utility class for detecting changes to objects in Angular's ngOnChanges lifecycle hook.\n */\nexport class NgOnChangesUtilities {\n /**\n * Checks if an input object has changed since the first change.\n * @param changes - The SimpleChanges object containing the changes.\n * @param inputName - The name of the input property to check.\n * @param property - Optional specific property to check within the input object.\n * @returns True if the input object has changed since the first change, otherwise false.\n */\n static inputObjectChangedNotFirstTime(\n changes: SimpleChanges,\n inputName: string,\n property?: string\n ): boolean {\n return (\n changes[inputName] !== undefined &&\n !changes[inputName].isFirstChange() &&\n this.inputObjectChanged(changes, inputName, property)\n );\n }\n\n /**\n * Checks if an input object has changed.\n * @param changes - The SimpleChanges object containing the changes.\n * @param inputName - The name of the input property to check.\n * @param property - Optional specific property to check within the input object.\n * @returns True if the input object has changed, otherwise false.\n */\n static inputObjectChanged(\n changes: SimpleChanges,\n inputName: string,\n property?: string\n ): boolean {\n let prevAccessor = `${inputName}.previousValue`;\n let currAccessor = `${inputName}.currentValue`;\n if (property) {\n prevAccessor += `.${property}`;\n currAccessor += `.${property}`;\n }\n return (\n changes[inputName] !== undefined &&\n !isEqual(get(changes, prevAccessor), get(changes, currAccessor))\n );\n }\n}\n","import { NgZone } from '@angular/core';\nimport { Observable, switchMap } from 'rxjs';\n\n/**\n *\n * @param zone: NgZone\n * @returns (source: Observable<T>) => Observable<void>\n *\n * A custom RxJS operator that runs an Angular change detection cycle after the source observable emits, and waits until the change detection cycle is complete before emitting the next value.\n *\n * Note that this is not intended to be used frequently. It is a workaround for cases where you need to ensure that Angular has completed change detection before continuing with the next operation, for example when you need to access a DOM element that is being created through multiple levels of content projection.\n *\n * @example\n * ```ts\n * this.myObservable.pipe(\n * runNgChangeDetectionThen(this.zone),\n * subscribe(() => {\n * console.log('a change detection cycle has completed');\n * })\n * );\n * ```\n */\nexport function runNgChangeDetectionThen<T>(\n zone: NgZone\n): (source: Observable<T>) => Observable<void> {\n return function <T>(source: Observable<T>): Observable<void> {\n return source.pipe(\n switchMap(\n () =>\n new Promise<void>((resolve) => {\n zone.run(() => {\n Promise.resolve().then(() => {\n resolve();\n });\n });\n })\n )\n );\n };\n}\n","export * from './lib/assets';\nexport * from './lib/content-parsing';\nexport * from './lib/core/utilities/index';\nexport * from './lib/documentation-display';\nexport * from './lib/ng-utilities';\nexport const STYLES_PATH = './lib/styles/_index.scss';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["yamlParse","i1.AdkAssetsResource","parse","i1","i2.AdkShikiHighlighter","i1.AdkActiveHeadingTracker","i2","i1.AdkAssetsService","i2.AdkDocumentationConfigParser","i3.AdkMarkdownParser"],"mappings":"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"}
1
+ {"version":3,"file":"mathstack-app-kit.mjs","sources":["../../../libs/app-kit/src/lib/assets/assets-resource.ts","../../../libs/app-kit/src/lib/assets/assets-service.ts","../../../libs/app-kit/src/lib/core/utilities/deep-merge.ts","../../../libs/app-kit/src/lib/content-parsing/shiki-highlighter.ts","../../../libs/app-kit/src/lib/content-parsing/markdown-parser.ts","../../../libs/app-kit/src/lib/core/utilities/safe-assign.ts","../../../libs/app-kit/src/lib/documentation-display/active-heading-tracker.ts","../../../libs/app-kit/src/lib/documentation-display/document-index/document-index.component.ts","../../../libs/app-kit/src/lib/documentation-display/document-index/document-index.component.html","../../../libs/app-kit/src/lib/documentation-display/documentation-config-parser.ts","../../../libs/app-kit/src/lib/documentation-display/documentation-content-service.ts","../../../libs/app-kit/src/lib/documentation-display/navigation-siblings/navigation-siblings.component.ts","../../../libs/app-kit/src/lib/documentation-display/navigation-siblings/navigation-siblings.component.html","../../../libs/app-kit/src/lib/documentation-display/documentation-display.component.ts","../../../libs/app-kit/src/lib/documentation-display/documentation-display.component.html","../../../libs/app-kit/src/lib/ng-utilities/ng-on-changes.ts","../../../libs/app-kit/src/lib/ng-utilities/run-ng-change-detection-then.ts","../../../libs/app-kit/src/public-api.ts","../../../libs/app-kit/src/mathstack-app-kit.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { AdkAssetResponse } from './assets-service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AdkAssetsResource {\n constructor(private http: HttpClient) {}\n\n getAsset(path: string, responseType: AdkAssetResponse): Observable<unknown> {\n return this.http.get<unknown>(path, {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n responseType: responseType as any,\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { csvParse } from 'd3';\nimport { Observable, forkJoin } from 'rxjs';\nimport { parse as yamlParse } from 'yaml';\nimport { AdkAssetsResource } from './assets-resource';\n\nexport enum AdkAssetResponse {\n ArrayBuffer = 'arraybuffer',\n Blob = 'blob',\n Json = 'json',\n Text = 'text',\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AdkAssetsService {\n private assets: { [key: string]: Observable<unknown> } = {};\n private assetsPath = 'assets/';\n\n constructor(private resource: AdkAssetsResource) {}\n\n setAssetsPath(path: string): void {\n this.assetsPath = path;\n }\n\n /**\n * Loads an asset from the assets folder.\n *\n * @param assetName The path to the asset from assets/. Should not include leading slash.\n * @returns An observable that emits the asset data.\n */\n getAsset(\n assetName: string,\n responseType: AdkAssetResponse\n ): Observable<unknown> {\n if (!this.assets[assetName]) {\n this.assets[assetName] = this.fetchAsset(assetName, responseType);\n }\n return this.assets[assetName];\n }\n\n private fetchAsset(\n assetName: string,\n responseType: AdkAssetResponse\n ): Observable<unknown> {\n return this.resource.getAsset(\n `${this.assetsPath}${assetName}`,\n responseType\n );\n }\n\n /**\n * Loads multiple assets concurrently.\n *\n * @param assetNames An array of asset names to load.\n * @returns An observable that emits an array of asset data.\n */\n getAssets(\n assetNames: string[],\n responseType: AdkAssetResponse\n ): Observable<unknown[]> {\n return forkJoin(\n assetNames.map((assetName) => this.getAsset(assetName, responseType))\n );\n }\n\n parseCsv<T>(str: string): T[] {\n return csvParse(str) as unknown as T[];\n }\n\n parseYaml<T>(str: string): T {\n return yamlParse(str) as T;\n }\n}\n","export function deepMerge<T>(target: T, source: Partial<T>): T {\n const output = Object.assign({}, target);\n if (isObject(target) && isObject(source)) {\n Object.keys(source).forEach((key) => {\n if (isObject(source[key])) {\n if (!(key in (target as object))) {\n Object.assign(output, { [key]: source[key] });\n } else {\n output[key] = deepMerge(target[key], source[key]);\n }\n } else {\n Object.assign(output, { [key]: source[key] });\n }\n });\n }\n return output;\n}\n\nfunction isObject(item: unknown): item is object {\n return item && typeof item === 'object' && !Array.isArray(item);\n}\n","import { Injectable } from '@angular/core';\nimport { Root } from 'hast';\nimport { fromParse5 } from 'hast-util-from-parse5';\nimport { parse } from 'parse5';\nimport { createHighlighter } from 'shiki/index.mjs';\nimport { BundledLanguage } from 'shiki/langs';\nimport { BundledTheme } from 'shiki/themes';\nimport { HighlighterGeneric } from 'shiki/types.mjs';\nimport { visit } from 'unist-util-visit';\nimport { AdkShikiHighlighterOptions } from './markdown-parser';\n\nexport const defaultHighlighterLangs = [\n 'json',\n 'ts',\n 'js',\n 'html',\n 'css',\n 'scss',\n 'yaml',\n 'angular-html',\n 'angular-ts',\n 'mermaid',\n 'bash',\n];\n\nexport enum ShikiTheme {\n Andromeeda = 'andromeeda',\n AuroraX = 'aurora-x',\n AyuDark = 'ayu-dark',\n CatppuccinFrappe = 'catppuccin-frappe',\n CatppuccinLatte = 'catppuccin-latte',\n CatppuccinMacchiato = 'catppuccin-macchiato',\n CatppuccinMocha = 'catppuccin-mocha',\n DarkPlus = 'dark-plus',\n DraculaTheme = 'dracula',\n DraculaThemeSoft = 'dracula-soft',\n EverforestDark = 'everforest-dark',\n EverforestLight = 'everforest-light',\n GitHubDark = 'github-dark',\n GitHubDarkDefault = 'github-dark-default',\n GitHubDarkDimmed = 'github-dark-dimmed',\n GitHubDarkHighContrast = 'github-dark-high-contrast',\n GitHubLight = 'github-light',\n GitHubLightDefault = 'github-light-default',\n GitHubLightHighContrast = 'github-light-high-contrast',\n Houston = 'houston',\n LaserWave = 'laserwave',\n LightPlus = 'light-plus',\n MaterialTheme = 'material-theme',\n MaterialThemeDarker = 'material-theme-darker',\n MaterialThemeLighter = 'material-theme-lighter',\n MaterialThemeOcean = 'material-theme-ocean',\n MaterialThemePalenight = 'material-theme-palenight',\n MinDark = 'min-dark',\n MinLight = 'min-light',\n Monokai = 'monokai',\n NightOwl = 'night-owl',\n Nord = 'nord',\n OneDarkPro = 'one-dark-pro',\n OneLight = 'one-light',\n Plastic = 'plastic',\n Poimandres = 'poimandres',\n Red = 'red',\n RosePine = 'rose-pine',\n RosePineDawn = 'rose-pine-dawn',\n RosePineMoon = 'rose-pine-moon',\n SlackDark = 'slack-dark',\n SlackOchin = 'slack-ochin',\n SnazzyLight = 'snazzy-light',\n SolarizedDark = 'solarized-dark',\n SolarizedLight = 'solarized-light',\n Synthwave84 = 'synthwave-84',\n TokyoNight = 'tokyo-night',\n Vesper = 'vesper',\n VitesseBlack = 'vitesse-black',\n VitesseDark = 'vitesse-dark',\n VitesseLight = 'vitesse-light',\n}\n\nconst MISSING_HIGHLIGHTER = `Please provide a \\`shiki\\` highlighter instance via \\`options\\`.`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AdkShikiHighlighter {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private highlighterPromise: Promise<\n HighlighterGeneric<BundledLanguage, BundledTheme>\n > | null = null;\n\n /**\n * Initialize the highlighter. This should only be called one in an application.\n *\n * @param themes an array of any Shiki themes you may want to use anywhere in the app. You can control which theme for your particular parsing by passing the theme name to the actual parsing function.\n *\n * @returns void\n */\n async initialize(\n themes: ShikiTheme[],\n langs: string[] = defaultHighlighterLangs\n ): Promise<void> {\n if (!this.highlighterPromise) {\n this.highlighterPromise = createHighlighter({\n langs,\n themes: themes.length ? themes : [ShikiTheme.GitHubLight],\n });\n }\n await this.highlighterPromise;\n }\n\n async getHighlighter(): Promise<\n HighlighterGeneric<BundledLanguage, BundledTheme>\n > {\n if (!this.highlighterPromise) {\n throw new Error(\n 'Highlighter is not initialized. Please call initialize() once in your application first.'\n );\n }\n return this.highlighterPromise;\n }\n\n remarkHighlight(options: AdkShikiHighlighterOptions): (tree: Root) => void {\n const highlighter = options.highlighter;\n if (!options.highlighter) {\n throw new Error(MISSING_HIGHLIGHTER);\n }\n const loadedLanguages = highlighter.getLoadedLanguages();\n const ignoreUnknownLanguage =\n options.ignoreUnknownLanguage === undefined\n ? true\n : options.ignoreUnknownLanguage;\n\n const visitor = (node) => {\n if (!loadedLanguages.includes(node.lang)) {\n if (ignoreUnknownLanguage) {\n node.lang = null;\n } else {\n return;\n }\n }\n\n const highlighted = highlighter.codeToHtml(node.value, {\n lang: node.lang,\n theme: options.theme,\n });\n\n node.type = 'html';\n node.value = highlighted;\n };\n\n const transformer = (tree: Root) => {\n visit(tree, 'code', visitor);\n };\n\n return transformer;\n }\n\n rehypeHighlight(options: AdkShikiHighlighterOptions): (tree: Root) => void {\n const highlighter = options.highlighter;\n if (!options.highlighter) {\n throw new Error(MISSING_HIGHLIGHTER);\n }\n\n const visitor = (node, _index, parent) => {\n if (!parent || parent.tagName !== 'pre' || node.tagName !== 'code') {\n return;\n }\n\n const [langClass] = node.properties.className;\n const lang = langClass.replace('language-', '');\n\n if (highlighter.getLoadedLanguages().includes(lang)) {\n const code = node.children[0]?.value;\n if (!code) {\n return;\n }\n const highlighted = highlighter.codeToHtml(code, {\n lang,\n theme: options.theme,\n });\n const parsed = parse(highlighted);\n const hastTree = fromParse5(parsed);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const content = (hastTree as any).children[0].children[1].children[0]\n .children[0];\n\n content.properties.class = ['shiki', 'shiki-' + lang, langClass];\n\n node.properties = content.properties;\n node.children = content.children;\n }\n };\n\n const transformer = (tree: Root) => {\n visit(tree, 'element', visitor);\n };\n\n return transformer;\n }\n\n getLanguage(node): string {\n const dataLanguage = node.properties.dataLanguage;\n\n if (dataLanguage != null) {\n return dataLanguage;\n }\n\n const className = node.properties.className || [];\n\n for (const classListItem of className) {\n if (classListItem.slice(0, 9) === 'language-') {\n return classListItem.slice(9).toLowerCase();\n }\n }\n\n return null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport rehypeAutolinkHeadings from 'rehype-autolink-headings';\nimport rehypeRaw from 'rehype-raw';\nimport rehypeSlug from 'rehype-slug';\nimport rehypeStringify from 'rehype-stringify';\nimport remarkGfm from 'remark-gfm';\nimport remarkParse from 'remark-parse';\nimport remarkRehype from 'remark-rehype';\nimport { forkJoin, from, map, mergeMap, Observable, of, switchMap } from 'rxjs';\nimport { BundledLanguage } from 'shiki/langs';\nimport { BundledTheme } from 'shiki/themes';\nimport { HighlighterGeneric } from 'shiki/types.mjs';\nimport { unified } from 'unified';\nimport { deepMerge } from '../core/utilities/deep-merge';\nimport { AdkShikiHighlighter, ShikiTheme } from './shiki-highlighter';\n\nexport interface AdkParsedContentSection<Content = string> {\n type: string;\n content: Content;\n html?: SafeHtml;\n headers: { id: string; text: string; level: number }[];\n}\n\nexport interface AdkMarkdownParsingOptions {\n highlighter?: AdkShikiHighlighterOptions;\n gfm?: boolean;\n headingIds?: boolean;\n headingFragmentLinks?: AdkHeadingFragmentLinkOptions;\n}\n\nexport interface AdkShikiHighlighterOptions {\n highlighter?: HighlighterGeneric<BundledLanguage, BundledTheme>;\n theme?: ShikiTheme;\n type?: 'html' | 'markdown';\n ignoreUnknownLanguage?: boolean;\n}\n\nexport interface AdkHeadingFragmentLinkOptions {\n createLinks?: boolean;\n behavior?: 'append' | 'prepend' | 'wrap' | 'before' | 'after';\n}\n\nconst DEFAULT_HIGHLIGHTER_OPTIONS: AdkShikiHighlighterOptions = {\n highlighter: undefined,\n theme: ShikiTheme.GitHubLight,\n type: 'markdown',\n ignoreUnknownLanguage: true,\n};\n\nconst DEFAULT_PARSING_OPTIONS: AdkMarkdownParsingOptions = {\n gfm: true,\n headingIds: true,\n headingFragmentLinks: { createLinks: false },\n highlighter: DEFAULT_HIGHLIGHTER_OPTIONS,\n};\n\n@Injectable()\nexport class AdkMarkdownParser {\n parser: typeof unified;\n\n constructor(\n private sanitizer: DomSanitizer,\n private shikiHighlighter: AdkShikiHighlighter\n ) {\n this.parser = unified;\n }\n\n parse(\n markdown: string,\n options?: AdkMarkdownParsingOptions\n ): Observable<AdkParsedContentSection[]> {\n const mergedOptions = deepMerge(DEFAULT_PARSING_OPTIONS, options || {});\n\n return of(mergedOptions).pipe(\n mergeMap((_options) => {\n if (_options.highlighter && !_options.highlighter.highlighter) {\n return from(this.shikiHighlighter.getHighlighter()).pipe(\n map((highlighter) => ({\n ..._options,\n highlighter: {\n ..._options.highlighter,\n highlighter,\n },\n }))\n );\n } else {\n return of(_options);\n }\n }),\n switchMap((_options) => {\n const sections = this.getSections(markdown);\n const parsedSections$ = sections.map((section) => {\n return this.parseSection(section, _options);\n });\n return forkJoin(parsedSections$);\n })\n );\n }\n\n private getSections(markdown: string): AdkParsedContentSection[] {\n const sections: AdkParsedContentSection[] = [];\n let currentMarkdown = '';\n\n const lines = markdown.split('\\n');\n\n for (const line of lines) {\n currentMarkdown += line + '\\n';\n }\n\n // Add any remaining markdown\n if (currentMarkdown.trim()) {\n sections.push({\n type: 'markdown',\n content: currentMarkdown,\n html: undefined,\n headers: this.getHeaders(currentMarkdown),\n });\n }\n\n return sections;\n }\n\n private parseSection(\n section: AdkParsedContentSection,\n options: AdkMarkdownParsingOptions\n ): Observable<AdkParsedContentSection> {\n const parsedContent$ = from(\n unified()\n .use(remarkParse)\n .use(options.gfm ? remarkGfm : undefined)\n .use(\n options.highlighter && options.highlighter.type === 'markdown'\n ? this.shikiHighlighter.remarkHighlight\n : undefined,\n options.highlighter\n )\n .use(remarkRehype, { allowDangerousHtml: true })\n .use(rehypeRaw)\n .use(options.headingIds ? rehypeSlug : undefined)\n .use(\n options.headingFragmentLinks ? rehypeAutolinkHeadings : undefined,\n { behavior: options.headingFragmentLinks?.behavior }\n )\n .use(rehypeStringify)\n .process(section.content)\n .then((file) => String(file))\n );\n\n return parsedContent$.pipe(\n map((parsedContent) => {\n const toReturn = {\n ...section,\n html: this.sanitizer.bypassSecurityTrustHtml(parsedContent),\n };\n return toReturn;\n })\n );\n }\n\n getHeaders(markdown: string): { id: string; text: string; level: number }[] {\n const headerRegex =\n /^(#{1,6})\\s*(.+)$|<h([1-6])(?:\\s+[^>]*)?>(.*?)<\\/h[1-6]>/gm;\n const headers: { id: string; text: string; level: number }[] = [];\n let match;\n\n while ((match = headerRegex.exec(markdown)) !== null) {\n let level: number;\n let text: string;\n\n if (match[1]) {\n // Markdown header, e.g., ## Heading\n level = match[1].length;\n text = match[2].trim();\n } else {\n // HTML header, e.g., <h2>Heading</h2>\n level = parseInt(match[3], 10);\n text = match[4].trim();\n }\n\n const id = text\n .toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^\\w-]+/g, '');\n headers.push({ id, text, level });\n }\n return headers;\n }\n\n parseComponent(content: string): { name: string; pathTo: string } {\n const cleanedLine = content.trim().slice(2, -2).trim();\n const [nameKV, pathToKV] = cleanedLine.split(',');\n const name = nameKV.split(':')[1]?.trim();\n const pathTo = pathToKV.split(':')[1]?.trim();\n return { name, pathTo };\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Safely assigns properties from a source object to a target object.\n *\n * Copies all own, enumerable properties from `source` to `target`,\n * except when the target already has a property of the same name that is a function.\n *\n * Logs a warning for each skipped property if `logConflicts` is true.\n *\n * @template TTarget The type of the target object.\n * @template TSource The type of the source object.\n * @param target The object to assign properties to.\n * @param source The object providing properties to assign.\n * @param logConflicts If true, logs when a method/property on the target prevents assignment. Default is false.\n *\n * @example\n * safeAssign(this, { log: 'hello' }, true);\n */\nexport function safeAssign<TTarget extends object, TSource extends object>(\n target: TTarget,\n source: TSource,\n logConflicts: boolean = false\n): void {\n if (!source) return;\n\n for (const key of Object.keys(source)) {\n const existing = (target as any)[key];\n const incoming = (source as any)[key];\n\n if (typeof existing === 'function') {\n if (logConflicts) {\n console.warn(\n `safeAssign: Skipped assignment for key \"${key}\" because it would overwrite an existing method.`\n );\n }\n continue;\n }\n\n (target as any)[key] = incoming;\n }\n}\n","import { DestroyRef, Injectable, NgZone } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n BehaviorSubject,\n debounceTime,\n distinctUntilChanged,\n fromEvent,\n} from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AdkActiveHeadingTracker {\n private activeHeadingId = new BehaviorSubject<string | null>(null);\n activeHeadingId$ = this.activeHeadingId.asObservable();\n\n constructor(private ngZone: NgZone) {}\n\n initScrollListener(contentEl: HTMLElement, destroyRef: DestroyRef): void {\n this.ngZone.runOutsideAngular(() => {\n fromEvent(window, 'scroll')\n .pipe(\n takeUntilDestroyed(destroyRef),\n debounceTime(50),\n distinctUntilChanged()\n )\n .subscribe(() => {\n const headings = Array.from(\n contentEl.querySelectorAll('h1, h2, h3, h4, h5, h6')\n ) as HTMLHeadingElement[];\n const activeHeading = this.findActiveHeading(headings);\n this.ngZone.run(() => {\n if (activeHeading) {\n this.activeHeadingId.next(activeHeading.id);\n }\n });\n });\n });\n }\n\n private findActiveHeading(\n headings: HTMLHeadingElement[]\n ): HTMLHeadingElement | null {\n const scrollPosition = window.scrollY;\n for (let i = headings.length - 1; i >= 0; i--) {\n const heading = headings[i];\n if (heading.offsetTop <= scrollPosition + 50) {\n return heading;\n }\n }\n return headings[0] || null;\n }\n\n setActiveHeading(heading: HTMLHeadingElement): void {\n this.activeHeadingId.next(heading.id);\n }\n\n scrollToTop(): void {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { AdkActiveHeadingTracker } from '../active-heading-tracker';\nimport { AdkHtmlHeader } from '../documentation-content-service';\n\n@Component({\n selector: 'hsi-adk-document-index',\n imports: [CommonModule],\n templateUrl: './document-index.component.html',\n styleUrls: ['./document-index.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdkDocumentIndexComponent {\n @Input() headings: AdkHtmlHeader[] = [];\n @Output() activeHeading = new EventEmitter<{\n heading: AdkHtmlHeader;\n event: KeyboardEvent | PointerEvent | MouseEvent | Event;\n }>();\n\n constructor(public activeHeadingTracker: AdkActiveHeadingTracker) {}\n\n setActiveHeading(\n event: KeyboardEvent | PointerEvent | MouseEvent | Event,\n heading: AdkHtmlHeader\n ): void {\n this.activeHeading.emit({ heading, event });\n }\n\n scrollToTop(): void {\n this.activeHeadingTracker.scrollToTop();\n }\n}\n","<nav class=\"toc\">\n @if (headings.length > 0) {\n <p class=\"index-title\">On this page</p>\n <ul class=\"links-container\">\n @for (heading of headings; track $index) {\n <li class=\"toc-item\">\n <button\n type=\"button\"\n class=\"toc-link\"\n [style.--level]=\"heading.level\"\n (click)=\"setActiveHeading($event, heading)\"\n (keydown.enter)=\"setActiveHeading($event, heading)\"\n [class.active]=\"\n heading.id === (activeHeadingTracker.activeHeadingId$ | async)\n \"\n >{{ heading.text }}</button\n >\n </li>\n }\n </ul>\n <button\n type=\"button\"\n class=\"back-to-top\"\n (click)=\"scrollToTop()\"\n (keydown.enter)=\"scrollToTop()\"\n >\n Back to top<span\n aria-hidden=\"true\"\n class=\"material-symbols-outlined arrow\"\n >arrow_upward</span\n >\n </button>\n }\n</nav>\n","import { Injectable } from '@angular/core';\n\nexport interface AdkNestedObject {\n [key: string]: string | AdkNestedObject;\n}\n\nexport interface AdkDocumentationNavigationSiblings {\n previous: string | undefined;\n next: string | undefined;\n}\n\n@Injectable()\nexport class AdkDocumentationConfigParser {\n basePath: string;\n\n /**\n * This method takes a path from the application and a configuration object, and returns a path to a file that will be fetched.\n *\n * This assumes that the pathFromApp matches a path through the keys of the Nested Object.\n *\n * If the path is 'viz/content/items/bars', the config object might look like this:\n * viz: {\n * content: {\n * items: {\n * bars: 'bars.md'\n * }\n * }\n * }\n *\n * @param pathFromApp a string representing the path from the application, for example 'viz/content/items/bars'\n * @param config a nested object representing the configuration\n * @returns a string representing the file path\n */\n getPathToFile(\n pathFromApp: string,\n config: AdkNestedObject,\n basePath: string\n ): string {\n const pathParts = pathFromApp.split('/');\n const fileName = this.getFileNameFromPath(pathParts, config);\n const pathToFile = basePath ? `${basePath}/${fileName}` : fileName;\n return pathToFile;\n }\n\n /**\n *\n * @param pathParts a string array of path parts, for example ['viz', 'content', 'items', 'bars]\n * @param config a nested object representing the configuration\n * @returns a string representing the file name\n */\n private getFileNameFromPath(\n pathParts: string[],\n config: string | AdkNestedObject\n ): string {\n const fileName = pathParts.reduce((acc, part) => {\n const level = acc[part];\n acc = level;\n return acc;\n }, config);\n return fileName as string;\n }\n\n findPreviousAndNextByPath(\n obj: AdkNestedObject,\n targetPath: string\n ): AdkDocumentationNavigationSiblings {\n const flatPaths = this.flattenObjectWithPath(obj);\n const index = flatPaths.indexOf(targetPath);\n\n if (index === -1) {\n return { previous: undefined, next: undefined };\n }\n\n return {\n previous: index > 0 ? flatPaths[index - 1] : undefined,\n next: index < flatPaths.length - 1 ? flatPaths[index + 1] : undefined,\n };\n }\n\n flattenObjectWithPath(obj: AdkNestedObject, prefix: string = ''): string[] {\n let result: string[] = [];\n for (const [key, value] of Object.entries(obj)) {\n const newPath = prefix ? `${prefix}/${key}` : key;\n if (typeof value === 'object' && value !== null) {\n result = result.concat(this.flattenObjectWithPath(value, newPath));\n } else {\n result.push(newPath);\n }\n }\n return result;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, map, switchMap, withLatestFrom } from 'rxjs';\nimport { AdkAssetResponse, AdkAssetsService } from '../assets/assets-service';\nimport {\n AdkMarkdownParser,\n AdkMarkdownParsingOptions,\n AdkParsedContentSection,\n} from '../content-parsing';\nimport {\n AdkDocumentationConfigParser,\n AdkDocumentationNavigationSiblings,\n AdkNestedObject,\n} from './documentation-config-parser';\n\nexport interface AdkDocsConfig {\n title: string;\n items: AdkFilesConfig;\n}\n\nexport interface AdkFilesConfig {\n [key: string]: AdkFilesItem;\n}\n\nexport type AdkFilesItem = string | null | AdkFilesConfig;\n\nexport interface AdkParsedMarkdownFile<Content = string> {\n sections: AdkParsedContentSection<Content>[];\n headings: AdkHtmlHeader[];\n}\n\nexport interface AdkParsedDocumentation<Content = string>\n extends AdkParsedMarkdownFile<Content> {\n siblings: AdkDocumentationNavigationSiblings;\n}\n\nexport interface AdkHtmlHeader {\n id: string;\n level: number; // starts at 1\n text: string;\n}\n\nexport interface AdkDocumentationContentOptions {\n fileConfig: AdkNestedObject;\n basePath: string;\n parsingOptions?: AdkMarkdownParsingOptions;\n}\n\n@Injectable()\nexport class AdkDocumentationContentService {\n private files: {\n [name: string]: Observable<AdkParsedContentSection[]>;\n } = {};\n\n constructor(\n private assetsService: AdkAssetsService,\n private docsConfigParser: AdkDocumentationConfigParser,\n private markdownParser: AdkMarkdownParser\n ) {}\n\n /**\n * This service requires the consuming app to provide the AdkDocumentationDisplayService, the AdkAssetsService, and the AdkDocumentationConfigParser at the level at which this service is configured.\n *\n * OPTIONAL: If the consuming app wants to use a different assets directory, they can pass it in here.\n */\n initialize(assetsDirectory?: string): void {\n this.assetsService.setAssetsPath(assetsDirectory || 'assets/');\n }\n\n /**\n * Assumes that the content path matches\n */\n getContentForCurrentContentPath(\n contentPath$: Observable<string>,\n options: AdkDocumentationContentOptions\n ): Observable<AdkParsedDocumentation> {\n return contentPath$.pipe(\n switchMap((contentPath) => {\n const pathToFile = this.docsConfigParser.getPathToFile(\n contentPath,\n options.fileConfig,\n options.basePath\n );\n return this.getParsedMarkdownFile(pathToFile, options.parsingOptions);\n }),\n withLatestFrom(contentPath$),\n map(([markdownSections, configPath]) => {\n return {\n sections: markdownSections,\n headings: markdownSections.reduce((acc, section) => {\n if (section.headers.length > 0) {\n acc.push(...section.headers);\n }\n return acc;\n }, [] as AdkHtmlHeader[]),\n siblings: this.docsConfigParser.findPreviousAndNextByPath(\n options.fileConfig,\n configPath\n ),\n };\n })\n );\n }\n\n private getParsedMarkdownFile(\n filePathFromAssets: string,\n parsingOptions?: AdkMarkdownParsingOptions\n ): Observable<AdkParsedContentSection[]> {\n if (!this.files[filePathFromAssets]) {\n this.files[filePathFromAssets] = this.assetsService\n .getAsset(filePathFromAssets, AdkAssetResponse.Text)\n .pipe(\n switchMap((text) =>\n this.markdownParser.parse(text as string, parsingOptions)\n )\n );\n }\n return this.files[filePathFromAssets];\n }\n}\n","import { CommonModule, TitleCasePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n} from '@angular/core';\nimport { AdkDocumentationNavigationSiblings } from '../documentation-config-parser';\n\n@Component({\n selector: 'hsi-adk-navigation-siblings',\n imports: [CommonModule],\n providers: [TitleCasePipe],\n templateUrl: './navigation-siblings.component.html',\n styleUrls: ['./navigation-siblings.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NavigationSiblingsComponent implements OnChanges {\n @Input() siblings: AdkDocumentationNavigationSiblings;\n @Output() nextDoc: EventEmitter<string> = new EventEmitter<string>();\n previous: string;\n next: string;\n\n constructor(private titleCase: TitleCasePipe) {}\n\n ngOnChanges(): void {\n this.setDisplayNames();\n }\n\n setDisplayNames(): void {\n this.previous = this.siblings.previous\n ? this.getDisplayName(this.siblings.previous)\n : undefined;\n this.next = this.siblings.next\n ? this.getDisplayName(this.siblings.next)\n : undefined;\n }\n\n getDisplayName(path: string): string {\n const paths = path.split('/');\n const end = paths[paths.length - 1];\n const dehyphenated = end.replace(/-/g, ' ');\n return this.titleCase.transform(dehyphenated);\n }\n\n navigateToDoc(sibling: string): void {\n this.nextDoc.emit(sibling);\n }\n}\n","@if (siblings.previous) {\n <div\n class=\"nav-panel previous\"\n role=\"link\"\n tabindex=\"0\"\n (click)=\"navigateToDoc(siblings.previous)\"\n (keydown.enter)=\"navigateToDoc(siblings.previous)\"\n ><p class=\"label\">Previous</p\n ><p class=\"name\"\n ><span aria-hidden=\"true\" class=\"material-symbols-outlined arrow\"\n >arrow_back</span\n >{{ previous }}</p\n ></div\n >\n}\n@if (siblings.next) {\n <div\n class=\"nav-panel next\"\n role=\"link\"\n tabindex=\"0\"\n (click)=\"navigateToDoc(siblings.next)\"\n (keydown.enter)=\"navigateToDoc(siblings.next)\"\n ><p class=\"label\">Next</p\n ><p class=\"name\"\n >{{ next }}\n <span aria-hidden=\"true\" class=\"material-symbols-outlined arrow\"\n >arrow_forward</span\n ></p\n ></div\n >\n}\n","import { CommonModule, DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ShikiTheme } from '../content-parsing';\nimport { AdkActiveHeadingTracker } from './active-heading-tracker';\nimport { AdkDocumentIndexComponent } from './document-index/document-index.component';\nimport { AdkNestedObject } from './documentation-config-parser';\nimport {\n AdkDocumentationContentService,\n AdkHtmlHeader,\n AdkParsedDocumentation,\n} from './documentation-content-service';\nimport { NavigationSiblingsComponent } from './navigation-siblings/navigation-siblings.component';\n\n@Component({\n selector: 'hsi-adk-documentation-display',\n imports: [\n CommonModule,\n AdkDocumentIndexComponent,\n NavigationSiblingsComponent,\n ],\n templateUrl: './documentation-display.component.html',\n styleUrls: ['./documentation-display.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AdkDocumentationDisplayComponent implements OnInit, AfterViewInit {\n /**\n * Observable that emits the current content path\n */\n @Input() contentPath$: Observable<string>;\n @Input() fileConfig: AdkNestedObject;\n @Input() highlightTheme: ShikiTheme;\n @Input() pathFromAssetsToFile: string;\n @Input() showPrevNextNavigation = true;\n @Output() nextDoc: EventEmitter<string> = new EventEmitter<string>();\n @ViewChild('file') file: ElementRef<HTMLDivElement>;\n content$: Observable<AdkParsedDocumentation>;\n @ContentChild('escapedContent', { static: false })\n escapedContentTemplateRef: TemplateRef<unknown>;\n\n constructor(\n private content: AdkDocumentationContentService,\n private activeHeading: AdkActiveHeadingTracker,\n private destroyRef: DestroyRef,\n private zone: NgZone,\n @Inject(DOCUMENT) private document: Document\n ) {}\n\n ngOnInit(): void {\n this.setContent();\n }\n\n ngAfterViewInit(): void {\n this.activeHeading.initScrollListener(\n this.file.nativeElement,\n this.destroyRef\n );\n }\n\n setContent(): void {\n this.content$ = this.content.getContentForCurrentContentPath(\n this.contentPath$,\n {\n fileConfig: this.fileConfig,\n basePath: this.pathFromAssetsToFile,\n parsingOptions: {\n highlighter: {\n theme: this.highlightTheme,\n },\n },\n }\n );\n }\n\n scrollToHeading(update: {\n heading: AdkHtmlHeader;\n event: KeyboardEvent | PointerEvent | MouseEvent | Event;\n }): void {\n const targetHeading = this.file.nativeElement.querySelector(\n `#${update.heading.id}`\n ) as HTMLHeadingElement;\n targetHeading.focus();\n this.scrollToItemById(\n targetHeading,\n (update.event as KeyboardEvent).key === 'Enter'\n );\n }\n\n scrollToItemById(\n item: HTMLHeadingElement,\n needsChangeDetection = false\n ): void {\n this.activeHeading.setActiveHeading(item as HTMLHeadingElement);\n const currentOffset = item.offsetTop;\n if (needsChangeDetection) {\n this.zone.run(() => {\n this.scrollToItem(currentOffset);\n });\n } else {\n this.scrollToItem(currentOffset);\n }\n }\n\n scrollToItem(top: number): void {\n this.document.getElementsByTagName('HTML')[0].scrollTo({\n top,\n behavior: 'smooth',\n });\n }\n\n navigateToDoc(sibling: string): void {\n this.nextDoc.emit(sibling);\n }\n}\n","<div class=\"documentation-container\" #file>\n @if (content$ | async; as content) {\n <div class=\"documentation-content\">\n <div class=\"main-content\">\n @for (section of content.sections; track $index) {\n @if (section.type === 'markdown') {\n <div class=\"injected-html\" [innerHTML]=\"section.html\"></div>\n } @else if (section.type === 'escaped') {\n <ng-container\n *ngIf=\"escapedContentTemplateRef\"\n [ngTemplateOutlet]=\"escapedContentTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: section }\"\n >\n </ng-container>\n }\n }\n @if (showPrevNextNavigation) {\n <hsi-adk-navigation-siblings\n class=\"nav-siblings\"\n [siblings]=\"content.siblings\"\n (nextDoc)=\"navigateToDoc($event)\"\n ></hsi-adk-navigation-siblings>\n }\n </div>\n <hsi-adk-document-index\n class=\"document-index\"\n [headings]=\"content.headings.slice(1)\"\n (activeHeading)=\"scrollToHeading($event)\"\n ></hsi-adk-document-index>\n </div>\n }\n</div>\n","import { SimpleChanges } from '@angular/core';\nimport { get, isEqual } from 'lodash-es';\n\n/**\n * A utility class for detecting changes to objects in Angular's ngOnChanges lifecycle hook.\n */\nexport class NgOnChangesUtilities {\n /**\n * Checks if an input object has changed since the first change.\n * @param changes - The SimpleChanges object containing the changes.\n * @param inputName - The name of the input property to check.\n * @param property - Optional specific property to check within the input object.\n * @returns True if the input object has changed since the first change, otherwise false.\n */\n static inputObjectChangedNotFirstTime(\n changes: SimpleChanges,\n inputName: string,\n property?: string\n ): boolean {\n return (\n changes[inputName] !== undefined &&\n !changes[inputName].isFirstChange() &&\n this.inputObjectChanged(changes, inputName, property)\n );\n }\n\n /**\n * Checks if an input object has changed.\n * @param changes - The SimpleChanges object containing the changes.\n * @param inputName - The name of the input property to check.\n * @param property - Optional specific property to check within the input object.\n * @returns True if the input object has changed, otherwise false.\n */\n static inputObjectChanged(\n changes: SimpleChanges,\n inputName: string,\n property?: string\n ): boolean {\n let prevAccessor = `${inputName}.previousValue`;\n let currAccessor = `${inputName}.currentValue`;\n if (property) {\n prevAccessor += `.${property}`;\n currAccessor += `.${property}`;\n }\n return (\n changes[inputName] !== undefined &&\n !isEqual(get(changes, prevAccessor), get(changes, currAccessor))\n );\n }\n}\n","import { NgZone } from '@angular/core';\nimport { Observable, switchMap } from 'rxjs';\n\n/**\n *\n * @param zone: NgZone\n * @returns (source: Observable<T>) => Observable<void>\n *\n * A custom RxJS operator that runs an Angular change detection cycle after the source observable emits, and waits until the change detection cycle is complete before emitting the next value.\n *\n * Note that this is not intended to be used frequently. It is a workaround for cases where you need to ensure that Angular has completed change detection before continuing with the next operation, for example when you need to access a DOM element that is being created through multiple levels of content projection.\n *\n * @example\n * ```ts\n * this.myObservable.pipe(\n * runNgChangeDetectionThen(this.zone),\n * subscribe(() => {\n * console.log('a change detection cycle has completed');\n * })\n * );\n * ```\n */\nexport function runNgChangeDetectionThen<T>(\n zone: NgZone\n): (source: Observable<T>) => Observable<void> {\n return function <T>(source: Observable<T>): Observable<void> {\n return source.pipe(\n switchMap(\n () =>\n new Promise<void>((resolve) => {\n zone.run(() => {\n Promise.resolve().then(() => {\n resolve();\n });\n });\n })\n )\n );\n };\n}\n","export * from './lib/assets';\nexport * from './lib/content-parsing';\nexport * from './lib/core/utilities/index';\nexport * from './lib/documentation-display';\nexport * from './lib/ng-utilities';\nexport const STYLES_PATH = './lib/styles/_index.scss';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["yamlParse","i1.AdkAssetsResource","parse","i1","i2.AdkShikiHighlighter","i1.AdkActiveHeadingTracker","i2","i1.AdkAssetsService","i2.AdkDocumentationConfigParser","i3.AdkMarkdownParser"],"mappings":"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"}
@@ -13,8 +13,8 @@ export declare class AdkDocumentationConfigParser {
13
13
  *
14
14
  * This assumes that the pathFromApp matches a path through the keys of the Nested Object.
15
15
  *
16
- * If the path is 'viz-components/content/items/bars', the config object might look like this:
17
- * viz-components: {
16
+ * If the path is 'viz/content/items/bars', the config object might look like this:
17
+ * viz: {
18
18
  * content: {
19
19
  * items: {
20
20
  * bars: 'bars.md'
@@ -22,14 +22,14 @@ export declare class AdkDocumentationConfigParser {
22
22
  * }
23
23
  * }
24
24
  *
25
- * @param pathFromApp a string representing the path from the application, for example 'viz-components/content/items/bars'
25
+ * @param pathFromApp a string representing the path from the application, for example 'viz/content/items/bars'
26
26
  * @param config a nested object representing the configuration
27
27
  * @returns a string representing the file path
28
28
  */
29
29
  getPathToFile(pathFromApp: string, config: AdkNestedObject, basePath: string): string;
30
30
  /**
31
31
  *
32
- * @param pathParts a string array of path parts, for example ['viz-components', 'content', 'items', 'bars]
32
+ * @param pathParts a string array of path parts, for example ['viz', 'content', 'items', 'bars]
33
33
  * @param config a nested object representing the configuration
34
34
  * @returns a string representing the file name
35
35
  */
package/package.json CHANGED
@@ -2,8 +2,8 @@
2
2
  "name": "@mathstack/app-kit",
3
3
  "license": "MIT",
4
4
  "peerDependencies": {
5
- "@angular/common": "^19.2.2",
6
- "@angular/core": "^19.2.2",
5
+ "@angular/common": ">=19.0.0 <21.0.0",
6
+ "@angular/core": ">=19.0.0 <21.0.0",
7
7
  "hast-util-from-parse5": "^8.0.1",
8
8
  "html-entities": "^2.5.2",
9
9
  "lodash-es": "^4.17.21",
@@ -35,7 +35,12 @@
35
35
  }
36
36
  },
37
37
  "sideEffects": false,
38
- "version": "1.1.1",
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "https://github.com/mathematica-pub/frontend-shared-packages.git",
41
+ "directory": "libs/app-kit"
42
+ },
43
+ "version": "1.1.2",
39
44
  "module": "fesm2022/mathstack-app-kit.mjs",
40
45
  "typings": "index.d.ts"
41
46
  }