@ng-prism/core 22.6.0 → 22.7.0-beta.1

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 (377) hide show
  1. package/README.md +11 -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 +3 -2
  14. package/dist/app/canvas/prism-canvas-toolbar.component.d.ts.map +1 -1
  15. package/dist/app/canvas/prism-canvas-toolbar.component.js +89 -97
  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/component-head/head-metrics.d.ts +35 -19
  19. package/dist/app/component-head/head-metrics.d.ts.map +1 -1
  20. package/dist/app/component-head/head-metrics.js +57 -27
  21. package/dist/app/component-head/pipe-facts.d.ts +9 -0
  22. package/dist/app/component-head/pipe-facts.d.ts.map +1 -0
  23. package/dist/app/component-head/pipe-facts.js +15 -0
  24. package/dist/app/component-head/prism-component-head.component.d.ts +19 -22
  25. package/dist/app/component-head/prism-component-head.component.d.ts.map +1 -1
  26. package/dist/app/component-head/prism-component-head.component.js +80 -96
  27. package/dist/app/component-head/prism-head-gauge.component.d.ts +8 -12
  28. package/dist/app/component-head/prism-head-gauge.component.d.ts.map +1 -1
  29. package/dist/app/component-head/prism-head-gauge.component.js +51 -67
  30. package/dist/app/component-head/prism-head-info.component.d.ts +13 -2
  31. package/dist/app/component-head/prism-head-info.component.d.ts.map +1 -1
  32. package/dist/app/component-head/prism-head-info.component.js +57 -16
  33. package/dist/app/component-head/prism-stat.component.d.ts +4 -5
  34. package/dist/app/component-head/prism-stat.component.d.ts.map +1 -1
  35. package/dist/app/component-head/prism-stat.component.js +16 -12
  36. package/dist/app/component-head/service-facts.d.ts +8 -0
  37. package/dist/app/component-head/service-facts.d.ts.map +1 -0
  38. package/dist/app/component-head/service-facts.js +11 -0
  39. package/dist/app/controls/boolean-control.component.js +2 -2
  40. package/dist/app/controls/json-control.component.js +2 -2
  41. package/dist/app/controls/union-control.component.js +4 -3
  42. package/dist/app/header/header-brand.d.ts +25 -0
  43. package/dist/app/header/header-brand.d.ts.map +1 -0
  44. package/dist/app/header/header-brand.js +10 -0
  45. package/dist/app/header/prism-header.component.d.ts +2 -2
  46. package/dist/app/header/prism-header.component.d.ts.map +1 -1
  47. package/dist/app/header/prism-header.component.js +73 -57
  48. package/dist/app/icons/icon-registry.d.ts.map +1 -1
  49. package/dist/app/icons/icon-registry.js +4 -1
  50. package/dist/app/index.d.ts +12 -0
  51. package/dist/app/index.d.ts.map +1 -1
  52. package/dist/app/index.js +12 -1
  53. package/dist/app/layout-menu/prism-layout-menu.component.d.ts +3 -0
  54. package/dist/app/layout-menu/prism-layout-menu.component.d.ts.map +1 -1
  55. package/dist/app/layout-menu/prism-layout-menu.component.js +72 -58
  56. package/dist/app/overview/open-in-playground.d.ts +8 -0
  57. package/dist/app/overview/open-in-playground.d.ts.map +1 -1
  58. package/dist/app/overview/open-in-playground.js +13 -0
  59. package/dist/app/overview/overview-matrix.d.ts +10 -4
  60. package/dist/app/overview/overview-matrix.d.ts.map +1 -1
  61. package/dist/app/overview/overview-matrix.js +3 -3
  62. package/dist/app/overview/prism-overview-cell.component.d.ts +6 -2
  63. package/dist/app/overview/prism-overview-cell.component.d.ts.map +1 -1
  64. package/dist/app/overview/prism-overview-cell.component.js +35 -24
  65. package/dist/app/overview/prism-overview-matrix.component.js +46 -55
  66. package/dist/app/page-renderer/prism-page-renderer.component.js +2 -2
  67. package/dist/app/panels/a11y/a11y-header-badge.component.d.ts +1 -4
  68. package/dist/app/panels/a11y/a11y-header-badge.component.d.ts.map +1 -1
  69. package/dist/app/panels/a11y/a11y-header-badge.component.js +8 -19
  70. package/dist/app/panels/a11y/a11y-keyboard-overlay.component.js +2 -2
  71. package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts +1 -0
  72. package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts.map +1 -1
  73. package/dist/app/panels/a11y/a11y-overlay-host.component.js +4 -3
  74. package/dist/app/panels/a11y/a11y-panel.component.d.ts +4 -1
  75. package/dist/app/panels/a11y/a11y-panel.component.d.ts.map +1 -1
  76. package/dist/app/panels/a11y/a11y-panel.component.js +32 -54
  77. package/dist/app/panels/a11y/a11y-score.component.d.ts +8 -3
  78. package/dist/app/panels/a11y/a11y-score.component.d.ts.map +1 -1
  79. package/dist/app/panels/a11y/a11y-score.component.js +19 -35
  80. package/dist/app/panels/a11y/a11y-sr-overlay.component.js +2 -2
  81. package/dist/app/panels/a11y/a11y-sr.component.js +2 -2
  82. package/dist/app/panels/a11y/a11y-summary.d.ts.map +1 -1
  83. package/dist/app/panels/a11y/a11y-summary.js +8 -1
  84. package/dist/app/panels/a11y/a11y-tree.component.js +2 -2
  85. package/dist/app/panels/a11y/a11y-violations.component.d.ts +23 -2
  86. package/dist/app/panels/a11y/a11y-violations.component.d.ts.map +1 -1
  87. package/dist/app/panels/a11y/a11y-violations.component.js +104 -89
  88. package/dist/app/panels/a11y/severity.d.ts +9 -0
  89. package/dist/app/panels/a11y/severity.d.ts.map +1 -0
  90. package/dist/app/panels/a11y/severity.js +12 -0
  91. package/dist/app/panels/controls/non-editable-input-types.d.ts +9 -1
  92. package/dist/app/panels/controls/non-editable-input-types.d.ts.map +1 -1
  93. package/dist/app/panels/controls/non-editable-input-types.js +18 -0
  94. package/dist/app/panels/controls/prism-controls-panel.component.d.ts +2 -1
  95. package/dist/app/panels/controls/prism-controls-panel.component.d.ts.map +1 -1
  96. package/dist/app/panels/controls/prism-controls-panel.component.js +77 -59
  97. package/dist/app/panels/events/prism-events-panel.component.d.ts +2 -0
  98. package/dist/app/panels/events/prism-events-panel.component.d.ts.map +1 -1
  99. package/dist/app/panels/events/prism-events-panel.component.js +20 -7
  100. package/dist/app/panels/events/prism-json-node.utils.d.ts +6 -0
  101. package/dist/app/panels/events/prism-json-node.utils.d.ts.map +1 -1
  102. package/dist/app/panels/events/prism-json-node.utils.js +8 -0
  103. package/dist/app/panels/panel-host/addon-panels.d.ts +11 -0
  104. package/dist/app/panels/panel-host/addon-panels.d.ts.map +1 -0
  105. package/dist/app/panels/panel-host/addon-panels.js +12 -0
  106. package/dist/app/panels/panel-host/panel-badge.d.ts +22 -0
  107. package/dist/app/panels/panel-host/panel-badge.d.ts.map +1 -1
  108. package/dist/app/panels/panel-host/panel-badge.js +56 -11
  109. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts +4 -1
  110. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts.map +1 -1
  111. package/dist/app/panels/panel-host/prism-panel-host.component.js +36 -70
  112. package/dist/app/renderer/composition.d.ts +20 -0
  113. package/dist/app/renderer/composition.d.ts.map +1 -0
  114. package/dist/app/renderer/composition.js +26 -0
  115. package/dist/app/renderer/input-bindings.d.ts +13 -1
  116. package/dist/app/renderer/input-bindings.d.ts.map +1 -1
  117. package/dist/app/renderer/input-bindings.js +22 -1
  118. package/dist/app/renderer/prism-renderer.component.d.ts +8 -1
  119. package/dist/app/renderer/prism-renderer.component.d.ts.map +1 -1
  120. package/dist/app/renderer/prism-renderer.component.js +40 -28
  121. package/dist/app/renderer/snippet-generator.d.ts +14 -2
  122. package/dist/app/renderer/snippet-generator.d.ts.map +1 -1
  123. package/dist/app/renderer/snippet-generator.js +137 -82
  124. package/dist/app/services/navigation-item.d.ts +10 -0
  125. package/dist/app/services/navigation-item.d.ts.map +1 -0
  126. package/dist/app/services/navigation-item.js +20 -0
  127. package/dist/app/services/navigation-item.types.d.ts +8 -0
  128. package/dist/app/services/navigation-item.types.d.ts.map +1 -1
  129. package/dist/app/services/prism-layout.service.d.ts +12 -0
  130. package/dist/app/services/prism-layout.service.d.ts.map +1 -1
  131. package/dist/app/services/prism-layout.service.js +17 -7
  132. package/dist/app/services/prism-manifest.service.d.ts +4 -0
  133. package/dist/app/services/prism-manifest.service.d.ts.map +1 -1
  134. package/dist/app/services/prism-manifest.service.js +4 -0
  135. package/dist/app/services/prism-navigation.service.d.ts +12 -0
  136. package/dist/app/services/prism-navigation.service.d.ts.map +1 -1
  137. package/dist/app/services/prism-navigation.service.js +85 -19
  138. package/dist/app/services/prism-panel.service.d.ts +7 -3
  139. package/dist/app/services/prism-panel.service.d.ts.map +1 -1
  140. package/dist/app/services/prism-panel.service.js +13 -4
  141. package/dist/app/services/prism-renderer.service.d.ts +6 -0
  142. package/dist/app/services/prism-renderer.service.d.ts.map +1 -1
  143. package/dist/app/services/prism-renderer.service.js +40 -6
  144. package/dist/app/services/prism-search.service.d.ts +4 -0
  145. package/dist/app/services/prism-search.service.d.ts.map +1 -1
  146. package/dist/app/services/prism-search.service.js +29 -6
  147. package/dist/app/services/prism-theme.service.d.ts +11 -3
  148. package/dist/app/services/prism-theme.service.d.ts.map +1 -1
  149. package/dist/app/services/prism-theme.service.js +27 -19
  150. package/dist/app/services/prism-url-state.service.d.ts.map +1 -1
  151. package/dist/app/services/prism-url-state.service.js +42 -4
  152. package/dist/app/shared/badge.types.d.ts +7 -0
  153. package/dist/app/shared/badge.types.d.ts.map +1 -0
  154. package/dist/app/shared/badge.types.js +9 -0
  155. package/dist/app/shared/brand-mark.d.ts +35 -0
  156. package/dist/app/shared/brand-mark.d.ts.map +1 -0
  157. package/dist/app/shared/brand-mark.js +52 -0
  158. package/dist/app/shared/metric-bar.d.ts +6 -0
  159. package/dist/app/shared/metric-bar.d.ts.map +1 -0
  160. package/dist/app/shared/metric-bar.js +7 -0
  161. package/dist/app/shared/prism-badge.component.d.ts +21 -0
  162. package/dist/app/shared/prism-badge.component.d.ts.map +1 -0
  163. package/dist/app/shared/prism-badge.component.js +68 -0
  164. package/dist/app/shared/prism-button.component.d.ts +12 -0
  165. package/dist/app/shared/prism-button.component.d.ts.map +1 -0
  166. package/dist/app/shared/prism-button.component.js +28 -0
  167. package/dist/app/shared/prism-icon-button.component.d.ts +17 -0
  168. package/dist/app/shared/prism-icon-button.component.d.ts.map +1 -0
  169. package/dist/app/shared/prism-icon-button.component.js +37 -0
  170. package/dist/app/shared/prism-list-row.component.d.ts +17 -0
  171. package/dist/app/shared/prism-list-row.component.d.ts.map +1 -0
  172. package/dist/app/shared/prism-list-row.component.js +57 -0
  173. package/dist/app/shared/prism-logo.component.d.ts +24 -0
  174. package/dist/app/shared/prism-logo.component.d.ts.map +1 -0
  175. package/dist/app/shared/prism-logo.component.js +77 -0
  176. package/dist/app/shared/prism-metric-badge.component.d.ts +9 -4
  177. package/dist/app/shared/prism-metric-badge.component.d.ts.map +1 -1
  178. package/dist/app/shared/prism-metric-badge.component.js +33 -12
  179. package/dist/app/shared/prism-metric-card.component.d.ts +30 -0
  180. package/dist/app/shared/prism-metric-card.component.d.ts.map +1 -0
  181. package/dist/app/shared/prism-metric-card.component.js +111 -0
  182. package/dist/app/shared/prism-panel-toolbar.component.d.ts +13 -0
  183. package/dist/app/shared/prism-panel-toolbar.component.d.ts.map +1 -0
  184. package/dist/app/shared/prism-panel-toolbar.component.js +28 -0
  185. package/dist/app/shared/prism-segmented.component.d.ts +25 -0
  186. package/dist/app/shared/prism-segmented.component.d.ts.map +1 -0
  187. package/dist/app/shared/prism-segmented.component.js +77 -0
  188. package/dist/app/shared/prism-tabs.component.d.ts +44 -0
  189. package/dist/app/shared/prism-tabs.component.d.ts.map +1 -0
  190. package/dist/app/shared/prism-tabs.component.js +134 -0
  191. package/dist/app/shared/roving-focus.d.ts +13 -0
  192. package/dist/app/shared/roving-focus.d.ts.map +1 -0
  193. package/dist/app/shared/roving-focus.js +34 -0
  194. package/dist/app/shell/prism-shell.component.d.ts +13 -0
  195. package/dist/app/shell/prism-shell.component.d.ts.map +1 -1
  196. package/dist/app/shell/prism-shell.component.js +57 -28
  197. package/dist/app/shell/should-select-first.d.ts +17 -0
  198. package/dist/app/shell/should-select-first.d.ts.map +1 -0
  199. package/dist/app/shell/should-select-first.js +13 -0
  200. package/dist/app/sidebar/navigation-decorations.d.ts +23 -1
  201. package/dist/app/sidebar/navigation-decorations.d.ts.map +1 -1
  202. package/dist/app/sidebar/navigation-decorations.js +33 -2
  203. package/dist/app/sidebar/prism-sidebar.component.d.ts +5 -15
  204. package/dist/app/sidebar/prism-sidebar.component.d.ts.map +1 -1
  205. package/dist/app/sidebar/prism-sidebar.component.js +89 -77
  206. package/dist/app/theme/deprecated-tokens.d.ts +15 -0
  207. package/dist/app/theme/deprecated-tokens.d.ts.map +1 -0
  208. package/dist/app/theme/deprecated-tokens.js +22 -0
  209. package/dist/app/theme/favicon.d.ts +3 -0
  210. package/dist/app/theme/favicon.d.ts.map +1 -0
  211. package/dist/app/theme/favicon.js +3 -0
  212. package/dist/app/theme/prism-default-theme.d.ts.map +1 -1
  213. package/dist/app/theme/prism-default-theme.js +116 -61
  214. package/dist/app/theme/resolve-theme-tokens.d.ts +29 -0
  215. package/dist/app/theme/resolve-theme-tokens.d.ts.map +1 -0
  216. package/dist/app/theme/resolve-theme-tokens.js +43 -0
  217. package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts +4 -7
  218. package/dist/app/variant-ribbon/prism-variant-ribbon.component.d.ts.map +1 -1
  219. package/dist/app/variant-ribbon/prism-variant-ribbon.component.js +31 -69
  220. package/dist/app/view-tab-bar/next-view-id.d.ts +7 -1
  221. package/dist/app/view-tab-bar/next-view-id.d.ts.map +1 -1
  222. package/dist/app/view-tab-bar/next-view-id.js +9 -1
  223. package/dist/app/view-tab-bar/panel-inputs.d.ts +28 -0
  224. package/dist/app/view-tab-bar/panel-inputs.d.ts.map +1 -0
  225. package/dist/app/view-tab-bar/panel-inputs.js +41 -0
  226. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts +2 -3
  227. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts.map +1 -1
  228. package/dist/app/view-tab-bar/prism-view-panel-host.component.js +9 -9
  229. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts +6 -0
  230. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts.map +1 -1
  231. package/dist/app/view-tab-bar/prism-view-tab-bar.component.js +22 -29
  232. package/dist/builder/config-loader/deprecated-options.d.ts +4 -2
  233. package/dist/builder/config-loader/deprecated-options.d.ts.map +1 -1
  234. package/dist/builder/config-loader/deprecated-options.js +13 -2
  235. package/dist/builder/manifest/composition-wrapper.generator.d.ts +14 -0
  236. package/dist/builder/manifest/composition-wrapper.generator.d.ts.map +1 -0
  237. package/dist/builder/manifest/composition-wrapper.generator.js +66 -0
  238. package/dist/builder/manifest/host-parser.d.ts +2 -0
  239. package/dist/builder/manifest/host-parser.d.ts.map +1 -1
  240. package/dist/builder/manifest/host-parser.js +9 -4
  241. package/dist/builder/manifest/manifest-imports.d.ts +34 -0
  242. package/dist/builder/manifest/manifest-imports.d.ts.map +1 -0
  243. package/dist/builder/manifest/manifest-imports.js +91 -0
  244. package/dist/builder/manifest/runtime-manifest.generator.d.ts +13 -0
  245. package/dist/builder/manifest/runtime-manifest.generator.d.ts.map +1 -1
  246. package/dist/builder/manifest/runtime-manifest.generator.js +135 -64
  247. package/dist/builder/manifest/selector-element.d.ts +16 -0
  248. package/dist/builder/manifest/selector-element.d.ts.map +1 -0
  249. package/dist/builder/manifest/selector-element.js +46 -0
  250. package/dist/builder/manifest/template-literal.d.ts +3 -0
  251. package/dist/builder/manifest/template-literal.d.ts.map +1 -0
  252. package/dist/builder/manifest/template-literal.js +4 -0
  253. package/dist/builder/plugin-runner/plugin-runner.d.ts.map +1 -1
  254. package/dist/builder/plugin-runner/plugin-runner.js +29 -26
  255. package/dist/builder/scanner/api/angular-decorators.d.ts +84 -0
  256. package/dist/builder/scanner/api/angular-decorators.d.ts.map +1 -0
  257. package/dist/builder/scanner/api/angular-decorators.js +157 -0
  258. package/dist/builder/scanner/api/component-api.extractor.d.ts +13 -0
  259. package/dist/builder/scanner/api/component-api.extractor.d.ts.map +1 -0
  260. package/dist/builder/scanner/api/component-api.extractor.js +104 -0
  261. package/dist/builder/scanner/api/doc-tags.d.ts +13 -0
  262. package/dist/builder/scanner/api/doc-tags.d.ts.map +1 -0
  263. package/dist/builder/scanner/api/doc-tags.js +101 -0
  264. package/dist/builder/scanner/api/export-index.d.ts +18 -0
  265. package/dist/builder/scanner/api/export-index.d.ts.map +1 -0
  266. package/dist/builder/scanner/api/export-index.js +22 -0
  267. package/dist/builder/scanner/api/member.extractor.d.ts +90 -0
  268. package/dist/builder/scanner/api/member.extractor.d.ts.map +1 -0
  269. package/dist/builder/scanner/api/member.extractor.js +270 -0
  270. package/dist/builder/scanner/api/pipe-api.extractor.d.ts +12 -0
  271. package/dist/builder/scanner/api/pipe-api.extractor.d.ts.map +1 -0
  272. package/dist/builder/scanner/api/pipe-api.extractor.js +52 -0
  273. package/dist/builder/scanner/api/service-api.extractor.d.ts +14 -0
  274. package/dist/builder/scanner/api/service-api.extractor.d.ts.map +1 -0
  275. package/dist/builder/scanner/api/service-api.extractor.js +119 -0
  276. package/dist/builder/scanner/api/setup.reader.d.ts +26 -0
  277. package/dist/builder/scanner/api/setup.reader.d.ts.map +1 -0
  278. package/dist/builder/scanner/api/setup.reader.js +89 -0
  279. package/dist/builder/scanner/api/type-collector.d.ts +24 -0
  280. package/dist/builder/scanner/api/type-collector.d.ts.map +1 -0
  281. package/dist/builder/scanner/api/type-collector.js +211 -0
  282. package/dist/builder/scanner/ast-utils.d.ts +8 -0
  283. package/dist/builder/scanner/ast-utils.d.ts.map +1 -1
  284. package/dist/builder/scanner/ast-utils.js +37 -1
  285. package/dist/builder/scanner/class-hierarchy.d.ts +5 -3
  286. package/dist/builder/scanner/class-hierarchy.d.ts.map +1 -1
  287. package/dist/builder/scanner/class-hierarchy.js +12 -6
  288. package/dist/builder/scanner/component.scanner.d.ts +60 -6
  289. package/dist/builder/scanner/component.scanner.d.ts.map +1 -1
  290. package/dist/builder/scanner/component.scanner.js +209 -57
  291. package/dist/builder/scanner/composition/compose-template.d.ts +36 -0
  292. package/dist/builder/scanner/composition/compose-template.d.ts.map +1 -0
  293. package/dist/builder/scanner/composition/compose-template.js +187 -0
  294. package/dist/builder/scanner/composition/declarables.d.ts +54 -0
  295. package/dist/builder/scanner/composition/declarables.d.ts.map +1 -0
  296. package/dist/builder/scanner/composition/declarables.js +182 -0
  297. package/dist/builder/scanner/composition/match-declarables.d.ts +43 -0
  298. package/dist/builder/scanner/composition/match-declarables.d.ts.map +1 -0
  299. package/dist/builder/scanner/composition/match-declarables.js +131 -0
  300. package/dist/builder/scanner/composition/read-composition.d.ts +77 -0
  301. package/dist/builder/scanner/composition/read-composition.d.ts.map +1 -0
  302. package/dist/builder/scanner/composition/read-composition.js +302 -0
  303. package/dist/builder/scanner/composition/template-elements.d.ts +12 -0
  304. package/dist/builder/scanner/composition/template-elements.d.ts.map +1 -0
  305. package/dist/builder/scanner/composition/template-elements.js +41 -0
  306. package/dist/builder/scanner/index.d.ts +4 -0
  307. package/dist/builder/scanner/index.d.ts.map +1 -1
  308. package/dist/builder/scanner/index.js +2 -0
  309. package/dist/builder/scanner/input.extractor.d.ts +31 -2
  310. package/dist/builder/scanner/input.extractor.d.ts.map +1 -1
  311. package/dist/builder/scanner/input.extractor.js +52 -15
  312. package/dist/builder/scanner/pipe.scanner.d.ts +29 -0
  313. package/dist/builder/scanner/pipe.scanner.d.ts.map +1 -0
  314. package/dist/builder/scanner/pipe.scanner.js +65 -0
  315. package/dist/builder/scanner/scanner.d.ts +25 -1
  316. package/dist/builder/scanner/scanner.d.ts.map +1 -1
  317. package/dist/builder/scanner/scanner.js +60 -26
  318. package/dist/builder/scanner/service/angular-decorators.d.ts +80 -0
  319. package/dist/builder/scanner/service/angular-decorators.d.ts.map +1 -0
  320. package/dist/builder/scanner/service/angular-decorators.js +154 -0
  321. package/dist/builder/scanner/service/doc-tags.d.ts +13 -0
  322. package/dist/builder/scanner/service/doc-tags.d.ts.map +1 -0
  323. package/dist/builder/scanner/service/doc-tags.js +97 -0
  324. package/dist/builder/scanner/service/export-index.d.ts +18 -0
  325. package/dist/builder/scanner/service/export-index.d.ts.map +1 -0
  326. package/dist/builder/scanner/service/export-index.js +22 -0
  327. package/dist/builder/scanner/service/member.extractor.d.ts +65 -0
  328. package/dist/builder/scanner/service/member.extractor.d.ts.map +1 -0
  329. package/dist/builder/scanner/service/member.extractor.js +216 -0
  330. package/dist/builder/scanner/service/pipe-api.extractor.d.ts +12 -0
  331. package/dist/builder/scanner/service/pipe-api.extractor.d.ts.map +1 -0
  332. package/dist/builder/scanner/service/pipe-api.extractor.js +72 -0
  333. package/dist/builder/scanner/service/service-api.extractor.d.ts +14 -0
  334. package/dist/builder/scanner/service/service-api.extractor.d.ts.map +1 -0
  335. package/dist/builder/scanner/service/service-api.extractor.js +119 -0
  336. package/dist/builder/scanner/service/setup.reader.d.ts +26 -0
  337. package/dist/builder/scanner/service/setup.reader.d.ts.map +1 -0
  338. package/dist/builder/scanner/service/setup.reader.js +89 -0
  339. package/dist/builder/scanner/service/type-collector.d.ts +23 -0
  340. package/dist/builder/scanner/service/type-collector.d.ts.map +1 -0
  341. package/dist/builder/scanner/service/type-collector.js +210 -0
  342. package/dist/builder/scanner/service.scanner.d.ts +26 -0
  343. package/dist/builder/scanner/service.scanner.d.ts.map +1 -0
  344. package/dist/builder/scanner/service.scanner.js +61 -0
  345. package/dist/builder/scanner/showcase-diagnostics.d.ts +60 -1
  346. package/dist/builder/scanner/showcase-diagnostics.d.ts.map +1 -1
  347. package/dist/builder/scanner/showcase-diagnostics.js +114 -1
  348. package/dist/builder/shared/prism-pipeline.d.ts +6 -0
  349. package/dist/builder/shared/prism-pipeline.d.ts.map +1 -1
  350. package/dist/builder/shared/prism-pipeline.js +43 -5
  351. package/dist/decorator/index.d.ts +1 -1
  352. package/dist/decorator/index.d.ts.map +1 -1
  353. package/dist/decorator/showcase.types.d.ts +79 -9
  354. package/dist/decorator/showcase.types.d.ts.map +1 -1
  355. package/dist/plugin/index.d.ts +6 -1
  356. package/dist/plugin/index.d.ts.map +1 -1
  357. package/dist/plugin/index.js +4 -0
  358. package/dist/plugin/pipe.types.d.ts +36 -0
  359. package/dist/plugin/pipe.types.d.ts.map +1 -0
  360. package/dist/plugin/pipe.types.js +1 -0
  361. package/dist/plugin/plugin.types.d.ts +140 -3
  362. package/dist/plugin/plugin.types.d.ts.map +1 -1
  363. package/dist/plugin/service.types.d.ts +124 -0
  364. package/dist/plugin/service.types.d.ts.map +1 -0
  365. package/dist/plugin/service.types.js +1 -0
  366. package/dist/plugin/status.d.ts +27 -0
  367. package/dist/plugin/status.d.ts.map +1 -0
  368. package/dist/plugin/status.js +26 -0
  369. package/dist/shared/composition.d.ts +30 -0
  370. package/dist/shared/composition.d.ts.map +1 -0
  371. package/dist/shared/composition.js +29 -0
  372. package/dist/shared/pseudo-state.type.d.ts +2 -1
  373. package/dist/shared/pseudo-state.type.d.ts.map +1 -1
  374. package/dist/shared/void-elements.d.ts +3 -0
  375. package/dist/shared/void-elements.d.ts.map +1 -0
  376. package/dist/shared/void-elements.js +2 -0
  377. package/package.json +1 -1
