@ng-prism/core 22.3.0 → 22.4.1

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 (166) hide show
  1. package/README.md +13 -13
  2. package/dist/app/canvas/canvas-bg.styles.d.ts +7 -12
  3. package/dist/app/canvas/canvas-bg.styles.d.ts.map +1 -1
  4. package/dist/app/canvas/canvas-bg.styles.js +35 -37
  5. package/dist/app/canvas/measure-geometry.d.ts +140 -0
  6. package/dist/app/canvas/measure-geometry.d.ts.map +1 -0
  7. package/dist/app/canvas/measure-geometry.js +217 -0
  8. package/dist/app/canvas/measure-keyboard.d.ts +20 -0
  9. package/dist/app/canvas/measure-keyboard.d.ts.map +1 -0
  10. package/dist/app/canvas/measure-keyboard.js +34 -0
  11. package/dist/app/canvas/measure-quad.d.ts +114 -0
  12. package/dist/app/canvas/measure-quad.d.ts.map +1 -0
  13. package/dist/app/canvas/measure-quad.js +173 -0
  14. package/dist/app/canvas/measure-snap.d.ts +35 -0
  15. package/dist/app/canvas/measure-snap.d.ts.map +1 -0
  16. package/dist/app/canvas/measure-snap.js +63 -0
  17. package/dist/app/canvas/prism-canvas-measure.component.d.ts +142 -0
  18. package/dist/app/canvas/prism-canvas-measure.component.d.ts.map +1 -0
  19. package/dist/app/canvas/prism-canvas-measure.component.js +554 -0
  20. package/dist/app/canvas/prism-canvas-pin-row.component.d.ts +23 -0
  21. package/dist/app/canvas/prism-canvas-pin-row.component.d.ts.map +1 -0
  22. package/dist/app/canvas/prism-canvas-pin-row.component.js +64 -0
  23. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts +22 -39
  24. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts.map +1 -1
  25. package/dist/app/canvas/prism-canvas-toolbar.component.js +61 -69
  26. package/dist/app/canvas/prism-template-popover.component.js +1 -1
  27. package/dist/app/canvas/viewport-snap.d.ts +1 -1
  28. package/dist/app/canvas/viewport-snap.js +1 -1
  29. package/dist/app/component-head/head-metrics.d.ts +2 -2
  30. package/dist/app/component-head/head-metrics.js +1 -1
  31. package/dist/app/component-head/prism-component-head.component.d.ts +2 -2
  32. package/dist/app/component-head/prism-component-head.component.d.ts.map +1 -1
  33. package/dist/app/component-head/prism-component-head.component.js +11 -18
  34. package/dist/app/component-head/prism-head-gauge.component.js +1 -1
  35. package/dist/app/component-head/prism-head-info.component.d.ts +1 -1
  36. package/dist/app/component-head/prism-head-info.component.js +2 -2
  37. package/dist/app/component-head/prism-stat.component.d.ts +1 -1
  38. package/dist/app/component-head/prism-stat.component.js +2 -2
  39. package/dist/app/directives/prism-resizer.directive.d.ts +1 -1
  40. package/dist/app/directives/prism-resizer.directive.js +2 -2
  41. package/dist/app/directives/resize-value.d.ts +2 -2
  42. package/dist/app/directives/resize-value.js +2 -2
  43. package/dist/app/discovery-manifest.d.ts +2 -2
  44. package/dist/app/discovery-manifest.d.ts.map +1 -1
  45. package/dist/app/discovery-manifest.js +11 -15
  46. package/dist/app/header/prism-header.component.js +1 -1
  47. package/dist/app/icons/icon-registry.d.ts +2 -2
  48. package/dist/app/icons/icon-registry.d.ts.map +1 -1
  49. package/dist/app/icons/icon-registry.js +3 -2
  50. package/dist/app/icons/prism-icon.component.d.ts +2 -2
  51. package/dist/app/icons/prism-icon.component.js +4 -4
  52. package/dist/app/index.d.ts.map +1 -1
  53. package/dist/app/index.js +14 -21
  54. package/dist/app/overview/overview-visibility.d.ts +1 -1
  55. package/dist/app/overview/overview-visibility.js +1 -1
  56. package/dist/app/overview/prism-overview-cell.component.d.ts +2 -2
  57. package/dist/app/overview/prism-overview-cell.component.d.ts.map +1 -1
  58. package/dist/app/overview/prism-overview-cell.component.js +9 -10
  59. package/dist/app/overview/prism-overview.component.d.ts +2 -2
  60. package/dist/app/overview/prism-overview.component.js +2 -2
  61. package/dist/app/page-renderer/prism-page-renderer.component.js +1 -1
  62. package/dist/app/panels/a11y/a11y-audit.service.js +2 -2
  63. package/dist/app/panels/a11y/a11y-summary.d.ts +3 -4
  64. package/dist/app/panels/a11y/a11y-summary.d.ts.map +1 -1
  65. package/dist/app/panels/a11y/a11y-summary.js +3 -4
  66. package/dist/app/panels/a11y/a11y-thresholds.d.ts +1 -1
  67. package/dist/app/panels/a11y/a11y-thresholds.d.ts.map +1 -1
  68. package/dist/app/panels/a11y/a11y-thresholds.js +1 -1
  69. package/dist/app/panels/a11y/a11y.types.d.ts +1 -1
  70. package/dist/app/panels/a11y/a11y.types.d.ts.map +1 -1
  71. package/dist/app/panels/builtin-navigation-decorations.d.ts +1 -1
  72. package/dist/app/panels/builtin-navigation-decorations.js +1 -1
  73. package/dist/app/panels/controls/non-editable-input-types.js +1 -1
  74. package/dist/app/panels/panel-host/panel-badge.d.ts +1 -1
  75. package/dist/app/provide-prism.js +1 -1
  76. package/dist/app/renderer/known-inputs.d.ts +1 -1
  77. package/dist/app/renderer/known-inputs.js +1 -1
  78. package/dist/app/renderer/overlay-resolver.d.ts +17 -3
  79. package/dist/app/renderer/overlay-resolver.d.ts.map +1 -1
  80. package/dist/app/renderer/overlay-resolver.js +9 -4
  81. package/dist/app/renderer/prism-renderer.component.d.ts +3 -3
  82. package/dist/app/renderer/prism-renderer.component.d.ts.map +1 -1
  83. package/dist/app/renderer/prism-renderer.component.js +25 -16
  84. package/dist/app/renderer/projectable-content.js +3 -3
  85. package/dist/app/services/prism-canvas.service.d.ts +12 -1
  86. package/dist/app/services/prism-canvas.service.d.ts.map +1 -1
  87. package/dist/app/services/prism-canvas.service.js +23 -5
  88. package/dist/app/services/prism-capture.service.d.ts +24 -50
  89. package/dist/app/services/prism-capture.service.d.ts.map +1 -1
  90. package/dist/app/services/prism-capture.service.js +60 -140
  91. package/dist/app/services/prism-measure.service.d.ts +44 -0
  92. package/dist/app/services/prism-measure.service.d.ts.map +1 -0
  93. package/dist/app/services/prism-measure.service.js +91 -0
  94. package/dist/app/services/prism-panel.service.d.ts +2 -2
  95. package/dist/app/services/prism-panel.service.js +2 -2
  96. package/dist/app/services/prism-persistence.service.js +1 -1
  97. package/dist/app/services/prism-renderer.service.js +1 -1
  98. package/dist/app/services/prism-url-state.service.js +1 -1
  99. package/dist/app/services/prism-variant-bg.service.d.ts +10 -24
  100. package/dist/app/services/prism-variant-bg.service.d.ts.map +1 -1
  101. package/dist/app/services/prism-variant-bg.service.js +10 -24
  102. package/dist/app/shared/prism-metric-badge.component.d.ts +9 -15
  103. package/dist/app/shared/prism-metric-badge.component.d.ts.map +1 -1
  104. package/dist/app/shared/prism-metric-badge.component.js +10 -16
  105. package/dist/app/shell/prism-shell.component.d.ts.map +1 -1
  106. package/dist/app/shell/prism-shell.component.js +12 -9
  107. package/dist/app/sidebar/navigation-decorations.d.ts +4 -4
  108. package/dist/app/sidebar/navigation-decorations.js +2 -2
  109. package/dist/app/sidebar/prism-sidebar.component.d.ts +2 -2
  110. package/dist/app/sidebar/prism-sidebar.component.js +3 -3
  111. package/dist/app/theme/prism-default-theme.js +3 -3
  112. package/dist/app/variant-ribbon/spectrum.d.ts +1 -1
  113. package/dist/app/variant-ribbon/spectrum.js +1 -1
  114. package/dist/app/view-tab-bar/next-view-id.d.ts +1 -1
  115. package/dist/app/view-tab-bar/next-view-id.js +1 -1
  116. package/dist/builder/a11y/a11y-report-reader.d.ts +1 -1
  117. package/dist/builder/a11y/a11y-report-reader.js +1 -1
  118. package/dist/builder/manifest/runtime-manifest.generator.js +6 -2
  119. package/dist/builder/plugin-runner/plugin-runner.js +1 -1
  120. package/dist/builder/scanner/ast-utils.d.ts +46 -2
  121. package/dist/builder/scanner/ast-utils.d.ts.map +1 -1
  122. package/dist/builder/scanner/ast-utils.js +337 -31
  123. package/dist/builder/scanner/class-hierarchy.d.ts +33 -0
  124. package/dist/builder/scanner/class-hierarchy.d.ts.map +1 -0
  125. package/dist/builder/scanner/class-hierarchy.js +87 -0
  126. package/dist/builder/scanner/component.scanner.d.ts +7 -1
  127. package/dist/builder/scanner/component.scanner.d.ts.map +1 -1
  128. package/dist/builder/scanner/component.scanner.js +106 -58
  129. package/dist/builder/scanner/input.extractor.d.ts +7 -4
  130. package/dist/builder/scanner/input.extractor.d.ts.map +1 -1
  131. package/dist/builder/scanner/input.extractor.js +153 -55
  132. package/dist/builder/scanner/manifest.generator.js +6 -2
  133. package/dist/builder/scanner/scanner.d.ts +3 -1
  134. package/dist/builder/scanner/scanner.d.ts.map +1 -1
  135. package/dist/builder/scanner/scanner.js +6 -4
  136. package/dist/builder/scanner/showcase-diagnostics.d.ts +25 -0
  137. package/dist/builder/scanner/showcase-diagnostics.d.ts.map +1 -0
  138. package/dist/builder/scanner/showcase-diagnostics.js +96 -0
  139. package/dist/builder/shared/prism-pipeline.d.ts +1 -1
  140. package/dist/builder/shared/prism-pipeline.d.ts.map +1 -1
  141. package/dist/builder/shared/prism-pipeline.js +12 -14
  142. package/dist/builder/watcher/prism-watcher.js +2 -2
  143. package/dist/decorator/showcase.types.d.ts +11 -9
  144. package/dist/decorator/showcase.types.d.ts.map +1 -1
  145. package/dist/index.js +3 -3
  146. package/dist/plugin/define-config.js +1 -1
  147. package/dist/plugin/index.d.ts.map +1 -1
  148. package/dist/plugin/index.js +5 -9
  149. package/dist/plugin/plugin.types.d.ts +30 -13
  150. package/dist/plugin/plugin.types.d.ts.map +1 -1
  151. package/dist/schematics/migrations/v22-0-cache-dir-rename/index.js +2 -2
  152. package/dist/schematics/ng-add/index.js +4 -4
  153. package/dist/shared/canvas-bg.type.d.ts +5 -6
  154. package/dist/shared/canvas-bg.type.d.ts.map +1 -1
  155. package/dist/shared/canvas-bg.type.js +4 -5
  156. package/dist/shared/measure.type.d.ts +52 -0
  157. package/dist/shared/measure.type.d.ts.map +1 -0
  158. package/dist/shared/measure.type.js +21 -0
  159. package/dist/shared/variant-bg.d.ts +20 -31
  160. package/dist/shared/variant-bg.d.ts.map +1 -1
  161. package/dist/shared/variant-bg.js +20 -31
  162. package/dist/shared/viewport.type.d.ts +15 -19
  163. package/dist/shared/viewport.type.d.ts.map +1 -1
  164. package/dist/shared/viewport.type.js +15 -19
  165. package/dist/transformer/showcase-strip.transformer.js +1 -1
  166. package/package.json +5 -5
