@yinuo-ngm/server 1.0.15 → 1.0.16

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 (326) hide show
  1. package/lib/plugins/error-handler.plugin.js +5 -0
  2. package/lib/routes/api-client/hub-token.routes.js +22 -0
  3. package/lib/routes/index.js +2 -0
  4. package/lib/routes/node-version.routes.d.ts +2 -0
  5. package/lib/routes/node-version.routes.js +56 -0
  6. package/lib/routes/project.routes.js +5 -0
  7. package/lib/routes/sprite-browse.routes.js +19 -5
  8. package/lib/routes/sprite.routes.js +17 -11
  9. package/lib/routes/static-files.routes.js +16 -0
  10. package/lib/routes/task.routes.js +7 -0
  11. package/package.json +3 -3
  12. package/www/3rdpartylicenses.txt +14 -66
  13. package/www/browser/chunk-2BZRE4G7.js +1 -0
  14. package/www/browser/chunk-2X3MRS27.js +1 -0
  15. package/www/browser/chunk-4KETC6EB.js +1 -0
  16. package/www/browser/chunk-5T5KA5PG.js +1 -0
  17. package/www/browser/chunk-6CGHNKJI.js +1 -0
  18. package/www/browser/chunk-76TVIB33.js +63 -0
  19. package/www/browser/chunk-7J24TP36.js +1 -0
  20. package/www/browser/chunk-ACAZUX6C.js +1 -0
  21. package/www/browser/chunk-B6MBYCXI.js +1 -0
  22. package/www/browser/chunk-BYEU6KGP.js +2 -0
  23. package/www/browser/chunk-CZ5AZ3VW.js +1 -0
  24. package/www/browser/chunk-DW7F5PEA.js +1 -0
  25. package/www/browser/chunk-DXF7BVK5.js +1 -0
  26. package/www/browser/chunk-EEVPZGEY.js +1 -0
  27. package/www/browser/chunk-G2W3B7TJ.js +1 -0
  28. package/www/browser/chunk-GDWS2L66.js +1 -0
  29. package/www/browser/chunk-HFZLJHYR.js +1 -0
  30. package/www/browser/chunk-HGONFYP6.js +1 -0
  31. package/www/browser/chunk-HHBPULJW.js +2 -0
  32. package/www/browser/chunk-HRXCR3IN.js +1 -0
  33. package/www/browser/chunk-INL2PELS.js +1 -0
  34. package/www/browser/chunk-JHMEKUZ5.js +1 -0
  35. package/www/browser/chunk-JU3TEDBV.js +37 -0
  36. package/www/browser/chunk-JZULA5JV.js +1 -0
  37. package/www/browser/chunk-KVFR7GFV.js +20 -0
  38. package/www/browser/chunk-L5D75AMV.js +1 -0
  39. package/www/browser/chunk-L7TMCSHV.js +1 -0
  40. package/www/browser/chunk-LQ5OXSW7.js +3 -0
  41. package/www/browser/chunk-MVQTKINJ.js +1 -0
  42. package/www/browser/chunk-N4LRZJBP.js +1 -0
  43. package/www/browser/chunk-O2EYEF7J.js +1 -0
  44. package/www/browser/chunk-OMDHJIUB.js +1 -0
  45. package/www/browser/chunk-OWUAAOHW.js +2 -0
  46. package/www/browser/chunk-PIK5YPIB.js +1 -0
  47. package/www/browser/chunk-RHLQRQDK.js +9 -0
  48. package/www/browser/chunk-RW2JPJV7.js +1 -0
  49. package/www/browser/chunk-S3SJ4VVM.js +11 -0
  50. package/www/browser/chunk-SIVPP74B.js +0 -0
  51. package/www/browser/chunk-SPRWNZHF.js +15 -0
  52. package/www/browser/chunk-SQQNR223.js +1 -0
  53. package/www/browser/chunk-SVQWPHF5.js +1 -0
  54. package/www/browser/chunk-SYCNSLAW.js +4 -0
  55. package/www/browser/chunk-T3KK7ZXB.js +2 -0
  56. package/www/browser/chunk-TMX5TTV3.js +1 -0
  57. package/www/browser/chunk-UFY3FLDK.js +1 -0
  58. package/www/browser/chunk-UJOHBN2Y.js +1 -0
  59. package/www/browser/chunk-UQGCUFNM.js +1 -0
  60. package/www/browser/chunk-UXXWRMM6.js +1 -0
  61. package/www/browser/chunk-UZRJGJTD.js +2 -0
  62. package/www/browser/chunk-WD4IAQR3.js +1 -0
  63. package/www/browser/chunk-WF2QTF5L.js +1 -0
  64. package/www/browser/chunk-WI67LAOV.js +4 -0
  65. package/www/browser/chunk-WNCM6QKB.js +1 -0
  66. package/www/browser/chunk-XJ5KZQNN.js +1 -0
  67. package/www/browser/chunk-YETDFSQE.js +1 -0
  68. package/www/browser/chunk-YMTC5GZK.js +1 -0
  69. package/www/browser/chunk-YVZHJ76K.js +1 -0
  70. package/www/browser/chunk-ZNTJRLVH.js +1 -0
  71. package/www/browser/dark.css +1 -30433
  72. package/www/browser/default.css +1 -30149
  73. package/www/browser/index.html +3 -3
  74. package/www/browser/main-6LN5C22E.js +34 -0
  75. package/www/browser/scripts-U25HCVEI.js +6 -0
  76. package/www/browser/styles-ROAHD7MY.css +1 -0
  77. package/www/browser/add-widget-drawer.component.css.map +0 -7
  78. package/www/browser/advanced-editor.component.css.map +0 -7
  79. package/www/browser/api-client.component.css.map +0 -7
  80. package/www/browser/api-history-drawer.component.css.map +0 -7
  81. package/www/browser/app.css.map +0 -7
  82. package/www/browser/attachment-viewer.component.css.map +0 -7
  83. package/www/browser/auth-editor.component.css.map +0 -7
  84. package/www/browser/body-editor.component.css.map +0 -7
  85. package/www/browser/chunk-2YSUXBGC.js +0 -627
  86. package/www/browser/chunk-2YSUXBGC.js.map +0 -1
  87. package/www/browser/chunk-3G2GEOPV.js +0 -456
  88. package/www/browser/chunk-3G2GEOPV.js.map +0 -1
  89. package/www/browser/chunk-3L72DF3R.js +0 -1683
  90. package/www/browser/chunk-3L72DF3R.js.map +0 -1
  91. package/www/browser/chunk-3MCIETCQ.js +0 -8279
  92. package/www/browser/chunk-3MCIETCQ.js.map +0 -1
  93. package/www/browser/chunk-665WC4RU.js +0 -5383
  94. package/www/browser/chunk-665WC4RU.js.map +0 -1
  95. package/www/browser/chunk-6QMSEZPT.js +0 -10044
  96. package/www/browser/chunk-6QMSEZPT.js.map +0 -1
  97. package/www/browser/chunk-6TBQERYX.js +0 -280
  98. package/www/browser/chunk-6TBQERYX.js.map +0 -1
  99. package/www/browser/chunk-6UW4MRJZ.js +0 -43
  100. package/www/browser/chunk-6UW4MRJZ.js.map +0 -7
  101. package/www/browser/chunk-6XUMIL3W.js +0 -5495
  102. package/www/browser/chunk-6XUMIL3W.js.map +0 -1
  103. package/www/browser/chunk-724YOJI3.js +0 -903
  104. package/www/browser/chunk-724YOJI3.js.map +0 -1
  105. package/www/browser/chunk-766T7YES.js +0 -437
  106. package/www/browser/chunk-766T7YES.js.map +0 -1
  107. package/www/browser/chunk-7FC7DN65.js +0 -728
  108. package/www/browser/chunk-7FC7DN65.js.map +0 -1
  109. package/www/browser/chunk-APGQRYWX.js +0 -156
  110. package/www/browser/chunk-APGQRYWX.js.map +0 -7
  111. package/www/browser/chunk-AQHSGTHS.js +0 -1960
  112. package/www/browser/chunk-AQHSGTHS.js.map +0 -1
  113. package/www/browser/chunk-CTOEAJQK.js +0 -40
  114. package/www/browser/chunk-CTOEAJQK.js.map +0 -7
  115. package/www/browser/chunk-DEGQJKKZ.js +0 -409
  116. package/www/browser/chunk-DEGQJKKZ.js.map +0 -1
  117. package/www/browser/chunk-DIJX2663.js +0 -1166
  118. package/www/browser/chunk-DIJX2663.js.map +0 -1
  119. package/www/browser/chunk-E4XD4GLT.js +0 -427
  120. package/www/browser/chunk-E4XD4GLT.js.map +0 -1
  121. package/www/browser/chunk-EQOY6A3M.js +0 -212
  122. package/www/browser/chunk-EQOY6A3M.js.map +0 -1
  123. package/www/browser/chunk-ETTBRXVA.js +0 -2643
  124. package/www/browser/chunk-ETTBRXVA.js.map +0 -1
  125. package/www/browser/chunk-FLSUSPBD.js +0 -5569
  126. package/www/browser/chunk-FLSUSPBD.js.map +0 -1
  127. package/www/browser/chunk-FZNHBEAZ.js +0 -102
  128. package/www/browser/chunk-FZNHBEAZ.js.map +0 -1
  129. package/www/browser/chunk-GJC7CZIJ.js +0 -361
  130. package/www/browser/chunk-GJC7CZIJ.js.map +0 -7
  131. package/www/browser/chunk-GMCNMOTD.js +0 -844
  132. package/www/browser/chunk-GMCNMOTD.js.map +0 -7
  133. package/www/browser/chunk-H43HGCRW.js +0 -198
  134. package/www/browser/chunk-H43HGCRW.js.map +0 -7
  135. package/www/browser/chunk-J447GBHM.js +0 -160
  136. package/www/browser/chunk-J447GBHM.js.map +0 -1
  137. package/www/browser/chunk-JN3VOWP7.js +0 -384
  138. package/www/browser/chunk-JN3VOWP7.js.map +0 -1
  139. package/www/browser/chunk-KSHAGY2M.js +0 -399
  140. package/www/browser/chunk-KSHAGY2M.js.map +0 -7
  141. package/www/browser/chunk-KV72AKOD.js +0 -59
  142. package/www/browser/chunk-KV72AKOD.js.map +0 -7
  143. package/www/browser/chunk-LAVMY2SJ.js +0 -26
  144. package/www/browser/chunk-LAVMY2SJ.js.map +0 -7
  145. package/www/browser/chunk-LLRVGHG5.js +0 -73
  146. package/www/browser/chunk-LLRVGHG5.js.map +0 -7
  147. package/www/browser/chunk-LPME4AJ3.js +0 -196
  148. package/www/browser/chunk-LPME4AJ3.js.map +0 -1
  149. package/www/browser/chunk-LVPSURVU.js +0 -4615
  150. package/www/browser/chunk-LVPSURVU.js.map +0 -1
  151. package/www/browser/chunk-MMPO7QLO.js +0 -4146
  152. package/www/browser/chunk-MMPO7QLO.js.map +0 -7
  153. package/www/browser/chunk-O7LB6VFM.js +0 -1953
  154. package/www/browser/chunk-O7LB6VFM.js.map +0 -1
  155. package/www/browser/chunk-P5CWA4FO.js +0 -685
  156. package/www/browser/chunk-P5CWA4FO.js.map +0 -1
  157. package/www/browser/chunk-RBWIWNTL.js +0 -203
  158. package/www/browser/chunk-RBWIWNTL.js.map +0 -7
  159. package/www/browser/chunk-RUXJCM3V.js +0 -26199
  160. package/www/browser/chunk-RUXJCM3V.js.map +0 -1
  161. package/www/browser/chunk-S77VVYUZ.js +0 -168
  162. package/www/browser/chunk-S77VVYUZ.js.map +0 -1
  163. package/www/browser/chunk-SCXPYFOB.js +0 -4316
  164. package/www/browser/chunk-SCXPYFOB.js.map +0 -1
  165. package/www/browser/chunk-SS73S33S.js +0 -471
  166. package/www/browser/chunk-SS73S33S.js.map +0 -7
  167. package/www/browser/chunk-T6UAOWNP.js +0 -600
  168. package/www/browser/chunk-T6UAOWNP.js.map +0 -1
  169. package/www/browser/chunk-TEW4MY4J.js +0 -148
  170. package/www/browser/chunk-TEW4MY4J.js.map +0 -7
  171. package/www/browser/chunk-TVORF3SF.js +0 -82
  172. package/www/browser/chunk-TVORF3SF.js.map +0 -7
  173. package/www/browser/chunk-UAN42EUZ.js +0 -2147
  174. package/www/browser/chunk-UAN42EUZ.js.map +0 -1
  175. package/www/browser/chunk-ULOHDK7Y.js +0 -1
  176. package/www/browser/chunk-ULOHDK7Y.js.map +0 -7
  177. package/www/browser/chunk-UYJ3FVRV.js +0 -3978
  178. package/www/browser/chunk-UYJ3FVRV.js.map +0 -1
  179. package/www/browser/chunk-VXHZMSDM.js +0 -5509
  180. package/www/browser/chunk-VXHZMSDM.js.map +0 -1
  181. package/www/browser/chunk-VYNQPZQO.js +0 -281
  182. package/www/browser/chunk-VYNQPZQO.js.map +0 -1
  183. package/www/browser/chunk-W3J23PZI.js +0 -9213
  184. package/www/browser/chunk-W3J23PZI.js.map +0 -1
  185. package/www/browser/chunk-W5HGHCQT.js +0 -1642
  186. package/www/browser/chunk-W5HGHCQT.js.map +0 -7
  187. package/www/browser/chunk-XF5H7E4L.js +0 -4723
  188. package/www/browser/chunk-XF5H7E4L.js.map +0 -1
  189. package/www/browser/chunk-XNFNEBMY.js +0 -398
  190. package/www/browser/chunk-XNFNEBMY.js.map +0 -7
  191. package/www/browser/chunk-XQY5SPGI.js +0 -30811
  192. package/www/browser/chunk-XQY5SPGI.js.map +0 -1
  193. package/www/browser/chunk-Y7JBZHNK.js +0 -514
  194. package/www/browser/chunk-Y7JBZHNK.js.map +0 -1
  195. package/www/browser/chunk-YWHRP4X3.js +0 -406
  196. package/www/browser/chunk-YWHRP4X3.js.map +0 -1
  197. package/www/browser/chunk-Z7FJIV62.js +0 -95
  198. package/www/browser/chunk-Z7FJIV62.js.map +0 -7
  199. package/www/browser/chunk-ZBZHXS46.js +0 -1674
  200. package/www/browser/chunk-ZBZHXS46.js.map +0 -1
  201. package/www/browser/chunk-ZZA5NVAI.js +0 -735
  202. package/www/browser/chunk-ZZA5NVAI.js.map +0 -1
  203. package/www/browser/collection-modal.component.css.map +0 -7
  204. package/www/browser/collection-tree-item.component.css.map +0 -7
  205. package/www/browser/collection-tree.component.css.map +0 -7
  206. package/www/browser/config-change-bar-component.css.map +0 -7
  207. package/www/browser/config-item-component.css.map +0 -7
  208. package/www/browser/config-nav-component.css.map +0 -7
  209. package/www/browser/config-section-component.css.map +0 -7
  210. package/www/browser/create-summary-aside.component.css.map +0 -7
  211. package/www/browser/curl-actions.component.css.map +0 -7
  212. package/www/browser/dark.css.map +0 -7
  213. package/www/browser/dashboard-canvas.component.css.map +0 -7
  214. package/www/browser/dashboard.component.css.map +0 -7
  215. package/www/browser/default.css.map +0 -7
  216. package/www/browser/detail-item-card.component.css.map +0 -7
  217. package/www/browser/ellipsis-text.component.css.map +0 -7
  218. package/www/browser/env-modal.component.css.map +0 -7
  219. package/www/browser/env-picker.component.css.map +0 -7
  220. package/www/browser/feedback.component.css.map +0 -7
  221. package/www/browser/fs-explorer.component.css.map +0 -7
  222. package/www/browser/git-import-modal.component.css.map +0 -7
  223. package/www/browser/hub-v2-personal-token-modal.component.css.map +0 -7
  224. package/www/browser/issue-action-area.component.css.map +0 -7
  225. package/www/browser/issue-add-participants-dialog.component.css.map +0 -7
  226. package/www/browser/issue-assign-dialog.component.css.map +0 -7
  227. package/www/browser/issue-attachment-area.component.css.map +0 -7
  228. package/www/browser/issue-base-info-area.component.css.map +0 -7
  229. package/www/browser/issue-branches.component.css.map +0 -7
  230. package/www/browser/issue-close-dialog.component.css.map +0 -7
  231. package/www/browser/issue-collaborators-panel.component.css.map +0 -7
  232. package/www/browser/issue-comment-editor.component.css.map +0 -7
  233. package/www/browser/issue-create-branch-dialog.component.css.map +0 -7
  234. package/www/browser/issue-description-area.component.css.map +0 -7
  235. package/www/browser/issue-detail.component.css.map +0 -7
  236. package/www/browser/issue-resolve-dialog.component.css.map +0 -7
  237. package/www/browser/issue-start-own-branch-dialog.component.css.map +0 -7
  238. package/www/browser/issues-list-table.component.css.map +0 -7
  239. package/www/browser/issues.component.css.map +0 -7
  240. package/www/browser/kill-port-widget.component.css.map +0 -7
  241. package/www/browser/kv-table.component.css.map +0 -7
  242. package/www/browser/layout-footer.component.css.map +0 -7
  243. package/www/browser/layout-header.component.css.map +0 -7
  244. package/www/browser/layout-menu.component.css.map +0 -7
  245. package/www/browser/layout-project-nav.component.css.map +0 -7
  246. package/www/browser/layout-sidebar.component.css.map +0 -7
  247. package/www/browser/layout.component.css.map +0 -7
  248. package/www/browser/less-viewport-component.css.map +0 -7
  249. package/www/browser/main.js +0 -1872
  250. package/www/browser/main.js.map +0 -1
  251. package/www/browser/markdown-viewer.component.css.map +0 -7
  252. package/www/browser/news-feed-widget.component.css.map +0 -7
  253. package/www/browser/ng-devtool.component.css.map +0 -7
  254. package/www/browser/nginx-config-editor.component.css.map +0 -7
  255. package/www/browser/nginx-log-viewer.component.css.map +0 -7
  256. package/www/browser/nginx-secondary-logs-tab.component.css.map +0 -7
  257. package/www/browser/nginx-secondary-perf-tab.component.css.map +0 -7
  258. package/www/browser/nginx-secondary-settings-tab.component.css.map +0 -7
  259. package/www/browser/nginx-secondary-ssl-tab.component.css.map +0 -7
  260. package/www/browser/nginx-secondary-test-tab.component.css.map +0 -7
  261. package/www/browser/nginx-secondary-traffic-tab.component.css.map +0 -7
  262. package/www/browser/nginx-secondary-upstream-tab.component.css.map +0 -7
  263. package/www/browser/nginx-section-card.component.css.map +0 -7
  264. package/www/browser/nginx-server-drawer.component.css.map +0 -7
  265. package/www/browser/nginx-server-list.component.css.map +0 -7
  266. package/www/browser/nginx-stat-card.component.css.map +0 -7
  267. package/www/browser/nginx.component.css.map +0 -7
  268. package/www/browser/page-layout.component.css.map +0 -7
  269. package/www/browser/pick-workspace-modal.component.css.map +0 -7
  270. package/www/browser/polyfills.js +0 -26584
  271. package/www/browser/polyfills.js.map +0 -7
  272. package/www/browser/project-conf.component.css.map +0 -7
  273. package/www/browser/project-create-modal.component.css.map +0 -7
  274. package/www/browser/project-create.component.css.map +0 -7
  275. package/www/browser/project-deps.component.css.map +0 -7
  276. package/www/browser/project-edit-modal.component.css.map +0 -7
  277. package/www/browser/project-import.component.css.map +0 -7
  278. package/www/browser/project-item-popover.component.css.map +0 -7
  279. package/www/browser/project-item.component.css.map +0 -7
  280. package/www/browser/project-list.component.css.map +0 -7
  281. package/www/browser/projects.component.css.map +0 -7
  282. package/www/browser/quick-task-widget.component.css.map +0 -7
  283. package/www/browser/rd-action-area.component.css.map +0 -7
  284. package/www/browser/rd-advance-stage-dialog.component.css.map +0 -7
  285. package/www/browser/rd-block-dialog.component.css.map +0 -7
  286. package/www/browser/rd-create-dialog.component.css.map +0 -7
  287. package/www/browser/rd-detail.component.css.map +0 -7
  288. package/www/browser/rd-item-card.component.css.map +0 -7
  289. package/www/browser/rd-list-board.component.css.map +0 -7
  290. package/www/browser/rd-list-table.component.css.map +0 -7
  291. package/www/browser/rd.component.css.map +0 -7
  292. package/www/browser/request-collections.component.css.map +0 -7
  293. package/www/browser/request-editor.component.css.map +0 -7
  294. package/www/browser/request-list-item.component.css.map +0 -7
  295. package/www/browser/request-list.component.css.map +0 -7
  296. package/www/browser/request-tabs-bar.component.css.map +0 -7
  297. package/www/browser/request-tabs.component.css.map +0 -7
  298. package/www/browser/request-urlbar.component.css.map +0 -7
  299. package/www/browser/response-viewer.component.css.map +0 -7
  300. package/www/browser/scripts.js +0 -245
  301. package/www/browser/scripts.js.map +0 -7
  302. package/www/browser/setting.component.css.map +0 -7
  303. package/www/browser/sprite-conf-modal.component.css.map +0 -7
  304. package/www/browser/sprite-icons-panel-component.css.map +0 -7
  305. package/www/browser/sprite-images-panel-component.css.map +0 -7
  306. package/www/browser/sprite-result-tabs.component.css.map +0 -7
  307. package/www/browser/sprite-viewport-component.css.map +0 -7
  308. package/www/browser/sprite.component.css.map +0 -7
  309. package/www/browser/step-advance.component.css.map +0 -7
  310. package/www/browser/step-basic.component.css.map +0 -7
  311. package/www/browser/step-config.component.css.map +0 -7
  312. package/www/browser/step-features.component.css.map +0 -7
  313. package/www/browser/step-preset.component.css.map +0 -7
  314. package/www/browser/step-summary-aside.component.css.map +0 -7
  315. package/www/browser/styles.css +0 -258
  316. package/www/browser/styles.css.map +0 -7
  317. package/www/browser/system-log.component.css.map +0 -7
  318. package/www/browser/task-actions.component.css.map +0 -7
  319. package/www/browser/task-console.component.css.map +0 -7
  320. package/www/browser/task-header.component.css.map +0 -7
  321. package/www/browser/task-list.component.css.map +0 -7
  322. package/www/browser/tasks.component.css.map +0 -7
  323. package/www/browser/terminal-view.component.css.map +0 -7
  324. package/www/browser/welcome-widget.component.css.map +0 -7
  325. package/www/browser/widget-base.component.css.map +0 -7
  326. package/www/browser/widget-host.component.css.map +0 -7