@@ -0,0 +1,12 @@
1
+ const SEVERITY = {
2
+ critical: { label: 'Critical', tone: 'danger', variant: 'soft' },
3
+ // Serious fails the build gate like critical does, so it shares the tone and
4
+ // is told apart by its outline and its word, not by a fifth colour.
5
+ serious: { label: 'Serious', tone: 'danger', variant: 'outline' },
6
+ moderate: { label: 'Moderate', tone: 'warn', variant: 'soft' },
7
+ minor: { label: 'Minor', tone: 'neutral', variant: 'soft' }
8
+ };
9
+ /** The badge of an axe impact level; an unknown impact reads as minor. */
10
+ export function severityBadge(impact) {
11
+ return SEVERITY[impact] ?? SEVERITY.minor;
12
+ }
@@ -1,3 +1,11 @@
1
- import type { InputMeta } from '../../../plugin/plugin.types.js';
1
+ import type { InputMeta, RuntimeComponent } from '../../../plugin/plugin.types.js';
2
2
  export declare function isNonEditableInputType(input: InputMeta): boolean;
3
+ /**
4
+ * Why the controls panel cannot edit `input` in variant `variantIndex`, `null`
5
+ * when it can: the composition of the variant does not bind it, because its
6
+ * template sets it or because its default is unknown, or its type is a
7
+ * framework reference. The first two hold for the variant, the last for every
8
+ * variant.
9
+ */
10
+ export declare function nonEditableReason(input: InputMeta, comp: RuntimeComponent, variantIndex: number): string | null;
3
11
  //# sourceMappingURL=non-editable-input-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"non-editable-input-types.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/controls/non-editable-input-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAcjE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAKhE"}
