@ng-prism/core 22.2.0-beta.3 → 22.2.0-beta.5

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 (125) hide show
  1. package/dist/app/canvas/prism-canvas-bg-pill.component.js +1 -1
  2. package/dist/app/canvas/prism-canvas-rulers.component.js +1 -1
  3. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts +24 -8
  4. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts.map +1 -1
  5. package/dist/app/canvas/prism-canvas-toolbar.component.js +41 -24
  6. package/dist/app/canvas/prism-template-popover.component.js +1 -1
  7. package/dist/app/component-head/prism-component-head.component.d.ts +12 -0
  8. package/dist/app/component-head/prism-component-head.component.d.ts.map +1 -1
  9. package/dist/app/component-head/prism-component-head.component.js +46 -11
  10. package/dist/app/component-head/prism-stat.component.d.ts +1 -1
  11. package/dist/app/component-head/prism-stat.component.d.ts.map +1 -1
  12. package/dist/app/component-head/prism-stat.component.js +12 -9
  13. package/dist/app/component-header/prism-component-header.component.js +1 -1
  14. package/dist/app/controls/boolean-control.component.js +1 -1
  15. package/dist/app/controls/json-control.component.js +1 -1
  16. package/dist/app/controls/number-control.component.js +1 -1
  17. package/dist/app/controls/string-control.component.js +1 -1
  18. package/dist/app/controls/union-control.component.js +1 -1
  19. package/dist/app/header/prism-header.component.js +1 -1
  20. package/dist/app/icons/icon-registry.d.ts +15 -0
  21. package/dist/app/icons/icon-registry.d.ts.map +1 -0
  22. package/dist/app/icons/icon-registry.js +42 -0
  23. package/dist/app/icons/prism-icon.component.d.ts +2 -2
  24. package/dist/app/icons/prism-icon.component.d.ts.map +1 -1
  25. package/dist/app/icons/prism-icon.component.js +7 -32
  26. package/dist/app/layout-menu/prism-layout-menu.component.js +1 -1
  27. package/dist/app/page-renderer/prism-page-renderer.component.js +1 -1
  28. package/dist/app/panels/a11y/a11y-audit.service.d.ts +1 -1
  29. package/dist/app/panels/a11y/a11y-audit.service.d.ts.map +1 -1
  30. package/dist/app/panels/a11y/a11y-header-badge.component.js +1 -1
  31. package/dist/app/panels/a11y/a11y-keyboard-overlay.component.js +1 -1
  32. package/dist/app/panels/a11y/a11y-keyboard.component.js +1 -1
  33. package/dist/app/panels/a11y/a11y-keyboard.service.d.ts +1 -1
  34. package/dist/app/panels/a11y/a11y-keyboard.service.d.ts.map +1 -1
  35. package/dist/app/panels/a11y/a11y-overlay-host.component.js +1 -1
  36. package/dist/app/panels/a11y/a11y-panel-state.service.d.ts +1 -1
  37. package/dist/app/panels/a11y/a11y-panel-state.service.d.ts.map +1 -1
  38. package/dist/app/panels/a11y/a11y-panel.component.js +1 -1
  39. package/dist/app/panels/a11y/a11y-perspective.service.d.ts +1 -1
  40. package/dist/app/panels/a11y/a11y-perspective.service.d.ts.map +1 -1
  41. package/dist/app/panels/a11y/a11y-score.component.js +1 -1
  42. package/dist/app/panels/a11y/a11y-sr-overlay.component.js +1 -1
  43. package/dist/app/panels/a11y/a11y-sr.component.js +1 -1
  44. package/dist/app/panels/a11y/a11y-sr.service.d.ts +1 -1
  45. package/dist/app/panels/a11y/a11y-sr.service.d.ts.map +1 -1
  46. package/dist/app/panels/a11y/a11y-summary.d.ts +15 -0
  47. package/dist/app/panels/a11y/a11y-summary.d.ts.map +1 -0
  48. package/dist/app/panels/a11y/a11y-summary.js +33 -0
  49. package/dist/app/panels/a11y/a11y-tree.component.js +2 -2
  50. package/dist/app/panels/a11y/a11y-tree.service.d.ts +1 -1
  51. package/dist/app/panels/a11y/a11y-tree.service.d.ts.map +1 -1
  52. package/dist/app/panels/a11y/a11y-violations.component.js +3 -3
  53. package/dist/app/panels/a11y/a11y.types.d.ts +14 -0
  54. package/dist/app/panels/a11y/a11y.types.d.ts.map +1 -1
  55. package/dist/app/panels/builtin-navigation-decorations.d.ts +8 -0
  56. package/dist/app/panels/builtin-navigation-decorations.d.ts.map +1 -0
  57. package/dist/app/panels/builtin-navigation-decorations.js +20 -0
  58. package/dist/app/panels/controls/prism-controls-panel.component.js +1 -1
  59. package/dist/app/panels/events/prism-events-panel.component.js +1 -1
  60. package/dist/app/panels/events/prism-json-node.component.js +1 -1
  61. package/dist/app/panels/panel-host/panel-badge.d.ts +35 -0
  62. package/dist/app/panels/panel-host/panel-badge.d.ts.map +1 -0
  63. package/dist/app/panels/panel-host/panel-badge.js +37 -0
  64. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts +9 -6
  65. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts.map +1 -1
  66. package/dist/app/panels/panel-host/prism-panel-host.component.js +27 -37
  67. package/dist/app/renderer/overlay-resolver.d.ts.map +1 -1
  68. package/dist/app/renderer/overlay-resolver.js +12 -1
  69. package/dist/app/renderer/prism-renderer.component.js +3 -5
  70. package/dist/app/services/prism-canvas.service.d.ts +1 -1
  71. package/dist/app/services/prism-canvas.service.d.ts.map +1 -1
  72. package/dist/app/services/prism-capture.service.d.ts +17 -3
  73. package/dist/app/services/prism-capture.service.d.ts.map +1 -1
  74. package/dist/app/services/prism-capture.service.js +96 -3
  75. package/dist/app/services/prism-event-log.service.d.ts +1 -1
  76. package/dist/app/services/prism-event-log.service.d.ts.map +1 -1
  77. package/dist/app/services/prism-layout.service.d.ts +1 -1
  78. package/dist/app/services/prism-layout.service.d.ts.map +1 -1
  79. package/dist/app/services/prism-manifest.service.d.ts +1 -1
  80. package/dist/app/services/prism-manifest.service.d.ts.map +1 -1
  81. package/dist/app/services/prism-navigation.service.d.ts +1 -1
  82. package/dist/app/services/prism-navigation.service.d.ts.map +1 -1
  83. package/dist/app/services/prism-panel.service.d.ts +1 -1
  84. package/dist/app/services/prism-panel.service.d.ts.map +1 -1
  85. package/dist/app/services/prism-persistence.service.d.ts +1 -1
  86. package/dist/app/services/prism-persistence.service.d.ts.map +1 -1
  87. package/dist/app/services/prism-plugin.service.d.ts +8 -2
  88. package/dist/app/services/prism-plugin.service.d.ts.map +1 -1
  89. package/dist/app/services/prism-plugin.service.js +15 -0
  90. package/dist/app/services/prism-renderer.service.d.ts +1 -1
  91. package/dist/app/services/prism-renderer.service.d.ts.map +1 -1
  92. package/dist/app/services/prism-search.service.d.ts +1 -1
  93. package/dist/app/services/prism-search.service.d.ts.map +1 -1
  94. package/dist/app/services/prism-theme.service.d.ts +1 -1
  95. package/dist/app/services/prism-theme.service.d.ts.map +1 -1
  96. package/dist/app/services/prism-url-state.service.d.ts +1 -1
  97. package/dist/app/services/prism-url-state.service.d.ts.map +1 -1
  98. package/dist/app/services/prism-variant-bg.service.d.ts +1 -1
  99. package/dist/app/services/prism-variant-bg.service.d.ts.map +1 -1
  100. package/dist/app/shell/prism-shell.component.js +2 -2
  101. package/dist/app/sidebar/navigation-decorations.d.ts +67 -0
  102. package/dist/app/sidebar/navigation-decorations.d.ts.map +1 -0
  103. package/dist/app/sidebar/navigation-decorations.js +84 -0
  104. package/dist/app/sidebar/prism-sidebar.component.d.ts +23 -6
  105. package/dist/app/sidebar/prism-sidebar.component.d.ts.map +1 -1
  106. package/dist/app/sidebar/prism-sidebar.component.js +120 -45
  107. package/dist/app/variant-ribbon/prism-variant-ribbon.component.js +3 -3
  108. package/dist/app/view-tab-bar/prism-view-panel-host.component.js +1 -1
  109. package/dist/app/view-tab-bar/prism-view-tab-bar.component.js +1 -1
  110. package/dist/builder/a11y/a11y-report-reader.d.ts +15 -1
  111. package/dist/builder/a11y/a11y-report-reader.d.ts.map +1 -1
  112. package/dist/builder/a11y/a11y-report-reader.js +37 -0
  113. package/dist/builder/scanner/component.scanner.d.ts.map +1 -1
  114. package/dist/builder/scanner/component.scanner.js +30 -3
  115. package/dist/builder/shared/prism-pipeline.d.ts.map +1 -1
  116. package/dist/builder/shared/prism-pipeline.js +19 -2
  117. package/dist/plugin/index.d.ts +2 -1
  118. package/dist/plugin/index.d.ts.map +1 -1
  119. package/dist/plugin/index.js +10 -0
  120. package/dist/plugin/plugin.types.d.ts +52 -0
  121. package/dist/plugin/plugin.types.d.ts.map +1 -1
  122. package/dist/shared/canvas-bg.type.d.ts +24 -6
  123. package/dist/shared/canvas-bg.type.d.ts.map +1 -1
  124. package/dist/shared/canvas-bg.type.js +6 -5
  125. package/package.json +1 -1
