@skyux/docs-tools 13.0.0-alpha.8 → 13.0.0-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.
@@ -22,7 +22,7 @@ import hlXml from 'highlight.js/lib/languages/xml';
22
22
  import { HttpClient } from '@angular/common/http';
23
23
  import { SkyAppAssetsService } from '@skyux/assets';
24
24
  import stackblitz from '@stackblitz/sdk';
25
- import { firstValueFrom, BehaviorSubject, fromEvent, debounceTime, map, distinctUntilChanged } from 'rxjs';
25
+ import { firstValueFrom, BehaviorSubject, take, fromEvent, debounceTime, map, distinctUntilChanged } from 'rxjs';
26
26
  import { RouterLink, ActivatedRoute } from '@angular/router';
27
27
  import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
28
28
  import { isFunctionDefinition, isPipeDefinition, isDirectiveDefinition, getDocumentationGroup } from '@skyux/manifest';
@@ -948,7 +948,7 @@ class SkyDocsHeadingAnchorComponent {
948
948
  this.#anchorSvc?.unregister(this);
949
949
  }
950
950
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: SkyDocsHeadingAnchorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
951
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.5", type: SkyDocsHeadingAnchorComponent, isStandalone: true, selector: "sky-docs-heading-anchor", inputs: { anchorId: { classPropertyName: "anchorId", publicName: "anchorId", isSignal: true, isRequired: true, transformFunction: null }, headingText: { classPropertyName: "headingText", publicName: "headingText", isSignal: true, isRequired: true, transformFunction: null }, headingTextFormat: { classPropertyName: "headingTextFormat", publicName: "headingTextFormat", isSignal: true, isRequired: false, transformFunction: null }, categoryColor: { classPropertyName: "categoryColor", publicName: "categoryColor", isSignal: true, isRequired: false, transformFunction: null }, categoryTemplate: { classPropertyName: "categoryTemplate", publicName: "categoryTemplate", isSignal: true, isRequired: false, transformFunction: null }, categoryText: { classPropertyName: "categoryText", publicName: "categoryText", isSignal: true, isRequired: false, transformFunction: null }, headingLevel: { classPropertyName: "headingLevel", publicName: "headingLevel", isSignal: true, isRequired: false, transformFunction: null }, strikethrough: { classPropertyName: "strikethrough", publicName: "strikethrough", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@switch (headingLevel()) {\n @case (1) {\n <h1 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h1>\n }\n @case (2) {\n <h2 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h2>\n }\n @case (3) {\n <h3 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h3>\n }\n @case (4) {\n <h4 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h4>\n }\n @case (5) {\n <h5 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h5>\n }\n @case (6) {\n <h6 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h6>\n }\n}\n\n@if (categoryColor(); as categoryColor) {\n <sky-docs-category-tag [color]=\"categoryColor\">\n @if (categoryTemplate(); as categoryTemplate) {\n <ng-container [ngTemplateOutlet]=\"categoryTemplate\" />\n } @else {\n {{ categoryText() }}\n }\n </sky-docs-category-tag>\n}\n\n<ng-content />\n\n<ng-template #headingTextRef>\n <span class=\"sky-docs-heading-anchor-position\" [attr.id]=\"anchorId()\"></span>\n <a\n class=\"sky-docs-heading-anchor-link\"\n queryParamsHandling=\"merge\"\n [fragment]=\"anchorId()\"\n [routerLink]=\"[]\"\n >\n <sky-icon iconName=\"link\" />\n <span class=\"sky-screen-reader-only\"\n >Link for section titled {{ headingText() }}</span\n >\n </a>\n <span skyTrim [class.sky-docs-text-strikethrough]=\"strikethrough()\">\n @if (headingTextFormat() === 'code') {\n <code>{{ headingText() }}</code>\n } @else {\n {{ headingText() }}\n }\n </span>\n</ng-template>\n", styles: [":host{display:flex;flex-wrap:wrap;align-items:center;gap:10px}:host([id]){padding-top:var(--sky-margin-stacked-xl);margin-top:-1em}.sky-docs-heading-anchor-heading{word-break:break-all;position:relative;margin:0}.sky-docs-heading-anchor-heading:hover .sky-docs-heading-anchor-link{opacity:1}.sky-docs-heading-anchor-link{opacity:0;position:absolute;transition:opacity .25s;display:inline-block;left:-22px}.sky-docs-heading-anchor-position{position:relative;top:calc(-1 * (var(--sky-viewport-top, 0) + var(--sky-margin-stacked-lg)))}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: SkyDocsCategoryTagModule }, { kind: "component", type: SkyDocsCategoryTagComponent, selector: "sky-docs-category-tag", inputs: ["color"] }, { kind: "ngmodule", type: SkyIconModule }, { kind: "component", type: i2.λ1, selector: "sky-icon", inputs: ["iconName", "variant", "iconSize"] }, { kind: "ngmodule", type: SkyTrimModule }, { kind: "directive", type: i5.λ4, selector: "[skyTrim]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
951
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.5", type: SkyDocsHeadingAnchorComponent, isStandalone: true, selector: "sky-docs-heading-anchor", inputs: { anchorId: { classPropertyName: "anchorId", publicName: "anchorId", isSignal: true, isRequired: true, transformFunction: null }, headingText: { classPropertyName: "headingText", publicName: "headingText", isSignal: true, isRequired: true, transformFunction: null }, headingTextFormat: { classPropertyName: "headingTextFormat", publicName: "headingTextFormat", isSignal: true, isRequired: false, transformFunction: null }, categoryColor: { classPropertyName: "categoryColor", publicName: "categoryColor", isSignal: true, isRequired: false, transformFunction: null }, categoryTemplate: { classPropertyName: "categoryTemplate", publicName: "categoryTemplate", isSignal: true, isRequired: false, transformFunction: null }, categoryText: { classPropertyName: "categoryText", publicName: "categoryText", isSignal: true, isRequired: false, transformFunction: null }, headingLevel: { classPropertyName: "headingLevel", publicName: "headingLevel", isSignal: true, isRequired: false, transformFunction: null }, strikethrough: { classPropertyName: "strikethrough", publicName: "strikethrough", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@switch (headingLevel()) {\n @case (1) {\n <h1 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h1>\n }\n @case (2) {\n <h2 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h2>\n }\n @case (3) {\n <h3 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h3>\n }\n @case (4) {\n <h4 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h4>\n }\n @case (5) {\n <h5 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h5>\n }\n @case (6) {\n <h6 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h6>\n }\n}\n\n@if (categoryColor(); as categoryColor) {\n <sky-docs-category-tag [color]=\"categoryColor\">\n @if (categoryTemplate(); as categoryTemplate) {\n <ng-container [ngTemplateOutlet]=\"categoryTemplate\" />\n } @else {\n {{ categoryText() }}\n }\n </sky-docs-category-tag>\n}\n\n<ng-content />\n\n<ng-template #headingTextRef>\n <span class=\"sky-docs-heading-anchor-position\" [attr.id]=\"anchorId()\"></span>\n <a\n class=\"sky-docs-heading-anchor-link\"\n queryParamsHandling=\"merge\"\n [fragment]=\"anchorId()\"\n [routerLink]=\"[]\"\n >\n <sky-icon iconName=\"link\" />\n <span class=\"sky-screen-reader-only\"\n >Link for section titled {{ headingText() }}</span\n >\n </a>\n <span skyTrim [class.sky-docs-text-strikethrough]=\"strikethrough()\">\n @if (headingTextFormat() === 'code') {\n <code>{{ headingText() }}</code>\n } @else {\n {{ headingText() }}\n }\n </span>\n</ng-template>\n", styles: [":host{display:flex;flex-wrap:wrap;align-items:center;gap:10px}:host([id]){padding-top:var(--sky-margin-stacked-xl);margin-top:-1em}.sky-docs-heading-anchor-heading{word-break:break-all;position:relative;margin:0}.sky-docs-heading-anchor-heading:hover .sky-docs-heading-anchor-link{opacity:1}.sky-docs-heading-anchor-link{opacity:0;position:absolute;transition:opacity .25s;display:inline-block;left:-22px}.sky-docs-heading-anchor-position{position:relative;top:calc(-1 * (var(--sky-viewport-top, 0px) + var(--sky-margin-stacked-lg)))}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: SkyDocsCategoryTagModule }, { kind: "component", type: SkyDocsCategoryTagComponent, selector: "sky-docs-category-tag", inputs: ["color"] }, { kind: "ngmodule", type: SkyIconModule }, { kind: "component", type: i2.λ1, selector: "sky-icon", inputs: ["iconName", "variant", "iconSize"] }, { kind: "ngmodule", type: SkyTrimModule }, { kind: "directive", type: i5.λ4, selector: "[skyTrim]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
952
952
  }
953
953
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: SkyDocsHeadingAnchorComponent, decorators: [{
954
954
  type: Component,
@@ -958,7 +958,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImpor
958
958
  SkyDocsCategoryTagModule,
959
959
  SkyIconModule,
960
960
  SkyTrimModule,
961
- ], selector: 'sky-docs-heading-anchor', template: "@switch (headingLevel()) {\n @case (1) {\n <h1 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h1>\n }\n @case (2) {\n <h2 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h2>\n }\n @case (3) {\n <h3 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h3>\n }\n @case (4) {\n <h4 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h4>\n }\n @case (5) {\n <h5 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h5>\n }\n @case (6) {\n <h6 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h6>\n }\n}\n\n@if (categoryColor(); as categoryColor) {\n <sky-docs-category-tag [color]=\"categoryColor\">\n @if (categoryTemplate(); as categoryTemplate) {\n <ng-container [ngTemplateOutlet]=\"categoryTemplate\" />\n } @else {\n {{ categoryText() }}\n }\n </sky-docs-category-tag>\n}\n\n<ng-content />\n\n<ng-template #headingTextRef>\n <span class=\"sky-docs-heading-anchor-position\" [attr.id]=\"anchorId()\"></span>\n <a\n class=\"sky-docs-heading-anchor-link\"\n queryParamsHandling=\"merge\"\n [fragment]=\"anchorId()\"\n [routerLink]=\"[]\"\n >\n <sky-icon iconName=\"link\" />\n <span class=\"sky-screen-reader-only\"\n >Link for section titled {{ headingText() }}</span\n >\n </a>\n <span skyTrim [class.sky-docs-text-strikethrough]=\"strikethrough()\">\n @if (headingTextFormat() === 'code') {\n <code>{{ headingText() }}</code>\n } @else {\n {{ headingText() }}\n }\n </span>\n</ng-template>\n", styles: [":host{display:flex;flex-wrap:wrap;align-items:center;gap:10px}:host([id]){padding-top:var(--sky-margin-stacked-xl);margin-top:-1em}.sky-docs-heading-anchor-heading{word-break:break-all;position:relative;margin:0}.sky-docs-heading-anchor-heading:hover .sky-docs-heading-anchor-link{opacity:1}.sky-docs-heading-anchor-link{opacity:0;position:absolute;transition:opacity .25s;display:inline-block;left:-22px}.sky-docs-heading-anchor-position{position:relative;top:calc(-1 * (var(--sky-viewport-top, 0) + var(--sky-margin-stacked-lg)))}\n"] }]
961
+ ], selector: 'sky-docs-heading-anchor', template: "@switch (headingLevel()) {\n @case (1) {\n <h1 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h1>\n }\n @case (2) {\n <h2 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h2>\n }\n @case (3) {\n <h3 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h3>\n }\n @case (4) {\n <h4 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h4>\n }\n @case (5) {\n <h5 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h5>\n }\n @case (6) {\n <h6 class=\"sky-docs-heading-anchor-heading\">\n <ng-container [ngTemplateOutlet]=\"headingTextRef\" />\n </h6>\n }\n}\n\n@if (categoryColor(); as categoryColor) {\n <sky-docs-category-tag [color]=\"categoryColor\">\n @if (categoryTemplate(); as categoryTemplate) {\n <ng-container [ngTemplateOutlet]=\"categoryTemplate\" />\n } @else {\n {{ categoryText() }}\n }\n </sky-docs-category-tag>\n}\n\n<ng-content />\n\n<ng-template #headingTextRef>\n <span class=\"sky-docs-heading-anchor-position\" [attr.id]=\"anchorId()\"></span>\n <a\n class=\"sky-docs-heading-anchor-link\"\n queryParamsHandling=\"merge\"\n [fragment]=\"anchorId()\"\n [routerLink]=\"[]\"\n >\n <sky-icon iconName=\"link\" />\n <span class=\"sky-screen-reader-only\"\n >Link for section titled {{ headingText() }}</span\n >\n </a>\n <span skyTrim [class.sky-docs-text-strikethrough]=\"strikethrough()\">\n @if (headingTextFormat() === 'code') {\n <code>{{ headingText() }}</code>\n } @else {\n {{ headingText() }}\n }\n </span>\n</ng-template>\n", styles: [":host{display:flex;flex-wrap:wrap;align-items:center;gap:10px}:host([id]){padding-top:var(--sky-margin-stacked-xl);margin-top:-1em}.sky-docs-heading-anchor-heading{word-break:break-all;position:relative;margin:0}.sky-docs-heading-anchor-heading:hover .sky-docs-heading-anchor-link{opacity:1}.sky-docs-heading-anchor-link{opacity:0;position:absolute;transition:opacity .25s;display:inline-block;left:-22px}.sky-docs-heading-anchor-position{position:relative;top:calc(-1 * (var(--sky-viewport-top, 0px) + var(--sky-margin-stacked-lg)))}\n"] }]
962
962
  }] });
