@ng-prism/core 22.5.0 → 22.7.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. package/README.md +13 -9
  2. package/dist/app/canvas/canvas-bg.styles.d.ts +1 -1
  3. package/dist/app/canvas/canvas-bg.styles.d.ts.map +1 -1
  4. package/dist/app/canvas/canvas-bg.styles.js +1 -1
  5. package/dist/app/canvas/canvas-overlay-tokens.d.ts +12 -0
  6. package/dist/app/canvas/canvas-overlay-tokens.d.ts.map +1 -0
  7. package/dist/app/canvas/canvas-overlay-tokens.js +52 -0
  8. package/dist/app/canvas/prism-canvas-bg-pill.component.js +2 -2
  9. package/dist/app/canvas/prism-canvas-pin-row.component.js +2 -2
  10. package/dist/app/canvas/prism-canvas-rulers.component.d.ts +2 -0
  11. package/dist/app/canvas/prism-canvas-rulers.component.d.ts.map +1 -1
  12. package/dist/app/canvas/prism-canvas-rulers.component.js +17 -12
  13. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts +25 -3
  14. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts.map +1 -1
  15. package/dist/app/canvas/prism-canvas-toolbar.component.js +154 -89
  16. package/dist/app/canvas/prism-template-popover.component.d.ts.map +1 -1
  17. package/dist/app/canvas/prism-template-popover.component.js +16 -7
  18. package/dist/app/canvas/state-chips.d.ts +50 -0
  19. package/dist/app/canvas/state-chips.d.ts.map +1 -0
  20. package/dist/app/canvas/state-chips.js +40 -0
  21. package/dist/app/component-head/head-metrics.d.ts +35 -19
  22. package/dist/app/component-head/head-metrics.d.ts.map +1 -1
  23. package/dist/app/component-head/head-metrics.js +57 -27
  24. package/dist/app/component-head/pipe-facts.d.ts +9 -0
  25. package/dist/app/component-head/pipe-facts.d.ts.map +1 -0
  26. package/dist/app/component-head/pipe-facts.js +15 -0
  27. package/dist/app/component-head/prism-component-head.component.d.ts +20 -22
  28. package/dist/app/component-head/prism-component-head.component.d.ts.map +1 -1
  29. package/dist/app/component-head/prism-component-head.component.js +85 -96
  30. package/dist/app/component-head/prism-head-gauge.component.d.ts +8 -12
  31. package/dist/app/component-head/prism-head-gauge.component.d.ts.map +1 -1
  32. package/dist/app/component-head/prism-head-gauge.component.js +51 -67
  33. package/dist/app/component-head/prism-head-info.component.d.ts +14 -2
  34. package/dist/app/component-head/prism-head-info.component.d.ts.map +1 -1
  35. package/dist/app/component-head/prism-head-info.component.js +84 -20
  36. package/dist/app/component-head/prism-stat.component.d.ts +4 -5
  37. package/dist/app/component-head/prism-stat.component.d.ts.map +1 -1
  38. package/dist/app/component-head/prism-stat.component.js +16 -12
  39. package/dist/app/component-head/service-facts.d.ts +8 -0
  40. package/dist/app/component-head/service-facts.d.ts.map +1 -0
  41. package/dist/app/component-head/service-facts.js +11 -0
  42. package/dist/app/controls/boolean-control.component.js +2 -2
  43. package/dist/app/controls/json-control.component.js +2 -2
  44. package/dist/app/controls/union-control.component.js +4 -3
  45. package/dist/app/directives/resize-value.d.ts +1 -1
  46. package/dist/app/directives/resize-value.js +1 -1
  47. package/dist/app/discovery-manifest.d.ts +2 -2
  48. package/dist/app/discovery-manifest.d.ts.map +1 -1
  49. package/dist/app/discovery-manifest.js +15 -3
  50. package/dist/app/header/header-brand.d.ts +25 -0
  51. package/dist/app/header/header-brand.d.ts.map +1 -0
  52. package/dist/app/header/header-brand.js +10 -0
  53. package/dist/app/header/prism-header.component.d.ts +2 -2
  54. package/dist/app/header/prism-header.component.d.ts.map +1 -1
  55. package/dist/app/header/prism-header.component.js +73 -57
  56. package/dist/app/icons/icon-registry.d.ts.map +1 -1
  57. package/dist/app/icons/icon-registry.js +4 -1
  58. package/dist/app/index.d.ts +12 -0
  59. package/dist/app/index.d.ts.map +1 -1
  60. package/dist/app/index.js +12 -1
  61. package/dist/app/layout-menu/prism-layout-menu.component.d.ts +3 -0
  62. package/dist/app/layout-menu/prism-layout-menu.component.d.ts.map +1 -1
  63. package/dist/app/layout-menu/prism-layout-menu.component.js +72 -58
  64. package/dist/app/overview/open-in-playground.d.ts +19 -0
  65. package/dist/app/overview/open-in-playground.d.ts.map +1 -0
  66. package/dist/app/overview/open-in-playground.js +25 -0
  67. package/dist/app/overview/overview-matrix.d.ts +85 -0
  68. package/dist/app/overview/overview-matrix.d.ts.map +1 -0
  69. package/dist/app/overview/overview-matrix.js +98 -0
  70. package/dist/app/overview/overview-visibility.d.ts +10 -2
  71. package/dist/app/overview/overview-visibility.d.ts.map +1 -1
  72. package/dist/app/overview/overview-visibility.js +14 -3
  73. package/dist/app/overview/prism-overview-cell.component.d.ts +27 -2
  74. package/dist/app/overview/prism-overview-cell.component.d.ts.map +1 -1
  75. package/dist/app/overview/prism-overview-cell.component.js +145 -28
  76. package/dist/app/overview/prism-overview-matrix.component.d.ts +29 -0
  77. package/dist/app/overview/prism-overview-matrix.component.d.ts.map +1 -0
  78. package/dist/app/overview/prism-overview-matrix.component.js +155 -0
  79. package/dist/app/overview/prism-overview.component.d.ts +4 -0
  80. package/dist/app/overview/prism-overview.component.d.ts.map +1 -1
  81. package/dist/app/overview/prism-overview.component.js +37 -14
  82. package/dist/app/page-renderer/prism-page-renderer.component.js +2 -2
  83. package/dist/app/panels/a11y/a11y-core.plugin.d.ts.map +1 -1
  84. package/dist/app/panels/a11y/a11y-core.plugin.js +0 -1
  85. package/dist/app/panels/a11y/a11y-header-badge.component.d.ts +1 -4
  86. package/dist/app/panels/a11y/a11y-header-badge.component.d.ts.map +1 -1
  87. package/dist/app/panels/a11y/a11y-header-badge.component.js +8 -19
  88. package/dist/app/panels/a11y/a11y-keyboard-overlay.component.js +2 -2
  89. package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts +1 -0
  90. package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts.map +1 -1
  91. package/dist/app/panels/a11y/a11y-overlay-host.component.js +4 -3
  92. package/dist/app/panels/a11y/a11y-panel.component.d.ts +4 -1
  93. package/dist/app/panels/a11y/a11y-panel.component.d.ts.map +1 -1
  94. package/dist/app/panels/a11y/a11y-panel.component.js +32 -54
  95. package/dist/app/panels/a11y/a11y-score.component.d.ts +8 -3
  96. package/dist/app/panels/a11y/a11y-score.component.d.ts.map +1 -1
  97. package/dist/app/panels/a11y/a11y-score.component.js +19 -35
  98. package/dist/app/panels/a11y/a11y-sr-overlay.component.js +2 -2
  99. package/dist/app/panels/a11y/a11y-sr.component.js +2 -2
  100. package/dist/app/panels/a11y/a11y-summary.d.ts.map +1 -1
  101. package/dist/app/panels/a11y/a11y-summary.js +8 -1
  102. package/dist/app/panels/a11y/a11y-tree.component.js +2 -2
  103. package/dist/app/panels/a11y/a11y-violations.component.d.ts +23 -2
  104. package/dist/app/panels/a11y/a11y-violations.component.d.ts.map +1 -1
  105. package/dist/app/panels/a11y/a11y-violations.component.js +104 -89
  106. package/dist/app/panels/a11y/severity.d.ts +9 -0
  107. package/dist/app/panels/a11y/severity.d.ts.map +1 -0
  108. package/dist/app/panels/a11y/severity.js +12 -0
  109. package/dist/app/panels/controls/controls-plugin.d.ts.map +1 -1
  110. package/dist/app/panels/controls/controls-plugin.js +1 -2
  111. package/dist/app/panels/controls/non-editable-input-types.d.ts +9 -1
  112. package/dist/app/panels/controls/non-editable-input-types.d.ts.map +1 -1
  113. package/dist/app/panels/controls/non-editable-input-types.js +18 -0
  114. package/dist/app/panels/controls/prism-controls-panel.component.d.ts +2 -1
  115. package/dist/app/panels/controls/prism-controls-panel.component.d.ts.map +1 -1
  116. package/dist/app/panels/controls/prism-controls-panel.component.js +77 -59
  117. package/dist/app/panels/events/events-plugin.d.ts.map +1 -1
  118. package/dist/app/panels/events/events-plugin.js +1 -2
  119. package/dist/app/panels/events/prism-events-panel.component.d.ts +2 -0
  120. package/dist/app/panels/events/prism-events-panel.component.d.ts.map +1 -1
  121. package/dist/app/panels/events/prism-events-panel.component.js +20 -7
  122. package/dist/app/panels/events/prism-json-node.utils.d.ts +6 -0
  123. package/dist/app/panels/events/prism-json-node.utils.d.ts.map +1 -1
  124. package/dist/app/panels/events/prism-json-node.utils.js +8 -0
  125. package/dist/app/panels/panel-host/addon-panels.d.ts +11 -0
  126. package/dist/app/panels/panel-host/addon-panels.d.ts.map +1 -0
  127. package/dist/app/panels/panel-host/addon-panels.js +12 -0
  128. package/dist/app/panels/panel-host/panel-badge.d.ts +22 -0
  129. package/dist/app/panels/panel-host/panel-badge.d.ts.map +1 -1
  130. package/dist/app/panels/panel-host/panel-badge.js +56 -11
  131. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts +4 -1
  132. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts.map +1 -1
  133. package/dist/app/panels/panel-host/prism-panel-host.component.js +36 -70
  134. package/dist/app/pseudo/pseudo-state-marker.d.ts +32 -10
  135. package/dist/app/pseudo/pseudo-state-marker.d.ts.map +1 -1
  136. package/dist/app/pseudo/pseudo-state-marker.js +83 -67
  137. package/dist/app/pseudo/pseudo-targets.d.ts +11 -0
  138. package/dist/app/pseudo/pseudo-targets.d.ts.map +1 -0
  139. package/dist/app/pseudo/pseudo-targets.js +46 -0
  140. package/dist/app/pseudo/state-fit.d.ts +28 -0
  141. package/dist/app/pseudo/state-fit.d.ts.map +1 -0
  142. package/dist/app/pseudo/state-fit.js +97 -0
  143. package/dist/app/renderer/composition.d.ts +20 -0
  144. package/dist/app/renderer/composition.d.ts.map +1 -0
  145. package/dist/app/renderer/composition.js +26 -0
  146. package/dist/app/renderer/input-bindings.d.ts +28 -0
  147. package/dist/app/renderer/input-bindings.d.ts.map +1 -0
  148. package/dist/app/renderer/input-bindings.js +42 -0
  149. package/dist/app/renderer/known-inputs.d.ts +8 -1
  150. package/dist/app/renderer/known-inputs.d.ts.map +1 -1
  151. package/dist/app/renderer/known-inputs.js +13 -5
  152. package/dist/app/renderer/prism-renderer.component.d.ts +18 -4
  153. package/dist/app/renderer/prism-renderer.component.d.ts.map +1 -1
  154. package/dist/app/renderer/prism-renderer.component.js +78 -44
  155. package/dist/app/renderer/projectable-content.d.ts +8 -1
  156. package/dist/app/renderer/projectable-content.d.ts.map +1 -1
  157. package/dist/app/renderer/projectable-content.js +40 -29
  158. package/dist/app/renderer/rendered-key.d.ts +20 -6
  159. package/dist/app/renderer/rendered-key.d.ts.map +1 -1
  160. package/dist/app/renderer/rendered-key.js +25 -8
  161. package/dist/app/renderer/snippet-generator.d.ts +14 -2
  162. package/dist/app/renderer/snippet-generator.d.ts.map +1 -1
  163. package/dist/app/renderer/snippet-generator.js +138 -81
  164. package/dist/app/services/navigation-item.d.ts +10 -0
  165. package/dist/app/services/navigation-item.d.ts.map +1 -0
  166. package/dist/app/services/navigation-item.js +20 -0
  167. package/dist/app/services/navigation-item.types.d.ts +8 -0
  168. package/dist/app/services/navigation-item.types.d.ts.map +1 -1
  169. package/dist/app/services/prism-layout.service.d.ts +12 -0
  170. package/dist/app/services/prism-layout.service.d.ts.map +1 -1
  171. package/dist/app/services/prism-layout.service.js +17 -7
  172. package/dist/app/services/prism-manifest.service.d.ts +4 -0
  173. package/dist/app/services/prism-manifest.service.d.ts.map +1 -1
  174. package/dist/app/services/prism-manifest.service.js +4 -0
  175. package/dist/app/services/prism-navigation.service.d.ts +12 -0
  176. package/dist/app/services/prism-navigation.service.d.ts.map +1 -1
  177. package/dist/app/services/prism-navigation.service.js +85 -19
  178. package/dist/app/services/prism-panel.service.d.ts +7 -3
  179. package/dist/app/services/prism-panel.service.d.ts.map +1 -1
  180. package/dist/app/services/prism-panel.service.js +13 -4
  181. package/dist/app/services/prism-pseudo-state.service.d.ts +59 -14
  182. package/dist/app/services/prism-pseudo-state.service.d.ts.map +1 -1
  183. package/dist/app/services/prism-pseudo-state.service.js +86 -29
  184. package/dist/app/services/prism-renderer.service.d.ts +23 -0
  185. package/dist/app/services/prism-renderer.service.d.ts.map +1 -1
  186. package/dist/app/services/prism-renderer.service.js +77 -8
  187. package/dist/app/services/prism-search.service.d.ts +4 -0
  188. package/dist/app/services/prism-search.service.d.ts.map +1 -1
  189. package/dist/app/services/prism-search.service.js +29 -6
  190. package/dist/app/services/prism-theme.service.d.ts +11 -3
  191. package/dist/app/services/prism-theme.service.d.ts.map +1 -1
  192. package/dist/app/services/prism-theme.service.js +27 -19
  193. package/dist/app/services/prism-url-state.service.d.ts.map +1 -1
  194. package/dist/app/services/prism-url-state.service.js +81 -12
  195. package/dist/app/shared/badge.types.d.ts +7 -0
  196. package/dist/app/shared/badge.types.d.ts.map +1 -0
  197. package/dist/app/shared/badge.types.js +9 -0
  198. package/dist/app/shared/brand-mark.d.ts +35 -0
  199. package/dist/app/shared/brand-mark.d.ts.map +1 -0
  200. package/dist/app/shared/brand-mark.js +52 -0
  201. package/dist/app/shared/metric-bar.d.ts +6 -0
  202. package/dist/app/shared/metric-bar.d.ts.map +1 -0
  203. package/dist/app/shared/metric-bar.js +7 -0
  204. package/dist/app/shared/prism-badge.component.d.ts +21 -0
  205. package/dist/app/shared/prism-badge.component.d.ts.map +1 -0
  206. package/dist/app/shared/prism-badge.component.js +68 -0
  207. package/dist/app/shared/prism-button.component.d.ts +12 -0
  208. package/dist/app/shared/prism-button.component.d.ts.map +1 -0
  209. package/dist/app/shared/prism-button.component.js +28 -0
  210. package/dist/app/shared/prism-icon-button.component.d.ts +17 -0
  211. package/dist/app/shared/prism-icon-button.component.d.ts.map +1 -0
  212. package/dist/app/shared/prism-icon-button.component.js +37 -0
  213. package/dist/app/shared/prism-list-row.component.d.ts +17 -0
  214. package/dist/app/shared/prism-list-row.component.d.ts.map +1 -0
  215. package/dist/app/shared/prism-list-row.component.js +57 -0
  216. package/dist/app/shared/prism-logo.component.d.ts +24 -0
  217. package/dist/app/shared/prism-logo.component.d.ts.map +1 -0
  218. package/dist/app/shared/prism-logo.component.js +77 -0
  219. package/dist/app/shared/prism-metric-badge.component.d.ts +9 -4
  220. package/dist/app/shared/prism-metric-badge.component.d.ts.map +1 -1
  221. package/dist/app/shared/prism-metric-badge.component.js +33 -12
  222. package/dist/app/shared/prism-metric-card.component.d.ts +30 -0
  223. package/dist/app/shared/prism-metric-card.component.d.ts.map +1 -0
  224. package/dist/app/shared/prism-metric-card.component.js +111 -0
  225. package/dist/app/shared/prism-panel-toolbar.component.d.ts +13 -0
  226. package/dist/app/shared/prism-panel-toolbar.component.d.ts.map +1 -0
  227. package/dist/app/shared/prism-panel-toolbar.component.js +28 -0
  228. package/dist/app/shared/prism-segmented.component.d.ts +25 -0
  229. package/dist/app/shared/prism-segmented.component.d.ts.map +1 -0
  230. package/dist/app/shared/prism-segmented.component.js +77 -0
  231. package/dist/app/shared/prism-tabs.component.d.ts +44 -0
  232. package/dist/app/shared/prism-tabs.component.d.ts.map +1 -0
  233. package/dist/app/shared/prism-tabs.component.js +134 -0
  234. package/dist/app/shared/roving-focus.d.ts +13 -0
  235. package/dist/app/shared/roving-focus.d.ts.map +1 -0
  236. package/dist/app/shared/roving-focus.js +34 -0
  237. package/dist/app/shell/prism-shell.component.d.ts +13 -0
  238. package/dist/app/shell/prism-shell.component.d.ts.map +1 -1
  239. package/dist/app/shell/prism-shell.component.js +57 -28
  240. package/dist/app/shell/should-select-first.d.ts +17 -0
  241. package/dist/app/shell/should-select-first.d.ts.map +1 -0
  242. package/dist/app/shell/should-select-first.js +13 -0
  243. package/dist/app/sidebar/navigation-decorations.d.ts +23 -1
  244. package/dist/app/sidebar/navigation-decorations.d.ts.map +1 -1
  245. package/dist/app/sidebar/navigation-decorations.js +33 -2
  246. package/dist/app/sidebar/prism-sidebar.component.d.ts +5 -15
  247. package/dist/app/sidebar/prism-sidebar.component.d.ts.map +1 -1
  248. package/dist/app/sidebar/prism-sidebar.component.js +89 -77
  249. package/dist/app/theme/deprecated-tokens.d.ts +15 -0
  250. package/dist/app/theme/deprecated-tokens.d.ts.map +1 -0
  251. package/dist/app/theme/deprecated-tokens.js +22 -0
  252. package/dist/app/theme/favicon.d.ts +3 -0
  253. package/dist/app/theme/favicon.d.ts.map +1 -0
  254. package/dist/app/theme/favicon.js +3 -0
  255. package/dist/app/theme/prism-default-theme.d.ts.map +1 -1
  256. package/dist/app/theme/prism-default-theme.js +122 -66
  257. package/dist/app/theme/resolve-theme-tokens.d.ts +29 -0
  258. package/dist/app/theme/resolve-theme-tokens.d.ts.map +1 -0
  259. package/dist/app/theme/resolve-theme-tokens.js +43 -0
  260. package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts +4 -7
  261. package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts.map +1 -1
  262. package/dist/app/variant-ribbon/prism-variant-ribbon.component.js +31 -69
  263. package/dist/app/view-tab-bar/next-view-id.d.ts +7 -1
  264. package/dist/app/view-tab-bar/next-view-id.d.ts.map +1 -1
  265. package/dist/app/view-tab-bar/next-view-id.js +9 -1
  266. package/dist/app/view-tab-bar/panel-inputs.d.ts +28 -0
  267. package/dist/app/view-tab-bar/panel-inputs.d.ts.map +1 -0
  268. package/dist/app/view-tab-bar/panel-inputs.js +41 -0
  269. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts +2 -3
  270. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts.map +1 -1
  271. package/dist/app/view-tab-bar/prism-view-panel-host.component.js +9 -9
  272. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts +6 -0
  273. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts.map +1 -1
  274. package/dist/app/view-tab-bar/prism-view-tab-bar.component.js +22 -29
  275. package/dist/builder/config-loader/deprecated-options.d.ts +9 -0
  276. package/dist/builder/config-loader/deprecated-options.d.ts.map +1 -0
  277. package/dist/builder/config-loader/deprecated-options.js +34 -0
  278. package/dist/builder/manifest/composition-wrapper.generator.d.ts +14 -0
  279. package/dist/builder/manifest/composition-wrapper.generator.d.ts.map +1 -0
  280. package/dist/builder/manifest/composition-wrapper.generator.js +66 -0
  281. package/dist/builder/manifest/host-parser.d.ts +2 -0
  282. package/dist/builder/manifest/host-parser.d.ts.map +1 -1
  283. package/dist/builder/manifest/host-parser.js +9 -4
  284. package/dist/builder/manifest/manifest-imports.d.ts +34 -0
  285. package/dist/builder/manifest/manifest-imports.d.ts.map +1 -0
  286. package/dist/builder/manifest/manifest-imports.js +91 -0
  287. package/dist/builder/manifest/runtime-manifest.generator.d.ts +13 -0
  288. package/dist/builder/manifest/runtime-manifest.generator.d.ts.map +1 -1
  289. package/dist/builder/manifest/runtime-manifest.generator.js +137 -65
  290. package/dist/builder/manifest/selector-element.d.ts +16 -0
  291. package/dist/builder/manifest/selector-element.d.ts.map +1 -0
  292. package/dist/builder/manifest/selector-element.js +46 -0
  293. package/dist/builder/manifest/template-literal.d.ts +3 -0
  294. package/dist/builder/manifest/template-literal.d.ts.map +1 -0
  295. package/dist/builder/manifest/template-literal.js +4 -0
  296. package/dist/builder/plugin-runner/plugin-runner.d.ts.map +1 -1
  297. package/dist/builder/plugin-runner/plugin-runner.js +29 -26
  298. package/dist/builder/scanner/api/angular-decorators.d.ts +84 -0
  299. package/dist/builder/scanner/api/angular-decorators.d.ts.map +1 -0
  300. package/dist/builder/scanner/api/angular-decorators.js +157 -0
  301. package/dist/builder/scanner/api/component-api.extractor.d.ts +13 -0
  302. package/dist/builder/scanner/api/component-api.extractor.d.ts.map +1 -0
  303. package/dist/builder/scanner/api/component-api.extractor.js +104 -0
  304. package/dist/builder/scanner/api/doc-tags.d.ts +13 -0
  305. package/dist/builder/scanner/api/doc-tags.d.ts.map +1 -0
  306. package/dist/builder/scanner/api/doc-tags.js +101 -0
  307. package/dist/builder/scanner/api/export-index.d.ts +18 -0
  308. package/dist/builder/scanner/api/export-index.d.ts.map +1 -0
  309. package/dist/builder/scanner/api/export-index.js +22 -0
  310. package/dist/builder/scanner/api/member.extractor.d.ts +90 -0
  311. package/dist/builder/scanner/api/member.extractor.d.ts.map +1 -0
  312. package/dist/builder/scanner/api/member.extractor.js +270 -0
  313. package/dist/builder/scanner/api/pipe-api.extractor.d.ts +12 -0
  314. package/dist/builder/scanner/api/pipe-api.extractor.d.ts.map +1 -0
  315. package/dist/builder/scanner/api/pipe-api.extractor.js +52 -0
  316. package/dist/builder/scanner/api/service-api.extractor.d.ts +14 -0
  317. package/dist/builder/scanner/api/service-api.extractor.d.ts.map +1 -0
  318. package/dist/builder/scanner/api/service-api.extractor.js +119 -0
  319. package/dist/builder/scanner/api/setup.reader.d.ts +26 -0
  320. package/dist/builder/scanner/api/setup.reader.d.ts.map +1 -0
  321. package/dist/builder/scanner/api/setup.reader.js +89 -0
  322. package/dist/builder/scanner/api/type-collector.d.ts +24 -0
  323. package/dist/builder/scanner/api/type-collector.d.ts.map +1 -0
  324. package/dist/builder/scanner/api/type-collector.js +211 -0
  325. package/dist/builder/scanner/ast-utils.d.ts +8 -0
  326. package/dist/builder/scanner/ast-utils.d.ts.map +1 -1
  327. package/dist/builder/scanner/ast-utils.js +37 -1
  328. package/dist/builder/scanner/class-hierarchy.d.ts +5 -3
  329. package/dist/builder/scanner/class-hierarchy.d.ts.map +1 -1
  330. package/dist/builder/scanner/class-hierarchy.js +12 -6
  331. package/dist/builder/scanner/component.scanner.d.ts +60 -6
  332. package/dist/builder/scanner/component.scanner.d.ts.map +1 -1
  333. package/dist/builder/scanner/component.scanner.js +229 -58
  334. package/dist/builder/scanner/composition/compose-template.d.ts +36 -0
  335. package/dist/builder/scanner/composition/compose-template.d.ts.map +1 -0
  336. package/dist/builder/scanner/composition/compose-template.js +187 -0
  337. package/dist/builder/scanner/composition/declarables.d.ts +54 -0
  338. package/dist/builder/scanner/composition/declarables.d.ts.map +1 -0
  339. package/dist/builder/scanner/composition/declarables.js +182 -0
  340. package/dist/builder/scanner/composition/match-declarables.d.ts +43 -0
  341. package/dist/builder/scanner/composition/match-declarables.d.ts.map +1 -0
  342. package/dist/builder/scanner/composition/match-declarables.js +131 -0
  343. package/dist/builder/scanner/composition/read-composition.d.ts +77 -0
  344. package/dist/builder/scanner/composition/read-composition.d.ts.map +1 -0
  345. package/dist/builder/scanner/composition/read-composition.js +302 -0
  346. package/dist/builder/scanner/composition/template-elements.d.ts +12 -0
  347. package/dist/builder/scanner/composition/template-elements.d.ts.map +1 -0
  348. package/dist/builder/scanner/composition/template-elements.js +41 -0
  349. package/dist/builder/scanner/entry-point-discovery.d.ts +5 -0
  350. package/dist/builder/scanner/entry-point-discovery.d.ts.map +1 -1
  351. package/dist/builder/scanner/entry-point-discovery.js +14 -0
  352. package/dist/builder/scanner/entry-point.scanner.d.ts +3 -1
  353. package/dist/builder/scanner/entry-point.scanner.d.ts.map +1 -1
  354. package/dist/builder/scanner/entry-point.scanner.js +7 -6
  355. package/dist/builder/scanner/index.d.ts +4 -0
  356. package/dist/builder/scanner/index.d.ts.map +1 -1
  357. package/dist/builder/scanner/index.js +2 -0
  358. package/dist/builder/scanner/input.extractor.d.ts +31 -2
  359. package/dist/builder/scanner/input.extractor.d.ts.map +1 -1
  360. package/dist/builder/scanner/input.extractor.js +73 -17
  361. package/dist/builder/scanner/pipe.scanner.d.ts +29 -0
  362. package/dist/builder/scanner/pipe.scanner.d.ts.map +1 -0
  363. package/dist/builder/scanner/pipe.scanner.js +65 -0
  364. package/dist/builder/scanner/pseudo-states.d.ts +1 -0
  365. package/dist/builder/scanner/pseudo-states.d.ts.map +1 -1
  366. package/dist/builder/scanner/pseudo-states.js +1 -1
  367. package/dist/builder/scanner/scanner.d.ts +27 -3
  368. package/dist/builder/scanner/scanner.d.ts.map +1 -1
  369. package/dist/builder/scanner/scanner.js +68 -24
  370. package/dist/builder/scanner/service/angular-decorators.d.ts +80 -0
  371. package/dist/builder/scanner/service/angular-decorators.d.ts.map +1 -0
  372. package/dist/builder/scanner/service/angular-decorators.js +154 -0
  373. package/dist/builder/scanner/service/doc-tags.d.ts +13 -0
  374. package/dist/builder/scanner/service/doc-tags.d.ts.map +1 -0
  375. package/dist/builder/scanner/service/doc-tags.js +97 -0
  376. package/dist/builder/scanner/service/export-index.d.ts +18 -0
  377. package/dist/builder/scanner/service/export-index.d.ts.map +1 -0
  378. package/dist/builder/scanner/service/export-index.js +22 -0
  379. package/dist/builder/scanner/service/member.extractor.d.ts +65 -0
  380. package/dist/builder/scanner/service/member.extractor.d.ts.map +1 -0
  381. package/dist/builder/scanner/service/member.extractor.js +216 -0
  382. package/dist/builder/scanner/service/pipe-api.extractor.d.ts +12 -0
  383. package/dist/builder/scanner/service/pipe-api.extractor.d.ts.map +1 -0
  384. package/dist/builder/scanner/service/pipe-api.extractor.js +72 -0
  385. package/dist/builder/scanner/service/service-api.extractor.d.ts +14 -0
  386. package/dist/builder/scanner/service/service-api.extractor.d.ts.map +1 -0
  387. package/dist/builder/scanner/service/service-api.extractor.js +119 -0
  388. package/dist/builder/scanner/service/setup.reader.d.ts +26 -0
  389. package/dist/builder/scanner/service/setup.reader.d.ts.map +1 -0
  390. package/dist/builder/scanner/service/setup.reader.js +89 -0
  391. package/dist/builder/scanner/service/type-collector.d.ts +23 -0
  392. package/dist/builder/scanner/service/type-collector.d.ts.map +1 -0
  393. package/dist/builder/scanner/service/type-collector.js +210 -0
  394. package/dist/builder/scanner/service.scanner.d.ts +26 -0
  395. package/dist/builder/scanner/service.scanner.d.ts.map +1 -0
  396. package/dist/builder/scanner/service.scanner.js +61 -0
  397. package/dist/builder/scanner/showcase-diagnostics.d.ts +60 -1
  398. package/dist/builder/scanner/showcase-diagnostics.d.ts.map +1 -1
  399. package/dist/builder/scanner/showcase-diagnostics.js +123 -10
  400. package/dist/builder/scanner/showcase-states.d.ts +17 -0
  401. package/dist/builder/scanner/showcase-states.d.ts.map +1 -0
  402. package/dist/builder/scanner/showcase-states.js +58 -0
  403. package/dist/builder/scanner/source-file-cache.d.ts +26 -0
  404. package/dist/builder/scanner/source-file-cache.d.ts.map +1 -0
  405. package/dist/builder/scanner/source-file-cache.js +60 -0
  406. package/dist/builder/shared/prism-pipeline.d.ts +6 -0
  407. package/dist/builder/shared/prism-pipeline.d.ts.map +1 -1
  408. package/dist/builder/shared/prism-pipeline.js +71 -18
  409. package/dist/decorator/index.d.ts +1 -1
  410. package/dist/decorator/index.d.ts.map +1 -1
  411. package/dist/decorator/showcase.types.d.ts +102 -9
  412. package/dist/decorator/showcase.types.d.ts.map +1 -1
  413. package/dist/plugin/index.d.ts +6 -1
  414. package/dist/plugin/index.d.ts.map +1 -1
  415. package/dist/plugin/index.js +4 -0
  416. package/dist/plugin/pipe.types.d.ts +36 -0
  417. package/dist/plugin/pipe.types.d.ts.map +1 -0
  418. package/dist/plugin/pipe.types.js +1 -0
  419. package/dist/plugin/plugin.types.d.ts +184 -8
  420. package/dist/plugin/plugin.types.d.ts.map +1 -1
  421. package/dist/plugin/service.types.d.ts +124 -0
  422. package/dist/plugin/service.types.d.ts.map +1 -0
  423. package/dist/plugin/service.types.js +1 -0
  424. package/dist/plugin/status.d.ts +27 -0
  425. package/dist/plugin/status.d.ts.map +1 -0
  426. package/dist/plugin/status.js +26 -0
  427. package/dist/shared/composition.d.ts +30 -0
  428. package/dist/shared/composition.d.ts.map +1 -0
  429. package/dist/shared/composition.js +29 -0
  430. package/dist/shared/pseudo-state.type.d.ts +2 -1
  431. package/dist/shared/pseudo-state.type.d.ts.map +1 -1
  432. package/dist/shared/void-elements.d.ts +3 -0
  433. package/dist/shared/void-elements.d.ts.map +1 -0
  434. package/dist/shared/void-elements.js +2 -0
  435. package/package.json +1 -1
  436. package/src/builder/build/schema.json +6 -6
  437. package/src/builder/serve/schema.json +6 -6
