@ng-prism/core 21.0.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 (307) hide show
  1. package/README.md +170 -0
  2. package/builders.json +14 -0
  3. package/dist/app/component-header/prism-component-header.component.d.ts +8 -0
  4. package/dist/app/component-header/prism-component-header.component.d.ts.map +1 -0
  5. package/dist/app/component-header/prism-component-header.component.js +77 -0
  6. package/dist/app/controls/boolean-control.component.d.ts +10 -0
  7. package/dist/app/controls/boolean-control.component.d.ts.map +1 -0
  8. package/dist/app/controls/boolean-control.component.js +58 -0
  9. package/dist/app/controls/json-control.component.d.ts +19 -0
  10. package/dist/app/controls/json-control.component.d.ts.map +1 -0
  11. package/dist/app/controls/json-control.component.js +136 -0
  12. package/dist/app/controls/number-control.component.d.ts +10 -0
  13. package/dist/app/controls/number-control.component.d.ts.map +1 -0
  14. package/dist/app/controls/number-control.component.js +55 -0
  15. package/dist/app/controls/string-control.component.d.ts +10 -0
  16. package/dist/app/controls/string-control.component.d.ts.map +1 -0
  17. package/dist/app/controls/string-control.component.js +55 -0
  18. package/dist/app/controls/union-control.component.d.ts +11 -0
  19. package/dist/app/controls/union-control.component.d.ts.map +1 -0
  20. package/dist/app/controls/union-control.component.js +72 -0
  21. package/dist/app/header/prism-header.component.d.ts +10 -0
  22. package/dist/app/header/prism-header.component.d.ts.map +1 -0
  23. package/dist/app/header/prism-header.component.js +241 -0
  24. package/dist/app/hmr.d.ts +4 -0
  25. package/dist/app/hmr.d.ts.map +1 -0
  26. package/dist/app/hmr.js +5 -0
  27. package/dist/app/index.d.ts +18 -0
  28. package/dist/app/index.d.ts.map +1 -0
  29. package/dist/app/index.js +21 -0
  30. package/dist/app/layout-menu/prism-layout-menu.component.d.ts +10 -0
  31. package/dist/app/layout-menu/prism-layout-menu.component.d.ts.map +1 -0
  32. package/dist/app/layout-menu/prism-layout-menu.component.js +190 -0
  33. package/dist/app/page-renderer/prism-icon-page.component.d.ts +8 -0
  34. package/dist/app/page-renderer/prism-icon-page.component.d.ts.map +1 -0
  35. package/dist/app/page-renderer/prism-icon-page.component.js +42 -0
  36. package/dist/app/page-renderer/prism-page-renderer.component.d.ts +8 -0
  37. package/dist/app/page-renderer/prism-page-renderer.component.d.ts.map +1 -0
  38. package/dist/app/page-renderer/prism-page-renderer.component.js +72 -0
  39. package/dist/app/page-renderer/prism-token-page.component.d.ts +8 -0
  40. package/dist/app/page-renderer/prism-token-page.component.d.ts.map +1 -0
  41. package/dist/app/page-renderer/prism-token-page.component.js +164 -0
  42. package/dist/app/panels/a11y/a11y-audit.service.d.ts +17 -0
  43. package/dist/app/panels/a11y/a11y-audit.service.d.ts.map +1 -0
  44. package/dist/app/panels/a11y/a11y-audit.service.js +71 -0
  45. package/dist/app/panels/a11y/a11y-core.plugin.d.ts +3 -0
  46. package/dist/app/panels/a11y/a11y-core.plugin.d.ts.map +1 -0
  47. package/dist/app/panels/a11y/a11y-core.plugin.js +8 -0
  48. package/dist/app/panels/a11y/a11y-dom-utils.d.ts +11 -0
  49. package/dist/app/panels/a11y/a11y-dom-utils.d.ts.map +1 -0
  50. package/dist/app/panels/a11y/a11y-dom-utils.js +149 -0
  51. package/dist/app/panels/a11y/a11y-keyboard-overlay.component.d.ts +24 -0
  52. package/dist/app/panels/a11y/a11y-keyboard-overlay.component.d.ts.map +1 -0
  53. package/dist/app/panels/a11y/a11y-keyboard-overlay.component.js +104 -0
  54. package/dist/app/panels/a11y/a11y-keyboard.component.d.ts +12 -0
  55. package/dist/app/panels/a11y/a11y-keyboard.component.d.ts.map +1 -0
  56. package/dist/app/panels/a11y/a11y-keyboard.component.js +150 -0
  57. package/dist/app/panels/a11y/a11y-keyboard.service.d.ts +8 -0
  58. package/dist/app/panels/a11y/a11y-keyboard.service.d.ts.map +1 -0
  59. package/dist/app/panels/a11y/a11y-keyboard.service.js +71 -0
  60. package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts +6 -0
  61. package/dist/app/panels/a11y/a11y-overlay-host.component.d.ts.map +1 -0
  62. package/dist/app/panels/a11y/a11y-overlay-host.component.js +18 -0
  63. package/dist/app/panels/a11y/a11y-panel-state.service.d.ts +8 -0
  64. package/dist/app/panels/a11y/a11y-panel-state.service.d.ts.map +1 -0
  65. package/dist/app/panels/a11y/a11y-panel-state.service.js +11 -0
  66. package/dist/app/panels/a11y/a11y-panel.component.d.ts +14 -0
  67. package/dist/app/panels/a11y/a11y-panel.component.d.ts.map +1 -0
  68. package/dist/app/panels/a11y/a11y-panel.component.js +183 -0
  69. package/dist/app/panels/a11y/a11y-perspective.service.d.ts +8 -0
  70. package/dist/app/panels/a11y/a11y-perspective.service.d.ts.map +1 -0
  71. package/dist/app/panels/a11y/a11y-perspective.service.js +11 -0
  72. package/dist/app/panels/a11y/a11y-score.component.d.ts +11 -0
  73. package/dist/app/panels/a11y/a11y-score.component.d.ts.map +1 -0
  74. package/dist/app/panels/a11y/a11y-score.component.js +72 -0
  75. package/dist/app/panels/a11y/a11y-sr-overlay.component.d.ts +27 -0
  76. package/dist/app/panels/a11y/a11y-sr-overlay.component.d.ts.map +1 -0
  77. package/dist/app/panels/a11y/a11y-sr-overlay.component.js +127 -0
  78. package/dist/app/panels/a11y/a11y-sr.component.d.ts +19 -0
  79. package/dist/app/panels/a11y/a11y-sr.component.d.ts.map +1 -0
  80. package/dist/app/panels/a11y/a11y-sr.component.js +257 -0
  81. package/dist/app/panels/a11y/a11y-sr.service.d.ts +8 -0
  82. package/dist/app/panels/a11y/a11y-sr.service.d.ts.map +1 -0
  83. package/dist/app/panels/a11y/a11y-sr.service.js +102 -0
  84. package/dist/app/panels/a11y/a11y-tree.component.d.ts +27 -0
  85. package/dist/app/panels/a11y/a11y-tree.component.d.ts.map +1 -0
  86. package/dist/app/panels/a11y/a11y-tree.component.js +229 -0
  87. package/dist/app/panels/a11y/a11y-tree.service.d.ts +8 -0
  88. package/dist/app/panels/a11y/a11y-tree.service.d.ts.map +1 -0
  89. package/dist/app/panels/a11y/a11y-tree.service.js +47 -0
  90. package/dist/app/panels/a11y/a11y-violations.component.d.ts +15 -0
  91. package/dist/app/panels/a11y/a11y-violations.component.d.ts.map +1 -0
  92. package/dist/app/panels/a11y/a11y-violations.component.js +457 -0
  93. package/dist/app/panels/a11y/a11y.types.d.ts +44 -0
  94. package/dist/app/panels/a11y/a11y.types.d.ts.map +1 -0
  95. package/dist/app/panels/a11y/a11y.types.js +1 -0
  96. package/dist/app/panels/builtin-panels.d.ts +3 -0
  97. package/dist/app/panels/builtin-panels.d.ts.map +1 -0
  98. package/dist/app/panels/builtin-panels.js +8 -0
  99. package/dist/app/panels/controls/controls-plugin.d.ts +3 -0
  100. package/dist/app/panels/controls/controls-plugin.d.ts.map +1 -0
  101. package/dist/app/panels/controls/controls-plugin.js +12 -0
  102. package/dist/app/panels/controls/prism-controls-panel.component.d.ts +13 -0
  103. package/dist/app/panels/controls/prism-controls-panel.component.d.ts.map +1 -0
  104. package/dist/app/panels/controls/prism-controls-panel.component.js +178 -0
  105. package/dist/app/panels/events/events-plugin.d.ts +3 -0
  106. package/dist/app/panels/events/events-plugin.d.ts.map +1 -0
  107. package/dist/app/panels/events/events-plugin.js +12 -0
  108. package/dist/app/panels/events/prism-events-panel.component.d.ts +9 -0
  109. package/dist/app/panels/events/prism-events-panel.component.d.ts.map +1 -0
  110. package/dist/app/panels/events/prism-events-panel.component.js +83 -0
  111. package/dist/app/panels/events/prism-json-node.component.d.ts +22 -0
  112. package/dist/app/panels/events/prism-json-node.component.d.ts.map +1 -0
  113. package/dist/app/panels/events/prism-json-node.component.js +350 -0
  114. package/dist/app/panels/events/prism-json-node.utils.d.ts +2 -0
  115. package/dist/app/panels/events/prism-json-node.utils.d.ts.map +1 -0
  116. package/dist/app/panels/events/prism-json-node.utils.js +40 -0
  117. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts +26 -0
  118. package/dist/app/panels/panel-host/prism-panel-host.component.d.ts.map +1 -0
  119. package/dist/app/panels/panel-host/prism-panel-host.component.js +157 -0
  120. package/dist/app/provide-prism.d.ts +8 -0
  121. package/dist/app/provide-prism.d.ts.map +1 -0
  122. package/dist/app/provide-prism.js +21 -0
  123. package/dist/app/renderer/highlight-xml.d.ts +2 -0
  124. package/dist/app/renderer/highlight-xml.d.ts.map +1 -0
  125. package/dist/app/renderer/highlight-xml.js +27 -0
  126. package/dist/app/renderer/prism-renderer.component.d.ts +32 -0
  127. package/dist/app/renderer/prism-renderer.component.d.ts.map +1 -0
  128. package/dist/app/renderer/prism-renderer.component.js +346 -0
  129. package/dist/app/renderer/snippet-generator.d.ts +7 -0
  130. package/dist/app/renderer/snippet-generator.d.ts.map +1 -0
  131. package/dist/app/renderer/snippet-generator.js +162 -0
  132. package/dist/app/services/navigation-item.types.d.ts +10 -0
  133. package/dist/app/services/navigation-item.types.d.ts.map +1 -0
  134. package/dist/app/services/navigation-item.types.js +1 -0
  135. package/dist/app/services/prism-event-log.service.d.ts +16 -0
  136. package/dist/app/services/prism-event-log.service.d.ts.map +1 -0
  137. package/dist/app/services/prism-event-log.service.js +21 -0
  138. package/dist/app/services/prism-layout.service.d.ts +23 -0
  139. package/dist/app/services/prism-layout.service.d.ts.map +1 -0
  140. package/dist/app/services/prism-layout.service.js +85 -0
  141. package/dist/app/services/prism-manifest.service.d.ts +15 -0
  142. package/dist/app/services/prism-manifest.service.d.ts.map +1 -0
  143. package/dist/app/services/prism-manifest.service.js +53 -0
  144. package/dist/app/services/prism-navigation.service.d.ts +18 -0
  145. package/dist/app/services/prism-navigation.service.d.ts.map +1 -0
  146. package/dist/app/services/prism-navigation.service.js +94 -0
  147. package/dist/app/services/prism-panel.service.d.ts +8 -0
  148. package/dist/app/services/prism-panel.service.d.ts.map +1 -0
  149. package/dist/app/services/prism-panel.service.js +12 -0
  150. package/dist/app/services/prism-plugin.service.d.ts +12 -0
  151. package/dist/app/services/prism-plugin.service.d.ts.map +1 -0
  152. package/dist/app/services/prism-plugin.service.js +32 -0
  153. package/dist/app/services/prism-renderer.service.d.ts +18 -0
  154. package/dist/app/services/prism-renderer.service.d.ts.map +1 -0
  155. package/dist/app/services/prism-renderer.service.js +84 -0
  156. package/dist/app/services/prism-search.service.d.ts +13 -0
  157. package/dist/app/services/prism-search.service.d.ts.map +1 -0
  158. package/dist/app/services/prism-search.service.js +39 -0
  159. package/dist/app/services/prism-theme.service.d.ts +9 -0
  160. package/dist/app/services/prism-theme.service.d.ts.map +1 -0
  161. package/dist/app/services/prism-theme.service.js +23 -0
  162. package/dist/app/services/prism-url-state.service.d.ts +16 -0
  163. package/dist/app/services/prism-url-state.service.d.ts.map +1 -0
  164. package/dist/app/services/prism-url-state.service.js +108 -0
  165. package/dist/app/shell/prism-shell.component.d.ts +22 -0
  166. package/dist/app/shell/prism-shell.component.d.ts.map +1 -0
  167. package/dist/app/shell/prism-shell.component.js +283 -0
  168. package/dist/app/sidebar/prism-sidebar.component.d.ts +14 -0
  169. package/dist/app/sidebar/prism-sidebar.component.d.ts.map +1 -0
  170. package/dist/app/sidebar/prism-sidebar.component.js +105 -0
  171. package/dist/app/theme/prism-default-theme.d.ts +4 -0
  172. package/dist/app/theme/prism-default-theme.d.ts.map +1 -0
  173. package/dist/app/theme/prism-default-theme.js +57 -0
  174. package/dist/app/tokens/prism-tokens.d.ts +11 -0
  175. package/dist/app/tokens/prism-tokens.d.ts.map +1 -0
  176. package/dist/app/tokens/prism-tokens.js +7 -0
  177. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts +22 -0
  178. package/dist/app/view-tab-bar/prism-view-panel-host.component.d.ts.map +1 -0
  179. package/dist/app/view-tab-bar/prism-view-panel-host.component.js +90 -0
  180. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts +10 -0
  181. package/dist/app/view-tab-bar/prism-view-tab-bar.component.d.ts.map +1 -0
  182. package/dist/app/view-tab-bar/prism-view-tab-bar.component.js +65 -0
  183. package/dist/builder/build/index.d.ts +6 -0
  184. package/dist/builder/build/index.d.ts.map +1 -0
  185. package/dist/builder/build/index.js +15 -0
  186. package/dist/builder/build/schema.d.ts +9 -0
  187. package/dist/builder/build/schema.d.ts.map +1 -0
  188. package/dist/builder/build/schema.js +1 -0
  189. package/dist/builder/config-loader/config-loader.d.ts +8 -0
  190. package/dist/builder/config-loader/config-loader.d.ts.map +1 -0
  191. package/dist/builder/config-loader/config-loader.js +33 -0
  192. package/dist/builder/config-loader/index.d.ts +3 -0
  193. package/dist/builder/config-loader/index.d.ts.map +1 -0
  194. package/dist/builder/config-loader/index.js +1 -0
  195. package/dist/builder/icon-resolver/icon-resolver.d.ts +7 -0
  196. package/dist/builder/icon-resolver/icon-resolver.d.ts.map +1 -0
  197. package/dist/builder/icon-resolver/icon-resolver.js +12 -0
  198. package/dist/builder/icon-resolver/index.d.ts +2 -0
  199. package/dist/builder/icon-resolver/index.d.ts.map +1 -0
  200. package/dist/builder/icon-resolver/index.js +1 -0
  201. package/dist/builder/manifest/host-parser.d.ts +6 -0
  202. package/dist/builder/manifest/host-parser.d.ts.map +1 -0
  203. package/dist/builder/manifest/host-parser.js +9 -0
  204. package/dist/builder/manifest/index.d.ts +3 -0
  205. package/dist/builder/manifest/index.d.ts.map +1 -0
  206. package/dist/builder/manifest/index.js +1 -0
  207. package/dist/builder/manifest/runtime-manifest.generator.d.ts +9 -0
  208. package/dist/builder/manifest/runtime-manifest.generator.d.ts.map +1 -0
  209. package/dist/builder/manifest/runtime-manifest.generator.js +216 -0
  210. package/dist/builder/plugin-runner/index.d.ts +2 -0
  211. package/dist/builder/plugin-runner/index.d.ts.map +1 -0
  212. package/dist/builder/plugin-runner/index.js +1 -0
  213. package/dist/builder/plugin-runner/plugin-runner.d.ts +3 -0
  214. package/dist/builder/plugin-runner/plugin-runner.d.ts.map +1 -0
  215. package/dist/builder/plugin-runner/plugin-runner.js +38 -0
  216. package/dist/builder/scanner/ast-utils.d.ts +20 -0
  217. package/dist/builder/scanner/ast-utils.d.ts.map +1 -0
  218. package/dist/builder/scanner/ast-utils.js +100 -0
  219. package/dist/builder/scanner/component.scanner.d.ts +7 -0
  220. package/dist/builder/scanner/component.scanner.d.ts.map +1 -0
  221. package/dist/builder/scanner/component.scanner.js +113 -0
  222. package/dist/builder/scanner/entry-point-discovery.d.ts +6 -0
  223. package/dist/builder/scanner/entry-point-discovery.d.ts.map +1 -0
  224. package/dist/builder/scanner/entry-point-discovery.js +38 -0
  225. package/dist/builder/scanner/entry-point.scanner.d.ts +11 -0
  226. package/dist/builder/scanner/entry-point.scanner.d.ts.map +1 -0
  227. package/dist/builder/scanner/entry-point.scanner.js +19 -0
  228. package/dist/builder/scanner/index.d.ts +8 -0
  229. package/dist/builder/scanner/index.d.ts.map +1 -0
  230. package/dist/builder/scanner/index.js +6 -0
  231. package/dist/builder/scanner/input.extractor.d.ts +11 -0
  232. package/dist/builder/scanner/input.extractor.d.ts.map +1 -0
  233. package/dist/builder/scanner/input.extractor.js +169 -0
  234. package/dist/builder/scanner/manifest.generator.d.ts +6 -0
  235. package/dist/builder/scanner/manifest.generator.d.ts.map +1 -0
  236. package/dist/builder/scanner/manifest.generator.js +59 -0
  237. package/dist/builder/scanner/scanner.d.ts +16 -0
  238. package/dist/builder/scanner/scanner.d.ts.map +1 -0
  239. package/dist/builder/scanner/scanner.js +28 -0
  240. package/dist/builder/serve/index.d.ts +6 -0
  241. package/dist/builder/serve/index.d.ts.map +1 -0
  242. package/dist/builder/serve/index.js +48 -0
  243. package/dist/builder/serve/schema.d.ts +9 -0
  244. package/dist/builder/serve/schema.d.ts.map +1 -0
  245. package/dist/builder/serve/schema.js +1 -0
  246. package/dist/builder/shared/index.d.ts +3 -0
  247. package/dist/builder/shared/index.d.ts.map +1 -0
  248. package/dist/builder/shared/index.js +1 -0
  249. package/dist/builder/shared/prism-pipeline.d.ts +21 -0
  250. package/dist/builder/shared/prism-pipeline.d.ts.map +1 -0
  251. package/dist/builder/shared/prism-pipeline.js +95 -0
  252. package/dist/builder/token-scanner/index.d.ts +2 -0
  253. package/dist/builder/token-scanner/index.d.ts.map +1 -0
  254. package/dist/builder/token-scanner/index.js +1 -0
  255. package/dist/builder/token-scanner/token-scanner.d.ts +9 -0
  256. package/dist/builder/token-scanner/token-scanner.d.ts.map +1 -0
  257. package/dist/builder/token-scanner/token-scanner.js +95 -0
  258. package/dist/builder/watcher/index.d.ts +3 -0
  259. package/dist/builder/watcher/index.d.ts.map +1 -0
  260. package/dist/builder/watcher/index.js +1 -0
  261. package/dist/builder/watcher/prism-watcher.d.ts +29 -0
  262. package/dist/builder/watcher/prism-watcher.d.ts.map +1 -0
  263. package/dist/builder/watcher/prism-watcher.js +79 -0
  264. package/dist/config/index.d.ts +6 -0
  265. package/dist/config/index.d.ts.map +1 -0
  266. package/dist/config/index.js +2 -0
  267. package/dist/decorator/index.d.ts +3 -0
  268. package/dist/decorator/index.d.ts.map +1 -0
  269. package/dist/decorator/index.js +1 -0
  270. package/dist/decorator/showcase.decorator.d.ts +5 -0
  271. package/dist/decorator/showcase.decorator.d.ts.map +1 -0
  272. package/dist/decorator/showcase.decorator.js +7 -0
  273. package/dist/decorator/showcase.types.d.ts +54 -0
  274. package/dist/decorator/showcase.types.d.ts.map +1 -0
  275. package/dist/decorator/showcase.types.js +1 -0
  276. package/dist/index.d.ts +4 -0
  277. package/dist/index.d.ts.map +1 -0
  278. package/dist/index.js +6 -0
  279. package/dist/plugin/define-config.d.ts +4 -0
  280. package/dist/plugin/define-config.d.ts.map +1 -0
  281. package/dist/plugin/define-config.js +4 -0
  282. package/dist/plugin/index.d.ts +8 -0
  283. package/dist/plugin/index.d.ts.map +1 -0
  284. package/dist/plugin/index.js +3 -0
  285. package/dist/plugin/page-helpers.d.ts +19 -0
  286. package/dist/plugin/page-helpers.d.ts.map +1 -0
  287. package/dist/plugin/page-helpers.js +20 -0
  288. package/dist/plugin/page.types.d.ts +19 -0
  289. package/dist/plugin/page.types.d.ts.map +1 -0
  290. package/dist/plugin/page.types.js +1 -0
  291. package/dist/plugin/plugin.types.d.ts +98 -0
  292. package/dist/plugin/plugin.types.d.ts.map +1 -0
  293. package/dist/plugin/plugin.types.js +1 -0
  294. package/dist/schematics/ng-add/index.d.ts +4 -0
  295. package/dist/schematics/ng-add/index.d.ts.map +1 -0
  296. package/dist/schematics/ng-add/index.js +179 -0
  297. package/dist/schematics/ng-add/schema.d.ts +5 -0
  298. package/dist/schematics/ng-add/schema.d.ts.map +1 -0
  299. package/dist/schematics/ng-add/schema.js +1 -0
  300. package/dist/test-setup-browser.d.ts +2 -0
  301. package/dist/test-setup-browser.d.ts.map +1 -0
  302. package/dist/test-setup-browser.js +4 -0
  303. package/package.json +73 -0
  304. package/schematics/collection.json +10 -0
  305. package/schematics/ng-add/schema.json +20 -0
  306. package/src/builder/build/schema.json +35 -0
  307. package/src/builder/serve/schema.json +36 -0
