@ng-prism/core 22.2.0-beta.4 → 22.2.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 (201) hide show
  1. package/dist/app/canvas/canvas-bg.styles.d.ts +19 -0
  2. package/dist/app/canvas/canvas-bg.styles.d.ts.map +1 -0
  3. package/dist/app/canvas/canvas-bg.styles.js +58 -0
  4. package/dist/app/canvas/prism-canvas-bg-pill.component.d.ts.map +1 -1
  5. package/dist/app/canvas/prism-canvas-bg-pill.component.js +3 -3
  6. package/dist/app/canvas/prism-canvas-rulers.component.js +1 -1
  7. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts +31 -7
  8. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts.map +1 -1
  9. package/dist/app/canvas/prism-canvas-toolbar.component.js +158 -121
  10. package/dist/app/canvas/prism-template-popover.component.d.ts +0 -3
  11. package/dist/app/canvas/prism-template-popover.component.d.ts.map +1 -1
  12. package/dist/app/canvas/prism-template-popover.component.js +43 -59
  13. package/dist/app/component-head/head-metrics.d.ts +41 -0
  14. package/dist/app/component-head/head-metrics.d.ts.map +1 -0
  15. package/dist/app/component-head/head-metrics.js +39 -0
  16. package/dist/app/component-head/prism-component-head.component.d.ts +10 -2
  17. package/dist/app/component-head/prism-component-head.component.d.ts.map +1 -1
  18. package/dist/app/component-head/prism-component-head.component.js +107 -209
  19. package/dist/app/component-head/prism-head-gauge.component.d.ts +23 -0
  20. package/dist/app/component-head/prism-head-gauge.component.d.ts.map +1 -0
  21. package/dist/app/component-head/prism-head-gauge.component.js +123 -0
  22. package/dist/app/component-head/prism-head-info.component.d.ts +23 -0
  23. package/dist/app/component-head/prism-head-info.component.d.ts.map +1 -0
  24. package/dist/app/component-head/prism-head-info.component.js +124 -0
  25. package/dist/app/component-head/prism-stat.component.d.ts +10 -4
  26. package/dist/app/component-head/prism-stat.component.d.ts.map +1 -1
  27. package/dist/app/component-head/prism-stat.component.js +34 -44
  28. package/dist/app/controls/boolean-control.component.js +1 -1
  29. package/dist/app/controls/json-control.component.js +1 -1
  30. package/dist/app/controls/number-control.component.js +1 -1
  31. package/dist/app/controls/string-control.component.js +1 -1
  32. package/dist/app/controls/union-control.component.js +1 -1
  33. package/dist/app/header/prism-header.component.js +2 -2
  34. package/dist/app/icons/icon-registry.d.ts +15 -0
  35. package/dist/app/icons/icon-registry.d.ts.map +1 -0
  36. package/dist/app/icons/icon-registry.js +44 -0
  37. package/dist/app/icons/prism-icon.component.d.ts +2 -2
  38. package/dist/app/icons/prism-icon.component.d.ts.map +1 -1
  39. package/dist/app/icons/prism-icon.component.js +7 -32
  40. package/dist/app/index.d.ts +3 -1
  41. package/dist/app/index.d.ts.map +1 -1
  42. package/dist/app/index.js +26 -1
  43. package/dist/app/layout-menu/prism-layout-menu.component.js +3 -3
  44. package/dist/app/overview/overview-panel.d.ts +3 -0
  45. package/dist/app/overview/overview-panel.d.ts.map +1 -0
  46. package/dist/app/overview/overview-panel.js +9 -0
  47. package/dist/app/overview/overview-visibility.d.ts +15 -0
  48. package/dist/app/overview/overview-visibility.d.ts.map +1 -0
  49. package/dist/app/overview/overview-visibility.js +18 -0
  50. package/dist/app/overview/prism-overview-cell.component.d.ts +29 -0
  51. package/dist/app/overview/prism-overview-cell.component.d.ts.map +1 -0
  52. package/dist/app/overview/prism-overview-cell.component.js +136 -0
  53. package/dist/app/overview/prism-overview.component.d.ts +17 -0
  54. package/dist/app/overview/prism-overview.component.d.ts.map +1 -0
  55. package/dist/app/overview/prism-overview.component.js +53 -0
  56. package/dist/app/page-renderer/prism-page-renderer.component.d.ts.map +1 -1
  57. package/dist/app/page-renderer/prism-page-renderer.component.js +3 -3
  58. package/dist/app/panels/a11y/a11y-audit.service.d.ts +1 -1
  59. package/dist/app/panels/a11y/a11y-audit.service.d.ts.map +1 -1
  60. package/dist/app/panels/a11y/a11y-header-badge.component.d.ts.map +1 -1
  61. package/dist/app/panels/a11y/a11y-header-badge.component.js +21 -30
  62. package/dist/app/panels/a11y/a11y-keyboard-overlay.component.js +1 -1
  63. package/dist/app/panels/a11y/a11y-keyboard.component.js +1 -1
  64. package/dist/app/panels/a11y/a11y-keyboard.service.d.ts +1 -1
  65. package/dist/app/panels/a11y/a11y-keyboard.service.d.ts.map +1 -1
  66. package/dist/app/panels/a11y/a11y-overlay-host.component.js +1 -1
  67. package/dist/app/panels/a11y/a11y-panel-state.service.d.ts +1 -1
  68. package/dist/app/panels/a11y/a11y-panel-state.service.d.ts.map +1 -1
  69. package/dist/app/panels/a11y/a11y-panel.component.js +1 -1
  70. package/dist/app/panels/a11y/a11y-perspective.service.d.ts +1 -1
  71. package/dist/app/panels/a11y/a11y-perspective.service.d.ts.map +1 -1
  72. package/dist/app/panels/a11y/a11y-score.component.js +1 -1
  73. package/dist/app/panels/a11y/a11y-sr-overlay.component.js +1 -1
  74. package/dist/app/panels/a11y/a11y-sr.component.js +1 -1
  75. package/dist/app/panels/a11y/a11y-sr.service.d.ts +1 -1
  76. package/dist/app/panels/a11y/a11y-sr.service.d.ts.map +1 -1
  77. package/dist/app/panels/a11y/a11y-summary.d.ts +15 -0
  78. package/dist/app/panels/a11y/a11y-summary.d.ts.map +1 -0
  79. package/dist/app/panels/a11y/a11y-summary.js +33 -0
  80. package/dist/app/panels/a11y/a11y-tree.component.js +2 -2
  81. package/dist/app/panels/a11y/a11y-tree.service.d.ts +1 -1
  82. package/dist/app/panels/a11y/a11y-tree.service.d.ts.map +1 -1
  83. package/dist/app/panels/a11y/a11y-violations.component.js +3 -3
  84. package/dist/app/panels/a11y/a11y.types.d.ts +14 -0
  85. package/dist/app/panels/a11y/a11y.types.d.ts.map +1 -1
  86. package/dist/app/panels/builtin-navigation-decorations.d.ts +8 -0
  87. package/dist/app/panels/builtin-navigation-decorations.d.ts.map +1 -0
  88. package/dist/app/panels/builtin-navigation-decorations.js +20 -0
  89. package/dist/app/panels/builtin-panels.d.ts.map +1 -1
  90. package/dist/app/panels/builtin-panels.js +2 -0
  91. package/dist/app/panels/controls/prism-controls-panel.component.js +1 -1
  92. package/dist/app/panels/events/prism-events-panel.component.js +1 -1
  93. package/dist/app/panels/events/prism-json-node.component.js +1 -1
  94. package/dist/app/panels/panel-host/panel-badge.d.ts +8 -2
  95. package/dist/app/panels/panel-host/panel-badge.d.ts.map +1 -1
  96. package/dist/app/panels/panel-host/panel-badge.js +8 -13
  97. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts +8 -2
  98. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts.map +1 -1
  99. package/dist/app/panels/panel-host/prism-panel-host.component.js +33 -22
  100. package/dist/app/renderer/overlay-resolver.d.ts.map +1 -1
  101. package/dist/app/renderer/overlay-resolver.js +12 -1
  102. package/dist/app/renderer/prism-renderer.component.d.ts +0 -1
  103. package/dist/app/renderer/prism-renderer.component.d.ts.map +1 -1
  104. package/dist/app/renderer/prism-renderer.component.js +11 -75
  105. package/dist/app/renderer/projectable-content.d.ts +10 -0
  106. package/dist/app/renderer/projectable-content.d.ts.map +1 -0
  107. package/dist/app/renderer/projectable-content.js +60 -0
  108. package/dist/app/services/prism-canvas.service.d.ts +1 -1
  109. package/dist/app/services/prism-canvas.service.d.ts.map +1 -1
  110. package/dist/app/services/prism-capture.service.d.ts +7 -1
  111. package/dist/app/services/prism-capture.service.d.ts.map +1 -1
  112. package/dist/app/services/prism-capture.service.js +27 -1
  113. package/dist/app/services/prism-event-log.service.d.ts +1 -1
  114. package/dist/app/services/prism-event-log.service.d.ts.map +1 -1
  115. package/dist/app/services/prism-layout.service.d.ts +1 -4
  116. package/dist/app/services/prism-layout.service.d.ts.map +1 -1
  117. package/dist/app/services/prism-layout.service.js +0 -8
  118. package/dist/app/services/prism-manifest.service.d.ts +1 -1
  119. package/dist/app/services/prism-manifest.service.d.ts.map +1 -1
  120. package/dist/app/services/prism-navigation.service.d.ts +1 -1
  121. package/dist/app/services/prism-navigation.service.d.ts.map +1 -1
  122. package/dist/app/services/prism-panel.service.d.ts +19 -1
  123. package/dist/app/services/prism-panel.service.d.ts.map +1 -1
  124. package/dist/app/services/prism-panel.service.js +28 -0
  125. package/dist/app/services/prism-persistence.service.d.ts +1 -1
  126. package/dist/app/services/prism-persistence.service.d.ts.map +1 -1
  127. package/dist/app/services/prism-plugin.service.d.ts +8 -2
  128. package/dist/app/services/prism-plugin.service.d.ts.map +1 -1
  129. package/dist/app/services/prism-plugin.service.js +15 -0
  130. package/dist/app/services/prism-renderer.service.d.ts +1 -1
  131. package/dist/app/services/prism-renderer.service.d.ts.map +1 -1
  132. package/dist/app/services/prism-search.service.d.ts +1 -1
  133. package/dist/app/services/prism-search.service.d.ts.map +1 -1
  134. package/dist/app/services/prism-theme.service.d.ts +1 -1
  135. package/dist/app/services/prism-theme.service.d.ts.map +1 -1
  136. package/dist/app/services/prism-url-state.service.d.ts +1 -1
  137. package/dist/app/services/prism-url-state.service.d.ts.map +1 -1
  138. package/dist/app/services/prism-variant-bg.service.d.ts +1 -1
  139. package/dist/app/services/prism-variant-bg.service.d.ts.map +1 -1
  140. package/dist/app/shared/prism-metric-badge.component.d.ts +32 -0
  141. package/dist/app/shared/prism-metric-badge.component.d.ts.map +1 -0
  142. package/dist/app/shared/prism-metric-badge.component.js +70 -0
  143. package/dist/app/shell/prism-shell.component.d.ts +0 -1
  144. package/dist/app/shell/prism-shell.component.d.ts.map +1 -1
  145. package/dist/app/shell/prism-shell.component.js +57 -49
  146. package/dist/app/sidebar/navigation-decorations.d.ts +70 -0
  147. package/dist/app/sidebar/navigation-decorations.d.ts.map +1 -0
  148. package/dist/app/sidebar/navigation-decorations.js +87 -0
  149. package/dist/app/sidebar/prism-sidebar.component.d.ts +29 -8
  150. package/dist/app/sidebar/prism-sidebar.component.d.ts.map +1 -1
  151. package/dist/app/sidebar/prism-sidebar.component.js +129 -76
  152. package/dist/app/theme/prism-default-theme.d.ts.map +1 -1
  153. package/dist/app/theme/prism-default-theme.js +44 -4
  154. package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts +4 -1
  155. package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts.map +1 -1
  156. package/dist/app/variant-ribbon/prism-variant-ribbon.component.js +13 -26
  157. package/dist/app/variant-ribbon/spectrum.d.ts +19 -0
  158. package/dist/app/variant-ribbon/spectrum.d.ts.map +1 -0
  159. package/dist/app/variant-ribbon/spectrum.js +15 -0
  160. package/dist/app/view-tab-bar/next-view-id.d.ts +12 -0
  161. package/dist/app/view-tab-bar/next-view-id.d.ts.map +1 -0
  162. package/dist/app/view-tab-bar/next-view-id.js +16 -0
  163. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts +0 -1
  164. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts.map +1 -1
  165. package/dist/app/view-tab-bar/prism-view-panel-host.component.js +11 -12
  166. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts +0 -1
  167. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts.map +1 -1
  168. package/dist/app/view-tab-bar/prism-view-tab-bar.component.js +6 -13
  169. package/dist/builder/a11y/a11y-report-reader.d.ts +15 -1
  170. package/dist/builder/a11y/a11y-report-reader.d.ts.map +1 -1
  171. package/dist/builder/a11y/a11y-report-reader.js +37 -0
  172. package/dist/builder/shared/prism-pipeline.d.ts.map +1 -1
  173. package/dist/builder/shared/prism-pipeline.js +19 -2
  174. package/dist/plugin/index.d.ts +2 -1
  175. package/dist/plugin/index.d.ts.map +1 -1
  176. package/dist/plugin/index.js +10 -0
  177. package/dist/plugin/plugin.types.d.ts +33 -0
  178. package/dist/plugin/plugin.types.d.ts.map +1 -1
  179. package/dist/transformer/cli.js +0 -0
  180. package/package.json +1 -1
  181. package/dist/app/canvas/prism-code-drawer.component.d.ts +0 -14
  182. package/dist/app/canvas/prism-code-drawer.component.d.ts.map +0 -1
  183. package/dist/app/canvas/prism-code-drawer.component.js +0 -116
  184. package/dist/app/component-header/prism-component-header.component.d.ts +0 -8
  185. package/dist/app/component-header/prism-component-header.component.d.ts.map +0 -1
  186. package/dist/app/component-header/prism-component-header.component.js +0 -77
  187. package/dist/cli/audit-a11y/aggregator.d.ts +0 -10
  188. package/dist/cli/audit-a11y/aggregator.d.ts.map +0 -1
  189. package/dist/cli/audit-a11y/aggregator.js +0 -64
  190. package/dist/cli/audit-a11y/auditor.d.ts +0 -14
  191. package/dist/cli/audit-a11y/auditor.d.ts.map +0 -1
  192. package/dist/cli/audit-a11y/auditor.js +0 -104
  193. package/dist/cli/audit-a11y/cli.d.ts +0 -3
  194. package/dist/cli/audit-a11y/cli.d.ts.map +0 -1
  195. package/dist/cli/audit-a11y/cli.js +0 -143
  196. package/dist/cli/audit-a11y/index.d.ts +0 -4
  197. package/dist/cli/audit-a11y/index.d.ts.map +0 -1
  198. package/dist/cli/audit-a11y/index.js +0 -3
  199. package/dist/cli/audit-a11y/static-server.d.ts +0 -11
  200. package/dist/cli/audit-a11y/static-server.d.ts.map +0 -1
  201. package/dist/cli/audit-a11y/static-server.js +0 -61
