@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,91 +1,75 @@
1
1
  import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
2
- import { summarizeMetrics } from './head-metrics.js';
2
+ import { toneForStatus } from '../shared/badge.types.js';
3
+ import { PrismBadgeComponent } from '../shared/prism-badge.component.js';
4
+ import { gaugeChip } from './head-metrics.js';
3
5
  import { PrismStatComponent } from './prism-stat.component.js';
4
6
  import * as i0 from "@angular/core";
5
7
  const _forTrack0 = ($index, $item) => $item.id;
6
- function PrismHeadGaugeComponent_Conditional_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
7
- i0.ɵɵelementStart(0, "span", 5);
8
- i0.ɵɵtext(1);
9
- i0.ɵɵelementEnd();
8
+ function PrismHeadGaugeComponent_Conditional_0_For_11_Template(rf, ctx) { if (rf & 1) {
9
+ i0.ɵɵelement(0, "prism-stat", 4);
10
10
  } if (rf & 2) {
11
- const ctx_r0 = i0.ɵɵnextContext(2);
12
- i0.ɵɵadvance();
13
- i0.ɵɵtextInterpolate1("+", ctx_r0.summary().others);
11
+ const m_r1 = ctx.$implicit;
12
+ i0.ɵɵproperty("label", m_r1.label)("threshold", m_r1.threshold)("value", m_r1.value)("variant", m_r1.variant);
14
13
  } }
15
- function PrismHeadGaugeComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
16
- i0.ɵɵelementStart(0, "span", 2);
17
- i0.ɵɵtext(1);
14
+ function PrismHeadGaugeComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
15
+ i0.ɵɵelementStart(0, "button", 0);
16
+ i0.ɵɵelement(1, "prism-badge", 1);
18
17
  i0.ɵɵelementEnd();
19
- i0.ɵɵconditionalCreate(2, PrismHeadGaugeComponent_Conditional_2_Conditional_2_Template, 2, 1, "span", 5);
20
- } if (rf & 2) {
21
- const worst_r2 = ctx;
22
- const ctx_r0 = i0.ɵɵnextContext();
23
- i0.ɵɵadvance();
24
- i0.ɵɵtextInterpolate2("", worst_r2.label, " ", worst_r2.value);
25
- i0.ɵɵadvance();
26
- i0.ɵɵconditional(ctx_r0.summary().others > 0 ? 2 : -1);
27
- } }
28
- function PrismHeadGaugeComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
29
- i0.ɵɵelementStart(0, "span", 2);
30
- i0.ɵɵtext(1);
18
+ i0.ɵɵelementStart(2, "div", 2)(3, "div", 3)(4, "span");
19
+ i0.ɵɵtext(5, "Metric");
20
+ i0.ɵɵelementEnd();
21
+ i0.ɵɵelementStart(6, "span");
22
+ i0.ɵɵtext(7, "Threshold");
23
+ i0.ɵɵelementEnd();
24
+ i0.ɵɵelementStart(8, "span");
25
+ i0.ɵɵtext(9, "Value");
26
+ i0.ɵɵelementEnd()();
27
+ i0.ɵɵrepeaterCreate(10, PrismHeadGaugeComponent_Conditional_0_For_11_Template, 1, 4, "prism-stat", 4, _forTrack0);
31
28
  i0.ɵɵelementEnd();
32
29
  } if (rf & 2) {
33
- const ctx_r0 = i0.ɵɵnextContext();
30
+ const c_r2 = ctx;
31
+ const ctx_r2 = i0.ɵɵnextContext();
32
+ i0.ɵɵattribute("aria-label", c_r2.metric.label + " " + c_r2.metric.value + ". " + ctx_r2.title())("title", ctx_r2.title());
34
33
  i0.ɵɵadvance();
35
- i0.ɵɵtextInterpolate(ctx_r0.summary().measured);
36
- } }
37
- function PrismHeadGaugeComponent_For_6_Template(rf, ctx) { if (rf & 1) {
38
- i0.ɵɵelement(0, "prism-stat", 4);
39
- } if (rf & 2) {
40
- const m_r3 = ctx.$implicit;
41
- i0.ɵɵproperty("label", m_r3.label)("value", m_r3.value)("variant", m_r3.variant);
34
+ i0.ɵɵproperty("tone", ctx_r2.tone())("label", c_r2.metric.label)("value", c_r2.metric.value);
35
+ i0.ɵɵadvance(9);
36
+ i0.ɵɵrepeater(ctx_r2.metrics());
42
37
  } }
43
38
  /**
44
- * Measurement disclosure for the component head.
45
- *
46
- * Replaces four always-present stat tiles with one element of fixed width at a
47
- * fixed position, so the row does not shift when you switch components. It
48
- * shows a plain count in the nominal green while everything is within
49
- * threshold, and the worst value in plain text when it is not. The full
50
- * readout is one click away and never disappears.
39
+ * Measurement disclosure for the component head, right behind the status.
51
40
  *
52
- * It knows no individual metric. The list arrives already resolved, in the
53
- * same shape `decorateItem` produces for the sidebar, which is less code than
54
- * the five @if branches it replaces and keeps the colour rule in one place.
41
+ * One soft badge in the tone of the worst metric ("VRT diff 10.26%"), or of the
42
+ * first measured one when everything is fine. How many metrics were measured
43
+ * is in the tooltip, not on the chip. The readout behind it lists every metric
44
+ * with its threshold.
55
45
  */