1
+ {"version":3,"file":"non-editable-input-types.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/controls/non-editable-input-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAenF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAKhE;AAOD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK/G"}
@@ -1,3 +1,4 @@
1
+ import { activeCase } from '../../renderer/composition.js';
1
2
  /**
2
3
  * Angular framework reference types that aren't meaningfully editable via
3
4
  * a JSON textarea (they wrap live framework objects, not data). When a
@@ -14,3 +15,20 @@ export function isNonEditableInputType(input) {
14
15
  return false;
15
16
  return NON_EDITABLE_TYPE_PATTERN.test(raw);
16
17
  }
18
+ const UNBOUND_REASONS = {
19
+ template: 'Set by the template of this variant',
20
+ default: 'Its default is unknown to ng-prism'
21
+ };
22
+ /**
23
+ * Why the controls panel cannot edit `input` in variant `variantIndex`, `null`
24
+ * when it can: the composition of the variant does not bind it, because its
25
+ * template sets it or because its default is unknown, or its type is a
26
+ * framework reference. The first two hold for the variant, the last for every
27
+ * variant.
28
+ */
29
+ export function nonEditableReason(input, comp, variantIndex) {
30
+ const unbound = activeCase(comp, variantIndex)?.unbound.find(({ name }) => name === input.name);
31
+ if (unbound)
32
+ return UNBOUND_REASONS[unbound.reason];
33
+ return isNonEditableInputType(input) ? 'Framework reference type' : null;
34
+ }
@@ -8,7 +8,8 @@ export declare class PrismControlsPanelComponent {
8
8
  private readonly pluginService;
9
9
  readonly activeComponent: import("@angular/core").InputSignal<RuntimeComponent | null>;
10
10
  protected getCustomControl(input: InputMeta): ControlDefinition | null;
11
- protected isNonEditable(input: InputMeta): boolean;
11
+ /** Why `input` cannot be edited in the active variant, `null` when it can. */
12
+ protected notEditableReason(input: InputMeta, comp: RuntimeComponent): string | null;
12
13
  protected asBoolean(val: unknown): boolean;
13
14
  protected asNumber(val: unknown): number;
14
15
  protected asString(val: unknown): string;
@@ -1 +1 @@
1
- {"version":3,"file":"prism-controls-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/controls/prism-controls-panel.component.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAMtG,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;;AAGhF,qBAQa,2BAA2B;IACpC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,yBAAkC;IACtE,SAAS,CAAC,QAAQ,CAAC,eAAe,uBAAgC;IAClE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAE5D,QAAQ,CAAC,eAAe,+DAAwC;IAEhE,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,iBAAiB,GAAG,IAAI;IAItE,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;IAIlD,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI1C,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM;IAIxC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM;yCAvB/B,2BAA2B;2CAA3B,2BAA2B;CA0BvC"}
1
+ {"version":3,"file":"prism-controls-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/controls/prism-controls-panel.component.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAMtG,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;;AAKhF,qBAiBa,2BAA2B;IACpC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,yBAAkC;IACtE,SAAS,CAAC,QAAQ,CAAC,eAAe,uBAAgC;IAClE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAE5D,QAAQ,CAAC,eAAe,+DAAwC;IAEhE,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,iBAAiB,GAAG,IAAI;IAItE,8EAA8E;IAC9E,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI;IAIpF,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI1C,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM;IAIxC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM;yCAxB/B,2BAA2B;2CAA3B,2BAA2B;CA2BvC"}
@@ -8,121 +8,120 @@ import { UnionControlComponent } from '../../controls/union-control.component.js
8
8
  import { PrismNavigationService } from '../../services/prism-navigation.service.js';
9
9
  import { PrismPluginService } from '../../services/prism-plugin.service.js';
10
10
  import { PrismRendererService } from '../../services/prism-renderer.service.js';
11
- import { isNonEditableInputType } from './non-editable-input-types.js';
11
+ import { PrismButtonComponent } from '../../shared/prism-button.component.js';
12
+ import { PrismPanelToolbarComponent } from '../../shared/prism-panel-toolbar.component.js';
13
+ import { nonEditableReason } from './non-editable-input-types.js';
12
14
  import * as i0 from "@angular/core";
13
15
  const _c0 = (a0, a1) => ({ inputMeta: a0, rendererService: a1 });
14
16
  const _c1 = () => [];
15
17
  const _forTrack0 = ($index, $item) => $item.name;
16
18
  function PrismControlsPanelComponent_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
17
19
  const _r1 = i0.ɵɵgetCurrentView();
18
- i0.ɵɵelementStart(0, "div", 1)(1, "span", 4);
19
- i0.ɵɵelement(2, "span", 5);
20
- i0.ɵɵtext(3);
21
- i0.ɵɵelementEnd();
22
- i0.ɵɵelementStart(4, "button", 6);
23
- i0.ɵɵlistener("click", function PrismControlsPanelComponent_Conditional_0_Conditional_1_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.rendererService.resetInputsToVariantDefaults()); });
24
- i0.ɵɵelementStart(5, "span", 7);
25
- i0.ɵɵtext(6, "\u21BB");
26
- i0.ɵɵelementEnd();
27
- i0.ɵɵtext(7, " Reset ");
20
+ i0.ɵɵelementStart(0, "prism-panel-toolbar")(1, "button", 4);
21
+ i0.ɵɵlistener("click", function PrismControlsPanelComponent_Conditional_0_Conditional_1_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.rendererService.resetInputsToVariantDefaults()); });
22
+ i0.ɵɵtext(2, " Reset ");
28
23
  i0.ɵɵelementEnd()();
