@ng-prism/core 21.12.0-beta.0 → 21.12.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/app/header/prism-header-widget-host.component.d.ts +11 -0
  2. package/dist/app/header/prism-header-widget-host.component.d.ts.map +1 -0
  3. package/dist/app/header/prism-header-widget-host.component.js +57 -0
  4. package/dist/app/header/prism-header.component.d.ts +3 -0
  5. package/dist/app/header/prism-header.component.d.ts.map +1 -1
  6. package/dist/app/header/prism-header.component.js +76 -20
  7. package/dist/app/panels/a11y/a11y-header-badge.component.d.ts +16 -0
  8. package/dist/app/panels/a11y/a11y-header-badge.component.d.ts.map +1 -0
  9. package/dist/app/panels/a11y/a11y-header-badge.component.js +84 -0
  10. package/dist/app/panels/a11y/a11y-thresholds.d.ts +6 -0
  11. package/dist/app/panels/a11y/a11y-thresholds.d.ts.map +1 -0
  12. package/dist/app/panels/a11y/a11y-thresholds.js +13 -0
  13. package/dist/app/panels/a11y/a11y.types.d.ts +33 -0
  14. package/dist/app/panels/a11y/a11y.types.d.ts.map +1 -1
  15. package/dist/app/panels/builtin-header-widgets.d.ts +3 -0
  16. package/dist/app/panels/builtin-header-widgets.d.ts.map +1 -0
  17. package/dist/app/panels/builtin-header-widgets.js +9 -0
  18. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts +16 -5
  19. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts.map +1 -1
  20. package/dist/app/panels/panel-host/prism-panel-host.component.js +91 -44
  21. package/dist/app/provide-prism.d.ts.map +1 -1
  22. package/dist/app/provide-prism.js +11 -0
  23. package/dist/app/renderer/prism-renderer.component.d.ts +2 -0
  24. package/dist/app/renderer/prism-renderer.component.d.ts.map +1 -1
  25. package/dist/app/renderer/prism-renderer.component.js +18 -3
  26. package/dist/app/services/prism-panel.service.d.ts +5 -0
  27. package/dist/app/services/prism-panel.service.d.ts.map +1 -1
  28. package/dist/app/services/prism-panel.service.js +7 -3
  29. package/dist/app/services/prism-plugin.service.d.ts +4 -1
  30. package/dist/app/services/prism-plugin.service.d.ts.map +1 -1
  31. package/dist/app/services/prism-plugin.service.js +11 -0
  32. package/dist/builder/a11y/a11y-report-reader.d.ts +12 -0
  33. package/dist/builder/a11y/a11y-report-reader.d.ts.map +1 -0
  34. package/dist/builder/a11y/a11y-report-reader.js +49 -0
  35. package/dist/builder/manifest/runtime-manifest.generator.d.ts +1 -0
  36. package/dist/builder/manifest/runtime-manifest.generator.d.ts.map +1 -1
  37. package/dist/builder/manifest/runtime-manifest.generator.js +8 -1
  38. package/dist/builder/plugin-runner/plugin-runner.d.ts.map +1 -1
  39. package/dist/builder/plugin-runner/plugin-runner.js +3 -1
  40. package/dist/builder/shared/prism-pipeline.d.ts.map +1 -1
  41. package/dist/builder/shared/prism-pipeline.js +19 -1
  42. package/dist/cli/audit-a11y/aggregator.d.ts +10 -0
  43. package/dist/cli/audit-a11y/aggregator.d.ts.map +1 -0
  44. package/dist/cli/audit-a11y/aggregator.js +64 -0
  45. package/dist/cli/audit-a11y/auditor.d.ts +14 -0
  46. package/dist/cli/audit-a11y/auditor.d.ts.map +1 -0
  47. package/dist/cli/audit-a11y/auditor.js +104 -0
  48. package/dist/cli/audit-a11y/cli.d.ts +3 -0
  49. package/dist/cli/audit-a11y/cli.d.ts.map +1 -0
  50. package/dist/cli/audit-a11y/cli.js +143 -0
  51. package/dist/cli/audit-a11y/index.d.ts +4 -0
  52. package/dist/cli/audit-a11y/index.d.ts.map +1 -0
  53. package/dist/cli/audit-a11y/index.js +3 -0
  54. package/dist/cli/audit-a11y/static-server.d.ts +11 -0
  55. package/dist/cli/audit-a11y/static-server.d.ts.map +1 -0
  56. package/dist/cli/audit-a11y/static-server.js +61 -0
  57. package/dist/plugin/index.d.ts +2 -2
  58. package/dist/plugin/index.d.ts.map +1 -1
  59. package/dist/plugin/index.js +1 -1
  60. package/dist/plugin/plugin.types.d.ts +33 -0
  61. package/dist/plugin/plugin.types.d.ts.map +1 -1
  62. package/package.json +1 -1