@@ -56,7 +56,7 @@ function A11yViolationsComponent_Conditional_1_For_13_Template(rf, ctx) { if (rf
56
56
  } if (rf & 2) {
57
57
  const item_r2 = ctx.$implicit;
58
58
  const ctx_r0 = i0.ɵɵnextContext(2);
59
- i0.ɵɵstyleProp("--sev-color", ctx_r0.sevColor(item_r2.impact));
59
+ i0.ɵɵstyleProp("--%NS%sev-color", ctx_r0.sevColor(item_r2.impact));
60
60
  i0.ɵɵadvance(2);
61
61
  i0.ɵɵtextInterpolate(item_r2.impact ?? "pass");
62
62
  i0.ɵɵadvance(3);
@@ -145,11 +145,11 @@ export class A11yViolationsComponent {
145
145
  return sevColor(impact);
146
146
  }
147
147
  static ɵfac = function A11yViolationsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || A11yViolationsComponent)(); };
148
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: A11yViolationsComponent, selectors: [["prism-a11y-violations"]], decls: 3, vars: 1, consts: [[1, "a11y-status", "a11y-status--error"], [1, "a11y-body", 3, "a11y-body--loading"], [1, "a11y-status"], [1, "a11y-body"], [1, "score-wrap"], [3, "score"], [1, "score-label"], [1, "score-meta"], [2, "background", "var(--prism-success)"], [1, "viol-list"], [1, "viol", 3, "--sev-color"], [2, "background", "var(--prism-danger)"], [2, "background", "var(--prism-warn)"], [1, "viol"], [1, "viol-sev"], [1, "viol-text"], [1, "viol-rule"]], template: function A11yViolationsComponent_Template(rf, ctx) { if (rf & 1) {
148
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: A11yViolationsComponent, selectors: [["prism-a11y-violations"]], decls: 3, vars: 1, consts: [[1, "a11y-status", "a11y-status--error"], [1, "a11y-body", 3, "a11y-body--loading"], [1, "a11y-status"], [1, "a11y-body"], [1, "score-wrap"], [3, "score"], [1, "score-label"], [1, "score-meta"], [2, "background", "var(--prism-success)"], [1, "viol-list"], [1, "viol", 3, "--%NS%sev-color"], [2, "background", "var(--prism-danger)"], [2, "background", "var(--prism-warn)"], [1, "viol"], [1, "viol-sev"], [1, "viol-text"], [1, "viol-rule"]], template: function A11yViolationsComponent_Template(rf, ctx) { if (rf & 1) {
149
149
  i0.ɵɵconditionalCreate(0, A11yViolationsComponent_Conditional_0_Template, 2, 1, "div", 0)(1, A11yViolationsComponent_Conditional_1_Template, 15, 7, "div", 1)(2, A11yViolationsComponent_Conditional_2_Template, 2, 0, "div", 2);
150
150
  } if (rf & 2) {
151
151
  i0.ɵɵconditional(ctx.auditService.error() ? 0 : ctx.auditService.results() || ctx.auditService.running() ? 1 : 2);
152
- } }, dependencies: [A11yScoreComponent], styles: ["[_nghost-%COMP%] { display: flex; flex-direction: column; height: 100%; overflow: auto; }\n\n .a11y-body[_ngcontent-%COMP%] {\n padding: 18px 20px;\n display: grid;\n grid-template-columns: 220px 1fr;\n gap: 20px;\n min-height: 0;\n }\n .a11y-body--loading[_ngcontent-%COMP%] { opacity: 0.55; transition: opacity var(--dur-base); }\n\n .score-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n padding: 14px;\n background: var(--prism-bg-surface);\n border: 1px solid var(--prism-border);\n border-radius: 10px;\n align-self: start;\n }\n\n .score-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--prism-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n font-weight: 600;\n }\n .score-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 2px;\n font-size: 11px;\n color: var(--prism-text-muted);\n }\n .score-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 4px; }\n .score-meta[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { width: 6px; height: 6px; border-radius: 50%; display: block; }\n\n .viol-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 0;\n }\n\n .viol[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr auto;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n background: var(--prism-bg-surface);\n border: 1px solid var(--prism-border);\n border-radius: 8px;\n border-left: 3px solid var(--sev-color, var(--prism-primary));\n transition: border-color var(--dur-fast);\n }\n .viol[_ngcontent-%COMP%]:hover { border-color: var(--prism-border-strong); }\n\n .viol-sev[_ngcontent-%COMP%] {\n font-family: var(--font-mono);\n font-size: 9.5px;\n font-weight: 700;\n padding: 2px 6px;\n border-radius: var(--radius-xs);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n background: color-mix(in srgb, var(--sev-color) 15%, transparent);\n color: var(--sev-color);\n }\n\n .viol-text[_ngcontent-%COMP%] {\n font-size: 12.5px;\n color: var(--prism-text);\n min-width: 0;\n }\n .viol-text[_ngcontent-%COMP%] b[_ngcontent-%COMP%] {\n display: block;\n font-weight: 600;\n margin-bottom: 1px;\n }\n .viol-text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n font-size: 11.5px;\n }\n\n .viol-rule[_ngcontent-%COMP%] {\n font-family: var(--font-mono);\n font-size: 11px;\n color: var(--prism-text-ghost);\n padding: 2px 7px;\n background: var(--prism-input-bg);\n border-radius: var(--radius-xs);\n white-space: nowrap;\n }\n\n .a11y-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100px;\n color: var(--prism-text-muted);\n font-size: 13px;\n }\n .a11y-status--error[_ngcontent-%COMP%] { color: var(--prism-danger); }\n\n @media (max-width: 1100px) {\n .a11y-body[_ngcontent-%COMP%] { grid-template-columns: 1fr; }\n }"] });
152
+ } }, dependencies: [A11yScoreComponent], styles: ["[_nghost-%COMP%] { display: flex; flex-direction: column; height: 100%; overflow: auto; }\n\n .a11y-body[_ngcontent-%COMP%] {\n padding: 18px 20px;\n display: grid;\n grid-template-columns: 220px 1fr;\n gap: 20px;\n min-height: 0;\n }\n .a11y-body--loading[_ngcontent-%COMP%] { opacity: 0.55; transition: opacity var(--%NS%dur-base); }\n\n .score-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n padding: 14px;\n background: var(--%NS%prism-bg-surface);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 10px;\n align-self: start;\n }\n\n .score-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--%NS%prism-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n font-weight: 600;\n }\n .score-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 2px;\n font-size: 11px;\n color: var(--%NS%prism-text-muted);\n }\n .score-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 4px; }\n .score-meta[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { width: 6px; height: 6px; border-radius: 50%; display: block; }\n\n .viol-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 0;\n }\n\n .viol[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr auto;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n background: var(--%NS%prism-bg-surface);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 8px;\n border-left: 3px solid var(--%NS%sev-color, var(--%NS%prism-primary));\n transition: border-color var(--%NS%dur-fast);\n }\n .viol[_ngcontent-%COMP%]:hover { border-color: var(--%NS%prism-border-strong); }\n\n .viol-sev[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: 9.5px;\n font-weight: 700;\n padding: 2px 6px;\n border-radius: var(--%NS%radius-xs);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n background: color-mix(in srgb, var(--%NS%sev-color) 15%, transparent);\n color: var(--%NS%sev-color);\n }\n\n .viol-text[_ngcontent-%COMP%] {\n font-size: 12.5px;\n color: var(--%NS%prism-text);\n min-width: 0;\n }\n .viol-text[_ngcontent-%COMP%] b[_ngcontent-%COMP%] {\n display: block;\n font-weight: 600;\n margin-bottom: 1px;\n }\n .viol-text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n font-size: 11.5px;\n }\n\n .viol-rule[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: 11px;\n color: var(--%NS%prism-text-ghost);\n padding: 2px 7px;\n background: var(--%NS%prism-input-bg);\n border-radius: var(--%NS%radius-xs);\n white-space: nowrap;\n }\n\n .a11y-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100px;\n color: var(--%NS%prism-text-muted);\n font-size: 13px;\n }\n .a11y-status--error[_ngcontent-%COMP%] { color: var(--%NS%prism-danger); }\n\n @media (max-width: 1100px) {\n .a11y-body[_ngcontent-%COMP%] { grid-template-columns: 1fr; }\n }"] });
153
153
  }