29
24
  } if (rf & 2) {
30
25
  const dirtyCount_r3 = ctx;
31
- i0.ɵɵadvance(3);
32
- i0.ɵɵtextInterpolate2(" ", dirtyCount_r3, " ", dirtyCount_r3 === 1 ? "input" : "inputs", " modified ");
26
+ i0.ɵɵadvance();
27
+ i0.ɵɵproperty("title", "Reset " + dirtyCount_r3 + " modified " + (dirtyCount_r3 === 1 ? "input" : "inputs") + " to the variant defaults");
33
28
  } }
34
- function PrismControlsPanelComponent_Conditional_0_For_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
35
- i0.ɵɵelementContainer(0, 8);
29
+ function PrismControlsPanelComponent_Conditional_0_For_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
30
+ i0.ɵɵelementContainer(0, 5);
36
31
  } if (rf & 2) {
37
32
  const input_r4 = i0.ɵɵnextContext().$implicit;
38
33
  const ctx_r1 = i0.ɵɵnextContext(2);
39
34
  i0.ɵɵproperty("ngComponentOutlet", ctx.component)("ngComponentOutletInputs", i0.ɵɵpureFunction2(2, _c0, input_r4, ctx_r1.rendererService));
40
35
  } }
41
- function PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
42
- i0.ɵɵelementStart(0, "span", 13);
36
+ function PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
37
+ i0.ɵɵelementStart(0, "span", 10);
43
38
  i0.ɵɵtext(1, "Not editable");
44
39
  i0.ɵɵelementEnd();
40
+ } if (rf & 2) {
41
+ i0.ɵɵproperty("title", ctx);
45
42
  } }
46
- function PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Case_0_Template(rf, ctx) { if (rf & 1) {
43
+ function PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Case_0_Template(rf, ctx) { if (rf & 1) {
47
44
  const _r5 = i0.ɵɵgetCurrentView();
48
- i0.ɵɵelementStart(0, "prism-boolean-control", 16);
49
- i0.ɵɵlistener("valueChange", function PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Case_0_Template_prism_boolean_control_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const input_r4 = i0.ɵɵnextContext(3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.rendererService.updateInput(input_r4.name, $event)); });
45
+ i0.ɵɵelementStart(0, "prism-boolean-control", 13);
46
+ i0.ɵɵlistener("valueChange", function PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Case_0_Template_prism_boolean_control_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const input_r4 = i0.ɵɵnextContext(3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.rendererService.updateInput(input_r4.name, $event)); });
50
47
  i0.ɵɵelementEnd();
51
48
  } if (rf & 2) {
52
49
  const input_r4 = i0.ɵɵnextContext(3).$implicit;
53
50
  const ctx_r1 = i0.ɵɵnextContext(2);
54
51
  i0.ɵɵproperty("value", ctx_r1.asBoolean(ctx_r1.rendererService.inputValues()[input_r4.name]));
55
52
  } }
56
- function PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Case_1_Template(rf, ctx) { if (rf & 1) {
53
+ function PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Case_1_Template(rf, ctx) { if (rf & 1) {
57
54
  const _r6 = i0.ɵɵgetCurrentView();
58
- i0.ɵɵelementStart(0, "prism-number-control", 16);
59
- i0.ɵɵlistener("valueChange", function PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Case_1_Template_prism_number_control_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const input_r4 = i0.ɵɵnextContext(3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.rendererService.updateInput(input_r4.name, $event)); });
55
+ i0.ɵɵelementStart(0, "prism-number-control", 13);
56
+ i0.ɵɵlistener("valueChange", function PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Case_1_Template_prism_number_control_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const input_r4 = i0.ɵɵnextContext(3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.rendererService.updateInput(input_r4.name, $event)); });
60
57
  i0.ɵɵelementEnd();
61
58
  } if (rf & 2) {
62
59
  const input_r4 = i0.ɵɵnextContext(3).$implicit;
63
60
  const ctx_r1 = i0.ɵɵnextContext(2);
64
61
  i0.ɵɵproperty("value", ctx_r1.asNumber(ctx_r1.rendererService.inputValues()[input_r4.name]));
65
62
  } }
66
- function PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Case_2_Template(rf, ctx) { if (rf & 1) {
63
+ function PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Case_2_Template(rf, ctx) { if (rf & 1) {
67
64
  const _r7 = i0.ɵɵgetCurrentView();
68
- i0.ɵɵelementStart(0, "prism-union-control", 17);
69
- i0.ɵɵlistener("valueChange", function PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Case_2_Template_prism_union_control_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r7); const input_r4 = i0.ɵɵnextContext(3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.rendererService.updateInput(input_r4.name, $event)); });
65
+ i0.ɵɵelementStart(0, "prism-union-control", 14);
66
+ i0.ɵɵlistener("valueChange", function PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Case_2_Template_prism_union_control_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r7); const input_r4 = i0.ɵɵnextContext(3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.rendererService.updateInput(input_r4.name, $event)); });
70
67
  i0.ɵɵelementEnd();
71
68
  } if (rf & 2) {
72
69
  const input_r4 = i0.ɵɵnextContext(3).$implicit;
73
70
  const ctx_r1 = i0.ɵɵnextContext(2);
74
71
  i0.ɵɵproperty("value", ctx_r1.asString(ctx_r1.rendererService.inputValues()[input_r4.name]))("options", input_r4.values ?? i0.ɵɵpureFunction0(2, _c1));
75
72
  } }
76
- function PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Case_3_Template(rf, ctx) { if (rf & 1) {
73
+ function PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Case_3_Template(rf, ctx) { if (rf & 1) {
77
74
  const _r8 = i0.ɵɵgetCurrentView();
78
- i0.ɵɵelementStart(0, "prism-string-control", 16);
79
- i0.ɵɵlistener("valueChange", function PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Case_3_Template_prism_string_control_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r8); const input_r4 = i0.ɵɵnextContext(3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.rendererService.updateInput(input_r4.name, $event)); });
75
+ i0.ɵɵelementStart(0, "prism-string-control", 13);
76
+ i0.ɵɵlistener("valueChange", function PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Case_3_Template_prism_string_control_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r8); const input_r4 = i0.ɵɵnextContext(3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.rendererService.updateInput(input_r4.name, $event)); });
80
77
  i0.ɵɵelementEnd();
81
78
  } if (rf & 2) {
82
79
  const input_r4 = i0.ɵɵnextContext(3).$implicit;
83
80
  const ctx_r1 = i0.ɵɵnextContext(2);
84
81
  i0.ɵɵproperty("value", ctx_r1.asString(ctx_r1.rendererService.inputValues()[input_r4.name]));
85
82
  } }
86
- function PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Case_4_Template(rf, ctx) { if (rf & 1) {
83
+ function PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Case_4_Template(rf, ctx) { if (rf & 1) {
87
84
  const _r9 = i0.ɵɵgetCurrentView();
88
- i0.ɵɵelementStart(0, "prism-json-control", 16);
89
- i0.ɵɵlistener("valueChange", function PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Case_4_Template_prism_json_control_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const input_r4 = i0.ɵɵnextContext(3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.rendererService.updateInput(input_r4.name, $event)); });
85
+ i0.ɵɵelementStart(0, "prism-json-control", 13);
86
+ i0.ɵɵlistener("valueChange", function PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Case_4_Template_prism_json_control_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const input_r4 = i0.ɵɵnextContext(3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.rendererService.updateInput(input_r4.name, $event)); });
90
87
  i0.ɵɵelementEnd();
91
88
  } if (rf & 2) {
92
89
  const input_r4 = i0.ɵɵnextContext(3).$implicit;
93
90
  const ctx_r1 = i0.ɵɵnextContext(2);
94
91
  i0.ɵɵproperty("value", ctx_r1.rendererService.inputValues()[input_r4.name]);
95
92
  } }
96
- function PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
97
- i0.ɵɵconditionalCreate(0, PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Case_0_Template, 1, 1, "prism-boolean-control", 14)(1, PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Case_1_Template, 1, 1, "prism-number-control", 14)(2, PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Case_2_Template, 1, 3, "prism-union-control", 15)(3, PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Case_3_Template, 1, 1, "prism-string-control", 14)(4, PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Case_4_Template, 1, 1, "prism-json-control", 14);
93
+ function PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
94
+ i0.ɵɵconditionalCreate(0, PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Case_0_Template, 1, 1, "prism-boolean-control", 11)(1, PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Case_1_Template, 1, 1, "prism-number-control", 11)(2, PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Case_2_Template, 1, 3, "prism-union-control", 12)(3, PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Case_3_Template, 1, 1, "prism-string-control", 11)(4, PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Case_4_Template, 1, 1, "prism-json-control", 11);
98
95
  } if (rf & 2) {
99
96
  let tmp_14_0;
100
97
  const input_r4 = i0.ɵɵnextContext(2).$implicit;
101
98
  i0.ɵɵconditional((tmp_14_0 = input_r4.type) === "boolean" ? 0 : tmp_14_0 === "number" ? 1 : tmp_14_0 === "union" ? 2 : tmp_14_0 === "string" ? 3 : 4);
102
99
  } }
103
- function PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
104
- i0.ɵɵelementStart(0, "div", 9)(1, "span", 10);
100
+ function PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
101
+ i0.ɵɵelementStart(0, "div", 6)(1, "span", 7);
105
102
  i0.ɵɵtext(2);
106
103
  i0.ɵɵelementEnd();