@@ -1,75 +1,95 @@
1
- import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
1
+ import { afterRenderEffect, ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';
2
2
  import { CANVAS_BGS } from '../../shared/canvas-bg.type.js';
3
3
  import { PSEUDO_STATES } from '../../shared/pseudo-state.type.js';
4
4
  import { VIEWPORT_SNAPS } from '../../shared/viewport.type.js';
5
5
  import { PrismIconComponent } from '../icons/prism-icon.component.js';
6
+ import { evaluateStateFit } from '../pseudo/state-fit.js';
6
7
  import { PrismCanvasService } from '../services/prism-canvas.service.js';
8
+ import { PrismNavigationService } from '../services/prism-navigation.service.js';
7
9
  import { PrismPseudoStateService } from '../services/prism-pseudo-state.service.js';
10
+ import { PrismRendererService } from '../services/prism-renderer.service.js';
8
11
  import { PrismVariantBgService } from '../services/prism-variant-bg.service.js';
12
+ import { PrismIconButtonComponent } from '../shared/prism-icon-button.component.js';
13
+ import { railToggleTitle, zoomTitle } from './canvas-overlay-tokens.js';
14
+ import { buildStateChips, chipFits, toggleTitle } from './state-chips.js';
9
15
  import * as i0 from "@angular/core";
10
16
  const _forTrack0 = ($index, $item) => $item.value;
11
- function PrismCanvasToolbarComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
12
- i0.ɵɵelementStart(0, "span", 2);
17
+ const _forTrack1 = ($index, $item) => $item.index;
18
+ function PrismCanvasToolbarComponent_For_21_Template(rf, ctx) { if (rf & 1) {
19
+ const _r1 = i0.ɵɵgetCurrentView();
20
+ i0.ɵɵelementStart(0, "button", 20);
21
+ i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_For_21_Template_button_click_0_listener() { const bg_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.setBg(bg_r2)); });
13
22
  i0.ɵɵtext(1);
14
23
  i0.ɵɵelementEnd();
15
24
  } if (rf & 2) {
16
- const ctx_r0 = i0.ɵɵnextContext();
25
+ const bg_r2 = ctx.$implicit;
26
+ const ctx_r2 = i0.ɵɵnextContext();
27
+ i0.ɵɵclassProp("is-on", ctx_r2.variantBg.effective() === bg_r2)("is-rec", ctx_r2.variantBg.recommended() === bg_r2);
28
+ i0.ɵɵattribute("title", ctx_r2.bgTitle(bg_r2));
17
29
  i0.ɵɵadvance();
18
- i0.ɵɵtextInterpolate1("", ctx_r0.canvas.viewportWidth(), "px");
30
+ i0.ɵɵtextInterpolate1(" ", ctx_r2.capitalize(bg_r2), " ");
19
31
  } }