@@ -3,6 +3,6 @@ export type A11ySubTab = 'violations' | 'keyboard' | 'tree' | 'sr';
3
3
  export declare class A11yPanelStateService {
4
4
  readonly activeTab: import("@angular/core").WritableSignal<A11ySubTab>;
5
5
  static ɵfac: i0.ɵɵFactoryDeclaration<A11yPanelStateService, never>;
6
- static ɵprov: i0.ɵɵInjectableDeclaration<A11yPanelStateService>;
6
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
7
7
  }
8
8
  //# sourceMappingURL=a11y-panel-state.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"a11y-panel-state.service.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/a11y/a11y-panel-state.service.ts"],"names":[],"mappings":";AAEA,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;AAEnE,qBACa,qBAAqB;IAChC,QAAQ,CAAC,SAAS,qDAAoC;yCAD3C,qBAAqB;6CAArB,qBAAqB;CAEjC"}
1
+ {"version":3,"file":"a11y-panel-state.service.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/a11y/a11y-panel-state.service.ts"],"names":[],"mappings":";AAEA,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;AAEnE,qBACa,qBAAqB;IAChC,QAAQ,CAAC,SAAS,qDAAoC;yCAD3C,qBAAqB;;CAEjC"}
@@ -94,7 +94,7 @@ export class A11yPanelComponent {
94
94
  } }, dependencies: [A11yViolationsComponent,
95
95
  A11yKeyboardComponent,
96
96
  A11yTreeComponent,
97
- A11ySrComponent], styles: ["[_nghost-%COMP%] { display: flex; flex-direction: column; height: 100%; }\n\n .a11y-panel[_ngcontent-%COMP%] { display: flex; flex-direction: column; height: 100%; }\n\n .subtabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 2px;\n padding: 10px 20px 0;\n border-bottom: 1px solid var(--prism-border);\n background: var(--prism-bg-elevated);\n position: sticky;\n top: 0;\n z-index: 2;\n }\n\n .st-tab[_ngcontent-%COMP%] {\n padding: 7px 12px;\n font-size: 12px;\n font-weight: 500;\n color: var(--prism-text-muted);\n border-radius: var(--radius-sm) var(--radius-sm) 0 0;\n position: relative;\n display: flex;\n align-items: center;\n gap: 6px;\n background: none;\n border: none;\n cursor: pointer;\n font-family: var(--font-sans);\n transition: color var(--dur-fast);\n }\n .st-tab[_ngcontent-%COMP%]:hover { color: var(--prism-text-2); }\n .st-tab--active[_ngcontent-%COMP%] { color: var(--prism-text); }\n .st-tab--active[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n left: 8px;\n right: 8px;\n bottom: -1px;\n height: 2px;\n background: var(--prism-primary);\n border-radius: 1px;\n }\n\n .st-badge[_ngcontent-%COMP%] {\n min-width: 16px;\n height: 16px;\n padding: 0 5px;\n border-radius: 8px;\n font-family: var(--font-mono);\n font-size: 10px;\n font-weight: 700;\n display: grid;\n place-items: center;\n background: color-mix(in srgb, var(--prism-primary) 18%, transparent);\n color: var(--prism-primary);\n }\n .st-badge--ok[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--prism-success) 18%, transparent);\n color: var(--prism-success);\n }\n .st-badge--warn[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--prism-warn) 18%, transparent);\n color: var(--prism-warn);\n }\n\n .a11y-content[_ngcontent-%COMP%] { flex: 1; overflow: auto; min-height: 0; }\n\n .a11y-disabled[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100px;\n color: var(--prism-text-muted);\n font-size: 13px;\n }"] });
97
+ A11ySrComponent], styles: ["[_nghost-%COMP%] { display: flex; flex-direction: column; height: 100%; }\n\n .a11y-panel[_ngcontent-%COMP%] { display: flex; flex-direction: column; height: 100%; }\n\n .subtabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 2px;\n padding: 10px 20px 0;\n border-bottom: 1px solid var(--%NS%prism-border);\n background: var(--%NS%prism-bg-elevated);\n position: sticky;\n top: 0;\n z-index: 2;\n }\n\n .st-tab[_ngcontent-%COMP%] {\n padding: 7px 12px;\n font-size: 12px;\n font-weight: 500;\n color: var(--%NS%prism-text-muted);\n border-radius: var(--%NS%radius-sm) var(--%NS%radius-sm) 0 0;\n position: relative;\n display: flex;\n align-items: center;\n gap: 6px;\n background: none;\n border: none;\n cursor: pointer;\n font-family: var(--%NS%font-sans);\n transition: color var(--%NS%dur-fast);\n }\n .st-tab[_ngcontent-%COMP%]:hover { color: var(--%NS%prism-text-2); }\n .st-tab--active[_ngcontent-%COMP%] { color: var(--%NS%prism-text); }\n .st-tab--%NS%active[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n left: 8px;\n right: 8px;\n bottom: -1px;\n height: 2px;\n background: var(--%NS%prism-primary);\n border-radius: 1px;\n }\n\n .st-badge[_ngcontent-%COMP%] {\n min-width: 16px;\n height: 16px;\n padding: 0 5px;\n border-radius: 8px;\n font-family: var(--%NS%font-mono);\n font-size: 10px;\n font-weight: 700;\n display: grid;\n place-items: center;\n background: color-mix(in srgb, var(--%NS%prism-primary) 18%, transparent);\n color: var(--%NS%prism-primary);\n }\n .st-badge--ok[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--%NS%prism-success) 18%, transparent);\n color: var(--%NS%prism-success);\n }\n .st-badge--warn[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--%NS%prism-warn) 18%, transparent);\n color: var(--%NS%prism-warn);\n }\n\n .a11y-content[_ngcontent-%COMP%] { flex: 1; overflow: auto; min-height: 0; }\n\n .a11y-disabled[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100px;\n color: var(--%NS%prism-text-muted);\n font-size: 13px;\n }"] });
98
98
  }