56
46
  export class PrismHeadGaugeComponent {
57
47
  metrics = input.required(/* @ts-ignore */
58
48
  ...(ngDevMode ? [{ debugName: "metrics" }] : /* istanbul ignore next */ []));
59
- summary = computed(() => summarizeMetrics(this.metrics()), /* @ts-ignore */
60
- ...(ngDevMode ? [{ debugName: "summary" }] : /* istanbul ignore next */ []));
61
- ariaLabel = computed(() => {
62
- const s = this.summary();
63
- return s.worst === null
64
- ? `${s.measured} metrics, all within threshold`
65
- : `${s.worst.label} ${s.worst.value}${s.others > 0 ? `, ${s.others} more deviating` : ''}`;
49
+ chip = computed(() => gaugeChip(this.metrics()), /* @ts-ignore */
50
+ ...(ngDevMode ? [{ debugName: "chip" }] : /* istanbul ignore next */ []));
51
+ tone = computed(() => {
52
+ const chip = this.chip();
53
+ return chip ? toneForStatus(chip.variant) : 'neutral';
54
+ }, /* @ts-ignore */
55
+ ...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
56
+ title = computed(() => {
57
+ const chip = this.chip();
58
+ if (!chip)
59
+ return '';
60
+ return `${chip.measured} ${chip.measured === 1 ? 'metric' : 'metrics'} measured. Show all`;
66
61
  }, /* @ts-ignore */
67
- ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
62
+ ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
68
63
  static ɵfac = function PrismHeadGaugeComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PrismHeadGaugeComponent)(); };
69
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismHeadGaugeComponent, selectors: [["prism-head-gauge"]], inputs: { metrics: [1, "metrics"] }, decls: 7, vars: 9, consts: [["type", "button", "popovertarget", "prism-head-gauge", 1, "gauge"], ["aria-hidden", "true", 1, "gauge__dot"], [1, "gauge__text"], ["popover", "", "id", "prism-head-gauge", "role", "dialog", "aria-label", "Component metrics", 1, "gauge-card"], [3, "label", "value", "variant"], [1, "gauge__more"]], template: function PrismHeadGaugeComponent_Template(rf, ctx) { if (rf & 1) {
70
- i0.ɵɵelementStart(0, "button", 0);
71
- i0.ɵɵelement(1, "span", 1);
72
- i0.ɵɵconditionalCreate(2, PrismHeadGaugeComponent_Conditional_2_Template, 3, 3)(3, PrismHeadGaugeComponent_Conditional_3_Template, 2, 1, "span", 2);
73
- i0.ɵɵelementEnd();
74
- i0.ɵɵelementStart(4, "div", 3);
75
- i0.ɵɵrepeaterCreate(5, PrismHeadGaugeComponent_For_6_Template, 1, 3, "prism-stat", 4, _forTrack0);
76
- i0.ɵɵelementEnd();
64
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismHeadGaugeComponent, selectors: [["prism-head-gauge"]], inputs: { metrics: [1, "metrics"] }, decls: 1, vars: 1, consts: [["type", "button", "popovertarget", "prism-head-gauge", 1, "gauge"], ["dot", "", 3, "tone", "label", "value"], ["popover", "", "id", "prism-head-gauge", "role", "dialog", "aria-label", "Component metrics", 1, "gauge-card"], ["aria-hidden", "true", 1, "gauge-card__row", "gauge-card__row--head"], [3, "label", "threshold", "value", "variant"]], template: function PrismHeadGaugeComponent_Template(rf, ctx) { if (rf & 1) {
65
+ i0.ɵɵconditionalCreate(0, PrismHeadGaugeComponent_Conditional_0_Template, 12, 5);
77
66
  } if (rf & 2) {
78
- let tmp_5_0;
79
- i0.ɵɵclassProp("gauge--ok", ctx.summary().variant === "ok")("gauge--warn", ctx.summary().variant === "warn")("gauge--danger", ctx.summary().variant === "danger");
80
- i0.ɵɵattribute("aria-label", ctx.ariaLabel())("title", ctx.ariaLabel());
81
- i0.ɵɵadvance(2);
82
- i0.ɵɵconditional((tmp_5_0 = ctx.summary().worst) ? 2 : 3, tmp_5_0);
83
- i0.ɵɵadvance(3);
84
- i0.ɵɵrepeater(ctx.metrics());
85
- } }, dependencies: [PrismStatComponent], styles: ["[_nghost-%COMP%] {\n display: inline-flex;\n}\n\n.gauge[_ngcontent-%COMP%] {\n display: inline-flex;\n gap: var(--%NS%sp-2);\n align-items: center;\n height: 20px;\n padding: 0 var(--%NS%sp-3);\n anchor-name: --prism-head-gauge;\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-xs);\n font-variant-numeric: tabular-nums;\n color: var(--%NS%prism-text-muted);\n white-space: nowrap;\n cursor: pointer;\n background: transparent;\n border: 1px solid var(--%NS%prism-border);\n border-radius: var(--%NS%radius-xs);\n}\n\n.gauge[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--%NS%prism-primary);\n outline-offset: 1px;\n}\n\n.gauge__dot[_ngcontent-%COMP%] {\n width: 5px;\n height: 5px;\n background: currentcolor;\n border-radius: 50%;\n opacity: 0.5;\n}\n\n.gauge__more[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n\n\n\n.gauge--ok[_ngcontent-%COMP%] {\n color: var(--%NS%prism-mark-nominal);\n border-color: color-mix(in srgb, var(--%NS%prism-mark-nominal) 40%, transparent);\n}\n\n.gauge--warn[_ngcontent-%COMP%] {\n color: var(--%NS%prism-mark-attention);\n border-color: color-mix(in srgb, var(--%NS%prism-mark-attention) 40%, transparent);\n}\n\n.gauge--danger[_ngcontent-%COMP%] {\n color: var(--%NS%prism-mark-critical);\n border-color: color-mix(in srgb, var(--%NS%prism-mark-critical) 45%, transparent);\n}\n\n.gauge--ok[_ngcontent-%COMP%] .gauge__dot[_ngcontent-%COMP%], \n.gauge--warn[_ngcontent-%COMP%] .gauge__dot[_ngcontent-%COMP%], \n.gauge--danger[_ngcontent-%COMP%] .gauge__dot[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.gauge-card[_ngcontent-%COMP%] {\n inset: auto;\n gap: 1px;\n min-width: 200px;\n padding: var(--%NS%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(--%NS%prism-bg-elevated);\n border: 1px solid var(--%NS%prism-border-strong);\n border-radius: var(--%NS%radius-md);\n box-shadow: 0 8px 28px -10px rgb(0 0 0 / 45%);\n}\n\n\n\n\n\n.gauge-card[_ngcontent-%COMP%]:popover-open {\n display: flex;\n flex-direction: column;\n}"] });
67
+ let tmp_0_0;
68
+ i0.ɵɵconditional((tmp_0_0 = ctx.chip()) ? 0 : -1, tmp_0_0);
69
+ } }, dependencies: [PrismBadgeComponent, PrismStatComponent], styles: ["[_nghost-%COMP%] {\n display: inline-flex;\n}\n\n.gauge[_ngcontent-%COMP%] {\n display: inline-flex;\n padding: 0;\n anchor-name: --prism-head-gauge;\n cursor: pointer;\n background: none;\n border: 0;\n border-radius: 4px;\n}\n\n.gauge[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--%NS%prism-primary);\n outline-offset: 2px;\n}\n\n.gauge-card[_ngcontent-%COMP%] {\n inset: auto;\n gap: 1px;\n min-width: 200px;\n padding: var(--%NS%sp-2);\n margin: 0;\n position-area: block-end span-inline-end;\n position-anchor: --prism-head-gauge;\n position-try-fallbacks: flip-block, flip-inline;\n background: var(--%NS%prism-bg-elevated);\n border: 1px solid var(--%NS%prism-border);\n border-radius: var(--%NS%radius-md);\n box-shadow: var(--%NS%prism-shadow-md);\n}\n\n\n\n\n\n.gauge-card[_ngcontent-%COMP%]:popover-open {\n display: flex;\n flex-direction: column;\n}\n\n.gauge-card__row--head[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: minmax(110px, 1fr) 90px 70px;\n gap: var(--%NS%sp-4);\n padding: var(--%NS%sp-2) var(--%NS%sp-3) var(--%NS%sp-1);\n font-size: var(--%NS%fs-xs);\n font-weight: 600;\n color: var(--%NS%prism-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.06em;\n}\n\n.gauge-card__row--head[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:last-child {\n text-align: right;\n}"] });
86
70
  }
87
71
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismHeadGaugeComponent, [{
88
72
  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 (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"] }]
73
+ args: [{ selector: 'prism-head-gauge', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismBadgeComponent, PrismStatComponent], template: "@if (chip(); as c) {\n <button\n class=\"gauge\"\n type=\"button\"\n popovertarget=\"prism-head-gauge\"\n [attr.aria-label]=\"c.metric.label + ' ' + c.metric.value + '. ' + title()\"\n [attr.title]=\"title()\">\n <prism-badge\n dot\n [tone]=\"tone()\"\n [label]=\"c.metric.label\"\n [value]=\"c.metric.value\" />\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 <div\n class=\"gauge-card__row gauge-card__row--head\"\n aria-hidden=\"true\">\n <span>Metric</span>\n <span>Threshold</span>\n <span>Value</span>\n </div>\n @for (m of metrics(); track m.id) {\n <prism-stat\n [label]=\"m.label\"\n [threshold]=\"m.threshold\"\n [value]=\"m.value\"\n [variant]=\"m.variant\" />\n }\n </div>\n}\n", styles: [":host {\n display: inline-flex;\n}\n\n.gauge {\n display: inline-flex;\n padding: 0;\n anchor-name: --prism-head-gauge;\n cursor: pointer;\n background: none;\n border: 0;\n border-radius: 4px;\n}\n\n.gauge:focus-visible {\n outline: 2px solid var(--prism-primary);\n outline-offset: 2px;\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-end;\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);\n border-radius: var(--radius-md);\n box-shadow: var(--prism-shadow-md);\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\n.gauge-card__row--head {\n display: grid;\n grid-template-columns: minmax(110px, 1fr) 90px 70px;\n gap: var(--sp-4);\n padding: var(--sp-2) var(--sp-3) var(--sp-1);\n font-size: var(--fs-xs);\n font-weight: 600;\n color: var(--prism-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.06em;\n}\n\n.gauge-card__row--head span:last-child {\n text-align: right;\n}\n"] }]
90
74
  }], null, { metrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "metrics", required: true }] }] }); })();
