@ng-prism/core 22.2.0-beta.3 → 22.2.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/dist/app/canvas/prism-canvas-bg-pill.component.js +1 -1
  2. package/dist/app/canvas/prism-canvas-rulers.component.js +1 -1
  3. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts +24 -8
  4. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts.map +1 -1
  5. package/dist/app/canvas/prism-canvas-toolbar.component.js +41 -24
  6. package/dist/app/canvas/prism-template-popover.component.js +1 -1
  7. package/dist/app/component-head/prism-component-head.component.d.ts +12 -0
  8. package/dist/app/component-head/prism-component-head.component.d.ts.map +1 -1
  9. package/dist/app/component-head/prism-component-head.component.js +46 -11
  10. package/dist/app/component-head/prism-stat.component.d.ts +1 -1
  11. package/dist/app/component-head/prism-stat.component.d.ts.map +1 -1
  12. package/dist/app/component-head/prism-stat.component.js +12 -9
  13. package/dist/app/component-header/prism-component-header.component.js +1 -1
  14. package/dist/app/controls/boolean-control.component.js +1 -1
  15. package/dist/app/controls/json-control.component.js +1 -1
  16. package/dist/app/controls/number-control.component.js +1 -1
  17. package/dist/app/controls/string-control.component.js +1 -1
  18. package/dist/app/controls/union-control.component.js +1 -1
  19. package/dist/app/header/prism-header.component.js +1 -1
  20. package/dist/app/icons/icon-registry.d.ts +15 -0
  21. package/dist/app/icons/icon-registry.d.ts.map +1 -0
  22. package/dist/app/icons/icon-registry.js +42 -0
  23. package/dist/app/icons/prism-icon.component.d.ts +2 -2
  24. package/dist/app/icons/prism-icon.component.d.ts.map +1 -1
  25. package/dist/app/icons/prism-icon.component.js +7 -32
  26. package/dist/app/layout-menu/prism-layout-menu.component.js +1 -1
  27. package/dist/app/page-renderer/prism-page-renderer.component.js +1 -1
  28. package/dist/app/panels/a11y/a11y-audit.service.d.ts +1 -1
  29. package/dist/app/panels/a11y/a11y-audit.service.d.ts.map +1 -1
  30. package/dist/app/panels/a11y/a11y-header-badge.component.js +1 -1
  31. package/dist/app/panels/a11y/a11y-keyboard-overlay.component.js +1 -1
  32. package/dist/app/panels/a11y/a11y-keyboard.component.js +1 -1
  33. package/dist/app/panels/a11y/a11y-keyboard.service.d.ts +1 -1
  34. package/dist/app/panels/a11y/a11y-keyboard.service.d.ts.map +1 -1
  35. package/dist/app/panels/a11y/a11y-overlay-host.component.js +1 -1
  36. package/dist/app/panels/a11y/a11y-panel-state.service.d.ts +1 -1
  37. package/dist/app/panels/a11y/a11y-panel-state.service.d.ts.map +1 -1
  38. package/dist/app/panels/a11y/a11y-panel.component.js +1 -1
  39. package/dist/app/panels/a11y/a11y-perspective.service.d.ts +1 -1
  40. package/dist/app/panels/a11y/a11y-perspective.service.d.ts.map +1 -1
  41. package/dist/app/panels/a11y/a11y-score.component.js +1 -1
  42. package/dist/app/panels/a11y/a11y-sr-overlay.component.js +1 -1
  43. package/dist/app/panels/a11y/a11y-sr.component.js +1 -1
  44. package/dist/app/panels/a11y/a11y-sr.service.d.ts +1 -1
  45. package/dist/app/panels/a11y/a11y-sr.service.d.ts.map +1 -1
  46. package/dist/app/panels/a11y/a11y-summary.d.ts +15 -0
  47. package/dist/app/panels/a11y/a11y-summary.d.ts.map +1 -0
  48. package/dist/app/panels/a11y/a11y-summary.js +33 -0
  49. package/dist/app/panels/a11y/a11y-tree.component.js +2 -2
  50. package/dist/app/panels/a11y/a11y-tree.service.d.ts +1 -1
  51. package/dist/app/panels/a11y/a11y-tree.service.d.ts.map +1 -1
  52. package/dist/app/panels/a11y/a11y-violations.component.js +3 -3
  53. package/dist/app/panels/a11y/a11y.types.d.ts +14 -0
  54. package/dist/app/panels/a11y/a11y.types.d.ts.map +1 -1
  55. package/dist/app/panels/builtin-navigation-decorations.d.ts +8 -0
  56. package/dist/app/panels/builtin-navigation-decorations.d.ts.map +1 -0
  57. package/dist/app/panels/builtin-navigation-decorations.js +20 -0
  58. package/dist/app/panels/controls/prism-controls-panel.component.js +1 -1
  59. package/dist/app/panels/events/prism-events-panel.component.js +1 -1
  60. package/dist/app/panels/events/prism-json-node.component.js +1 -1
  61. package/dist/app/panels/panel-host/panel-badge.d.ts +35 -0
  62. package/dist/app/panels/panel-host/panel-badge.d.ts.map +1 -0
  63. package/dist/app/panels/panel-host/panel-badge.js +37 -0
  64. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts +9 -6
  65. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts.map +1 -1
  66. package/dist/app/panels/panel-host/prism-panel-host.component.js +27 -37
  67. package/dist/app/renderer/overlay-resolver.d.ts.map +1 -1
  68. package/dist/app/renderer/overlay-resolver.js +12 -1
  69. package/dist/app/renderer/prism-renderer.component.js +3 -5
  70. package/dist/app/services/prism-canvas.service.d.ts +1 -1
  71. package/dist/app/services/prism-canvas.service.d.ts.map +1 -1
  72. package/dist/app/services/prism-capture.service.d.ts +17 -3
  73. package/dist/app/services/prism-capture.service.d.ts.map +1 -1
  74. package/dist/app/services/prism-capture.service.js +96 -3
  75. package/dist/app/services/prism-event-log.service.d.ts +1 -1
  76. package/dist/app/services/prism-event-log.service.d.ts.map +1 -1
  77. package/dist/app/services/prism-layout.service.d.ts +1 -1
  78. package/dist/app/services/prism-layout.service.d.ts.map +1 -1
  79. package/dist/app/services/prism-manifest.service.d.ts +1 -1
  80. package/dist/app/services/prism-manifest.service.d.ts.map +1 -1
  81. package/dist/app/services/prism-navigation.service.d.ts +1 -1
  82. package/dist/app/services/prism-navigation.service.d.ts.map +1 -1
  83. package/dist/app/services/prism-panel.service.d.ts +1 -1
  84. package/dist/app/services/prism-panel.service.d.ts.map +1 -1
  85. package/dist/app/services/prism-persistence.service.d.ts +1 -1
  86. package/dist/app/services/prism-persistence.service.d.ts.map +1 -1
  87. package/dist/app/services/prism-plugin.service.d.ts +8 -2
  88. package/dist/app/services/prism-plugin.service.d.ts.map +1 -1
  89. package/dist/app/services/prism-plugin.service.js +15 -0
  90. package/dist/app/services/prism-renderer.service.d.ts +1 -1
  91. package/dist/app/services/prism-renderer.service.d.ts.map +1 -1
  92. package/dist/app/services/prism-search.service.d.ts +1 -1
  93. package/dist/app/services/prism-search.service.d.ts.map +1 -1
  94. package/dist/app/services/prism-theme.service.d.ts +1 -1
  95. package/dist/app/services/prism-theme.service.d.ts.map +1 -1
  96. package/dist/app/services/prism-url-state.service.d.ts +1 -1
  97. package/dist/app/services/prism-url-state.service.d.ts.map +1 -1
  98. package/dist/app/services/prism-variant-bg.service.d.ts +1 -1
  99. package/dist/app/services/prism-variant-bg.service.d.ts.map +1 -1
  100. package/dist/app/shell/prism-shell.component.js +2 -2
  101. package/dist/app/sidebar/navigation-decorations.d.ts +67 -0
  102. package/dist/app/sidebar/navigation-decorations.d.ts.map +1 -0
  103. package/dist/app/sidebar/navigation-decorations.js +84 -0
  104. package/dist/app/sidebar/prism-sidebar.component.d.ts +23 -6
  105. package/dist/app/sidebar/prism-sidebar.component.d.ts.map +1 -1
  106. package/dist/app/sidebar/prism-sidebar.component.js +120 -45
  107. package/dist/app/variant-ribbon/prism-variant-ribbon.component.js +3 -3
  108. package/dist/app/view-tab-bar/prism-view-panel-host.component.js +1 -1
  109. package/dist/app/view-tab-bar/prism-view-tab-bar.component.js +1 -1
  110. package/dist/builder/a11y/a11y-report-reader.d.ts +15 -1
  111. package/dist/builder/a11y/a11y-report-reader.d.ts.map +1 -1
  112. package/dist/builder/a11y/a11y-report-reader.js +37 -0
  113. package/dist/builder/scanner/component.scanner.d.ts.map +1 -1
  114. package/dist/builder/scanner/component.scanner.js +30 -3
  115. package/dist/builder/shared/prism-pipeline.d.ts.map +1 -1
  116. package/dist/builder/shared/prism-pipeline.js +19 -2
  117. package/dist/plugin/index.d.ts +2 -1
  118. package/dist/plugin/index.d.ts.map +1 -1
  119. package/dist/plugin/index.js +10 -0
  120. package/dist/plugin/plugin.types.d.ts +52 -0
  121. package/dist/plugin/plugin.types.d.ts.map +1 -1
  122. package/dist/shared/canvas-bg.type.d.ts +24 -6
  123. package/dist/shared/canvas-bg.type.d.ts.map +1 -1
  124. package/dist/shared/canvas-bg.type.js +6 -5
  125. package/package.json +1 -1