99
99
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(A11yPanelComponent, [{
100
100
  type: Component,
@@ -3,6 +3,6 @@ export type A11yPerspectiveMode = 'visual' | 'screen-reader';
3
3
  export declare class A11yPerspectiveService {
4
4
  readonly mode: import("@angular/core").WritableSignal<A11yPerspectiveMode>;
5
5
  static ɵfac: i0.ɵɵFactoryDeclaration<A11yPerspectiveService, never>;
6
- static ɵprov: i0.ɵɵInjectableDeclaration<A11yPerspectiveService>;
6
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
7
7
  }
8
8
  //# sourceMappingURL=a11y-perspective.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"a11y-perspective.service.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/a11y/a11y-perspective.service.ts"],"names":[],"mappings":";AAEA,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,eAAe,CAAC;AAE7D,qBACa,sBAAsB;IACjC,QAAQ,CAAC,IAAI,8DAAyC;yCAD3C,sBAAsB;6CAAtB,sBAAsB;CAElC"}
1
+ {"version":3,"file":"a11y-perspective.service.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/a11y/a11y-perspective.service.ts"],"names":[],"mappings":";AAEA,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,eAAe,CAAC;AAE7D,qBACa,sBAAsB;IACjC,QAAQ,CAAC,IAAI,8DAAyC;yCAD3C,sBAAsB;;CAElC"}
@@ -45,7 +45,7 @@ export class A11yScoreComponent {
45
45
  i0.ɵɵattribute("r", ctx.R)("stroke-dasharray", ctx.CIRC)("stroke-dashoffset", ctx.dashOffset())("stroke", "url(#" + ctx.gradientId + ")");
46
46
  i0.ɵɵadvance();
47
47
  i0.ɵɵconditional(!ctx.compact() ? 8 : -1);
48
- } }, styles: ["[_nghost-%COMP%] { display: inline-flex; }\n\n .score-ring[_ngcontent-%COMP%] {\n position: relative;\n width: 128px;\n height: 128px;\n }\n .compact[_nghost-%COMP%] .score-ring[_ngcontent-%COMP%], .compact [_nghost-%COMP%] .score-ring[_ngcontent-%COMP%], \n [style*=\"width:18px\"][_nghost-%COMP%] .score-ring[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n }\n\n .score-ring[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] {\n transform: rotate(-90deg);\n width: 100%;\n height: 100%;\n }\n\n .score-ring[_ngcontent-%COMP%] circle[_ngcontent-%COMP%] {\n fill: none;\n stroke-width: 10;\n }\n .track[_ngcontent-%COMP%] { stroke: var(--prism-input-bg); }\n .gradient-start[_ngcontent-%COMP%] { stop-color: var(--prism-primary); }\n .gradient-end[_ngcontent-%COMP%] { stop-color: var(--prism-accent); }\n .fill[_ngcontent-%COMP%] {\n stroke-linecap: round;\n transition: stroke-dashoffset 0.5s ease;\n }\n\n .score-val[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0;\n }\n .score-num[_ngcontent-%COMP%] {\n font-size: 30px;\n font-weight: 700;\n letter-spacing: -0.02em;\n background: linear-gradient(135deg, var(--prism-primary), var(--prism-accent));\n -webkit-background-clip: text;\n background-clip: text;\n color: transparent;\n font-family: var(--font-mono);\n }\n .score-max[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--prism-text-ghost);\n font-weight: 500;\n }"] });
48
+ } }, styles: ["[_nghost-%COMP%] { display: inline-flex; }\n\n .score-ring[_ngcontent-%COMP%] {\n position: relative;\n width: 128px;\n height: 128px;\n }\n .compact[_nghost-%COMP%] .score-ring[_ngcontent-%COMP%], .compact [_nghost-%COMP%] .score-ring[_ngcontent-%COMP%], \n [style*=\"width:18px\"][_nghost-%COMP%] .score-ring[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n }\n\n .score-ring[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] {\n transform: rotate(-90deg);\n width: 100%;\n height: 100%;\n }\n\n .score-ring[_ngcontent-%COMP%] circle[_ngcontent-%COMP%] {\n fill: none;\n stroke-width: 10;\n }\n .track[_ngcontent-%COMP%] { stroke: var(--%NS%prism-input-bg); }\n .gradient-start[_ngcontent-%COMP%] { stop-color: var(--%NS%prism-primary); }\n .gradient-end[_ngcontent-%COMP%] { stop-color: var(--%NS%prism-accent); }\n .fill[_ngcontent-%COMP%] {\n stroke-linecap: round;\n transition: stroke-dashoffset 0.5s ease;\n }\n\n .score-val[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0;\n }\n .score-num[_ngcontent-%COMP%] {\n font-size: 30px;\n font-weight: 700;\n letter-spacing: -0.02em;\n background: linear-gradient(135deg, var(--%NS%prism-primary), var(--%NS%prism-accent));\n -webkit-background-clip: text;\n background-clip: text;\n color: transparent;\n font-family: var(--%NS%font-mono);\n }\n .score-max[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--%NS%prism-text-ghost);\n font-weight: 500;\n }"] });
49
49
  }
