@ng-prism/core 22.5.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 (437) hide show
  1. package/README.md +13 -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 +25 -3
  14. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts.map +1 -1
  15. package/dist/app/canvas/prism-canvas-toolbar.component.js +154 -89
  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/canvas/state-chips.d.ts +50 -0
  19. package/dist/app/canvas/state-chips.d.ts.map +1 -0
  20. package/dist/app/canvas/state-chips.js +40 -0
  21. package/dist/app/component-head/head-metrics.d.ts +35 -19
  22. package/dist/app/component-head/head-metrics.d.ts.map +1 -1
  23. package/dist/app/component-head/head-metrics.js +57 -27
  24. package/dist/app/component-head/pipe-facts.d.ts +9 -0
  25. package/dist/app/component-head/pipe-facts.d.ts.map +1 -0
  26. package/dist/app/component-head/pipe-facts.js +15 -0
  27. package/dist/app/component-head/prism-component-head.component.d.ts +20 -22
  28. package/dist/app/component-head/prism-component-head.component.d.ts.map +1 -1
  29. package/dist/app/component-head/prism-component-head.component.js +85 -96
  30. package/dist/app/component-head/prism-head-gauge.component.d.ts +8 -12
  31. package/dist/app/component-head/prism-head-gauge.component.d.ts.map +1 -1
  32. package/dist/app/component-head/prism-head-gauge.component.js +51 -67
  33. package/dist/app/component-head/prism-head-info.component.d.ts +14 -2
  34. package/dist/app/component-head/prism-head-info.component.d.ts.map +1 -1
  35. package/dist/app/component-head/prism-head-info.component.js +84 -20
  36. package/dist/app/component-head/prism-stat.component.d.ts +4 -5
  37. package/dist/app/component-head/prism-stat.component.d.ts.map +1 -1
  38. package/dist/app/component-head/prism-stat.component.js +16 -12
  39. package/dist/app/component-head/service-facts.d.ts +8 -0
  40. package/dist/app/component-head/service-facts.d.ts.map +1 -0
  41. package/dist/app/component-head/service-facts.js +11 -0
  42. package/dist/app/controls/boolean-control.component.js +2 -2
  43. package/dist/app/controls/json-control.component.js +2 -2
  44. package/dist/app/controls/union-control.component.js +4 -3
  45. package/dist/app/directives/resize-value.d.ts +1 -1
  46. package/dist/app/directives/resize-value.js +1 -1
  47. package/dist/app/discovery-manifest.d.ts +2 -2
  48. package/dist/app/discovery-manifest.d.ts.map +1 -1
  49. package/dist/app/discovery-manifest.js +15 -3
  50. package/dist/app/header/header-brand.d.ts +25 -0
  51. package/dist/app/header/header-brand.d.ts.map +1 -0
  52. package/dist/app/header/header-brand.js +10 -0
  53. package/dist/app/header/prism-header.component.d.ts +2 -2
  54. package/dist/app/header/prism-header.component.d.ts.map +1 -1
  55. package/dist/app/header/prism-header.component.js +73 -57
  56. package/dist/app/icons/icon-registry.d.ts.map +1 -1
  57. package/dist/app/icons/icon-registry.js +4 -1
  58. package/dist/app/index.d.ts +12 -0
  59. package/dist/app/index.d.ts.map +1 -1
  60. package/dist/app/index.js +12 -1
  61. package/dist/app/layout-menu/prism-layout-menu.component.d.ts +3 -0
  62. package/dist/app/layout-menu/prism-layout-menu.component.d.ts.map +1 -1
  63. package/dist/app/layout-menu/prism-layout-menu.component.js +72 -58
  64. package/dist/app/overview/open-in-playground.d.ts +19 -0
  65. package/dist/app/overview/open-in-playground.d.ts.map +1 -0
  66. package/dist/app/overview/open-in-playground.js +25 -0
  67. package/dist/app/overview/overview-matrix.d.ts +85 -0
  68. package/dist/app/overview/overview-matrix.d.ts.map +1 -0
  69. package/dist/app/overview/overview-matrix.js +98 -0
  70. package/dist/app/overview/overview-visibility.d.ts +10 -2
  71. package/dist/app/overview/overview-visibility.d.ts.map +1 -1
  72. package/dist/app/overview/overview-visibility.js +14 -3
  73. package/dist/app/overview/prism-overview-cell.component.d.ts +27 -2
  74. package/dist/app/overview/prism-overview-cell.component.d.ts.map +1 -1
  75. package/dist/app/overview/prism-overview-cell.component.js +145 -28
  76. package/dist/app/overview/prism-overview-matrix.component.d.ts +29 -0
  77. package/dist/app/overview/prism-overview-matrix.component.d.ts.map +1 -0
  78. package/dist/app/overview/prism-overview-matrix.component.js +155 -0
  79. package/dist/app/overview/prism-overview.component.d.ts +4 -0
  80. package/dist/app/overview/prism-overview.component.d.ts.map +1 -1
  81. package/dist/app/overview/prism-overview.component.js +37 -14
  82. package/dist/app/page-renderer/prism-page-renderer.component.js +2 -2
  83. package/dist/app/panels/a11y/a11y-core.plugin.d.ts.map +1 -1
  84. package/dist/app/panels/a11y/a11y-core.plugin.js +0 -1
  85. package/dist/app/panels/a11y/a11y-header-badge.component.d.ts +1 -4
  86. package/dist/app/panels/a11y/a11y-header-badge.component.d.ts.map +1 -1
  87. package/dist/app/panels/a11y/a11y-header-badge.component.js +8 -19
  88. package/dist/app/panels/a11y/a11y-keyboard-overlay.component.js +2 -2
  89. package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts +1 -0
  90. package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts.map +1 -1
  91. package/dist/app/panels/a11y/a11y-overlay-host.component.js +4 -3
  92. package/dist/app/panels/a11y/a11y-panel.component.d.ts +4 -1
  93. package/dist/app/panels/a11y/a11y-panel.component.d.ts.map +1 -1
  94. package/dist/app/panels/a11y/a11y-panel.component.js +32 -54
  95. package/dist/app/panels/a11y/a11y-score.component.d.ts +8 -3
  96. package/dist/app/panels/a11y/a11y-score.component.d.ts.map +1 -1
  97. package/dist/app/panels/a11y/a11y-score.component.js +19 -35
  98. package/dist/app/panels/a11y/a11y-sr-overlay.component.js +2 -2
  99. package/dist/app/panels/a11y/a11y-sr.component.js +2 -2
  100. package/dist/app/panels/a11y/a11y-summary.d.ts.map +1 -1
  101. package/dist/app/panels/a11y/a11y-summary.js +8 -1
  102. package/dist/app/panels/a11y/a11y-tree.component.js +2 -2
  103. package/dist/app/panels/a11y/a11y-violations.component.d.ts +23 -2
  104. package/dist/app/panels/a11y/a11y-violations.component.d.ts.map +1 -1
  105. package/dist/app/panels/a11y/a11y-violations.component.js +104 -89
  106. package/dist/app/panels/a11y/severity.d.ts +9 -0
  107. package/dist/app/panels/a11y/severity.d.ts.map +1 -0
  108. package/dist/app/panels/a11y/severity.js +12 -0
  109. package/dist/app/panels/controls/controls-plugin.d.ts.map +1 -1
  110. package/dist/app/panels/controls/controls-plugin.js +1 -2
  111. package/dist/app/panels/controls/non-editable-input-types.d.ts +9 -1
  112. package/dist/app/panels/controls/non-editable-input-types.d.ts.map +1 -1
  113. package/dist/app/panels/controls/non-editable-input-types.js +18 -0
  114. package/dist/app/panels/controls/prism-controls-panel.component.d.ts +2 -1
  115. package/dist/app/panels/controls/prism-controls-panel.component.d.ts.map +1 -1
  116. package/dist/app/panels/controls/prism-controls-panel.component.js +77 -59
  117. package/dist/app/panels/events/events-plugin.d.ts.map +1 -1
  118. package/dist/app/panels/events/events-plugin.js +1 -2
  119. package/dist/app/panels/events/prism-events-panel.component.d.ts +2 -0
  120. package/dist/app/panels/events/prism-events-panel.component.d.ts.map +1 -1
  121. package/dist/app/panels/events/prism-events-panel.component.js +20 -7
  122. package/dist/app/panels/events/prism-json-node.utils.d.ts +6 -0
  123. package/dist/app/panels/events/prism-json-node.utils.d.ts.map +1 -1
  124. package/dist/app/panels/events/prism-json-node.utils.js +8 -0
  125. package/dist/app/panels/panel-host/addon-panels.d.ts +11 -0
  126. package/dist/app/panels/panel-host/addon-panels.d.ts.map +1 -0
  127. package/dist/app/panels/panel-host/addon-panels.js +12 -0
  128. package/dist/app/panels/panel-host/panel-badge.d.ts +22 -0
  129. package/dist/app/panels/panel-host/panel-badge.d.ts.map +1 -1
  130. package/dist/app/panels/panel-host/panel-badge.js +56 -11
  131. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts +4 -1
  132. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts.map +1 -1
  133. package/dist/app/panels/panel-host/prism-panel-host.component.js +36 -70
  134. package/dist/app/pseudo/pseudo-state-marker.d.ts +32 -10
  135. package/dist/app/pseudo/pseudo-state-marker.d.ts.map +1 -1
  136. package/dist/app/pseudo/pseudo-state-marker.js +83 -67
  137. package/dist/app/pseudo/pseudo-targets.d.ts +11 -0
  138. package/dist/app/pseudo/pseudo-targets.d.ts.map +1 -0
  139. package/dist/app/pseudo/pseudo-targets.js +46 -0
  140. package/dist/app/pseudo/state-fit.d.ts +28 -0
  141. package/dist/app/pseudo/state-fit.d.ts.map +1 -0
  142. package/dist/app/pseudo/state-fit.js +97 -0
  143. package/dist/app/renderer/composition.d.ts +20 -0
  144. package/dist/app/renderer/composition.d.ts.map +1 -0
  145. package/dist/app/renderer/composition.js +26 -0
  146. package/dist/app/renderer/input-bindings.d.ts +28 -0
  147. package/dist/app/renderer/input-bindings.d.ts.map +1 -0
  148. package/dist/app/renderer/input-bindings.js +42 -0
  149. package/dist/app/renderer/known-inputs.d.ts +8 -1
  150. package/dist/app/renderer/known-inputs.d.ts.map +1 -1
  151. package/dist/app/renderer/known-inputs.js +13 -5
  152. package/dist/app/renderer/prism-renderer.component.d.ts +18 -4
  153. package/dist/app/renderer/prism-renderer.component.d.ts.map +1 -1
  154. package/dist/app/renderer/prism-renderer.component.js +78 -44
  155. package/dist/app/renderer/projectable-content.d.ts +8 -1
  156. package/dist/app/renderer/projectable-content.d.ts.map +1 -1
  157. package/dist/app/renderer/projectable-content.js +40 -29
  158. package/dist/app/renderer/rendered-key.d.ts +20 -6
  159. package/dist/app/renderer/rendered-key.d.ts.map +1 -1
  160. package/dist/app/renderer/rendered-key.js +25 -8
  161. package/dist/app/renderer/snippet-generator.d.ts +14 -2
  162. package/dist/app/renderer/snippet-generator.d.ts.map +1 -1
  163. package/dist/app/renderer/snippet-generator.js +138 -81
  164. package/dist/app/services/navigation-item.d.ts +10 -0
  165. package/dist/app/services/navigation-item.d.ts.map +1 -0
  166. package/dist/app/services/navigation-item.js +20 -0
  167. package/dist/app/services/navigation-item.types.d.ts +8 -0
  168. package/dist/app/services/navigation-item.types.d.ts.map +1 -1
  169. package/dist/app/services/prism-layout.service.d.ts +12 -0
  170. package/dist/app/services/prism-layout.service.d.ts.map +1 -1
  171. package/dist/app/services/prism-layout.service.js +17 -7
  172. package/dist/app/services/prism-manifest.service.d.ts +4 -0
  173. package/dist/app/services/prism-manifest.service.d.ts.map +1 -1
  174. package/dist/app/services/prism-manifest.service.js +4 -0
  175. package/dist/app/services/prism-navigation.service.d.ts +12 -0
  176. package/dist/app/services/prism-navigation.service.d.ts.map +1 -1
  177. package/dist/app/services/prism-navigation.service.js +85 -19
  178. package/dist/app/services/prism-panel.service.d.ts +7 -3
  179. package/dist/app/services/prism-panel.service.d.ts.map +1 -1
  180. package/dist/app/services/prism-panel.service.js +13 -4
  181. package/dist/app/services/prism-pseudo-state.service.d.ts +59 -14
  182. package/dist/app/services/prism-pseudo-state.service.d.ts.map +1 -1
  183. package/dist/app/services/prism-pseudo-state.service.js +86 -29
  184. package/dist/app/services/prism-renderer.service.d.ts +23 -0
  185. package/dist/app/services/prism-renderer.service.d.ts.map +1 -1
  186. package/dist/app/services/prism-renderer.service.js +77 -8
  187. package/dist/app/services/prism-search.service.d.ts +4 -0
  188. package/dist/app/services/prism-search.service.d.ts.map +1 -1
  189. package/dist/app/services/prism-search.service.js +29 -6
  190. package/dist/app/services/prism-theme.service.d.ts +11 -3
  191. package/dist/app/services/prism-theme.service.d.ts.map +1 -1
  192. package/dist/app/services/prism-theme.service.js +27 -19
  193. package/dist/app/services/prism-url-state.service.d.ts.map +1 -1
  194. package/dist/app/services/prism-url-state.service.js +81 -12
  195. package/dist/app/shared/badge.types.d.ts +7 -0
  196. package/dist/app/shared/badge.types.d.ts.map +1 -0
  197. package/dist/app/shared/badge.types.js +9 -0
  198. package/dist/app/shared/brand-mark.d.ts +35 -0
  199. package/dist/app/shared/brand-mark.d.ts.map +1 -0
  200. package/dist/app/shared/brand-mark.js +52 -0
  201. package/dist/app/shared/metric-bar.d.ts +6 -0
  202. package/dist/app/shared/metric-bar.d.ts.map +1 -0
  203. package/dist/app/shared/metric-bar.js +7 -0
  204. package/dist/app/shared/prism-badge.component.d.ts +21 -0
  205. package/dist/app/shared/prism-badge.component.d.ts.map +1 -0
  206. package/dist/app/shared/prism-badge.component.js +68 -0
  207. package/dist/app/shared/prism-button.component.d.ts +12 -0
  208. package/dist/app/shared/prism-button.component.d.ts.map +1 -0
  209. package/dist/app/shared/prism-button.component.js +28 -0
  210. package/dist/app/shared/prism-icon-button.component.d.ts +17 -0
  211. package/dist/app/shared/prism-icon-button.component.d.ts.map +1 -0
  212. package/dist/app/shared/prism-icon-button.component.js +37 -0
  213. package/dist/app/shared/prism-list-row.component.d.ts +17 -0
  214. package/dist/app/shared/prism-list-row.component.d.ts.map +1 -0
  215. package/dist/app/shared/prism-list-row.component.js +57 -0
  216. package/dist/app/shared/prism-logo.component.d.ts +24 -0
  217. package/dist/app/shared/prism-logo.component.d.ts.map +1 -0
  218. package/dist/app/shared/prism-logo.component.js +77 -0
  219. package/dist/app/shared/prism-metric-badge.component.d.ts +9 -4
  220. package/dist/app/shared/prism-metric-badge.component.d.ts.map +1 -1
  221. package/dist/app/shared/prism-metric-badge.component.js +33 -12
  222. package/dist/app/shared/prism-metric-card.component.d.ts +30 -0
  223. package/dist/app/shared/prism-metric-card.component.d.ts.map +1 -0
  224. package/dist/app/shared/prism-metric-card.component.js +111 -0
  225. package/dist/app/shared/prism-panel-toolbar.component.d.ts +13 -0
  226. package/dist/app/shared/prism-panel-toolbar.component.d.ts.map +1 -0
  227. package/dist/app/shared/prism-panel-toolbar.component.js +28 -0
  228. package/dist/app/shared/prism-segmented.component.d.ts +25 -0
  229. package/dist/app/shared/prism-segmented.component.d.ts.map +1 -0
  230. package/dist/app/shared/prism-segmented.component.js +77 -0
  231. package/dist/app/shared/prism-tabs.component.d.ts +44 -0
  232. package/dist/app/shared/prism-tabs.component.d.ts.map +1 -0
  233. package/dist/app/shared/prism-tabs.component.js +134 -0
  234. package/dist/app/shared/roving-focus.d.ts +13 -0
  235. package/dist/app/shared/roving-focus.d.ts.map +1 -0
  236. package/dist/app/shared/roving-focus.js +34 -0
  237. package/dist/app/shell/prism-shell.component.d.ts +13 -0
  238. package/dist/app/shell/prism-shell.component.d.ts.map +1 -1
  239. package/dist/app/shell/prism-shell.component.js +57 -28
  240. package/dist/app/shell/should-select-first.d.ts +17 -0
  241. package/dist/app/shell/should-select-first.d.ts.map +1 -0
  242. package/dist/app/shell/should-select-first.js +13 -0
  243. package/dist/app/sidebar/navigation-decorations.d.ts +23 -1
  244. package/dist/app/sidebar/navigation-decorations.d.ts.map +1 -1
  245. package/dist/app/sidebar/navigation-decorations.js +33 -2
  246. package/dist/app/sidebar/prism-sidebar.component.d.ts +5 -15
  247. package/dist/app/sidebar/prism-sidebar.component.d.ts.map +1 -1
  248. package/dist/app/sidebar/prism-sidebar.component.js +89 -77
  249. package/dist/app/theme/deprecated-tokens.d.ts +15 -0
  250. package/dist/app/theme/deprecated-tokens.d.ts.map +1 -0
  251. package/dist/app/theme/deprecated-tokens.js +22 -0
  252. package/dist/app/theme/favicon.d.ts +3 -0
  253. package/dist/app/theme/favicon.d.ts.map +1 -0
  254. package/dist/app/theme/favicon.js +3 -0
  255. package/dist/app/theme/prism-default-theme.d.ts.map +1 -1
  256. package/dist/app/theme/prism-default-theme.js +122 -66
  257. package/dist/app/theme/resolve-theme-tokens.d.ts +29 -0
  258. package/dist/app/theme/resolve-theme-tokens.d.ts.map +1 -0
  259. package/dist/app/theme/resolve-theme-tokens.js +43 -0
  260. package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts +4 -7
  261. package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts.map +1 -1
  262. package/dist/app/variant-ribbon/prism-variant-ribbon.component.js +31 -69
  263. package/dist/app/view-tab-bar/next-view-id.d.ts +7 -1
  264. package/dist/app/view-tab-bar/next-view-id.d.ts.map +1 -1
  265. package/dist/app/view-tab-bar/next-view-id.js +9 -1
  266. package/dist/app/view-tab-bar/panel-inputs.d.ts +28 -0
  267. package/dist/app/view-tab-bar/panel-inputs.d.ts.map +1 -0
  268. package/dist/app/view-tab-bar/panel-inputs.js +41 -0
  269. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts +2 -3
  270. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts.map +1 -1
  271. package/dist/app/view-tab-bar/prism-view-panel-host.component.js +9 -9
  272. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts +6 -0
  273. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts.map +1 -1
  274. package/dist/app/view-tab-bar/prism-view-tab-bar.component.js +22 -29
  275. package/dist/builder/config-loader/deprecated-options.d.ts +9 -0
  276. package/dist/builder/config-loader/deprecated-options.d.ts.map +1 -0
  277. package/dist/builder/config-loader/deprecated-options.js +34 -0
  278. package/dist/builder/manifest/composition-wrapper.generator.d.ts +14 -0
  279. package/dist/builder/manifest/composition-wrapper.generator.d.ts.map +1 -0
  280. package/dist/builder/manifest/composition-wrapper.generator.js +66 -0
  281. package/dist/builder/manifest/host-parser.d.ts +2 -0
  282. package/dist/builder/manifest/host-parser.d.ts.map +1 -1
  283. package/dist/builder/manifest/host-parser.js +9 -4
  284. package/dist/builder/manifest/manifest-imports.d.ts +34 -0
  285. package/dist/builder/manifest/manifest-imports.d.ts.map +1 -0
  286. package/dist/builder/manifest/manifest-imports.js +91 -0
  287. package/dist/builder/manifest/runtime-manifest.generator.d.ts +13 -0
  288. package/dist/builder/manifest/runtime-manifest.generator.d.ts.map +1 -1
  289. package/dist/builder/manifest/runtime-manifest.generator.js +137 -65
  290. package/dist/builder/manifest/selector-element.d.ts +16 -0
  291. package/dist/builder/manifest/selector-element.d.ts.map +1 -0
  292. package/dist/builder/manifest/selector-element.js +46 -0
  293. package/dist/builder/manifest/template-literal.d.ts +3 -0
  294. package/dist/builder/manifest/template-literal.d.ts.map +1 -0
  295. package/dist/builder/manifest/template-literal.js +4 -0
  296. package/dist/builder/plugin-runner/plugin-runner.d.ts.map +1 -1
  297. package/dist/builder/plugin-runner/plugin-runner.js +29 -26
  298. package/dist/builder/scanner/api/angular-decorators.d.ts +84 -0
  299. package/dist/builder/scanner/api/angular-decorators.d.ts.map +1 -0
  300. package/dist/builder/scanner/api/angular-decorators.js +157 -0
  301. package/dist/builder/scanner/api/component-api.extractor.d.ts +13 -0
  302. package/dist/builder/scanner/api/component-api.extractor.d.ts.map +1 -0
  303. package/dist/builder/scanner/api/component-api.extractor.js +104 -0
  304. package/dist/builder/scanner/api/doc-tags.d.ts +13 -0
  305. package/dist/builder/scanner/api/doc-tags.d.ts.map +1 -0
  306. package/dist/builder/scanner/api/doc-tags.js +101 -0
  307. package/dist/builder/scanner/api/export-index.d.ts +18 -0
  308. package/dist/builder/scanner/api/export-index.d.ts.map +1 -0
  309. package/dist/builder/scanner/api/export-index.js +22 -0
  310. package/dist/builder/scanner/api/member.extractor.d.ts +90 -0
  311. package/dist/builder/scanner/api/member.extractor.d.ts.map +1 -0
  312. package/dist/builder/scanner/api/member.extractor.js +270 -0
  313. package/dist/builder/scanner/api/pipe-api.extractor.d.ts +12 -0
  314. package/dist/builder/scanner/api/pipe-api.extractor.d.ts.map +1 -0
  315. package/dist/builder/scanner/api/pipe-api.extractor.js +52 -0
  316. package/dist/builder/scanner/api/service-api.extractor.d.ts +14 -0
  317. package/dist/builder/scanner/api/service-api.extractor.d.ts.map +1 -0
  318. package/dist/builder/scanner/api/service-api.extractor.js +119 -0
  319. package/dist/builder/scanner/api/setup.reader.d.ts +26 -0
  320. package/dist/builder/scanner/api/setup.reader.d.ts.map +1 -0
  321. package/dist/builder/scanner/api/setup.reader.js +89 -0
  322. package/dist/builder/scanner/api/type-collector.d.ts +24 -0
  323. package/dist/builder/scanner/api/type-collector.d.ts.map +1 -0
  324. package/dist/builder/scanner/api/type-collector.js +211 -0
  325. package/dist/builder/scanner/ast-utils.d.ts +8 -0
  326. package/dist/builder/scanner/ast-utils.d.ts.map +1 -1
  327. package/dist/builder/scanner/ast-utils.js +37 -1
  328. package/dist/builder/scanner/class-hierarchy.d.ts +5 -3
  329. package/dist/builder/scanner/class-hierarchy.d.ts.map +1 -1
  330. package/dist/builder/scanner/class-hierarchy.js +12 -6
  331. package/dist/builder/scanner/component.scanner.d.ts +60 -6
  332. package/dist/builder/scanner/component.scanner.d.ts.map +1 -1
  333. package/dist/builder/scanner/component.scanner.js +229 -58
  334. package/dist/builder/scanner/composition/compose-template.d.ts +36 -0
  335. package/dist/builder/scanner/composition/compose-template.d.ts.map +1 -0
  336. package/dist/builder/scanner/composition/compose-template.js +187 -0
  337. package/dist/builder/scanner/composition/declarables.d.ts +54 -0
  338. package/dist/builder/scanner/composition/declarables.d.ts.map +1 -0
  339. package/dist/builder/scanner/composition/declarables.js +182 -0
  340. package/dist/builder/scanner/composition/match-declarables.d.ts +43 -0
  341. package/dist/builder/scanner/composition/match-declarables.d.ts.map +1 -0
  342. package/dist/builder/scanner/composition/match-declarables.js +131 -0
  343. package/dist/builder/scanner/composition/read-composition.d.ts +77 -0
  344. package/dist/builder/scanner/composition/read-composition.d.ts.map +1 -0
  345. package/dist/builder/scanner/composition/read-composition.js +302 -0
  346. package/dist/builder/scanner/composition/template-elements.d.ts +12 -0
  347. package/dist/builder/scanner/composition/template-elements.d.ts.map +1 -0
  348. package/dist/builder/scanner/composition/template-elements.js +41 -0
  349. package/dist/builder/scanner/entry-point-discovery.d.ts +5 -0
  350. package/dist/builder/scanner/entry-point-discovery.d.ts.map +1 -1
  351. package/dist/builder/scanner/entry-point-discovery.js +14 -0
  352. package/dist/builder/scanner/entry-point.scanner.d.ts +3 -1
  353. package/dist/builder/scanner/entry-point.scanner.d.ts.map +1 -1
  354. package/dist/builder/scanner/entry-point.scanner.js +7 -6
  355. package/dist/builder/scanner/index.d.ts +4 -0
  356. package/dist/builder/scanner/index.d.ts.map +1 -1
  357. package/dist/builder/scanner/index.js +2 -0
  358. package/dist/builder/scanner/input.extractor.d.ts +31 -2
  359. package/dist/builder/scanner/input.extractor.d.ts.map +1 -1
  360. package/dist/builder/scanner/input.extractor.js +73 -17
  361. package/dist/builder/scanner/pipe.scanner.d.ts +29 -0
  362. package/dist/builder/scanner/pipe.scanner.d.ts.map +1 -0
  363. package/dist/builder/scanner/pipe.scanner.js +65 -0
  364. package/dist/builder/scanner/pseudo-states.d.ts +1 -0
  365. package/dist/builder/scanner/pseudo-states.d.ts.map +1 -1
  366. package/dist/builder/scanner/pseudo-states.js +1 -1
  367. package/dist/builder/scanner/scanner.d.ts +27 -3
  368. package/dist/builder/scanner/scanner.d.ts.map +1 -1
  369. package/dist/builder/scanner/scanner.js +68 -24
  370. package/dist/builder/scanner/service/angular-decorators.d.ts +80 -0
  371. package/dist/builder/scanner/service/angular-decorators.d.ts.map +1 -0
  372. package/dist/builder/scanner/service/angular-decorators.js +154 -0
  373. package/dist/builder/scanner/service/doc-tags.d.ts +13 -0
  374. package/dist/builder/scanner/service/doc-tags.d.ts.map +1 -0
  375. package/dist/builder/scanner/service/doc-tags.js +97 -0
  376. package/dist/builder/scanner/service/export-index.d.ts +18 -0
  377. package/dist/builder/scanner/service/export-index.d.ts.map +1 -0
  378. package/dist/builder/scanner/service/export-index.js +22 -0
  379. package/dist/builder/scanner/service/member.extractor.d.ts +65 -0
  380. package/dist/builder/scanner/service/member.extractor.d.ts.map +1 -0
  381. package/dist/builder/scanner/service/member.extractor.js +216 -0
  382. package/dist/builder/scanner/service/pipe-api.extractor.d.ts +12 -0
  383. package/dist/builder/scanner/service/pipe-api.extractor.d.ts.map +1 -0
  384. package/dist/builder/scanner/service/pipe-api.extractor.js +72 -0
  385. package/dist/builder/scanner/service/service-api.extractor.d.ts +14 -0
  386. package/dist/builder/scanner/service/service-api.extractor.d.ts.map +1 -0
  387. package/dist/builder/scanner/service/service-api.extractor.js +119 -0
  388. package/dist/builder/scanner/service/setup.reader.d.ts +26 -0
  389. package/dist/builder/scanner/service/setup.reader.d.ts.map +1 -0
  390. package/dist/builder/scanner/service/setup.reader.js +89 -0
  391. package/dist/builder/scanner/service/type-collector.d.ts +23 -0
  392. package/dist/builder/scanner/service/type-collector.d.ts.map +1 -0
  393. package/dist/builder/scanner/service/type-collector.js +210 -0
  394. package/dist/builder/scanner/service.scanner.d.ts +26 -0
  395. package/dist/builder/scanner/service.scanner.d.ts.map +1 -0
  396. package/dist/builder/scanner/service.scanner.js +61 -0
  397. package/dist/builder/scanner/showcase-diagnostics.d.ts +60 -1
  398. package/dist/builder/scanner/showcase-diagnostics.d.ts.map +1 -1
  399. package/dist/builder/scanner/showcase-diagnostics.js +123 -10
  400. package/dist/builder/scanner/showcase-states.d.ts +17 -0
  401. package/dist/builder/scanner/showcase-states.d.ts.map +1 -0
  402. package/dist/builder/scanner/showcase-states.js +58 -0
  403. package/dist/builder/scanner/source-file-cache.d.ts +26 -0
  404. package/dist/builder/scanner/source-file-cache.d.ts.map +1 -0
  405. package/dist/builder/scanner/source-file-cache.js +60 -0
  406. package/dist/builder/shared/prism-pipeline.d.ts +6 -0
  407. package/dist/builder/shared/prism-pipeline.d.ts.map +1 -1
  408. package/dist/builder/shared/prism-pipeline.js +71 -18
  409. package/dist/decorator/index.d.ts +1 -1
  410. package/dist/decorator/index.d.ts.map +1 -1
  411. package/dist/decorator/showcase.types.d.ts +102 -9
  412. package/dist/decorator/showcase.types.d.ts.map +1 -1
  413. package/dist/plugin/index.d.ts +6 -1
  414. package/dist/plugin/index.d.ts.map +1 -1
  415. package/dist/plugin/index.js +4 -0
  416. package/dist/plugin/pipe.types.d.ts +36 -0
  417. package/dist/plugin/pipe.types.d.ts.map +1 -0
  418. package/dist/plugin/pipe.types.js +1 -0
  419. package/dist/plugin/plugin.types.d.ts +184 -8
  420. package/dist/plugin/plugin.types.d.ts.map +1 -1
  421. package/dist/plugin/service.types.d.ts +124 -0
  422. package/dist/plugin/service.types.d.ts.map +1 -0
  423. package/dist/plugin/service.types.js +1 -0
  424. package/dist/plugin/status.d.ts +27 -0
  425. package/dist/plugin/status.d.ts.map +1 -0
  426. package/dist/plugin/status.js +26 -0
  427. package/dist/shared/composition.d.ts +30 -0
  428. package/dist/shared/composition.d.ts.map +1 -0
  429. package/dist/shared/composition.js +29 -0
  430. package/dist/shared/pseudo-state.type.d.ts +2 -1
  431. package/dist/shared/pseudo-state.type.d.ts.map +1 -1
  432. package/dist/shared/void-elements.d.ts +3 -0
  433. package/dist/shared/void-elements.d.ts.map +1 -0
  434. package/dist/shared/void-elements.js +2 -0
  435. package/package.json +1 -1
  436. package/src/builder/build/schema.json +6 -6
  437. package/src/builder/serve/schema.json +6 -6