20
- function PrismCanvasToolbarComponent_For_22_Template(rf, ctx) { if (rf & 1) {
21
- const _r2 = i0.ɵɵgetCurrentView();
22
- i0.ɵɵelementStart(0, "button", 21);
23
- i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_For_22_Template_button_click_0_listener() { const bg_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setBg(bg_r3)); });
32
+ function PrismCanvasToolbarComponent_Conditional_24_For_2_Template(rf, ctx) { if (rf & 1) {
33
+ const _r4 = i0.ɵɵgetCurrentView();
34
+ i0.ɵɵelementStart(0, "button", 22);
35
+ i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_Conditional_24_For_2_Template_button_click_0_listener() { const chip_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.pickState(chip_r5)); });
24
36
  i0.ɵɵtext(1);
25
37
  i0.ɵɵelementEnd();
26
38
  } if (rf & 2) {
27
- const bg_r3 = ctx.$implicit;
28
- const ctx_r0 = i0.ɵɵnextContext();
29
- i0.ɵɵclassProp("is-on", ctx_r0.variantBg.effective() === bg_r3)("is-rec", ctx_r0.variantBg.recommended() === bg_r3);
30
- i0.ɵɵattribute("title", ctx_r0.bgTitle(bg_r3));
39
+ const chip_r5 = ctx.$implicit;
40
+ i0.ɵɵclassProp("is-on", chip_r5.active)("is-na", !chip_r5.fits);
41
+ i0.ɵɵattribute("aria-pressed", chip_r5.active)("title", chip_r5.title);
42
+ i0.ɵɵadvance();
43
+ i0.ɵɵtextInterpolate1(" ", chip_r5.name, " ");
44
+ } }
45
+ function PrismCanvasToolbarComponent_Conditional_24_Template(rf, ctx) { if (rf & 1) {
46
+ i0.ɵɵelementStart(0, "div", 17);
47
+ i0.ɵɵrepeaterCreate(1, PrismCanvasToolbarComponent_Conditional_24_For_2_Template, 2, 7, "button", 21, _forTrack1);
48
+ i0.ɵɵelementEnd();
49
+ } if (rf & 2) {
50
+ const ctx_r2 = i0.ɵɵnextContext();
31
51
  i0.ɵɵadvance();
32
- i0.ɵɵtextInterpolate1(" ", ctx_r0.capitalize(bg_r3), " ");
52
+ i0.ɵɵrepeater(ctx_r2.chips());
33
53
  } }
34
54
  function PrismCanvasToolbarComponent_For_27_Template(rf, ctx) { if (rf & 1) {
35
- const _r4 = i0.ɵɵgetCurrentView();
36
- i0.ɵɵelementStart(0, "button", 21);
37
- i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_For_27_Template_button_click_0_listener() { const state_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.pseudoState.toggle(state_r5)); });
55
+ const _r6 = i0.ɵɵgetCurrentView();
56
+ i0.ɵɵelementStart(0, "button", 20);
57
+ i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_For_27_Template_button_click_0_listener() { const state_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.pseudoState.toggle(state_r7)); });
38
58
  i0.ɵɵtext(1);
39
59
  i0.ɵɵelementEnd();
40
60
  } if (rf & 2) {
41
- const state_r5 = ctx.$implicit;
42
- const ctx_r0 = i0.ɵɵnextContext();
43
- i0.ɵɵclassProp("is-on", ctx_r0.pseudoState.isForced(state_r5))("is-rec", ctx_r0.pseudoState.isDeclared(state_r5));
44
- i0.ɵɵattribute("aria-pressed", ctx_r0.pseudoState.isForced(state_r5))("title", ctx_r0.stateTitle(state_r5));
61
+ const state_r7 = ctx.$implicit;
62
+ const ctx_r2 = i0.ɵɵnextContext();
63
+ i0.ɵɵclassProp("is-on", ctx_r2.pseudoState.isForced(state_r7))("is-rec", ctx_r2.pseudoState.isDeclared(state_r7));
64
+ i0.ɵɵattribute("aria-pressed", ctx_r2.pseudoState.isForced(state_r7))("title", ctx_r2.stateTitle(state_r7));
45
65
  i0.ɵɵadvance();
46
- i0.ɵɵtextInterpolate1(" :", state_r5, " ");
66
+ i0.ɵɵtextInterpolate1(" :", state_r7, " ");
47
67
  } }
48
68
  function PrismCanvasToolbarComponent_For_32_Template(rf, ctx) { if (rf & 1) {
49
- const _r6 = i0.ɵɵgetCurrentView();
50
- i0.ɵɵelementStart(0, "button", 21);
51
- i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_For_32_Template_button_click_0_listener() { const z_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.canvas.setZoom(z_r7.value)); });
69
+ const _r8 = i0.ɵɵgetCurrentView();
70
+ i0.ɵɵelementStart(0, "button", 20);
71
+ i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_For_32_Template_button_click_0_listener() { const z_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.canvas.setZoom(z_r9.value)); });
52
72
  i0.ɵɵtext(1);
53
73
  i0.ɵɵelementEnd();
54
74
  } if (rf & 2) {
55
- const z_r7 = ctx.$implicit;
56
- const ctx_r0 = i0.ɵɵnextContext();
57
- i0.ɵɵclassProp("is-on", ctx_r0.canvas.zoom() === z_r7.value);
75
+ const z_r9 = ctx.$implicit;
76
+ const ctx_r2 = i0.ɵɵnextContext();
77
+ i0.ɵɵclassProp("is-on", ctx_r2.canvas.zoom() === z_r9.value);
58
78
  i0.ɵɵadvance();
59
- i0.ɵɵtextInterpolate1(" ", z_r7.label, " ");
79
+ i0.ɵɵtextInterpolate1(" ", z_r9.label, " ");
60
80
  } }
61
81
  function PrismCanvasToolbarComponent_For_39_Template(rf, ctx) { if (rf & 1) {
62
- const _r8 = i0.ɵɵgetCurrentView();
63
- i0.ɵɵelementStart(0, "button", 21);
64
- i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_For_39_Template_button_click_0_listener() { const w_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.canvas.setViewportWidth(w_r9)); });
82
+ const _r10 = i0.ɵɵgetCurrentView();
83
+ i0.ɵɵelementStart(0, "button", 20);
84
+ i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_For_39_Template_button_click_0_listener() { const w_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.canvas.setViewportWidth(w_r11)); });
65
85
  i0.ɵɵtext(1);
66
86
  i0.ɵɵelementEnd();
67
87
  } if (rf & 2) {
68
- const w_r9 = ctx.$implicit;
69
- const ctx_r0 = i0.ɵɵnextContext();
70
- i0.ɵɵclassProp("is-on", ctx_r0.canvas.viewportWidth() === w_r9);
88
+ const w_r11 = ctx.$implicit;
89
+ const ctx_r2 = i0.ɵɵnextContext();
90
+ i0.ɵɵclassProp("is-on", ctx_r2.canvas.viewportWidth() === w_r11);
71
91
  i0.ɵɵadvance();
72
- i0.ɵɵtextInterpolate1(" ", w_r9, " ");
92
+ i0.ɵɵtextInterpolate1(" ", w_r11, " ");
73
93
  } }
74
94
  /**
75
95
  * The canvas tools, as a rail floating over the canvas.
@@ -77,8 +97,7 @@ function PrismCanvasToolbarComponent_For_39_Template(rf, ctx) { if (rf & 1) {
77
97
  * Things you toggle constantly (guides, rulers, the viewport constraint) get
78
98
  * their own button; things you set once (background, forced state, zoom,
79
99
  * viewport width) live in the menu. The template is a view rather than a setting and keeps its own
80
- * button. Zoom and the active viewport width are shown as readouts; the width
81
- * only appears while the viewport constraint is on.
100
+ * button. Zoom is shown as a readout, with the viewport width in its tooltip.
82
101
  *
83
102
  * The host generates no box. The rail must be a direct child of
84
103
  * `.prism-canvas-wrap` outside the stage, because that is what capture mode's
@@ -90,17 +109,65 @@ export class PrismCanvasToolbarComponent {
90
109
  canvas = inject(PrismCanvasService);
91
110
  variantBg = inject(PrismVariantBgService);
92
111
  pseudoState = inject(PrismPseudoStateService);
112
+ navigation = inject(PrismNavigationService);
113
+ renderer = inject(PrismRendererService);
93
114
  /**
94
115
  * The pseudo states the canvas can force, as toggles. Several can be on at
95
116
  * once (`:hover` with `:focus-visible`). The active ones carry `is-on`, the
96
- * ones the variant declares the `is-rec` edge, as in the Canvas group.
117
+ * ones the variant or the active state declares the `is-rec` edge, as in the
118
+ * Canvas group.
97
119
  */
98
120
  states = PSEUDO_STATES;