154
154
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(A11yViolationsComponent, [{
155
155
  type: Component,
@@ -41,6 +41,20 @@ export interface A11yManifestMeta {
41
41
  total: A11yReport['total'];
42
42
  thresholds: A11yThresholds;
43
43
  }
44
+ /** Shape stored under `showcaseConfig.meta.a11y`. */
45
+ export interface A11yComponentMeta {
46
+ found: boolean;
47
+ score: A11yScoreResult;
48
+ /**
49
+ * Pre-derived headline, written by the build step. Optional because a report
50
+ * written before this field existed simply has none, and the marker is then
51
+ * left out rather than guessed at.
52
+ */
53
+ summary?: {
54
+ variant: 'ok' | 'warn' | 'danger';
55
+ label: string;
56
+ };
57
+ }
44
58
  export interface NgPrismA11yConfig {
45
59
  /** Thresholds for the header badge color-coding and (when run via the CLI) build failure. */
46
60
  thresholds?: Partial<A11yThresholds>;
@@ -1 +1 @@
1
- {"version":3,"file":"a11y.types.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/a11y/a11y.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,KAAK,EAAE,eAAe,GAAG;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC3B,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,6FAA6F;IAC7F,UAAU,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACrC,iGAAiG;IACjG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IACzC,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB"}
1
+ {"version":3,"file":"a11y.types.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/a11y/a11y.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,KAAK,EAAE,eAAe,GAAG;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC3B,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,eAAe,CAAC;IACvB;;;;OAIG;IACH,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE;AAED,MAAM,WAAW,iBAAiB;IAChC,6FAA6F;IAC7F,UAAU,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACrC,iGAAiG;IACjG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IACzC,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB"}
@@ -0,0 +1,8 @@
1
+ import type { NavigationDecorationDefinition } from '../../plugin/plugin.types.js';
2
+ /**
3
+ * Core-owned navigation markers — the counterpart to `BUILTIN_PANELS` and
4
+ * `BUILTIN_HEADER_WIDGETS`. A11y is a core feature, not a plugin, so its
5
+ * marker lives here rather than in a plugin's contribution list.
6
+ */
7
+ export declare const BUILTIN_NAVIGATION_DECORATIONS: NavigationDecorationDefinition[];
8
+ //# sourceMappingURL=builtin-navigation-decorations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-navigation-decorations.d.ts","sourceRoot":"","sources":["../../../src/app/panels/builtin-navigation-decorations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAGnF;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,EAAE,8BAA8B,EAexE,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Core-owned navigation markers — the counterpart to `BUILTIN_PANELS` and
3
+ * `BUILTIN_HEADER_WIDGETS`. A11y is a core feature, not a plugin, so its
4
+ * marker lives here rather than in a plugin's contribution list.
5
+ */
6
+ export const BUILTIN_NAVIGATION_DECORATIONS = [
7
+ {
8
+ id: 'a11y',
9
+ icon: 'accessibility',
10
+ order: 10,
11
+ badge: (component) => {
12
+ const meta = component.meta.showcaseConfig.meta?.['a11y'];
13
+ if (!meta?.found || !meta.summary)
14
+ return null;
15
+ if (meta.summary.variant === 'ok')
16
+ return null;
17
+ return { variant: meta.summary.variant, label: meta.summary.label };
18
+ },
19
+ },
20
+ ];
@@ -186,7 +186,7 @@ export class PrismControlsPanelComponent {
186
186
  StringControlComponent,
187
187
  NumberControlComponent,
188
188
  UnionControlComponent,
189
- JsonControlComponent], styles: [".ctl-panel[_ngcontent-%COMP%] {\n overflow-y: auto;\n height: 100%;\n }\n\n .ctl-toolbar[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n z-index: 2;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 20px;\n background: var(--prism-bg-elevated);\n border-bottom: 1px solid var(--prism-border);\n }\n .ctl-dirty-info[_ngcontent-%COMP%] {\n font-size: 11.5px;\n font-family: var(--font-mono);\n color: var(--prism-text-muted);\n display: inline-flex;\n align-items: center;\n gap: 6px;\n }\n .ctl-dirty-dot[_ngcontent-%COMP%] {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--prism-primary);\n box-shadow: 0 0 6px color-mix(in srgb, var(--prism-primary) 60%, transparent);\n }\n .ctl-reset-btn[_ngcontent-%COMP%] {\n height: 24px;\n padding: 0 10px;\n border-radius: 5px;\n font-size: 11.5px;\n font-weight: 500;\n font-family: var(--font-sans);\n color: var(--prism-text-muted);\n background: transparent;\n border: 1px solid var(--prism-border);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n transition: color var(--dur-fast), background var(--dur-fast), border-color var(--dur-fast);\n }\n .ctl-reset-btn[_ngcontent-%COMP%]:hover {\n color: var(--prism-text);\n border-color: color-mix(in srgb, var(--prism-primary) 40%, var(--prism-border));\n background: color-mix(in srgb, var(--prism-primary) 8%, transparent);\n }\n .ctl-reset-btn[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--prism-primary);\n outline-offset: 1px;\n }\n\n .ctl-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 180px 1fr;\n align-items: center;\n gap: 12px;\n padding: 8px 20px;\n min-height: 40px;\n border-bottom: 1px solid var(--prism-border);\n }\n .ctl-row[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--prism-primary) 3%, transparent);\n }\n\n .ctl-label[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n .ctl-name[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--prism-text);\n font-weight: 500;\n }\n .ctl-type[_ngcontent-%COMP%] {\n font-family: var(--font-mono);\n font-size: 10.5px;\n color: var(--prism-text-ghost);\n }\n .ctl-type[_ngcontent-%COMP%] b[_ngcontent-%COMP%] {\n color: var(--prism-primary);\n font-weight: 500;\n }\n\n .ctl-input[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n }\n\n .ctl-not-editable[_ngcontent-%COMP%] {\n font-family: var(--font-mono);\n font-size: 11.5px;\n color: var(--prism-text-ghost);\n font-style: italic;\n }\n\n .ctl-empty[_ngcontent-%COMP%] {\n color: var(--prism-text-ghost);\n font-size: 13px;\n margin: 0;\n padding: 16px 20px;\n }"] });
189
+ JsonControlComponent], styles: [".ctl-panel[_ngcontent-%COMP%] {\n overflow-y: auto;\n height: 100%;\n }\n\n .ctl-toolbar[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n z-index: 2;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 20px;\n background: var(--%NS%prism-bg-elevated);\n border-bottom: 1px solid var(--%NS%prism-border);\n }\n .ctl-dirty-info[_ngcontent-%COMP%] {\n font-size: 11.5px;\n font-family: var(--%NS%font-mono);\n color: var(--%NS%prism-text-muted);\n display: inline-flex;\n align-items: center;\n gap: 6px;\n }\n .ctl-dirty-dot[_ngcontent-%COMP%] {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--%NS%prism-primary);\n box-shadow: 0 0 6px color-mix(in srgb, var(--%NS%prism-primary) 60%, transparent);\n }\n .ctl-reset-btn[_ngcontent-%COMP%] {\n height: 24px;\n padding: 0 10px;\n border-radius: 5px;\n font-size: 11.5px;\n font-weight: 500;\n font-family: var(--%NS%font-sans);\n color: var(--%NS%prism-text-muted);\n background: transparent;\n border: 1px solid var(--%NS%prism-border);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n transition: color var(--%NS%dur-fast), background var(--%NS%dur-fast), border-color var(--%NS%dur-fast);\n }\n .ctl-reset-btn[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text);\n border-color: color-mix(in srgb, var(--%NS%prism-primary) 40%, var(--%NS%prism-border));\n background: color-mix(in srgb, var(--%NS%prism-primary) 8%, transparent);\n }\n .ctl-reset-btn[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--%NS%prism-primary);\n outline-offset: 1px;\n }\n\n .ctl-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 180px 1fr;\n align-items: center;\n gap: 12px;\n padding: 8px 20px;\n min-height: 40px;\n border-bottom: 1px solid var(--%NS%prism-border);\n }\n .ctl-row[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--%NS%prism-primary) 3%, transparent);\n }\n\n .ctl-label[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n .ctl-name[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--%NS%prism-text);\n font-weight: 500;\n }\n .ctl-type[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: 10.5px;\n color: var(--%NS%prism-text-ghost);\n }\n .ctl-type[_ngcontent-%COMP%] b[_ngcontent-%COMP%] {\n color: var(--%NS%prism-primary);\n font-weight: 500;\n }\n\n .ctl-input[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n }\n\n .ctl-not-editable[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: 11.5px;\n color: var(--%NS%prism-text-ghost);\n font-style: italic;\n }\n\n .ctl-empty[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-ghost);\n font-size: 13px;\n margin: 0;\n padding: 16px 20px;\n }"] });
190
190
  }