@@ -55,7 +55,7 @@ const STATUS_BADGES = {
55
55
  },
56
56
  beta: {
57
57
  label: 'Beta',
58
- tooltip: 'Beta — API may change'
58
+ tooltip: 'Beta: API may change'
59
59
  },
60
60
  wip: {
61
61
  label: 'Work in progress',
@@ -63,7 +63,7 @@ const STATUS_BADGES = {
63
63
  },
64
64
  deprecated: {
65
65
  label: 'Deprecated',
66
- tooltip: 'Deprecated / Legacy — do not use in new code'
66
+ tooltip: 'Deprecated / Legacy. Do not use in new code'
67
67
  }
68
68
  };
69
69
  export class PrismComponentHeadComponent {
@@ -97,19 +97,12 @@ export class PrismComponentHeadComponent {
97
97
  }, /* @ts-ignore */
98
98
  ...(ngDevMode ? [{ debugName: "coveragePercent" }] : /* istanbul ignore next */ []));
99
99
  /*
100
- * There is deliberately no bundle metric here.
100
+ * No bundle metric here. Reading `meta.perf.bundle.gzipKb`/`.sizeKb` finds
101
+ * nothing: `@ng-prism/plugin-perf` stores `sourceSize` and `gzipEstimate`
102
+ * (see `perf.types.ts`), so the tile would read `Bundle —` everywhere.
101
103
  *
102
- * The computed that used to produce one read `meta.perf.bundle.gzipKb` and
103
- * `.sizeKb`. `@ng-prism/plugin-perf` writes neither: `bundle-scanner.ts`
104
- * stores `sourceSize` and `gzipEstimate`, and `perf.types.ts` declares only
105
- * those two. So the value was always null, and the old head simply hid the
106
- * tile — a gauge row reading `Bundle —` on every component is noise, not
107
- * information.
108
- *
109
- * Do not re-add the read against the real key names without first settling
110
- * whether `gzipEstimate` is bytes or kilobytes. The old code appended ' kb'
111
- * to whatever it found, and that question belongs to the perf plugin, not
112
- * to the head.
104
+ * Before wiring it to the real keys, settle with the perf plugin whether
105
+ * `gzipEstimate` is bytes or kilobytes.
113
106
  */
