@ng-prism/core 22.6.0 → 22.7.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/README.md +11 -9
  2. package/dist/app/canvas/canvas-bg.styles.d.ts +1 -1
  3. package/dist/app/canvas/canvas-bg.styles.d.ts.map +1 -1
  4. package/dist/app/canvas/canvas-bg.styles.js +1 -1
  5. package/dist/app/canvas/canvas-overlay-tokens.d.ts +12 -0
  6. package/dist/app/canvas/canvas-overlay-tokens.d.ts.map +1 -0
  7. package/dist/app/canvas/canvas-overlay-tokens.js +52 -0
  8. package/dist/app/canvas/prism-canvas-bg-pill.component.js +2 -2
  9. package/dist/app/canvas/prism-canvas-pin-row.component.js +2 -2
  10. package/dist/app/canvas/prism-canvas-rulers.component.d.ts +2 -0
  11. package/dist/app/canvas/prism-canvas-rulers.component.d.ts.map +1 -1
  12. package/dist/app/canvas/prism-canvas-rulers.component.js +17 -12
  13. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts +3 -2
  14. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts.map +1 -1
  15. package/dist/app/canvas/prism-canvas-toolbar.component.js +89 -97
  16. package/dist/app/canvas/prism-template-popover.component.d.ts.map +1 -1
  17. package/dist/app/canvas/prism-template-popover.component.js +16 -7
  18. package/dist/app/component-head/head-metrics.d.ts +35 -19
  19. package/dist/app/component-head/head-metrics.d.ts.map +1 -1
  20. package/dist/app/component-head/head-metrics.js +57 -27
  21. package/dist/app/component-head/pipe-facts.d.ts +9 -0
  22. package/dist/app/component-head/pipe-facts.d.ts.map +1 -0
  23. package/dist/app/component-head/pipe-facts.js +15 -0
  24. package/dist/app/component-head/prism-component-head.component.d.ts +19 -22
  25. package/dist/app/component-head/prism-component-head.component.d.ts.map +1 -1
  26. package/dist/app/component-head/prism-component-head.component.js +80 -96
  27. package/dist/app/component-head/prism-head-gauge.component.d.ts +8 -12
  28. package/dist/app/component-head/prism-head-gauge.component.d.ts.map +1 -1
  29. package/dist/app/component-head/prism-head-gauge.component.js +51 -67
  30. package/dist/app/component-head/prism-head-info.component.d.ts +13 -2
  31. package/dist/app/component-head/prism-head-info.component.d.ts.map +1 -1
  32. package/dist/app/component-head/prism-head-info.component.js +57 -16
  33. package/dist/app/component-head/prism-stat.component.d.ts +4 -5
  34. package/dist/app/component-head/prism-stat.component.d.ts.map +1 -1
  35. package/dist/app/component-head/prism-stat.component.js +16 -12
  36. package/dist/app/component-head/service-facts.d.ts +8 -0
  37. package/dist/app/component-head/service-facts.d.ts.map +1 -0
  38. package/dist/app/component-head/service-facts.js +11 -0
  39. package/dist/app/controls/boolean-control.component.js +2 -2
  40. package/dist/app/controls/json-control.component.js +2 -2
  41. package/dist/app/controls/union-control.component.js +4 -3
  42. package/dist/app/header/header-brand.d.ts +25 -0
  43. package/dist/app/header/header-brand.d.ts.map +1 -0
  44. package/dist/app/header/header-brand.js +10 -0
  45. package/dist/app/header/prism-header.component.d.ts +2 -2
  46. package/dist/app/header/prism-header.component.d.ts.map +1 -1
  47. package/dist/app/header/prism-header.component.js +73 -57
  48. package/dist/app/icons/icon-registry.d.ts.map +1 -1
  49. package/dist/app/icons/icon-registry.js +4 -1
  50. package/dist/app/index.d.ts +12 -0
  51. package/dist/app/index.d.ts.map +1 -1
  52. package/dist/app/index.js +12 -1
  53. package/dist/app/layout-menu/prism-layout-menu.component.d.ts +3 -0
  54. package/dist/app/layout-menu/prism-layout-menu.component.d.ts.map +1 -1
  55. package/dist/app/layout-menu/prism-layout-menu.component.js +72 -58
  56. package/dist/app/overview/open-in-playground.d.ts +8 -0
  57. package/dist/app/overview/open-in-playground.d.ts.map +1 -1
  58. package/dist/app/overview/open-in-playground.js +13 -0
  59. package/dist/app/overview/overview-matrix.d.ts +10 -4
  60. package/dist/app/overview/overview-matrix.d.ts.map +1 -1
  61. package/dist/app/overview/overview-matrix.js +3 -3
  62. package/dist/app/overview/prism-overview-cell.component.d.ts +6 -2
  63. package/dist/app/overview/prism-overview-cell.component.d.ts.map +1 -1
  64. package/dist/app/overview/prism-overview-cell.component.js +35 -24
  65. package/dist/app/overview/prism-overview-matrix.component.js +46 -55
  66. package/dist/app/page-renderer/prism-page-renderer.component.js +2 -2
  67. package/dist/app/panels/a11y/a11y-header-badge.component.d.ts +1 -4
  68. package/dist/app/panels/a11y/a11y-header-badge.component.d.ts.map +1 -1
  69. package/dist/app/panels/a11y/a11y-header-badge.component.js +8 -19
  70. package/dist/app/panels/a11y/a11y-keyboard-overlay.component.js +2 -2
  71. package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts +1 -0
  72. package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts.map +1 -1
  73. package/dist/app/panels/a11y/a11y-overlay-host.component.js +4 -3
  74. package/dist/app/panels/a11y/a11y-panel.component.d.ts +4 -1
  75. package/dist/app/panels/a11y/a11y-panel.component.d.ts.map +1 -1
  76. package/dist/app/panels/a11y/a11y-panel.component.js +32 -54
  77. package/dist/app/panels/a11y/a11y-score.component.d.ts +8 -3
  78. package/dist/app/panels/a11y/a11y-score.component.d.ts.map +1 -1
  79. package/dist/app/panels/a11y/a11y-score.component.js +19 -35
  80. package/dist/app/panels/a11y/a11y-sr-overlay.component.js +2 -2
  81. package/dist/app/panels/a11y/a11y-sr.component.js +2 -2
  82. package/dist/app/panels/a11y/a11y-summary.d.ts.map +1 -1
  83. package/dist/app/panels/a11y/a11y-summary.js +8 -1
  84. package/dist/app/panels/a11y/a11y-tree.component.js +2 -2
  85. package/dist/app/panels/a11y/a11y-violations.component.d.ts +23 -2
  86. package/dist/app/panels/a11y/a11y-violations.component.d.ts.map +1 -1
  87. package/dist/app/panels/a11y/a11y-violations.component.js +104 -89
  88. package/dist/app/panels/a11y/severity.d.ts +9 -0
  89. package/dist/app/panels/a11y/severity.d.ts.map +1 -0
  90. package/dist/app/panels/a11y/severity.js +12 -0
  91. package/dist/app/panels/controls/non-editable-input-types.d.ts +9 -1
  92. package/dist/app/panels/controls/non-editable-input-types.d.ts.map +1 -1
  93. package/dist/app/panels/controls/non-editable-input-types.js +18 -0
  94. package/dist/app/panels/controls/prism-controls-panel.component.d.ts +2 -1
  95. package/dist/app/panels/controls/prism-controls-panel.component.d.ts.map +1 -1
  96. package/dist/app/panels/controls/prism-controls-panel.component.js +77 -59
  97. package/dist/app/panels/events/prism-events-panel.component.d.ts +2 -0
  98. package/dist/app/panels/events/prism-events-panel.component.d.ts.map +1 -1
  99. package/dist/app/panels/events/prism-events-panel.component.js +20 -7
  100. package/dist/app/panels/events/prism-json-node.utils.d.ts +6 -0
  101. package/dist/app/panels/events/prism-json-node.utils.d.ts.map +1 -1
  102. package/dist/app/panels/events/prism-json-node.utils.js +8 -0
  103. package/dist/app/panels/panel-host/addon-panels.d.ts +11 -0
  104. package/dist/app/panels/panel-host/addon-panels.d.ts.map +1 -0
  105. package/dist/app/panels/panel-host/addon-panels.js +12 -0
  106. package/dist/app/panels/panel-host/panel-badge.d.ts +22 -0
  107. package/dist/app/panels/panel-host/panel-badge.d.ts.map +1 -1
  108. package/dist/app/panels/panel-host/panel-badge.js +56 -11
  109. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts +4 -1
  110. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts.map +1 -1
  111. package/dist/app/panels/panel-host/prism-panel-host.component.js +36 -70
  112. package/dist/app/renderer/composition.d.ts +20 -0
  113. package/dist/app/renderer/composition.d.ts.map +1 -0
  114. package/dist/app/renderer/composition.js +26 -0
  115. package/dist/app/renderer/input-bindings.d.ts +13 -1
  116. package/dist/app/renderer/input-bindings.d.ts.map +1 -1
  117. package/dist/app/renderer/input-bindings.js +22 -1
  118. package/dist/app/renderer/prism-renderer.component.d.ts +8 -1
  119. package/dist/app/renderer/prism-renderer.component.d.ts.map +1 -1
  120. package/dist/app/renderer/prism-renderer.component.js +40 -28
  121. package/dist/app/renderer/snippet-generator.d.ts +14 -2
  122. package/dist/app/renderer/snippet-generator.d.ts.map +1 -1
  123. package/dist/app/renderer/snippet-generator.js +137 -82
  124. package/dist/app/services/navigation-item.d.ts +10 -0
  125. package/dist/app/services/navigation-item.d.ts.map +1 -0
  126. package/dist/app/services/navigation-item.js +20 -0
  127. package/dist/app/services/navigation-item.types.d.ts +8 -0
  128. package/dist/app/services/navigation-item.types.d.ts.map +1 -1
  129. package/dist/app/services/prism-layout.service.d.ts +12 -0
  130. package/dist/app/services/prism-layout.service.d.ts.map +1 -1
  131. package/dist/app/services/prism-layout.service.js +17 -7
  132. package/dist/app/services/prism-manifest.service.d.ts +4 -0
  133. package/dist/app/services/prism-manifest.service.d.ts.map +1 -1
  134. package/dist/app/services/prism-manifest.service.js +4 -0
  135. package/dist/app/services/prism-navigation.service.d.ts +12 -0
  136. package/dist/app/services/prism-navigation.service.d.ts.map +1 -1
  137. package/dist/app/services/prism-navigation.service.js +85 -19
  138. package/dist/app/services/prism-panel.service.d.ts +7 -3
  139. package/dist/app/services/prism-panel.service.d.ts.map +1 -1
  140. package/dist/app/services/prism-panel.service.js +13 -4
  141. package/dist/app/services/prism-renderer.service.d.ts +6 -0
  142. package/dist/app/services/prism-renderer.service.d.ts.map +1 -1
  143. package/dist/app/services/prism-renderer.service.js +40 -6
  144. package/dist/app/services/prism-search.service.d.ts +4 -0
  145. package/dist/app/services/prism-search.service.d.ts.map +1 -1
  146. package/dist/app/services/prism-search.service.js +29 -6
  147. package/dist/app/services/prism-theme.service.d.ts +11 -3
  148. package/dist/app/services/prism-theme.service.d.ts.map +1 -1
  149. package/dist/app/services/prism-theme.service.js +27 -19
  150. package/dist/app/services/prism-url-state.service.d.ts.map +1 -1
  151. package/dist/app/services/prism-url-state.service.js +42 -4
  152. package/dist/app/shared/badge.types.d.ts +7 -0
  153. package/dist/app/shared/badge.types.d.ts.map +1 -0
  154. package/dist/app/shared/badge.types.js +9 -0
  155. package/dist/app/shared/brand-mark.d.ts +35 -0
  156. package/dist/app/shared/brand-mark.d.ts.map +1 -0
  157. package/dist/app/shared/brand-mark.js +52 -0
  158. package/dist/app/shared/metric-bar.d.ts +6 -0
  159. package/dist/app/shared/metric-bar.d.ts.map +1 -0
  160. package/dist/app/shared/metric-bar.js +7 -0
  161. package/dist/app/shared/prism-badge.component.d.ts +21 -0
  162. package/dist/app/shared/prism-badge.component.d.ts.map +1 -0
  163. package/dist/app/shared/prism-badge.component.js +68 -0
  164. package/dist/app/shared/prism-button.component.d.ts +12 -0
  165. package/dist/app/shared/prism-button.component.d.ts.map +1 -0
  166. package/dist/app/shared/prism-button.component.js +28 -0
  167. package/dist/app/shared/prism-icon-button.component.d.ts +17 -0
  168. package/dist/app/shared/prism-icon-button.component.d.ts.map +1 -0
  169. package/dist/app/shared/prism-icon-button.component.js +37 -0
  170. package/dist/app/shared/prism-list-row.component.d.ts +17 -0
  171. package/dist/app/shared/prism-list-row.component.d.ts.map +1 -0
  172. package/dist/app/shared/prism-list-row.component.js +57 -0
  173. package/dist/app/shared/prism-logo.component.d.ts +24 -0
  174. package/dist/app/shared/prism-logo.component.d.ts.map +1 -0
  175. package/dist/app/shared/prism-logo.component.js +77 -0
  176. package/dist/app/shared/prism-metric-badge.component.d.ts +9 -4
  177. package/dist/app/shared/prism-metric-badge.component.d.ts.map +1 -1
  178. package/dist/app/shared/prism-metric-badge.component.js +33 -12
  179. package/dist/app/shared/prism-metric-card.component.d.ts +30 -0
  180. package/dist/app/shared/prism-metric-card.component.d.ts.map +1 -0
  181. package/dist/app/shared/prism-metric-card.component.js +111 -0
  182. package/dist/app/shared/prism-panel-toolbar.component.d.ts +13 -0
  183. package/dist/app/shared/prism-panel-toolbar.component.d.ts.map +1 -0
  184. package/dist/app/shared/prism-panel-toolbar.component.js +28 -0
  185. package/dist/app/shared/prism-segmented.component.d.ts +25 -0
  186. package/dist/app/shared/prism-segmented.component.d.ts.map +1 -0
  187. package/dist/app/shared/prism-segmented.component.js +77 -0
  188. package/dist/app/shared/prism-tabs.component.d.ts +44 -0
  189. package/dist/app/shared/prism-tabs.component.d.ts.map +1 -0
  190. package/dist/app/shared/prism-tabs.component.js +134 -0
  191. package/dist/app/shared/roving-focus.d.ts +13 -0
  192. package/dist/app/shared/roving-focus.d.ts.map +1 -0
  193. package/dist/app/shared/roving-focus.js +34 -0
  194. package/dist/app/shell/prism-shell.component.d.ts +13 -0
  195. package/dist/app/shell/prism-shell.component.d.ts.map +1 -1
  196. package/dist/app/shell/prism-shell.component.js +57 -28
  197. package/dist/app/shell/should-select-first.d.ts +17 -0
  198. package/dist/app/shell/should-select-first.d.ts.map +1 -0
  199. package/dist/app/shell/should-select-first.js +13 -0
  200. package/dist/app/sidebar/navigation-decorations.d.ts +23 -1
  201. package/dist/app/sidebar/navigation-decorations.d.ts.map +1 -1
  202. package/dist/app/sidebar/navigation-decorations.js +33 -2
  203. package/dist/app/sidebar/prism-sidebar.component.d.ts +5 -15
  204. package/dist/app/sidebar/prism-sidebar.component.d.ts.map +1 -1
  205. package/dist/app/sidebar/prism-sidebar.component.js +89 -77
  206. package/dist/app/theme/deprecated-tokens.d.ts +15 -0
  207. package/dist/app/theme/deprecated-tokens.d.ts.map +1 -0
  208. package/dist/app/theme/deprecated-tokens.js +22 -0
  209. package/dist/app/theme/favicon.d.ts +3 -0
  210. package/dist/app/theme/favicon.d.ts.map +1 -0
  211. package/dist/app/theme/favicon.js +3 -0
  212. package/dist/app/theme/prism-default-theme.d.ts.map +1 -1
  213. package/dist/app/theme/prism-default-theme.js +116 -61
  214. package/dist/app/theme/resolve-theme-tokens.d.ts +29 -0
  215. package/dist/app/theme/resolve-theme-tokens.d.ts.map +1 -0
  216. package/dist/app/theme/resolve-theme-tokens.js +43 -0
  217. package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts +4 -7
  218. package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts.map +1 -1
  219. package/dist/app/variant-ribbon/prism-variant-ribbon.component.js +31 -69
  220. package/dist/app/view-tab-bar/next-view-id.d.ts +7 -1
  221. package/dist/app/view-tab-bar/next-view-id.d.ts.map +1 -1
  222. package/dist/app/view-tab-bar/next-view-id.js +9 -1
  223. package/dist/app/view-tab-bar/panel-inputs.d.ts +28 -0
  224. package/dist/app/view-tab-bar/panel-inputs.d.ts.map +1 -0
  225. package/dist/app/view-tab-bar/panel-inputs.js +41 -0
  226. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts +2 -3
  227. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts.map +1 -1
  228. package/dist/app/view-tab-bar/prism-view-panel-host.component.js +9 -9
  229. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts +6 -0
  230. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts.map +1 -1
  231. package/dist/app/view-tab-bar/prism-view-tab-bar.component.js +22 -29
  232. package/dist/builder/config-loader/deprecated-options.d.ts +4 -2
  233. package/dist/builder/config-loader/deprecated-options.d.ts.map +1 -1
  234. package/dist/builder/config-loader/deprecated-options.js +13 -2
  235. package/dist/builder/manifest/composition-wrapper.generator.d.ts +14 -0
  236. package/dist/builder/manifest/composition-wrapper.generator.d.ts.map +1 -0
  237. package/dist/builder/manifest/composition-wrapper.generator.js +66 -0
  238. package/dist/builder/manifest/host-parser.d.ts +2 -0
  239. package/dist/builder/manifest/host-parser.d.ts.map +1 -1
  240. package/dist/builder/manifest/host-parser.js +9 -4
  241. package/dist/builder/manifest/manifest-imports.d.ts +34 -0
  242. package/dist/builder/manifest/manifest-imports.d.ts.map +1 -0
  243. package/dist/builder/manifest/manifest-imports.js +91 -0
  244. package/dist/builder/manifest/runtime-manifest.generator.d.ts +13 -0
  245. package/dist/builder/manifest/runtime-manifest.generator.d.ts.map +1 -1
  246. package/dist/builder/manifest/runtime-manifest.generator.js +135 -64
  247. package/dist/builder/manifest/selector-element.d.ts +16 -0
  248. package/dist/builder/manifest/selector-element.d.ts.map +1 -0
  249. package/dist/builder/manifest/selector-element.js +46 -0
  250. package/dist/builder/manifest/template-literal.d.ts +3 -0
  251. package/dist/builder/manifest/template-literal.d.ts.map +1 -0
  252. package/dist/builder/manifest/template-literal.js +4 -0
  253. package/dist/builder/plugin-runner/plugin-runner.d.ts.map +1 -1
  254. package/dist/builder/plugin-runner/plugin-runner.js +29 -26
  255. package/dist/builder/scanner/api/angular-decorators.d.ts +84 -0
  256. package/dist/builder/scanner/api/angular-decorators.d.ts.map +1 -0
  257. package/dist/builder/scanner/api/angular-decorators.js +157 -0
  258. package/dist/builder/scanner/api/component-api.extractor.d.ts +13 -0
  259. package/dist/builder/scanner/api/component-api.extractor.d.ts.map +1 -0
  260. package/dist/builder/scanner/api/component-api.extractor.js +104 -0
  261. package/dist/builder/scanner/api/doc-tags.d.ts +13 -0
  262. package/dist/builder/scanner/api/doc-tags.d.ts.map +1 -0
  263. package/dist/builder/scanner/api/doc-tags.js +101 -0
  264. package/dist/builder/scanner/api/export-index.d.ts +18 -0
  265. package/dist/builder/scanner/api/export-index.d.ts.map +1 -0
  266. package/dist/builder/scanner/api/export-index.js +22 -0
  267. package/dist/builder/scanner/api/member.extractor.d.ts +90 -0
  268. package/dist/builder/scanner/api/member.extractor.d.ts.map +1 -0
  269. package/dist/builder/scanner/api/member.extractor.js +270 -0
  270. package/dist/builder/scanner/api/pipe-api.extractor.d.ts +12 -0
  271. package/dist/builder/scanner/api/pipe-api.extractor.d.ts.map +1 -0
  272. package/dist/builder/scanner/api/pipe-api.extractor.js +52 -0
  273. package/dist/builder/scanner/api/service-api.extractor.d.ts +14 -0
  274. package/dist/builder/scanner/api/service-api.extractor.d.ts.map +1 -0
  275. package/dist/builder/scanner/api/service-api.extractor.js +119 -0
  276. package/dist/builder/scanner/api/setup.reader.d.ts +26 -0
  277. package/dist/builder/scanner/api/setup.reader.d.ts.map +1 -0
  278. package/dist/builder/scanner/api/setup.reader.js +89 -0
  279. package/dist/builder/scanner/api/type-collector.d.ts +24 -0
  280. package/dist/builder/scanner/api/type-collector.d.ts.map +1 -0
  281. package/dist/builder/scanner/api/type-collector.js +211 -0
  282. package/dist/builder/scanner/ast-utils.d.ts +8 -0
  283. package/dist/builder/scanner/ast-utils.d.ts.map +1 -1
  284. package/dist/builder/scanner/ast-utils.js +37 -1
  285. package/dist/builder/scanner/class-hierarchy.d.ts +5 -3
  286. package/dist/builder/scanner/class-hierarchy.d.ts.map +1 -1
  287. package/dist/builder/scanner/class-hierarchy.js +12 -6
  288. package/dist/builder/scanner/component.scanner.d.ts +60 -6
  289. package/dist/builder/scanner/component.scanner.d.ts.map +1 -1
  290. package/dist/builder/scanner/component.scanner.js +209 -57
  291. package/dist/builder/scanner/composition/compose-template.d.ts +36 -0
  292. package/dist/builder/scanner/composition/compose-template.d.ts.map +1 -0
  293. package/dist/builder/scanner/composition/compose-template.js +187 -0
  294. package/dist/builder/scanner/composition/declarables.d.ts +54 -0
  295. package/dist/builder/scanner/composition/declarables.d.ts.map +1 -0
  296. package/dist/builder/scanner/composition/declarables.js +182 -0
  297. package/dist/builder/scanner/composition/match-declarables.d.ts +43 -0
  298. package/dist/builder/scanner/composition/match-declarables.d.ts.map +1 -0
  299. package/dist/builder/scanner/composition/match-declarables.js +131 -0
  300. package/dist/builder/scanner/composition/read-composition.d.ts +77 -0
  301. package/dist/builder/scanner/composition/read-composition.d.ts.map +1 -0
  302. package/dist/builder/scanner/composition/read-composition.js +302 -0
  303. package/dist/builder/scanner/composition/template-elements.d.ts +12 -0
  304. package/dist/builder/scanner/composition/template-elements.d.ts.map +1 -0
  305. package/dist/builder/scanner/composition/template-elements.js +41 -0
  306. package/dist/builder/scanner/index.d.ts +4 -0
  307. package/dist/builder/scanner/index.d.ts.map +1 -1
  308. package/dist/builder/scanner/index.js +2 -0
  309. package/dist/builder/scanner/input.extractor.d.ts +31 -2
  310. package/dist/builder/scanner/input.extractor.d.ts.map +1 -1
  311. package/dist/builder/scanner/input.extractor.js +52 -15
  312. package/dist/builder/scanner/pipe.scanner.d.ts +29 -0
  313. package/dist/builder/scanner/pipe.scanner.d.ts.map +1 -0
  314. package/dist/builder/scanner/pipe.scanner.js +65 -0
  315. package/dist/builder/scanner/scanner.d.ts +25 -1
  316. package/dist/builder/scanner/scanner.d.ts.map +1 -1
  317. package/dist/builder/scanner/scanner.js +60 -26
  318. package/dist/builder/scanner/service/angular-decorators.d.ts +80 -0
  319. package/dist/builder/scanner/service/angular-decorators.d.ts.map +1 -0
  320. package/dist/builder/scanner/service/angular-decorators.js +154 -0
  321. package/dist/builder/scanner/service/doc-tags.d.ts +13 -0
  322. package/dist/builder/scanner/service/doc-tags.d.ts.map +1 -0
  323. package/dist/builder/scanner/service/doc-tags.js +97 -0
  324. package/dist/builder/scanner/service/export-index.d.ts +18 -0
  325. package/dist/builder/scanner/service/export-index.d.ts.map +1 -0
  326. package/dist/builder/scanner/service/export-index.js +22 -0
  327. package/dist/builder/scanner/service/member.extractor.d.ts +65 -0
  328. package/dist/builder/scanner/service/member.extractor.d.ts.map +1 -0
  329. package/dist/builder/scanner/service/member.extractor.js +216 -0
  330. package/dist/builder/scanner/service/pipe-api.extractor.d.ts +12 -0
  331. package/dist/builder/scanner/service/pipe-api.extractor.d.ts.map +1 -0
  332. package/dist/builder/scanner/service/pipe-api.extractor.js +72 -0
  333. package/dist/builder/scanner/service/service-api.extractor.d.ts +14 -0
  334. package/dist/builder/scanner/service/service-api.extractor.d.ts.map +1 -0
  335. package/dist/builder/scanner/service/service-api.extractor.js +119 -0
  336. package/dist/builder/scanner/service/setup.reader.d.ts +26 -0
  337. package/dist/builder/scanner/service/setup.reader.d.ts.map +1 -0
  338. package/dist/builder/scanner/service/setup.reader.js +89 -0
  339. package/dist/builder/scanner/service/type-collector.d.ts +23 -0
  340. package/dist/builder/scanner/service/type-collector.d.ts.map +1 -0
  341. package/dist/builder/scanner/service/type-collector.js +210 -0
  342. package/dist/builder/scanner/service.scanner.d.ts +26 -0
  343. package/dist/builder/scanner/service.scanner.d.ts.map +1 -0
  344. package/dist/builder/scanner/service.scanner.js +61 -0
  345. package/dist/builder/scanner/showcase-diagnostics.d.ts +60 -1
  346. package/dist/builder/scanner/showcase-diagnostics.d.ts.map +1 -1
  347. package/dist/builder/scanner/showcase-diagnostics.js +114 -1
  348. package/dist/builder/shared/prism-pipeline.d.ts +6 -0
  349. package/dist/builder/shared/prism-pipeline.d.ts.map +1 -1
  350. package/dist/builder/shared/prism-pipeline.js +43 -5
  351. package/dist/decorator/index.d.ts +1 -1
  352. package/dist/decorator/index.d.ts.map +1 -1
  353. package/dist/decorator/showcase.types.d.ts +79 -9
  354. package/dist/decorator/showcase.types.d.ts.map +1 -1
  355. package/dist/plugin/index.d.ts +6 -1
  356. package/dist/plugin/index.d.ts.map +1 -1
  357. package/dist/plugin/index.js +4 -0
  358. package/dist/plugin/pipe.types.d.ts +36 -0
  359. package/dist/plugin/pipe.types.d.ts.map +1 -0
  360. package/dist/plugin/pipe.types.js +1 -0
  361. package/dist/plugin/plugin.types.d.ts +140 -3
  362. package/dist/plugin/plugin.types.d.ts.map +1 -1
  363. package/dist/plugin/service.types.d.ts +124 -0
  364. package/dist/plugin/service.types.d.ts.map +1 -0
  365. package/dist/plugin/service.types.js +1 -0
  366. package/dist/plugin/status.d.ts +27 -0
  367. package/dist/plugin/status.d.ts.map +1 -0
  368. package/dist/plugin/status.js +26 -0
  369. package/dist/shared/composition.d.ts +30 -0
  370. package/dist/shared/composition.d.ts.map +1 -0
  371. package/dist/shared/composition.js +29 -0
  372. package/dist/shared/pseudo-state.type.d.ts +2 -1
  373. package/dist/shared/pseudo-state.type.d.ts.map +1 -1
  374. package/dist/shared/void-elements.d.ts +3 -0
  375. package/dist/shared/void-elements.d.ts.map +1 -0
  376. package/dist/shared/void-elements.js +2 -0
  377. package/package.json +1 -1
