@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
@@ -27,7 +27,7 @@ export class PrismCanvasBgPillComponent {
27
27
  i0.ɵɵconditionalCreate(0, PrismCanvasBgPillComponent_Conditional_0_Template, 5, 1, "div", 0);
28
28
  } if (rf & 2) {
29
29
  i0.ɵɵconditional(ctx.visible() ? 0 : -1);
30
- } }, styles: ["[_nghost-%COMP%] {\n position: absolute;\n top: var(--prism-canvas-overlay-top, 12px);\n right: var(--prism-canvas-overlay-inline, 20px);\n pointer-events: none;\n z-index: 2;\n transition: top var(--dur-base), right var(--dur-base);\n }\n .prism-bg-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 4px 4px 4px 10px;\n border-radius: 999px;\n font-size: var(--fs-xs);\n font-family: var(--font-sans);\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 pointer-events: auto;\n animation: _ngcontent-%COMP%_fadeIn var(--dur-base) ease-out;\n }\n .label[_ngcontent-%COMP%] { letter-spacing: 0.02em; }\n .reset[_ngcontent-%COMP%] {\n height: 22px;\n padding: 0 10px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--prism-primary) 12%, transparent);\n color: var(--prism-text);\n border: 1px solid color-mix(in srgb, var(--prism-primary) 25%, transparent);\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n cursor: pointer;\n transition: background var(--dur-fast);\n }\n .reset[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--prism-primary) 20%, transparent);\n }\n @keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; transform: translateY(-4px); }\n to { opacity: 1; transform: translateY(0); }\n }"] });
30
+ } }, styles: ["[_nghost-%COMP%] {\n position: absolute;\n top: var(--%NS%prism-canvas-overlay-top, 12px);\n right: var(--%NS%prism-canvas-overlay-inline, 20px);\n pointer-events: none;\n z-index: 2;\n transition: top var(--%NS%dur-base), right var(--%NS%dur-base);\n }\n .prism-bg-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 4px 4px 4px 10px;\n border-radius: 999px;\n font-size: var(--%NS%fs-xs);\n font-family: var(--%NS%font-sans);\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 pointer-events: auto;\n animation: _ngcontent-%COMP%_fadeIn var(--%NS%dur-base) ease-out;\n }\n .label[_ngcontent-%COMP%] { letter-spacing: 0.02em; }\n .reset[_ngcontent-%COMP%] {\n height: 22px;\n padding: 0 10px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--%NS%prism-primary) 12%, transparent);\n color: var(--%NS%prism-text);\n border: 1px solid color-mix(in srgb, var(--%NS%prism-primary) 25%, transparent);\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n cursor: pointer;\n transition: background var(--%NS%dur-fast);\n }\n .reset[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--%NS%prism-primary) 20%, transparent);\n }\n @keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; transform: translateY(-4px); }\n to { opacity: 1; transform: translateY(0); }\n }"] });
31
31
  }
32
32
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismCanvasBgPillComponent, [{
33
33
  type: Component,
@@ -158,7 +158,7 @@ export class PrismCanvasRulersComponent {
158
158
  i0.ɵɵconditionalCreate(0, PrismCanvasRulersComponent_Conditional_0_Template, 6, 0, "div", 2);
159
159
  } if (rf & 2) {
160
160
  i0.ɵɵconditional(ctx.canvas.rulers() ? 0 : -1);
161
- } }, styles: ["[_nghost-%COMP%] { display: contents; }\n\n .ruler-wrap[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 4;\n overflow: hidden;\n }\n\n .ruler[_ngcontent-%COMP%] { position: absolute; }\n .ruler--top[_ngcontent-%COMP%] {\n top: 0;\n left: 20px;\n right: 0;\n height: 20px;\n }\n .ruler--left[_ngcontent-%COMP%] {\n top: 20px;\n left: 0;\n bottom: 0;\n width: 20px;\n }\n .ruler-corner[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n width: 20px;\n height: 20px;\n background: var(--prism-bg);\n border-right: 1px solid var(--prism-border);\n border-bottom: 1px solid var(--prism-border);\n z-index: 1;\n }"] });
161
+ } }, styles: ["[_nghost-%COMP%] { display: contents; }\n\n .ruler-wrap[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 4;\n overflow: hidden;\n }\n\n .ruler[_ngcontent-%COMP%] { position: absolute; }\n .ruler--top[_ngcontent-%COMP%] {\n top: 0;\n left: 20px;\n right: 0;\n height: 20px;\n }\n .ruler--left[_ngcontent-%COMP%] {\n top: 20px;\n left: 0;\n bottom: 0;\n width: 20px;\n }\n .ruler-corner[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n width: 20px;\n height: 20px;\n background: var(--%NS%prism-bg);\n border-right: 1px solid var(--%NS%prism-border);\n border-bottom: 1px solid var(--%NS%prism-border);\n z-index: 1;\n }"] });
162
162
  }