107
- i0.ɵɵelementStart(3, "span", 11)(4, "b");
108
- i0.ɵɵtext(5);
109
- i0.ɵɵelementEnd()()();
110
- i0.ɵɵelementStart(6, "div", 12);
111
- i0.ɵɵconditionalCreate(7, PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_7_Template, 2, 0, "span", 13)(8, PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Conditional_8_Template, 5, 1);
104
+ i0.ɵɵelementStart(3, "span", 8);
105
+ i0.ɵɵtext(4);
106
+ i0.ɵɵelementEnd()();
107
+ i0.ɵɵelementStart(5, "div", 9);
108
+ i0.ɵɵconditionalCreate(6, PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_6_Template, 2, 1, "span", 10)(7, PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Conditional_7_Template, 5, 1);
112
109
  i0.ɵɵelementEnd();
113
110
  } if (rf & 2) {
111
+ let tmp_15_0;
114
112
  const input_r4 = i0.ɵɵnextContext().$implicit;
115
- const ctx_r1 = i0.ɵɵnextContext(2);
113
+ const comp_r10 = i0.ɵɵnextContext();
114
+ const ctx_r1 = i0.ɵɵnextContext();
116
115
  i0.ɵɵadvance(2);
117
116
  i0.ɵɵtextInterpolate(input_r4.name);
118
- i0.ɵɵadvance(3);
117
+ i0.ɵɵadvance(2);
119
118
  i0.ɵɵtextInterpolate(input_r4.rawType ?? input_r4.type);
120
119
  i0.ɵɵadvance(2);
121
- i0.ɵɵconditional(ctx_r1.isNonEditable(input_r4) ? 7 : 8);
120
+ i0.ɵɵconditional((tmp_15_0 = ctx_r1.notEditableReason(input_r4, comp_r10)) ? 6 : 7, tmp_15_0);
122
121
  } }