191
191
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismControlsPanelComponent, [{
192
192
  type: Component,
@@ -56,7 +56,7 @@ export class PrismEventsPanelComponent {
56
56
  } if (rf & 2) {
57
57
  i0.ɵɵadvance(2);
58
58
  i0.ɵɵrepeater(ctx.eventLogService.events());
59
- } }, dependencies: [PrismJsonNodeComponent], styles: [".ev-panel[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n\n .ev-body[_ngcontent-%COMP%] {\n padding: 6px 0;\n overflow-y: auto;\n flex: 1;\n }\n\n .ev[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto auto 1fr auto;\n align-items: center;\n gap: 12px;\n padding: 6px 20px;\n font-family: var(--font-mono);\n font-size: 12px;\n border-bottom: 1px solid var(--prism-border);\n min-height: 32px;\n }\n .ev[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--prism-primary) 3%, transparent);\n }\n\n .ev-time[_ngcontent-%COMP%] {\n color: var(--prism-text-ghost);\n font-size: 11px;\n }\n .ev-idx[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n font-size: 11px;\n }\n .ev-name[_ngcontent-%COMP%] {\n color: var(--prism-primary);\n font-weight: 500;\n }\n .ev-args[_ngcontent-%COMP%] {\n color: var(--prism-text-2);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .ev-empty[_ngcontent-%COMP%] {\n color: var(--prism-text-ghost);\n font-size: 13px;\n padding: 16px 20px;\n margin: 0;\n }"] });
59
+ } }, dependencies: [PrismJsonNodeComponent], styles: [".ev-panel[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n\n .ev-body[_ngcontent-%COMP%] {\n padding: 6px 0;\n overflow-y: auto;\n flex: 1;\n }\n\n .ev[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto auto 1fr auto;\n align-items: center;\n gap: 12px;\n padding: 6px 20px;\n font-family: var(--%NS%font-mono);\n font-size: 12px;\n border-bottom: 1px solid var(--%NS%prism-border);\n min-height: 32px;\n }\n .ev[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--%NS%prism-primary) 3%, transparent);\n }\n\n .ev-time[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-ghost);\n font-size: 11px;\n }\n .ev-idx[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n font-size: 11px;\n }\n .ev-name[_ngcontent-%COMP%] {\n color: var(--%NS%prism-primary);\n font-weight: 500;\n }\n .ev-args[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-2);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .ev-empty[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-ghost);\n font-size: 13px;\n padding: 16px 20px;\n margin: 0;\n }"] });
60
60
  }
61
61
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismEventsPanelComponent, [{
62
62
  type: Component,
@@ -266,7 +266,7 @@ export class PrismJsonNodeComponent {
266
266
  } if (rf & 2) {
267
267
  let tmp_0_0;
268
268
  i0.ɵɵconditional((tmp_0_0 = ctx.type()) === "object" ? 0 : tmp_0_0 === "array" ? 1 : tmp_0_0 === "string" ? 2 : tmp_0_0 === "number" ? 3 : tmp_0_0 === "boolean" ? 4 : tmp_0_0 === "null" ? 5 : tmp_0_0 === "undefined" ? 6 : -1);
269
- } }, dependencies: [NgComponentOutlet], styles: ["[_nghost-%COMP%] {\n display: inline;\n font-family: var(--prism-font-mono, monospace);\n font-size: 12px;\n }\n .json-expandable[_ngcontent-%COMP%] {\n cursor: pointer;\n user-select: none;\n display: inline-flex;\n align-items: baseline;\n gap: 2px;\n }\n .json-expandable[_ngcontent-%COMP%]:hover .json-summary[_ngcontent-%COMP%] {\n opacity: 0.8;\n }\n .json-chevron[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n font-size: 10px;\n width: 10px;\n flex-shrink: 0;\n }\n .json-summary[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n }\n .json-children[_ngcontent-%COMP%] {\n display: block;\n padding-left: 16px;\n border-left: 1px solid var(--prism-border);\n margin: 2px 0;\n }\n .json-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n flex-wrap: wrap;\n gap: 0;\n padding: 1px 0;\n }\n .json-key[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n }\n .json-index[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n font-style: italic;\n }\n .json-colon[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n }\n .json-brace[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n }\n .json-string[_ngcontent-%COMP%] {\n color: var(--prism-code-attr);\n }\n .json-number[_ngcontent-%COMP%] {\n color: var(--prism-warn);\n }\n .json-boolean[_ngcontent-%COMP%] {\n color: var(--prism-primary);\n }\n .json-null[_ngcontent-%COMP%], \n .json-undefined[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n font-style: italic;\n }"] });
269
+ } }, dependencies: [NgComponentOutlet], styles: ["[_nghost-%COMP%] {\n display: inline;\n font-family: var(--%NS%prism-font-mono, monospace);\n font-size: 12px;\n }\n .json-expandable[_ngcontent-%COMP%] {\n cursor: pointer;\n user-select: none;\n display: inline-flex;\n align-items: baseline;\n gap: 2px;\n }\n .json-expandable[_ngcontent-%COMP%]:hover .json-summary[_ngcontent-%COMP%] {\n opacity: 0.8;\n }\n .json-chevron[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n font-size: 10px;\n width: 10px;\n flex-shrink: 0;\n }\n .json-summary[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n }\n .json-children[_ngcontent-%COMP%] {\n display: block;\n padding-left: 16px;\n border-left: 1px solid var(--%NS%prism-border);\n margin: 2px 0;\n }\n .json-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n flex-wrap: wrap;\n gap: 0;\n padding: 1px 0;\n }\n .json-key[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n }\n .json-index[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n font-style: italic;\n }\n .json-colon[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n }\n .json-brace[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n }\n .json-string[_ngcontent-%COMP%] {\n color: var(--%NS%prism-code-attr);\n }\n .json-number[_ngcontent-%COMP%] {\n color: var(--%NS%prism-warn);\n }\n .json-boolean[_ngcontent-%COMP%] {\n color: var(--%NS%prism-primary);\n }\n .json-null[_ngcontent-%COMP%], \n .json-undefined[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n font-style: italic;\n }"] });
270
270
  }