99
121
  stateTitle(state) {
100
- return this.pseudoState.isDeclared(state) ? `:${state} is forced by this variant` : `Force :${state} on the whole component`;
122
+ return toggleTitle(state, this.declaredBy(state));
123
+ }
124
+ /** The variant first. Otherwise the active state, which {@link PrismPseudoStateService.isDeclared} only counts while it fits. */
125
+ declaredBy(state) {
126
+ if (this.pseudoState.declared()?.[state] !== undefined)
127
+ return { by: 'variant' };
128
+ const active = this.pseudoState.activeState();
129
+ return active !== null && this.pseudoState.isDeclared(state) ? { by: 'state', name: active.name } : null;
130
+ }
131
+ /** The component's declared states, as chips above the toggles. Empty for a component without any, which then shows no row. */
132
+ declaredStates = computed(() => this.navigation.activeComponent()?.meta.showcaseConfig.states ?? [], /* @ts-ignore */
133
+ ...(ngDevMode ? [{ debugName: "declaredStates" }] : /* istanbul ignore next */ []));
134
+ /** Whether the shown variant has `states: false`. `stateExclusion` says so only while a state is active, the chips need it before. */
135
+ variantOptsOut = computed(() => this.navigation.activeComponent()?.meta.showcaseConfig.variants?.[this.renderer.activeVariantIndex()]?.states === false, /* @ts-ignore */
136
+ ...(ngDevMode ? [{ debugName: "variantOptsOut" }] : /* istanbul ignore next */ []));
137
+ /**
138
+ * Whether each declared state fits the rendered component. Measured after
139
+ * the render because the fit depends on the DOM, which a control or a
140
+ * variant change rewrites: a state can lose its target to a toggled input.
141
+ * Equal results keep the old array, so typing into a text control does not
142
+ * re-render the menu for nothing.
143
+ */
144
+ fits = signal([], { ...(ngDevMode ? { debugName: "fits" } : /* istanbul ignore next */ {}), equal: (a, b) => JSON.stringify(a) === JSON.stringify(b) });
145
+ chips = computed(() => buildStateChips(this.declaredStates(), this.renderer.activeStateIndex(), this.fits()), /* @ts-ignore */
146
+ ...(ngDevMode ? [{ debugName: "chips" }] : /* istanbul ignore next */ []));
147
+ constructor() {
148
+ afterRenderEffect({
149
+ read: () => {
150
+ // Not a value of the fit, but what rewrites the DOM it is measured on.
151
+ this.renderer.inputValues();
152
+ this.fits.set(chipFits(this.declaredStates(), {
153
+ element: this.renderer.renderedElement(),
154
+ optedOut: this.variantOptsOut(),
155
+ activeIndex: this.renderer.activeStateIndex(),
156
+ canvasFit: this.pseudoState.canvasFit()
157
+ }, evaluateStateFit));
158
+ }
159
+ });
160
+ }
161
+ pickState(chip) {
162
+ this.renderer.selectState(chip.active ? null : chip.index);
101
163
  }
102
164
  /** Angular templates resolve names against the component, not the global scope. */
103
165
  Math = Math;
166
+ zoomTitle = computed(() => zoomTitle(this.canvas.zoom(), this.canvas.viewportWidth()), /* @ts-ignore */
167
+ ...(ngDevMode ? [{ debugName: "zoomTitle" }] : /* istanbul ignore next */ []));
168
+ railTitle(label, on) {
169
+ return railToggleTitle(label, on);
170
+ }
104
171
  setBg(bg) {
105
172
  if (this.variantBg.recommended() !== null) {
106
173
  this.variantBg.setOverride(bg);
@@ -158,85 +225,81 @@ export class PrismCanvasToolbarComponent {
158
225
  return s.charAt(0).toUpperCase() + s.slice(1);
159
226
  }
160
227
  static ɵfac = function PrismCanvasToolbarComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PrismCanvasToolbarComponent)(); };
161
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismCanvasToolbarComponent, selectors: [["prism-canvas-toolbar"]], decls: 40, vars: 24, consts: [[1, "prism-toolrail"], [1, "prism-toolrail__zoom"], [1, "prism-toolrail__vp"], ["type", "button", "title", "Toggle guides", "aria-label", "Toggle guides", 1, "prism-toolrail__btn", 3, "click"], ["name", "crosshair", 3, "size"], ["type", "button", "title", "Toggle rulers", "aria-label", "Toggle rulers", 1, "prism-toolrail__btn", 3, "click"], ["name", "move", 3, "size"], ["type", "button", "title", "Toggle viewport width", "aria-label", "Toggle viewport width", 1, "prism-toolrail__btn", 3, "click"], ["name", "ruler-dimension", 3, "size"], ["type", "button", "title", "Toggle measure tool", "aria-label", "Toggle measure tool", 1, "prism-toolrail__btn", 3, "click"], ["name", "ruler", 3, "size"], ["type", "button", "popovertarget", "prism-tools", "title", "Canvas, state, zoom and width", "aria-label", "Canvas, state, zoom and width", 1, "prism-toolrail__btn"], ["name", "sliders-horizontal", 3, "size"], [1, "prism-toolrail__sep"], ["type", "button", "popovertarget", "prism-template", "title", "Toggle Angular template", "aria-label", "Toggle Angular template", 1, "prism-toolrail__btn"], ["name", "code", 3, "size"], ["popover", "", "id", "prism-tools", "role", "dialog", "aria-label", "Canvas, state, zoom and width", 1, "prism-toolmenu"], [1, "prism-toolmenu__lbl"], [1, "prism-toolmenu__row"], ["type", "button", 3, "is-on", "is-rec"], ["type", "button", 3, "is-on"], ["type", "button", 3, "click"]], template: function PrismCanvasToolbarComponent_Template(rf, ctx) { if (rf & 1) {
228
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismCanvasToolbarComponent, selectors: [["prism-canvas-toolbar"]], decls: 40, vars: 21, consts: [[1, "prism-toolrail"], [1, "prism-toolrail__zoom"], ["prismIconButton", "", "size", "xs", "aria-label", "Guides", 3, "click", "pressed", "title"], ["name", "crosshair", 3, "size"], ["prismIconButton", "", "size", "xs", "aria-label", "Rulers", 3, "click", "pressed", "title"], ["name", "move", 3, "size"], ["prismIconButton", "", "size", "xs", "aria-label", "Viewport width", 3, "click", "pressed", "title"], ["name", "ruler-dimension", 3, "size"], ["prismIconButton", "", "size", "xs", "aria-label", "Measure", 3, "click", "pressed", "title"], ["name", "ruler", 3, "size"], ["prismIconButton", "", "size", "xs", "popovertarget", "prism-tools", "title", "Canvas, state, zoom and width", "aria-label", "Canvas, state, zoom and width"], ["name", "sliders-horizontal", 3, "size"], [1, "prism-toolrail__sep"], ["prismIconButton", "", "size", "xs", "popovertarget", "prism-template", "title", "Angular template", "aria-label", "Angular template"], ["name", "code", 3, "size"], ["popover", "", "id", "prism-tools", "role", "dialog", "aria-label", "Canvas, state, zoom and width", 1, "prism-toolmenu"], [1, "prism-toolmenu__lbl"], [1, "prism-toolmenu__row"], ["type", "button", 3, "is-on", "is-rec"], ["type", "button", 3, "is-on"], ["type", "button", 3, "click"], ["type", "button", 1, "is-rec", 3, "is-on", "is-na"], ["type", "button", 1, "is-rec", 3, "click"]], template: function PrismCanvasToolbarComponent_Template(rf, ctx) { if (rf & 1) {
162
229
  i0.ɵɵelementStart(0, "div", 0)(1, "span", 1);
163
230
  i0.ɵɵtext(2);
164
- i0.ɵɵconditionalCreate(3, PrismCanvasToolbarComponent_Conditional_3_Template, 2, 1, "span", 2);
165
231
  i0.ɵɵelementEnd();
166
- i0.ɵɵelementStart(4, "button", 3);
167
- i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_Template_button_click_4_listener() { return ctx.canvas.toggleGuides(); });
168
- i0.ɵɵelement(5, "prism-icon", 4);
232
+ i0.ɵɵelementStart(3, "button", 2);
233
+ i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_Template_button_click_3_listener() { return ctx.canvas.toggleGuides(); });
234
+ i0.ɵɵelement(4, "prism-icon", 3);
169
235
  i0.ɵɵelementEnd();
170
- i0.ɵɵelementStart(6, "button", 5);
171
- i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_Template_button_click_6_listener() { return ctx.canvas.toggleRulers(); });
172
- i0.ɵɵelement(7, "prism-icon", 6);
236
+ i0.ɵɵelementStart(5, "button", 4);
237
+ i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_Template_button_click_5_listener() { return ctx.canvas.toggleRulers(); });
238
+ i0.ɵɵelement(6, "prism-icon", 5);
173
239
  i0.ɵɵelementEnd();
174
- i0.ɵɵelementStart(8, "button", 7);
175
- i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_Template_button_click_8_listener() { return ctx.canvas.toggleViewport(); });
176
- i0.ɵɵelement(9, "prism-icon", 8);
240
+ i0.ɵɵelementStart(7, "button", 6);
241
+ i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_Template_button_click_7_listener() { return ctx.canvas.toggleViewport(); });
242
+ i0.ɵɵelement(8, "prism-icon", 7);
177
243
  i0.ɵɵelementEnd();
178
- i0.ɵɵelementStart(10, "button", 9);
179
- i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_Template_button_click_10_listener() { return ctx.canvas.toggleMeasure(); });
180
- i0.ɵɵelement(11, "prism-icon", 10);
244
+ i0.ɵɵelementStart(9, "button", 8);
245
+ i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_Template_button_click_9_listener() { return ctx.canvas.toggleMeasure(); });
246
+ i0.ɵɵelement(10, "prism-icon", 9);
181
247
  i0.ɵɵelementEnd();
182
- i0.ɵɵelementStart(12, "button", 11);
183
- i0.ɵɵelement(13, "prism-icon", 12);
248
+ i0.ɵɵelementStart(11, "button", 10);
249
+ i0.ɵɵelement(12, "prism-icon", 11);
184
250
  i0.ɵɵelementEnd();
185
- i0.ɵɵelement(14, "span", 13);
186
- i0.ɵɵelementStart(15, "button", 14);
187
- i0.ɵɵelement(16, "prism-icon", 15);
251
+ i0.ɵɵelement(13, "span", 12);
252
+ i0.ɵɵelementStart(14, "button", 13);
253
+ i0.ɵɵelement(15, "prism-icon", 14);
188
254
  i0.ɵɵelementEnd()();
189
- i0.ɵɵelementStart(17, "div", 16)(18, "span", 17);
190
- i0.ɵɵtext(19, "Canvas");
255
+ i0.ɵɵelementStart(16, "div", 15)(17, "span", 16);
256
+ i0.ɵɵtext(18, "Canvas");
191
257
  i0.ɵɵelementEnd();
192
- i0.ɵɵelementStart(20, "div", 18);
193
- i0.ɵɵrepeaterCreate(21, PrismCanvasToolbarComponent_For_22_Template, 2, 6, "button", 19, i0.ɵɵrepeaterTrackByIdentity);
258
+ i0.ɵɵelementStart(19, "div", 17);
259
+ i0.ɵɵrepeaterCreate(20, PrismCanvasToolbarComponent_For_21_Template, 2, 6, "button", 18, i0.ɵɵrepeaterTrackByIdentity);
194
260
  i0.ɵɵelementEnd();
195
- i0.ɵɵelementStart(23, "span", 17);
196
- i0.ɵɵtext(24, "State");
261
+ i0.ɵɵelementStart(22, "span", 16);
262
+ i0.ɵɵtext(23, "State");
197
263
  i0.ɵɵelementEnd();
198
- i0.ɵɵelementStart(25, "div", 18);
199
- i0.ɵɵrepeaterCreate(26, PrismCanvasToolbarComponent_For_27_Template, 2, 7, "button", 19, i0.ɵɵrepeaterTrackByIdentity);
264
+ i0.ɵɵconditionalCreate(24, PrismCanvasToolbarComponent_Conditional_24_Template, 3, 0, "div", 17);
265
+ i0.ɵɵelementStart(25, "div", 17);
266
+ i0.ɵɵrepeaterCreate(26, PrismCanvasToolbarComponent_For_27_Template, 2, 7, "button", 18, i0.ɵɵrepeaterTrackByIdentity);
200
267
  i0.ɵɵelementEnd();
201
- i0.ɵɵelementStart(28, "span", 17);
268
+ i0.ɵɵelementStart(28, "span", 16);
202
269
  i0.ɵɵtext(29, "Zoom");
203
270
  i0.ɵɵelementEnd();
204
- i0.ɵɵelementStart(30, "div", 18);
205
- i0.ɵɵrepeaterCreate(31, PrismCanvasToolbarComponent_For_32_Template, 2, 3, "button", 20, _forTrack0);
271
+ i0.ɵɵelementStart(30, "div", 17);
272
+ i0.ɵɵrepeaterCreate(31, PrismCanvasToolbarComponent_For_32_Template, 2, 3, "button", 19, _forTrack0);
206
273
  i0.ɵɵelementEnd();
207
- i0.ɵɵelementStart(33, "span", 17);
274
+ i0.ɵɵelementStart(33, "span", 16);
208
275
  i0.ɵɵtext(34, "Width");
209
276
  i0.ɵɵelementEnd();
210
- i0.ɵɵelementStart(35, "div", 18)(36, "button", 21);
277
+ i0.ɵɵelementStart(35, "div", 17)(36, "button", 20);
211
278
  i0.ɵɵlistener("click", function PrismCanvasToolbarComponent_Template_button_click_36_listener() { return ctx.canvas.setViewportWidth(null); });
212
279
  i0.ɵɵtext(37, " Auto ");
213
280
  i0.ɵɵelementEnd();
214
- i0.ɵɵrepeaterCreate(38, PrismCanvasToolbarComponent_For_39_Template, 2, 3, "button", 20, i0.ɵɵrepeaterTrackByIdentity);
281
+ i0.ɵɵrepeaterCreate(38, PrismCanvasToolbarComponent_For_39_Template, 2, 3, "button", 19, i0.ɵɵrepeaterTrackByIdentity);
215
282
  i0.ɵɵelementEnd()();
