@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
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.5+-3178c6)](https://www.typescriptlang.org)
7
7
  [![License](https://img.shields.io/badge/license-MIT-green)](./LICENSE)
8
8
 
9
- **[Live Demo](https://dyingangel666.github.io/ng-prism/demo/)** · **[Documentation](https://dyingangel666.github.io/ng-prism/)**
9
+ **[Live Demo](https://dyingangel666.github.io/ng-prism/demo/?component=ButtonComponent)** · **[Documentation](https://dyingangel666.github.io/ng-prism/)**
10
10
 
11
11
  ## Features
12
12
 
@@ -35,24 +35,24 @@ import { Component, input, output } from '@angular/core';
35
35
  import { Showcase } from '@ng-prism/core';
36
36
 
37
37
  @Showcase({
38
- title: 'Button',
39
- category: 'Atoms',
40
- description: 'Primary action button',
41
- variants: [
42
- { name: 'Primary', inputs: { variant: 'primary', label: 'Click me' } },
43
- { name: 'Danger', inputs: { variant: 'danger', disabled: true } },
44
- ],
38
+ title: 'Button',
39
+ category: 'Atoms',
40
+ description: 'Primary action button',
41
+ variants: [
42
+ { name: 'Primary', inputs: { variant: 'primary', label: 'Click me' } },
43
+ { name: 'Danger', inputs: { variant: 'danger', disabled: true } }
44
+ ]
45
45
  })
46
46
  @Component({
47
- selector: 'my-button',
48
- standalone: true,
49
- template: `<button [class]="variant()">{{ label() }}</button>`,
47
+ selector: 'my-button',
48
+ standalone: true,
49
+ template: `<button [class]="variant()">{{ label() }}</button>`
50
50
  })
51
51
  export class ButtonComponent {
52
- variant = input<'primary' | 'secondary' | 'danger'>('primary');
53
- label = input('Button');
54
- disabled = input(false);
55
- clicked = output<void>();
52
+ variant = input<'primary' | 'secondary' | 'danger'>('primary');
53
+ label = input('Button');
54
+ disabled = input(false);
55
+ clicked = output<void>();
56
56
  }
57
57
  ```
58
58
 
@@ -80,14 +80,14 @@ import { defineConfig } from '@ng-prism/core/config';
80
80
  import { jsDocPlugin } from '@ng-prism/plugin-jsdoc';
81
81
 
82
82
  export default defineConfig({
83
- plugins: [jsDocPlugin()],
83
+ plugins: [jsDocPlugin()],
84
84
 
85
- theme: {
86
- '--prism-primary': '#00a67e',
87
- '--prism-font-sans': "'Inter', sans-serif",
88
- },
85
+ theme: {
86
+ '--prism-primary': '#00a67e',
87
+ '--prism-font-sans': "'Inter', sans-serif"
88
+ },
89
89
 
90
- appProviders: [provideAnimationsAsync(), provideHttpClient()],
90
+ appProviders: [provideAnimationsAsync(), provideHttpClient()]
91
91
  });
92
92
  ```
93
93
 
@@ -117,9 +117,7 @@ For complex components that need template projections or mock data:
117
117
 
118
118
  ```typescript
119
119
  providePrism(PRISM_RUNTIME_MANIFEST, config, {
120
- componentPages: [
121
- { title: 'Table Demo', category: 'Data', component: TableDemoPage },
122
- ],
120
+ componentPages: [{ title: 'Table Demo', category: 'Data', component: TableDemoPage }]
123
121
  });
124
122
  ```
125
123
 
package/builders.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
- "builders": {
3
- "serve": {
4
- "implementation": "./dist/builder/serve/index.js",
5
- "schema": "./src/builder/serve/schema.json",
6
- "description": "Start the ng-prism development server"
7
- },
8
- "build": {
9
- "implementation": "./dist/builder/build/index.js",
10
- "schema": "./src/builder/build/schema.json",
11
- "description": "Build the ng-prism styleguide for production"
2
+ "builders": {
3
+ "serve": {
4
+ "implementation": "./dist/builder/serve/index.js",
5
+ "schema": "./src/builder/serve/schema.json",
6
+ "description": "Start the ng-prism development server"
7
+ },
8
+ "build": {
9
+ "implementation": "./dist/builder/build/index.js",
10
+ "schema": "./src/builder/build/schema.json",
11
+ "description": "Build the ng-prism styleguide for production"
12
+ }
12
13
  }
13
- }
14
14
  }
@@ -15,5 +15,5 @@
15
15
  * `prism-capture.service.ts` is a global stylesheet using `!important`, which
16
16
  * beats any component-scoped rule regardless.
17
17
  */
18
- export declare const CANVAS_BG_STYLES = "\n [data-bg=\"dots\"] {\n background-image: radial-gradient(circle, var(--prism-dot) 1px, transparent 1px);\n background-size: 20px 20px;\n }\n\n [data-bg=\"plain\"] {\n background-image: none;\n }\n\n /* Flat, not dotted. \"light\" and \"dark\" name a surface a component was\n designed against \u2014 and they are the two backgrounds whose colour is\n absolute rather than a theme token, which is what makes them the values\n to declare for a screenshot baseline. \"dots\" already exists for anyone\n who wants the grid. */\n [data-bg=\"light\"] {\n background-color: var(--prism-void-light, #f7f5fc);\n background-image: none;\n }\n [data-bg=\"dark\"] {\n background-color: var(--prism-void-dark, #07050f);\n background-image: none;\n }\n\n /* \"transparent\" shares the checkerboard on purpose. The two say the same\n thing in the two media the canvas has: while browsing, the checkerboard\n is already the UI's word for \"no surface here\"; in a capture it becomes\n literal transparency. A stage that were really see-through in the app\n would just show the shell through the canvas, which means nothing. The\n split between the two lives entirely in CAPTURE_STYLES. */\n [data-bg=\"checker\"],\n [data-bg=\"transparent\"] {\n background-image:\n linear-gradient(45deg, var(--prism-border) 25%, transparent 25%),\n linear-gradient(-45deg, var(--prism-border) 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, var(--prism-border) 75%),\n linear-gradient(-45deg, transparent 75%, var(--prism-border) 75%);\n background-size: 16px 16px;\n background-position: 0 0, 0 8px, 8px -8px, -8px 0;\n }\n";
18
+ export declare const CANVAS_BG_STYLES = "\n [data-bg=\"dots\"] {\n background-image: radial-gradient(circle, var(--prism-dot) 1px, transparent 1px);\n background-size: 20px 20px;\n }\n\n [data-bg=\"plain\"] {\n background-image: none;\n }\n\n /* Flat, not dotted. \"light\" and \"dark\" name a surface a component was\n designed against \u2014 and they are the two backgrounds whose colour is\n absolute rather than a theme token, which is what makes them the values\n to declare for a screenshot baseline. \"dots\" already exists for anyone\n who wants the grid. */\n /* These two also re-point --prism-measure, and that is not decoration.\n Every other canvas overlay is drawn in a theme colour over a theme\n surface, so the two move together. These two backgrounds are absolute:\n \"light\" stays near-white while the app runs the dark theme, and \"dark\"\n stays near-black while it runs the light one. The measurement colour\n picked for one theme is then sitting on the other theme's ground \u2014\n measured, the dark theme's blue reaches 1.8:1 on the light background,\n which is a viewport overlay you cannot see. Pinning the colour to the\n ground rather than to the theme is what makes \"always visible\" true\n instead of true-in-the-common-case.\n\n Literal values because this file is theme-independent by construction \u2014\n it is the one place that already hard-codes the two absolute grounds\n below, for the same reason. Keep them in step with --prism-measure in\n prism-default-theme.ts; semantic-colours.spec.ts fails if they drift. */\n [data-bg=\"light\"] {\n background-color: var(--prism-void-light, #f7f5fc);\n background-image: none;\n --prism-measure: #004d8a;\n }\n [data-bg=\"dark\"] {\n background-color: var(--prism-void-dark, #07050f);\n background-image: none;\n --prism-measure: #41bcff;\n }\n\n /* \"transparent\" shares the checkerboard on purpose. The two say the same\n thing in the two media the canvas has: while browsing, the checkerboard\n is already the UI's word for \"no surface here\"; in a capture it becomes\n literal transparency. A stage that were really see-through in the app\n would just show the shell through the canvas, which means nothing. The\n split between the two lives entirely in CAPTURE_STYLES. */\n [data-bg=\"checker\"],\n [data-bg=\"transparent\"] {\n background-image:\n linear-gradient(45deg, var(--prism-border) 25%, transparent 25%),\n linear-gradient(-45deg, var(--prism-border) 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, var(--prism-border) 75%),\n linear-gradient(-45deg, transparent 75%, var(--prism-border) 75%);\n background-size: 16px 16px;\n background-position: 0 0, 0 8px, 8px -8px, -8px 0;\n }\n";
19
19
  //# sourceMappingURL=canvas-bg.styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-bg.styles.d.ts","sourceRoot":"","sources":["../../../src/app/canvas/canvas-bg.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,gBAAgB,qrDAwC5B,CAAC"}
1
+ {"version":3,"file":"canvas-bg.styles.d.ts","sourceRoot":"","sources":["../../../src/app/canvas/canvas-bg.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,gBAAgB,wwFAyD5B,CAAC"}
@@ -30,13 +30,30 @@ export const CANVAS_BG_STYLES = `
30
30
  absolute rather than a theme token, which is what makes them the values
31
31
  to declare for a screenshot baseline. "dots" already exists for anyone
32
32
  who wants the grid. */
33
+ /* These two also re-point --prism-measure, and that is not decoration.
34
+ Every other canvas overlay is drawn in a theme colour over a theme
35
+ surface, so the two move together. These two backgrounds are absolute:
36
+ "light" stays near-white while the app runs the dark theme, and "dark"
37
+ stays near-black while it runs the light one. The measurement colour
38
+ picked for one theme is then sitting on the other theme's ground —
39
+ measured, the dark theme's blue reaches 1.8:1 on the light background,
40
+ which is a viewport overlay you cannot see. Pinning the colour to the
41
+ ground rather than to the theme is what makes "always visible" true
42
+ instead of true-in-the-common-case.
43
+
44
+ Literal values because this file is theme-independent by construction —
45
+ it is the one place that already hard-codes the two absolute grounds
46
+ below, for the same reason. Keep them in step with --prism-measure in
47
+ prism-default-theme.ts; semantic-colours.spec.ts fails if they drift. */
33
48
  [data-bg="light"] {
34
49
  background-color: var(--prism-void-light, #f7f5fc);
35
50
  background-image: none;
51
+ --prism-measure: #004d8a;
36
52
  }
37
53
  [data-bg="dark"] {
38
54
  background-color: var(--prism-void-dark, #07050f);
39
55
  background-image: none;
56
+ --prism-measure: #41bcff;
40
57
  }
41
58
 
42
59
  /* "transparent" shares the checkerboard on purpose. The two say the same
@@ -1 +1 @@
1
- {"version":3,"file":"prism-canvas-bg-pill.component.d.ts","sourceRoot":"","sources":["../../../src/app/canvas/prism-canvas-bg-pill.component.ts"],"names":[],"mappings":";AAGA,qBAyEa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAE3D,SAAS,CAAC,QAAQ,CAAC,WAAW,gGAA8B;IAC5D,SAAS,CAAC,QAAQ,CAAC,OAAO,0CAA8B;IAExD,SAAS,CAAC,KAAK,IAAI,IAAI;yCANZ,0BAA0B;2CAA1B,0BAA0B;CAStC"}
1
+ {"version":3,"file":"prism-canvas-bg-pill.component.d.ts","sourceRoot":"","sources":["../../../src/app/canvas/prism-canvas-bg-pill.component.ts"],"names":[],"mappings":";AAGA,qBAOa,0BAA0B;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAE3D,SAAS,CAAC,QAAQ,CAAC,WAAW,gGAA8B;IAC5D,SAAS,CAAC,QAAQ,CAAC,OAAO,0CAA8B;IAExD,SAAS,CAAC,KAAK,IAAI,IAAI;yCANd,0BAA0B;2CAA1B,0BAA0B;CAStC"}
@@ -27,25 +27,10 @@ export class PrismCanvasBgPillComponent {
27
27
  i0.ɵɵconditionalCreate(0, PrismCanvasBgPillComponent_Conditional_0_Template, 5, 1, "div", 0);
28
28
  } if (rf & 2) {
29
29
  i0.ɵɵconditional(ctx.visible() ? 0 : -1);
30
- } }, styles: ["\n\n\n\n\n\n [_nghost-%COMP%] {\n position: absolute;\n top: var(--%NS%prism-canvas-overlay-top, 12px);\n left: var(--%NS%prism-canvas-overlay-inline, 20px);\n pointer-events: none;\n z-index: 2;\n transition: top var(--%NS%dur-base), left var(--%NS%dur-base);\n }\n .prism-bg-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 4px 4px 4px 10px;\n border-radius: 999px;\n font-size: var(--%NS%fs-xs);\n font-family: var(--%NS%font-sans);\n background: color-mix(in srgb, var(--%NS%prism-bg-elevated) 90%, transparent);\n border: 1px solid var(--%NS%prism-border);\n color: var(--%NS%prism-text-muted);\n backdrop-filter: blur(8px);\n pointer-events: auto;\n animation: _ngcontent-%COMP%_fadeIn var(--%NS%dur-base) ease-out;\n }\n .label[_ngcontent-%COMP%] { letter-spacing: 0.02em; }\n .reset[_ngcontent-%COMP%] {\n height: 22px;\n padding: 0 10px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--%NS%prism-primary) 12%, transparent);\n color: var(--%NS%prism-text);\n border: 1px solid color-mix(in srgb, var(--%NS%prism-primary) 25%, transparent);\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n cursor: pointer;\n transition: background var(--%NS%dur-fast);\n }\n .reset[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--%NS%prism-primary) 20%, transparent);\n }\n @keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; transform: translateY(-4px); }\n to { opacity: 1; transform: translateY(0); }\n }"] });
30
+ } }, styles: ["\n\n\n\n\n\n[_nghost-%COMP%] {\n position: absolute;\n top: var(--%NS%prism-canvas-overlay-top, 12px);\n left: var(--%NS%prism-canvas-overlay-inline, 20px);\n z-index: 2;\n pointer-events: none;\n transition:\n top var(--%NS%dur-base),\n left var(--%NS%dur-base);\n}\n\n.prism-bg-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n gap: 8px;\n align-items: center;\n padding: 4px 4px 4px 10px;\n font-family: var(--%NS%font-sans);\n font-size: var(--%NS%fs-xs);\n color: var(--%NS%prism-text-muted);\n pointer-events: auto;\n background: color-mix(in srgb, var(--%NS%prism-bg-elevated) 90%, transparent);\n border: 1px solid var(--%NS%prism-border);\n border-radius: 999px;\n backdrop-filter: blur(8px);\n animation: _ngcontent-%COMP%_fade-in var(--%NS%dur-base) ease-out;\n}\n\n.label[_ngcontent-%COMP%] {\n letter-spacing: 0.02em;\n}\n\n.reset[_ngcontent-%COMP%] {\n height: 22px;\n padding: 0 10px;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n color: var(--%NS%prism-text);\n cursor: pointer;\n background: color-mix(in srgb, var(--%NS%prism-primary) 12%, transparent);\n border: 1px solid color-mix(in srgb, var(--%NS%prism-primary) 25%, transparent);\n border-radius: 999px;\n transition: background var(--%NS%dur-fast);\n}\n\n.reset[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--%NS%prism-primary) 20%, transparent);\n}\n\n@keyframes _ngcontent-%COMP%_fade-in {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}"] });
31
31
  }
32
32
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismCanvasBgPillComponent, [{
33
33
  type: Component,
34
- args: [{ selector: 'prism-canvas-bg-pill', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
35
- @if (visible()) {
36
- <div class="prism-bg-pill">
37
- <span class="label">Recommended: {{ recommended() }}</span>
38
- <button
39
- type="button"
40
- class="reset"
41
- title="Reset to recommended background"
42
- aria-label="Reset to recommended background"
43
- (click)="reset()"
44
- >
45
- Reset
46
- </button>
47
- </div>
48
- }
49
- `, styles: ["\n /* Top left, opposite the tool rail. Both used to claim the right corner and\n the rail won, hiding a notice whose whole job is to be noticed. The rail\n is permanent and the notice is not, so the permanent thing keeps the\n corner it sits in and this moves. Nothing else occupies the left corner:\n the zoom badge that used to live here was a duplicate of the readout the\n rail carries. */\n :host {\n position: absolute;\n top: var(--prism-canvas-overlay-top, 12px);\n left: var(--prism-canvas-overlay-inline, 20px);\n pointer-events: none;\n z-index: 2;\n transition: top var(--dur-base), left var(--dur-base);\n }\n .prism-bg-pill {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 4px 4px 4px 10px;\n border-radius: 999px;\n font-size: var(--fs-xs);\n font-family: var(--font-sans);\n background: color-mix(in srgb, var(--prism-bg-elevated) 90%, transparent);\n border: 1px solid var(--prism-border);\n color: var(--prism-text-muted);\n backdrop-filter: blur(8px);\n pointer-events: auto;\n animation: fadeIn var(--dur-base) ease-out;\n }\n .label { letter-spacing: 0.02em; }\n .reset {\n height: 22px;\n padding: 0 10px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--prism-primary) 12%, transparent);\n color: var(--prism-text);\n border: 1px solid color-mix(in srgb, var(--prism-primary) 25%, transparent);\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n cursor: pointer;\n transition: background var(--dur-fast);\n }\n .reset:hover {\n background: color-mix(in srgb, var(--prism-primary) 20%, transparent);\n }\n @keyframes fadeIn {\n from { opacity: 0; transform: translateY(-4px); }\n to { opacity: 1; transform: translateY(0); }\n }\n "] }]
34
+ args: [{ selector: 'prism-canvas-bg-pill', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (visible()) {\n <div class=\"prism-bg-pill\">\n <span class=\"label\">Recommended: {{ recommended() }}</span>\n <button\n type=\"button\"\n class=\"reset\"\n title=\"Reset to recommended background\"\n aria-label=\"Reset to recommended background\"\n (click)=\"reset()\">\n Reset\n </button>\n </div>\n}\n", styles: ["/* Top left, opposite the tool rail. Both used to claim the right corner and\n the rail won, hiding a notice whose whole job is to be noticed. The rail\n is permanent and the notice is not, so the permanent thing keeps the\n corner it sits in and this moves. Nothing else occupies the left corner:\n the zoom badge that used to live here was a duplicate of the readout the\n rail carries. */\n:host {\n position: absolute;\n top: var(--prism-canvas-overlay-top, 12px);\n left: var(--prism-canvas-overlay-inline, 20px);\n z-index: 2;\n pointer-events: none;\n transition:\n top var(--dur-base),\n left var(--dur-base);\n}\n\n.prism-bg-pill {\n display: inline-flex;\n gap: 8px;\n align-items: center;\n padding: 4px 4px 4px 10px;\n font-family: var(--font-sans);\n font-size: var(--fs-xs);\n color: var(--prism-text-muted);\n pointer-events: auto;\n background: color-mix(in srgb, var(--prism-bg-elevated) 90%, transparent);\n border: 1px solid var(--prism-border);\n border-radius: 999px;\n backdrop-filter: blur(8px);\n animation: fade-in var(--dur-base) ease-out;\n}\n\n.label {\n letter-spacing: 0.02em;\n}\n\n.reset {\n height: 22px;\n padding: 0 10px;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n color: var(--prism-text);\n cursor: pointer;\n background: color-mix(in srgb, var(--prism-primary) 12%, transparent);\n border: 1px solid color-mix(in srgb, var(--prism-primary) 25%, transparent);\n border-radius: 999px;\n transition: background var(--dur-fast);\n}\n\n.reset:hover {\n background: color-mix(in srgb, var(--prism-primary) 20%, transparent);\n}\n\n@keyframes fade-in {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n"] }]
50
35
  }], null, null); })();
