@ng-prism/core 22.2.0 → 22.3.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 (292) hide show
  1. package/README.md +22 -24
  2. package/builders.json +11 -11
  3. package/dist/app/canvas/canvas-bg.styles.d.ts +1 -1
  4. package/dist/app/canvas/canvas-bg.styles.d.ts.map +1 -1
  5. package/dist/app/canvas/canvas-bg.styles.js +17 -0
  6. package/dist/app/canvas/prism-canvas-bg-pill.component.d.ts.map +1 -1
  7. package/dist/app/canvas/prism-canvas-bg-pill.component.js +3 -18
  8. package/dist/app/canvas/prism-canvas-rulers.component.d.ts +1 -0
  9. package/dist/app/canvas/prism-canvas-rulers.component.d.ts.map +1 -1
  10. package/dist/app/canvas/prism-canvas-rulers.component.js +9 -14
  11. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts +23 -6
  12. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts.map +1 -1
  13. package/dist/app/canvas/prism-canvas-toolbar.component.js +110 -140
  14. package/dist/app/canvas/prism-template-popover.component.d.ts.map +1 -1
  15. package/dist/app/canvas/prism-template-popover.component.js +8 -49
  16. package/dist/app/canvas/viewport-snap.d.ts +12 -0
  17. package/dist/app/canvas/viewport-snap.d.ts.map +1 -0
  18. package/dist/app/canvas/viewport-snap.js +23 -0
  19. package/dist/app/component-head/head-metrics.d.ts.map +1 -1
  20. package/dist/app/component-head/head-metrics.js +2 -2
  21. package/dist/app/component-head/prism-component-head.component.d.ts +1 -1
  22. package/dist/app/component-head/prism-component-head.component.d.ts.map +1 -1
  23. package/dist/app/component-head/prism-component-head.component.js +17 -50
  24. package/dist/app/component-head/prism-head-gauge.component.d.ts.map +1 -1
  25. package/dist/app/component-head/prism-head-gauge.component.js +4 -36
  26. package/dist/app/component-head/prism-head-info.component.d.ts.map +1 -1
  27. package/dist/app/component-head/prism-head-info.component.js +3 -36
  28. package/dist/app/component-head/prism-stat.component.d.ts.map +1 -1
  29. package/dist/app/component-head/prism-stat.component.js +3 -14
  30. package/dist/app/controls/boolean-control.component.d.ts.map +1 -1
  31. package/dist/app/controls/boolean-control.component.js +4 -12
  32. package/dist/app/controls/json-control.component.d.ts.map +1 -1
  33. package/dist/app/controls/json-control.component.js +4 -24
  34. package/dist/app/controls/number-control.component.d.ts.map +1 -1
  35. package/dist/app/controls/number-control.component.js +4 -11
  36. package/dist/app/controls/string-control.component.d.ts.map +1 -1
  37. package/dist/app/controls/string-control.component.js +4 -11
  38. package/dist/app/controls/union-control.component.d.ts.map +1 -1
  39. package/dist/app/controls/union-control.component.js +4 -16
  40. package/dist/app/directives/prism-resizer.directive.d.ts +24 -1
  41. package/dist/app/directives/prism-resizer.directive.d.ts.map +1 -1
  42. package/dist/app/directives/prism-resizer.directive.js +44 -7
  43. package/dist/app/directives/resize-value.d.ts +22 -0
  44. package/dist/app/directives/resize-value.d.ts.map +1 -0
  45. package/dist/app/directives/resize-value.js +23 -0
  46. package/dist/app/discovery-manifest.d.ts.map +1 -1
  47. package/dist/app/discovery-manifest.js +5 -7
  48. package/dist/app/header/prism-header-widget-host.component.d.ts.map +1 -1
  49. package/dist/app/header/prism-header-widget-host.component.js +4 -8
  50. package/dist/app/header/prism-header.component.d.ts.map +1 -1
  51. package/dist/app/header/prism-header.component.js +8 -77
  52. package/dist/app/hmr.d.ts.map +1 -1
  53. package/dist/app/icons/icon-registry.d.ts.map +1 -1
  54. package/dist/app/icons/icon-registry.js +2 -1
  55. package/dist/app/icons/prism-icon.component.d.ts.map +1 -1
  56. package/dist/app/icons/prism-icon.component.js +5 -5
  57. package/dist/app/index.d.ts +3 -3
  58. package/dist/app/index.d.ts.map +1 -1
  59. package/dist/app/index.js +3 -3
  60. package/dist/app/layout-menu/prism-layout-menu.component.d.ts.map +1 -1
  61. package/dist/app/layout-menu/prism-layout-menu.component.js +3 -77
  62. package/dist/app/overview/overview-panel.js +1 -1
  63. package/dist/app/overview/overview-visibility.d.ts.map +1 -1
  64. package/dist/app/overview/prism-overview-cell.component.d.ts.map +1 -1
  65. package/dist/app/overview/prism-overview-cell.component.js +10 -17
  66. package/dist/app/overview/prism-overview.component.d.ts.map +1 -1
  67. package/dist/app/overview/prism-overview.component.js +4 -12
  68. package/dist/app/page-renderer/prism-page-renderer.component.d.ts.map +1 -1
  69. package/dist/app/page-renderer/prism-page-renderer.component.js +4 -17
  70. package/dist/app/panels/a11y/a11y-audit.service.d.ts.map +1 -1
  71. package/dist/app/panels/a11y/a11y-audit.service.js +14 -2
  72. package/dist/app/panels/a11y/a11y-core.plugin.d.ts.map +1 -1
  73. package/dist/app/panels/a11y/a11y-core.plugin.js +1 -1
  74. package/dist/app/panels/a11y/a11y-dom-utils.d.ts.map +1 -1
  75. package/dist/app/panels/a11y/a11y-dom-utils.js +9 -6
  76. package/dist/app/panels/a11y/a11y-header-badge.component.d.ts.map +1 -1
  77. package/dist/app/panels/a11y/a11y-header-badge.component.js +6 -22
  78. package/dist/app/panels/a11y/a11y-keyboard-overlay.component.d.ts.map +1 -1
  79. package/dist/app/panels/a11y/a11y-keyboard-overlay.component.js +6 -25
  80. package/dist/app/panels/a11y/a11y-keyboard.component.d.ts.map +1 -1
  81. package/dist/app/panels/a11y/a11y-keyboard.component.js +5 -36
  82. package/dist/app/panels/a11y/a11y-keyboard.service.d.ts.map +1 -1
  83. package/dist/app/panels/a11y/a11y-keyboard.service.js +2 -2
  84. package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts.map +1 -1
  85. package/dist/app/panels/a11y/a11y-overlay-host.component.js +5 -32
  86. package/dist/app/panels/a11y/a11y-panel-state.service.d.ts.map +1 -1
  87. package/dist/app/panels/a11y/a11y-panel.component.d.ts +1 -1
  88. package/dist/app/panels/a11y/a11y-panel.component.d.ts.map +1 -1
  89. package/dist/app/panels/a11y/a11y-panel.component.js +7 -69
  90. package/dist/app/panels/a11y/a11y-perspective.service.d.ts.map +1 -1
  91. package/dist/app/panels/a11y/a11y-score.component.d.ts.map +1 -1
  92. package/dist/app/panels/a11y/a11y-score.component.js +4 -31
  93. package/dist/app/panels/a11y/a11y-sr-overlay.component.d.ts.map +1 -1
  94. package/dist/app/panels/a11y/a11y-sr-overlay.component.js +8 -28
  95. package/dist/app/panels/a11y/a11y-sr.component.d.ts.map +1 -1
  96. package/dist/app/panels/a11y/a11y-sr.component.js +5 -28
  97. package/dist/app/panels/a11y/a11y-sr.service.d.ts.map +1 -1
  98. package/dist/app/panels/a11y/a11y-sr.service.js +4 -7
  99. package/dist/app/panels/a11y/a11y-summary.d.ts.map +1 -1
  100. package/dist/app/panels/a11y/a11y-summary.js +2 -5
  101. package/dist/app/panels/a11y/a11y-thresholds.d.ts.map +1 -1
  102. package/dist/app/panels/a11y/a11y-thresholds.js +1 -1
  103. package/dist/app/panels/a11y/a11y-tree.component.d.ts.map +1 -1
  104. package/dist/app/panels/a11y/a11y-tree.component.js +9 -46
  105. package/dist/app/panels/a11y/a11y-tree.service.d.ts.map +1 -1
  106. package/dist/app/panels/a11y/a11y-tree.service.js +3 -5
  107. package/dist/app/panels/a11y/a11y-violations.component.d.ts.map +1 -1
  108. package/dist/app/panels/a11y/a11y-violations.component.js +7 -58
  109. package/dist/app/panels/a11y/a11y.types.d.ts.map +1 -1
  110. package/dist/app/panels/builtin-header-widgets.js +2 -2
  111. package/dist/app/panels/builtin-navigation-decorations.d.ts.map +1 -1
  112. package/dist/app/panels/builtin-navigation-decorations.js +2 -2
  113. package/dist/app/panels/builtin-panels.d.ts.map +1 -1
  114. package/dist/app/panels/builtin-panels.js +2 -7
  115. package/dist/app/panels/controls/controls-plugin.js +3 -3
  116. package/dist/app/panels/controls/non-editable-input-types.d.ts.map +1 -1
  117. package/dist/app/panels/controls/non-editable-input-types.js +1 -5
  118. package/dist/app/panels/controls/prism-controls-panel.component.d.ts.map +1 -1
  119. package/dist/app/panels/controls/prism-controls-panel.component.js +5 -95
  120. package/dist/app/panels/events/events-plugin.js +3 -3
  121. package/dist/app/panels/events/prism-events-panel.component.d.ts.map +1 -1
  122. package/dist/app/panels/events/prism-events-panel.component.js +5 -23
  123. package/dist/app/panels/events/prism-json-node.component.d.ts.map +1 -1
  124. package/dist/app/panels/events/prism-json-node.component.js +4 -86
  125. package/dist/app/panels/events/prism-json-node.utils.d.ts.map +1 -1
  126. package/dist/app/panels/panel-host/panel-badge.d.ts.map +1 -1
  127. package/dist/app/panels/panel-host/panel-badge.js +2 -4
  128. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts +1 -1
  129. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts.map +1 -1
  130. package/dist/app/panels/panel-host/prism-panel-host.component.js +12 -67
  131. package/dist/app/provide-prism.d.ts +1 -1
  132. package/dist/app/provide-prism.d.ts.map +1 -1
  133. package/dist/app/provide-prism.js +7 -11
  134. package/dist/app/renderer/known-inputs.d.ts.map +1 -1
  135. package/dist/app/renderer/overlay-resolver.d.ts.map +1 -1
  136. package/dist/app/renderer/overlay-resolver.js +1 -1
  137. package/dist/app/renderer/prism-renderer.component.d.ts +27 -2
  138. package/dist/app/renderer/prism-renderer.component.d.ts.map +1 -1
  139. package/dist/app/renderer/prism-renderer.component.js +94 -76
  140. package/dist/app/renderer/projectable-content.d.ts.map +1 -1
  141. package/dist/app/renderer/projectable-content.js +1 -3
  142. package/dist/app/renderer/snippet-generator.d.ts +1 -1
  143. package/dist/app/renderer/snippet-generator.d.ts.map +1 -1
  144. package/dist/app/renderer/snippet-generator.js +7 -22
  145. package/dist/app/services/navigation-item.types.d.ts +1 -1
  146. package/dist/app/services/navigation-item.types.d.ts.map +1 -1
  147. package/dist/app/services/prism-canvas.service.d.ts +22 -0
  148. package/dist/app/services/prism-canvas.service.d.ts.map +1 -1
  149. package/dist/app/services/prism-canvas.service.js +49 -2
  150. package/dist/app/services/prism-capture.service.d.ts.map +1 -1
  151. package/dist/app/services/prism-capture.service.js +2 -6
  152. package/dist/app/services/prism-event-log.service.d.ts.map +1 -1
  153. package/dist/app/services/prism-event-log.service.js +1 -4
  154. package/dist/app/services/prism-layout.service.d.ts.map +1 -1
  155. package/dist/app/services/prism-layout.service.js +5 -4
  156. package/dist/app/services/prism-manifest.service.d.ts +1 -1
  157. package/dist/app/services/prism-manifest.service.d.ts.map +1 -1
  158. package/dist/app/services/prism-manifest.service.js +1 -1
  159. package/dist/app/services/prism-navigation.service.d.ts +1 -1
  160. package/dist/app/services/prism-navigation.service.d.ts.map +1 -1
  161. package/dist/app/services/prism-navigation.service.js +5 -13
  162. package/dist/app/services/prism-panel.service.d.ts.map +1 -1
  163. package/dist/app/services/prism-panel.service.js +2 -5
  164. package/dist/app/services/prism-persistence.service.d.ts.map +1 -1
  165. package/dist/app/services/prism-persistence.service.js +8 -10
  166. package/dist/app/services/prism-plugin.service.d.ts.map +1 -1
  167. package/dist/app/services/prism-renderer.service.d.ts.map +1 -1
  168. package/dist/app/services/prism-renderer.service.js +5 -9
  169. package/dist/app/services/prism-search.service.d.ts.map +1 -1
  170. package/dist/app/services/prism-search.service.js +1 -2
  171. package/dist/app/services/prism-theme.service.d.ts.map +1 -1
  172. package/dist/app/services/prism-theme.service.js +6 -4
  173. package/dist/app/services/prism-url-state.service.d.ts.map +1 -1
  174. package/dist/app/services/prism-url-state.service.js +3 -9
  175. package/dist/app/services/prism-variant-bg.service.d.ts.map +1 -1
  176. package/dist/app/services/prism-variant-bg.service.js +3 -5
  177. package/dist/app/shared/prism-metric-badge.component.d.ts.map +1 -1
  178. package/dist/app/shared/prism-metric-badge.component.js +4 -17
  179. package/dist/app/shell/prism-shell.component.d.ts.map +1 -1
  180. package/dist/app/shell/prism-shell.component.js +20 -122
  181. package/dist/app/sidebar/navigation-decorations.d.ts.map +1 -1
  182. package/dist/app/sidebar/navigation-decorations.js +1 -1
  183. package/dist/app/sidebar/prism-sidebar.component.d.ts +1 -1
  184. package/dist/app/sidebar/prism-sidebar.component.d.ts.map +1 -1
  185. package/dist/app/sidebar/prism-sidebar.component.js +19 -154
  186. package/dist/app/theme/prism-default-theme.d.ts.map +1 -1
  187. package/dist/app/theme/prism-default-theme.js +5 -5
  188. package/dist/app/tokens/prism-tokens.d.ts.map +1 -1
  189. package/dist/app/tokens/prism-tokens.js +1 -1
  190. package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts.map +1 -1
  191. package/dist/app/variant-ribbon/prism-variant-ribbon.component.js +4 -49
  192. package/dist/app/variant-ribbon/spectrum.d.ts.map +1 -1
  193. package/dist/app/view-tab-bar/next-view-id.d.ts.map +1 -1
  194. package/dist/app/view-tab-bar/next-view-id.js +1 -3
  195. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts.map +1 -1
  196. package/dist/app/view-tab-bar/prism-view-panel-host.component.js +5 -17
  197. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts.map +1 -1
  198. package/dist/app/view-tab-bar/prism-view-tab-bar.component.js +4 -27
  199. package/dist/builder/a11y/a11y-report-reader.d.ts +1 -1
  200. package/dist/builder/a11y/a11y-report-reader.d.ts.map +1 -1
  201. package/dist/builder/a11y/a11y-report-reader.js +7 -7
  202. package/dist/builder/build/index.d.ts.map +1 -1
  203. package/dist/builder/build/index.js +5 -9
  204. package/dist/builder/build/schema.d.ts.map +1 -1
  205. package/dist/builder/config-loader/config-loader.d.ts.map +1 -1
  206. package/dist/builder/config-loader/config-loader.js +4 -5
  207. package/dist/builder/manifest/host-parser.d.ts.map +1 -1
  208. package/dist/builder/manifest/host-parser.js +1 -1
  209. package/dist/builder/manifest/runtime-manifest.generator.d.ts +1 -1
  210. package/dist/builder/manifest/runtime-manifest.generator.d.ts.map +1 -1
  211. package/dist/builder/manifest/runtime-manifest.generator.js +9 -34
  212. package/dist/builder/plugin-runner/plugin-runner.d.ts.map +1 -1
  213. package/dist/builder/plugin-runner/plugin-runner.js +1 -3
  214. package/dist/builder/scanner/ast-utils.d.ts.map +1 -1
  215. package/dist/builder/scanner/ast-utils.js +2 -8
  216. package/dist/builder/scanner/component.scanner.d.ts.map +1 -1
  217. package/dist/builder/scanner/component.scanner.js +15 -22
  218. package/dist/builder/scanner/entry-point-discovery.d.ts.map +1 -1
  219. package/dist/builder/scanner/entry-point-discovery.js +3 -5
  220. package/dist/builder/scanner/entry-point.scanner.d.ts.map +1 -1
  221. package/dist/builder/scanner/entry-point.scanner.js +1 -3
  222. package/dist/builder/scanner/index.d.ts +1 -1
  223. package/dist/builder/scanner/index.d.ts.map +1 -1
  224. package/dist/builder/scanner/input.extractor.d.ts.map +1 -1
  225. package/dist/builder/scanner/input.extractor.js +11 -28
  226. package/dist/builder/scanner/manifest.generator.d.ts.map +1 -1
  227. package/dist/builder/scanner/manifest.generator.js +2 -4
  228. package/dist/builder/scanner/scanner.d.ts.map +1 -1
  229. package/dist/builder/scanner/scanner.js +4 -4
  230. package/dist/builder/serve/index.d.ts.map +1 -1
  231. package/dist/builder/serve/index.js +8 -10
  232. package/dist/builder/serve/schema.d.ts.map +1 -1
  233. package/dist/builder/shared/index.d.ts +1 -1
  234. package/dist/builder/shared/index.d.ts.map +1 -1
  235. package/dist/builder/shared/index.js +1 -1
  236. package/dist/builder/shared/prism-pipeline.d.ts.map +1 -1
  237. package/dist/builder/shared/prism-pipeline.js +18 -25
  238. package/dist/builder/shared/resolve-cache-dir.d.ts.map +1 -1
  239. package/dist/builder/shared/resolve-cache-dir.js +1 -1
  240. package/dist/builder/watcher/index.d.ts +1 -1
  241. package/dist/builder/watcher/index.d.ts.map +1 -1
  242. package/dist/builder/watcher/prism-watcher.d.ts.map +1 -1
  243. package/dist/builder/watcher/prism-watcher.js +12 -10
  244. package/dist/config/index.d.ts +2 -2
  245. package/dist/config/index.d.ts.map +1 -1
  246. package/dist/config/index.js +1 -1
  247. package/dist/decorator/index.d.ts +1 -1
  248. package/dist/decorator/index.d.ts.map +1 -1
  249. package/dist/decorator/showcase.decorator.d.ts.map +1 -1
  250. package/dist/decorator/showcase.types.d.ts.map +1 -1
  251. package/dist/plugin/index.d.ts +4 -4
  252. package/dist/plugin/index.d.ts.map +1 -1
  253. package/dist/plugin/index.js +2 -2
  254. package/dist/plugin/page-helpers.d.ts +1 -1
  255. package/dist/plugin/page-helpers.d.ts.map +1 -1
  256. package/dist/plugin/page-helpers.js +2 -2
  257. package/dist/plugin/page.types.d.ts.map +1 -1
  258. package/dist/plugin/plugin.types.d.ts +1 -1
  259. package/dist/plugin/plugin.types.d.ts.map +1 -1
  260. package/dist/schematics/migrations/v21-13-manifest-cache/index.d.ts.map +1 -1
  261. package/dist/schematics/migrations/v21-13-manifest-cache/index.js +4 -10
  262. package/dist/schematics/migrations/v22-0-cache-dir-rename/index.d.ts.map +1 -1
  263. package/dist/schematics/migrations/v22-0-cache-dir-rename/index.js +4 -8
  264. package/dist/schematics/ng-add/index.d.ts.map +1 -1
  265. package/dist/schematics/ng-add/index.js +122 -56
  266. package/dist/schematics/ng-add/schema.d.ts.map +1 -1
  267. package/dist/schematics/utils/config-ast.d.ts.map +1 -1
  268. package/dist/schematics/utils/config-ast.js +8 -15
  269. package/dist/schematics/utils/tsconfig-paths.d.ts.map +1 -1
  270. package/dist/schematics/utils/tsconfig-paths.js +1 -1
  271. package/dist/shared/canvas-bg.type.d.ts.map +1 -1
  272. package/dist/shared/canvas-bg.type.js +1 -8
  273. package/dist/shared/canvas-layout.type.d.ts.map +1 -1
  274. package/dist/shared/canvas-layout.type.js +1 -4
  275. package/dist/shared/variant-bg.d.ts.map +1 -1
  276. package/dist/shared/viewport.type.d.ts +47 -0
  277. package/dist/shared/viewport.type.d.ts.map +1 -0
  278. package/dist/shared/viewport.type.js +48 -0
  279. package/dist/transformer/cli.js +0 -0
  280. package/dist/transformer/index.d.ts +2 -2
  281. package/dist/transformer/index.d.ts.map +1 -1
  282. package/dist/transformer/index.js +2 -2
  283. package/dist/transformer/showcase-strip.transformer.d.ts.map +1 -1
  284. package/dist/transformer/showcase-strip.transformer.js +6 -15
  285. package/dist/transformer/strip-directory.d.ts.map +1 -1
  286. package/dist/transformer/strip-directory.js +2 -4
  287. package/package.json +4 -1
  288. package/schematics/collection.json +7 -7
  289. package/schematics/migrations.json +12 -12
  290. package/schematics/ng-add/schema.json +22 -22
  291. package/src/builder/build/schema.json +36 -36
  292. package/src/builder/serve/schema.json +37 -37