@@ -1,3 +1,46 @@
1
+ import { deriveA11ySummary } from '../panels/a11y/a11y-summary.js';
2
+ const isVerdict = (v) => v === 'ok' || v === 'warn' || v === 'danger';
3
+ /**
4
+ * The head's metrics, in source order: coverage, the a11y score, the visual
5
+ * regression headline.
6
+ *
7
+ * It reads verdicts rather than computing them. Coverage and visual regression
8
+ * take what their plugins derived at build time from their own thresholds; the
9
+ * a11y score is the live audit graded by `deriveA11ySummary`, the rule the tab,
10
+ * the sidebar and the header use. A figure without a verdict stays `none`
11
+ * instead of being graded on a scale of the head's own.
12
+ */
13
+ export function headMetrics(input) {
14
+ const coverage = input.meta?.['coverage'];
15
+ const vrt = input.meta?.['visualRegression'];
16
+ const t = coverage?.thresholds;
17
+ const coverageTarget = t ? Math.round((t.lines + t.branches + t.functions + t.statements) / 4) : null;
18
+ const hasCoverage = coverage?.found === true && typeof coverage.score === 'number';
19
+ const a11y = input.a11y;
20
+ return [
21
+ {
22
+ id: 'coverage',
23
+ label: 'Coverage',
24
+ value: hasCoverage ? `${coverage.score}%` : '—',
25
+ threshold: coverageTarget === null ? '—' : `≥ ${coverageTarget}%`,
26
+ variant: hasCoverage && isVerdict(coverage.summary?.variant) ? coverage.summary.variant : 'none'
27
+ },
28
+ {
29
+ id: 'a11y',
30
+ label: 'A11y score',
31
+ value: a11y === null ? '—' : String(a11y.score),
32
+ threshold: `≥ ${input.a11yThresholds.score}`,
33
+ variant: a11y === null ? 'none' : deriveA11ySummary(a11y, input.a11yThresholds).variant
34
+ },
35
+ {
36
+ id: 'vrt',
37
+ label: 'VRT diff',
38
+ value: vrt?.found && vrt.summary ? vrt.summary.value : '—',
39
+ threshold: 'no changes',
40
+ variant: vrt?.found && isVerdict(vrt.summary?.variant) ? vrt.summary.variant : 'none'
41
+ }
42
+ ];
43
+ }
1
44
  const SEVERITY = {
2
45
  none: 0,
3
46
  ok: 0,
@@ -5,35 +48,22 @@ const SEVERITY = {
5
48
  danger: 2
6
49
  };
7
50
  /**
8
- * Folds the head's metrics into what one chip can say.
9
- *
10
- * A pure function instead of a computed inside the component:
11
- * components using signal inputs cannot be rendered through TestBed in this
12
- * repo's Jest setup, so any logic left in a template is logic that never gets
13
- * a test. This mirrors `decorateItem` in the sidebar, which resolves the same
14
- * kind of question for navigation marks.
51
+ * The one metric the chip shows: the worst, ties resolved by source order so
52
+ * the chip does not flicker between two equally bad ones; when everything is
53
+ * fine, the first measured one in the ok tone. `null` when nothing is
54
+ * measured, and the head shows no gauge.
15
55
  *
16
- * Ties resolve by source order so the chip shows a stable metric across
17
- * renders rather than flickering between two equally bad ones.
56
+ * A pure function instead of a computed inside the component: components using
57
+ * signal inputs cannot be rendered through TestBed in this repo's Jest setup.
18
58
  */
19
- export function summarizeMetrics(metrics) {
20
- let measured = 0;
21
- let worst = null;
22
- let deviating = 0;
23
- for (const m of metrics) {
24
- if (m.variant !== 'none')
25
- measured++;
26
- if (SEVERITY[m.variant] === 0)
27
- continue;
28
- deviating++;
29
- if (worst === null || SEVERITY[m.variant] > SEVERITY[worst.variant]) {
59
+ export function gaugeChip(metrics) {
60
+ const measured = metrics.filter((m) => m.variant !== 'none');
61
+ if (measured.length === 0)
62
+ return null;
63
+ let worst = measured[0];
64
+ for (const m of measured) {
65
+ if (SEVERITY[m.variant] > SEVERITY[worst.variant])
30
66
  worst = m;
31
- }
32
67
  }
33
- return {
34
- measured,
35
- worst,
36
- others: deviating > 0 ? deviating - 1 : 0,
37
- variant: worst === null ? 'ok' : worst.variant
38
- };
68
+ return { metric: worst, variant: worst.variant, measured: measured.length };
39
69
  }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The plain facts about a pipe for the head's info popover: whether it is pure,
3
+ * and where to import it from. Both are optional on a scanned pipe (purity when
4
+ * `@Pipe({ pure })` could not be read, the import path when the scanner could not
5
+ * place the pipe), so a fact the scanner could not establish is left out rather
6
+ * than guessed.
7
+ */
8
+ export declare function pipeFacts(pure: boolean | undefined, importPath: string | undefined): string[];
9
+ //# sourceMappingURL=pipe-facts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe-facts.d.ts","sourceRoot":"","sources":["../../../src/app/component-head/pipe-facts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAM7F"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The plain facts about a pipe for the head's info popover: whether it is pure,
3
+ * and where to import it from. Both are optional on a scanned pipe (purity when
4
+ * `@Pipe({ pure })` could not be read, the import path when the scanner could not
5
+ * place the pipe), so a fact the scanner could not establish is left out rather
6
+ * than guessed.
7
+ */
8
+ export function pipeFacts(pure, importPath) {
9
+ const facts = [];
10
+ if (pure !== undefined)
11
+ facts.push(pure ? 'Pure' : 'Impure');
12
+ if (importPath)
13
+ facts.push(importPath);
14
+ return facts;
15
+ }
@@ -1,41 +1,38 @@
1
1
  import type { ComponentStatus } from '../../decorator/showcase.types.js';
2
- import type { HeadMetric } from './head-metrics.js';
3
2
  import * as i0 from "@angular/core";
4
3
  interface StatusBadge {
5
4
  label: string;
6
5
  tooltip: string;
6
+ tone: 'success' | 'warn' | 'danger';
7
7
  }
8
8
  export declare class PrismComponentHeadComponent {
9
9
  private readonly navigationService;
10
10
  private readonly auditService;
11
- protected readonly comp: import("@angular/core").Signal<import("../../index.js").RuntimeComponent | null>;
11
+ private readonly manifest;
12
+ private readonly config;
13
+ protected readonly comp: import("@angular/core").Signal<import("../../plugin/plugin.types.js").RuntimeComponent | null>;
14
+ protected readonly service: import("@angular/core").Signal<import("../../index.js").RuntimeService | null>;
15
+ protected readonly pipe: import("@angular/core").Signal<import("../../index.js").RuntimePipe | null>;
16
+ /** What the head introduces: the active component or, on a service or pipe page, the service or the pipe. */
17
+ protected readonly subject: import("@angular/core").Signal<import("../../index.js").ScannedService | import("../../index.js").ScannedPipe | import("../../plugin/plugin.types.js").ScannedComponent | null>;
12
18
  protected readonly category: import("@angular/core").Signal<string>;
19
+ /** The selector of a component. A service or a pipe has none. */
20
+ protected readonly selector: import("@angular/core").Signal<string | undefined>;
21
+ /** A pipe is used in a template as `| name`, so that is what its code block shows. */
22
+ protected readonly code: import("@angular/core").Signal<string | undefined>;
23
+ protected readonly facts: import("@angular/core").Signal<string[]>;
13
24
  protected readonly variantCount: import("@angular/core").Signal<number>;
14
25
  protected readonly stateCount: import("@angular/core").Signal<number>;
15
26
  protected readonly status: import("@angular/core").Signal<ComponentStatus | undefined>;
16
27
  protected readonly statusBadge: import("@angular/core").Signal<StatusBadge | null>;
17
- protected readonly coveragePercent: import("@angular/core").Signal<number | null>;
18
- protected readonly a11yScore: import("@angular/core").Signal<number | null>;
19
28
  /**
20
- * The visual regression headline, as the plugin already derived it.
21
- *
22
- * Read whole rather than recomputed: the colour follows the plugin's status
23
- * semantics (red for any changed variant, amber for ones that could not be
24
- * compared), and duplicating that rule here would mean the stat and the
25
- * plugin's own panel could disagree about the same component.
29
+ * The configured a11y thresholds, resolved the way the panel host and the
30
+ * header badge resolve them, so the gauge grades the live audit on the
31
+ * same scale as the tab and the sidebar.
26
32
  */
27
- protected readonly vrtStat: import("@angular/core").Signal<{
28
- value: string;
29
- variant: "ok" | "warn" | "danger";
30
- } | null>;
31
- /**
32
- * The full metric list for the gauge, in source order.
33
- *
34
- * Order matters: `summarizeMetrics` breaks severity ties by position, so
35
- * this sequence is what makes the chip show a stable metric rather than
36
- * flickering between two equally bad ones.
37
- */
38
- protected readonly metrics: import("@angular/core").Signal<HeadMetric[]>;
33
+ private readonly a11yThresholds;
34
+ /** The full metric list for the gauge, in source order. */
35
+ protected readonly metrics: import("@angular/core").Signal<import("./head-metrics.js").HeadMetric[]>;
39
36
  private readonly componentMeta;
40
37
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismComponentHeadComponent, never>;
41
38
  static ɵcmp: i0.ɵɵComponentDeclaration<PrismComponentHeadComponent, "prism-component-head", never, {}, {}, never, ["[headEnd]"], 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":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;;AAIpD,UAAU,WAAW;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACnB;AAqBD,qBAQa,2BAA2B;IACpC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IAEzD,SAAS,CAAC,QAAQ,CAAC,IAAI,mFAA4D;IAEnF,SAAS,CAAC,QAAQ,CAAC,QAAQ,yCAIxB;IAEH,SAAS,CAAC,QAAQ,CAAC,YAAY,yCAI5B;IAEH,SAAS,CAAC,QAAQ,CAAC,UAAU,yCAI1B;IAEH,SAAS,CAAC,QAAQ,CAAC,MAAM,8DAAwF;IAEjH,SAAS,CAAC,QAAQ,CAAC,WAAW,qDAI3B;IAEH,SAAS,CAAC,QAAQ,CAAC,eAAe,gDAM/B;IAWH,SAAS,CAAC,QAAQ,CAAC,SAAS,gDAEzB;IAEH;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,OAAO;eACf,MAAM;iBACJ,IAAI,GAAG,MAAM,GAAG,QAAQ;cAQlC;IAEH;;;;;;OAMG;IACH,SAAS,CAAC,QAAQ,CAAC,OAAO,+CAyBvB;IAEH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAK3B;yCAhHM,2BAA2B;2CAA3B,2BAA2B;CAiHvC"}
1
+ {"version":3,"file":"prism-component-head.component.d.ts","sourceRoot":"","sources":["../../../src/app/component-head/prism-component-head.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;;AAczE,UAAU,WAAW;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;CACvC;AAyBD,qBAQa,2BAA2B;IACpC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IACpE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAE9D,SAAS,CAAC,QAAQ,CAAC,IAAI,iGAA4D;IACnF,SAAS,CAAC,QAAQ,CAAC,OAAO,iFAA0D;IACpF,SAAS,CAAC,QAAQ,CAAC,IAAI,8EAAuD;IAE9E,6GAA6G;IAC7G,SAAS,CAAC,QAAQ,CAAC,OAAO,kLAA0F;IAEpH,SAAS,CAAC,QAAQ,CAAC,QAAQ,yCAA8E;IAEzG,iEAAiE;IACjE,SAAS,CAAC,QAAQ,CAAC,QAAQ,qDAA4D;IAEvF,sFAAsF;IACtF,SAAS,CAAC,QAAQ,CAAC,IAAI,qDAIpB;IAEH,SAAS,CAAC,QAAQ,CAAC,KAAK,2CAOrB;IAEH,SAAS,CAAC,QAAQ,CAAC,YAAY,yCAI5B;IAEH,SAAS,CAAC,QAAQ,CAAC,UAAU,yCAI1B;IAEH,SAAS,CAAC,QAAQ,CAAC,MAAM,8DAAsF;IAE/G,SAAS,CAAC,QAAQ,CAAC,WAAW,qDAI3B;IAEH;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAI5B;IAEH,2DAA2D;IAC3D,SAAS,CAAC,QAAQ,CAAC,OAAO,2EAMxB;IAEF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAK3B;yCA/EM,2BAA2B;2CAA3B,2BAA2B;CAgFvC"}
@@ -1,24 +1,32 @@
1
1
  import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';
2
2
  import { A11yAuditService } from '../panels/a11y/a11y-audit.service.js';
3
+ import { resolveA11yThresholds } from '../panels/a11y/a11y-thresholds.js';
3
4
  import { PrismNavigationService } from '../services/prism-navigation.service.js';
5
+ import { PrismBadgeComponent } from '../shared/prism-badge.component.js';
6
+ import { PRISM_CONFIG, PRISM_MANIFEST } from '../tokens/prism-tokens.js';
7
+ import { headMetrics } from './head-metrics.js';
8
+ import { pipeFacts } from './pipe-facts.js';
4
9
  import { PrismHeadGaugeComponent } from './prism-head-gauge.component.js';
5
10
  import { PrismHeadInfoComponent } from './prism-head-info.component.js';
11
+ import { serviceFacts } from './service-facts.js';
6
12
  import * as i0 from "@angular/core";
7
13
  const _c0 = [[["", "headEnd", ""]]];
8
14
  const _c1 = ["[headEnd]"];
9
15
  const _c2 = () => [];
10
16
  function PrismComponentHeadComponent_Conditional_0_Conditional_6_Template(rf, ctx) { if (rf & 1) {
11
- i0.ɵɵelementStart(0, "span");
12
- i0.ɵɵelement(1, "span", 8);
13
- i0.ɵɵtext(2);
14
- i0.ɵɵelementEnd();
17
+ i0.ɵɵelement(0, "prism-badge", 8);
15
18
  } if (rf & 2) {
16
19
  const badge_r1 = ctx;
17
20
  const ctx_r1 = i0.ɵɵnextContext(2);
18
- i0.ɵɵclassMap(i0.ɵɵinterpolate1("comp-status comp-status--", ctx_r1.status()));
21
+ i0.ɵɵclassProp("comp-status--wip", ctx_r1.status() === "wip");
22
+ i0.ɵɵproperty("tone", badge_r1.tone)("label", badge_r1.label);
19
23
  i0.ɵɵattribute("title", badge_r1.tooltip);
20
- i0.ɵɵadvance(2);
21
- i0.ɵɵtextInterpolate1(" ", badge_r1.label, " ");
24
+ } }
25
+ function PrismComponentHeadComponent_Conditional_0_Conditional_7_Template(rf, ctx) { if (rf & 1) {
26
+ i0.ɵɵelement(0, "prism-head-gauge", 5);
27
+ } if (rf & 2) {
28
+ const ctx_r1 = i0.ɵɵnextContext(2);
29
+ i0.ɵɵproperty("metrics", ctx_r1.metrics());
22
30
  } }
23
31
  function PrismComponentHeadComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
24
32
  i0.ɵɵelementStart(0, "section", 0)(1, "span", 1);
@@ -28,54 +36,82 @@ function PrismComponentHeadComponent_Conditional_0_Template(rf, ctx) { if (rf &
28
36
  i0.ɵɵtext(4);
29
37
  i0.ɵɵelementEnd();
30
38
  i0.ɵɵelement(5, "prism-head-info", 3);
31
- i0.ɵɵconditionalCreate(6, PrismComponentHeadComponent_Conditional_0_Conditional_6_Template, 3, 5, "span", 4);
32
- i0.ɵɵelement(7, "span", 5)(8, "prism-head-gauge", 6);
39
+ i0.ɵɵconditionalCreate(6, PrismComponentHeadComponent_Conditional_0_Conditional_6_Template, 1, 5, "prism-badge", 4);
40
+ i0.ɵɵconditionalCreate(7, PrismComponentHeadComponent_Conditional_0_Conditional_7_Template, 1, 1, "prism-head-gauge", 5);
41
+ i0.ɵɵelement(8, "span", 6);
33
42
  i0.ɵɵelementStart(9, "span", 7);
34
43
  i0.ɵɵprojection(10);
35
44
  i0.ɵɵelementEnd()();
36
45
  } if (rf & 2) {
37
- let tmp_9_0;
38
- const c_r3 = ctx;
46
+ let tmp_12_0;
47
+ const s_r3 = ctx;
39
48
  const ctx_r1 = i0.ɵɵnextContext();
40
49
  i0.ɵɵadvance(2);
41
50
  i0.ɵɵtextInterpolate(ctx_r1.category());
42
51
  i0.ɵɵadvance(2);
43
- i0.ɵɵtextInterpolate(c_r3.meta.showcaseConfig.title);
52
+ i0.ɵɵtextInterpolate(s_r3.showcaseConfig.title);
44
53
  i0.ɵɵadvance();
45
- i0.ɵɵproperty("selector", c_r3.meta.componentMeta.selector)("description", c_r3.meta.showcaseConfig.description)("tags", c_r3.meta.showcaseConfig.tags ?? i0.ɵɵpureFunction0(9, _c2))("variantCount", ctx_r1.variantCount())("stateCount", ctx_r1.stateCount());
54
+ i0.ɵɵproperty("selector", ctx_r1.selector())("code", ctx_r1.code())("className", s_r3.className)("description", s_r3.showcaseConfig.description)("tags", s_r3.showcaseConfig.tags ?? i0.ɵɵpureFunction0(12, _c2))("variantCount", ctx_r1.variantCount())("stateCount", ctx_r1.stateCount())("facts", ctx_r1.facts());
46
55
  i0.ɵɵadvance();
47
- i0.ɵɵconditional((tmp_9_0 = ctx_r1.statusBadge()) ? 6 : -1, tmp_9_0);
48
- i0.ɵɵadvance(2);
49
- i0.ɵɵproperty("metrics", ctx_r1.metrics());
56
+ i0.ɵɵconditional((tmp_12_0 = ctx_r1.statusBadge()) ? 6 : -1, tmp_12_0);
57
+ i0.ɵɵadvance();
58
+ i0.ɵɵconditional(ctx_r1.comp() ? 7 : -1);
50
59
  } }
51
60
  const STATUS_BADGES = {
52
61
  stable: {
53
62
  label: 'Stable',
54
- tooltip: 'Migrated and production-ready'
63
+ tooltip: 'Migrated and production-ready',
64
+ tone: 'success'
55
65
  },
56
66
  beta: {
57
67
  label: 'Beta',
58
- tooltip: 'Beta: API may change'
68
+ tooltip: 'Beta: API may change',
69
+ tone: 'warn'
59
70
  },
60
71
  wip: {
61
72
  label: 'Work in progress',
62
- tooltip: 'Migration in progress'
73
+ tooltip: 'Migration in progress',
74
+ tone: 'warn'
63
75
  },
64
76
  deprecated: {
65
77
  label: 'Deprecated',
66
- tooltip: 'Deprecated / Legacy. Do not use in new code'
78
+ tooltip: 'Deprecated / Legacy. Do not use in new code',
79
+ tone: 'danger'
67
80
  }
68
81
  };
69
82
  export class PrismComponentHeadComponent {
70
83
  navigationService = inject(PrismNavigationService);
71
84
  auditService = inject(A11yAuditService);
85
+ manifest = inject(PRISM_MANIFEST);
86
+ config = inject(PRISM_CONFIG);
72
87
  comp = computed(() => this.navigationService.activeComponent(), /* @ts-ignore */
73
88
  ...(ngDevMode ? [{ debugName: "comp" }] : /* istanbul ignore next */ []));
74
- category = computed(() => {
75
- const c = this.comp();
76
- return c?.meta.showcaseConfig.category ?? 'Uncategorized';
77
- }, /* @ts-ignore */
89
+ service = computed(() => this.navigationService.activeService(), /* @ts-ignore */
90
+ ...(ngDevMode ? [{ debugName: "service" }] : /* istanbul ignore next */ []));
91
+ pipe = computed(() => this.navigationService.activePipe(), /* @ts-ignore */
92
+ ...(ngDevMode ? [{ debugName: "pipe" }] : /* istanbul ignore next */ []));
93
+ /** What the head introduces: the active component or, on a service or pipe page, the service or the pipe. */
94
+ subject = computed(() => this.comp()?.meta ?? this.service()?.meta ?? this.pipe()?.meta ?? null, /* @ts-ignore */
95
+ ...(ngDevMode ? [{ debugName: "subject" }] : /* istanbul ignore next */ []));
96
+ category = computed(() => this.subject()?.showcaseConfig.category ?? 'Uncategorized', /* @ts-ignore */
78
97
  ...(ngDevMode ? [{ debugName: "category" }] : /* istanbul ignore next */ []));
98
+ /** The selector of a component. A service or a pipe has none. */
99
+ selector = computed(() => this.comp()?.meta.componentMeta.selector, /* @ts-ignore */
100
+ ...(ngDevMode ? [{ debugName: "selector" }] : /* istanbul ignore next */ []));
101
+ /** A pipe is used in a template as `| name`, so that is what its code block shows. */
102
+ code = computed(() => {
103
+ const p = this.pipe();
104
+ return p ? `| ${p.meta.pipeName}` : undefined;
105
+ }, /* @ts-ignore */
106
+ ...(ngDevMode ? [{ debugName: "code" }] : /* istanbul ignore next */ []));
107
+ facts = computed(() => {
108
+ const s = this.service();
109
+ if (s)
110
+ return serviceFacts(s.meta.provision, s.meta.importPath);
111
+ const p = this.pipe();
112
+ return p ? pipeFacts(p.meta.pure, p.meta.importPath) : [];
113
+ }, /* @ts-ignore */
114
+ ...(ngDevMode ? [{ debugName: "facts" }] : /* istanbul ignore next */ []));
79
115
  variantCount = computed(() => {
80
116
  const c = this.comp();
81
117
  return c?.meta.showcaseConfig.variants?.length ?? 0;
@@ -86,81 +122,29 @@ export class PrismComponentHeadComponent {
86
122
  return c?.meta.showcaseConfig.states?.length ?? 0;
87
123
  }, /* @ts-ignore */
88
124
  ...(ngDevMode ? [{ debugName: "stateCount" }] : /* istanbul ignore next */ []));
89
- status = computed(() => this.comp()?.meta.showcaseConfig.status, /* @ts-ignore */
125
+ status = computed(() => this.subject()?.showcaseConfig.status, /* @ts-ignore */
90
126
  ...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
91
127
  statusBadge = computed(() => {
92
128
  const s = this.status();
93
129
  return s ? STATUS_BADGES[s] : null;
94
130
  }, /* @ts-ignore */
95
131
  ...(ngDevMode ? [{ debugName: "statusBadge" }] : /* istanbul ignore next */ []));
96
- coveragePercent = computed(() => {
97
- const meta = this.componentMeta();
98
- const coverage = meta?.['coverage'];
99
- if (coverage?.['found'] && typeof coverage['score'] === 'number')
100
- return coverage['score'];
101
- return null;
102
- }, /* @ts-ignore */
103
- ...(ngDevMode ? [{ debugName: "coveragePercent" }] : /* istanbul ignore next */ []));
104
- /*
105
- * No bundle metric here. Reading `meta.perf.bundle.gzipKb`/`.sizeKb` finds
106
- * nothing: `@ng-prism/plugin-perf` stores `sourceSize` and `gzipEstimate`
107
- * (see `perf.types.ts`), so the tile would read `Bundle —` everywhere.
108
- *
109
- * Before wiring it to the real keys, settle with the perf plugin whether
110
- * `gzipEstimate` is bytes or kilobytes.
111
- */
112
- a11yScore = computed(() => {
113
- return this.auditService.scoreResult()?.score ?? null;
114
- }, /* @ts-ignore */
115
- ...(ngDevMode ? [{ debugName: "a11yScore" }] : /* istanbul ignore next */ []));
116
- /**
117
- * The visual regression headline, as the plugin already derived it.
118
- *
119
- * Read whole rather than recomputed: the colour follows the plugin's status
120
- * semantics (red for any changed variant, amber for ones that could not be
121
- * compared), and duplicating that rule here would mean the stat and the
122
- * plugin's own panel could disagree about the same component.
123
- */
124
- vrtStat = computed(() => {
125
- const vrt = this.componentMeta()?.['visualRegression'];
126
- if (!vrt?.found || !vrt.summary)
127
- return null;
128
- const { value, variant } = vrt.summary;
129
- return variant === 'ok' || variant === 'warn' || variant === 'danger' ? { value, variant } : null;
130
- }, /* @ts-ignore */
131
- ...(ngDevMode ? [{ debugName: "vrtStat" }] : /* istanbul ignore next */ []));
132
132
  /**
133
- * The full metric list for the gauge, in source order.
134
- *
135
- * Order matters: `summarizeMetrics` breaks severity ties by position, so
136
- * this sequence is what makes the chip show a stable metric rather than
137
- * flickering between two equally bad ones.
133
+ * The configured a11y thresholds, resolved the way the panel host and the
134
+ * header badge resolve them, so the gauge grades the live audit on the
135
+ * same scale as the tab and the sidebar.
138
136
  */
139
- metrics = computed(() => {
140
- const coverage = this.coveragePercent();
141
- const a11y = this.a11yScore();
142
- const vrt = this.vrtStat();
143
- return [
144
- {
145
- id: 'coverage',
146
- label: 'Coverage',
147
- value: coverage === null ? '—' : `${coverage}%`,
148
- variant: coverage === null ? 'none' : coverage >= 90 ? 'ok' : 'warn'
149
- },
150
- {
151
- id: 'a11y',
152
- label: 'A11y score',
153
- value: a11y === null ? '—' : String(a11y),
154
- variant: a11y === null ? 'none' : a11y >= 90 ? 'ok' : 'warn'
155
- },
156
- {
157
- id: 'vrt',
158
- label: 'VRT diff',
159
- value: vrt === null ? '—' : vrt.value,
160
- variant: vrt === null ? 'none' : vrt.variant
161
- }
162
- ];
137
+ a11yThresholds = computed(() => {
138
+ const meta = this.manifest.meta?.['a11y'];
139
+ return resolveA11yThresholds({ ...meta?.thresholds, ...this.config.a11y?.thresholds });
163
140
  }, /* @ts-ignore */
141
+ ...(ngDevMode ? [{ debugName: "a11yThresholds" }] : /* istanbul ignore next */ []));
142
+ /** The full metric list for the gauge, in source order. */
143
+ metrics = computed(() => headMetrics({
144
+ meta: this.componentMeta(),
145
+ a11y: this.auditService.scoreResult(),
146
+ a11yThresholds: this.a11yThresholds()
147
+ }), /* @ts-ignore */
164
148
  ...(ngDevMode ? [{ debugName: "metrics" }] : /* istanbul ignore next */ []));
165
149
  componentMeta = computed(() => {
166
150
  const c = this.comp();
@@ -169,16 +153,16 @@ export class PrismComponentHeadComponent {
169
153
  }, /* @ts-ignore */
170
154
  ...(ngDevMode ? [{ debugName: "componentMeta" }] : /* istanbul ignore next */ []));
171
155
  static ɵfac = function PrismComponentHeadComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PrismComponentHeadComponent)(); };
172
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismComponentHeadComponent, selectors: [["prism-component-head"]], ngContentSelectors: _c1, decls: 1, vars: 1, consts: [[1, "comp-head"], [1, "comp-crumb"], [1, "comp-title"], [3, "selector", "description", "tags", "variantCount", "stateCount"], [3, "class"], [1, "comp-spacer"], [3, "metrics"], [1, "comp-head-end"], ["aria-hidden", "true", 1, "comp-status-mark"]], template: function PrismComponentHeadComponent_Template(rf, ctx) { if (rf & 1) {
156
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismComponentHeadComponent, selectors: [["prism-component-head"]], ngContentSelectors: _c1, decls: 1, vars: 1, consts: [[1, "comp-head"], [1, "comp-crumb"], [1, "comp-title"], [3, "selector", "code", "className", "description", "tags", "variantCount", "stateCount", "facts"], ["dot", "", 1, "comp-status", 3, "comp-status--wip", "tone", "label"], [3, "metrics"], [1, "comp-spacer"], [1, "comp-head-end"], ["dot", "", 1, "comp-status", 3, "tone", "label"]], template: function PrismComponentHeadComponent_Template(rf, ctx) { if (rf & 1) {
173
157
  i0.ɵɵprojectionDef(_c0);
174
- i0.ɵɵconditionalCreate(0, PrismComponentHeadComponent_Conditional_0_Template, 11, 10, "section", 0);
158
+ i0.ɵɵconditionalCreate(0, PrismComponentHeadComponent_Conditional_0_Template, 11, 13, "section", 0);
175
159
  } if (rf & 2) {
176
160
  let tmp_0_0;
177
- i0.ɵɵconditional((tmp_0_0 = ctx.comp()) ? 0 : -1, tmp_0_0);
178
- } }, 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}"] });
161
+ i0.ɵɵconditional((tmp_0_0 = ctx.subject()) ? 0 : -1, tmp_0_0);
162
+ } }, dependencies: [PrismHeadInfoComponent, PrismHeadGaugeComponent, PrismBadgeComponent], 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-muted);\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.comp-status--wip[_ngcontent-%COMP%] {\n --%NS%prism-badge-dot-fill: transparent;\n}"] });
179
163
  }
180
164
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismComponentHeadComponent, [{
181
165
  type: Component,
182
- 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 [stateCount]=\"stateCount()\" />\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"] }]
166
+ args: [{ selector: 'prism-component-head', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismHeadInfoComponent, PrismHeadGaugeComponent, PrismBadgeComponent], template: "@if (subject(); as s) {\n <section class=\"comp-head\">\n <span class=\"comp-crumb\">{{ category() }}</span>\n <h1 class=\"comp-title\">{{ s.showcaseConfig.title }}</h1>\n\n <prism-head-info\n [selector]=\"selector()\"\n [code]=\"code()\"\n [className]=\"s.className\"\n [description]=\"s.showcaseConfig.description\"\n [tags]=\"s.showcaseConfig.tags ?? []\"\n [variantCount]=\"variantCount()\"\n [stateCount]=\"stateCount()\"\n [facts]=\"facts()\" />\n\n @if (statusBadge(); as badge) {\n <prism-badge\n class=\"comp-status\"\n [class.comp-status--wip]=\"status() === 'wip'\"\n dot\n [tone]=\"badge.tone\"\n [label]=\"badge.label\"\n [attr.title]=\"badge.tooltip\" />\n }\n\n @if (comp()) {\n <prism-head-gauge [metrics]=\"metrics()\" />\n }\n\n <span class=\"comp-spacer\"></span>\n\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-muted);\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/* Work in progress keeps its ring: the one status without a settled state. */\n.comp-status--wip {\n --prism-badge-dot-fill: transparent;\n}\n"] }]
183
167
  }], null, null); })();