@@ -0,0 +1,64 @@
1
+ export function aggregateAuditResults(results) {
2
+ if (results.length === 0) {
3
+ return {
4
+ total: {
5
+ score: 100,
6
+ violations: 0,
7
+ critical: 0,
8
+ serious: 0,
9
+ moderate: 0,
10
+ minor: 0,
11
+ passes: 0,
12
+ incomplete: 0,
13
+ auditedComponents: 0,
14
+ auditedVariants: 0,
15
+ },
16
+ components: {},
17
+ generatedAt: new Date().toISOString(),
18
+ };
19
+ }
20
+ const byComponent = new Map();
21
+ for (const r of results) {
22
+ const list = byComponent.get(r.className) ?? [];
23
+ list.push(r.score);
24
+ byComponent.set(r.className, list);
25
+ }
26
+ const componentBreakdown = {};
27
+ for (const [className, scores] of byComponent) {
28
+ componentBreakdown[className] = averageScore(scores);
29
+ }
30
+ const all = results.map((r) => r.score);
31
+ const total = averageScore(all);
32
+ return {
33
+ total: {
34
+ ...total,
35
+ // Sum (not average) of violation counts — they aggregate across the library.
36
+ violations: sum(all, (s) => s.violations),
37
+ critical: sum(all, (s) => s.critical),
38
+ serious: sum(all, (s) => s.serious),
39
+ moderate: sum(all, (s) => s.moderate),
40
+ minor: sum(all, (s) => s.minor),
41
+ auditedComponents: byComponent.size,
42
+ auditedVariants: results.length,
43
+ },
44
+ components: componentBreakdown,
45
+ generatedAt: new Date().toISOString(),
46
+ };
47
+ }
48
+ function averageScore(scores) {
49
+ const n = scores.length;
50
+ const sumF = (sel) => scores.reduce((acc, s) => acc + sel(s), 0);
51
+ return {
52
+ score: Math.round(sumF((s) => s.score) / n),
53
+ violations: Math.round(sumF((s) => s.violations) / n),
54
+ critical: Math.round(sumF((s) => s.critical) / n),
55
+ serious: Math.round(sumF((s) => s.serious) / n),
56
+ moderate: Math.round(sumF((s) => s.moderate) / n),
57
+ minor: Math.round(sumF((s) => s.minor) / n),
58
+ passes: Math.round(sumF((s) => s.passes) / n),
59
+ incomplete: Math.round(sumF((s) => s.incomplete) / n),
60
+ };
61
+ }
62
+ function sum(scores, sel) {
63
+ return scores.reduce((acc, s) => acc + sel(s), 0);
64
+ }
@@ -0,0 +1,14 @@
1
+ import type { RawAuditResult } from './aggregator.js';
2
+ export interface AuditOptions {
3
+ baseUrl: string;
4
+ /** Component class names to limit the audit to. Empty = all. */
5
+ include?: string[];
6
+ /** Component class names to skip. */
7
+ exclude?: string[];
8
+ /** Per-page navigation/render timeout in ms. Default 10_000. */
9
+ timeoutMs?: number;
10
+ /** Logger for progress output. */
11
+ log?: (msg: string) => void;
12
+ }
13
+ export declare function auditPrismApp(opts: AuditOptions): Promise<RawAuditResult[]>;
14
+ //# sourceMappingURL=auditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auditor.d.ts","sourceRoot":"","sources":["../../../src/cli/audit-a11y/auditor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAWtD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAyGjF"}
@@ -0,0 +1,104 @@
1
+ import { createRequire } from 'node:module';
2
+ const require = createRequire(import.meta.url);
3
+ export async function auditPrismApp(opts) {
4
+ const log = opts.log ?? (() => undefined);
5
+ const timeoutMs = opts.timeoutMs ?? 10_000;
6
+ const playwright = await loadPlaywright();
7
+ const axeSource = loadAxeSource();
8
+ const browser = await playwright.chromium.launch({ headless: true });
9
+ try {
10
+ const context = await browser.newContext();
11
+ const page = await context.newPage();
12
+ await page.goto(opts.baseUrl, { waitUntil: 'networkidle', timeout: timeoutMs });
13
+ await page.waitForFunction(() => globalThis['__PRISM_MANIFEST__'] !== undefined, undefined, { timeout: timeoutMs });
14
+ const manifest = (await page.evaluate(() => globalThis['__PRISM_MANIFEST__']));
15
+ const targets = manifest.components.filter((c) => {
16
+ if (opts.include?.length && !opts.include.includes(c.className))
17
+ return false;
18
+ if (opts.exclude?.length && opts.exclude.includes(c.className))
19
+ return false;
20
+ return true;
21
+ });
22
+ const results = [];
23
+ for (const comp of targets) {
24
+ for (const variant of comp.variants) {
25
+ const url = new URL(opts.baseUrl);
26
+ url.searchParams.set('component', comp.className);
27
+ if (variant.index > 0) {
28
+ url.searchParams.set('variant', String(variant.index));
29
+ }
30
+ log(`Auditing ${comp.className} :: ${variant.name} (#${variant.index})`);
31
+ await page.goto(url.toString(), { waitUntil: 'load', timeout: timeoutMs });
32
+ await page.waitForFunction(([expected]) => {
33
+ const el = document.querySelector('.demo-wrap');
34
+ const key = el?.getAttribute('data-prism-rendered');
35
+ return typeof key === 'string' && key.startsWith(expected);
36
+ }, [`${comp.className}:`], { timeout: timeoutMs });
37
+ await page.addScriptTag({ content: axeSource });
38
+ const score = (await page.evaluate(async () => {
39
+ const target = document.querySelector('.demo-wrap');
40
+ const axe = globalThis['axe'];
41
+ if (!target) {
42
+ return {
43
+ score: 0,
44
+ violations: 0,
45
+ critical: 0,
46
+ serious: 0,
47
+ moderate: 0,
48
+ minor: 0,
49
+ passes: 0,
50
+ incomplete: 0,
51
+ };
52
+ }
53
+ const r = await axe.run(target);
54
+ const critical = r.violations.filter((v) => v.impact === 'critical').length;
55
+ const serious = r.violations.filter((v) => v.impact === 'serious').length;
56
+ const moderate = r.violations.filter((v) => v.impact === 'moderate').length;
57
+ const minor = r.violations.filter((v) => v.impact === 'minor').length;
58
+ const deductions = critical * 25 + serious * 10 + moderate * 5 + minor * 1;
59
+ return {
60
+ score: Math.max(0, 100 - deductions),
61
+ violations: r.violations.length,
62
+ critical,
63
+ serious,
64
+ moderate,
65
+ minor,
66
+ passes: r.passes.length,
67
+ incomplete: r.incomplete.length,
68
+ };
69
+ }));
70
+ results.push({
71
+ className: comp.className,
72
+ variantName: variant.name,
73
+ variantIndex: variant.index,
74
+ score,
75
+ });
76
+ }
77
+ }
78
+ return results;
79
+ }
80
+ finally {
81
+ await browser.close();
82
+ }
83
+ }
84
+ async function loadPlaywright() {
85
+ try {
86
+ return (await import('playwright'));
87
+ }
88
+ catch (err) {
89
+ throw new Error('ng-prism-audit-a11y: `playwright` is not installed. Run `npm install --save-dev playwright` ' +
90
+ 'and `npx playwright install chromium`. Original error: ' +
91
+ (err instanceof Error ? err.message : String(err)));
92
+ }
93
+ }
94
+ function loadAxeSource() {
95
+ try {
96
+ const path = require.resolve('axe-core/axe.min.js');
97
+ return require('node:fs').readFileSync(path, 'utf-8');
98
+ }
99
+ catch (err) {
100
+ throw new Error('ng-prism-audit-a11y: `axe-core` is not installed. Run `npm install --save-dev axe-core`. ' +
101
+ 'Original error: ' +
102
+ (err instanceof Error ? err.message : String(err)));
103
+ }
104
+ }
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/cli/audit-a11y/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,143 @@
1
+ #!/usr/bin/env node
2
+ import { writeFileSync } from 'node:fs';
3
+ import { resolve } from 'node:path';
4
+ import { aggregateAuditResults } from './aggregator.js';
5
+ import { auditPrismApp } from './auditor.js';
6
+ import { startStaticServer } from './static-server.js';
7
+ import { checkA11yThresholds, } from '../../builder/a11y/a11y-report-reader.js';
8
+ import { resolveA11yThresholds } from '../../app/panels/a11y/a11y-thresholds.js';
9
+ function parseArgs(argv) {
10
+ const args = {
11
+ dist: '',
12
+ output: 'a11y-report.json',
13
+ port: 4317,
14
+ thresholds: {},
15
+ include: [],
16
+ exclude: [],
17
+ failOnViolation: true,
18
+ };
19
+ for (let i = 2; i < argv.length; i++) {
20
+ const a = argv[i];
21
+ const next = () => {
22
+ const v = argv[++i];
23
+ if (v === undefined) {
24
+ throw new Error(`Missing value for ${a}`);
25
+ }
26
+ return v;
27
+ };
28
+ switch (a) {
29
+ case '--dist':
30
+ args.dist = next();
31
+ break;
32
+ case '--output':
33
+ case '-o':
34
+ args.output = next();
35
+ break;
36
+ case '--port':
37
+ args.port = parseInt(next(), 10);
38
+ break;
39
+ case '--include':
40
+ args.include = next().split(',').map((s) => s.trim()).filter(Boolean);
41
+ break;
42
+ case '--exclude':
43
+ args.exclude = next().split(',').map((s) => s.trim()).filter(Boolean);
44
+ break;
45
+ case '--score':
46
+ args.thresholds.score = parseInt(next(), 10);
47
+ break;
48
+ case '--max-critical':
49
+ args.thresholds.critical = parseInt(next(), 10);
50
+ break;
51
+ case '--max-serious':
52
+ args.thresholds.serious = parseInt(next(), 10);
53
+ break;
54
+ case '--max-moderate':
55
+ args.thresholds.moderate = parseInt(next(), 10);
56
+ break;
57
+ case '--no-fail':
58
+ args.failOnViolation = false;
59
+ break;
60
+ case '-h':
61
+ case '--help':
62
+ printHelp();
63
+ process.exit(0);
64
+ default:
65
+ throw new Error(`Unknown argument: ${a}`);
66
+ }
67
+ }
68
+ if (!args.dist) {
69
+ throw new Error('Missing required --dist <path-to-built-prism-app>');
70
+ }
71
+ return args;
72
+ }
73
+ function printHelp() {
74
+ process.stdout.write(`ng-prism-audit-a11y — accessibility audit for a built Prism app.\n\n` +
75
+ `Usage:\n` +
76
+ ` ng-prism-audit-a11y --dist <path> [options]\n\n` +
77
+ `Required:\n` +
78
+ ` --dist <path> Path to the built Prism app (contains index.html)\n\n` +
79
+ `Output:\n` +
80
+ ` --output <file> Report output path (default: a11y-report.json)\n\n` +
81
+ `Server:\n` +
82
+ ` --port <n> Static server port (default: 4317)\n\n` +
83
+ `Filtering:\n` +
84
+ ` --include A,B Only audit these component class names\n` +
85
+ ` --exclude A,B Skip these component class names\n\n` +
86
+ `Thresholds (CI failure):\n` +
87
+ ` --score <n> Minimum avg score (default 80)\n` +
88
+ ` --max-critical <n> Allowed critical violations (default 0)\n` +
89
+ ` --max-serious <n> Allowed serious violations (default 0)\n` +
90
+ ` --max-moderate <n> Allowed moderate violations (default unlimited)\n` +
91
+ ` --no-fail Write report but never exit non-zero\n\n`);
92
+ }
93
+ async function main() {
94
+ const args = parseArgs(process.argv);
95
+ const server = await startStaticServer(args.dist, args.port);
96
+ process.stdout.write(`Serving ${args.dist} at ${server.url}\n`);
97
+ try {
98
+ const rawResults = await auditPrismApp({
99
+ baseUrl: server.url,
100
+ include: args.include,
101
+ exclude: args.exclude,
102
+ log: (msg) => process.stdout.write(` ${msg}\n`),
103
+ });
104
+ const report = aggregateAuditResults(rawResults);
105
+ const resolvedThresholds = resolveA11yThresholds(args.thresholds);
106
+ const outputPath = resolve(args.output);
107
+ writeFileSync(outputPath, JSON.stringify(report, null, 2), 'utf-8');
108
+ process.stdout.write(`\nReport written: ${outputPath}\n`);
109
+ process.stdout.write(`Library score: ${report.total.score}% ` +
110
+ `(${report.total.auditedVariants} variants across ${report.total.auditedComponents} components)\n` +
111
+ `Violations: ${report.total.critical} critical · ${report.total.serious} serious · ` +
112
+ `${report.total.moderate} moderate · ${report.total.minor} minor\n`);
113
+ const violations = checkA11yThresholds({
114
+ total: report.total,
115
+ thresholds: resolvedThresholds,
116
+ });
117
+ if (violations.length > 0) {
118
+ process.stderr.write('\nThreshold violations:\n');
119
+ for (const v of violations) {
120
+ process.stderr.write(` - ${formatViolation(v)}\n`);
121
+ }
122
+ if (args.failOnViolation) {
123
+ process.exitCode = 1;
124
+ }
125
+ }
126
+ else {
127
+ process.stdout.write('\nAll thresholds met.\n');
128
+ }
129
+ }
130
+ finally {
131
+ await server.close();
132
+ }
133
+ }
134
+ function formatViolation(v) {
135
+ if (v.metric === 'score') {
136
+ return `score ${v.actual}% < ${v.threshold}%`;
137
+ }
138
+ return `${v.metric}: ${v.actual} > ${v.threshold} allowed`;
139
+ }
140
+ main().catch((err) => {
141
+ process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\n`);
142
+ process.exit(1);
143
+ });
@@ -0,0 +1,4 @@
1
+ export { auditPrismApp, type AuditOptions } from './auditor.js';
2
+ export { aggregateAuditResults, type RawAuditResult } from './aggregator.js';
3
+ export { startStaticServer, type StaticServerHandle } from './static-server.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/audit-a11y/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { auditPrismApp } from './auditor.js';
2
+ export { aggregateAuditResults } from './aggregator.js';
3
+ export { startStaticServer } from './static-server.js';
@@ -0,0 +1,11 @@
1
+ export interface StaticServerHandle {
2
+ url: string;
3
+ port: number;
4
+ close(): Promise<void>;
5
+ }
6
+ /**
7
+ * Minimal static file server for Angular SPA output.
8
+ * Serves files relative to `root`; for unknown routes returns index.html (SPA fallback).
9
+ */
10
+ export declare function startStaticServer(root: string, port: number): Promise<StaticServerHandle>;
11
+ //# sourceMappingURL=static-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-server.d.ts","sourceRoot":"","sources":["../../../src/cli/audit-a11y/static-server.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA8CzF"}
@@ -0,0 +1,61 @@
1
+ import { createServer } from 'node:http';
2
+ import { createReadStream, existsSync, statSync } from 'node:fs';
3
+ import { extname, join, normalize, resolve } from 'node:path';
4
+ const MIME = {
5
+ '.html': 'text/html; charset=utf-8',
6
+ '.js': 'application/javascript; charset=utf-8',
7
+ '.mjs': 'application/javascript; charset=utf-8',
8
+ '.css': 'text/css; charset=utf-8',
9
+ '.json': 'application/json; charset=utf-8',
10
+ '.svg': 'image/svg+xml',
11
+ '.png': 'image/png',
12
+ '.jpg': 'image/jpeg',
13
+ '.jpeg': 'image/jpeg',
14
+ '.woff': 'font/woff',
15
+ '.woff2': 'font/woff2',
16
+ '.ico': 'image/x-icon',
17
+ };
18
+ /**
19
+ * Minimal static file server for Angular SPA output.
20
+ * Serves files relative to `root`; for unknown routes returns index.html (SPA fallback).
21
+ */
22
+ export function startStaticServer(root, port) {
23
+ const absRoot = resolve(root);
24
+ if (!existsSync(absRoot)) {
25
+ return Promise.reject(new Error(`Static root does not exist: ${absRoot}`));
26
+ }
27
+ const indexPath = join(absRoot, 'index.html');
28
+ if (!existsSync(indexPath)) {
29
+ return Promise.reject(new Error(`No index.html found in ${absRoot}`));
30
+ }
31
+ const server = createServer((req, res) => {
32
+ const url = new URL(req.url ?? '/', 'http://localhost');
33
+ let relPath = decodeURIComponent(url.pathname);
34
+ if (relPath === '/' || relPath === '')
35
+ relPath = '/index.html';
36
+ const normalized = normalize(relPath).replace(/^[/\\]+/, '');
37
+ const filePath = join(absRoot, normalized);
38
+ // Path traversal guard.
39
+ if (!filePath.startsWith(absRoot)) {
40
+ res.writeHead(403).end();
41
+ return;
42
+ }
43
+ const target = existsSync(filePath) && statSync(filePath).isFile()
44
+ ? filePath
45
+ : indexPath;
46
+ const ext = extname(target).toLowerCase();
47
+ const mime = MIME[ext] ?? 'application/octet-stream';
48
+ res.writeHead(200, { 'Content-Type': mime });
49
+ createReadStream(target).pipe(res);
50
+ });
51
+ return new Promise((resolveFn, reject) => {
52
+ server.once('error', reject);
53
+ server.listen(port, '127.0.0.1', () => {
54
+ resolveFn({
55
+ url: `http://127.0.0.1:${port}`,
56
+ port,
57
+ close: () => new Promise((r) => server.close(() => r())),
58
+ });
59
+ });
60
+ });
61
+ }
@@ -1,8 +1,8 @@
1
- export type { NgPrismPlugin, PanelDefinition, ControlDefinition, NgPrismConfig, PrismManifest, ScannedComponent, InputMeta, OutputMeta, RuntimeManifest, RuntimeComponent, } from './plugin.types.js';
1
+ export type { NgPrismPlugin, PanelDefinition, ControlDefinition, HeaderWidgetDefinition, NgPrismConfig, PrismManifest, ScannedComponent, InputMeta, OutputMeta, RuntimeManifest, RuntimeComponent, } from './plugin.types.js';
2
2
  export type { StyleguidePage, CustomPage, ComponentPage, } from './page.types.js';