50
50
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(A11yScoreComponent, [{
51
51
  type: Component,
@@ -100,7 +100,7 @@ export class A11ySrOverlayComponent {
100
100
  i0.ɵɵconditionalCreate(0, A11ySrOverlayComponent_Conditional_0_Template, 2, 0);
101
101
  } if (rf & 2) {
102
102
  i0.ɵɵconditional(ctx.showOverlay() ? 0 : -1);
103
- } }, styles: ["[_nghost-%COMP%] {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 100;\n overflow: hidden;\n }\n\n .prism-a11y-sr-ov__focus[_ngcontent-%COMP%] {\n position: absolute;\n border: 2px solid var(--prism-primary);\n border-radius: 4px;\n background: rgba(167, 139, 250, 0.08);\n box-shadow: 0 0 0 4px rgba(167, 139, 250, 0.12);\n }\n\n .prism-a11y-sr-ov__badge[_ngcontent-%COMP%] {\n position: absolute;\n height: 18px;\n padding: 0 5px;\n min-width: 18px;\n background: var(--prism-primary);\n color: white;\n border-radius: 9px;\n font-size: 9px;\n font-weight: 700;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 0 0 1.5px white, 0 2px 4px rgba(0, 0, 0, 0.25);\n font-family: var(--prism-font-sans, system-ui, sans-serif);\n }\n\n .prism-a11y-sr-ov__badge--active[_ngcontent-%COMP%] {\n background: var(--prism-primary-from);\n box-shadow: 0 0 0 2px white, 0 0 0 4px rgba(124, 58, 237, 0.4);\n }"] });
103
+ } }, styles: ["[_nghost-%COMP%] {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 100;\n overflow: hidden;\n }\n\n .prism-a11y-sr-ov__focus[_ngcontent-%COMP%] {\n position: absolute;\n border: 2px solid var(--%NS%prism-primary);\n border-radius: 4px;\n background: rgba(167, 139, 250, 0.08);\n box-shadow: 0 0 0 4px rgba(167, 139, 250, 0.12);\n }\n\n .prism-a11y-sr-ov__badge[_ngcontent-%COMP%] {\n position: absolute;\n height: 18px;\n padding: 0 5px;\n min-width: 18px;\n background: var(--%NS%prism-primary);\n color: white;\n border-radius: 9px;\n font-size: 9px;\n font-weight: 700;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 0 0 1.5px white, 0 2px 4px rgba(0, 0, 0, 0.25);\n font-family: var(--%NS%prism-font-sans, system-ui, sans-serif);\n }\n\n .prism-a11y-sr-ov__badge--active[_ngcontent-%COMP%] {\n background: var(--%NS%prism-primary-from);\n box-shadow: 0 0 0 2px white, 0 0 0 4px rgba(124, 58, 237, 0.4);\n }"] });
104
104
  }
105
105
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(A11ySrOverlayComponent, [{
106
106
  type: Component,
@@ -77,7 +77,7 @@ export class A11ySrComponent {
77
77
  i0.ɵɵconditionalCreate(0, A11ySrComponent_Conditional_0_Template, 2, 0, "div", 0)(1, A11ySrComponent_Conditional_1_Template, 2, 0, "div", 0)(2, A11ySrComponent_Conditional_2_Template, 3, 0, "div", 1);
78
78
  } if (rf & 2) {
79
79
  i0.ɵɵconditional(!ctx.rendererService.renderedElement() ? 0 : !ctx.announcements().length ? 1 : 2);
80
- } }, styles: ["[_nghost-%COMP%] { display: block; height: 100%; overflow: auto; }\n\n .sr-empty[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: center;\n min-height: 100px; color: var(--prism-text-muted); font-size: 13px;\n }\n\n .sr-body[_ngcontent-%COMP%] {\n padding: 16px 20px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .sr-line[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 56px 1fr;\n gap: 12px;\n padding: 10px 12px;\n background: var(--prism-bg-surface);\n border: 1px solid var(--prism-border);\n border-radius: 8px;\n }\n\n .sr-step[_ngcontent-%COMP%] {\n font-family: var(--font-mono);\n font-size: 11px;\n color: var(--prism-text-ghost);\n font-weight: 600;\n }\n\n .sr-text[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--prism-text);\n line-height: 1.5;\n }\n\n .sr-name[_ngcontent-%COMP%] {\n color: var(--prism-primary);\n font-weight: 600;\n font-style: normal;\n }\n\n .sr-text[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n font-family: var(--font-mono);\n font-size: 11.5px;\n color: var(--prism-text-muted);\n padding: 1px 5px;\n background: var(--prism-input-bg);\n border-radius: var(--radius-xs);\n }"] });
80
+ } }, styles: ["[_nghost-%COMP%] { display: block; height: 100%; overflow: auto; }\n\n .sr-empty[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: center;\n min-height: 100px; color: var(--%NS%prism-text-muted); font-size: 13px;\n }\n\n .sr-body[_ngcontent-%COMP%] {\n padding: 16px 20px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .sr-line[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 56px 1fr;\n gap: 12px;\n padding: 10px 12px;\n background: var(--%NS%prism-bg-surface);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 8px;\n }\n\n .sr-step[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: 11px;\n color: var(--%NS%prism-text-ghost);\n font-weight: 600;\n }\n\n .sr-text[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--%NS%prism-text);\n line-height: 1.5;\n }\n\n .sr-name[_ngcontent-%COMP%] {\n color: var(--%NS%prism-primary);\n font-weight: 600;\n font-style: normal;\n }\n\n .sr-text[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: 11.5px;\n color: var(--%NS%prism-text-muted);\n padding: 1px 5px;\n background: var(--%NS%prism-input-bg);\n border-radius: var(--%NS%radius-xs);\n }"] });
81
81
  }
82
82
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(A11ySrComponent, [{
83
83
  type: Component,
@@ -3,6 +3,6 @@ import * as i0 from "@angular/core";
3
3
  export declare class A11ySrService {
4
4
  buildAnnouncementList(root: Element, getById?: (id: string) => Element | null): SrAnnouncement[];
5
5
  static ɵfac: i0.ɵɵFactoryDeclaration<A11ySrService, never>;
6
- static ɵprov: i0.ɵɵInjectableDeclaration<A11ySrService>;
6
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
7
7
  }
8
8
  //# sourceMappingURL=a11y-sr.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"a11y-sr.service.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/a11y/a11y-sr.service.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;;AAwCtD,qBACa,aAAa;IACxB,qBAAqB,CACnB,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,GACvC,cAAc,EAAE;yCAJR,aAAa;6CAAb,aAAa;CAYzB"}
1
+ {"version":3,"file":"a11y-sr.service.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/a11y/a11y-sr.service.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;;AAwCtD,qBACa,aAAa;IACxB,qBAAqB,CACnB,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,GACvC,cAAc,EAAE;yCAJR,aAAa;;CAYzB"}
@@ -0,0 +1,15 @@
1
+ import type { A11yComponentMeta, A11yScoreResult, A11yThresholds } from './a11y.types.js';
2
+ /**
3
+ * A component's standing, derived with the same precedence
4
+ * `checkA11yThresholds` uses library-wide.
5
+ *
6
+ * Browser-safe and deliberately so, even though the build step is its main
7
+ * caller: the derivation is written down once and read from both sides. The
8
+ * build-time hook stores the result in the component's meta for the navigation
9
+ * marker, and the panel tab grades the *live* audit with the very same rule.
10
+ * The two look at different numbers — the report is a snapshot, the audit is
11
+ * running now — but they must never grade the same number differently, which
12
+ * is what a second hardcoded scale next to this one would guarantee.
13
+ */
14
+ export declare function deriveA11ySummary(score: A11yScoreResult, thresholds: A11yThresholds): NonNullable<A11yComponentMeta['summary']>;
15
+ //# sourceMappingURL=a11y-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a11y-summary.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/a11y/a11y-summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,cAAc,EACf,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,cAAc,GACzB,WAAW,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAuB3C"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * A component's standing, derived with the same precedence
3
+ * `checkA11yThresholds` uses library-wide.
4
+ *
5
+ * Browser-safe and deliberately so, even though the build step is its main
6
+ * caller: the derivation is written down once and read from both sides. The
7
+ * build-time hook stores the result in the component's meta for the navigation
8
+ * marker, and the panel tab grades the *live* audit with the very same rule.
9
+ * The two look at different numbers — the report is a snapshot, the audit is
10
+ * running now — but they must never grade the same number differently, which
11
+ * is what a second hardcoded scale next to this one would guarantee.
12
+ */
13
+ export function deriveA11ySummary(score, thresholds) {
14
+ if (score.critical > thresholds.critical ||
15
+ score.serious > thresholds.serious) {
16
+ const parts = [];
17
+ if (score.critical > 0)
18
+ parts.push(`${score.critical} critical`);
19
+ if (score.serious > 0)
20
+ parts.push(`${score.serious} serious`);
21
+ // Only reachable with a negative configured threshold: the branch fires
22
+ // on `0 > threshold` with both counts still at zero, and `parts` stays
23
+ // empty. Fall back to the score-based label rather than ship "A11y: ".
24
+ const label = parts.length > 0
25
+ ? `A11y: ${parts.join(', ')}`
26
+ : `A11y score ${score.score}`;
27
+ return { variant: 'danger', label };
28
+ }
29
+ if (score.moderate > thresholds.moderate || score.score < thresholds.score) {
30
+ return { variant: 'warn', label: `A11y score ${score.score}` };
31
+ }
32
+ return { variant: 'ok', label: `A11y score ${score.score}` };
33
+ }
@@ -133,7 +133,7 @@ export class A11yTreeNodeComponent {
133
133
  i0.ɵɵrepeater(ctx.stateEntries());
134
134
  i0.ɵɵadvance(2);
135
135
  i0.ɵɵconditional(ctx.expanded() && ctx.node().children.length ? 9 : -1);
136
- } }, dependencies: [A11yTreeNodeComponent], styles: ["[_nghost-%COMP%] { display: block; }\n\n .aria-tree-line[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 2px 0;\n font-family: var(--font-mono);\n font-size: 12.5px;\n line-height: 1.8;\n color: var(--prism-text-2);\n }\n .aria-tree-line--hidden[_ngcontent-%COMP%] { opacity: 0.4; }\n\n .indent[_ngcontent-%COMP%] {\n color: var(--prism-text-ghost);\n opacity: 0.5;\n user-select: none;\n flex-shrink: 0;\n white-space: pre;\n font-size: 12px;\n text-align: right;\n }\n\n .tree-toggle[_ngcontent-%COMP%] {\n background: none;\n border: none;\n cursor: pointer;\n font-size: 10px;\n color: var(--prism-text-muted);\n padding: 0;\n width: 12px;\n flex-shrink: 0;\n }\n\n .role[_ngcontent-%COMP%] { color: var(--prism-primary); font-weight: 600; }\n .name[_ngcontent-%COMP%] { color: var(--prism-text); }\n .attr[_ngcontent-%COMP%] { color: var(--prism-text-ghost); }"] });
136
+ } }, dependencies: [A11yTreeNodeComponent], styles: ["[_nghost-%COMP%] { display: block; }\n\n .aria-tree-line[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 2px 0;\n font-family: var(--%NS%font-mono);\n font-size: 12.5px;\n line-height: 1.8;\n color: var(--%NS%prism-text-2);\n }\n .aria-tree-line--hidden[_ngcontent-%COMP%] { opacity: 0.4; }\n\n .indent[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-ghost);\n opacity: 0.5;\n user-select: none;\n flex-shrink: 0;\n white-space: pre;\n font-size: 12px;\n text-align: right;\n }\n\n .tree-toggle[_ngcontent-%COMP%] {\n background: none;\n border: none;\n cursor: pointer;\n font-size: 10px;\n color: var(--%NS%prism-text-muted);\n padding: 0;\n width: 12px;\n flex-shrink: 0;\n }\n\n .role[_ngcontent-%COMP%] { color: var(--%NS%prism-primary); font-weight: 600; }\n .name[_ngcontent-%COMP%] { color: var(--%NS%prism-text); }\n .attr[_ngcontent-%COMP%] { color: var(--%NS%prism-text-ghost); }"] });
137
137
  }