163
163
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismCanvasRulersComponent, [{
164
164
  type: Component,
@@ -1,4 +1,5 @@
1
- import { PrismCanvasService, type CanvasBg } from '../services/prism-canvas.service.js';
1
+ import { type CanvasBg } from '../../shared/canvas-bg.type.js';
2
+ import { PrismCanvasService } from '../services/prism-canvas.service.js';
2
3
  import { PrismVariantBgService } from '../services/prism-variant-bg.service.js';
3
4
  import { PrismLayoutService } from '../services/prism-layout.service.js';
4
5
  import * as i0 from "@angular/core";
@@ -8,15 +9,30 @@ export declare class PrismCanvasToolbarComponent {
8
9
  protected readonly layout: PrismLayoutService;
9
10
  protected setBg(bg: CanvasBg): void;
10
11
  /**
11
- * The backgrounds a user can cycle through — deliberately not every
12
- * {@link CanvasBg}.
12
+ * Every {@link CanvasBg}, and the canonical list rather than a copy of it.
13
13
  *
14
- * `transparent` is missing on purpose. It renders as the checkerboard while
15
- * browsing, so offering it next to `checker` would be two buttons that paint
16
- * the same thing; the difference only exists in a capture, which is not a
17
- * thing this toolbar can show. It stays a value a `@Showcase` declares.
14
+ * This group is a readout as much as a control: the active button is
15
+ * `effective()` and the starred one is `recommended()`. A value missing here
16
+ * therefore cannot be *shown* either — a variant declaring it leaves the
17
+ * whole group with nothing active and the star with nowhere to sit. That is
18
+ * what a shorter list bought when `transparent` was left out of it, so the
19
+ * list is now the type's own.
20
+ *
21
+ * `checker` and `transparent` do paint the same checkerboard here, which is
22
+ * why they carry titles: the difference between them is what a capture does,
23
+ * and the canvas cannot show that. `checker` is deprecated for exactly that
24
+ * reason and says so, but it stays in the list until 23.0.0 — a component
25
+ * can still declare it, and the group has to be able to show what it has.
26
+ */
27
+ protected readonly bgs: readonly CanvasBg[];
28
+ /** What a background means, where the canvas cannot show the difference. */
29
+ /**
30
+ * Bound with `[attr.title]`, never `[title]`. A property binding assigns to
31
+ * `HTMLElement.title`, a non-nullable DOMString, so the `null` below would
32
+ * be stringified and every unremarkable button would carry a tooltip
33
+ * reading "null" — four of the six in the common case.
18
34
  */
19
- protected readonly bgs: CanvasBg[];
35
+ protected bgTitle(bg: CanvasBg): string | null;
20
36
  protected readonly zooms: {
21
37
  value: number;
22
38
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"prism-canvas-toolbar.component.d.ts","sourceRoot":"","sources":["../../../src/app/canvas/prism-canvas-toolbar.component.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kBAAkB,EAClB,KAAK,QAAQ,EACd,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;;AAEzE,qBA+Ka,2BAA2B;IACtC,SAAS,CAAC,QAAQ,CAAC,MAAM,qBAA8B;IACvD,SAAS,CAAC,QAAQ,CAAC,SAAS,wBAAiC;IAC7D,SAAS,CAAC,QAAQ,CAAC,MAAM,qBAA8B;IAEvD,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI;IAQnC;;;;;;;;OAQG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,CAMhC;IACF,SAAS,CAAC,QAAQ,CAAC,KAAK;;;QAKtB;IAEF,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;yCApC5B,2BAA2B;2CAA3B,2BAA2B;CAuCvC"}
1
+ {"version":3,"file":"prism-canvas-toolbar.component.d.ts","sourceRoot":"","sources":["../../../src/app/canvas/prism-canvas-toolbar.component.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;;AAEzE,qBA2Ka,2BAA2B;IACtC,SAAS,CAAC,QAAQ,CAAC,MAAM,qBAA8B;IACvD,SAAS,CAAC,QAAQ,CAAC,SAAS,wBAAiC;IAC7D,SAAS,CAAC,QAAQ,CAAC,MAAM,qBAA8B;IAEvD,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI;IAQnC;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,sBAAc;IAEpC,4EAA4E;IAC5E;;;;;OAKG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI;IAY9C,SAAS,CAAC,QAAQ,CAAC,KAAK;;;QAKtB;IAEF,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;yCAzD5B,2BAA2B;2CAA3B,2BAA2B;CA4DvC"}
@@ -1,6 +1,7 @@
1
1
  import { Component, inject, ChangeDetectionStrategy } from '@angular/core';
2
2
  import { PrismIconComponent } from '../icons/prism-icon.component.js';
3
- import { PrismCanvasService, } from '../services/prism-canvas.service.js';
3
+ import { CANVAS_BGS } from '../../shared/canvas-bg.type.js';
4
+ import { PrismCanvasService } from '../services/prism-canvas.service.js';
4
5
  import { PrismVariantBgService } from '../services/prism-variant-bg.service.js';
5
6
  import { PrismLayoutService } from '../services/prism-layout.service.js';
6
7
  import * as i0 from "@angular/core";
@@ -22,7 +23,7 @@ function PrismCanvasToolbarComponent_For_5_Template(rf, ctx) { if (rf & 1) {
22
23
  const bg_r2 = ctx.$implicit;
23
24
  const ctx_r2 = i0.ɵɵnextContext();
24
25
  i0.ɵɵclassProp("tool-btn--active", ctx_r2.variantBg.effective() === bg_r2)("tool-btn--recommended", ctx_r2.variantBg.recommended() === bg_r2);
25
- i0.ɵɵproperty("title", ctx_r2.variantBg.recommended() === bg_r2 ? "Recommended background for this variant" : null);
26
+ i0.ɵɵattribute("title", ctx_r2.bgTitle(bg_r2));
26
27
  i0.ɵɵadvance();
27
28
  i0.ɵɵconditional(ctx_r2.variantBg.recommended() === bg_r2 ? 1 : -1);
28
29
  i0.ɵɵadvance();
@@ -30,7 +31,7 @@ function PrismCanvasToolbarComponent_For_5_Template(rf, ctx) { if (rf & 1) {
30
31
  } }
31
32
  function PrismCanvasToolbarComponent_For_11_Template(rf, ctx) { if (rf & 1) {
32
33
  const _r4 = i0.ɵɵgetCurrentView();
33
- i0.ɵɵelementStart(0, "button", 16);
34
+ i0.ɵɵelementStart(0, "button", 13);
34
35
  i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_For_11_Template_button_click_0_listener() { const z_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.canvas.setZoom(z_r5.value)); });
35
36
  i0.ɵɵtext(1);
36
37
  i0.ɵɵelementEnd();
@@ -54,21 +55,41 @@ export class PrismCanvasToolbarComponent {
54
55
  }
55
56
  }
56
57
  /**
57
- * The backgrounds a user can cycle through — deliberately not every
58
- * {@link CanvasBg}.
58
+ * Every {@link CanvasBg}, and the canonical list rather than a copy of it.
59
+ *
60
+ * This group is a readout as much as a control: the active button is
61
+ * `effective()` and the starred one is `recommended()`. A value missing here
62
+ * therefore cannot be *shown* either — a variant declaring it leaves the
63
+ * whole group with nothing active and the star with nowhere to sit. That is
64
+ * what a shorter list bought when `transparent` was left out of it, so the
65
+ * list is now the type's own.
59
66
  *
60
- * `transparent` is missing on purpose. It renders as the checkerboard while
61
- * browsing, so offering it next to `checker` would be two buttons that paint
62
- * the same thing; the difference only exists in a capture, which is not a
63
- * thing this toolbar can show. It stays a value a `@Showcase` declares.
67
+ * `checker` and `transparent` do paint the same checkerboard here, which is
68
+ * why they carry titles: the difference between them is what a capture does,
69
+ * and the canvas cannot show that. `checker` is deprecated for exactly that
70
+ * reason and says so, but it stays in the list until 23.0.0 — a component
71
+ * can still declare it, and the group has to be able to show what it has.
64
72
  */
65
- bgs = [
66
- 'dots',
67
- 'plain',
68
- 'light',
69
- 'dark',
70
- 'checker',
71
- ];
73
+ bgs = CANVAS_BGS;
74
+ /** What a background means, where the canvas cannot show the difference. */
75
+ /**
76
+ * Bound with `[attr.title]`, never `[title]`. A property binding assigns to
77
+ * `HTMLElement.title`, a non-nullable DOMString, so the `null` below would
78
+ * be stringified and every unremarkable button would carry a tooltip
79
+ * reading "null" — four of the six in the common case.
80
+ */
81
+ bgTitle(bg) {
82
+ if (this.variantBg.recommended() === bg) {
83
+ return 'Recommended background for this variant';
84
+ }
85
+ if (bg === 'transparent') {
86
+ return 'Checkerboard here, a real alpha channel in a capture';
87
+ }
88
+ if (bg === 'checker') {
89
+ return 'Deprecated — same look as Transparent, but a capture keeps the themed colour';
90
+ }
91
+ return null;
92
+ }
72
93
  zooms = [
73
94
  { value: 0.75, label: '75%' },
74
95
  { value: 1, label: '100%' },
@@ -79,7 +100,7 @@ export class PrismCanvasToolbarComponent {
79
100
  return s.charAt(0).toUpperCase() + s.slice(1);
80
101
  }
81
102
  static ɵfac = function PrismCanvasToolbarComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PrismCanvasToolbarComponent)(); };
82
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismCanvasToolbarComponent, selectors: [["prism-canvas-toolbar"]], decls: 23, vars: 9, consts: [[1, "canvas-toolbar"], [1, "tool-label"], [1, "tool-group"], [1, "tool-btn", 3, "tool-btn--active", "tool-btn--recommended", "title"], [1, "tool-sep"], [1, "tool-btn", 3, "tool-btn--active"], ["title", "Toggle guides", "aria-label", "Toggle guides", 1, "tool-btn", 3, "click"], ["name", "crosshair", 3, "size"], ["title", "Toggle rulers", "aria-label", "Toggle rulers", 1, "tool-btn", 3, "click"], ["name", "move", 3, "size"], [1, "tool-spacer"], ["title", "Toggle Angular template", "aria-label", "Toggle Angular template", 1, "tool-btn", "tool-btn--tpl", 3, "click"], ["name", "code", 3, "size"], [1, "tool-btn", 3, "click", "title"], ["width", "11", "height", "11", "viewBox", "0 0 24 24", "fill", "#facc15", "aria-label", "Recommended", 1, "bg-star"], ["d", "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01z"], [1, "tool-btn", 3, "click"]], template: function PrismCanvasToolbarComponent_Template(rf, ctx) { if (rf & 1) {
103
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismCanvasToolbarComponent, selectors: [["prism-canvas-toolbar"]], decls: 23, vars: 9, consts: [[1, "canvas-toolbar"], [1, "tool-label"], [1, "tool-group"], [1, "tool-btn", 3, "tool-btn--active", "tool-btn--recommended"], [1, "tool-sep"], [1, "tool-btn", 3, "tool-btn--active"], ["title", "Toggle guides", "aria-label", "Toggle guides", 1, "tool-btn", 3, "click"], ["name", "crosshair", 3, "size"], ["title", "Toggle rulers", "aria-label", "Toggle rulers", 1, "tool-btn", 3, "click"], ["name", "move", 3, "size"], [1, "tool-spacer"], ["title", "Toggle Angular template", "aria-label", "Toggle Angular template", 1, "tool-btn", "tool-btn--tpl", 3, "click"], ["name", "code", 3, "size"], [1, "tool-btn", 3, "click"], ["width", "11", "height", "11", "viewBox", "0 0 24 24", "fill", "#facc15", "aria-label", "Recommended", 1, "bg-star"], ["d", "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01z"]], template: function PrismCanvasToolbarComponent_Template(rf, ctx) { if (rf & 1) {
83
104
  i0.ɵɵelementStart(0, "div", 0)(1, "span", 1);
84
105
  i0.ɵɵtext(2, "Canvas");
85
106
  i0.ɵɵelementEnd();
@@ -127,7 +148,7 @@ export class PrismCanvasToolbarComponent {
127
148
  i0.ɵɵclassProp("tool-btn--tpl-active", ctx.layout.templatePopoverVisible());
128
149
  i0.ɵɵadvance();
129
150
  i0.ɵɵproperty("size", 13);
130
- } }, dependencies: [PrismIconComponent], styles: [".canvas-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 8px 20px;\n border-bottom: 1px solid var(--prism-border);\n background: var(--prism-bg);\n min-height: 44px;\n }\n\n .tool-group[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1px;\n padding: 2px;\n background: var(--prism-input-bg);\n border: 1px solid var(--prism-border);\n border-radius: var(--radius-md);\n }\n\n .tool-btn[_ngcontent-%COMP%] {\n height: 24px;\n padding: 0 9px;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: var(--fs-sm);\n color: var(--prism-text-muted);\n transition: all var(--dur-fast);\n font-weight: 500;\n background: none;\n border: none;\n cursor: pointer;\n font-family: var(--font-sans);\n }\n .tool-btn[_ngcontent-%COMP%]:hover {\n color: var(--prism-text);\n background: color-mix(in srgb, var(--prism-primary) 8%, transparent);\n }\n .tool-btn--active[_ngcontent-%COMP%] {\n color: var(--prism-text);\n background: color-mix(in srgb, var(--prism-primary) 15%, transparent);\n box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--prism-primary) 30%, transparent);\n }\n .bg-star[_ngcontent-%COMP%] {\n flex-shrink: 0;\n filter: drop-shadow(0 0 2px rgba(250, 204, 21, 0.4));\n }\n\n .tool-sep[_ngcontent-%COMP%] {\n width: 1px;\n height: 18px;\n background: var(--prism-border);\n margin: 0 4px;\n }\n\n .tool-label[_ngcontent-%COMP%] {\n font-size: var(--fs-xs);\n color: var(--prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n font-weight: 600;\n margin-right: 2px;\n }\n\n .tool-spacer[_ngcontent-%COMP%] { flex: 1; }\n\n .tool-btn--tpl[_ngcontent-%COMP%] {\n color: var(--prism-primary);\n background: color-mix(in srgb, var(--prism-primary) 10%, transparent);\n border: 1px solid\n color-mix(in srgb, var(--prism-primary) 25%, transparent);\n font-family: var(--font-mono);\n }\n .tool-btn--tpl[_ngcontent-%COMP%]:hover {\n color: var(--prism-primary);\n background: color-mix(in srgb, var(--prism-primary) 18%, transparent);\n }\n .tool-btn--tpl.tool-btn--tpl-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--prism-primary) 22%, transparent);\n box-shadow: inset 0 0 0 1px\n color-mix(in srgb, var(--prism-primary) 35%, transparent);\n }"] });
151
+ } }, dependencies: [PrismIconComponent], styles: [".canvas-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 8px 20px;\n border-bottom: 1px solid var(--%NS%prism-border);\n background: var(--%NS%prism-bg);\n min-height: 44px;\n }\n\n .tool-group[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1px;\n padding: 2px;\n background: var(--%NS%prism-input-bg);\n border: 1px solid var(--%NS%prism-border);\n border-radius: var(--%NS%radius-md);\n }\n\n .tool-btn[_ngcontent-%COMP%] {\n height: 24px;\n padding: 0 9px;\n border-radius: var(--%NS%radius-sm);\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: var(--%NS%fs-sm);\n color: var(--%NS%prism-text-muted);\n transition: all var(--%NS%dur-fast);\n font-weight: 500;\n background: none;\n border: none;\n cursor: pointer;\n font-family: var(--%NS%font-sans);\n }\n .tool-btn[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text);\n background: color-mix(in srgb, var(--%NS%prism-primary) 8%, transparent);\n }\n .tool-btn--active[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text);\n background: color-mix(in srgb, var(--%NS%prism-primary) 15%, transparent);\n box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--%NS%prism-primary) 30%, transparent);\n }\n .bg-star[_ngcontent-%COMP%] {\n flex-shrink: 0;\n filter: drop-shadow(0 0 2px rgba(250, 204, 21, 0.4));\n }\n\n .tool-sep[_ngcontent-%COMP%] {\n width: 1px;\n height: 18px;\n background: var(--%NS%prism-border);\n margin: 0 4px;\n }\n\n .tool-label[_ngcontent-%COMP%] {\n font-size: var(--%NS%fs-xs);\n color: var(--%NS%prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n font-weight: 600;\n margin-right: 2px;\n }\n\n .tool-spacer[_ngcontent-%COMP%] { flex: 1; }\n\n .tool-btn--tpl[_ngcontent-%COMP%] {\n color: var(--%NS%prism-primary);\n background: color-mix(in srgb, var(--%NS%prism-primary) 10%, transparent);\n border: 1px solid\n color-mix(in srgb, var(--%NS%prism-primary) 25%, transparent);\n font-family: var(--%NS%font-mono);\n }\n .tool-btn--%NS%tpl[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-primary);\n background: color-mix(in srgb, var(--%NS%prism-primary) 18%, transparent);\n }\n .tool-btn--tpl.tool-btn--tpl-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--%NS%prism-primary) 22%, transparent);\n box-shadow: inset 0 0 0 1px\n color-mix(in srgb, var(--%NS%prism-primary) 35%, transparent);\n }"] });
131
152
  }
132
153
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismCanvasToolbarComponent, [{
133
154
  type: Component,
@@ -140,11 +161,7 @@ export class PrismCanvasToolbarComponent {
140
161
  class="tool-btn"
141
162
  [class.tool-btn--active]="variantBg.effective() === bg"
142
163
  [class.tool-btn--recommended]="variantBg.recommended() === bg"
143
- [title]="
144
- variantBg.recommended() === bg
145
- ? 'Recommended background for this variant'
146
- : null
147
- "
164
+ [attr.title]="bgTitle(bg)"
148
165
  (click)="setBg(bg)"
149
166
  >
150
167
  @if (variantBg.recommended() === bg) {
@@ -215,4 +232,4 @@ export class PrismCanvasToolbarComponent {
215
232
  </div>
216
233
  `, styles: ["\n .canvas-toolbar {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 8px 20px;\n border-bottom: 1px solid var(--prism-border);\n background: var(--prism-bg);\n min-height: 44px;\n }\n\n .tool-group {\n display: flex;\n align-items: center;\n gap: 1px;\n padding: 2px;\n background: var(--prism-input-bg);\n border: 1px solid var(--prism-border);\n border-radius: var(--radius-md);\n }\n\n .tool-btn {\n height: 24px;\n padding: 0 9px;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: var(--fs-sm);\n color: var(--prism-text-muted);\n transition: all var(--dur-fast);\n font-weight: 500;\n background: none;\n border: none;\n cursor: pointer;\n font-family: var(--font-sans);\n }\n .tool-btn:hover {\n color: var(--prism-text);\n background: color-mix(in srgb, var(--prism-primary) 8%, transparent);\n }\n .tool-btn--active {\n color: var(--prism-text);\n background: color-mix(in srgb, var(--prism-primary) 15%, transparent);\n box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--prism-primary) 30%, transparent);\n }\n .bg-star {\n flex-shrink: 0;\n filter: drop-shadow(0 0 2px rgba(250, 204, 21, 0.4));\n }\n\n .tool-sep {\n width: 1px;\n height: 18px;\n background: var(--prism-border);\n margin: 0 4px;\n }\n\n .tool-label {\n font-size: var(--fs-xs);\n color: var(--prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n font-weight: 600;\n margin-right: 2px;\n }\n\n .tool-spacer { flex: 1; }\n\n .tool-btn--tpl {\n color: var(--prism-primary);\n background: color-mix(in srgb, var(--prism-primary) 10%, transparent);\n border: 1px solid\n color-mix(in srgb, var(--prism-primary) 25%, transparent);\n font-family: var(--font-mono);\n }\n .tool-btn--tpl:hover {\n color: var(--prism-primary);\n background: color-mix(in srgb, var(--prism-primary) 18%, transparent);\n }\n .tool-btn--tpl.tool-btn--tpl-active {\n background: color-mix(in srgb, var(--prism-primary) 22%, transparent);\n box-shadow: inset 0 0 0 1px\n color-mix(in srgb, var(--prism-primary) 35%, transparent);\n }\n "] }]
217
234
  }], null, null); })();
218
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismCanvasToolbarComponent, { className: "PrismCanvasToolbarComponent", filePath: "app/canvas/prism-canvas-toolbar.component.ts", lineNumber: 185 }); })();
235
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismCanvasToolbarComponent, { className: "PrismCanvasToolbarComponent", filePath: "app/canvas/prism-canvas-toolbar.component.ts", lineNumber: 179 }); })();
@@ -122,7 +122,7 @@ export class PrismTemplatePopoverComponent {
122
122
  i0.ɵɵconditionalCreate(0, PrismTemplatePopoverComponent_Conditional_0_Template, 11, 7, "div", 0);
123
123
  } if (rf & 2) {
124
124
  i0.ɵɵconditional(ctx.layoutService.templatePopoverVisible() ? 0 : -1);
125
- } }, dependencies: [PrismIconComponent], styles: ["[_nghost-%COMP%] { display: contents; }\n\n .tpl-popover[_ngcontent-%COMP%] {\n position: absolute;\n right: 20px;\n top: 8px;\n width: 520px;\n max-width: calc(100% - 40px);\n max-height: min(420px, calc(100% - 16px));\n background: var(--prism-bg-elevated);\n border: 1px solid var(--prism-border-strong);\n border-radius: var(--radius-lg, 10px);\n box-shadow:\n 0 20px 60px rgba(0, 0, 0, 0.45),\n 0 0 0 1px color-mix(in srgb, var(--prism-primary) 10%, transparent);\n display: flex;\n flex-direction: column;\n z-index: 30;\n overflow: hidden;\n animation: _ngcontent-%COMP%_tpl-fade-in var(--dur-fast, 0.15s) var(--ease-default, ease-out);\n }\n\n @keyframes _ngcontent-%COMP%_tpl-fade-in {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .tpl-popover-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0 12px 0 16px;\n height: 40px;\n border-bottom: 1px solid var(--prism-border);\n background: linear-gradient(\n 180deg,\n var(--prism-bg-surface),\n var(--prism-bg-elevated)\n );\n flex-shrink: 0;\n }\n .tpl-popover-head[_ngcontent-%COMP%] > prism-icon[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n }\n .tpl-popover-head[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n flex: 1;\n font-size: var(--fs-xs);\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--prism-text-2);\n }\n\n .tpl-popover-copy[_ngcontent-%COMP%] {\n height: 26px;\n padding: 0 10px;\n font-size: var(--fs-sm);\n font-family: var(--font-sans);\n font-weight: 500;\n color: var(--prism-primary);\n background: color-mix(in srgb, var(--prism-primary) 12%, transparent);\n border: 1px solid color-mix(in srgb, var(--prism-primary) 25%, transparent);\n border-radius: var(--radius-sm, 5px);\n display: flex;\n align-items: center;\n gap: 5px;\n cursor: pointer;\n transition: background var(--dur-fast);\n }\n .tpl-popover-copy[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--prism-primary) 20%, transparent);\n }\n\n .tpl-popover-close[_ngcontent-%COMP%] {\n width: 26px;\n height: 26px;\n display: grid;\n place-items: center;\n border-radius: var(--radius-sm, 5px);\n color: var(--prism-text-muted);\n background: transparent;\n border: 0;\n cursor: pointer;\n transition: background var(--dur-fast), color var(--dur-fast);\n }\n .tpl-popover-close[_ngcontent-%COMP%]:hover {\n color: var(--prism-text);\n background: var(--prism-input-bg);\n }\n\n .tpl-popover-body[_ngcontent-%COMP%] {\n margin: 0;\n padding: 14px 18px;\n font-family: var(--font-mono);\n font-size: var(--fs-md);\n line-height: 1.7;\n color: var(--prism-text-2);\n overflow: auto;\n background: var(--prism-bg);\n flex: 1;\n min-height: 0;\n white-space: pre;\n }\n .tpl-popover-body[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n }\n .tpl-popover-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--prism-border-strong);\n border-radius: 3px;\n }\n\n [_nghost-%COMP%] .tok-tag { color: var(--prism-code-tag); }\n [_nghost-%COMP%] .tok-attr { color: var(--prism-code-attr); }\n [_nghost-%COMP%] .tok-str { color: var(--prism-code-str); }\n [_nghost-%COMP%] .tok-com { color: var(--prism-code-com); font-style: italic; }"] });
125
+ } }, dependencies: [PrismIconComponent], styles: ["[_nghost-%COMP%] { display: contents; }\n\n .tpl-popover[_ngcontent-%COMP%] {\n position: absolute;\n right: 20px;\n top: 8px;\n width: 520px;\n max-width: calc(100% - 40px);\n max-height: min(420px, calc(100% - 16px));\n background: var(--%NS%prism-bg-elevated);\n border: 1px solid var(--%NS%prism-border-strong);\n border-radius: var(--%NS%radius-lg, 10px);\n box-shadow:\n 0 20px 60px rgba(0, 0, 0, 0.45),\n 0 0 0 1px color-mix(in srgb, var(--%NS%prism-primary) 10%, transparent);\n display: flex;\n flex-direction: column;\n z-index: 30;\n overflow: hidden;\n animation: _ngcontent-%COMP%_tpl-fade-in var(--%NS%dur-fast, 0.15s) var(--%NS%ease-default, ease-out);\n }\n\n @keyframes _ngcontent-%COMP%_tpl-fade-in {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .tpl-popover-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0 12px 0 16px;\n height: 40px;\n border-bottom: 1px solid var(--%NS%prism-border);\n background: linear-gradient(\n 180deg,\n var(--%NS%prism-bg-surface),\n var(--%NS%prism-bg-elevated)\n );\n flex-shrink: 0;\n }\n .tpl-popover-head[_ngcontent-%COMP%] > prism-icon[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n }\n .tpl-popover-head[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n flex: 1;\n font-size: var(--%NS%fs-xs);\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--%NS%prism-text-2);\n }\n\n .tpl-popover-copy[_ngcontent-%COMP%] {\n height: 26px;\n padding: 0 10px;\n font-size: var(--%NS%fs-sm);\n font-family: var(--%NS%font-sans);\n font-weight: 500;\n color: var(--%NS%prism-primary);\n background: color-mix(in srgb, var(--%NS%prism-primary) 12%, transparent);\n border: 1px solid color-mix(in srgb, var(--%NS%prism-primary) 25%, transparent);\n border-radius: var(--%NS%radius-sm, 5px);\n display: flex;\n align-items: center;\n gap: 5px;\n cursor: pointer;\n transition: background var(--%NS%dur-fast);\n }\n .tpl-popover-copy[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--%NS%prism-primary) 20%, transparent);\n }\n\n .tpl-popover-close[_ngcontent-%COMP%] {\n width: 26px;\n height: 26px;\n display: grid;\n place-items: center;\n border-radius: var(--%NS%radius-sm, 5px);\n color: var(--%NS%prism-text-muted);\n background: transparent;\n border: 0;\n cursor: pointer;\n transition: background var(--%NS%dur-fast), color var(--%NS%dur-fast);\n }\n .tpl-popover-close[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text);\n background: var(--%NS%prism-input-bg);\n }\n\n .tpl-popover-body[_ngcontent-%COMP%] {\n margin: 0;\n padding: 14px 18px;\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-md);\n line-height: 1.7;\n color: var(--%NS%prism-text-2);\n overflow: auto;\n background: var(--%NS%prism-bg);\n flex: 1;\n min-height: 0;\n white-space: pre;\n }\n .tpl-popover-body[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n }\n .tpl-popover-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--%NS%prism-border-strong);\n border-radius: 3px;\n }\n\n [_nghost-%COMP%] .tok-tag { color: var(--%NS%prism-code-tag); }\n [_nghost-%COMP%] .tok-attr { color: var(--%NS%prism-code-attr); }\n [_nghost-%COMP%] .tok-str { color: var(--%NS%prism-code-str); }\n [_nghost-%COMP%] .tok-com { color: var(--%NS%prism-code-com); font-style: italic; }"] });
126
126
  }
127
127
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismTemplatePopoverComponent, [{
128
128
  type: Component,
@@ -15,6 +15,18 @@ export declare class PrismComponentHeadComponent {
15
15
  protected readonly coveragePercent: import("@angular/core").Signal<number | null>;
16
16
  protected readonly bundleSize: import("@angular/core").Signal<string | null>;
17
17
  protected readonly a11yScore: import("@angular/core").Signal<number | null>;
18
+ /**
19
+ * The visual regression headline, as the plugin already derived it.
20
+ *
21
+ * Read whole rather than recomputed: the colour follows the plugin's status
22
+ * semantics — red for any changed variant, amber for ones that could not be
23
+ * compared — and duplicating that rule here would mean the stat and the
24
+ * plugin's own panel could disagree about the same component.
25
+ */
26
+ protected readonly vrtStat: import("@angular/core").Signal<{
27
+ value: string;
28
+ variant: "ok" | "warn" | "danger";
29
+ } | null>;
18
30
  private readonly componentMeta;
19
31
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismComponentHeadComponent, never>;
20
32
  static ɵcmp: i0.ɵɵComponentDeclaration<PrismComponentHeadComponent, "prism-component-head", never, {}, {}, never, never, true, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"prism-component-head.component.d.ts","sourceRoot":"","sources":["../../../src/app/component-head/prism-component-head.component.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;;AAEzE,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAqBD,qBAsNa,2BAA2B;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IAEzD,SAAS,CAAC,QAAQ,CAAC,IAAI,mFAErB;IAEF,SAAS,CAAC,QAAQ,CAAC,QAAQ,yCAGxB;IAEH,SAAS,CAAC,QAAQ,CAAC,YAAY,yCAG5B;IAEH,SAAS,CAAC,QAAQ,CAAC,MAAM,8DAEvB;IAEF,SAAS,CAAC,QAAQ,CAAC,WAAW,qDAG3B;IAEH,SAAS,CAAC,QAAQ,CAAC,eAAe,gDAM/B;IAEH,SAAS,CAAC,QAAQ,CAAC,UAAU,gDAS1B;IAEH,SAAS,CAAC,QAAQ,CAAC,SAAS,gDAEzB;IAEH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAM3B;yCAxDQ,2BAA2B;2CAA3B,2BAA2B;CAyDvC"}
1
+ {"version":3,"file":"prism-component-head.component.d.ts","sourceRoot":"","sources":["../../../src/app/component-head/prism-component-head.component.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;;AAEzE,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAqBD,qBA6Na,2BAA2B;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IAEzD,SAAS,CAAC,QAAQ,CAAC,IAAI,mFAErB;IAEF,SAAS,CAAC,QAAQ,CAAC,QAAQ,yCAGxB;IAEH,SAAS,CAAC,QAAQ,CAAC,YAAY,yCAG5B;IAEH,SAAS,CAAC,QAAQ,CAAC,MAAM,8DAEvB;IAEF,SAAS,CAAC,QAAQ,CAAC,WAAW,qDAG3B;IAEH,SAAS,CAAC,QAAQ,CAAC,eAAe,gDAM/B;IAEH,SAAS,CAAC,QAAQ,CAAC,UAAU,gDAS1B;IAEH,SAAS,CAAC,QAAQ,CAAC,SAAS,gDAEzB;IAEH;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,OAAO;eACjB,MAAM;iBACJ,IAAI,GAAG,MAAM,GAAG,QAAQ;cAUhC;IAEH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAM3B;yCA9EQ,2BAA2B;2CAA3B,2BAA2B;CA+EvC"}
@@ -5,20 +5,20 @@ import { A11yAuditService } from '../panels/a11y/a11y-audit.service.js';
5
5
  import { PrismStatComponent } from './prism-stat.component.js';
6
6
  import * as i0 from "@angular/core";
7
7
  function PrismComponentHeadComponent_Conditional_0_Conditional_13_Conditional_1_Template(rf, ctx) { if (rf & 1) {
8
- i0.ɵɵelement(0, "prism-icon", 14);
8
+ i0.ɵɵelement(0, "prism-icon", 15);
9
9
  } if (rf & 2) {
10
10
  i0.ɵɵproperty("size", 13);
11
11
  } }
12
12
  function PrismComponentHeadComponent_Conditional_0_Conditional_13_Conditional_2_Template(rf, ctx) { if (rf & 1) {
13
- i0.ɵɵelement(0, "span", 15);
13
+ i0.ɵɵelement(0, "span", 16);
14
14
  } }
15
15
  function PrismComponentHeadComponent_Conditional_0_Conditional_13_Conditional_3_Template(rf, ctx) { if (rf & 1) {
16
- i0.ɵɵelement(0, "span", 16);
16
+ i0.ɵɵelement(0, "span", 17);
17
17
  } }
18
18
  function PrismComponentHeadComponent_Conditional_0_Conditional_13_Template(rf, ctx) { if (rf & 1) {
19
19
  i0.ɵɵelementStart(0, "span");
20
- i0.ɵɵconditionalCreate(1, PrismComponentHeadComponent_Conditional_0_Conditional_13_Conditional_1_Template, 1, 1, "prism-icon", 14)(2, PrismComponentHeadComponent_Conditional_0_Conditional_13_Conditional_2_Template, 1, 0, "span", 15)(3, PrismComponentHeadComponent_Conditional_0_Conditional_13_Conditional_3_Template, 1, 0, "span", 16);
21
- i0.ɵɵelementStart(4, "span", 17);
20
+ i0.ɵɵconditionalCreate(1, PrismComponentHeadComponent_Conditional_0_Conditional_13_Conditional_1_Template, 1, 1, "prism-icon", 15)(2, PrismComponentHeadComponent_Conditional_0_Conditional_13_Conditional_2_Template, 1, 0, "span", 16)(3, PrismComponentHeadComponent_Conditional_0_Conditional_13_Conditional_3_Template, 1, 0, "span", 17);
21
+ i0.ɵɵelementStart(4, "span", 18);
22
22
  i0.ɵɵtext(5);
23
23
  i0.ɵɵelementEnd()();
24
24
  } if (rf & 2) {
@@ -41,7 +41,7 @@ function PrismComponentHeadComponent_Conditional_0_Conditional_14_Template(rf, c
41
41
  i0.ɵɵtextInterpolate(c_r3.meta.showcaseConfig.description);
42
42
  } }
43
43
  function PrismComponentHeadComponent_Conditional_0_Conditional_15_For_2_Template(rf, ctx) { if (rf & 1) {
44
- i0.ɵɵelementStart(0, "span", 18);
44
+ i0.ɵɵelementStart(0, "span", 19);
45
45
  i0.ɵɵtext(1);
46
46
  i0.ɵɵelementEnd();
47
47
  } if (rf & 2) {
@@ -51,7 +51,7 @@ function PrismComponentHeadComponent_Conditional_0_Conditional_15_For_2_Template
51
51
  } }
52
52
  function PrismComponentHeadComponent_Conditional_0_Conditional_15_Template(rf, ctx) { if (rf & 1) {
53
53
  i0.ɵɵelementStart(0, "div", 8);
54
- i0.ɵɵrepeaterCreate(1, PrismComponentHeadComponent_Conditional_0_Conditional_15_For_2_Template, 2, 1, "span", 18, i0.ɵɵrepeaterTrackByIdentity);
54
+ i0.ɵɵrepeaterCreate(1, PrismComponentHeadComponent_Conditional_0_Conditional_15_For_2_Template, 2, 1, "span", 19, i0.ɵɵrepeaterTrackByIdentity);
55
55
  i0.ɵɵelementEnd();
56
56
  } if (rf & 2) {
57
57
  const c_r3 = i0.ɵɵnextContext();
@@ -82,6 +82,12 @@ function PrismComponentHeadComponent_Conditional_0_Conditional_20_Template(rf, c
82
82
  const ctx_r1 = i0.ɵɵnextContext(2);
83
83
  i0.ɵɵproperty("value", ctx_r1.a11yScore())("pillVariant", ctx_r1.a11yScore() >= 90 ? "ok" : "warn");
84
84
  } }
85
+ function PrismComponentHeadComponent_Conditional_0_Conditional_21_Template(rf, ctx) { if (rf & 1) {
86
+ i0.ɵɵelement(0, "prism-stat", 14);
87
+ } if (rf & 2) {
88
+ const vrt_r5 = ctx;
89
+ i0.ɵɵproperty("value", vrt_r5.value)("pillVariant", vrt_r5.variant);
90
+ } }
85
91
  function PrismComponentHeadComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
86
92
  i0.ɵɵelementStart(0, "section", 0)(1, "div", 1)(2, "div")(3, "div", 2)(4, "span");
87
93
  i0.ɵɵtext(5);
@@ -105,9 +111,11 @@ function PrismComponentHeadComponent_Conditional_0_Template(rf, ctx) { if (rf &
105
111
  i0.ɵɵconditionalCreate(18, PrismComponentHeadComponent_Conditional_0_Conditional_18_Template, 1, 3, "prism-stat", 11);
106
112
  i0.ɵɵconditionalCreate(19, PrismComponentHeadComponent_Conditional_0_Conditional_19_Template, 1, 1, "prism-stat", 12);
107
113
  i0.ɵɵconditionalCreate(20, PrismComponentHeadComponent_Conditional_0_Conditional_20_Template, 1, 2, "prism-stat", 13);
114
+ i0.ɵɵconditionalCreate(21, PrismComponentHeadComponent_Conditional_0_Conditional_21_Template, 1, 2, "prism-stat", 14);
108
115
  i0.ɵɵelementEnd()()();
109
116
  } if (rf & 2) {
110
117
  let tmp_7_0;
118
+ let tmp_14_0;
111
119
  const c_r3 = ctx;
112
120
  const ctx_r1 = i0.ɵɵnextContext();
113
121
  i0.ɵɵadvance(5);
@@ -134,6 +142,8 @@ function PrismComponentHeadComponent_Conditional_0_Template(rf, ctx) { if (rf &
134
142
  i0.ɵɵconditional(ctx_r1.bundleSize() !== null ? 19 : -1);
135
143
  i0.ɵɵadvance();
136
144
  i0.ɵɵconditional(ctx_r1.a11yScore() !== null ? 20 : -1);
145
+ i0.ɵɵadvance();
146
+ i0.ɵɵconditional((tmp_14_0 = ctx_r1.vrtStat()) ? 21 : -1, tmp_14_0);
137
147
  } }
138
148
  const STATUS_BADGES = {
139
149
  stable: {
@@ -198,6 +208,24 @@ export class PrismComponentHeadComponent {
198
208
  return this.auditService.scoreResult()?.score ?? null;
199
209
  }, /* @ts-ignore */
200
210
  ...(ngDevMode ? [{ debugName: "a11yScore" }] : /* istanbul ignore next */ []));
211
+ /**
212
+ * The visual regression headline, as the plugin already derived it.
213
+ *
214
+ * Read whole rather than recomputed: the colour follows the plugin's status
215
+ * semantics — red for any changed variant, amber for ones that could not be
216
+ * compared — and duplicating that rule here would mean the stat and the
217
+ * plugin's own panel could disagree about the same component.
218
+ */
219
+ vrtStat = computed(() => {
220
+ const vrt = this.componentMeta()?.['visualRegression'];
221
+ if (!vrt?.found || !vrt.summary)
222
+ return null;
223
+ const { value, variant } = vrt.summary;
224
+ return variant === 'ok' || variant === 'warn' || variant === 'danger'
225
+ ? { value, variant }
226
+ : null;
227
+ }, /* @ts-ignore */
228
+ ...(ngDevMode ? [{ debugName: "vrtStat" }] : /* istanbul ignore next */ []));
201
229
  componentMeta = computed(() => {
202
230
  const c = this.comp();
203
231
  const meta = c?.meta.showcaseConfig.meta;
@@ -207,12 +235,12 @@ export class PrismComponentHeadComponent {
207
235
  }, /* @ts-ignore */
208
236
  ...(ngDevMode ? [{ debugName: "componentMeta" }] : /* istanbul ignore next */ []));
209
237
  static ɵfac = function PrismComponentHeadComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PrismComponentHeadComponent)(); };
210
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismComponentHeadComponent, selectors: [["prism-component-head"]], decls: 1, vars: 1, consts: [[1, "comp-head"], [1, "comp-head-top"], [1, "comp-crumb"], ["name", "chevron-right", 3, "size"], [1, "comp-title"], [1, "comp-selector"], [3, "class"], [1, "comp-desc"], [1, "comp-tags"], [1, "comp-head-stats"], ["label", "Variants", 3, "value"], ["label", "Coverage", 3, "value", "pill", "pillVariant"], ["label", "Bundle", 3, "value"], ["label", "Score", "pill", "A11y", 3, "value", "pillVariant"], ["name", "check", 3, "size"], ["aria-hidden", "true", 1, "comp-status-ring"], ["aria-hidden", "true", 1, "comp-status-dot"], [1, "comp-status-label"], [1, "comp-tag"]], template: function PrismComponentHeadComponent_Template(rf, ctx) { if (rf & 1) {
211
- i0.ɵɵconditionalCreate(0, PrismComponentHeadComponent_Conditional_0_Template, 21, 12, "section", 0);
238
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismComponentHeadComponent, selectors: [["prism-component-head"]], decls: 1, vars: 1, consts: [[1, "comp-head"], [1, "comp-head-top"], [1, "comp-crumb"], ["name", "chevron-right", 3, "size"], [1, "comp-title"], [1, "comp-selector"], [3, "class"], [1, "comp-desc"], [1, "comp-tags"], [1, "comp-head-stats"], ["label", "Variants", 3, "value"], ["label", "Coverage", 3, "value", "pill", "pillVariant"], ["label", "Bundle", 3, "value"], ["label", "Score", "pill", "A11y", 3, "value", "pillVariant"], ["label", "VRT Diff", "pill", "VRT", 3, "value", "pillVariant"], ["name", "check", 3, "size"], ["aria-hidden", "true", 1, "comp-status-ring"], ["aria-hidden", "true", 1, "comp-status-dot"], [1, "comp-status-label"], [1, "comp-tag"]], template: function PrismComponentHeadComponent_Template(rf, ctx) { if (rf & 1) {
239
+ i0.ɵɵconditionalCreate(0, PrismComponentHeadComponent_Conditional_0_Template, 22, 13, "section", 0);
212
240
  } if (rf & 2) {
213
241
  let tmp_0_0;
214
242
  i0.ɵɵconditional((tmp_0_0 = ctx.comp()) ? 0 : -1, tmp_0_0);
215
- } }, dependencies: [PrismIconComponent, PrismStatComponent], styles: ["[_nghost-%COMP%] { display: block; flex-shrink: 0; }\n\n .comp-head[_ngcontent-%COMP%] {\n padding: 12px 28px;\n background: var(--prism-bg);\n border-bottom: 1px solid var(--prism-border);\n position: relative;\n }\n .comp-head[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 6px;\n background: linear-gradient(180deg, var(--prism-primary-from) 0%, var(--prism-accent) 50%, var(--prism-primary-to) 100%);\n }\n\n .comp-head-top[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n }\n\n .comp-crumb[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--fs-sm);\n color: var(--prism-text-ghost);\n margin-bottom: 6px;\n font-weight: 500;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n }\n .comp-crumb[_ngcontent-%COMP%] prism-icon[_ngcontent-%COMP%] { opacity: 0.6; }\n\n .comp-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--fs-2xl);\n font-weight: 700;\n letter-spacing: -0.02em;\n color: var(--prism-text);\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .comp-selector[_ngcontent-%COMP%] {\n font-family: var(--font-mono);\n font-size: 12px;\n color: var(--prism-primary);\n padding: 3px 8px;\n border-radius: var(--radius-sm);\n background: color-mix(in srgb, var(--prism-primary) 10%, transparent);\n border: 1px solid color-mix(in srgb, var(--prism-primary) 20%, transparent);\n font-weight: 500;\n }\n\n .comp-status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n height: 24px;\n padding: 0 10px 0 8px;\n border-radius: 5px;\n font-size: 11.5px;\n font-weight: 600;\n letter-spacing: 0.02em;\n border: 1px solid;\n background: transparent;\n }\n .comp-status-label[_ngcontent-%COMP%] { line-height: 1; }\n .comp-status-dot[_ngcontent-%COMP%] {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: currentColor;\n }\n .comp-status-ring[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n border: 1.5px solid currentColor;\n background: transparent;\n box-sizing: border-box;\n }\n .comp-status[_ngcontent-%COMP%] prism-icon[_ngcontent-%COMP%] { display: inline-flex; }\n\n .comp-status--stable[_ngcontent-%COMP%] {\n color: var(--prism-success);\n background: color-mix(in srgb, var(--prism-success) 10%, transparent);\n border-color: color-mix(in srgb, var(--prism-success) 35%, transparent);\n }\n .comp-status--beta[_ngcontent-%COMP%] {\n color: #60a5fa;\n background: color-mix(in srgb, #60a5fa 10%, transparent);\n border-color: color-mix(in srgb, #60a5fa 35%, transparent);\n }\n .comp-status--wip[_ngcontent-%COMP%] {\n color: var(--prism-warn);\n background: color-mix(in srgb, var(--prism-warn) 10%, transparent);\n border-color: color-mix(in srgb, var(--prism-warn) 35%, transparent);\n }\n .comp-status--deprecated[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n background: var(--prism-input-bg);\n border-color: var(--prism-border-strong);\n }\n\n .comp-desc[_ngcontent-%COMP%] {\n margin: 6px 0 0;\n font-size: var(--fs-lg);\n color: var(--prism-text-2);\n max-width: 72ch;\n line-height: 1.55;\n }\n\n .comp-tags[_ngcontent-%COMP%] {\n margin-top: 10px;\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n }\n .comp-tag[_ngcontent-%COMP%] {\n padding: 2px 8px;\n font-size: 11px;\n font-weight: 500;\n border-radius: var(--radius-xs);\n background: color-mix(in srgb, var(--prism-primary) 12%, transparent);\n color: var(--prism-primary);\n border: 1px solid color-mix(in srgb, var(--prism-primary) 20%, transparent);\n }\n\n .comp-head-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 18px;\n flex-shrink: 0;\n }"] });
243
+ } }, dependencies: [PrismIconComponent, PrismStatComponent], styles: ["[_nghost-%COMP%] { display: block; flex-shrink: 0; }\n\n .comp-head[_ngcontent-%COMP%] {\n padding: 12px 28px;\n background: var(--%NS%prism-bg);\n border-bottom: 1px solid var(--%NS%prism-border);\n position: relative;\n }\n .comp-head[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 6px;\n background: linear-gradient(180deg, var(--%NS%prism-primary-from) 0%, var(--%NS%prism-accent) 50%, var(--%NS%prism-primary-to) 100%);\n }\n\n .comp-head-top[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n }\n\n .comp-crumb[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--%NS%fs-sm);\n color: var(--%NS%prism-text-ghost);\n margin-bottom: 6px;\n font-weight: 500;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n }\n .comp-crumb[_ngcontent-%COMP%] prism-icon[_ngcontent-%COMP%] { opacity: 0.6; }\n\n .comp-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--%NS%fs-2xl);\n font-weight: 700;\n letter-spacing: -0.02em;\n color: var(--%NS%prism-text);\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .comp-selector[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: 12px;\n color: var(--%NS%prism-primary);\n padding: 3px 8px;\n border-radius: var(--%NS%radius-sm);\n background: color-mix(in srgb, var(--%NS%prism-primary) 10%, transparent);\n border: 1px solid color-mix(in srgb, var(--%NS%prism-primary) 20%, transparent);\n font-weight: 500;\n }\n\n .comp-status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n height: 24px;\n padding: 0 10px 0 8px;\n border-radius: 5px;\n font-size: 11.5px;\n font-weight: 600;\n letter-spacing: 0.02em;\n border: 1px solid;\n background: transparent;\n }\n .comp-status-label[_ngcontent-%COMP%] { line-height: 1; }\n .comp-status-dot[_ngcontent-%COMP%] {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: currentColor;\n }\n .comp-status-ring[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n border: 1.5px solid currentColor;\n background: transparent;\n box-sizing: border-box;\n }\n .comp-status[_ngcontent-%COMP%] prism-icon[_ngcontent-%COMP%] { display: inline-flex; }\n\n .comp-status--stable[_ngcontent-%COMP%] {\n color: var(--%NS%prism-success);\n background: color-mix(in srgb, var(--%NS%prism-success) 10%, transparent);\n border-color: color-mix(in srgb, var(--%NS%prism-success) 35%, transparent);\n }\n .comp-status--beta[_ngcontent-%COMP%] {\n color: #60a5fa;\n background: color-mix(in srgb, #60a5fa 10%, transparent);\n border-color: color-mix(in srgb, #60a5fa 35%, transparent);\n }\n .comp-status--wip[_ngcontent-%COMP%] {\n color: var(--%NS%prism-warn);\n background: color-mix(in srgb, var(--%NS%prism-warn) 10%, transparent);\n border-color: color-mix(in srgb, var(--%NS%prism-warn) 35%, transparent);\n }\n .comp-status--deprecated[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n background: var(--%NS%prism-input-bg);\n border-color: var(--%NS%prism-border-strong);\n }\n\n .comp-desc[_ngcontent-%COMP%] {\n margin: 6px 0 0;\n font-size: var(--%NS%fs-lg);\n color: var(--%NS%prism-text-2);\n max-width: 72ch;\n line-height: 1.55;\n }\n\n .comp-tags[_ngcontent-%COMP%] {\n margin-top: 10px;\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n }\n .comp-tag[_ngcontent-%COMP%] {\n padding: 2px 8px;\n font-size: 11px;\n font-weight: 500;\n border-radius: var(--%NS%radius-xs);\n background: color-mix(in srgb, var(--%NS%prism-primary) 12%, transparent);\n color: var(--%NS%prism-primary);\n border: 1px solid color-mix(in srgb, var(--%NS%prism-primary) 20%, transparent);\n }\n\n .comp-head-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 18px;\n flex-shrink: 0;\n }"] });
216
244
  }
217
245
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismComponentHeadComponent, [{
218
246
  type: Component,
@@ -276,6 +304,13 @@ export class PrismComponentHeadComponent {
276
304
  pill="A11y"
277
305
  [pillVariant]="a11yScore()! >= 90 ? 'ok' : 'warn'"
278
306
  />
307
+ } @if (vrtStat(); as vrt) {
308
+ <prism-stat
309
+ [value]="vrt.value"
310
+ label="VRT Diff"
311
+ pill="VRT"
312
+ [pillVariant]="vrt.variant"
313
+ />
279
314
  }
280
315
  </div>
281
316
  </div>
@@ -283,4 +318,4 @@ export class PrismComponentHeadComponent {
283
318
  }
284
319
  `, styles: ["\n :host { display: block; flex-shrink: 0; }\n\n .comp-head {\n padding: 12px 28px;\n background: var(--prism-bg);\n border-bottom: 1px solid var(--prism-border);\n position: relative;\n }\n .comp-head::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 6px;\n background: linear-gradient(180deg, var(--prism-primary-from) 0%, var(--prism-accent) 50%, var(--prism-primary-to) 100%);\n }\n\n .comp-head-top {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n }\n\n .comp-crumb {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--fs-sm);\n color: var(--prism-text-ghost);\n margin-bottom: 6px;\n font-weight: 500;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n }\n .comp-crumb prism-icon { opacity: 0.6; }\n\n .comp-title {\n margin: 0;\n font-size: var(--fs-2xl);\n font-weight: 700;\n letter-spacing: -0.02em;\n color: var(--prism-text);\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .comp-selector {\n font-family: var(--font-mono);\n font-size: 12px;\n color: var(--prism-primary);\n padding: 3px 8px;\n border-radius: var(--radius-sm);\n background: color-mix(in srgb, var(--prism-primary) 10%, transparent);\n border: 1px solid color-mix(in srgb, var(--prism-primary) 20%, transparent);\n font-weight: 500;\n }\n\n .comp-status {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n height: 24px;\n padding: 0 10px 0 8px;\n border-radius: 5px;\n font-size: 11.5px;\n font-weight: 600;\n letter-spacing: 0.02em;\n border: 1px solid;\n background: transparent;\n }\n .comp-status-label { line-height: 1; }\n .comp-status-dot {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: currentColor;\n }\n .comp-status-ring {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n border: 1.5px solid currentColor;\n background: transparent;\n box-sizing: border-box;\n }\n .comp-status prism-icon { display: inline-flex; }\n\n .comp-status--stable {\n color: var(--prism-success);\n background: color-mix(in srgb, var(--prism-success) 10%, transparent);\n border-color: color-mix(in srgb, var(--prism-success) 35%, transparent);\n }\n .comp-status--beta {\n color: #60a5fa;\n background: color-mix(in srgb, #60a5fa 10%, transparent);\n border-color: color-mix(in srgb, #60a5fa 35%, transparent);\n }\n .comp-status--wip {\n color: var(--prism-warn);\n background: color-mix(in srgb, var(--prism-warn) 10%, transparent);\n border-color: color-mix(in srgb, var(--prism-warn) 35%, transparent);\n }\n .comp-status--deprecated {\n color: var(--prism-text-muted);\n background: var(--prism-input-bg);\n border-color: var(--prism-border-strong);\n }\n\n .comp-desc {\n margin: 6px 0 0;\n font-size: var(--fs-lg);\n color: var(--prism-text-2);\n max-width: 72ch;\n line-height: 1.55;\n }\n\n .comp-tags {\n margin-top: 10px;\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n }\n .comp-tag {\n padding: 2px 8px;\n font-size: 11px;\n font-weight: 500;\n border-radius: var(--radius-xs);\n background: color-mix(in srgb, var(--prism-primary) 12%, transparent);\n color: var(--prism-primary);\n border: 1px solid color-mix(in srgb, var(--prism-primary) 20%, transparent);\n }\n\n .comp-head-stats {\n display: flex;\n gap: 18px;\n flex-shrink: 0;\n }\n "] }]
285
320
  }], null, null); })();
