@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
@@ -0,0 +1,302 @@
1
+ import { CssSelector } from '@angular/compiler';
2
+ import { SUBJECT_MARKER_ATTR } from '../../../shared/composition.js';
3
+ import { VOID_ELEMENTS } from '../../../shared/void-elements.js';
4
+ import { matchHostString } from '../../manifest/host-parser.js';
5
+ import { describeShowcaseIssue, describeShowcaseOrigin } from '../showcase-diagnostics.js';
6
+ import { composeTemplate } from './compose-template.js';
7
+ import { resolveShowcaseImports } from './declarables.js';
8
+ import { matchDeclarables } from './match-declarables.js';
9
+ /** How a directive's text `content` goes into a template to render as written: no tag, no interpolation, no block. */
10
+ const TEXT_ENTITIES = { '&': '&amp;', '<': '&lt;', '{': '&#123;', '}': '&#125;', '@': '&#64;' };
11
+ /** The one variant the styleguide renders a showcase without variants as. */
12
+ const IMPLICIT_VARIANT = { name: 'Default' };
13
+ /**
14
+ * The context of one scan: the library's declarables, and the lookup of a showcase's `imports` with the scan's
15
+ * compiler options.
16
+ *
17
+ * `readDeclarables` runs once, for the first showcase that composes, so that a library without compositions pays
18
+ * nothing for them on any scan. Its declarables come without those whose selector Angular cannot parse, each named
19
+ * once in a notice, so that one of them cannot fail every composition. When it throws, that is one diagnostic, and no
20
+ * showcase of the scan has a composition.
21
+ */
22
+ export function createCompositionContext(readDeclarables, compilerOptions, reporters) {
23
+ let read;
24
+ return {
25
+ declarables: () => {
26
+ read ??= { declarables: indexDeclarables(readDeclarables, reporters) };
27
+ return read.declarables;
28
+ },
29
+ resolveImports: (imports, containingFile) => resolveShowcaseImports(imports, containingFile, compilerOptions)
30
+ };
31
+ }
32
+ function indexDeclarables(readDeclarables, { report, notify }) {
33
+ let declarables;
34
+ try {
35
+ declarables = readDeclarables();
36
+ }
37
+ catch (error) {
38
+ const reason = error instanceof Error ? error.message : String(error);
39
+ report(`ng-prism could not read the library's components, directives and pipes (${reason}), so no variant renders a template or a host template.`);
40
+ return undefined;
41
+ }
42
+ return declarables.filter((declarable) => {
43
+ const problem = selectorProblem(declarable);
44
+ if (problem) {
45
+ notify(`${declarable.name} from "${declarable.from}" has the selector "${declarable.selector}", which Angular cannot parse (${problem}); no composition imports it.`);
46
+ }
47
+ return !problem;
48
+ });
49
+ }
50
+ /**
51
+ * Read the compositions of a showcase. A variant is composed when it has a `template` or a host template, its own
52
+ * `host` or else the showcase's; a showcase without variants is one variant. A directive's `template` without a host
53
+ * template renders inside the element of its string or object host, if it has one. Each composed variant gets its
54
+ * template from {@link composeTemplate}, checked with Angular's parser against the library and the showcase's
55
+ * `imports`, and variants with the same template and the same unbound inputs share a case.
56
+ *
57
+ * Each problem is reported against the field it comes from, with the showcase's file, line and variant, and leaves
58
+ * that variant out: it renders as it would without `template` and `host`. Only what Angular may still accept is a
59
+ * notice: an import ng-prism cannot read, an element or a pipe nothing declares while there is one, a library class
60
+ * that matches only by standard attributes, and one that is not standalone, which only its NgModule can bring in. A
61
+ * subject that is not standalone has no composition at all.
62
+ *
63
+ * Mutates `config`: a composed variant loses the HTML `content` of a component inside a host template, and the
64
+ * inputs that the template sets on the subject, each with a diagnostic.
65
+ *
66
+ * `undefined` when no variant is composed. Also when `@angular/compiler` throws, which is one diagnostic for the
67
+ * showcase, so that the build goes on, and when the library's declarables could not be read.
68
+ */
69
+ export function readComposition(subject, context, reporters) {
70
+ const { className, config, configNode } = subject;
71
+ const sharedHost = isHostTemplate(config.host) ? config.host : undefined;
72
+ const elementHost = subject.isDirective && !sharedHost ? readElementHost(config.host) : undefined;
73
+ const declared = config.variants ?? [];
74
+ const variants = declared.length > 0 ? declared : [IMPLICIT_VARIANT];
75
+ // Without a template, a variant keeps rendering in a string or object host as it did before.
76
+ const hosts = variants.map((variant) => variant.host ?? sharedHost ?? (variant.template !== undefined ? elementHost : undefined));
77
+ const firstComposed = variants.findIndex((variant, index) => variant.template !== undefined || hosts[index] !== undefined);
78
+ if (firstComposed < 0)
79
+ return undefined;
80
+ const at = (path, text) => describeShowcaseIssue(className, configNode, path, text);
81
+ // Where a variant's composition is written: the variant, its template and the host template it renders in.
82
+ const pathsOf = (variant, index) => {
83
+ const path = declared.length > 0 ? ['variants', subject.sources?.variants?.[index] ?? index] : ['host'];
84
+ const hostPath = variant.host ? [...path, 'host'] : ['host'];
85
+ return { path, hostPath, templatePath: [...path, 'template'] };
86
+ };
87
+ if (!subject.standalone) {
88
+ const { hostPath, templatePath } = pathsOf(variants[firstComposed], firstComposed);
89
+ reporters.report(at(variants[firstComposed].template !== undefined ? templatePath : hostPath, `${className} is not standalone, which the wrapper that renders a composition needs; no variant of this showcase renders a template or a host template`));
90
+ return undefined;
91
+ }
92
+ const declarables = context.declarables();
93
+ if (!declarables)
94
+ return undefined;
95
+ // Messages and mutations wait for the end, so that a compiler failure leaves nothing behind but its own diagnostic.
96
+ const pending = [];
97
+ const report = (message) => pending.push(() => reporters.report(message));
98
+ const notify = (message) => pending.push(() => reporters.notify(message));
99
+ // Where the compiler is at, for the diagnostic when it throws.
100
+ let current = ['imports'];
101
+ try {
102
+ const hostImport = elementHost && 'import' in elementHost && hosts.includes(elementHost) ? elementHost.import : undefined;
103
+ const { resolved, unresolved } = readImports(subject, hostImport, declarables, context, (path, text) => notify(at(path, text)));
104
+ const inputNames = new Map(subject.inputs.map((input) => [input.alias ?? input.name, input.name]));
105
+ const cases = [];
106
+ const caseIndex = new Map();
107
+ const imports = new Map();
108
+ const skipped = new Set();
109
+ const notStandalone = new Set();
110
+ const variantCases = variants.map((variant, index) => {
111
+ const host = hosts[index];
112
+ if (variant.template === undefined && host === undefined)
113
+ return -1;
114
+ if (host && 'problem' in host) {
115
+ report(at(['host'], host.problem));
116
+ return -1;
117
+ }
118
+ const { path, hostPath, templatePath } = pathsOf(variant, index);
119
+ const { content, dropsContent } = subjectContent(variant, subject.isDirective);
120
+ current = variant.template !== undefined ? templatePath : hostPath;
121
+ const composed = composeTemplate({ selector: subject.selector, isDirective: subject.isDirective, inputNames, hostTemplate: host?.template, content });
122
+ if (!composed.ok) {
123
+ report(at(composed.at === 'host' ? hostPath : variant.template !== undefined ? templatePath : [...path, 'content'], composed.problem));
124
+ return -1;
125
+ }
126
+ const match = matchDeclarables(composed.nodes, declarables, resolved);
127
+ // Before the problems, which one of them may explain: the element it declares is unknown without its NgModule.
128
+ match.notStandalone.forEach((name) => notStandalone.add(name));
129
+ // A message names the field that writes what it is about: the template when it does, else the host template.
130
+ const fieldOf = (written) => variant.template !== undefined && (!host || written(variant.template)) ? templatePath : hostPath;
131
+ const undeclared = [
132
+ ...match.unknownElements.map((element) => ({ where: fieldOf((t) => writesElement(t, element)), text: `<${element}> matches no imported component` })),
133
+ ...match.unknownPipes.map((pipe) => ({ where: fieldOf((t) => writesPipe(t, pipe)), text: `pipe "${pipe}" matches no imported pipe` }))
134
+ ];
135
+ const problems = match.ambiguous.map(({ element, classes }) => at(fieldOf((t) => writesElement(t, element)), `<${element}> matches ${andList(classes)}, and Angular allows one component per element (NG0300)`));
136
+ // An import ng-prism cannot read may declare what nothing else does, so Angular decides.
137
+ if (unresolved.length > 0) {
138
+ for (const { where, text } of undeclared)
139
+ notify(at(where, `${text}; an import ng-prism cannot read may declare it, so Angular checks it`));
140
+ }
141
+ else {
142
+ problems.unshift(...undeclared.map(({ where, text }) => at(where, text)));
143
+ }
144
+ problems.forEach(report);
145
+ if (problems.length > 0)
146
+ return -1;
147
+ // The wrapper imports the subject anyway, by the path of its entry point.
148
+ for (const { name, from, selector } of match.imports) {
149
+ if (name !== className || selector !== subject.selector)
150
+ imports.set(`${from} ${name}`, { name, from });
151
+ }
152
+ for (const { element, className: skippedClass } of match.skipped) {
153
+ if (skippedClass !== className)
154
+ skipped.add(`${skippedClass} on <${element}>`);
155
+ }
156
+ if (dropsContent) {
157
+ report(at([...path, 'content'], 'HTML content cannot be projected into a host template; use template'));
158
+ pending.push(() => delete variant.content);
159
+ }
160
+ const owned = new Set(composed.ownedInputs);
161
+ const unbound = subject.inputs.flatMap(({ name, defaultUnreadable }) => {
162
+ if (owned.has(name))
163
+ return [{ name, reason: 'template' }];
164
+ return defaultUnreadable && variant.inputs?.[name] === undefined ? [{ name, reason: 'default' }] : [];
165
+ });
166
+ for (const name of composed.ownedInputs) {
167
+ if (!variant.inputs || !(name in variant.inputs))
168
+ continue;
169
+ report(at([...path, 'inputs', name], 'set by the template on the subject; the variant value was dropped'));
170
+ pending.push(() => delete variant.inputs?.[name]);
171
+ }
172
+ // Variants that set an input with an unreadable default and variants that leave it to the subject need a case each.
173
+ const key = JSON.stringify([composed.template, unbound]);
174
+ let caseAt = caseIndex.get(key);
175
+ if (caseAt === undefined) {
176
+ caseAt = cases.push({ template: composed.template, unbound, paths: [] }) - 1;
177
+ caseIndex.set(key, caseAt);
178
+ }
179
+ cases[caseAt].paths.push(path);
180
+ return caseAt;
181
+ });
182
+ if (notStandalone.size > 0) {
183
+ const [verb, pronoun, modules] = notStandalone.size === 1 ? ['is', 'it', 'the NgModule that declares'] : ['are', 'them', 'the NgModules that declare'];
184
+ notify(at(['imports'], `${andList([...notStandalone])} ${verb} not standalone, so a composition cannot import ${pronoun}; add ${modules} ${pronoun} here`));
185
+ }
186
+ if (skipped.size > 0) {
187
+ const [verb, pronoun] = skipped.size === 1 ? ['matches', 'it'] : ['match', 'them'];
188
+ notify(at(['imports'], `${[...skipped].join(', ')} ${verb} only by standard attributes and ${skipped.size === 1 ? 'is' : 'are'} not imported; add ${pronoun} here to apply ${pronoun}`));
189
+ }
190
+ pending.forEach((flush) => flush());
191
+ if (cases.length === 0)
192
+ return undefined;
193
+ for (const entry of unresolved)
194
+ imports.set(`${entry.from} ${entry.name}`, entry);
195
+ return {
196
+ variantCases,
197
+ cases: cases.map(({ template, unbound, paths }) => ({ template, unbound, origin: describeShowcaseOrigin(configNode, paths) })),
198
+ imports: [...imports.values()]
199
+ };
200
+ }
201
+ catch (error) {
202
+ const reason = error instanceof Error ? error.message : String(error);
203
+ reporters.report(at(current, `@angular/compiler failed on it (${reason}); no variant of this showcase renders a template or a host template`));
204
+ return undefined;
205
+ }
206
+ }
207
+ /**
208
+ * The showcase's `imports`, and the class of an object host a variant template renders in, looked up: a class of the
209
+ * library as it is indexed, anything else through {@link CompositionContext.resolveImports}. What ng-prism can read is
210
+ * matched like a library class, the rest is imported as written, with a notice. That includes an import whose
211
+ * selector Angular cannot parse.
212
+ */
213
+ function readImports({ config, filePath, sources }, hostImport, declarables, context, notice) {
214
+ const listed = (config.imports ?? []).map((entry, index) => ({
215
+ entry,
216
+ path: ['imports', sources?.imports?.[index] ?? index]
217
+ }));
218
+ if (hostImport)
219
+ listed.push({ entry: hostImport, path: ['host', 'import'] });
220
+ const isEntry = (entry) => (declarable) => declarable.name === entry.name && declarable.from === entry.from;
221
+ const fromLibrary = listed.flatMap(({ entry }) => declarables.filter(isEntry(entry)));
222
+ const elsewhere = listed.filter(({ entry }) => !fromLibrary.some(isEntry(entry))).map(({ entry }) => entry);
223
+ const looked = elsewhere.length > 0 ? context.resolveImports(elsewhere, filePath).resolved : [];
224
+ const resolved = [...fromLibrary, ...looked.filter((declarable) => !selectorProblem(declarable))];
225
+ const unresolved = listed.filter(({ entry }) => !resolved.some(isEntry(entry)));
226
+ for (const { entry, path } of unresolved) {
227
+ notice(path, `"${entry.name}" from "${entry.from}" is not a component, directive or pipe ng-prism can read; it is imported as written and Angular checks the template`);
228
+ }
229
+ return { resolved, unresolved: unresolved.map(({ entry }) => entry) };
230
+ }
231
+ /**
232
+ * A directive's string or object host as the host template of a variant template: the one element the host names,
233
+ * marked as the subject, with the static inputs of an object host as attributes and its class to import. The text a
234
+ * string host holds is left out, as the template replaces it. `undefined` for no host or an empty string.
235
+ */
236
+ function readElementHost(host) {
237
+ const consequence = 'so the variants render without their template';
238
+ if (typeof host === 'string') {
239
+ if (host.trim() === '')
240
+ return undefined;
241
+ const parsed = matchHostString(host);
242
+ return parsed
243
+ ? { template: markedElement(parsed.tag, parsed.attrs) }
244
+ : { problem: `${JSON.stringify(host)} is not one element ("<tag attrs>" or "<tag>text</tag>") for a variant template to render in, ${consequence}` };
245
+ }
246
+ if (typeof host !== 'object' || host === null)
247
+ return undefined;
248
+ const { selector, import: hostImport, inputs } = host;
249
+ if (typeof selector !== 'string' || selector === '' || !hostImport?.name || !hostImport.from) {
250
+ return { problem: `an object host needs a selector and an import { name, from } for a variant template to render in, ${consequence}` };
251
+ }
252
+ const attributes = Object.entries(inputs ?? {}).map(([name, value]) => `${name}="${String(value).replace(/&/g, '&amp;').replace(/"/g, '&quot;')}"`);
253
+ return { template: markedElement(selector, attributes.join(' ')), import: { name: hostImport.name, from: hostImport.from } };
254
+ }
255
+ function markedElement(tag, attributes) {
256
+ const opening = `<${tag}${attributes ? ` ${attributes}` : ''} ${SUBJECT_MARKER_ATTR}`;
257
+ return VOID_ELEMENTS.has(tag.toLowerCase()) ? `${opening} />` : `${opening}></${tag}>`;
258
+ }
259
+ /**
260
+ * What a composed variant puts into its subject: its template, or the text `content` of a directive, escaped. A
261
+ * component's `content` is HTML, which cannot go into a host template, the only way such a variant is composed.
262
+ */
263
+ function subjectContent(variant, isDirective) {
264
+ if (variant.template !== undefined)
265
+ return { content: variant.template, dropsContent: false };
266
+ if (variant.content === undefined)
267
+ return { dropsContent: false };
268
+ if (!isDirective)
269
+ return { dropsContent: true };
270
+ return { content: typeof variant.content === 'string' && variant.content !== '' ? escapeText(variant.content) : undefined, dropsContent: false };
271
+ }
272
+ function escapeText(text) {
273
+ return text.replace(/[&<{}@]/g, (char) => TEXT_ENTITIES[char]);
274
+ }
275
+ /** Why Angular cannot parse the selector of a declarable, `undefined` when it can or there is none. */
276
+ function selectorProblem({ selector }) {
277
+ if (selector === undefined)
278
+ return undefined;
279
+ try {
280
+ CssSelector.parse(selector);
281
+ return undefined;
282
+ }
283
+ catch (error) {
284
+ return error instanceof Error ? error.message : String(error);
285
+ }
286
+ }
287
+ function isHostTemplate(host) {
288
+ return typeof host === 'object' && host !== null && typeof host.template === 'string';
289
+ }
290
+ function writesElement(template, element) {
291
+ return new RegExp(`<${escapeRegExp(element)}[\\s/>]`, 'i').test(template);
292
+ }
293
+ function writesPipe(template, pipe) {
294
+ return new RegExp(`\\|\\s*${escapeRegExp(pipe)}(?![\\w$])`).test(template);
295
+ }
296
+ function escapeRegExp(text) {
297
+ return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
298
+ }
299
+ /** `A and B`, `A, B and C`. */
300
+ function andList(items) {
301
+ return items.length < 2 ? items.join('') : `${items.slice(0, -1).join(', ')} and ${items.at(-1)}`;
302
+ }
@@ -0,0 +1,12 @@
1
+ import { BindingType, CssSelector, TmplAstElement, type TmplAstTemplate } from '@angular/compiler';
2
+ /**
3
+ * What a directive matcher sees of an element or an `<ng-template>`, built the way Angular builds it: tag, static
4
+ * attributes and classes, bound inputs and outputs. A template that a structural directive creates (`*libIf`) is an
5
+ * `ng-template` with the attributes of its microsyntax.
6
+ */
7
+ export declare function elementSelector(node: TmplAstElement | TmplAstTemplate): CssSelector;
8
+ /** `[name]` and `[(name)]`; attribute, class, style and animation bindings set no input. */
9
+ export declare function isInputBinding(type: BindingType): boolean;
10
+ /** The parser names an element in a namespace `:svg:rect`; selectors match the local name. */
11
+ export declare function localName(name: string): string;
12
+ //# sourceMappingURL=template-elements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-elements.d.ts","sourceRoot":"","sources":["../../../../src/builder/scanner/composition/template-elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEnG;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,GAAG,WAAW,CAyBnF;AAED,4FAA4F;AAC5F,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEzD;AAED,8FAA8F;AAC9F,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C"}
@@ -0,0 +1,41 @@
1
+ import { BindingType, CssSelector, TmplAstElement } from '@angular/compiler';
2
+ /**
3
+ * What a directive matcher sees of an element or an `<ng-template>`, built the way Angular builds it: tag, static
4
+ * attributes and classes, bound inputs and outputs. A template that a structural directive creates (`*libIf`) is an
5
+ * `ng-template` with the attributes of its microsyntax.
6
+ */
7
+ export function elementSelector(node) {
8
+ const selector = new CssSelector();
9
+ const isElement = node instanceof TmplAstElement;
10
+ selector.setElement(isElement ? localName(node.name) : 'ng-template');
11
+ if (!isElement && node.tagName !== 'ng-template') {
12
+ for (const attribute of node.templateAttrs)
13
+ selector.addAttribute(attribute.name, '');
14
+ return selector;
15
+ }
16
+ for (const attribute of node.attributes) {
17
+ selector.addAttribute(attribute.name, attribute.value);
18
+ if (attribute.name.toLowerCase() === 'class') {
19
+ for (const className of attribute.value.trim().split(/\s+/)) {
20
+ if (className)
21
+ selector.addClassName(className);
22
+ }
23
+ }
24
+ }
25
+ for (const bound of node.inputs) {
26
+ if (isInputBinding(bound.type))
27
+ selector.addAttribute(bound.name, '');
28
+ }
29
+ for (const output of node.outputs) {
30
+ selector.addAttribute(output.name, '');
31
+ }
32
+ return selector;
33
+ }
34
+ /** `[name]` and `[(name)]`; attribute, class, style and animation bindings set no input. */
35
+ export function isInputBinding(type) {
36
+ return type === BindingType.Property || type === BindingType.TwoWay;
37
+ }
38
+ /** The parser names an element in a namespace `:svg:rect`; selectors match the local name. */
39
+ export function localName(name) {
40
+ return name.replace(/^:[^:]+:/, '');
41
+ }
@@ -3,4 +3,9 @@ export interface DiscoveredEntryPoint {
3
3
  importPath: string;
4
4
  }