138
138
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(A11yTreeNodeComponent, [{
139
139
  type: Component,
@@ -183,7 +183,7 @@ export class A11yTreeComponent {
183
183
  i0.ɵɵconditionalCreate(0, A11yTreeComponent_Conditional_0_Template, 2, 0, "div", 0)(1, A11yTreeComponent_Conditional_1_Template, 2, 3, "div", 1);
184
184
  } if (rf & 2) {
185
185
  i0.ɵɵconditional(!ctx.rendererService.renderedElement() ? 0 : ctx.tree() ? 1 : -1);
186
- } }, dependencies: [A11yTreeNodeComponent], styles: ["[_nghost-%COMP%] { display: block; height: 100%; overflow: auto; }\n\n .aria-tree[_ngcontent-%COMP%] {\n padding: 14px 20px;\n }\n\n .tree-empty[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: center;\n min-height: 100px; color: var(--prism-text-muted); font-size: 13px;\n }"] });
186
+ } }, dependencies: [A11yTreeNodeComponent], styles: ["[_nghost-%COMP%] { display: block; height: 100%; overflow: auto; }\n\n .aria-tree[_ngcontent-%COMP%] {\n padding: 14px 20px;\n }\n\n .tree-empty[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: center;\n min-height: 100px; color: var(--%NS%prism-text-muted); font-size: 13px;\n }"] });
187
187
  }
188
188
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(A11yTreeComponent, [{
189
189
  type: Component,
@@ -3,6 +3,6 @@ import * as i0 from "@angular/core";
3
3
  export declare class A11yTreeService {
4
4
  buildTree(root: Element, getById?: (id: string) => Element | null): A11yNode;
5
5
  static ɵfac: i0.ɵɵFactoryDeclaration<A11yTreeService, never>;
6
- static ɵprov: i0.ɵɵInjectableDeclaration<A11yTreeService>;
6
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
7
7
  }
8
8
  //# sourceMappingURL=a11y-tree.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"a11y-tree.service.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/a11y/a11y-tree.service.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;;AAQhD,qBACa,eAAe;IAC1B,SAAS,CACP,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,GACvC,QAAQ;yCAJA,eAAe;6CAAf,eAAe;CAO3B"}
1
+ {"version":3,"file":"a11y-tree.service.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/a11y/a11y-tree.service.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;;AAQhD,qBACa,eAAe;IAC1B,SAAS,CACP,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,GACvC,QAAQ;yCAJA,eAAe;;CAO3B"}
@@ -56,7 +56,7 @@ function A11yViolationsComponent_Conditional_1_For_13_Template(rf, ctx) { if (rf
56
56
  } if (rf & 2) {
57
57
  const item_r2 = ctx.$implicit;
58
58
  const ctx_r0 = i0.ɵɵnextContext(2);
59
- i0.ɵɵstyleProp("--sev-color", ctx_r0.sevColor(item_r2.impact));
59
+ i0.ɵɵstyleProp("--%NS%sev-color", ctx_r0.sevColor(item_r2.impact));
60
60
  i0.ɵɵadvance(2);
61
61
  i0.ɵɵtextInterpolate(item_r2.impact ?? "pass");
62
62
  i0.ɵɵadvance(3);
@@ -145,11 +145,11 @@ export class A11yViolationsComponent {
145
145
  return sevColor(impact);
146
146
  }
147
147
  static ɵfac = function A11yViolationsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || A11yViolationsComponent)(); };
148
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: A11yViolationsComponent, selectors: [["prism-a11y-violations"]], decls: 3, vars: 1, consts: [[1, "a11y-status", "a11y-status--error"], [1, "a11y-body", 3, "a11y-body--loading"], [1, "a11y-status"], [1, "a11y-body"], [1, "score-wrap"], [3, "score"], [1, "score-label"], [1, "score-meta"], [2, "background", "var(--prism-success)"], [1, "viol-list"], [1, "viol", 3, "--sev-color"], [2, "background", "var(--prism-danger)"], [2, "background", "var(--prism-warn)"], [1, "viol"], [1, "viol-sev"], [1, "viol-text"], [1, "viol-rule"]], template: function A11yViolationsComponent_Template(rf, ctx) { if (rf & 1) {
148
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: A11yViolationsComponent, selectors: [["prism-a11y-violations"]], decls: 3, vars: 1, consts: [[1, "a11y-status", "a11y-status--error"], [1, "a11y-body", 3, "a11y-body--loading"], [1, "a11y-status"], [1, "a11y-body"], [1, "score-wrap"], [3, "score"], [1, "score-label"], [1, "score-meta"], [2, "background", "var(--prism-success)"], [1, "viol-list"], [1, "viol", 3, "--%NS%sev-color"], [2, "background", "var(--prism-danger)"], [2, "background", "var(--prism-warn)"], [1, "viol"], [1, "viol-sev"], [1, "viol-text"], [1, "viol-rule"]], template: function A11yViolationsComponent_Template(rf, ctx) { if (rf & 1) {
149
149
  i0.ɵɵconditionalCreate(0, A11yViolationsComponent_Conditional_0_Template, 2, 1, "div", 0)(1, A11yViolationsComponent_Conditional_1_Template, 15, 7, "div", 1)(2, A11yViolationsComponent_Conditional_2_Template, 2, 0, "div", 2);
150
150
  } if (rf & 2) {
151
151
  i0.ɵɵconditional(ctx.auditService.error() ? 0 : ctx.auditService.results() || ctx.auditService.running() ? 1 : 2);
152
- } }, dependencies: [A11yScoreComponent], styles: ["[_nghost-%COMP%] { display: flex; flex-direction: column; height: 100%; overflow: auto; }\n\n .a11y-body[_ngcontent-%COMP%] {\n padding: 18px 20px;\n display: grid;\n grid-template-columns: 220px 1fr;\n gap: 20px;\n min-height: 0;\n }\n .a11y-body--loading[_ngcontent-%COMP%] { opacity: 0.55; transition: opacity var(--dur-base); }\n\n .score-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n padding: 14px;\n background: var(--prism-bg-surface);\n border: 1px solid var(--prism-border);\n border-radius: 10px;\n align-self: start;\n }\n\n .score-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--prism-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n font-weight: 600;\n }\n .score-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 2px;\n font-size: 11px;\n color: var(--prism-text-muted);\n }\n .score-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 4px; }\n .score-meta[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { width: 6px; height: 6px; border-radius: 50%; display: block; }\n\n .viol-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 0;\n }\n\n .viol[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr auto;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n background: var(--prism-bg-surface);\n border: 1px solid var(--prism-border);\n border-radius: 8px;\n border-left: 3px solid var(--sev-color, var(--prism-primary));\n transition: border-color var(--dur-fast);\n }\n .viol[_ngcontent-%COMP%]:hover { border-color: var(--prism-border-strong); }\n\n .viol-sev[_ngcontent-%COMP%] {\n font-family: var(--font-mono);\n font-size: 9.5px;\n font-weight: 700;\n padding: 2px 6px;\n border-radius: var(--radius-xs);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n background: color-mix(in srgb, var(--sev-color) 15%, transparent);\n color: var(--sev-color);\n }\n\n .viol-text[_ngcontent-%COMP%] {\n font-size: 12.5px;\n color: var(--prism-text);\n min-width: 0;\n }\n .viol-text[_ngcontent-%COMP%] b[_ngcontent-%COMP%] {\n display: block;\n font-weight: 600;\n margin-bottom: 1px;\n }\n .viol-text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n font-size: 11.5px;\n }\n\n .viol-rule[_ngcontent-%COMP%] {\n font-family: var(--font-mono);\n font-size: 11px;\n color: var(--prism-text-ghost);\n padding: 2px 7px;\n background: var(--prism-input-bg);\n border-radius: var(--radius-xs);\n white-space: nowrap;\n }\n\n .a11y-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100px;\n color: var(--prism-text-muted);\n font-size: 13px;\n }\n .a11y-status--error[_ngcontent-%COMP%] { color: var(--prism-danger); }\n\n @media (max-width: 1100px) {\n .a11y-body[_ngcontent-%COMP%] { grid-template-columns: 1fr; }\n }"] });
152
+ } }, dependencies: [A11yScoreComponent], styles: ["[_nghost-%COMP%] { display: flex; flex-direction: column; height: 100%; overflow: auto; }\n\n .a11y-body[_ngcontent-%COMP%] {\n padding: 18px 20px;\n display: grid;\n grid-template-columns: 220px 1fr;\n gap: 20px;\n min-height: 0;\n }\n .a11y-body--loading[_ngcontent-%COMP%] { opacity: 0.55; transition: opacity var(--%NS%dur-base); }\n\n .score-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n padding: 14px;\n background: var(--%NS%prism-bg-surface);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 10px;\n align-self: start;\n }\n\n .score-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--%NS%prism-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n font-weight: 600;\n }\n .score-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 2px;\n font-size: 11px;\n color: var(--%NS%prism-text-muted);\n }\n .score-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 4px; }\n .score-meta[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { width: 6px; height: 6px; border-radius: 50%; display: block; }\n\n .viol-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 0;\n }\n\n .viol[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr auto;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n background: var(--%NS%prism-bg-surface);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 8px;\n border-left: 3px solid var(--%NS%sev-color, var(--%NS%prism-primary));\n transition: border-color var(--%NS%dur-fast);\n }\n .viol[_ngcontent-%COMP%]:hover { border-color: var(--%NS%prism-border-strong); }\n\n .viol-sev[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: 9.5px;\n font-weight: 700;\n padding: 2px 6px;\n border-radius: var(--%NS%radius-xs);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n background: color-mix(in srgb, var(--%NS%sev-color) 15%, transparent);\n color: var(--%NS%sev-color);\n }\n\n .viol-text[_ngcontent-%COMP%] {\n font-size: 12.5px;\n color: var(--%NS%prism-text);\n min-width: 0;\n }\n .viol-text[_ngcontent-%COMP%] b[_ngcontent-%COMP%] {\n display: block;\n font-weight: 600;\n margin-bottom: 1px;\n }\n .viol-text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n font-size: 11.5px;\n }\n\n .viol-rule[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: 11px;\n color: var(--%NS%prism-text-ghost);\n padding: 2px 7px;\n background: var(--%NS%prism-input-bg);\n border-radius: var(--%NS%radius-xs);\n white-space: nowrap;\n }\n\n .a11y-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100px;\n color: var(--%NS%prism-text-muted);\n font-size: 13px;\n }\n .a11y-status--error[_ngcontent-%COMP%] { color: var(--%NS%prism-danger); }\n\n @media (max-width: 1100px) {\n .a11y-body[_ngcontent-%COMP%] { grid-template-columns: 1fr; }\n }"] });
153
153
  }