114
107
  a11yScore = computed(() => {
115
108
  return this.auditService.scoreResult()?.score ?? null;
@@ -119,8 +112,8 @@ export class PrismComponentHeadComponent {
119
112
  * The visual regression headline, as the plugin already derived it.
120
113
  *
121
114
  * Read whole rather than recomputed: the colour follows the plugin's status
122
- * semantics — red for any changed variant, amber for ones that could not be
123
- * compared — and duplicating that rule here would mean the stat and the
115
+ * semantics (red for any changed variant, amber for ones that could not be
116
+ * compared), and duplicating that rule here would mean the stat and the
124
117
  * plugin's own panel could disagree about the same component.
125
118
  */
126
119
  vrtStat = computed(() => {
@@ -177,10 +170,10 @@ export class PrismComponentHeadComponent {
177
170
  } if (rf & 2) {
178
171
  let tmp_0_0;
179
172
  i0.ɵɵconditional((tmp_0_0 = ctx.comp()) ? 0 : -1, tmp_0_0);
180
- } }, dependencies: [PrismHeadInfoComponent, PrismHeadGaugeComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n flex-shrink: 0;\n}\n\n.comp-head[_ngcontent-%COMP%] {\n display: flex;\n gap: var(--%NS%sp-3);\n align-items: center;\n height: var(--%NS%band-head);\n padding: 0 var(--%NS%sp-5);\n background: var(--%NS%prism-bg);\n border-bottom: 1px solid var(--%NS%prism-border);\n}\n\n\n\n\n\n\n\n\n.comp-crumb[_ngcontent-%COMP%] {\n flex: 0 8 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--%NS%fs-xs);\n color: var(--%NS%prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.06em;\n white-space: nowrap;\n}\n\n.comp-crumb[_ngcontent-%COMP%]::after {\n content: ' /';\n}\n\n.comp-title[_ngcontent-%COMP%] {\n flex: 0 1 auto;\n min-width: 0;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--%NS%fs-xl);\n font-weight: 600;\n color: var(--%NS%prism-text);\n letter-spacing: -0.015em;\n white-space: nowrap;\n}\n\n.comp-spacer[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.comp-status[_ngcontent-%COMP%], \nprism-head-info[_ngcontent-%COMP%], \nprism-head-gauge[_ngcontent-%COMP%], \n.comp-head-end[_ngcontent-%COMP%] {\n flex: none;\n}\n\n\n\n\n.comp-head-end[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n}\n\n.comp-head-end[_ngcontent-%COMP%]:empty {\n display: none;\n}\n\n\n\n\n\n.comp-status[_ngcontent-%COMP%] {\n display: inline-flex;\n gap: var(--%NS%sp-2);\n align-items: center;\n height: 18px;\n padding: 0 var(--%NS%sp-3) 0 var(--%NS%sp-2);\n font-size: var(--%NS%fs-xs);\n font-weight: 600;\n color: var(--%NS%prism-text-muted);\n letter-spacing: 0.03em;\n white-space: nowrap;\n border: 1px solid currentcolor;\n border-radius: var(--%NS%radius-xs);\n}\n\n.comp-status-mark[_ngcontent-%COMP%] {\n width: 6px;\n height: 6px;\n background: currentcolor;\n border-radius: 50%;\n}\n\n.comp-status--stable[_ngcontent-%COMP%] {\n color: var(--%NS%prism-mark-nominal);\n background: color-mix(in srgb, var(--%NS%prism-mark-nominal) 10%, transparent);\n}\n\n.comp-status--beta[_ngcontent-%COMP%], \n.comp-status--wip[_ngcontent-%COMP%] {\n color: var(--%NS%prism-mark-attention);\n background: color-mix(in srgb, var(--%NS%prism-mark-attention) 10%, transparent);\n}\n\n.comp-status--wip[_ngcontent-%COMP%] .comp-status-mark[_ngcontent-%COMP%] {\n box-sizing: border-box;\n width: 7px;\n height: 7px;\n background: transparent;\n border: 1.5px solid currentcolor;\n}\n\n.comp-status--deprecated[_ngcontent-%COMP%] {\n color: var(--%NS%prism-mark-critical);\n background: color-mix(in srgb, var(--%NS%prism-mark-critical) 12%, transparent);\n border-color: color-mix(in srgb, var(--%NS%prism-mark-critical) 55%, transparent);\n}"] });
173
+ } }, dependencies: [PrismHeadInfoComponent, PrismHeadGaugeComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n flex-shrink: 0;\n}\n\n.comp-head[_ngcontent-%COMP%] {\n display: flex;\n gap: var(--%NS%sp-3);\n align-items: center;\n height: var(--%NS%band-head);\n padding: 0 var(--%NS%sp-5);\n background: var(--%NS%prism-bg);\n border-bottom: 1px solid var(--%NS%prism-border);\n}\n\n\n\n\n\n\n\n.comp-crumb[_ngcontent-%COMP%] {\n flex: 0 8 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--%NS%fs-xs);\n color: var(--%NS%prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.06em;\n white-space: nowrap;\n}\n\n.comp-crumb[_ngcontent-%COMP%]::after {\n content: ' /';\n}\n\n.comp-title[_ngcontent-%COMP%] {\n flex: 0 1 auto;\n min-width: 0;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--%NS%fs-xl);\n font-weight: 600;\n color: var(--%NS%prism-text);\n letter-spacing: -0.015em;\n white-space: nowrap;\n}\n\n.comp-spacer[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.comp-status[_ngcontent-%COMP%], \nprism-head-info[_ngcontent-%COMP%], \nprism-head-gauge[_ngcontent-%COMP%], \n.comp-head-end[_ngcontent-%COMP%] {\n flex: none;\n}\n\n\n\n\n.comp-head-end[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n}\n\n.comp-head-end[_ngcontent-%COMP%]:empty {\n display: none;\n}\n\n\n\n\n\n.comp-status[_ngcontent-%COMP%] {\n display: inline-flex;\n gap: var(--%NS%sp-2);\n align-items: center;\n height: 18px;\n padding: 0 var(--%NS%sp-3) 0 var(--%NS%sp-2);\n font-size: var(--%NS%fs-xs);\n font-weight: 600;\n color: var(--%NS%prism-text-muted);\n letter-spacing: 0.03em;\n white-space: nowrap;\n border: 1px solid currentcolor;\n border-radius: var(--%NS%radius-xs);\n}\n\n.comp-status-mark[_ngcontent-%COMP%] {\n width: 6px;\n height: 6px;\n background: currentcolor;\n border-radius: 50%;\n}\n\n.comp-status--stable[_ngcontent-%COMP%] {\n color: var(--%NS%prism-mark-nominal);\n background: color-mix(in srgb, var(--%NS%prism-mark-nominal) 10%, transparent);\n}\n\n.comp-status--beta[_ngcontent-%COMP%], \n.comp-status--wip[_ngcontent-%COMP%] {\n color: var(--%NS%prism-mark-attention);\n background: color-mix(in srgb, var(--%NS%prism-mark-attention) 10%, transparent);\n}\n\n.comp-status--wip[_ngcontent-%COMP%] .comp-status-mark[_ngcontent-%COMP%] {\n box-sizing: border-box;\n width: 7px;\n height: 7px;\n background: transparent;\n border: 1.5px solid currentcolor;\n}\n\n.comp-status--deprecated[_ngcontent-%COMP%] {\n color: var(--%NS%prism-mark-critical);\n background: color-mix(in srgb, var(--%NS%prism-mark-critical) 12%, transparent);\n border-color: color-mix(in srgb, var(--%NS%prism-mark-critical) 55%, transparent);\n}"] });
181
174
  }
182
175
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismComponentHeadComponent, [{
183
176
  type: Component,
184
- args: [{ selector: 'prism-component-head', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismHeadInfoComponent, PrismHeadGaugeComponent], template: "@if (comp(); as c) {\n <section class=\"comp-head\">\n <span class=\"comp-crumb\">{{ category() }}</span>\n <h1 class=\"comp-title\">{{ c.meta.showcaseConfig.title }}</h1>\n\n <prism-head-info\n [selector]=\"c.meta.componentMeta.selector\"\n [description]=\"c.meta.showcaseConfig.description\"\n [tags]=\"c.meta.showcaseConfig.tags ?? []\"\n [variantCount]=\"variantCount()\" />\n\n @if (statusBadge(); as badge) {\n <span\n class=\"comp-status comp-status--{{ status() }}\"\n [attr.title]=\"badge.tooltip\">\n <span\n class=\"comp-status-mark\"\n aria-hidden=\"true\"></span>\n {{ badge.label }}\n </span>\n }\n\n <span class=\"comp-spacer\"></span>\n\n <prism-head-gauge [metrics]=\"metrics()\" />\n <span class=\"comp-head-end\"><ng-content select=\"[headEnd]\" /></span>\n </section>\n}\n", styles: [":host {\n display: block;\n flex-shrink: 0;\n}\n\n.comp-head {\n display: flex;\n gap: var(--sp-3);\n align-items: center;\n height: var(--band-head);\n padding: 0 var(--sp-5);\n background: var(--prism-bg);\n border-bottom: 1px solid var(--prism-border);\n}\n\n/* The text yields, the controls never do. A long category and a long title\n would otherwise push the gauge out of a fixed-height row whose ancestors\n clip \u2014 making the measurement unreachable in exactly the case where you\n most want to read it, and costing the gauge the fixed position it was\n designed around. The trade is deliberate: a title truncated with an\n ellipsis, so the chip stays put at the right edge. The crumb gives way\n first, being the least important text in the row. */\n.comp-crumb {\n flex: 0 8 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--fs-xs);\n color: var(--prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.06em;\n white-space: nowrap;\n}\n\n.comp-crumb::after {\n content: ' /';\n}\n\n.comp-title {\n flex: 0 1 auto;\n min-width: 0;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--fs-xl);\n font-weight: 600;\n color: var(--prism-text);\n letter-spacing: -0.015em;\n white-space: nowrap;\n}\n\n.comp-spacer {\n flex: 1;\n}\n\n.comp-status,\nprism-head-info,\nprism-head-gauge,\n.comp-head-end {\n flex: none;\n}\n\n/* Wraps the slot rather than styling the projected element, which this\n stylesheet cannot reach. :empty keeps the row's trailing gap from\n appearing when nothing is projected \u2014 comment anchors do not count. */\n.comp-head-end {\n display: inline-flex;\n align-items: center;\n}\n\n.comp-head-end:empty {\n display: none;\n}\n\n/* Always an outline, never a filled surface \u2014 deprecated separates itself\n by hue, not by weight. A filled alarm-coloured chip in a permanently\n visible band is exactly the \"red as background texture\" problem this\n redesign exists to fix. */\n.comp-status {\n display: inline-flex;\n gap: var(--sp-2);\n align-items: center;\n height: 18px;\n padding: 0 var(--sp-3) 0 var(--sp-2);\n font-size: var(--fs-xs);\n font-weight: 600;\n color: var(--prism-text-muted);\n letter-spacing: 0.03em;\n white-space: nowrap;\n border: 1px solid currentcolor;\n border-radius: var(--radius-xs);\n}\n\n.comp-status-mark {\n width: 6px;\n height: 6px;\n background: currentcolor;\n border-radius: 50%;\n}\n\n.comp-status--stable {\n color: var(--prism-mark-nominal);\n background: color-mix(in srgb, var(--prism-mark-nominal) 10%, transparent);\n}\n\n.comp-status--beta,\n.comp-status--wip {\n color: var(--prism-mark-attention);\n background: color-mix(in srgb, var(--prism-mark-attention) 10%, transparent);\n}\n\n.comp-status--wip .comp-status-mark {\n box-sizing: border-box;\n width: 7px;\n height: 7px;\n background: transparent;\n border: 1.5px solid currentcolor;\n}\n\n.comp-status--deprecated {\n color: var(--prism-mark-critical);\n background: color-mix(in srgb, var(--prism-mark-critical) 12%, transparent);\n border-color: color-mix(in srgb, var(--prism-mark-critical) 55%, transparent);\n}\n"] }]
177
+ args: [{ selector: 'prism-component-head', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismHeadInfoComponent, PrismHeadGaugeComponent], template: "@if (comp(); as c) {\n <section class=\"comp-head\">\n <span class=\"comp-crumb\">{{ category() }}</span>\n <h1 class=\"comp-title\">{{ c.meta.showcaseConfig.title }}</h1>\n\n <prism-head-info\n [selector]=\"c.meta.componentMeta.selector\"\n [description]=\"c.meta.showcaseConfig.description\"\n [tags]=\"c.meta.showcaseConfig.tags ?? []\"\n [variantCount]=\"variantCount()\" />\n\n @if (statusBadge(); as badge) {\n <span\n class=\"comp-status comp-status--{{ status() }}\"\n [attr.title]=\"badge.tooltip\">\n <span\n class=\"comp-status-mark\"\n aria-hidden=\"true\"></span>\n {{ badge.label }}\n </span>\n }\n\n <span class=\"comp-spacer\"></span>\n\n <prism-head-gauge [metrics]=\"metrics()\" />\n <span class=\"comp-head-end\"><ng-content select=\"[headEnd]\" /></span>\n </section>\n}\n", styles: [":host {\n display: block;\n flex-shrink: 0;\n}\n\n.comp-head {\n display: flex;\n gap: var(--sp-3);\n align-items: center;\n height: var(--band-head);\n padding: 0 var(--sp-5);\n background: var(--prism-bg);\n border-bottom: 1px solid var(--prism-border);\n}\n\n/* The text yields, the controls never do. A long category and a long title\n would otherwise push the gauge out of a fixed-height row whose ancestors\n clip, making the measurement unreachable when you most want to read it,\n and costing the gauge the fixed position it was designed around. So the\n title truncates with an ellipsis and the chip stays at the right edge. The crumb gives way\n first, being the least important text in the row. */\n.comp-crumb {\n flex: 0 8 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--fs-xs);\n color: var(--prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.06em;\n white-space: nowrap;\n}\n\n.comp-crumb::after {\n content: ' /';\n}\n\n.comp-title {\n flex: 0 1 auto;\n min-width: 0;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--fs-xl);\n font-weight: 600;\n color: var(--prism-text);\n letter-spacing: -0.015em;\n white-space: nowrap;\n}\n\n.comp-spacer {\n flex: 1;\n}\n\n.comp-status,\nprism-head-info,\nprism-head-gauge,\n.comp-head-end {\n flex: none;\n}\n\n/* Wraps the slot rather than styling the projected element, which this\n stylesheet cannot reach. :empty keeps the row's trailing gap from\n appearing when nothing is projected; comment anchors do not count. */\n.comp-head-end {\n display: inline-flex;\n align-items: center;\n}\n\n.comp-head-end:empty {\n display: none;\n}\n\n/* Always an outline, never a filled surface. Deprecated separates itself\n by hue, not by weight. A filled alarm-coloured chip in a permanently\n visible band is the \"red as background texture\" problem this\n redesign exists to fix. */\n.comp-status {\n display: inline-flex;\n gap: var(--sp-2);\n align-items: center;\n height: 18px;\n padding: 0 var(--sp-3) 0 var(--sp-2);\n font-size: var(--fs-xs);\n font-weight: 600;\n color: var(--prism-text-muted);\n letter-spacing: 0.03em;\n white-space: nowrap;\n border: 1px solid currentcolor;\n border-radius: var(--radius-xs);\n}\n\n.comp-status-mark {\n width: 6px;\n height: 6px;\n background: currentcolor;\n border-radius: 50%;\n}\n\n.comp-status--stable {\n color: var(--prism-mark-nominal);\n background: color-mix(in srgb, var(--prism-mark-nominal) 10%, transparent);\n}\n\n.comp-status--beta,\n.comp-status--wip {\n color: var(--prism-mark-attention);\n background: color-mix(in srgb, var(--prism-mark-attention) 10%, transparent);\n}\n\n.comp-status--wip .comp-status-mark {\n box-sizing: border-box;\n width: 7px;\n height: 7px;\n background: transparent;\n border: 1.5px solid currentcolor;\n}\n\n.comp-status--deprecated {\n color: var(--prism-mark-critical);\n background: color-mix(in srgb, var(--prism-mark-critical) 12%, transparent);\n border-color: color-mix(in srgb, var(--prism-mark-critical) 55%, transparent);\n}\n"] }]
185
178
  }], null, null); })();