51
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismCanvasBgPillComponent, { className: "PrismCanvasBgPillComponent", filePath: "app/canvas/prism-canvas-bg-pill.component.ts", lineNumber: 77 }); })();
36
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismCanvasBgPillComponent, { className: "PrismCanvasBgPillComponent", filePath: "app/canvas/prism-canvas-bg-pill.component.ts", lineNumber: 11 }); })();
@@ -1,6 +1,7 @@
1
1
  import { PrismCanvasService } from '../services/prism-canvas.service.js';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class PrismCanvasRulersComponent {
4
+ protected readonly rulerSize = "20px";
4
5
  protected readonly canvas: PrismCanvasService;
5
6
  private readonly themeService;
6
7
  private readonly rulerTop;
@@ -1 +1 @@
1
- {"version":3,"file":"prism-canvas-rulers.component.d.ts","sourceRoot":"","sources":["../../../src/app/canvas/prism-canvas-rulers.component.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;;AAKzE,qBAkDa,0BAA0B;IACrC,SAAS,CAAC,QAAQ,CAAC,MAAM,qBAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAE1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAC8B;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAC8B;IAExD,OAAO,CAAC,EAAE,CAA+B;;IAqBzC,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,MAAM;IA4Dd,OAAO,CAAC,MAAM;yCAvGH,0BAA0B;2CAA1B,0BAA0B;CAsKtC"}
1
+ {"version":3,"file":"prism-canvas-rulers.component.d.ts","sourceRoot":"","sources":["../../../src/app/canvas/prism-canvas-rulers.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;;AAKzE,qBAWa,0BAA0B;IACnC,SAAS,CAAC,QAAQ,CAAC,SAAS,UAAY;IAExC,SAAS,CAAC,QAAQ,CAAC,MAAM,qBAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAE1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwD;IACjF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyD;IAEnF,OAAO,CAAC,EAAE,CAA+B;;IAsBzC,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,MAAM;IAgEd,OAAO,CAAC,MAAM;yCA7GL,0BAA0B;2CAA1B,0BAA0B;CAgLtC"}
@@ -1,4 +1,4 @@
1
- import { Component, ChangeDetectionStrategy, effect, inject, viewChild, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, effect, inject, viewChild } from '@angular/core';
2
2
  import { PrismCanvasService } from '../services/prism-canvas.service.js';
3
3
  import { PrismThemeService } from '../services/prism-theme.service.js';
4
4
  import * as i0 from "@angular/core";
@@ -11,6 +11,7 @@ function PrismCanvasRulersComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
11
11
  } }
12
12
  const R = 20;
13
13
  export class PrismCanvasRulersComponent {
14
+ rulerSize = `${R}px`;
14
15
  canvas = inject(PrismCanvasService);
15
16
  themeService = inject(PrismThemeService);
16
17
  rulerTop = viewChild('rulerTop', /* @ts-ignore */
@@ -30,11 +31,11 @@ export class PrismCanvasRulersComponent {
30
31
  }
31
32
  requestAnimationFrame(() => {
32
33
  this.paint(zoom);
33
- this.observeResize(zoom);
34
+ this.observeResize();
34
35
  });
35
36
  });
36
37
  }