154
154
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(A11yViolationsComponent, [{
155
155
  type: Component,
@@ -41,6 +41,20 @@ export interface A11yManifestMeta {
41
41
  total: A11yReport['total'];
42
42
  thresholds: A11yThresholds;
43
43
  }
44
+ /** Shape stored under `showcaseConfig.meta.a11y`. */
45
+ export interface A11yComponentMeta {
46
+ found: boolean;
47
+ score: A11yScoreResult;
48
+ /**
49
+ * Pre-derived headline, written by the build step. Optional because a report
50
+ * written before this field existed simply has none, and the marker is then
51
+ * left out rather than guessed at.
52
+ */
53
+ summary?: {
54
+ variant: 'ok' | 'warn' | 'danger';
55
+ label: string;
56
+ };
57
+ }
44
58
  export interface NgPrismA11yConfig {
45
59
  /** Thresholds for the header badge color-coding and (when run via the CLI) build failure. */
46
60
  thresholds?: Partial<A11yThresholds>;
@@ -1 +1 @@
1
- {"version":3,"file":"a11y.types.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/a11y/a11y.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,KAAK,EAAE,eAAe,GAAG;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC3B,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,6FAA6F;IAC7F,UAAU,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACrC,iGAAiG;IACjG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IACzC,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB"}
1
+ {"version":3,"file":"a11y.types.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/a11y/a11y.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,KAAK,EAAE,eAAe,GAAG;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC3B,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,eAAe,CAAC;IACvB;;;;OAIG;IACH,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE;AAED,MAAM,WAAW,iBAAiB;IAChC,6FAA6F;IAC7F,UAAU,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACrC,iGAAiG;IACjG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IACzC,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB"}
@@ -0,0 +1,8 @@
1
+ import type { NavigationDecorationDefinition } from '../../plugin/plugin.types.js';
2
+ /**
3
+ * Core-owned navigation markers — the counterpart to `BUILTIN_PANELS` and
4
+ * `BUILTIN_HEADER_WIDGETS`. A11y is a core feature, not a plugin, so its
5
+ * marker lives here rather than in a plugin's contribution list.
6
+ */
7
+ export declare const BUILTIN_NAVIGATION_DECORATIONS: NavigationDecorationDefinition[];
8
+ //# sourceMappingURL=builtin-navigation-decorations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-navigation-decorations.d.ts","sourceRoot":"","sources":["../../../src/app/panels/builtin-navigation-decorations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAGnF;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,EAAE,8BAA8B,EAexE,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Core-owned navigation markers — the counterpart to `BUILTIN_PANELS` and
3
+ * `BUILTIN_HEADER_WIDGETS`. A11y is a core feature, not a plugin, so its
4
+ * marker lives here rather than in a plugin's contribution list.
5
+ */
6
+ export const BUILTIN_NAVIGATION_DECORATIONS = [
7
+ {
8
+ id: 'a11y',
9
+ icon: 'accessibility',
10
+ order: 10,
11
+ badge: (component) => {
12
+ const meta = component.meta.showcaseConfig.meta?.['a11y'];
13
+ if (!meta?.found || !meta.summary)
14
+ return null;
15
+ if (meta.summary.variant === 'ok')
16
+ return null;
17
+ return { variant: meta.summary.variant, label: meta.summary.label };
18
+ },
19
+ },
20
+ ];
@@ -1 +1 @@
1
- {"version":3,"file":"builtin-panels.d.ts","sourceRoot":"","sources":["../../../src/app/panels/builtin-panels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAKpE,eAAO,MAAM,cAAc,EAAE,eAAe,EAI3C,CAAC"}
1
+ {"version":3,"file":"builtin-panels.d.ts","sourceRoot":"","sources":["../../../src/app/panels/builtin-panels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAMpE,eAAO,MAAM,cAAc,EAAE,eAAe,EAK3C,CAAC"}
@@ -1,7 +1,9 @@
1
+ import { OVERVIEW_PANEL } from '../overview/overview-panel.js';
1
2
  import { CONTROLS_PLUGIN } from './controls/controls-plugin.js';
2
3
  import { EVENTS_PLUGIN } from './events/events-plugin.js';
3
4
  import { A11Y_CORE_PANEL } from './a11y/a11y-core.plugin.js';
4
5
  export const BUILTIN_PANELS = [
6
+ OVERVIEW_PANEL,
5
7
  ...(CONTROLS_PLUGIN.panels ?? []),
6
8
  ...(EVENTS_PLUGIN.panels ?? []),
7
9
  A11Y_CORE_PANEL,
@@ -186,7 +186,7 @@ export class PrismControlsPanelComponent {
186
186
  StringControlComponent,
187
187
  NumberControlComponent,
188
188
  UnionControlComponent,
189
- JsonControlComponent], styles: [".ctl-panel[_ngcontent-%COMP%] {\n overflow-y: auto;\n height: 100%;\n }\n\n .ctl-toolbar[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n z-index: 2;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 20px;\n background: var(--prism-bg-elevated);\n border-bottom: 1px solid var(--prism-border);\n }\n .ctl-dirty-info[_ngcontent-%COMP%] {\n font-size: 11.5px;\n font-family: var(--font-mono);\n color: var(--prism-text-muted);\n display: inline-flex;\n align-items: center;\n gap: 6px;\n }\n .ctl-dirty-dot[_ngcontent-%COMP%] {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--prism-primary);\n box-shadow: 0 0 6px color-mix(in srgb, var(--prism-primary) 60%, transparent);\n }\n .ctl-reset-btn[_ngcontent-%COMP%] {\n height: 24px;\n padding: 0 10px;\n border-radius: 5px;\n font-size: 11.5px;\n font-weight: 500;\n font-family: var(--font-sans);\n color: var(--prism-text-muted);\n background: transparent;\n border: 1px solid var(--prism-border);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n transition: color var(--dur-fast), background var(--dur-fast), border-color var(--dur-fast);\n }\n .ctl-reset-btn[_ngcontent-%COMP%]:hover {\n color: var(--prism-text);\n border-color: color-mix(in srgb, var(--prism-primary) 40%, var(--prism-border));\n background: color-mix(in srgb, var(--prism-primary) 8%, transparent);\n }\n .ctl-reset-btn[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--prism-primary);\n outline-offset: 1px;\n }\n\n .ctl-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 180px 1fr;\n align-items: center;\n gap: 12px;\n padding: 8px 20px;\n min-height: 40px;\n border-bottom: 1px solid var(--prism-border);\n }\n .ctl-row[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--prism-primary) 3%, transparent);\n }\n\n .ctl-label[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n .ctl-name[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--prism-text);\n font-weight: 500;\n }\n .ctl-type[_ngcontent-%COMP%] {\n font-family: var(--font-mono);\n font-size: 10.5px;\n color: var(--prism-text-ghost);\n }\n .ctl-type[_ngcontent-%COMP%] b[_ngcontent-%COMP%] {\n color: var(--prism-primary);\n font-weight: 500;\n }\n\n .ctl-input[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n }\n\n .ctl-not-editable[_ngcontent-%COMP%] {\n font-family: var(--font-mono);\n font-size: 11.5px;\n color: var(--prism-text-ghost);\n font-style: italic;\n }\n\n .ctl-empty[_ngcontent-%COMP%] {\n color: var(--prism-text-ghost);\n font-size: 13px;\n margin: 0;\n padding: 16px 20px;\n }"] });
189
+ JsonControlComponent], styles: [".ctl-panel[_ngcontent-%COMP%] {\n overflow-y: auto;\n height: 100%;\n }\n\n .ctl-toolbar[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n z-index: 2;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 20px;\n background: var(--%NS%prism-bg-elevated);\n border-bottom: 1px solid var(--%NS%prism-border);\n }\n .ctl-dirty-info[_ngcontent-%COMP%] {\n font-size: 11.5px;\n font-family: var(--%NS%font-mono);\n color: var(--%NS%prism-text-muted);\n display: inline-flex;\n align-items: center;\n gap: 6px;\n }\n .ctl-dirty-dot[_ngcontent-%COMP%] {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--%NS%prism-primary);\n box-shadow: 0 0 6px color-mix(in srgb, var(--%NS%prism-primary) 60%, transparent);\n }\n .ctl-reset-btn[_ngcontent-%COMP%] {\n height: 24px;\n padding: 0 10px;\n border-radius: 5px;\n font-size: 11.5px;\n font-weight: 500;\n font-family: var(--%NS%font-sans);\n color: var(--%NS%prism-text-muted);\n background: transparent;\n border: 1px solid var(--%NS%prism-border);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n transition: color var(--%NS%dur-fast), background var(--%NS%dur-fast), border-color var(--%NS%dur-fast);\n }\n .ctl-reset-btn[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text);\n border-color: color-mix(in srgb, var(--%NS%prism-primary) 40%, var(--%NS%prism-border));\n background: color-mix(in srgb, var(--%NS%prism-primary) 8%, transparent);\n }\n .ctl-reset-btn[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--%NS%prism-primary);\n outline-offset: 1px;\n }\n\n .ctl-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 180px 1fr;\n align-items: center;\n gap: 12px;\n padding: 8px 20px;\n min-height: 40px;\n border-bottom: 1px solid var(--%NS%prism-border);\n }\n .ctl-row[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--%NS%prism-primary) 3%, transparent);\n }\n\n .ctl-label[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n .ctl-name[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--%NS%prism-text);\n font-weight: 500;\n }\n .ctl-type[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: 10.5px;\n color: var(--%NS%prism-text-ghost);\n }\n .ctl-type[_ngcontent-%COMP%] b[_ngcontent-%COMP%] {\n color: var(--%NS%prism-primary);\n font-weight: 500;\n }\n\n .ctl-input[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n }\n\n .ctl-not-editable[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: 11.5px;\n color: var(--%NS%prism-text-ghost);\n font-style: italic;\n }\n\n .ctl-empty[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-ghost);\n font-size: 13px;\n margin: 0;\n padding: 16px 20px;\n }"] });
190
190
  }
191
191
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismControlsPanelComponent, [{
192
192
  type: Component,
@@ -56,7 +56,7 @@ export class PrismEventsPanelComponent {
56
56
  } if (rf & 2) {
57
57
  i0.ɵɵadvance(2);
58
58
  i0.ɵɵrepeater(ctx.eventLogService.events());
59
- } }, dependencies: [PrismJsonNodeComponent], styles: [".ev-panel[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n\n .ev-body[_ngcontent-%COMP%] {\n padding: 6px 0;\n overflow-y: auto;\n flex: 1;\n }\n\n .ev[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto auto 1fr auto;\n align-items: center;\n gap: 12px;\n padding: 6px 20px;\n font-family: var(--font-mono);\n font-size: 12px;\n border-bottom: 1px solid var(--prism-border);\n min-height: 32px;\n }\n .ev[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--prism-primary) 3%, transparent);\n }\n\n .ev-time[_ngcontent-%COMP%] {\n color: var(--prism-text-ghost);\n font-size: 11px;\n }\n .ev-idx[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n font-size: 11px;\n }\n .ev-name[_ngcontent-%COMP%] {\n color: var(--prism-primary);\n font-weight: 500;\n }\n .ev-args[_ngcontent-%COMP%] {\n color: var(--prism-text-2);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .ev-empty[_ngcontent-%COMP%] {\n color: var(--prism-text-ghost);\n font-size: 13px;\n padding: 16px 20px;\n margin: 0;\n }"] });
59
+ } }, dependencies: [PrismJsonNodeComponent], styles: [".ev-panel[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n\n .ev-body[_ngcontent-%COMP%] {\n padding: 6px 0;\n overflow-y: auto;\n flex: 1;\n }\n\n .ev[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto auto 1fr auto;\n align-items: center;\n gap: 12px;\n padding: 6px 20px;\n font-family: var(--%NS%font-mono);\n font-size: 12px;\n border-bottom: 1px solid var(--%NS%prism-border);\n min-height: 32px;\n }\n .ev[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--%NS%prism-primary) 3%, transparent);\n }\n\n .ev-time[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-ghost);\n font-size: 11px;\n }\n .ev-idx[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n font-size: 11px;\n }\n .ev-name[_ngcontent-%COMP%] {\n color: var(--%NS%prism-primary);\n font-weight: 500;\n }\n .ev-args[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-2);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .ev-empty[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-ghost);\n font-size: 13px;\n padding: 16px 20px;\n margin: 0;\n }"] });
60
60
  }