123
- function PrismControlsPanelComponent_Conditional_0_For_3_Template(rf, ctx) { if (rf & 1) {
122
+ function PrismControlsPanelComponent_Conditional_0_For_4_Template(rf, ctx) { if (rf & 1) {
124
123
  i0.ɵɵelementStart(0, "div", 2);
125
- i0.ɵɵconditionalCreate(1, PrismControlsPanelComponent_Conditional_0_For_3_Conditional_1_Template, 1, 5, "ng-container", 8)(2, PrismControlsPanelComponent_Conditional_0_For_3_Conditional_2_Template, 9, 3);
124
+ i0.ɵɵconditionalCreate(1, PrismControlsPanelComponent_Conditional_0_For_4_Conditional_1_Template, 1, 5, "ng-container", 5)(2, PrismControlsPanelComponent_Conditional_0_For_4_Conditional_2_Template, 8, 3);
126
125
  i0.ɵɵelementEnd();
127
126
  } if (rf & 2) {
128
127
  let tmp_12_0;
@@ -131,16 +130,18 @@ function PrismControlsPanelComponent_Conditional_0_For_3_Template(rf, ctx) { if
131
130
  i0.ɵɵadvance();
132
131
  i0.ɵɵconditional((tmp_12_0 = ctx_r1.getCustomControl(input_r4)) ? 1 : 2, tmp_12_0);
133
132
  } }
134
- function PrismControlsPanelComponent_Conditional_0_Conditional_4_Template(rf, ctx) { if (rf & 1) {
133
+ function PrismControlsPanelComponent_Conditional_0_Conditional_5_Template(rf, ctx) { if (rf & 1) {
135
134
  i0.ɵɵelementStart(0, "p", 3);
136
135
  i0.ɵɵtext(1, "No inputs available");
137
136
  i0.ɵɵelementEnd();
138
137
  } }
139
138
  function PrismControlsPanelComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
140
139
  i0.ɵɵelementStart(0, "div", 0);
141
- i0.ɵɵconditionalCreate(1, PrismControlsPanelComponent_Conditional_0_Conditional_1_Template, 8, 2, "div", 1);
142
- i0.ɵɵrepeaterCreate(2, PrismControlsPanelComponent_Conditional_0_For_3_Template, 3, 1, "div", 2, _forTrack0);
143
- i0.ɵɵconditionalCreate(4, PrismControlsPanelComponent_Conditional_0_Conditional_4_Template, 2, 0, "p", 3);
140
+ i0.ɵɵconditionalCreate(1, PrismControlsPanelComponent_Conditional_0_Conditional_1_Template, 3, 1, "prism-panel-toolbar");
141
+ i0.ɵɵelementStart(2, "div", 1);
142
+ i0.ɵɵrepeaterCreate(3, PrismControlsPanelComponent_Conditional_0_For_4_Template, 3, 1, "div", 2, _forTrack0);
143
+ i0.ɵɵelementEnd();
144
+ i0.ɵɵconditionalCreate(5, PrismControlsPanelComponent_Conditional_0_Conditional_5_Template, 2, 0, "p", 3);
144
145
  i0.ɵɵelementEnd();
145
146
  } if (rf & 2) {
146
147
  let tmp_2_0;
@@ -148,10 +149,10 @@ function PrismControlsPanelComponent_Conditional_0_Template(rf, ctx) { if (rf &
148
149
  const ctx_r1 = i0.ɵɵnextContext();
149
150
  i0.ɵɵadvance();
150
151
  i0.ɵɵconditional((tmp_2_0 = ctx_r1.rendererService.dirtyInputCount()) ? 1 : -1, tmp_2_0);
151
- i0.ɵɵadvance();
152
+ i0.ɵɵadvance(2);
152
153
  i0.ɵɵrepeater(comp_r10.meta.inputs);
153
154
  i0.ɵɵadvance(2);
154
- i0.ɵɵconditional(comp_r10.meta.inputs.length === 0 ? 4 : -1);
155
+ i0.ɵɵconditional(comp_r10.meta.inputs.length === 0 ? 5 : -1);
155
156
  } }
156
157
  export class PrismControlsPanelComponent {
157
158
  navigationService = inject(PrismNavigationService);
@@ -162,8 +163,9 @@ export class PrismControlsPanelComponent {
162
163
  getCustomControl(input) {
163
164
  return this.pluginService.controls().find((ctrl) => ctrl.matchType(input)) ?? null;
164
165
  }
165
- isNonEditable(input) {
166
- return isNonEditableInputType(input);
166
+ /** Why `input` cannot be edited in the active variant, `null` when it can. */
167
+ notEditableReason(input, comp) {
168
+ return nonEditableReason(input, comp, this.rendererService.activeVariantIndex());
167
169
  }
168
170
  asBoolean(val) {
169
171
  return Boolean(val);
@@ -175,15 +177,31 @@ export class PrismControlsPanelComponent {
175
177
  return String(val ?? '');
176
178
  }
177
179
  static ɵfac = function PrismControlsPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PrismControlsPanelComponent)(); };
178
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismControlsPanelComponent, selectors: [["prism-controls-panel"]], inputs: { activeComponent: [1, "activeComponent"] }, decls: 1, vars: 1, consts: [[1, "ctl-panel"], [1, "ctl-toolbar"], [1, "ctl-row"], [1, "ctl-empty"], [1, "ctl-dirty-info"], ["aria-hidden", "true", 1, "ctl-dirty-dot"], ["type", "button", "title", "Reset all inputs to variant defaults", 1, "ctl-reset-btn", 3, "click"], ["aria-hidden", "true"], [3, "ngComponentOutlet", "ngComponentOutletInputs"], [1, "ctl-label"], [1, "ctl-name"], [1, "ctl-type"], [1, "ctl-input"], ["title", "This input type can't be edited from the controls panel", 1, "ctl-not-editable"], [3, "value"], [3, "value", "options"], [3, "valueChange", "value"], [3, "valueChange", "value", "options"]], template: function PrismControlsPanelComponent_Template(rf, ctx) { if (rf & 1) {
179
- i0.ɵɵconditionalCreate(0, PrismControlsPanelComponent_Conditional_0_Template, 5, 2, "div", 0);
180
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismControlsPanelComponent, selectors: [["prism-controls-panel"]], inputs: { activeComponent: [1, "activeComponent"] }, decls: 1, vars: 1, consts: [[1, "ctl-panel"], [1, "ctl-rows"], [1, "ctl-row"], [1, "ctl-empty"], ["toolbarEnd", "", "prismButton", "", "variant", "secondary", 3, "click", "title"], [3, "ngComponentOutlet", "ngComponentOutletInputs"], [1, "ctl-label"], [1, "ctl-name"], [1, "ctl-type"], [1, "ctl-input"], [1, "ctl-not-editable", 3, "title"], [3, "value"], [3, "value", "options"], [3, "valueChange", "value"], [3, "valueChange", "value", "options"]], template: function PrismControlsPanelComponent_Template(rf, ctx) { if (rf & 1) {
181
+ i0.ɵɵconditionalCreate(0, PrismControlsPanelComponent_Conditional_0_Template, 6, 2, "div", 0);
180
182
  } if (rf & 2) {
181
183
  let tmp_0_0;
182
184
  i0.ɵɵconditional((tmp_0_0 = ctx.navigationService.activeComponent()) ? 0 : -1, tmp_0_0);
183
- } }, dependencies: [NgComponentOutlet, BooleanControlComponent, StringControlComponent, NumberControlComponent, UnionControlComponent, JsonControlComponent], styles: [".ctl-panel[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n}\n\n.ctl-toolbar[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n z-index: 2;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 20px;\n background: var(--%NS%prism-bg-elevated);\n border-bottom: 1px solid var(--%NS%prism-border);\n}\n\n.ctl-dirty-info[_ngcontent-%COMP%] {\n display: inline-flex;\n gap: 6px;\n align-items: center;\n font-family: var(--%NS%font-mono);\n font-size: 11.5px;\n color: var(--%NS%prism-text-muted);\n}\n\n.ctl-dirty-dot[_ngcontent-%COMP%] {\n width: 6px;\n height: 6px;\n background: var(--%NS%prism-primary);\n border-radius: 50%;\n box-shadow: 0 0 6px color-mix(in srgb, var(--%NS%prism-primary) 60%, transparent);\n}\n\n.ctl-reset-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n gap: 5px;\n align-items: center;\n height: 24px;\n padding: 0 10px;\n font-family: var(--%NS%font-sans);\n font-size: 11.5px;\n font-weight: 500;\n color: var(--%NS%prism-text-muted);\n cursor: pointer;\n background: transparent;\n border: 1px solid var(--%NS%prism-border);\n border-radius: 5px;\n transition:\n color var(--%NS%dur-fast),\n background var(--%NS%dur-fast),\n border-color var(--%NS%dur-fast);\n}\n\n.ctl-reset-btn[_ngcontent-%COMP%]:hover {\n color: var(--%NS%prism-text);\n background: color-mix(in srgb, var(--%NS%prism-primary) 8%, transparent);\n border-color: color-mix(in srgb, var(--%NS%prism-primary) 40%, var(--%NS%prism-border));\n}\n\n.ctl-reset-btn[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--%NS%prism-primary);\n outline-offset: 1px;\n}\n\n.ctl-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 180px 1fr;\n gap: 12px;\n align-items: center;\n min-height: 40px;\n padding: 8px 20px;\n border-bottom: 1px solid var(--%NS%prism-border);\n}\n\n.ctl-row[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--%NS%prism-primary) 3%, transparent);\n}\n\n.ctl-label[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.ctl-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--%NS%prism-text);\n}\n\n.ctl-type[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: 10.5px;\n color: var(--%NS%prism-text-ghost);\n}\n\n.ctl-type[_ngcontent-%COMP%] b[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--%NS%prism-primary);\n}\n\n.ctl-input[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n align-items: center;\n min-width: 0;\n}\n\n.ctl-not-editable[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: 11.5px;\n font-style: italic;\n color: var(--%NS%prism-text-ghost);\n}\n\n.ctl-empty[_ngcontent-%COMP%] {\n padding: 16px 20px;\n margin: 0;\n font-size: 13px;\n color: var(--%NS%prism-text-ghost);\n}"] });
185
+ } }, dependencies: [NgComponentOutlet,
186
+ BooleanControlComponent,
187
+ StringControlComponent,
188
+ NumberControlComponent,
189
+ UnionControlComponent,
190
+ JsonControlComponent,
191
+ PrismPanelToolbarComponent,
192
+ PrismButtonComponent], styles: ["\n\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.ctl-panel[_ngcontent-%COMP%] {\n height: 100%;\n container-type: inline-size;\n overflow-y: auto;\n}\n\n.ctl-rows[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n column-gap: 28px;\n padding: 4px 18px 16px;\n}\n\n@container (min-width: 1100px) {\n .ctl-rows[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n}\n\n\n\n\n\n.ctl-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: minmax(140px, 200px) minmax(0, 1fr);\n gap: 12px;\n align-items: start;\n min-height: 45px;\n padding: 6px 0;\n border-bottom: 1px solid var(--%NS%prism-border);\n}\n\n.ctl-label[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 2px 8px;\n align-content: center;\n align-items: baseline;\n min-width: 0;\n min-height: 32px;\n}\n\n.ctl-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--%NS%prism-text);\n}\n\n.ctl-type[_ngcontent-%COMP%] {\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: var(--%NS%font-mono);\n font-size: 11px;\n color: var(--%NS%prism-text-muted);\n white-space: nowrap;\n}\n\n.ctl-input[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n align-items: center;\n min-width: 0;\n min-height: 32px;\n}\n\n.ctl-not-editable[_ngcontent-%COMP%] {\n font-family: var(--%NS%font-mono);\n font-size: 11.5px;\n color: var(--%NS%prism-text-muted);\n}\n\n.ctl-empty[_ngcontent-%COMP%] {\n padding: 16px 18px;\n margin: 0;\n font-size: 13px;\n color: var(--%NS%prism-text-muted);\n}"] });
184
193
  }
185
194
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismControlsPanelComponent, [{
186
195
  type: Component,
187
- args: [{ selector: 'prism-controls-panel', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgComponentOutlet, BooleanControlComponent, StringControlComponent, NumberControlComponent, UnionControlComponent, JsonControlComponent], template: "@if (navigationService.activeComponent(); as comp) {\n <div class=\"ctl-panel\">\n @if (rendererService.dirtyInputCount(); as dirtyCount) {\n <div class=\"ctl-toolbar\">\n <span class=\"ctl-dirty-info\">\n <span\n class=\"ctl-dirty-dot\"\n aria-hidden=\"true\"></span>\n {{ dirtyCount }} {{ dirtyCount === 1 ? 'input' : 'inputs' }} modified\n </span>\n <button\n type=\"button\"\n class=\"ctl-reset-btn\"\n (click)=\"rendererService.resetInputsToVariantDefaults()\"\n title=\"Reset all inputs to variant defaults\">\n <span aria-hidden=\"true\">&#x21BB;</span> Reset\n </button>\n </div>\n }\n @for (input of comp.meta.inputs; track input.name) {\n <div class=\"ctl-row\">\n @if (getCustomControl(input); as customCtrl) {\n <ng-container\n [ngComponentOutlet]=\"customCtrl.component\"\n [ngComponentOutletInputs]=\"{\n inputMeta: input,\n rendererService: rendererService\n }\" />\n } @else {\n <div class=\"ctl-label\">\n <span class=\"ctl-name\">{{ input.name }}</span>\n <span class=\"ctl-type\"\n ><b>{{ input.rawType ?? input.type }}</b></span\n >\n </div>\n <div class=\"ctl-input\">\n @if (isNonEditable(input)) {\n <span\n class=\"ctl-not-editable\"\n title=\"This input type can't be edited from the controls panel\"\n >Not editable</span\n >\n } @else {\n @switch (input.type) {\n @case ('boolean') {\n <prism-boolean-control\n [value]=\"asBoolean(rendererService.inputValues()[input.name])\"\n (valueChange)=\"rendererService.updateInput(input.name, $event)\" />\n }\n @case ('number') {\n <prism-number-control\n [value]=\"asNumber(rendererService.inputValues()[input.name])\"\n (valueChange)=\"rendererService.updateInput(input.name, $event)\" />\n }\n @case ('union') {\n <prism-union-control\n [value]=\"asString(rendererService.inputValues()[input.name])\"\n [options]=\"input.values ?? []\"\n (valueChange)=\"rendererService.updateInput(input.name, $event)\" />\n }\n @case ('string') {\n <prism-string-control\n [value]=\"asString(rendererService.inputValues()[input.name])\"\n (valueChange)=\"rendererService.updateInput(input.name, $event)\" />\n }\n @default {\n <prism-json-control\n [value]=\"rendererService.inputValues()[input.name]\"\n (valueChange)=\"rendererService.updateInput(input.name, $event)\" />\n }\n }\n }\n </div>\n }\n </div>\n }\n @if (comp.meta.inputs.length === 0) {\n <p class=\"ctl-empty\">No inputs available</p>\n }\n </div>\n}\n", styles: [".ctl-panel {\n height: 100%;\n overflow-y: auto;\n}\n\n.ctl-toolbar {\n position: sticky;\n top: 0;\n z-index: 2;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 20px;\n background: var(--prism-bg-elevated);\n border-bottom: 1px solid var(--prism-border);\n}\n\n.ctl-dirty-info {\n display: inline-flex;\n gap: 6px;\n align-items: center;\n font-family: var(--font-mono);\n font-size: 11.5px;\n color: var(--prism-text-muted);\n}\n\n.ctl-dirty-dot {\n width: 6px;\n height: 6px;\n background: var(--prism-primary);\n border-radius: 50%;\n box-shadow: 0 0 6px color-mix(in srgb, var(--prism-primary) 60%, transparent);\n}\n\n.ctl-reset-btn {\n display: inline-flex;\n gap: 5px;\n align-items: center;\n height: 24px;\n padding: 0 10px;\n font-family: var(--font-sans);\n font-size: 11.5px;\n font-weight: 500;\n color: var(--prism-text-muted);\n cursor: pointer;\n background: transparent;\n border: 1px solid var(--prism-border);\n border-radius: 5px;\n transition:\n color var(--dur-fast),\n background var(--dur-fast),\n border-color var(--dur-fast);\n}\n\n.ctl-reset-btn:hover {\n color: var(--prism-text);\n background: color-mix(in srgb, var(--prism-primary) 8%, transparent);\n border-color: color-mix(in srgb, var(--prism-primary) 40%, var(--prism-border));\n}\n\n.ctl-reset-btn:focus-visible {\n outline: 2px solid var(--prism-primary);\n outline-offset: 1px;\n}\n\n.ctl-row {\n display: grid;\n grid-template-columns: 180px 1fr;\n gap: 12px;\n align-items: center;\n min-height: 40px;\n padding: 8px 20px;\n border-bottom: 1px solid var(--prism-border);\n}\n\n.ctl-row:hover {\n background: color-mix(in srgb, var(--prism-primary) 3%, transparent);\n}\n\n.ctl-label {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.ctl-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--prism-text);\n}\n\n.ctl-type {\n font-family: var(--font-mono);\n font-size: 10.5px;\n color: var(--prism-text-ghost);\n}\n\n.ctl-type b {\n font-weight: 500;\n color: var(--prism-primary);\n}\n\n.ctl-input {\n display: flex;\n gap: 6px;\n align-items: center;\n min-width: 0;\n}\n\n.ctl-not-editable {\n font-family: var(--font-mono);\n font-size: 11.5px;\n font-style: italic;\n color: var(--prism-text-ghost);\n}\n\n.ctl-empty {\n padding: 16px 20px;\n margin: 0;\n font-size: 13px;\n color: var(--prism-text-ghost);\n}\n"] }]
196
+ args: [{ selector: 'prism-controls-panel', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
197
+ NgComponentOutlet,
198
+ BooleanControlComponent,
199
+ StringControlComponent,
200
+ NumberControlComponent,
201
+ UnionControlComponent,
202
+ JsonControlComponent,
203
+ PrismPanelToolbarComponent,
204
+ PrismButtonComponent
205
+ ], template: "@if (navigationService.activeComponent(); as comp) {\n <div class=\"ctl-panel\">\n @if (rendererService.dirtyInputCount(); as dirtyCount) {\n <prism-panel-toolbar>\n <button\n toolbarEnd\n prismButton\n variant=\"secondary\"\n (click)=\"rendererService.resetInputsToVariantDefaults()\"\n [title]=\"'Reset ' + dirtyCount + ' modified ' + (dirtyCount === 1 ? 'input' : 'inputs') + ' to the variant defaults'\">\n Reset\n </button>\n </prism-panel-toolbar>\n }\n <div class=\"ctl-rows\">\n @for (input of comp.meta.inputs; track input.name) {\n <div class=\"ctl-row\">\n @if (getCustomControl(input); as customCtrl) {\n <ng-container\n [ngComponentOutlet]=\"customCtrl.component\"\n [ngComponentOutletInputs]=\"{\n inputMeta: input,\n rendererService: rendererService\n }\" />\n } @else {\n <div class=\"ctl-label\">\n <span class=\"ctl-name\">{{ input.name }}</span>\n <span class=\"ctl-type\">{{ input.rawType ?? input.type }}</span>\n </div>\n <div class=\"ctl-input\">\n @if (notEditableReason(input, comp); as reason) {\n <span\n class=\"ctl-not-editable\"\n [title]=\"reason\"\n >Not editable</span\n >\n } @else {\n @switch (input.type) {\n @case ('boolean') {\n <prism-boolean-control\n [value]=\"asBoolean(rendererService.inputValues()[input.name])\"\n (valueChange)=\"rendererService.updateInput(input.name, $event)\" />\n }\n @case ('number') {\n <prism-number-control\n [value]=\"asNumber(rendererService.inputValues()[input.name])\"\n (valueChange)=\"rendererService.updateInput(input.name, $event)\" />\n }\n @case ('union') {\n <prism-union-control\n [value]=\"asString(rendererService.inputValues()[input.name])\"\n [options]=\"input.values ?? []\"\n (valueChange)=\"rendererService.updateInput(input.name, $event)\" />\n }\n @case ('string') {\n <prism-string-control\n [value]=\"asString(rendererService.inputValues()[input.name])\"\n (valueChange)=\"rendererService.updateInput(input.name, $event)\" />\n }\n @default {\n <prism-json-control\n [value]=\"rendererService.inputValues()[input.name]\"\n (valueChange)=\"rendererService.updateInput(input.name, $event)\" />\n }\n }\n }\n </div>\n }\n </div>\n }\n </div>\n @if (comp.meta.inputs.length === 0) {\n <p class=\"ctl-empty\">No inputs available</p>\n }\n </div>\n}\n", styles: ["/* No toolbar of its own: the panel toolbar appears only while inputs differ\n from the variant, and then carries just the reset. The rows follow the panel\n height and go two-up once the panel is wide enough. */\n:host {\n display: block;\n height: 100%;\n}\n\n.ctl-panel {\n height: 100%;\n container-type: inline-size;\n overflow-y: auto;\n}\n\n.ctl-rows {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n column-gap: 28px;\n padding: 4px 18px 16px;\n}\n\n@container (min-width: 1100px) {\n .ctl-rows {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n}\n\n/* Top-aligned: a tall control such as the JSON editor grows downward, while\n its label and the row beside it in the two-up grid stay at the top. Label\n and input cells are at least one text control high, which keeps\n single-line rows centred. */\n.ctl-row {\n display: grid;\n grid-template-columns: minmax(140px, 200px) minmax(0, 1fr);\n gap: 12px;\n align-items: start;\n min-height: 45px;\n padding: 6px 0;\n border-bottom: 1px solid var(--prism-border);\n}\n\n.ctl-label {\n display: flex;\n flex-wrap: wrap;\n gap: 2px 8px;\n align-content: center;\n align-items: baseline;\n min-width: 0;\n min-height: 32px;\n}\n\n.ctl-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--prism-text);\n}\n\n.ctl-type {\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: var(--font-mono);\n font-size: 11px;\n color: var(--prism-text-muted);\n white-space: nowrap;\n}\n\n.ctl-input {\n display: flex;\n gap: 6px;\n align-items: center;\n min-width: 0;\n min-height: 32px;\n}\n\n.ctl-not-editable {\n font-family: var(--font-mono);\n font-size: 11.5px;\n color: var(--prism-text-muted);\n}\n\n.ctl-empty {\n padding: 16px 18px;\n margin: 0;\n font-size: 13px;\n color: var(--prism-text-muted);\n}\n"] }]
188
206
  }], null, { activeComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeComponent", required: false }] }] }); })();
189
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismControlsPanelComponent, { className: "PrismControlsPanelComponent", filePath: "app/panels/controls/prism-controls-panel.component.ts", lineNumber: 22 }); })();
207
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismControlsPanelComponent, { className: "PrismControlsPanelComponent", filePath: "app/panels/controls/prism-controls-panel.component.ts", lineNumber: 33 }); })();
@@ -1,9 +1,11 @@
1
1
  import type { RuntimeComponent } from '../../../plugin/plugin.types.js';