3
3
  export { customPage, componentPage } from './page-helpers.js';
4
4
  export type { ComponentPageOptions } from './page-helpers.js';
5
5
  export { defineConfig } from './define-config.js';
6
- export { PRISM_RENDERER_HOOKS } from '../app/tokens/prism-tokens.js';
6
+ export { PRISM_RENDERER_HOOKS, PRISM_MANIFEST, PRISM_CONFIG, } from '../app/tokens/prism-tokens.js';
7
7
  export type { PrismRendererHooks } from '../app/tokens/prism-tokens.js';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,eAAe,EACf,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,cAAc,EACd,UAAU,EACV,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC9D,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,eAAe,EACf,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,cAAc,EACd,UAAU,EACV,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC9D,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,YAAY,GACb,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -1,3 +1,3 @@
1
1
  export { customPage, componentPage } from './page-helpers.js';
2
2
  export { defineConfig } from './define-config.js';
3
- export { PRISM_RENDERER_HOOKS } from '../app/tokens/prism-tokens.js';
3
+ export { PRISM_RENDERER_HOOKS, PRISM_MANIFEST, PRISM_CONFIG, } from '../app/tokens/prism-tokens.js';
@@ -8,9 +8,26 @@ export interface NgPrismPlugin {
8
8
  onManifestReady?: (manifest: PrismManifest) => PrismManifest | void | Promise<PrismManifest | void>;
9
9
  panels?: PanelDefinition[];
10
10
  controls?: ControlDefinition[];
11
+ /** Header widgets rendered in the Prism shell header bar */
12
+ headerWidgets?: HeaderWidgetDefinition[];
11
13
  /** Angular standalone component that wraps each rendered component */
12
14
  wrapComponent?: Type<unknown>;
13
15
  }