37
- observeResize(zoom) {
38
+ observeResize() {
38
39
  if (this.ro)
39
40
  return;
40
41
  const wrap = this.rulerTop()?.nativeElement?.parentElement;
@@ -154,25 +155,19 @@ export class PrismCanvasRulersComponent {
154
155
  i0.ɵɵviewQuerySignal(ctx.rulerTop, _c0, 5)(ctx.rulerLeft, _c1, 5);
155
156
  } if (rf & 2) {
156
157
  i0.ɵɵqueryAdvance(2);
158
+ } }, hostVars: 2, hostBindings: function PrismCanvasRulersComponent_HostBindings(rf, ctx) { if (rf & 2) {
159
+ i0.ɵɵstyleProp("--%NS%prism-ruler-size", ctx.rulerSize);
157
160
  } }, decls: 1, vars: 1, consts: [["rulerTop", ""], ["rulerLeft", ""], [1, "ruler-wrap"], [1, "ruler", "ruler--top"], [1, "ruler", "ruler--left"], [1, "ruler-corner"]], template: function PrismCanvasRulersComponent_Template(rf, ctx) { if (rf & 1) {
158
161
  i0.ɵɵconditionalCreate(0, PrismCanvasRulersComponent_Conditional_0_Template, 6, 0, "div", 2);
159
162
  } if (rf & 2) {
160
163
  i0.ɵɵconditional(ctx.canvas.rulers() ? 0 : -1);
161
- } }, styles: ["[_nghost-%COMP%] { display: contents; }\n\n .ruler-wrap[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 4;\n overflow: hidden;\n }\n\n .ruler[_ngcontent-%COMP%] { position: absolute; }\n .ruler--top[_ngcontent-%COMP%] {\n top: 0;\n left: 20px;\n right: 0;\n height: 20px;\n }\n .ruler--left[_ngcontent-%COMP%] {\n top: 20px;\n left: 0;\n bottom: 0;\n width: 20px;\n }\n .ruler-corner[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n width: 20px;\n height: 20px;\n background: var(--%NS%prism-bg);\n border-right: 1px solid var(--%NS%prism-border);\n border-bottom: 1px solid var(--%NS%prism-border);\n z-index: 1;\n }"] });
164
+ } }, styles: ["\n\n\n[_nghost-%COMP%] {\n display: contents;\n}\n\n.ruler-wrap[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n z-index: 4;\n overflow: hidden;\n pointer-events: none;\n}\n\n.ruler[_ngcontent-%COMP%] {\n position: absolute;\n}\n\n.ruler--top[_ngcontent-%COMP%] {\n top: 0;\n right: 0;\n left: var(--%NS%prism-ruler-size);\n height: var(--%NS%prism-ruler-size);\n}\n\n.ruler--left[_ngcontent-%COMP%] {\n top: var(--%NS%prism-ruler-size);\n bottom: 0;\n left: 0;\n width: var(--%NS%prism-ruler-size);\n}\n\n.ruler-corner[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1;\n width: var(--%NS%prism-ruler-size);\n height: var(--%NS%prism-ruler-size);\n background: var(--%NS%prism-bg);\n border-right: 1px solid var(--%NS%prism-border);\n border-bottom: 1px solid var(--%NS%prism-border);\n}"] });
162
165
  }