2
2
  import { PrismEventLogService } from '../../services/prism-event-log.service.js';
3
+ import { isEmptyPayload } from './prism-json-node.utils.js';
3
4
  import * as i0 from "@angular/core";
4
5
  export declare class PrismEventsPanelComponent {
5
6
  protected readonly eventLogService: PrismEventLogService;
6
7
  readonly activeComponent: import("@angular/core").InputSignal<RuntimeComponent | null>;
8
+ protected readonly isEmptyPayload: typeof isEmptyPayload;
7
9
  protected formatTime(ts: number): string;
8
10
  protected padIdx(n: number): string;
9
11
  static ɵfac: i0.ɵɵFactoryDeclaration<PrismEventsPanelComponent, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"prism-events-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/events/prism-events-panel.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;;AAGjF,qBAQa,yBAAyB;IAClC,SAAS,CAAC,QAAQ,CAAC,eAAe,uBAAgC;IAElE,QAAQ,CAAC,eAAe,+DAAwC;IAEhE,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IASxC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;yCAd1B,yBAAyB;2CAAzB,yBAAyB;CAiBrC"}
1
+ {"version":3,"file":"prism-events-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/events/prism-events-panel.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;;AAE5D,qBAQa,yBAAyB;IAClC,SAAS,CAAC,QAAQ,CAAC,eAAe,uBAAgC;IAElE,QAAQ,CAAC,eAAe,+DAAwC;IAEhE,SAAS,CAAC,QAAQ,CAAC,cAAc,wBAAkB;IAEnD,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IASxC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;yCAhB1B,yBAAyB;2CAAzB,yBAAyB;CAmBrC"}
@@ -1,8 +1,20 @@
1
1
  import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';
2
2
  import { PrismEventLogService } from '../../services/prism-event-log.service.js';
3
3
  import { PrismJsonNodeComponent } from './prism-json-node.component.js';
4
+ import { isEmptyPayload } from './prism-json-node.utils.js';
4
5
  import * as i0 from "@angular/core";
5
6
  const _forTrack0 = ($index, $item) => $item.id;
7
+ function PrismEventsPanelComponent_For_3_Conditional_8_Template(rf, ctx) { if (rf & 1) {
8
+ i0.ɵɵelementStart(0, "span", 8);
9
+ i0.ɵɵtext(1, "\u2014");
10
+ i0.ɵɵelementEnd();
11
+ } }
12
+ function PrismEventsPanelComponent_For_3_Conditional_9_Template(rf, ctx) { if (rf & 1) {
13
+ i0.ɵɵelement(0, "prism-json-node", 9);
14
+ } if (rf & 2) {
15
+ const entry_r1 = i0.ɵɵnextContext().$implicit;
16
+ i0.ɵɵproperty("value", entry_r1.value);
17
+ } }
6
18
  function PrismEventsPanelComponent_For_3_Template(rf, ctx) { if (rf & 1) {
7
19
  i0.ɵɵelementStart(0, "div", 2)(1, "span", 4);
8
20
  i0.ɵɵtext(2);
@@ -14,7 +26,7 @@ function PrismEventsPanelComponent_For_3_Template(rf, ctx) { if (rf & 1) {
14
26
  i0.ɵɵtext(6);
15
27
  i0.ɵɵelementEnd();
16
28
  i0.ɵɵelementStart(7, "span", 7);
17
- i0.ɵɵelement(8, "prism-json-node", 8);
29
+ i0.ɵɵconditionalCreate(8, PrismEventsPanelComponent_For_3_Conditional_8_Template, 2, 0, "span", 8)(9, PrismEventsPanelComponent_For_3_Conditional_9_Template, 1, 1, "prism-json-node", 9);
18
30
  i0.ɵɵelementEnd()();
19
31
  } if (rf & 2) {
20
32
  const entry_r1 = ctx.$implicit;
@@ -27,7 +39,7 @@ function PrismEventsPanelComponent_For_3_Template(rf, ctx) { if (rf & 1) {
27
39
  i0.ɵɵadvance(2);
28
40
  i0.ɵɵtextInterpolate(entry_r1.name);
29
41
  i0.ɵɵadvance(2);
30
- i0.ɵɵproperty("value", entry_r1.value);
42
+ i0.ɵɵconditional(ctx_r2.isEmptyPayload(entry_r1.value) ? 8 : 9);
31
43
  } }
32
44
  function PrismEventsPanelComponent_ForEmpty_4_Template(rf, ctx) { if (rf & 1) {
33
45
  i0.ɵɵelementStart(0, "p", 3);
@@ -38,6 +50,7 @@ export class PrismEventsPanelComponent {
38
50
  eventLogService = inject(PrismEventLogService);
39
51
  activeComponent = input(null, /* @ts-ignore */
40
52
  ...(ngDevMode ? [{ debugName: "activeComponent" }] : /* istanbul ignore next */ []));
53
+ isEmptyPayload = isEmptyPayload;
41
54
  formatTime(ts) {
42
55
  const d = new Date(ts);
43
56
  return d.toLocaleTimeString('en-US', {
@@ -49,17 +62,17 @@ export class PrismEventsPanelComponent {
49
62
  return String(n).padStart(3, '0');
50
63
  }
51
64
  static ɵfac = function PrismEventsPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PrismEventsPanelComponent)(); };
52
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismEventsPanelComponent, selectors: [["prism-events-panel"]], inputs: { activeComponent: [1, "activeComponent"] }, decls: 5, vars: 1, consts: [[1, "ev-panel"], [1, "ev-body"], [1, "ev"], [1, "ev-empty"], [1, "ev-time"], [1, "ev-idx"], [1, "ev-name"], [1, "ev-args"], [3, "value"]], template: function PrismEventsPanelComponent_Template(rf, ctx) { if (rf & 1) {
65
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismEventsPanelComponent, selectors: [["prism-events-panel"]], inputs: { activeComponent: [1, "activeComponent"] }, decls: 5, vars: 1, consts: [[1, "ev-panel"], [1, "ev-body"], [1, "ev"], [1, "ev-empty"], [1, "ev-time"], [1, "ev-idx"], [1, "ev-name"], [1, "ev-args"], ["title", "Emitted without a value", 1, "ev-none"], [3, "value"]], template: function PrismEventsPanelComponent_Template(rf, ctx) { if (rf & 1) {
53
66
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
54
- i0.ɵɵrepeaterCreate(2, PrismEventsPanelComponent_For_3_Template, 9, 4, "div", 2, _forTrack0, false, PrismEventsPanelComponent_ForEmpty_4_Template, 2, 0, "p", 3);
67
+ i0.ɵɵrepeaterCreate(2, PrismEventsPanelComponent_For_3_Template, 10, 4, "div", 2, _forTrack0, false, PrismEventsPanelComponent_ForEmpty_4_Template, 2, 0, "p", 3);
55
68
  i0.ɵɵelementEnd()();
56
69
  } if (rf & 2) {
57
70
  i0.ɵɵadvance(2);
58
71
  i0.ɵɵrepeater(ctx.eventLogService.events());
59
- } }, dependencies: [PrismJsonNodeComponent], styles: [".ev-panel[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.ev-body[_ngcontent-%COMP%] {\n flex: 1;\n padding: 6px 0;\n overflow-y: auto;\n}\n\n.ev[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto auto 1fr auto;\n gap: 12px;\n align-items: center;\n min-height: 32px;\n padding: 6px 20px;\n font-family: var(--%NS%font-mono);\n font-size: 12px;\n border-bottom: 1px solid var(--%NS%prism-border);\n}\n\n.ev[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--%NS%prism-primary) 3%, transparent);\n}\n\n.ev-time[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--%NS%prism-text-ghost);\n}\n\n.ev-idx[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--%NS%prism-text-muted);\n}\n\n.ev-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--%NS%prism-primary);\n}\n\n.ev-args[_ngcontent-%COMP%] {\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--%NS%prism-text-2);\n white-space: nowrap;\n}\n\n.ev-empty[_ngcontent-%COMP%] {\n padding: 16px 20px;\n margin: 0;\n font-size: 13px;\n color: var(--%NS%prism-text-ghost);\n}"] });
72
+ } }, dependencies: [PrismJsonNodeComponent], styles: [".ev-panel[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.ev-body[_ngcontent-%COMP%] {\n flex: 1;\n padding: 6px 0;\n overflow-y: auto;\n}\n\n.ev[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto auto 1fr auto;\n gap: 12px;\n align-items: center;\n min-height: 32px;\n padding: 6px 18px;\n font-family: var(--%NS%font-mono);\n font-size: 12px;\n border-bottom: 1px solid var(--%NS%prism-border);\n}\n\n.ev[_ngcontent-%COMP%]:hover {\n background: var(--%NS%prism-input-bg);\n}\n\n.ev-none[_ngcontent-%COMP%] {\n color: var(--%NS%prism-text-muted);\n}\n\n.ev-time[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--%NS%prism-text-muted);\n}\n\n.ev-idx[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--%NS%prism-text-muted);\n}\n\n.ev-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--%NS%prism-primary);\n}\n\n.ev-args[_ngcontent-%COMP%] {\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--%NS%prism-text-2);\n white-space: nowrap;\n}\n\n.ev-empty[_ngcontent-%COMP%] {\n padding: 16px 20px;\n margin: 0;\n font-size: 13px;\n color: var(--%NS%prism-text-muted);\n}"] });
60
73
  }
61
74
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismEventsPanelComponent, [{
62
75
  type: Component,
63
- args: [{ selector: 'prism-events-panel', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismJsonNodeComponent], template: "<div class=\"ev-panel\">\n <div class=\"ev-body\">\n @for (entry of eventLogService.events(); track entry.id; let i = $index) {\n <div class=\"ev\">\n <span class=\"ev-time\">{{ formatTime(entry.timestamp) }}</span>\n <span class=\"ev-idx\">#{{ padIdx(eventLogService.events().length - i) }}</span>\n <span class=\"ev-name\">{{ entry.name }}</span>\n <span class=\"ev-args\"><prism-json-node [value]=\"entry.value\" /></span>\n </div>\n } @empty {\n <p class=\"ev-empty\">No events recorded</p>\n }\n </div>\n</div>\n", styles: [".ev-panel {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.ev-body {\n flex: 1;\n padding: 6px 0;\n overflow-y: auto;\n}\n\n.ev {\n display: grid;\n grid-template-columns: auto auto 1fr auto;\n gap: 12px;\n align-items: center;\n min-height: 32px;\n padding: 6px 20px;\n font-family: var(--font-mono);\n font-size: 12px;\n border-bottom: 1px solid var(--prism-border);\n}\n\n.ev:hover {\n background: color-mix(in srgb, var(--prism-primary) 3%, transparent);\n}\n\n.ev-time {\n font-size: 11px;\n color: var(--prism-text-ghost);\n}\n\n.ev-idx {\n font-size: 11px;\n color: var(--prism-text-muted);\n}\n\n.ev-name {\n font-weight: 500;\n color: var(--prism-primary);\n}\n\n.ev-args {\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--prism-text-2);\n white-space: nowrap;\n}\n\n.ev-empty {\n padding: 16px 20px;\n margin: 0;\n font-size: 13px;\n color: var(--prism-text-ghost);\n}\n"] }]
76
+ args: [{ selector: 'prism-events-panel', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PrismJsonNodeComponent], template: "<div class=\"ev-panel\">\n <div class=\"ev-body\">\n @for (entry of eventLogService.events(); track entry.id; let i = $index) {\n <div class=\"ev\">\n <span class=\"ev-time\">{{ formatTime(entry.timestamp) }}</span>\n <span class=\"ev-idx\">#{{ padIdx(eventLogService.events().length - i) }}</span>\n <span class=\"ev-name\">{{ entry.name }}</span>\n <span class=\"ev-args\">\n @if (isEmptyPayload(entry.value)) {\n <span\n class=\"ev-none\"\n title=\"Emitted without a value\"\n >\u2014</span\n >\n } @else {\n <prism-json-node [value]=\"entry.value\" />\n }\n </span>\n </div>\n } @empty {\n <p class=\"ev-empty\">No events recorded</p>\n }\n </div>\n</div>\n", styles: [".ev-panel {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.ev-body {\n flex: 1;\n padding: 6px 0;\n overflow-y: auto;\n}\n\n.ev {\n display: grid;\n grid-template-columns: auto auto 1fr auto;\n gap: 12px;\n align-items: center;\n min-height: 32px;\n padding: 6px 18px;\n font-family: var(--font-mono);\n font-size: 12px;\n border-bottom: 1px solid var(--prism-border);\n}\n\n.ev:hover {\n background: var(--prism-input-bg);\n}\n\n.ev-none {\n color: var(--prism-text-muted);\n}\n\n.ev-time {\n font-size: 11px;\n color: var(--prism-text-muted);\n}\n\n.ev-idx {\n font-size: 11px;\n color: var(--prism-text-muted);\n}\n\n.ev-name {\n font-weight: 500;\n color: var(--prism-primary);\n}\n\n.ev-args {\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--prism-text-2);\n white-space: nowrap;\n}\n\n.ev-empty {\n padding: 16px 20px;\n margin: 0;\n font-size: 13px;\n color: var(--prism-text-muted);\n}\n"] }]
64
77
  }], null, { activeComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeComponent", required: false }] }] }); })();
65
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismEventsPanelComponent, { className: "PrismEventsPanelComponent", filePath: "app/panels/events/prism-events-panel.component.ts", lineNumber: 14 }); })();
78
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismEventsPanelComponent, { className: "PrismEventsPanelComponent", filePath: "app/panels/events/prism-events-panel.component.ts", lineNumber: 15 }); })();
@@ -1,2 +1,8 @@
1
1
  export declare function summarizeValue(val: unknown, depth?: number, visited?: WeakSet<object>): string;
