@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,1872 +0,0 @@
1
- import {
2
- provideMarkdown
3
- } from "./chunk-AQHSGTHS.js";
4
- import {
5
- NzLayoutModule
6
- } from "./chunk-YWHRP4X3.js";
7
- import {
8
- UserStore
9
- } from "./chunk-Z7FJIV62.js";
10
- import {
11
- ProjectStateService
12
- } from "./chunk-GMCNMOTD.js";
13
- import {
14
- NzSwitchModule
15
- } from "./chunk-6TBQERYX.js";
16
- import {
17
- NzDrawerModule
18
- } from "./chunk-7FC7DN65.js";
19
- import {
20
- NzModalModule
21
- } from "./chunk-FLSUSPBD.js";
22
- import {
23
- NzTagModule
24
- } from "./chunk-J447GBHM.js";
25
- import {
26
- NzDropDownDirective,
27
- NzDropDownModule,
28
- NzMenuModule
29
- } from "./chunk-ZBZHXS46.js";
30
- import {
31
- httpErrorInterceptor
32
- } from "./chunk-KSHAGY2M.js";
33
- import "./chunk-VXHZMSDM.js";
34
- import {
35
- TaskRuntimeStore,
36
- TasksApiService
37
- } from "./chunk-RBWIWNTL.js";
38
- import {
39
- NzBadgeModule
40
- } from "./chunk-DEGQJKKZ.js";
41
- import {
42
- ProjectContextStore
43
- } from "./chunk-TEW4MY4J.js";
44
- import {
45
- WsClientService
46
- } from "./chunk-APGQRYWX.js";
47
- import "./chunk-2YSUXBGC.js";
48
- import {
49
- Directionality,
50
- FormsModule,
51
- NzButtonModule,
52
- NzIconDirective,
53
- NzIconModule,
54
- NzIconService,
55
- NzInputModule,
56
- NzOutletModule,
57
- NzSpaceModule,
58
- NzStringTemplateOutletDirective,
59
- NzTooltipModule,
60
- PREFIX,
61
- provideNzI18n,
62
- takeUntilDestroyed,
63
- toSignal,
64
- zh_CN
65
- } from "./chunk-RUXJCM3V.js";
66
- import "./chunk-VYNQPZQO.js";
67
- import {
68
- ActivatedRoute,
69
- NavigationEnd,
70
- PRIMARY_OUTLET,
71
- Router,
72
- RouterModule,
73
- provideRouter
74
- } from "./chunk-665WC4RU.js";
75
- import {
76
- CommonModule,
77
- DomRendererFactory2,
78
- NgTemplateOutlet,
79
- bootstrapApplication,
80
- provideHttpClient,
81
- registerLocaleData,
82
- withInterceptors
83
- } from "./chunk-3MCIETCQ.js";
84
- import {
85
- ANIMATION_MODULE_TYPE,
86
- APP_INITIALIZER,
87
- ChangeDetectionScheduler,
88
- ChangeDetectionStrategy,
89
- ChangeDetectorRef,
90
- Component,
91
- DOCUMENT,
92
- DestroyRef,
93
- ElementRef,
94
- EventEmitter,
95
- FactoryTarget,
96
- Injectable,
97
- InjectionToken,
98
- Injector,
99
- Input,
100
- NgModule,
101
- NgZone,
102
- Output,
103
- Renderer2,
104
- RendererFactory2,
105
- RuntimeError,
106
- ViewChild,
107
- ViewEncapsulation,
108
- __decorate,
109
- __spreadProps,
110
- __spreadValues,
111
- booleanAttribute,
112
- computed,
113
- core_exports,
114
- effect,
115
- filter,
116
- firstValueFrom,
117
- forwardRef,
118
- importProvidersFrom,
119
- inject,
120
- makeEnvironmentProviders,
121
- model,
122
- performanceMarkFeature,
123
- provideZonelessChangeDetection,
124
- signal,
125
- startWith,
126
- viewChild,
127
- ɵɵngDeclareClassMetadata,
128
- ɵɵngDeclareComponent,
129
- ɵɵngDeclareFactory,
130
- ɵɵngDeclareInjectable,
131
- ɵɵngDeclareInjector,
132
- ɵɵngDeclareNgModule
133
- } from "./chunk-XQY5SPGI.js";
134
-
135
- // node_modules/@angular/common/locales/zh.js
136
- var u = void 0;
137
- function plural(val) {
138
- const n = val;
139
- return 5;
140
- }
141
- var zh_default = ["zh", [["\u4E0A\u5348", "\u4E0B\u5348"]], u, [["\u65E5", "\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D"], ["\u5468\u65E5", "\u5468\u4E00", "\u5468\u4E8C", "\u5468\u4E09", "\u5468\u56DB", "\u5468\u4E94", "\u5468\u516D"], ["\u661F\u671F\u65E5", "\u661F\u671F\u4E00", "\u661F\u671F\u4E8C", "\u661F\u671F\u4E09", "\u661F\u671F\u56DB", "\u661F\u671F\u4E94", "\u661F\u671F\u516D"], ["\u5468\u65E5", "\u5468\u4E00", "\u5468\u4E8C", "\u5468\u4E09", "\u5468\u56DB", "\u5468\u4E94", "\u5468\u516D"]], u, [["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], ["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], ["\u4E00\u6708", "\u4E8C\u6708", "\u4E09\u6708", "\u56DB\u6708", "\u4E94\u6708", "\u516D\u6708", "\u4E03\u6708", "\u516B\u6708", "\u4E5D\u6708", "\u5341\u6708", "\u5341\u4E00\u6708", "\u5341\u4E8C\u6708"]], u, [["\u516C\u5143\u524D", "\u516C\u5143"]], 0, [6, 0], ["y/M/d", "y\u5E74M\u6708d\u65E5", u, "y\u5E74M\u6708d\u65E5EEEE"], ["HH:mm", "HH:mm:ss", "z HH:mm:ss", "zzzz HH:mm:ss"], ["{1} {0}", u, u, u], [".", ",", ";", "%", "+", "-", "E", "\xD7", "\u2030", "\u221E", "NaN", ":"], ["#,##0.###", "#,##0%", "\xA4#,##0.00", "#E0"], "CNY", "\xA5", "\u4EBA\u6C11\u5E01", { "AUD": ["AU$", "$"], "BYN": [u, "\u0440."], "CNY": ["\xA5"], "ILR": ["ILS"], "JPY": ["JP\xA5", "\xA5"], "KRW": ["\uFFE6", "\u20A9"], "PHP": [u, "\u20B1"], "RUR": [u, "\u0440."], "TWD": ["NT$"], "USD": ["US$", "$"], "XXX": [] }, "ltr", plural];
142
-
143
- // node_modules/@angular/platform-browser/fesm2022/animations/async.mjs
144
- var ANIMATION_PREFIX = "@";
145
- var AsyncAnimationRendererFactory = class _AsyncAnimationRendererFactory {
146
- doc;
147
- delegate;
148
- zone;
149
- animationType;
150
- moduleImpl;
151
- _rendererFactoryPromise = null;
152
- scheduler = null;
153
- injector = inject(Injector);
154
- loadingSchedulerFn = inject(\u0275ASYNC_ANIMATION_LOADING_SCHEDULER_FN, {
155
- optional: true
156
- });
157
- _engine;
158
- /**
159
- *
160
- * @param moduleImpl allows to provide a mock implmentation (or will load the animation module)
161
- */
162
- constructor(doc, delegate, zone, animationType, moduleImpl) {
163
- this.doc = doc;
164
- this.delegate = delegate;
165
- this.zone = zone;
166
- this.animationType = animationType;
167
- this.moduleImpl = moduleImpl;
168
- }
169
- /** @docs-private */
170
- ngOnDestroy() {
171
- this._engine?.flush();
172
- }
173
- /**
174
- * @internal
175
- */
176
- loadImpl() {
177
- const loadFn = () => this.moduleImpl ?? import("./chunk-SCXPYFOB.js").then((m) => m);
178
- let moduleImplPromise;
179
- if (this.loadingSchedulerFn) {
180
- moduleImplPromise = this.loadingSchedulerFn(loadFn);
181
- } else {
182
- moduleImplPromise = loadFn();
183
- }
184
- return moduleImplPromise.catch((e) => {
185
- throw new RuntimeError(5300, (typeof ngDevMode === "undefined" || ngDevMode) && "Async loading for animations package was enabled, but loading failed. Angular falls back to using regular rendering. No animations will be displayed and their styles won't be applied.");
186
- }).then(({ \u0275createEngine, \u0275AnimationRendererFactory }) => {
187
- this._engine = \u0275createEngine(this.animationType, this.doc);
188
- const rendererFactory = new \u0275AnimationRendererFactory(this.delegate, this._engine, this.zone);
189
- this.delegate = rendererFactory;
190
- return rendererFactory;
191
- });
192
- }
193
- /**
194
- * This method is delegating the renderer creation to the factories.
195
- * It uses default factory while the animation factory isn't loaded
196
- * and will rely on the animation factory once it is loaded.
197
- *
198
- * Calling this method will trigger as side effect the loading of the animation module
199
- * if the renderered component uses animations.
200
- */
201
- createRenderer(hostElement, rendererType) {
202
- const renderer = this.delegate.createRenderer(hostElement, rendererType);
203
- if (renderer.\u0275type === 0) {
204
- return renderer;
205
- }
206
- if (typeof renderer.throwOnSyntheticProps === "boolean") {
207
- renderer.throwOnSyntheticProps = false;
208
- }
209
- const dynamicRenderer = new DynamicDelegationRenderer(renderer);
210
- if (rendererType?.data?.["animation"] && !this._rendererFactoryPromise) {
211
- this._rendererFactoryPromise = this.loadImpl();
212
- }
213
- this._rendererFactoryPromise?.then((animationRendererFactory) => {
214
- const animationRenderer = animationRendererFactory.createRenderer(hostElement, rendererType);
215
- dynamicRenderer.use(animationRenderer);
216
- this.scheduler ??= this.injector.get(ChangeDetectionScheduler, null, { optional: true });
217
- this.scheduler?.notify(
218
- 10
219
- /* NotificationSource.AsyncAnimationsLoaded */
220
- );
221
- }).catch((e) => {
222
- dynamicRenderer.use(renderer);
223
- });
224
- return dynamicRenderer;
225
- }
226
- begin() {
227
- this.delegate.begin?.();
228
- }
229
- end() {
230
- this.delegate.end?.();
231
- }
232
- whenRenderingDone() {
233
- return this.delegate.whenRenderingDone?.() ?? Promise.resolve();
234
- }
235
- /**
236
- * Used during HMR to clear any cached data about a component.
237
- * @param componentId ID of the component that is being replaced.
238
- */
239
- componentReplaced(componentId) {
240
- this._engine?.flush();
241
- this.delegate.componentReplaced?.(componentId);
242
- }
243
- static \u0275fac = \u0275\u0275ngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: core_exports, type: _AsyncAnimationRendererFactory, deps: "invalid", target: FactoryTarget.Injectable });
244
- static \u0275prov = \u0275\u0275ngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: core_exports, type: _AsyncAnimationRendererFactory });
245
- };
246
- \u0275\u0275ngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: core_exports, type: AsyncAnimationRendererFactory, decorators: [{
247
- type: Injectable
248
- }], ctorParameters: () => [{ type: Document }, { type: RendererFactory2 }, { type: NgZone }, { type: void 0 }, { type: Promise }] });
249
- var DynamicDelegationRenderer = class {
250
- delegate;
251
- // List of callbacks that need to be replayed on the animation renderer once its loaded
252
- replay = [];
253
- \u0275type = 1;
254
- constructor(delegate) {
255
- this.delegate = delegate;
256
- }
257
- use(impl) {
258
- this.delegate = impl;
259
- if (this.replay !== null) {
260
- for (const fn of this.replay) {
261
- fn(impl);
262
- }
263
- this.replay = null;
264
- }
265
- }
266
- get data() {
267
- return this.delegate.data;
268
- }
269
- destroy() {
270
- this.replay = null;
271
- this.delegate.destroy();
272
- }
273
- createElement(name, namespace) {
274
- return this.delegate.createElement(name, namespace);
275
- }
276
- createComment(value) {
277
- return this.delegate.createComment(value);
278
- }
279
- createText(value) {
280
- return this.delegate.createText(value);
281
- }
282
- get destroyNode() {
283
- return this.delegate.destroyNode;
284
- }
285
- appendChild(parent, newChild) {
286
- this.delegate.appendChild(parent, newChild);
287
- }
288
- insertBefore(parent, newChild, refChild, isMove) {
289
- this.delegate.insertBefore(parent, newChild, refChild, isMove);
290
- }
291
- removeChild(parent, oldChild, isHostElement, requireSynchronousElementRemoval) {
292
- this.delegate.removeChild(parent, oldChild, isHostElement, requireSynchronousElementRemoval);
293
- }
294
- selectRootElement(selectorOrNode, preserveContent) {
295
- return this.delegate.selectRootElement(selectorOrNode, preserveContent);
296
- }
297
- parentNode(node) {
298
- return this.delegate.parentNode(node);
299
- }
300
- nextSibling(node) {
301
- return this.delegate.nextSibling(node);
302
- }
303
- setAttribute(el, name, value, namespace) {
304
- this.delegate.setAttribute(el, name, value, namespace);
305
- }
306
- removeAttribute(el, name, namespace) {
307
- this.delegate.removeAttribute(el, name, namespace);
308
- }
309
- addClass(el, name) {
310
- this.delegate.addClass(el, name);
311
- }
312
- removeClass(el, name) {
313
- this.delegate.removeClass(el, name);
314
- }
315
- setStyle(el, style, value, flags) {
316
- this.delegate.setStyle(el, style, value, flags);
317
- }
318
- removeStyle(el, style, flags) {
319
- this.delegate.removeStyle(el, style, flags);
320
- }
321
- setProperty(el, name, value) {
322
- if (this.shouldReplay(name)) {
323
- this.replay.push((renderer) => renderer.setProperty(el, name, value));
324
- }
325
- this.delegate.setProperty(el, name, value);
326
- }
327
- setValue(node, value) {
328
- this.delegate.setValue(node, value);
329
- }
330
- listen(target, eventName, callback, options) {
331
- if (this.shouldReplay(eventName)) {
332
- this.replay.push((renderer) => renderer.listen(target, eventName, callback, options));
333
- }
334
- return this.delegate.listen(target, eventName, callback, options);
335
- }
336
- shouldReplay(propOrEventName) {
337
- return this.replay !== null && propOrEventName.startsWith(ANIMATION_PREFIX);
338
- }
339
- };
340
- var \u0275ASYNC_ANIMATION_LOADING_SCHEDULER_FN = new InjectionToken(ngDevMode ? "async_animation_loading_scheduler_fn" : "");
341
- function provideAnimationsAsync(type = "animations") {
342
- performanceMarkFeature("NgAsyncAnimations");
343
- if (false) {
344
- type = "noop";
345
- }
346
- return makeEnvironmentProviders([
347
- {
348
- provide: RendererFactory2,
349
- useFactory: (doc, renderer, zone) => {
350
- return new AsyncAnimationRendererFactory(doc, renderer, zone, type);
351
- },
352
- deps: [DOCUMENT, DomRendererFactory2, NgZone]
353
- },
354
- {
355
- provide: ANIMATION_MODULE_TYPE,
356
- useValue: type === "noop" ? "NoopAnimations" : "BrowserAnimations"
357
- }
358
- ]);
359
- }
360
-
361
- // src/app/theme.service.ts
362
- var ThemeType;
363
- (function(ThemeType2) {
364
- ThemeType2["dark"] = "dark";
365
- ThemeType2["default"] = "default";
366
- })(ThemeType || (ThemeType = {}));
367
- var ThemeService = class ThemeService2 {
368
- currentTheme = ThemeType.default;
369
- constructor() {
370
- }
371
- reverseTheme(theme) {
372
- return theme === ThemeType.dark ? ThemeType.default : ThemeType.dark;
373
- }
374
- removeUnusedTheme(theme) {
375
- document.documentElement.classList.remove(theme);
376
- const removedThemeStyle = document.getElementById(theme);
377
- if (removedThemeStyle) {
378
- document.head.removeChild(removedThemeStyle);
379
- }
380
- }
381
- loadCss(href, id) {
382
- return new Promise((resolve, reject) => {
383
- const style = document.createElement("link");
384
- style.rel = "stylesheet";
385
- style.href = href;
386
- style.id = id;
387
- style.onload = resolve;
388
- style.onerror = reject;
389
- document.head.append(style);
390
- });
391
- }
392
- loadTheme(firstLoad = true) {
393
- const theme = this.currentTheme;
394
- if (firstLoad) {
395
- document.documentElement.classList.add(theme);
396
- }
397
- return new Promise((resolve, reject) => {
398
- this.loadCss(`${theme}.css`, theme).then((e) => {
399
- if (!firstLoad) {
400
- document.documentElement.classList.add(theme);
401
- }
402
- this.removeUnusedTheme(this.reverseTheme(theme));
403
- resolve(e);
404
- }, (e) => reject(e));
405
- });
406
- }
407
- toggleTheme() {
408
- this.currentTheme = this.reverseTheme(this.currentTheme);
409
- return this.loadTheme(false);
410
- }
411
- static ctorParameters = () => [];
412
- };
413
- ThemeService = __decorate([
414
- Injectable({
415
- providedIn: "root"
416
- })
417
- ], ThemeService);
418
-
419
- // src/app/app-initializer.service.ts
420
- var AppInitializerProvider = {
421
- provide: APP_INITIALIZER,
422
- useFactory: (themeService) => () => {
423
- return themeService.loadTheme();
424
- },
425
- deps: [ThemeService],
426
- multi: true
427
- };
428
-
429
- // src/app/app.routes.ts
430
- var routes = [
431
- {
432
- path: "",
433
- redirectTo: "dashboard",
434
- pathMatch: "full"
435
- },
436
- {
437
- path: "dashboard",
438
- loadChildren: () => import("./chunk-CTOEAJQK.js").then((m) => m.DashboardModule)
439
- },
440
- {
441
- path: "tasks",
442
- loadChildren: () => import("./chunk-6UW4MRJZ.js").then((m) => m.TasksModule)
443
- },
444
- {
445
- path: "projects",
446
- loadChildren: () => import("./chunk-W5HGHCQT.js").then((m) => m.ProjectsModule)
447
- },
448
- {
449
- path: "settings",
450
- loadChildren: () => import("./chunk-KV72AKOD.js").then((m) => m.SettingModule)
451
- },
452
- {
453
- path: "configuration",
454
- loadChildren: () => import("./chunk-3L72DF3R.js").then((m) => m.ConfigurationModule)
455
- },
456
- {
457
- path: "dependencies",
458
- loadChildren: () => import("./chunk-GJC7CZIJ.js").then((m) => m.DependenciesModule)
459
- },
460
- {
461
- path: "rquest",
462
- loadChildren: () => import("./chunk-XF5H7E4L.js").then((m) => m.ApiClientModule)
463
- },
464
- {
465
- path: "sprite",
466
- loadChildren: () => import("./chunk-UAN42EUZ.js").then((m) => m.SpriteModule)
467
- },
468
- {
469
- path: "rd",
470
- loadChildren: () => import("./chunk-W3J23PZI.js").then((m) => m.RdModule)
471
- },
472
- {
473
- path: "issues",
474
- loadChildren: () => import("./chunk-6XUMIL3W.js").then((m) => m.IssuesModule)
475
- },
476
- {
477
- path: "nginx",
478
- loadComponent: () => import("./chunk-MMPO7QLO.js").then((m) => m.NginxComponent)
479
- },
480
- {
481
- path: "about",
482
- loadChildren: () => import("./chunk-LAVMY2SJ.js").then((m) => m.AboutRoutingModule)
483
- },
484
- {
485
- path: "**",
486
- redirectTo: "dashboard"
487
- }
488
- ];
489
-
490
- // src/app/app.config.ts
491
- registerLocaleData(zh_default);
492
- var appConfig = {
493
- providers: [
494
- AppInitializerProvider,
495
- provideZonelessChangeDetection(),
496
- provideRouter(routes),
497
- provideNzI18n(zh_CN),
498
- provideAnimationsAsync(),
499
- provideHttpClient(withInterceptors([httpErrorInterceptor])),
500
- importProvidersFrom(NzModalModule),
501
- provideMarkdown()
502
- ]
503
- };
504
-
505
- // angular:jit:style:inline:src\app\app.ts;Omhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICB9
506
- var app_default = "/* angular:styles/component:less;0ae256c0ca17f80a8721d10f9aafb5a5314af03e1bebab9a3fc4980991127c7f;D:\\ng-manager\\webapp\\src\\app\\app.ts */\n:host {\n display: block;\n height: 100vh;\n}\n/*# sourceMappingURL=app.css.map */\n";
507
-
508
- // src/app/icons/project-icons.ts
509
- var ICON_ANGULAR = `
510
- <svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
511
- <path d="M435.8 536.2H512V353z" fill="#DD0031"/>
512
- <path d="M400.9 616.8l-52.4 130.8h-97.2L512 163V64L94.9 212.7l63.6 551.5L512 960V616.8z" fill="#DD0031"/>
513
- <path d="M512 353v183.2h76.2z" fill="#C3002F"/>
514
- <path d="M512 64v99l259.8 584.6h-97.2l-52.4-130.8H512V960l353.5-195.8 63.6-551.5z" fill="#C3002F"/>
515
- </svg>
516
- `;
517
- var ICON_VUE = `
518
- <svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
519
- <path d="M615.6 123.6h165.5L512 589.7 242.9 123.6H63.5L512 900.4l448.5-776.9z" fill="#41B883"/>
520
- <path d="M781.1 123.6H615.6L512 303 408.4 123.6H242.9L512 589.7z" fill="#34495E"/>
521
- </svg>
522
- `;
523
- var ICON_REACT = `
524
- <svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
525
- <svg t="1767603739899" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9231" width="200" height="200">
526
- <path d="M512 511.8m-80 0a80 80 0 1 0 160 0 80 80 0 1 0-160 0Z" fill="#61DAFB" p-id="9232"></path>
527
- <path d="M960.5 511.8c0-62.8-73.8-117.2-188.5-150.1 28.9-115.8 18.7-206.9-35.7-238.3-54.5-31.4-138.5 5.3-224.3 88.2-85.8-82.9-169.8-119.6-224.3-88.2-54.4 31.4-64.6 122.6-35.7 238.3C137.3 394.6 63.5 449 63.5 511.8S137.3 629 252 661.9c-28.9 115.7-18.7 206.9 35.7 238.3 13.4 7.8 28.6 11.6 45.2 11.6 39.7 0 87.8-21.8 140-64.2 13-10.6 26.1-22.6 39.1-35.2 13 12.6 26.1 24.6 39.1 35.2 52.2 42.4 100.2 64.2 140 64.2 16.6 0 31.8-3.8 45.2-11.6 54.4-31.4 64.6-122.5 35.7-238.3 114.7-32.9 188.5-87.3 188.5-150.1zM716.8 157.2c35.3 20.4 42.7 94.3 17.6 194.8-36.7-8.4-76.7-14.7-119.3-18.6-24.7-34.9-50.2-66.4-75.8-94 59.2-57.3 114.2-88.4 152-88.4 9.6-0.1 18.2 2 25.5 6.2zM637 584c-13.8 24-28.4 47-43.3 69-26.1 2-53.3 3.1-81.7 3.1-28.3 0-55.5-1.1-81.6-3.1-15-22-29.5-45.1-43.3-69-14.1-24.5-26.7-48.6-38.1-72.2 11.4-23.6 24-47.7 38.1-72.2 14.1-24.5 28.7-47.4 43.4-69.1 26.1-2 53.3-3.1 81.6-3.1 28.3 0 55.5 1.1 81.6 3.1 14.7 21.6 29.3 44.6 43.4 69 14.1 24.5 26.7 48.6 38.1 72.2-11.5 23.7-24.1 47.8-38.2 72.3z m58.8-26.4c11.2 26.6 20.4 52.1 28 76.5-24.9 5.6-51.7 10.4-80.3 14 9.3-14.5 18.4-29.3 27.3-44.6 8.8-15.4 17.1-30.7 25-45.9zM512 756.5c-17.7-19.2-35.1-40.1-52.2-62.6 17.1 0.8 34.5 1.3 52.2 1.3 17.7 0 35.1-0.5 52.2-1.3-17.1 22.5-34.5 43.4-52.2 62.6zM380.5 648.1c-28.6-3.6-55.3-8.4-80.3-14 7.6-24.4 16.8-49.9 28-76.5 7.9 15.2 16.1 30.5 25 45.9 8.9 15.2 18 30 27.3 44.6zM328.2 466c-11.2-26.6-20.4-52.1-28-76.5 24.9-5.6 51.6-10.4 80.2-14-9.2 14.4-18.4 29.2-27.2 44.6-8.8 15.4-17.1 30.7-25 45.9zM512 267.1c17.3 18.7 34.8 39.8 52.1 62.7-17.1-0.8-34.4-1.3-52.1-1.3-17.7 0-35 0.5-52.1 1.3 17.3-22.9 34.8-44 52.1-62.7z m158.7 153c-8.9-15.3-18-30.1-27.2-44.6 28.6 3.6 55.3 8.4 80.2 14-7.6 24.4-16.8 49.9-28 76.5-7.8-15.2-16.1-30.5-25-45.9zM307.2 157.2c7.2-4.2 15.8-6.2 25.6-6.2 37.8 0 92.7 31.1 151.9 88.4-25.6 27.6-51.1 59.2-75.8 94-42.5 3.9-82.6 10.2-119.3 18.6-25.1-100.6-17.6-174.5 17.6-194.8zM102.5 511.8c0-40.8 60.3-84.2 160-112.6 11.1 36 25.6 73.8 43.5 112.6-17.8 38.8-32.4 76.6-43.5 112.6-99.7-28.4-160-71.9-160-112.6z m345.8 305.5c-59.7 48.5-111.1 66.4-141.1 49.2-35.3-20.4-42.7-94.3-17.6-194.8 36.7 8.4 76.7 14.7 119.3 18.6 24.4 34.5 49.9 66.1 75.8 94.2-12.1 11.7-24.2 22.9-36.4 32.8z m268.5 49.2c-29.9 17.3-81.4-0.6-141.1-49.2-12.1-9.9-24.3-21.1-36.5-32.8 26-28.1 51.4-59.7 75.8-94.2 42.5-3.9 82.6-10.2 119.3-18.7 25.2 100.6 17.7 174.5-17.5 194.9z m44.8-242.1c-11.1-36-25.6-73.8-43.5-112.6 17.8-38.8 32.4-76.6 43.5-112.6 99.7 28.5 160 71.9 160 112.6-0.1 40.7-60.4 84.2-160 112.6z" fill="#61DAFB" p-id="9233"></path></svg>
528
- </svg>
529
- `;
530
- var ICON_NODE = `
531
- <svg t="1767598826450" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8231" width="200" height="200">
532
- <path d="M875.2 262.3L546.7 72.7c-20.7-11.8-48.3-11.8-69 0L148.8 262.3c-21.5 12.2-34.5 34.9-34.5 59.7v379.2c0 24.8 13.4 47.9 34.5 60.1l86.1 49.5c41.8 20.7 56.8 20.7 75.9 20.7 62.1 0 97.4-37.8 97.4-102.7V354.4c0-5.3-4.1-9.3-9.3-9.3h-41.4c-5.3 0-9.3 4.1-9.3 9.3v374.3c0 28.8-30 57.7-78.8 33.3l-90.1-52c-3.2-2-5.3-5.3-5.3-8.9V321.9c0-3.7 2-7.3 5.3-8.9l328.1-190c3.2-1.6 7.3-1.6 10.2 0l328.5 189.6c3.2 1.6 5.3 5.3 5.3 8.9v379.2c0 3.7-2 7.3-4.9 8.9L517.9 899.3c-2.8 1.6-7.3 1.6-10.2 0l-84.4-49.9c-2.4-1.2-5.7-1.6-8.1-0.4-23.1 13.4-27.6 15-49.5 22.7-5.7 1.6-13.4 4.9 2.8 14.2l109.6 65c10.6 6.1 22.3 9.3 34.5 9.3 11.8-0.4 24-3.2 34.1-9.7l328.5-189.6c21.1-12.2 34.5-34.9 34.5-59.7V321.9c0-24.3-13.4-47.5-34.5-59.6z" fill="#689F63" p-id="8232"></path>
533
- <path d="M614.1 641.1c-86.9 0-106-21.9-112.5-65-0.8-4.9-4.5-8.1-9.3-8.1h-42.6c-5.3 0-9.3 4.1-9.3 9.3 0 55.2 30 121.4 173.8 121.4l-0.4-0.4c103.9 0 163.6-41 163.6-112.5 0-70.6-47.9-89.7-149-103.1-101.9-13.4-112.5-20.3-112.5-44.3 0-19.5 8.9-45.9 84.4-45.9 67.8 0 92.6 14.6 102.7 60.1 1.2 4.1 4.9 7.3 9.3 7.3H755c2.4 0 5.3-0.8 6.9-2.8 1.6-2 2.8-4.5 2.4-7.3-6.9-78.4-58.9-114.9-164-114.9-93.4 0-149.4 39.4-149.4 105.6 0 71.9 55.6 91.8 145.8 100.7 107.6 10.6 116.1 26.4 116.1 47.5 0 36.5-29.3 52.4-98.7 52.4z" fill="#689F63" p-id="8233"></path>
534
- </svg>
535
- `;
536
- var ICON_ESLINT = `
537
- <svg t="1768726164973" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4725" width="200" height="200">
538
- <path d="M332.72493 412.535453l171.001167-98.72725a13.830826 13.830826 0 0 1 13.83424 0l171.007994 98.72725a13.841066 13.841066 0 0 1 6.915413 11.9808v197.4545a13.858133 13.858133 0 0 1-6.918826 11.980799l-171.004581 98.72725a13.830826 13.830826 0 0 1-13.83424 0l-171.001167-98.72725a13.841066 13.841066 0 0 1-6.915413-11.980799V424.516253a13.847893 13.847893 0 0 1 6.915413-11.9808" fill="#7986CB" p-id="4726"></path>
539
- <path d="M955.265709 502.476783L750.950409 147.036155c-7.420586-12.8512-21.128533-22.330026-35.969705-22.330026H306.329624c-14.844586 0-28.555946 9.478826-35.976532 22.330026L66.037792 501.701957c-7.420586 12.854613-7.420586 29.081599 0 41.932798L270.353092 896.170637c7.420586 12.8512 21.131946 19.421866 35.976532 19.421866h408.65108c14.83776 0 28.552532-6.372693 35.969705-19.227306l204.3153-353.109322c7.427413-12.847786 7.427413-27.921066 0-40.768852m-169.181861 170.922661c0 5.2224-3.14368 10.059093-7.676586 12.673706l-260.249592 150.152529a14.80704 14.80704 0 0 1-14.725119 0l-260.450978-150.152529c-4.52608-2.614613-7.693653-7.44448-7.693653-12.673706v-300.30847c0-5.229226 3.119787-10.059093 7.649279-12.677119l260.242765-150.152529a14.779733 14.779733 0 0 1 14.71488 0l260.471458 150.152529c4.529493 2.618027 7.717546 7.447893 7.717546 12.677119z" fill="#3F51B5" p-id="4727"></path>
540
- </svg>
541
- `;
542
- var ICON_SVN = `
543
- <svg t="1772087297160" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12394" data-spm-anchor-id="a313x.search_index.0.i16.3dc23a81kNbNJb" width="48" height="48">
544
- <path d="M0 512c0 282.848 229.312 512 512 512 282.848 0 512-229.312 512-512 0-282.848-229.312-512-512-512C229.152 0 0 229.152 0 512z" fill="#333333" p-id="12395" data-spm-anchor-id="a313x.search_index.0.i13.3dc23a81kNbNJb" class="selected"></path>
545
- <path d="M948.48 449.824c-34.912 45.408-101.056 22.272-131.456 40.032-44.288 26.016-42.88 89.152-151.264 173.952-26.336 20.64 27.968 128.768 4.48 152.928-23.872 24.544-119.84 25.792-143.104 12.384-34.08-19.808-7.36-71.2 0.192-146.304-70.016 7.232-92.672 5.984-162.912 3.104 10.816 56.96 26.336 120.512 3.68 141.376-18.592 16.928-108.608 18.784-136.768 0.192-35.328-23.328 25.504-156 4.896-158.272-23.68-2.464-168.416 3.296-142.88-155.808 27.136 40.032 73.28 77.792 126.368 60.864 3.072-58.208 20-113.92 48.384-158.496 37.568-58.624 95.328-97.824 168.416-97.824 72.256 0 132.48 31.776 171.872 81.728 30.816 39.2 48.8 89.984 48.992 145.088 76.352-58.208 20.224-200.8 111.648-254.24 65.12-37.984 141.248-18.368 177.6 41.888 19.392 31.584 25.312 87.072 1.824 117.408z" fill="#ffffff" p-id="12396" data-spm-anchor-id="a313x.search_index.0.i14.3dc23a81kNbNJb" class=""></path>
546
- </svg>
547
- `;
548
-
549
- // src/app/icons/project-icon-registry.ts
550
- var ProjectIconRegistry = class ProjectIconRegistry2 {
551
- icons;
552
- inited = false;
553
- constructor(icons) {
554
- this.icons = icons;
555
- }
556
- init() {
557
- if (this.inited)
558
- return;
559
- this.inited = true;
560
- this.icons.addIconLiteral("proj:angular", ICON_ANGULAR);
561
- this.icons.addIconLiteral("proj:vue", ICON_VUE);
562
- this.icons.addIconLiteral("proj:react", ICON_REACT);
563
- this.icons.addIconLiteral("proj:node", ICON_NODE);
564
- this.icons.addIconLiteral("proj:eslint", ICON_ESLINT);
565
- this.icons.addIconLiteral("proj:svn", ICON_SVN);
566
- }
567
- static ctorParameters = () => [
568
- { type: NzIconService }
569
- ];
570
- };
571
- ProjectIconRegistry = __decorate([
572
- Injectable({ providedIn: "root" })
573
- ], ProjectIconRegistry);
574
-
575
- // angular:jit:template:src\app\layout\layout.component.html
576
- var layout_component_default = '<nz-layout class="app-layout">\r\n @if (visible()) {\r\n <div\r\n class="ws-banner-wrap"\r\n [class.leaving]="leaving()"\r\n (transitionend)="onWrapTransitionEnd($event)"\r\n >\r\n <div\r\n class="ws-banner-inner"\r\n [class.leaving]="leaving()"\r\n (animationend)="onInnerAnimationEnd($event)"\r\n >\r\n <ngm-header></ngm-header>\r\n </div>\r\n </div>\r\n }\r\n <nz-layout class="app-content">\r\n <ngm-sidebar></ngm-sidebar>\r\n <nz-layout>\r\n <nz-content>\r\n <div class="inner-content">\r\n <router-outlet></router-outlet>\r\n </div>\r\n </nz-content>\r\n </nz-layout>\r\n </nz-layout>\r\n\r\n <ngm-footer></ngm-footer>\r\n</nz-layout>\r\n';
577
-
578
- // angular:jit:style:src\app\layout\layout.component.less
579
- var layout_component_default2 = "/* src/app/layout/layout.component.less */\nhtml.default {\n}\nhtml.default :root {\n --app-gray: #e6f7ff;\n --app-primary: #1890ff;\n --app-primary-1: #e6f7ff;\n --app-primary-2: #bae7ff;\n --app-primary-3: #91d5ff;\n --app-primary-4: #69c0ff;\n --app-primary-5: #40a9ff;\n --app-primary-6: #1890ff;\n --app-text-color: rgba(0, 0, 0, 0.85);\n --app-text-secondary: rgba(0, 0, 0, 0.45);\n --text-color-primary: #1890ff;\n --app-component-bg: #fff;\n --app-border-color: #d9d9d9;\n --header-error-background: #ff4d4f;\n}\nhtml.default :root {\n --text-color-gray: #888;\n}\nhtml.default :host .inner-content {\n background: #fff;\n}\nhtml.dark {\n}\nhtml.dark :root {\n --text-color-gray: #bbb;\n}\nhtml.dark :host .inner-content {\n background: #141414;\n}\n:host {\n display: flex;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n:host .app-layout {\n height: 100vh;\n width: 100%;\n}\n:host .app-layout ngm-header {\n width: 100%;\n}\n:host .app-content {\n flex-direction: row;\n}\n:host nz-content .inner-content {\n border-radius: 8px;\n height: 100%;\n}\n:host nz-footer {\n text-align: center;\n}\n.ws-banner-wrap {\n height: 48px;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n.ws-banner-wrap.leaving {\n height: 0;\n}\n.ws-banner-inner {\n height: 48px;\n display: flex;\n align-items: stretch;\n}\n.ws-banner-inner.leaving {\n animation: fadeOutUpSoft 0.35s ease forwards;\n}\n@keyframes fadeOutUpSoft {\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(-30%);\n }\n}\n/*# sourceMappingURL=layout.component.css.map */\n";
580
-
581
- // node_modules/ng-zorro-antd/fesm2022/ng-zorro-antd-breadcrumb.mjs
582
- var NzBreadcrumb = class {
583
- };
584
- var NzBreadCrumbSeparatorComponent = class _NzBreadCrumbSeparatorComponent {
585
- static \u0275fac = \u0275\u0275ngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: core_exports, type: _NzBreadCrumbSeparatorComponent, deps: [], target: FactoryTarget.Component });
586
- static \u0275cmp = \u0275\u0275ngDeclareComponent({ minVersion: "14.0.0", version: "20.3.0", type: _NzBreadCrumbSeparatorComponent, isStandalone: true, selector: "nz-breadcrumb-separator", host: { classAttribute: "ant-breadcrumb-separator" }, exportAs: ["nzBreadcrumbSeparator"], ngImport: core_exports, template: `<ng-content></ng-content>`, isInline: true });
587
- };
588
- \u0275\u0275ngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: core_exports, type: NzBreadCrumbSeparatorComponent, decorators: [{
589
- type: Component,
590
- args: [{
591
- selector: "nz-breadcrumb-separator",
592
- exportAs: "nzBreadcrumbSeparator",
593
- template: `<ng-content></ng-content>`,
594
- host: {
595
- class: "ant-breadcrumb-separator"
596
- }
597
- }]
598
- }] });
599
- var NzBreadCrumbItemComponent = class _NzBreadCrumbItemComponent {
600
- nzBreadCrumbComponent = inject(NzBreadcrumb);
601
- /**
602
- * Dropdown content of a breadcrumb item.
603
- */
604
- nzOverlay;
605
- static \u0275fac = \u0275\u0275ngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: core_exports, type: _NzBreadCrumbItemComponent, deps: [], target: FactoryTarget.Component });
606
- static \u0275cmp = \u0275\u0275ngDeclareComponent({ minVersion: "17.0.0", version: "20.3.0", type: _NzBreadCrumbItemComponent, isStandalone: true, selector: "nz-breadcrumb-item", inputs: { nzOverlay: "nzOverlay" }, exportAs: ["nzBreadcrumbItem"], ngImport: core_exports, template: `
607
- @if (!!nzOverlay) {
608
- <span class="ant-breadcrumb-overlay-link" nz-dropdown [nzDropdownMenu]="nzOverlay">
609
- <ng-template [ngTemplateOutlet]="noMenuTpl"></ng-template>
610
- <nz-icon nzType="down" />
611
- </span>
612
- } @else {
613
- <ng-template [ngTemplateOutlet]="noMenuTpl" />
614
- }
615
-
616
- @if (nzBreadCrumbComponent.nzSeparator) {
617
- <nz-breadcrumb-separator>
618
- <ng-container *nzStringTemplateOutlet="nzBreadCrumbComponent.nzSeparator">
619
- {{ nzBreadCrumbComponent.nzSeparator }}
620
- </ng-container>
621
- </nz-breadcrumb-separator>
622
- }
623
-
624
- <ng-template #noMenuTpl>
625
- <span class="ant-breadcrumb-link">
626
- <ng-content />
627
- </span>
628
- </ng-template>
629
- `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NzBreadCrumbSeparatorComponent, selector: "nz-breadcrumb-separator", exportAs: ["nzBreadcrumbSeparator"] }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "directive", type: NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzArrow", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzOutletModule }, { kind: "directive", type: NzStringTemplateOutletDirective, selector: "[nzStringTemplateOutlet]", inputs: ["nzStringTemplateOutletContext", "nzStringTemplateOutlet"], exportAs: ["nzStringTemplateOutlet"] }], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None });
630
- };
631
- \u0275\u0275ngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: core_exports, type: NzBreadCrumbItemComponent, decorators: [{
632
- type: Component,
633
- args: [{
634
- changeDetection: ChangeDetectionStrategy.OnPush,
635
- encapsulation: ViewEncapsulation.None,
636
- selector: "nz-breadcrumb-item",
637
- exportAs: "nzBreadcrumbItem",
638
- imports: [NgTemplateOutlet, NzBreadCrumbSeparatorComponent, NzDropDownModule, NzIconModule, NzOutletModule],
639
- template: `
640
- @if (!!nzOverlay) {
641
- <span class="ant-breadcrumb-overlay-link" nz-dropdown [nzDropdownMenu]="nzOverlay">
642
- <ng-template [ngTemplateOutlet]="noMenuTpl"></ng-template>
643
- <nz-icon nzType="down" />
644
- </span>
645
- } @else {
646
- <ng-template [ngTemplateOutlet]="noMenuTpl" />
647
- }
648
-
649
- @if (nzBreadCrumbComponent.nzSeparator) {
650
- <nz-breadcrumb-separator>
651
- <ng-container *nzStringTemplateOutlet="nzBreadCrumbComponent.nzSeparator">
652
- {{ nzBreadCrumbComponent.nzSeparator }}
653
- </ng-container>
654
- </nz-breadcrumb-separator>
655
- }
656
-
657
- <ng-template #noMenuTpl>
658
- <span class="ant-breadcrumb-link">
659
- <ng-content />
660
- </span>
661
- </ng-template>
662
- `
663
- }]
664
- }], propDecorators: { nzOverlay: [{
665
- type: Input
666
- }] } });
667
- var NzBreadCrumbComponent = class _NzBreadCrumbComponent {
668
- injector = inject(Injector);
669
- cdr = inject(ChangeDetectorRef);
670
- elementRef = inject(ElementRef);
671
- renderer = inject(Renderer2);
672
- directionality = inject(Directionality);
673
- destroyRef = inject(DestroyRef);
674
- nzAutoGenerate = false;
675
- nzSeparator = "/";
676
- nzRouteLabel = "breadcrumb";
677
- nzRouteLabelFn = (label) => label;
678
- nzRouteFn = (route) => route;
679
- breadcrumbs = [];
680
- dir = "ltr";
681
- ngOnInit() {
682
- if (this.nzAutoGenerate) {
683
- this.registerRouterChange();
684
- }
685
- this.directionality.change?.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((direction) => {
686
- this.dir = direction;
687
- this.prepareComponentForRtl();
688
- this.cdr.detectChanges();
689
- });
690
- this.dir = this.directionality.value;
691
- this.prepareComponentForRtl();
692
- }
693
- navigate(url, e) {
694
- e.preventDefault();
695
- this.injector.get(Router).navigateByUrl(url);
696
- }
697
- registerRouterChange() {
698
- try {
699
- const router = this.injector.get(Router);
700
- const activatedRoute = this.injector.get(ActivatedRoute);
701
- router.events.pipe(
702
- filter((e) => e instanceof NavigationEnd),
703
- takeUntilDestroyed(this.destroyRef),
704
- startWith(true)
705
- // trigger initial render
706
- ).subscribe(() => {
707
- this.breadcrumbs = this.getBreadcrumbs(activatedRoute.root);
708
- this.cdr.markForCheck();
709
- });
710
- } catch {
711
- throw new Error(`${PREFIX} You should import RouterModule if you want to use 'NzAutoGenerate'.`);
712
- }
713
- }
714
- getBreadcrumbs(route, url = "", breadcrumbs = []) {
715
- const children = route.children;
716
- if (children.length === 0) {
717
- return breadcrumbs;
718
- }
719
- for (const child of children) {
720
- if (child.outlet === PRIMARY_OUTLET) {
721
- const routeUrl = child.snapshot.url.map((segment) => segment.path).filter((path) => path).join("/");
722
- const nextUrl = routeUrl ? `${url}/${routeUrl}` : url;
723
- const breadcrumbLabel = this.nzRouteLabelFn(child.snapshot.data[this.nzRouteLabel]);
724
- const shapedUrl = this.nzRouteFn(nextUrl);
725
- if (routeUrl && breadcrumbLabel) {
726
- const breadcrumb = {
727
- label: breadcrumbLabel,
728
- params: child.snapshot.params,
729
- url: shapedUrl
730
- };
731
- breadcrumbs.push(breadcrumb);
732
- }
733
- return this.getBreadcrumbs(child, nextUrl, breadcrumbs);
734
- }
735
- }
736
- return breadcrumbs;
737
- }
738
- prepareComponentForRtl() {
739
- if (this.dir === "rtl") {
740
- this.renderer.addClass(this.elementRef.nativeElement, "ant-breadcrumb-rtl");
741
- } else {
742
- this.renderer.removeClass(this.elementRef.nativeElement, "ant-breadcrumb-rtl");
743
- }
744
- }
745
- static \u0275fac = \u0275\u0275ngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: core_exports, type: _NzBreadCrumbComponent, deps: [], target: FactoryTarget.Component });
746
- static \u0275cmp = \u0275\u0275ngDeclareComponent({ minVersion: "17.0.0", version: "20.3.0", type: _NzBreadCrumbComponent, isStandalone: true, selector: "nz-breadcrumb", inputs: { nzAutoGenerate: ["nzAutoGenerate", "nzAutoGenerate", booleanAttribute], nzSeparator: "nzSeparator", nzRouteLabel: "nzRouteLabel", nzRouteLabelFn: "nzRouteLabelFn", nzRouteFn: "nzRouteFn" }, host: { classAttribute: "ant-breadcrumb" }, providers: [{ provide: NzBreadcrumb, useExisting: forwardRef(() => _NzBreadCrumbComponent) }], exportAs: ["nzBreadcrumb"], ngImport: core_exports, template: `
747
- <ng-content />
748
- @if (nzAutoGenerate && breadcrumbs.length) {
749
- @for (breadcrumb of breadcrumbs; track breadcrumb.url) {
750
- <nz-breadcrumb-item>
751
- <a [attr.href]="breadcrumb.url" (click)="navigate(breadcrumb.url, $event)">{{ breadcrumb.label }}</a>
752
- </nz-breadcrumb-item>
753
- }
754
- }
755
- `, isInline: true, dependencies: [{ kind: "component", type: NzBreadCrumbItemComponent, selector: "nz-breadcrumb-item", inputs: ["nzOverlay"], exportAs: ["nzBreadcrumbItem"] }], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None });
756
- };
757
- \u0275\u0275ngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: core_exports, type: NzBreadCrumbComponent, decorators: [{
758
- type: Component,
759
- args: [{
760
- changeDetection: ChangeDetectionStrategy.OnPush,
761
- encapsulation: ViewEncapsulation.None,
762
- selector: "nz-breadcrumb",
763
- exportAs: "nzBreadcrumb",
764
- providers: [{ provide: NzBreadcrumb, useExisting: forwardRef(() => NzBreadCrumbComponent) }],
765
- imports: [NzBreadCrumbItemComponent],
766
- template: `
767
- <ng-content />
768
- @if (nzAutoGenerate && breadcrumbs.length) {
769
- @for (breadcrumb of breadcrumbs; track breadcrumb.url) {
770
- <nz-breadcrumb-item>
771
- <a [attr.href]="breadcrumb.url" (click)="navigate(breadcrumb.url, $event)">{{ breadcrumb.label }}</a>
772
- </nz-breadcrumb-item>
773
- }
774
- }
775
- `,
776
- host: {
777
- class: "ant-breadcrumb"
778
- }
779
- }]
780
- }], propDecorators: { nzAutoGenerate: [{
781
- type: Input,
782
- args: [{ transform: booleanAttribute }]
783
- }], nzSeparator: [{
784
- type: Input
785
- }], nzRouteLabel: [{
786
- type: Input
787
- }], nzRouteLabelFn: [{
788
- type: Input
789
- }], nzRouteFn: [{
790
- type: Input
791
- }] } });
792
- var NzBreadCrumbModule = class _NzBreadCrumbModule {
793
- static \u0275fac = \u0275\u0275ngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: core_exports, type: _NzBreadCrumbModule, deps: [], target: FactoryTarget.NgModule });
794
- static \u0275mod = \u0275\u0275ngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.0", ngImport: core_exports, type: _NzBreadCrumbModule, imports: [NzBreadCrumbComponent, NzBreadCrumbItemComponent, NzBreadCrumbSeparatorComponent], exports: [NzBreadCrumbComponent, NzBreadCrumbItemComponent, NzBreadCrumbSeparatorComponent] });
795
- static \u0275inj = \u0275\u0275ngDeclareInjector({ minVersion: "12.0.0", version: "20.3.0", ngImport: core_exports, type: _NzBreadCrumbModule, imports: [NzBreadCrumbComponent, NzBreadCrumbItemComponent] });
796
- };
797
- \u0275\u0275ngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: core_exports, type: NzBreadCrumbModule, decorators: [{
798
- type: NgModule,
799
- args: [{
800
- imports: [NzBreadCrumbComponent, NzBreadCrumbItemComponent, NzBreadCrumbSeparatorComponent],
801
- exports: [NzBreadCrumbComponent, NzBreadCrumbItemComponent, NzBreadCrumbSeparatorComponent]
802
- }]
803
- }] });
804
-
805
- // angular:jit:style:inline:src\app\layout\footer\layout-footer.component.ts;CiAgICAgIG56LWZvb3RlciB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgYXBwLXN5c3RlbS1sb2cgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICA=
806
- var layout_footer_component_default = "/* angular:styles/component:less;4ffcb9fbc064aa82c85e1c8f150dbb95be50835959ea1fe0a167e4348f747d05;D:\\ng-manager\\webapp\\src\\app\\layout\\footer\\layout-footer.component.ts */\nnz-footer {\n padding: 0;\n align-items: center;\n display: flex;\n}\napp-system-log {\n width: 100%;\n}\n/*# sourceMappingURL=layout-footer.component.css.map */\n";
807
-
808
- // angular:jit:template:src\app\layout\footer\system-log\system-log.component.html
809
- var system_log_component_default = `<div class="status-bar">\r
810
- <div class="project-path">\r
811
- <a\r
812
- nz-button\r
813
- class="home"\r
814
- nzType="text"\r
815
- routerLink="/projects"\r
816
- nz-tooltip="\u9879\u76EE\u7BA1\u7406"\r
817
- nzTooltipPlacement="top"\r
818
- >\r
819
- <nz-icon class="icon" nzType="home" nzTheme="outline" />\r
820
- </a>\r
821
- <button\r
822
- nz-button\r
823
- class="path"\r
824
- nzType="text"\r
825
- [nz-tooltip]="curProjectPath()"\r
826
- nzTooltipPlacement="top"\r
827
- >\r
828
- <nz-icon nzType="folder" class="icon" nzTheme="outline" />\r
829
- <span>{{ curProjectPath() }}</span>\r
830
- </button>\r
831
- </div>\r
832
- <div class="last-log" (click)="openLog()" nz-tooltip="\u6253\u5F00\u65E5\u5FD7">\r
833
- <nz-icon nzType="profile" class="icon" nzTheme="outline" />\r
834
- @if (lastLine()) {\r
835
- <nz-tag [nzColor]="getColor(lastLine()?.level)" class="level-tag">\r
836
- {{ lastLine()?.level | uppercase }}\r
837
- </nz-tag>\r
838
- <div class="info">{{ lastLine()?.text }}</div>\r
839
- <div class="time">{{ lastLine()?.ts | date: 'yyyy-MM-dd HH:mm:ss' }}</div>\r
840
- } @else {\r
841
- <nz-tag nzColor="default">INFO</nz-tag>\r
842
- <div class="info">\u6682\u65E0\u65E5\u5FD7</div>\r
843
- <div class="time">--</div>\r
844
- }\r
845
- </div>\r
846
- <div class="actions">\r
847
- <a nz-button nzType="link" routerLink="/about/feedback" nzTooltipPlacement="top" nz-tooltip="\u53CD\u9988\u4E0E\u5E2E\u52A9">\r
848
- <nz-icon nzType="bug" nzTheme="outline" />\r
849
- </a>\r
850
- </div>\r
851
- </div>\r
852
- <nz-drawer\r
853
- [nzVisible]="isOpen()"\r
854
- (nzOnClose)="closeLog()"\r
855
- [nzMaskClosable]="false"\r
856
- [nzMask]="false"\r
857
- nzTitle="\u65E5\u5FD7"\r
858
- nzPlacement="bottom"\r
859
- [nzExtra]="extra"\r
860
- [nzHeight]="300"\r
861
- [nzBodyStyle]="{ padding: '0px', overflow: 'hidden' }"\r
862
- >\r
863
- <ng-container *nzDrawerContent>\r
864
- <div class="log" #logBox>\r
865
- @for (l of lines(); track trackByLine($index, l)) {\r
866
- <div\r
867
- class="line"\r
868
- [class.err]="l.level === 'error'"\r
869
- [class.warn]="l.level === 'warn'"\r
870
- [class.info]="l.level === 'info'"\r
871
- [class.debug]="l.level === 'debug'"\r
872
- [class.success]="l.level === 'success'"\r
873
- >\r
874
- <nz-tag [nzColor]="getColor(l.level)" class="level-tag">\r
875
- {{ l.level | uppercase }}\r
876
- </nz-tag>\r
877
- <span class="time">{{ l.ts | date: 'yyyy-MM-dd HH:mm:ss' }}</span>\r
878
- <span class="msg">\r
879
- @if (l.data?.icon) {\r
880
- {{ l.data?.icon }}\r
881
- }\r
882
- {{ l.text }}\r
883
- </span>\r
884
- </div>\r
885
- }\r
886
- </div>\r
887
- </ng-container>\r
888
- </nz-drawer>\r
889
- \r
890
- <ng-template #extra>\r
891
- <nz-space nzAlign="center">\r
892
- <button nz-button nzType="text" (click)="clearLog()" nz-tooltip="\u6E05\u7A7A\u65E5\u5FD7">\r
893
- <nz-icon nzType="clear" nzTheme="outline" />\r
894
- </button>\r
895
- <button nz-button nzType="text" (click)="toBottom()" nz-tooltip="\u6EDA\u52A8\u5230\u5E95\u90E8">\r
896
- <nz-icon nzType="vertical-align-bottom" nzTheme="outline" />\r
897
- </button>\r
898
- </nz-space>\r
899
- </ng-template>\r
900
- `;
901
-
902
- // angular:jit:style:src\app\layout\footer\system-log\system-log.component.less
903
- var system_log_component_default2 = '/* src/app/layout/footer/system-log/system-log.component.less */\n:host {\n display: block;\n position: relative;\n z-index: 3;\n flex: 0 0 auto;\n}\n.status-bar {\n height: 32px;\n display: flex;\n align-items: center;\n width: 100%;\n -webkit-user-select: none;\n user-select: none;\n}\n.status-bar .project-path {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n padding: 0 8px;\n gap: 4px;\n}\n.status-bar .project-path .home,\n.status-bar .project-path .path {\n display: inline-flex;\n align-items: center;\n padding: 0;\n max-width: 360px;\n}\n.status-bar .project-path .home span,\n.status-bar .project-path .path span {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.status-bar .project-path .home {\n justify-content: center;\n}\n.status-bar .project-path .path {\n min-width: 240px;\n justify-content: flex-start;\n}\n.status-bar .last-log {\n cursor: pointer;\n flex: 1;\n display: flex;\n align-items: center;\n padding: 0 12px;\n gap: 8px;\n width: 0;\n}\n.status-bar .last-log .info {\n flex: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.status-bar .last-log .time {\n flex: 0 0 auto;\n opacity: 0.75;\n font-size: 14px;\n}\n.status-bar .last-log:hover {\n background: #f5f7fa;\n}\n.icon {\n margin-right: 8px;\n font-size: 18px;\n display: inline-flex;\n}\n.log {\n height: 100%;\n overflow: auto;\n padding: 8px 12px;\n font-family:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n "Liberation Mono",\n "Courier New",\n monospace;\n font-size: 14px;\n line-height: 18px;\n}\n.line {\n display: flex;\n gap: 12px;\n padding: 2px 0;\n align-items: center;\n}\n.line .time {\n flex: 0 0 auto;\n opacity: 0.65;\n font-variant-numeric: tabular-nums;\n}\n.line .msg {\n flex: 1 1 auto;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.line.err .msg {\n font-weight: 600;\n}\n.line.warn .msg {\n font-weight: 500;\n}\n.level-tag {\n font-size: 12px;\n padding: 0 4px;\n line-height: 1.5;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 58px;\n border-radius: 4px;\n}\n/*# sourceMappingURL=system-log.component.css.map */\n';
904
-
905
- // src/app/core/log/syslog-stream.service.ts
906
- function isSysTail(m) {
907
- return m.op === "syslog.tail";
908
- }
909
- function isSysAppend(m) {
910
- return m.op === "syslog.append";
911
- }
912
- function match(entry, f) {
913
- if (!f)
914
- return true;
915
- if (f.scope !== void 0 && entry?.scope !== f.scope)
916
- return false;
917
- if (f.level !== void 0 && entry?.level !== f.level)
918
- return false;
919
- if (f.source !== void 0 && entry?.source !== f.source)
920
- return false;
921
- if (f.refId !== void 0 && entry?.refId !== f.refId)
922
- return false;
923
- return true;
924
- }
925
- var SyslogStreamService = class SyslogStreamService2 {
926
- ws;
927
- msgSub;
928
- wsStateSub;
929
- /** 是否已 enable(幂等开关) */
930
- enabled = signal(false);
931
- /** 当前过滤器(scope 区分) */
932
- filter = signal({});
933
- /** 最新日志列表 */
934
- logs = signal([]);
935
- /** 未读计数(drawer 关闭时累加) */
936
- unread = signal(0);
937
- /** drawer 是否打开(由组件控制) */
938
- drawerOpen = signal(false);
939
- /** 最大缓存行数 */
940
- capacity = 2e3;
941
- /** 订阅 tail(服务端下发 tail) */
942
- tail = 300;
943
- /** 用于避免一次连接里重复发送 sub(open 时置 true,close 时置 false) */
944
- subSentForCurrentConnection = false;
945
- /** 记录上一次 ws state,用于识别 open 边沿 */
946
- lastWsState = "idle";
947
- constructor(ws) {
948
- this.ws = ws;
949
- this.msgSub = this.ws.messages().pipe(filter((m) => isSysTail(m) || isSysAppend(m))).subscribe((m) => this.onWsMessage(m));
950
- this.wsStateSub = this.ws.stateChanges().subscribe((s) => {
951
- const wasOpen = this.lastWsState === "open";
952
- const isOpen = s === "open";
953
- if (!wasOpen && isOpen) {
954
- this.subSentForCurrentConnection = false;
955
- this.sendSubIfNeeded();
956
- }
957
- if (wasOpen && !isOpen) {
958
- this.subSentForCurrentConnection = false;
959
- }
960
- this.lastWsState = s;
961
- });
962
- }
963
- /** UI 控制 drawer 开关:打开时 unread 清零 */
964
- setDrawerOpen(open) {
965
- this.drawerOpen.set(open);
966
- if (open)
967
- this.unread.set(0);
968
- }
969
- /** 设置过滤器(例如:{ scope: "task" }) */
970
- setFilter(next) {
971
- this.filter.set(next ?? {});
972
- const cur = this.logs();
973
- if (!cur.length)
974
- return;
975
- const filtered = cur.filter((x) => match(x, this.filter()));
976
- this.logs.set(filtered.slice(-this.capacity));
977
- }
978
- /** 幂等启用:多次调用不会重复 sub */
979
- enable(tail = 300) {
980
- const t = Math.max(0, Math.min(5e3, tail | 0));
981
- this.tail = t;
982
- if (this.enabled()) {
983
- if (this.ws.isOpen()) {
984
- this.subSentForCurrentConnection = false;
985
- this.sendSubIfNeeded();
986
- }
987
- return;
988
- }
989
- this.enabled.set(true);
990
- this.ws.connect();
991
- this.sendSubIfNeeded();
992
- }
993
- /** 可选:停前端流(通常不建议 unsub syslog) */
994
- disable() {
995
- this.enabled.set(false);
996
- this.subSentForCurrentConnection = false;
997
- }
998
- markRead() {
999
- this.unread.set(0);
1000
- }
1001
- clear() {
1002
- this.logs.set([]);
1003
- this.unread.set(0);
1004
- }
1005
- /**
1006
- * 前端本地追加日志(不走 WebSocket,仅显示在系统日志面板)
1007
- * @param text 日志内容
1008
- * @param level 日志级别
1009
- * @param scope 归属范围
1010
- */
1011
- appendLocal(text, level = "info", scope = "server") {
1012
- const entry = {
1013
- ts: Date.now(),
1014
- level,
1015
- source: "system",
1016
- scope,
1017
- text
1018
- };
1019
- const cur = this.logs();
1020
- const next = cur.length >= this.capacity ? cur.slice(1) : cur.slice();
1021
- next.push(entry);
1022
- this.logs.set(next);
1023
- if (!this.drawerOpen()) {
1024
- this.unread.set(this.unread() + 1);
1025
- }
1026
- }
1027
- sendSubIfNeeded() {
1028
- if (!this.enabled())
1029
- return;
1030
- if (!this.ws.isOpen())
1031
- return;
1032
- if (this.subSentForCurrentConnection)
1033
- return;
1034
- this.ws.send({ op: "sub", topic: "syslog", tail: this.tail });
1035
- this.subSentForCurrentConnection = true;
1036
- }
1037
- onWsMessage(m) {
1038
- const f = this.filter();
1039
- if (m.op === "syslog.tail") {
1040
- const entries = (m.entries ?? []).filter((x) => match(x, f));
1041
- this.logs.set(entries.slice(-this.capacity));
1042
- return;
1043
- }
1044
- const entry = m.entry;
1045
- if (!match(entry, f))
1046
- return;
1047
- const cur = this.logs();
1048
- const next = cur.length >= this.capacity ? cur.slice(1) : cur.slice();
1049
- next.push(entry);
1050
- this.logs.set(next);
1051
- if (!this.drawerOpen()) {
1052
- this.unread.set(this.unread() + 1);
1053
- }
1054
- }
1055
- static ctorParameters = () => [
1056
- { type: WsClientService }
1057
- ];
1058
- };
1059
- SyslogStreamService = __decorate([
1060
- Injectable({ providedIn: "root" })
1061
- ], SyslogStreamService);
1062
-
1063
- // src/app/layout/footer/system-log/system-log.component.ts
1064
- var SystemLogDrawerComponent = class SystemLogDrawerComponent2 {
1065
- sysLogStream = inject(SyslogStreamService);
1066
- projectContext = inject(ProjectContextStore);
1067
- logBox = viewChild("logBox");
1068
- // 自动跟随(可选开关,默认开更符合日志体验)
1069
- autoFollow = signal(true);
1070
- // signal 化,便于模板调用 isOpen()
1071
- isOpen = signal(false);
1072
- curProjectPath = computed(() => this.projectContext.currentProject()?.root || "");
1073
- // lines 是 computed,跟随 logs signal 更新
1074
- lines = computed(() => this.sysLogStream.logs());
1075
- lastLine = computed(() => {
1076
- const logs = this.sysLogStream.logs();
1077
- return logs.length ? logs[logs.length - 1] : null;
1078
- });
1079
- // 可用于 badge
1080
- unread = computed(() => this.sysLogStream.unread());
1081
- constructor() {
1082
- effect(() => {
1083
- this.sysLogStream.setDrawerOpen(this.isOpen());
1084
- if (this.isOpen())
1085
- queueMicrotask(() => this.toBottom());
1086
- });
1087
- effect(() => {
1088
- this.lines();
1089
- if (!this.isOpen())
1090
- return;
1091
- if (!this.autoFollow())
1092
- return;
1093
- queueMicrotask(() => this.toBottom());
1094
- });
1095
- }
1096
- ngOnInit() {
1097
- this.sysLogStream.enable(300);
1098
- }
1099
- openLog() {
1100
- this.isOpen.set(true);
1101
- }
1102
- closeLog() {
1103
- this.isOpen.set(false);
1104
- }
1105
- clearLog() {
1106
- this.sysLogStream.clear();
1107
- }
1108
- toBottom() {
1109
- const el = this.logBox()?.nativeElement;
1110
- if (!el)
1111
- return;
1112
- el.scrollTop = el.scrollHeight;
1113
- }
1114
- /** 给 @for 的 trackBy,用 index 或 ts+refId+text */
1115
- trackByLine = (_, l) => `${l.ts}-${l.refId ?? ""}-${l.text}`;
1116
- getColor(level) {
1117
- if (!level)
1118
- return "#000000";
1119
- switch (level) {
1120
- case "success":
1121
- return "#22c55e";
1122
- case "info":
1123
- return "#18bdfd";
1124
- case "debug":
1125
- return "#94a3b8";
1126
- case "error":
1127
- return "#ef4444";
1128
- case "warn":
1129
- return "#f59e0b";
1130
- default:
1131
- return "#000000";
1132
- }
1133
- }
1134
- static ctorParameters = () => [];
1135
- static propDecorators = {
1136
- logBox: [{ type: ViewChild, args: ["logBox", { isSignal: true }] }]
1137
- };
1138
- };
1139
- SystemLogDrawerComponent = __decorate([
1140
- Component({
1141
- selector: "app-system-log",
1142
- changeDetection: ChangeDetectionStrategy.OnPush,
1143
- imports: [
1144
- CommonModule,
1145
- NzTagModule,
1146
- NzDrawerModule,
1147
- NzButtonModule,
1148
- NzSpaceModule,
1149
- NzIconModule,
1150
- NzTooltipModule,
1151
- RouterModule
1152
- ],
1153
- template: system_log_component_default,
1154
- styles: [system_log_component_default2]
1155
- })
1156
- ], SystemLogDrawerComponent);
1157
-
1158
- // src/app/layout/footer/layout-footer.component.ts
1159
- var LayoutFooterComponent = class LayoutFooterComponent2 {
1160
- };
1161
- LayoutFooterComponent = __decorate([
1162
- Component({
1163
- selector: "ngm-footer",
1164
- imports: [NzLayoutModule, SystemLogDrawerComponent],
1165
- template: `
1166
- <nz-footer>
1167
- <app-system-log></app-system-log>
1168
- </nz-footer>
1169
- `,
1170
- styles: [layout_footer_component_default]
1171
- })
1172
- ], LayoutFooterComponent);
1173
-
1174
- // angular:jit:style:inline:src\app\layout\header\layout-header.component.ts;CiAgICAgIG56LWhlYWRlci5hcHAtaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taGVhZGVyLWVycm9yLWJhY2tncm91bmQpOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KICAgIA==
1175
- var layout_header_component_default = "/* angular:styles/component:less;e1e1521f77919571396f0be38fc5d10fa6722ab9eac94da5a78ef8c961900fe5;D:\\ng-manager\\webapp\\src\\app\\layout\\header\\layout-header.component.ts */\nnz-header.app-header {\n padding: 0;\n width: 100%;\n position: relative;\n height: 48px;\n line-height: 48px;\n background: var(--header-error-background);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n gap: 8px;\n}\n/*# sourceMappingURL=layout-header.component.css.map */\n";
1176
-
1177
- // src/app/layout/header/layout-header.component.ts
1178
- var LayoutHeaderComponent = class LayoutHeaderComponent2 {
1179
- };
1180
- LayoutHeaderComponent = __decorate([
1181
- Component({
1182
- selector: "ngm-header",
1183
- changeDetection: ChangeDetectionStrategy.OnPush,
1184
- imports: [CommonModule, NzLayoutModule, NzIconModule],
1185
- template: `
1186
- <nz-header class="app-header">
1187
- <nz-icon nzType="disconnect" nzTheme="outline" />
1188
- <span>\u8FDE\u63A5\u5DF2\u65AD\u5F00</span>
1189
- </nz-header>
1190
- `,
1191
- styles: [layout_header_component_default]
1192
- })
1193
- ], LayoutHeaderComponent);
1194
-
1195
- // angular:jit:template:src\app\layout\sidebar\layout-sidebar.component.html
1196
- var layout_sidebar_component_default = '<nz-sider\r\n class="menu-sidebar"\r\n nzCollapsible\r\n nzWidth="256px"\r\n nzBreakpoint="md"\r\n [(nzCollapsed)]="isCollapsed"\r\n [nzTrigger]="null"\r\n>\r\n <div class="header">\r\n <ngm-project-nav [isCollapsed]="isCollapsed()"></ngm-project-nav>\r\n </div>\r\n <div class="content">\r\n <ngm-menu [isCollapsed]="isCollapsed()"></ngm-menu>\r\n <button\r\n nz-button\r\n nzType="link"\r\n nz-dropdown\r\n [nzDropdownMenu]="menu"\r\n nzPlacement="bottomRight"\r\n nzTrigger="click"\r\n class="more-btn"\r\n >\r\n <nz-icon nzType="more"></nz-icon>\r\n </button>\r\n </div>\r\n</nz-sider>\r\n\r\n<nz-dropdown-menu #menu="nzDropdownMenu">\r\n <ul nz-menu>\r\n <li nz-menu-item class="item">\r\n <a routerLink="/projects">\r\n <nz-icon nzType="project" nzTheme="outline" />\r\n <span>\u9879\u76EE\u7BA1\u7406</span>\r\n </a>\r\n </li>\r\n <li nz-menu-item class="item">\r\n <a routerLink="/about">\r\n <nz-icon nzType="info-circle" nzTheme="outline" />\r\n <span>\u5173\u4E8E</span>\r\n </a>\r\n </li>\r\n </ul>\r\n</nz-dropdown-menu>\r\n';
1197
-
1198
- // angular:jit:style:src\app\layout\sidebar\layout-sidebar.component.less
1199
- var layout_sidebar_component_default2 = "/* src/app/layout/sidebar/layout-sidebar.component.less */\nhtml.default {\n}\nhtml.default :root {\n --app-gray: #e6f7ff;\n --app-primary: #1890ff;\n --app-primary-1: #e6f7ff;\n --app-primary-2: #bae7ff;\n --app-primary-3: #91d5ff;\n --app-primary-4: #69c0ff;\n --app-primary-5: #40a9ff;\n --app-primary-6: #1890ff;\n --app-text-color: rgba(0, 0, 0, 0.85);\n --app-text-secondary: rgba(0, 0, 0, 0.45);\n --text-color-primary: #1890ff;\n --app-component-bg: #fff;\n --app-border-color: #d9d9d9;\n --header-error-background: #ff4d4f;\n}\nhtml.default :root {\n --text-color-gray: #888;\n}\nhtml.default :host .sidebar-logo {\n background: var(--ant-primary-1);\n}\nhtml.default :host .sidebar-logo h1 {\n color: var(--ant-text-color);\n}\nhtml.dark {\n}\nhtml.dark :root {\n --text-color-gray: #bbb;\n}\nhtml.dark :host .sidebar-logo {\n background: var(--ant-primary-1);\n}\nhtml.dark :host .sidebar-logo h1 {\n color: var(--ant-text-color);\n}\n:host {\n display: block;\n box-sizing: border-box;\n position: relative;\n z-index: 10;\n box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);\n width: 256px;\n transition: all 0.2s;\n flex: 0 0 auto;\n}\n:host.collapsed {\n width: 80px;\n}\n.menu-sidebar {\n height: 100%;\n}\n.menu-sidebar ::ng-deep .ant-layout-sider-children {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n.menu-sidebar ::ng-deep .ant-menu-inline {\n border-right: none;\n}\n.menu-sidebar .header {\n flex: 0 0 auto;\n}\n.menu-sidebar .content {\n flex: 1 1 auto;\n height: 0;\n display: flex;\n flex-direction: column;\n}\n.menu-sidebar .content ngm-menu {\n flex: 1 1 auto;\n height: 0;\n}\n.menu-sidebar .content button {\n margin: 12px;\n flex: 0 0 auto;\n}\n.menu-sidebar .content button:hover {\n background-color: var(--app-primary-2);\n}\n.sidebar-logo {\n position: relative;\n height: 64px;\n padding-left: 24px;\n overflow: hidden;\n line-height: 64px;\n transition: all 0.3s;\n}\n.sidebar-logo img {\n display: inline-block;\n height: 32px;\n width: 32px;\n vertical-align: middle;\n}\n.sidebar-logo h1 {\n display: inline-block;\n margin: 0 0 0 20px;\n font-weight: 600;\n font-size: 14px;\n font-family:\n Avenir,\n Helvetica Neue,\n Arial,\n Helvetica,\n sans-serif;\n vertical-align: middle;\n}\n.item ::ng-deep .ant-menu-title-content {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.item a {\n color: var(--app-text-color);\n display: flex;\n width: 100%;\n align-items: center;\n gap: 8px;\n}\n/*# sourceMappingURL=layout-sidebar.component.css.map */\n";
1200
-
1201
- // src/app/layout/layout.state.service.ts
1202
- var LayoutStateService = class LayoutStateService2 {
1203
- isCollapsed = signal(false);
1204
- };
1205
- LayoutStateService = __decorate([
1206
- Injectable({
1207
- providedIn: "root"
1208
- })
1209
- ], LayoutStateService);
1210
-
1211
- // angular:jit:template:src\app\layout\menu\layout-menu.component.html
1212
- var layout_menu_component_default = `<ul nz-menu nzMode="inline" [nzInlineCollapsed]="isCollapsed">\r
1213
- <ng-container *ngTemplateOutlet="menuTpl; context: { $implicit: menus }"></ng-container>\r
1214
- <ng-template #menuTpl let-menus>\r
1215
- @for (menu of menus(); track menu) {\r
1216
- @if (!menu?.hidden){\r
1217
- @if (!menu.children) {\r
1218
- <li\r
1219
- nz-menu-item\r
1220
- [nzPaddingLeft]="menu.level * 24"\r
1221
- [nzDisabled]="menu.disabled"\r
1222
- [nzSelected]="menuService.isActive(menu.path!)"\r
1223
- (click)="menuService.clickMenu(menu)"\r
1224
- [nz-tooltip]="\r
1225
- menu.taskCountBadge === true && runningTaskCount() > 0\r
1226
- ? runningTaskCount() + '\u4E2A\u4EFB\u52A1\u6B63\u5728\u8FD0\u884C'\r
1227
- : null\r
1228
- "\r
1229
- nzTooltipPlacement="right"\r
1230
- >\r
1231
- @if (menu.icon) {\r
1232
- <nz-icon [nzType]="menu.icon" nzTheme="outline" style="font-size: 18px" />\r
1233
- }\r
1234
- <span>{{ menu.title }}</span>\r
1235
- @if(menu.taskCountBadge === true && runningTaskCount() > 0) {\r
1236
- <nz-badge style="margin-left: 12px" nzStatus="processing"></nz-badge>\r
1237
- }\r
1238
- </li>\r
1239
- } @else {\r
1240
- <li\r
1241
- nz-submenu\r
1242
- [nzPaddingLeft]="menu.level * 24"\r
1243
- [nzOpen]="menu.open"\r
1244
- [nzTitle]="menu.title"\r
1245
- [nzIcon]="menu.icon"\r
1246
- [nzDisabled]="menu.disabled"\r
1247
- >\r
1248
- <ul>\r
1249
- <ng-container *ngTemplateOutlet="menuTpl; context: { $implicit: menu.children }" />\r
1250
- </ul>\r
1251
- </li>\r
1252
- }\r
1253
- } \r
1254
- }\r
1255
- </ng-template>\r
1256
- </ul>\r
1257
- `;
1258
-
1259
- // angular:jit:style:src\app\layout\menu\layout-menu.component.less
1260
- var layout_menu_component_default2 = "/* src/app/layout/menu/layout-menu.component.less */\n/*# sourceMappingURL=layout-menu.component.css.map */\n";
1261
-
1262
- // src/app/layout/menu/menu.service.ts
1263
- var MenuService = class MenuService2 {
1264
- projectContext = inject(ProjectContextStore);
1265
- currentMenu = signal(null);
1266
- router = inject(Router);
1267
- isHubProjectValid = this.projectContext.isHubProjectValid;
1268
- menus = signal([
1269
- { title: "\u4EEA\u8868\u76D8", path: "/dashboard", icon: "dashboard", level: 1 },
1270
- { title: "\u4F9D\u8D56", path: "/dependencies", icon: "codepen", level: 1 },
1271
- { title: "\u4EFB\u52A1", path: "/tasks", icon: "schedule", level: 1, taskCountBadge: true },
1272
- { title: "\u914D\u7F6E", path: "/configuration", icon: "setting", level: 1 },
1273
- { title: "API", path: "/rquest", icon: "api", level: 1 },
1274
- { title: "Nginx", path: "/nginx", icon: "deployment-unit", level: 1 },
1275
- { title: "\u96EA\u78A7\u56FE", path: "/sprite", icon: "smile", level: 1 },
1276
- { title: "\u7814\u53D1\u7BA1\u7406", path: "/rd", icon: "rocket", level: 1, hidden: true },
1277
- { title: "\u6D4B\u8BD5\u8DDF\u8E2A", path: "/issues", icon: "bug", level: 1, hidden: true }
1278
- // { title: '系统设置', path: '/settings', icon: 'setting', level: 1 },
1279
- ]);
1280
- // 当前菜单(所有)
1281
- currentMenus = computed(() => {
1282
- return this.menus();
1283
- });
1284
- constructor() {
1285
- this.syncByUrl(this.router.url);
1286
- this.router.events.pipe(filter((e) => e instanceof NavigationEnd)).subscribe((e) => this.syncByUrl(e.urlAfterRedirects));
1287
- effect((onCleanup) => {
1288
- const isValid = this.isHubProjectValid();
1289
- this.menus.update((menus) => {
1290
- return menus.map((menu) => {
1291
- if (menu.path && (menu.path.includes("/rd") || menu.path.includes("/issues"))) {
1292
- return __spreadProps(__spreadValues({}, menu), { hidden: !isValid });
1293
- }
1294
- return menu;
1295
- });
1296
- });
1297
- onCleanup(() => {
1298
- });
1299
- });
1300
- }
1301
- isActive(path) {
1302
- return this.router.isActive(path, {
1303
- paths: "subset",
1304
- queryParams: "ignored",
1305
- fragment: "ignored",
1306
- matrixParams: "ignored"
1307
- });
1308
- }
1309
- clickMenu(item) {
1310
- if (item.path)
1311
- this.router.navigateByUrl(item.path);
1312
- this.currentMenu.set(item);
1313
- }
1314
- syncByUrl(url) {
1315
- const path = this.normalizeUrl(url);
1316
- const matched = this.findBestMatch(this.menus(), path);
1317
- this.currentMenu.set(matched);
1318
- }
1319
- normalizeUrl(url) {
1320
- return url.split("?")[0].split("#")[0];
1321
- }
1322
- findBestMatch(menus, currentPath) {
1323
- const all = this.flatten(menus).filter((m) => !!m.path);
1324
- let best = null;
1325
- for (const m of all) {
1326
- const p = m.path;
1327
- if (currentPath === p || currentPath.startsWith(p + "/")) {
1328
- if (!best || p.length > best.path.length)
1329
- best = m;
1330
- }
1331
- }
1332
- return best;
1333
- }
1334
- flatten(menus) {
1335
- const out = [];
1336
- for (const m of menus) {
1337
- out.push(m);
1338
- if (m.children?.length)
1339
- out.push(...this.flatten(m.children));
1340
- }
1341
- return out;
1342
- }
1343
- static ctorParameters = () => [];
1344
- };
1345
- MenuService = __decorate([
1346
- Injectable({ providedIn: "root" })
1347
- ], MenuService);
1348
-
1349
- // src/app/pages/tasks/services/task-bootstrap.servcie.ts
1350
- var TaskBootstrapServcie = class TaskBootstrapServcie2 {
1351
- api = inject(TasksApiService);
1352
- runtimeStore = inject(TaskRuntimeStore);
1353
- async initActiveSnapshot() {
1354
- const res = await firstValueFrom(this.api.active());
1355
- for (const rt of res ?? []) {
1356
- this.runtimeStore.setRuntime(rt);
1357
- }
1358
- }
1359
- };
1360
- TaskBootstrapServcie = __decorate([
1361
- Injectable({
1362
- providedIn: "root"
1363
- })
1364
- ], TaskBootstrapServcie);
1365
-
1366
- // src/app/layout/menu/layout-menu.component.ts
1367
- var LayoutMenuComponent = class LayoutMenuComponent2 {
1368
- isCollapsed = false;
1369
- menuService = inject(MenuService);
1370
- taskBootstrap = inject(TaskBootstrapServcie);
1371
- runtimeStore = inject(TaskRuntimeStore);
1372
- menus = this.menuService.currentMenus;
1373
- runningTaskCount = computed(() => this.runtimeStore.totalRunningCountSignal()());
1374
- ngOnInit() {
1375
- this.taskBootstrap.initActiveSnapshot();
1376
- }
1377
- static propDecorators = {
1378
- isCollapsed: [{ type: Input }]
1379
- };
1380
- };
1381
- LayoutMenuComponent = __decorate([
1382
- Component({
1383
- selector: "ngm-menu",
1384
- imports: [NgTemplateOutlet, NzMenuModule, NzIconModule, RouterModule, NzTooltipModule, NzBadgeModule],
1385
- template: layout_menu_component_default,
1386
- styles: [layout_menu_component_default2]
1387
- })
1388
- ], LayoutMenuComponent);
1389
-
1390
- // angular:jit:template:src\app\layout\project-nav\layout-project-nav.component.html
1391
- var layout_project_nav_component_default = `<button\r
1392
- class="project-quick-dropdown"\r
1393
- [class.collapsed]="isCollapsed()"\r
1394
- nz-button\r
1395
- nzType="primary"\r
1396
- nzSize="large"\r
1397
- nz-dropdown\r
1398
- [nzDropdownMenu]="menu"\r
1399
- nzTrigger="click"\r
1400
- [nzPlacement]="'bottomCenter'"\r
1401
- [nzOverlayStyle]="{ width: '100%' }"\r
1402
- >\r
1403
- <span>{{ curProjectName() }}</span>\r
1404
- @if(!isCollapsed()) {\r
1405
- <nz-icon nzType="down" />\r
1406
- }\r
1407
- </button>\r
1408
- <nz-dropdown-menu #menu="nzDropdownMenu" style="width: 100%">\r
1409
- <ul nz-menu>\r
1410
- @if(currentProject()) {\r
1411
- <li nz-menu-item class="item">\r
1412
- <nz-icon\r
1413
- nzType="star"\r
1414
- [nzTheme]="currentProject()?.isFavorite ? 'fill' : 'outline'"\r
1415
- ></nz-icon>\r
1416
- <span>\u6DFB\u52A0/\u53D6\u6D88\u6536\u85CF</span>\r
1417
- <nz-switch\r
1418
- [nzDisabled]="!currentProject()?.id"\r
1419
- style="margin-left: 6px"\r
1420
- [ngModel]="currentProject()?.isFavorite"\r
1421
- (ngModelChange)="projectState.toggleFavorite(currentProject()?.id!)"\r
1422
- />\r
1423
- </li>\r
1424
- <li\r
1425
- nz-menu-item\r
1426
- class="item"\r
1427
- (click)="projectState.openInEditor(currentProject()?.id!)"\r
1428
- >\r
1429
- <nz-icon nzType="code"></nz-icon>\r
1430
- <span>\u5728\u7F16\u8F91\u5668\u4E2D\u6253\u5F00</span>\r
1431
- </li>\r
1432
- <li\r
1433
- nz-menu-item\r
1434
- class="item"\r
1435
- (click)="projectState.openEditModal(currentProject()!)"\r
1436
- >\r
1437
- <nz-icon nzType="edit"></nz-icon>\r
1438
- <span>\u7F16\u8F91\u9879\u76EE</span>\r
1439
- </li>\r
1440
- <li nz-menu-item class="item" (click)="openPersonalTokenModal()">\r
1441
- <nz-icon nzType="safety-certificate"></nz-icon>\r
1442
- <span>Hub V2 Personal Token</span>\r
1443
- <span class="token-status" [class.ok]="userStore.hasHubUserToken()">\r
1444
- {{ userStore.hasHubUserToken() ? '\u5DF2\u914D\u7F6E' : '\u672A\u914D\u7F6E' }}\r
1445
- </span>\r
1446
- </li>\r
1447
- }\r
1448
- <li nz-menu-divider></li>\r
1449
- <li nz-menu-group nzTitle="\u6536\u85CF\u7684\u9879\u76EE"></li>\r
1450
- @for(item of favoriteProjects(); track item.id) {\r
1451
- <li nz-menu-item class="item" (click)="projectState.selectProject(item)">\r
1452
- <nz-icon nzType="star" nzTheme="fill"></nz-icon>\r
1453
- <span>{{ item.name }}</span>\r
1454
- </li>\r
1455
- }\r
1456
- <li nz-menu-divider></li>\r
1457
- <li nz-menu-group nzTitle="\u6700\u8FD1\u4F7F\u7528"></li>\r
1458
- @for(item of recentProjects(); track item.id) {\r
1459
- <li nz-menu-item class="item" (click)="projectState.selectProject(item)">\r
1460
- <nz-icon nzType="star" [nzTheme]="item.isFavorite ? 'fill' : 'outline'"></nz-icon>\r
1461
- <span>{{ item.name }}</span>\r
1462
- </li>\r
1463
- }\r
1464
- <li nz-menu-divider></li>\r
1465
- <li nz-menu-item class="item">\r
1466
- <a routerLink="/projects">\r
1467
- <nz-icon nzType="project"></nz-icon>\r
1468
- <span>\u9879\u76EE\u7BA1\u7406</span>\r
1469
- </a>\r
1470
- </li>\r
1471
- </ul>\r
1472
- </nz-dropdown-menu>\r
1473
- <app-project-edit-modal></app-project-edit-modal>\r
1474
- <app-hub-v2-personal-token-modal\r
1475
- [visible]="personalTokenModalVisible"\r
1476
- (visibleChange)="personalTokenModalVisible = $event"\r
1477
- ></app-hub-v2-personal-token-modal>\r
1478
- `;
1479
-
1480
- // angular:jit:style:src\app\layout\project-nav\layout-project-nav.component.less
1481
- var layout_project_nav_component_default2 = "/* src/app/layout/project-nav/layout-project-nav.component.less */\n:host {\n display: flex;\n padding: 16px;\n}\n:host .project-quick-dropdown {\n flex: 1;\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n justify-content: center;\n border-radius: 20px;\n font-weight: 500;\n}\n:host .project-quick-dropdown span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.item ::ng-deep .ant-menu-title-content {\n display: flex;\n align-items: center;\n gap: 8px;\n overflow: hidden;\n}\n.item ::ng-deep .ant-menu-title-content span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.item .token-status {\n margin-left: auto;\n font-size: 12px;\n color: #8c8c8c;\n}\n.item .token-status.ok {\n color: #52c41a;\n}\n.item a {\n color: var(--app-text-color);\n display: flex;\n width: 100%;\n align-items: center;\n gap: 8px;\n}\n/*# sourceMappingURL=layout-project-nav.component.css.map */\n";
1482
-
1483
- // angular:jit:style:inline:src\app\pages\projects\project-list\project-edit-modal.component.ts;CiAgICAubW9kYWwtYm9keSB7IGRpc3BsYXk6IGdyaWQ7IGdhcDogMTJweDsgfQogICAgLnNlY3Rpb24tdGl0bGUgeyBmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiA2MDA7IG9wYWNpdHk6IC45OyBtYXJnaW4tdG9wOiA0cHg7IH0KICAgIC5oaW50IHsgZm9udC1zaXplOiAxMnB4OyBvcGFjaXR5OiAuNzU7IH0KICA=
1484
- var project_edit_modal_component_default = "/* angular:styles/component:less;176225aba4e5f20ae3e3bc03c308fe46cf63f04bbdf3bb701c7b5e59fdda0190;D:\\ng-manager\\webapp\\src\\app\\pages\\projects\\project-list\\project-edit-modal.component.ts */\n.modal-body {\n display: grid;\n gap: 12px;\n}\n.section-title {\n font-size: 13px;\n font-weight: 600;\n opacity: 0.9;\n margin-top: 4px;\n}\n.hint {\n font-size: 12px;\n opacity: 0.75;\n}\n/*# sourceMappingURL=project-edit-modal.component.css.map */\n";
1485
-
1486
- // src/app/pages/projects/project-list/project-edit-modal.component.ts
1487
- var ProjectEditModalComponent = class ProjectEditModalComponent2 {
1488
- projectState = inject(ProjectStateService);
1489
- editingProject = this.projectState.editingProject;
1490
- };
1491
- ProjectEditModalComponent = __decorate([
1492
- Component({
1493
- selector: "app-project-edit-modal",
1494
- standalone: true,
1495
- imports: [CommonModule, FormsModule, NzInputModule, NzButtonModule, NzModalModule, NzIconModule],
1496
- template: `
1497
- <nz-modal
1498
- [nzClosable]="false"
1499
- [nzMaskClosable]="false"
1500
- [nzVisible]="projectState.isEditModalVisible()"
1501
- nzTitle="\u7F16\u8F91\u9879\u76EE"
1502
- (nzOnCancel)="projectState.closeEditModal()"
1503
- >
1504
- <ng-container *nzModalContent>
1505
- @if(editingProject()){
1506
- <div class="modal-body">
1507
- <label class="label">\u540D\u79F0</label>
1508
- <nz-input-wrapper >
1509
- <input
1510
- nz-input
1511
- [ngModel]="editingProject()!.name"
1512
- (ngModelChange)="projectState.editingProject()!.name = $event"
1513
- placeholder="\u8BF7\u8F93\u5165\u65B0\u540D\u79F0"
1514
- (keydown.enter)="projectState.confirmEditProject()"
1515
- autofocus
1516
- />
1517
- <nz-icon nzInputPrefix nzType="folder" nzTheme="fill" />
1518
- </nz-input-wrapper>
1519
- <div class="hint">\u8F93\u5165\u65B0\u540D\u79F0\uFF0C\u5C06\u540C\u6B65\u66F4\u65B0\u9879\u76EE\u663E\u793A\u540D\u79F0\uFF08\u4E0D\u4F1A\u91CD\u547D\u540D\u78C1\u76D8\u76EE\u5F55\uFF09\u3002</div>
1520
- <label class="label">Git\u4ED3\u5E93\u5730\u5740</label>
1521
- <nz-input-wrapper >
1522
- <input
1523
- nz-input
1524
- [ngModel]="editingProject()!.repoPageUrl"
1525
- (ngModelChange)="projectState.editingProject()!.repoPageUrl = $event"
1526
- placeholder="Git\u4ED3\u5E93\u5730\u5740"
1527
- />
1528
- <nz-icon nzInputPrefix nzType="github" nzTheme="outline" />
1529
- </nz-input-wrapper>
1530
-
1531
- <div class="section-title">NGM Hub V2</div>
1532
- <label class="label">Hub \u5730\u5740</label>
1533
- <nz-input-wrapper>
1534
- <input
1535
- nz-input
1536
- [ngModel]="editingProject()!.hubV2.baseUrl"
1537
- (ngModelChange)="projectState.editingProject()!.hubV2.baseUrl = $event"
1538
- placeholder="\u4F8B\u5982\uFF1Ahttp://192.168.1.31:7008"
1539
- />
1540
- <nz-icon nzInputPrefix nzType="link" nzTheme="outline" />
1541
- </nz-input-wrapper>
1542
-
1543
- <label class="label">Project Key</label>
1544
- <nz-input-wrapper>
1545
- <input
1546
- nz-input
1547
- [ngModel]="editingProject()!.hubV2.projectKey"
1548
- (ngModelChange)="projectState.editingProject()!.hubV2.projectKey = $event"
1549
- placeholder="\u4F8B\u5982\uFF1ANGM"
1550
- />
1551
- <nz-icon nzInputPrefix nzType="key" nzTheme="outline" />
1552
- </nz-input-wrapper>
1553
-
1554
- <label class="label">API Token</label>
1555
- <nz-input-wrapper>
1556
- <input
1557
- nz-input
1558
- type="password"
1559
- [ngModel]="editingProject()!.hubV2.token"
1560
- (ngModelChange)="projectState.editingProject()!.hubV2.token = $event"
1561
- placeholder="\u7C98\u8D34 hub-v2 \u9879\u76EE token"
1562
- />
1563
- <nz-icon nzInputPrefix nzType="safety-certificate" nzTheme="outline" />
1564
- </nz-input-wrapper>
1565
- <div class="hint">\u4EE5\u4E0A\u914D\u7F6E\u4F1A\u5199\u5165\u9879\u76EE env\uFF1ANGM_HUB_V2_BASE_URL / NGM_HUB_V2_PROJECT_KEY / NGM_HUB_V2_TOKEN\u3002</div>
1566
-
1567
- <!-- <label class="label">\u539F\u5C3A\u5BF8\u56FE\u6807SVN\u5730\u5740</label>
1568
- <nz-input-wrapper >
1569
- <input
1570
- nz-input
1571
- [ngModel]="editingProject()!.iconsRepoUrl"
1572
- (ngModelChange)="projectState.editingProject()!.iconsRepoUrl = $event"
1573
- placeholder="\u539F\u5C3A\u5BF8\u56FE\u6807SVN\u5730\u5740"
1574
- />
1575
- <nz-icon nzInputPrefix nzType="proj:svn" nzTheme="outline" />
1576
- </nz-input-wrapper>
1577
- <div class="hint">\u8F93\u5165\u9879\u76EE\u7684\u539F\u5C3A\u5BF8\u56FE\u6807SVN\u5730\u5740\uFF0C\u7528\u4E8E\u5236\u4F5C\u9879\u76EE\u6240\u9700\u96EA\u78A7\u56FE\u3002</div>
1578
- <div class="hint">\u793A\u4F8B\uFF1Asvn://192.168.1.10/\u9879\u76EE\u7BA1\u7406/xx\u9879\u76EE/02.\u9879\u76EE\u6587\u6863/05.\u7CFB\u7EDF\u8BBE\u8BA1/02-\u539F\u578B\u8BBE\u8BA1/02-UI\u8BBE\u8BA1\u6548\u679C\u56FE&\u5207\u56FE/3-\u539F\u5C3A\u5BF8\u56FE\u6807</div> -->
1579
-
1580
- <label class="label">\u63CF\u8FF0</label>
1581
- <nz-input-wrapper>
1582
- <textarea
1583
- nz-input
1584
- rows="3"
1585
- style="resize: none;"
1586
- [ngModel]="editingProject()!.description"
1587
- (ngModelChange)="projectState.editingProject()!.description = $event"
1588
- placeholder="\u8BF7\u8F93\u5165\u65B0\u63CF\u8FF0"
1589
- (keydown.enter)="projectState.confirmEditProject()"
1590
- ></textarea>
1591
- </nz-input-wrapper>
1592
- </div>
1593
- }
1594
- </ng-container>
1595
-
1596
- <ng-container *nzModalFooter>
1597
- <button nz-button (click)="projectState.closeEditModal()">\u53D6\u6D88</button>
1598
- <button
1599
- nz-button
1600
- nzType="primary"
1601
- (click)="projectState.confirmEditProject()"
1602
- [disabled]="!projectState.editingProject()?.name?.trim() || projectState.isEditSaving()"
1603
- [nzLoading]="projectState.isEditSaving()"
1604
- >
1605
- \u786E\u5B9A
1606
- </button>
1607
- </ng-container>
1608
- </nz-modal>
1609
-
1610
- `,
1611
- styles: [project_edit_modal_component_default]
1612
- })
1613
- ], ProjectEditModalComponent);
1614
-
1615
- // angular:jit:style:inline:src\app\layout\project-nav\hub-v2-personal-token-modal.component.ts;CiAgICAgIC5tb2RhbC1ib2R5IHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQogICAgICAuaGludCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG9wYWNpdHk6IDAuNzU7CiAgICAgIH0KICAgIA==
1616
- var hub_v2_personal_token_modal_component_default = "/* angular:styles/component:less;11d4227e1814fc017921dae35e531cb63e83883c9563c6d511773165dc9052d7;D:\\ng-manager\\webapp\\src\\app\\layout\\project-nav\\hub-v2-personal-token-modal.component.ts */\n.modal-body {\n display: grid;\n gap: 12px;\n}\n.hint {\n font-size: 12px;\n opacity: 0.75;\n}\n/*# sourceMappingURL=hub-v2-personal-token-modal.component.css.map */\n";
1617
-
1618
- // src/app/layout/project-nav/hub-v2-personal-token-modal.component.ts
1619
- var HubV2PersonalTokenModalComponent = class HubV2PersonalTokenModalComponent2 {
1620
- userStore = inject(UserStore);
1621
- visible = false;
1622
- visibleChange = new EventEmitter();
1623
- draft = "";
1624
- open() {
1625
- this.userStore.ensureUserLoaded();
1626
- this.draft = this.userStore.hubUserToken();
1627
- }
1628
- close() {
1629
- this.visibleChange.emit(false);
1630
- }
1631
- save() {
1632
- this.userStore.setHubUserToken(this.draft);
1633
- this.userStore.loadCurrentUser();
1634
- this.visibleChange.emit(false);
1635
- }
1636
- clear() {
1637
- this.userStore.setHubUserToken("");
1638
- this.draft = "";
1639
- }
1640
- static propDecorators = {
1641
- visible: [{ type: Input }],
1642
- visibleChange: [{ type: Output }]
1643
- };
1644
- };
1645
- HubV2PersonalTokenModalComponent = __decorate([
1646
- Component({
1647
- selector: "app-hub-v2-personal-token-modal",
1648
- standalone: true,
1649
- imports: [CommonModule, FormsModule, NzButtonModule, NzIconModule, NzInputModule, NzModalModule],
1650
- template: `
1651
- <nz-modal
1652
- [nzVisible]="visible"
1653
- [nzClosable]="false"
1654
- [nzMaskClosable]="false"
1655
- nzTitle="Hub V2 Personal Token\uFF08\u5168\u5C40\uFF09"
1656
- [nzWidth]="560"
1657
- (nzOnCancel)="close()"
1658
- >
1659
- <ng-container *nzModalContent>
1660
- <div class="modal-body">
1661
- <label class="label">Personal Token</label>
1662
- <nz-input-wrapper>
1663
- <input nz-input type="password" [(ngModel)]="draft" placeholder="\u7C98\u8D34 ngm_uptk_xxx" />
1664
- <nz-icon nzInputPrefix nzType="safety-certificate" nzTheme="outline" />
1665
- </nz-input-wrapper>
1666
- <div class="hint">\u4EC5\u4FDD\u5B58\u5728\u5F53\u524D\u6D4F\u89C8\u5668\u672C\u5730\uFF0C\u7528\u4E8E webapp \u8C03\u7528 Hub V2 /api/personal\u3002</div>
1667
- </div>
1668
- </ng-container>
1669
- <ng-container *nzModalFooter>
1670
- <button nz-button (click)="clear()">\u6E05\u7A7A</button>
1671
- <button nz-button (click)="close()">\u53D6\u6D88</button>
1672
- <button nz-button nzType="primary" (click)="save()">\u4FDD\u5B58</button>
1673
- </ng-container>
1674
- </nz-modal>
1675
- `,
1676
- styles: [hub_v2_personal_token_modal_component_default]
1677
- })
1678
- ], HubV2PersonalTokenModalComponent);
1679
-
1680
- // src/app/layout/project-nav/layout-project-nav.component.ts
1681
- var LayoutProjectNavComponent = class LayoutProjectNavComponent2 {
1682
- userStore = inject(UserStore);
1683
- projectContext = inject(ProjectContextStore);
1684
- projectState = inject(ProjectStateService);
1685
- isCollapsed = model(false);
1686
- personalTokenModalVisible = false;
1687
- personalTokenModal;
1688
- currentProject = this.projectContext.currentProject;
1689
- favoriteProjects = this.projectContext.favoriteProjects;
1690
- recentProjects = this.projectContext.recentProjects;
1691
- curProjectName = computed(() => {
1692
- const name = this.projectContext.currentProject()?.name || "\u8BF7\u9009\u62E9\u9879\u76EE";
1693
- return this.isCollapsed() ? name?.charAt(0).toUpperCase() : name;
1694
- });
1695
- ngOnInit() {
1696
- this.projectContext.loadProjects().subscribe();
1697
- this.userStore.ensureHubUserTokenLoaded();
1698
- }
1699
- openPersonalTokenModal() {
1700
- this.personalTokenModalVisible = true;
1701
- queueMicrotask(() => this.personalTokenModal?.open());
1702
- }
1703
- static propDecorators = {
1704
- isCollapsed: [{ type: Input, args: [{ isSignal: true, alias: "isCollapsed", required: false }] }, { type: Output, args: ["isCollapsedChange"] }],
1705
- personalTokenModal: [{ type: ViewChild, args: [HubV2PersonalTokenModalComponent] }]
1706
- };
1707
- };
1708
- LayoutProjectNavComponent = __decorate([
1709
- Component({
1710
- selector: "ngm-project-nav",
1711
- imports: [
1712
- CommonModule,
1713
- FormsModule,
1714
- NzDropDownModule,
1715
- NzMenuModule,
1716
- NzIconModule,
1717
- NzSwitchModule,
1718
- NzButtonModule,
1719
- RouterModule,
1720
- ProjectEditModalComponent,
1721
- HubV2PersonalTokenModalComponent
1722
- ],
1723
- template: layout_project_nav_component_default,
1724
- styles: [layout_project_nav_component_default2]
1725
- })
1726
- ], LayoutProjectNavComponent);
1727
-
1728
- // src/app/layout/sidebar/layout-sidebar.component.ts
1729
- var LayoutSidebarComponent = class LayoutSidebarComponent2 {
1730
- router = inject(Router);
1731
- state = inject(LayoutStateService);
1732
- isCollapsed = this.state.isCollapsed;
1733
- constructor() {
1734
- }
1735
- isActive(path) {
1736
- return this.router.url.startsWith(path);
1737
- }
1738
- static ctorParameters = () => [];
1739
- };
1740
- LayoutSidebarComponent = __decorate([
1741
- Component({
1742
- selector: "ngm-sidebar",
1743
- imports: [
1744
- NzLayoutModule,
1745
- NzIconModule,
1746
- NzMenuModule,
1747
- LayoutMenuComponent,
1748
- LayoutProjectNavComponent,
1749
- NzButtonModule,
1750
- NzDropDownModule,
1751
- RouterModule
1752
- ],
1753
- template: layout_sidebar_component_default,
1754
- host: {
1755
- "[class.collapsed]": "isCollapsed()",
1756
- "[class.ant-layout-sider]": "true"
1757
- },
1758
- styles: [layout_sidebar_component_default2]
1759
- })
1760
- ], LayoutSidebarComponent);
1761
-
1762
- // src/app/layout/layout.component.ts
1763
- var LayoutComponent = class LayoutComponent2 {
1764
- ws = inject(WsClientService);
1765
- constructor() {
1766
- this.ws.connect();
1767
- effect(() => this.syncVisible());
1768
- }
1769
- wsState = toSignal(this.ws.stateChanges(), {
1770
- initialValue: "idle"
1771
- });
1772
- /** 规则:非 open 展示(逻辑态) */
1773
- shouldShow = computed(() => this.wsState() !== "open");
1774
- /** DOM 是否渲染(含离场期间) */
1775
- visible = signal(false);
1776
- /** 是否处于离场动画 */
1777
- leaving = signal(false);
1778
- /** 给“正常启动瞬间 connecting”一个免闪窗口 */
1779
- SHOW_DELAY_MS = 200;
1780
- showTimer;
1781
- /** 防止 transitionend/animationend 触发多次导致重复 set */
1782
- removed = false;
1783
- syncVisible() {
1784
- const show = this.shouldShow();
1785
- if (show) {
1786
- this.removed = false;
1787
- if (this.visible()) {
1788
- this.leaving.set(false);
1789
- return;
1790
- }
1791
- this.startShowDelay();
1792
- return;
1793
- }
1794
- this.clearShowDelay();
1795
- if (this.visible() && !this.leaving()) {
1796
- this.leaving.set(true);
1797
- }
1798
- }
1799
- startShowDelay() {
1800
- if (this.showTimer)
1801
- return;
1802
- this.showTimer = setTimeout(() => {
1803
- this.showTimer = void 0;
1804
- if (this.shouldShow()) {
1805
- this.visible.set(true);
1806
- this.leaving.set(false);
1807
- this.removed = false;
1808
- }
1809
- }, this.SHOW_DELAY_MS);
1810
- }
1811
- clearShowDelay() {
1812
- if (this.showTimer) {
1813
- clearTimeout(this.showTimer);
1814
- this.showTimer = void 0;
1815
- }
1816
- }
1817
- /** 内层动画结束(opacity/transform)*/
1818
- onInnerAnimationEnd(evt) {
1819
- }
1820
- /** 外层高度 transition 结束:此时高度已经 0,再移除 DOM,不会“瞬间上移” */
1821
- onWrapTransitionEnd(evt) {
1822
- if (evt.propertyName !== "height")
1823
- return;
1824
- if (this.removed)
1825
- return;
1826
- if (!this.shouldShow() && this.leaving()) {
1827
- this.removed = true;
1828
- this.visible.set(false);
1829
- this.leaving.set(false);
1830
- }
1831
- }
1832
- static ctorParameters = () => [];
1833
- };
1834
- LayoutComponent = __decorate([
1835
- Component({
1836
- selector: "ngm-layout",
1837
- imports: [
1838
- RouterModule,
1839
- NzLayoutModule,
1840
- NzBreadCrumbModule,
1841
- NzIconModule,
1842
- NzMenuModule,
1843
- LayoutSidebarComponent,
1844
- LayoutHeaderComponent,
1845
- LayoutFooterComponent
1846
- ],
1847
- template: layout_component_default,
1848
- styles: [layout_component_default2]
1849
- })
1850
- ], LayoutComponent);
1851
-
1852
- // src/app/app.ts
1853
- var App = class App2 {
1854
- constructor(reg) {
1855
- reg.init();
1856
- }
1857
- static ctorParameters = () => [
1858
- { type: ProjectIconRegistry }
1859
- ];
1860
- };
1861
- App = __decorate([
1862
- Component({
1863
- selector: "app-root",
1864
- imports: [LayoutComponent],
1865
- template: `<ngm-layout></ngm-layout>`,
1866
- styles: [app_default]
1867
- })
1868
- ], App);
1869
-
1870
- // src/main.ts
1871
- bootstrapApplication(App, appConfig).catch((err) => console.error(err));
1872
- //# sourceMappingURL=main.js.map