286
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismComponentHeadComponent, { className: "PrismComponentHeadComponent", filePath: "app/component-head/prism-component-head.component.ts", lineNumber: 251 }); })();
321
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismComponentHeadComponent, { className: "PrismComponentHeadComponent", filePath: "app/component-head/prism-component-head.component.ts", lineNumber: 258 }); })();
@@ -3,7 +3,7 @@ export declare class PrismStatComponent {
3
3
  readonly value: import("@angular/core").InputSignal<string | number>;
4
4
  readonly label: import("@angular/core").InputSignal<string>;
5
5
  readonly pill: import("@angular/core").InputSignal<string | undefined>;
6
- readonly pillVariant: import("@angular/core").InputSignal<"ok" | "warn">;
6
+ readonly pillVariant: import("@angular/core").InputSignal<"ok" | "warn" | "danger">;
7
7
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismStatComponent, never>;
8
8
  static ɵcmp: i0.ɵɵComponentDeclaration<PrismStatComponent, "prism-stat", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "pill": { "alias": "pill"; "required": false; "isSignal": true; }; "pillVariant": { "alias": "pillVariant"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prism-stat.component.d.ts","sourceRoot":"","sources":["../../../src/app/component-head/prism-stat.component.ts"],"names":[],"mappings":";AAEA,qBAwDa,kBAAkB;IAC7B,QAAQ,CAAC,KAAK,uDAAqC;IACnD,QAAQ,CAAC,KAAK,8CAA4B;IAC1C,QAAQ,CAAC,IAAI,0DAAmB;IAChC,QAAQ,CAAC,WAAW,qDAA8B;yCAJvC,kBAAkB;2CAAlB,kBAAkB;CAK9B"}
1
+ {"version":3,"file":"prism-stat.component.d.ts","sourceRoot":"","sources":["../../../src/app/component-head/prism-stat.component.ts"],"names":[],"mappings":";AAEA,qBA+Da,kBAAkB;IAC7B,QAAQ,CAAC,KAAK,uDAAqC;IACnD,QAAQ,CAAC,KAAK,8CAA4B;IAC1C,QAAQ,CAAC,IAAI,0DAAmB;IAChC,QAAQ,CAAC,WAAW,gEAAyC;yCAJlD,kBAAkB;2CAAlB,kBAAkB;CAK9B"}
@@ -6,7 +6,7 @@ function PrismStatComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
6
6
  i0.ɵɵdomElementEnd();
7
7
  } if (rf & 2) {
8
8
  const ctx_r0 = i0.ɵɵnextContext();
9
- i0.ɵɵclassProp("warn", ctx_r0.pillVariant() === "warn");
9
+ i0.ɵɵclassProp("warn", ctx_r0.pillVariant() === "warn")("danger", ctx_r0.pillVariant() === "danger");
10
10
  i0.ɵɵadvance();
11
11
  i0.ɵɵtextInterpolate(ctx_r0.pill());
12
12
  } }