2
+ /**
3
+ * True for an output that was emitted without a value (`emit()` on a void
4
+ * output). The events log shows a muted dash for it instead of the word
5
+ * "undefined", which reads like a bug in the component.
6
+ */
7
+ export declare function isEmptyPayload(value: unknown): boolean;
2
8
  //# sourceMappingURL=prism-json-node.utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prism-json-node.utils.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/events/prism-json-node.utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,SAAI,EAAE,OAAO,kBAAwB,GAAG,MAAM,CAmC/F"}
1
+ {"version":3,"file":"prism-json-node.utils.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/events/prism-json-node.utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,SAAI,EAAE,OAAO,kBAAwB,GAAG,MAAM,CAmC/F;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEtD"}
@@ -38,3 +38,11 @@ export function summarizeValue(val, depth = 0, visited = new WeakSet()) {
38
38
  }
39
39
  return String(val);
40
40
  }
41
+ /**
42
+ * True for an output that was emitted without a value (`emit()` on a void
43
+ * output). The events log shows a muted dash for it instead of the word
44
+ * "undefined", which reads like a bug in the component.
45
+ */
46
+ export function isEmptyPayload(value) {
47
+ return value === undefined;
48
+ }
@@ -0,0 +1,11 @@
1
+ import type { PanelDefinition, RuntimeComponent } from '../../../plugin/plugin.types.js';
2
+ /**
3
+ * The addon panels a component page shows: those that apply to components and,
4
+ * when a component is active, pass their `isVisible`.
5
+ *
6
+ * Addon panels only ever appear below the canvas of a component, so a panel
7
+ * that applies to services and pipes only has no place here. Rendered anyway
8
+ * it would be handed `activeComponent`, an input it may not declare (NG0303).
9
+ */
10
+ export declare function addonPanelsFor(panels: readonly PanelDefinition[], component: RuntimeComponent | null): PanelDefinition[];
11
+ //# sourceMappingURL=addon-panels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addon-panels.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/panel-host/addon-panels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAGzF;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,EAAE,SAAS,EAAE,gBAAgB,GAAG,IAAI,GAAG,eAAe,EAAE,CAExH"}
@@ -0,0 +1,12 @@
1
+ import { panelTargets } from '../../view-tab-bar/panel-inputs.js';
2
+ /**
3
+ * The addon panels a component page shows: those that apply to components and,
4
+ * when a component is active, pass their `isVisible`.
5
+ *
6
+ * Addon panels only ever appear below the canvas of a component, so a panel
7
+ * that applies to services and pipes only has no place here. Rendered anyway
8
+ * it would be handed `activeComponent`, an input it may not declare (NG0303).
9
+ */
10
+ export function addonPanelsFor(panels, component) {
11
+ return panels.filter((p) => panelTargets(p).includes('component') && (!component || !p.isVisible || p.isVisible(component)));
12
+ }
@@ -1,4 +1,5 @@
1
1
  import type { PanelBadge, PanelDefinition, RuntimeComponent } from '../../../plugin/plugin.types.js';
2
+ import type { PrismTabBadge } from '../../shared/prism-tabs.component.js';
2
3
  import type { A11yScoreResult, A11yThresholds } from '../a11y/a11y.types.js';
3
4
  /**
4
5
  * The live figures the built-in tabs badge themselves with.
@@ -16,6 +17,7 @@ import type { A11yScoreResult, A11yThresholds } from '../a11y/a11y.types.js';
16
17
  */
17
18
  export interface PanelBadgeContext {
18
19
  inputCount: number;
20
+ eventCount: number;
19
21
  a11yResult: A11yScoreResult | null;
20
22
  a11yThresholds: A11yThresholds;
21
23
  }
@@ -32,4 +34,24 @@ export interface PanelBadgeContext {
32
34
  * "nothing worth reporting" rather than falling back to a zero.
33
35
  */
34
36
  export declare function resolvePanelBadge(panel: PanelDefinition, component: RuntimeComponent | null, context: PanelBadgeContext): PanelBadge | null;
37
+ /** The tab badge the tab bar renders. Same shape as {@link PrismTabBadge}. */
38
+ export type NormalizedPanelBadge = PrismTabBadge;
39
+ /**
40
+ * Reads a badge the way the tab bar renders it, including badges written
41
+ * before 22.7 that only set `variant`.
42
+ */
43
+ export declare function normalizePanelBadge(badge: PanelBadge | null): NormalizedPanelBadge | null;
44
+ /**
45
+ * What to tell the author of a panel whose badge still sets `variant`, or
46
+ * `null` when it does not. The panel host logs it once per panel; the badge
47
+ * keeps rendering through {@link normalizePanelBadge} until 23.0.0.
48
+ */
49
+ export declare function deprecatedBadgeVariantNotice(panelId: string, badge: PanelBadge | null): string | null;
50
+ /**
51
+ * The a11y tab's badge, also shown on the Violations sub-tab: a number of open
52
+ * findings, not the score. The score is graded in the gauge, the sidebar and
53
+ * the panel. The tone follows the most severe violation, the same split the
54
+ * build gate draws.
55
+ */
56
+ export declare function a11yViolationBadge(result: A11yScoreResult | null): PanelBadge | null;
35
57
  //# sourceMappingURL=panel-badge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"panel-badge.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/panel-host/panel-badge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAErG,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE7E;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,iBAAiB;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,cAAc,EAAE,cAAc,CAAC;CAClC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,GAAG,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,UAAU,GAAG,IAAI,CAwB3I"}
1
+ {"version":3,"file":"panel-badge.d.ts","sourceRoot":"","sources":["../../../../src/app/panels/panel-host/panel-badge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACrG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE7E;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,iBAAiB;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,cAAc,EAAE,cAAc,CAAC;CAClC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,GAAG,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,UAAU,GAAG,IAAI,CAoB3I;AAQD,8EAA8E;AAC9E,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,oBAAoB,GAAG,IAAI,CAazF;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAGrG;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,GAAG,UAAU,GAAG,IAAI,CAWpF"}