186
179
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismComponentHeadComponent, { className: "PrismComponentHeadComponent", filePath: "app/component-head/prism-component-head.component.ts", lineNumber: 41 }); })();
@@ -86,6 +86,6 @@ export class PrismHeadGaugeComponent {
86
86
  }
87
87
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismHeadGaugeComponent, [{
88
88
  type: Component,
89
- args: [{ selector: 'prism-head-gauge', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismStatComponent], template: "<button\n class=\"gauge\"\n type=\"button\"\n [class.gauge--ok]=\"summary().variant === 'ok'\"\n [class.gauge--warn]=\"summary().variant === 'warn'\"\n [class.gauge--danger]=\"summary().variant === 'danger'\"\n popovertarget=\"prism-head-gauge\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.title]=\"ariaLabel()\">\n <span\n class=\"gauge__dot\"\n aria-hidden=\"true\"></span>\n @if (summary().worst; as worst) {\n <span class=\"gauge__text\">{{ worst.label }} {{ worst.value }}</span>\n @if (summary().others > 0) {\n <span class=\"gauge__more\">+{{ summary().others }}</span>\n }\n } @else {\n <span class=\"gauge__text\">{{ summary().measured }}</span>\n }\n</button>\n\n<div\n popover\n id=\"prism-head-gauge\"\n class=\"gauge-card\"\n role=\"dialog\"\n aria-label=\"Component metrics\">\n @for (m of metrics(); track m.id) {\n <prism-stat\n [label]=\"m.label\"\n [value]=\"m.value\"\n [variant]=\"m.variant\" />\n }\n</div>\n", styles: [":host {\n display: inline-flex;\n}\n\n.gauge {\n display: inline-flex;\n gap: var(--sp-2);\n align-items: center;\n height: 20px;\n padding: 0 var(--sp-3);\n anchor-name: --prism-head-gauge;\n font-family: var(--font-mono);\n font-size: var(--fs-xs);\n font-variant-numeric: tabular-nums;\n color: var(--prism-text-muted);\n white-space: nowrap;\n cursor: pointer;\n background: transparent;\n border: 1px solid var(--prism-border);\n border-radius: var(--radius-xs);\n}\n\n.gauge:focus-visible {\n outline: 2px solid var(--prism-primary);\n outline-offset: 1px;\n}\n\n.gauge__dot {\n width: 5px;\n height: 5px;\n background: currentcolor;\n border-radius: 50%;\n opacity: 0.5;\n}\n\n.gauge__more {\n opacity: 0.6;\n}\n\n/* The quiet state is green now, not grey: the gauge says \"these values\n were measured and all of them are fine\", which is a result, not an\n absence. A metric with no data at all stays grey in the readout rows. */\n.gauge--ok {\n color: var(--prism-mark-nominal);\n border-color: color-mix(in srgb, var(--prism-mark-nominal) 40%, transparent);\n}\n\n.gauge--warn {\n color: var(--prism-mark-attention);\n border-color: color-mix(in srgb, var(--prism-mark-attention) 40%, transparent);\n}\n\n.gauge--danger {\n color: var(--prism-mark-critical);\n border-color: color-mix(in srgb, var(--prism-mark-critical) 45%, transparent);\n}\n\n.gauge--ok .gauge__dot,\n.gauge--warn .gauge__dot,\n.gauge--danger .gauge__dot {\n opacity: 1;\n}\n\n.gauge-card {\n inset: auto;\n gap: 1px;\n min-width: 200px;\n padding: var(--sp-2);\n margin: 0;\n position-area: block-end span-inline-start;\n position-anchor: --prism-head-gauge;\n position-try-fallbacks: flip-block, flip-inline;\n background: var(--prism-bg-elevated);\n border: 1px solid var(--prism-border-strong);\n border-radius: var(--radius-md);\n box-shadow: 0 8px 28px -10px rgb(0 0 0 / 45%);\n}\n\n/* display belongs on :popover-open and nowhere else \u2014 see the note in\n prism-template-popover.component.ts. An author display on the base\n rule outranks the UA's [popover]:not(:popover-open) { display: none }\n and pins the readout open. */\n.gauge-card:popover-open {\n display: flex;\n flex-direction: column;\n}\n"] }]
89
+ args: [{ selector: 'prism-head-gauge', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismStatComponent], template: "<button\n class=\"gauge\"\n type=\"button\"\n [class.gauge--ok]=\"summary().variant === 'ok'\"\n [class.gauge--warn]=\"summary().variant === 'warn'\"\n [class.gauge--danger]=\"summary().variant === 'danger'\"\n popovertarget=\"prism-head-gauge\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.title]=\"ariaLabel()\">\n <span\n class=\"gauge__dot\"\n aria-hidden=\"true\"></span>\n @if (summary().worst; as worst) {\n <span class=\"gauge__text\">{{ worst.label }} {{ worst.value }}</span>\n @if (summary().others > 0) {\n <span class=\"gauge__more\">+{{ summary().others }}</span>\n }\n } @else {\n <span class=\"gauge__text\">{{ summary().measured }}</span>\n }\n</button>\n\n<div\n popover\n id=\"prism-head-gauge\"\n class=\"gauge-card\"\n role=\"dialog\"\n aria-label=\"Component metrics\">\n @for (m of metrics(); track m.id) {\n <prism-stat\n [label]=\"m.label\"\n [value]=\"m.value\"\n [variant]=\"m.variant\" />\n }\n</div>\n", styles: [":host {\n display: inline-flex;\n}\n\n.gauge {\n display: inline-flex;\n gap: var(--sp-2);\n align-items: center;\n height: 20px;\n padding: 0 var(--sp-3);\n anchor-name: --prism-head-gauge;\n font-family: var(--font-mono);\n font-size: var(--fs-xs);\n font-variant-numeric: tabular-nums;\n color: var(--prism-text-muted);\n white-space: nowrap;\n cursor: pointer;\n background: transparent;\n border: 1px solid var(--prism-border);\n border-radius: var(--radius-xs);\n}\n\n.gauge:focus-visible {\n outline: 2px solid var(--prism-primary);\n outline-offset: 1px;\n}\n\n.gauge__dot {\n width: 5px;\n height: 5px;\n background: currentcolor;\n border-radius: 50%;\n opacity: 0.5;\n}\n\n.gauge__more {\n opacity: 0.6;\n}\n\n/* The quiet state is green now, not grey: the gauge says \"these values\n were measured and all of them are fine\", which is a result, not an\n absence. A metric with no data at all stays grey in the readout rows. */\n.gauge--ok {\n color: var(--prism-mark-nominal);\n border-color: color-mix(in srgb, var(--prism-mark-nominal) 40%, transparent);\n}\n\n.gauge--warn {\n color: var(--prism-mark-attention);\n border-color: color-mix(in srgb, var(--prism-mark-attention) 40%, transparent);\n}\n\n.gauge--danger {\n color: var(--prism-mark-critical);\n border-color: color-mix(in srgb, var(--prism-mark-critical) 45%, transparent);\n}\n\n.gauge--ok .gauge__dot,\n.gauge--warn .gauge__dot,\n.gauge--danger .gauge__dot {\n opacity: 1;\n}\n\n.gauge-card {\n inset: auto;\n gap: 1px;\n min-width: 200px;\n padding: var(--sp-2);\n margin: 0;\n position-area: block-end span-inline-start;\n position-anchor: --prism-head-gauge;\n position-try-fallbacks: flip-block, flip-inline;\n background: var(--prism-bg-elevated);\n border: 1px solid var(--prism-border-strong);\n border-radius: var(--radius-md);\n box-shadow: 0 8px 28px -10px rgb(0 0 0 / 45%);\n}\n\n/* display belongs on :popover-open and nowhere else (see the note in\n prism-template-popover.component.ts). An author display on the base\n rule outranks the UA's [popover]:not(:popover-open) { display: none }\n and pins the readout open. */\n.gauge-card:popover-open {\n display: flex;\n flex-direction: column;\n}\n"] }]
90
90
  }], null, { metrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "metrics", required: true }] }] }); })();