@@ -20,10 +20,10 @@ export class PrismStatComponent {
20
20
  pillVariant = input('ok', /* @ts-ignore */
21
21
  ...(ngDevMode ? [{ debugName: "pillVariant" }] : /* istanbul ignore next */ []));
22
22
  static ɵfac = function PrismStatComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PrismStatComponent)(); };
23
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismStatComponent, selectors: [["prism-stat"]], inputs: { value: [1, "value"], label: [1, "label"], pill: [1, "pill"], pillVariant: [1, "pillVariant"] }, decls: 6, vars: 3, consts: [[1, "stat"], [1, "stat-val"], [1, "pill", 3, "warn"], [1, "stat-lbl"], [1, "pill"]], template: function PrismStatComponent_Template(rf, ctx) { if (rf & 1) {
23
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismStatComponent, selectors: [["prism-stat"]], inputs: { value: [1, "value"], label: [1, "label"], pill: [1, "pill"], pillVariant: [1, "pillVariant"] }, decls: 6, vars: 3, consts: [[1, "stat"], [1, "stat-val"], [1, "pill", 3, "warn", "danger"], [1, "stat-lbl"], [1, "pill"]], template: function PrismStatComponent_Template(rf, ctx) { if (rf & 1) {
24
24
  i0.ɵɵdomElementStart(0, "div", 0)(1, "div", 1);
25
25
  i0.ɵɵtext(2);
26
- i0.ɵɵconditionalCreate(3, PrismStatComponent_Conditional_3_Template, 2, 3, "span", 2);
26
+ i0.ɵɵconditionalCreate(3, PrismStatComponent_Conditional_3_Template, 2, 5, "span", 2);
27
27
  i0.ɵɵdomElementEnd();
28
28
  i0.ɵɵdomElementStart(4, "div", 3);
29
29
  i0.ɵɵtext(5);
@@ -35,7 +35,7 @@ export class PrismStatComponent {
35
35
  i0.ɵɵconditional(ctx.pill() ? 3 : -1);
36
36
  i0.ɵɵadvance(2);
37
37
  i0.ɵɵtextInterpolate(ctx.label());
38
- } }, styles: [".stat[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 2px;\n min-width: 64px;\n }\n .stat-val[_ngcontent-%COMP%] {\n font-family: var(--font-mono);\n font-size: var(--fs-xl);\n font-weight: 600;\n color: var(--prism-text);\n display: flex;\n align-items: center;\n gap: 5px;\n }\n .pill[_ngcontent-%COMP%] {\n padding: 0 5px;\n font-size: 9.5px;\n border-radius: 3px;\n background: color-mix(in srgb, var(--prism-success) 15%, transparent);\n color: var(--prism-success);\n font-weight: 700;\n letter-spacing: 0.04em;\n }\n .pill.warn[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--prism-warn) 15%, transparent);\n color: var(--prism-warn);\n }\n .stat-lbl[_ngcontent-%COMP%] {\n font-size: var(--fs-xs);\n color: var(--prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n font-weight: 600;\n }"] });
38
+ } }, styles: [".stat[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 2px;\n min-width: 64px;\n }\n .stat-val[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-xl);\n font-weight: 600;\n color: var(--%NS%prism-text);\n display: flex;\n align-items: center;\n gap: 5px;\n }\n .pill[_ngcontent-%COMP%] {\n padding: 0 5px;\n font-size: 9.5px;\n border-radius: 3px;\n background: color-mix(in srgb, var(--%NS%prism-success) 15%, transparent);\n color: var(--%NS%prism-success);\n font-weight: 700;\n letter-spacing: 0.04em;\n }\n .pill.warn[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--%NS%prism-warn) 15%, transparent);\n color: var(--%NS%prism-warn);\n }\n .pill.danger[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--%NS%prism-danger) 15%, transparent);\n color: var(--%NS%prism-danger);\n }\n .stat-lbl[_ngcontent-%COMP%] {\n font-size: var(--%NS%fs-xs);\n color: var(--%NS%prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n font-weight: 600;\n }"] });
39
39
  }