61
61
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismEventsPanelComponent, [{
62
62
  type: Component,
@@ -266,7 +266,7 @@ export class PrismJsonNodeComponent {
266
266
  } if (rf & 2) {
267
267
  let tmp_0_0;
268
268
  i0.ɵɵconditional((tmp_0_0 = ctx.type()) === "object" ? 0 : tmp_0_0 === "array" ? 1 : tmp_0_0 === "string" ? 2 : tmp_0_0 === "number" ? 3 : tmp_0_0 === "boolean" ? 4 : tmp_0_0 === "null" ? 5 : tmp_0_0 === "undefined" ? 6 : -1);
269
- } }, dependencies: [NgComponentOutlet], styles: ["[_nghost-%COMP%] {\n display: inline;\n font-family: var(--prism-font-mono, monospace);\n font-size: 12px;\n }\n .json-expandable[_ngcontent-%COMP%] {\n cursor: pointer;\n user-select: none;\n display: inline-flex;\n align-items: baseline;\n gap: 2px;\n }\n .json-expandable[_ngcontent-%COMP%]:hover .json-summary[_ngcontent-%COMP%] {\n opacity: 0.8;\n }\n .json-chevron[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n font-size: 10px;\n width: 10px;\n flex-shrink: 0;\n }\n .json-summary[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n }\n .json-children[_ngcontent-%COMP%] {\n display: block;\n padding-left: 16px;\n border-left: 1px solid var(--prism-border);\n margin: 2px 0;\n }\n .json-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n flex-wrap: wrap;\n gap: 0;\n padding: 1px 0;\n }\n .json-key[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n }\n .json-index[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n font-style: italic;\n }\n .json-colon[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n }\n .json-brace[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n }\n .json-string[_ngcontent-%COMP%] {\n color: var(--prism-code-attr);\n }\n .json-number[_ngcontent-%COMP%] {\n color: var(--prism-warn);\n }\n .json-boolean[_ngcontent-%COMP%] {\n color: var(--prism-primary);\n }\n .json-null[_ngcontent-%COMP%], \n .json-undefined[_ngcontent-%COMP%] {\n color: var(--prism-text-muted);\n font-style: italic;\n }"] });
269
+ } }, dependencies: [NgComponentOutlet], styles: ["[_nghost-%COMP%] {\n display: inline;\n font-family: var(--%NS%prism-font-mono, monospace);\n font-size: 12px;\n }\n .json-expandable[_ngcontent-%COMP%] {\n cursor: pointer;\n user-select: none;\n display: inline-flex;\n align-items: baseline;\n gap: 2px;\n }\n .json-expandable[_ngcontent-%COMP%]:hover .json-summary[_ngcontent-%COMP%] {\n opacity: 0.8;\n }\n .json-chevron[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n font-size: 10px;\n width: 10px;\n flex-shrink: 0;\n }\n .json-summary[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n }\n .json-children[_ngcontent-%COMP%] {\n display: block;\n padding-left: 16px;\n border-left: 1px solid var(--%NS%prism-border);\n margin: 2px 0;\n }\n .json-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n flex-wrap: wrap;\n gap: 0;\n padding: 1px 0;\n }\n .json-key[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n }\n .json-index[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n font-style: italic;\n }\n .json-colon[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n }\n .json-brace[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n }\n .json-string[_ngcontent-%COMP%] {\n color: var(--%NS%prism-code-attr);\n }\n .json-number[_ngcontent-%COMP%] {\n color: var(--%NS%prism-warn);\n }\n .json-boolean[_ngcontent-%COMP%] {\n color: var(--%NS%prism-primary);\n }\n .json-null[_ngcontent-%COMP%], \n .json-undefined[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n font-style: italic;\n }"] });
270
270
  }