@@ -81,7 +81,38 @@ export function rollupCategory(decorations) {
81
81
  * finding. At 11px the previous pair (cube vs dashed square) was effectively
82
82
  * one glyph, so `wip` now uses a shape that differs in silhouette rather than
83
83
  * in stroke style.
84
+ *
85
+ * `idle` is the glyph of everything that is not work in progress: the box of a
86
+ * component by default, another one for another kind of item (the plug of a
87
+ * service). The dashed circle is shared, so work in progress reads the same
88
+ * for every kind.
89
+ */
90
+ export function lifecycleIcon(status, idle = 'box') {
91
+ return status === 'wip' ? 'circle-dashed' : idle;
92
+ }
93
+ /**
94
+ * The category head's count: the number of entries, plus a chip with the
95
+ * number that need review in the worst tone among them. Replaces "2/4", which
96
+ * read as a fraction of progress rather than as a count of problems.
84
97
  */
85
- export function lifecycleIcon(status) {
86
- return status === 'wip' ? 'circle-dashed' : 'box';
98
+ export function categoryCount(rollup, total) {
99
+ if (rollup.problems === 0 || rollup.variant === null) {
100
+ return { total: String(total), chip: null, title: null };
101
+ }
102
+ const verb = rollup.problems === 1 ? 'entry needs' : 'entries need';
103
+ return {
104
+ total: String(total),
105
+ chip: { text: String(rollup.problems), tone: rollup.variant },
106
+ title: `${rollup.problems} of ${total} ${verb} review`
107
+ };
108
+ }
109
+ const SECTION_FACETS = {
110
+ Components: 'cyan',
111
+ Directives: 'violet',
112
+ Services: 'magenta',
113
+ Pipes: 'blue'
114
+ };
115
+ /** The logo facet a section's icon is coloured in; `null` keeps the primary colour. */
116
+ export function sectionFacet(name) {
117
+ return SECTION_FACETS[name] ?? null;
87
118
  }
@@ -1,4 +1,5 @@
1
1
  import type { ComponentStatus } from '../../decorator/showcase.types.js';
2
+ import { itemKey } from '../services/navigation-item.js';
2
3
  import type { NavigationItem } from '../services/navigation-item.types.js';
3
4
  import { PrismNavigationService } from '../services/prism-navigation.service.js';
4
5
  import { PrismSearchService } from '../services/prism-search.service.js';
@@ -36,23 +37,12 @@ export declare class PrismSidebarComponent {
36
37
  }[]>;
37
38
  protected isCollapsed(key: string): boolean;
38
39
  protected toggleCollapse(key: string): void;
39
- protected itemKey(item: NavigationItem): string;
40
+ protected readonly itemKey: typeof itemKey;
40
41
  protected itemLabel(item: NavigationItem): string;
41
42
  protected itemStatus(item: NavigationItem): ComponentStatus | undefined;
42
- /**
43
- * Accessible name for the roll-up pill, for the deviating case only. The
44
- * pill otherwise renders a bare number distinguished only by colour. A
45
- * screen reader would read the group head as "Feedback 3 12" with nothing
46
- * naming what either number means, and a colour-blind reader can't tell
47
- * them apart at all.
48
- *
49
- * There is no zero branch: a clean category renders its plain
50
- * item count and the template leaves both attributes off, because
51
- * `aria-label` on a descendant feeds the group button's name-from-content
52
- * and "Buttons 0 components need review" is a claim about a group that has
53
- * nothing to review.
54
- */
55
- protected rollupTooltip(rollup: CategoryRollup): string;
43
+ /** The category head's count and problem chip. A clean category shows only its size. */
44
+ protected countOf(rollup: CategoryRollup, total: number): import("./navigation-decorations.js").CategoryCount;
45
+ protected facet(sectionName: string): "cyan" | "blue" | "violet" | "magenta" | null;
56
46
  protected itemTooltip(item: NavigationItem, decorations: ItemDecorations | null): string | null;
57
47
  protected isActive(item: NavigationItem): boolean;
58
48
  protected onSelect(item: NavigationItem): void;
@@ -1 +1 @@
1
- {"version":3,"file":"prism-sidebar.component.d.ts","sourceRoot":"","sources":["../../../src/app/sidebar/prism-sidebar.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAEjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,KAAK,cAAc,EAAgB,KAAK,eAAe,EAA+D,MAAM,6BAA6B,CAAC;;AAcnK,UAAU,eAAe;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,UAAU,WAAW;IACjB,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,eAAe,GAAG,IAAI,CAAC;CACvC;AAED,UAAU,iBAAiB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;CAC1B;AAED,qBAQa,qBAAqB;IAC9B,SAAS,CAAC,QAAQ,CAAC,iBAAiB,yBAAkC;IACtE,SAAS,CAAC,QAAQ,CAAC,aAAa,qBAA8B;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAC5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0D;IAEtF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4H;IAGxJ,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;IAS7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;IAE1E,SAAS,CAAC,QAAQ,CAAC,UAAU,yCAE1B;IAEH,SAAS,CAAC,QAAQ,CAAC,cAAc,oDAe9B;IAEH,SAAS,CAAC,QAAQ,CAAC,iBAAiB;;;;;SAqBjC;IAEH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI3C,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAW3C,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IAI/C,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IAIjD,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,GAAG,SAAS;IAIvE;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAMvD,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI;IAU/F,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;IAUjD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAQ9C,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,aAAa;yCApJZ,qBAAqB;2CAArB,qBAAqB;CA4JjC"}
1
+ {"version":3,"file":"prism-sidebar.component.d.ts","sourceRoot":"","sources":["../../../src/app/sidebar/prism-sidebar.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGzE,OAAO,EAAE,OAAO,EAAsB,MAAM,gCAAgC,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAEjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,OAAO,EAEH,KAAK,cAAc,EAEnB,KAAK,eAAe,EAKvB,MAAM,6BAA6B,CAAC;;AA8BrC,UAAU,eAAe;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,UAAU,WAAW;IACjB,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,eAAe,GAAG,IAAI,CAAC;CACvC;AAED,UAAU,iBAAiB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;CAC1B;AAED,qBAQa,qBAAqB;IAC9B,SAAS,CAAC,QAAQ,CAAC,iBAAiB,yBAAkC;IACtE,SAAS,CAAC,QAAQ,CAAC,aAAa,qBAA8B;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAC5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0D;IAEtF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4H;IAGxJ,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;IAS7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;IAE1E,SAAS,CAAC,QAAQ,CAAC,UAAU,yCAE1B;IAEH,SAAS,CAAC,QAAQ,CAAC,cAAc,oDAe9B;IAEH,SAAS,CAAC,QAAQ,CAAC,iBAAiB;;;;;SAqBjC;IAEH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI3C,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAW3C,SAAS,CAAC,QAAQ,CAAC,OAAO,iBAAW;IAErC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IAIjD,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,GAAG,SAAS;IAIvE,wFAAwF;IACxF,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM;IAIvD,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM;IAInC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI;IAU/F,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;IAMjD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAiB9C,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,aAAa;yCA7IZ,qBAAqB;2CAArB,qBAAqB;CAqJjC"}
@@ -1,10 +1,12 @@
1
1
  import { ChangeDetectionStrategy, Component, computed, HostListener, inject, signal, viewChild } from '@angular/core';
2
2
  import { PrismIconComponent } from '../icons/prism-icon.component.js';
3
3
  import { BUILTIN_NAVIGATION_DECORATIONS } from '../panels/builtin-navigation-decorations.js';
4
+ import { itemKey, itemShowcaseConfig } from '../services/navigation-item.js';
4
5
  import { PrismNavigationService } from '../services/prism-navigation.service.js';
5
6
  import { PrismPluginService } from '../services/prism-plugin.service.js';
6
7
  import { PrismSearchService } from '../services/prism-search.service.js';
7
- import { decorateItem, lifecycleIcon, resolveNavigationDecorations, rollupCategory } from './navigation-decorations.js';
8
+ import { PrismBadgeComponent } from '../shared/prism-badge.component.js';
9
+ import { categoryCount, decorateItem, lifecycleIcon, resolveNavigationDecorations, rollupCategory, sectionFacet } from './navigation-decorations.js';
8
10
  import * as i0 from "@angular/core";
9
11
  const _c0 = ["filterInput"];
10
12
  const _c1 = () => [];
@@ -18,19 +20,22 @@ function PrismSidebarComponent_Conditional_8_For_8_Conditional_5_For_2_Template(
18
20
  const _r4 = i0.ɵɵgetCurrentView();
19
21
  i0.ɵɵelementStart(0, "button", 17);
20
22
  i0.ɵɵlistener("click", function PrismSidebarComponent_Conditional_8_For_8_Conditional_5_For_2_Template_button_click_0_listener() { const item_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.onSelect(item_r5)); });
21
- i0.ɵɵelementStart(1, "span", 18);
22
- i0.ɵɵtext(2);
23
+ i0.ɵɵelement(1, "prism-icon", 18);
24
+ i0.ɵɵelementStart(2, "span", 19);
25
+ i0.ɵɵtext(3);
23
26
  i0.ɵɵelementEnd()();
24
27
  } if (rf & 2) {
25
28
  const item_r5 = ctx.$implicit;
26
29
  const ctx_r2 = i0.ɵɵnextContext(4);
27
30
  i0.ɵɵclassProp("sb-item--active", ctx_r2.isActive(item_r5));
31
+ i0.ɵɵadvance();
32
+ i0.ɵɵproperty("size", 12);
28
33
  i0.ɵɵadvance(2);
29
34
  i0.ɵɵtextInterpolate(ctx_r2.itemLabel(item_r5));
30
35
  } }
31
36
  function PrismSidebarComponent_Conditional_8_For_8_Conditional_5_Template(rf, ctx) { if (rf & 1) {
32
37
  i0.ɵɵelementStart(0, "div", 15);
33
- i0.ɵɵrepeaterCreate(1, PrismSidebarComponent_Conditional_8_For_8_Conditional_5_For_2_Template, 3, 3, "button", 16, _forTrack1, true);
38
+ i0.ɵɵrepeaterCreate(1, PrismSidebarComponent_Conditional_8_For_8_Conditional_5_For_2_Template, 4, 4, "button", 16, _forTrack1, true);
34
39
  i0.ɵɵelementEnd();
35
40
  } if (rf & 2) {
36
41
  const cat_r2 = i0.ɵɵnextContext().$implicit;
@@ -78,51 +83,46 @@ function PrismSidebarComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
78
83
  i0.ɵɵadvance();
79
84
  i0.ɵɵrepeater(ctx_r2.pageCategories());
80
85
  } }
81
- function PrismSidebarComponent_For_10_For_7_Conditional_6_Template(rf, ctx) { if (rf & 1) {
82
- i0.ɵɵtext(0);
83
- } if (rf & 2) {
84
- const cat_r7 = i0.ɵɵnextContext().$implicit;
85
- i0.ɵɵtextInterpolate2(" ", cat_r7.rollup.problems, "/", cat_r7.items.length, " ");
86
- } }
87
86
  function PrismSidebarComponent_For_10_For_7_Conditional_7_Template(rf, ctx) { if (rf & 1) {
88
- i0.ɵɵtext(0);
87
+ i0.ɵɵelement(0, "prism-badge", 23);
89
88
  } if (rf & 2) {
90
- const cat_r7 = i0.ɵɵnextContext().$implicit;
91
- i0.ɵɵtextInterpolate1(" ", cat_r7.items.length, " ");
89
+ const chip_r9 = ctx;
90
+ i0.ɵɵproperty("tone", chip_r9.tone)("value", chip_r9.text);
92
91
  } }
93
92
  function PrismSidebarComponent_For_10_For_7_Conditional_8_For_2_For_6_Template(rf, ctx) { if (rf & 1) {
94
- i0.ɵɵelement(0, "prism-icon", 27);
93
+ i0.ɵɵelement(0, "prism-icon", 28);
95
94
  } if (rf & 2) {
96
- const mark_r11 = ctx.$implicit;
97
- i0.ɵɵclassMap("sb-health sb-health--" + mark_r11.variant);
98
- i0.ɵɵproperty("name", mark_r11.icon)("size", 11);
95
+ const mark_r12 = ctx.$implicit;
96
+ i0.ɵɵclassMap("sb-health sb-health--" + mark_r12.variant);
97
+ i0.ɵɵproperty("name", mark_r12.icon)("size", 11);
98
+ i0.ɵɵattribute("aria-label", mark_r12.label);
99
99
  } }
100
100
  function PrismSidebarComponent_For_10_For_7_Conditional_8_For_2_Template(rf, ctx) { if (rf & 1) {
101
- const _r9 = i0.ɵɵgetCurrentView();
101
+ const _r10 = i0.ɵɵgetCurrentView();
102
102
  i0.ɵɵelementStart(0, "button", 17);
103
- i0.ɵɵlistener("click", function PrismSidebarComponent_For_10_For_7_Conditional_8_For_2_Template_button_click_0_listener() { const row_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.onSelect(row_r10.item)); });
104
- i0.ɵɵelement(1, "prism-icon", 24);
105
- i0.ɵɵelementStart(2, "span", 18);
103
+ i0.ɵɵlistener("click", function PrismSidebarComponent_For_10_For_7_Conditional_8_For_2_Template_button_click_0_listener() { const row_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.onSelect(row_r11.item)); });
104
+ i0.ɵɵelement(1, "prism-icon", 25);
105
+ i0.ɵɵelementStart(2, "span", 19);
106
106
  i0.ɵɵtext(3);
107
107
  i0.ɵɵelementEnd();
108
- i0.ɵɵelementStart(4, "span", 25);
109
- i0.ɵɵrepeaterCreate(5, PrismSidebarComponent_For_10_For_7_Conditional_8_For_2_For_6_Template, 1, 4, "prism-icon", 26, _forTrack3);
108
+ i0.ɵɵelementStart(4, "span", 26);
109
+ i0.ɵɵrepeaterCreate(5, PrismSidebarComponent_For_10_For_7_Conditional_8_For_2_For_6_Template, 1, 5, "prism-icon", 27, _forTrack3);
110
110
  i0.ɵɵelementEnd()();
111
111
  } if (rf & 2) {
112
- const row_r10 = ctx.$implicit;
112
+ const row_r11 = ctx.$implicit;
113
113
  const ctx_r2 = i0.ɵɵnextContext(4);
114
- i0.ɵɵclassProp("sb-item--active", ctx_r2.isActive(row_r10.item))("sb-item--deprecated", ctx_r2.itemStatus(row_r10.item) === "deprecated");
115
- i0.ɵɵattribute("title", ctx_r2.itemTooltip(row_r10.item, row_r10.decorations));
114
+ i0.ɵɵclassProp("sb-item--active", ctx_r2.isActive(row_r11.item))("sb-item--deprecated", ctx_r2.itemStatus(row_r11.item) === "deprecated");
115
+ i0.ɵɵattribute("title", ctx_r2.itemTooltip(row_r11.item, row_r11.decorations));
116
116
  i0.ɵɵadvance();
117
- i0.ɵɵproperty("name", row_r10.icon)("size", 12);
117
+ i0.ɵɵproperty("name", row_r11.icon)("size", 12);
118
118
  i0.ɵɵadvance(2);
119
- i0.ɵɵtextInterpolate(ctx_r2.itemLabel(row_r10.item));
119
+ i0.ɵɵtextInterpolate(ctx_r2.itemLabel(row_r11.item));
120
120
  i0.ɵɵadvance(2);
121
- i0.ɵɵrepeater(row_r10.decorations?.marks ?? i0.ɵɵpureFunction0(8, _c1));
121
+ i0.ɵɵrepeater(row_r11.decorations?.marks ?? i0.ɵɵpureFunction0(8, _c1));
122
122
  } }