5
5
  export declare function discoverSecondaryEntryPoints(libraryRoot: string, baseImportPath: string): DiscoveredEntryPoint[];
6
+ /**
7
+ * The primary entry file of the library at `libraryRoot`: `lib.entryFile` of its
8
+ * own `ng-package.json`, or `undefined` when there is no such file.
9
+ */
10
+ export declare function findPrimaryEntryFile(libraryRoot: string): string | undefined;
6
11
  //# sourceMappingURL=entry-point-discovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entry-point-discovery.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/entry-point-discovery.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAKhH"}
1
+ {"version":3,"file":"entry-point-discovery.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/entry-point-discovery.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAKhH;AAKD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAS5E"}
@@ -5,6 +5,20 @@ export function discoverSecondaryEntryPoints(libraryRoot, baseImportPath) {
5
5
  findNgPackageJsons(libraryRoot, libraryRoot, baseImportPath, entryPoints);
6
6
  return entryPoints;
7
7
  }
8
+ /** ng-packagr's default for `lib.entryFile`. */
9
+ const NG_PACKAGR_DEFAULT_ENTRY_FILE = 'src/public_api.ts';
10
+ /**
11
+ * The primary entry file of the library at `libraryRoot`: `lib.entryFile` of its
12
+ * own `ng-package.json`, or `undefined` when there is no such file.
13
+ */
14
+ export function findPrimaryEntryFile(libraryRoot) {
15
+ const ngPackagePath = join(libraryRoot, 'ng-package.json');
16
+ if (!existsSync(ngPackagePath))
17
+ return undefined;
18
+ const ngPackage = JSON.parse(readFileSync(ngPackagePath, 'utf-8'));
19
+ const entryFilePath = join(libraryRoot, ngPackage.lib?.entryFile ?? NG_PACKAGR_DEFAULT_ENTRY_FILE);
20
+ return existsSync(entryFilePath) ? entryFilePath : undefined;
21
+ }
8
22
  function findNgPackageJsons(dir, libraryRoot, baseImportPath, result) {
9
23
  const isLibraryRoot = dir === libraryRoot;
10
24
  const ngPackagePath = join(dir, 'ng-package.json');
@@ -2,6 +2,8 @@ import ts from 'typescript';
2
2
  export interface EntryPointInput {
3
3
  entryFile: string;
4
4
  importPath: string;
5
+ /** The library's primary entry point. A component it re-exports from a secondary one keeps that one, silently. */
6
+ primary?: boolean;
5
7
  }
6
8
  export interface ResolvedEntryPoint extends EntryPointInput {
7
9
  exports: ts.Symbol[];
@@ -18,5 +20,5 @@ export interface MultiEntryResult {
18
20
  *
19
21
  * Re-exports (`export * from '...'`) are resolved automatically by TypeScript.
20
22
  */
21
- export declare function resolveEntryPointExports(entryPoints: ReadonlyArray<EntryPointInput>, compilerOptions: ts.CompilerOptions, previousProgram?: ts.Program): MultiEntryResult;
23
+ export declare function resolveEntryPointExports(entryPoints: ReadonlyArray<EntryPointInput>, compilerOptions: ts.CompilerOptions, previousProgram?: ts.Program, host?: ts.CompilerHost): MultiEntryResult;
22
24
  //# sourceMappingURL=entry-point.scanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entry-point.scanner.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/entry-point.scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACvD,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IACpB,OAAO,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACpC,WAAW,EAAE,aAAa,CAAC,eAAe,CAAC,EAC3C,eAAe,EAAE,EAAE,CAAC,eAAe,EACnC,eAAe,CAAC,EAAE,EAAE,CAAC,OAAO,GAC7B,gBAAgB,CA4BlB"}
1
+ {"version":3,"file":"entry-point.scanner.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/entry-point.scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kHAAkH;IAClH,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACvD,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IACpB,OAAO,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACpC,WAAW,EAAE,aAAa,CAAC,eAAe,CAAC,EAC3C,eAAe,EAAE,EAAE,CAAC,eAAe,EACnC,eAAe,CAAC,EAAE,EAAE,CAAC,OAAO,EAC5B,IAAI,CAAC,EAAE,EAAE,CAAC,YAAY,GACvB,gBAAgB,CA8BlB"}
@@ -7,23 +7,24 @@ import ts from 'typescript';
7
7
  *
8
8
  * Re-exports (`export * from '...'`) are resolved automatically by TypeScript.
9
9
  */
10
- export function resolveEntryPointExports(entryPoints, compilerOptions, previousProgram) {
11
- const program = ts.createProgram(entryPoints.map((e) => e.entryFile), compilerOptions, undefined, previousProgram);
10
+ export function resolveEntryPointExports(entryPoints, compilerOptions, previousProgram, host) {
11
+ const program = ts.createProgram(entryPoints.map((e) => e.entryFile), compilerOptions, host, previousProgram);
12
12
  const checker = program.getTypeChecker();
13
- const entries = entryPoints.map(({ entryFile, importPath }) => {
13
+ const entries = entryPoints.map((entryPoint) => {
14
+ const { entryFile } = entryPoint;
14
15
  try {
15
16
  const sourceFile = program.getSourceFile(entryFile);
16
17
  if (!sourceFile) {
17
18
  console.warn(`⚠ ng-prism: source file not found for entry point ${entryFile}, skipping.`);
18
- return { entryFile, importPath, exports: [] };
19
+ return { ...entryPoint, exports: [] };
19
20
  }
20
21
  const moduleSymbol = checker.getSymbolAtLocation(sourceFile);
21
22
  const exports = moduleSymbol ? checker.getExportsOfModule(moduleSymbol) : [];
22
- return { entryFile, importPath, exports };
23
+ return { ...entryPoint, exports };
23
24
  }
24
25
  catch (err) {
25
26
  console.error(`⚠ ng-prism: failed to resolve exports for ${entryFile}: ${err instanceof Error ? err.message : String(err)}`);
26
- return { entryFile, importPath, exports: [] };
27
+ return { ...entryPoint, exports: [] };
27
28
  }
28
29
  });
29
30
  return { program, entries };
@@ -3,6 +3,10 @@ export type { CreateScannerOptions, Scanner, ScanResult } from './scanner.js';
3
3
  export { resolveEntryPointExports } from './entry-point.scanner.js';
4
4
  export type { EntryPointInput, MultiEntryResult, ResolvedEntryPoint } from './entry-point.scanner.js';
5
5
  export { scanComponents } from './component.scanner.js';
6
+ export { scanServices } from './service.scanner.js';
7
+ export type { ScanServicesOptions } from './service.scanner.js';
8
+ export { scanPipes } from './pipe.scanner.js';
9
+ export type { ScanPipesOptions } from './pipe.scanner.js';
6
10
  export { extractInputs, extractOutputs } from './input.extractor.js';
7
11
  export { generateManifest } from './manifest.generator.js';
8
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,oBAAoB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACtG,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,oBAAoB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACtG,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -2,5 +2,7 @@
2
2
  export { createScanner } from './scanner.js';
3
3
  export { resolveEntryPointExports } from './entry-point.scanner.js';
4
4
  export { scanComponents } from './component.scanner.js';
5
+ export { scanServices } from './service.scanner.js';
6
+ export { scanPipes } from './pipe.scanner.js';
5
7
  export { extractInputs, extractOutputs } from './input.extractor.js';
6
8
  export { generateManifest } from './manifest.generator.js';
@@ -1,14 +1,43 @@
1
1
  import ts from 'typescript';
2
2
  import type { InputMeta, OutputMeta } from '../../plugin/plugin.types.js';
3
+ import { type ClassHierarchy } from './class-hierarchy.js';
3
4
  /**
4
5
  * Extract all @Input(), input() and model() signal metadata from a class
5
6
  * declaration and the base classes Angular inherits inputs from. An input the
6
7
  * subclass redeclares wins over the one in its base class.
7
8
  */
8
- export declare function extractInputs(classDecl: ts.ClassDeclaration, checker: ts.TypeChecker, hierarchy?: import("./class-hierarchy.js").ClassHierarchy): InputMeta[];
9
+ export declare function extractInputs(classDecl: ts.ClassDeclaration, checker: ts.TypeChecker, hierarchy?: ClassHierarchy): InputMeta[];
10
+ /**
11
+ * The declaration Angular takes an input from: the member of that name in the
12
+ * nearest class that defines metadata and declares it an input, the one
13
+ * {@link extractInputs} reads.
14
+ */
15
+ export declare function findInputDeclaration(hierarchy: ClassHierarchy, name: string): {
16
+ member: ts.PropertyDeclaration;
17
+ owner: ts.ClassDeclaration;
18
+ } | undefined;
19
+ /** The declaration Angular takes an output from, as {@link findInputDeclaration} for an input. */
20
+ export declare function findOutputDeclaration(hierarchy: ClassHierarchy, name: string): {
21
+ member: ts.PropertyDeclaration;
22
+ owner: ts.ClassDeclaration;
23
+ } | undefined;
24
+ /** Whether an input is a `model()` or `model.required()`, for which Angular adds a change output. */
25
+ export declare function isModelInput(member: ts.PropertyDeclaration): boolean;
9
26
  /**
10
27
  * Extract all @Output() and output() signal metadata from a class declaration
11
28
  * and the base classes Angular inherits outputs from.
12
29
  */
13
- export declare function extractOutputs(classDecl: ts.ClassDeclaration, checker: ts.TypeChecker, hierarchy?: import("./class-hierarchy.js").ClassHierarchy): OutputMeta[];
30
+ export declare function extractOutputs(classDecl: ts.ClassDeclaration, checker: ts.TypeChecker, hierarchy?: ClassHierarchy): OutputMeta[];
31
+ /**
32
+ * Whether a declared type, or the expression a type is inferred from,
33
+ * mentions a type parameter of the class that declares it. Only then does the
34
+ * subclass change the type; otherwise the source text stays, alias names included.
35
+ */
36
+ export declare function usesTypeParameters(node: ts.Node | undefined, owner: ts.ClassDeclaration, checker: ts.TypeChecker): boolean;
37
+ /**
38
+ * The type of a property declared in a generic base class, as the subclass
39
+ * sees it: `items = input.required<T[]>()` in `Field<T>` is an
40
+ * `InputSignal<Country[]>` on `Picker extends Field<Country>`.
41
+ */
42
+ export declare function getInstantiatedType(name: string, subclass: ts.ClassDeclaration, checker: ts.TypeChecker): ts.Type | undefined;
14
43
  //# sourceMappingURL=input.extractor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"input.extractor.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/input.extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAI1E;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,gDAAwC,GAAG,SAAS,EAAE,CAuCrJ;AAsED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,gDAAwC,GAAG,UAAU,EAAE,CAuBvJ"}
1
+ {"version":3,"file":"input.extractor.d.ts","sourceRoot":"","sources":["../../../src/builder/scanner/input.extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAAE,KAAK,cAAc,EAAqB,MAAM,sBAAsB,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,iBAAwC,GAAG,SAAS,EAAE,CAsCrJ;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,EAAE,CAAC,mBAAmB,CAAC;IAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAA;CAAE,GAAG,SAAS,CAExJ;AAED,kGAAkG;AAClG,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,EAAE,CAAC,mBAAmB,CAAC;IAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAA;CAAE,GAAG,SAAS,CAEzJ;AAED,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,mBAAmB,GAAG,OAAO,CAKpE;AAoHD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,iBAAwC,GAAG,UAAU,EAAE,CA4BvJ;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,OAAO,CAgB1H;AAuBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,GAAG,SAAS,CAI7H"}