40
40
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismStatComponent, [{
41
41
  type: Component,
@@ -44,13 +44,16 @@ export class PrismStatComponent {
44
44
  <div class="stat-val">
45
45
  {{ value() }}
46
46
  @if (pill()) {
47
- <span class="pill" [class.warn]="pillVariant() === 'warn'">{{
48
- pill()
49
- }}</span>
47
+ <span
48
+ class="pill"
49
+ [class.warn]="pillVariant() === 'warn'"
50
+ [class.danger]="pillVariant() === 'danger'"
51
+ >{{ pill() }}</span
52
+ >
50
53
  }
51
54
  </div>
52
55
  <div class="stat-lbl">{{ label() }}</div>
53
56
  </div>
54
- `, styles: ["\n .stat {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 2px;\n min-width: 64px;\n }\n .stat-val {\n font-family: var(--font-mono);\n font-size: var(--fs-xl);\n font-weight: 600;\n color: var(--prism-text);\n display: flex;\n align-items: center;\n gap: 5px;\n }\n .pill {\n padding: 0 5px;\n font-size: 9.5px;\n border-radius: 3px;\n background: color-mix(in srgb, var(--prism-success) 15%, transparent);\n color: var(--prism-success);\n font-weight: 700;\n letter-spacing: 0.04em;\n }\n .pill.warn {\n background: color-mix(in srgb, var(--prism-warn) 15%, transparent);\n color: var(--prism-warn);\n }\n .stat-lbl {\n font-size: var(--fs-xs);\n color: var(--prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n font-weight: 600;\n }\n "] }]
57
+ `, styles: ["\n .stat {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 2px;\n min-width: 64px;\n }\n .stat-val {\n font-family: var(--font-mono);\n font-size: var(--fs-xl);\n font-weight: 600;\n color: var(--prism-text);\n display: flex;\n align-items: center;\n gap: 5px;\n }\n .pill {\n padding: 0 5px;\n font-size: 9.5px;\n border-radius: 3px;\n background: color-mix(in srgb, var(--prism-success) 15%, transparent);\n color: var(--prism-success);\n font-weight: 700;\n letter-spacing: 0.04em;\n }\n .pill.warn {\n background: color-mix(in srgb, var(--prism-warn) 15%, transparent);\n color: var(--prism-warn);\n }\n .pill.danger {\n background: color-mix(in srgb, var(--prism-danger) 15%, transparent);\n color: var(--prism-danger);\n }\n .stat-lbl {\n font-size: var(--fs-xs);\n color: var(--prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n font-weight: 600;\n }\n "] }]
55
58
  }], null, { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], pill: [{ type: i0.Input, args: [{ isSignal: true, alias: "pill", required: false }] }], pillVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "pillVariant", required: false }] }] }); })();