123
123
  function PrismSidebarComponent_For_10_For_7_Conditional_8_Template(rf, ctx) { if (rf & 1) {
124
124
  i0.ɵɵelementStart(0, "div", 15);
125
- i0.ɵɵrepeaterCreate(1, PrismSidebarComponent_For_10_For_7_Conditional_8_For_2_Template, 7, 9, "button", 23, _forTrack2, true);
125
+ i0.ɵɵrepeaterCreate(1, PrismSidebarComponent_For_10_For_7_Conditional_8_For_2_Template, 7, 9, "button", 24, _forTrack2, true);
126
126
  i0.ɵɵelementEnd();
127
127
  } if (rf & 2) {
128
128
  const cat_r7 = i0.ɵɵnextContext().$implicit;
@@ -136,11 +136,13 @@ function PrismSidebarComponent_For_10_For_7_Template(rf, ctx) { if (rf & 1) {
136
136
  i0.ɵɵelement(2, "prism-icon", 13)(3, "span", 14);
137
137
  i0.ɵɵtext(4);
138
138
  i0.ɵɵelementStart(5, "span", 22);
139
- i0.ɵɵconditionalCreate(6, PrismSidebarComponent_For_10_For_7_Conditional_6_Template, 1, 2)(7, PrismSidebarComponent_For_10_For_7_Conditional_7_Template, 1, 1);
139
+ i0.ɵɵtext(6);
140
+ i0.ɵɵconditionalCreate(7, PrismSidebarComponent_For_10_For_7_Conditional_7_Template, 1, 2, "prism-badge", 23);
140
141
  i0.ɵɵelementEnd()();
141
142
  i0.ɵɵconditionalCreate(8, PrismSidebarComponent_For_10_For_7_Conditional_8_Template, 3, 0, "div", 15);
142
143
  i0.ɵɵelementEnd();
143
144
  } if (rf & 2) {
145
+ let tmp_29_0;
144
146
  const cat_r7 = ctx.$implicit;
145
147
  const section_r8 = i0.ɵɵnextContext().$implicit;
146
148
  const ctx_r2 = i0.ɵɵnextContext();
@@ -151,27 +153,31 @@ function PrismSidebarComponent_For_10_For_7_Template(rf, ctx) { if (rf & 1) {
151
153
  i0.ɵɵproperty("size", 10);
152
154
  i0.ɵɵadvance(2);
153
155
  i0.ɵɵtextInterpolate1(" ", cat_r7.name, " ");
156
+ const count_r13 = ctx_r2.countOf(cat_r7.rollup, cat_r7.items.length);
154
157
  i0.ɵɵadvance();
155
- i0.ɵɵclassProp("sb-group-count--warn", cat_r7.rollup.variant === "warn")("sb-group-count--danger", cat_r7.rollup.variant === "danger");
156
- i0.ɵɵattribute("title", cat_r7.rollup.problems ? ctx_r2.rollupTooltip(cat_r7.rollup) : null)("aria-label", cat_r7.rollup.problems ? ctx_r2.rollupTooltip(cat_r7.rollup) : null);
158
+ i0.ɵɵattribute("title", count_r13.title)("aria-label", count_r13.title);
159
+ i0.ɵɵadvance();
160
+ i0.ɵɵtextInterpolate1(" ", count_r13.total, " ");
161
+ i0.ɵɵadvance();
162
+ i0.ɵɵconditional((tmp_29_0 = count_r13.chip) ? 7 : -1, tmp_29_0);
157
163
  i0.ɵɵadvance();
158
- i0.ɵɵconditional(cat_r7.rollup.problems ? 6 : 7);
159
- i0.ɵɵadvance(2);
160
164
  i0.ɵɵconditional(!ctx_r2.isCollapsed("sec:" + section_r8.name + ":" + cat_r7.name) ? 8 : -1);
161
165
  } }
162
166
  function PrismSidebarComponent_For_10_Template(rf, ctx) { if (rf & 1) {
163
- i0.ɵɵelementStart(0, "div", 19)(1, "span", 20);
167
+ i0.ɵɵelementStart(0, "div", 20)(1, "span", 8);
164
168
  i0.ɵɵelement(2, "prism-icon", 21);
165
169
  i0.ɵɵtext(3);
166
170
  i0.ɵɵelementEnd();
167
171
  i0.ɵɵelementStart(4, "span");
168
172
  i0.ɵɵtext(5);
169
173
  i0.ɵɵelementEnd()();
170
- i0.ɵɵrepeaterCreate(6, PrismSidebarComponent_For_10_For_7_Template, 9, 13, "div", 10, _forTrack0);
174
+ i0.ɵɵrepeaterCreate(6, PrismSidebarComponent_For_10_For_7_Template, 9, 10, "div", 10, _forTrack0);
171
175
  } if (rf & 2) {
172
176
  const section_r8 = ctx.$implicit;
177
+ const ctx_r2 = i0.ɵɵnextContext();
173
178
  i0.ɵɵadvance(2);
174
- i0.ɵɵproperty("name", section_r8.icon)("size", 10);
179
+ i0.ɵɵproperty("name", section_r8.icon)("size", 11);
180
+ i0.ɵɵattribute("data-facet", ctx_r2.facet(section_r8.name));
175
181
  i0.ɵɵadvance();
176
182
  i0.ɵɵtextInterpolate1(" ", section_r8.name, " ");
177
183
  i0.ɵɵadvance(2);
@@ -182,12 +188,27 @@ function PrismSidebarComponent_For_10_Template(rf, ctx) { if (rf & 1) {
182
188
  const STORAGE_KEY = 'ng-prism-sidebar-collapsed';
183
189
  const SECTION_ICONS = {
184
190
  Components: 'box',
185
- Directives: 'zap'
191
+ Directives: 'zap',
192
+ Services: 'plug',
193
+ Pipes: 'pipette'
186
194
  };
187
195
  const DEFAULT_SECTION_ICON = 'box-select';
196
+ const SERVICE_ICON = 'plug';
197
+ const PIPE_ICON = 'pipette';
188
198
  function sectionIcon(name) {
189
199
  return SECTION_ICONS[name] ?? DEFAULT_SECTION_ICON;
190
200
  }
201
+ /** The glyph of an item's kind, shown unless it is a work in progress. `undefined` for a component: `lifecycleIcon` falls back to the box. */
202
+ function idleIcon(item) {
203
+ switch (item.kind) {
204
+ case 'service':
205
+ return SERVICE_ICON;
206
+ case 'pipe':
207
+ return PIPE_ICON;
208
+ default:
209
+ return undefined;
210
+ }
211
+ }
191
212
  export class PrismSidebarComponent {
192
213
  navigationService = inject(PrismNavigationService);
193
214
  searchService = inject(PrismSearchService);
@@ -235,7 +256,7 @@ export class PrismSidebarComponent {
235
256
  categories: section.categories.map((cat) => {
236
257
  const items = cat.items.map((item) => ({
237
258
  item,
238
- icon: lifecycleIcon(this.itemStatus(item)),
259
+ icon: lifecycleIcon(this.itemStatus(item), idleIcon(item)),
239
260
  decorations: decorateItem(item, defs)
240
261
  }));
241
262
  return {
@@ -261,31 +282,19 @@ export class PrismSidebarComponent {
261
282
  return next;
262
283
  });
263
284
  }
264
- itemKey(item) {
265
- return item.kind === 'component' ? item.data.meta.className : `page:${item.data.title}`;
266
- }
285
+ itemKey = itemKey;
267
286
  itemLabel(item) {
268
- return item.kind === 'component' ? item.data.meta.showcaseConfig.title : item.data.title;
287
+ return item.kind === 'page' ? item.data.title : item.data.meta.showcaseConfig.title;
269
288
  }
270
289
  itemStatus(item) {
271
- return item.kind === 'component' ? item.data.meta.showcaseConfig.status : undefined;
290
+ return itemShowcaseConfig(item)?.status;
291
+ }
292
+ /** The category head's count and problem chip. A clean category shows only its size. */
293
+ countOf(rollup, total) {
294
+ return categoryCount(rollup, total);
272
295
  }
273
- /**
274
- * Accessible name for the roll-up pill, for the deviating case only. The
275
- * pill otherwise renders a bare number distinguished only by colour. A
276
- * screen reader would read the group head as "Feedback 3 12" with nothing
277
- * naming what either number means, and a colour-blind reader can't tell
278
- * them apart at all.
279
- *
280
- * There is no zero branch: a clean category renders its plain
281
- * item count and the template leaves both attributes off, because
282
- * `aria-label` on a descendant feeds the group button's name-from-content
283
- * and "Buttons 0 components need review" is a claim about a group that has
284
- * nothing to review.
285
- */
286
- rollupTooltip(rollup) {
287
- const noun = rollup.problems === 1 ? 'component needs' : 'components need';
288
- return `${rollup.problems} ${noun} review`;
296
+ facet(sectionName) {
297
+ return sectionFacet(sectionName);
289
298
  }
290
299
  itemTooltip(item, decorations) {
291
300
  const status = this.itemStatus(item);
@@ -300,19 +309,22 @@ export class PrismSidebarComponent {
300
309
  }
301
310
  isActive(item) {
302
311
  const active = this.navigationService.activeItem();
303
- if (!active || active.kind !== item.kind)
304
- return false;
305
- if (item.kind === 'component') {
306
- return item.data.meta.className === active.data.meta.className;
307
- }
308
- return item.data.title === active.data.title;
312
+ return active !== null && itemKey(active) === itemKey(item);
309
313
  }
310
314
  onSelect(item) {
311
- if (item.kind === 'component') {
312
- this.navigationService.select(item.data);
313
- }
314
- else {
315
- this.navigationService.selectPage(item.data);
315
+ switch (item.kind) {
316
+ case 'component':
317
+ this.navigationService.select(item.data);
318
+ break;
319
+ case 'service':
320
+ this.navigationService.selectService(item.data);
321
+ break;
322
+ case 'pipe':
323
+ this.navigationService.selectPipe(item.data);
324
+ break;
325
+ case 'page':
326
+ this.navigationService.selectPage(item.data);
327
+ break;
316
328
  }
317
329
  }
318
330
  loadCollapsed() {
@@ -340,7 +352,7 @@ export class PrismSidebarComponent {
340
352
  i0.ɵɵqueryAdvance();
341
353
  } }, hostBindings: function PrismSidebarComponent_HostBindings(rf, ctx) { if (rf & 1) {
342
354
  i0.ɵɵlistener("keydown", function PrismSidebarComponent_keydown_HostBindingHandler($event) { return ctx.onGlobalKey($event); }, i0.ɵɵresolveDocument);
343
- } }, decls: 11, vars: 3, consts: [["filterInput", ""], [1, "prism-sidebar"], [1, "sb-filter"], ["name", "search", 3, "size"], ["placeholder", "Filter components\u2026", 3, "input", "value"], [1, "sb-scroll"], [1, "sb-pinned"], [1, "sb-pinned-head"], [1, "sb-pinned-head-l"], ["name", "pin", 1, "sb-pinned-pin", 3, "size"], [1, "sb-group", 3, "sb-group--collapsed"], [1, "sb-group"], [1, "sb-group-head", 3, "click"], ["name", "chevron-down", 3, "size"], [1, "sb-group-chip"], [1, "sb-group-body"], [1, "sb-item", 3, "sb-item--active"], [1, "sb-item", 3, "click"], [1, "sb-item-name"], [1, "sb-section-head"], [1, "sb-section-head-l"], [1, "sb-section-icon", 3, "name", "size"], [1, "sb-group-count"], [1, "sb-item", 3, "sb-item--active", "sb-item--deprecated"], [1, "sb-item-icon", 3, "name", "size"], [1, "sb-item-health"], [3, "name", "size", "class"], [3, "name", "size"]], template: function PrismSidebarComponent_Template(rf, ctx) { if (rf & 1) {
355
+ } }, decls: 11, vars: 3, consts: [["filterInput", ""], [1, "prism-sidebar"], [1, "sb-filter"], ["name", "search", 3, "size"], ["placeholder", "Filter\u2026", 3, "input", "value"], [1, "sb-scroll"], [1, "sb-pinned"], [1, "sb-section-head", "sb-section-head--first"], [1, "sb-section-head-l"], ["name", "pin", 1, "sb-section-icon", "sb-section-icon--muted", 3, "size"], [1, "sb-group", 3, "sb-group--collapsed"], [1, "sb-group"], [1, "sb-group-head", 3, "click"], ["name", "chevron-down", 3, "size"], [1, "sb-group-chip"], [1, "sb-group-body"], [1, "sb-item", 3, "sb-item--active"], [1, "sb-item", 3, "click"], ["name", "file-text", 1, "sb-item-icon", 3, "size"], [1, "sb-item-name"], [1, "sb-section-head"], [1, "sb-section-icon", 3, "name", "size"], [1, "sb-group-count"], ["size", "sm", "dot", "", "aria-hidden", "true", 3, "tone", "value"], [1, "sb-item", 3, "sb-item--active", "sb-item--deprecated"], [1, "sb-item-icon", 3, "name", "size"], [1, "sb-item-health"], ["role", "img", 3, "name", "size", "class"], ["role", "img", 3, "name", "size"]], template: function PrismSidebarComponent_Template(rf, ctx) { if (rf & 1) {
344
356
  i0.ɵɵelementStart(0, "nav", 1)(1, "div", 2);
345
357
  i0.ɵɵelement(2, "prism-icon", 3);
346
358
  i0.ɵɵelementStart(3, "input", 4, 0);
@@ -351,7 +363,7 @@ export class PrismSidebarComponent {
351
363
  i0.ɵɵelementEnd()();
352
364
  i0.ɵɵelementStart(7, "div", 5);
353
365
  i0.ɵɵconditionalCreate(8, PrismSidebarComponent_Conditional_8_Template, 9, 2, "div", 6);
354
- i0.ɵɵrepeaterCreate(9, PrismSidebarComponent_For_10_Template, 8, 4, null, null, _forTrack0);
366
+ i0.ɵɵrepeaterCreate(9, PrismSidebarComponent_For_10_Template, 8, 5, null, null, _forTrack0);
355
367
  i0.ɵɵelementEnd()();
356
368
  } if (rf & 2) {
357
369
  i0.ɵɵadvance(2);
@@ -362,13 +374,13 @@ export class PrismSidebarComponent {
362
374
  i0.ɵɵconditional(ctx.pageCategories().length > 0 ? 8 : -1);
363
375
  i0.ɵɵadvance();
364
376
  i0.ɵɵrepeater(ctx.componentSections());
365
- } }, dependencies: [PrismIconComponent], styles: [".prism-sidebar[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.sb-filter[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n height: 30px;\n padding: 0 10px;\n margin: 12px;\n color: var(--%NS%prism-text-muted);\n background: var(--%NS%prism-input-bg);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 6px;\n}\n\n.sb-filter[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n font-family: var(--%NS%font-sans);\n font-size: var(--%NS%fs-md);\n color: var(--%NS%prism-text);\n outline: none;\n background: transparent;\n border: 0;\n}\n\n.sb-filter[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n color: var(--%NS%prism-text-muted);\n}\n\n.sb-filter[_ngcontent-%COMP%] kbd[_ngcontent-%COMP%] {\n padding: 1px 5px;\n font-family: var(--%NS%font-mono);\n font-size: 10px;\n color: var(--%NS%prism-text-ghost);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 3px;\n}\n\n.sb-scroll[_ngcontent-%COMP%] {\n flex: 1;\n padding: 10px 0 16px;\n padding-top: 0;\n overflow-y: auto;\n}\n\n.sb-scroll[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 8px;\n}\n\n.sb-scroll[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--%NS%prism-border-strong);\n border-radius: 4px;\n}\n\n.sb-scroll[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.sb-pinned[_ngcontent-%COMP%] {\n padding: 0 0 10px;\n margin-bottom: 4px;\n border-top: 1px solid var(--%NS%prism-border);\n border-bottom: 1px solid var(--%NS%prism-border);\n}\n\n.sb-section-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 14px 6px;\n margin-top: 6px;\n font-size: 10.5px;\n font-weight: 700;\n color: var(--%NS%prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.09em;\n}\n\n.sb-section-head-l[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n align-items: center;\n}\n\n.sb-section-icon[_ngcontent-%COMP%] {\n color: var(--%NS%prism-primary);\n}\n\n.sb-pinned-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 14px 6px;\n margin-top: 6px;\n font-size: 10.5px;\n font-weight: 700;\n color: var(--%NS%prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.09em;\n}\n\n.sb-pinned-head-l[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n align-items: center;\n}\n\n.sb-pinned-pin[_ngcontent-%COMP%] {\n color: var(--%NS%prism-accent);\n}\n\n.sb-group[_ngcontent-%COMP%] {\n margin-bottom: 4px;\n}\n\n.sb-group-head[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n align-items: center;\n width: 100%;\n padding: 8px 14px 6px;\n font-family: var(--%NS%font-sans);\n font-size: 10.5px;\n font-weight: 700;\n color: var(--%NS%prism-text-ghost);\n text-align: left;\n text-transform: uppercase;\n letter-spacing: 0.09em;\n cursor: pointer;\n user-select: none;\n background: none;\n border: none;\n}\n\n.sb-group-head[_ngcontent-%COMP%] prism-icon[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-ghost);\n transition: transform var(--%NS%dur-fast);\n}\n\n.sb-group--collapsed[_ngcontent-%COMP%] .sb-group-head[_ngcontent-%COMP%] prism-icon[_ngcontent-%COMP%] {\n transform: rotate(-90deg);\n}\n\n.sb-group-chip[_ngcontent-%COMP%] {\n width: 6px;\n height: 6px;\n background: var(--%NS%prism-text-ghost);\n border-radius: 2px;\n}\n\n.sb-group-count[_ngcontent-%COMP%] {\n margin-left: auto;\n font-family: var(--%NS%font-mono);\n font-size: 10px;\n font-weight: 500;\n color: var(--%NS%prism-text-ghost);\n}\n\n.sb-group-count--warn[_ngcontent-%COMP%] {\n color: var(--%NS%prism-mark-attention);\n}\n\n.sb-group-count--danger[_ngcontent-%COMP%] {\n color: var(--%NS%prism-mark-critical);\n}\n\n.sb-item[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n align-items: center;\n width: 100%;\n height: 30px;\n padding: 0 14px 0 28px;\n font-family: var(--%NS%font-sans);\n font-size: 13px;\n color: var(--%NS%prism-text-2);\n text-align: left;\n cursor: pointer;\n background: none;\n border: none;\n transition:\n background var(--%NS%dur-fast),\n color var(--%NS%dur-fast);\n}\n\n.sb-item[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text);\n background: color-mix(in srgb, var(--%NS%prism-primary) 5%, transparent);\n}\n\n.sb-item--active[_ngcontent-%COMP%] {\n font-weight: 500;\n background: color-mix(in srgb, var(--%NS%prism-primary) 12%, transparent);\n}\n\n.sb-item-icon[_ngcontent-%COMP%] {\n flex: 0 0 12px;\n opacity: 0.7;\n}\n\n.sb-item-name[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n\n\n\n\n\n\n.sb-item-health[_ngcontent-%COMP%] {\n display: flex;\n flex: none;\n gap: var(--%NS%sp-1);\n align-items: center;\n justify-content: flex-end;\n width: 40px;\n overflow: hidden;\n}\n\n\n\n\n\n\n.sb-health[_ngcontent-%COMP%] {\n fill: none;\n stroke: currentcolor;\n stroke-width: 2;\n}\n\n.sb-health--warn[_ngcontent-%COMP%] {\n color: color-mix(in srgb, var(--%NS%prism-mark-attention) 80%, transparent);\n}\n\n.sb-health--danger[_ngcontent-%COMP%] {\n color: var(--%NS%prism-mark-critical);\n}\n\n.sb-item--deprecated[_ngcontent-%COMP%] .sb-item-name[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-ghost);\n text-decoration: line-through;\n text-decoration-thickness: 1px;\n opacity: 0.7;\n}\n\n[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--%NS%prism-primary);\n outline-offset: 2px;\n}"] });
377
+ } }, dependencies: [PrismIconComponent, PrismBadgeComponent], styles: [".prism-sidebar[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.sb-filter[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n height: 30px;\n padding: 0 10px;\n margin: 12px;\n color: var(--%NS%prism-text-muted);\n background: var(--%NS%prism-input-bg);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 6px;\n}\n\n.sb-filter[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n font-family: var(--%NS%font-sans);\n font-size: var(--%NS%fs-md);\n color: var(--%NS%prism-text);\n outline: none;\n background: transparent;\n border: 0;\n}\n\n.sb-filter[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n color: var(--%NS%prism-text-muted);\n}\n\n.sb-filter[_ngcontent-%COMP%] kbd[_ngcontent-%COMP%] {\n padding: 1px 5px;\n font-family: var(--%NS%font-mono);\n font-size: 10px;\n color: var(--%NS%prism-text-muted);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 3px;\n}\n\n.sb-scroll[_ngcontent-%COMP%] {\n flex: 1;\n padding: 0 0 16px;\n margin-right: 6px;\n overflow-y: auto;\n scrollbar-color: var(--%NS%prism-border-strong) transparent;\n scrollbar-width: thin;\n}\n\n.sb-scroll[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 8px;\n}\n\n.sb-scroll[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--%NS%prism-border-strong);\n border-radius: 4px;\n}\n\n.sb-scroll[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.sb-pinned[_ngcontent-%COMP%] {\n padding: 0 0 6px;\n}\n\n.sb-section-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 14px 6px;\n margin-top: 6px;\n font-size: 11px;\n font-weight: 600;\n color: var(--%NS%prism-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.07em;\n border-top: 1px solid var(--%NS%prism-border);\n}\n\n.sb-section-head-l[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n align-items: center;\n}\n\n.sb-section-icon[_ngcontent-%COMP%] {\n color: var(--%NS%prism-primary);\n}\n\n.sb-group[_ngcontent-%COMP%] {\n margin-bottom: 4px;\n}\n\n.sb-group-head[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n align-items: center;\n width: 100%;\n padding: 6px 14px 4px;\n font-family: var(--%NS%font-sans);\n font-size: 12.5px;\n font-weight: 500;\n color: var(--%NS%prism-text-2);\n text-align: left;\n cursor: pointer;\n user-select: none;\n background: none;\n border: none;\n}\n\n.sb-group-head[_ngcontent-%COMP%] > prism-icon[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n transition: transform var(--%NS%dur-fast);\n}\n\n.sb-group--collapsed[_ngcontent-%COMP%] .sb-group-head[_ngcontent-%COMP%] > prism-icon[_ngcontent-%COMP%] {\n transform: rotate(-90deg);\n}\n\n.sb-group-chip[_ngcontent-%COMP%] {\n width: 6px;\n height: 6px;\n background: var(--%NS%prism-text-ghost);\n border-radius: 2px;\n}\n\n.sb-group-count[_ngcontent-%COMP%] {\n display: inline-flex;\n gap: 6px;\n align-items: center;\n margin-left: auto;\n font-family: var(--%NS%font-mono);\n font-size: 10.5px;\n font-weight: 500;\n color: var(--%NS%prism-text-muted);\n}\n\n.sb-item[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n align-items: center;\n width: 100%;\n height: 30px;\n padding: 0 14px 0 28px;\n font-family: var(--%NS%font-sans);\n font-size: 13px;\n color: var(--%NS%prism-text-2);\n text-align: left;\n cursor: pointer;\n background: none;\n border: none;\n transition:\n background var(--%NS%dur-fast),\n color var(--%NS%dur-fast);\n}\n\n.sb-item[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text);\n background: color-mix(in srgb, var(--%NS%prism-primary) 5%, transparent);\n}\n\n.sb-item--active[_ngcontent-%COMP%] {\n position: relative;\n font-weight: 500;\n color: var(--%NS%prism-text);\n background: var(--%NS%prism-primary-bg);\n}\n\n.sb-item-icon[_ngcontent-%COMP%] {\n flex: 0 0 12px;\n color: var(--%NS%prism-text-muted);\n}\n\n.sb-item--active[_ngcontent-%COMP%] .sb-item-icon[_ngcontent-%COMP%] {\n color: var(--%NS%prism-primary);\n}\n\n.sb-item-name[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n\n\n\n\n\n\n.sb-item-health[_ngcontent-%COMP%] {\n display: flex;\n flex: none;\n gap: var(--%NS%sp-1);\n align-items: center;\n justify-content: flex-end;\n width: 40px;\n overflow: hidden;\n}\n\n\n\n\n\n\n.sb-health[_ngcontent-%COMP%] {\n fill: none;\n stroke: currentcolor;\n stroke-width: 2;\n}\n\n.sb-health--warn[_ngcontent-%COMP%] {\n color: var(--%NS%prism-warn);\n}\n\n.sb-health--danger[_ngcontent-%COMP%] {\n color: var(--%NS%prism-danger);\n}\n\n.sb-item--deprecated[_ngcontent-%COMP%] .sb-item-name[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n text-decoration: line-through;\n text-decoration-thickness: 1px;\n}\n\n[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--%NS%prism-primary);\n outline-offset: 2px;\n}\n\n\n.sb-section-head--first[_ngcontent-%COMP%] {\n margin-top: 0;\n border-top: 0;\n}\n\n.sb-section-icon--muted[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n}\n\n\n.sb-section-icon[data-facet='cyan'][_ngcontent-%COMP%] {\n color: var(--%NS%prism-facet-cyan);\n}\n\n.sb-section-icon[data-facet='blue'][_ngcontent-%COMP%] {\n color: var(--%NS%prism-facet-blue);\n}\n\n.sb-section-icon[data-facet='violet'][_ngcontent-%COMP%] {\n color: var(--%NS%prism-facet-violet);\n}\n\n.sb-section-icon[data-facet='magenta'][_ngcontent-%COMP%] {\n color: var(--%NS%prism-facet-magenta);\n}\n\n\n\n\n.sb-item--%NS%active[_ngcontent-%COMP%]::before {\n position: absolute;\n top: 50%;\n left: 4px;\n width: 16px;\n height: 3px;\n margin-top: -1.5px;\n content: '';\n background: var(--%NS%prism-brand-ink);\n border-radius: 2px;\n transform: rotate(90deg);\n}"] });
366
378
  }
367
379
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismSidebarComponent, [{
368
380
  type: Component,
369
- args: [{ selector: 'prism-sidebar', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismIconComponent], template: "<nav class=\"prism-sidebar\">\n <div class=\"sb-filter\">\n <prism-icon\n name=\"search\"\n [size]=\"12\" />\n <input\n #filterInput\n placeholder=\"Filter components\u2026\"\n [value]=\"searchService.query()\"\n (input)=\"searchService.search($any($event.target).value)\" />\n <kbd>/</kbd>\n </div>\n\n <div class=\"sb-scroll\">\n @if (pageCategories().length > 0) {\n <div class=\"sb-pinned\">\n <div class=\"sb-pinned-head\">\n <span class=\"sb-pinned-head-l\">\n <prism-icon\n name=\"pin\"\n [size]=\"10\"\n class=\"sb-pinned-pin\" />\n Pages\n </span>\n <span>{{ totalPages() }}</span>\n </div>\n @for (cat of pageCategories(); track cat.name) {\n <div\n class=\"sb-group\"\n [class.sb-group--collapsed]=\"isCollapsed('page:' + cat.name)\">\n <button\n class=\"sb-group-head\"\n (click)=\"toggleCollapse('page:' + cat.name)\"\n [attr.aria-expanded]=\"!isCollapsed('page:' + cat.name)\">\n <prism-icon\n name=\"chevron-down\"\n [size]=\"10\" />\n <span class=\"sb-group-chip\"></span>\n {{ cat.name }}\n </button>\n @if (!isCollapsed('page:' + cat.name)) {\n <div class=\"sb-group-body\">\n @for (item of cat.items; track itemKey(item)) {\n <button\n class=\"sb-item\"\n [class.sb-item--active]=\"isActive(item)\"\n (click)=\"onSelect(item)\">\n <span class=\"sb-item-name\">{{ itemLabel(item) }}</span>\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n @for (section of componentSections(); track section.name) {\n <div class=\"sb-section-head\">\n <span class=\"sb-section-head-l\">\n <prism-icon\n [name]=\"section.icon\"\n [size]=\"10\"\n class=\"sb-section-icon\" />\n {{ section.name }}\n </span>\n <span>{{ section.totalCount }}</span>\n </div>\n @for (cat of section.categories; track cat.name) {\n <div\n class=\"sb-group\"\n [class.sb-group--collapsed]=\"isCollapsed('sec:' + section.name + ':' + cat.name)\">\n <button\n class=\"sb-group-head\"\n (click)=\"toggleCollapse('sec:' + section.name + ':' + cat.name)\"\n [attr.aria-expanded]=\"!isCollapsed('sec:' + section.name + ':' + cat.name)\">\n <prism-icon\n name=\"chevron-down\"\n [size]=\"10\" />\n <span class=\"sb-group-chip\"></span>\n {{ cat.name }}\n <span\n class=\"sb-group-count\"\n [class.sb-group-count--warn]=\"cat.rollup.variant === 'warn'\"\n [class.sb-group-count--danger]=\"cat.rollup.variant === 'danger'\"\n [attr.title]=\"cat.rollup.problems ? rollupTooltip(cat.rollup) : null\"\n [attr.aria-label]=\"cat.rollup.problems ? rollupTooltip(cat.rollup) : null\">\n @if (cat.rollup.problems) {\n {{ cat.rollup.problems }}/{{ cat.items.length }}\n } @else {\n {{ cat.items.length }}\n }\n </span>\n </button>\n @if (!isCollapsed('sec:' + section.name + ':' + cat.name)) {\n <div class=\"sb-group-body\">\n @for (row of cat.items; track itemKey(row.item)) {\n <button\n class=\"sb-item\"\n [class.sb-item--active]=\"isActive(row.item)\"\n [class.sb-item--deprecated]=\"itemStatus(row.item) === 'deprecated'\"\n [attr.title]=\"itemTooltip(row.item, row.decorations)\"\n (click)=\"onSelect(row.item)\">\n <prism-icon\n [name]=\"row.icon\"\n [size]=\"12\"\n class=\"sb-item-icon\" />\n <span class=\"sb-item-name\">{{ itemLabel(row.item) }}</span>\n <span class=\"sb-item-health\">\n @for (mark of row.decorations?.marks ?? []; track mark.id) {\n <prism-icon\n [name]=\"mark.icon\"\n [size]=\"11\"\n [class]=\"'sb-health sb-health--' + mark.variant\" />\n }\n </span>\n </button>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n</nav>\n", styles: [".prism-sidebar {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.sb-filter {\n display: flex;\n gap: 8px;\n align-items: center;\n height: 30px;\n padding: 0 10px;\n margin: 12px;\n color: var(--prism-text-muted);\n background: var(--prism-input-bg);\n border: 1px solid var(--prism-border);\n border-radius: 6px;\n}\n\n.sb-filter input {\n flex: 1;\n min-width: 0;\n font-family: var(--font-sans);\n font-size: var(--fs-md);\n color: var(--prism-text);\n outline: none;\n background: transparent;\n border: 0;\n}\n\n.sb-filter input::placeholder {\n color: var(--prism-text-muted);\n}\n\n.sb-filter kbd {\n padding: 1px 5px;\n font-family: var(--font-mono);\n font-size: 10px;\n color: var(--prism-text-ghost);\n border: 1px solid var(--prism-border);\n border-radius: 3px;\n}\n\n.sb-scroll {\n flex: 1;\n padding: 10px 0 16px;\n padding-top: 0;\n overflow-y: auto;\n}\n\n.sb-scroll::-webkit-scrollbar {\n width: 8px;\n}\n\n.sb-scroll::-webkit-scrollbar-thumb {\n background: var(--prism-border-strong);\n border-radius: 4px;\n}\n\n.sb-scroll::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.sb-pinned {\n padding: 0 0 10px;\n margin-bottom: 4px;\n border-top: 1px solid var(--prism-border);\n border-bottom: 1px solid var(--prism-border);\n}\n\n.sb-section-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 14px 6px;\n margin-top: 6px;\n font-size: 10.5px;\n font-weight: 700;\n color: var(--prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.09em;\n}\n\n.sb-section-head-l {\n display: flex;\n gap: 6px;\n align-items: center;\n}\n\n.sb-section-icon {\n color: var(--prism-primary);\n}\n\n.sb-pinned-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 14px 6px;\n margin-top: 6px;\n font-size: 10.5px;\n font-weight: 700;\n color: var(--prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.09em;\n}\n\n.sb-pinned-head-l {\n display: flex;\n gap: 6px;\n align-items: center;\n}\n\n.sb-pinned-pin {\n color: var(--prism-accent);\n}\n\n.sb-group {\n margin-bottom: 4px;\n}\n\n.sb-group-head {\n display: flex;\n gap: 6px;\n align-items: center;\n width: 100%;\n padding: 8px 14px 6px;\n font-family: var(--font-sans);\n font-size: 10.5px;\n font-weight: 700;\n color: var(--prism-text-ghost);\n text-align: left;\n text-transform: uppercase;\n letter-spacing: 0.09em;\n cursor: pointer;\n user-select: none;\n background: none;\n border: none;\n}\n\n.sb-group-head prism-icon {\n color: var(--prism-text-ghost);\n transition: transform var(--dur-fast);\n}\n\n.sb-group--collapsed .sb-group-head prism-icon {\n transform: rotate(-90deg);\n}\n\n.sb-group-chip {\n width: 6px;\n height: 6px;\n background: var(--prism-text-ghost);\n border-radius: 2px;\n}\n\n.sb-group-count {\n margin-left: auto;\n font-family: var(--font-mono);\n font-size: 10px;\n font-weight: 500;\n color: var(--prism-text-ghost);\n}\n\n.sb-group-count--warn {\n color: var(--prism-mark-attention);\n}\n\n.sb-group-count--danger {\n color: var(--prism-mark-critical);\n}\n\n.sb-item {\n display: flex;\n gap: 10px;\n align-items: center;\n width: 100%;\n height: 30px;\n padding: 0 14px 0 28px;\n font-family: var(--font-sans);\n font-size: 13px;\n color: var(--prism-text-2);\n text-align: left;\n cursor: pointer;\n background: none;\n border: none;\n transition:\n background var(--dur-fast),\n color var(--dur-fast);\n}\n\n.sb-item:hover {\n color: var(--prism-text);\n background: color-mix(in srgb, var(--prism-primary) 5%, transparent);\n}\n\n.sb-item--active {\n font-weight: 500;\n background: color-mix(in srgb, var(--prism-primary) 12%, transparent);\n}\n\n.sb-item-icon {\n flex: 0 0 12px;\n opacity: 0.7;\n}\n\n.sb-item-name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Fixed width sized for the three built-in decoration sources (a11y,\n plugin-coverage, plugin-visual-regression) at 11px each plus two\n --sp-1 gaps, with a little headroom. navigationDecorations is an open\n extension point, so a fourth mark from a third-party plugin is\n clipped via overflow: hidden rather than allowed to grow the gutter.\n The point of a fixed-width gutter is that rows never shift\n horizontally as you scan the list. */\n.sb-item-health {\n display: flex;\n flex: none;\n gap: var(--sp-1);\n align-items: center;\n justify-content: flex-end;\n width: 40px;\n overflow: hidden;\n}\n\n/* Outline, not fill, and full saturation only for danger. The mechanism\n behind these marks is already deviation-driven: decorateItem returns\n null for a clean component and every source bails out at variant === 'ok'.\n What made them read as wallpaper was the drawing: a filled shape at full\n saturation, one per row, in a repo where deviating is the normal case. */\n.sb-health {\n fill: none;\n stroke: currentcolor;\n stroke-width: 2;\n}\n\n.sb-health--warn {\n color: color-mix(in srgb, var(--prism-mark-attention) 80%, transparent);\n}\n\n.sb-health--danger {\n color: var(--prism-mark-critical);\n}\n\n.sb-item--deprecated .sb-item-name {\n color: var(--prism-text-ghost);\n text-decoration: line-through;\n text-decoration-thickness: 1px;\n opacity: 0.7;\n}\n\n:focus-visible {\n outline: 2px solid var(--prism-primary);\n outline-offset: 2px;\n}\n"] }]
381
+ args: [{ selector: 'prism-sidebar', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismIconComponent, PrismBadgeComponent], template: "<nav class=\"prism-sidebar\">\n <div class=\"sb-filter\">\n <prism-icon\n name=\"search\"\n [size]=\"12\" />\n <input\n #filterInput\n placeholder=\"Filter\u2026\"\n [value]=\"searchService.query()\"\n (input)=\"searchService.search($any($event.target).value)\" />\n <kbd>/</kbd>\n </div>\n\n <div class=\"sb-scroll\">\n @if (pageCategories().length > 0) {\n <div class=\"sb-pinned\">\n <div class=\"sb-section-head sb-section-head--first\">\n <span class=\"sb-section-head-l\">\n <prism-icon\n name=\"pin\"\n [size]=\"10\"\n class=\"sb-section-icon sb-section-icon--muted\" />\n Pages\n </span>\n <span>{{ totalPages() }}</span>\n </div>\n @for (cat of pageCategories(); track cat.name) {\n <div\n class=\"sb-group\"\n [class.sb-group--collapsed]=\"isCollapsed('page:' + cat.name)\">\n <button\n class=\"sb-group-head\"\n (click)=\"toggleCollapse('page:' + cat.name)\"\n [attr.aria-expanded]=\"!isCollapsed('page:' + cat.name)\">\n <prism-icon\n name=\"chevron-down\"\n [size]=\"10\" />\n <span class=\"sb-group-chip\"></span>\n {{ cat.name }}\n </button>\n @if (!isCollapsed('page:' + cat.name)) {\n <div class=\"sb-group-body\">\n @for (item of cat.items; track itemKey(item)) {\n <button\n class=\"sb-item\"\n [class.sb-item--active]=\"isActive(item)\"\n (click)=\"onSelect(item)\">\n <prism-icon\n name=\"file-text\"\n [size]=\"12\"\n class=\"sb-item-icon\" />\n <span class=\"sb-item-name\">{{ itemLabel(item) }}</span>\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n @for (section of componentSections(); track section.name) {\n <div class=\"sb-section-head\">\n <span class=\"sb-section-head-l\">\n <prism-icon\n [name]=\"section.icon\"\n [size]=\"11\"\n class=\"sb-section-icon\"\n [attr.data-facet]=\"facet(section.name)\" />\n {{ section.name }}\n </span>\n <span>{{ section.totalCount }}</span>\n </div>\n @for (cat of section.categories; track cat.name) {\n <div\n class=\"sb-group\"\n [class.sb-group--collapsed]=\"isCollapsed('sec:' + section.name + ':' + cat.name)\">\n <button\n class=\"sb-group-head\"\n (click)=\"toggleCollapse('sec:' + section.name + ':' + cat.name)\"\n [attr.aria-expanded]=\"!isCollapsed('sec:' + section.name + ':' + cat.name)\">\n <prism-icon\n name=\"chevron-down\"\n [size]=\"10\" />\n <span class=\"sb-group-chip\"></span>\n {{ cat.name }}\n @let count = countOf(cat.rollup, cat.items.length);\n <span\n class=\"sb-group-count\"\n [attr.title]=\"count.title\"\n [attr.aria-label]=\"count.title\">\n {{ count.total }}\n @if (count.chip; as chip) {\n <prism-badge\n size=\"sm\"\n dot\n [tone]=\"chip.tone\"\n [value]=\"chip.text\"\n aria-hidden=\"true\" />\n }\n </span>\n </button>\n @if (!isCollapsed('sec:' + section.name + ':' + cat.name)) {\n <div class=\"sb-group-body\">\n @for (row of cat.items; track itemKey(row.item)) {\n <button\n class=\"sb-item\"\n [class.sb-item--active]=\"isActive(row.item)\"\n [class.sb-item--deprecated]=\"itemStatus(row.item) === 'deprecated'\"\n [attr.title]=\"itemTooltip(row.item, row.decorations)\"\n (click)=\"onSelect(row.item)\">\n <prism-icon\n [name]=\"row.icon\"\n [size]=\"12\"\n class=\"sb-item-icon\" />\n <span class=\"sb-item-name\">{{ itemLabel(row.item) }}</span>\n <span class=\"sb-item-health\">\n @for (mark of row.decorations?.marks ?? []; track mark.id) {\n <prism-icon\n [name]=\"mark.icon\"\n [size]=\"11\"\n role=\"img\"\n [attr.aria-label]=\"mark.label\"\n [class]=\"'sb-health sb-health--' + mark.variant\" />\n }\n </span>\n </button>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n</nav>\n", styles: [".prism-sidebar {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.sb-filter {\n display: flex;\n gap: 8px;\n align-items: center;\n height: 30px;\n padding: 0 10px;\n margin: 12px;\n color: var(--prism-text-muted);\n background: var(--prism-input-bg);\n border: 1px solid var(--prism-border);\n border-radius: 6px;\n}\n\n.sb-filter input {\n flex: 1;\n min-width: 0;\n font-family: var(--font-sans);\n font-size: var(--fs-md);\n color: var(--prism-text);\n outline: none;\n background: transparent;\n border: 0;\n}\n\n.sb-filter input::placeholder {\n color: var(--prism-text-muted);\n}\n\n.sb-filter kbd {\n padding: 1px 5px;\n font-family: var(--font-mono);\n font-size: 10px;\n color: var(--prism-text-muted);\n border: 1px solid var(--prism-border);\n border-radius: 3px;\n}\n\n.sb-scroll {\n flex: 1;\n padding: 0 0 16px;\n margin-right: 6px;\n overflow-y: auto;\n scrollbar-color: var(--prism-border-strong) transparent;\n scrollbar-width: thin;\n}\n\n.sb-scroll::-webkit-scrollbar {\n width: 8px;\n}\n\n.sb-scroll::-webkit-scrollbar-thumb {\n background: var(--prism-border-strong);\n border-radius: 4px;\n}\n\n.sb-scroll::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.sb-pinned {\n padding: 0 0 6px;\n}\n\n.sb-section-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 14px 6px;\n margin-top: 6px;\n font-size: 11px;\n font-weight: 600;\n color: var(--prism-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.07em;\n border-top: 1px solid var(--prism-border);\n}\n\n.sb-section-head-l {\n display: flex;\n gap: 6px;\n align-items: center;\n}\n\n.sb-section-icon {\n color: var(--prism-primary);\n}\n\n.sb-group {\n margin-bottom: 4px;\n}\n\n.sb-group-head {\n display: flex;\n gap: 6px;\n align-items: center;\n width: 100%;\n padding: 6px 14px 4px;\n font-family: var(--font-sans);\n font-size: 12.5px;\n font-weight: 500;\n color: var(--prism-text-2);\n text-align: left;\n cursor: pointer;\n user-select: none;\n background: none;\n border: none;\n}\n\n.sb-group-head > prism-icon {\n color: var(--prism-text-muted);\n transition: transform var(--dur-fast);\n}\n\n.sb-group--collapsed .sb-group-head > prism-icon {\n transform: rotate(-90deg);\n}\n\n.sb-group-chip {\n width: 6px;\n height: 6px;\n background: var(--prism-text-ghost);\n border-radius: 2px;\n}\n\n.sb-group-count {\n display: inline-flex;\n gap: 6px;\n align-items: center;\n margin-left: auto;\n font-family: var(--font-mono);\n font-size: 10.5px;\n font-weight: 500;\n color: var(--prism-text-muted);\n}\n\n.sb-item {\n display: flex;\n gap: 10px;\n align-items: center;\n width: 100%;\n height: 30px;\n padding: 0 14px 0 28px;\n font-family: var(--font-sans);\n font-size: 13px;\n color: var(--prism-text-2);\n text-align: left;\n cursor: pointer;\n background: none;\n border: none;\n transition:\n background var(--dur-fast),\n color var(--dur-fast);\n}\n\n.sb-item:hover {\n color: var(--prism-text);\n background: color-mix(in srgb, var(--prism-primary) 5%, transparent);\n}\n\n.sb-item--active {\n position: relative;\n font-weight: 500;\n color: var(--prism-text);\n background: var(--prism-primary-bg);\n}\n\n.sb-item-icon {\n flex: 0 0 12px;\n color: var(--prism-text-muted);\n}\n\n.sb-item--active .sb-item-icon {\n color: var(--prism-primary);\n}\n\n.sb-item-name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Fixed width sized for the three built-in decoration sources (a11y,\n plugin-coverage, plugin-visual-regression) at 11px each plus two\n --sp-1 gaps, with a little headroom. navigationDecorations is an open\n extension point, so a fourth mark from a third-party plugin is\n clipped via overflow: hidden rather than allowed to grow the gutter.\n The point of a fixed-width gutter is that rows never shift\n horizontally as you scan the list. */\n.sb-item-health {\n display: flex;\n flex: none;\n gap: var(--sp-1);\n align-items: center;\n justify-content: flex-end;\n width: 40px;\n overflow: hidden;\n}\n\n/* Outline, not fill, and full saturation only for danger. The mechanism\n behind these marks is already deviation-driven: decorateItem returns\n null for a clean component and every source bails out at variant === 'ok'.\n What made them read as wallpaper was the drawing: a filled shape at full\n saturation, one per row, in a repo where deviating is the normal case. */\n.sb-health {\n fill: none;\n stroke: currentcolor;\n stroke-width: 2;\n}\n\n.sb-health--warn {\n color: var(--prism-warn);\n}\n\n.sb-health--danger {\n color: var(--prism-danger);\n}\n\n.sb-item--deprecated .sb-item-name {\n color: var(--prism-text-muted);\n text-decoration: line-through;\n text-decoration-thickness: 1px;\n}\n\n:focus-visible {\n outline: 2px solid var(--prism-primary);\n outline-offset: 2px;\n}\n\n/* The first section sits right under the filter and needs no rule above it. */\n.sb-section-head--first {\n margin-top: 0;\n border-top: 0;\n}\n\n.sb-section-icon--muted {\n color: var(--prism-text-muted);\n}\n\n/* Section icons in the logo's facet colours. */\n.sb-section-icon[data-facet='cyan'] {\n color: var(--prism-facet-cyan);\n}\n\n.sb-section-icon[data-facet='blue'] {\n color: var(--prism-facet-blue);\n}\n\n.sb-section-icon[data-facet='violet'] {\n color: var(--prism-facet-violet);\n}\n\n.sb-section-icon[data-facet='magenta'] {\n color: var(--prism-facet-magenta);\n}\n\n/* The active entry carries a short ray of the brand light on its inner edge.\n The ink is a horizontal gradient, so the ray is drawn lying down and turned\n upright: cyan at the top, magenta at the bottom. */\n.sb-item--active::before {\n position: absolute;\n top: 50%;\n left: 4px;\n width: 16px;\n height: 3px;\n margin-top: -1.5px;\n content: '';\n background: var(--prism-brand-ink);\n border-radius: 2px;\n transform: rotate(90deg);\n}\n"] }]
370
382
  }], null, { filterInput: [{ type: i0.ViewChild, args: ['filterInput', { isSignal: true }] }], onGlobalKey: [{
371
383
  type: HostListener,
372
384
  args: ['document:keydown', ['$event']]
373
385
  }] }); })();
374
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismSidebarComponent, { className: "PrismSidebarComponent", filePath: "app/sidebar/prism-sidebar.component.ts", lineNumber: 48 }); })();
386
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismSidebarComponent, { className: "PrismSidebarComponent", filePath: "app/sidebar/prism-sidebar.component.ts", lineNumber: 75 }); })();
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Theme tokens deprecated since 22.7.0 and removed in 23.0.0, with what
3
+ * replaces each. A `carried` token's override still reaches its successor until
4
+ * then; the others are no longer read by anything.
5
+ *
6
+ * Framework-free: the theme resolver warns in the browser and the builder
7
+ * reports the same overrides at build time.
8
+ */
9
+ export declare const DEPRECATED_THEME_TOKENS: Readonly<Record<string, {
10
+ successor: string;
11
+ carried: boolean;
12
+ }>>;
13
+ /** What to tell a user who overrides a deprecated token. */
14
+ export declare function deprecatedTokenNotice(token: string): string;
15
+ //# sourceMappingURL=deprecated-tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deprecated-tokens.d.ts","sourceRoot":"","sources":["../../../src/app/theme/deprecated-tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAOrG,CAAC;AAEF,4DAA4D;AAC5D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK3D"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Theme tokens deprecated since 22.7.0 and removed in 23.0.0, with what
3
+ * replaces each. A `carried` token's override still reaches its successor until
4
+ * then; the others are no longer read by anything.
5
+ *
6
+ * Framework-free: the theme resolver warns in the browser and the builder
7
+ * reports the same overrides at build time.
8
+ */
9
+ export const DEPRECATED_THEME_TOKENS = {
10
+ '--prism-mark-nominal': { successor: '--prism-success', carried: true },
11
+ '--prism-mark-attention': { successor: '--prism-warn', carried: true },
12
+ '--prism-mark-critical': { successor: '--prism-danger', carried: true },
13
+ '--prism-spectrum': { successor: '--prism-brand-gradient', carried: false },
14
+ '--prism-primary-from': { successor: '--prism-brand-gradient', carried: false },
15
+ '--prism-primary-to': { successor: '--prism-brand-gradient', carried: false }
16
+ };
17
+ /** What to tell a user who overrides a deprecated token. */
18
+ export function deprecatedTokenNotice(token) {
19
+ const { successor, carried } = DEPRECATED_THEME_TOKENS[token];
20
+ const effect = carried ? `Until then its value is carried over to ${successor}` : 'Nothing reads it any more';
21
+ return `${token} is deprecated since 22.7.0 and will be removed in 23.0.0. ${effect}; override ${successor} instead.`;
22
+ }
@@ -0,0 +1,3 @@
1
+ /** The brand mark as the styleguide's favicon, set at runtime by `PrismThemeService`. */
2
+ export declare const FAVICON_SVG_DATA_URI: string;
3
+ //# sourceMappingURL=favicon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"favicon.d.ts","sourceRoot":"","sources":["../../../src/app/theme/favicon.ts"],"names":[],"mappings":"AAEA,yFAAyF;AACzF,eAAO,MAAM,oBAAoB,QAA8F,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { BRAND_MARK_SQUARE_VIEWBOX, brandMarkSvg } from '../shared/brand-mark.js';
2
+ /** The brand mark as the styleguide's favicon, set at runtime by `PrismThemeService`. */
3
+ export const FAVICON_SVG_DATA_URI = `data:image/svg+xml,${encodeURIComponent(brandMarkSvg('fav-', BRAND_MARK_SQUARE_VIEWBOX))}`;
@@ -1 +1 @@
1
- {"version":3,"file":"prism-default-theme.d.ts","sourceRoot":"","sources":["../../../src/app/theme/prism-default-theme.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyCnD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyCpD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0DpD,CAAC;AAEF,eAAO,MAAM,mBAAmB,wBAAmB,CAAC"}
1
+ {"version":3,"file":"prism-default-theme.d.ts","sourceRoot":"","sources":["../../../src/app/theme/prism-default-theme.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA4DnD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAiEpD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2DpD,CAAC;AAEF,eAAO,MAAM,mBAAmB,wBAAmB,CAAC"}