@@ -19,6 +19,12 @@ const STYLE_ELEMENT_ID = 'ng-prism-capture-styles';
19
19
  * Above `html` the backdrop is the browser's own and no stylesheet reaches it;
20
20
  * a runner has to clear that with `omitBackground: true`.
21
21
  *
22
+ * `prism-shell` is the *host element* the app bootstraps into, not the
23
+ * `div.prism-shell` inside its template — both are in the chain and either can
24
+ * be given a background, a `:host` rule being the easy way to do it by
25
+ * accident. `.prism-body` is the grid between the shell and `.prism-main` and
26
+ * is listed on the same insurance grounds.
27
+ *
22
28
  * Scoped by `:has()` to a *transparent* stage, so the other five backgrounds
23
29
  * behave exactly as before. Exported so a test can assert the invariant
24
30
  * against the real DOM rather than against this list — the list is the
@@ -27,7 +33,52 @@ const STYLE_ELEMENT_ID = 'ng-prism-capture-styles';
27
33
  * looks correct; it just silently stops testing transparency.
28
34
  */
29
35
  export const CAPTURE_TRANSPARENT_SELECTOR = `[${CAPTURE_ATTRIBUTE}] .prism-canvas-stage[data-bg='transparent'],\n` +
30
- `[${CAPTURE_ATTRIBUTE}] :is(html, body, .prism-shell, .prism-main, .prism-canvas-wrap):has(.prism-canvas-stage[data-bg='transparent'])`;
36
+ `[${CAPTURE_ATTRIBUTE}] :is(html, body, prism-shell, .prism-shell, .prism-body, .prism-main, .prism-canvas-wrap):has(.prism-canvas-stage[data-bg='transparent'])`;
37
+ /**
38
+ * Everything capture mode removes from layout so the canvas owns the viewport.
39
+ *
40
+ * The canvas is not an overlay host: `.prism-canvas-wrap` is one flex sibling
41
+ * among several inside `.prism-main`, which is itself one grid cell of
42
+ * `.prism-body` inside `.prism-shell`. A screenshot tool captures the *screen
43
+ * coordinates* of `.demo-wrap`, and `.demo-wrap` is centred in a stage that
44
+ * scrolls — so whenever the component is larger than the canvas viewport, its
45
+ * box extends past the canvas and the compositor fills those coordinates with
46
+ * whichever sibling lives there. Measured in Chromium against the real
47
+ * stylesheets, a 200x400 component at a 1280x720 viewport leaks 57px upwards
48
+ * into the variant ribbon and 121px downwards into the panel. That is neither
49
+ * a z-order nor a clipping bug: the capture target legitimately extends beyond
50
+ * its scroll container and the page paints something there.
51
+ *
52
+ * `display: none` rather than `visibility: hidden`, and this is the one thing
53
+ * not to "simplify" later. Keeping the layout box is the tempting minimal-churn
54
+ * fix — nothing re-centres, no unaffected baseline moves — and it does not
55
+ * work: the box still occupies its space, so what paints at those coordinates
56
+ * becomes `.prism-main`'s own background instead of the panel. Measured at the
57
+ * bottom row of a `bg: 'transparent'` capture: `#11284e` with the panel left
58
+ * alone, `#11284e` with `visibility: hidden`, transparent only once the panel
59
+ * leaves layout. The canvas is `flex: 1`; it has to reclaim the space for the
60
+ * stage to paint there, and only removal from layout gives it back.
61
+ *
62
+ * Written as a structural rule rather than a list of chrome selectors, because
63
+ * enumeration is what makes this class of bug recur: the list has to be revised
64
+ * every time the shell grows a region, nothing fails when it is not, and the
65
+ * baselines recorded in the meantime look perfectly fine while guarding the
66
+ * wrong image. At every level from the shell to the canvas wrap, the one child
67
+ * that leads to the stage survives and every sibling is removed, so a region
68
+ * added tomorrow is suppressed without anyone remembering this file exists.
69
+ *
70
+ * The track collapses are not cosmetic. `.prism-shell` and `.prism-body` are
71
+ * grids with sized tracks (`52px 1fr`, `var(--sw) 4px 1fr`); hiding the header
72
+ * and the sidebar without collapsing them would auto-place the survivor into
73
+ * the *first* track and render the canvas 52px tall or 264px wide.
74
+ *
75
+ * Scoped by `:has(.prism-canvas-stage)` throughout: a component page or a view
76
+ * panel has no canvas, and blanking the shell around it would leave a runner
77
+ * with an empty screenshot rather than an honest one.
78
+ */
79
+ const CAPTURE_CANVAS_ONLY_SELECTOR = `[${CAPTURE_ATTRIBUTE}] ` +
80
+ `:is(.prism-shell, .prism-body, .prism-main, .prism-canvas-wrap)` +
81
+ `:has(.prism-canvas-stage) > :not(:has(.prism-canvas-stage))`;
31
82
  /**
32
83
  * Global stylesheet applied in capture mode.
33
84
  *
@@ -51,6 +102,23 @@ export const CAPTURE_TRANSPARENT_SELECTOR = `[${CAPTURE_ATTRIBUTE}] .prism-canva
51
102
  * layers involved. Alpha is not what the paragraph above rules out: a pattern
52
103
  * has a phase that moves when the component resizes, an alpha channel is a
53
104
  * per-pixel value that does not.
105
+ *
106
+ * Colour is only half of it. The rules from
107
+ * {@link CAPTURE_CANVAS_ONLY_SELECTOR} down hand the whole viewport to the
108
+ * canvas, which is what makes the declared background reach the *whole* of the
109
+ * capture target's box rather than only the part that happens to fit inside
110
+ * the canvas viewport.
111
+ *
112
+ * The stage's padding goes with them, and it buys more than the 32px it looks
113
+ * like. The stage is `height: 100%` under `content-box`, so its padding lands
114
+ * *outside* that height: the stage is 64px taller than the row it sits in,
115
+ * overflows it, and centres the component 32px below the true centre of what
116
+ * is actually painted. Dropping the padding makes the stage exactly the canvas
117
+ * and the component's centre the viewport's centre, which turns the guarantee
118
+ * crisp — a component is contained iff it fits the viewport. Measured: a
119
+ * 200x700 component at 1280x720 still leaks 22px past the canvas with the
120
+ * regions gone but the padding kept. None of that padding is ever inside a
121
+ * `.demo-wrap` screenshot, so nothing is lost by removing it.
54
122
  */