@@ -0,0 +1,27 @@
1
+ const ESC = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;' };
2
+ function esc(text) {
3
+ return text.replace(/[&<>"]/g, (ch) => ESC[ch]);
4
+ }
5
+ export function highlightXml(code) {
6
+ return code.replace(/(<\/?)(\w[\w-]*)|(\[[\w.-]+\])=("(?:[^"\\]|\\.)*")|(\([\w.-]+\))=("(?:[^"\\]|\\.)*")|([\w[\].-]+)=("(?:[^"\\]|\\.)*")|("(?:[^"\\]|\\.)*")|(\/?>)/g, (_match, tagOpen, tagName, bindingAttr, bindingVal, eventAttr, eventVal, attrName, attrValue, strLiteral, closing) => {
7
+ if (tagOpen != null && tagName != null) {
8
+ return `<span class="prism-hl-tag">${esc(tagOpen)}</span><span class="prism-hl-name">${esc(tagName)}</span>`;
9
+ }
10
+ if (bindingAttr != null && bindingVal != null) {
11
+ return `<span class="prism-hl-binding">${esc(bindingAttr)}</span>=<span class="prism-hl-string">${esc(bindingVal)}</span>`;
12
+ }
13
+ if (eventAttr != null && eventVal != null) {
14
+ return `<span class="prism-hl-event">${esc(eventAttr)}</span>=<span class="prism-hl-string">${esc(eventVal)}</span>`;
15
+ }
16
+ if (attrName != null && attrValue != null) {
17
+ return `<span class="prism-hl-attr">${esc(attrName)}</span>=<span class="prism-hl-string">${esc(attrValue)}</span>`;
18
+ }
19
+ if (strLiteral != null) {
20
+ return `<span class="prism-hl-string">${esc(strLiteral)}</span>`;
21
+ }
22
+ if (closing != null) {
23
+ return `<span class="prism-hl-tag">${esc(closing)}</span>`;
24
+ }
25
+ return esc(_match);
26
+ });
27
+ }
@@ -0,0 +1,32 @@
1
+ import { type Type } from '@angular/core';
2
+ import { A11yPerspectiveService } from '../panels/a11y/a11y-perspective.service.js';
3
+ import { PrismNavigationService } from '../services/prism-navigation.service.js';
4
+ import { PrismRendererService } from '../services/prism-renderer.service.js';
5
+ import * as i0 from "@angular/core";
6
+ export declare class PrismRendererComponent {
7
+ protected readonly navigationService: PrismNavigationService;
8
+ protected readonly rendererService: PrismRendererService;
9
+ protected readonly perspectiveService: A11yPerspectiveService;
10
+ private readonly eventLogService;
11
+ private readonly manifestService;
12
+ private readonly injector;
13
+ private readonly destroyRef;
14
+ private readonly rendererHooks;
15
+ private readonly outlet;
16
+ private componentRef;
17
+ private outputSubscriptions;
18
+ private lastProjectedContent;
19
+ private isRenderPage;
20
+ private readonly panelService;
21
+ private readonly pluginService;
22
+ private readonly overlayCache;
23
+ readonly activeOverlay: import("@angular/core").WritableSignal<Type<unknown> | null>;
24
+ readonly codeVisible: import("@angular/core").WritableSignal<boolean>;
25
+ readonly snippet: import("@angular/core").Signal<string>;
26
+ constructor();
27
+ private createComponent;
28
+ private cleanup;
29
+ static ɵfac: i0.ɵɵFactoryDeclaration<PrismRendererComponent, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<PrismRendererComponent, "prism-renderer", never, {}, {}, never, never, true, never>;
31
+ }
32
+ //# sourceMappingURL=prism-renderer.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prism-renderer.component.d.ts","sourceRoot":"","sources":["../../../src/app/renderer/prism-renderer.component.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,IAAI,EAIV,MAAM,eAAe,CAAC;AAOvB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAIpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAGjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;;AAG7E,qBAwKa,sBAAsB;IACjC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,yBAAkC;IACtE,SAAS,CAAC,QAAQ,CAAC,eAAe,uBAAgC;IAClE,SAAS,CAAC,QAAQ,CAAC,kBAAkB,yBAAkC;IACvE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAChE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoD;IAElF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4D;IACnF,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,mBAAmB,CAAsC;IACjE,OAAO,CAAC,oBAAoB,CAA0D;IACtF,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAC5D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoC;IACjE,QAAQ,CAAC,aAAa,+DAAsC;IAE5D,QAAQ,CAAC,WAAW,kDAAiB;IAErC,QAAQ,CAAC,OAAO,yCAgBb;;IA4EH,OAAO,CAAC,eAAe;IA4DvB,OAAO,CAAC,OAAO;yCA9KJ,sBAAsB;2CAAtB,sBAAsB;CA4LlC"}
@@ -0,0 +1,346 @@
1
+ import { Component, computed, DestroyRef, effect, inject, Injector, signal, untracked, viewChild, ViewContainerRef, } from '@angular/core';
2
+ import { NgComponentOutlet } from '@angular/common';
3
+ import { Highlight } from 'ngx-highlightjs';
4
+ import { PrismManifestService } from '../services/prism-manifest.service.js';
5
+ import { BUILTIN_PANELS } from '../panels/builtin-panels.js';
6
+ import { A11yPerspectiveService } from '../panels/a11y/a11y-perspective.service.js';
7
+ import { PRISM_RENDERER_HOOKS } from '../tokens/prism-tokens.js';
8
+ import { PrismEventLogService } from '../services/prism-event-log.service.js';
9
+ import { PrismNavigationService } from '../services/prism-navigation.service.js';
10
+ import { PrismPanelService } from '../services/prism-panel.service.js';
11
+ import { PrismPluginService } from '../services/prism-plugin.service.js';
12
+ import { PrismRendererService } from '../services/prism-renderer.service.js';
13
+ import { generateSnippet } from './snippet-generator.js';
14
+ import * as i0 from "@angular/core";
15
+ const _c0 = ["outlet"];
16
+ const _forTrack0 = ($index, $item) => $item.name;
17
+ function PrismRendererComponent_Conditional_1_Conditional_0_For_2_Template(rf, ctx) { if (rf & 1) {
18
+ const _r1 = i0.ɵɵgetCurrentView();
19
+ i0.ɵɵelementStart(0, "button", 7);
20
+ i0.ɵɵlistener("click", function PrismRendererComponent_Conditional_1_Conditional_0_For_2_Template_button_click_0_listener() { const ɵ$index_7_r2 = i0.ɵɵrestoreView(_r1).$index; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.rendererService.selectVariant(ɵ$index_7_r2)); });
21
+ i0.ɵɵtext(1);
22
+ i0.ɵɵelementEnd();
23
+ } if (rf & 2) {
24
+ const variant_r4 = ctx.$implicit;
25
+ const ɵ$index_7_r2 = ctx.$index;
26
+ const ctx_r2 = i0.ɵɵnextContext(3);
27
+ i0.ɵɵclassProp("prism-renderer__variant--active", ctx_r2.rendererService.activeVariantIndex() === ɵ$index_7_r2);
28
+ i0.ɵɵadvance();
29
+ i0.ɵɵtextInterpolate1(" ", variant_r4.name, " ");
30
+ } }
31
+ function PrismRendererComponent_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
32
+ i0.ɵɵelementStart(0, "div", 5);
33
+ i0.ɵɵrepeaterCreate(1, PrismRendererComponent_Conditional_1_Conditional_0_For_2_Template, 2, 3, "button", 6, _forTrack0);
34
+ i0.ɵɵelementEnd();
35
+ } if (rf & 2) {
36
+ const comp_r5 = i0.ɵɵnextContext();
37
+ i0.ɵɵadvance();
38
+ i0.ɵɵrepeater(comp_r5.meta.showcaseConfig.variants);
39
+ } }
40
+ function PrismRendererComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
41
+ i0.ɵɵconditionalCreate(0, PrismRendererComponent_Conditional_1_Conditional_0_Template, 3, 0, "div", 5);
42
+ } if (rf & 2) {
43
+ const comp_r5 = ctx;
44
+ i0.ɵɵconditional((comp_r5.meta.showcaseConfig.variants == null ? null : comp_r5.meta.showcaseConfig.variants.length) ? 0 : -1);
45
+ } }
46
+ function PrismRendererComponent_Conditional_5_ng_container_0_Template(rf, ctx) { if (rf & 1) {
47
+ i0.ɵɵelementContainer(0);
48
+ } }
49
+ function PrismRendererComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
50
+ i0.ɵɵtemplate(0, PrismRendererComponent_Conditional_5_ng_container_0_Template, 1, 0, "ng-container", 8);
51
+ } if (rf & 2) {
52
+ const ctx_r2 = i0.ɵɵnextContext();
53
+ i0.ɵɵproperty("ngComponentOutlet", ctx_r2.activeOverlay());
54
+ } }
55
+ function PrismRendererComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
56
+ const _r6 = i0.ɵɵgetCurrentView();
57
+ i0.ɵɵelementStart(0, "div", 3)(1, "button", 9);
58
+ i0.ɵɵlistener("click", function PrismRendererComponent_Conditional_6_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.codeVisible.set(!ctx_r2.codeVisible())); });
59
+ i0.ɵɵtext(2, " </> Code ");
60
+ i0.ɵɵelementEnd()();
61
+ } if (rf & 2) {
62
+ const ctx_r2 = i0.ɵɵnextContext();
63
+ i0.ɵɵadvance();
64
+ i0.ɵɵclassProp("prism-renderer__code-button--active", ctx_r2.codeVisible());
65
+ } }
66
+ function PrismRendererComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
67
+ i0.ɵɵelementStart(0, "div", 4)(1, "pre");
68
+ i0.ɵɵelement(2, "code", 10);
69
+ i0.ɵɵelementEnd()();
70
+ } if (rf & 2) {
71
+ const ctx_r2 = i0.ɵɵnextContext();
72
+ i0.ɵɵadvance(2);
73
+ i0.ɵɵproperty("highlight", ctx_r2.snippet());
74
+ } }
75
+ export class PrismRendererComponent {
76
+ navigationService = inject(PrismNavigationService);
77
+ rendererService = inject(PrismRendererService);
78
+ perspectiveService = inject(A11yPerspectiveService);
79
+ eventLogService = inject(PrismEventLogService);
80
+ manifestService = inject(PrismManifestService);
81
+ injector = inject(Injector);
82
+ destroyRef = inject(DestroyRef);
83
+ rendererHooks = inject(PRISM_RENDERER_HOOKS, { optional: true });
84
+ outlet = viewChild.required('outlet', { read: ViewContainerRef });
85
+ componentRef = null;
86
+ outputSubscriptions = [];
87
+ lastProjectedContent = undefined;
88
+ isRenderPage = false;
89
+ panelService = inject(PrismPanelService);
90
+ pluginService = inject(PrismPluginService);
91
+ overlayCache = new Map();
92
+ activeOverlay = signal(null, ...(ngDevMode ? [{ debugName: "activeOverlay" }] : []));
93
+ codeVisible = signal(false, ...(ngDevMode ? [{ debugName: "codeVisible" }] : []));
94
+ snippet = computed(() => {
95
+ const comp = this.navigationService.activeComponent();
96
+ if (!comp)
97
+ return '';
98
+ const variant = comp.meta.showcaseConfig.variants?.[this.rendererService.activeVariantIndex()];
99
+ const explicitKeys = variant?.inputs ? new Set(Object.keys(variant.inputs)) : undefined;
100
+ const directiveOptions = comp.meta.componentMeta.isDirective
101
+ ? { host: comp.meta.showcaseConfig.host }
102
+ : undefined;
103
+ return generateSnippet(comp.meta.componentMeta.selector, comp.meta.inputs, this.rendererService.inputValues(), explicitKeys, this.rendererService.activeContent(), directiveOptions);
104
+ }, ...(ngDevMode ? [{ debugName: "snippet" }] : []));
105
+ constructor() {
106
+ effect(() => {
107
+ const comp = this.navigationService.activeComponent();
108
+ if (!comp)
109
+ return;
110
+ untracked(() => {
111
+ this.codeVisible.set(false);
112
+ this.rendererService.reconcileForComponent(comp);
113
+ this.createComponent(comp);
114
+ });
115
+ });
116
+ effect(() => {
117
+ const inputs = this.rendererService.inputValues();
118
+ const content = this.rendererService.activeContent();
119
+ const ref = this.componentRef;
120
+ if (!ref)
121
+ return;
122
+ if (this.isRenderPage) {
123
+ ref.changeDetectorRef.detectChanges();
124
+ return;
125
+ }
126
+ const comp = untracked(() => this.navigationService.activeComponent());
127
+ if (!comp)
128
+ return;
129
+ if (content !== this.lastProjectedContent) {
130
+ untracked(() => this.createComponent(comp));
131
+ return;
132
+ }
133
+ performance.mark('prism:rerender:start');
134
+ for (const [key, value] of Object.entries(inputs)) {
135
+ ref.setInput(key, value);
136
+ }
137
+ ref.changeDetectorRef.detectChanges();
138
+ performance.mark('prism:rerender:end');
139
+ performance.measure('prism:rerender', 'prism:rerender:start', 'prism:rerender:end');
140
+ });
141
+ effect(() => {
142
+ const panelId = this.panelService.activePanelId();
143
+ const allPanels = [...BUILTIN_PANELS, ...this.pluginService.panels()];
144
+ const panel = allPanels.find((p) => p.id === panelId) ?? null;
145
+ if (!panel) {
146
+ this.activeOverlay.set(null);
147
+ return;
148
+ }
149
+ if (panel.overlayComponent) {
150
+ this.activeOverlay.set(panel.overlayComponent);
151
+ return;
152
+ }
153
+ if (panel.loadOverlayComponent) {
154
+ const cached = this.overlayCache.get(panel.id);
155
+ if (cached) {
156
+ this.activeOverlay.set(cached);
157
+ return;
158
+ }
159
+ this.activeOverlay.set(null);
160
+ panel.loadOverlayComponent().then((comp) => {
161
+ this.overlayCache.set(panel.id, comp);
162
+ this.activeOverlay.set(comp);
163
+ });
164
+ return;
165
+ }
166
+ this.activeOverlay.set(null);
167
+ });
168
+ this.destroyRef.onDestroy(() => this.cleanup());
169
+ }
170
+ createComponent(comp) {
171
+ this.cleanup();
172
+ const renderPageTitle = comp.meta.showcaseConfig.renderPage;
173
+ if (renderPageTitle) {
174
+ const page = this.manifestService.manifest().pages?.find((p) => p.type === 'component' && p.title === renderPageTitle);
175
+ if (page) {
176
+ this.isRenderPage = true;
177
+ const injector = Injector.create({
178
+ providers: comp.meta.showcaseConfig.providers ?? [],
179
+ parent: this.injector,
180
+ });
181
+ this.componentRef = this.outlet().createComponent(page.component, { injector });
182
+ this.componentRef.changeDetectorRef.detectChanges();
183
+ this.rendererService.renderedElement.set(this.componentRef.location.nativeElement);
184
+ return;
185
+ }
186
+ }
187
+ this.isRenderPage = false;
188
+ const selector = comp.meta.componentMeta.selector;
189
+ const detail = { detail: { selector } };
190
+ this.rendererHooks?.onBeforeCreate?.(selector);
191
+ performance.mark('prism:render:start', detail);
192
+ const injector = Injector.create({
193
+ providers: comp.meta.showcaseConfig.providers ?? [],
194
+ parent: this.injector,
195
+ });
196
+ const content = this.rendererService.activeContent();
197
+ this.lastProjectedContent = content;
198
+ const projectableNodes = content ? parseContentToNodes(content) : undefined;
199
+ this.componentRef = this.outlet().createComponent(comp.type, { injector, projectableNodes });
200
+ for (const output of comp.meta.outputs) {
201
+ const emitter = this.componentRef.instance[output.name];
202
+ if (emitter && typeof emitter.subscribe === 'function') {
203
+ const sub = emitter
204
+ .subscribe((v) => this.eventLogService.log(output.name, v));
205
+ this.outputSubscriptions.push(sub);
206
+ }
207
+ }
208
+ for (const [key, value] of Object.entries(this.rendererService.inputValues())) {
209
+ this.componentRef.setInput(key, value);
210
+ }
211
+ this.componentRef.changeDetectorRef.detectChanges();
212
+ performance.mark('prism:render:end', detail);
213
+ performance.measure('prism:render', 'prism:render:start', 'prism:render:end');
214
+ this.rendererService.renderedElement.set(this.componentRef.location.nativeElement);
215
+ this.rendererHooks?.onAfterCreate?.(selector);
216
+ }
217
+ cleanup() {
218
+ const hadComponent = this.componentRef !== null;
219
+ this.rendererService.renderedElement.set(null);
220
+ for (const sub of this.outputSubscriptions) {
221
+ sub.unsubscribe();
222
+ }
223
+ this.outputSubscriptions = [];
224
+ this.outlet().clear();
225
+ this.componentRef = null;
226
+ this.lastProjectedContent = undefined;
227
+ if (hadComponent) {
228
+ this.rendererHooks?.onAfterDestroy?.('');
229
+ }
230
+ }
231
+ static ɵfac = function PrismRendererComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PrismRendererComponent)(); };
232
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PrismRendererComponent, selectors: [["prism-renderer"]], viewQuery: function PrismRendererComponent_Query(rf, ctx) { if (rf & 1) {
233
+ i0.ɵɵviewQuerySignal(ctx.outlet, _c0, 5, ViewContainerRef);
234
+ } if (rf & 2) {
235
+ i0.ɵɵqueryAdvance();
236
+ } }, decls: 8, vars: 6, consts: [["outlet", ""], [1, "prism-renderer"], [1, "prism-renderer__canvas"], [1, "prism-renderer__code-bar"], [1, "prism-renderer__code"], [1, "prism-renderer__toolbar"], [1, "prism-renderer__variant", 3, "prism-renderer__variant--active"], [1, "prism-renderer__variant", 3, "click"], [4, "ngComponentOutlet"], [1, "prism-renderer__code-button", 3, "click"], ["language", "xml", 3, "highlight"]], template: function PrismRendererComponent_Template(rf, ctx) { if (rf & 1) {
237
+ i0.ɵɵelementStart(0, "div", 1);
238
+ i0.ɵɵconditionalCreate(1, PrismRendererComponent_Conditional_1_Template, 1, 1);
239
+ i0.ɵɵelementStart(2, "div", 2);
240
+ i0.ɵɵelementContainer(3, null, 0);
241
+ i0.ɵɵconditionalCreate(5, PrismRendererComponent_Conditional_5_Template, 1, 1, "ng-container");
242
+ i0.ɵɵelementEnd();
243
+ i0.ɵɵconditionalCreate(6, PrismRendererComponent_Conditional_6_Template, 3, 2, "div", 3);
244
+ i0.ɵɵconditionalCreate(7, PrismRendererComponent_Conditional_7_Template, 3, 1, "div", 4);
245
+ i0.ɵɵelementEnd();
246
+ } if (rf & 2) {
247
+ let tmp_1_0;
248
+ i0.ɵɵadvance();
249
+ i0.ɵɵconditional((tmp_1_0 = ctx.navigationService.activeComponent()) ? 1 : -1, tmp_1_0);
250
+ i0.ɵɵadvance();
251
+ i0.ɵɵclassProp("prism-renderer__canvas--sr", ctx.perspectiveService.mode() === "screen-reader");
252
+ i0.ɵɵadvance(3);
253
+ i0.ɵɵconditional(ctx.activeOverlay() ? 5 : -1);
254
+ i0.ɵɵadvance();
255
+ i0.ɵɵconditional(ctx.snippet() ? 6 : -1);
256
+ i0.ɵɵadvance();
257
+ i0.ɵɵconditional(ctx.codeVisible() ? 7 : -1);
258
+ } }, dependencies: [Highlight, NgComponentOutlet], styles: [".prism-renderer[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n }\n\n .prism-renderer__toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 0 8px;\n border-bottom: 1px solid var(--prism-border);\n flex-shrink: 0;\n background: var(--prism-bg-elevated);\n }\n .prism-renderer__variant[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n font-family: var(--prism-font-sans);\n border: none;\n background: none;\n color: var(--prism-text-muted);\n cursor: pointer;\n position: relative;\n margin-bottom: -1px;\n transition: color 0.12s;\n }\n .prism-renderer__variant[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n bottom: 0; left: 0; right: 0;\n height: 2px;\n background: linear-gradient(90deg, var(--prism-primary-from), var(--prism-primary-to));\n opacity: 0;\n transition: opacity 0.12s;\n }\n .prism-renderer__variant[_ngcontent-%COMP%]:hover { color: var(--prism-text); }\n .prism-renderer__variant--active[_ngcontent-%COMP%] { color: var(--prism-primary); }\n .prism-renderer__variant--active[_ngcontent-%COMP%]::after { opacity: 1; }\n\n .prism-renderer__canvas[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n padding: 48px 40px;\n overflow: auto;\n background-color: var(--prism-bg-surface);\n background-image: radial-gradient(\n circle,\n color-mix(in srgb, var(--prism-primary) 15%, transparent) 1px,\n transparent 1px\n );\n background-size: 20px 20px;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n transition: filter 0.2s;\n }\n .prism-renderer__canvas--sr[_ngcontent-%COMP%] {\n filter: brightness(0.82) saturate(0.7);\n }\n\n .prism-renderer__code-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 0 12px;\n border-top: 1px solid var(--prism-border);\n flex-shrink: 0;\n background: var(--prism-bg-elevated);\n }\n .prism-renderer__code-button[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n padding: 6px 8px;\n font-size: 11.5px;\n font-family: var(--prism-font-mono, monospace);\n border: none;\n background: none;\n color: var(--prism-text-muted);\n cursor: pointer;\n position: relative;\n transition: color 0.12s;\n margin-bottom: -1px;\n }\n .prism-renderer__code-button[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n bottom: 0; left: 4px; right: 4px;\n height: 2px;\n background: linear-gradient(90deg, var(--prism-primary-from), var(--prism-primary-to));\n opacity: 0;\n transition: opacity 0.12s;\n }\n .prism-renderer__code-button[_ngcontent-%COMP%]:hover { color: var(--prism-text-2); }\n .prism-renderer__code-button--active[_ngcontent-%COMP%] { color: var(--prism-primary); }\n .prism-renderer__code-button--active[_ngcontent-%COMP%]::after { opacity: 1; }\n\n .prism-renderer__code[_ngcontent-%COMP%] {\n border-top: 1px solid var(--prism-border);\n overflow: auto;\n flex-shrink: 0;\n max-height: 240px;\n background: var(--prism-void);\n }\n .prism-renderer__code[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] {\n margin: 0;\n padding: 20px 24px;\n font-size: 12.5px;\n line-height: 1.65;\n font-family: var(--prism-font-mono);\n }\n .prism-renderer__code[_ngcontent-%COMP%] code[_ngcontent-%COMP%] { font-family: inherit; }\n [_nghost-%COMP%] .prism-renderer__code .hljs {\n background: transparent;\n color: var(--prism-text-2);\n }\n [_nghost-%COMP%] .prism-renderer__code .hljs-tag { color: var(--prism-text-muted); }\n [_nghost-%COMP%] .prism-renderer__code .hljs-name { color: var(--prism-primary); }\n [_nghost-%COMP%] .prism-renderer__code .hljs-attr { color: #93c5fd; }\n [_nghost-%COMP%] .prism-renderer__code .hljs-string { color: #7dd3fc; }"] });
259
+ }
260
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PrismRendererComponent, [{
261
+ type: Component,
262
+ args: [{ selector: 'prism-renderer', standalone: true, imports: [Highlight, NgComponentOutlet], template: `
263
+ <div class="prism-renderer">
264
+ @if (navigationService.activeComponent(); as comp) {
265
+ @if (comp.meta.showcaseConfig.variants?.length) {
266
+ <div class="prism-renderer__toolbar">
267
+ @for (variant of comp.meta.showcaseConfig.variants!; track variant.name; let i = $index) {
268
+ <button
269
+ class="prism-renderer__variant"
270
+ [class.prism-renderer__variant--active]="rendererService.activeVariantIndex() === i"
271
+ (click)="rendererService.selectVariant(i)"
272
+ >
273
+ {{ variant.name }}
274
+ </button>
275
+ }
276
+ </div>
277
+ }
278
+ }
279
+ <div class="prism-renderer__canvas" [class.prism-renderer__canvas--sr]="perspectiveService.mode() === 'screen-reader'">
280
+ <ng-container #outlet />
281
+ @if (activeOverlay()) {
282
+ <ng-container *ngComponentOutlet="activeOverlay()!" />
283
+ }
284
+ </div>
285
+ @if (snippet()) {
286
+ <div class="prism-renderer__code-bar">
287
+ <button
288
+ class="prism-renderer__code-button"
289
+ [class.prism-renderer__code-button--active]="codeVisible()"
290
+ (click)="codeVisible.set(!codeVisible())"
291
+ >
292
+ &lt;/&gt; Code
293
+ </button>
294
+ </div>
295
+ }
296
+ @if (codeVisible()) {
297
+ <div class="prism-renderer__code">
298
+ <pre><code [highlight]="snippet()" language="xml"></code></pre>
299
+ </div>
300
+ }
301
+ </div>
302
+ `, styles: ["\n .prism-renderer {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n }\n\n .prism-renderer__toolbar {\n display: flex;\n align-items: center;\n padding: 0 8px;\n border-bottom: 1px solid var(--prism-border);\n flex-shrink: 0;\n background: var(--prism-bg-elevated);\n }\n .prism-renderer__variant {\n padding: 8px 14px;\n font-size: 13px;\n font-family: var(--prism-font-sans);\n border: none;\n background: none;\n color: var(--prism-text-muted);\n cursor: pointer;\n position: relative;\n margin-bottom: -1px;\n transition: color 0.12s;\n }\n .prism-renderer__variant::after {\n content: '';\n position: absolute;\n bottom: 0; left: 0; right: 0;\n height: 2px;\n background: linear-gradient(90deg, var(--prism-primary-from), var(--prism-primary-to));\n opacity: 0;\n transition: opacity 0.12s;\n }\n .prism-renderer__variant:hover { color: var(--prism-text); }\n .prism-renderer__variant--active { color: var(--prism-primary); }\n .prism-renderer__variant--active::after { opacity: 1; }\n\n .prism-renderer__canvas {\n position: relative;\n flex: 1;\n padding: 48px 40px;\n overflow: auto;\n background-color: var(--prism-bg-surface);\n background-image: radial-gradient(\n circle,\n color-mix(in srgb, var(--prism-primary) 15%, transparent) 1px,\n transparent 1px\n );\n background-size: 20px 20px;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n transition: filter 0.2s;\n }\n .prism-renderer__canvas--sr {\n filter: brightness(0.82) saturate(0.7);\n }\n\n .prism-renderer__code-bar {\n display: flex;\n align-items: center;\n padding: 0 12px;\n border-top: 1px solid var(--prism-border);\n flex-shrink: 0;\n background: var(--prism-bg-elevated);\n }\n .prism-renderer__code-button {\n display: flex;\n align-items: center;\n gap: 5px;\n padding: 6px 8px;\n font-size: 11.5px;\n font-family: var(--prism-font-mono, monospace);\n border: none;\n background: none;\n color: var(--prism-text-muted);\n cursor: pointer;\n position: relative;\n transition: color 0.12s;\n margin-bottom: -1px;\n }\n .prism-renderer__code-button::after {\n content: '';\n position: absolute;\n bottom: 0; left: 4px; right: 4px;\n height: 2px;\n background: linear-gradient(90deg, var(--prism-primary-from), var(--prism-primary-to));\n opacity: 0;\n transition: opacity 0.12s;\n }\n .prism-renderer__code-button:hover { color: var(--prism-text-2); }\n .prism-renderer__code-button--active { color: var(--prism-primary); }\n .prism-renderer__code-button--active::after { opacity: 1; }\n\n .prism-renderer__code {\n border-top: 1px solid var(--prism-border);\n overflow: auto;\n flex-shrink: 0;\n max-height: 240px;\n background: var(--prism-void);\n }\n .prism-renderer__code pre {\n margin: 0;\n padding: 20px 24px;\n font-size: 12.5px;\n line-height: 1.65;\n font-family: var(--prism-font-mono);\n }\n .prism-renderer__code code { font-family: inherit; }\n :host ::ng-deep .prism-renderer__code .hljs {\n background: transparent;\n color: var(--prism-text-2);\n }\n :host ::ng-deep .prism-renderer__code .hljs-tag { color: var(--prism-text-muted); }\n :host ::ng-deep .prism-renderer__code .hljs-name { color: var(--prism-primary); }\n :host ::ng-deep .prism-renderer__code .hljs-attr { color: #93c5fd; }\n :host ::ng-deep .prism-renderer__code .hljs-string { color: #7dd3fc; }\n "] }]
303
+ }], () => [], { outlet: [{ type: i0.ViewChild, args: ['outlet', { ...{ read: ViewContainerRef }, isSignal: true }] }] }); })();
304
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PrismRendererComponent, { className: "PrismRendererComponent", filePath: "app/renderer/prism-renderer.component.ts", lineNumber: 199 }); })();
305
+ function parseContentToNodes(content) {
306
+ if (typeof content === 'string') {
307
+ return [htmlToNodes(content)];
308
+ }
309
+ const defaultNodes = content['default'] ? htmlToNodes(content['default']) : [];
310
+ const result = [defaultNodes];
311
+ for (const [selector, html] of Object.entries(content)) {
312
+ if (selector === 'default')
313
+ continue;
314
+ const wrapper = document.createElement('div');
315
+ wrapper.innerHTML = html;
316
+ const nodes = [];
317
+ for (const child of Array.from(wrapper.childNodes)) {
318
+ const el = document.createElement('div');
319
+ el.innerHTML = child.outerHTML ?? child.textContent ?? '';
320
+ const projected = el.firstChild;
321
+ if (projected && projected instanceof Element) {
322
+ applySelector(projected, selector);
323
+ nodes.push(projected);
324
+ }
325
+ else if (projected) {
326
+ const span = document.createElement('span');
327
+ applySelector(span, selector);
328
+ span.textContent = child.textContent;
329
+ nodes.push(span);
330
+ }
331
+ }
332
+ result.push(nodes);
333
+ }
334
+ return result;
335
+ }
336
+ function htmlToNodes(html) {
337
+ const wrapper = document.createElement('div');
338
+ wrapper.innerHTML = html;
339
+ return Array.from(wrapper.childNodes);
340
+ }
341
+ function applySelector(el, selector) {
342
+ const attrMatch = selector.match(/^\[([^\]=]+)]$/);
343
+ if (attrMatch) {
344
+ el.setAttribute(attrMatch[1], '');
345
+ }
346
+ }
@@ -0,0 +1,7 @@
1
+ import type { InputMeta } from '../../plugin/plugin.types.js';
2
+ import type { DirectiveHost } from '../../decorator/showcase.types.js';
3
+ export interface SnippetDirectiveOptions {
4
+ host?: string | DirectiveHost;
5
+ }
6
+ export declare function generateSnippet(selector: string, inputs: InputMeta[], values: Record<string, unknown>, explicitKeys?: ReadonlySet<string>, content?: string | Record<string, string>, directiveOptions?: SnippetDirectiveOptions): string;
7
+ //# sourceMappingURL=snippet-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippet-generator.d.ts","sourceRoot":"","sources":["../../../src/app/renderer/snippet-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;CAC/B;AAgBD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EAAE,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EAClC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,gBAAgB,CAAC,EAAE,uBAAuB,GACzC,MAAM,CA2DR"}
@@ -0,0 +1,162 @@
1
+ function pushAttribute(attributes, name, value) {
2
+ if (typeof value === 'string') {
3
+ attributes.push(`${name}="${value}"`);
4
+ }
5
+ else if (typeof value === 'boolean') {
6
+ attributes.push(`[${name}]="true"`);
7
+ }
8
+ else if (typeof value === 'number') {
9
+ attributes.push(`[${name}]="${value}"`);
10
+ }
11
+ else if (typeof value === 'object' || Array.isArray(value)) {
12
+ attributes.push(`[${name}]="yourData"`);
13
+ }
14
+ else {
15
+ attributes.push(`[${name}]="${String(value)}"`);
16
+ }
17
+ }
18
+ export function generateSnippet(selector, inputs, values, explicitKeys, content, directiveOptions) {
19
+ if (directiveOptions?.host) {
20
+ return generateDirectiveSnippet(selector, inputs, values, explicitKeys, content, directiveOptions.host);
21
+ }
22
+ const attributes = [];
23
+ const processed = new Set();
24
+ for (const input of inputs) {
25
+ processed.add(input.name);
26
+ const value = values[input.name];
27
+ if (value === undefined)
28
+ continue;
29
+ if (typeof value === 'boolean' && !value)
30
+ continue;
31
+ if (input.defaultValue !== undefined &&
32
+ value === input.defaultValue &&
33
+ !explicitKeys?.has(input.name))
34
+ continue;
35
+ pushAttribute(attributes, input.name, value);
36
+ }
37
+ for (const [name, value] of Object.entries(values)) {
38
+ if (processed.has(name))
39
+ continue;
40
+ if (value === undefined)
41
+ continue;
42
+ if (typeof value === 'boolean' && !value)
43
+ continue;
44
+ pushAttribute(attributes, name, value);
45
+ }
46
+ const contentHtml = resolveContentHtml(content);
47
+ if (!contentHtml) {
48
+ if (attributes.length === 0) {
49
+ return `<${selector} />`;
50
+ }
51
+ const singleLine = `<${selector} ${attributes.join(' ')} />`;
52
+ if (singleLine.length <= 80) {
53
+ return singleLine;
54
+ }
55
+ const indented = attributes.map((attr) => ` ${attr}`).join('\n');
56
+ return `<${selector}\n${indented} />`;
57
+ }
58
+ const attrStr = attributes.length > 0 ? ' ' + attributes.join(' ') : '';
59
+ const openTag = `<${selector}${attrStr}>`;
60
+ const closeTag = `</${selector}>`;
61
+ const singleLine = `${openTag}${contentHtml}${closeTag}`;
62
+ if (singleLine.length <= 80) {
63
+ return singleLine;
64
+ }
65
+ if (attributes.length <= 2) {
66
+ return `${openTag}\n ${contentHtml}\n${closeTag}`;
67
+ }
68
+ const indented = attributes.map((attr) => ` ${attr}`).join('\n');
69
+ return `<${selector}\n${indented}>\n ${contentHtml}\n${closeTag}`;
70
+ }
71
+ function directiveSelectorToAttr(selector) {
72
+ const match = selector.match(/^\[([^\]]+)]$/);
73
+ return match ? match[1] : selector;
74
+ }
75
+ function parseHostStringSimple(host) {
76
+ const match = host.trim().match(/^<\s*([a-zA-Z][a-zA-Z0-9-]*)((?:\s+[^>]*?)?)\s*\/?\s*>$/);
77
+ if (!match)
78
+ return { tag: 'div', attrs: '' };
79
+ return { tag: match[1], attrs: match[2].trim() };
80
+ }
81
+ function generateDirectiveSnippet(selector, inputs, values, explicitKeys, content, host) {
82
+ const directiveAttr = directiveSelectorToAttr(selector);
83
+ let tag;
84
+ const hostAttrs = [];
85
+ if (typeof host === 'string') {
86
+ const parsed = parseHostStringSimple(host);
87
+ tag = parsed.tag;
88
+ if (parsed.attrs)
89
+ hostAttrs.push(parsed.attrs);
90
+ }
91
+ else {
92
+ tag = host.selector;
93
+ if (host.inputs) {
94
+ for (const [k, v] of Object.entries(host.inputs)) {
95
+ hostAttrs.push(`${k}="${String(v)}"`);
96
+ }
97
+ }
98
+ }
99
+ const attributes = [];
100
+ const processed = new Set();
101
+ for (const input of inputs) {
102
+ processed.add(input.name);
103
+ const value = values[input.name];
104
+ if (value === undefined)
105
+ continue;
106
+ if (typeof value === 'boolean' && !value)
107
+ continue;
108
+ if (input.defaultValue !== undefined &&
109
+ value === input.defaultValue &&
110
+ !explicitKeys?.has(input.name))
111
+ continue;
112
+ pushAttribute(attributes, input.name, value);
113
+ }
114
+ for (const [name, value] of Object.entries(values)) {
115
+ if (processed.has(name))
116
+ continue;
117
+ if (value === undefined)
118
+ continue;
119
+ if (typeof value === 'boolean' && !value)
120
+ continue;
121
+ pushAttribute(attributes, name, value);
122
+ }
123
+ const allAttrs = [...hostAttrs, directiveAttr, ...attributes].join(' ');
124
+ const contentHtml = resolveContentHtml(content);
125
+ if (!contentHtml) {
126
+ if (!allAttrs)
127
+ return `<${tag} />`;
128
+ const singleLine = `<${tag} ${allAttrs} />`;
129
+ if (singleLine.length <= 80)
130
+ return singleLine;
131
+ const indented = [...hostAttrs, directiveAttr, ...attributes].map((a) => ` ${a}`).join('\n');
132
+ return `<${tag}\n${indented} />`;
133
+ }
134
+ const openTag = `<${tag} ${allAttrs}>`;
135
+ const closeTag = `</${tag}>`;
136
+ const singleLine = `${openTag}${contentHtml}${closeTag}`;
137
+ if (singleLine.length <= 80)
138
+ return singleLine;
139
+ const allAttrsList = [...hostAttrs, directiveAttr, ...attributes];
140
+ if (allAttrsList.length <= 2) {
141
+ return `${openTag}\n ${contentHtml}\n${closeTag}`;
142
+ }
143
+ const indented = allAttrsList.map((a) => ` ${a}`).join('\n');
144
+ return `<${tag}\n${indented}>\n ${contentHtml}\n${closeTag}`;
145
+ }
146
+ function resolveContentHtml(content) {
147
+ if (!content)
148
+ return undefined;
149
+ if (typeof content === 'string')
150
+ return content;
151
+ const parts = [];
152
+ for (const [selector, html] of Object.entries(content)) {
153
+ if (selector === 'default') {
154
+ parts.push(html);
155
+ }
156
+ else {
157
+ const attr = selector.replace(/^\[|\]$/g, '');
158
+ parts.push(`<ng-container ${attr}>${html}</ng-container>`);
159
+ }
160
+ }
161
+ return parts.join('\n ');
162
+ }
@@ -0,0 +1,10 @@
1
+ import type { RuntimeComponent } from '../../plugin/plugin.types.js';
2
+ import type { StyleguidePage } from '../../plugin/page.types.js';
3
+ export type NavigationItem = {
4
+ kind: 'component';
5
+ data: RuntimeComponent;
6
+ } | {
7
+ kind: 'page';
8
+ data: StyleguidePage;
9
+ };
10
+ //# sourceMappingURL=navigation-item.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-item.types.d.ts","sourceRoot":"","sources":["../../../src/app/services/navigation-item.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ import * as i0 from "@angular/core";
2
+ export interface EventLogEntry {
3
+ id: number;
4
+ timestamp: number;
5
+ name: string;
6
+ value: unknown;
7
+ }
8
+ export declare class PrismEventLogService {
9
+ readonly events: import("@angular/core").WritableSignal<EventLogEntry[]>;
10
+ private _nextId;
11
+ log(name: string, value: unknown): void;
12
+ clear(): void;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<PrismEventLogService, never>;
14
+ static ɵprov: i0.ɵɵInjectableDeclaration<PrismEventLogService>;
15
+ }
16
+ //# sourceMappingURL=prism-event-log.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prism-event-log.service.d.ts","sourceRoot":"","sources":["../../../src/app/services/prism-event-log.service.ts"],"names":[],"mappings":";AAEA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBACa,oBAAoB;IAC/B,QAAQ,CAAC,MAAM,0DAA+B;IAC9C,OAAO,CAAC,OAAO,CAAK;IAEpB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAOvC,KAAK,IAAI,IAAI;yCAXF,oBAAoB;6CAApB,oBAAoB;CAchC"}