91
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismHeadGaugeComponent, { className: "PrismHeadGaugeComponent", filePath: "app/component-head/prism-head-gauge.component.ts", lineNumber: 26 }); })();
75
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismHeadGaugeComponent, { className: "PrismHeadGaugeComponent", filePath: "app/component-head/prism-head-gauge.component.ts", lineNumber: 23 }); })();
@@ -7,18 +7,29 @@ import * as i0 from "@angular/core";
7
7
  * them permanently on screen cost a 128px band to say something that belongs
8
8
  * behind one glyph.
9
9
  *
10
+ * A service has no selector, so its code block shows the class name instead,
11
+ * and `facts` carries the plain lines that stand in for the variant and state
12
+ * counts a service does not have. A pipe has none either; its code block is
13
+ * whatever `code` says, which is how it is written in a template.
14
+ *
10
15
  * Opening is click-only, through the native Popover API. Escape, click-outside
11
16
  * dismissal and top-layer placement come with it declaratively; a hover panel
12
17
  * would mean rebuilding all three by hand, and crossing the gap between icon
13
18
  * and card without the card closing is its own problem.
14
19
  */
15
20
  export declare class PrismHeadInfoComponent {
16
- readonly selector: import("@angular/core").InputSignal<string>;
21
+ readonly selector: import("@angular/core").InputSignal<string | undefined>;
22
+ /** Replaces the code block, which otherwise shows the selector of a component or the class name of a service. */
23
+ readonly code: import("@angular/core").InputSignal<string | undefined>;
24
+ readonly className: import("@angular/core").InputSignal<string | undefined>;
17
25
  readonly description: import("@angular/core").InputSignal<string | undefined>;
18
26
  readonly tags: import("@angular/core").InputSignal<readonly string[]>;
19
27
  readonly variantCount: import("@angular/core").InputSignal<number>;
20
28
  readonly stateCount: import("@angular/core").InputSignal<number>;
29
+ readonly facts: import("@angular/core").InputSignal<readonly string[]>;
30
+ protected readonly label: import("@angular/core").Signal<"Component details" | "Service details" | "Pipe details">;
31
+ protected readonly codeBlock: import("@angular/core").Signal<string>;
21
32
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismHeadInfoComponent, never>;
22
- static ɵcmp: i0.ɵɵComponentDeclaration<PrismHeadInfoComponent, "prism-head-info", never, { "selector": { "alias": "selector"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "tags": { "alias": "tags"; "required": false; "isSignal": true; }; "variantCount": { "alias": "variantCount"; "required": false; "isSignal": true; }; "stateCount": { "alias": "stateCount"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
33
+ static ɵcmp: i0.ɵɵComponentDeclaration<PrismHeadInfoComponent, "prism-head-info", never, { "selector": { "alias": "selector"; "required": false; "isSignal": true; }; "code": { "alias": "code"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "tags": { "alias": "tags"; "required": false; "isSignal": true; }; "variantCount": { "alias": "variantCount"; "required": false; "isSignal": true; }; "stateCount": { "alias": "stateCount"; "required": false; "isSignal": true; }; "facts": { "alias": "facts"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
23
34
  }
24
35
  //# sourceMappingURL=prism-head-info.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-head-info.component.d.ts","sourceRoot":"","sources":["../../../src/app/component-head/prism-head-info.component.ts"],"names":[],"mappings":";AAGA;;;;;;;;;;;;GAYG;AACH,qBAQa,sBAAsB;IAC/B,QAAQ,CAAC,QAAQ,8CAA4B;IAC7C,QAAQ,CAAC,WAAW,0DAAwC;IAC5D,QAAQ,CAAC,IAAI,yDAAgC;IAC7C,QAAQ,CAAC,YAAY,8CAAoB;IACzC,QAAQ,CAAC,UAAU,8CAAoB;yCAL9B,sBAAsB;2CAAtB,sBAAsB;CAMlC"}
1
+ {"version":3,"file":"prism-head-info.component.d.ts","sourceRoot":"","sources":["../../../src/app/component-head/prism-head-info.component.ts"],"names":[],"mappings":";AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAQa,sBAAsB;IAC/B,QAAQ,CAAC,QAAQ,0DAAwC;IACzD,iHAAiH;IACjH,QAAQ,CAAC,IAAI,0DAAwC;IACrD,QAAQ,CAAC,SAAS,0DAAwC;IAC1D,QAAQ,CAAC,WAAW,0DAAwC;IAC5D,QAAQ,CAAC,IAAI,yDAAgC;IAC7C,QAAQ,CAAC,YAAY,8CAAoB;IACzC,QAAQ,CAAC,UAAU,8CAAoB;IACvC,QAAQ,CAAC,KAAK,yDAAgC;IAE9C,SAAS,CAAC,QAAQ,CAAC,KAAK,2FAGrB;IAEH,SAAS,CAAC,QAAQ,CAAC,SAAS,yCAOzB;yCAvBM,sBAAsB;2CAAtB,sBAAsB;CAwBlC"}
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, Component, input } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
2
2
  import { PrismIconComponent } from '../icons/prism-icon.component.js';
3
3
  import * as i0 from "@angular/core";
4
4
  function PrismHeadInfoComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
@@ -40,18 +40,27 @@ function PrismHeadInfoComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
40
40
  i0.ɵɵadvance();
41
41
  i0.ɵɵconditional(ctx_r0.stateCount() > 0 ? 3 : -1);
42
42
  } }
43
- function PrismHeadInfoComponent_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
43
+ function PrismHeadInfoComponent_For_8_Template(rf, ctx) { if (rf & 1) {
44
+ i0.ɵɵelementStart(0, "p", 5);
45
+ i0.ɵɵtext(1);
46
+ i0.ɵɵelementEnd();
47
+ } if (rf & 2) {
48
+ const fact_r2 = ctx.$implicit;
49
+ i0.ɵɵadvance();
50
+ i0.ɵɵtextInterpolate(fact_r2);
51
+ } }
52
+ function PrismHeadInfoComponent_Conditional_9_For_2_Template(rf, ctx) { if (rf & 1) {
44
53
  i0.ɵɵelementStart(0, "span", 7);
45
54
  i0.ɵɵtext(1);
46
55
  i0.ɵɵelementEnd();
47
56
  } if (rf & 2) {
48
- const tag_r2 = ctx.$implicit;
57
+ const tag_r3 = ctx.$implicit;
49
58
  i0.ɵɵadvance();
50
- i0.ɵɵtextInterpolate(tag_r2);
59
+ i0.ɵɵtextInterpolate(tag_r3);
51
60
  } }
52
- function PrismHeadInfoComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
61
+ function PrismHeadInfoComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
53
62
  i0.ɵɵelementStart(0, "div", 6);
54
- i0.ɵɵrepeaterCreate(1, PrismHeadInfoComponent_Conditional_7_For_2_Template, 2, 1, "span", 7, i0.ɵɵrepeaterTrackByIdentity);
63
+ i0.ɵɵrepeaterCreate(1, PrismHeadInfoComponent_Conditional_9_For_2_Template, 2, 1, "span", 7, i0.ɵɵrepeaterTrackByIdentity);
55
64
  i0.ɵɵelementEnd();
56
65
  } if (rf & 2) {
57
66
  const ctx_r0 = i0.ɵɵnextContext();
@@ -66,14 +75,24 @@ function PrismHeadInfoComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
66
75
  * them permanently on screen cost a 128px band to say something that belongs
67
76
  * behind one glyph.
68
77
  *
78
+ * A service has no selector, so its code block shows the class name instead,
79
+ * and `facts` carries the plain lines that stand in for the variant and state
80
+ * counts a service does not have. A pipe has none either; its code block is
81
+ * whatever `code` says, which is how it is written in a template.
82
+ *
69
83
  * Opening is click-only, through the native Popover API. Escape, click-outside
70
84
  * dismissal and top-layer placement come with it declaratively; a hover panel
71
85
  * would mean rebuilding all three by hand, and crossing the gap between icon
72
86
  * and card without the card closing is its own problem.
73
87
  */
74
88
  export class PrismHeadInfoComponent {
75
- selector = input.required(/* @ts-ignore */
89
+ selector = input(undefined, /* @ts-ignore */
76
90
  ...(ngDevMode ? [{ debugName: "selector" }] : /* istanbul ignore next */ []));
91
+ /** Replaces the code block, which otherwise shows the selector of a component or the class name of a service. */
92
+ code = input(undefined, /* @ts-ignore */
93
+ ...(ngDevMode ? [{ debugName: "code" }] : /* istanbul ignore next */ []));
94
+ className = input(undefined, /* @ts-ignore */
95
+ ...(ngDevMode ? [{ debugName: "className" }] : /* istanbul ignore next */ []));
77
96
  description = input(undefined, /* @ts-ignore */
78
97
  ...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
79
98
  tags = input([], /* @ts-ignore */
@@ -82,8 +101,24 @@ export class PrismHeadInfoComponent {
82
101
  ...(ngDevMode ? [{ debugName: "variantCount" }] : /* istanbul ignore next */ []));
83
102
  stateCount = input(0, /* @ts-ignore */
84
103
  ...(ngDevMode ? [{ debugName: "stateCount" }] : /* istanbul ignore next */ []));
104
+ facts = input([], /* @ts-ignore */
105
+ ...(ngDevMode ? [{ debugName: "facts" }] : /* istanbul ignore next */ []));
106
+ label = computed(() => {
107
+ if (this.selector() !== undefined)
108
+ return 'Component details';
109
+ return this.code() === undefined ? 'Service details' : 'Pipe details';
110
+ }, /* @ts-ignore */
111
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
112
+ codeBlock = computed(() => {
113
+ const code = this.code();
114
+ if (code !== undefined)
115
+ return code;
116
+ const selector = this.selector();
117
+ return selector ? `<${selector}>` : (this.className() ?? '');
118
+ }, /* @ts-ignore */
119
+ ...(ngDevMode ? [{ debugName: "codeBlock" }] : /* istanbul ignore next */ []));
85
120
  static ɵfac = function PrismHeadInfoComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PrismHeadInfoComponent)(); };
86
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismHeadInfoComponent, selectors: [["prism-head-info"]], inputs: { selector: [1, "selector"], description: [1, "description"], tags: [1, "tags"], variantCount: [1, "variantCount"], stateCount: [1, "stateCount"] }, decls: 8, vars: 5, consts: [["type", "button", "popovertarget", "prism-head-info", "title", "Component details", "aria-label", "Component details", 1, "info-btn"], ["name", "info", 3, "size"], ["popover", "", "id", "prism-head-info", "role", "dialog", "aria-label", "Component details", 1, "info-card"], [1, "info-card__selector"], [1, "info-card__desc"], [1, "info-card__meta"], [1, "info-card__tags"], [1, "info-card__tag"]], template: function PrismHeadInfoComponent_Template(rf, ctx) { if (rf & 1) {
121
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismHeadInfoComponent, selectors: [["prism-head-info"]], inputs: { selector: [1, "selector"], code: [1, "code"], className: [1, "className"], description: [1, "description"], tags: [1, "tags"], variantCount: [1, "variantCount"], stateCount: [1, "stateCount"], facts: [1, "facts"] }, decls: 10, vars: 8, consts: [["type", "button", "popovertarget", "prism-head-info", 1, "info-btn"], ["name", "info", 3, "size"], ["popover", "", "id", "prism-head-info", "role", "dialog", 1, "info-card"], [1, "info-card__selector"], [1, "info-card__desc"], [1, "info-card__meta"], [1, "info-card__tags"], [1, "info-card__tag"]], template: function PrismHeadInfoComponent_Template(rf, ctx) { if (rf & 1) {
87
122
  i0.ɵɵelementStart(0, "button", 0);
88
123
  i0.ɵɵelement(1, "prism-icon", 1);
89
124
  i0.ɵɵelementEnd();
@@ -92,23 +127,29 @@ export class PrismHeadInfoComponent {
92
127
  i0.ɵɵelementEnd();
93
128
  i0.ɵɵconditionalCreate(5, PrismHeadInfoComponent_Conditional_5_Template, 2, 1, "p", 4);
94
129
  i0.ɵɵconditionalCreate(6, PrismHeadInfoComponent_Conditional_6_Template, 4, 3, "p", 5);
95
- i0.ɵɵconditionalCreate(7, PrismHeadInfoComponent_Conditional_7_Template, 3, 0, "div", 6);
130
+ i0.ɵɵrepeaterCreate(7, PrismHeadInfoComponent_For_8_Template, 2, 1, "p", 5, i0.ɵɵrepeaterTrackByIdentity);
131
+ i0.ɵɵconditionalCreate(9, PrismHeadInfoComponent_Conditional_9_Template, 3, 0, "div", 6);
96
132
  i0.ɵɵelementEnd();
97
133
  } if (rf & 2) {
134
+ i0.ɵɵattribute("title", ctx.label())("aria-label", ctx.label());
98
135
  i0.ɵɵadvance();
99
136
  i0.ɵɵproperty("size", 13);
100
- i0.ɵɵadvance(3);
101
- i0.ɵɵtextInterpolate1("<", ctx.selector(), ">");
137
+ i0.ɵɵadvance();
138
+ i0.ɵɵattribute("aria-label", ctx.label());
139
+ i0.ɵɵadvance(2);
140
+ i0.ɵɵtextInterpolate(ctx.codeBlock());
102
141
  i0.ɵɵadvance();
103
142
  i0.ɵɵconditional(ctx.description() ? 5 : -1);
104
143
  i0.ɵɵadvance();
105
144
  i0.ɵɵconditional(ctx.variantCount() > 0 || ctx.stateCount() > 0 ? 6 : -1);
106
145
  i0.ɵɵadvance();
107
- i0.ɵɵconditional(ctx.tags().length ? 7 : -1);
108
- } }, dependencies: [PrismIconComponent], styles: ["[_nghost-%COMP%] {\n display: inline-flex;\n}\n\n.info-btn[_ngcontent-%COMP%] {\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(--%NS%prism-text-ghost);\n cursor: pointer;\n background: transparent;\n border: 0;\n border-radius: var(--%NS%radius-xs);\n}\n\n.info-btn[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text-2);\n}\n\n.info-btn[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--%NS%prism-primary);\n outline-offset: 1px;\n}\n\n.info-card[_ngcontent-%COMP%] {\n inset: auto;\n width: 320px;\n max-width: calc(100vw - var(--%NS%sp-6));\n padding: var(--%NS%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(--%NS%prism-text-2);\n background: var(--%NS%prism-bg-elevated);\n border: 1px solid var(--%NS%prism-border-strong);\n border-radius: var(--%NS%radius-md);\n box-shadow: 0 8px 28px -10px rgb(0 0 0 / 45%);\n}\n\n.info-card__selector[_ngcontent-%COMP%] {\n display: block;\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-md);\n color: var(--%NS%prism-primary);\n user-select: all;\n}\n\n.info-card__desc[_ngcontent-%COMP%] {\n margin: var(--%NS%sp-3) 0 0;\n font-size: var(--%NS%fs-lg);\n line-height: 1.55;\n}\n\n\n\n\n.info-card__meta[_ngcontent-%COMP%] {\n margin: var(--%NS%sp-3) 0 0;\n font-size: var(--%NS%fs-md);\n color: var(--%NS%prism-text-muted);\n}\n\n.info-card__tags[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: var(--%NS%sp-2);\n margin-top: var(--%NS%sp-4);\n}\n\n.info-card__tag[_ngcontent-%COMP%] {\n padding: 1px var(--%NS%sp-3);\n font-size: var(--%NS%fs-xs);\n color: var(--%NS%prism-text-muted);\n border: 1px solid var(--%NS%prism-border);\n border-radius: var(--%NS%radius-xs);\n}"] });
146
+ i0.ɵɵrepeater(ctx.facts());
147
+ i0.ɵɵadvance(2);
148
+ i0.ɵɵconditional(ctx.tags().length ? 9 : -1);
149
+ } }, dependencies: [PrismIconComponent], styles: ["[_nghost-%COMP%] {\n display: inline-flex;\n}\n\n.info-btn[_ngcontent-%COMP%] {\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(--%NS%prism-text-muted);\n cursor: pointer;\n background: transparent;\n border: 0;\n border-radius: var(--%NS%radius-xs);\n}\n\n.info-btn[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text-2);\n}\n\n.info-btn[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--%NS%prism-primary);\n outline-offset: 1px;\n}\n\n.info-card[_ngcontent-%COMP%] {\n inset: auto;\n width: 320px;\n max-width: calc(100vw - var(--%NS%sp-6));\n padding: var(--%NS%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(--%NS%prism-text-2);\n background: var(--%NS%prism-bg-elevated);\n border: 1px solid var(--%NS%prism-border);\n border-radius: var(--%NS%radius-md);\n box-shadow: var(--%NS%prism-shadow-md);\n}\n\n.info-card__selector[_ngcontent-%COMP%] {\n display: block;\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-md);\n color: var(--%NS%prism-primary);\n user-select: all;\n}\n\n.info-card__desc[_ngcontent-%COMP%] {\n margin: var(--%NS%sp-3) 0 0;\n font-size: var(--%NS%fs-lg);\n line-height: 1.55;\n}\n\n\n\n\n.info-card__meta[_ngcontent-%COMP%] {\n margin: var(--%NS%sp-3) 0 0;\n font-size: var(--%NS%fs-md);\n color: var(--%NS%prism-text-muted);\n}\n\n.info-card__tags[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: var(--%NS%sp-2);\n margin-top: var(--%NS%sp-4);\n}\n\n.info-card__tag[_ngcontent-%COMP%] {\n padding: 1px var(--%NS%sp-3);\n font-size: var(--%NS%fs-xs);\n color: var(--%NS%prism-text-muted);\n border: 1px solid var(--%NS%prism-border);\n border-radius: var(--%NS%radius-xs);\n}"] });
109
150
  }
110
151
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismHeadInfoComponent, [{
111
152
  type: Component,
112
- 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 || stateCount() > 0) {\n <p class=\"info-card__meta\">\n @if (variantCount() > 0) {\n {{ variantCount() }} {{ variantCount() === 1 ? 'variant' : 'variants' }}\n }\n @if (variantCount() > 0 && stateCount() > 0) {\n &middot;\n }\n @if (stateCount() > 0) {\n {{ stateCount() }} {{ stateCount() === 1 ? 'state' : 'states' }}\n }\n </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"] }]
113
- }], 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 }] }], stateCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "stateCount", required: false }] }] }); })();
114
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismHeadInfoComponent, { className: "PrismHeadInfoComponent", filePath: "app/component-head/prism-head-info.component.ts", lineNumber: 25 }); })();
153
+ 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 [attr.title]=\"label()\"\n [attr.aria-label]=\"label()\">\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 [attr.aria-label]=\"label()\">\n <code class=\"info-card__selector\">{{ codeBlock() }}</code>\n @if (description()) {\n <p class=\"info-card__desc\">{{ description() }}</p>\n }\n @if (variantCount() > 0 || stateCount() > 0) {\n <p class=\"info-card__meta\">\n @if (variantCount() > 0) {\n {{ variantCount() }} {{ variantCount() === 1 ? 'variant' : 'variants' }}\n }\n @if (variantCount() > 0 && stateCount() > 0) {\n &middot;\n }\n @if (stateCount() > 0) {\n {{ stateCount() }} {{ stateCount() === 1 ? 'state' : 'states' }}\n }\n </p>\n }\n @for (fact of facts(); track fact) {\n <p class=\"info-card__meta\">{{ fact }}</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-muted);\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);\n border-radius: var(--radius-md);\n box-shadow: var(--prism-shadow-md);\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"] }]
154
+ }], null, { selector: [{ type: i0.Input, args: [{ isSignal: true, alias: "selector", required: false }] }], code: [{ type: i0.Input, args: [{ isSignal: true, alias: "code", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], 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 }] }], stateCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "stateCount", required: false }] }], facts: [{ type: i0.Input, args: [{ isSignal: true, alias: "facts", required: false }] }] }); })();
155
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismHeadInfoComponent, { className: "PrismHeadInfoComponent", filePath: "app/component-head/prism-head-info.component.ts", lineNumber: 30 }); })();
@@ -1,16 +1,15 @@
1
1
  import type { MetricVariant } from './head-metrics.js';