216
283
  } if (rf & 2) {
217
284
  i0.ɵɵclassProp("has-rulers", ctx.canvas.rulers());
218
- i0.ɵɵadvance(2);
219
- i0.ɵɵtextInterpolate1(" ", ctx.Math.round(ctx.canvas.zoom() * 100), "% ");
220
285
  i0.ɵɵadvance();
221
- i0.ɵɵconditional(ctx.canvas.viewportWidth() !== null ? 3 : -1);
286
+ i0.ɵɵattribute("title", ctx.zoomTitle());
287
+ i0.ɵɵadvance();
288
+ i0.ɵɵtextInterpolate1("", ctx.Math.round(ctx.canvas.zoom() * 100), "%");
222
289
  i0.ɵɵadvance();
223
- i0.ɵɵclassProp("is-on", ctx.canvas.guides());
224
- i0.ɵɵattribute("aria-pressed", ctx.canvas.guides());
290
+ i0.ɵɵproperty("pressed", ctx.canvas.guides())("title", ctx.railTitle("Guides", ctx.canvas.guides()));
225
291
  i0.ɵɵadvance();
226
292
  i0.ɵɵproperty("size", 14);
227
293
  i0.ɵɵadvance();
228
- i0.ɵɵclassProp("is-on", ctx.canvas.rulers());
229
- i0.ɵɵattribute("aria-pressed", ctx.canvas.rulers());
294
+ i0.ɵɵproperty("pressed", ctx.canvas.rulers())("title", ctx.railTitle("Rulers", ctx.canvas.rulers()));
230
295
  i0.ɵɵadvance();
231
296
  i0.ɵɵproperty("size", 14);
232
297
  i0.ɵɵadvance();
233
- i0.ɵɵclassProp("is-on", ctx.canvas.viewportWidth() !== null);
234
- i0.ɵɵattribute("aria-pressed", ctx.canvas.viewportWidth() !== null);
298
+ i0.ɵɵproperty("pressed", ctx.canvas.viewportWidth() !== null)("title", ctx.railTitle("Viewport width", ctx.canvas.viewportWidth() !== null));
235
299
  i0.ɵɵadvance();
236
300
  i0.ɵɵproperty("size", 14);
237
301
  i0.ɵɵadvance();
238
- i0.ɵɵclassProp("is-on", ctx.canvas.measure());
239
- i0.ɵɵattribute("aria-pressed", ctx.canvas.measure());
302
+ i0.ɵɵproperty("pressed", ctx.canvas.measure())("title", ctx.railTitle("Measure", ctx.canvas.measure()));
240
303
  i0.ɵɵadvance();
241
304
  i0.ɵɵproperty("size", 14);
242
305
  i0.ɵɵadvance(2);
@@ -245,7 +308,9 @@ export class PrismCanvasToolbarComponent {
245
308
  i0.ɵɵproperty("size", 14);
246
309
  i0.ɵɵadvance(5);
247
310
  i0.ɵɵrepeater(ctx.bgs);
248
- i0.ɵɵadvance(5);
311
+ i0.ɵɵadvance(4);
312
+ i0.ɵɵconditional(ctx.chips().length > 0 ? 24 : -1);
313
+ i0.ɵɵadvance(2);
249
314
  i0.ɵɵrepeater(ctx.states);
250
315
  i0.ɵɵadvance(5);
251
316
  i0.ɵɵrepeater(ctx.zooms);
@@ -253,10 +318,10 @@ export class PrismCanvasToolbarComponent {
253
318
  i0.ɵɵclassProp("is-on", ctx.canvas.viewportWidth() === null);
254
319
  i0.ɵɵadvance(2);
255
320
  i0.ɵɵrepeater(ctx.viewports);
256
- } }, dependencies: [PrismIconComponent], styles: ["[_nghost-%COMP%] {\n display: contents;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n.prism-toolrail[_ngcontent-%COMP%] {\n position: absolute;\n top: var(--%NS%prism-canvas-overlay-top, 12px);\n right: var(--%NS%prism-canvas-overlay-inline, 20px);\n z-index: 5;\n display: flex;\n flex-direction: column;\n gap: var(--%NS%sp-1);\n align-items: center;\n padding: var(--%NS%sp-2);\n anchor-name: --prism-toolrail;\n background: var(--%NS%prism-bg-elevated);\n border: 1px solid var(--%NS%prism-border-strong);\n border-radius: var(--%NS%radius-md);\n box-shadow: 0 4px 16px -6px rgb(0 0 0 / 40%);\n}\n\n.prism-toolrail.has-rulers[_ngcontent-%COMP%] {\n --%NS%prism-canvas-overlay-top: 28px;\n --%NS%prism-canvas-overlay-inline: 28px;\n}\n\n.prism-toolrail__zoom[_ngcontent-%COMP%] {\n width: 100%;\n padding-bottom: var(--%NS%sp-1);\n font-family: var(--%NS%font-mono);\n font-size: 9px;\n color: var(--%NS%prism-text-ghost);\n text-align: center;\n border-bottom: 1px solid var(--%NS%prism-border);\n}\n\n\n\n\n.prism-toolrail__vp[_ngcontent-%COMP%] {\n display: block;\n color: var(--%NS%prism-measure);\n}\n\n.prism-toolrail__btn[_ngcontent-%COMP%] {\n display: grid;\n place-items: center;\n width: 26px;\n height: 26px;\n padding: 0;\n color: var(--%NS%prism-text-muted);\n cursor: pointer;\n background: transparent;\n border: 0;\n border-radius: var(--%NS%radius-xs);\n}\n\n.prism-toolrail__btn[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text);\n}\n\n.prism-toolrail__btn[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--%NS%prism-primary);\n outline-offset: 1px;\n}\n\n.prism-toolrail__btn.is-on[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text);\n background: color-mix(in srgb, var(--%NS%prism-primary) 18%, transparent);\n}\n\n.prism-toolrail__sep[_ngcontent-%COMP%] {\n width: 14px;\n height: 1px;\n margin: var(--%NS%sp-1) 0;\n background: var(--%NS%prism-border);\n}\n\n.prism-toolmenu[_ngcontent-%COMP%] {\n inset: auto;\n gap: var(--%NS%sp-2);\n padding: var(--%NS%sp-3);\n margin: 0;\n margin-inline-end: var(--%NS%sp-2);\n position-area: inline-start;\n position-anchor: --prism-toolrail;\n position-try-fallbacks: flip-inline;\n background: var(--%NS%prism-bg-elevated);\n border: 1px solid var(--%NS%prism-border-strong);\n border-radius: var(--%NS%radius-md);\n box-shadow: 0 8px 28px -10px rgb(0 0 0 / 45%);\n}\n\n\n\n\n\n.prism-toolmenu[_ngcontent-%COMP%]:popover-open {\n display: flex;\n flex-direction: column;\n}\n\n.prism-toolmenu__lbl[_ngcontent-%COMP%] {\n font-size: var(--%NS%fs-xs);\n color: var(--%NS%prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.prism-toolmenu__row[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: var(--%NS%sp-1);\n}\n\n.prism-toolmenu__row[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 2px var(--%NS%sp-3);\n font-size: var(--%NS%fs-md);\n color: var(--%NS%prism-text-2);\n white-space: nowrap;\n cursor: pointer;\n background: transparent;\n border: 1px solid var(--%NS%prism-border);\n border-radius: var(--%NS%radius-xs);\n}\n\n.prism-toolmenu__row[_ngcontent-%COMP%] button.is-on[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text);\n background: color-mix(in srgb, var(--%NS%prism-primary) 16%, transparent);\n border-color: color-mix(in srgb, var(--%NS%prism-primary) 38%, transparent);\n}\n\n.prism-toolmenu__row[_ngcontent-%COMP%] button.is-rec[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--%NS%prism-primary) 30%, transparent);\n}"] });
321
+ } }, dependencies: [PrismIconComponent, PrismIconButtonComponent], styles: ["[_nghost-%COMP%] {\n display: contents;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n.prism-toolrail[_ngcontent-%COMP%] {\n \n --%NS%prism-icon-button-fg: var(--%NS%prism-canvas-overlay-muted);\n --%NS%prism-icon-button-fg-hover: var(--%NS%prism-canvas-overlay-fg);\n --%NS%prism-icon-button-bg-hover: color-mix(in srgb, var(--%NS%prism-canvas-overlay-fg) 8%, transparent);\n --%NS%prism-icon-button-active-fg: var(--%NS%prism-canvas-overlay-primary);\n --%NS%prism-icon-button-active-bg: var(--%NS%prism-canvas-overlay-active);\n --%NS%prism-icon-button-focus: var(--%NS%prism-canvas-overlay-primary);\n\n position: absolute;\n top: var(--%NS%prism-canvas-overlay-top, 12px);\n right: var(--%NS%prism-canvas-overlay-inline, 20px);\n z-index: 5;\n display: flex;\n flex-direction: column;\n gap: var(--%NS%sp-1);\n align-items: center;\n padding: var(--%NS%sp-2);\n anchor-name: --prism-toolrail;\n background: var(--%NS%prism-canvas-overlay-bg);\n border: 1px solid var(--%NS%prism-canvas-overlay-border);\n border-radius: var(--%NS%radius-md);\n box-shadow: var(--%NS%prism-shadow-md);\n}\n\n.prism-toolrail.has-rulers[_ngcontent-%COMP%] {\n --%NS%prism-canvas-overlay-top: 28px;\n --%NS%prism-canvas-overlay-inline: 28px;\n}\n\n.prism-toolrail__zoom[_ngcontent-%COMP%] {\n width: 100%;\n padding-bottom: var(--%NS%sp-1);\n font-family: var(--%NS%font-mono);\n font-size: 11px;\n color: var(--%NS%prism-canvas-overlay-muted);\n text-align: center;\n cursor: default;\n border-bottom: 1px solid var(--%NS%prism-canvas-overlay-border);\n}\n\n\n.prism-toolrail[_ngcontent-%COMP%] .prism-icon-button--pressed[_ngcontent-%COMP%] {\n box-shadow: inset 0 -1.5px 0 0 var(--%NS%prism-canvas-overlay-primary);\n}\n\n.prism-toolrail__sep[_ngcontent-%COMP%] {\n width: 14px;\n height: 1px;\n margin: var(--%NS%sp-1) 0;\n background: var(--%NS%prism-canvas-overlay-border);\n}\n\n.prism-toolmenu[_ngcontent-%COMP%] {\n inset: auto;\n gap: var(--%NS%sp-2);\n padding: var(--%NS%sp-3);\n margin: 0;\n margin-inline-end: var(--%NS%sp-2);\n position-area: inline-start;\n position-anchor: --prism-toolrail;\n position-try-fallbacks: flip-inline;\n background: var(--%NS%prism-bg-elevated);\n border: 1px solid var(--%NS%prism-border);\n border-radius: var(--%NS%radius-md);\n box-shadow: var(--%NS%prism-shadow-md);\n}\n\n\n\n\n\n.prism-toolmenu[_ngcontent-%COMP%]:popover-open {\n display: flex;\n flex-direction: column;\n}\n\n.prism-toolmenu__lbl[_ngcontent-%COMP%] {\n font-size: var(--%NS%fs-xs);\n color: var(--%NS%prism-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.prism-toolmenu__row[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: var(--%NS%sp-1);\n}\n\n.prism-toolmenu__row[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 2px var(--%NS%sp-3);\n font-size: var(--%NS%fs-md);\n color: var(--%NS%prism-text-2);\n white-space: nowrap;\n cursor: pointer;\n background: transparent;\n border: 1px solid var(--%NS%prism-border-strong);\n border-radius: var(--%NS%radius-xs);\n}\n\n.prism-toolmenu__row[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text);\n background: var(--%NS%prism-input-bg);\n}\n\n.prism-toolmenu__row[_ngcontent-%COMP%] button.is-on[_ngcontent-%COMP%] {\n color: var(--%NS%prism-primary);\n background: var(--%NS%prism-primary-bg);\n border-color: color-mix(in srgb, var(--%NS%prism-primary) 55%, transparent);\n}\n\n\n.prism-toolmenu__row[_ngcontent-%COMP%] button.is-rec[_ngcontent-%COMP%] {\n border-color: var(--%NS%prism-primary);\n}\n\n\n.prism-toolmenu__row[_ngcontent-%COMP%] button.is-na[_ngcontent-%COMP%] {\n border-style: dashed;\n}\n\n.prism-toolmenu__row[_ngcontent-%COMP%] button.is-na[_ngcontent-%COMP%]:not(.is-on) {\n color: var(--%NS%prism-text-muted);\n}"] });
257
322
  }
