@ng-prism/plugin-jsdoc 22.2.1 → 22.4.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 +12 -12
- package/dist/jsdoc-extractor.d.ts +9 -1
- package/dist/jsdoc-extractor.d.ts.map +1 -1
- package/dist/jsdoc-extractor.js +86 -43
- package/dist/jsdoc-panel.component.d.ts.map +1 -1
- package/dist/jsdoc-panel.component.js +7 -212
- package/dist/jsdoc-plugin.browser.d.ts.map +1 -1
- package/dist/jsdoc-plugin.browser.js +3 -3
- package/dist/jsdoc-plugin.d.ts.map +1 -1
- package/dist/jsdoc-plugin.js +6 -6
- package/dist/jsdoc.types.d.ts.map +1 -1
- package/dist/markdown.d.ts.map +1 -1
- package/dist/schematics/ng-add/index.d.ts.map +1 -1
- package/dist/schematics/ng-add/index.js +4 -4
- package/dist/schematics/ng-add/schema.d.ts.map +1 -1
- package/package.json +5 -3
- package/schematics/collection.json +7 -7
- package/schematics/ng-add/schema.json +14 -14
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
API documentation plugin for [@ng-prism/core](https://github.com/dyingangel666/ng-prism). Extracts JSDoc comments from component source code at build time and renders an interactive API panel.
|
|
4
4
|
|
|
5
|
-
> **Full documentation:** [ng-prism Docs
|
|
5
|
+
> **Full documentation:** [ng-prism Docs: JSDoc Plugin](https://dyingangel666.github.io/ng-prism/#/plugins/jsdoc)
|
|
6
6
|
|
|
7
7
|
## Installation
|
|
8
8
|
|
|
@@ -28,7 +28,7 @@ import { defineConfig } from '@ng-prism/core/config';
|
|
|
28
28
|
import { jsDocPlugin } from '@ng-prism/plugin-jsdoc';
|
|
29
29
|
|
|
30
30
|
export default defineConfig({
|
|
31
|
-
|
|
31
|
+
plugins: [jsDocPlugin()]
|
|
32
32
|
});
|
|
33
33
|
```
|
|
34
34
|
|
|
@@ -37,10 +37,10 @@ export default defineConfig({
|
|
|
37
37
|
- Extracts class-level JSDoc description
|
|
38
38
|
- Extracts per-input and per-output JSDoc comments
|
|
39
39
|
- Renders an **API** panel with:
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
- Component description
|
|
41
|
+
- Inputs table (name, type, default, description)
|
|
42
|
+
- Outputs table (name, description)
|
|
43
|
+
- Supported tags: `@deprecated`, `@since`, `@see`, `@example`
|
|
44
44
|
|
|
45
45
|
## Markdown Support
|
|
46
46
|
|
|
@@ -49,11 +49,11 @@ JSDoc descriptions are rendered as Markdown:
|
|
|
49
49
|
- Headings (`#`, `##`, `###`)
|
|
50
50
|
- Lists (ordered/unordered) and inline code (`` `code` ``)
|
|
51
51
|
- Bold (`**text**`), italic (`*text*`), and links (`[text](url)`)
|
|
52
|
-
- Fenced code blocks with a language hint (` ```html `, ` ```scss
|
|
52
|
+
- Fenced code blocks with a language hint (` ```html `, ` ```scss `, ...)
|
|
53
53
|
|
|
54
54
|
Class descriptions are rendered as block Markdown; input/output/method descriptions are
|
|
55
55
|
rendered inline (no wrapping `<p>`). Existing plain-text descriptions keep working
|
|
56
|
-
unchanged
|
|
56
|
+
unchanged, since plain text is valid Markdown.
|
|
57
57
|
|
|
58
58
|
````typescript
|
|
59
59
|
/**
|
|
@@ -61,8 +61,8 @@ unchanged — plain text is valid Markdown.
|
|
|
61
61
|
*
|
|
62
62
|
* ## Size
|
|
63
63
|
*
|
|
64
|
-
* - `small` (4px)
|
|
65
|
-
* - `large` (9px, default)
|
|
64
|
+
* - `small` (4px): inline indicators
|
|
65
|
+
* - `large` (9px, default): section-level loading
|
|
66
66
|
*
|
|
67
67
|
* @example
|
|
68
68
|
* ```html
|
|
@@ -72,9 +72,9 @@ unchanged — plain text is valid Markdown.
|
|
|
72
72
|
````
|
|
73
73
|
|
|
74
74
|
`@example` blocks accept a fenced code block with a language hint. The language is
|
|
75
|
-
passed through to `ngx-highlightjs` (`html`, `scss`, `typescript`,
|
|
75
|
+
passed through to `ngx-highlightjs` (`html`, `scss`, `typescript`, ...). Examples without
|
|
76
76
|
fences fall back to `typescript` for backwards compatibility. Make sure the languages
|
|
77
|
-
you reference are registered with `highlight.js` in your app
|
|
77
|
+
you reference are registered with `highlight.js` in your app. `highlight.js`'s core
|
|
78
78
|
language set is loaded by default, but additional languages must be registered
|
|
79
79
|
explicitly by the consumer.
|
|
80
80
|
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
import type { JsDocData } from './jsdoc.types.js';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* `baseClasses` come from the scanner, nearest first. Members are read from
|
|
4
|
+
* the class and then from each of them; the first class that declares a
|
|
5
|
+
* member decides its tags, as a redeclaration replaces the inherited one.
|
|
6
|
+
*/
|
|
7
|
+
export declare function extractJsDocData(filePath: string, className: string, baseClasses?: {
|
|
8
|
+
className: string;
|
|
9
|
+
filePath: string;
|
|
10
|
+
}[]): JsDocData | null;
|
|
3
11
|
//# sourceMappingURL=jsdoc-extractor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsdoc-extractor.d.ts","sourceRoot":"","sources":["../src/jsdoc-extractor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAkC,MAAM,kBAAkB,CAAC;AAElF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"jsdoc-extractor.d.ts","sourceRoot":"","sources":["../src/jsdoc-extractor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAkC,MAAM,kBAAkB,CAAC;AAElF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAO,GAAG,SAAS,GAAG,IAAI,CAyBnJ"}
|
package/dist/jsdoc-extractor.js
CHANGED
|
@@ -1,16 +1,29 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import ts from 'typescript';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
/**
|
|
4
|
+
* `baseClasses` come from the scanner, nearest first. Members are read from
|
|
5
|
+
* the class and then from each of them; the first class that declares a
|
|
6
|
+
* member decides its tags, as a redeclaration replaces the inherited one.
|
|
7
|
+
*/
|
|
8
|
+
export function extractJsDocData(filePath, className, baseClasses = []) {
|
|
9
|
+
const sourceFiles = new Map();
|
|
10
|
+
const findClass = (path, name) => {
|
|
11
|
+
let sourceFile = sourceFiles.get(path);
|
|
12
|
+
if (!sourceFile) {
|
|
13
|
+
sourceFile = ts.createSourceFile(path, readFileSync(path, 'utf-8'), ts.ScriptTarget.ES2022, true);
|
|
14
|
+
sourceFiles.set(path, sourceFile);
|
|
15
|
+
}
|
|
16
|
+
return findClassByName(sourceFile, name);
|
|
17
|
+
};
|
|
18
|
+
const classDecl = findClass(filePath, className);
|
|
7
19
|
if (!classDecl)
|
|
8
20
|
return null;
|
|
21
|
+
const hierarchy = [classDecl, ...baseClasses.flatMap((base) => findClass(base.filePath, base.className) ?? [])];
|
|
9
22
|
return {
|
|
10
23
|
classDescription: extractDescription(classDecl),
|
|
11
24
|
classTags: extractTags(classDecl),
|
|
12
|
-
memberTags: extractAllMemberTags(
|
|
13
|
-
methods: extractPublicMethods(
|
|
25
|
+
memberTags: extractAllMemberTags(hierarchy),
|
|
26
|
+
methods: extractPublicMethods(hierarchy)
|
|
14
27
|
};
|
|
15
28
|
}
|
|
16
29
|
function findClassByName(sourceFile, className) {
|
|
@@ -37,10 +50,10 @@ function extractDescription(node) {
|
|
|
37
50
|
return undefined;
|
|
38
51
|
if (typeof comment === 'string')
|
|
39
52
|
return comment.trim() || undefined;
|
|
40
|
-
return comment
|
|
53
|
+
return (comment
|
|
41
54
|
.map((c) => (typeof c === 'string' ? c : c.text))
|
|
42
55
|
.join('')
|
|
43
|
-
.trim() || undefined;
|
|
56
|
+
.trim() || undefined);
|
|
44
57
|
}
|
|
45
58
|
function extractTags(node) {
|
|
46
59
|
const tags = ts.getJSDocTags(node);
|
|
@@ -85,23 +98,42 @@ function tagCommentToString(comment) {
|
|
|
85
98
|
return undefined;
|
|
86
99
|
if (typeof comment === 'string')
|
|
87
100
|
return comment.trim() || undefined;
|
|
88
|
-
return comment
|
|
101
|
+
return (comment
|
|
89
102
|
.map((c) => (typeof c === 'string' ? c : c.text))
|
|
90
103
|
.join('')
|
|
91
|
-
.trim() || undefined;
|
|
104
|
+
.trim() || undefined);
|
|
92
105
|
}
|
|
93
|
-
function extractAllMemberTags(
|
|
106
|
+
function extractAllMemberTags(hierarchy) {
|
|
94
107
|
const result = {};
|
|
108
|
+
const shadowed = new Set();
|
|
109
|
+
for (const classDecl of hierarchy) {
|
|
110
|
+
for (const member of classDecl.members) {
|
|
111
|
+
const name = getMemberName(member);
|
|
112
|
+
if (!name || shadowed.has(name))
|
|
113
|
+
continue;
|
|
114
|
+
const tags = ts.getJSDocTags(member);
|
|
115
|
+
if (tags.length === 0)
|
|
116
|
+
continue;
|
|
117
|
+
result[name] = buildTagsFromList(tags);
|
|
118
|
+
}
|
|
119
|
+
addMemberNames(classDecl, shadowed);
|
|
120
|
+
}
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* A member with JSDoc of its own hides the same name further up, as it does
|
|
125
|
+
* for TypeScript and for the description the scanner reads; one without
|
|
126
|
+
* keeps the documentation it inherits. Applied after the whole class, so the
|
|
127
|
+
* getter, setter or overloads next to a member are read too. A static member
|
|
128
|
+
* hides nothing, since inputs, outputs and methods are instance members.
|
|
129
|
+
*/
|
|
130
|
+
function addMemberNames(classDecl, names) {
|
|
95
131
|
for (const member of classDecl.members) {
|
|
96
132
|
const name = getMemberName(member);
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
if (tags.length === 0)
|
|
101
|
-
continue;
|
|
102
|
-
result[name] = buildTagsFromList(tags);
|
|
133
|
+
const isStatic = ts.canHaveModifiers(member) && ts.getModifiers(member)?.some((m) => m.kind === ts.SyntaxKind.StaticKeyword);
|
|
134
|
+
if (name && !isStatic && ts.getJSDocCommentsAndTags(member).length > 0)
|
|
135
|
+
names.add(name);
|
|
103
136
|
}
|
|
104
|
-
return result;
|
|
105
137
|
}
|
|
106
138
|
function getMemberName(member) {
|
|
107
139
|
if (!member.name)
|
|
@@ -113,33 +145,44 @@ function getMemberName(member) {
|
|
|
113
145
|
return undefined;
|
|
114
146
|
}
|
|
115
147
|
const LIFECYCLE_HOOKS = new Set([
|
|
116
|
-
'ngOnInit',
|
|
117
|
-
'
|
|
118
|
-
'
|
|
148
|
+
'ngOnInit',
|
|
149
|
+
'ngOnDestroy',
|
|
150
|
+
'ngOnChanges',
|
|
151
|
+
'ngDoCheck',
|
|
152
|
+
'ngAfterContentInit',
|
|
153
|
+
'ngAfterContentChecked',
|
|
154
|
+
'ngAfterViewInit',
|
|
155
|
+
'ngAfterViewChecked'
|
|
119
156
|
]);
|
|
120
|
-
function extractPublicMethods(
|
|
157
|
+
function extractPublicMethods(hierarchy) {
|
|
121
158
|
const result = [];
|
|
122
|
-
const
|
|
123
|
-
for (const
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
159
|
+
const shadowed = new Set();
|
|
160
|
+
for (const classDecl of hierarchy) {
|
|
161
|
+
const sourceFile = classDecl.getSourceFile();
|
|
162
|
+
for (const member of classDecl.members) {
|
|
163
|
+
if (!ts.isMethodDeclaration(member))
|
|
164
|
+
continue;
|
|
165
|
+
const name = getMemberName(member);
|
|
166
|
+
if (!name || shadowed.has(name))
|
|
167
|
+
continue;
|
|
168
|
+
if (name.startsWith('_'))
|
|
169
|
+
continue;
|
|
170
|
+
if (LIFECYCLE_HOOKS.has(name))
|
|
171
|
+
continue;
|
|
172
|
+
const isPrivate = member.modifiers?.some((m) => m.kind === ts.SyntaxKind.PrivateKeyword || m.kind === ts.SyntaxKind.ProtectedKeyword);
|
|
173
|
+
if (isPrivate)
|
|
174
|
+
continue;
|
|
175
|
+
if (!hasDirectJsDoc(member, sourceFile))
|
|
176
|
+
continue;
|
|
177
|
+
const description = extractDescription(member);
|
|
178
|
+
const tags = extractTags(member);
|
|
179
|
+
const params = extractParamDocs(member);
|
|
180
|
+
const returnType = member.type ? member.type.getText() : undefined;
|
|
181
|
+
if (!description && Object.keys(tags).length === 0)
|
|
182
|
+
continue;
|
|
183
|
+
result.push({ name, description, tags, params, returnType });
|
|
184
|
+
}
|
|
185
|
+
addMemberNames(classDecl, shadowed);
|
|
143
186
|
}
|
|
144
187
|
return result;
|
|
145
188
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsdoc-panel.component.d.ts","sourceRoot":"","sources":["../src/jsdoc-panel.component.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jsdoc-panel.component.d.ts","sourceRoot":"","sources":["../src/jsdoc-panel.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,KAAK,aAAa,EAA2D,MAAM,eAAe,CAAC;;AAE5G,qBAQa,mBAAmB;IAC5B,QAAQ,CAAC,eAAe,+CAAwB;IAEhD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAElD,SAAS,CAAC,QAAQ,CAAC,SAAS,mDAIzB;IAEH,SAAS,CAAC,QAAQ,CAAC,MAAM,8CAItB;IAEH,SAAS,CAAC,QAAQ,CAAC,OAAO,+CAIvB;IAEH,SAAS,CAAC,QAAQ,CAAC,gBAAgB,qDAAsD;IAIzF,SAAS,CAAC,QAAQ,CAAC,wBAAwB,kDAIxC;IAEH,SAAS,CAAC,QAAQ,CAAC,SAAS,uEAAqD;IAEjF,SAAS,CAAC,QAAQ,CAAC,YAAY,0CAAiD;IAEhF,SAAS,CAAC,QAAQ,CAAC,iBAAiB,qDAIjC;IAEH,SAAS,CAAC,QAAQ,CAAC,KAAK,qDAA0C;IAElE,SAAS,CAAC,QAAQ,CAAC,OAAO,qDAA4C;IAEtE,SAAS,CAAC,QAAQ,CAAC,OAAO,2CAA8C;IAExE,SAAS,CAAC,QAAQ,CAAC,QAAQ,2CAAkD;IAE7E,SAAS,CAAC,QAAQ,CAAC,OAAO,8CAAgE;IAE1F,SAAS,CAAC,QAAQ,CAAC,OAAO,0CAA0G;IAEpI,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAInD,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI1D,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ;IAI1D,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa;IAIlD,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;yCAvEtC,mBAAmB;2CAAnB,mBAAmB;CA2E/B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, inject, input
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';
|
|
2
2
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
3
3
|
import { Highlight } from 'ngx-highlightjs';
|
|
4
|
-
import { parseExample, renderBlockMarkdown, renderInlineMarkdown
|
|
4
|
+
import { parseExample, renderBlockMarkdown, renderInlineMarkdown } from './markdown.js';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
const _forTrack0 = ($index, $item) => $item.name;
|
|
7
7
|
function JsDocPanelComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -427,7 +427,7 @@ export class JsDocPanelComponent {
|
|
|
427
427
|
classDescription = computed(() => this.jsdocData()?.classDescription, /* @ts-ignore */
|
|
428
428
|
...(ngDevMode ? [{ debugName: "classDescription" }] : /* istanbul ignore next */ []));
|
|
429
429
|
// Source is component-author JSDoc compiled into the manifest at build time,
|
|
430
|
-
// not user input
|
|
430
|
+
// not user input, so bypassing sanitization is safe here.
|
|
431
431
|
renderedClassDescription = computed(() => {
|
|
432
432
|
const html = renderBlockMarkdown(this.classDescription());
|
|
433
433
|
return html ? this.sanitizer.bypassSecurityTrustHtml(html) : null;
|
|
@@ -452,10 +452,7 @@ export class JsDocPanelComponent {
|
|
|
452
452
|
...(ngDevMode ? [{ debugName: "examples" }] : /* istanbul ignore next */ []));
|
|
453
453
|
methods = computed(() => this.jsdocData()?.methods ?? [], /* @ts-ignore */
|
|
454
454
|
...(ngDevMode ? [{ debugName: "methods" }] : /* istanbul ignore next */ []));
|
|
455
|
-
hasTags = computed(() => this.isDeprecated() ||
|
|
456
|
-
!!this.since() ||
|
|
457
|
-
!!this.version() ||
|
|
458
|
-
this.seeRefs().length > 0, /* @ts-ignore */
|
|
455
|
+
hasTags = computed(() => this.isDeprecated() || !!this.since() || !!this.version() || this.seeRefs().length > 0, /* @ts-ignore */
|
|
459
456
|
...(ngDevMode ? [{ debugName: "hasTags" }] : /* istanbul ignore next */ []));
|
|
460
457
|
isMemberDeprecated(name) {
|
|
461
458
|
return !!this.jsdocData()?.memberTags[name]?.deprecated;
|
|
@@ -482,212 +479,10 @@ export class JsDocPanelComponent {
|
|
|
482
479
|
} if (rf & 2) {
|
|
483
480
|
i0.ɵɵadvance();
|
|
484
481
|
i0.ɵɵconditional(!ctx.activeComponent() ? 1 : 2);
|
|
485
|
-
} }, dependencies: [Highlight], styles: ["[_nghost-%COMP%] { display: block; height: 100%; overflow: auto; }\n .prism-jsdoc-panel[_ngcontent-%COMP%] {\n padding: 20px 24px;\n max-width: 880px;\n font-family: var(--%NS%font-sans);\n font-size: var(--%NS%fs-md);\n color: var(--%NS%prism-text);\n }\n .prism-jsdoc-panel__empty[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: center;\n min-height: 120px; color: var(--%NS%prism-text-muted);\n }\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] {\n margin: 0 0 18px;\n font-size: 14px;\n line-height: 1.7;\n color: var(--%NS%prism-text-2);\n }\n .prism-jsdoc-panel__meta[_ngcontent-%COMP%] {\n display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 18px;\n }\n .prism-jsdoc-panel__meta-item[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 6px;\n padding: 3px 9px; border-radius: 4px;\n background: var(--%NS%prism-input-bg);\n border: 1px solid var(--%NS%prism-border);\n font-size: var(--%NS%fs-sm); color: var(--%NS%prism-text-2);\n }\n .prism-jsdoc-panel__meta-label[_ngcontent-%COMP%] {\n font-weight: 500; color: var(--%NS%prism-primary);\n font-family: var(--%NS%font-mono);\n }\n .prism-jsdoc-panel__badge[_ngcontent-%COMP%] {\n display: inline-flex; align-items: center;\n padding: 2px 8px; border-radius: 10px;\n font-size: 12px; font-weight: 600;\n }\n .prism-jsdoc-panel__badge--deprecated[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--%NS%prism-warn) 15%, transparent);\n color: var(--%NS%prism-warn);\n }\n .prism-jsdoc-panel__badge--required[_ngcontent-%COMP%] {\n color: var(--%NS%prism-accent); font-weight: 700; margin-left: 4px;\n }\n .prism-jsdoc-panel__badge--small[_ngcontent-%COMP%] { padding: 1px 5px; font-size: 10px; margin-left: 4px; }\n .prism-jsdoc-panel__section[_ngcontent-%COMP%] { margin-bottom: 20px; }\n .prism-jsdoc-panel__heading[_ngcontent-%COMP%] {\n font-size: 11px; font-weight: 700; text-transform: uppercase;\n letter-spacing: 0.08em; margin: 22px 0 10px;\n color: var(--%NS%prism-text-ghost);\n }\n .prism-jsdoc-panel__code[_ngcontent-%COMP%] {\n margin: 0 0 8px; padding: 0;\n background: var(--%NS%prism-bg-surface);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 8px; overflow: auto;\n }\n .prism-jsdoc-panel__code[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-sm); line-height: 1.5;\n padding: 8px 12px; display: block;\n background: transparent !important;\n color: var(--%NS%prism-text-2);\n }\n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs { background: transparent; color: var(--%NS%prism-text-2); }\n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-tag, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-name, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-selector-tag, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-keyword, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-title, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-title.function_, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-built_in, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-type { color: var(--%NS%prism-code-tag); }\n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-attr, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-attribute, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-property, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-variable, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-template-variable, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-params { color: var(--%NS%prism-code-attr); }\n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-string, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-doctag, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-regexp, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-symbol, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-number, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-literal { color: var(--%NS%prism-code-str); }\n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-comment, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-quote, \n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-meta { color: var(--%NS%prism-code-com); font-style: italic; }\n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-deletion { color: var(--%NS%prism-danger); }\n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-addition { color: var(--%NS%prism-success); }\n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-emphasis { font-style: italic; }\n [_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-strong { font-weight: 700; }\n .prism-jsdoc-panel__table[_ngcontent-%COMP%] {\n width: 100%; border-collapse: collapse;\n font-size: var(--%NS%fs-md);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 8px; overflow: hidden;\n }\n .prism-jsdoc-panel__table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left; padding: 8px 12px;\n background: var(--%NS%prism-bg-surface);\n font-size: 10.5px; text-transform: uppercase;\n letter-spacing: 0.06em; font-weight: 700;\n color: var(--%NS%prism-text-ghost);\n border-bottom: 1px solid var(--%NS%prism-border);\n }\n .prism-jsdoc-panel__table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 12px;\n border-bottom: 1px solid var(--%NS%prism-border);\n vertical-align: top;\n }\n .prism-jsdoc-panel__table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] { border-bottom: 0; }\n .prism-jsdoc-panel__row--deprecated[_ngcontent-%COMP%] td[_ngcontent-%COMP%] { opacity: 0.6; }\n .prism-jsdoc-panel__cell--name[_ngcontent-%COMP%] code[_ngcontent-%COMP%], \n .prism-jsdoc-panel__cell--type[_ngcontent-%COMP%] code[_ngcontent-%COMP%], \n .prism-jsdoc-panel__cell--default[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-sm); color: var(--%NS%prism-primary);\n background: color-mix(in srgb, var(--%NS%prism-primary) 8%, transparent);\n padding: 1px 5px; border-radius: var(--%NS%radius-xs);\n }\n .prism-jsdoc-panel__muted[_ngcontent-%COMP%] { color: var(--%NS%prism-text-muted); }\n .prism-jsdoc-panel__cell--doc[_ngcontent-%COMP%] { color: var(--%NS%prism-text); line-height: 1.4; }\n .prism-jsdoc-panel__since-sep[_ngcontent-%COMP%] { color: var(--%NS%prism-text-muted); }\n .prism-jsdoc-panel__since[_ngcontent-%COMP%] { color: var(--%NS%prism-text-muted); font-size: var(--%NS%fs-sm); }\n\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] [_ngcontent-%COMP%]:first-child { margin-top: 0; }\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] [_ngcontent-%COMP%]:last-child { margin-bottom: 0; }\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] p[_ngcontent-%COMP%] { margin: 0 0 8px; line-height: 1.7; }\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] h1[_ngcontent-%COMP%], \n .prism-jsdoc-panel__description[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], \n .prism-jsdoc-panel__description[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text);\n font-weight: 600;\n line-height: 1.3;\n margin: 18px 0 8px;\n }\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] { font-size: 18px; }\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] { font-size: 15px; }\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 11px; font-weight: 700;\n text-transform: uppercase; letter-spacing: 0.08em;\n color: var(--%NS%prism-text-ghost);\n }\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] ul[_ngcontent-%COMP%], \n .prism-jsdoc-panel__description[_ngcontent-%COMP%] ol[_ngcontent-%COMP%] {\n margin: 0 0 8px; padding-left: 20px;\n }\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] li[_ngcontent-%COMP%] { margin: 2px 0; line-height: 1.6; }\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n color: var(--%NS%prism-primary);\n text-decoration: none;\n }\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover { text-decoration: underline; }\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] { color: var(--%NS%prism-text); font-weight: 600; }\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] code[_ngcontent-%COMP%], \n .prism-jsdoc-panel__cell--doc[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-sm); color: var(--%NS%prism-primary);\n background: color-mix(in srgb, var(--%NS%prism-primary) 8%, transparent);\n padding: 1px 5px; border-radius: var(--%NS%radius-xs);\n }\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] {\n margin: 0 0 8px; padding: 0;\n background: var(--%NS%prism-bg-surface);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 8px; overflow: auto;\n }\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-sm); line-height: 1.5;\n padding: 8px 12px; display: block;\n background: none; color: var(--%NS%prism-text);\n }\n .prism-jsdoc-panel__description[_ngcontent-%COMP%] blockquote[_ngcontent-%COMP%] {\n margin: 0 0 8px;\n padding: 4px 12px;\n border-left: 3px solid var(--%NS%prism-border);\n color: var(--%NS%prism-text-2);\n }"] });
|
|
482
|
+
} }, dependencies: [Highlight], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n overflow: auto;\n}\n\n.prism-jsdoc-panel[_ngcontent-%COMP%] {\n max-width: 880px;\n padding: 20px 24px;\n font-family: var(--%NS%font-sans);\n font-size: var(--%NS%fs-md);\n color: var(--%NS%prism-text);\n}\n\n.prism-jsdoc-panel__empty[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 120px;\n color: var(--%NS%prism-text-muted);\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] {\n margin: 0 0 18px;\n font-size: 14px;\n line-height: 1.7;\n color: var(--%NS%prism-text-2);\n}\n\n.prism-jsdoc-panel__meta[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-bottom: 18px;\n}\n\n.prism-jsdoc-panel__meta-item[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n align-items: center;\n padding: 3px 9px;\n font-size: var(--%NS%fs-sm);\n color: var(--%NS%prism-text-2);\n background: var(--%NS%prism-input-bg);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 4px;\n}\n\n.prism-jsdoc-panel__meta-label[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-weight: 500;\n color: var(--%NS%prism-primary);\n}\n\n.prism-jsdoc-panel__badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n font-size: 12px;\n font-weight: 600;\n border-radius: 10px;\n}\n\n.prism-jsdoc-panel__badge--deprecated[_ngcontent-%COMP%] {\n color: var(--%NS%prism-warn);\n background: color-mix(in srgb, var(--%NS%prism-warn) 15%, transparent);\n}\n\n.prism-jsdoc-panel__badge--required[_ngcontent-%COMP%] {\n margin-left: 4px;\n font-weight: 700;\n color: var(--%NS%prism-accent);\n}\n\n.prism-jsdoc-panel__badge--small[_ngcontent-%COMP%] {\n padding: 1px 5px;\n margin-left: 4px;\n font-size: 10px;\n}\n\n.prism-jsdoc-panel__section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.prism-jsdoc-panel__heading[_ngcontent-%COMP%] {\n margin: 22px 0 10px;\n font-size: 11px;\n font-weight: 700;\n color: var(--%NS%prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.prism-jsdoc-panel__code[_ngcontent-%COMP%] {\n padding: 0;\n margin: 0 0 8px;\n overflow: auto;\n background: var(--%NS%prism-bg-surface);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 8px;\n}\n\n.prism-jsdoc-panel__code[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n display: block;\n padding: 8px 12px;\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-sm);\n line-height: 1.5;\n color: var(--%NS%prism-text-2);\n background: transparent !important;\n}\n\n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs {\n color: var(--%NS%prism-text-2);\n background: transparent;\n}\n\n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-tag, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-name, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-selector-tag, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-keyword, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-title, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-title.function_, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-built_in, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-type {\n color: var(--%NS%prism-code-tag);\n}\n\n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-attr, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-attribute, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-property, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-variable, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-template-variable, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-params {\n color: var(--%NS%prism-code-attr);\n}\n\n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-string, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-doctag, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-regexp, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-symbol, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-number, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-literal {\n color: var(--%NS%prism-code-str);\n}\n\n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-comment, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-quote, \n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-meta {\n font-style: italic;\n color: var(--%NS%prism-code-com);\n}\n\n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-deletion {\n color: var(--%NS%prism-danger);\n}\n\n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-addition {\n color: var(--%NS%prism-success);\n}\n\n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-emphasis {\n font-style: italic;\n}\n\n[_nghost-%COMP%] .prism-jsdoc-panel__code .hljs-strong {\n font-weight: 700;\n}\n\n.prism-jsdoc-panel__table[_ngcontent-%COMP%] {\n width: 100%;\n overflow: hidden;\n font-size: var(--%NS%fs-md);\n border-collapse: collapse;\n border: 1px solid var(--%NS%prism-border);\n border-radius: 8px;\n}\n\n.prism-jsdoc-panel__table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 8px 12px;\n font-size: 10.5px;\n font-weight: 700;\n color: var(--%NS%prism-text-ghost);\n text-align: left;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n background: var(--%NS%prism-bg-surface);\n border-bottom: 1px solid var(--%NS%prism-border);\n}\n\n.prism-jsdoc-panel__table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 12px;\n vertical-align: top;\n border-bottom: 1px solid var(--%NS%prism-border);\n}\n\n.prism-jsdoc-panel__table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] {\n border-bottom: 0;\n}\n\n.prism-jsdoc-panel__row--deprecated[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n.prism-jsdoc-panel__cell--name[_ngcontent-%COMP%] code[_ngcontent-%COMP%], \n.prism-jsdoc-panel__cell--type[_ngcontent-%COMP%] code[_ngcontent-%COMP%], \n.prism-jsdoc-panel__cell--default[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n padding: 1px 5px;\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-sm);\n color: var(--%NS%prism-primary);\n background: color-mix(in srgb, var(--%NS%prism-primary) 8%, transparent);\n border-radius: var(--%NS%radius-xs);\n}\n\n.prism-jsdoc-panel__muted[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n}\n\n.prism-jsdoc-panel__cell--doc[_ngcontent-%COMP%] {\n line-height: 1.4;\n color: var(--%NS%prism-text);\n}\n\n.prism-jsdoc-panel__since-sep[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n}\n\n.prism-jsdoc-panel__since[_ngcontent-%COMP%] {\n font-size: var(--%NS%fs-sm);\n color: var(--%NS%prism-text-muted);\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] [_ngcontent-%COMP%]:first-child {\n margin-top: 0;\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] [_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0 0 8px;\n line-height: 1.7;\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] h1[_ngcontent-%COMP%], \n.prism-jsdoc-panel__description[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], \n.prism-jsdoc-panel__description[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 18px 0 8px;\n font-weight: 600;\n line-height: 1.3;\n color: var(--%NS%prism-text);\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 18px;\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 15px;\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n color: var(--%NS%prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] ul[_ngcontent-%COMP%], \n.prism-jsdoc-panel__description[_ngcontent-%COMP%] ol[_ngcontent-%COMP%] {\n padding-left: 20px;\n margin: 0 0 8px;\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] li[_ngcontent-%COMP%] {\n margin: 2px 0;\n line-height: 1.6;\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n color: var(--%NS%prism-primary);\n text-decoration: none;\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--%NS%prism-text);\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] code[_ngcontent-%COMP%], \n.prism-jsdoc-panel__cell--doc[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n padding: 1px 5px;\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-sm);\n color: var(--%NS%prism-primary);\n background: color-mix(in srgb, var(--%NS%prism-primary) 8%, transparent);\n border-radius: var(--%NS%radius-xs);\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] {\n padding: 0;\n margin: 0 0 8px;\n overflow: auto;\n background: var(--%NS%prism-bg-surface);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 8px;\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n display: block;\n padding: 8px 12px;\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-sm);\n line-height: 1.5;\n color: var(--%NS%prism-text);\n background: none;\n}\n\n.prism-jsdoc-panel__description[_ngcontent-%COMP%] blockquote[_ngcontent-%COMP%] {\n padding: 4px 12px;\n margin: 0 0 8px;\n color: var(--%NS%prism-text-2);\n border-left: 3px solid var(--%NS%prism-border);\n}"] });
|
|
486
483
|
}
|
|
487
484
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(JsDocPanelComponent, [{
|
|
488
485
|
type: Component,
|
|
489
|
-
args: [{ selector: 'prism-jsdoc-panel', standalone: true, imports: [Highlight], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
490
|
-
<div class="prism-jsdoc-panel">
|
|
491
|
-
@if (!activeComponent()) {
|
|
492
|
-
<div class="prism-jsdoc-panel__empty">
|
|
493
|
-
Select a component to view API documentation.
|
|
494
|
-
</div>
|
|
495
|
-
} @else { @if (renderedClassDescription(); as descHtml) {
|
|
496
|
-
<div class="prism-jsdoc-panel__description" [innerHTML]="descHtml"></div>
|
|
497
|
-
} @if (hasTags()) {
|
|
498
|
-
<div class="prism-jsdoc-panel__meta">
|
|
499
|
-
@if (isDeprecated()) {
|
|
500
|
-
<span
|
|
501
|
-
class="prism-jsdoc-panel__badge prism-jsdoc-panel__badge--deprecated"
|
|
502
|
-
>
|
|
503
|
-
Deprecated{{ deprecatedMessage() ? ': ' + deprecatedMessage() : '' }}
|
|
504
|
-
</span>
|
|
505
|
-
} @if (version()) {
|
|
506
|
-
<span class="prism-jsdoc-panel__meta-item">
|
|
507
|
-
<span class="prism-jsdoc-panel__meta-label">Version:</span>
|
|
508
|
-
{{ version() }}
|
|
509
|
-
</span>
|
|
510
|
-
} @if (since()) {
|
|
511
|
-
<span class="prism-jsdoc-panel__meta-item">
|
|
512
|
-
<span class="prism-jsdoc-panel__meta-label">Since:</span>
|
|
513
|
-
{{ since() }}
|
|
514
|
-
</span>
|
|
515
|
-
} @for (ref of seeRefs(); track $index) {
|
|
516
|
-
<span class="prism-jsdoc-panel__meta-item">
|
|
517
|
-
<span class="prism-jsdoc-panel__meta-label">See:</span> {{ ref }}
|
|
518
|
-
</span>
|
|
519
|
-
}
|
|
520
|
-
</div>
|
|
521
|
-
} @if (examples().length) {
|
|
522
|
-
<div class="prism-jsdoc-panel__section">
|
|
523
|
-
<h3 class="prism-jsdoc-panel__heading">Examples</h3>
|
|
524
|
-
@for (example of examples(); track $index) { @let parsed =
|
|
525
|
-
parseExample(example);
|
|
526
|
-
<pre
|
|
527
|
-
class="prism-jsdoc-panel__code"
|
|
528
|
-
><code [highlight]="parsed.code" [language]="parsed.lang"></code></pre>
|
|
529
|
-
}
|
|
530
|
-
</div>
|
|
531
|
-
} @if (inputs().length) {
|
|
532
|
-
<div class="prism-jsdoc-panel__section">
|
|
533
|
-
<h3 class="prism-jsdoc-panel__heading">Inputs</h3>
|
|
534
|
-
<table class="prism-jsdoc-panel__table">
|
|
535
|
-
<thead>
|
|
536
|
-
<tr>
|
|
537
|
-
<th>Name</th>
|
|
538
|
-
<th>Type</th>
|
|
539
|
-
<th>Default</th>
|
|
540
|
-
<th>Required</th>
|
|
541
|
-
<th>Description</th>
|
|
542
|
-
</tr>
|
|
543
|
-
</thead>
|
|
544
|
-
<tbody>
|
|
545
|
-
@for (inp of inputs(); track inp.name) {
|
|
546
|
-
<tr
|
|
547
|
-
[class.prism-jsdoc-panel__row--deprecated]="
|
|
548
|
-
isMemberDeprecated(inp.name)
|
|
549
|
-
"
|
|
550
|
-
>
|
|
551
|
-
<td class="prism-jsdoc-panel__cell--name">
|
|
552
|
-
<code>{{ inp.name }}</code>
|
|
553
|
-
@if (isMemberDeprecated(inp.name)) {
|
|
554
|
-
<span
|
|
555
|
-
class="prism-jsdoc-panel__badge prism-jsdoc-panel__badge--deprecated prism-jsdoc-panel__badge--small"
|
|
556
|
-
>deprecated</span
|
|
557
|
-
>
|
|
558
|
-
}
|
|
559
|
-
</td>
|
|
560
|
-
<td class="prism-jsdoc-panel__cell--type">
|
|
561
|
-
<code>{{ inp.rawType ?? inp.type }}</code>
|
|
562
|
-
</td>
|
|
563
|
-
<td class="prism-jsdoc-panel__cell--default">
|
|
564
|
-
@if (inp.defaultValue !== undefined) {
|
|
565
|
-
<code>{{ formatDefault(inp.defaultValue) }}</code>
|
|
566
|
-
} @else {
|
|
567
|
-
<span class="prism-jsdoc-panel__muted">—</span>
|
|
568
|
-
}
|
|
569
|
-
</td>
|
|
570
|
-
<td class="prism-jsdoc-panel__cell--required">
|
|
571
|
-
@if (inp.required) {
|
|
572
|
-
<span
|
|
573
|
-
class="prism-jsdoc-panel__badge prism-jsdoc-panel__badge--required"
|
|
574
|
-
>required</span
|
|
575
|
-
>
|
|
576
|
-
} @else {
|
|
577
|
-
<span class="prism-jsdoc-panel__muted">—</span>
|
|
578
|
-
}
|
|
579
|
-
</td>
|
|
580
|
-
<td class="prism-jsdoc-panel__cell--doc">
|
|
581
|
-
@if (inp.doc) {
|
|
582
|
-
<span [innerHTML]="renderInline(inp.doc)"></span>
|
|
583
|
-
} @if (getMemberSince(inp.name); as since) { @if (inp.doc) {
|
|
584
|
-
<span class="prism-jsdoc-panel__since-sep"> · </span>
|
|
585
|
-
}
|
|
586
|
-
<span class="prism-jsdoc-panel__since">Since {{ since }}</span>
|
|
587
|
-
}
|
|
588
|
-
</td>
|
|
589
|
-
</tr>
|
|
590
|
-
}
|
|
591
|
-
</tbody>
|
|
592
|
-
</table>
|
|
593
|
-
</div>
|
|
594
|
-
} @if (outputs().length) {
|
|
595
|
-
<div class="prism-jsdoc-panel__section">
|
|
596
|
-
<h3 class="prism-jsdoc-panel__heading">Outputs</h3>
|
|
597
|
-
<table class="prism-jsdoc-panel__table">
|
|
598
|
-
<thead>
|
|
599
|
-
<tr>
|
|
600
|
-
<th>Name</th>
|
|
601
|
-
<th>Description</th>
|
|
602
|
-
</tr>
|
|
603
|
-
</thead>
|
|
604
|
-
<tbody>
|
|
605
|
-
@for (out of outputs(); track out.name) {
|
|
606
|
-
<tr
|
|
607
|
-
[class.prism-jsdoc-panel__row--deprecated]="
|
|
608
|
-
isMemberDeprecated(out.name)
|
|
609
|
-
"
|
|
610
|
-
>
|
|
611
|
-
<td class="prism-jsdoc-panel__cell--name">
|
|
612
|
-
<code>{{ out.name }}</code>
|
|
613
|
-
@if (isMemberDeprecated(out.name)) {
|
|
614
|
-
<span
|
|
615
|
-
class="prism-jsdoc-panel__badge prism-jsdoc-panel__badge--deprecated prism-jsdoc-panel__badge--small"
|
|
616
|
-
>deprecated</span
|
|
617
|
-
>
|
|
618
|
-
}
|
|
619
|
-
</td>
|
|
620
|
-
<td class="prism-jsdoc-panel__cell--doc">
|
|
621
|
-
@if (out.doc) {
|
|
622
|
-
<span [innerHTML]="renderInline(out.doc)"></span>
|
|
623
|
-
} @if (getMemberSince(out.name); as since) { @if (out.doc) {
|
|
624
|
-
<span class="prism-jsdoc-panel__since-sep"> · </span>
|
|
625
|
-
}
|
|
626
|
-
<span class="prism-jsdoc-panel__since">Since {{ since }}</span>
|
|
627
|
-
}
|
|
628
|
-
</td>
|
|
629
|
-
</tr>
|
|
630
|
-
}
|
|
631
|
-
</tbody>
|
|
632
|
-
</table>
|
|
633
|
-
</div>
|
|
634
|
-
} @if (methods().length) {
|
|
635
|
-
<div class="prism-jsdoc-panel__section">
|
|
636
|
-
<h3 class="prism-jsdoc-panel__heading">Methods</h3>
|
|
637
|
-
<table class="prism-jsdoc-panel__table">
|
|
638
|
-
<thead>
|
|
639
|
-
<tr>
|
|
640
|
-
<th>Name</th>
|
|
641
|
-
<th>Parameters</th>
|
|
642
|
-
<th>Returns</th>
|
|
643
|
-
<th>Description</th>
|
|
644
|
-
</tr>
|
|
645
|
-
</thead>
|
|
646
|
-
<tbody>
|
|
647
|
-
@for (method of methods(); track method.name) {
|
|
648
|
-
<tr
|
|
649
|
-
[class.prism-jsdoc-panel__row--deprecated]="
|
|
650
|
-
!!method.tags.deprecated
|
|
651
|
-
"
|
|
652
|
-
>
|
|
653
|
-
<td class="prism-jsdoc-panel__cell--name">
|
|
654
|
-
<code>{{ method.name }}()</code>
|
|
655
|
-
@if (method.tags.deprecated) {
|
|
656
|
-
<span
|
|
657
|
-
class="prism-jsdoc-panel__badge prism-jsdoc-panel__badge--deprecated prism-jsdoc-panel__badge--small"
|
|
658
|
-
>deprecated</span
|
|
659
|
-
>
|
|
660
|
-
}
|
|
661
|
-
</td>
|
|
662
|
-
<td class="prism-jsdoc-panel__cell--type">
|
|
663
|
-
@if (method.params.length) { @for (p of method.params; track
|
|
664
|
-
p.name) {
|
|
665
|
-
<div>
|
|
666
|
-
<code>{{ p.name }}{{ p.type ? ': ' + p.type : '' }}</code>
|
|
667
|
-
</div>
|
|
668
|
-
} } @else {
|
|
669
|
-
<span class="prism-jsdoc-panel__muted">—</span>
|
|
670
|
-
}
|
|
671
|
-
</td>
|
|
672
|
-
<td class="prism-jsdoc-panel__cell--type">
|
|
673
|
-
@if (method.returnType) {
|
|
674
|
-
<code>{{ method.returnType }}</code>
|
|
675
|
-
} @else {
|
|
676
|
-
<span class="prism-jsdoc-panel__muted">void</span>
|
|
677
|
-
}
|
|
678
|
-
</td>
|
|
679
|
-
<td class="prism-jsdoc-panel__cell--doc">
|
|
680
|
-
@if (method.description) {
|
|
681
|
-
<span [innerHTML]="renderInline(method.description)"></span>
|
|
682
|
-
}
|
|
683
|
-
</td>
|
|
684
|
-
</tr>
|
|
685
|
-
}
|
|
686
|
-
</tbody>
|
|
687
|
-
</table>
|
|
688
|
-
</div>
|
|
689
|
-
} }
|
|
690
|
-
</div>
|
|
691
|
-
`, styles: ["\n :host { display: block; height: 100%; overflow: auto; }\n .prism-jsdoc-panel {\n padding: 20px 24px;\n max-width: 880px;\n font-family: var(--font-sans);\n font-size: var(--fs-md);\n color: var(--prism-text);\n }\n .prism-jsdoc-panel__empty {\n display: flex; align-items: center; justify-content: center;\n min-height: 120px; color: var(--prism-text-muted);\n }\n .prism-jsdoc-panel__description {\n margin: 0 0 18px;\n font-size: 14px;\n line-height: 1.7;\n color: var(--prism-text-2);\n }\n .prism-jsdoc-panel__meta {\n display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 18px;\n }\n .prism-jsdoc-panel__meta-item {\n display: flex; align-items: center; gap: 6px;\n padding: 3px 9px; border-radius: 4px;\n background: var(--prism-input-bg);\n border: 1px solid var(--prism-border);\n font-size: var(--fs-sm); color: var(--prism-text-2);\n }\n .prism-jsdoc-panel__meta-label {\n font-weight: 500; color: var(--prism-primary);\n font-family: var(--font-mono);\n }\n .prism-jsdoc-panel__badge {\n display: inline-flex; align-items: center;\n padding: 2px 8px; border-radius: 10px;\n font-size: 12px; font-weight: 600;\n }\n .prism-jsdoc-panel__badge--deprecated {\n background: color-mix(in srgb, var(--prism-warn) 15%, transparent);\n color: var(--prism-warn);\n }\n .prism-jsdoc-panel__badge--required {\n color: var(--prism-accent); font-weight: 700; margin-left: 4px;\n }\n .prism-jsdoc-panel__badge--small { padding: 1px 5px; font-size: 10px; margin-left: 4px; }\n .prism-jsdoc-panel__section { margin-bottom: 20px; }\n .prism-jsdoc-panel__heading {\n font-size: 11px; font-weight: 700; text-transform: uppercase;\n letter-spacing: 0.08em; margin: 22px 0 10px;\n color: var(--prism-text-ghost);\n }\n .prism-jsdoc-panel__code {\n margin: 0 0 8px; padding: 0;\n background: var(--prism-bg-surface);\n border: 1px solid var(--prism-border);\n border-radius: 8px; overflow: auto;\n }\n .prism-jsdoc-panel__code code {\n font-family: var(--font-mono);\n font-size: var(--fs-sm); line-height: 1.5;\n padding: 8px 12px; display: block;\n background: transparent !important;\n color: var(--prism-text-2);\n }\n :host ::ng-deep .prism-jsdoc-panel__code .hljs { background: transparent; color: var(--prism-text-2); }\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-tag,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-name,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-selector-tag,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-keyword,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-title,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-title.function_,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-built_in,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-type { color: var(--prism-code-tag); }\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-attr,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-attribute,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-property,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-variable,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-template-variable,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-params { color: var(--prism-code-attr); }\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-string,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-doctag,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-regexp,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-symbol,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-number,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-literal { color: var(--prism-code-str); }\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-comment,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-quote,\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-meta { color: var(--prism-code-com); font-style: italic; }\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-deletion { color: var(--prism-danger); }\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-addition { color: var(--prism-success); }\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-emphasis { font-style: italic; }\n :host ::ng-deep .prism-jsdoc-panel__code .hljs-strong { font-weight: 700; }\n .prism-jsdoc-panel__table {\n width: 100%; border-collapse: collapse;\n font-size: var(--fs-md);\n border: 1px solid var(--prism-border);\n border-radius: 8px; overflow: hidden;\n }\n .prism-jsdoc-panel__table th {\n text-align: left; padding: 8px 12px;\n background: var(--prism-bg-surface);\n font-size: 10.5px; text-transform: uppercase;\n letter-spacing: 0.06em; font-weight: 700;\n color: var(--prism-text-ghost);\n border-bottom: 1px solid var(--prism-border);\n }\n .prism-jsdoc-panel__table td {\n padding: 10px 12px;\n border-bottom: 1px solid var(--prism-border);\n vertical-align: top;\n }\n .prism-jsdoc-panel__table tr:last-child td { border-bottom: 0; }\n .prism-jsdoc-panel__row--deprecated td { opacity: 0.6; }\n .prism-jsdoc-panel__cell--name code,\n .prism-jsdoc-panel__cell--type code,\n .prism-jsdoc-panel__cell--default code {\n font-family: var(--font-mono);\n font-size: var(--fs-sm); color: var(--prism-primary);\n background: color-mix(in srgb, var(--prism-primary) 8%, transparent);\n padding: 1px 5px; border-radius: var(--radius-xs);\n }\n .prism-jsdoc-panel__muted { color: var(--prism-text-muted); }\n .prism-jsdoc-panel__cell--doc { color: var(--prism-text); line-height: 1.4; }\n .prism-jsdoc-panel__since-sep { color: var(--prism-text-muted); }\n .prism-jsdoc-panel__since { color: var(--prism-text-muted); font-size: var(--fs-sm); }\n\n .prism-jsdoc-panel__description :first-child { margin-top: 0; }\n .prism-jsdoc-panel__description :last-child { margin-bottom: 0; }\n .prism-jsdoc-panel__description p { margin: 0 0 8px; line-height: 1.7; }\n .prism-jsdoc-panel__description h1,\n .prism-jsdoc-panel__description h2,\n .prism-jsdoc-panel__description h3 {\n color: var(--prism-text);\n font-weight: 600;\n line-height: 1.3;\n margin: 18px 0 8px;\n }\n .prism-jsdoc-panel__description h1 { font-size: 18px; }\n .prism-jsdoc-panel__description h2 { font-size: 15px; }\n .prism-jsdoc-panel__description h3 {\n font-size: 11px; font-weight: 700;\n text-transform: uppercase; letter-spacing: 0.08em;\n color: var(--prism-text-ghost);\n }\n .prism-jsdoc-panel__description ul,\n .prism-jsdoc-panel__description ol {\n margin: 0 0 8px; padding-left: 20px;\n }\n .prism-jsdoc-panel__description li { margin: 2px 0; line-height: 1.6; }\n .prism-jsdoc-panel__description a {\n color: var(--prism-primary);\n text-decoration: none;\n }\n .prism-jsdoc-panel__description a:hover { text-decoration: underline; }\n .prism-jsdoc-panel__description strong { color: var(--prism-text); font-weight: 600; }\n .prism-jsdoc-panel__description code,\n .prism-jsdoc-panel__cell--doc code {\n font-family: var(--font-mono);\n font-size: var(--fs-sm); color: var(--prism-primary);\n background: color-mix(in srgb, var(--prism-primary) 8%, transparent);\n padding: 1px 5px; border-radius: var(--radius-xs);\n }\n .prism-jsdoc-panel__description pre {\n margin: 0 0 8px; padding: 0;\n background: var(--prism-bg-surface);\n border: 1px solid var(--prism-border);\n border-radius: 8px; overflow: auto;\n }\n .prism-jsdoc-panel__description pre code {\n font-family: var(--font-mono);\n font-size: var(--fs-sm); line-height: 1.5;\n padding: 8px 12px; display: block;\n background: none; color: var(--prism-text);\n }\n .prism-jsdoc-panel__description blockquote {\n margin: 0 0 8px;\n padding: 4px 12px;\n border-left: 3px solid var(--prism-border);\n color: var(--prism-text-2);\n }\n "] }]
|
|
486
|
+
args: [{ selector: 'prism-jsdoc-panel', standalone: true, imports: [Highlight], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"prism-jsdoc-panel\">\n @if (!activeComponent()) {\n <div class=\"prism-jsdoc-panel__empty\"> Select a component to view API documentation. </div>\n } @else {\n @if (renderedClassDescription(); as descHtml) {\n <div\n class=\"prism-jsdoc-panel__description\"\n [innerHTML]=\"descHtml\"></div>\n }\n @if (hasTags()) {\n <div class=\"prism-jsdoc-panel__meta\">\n @if (isDeprecated()) {\n <span class=\"prism-jsdoc-panel__badge prism-jsdoc-panel__badge--deprecated\">\n Deprecated{{ deprecatedMessage() ? ': ' + deprecatedMessage() : '' }}\n </span>\n }\n @if (version()) {\n <span class=\"prism-jsdoc-panel__meta-item\">\n <span class=\"prism-jsdoc-panel__meta-label\">Version:</span>\n {{ version() }}\n </span>\n }\n @if (since()) {\n <span class=\"prism-jsdoc-panel__meta-item\">\n <span class=\"prism-jsdoc-panel__meta-label\">Since:</span>\n {{ since() }}\n </span>\n }\n @for (ref of seeRefs(); track $index) {\n <span class=\"prism-jsdoc-panel__meta-item\"> <span class=\"prism-jsdoc-panel__meta-label\">See:</span> {{ ref }} </span>\n }\n </div>\n }\n @if (examples().length) {\n <div class=\"prism-jsdoc-panel__section\">\n <h3 class=\"prism-jsdoc-panel__heading\">Examples</h3>\n @for (example of examples(); track $index) {\n @let parsed = parseExample(example);\n <pre class=\"prism-jsdoc-panel__code\"><code [highlight]=\"parsed.code\" [language]=\"parsed.lang\"></code></pre>\n }\n </div>\n }\n @if (inputs().length) {\n <div class=\"prism-jsdoc-panel__section\">\n <h3 class=\"prism-jsdoc-panel__heading\">Inputs</h3>\n <table class=\"prism-jsdoc-panel__table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Type</th>\n <th>Default</th>\n <th>Required</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n @for (inp of inputs(); track inp.name) {\n <tr [class.prism-jsdoc-panel__row--deprecated]=\"isMemberDeprecated(inp.name)\">\n <td class=\"prism-jsdoc-panel__cell--name\">\n <code>{{ inp.name }}</code>\n @if (isMemberDeprecated(inp.name)) {\n <span class=\"prism-jsdoc-panel__badge prism-jsdoc-panel__badge--deprecated prism-jsdoc-panel__badge--small\">deprecated</span>\n }\n </td>\n <td class=\"prism-jsdoc-panel__cell--type\">\n <code>{{ inp.rawType ?? inp.type }}</code>\n </td>\n <td class=\"prism-jsdoc-panel__cell--default\">\n @if (inp.defaultValue !== undefined) {\n <code>{{ formatDefault(inp.defaultValue) }}</code>\n } @else {\n <span class=\"prism-jsdoc-panel__muted\">\u2014</span>\n }\n </td>\n <td class=\"prism-jsdoc-panel__cell--required\">\n @if (inp.required) {\n <span class=\"prism-jsdoc-panel__badge prism-jsdoc-panel__badge--required\">required</span>\n } @else {\n <span class=\"prism-jsdoc-panel__muted\">\u2014</span>\n }\n </td>\n <td class=\"prism-jsdoc-panel__cell--doc\">\n @if (inp.doc) {\n <span [innerHTML]=\"renderInline(inp.doc)\"></span>\n }\n @if (getMemberSince(inp.name); as since) {\n @if (inp.doc) {\n <span class=\"prism-jsdoc-panel__since-sep\"> \u00B7 </span>\n }\n <span class=\"prism-jsdoc-panel__since\">Since {{ since }}</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n @if (outputs().length) {\n <div class=\"prism-jsdoc-panel__section\">\n <h3 class=\"prism-jsdoc-panel__heading\">Outputs</h3>\n <table class=\"prism-jsdoc-panel__table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n @for (out of outputs(); track out.name) {\n <tr [class.prism-jsdoc-panel__row--deprecated]=\"isMemberDeprecated(out.name)\">\n <td class=\"prism-jsdoc-panel__cell--name\">\n <code>{{ out.name }}</code>\n @if (isMemberDeprecated(out.name)) {\n <span class=\"prism-jsdoc-panel__badge prism-jsdoc-panel__badge--deprecated prism-jsdoc-panel__badge--small\">deprecated</span>\n }\n </td>\n <td class=\"prism-jsdoc-panel__cell--doc\">\n @if (out.doc) {\n <span [innerHTML]=\"renderInline(out.doc)\"></span>\n }\n @if (getMemberSince(out.name); as since) {\n @if (out.doc) {\n <span class=\"prism-jsdoc-panel__since-sep\"> \u00B7 </span>\n }\n <span class=\"prism-jsdoc-panel__since\">Since {{ since }}</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n @if (methods().length) {\n <div class=\"prism-jsdoc-panel__section\">\n <h3 class=\"prism-jsdoc-panel__heading\">Methods</h3>\n <table class=\"prism-jsdoc-panel__table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Parameters</th>\n <th>Returns</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n @for (method of methods(); track method.name) {\n <tr [class.prism-jsdoc-panel__row--deprecated]=\"!!method.tags.deprecated\">\n <td class=\"prism-jsdoc-panel__cell--name\">\n <code>{{ method.name }}()</code>\n @if (method.tags.deprecated) {\n <span class=\"prism-jsdoc-panel__badge prism-jsdoc-panel__badge--deprecated prism-jsdoc-panel__badge--small\">deprecated</span>\n }\n </td>\n <td class=\"prism-jsdoc-panel__cell--type\">\n @if (method.params.length) {\n @for (p of method.params; track p.name) {\n <div>\n <code>{{ p.name }}{{ p.type ? ': ' + p.type : '' }}</code>\n </div>\n }\n } @else {\n <span class=\"prism-jsdoc-panel__muted\">\u2014</span>\n }\n </td>\n <td class=\"prism-jsdoc-panel__cell--type\">\n @if (method.returnType) {\n <code>{{ method.returnType }}</code>\n } @else {\n <span class=\"prism-jsdoc-panel__muted\">void</span>\n }\n </td>\n <td class=\"prism-jsdoc-panel__cell--doc\">\n @if (method.description) {\n <span [innerHTML]=\"renderInline(method.description)\"></span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n }\n</div>\n", styles: [":host {\n display: block;\n height: 100%;\n overflow: auto;\n}\n\n.prism-jsdoc-panel {\n max-width: 880px;\n padding: 20px 24px;\n font-family: var(--font-sans);\n font-size: var(--fs-md);\n color: var(--prism-text);\n}\n\n.prism-jsdoc-panel__empty {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 120px;\n color: var(--prism-text-muted);\n}\n\n.prism-jsdoc-panel__description {\n margin: 0 0 18px;\n font-size: 14px;\n line-height: 1.7;\n color: var(--prism-text-2);\n}\n\n.prism-jsdoc-panel__meta {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-bottom: 18px;\n}\n\n.prism-jsdoc-panel__meta-item {\n display: flex;\n gap: 6px;\n align-items: center;\n padding: 3px 9px;\n font-size: var(--fs-sm);\n color: var(--prism-text-2);\n background: var(--prism-input-bg);\n border: 1px solid var(--prism-border);\n border-radius: 4px;\n}\n\n.prism-jsdoc-panel__meta-label {\n font-family: var(--font-mono);\n font-weight: 500;\n color: var(--prism-primary);\n}\n\n.prism-jsdoc-panel__badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n font-size: 12px;\n font-weight: 600;\n border-radius: 10px;\n}\n\n.prism-jsdoc-panel__badge--deprecated {\n color: var(--prism-warn);\n background: color-mix(in srgb, var(--prism-warn) 15%, transparent);\n}\n\n.prism-jsdoc-panel__badge--required {\n margin-left: 4px;\n font-weight: 700;\n color: var(--prism-accent);\n}\n\n.prism-jsdoc-panel__badge--small {\n padding: 1px 5px;\n margin-left: 4px;\n font-size: 10px;\n}\n\n.prism-jsdoc-panel__section {\n margin-bottom: 20px;\n}\n\n.prism-jsdoc-panel__heading {\n margin: 22px 0 10px;\n font-size: 11px;\n font-weight: 700;\n color: var(--prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.prism-jsdoc-panel__code {\n padding: 0;\n margin: 0 0 8px;\n overflow: auto;\n background: var(--prism-bg-surface);\n border: 1px solid var(--prism-border);\n border-radius: 8px;\n}\n\n.prism-jsdoc-panel__code code {\n display: block;\n padding: 8px 12px;\n font-family: var(--font-mono);\n font-size: var(--fs-sm);\n line-height: 1.5;\n color: var(--prism-text-2);\n background: transparent !important;\n}\n\n:host ::ng-deep .prism-jsdoc-panel__code .hljs {\n color: var(--prism-text-2);\n background: transparent;\n}\n\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-tag,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-name,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-selector-tag,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-keyword,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-title,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-title.function_,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-built_in,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-type {\n color: var(--prism-code-tag);\n}\n\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-attr,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-attribute,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-property,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-variable,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-template-variable,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-params {\n color: var(--prism-code-attr);\n}\n\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-string,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-doctag,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-regexp,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-symbol,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-number,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-literal {\n color: var(--prism-code-str);\n}\n\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-comment,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-quote,\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-meta {\n font-style: italic;\n color: var(--prism-code-com);\n}\n\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-deletion {\n color: var(--prism-danger);\n}\n\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-addition {\n color: var(--prism-success);\n}\n\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-emphasis {\n font-style: italic;\n}\n\n:host ::ng-deep .prism-jsdoc-panel__code .hljs-strong {\n font-weight: 700;\n}\n\n.prism-jsdoc-panel__table {\n width: 100%;\n overflow: hidden;\n font-size: var(--fs-md);\n border-collapse: collapse;\n border: 1px solid var(--prism-border);\n border-radius: 8px;\n}\n\n.prism-jsdoc-panel__table th {\n padding: 8px 12px;\n font-size: 10.5px;\n font-weight: 700;\n color: var(--prism-text-ghost);\n text-align: left;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n background: var(--prism-bg-surface);\n border-bottom: 1px solid var(--prism-border);\n}\n\n.prism-jsdoc-panel__table td {\n padding: 10px 12px;\n vertical-align: top;\n border-bottom: 1px solid var(--prism-border);\n}\n\n.prism-jsdoc-panel__table tr:last-child td {\n border-bottom: 0;\n}\n\n.prism-jsdoc-panel__row--deprecated td {\n opacity: 0.6;\n}\n\n.prism-jsdoc-panel__cell--name code,\n.prism-jsdoc-panel__cell--type code,\n.prism-jsdoc-panel__cell--default code {\n padding: 1px 5px;\n font-family: var(--font-mono);\n font-size: var(--fs-sm);\n color: var(--prism-primary);\n background: color-mix(in srgb, var(--prism-primary) 8%, transparent);\n border-radius: var(--radius-xs);\n}\n\n.prism-jsdoc-panel__muted {\n color: var(--prism-text-muted);\n}\n\n.prism-jsdoc-panel__cell--doc {\n line-height: 1.4;\n color: var(--prism-text);\n}\n\n.prism-jsdoc-panel__since-sep {\n color: var(--prism-text-muted);\n}\n\n.prism-jsdoc-panel__since {\n font-size: var(--fs-sm);\n color: var(--prism-text-muted);\n}\n\n.prism-jsdoc-panel__description :first-child {\n margin-top: 0;\n}\n\n.prism-jsdoc-panel__description :last-child {\n margin-bottom: 0;\n}\n\n.prism-jsdoc-panel__description p {\n margin: 0 0 8px;\n line-height: 1.7;\n}\n\n.prism-jsdoc-panel__description h1,\n.prism-jsdoc-panel__description h2,\n.prism-jsdoc-panel__description h3 {\n margin: 18px 0 8px;\n font-weight: 600;\n line-height: 1.3;\n color: var(--prism-text);\n}\n\n.prism-jsdoc-panel__description h1 {\n font-size: 18px;\n}\n\n.prism-jsdoc-panel__description h2 {\n font-size: 15px;\n}\n\n.prism-jsdoc-panel__description h3 {\n font-size: 11px;\n font-weight: 700;\n color: var(--prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.prism-jsdoc-panel__description ul,\n.prism-jsdoc-panel__description ol {\n padding-left: 20px;\n margin: 0 0 8px;\n}\n\n.prism-jsdoc-panel__description li {\n margin: 2px 0;\n line-height: 1.6;\n}\n\n.prism-jsdoc-panel__description a {\n color: var(--prism-primary);\n text-decoration: none;\n}\n\n.prism-jsdoc-panel__description a:hover {\n text-decoration: underline;\n}\n\n.prism-jsdoc-panel__description strong {\n font-weight: 600;\n color: var(--prism-text);\n}\n\n.prism-jsdoc-panel__description code,\n.prism-jsdoc-panel__cell--doc code {\n padding: 1px 5px;\n font-family: var(--font-mono);\n font-size: var(--fs-sm);\n color: var(--prism-primary);\n background: color-mix(in srgb, var(--prism-primary) 8%, transparent);\n border-radius: var(--radius-xs);\n}\n\n.prism-jsdoc-panel__description pre {\n padding: 0;\n margin: 0 0 8px;\n overflow: auto;\n background: var(--prism-bg-surface);\n border: 1px solid var(--prism-border);\n border-radius: 8px;\n}\n\n.prism-jsdoc-panel__description pre code {\n display: block;\n padding: 8px 12px;\n font-family: var(--font-mono);\n font-size: var(--fs-sm);\n line-height: 1.5;\n color: var(--prism-text);\n background: none;\n}\n\n.prism-jsdoc-panel__description blockquote {\n padding: 4px 12px;\n margin: 0 0 8px;\n color: var(--prism-text-2);\n border-left: 3px solid var(--prism-border);\n}\n"] }]
|
|
692
487
|
}], null, { activeComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeComponent", required: false }] }] }); })();
|
|
693
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(JsDocPanelComponent, { className: "JsDocPanelComponent", filePath: "jsdoc-panel.component.ts", lineNumber:
|
|
488
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(JsDocPanelComponent, { className: "JsDocPanelComponent", filePath: "jsdoc-panel.component.ts", lineNumber: 16 }); })();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsdoc-plugin.browser.d.ts","sourceRoot":"","sources":["../src/jsdoc-plugin.browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,wBAAgB,WAAW,IAAI,aAAa,
|
|
1
|
+
{"version":3,"file":"jsdoc-plugin.browser.d.ts","sourceRoot":"","sources":["../src/jsdoc-plugin.browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,wBAAgB,WAAW,IAAI,aAAa,CAc3C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsdoc-plugin.d.ts","sourceRoot":"","sources":["../src/jsdoc-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D,wBAAgB,WAAW,IAAI,aAAa,
|
|
1
|
+
{"version":3,"file":"jsdoc-plugin.d.ts","sourceRoot":"","sources":["../src/jsdoc-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D,wBAAgB,WAAW,IAAI,aAAa,CAyB3C"}
|
package/dist/jsdoc-plugin.js
CHANGED
|
@@ -3,15 +3,15 @@ export function jsDocPlugin() {
|
|
|
3
3
|
return {
|
|
4
4
|
name: '@ng-prism/plugin-jsdoc',
|
|
5
5
|
async onComponentScanned(component) {
|
|
6
|
-
const jsdoc = extractJsDocData(component.filePath, component.className);
|
|
6
|
+
const jsdoc = extractJsDocData(component.filePath, component.className, component.baseClasses);
|
|
7
7
|
if (!jsdoc)
|
|
8
8
|
return;
|
|
9
9
|
return {
|
|
10
10
|
...component,
|
|
11
11
|
showcaseConfig: {
|
|
12
12
|
...component.showcaseConfig,
|
|
13
|
-
meta: { ...component.showcaseConfig.meta, jsdoc }
|
|
14
|
-
}
|
|
13
|
+
meta: { ...component.showcaseConfig.meta, jsdoc }
|
|
14
|
+
}
|
|
15
15
|
};
|
|
16
16
|
},
|
|
17
17
|
panels: [
|
|
@@ -20,8 +20,8 @@ export function jsDocPlugin() {
|
|
|
20
20
|
label: 'API',
|
|
21
21
|
icon: 'file-text',
|
|
22
22
|
loadComponent: () => import('./jsdoc-panel.component.js').then((m) => m.JsDocPanelComponent),
|
|
23
|
-
position: 'bottom'
|
|
24
|
-
}
|
|
25
|
-
]
|
|
23
|
+
position: 'bottom'
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
26
|
};
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsdoc.types.d.ts","sourceRoot":"","sources":["../src/jsdoc.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;
|
|
1
|
+
{"version":3,"file":"jsdoc.types.d.ts","sourceRoot":"","sources":["../src/jsdoc.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACzB"}
|
package/dist/markdown.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAUvD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAG3E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGrE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/schematics/ng-add/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/schematics/ng-add/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,IAAI,EAAoC,MAAM,4BAA4B,CAAC;AAEhG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAwBtD,wBAAgB,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAEvD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { chain
|
|
1
|
+
import { chain } from '@angular-devkit/schematics';
|
|
2
2
|
import { addPluginToConfig } from '@ng-prism/core/schematics/utils';
|
|
3
3
|
const PLUGIN_IMPORT_NAME = 'jsDocPlugin';
|
|
4
4
|
const PLUGIN_IMPORT_FROM = '@ng-prism/plugin-jsdoc';
|
|
@@ -9,13 +9,13 @@ function injectPlugin(options) {
|
|
|
9
9
|
const changed = addPluginToConfig(tree, configPath, {
|
|
10
10
|
importName: PLUGIN_IMPORT_NAME,
|
|
11
11
|
importFrom: PLUGIN_IMPORT_FROM,
|
|
12
|
-
call: PLUGIN_CALL
|
|
12
|
+
call: PLUGIN_CALL
|
|
13
13
|
});
|
|
14
14
|
if (changed) {
|
|
15
|
-
context.logger.info(` ${PLUGIN_IMPORT_FROM}
|
|
15
|
+
context.logger.info(` ${PLUGIN_IMPORT_FROM} added to ${configPath}`);
|
|
16
16
|
}
|
|
17
17
|
else {
|
|
18
|
-
context.logger.info(` ${PLUGIN_IMPORT_FROM} already configured
|
|
18
|
+
context.logger.info(` ${PLUGIN_IMPORT_FROM} already configured, skipped`);
|
|
19
19
|
}
|
|
20
20
|
return tree;
|
|
21
21
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/schematics/ng-add/schema.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/schematics/ng-add/schema.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ng-prism/plugin-jsdoc",
|
|
3
|
-
"version": "22.
|
|
3
|
+
"version": "22.4.0",
|
|
4
4
|
"description": "JSDoc API documentation panel for ng-prism.",
|
|
5
5
|
"ng-add": {
|
|
6
6
|
"save": "devDependencies"
|
|
@@ -36,10 +36,12 @@
|
|
|
36
36
|
],
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"@angular/core": ">=20.0.0",
|
|
39
|
-
"@ng-prism/core": "^22.
|
|
39
|
+
"@ng-prism/core": "^22.4.0-0",
|
|
40
40
|
"highlight.js": ">=11.0.0",
|
|
41
41
|
"ngx-highlightjs": ">=14.0.0",
|
|
42
|
-
"typescript": ">=5.5.0"
|
|
42
|
+
"typescript": ">=5.5.0",
|
|
43
|
+
"@angular-devkit/schematics": ">=20.0.0",
|
|
44
|
+
"@angular/platform-browser": ">=20.0.0"
|
|
43
45
|
},
|
|
44
46
|
"devDependencies": {
|
|
45
47
|
"@ng-prism/core": "*"
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
"$schema": "../node_modules/@angular-devkit/schematics/collection-schema.json",
|
|
3
|
+
"schematics": {
|
|
4
|
+
"ng-add": {
|
|
5
|
+
"description": "Adds @ng-prism/plugin-jsdoc to the ng-prism config",
|
|
6
|
+
"factory": "../dist/schematics/ng-add/index#ngAdd",
|
|
7
|
+
"schema": "./ng-add/schema.json"
|
|
8
|
+
}
|
|
8
9
|
}
|
|
9
|
-
}
|
|
10
10
|
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "NgPrismPluginJsDocNgAdd",
|
|
4
|
+
"title": "Add @ng-prism/plugin-jsdoc",
|
|
5
|
+
"description": "Registers @ng-prism/plugin-jsdoc in ng-prism.config.ts",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"configPath": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "Path to ng-prism.config.ts",
|
|
11
|
+
"default": "ng-prism.config.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"required": [],
|
|
15
|
+
"additionalProperties": false
|
|
16
16
|
}
|