2
2
  import * as i0 from "@angular/core";
3
3
  /**
4
- * One line of the gauge's readout: caption left, value right.
5
- *
6
- * Was a right-aligned tile in the old head. The pill it used to carry is gone
7
- * rather than restyled, because it duplicated the caption directly beneath it.
4
+ * One row of the gauge's readout: metric, threshold, value. The three columns
5
+ * line up with the readout's header row through the shared grid template.
8
6
  */
9
7
  export declare class PrismStatComponent {
10
8
  readonly label: import("@angular/core").InputSignal<string>;
9
+ readonly threshold: import("@angular/core").InputSignal<string>;
11
10
  readonly value: import("@angular/core").InputSignal<string | number>;
12
11
  readonly variant: import("@angular/core").InputSignal<MetricVariant>;
13
12
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismStatComponent, never>;
14
- static ɵcmp: i0.ɵɵComponentDeclaration<PrismStatComponent, "prism-stat", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<PrismStatComponent, "prism-stat", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "threshold": { "alias": "threshold"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
15
14
  }
16
15
  //# sourceMappingURL=prism-stat.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-stat.component.d.ts","sourceRoot":"","sources":["../../../src/app/component-head/prism-stat.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;;AAEvD;;;;;GAKG;AACH,qBAOa,kBAAkB;IAC3B,QAAQ,CAAC,KAAK,8CAA4B;IAC1C,QAAQ,CAAC,KAAK,uDAAqC;IACnD,QAAQ,CAAC,OAAO,qDAA8B;yCAHrC,kBAAkB;2CAAlB,kBAAkB;CAI9B"}
1
+ {"version":3,"file":"prism-stat.component.d.ts","sourceRoot":"","sources":["../../../src/app/component-head/prism-stat.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;;AAEvD;;;GAGG;AACH,qBAOa,kBAAkB;IAC3B,QAAQ,CAAC,KAAK,8CAA4B;IAC1C,QAAQ,CAAC,SAAS,8CAAa;IAC/B,QAAQ,CAAC,KAAK,uDAAqC;IACnD,QAAQ,CAAC,OAAO,qDAA8B;yCAJrC,kBAAkB;2CAAlB,kBAAkB;CAK9B"}
@@ -1,38 +1,42 @@
1
1
  import { ChangeDetectionStrategy, Component, input } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  /**
4
- * One line of the gauge's readout: caption left, value right.
5
- *
6
- * Was a right-aligned tile in the old head. The pill it used to carry is gone
7
- * rather than restyled, because it duplicated the caption directly beneath it.
4
+ * One row of the gauge's readout: metric, threshold, value. The three columns
5
+ * line up with the readout's header row through the shared grid template.
8
6
  */
9
7
  export class PrismStatComponent {
10
8
  label = input.required(/* @ts-ignore */
11
9
  ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
10
+ threshold = input('', /* @ts-ignore */
11
+ ...(ngDevMode ? [{ debugName: "threshold" }] : /* istanbul ignore next */ []));
12
12
  value = input.required(/* @ts-ignore */
13
13
  ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
14
14
  variant = input('ok', /* @ts-ignore */
15
15
  ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
16
16
  static ɵfac = function PrismStatComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PrismStatComponent)(); };
17
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismStatComponent, selectors: [["prism-stat"]], inputs: { label: [1, "label"], value: [1, "value"], variant: [1, "variant"] }, decls: 6, vars: 8, consts: [[1, "stat"], ["aria-hidden", "true", 1, "stat__dot"], [1, "stat__lbl"], [1, "stat__val"]], template: function PrismStatComponent_Template(rf, ctx) { if (rf & 1) {
18
- i0.ɵɵdomElementStart(0, "div", 0);
19
- i0.ɵɵdomElement(1, "span", 1);
20
- i0.ɵɵdomElementStart(2, "span", 2);
17
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismStatComponent, selectors: [["prism-stat"]], inputs: { label: [1, "label"], threshold: [1, "threshold"], value: [1, "value"], variant: [1, "variant"] }, decls: 8, vars: 9, consts: [[1, "stat"], [1, "stat__lbl"], ["aria-hidden", "true", 1, "stat__dot"], [1, "stat__thr"], [1, "stat__val"]], template: function PrismStatComponent_Template(rf, ctx) { if (rf & 1) {
18
+ i0.ɵɵdomElementStart(0, "div", 0)(1, "span", 1);
19
+ i0.ɵɵdomElement(2, "span", 2);
21
20
  i0.ɵɵtext(3);
22
21
  i0.ɵɵdomElementEnd();
23
22
  i0.ɵɵdomElementStart(4, "span", 3);
24
23
  i0.ɵɵtext(5);
24
+ i0.ɵɵdomElementEnd();
25
+ i0.ɵɵdomElementStart(6, "span", 4);
26
+ i0.ɵɵtext(7);
25
27
  i0.ɵɵdomElementEnd()();
26
28
  } if (rf & 2) {
27
29
  i0.ɵɵclassProp("stat--ok", ctx.variant() === "ok")("stat--warn", ctx.variant() === "warn")("stat--danger", ctx.variant() === "danger");
28
30
  i0.ɵɵadvance(3);
29
31
  i0.ɵɵtextInterpolate(ctx.label());
30
32
  i0.ɵɵadvance(2);
33
+ i0.ɵɵtextInterpolate(ctx.threshold());
34
+ i0.ɵɵadvance(2);
31
35
  i0.ɵɵtextInterpolate(ctx.value());
32
- } }, styles: [".stat[_ngcontent-%COMP%] {\n display: flex;\n gap: var(--%NS%sp-3);\n align-items: center;\n padding: var(--%NS%sp-2) var(--%NS%sp-3);\n font-size: var(--%NS%fs-md);\n color: var(--%NS%prism-text-2);\n border-radius: var(--%NS%radius-xs);\n}\n\n.stat__dot[_ngcontent-%COMP%] {\n flex: none;\n width: 5px;\n height: 5px;\n background: transparent;\n border-radius: 50%;\n}\n\n.stat__lbl[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n.stat__val[_ngcontent-%COMP%] {\n margin-left: auto;\n font-family: var(--%NS%font-mono);\n font-variant-numeric: tabular-nums;\n color: var(--%NS%prism-text);\n}\n\n\n\n\n\n.stat--ok[_ngcontent-%COMP%] .stat__dot[_ngcontent-%COMP%] {\n background: var(--%NS%prism-mark-nominal);\n}\n\n.stat--ok[_ngcontent-%COMP%] .stat__val[_ngcontent-%COMP%] {\n color: var(--%NS%prism-mark-nominal);\n}\n\n.stat--warn[_ngcontent-%COMP%] .stat__dot[_ngcontent-%COMP%] {\n background: var(--%NS%prism-mark-attention);\n}\n\n.stat--warn[_ngcontent-%COMP%] .stat__val[_ngcontent-%COMP%] {\n color: var(--%NS%prism-mark-attention);\n}\n\n.stat--danger[_ngcontent-%COMP%] .stat__dot[_ngcontent-%COMP%] {\n background: var(--%NS%prism-mark-critical);\n}\n\n.stat--danger[_ngcontent-%COMP%] .stat__val[_ngcontent-%COMP%] {\n color: var(--%NS%prism-mark-critical);\n}"] });
36
+ } }, styles: [".stat[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: var(--%NS%prism-stat-columns, minmax(110px, 1fr) 90px 70px);\n gap: var(--%NS%sp-4);\n align-items: center;\n padding: var(--%NS%sp-2) var(--%NS%sp-3);\n font-size: var(--%NS%fs-md);\n color: var(--%NS%prism-text-2);\n border-radius: var(--%NS%radius-xs);\n}\n\n.stat__dot[_ngcontent-%COMP%] {\n display: inline-block;\n flex: none;\n width: 6px;\n height: 6px;\n margin-right: var(--%NS%sp-3);\n vertical-align: 1px;\n background: transparent;\n border-radius: 50%;\n}\n\n.stat__lbl[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n.stat__thr[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-sm);\n color: var(--%NS%prism-text-muted);\n white-space: nowrap;\n}\n\n.stat__val[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-variant-numeric: tabular-nums;\n color: var(--%NS%prism-text);\n text-align: right;\n}\n\n\n\n\n\n.stat--ok[_ngcontent-%COMP%] .stat__dot[_ngcontent-%COMP%] {\n background: var(--%NS%prism-success);\n}\n\n.stat--ok[_ngcontent-%COMP%] .stat__val[_ngcontent-%COMP%] {\n color: var(--%NS%prism-success);\n}\n\n.stat--warn[_ngcontent-%COMP%] .stat__dot[_ngcontent-%COMP%] {\n background: var(--%NS%prism-warn);\n}\n\n.stat--warn[_ngcontent-%COMP%] .stat__val[_ngcontent-%COMP%] {\n color: var(--%NS%prism-warn);\n}\n\n.stat--danger[_ngcontent-%COMP%] .stat__dot[_ngcontent-%COMP%] {\n background: var(--%NS%prism-danger);\n}\n\n.stat--danger[_ngcontent-%COMP%] .stat__val[_ngcontent-%COMP%] {\n color: var(--%NS%prism-danger);\n}"] });
33
37
  }