56
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismStatComponent, { className: "PrismStatComponent", filePath: "app/component-head/prism-stat.component.ts", lineNumber: 59 }); })();
59
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismStatComponent, { className: "PrismStatComponent", filePath: "app/component-head/prism-stat.component.ts", lineNumber: 66 }); })();
@@ -52,7 +52,7 @@ export class PrismComponentHeaderComponent {
52
52
  } if (rf & 2) {
53
53
  let tmp_0_0;
54
54
  i0.ɵɵconditional((tmp_0_0 = ctx.navigationService.activeComponent()) ? 0 : -1, tmp_0_0);
55
- } }, styles: [".prism-component-header[_ngcontent-%COMP%] {\n padding: 16px 20px;\n border-bottom: 1px solid var(--prism-border);\n border-left: 3px solid;\n border-image: linear-gradient(180deg, var(--prism-primary-from), var(--prism-primary-to)) 1;\n background: var(--prism-bg-surface);\n }\n\n .prism-component-header__title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n letter-spacing: -0.01em;\n color: var(--prism-text);\n font-family: var(--prism-font-sans);\n }\n\n .prism-component-header__description[_ngcontent-%COMP%] {\n margin: 4px 0 0;\n font-size: 13px;\n line-height: 1.6;\n color: var(--prism-text-2);\n font-family: var(--prism-font-sans);\n }\n\n .prism-component-header__tags[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n margin-top: 10px;\n flex-wrap: wrap;\n }\n\n .prism-component-header__tag[_ngcontent-%COMP%] {\n padding: 2px 8px;\n font-size: 11px;\n font-weight: 500;\n border-radius: var(--prism-radius-xs);\n background: color-mix(in srgb, var(--prism-primary) 12%, transparent);\n color: var(--prism-primary);\n border: 1px solid color-mix(in srgb, var(--prism-primary) 20%, transparent);\n letter-spacing: 0.02em;\n font-family: var(--prism-font-sans);\n }"] });
55
+ } }, styles: [".prism-component-header[_ngcontent-%COMP%] {\n padding: 16px 20px;\n border-bottom: 1px solid var(--%NS%prism-border);\n border-left: 3px solid;\n border-image: linear-gradient(180deg, var(--%NS%prism-primary-from), var(--%NS%prism-primary-to)) 1;\n background: var(--%NS%prism-bg-surface);\n }\n\n .prism-component-header__title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n letter-spacing: -0.01em;\n color: var(--%NS%prism-text);\n font-family: var(--%NS%prism-font-sans);\n }\n\n .prism-component-header__description[_ngcontent-%COMP%] {\n margin: 4px 0 0;\n font-size: 13px;\n line-height: 1.6;\n color: var(--%NS%prism-text-2);\n font-family: var(--%NS%prism-font-sans);\n }\n\n .prism-component-header__tags[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n margin-top: 10px;\n flex-wrap: wrap;\n }\n\n .prism-component-header__tag[_ngcontent-%COMP%] {\n padding: 2px 8px;\n font-size: 11px;\n font-weight: 500;\n border-radius: var(--%NS%prism-radius-xs);\n background: color-mix(in srgb, var(--%NS%prism-primary) 12%, transparent);\n color: var(--%NS%prism-primary);\n border: 1px solid color-mix(in srgb, var(--%NS%prism-primary) 20%, transparent);\n letter-spacing: 0.02em;\n font-family: var(--%NS%prism-font-sans);\n }"] });
56
56
  }
