@mathstack/app-kit 0.0.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +31 -0
- package/baseline-styles/_css-reset.scss +118 -0
- package/baseline-styles/_grid.scss +4 -0
- package/baseline-styles/_index.scss +6 -0
- package/baseline-styles/_sass-utils.scss +23 -0
- package/baseline-styles/_themes.scss +19 -0
- package/baseline-styles/_typography.scss +232 -0
- package/baseline-styles/_webkit-scrollbar.scss +22 -0
- package/baseline-styles/theming/_colors.scss +46 -0
- package/baseline-styles/theming/_index.scss +2 -0
- package/baseline-styles/theming/_typography.scss +32 -0
- package/fesm2022/mathstack-app-kit.mjs +846 -0
- package/fesm2022/mathstack-app-kit.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/assets/assets-resource.d.ts +11 -0
- package/lib/assets/assets-service.d.ts +35 -0
- package/lib/assets/index.d.ts +1 -0
- package/lib/content-parsing/index.d.ts +2 -0
- package/lib/content-parsing/markdown-parser.d.ts +54 -0
- package/lib/content-parsing/shiki-highlighter.d.ts +77 -0
- package/lib/core/utilities/deep-merge.d.ts +1 -0
- package/lib/core/utilities/index.d.ts +2 -0
- package/lib/core/utilities/safe-assign.d.ts +18 -0
- package/lib/documentation-display/active-heading-tracker.d.ts +14 -0
- package/lib/documentation-display/document-index/document-index.component.d.ts +17 -0
- package/lib/documentation-display/documentation-config-parser.d.ts +41 -0
- package/lib/documentation-display/documentation-content-service.d.ts +50 -0
- package/lib/documentation-display/documentation-display.component.d.ts +39 -0
- package/lib/documentation-display/index.d.ts +6 -0
- package/lib/documentation-display/navigation-siblings/navigation-siblings.component.d.ts +18 -0
- package/lib/ng-utilities/index.d.ts +2 -0
- package/lib/ng-utilities/ng-on-changes.d.ts +22 -0
- package/lib/ng-utilities/run-ng-change-detection-then.d.ts +22 -0
- package/package.json +46 -0
- package/public-api.d.ts +6 -0
|
@@ -0,0 +1 @@
|
|
|
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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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { AdkAssetResponse } from './assets-service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class AdkAssetsResource {
|
|
6
|
+
private http;
|
|
7
|
+
constructor(http: HttpClient);
|
|
8
|
+
getAsset(path: string, responseType: AdkAssetResponse): Observable<unknown>;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AdkAssetsResource, never>;
|
|
10
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AdkAssetsResource>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { AdkAssetsResource } from './assets-resource';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare enum AdkAssetResponse {
|
|
5
|
+
ArrayBuffer = "arraybuffer",
|
|
6
|
+
Blob = "blob",
|
|
7
|
+
Json = "json",
|
|
8
|
+
Text = "text"
|
|
9
|
+
}
|
|
10
|
+
export declare class AdkAssetsService {
|
|
11
|
+
private resource;
|
|
12
|
+
private assets;
|
|
13
|
+
private assetsPath;
|
|
14
|
+
constructor(resource: AdkAssetsResource);
|
|
15
|
+
setAssetsPath(path: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* Loads an asset from the assets folder.
|
|
18
|
+
*
|
|
19
|
+
* @param assetName The path to the asset from assets/. Should not include leading slash.
|
|
20
|
+
* @returns An observable that emits the asset data.
|
|
21
|
+
*/
|
|
22
|
+
getAsset(assetName: string, responseType: AdkAssetResponse): Observable<unknown>;
|
|
23
|
+
private fetchAsset;
|
|
24
|
+
/**
|
|
25
|
+
* Loads multiple assets concurrently.
|
|
26
|
+
*
|
|
27
|
+
* @param assetNames An array of asset names to load.
|
|
28
|
+
* @returns An observable that emits an array of asset data.
|
|
29
|
+
*/
|
|
30
|
+
getAssets(assetNames: string[], responseType: AdkAssetResponse): Observable<unknown[]>;
|
|
31
|
+
parseCsv<T>(str: string): T[];
|
|
32
|
+
parseYaml<T>(str: string): T;
|
|
33
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AdkAssetsService, never>;
|
|
34
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AdkAssetsService>;
|
|
35
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './assets-service';
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { BundledLanguage } from 'shiki/langs';
|
|
4
|
+
import { BundledTheme } from 'shiki/themes';
|
|
5
|
+
import { HighlighterGeneric } from 'shiki/types.mjs';
|
|
6
|
+
import { unified } from 'unified';
|
|
7
|
+
import { AdkShikiHighlighter, ShikiTheme } from './shiki-highlighter';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export interface AdkParsedContentSection<Content = string> {
|
|
10
|
+
type: string;
|
|
11
|
+
content: Content;
|
|
12
|
+
html?: SafeHtml;
|
|
13
|
+
headers: {
|
|
14
|
+
id: string;
|
|
15
|
+
text: string;
|
|
16
|
+
level: number;
|
|
17
|
+
}[];
|
|
18
|
+
}
|
|
19
|
+
export interface AdkMarkdownParsingOptions {
|
|
20
|
+
highlighter?: AdkShikiHighlighterOptions;
|
|
21
|
+
gfm?: boolean;
|
|
22
|
+
headingIds?: boolean;
|
|
23
|
+
headingFragmentLinks?: AdkHeadingFragmentLinkOptions;
|
|
24
|
+
}
|
|
25
|
+
export interface AdkShikiHighlighterOptions {
|
|
26
|
+
highlighter?: HighlighterGeneric<BundledLanguage, BundledTheme>;
|
|
27
|
+
theme?: ShikiTheme;
|
|
28
|
+
type?: 'html' | 'markdown';
|
|
29
|
+
ignoreUnknownLanguage?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface AdkHeadingFragmentLinkOptions {
|
|
32
|
+
createLinks?: boolean;
|
|
33
|
+
behavior?: 'append' | 'prepend' | 'wrap' | 'before' | 'after';
|
|
34
|
+
}
|
|
35
|
+
export declare class AdkMarkdownParser {
|
|
36
|
+
private sanitizer;
|
|
37
|
+
private shikiHighlighter;
|
|
38
|
+
parser: typeof unified;
|
|
39
|
+
constructor(sanitizer: DomSanitizer, shikiHighlighter: AdkShikiHighlighter);
|
|
40
|
+
parse(markdown: string, options?: AdkMarkdownParsingOptions): Observable<AdkParsedContentSection[]>;
|
|
41
|
+
private getSections;
|
|
42
|
+
private parseSection;
|
|
43
|
+
getHeaders(markdown: string): {
|
|
44
|
+
id: string;
|
|
45
|
+
text: string;
|
|
46
|
+
level: number;
|
|
47
|
+
}[];
|
|
48
|
+
parseComponent(content: string): {
|
|
49
|
+
name: string;
|
|
50
|
+
pathTo: string;
|
|
51
|
+
};
|
|
52
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AdkMarkdownParser, never>;
|
|
53
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AdkMarkdownParser>;
|
|
54
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Root } from 'hast';
|
|
2
|
+
import { BundledLanguage } from 'shiki/langs';
|
|
3
|
+
import { BundledTheme } from 'shiki/themes';
|
|
4
|
+
import { HighlighterGeneric } from 'shiki/types.mjs';
|
|
5
|
+
import { AdkShikiHighlighterOptions } from './markdown-parser';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare const defaultHighlighterLangs: string[];
|
|
8
|
+
export declare enum ShikiTheme {
|
|
9
|
+
Andromeeda = "andromeeda",
|
|
10
|
+
AuroraX = "aurora-x",
|
|
11
|
+
AyuDark = "ayu-dark",
|
|
12
|
+
CatppuccinFrappe = "catppuccin-frappe",
|
|
13
|
+
CatppuccinLatte = "catppuccin-latte",
|
|
14
|
+
CatppuccinMacchiato = "catppuccin-macchiato",
|
|
15
|
+
CatppuccinMocha = "catppuccin-mocha",
|
|
16
|
+
DarkPlus = "dark-plus",
|
|
17
|
+
DraculaTheme = "dracula",
|
|
18
|
+
DraculaThemeSoft = "dracula-soft",
|
|
19
|
+
EverforestDark = "everforest-dark",
|
|
20
|
+
EverforestLight = "everforest-light",
|
|
21
|
+
GitHubDark = "github-dark",
|
|
22
|
+
GitHubDarkDefault = "github-dark-default",
|
|
23
|
+
GitHubDarkDimmed = "github-dark-dimmed",
|
|
24
|
+
GitHubDarkHighContrast = "github-dark-high-contrast",
|
|
25
|
+
GitHubLight = "github-light",
|
|
26
|
+
GitHubLightDefault = "github-light-default",
|
|
27
|
+
GitHubLightHighContrast = "github-light-high-contrast",
|
|
28
|
+
Houston = "houston",
|
|
29
|
+
LaserWave = "laserwave",
|
|
30
|
+
LightPlus = "light-plus",
|
|
31
|
+
MaterialTheme = "material-theme",
|
|
32
|
+
MaterialThemeDarker = "material-theme-darker",
|
|
33
|
+
MaterialThemeLighter = "material-theme-lighter",
|
|
34
|
+
MaterialThemeOcean = "material-theme-ocean",
|
|
35
|
+
MaterialThemePalenight = "material-theme-palenight",
|
|
36
|
+
MinDark = "min-dark",
|
|
37
|
+
MinLight = "min-light",
|
|
38
|
+
Monokai = "monokai",
|
|
39
|
+
NightOwl = "night-owl",
|
|
40
|
+
Nord = "nord",
|
|
41
|
+
OneDarkPro = "one-dark-pro",
|
|
42
|
+
OneLight = "one-light",
|
|
43
|
+
Plastic = "plastic",
|
|
44
|
+
Poimandres = "poimandres",
|
|
45
|
+
Red = "red",
|
|
46
|
+
RosePine = "rose-pine",
|
|
47
|
+
RosePineDawn = "rose-pine-dawn",
|
|
48
|
+
RosePineMoon = "rose-pine-moon",
|
|
49
|
+
SlackDark = "slack-dark",
|
|
50
|
+
SlackOchin = "slack-ochin",
|
|
51
|
+
SnazzyLight = "snazzy-light",
|
|
52
|
+
SolarizedDark = "solarized-dark",
|
|
53
|
+
SolarizedLight = "solarized-light",
|
|
54
|
+
Synthwave84 = "synthwave-84",
|
|
55
|
+
TokyoNight = "tokyo-night",
|
|
56
|
+
Vesper = "vesper",
|
|
57
|
+
VitesseBlack = "vitesse-black",
|
|
58
|
+
VitesseDark = "vitesse-dark",
|
|
59
|
+
VitesseLight = "vitesse-light"
|
|
60
|
+
}
|
|
61
|
+
export declare class AdkShikiHighlighter {
|
|
62
|
+
private highlighterPromise;
|
|
63
|
+
/**
|
|
64
|
+
* Initialize the highlighter. This should only be called one in an application.
|
|
65
|
+
*
|
|
66
|
+
* @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.
|
|
67
|
+
*
|
|
68
|
+
* @returns void
|
|
69
|
+
*/
|
|
70
|
+
initialize(themes: ShikiTheme[], langs?: string[]): Promise<void>;
|
|
71
|
+
getHighlighter(): Promise<HighlighterGeneric<BundledLanguage, BundledTheme>>;
|
|
72
|
+
remarkHighlight(options: AdkShikiHighlighterOptions): (tree: Root) => void;
|
|
73
|
+
rehypeHighlight(options: AdkShikiHighlighterOptions): (tree: Root) => void;
|
|
74
|
+
getLanguage(node: any): string;
|
|
75
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AdkShikiHighlighter, never>;
|
|
76
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AdkShikiHighlighter>;
|
|
77
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function deepMerge<T>(target: T, source: Partial<T>): T;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safely assigns properties from a source object to a target object.
|
|
3
|
+
*
|
|
4
|
+
* Copies all own, enumerable properties from `source` to `target`,
|
|
5
|
+
* except when the target already has a property of the same name that is a function.
|
|
6
|
+
*
|
|
7
|
+
* Logs a warning for each skipped property if `logConflicts` is true.
|
|
8
|
+
*
|
|
9
|
+
* @template TTarget The type of the target object.
|
|
10
|
+
* @template TSource The type of the source object.
|
|
11
|
+
* @param target The object to assign properties to.
|
|
12
|
+
* @param source The object providing properties to assign.
|
|
13
|
+
* @param logConflicts If true, logs when a method/property on the target prevents assignment. Default is false.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* safeAssign(this, { log: 'hello' }, true);
|
|
17
|
+
*/
|
|
18
|
+
export declare function safeAssign<TTarget extends object, TSource extends object>(target: TTarget, source: TSource, logConflicts?: boolean): void;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { DestroyRef, NgZone } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class AdkActiveHeadingTracker {
|
|
4
|
+
private ngZone;
|
|
5
|
+
private activeHeadingId;
|
|
6
|
+
activeHeadingId$: import("rxjs").Observable<string>;
|
|
7
|
+
constructor(ngZone: NgZone);
|
|
8
|
+
initScrollListener(contentEl: HTMLElement, destroyRef: DestroyRef): void;
|
|
9
|
+
private findActiveHeading;
|
|
10
|
+
setActiveHeading(heading: HTMLHeadingElement): void;
|
|
11
|
+
scrollToTop(): void;
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AdkActiveHeadingTracker, never>;
|
|
13
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AdkActiveHeadingTracker>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { AdkActiveHeadingTracker } from '../active-heading-tracker';
|
|
3
|
+
import { AdkHtmlHeader } from '../documentation-content-service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class AdkDocumentIndexComponent {
|
|
6
|
+
activeHeadingTracker: AdkActiveHeadingTracker;
|
|
7
|
+
headings: AdkHtmlHeader[];
|
|
8
|
+
activeHeading: EventEmitter<{
|
|
9
|
+
heading: AdkHtmlHeader;
|
|
10
|
+
event: KeyboardEvent | PointerEvent | MouseEvent | Event;
|
|
11
|
+
}>;
|
|
12
|
+
constructor(activeHeadingTracker: AdkActiveHeadingTracker);
|
|
13
|
+
setActiveHeading(event: KeyboardEvent | PointerEvent | MouseEvent | Event, heading: AdkHtmlHeader): void;
|
|
14
|
+
scrollToTop(): void;
|
|
15
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AdkDocumentIndexComponent, never>;
|
|
16
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AdkDocumentIndexComponent, "hsi-adk-document-index", never, { "headings": { "alias": "headings"; "required": false; }; }, { "activeHeading": "activeHeading"; }, never, never, true, never>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export interface AdkNestedObject {
|
|
3
|
+
[key: string]: string | AdkNestedObject;
|
|
4
|
+
}
|
|
5
|
+
export interface AdkDocumentationNavigationSiblings {
|
|
6
|
+
previous: string | undefined;
|
|
7
|
+
next: string | undefined;
|
|
8
|
+
}
|
|
9
|
+
export declare class AdkDocumentationConfigParser {
|
|
10
|
+
basePath: string;
|
|
11
|
+
/**
|
|
12
|
+
* This method takes a path from the application and a configuration object, and returns a path to a file that will be fetched.
|
|
13
|
+
*
|
|
14
|
+
* This assumes that the pathFromApp matches a path through the keys of the Nested Object.
|
|
15
|
+
*
|
|
16
|
+
* If the path is 'viz/content/items/bars', the config object might look like this:
|
|
17
|
+
* viz: {
|
|
18
|
+
* content: {
|
|
19
|
+
* items: {
|
|
20
|
+
* bars: 'bars.md'
|
|
21
|
+
* }
|
|
22
|
+
* }
|
|
23
|
+
* }
|
|
24
|
+
*
|
|
25
|
+
* @param pathFromApp a string representing the path from the application, for example 'viz/content/items/bars'
|
|
26
|
+
* @param config a nested object representing the configuration
|
|
27
|
+
* @returns a string representing the file path
|
|
28
|
+
*/
|
|
29
|
+
getPathToFile(pathFromApp: string, config: AdkNestedObject, basePath: string): string;
|
|
30
|
+
/**
|
|
31
|
+
*
|
|
32
|
+
* @param pathParts a string array of path parts, for example ['viz', 'content', 'items', 'bars]
|
|
33
|
+
* @param config a nested object representing the configuration
|
|
34
|
+
* @returns a string representing the file name
|
|
35
|
+
*/
|
|
36
|
+
private getFileNameFromPath;
|
|
37
|
+
findPreviousAndNextByPath(obj: AdkNestedObject, targetPath: string): AdkDocumentationNavigationSiblings;
|
|
38
|
+
flattenObjectWithPath(obj: AdkNestedObject, prefix?: string): string[];
|
|
39
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AdkDocumentationConfigParser, never>;
|
|
40
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AdkDocumentationConfigParser>;
|
|
41
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { AdkAssetsService } from '../assets/assets-service';
|
|
3
|
+
import { AdkMarkdownParser, AdkMarkdownParsingOptions, AdkParsedContentSection } from '../content-parsing';
|
|
4
|
+
import { AdkDocumentationConfigParser, AdkDocumentationNavigationSiblings, AdkNestedObject } from './documentation-config-parser';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export interface AdkDocsConfig {
|
|
7
|
+
title: string;
|
|
8
|
+
items: AdkFilesConfig;
|
|
9
|
+
}
|
|
10
|
+
export interface AdkFilesConfig {
|
|
11
|
+
[key: string]: AdkFilesItem;
|
|
12
|
+
}
|
|
13
|
+
export type AdkFilesItem = string | null | AdkFilesConfig;
|
|
14
|
+
export interface AdkParsedMarkdownFile<Content = string> {
|
|
15
|
+
sections: AdkParsedContentSection<Content>[];
|
|
16
|
+
headings: AdkHtmlHeader[];
|
|
17
|
+
}
|
|
18
|
+
export interface AdkParsedDocumentation<Content = string> extends AdkParsedMarkdownFile<Content> {
|
|
19
|
+
siblings: AdkDocumentationNavigationSiblings;
|
|
20
|
+
}
|
|
21
|
+
export interface AdkHtmlHeader {
|
|
22
|
+
id: string;
|
|
23
|
+
level: number;
|
|
24
|
+
text: string;
|
|
25
|
+
}
|
|
26
|
+
export interface AdkDocumentationContentOptions {
|
|
27
|
+
fileConfig: AdkNestedObject;
|
|
28
|
+
basePath: string;
|
|
29
|
+
parsingOptions?: AdkMarkdownParsingOptions;
|
|
30
|
+
}
|
|
31
|
+
export declare class AdkDocumentationContentService {
|
|
32
|
+
private assetsService;
|
|
33
|
+
private docsConfigParser;
|
|
34
|
+
private markdownParser;
|
|
35
|
+
private files;
|
|
36
|
+
constructor(assetsService: AdkAssetsService, docsConfigParser: AdkDocumentationConfigParser, markdownParser: AdkMarkdownParser);
|
|
37
|
+
/**
|
|
38
|
+
* This service requires the consuming app to provide the AdkDocumentationDisplayService, the AdkAssetsService, and the AdkDocumentationConfigParser at the level at which this service is configured.
|
|
39
|
+
*
|
|
40
|
+
* OPTIONAL: If the consuming app wants to use a different assets directory, they can pass it in here.
|
|
41
|
+
*/
|
|
42
|
+
initialize(assetsDirectory?: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* Assumes that the content path matches
|
|
45
|
+
*/
|
|
46
|
+
getContentForCurrentContentPath(contentPath$: Observable<string>, options: AdkDocumentationContentOptions): Observable<AdkParsedDocumentation>;
|
|
47
|
+
private getParsedMarkdownFile;
|
|
48
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AdkDocumentationContentService, never>;
|
|
49
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AdkDocumentationContentService>;
|
|
50
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { AfterViewInit, DestroyRef, ElementRef, EventEmitter, NgZone, OnInit, TemplateRef } from '@angular/core';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { ShikiTheme } from '../content-parsing';
|
|
4
|
+
import { AdkActiveHeadingTracker } from './active-heading-tracker';
|
|
5
|
+
import { AdkNestedObject } from './documentation-config-parser';
|
|
6
|
+
import { AdkDocumentationContentService, AdkHtmlHeader, AdkParsedDocumentation } from './documentation-content-service';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export declare class AdkDocumentationDisplayComponent implements OnInit, AfterViewInit {
|
|
9
|
+
private content;
|
|
10
|
+
private activeHeading;
|
|
11
|
+
private destroyRef;
|
|
12
|
+
private zone;
|
|
13
|
+
private document;
|
|
14
|
+
/**
|
|
15
|
+
* Observable that emits the current content path
|
|
16
|
+
*/
|
|
17
|
+
contentPath$: Observable<string>;
|
|
18
|
+
fileConfig: AdkNestedObject;
|
|
19
|
+
highlightTheme: ShikiTheme;
|
|
20
|
+
pathFromAssetsToFile: string;
|
|
21
|
+
showPrevNextNavigation: boolean;
|
|
22
|
+
nextDoc: EventEmitter<string>;
|
|
23
|
+
file: ElementRef<HTMLDivElement>;
|
|
24
|
+
content$: Observable<AdkParsedDocumentation>;
|
|
25
|
+
escapedContentTemplateRef: TemplateRef<unknown>;
|
|
26
|
+
constructor(content: AdkDocumentationContentService, activeHeading: AdkActiveHeadingTracker, destroyRef: DestroyRef, zone: NgZone, document: Document);
|
|
27
|
+
ngOnInit(): void;
|
|
28
|
+
ngAfterViewInit(): void;
|
|
29
|
+
setContent(): void;
|
|
30
|
+
scrollToHeading(update: {
|
|
31
|
+
heading: AdkHtmlHeader;
|
|
32
|
+
event: KeyboardEvent | PointerEvent | MouseEvent | Event;
|
|
33
|
+
}): void;
|
|
34
|
+
scrollToItemById(item: HTMLHeadingElement, needsChangeDetection?: boolean): void;
|
|
35
|
+
scrollToItem(top: number): void;
|
|
36
|
+
navigateToDoc(sibling: string): void;
|
|
37
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AdkDocumentationDisplayComponent, never>;
|
|
38
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AdkDocumentationDisplayComponent, "hsi-adk-documentation-display", never, { "contentPath$": { "alias": "contentPath$"; "required": false; }; "fileConfig": { "alias": "fileConfig"; "required": false; }; "highlightTheme": { "alias": "highlightTheme"; "required": false; }; "pathFromAssetsToFile": { "alias": "pathFromAssetsToFile"; "required": false; }; "showPrevNextNavigation": { "alias": "showPrevNextNavigation"; "required": false; }; }, { "nextDoc": "nextDoc"; }, ["escapedContentTemplateRef"], never, true, never>;
|
|
39
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './active-heading-tracker';
|
|
2
|
+
export * from './document-index/document-index.component';
|
|
3
|
+
export * from './documentation-config-parser';
|
|
4
|
+
export * from './documentation-content-service';
|
|
5
|
+
export * from './documentation-display.component';
|
|
6
|
+
export * from './navigation-siblings/navigation-siblings.component';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { TitleCasePipe } from '@angular/common';
|
|
2
|
+
import { EventEmitter, OnChanges } from '@angular/core';
|
|
3
|
+
import { AdkDocumentationNavigationSiblings } from '../documentation-config-parser';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class NavigationSiblingsComponent implements OnChanges {
|
|
6
|
+
private titleCase;
|
|
7
|
+
siblings: AdkDocumentationNavigationSiblings;
|
|
8
|
+
nextDoc: EventEmitter<string>;
|
|
9
|
+
previous: string;
|
|
10
|
+
next: string;
|
|
11
|
+
constructor(titleCase: TitleCasePipe);
|
|
12
|
+
ngOnChanges(): void;
|
|
13
|
+
setDisplayNames(): void;
|
|
14
|
+
getDisplayName(path: string): string;
|
|
15
|
+
navigateToDoc(sibling: string): void;
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NavigationSiblingsComponent, never>;
|
|
17
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NavigationSiblingsComponent, "hsi-adk-navigation-siblings", never, { "siblings": { "alias": "siblings"; "required": false; }; }, { "nextDoc": "nextDoc"; }, never, never, true, never>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SimpleChanges } from '@angular/core';
|
|
2
|
+
/**
|
|
3
|
+
* A utility class for detecting changes to objects in Angular's ngOnChanges lifecycle hook.
|
|
4
|
+
*/
|
|
5
|
+
export declare class NgOnChangesUtilities {
|
|
6
|
+
/**
|
|
7
|
+
* Checks if an input object has changed since the first change.
|
|
8
|
+
* @param changes - The SimpleChanges object containing the changes.
|
|
9
|
+
* @param inputName - The name of the input property to check.
|
|
10
|
+
* @param property - Optional specific property to check within the input object.
|
|
11
|
+
* @returns True if the input object has changed since the first change, otherwise false.
|
|
12
|
+
*/
|
|
13
|
+
static inputObjectChangedNotFirstTime(changes: SimpleChanges, inputName: string, property?: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Checks if an input object has changed.
|
|
16
|
+
* @param changes - The SimpleChanges object containing the changes.
|
|
17
|
+
* @param inputName - The name of the input property to check.
|
|
18
|
+
* @param property - Optional specific property to check within the input object.
|
|
19
|
+
* @returns True if the input object has changed, otherwise false.
|
|
20
|
+
*/
|
|
21
|
+
static inputObjectChanged(changes: SimpleChanges, inputName: string, property?: string): boolean;
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { NgZone } from '@angular/core';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @param zone: NgZone
|
|
6
|
+
* @returns (source: Observable<T>) => Observable<void>
|
|
7
|
+
*
|
|
8
|
+
* 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.
|
|
9
|
+
*
|
|
10
|
+
* 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.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* this.myObservable.pipe(
|
|
15
|
+
* runNgChangeDetectionThen(this.zone),
|
|
16
|
+
* subscribe(() => {
|
|
17
|
+
* console.log('a change detection cycle has completed');
|
|
18
|
+
* })
|
|
19
|
+
* );
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function runNgChangeDetectionThen<T>(zone: NgZone): (source: Observable<T>) => Observable<void>;
|