963
963
 
964
964
  /**
@@ -1030,6 +1030,7 @@ class SkyDocsTableOfContentsPageComponent {
1030
1030
  #scrollOffset;
1031
1031
  #routeFragment;
1032
1032
  #doc;
1033
+ #delayedScroll;
1033
1034
  constructor() {
1034
1035
  this.#anchors = toSignal(inject(SkyDocsHeadingAnchorService).anchorsChange);
1035
1036
  this.#destroyRef = inject(DestroyRef);
@@ -1051,14 +1052,13 @@ class SkyDocsTableOfContentsPageComponent {
1051
1052
  return link;
1052
1053
  }) ?? []);
1053
1054
  });
1054
- this.#routeFragment = toSignal(inject(ActivatedRoute).fragment);
1055
+ this.#routeFragment = toSignal(inject(ActivatedRoute).fragment.pipe(take(1)));
1055
1056
  this.#doc = inject(DOCUMENT);
1056
1057
  effect(() => {
1057
1058
  const fragment = this.#routeFragment();
1058
- const links = this.links();
1059
- if (fragment &&
1060
- links.some((link) => link.anchorId === fragment && !link.active)) {
1061
- setTimeout(() => this.#doc.getElementById(fragment)?.scrollIntoView());
1059
+ const anchors = this.#anchors();
1060
+ if (fragment && anchors?.some((anchor) => anchor.anchorId === fragment)) {
1061
+ this.#delayedScroll = setTimeout(() => this.#doc.getElementById(fragment)?.scrollIntoView());
1062
1062
  }
1063
1063
  });
1064
1064
  }
@@ -1068,6 +1068,7 @@ class SkyDocsTableOfContentsPageComponent {
1068
1068
  fromEvent(scrollEl, 'scroll')
1069
1069
  .pipe(debounceTime(10), map(() => this.#getActiveLink()), distinctUntilChanged(), takeUntilDestroyed(this.#destroyRef))
1070
1070
  .subscribe((activeLink) => {
1071
+ clearTimeout(this.#delayedScroll);
1071
1072
  this.#activeAnchorIdOnScroll.set(activeLink);
1072
1073
  });
1073
1074
  }