34
38
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismStatComponent, [{
35
39
  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\" 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
- }], 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
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismStatComponent, { className: "PrismStatComponent", filePath: "app/component-head/prism-stat.component.ts", lineNumber: 17 }); })();
40
+ 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 class=\"stat__lbl\"\n ><span\n class=\"stat__dot\"\n aria-hidden=\"true\"></span\n >{{ label() }}</span\n >\n <span class=\"stat__thr\">{{ threshold() }}</span>\n <span class=\"stat__val\">{{ value() }}</span>\n</div>\n", styles: [".stat {\n display: grid;\n grid-template-columns: var(--prism-stat-columns, minmax(110px, 1fr) 90px 70px);\n gap: var(--sp-4);\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 display: inline-block;\n flex: none;\n width: 6px;\n height: 6px;\n margin-right: var(--sp-3);\n vertical-align: 1px;\n background: transparent;\n border-radius: 50%;\n}\n\n.stat__lbl {\n white-space: nowrap;\n}\n\n.stat__thr {\n font-family: var(--font-mono);\n font-size: var(--fs-sm);\n color: var(--prism-text-muted);\n white-space: nowrap;\n}\n\n.stat__val {\n font-family: var(--font-mono);\n font-variant-numeric: tabular-nums;\n color: var(--prism-text);\n text-align: right;\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-success);\n}\n\n.stat--ok .stat__val {\n color: var(--prism-success);\n}\n\n.stat--warn .stat__dot {\n background: var(--prism-warn);\n}\n\n.stat--warn .stat__val {\n color: var(--prism-warn);\n}\n\n.stat--danger .stat__dot {\n background: var(--prism-danger);\n}\n\n.stat--danger .stat__val {\n color: var(--prism-danger);\n}\n"] }]
41
+ }], null, { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], threshold: [{ type: i0.Input, args: [{ isSignal: true, alias: "threshold", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] }); })();
42
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismStatComponent, { className: "PrismStatComponent", filePath: "app/component-head/prism-stat.component.ts", lineNumber: 15 }); })();
@@ -0,0 +1,8 @@
1
+ import type { ServiceProvision } from '../../plugin/service.types.js';
2
+ /**
3
+ * The plain facts about a service for the head's info popover: how it gets into
4
+ * an injector, and where to import it from. The import path is optional on a
5
+ * scanned service, so a service the scanner could not place just has one fact.
6
+ */
7
+ export declare function serviceFacts(provision: ServiceProvision, importPath: string | undefined): string[];
8
+ //# sourceMappingURL=service-facts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-facts.d.ts","sourceRoot":"","sources":["../../../src/app/component-head/service-facts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAKlG"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The plain facts about a service for the head's info popover: how it gets into
3
+ * an injector, and where to import it from. The import path is optional on a
4
+ * scanned service, so a service the scanner could not place just has one fact.
5
+ */
6
+ export function serviceFacts(provision, importPath) {
7
+ const facts = [provision === 'auto' ? 'Provided automatically' : 'Needs a providers entry'];
8
+ if (importPath)
9
+ facts.push(importPath);
10
+ return facts;
11
+ }
@@ -16,10 +16,10 @@ export class BooleanControlComponent {
16
16
  } if (rf & 2) {
17
17
  i0.ɵɵclassProp("on", ctx.value());
18
18
  i0.ɵɵattribute("aria-checked", ctx.value());
19
- } }, styles: [".ctl-toggle[_ngcontent-%COMP%] {\n position: relative;\n flex-shrink: 0;\n width: 34px;\n height: 18px;\n padding: 0;\n cursor: pointer;\n background: var(--%NS%prism-input-bg);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 9px;\n transition: all var(--%NS%dur-fast);\n}\n\n.ctl-toggle[_ngcontent-%COMP%]::after {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 12px;\n height: 12px;\n content: '';\n background: var(--%NS%prism-text-muted);\n border-radius: 50%;\n transition:\n transform var(--%NS%dur-fast),\n background var(--%NS%dur-fast);\n}\n\n.ctl-toggle.on[_ngcontent-%COMP%] {\n background: var(--%NS%prism-primary);\n border-color: var(--%NS%prism-primary);\n}\n\n.ctl-toggle.on[_ngcontent-%COMP%]::after {\n background: white;\n transform: translateX(16px);\n}"] });
19
+ } }, styles: ["\n\n\n.ctl-toggle[_ngcontent-%COMP%] {\n position: relative;\n box-sizing: border-box;\n flex-shrink: 0;\n width: 34px;\n height: 18px;\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 1.5px solid var(--%NS%prism-border-strong);\n border-radius: 9px;\n transition:\n background var(--%NS%dur-fast),\n border-color var(--%NS%dur-fast);\n}\n\n.ctl-toggle[_ngcontent-%COMP%]::after {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 11px;\n height: 11px;\n content: '';\n background: var(--%NS%prism-border-strong);\n border-radius: 50%;\n transition:\n transform var(--%NS%dur-fast),\n background var(--%NS%dur-fast);\n}\n\n.ctl-toggle.on[_ngcontent-%COMP%] {\n background: var(--%NS%prism-toggle-on);\n border-color: transparent;\n}\n\n.ctl-toggle.on[_ngcontent-%COMP%]::after {\n background: var(--%NS%prism-on-primary);\n transform: translateX(16px);\n}\n\n.ctl-toggle[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--%NS%prism-primary);\n outline-offset: 2px;\n}"] });
20
20
  }