57
57
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismComponentHeaderComponent, [{
58
58
  type: Component,
@@ -16,7 +16,7 @@ export class BooleanControlComponent {
16
16
  } if (rf & 2) {
17
17
  i0.ɵɵclassProp("on", ctx.value());
18
18
  i0.ɵɵattribute("aria-checked", ctx.value());
19
- } }, styles: [".ctl-toggle[_ngcontent-%COMP%] {\n position: relative;\n width: 34px;\n height: 18px;\n border-radius: 9px;\n background: var(--prism-input-bg);\n border: 1px solid var(--prism-border);\n transition: all var(--dur-fast);\n cursor: pointer;\n flex-shrink: 0;\n padding: 0;\n }\n .ctl-toggle[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n left: 2px;\n top: 2px;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background: var(--prism-text-muted);\n transition: transform var(--dur-fast), background var(--dur-fast);\n }\n .ctl-toggle.on[_ngcontent-%COMP%] {\n background: var(--prism-primary);\n border-color: var(--prism-primary);\n }\n .ctl-toggle.on[_ngcontent-%COMP%]::after {\n transform: translateX(16px);\n background: white;\n }"] });
19
+ } }, styles: [".ctl-toggle[_ngcontent-%COMP%] {\n position: relative;\n width: 34px;\n height: 18px;\n border-radius: 9px;\n background: var(--%NS%prism-input-bg);\n border: 1px solid var(--%NS%prism-border);\n transition: all var(--%NS%dur-fast);\n cursor: pointer;\n flex-shrink: 0;\n padding: 0;\n }\n .ctl-toggle[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n left: 2px;\n top: 2px;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background: var(--%NS%prism-text-muted);\n transition: transform var(--%NS%dur-fast), background var(--%NS%dur-fast);\n }\n .ctl-toggle.on[_ngcontent-%COMP%] {\n background: var(--%NS%prism-primary);\n border-color: var(--%NS%prism-primary);\n }\n .ctl-toggle.on[_ngcontent-%COMP%]::after {\n transform: translateX(16px);\n background: white;\n }"] });
20
20
  }