163
166
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismCanvasRulersComponent, [{
164
167
  type: Component,
165
- args: [{ selector: 'prism-canvas-rulers', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
166
- @if (canvas.rulers()) {
167
- <div class="ruler-wrap">
168
- <canvas #rulerTop class="ruler ruler--top"></canvas>
169
- <canvas #rulerLeft class="ruler ruler--left"></canvas>
170
- <div class="ruler-corner"></div>
171
- </div>
172
- }
173
- `, styles: ["\n :host { display: contents; }\n\n .ruler-wrap {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 4;\n overflow: hidden;\n }\n\n .ruler { position: absolute; }\n .ruler--top {\n top: 0;\n left: 20px;\n right: 0;\n height: 20px;\n }\n .ruler--left {\n top: 20px;\n left: 0;\n bottom: 0;\n width: 20px;\n }\n .ruler-corner {\n position: absolute;\n top: 0;\n left: 0;\n width: 20px;\n height: 20px;\n background: var(--prism-bg);\n border-right: 1px solid var(--prism-border);\n border-bottom: 1px solid var(--prism-border);\n z-index: 1;\n }\n "] }]
168
+ args: [{ selector: 'prism-canvas-rulers', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: { '[style.--prism-ruler-size]': 'rulerSize' }, template: "@if (canvas.rulers()) {\n <div class=\"ruler-wrap\">\n <canvas\n #rulerTop\n class=\"ruler ruler--top\"></canvas>\n <canvas\n #rulerLeft\n class=\"ruler ruler--left\"></canvas>\n <div class=\"ruler-corner\"></div>\n </div>\n}\n", styles: ["/* --prism-ruler-size is bound from the host rather than declared here. The\n gutter width is also the canvas size the two rulers are painted at, so R in\n the component is the one place it may be written down. */\n:host {\n display: contents;\n}\n\n.ruler-wrap {\n position: absolute;\n inset: 0;\n z-index: 4;\n overflow: hidden;\n pointer-events: none;\n}\n\n.ruler {\n position: absolute;\n}\n\n.ruler--top {\n top: 0;\n right: 0;\n left: var(--prism-ruler-size);\n height: var(--prism-ruler-size);\n}\n\n.ruler--left {\n top: var(--prism-ruler-size);\n bottom: 0;\n left: 0;\n width: var(--prism-ruler-size);\n}\n\n.ruler-corner {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1;\n width: var(--prism-ruler-size);\n height: var(--prism-ruler-size);\n background: var(--prism-bg);\n border-right: 1px solid var(--prism-border);\n border-bottom: 1px solid var(--prism-border);\n}\n"] }]
174
169
  }], () => [], { rulerTop: [{ type: i0.ViewChild, args: ['rulerTop', { isSignal: true }] }], rulerLeft: [{ type: i0.ViewChild, args: ['rulerLeft', { isSignal: true }] }] }); })();
175
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismCanvasRulersComponent, { className: "PrismCanvasRulersComponent", filePath: "app/canvas/prism-canvas-rulers.component.ts", lineNumber: 64 }); })();
170
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismCanvasRulersComponent, { className: "PrismCanvasRulersComponent", filePath: "app/canvas/prism-canvas-rulers.component.ts", lineNumber: 18 }); })();
176
171
  function stepFor(zoom) {
177
172
  if (zoom >= 2)
178
173
  return 10;
@@ -6,13 +6,23 @@ import * as i0 from "@angular/core";
6
6
  * The canvas tools, as a rail floating over the canvas instead of a band above
7
7
  * it.
8
8
  *
9
- * The five entries were never one kind of control, and the split follows that
9
+ * The six entries were never one kind of control, and the split follows that
10
10
  * rather than the topic: guides and rulers are toggles you flip constantly
11
- * while measuring, so they toggle at their own button; canvas background and
12
- * zoom are choosers you set once, so they move behind a menu; the template is a
13
- * view rather than a setting and keeps its own button. The zoom *value* stays
14
- * on the rail as a readout — it is the one number here you read far more often
15
- * than you set.
11
+ * while working, so they toggle at their own button; canvas background and zoom
12
+ * are choosers you set once, so they move behind a menu; the template is a view
13
+ * rather than a setting and keeps its own button. The viewport is the sixth
14
+ * entry, and like zoom it does not stay on one side of that split — zoom
15
+ * already surfaces as a chooser in the menu and a readout on the rail, and the
16
+ * viewport surfaces the same way, as a toggle on the rail because switching the
17
+ * constraint on and off is something you do constantly, and a width chooser in
18
+ * the menu because the specific width is something you set once you have
19
+ * decided to constrain at all.
20
+ *
21
+ * Two numbers live on the rail as readouts, not one: the zoom percentage and
22
+ * the active viewport width are both things you read far more often than you
23
+ * set. They differ in permanence, not in kind — the zoom percentage never
24
+ * leaves, but the width is only there once the toggle above has switched the
25
+ * constraint on, so it takes a second line rather than a fixed one.
16
26
  *
17
27
  * The host deliberately generates no box. The rail has to be a direct child of
18
28
  * `.prism-canvas-wrap` that does not contain the stage, because that is exactly
@@ -55,6 +65,13 @@ export declare class PrismCanvasToolbarComponent {
55
65
  value: number;
56
66
  label: string;
57
67
  }[];
68
+ /**
69
+ * The named widths, offered exactly the way the zoom chooser is.
70
+ *
71
+ * Plain numbers and no device names: this tool narrows a box and simulates
72
+ * nothing, so calling 390 "iPhone" would promise a fidelity it does not have.
73
+ */
74
+ protected readonly viewports: readonly number[];
58
75
  protected capitalize(s: string): string;
59
76
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismCanvasToolbarComponent, never>;
60
77
  static ɵcmp: i0.ɵɵComponentDeclaration<PrismCanvasToolbarComponent, "prism-canvas-toolbar", never, {}, {}, never, never, true, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"prism-canvas-toolbar.component.d.ts","sourceRoot":"","sources":["../../../src/app/canvas/prism-canvas-toolbar.component.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;;AAEhF;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAkOa,2BAA2B;IACtC,SAAS,CAAC,QAAQ,CAAC,MAAM,qBAA8B;IACvD,SAAS,CAAC,QAAQ,CAAC,SAAS,wBAAiC;IAE7D,mFAAmF;IACnF,SAAS,CAAC,QAAQ,CAAC,IAAI,OAAQ;IAE/B,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI;IAQnC;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,sBAAc;IAEpC,4EAA4E;IAC5E;;;;;OAKG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI;IAY9C,SAAS,CAAC,QAAQ,CAAC,KAAK;;;QAKtB;IAEF,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;yCA3D5B,2BAA2B;2CAA3B,2BAA2B;CA8DvC"}
1
+ {"version":3,"file":"prism-canvas-toolbar.component.d.ts","sourceRoot":"","sources":["../../../src/app/canvas/prism-canvas-toolbar.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAG3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAQa,2BAA2B;IACpC,SAAS,CAAC,QAAQ,CAAC,MAAM,qBAA8B;IACvD,SAAS,CAAC,QAAQ,CAAC,SAAS,wBAAiC;IAE7D,mFAAmF;IACnF,SAAS,CAAC,QAAQ,CAAC,IAAI,OAAQ;IAE/B,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI;IAQnC;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,sBAAc;IAEpC,4EAA4E;IAC5E;;;;;OAKG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI;IAY9C,SAAS,CAAC,QAAQ,CAAC,KAAK;;;QAKtB;IAEF;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,SAAS,oBAAkB;IAE9C,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;yCAnE9B,2BAA2B;2CAA3B,2BAA2B;CAsEvC"}