55
123
  const CAPTURE_STYLES = `
56
124
  [${CAPTURE_ATTRIBUTE}] *,
@@ -64,12 +132,29 @@ const CAPTURE_STYLES = `
64
132
 
65
133
  [${CAPTURE_ATTRIBUTE}] .prism-canvas-stage {
66
134
  background-image: none !important;
135
+ padding: 0 !important;
67
136
  }
68
137
 
69
138
  ${CAPTURE_TRANSPARENT_SELECTOR} {
70
139
  background-color: transparent !important;
71
140
  background-image: none !important;
72
141
  }
142
+
143
+ ${CAPTURE_CANVAS_ONLY_SELECTOR} {
144
+ display: none !important;
145
+ }
146
+
147
+ [${CAPTURE_ATTRIBUTE}] .prism-shell:has(.prism-canvas-stage) {
148
+ grid-template-rows: minmax(0, 1fr) !important;
149
+ }
150
+
151
+ [${CAPTURE_ATTRIBUTE}] .prism-body:has(.prism-canvas-stage) {
152
+ grid-template-columns: minmax(0, 1fr) !important;
153
+ }
154
+
155
+ [${CAPTURE_ATTRIBUTE}] .prism-canvas-wrap:has(.prism-canvas-stage) {
156
+ grid-template-rows: minmax(0, 1fr) !important;
157
+ }
73
158
  `;
74
159
  /**
75
160
  * Capture-isolation mode.
@@ -79,8 +164,16 @@ ${CAPTURE_TRANSPARENT_SELECTOR} {
79
164
  * mode strips the canvas background down to its patternless colour — keeping
80
165
  * whatever `@Showcase({ bg })` declared, or clearing the whole paint chain to
81
166
  * real transparency for `bg: 'transparent'` — suppresses every piece of
82
- * canvas chrome, locks zoom to 1 and freezes animation, so a variant renders
83
- * identically on every run.
167
+ * canvas chrome, removes every other shell region from layout so the canvas
168
+ * owns the viewport, locks zoom to 1 and freezes animation, so a variant
169
+ * renders identically on every run.
170
+ *
171
+ * What that buys a runner is the right to screenshot `.demo-wrap` directly:
172
+ * the target is composited against the declared background over its whole box,
173
+ * not merely over the part that fits inside the canvas viewport. The one thing
174
+ * the mode cannot do is make room that the viewport does not have — a
175
+ * component larger than the viewport still overflows, and sizing the viewport
176
+ * to fit is the runner's job.
84
177
  *
85
178
  * The flag is read once from the URL at construction time and never written
86
179
  * back — {@link PrismUrlStateService} rebuilds the query string from scratch,
@@ -11,6 +11,6 @@ export declare class PrismEventLogService {
11
11
  log(name: string, value: unknown): void;
12
12
  clear(): void;
13
13
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismEventLogService, never>;
14
- static ɵprov: i0.ɵɵInjectableDeclaration<PrismEventLogService>;
14
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
15
15
  }
16
16
  //# sourceMappingURL=prism-event-log.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-event-log.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-event-log.service.ts"],"names":[],"mappings":";AAEA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBACa,oBAAoB;IAC/B,QAAQ,CAAC,MAAM,0DAA+B;IAC9C,OAAO,CAAC,OAAO,CAAK;IAEpB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAOvC,KAAK,IAAI,IAAI;yCAXF,oBAAoB;6CAApB,oBAAoB;CAchC"}
1
+ {"version":3,"file":"prism-event-log.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-event-log.service.ts"],"names":[],"mappings":";AAEA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBACa,oBAAoB;IAC/B,QAAQ,CAAC,MAAM,0DAA+B;IAC9C,OAAO,CAAC,OAAO,CAAK;IAEpB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAOvC,KAAK,IAAI,IAAI;yCAXF,oBAAoB;;CAchC"}
@@ -21,6 +21,6 @@ export declare class PrismLayoutService {
21
21
  private loadFromStorage;
22
22
  private saveToStorage;
23
23
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismLayoutService, never>;
24
- static ɵprov: i0.ɵɵInjectableDeclaration<PrismLayoutService>;
24
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
25
25
  }
26
26
  //# sourceMappingURL=prism-layout.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-layout.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-layout.service.ts"],"names":[],"mappings":";AAIA,qBACa,kBAAkB;IAC7B,QAAQ,CAAC,cAAc,kDAAgB;IACvC,QAAQ,CAAC,aAAa,kDAAgB;IACtC,QAAQ,CAAC,cAAc,kDAAgB;IACvC,QAAQ,CAAC,iBAAiB,6DAAwC;IAClE,QAAQ,CAAC,YAAY,iDAAe;IACpC,QAAQ,CAAC,WAAW,iDAAe;IACnC,QAAQ,CAAC,UAAU,iDAAe;IAClC,QAAQ,CAAC,sBAAsB,kDAAiB;;IAMhD,aAAa,IAAI,IAAI;IAKrB,YAAY,IAAI,IAAI;IAKpB,aAAa,IAAI,IAAI;IAKrB,iBAAiB,IAAI,IAAI;IAKzB,qBAAqB,IAAI,IAAI;IAI7B,oBAAoB,IAAI,IAAI;IAI5B,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKjC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKhC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK/B,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,aAAa;yCAnFV,kBAAkB;6CAAlB,kBAAkB;CA+F9B"}
1
+ {"version":3,"file":"prism-layout.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-layout.service.ts"],"names":[],"mappings":";AAIA,qBACa,kBAAkB;IAC7B,QAAQ,CAAC,cAAc,kDAAgB;IACvC,QAAQ,CAAC,aAAa,kDAAgB;IACtC,QAAQ,CAAC,cAAc,kDAAgB;IACvC,QAAQ,CAAC,iBAAiB,6DAAwC;IAClE,QAAQ,CAAC,YAAY,iDAAe;IACpC,QAAQ,CAAC,WAAW,iDAAe;IACnC,QAAQ,CAAC,UAAU,iDAAe;IAClC,QAAQ,CAAC,sBAAsB,kDAAiB;;IAMhD,aAAa,IAAI,IAAI;IAKrB,YAAY,IAAI,IAAI;IAKpB,aAAa,IAAI,IAAI;IAKrB,iBAAiB,IAAI,IAAI;IAKzB,qBAAqB,IAAI,IAAI;IAI7B,oBAAoB,IAAI,IAAI;IAI5B,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKjC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKhC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK/B,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,aAAa;yCAnFV,kBAAkB;;CA+F9B"}
@@ -10,6 +10,6 @@ export declare class PrismManifestService {
10
10
  readonly groupedByCategory: import("@angular/core").Signal<Map<string, RuntimeComponent[]>>;
11
11
  updateManifest(manifest: RuntimeManifest): void;
12
12
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismManifestService, never>;
13
- static ɵprov: i0.ɵɵInjectableDeclaration<PrismManifestService>;
13
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
14
14
  }
15
15
  //# sourceMappingURL=prism-manifest.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-manifest.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-manifest.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;;AAGjE,qBACa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmD;IAE7E,QAAQ,CAAC,QAAQ,kDAA+B;IAEhD,QAAQ,CAAC,UAAU,qDAAmE;IAEtF,QAAQ,CAAC,KAAK,mDAAkE;IAEhF,QAAQ,CAAC,UAAU,2CAsBhB;IAEH,QAAQ,CAAC,iBAAiB,kEAUvB;IAEH,cAAc,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;yCA7CpC,oBAAoB;6CAApB,oBAAoB;CAgDhC"}
1
+ {"version":3,"file":"prism-manifest.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-manifest.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;;AAGjE,qBACa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmD;IAE7E,QAAQ,CAAC,QAAQ,kDAA+B;IAEhD,QAAQ,CAAC,UAAU,qDAAmE;IAEtF,QAAQ,CAAC,KAAK,mDAAkE;IAEhF,QAAQ,CAAC,UAAU,2CAsBhB;IAEH,QAAQ,CAAC,iBAAiB,kEAUvB;IAEH,cAAc,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;yCA7CpC,oBAAoB;;CAgDhC"}
@@ -24,6 +24,6 @@ export declare class PrismNavigationService {
24
24
  selectPage(page: StyleguidePage): void;
25
25
  selectFirst(): void;
26
26
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismNavigationService, never>;
27
- static ɵprov: i0.ɵɵInjectableDeclaration<PrismNavigationService>;
27
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
28
28
  }
29
29
  //# sourceMappingURL=prism-navigation.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-navigation.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-navigation.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;;AAWjE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAG1D;AAeD,qBACa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAC5D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAEhE,QAAQ,CAAC,UAAU,gEAAuC;IAE1D,QAAQ,CAAC,eAAe,0DAQrB;IAEH,QAAQ,CAAC,UAAU,wDAQhB;IAEH,QAAQ,CAAC,WAAW,gDAiFjB;IAEH,MAAM,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAIpC,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAItC,WAAW,IAAI,IAAI;yCArHR,sBAAsB;6CAAtB,sBAAsB;CAkIlC"}
1
+ {"version":3,"file":"prism-navigation.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-navigation.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;;AAWjE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAG1D;AAeD,qBACa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAC5D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAEhE,QAAQ,CAAC,UAAU,gEAAuC;IAE1D,QAAQ,CAAC,eAAe,0DAQrB;IAEH,QAAQ,CAAC,UAAU,wDAQhB;IAEH,QAAQ,CAAC,WAAW,gDAiFjB;IAEH,MAAM,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAIpC,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAItC,WAAW,IAAI,IAAI;yCArHR,sBAAsB;;CAkIlC"}
@@ -14,6 +14,6 @@ export declare class PrismPanelService {
14
14
  */
15
15
  getInjector(panelId: string): EnvironmentInjector | null;
16
16
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismPanelService, never>;
17
- static ɵprov: i0.ɵɵInjectableDeclaration<PrismPanelService>;
17
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
18
18
  }
19
19
  //# sourceMappingURL=prism-panel.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-panel.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-panel.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,mBAAmB,EAIpB,MAAM,eAAe,CAAC;;AAIvB,qBACa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAC3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAC5D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgC;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0C;IAExE,QAAQ,CAAC,aAAa,iDAA8B;IACpD,QAAQ,CAAC,YAAY,iDAA8B;IAEnD,QAAQ,CAAC,mBAAmB,6DAE1B;IAEF;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;yCAjB7C,iBAAiB;6CAAjB,iBAAiB;CAiC7B"}
1
+ {"version":3,"file":"prism-panel.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-panel.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,mBAAmB,EAIpB,MAAM,eAAe,CAAC;;AAIvB,qBACa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAC3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAC5D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgC;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0C;IAExE,QAAQ,CAAC,aAAa,iDAA8B;IACpD,QAAQ,CAAC,YAAY,iDAA8B;IAEnD,QAAQ,CAAC,mBAAmB,6DAE1B;IAEF;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;yCAjB7C,iBAAiB;;CAiC7B"}
@@ -16,6 +16,6 @@ export declare class PrismPersistenceService {
16
16
  private writeDebounced;
17
17
  private serialize;
18
18
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismPersistenceService, never>;
19
- static ɵprov: i0.ɵɵInjectableDeclaration<PrismPersistenceService>;
19
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
20
20
  }
21
21
  //# sourceMappingURL=prism-persistence.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-persistence.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-persistence.service.ts"],"names":[],"mappings":";AA+BA,qBACa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CACyC;IAChE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAChE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiC;IAChE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAClE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAE7C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,cAAc,CAAuB;IAE7C,IAAI,IAAI,IAAI;IAWZ,OAAO,CAAC,kBAAkB;IAmD1B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,SAAS;yCA5GN,uBAAuB;6CAAvB,uBAAuB;CA0InC"}
1
+ {"version":3,"file":"prism-persistence.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-persistence.service.ts"],"names":[],"mappings":";AA+BA,qBACa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CACyC;IAChE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAChE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiC;IAChE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAClE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAE7C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,cAAc,CAAuB;IAE7C,IAAI,IAAI,IAAI;IAWZ,OAAO,CAAC,kBAAkB;IAmD1B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,SAAS;yCA5GN,uBAAuB;;CA0InC"}
@@ -1,4 +1,4 @@
1
- import type { ControlDefinition, HeaderWidgetDefinition, PanelDefinition } from '../../plugin/plugin.types.js';
1
+ import type { ControlDefinition, HeaderWidgetDefinition, NavigationDecorationDefinition, PanelDefinition } from '../../plugin/plugin.types.js';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class PrismPluginService {
4
4
  private readonly config;
@@ -9,7 +9,13 @@ export declare class PrismPluginService {
9
9
  readonly headerWidgets: import("@angular/core").Signal<HeaderWidgetDefinition[]>;
10
10
  readonly headerWidgetsStart: import("@angular/core").Signal<HeaderWidgetDefinition[]>;
11
11
  readonly headerWidgetsEnd: import("@angular/core").Signal<HeaderWidgetDefinition[]>;
12
+ /**
13
+ * Plugin-contributed navigation markers. Built-ins are merged in by the
14
+ * consumer via `resolveNavigationDecorations`, the same split `panels` and
15
+ * `headerWidgets` already use.
16
+ */
17
+ readonly navigationDecorations: import("@angular/core").Signal<NavigationDecorationDefinition[]>;
12
18
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismPluginService, never>;
13
- static ɵprov: i0.ɵɵInjectableDeclaration<PrismPluginService>;
19
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
14
20
  }
15
21
  //# sourceMappingURL=prism-plugin.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-plugin.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-plugin.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EAChB,MAAM,8BAA8B,CAAC;;AAGtC,qBACa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAE/C,QAAQ,CAAC,MAAM,oDAQZ;IAEH,QAAQ,CAAC,WAAW,oDAElB;IAEF,QAAQ,CAAC,UAAU,oDAEjB;IAEF,QAAQ,CAAC,QAAQ,sDAQd;IAEH,QAAQ,CAAC,aAAa,2DAQnB;IAEH,QAAQ,CAAC,kBAAkB,2DAEzB;IAEF,QAAQ,CAAC,gBAAgB,2DAEvB;yCA/CS,kBAAkB;6CAAlB,kBAAkB;CAgD9B"}
1
+ {"version":3,"file":"prism-plugin.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-plugin.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EACtB,8BAA8B,EAC9B,eAAe,EAChB,MAAM,8BAA8B,CAAC;;AAGtC,qBACa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAE/C,QAAQ,CAAC,MAAM,oDAQZ;IAEH,QAAQ,CAAC,WAAW,oDAElB;IAEF,QAAQ,CAAC,UAAU,oDAEjB;IAEF,QAAQ,CAAC,QAAQ,sDAQd;IAEH,QAAQ,CAAC,aAAa,2DAQnB;IAEH,QAAQ,CAAC,kBAAkB,2DAEzB;IAEF,QAAQ,CAAC,gBAAgB,2DAEvB;IAEF;;;;OAIG;IACH,QAAQ,CAAC,qBAAqB,mEAU5B;yCAhES,kBAAkB;;CAiE9B"}
@@ -41,6 +41,21 @@ export class PrismPluginService {
41
41
  ...(ngDevMode ? [{ debugName: "headerWidgetsStart" }] : /* istanbul ignore next */ []));
42
42
  headerWidgetsEnd = computed(() => this.headerWidgets().filter((w) => (w.placement ?? 'end') === 'end'), /* @ts-ignore */
43
43
  ...(ngDevMode ? [{ debugName: "headerWidgetsEnd" }] : /* istanbul ignore next */ []));
44
+ /**
45
+ * Plugin-contributed navigation markers. Built-ins are merged in by the
46
+ * consumer via `resolveNavigationDecorations`, the same split `panels` and
47
+ * `headerWidgets` already use.
48
+ */
49
+ navigationDecorations = computed(() => {
50
+ const result = [];
51
+ for (const plugin of this.config.plugins ?? []) {
52
+ if (plugin.navigationDecorations) {
53
+ result.push(...plugin.navigationDecorations);
54
+ }
55
+ }
56
+ return result;
57
+ }, /* @ts-ignore */
58
+ ...(ngDevMode ? [{ debugName: "navigationDecorations" }] : /* istanbul ignore next */ []));
44
59
  static ɵfac = function PrismPluginService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PrismPluginService)(); };
45
60
  static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PrismPluginService, factory: PrismPluginService.ɵfac, providedIn: 'root' });
46
61
  }
@@ -22,6 +22,6 @@ export declare class PrismRendererService {
22
22
  resetInputsToVariantDefaults(): void;
23
23
  private applyVariant;
24
24
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismRendererService, never>;
25
- static ɵprov: i0.ɵɵInjectableDeclaration<PrismRendererService>;
25
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
26
26
  }
27
27
  //# sourceMappingURL=prism-renderer.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-renderer.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-renderer.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;;AAGrE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAC5D;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GAC5E,oBAAoB,CA+CtB;AAaD,qBACa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IAEpE,QAAQ,CAAC,kBAAkB,iDAAa;IACxC,QAAQ,CAAC,WAAW,kEAAuC;IAC3D,QAAQ,CAAC,aAAa,sFAAkE;IACxF,QAAQ,CAAC,eAAe,yDAAgC;IAExD,QAAQ,CAAC,eAAe,yCAcrB;IAEH,OAAO,CAAC,cAAc,CAAuB;IAE7C,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAM/C,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IA2CnD,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMlC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAI/C,4BAA4B,IAAI,IAAI;IAMpC,OAAO,CAAC,YAAY;yCA3FT,oBAAoB;6CAApB,oBAAoB;CAqGhC"}
1
+ {"version":3,"file":"prism-renderer.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-renderer.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;;AAGrE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAC5D;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GAC5E,oBAAoB,CA+CtB;AAaD,qBACa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IAEpE,QAAQ,CAAC,kBAAkB,iDAAa;IACxC,QAAQ,CAAC,WAAW,kEAAuC;IAC3D,QAAQ,CAAC,aAAa,sFAAkE;IACxF,QAAQ,CAAC,eAAe,yDAAgC;IAExD,QAAQ,CAAC,eAAe,yCAcrB;IAEH,OAAO,CAAC,cAAc,CAAuB;IAE7C,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAM/C,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IA2CnD,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMlC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAI/C,4BAA4B,IAAI,IAAI;IAMpC,OAAO,CAAC,YAAY;yCA3FT,oBAAoB;;CAqGhC"}
@@ -8,6 +8,6 @@ export declare class PrismSearchService {
8
8
  search(q: string): void;
9
9
  clear(): void;
10
10
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismSearchService, never>;
11
- static ɵprov: i0.ɵɵInjectableDeclaration<PrismSearchService>;
11
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
12
12
  }
13
13
  //# sourceMappingURL=prism-search.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-search.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-search.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;;AAGjE,qBACa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAEhE,QAAQ,CAAC,KAAK,iDAAc;IAE5B,QAAQ,CAAC,kBAAkB,8EAYxB;IAEH,QAAQ,CAAC,aAAa,mDAQnB;IAEH,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAIvB,KAAK,IAAI,IAAI;yCAjCF,kBAAkB;6CAAlB,kBAAkB;CAoC9B"}
1
+ {"version":3,"file":"prism-search.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-search.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;;AAGjE,qBACa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAEhE,QAAQ,CAAC,KAAK,iDAAc;IAE5B,QAAQ,CAAC,kBAAkB,8EAYxB;IAEH,QAAQ,CAAC,aAAa,mDAQnB;IAEH,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAIvB,KAAK,IAAI,IAAI;yCAjCF,kBAAkB;;CAoC9B"}
@@ -16,6 +16,6 @@ export declare class PrismThemeService {
16
16
  private applyFavicon;
17
17
  private readStoredTheme;
18
18
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismThemeService, never>;
19
- static ɵprov: i0.ɵɵInjectableDeclaration<PrismThemeService>;
19
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
20
20
  }
21
21
  //# sourceMappingURL=prism-theme.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-theme.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-theme.service.ts"],"names":[],"mappings":";AAUA,qBACa,iBAAiB;IAC5B,QAAQ,CAAC,KAAK,2DAAoD;IAClE,QAAQ,CAAC,MAAM,0CAA2C;IAE1D,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,cAAc,CAA8B;;IAYpD,MAAM,IAAI,IAAI;IAId,oBAAoB,CAAC,MAAM,EAAE;QAC3B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACrC,GAAG,IAAI;IAOR,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,eAAe;yCA/DZ,iBAAiB;6CAAjB,iBAAiB;CAsE7B"}
1
+ {"version":3,"file":"prism-theme.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-theme.service.ts"],"names":[],"mappings":";AAUA,qBACa,iBAAiB;IAC5B,QAAQ,CAAC,KAAK,2DAAoD;IAClE,QAAQ,CAAC,MAAM,0CAA2C;IAE1D,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,cAAc,CAA8B;;IAYpD,MAAM,IAAI,IAAI;IAId,oBAAoB,CAAC,MAAM,EAAE;QAC3B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACrC,GAAG,IAAI;IAOR,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,eAAe;yCA/DZ,iBAAiB;;CAsE7B"}
@@ -11,6 +11,6 @@ export declare class PrismUrlStateService {
11
11
  private restoreFromUrl;
12
12
  private writeToUrl;
13
13
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismUrlStateService, never>;
14
- static ɵprov: i0.ɵɵInjectableDeclaration<PrismUrlStateService>;
14
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
15
15
  }
16
16
  //# sourceMappingURL=prism-url-state.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-url-state.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-url-state.service.ts"],"names":[],"mappings":";AAgBA,qBACa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAChE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAChE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAE7C,OAAO,CAAC,YAAY,CAAS;IAE7B,IAAI,IAAI,IAAI;IAqBZ,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,UAAU;yCA5EP,oBAAoB;6CAApB,oBAAoB;CAyHhC"}
1
+ {"version":3,"file":"prism-url-state.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-url-state.service.ts"],"names":[],"mappings":";AAgBA,qBACa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAChE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAChE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAE7C,OAAO,CAAC,YAAY,CAAS;IAE7B,IAAI,IAAI,IAAI;IAqBZ,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,UAAU;yCA5EP,oBAAoB;;CAyHhC"}
@@ -45,6 +45,6 @@ export declare class PrismVariantBgService {
45
45
  setOverride(bg: CanvasBg): void;
46
46
  clearOverride(): void;
47
47
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismVariantBgService, never>;
48
- static ɵprov: i0.ɵɵInjectableDeclaration<PrismVariantBgService>;
48
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
49
49
  }
50
50
  //# sourceMappingURL=prism-variant-bg.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-variant-bg.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-variant-bg.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;;AAU/D,qBACa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkC;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgC;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IAEvD,QAAQ,CAAC,WAAW,kDAOjB;IAEH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAC3D,QAAQ,CAAC,QAAQ,kDAA+B;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,QAAQ,CAAC,SAAS,2CAIhB;IAEF,gFAAgF;IAChF,QAAQ,CAAC,WAAW,0CAMjB;;IAUH,WAAW,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI;IAI/B,aAAa,IAAI,IAAI;yCA3EV,qBAAqB;6CAArB,qBAAqB;CA8EjC"}
1
+ {"version":3,"file":"prism-variant-bg.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-variant-bg.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;;AAU/D,qBACa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkC;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgC;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IAEvD,QAAQ,CAAC,WAAW,kDAOjB;IAEH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAC3D,QAAQ,CAAC,QAAQ,kDAA+B;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,QAAQ,CAAC,SAAS,2CAIhB;IAEF,gFAAgF;IAChF,QAAQ,CAAC,WAAW,0CAMjB;;IAUH,WAAW,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI;IAI/B,aAAa,IAAI,IAAI;yCA3EV,qBAAqB;;CA8EjC"}
@@ -183,7 +183,7 @@ export class PrismShellComponent {
183
183
  i0.ɵɵadvance();
184
184
  i0.ɵɵconditional(ctx.layout.sidebarVisible() ? 3 : -1);
185
185
  i0.ɵɵadvance();
186
- i0.ɵɵstyleProp("--ph", ctx.showPanel() ? ctx.layout.panelHeight() : 0, "px");
186
+ i0.ɵɵstyleProp("--%NS%ph", ctx.showPanel() ? ctx.layout.panelHeight() : 0, "px");
187
187
  i0.ɵɵadvance();
188
188
  i0.ɵɵconditional(ctx.navigationService.activeComponent() ? 5 : ctx.navigationService.activePage() ? 6 : 7);
189
189
  } }, dependencies: [PrismHeaderComponent,
@@ -197,7 +197,7 @@ export class PrismShellComponent {
197
197
  PrismViewPanelHostComponent,
198
198
  PrismResizerDirective,
199
199
  PrismCanvasToolbarComponent,
200
- PrismTemplatePopoverComponent], styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n .prism-shell[_ngcontent-%COMP%] {\n height: 100vh;\n display: grid;\n grid-template-rows: 52px 1fr;\n background: var(--prism-void);\n font-family: var(--font-sans, var(--prism-font-sans));\n color: var(--prism-text);\n overflow: hidden;\n }\n\n .prism-body[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: var(--sw, 264px) 4px 1fr;\n min-height: 0;\n }\n .prism-body--no-sidebar[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .prism-sidebar-wrap[_ngcontent-%COMP%] {\n background: var(--prism-bg);\n border-right: 1px solid var(--prism-border);\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n }\n\n .prism-sidebar-wrap[_ngcontent-%COMP%] prism-sidebar[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n }\n\n .prism-sidebar-foot[_ngcontent-%COMP%] {\n border-top: 1px solid var(--prism-border);\n padding: 10px 14px;\n font-size: 11px;\n color: var(--prism-text-ghost);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .prism-sidebar-foot__logo[_ngcontent-%COMP%] {\n width: 16px;\n flex-shrink: 0;\n }\n .prism-sidebar-foot__link[_ngcontent-%COMP%] {\n color: var(--prism-text-ghost);\n text-decoration: none;\n transition: color var(--dur-fast);\n }\n .prism-sidebar-foot__link[_ngcontent-%COMP%]:hover {\n color: var(--prism-text-2);\n }\n\n .prism-resizer-col[_ngcontent-%COMP%] {\n width: 4px;\n background: transparent;\n transition: background var(--dur-fast) var(--ease-default);\n position: relative;\n z-index: 5;\n }\n .prism-resizer-col[_ngcontent-%COMP%]:hover, \n .prism-resizer-col.active[_ngcontent-%COMP%] {\n background: var(--prism-primary);\n }\n\n .prism-main[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n min-height: 0;\n background: var(--prism-void);\n overflow: hidden;\n }\n\n .prism-resizer-row[_ngcontent-%COMP%] {\n flex-shrink: 0;\n height: 4px;\n background: transparent;\n transition: background var(--dur-fast) var(--ease-default);\n position: relative;\n z-index: 5;\n }\n .prism-resizer-row[_ngcontent-%COMP%]:hover, \n .prism-resizer-row.active[_ngcontent-%COMP%] {\n background: var(--prism-primary);\n }\n\n .prism-canvas-wrap[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: grid;\n grid-template-rows: auto minmax(0, 1fr);\n background: var(--prism-bg-surface);\n overflow: hidden;\n position: relative;\n }\n .prism-main__view-bar[_ngcontent-%COMP%] { flex-shrink: 0; }\n .prism-main__canvas[_ngcontent-%COMP%] { flex: 1; min-height: 0; overflow: auto; }\n\n .prism-main__panel[_ngcontent-%COMP%] {\n height: var(--ph, 260px);\n flex-shrink: 0;\n overflow: hidden;\n min-height: 0;\n }\n\n .prism-shell__empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n grid-row: 1 / -1;\n }\n .prism-shell__empty-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n color: var(--prism-text-ghost);\n margin-bottom: 8px;\n }\n .prism-shell__empty-text[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--fs-xl);\n font-weight: 500;\n color: var(--prism-text-muted);\n }\n .prism-shell__empty-hint[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--fs-lg);\n color: var(--prism-text-ghost);\n }"] });
200
+ PrismTemplatePopoverComponent], styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n .prism-shell[_ngcontent-%COMP%] {\n height: 100vh;\n display: grid;\n grid-template-rows: 52px 1fr;\n background: var(--%NS%prism-void);\n font-family: var(--%NS%font-sans, var(--%NS%prism-font-sans));\n color: var(--%NS%prism-text);\n overflow: hidden;\n }\n\n .prism-body[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: var(--%NS%sw, 264px) 4px 1fr;\n min-height: 0;\n }\n .prism-body--no-sidebar[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .prism-sidebar-wrap[_ngcontent-%COMP%] {\n background: var(--%NS%prism-bg);\n border-right: 1px solid var(--%NS%prism-border);\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n }\n\n .prism-sidebar-wrap[_ngcontent-%COMP%] prism-sidebar[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n }\n\n .prism-sidebar-foot[_ngcontent-%COMP%] {\n border-top: 1px solid var(--%NS%prism-border);\n padding: 10px 14px;\n font-size: 11px;\n color: var(--%NS%prism-text-ghost);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .prism-sidebar-foot__logo[_ngcontent-%COMP%] {\n width: 16px;\n flex-shrink: 0;\n }\n .prism-sidebar-foot__link[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-ghost);\n text-decoration: none;\n transition: color var(--%NS%dur-fast);\n }\n .prism-sidebar-foot__link[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text-2);\n }\n\n .prism-resizer-col[_ngcontent-%COMP%] {\n width: 4px;\n background: transparent;\n transition: background var(--%NS%dur-fast) var(--%NS%ease-default);\n position: relative;\n z-index: 5;\n }\n .prism-resizer-col[_ngcontent-%COMP%]:hover, \n .prism-resizer-col.active[_ngcontent-%COMP%] {\n background: var(--%NS%prism-primary);\n }\n\n .prism-main[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n min-height: 0;\n background: var(--%NS%prism-void);\n overflow: hidden;\n }\n\n .prism-resizer-row[_ngcontent-%COMP%] {\n flex-shrink: 0;\n height: 4px;\n background: transparent;\n transition: background var(--%NS%dur-fast) var(--%NS%ease-default);\n position: relative;\n z-index: 5;\n }\n .prism-resizer-row[_ngcontent-%COMP%]:hover, \n .prism-resizer-row.active[_ngcontent-%COMP%] {\n background: var(--%NS%prism-primary);\n }\n\n .prism-canvas-wrap[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: grid;\n grid-template-rows: auto minmax(0, 1fr);\n background: var(--%NS%prism-bg-surface);\n overflow: hidden;\n position: relative;\n }\n .prism-main__view-bar[_ngcontent-%COMP%] { flex-shrink: 0; }\n .prism-main__canvas[_ngcontent-%COMP%] { flex: 1; min-height: 0; overflow: auto; }\n\n .prism-main__panel[_ngcontent-%COMP%] {\n height: var(--%NS%ph, 260px);\n flex-shrink: 0;\n overflow: hidden;\n min-height: 0;\n }\n\n .prism-shell__empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n grid-row: 1 / -1;\n }\n .prism-shell__empty-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n color: var(--%NS%prism-text-ghost);\n margin-bottom: 8px;\n }\n .prism-shell__empty-text[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--%NS%fs-xl);\n font-weight: 500;\n color: var(--%NS%prism-text-muted);\n }\n .prism-shell__empty-hint[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--%NS%fs-lg);\n color: var(--%NS%prism-text-ghost);\n }"] });
201
201
  }
202
202
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismShellComponent, [{
203
203
  type: Component,
@@ -0,0 +1,67 @@
1
+ import type { ComponentStatus } from '../../decorator/showcase.types.js';
2
+ import type { NavigationDecorationDefinition } from '../../plugin/plugin.types.js';
3
+ import type { NavigationItem } from '../services/navigation-item.types.js';
4
+ /** One source's verdict on one component, resolved for rendering. */
5
+ export interface ItemMark {
6
+ /**
7
+ * The definition's id. `resolveNavigationDecorations` guarantees these are
8
+ * unique, so this is the only field safe to `@for track` by — `icon` is a
9
+ * free-form string on a public extension point and two sources can pick the
10
+ * same one.
11
+ */
12
+ id: string;
13
+ icon: string;
14
+ variant: 'warn' | 'danger';
15
+ label: string;
16
+ }
17
+ export interface ItemDecorations {
18
+ /** Ordered marks — never empty; `decorateItem` returns null instead. */
19
+ marks: ItemMark[];
20
+ /** Worst variant across `marks`. Drives the group roll-up. */
21
+ worst: 'warn' | 'danger';
22
+ /** Newline-joined labels for the item's `title` attribute. */
23
+ tooltip: string;
24
+ }
25
+ export interface CategoryRollup {
26
+ /** Number of items in the category carrying at least one mark. */
27
+ problems: number;
28
+ /** Worst variant among them, or null for a clean category. */
29
+ variant: 'warn' | 'danger' | null;
30
+ }
31
+ /**
32
+ * Built-ins first, then plugin contributions, de-duplicated by id and sorted
33
+ * by `order`.
34
+ *
35
+ * Built-ins win a collision: a plugin must not be able to silence or restyle a
36
+ * core source by claiming its id. Sorting is by `order` alone — the reading
37
+ * contract says position names the source, so registration order must not leak
38
+ * into the result.
39
+ */
40
+ export declare function resolveNavigationDecorations(builtin: readonly NavigationDecorationDefinition[], fromPlugins: readonly NavigationDecorationDefinition[]): NavigationDecorationDefinition[];
41
+ /**
42
+ * Runs every definition against one item.
43
+ *
44
+ * Returns `null` rather than an empty result for a clean component, so callers
45
+ * cannot accidentally render an empty marker container.
46
+ */
47
+ export declare function decorateItem(item: NavigationItem, defs: readonly NavigationDecorationDefinition[]): ItemDecorations | null;
48
+ /**
49
+ * Counts the items in one category that carry at least one mark.
50
+ *
51
+ * Items, not marks: a component with three findings is one thing to look at,
52
+ * and a group head reading "3" for a single broken component would overstate
53
+ * the work.
54
+ *
55
+ * Takes each item's already-resolved `ItemDecorations` rather than the raw
56
+ * items — callers already run `decorateItem` once per item to render its
57
+ * marks, and recomputing it here would both waste the work and let the
58
+ * roll-up drift from what actually renders.
59
+ */
60
+ export declare function rollupCategory(decorations: readonly (ItemDecorations | null)[]): CategoryRollup;
61
+ /**
62
+ * The left icon slot carries lifecycle — what the author declared — in form
63
+ * alone. Colour in the sidebar means exactly one thing, measured quality, so a
64
+ * work-in-progress component must never look like a finding.
65
+ */
66
+ export declare function lifecycleIcon(status: ComponentStatus | undefined): string;
67
+ //# sourceMappingURL=navigation-decorations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-decorations.d.ts","sourceRoot":"","sources":["../../../src/app/sidebar/navigation-decorations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAE3E,qEAAqE;AACrE,MAAM,WAAW,QAAQ;IACvB;;;;;OAKG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC;IACzB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC;CACnC;AAID;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,SAAS,8BAA8B,EAAE,EAClD,WAAW,EAAE,SAAS,8BAA8B,EAAE,GACrD,8BAA8B,EAAE,CAWlC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,SAAS,8BAA8B,EAAE,GAC9C,eAAe,GAAG,IAAI,CAuBxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC,EAAE,GAC/C,cAAc,CAahB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,GAAG,MAAM,CAEzE"}
@@ -0,0 +1,84 @@
1
+ const SEVERITY = { warn: 1, danger: 2 };
2
+ /**
3
+ * Built-ins first, then plugin contributions, de-duplicated by id and sorted
4
+ * by `order`.
5
+ *
6
+ * Built-ins win a collision: a plugin must not be able to silence or restyle a
7
+ * core source by claiming its id. Sorting is by `order` alone — the reading
8
+ * contract says position names the source, so registration order must not leak
9
+ * into the result.
10
+ */
11
+ export function resolveNavigationDecorations(builtin, fromPlugins) {
12
+ const seen = new Set();
13
+ const result = [];
14
+ for (const def of [...builtin, ...fromPlugins]) {
15
+ if (seen.has(def.id))
16
+ continue;
17
+ seen.add(def.id);
18
+ result.push(def);
19
+ }
20
+ return result.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
21
+ }
22
+ /**
23
+ * Runs every definition against one item.
24
+ *
25
+ * Returns `null` rather than an empty result for a clean component, so callers
26
+ * cannot accidentally render an empty marker container.
27
+ */
28
+ export function decorateItem(item, defs) {
29
+ if (item.kind !== 'component')
30
+ return null;
31
+ const marks = [];
32
+ for (const def of defs) {
33
+ const badge = def.badge(item.data);
34
+ if (!badge)
35
+ continue;
36
+ marks.push({
37
+ id: def.id,
38
+ icon: def.icon,
39
+ variant: badge.variant,
40
+ label: badge.label,
41
+ });
42
+ }
43
+ if (marks.length === 0)
44
+ return null;
45
+ let worst = 'warn';
46
+ for (const mark of marks) {
47
+ if (SEVERITY[mark.variant] > SEVERITY[worst])
48
+ worst = mark.variant;
49
+ }
50
+ return { marks, worst, tooltip: marks.map((m) => m.label).join('\n') };
51
+ }
52
+ /**
53
+ * Counts the items in one category that carry at least one mark.
54
+ *
55
+ * Items, not marks: a component with three findings is one thing to look at,
56
+ * and a group head reading "3" for a single broken component would overstate
57
+ * the work.
58
+ *
59
+ * Takes each item's already-resolved `ItemDecorations` rather than the raw
60
+ * items — callers already run `decorateItem` once per item to render its
61
+ * marks, and recomputing it here would both waste the work and let the
62
+ * roll-up drift from what actually renders.
63
+ */
64
+ export function rollupCategory(decorations) {
65
+ let problems = 0;
66
+ let variant = null;
67
+ for (const decoration of decorations) {
68
+ if (!decoration)
69
+ continue;
70
+ problems++;
71
+ if (!variant || SEVERITY[decoration.worst] > SEVERITY[variant]) {
72
+ variant = decoration.worst;
73
+ }
74
+ }
75
+ return { problems, variant };
76
+ }
77
+ /**
78
+ * The left icon slot carries lifecycle — what the author declared — in form
79
+ * alone. Colour in the sidebar means exactly one thing, measured quality, so a
80
+ * work-in-progress component must never look like a finding.
81
+ */
82
+ export function lifecycleIcon(status) {
83
+ return status === 'wip' ? 'box-select' : 'box';
84
+ }
@@ -2,16 +2,30 @@ import type { NavigationItem } from '../services/navigation-item.types.js';
2
2
  import { PrismNavigationService } from '../services/prism-navigation.service.js';
3
3
  import { PrismSearchService } from '../services/prism-search.service.js';
4
4
  import type { ComponentStatus } from '../../decorator/showcase.types.js';
5
+ import { type CategoryRollup, type ItemDecorations } from './navigation-decorations.js';
5
6
  import * as i0 from "@angular/core";
6
7
  interface SidebarCategory {
7
8
  name: string;
8
9
  color: string;
9
10
  items: NavigationItem[];
10
11
  }
12
+ interface SidebarItem {
13
+ item: NavigationItem;
14
+ icon: string;
15
+ decorations: ItemDecorations | null;
16
+ }
17
+ interface ComponentCategory {
18
+ name: string;
19
+ color: string;
20
+ items: SidebarItem[];
21
+ rollup: CategoryRollup;
22
+ }
11
23
  export declare class PrismSidebarComponent {
12
24
  protected readonly navigationService: PrismNavigationService;
13
25
  protected readonly searchService: PrismSearchService;
26
+ private readonly pluginService;
14
27
  private readonly filterInput;
28
+ private readonly decorations;
15
29
  protected onGlobalKey(e: KeyboardEvent): void;
16
30
  private readonly collapsedSet;
17
31
  protected readonly totalPages: import("@angular/core").Signal<number>;
@@ -21,18 +35,21 @@ export declare class PrismSidebarComponent {
21
35
  icon: string;
22
36
  color: string;
23
37
  totalCount: number;
24
- categories: {
25
- name: string;
26
- color: string;
27
- items: NavigationItem[];
28
- }[];
38
+ categories: ComponentCategory[];
29
39
  }[]>;
30
40
  protected isCollapsed(key: string): boolean;
31
41
  protected toggleCollapse(key: string): void;
32
42
  protected itemKey(item: NavigationItem): string;
33
43
  protected itemLabel(item: NavigationItem): string;
34
44
  protected itemStatus(item: NavigationItem): ComponentStatus | undefined;
35
- protected itemTooltip(item: NavigationItem): string | null;
45
+ /**
46
+ * Accessible name for the roll-up pill. The pill otherwise renders a bare
47
+ * number distinguished only by colour — a screen reader would read the
48
+ * group head as "Feedback 3 12" with nothing naming what either number
49
+ * means, and a colour-blind reader can't tell them apart at all.
50
+ */
51
+ protected rollupTooltip(rollup: CategoryRollup): string;
52
+ protected itemTooltip(item: NavigationItem, decorations: ItemDecorations | null): string | null;
36
53
  protected isActive(item: NavigationItem): boolean;
37
54
  protected onSelect(item: NavigationItem): void;
38
55
  private loadCollapsed;