21
21
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BooleanControlComponent, [{
22
22
  type: Component,
23
- args: [{ selector: 'prism-boolean-control', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"ctl-toggle\"\n [class.on]=\"value()\"\n (click)=\"valueChange.emit(!value())\"\n role=\"switch\"\n [attr.aria-checked]=\"value()\"></button>\n", styles: [".ctl-toggle {\n position: relative;\n flex-shrink: 0;\n width: 34px;\n height: 18px;\n padding: 0;\n cursor: pointer;\n background: var(--prism-input-bg);\n border: 1px solid var(--prism-border);\n border-radius: 9px;\n transition: all var(--dur-fast);\n}\n\n.ctl-toggle::after {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 12px;\n height: 12px;\n content: '';\n background: var(--prism-text-muted);\n border-radius: 50%;\n transition:\n transform var(--dur-fast),\n background var(--dur-fast);\n}\n\n.ctl-toggle.on {\n background: var(--prism-primary);\n border-color: var(--prism-primary);\n}\n\n.ctl-toggle.on::after {\n background: white;\n transform: translateX(16px);\n}\n"] }]
23
+ args: [{ selector: 'prism-boolean-control', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"ctl-toggle\"\n [class.on]=\"value()\"\n (click)=\"valueChange.emit(!value())\"\n role=\"switch\"\n [attr.aria-checked]=\"value()\"></button>\n", styles: ["/* Off: a contour and a knob in the control-contour colour, 3:1 on every\n surface, instead of a tint that disappears. On: the brand-blue track with a\n white knob. */\n.ctl-toggle {\n position: relative;\n box-sizing: border-box;\n flex-shrink: 0;\n width: 34px;\n height: 18px;\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 1.5px solid var(--prism-border-strong);\n border-radius: 9px;\n transition:\n background var(--dur-fast),\n border-color var(--dur-fast);\n}\n\n.ctl-toggle::after {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 11px;\n height: 11px;\n content: '';\n background: var(--prism-border-strong);\n border-radius: 50%;\n transition:\n transform var(--dur-fast),\n background var(--dur-fast);\n}\n\n.ctl-toggle.on {\n background: var(--prism-toggle-on);\n border-color: transparent;\n}\n\n.ctl-toggle.on::after {\n background: var(--prism-on-primary);\n transform: translateX(16px);\n}\n\n.ctl-toggle:focus-visible {\n outline: 2px solid var(--prism-primary);\n outline-offset: 2px;\n}\n"] }]
24
24
  }], null, { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], typeName: [{ type: i0.Input, args: [{ isSignal: true, alias: "typeName", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] }); })();