271
271
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismJsonNodeComponent, [{
272
272
  type: Component,
@@ -0,0 +1,35 @@
1
+ import type { PanelBadge, PanelDefinition, RuntimeComponent } from '../../../plugin/plugin.types.js';
2
+ import type { A11yScoreResult, A11yThresholds } from '../a11y/a11y.types.js';
3
+ /**
4
+ * The live figures the built-in tabs badge themselves with.
5
+ *
6
+ * Passed in rather than injected so this stays a pure function. The panel host
7
+ * reads them from its own services and hands them over; that is the whole
8
+ * reason the built-in chain could not simply be expressed as
9
+ * {@link PanelDefinition.badge} callbacks — `a11y` reports a running audit, not
10
+ * anything the component's meta holds.
11
+ *
12
+ * The thresholds travel with the audit result rather than being baked in here.
13
+ * The navigation marker grades the build-time report against the configured
14
+ * numbers; a tab grading the live audit on its own scale would put an amber
15
+ * icon in the sidebar next to a red badge on the tab for the same component.
16
+ */
17
+ export interface PanelBadgeContext {
18
+ inputCount: number;
19
+ a11yResult: A11yScoreResult | null;
20
+ a11yThresholds: A11yThresholds;
21
+ }
22
+ /**
23
+ * The badge a panel's tab carries, if any.
24
+ *
25
+ * A panel that declares its own {@link PanelDefinition.badge} wins outright,
26
+ * which is what lets a plugin put a number on its own tab without the panel
27
+ * host learning about it. The chain below it predates that hook and stays for
28
+ * the tabs it already covers.
29
+ *
30
+ * Returning `null` is the common case and the important one: a badge that is
31
+ * always present stops being a signal, so every branch here has a way to say
32
+ * "nothing worth reporting" rather than falling back to a zero.
33
+ */
34
+ export declare function resolvePanelBadge(panel: PanelDefinition, component: RuntimeComponent | null, context: PanelBadgeContext): PanelBadge | null;
35
+ //# sourceMappingURL=panel-badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-badge.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/panel-host/panel-badge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE7E;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,cAAc,EAAE,cAAc,CAAC;CAChC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,gBAAgB,GAAG,IAAI,EAClC,OAAO,EAAE,iBAAiB,GACzB,UAAU,GAAG,IAAI,CAyBnB"}
@@ -0,0 +1,37 @@
1
+ import { deriveA11ySummary } from '../a11y/a11y-summary.js';
2
+ /**
3
+ * The badge a panel's tab carries, if any.
4
+ *
5
+ * A panel that declares its own {@link PanelDefinition.badge} wins outright,
6
+ * which is what lets a plugin put a number on its own tab without the panel
7
+ * host learning about it. The chain below it predates that hook and stays for
8
+ * the tabs it already covers.
9
+ *
10
+ * Returning `null` is the common case and the important one: a badge that is
11
+ * always present stops being a signal, so every branch here has a way to say
12
+ * "nothing worth reporting" rather than falling back to a zero.
13
+ */
14
+ export function resolvePanelBadge(panel, component, context) {
15
+ if (panel.badge) {
16
+ // No component means no subject to report on; calling the hook with a
17
+ // placeholder would invite it to invent a number.
18
+ return component ? panel.badge(component) : null;
19
+ }
20
+ if (panel.id === 'controls') {
21
+ return context.inputCount > 0
22
+ ? { text: String(context.inputCount), variant: 'default' }
23
+ : null;
24
+ }
25
+ if (panel.id === 'a11y') {
26
+ // `=== null` rather than a falsy check: a score of 0 is a real, and the
27
+ // most urgent, thing to show.
28
+ const result = context.a11yResult;
29
+ if (result === null)
30
+ return null;
31
+ return {
32
+ text: String(result.score),
33
+ variant: deriveA11ySummary(result, context.a11yThresholds).variant,
34
+ };
35
+ }
36
+ return null;
37
+ }
@@ -15,13 +15,16 @@ export declare class PrismPanelHostComponent {
15
15
  protected readonly envInjector: EnvironmentInjector;
16
16
  private readonly auditService;
17
17
  private readonly rendererService;
18
- private readonly a11yScore;
19
- private readonly coverageScore;
18
+ private readonly manifest;
19
+ private readonly config;
20
+ /**
21
+ * The configured thresholds, resolved the way the a11y header badge resolves
22
+ * them: the build step's numbers as the base, the app config on top. Both
23
+ * are static for the session, so this is computed once rather than per tab.
24
+ */
25
+ private readonly a11yThresholds;
20
26
  private readonly inputCount;
21
- protected panelBadge(panelId: string): {
22
- text: string;
23
- variant: 'default' | 'ok' | 'warn' | 'danger';
24
- } | null;
27
+ protected panelBadge(panel: PanelDefinition): import("../../../plugin/plugin.types.js").PanelBadge | null;
25
28
  private readonly builtInPanels;
26
29
  protected readonly allPanels: import("@angular/core").Signal<PanelDefinition[]>;
27
30
  protected readonly panelInputs: import("@angular/core").Signal<{
@@ -1 +1 @@
1
- {"version":3,"file":"prism-panel-host.component.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/panel-host/prism-panel-host.component.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,mBAAmB,EAGnB,KAAK,IAAI,EAGV,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAI1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;;AAEvE,KAAK,kBAAkB,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,qBAuLa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAC5D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkC;IACtD,SAAS,CAAC,QAAQ,CAAC,YAAY,oBAA6B;IAC5D,SAAS,CAAC,QAAQ,CAAC,WAAW,sBAA+B;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IACzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAEhE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAExB;IAEF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAK3B;IAEH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAGxB;IAEH,SAAS,CAAC,UAAU,CAClB,OAAO,EAAE,MAAM,GACd;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAA;KAAE,GAAG,IAAI;IAwBzE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;IAEhD,SAAS,CAAC,QAAQ,CAAC,SAAS,oDAQzB;IAEH,SAAS,CAAC,QAAQ,CAAC,WAAW;;OAE1B;IAEJ,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAE9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAE7B;IACF,SAAS,CAAC,QAAQ,CAAC,mBAAmB,uDAEpC;;IAsCF,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,mBAAmB;yCApJhB,uBAAuB;2CAAvB,uBAAuB;CAwKnC"}
1
+ {"version":3,"file":"prism-panel-host.component.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/panel-host/prism-panel-host.component.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,mBAAmB,EAGnB,KAAK,IAAI,EAGV,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAM1E,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,iCAAiC,CAAC;;AAGzC,KAAK,kBAAkB,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,qBAuLa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAC5D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkC;IACtD,SAAS,CAAC,QAAQ,CAAC,YAAY,oBAA6B;IAC5D,SAAS,CAAC,QAAQ,CAAC,WAAW,sBAA+B;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IACzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IACpE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAE9D;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAM5B;IAEH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAGxB;IAEH,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,eAAe;IAQ3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;IAEhD,SAAS,CAAC,QAAQ,CAAC,SAAS,oDAQzB;IAEH,SAAS,CAAC,QAAQ,CAAC,WAAW;;OAE1B;IAEJ,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAE9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAE7B;IACF,SAAS,CAAC,QAAQ,CAAC,mBAAmB,uDAEpC;;IAsCF,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,mBAAmB;yCAtIhB,uBAAuB;2CAAvB,uBAAuB;CA0JnC"}
@@ -7,6 +7,9 @@ import { PrismNavigationService } from '../../services/prism-navigation.service.
7
7
  import { PrismPanelService } from '../../services/prism-panel.service.js';
8
8
  import { PrismPluginService } from '../../services/prism-plugin.service.js';
9
9
  import { PrismRendererService } from '../../services/prism-renderer.service.js';
10
+ import { resolveA11yThresholds } from '../a11y/a11y-thresholds.js';
11
+ import { PRISM_CONFIG, PRISM_MANIFEST } from '../../tokens/prism-tokens.js';
12
+ import { resolvePanelBadge } from './panel-badge.js';
10
13
  import * as i0 from "@angular/core";
11
14
  const _forTrack0 = ($index, $item) => $item.id;
12
15
  function PrismPanelHostComponent_For_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
@@ -44,7 +47,7 @@ function PrismPanelHostComponent_For_3_Template(rf, ctx) { if (rf & 1) {
44
47
  i0.ɵɵadvance();
45
48
  i0.ɵɵtextInterpolate1(" ", panel_r2.label, " ");
46
49
  i0.ɵɵadvance();
47
- i0.ɵɵconditional((tmp_15_0 = ctx_r2.panelBadge(panel_r2.id)) ? 3 : -1, tmp_15_0);
50
+ i0.ɵɵconditional((tmp_15_0 = ctx_r2.panelBadge(panel_r2)) ? 3 : -1, tmp_15_0);
48
51
  } }
49
52
  function PrismPanelHostComponent_For_6_ng_container_1_Template(rf, ctx) { if (rf & 1) {
50
53
  i0.ɵɵelementContainer(0);
@@ -67,45 +70,32 @@ export class PrismPanelHostComponent {
67
70
  envInjector = inject(EnvironmentInjector);
68
71
  auditService = inject(A11yAuditService);
69
72
  rendererService = inject(PrismRendererService);
70
- a11yScore = computed(() => this.auditService.scoreResult()?.score ?? null, /* @ts-ignore */
71
- ...(ngDevMode ? [{ debugName: "a11yScore" }] : /* istanbul ignore next */ []));
72
- coverageScore = computed(() => {
73
- const comp = this.nav.activeComponent();
74
- const coverage = comp?.meta?.showcaseConfig?.meta?.['coverage'];
75
- if (!coverage?.found)
76
- return null;
77
- return coverage.score;
73
+ manifest = inject(PRISM_MANIFEST);
74
+ config = inject(PRISM_CONFIG);
75
+ /**
76
+ * The configured thresholds, resolved the way the a11y header badge resolves
77
+ * them: the build step's numbers as the base, the app config on top. Both
78
+ * are static for the session, so this is computed once rather than per tab.
79
+ */
80
+ a11yThresholds = computed(() => {
81
+ const meta = this.manifest.meta?.['a11y'];
82
+ return resolveA11yThresholds({
83
+ ...meta?.thresholds,
84
+ ...this.config.a11y?.thresholds,
85
+ });
78
86
  }, /* @ts-ignore */
79
- ...(ngDevMode ? [{ debugName: "coverageScore" }] : /* istanbul ignore next */ []));
87
+ ...(ngDevMode ? [{ debugName: "a11yThresholds" }] : /* istanbul ignore next */ []));
80
88
  inputCount = computed(() => {
81
89
  const comp = this.nav.activeComponent();
82
90
  return comp?.meta.inputs.length ?? 0;
83
91
  }, /* @ts-ignore */
84
92
  ...(ngDevMode ? [{ debugName: "inputCount" }] : /* istanbul ignore next */ []));
85
- panelBadge(panelId) {
86
- if (panelId === 'controls') {
87
- const count = this.inputCount();
88
- return count > 0 ? { text: String(count), variant: 'default' } : null;
89
- }
90
- if (panelId === 'a11y') {
91
- const score = this.a11yScore();
92
- if (score === null)
93
- return null;
94
- return {
95
- text: String(score),
96
- variant: score >= 90 ? 'ok' : score >= 70 ? 'warn' : 'danger',
97
- };
98
- }
99
- if (panelId === 'coverage') {
100
- const score = this.coverageScore();
101
- if (score === null)
102
- return null;
103
- return {
104
- text: String(score),
105
- variant: score >= 90 ? 'ok' : score >= 70 ? 'warn' : 'danger',
106
- };
107
- }
108
- return null;
93
+ panelBadge(panel) {
94
+ return resolvePanelBadge(panel, this.nav.activeComponent(), {
95
+ inputCount: this.inputCount(),
96
+ a11yResult: this.auditService.scoreResult(),
97
+ a11yThresholds: this.a11yThresholds(),
98
+ });
109
99
  }
110
100
  builtInPanels = BUILTIN_PANELS;
111
101
  allPanels = computed(() => {
@@ -221,7 +211,7 @@ export class PrismPanelHostComponent {
221
211
  i0.ɵɵproperty("id", "panel-" + ctx.panelService.activePanelId());
222
212
  i0.ɵɵadvance();
223
213
  i0.ɵɵrepeater(ctx.renderedPanelsArray());
224
- } }, dependencies: [NgComponentOutlet, PrismIconComponent], styles: [".panel[_ngcontent-%COMP%] {\n background: var(--prism-bg-elevated);\n border-top: 1px solid var(--prism-border);\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n height: 100%;\n }\n\n .panel-tabs[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 2px;\n padding: 0 16px;\n height: 40px;\n border-bottom: 1px solid var(--prism-border);\n background: var(--prism-bg);\n overflow-x: auto;\n scrollbar-width: none;\n flex-shrink: 0;\n }\n .panel-tabs[_ngcontent-%COMP%]::-webkit-scrollbar { display: none; }\n\n .p-tab[_ngcontent-%COMP%] {\n position: relative;\n height: 100%;\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 0 12px;\n font-size: var(--fs-md);\n font-weight: 500;\n color: var(--prism-text-muted);\n white-space: nowrap;\n transition: color var(--dur-fast);\n background: none;\n border: none;\n cursor: pointer;\n font-family: var(--font-sans);\n }\n .p-tab[_ngcontent-%COMP%]:hover { color: var(--prism-text-2); }\n .p-tab--active[_ngcontent-%COMP%] { color: var(--prism-text); }\n .p-tab--active[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n left: 8px;\n right: 8px;\n bottom: -1px;\n height: 2px;\n background: linear-gradient(90deg, var(--prism-primary-from), var(--prism-primary-to));\n border-radius: 1px;\n }\n\n .p-tab-badge[_ngcontent-%COMP%] {\n min-width: 16px;\n height: 16px;\n padding: 0 5px;\n border-radius: 8px;\n background: color-mix(in srgb, var(--prism-primary) 18%, transparent);\n color: var(--prism-primary);\n font-family: var(--font-mono);\n font-size: 10px;\n font-weight: 700;\n display: grid;\n place-items: center;\n }\n .p-tab-badge.ok[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--prism-success) 18%, transparent);\n color: var(--prism-success);\n }\n .p-tab-badge.warn[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--prism-warn) 18%, transparent);\n color: var(--prism-warn);\n }\n .p-tab-badge.danger[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--prism-danger) 18%, transparent);\n color: var(--prism-danger);\n }\n\n .panel-tabs-right[_ngcontent-%COMP%] {\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: 4px;\n padding-left: 10px;\n }\n\n .icon-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: grid;\n place-items: center;\n border-radius: var(--radius-sm);\n color: var(--prism-text-muted);\n background: none;\n border: none;\n cursor: pointer;\n transition: all var(--dur-fast);\n }\n .icon-btn[_ngcontent-%COMP%]:hover {\n background: var(--prism-input-bg);\n color: var(--prism-text);\n }\n\n .panel-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: auto;\n background: var(--prism-bg-elevated);\n }\n .panel-body[_ngcontent-%COMP%]::-webkit-scrollbar { width: 8px; height: 8px; }\n .panel-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb { background: var(--prism-border-strong); border-radius: 4px; }\n\n .panel-pane[_ngcontent-%COMP%] { height: 100%; }\n .panel-pane[hidden][_ngcontent-%COMP%] { display: none; }\n\n [_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--prism-primary);\n outline-offset: 2px;\n }"] });
214
+ } }, dependencies: [NgComponentOutlet, PrismIconComponent], styles: [".panel[_ngcontent-%COMP%] {\n background: var(--%NS%prism-bg-elevated);\n border-top: 1px solid var(--%NS%prism-border);\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n height: 100%;\n }\n\n .panel-tabs[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 2px;\n padding: 0 16px;\n height: 40px;\n border-bottom: 1px solid var(--%NS%prism-border);\n background: var(--%NS%prism-bg);\n overflow-x: auto;\n scrollbar-width: none;\n flex-shrink: 0;\n }\n .panel-tabs[_ngcontent-%COMP%]::-webkit-scrollbar { display: none; }\n\n .p-tab[_ngcontent-%COMP%] {\n position: relative;\n height: 100%;\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 0 12px;\n font-size: var(--%NS%fs-md);\n font-weight: 500;\n color: var(--%NS%prism-text-muted);\n white-space: nowrap;\n transition: color var(--%NS%dur-fast);\n background: none;\n border: none;\n cursor: pointer;\n font-family: var(--%NS%font-sans);\n }\n .p-tab[_ngcontent-%COMP%]:hover { color: var(--%NS%prism-text-2); }\n .p-tab--active[_ngcontent-%COMP%] { color: var(--%NS%prism-text); }\n .p-tab--%NS%active[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n left: 8px;\n right: 8px;\n bottom: -1px;\n height: 2px;\n background: linear-gradient(90deg, var(--%NS%prism-primary-from), var(--%NS%prism-primary-to));\n border-radius: 1px;\n }\n\n .p-tab-badge[_ngcontent-%COMP%] {\n min-width: 16px;\n height: 16px;\n padding: 0 5px;\n border-radius: 8px;\n background: color-mix(in srgb, var(--%NS%prism-primary) 18%, transparent);\n color: var(--%NS%prism-primary);\n font-family: var(--%NS%font-mono);\n font-size: 10px;\n font-weight: 700;\n display: grid;\n place-items: center;\n }\n .p-tab-badge.ok[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--%NS%prism-success) 18%, transparent);\n color: var(--%NS%prism-success);\n }\n .p-tab-badge.warn[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--%NS%prism-warn) 18%, transparent);\n color: var(--%NS%prism-warn);\n }\n .p-tab-badge.danger[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--%NS%prism-danger) 18%, transparent);\n color: var(--%NS%prism-danger);\n }\n\n .panel-tabs-right[_ngcontent-%COMP%] {\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: 4px;\n padding-left: 10px;\n }\n\n .icon-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: grid;\n place-items: center;\n border-radius: var(--%NS%radius-sm);\n color: var(--%NS%prism-text-muted);\n background: none;\n border: none;\n cursor: pointer;\n transition: all var(--%NS%dur-fast);\n }\n .icon-btn[_ngcontent-%COMP%]:hover {\n background: var(--%NS%prism-input-bg);\n color: var(--%NS%prism-text);\n }\n\n .panel-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: auto;\n background: var(--%NS%prism-bg-elevated);\n }\n .panel-body[_ngcontent-%COMP%]::-webkit-scrollbar { width: 8px; height: 8px; }\n .panel-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb { background: var(--%NS%prism-border-strong); border-radius: 4px; }\n\n .panel-pane[_ngcontent-%COMP%] { height: 100%; }\n .panel-pane[hidden][_ngcontent-%COMP%] { display: none; }\n\n [_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--%NS%prism-primary);\n outline-offset: 2px;\n }"] });
225
215
  }
226
216
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismPanelHostComponent, [{
227
217
  type: Component,
@@ -245,7 +235,7 @@ export class PrismPanelHostComponent {
245
235
  <prism-icon [name]="panel.icon" [size]="13" />
246
236
  }
247
237
  {{ panel.label }}
248
- @if (panelBadge(panel.id); as badge) {
238
+ @if (panelBadge(panel); as badge) {
249
239
  <span
250
240
  class="p-tab-badge"
251
241
  [class.ok]="badge.variant === 'ok'"
@@ -280,4 +270,4 @@ export class PrismPanelHostComponent {
280
270
  </div>
281
271
  `, styles: ["\n .panel {\n background: var(--prism-bg-elevated);\n border-top: 1px solid var(--prism-border);\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n height: 100%;\n }\n\n .panel-tabs {\n display: flex;\n align-items: center;\n gap: 2px;\n padding: 0 16px;\n height: 40px;\n border-bottom: 1px solid var(--prism-border);\n background: var(--prism-bg);\n overflow-x: auto;\n scrollbar-width: none;\n flex-shrink: 0;\n }\n .panel-tabs::-webkit-scrollbar { display: none; }\n\n .p-tab {\n position: relative;\n height: 100%;\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 0 12px;\n font-size: var(--fs-md);\n font-weight: 500;\n color: var(--prism-text-muted);\n white-space: nowrap;\n transition: color var(--dur-fast);\n background: none;\n border: none;\n cursor: pointer;\n font-family: var(--font-sans);\n }\n .p-tab:hover { color: var(--prism-text-2); }\n .p-tab--active { color: var(--prism-text); }\n .p-tab--active::after {\n content: '';\n position: absolute;\n left: 8px;\n right: 8px;\n bottom: -1px;\n height: 2px;\n background: linear-gradient(90deg, var(--prism-primary-from), var(--prism-primary-to));\n border-radius: 1px;\n }\n\n .p-tab-badge {\n min-width: 16px;\n height: 16px;\n padding: 0 5px;\n border-radius: 8px;\n background: color-mix(in srgb, var(--prism-primary) 18%, transparent);\n color: var(--prism-primary);\n font-family: var(--font-mono);\n font-size: 10px;\n font-weight: 700;\n display: grid;\n place-items: center;\n }\n .p-tab-badge.ok {\n background: color-mix(in srgb, var(--prism-success) 18%, transparent);\n color: var(--prism-success);\n }\n .p-tab-badge.warn {\n background: color-mix(in srgb, var(--prism-warn) 18%, transparent);\n color: var(--prism-warn);\n }\n .p-tab-badge.danger {\n background: color-mix(in srgb, var(--prism-danger) 18%, transparent);\n color: var(--prism-danger);\n }\n\n .panel-tabs-right {\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: 4px;\n padding-left: 10px;\n }\n\n .icon-btn {\n width: 28px;\n height: 28px;\n display: grid;\n place-items: center;\n border-radius: var(--radius-sm);\n color: var(--prism-text-muted);\n background: none;\n border: none;\n cursor: pointer;\n transition: all var(--dur-fast);\n }\n .icon-btn:hover {\n background: var(--prism-input-bg);\n color: var(--prism-text);\n }\n\n .panel-body {\n flex: 1;\n min-height: 0;\n overflow: auto;\n background: var(--prism-bg-elevated);\n }\n .panel-body::-webkit-scrollbar { width: 8px; height: 8px; }\n .panel-body::-webkit-scrollbar-thumb { background: var(--prism-border-strong); border-radius: 4px; }\n\n .panel-pane { height: 100%; }\n .panel-pane[hidden] { display: none; }\n\n :focus-visible {\n outline: 2px solid var(--prism-primary);\n outline-offset: 2px;\n }\n "] }]
282
272
  }], () => [], null); })();
283
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismPanelHostComponent, { className: "PrismPanelHostComponent", filePath: "app/panels/panel-host/prism-panel-host.component.ts", lineNumber: 213 }); })();
273
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismPanelHostComponent, { className: "PrismPanelHostComponent", filePath: "app/panels/panel-host/prism-panel-host.component.ts", lineNumber: 220 }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"overlay-resolver.d.ts","sourceRoot":"","sources":["../../../src/app/renderer/overlay-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,6EAA6E;AAC7E,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;CAAE,GAC3C;IACE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;CACpC,CAAC;AAIN;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE;IACP,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;CAC3C,GACA,iBAAiB,CAkBnB"}
1
+ {"version":3,"file":"overlay-resolver.d.ts","sourceRoot":"","sources":["../../../src/app/renderer/overlay-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,6EAA6E;AAC7E,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;CAAE,GAC3C;IACE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;CACpC,CAAC;AAIN;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE;IACP,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;CAC3C,GACA,iBAAiB,CA6BnB"}
@@ -17,9 +17,20 @@ export function resolveOverlay(panels, activePanelId, options) {
17
17
  }
18
18
  if (panel.loadOverlayComponent) {
19
19
  const cached = options.cache.get(panel.id);
20
+ const loadOverlayComponent = panel.loadOverlayComponent;
20
21
  return cached
21
22
  ? { kind: 'eager', component: cached }
22
- : { kind: 'lazy', panelId: panel.id, load: panel.loadOverlayComponent };
23
+ : {
24
+ kind: 'lazy',
25
+ panelId: panel.id,
26
+ // Wrapped rather than passed by reference: handing the bare method
27
+ // over detaches it from its panel, and the renderer would call it
28
+ // with `this === undefined`. A definition written in method
29
+ // shorthand that reads its own object then throws inside a promise
30
+ // the renderer does not catch, and the overlay silently never
31
+ // appears.
32
+ load: () => loadOverlayComponent.call(panel),
33
+ };
23
34
  }
24
35
  return NONE;
25
36
  }
@@ -55,9 +55,7 @@ export class PrismRendererComponent {
55
55
  });
56
56
  panelService = inject(PrismPanelService);
57
57
  pluginService = inject(PrismPluginService);
58
- outlet = viewChild.required('outlet', {
59
- read: ViewContainerRef,
60
- });
58
+ outlet = viewChild.required('outlet', { ...(ngDevMode ? { debugName: "outlet" } : /* istanbul ignore next */ {}), read: ViewContainerRef });
61
59
  componentRef = null;
62
60
  outputSubscriptions = [];
63
61
  lastProjectedContent = undefined;
@@ -249,13 +247,13 @@ export class PrismRendererComponent {
249
247
  i0.ɵɵadvance();
250
248
  i0.ɵɵconditional(!ctx.capture.active() ? 1 : -1);
251
249
  i0.ɵɵadvance();
252
- i0.ɵɵstyleProp("--zoom", ctx.canvasService.zoom());
250
+ i0.ɵɵstyleProp("--%NS%zoom", ctx.canvasService.zoom());
253
251
  i0.ɵɵattribute("data-prism-rendered", ctx.renderedKey())("data-canvas-layout", ctx.canvasLayout());
254
252
  i0.ɵɵadvance(3);
255
253
  i0.ɵɵconditional(ctx.activeOverlay() ? 5 : -1);
256
254
  } }, dependencies: [PrismCanvasRulersComponent,
257
255
  PrismCanvasBgPillComponent,
258
- NgComponentOutlet], styles: ["[_nghost-%COMP%] { display: block; min-height: 0; flex: 1; }\n\n .prism-canvas-stage[_ngcontent-%COMP%] {\n position: relative;\n overflow: auto;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 32px;\n min-height: 200px;\n height: 100%;\n background-color: var(--prism-bg-surface);\n background-image: radial-gradient(circle, var(--prism-dot) 1px, transparent 1px);\n background-size: 20px 20px;\n transition: filter var(--dur-base);\n --prism-canvas-overlay-top: 12px;\n --prism-canvas-overlay-inline: 20px;\n }\n .prism-canvas-stage[data-rulers][_ngcontent-%COMP%] {\n --prism-canvas-overlay-top: 28px;\n --prism-canvas-overlay-inline: 28px;\n }\n\n .prism-canvas-stage[data-bg=\"plain\"][_ngcontent-%COMP%] {\n background-image: none;\n }\n \n\n\n\n\n .prism-canvas-stage[data-bg=\"light\"][_ngcontent-%COMP%] {\n background-color: var(--prism-void-light, #f7f5fc);\n background-image: none;\n }\n .prism-canvas-stage[data-bg=\"dark\"][_ngcontent-%COMP%] {\n background-color: var(--prism-void-dark, #07050f);\n background-image: none;\n }\n \n\n\n\n\n\n .prism-canvas-stage[data-bg=\"checker\"][_ngcontent-%COMP%], \n .prism-canvas-stage[data-bg=\"transparent\"][_ngcontent-%COMP%] {\n background-image:\n linear-gradient(45deg, var(--prism-border) 25%, transparent 25%),\n linear-gradient(-45deg, var(--prism-border) 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, var(--prism-border) 75%),\n linear-gradient(-45deg, transparent 75%, var(--prism-border) 75%);\n background-size: 16px 16px;\n background-position: 0 0, 0 8px, 8px -8px, -8px 0;\n }\n\n .stage-crosshair[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n pointer-events: none;\n opacity: 0;\n transition: opacity var(--dur-base);\n }\n .stage-crosshair.visible[_ngcontent-%COMP%] { opacity: 1; }\n .stage-crosshair[_ngcontent-%COMP%]::before, \n .stage-crosshair[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n background: color-mix(in srgb, var(--prism-primary) 20%, transparent);\n }\n .stage-crosshair[_ngcontent-%COMP%]::before { left: 0; right: 0; top: 50%; height: 1px; }\n .stage-crosshair[_ngcontent-%COMP%]::after { top: 0; bottom: 0; left: 50%; width: 1px; }\n\n .canvas-badges[_ngcontent-%COMP%] {\n position: absolute;\n top: var(--prism-canvas-overlay-top);\n left: var(--prism-canvas-overlay-inline);\n display: flex;\n gap: 6px;\n pointer-events: none;\n transition: top var(--dur-base), left var(--dur-base);\n }\n .c-badge[_ngcontent-%COMP%] {\n font-family: var(--font-mono);\n font-size: var(--fs-xs);\n padding: 3px 7px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--prism-bg-elevated) 90%, transparent);\n border: 1px solid var(--prism-border);\n color: var(--prism-text-muted);\n backdrop-filter: blur(8px);\n }\n\n .demo-wrap[_ngcontent-%COMP%] {\n position: relative;\n display: inline-block;\n transform: scale(var(--zoom, 1));\n transition: transform 0.18s;\n }\n .demo-wrap[data-canvas-layout=\"stretch\"][_ngcontent-%COMP%] {\n display: block;\n width: 100%;\n max-width: 800px;\n }"] });
256
+ NgComponentOutlet], styles: ["[_nghost-%COMP%] { display: block; min-height: 0; flex: 1; }\n\n .prism-canvas-stage[_ngcontent-%COMP%] {\n position: relative;\n overflow: auto;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 32px;\n min-height: 200px;\n height: 100%;\n background-color: var(--%NS%prism-bg-surface);\n background-image: radial-gradient(circle, var(--%NS%prism-dot) 1px, transparent 1px);\n background-size: 20px 20px;\n transition: filter var(--%NS%dur-base);\n --%NS%prism-canvas-overlay-top: 12px;\n --%NS%prism-canvas-overlay-inline: 20px;\n }\n .prism-canvas-stage[data-rulers][_ngcontent-%COMP%] {\n --%NS%prism-canvas-overlay-top: 28px;\n --%NS%prism-canvas-overlay-inline: 28px;\n }\n\n .prism-canvas-stage[data-bg=\"plain\"][_ngcontent-%COMP%] {\n background-image: none;\n }\n \n\n\n\n\n .prism-canvas-stage[data-bg=\"light\"][_ngcontent-%COMP%] {\n background-color: var(--%NS%prism-void-light, #f7f5fc);\n background-image: none;\n }\n .prism-canvas-stage[data-bg=\"dark\"][_ngcontent-%COMP%] {\n background-color: var(--%NS%prism-void-dark, #07050f);\n background-image: none;\n }\n \n\n\n\n\n\n .prism-canvas-stage[data-bg=\"checker\"][_ngcontent-%COMP%], \n .prism-canvas-stage[data-bg=\"transparent\"][_ngcontent-%COMP%] {\n background-image:\n linear-gradient(45deg, var(--%NS%prism-border) 25%, transparent 25%),\n linear-gradient(-45deg, var(--%NS%prism-border) 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, var(--%NS%prism-border) 75%),\n linear-gradient(-45deg, transparent 75%, var(--%NS%prism-border) 75%);\n background-size: 16px 16px;\n background-position: 0 0, 0 8px, 8px -8px, -8px 0;\n }\n\n .stage-crosshair[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n pointer-events: none;\n opacity: 0;\n transition: opacity var(--%NS%dur-base);\n }\n .stage-crosshair.visible[_ngcontent-%COMP%] { opacity: 1; }\n .stage-crosshair[_ngcontent-%COMP%]::before, \n .stage-crosshair[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n background: color-mix(in srgb, var(--%NS%prism-primary) 20%, transparent);\n }\n .stage-crosshair[_ngcontent-%COMP%]::before { left: 0; right: 0; top: 50%; height: 1px; }\n .stage-crosshair[_ngcontent-%COMP%]::after { top: 0; bottom: 0; left: 50%; width: 1px; }\n\n .canvas-badges[_ngcontent-%COMP%] {\n position: absolute;\n top: var(--%NS%prism-canvas-overlay-top);\n left: var(--%NS%prism-canvas-overlay-inline);\n display: flex;\n gap: 6px;\n pointer-events: none;\n transition: top var(--%NS%dur-base), left var(--%NS%dur-base);\n }\n .c-badge[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-xs);\n padding: 3px 7px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--%NS%prism-bg-elevated) 90%, transparent);\n border: 1px solid var(--%NS%prism-border);\n color: var(--%NS%prism-text-muted);\n backdrop-filter: blur(8px);\n }\n\n .demo-wrap[_ngcontent-%COMP%] {\n position: relative;\n display: inline-block;\n transform: scale(var(--%NS%zoom, 1));\n transition: transform 0.18s;\n }\n .demo-wrap[data-canvas-layout=\"stretch\"][_ngcontent-%COMP%] {\n display: block;\n width: 100%;\n max-width: 800px;\n }"] });
259
257
  }
260
258
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismRendererComponent, [{
261
259
  type: Component,
@@ -15,6 +15,6 @@ export declare class PrismCanvasService {
15
15
  private loadFromStorage;
16
16
  private save;
17
17
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismCanvasService, never>;
18
- static ɵprov: i0.ɵɵInjectableDeclaration<PrismCanvasService>;
18
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
19
19
  }
20
20
  //# sourceMappingURL=prism-canvas.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-canvas.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-canvas.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,gCAAgC,CAAC;;AAG3E,YAAY,EAAE,QAAQ,EAAE,CAAC;AAIzB,qBACa,kBAAkB;IAC7B,QAAQ,CAAC,EAAE,mDAA4B;IACvC,QAAQ,CAAC,IAAI,iDAAa;IAC1B,QAAQ,CAAC,MAAM,kDAAiB;IAChC,QAAQ,CAAC,MAAM,kDAAiB;IAEhC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;;IAWvD,KAAK,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI;IAKzB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKxB,YAAY,IAAI,IAAI;IAKpB,YAAY,IAAI,IAAI;IAKpB,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,IAAI;yCAnDD,kBAAkB;6CAAlB,kBAAkB;CAiE9B"}
1
+ {"version":3,"file":"prism-canvas.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-canvas.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,gCAAgC,CAAC;;AAG3E,YAAY,EAAE,QAAQ,EAAE,CAAC;AAIzB,qBACa,kBAAkB;IAC7B,QAAQ,CAAC,EAAE,mDAA4B;IACvC,QAAQ,CAAC,IAAI,iDAAa;IAC1B,QAAQ,CAAC,MAAM,kDAAiB;IAChC,QAAQ,CAAC,MAAM,kDAAiB;IAEhC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;;IAWvD,KAAK,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI;IAKzB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKxB,YAAY,IAAI,IAAI;IAKpB,YAAY,IAAI,IAAI;IAKpB,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,IAAI;yCAnDD,kBAAkB;;CAiE9B"}
@@ -17,6 +17,12 @@ export declare const CAPTURE_ATTRIBUTE = "data-prism-capture";
17
17
  * Above `html` the backdrop is the browser's own and no stylesheet reaches it;
18
18
  * a runner has to clear that with `omitBackground: true`.
19
19
  *
20
+ * `prism-shell` is the *host element* the app bootstraps into, not the
21
+ * `div.prism-shell` inside its template — both are in the chain and either can
22
+ * be given a background, a `:host` rule being the easy way to do it by
23
+ * accident. `.prism-body` is the grid between the shell and `.prism-main` and
24
+ * is listed on the same insurance grounds.
25
+ *
20
26
  * Scoped by `:has()` to a *transparent* stage, so the other five backgrounds
21
27
  * behave exactly as before. Exported so a test can assert the invariant
22
28
  * against the real DOM rather than against this list — the list is the
@@ -33,8 +39,16 @@ export declare const CAPTURE_TRANSPARENT_SELECTOR: string;
33
39
  * mode strips the canvas background down to its patternless colour — keeping
34
40
  * whatever `@Showcase({ bg })` declared, or clearing the whole paint chain to
35
41
  * real transparency for `bg: 'transparent'` — suppresses every piece of
36
- * canvas chrome, locks zoom to 1 and freezes animation, so a variant renders
37
- * identically on every run.
42
+ * canvas chrome, removes every other shell region from layout so the canvas
43
+ * owns the viewport, locks zoom to 1 and freezes animation, so a variant
44
+ * renders identically on every run.
45
+ *
46
+ * What that buys a runner is the right to screenshot `.demo-wrap` directly:
47
+ * the target is composited against the declared background over its whole box,
48
+ * not merely over the part that fits inside the canvas viewport. The one thing
49
+ * the mode cannot do is make room that the viewport does not have — a
50
+ * component larger than the viewport still overflows, and sizing the viewport
51
+ * to fit is the runner's job.
38
52
  *
39
53
  * The flag is read once from the URL at construction time and never written
40
54
  * back — {@link PrismUrlStateService} rebuilds the query string from scratch,
@@ -53,7 +67,7 @@ export declare class PrismCaptureService {
53
67
  constructor();
54
68
  private applyToDocument;
55
69
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismCaptureService, never>;
56
- static ɵprov: i0.ɵɵInjectableDeclaration<PrismCaptureService>;
70
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
57
71
  }
58
72
  /**
59
73
  * Parses the capture flag out of a `window.location.search` string.
@@ -1 +1 @@
1
- {"version":3,"file":"prism-capture.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-capture.service.ts"],"names":[],"mappings":";AAEA,sFAAsF;AACtF,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AAItD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,4BAA4B,QAEgG,CAAC;AA8C1I;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBACa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAItB;IAEF,kEAAkE;IAClE,QAAQ,CAAC,MAAM,0CAA6B;;IAM5C,OAAO,CAAC,eAAe;yCAdZ,mBAAmB;6CAAnB,mBAAmB;CAuB/B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAIzD"}
1
+ {"version":3,"file":"prism-capture.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-capture.service.ts"],"names":[],"mappings":";AAEA,sFAAsF;AACtF,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AAItD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,4BAA4B,QAE0H,CAAC;AA+HpK;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBACa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAItB;IAEF,kEAAkE;IAClE,QAAQ,CAAC,MAAM,0CAA6B;;IAM5C,OAAO,CAAC,eAAe;yCAdZ,mBAAmB;;CAuB/B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAIzD"}