91
91
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismHeadGaugeComponent, { className: "PrismHeadGaugeComponent", filePath: "app/component-head/prism-head-gauge.component.ts", lineNumber: 26 }); })();
@@ -2,7 +2,7 @@ import * as i0 from "@angular/core";
2
2
  /**
3
3
  * Identity disclosure for the component head.
4
4
  *
5
- * Selector, description and tags all answer "what is this component" — a
5
+ * Selector, description and tags all answer "what is this component", a
6
6
  * question you read once on arrival and never again while building. Keeping
7
7
  * them permanently on screen cost a 128px band to say something that belongs
8
8
  * behind one glyph.
@@ -40,7 +40,7 @@ function PrismHeadInfoComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
40
40
  /**
41
41
  * Identity disclosure for the component head.
42
42
  *
43
- * Selector, description and tags all answer "what is this component" — a
43
+ * Selector, description and tags all answer "what is this component", a
44
44
  * question you read once on arrival and never again while building. Keeping
45
45
  * them permanently on screen cost a 128px band to say something that belongs
46
46
  * behind one glyph.
@@ -86,6 +86,6 @@ export class PrismHeadInfoComponent {
86
86
  }
87
87
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismHeadInfoComponent, [{
88
88
  type: Component,
89
- args: [{ selector: 'prism-head-info', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismIconComponent], template: "<button\n class=\"info-btn\"\n type=\"button\"\n popovertarget=\"prism-head-info\"\n title=\"Component details\"\n aria-label=\"Component details\">\n <prism-icon\n name=\"info\"\n [size]=\"13\" />\n</button>\n\n<div\n popover\n id=\"prism-head-info\"\n class=\"info-card\"\n role=\"dialog\"\n aria-label=\"Component details\">\n <code class=\"info-card__selector\">&lt;{{ selector() }}&gt;</code>\n @if (description()) {\n <p class=\"info-card__desc\">{{ description() }}</p>\n }\n @if (variantCount() > 0) {\n <p class=\"info-card__meta\"> {{ variantCount() }} {{ variantCount() === 1 ? 'variant' : 'variants' }} </p>\n }\n @if (tags().length) {\n <div class=\"info-card__tags\">\n @for (tag of tags(); track tag) {\n <span class=\"info-card__tag\">{{ tag }}</span>\n }\n </div>\n }\n</div>\n", styles: [":host {\n display: inline-flex;\n}\n\n.info-btn {\n display: grid;\n place-items: center;\n width: 20px;\n height: 20px;\n padding: 0;\n anchor-name: --prism-head-info;\n color: var(--prism-text-ghost);\n cursor: pointer;\n background: transparent;\n border: 0;\n border-radius: var(--radius-xs);\n}\n\n.info-btn:hover {\n color: var(--prism-text-2);\n}\n\n.info-btn:focus-visible {\n outline: 2px solid var(--prism-primary);\n outline-offset: 1px;\n}\n\n.info-card {\n inset: auto;\n width: 320px;\n max-width: calc(100vw - var(--sp-6));\n padding: var(--sp-4);\n margin: 0;\n position-area: block-end span-inline-end;\n position-anchor: --prism-head-info;\n position-try-fallbacks: flip-block, flip-inline;\n color: var(--prism-text-2);\n background: var(--prism-bg-elevated);\n border: 1px solid var(--prism-border-strong);\n border-radius: var(--radius-md);\n box-shadow: 0 8px 28px -10px rgb(0 0 0 / 45%);\n}\n\n.info-card__selector {\n display: block;\n font-family: var(--font-mono);\n font-size: var(--fs-md);\n color: var(--prism-primary);\n user-select: all;\n}\n\n.info-card__desc {\n margin: var(--sp-3) 0 0;\n font-size: var(--fs-lg);\n line-height: 1.55;\n}\n\n/* A plain fact about the component, not a measurement \u2014 it sits here with\n the selector and the tags rather than in the gauge, whose numbers all\n answer \"did this pass its threshold\". A count cannot. */\n.info-card__meta {\n margin: var(--sp-3) 0 0;\n font-size: var(--fs-md);\n color: var(--prism-text-muted);\n}\n\n.info-card__tags {\n display: flex;\n flex-wrap: wrap;\n gap: var(--sp-2);\n margin-top: var(--sp-4);\n}\n\n.info-card__tag {\n padding: 1px var(--sp-3);\n font-size: var(--fs-xs);\n color: var(--prism-text-muted);\n border: 1px solid var(--prism-border);\n border-radius: var(--radius-xs);\n}\n"] }]
89
+ args: [{ selector: 'prism-head-info', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismIconComponent], template: "<button\n class=\"info-btn\"\n type=\"button\"\n popovertarget=\"prism-head-info\"\n title=\"Component details\"\n aria-label=\"Component details\">\n <prism-icon\n name=\"info\"\n [size]=\"13\" />\n</button>\n\n<div\n popover\n id=\"prism-head-info\"\n class=\"info-card\"\n role=\"dialog\"\n aria-label=\"Component details\">\n <code class=\"info-card__selector\">&lt;{{ selector() }}&gt;</code>\n @if (description()) {\n <p class=\"info-card__desc\">{{ description() }}</p>\n }\n @if (variantCount() > 0) {\n <p class=\"info-card__meta\"> {{ variantCount() }} {{ variantCount() === 1 ? 'variant' : 'variants' }} </p>\n }\n @if (tags().length) {\n <div class=\"info-card__tags\">\n @for (tag of tags(); track tag) {\n <span class=\"info-card__tag\">{{ tag }}</span>\n }\n </div>\n }\n</div>\n", styles: [":host {\n display: inline-flex;\n}\n\n.info-btn {\n display: grid;\n place-items: center;\n width: 20px;\n height: 20px;\n padding: 0;\n anchor-name: --prism-head-info;\n color: var(--prism-text-ghost);\n cursor: pointer;\n background: transparent;\n border: 0;\n border-radius: var(--radius-xs);\n}\n\n.info-btn:hover {\n color: var(--prism-text-2);\n}\n\n.info-btn:focus-visible {\n outline: 2px solid var(--prism-primary);\n outline-offset: 1px;\n}\n\n.info-card {\n inset: auto;\n width: 320px;\n max-width: calc(100vw - var(--sp-6));\n padding: var(--sp-4);\n margin: 0;\n position-area: block-end span-inline-end;\n position-anchor: --prism-head-info;\n position-try-fallbacks: flip-block, flip-inline;\n color: var(--prism-text-2);\n background: var(--prism-bg-elevated);\n border: 1px solid var(--prism-border-strong);\n border-radius: var(--radius-md);\n box-shadow: 0 8px 28px -10px rgb(0 0 0 / 45%);\n}\n\n.info-card__selector {\n display: block;\n font-family: var(--font-mono);\n font-size: var(--fs-md);\n color: var(--prism-primary);\n user-select: all;\n}\n\n.info-card__desc {\n margin: var(--sp-3) 0 0;\n font-size: var(--fs-lg);\n line-height: 1.55;\n}\n\n/* A plain fact about the component, not a measurement. It sits here with\n the selector and the tags rather than in the gauge, whose numbers all\n answer \"did this pass its threshold\". A count cannot. */\n.info-card__meta {\n margin: var(--sp-3) 0 0;\n font-size: var(--fs-md);\n color: var(--prism-text-muted);\n}\n\n.info-card__tags {\n display: flex;\n flex-wrap: wrap;\n gap: var(--sp-2);\n margin-top: var(--sp-4);\n}\n\n.info-card__tag {\n padding: 1px var(--sp-3);\n font-size: var(--fs-xs);\n color: var(--prism-text-muted);\n border: 1px solid var(--prism-border);\n border-radius: var(--radius-xs);\n}\n"] }]
90
90
  }], null, { selector: [{ type: i0.Input, args: [{ isSignal: true, alias: "selector", required: true }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], tags: [{ type: i0.Input, args: [{ isSignal: true, alias: "tags", required: false }] }], variantCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "variantCount", required: false }] }] }); })();