25
25
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(BooleanControlComponent, { className: "BooleanControlComponent", filePath: "app/controls/boolean-control.component.ts", lineNumber: 10 }); })();
@@ -101,10 +101,10 @@ export class JsonControlComponent {
101
101
  i0.ɵɵdomProperty("value", ctx.displayText());
102
102
  i0.ɵɵadvance(2);
103
103
  i0.ɵɵconditional(ctx.parseError() ? 7 : -1);
104
- } }, styles: [".json-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.json-overlay[_ngcontent-%COMP%] {\n position: relative;\n overflow: hidden;\n border: 1px solid var(--%NS%prism-border);\n border-radius: var(--%NS%radius-sm);\n transition: border-color var(--%NS%dur-fast);\n}\n\n.json-overlay[_ngcontent-%COMP%]:focus-within {\n border-color: var(--%NS%prism-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--%NS%prism-primary) 30%, transparent);\n}\n\n.json-pre[_ngcontent-%COMP%], \n.json-input[_ngcontent-%COMP%] {\n padding: 4px 8px;\n margin: 0;\n font-family: var(--%NS%font-mono);\n font-size: 12px;\n line-height: 1.4;\n overflow-wrap: break-word;\n tab-size: 2;\n white-space: pre-wrap;\n}\n\n.json-pre[_ngcontent-%COMP%] {\n min-height: 56px;\n pointer-events: none;\n}\n\n.json-pre[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n font-family: inherit;\n}\n\n[_nghost-%COMP%] .jh-key {\n color: var(--%NS%prism-code-attr);\n}\n\n[_nghost-%COMP%] .jh-string {\n color: var(--%NS%prism-code-str);\n}\n\n[_nghost-%COMP%] .jh-number {\n color: var(--%NS%prism-warn);\n}\n\n[_nghost-%COMP%] .jh-bool {\n color: var(--%NS%prism-primary);\n}\n\n[_nghost-%COMP%] .jh-null {\n color: var(--%NS%prism-text-ghost);\n}\n\n.json-input[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n overflow: auto;\n color: transparent;\n caret-color: var(--%NS%prism-text);\n resize: none;\n background: transparent;\n border: none;\n}\n\n.json-input[_ngcontent-%COMP%]:focus {\n outline: none;\n}\n\n.json-input[_ngcontent-%COMP%]::selection {\n background: rgb(99 102 241 / 30%);\n}\n\n.json-error[_ngcontent-%COMP%] {\n display: block;\n margin-top: 2px;\n font-size: 11px;\n color: var(--%NS%prism-danger);\n}"] });
104
+ } }, styles: [".json-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.json-overlay[_ngcontent-%COMP%] {\n position: relative;\n overflow: hidden;\n border: 1px solid var(--%NS%prism-border);\n border-radius: var(--%NS%radius-sm);\n transition: border-color var(--%NS%dur-fast);\n}\n\n.json-overlay[_ngcontent-%COMP%]:focus-within {\n border-color: var(--%NS%prism-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--%NS%prism-primary) 30%, transparent);\n}\n\n.json-pre[_ngcontent-%COMP%], \n.json-input[_ngcontent-%COMP%] {\n padding: 4px 8px;\n margin: 0;\n scrollbar-gutter: stable;\n font-family: var(--%NS%font-mono);\n font-size: 12px;\n line-height: 1.4;\n overflow-wrap: break-word;\n tab-size: 2;\n white-space: pre-wrap;\n scrollbar-color: var(--%NS%prism-border-strong) transparent;\n scrollbar-width: thin;\n}\n\n\n\n\n.json-pre[_ngcontent-%COMP%] {\n min-height: 56px;\n max-height: calc(10lh + 8px);\n overflow: hidden;\n pointer-events: none;\n}\n\n.json-pre[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n font-family: inherit;\n}\n\n[_nghost-%COMP%] .jh-key {\n color: var(--%NS%prism-code-attr);\n}\n\n[_nghost-%COMP%] .jh-string {\n color: var(--%NS%prism-code-str);\n}\n\n[_nghost-%COMP%] .jh-number {\n color: var(--%NS%prism-warn);\n}\n\n[_nghost-%COMP%] .jh-bool {\n color: var(--%NS%prism-primary);\n}\n\n[_nghost-%COMP%] .jh-null {\n color: var(--%NS%prism-text-muted);\n}\n\n.json-input[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n overflow: auto;\n color: transparent;\n caret-color: var(--%NS%prism-text);\n resize: none;\n background: transparent;\n border: none;\n}\n\n.json-input[_ngcontent-%COMP%]:focus {\n outline: none;\n}\n\n.json-input[_ngcontent-%COMP%]::selection {\n background: color-mix(in srgb, var(--%NS%prism-primary) 30%, transparent);\n}\n\n.json-error[_ngcontent-%COMP%] {\n display: block;\n margin-top: 2px;\n font-size: 11px;\n color: var(--%NS%prism-danger);\n}"] });
105
105
  }