@@ -1,4 +1,4 @@
1
- import { Component, ChangeDetectionStrategy, input, output, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  function UnionControlComponent_For_2_Template(rf, ctx) { if (rf & 1) {
4
4
  const _r1 = i0.ɵɵgetCurrentView();
@@ -31,22 +31,10 @@ export class UnionControlComponent {
31
31
  } if (rf & 2) {
32
32
  i0.ɵɵadvance();
33
33
  i0.ɵɵrepeater(ctx.options());
34
- } }, styles: [".ctl-pills[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n }\n .ctl-pill[_ngcontent-%COMP%] {\n height: 26px;\n padding: 0 10px;\n font-size: var(--%NS%fs-sm);\n font-weight: 500;\n border: 1px solid var(--%NS%prism-border);\n border-radius: 4px;\n color: var(--%NS%prism-text-muted);\n background: transparent;\n cursor: pointer;\n transition: all var(--%NS%dur-fast);\n font-family: var(--%NS%font-sans);\n }\n .ctl-pill[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text);\n border-color: var(--%NS%prism-border-strong);\n }\n .ctl-pill--active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--%NS%prism-primary) 15%, transparent);\n color: var(--%NS%prism-primary);\n border-color: color-mix(in srgb, var(--%NS%prism-primary) 40%, transparent);\n font-weight: 600;\n }"] });
34
+ } }, styles: [".ctl-pills[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ctl-pill[_ngcontent-%COMP%] {\n height: 26px;\n padding: 0 10px;\n font-family: var(--%NS%font-sans);\n font-size: var(--%NS%fs-sm);\n font-weight: 500;\n color: var(--%NS%prism-text-muted);\n cursor: pointer;\n background: transparent;\n border: 1px solid var(--%NS%prism-border);\n border-radius: 4px;\n transition: all var(--%NS%dur-fast);\n}\n\n.ctl-pill[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text);\n border-color: var(--%NS%prism-border-strong);\n}\n\n.ctl-pill--active[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--%NS%prism-primary);\n background: color-mix(in srgb, var(--%NS%prism-primary) 15%, transparent);\n border-color: color-mix(in srgb, var(--%NS%prism-primary) 40%, transparent);\n}"] });
35
35
  }