@@ -1 +0,0 @@
1
- {"version":3,"sources":["angular:jit:style:src\\app\\pages\\configuration\\project-conf.component.less","node_modules/ng-zorro-antd/fesm2022/ng-zorro-antd-core-trans-button.mjs","node_modules/ng-zorro-antd/fesm2022/ng-zorro-antd-typography.mjs","src/app/pages/configuration/project-conf.component.ts","angular:jit:style:inline:src\\app\\pages\\configuration\\components\\config-change-bar-component.ts;CiAgICAuY2hhbmdlLWJhciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBwYWRkaW5nOiAxMHB4IDIwcHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGdhcDogMTBweDsKICAgICAgYm94LXNoYWRvdzogMCAtMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hcHAtY29tcG9uZW50LWJnKTsKICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYXBwLWJvcmRlci1jb2xvcik7CiAgICB9CiAgICAuaGludCB7IG1hcmdpbi1yaWdodDogYXV0bzsgb3BhY2l0eTogLjc1OyB9CiAgICA=","src/app/pages/configuration/components/config-change-bar-component.ts","angular:jit:style:inline:src\\app\\pages\\configuration\\components\\config-nav-component.ts;CiAgICAgICAubGlzdCB7CiAgICAgICAgaGVpZ2h0OjEwMCU7CiAgICAgICAgd2lkdGg6MTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgLnRvcGJhciB7CiAgICAgICAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMTZweDsKCiAgICAgICAgICAgIG56LWlucHV0LXdyYXBwZXIgewogICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxOHB4OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC5pdGVtcyB7CiAgICAgICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgICAgcGFkZGluZzogOHB4OwoKICAgICAgICAgICAgLml0ZW0gewogICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgICAgICAgICAgcGFkZGluZzogMTBweCAxMHB4OwogICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwoKICAgICAgICAgICAgICAgICY6aG92ZXIsCiAgICAgICAgICAgICAgICAmLmFjdGl2ZSB7CiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXBwLXByaW1hcnktMik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLnJvdyB7CiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKCiAgICAgICAgICAgICAgICAgICAgLmljb24gewogICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDQycHg7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAuaW5mbyB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICAgICAgICAgICAgICBnYXA6IDRweDsKICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKCiAgICAgICAgICAgICAgICAgICAgICAgIC5uYW1lIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAuZGVzY3JpcHRpb24gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHZhcigtLWFwcC10ZXh0LXNlY29uZGFyeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAg","src/app/pages/configuration/components/config-nav-component.ts","angular:jit:style:inline:src\\app\\pages\\configuration\\components\\config-section-component.ts;CiAgICAuc2VjdGlvbiB7IHBhZGRpbmc6IDBweDsgfSAKICAgIC5zZWN0aW9uOmxhc3QtY2hpbGQgeyBib3JkZXItYm90dG9tOiBub25lOyB9CiAgICAuc2VjdGlvbi10aXRsZSB7IG1hcmdpbjogMCAwIDEwcHg7IGZvbnQtc2l6ZTogMjRweDsgb3BhY2l0eTogMC44NTsgZm9udC13ZWlnaHQ6IDUwMDsgcGFkZGluZzogMCAxNnB4OyB9CiAgICAuZW1wdHkgeyBwYWRkaW5nOiAxMnB4IDE0cHg7fQogIA==","src/app/pages/configuration/utils/path.ts","src/app/pages/configuration/utils/map.ts","src/app/pages/configuration/utils/patch-diff.ts","angular:jit:style:inline:src\\app\\pages\\configuration\\components\\config-item-component.ts;CiAgICAuY29uZmlnLWl0ZW0gewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgJjpob3ZlcnsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hcHAtcHJpbWFyeS0yKTsKICAgICAgfQogICAgICAubWV0YSB7CiAgICAgICAgLmxhYmVsIHsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBvcGFjaXR5OiAwLjc1OwogICAgICAgIH0KICAgICAgICAuZGVzYyB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgICBvcGFjaXR5OiAwLjU1OwogICAgICAgIH0KICAgICAgfQogICAgICAuY29udHJvbCB7CiAgICAgICAgbWluLXdpZHRoOiAyMDBweDsKICAgICAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgICAgIHdpZHRoOiA2MCU7CiAgICAgICAgaW5wdXRbbnotaW5wdXRdLG56LXNlbGVjdCB7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB9CiAgICAgICAgLmt2IHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgICB3aWR0aDoxMDAlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAg","src/app/pages/configuration/components/config-item-component.ts","src/app/pages/configuration/components/config-section-component.ts","src/app/pages/configuration/services/conf-api.service.ts","src/app/pages/configuration/configuration.routing.ts","src/app/pages/configuration/configuration.module.ts"],"sourcesContent":["/* src/app/pages/configuration/project-conf.component.less */\n.panel {\n border-radius: 10px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n display: flex;\n}\n.panel app-config-nav-component {\n flex: 0 0 300px;\n}\n.panel .content {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n padding: 8px 16px;\n}\n.panel .content app-config-section-component {\n flex: 1 1 auto;\n overflow: hidden;\n}\n.panel .content app-config-change-bar-component {\n flex: 0 0 auto;\n position: sticky;\n bottom: 0;\n}\n/*# sourceMappingURL=project-conf.component.css.map */\n","import * as i0 from '@angular/core';\nimport { Directive, NgModule } from '@angular/core';\n\n/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\nclass NzTransButtonDirective {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTransButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.0\", type: NzTransButtonDirective, isStandalone: true, selector: \"button[nz-trans-button]\", host: { properties: { \"style.border\": \"\\\"0\\\"\", \"style.background\": \"\\\"transparent\\\"\", \"style.padding\": \"\\\"0\\\"\", \"style.line-height\": \"\\\"inherit\\\"\" } }, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTransButtonDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[nz-trans-button]',\n host: {\n '[style.border]': '\"0\"',\n '[style.background]': '\"transparent\"',\n '[style.padding]': '\"0\"',\n '[style.line-height]': '\"inherit\"'\n }\n }]\n }] });\n\n/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\nclass NzTransButtonModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTransButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTransButtonModule, imports: [NzTransButtonDirective], exports: [NzTransButtonDirective] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTransButtonModule });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTransButtonModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [NzTransButtonDirective],\n exports: [NzTransButtonDirective]\n }]\n }] });\n\n/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { NzTransButtonDirective, NzTransButtonModule };\n\n","import * as i0 from '@angular/core';\nimport { inject, ChangeDetectorRef, DestroyRef, ElementRef, EventEmitter, Output, Input, ViewEncapsulation, ChangeDetectionStrategy, Component, NgZone, Injector, afterNextRender, ViewChild, ViewContainerRef, Renderer2, DOCUMENT, numberAttribute, booleanAttribute, NgModule } from '@angular/core';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport * as i4 from 'ng-zorro-antd/core/outlet';\nimport { NzOutletModule } from 'ng-zorro-antd/core/outlet';\nimport * as i2 from 'ng-zorro-antd/core/trans-button';\nimport { NzTransButtonModule } from 'ng-zorro-antd/core/trans-button';\nimport { NzI18nService } from 'ng-zorro-antd/i18n';\nimport * as i3 from 'ng-zorro-antd/icon';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport * as i1 from 'ng-zorro-antd/tooltip';\nimport { NzTooltipModule } from 'ng-zorro-antd/tooltip';\nimport { ESCAPE, ENTER } from '@angular/cdk/keycodes';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { switchMap, first } from 'rxjs/operators';\nimport { fromEventOutsideAngular, isStyleSupport, measure } from 'ng-zorro-antd/core/util';\nimport * as i1$1 from 'ng-zorro-antd/input';\nimport { NzInputModule, NzAutosizeDirective } from 'ng-zorro-antd/input';\nimport { __esDecorate, __runInitializers } from 'tslib';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { Platform } from '@angular/cdk/platform';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { WithConfig, NzConfigService } from 'ng-zorro-antd/core/config';\nimport { cancelAnimationFrame, requestAnimationFrame } from 'ng-zorro-antd/core/polyfill';\nimport { NzResizeService } from 'ng-zorro-antd/core/services';\n\n/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\nclass NzTextCopyComponent {\n cdr = inject(ChangeDetectorRef);\n clipboard = inject(Clipboard);\n i18n = inject(NzI18nService);\n destroyRef = inject(DestroyRef);\n copied = false;\n copyId;\n locale;\n nativeElement = inject(ElementRef).nativeElement;\n copyTooltip = null;\n copedTooltip = null;\n copyIcon = 'copy';\n copedIcon = 'check';\n text;\n tooltips;\n icons = ['copy', 'check'];\n textCopy = new EventEmitter();\n constructor() {\n this.destroyRef.onDestroy(() => {\n clearTimeout(this.copyId);\n });\n }\n ngOnInit() {\n this.i18n.localeChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.locale = this.i18n.getLocaleData('Text');\n this.updateTooltips();\n this.cdr.markForCheck();\n });\n }\n ngOnChanges(changes) {\n const { tooltips, icons } = changes;\n if (tooltips) {\n this.updateTooltips();\n }\n if (icons) {\n this.updateIcons();\n }\n }\n onClick() {\n if (this.copied) {\n return;\n }\n this.copied = true;\n this.cdr.detectChanges();\n const text = this.text;\n this.textCopy.emit(text);\n this.clipboard.copy(text);\n this.onCopied();\n }\n onCopied() {\n clearTimeout(this.copyId);\n this.copyId = setTimeout(() => {\n this.copied = false;\n this.cdr.detectChanges();\n }, 3000);\n }\n updateTooltips() {\n if (this.tooltips === null) {\n this.copedTooltip = null;\n this.copyTooltip = null;\n }\n else if (Array.isArray(this.tooltips)) {\n const [copyTooltip, copedTooltip] = this.tooltips;\n this.copyTooltip = copyTooltip || this.locale?.copy;\n this.copedTooltip = copedTooltip || this.locale?.copied;\n }\n else {\n this.copyTooltip = this.locale?.copy;\n this.copedTooltip = this.locale?.copied;\n }\n this.cdr.markForCheck();\n }\n updateIcons() {\n const [copyIcon, copedIcon] = this.icons;\n this.copyIcon = copyIcon;\n this.copedIcon = copedIcon;\n this.cdr.markForCheck();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTextCopyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.0\", type: NzTextCopyComponent, isStandalone: true, selector: \"nz-text-copy\", inputs: { text: \"text\", tooltips: \"tooltips\", icons: \"icons\" }, outputs: { textCopy: \"textCopy\" }, exportAs: [\"nzTextCopy\"], usesOnChanges: true, ngImport: i0, template: `\n <button\n type=\"button\"\n nz-tooltip\n nz-trans-button\n [nzTooltipTitle]=\"copied ? copedTooltip : copyTooltip\"\n class=\"ant-typography-copy\"\n [class.ant-typography-copy-success]=\"copied\"\n (click)=\"onClick()\"\n >\n <ng-container *nzStringTemplateOutlet=\"copied ? copedIcon : copyIcon; let icon\">\n <nz-icon [nzType]=\"icon\" />\n </ng-container>\n </button>\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: NzTooltipModule }, { kind: \"directive\", type: i1.NzTooltipDirective, selector: \"[nz-tooltip]\", inputs: [\"nzTooltipTitle\", \"nzTooltipTitleContext\", \"nz-tooltip\", \"nzTooltipTrigger\", \"nzTooltipPlacement\", \"nzTooltipOrigin\", \"nzTooltipVisible\", \"nzTooltipMouseEnterDelay\", \"nzTooltipMouseLeaveDelay\", \"nzTooltipOverlayClassName\", \"nzTooltipOverlayStyle\", \"nzTooltipArrowPointAtCenter\", \"cdkConnectedOverlayPush\", \"nzTooltipColor\"], outputs: [\"nzTooltipVisibleChange\"], exportAs: [\"nzTooltip\"] }, { kind: \"ngmodule\", type: NzTransButtonModule }, { kind: \"directive\", type: i2.NzTransButtonDirective, selector: \"button[nz-trans-button]\" }, { kind: \"ngmodule\", type: NzIconModule }, { kind: \"directive\", type: i3.NzIconDirective, selector: \"nz-icon,[nz-icon]\", inputs: [\"nzSpin\", \"nzRotate\", \"nzType\", \"nzTheme\", \"nzTwotoneColor\", \"nzIconfont\"], exportAs: [\"nzIcon\"] }, { kind: \"ngmodule\", type: NzOutletModule }, { kind: \"directive\", type: i4.NzStringTemplateOutletDirective, selector: \"[nzStringTemplateOutlet]\", inputs: [\"nzStringTemplateOutletContext\", \"nzStringTemplateOutlet\"], exportAs: [\"nzStringTemplateOutlet\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTextCopyComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'nz-text-copy',\n exportAs: 'nzTextCopy',\n template: `\n <button\n type=\"button\"\n nz-tooltip\n nz-trans-button\n [nzTooltipTitle]=\"copied ? copedTooltip : copyTooltip\"\n class=\"ant-typography-copy\"\n [class.ant-typography-copy-success]=\"copied\"\n (click)=\"onClick()\"\n >\n <ng-container *nzStringTemplateOutlet=\"copied ? copedIcon : copyIcon; let icon\">\n <nz-icon [nzType]=\"icon\" />\n </ng-container>\n </button>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [NzTooltipModule, NzTransButtonModule, NzIconModule, NzOutletModule]\n }]\n }], ctorParameters: () => [], propDecorators: { text: [{\n type: Input\n }], tooltips: [{\n type: Input\n }], icons: [{\n type: Input\n }], textCopy: [{\n type: Output\n }] } });\n\n/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\nclass NzTextEditComponent {\n ngZone = inject(NgZone);\n cdr = inject(ChangeDetectorRef);\n i18n = inject(NzI18nService);\n destroyRef = inject(DestroyRef);\n editing = false;\n locale;\n text;\n icon = 'edit';\n tooltip;\n startEditing = new EventEmitter();\n endEditing = new EventEmitter(true);\n set textarea(textarea) {\n this.textarea$.next(textarea);\n }\n autosizeDirective;\n beforeText;\n currentText;\n nativeElement = inject(ElementRef).nativeElement;\n // We could've saved the textarea within some private property (e.g. `_textarea`) and have a getter,\n // but having subject makes the code more reactive and cancellable (e.g., event listeners will be\n // automatically removed and re-added through the `switchMap` below).\n textarea$ = new BehaviorSubject(null);\n injector = inject(Injector);\n ngOnInit() {\n this.i18n.localeChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.locale = this.i18n.getLocaleData('Text');\n this.cdr.markForCheck();\n });\n this.textarea$\n .pipe(switchMap(textarea => fromEventOutsideAngular(textarea?.nativeElement, 'keydown')), takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n // Caretaker note: adding modifier at the end (for instance `(keydown.esc)`) will tell Angular to add\n // an event listener through the `KeyEventsPlugin`, which always runs `ngZone.runGuarded()` internally.\n // We're interested only in escape and enter keyboard buttons, otherwise Angular will run change detection\n // on any `keydown` event.\n if (event.keyCode !== ESCAPE && event.keyCode !== ENTER) {\n return;\n }\n this.ngZone.run(() => {\n if (event.keyCode === ESCAPE) {\n this.onCancel();\n }\n else {\n this.onEnter(event);\n }\n this.cdr.markForCheck();\n });\n });\n this.textarea$\n .pipe(switchMap(textarea => fromEventOutsideAngular(textarea?.nativeElement, 'input')), takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n this.currentText = event.target.value;\n });\n }\n onClick() {\n this.beforeText = this.text;\n this.currentText = this.beforeText;\n this.editing = true;\n this.startEditing.emit();\n this.focusAndSetValue();\n }\n confirm() {\n this.editing = false;\n this.endEditing.emit(this.currentText);\n }\n onEnter(event) {\n event.stopPropagation();\n event.preventDefault();\n this.confirm();\n }\n onCancel() {\n this.currentText = this.beforeText;\n this.confirm();\n }\n focusAndSetValue() {\n const { injector } = this;\n afterNextRender(() => {\n this.textarea$\n .pipe(\n // It may still not be available, so we need to wait until view queries\n // are executed during the change detection. It's safer to wait until\n // the query runs, and the textarea is set on the behavior subject.\n first((textarea) => textarea != null), takeUntilDestroyed(this.destroyRef))\n .subscribe(textarea => {\n textarea.nativeElement.focus();\n textarea.nativeElement.value = this.currentText || '';\n this.autosizeDirective.resizeToFitContent();\n this.cdr.markForCheck();\n });\n }, { injector });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTextEditComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.0\", type: NzTextEditComponent, isStandalone: true, selector: \"nz-text-edit\", inputs: { text: \"text\", icon: \"icon\", tooltip: \"tooltip\" }, outputs: { startEditing: \"startEditing\", endEditing: \"endEditing\" }, viewQueries: [{ propertyName: \"textarea\", first: true, predicate: [\"textarea\"], descendants: true }, { propertyName: \"autosizeDirective\", first: true, predicate: NzAutosizeDirective, descendants: true }], exportAs: [\"nzTextEdit\"], ngImport: i0, template: `\n @if (editing) {\n <textarea #textarea nz-input nzAutosize (blur)=\"confirm()\"></textarea>\n <button nz-trans-button class=\"ant-typography-edit-content-confirm\" (click)=\"confirm()\">\n <nz-icon nzType=\"enter\" />\n </button>\n } @else {\n <button\n nz-tooltip\n nz-trans-button\n class=\"ant-typography-edit\"\n [nzTooltipTitle]=\"tooltip === null ? null : tooltip || locale?.edit\"\n (click)=\"onClick()\"\n >\n <ng-container *nzStringTemplateOutlet=\"icon; let icon\">\n <nz-icon [nzType]=\"icon\" />\n </ng-container>\n </button>\n }\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: NzInputModule }, { kind: \"directive\", type: i1$1.NzInputDirective, selector: \"input[nz-input],textarea[nz-input]\", inputs: [\"nzBorderless\", \"nzVariant\", \"nzSize\", \"nzStepperless\", \"nzStatus\", \"disabled\", \"readonly\"], exportAs: [\"nzInput\"] }, { kind: \"directive\", type: i1$1.NzAutosizeDirective, selector: \"textarea[nzAutosize]\", inputs: [\"nzAutosize\"], exportAs: [\"nzAutosize\"] }, { kind: \"ngmodule\", type: NzTransButtonModule }, { kind: \"directive\", type: i2.NzTransButtonDirective, selector: \"button[nz-trans-button]\" }, { kind: \"ngmodule\", type: NzIconModule }, { kind: \"directive\", type: i3.NzIconDirective, selector: \"nz-icon,[nz-icon]\", inputs: [\"nzSpin\", \"nzRotate\", \"nzType\", \"nzTheme\", \"nzTwotoneColor\", \"nzIconfont\"], exportAs: [\"nzIcon\"] }, { kind: \"ngmodule\", type: NzTooltipModule }, { kind: \"directive\", type: i1.NzTooltipDirective, selector: \"[nz-tooltip]\", inputs: [\"nzTooltipTitle\", \"nzTooltipTitleContext\", \"nz-tooltip\", \"nzTooltipTrigger\", \"nzTooltipPlacement\", \"nzTooltipOrigin\", \"nzTooltipVisible\", \"nzTooltipMouseEnterDelay\", \"nzTooltipMouseLeaveDelay\", \"nzTooltipOverlayClassName\", \"nzTooltipOverlayStyle\", \"nzTooltipArrowPointAtCenter\", \"cdkConnectedOverlayPush\", \"nzTooltipColor\"], outputs: [\"nzTooltipVisibleChange\"], exportAs: [\"nzTooltip\"] }, { kind: \"ngmodule\", type: NzOutletModule }, { kind: \"directive\", type: i4.NzStringTemplateOutletDirective, selector: \"[nzStringTemplateOutlet]\", inputs: [\"nzStringTemplateOutletContext\", \"nzStringTemplateOutlet\"], exportAs: [\"nzStringTemplateOutlet\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTextEditComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'nz-text-edit',\n exportAs: 'nzTextEdit',\n template: `\n @if (editing) {\n <textarea #textarea nz-input nzAutosize (blur)=\"confirm()\"></textarea>\n <button nz-trans-button class=\"ant-typography-edit-content-confirm\" (click)=\"confirm()\">\n <nz-icon nzType=\"enter\" />\n </button>\n } @else {\n <button\n nz-tooltip\n nz-trans-button\n class=\"ant-typography-edit\"\n [nzTooltipTitle]=\"tooltip === null ? null : tooltip || locale?.edit\"\n (click)=\"onClick()\"\n >\n <ng-container *nzStringTemplateOutlet=\"icon; let icon\">\n <nz-icon [nzType]=\"icon\" />\n </ng-container>\n </button>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [NzInputModule, NzTransButtonModule, NzIconModule, NzTooltipModule, NzOutletModule]\n }]\n }], propDecorators: { text: [{\n type: Input\n }], icon: [{\n type: Input\n }], tooltip: [{\n type: Input\n }], startEditing: [{\n type: Output\n }], endEditing: [{\n type: Output\n }], textarea: [{\n type: ViewChild,\n args: ['textarea', { static: false }]\n }], autosizeDirective: [{\n type: ViewChild,\n args: [NzAutosizeDirective, { static: false }]\n }] } });\n\nconst NZ_CONFIG_MODULE_NAME = 'typography';\nconst EXPAND_ELEMENT_CLASSNAME = 'ant-typography-expand';\nlet NzTypographyComponent = (() => {\n let _nzCopyTooltips_decorators;\n let _nzCopyTooltips_initializers = [];\n let _nzCopyTooltips_extraInitializers = [];\n let _nzCopyIcons_decorators;\n let _nzCopyIcons_initializers = [];\n let _nzCopyIcons_extraInitializers = [];\n let _nzEditTooltip_decorators;\n let _nzEditTooltip_initializers = [];\n let _nzEditTooltip_extraInitializers = [];\n let _nzEditIcon_decorators;\n let _nzEditIcon_initializers = [];\n let _nzEditIcon_extraInitializers = [];\n let _nzEllipsisRows_decorators;\n let _nzEllipsisRows_initializers = [];\n let _nzEllipsisRows_extraInitializers = [];\n return class NzTypographyComponent {\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(null) : void 0;\n _nzCopyTooltips_decorators = [WithConfig()];\n _nzCopyIcons_decorators = [WithConfig()];\n _nzEditTooltip_decorators = [WithConfig()];\n _nzEditIcon_decorators = [WithConfig()];\n _nzEllipsisRows_decorators = [WithConfig()];\n __esDecorate(null, null, _nzCopyTooltips_decorators, { kind: \"field\", name: \"nzCopyTooltips\", static: false, private: false, access: { has: obj => \"nzCopyTooltips\" in obj, get: obj => obj.nzCopyTooltips, set: (obj, value) => { obj.nzCopyTooltips = value; } }, metadata: _metadata }, _nzCopyTooltips_initializers, _nzCopyTooltips_extraInitializers);\n __esDecorate(null, null, _nzCopyIcons_decorators, { kind: \"field\", name: \"nzCopyIcons\", static: false, private: false, access: { has: obj => \"nzCopyIcons\" in obj, get: obj => obj.nzCopyIcons, set: (obj, value) => { obj.nzCopyIcons = value; } }, metadata: _metadata }, _nzCopyIcons_initializers, _nzCopyIcons_extraInitializers);\n __esDecorate(null, null, _nzEditTooltip_decorators, { kind: \"field\", name: \"nzEditTooltip\", static: false, private: false, access: { has: obj => \"nzEditTooltip\" in obj, get: obj => obj.nzEditTooltip, set: (obj, value) => { obj.nzEditTooltip = value; } }, metadata: _metadata }, _nzEditTooltip_initializers, _nzEditTooltip_extraInitializers);\n __esDecorate(null, null, _nzEditIcon_decorators, { kind: \"field\", name: \"nzEditIcon\", static: false, private: false, access: { has: obj => \"nzEditIcon\" in obj, get: obj => obj.nzEditIcon, set: (obj, value) => { obj.nzEditIcon = value; } }, metadata: _metadata }, _nzEditIcon_initializers, _nzEditIcon_extraInitializers);\n __esDecorate(null, null, _nzEllipsisRows_decorators, { kind: \"field\", name: \"nzEllipsisRows\", static: false, private: false, access: { has: obj => \"nzEllipsisRows\" in obj, get: obj => obj.nzEllipsisRows, set: (obj, value) => { obj.nzEllipsisRows = value; } }, metadata: _metadata }, _nzEllipsisRows_initializers, _nzEllipsisRows_extraInitializers);\n if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n }\n _nzModuleName = NZ_CONFIG_MODULE_NAME;\n nzConfigService = inject(NzConfigService);\n el = inject((ElementRef)).nativeElement;\n cdr = inject(ChangeDetectorRef);\n viewContainerRef = inject(ViewContainerRef);\n renderer = inject(Renderer2);\n platform = inject(Platform);\n i18n = inject(NzI18nService);\n resizeService = inject(NzResizeService);\n directionality = inject(Directionality);\n document = inject(DOCUMENT);\n destroyRef = inject(DestroyRef);\n nzCopyable = false;\n nzEditable = false;\n nzDisabled = false;\n nzExpandable = false;\n nzEllipsis = false;\n nzCopyTooltips = __runInitializers(this, _nzCopyTooltips_initializers, undefined);\n nzCopyIcons = (__runInitializers(this, _nzCopyTooltips_extraInitializers), __runInitializers(this, _nzCopyIcons_initializers, ['copy', 'check']));\n nzEditTooltip = (__runInitializers(this, _nzCopyIcons_extraInitializers), __runInitializers(this, _nzEditTooltip_initializers, undefined));\n nzEditIcon = (__runInitializers(this, _nzEditTooltip_extraInitializers), __runInitializers(this, _nzEditIcon_initializers, 'edit'));\n nzContent = __runInitializers(this, _nzEditIcon_extraInitializers);\n nzEllipsisRows = __runInitializers(this, _nzEllipsisRows_initializers, 1);\n nzType = __runInitializers(this, _nzEllipsisRows_extraInitializers);\n nzCopyText;\n nzSuffix;\n nzContentChange = new EventEmitter();\n nzCopy = new EventEmitter();\n nzExpandChange = new EventEmitter();\n // This is not a two-way binding output with {@link nzEllipsis}\n nzOnEllipsis = new EventEmitter();\n textEditRef;\n textCopyRef;\n ellipsisContainer;\n expandableBtn;\n contentTemplate;\n locale;\n expandableBtnElementCache = null;\n editing = false;\n ellipsisText;\n cssEllipsis = false;\n isEllipsis = true;\n expanded = false;\n ellipsisStr = '...';\n dir = 'ltr';\n get hasEllipsisObservers() {\n return this.nzOnEllipsis.observers.length > 0;\n }\n get canCssEllipsis() {\n return this.nzEllipsis && this.cssEllipsis && !this.expanded && !this.hasEllipsisObservers;\n }\n get hasOperationsWithEllipsis() {\n return (this.nzCopyable || this.nzEditable || this.nzExpandable) && this.nzEllipsis;\n }\n viewInit = false;\n requestId = -1;\n windowResizeSubscription = Subscription.EMPTY;\n get copyText() {\n return (typeof this.nzCopyText === 'string' ? this.nzCopyText : this.nzContent);\n }\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.expandableBtnElementCache = null;\n this.windowResizeSubscription.unsubscribe();\n });\n }\n onTextCopy(text) {\n this.nzCopy.emit(text);\n }\n onStartEditing() {\n this.editing = true;\n }\n onEndEditing(text) {\n this.editing = false;\n this.nzContentChange.emit(text);\n if (this.nzContent === text) {\n this.renderOnNextFrame();\n }\n this.cdr.markForCheck();\n }\n onExpand() {\n this.isEllipsis = false;\n this.expanded = true;\n this.nzExpandChange.emit();\n this.nzOnEllipsis.emit(false);\n }\n canUseCSSEllipsis() {\n if (this.nzEditable || this.nzCopyable || this.nzExpandable || this.nzSuffix) {\n return false;\n }\n // make sure {@link nzOnEllipsis} works, will force use JS to calculations\n if (this.hasEllipsisObservers) {\n return false;\n }\n if (this.nzEllipsisRows === 1) {\n return isStyleSupport('textOverflow');\n }\n else {\n return isStyleSupport('webkitLineClamp');\n }\n }\n renderOnNextFrame() {\n cancelAnimationFrame(this.requestId);\n if (!this.viewInit || !this.nzEllipsis || this.nzEllipsisRows < 0 || this.expanded || !this.platform.isBrowser) {\n return;\n }\n this.requestId = requestAnimationFrame(() => this.syncEllipsis());\n }\n getOriginContentViewRef() {\n const viewRef = this.viewContainerRef.createEmbeddedView(this.contentTemplate, {\n content: this.nzContent\n });\n viewRef.detectChanges();\n return {\n viewRef,\n removeView: () => this.viewContainerRef.remove(this.viewContainerRef.indexOf(viewRef))\n };\n }\n syncEllipsis() {\n if (this.cssEllipsis) {\n return;\n }\n const { viewRef, removeView } = this.getOriginContentViewRef();\n const fixedNodes = [this.textCopyRef, this.textEditRef]\n .filter(e => e && e.nativeElement)\n .map(e => e.nativeElement);\n const expandableBtnElement = this.getExpandableBtnElement();\n if (expandableBtnElement) {\n fixedNodes.push(expandableBtnElement);\n }\n const { contentNodes, text, ellipsis } = measure(this.el, this.nzEllipsisRows, viewRef.rootNodes, fixedNodes, this.ellipsisStr, this.nzSuffix);\n removeView();\n this.ellipsisText = text;\n if (ellipsis !== this.isEllipsis) {\n this.isEllipsis = ellipsis;\n this.nzOnEllipsis.emit(ellipsis);\n }\n const ellipsisContainerNativeElement = this.ellipsisContainer.nativeElement;\n while (ellipsisContainerNativeElement.firstChild) {\n this.renderer.removeChild(ellipsisContainerNativeElement, ellipsisContainerNativeElement.firstChild);\n }\n contentNodes.forEach(n => {\n this.renderer.appendChild(ellipsisContainerNativeElement, n.cloneNode(true));\n });\n this.cdr.markForCheck();\n }\n // Need to create the element for calculation size before view init\n getExpandableBtnElement() {\n if (this.nzExpandable) {\n const expandText = this.locale ? this.locale.expand : '';\n const cache = this.expandableBtnElementCache;\n if (!cache || cache.innerText === expandText) {\n const el = this.document.createElement('a');\n el.className = EXPAND_ELEMENT_CLASSNAME;\n el.innerText = expandText;\n this.expandableBtnElementCache = el;\n }\n return this.expandableBtnElementCache;\n }\n else {\n this.expandableBtnElementCache = null;\n return null;\n }\n }\n renderAndSubscribeWindowResize() {\n if (this.platform.isBrowser) {\n this.windowResizeSubscription.unsubscribe();\n this.cssEllipsis = this.canUseCSSEllipsis();\n this.renderOnNextFrame();\n this.windowResizeSubscription = this.resizeService\n .connect()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.renderOnNextFrame());\n }\n }\n ngOnInit() {\n this.i18n.localeChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.locale = this.i18n.getLocaleData('Text');\n this.cdr.markForCheck();\n });\n this.directionality.change?.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(direction => {\n this.dir = direction;\n this.cdr.detectChanges();\n });\n this.dir = this.directionality.value;\n }\n ngAfterViewInit() {\n this.viewInit = true;\n this.renderAndSubscribeWindowResize();\n }\n ngOnChanges(changes) {\n const { nzCopyable, nzEditable, nzExpandable, nzEllipsis, nzContent, nzEllipsisRows, nzSuffix } = changes;\n if (nzCopyable || nzEditable || nzExpandable || nzEllipsis || nzContent || nzEllipsisRows || nzSuffix) {\n if (this.nzEllipsis) {\n if (this.expanded) {\n this.windowResizeSubscription.unsubscribe();\n }\n else {\n this.renderAndSubscribeWindowResize();\n }\n }\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTypographyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.0\", type: NzTypographyComponent, isStandalone: true, selector: \"\\n nz-typography,\\n [nz-typography],\\n p[nz-paragraph],\\n span[nz-text],\\n h1[nz-title], h2[nz-title], h3[nz-title], h4[nz-title]\\n \", inputs: { nzCopyable: [\"nzCopyable\", \"nzCopyable\", booleanAttribute], nzEditable: [\"nzEditable\", \"nzEditable\", booleanAttribute], nzDisabled: [\"nzDisabled\", \"nzDisabled\", booleanAttribute], nzExpandable: [\"nzExpandable\", \"nzExpandable\", booleanAttribute], nzEllipsis: [\"nzEllipsis\", \"nzEllipsis\", booleanAttribute], nzCopyTooltips: \"nzCopyTooltips\", nzCopyIcons: \"nzCopyIcons\", nzEditTooltip: \"nzEditTooltip\", nzEditIcon: \"nzEditIcon\", nzContent: \"nzContent\", nzEllipsisRows: [\"nzEllipsisRows\", \"nzEllipsisRows\", numberAttribute], nzType: \"nzType\", nzCopyText: \"nzCopyText\", nzSuffix: \"nzSuffix\" }, outputs: { nzContentChange: \"nzContentChange\", nzCopy: \"nzCopy\", nzExpandChange: \"nzExpandChange\", nzOnEllipsis: \"nzOnEllipsis\" }, host: { properties: { \"class.ant-typography\": \"!editing\", \"class.ant-typography-rtl\": \"dir === \\\"rtl\\\"\", \"class.ant-typography-edit-content\": \"editing\", \"class.ant-typography-secondary\": \"nzType === \\\"secondary\\\"\", \"class.ant-typography-warning\": \"nzType === \\\"warning\\\"\", \"class.ant-typography-danger\": \"nzType === \\\"danger\\\"\", \"class.ant-typography-success\": \"nzType === \\\"success\\\"\", \"class.ant-typography-disabled\": \"nzDisabled\", \"class.ant-typography-ellipsis\": \"nzEllipsis && !expanded\", \"class.ant-typography-single-line\": \"nzEllipsis && nzEllipsisRows === 1\", \"class.ant-typography-ellipsis-single-line\": \"canCssEllipsis && nzEllipsisRows === 1\", \"class.ant-typography-ellipsis-multiple-line\": \"canCssEllipsis && nzEllipsisRows > 1\", \"style.-webkit-line-clamp\": \"(canCssEllipsis && nzEllipsisRows > 1) ? nzEllipsisRows : null\" } }, viewQueries: [{ propertyName: \"textEditRef\", first: true, predicate: NzTextEditComponent, descendants: true }, { propertyName: \"textCopyRef\", first: true, predicate: NzTextCopyComponent, descendants: true }, { propertyName: \"ellipsisContainer\", first: true, predicate: [\"ellipsisContainer\"], descendants: true }, { propertyName: \"expandableBtn\", first: true, predicate: [\"expandable\"], descendants: true }, { propertyName: \"contentTemplate\", first: true, predicate: [\"contentTemplate\"], descendants: true }], exportAs: [\"nzTypography\"], usesOnChanges: true, ngImport: i0, template: `\n <ng-template #contentTemplate let-content=\"content\">\n @if (!content) {\n <ng-content></ng-content>\n }\n {{ content }}\n </ng-template>\n @if (!editing) {\n @if (\n expanded ||\n (!hasOperationsWithEllipsis && nzEllipsisRows === 1 && !hasEllipsisObservers) ||\n canCssEllipsis ||\n (nzSuffix && expanded)\n ) {\n <ng-template\n [ngTemplateOutlet]=\"contentTemplate\"\n [ngTemplateOutletContext]=\"{ content: nzContent }\"\n ></ng-template>\n @if (nzSuffix) {\n {{ nzSuffix }}\n }\n } @else {\n <span #ellipsisContainer></span>\n @if (isEllipsis) {\n {{ ellipsisStr }}\n }\n @if (nzSuffix) {\n {{ nzSuffix }}\n }\n @if (nzExpandable && isEllipsis) {\n <a #expandable class=\"ant-typography-expand\" (click)=\"onExpand()\">\n {{ locale?.expand }}\n </a>\n }\n }\n }\n\n @if (nzEditable) {\n <nz-text-edit\n [text]=\"nzContent\"\n [icon]=\"nzEditIcon\"\n [tooltip]=\"nzEditTooltip\"\n (endEditing)=\"onEndEditing($event)\"\n (startEditing)=\"onStartEditing()\"\n ></nz-text-edit>\n }\n\n @if (nzCopyable && !editing) {\n <nz-text-copy\n [text]=\"copyText\"\n [tooltips]=\"nzCopyTooltips\"\n [icons]=\"nzCopyIcons\"\n (textCopy)=\"onTextCopy($event)\"\n ></nz-text-copy>\n }\n `, isInline: true, dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: NzTextEditComponent, selector: \"nz-text-edit\", inputs: [\"text\", \"icon\", \"tooltip\"], outputs: [\"startEditing\", \"endEditing\"], exportAs: [\"nzTextEdit\"] }, { kind: \"component\", type: NzTextCopyComponent, selector: \"nz-text-copy\", inputs: [\"text\", \"tooltips\", \"icons\"], outputs: [\"textCopy\"], exportAs: [\"nzTextCopy\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n };\n})();\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTypographyComponent, decorators: [{\n type: Component,\n args: [{\n selector: `\n nz-typography,\n [nz-typography],\n p[nz-paragraph],\n span[nz-text],\n h1[nz-title], h2[nz-title], h3[nz-title], h4[nz-title]\n `,\n exportAs: 'nzTypography',\n template: `\n <ng-template #contentTemplate let-content=\"content\">\n @if (!content) {\n <ng-content></ng-content>\n }\n {{ content }}\n </ng-template>\n @if (!editing) {\n @if (\n expanded ||\n (!hasOperationsWithEllipsis && nzEllipsisRows === 1 && !hasEllipsisObservers) ||\n canCssEllipsis ||\n (nzSuffix && expanded)\n ) {\n <ng-template\n [ngTemplateOutlet]=\"contentTemplate\"\n [ngTemplateOutletContext]=\"{ content: nzContent }\"\n ></ng-template>\n @if (nzSuffix) {\n {{ nzSuffix }}\n }\n } @else {\n <span #ellipsisContainer></span>\n @if (isEllipsis) {\n {{ ellipsisStr }}\n }\n @if (nzSuffix) {\n {{ nzSuffix }}\n }\n @if (nzExpandable && isEllipsis) {\n <a #expandable class=\"ant-typography-expand\" (click)=\"onExpand()\">\n {{ locale?.expand }}\n </a>\n }\n }\n }\n\n @if (nzEditable) {\n <nz-text-edit\n [text]=\"nzContent\"\n [icon]=\"nzEditIcon\"\n [tooltip]=\"nzEditTooltip\"\n (endEditing)=\"onEndEditing($event)\"\n (startEditing)=\"onStartEditing()\"\n ></nz-text-edit>\n }\n\n @if (nzCopyable && !editing) {\n <nz-text-copy\n [text]=\"copyText\"\n [tooltips]=\"nzCopyTooltips\"\n [icons]=\"nzCopyIcons\"\n (textCopy)=\"onTextCopy($event)\"\n ></nz-text-copy>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class.ant-typography]': '!editing',\n '[class.ant-typography-rtl]': 'dir === \"rtl\"',\n '[class.ant-typography-edit-content]': 'editing',\n '[class.ant-typography-secondary]': 'nzType === \"secondary\"',\n '[class.ant-typography-warning]': 'nzType === \"warning\"',\n '[class.ant-typography-danger]': 'nzType === \"danger\"',\n '[class.ant-typography-success]': 'nzType === \"success\"',\n '[class.ant-typography-disabled]': 'nzDisabled',\n '[class.ant-typography-ellipsis]': 'nzEllipsis && !expanded',\n '[class.ant-typography-single-line]': 'nzEllipsis && nzEllipsisRows === 1',\n '[class.ant-typography-ellipsis-single-line]': 'canCssEllipsis && nzEllipsisRows === 1',\n '[class.ant-typography-ellipsis-multiple-line]': 'canCssEllipsis && nzEllipsisRows > 1',\n '[style.-webkit-line-clamp]': '(canCssEllipsis && nzEllipsisRows > 1) ? nzEllipsisRows : null'\n },\n imports: [NgTemplateOutlet, NzTextEditComponent, NzTextCopyComponent]\n }]\n }], ctorParameters: () => [], propDecorators: { nzCopyable: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], nzEditable: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], nzDisabled: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], nzExpandable: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], nzEllipsis: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], nzCopyTooltips: [{\n type: Input\n }], nzCopyIcons: [{\n type: Input\n }], nzEditTooltip: [{\n type: Input\n }], nzEditIcon: [{\n type: Input\n }], nzContent: [{\n type: Input\n }], nzEllipsisRows: [{\n type: Input,\n args: [{ transform: numberAttribute }]\n }], nzType: [{\n type: Input\n }], nzCopyText: [{\n type: Input\n }], nzSuffix: [{\n type: Input\n }], nzContentChange: [{\n type: Output\n }], nzCopy: [{\n type: Output\n }], nzExpandChange: [{\n type: Output\n }], nzOnEllipsis: [{\n type: Output\n }], textEditRef: [{\n type: ViewChild,\n args: [NzTextEditComponent, { static: false }]\n }], textCopyRef: [{\n type: ViewChild,\n args: [NzTextCopyComponent, { static: false }]\n }], ellipsisContainer: [{\n type: ViewChild,\n args: ['ellipsisContainer', { static: false }]\n }], expandableBtn: [{\n type: ViewChild,\n args: ['expandable', { static: false }]\n }], contentTemplate: [{\n type: ViewChild,\n args: ['contentTemplate', { static: false }]\n }] } });\n\n/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\nclass NzTypographyModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTypographyModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTypographyModule, imports: [NzTypographyComponent, NzTextCopyComponent, NzTextEditComponent], exports: [NzTypographyComponent, NzTextCopyComponent, NzTextEditComponent] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTypographyModule, imports: [NzTypographyComponent, NzTextCopyComponent, NzTextEditComponent] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTypographyModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [NzTypographyComponent, NzTextCopyComponent, NzTextEditComponent],\n exports: [NzTypographyComponent, NzTextCopyComponent, NzTextEditComponent]\n }]\n }] });\n\n/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { NzTextCopyComponent, NzTextEditComponent, NzTypographyComponent, NzTypographyModule };\n\n","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, effect, inject, signal } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { NgDevtoolComponent } from '@app/shared/devtools/ng-devtool.component';\r\nimport { NzButtonModule } from 'ng-zorro-antd/button';\r\nimport { NzFormModule } from 'ng-zorro-antd/form';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { NzInputModule } from 'ng-zorro-antd/input';\r\nimport { NzLayoutModule } from 'ng-zorro-antd/layout';\r\nimport { NzMenuModule } from 'ng-zorro-antd/menu';\r\nimport { NzMessageService } from 'ng-zorro-antd/message';\r\nimport { NzModalModule, NzModalService } from 'ng-zorro-antd/modal';\r\nimport { NzPopoverModule } from 'ng-zorro-antd/popover';\r\nimport { NzSwitchModule } from 'ng-zorro-antd/switch';\r\nimport { NzTooltipModule } from 'ng-zorro-antd/tooltip';\r\nimport { NzTypographyModule } from 'ng-zorro-antd/typography';\r\n\r\nimport * as _ from 'lodash';\r\nimport { NzSelectModule } from 'ng-zorro-antd/select';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ConfigChangeBarComponent } from './components/config-change-bar-component';\r\nimport { ConfigNavComponent } from './components/config-nav-component';\r\nimport { ConfigSectionComponent } from './components/config-section-component';\r\nimport { ConfigNavNodeVM, DocStateVM, DomainDocMetaVM, DomainSchemaDiffResult, DomainSchemaDoc, ResolvedDomain } from './models';\r\nimport { ConfApiService, } from './services';\r\nimport { flattenPatch, mapResolvedToNav } from './utils';\r\nimport { PageLayoutComponent } from '@app/shared';\r\nimport { ProjectContextStore } from '@app/core/stores';\r\n\r\n@Component({\r\n selector: 'app-project-conf.component',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n NzLayoutModule,\r\n NzMenuModule,\r\n NzFormModule,\r\n NzInputModule,\r\n NzSelectModule,\r\n NzSwitchModule,\r\n NzButtonModule,\r\n NzTypographyModule,\r\n NzPopoverModule,\r\n NzTooltipModule,\r\n NgDevtoolComponent,\r\n NzIconModule,\r\n ConfigNavComponent,\r\n ConfigChangeBarComponent,\r\n NzModalModule,\r\n ConfigSectionComponent,\r\n PageLayoutComponent,\r\n ],\r\n styleUrl: './project-conf.component.less',\r\n template: `\r\n <app-page-layout [title]=\"'项目配置'\" [loading]=\"loading()\">\r\n <ng-container ngProjectAs=\"actions\">\r\n <button nz-button nzType=\"primary\" (click)=\"isModalVisible.set(true)\">打开配置文件</button>\r\n <app-ng-devtool></app-ng-devtool>\r\n </ng-container>\r\n <div class=\"panel\">\r\n <app-config-nav-component\r\n [nodes]=\"navNodes()\"\r\n [activeDomainId]=\"activeDomainId() ?? ''\"\r\n (domainSelect)=\"onDomainSelect($event)\"\r\n >\r\n </app-config-nav-component>\r\n <div class=\"content\">\r\n <app-config-section-component\r\n [schema]=\"domainSchema()?.schema\"\r\n [vm]=\"domainVM()\"\r\n (vmChange)=\"domainVM.set($event)\"\r\n [options]=\"domainSchema()?.options ?? {}\"\r\n >\r\n </app-config-section-component>\r\n <app-config-change-bar-component\r\n [dirty]=\"domainDirty()\"\r\n (diff)=\"onDiff()\"\r\n (reset)=\"onReset()\"\r\n (save)=\"saveActive()\"\r\n >\r\n </app-config-change-bar-component>\r\n </div>\r\n </div>\r\n </app-page-layout>\r\n <nz-modal\r\n [(nzVisible)]=\"isModalVisible\"\r\n nzTitle=\"配置\"\r\n (nzOnCancel)=\"isModalVisible.set(false)\"\r\n [nzMaskClosable]=\"false\"\r\n >\r\n <ng-container *nzModalContent>\r\n <div class=\"modal-body\">\r\n <label>选择配置文件</label>\r\n <nz-select style=\"width: 100%\" [(ngModel)]=\"selectedDocId\" nzPlaceHolder=\"请选择配置文件\">\r\n @for (doc of activeDocsMeta() || []; track doc.docId) {\r\n <nz-option [nzLabel]=\"doc.title\" [nzValue]=\"doc.docId\"></nz-option>\r\n }\r\n </nz-select>\r\n </div>\r\n </ng-container>\r\n <ng-container *nzModalFooter>\r\n <button nz-button nzType=\"primary\" (click)=\"openConfig()\" [disabled]=\"!selectedDocId()\">\r\n 打开配置文件\r\n </button>\r\n </ng-container>\r\n </nz-modal>\r\n `\r\n})\r\nexport class ProjectConfComponent {\r\n private api = inject(ConfApiService);\r\n private projectContext = inject(ProjectContextStore);\r\n private msg = inject(NzMessageService);\r\n private modal = inject(NzModalService);\r\n\r\n\r\n projectId = computed(() => this.projectContext.currentProjectId() || '');\r\n\r\n loading = signal(false);\r\n isModalVisible = signal(false);\r\n catalog = signal<ResolvedDomain[] | null>(null);\r\n\r\n // 左侧 nav 的 VM(domain->doc 扁平结构)\r\n navNodes = computed<ConfigNavNodeVM[]>(() => mapResolvedToNav(this.catalog() ?? []));\r\n // 当前选中 domain ID\r\n activeDomainId = signal<string | null>(null);\r\n // 选中的 doc ID\r\n selectedDocId = signal<string | null>(null);\r\n // 当前 doc 内容(raw/json)\r\n docStates = signal<Record<string, DocStateVM>>({});\r\n\r\n domainSchema = signal<DomainSchemaDoc | null>(null);\r\n // 当前 domain 级 VM(由多个 doc 组装而成)\r\n domainVM = signal<any | null>(null);\r\n baselineDomainVM = signal<any | null>(null);\r\n\r\n activeDomain = computed(() => {\r\n const did = this.activeDomainId();\r\n return (this.catalog() ?? []).find(x => x.domain.id === did) ?? null;\r\n });\r\n\r\n activeDocs = computed(() => this.activeDomain()?.docs ?? []);\r\n\r\n activeDocsMeta = computed<DomainDocMetaVM[]>(() => {\r\n const d = this.activeDomain();\r\n if (!d) return [];\r\n return (d.docs ?? []).map(x => ({\r\n docId: x.spec.id,\r\n title: x.spec.title,\r\n exists: x.exists,\r\n relPath: x.chosen?.relPath,\r\n codec: x.chosen?.codec,\r\n }));\r\n });\r\n\r\n // dirty:对 raw 做 dirty(json 可后续)\r\n domainDirty = computed(() => {\r\n const base = this.baselineDomainVM();\r\n const cur = this.domainVM();\r\n if (!base || !cur) return false;\r\n return !_.isEqual(base, cur);\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const pid = this.projectId();\r\n if (pid) this.getCatalog();\r\n });\r\n }\r\n\r\n getCatalog() {\r\n const pid = this.projectId();\r\n if (!pid) return;\r\n\r\n this.loading.set(true);\r\n this.api.getCatalog(pid).subscribe({\r\n next: (catalog) => {\r\n this.catalog.set(catalog);\r\n const firstDomainId = catalog[0]?.domain?.id ?? \"\";\r\n if (firstDomainId) {\r\n this.activeDomainId.set(firstDomainId);\r\n this.loadDomainSchema(firstDomainId);\r\n }\r\n\r\n },\r\n error: (err) => {\r\n console.error(err);\r\n this.msg.error('加载配置目录失败');\r\n },\r\n complete: () => this.loading.set(false),\r\n });\r\n }\r\n\r\n /**\r\n * 左侧目录选择 domain\r\n */\r\n onDomainSelect(domainId: string) {\r\n this.activeDomainId.set(domainId);\r\n\r\n // 先只做 angular 示例\r\n if (domainId === \"angular\") {\r\n this.loadDomainSchema(domainId);\r\n } else {\r\n this.domainVM.set(null);\r\n }\r\n }\r\n\r\n async loadDomainSchema(domainId: string) {\r\n const pid = this.projectId();\r\n if (!pid) return;\r\n this.loading.set(true);\r\n\r\n try {\r\n const doc = await firstValueFrom(this.api.getDomainSchemas(pid, domainId));\r\n this.domainSchema.set(doc);\r\n this.domainVM.set(doc.vm);\r\n this.baselineDomainVM.set(_.cloneDeep(doc.vm));\r\n } catch (e) {\r\n console.error(e);\r\n this.msg.error(\"加载配置模型失败\");\r\n this.domainVM.set(null);\r\n this.baselineDomainVM.set(null);\r\n } finally {\r\n this.loading.set(false);\r\n }\r\n }\r\n\r\n async onDiff() {\r\n const pid = this.projectId();\r\n const domainId = this.activeDomainId();\r\n const cur = this.domainVM();\r\n if (!pid || !domainId || !cur) return;\r\n\r\n this.loading.set(true);\r\n\r\n try {\r\n const data: DomainSchemaDiffResult = await firstValueFrom(this.api.diffDomainSchema(pid, domainId, cur));\r\n const docPatch = data?.docPatch ?? {};\r\n const filePatch = data?.filePatch ?? [];\r\n\r\n const rows: any[] = [];\r\n for (const [docId, patch] of Object.entries(docPatch)) {\r\n rows.push(...flattenPatch(\"doc\", docId, patch));\r\n }\r\n for (const fp of filePatch) {\r\n rows.push(...flattenPatch(\"file\", fp.relPath, fp.patch));\r\n }\r\n if (rows.length === 0) {\r\n this.msg.info(\"没有可写回的变更\");\r\n return;\r\n }\r\n rows.sort((a, b) => {\r\n if (a.scope !== b.scope) return a.scope.localeCompare(b.scope);\r\n const aa = `${a.target}:${a.path}`;\r\n const bb = `${b.target}:${b.path}`;\r\n return aa.localeCompare(bb);\r\n });\r\n\r\n this.modal.create({\r\n nzTitle: \"变更\",\r\n nzContent: `\r\n <div style=\"max-height:60vh; overflow:auto;\">\r\n ${rows\r\n .map(\r\n (r: any) => `\r\n <div style=\"padding:8px 0; border-bottom:1px solid #f0f0f0;\">\r\n <div style=\"font-weight:600;\">[${r.scope}] ${r.target}</div>\r\n <div style=\"opacity:.85; margin-top:4px;\">${r.path}</div>\r\n <pre style=\"margin:6px 0;\">after : ${this.safeStringify(r.value)}</pre>\r\n </div>\r\n `\r\n )\r\n .join(\"\")}\r\n </div>\r\n `,\r\n nzFooter: null,\r\n nzWidth: 900,\r\n });\r\n } catch (e) {\r\n console.error(e);\r\n this.msg.error(\"生成 Diff 失败\");\r\n } finally {\r\n this.loading.set(false);\r\n }\r\n }\r\n\r\n private safeStringify(v: any): string {\r\n try { return JSON.stringify(v, null, 2); } catch { return String(v); }\r\n }\r\n\r\n onReset() {\r\n const base = this.baselineDomainVM();\r\n if (!base) return;\r\n this.domainVM.set(_.cloneDeep(base));\r\n this.msg.success(\"已重置为未修改状态\");\r\n }\r\n\r\n /** 右侧编辑器 raw 内容变化回传 */\r\n onRawChange(e: { docId: string; raw: string }) {\r\n const map = this.docStates();\r\n const cur = map[e.docId];\r\n if (!cur) return;\r\n\r\n const baseline = cur.baselineRaw ?? \"\";\r\n const dirty = e.raw !== baseline;\r\n\r\n this.docStates.set({\r\n ...map,\r\n [e.docId]: { ...cur, raw: e.raw, dirty }\r\n });\r\n }\r\n\r\n /** 右侧表单变化回传(整包 values) */\r\n onValuesChange(e: { type: string; values: Record<string, any> }) {\r\n }\r\n\r\n async saveActive() {\r\n const pid = this.projectId();\r\n const did = this.activeDomainId();\r\n const vm = this.domainVM();\r\n if (!pid || !did || !vm) return;\r\n\r\n this.loading.set(true);\r\n try {\r\n await firstValueFrom(this.api.writeDomainSchema(pid, did, vm));\r\n this.msg.success(\"保存成功\");\r\n // 保存后:更新 baseline(直接重新加载一次,确保与后端 merge/默认值一致)\r\n await this.loadDomainSchema(did);\r\n\r\n } catch (e) {\r\n console.error(e);\r\n this.msg.error(\"保存失败\");\r\n } finally {\r\n this.loading.set(false);\r\n }\r\n }\r\n\r\n /** 打开配置文件 */\r\n openConfig() {\r\n if (!this.selectedDocId()) {\r\n this.msg.warning('请先选择配置文件');\r\n return;\r\n }\r\n this.api.openInEditor(\r\n this.projectId()!,\r\n this.selectedDocId()!).subscribe(res => {\r\n this.msg.success('已在默认编辑器中打开该配置文件');\r\n this.isModalVisible.set(false);\r\n })\r\n }\r\n}","/* angular:styles/component:less;e2c5882f5ecc20c8555a17ba23b1d21120fdbb57b012e708b159368938802fe6;D:\\ng-manager\\webapp\\src\\app\\pages\\configuration\\components\\config-change-bar-component.ts */\n.change-bar {\n width: 100%;\n padding: 10px 20px;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 10px;\n box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.06);\n background: var(--app-component-bg);\n border: 1px solid var(--app-border-color);\n}\n.hint {\n margin-right: auto;\n opacity: 0.75;\n}\n/*# sourceMappingURL=config-change-bar-component.css.map */\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { NzButtonModule } from 'ng-zorro-antd/button';\r\n\r\n@Component({\r\n selector: 'app-config-change-bar-component',\r\n imports: [\r\n CommonModule,\r\n NzButtonModule,\r\n ],\r\n template: `\r\n @if(dirty){\r\n <div class=\"change-bar\">\r\n <span class=\"hint\">有未保存更改</span>\r\n <button nz-button (click)=\"diff.emit()\">Diff</button>\r\n <button nz-button (click)=\"reset.emit()\">重置</button>\r\n <button nz-button nzType=\"primary\" (click)=\"save.emit()\">保存</button>\r\n </div>\r\n }\r\n `,\r\n styles: [\r\n `\r\n .change-bar {\r\n width: 100%;\r\n padding: 10px 20px;\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n gap: 10px;\r\n box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.06);\r\n background: var(--app-component-bg);\r\n border: 1px solid var(--app-border-color);\r\n }\r\n .hint { margin-right: auto; opacity: .75; }\r\n `\r\n ],\r\n})\r\nexport class ConfigChangeBarComponent {\r\n @Input() dirty = false;\r\n @Output() diff = new EventEmitter<void>();\r\n @Output() reset = new EventEmitter<void>();\r\n @Output() save = new EventEmitter<void>();\r\n}\r\n","/* angular:styles/component:less;c43e9df725f052ef8ca04d5c9749d40426a51fc8b9499644a971703bf948f721;D:\\ng-manager\\webapp\\src\\app\\pages\\configuration\\components\\config-nav-component.ts */\n.list {\n height: 100%;\n width: 100%;\n display: flex;\n flex-direction: column;\n}\n.list .topbar {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n}\n.list .topbar nz-input-wrapper {\n width: 100%;\n border-radius: 18px;\n}\n.list .items {\n flex: 1 1 auto;\n overflow: auto;\n height: 0;\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 8px;\n}\n.list .items .item {\n border-radius: 3px;\n padding: 10px 10px;\n cursor: pointer;\n}\n.list .items .item:hover,\n.list .items .item.active {\n background: var(--app-primary-2);\n}\n.list .items .item .row {\n display: flex;\n gap: 10px;\n align-items: center;\n overflow: hidden;\n justify-content: space-between;\n}\n.list .items .item .row .icon {\n font-size: 42px;\n flex: 0 0 auto;\n position: relative;\n}\n.list .items .item .row .info {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n gap: 4px;\n overflow: hidden;\n}\n.list .items .item .row .info .name {\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.list .items .item .row .info .description {\n font-size: 13px;\n color: var(--app-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n/*# sourceMappingURL=config-nav-component.css.map */\n","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, EventEmitter, input, Output, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { NzInputModule } from 'ng-zorro-antd/input';\r\nimport { ConfigNavNodeVM } from '../models/config-ui.model';\r\n\r\n@Component({\r\n selector: 'app-config-nav-component',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NzInputModule,\r\n NzIconModule,\r\n ],\r\n template: `\r\n <div class=\"list\">\r\n <div class=\"topbar\">\r\n <nz-input-wrapper>\r\n <nz-icon class=\"search-icon\" nzInputPrefix nzType=\"search\" />\r\n <input\r\n nz-input\r\n placeholder=\"\"\r\n [ngModel]=\"keyword()\"\r\n (ngModelChange)=\"keyword.set($event)\"\r\n />\r\n </nz-input-wrapper>\r\n </div>\r\n <div class=\"items\">\r\n @for (g of filtered(); track g.id) {\r\n <div\r\n class=\"item\"\r\n [class.active]=\"g.id === activeDomainId()\"\r\n (click)=\"selectDomain(g)\"\r\n >\r\n <div class=\"row\">\r\n <div class=\"icon\">\r\n <nz-icon\r\n class=\"project-suffix-icon\"\r\n [nzType]=\"g.icon || 'setting'\"\r\n nzTheme=\"outline\"\r\n />\r\n </div>\r\n <div class=\"info\">\r\n <div class=\"name\">{{ g.label }}</div>\r\n <div class=\"description\">{{ g.description }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n `,\r\n styles: [\r\n `\r\n .list {\r\n height:100%;\r\n width:100%;\r\n display: flex;\r\n flex-direction: column;\r\n .topbar {\r\n flex: 0 0 auto;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 10px 16px;\r\n\r\n nz-input-wrapper {\r\n width: 100%;\r\n border-radius: 18px;\r\n }\r\n }\r\n .items {\r\n flex: 1 1 auto;\r\n overflow: auto;\r\n height: 0;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n padding: 8px;\r\n\r\n .item {\r\n border-radius: 3px;\r\n padding: 10px 10px;\r\n cursor: pointer;\r\n\r\n &:hover,\r\n &.active {\r\n background: var(--app-primary-2);\r\n }\r\n\r\n .row {\r\n display: flex;\r\n gap: 10px;\r\n align-items: center;\r\n overflow: hidden;\r\n justify-content: space-between;\r\n\r\n .icon {\r\n font-size: 42px;\r\n flex: 0 0 auto;\r\n position: relative;\r\n }\r\n\r\n .info {\r\n flex: 1 1 auto;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n overflow: hidden;\r\n\r\n .name {\r\n font-weight: 600;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n }\r\n\r\n .description {\r\n font-size: 13px;\r\n color: var(--app-text-secondary);\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n `\r\n ],\r\n})\r\nexport class ConfigNavComponent {\r\n keyword = signal(\"\");\r\n nodes = input<ConfigNavNodeVM[]>([]);\r\n activeDomainId = input<string>(\"\");\r\n @Output() domainSelect = new EventEmitter<string>();\r\n\r\n selectDomain(node: ConfigNavNodeVM) {\r\n this.domainSelect.emit(node.id); // domainId\r\n }\r\n\r\n filtered = computed(() => {\r\n const kw = this.keyword().trim().toLowerCase();\r\n if (!kw) return this.nodes();\r\n\r\n return this.nodes()\r\n .map(g => ({\r\n ...g,\r\n children: (g.children ?? []).filter(d =>\r\n (d.label ?? \"\").toLowerCase().includes(kw)\r\n || (d.relPath ?? \"\").toLowerCase().includes(kw)\r\n )\r\n }))\r\n .filter(g => (g.children?.length ?? 0) > 0);\r\n });\r\n\r\n}\r\n","/* angular:styles/component:less;f1035e8771d06bb9f341d0630c384aaa81c28fb123ca568d4f515d383cd0597d;D:\\ng-manager\\webapp\\src\\app\\pages\\configuration\\components\\config-section-component.ts */\n.section {\n padding: 0px;\n}\n.section:last-child {\n border-bottom: none;\n}\n.section-title {\n margin: 0 0 10px;\n font-size: 24px;\n opacity: 0.85;\n font-weight: 500;\n padding: 0 16px;\n}\n.empty {\n padding: 12px 14px;\n}\n/*# sourceMappingURL=config-section-component.css.map */\n","export function getByPath(obj: any, path: string) {\r\n return path.split(\".\").reduce((o, k) => (o ? o[k] : undefined), obj);\r\n}\r\n\r\nexport function setByPath(obj: any, path: string, value: any) {\r\n const keys = path.split(\".\");\r\n const last = keys.pop()!;\r\n let cur = obj;\r\n for (const k of keys) {\r\n cur[k] ??= {};\r\n cur = cur[k];\r\n }\r\n cur[last] = value;\r\n}\r\n","import { ResolvedDomain } from \"../models\";\r\nimport { ConfigNavNodeVM } from \"../models/config-ui.model\";\r\n\r\nfunction mapResolvedToNav(catalog: ResolvedDomain[]): ConfigNavNodeVM[] {\r\n return catalog\r\n .sort((a, b) => (a.domain?.nav?.order ?? 0) - (b.domain?.nav?.order ?? 0))\r\n .map(d => ({\r\n id: d.domain.id,\r\n type: \"domain\",\r\n label: d.domain.label,\r\n icon: d.domain.icon,\r\n description: d.domain.description,\r\n children: (d.docs ?? []).map((x: any) => ({\r\n id: x.spec.id,\r\n type: \"doc\",\r\n label: x.spec.title,\r\n docId: x.spec.id,\r\n relPath: x.chosen?.relPath,\r\n codec: x.chosen?.codec,\r\n exists: x.exists,\r\n })),\r\n }));\r\n}\r\n\r\nfunction pickFirstDocId(catalog: ResolvedDomain[]): string | null {\r\n for (const d of catalog) {\r\n const first = d.docs?.[0]?.spec?.id;\r\n if (first) return first;\r\n }\r\n return null;\r\n}\r\n\r\n\r\nexport { mapResolvedToNav, pickFirstDocId };","export type PatchRow = {\r\n scope: \"doc\" | \"file\";\r\n target: string; // docId 或 relPath\r\n path: string; // 叶子路径(patch 内)\r\n value: any; // after(patch 值)\r\n};\r\n\r\nconst isObj = (x: any) => x != null && typeof x === \"object\" && !Array.isArray(x);\r\n\r\nexport function flattenPatch(\r\n scope: \"doc\" | \"file\",\r\n target: string,\r\n patch: any,\r\n basePath = \"\"\r\n): PatchRow[] {\r\n if (patch === undefined) return [];\r\n if (!isObj(patch)) {\r\n return [{ scope, target, path: basePath || \"/\", value: patch }];\r\n }\r\n\r\n const rows: PatchRow[] = [];\r\n const keys = Object.keys(patch);\r\n\r\n // 空对象也算一个变更(通常用于创建节点),但你当前 diff 叶子化后一般不会出现\r\n if (keys.length === 0) {\r\n rows.push({ scope, target, path: basePath || \"/\", value: {} });\r\n return rows;\r\n }\r\n\r\n for (const k of keys) {\r\n const p = basePath ? `${basePath}.${k}` : k;\r\n const v = patch[k];\r\n if (isObj(v)) rows.push(...flattenPatch(scope, target, v, p));\r\n else rows.push({ scope, target, path: p, value: v });\r\n }\r\n return rows;\r\n}\r\n","/* angular:styles/component:less;3d800cd5798763d972a918df0179ae2fa2db1ed97eda1d706faa532bda5f5136;D:\\ng-manager\\webapp\\src\\app\\pages\\configuration\\components\\config-item-component.ts */\n.config-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n}\n.config-item:hover {\n background: var(--app-primary-2);\n}\n.config-item .meta .label {\n font-weight: 500;\n opacity: 0.75;\n}\n.config-item .meta .desc {\n font-size: 14px;\n margin-top: 4px;\n opacity: 0.55;\n}\n.config-item .control {\n min-width: 200px;\n max-width: 600px;\n width: 60%;\n}\n.config-item .control input[nz-input],\n.config-item .control nz-select {\n width: 100%;\n}\n.config-item .control .kv {\n display: flex;\n flex-direction: column;\n gap: 6px;\n width: 100%;\n}\n/*# sourceMappingURL=config-item-component.css.map */\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { NzInputModule } from 'ng-zorro-antd/input';\r\nimport { NzSelectModule } from 'ng-zorro-antd/select';\r\nimport { NzSwitchModule } from 'ng-zorro-antd/switch';\r\nimport { ConfigSchemaItem } from '../models';\r\nimport { NzSpaceModule } from 'ng-zorro-antd/space';\r\nimport { NzTableModule } from 'ng-zorro-antd/table';\r\n\r\n@Component({\r\n selector: 'app-config-item-component',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NzIconModule,\r\n NzSwitchModule,\r\n NzInputModule,\r\n NzSelectModule,\r\n NzSpaceModule,\r\n NzTableModule\r\n ],\r\n template: `\r\n <div class=\"config-item\">\r\n <div class=\"meta\">\r\n <div class=\"label\">{{ item.label }}</div>\r\n @if(item.desc){\r\n <div class=\"desc\">\r\n {{ item.desc }}\r\n </div>\r\n }\r\n </div>\r\n <div class=\"control\">\r\n @switch (item.type) {\r\n @case ('input'){\r\n <input nz-input [ngModel]=\"value\" (ngModelChange)=\"emit($event)\" />\r\n }\r\n @case ('path'){\r\n <input nz-input [ngModel]=\"value\" (ngModelChange)=\"emit($event)\" />\r\n }\r\n @case('string')\r\n {\r\n <span>{{value}}</span>\r\n }\r\n @case('file')\r\n {\r\n <nz-space nzAlign=\"center\">\r\n <nz-icon nzType=\"file\" nzTheme=\"fill\"></nz-icon>\r\n <span>{{value}}</span>\r\n </nz-space>\r\n }\r\n @case ('boolean'){\r\n <nz-switch [ngModel]=\"value\" (ngModelChange)=\"emit($event)\"> </nz-switch>\r\n }\r\n @case('select'){\r\n <nz-select [ngModel]=\"value\" (ngModelChange)=\"emit($event)\">\r\n @for (opt of options; track opt.value) {\r\n <nz-option [nzValue]=\"opt.value\" [nzLabel]=\"opt.label\"></nz-option>\r\n }\r\n </nz-select>\r\n }\r\n @case('array'){\r\n <!-- <span>数组类型配置项,暂不支持表单编辑</span> -->\r\n @if (isArrayObjectEditor()) {\r\n @for(row of arrayValue(); track $index) {\r\n <nz-space>\r\n @if(arrayValue().length>1){\r\n <span >{{$index + 1}}</span>\r\n }\r\n @for (f of arrayFields(); track f.key) {\r\n <nz-icon nzType=\"file\" nzTheme=\"fill\"></nz-icon>\r\n <span>\r\n {{row?.[f.key!]}}\r\n </span>\r\n @if(f !== arrayFields()[arrayFields().length -1]){\r\n <nz-icon nzType=\"arrow-right\" nzTheme=\"outline\"></nz-icon>\r\n }\r\n }\r\n </nz-space>\r\n }\r\n } @else {\r\n <span>数组类型配置项,暂不支持表单编辑</span>\r\n }\r\n }\r\n <!--object 类型的配置项-->\r\n @case('object'){\r\n @if (isObjectEditor()) {\r\n <div class=\"kv\">\r\n @for (field of objectKv(); track field.value) {\r\n <nz-space>\r\n <span class=\"label\">{{field.label}}:</span>\r\n <span class=\"value\">{{field.value}}</span>\r\n </nz-space>\r\n }\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n </div>\r\n `,\r\n styles: [\r\n `\r\n .config-item {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 12px 16px;\r\n &:hover{\r\n background: var(--app-primary-2);\r\n }\r\n .meta {\r\n .label {\r\n font-weight: 500;\r\n opacity: 0.75;\r\n }\r\n .desc {\r\n font-size: 14px;\r\n margin-top: 4px;\r\n opacity: 0.55;\r\n }\r\n }\r\n .control {\r\n min-width: 200px;\r\n max-width: 600px;\r\n width: 60%;\r\n input[nz-input],nz-select {\r\n width: 100%;\r\n }\r\n .kv {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 6px;\r\n width:100%;\r\n }\r\n }\r\n }\r\n `\r\n ],\r\n})\r\nexport class ConfigItemComponent {\r\n @Input() item!: ConfigSchemaItem;\r\n @Input() value: any;\r\n @Output() valueChange = new EventEmitter<any>();\r\n @Input() options: { label: string; value: string }[] = [];\r\n emit(v: any) {\r\n this.valueChange.emit(v);\r\n }\r\n /* -- ------------- object -------------- */\r\n isObjectEditor(): boolean {\r\n return this.item?.type === 'object';\r\n }\r\n\r\n objectKv(): { label: string; value: string }[] {\r\n const obj = this.value ?? {};\r\n return Object.values(obj).map((k, idx) => {\r\n if (typeof k === 'string') {\r\n return { label: Object.keys(obj)[idx], value: k };\r\n }\r\n return { label: Object.keys(obj)[idx], value: JSON.stringify(k) };\r\n });\r\n }\r\n\r\n\r\n\r\n /* ---------------- array<object> MVP ---------------- */\r\n\r\n isArrayObjectEditor(): boolean {\r\n return (\r\n this.item?.type === 'array' &&\r\n this.item?.item?.type === 'object' &&\r\n Array.isArray(this.item?.item?.fields) &&\r\n this.item.item.fields.length > 0\r\n );\r\n }\r\n\r\n arrayFields(): ConfigSchemaItem[] {\r\n return (this.item?.item?.fields ?? []) as ConfigSchemaItem[];\r\n }\r\n\r\n arrayValue(): any[] {\r\n return Array.isArray(this.value) ? this.value : [];\r\n }\r\n\r\n addRow() {\r\n const fields = this.arrayFields();\r\n const row: any = {};\r\n for (const f of fields) {\r\n if (!f.key) continue;\r\n row[f.key] = f.default ?? '';\r\n }\r\n const next = [...this.arrayValue(), row];\r\n this.emit(next);\r\n }\r\n\r\n removeRow(i: number) {\r\n const arr = this.arrayValue();\r\n const next = arr.filter((_, idx) => idx !== i);\r\n this.emit(next);\r\n }\r\n\r\n updateCell(i: number, key: string, v: any) {\r\n const arr = this.arrayValue();\r\n const next = arr.map((row, idx) => {\r\n if (idx !== i) return row;\r\n return { ...(row ?? {}), [key]: v };\r\n });\r\n this.emit(next);\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ConfigSchema, ConfigSchemaItem } from '../models';\r\nimport { getByPath, setByPath } from '../utils';\r\nimport { ConfigItemComponent } from './config-item-component';\r\n\r\n@Component({\r\n selector: 'app-config-section-component',\r\n standalone: true,\r\n imports: [CommonModule, ConfigItemComponent],\r\n template: `\r\n @if(schema){\r\n @let sections = schema.sections || [];\r\n @for (sec of sections; track sec.id) {\r\n <section class=\"section\" [attr.id]=\"sec.id\">\r\n <h3 class=\"section-title\">{{ sec.label }}</h3>\r\n @for (item of sec.items; track item.key) {\r\n <app-config-item-component\r\n [item]=\"item\"\r\n [options]=\"item.options || options[item.optionsRef?.key!] || []\"\r\n [value]=\"get(item)\"\r\n (valueChange)=\"onValueChange($event, item)\">\r\n </app-config-item-component>\r\n @if(item.children?.length){\r\n @for (child of item.children; track child.key) {\r\n <app-config-item-component\r\n [item]=\"child\"\r\n [options]=\"child.options || options[child.optionsRef?.key!] || []\"\r\n [value]=\"getChild(child,item)\"\r\n (valueChange)=\"onValueChange($event, child)\">\r\n </app-config-item-component>\r\n }\r\n }\r\n\r\n }\r\n </section>\r\n }\r\n }@else{\r\n <div class=\"empty\">\r\n 该配置暂不支持表单模式(可切换 Raw / 或稍后实现 provider)\r\n </div>\r\n }\r\n `,\r\n styles: [`\r\n .section { padding: 0px; } \r\n .section:last-child { border-bottom: none; }\r\n .section-title { margin: 0 0 10px; font-size: 24px; opacity: 0.85; font-weight: 500; padding: 0 16px; }\r\n .empty { padding: 12px 14px;}\r\n `],\r\n})\r\nexport class ConfigSectionComponent {\r\n @Input() schema?: ConfigSchema;\r\n @Input() vm!: any;\r\n @Input() options: Record<string, any> = {};\r\n @Output() vmChange = new EventEmitter<any>();\r\n\r\n get(item: ConfigSchemaItem) {\r\n const v = getByPath(this.vm, item.key);\r\n return (v === undefined || v === null) ? item.default : v;\r\n }\r\n\r\n getChild(child: ConfigSchemaItem, parent: ConfigSchemaItem) {\r\n const parentValue = this.get(parent);\r\n if (parentValue === undefined || parentValue === null || parentValue === \"\") {\r\n return child.default;\r\n }\r\n const replacedPath = this.resolveDynamicPath(child.key, parent.key, parentValue);\r\n const v = getByPath(this.vm, replacedPath);\r\n return (v === undefined || v === null) ? child.default : v;\r\n }\r\n\r\n onValueChange(value: any, item: ConfigSchemaItem) {\r\n const path = this.resolvePathForWrite(item);\r\n this.update(path, value);\r\n }\r\n\r\n private resolvePathForWrite(item: ConfigSchemaItem): string {\r\n const key = item.key || \"\";\r\n // 处理 \"<parentKey>\" 这种占位符:从当前 vm 里读取对应 parent 的值\r\n // 约定:占位符里写的是完整 parent.key,例如 \"<serve.defaultConfiguration>\"\r\n const m = key.match(/<([^>]+)>/);\r\n if (!m) return key;\r\n\r\n const parentKey = m[1];\r\n const parentValue = getByPath(this.vm, parentKey);\r\n return this.resolveDynamicPath(key, parentKey, parentValue);\r\n }\r\n\r\n private resolveDynamicPath(key: string, placeholderKey: string, placeholderValue: any): string {\r\n const token = `<${placeholderKey}>`;\r\n return key.replace(token, String(placeholderValue ?? \"\"));\r\n }\r\n\r\n private update(path: string, value: any) {\r\n const next = structuredClone(this.vm);\r\n setByPath(next, path, value);\r\n this.vmChange.emit(next);\r\n }\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { ApiClient } from \"@core/api\";\r\nimport { DomainSchemaDiffResult, DomainSchemaDoc, ResolvedDomain } from \"../models\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class ConfApiService {\r\n api = inject(ApiClient)\r\n\r\n getCatalog(projectId: string) {\r\n return this.api.get<ResolvedDomain[]>(`/api/config/catalog/${projectId}`)\r\n }\r\n // /openInEditor/:projectId/:docId\r\n openInEditor(projectId: string, docId: string) {\r\n return this.api.post(\r\n `/api/config/openInEditor/${projectId}/${encodeURIComponent(docId)}`,\r\n {}\r\n );\r\n }\r\n\r\n writeDomainSchema(projectId: string, domainId: string, vm: any) {\r\n return this.api.post(`/api/config/writeSchema/${projectId}/${domainId}`, { vm });\r\n }\r\n\r\n getDomainSchemas(projectId: string, domainId: string) {\r\n return this.api.get<DomainSchemaDoc>(`/api/config/getDomainSchema/${projectId}/${domainId}`)\r\n }\r\n\r\n diffDomainSchema(projectId: string, domainId: string, vm: any) {\r\n return this.api.post<DomainSchemaDiffResult>(`/api/config/diffSchema/${projectId}/${domainId}`, { vm });\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { ProjectConfComponent } from './project-conf.component';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n component: ProjectConfComponent\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class ConfigurationRoutingModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ConfigurationRoutingModule } from './configuration.routing';\r\n\r\n@NgModule({\r\n declarations: [\r\n ],\r\n imports: [\r\n CommonModule,\r\n ConfigurationRoutingModule\r\n ]\r\n})\r\nexport class ConfigurationModule { }\r\n"],"mappings":"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","names":["ConfigChangeBarComponent","ConfigNavComponent","ConfigItemComponent","_","ConfigSectionComponent","ConfApiService","ProjectConfComponent","ConfigurationRoutingModule","ConfigurationModule"],"x_google_ignoreList":[1,2]}