16
+ export interface HeaderWidgetDefinition {
17
+ /** Unique widget id — used for de-duplication and tracking. */
18
+ id: string;
19
+ /** Eager component reference. */
20
+ component?: Type<unknown>;
21
+ /**
22
+ * Lazy-loaded component — use when the widget pulls in browser-only or
23
+ * heavy dependencies that should not run at config-load time.
24
+ */
25
+ loadComponent?: () => Promise<Type<unknown>>;
26
+ /** Slot in the header: 'start' renders next to the brand, 'end' next to the existing actions. Default: 'end'. */
27
+ placement?: 'start' | 'end';
28
+ /** Sort order within the same placement (lower = earlier). Default: 0. */
29
+ order?: number;
30
+ }
14
31
  export interface PanelDefinition {
15
32
  id: string;
16
33
  label: string;
@@ -28,6 +45,16 @@ export interface PanelDefinition {
28
45
  providers?: Provider[];
29
46
  /** When provided, the panel tab is only shown if this returns true for the active component */
30
47
  isVisible?: (component: RuntimeComponent) => boolean;
48
+ /**
49
+ * Keep the panel's component instance alive across tab switches.
50
+ * When `true`, the panel is rendered once on first activation and merely hidden
51
+ * (instead of destroyed) when the user switches tabs. Use for panels with
52
+ * expensive setup (iframes, network calls, heavy DOM) — e.g. embedded designs,
53
+ * remote previews.
54
+ *
55
+ * Default: `false`.
56
+ */
57
+ keepAlive?: boolean;
31
58
  }
32
59
  export interface ControlDefinition {
33
60
  /** Returns true if this control should handle the given input */
@@ -38,6 +65,8 @@ export interface ControlDefinition {
38
65
  export interface PrismManifest {
39
66
  components: ScannedComponent[];
40
67
  pages?: StyleguidePage[];
68
+ /** Library-wide plugin metadata (e.g. aggregate coverage totals). */
69
+ meta?: Record<string, unknown>;
41
70
  }
42
71
  export interface ScannedComponent {
43
72
  className: string;
@@ -71,6 +100,8 @@ export interface OutputMeta {
71
100
  export interface RuntimeManifest {
72
101
  components: RuntimeComponent[];
73
102
  pages?: StyleguidePage[];
103
+ /** Library-wide plugin metadata, mirrored from the build-time PrismManifest. */
104
+ meta?: Record<string, unknown>;
74
105
  }
75
106
  export interface RuntimeComponent {
76
107
  meta: ScannedComponent;
@@ -110,5 +141,7 @@ export interface NgPrismConfig {
110
141
  version?: string;
111
142
  gitHash?: string;
112
143
  };
144
+ /** Accessibility (build-time audit + runtime live audit) configuration. */
145
+ a11y?: import('../app/panels/a11y/a11y.types.js').NgPrismA11yConfig;
113
146
  }
114
147
  //# sourceMappingURL=plugin.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.types.d.ts","sourceRoot":"","sources":["../../src/plugin/plugin.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.types.d.ts","sourceRoot":"","sources":["../../src/plugin/plugin.types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ng-prism/core",
3
- "version": "21.12.0-beta.0",
3
+ "version": "21.12.0-beta.2",
4
4
  "description": "ng-prism — the Angular-native Storybook alternative. Lightweight component showcase with @Showcase decorator, no story files needed.",
5
5
  "keywords": [
6
6
  "ng-prism",