184
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismComponentHeadComponent, { className: "PrismComponentHeadComponent", filePath: "app/component-head/prism-component-head.component.ts", lineNumber: 41 }); })();
168
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismComponentHeadComponent, { className: "PrismComponentHeadComponent", filePath: "app/component-head/prism-component-head.component.ts", lineNumber: 53 }); })();
@@ -1,22 +1,18 @@
1
1
  import { type HeadMetric } from './head-metrics.js';
2
2
  import * as i0 from "@angular/core";
3
3
  /**
4
- * Measurement disclosure for the component head.
4
+ * Measurement disclosure for the component head, right behind the status.
5
5
  *
6
- * Replaces four always-present stat tiles with one element of fixed width at a
7
- * fixed position, so the row does not shift when you switch components. It
8
- * shows a plain count in the nominal green while everything is within
9
- * threshold, and the worst value in plain text when it is not. The full
10
- * readout is one click away and never disappears.
11
- *
12
- * It knows no individual metric. The list arrives already resolved, in the
13
- * same shape `decorateItem` produces for the sidebar, which is less code than
14
- * the five @if branches it replaces and keeps the colour rule in one place.
6
+ * One soft badge in the tone of the worst metric ("VRT diff 10.26%"), or of the
7
+ * first measured one when everything is fine. How many metrics were measured
8
+ * is in the tooltip, not on the chip. The readout behind it lists every metric
9
+ * with its threshold.
15
10
  */