258
323
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismCanvasToolbarComponent, [{
259
324
  type: Component,
260
- args: [{ selector: 'prism-canvas-toolbar', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismIconComponent], template: "<!-- Anchored in .prism-canvas-wrap, absolute, not fixed:\n a viewport-fixed rail would float over the sidebar and the panel, stay\n put while those are resized, and sit on top of running text in the API\n view where it has no business being. -->\n<div\n class=\"prism-toolrail\"\n [class.has-rulers]=\"canvas.rulers()\">\n <span class=\"prism-toolrail__zoom\">\n {{ Math.round(canvas.zoom() * 100) }}%\n @if (canvas.viewportWidth() !== null) {\n <span class=\"prism-toolrail__vp\">{{ canvas.viewportWidth() }}px</span>\n }\n </span>\n\n <button\n type=\"button\"\n class=\"prism-toolrail__btn\"\n [class.is-on]=\"canvas.guides()\"\n (click)=\"canvas.toggleGuides()\"\n title=\"Toggle guides\"\n aria-label=\"Toggle guides\"\n [attr.aria-pressed]=\"canvas.guides()\">\n <prism-icon\n name=\"crosshair\"\n [size]=\"14\" />\n </button>\n\n <button\n type=\"button\"\n class=\"prism-toolrail__btn\"\n [class.is-on]=\"canvas.rulers()\"\n (click)=\"canvas.toggleRulers()\"\n title=\"Toggle rulers\"\n aria-label=\"Toggle rulers\"\n [attr.aria-pressed]=\"canvas.rulers()\">\n <prism-icon\n name=\"move\"\n [size]=\"14\" />\n </button>\n\n <button\n type=\"button\"\n class=\"prism-toolrail__btn\"\n [class.is-on]=\"canvas.viewportWidth() !== null\"\n (click)=\"canvas.toggleViewport()\"\n title=\"Toggle viewport width\"\n aria-label=\"Toggle viewport width\"\n [attr.aria-pressed]=\"canvas.viewportWidth() !== null\">\n <prism-icon\n name=\"ruler-dimension\"\n [size]=\"14\" />\n </button>\n\n <button\n type=\"button\"\n class=\"prism-toolrail__btn\"\n [class.is-on]=\"canvas.measure()\"\n (click)=\"canvas.toggleMeasure()\"\n title=\"Toggle measure tool\"\n aria-label=\"Toggle measure tool\"\n [attr.aria-pressed]=\"canvas.measure()\">\n <prism-icon\n name=\"ruler\"\n [size]=\"14\" />\n </button>\n\n <button\n type=\"button\"\n class=\"prism-toolrail__btn\"\n popovertarget=\"prism-tools\"\n title=\"Canvas, state, zoom and width\"\n aria-label=\"Canvas, state, zoom and width\">\n <prism-icon\n name=\"sliders-horizontal\"\n [size]=\"14\" />\n </button>\n\n <span class=\"prism-toolrail__sep\"></span>\n\n <button\n type=\"button\"\n class=\"prism-toolrail__btn\"\n popovertarget=\"prism-template\"\n title=\"Toggle Angular template\"\n aria-label=\"Toggle Angular template\">\n <prism-icon\n name=\"code\"\n [size]=\"14\" />\n </button>\n</div>\n\n<!-- Only the choosers. The toggles stay outside: you flip guides,\n rulers and the viewport constraint constantly while working, and a\n toggle two clicks deep is the classic mistake. What you only ever\n set may live in a menu. The states are toggles too, but set once per\n variant and dropped with it, like the background. -->\n<div\n popover\n id=\"prism-tools\"\n class=\"prism-toolmenu\"\n role=\"dialog\"\n aria-label=\"Canvas, state, zoom and width\">\n <span class=\"prism-toolmenu__lbl\">Canvas</span>\n <div class=\"prism-toolmenu__row\">\n @for (bg of bgs; track bg) {\n <button\n type=\"button\"\n [class.is-on]=\"variantBg.effective() === bg\"\n [class.is-rec]=\"variantBg.recommended() === bg\"\n [attr.title]=\"bgTitle(bg)\"\n (click)=\"setBg(bg)\">\n {{ capitalize(bg) }}\n </button>\n }\n </div>\n\n <span class=\"prism-toolmenu__lbl\">State</span>\n <div class=\"prism-toolmenu__row\">\n @for (state of states; track state) {\n <button\n type=\"button\"\n [class.is-on]=\"pseudoState.isForced(state)\"\n [class.is-rec]=\"pseudoState.isDeclared(state)\"\n [attr.aria-pressed]=\"pseudoState.isForced(state)\"\n [attr.title]=\"stateTitle(state)\"\n (click)=\"pseudoState.toggle(state)\">\n :{{ state }}\n </button>\n }\n </div>\n\n <span class=\"prism-toolmenu__lbl\">Zoom</span>\n <div class=\"prism-toolmenu__row\">\n @for (z of zooms; track z.value) {\n <button\n type=\"button\"\n [class.is-on]=\"canvas.zoom() === z.value\"\n (click)=\"canvas.setZoom(z.value)\">\n {{ z.label }}\n </button>\n }\n </div>\n\n <span class=\"prism-toolmenu__lbl\">Width</span>\n <div class=\"prism-toolmenu__row\">\n <button\n type=\"button\"\n [class.is-on]=\"canvas.viewportWidth() === null\"\n (click)=\"canvas.setViewportWidth(null)\">\n Auto\n </button>\n @for (w of viewports; track w) {\n <button\n type=\"button\"\n [class.is-on]=\"canvas.viewportWidth() === w\"\n (click)=\"canvas.setViewportWidth(w)\">\n {{ w }}\n </button>\n }\n </div>\n</div>\n", styles: [":host {\n display: contents;\n}\n\n/* Canvas overlays sit at --prism-canvas-overlay-*, which the stage grows\n when the rulers claim its top and left edges (see the\n .prism-canvas-stage[data-rulers] rule in prism-renderer.component.ts).\n prism-canvas-bg-pill simply inherits those; this rail cannot, because\n capture mode requires it to be a direct child of .prism-canvas-wrap\n outside the stage. So it mirrors the same values off canvas.rulers()\n instead, so keep the two in step.\n\n z-index outranks the rulers' 4 rather than matching it: the rail is a\n control and they are chrome, and the toolbar renders before the\n renderer in the shell, so an equal z-index let the rulers paint over\n the buttons. */\n.prism-toolrail {\n position: absolute;\n top: var(--prism-canvas-overlay-top, 12px);\n right: var(--prism-canvas-overlay-inline, 20px);\n z-index: 5;\n display: flex;\n flex-direction: column;\n gap: var(--sp-1);\n align-items: center;\n padding: var(--sp-2);\n anchor-name: --prism-toolrail;\n background: var(--prism-bg-elevated);\n border: 1px solid var(--prism-border-strong);\n border-radius: var(--radius-md);\n box-shadow: 0 4px 16px -6px rgb(0 0 0 / 40%);\n}\n\n.prism-toolrail.has-rulers {\n --prism-canvas-overlay-top: 28px;\n --prism-canvas-overlay-inline: 28px;\n}\n\n.prism-toolrail__zoom {\n width: 100%;\n padding-bottom: var(--sp-1);\n font-family: var(--font-mono);\n font-size: 9px;\n color: var(--prism-text-ghost);\n text-align: center;\n border-bottom: 1px solid var(--prism-border);\n}\n\n/* The one number on this rail that is not a percentage, so it takes the\n measurement colour the theme already reserves for rulers and guides\n rather than a second neutral that would read as a second zoom. */\n.prism-toolrail__vp {\n display: block;\n color: var(--prism-measure);\n}\n\n.prism-toolrail__btn {\n display: grid;\n place-items: center;\n width: 26px;\n height: 26px;\n padding: 0;\n color: var(--prism-text-muted);\n cursor: pointer;\n background: transparent;\n border: 0;\n border-radius: var(--radius-xs);\n}\n\n.prism-toolrail__btn:hover {\n color: var(--prism-text);\n}\n\n.prism-toolrail__btn:focus-visible {\n outline: 2px solid var(--prism-primary);\n outline-offset: 1px;\n}\n\n.prism-toolrail__btn.is-on {\n color: var(--prism-text);\n background: color-mix(in srgb, var(--prism-primary) 18%, transparent);\n}\n\n.prism-toolrail__sep {\n width: 14px;\n height: 1px;\n margin: var(--sp-1) 0;\n background: var(--prism-border);\n}\n\n.prism-toolmenu {\n inset: auto;\n gap: var(--sp-2);\n padding: var(--sp-3);\n margin: 0;\n margin-inline-end: var(--sp-2);\n position-area: inline-start;\n position-anchor: --prism-toolrail;\n position-try-fallbacks: flip-inline;\n background: var(--prism-bg-elevated);\n border: 1px solid var(--prism-border-strong);\n border-radius: var(--radius-md);\n box-shadow: 0 8px 28px -10px rgb(0 0 0 / 45%);\n}\n\n/* display belongs on :popover-open and nowhere else (see the note in\n prism-template-popover.component.ts). An author display on the base\n rule outranks the UA's [popover]:not(:popover-open) { display: none }\n and pins the menu open. */\n.prism-toolmenu:popover-open {\n display: flex;\n flex-direction: column;\n}\n\n.prism-toolmenu__lbl {\n font-size: var(--fs-xs);\n color: var(--prism-text-ghost);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.prism-toolmenu__row {\n display: flex;\n flex-wrap: wrap;\n gap: var(--sp-1);\n}\n\n.prism-toolmenu__row button {\n padding: 2px var(--sp-3);\n font-size: var(--fs-md);\n color: var(--prism-text-2);\n white-space: nowrap;\n cursor: pointer;\n background: transparent;\n border: 1px solid var(--prism-border);\n border-radius: var(--radius-xs);\n}\n\n.prism-toolmenu__row button.is-on {\n color: var(--prism-text);\n background: color-mix(in srgb, var(--prism-primary) 16%, transparent);\n border-color: color-mix(in srgb, var(--prism-primary) 38%, transparent);\n}\n\n.prism-toolmenu__row button.is-rec {\n border-color: color-mix(in srgb, var(--prism-primary) 30%, transparent);\n}\n"] }]
261
- }], null, null); })();
262
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismCanvasToolbarComponent, { className: "PrismCanvasToolbarComponent", filePath: "app/canvas/prism-canvas-toolbar.component.ts", lineNumber: 33 }); })();
325
+ args: [{ selector: 'prism-canvas-toolbar', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismIconComponent, PrismIconButtonComponent], template: "<!-- Anchored in .prism-canvas-wrap, absolute, not fixed:\n a viewport-fixed rail would float over the sidebar and the panel, stay\n put while those are resized, and sit on top of running text in the API\n view where it has no business being. -->\n<div\n class=\"prism-toolrail\"\n [class.has-rulers]=\"canvas.rulers()\">\n <span\n class=\"prism-toolrail__zoom\"\n [attr.title]=\"zoomTitle()\"\n >{{ Math.round(canvas.zoom() * 100) }}%</span\n >\n\n <button\n prismIconButton\n size=\"xs\"\n [pressed]=\"canvas.guides()\"\n (click)=\"canvas.toggleGuides()\"\n [title]=\"railTitle('Guides', canvas.guides())\"\n aria-label=\"Guides\">\n <prism-icon\n name=\"crosshair\"\n [size]=\"14\" />\n </button>\n\n <button\n prismIconButton\n size=\"xs\"\n [pressed]=\"canvas.rulers()\"\n (click)=\"canvas.toggleRulers()\"\n [title]=\"railTitle('Rulers', canvas.rulers())\"\n aria-label=\"Rulers\">\n <prism-icon\n name=\"move\"\n [size]=\"14\" />\n </button>\n\n <button\n prismIconButton\n size=\"xs\"\n [pressed]=\"canvas.viewportWidth() !== null\"\n (click)=\"canvas.toggleViewport()\"\n [title]=\"railTitle('Viewport width', canvas.viewportWidth() !== null)\"\n aria-label=\"Viewport width\">\n <prism-icon\n name=\"ruler-dimension\"\n [size]=\"14\" />\n </button>\n\n <button\n prismIconButton\n size=\"xs\"\n [pressed]=\"canvas.measure()\"\n (click)=\"canvas.toggleMeasure()\"\n [title]=\"railTitle('Measure', canvas.measure())\"\n aria-label=\"Measure\">\n <prism-icon\n name=\"ruler\"\n [size]=\"14\" />\n </button>\n\n <button\n prismIconButton\n size=\"xs\"\n popovertarget=\"prism-tools\"\n title=\"Canvas, state, zoom and width\"\n aria-label=\"Canvas, state, zoom and width\">\n <prism-icon\n name=\"sliders-horizontal\"\n [size]=\"14\" />\n </button>\n\n <span class=\"prism-toolrail__sep\"></span>\n\n <button\n prismIconButton\n size=\"xs\"\n popovertarget=\"prism-template\"\n title=\"Angular template\"\n aria-label=\"Angular template\">\n <prism-icon\n name=\"code\"\n [size]=\"14\" />\n </button>\n</div>\n\n<!-- Only the choosers. The toggles stay outside: you flip guides,\n rulers and the viewport constraint constantly while working, and a\n toggle two clicks deep is the classic mistake. What you only ever\n set may live in a menu. The states are toggles too, but set once per\n variant and dropped with it, like the background. -->\n<div\n popover\n id=\"prism-tools\"\n class=\"prism-toolmenu\"\n role=\"dialog\"\n aria-label=\"Canvas, state, zoom and width\">\n <span class=\"prism-toolmenu__lbl\">Canvas</span>\n <div class=\"prism-toolmenu__row\">\n @for (bg of bgs; track bg) {\n <button\n type=\"button\"\n [class.is-on]=\"variantBg.effective() === bg\"\n [class.is-rec]=\"variantBg.recommended() === bg\"\n [attr.title]=\"bgTitle(bg)\"\n (click)=\"setBg(bg)\">\n {{ capitalize(bg) }}\n </button>\n }\n </div>\n\n <span class=\"prism-toolmenu__lbl\">State</span>\n @if (chips().length > 0) {\n <div class=\"prism-toolmenu__row\">\n @for (chip of chips(); track chip.index) {\n <button\n type=\"button\"\n class=\"is-rec\"\n [class.is-on]=\"chip.active\"\n [class.is-na]=\"!chip.fits\"\n [attr.aria-pressed]=\"chip.active\"\n [attr.title]=\"chip.title\"\n (click)=\"pickState(chip)\">\n {{ chip.name }}\n </button>\n }\n </div>\n }\n <div class=\"prism-toolmenu__row\">\n @for (state of states; track state) {\n <button\n type=\"button\"\n [class.is-on]=\"pseudoState.isForced(state)\"\n [class.is-rec]=\"pseudoState.isDeclared(state)\"\n [attr.aria-pressed]=\"pseudoState.isForced(state)\"\n [attr.title]=\"stateTitle(state)\"\n (click)=\"pseudoState.toggle(state)\">\n :{{ state }}\n </button>\n }\n </div>\n\n <span class=\"prism-toolmenu__lbl\">Zoom</span>\n <div class=\"prism-toolmenu__row\">\n @for (z of zooms; track z.value) {\n <button\n type=\"button\"\n [class.is-on]=\"canvas.zoom() === z.value\"\n (click)=\"canvas.setZoom(z.value)\">\n {{ z.label }}\n </button>\n }\n </div>\n\n <span class=\"prism-toolmenu__lbl\">Width</span>\n <div class=\"prism-toolmenu__row\">\n <button\n type=\"button\"\n [class.is-on]=\"canvas.viewportWidth() === null\"\n (click)=\"canvas.setViewportWidth(null)\">\n Auto\n </button>\n @for (w of viewports; track w) {\n <button\n type=\"button\"\n [class.is-on]=\"canvas.viewportWidth() === w\"\n (click)=\"canvas.setViewportWidth(w)\">\n {{ w }}\n </button>\n }\n </div>\n</div>\n", styles: [":host {\n display: contents;\n}\n\n/* Canvas overlays sit at --prism-canvas-overlay-*, which the stage grows\n when the rulers claim its top and left edges (see the\n .prism-canvas-stage[data-rulers] rule in prism-renderer.component.ts).\n prism-canvas-bg-pill simply inherits those; this rail cannot, because\n capture mode requires it to be a direct child of .prism-canvas-wrap\n outside the stage. So it mirrors the same values off canvas.rulers()\n instead, so keep the two in step.\n\n z-index outranks the rulers' 4 rather than matching it: the rail is a\n control and they are chrome, and the toolbar renders before the\n renderer in the shell, so an equal z-index let the rulers paint over\n the buttons. */\n.prism-toolrail {\n /* The rail's buttons take the overlay colours of the canvas ground. */\n --prism-icon-button-fg: var(--prism-canvas-overlay-muted);\n --prism-icon-button-fg-hover: var(--prism-canvas-overlay-fg);\n --prism-icon-button-bg-hover: color-mix(in srgb, var(--prism-canvas-overlay-fg) 8%, transparent);\n --prism-icon-button-active-fg: var(--prism-canvas-overlay-primary);\n --prism-icon-button-active-bg: var(--prism-canvas-overlay-active);\n --prism-icon-button-focus: var(--prism-canvas-overlay-primary);\n\n position: absolute;\n top: var(--prism-canvas-overlay-top, 12px);\n right: var(--prism-canvas-overlay-inline, 20px);\n z-index: 5;\n display: flex;\n flex-direction: column;\n gap: var(--sp-1);\n align-items: center;\n padding: var(--sp-2);\n anchor-name: --prism-toolrail;\n background: var(--prism-canvas-overlay-bg);\n border: 1px solid var(--prism-canvas-overlay-border);\n border-radius: var(--radius-md);\n box-shadow: var(--prism-shadow-md);\n}\n\n.prism-toolrail.has-rulers {\n --prism-canvas-overlay-top: 28px;\n --prism-canvas-overlay-inline: 28px;\n}\n\n.prism-toolrail__zoom {\n width: 100%;\n padding-bottom: var(--sp-1);\n font-family: var(--font-mono);\n font-size: 11px;\n color: var(--prism-canvas-overlay-muted);\n text-align: center;\n cursor: default;\n border-bottom: 1px solid var(--prism-canvas-overlay-border);\n}\n\n/* A pressed tool also gets an edge, so \"on\" never rests on the tint alone. */\n.prism-toolrail .prism-icon-button--pressed {\n box-shadow: inset 0 -1.5px 0 0 var(--prism-canvas-overlay-primary);\n}\n\n.prism-toolrail__sep {\n width: 14px;\n height: 1px;\n margin: var(--sp-1) 0;\n background: var(--prism-canvas-overlay-border);\n}\n\n.prism-toolmenu {\n inset: auto;\n gap: var(--sp-2);\n padding: var(--sp-3);\n margin: 0;\n margin-inline-end: var(--sp-2);\n position-area: inline-start;\n position-anchor: --prism-toolrail;\n position-try-fallbacks: flip-inline;\n background: var(--prism-bg-elevated);\n border: 1px solid var(--prism-border);\n border-radius: var(--radius-md);\n box-shadow: var(--prism-shadow-md);\n}\n\n/* display belongs on :popover-open and nowhere else (see the note in\n prism-template-popover.component.ts). An author display on the base\n rule outranks the UA's [popover]:not(:popover-open) { display: none }\n and pins the menu open. */\n.prism-toolmenu:popover-open {\n display: flex;\n flex-direction: column;\n}\n\n.prism-toolmenu__lbl {\n font-size: var(--fs-xs);\n color: var(--prism-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.prism-toolmenu__row {\n display: flex;\n flex-wrap: wrap;\n gap: var(--sp-1);\n}\n\n.prism-toolmenu__row button {\n padding: 2px var(--sp-3);\n font-size: var(--fs-md);\n color: var(--prism-text-2);\n white-space: nowrap;\n cursor: pointer;\n background: transparent;\n border: 1px solid var(--prism-border-strong);\n border-radius: var(--radius-xs);\n}\n\n.prism-toolmenu__row button:hover {\n color: var(--prism-text);\n background: var(--prism-input-bg);\n}\n\n.prism-toolmenu__row button.is-on {\n color: var(--prism-primary);\n background: var(--prism-primary-bg);\n border-color: color-mix(in srgb, var(--prism-primary) 55%, transparent);\n}\n\n/* The variant's own recommendation: a primary contour, so it reads without the tooltip. */\n.prism-toolmenu__row button.is-rec {\n border-color: var(--prism-primary);\n}\n\n/* A state that does not fit the shown variant: still selectable, but nothing shows. The tooltip names why. */\n.prism-toolmenu__row button.is-na {\n border-style: dashed;\n}\n\n.prism-toolmenu__row button.is-na:not(.is-on) {\n color: var(--prism-text-muted);\n}\n"] }]
326
+ }], () => [], null); })();
327
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismCanvasToolbarComponent, { className: "PrismCanvasToolbarComponent", filePath: "app/canvas/prism-canvas-toolbar.component.ts", lineNumber: 39 }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"prism-template-popover.component.d.ts","sourceRoot":"","sources":["../../../src/app/canvas/prism-template-popover.component.ts"],"names":[],"mappings":";AAmCA,qBAQa,6BAA6B;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAEhE,SAAS,CAAC,QAAQ,CAAC,MAAM,kDAAiB;IAC1C,OAAO,CAAC,gBAAgB,CAA8C;IAEtE,SAAS,CAAC,QAAQ,CAAC,OAAO,yCAgBvB;IAEH,SAAS,CAAC,QAAQ,CAAC,WAAW,yCAK3B;IAEH,SAAS,CAAC,IAAI,IAAI,IAAI;yCAhCb,6BAA6B;2CAA7B,6BAA6B;CAyCzC"}
1
+ {"version":3,"file":"prism-template-popover.component.d.ts","sourceRoot":"","sources":["../../../src/app/canvas/prism-template-popover.component.ts"],"names":[],"mappings":";AAqCA,qBAQa,6BAA6B;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAEhE,SAAS,CAAC,QAAQ,CAAC,MAAM,kDAAiB;IAC1C,OAAO,CAAC,gBAAgB,CAA8C;IAEtE,SAAS,CAAC,QAAQ,CAAC,OAAO,yCAiBvB;IAEH,SAAS,CAAC,QAAQ,CAAC,WAAW,yCAK3B;IAEH,SAAS,CAAC,IAAI,IAAI,IAAI;yCAjCb,6BAA6B;2CAA7B,6BAA6B;CA0CzC"}
@@ -1,6 +1,8 @@
1
1
  import { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';
2
2
  import { PrismIconComponent } from '../icons/prism-icon.component.js';
3
- import { generateSnippet } from '../renderer/snippet-generator.js';
3
+ import { activeCase } from '../renderer/composition.js';
4
+ import { unboundInputs } from '../renderer/input-bindings.js';
5
+ import { generateCompositionSnippet, generateSnippet, subjectAttributes } from '../renderer/snippet-generator.js';
4
6
  import { PrismNavigationService } from '../services/prism-navigation.service.js';
5
7
  import { PrismRendererService } from '../services/prism-renderer.service.js';
6
8
  import * as i0 from "@angular/core";
@@ -8,7 +10,7 @@ function esc(s) {
8
10
  return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
9
11
  }
10
12
  function tokenizeXml(code) {
11
- const re = /(\/\/[^\n]*)|(<\/?[\w-]+)|(\[[\w.]+\]|[\w-]+)=|"([^"]*)"|(\/>|>)|(\n)|([^<["\n/>=]+|[/=])/g;
13
+ const re = /(\/\/[^\n]*)|(<\/?[\w-]+)|(\[[\w.]+\]|[\w-]+)=|"([^"]*)"|(\/>|>)|(\n)|([^<["\n/>=]+|[\s\S])/g;
12
14
  let out = '';