91
91
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismHeadInfoComponent, { className: "PrismHeadInfoComponent", filePath: "app/component-head/prism-head-info.component.ts", lineNumber: 25 }); })();
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
4
4
  * One line of the gauge's readout: caption left, value right.
5
5
  *
6
6
  * Was a right-aligned tile in the old head. The pill it used to carry is gone
7
- * rather than restyled — it duplicated the caption directly beneath it.
7
+ * rather than restyled, because it duplicated the caption directly beneath it.
8
8
  */
9
9
  export declare class PrismStatComponent {
10
10
  readonly label: import("@angular/core").InputSignal<string>;
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
4
4
  * One line of the gauge's readout: caption left, value right.
5
5
  *
6
6
  * Was a right-aligned tile in the old head. The pill it used to carry is gone
7
- * rather than restyled — it duplicated the caption directly beneath it.
7
+ * rather than restyled, because it duplicated the caption directly beneath it.
8
8
  */
9
9
  export class PrismStatComponent {
10
10
  label = input.required(/* @ts-ignore */
@@ -33,6 +33,6 @@ export class PrismStatComponent {
33
33
  }
34
34
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismStatComponent, [{
35
35
  type: Component,
36
- args: [{ selector: 'prism-stat', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"stat\"\n [class.stat--ok]=\"variant() === 'ok'\"\n [class.stat--warn]=\"variant() === 'warn'\"\n [class.stat--danger]=\"variant() === 'danger'\">\n <span\n class=\"stat__dot\"\n aria-hidden=\"true\"></span>\n <span class=\"stat__lbl\">{{ label() }}</span>\n <span class=\"stat__val\">{{ value() }}</span>\n</div>\n", styles: [".stat {\n display: flex;\n gap: var(--sp-3);\n align-items: center;\n padding: var(--sp-2) var(--sp-3);\n font-size: var(--fs-md);\n color: var(--prism-text-2);\n border-radius: var(--radius-xs);\n}\n\n.stat__dot {\n flex: none;\n width: 5px;\n height: 5px;\n background: transparent;\n border-radius: 50%;\n}\n\n.stat__lbl {\n white-space: nowrap;\n}\n\n.stat__val {\n margin-left: auto;\n font-family: var(--font-mono);\n font-variant-numeric: tabular-nums;\n color: var(--prism-text);\n}\n\n/* Four states, four treatments. \"ok\" earns the nominal green, and \"none\"\n deliberately does not: a metric with no data has nothing to report, and\n colouring it green would claim a clean result the tool never measured.\n That is the one distinction worth keeping grey. */\n.stat--ok .stat__dot {\n background: var(--prism-mark-nominal);\n}\n\n.stat--ok .stat__val {\n color: var(--prism-mark-nominal);\n}\n\n.stat--warn .stat__dot {\n background: var(--prism-mark-attention);\n}\n\n.stat--warn .stat__val {\n color: var(--prism-mark-attention);\n}\n\n.stat--danger .stat__dot {\n background: var(--prism-mark-critical);\n}\n\n.stat--danger .stat__val {\n color: var(--prism-mark-critical);\n}\n"] }]
36
+ args: [{ selector: 'prism-stat', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"stat\"\n [class.stat--ok]=\"variant() === 'ok'\"\n [class.stat--warn]=\"variant() === 'warn'\"\n [class.stat--danger]=\"variant() === 'danger'\">\n <span\n class=\"stat__dot\"\n aria-hidden=\"true\"></span>\n <span class=\"stat__lbl\">{{ label() }}</span>\n <span class=\"stat__val\">{{ value() }}</span>\n</div>\n", styles: [".stat {\n display: flex;\n gap: var(--sp-3);\n align-items: center;\n padding: var(--sp-2) var(--sp-3);\n font-size: var(--fs-md);\n color: var(--prism-text-2);\n border-radius: var(--radius-xs);\n}\n\n.stat__dot {\n flex: none;\n width: 5px;\n height: 5px;\n background: transparent;\n border-radius: 50%;\n}\n\n.stat__lbl {\n white-space: nowrap;\n}\n\n.stat__val {\n margin-left: auto;\n font-family: var(--font-mono);\n font-variant-numeric: tabular-nums;\n color: var(--prism-text);\n}\n\n/* Four states, four treatments. \"ok\" gets the nominal green, and \"none\"\n does not: a metric with no data has nothing to report, and\n colouring it green would claim a clean result the tool never measured.\n That is the one distinction worth keeping grey. */\n.stat--ok .stat__dot {\n background: var(--prism-mark-nominal);\n}\n\n.stat--ok .stat__val {\n color: var(--prism-mark-nominal);\n}\n\n.stat--warn .stat__dot {\n background: var(--prism-mark-attention);\n}\n\n.stat--warn .stat__val {\n color: var(--prism-mark-attention);\n}\n\n.stat--danger .stat__dot {\n background: var(--prism-mark-critical);\n}\n\n.stat--danger .stat__val {\n color: var(--prism-mark-critical);\n}\n"] }]
37
37
  }], null, { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] }); })();