271
271
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismJsonNodeComponent, [{
272
272
  type: Component,
@@ -1,4 +1,5 @@
1
1
  import type { PanelBadge, PanelDefinition, RuntimeComponent } from '../../../plugin/plugin.types.js';
2
+ import type { A11yScoreResult, A11yThresholds } from '../a11y/a11y.types.js';
2
3
  /**
3
4
  * The live figures the built-in tabs badge themselves with.
4
5
  *
@@ -7,11 +8,16 @@ import type { PanelBadge, PanelDefinition, RuntimeComponent } from '../../../plu
7
8
  * reason the built-in chain could not simply be expressed as
8
9
  * {@link PanelDefinition.badge} callbacks — `a11y` reports a running audit, not
9
10
  * anything the component's meta holds.
11
+ *
12
+ * The thresholds travel with the audit result rather than being baked in here.
13
+ * The navigation marker grades the build-time report against the configured
14
+ * numbers; a tab grading the live audit on its own scale would put an amber
15
+ * icon in the sidebar next to a red badge on the tab for the same component.
10
16
  */
11
17
  export interface PanelBadgeContext {
12
18
  inputCount: number;
13
- a11yScore: number | null;
14
- coverageScore: number | null;
19
+ a11yResult: A11yScoreResult | null;
20
+ a11yThresholds: A11yThresholds;
15
21
  }
16
22
  /**
17
23
  * The badge a panel's tab carries, if any.
@@ -1 +1 @@
1
- {"version":3,"file":"panel-badge.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/panel-host/panel-badge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,iCAAiC,CAAC;AAEzC;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAUD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,gBAAgB,GAAG,IAAI,EAClC,OAAO,EAAE,iBAAiB,GACzB,UAAU,GAAG,IAAI,CA0BnB"}
1
+ {"version":3,"file":"panel-badge.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/panel-host/panel-badge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE7E;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,cAAc,EAAE,cAAc,CAAC;CAChC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,gBAAgB,GAAG,IAAI,EAClC,OAAO,EAAE,iBAAiB,GACzB,UAAU,GAAG,IAAI,CAyBnB"}
@@ -1,10 +1,4 @@
1
- /** Green at 90, amber down to 70, red below — shared by a11y and coverage. */
2
- function gradeScore(score) {
3
- return {
4
- text: String(score),
5
- variant: score >= 90 ? 'ok' : score >= 70 ? 'warn' : 'danger',
6
- };
7
- }
1
+ import { deriveA11ySummary } from '../a11y/a11y-summary.js';
8
2
  /**
9
3
  * The badge a panel's tab carries, if any.
10
4
  *
@@ -31,12 +25,13 @@ export function resolvePanelBadge(panel, component, context) {
31
25
  if (panel.id === 'a11y') {
32
26
  // `=== null` rather than a falsy check: a score of 0 is a real, and the
33
27
  // most urgent, thing to show.
34
- return context.a11yScore === null ? null : gradeScore(context.a11yScore);
35
- }
36
- if (panel.id === 'coverage') {
37
- return context.coverageScore === null
38
- ? null
39
- : gradeScore(context.coverageScore);
28
+ const result = context.a11yResult;
29
+ if (result === null)
30
+ return null;
31
+ return {
32
+ text: String(result.score),
33
+ variant: deriveA11ySummary(result, context.a11yThresholds).variant,
34
+ };
40
35
  }
41
36
  return null;
42
37
  }
@@ -15,8 +15,14 @@ export declare class PrismPanelHostComponent {
15
15
  protected readonly envInjector: EnvironmentInjector;
16
16
  private readonly auditService;
17
17
  private readonly rendererService;
18
- private readonly a11yScore;
19
- private readonly coverageScore;
18
+ private readonly manifest;
19
+ private readonly config;
20
+ /**
21
+ * The configured thresholds, resolved the way the a11y header badge resolves
22
+ * them: the build step's numbers as the base, the app config on top. Both
23
+ * are static for the session, so this is computed once rather than per tab.
24
+ */
25
+ private readonly a11yThresholds;
20
26
  private readonly inputCount;
21
27
  protected panelBadge(panel: PanelDefinition): import("../../../plugin/plugin.types.js").PanelBadge | null;
22
28
  private readonly builtInPanels;
@@ -1 +1 @@
1
- {"version":3,"file":"prism-panel-host.component.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/panel-host/prism-panel-host.component.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,mBAAmB,EAGnB,KAAK,IAAI,EAGV,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAI1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;;AAGvE,KAAK,kBAAkB,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,qBAuLa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAC5D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkC;IACtD,SAAS,CAAC,QAAQ,CAAC,YAAY,oBAA6B;IAC5D,SAAS,CAAC,QAAQ,CAAC,WAAW,sBAA+B;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IACzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAEhE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAExB;IAEF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAK3B;IAEH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAGxB;IAEH,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,eAAe;IAQ3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;IAEhD,SAAS,CAAC,QAAQ,CAAC,SAAS,oDAQzB;IAEH,SAAS,CAAC,QAAQ,CAAC,WAAW;;OAE1B;IAEJ,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAE9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAE7B;IACF,SAAS,CAAC,QAAQ,CAAC,mBAAmB,uDAEpC;;IAsCF,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,mBAAmB;yCAlIhB,uBAAuB;2CAAvB,uBAAuB;CAsJnC"}
1
+ {"version":3,"file":"prism-panel-host.component.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/panel-host/prism-panel-host.component.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,mBAAmB,EAGnB,KAAK,IAAI,EAGV,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAM1E,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,iCAAiC,CAAC;;AAGzC,KAAK,kBAAkB,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,qBAkLa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAC5D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkC;IACtD,SAAS,CAAC,QAAQ,CAAC,YAAY,oBAA6B;IAC5D,SAAS,CAAC,QAAQ,CAAC,WAAW,sBAA+B;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IACzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IACpE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAE9D;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAM5B;IAEH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAGxB;IAEH,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,eAAe;IAQ3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;IAEhD,SAAS,CAAC,QAAQ,CAAC,SAAS,oDAQzB;IAEH,SAAS,CAAC,QAAQ,CAAC,WAAW;;OAE1B;IAEJ,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAE9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAE7B;IACF,SAAS,CAAC,QAAQ,CAAC,mBAAmB,uDAEpC;;IAsCF,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,mBAAmB;yCAtIhB,uBAAuB;2CAAvB,uBAAuB;CA0JnC"}