13
15
  let m;
14
16
  while ((m = re.exec(code)) !== null) {
@@ -46,10 +48,17 @@ export class PrismTemplatePopoverComponent {
46
48
  const comp = this.navigationService.activeComponent();
47
49
  if (!comp)
48
50
  return '';
49
- const variant = comp.meta.showcaseConfig.variants?.[this.rendererService.activeVariantIndex()];
51
+ const variantIndex = this.rendererService.activeVariantIndex();
52
+ const variant = comp.meta.showcaseConfig.variants?.[variantIndex];
50
53
  const explicitKeys = variant?.inputs ? new Set(Object.keys(variant.inputs)) : undefined;
54
+ const values = this.rendererService.inputValues();
55
+ const composed = activeCase(comp, variantIndex);
56
+ // A composed variant shows the composition as written, with the subject's current values where it stands.
57
+ if (composed) {
58
+ return generateCompositionSnippet(composed.template, subjectAttributes(comp.meta.inputs, values, explicitKeys, unboundInputs(comp, variantIndex)));
59
+ }
51
60
  const directiveOptions = comp.meta.componentMeta.isDirective ? { host: comp.meta.showcaseConfig.host } : undefined;
52
- return generateSnippet(comp.meta.componentMeta.selector, comp.meta.inputs, this.rendererService.inputValues(), explicitKeys, this.rendererService.activeContent(), directiveOptions);
61
+ return generateSnippet(comp.meta.componentMeta.selector, comp.meta.inputs, values, explicitKeys, this.rendererService.activeContent(), directiveOptions);
53
62
  }, /* @ts-ignore */
54
63
  ...(ngDevMode ? [{ debugName: "snippet" }] : /* istanbul ignore next */ []));
55
64
  highlighted = computed(() => {
@@ -99,10 +108,10 @@ export class PrismTemplatePopoverComponent {
99
108
  i0.ɵɵproperty("size", 13);
100
109
  i0.ɵɵadvance();
101
110
  i0.ɵɵproperty("innerHTML", ctx.highlighted(), i0.ɵɵsanitizeHtml);
102
- } }, dependencies: [PrismIconComponent], styles: ["[_nghost-%COMP%] {\n display: contents;\n}\n\n\n\n\n\n\n\n.tpl-popover[_ngcontent-%COMP%] {\n inset: auto;\n width: 520px;\n max-width: calc(100vw - var(--%NS%sp-6));\n max-height: min(420px, calc(100vh - var(--%NS%sp-7)));\n margin: var(--%NS%sp-2) 0 0 0;\n position-area: block-end span-inline-start;\n position-anchor: --prism-toolrail;\n position-try-fallbacks: flip-block, flip-inline;\n overflow: hidden;\n background: var(--%NS%prism-bg-elevated);\n border: 1px solid var(--%NS%prism-border-strong);\n border-radius: var(--%NS%radius-lg, 10px);\n box-shadow:\n 0 20px 60px rgb(0 0 0 / 45%),\n 0 0 0 1px color-mix(in srgb, var(--%NS%prism-primary) 10%, transparent);\n animation: _ngcontent-%COMP%_tpl-fade-in var(--%NS%dur-fast, 0.15s) var(--%NS%ease-default, ease-out);\n}\n\n\n\n\n\n\n\n.tpl-popover[_ngcontent-%COMP%]:popover-open {\n display: flex;\n flex-direction: column;\n}\n\n@keyframes _ngcontent-%COMP%_tpl-fade-in {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.tpl-popover-head[_ngcontent-%COMP%] {\n display: flex;\n flex-shrink: 0;\n gap: 8px;\n align-items: center;\n height: 40px;\n padding: 0 12px 0 16px;\n background: linear-gradient(180deg, var(--%NS%prism-bg-surface), var(--%NS%prism-bg-elevated));\n border-bottom: 1px solid var(--%NS%prism-border);\n}\n\n.tpl-popover-head[_ngcontent-%COMP%] > prism-icon[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n}\n\n.tpl-popover-head[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n flex: 1;\n font-size: var(--%NS%fs-xs);\n font-weight: 700;\n color: var(--%NS%prism-text-2);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.tpl-popover-copy[_ngcontent-%COMP%] {\n display: flex;\n gap: 5px;\n align-items: center;\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-primary);\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: var(--%NS%radius-sm, 5px);\n transition: background var(--%NS%dur-fast);\n}\n\n.tpl-popover-copy[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--%NS%prism-primary) 20%, transparent);\n}\n\n.tpl-popover-close[_ngcontent-%COMP%] {\n display: grid;\n place-items: center;\n width: 26px;\n height: 26px;\n color: var(--%NS%prism-text-muted);\n cursor: pointer;\n background: transparent;\n border: 0;\n border-radius: var(--%NS%radius-sm, 5px);\n transition:\n background var(--%NS%dur-fast),\n color var(--%NS%dur-fast);\n}\n\n.tpl-popover-close[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text);\n background: var(--%NS%prism-input-bg);\n}\n\n.tpl-popover-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n padding: 14px 18px;\n margin: 0;\n overflow: auto;\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-md);\n line-height: 1.7;\n color: var(--%NS%prism-text-2);\n white-space: pre;\n background: var(--%NS%prism-bg);\n}\n\n.tpl-popover-body[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n.tpl-popover-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--%NS%prism-border-strong);\n border-radius: 3px;\n}\n\n[_nghost-%COMP%] .tok-tag {\n color: var(--%NS%prism-code-tag);\n}\n\n[_nghost-%COMP%] .tok-attr {\n color: var(--%NS%prism-code-attr);\n}\n\n[_nghost-%COMP%] .tok-str {\n color: var(--%NS%prism-code-str);\n}\n\n[_nghost-%COMP%] .tok-com {\n font-style: italic;\n color: var(--%NS%prism-code-com);\n}"] });
111
+ } }, dependencies: [PrismIconComponent], styles: ["[_nghost-%COMP%] {\n display: contents;\n}\n\n\n\n\n\n\n\n.tpl-popover[_ngcontent-%COMP%] {\n inset: auto;\n width: 520px;\n max-width: calc(100vw - var(--%NS%sp-6));\n max-height: min(420px, calc(100vh - var(--%NS%sp-7)));\n margin: var(--%NS%sp-2) 0 0 0;\n position-area: block-end span-inline-start;\n position-anchor: --prism-toolrail;\n position-try-fallbacks: flip-block, flip-inline;\n overflow: hidden;\n background: var(--%NS%prism-bg-elevated);\n border: 1px solid var(--%NS%prism-border);\n border-radius: var(--%NS%radius-lg, 10px);\n box-shadow: var(--%NS%prism-shadow-md);\n animation: _ngcontent-%COMP%_tpl-fade-in var(--%NS%dur-fast, 0.15s) var(--%NS%ease-default, ease-out);\n}\n\n\n\n\n\n\n\n.tpl-popover[_ngcontent-%COMP%]:popover-open {\n display: flex;\n flex-direction: column;\n}\n\n@keyframes _ngcontent-%COMP%_tpl-fade-in {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.tpl-popover-head[_ngcontent-%COMP%] {\n display: flex;\n flex-shrink: 0;\n gap: 8px;\n align-items: center;\n height: 40px;\n padding: 0 12px 0 16px;\n background: linear-gradient(180deg, var(--%NS%prism-bg-surface), var(--%NS%prism-bg-elevated));\n border-bottom: 1px solid var(--%NS%prism-border);\n}\n\n.tpl-popover-head[_ngcontent-%COMP%] > prism-icon[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n}\n\n.tpl-popover-head[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n flex: 1;\n font-size: var(--%NS%fs-xs);\n font-weight: 700;\n color: var(--%NS%prism-text-2);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.tpl-popover-copy[_ngcontent-%COMP%] {\n display: flex;\n gap: 5px;\n align-items: center;\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-primary);\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: var(--%NS%radius-sm, 5px);\n transition: background var(--%NS%dur-fast);\n}\n\n.tpl-popover-copy[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--%NS%prism-primary) 20%, transparent);\n}\n\n.tpl-popover-close[_ngcontent-%COMP%] {\n display: grid;\n place-items: center;\n width: 26px;\n height: 26px;\n color: var(--%NS%prism-text-muted);\n cursor: pointer;\n background: transparent;\n border: 0;\n border-radius: var(--%NS%radius-sm, 5px);\n transition:\n background var(--%NS%dur-fast),\n color var(--%NS%dur-fast);\n}\n\n.tpl-popover-close[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text);\n background: var(--%NS%prism-input-bg);\n}\n\n.tpl-popover-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n padding: 14px 18px;\n margin: 0;\n overflow: auto;\n font-family: var(--%NS%font-mono);\n font-size: var(--%NS%fs-md);\n line-height: 1.7;\n color: var(--%NS%prism-text-2);\n white-space: pre;\n background: var(--%NS%prism-bg);\n}\n\n.tpl-popover-body[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n.tpl-popover-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--%NS%prism-border-strong);\n border-radius: 3px;\n}\n\n[_nghost-%COMP%] .tok-tag {\n color: var(--%NS%prism-code-tag);\n}\n\n[_nghost-%COMP%] .tok-attr {\n color: var(--%NS%prism-code-attr);\n}\n\n[_nghost-%COMP%] .tok-str {\n color: var(--%NS%prism-code-str);\n}\n\n[_nghost-%COMP%] .tok-com {\n font-style: italic;\n color: var(--%NS%prism-code-com);\n}"] });
103
112
  }