36
36
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UnionControlComponent, [{
37
37
  type: Component,
38
- args: [{ selector: 'prism-union-control', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
39
- <div class="ctl-pills" role="group">
40
- @for (option of options(); track option) {
41
- <button
42
- class="ctl-pill"
43
- [class.ctl-pill--active]="option === value()"
44
- (click)="valueChange.emit(option)"
45
- >
46
- {{ option }}
47
- </button>
48
- }
49
- </div>
50
- `, styles: ["\n .ctl-pills {\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n }\n .ctl-pill {\n height: 26px;\n padding: 0 10px;\n font-size: var(--fs-sm);\n font-weight: 500;\n border: 1px solid var(--prism-border);\n border-radius: 4px;\n color: var(--prism-text-muted);\n background: transparent;\n cursor: pointer;\n transition: all var(--dur-fast);\n font-family: var(--font-sans);\n }\n .ctl-pill:hover {\n color: var(--prism-text);\n border-color: var(--prism-border-strong);\n }\n .ctl-pill--active {\n background: color-mix(in srgb, var(--prism-primary) 15%, transparent);\n color: var(--prism-primary);\n border-color: color-mix(in srgb, var(--prism-primary) 40%, transparent);\n font-weight: 600;\n }\n "] }]
38
+ args: [{ selector: 'prism-union-control', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"ctl-pills\"\n role=\"group\">\n @for (option of options(); track option) {\n <button\n class=\"ctl-pill\"\n [class.ctl-pill--active]=\"option === value()\"\n (click)=\"valueChange.emit(option)\">\n {{ option }}\n </button>\n }\n</div>\n", styles: [".ctl-pills {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ctl-pill {\n height: 26px;\n padding: 0 10px;\n font-family: var(--font-sans);\n font-size: var(--fs-sm);\n font-weight: 500;\n color: var(--prism-text-muted);\n cursor: pointer;\n background: transparent;\n border: 1px solid var(--prism-border);\n border-radius: 4px;\n transition: all var(--dur-fast);\n}\n\n.ctl-pill:hover {\n color: var(--prism-text);\n border-color: var(--prism-border-strong);\n}\n\n.ctl-pill--active {\n font-weight: 600;\n color: var(--prism-primary);\n background: color-mix(in srgb, var(--prism-primary) 15%, transparent);\n border-color: color-mix(in srgb, var(--prism-primary) 40%, transparent);\n}\n"] }]
51
39
  }], null, { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], typeName: [{ type: i0.Input, args: [{ isSignal: true, alias: "typeName", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] }); })();
52
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(UnionControlComponent, { className: "UnionControlComponent", filePath: "app/controls/union-control.component.ts", lineNumber: 56 }); })();
40
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(UnionControlComponent, { className: "UnionControlComponent", filePath: "app/controls/union-control.component.ts", lineNumber: 10 }); })();
@@ -4,11 +4,34 @@ export declare class PrismResizerDirective {
4
4
  readonly min: import("@angular/core").InputSignal<number>;
5
5
  readonly max: import("@angular/core").InputSignal<number>;
6
6
  readonly value: import("@angular/core").InputSignal<number>;
7
+ /**
8
+ * Pointer travel to value, as a multiplier.
9
+ *
10
+ * `1` (the default) is a panel or sidebar edge. The viewport grips pass
11
+ * `2 / zoom` and `-2 / zoom`: their box is centred, so holding one edge
12
+ * changes the width at both (the `2`), and the stage scales that box by
13
+ * `--zoom`, so the multiplier has to divide it back out to keep the grip
14
+ * under the cursor. Existing call sites do not pass it and are unaffected.
15
+ */
16
+ readonly scale: import("@angular/core").InputSignal<number>;
7
17
  readonly valueChange: import("@angular/core").OutputEmitterRef<number>;
8
18
  private readonly el;
19
+ /** How far one arrow key moves the value. */
20
+ private static readonly STEP;
9
21
  protected onMouseDown(e: MouseEvent): void;
22
+ /**
23
+ * Keyboard direction is deliberately independent of `scale`.
24
+ *
25
+ * `scale` inverts the *pointer* for a grip on the far edge of a centred box,
26
+ * and carrying that inversion into the keyboard was wrong: two separators
27
+ * that expose the same `aria-valuenow` answered the same key in opposite
28
+ * directions, so a screen-reader user heard the announced value travel one
29
+ * way on one edge and the other way on the other. WAI-ARIA's window-splitter
30
+ * pattern has ArrowRight and ArrowUp increase the value, whichever edge the
31
+ * separator sits on, and the value here is the width rather than a position.
32
+ */
10
33
  protected onKeyDown(e: KeyboardEvent): void;
11
34
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismResizerDirective, never>;
12
- static ɵdir: i0.ɵɵDirectiveDeclaration<PrismResizerDirective, "[prismResizer]", never, { "axis": { "alias": "axis"; "required": true; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
35
+ static ɵdir: i0.ɵɵDirectiveDeclaration<PrismResizerDirective, "[prismResizer]", never, { "axis": { "alias": "axis"; "required": true; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "scale": { "alias": "scale"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
13
36
  }
14
37
  //# sourceMappingURL=prism-resizer.directive.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-resizer.directive.d.ts","sourceRoot":"","sources":["../../../src/app/directives/prism-resizer.directive.ts"],"names":[],"mappings":";AAEA,qBAYa,qBAAqB;IAChC,QAAQ,CAAC,IAAI,iDAA+B;IAC5C,QAAQ,CAAC,GAAG,8CAAc;IAC1B,QAAQ,CAAC,GAAG,8CAAc;IAC1B,QAAQ,CAAC,KAAK,8CAAY;IAC1B,QAAQ,CAAC,WAAW,mDAAoB;IAExC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAmC;IAEtD,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI;IAwB1C,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;yCAjChC,qBAAqB;2CAArB,qBAAqB;CAmDjC"}
1
+ {"version":3,"file":"prism-resizer.directive.d.ts","sourceRoot":"","sources":["../../../src/app/directives/prism-resizer.directive.ts"],"names":[],"mappings":";AAGA,qBAYa,qBAAqB;IAC9B,QAAQ,CAAC,IAAI,iDAA+B;IAC5C,QAAQ,CAAC,GAAG,8CAAc;IAC1B,QAAQ,CAAC,GAAG,8CAAc;IAC1B,QAAQ,CAAC,KAAK,8CAAY;IAE1B;;;;;;;;OAQG;IACH,QAAQ,CAAC,KAAK,8CAAY;IAE1B,QAAQ,CAAC,WAAW,mDAAoB;IAExC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAmC;IAEtD,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAM;IAElC,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI;IA6B1C;;;;;;;;;;OAUG;IACH,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;yCAhElC,qBAAqB;2CAArB,qBAAqB;CAsFjC"}
@@ -1,4 +1,5 @@
1
1
  import { Directive, ElementRef, inject, input, output } from '@angular/core';
2
+ import { resizeValue } from './resize-value.js';
2
3
  import * as i0 from "@angular/core";
3
4
  export class PrismResizerDirective {
4
5
  axis = input.required(/* @ts-ignore */
@@ -9,17 +10,36 @@ export class PrismResizerDirective {
9
10
  ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
10
11
  value = input(0, /* @ts-ignore */
11
12
  ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
13
+ /**
14
+ * Pointer travel to value, as a multiplier.
15
+ *
16
+ * `1` (the default) is a panel or sidebar edge. The viewport grips pass
17
+ * `2 / zoom` and `-2 / zoom`: their box is centred, so holding one edge
18
+ * changes the width at both (the `2`), and the stage scales that box by
19
+ * `--zoom`, so the multiplier has to divide it back out to keep the grip
20
+ * under the cursor. Existing call sites do not pass it and are unaffected.
21
+ */
22
+ scale = input(1, /* @ts-ignore */
23
+ ...(ngDevMode ? [{ debugName: "scale" }] : /* istanbul ignore next */ []));
12
24
  valueChange = output();
13
25
  el = inject((ElementRef));
26
+ /** How far one arrow key moves the value. */
27
+ static STEP = 10;
14
28
  onMouseDown(e) {
29
+ // Primary button only. Without this a right-click arms the document-level
30
+ // listeners below, the context menu takes the pointer so the matching
31
+ // mouseup never arrives, and the drag stays live afterwards — the value
32
+ // then follows the cursor with no button held. `preventDefault` does not
33
+ // suppress `contextmenu`, so the guard has to be here.
34
+ if (e.button !== 0)
35
+ return;
15
36
  e.preventDefault();
16
37
  const startPos = this.axis() === 'x' ? e.clientX : e.clientY;
17
38
  const startVal = this.value();
18
39
  this.el.nativeElement.classList.add('active');
19
40
  const onMove = (ev) => {
20
41
  const delta = this.axis() === 'x' ? ev.clientX - startPos : startPos - ev.clientY;
21
- const next = Math.max(this.min(), Math.min(this.max(), startVal + delta));
22
- this.valueChange.emit(next);
42
+ this.valueChange.emit(resizeValue(startVal, delta, this.scale(), this.min(), this.max()));
23
43
  };
24
44
  const onUp = () => {
25
45
  this.el.nativeElement.classList.remove('active');
@@ -29,8 +49,19 @@ export class PrismResizerDirective {
29
49
  document.addEventListener('mousemove', onMove);
30
50
  document.addEventListener('mouseup', onUp);
31
51
  }
52
+ /**
53
+ * Keyboard direction is deliberately independent of `scale`.
54
+ *
55
+ * `scale` inverts the *pointer* for a grip on the far edge of a centred box,
56
+ * and carrying that inversion into the keyboard was wrong: two separators
57
+ * that expose the same `aria-valuenow` answered the same key in opposite
58
+ * directions, so a screen-reader user heard the announced value travel one
59
+ * way on one edge and the other way on the other. WAI-ARIA's window-splitter
60
+ * pattern has ArrowRight and ArrowUp increase the value, whichever edge the
61
+ * separator sits on, and the value here is the width rather than a position.
62
+ */
32
63
  onKeyDown(e) {
33
- const step = 10;
64
+ const step = PrismResizerDirective.STEP;
34
65
  const current = this.value();
35
66
  let next = null;
36
67
  if (this.axis() === 'x') {
@@ -45,6 +76,12 @@ export class PrismResizerDirective {
45
76
  if (e.key === 'ArrowDown')
46
77
  next = current - step;
47
78
  }
79
+ // Required of a focusable separator by the same pattern, and the only way
80
+ // to reach either end without holding an arrow key down.
81
+ if (e.key === 'Home')
82
+ next = this.min();
83
+ if (e.key === 'End')
84
+ next = this.max();
48
85
  if (next !== null) {
49
86
  e.preventDefault();
50
87
  this.valueChange.emit(Math.max(this.min(), Math.min(this.max(), next)));
@@ -56,7 +93,7 @@ export class PrismResizerDirective {
56
93
  } if (rf & 2) {
57
94
  i0.ɵɵattribute("role", "separator")("aria-orientation", ctx.axis() === "x" ? "vertical" : "horizontal")("tabindex", "0");
58
95
  i0.ɵɵstyleProp("cursor", ctx.axis() === "x" ? "col-resize" : "row-resize");
59
- } }, inputs: { axis: [1, "axis"], min: [1, "min"], max: [1, "max"], value: [1, "value"] }, outputs: { valueChange: "valueChange" } });
96
+ } }, inputs: { axis: [1, "axis"], min: [1, "min"], max: [1, "max"], value: [1, "value"], scale: [1, "scale"] }, outputs: { valueChange: "valueChange" } });
60
97
  }
61
98
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismResizerDirective, [{
62
99
  type: Directive,
@@ -69,7 +106,7 @@ export class PrismResizerDirective {
69
106
  '[attr.aria-orientation]': 'axis() === "x" ? "vertical" : "horizontal"',
70
107
  '(mousedown)': 'onMouseDown($event)',
71
108
  '(keydown)': 'onKeyDown($event)',
72
- '[attr.tabindex]': '"0"',
73
- },
109
+ '[attr.tabindex]': '"0"'
110
+ }
74
111
  }]
75
- }], null, { axis: [{ type: i0.Input, args: [{ isSignal: true, alias: "axis", required: true }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] }); })();
112
+ }], null, { axis: [{ type: i0.Input, args: [{ isSignal: true, alias: "axis", required: true }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], scale: [{ type: i0.Input, args: [{ isSignal: true, alias: "scale", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] }); })();
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The arithmetic behind `prismResizer`, kept out of the directive.
3
+ *
4
+ * Not for tidiness: a directive whose inputs are `input()` signals has to be
5
+ * rendered inside a host component to be exercised, and this package's specs
6
+ * run under jsdom against SWC-compiled sources, where JIT cannot instantiate
7
+ * one. Extracted, the maths is ordinary and testable — the same reason
8
+ * `known-inputs.ts` and `overlay-resolver.ts` sit beside their components.
9
+ */
10
+ /**
11
+ * Where a drag lands.
12
+ *
13
+ * `scale` maps pointer movement onto the value. `1` is a panel edge, where a
14
+ * pixel of travel is a pixel of size. The viewport grips pass `2 / zoom` and
15
+ * `-2 / zoom`: the centred box contributes the `2`, since holding one edge
16
+ * changes the width at both, and the stage's `transform: scale(var(--zoom))`
17
+ * contributes the division, since a pointer moving `dx` across the *painted*
18
+ * box has to change the CSS width by `2·dx / zoom` to keep the grip under the
19
+ * cursor — the sign says which edge is being held.
20
+ */
21
+ export declare function resizeValue(startValue: number, delta: number, scale: number, min: number, max: number): number;
22
+ //# sourceMappingURL=resize-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize-value.d.ts","sourceRoot":"","sources":["../../../src/app/directives/resize-value.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9G"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The arithmetic behind `prismResizer`, kept out of the directive.
3
+ *
4
+ * Not for tidiness: a directive whose inputs are `input()` signals has to be
5
+ * rendered inside a host component to be exercised, and this package's specs
6
+ * run under jsdom against SWC-compiled sources, where JIT cannot instantiate
7
+ * one. Extracted, the maths is ordinary and testable — the same reason
8
+ * `known-inputs.ts` and `overlay-resolver.ts` sit beside their components.
9
+ */
10
+ /**
11
+ * Where a drag lands.
12
+ *
13
+ * `scale` maps pointer movement onto the value. `1` is a panel edge, where a
14
+ * pixel of travel is a pixel of size. The viewport grips pass `2 / zoom` and
15
+ * `-2 / zoom`: the centred box contributes the `2`, since holding one edge
16
+ * changes the width at both, and the stage's `transform: scale(var(--zoom))`
17
+ * contributes the division, since a pointer moving `dx` across the *painted*
18
+ * box has to change the CSS width by `2·dx / zoom` to keep the grip under the
19
+ * cursor — the sign says which edge is being held.
20
+ */
21
+ export function resizeValue(startValue, delta, scale, min, max) {
22
+ return Math.max(min, Math.min(max, startValue + delta * scale));
23
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"discovery-manifest.d.ts","sourceRoot":"","sources":["../../src/app/discovery-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EAEjB,eAAe,EAChB,MAAM,2BAA2B,CAAC;AAoDnC,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACxC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAOrC;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,GACxB,iBAAiB,CAsCnB"}
1
+ {"version":3,"file":"discovery-manifest.d.ts","sourceRoot":"","sources":["../../src/app/discovery-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,iBAAiB,EAAoB,eAAe,EAAE,MAAM,2BAA2B,CAAC;AA2D1H,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAM/G;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,iBAAiB,CAsCnF"}
@@ -80,27 +80,25 @@ export function buildDiscoveryManifest(manifest) {
80
80
  ? declared.map((variant, index) => {
81
81
  const meta = serializableMeta(variant.meta);
82
82
  const bg = resolveVariantBg(showcaseConfig, index);
83
- return meta
84
- ? { name: variant.name, index, bg, meta }
85
- : { name: variant.name, index, bg };
83
+ return meta ? { name: variant.name, index, bg, meta } : { name: variant.name, index, bg };
86
84
  })
87
85
  : [
88
86
  {
89
87
  name: 'Default',
90
88
  index: 0,
91
- bg: resolveVariantBg(showcaseConfig, 0),
92
- },
89
+ bg: resolveVariantBg(showcaseConfig, 0)
90
+ }
93
91
  ];
94
92
  const meta = serializableMeta(showcaseConfig.meta);
95
93
  const discovered = {
96
94
  className,
97
95
  title: showcaseConfig.title,
98
- variants,
96
+ variants
99
97
  };
100
98
  if (meta)
101
99
  discovered.meta = meta;
102
100
  return discovered;
103
101
  }),
104
- pages: (manifest.pages ?? []).map((page) => ({ title: page.title })),
102
+ pages: (manifest.pages ?? []).map((page) => ({ title: page.title }))
105
103
  };
106
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prism-header-widget-host.component.d.ts","sourceRoot":"","sources":["../../../src/app/header/prism-header-widget-host.component.ts"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,IAAI,EACV,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;;AAI3E,qBAca,8BAA8B;IACzC,QAAQ,CAAC,MAAM,8DAA4C;IAE3D,SAAS,CAAC,QAAQ,CAAC,QAAQ,+DAAsC;;yCAHtD,8BAA8B;2CAA9B,8BAA8B;CA8B1C"}
1
+ {"version":3,"file":"prism-header-widget-host.component.d.ts","sourceRoot":"","sources":["../../../src/app/header/prism-header-widget-host.component.ts"],"names":[],"mappings":"AACA,OAAO,EAA6D,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AACrG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;;AAI3E,qBAQa,8BAA8B;IACvC,QAAQ,CAAC,MAAM,8DAA4C;IAE3D,SAAS,CAAC,QAAQ,CAAC,QAAQ,+DAAsC;;yCAHxD,8BAA8B;2CAA9B,8BAA8B;CAgC1C"}
@@ -1,5 +1,5 @@
1
1
  import { NgComponentOutlet } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, effect, input, signal, } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, effect, input, signal } from '@angular/core';
3
3
  import * as i0 from "@angular/core";
4
4
  function PrismHeaderWidgetHostComponent_Conditional_0_ng_container_0_Template(rf, ctx) { if (rf & 1) {
5
5
  i0.ɵɵelementContainer(0);
@@ -46,14 +46,10 @@ export class PrismHeaderWidgetHostComponent {
46
46
  } if (rf & 2) {
47
47
  let tmp_0_0;
48
48
  i0.ɵɵconditional((tmp_0_0 = ctx.resolved()) ? 0 : -1, tmp_0_0);
49
- } }, dependencies: [NgComponentOutlet], styles: ["[_nghost-%COMP%] { display: contents; }"] });
49
+ } }, dependencies: [NgComponentOutlet], styles: ["[_nghost-%COMP%] {\n display: contents;\n}"] });
50
50
  }
51
51
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismHeaderWidgetHostComponent, [{
52
52
  type: Component,
53
- args: [{ selector: 'prism-header-widget-host', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgComponentOutlet], template: `
54
- @if (resolved(); as comp) {
55
- <ng-container *ngComponentOutlet="comp" />
56
- }
57
- `, styles: ["\n :host { display: contents; }\n "] }]
53
+ args: [{ selector: 'prism-header-widget-host', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgComponentOutlet], template: "@if (resolved(); as comp) {\n <ng-container *ngComponentOutlet=\"comp\" />\n}\n", styles: [":host {\n display: contents;\n}\n"] }]
58
54
  }], () => [], { widget: [{ type: i0.Input, args: [{ isSignal: true, alias: "widget", required: true }] }] }); })();
59
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismHeaderWidgetHostComponent, { className: "PrismHeaderWidgetHostComponent", filePath: "app/header/prism-header-widget-host.component.ts", lineNumber: 28 }); })();
55
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismHeaderWidgetHostComponent, { className: "PrismHeaderWidgetHostComponent", filePath: "app/header/prism-header-widget-host.component.ts", lineNumber: 15 }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"prism-header.component.d.ts","sourceRoot":"","sources":["../../../src/app/header/prism-header.component.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;;AAGvE,qBA2Na,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAC5D,SAAS,CAAC,QAAQ,CAAC,aAAa,qBAA8B;IAC9D,SAAS,CAAC,QAAQ,CAAC,YAAY,oBAA6B;IAE5D,SAAS,CAAC,QAAQ,CAAC,YAAY,kGAK7B;IAEF,SAAS,CAAC,QAAQ,CAAC,UAAU,kGAK3B;IAEF,SAAS,CAAC,QAAQ,CAAC,OAAO,gDAKvB;IAEH,SAAS,CAAC,QAAQ,CAAC,KAAK,yCAAmD;IAC3E,SAAS,CAAC,QAAQ,CAAC,QAAQ,gDAAgD;IAE3E,SAAS,CAAC,QAAQ,CAAC,cAAc,gDAO9B;IAGH,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;IAO7C,SAAS,CAAC,aAAa,IAAI,IAAI;yCA/CpB,oBAAoB;2CAApB,oBAAoB;CAkDhC"}
1
+ {"version":3,"file":"prism-header.component.d.ts","sourceRoot":"","sources":["../../../src/app/header/prism-header.component.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;;AAIvE,qBAQa,oBAAoB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAC5D,SAAS,CAAC,QAAQ,CAAC,aAAa,qBAA8B;IAC9D,SAAS,CAAC,QAAQ,CAAC,YAAY,oBAA6B;IAE5D,SAAS,CAAC,QAAQ,CAAC,YAAY,kGAE7B;IAEF,SAAS,CAAC,QAAQ,CAAC,UAAU,kGAI3B;IAEF,SAAS,CAAC,QAAQ,CAAC,OAAO,gDAOvB;IAEH,SAAS,CAAC,QAAQ,CAAC,KAAK,yCAAmD;IAC3E,SAAS,CAAC,QAAQ,CAAC,QAAQ,gDAAgD;IAE3E,SAAS,CAAC,QAAQ,CAAC,cAAc,gDAS9B;IAGH,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;IAO7C,SAAS,CAAC,aAAa,IAAI,IAAI;yCA/CtB,oBAAoB;2CAApB,oBAAoB;CAkDhC"}
@@ -1,11 +1,11 @@
1
- import { Component, computed, inject, ChangeDetectionStrategy, HostListener, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, computed, HostListener, inject } from '@angular/core';
2
2
  import { PrismIconComponent } from '../icons/prism-icon.component.js';
3
3
  import { PrismLayoutMenuComponent } from '../layout-menu/prism-layout-menu.component.js';
4
- import { PRISM_CONFIG } from '../tokens/prism-tokens.js';
5
4
  import { BUILTIN_HEADER_WIDGETS } from '../panels/builtin-header-widgets.js';
6
5
  import { PrismPluginService } from '../services/prism-plugin.service.js';
7
6
  import { PrismSearchService } from '../services/prism-search.service.js';
8
7
  import { PrismThemeService } from '../services/prism-theme.service.js';
8
+ import { PRISM_CONFIG } from '../tokens/prism-tokens.js';
9
9
  import { PrismHeaderWidgetHostComponent } from './prism-header-widget-host.component.js';
10
10
  import * as i0 from "@angular/core";
11
11
  const _forTrack0 = ($index, $item) => $item.id;
@@ -74,22 +74,16 @@ export class PrismHeaderComponent {
74
74
  pluginService = inject(PrismPluginService);
75
75
  searchService = inject(PrismSearchService);
76
76
  themeService = inject(PrismThemeService);
77
- widgetsStart = computed(() => [
78
- ...BUILTIN_HEADER_WIDGETS.filter((w) => w.placement === 'start'),
79
- ...this.pluginService.headerWidgetsStart(),
80
- ].sort((a, b) => (a.order ?? 0) - (b.order ?? 0)), /* @ts-ignore */
77
+ widgetsStart = computed(() => [...BUILTIN_HEADER_WIDGETS.filter((w) => w.placement === 'start'), ...this.pluginService.headerWidgetsStart()].sort((a, b) => (a.order ?? 0) - (b.order ?? 0)), /* @ts-ignore */
81
78
  ...(ngDevMode ? [{ debugName: "widgetsStart" }] : /* istanbul ignore next */ []));
82
- widgetsEnd = computed(() => [
83
- ...BUILTIN_HEADER_WIDGETS.filter((w) => (w.placement ?? 'end') === 'end'),
84
- ...this.pluginService.headerWidgetsEnd(),
85
- ].sort((a, b) => (a.order ?? 0) - (b.order ?? 0)), /* @ts-ignore */
79
+ widgetsEnd = computed(() => [...BUILTIN_HEADER_WIDGETS.filter((w) => (w.placement ?? 'end') === 'end'), ...this.pluginService.headerWidgetsEnd()].sort((a, b) => (a.order ?? 0) - (b.order ?? 0)), /* @ts-ignore */
86
80
  ...(ngDevMode ? [{ debugName: "widgetsEnd" }] : /* istanbul ignore next */ []));
87
81
  logoUrl = computed(() => {
88
82
  const logo = this.config.logo;
89
83
  if (!logo)
90
84
  return null;
91
85
  const isDark = this.themeService.isDark();
92
- return (isDark ? logo.dark ?? logo.light : logo.light ?? logo.dark) ?? null;
86
+ return (isDark ? (logo.dark ?? logo.light) : (logo.light ?? logo.dark)) ?? null;
93
87
  }, /* @ts-ignore */
94
88
  ...(ngDevMode ? [{ debugName: "logoUrl" }] : /* istanbul ignore next */ []));
95
89
  title = computed(() => this.config.title ?? 'ng-prism', /* @ts-ignore */
@@ -156,76 +150,13 @@ export class PrismHeaderComponent {
156
150
  i0.ɵɵattribute("aria-label", ctx.themeService.isDark() ? "Switch to light mode" : "Switch to dark mode")("aria-pressed", ctx.themeService.isDark());
157
151
  i0.ɵɵadvance();
158
152
  i0.ɵɵconditional(ctx.themeService.isDark() ? 14 : 15);
159
- } }, dependencies: [PrismIconComponent,
160
- PrismLayoutMenuComponent,
161
- PrismHeaderWidgetHostComponent], styles: [".prism-header[_ngcontent-%COMP%] {\n height: var(--%NS%band-header);\n display: grid;\n grid-template-columns: minmax(min-content, var(--%NS%sw, 264px)) 1fr auto;\n align-items: center;\n padding: 0 14px 0 0;\n background: var(--%NS%prism-bg);\n border-bottom: 1px solid var(--%NS%prism-border);\n }\n\n .prism-header__brand[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 0 16px;\n cursor: pointer;\n white-space: nowrap;\n }\n\n .prism-header__logo-default[_ngcontent-%COMP%] {\n width: 26px;\n height: 26px;\n flex: 0 0 26px;\n color: var(--%NS%prism-primary);\n filter: drop-shadow(0 0 8px var(--%NS%prism-glow-strong));\n }\n .prism-header__logo-default[_ngcontent-%COMP%] img[_ngcontent-%COMP%] { width: 30px; }\n\n .prism-header__logo-img[_ngcontent-%COMP%] {\n height: 26px;\n width: auto;\n object-fit: contain;\n }\n\n .prism-header__brand-text[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n line-height: 1.1;\n }\n\n .prism-header__brand-name[_ngcontent-%COMP%] {\n font-weight: 700;\n font-size: var(--%NS%fs-xl);\n letter-spacing: -0.01em;\n background: linear-gradient(90deg, var(--%NS%prism-primary), var(--%NS%prism-accent) 60%, var(--%NS%prism-primary-to));\n -webkit-background-clip: text;\n background-clip: text;\n color: transparent;\n }\n\n .prism-header__brand-sub[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-xs);\n color: var(--%NS%prism-text-ghost);\n }\n\n .prism-header__cmdbar[_ngcontent-%COMP%] {\n max-width: 540px;\n width: 100%;\n justify-self: center;\n display: flex;\n align-items: center;\n gap: 10px;\n height: 32px;\n padding: 0 12px;\n background: var(--%NS%prism-input-bg);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 8px;\n color: var(--%NS%prism-text-muted);\n font-size: var(--%NS%fs-lg);\n cursor: pointer;\n transition: border-color var(--%NS%dur-fast), background var(--%NS%dur-fast);\n }\n .prism-header__cmdbar[_ngcontent-%COMP%]:hover {\n border-color: var(--%NS%prism-border-strong);\n color: var(--%NS%prism-text-2);\n }\n\n .prism-header__cmdbar-text[_ngcontent-%COMP%] {\n flex: 1;\n text-align: left;\n }\n\n .prism-header__cmdbar-shortcut[_ngcontent-%COMP%] {\n display: flex;\n gap: 3px;\n }\n .prism-header__cmdbar-shortcut[_ngcontent-%COMP%] kbd[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: 10.5px;\n padding: 1px 5px;\n border-radius: 4px;\n background: var(--%NS%prism-input-bg);\n border: 1px solid var(--%NS%prism-border);\n color: var(--%NS%prism-text-muted);\n }\n\n .prism-header__build-pill[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-xs);\n color: var(--%NS%prism-text-ghost);\n background: var(--%NS%prism-input-bg);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 9999px;\n padding: 2px 10px;\n white-space: nowrap;\n line-height: 1.4;\n }\n\n .prism-header__actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 6px;\n }\n\n .prism-header__widgets[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n }\n .prism-header__widgets--start[_ngcontent-%COMP%] {\n padding-left: 4px;\n justify-content: flex-start;\n }\n\n .prism-header__icon-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: grid;\n place-items: center;\n border-radius: 8px;\n color: var(--%NS%prism-text-muted);\n background: none;\n border: none;\n cursor: pointer;\n position: relative;\n transition: all var(--%NS%dur-fast);\n }\n .prism-header__icon-btn[_ngcontent-%COMP%]:hover {\n background: var(--%NS%prism-input-bg);\n color: var(--%NS%prism-text);\n }\n\n [_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--%NS%prism-primary);\n outline-offset: 2px;\n }"] });
153
+ } }, dependencies: [PrismIconComponent, PrismLayoutMenuComponent, PrismHeaderWidgetHostComponent], styles: [".prism-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: minmax(min-content, var(--%NS%sw, 264px)) 1fr auto;\n align-items: center;\n height: var(--%NS%band-header);\n padding: 0 14px 0 0;\n background: var(--%NS%prism-bg);\n border-bottom: 1px solid var(--%NS%prism-border);\n}\n\n.prism-header__brand[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n align-items: center;\n padding: 0 16px;\n white-space: nowrap;\n cursor: pointer;\n}\n\n.prism-header__logo-default[_ngcontent-%COMP%] {\n flex: 0 0 26px;\n width: 26px;\n height: 26px;\n color: var(--%NS%prism-primary);\n filter: drop-shadow(0 0 8px var(--%NS%prism-glow-strong));\n}\n\n.prism-header__logo-default[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 30px;\n}\n\n.prism-header__logo-img[_ngcontent-%COMP%] {\n width: auto;\n height: 26px;\n object-fit: contain;\n}\n\n.prism-header__brand-text[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n line-height: 1.1;\n}\n\n.prism-header__brand-name[_ngcontent-%COMP%] {\n font-size: var(--%NS%fs-xl);\n font-weight: 700;\n color: transparent;\n letter-spacing: -0.01em;\n background: linear-gradient(90deg, var(--%NS%prism-primary), var(--%NS%prism-accent) 60%, var(--%NS%prism-primary-to));\n background-clip: text;\n}\n\n.prism-header__brand-sub[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-xs);\n color: var(--%NS%prism-text-ghost);\n}\n\n.prism-header__cmdbar[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n align-items: center;\n justify-self: center;\n width: 100%;\n max-width: 540px;\n height: 32px;\n padding: 0 12px;\n font-size: var(--%NS%fs-lg);\n color: var(--%NS%prism-text-muted);\n cursor: pointer;\n background: var(--%NS%prism-input-bg);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 8px;\n transition:\n border-color var(--%NS%dur-fast),\n background var(--%NS%dur-fast);\n}\n\n.prism-header__cmdbar[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text-2);\n border-color: var(--%NS%prism-border-strong);\n}\n\n.prism-header__cmdbar-text[_ngcontent-%COMP%] {\n flex: 1;\n text-align: left;\n}\n\n.prism-header__cmdbar-shortcut[_ngcontent-%COMP%] {\n display: flex;\n gap: 3px;\n}\n\n.prism-header__cmdbar-shortcut[_ngcontent-%COMP%] kbd[_ngcontent-%COMP%] {\n padding: 1px 5px;\n font-family: var(--%NS%font-mono);\n font-size: 10.5px;\n color: var(--%NS%prism-text-muted);\n background: var(--%NS%prism-input-bg);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 4px;\n}\n\n.prism-header__build-pill[_ngcontent-%COMP%] {\n padding: 2px 10px;\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-xs);\n line-height: 1.4;\n color: var(--%NS%prism-text-ghost);\n white-space: nowrap;\n background: var(--%NS%prism-input-bg);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 9999px;\n}\n\n.prism-header__actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n align-items: center;\n justify-content: flex-end;\n}\n\n.prism-header__widgets[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n min-width: 0;\n}\n\n.prism-header__widgets--start[_ngcontent-%COMP%] {\n justify-content: flex-start;\n padding-left: 4px;\n}\n\n.prism-header__icon-btn[_ngcontent-%COMP%] {\n position: relative;\n display: grid;\n place-items: center;\n width: 32px;\n height: 32px;\n color: var(--%NS%prism-text-muted);\n cursor: pointer;\n background: none;\n border: none;\n border-radius: 8px;\n transition: all var(--%NS%dur-fast);\n}\n\n.prism-header__icon-btn[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text);\n background: var(--%NS%prism-input-bg);\n}\n\n[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--%NS%prism-primary);\n outline-offset: 2px;\n}"] });
162
154
  }
163
155
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismHeaderComponent, [{
164
156
  type: Component,
165
- args: [{ selector: 'prism-header', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
166
- PrismIconComponent,
167
- PrismLayoutMenuComponent,
168
- PrismHeaderWidgetHostComponent,
169
- ], template: `
170
- <header class="prism-header">
171
- <div class="prism-header__brand">
172
- @if (logoUrl()) {
173
- <img class="prism-header__logo-img" [src]="logoUrl()" [alt]="title()" />
174
- } @else {
175
- <div class="prism-header__logo-default">
176
- <!-- @formatter:off -->
177
- <!-- prettier-ignore -->
178
- <img alt="ng prism logo" src="data:image/png;base64,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" />
179
- <!-- @formatter:on -->
180
- </div>
181
- }
182
- <div class="prism-header__brand-text">
183
- <span class="prism-header__brand-name">{{ title() }}</span>
184
- @if (subtitle()) {
185
- <span class="prism-header__brand-sub">{{ subtitle() }}</span>
186
- }
187
- </div>
188
- </div>
189
- @if (widgetsStart().length) {
190
- <div class="prism-header__widgets prism-header__widgets--start">
191
- @for (w of widgetsStart(); track w.id) {
192
- <prism-header-widget-host [widget]="w" />
193
- }
194
- </div>
195
- }
196
- <div class="prism-header__actions">
197
- @for (w of widgetsEnd(); track w.id) {
198
- <prism-header-widget-host [widget]="w" />
199
- } @if (buildInfoLabel()) {
200
- <span class="prism-header__build-pill">{{ buildInfoLabel() }}</span>
201
- }
202
- <button
203
- class="prism-header__icon-btn"
204
- (click)="themeService.toggle()"
205
- [title]="
206
- themeService.isDark()
207
- ? 'Switch to light mode'
208
- : 'Switch to dark mode'
209
- "
210
- [attr.aria-label]="
211
- themeService.isDark()
212
- ? 'Switch to light mode'
213
- : 'Switch to dark mode'
214
- "
215
- [attr.aria-pressed]="themeService.isDark()"
216
- >
217
- @if (themeService.isDark()) {
218
- <prism-icon name="sun" [size]="16" />
219
- } @else {
220
- <prism-icon name="moon" [size]="16" />
221
- }
222
- </button>
223
- <prism-layout-menu />
224
- </div>
225
- </header>
226
- `, styles: ["\n .prism-header {\n height: var(--band-header);\n display: grid;\n grid-template-columns: minmax(min-content, var(--sw, 264px)) 1fr auto;\n align-items: center;\n padding: 0 14px 0 0;\n background: var(--prism-bg);\n border-bottom: 1px solid var(--prism-border);\n }\n\n .prism-header__brand {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 0 16px;\n cursor: pointer;\n white-space: nowrap;\n }\n\n .prism-header__logo-default {\n width: 26px;\n height: 26px;\n flex: 0 0 26px;\n color: var(--prism-primary);\n filter: drop-shadow(0 0 8px var(--prism-glow-strong));\n }\n .prism-header__logo-default img { width: 30px; }\n\n .prism-header__logo-img {\n height: 26px;\n width: auto;\n object-fit: contain;\n }\n\n .prism-header__brand-text {\n display: flex;\n flex-direction: column;\n line-height: 1.1;\n }\n\n .prism-header__brand-name {\n font-weight: 700;\n font-size: var(--fs-xl);\n letter-spacing: -0.01em;\n background: linear-gradient(90deg, var(--prism-primary), var(--prism-accent) 60%, var(--prism-primary-to));\n -webkit-background-clip: text;\n background-clip: text;\n color: transparent;\n }\n\n .prism-header__brand-sub {\n font-family: var(--font-mono);\n font-size: var(--fs-xs);\n color: var(--prism-text-ghost);\n }\n\n .prism-header__cmdbar {\n max-width: 540px;\n width: 100%;\n justify-self: center;\n display: flex;\n align-items: center;\n gap: 10px;\n height: 32px;\n padding: 0 12px;\n background: var(--prism-input-bg);\n border: 1px solid var(--prism-border);\n border-radius: 8px;\n color: var(--prism-text-muted);\n font-size: var(--fs-lg);\n cursor: pointer;\n transition: border-color var(--dur-fast), background var(--dur-fast);\n }\n .prism-header__cmdbar:hover {\n border-color: var(--prism-border-strong);\n color: var(--prism-text-2);\n }\n\n .prism-header__cmdbar-text {\n flex: 1;\n text-align: left;\n }\n\n .prism-header__cmdbar-shortcut {\n display: flex;\n gap: 3px;\n }\n .prism-header__cmdbar-shortcut kbd {\n font-family: var(--font-mono);\n font-size: 10.5px;\n padding: 1px 5px;\n border-radius: 4px;\n background: var(--prism-input-bg);\n border: 1px solid var(--prism-border);\n color: var(--prism-text-muted);\n }\n\n .prism-header__build-pill {\n font-family: var(--font-mono);\n font-size: var(--fs-xs);\n color: var(--prism-text-ghost);\n background: var(--prism-input-bg);\n border: 1px solid var(--prism-border);\n border-radius: 9999px;\n padding: 2px 10px;\n white-space: nowrap;\n line-height: 1.4;\n }\n\n .prism-header__actions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 6px;\n }\n\n .prism-header__widgets {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n }\n .prism-header__widgets--start {\n padding-left: 4px;\n justify-content: flex-start;\n }\n\n .prism-header__icon-btn {\n width: 32px;\n height: 32px;\n display: grid;\n place-items: center;\n border-radius: 8px;\n color: var(--prism-text-muted);\n background: none;\n border: none;\n cursor: pointer;\n position: relative;\n transition: all var(--dur-fast);\n }\n .prism-header__icon-btn:hover {\n background: var(--prism-input-bg);\n color: var(--prism-text);\n }\n\n :focus-visible {\n outline: 2px solid var(--prism-primary);\n outline-offset: 2px;\n }\n "] }]
157
+ args: [{ selector: 'prism-header', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismIconComponent, PrismLayoutMenuComponent, PrismHeaderWidgetHostComponent], template: "<header class=\"prism-header\">\n <div class=\"prism-header__brand\">\n @if (logoUrl()) {\n <img\n class=\"prism-header__logo-img\"\n [src]=\"logoUrl()\"\n [alt]=\"title()\" />\n } @else {\n <div class=\"prism-header__logo-default\">\n <!-- @formatter:off -->\n <!-- prettier-ignore -->\n <img alt=\"ng prism logo\" src=\"data:image/png;base64,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\" />\n <!-- @formatter:on -->\n </div>\n }\n <div class=\"prism-header__brand-text\">\n <span class=\"prism-header__brand-name\">{{ title() }}</span>\n @if (subtitle()) {\n <span class=\"prism-header__brand-sub\">{{ subtitle() }}</span>\n }\n </div>\n </div>\n @if (widgetsStart().length) {\n <div class=\"prism-header__widgets prism-header__widgets--start\">\n @for (w of widgetsStart(); track w.id) {\n <prism-header-widget-host [widget]=\"w\" />\n }\n </div>\n }\n <div class=\"prism-header__actions\">\n @for (w of widgetsEnd(); track w.id) {\n <prism-header-widget-host [widget]=\"w\" />\n }\n @if (buildInfoLabel()) {\n <span class=\"prism-header__build-pill\">{{ buildInfoLabel() }}</span>\n }\n <button\n class=\"prism-header__icon-btn\"\n (click)=\"themeService.toggle()\"\n [title]=\"themeService.isDark() ? 'Switch to light mode' : 'Switch to dark mode'\"\n [attr.aria-label]=\"themeService.isDark() ? 'Switch to light mode' : 'Switch to dark mode'\"\n [attr.aria-pressed]=\"themeService.isDark()\">\n @if (themeService.isDark()) {\n <prism-icon\n name=\"sun\"\n [size]=\"16\" />\n } @else {\n <prism-icon\n name=\"moon\"\n [size]=\"16\" />\n }\n </button>\n <prism-layout-menu />\n </div>\n</header>\n", styles: [".prism-header {\n display: grid;\n grid-template-columns: minmax(min-content, var(--sw, 264px)) 1fr auto;\n align-items: center;\n height: var(--band-header);\n padding: 0 14px 0 0;\n background: var(--prism-bg);\n border-bottom: 1px solid var(--prism-border);\n}\n\n.prism-header__brand {\n display: flex;\n gap: 10px;\n align-items: center;\n padding: 0 16px;\n white-space: nowrap;\n cursor: pointer;\n}\n\n.prism-header__logo-default {\n flex: 0 0 26px;\n width: 26px;\n height: 26px;\n color: var(--prism-primary);\n filter: drop-shadow(0 0 8px var(--prism-glow-strong));\n}\n\n.prism-header__logo-default img {\n width: 30px;\n}\n\n.prism-header__logo-img {\n width: auto;\n height: 26px;\n object-fit: contain;\n}\n\n.prism-header__brand-text {\n display: flex;\n flex-direction: column;\n line-height: 1.1;\n}\n\n.prism-header__brand-name {\n font-size: var(--fs-xl);\n font-weight: 700;\n color: transparent;\n letter-spacing: -0.01em;\n background: linear-gradient(90deg, var(--prism-primary), var(--prism-accent) 60%, var(--prism-primary-to));\n background-clip: text;\n}\n\n.prism-header__brand-sub {\n font-family: var(--font-mono);\n font-size: var(--fs-xs);\n color: var(--prism-text-ghost);\n}\n\n.prism-header__cmdbar {\n display: flex;\n gap: 10px;\n align-items: center;\n justify-self: center;\n width: 100%;\n max-width: 540px;\n height: 32px;\n padding: 0 12px;\n font-size: var(--fs-lg);\n color: var(--prism-text-muted);\n cursor: pointer;\n background: var(--prism-input-bg);\n border: 1px solid var(--prism-border);\n border-radius: 8px;\n transition:\n border-color var(--dur-fast),\n background var(--dur-fast);\n}\n\n.prism-header__cmdbar:hover {\n color: var(--prism-text-2);\n border-color: var(--prism-border-strong);\n}\n\n.prism-header__cmdbar-text {\n flex: 1;\n text-align: left;\n}\n\n.prism-header__cmdbar-shortcut {\n display: flex;\n gap: 3px;\n}\n\n.prism-header__cmdbar-shortcut kbd {\n padding: 1px 5px;\n font-family: var(--font-mono);\n font-size: 10.5px;\n color: var(--prism-text-muted);\n background: var(--prism-input-bg);\n border: 1px solid var(--prism-border);\n border-radius: 4px;\n}\n\n.prism-header__build-pill {\n padding: 2px 10px;\n font-family: var(--font-mono);\n font-size: var(--fs-xs);\n line-height: 1.4;\n color: var(--prism-text-ghost);\n white-space: nowrap;\n background: var(--prism-input-bg);\n border: 1px solid var(--prism-border);\n border-radius: 9999px;\n}\n\n.prism-header__actions {\n display: flex;\n gap: 6px;\n align-items: center;\n justify-content: flex-end;\n}\n\n.prism-header__widgets {\n display: flex;\n gap: 8px;\n align-items: center;\n min-width: 0;\n}\n\n.prism-header__widgets--start {\n justify-content: flex-start;\n padding-left: 4px;\n}\n\n.prism-header__icon-btn {\n position: relative;\n display: grid;\n place-items: center;\n width: 32px;\n height: 32px;\n color: var(--prism-text-muted);\n cursor: pointer;\n background: none;\n border: none;\n border-radius: 8px;\n transition: all var(--dur-fast);\n}\n\n.prism-header__icon-btn:hover {\n color: var(--prism-text);\n background: var(--prism-input-bg);\n}\n\n:focus-visible {\n outline: 2px solid var(--prism-primary);\n outline-offset: 2px;\n}\n"] }]
227
158
  }], null, { onGlobalKey: [{
228
159
  type: HostListener,
229
160
  args: ['document:keydown', ['$event']]
230
161
  }] }); })();
231
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismHeaderComponent, { className: "PrismHeaderComponent", filePath: "app/header/prism-header.component.ts", lineNumber: 237 }); })();
162
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismHeaderComponent, { className: "PrismHeaderComponent", filePath: "app/header/prism-header.component.ts", lineNumber: 20 }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"hmr.d.ts","sourceRoot":"","sources":["../../src/app/hmr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAGjE,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,GAAG,IAAI,CAGzF"}
1
+ {"version":3,"file":"hmr.d.ts","sourceRoot":"","sources":["../../src/app/hmr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAGjE,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,GAAG,IAAI,CAIzF"}
@@ -1 +1 @@
1
- {"version":3,"file":"icon-registry.d.ts","sourceRoot":"","sources":["../../../src/app/icons/icon-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,QAAA,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2CjC,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB,iFAAiF;AACjF,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EAAuB,CAAC"}
1
+ {"version":3,"file":"icon-registry.d.ts","sourceRoot":"","sources":["../../../src/app/icons/icon-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,QAAA,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoCjC,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB,iFAAiF;AACjF,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EAAuB,CAAC"}
@@ -30,6 +30,7 @@ const ICONS = {
30
30
  camera: '<path d="M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z"/><circle cx="12" cy="13" r="3"/>',
31
31
  move: '<path d="M12 2v20M2 12h20m-16-4-4 4 4 4m12-8 4 4-4 4M8 8l-4 4 4 4"/>',
32
32
  crosshair: '<circle cx="12" cy="12" r="10"/><path d="M22 12h-4M6 12H2m10-6V2m0 20v-4"/>',
33
+ 'ruler-dimension': '<path d="M4 4v16M20 4v16M8 12h8m-2-2 2 2-2 2m-4-4-2 2 2 2"/>',
33
34
  copy: '<rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/>',
34
35
  'maximize-2': '<path d="M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3M3 16v3a2 2 0 0 0 2 2h3m8 0h3a2 2 0 0 0 2-2v-3"/>',
35
36
  eye: '<path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"/><circle cx="12" cy="12" r="3"/>',
@@ -37,7 +38,7 @@ const ICONS = {
37
38
  x: '<path d="M18 6 6 18M6 6l12 12"/>',
38
39
  check: '<path d="M20 6 9 17l-5-5"/>',
39
40
  info: '<circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/>',
40
- 'circle-dashed': '<path d="M10.1 2.18a9.93 9.93 0 0 1 3.8 0"/><path d="M17.6 3.71a9.95 9.95 0 0 1 2.69 2.7"/><path d="M21.82 10.1a9.93 9.93 0 0 1 0 3.8"/><path d="M20.29 17.6a9.95 9.95 0 0 1-2.7 2.69"/><path d="M13.9 21.82a9.94 9.94 0 0 1-3.8 0"/><path d="M6.4 20.29a9.95 9.95 0 0 1-2.69-2.7"/><path d="M2.18 13.9a9.93 9.93 0 0 1 0-3.8"/><path d="M3.71 6.4a9.95 9.95 0 0 1 2.7-2.69"/>',
41
+ 'circle-dashed': '<path d="M10.1 2.18a9.93 9.93 0 0 1 3.8 0"/><path d="M17.6 3.71a9.95 9.95 0 0 1 2.69 2.7"/><path d="M21.82 10.1a9.93 9.93 0 0 1 0 3.8"/><path d="M20.29 17.6a9.95 9.95 0 0 1-2.7 2.69"/><path d="M13.9 21.82a9.94 9.94 0 0 1-3.8 0"/><path d="M6.4 20.29a9.95 9.95 0 0 1-2.69-2.7"/><path d="M2.18 13.9a9.93 9.93 0 0 1 0-3.8"/><path d="M3.71 6.4a9.95 9.95 0 0 1 2.7-2.69"/>'
41
42
  };
42
43
  export { ICONS };
43
44
  /** Every name the registry can draw — what a panel's `icon` has to pick from. */
@@ -1 +1 @@
1
- {"version":3,"file":"prism-icon.component.d.ts","sourceRoot":"","sources":["../../../src/app/icons/prism-icon.component.ts"],"names":[],"mappings":"AAQA,OAAO,EAAS,UAAU,EAAE,MAAM,oBAAoB,CAAC;;AAMvD,OAAO,EAAE,UAAU,EAAE,CAAC;AAMtB;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW5D;AAED,qBAOa,kBAAkB;IAC7B,QAAQ,CAAC,IAAI,8CAA4B;IACzC,QAAQ,CAAC,IAAI,8CAAa;IAE1B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAmC;;yCAJ3C,kBAAkB;2CAAlB,kBAAkB;CAkC9B"}
1
+ {"version":3,"file":"prism-icon.component.d.ts","sourceRoot":"","sources":["../../../src/app/icons/prism-icon.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAS,MAAM,oBAAoB,CAAC;;AAMvD,OAAO,EAAE,UAAU,EAAE,CAAC;AAMtB;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ5D;AAED,qBAOa,kBAAkB;IAC3B,QAAQ,CAAC,IAAI,8CAA4B;IACzC,QAAQ,CAAC,IAAI,8CAAa;IAE1B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAmC;;yCAJ7C,kBAAkB;2CAAlB,kBAAkB;CAoC9B"}
@@ -1,5 +1,5 @@
1
- import { Component, ChangeDetectionStrategy, input, effect, ElementRef, inject, } from '@angular/core';
2
- import { ICONS, ICON_NAMES } from './icon-registry.js';
1
+ import { ChangeDetectionStrategy, Component, effect, ElementRef, inject, input } from '@angular/core';
2
+ import { ICON_NAMES, ICONS } from './icon-registry.js';
3
3
  import * as i0 from "@angular/core";
4
4
  // Re-exported for existing consumers of this module. The registry itself
5
5
  // lives in `icon-registry.js` — a dependency-free module — so a plugin barrel
@@ -59,10 +59,10 @@ export class PrismIconComponent {
59
59
  });
60
60
  }
61
61
  static ɵfac = function PrismIconComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PrismIconComponent)(); };
62
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismIconComponent, selectors: [["prism-icon"]], inputs: { name: [1, "name"], size: [1, "size"] }, decls: 0, vars: 0, template: function PrismIconComponent_Template(rf, ctx) { }, styles: ["[_nghost-%COMP%] { display: inline-flex; align-items: center; justify-content: center; }"] });
62
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismIconComponent, selectors: [["prism-icon"]], inputs: { name: [1, "name"], size: [1, "size"] }, decls: 0, vars: 0, template: function PrismIconComponent_Template(rf, ctx) { }, styles: ["[_nghost-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}"] });
63
63
  }
64
64
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismIconComponent, [{
65
65
  type: Component,
66
- args: [{ selector: 'prism-icon', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: ``, styles: [":host { display: inline-flex; align-items: center; justify-content: center; }"] }]
66
+ args: [{ selector: 'prism-icon', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "", styles: [":host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n"] }]
67
67
  }], () => [], { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] }); })();
68
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismIconComponent, { className: "PrismIconComponent", filePath: "app/icons/prism-icon.component.ts", lineNumber: 53 }); })();
68
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismIconComponent, { className: "PrismIconComponent", filePath: "app/icons/prism-icon.component.ts", lineNumber: 43 }); })();
@@ -1,12 +1,12 @@
1
- export { PRISM_MANIFEST, PRISM_CONFIG } from './tokens/prism-tokens.js';
2
- export { PRISM_DEFAULT_THEME, PRISM_DARK_THEME, PRISM_LIGHT_THEME, PRISM_BASE_TOKENS, } from './theme/prism-default-theme.js';
1
+ export { PRISM_CONFIG, PRISM_MANIFEST } from './tokens/prism-tokens.js';
2
+ export { PRISM_BASE_TOKENS, PRISM_DARK_THEME, PRISM_DEFAULT_THEME, PRISM_LIGHT_THEME } from './theme/prism-default-theme.js';
3
3
  export { PrismThemeService } from './services/prism-theme.service.js';
4
4
  export type { NavigationItem } from './services/navigation-item.types.js';
5
5
  export { PrismManifestService } from './services/prism-manifest.service.js';
6
6
  export { PrismSearchService } from './services/prism-search.service.js';
7
7
  export { PrismNavigationService } from './services/prism-navigation.service.js';
8
8
  export { PrismRendererService } from './services/prism-renderer.service.js';
9
- export { PrismEventLogService, type EventLogEntry, } from './services/prism-event-log.service.js';
9
+ export { type EventLogEntry, PrismEventLogService } from './services/prism-event-log.service.js';
10
10
  export { PrismPluginService } from './services/prism-plugin.service.js';
11
11
  export { PrismLayoutService } from './services/prism-layout.service.js';
12
12
  export { PrismUrlStateService } from './services/prism-url-state.service.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGxE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGtE,YAAY,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAG1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EACL,oBAAoB,EACpB,KAAK,aAAa,GACnB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAGlF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAGvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kDAAkD,CAAC;AAG9F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAyB1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAGxE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAC7H,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGtE,YAAY,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAG1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,KAAK,aAAa,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAGlF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAGvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kDAAkD,CAAC;AAG9F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAyB1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC"}