106
106
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(JsonControlComponent, [{
107
107
  type: Component,
108
- args: [{ selector: 'prism-json-control', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"json-editor\">\n <div class=\"json-overlay\">\n <pre\n class=\"json-pre\"\n #preEl><code [innerHTML]=\"highlightedHtml()\"></code></pre>\n <textarea\n #textareaEl\n class=\"json-input\"\n [value]=\"displayText()\"\n (input)=\"onInput($any($event.target).value)\"\n (scroll)=\"syncScroll()\"\n spellcheck=\"false\"></textarea>\n </div>\n @if (parseError()) {\n <span class=\"json-error\">Invalid JSON</span>\n }\n</div>\n", styles: [".json-editor {\n flex: 1;\n min-width: 0;\n}\n\n.json-overlay {\n position: relative;\n overflow: hidden;\n border: 1px solid var(--prism-border);\n border-radius: var(--radius-sm);\n transition: border-color var(--dur-fast);\n}\n\n.json-overlay:focus-within {\n border-color: var(--prism-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--prism-primary) 30%, transparent);\n}\n\n.json-pre,\n.json-input {\n padding: 4px 8px;\n margin: 0;\n font-family: var(--font-mono);\n font-size: 12px;\n line-height: 1.4;\n overflow-wrap: break-word;\n tab-size: 2;\n white-space: pre-wrap;\n}\n\n.json-pre {\n min-height: 56px;\n pointer-events: none;\n}\n\n.json-pre code {\n font-family: inherit;\n}\n\n:host ::ng-deep .jh-key {\n color: var(--prism-code-attr);\n}\n\n:host ::ng-deep .jh-string {\n color: var(--prism-code-str);\n}\n\n:host ::ng-deep .jh-number {\n color: var(--prism-warn);\n}\n\n:host ::ng-deep .jh-bool {\n color: var(--prism-primary);\n}\n\n:host ::ng-deep .jh-null {\n color: var(--prism-text-ghost);\n}\n\n.json-input {\n position: absolute;\n inset: 0;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n overflow: auto;\n color: transparent;\n caret-color: var(--prism-text);\n resize: none;\n background: transparent;\n border: none;\n}\n\n.json-input:focus {\n outline: none;\n}\n\n.json-input::selection {\n background: rgb(99 102 241 / 30%);\n}\n\n.json-error {\n display: block;\n margin-top: 2px;\n font-size: 11px;\n color: var(--prism-danger);\n}\n"] }]
108
+ args: [{ selector: 'prism-json-control', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"json-editor\">\n <div class=\"json-overlay\">\n <pre\n class=\"json-pre\"\n #preEl><code [innerHTML]=\"highlightedHtml()\"></code></pre>\n <textarea\n #textareaEl\n class=\"json-input\"\n [value]=\"displayText()\"\n (input)=\"onInput($any($event.target).value)\"\n (scroll)=\"syncScroll()\"\n spellcheck=\"false\"></textarea>\n </div>\n @if (parseError()) {\n <span class=\"json-error\">Invalid JSON</span>\n }\n</div>\n", styles: [".json-editor {\n flex: 1;\n min-width: 0;\n}\n\n.json-overlay {\n position: relative;\n overflow: hidden;\n border: 1px solid var(--prism-border);\n border-radius: var(--radius-sm);\n transition: border-color var(--dur-fast);\n}\n\n.json-overlay:focus-within {\n border-color: var(--prism-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--prism-primary) 30%, transparent);\n}\n\n.json-pre,\n.json-input {\n padding: 4px 8px;\n margin: 0;\n scrollbar-gutter: stable;\n font-family: var(--font-mono);\n font-size: 12px;\n line-height: 1.4;\n overflow-wrap: break-word;\n tab-size: 2;\n white-space: pre-wrap;\n scrollbar-color: var(--prism-border-strong) transparent;\n scrollbar-width: thin;\n}\n\n/* The pre sizes the editor up to ten lines; past that the textarea scrolls\n and syncScroll() moves the pre along. Both reserve the same scrollbar\n gutter, so their text wraps at the same width. */\n.json-pre {\n min-height: 56px;\n max-height: calc(10lh + 8px);\n overflow: hidden;\n pointer-events: none;\n}\n\n.json-pre code {\n font-family: inherit;\n}\n\n:host ::ng-deep .jh-key {\n color: var(--prism-code-attr);\n}\n\n:host ::ng-deep .jh-string {\n color: var(--prism-code-str);\n}\n\n:host ::ng-deep .jh-number {\n color: var(--prism-warn);\n}\n\n:host ::ng-deep .jh-bool {\n color: var(--prism-primary);\n}\n\n:host ::ng-deep .jh-null {\n color: var(--prism-text-muted);\n}\n\n.json-input {\n position: absolute;\n inset: 0;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n overflow: auto;\n color: transparent;\n caret-color: var(--prism-text);\n resize: none;\n background: transparent;\n border: none;\n}\n\n.json-input:focus {\n outline: none;\n}\n\n.json-input::selection {\n background: color-mix(in srgb, var(--prism-primary) 30%, transparent);\n}\n\n.json-error {\n display: block;\n margin-top: 2px;\n font-size: 11px;\n color: var(--prism-danger);\n}\n"] }]
109
109
  }], null, { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], typeName: [{ type: i0.Input, args: [{ isSignal: true, alias: "typeName", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], textareaEl: [{ type: i0.ViewChild, args: ['textareaEl', { isSignal: true }] }], preEl: [{ type: i0.ViewChild, args: ['preEl', { isSignal: true }] }] }); })();
110
110
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(JsonControlComponent, { className: "JsonControlComponent", filePath: "app/controls/json-control.component.ts", lineNumber: 38 }); })();