104
113
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismTemplatePopoverComponent, [{
105
114
  type: Component,
106
- args: [{ selector: 'prism-template-popover', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismIconComponent], template: "<!-- A native popover: the platform owns open, light-dismiss and Escape, so\n there is no visibility signal, no document click listener and no key\n handler here. The id is what the rail's button names in its\n popovertarget. -->\n<div\n popover\n id=\"prism-template\"\n class=\"tpl-popover\"\n role=\"dialog\"\n aria-label=\"Angular template\">\n <div class=\"tpl-popover-head\">\n <prism-icon\n name=\"code\"\n [size]=\"13\" />\n <span>Angular Template</span>\n <button\n type=\"button\"\n class=\"tpl-popover-copy\"\n (click)=\"copy()\"\n [title]=\"copied() ? 'Copied!' : 'Copy to clipboard'\">\n <prism-icon\n [name]=\"copied() ? 'shield-check' : 'copy'\"\n [size]=\"12\" />\n {{ copied() ? 'Copied' : 'Copy' }}\n </button>\n <button\n type=\"button\"\n class=\"tpl-popover-close\"\n popovertarget=\"prism-template\"\n popovertargetaction=\"hide\"\n aria-label=\"Close\"\n title=\"Close (Esc)\">\n <prism-icon\n name=\"x\"\n [size]=\"13\" />\n </button>\n </div>\n <pre\n class=\"tpl-popover-body\"\n [innerHTML]=\"highlighted()\"></pre>\n</div>\n", styles: [":host {\n display: contents;\n}\n\n/* No position of its own: a popover is in the top layer, where the\n containing block is the viewport, so the old right/top pair against the\n canvas would have parked this in the corner of the *window* and over the\n header. It hangs off the rail instead, the same way the head popovers\n hang off their triggers. Viewport units, not percentages, because a\n percentage here resolves against the position area, not the canvas. */\n.tpl-popover {\n inset: auto;\n width: 520px;\n max-width: calc(100vw - var(--sp-6));\n max-height: min(420px, calc(100vh - var(--sp-7)));\n margin: var(--sp-2) 0 0 0;\n position-area: block-end span-inline-start;\n position-anchor: --prism-toolrail;\n position-try-fallbacks: flip-block, flip-inline;\n overflow: hidden;\n background: var(--prism-bg-elevated);\n border: 1px solid var(--prism-border-strong);\n border-radius: var(--radius-lg, 10px);\n box-shadow:\n 0 20px 60px rgb(0 0 0 / 45%),\n 0 0 0 1px color-mix(in srgb, var(--prism-primary) 10%, transparent);\n animation: tpl-fade-in var(--dur-fast, 0.15s) var(--ease-default, ease-out);\n}\n\n/* display belongs on :popover-open and nowhere else. The UA stylesheet\n hides a closed popover with [popover]:not(:popover-open) { display: none },\n and any author display on the base rule outranks it. The panel then\n shows permanently and neither Escape nor light-dismiss can hide it,\n because closing only drops :popover-open and leaves the author rule\n standing. */\n.tpl-popover:popover-open {\n display: flex;\n flex-direction: column;\n}\n\n@keyframes tpl-fade-in {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.tpl-popover-head {\n display: flex;\n flex-shrink: 0;\n gap: 8px;\n align-items: center;\n height: 40px;\n padding: 0 12px 0 16px;\n background: linear-gradient(180deg, var(--prism-bg-surface), var(--prism-bg-elevated));\n border-bottom: 1px solid var(--prism-border);\n}\n\n.tpl-popover-head > prism-icon {\n color: var(--prism-text-muted);\n}\n\n.tpl-popover-head > span {\n flex: 1;\n font-size: var(--fs-xs);\n font-weight: 700;\n color: var(--prism-text-2);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.tpl-popover-copy {\n display: flex;\n gap: 5px;\n align-items: center;\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-primary);\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: var(--radius-sm, 5px);\n transition: background var(--dur-fast);\n}\n\n.tpl-popover-copy:hover {\n background: color-mix(in srgb, var(--prism-primary) 20%, transparent);\n}\n\n.tpl-popover-close {\n display: grid;\n place-items: center;\n width: 26px;\n height: 26px;\n color: var(--prism-text-muted);\n cursor: pointer;\n background: transparent;\n border: 0;\n border-radius: var(--radius-sm, 5px);\n transition:\n background var(--dur-fast),\n color var(--dur-fast);\n}\n\n.tpl-popover-close:hover {\n color: var(--prism-text);\n background: var(--prism-input-bg);\n}\n\n.tpl-popover-body {\n flex: 1;\n min-height: 0;\n padding: 14px 18px;\n margin: 0;\n overflow: auto;\n font-family: var(--font-mono);\n font-size: var(--fs-md);\n line-height: 1.7;\n color: var(--prism-text-2);\n white-space: pre;\n background: var(--prism-bg);\n}\n\n.tpl-popover-body::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n.tpl-popover-body::-webkit-scrollbar-thumb {\n background: var(--prism-border-strong);\n border-radius: 3px;\n}\n\n:host ::ng-deep .tok-tag {\n color: var(--prism-code-tag);\n}\n\n:host ::ng-deep .tok-attr {\n color: var(--prism-code-attr);\n}\n\n:host ::ng-deep .tok-str {\n color: var(--prism-code-str);\n}\n\n:host ::ng-deep .tok-com {\n font-style: italic;\n color: var(--prism-code-com);\n}\n"] }]
115
+ args: [{ selector: 'prism-template-popover', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismIconComponent], template: "<!-- A native popover: the platform owns open, light-dismiss and Escape, so\n there is no visibility signal, no document click listener and no key\n handler here. The id is what the rail's button names in its\n popovertarget. -->\n<div\n popover\n id=\"prism-template\"\n class=\"tpl-popover\"\n role=\"dialog\"\n aria-label=\"Angular template\">\n <div class=\"tpl-popover-head\">\n <prism-icon\n name=\"code\"\n [size]=\"13\" />\n <span>Angular Template</span>\n <button\n type=\"button\"\n class=\"tpl-popover-copy\"\n (click)=\"copy()\"\n [title]=\"copied() ? 'Copied!' : 'Copy to clipboard'\">\n <prism-icon\n [name]=\"copied() ? 'shield-check' : 'copy'\"\n [size]=\"12\" />\n {{ copied() ? 'Copied' : 'Copy' }}\n </button>\n <button\n type=\"button\"\n class=\"tpl-popover-close\"\n popovertarget=\"prism-template\"\n popovertargetaction=\"hide\"\n aria-label=\"Close\"\n title=\"Close (Esc)\">\n <prism-icon\n name=\"x\"\n [size]=\"13\" />\n </button>\n </div>\n <pre\n class=\"tpl-popover-body\"\n [innerHTML]=\"highlighted()\"></pre>\n</div>\n", styles: [":host {\n display: contents;\n}\n\n/* No position of its own: a popover is in the top layer, where the\n containing block is the viewport, so the old right/top pair against the\n canvas would have parked this in the corner of the *window* and over the\n header. It hangs off the rail instead, the same way the head popovers\n hang off their triggers. Viewport units, not percentages, because a\n percentage here resolves against the position area, not the canvas. */\n.tpl-popover {\n inset: auto;\n width: 520px;\n max-width: calc(100vw - var(--sp-6));\n max-height: min(420px, calc(100vh - var(--sp-7)));\n margin: var(--sp-2) 0 0 0;\n position-area: block-end span-inline-start;\n position-anchor: --prism-toolrail;\n position-try-fallbacks: flip-block, flip-inline;\n overflow: hidden;\n background: var(--prism-bg-elevated);\n border: 1px solid var(--prism-border);\n border-radius: var(--radius-lg, 10px);\n box-shadow: var(--prism-shadow-md);\n animation: tpl-fade-in var(--dur-fast, 0.15s) var(--ease-default, ease-out);\n}\n\n/* display belongs on :popover-open and nowhere else. The UA stylesheet\n hides a closed popover with [popover]:not(:popover-open) { display: none },\n and any author display on the base rule outranks it. The panel then\n shows permanently and neither Escape nor light-dismiss can hide it,\n because closing only drops :popover-open and leaves the author rule\n standing. */\n.tpl-popover:popover-open {\n display: flex;\n flex-direction: column;\n}\n\n@keyframes tpl-fade-in {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.tpl-popover-head {\n display: flex;\n flex-shrink: 0;\n gap: 8px;\n align-items: center;\n height: 40px;\n padding: 0 12px 0 16px;\n background: linear-gradient(180deg, var(--prism-bg-surface), var(--prism-bg-elevated));\n border-bottom: 1px solid var(--prism-border);\n}\n\n.tpl-popover-head > prism-icon {\n color: var(--prism-text-muted);\n}\n\n.tpl-popover-head > span {\n flex: 1;\n font-size: var(--fs-xs);\n font-weight: 700;\n color: var(--prism-text-2);\n text-transform: uppercase;\n letter-spacing: 0.08em;\n}\n\n.tpl-popover-copy {\n display: flex;\n gap: 5px;\n align-items: center;\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-primary);\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: var(--radius-sm, 5px);\n transition: background var(--dur-fast);\n}\n\n.tpl-popover-copy:hover {\n background: color-mix(in srgb, var(--prism-primary) 20%, transparent);\n}\n\n.tpl-popover-close {\n display: grid;\n place-items: center;\n width: 26px;\n height: 26px;\n color: var(--prism-text-muted);\n cursor: pointer;\n background: transparent;\n border: 0;\n border-radius: var(--radius-sm, 5px);\n transition:\n background var(--dur-fast),\n color var(--dur-fast);\n}\n\n.tpl-popover-close:hover {\n color: var(--prism-text);\n background: var(--prism-input-bg);\n}\n\n.tpl-popover-body {\n flex: 1;\n min-height: 0;\n padding: 14px 18px;\n margin: 0;\n overflow: auto;\n font-family: var(--font-mono);\n font-size: var(--fs-md);\n line-height: 1.7;\n color: var(--prism-text-2);\n white-space: pre;\n background: var(--prism-bg);\n}\n\n.tpl-popover-body::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n.tpl-popover-body::-webkit-scrollbar-thumb {\n background: var(--prism-border-strong);\n border-radius: 3px;\n}\n\n:host ::ng-deep .tok-tag {\n color: var(--prism-code-tag);\n}\n\n:host ::ng-deep .tok-attr {\n color: var(--prism-code-attr);\n}\n\n:host ::ng-deep .tok-str {\n color: var(--prism-code-str);\n}\n\n:host ::ng-deep .tok-com {\n font-style: italic;\n color: var(--prism-code-com);\n}\n"] }]
107
116
  }], null, null); })();
108
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismTemplatePopoverComponent, { className: "PrismTemplatePopoverComponent", filePath: "app/canvas/prism-template-popover.component.ts", lineNumber: 44 }); })();
117
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismTemplatePopoverComponent, { className: "PrismTemplatePopoverComponent", filePath: "app/canvas/prism-template-popover.component.ts", lineNumber: 46 }); })();
@@ -0,0 +1,50 @@
1
+ import type { ShowcaseState } from '../../decorator/showcase.types.js';
2
+ import type { ForcedPseudoStates, PseudoState } from '../../shared/pseudo-state.type.js';
3
+ import type { StateFit } from '../pseudo/state-fit.js';
4
+ /** One chip of the tools menu's State group: a component-level state to put on the canvas. */
5
+ export interface StateChip {
6
+ /** Position in `ShowcaseConfig.states`, which is what identifies a state. */
7
+ index: number;
8
+ name: string;
9
+ /** On the canvas, or selected and waiting for a target if it does not fit. */
10
+ active: boolean;
11
+ fits: boolean;
12
+ title: string;
13
+ }
14
+ /**
15
+ * One chip per state in declaration order. `fits` is parallel to `states`; a
16
+ * state without an entry yet (nothing evaluated) counts as fitting.
17
+ *
18
+ * A chip that does not fit says why, even while it is the active one: it is
19
+ * selected, but what the title would otherwise promise ("is shown") is not true.
20
+ */
21
+ export declare function buildStateChips(states: readonly ShowcaseState[], activeIndex: number | null, fits: readonly StateFit[]): StateChip[];
22
+ /** What {@link chipFits} needs to know about the canvas. */
23
+ export interface ChipFitContext {
24
+ /** The rendered component, `null` before the first render. */
25
+ element: Element | null;
26
+ /** The active variant has `states: false`. */
27
+ optedOut: boolean;
28
+ activeIndex: number | null;
29
+ /** The fit the canvas measured for the active state, `null` while it applies none. */
30
+ canvasFit: StateFit | null;
31
+ }
32
+ /**
33
+ * Whether each of `states` fits what is on the canvas, in the order of `states`.
34
+ *
35
+ * The active state takes the fit the canvas measured, so a chip and the canvas
36
+ * cannot disagree; the others are evaluated against the same element. Without an
37
+ * element there is nothing to measure and everything counts as fitting, as it
38
+ * does on the canvas before the first render.
39
+ */
40
+ export declare function chipFits(states: readonly ShowcaseState[], { element, optedOut, activeIndex, canvasFit }: ChipFitContext, evaluate: (root: Element, pseudo: ForcedPseudoStates) => StateFit): StateFit[];
41
+ /** Who declares a pseudo-class that is on without the user toggling it. */
42
+ export type PseudoSource = {
43
+ by: 'variant';
44
+ } | {
45
+ by: 'state';
46
+ name: string;
47
+ };
48
+ /** Tooltip of a `:hover`… toggle: where its default comes from, or what switching it on does. */
49
+ export declare function toggleTitle(state: PseudoState, source: PseudoSource | null): string;
50
+ //# sourceMappingURL=state-chips.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-chips.d.ts","sourceRoot":"","sources":["../../../src/app/canvas/state-chips.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AACzF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,8FAA8F;AAC9F,MAAM,WAAW,SAAS;IACtB,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,QAAQ,EAAE,GAAG,SAAS,EAAE,CAUpI;AAED,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC3B,8DAA8D;IAC9D,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,sFAAsF;IACtF,SAAS,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACpB,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,cAAc,EAC7D,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,KAAK,QAAQ,GAClE,QAAQ,EAAE,CAIZ;AAED,2EAA2E;AAC3E,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E,iGAAiG;AACjG,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,MAAM,CAGnF"}