16
11
  export declare class PrismHeadGaugeComponent {
17
12
  readonly metrics: import("@angular/core").InputSignal<readonly HeadMetric[]>;
18
- protected readonly summary: import("@angular/core").Signal<import("./head-metrics.js").GaugeSummary>;
19
- protected readonly ariaLabel: import("@angular/core").Signal<string>;
13
+ protected readonly chip: import("@angular/core").Signal<import("./head-metrics.js").GaugeChip | null>;
14
+ protected readonly tone: import("@angular/core").Signal<import("../shared/badge.types.js").BadgeTone>;
15
+ protected readonly title: import("@angular/core").Signal<string>;
20
16
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismHeadGaugeComponent, never>;
21
17
  static ɵcmp: i0.ɵɵComponentDeclaration<PrismHeadGaugeComponent, "prism-head-gauge", never, { "metrics": { "alias": "metrics"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
22
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prism-head-gauge.component.d.ts","sourceRoot":"","sources":["../../../src/app/component-head/prism-head-gauge.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAoB,MAAM,mBAAmB,CAAC;;AAGtE;;;;;;;;;;;;GAYG;AACH,qBAQa,uBAAuB;IAChC,QAAQ,CAAC,OAAO,6DAA2C;IAC3D,SAAS,CAAC,QAAQ,CAAC,OAAO,2EAAoD;IAC9E,SAAS,CAAC,QAAQ,CAAC,SAAS,yCAMzB;yCATM,uBAAuB;2CAAvB,uBAAuB;CAUnC"}
1
+ {"version":3,"file":"prism-head-gauge.component.d.ts","sourceRoot":"","sources":["../../../src/app/component-head/prism-head-gauge.component.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;;AAG/D;;;;;;;GAOG;AACH,qBAQa,uBAAuB;IAChC,QAAQ,CAAC,OAAO,6DAA2C;IAC3D,SAAS,CAAC,QAAQ,CAAC,IAAI,+EAA6C;IACpE,SAAS,CAAC,QAAQ,CAAC,IAAI,+EAIpB;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,yCAKrB;yCAbM,uBAAuB;2CAAvB,uBAAuB;CAcnC"}