@ng-doc/app 22.0.0-beta.1 → 22.0.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/README.md +20 -29
- package/fesm2022/ng-doc-app-classes-content-anchor-controller.mjs +363 -0
- package/fesm2022/ng-doc-app-classes-content-anchor-controller.mjs.map +1 -0
- package/fesm2022/ng-doc-app-classes-content-controller.mjs +299 -0
- package/fesm2022/ng-doc-app-classes-content-controller.mjs.map +1 -0
- package/fesm2022/ng-doc-app-classes-default-search-engine.mjs +51 -35
- package/fesm2022/ng-doc-app-classes-default-search-engine.mjs.map +1 -1
- package/fesm2022/ng-doc-app-classes-root-page.mjs.map +1 -1
- package/fesm2022/ng-doc-app-classes-search-engine.mjs.map +1 -1
- package/fesm2022/ng-doc-app-classes.mjs +2 -0
- package/fesm2022/ng-doc-app-classes.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-api-list.mjs +178 -68
- package/fesm2022/ng-doc-app-components-api-list.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-breadcrumb.mjs +13 -10
- package/fesm2022/ng-doc-app-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-code.mjs +152 -25
- package/fesm2022/ng-doc-app-components-code.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-command-palette.mjs +498 -0
- package/fesm2022/ng-doc-app-components-command-palette.mjs.map +1 -0
- package/fesm2022/ng-doc-app-components-copy-button.mjs +38 -21
- package/fesm2022/ng-doc-app-components-copy-button.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-demo-displayer.mjs +36 -29
- package/fesm2022/ng-doc-app-components-demo-displayer.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-demo-pane.mjs +39 -36
- package/fesm2022/ng-doc-app-components-demo-pane.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-demo.mjs +129 -44
- package/fesm2022/ng-doc-app-components-demo.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-fullscreen-button.mjs +12 -9
- package/fesm2022/ng-doc-app-components-fullscreen-button.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-fullscreen-toggle.mjs +79 -0
- package/fesm2022/ng-doc-app-components-fullscreen-toggle.mjs.map +1 -0
- package/fesm2022/ng-doc-app-components-heading-anchor.mjs +54 -21
- package/fesm2022/ng-doc-app-components-heading-anchor.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-image-viewer.mjs +187 -91
- package/fesm2022/ng-doc-app-components-image-viewer.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-kind-icon.mjs +42 -25
- package/fesm2022/ng-doc-app-components-kind-icon.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-link.mjs +12 -9
- package/fesm2022/ng-doc-app-components-link.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-members.mjs +30 -0
- package/fesm2022/ng-doc-app-components-members.mjs.map +1 -0
- package/fesm2022/ng-doc-app-components-mermaid-viewer.mjs +69 -24
- package/fesm2022/ng-doc-app-components-mermaid-viewer.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-navbar.mjs +39 -49
- package/fesm2022/ng-doc-app-components-navbar.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-page-header.mjs +73 -10
- package/fesm2022/ng-doc-app-components-page-header.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-page-link.mjs +123 -31
- package/fesm2022/ng-doc-app-components-page-link.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-page-navigation.mjs +17 -19
- package/fesm2022/ng-doc-app-components-page-navigation.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-page-wrapper.mjs +56 -35
- package/fesm2022/ng-doc-app-components-page-wrapper.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-page.mjs +168 -24
- package/fesm2022/ng-doc-app-components-page.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-playground.mjs +392 -263
- package/fesm2022/ng-doc-app-components-playground.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-root.mjs +48 -31
- package/fesm2022/ng-doc-app-components-root.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-search-result.mjs +22 -21
- package/fesm2022/ng-doc-app-components-search-result.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-search.mjs +64 -33
- package/fesm2022/ng-doc-app-components-search.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-sidebar.mjs +90 -63
- package/fesm2022/ng-doc-app-components-sidebar.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-tabs.mjs +18 -12
- package/fesm2022/ng-doc-app-components-tabs.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-theme-toggle.mjs +33 -21
- package/fesm2022/ng-doc-app-components-theme-toggle.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components-toc.mjs +268 -90
- package/fesm2022/ng-doc-app-components-toc.mjs.map +1 -1
- package/fesm2022/ng-doc-app-components.mjs +3 -1
- package/fesm2022/ng-doc-app-components.mjs.map +1 -1
- package/fesm2022/ng-doc-app-defaults-default-processors.mjs +2 -1
- package/fesm2022/ng-doc-app-defaults-default-processors.mjs.map +1 -1
- package/fesm2022/ng-doc-app-directives-code-highlighter.mjs +14 -7
- package/fesm2022/ng-doc-app-directives-code-highlighter.mjs.map +1 -1
- package/fesm2022/ng-doc-app-directives-members-filter.mjs +276 -0
- package/fesm2022/ng-doc-app-directives-members-filter.mjs.map +1 -0
- package/fesm2022/ng-doc-app-directives-route-active.mjs +34 -30
- package/fesm2022/ng-doc-app-directives-route-active.mjs.map +1 -1
- package/fesm2022/ng-doc-app-directives.mjs +1 -0
- package/fesm2022/ng-doc-app-directives.mjs.map +1 -1
- package/fesm2022/ng-doc-app-helpers.mjs +285 -1
- package/fesm2022/ng-doc-app-helpers.mjs.map +1 -1
- package/fesm2022/ng-doc-app-pipes-decode-uri-component.mjs +6 -4
- package/fesm2022/ng-doc-app-pipes-decode-uri-component.mjs.map +1 -1
- package/fesm2022/ng-doc-app-pipes-extract-value.mjs +6 -4
- package/fesm2022/ng-doc-app-pipes-extract-value.mjs.map +1 -1
- package/fesm2022/ng-doc-app-pipes-filter-by-text.mjs +7 -4
- package/fesm2022/ng-doc-app-pipes-filter-by-text.mjs.map +1 -1
- package/fesm2022/ng-doc-app-pipes-sanitize-html.mjs +8 -5
- package/fesm2022/ng-doc-app-pipes-sanitize-html.mjs.map +1 -1
- package/fesm2022/ng-doc-app-processors-page-processor.mjs +86 -23
- package/fesm2022/ng-doc-app-processors-page-processor.mjs.map +1 -1
- package/fesm2022/ng-doc-app-processors-processors-tooltip.mjs +26 -25
- package/fesm2022/ng-doc-app-processors-processors-tooltip.mjs.map +1 -1
- package/fesm2022/ng-doc-app-processors-processors.mjs +12 -1
- package/fesm2022/ng-doc-app-processors-processors.mjs.map +1 -1
- package/fesm2022/ng-doc-app-providers-ng-doc-app.mjs +31 -2
- package/fesm2022/ng-doc-app-providers-ng-doc-app.mjs.map +1 -1
- package/fesm2022/ng-doc-app-services-content-scroll-intent.mjs +122 -0
- package/fesm2022/ng-doc-app-services-content-scroll-intent.mjs.map +1 -0
- package/fesm2022/ng-doc-app-services-content-state.mjs +57 -0
- package/fesm2022/ng-doc-app-services-content-state.mjs.map +1 -0
- package/fesm2022/ng-doc-app-services-fullscreen-route.mjs +74 -0
- package/fesm2022/ng-doc-app-services-fullscreen-route.mjs.map +1 -0
- package/fesm2022/ng-doc-app-services-highlighter.mjs +83 -14
- package/fesm2022/ng-doc-app-services-highlighter.mjs.map +1 -1
- package/fesm2022/ng-doc-app-services-route-preloader.mjs +360 -0
- package/fesm2022/ng-doc-app-services-route-preloader.mjs.map +1 -0
- package/fesm2022/ng-doc-app-services-shortcuts.mjs +214 -0
- package/fesm2022/ng-doc-app-services-shortcuts.mjs.map +1 -0
- package/fesm2022/ng-doc-app-services-sidebar.mjs +59 -25
- package/fesm2022/ng-doc-app-services-sidebar.mjs.map +1 -1
- package/fesm2022/ng-doc-app-services-store.mjs +8 -8
- package/fesm2022/ng-doc-app-services-store.mjs.map +1 -1
- package/fesm2022/ng-doc-app-services-theme.mjs +32 -12
- package/fesm2022/ng-doc-app-services-theme.mjs.map +1 -1
- package/fesm2022/ng-doc-app-services.mjs +143 -0
- package/fesm2022/ng-doc-app-services.mjs.map +1 -1
- package/fesm2022/ng-doc-app-tokens.mjs +7 -28
- package/fesm2022/ng-doc-app-tokens.mjs.map +1 -1
- package/fesm2022/ng-doc-app-type-controls-boolean-control.mjs +18 -9
- package/fesm2022/ng-doc-app-type-controls-boolean-control.mjs.map +1 -1
- package/fesm2022/ng-doc-app-type-controls-number-control.mjs +12 -9
- package/fesm2022/ng-doc-app-type-controls-number-control.mjs.map +1 -1
- package/fesm2022/ng-doc-app-type-controls-string-control.mjs +12 -9
- package/fesm2022/ng-doc-app-type-controls-string-control.mjs.map +1 -1
- package/fesm2022/ng-doc-app-type-controls-type-alias-control.mjs +22 -16
- package/fesm2022/ng-doc-app-type-controls-type-alias-control.mjs.map +1 -1
- package/package.json +74 -32
- package/styles/global.css +1129 -205
- package/styles/main.css +1129 -205
- package/styles/themes/dark.css +78 -56
- package/types/ng-doc-app-classes-content-anchor-controller.d.ts +54 -0
- package/types/ng-doc-app-classes-content-controller.d.ts +94 -0
- package/types/ng-doc-app-classes-default-search-engine.d.ts +9 -1
- package/types/ng-doc-app-classes-root-page.d.ts +6 -1
- package/types/ng-doc-app-classes-search-engine.d.ts +5 -0
- package/types/ng-doc-app-classes.d.ts +2 -0
- package/types/ng-doc-app-components-api-list.d.ts +69 -20
- package/types/ng-doc-app-components-breadcrumb.d.ts +8 -3
- package/types/ng-doc-app-components-code.d.ts +46 -12
- package/types/ng-doc-app-components-command-palette.d.ts +147 -0
- package/types/ng-doc-app-components-copy-button.d.ts +18 -6
- package/types/ng-doc-app-components-demo-displayer.d.ts +23 -10
- package/types/ng-doc-app-components-demo-pane.d.ts +19 -15
- package/types/ng-doc-app-components-demo.d.ts +62 -15
- package/types/ng-doc-app-components-fullscreen-button.d.ts +4 -2
- package/types/ng-doc-app-components-fullscreen-toggle.d.ts +24 -0
- package/types/ng-doc-app-components-heading-anchor.d.ts +26 -7
- package/types/ng-doc-app-components-image-viewer.d.ts +71 -7
- package/types/ng-doc-app-components-kind-icon.d.ts +28 -7
- package/types/ng-doc-app-components-link.d.ts +6 -2
- package/types/ng-doc-app-components-members.d.ts +13 -0
- package/types/ng-doc-app-components-mermaid-viewer.d.ts +21 -6
- package/types/ng-doc-app-components-navbar.d.ts +25 -15
- package/types/ng-doc-app-components-page-header.d.ts +28 -4
- package/types/ng-doc-app-components-page-link.d.ts +34 -15
- package/types/ng-doc-app-components-page-navigation.d.ts +10 -5
- package/types/ng-doc-app-components-page-wrapper.d.ts +35 -11
- package/types/ng-doc-app-components-page.d.ts +57 -6
- package/types/ng-doc-app-components-playground.d.ts +146 -78
- package/types/ng-doc-app-components-root.d.ts +28 -7
- package/types/ng-doc-app-components-search-result.d.ts +14 -6
- package/types/ng-doc-app-components-search.d.ts +19 -7
- package/types/ng-doc-app-components-tabs.d.ts +13 -4
- package/types/ng-doc-app-components-theme-toggle.d.ts +18 -5
- package/types/ng-doc-app-components-toc.d.ts +76 -29
- package/types/ng-doc-app-components.d.ts +3 -1
- package/types/ng-doc-app-directives-code-highlighter.d.ts +8 -4
- package/types/ng-doc-app-directives-members-filter.d.ts +61 -0
- package/types/ng-doc-app-directives-route-active.d.ts +21 -7
- package/types/ng-doc-app-directives.d.ts +1 -0
- package/types/ng-doc-app-helpers.d.ts +124 -3
- package/types/ng-doc-app-interfaces.d.ts +48 -28
- package/types/ng-doc-app-pipes-decode-uri-component.d.ts +3 -0
- package/types/ng-doc-app-pipes-extract-value.d.ts +3 -0
- package/types/ng-doc-app-pipes-filter-by-text.d.ts +4 -0
- package/types/ng-doc-app-pipes-sanitize-html.d.ts +4 -2
- package/types/ng-doc-app-processors-page-processor.d.ts +39 -10
- package/types/ng-doc-app-processors-processors-tooltip.d.ts +11 -10
- package/types/ng-doc-app-processors-processors.d.ts +5 -1
- package/types/ng-doc-app-providers-ng-doc-app.d.ts +17 -0
- package/types/ng-doc-app-providers-playground-demo.d.ts +1 -1
- package/types/ng-doc-app-providers-type-control.d.ts +2 -2
- package/types/ng-doc-app-services-content-scroll-intent.d.ts +52 -0
- package/types/ng-doc-app-services-content-state.d.ts +40 -0
- package/types/ng-doc-app-services-fullscreen-route.d.ts +35 -0
- package/types/ng-doc-app-services-highlighter.d.ts +40 -5
- package/types/ng-doc-app-services-route-preloader.d.ts +109 -0
- package/types/ng-doc-app-services-shortcuts.d.ts +96 -0
- package/types/ng-doc-app-services-sidebar.d.ts +24 -4
- package/types/ng-doc-app-services-store.d.ts +24 -1
- package/types/ng-doc-app-services-theme.d.ts +19 -3
- package/types/ng-doc-app-services.d.ts +77 -0
- package/types/ng-doc-app-tokens.d.ts +10 -30
- package/types/ng-doc-app-type-controls-boolean-control.d.ts +11 -6
- package/types/ng-doc-app-type-controls-number-control.d.ts +5 -3
- package/types/ng-doc-app-type-controls-string-control.d.ts +5 -3
- package/types/ng-doc-app-type-controls-type-alias-control.d.ts +13 -6
- package/fesm2022/ng-doc-app-components-search-dialog.mjs +0 -78
- package/fesm2022/ng-doc-app-components-search-dialog.mjs.map +0 -1
- package/types/ng-doc-app-components-search-dialog.d.ts +0 -28
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { signal, Service } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
/** Request-local content failures observed by the SSR readiness boundary. */
|
|
5
|
+
class NgDocContentState {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.failures = new Map();
|
|
8
|
+
this.failureState = signal(undefined, /* @ts-ignore */
|
|
9
|
+
...(ngDevMode ? [{ debugName: "failureState" }] : /* istanbul ignore next */ []));
|
|
10
|
+
/**
|
|
11
|
+
* The failure `currentFailure()` returns, as a signal. It changes with every
|
|
12
|
+
* `report()` and `clear()` call.
|
|
13
|
+
*/
|
|
14
|
+
this.failure = this.failureState.asReadonly();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Records the failure of one content owner, replacing its previous failure.
|
|
18
|
+
* @param owner - The object that owns the content source.
|
|
19
|
+
* @param failure - The failure.
|
|
20
|
+
*/
|
|
21
|
+
report(owner, failure) {
|
|
22
|
+
this.failures.set(owner, failure);
|
|
23
|
+
this.failureState.set(this.currentFailure());
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Forgets the failure of one content owner.
|
|
27
|
+
* @param owner - The object that owns the content source.
|
|
28
|
+
*/
|
|
29
|
+
clear(owner) {
|
|
30
|
+
if (!this.failures.delete(owner))
|
|
31
|
+
return;
|
|
32
|
+
this.failureState.set(this.currentFailure());
|
|
33
|
+
}
|
|
34
|
+
/** Returns the oldest failure that is still recorded, if any. */
|
|
35
|
+
currentFailure() {
|
|
36
|
+
return this.failures.values().next().value;
|
|
37
|
+
}
|
|
38
|
+
/** Throws the error of `currentFailure()`, if there is one. */
|
|
39
|
+
throwIfFailed() {
|
|
40
|
+
const failure = this.currentFailure();
|
|
41
|
+
if (failure) {
|
|
42
|
+
throw failure.error;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: NgDocContentState, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
46
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.1", ngImport: i0, type: NgDocContentState }); }
|
|
47
|
+
}
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: NgDocContentState, decorators: [{
|
|
49
|
+
type: Service
|
|
50
|
+
}] });
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Generated bundle index. Do not edit.
|
|
54
|
+
*/
|
|
55
|
+
|
|
56
|
+
export { NgDocContentState };
|
|
57
|
+
//# sourceMappingURL=ng-doc-app-services-content-state.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ng-doc-app-services-content-state.mjs","sources":["../../../../libs/app/services/content-state/content-state.service.ts","../../../../libs/app/services/content-state/ng-doc-app-services-content-state.ts"],"sourcesContent":["import { Service, Signal, signal } from '@angular/core';\n\n/** A content source that failed to load or to render. */\nexport interface NgDocContentFailure {\n /** Id of the content source that failed. */\n readonly contentId: string;\n /** The error it failed with. */\n readonly error: unknown;\n}\n\n/** Request-local content failures observed by the SSR readiness boundary. */\n@Service()\nexport class NgDocContentState {\n private readonly failures = new Map<object, NgDocContentFailure>();\n private readonly failureState = signal<NgDocContentFailure | undefined>(undefined);\n\n /**\n * The failure `currentFailure()` returns, as a signal. It changes with every\n * `report()` and `clear()` call.\n */\n readonly failure: Signal<NgDocContentFailure | undefined> = this.failureState.asReadonly();\n\n /**\n * Records the failure of one content owner, replacing its previous failure.\n * @param owner - The object that owns the content source.\n * @param failure - The failure.\n */\n report(owner: object, failure: NgDocContentFailure): void {\n this.failures.set(owner, failure);\n this.failureState.set(this.currentFailure());\n }\n\n /**\n * Forgets the failure of one content owner.\n * @param owner - The object that owns the content source.\n */\n clear(owner: object): void {\n if (!this.failures.delete(owner)) return;\n this.failureState.set(this.currentFailure());\n }\n\n /** Returns the oldest failure that is still recorded, if any. */\n currentFailure(): NgDocContentFailure | undefined {\n return this.failures.values().next().value;\n }\n\n /** Throws the error of `currentFailure()`, if there is one. */\n throwIfFailed(): void {\n const failure = this.currentFailure();\n if (failure) {\n throw failure.error;\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAUA;MAEa,iBAAiB,CAAA;AAD9B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAA+B;QACjD,IAAA,CAAA,YAAY,GAAG,MAAM,CAAkC,SAAS;yFAAC;AAElF;;;AAGG;AACM,QAAA,IAAA,CAAA,OAAO,GAA4C,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAiC3F,IAAA;AA/BC;;;;AAIG;IACH,MAAM,CAAC,KAAa,EAAE,OAA4B,EAAA;QAChD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;QACjC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9C;AAEA;;;AAGG;AACH,IAAA,KAAK,CAAC,KAAa,EAAA;QACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE;QAClC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9C;;IAGA,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK;IAC5C;;IAGA,aAAa,GAAA;AACX,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;QACrC,IAAI,OAAO,EAAE;YACX,MAAM,OAAO,CAAC,KAAK;QACrB;IACF;8GAxCW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,OAAA,EAAA,CAAA,CAAA;+GAAjB,iBAAiB,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;ACXD;;AAEG;;;;"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { signal, computed, inject, PLATFORM_ID, DOCUMENT, Service } from '@angular/core';
|
|
4
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
5
|
+
import { Router, NavigationEnd, NavigationCancel, NavigationError, NavigationSkipped } from '@angular/router';
|
|
6
|
+
import { filter, take } from 'rxjs/operators';
|
|
7
|
+
|
|
8
|
+
/** The host attribute with which `ng-doc-root` tells that a fullscreen route is shown. */
|
|
9
|
+
const ROOT_ATTRIBUTE = 'data-ng-doc-fullscreen-route';
|
|
10
|
+
/**
|
|
11
|
+
* Tells whether a page shows one of its fullscreen routes: a child route of the page (see
|
|
12
|
+
* `route.children` of `NgDocPage`), which `ng-doc-page` shows on its own, on the canvas of demos,
|
|
13
|
+
* instead of the page. Pages with `disableFullscreenRoutes` never report one.
|
|
14
|
+
*
|
|
15
|
+
* While one is shown, `ng-doc-root` hides the navbar, the sidebar and the footer, and
|
|
16
|
+
* `ng-doc-page-wrapper` hides the breadcrumbs, the page header, the page links and the table of
|
|
17
|
+
* contents, so the route opens as a standalone page without changes to the application's template.
|
|
18
|
+
*/
|
|
19
|
+
class NgDocFullscreenRouteService {
|
|
20
|
+
constructor() {
|
|
21
|
+
this.pages = signal(new Set(), /* @ts-ignore */
|
|
22
|
+
...(ngDevMode ? [{ debugName: "pages" }] : /* istanbul ignore next */ []));
|
|
23
|
+
/**
|
|
24
|
+
* Whether the server rendered a fullscreen route, until the first navigation in the browser
|
|
25
|
+
* settles. `ng-doc-root` renders before its page does, and it must render the server's markup
|
|
26
|
+
* (and hide the same chrome) until the page tells again.
|
|
27
|
+
*/
|
|
28
|
+
this.serverRendered = signal(false, /* @ts-ignore */
|
|
29
|
+
...(ngDevMode ? [{ debugName: "serverRendered" }] : /* istanbul ignore next */ []));
|
|
30
|
+
/** Whether a page shows one of its fullscreen routes. */
|
|
31
|
+
this.active = computed(() => this.serverRendered() || this.pages().size > 0, /* @ts-ignore */
|
|
32
|
+
...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
33
|
+
if (!isPlatformBrowser(inject(PLATFORM_ID)))
|
|
34
|
+
return;
|
|
35
|
+
this.serverRendered.set(!!inject(DOCUMENT).querySelector(`ng-doc-root[${ROOT_ATTRIBUTE}="true"]`));
|
|
36
|
+
inject(Router)
|
|
37
|
+
.events.pipe(filter((event) => event instanceof NavigationEnd ||
|
|
38
|
+
event instanceof NavigationCancel ||
|
|
39
|
+
event instanceof NavigationError ||
|
|
40
|
+
event instanceof NavigationSkipped), take(1), takeUntilDestroyed())
|
|
41
|
+
.subscribe(() => this.serverRendered.set(false));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Records whether a page shows one of its fullscreen routes.
|
|
45
|
+
* @param page - The page.
|
|
46
|
+
* @param shown - Whether the page shows a fullscreen route.
|
|
47
|
+
* @internal
|
|
48
|
+
*/
|
|
49
|
+
set(page, shown) {
|
|
50
|
+
const pages = this.pages();
|
|
51
|
+
if (pages.has(page) === shown)
|
|
52
|
+
return;
|
|
53
|
+
const next = new Set(pages);
|
|
54
|
+
if (shown) {
|
|
55
|
+
next.add(page);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
next.delete(page);
|
|
59
|
+
}
|
|
60
|
+
this.pages.set(next);
|
|
61
|
+
}
|
|
62
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: NgDocFullscreenRouteService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
63
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.1", ngImport: i0, type: NgDocFullscreenRouteService }); }
|
|
64
|
+
}
|
|
65
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: NgDocFullscreenRouteService, decorators: [{
|
|
66
|
+
type: Service
|
|
67
|
+
}], ctorParameters: () => [] });
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Generated bundle index. Do not edit.
|
|
71
|
+
*/
|
|
72
|
+
|
|
73
|
+
export { NgDocFullscreenRouteService };
|
|
74
|
+
//# sourceMappingURL=ng-doc-app-services-fullscreen-route.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ng-doc-app-services-fullscreen-route.mjs","sources":["../../../../libs/app/services/fullscreen-route/fullscreen-route.service.ts","../../../../libs/app/services/fullscreen-route/ng-doc-app-services-fullscreen-route.ts"],"sourcesContent":["import { isPlatformBrowser } from '@angular/common';\nimport { computed, DOCUMENT, inject, PLATFORM_ID, Service, Signal, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n Event,\n NavigationCancel,\n NavigationEnd,\n NavigationError,\n NavigationSkipped,\n Router,\n} from '@angular/router';\nimport { filter, take } from 'rxjs/operators';\n\n/** The host attribute with which `ng-doc-root` tells that a fullscreen route is shown. */\nconst ROOT_ATTRIBUTE = 'data-ng-doc-fullscreen-route';\n\n/**\n * Tells whether a page shows one of its fullscreen routes: a child route of the page (see\n * `route.children` of `NgDocPage`), which `ng-doc-page` shows on its own, on the canvas of demos,\n * instead of the page. Pages with `disableFullscreenRoutes` never report one.\n *\n * While one is shown, `ng-doc-root` hides the navbar, the sidebar and the footer, and\n * `ng-doc-page-wrapper` hides the breadcrumbs, the page header, the page links and the table of\n * contents, so the route opens as a standalone page without changes to the application's template.\n */\n@Service()\nexport class NgDocFullscreenRouteService {\n private readonly pages = signal<ReadonlySet<object>>(new Set());\n /**\n * Whether the server rendered a fullscreen route, until the first navigation in the browser\n * settles. `ng-doc-root` renders before its page does, and it must render the server's markup\n * (and hide the same chrome) until the page tells again.\n */\n private readonly serverRendered = signal<boolean>(false);\n\n /** Whether a page shows one of its fullscreen routes. */\n readonly active: Signal<boolean> = computed(() => this.serverRendered() || this.pages().size > 0);\n\n constructor() {\n if (!isPlatformBrowser(inject(PLATFORM_ID))) return;\n\n this.serverRendered.set(\n !!inject(DOCUMENT).querySelector(`ng-doc-root[${ROOT_ATTRIBUTE}=\"true\"]`),\n );\n inject(Router)\n .events.pipe(\n filter(\n (event: Event) =>\n event instanceof NavigationEnd ||\n event instanceof NavigationCancel ||\n event instanceof NavigationError ||\n event instanceof NavigationSkipped,\n ),\n take(1),\n takeUntilDestroyed(),\n )\n .subscribe(() => this.serverRendered.set(false));\n }\n\n /**\n * Records whether a page shows one of its fullscreen routes.\n * @param page - The page.\n * @param shown - Whether the page shows a fullscreen route.\n * @internal\n */\n set(page: object, shown: boolean): void {\n const pages: ReadonlySet<object> = this.pages();\n\n if (pages.has(page) === shown) return;\n\n const next = new Set(pages);\n\n if (shown) {\n next.add(page);\n } else {\n next.delete(page);\n }\n this.pages.set(next);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAaA;AACA,MAAM,cAAc,GAAG,8BAA8B;AAErD;;;;;;;;AAQG;MAEU,2BAA2B,CAAA;AAYtC,IAAA,WAAA,GAAA;AAXiB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAsB,IAAI,GAAG,EAAE;kFAAC;AAC/D;;;;AAIG;QACc,IAAA,CAAA,cAAc,GAAG,MAAM,CAAU,KAAK;2FAAC;;AAG/C,QAAA,IAAA,CAAA,MAAM,GAAoB,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,GAAG,CAAC;mFAAC;AAG/F,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAAE;AAE7C,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAA,YAAA,EAAe,cAAc,CAAA,QAAA,CAAU,CAAC,CAC1E;QACD,MAAM,CAAC,MAAM;AACV,aAAA,MAAM,CAAC,IAAI,CACV,MAAM,CACJ,CAAC,KAAY,KACX,KAAK,YAAY,aAAa;AAC9B,YAAA,KAAK,YAAY,gBAAgB;AACjC,YAAA,KAAK,YAAY,eAAe;YAChC,KAAK,YAAY,iBAAiB,CACrC,EACD,IAAI,CAAC,CAAC,CAAC,EACP,kBAAkB,EAAE;AAErB,aAAA,SAAS,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpD;AAEA;;;;;AAKG;IACH,GAAG,CAAC,IAAY,EAAE,KAAc,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAwB,IAAI,CAAC,KAAK,EAAE;AAE/C,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK;YAAE;AAE/B,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;QAE3B,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAChB;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACnB;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IACtB;8GApDW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,OAAA,EAAA,CAAA,CAAA;+GAA3B,2BAA2B,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;;ACzBD;;AAEG;;;;"}
|
|
@@ -1,29 +1,101 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject,
|
|
2
|
+
import { signal, inject, isDevMode, Service } from '@angular/core';
|
|
3
3
|
import { NG_DOC_SHIKI_THEME } from '@ng-doc/app/tokens';
|
|
4
|
+
import { ngDocSyntaxTheme } from '@ng-doc/core/constants/syntax-theme';
|
|
4
5
|
import { createHighlighterCore } from 'shiki/core';
|
|
5
6
|
import getWasm from 'shiki/wasm';
|
|
6
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Highlights code with Shiki. `provideNgDocApp` initializes it before the application renders.
|
|
10
|
+
*/
|
|
7
11
|
class NgDocHighlighterService {
|
|
8
12
|
constructor() {
|
|
13
|
+
this.ownsHighlighter = false;
|
|
14
|
+
this.destroyed = false;
|
|
15
|
+
this.readyState = signal(false, /* @ts-ignore */
|
|
16
|
+
...(ngDevMode ? [{ debugName: "readyState" }] : /* istanbul ignore next */ []));
|
|
9
17
|
this.theme = inject(NG_DOC_SHIKI_THEME);
|
|
18
|
+
/**
|
|
19
|
+
* Whether `highlight()` can highlight: `true` once `initialize()` has finished, and
|
|
20
|
+
* `false` again after the service is destroyed.
|
|
21
|
+
*/
|
|
22
|
+
this.ready = this.readyState.asReadonly();
|
|
10
23
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Loads Shiki with the built-in themes (`github-light`, `ayu-dark` and NgDoc's `css-variables`)
|
|
26
|
+
* and the given ones. Concurrent and repeated calls share one initialization; a failed one can
|
|
27
|
+
* be retried.
|
|
28
|
+
* @param config - Custom Shiki themes to load.
|
|
29
|
+
*/
|
|
30
|
+
initialize(config) {
|
|
31
|
+
if (this.destroyed) {
|
|
32
|
+
return Promise.reject(new Error('NgDoc highlighter has been destroyed.'));
|
|
33
|
+
}
|
|
34
|
+
if (this.initialization) {
|
|
35
|
+
return this.initialization;
|
|
36
|
+
}
|
|
37
|
+
if (config?.theme && isDevMode()) {
|
|
38
|
+
console.warn('[NgDoc] `shiki.theme` of `provideNgDocApp` has no effect. Set the theme names in ' +
|
|
39
|
+
'`shiki.themes` of `ng-doc.config.ts`: NgDoc uses them for the code blocks and the ' +
|
|
40
|
+
'code that the browser highlights.');
|
|
14
41
|
}
|
|
15
|
-
|
|
42
|
+
// Only immutable built-in themes are shared across SSR applications. Custom
|
|
43
|
+
// themes may reuse names with different colors, or be asynchronous getters.
|
|
44
|
+
this.ownsHighlighter = Boolean(config?.themes?.length);
|
|
45
|
+
const creation = this.ownsHighlighter
|
|
46
|
+
? NgDocHighlighterService.create(config?.themes)
|
|
47
|
+
: (NgDocHighlighterService.defaultInitialization ??= NgDocHighlighterService.create().catch((error) => {
|
|
48
|
+
NgDocHighlighterService.defaultInitialization = undefined;
|
|
49
|
+
throw error;
|
|
50
|
+
}));
|
|
51
|
+
this.initialization = creation
|
|
52
|
+
.then((highlighter) => {
|
|
53
|
+
if (this.destroyed) {
|
|
54
|
+
if (this.ownsHighlighter) {
|
|
55
|
+
highlighter.dispose();
|
|
56
|
+
}
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
this.highlighter = highlighter;
|
|
60
|
+
this.readyState.set(true);
|
|
61
|
+
})
|
|
62
|
+
.catch((error) => {
|
|
63
|
+
this.initialization = undefined;
|
|
64
|
+
throw error;
|
|
65
|
+
});
|
|
66
|
+
return this.initialization;
|
|
67
|
+
}
|
|
68
|
+
/** Disposes the highlighter this service created for custom themes. */
|
|
69
|
+
ngOnDestroy() {
|
|
70
|
+
this.destroyed = true;
|
|
71
|
+
this.readyState.set(false);
|
|
72
|
+
if (this.ownsHighlighter) {
|
|
73
|
+
this.highlighter?.dispose();
|
|
74
|
+
}
|
|
75
|
+
this.highlighter = undefined;
|
|
76
|
+
}
|
|
77
|
+
static async create(themes = []) {
|
|
78
|
+
return (await createHighlighterCore({
|
|
16
79
|
themes: [
|
|
17
80
|
import('shiki/themes/github-light.mjs'),
|
|
18
81
|
import('shiki/themes/ayu-dark.mjs'),
|
|
19
|
-
|
|
82
|
+
// A new copy: Shiki changes the theme object it loads.
|
|
83
|
+
ngDocSyntaxTheme(),
|
|
84
|
+
...themes,
|
|
20
85
|
],
|
|
21
86
|
langs: [import('shiki/langs/angular-html.mjs')],
|
|
22
87
|
loadWasm: getWasm,
|
|
23
88
|
}));
|
|
24
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Returns the code as highlighted HTML, or an empty string before `initialize()` has
|
|
92
|
+
* finished. It reads `ready()`, so a `computed` over it updates once Shiki is loaded.
|
|
93
|
+
* @param code - Angular HTML to highlight.
|
|
94
|
+
*/
|
|
25
95
|
highlight(code) {
|
|
26
|
-
|
|
96
|
+
if (!this.readyState())
|
|
97
|
+
return '';
|
|
98
|
+
return (this.highlighter?.codeToHtml(code, {
|
|
27
99
|
lang: 'angular-html',
|
|
28
100
|
themes: {
|
|
29
101
|
light: this.theme.light || 'github-light',
|
|
@@ -31,14 +103,11 @@ class NgDocHighlighterService {
|
|
|
31
103
|
},
|
|
32
104
|
}) ?? '');
|
|
33
105
|
}
|
|
34
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
35
|
-
static { this.ɵprov = i0.ɵɵ
|
|
106
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: NgDocHighlighterService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
107
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.2.1", ngImport: i0, type: NgDocHighlighterService }); }
|
|
36
108
|
}
|
|
37
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
38
|
-
type:
|
|
39
|
-
args: [{
|
|
40
|
-
providedIn: 'root',
|
|
41
|
-
}]
|
|
109
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: NgDocHighlighterService, decorators: [{
|
|
110
|
+
type: Service
|
|
42
111
|
}] });
|
|
43
112
|
|
|
44
113
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-doc-app-services-highlighter.mjs","sources":["../../../../libs/app/services/highlighter/highlighter.service.ts","../../../../libs/app/services/highlighter/ng-doc-app-services-highlighter.ts"],"sourcesContent":["import { inject,
|
|
1
|
+
{"version":3,"file":"ng-doc-app-services-highlighter.mjs","sources":["../../../../libs/app/services/highlighter/highlighter.service.ts","../../../../libs/app/services/highlighter/ng-doc-app-services-highlighter.ts"],"sourcesContent":["import { inject, isDevMode, OnDestroy, Service, Signal, signal } from '@angular/core';\nimport { NG_DOC_SHIKI_THEME } from '@ng-doc/app/tokens';\nimport { ngDocSyntaxTheme } from '@ng-doc/core/constants/syntax-theme';\nimport { HighlighterGeneric } from '@shikijs/core/types';\nimport { ThemeInput } from 'shiki';\nimport { createHighlighterCore } from 'shiki/core';\nimport getWasm from 'shiki/wasm';\n\n/** Shiki configuration of the code highlighter. */\nexport interface NgDocHighlighterConfig {\n /**\n * Themes sources.\n */\n themes?: ThemeInput[];\n /**\n * Has no effect, and is reported in development mode.\n *\n * The theme names come from `shiki.themes` in `ng-doc.config.ts`: NgDoc highlights code blocks\n * with them when it builds the site, and passes them to the application (`NG_DOC_SHIKI_THEME`),\n * so the code that the browser highlights matches the code blocks.\n * @deprecated Set the theme names in `shiki.themes` of `ng-doc.config.ts` instead, and load\n * other themes with `themes`. This field will be removed in a future major release.\n */\n theme?: {\n light: string;\n dark: string;\n };\n}\n\n/**\n * Highlights code with Shiki. `provideNgDocApp` initializes it before the application renders.\n */\n@Service()\nexport class NgDocHighlighterService implements OnDestroy {\n private static defaultInitialization?: Promise<HighlighterGeneric<string, string>>;\n\n private highlighter?: HighlighterGeneric<string, string>;\n private initialization?: Promise<void>;\n private ownsHighlighter = false;\n private destroyed = false;\n private readonly readyState = signal(false);\n\n protected readonly theme = inject(NG_DOC_SHIKI_THEME);\n\n /**\n * Whether `highlight()` can highlight: `true` once `initialize()` has finished, and\n * `false` again after the service is destroyed.\n */\n readonly ready: Signal<boolean> = this.readyState.asReadonly();\n\n /**\n * Loads Shiki with the built-in themes (`github-light`, `ayu-dark` and NgDoc's `css-variables`)\n * and the given ones. Concurrent and repeated calls share one initialization; a failed one can\n * be retried.\n * @param config - Custom Shiki themes to load.\n */\n initialize(config?: NgDocHighlighterConfig): Promise<void> {\n if (this.destroyed) {\n return Promise.reject(new Error('NgDoc highlighter has been destroyed.'));\n }\n if (this.initialization) {\n return this.initialization;\n }\n if (config?.theme && isDevMode()) {\n console.warn(\n '[NgDoc] `shiki.theme` of `provideNgDocApp` has no effect. Set the theme names in ' +\n '`shiki.themes` of `ng-doc.config.ts`: NgDoc uses them for the code blocks and the ' +\n 'code that the browser highlights.',\n );\n }\n\n // Only immutable built-in themes are shared across SSR applications. Custom\n // themes may reuse names with different colors, or be asynchronous getters.\n this.ownsHighlighter = Boolean(config?.themes?.length);\n const creation = this.ownsHighlighter\n ? NgDocHighlighterService.create(config?.themes)\n : (NgDocHighlighterService.defaultInitialization ??= NgDocHighlighterService.create().catch(\n (error: unknown) => {\n NgDocHighlighterService.defaultInitialization = undefined;\n throw error;\n },\n ));\n this.initialization = creation\n .then((highlighter) => {\n if (this.destroyed) {\n if (this.ownsHighlighter) {\n highlighter.dispose();\n }\n return;\n }\n this.highlighter = highlighter;\n this.readyState.set(true);\n })\n .catch((error: unknown) => {\n this.initialization = undefined;\n throw error;\n });\n return this.initialization;\n }\n\n /** Disposes the highlighter this service created for custom themes. */\n ngOnDestroy(): void {\n this.destroyed = true;\n this.readyState.set(false);\n if (this.ownsHighlighter) {\n this.highlighter?.dispose();\n }\n this.highlighter = undefined;\n }\n\n private static async create(\n themes: ThemeInput[] = [],\n ): Promise<HighlighterGeneric<string, string>> {\n return (await createHighlighterCore({\n themes: [\n import('shiki/themes/github-light.mjs'),\n import('shiki/themes/ayu-dark.mjs'),\n // A new copy: Shiki changes the theme object it loads.\n ngDocSyntaxTheme(),\n ...themes,\n ],\n langs: [import('shiki/langs/angular-html.mjs')],\n loadWasm: getWasm,\n })) as HighlighterGeneric<string, string>;\n }\n\n /**\n * Returns the code as highlighted HTML, or an empty string before `initialize()` has\n * finished. It reads `ready()`, so a `computed` over it updates once Shiki is loaded.\n * @param code - Angular HTML to highlight.\n */\n highlight(code: string): string {\n if (!this.readyState()) return '';\n\n return (\n this.highlighter?.codeToHtml(code, {\n lang: 'angular-html',\n themes: {\n light: this.theme.light || 'github-light',\n dark: this.theme.dark || 'ayu-dark',\n },\n }) ?? ''\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|