38
38
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismStatComponent, { className: "PrismStatComponent", filePath: "app/component-head/prism-stat.component.ts", lineNumber: 17 }); })();
@@ -20,7 +20,7 @@ export declare class PrismResizerDirective {
20
20
  private static readonly STEP;
21
21
  protected onMouseDown(e: MouseEvent): void;
22
22
  /**
23
- * Keyboard direction is deliberately independent of `scale`.
23
+ * Keyboard direction is independent of `scale`.
24
24
  *
25
25
  * `scale` inverts the *pointer* for a grip on the far edge of a centred box,
26
26
  * and carrying that inversion into the keyboard was wrong: two separators
@@ -28,7 +28,7 @@ export class PrismResizerDirective {
28
28
  onMouseDown(e) {
29
29
  // Primary button only. Without this a right-click arms the document-level
30
30
  // listeners below, the context menu takes the pointer so the matching
31
- // mouseup never arrives, and the drag stays live afterwards — the value
31
+ // mouseup never arrives, and the drag stays live afterwards, so the value
32
32
  // then follows the cursor with no button held. `preventDefault` does not
33
33
  // suppress `contextmenu`, so the guard has to be here.
34
34
  if (e.button !== 0)
@@ -50,7 +50,7 @@ export class PrismResizerDirective {
50
50
  document.addEventListener('mouseup', onUp);
51
51
  }
52
52
  /**
53
- * Keyboard direction is deliberately independent of `scale`.
53
+ * Keyboard direction is independent of `scale`.
54
54
  *
55
55
  * `scale` inverts the *pointer* for a grip on the far edge of a centred box,
56
56
  * and carrying that inversion into the keyboard was wrong: two separators
@@ -4,7 +4,7 @@
4
4
  * Not for tidiness: a directive whose inputs are `input()` signals has to be
5
5
  * rendered inside a host component to be exercised, and this package's specs
6
6
  * run under jsdom against SWC-compiled sources, where JIT cannot instantiate
7
- * one. Extracted, the maths is ordinary and testable — the same reason
7
+ * one. Extracted, the maths is ordinary and testable. It is the same reason
8
8
  * `known-inputs.ts` and `overlay-resolver.ts` sit beside their components.
9
9
  */
10
10
  /**
@@ -16,7 +16,7 @@
16
16
  * changes the width at both, and the stage's `transform: scale(var(--zoom))`
17
17
  * contributes the division, since a pointer moving `dx` across the *painted*
18
18
  * box has to change the CSS width by `2·dx / zoom` to keep the grip under the
19
- * cursor — the sign says which edge is being held.
19
+ * cursor. The sign says which edge is being held.
20
20
  */
21
21
  export declare function resizeValue(startValue: number, delta: number, scale: number, min: number, max: number): number;
22
22
  //# sourceMappingURL=resize-value.d.ts.map
@@ -4,7 +4,7 @@
4
4
  * Not for tidiness: a directive whose inputs are `input()` signals has to be
5
5
  * rendered inside a host component to be exercised, and this package's specs
6
6
  * run under jsdom against SWC-compiled sources, where JIT cannot instantiate
7
- * one. Extracted, the maths is ordinary and testable — the same reason
7
+ * one. Extracted, the maths is ordinary and testable. It is the same reason
8
8
  * `known-inputs.ts` and `overlay-resolver.ts` sit beside their components.
9
9
  */
10
10
  /**
@@ -16,7 +16,7 @@
16
16
  * changes the width at both, and the stage's `transform: scale(var(--zoom))`
17
17
  * contributes the division, since a pointer moving `dx` across the *painted*
18
18
  * box has to change the CSS width by `2·dx / zoom` to keep the grip under the
19
- * cursor — the sign says which edge is being held.
19
+ * cursor. The sign says which edge is being held.
20
20
  */
21
21
  export function resizeValue(startValue, delta, scale, min, max) {
22
22
  return Math.max(min, Math.min(max, startValue + delta * scale));
@@ -2,9 +2,9 @@ import type { DiscoveryManifest, RuntimeManifest } from '../plugin/plugin.types.
2
2
  /** Sanitised `meta`, or `undefined` when there is nothing worth exposing. */
3
3
  export declare function serializableMeta(meta: Record<string, unknown> | undefined): Record<string, unknown> | undefined;
4
4
  /**
5
- * Builds the discovery view of the manifest — what `__PRISM_MANIFEST__` exposes.
5
+ * Builds the discovery view of the manifest, i.e. what `__PRISM_MANIFEST__` exposes.
6
6
  *
7
- * It is deliberately not the runtime manifest: no Angular class references, no
7
+ * It is not the runtime manifest: no Angular class references, no
8
8
  * providers, no scanned input/output metadata. It carries what an external tool
9
9
  * needs to enumerate and address variants, plus the `@Showcase` metadata that
10
10
  * lets a tool decide how to treat one.
@@ -1 +1 @@
1
- {"version":3,"file":"discovery-manifest.d.ts","sourceRoot":"","sources":["../../src/app/discovery-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,iBAAiB,EAAoB,eAAe,EAAE,MAAM,2BAA2B,CAAC;AA2D1H,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAM/G;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,iBAAiB,CAsCnF"}
1
+ {"version":3,"file":"discovery-manifest.d.ts","sourceRoot":"","sources":["../../src/app/discovery-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,iBAAiB,EAAoB,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAuD1H,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAM/G;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,iBAAiB,CAsCnF"}
@@ -1,18 +1,14 @@
1
1
  import { resolveVariantBg } from '../shared/variant-bg.js';
2
2
  /**
3
3
  * External tooling reads `__PRISM_MANIFEST__` through a structured-clone bridge
4
- * (`page.evaluate()` in Playwright, `postMessage`, devtools). `ShowcaseConfig.meta`
5
- * is declared as an open `Record<string, unknown>`, so a consumer is free to put
6
- * a component class, a function or a cyclic object in there — any of which makes
7
- * that bridge throw or silently drop the whole payload.
4
+ * (Playwright's `page.evaluate()`, `postMessage`, devtools). `ShowcaseConfig.meta`
5
+ * is an open `Record<string, unknown>`, and a class, function or cyclic object
6
+ * in it makes that bridge throw or drop the whole payload.
8
7
  *
9
- * Everything crossing into the global is therefore reduced to plain JSON-safe
10
- * values: primitives, arrays, and objects with a plain prototype. Class
11
- * instances (Angular types included), functions, symbols, Dates, Maps and DOM
12
- * nodes are dropped rather than half-serialised, and cycles are broken.
13
- *
14
- * Array elements become `null` when they cannot be represented, matching
15
- * `JSON.stringify` so indices stay stable.
8
+ * So only JSON-safe values cross: primitives, arrays and plain-prototype
9
+ * objects. Class instances, functions, symbols, Dates, Maps and DOM nodes are
10
+ * dropped and cycles are broken. Unrepresentable array elements become `null`,
11
+ * as in `JSON.stringify`, so indices stay stable.
16
12
  */
17
13
  function toSerializable(value, seen) {
18
14
  if (value === null)
@@ -59,9 +55,9 @@ export function serializableMeta(meta) {
59
55
  return serialized;
60
56
  }
61
57
  /**
62
- * Builds the discovery view of the manifest — what `__PRISM_MANIFEST__` exposes.
58
+ * Builds the discovery view of the manifest, i.e. what `__PRISM_MANIFEST__` exposes.
63
59
  *
64
- * It is deliberately not the runtime manifest: no Angular class references, no
60
+ * It is not the runtime manifest: no Angular class references, no
65
61
  * providers, no scanned input/output metadata. It carries what an external tool
66
62
  * needs to enumerate and address variants, plus the `@Showcase` metadata that
67
63
  * lets a tool decide how to treat one.
@@ -73,8 +69,8 @@ export function buildDiscoveryManifest(manifest) {
73
69
  // An empty `variants` array is not "no variants": the renderer still
74
70
  // instantiates the component with its declared defaults at index 0 and
75
71
  // marks it `data-prism-rendered="<class>:0"`. Reporting zero variants
76
- // here would let a runner walk past a component the app happily renders
77
- // — the quiet coverage loss the `excluded` status exists to prevent.
72
+ // here would let a runner walk past a component the app happily renders.
73
+ // That's the quiet coverage loss the `excluded` status exists to prevent.
78
74
  const declared = showcaseConfig.variants ?? [];
79
75
  const variants = declared.length
80
76
  ? declared.map((variant, index) => {
@@ -109,7 +109,7 @@ export class PrismHeaderComponent {
109
109
  }
110
110
  }
111
111
  onSearchFocus() {
112
- // Placeholder — will be wired to command palette later
112
+ // Placeholder, will be wired to the command palette later
113
113
  }
114
114
  static ɵfac = function PrismHeaderComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PrismHeaderComponent)(); };
115
115
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismHeaderComponent, selectors: [["prism-header"]], hostBindings: function PrismHeaderComponent_HostBindings(rf, ctx) { if (rf & 1) {
@@ -6,10 +6,10 @@
6
6
  * `prism-icon.component.ts` so a plugin author can resolve the name the docs
7
7
  * point them to (`NavigationDecorationDefinition.icon`, `PanelDefinition.icon`)
8
8
  * without pulling an `@Component` class into a module graph the builder
9
- * evaluates in Node.js — the same reason plugin panels are lazy-loaded.
9
+ * evaluates in Node.js. Plugin panels are lazy-loaded for the same reason.
10
10
  */
11
11
  declare const ICONS: Record<string, string>;
12
12
  export { ICONS };
13
- /** Every name the registry can draw — what a panel's `icon` has to pick from. */
13
+ /** Every name the registry can draw. A panel's `icon` has to pick from these. */
14
14
  export declare const ICON_NAMES: readonly string[];
15
15
  //# sourceMappingURL=icon-registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"icon-registry.d.ts","sourceRoot":"","sources":["../../../src/app/icons/icon-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,QAAA,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoCjC,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB,iFAAiF;AACjF,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EAAuB,CAAC"}
1
+ {"version":3,"file":"icon-registry.d.ts","sourceRoot":"","sources":["../../../src/app/icons/icon-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,QAAA,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqCjC,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB,iFAAiF;AACjF,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EAAuB,CAAC"}
@@ -6,7 +6,7 @@
6
6
  * `prism-icon.component.ts` so a plugin author can resolve the name the docs
7
7
  * point them to (`NavigationDecorationDefinition.icon`, `PanelDefinition.icon`)
8
8
  * without pulling an `@Component` class into a module graph the builder
9
- * evaluates in Node.js — the same reason plugin panels are lazy-loaded.
9
+ * evaluates in Node.js. Plugin panels are lazy-loaded for the same reason.
10
10
  */
11
11
  const ICONS = {
12
12
  search: '<circle cx="11" cy="11" r="7"/><path d="m21 21-4.3-4.3"/>',
@@ -31,6 +31,7 @@ const ICONS = {
31
31
  move: '<path d="M12 2v20M2 12h20m-16-4-4 4 4 4m12-8 4 4-4 4M8 8l-4 4 4 4"/>',
32
32
  crosshair: '<circle cx="12" cy="12" r="10"/><path d="M22 12h-4M6 12H2m10-6V2m0 20v-4"/>',
33
33
  'ruler-dimension': '<path d="M4 4v16M20 4v16M8 12h8m-2-2 2 2-2 2m-4-4-2 2 2 2"/>',
34
+ ruler: '<path d="M3 9.5 9.5 3a1.5 1.5 0 0 1 2.1 0l9.4 9.4a1.5 1.5 0 0 1 0 2.1L14.5 21a1.5 1.5 0 0 1-2.1 0L3 11.6a1.5 1.5 0 0 1 0-2.1Z"/><path d="m7 9 2 2m2-6 2 2m2 2 2 2m-8 4 2 2"/>',
34
35
  copy: '<rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/>',
35
36
  'maximize-2': '<path d="M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3M3 16v3a2 2 0 0 0 2 2h3m8 0h3a2 2 0 0 0 2-2v-3"/>',
36
37
  eye: '<path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"/><circle cx="12" cy="12" r="3"/>',
@@ -41,5 +42,5 @@ const ICONS = {
41
42
  'circle-dashed': '<path d="M10.1 2.18a9.93 9.93 0 0 1 3.8 0"/><path d="M17.6 3.71a9.95 9.95 0 0 1 2.69 2.7"/><path d="M21.82 10.1a9.93 9.93 0 0 1 0 3.8"/><path d="M20.29 17.6a9.95 9.95 0 0 1-2.7 2.69"/><path d="M13.9 21.82a9.94 9.94 0 0 1-3.8 0"/><path d="M6.4 20.29a9.95 9.95 0 0 1-2.69-2.7"/><path d="M2.18 13.9a9.93 9.93 0 0 1 0-3.8"/><path d="M3.71 6.4a9.95 9.95 0 0 1 2.7-2.69"/>'
42
43
  };
43
44
  export { ICONS };
44
- /** Every name the registry can draw — what a panel's `icon` has to pick from. */
45
+ /** Every name the registry can draw. A panel's `icon` has to pick from these. */
45
46
  export const ICON_NAMES = Object.keys(ICONS);
@@ -8,8 +8,8 @@ export { ICON_NAMES };
8
8
  * invisible: the `<svg>` is still built at the right size, so a missing entry
9
9
  * renders as a correctly-spaced blank and reads like a CSS bug. Plugins declare
10
10
  * `icon` as a free-form string and are compiled separately from this registry,
11
- * so nothing else catches the typo — the visual regression panel shipped with a
12
- * blank tab icon exactly this way.
11
+ * so no other check catches the typo. The visual regression panel once shipped
12
+ * with a blank tab icon this way.
13
13
  *
14
14
  * Warned once per name: an icon on a panel tab re-renders constantly.
15
15
  */
@@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, effect, ElementRef, inject, input }
2
2
  import { ICON_NAMES, ICONS } from './icon-registry.js';
3
3
  import * as i0 from "@angular/core";
4
4
  // Re-exported for existing consumers of this module. The registry itself
5
- // lives in `icon-registry.js` — a dependency-free module — so a plugin barrel
5
+ // lives in `icon-registry.js`, a dependency-free module, so a plugin barrel
6
6
  // can re-export `ICON_NAMES` without dragging this `@Component` class (and
7
7
  // `@angular/core`) into a module graph the builder evaluates in Node.js.
8
8
  export { ICON_NAMES };
@@ -15,8 +15,8 @@ const warnedIcons = new Set();
15
15
  * invisible: the `<svg>` is still built at the right size, so a missing entry
16
16
  * renders as a correctly-spaced blank and reads like a CSS bug. Plugins declare
17
17
  * `icon` as a free-form string and are compiled separately from this registry,
18
- * so nothing else catches the typo — the visual regression panel shipped with a
19
- * blank tab icon exactly this way.
18
+ * so no other check catches the typo. The visual regression panel once shipped
19
+ * with a blank tab icon this way.
20
20
  *
21
21
  * Warned once per name: an icon on a panel tab re-renders constantly.
22
22
  */
@@ -24,7 +24,7 @@ export function resolveIcon(name) {
24
24
  const content = ICONS[name];
25
25
  if (content === undefined && !warnedIcons.has(name)) {
26
26
  warnedIcons.add(name);
27
- console.warn(`[ng-prism] Unknown icon "${name}" — rendering an empty glyph. Available: ${ICON_NAMES.join(', ')}.`);
27
+ console.warn(`[ng-prism] Unknown icon "${name}", rendering an empty glyph. Available: ${ICON_NAMES.join(', ')}.`);
28
28
  }
29
29
  return content;
30
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAGxE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAC7H,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGtE,YAAY,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAG1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,KAAK,aAAa,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAGlF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAGvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kDAAkD,CAAC;AAG9F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAyB1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAGxE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAC7H,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGtE,YAAY,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAG1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,KAAK,aAAa,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAGlF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAGvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kDAAkD,CAAC;AAG9F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAkB1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC"}
package/dist/app/index.js CHANGED
@@ -23,28 +23,21 @@ export { PrismPageRendererComponent } from './page-renderer/prism-page-renderer.
23
23
  export { providePrism } from './provide-prism.js';
24
24
  // HMR helper
25
25
  export { enablePrismHmr } from './hmr.js';
26
- // Shared presentational components for plugin contributions. These live on
27
- // the main entry rather than `plugin/index.ts` because the builder evaluates
28
- // plugin config — and everything it imports — in Node.js, and that barrel
29
- // draws an explicit line at decorated declarations.
26
+ // Shared presentational components for plugin contributions. They live on the
27
+ // main entry, not `plugin/index.ts`, because the builder evaluates plugin
28
+ // config in Node.js and that barrel excludes decorated declarations.
30
29
  //
31
- // This barrel draws no such line, and the badges do cross into Node. The
32
- // `loadComponent` indirection keeps plugin *panels* out of the builder's
33
- // module graph, but `@ng-prism/plugin-coverage` and
34
- // `@ng-prism/plugin-visual-regression` also re-export their header badge
35
- // components *statically* from their Node entry (`exports["."].import`), and
36
- // those components import `PrismMetricBadgeComponent` from here. So loading a
37
- // plugin config in `builder/config-loader` pulls this whole file — shell
38
- // component included — into Node. It evaluates cleanly only because the
39
- // config loader imports `@angular/compiler` before anything else.
30
+ // They still reach Node: `@ng-prism/plugin-coverage` and
31
+ // `@ng-prism/plugin-visual-regression` re-export their header badges statically
32
+ // from their Node entry, and those import `PrismMetricBadgeComponent` from here.
33
+ // Loading a plugin config in `builder/config-loader` therefore pulls this whole
34
+ // file, shell included, into Node. That only works because the config loader
35
+ // imports `@angular/compiler` first.
40
36
  //
41
- // Moving those two re-exports to the packages' `.browser.ts` entries does not
42
- // fix it: `package.json` maps "types" to the single `index.d.ts` generated
43
- // from the Node entry under every condition, so a symbol dropped from that
44
- // entry disappears from the public type surface while still shipping in the
45
- // browser bundle — the mismatch `plugin-visual-regression`'s
46
- // `entry-parity.spec.ts` exists to forbid. Making the badges Node-safe means
47
- // giving them an import that is not this barrel, which is a public API
48
- // decision, not a cleanup.
37
+ // Moving those re-exports to the `.browser.ts` entries does not help: "types"
38
+ // maps to the one `index.d.ts` built from the Node entry, so the symbols would
39
+ // vanish from the public types while still shipping (which
40
+ // `entry-parity.spec.ts` forbids). A Node-safe import path for the badges is a
41
+ // public API decision.
49
42
  export { PrismMetricBadgeComponent } from './shared/prism-metric-badge.component.js';
50
43
  export { PrismIconComponent } from './icons/prism-icon.component.js';
@@ -3,7 +3,7 @@ import type { RuntimeComponent } from '../../plugin/plugin.types.js';
3
3
  * Whether the Overview tab is offered for this component.
4
4
  *
5
5
  * Two conditions, and the second is a correctness argument rather than taste.
6
- * A `renderPage` component does not render itself — it renders a registered
6
+ * A `renderPage` component does not render itself. It renders a registered
7
7
  * `ComponentPage`, and that page reads its values from the *global*
8
8
  * `PrismRendererService`. n cells side by side would all show the same state,
9
9
  * so an Overview there would be demonstrably wrong, not merely unhelpful.
@@ -2,7 +2,7 @@
2
2
  * Whether the Overview tab is offered for this component.
3
3
  *
4
4
  * Two conditions, and the second is a correctness argument rather than taste.
5
- * A `renderPage` component does not render itself — it renders a registered
5
+ * A `renderPage` component does not render itself. It renders a registered
6
6
  * `ComponentPage`, and that page reads its values from the *global*
7
7
  * `PrismRendererService`. n cells side by side would all show the same state,
8
8
  * so an Overview there would be demonstrably wrong, not merely unhelpful.
@@ -4,11 +4,11 @@ import * as i0 from "@angular/core";
4
4
  * One frame of the contact sheet: a stage painting the variant's declared
5
5
  * background, with the variant's own instance on it and a caption beneath.
6
6
  *
7
- * It deliberately shares none of the Playground's bookkeeping. Output
7
+ * It shares none of the Playground's bookkeeping. Output
8
8
  * subscriptions, `renderedElement`, the `prism:render:*` marks, the renderer
9
9
  * hooks and `data-prism-rendered` all describe *one* rendered thing; n cells
10
10
  * writing to any of them would corrupt what they mean. `data-prism-rendered`
11
- * matters most — it is the selector external screenshot runners key on (see
11
+ * matters most: it is the selector external screenshot runners key on (see
12
12
  * `docs/guide/external-tooling.md`), and this component never emits it.
13
13
  */
14
14
  export declare class PrismOverviewCellComponent {
@@ -1 +1 @@
1
- {"version":3,"file":"prism-overview-cell.component.d.ts","sourceRoot":"","sources":["../../../src/app/overview/prism-overview-cell.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;;AAOrE;;;;;;;;;;GAUG;AACH,qBAYa,0BAA0B;IACnC,QAAQ,CAAC,SAAS,wDAAsC;IACxD,QAAQ,CAAC,KAAK,8CAA4B;IAE1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAEpB;IAEH,yEAAyE;IACzE,SAAS,CAAC,QAAQ,CAAC,EAAE,yFAAwF;IAE7G,SAAS,CAAC,QAAQ,CAAC,OAAO,yCAUvB;IAEH,SAAS,CAAC,QAAQ,CAAC,MAAM,0CAKtB;;IAoBH,OAAO,CAAC,KAAK;yCAlDJ,0BAA0B;2CAA1B,0BAA0B;CA0FtC"}
1
+ {"version":3,"file":"prism-overview-cell.component.d.ts","sourceRoot":"","sources":["../../../src/app/overview/prism-overview-cell.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;;AAOrE;;;;;;;;;;GAUG;AACH,qBAYa,0BAA0B;IACnC,QAAQ,CAAC,SAAS,wDAAsC;IACxD,QAAQ,CAAC,KAAK,8CAA4B;IAE1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAEpB;IAEH,yEAAyE;IACzE,SAAS,CAAC,QAAQ,CAAC,EAAE,yFAAwF;IAE7G,SAAS,CAAC,QAAQ,CAAC,OAAO,yCAUvB;IAEH,SAAS,CAAC,QAAQ,CAAC,MAAM,0CAKtB;;IAmBH,OAAO,CAAC,KAAK;yCAjDJ,0BAA0B;2CAA1B,0BAA0B;CAyFtC"}