21
21
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BooleanControlComponent, [{
22
22
  type: Component,
@@ -101,7 +101,7 @@ export class JsonControlComponent {
101
101
  i0.ɵɵdomProperty("value", ctx.displayText());
102
102
  i0.ɵɵadvance(2);
103
103
  i0.ɵɵconditional(ctx.parseError() ? 7 : -1);
104
- } }, styles: [".json-editor[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n\n .json-overlay[_ngcontent-%COMP%] {\n position: relative;\n border: 1px solid var(--prism-border);\n border-radius: var(--radius-sm);\n overflow: hidden;\n transition: border-color var(--dur-fast);\n }\n .json-overlay[_ngcontent-%COMP%]:focus-within {\n border-color: var(--prism-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--prism-primary) 30%, transparent);\n }\n\n .json-pre[_ngcontent-%COMP%], .json-input[_ngcontent-%COMP%] {\n margin: 0;\n padding: 4px 8px;\n font-family: var(--font-mono);\n font-size: 12px;\n line-height: 1.4;\n white-space: pre-wrap;\n word-wrap: break-word;\n tab-size: 2;\n }\n\n .json-pre[_ngcontent-%COMP%] {\n min-height: 56px;\n pointer-events: none;\n }\n .json-pre[_ngcontent-%COMP%] code[_ngcontent-%COMP%] { font-family: inherit; }\n\n [_nghost-%COMP%] .jh-key { color: var(--prism-code-attr); }\n [_nghost-%COMP%] .jh-string { color: var(--prism-code-str); }\n [_nghost-%COMP%] .jh-number { color: var(--prism-warn); }\n [_nghost-%COMP%] .jh-bool { color: var(--prism-primary); }\n [_nghost-%COMP%] .jh-null { color: var(--prism-text-ghost); }\n\n .json-input[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n background: transparent;\n color: transparent;\n caret-color: var(--prism-text);\n border: none;\n resize: none;\n overflow: auto;\n box-sizing: border-box;\n }\n .json-input[_ngcontent-%COMP%]:focus { outline: none; }\n .json-input[_ngcontent-%COMP%]::selection { background: rgba(99, 102, 241, 0.3); }\n\n .json-error[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--prism-danger);\n display: block;\n margin-top: 2px;\n }"] });
104
+ } }, styles: [".json-editor[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n\n .json-overlay[_ngcontent-%COMP%] {\n position: relative;\n border: 1px solid var(--%NS%prism-border);\n border-radius: var(--%NS%radius-sm);\n overflow: hidden;\n transition: border-color var(--%NS%dur-fast);\n }\n .json-overlay[_ngcontent-%COMP%]:focus-within {\n border-color: var(--%NS%prism-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--%NS%prism-primary) 30%, transparent);\n }\n\n .json-pre[_ngcontent-%COMP%], .json-input[_ngcontent-%COMP%] {\n margin: 0;\n padding: 4px 8px;\n font-family: var(--%NS%font-mono);\n font-size: 12px;\n line-height: 1.4;\n white-space: pre-wrap;\n word-wrap: break-word;\n tab-size: 2;\n }\n\n .json-pre[_ngcontent-%COMP%] {\n min-height: 56px;\n pointer-events: none;\n }\n .json-pre[_ngcontent-%COMP%] code[_ngcontent-%COMP%] { font-family: inherit; }\n\n [_nghost-%COMP%] .jh-key { color: var(--%NS%prism-code-attr); }\n [_nghost-%COMP%] .jh-string { color: var(--%NS%prism-code-str); }\n [_nghost-%COMP%] .jh-number { color: var(--%NS%prism-warn); }\n [_nghost-%COMP%] .jh-bool { color: var(--%NS%prism-primary); }\n [_nghost-%COMP%] .jh-null { color: var(--%NS%prism-text-ghost); }\n\n .json-input[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n background: transparent;\n color: transparent;\n caret-color: var(--%NS%prism-text);\n border: none;\n resize: none;\n overflow: auto;\n box-sizing: border-box;\n }\n .json-input[_ngcontent-%COMP%]:focus { outline: none; }\n .json-input[_ngcontent-%COMP%]::selection { background: rgba(99, 102, 241, 0.3); }\n\n .json-error[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--%NS%prism-danger);\n display: block;\n margin-top: 2px;\n }"] });
105
105
  }
106
106
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(JsonControlComponent, [{
107
107
  type: Component,
@@ -15,7 +15,7 @@ export class NumberControlComponent {
15
15
  i0.ɵɵdomElementEnd();
16
16
  } if (rf & 2) {
17
17
  i0.ɵɵdomProperty("value", ctx.value());
18
- } }, styles: [".ctl-number[_ngcontent-%COMP%] {\n height: 30px;\n padding: 0 10px;\n background: var(--prism-input-bg);\n border: 1px solid var(--prism-border);\n border-radius: var(--radius-sm);\n color: var(--prism-text);\n font-size: 13px;\n font-family: var(--font-sans);\n flex: 1;\n min-width: 0;\n outline: none;\n transition: border-color var(--dur-fast), box-shadow var(--dur-fast);\n }\n .ctl-number[_ngcontent-%COMP%]:focus {\n border-color: var(--prism-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--prism-primary) 30%, transparent);\n }"] });
18
+ } }, styles: [".ctl-number[_ngcontent-%COMP%] {\n height: 30px;\n padding: 0 10px;\n background: var(--%NS%prism-input-bg);\n border: 1px solid var(--%NS%prism-border);\n border-radius: var(--%NS%radius-sm);\n color: var(--%NS%prism-text);\n font-size: 13px;\n font-family: var(--%NS%font-sans);\n flex: 1;\n min-width: 0;\n outline: none;\n transition: border-color var(--%NS%dur-fast), box-shadow var(--%NS%dur-fast);\n }\n .ctl-number[_ngcontent-%COMP%]:focus {\n border-color: var(--%NS%prism-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--%NS%prism-primary) 30%, transparent);\n }"] });
19
19
  }
20
20
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NumberControlComponent, [{
21
21
  type: Component,