@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,1642 +0,0 @@
1
- import {
2
- NzStepsModule
3
- } from "./chunk-3G2GEOPV.js";
4
- import "./chunk-T6UAOWNP.js";
5
- import {
6
- NzTabsModule
7
- } from "./chunk-O7LB6VFM.js";
8
- import {
9
- NzFormModule
10
- } from "./chunk-P5CWA4FO.js";
11
- import {
12
- FsExplorerApiService,
13
- FsExplorerComponent,
14
- FsExplorerService,
15
- ProjectApiService,
16
- ProjectStateService
17
- } from "./chunk-GMCNMOTD.js";
18
- import {
19
- NzSwitchModule
20
- } from "./chunk-6TBQERYX.js";
21
- import {
22
- NzDrawerModule
23
- } from "./chunk-7FC7DN65.js";
24
- import {
25
- NZ_MODAL_DATA,
26
- NzModalModule,
27
- NzModalRef,
28
- NzModalService
29
- } from "./chunk-FLSUSPBD.js";
30
- import {
31
- Clipboard
32
- } from "./chunk-LPME4AJ3.js";
33
- import {
34
- NzRadioModule
35
- } from "./chunk-JN3VOWP7.js";
36
- import {
37
- NzCheckboxModule
38
- } from "./chunk-766T7YES.js";
39
- import "./chunk-S77VVYUZ.js";
40
- import "./chunk-ULOHDK7Y.js";
41
- import {
42
- NzSpinModule
43
- } from "./chunk-EQOY6A3M.js";
44
- import {
45
- NzTagModule
46
- } from "./chunk-J447GBHM.js";
47
- import "./chunk-ZBZHXS46.js";
48
- import "./chunk-KSHAGY2M.js";
49
- import "./chunk-VXHZMSDM.js";
50
- import {
51
- TaskStateService,
52
- TaskStreamService
53
- } from "./chunk-SS73S33S.js";
54
- import {
55
- NzCardModule
56
- } from "./chunk-ZZA5NVAI.js";
57
- import {
58
- NzEmptyModule,
59
- NzSelectModule
60
- } from "./chunk-ETTBRXVA.js";
61
- import {
62
- NzGridModule,
63
- NzPopoverModule,
64
- TerminalViewComponent
65
- } from "./chunk-6QMSEZPT.js";
66
- import {
67
- TaskRuntimeStore
68
- } from "./chunk-RBWIWNTL.js";
69
- import {
70
- NzBadgeModule
71
- } from "./chunk-DEGQJKKZ.js";
72
- import "./chunk-TEW4MY4J.js";
73
- import "./chunk-APGQRYWX.js";
74
- import {
75
- UiNotifierService
76
- } from "./chunk-2YSUXBGC.js";
77
- import {
78
- FormsModule,
79
- NzButtonModule,
80
- NzIconModule,
81
- NzInputModule,
82
- NzSpaceModule,
83
- NzTooltipDirective,
84
- NzTooltipModule
85
- } from "./chunk-RUXJCM3V.js";
86
- import "./chunk-VYNQPZQO.js";
87
- import {
88
- Router,
89
- RouterModule
90
- } from "./chunk-665WC4RU.js";
91
- import {
92
- CommonModule
93
- } from "./chunk-3MCIETCQ.js";
94
- import {
95
- ChangeDetectionStrategy,
96
- Component,
97
- EventEmitter,
98
- Injectable,
99
- Input,
100
- NgModule,
101
- Output,
102
- Subject,
103
- Subscription,
104
- ViewChild,
105
- __decorate,
106
- __spreadProps,
107
- __spreadValues,
108
- computed,
109
- debounceTime,
110
- distinctUntilChanged,
111
- effect,
112
- filter,
113
- first,
114
- firstValueFrom,
115
- inject,
116
- model,
117
- of,
118
- signal,
119
- switchMap,
120
- takeUntil,
121
- timeout
122
- } from "./chunk-XQY5SPGI.js";
123
-
124
- // angular:jit:style:inline:src\app\pages\projects\projects.component.ts;CiAgICAucGFnZXsgZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpjb2x1bW47IGhlaWdodDoxMDAlOyB9CiAgICAuaGVhZGVyewogICAgICBkaXNwbGF5OmZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOmNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OmNlbnRlcjsKICAgICAgZmxleDowIDAgYXV0bzsKICAgICAgcGFkZGluZzoxNnB4IDA7CiAgICAgIGgyewogICAgICAgIG1hcmdpbjowOwogICAgICB9CiAgICB9CiAgICBuei10YWJzLnRhYnMtY29udGFpbmVyewogICAgICBmbGV4OjEgMSBhdXRvOwogICAgICBoZWlnaHQ6MDsKICAgICAgJjo6bmctZGVlcCAuYW50LXRhYnMtY29udGVudHsKICAgICAgICAgIGhlaWdodDoxMDAlOwogICAgICAgICAgLmFudC10YWJzLXRhYnBhbmV7CiAgICAgICAgICAgIGhlaWdodDoxMDAlOwogICAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAudG9vbGJhciBpbnB1dHsgZmxleDoxOyB9CiAgICAuY3VycmVudHsgbWFyZ2luOjEwcHggMDsgb3BhY2l0eTouNzU7IH0KICA=
125
- var projects_component_default = "/* angular:styles/component:less;c888d95f0f1c03d48acbd77e7a69222f632f71519933c044ef57049f59437e4f;D:\\ng-manager\\webapp\\src\\app\\pages\\projects\\projects.component.ts */\n.page {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n.header {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n padding: 16px 0;\n}\n.header h2 {\n margin: 0;\n}\nnz-tabs.tabs-container {\n flex: 1 1 auto;\n height: 0;\n}\nnz-tabs.tabs-container::ng-deep .ant-tabs-content {\n height: 100%;\n}\nnz-tabs.tabs-container::ng-deep .ant-tabs-content .ant-tabs-tabpane {\n height: 100%;\n}\n.toolbar input {\n flex: 1;\n}\n.current {\n margin: 10px 0;\n opacity: 0.75;\n}\n/*# sourceMappingURL=projects.component.css.map */\n";
126
-
127
- // angular:jit:style:inline:src\app\pages\projects\project-create\project-create.component.ts;CiAgICAucGFnZSB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIC5leHBsb3Jlci1jb250YWluZXIgewogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICAgIGhlaWdodDogMDsKICAgICAgfQogICAgICAuYWN0aW9ucy1iYXIgewogICAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CiAgICB9CiAgICA=
128
- var project_create_component_default = "/* angular:styles/component:less;003575e58b854dd1fdaf850e4326fd39c8526898617c02cd1a264a93e9dd8880;D:\\ng-manager\\webapp\\src\\app\\pages\\projects\\project-create\\project-create.component.ts */\n.page {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n.page .explorer-container {\n flex: 1 1 auto;\n height: 0;\n}\n.page .actions-bar {\n flex: 0 0 auto;\n padding: 16px;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n/*# sourceMappingURL=project-create.component.css.map */\n";
129
-
130
- // angular:jit:style:inline:src\app\pages\projects\project-create\project-create-modal.component.ts;Ci5jb250ZW50IHsKICBkaXNwbGF5OiBncmlkOwogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDM2MHB4OwogIGdhcDogMTZweDsKICBtYXJnaW4tdG9wOiAxNnB4Owp9CgoubWFpbiB7CiAgbWluLWhlaWdodDogNDIwcHg7Cn0KCi5hY3Rpb25zIHsKICBkaXNwbGF5OiBmbGV4OwogIGdhcDogOHB4OwogIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgbWFyZ2luLXRvcDogMThweDsKfQoKLmFzaWRlIHsKICBwb3NpdGlvbjogc3RpY2t5OwogIHRvcDogMTZweDsKICBoZWlnaHQ6IGZpdC1jb250ZW50Owp9CiAgICA=
131
- var project_create_modal_component_default = "/* angular:styles/component:less;b740667e2965cfbb9a634af2a88325b1f382881a4d1d8f0cbbcd4fc192f0d251;D:\\ng-manager\\webapp\\src\\app\\pages\\projects\\project-create\\project-create-modal.component.ts */\n.content {\n display: grid;\n grid-template-columns: 1fr 360px;\n gap: 16px;\n margin-top: 16px;\n}\n.main {\n min-height: 420px;\n}\n.actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n margin-top: 18px;\n}\n.aside {\n position: sticky;\n top: 16px;\n height: fit-content;\n}\n/*# sourceMappingURL=project-create-modal.component.css.map */\n";
132
-
133
- // angular:jit:style:inline:src\app\pages\projects\components\create-summary-aside.component.ts;CiAgICAuaXRlbSB7IGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47IGdhcDogMTBweDsgcGFkZGluZzogNnB4IDA7YWxpZ24taXRlbXM6IGNlbnRlcjsgfQogICAgLmsgeyBvcGFjaXR5OiAuNzsgd2lkdGg6IDkwcHg7Zm9udC1zaXplOiAxNHB4OyB9CiAgICAudiB7IHRleHQtYWxpZ246IHJpZ2h0OyBmbGV4OiAxO292ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9CiAgICAubW9ubyB7IGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgIkxpYmVyYXRpb24gTW9ubyIsIG1vbm9zcGFjZTsgd29yZC1icmVhazogYnJlYWstYWxsOyB9CiAgICAuc2VwIHsgaGVpZ2h0OiAxcHg7IGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsLjA2KTsgbWFyZ2luOiAxMHB4IDA7IH0KICAgIC50YWcgeyBtYXJnaW4tdG9wOiA4cHg7IHRleHQtYWxpZ246IHJpZ2h0OyB9CiAgICAud2FybiB7IG1hcmdpbi10b3A6IDEwcHg7IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6ICNkNDZiMDg7IH0KICA=
134
- var create_summary_aside_component_default = '/* angular:styles/component:less;b9ffde9aa18883857097dda339cdf9d1c94b1bdcae063459df7d83fbab96d96c;D:\\ng-manager\\webapp\\src\\app\\pages\\projects\\components\\create-summary-aside.component.ts */\n.item {\n display: flex;\n justify-content: space-between;\n gap: 10px;\n padding: 6px 0;\n align-items: center;\n}\n.k {\n opacity: 0.7;\n width: 90px;\n font-size: 14px;\n}\n.v {\n text-align: right;\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.mono {\n font-family:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n "Liberation Mono",\n monospace;\n word-break: break-all;\n}\n.sep {\n height: 1px;\n background: rgba(0, 0, 0, 0.06);\n margin: 10px 0;\n}\n.tag {\n margin-top: 8px;\n text-align: right;\n}\n.warn {\n margin-top: 10px;\n font-size: 12px;\n color: #d46b08;\n}\n/*# sourceMappingURL=create-summary-aside.component.css.map */\n';
135
-
136
- // src/app/pages/projects/components/create-summary-aside.component.ts
137
- var CreateSummaryAsideComponent = class CreateSummaryAsideComponent2 {
138
- draft;
139
- chunk = "";
140
- clipboard = inject(Clipboard);
141
- term;
142
- isDrawerOpen = false;
143
- isCreating = model(false);
144
- copyied = false;
145
- ngOnChanges(changes) {
146
- if (changes["chunk"] && changes["chunk"].currentValue && this.term) {
147
- this.term.write(this.chunk);
148
- }
149
- if (changes["isCreating"] && changes["isCreating"].currentValue === true) {
150
- this.isDrawerOpen = true;
151
- }
152
- }
153
- copy() {
154
- const text = this.draft.repoUrl || "";
155
- this.clipboard.copy(text);
156
- this.copyied = true;
157
- setTimeout(() => {
158
- this.copyied = false;
159
- }, 2e3);
160
- }
161
- static propDecorators = {
162
- draft: [{ type: Input, args: [{ required: true }] }],
163
- chunk: [{ type: Input }],
164
- term: [{ type: ViewChild, args: [TerminalViewComponent] }],
165
- isCreating: [{ type: Input, args: [{ isSignal: true, alias: "isCreating", required: false }] }, { type: Output, args: ["isCreatingChange"] }]
166
- };
167
- };
168
- CreateSummaryAsideComponent = __decorate([
169
- Component({
170
- standalone: true,
171
- selector: "app-create-summary-aside",
172
- changeDetection: ChangeDetectionStrategy.OnPush,
173
- imports: [CommonModule, NzCardModule, NzTagModule, NzTooltipModule, NzIconModule, NzButtonModule, TerminalViewComponent, NzDrawerModule],
174
- template: `
175
- <!--[nzExtra]="isCreating() ? logActions : undefined"-->
176
- <nz-card nzTitle="\u6458\u8981" nzSize="small" [nzExtra]="logActions">
177
- <div class="item"><span class="k">\u540D\u79F0</span><span class="v">{{draft.name || '-'}}</span></div>
178
- <div class="item"><span class="k">\u8DEF\u5F84</span><span class="v mono">{{draft.rootPath || '-'}}</span></div>
179
- <div class="item"><span class="k">\u5305\u7BA1\u7406\u5668</span><span class="v">{{draft.packageManager}}</span></div>
180
- <div class="item">
181
- <span class="k">Git \u8FDC\u7A0B\u4ED3\u5E93</span>
182
- <span class="v" [nz-tooltip]="draft.repoUrl||''">{{draft.repoUrl || '-'}}</span>
183
- @if(draft.repoUrl){
184
- <button nz-button nzType="text" nzSize="small" (click)="copy()" [nz-tooltip]="copyied ? '\u5DF2\u590D\u5236' : '\u590D\u5236'">
185
- <nz-icon nzType="copy" nzTheme="outline" />
186
- </button>
187
- }
188
- </div>
189
-
190
- <div class="sep"></div>
191
-
192
- <div class="item"><span class="k">\u6846\u67B6</span><span class="v">{{draft.detected?.framework || '-'}}</span></div>
193
- <div class="item"><span class="k">\u811A\u672C\u547D\u4EE4</span><span class="v">{{draft.detected?.scriptsCount ?? '-'}}</span></div>
194
- <div class="item"><span class="k">Git</span><span class="v">{{draft.detected?.hasGit ? 'Yes' : 'No'}}</span></div>
195
-
196
- @if(draft.detected?.recommendedScript){
197
- <div class="tag">
198
- <nz-tag nzColor="blue">\u63A8\u8350\uFF1A{{draft.detected?.recommendedScript}}</nz-tag>
199
- </div>
200
- }
201
-
202
- @if( draft.overwriteIfExists){
203
- <div class="warn" >
204
- \u26A0\uFE0F \u8986\u76D6\u5DF2\u5B58\u5728\u76EE\u5F55
205
- </div>
206
- }
207
- </nz-card>
208
- <ng-template #logActions>
209
- <button nz-button nzType="text" nzSize="small" (click)="isDrawerOpen = !isDrawerOpen">
210
- <nz-icon nzType="desktop" nzTheme="outline"></nz-icon>
211
- \u65E5\u5FD7\u8F93\u51FA
212
- </button>
213
- </ng-template>
214
-
215
- <nz-drawer
216
- [nzVisible]="isDrawerOpen"
217
- (nzOnClose)="isDrawerOpen = false"
218
- nzTitle="\u65E5\u5FD7"
219
- [nzWidth]="720"
220
- nzPlacement="right"
221
- [nzBodyStyle]="{'padding': '8px'}"
222
- >
223
- <ng-container *nzDrawerContent>
224
- <app-terminal-view [style.height.%]="100"></app-terminal-view>
225
- </ng-container>
226
- </nz-drawer>
227
- `,
228
- styles: [create_summary_aside_component_default]
229
- })
230
- ], CreateSummaryAsideComponent);
231
-
232
- // angular:jit:style:inline:src\app\pages\projects\components\pick-workspace-modal.component.ts;CiAgICAud3JhcCB7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogMTJweDsgfQogICAgLmhpbnQgeyBvcGFjaXR5OiAuODU7IH0KICAgIC50b29sYmFyIHsgbWFyZ2luLXRvcDogNHB4OyB9CiAgICBuei1yYWRpby1ncm91cCB7IHdpZHRoOiAxMDAlOyB9CiAgICAubGlzdCB7CiAgICAgIGhlaWdodDogMjQwcHg7CiAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIGJvcmRlcjogdmFyKC0tYXBwLWJvcmRlci1jb2xvcik7CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIH0KICAgIC5pdGVtIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiA4cHg7CiAgICAgIHBhZGRpbmc6IDEycHggMTJweDsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBtYXJnaW46IDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICY6aG92ZXJ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYXBwLXByaW1hcnktMyk7CiAgICAgIH0KICAgICAgOjpuZy1kZWVwIC5hbnQtcmFkaW8rc3BhbnsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgIH0KICAgIC5wYXRoe2Rpc3BsYXk6ZmxleDtnYXA6MTJweDsgZmxleDogMSAxIGF1dG87IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB3aWR0aDogMDsgb3ZlcmZsb3c6IGhpZGRlbjt9CiAgICAucGF0aCAudmFsdWV7IAogICAgICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICJMaWJlcmF0aW9uIE1vbm8iLCAiQ291cmllciBOZXciLCBtb25vc3BhY2U7IAogICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIHdpZHRoOiAwOwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogIH0KICAgIC5hY3Rpb25zIHsgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsgZ2FwOiA4cHg7IG1hcmdpbi10b3A6IDRweDsgfQogIA==
233
- var pick_workspace_modal_component_default = '/* angular:styles/component:less;5287ea1b90ad59306d455dd89d080622f8924bfeb0b3ea39e3c696973b2c2deb;D:\\ng-manager\\webapp\\src\\app\\pages\\projects\\components\\pick-workspace-modal.component.ts */\n.wrap {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.hint {\n opacity: 0.85;\n}\n.toolbar {\n margin-top: 4px;\n}\nnz-radio-group {\n width: 100%;\n}\n.list {\n height: 240px;\n overflow: auto;\n padding: 8px;\n border: var(--app-border-color);\n border-radius: 8px;\n}\n.item {\n display: flex;\n gap: 8px;\n padding: 12px 12px;\n border-radius: 8px;\n margin: 0px;\n width: 100%;\n}\n.item:hover {\n background-color: var(--app-primary-3);\n}\n.item ::ng-deep .ant-radio + span {\n display: flex;\n gap: 12px;\n align-items: center;\n flex: 1 1 auto;\n width: 0;\n padding: 0;\n}\n.path {\n display: flex;\n gap: 12px;\n flex: 1 1 auto;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 0;\n overflow: hidden;\n}\n.path .value {\n font-family:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n "Liberation Mono",\n "Courier New",\n monospace;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1 1 auto;\n width: 0;\n overflow: hidden;\n}\n.actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 4px;\n}\n/*# sourceMappingURL=pick-workspace-modal.component.css.map */\n';
234
-
235
- // src/app/pages/projects/components/pick-workspace-modal.component.ts
236
- var PickWorkspaceModalComponent = class PickWorkspaceModalComponent2 {
237
- modalRef;
238
- data = inject(NZ_MODAL_DATA);
239
- keyword = signal("");
240
- selectedPath = signal(null);
241
- constructor(modalRef) {
242
- this.modalRef = modalRef;
243
- }
244
- ngOnInit() {
245
- const { candidates, defaultPicked } = this.data;
246
- const first2 = defaultPicked && candidates.includes(defaultPicked) ? defaultPicked : candidates[0] ?? "";
247
- this.selectedPath.set(first2?.path ?? null);
248
- }
249
- filtered = computed(() => {
250
- const kw = (this.keyword() || "").trim().toLowerCase();
251
- const list = this.data.candidates ?? [];
252
- if (!kw)
253
- return list;
254
- return list.filter((p) => p.path.toLowerCase().includes(kw));
255
- });
256
- cancel() {
257
- this.modalRef.close(null);
258
- }
259
- ok() {
260
- const picked = this.selectedPath();
261
- if (!picked)
262
- return;
263
- this.modalRef.close({ pickedRoot: picked });
264
- }
265
- static ctorParameters = () => [
266
- { type: NzModalRef }
267
- ];
268
- };
269
- PickWorkspaceModalComponent = __decorate([
270
- Component({
271
- selector: "app-pick-workspace-modal",
272
- standalone: true,
273
- imports: [
274
- CommonModule,
275
- FormsModule,
276
- NzModalModule,
277
- NzInputModule,
278
- NzRadioModule,
279
- NzButtonModule,
280
- NzIconModule,
281
- NzEmptyModule,
282
- NzTagModule,
283
- NzTooltipModule
284
- ],
285
- template: `
286
- <div class="wrap">
287
- <div class="hint">
288
- \u68C0\u6D4B\u5230\u8BE5\u4ED3\u5E93\u53EF\u80FD\u5305\u542B\u591A\u4E2A\u524D\u7AEF\u5DE5\u4F5C\u533A\uFF08Angular / Vue \u7B49\uFF09\u3002\u8BF7\u9009\u62E9\u4E00\u4E2A\u76EE\u5F55\u7EE7\u7EED\u5BFC\u5165\uFF1A
289
- </div>
290
-
291
- <div class="toolbar">
292
- <nz-input-wrapper>
293
- <input nz-input placeholder="\u8FC7\u6EE4\u8DEF\u5F84\uFF08\u5173\u952E\u5B57\uFF09" [(ngModel)]="keyword" />
294
- <nz-icon nzType="search" nzTheme="outline" nzSuffix />
295
- </nz-input-wrapper>
296
- </div>
297
-
298
- <div class="list">
299
- @if (filtered().length === 0) {
300
- <nz-empty nzNotFoundContent="\u6CA1\u6709\u5339\u914D\u7684\u76EE\u5F55"></nz-empty>
301
- } @else {
302
- <nz-radio-group [(ngModel)]="selectedPath" nzSize="large">
303
- @for (p of filtered(); track p) {
304
- <div nz-radio [nzValue]="p.path" class="item">
305
- <div class="path">
306
- <div class="value" [nz-tooltip]="p.path" nzTooltipPlacement="top">{{ p.path }}</div>
307
- @let kind = p.kind;
308
- @if(kind) {
309
- <nz-tag [nzColor]="kind==='angular' ? '#dd0031' : kind==='vue' ? '#42b883' : '#108ee9'" nzMode="default">
310
- {{ p.kind | titlecase }}
311
- </nz-tag>
312
- }
313
- </div>
314
- </div>
315
- }
316
- </nz-radio-group>
317
- }
318
- </div>
319
-
320
- <div class="actions">
321
- <button nz-button (click)="cancel()">
322
- <nz-icon nzType="close" nzTheme="outline" />
323
- \u53D6\u6D88
324
- </button>
325
-
326
- <button
327
- nz-button
328
- nzType="primary"
329
- [disabled]="!selectedPath()"
330
- (click)="ok()"
331
- >
332
- <nz-icon nzType="check" nzTheme="outline" />
333
- \u9009\u4E2D\u5E76\u7EE7\u7EED
334
- </button>
335
- </div>
336
- </div>
337
- `,
338
- styles: [pick_workspace_modal_component_default]
339
- })
340
- ], PickWorkspaceModalComponent);
341
-
342
- // angular:jit:style:inline:src\app\pages\projects\components\step-basic.component.ts;CiAgICAuaGludCB7IG1hcmdpbi10b3A6IDZweDsgZm9udC1zaXplOiAxMnB4OyBvcGFjaXR5OiAuNzsgfQogICAgLnN3aXRjaC1yb3cgeyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47IHBhZGRpbmctYm90dG9tOiAgNHB4OyBzcGFue2ZvbnQtc2l6ZToxNHB4O30gfQogICAgLmVtaXQgeyBtYXJnaW4tdG9wOiA4cHg7IH0KICA=
343
- var step_basic_component_default = "/* angular:styles/component:less;7757dd15c89a8cad7a6825fbe9a49cf4c9a152d611cf55cbb9706b80f692f9d3;D:\\ng-manager\\webapp\\src\\app\\pages\\projects\\components\\step-basic.component.ts */\n.hint {\n margin-top: 6px;\n font-size: 12px;\n opacity: 0.7;\n}\n.switch-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-bottom: 4px;\n}\n.switch-row span {\n font-size: 14px;\n}\n.emit {\n margin-top: 8px;\n}\n/*# sourceMappingURL=step-basic.component.css.map */\n";
344
-
345
- // src/app/pages/projects/components/step-basic.component.ts
346
- var StepBasicComponent = class StepBasicComponent2 {
347
- draft;
348
- draftChange = new EventEmitter();
349
- pathCheck$ = new Subject();
350
- pathExists = false;
351
- fsApi = inject(FsExplorerApiService);
352
- ngOnInit() {
353
- this.computeRootPath();
354
- this.pathCheck$.pipe(debounceTime(200), distinctUntilChanged(), switchMap((p) => p ? this.fsApi.pathExists(p) : of(false))).subscribe((exists) => {
355
- this.emit();
356
- this.pathExists = exists;
357
- });
358
- }
359
- recalcRoot() {
360
- this.computeRootPath();
361
- this.pathCheck$.next(this.draft.rootPath);
362
- }
363
- computeRootPath() {
364
- const parent = (this.draft.parentDir ?? "").replace(/[\\/]+$/, "");
365
- const name = (this.draft.name ?? "").trim();
366
- this.draft.rootPath = parent && name ? `${parent}/${name}`.replaceAll("\\", "/") : parent;
367
- }
368
- emit() {
369
- this.draftChange.emit(__spreadValues({}, this.draft));
370
- }
371
- static propDecorators = {
372
- draft: [{ type: Input, args: [{ required: true }] }],
373
- draftChange: [{ type: Output }]
374
- };
375
- };
376
- StepBasicComponent = __decorate([
377
- Component({
378
- standalone: true,
379
- selector: "app-step-basic",
380
- imports: [
381
- CommonModule,
382
- FormsModule,
383
- NzFormModule,
384
- NzInputModule,
385
- NzButtonModule,
386
- NzSelectModule,
387
- NzSwitchModule,
388
- NzCardModule,
389
- NzTooltipModule,
390
- NzIconModule,
391
- NzModalModule
392
- ],
393
- template: `
394
- <nz-card nzTitle="\u57FA\u7840\u8BBE\u7F6E">
395
- <form nz-form nzLayout="vertical">
396
- <nz-form-item>
397
- <nz-form-label>\u9879\u76EE\u6587\u4EF6\u5939</nz-form-label>
398
- <nz-form-control>
399
- <input nz-input [(ngModel)]="draft.name" name="name" placeholder="\u8F93\u5165\u9879\u76EE\u540D" (ngModelChange)="recalcRoot()"/>
400
- <div class="hint">
401
- {{draft.rootPath}}
402
- @if(pathExists){ <span style="margin-left:8px;color:#ff4d4f;">\u8BE5\u8DEF\u5F84\u5DF2\u5B58\u5728</span> }
403
- </div>
404
- </nz-form-control>
405
- </nz-form-item>
406
- <nz-form-item>
407
- <nz-form-label>\u5305\u7BA1\u7406\u5668</nz-form-label>
408
- <nz-form-control>
409
- <nz-select [(ngModel)]="draft.packageManager" name="pm">
410
- <nz-option nzValue="auto" nzLabel="\u9ED8\u8BA4"></nz-option>
411
- <nz-option nzValue="npm" nzLabel="npm"></nz-option>
412
- <nz-option nzValue="pnpm" nzLabel="pnpm"></nz-option>
413
- <nz-option nzValue="yarn" nzLabel="yarn"></nz-option>
414
- </nz-select>
415
- </nz-form-control>
416
- </nz-form-item>
417
- <nz-form-item>
418
- <nz-form-label>\u66F4\u591A\u9009\u9879</nz-form-label>
419
- <nz-form-control>
420
- <div class="switch-row">
421
- <span>\u82E5\u76EE\u6807\u6587\u4EF6\u5939\u5DF2\u5B58\u5728\u5219\u8986\u76D6</span>
422
- <nz-switch [(ngModel)]="draft.overwriteIfExists" (ngModelChange)="emit()" name="overwrite"></nz-switch>
423
- </div>
424
- <div class="switch-row">
425
- <span>\u65E0\u65B0\u624B\u6307\u5F15\u7684\u811A\u624B\u67B6\u9879\u76EE</span>
426
- <nz-switch [(ngModel)]="draft.skipOnboarding" name="skip"></nz-switch>
427
- </div>
428
- </nz-form-control>
429
- </nz-form-item>
430
- <nz-form-item>
431
- <nz-form-label>Git</nz-form-label>
432
- <nz-form-control>
433
- <div class="switch-row">
434
- <span>\u521D\u59CB\u5316 git \u4ED3\u5E93\uFF08\u5EFA\u8BAE\uFF09</span>
435
- <nz-switch [(ngModel)]="draft.initGit" name="initGit"></nz-switch>
436
- </div>
437
- @if(draft.initGit){
438
- <input nz-input [(ngModel)]="draft.initialCommitMessage" name="msg" placeholder="\u8986\u76D6\u63D0\u4EA4\u4FE1\u606F(\u9009\u586B)"/>
439
- }
440
- </nz-form-control>
441
- </nz-form-item>
442
- </form>
443
- </nz-card>
444
- `,
445
- styles: [step_basic_component_default]
446
- })
447
- ], StepBasicComponent);
448
-
449
- // angular:jit:style:inline:src\app\pages\projects\components\step-config.component.ts;CiAgICAucm93IHsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOyBwYWRkaW5nOiAxMHB4IDA7IH0KICAgIC5yb3cuY29sIHsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IGdhcDogOHB4OyB9CiAgICAubGFiZWwgeyBmb250LXdlaWdodDogNTAwOyB9CiAgICAuaGludCB7IGZvbnQtc2l6ZTogMTJweDsgb3BhY2l0eTogLjc7IH0KICA=
450
- var step_config_component_default = "/* angular:styles/component:less;472cec399461669211a54f75e5af0c1eb2faa78b6043c99572b2f0efb6cb4526;D:\\ng-manager\\webapp\\src\\app\\pages\\projects\\components\\step-config.component.ts */\n.row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 0;\n}\n.row.col {\n flex-direction: column;\n align-items: flex-start;\n gap: 8px;\n}\n.label {\n font-weight: 500;\n}\n.hint {\n font-size: 12px;\n opacity: 0.7;\n}\n/*# sourceMappingURL=step-config.component.css.map */\n";
451
-
452
- // src/app/pages/projects/components/step-config.component.ts
453
- var StepConfigComponent = class StepConfigComponent2 {
454
- draft;
455
- draftChange = new EventEmitter();
456
- emit() {
457
- this.draftChange.emit(__spreadValues({}, this.draft));
458
- }
459
- static propDecorators = {
460
- draft: [{ type: Input, args: [{ required: true }] }],
461
- draftChange: [{ type: Output }]
462
- };
463
- };
464
- StepConfigComponent = __decorate([
465
- Component({
466
- standalone: true,
467
- selector: "app-step-config",
468
- imports: [CommonModule, FormsModule, NzCardModule, NzRadioModule, NzSwitchModule, NzInputModule],
469
- template: `
470
- <nz-card nzTitle="\u521B\u5EFA\u540E\u9ED8\u8BA4\u884C\u4E3A">
471
- <div class="row">
472
- <div class="label">\u7F6E\u9876\u6536\u85CF</div>
473
- <nz-switch [(ngModel)]="draft.pinFavorite" (ngModelChange)="emit()"></nz-switch>
474
- </div>
475
-
476
- <div class="row col">
477
- <!-- <div class="label">\u521B\u5EFA\u540E\u9ED8\u8BA4\u6253\u5F00</div>
478
- <nz-radio-group [(ngModel)]="draft.openAfterCreate" (ngModelChange)="emit()">
479
- <label nz-radio nzValue="tasks">Tasks</label>
480
- <label nz-radio nzValue="home">Home</label>
481
- </nz-radio-group> -->
482
- </div>
483
-
484
- <div class="row col">
485
- <div class="label">\u9ED8\u8BA4\u4EFB\u52A1\uFF08\u53EF\u9009\uFF09</div>
486
- <input nz-input [(ngModel)]="draft.defaultTaskName" (ngModelChange)="emit()" placeholder="\u4F8B\u5982\uFF1Adev / start"/>
487
- <div class="hint">\u5EFA\u8BAE\u586B\u8BC6\u522B\u5230\u7684 dev \u6216 start</div>
488
- </div>
489
- </nz-card>
490
- `,
491
- styles: [step_config_component_default]
492
- })
493
- ], StepConfigComponent);
494
-
495
- // angular:jit:style:inline:src\app\pages\projects\components\step-features.component.ts;CiAgICAucm93IHsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOyBwYWRkaW5nOiAxMHB4IDA7IH0KICAgIC5sYWJlbCB7IGZvbnQtd2VpZ2h0OiA1MDA7IH0KICA=
496
- var step_features_component_default = "/* angular:styles/component:less;a1e2162d0f20406735a955e67a37165b79f76a169f5b06c9f7656fa71c71dc6d;D:\\ng-manager\\webapp\\src\\app\\pages\\projects\\components\\step-features.component.ts */\n.row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 0;\n}\n.label {\n font-weight: 500;\n}\n/*# sourceMappingURL=step-features.component.css.map */\n";
497
-
498
- // src/app/pages/projects/components/step-features.component.ts
499
- var StepFeaturesComponent = class StepFeaturesComponent2 {
500
- draft;
501
- draftChange = new EventEmitter();
502
- emit() {
503
- this.draftChange.emit(__spreadValues({}, this.draft));
504
- }
505
- static propDecorators = {
506
- draft: [{ type: Input, args: [{ required: true }] }],
507
- draftChange: [{ type: Output }]
508
- };
509
- };
510
- StepFeaturesComponent = __decorate([
511
- Component({
512
- standalone: true,
513
- selector: "app-step-features",
514
- imports: [CommonModule, FormsModule, NzCardModule, NzSwitchModule],
515
- template: `
516
- <nz-card nzTitle="\u529F\u80FD\u5F00\u5173\uFF08Project Scope\uFF09">
517
- <!-- <div class="row">
518
- <div class="label">Tasks\uFF08\u5FC5\u9009\uFF09</div>
519
- <nz-switch [(ngModel)]="draft.featureTasks" [ngModelOptions]="{standalone:true}" [nzDisabled]="true"></nz-switch>
520
- </div>
521
-
522
- <div class="row">
523
- <div class="label">Processes</div>
524
- <nz-switch [(ngModel)]="draft.featureProcesses" (ngModelChange)="emit()"></nz-switch>
525
- </div>
526
-
527
- <div class="row">
528
- <div class="label">Logs</div>
529
- <nz-switch [(ngModel)]="draft.featureLogs" (ngModelChange)="emit()"></nz-switch>
530
- </div>
531
-
532
- <div class="row">
533
- <div class="label">Terminal\uFF08\u540E\u7EED\uFF09</div>
534
- <nz-switch [(ngModel)]="draft.featureTerminal" (ngModelChange)="emit()" [nzDisabled]="true"></nz-switch>
535
- </div> -->
536
- </nz-card>
537
- `,
538
- styles: [step_features_component_default]
539
- })
540
- ], StepFeaturesComponent);
541
-
542
- // angular:jit:style:inline:src\app\pages\projects\components\step-preset.component.ts;CiAgICAua3YgeyBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7IGdhcDogOHB4IDEycHg7IH0KICAgIC5rIHsgb3BhY2l0eTogLjc7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyB3aWR0aDogMTIwcHg7IH0KICAgIC5vcHQgeyBtYXJnaW4tdG9wOiAxMHB4OyB9CiAgICBuei1yYWRpby1ncm91cCB7IHdpZHRoOiAxMDAlOyB9CiAgICBbbnotcmFkaW9dIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiAxMnB4IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbjowOwogICAgICAgICY6aG92ZXJ7CiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hcHAtcHJpbWFyeS0zKTsKICAgICAgICB9CiAgICB9CiAgICAuaGludCB7CiAgICAgIG1hcmdpbi1sZWZ0OiAyNHB4OwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIG9wYWNpdHk6IC43NTsKICAgIH0KICA=
543
- var step_preset_component_default = "/* angular:styles/component:less;d9d68b139b2e21f242c0a3ef4b2427dba36969f779de06467711c14f5184d970;D:\\ng-manager\\webapp\\src\\app\\pages\\projects\\components\\step-preset.component.ts */\n.kv {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px 12px;\n}\n.k {\n opacity: 0.7;\n display: inline-block;\n width: 120px;\n}\n.opt {\n margin-top: 10px;\n}\nnz-radio-group {\n width: 100%;\n}\n[nz-radio] {\n display: block;\n padding: 12px 12px;\n border-radius: 8px;\n width: 100%;\n margin: 0;\n}\n[nz-radio]:hover {\n background-color: var(--app-primary-3);\n}\n.hint {\n margin-left: 24px;\n font-size: 12px;\n opacity: 0.75;\n}\n/*# sourceMappingURL=step-preset.component.css.map */\n";
544
-
545
- // angular:jit:style:inline:src\app\pages\projects\components\git-import-modal.component.ts;CiAgICAgIC5oaW50IHsgbWFyZ2luLXRvcDogNnB4OyBmb250LXNpemU6IDEycHg7IG9wYWNpdHk6IC43OyB9CiAgICA=
546
- var git_import_modal_component_default = "/* angular:styles/component:less;fdd001241c9b4eb1495030a95eaea3273462ba812393c82625f1814e80fca531;D:\\ng-manager\\webapp\\src\\app\\pages\\projects\\components\\git-import-modal.component.ts */\n.hint {\n margin-top: 6px;\n font-size: 12px;\n opacity: 0.7;\n}\n/*# sourceMappingURL=git-import-modal.component.css.map */\n";
547
-
548
- // src/app/pages/projects/components/git-import-modal.component.ts
549
- var GitImportModalComponent = class GitImportModalComponent2 {
550
- nzModalData = inject(NZ_MODAL_DATA);
551
- isModalVisible = false;
552
- isSaving = false;
553
- };
554
- GitImportModalComponent = __decorate([
555
- Component({
556
- selector: "app-git-import-modal-component",
557
- imports: [
558
- CommonModule,
559
- FormsModule,
560
- NzIconModule,
561
- NzModalModule,
562
- NzInputModule,
563
- NzSelectModule,
564
- NzButtonModule
565
- ],
566
- template: `
567
- <div class="modal-body">
568
- <label class="label">URL</label>
569
- <nz-input-wrapper >
570
- <input
571
- nz-input
572
- [(ngModel)]="nzModalData.cloneUrl"
573
- placeholder="\u8BF7\u8F93\u5165Git\u4ED3\u5E93\u5730\u5740"
574
- autofocus
575
- />
576
- <nz-icon nzInputPrefix nzType="github" nzTheme="outline" />
577
- </nz-input-wrapper>
578
- <div class="hint">
579
- Git \u4ED3\u5E93\u5730\u5740, \u5982 'username/repo'. \u53EF\u4EE5\u4F7F\u7528\u524D\u7F00\u5982 'gitlab:' \u6216 'bitbucket:'.
580
- </div>
581
- </div>
582
- `,
583
- styles: [git_import_modal_component_default]
584
- })
585
- ], GitImportModalComponent);
586
-
587
- // src/app/pages/projects/components/step-preset.component.ts
588
- var StepPresetComponent = class StepPresetComponent2 {
589
- draft;
590
- draftChange = new EventEmitter();
591
- requestDetect = new EventEmitter();
592
- modal = inject(NzModalService);
593
- emit() {
594
- this.draftChange.emit(__spreadValues({}, this.draft));
595
- }
596
- presetChange(preset) {
597
- this.draft.preset = preset;
598
- if (preset === "git") {
599
- this.openImportGitModal();
600
- return;
601
- } else {
602
- this.draft.repoUrl = void 0;
603
- this.emit();
604
- }
605
- }
606
- openImportGitModal() {
607
- const modal = this.modal.create({
608
- nzTitle: "\u4ECE Git \u4ED3\u5E93\u5BFC\u5165\u9879\u76EE",
609
- nzMaskClosable: false,
610
- nzContent: GitImportModalComponent,
611
- nzCentered: true,
612
- nzWidth: "580px",
613
- nzClosable: false,
614
- nzData: {
615
- cloneUrl: "",
616
- isSaving: false
617
- },
618
- nzFooter: [
619
- {
620
- label: "\u53D6\u6D88",
621
- type: "default",
622
- onClick: () => {
623
- modal.close();
624
- this.draft.repoUrl = void 0;
625
- this.draft.preset = "angular";
626
- this.emit();
627
- }
628
- },
629
- {
630
- label: "\u5BFC\u5165",
631
- type: "primary",
632
- onClick: (comp) => {
633
- const url = comp.nzModalData.cloneUrl;
634
- const isSaving = comp.nzModalData.isSaving;
635
- if (!url || !url.trim() || isSaving) {
636
- return;
637
- }
638
- comp.nzModalData.isSaving = true;
639
- this.draft.repoUrl = url.trim();
640
- comp.nzModalData.isSaving = false;
641
- this.emit();
642
- modal.close();
643
- },
644
- disabled: (comp) => {
645
- const url = comp?.nzModalData.cloneUrl;
646
- return !url || !url.trim();
647
- },
648
- loading: (comp) => {
649
- const isSaving = comp?.nzModalData.isSaving;
650
- return isSaving === true;
651
- }
652
- }
653
- ]
654
- });
655
- }
656
- static propDecorators = {
657
- draft: [{ type: Input, args: [{ required: true }] }],
658
- draftChange: [{ type: Output }],
659
- requestDetect: [{ type: Output }]
660
- };
661
- };
662
- StepPresetComponent = __decorate([
663
- Component({
664
- standalone: true,
665
- selector: "app-step-preset",
666
- imports: [CommonModule, FormsModule, NzCardModule, NzCheckboxModule, NzButtonModule, NzTagModule, NzIconModule, NzRadioModule],
667
- template: `
668
- <nz-card nzTitle="\u9009\u62E9\u4E00\u5957\u9884\u8BBE" [nzExtra]="reloadExtraTpl">
669
- <ng-template #reloadExtraTpl>
670
- <button nz-button nzType="text" nzSize="small" (click)="requestDetect.emit()">
671
- <nz-icon nzType="reload" nzTheme="outline" />
672
- </button>
673
- </ng-template>
674
- <nz-radio-group [(ngModel)]="draft.preset" (ngModelChange)="presetChange($event)" nzSize="large">
675
- <div nz-radio nzValue="angular">
676
- <label for="angular">Angular</label>
677
- <div class="hint">
678
- \u9002\u7528\u4E8E\u4F7F\u7528 Angular \u6846\u67B6\u5F00\u53D1\u7684\u9879\u76EE\uFF0C\u652F\u6301 Angular CLI \u76F8\u5173\u4EFB\u52A1\u548C\u914D\u7F6E\u3002
679
- </div>
680
- </div>
681
- <div nz-radio nzValue="vue3">
682
- <label for="vue3">Vue 3</label>
683
- <div class="hint">
684
- \u9002\u7528\u4E8E\u4F7F\u7528 Vue 3 \u6846\u67B6\u5F00\u53D1\u7684\u9879\u76EE\uFF0C\u652F\u6301 Vite \u548C Vue CLI \u76F8\u5173\u4EFB\u52A1\u548C\u914D\u7F6E\u3002
685
- </div>
686
- </div>
687
- <!-- <div nz-radio nzValue="manual">
688
- <label for="manual">\u624B\u52A8</label>
689
- <div class="hint">
690
- \u4E0D\u4F7F\u7528\u4EFB\u4F55\u9884\u8BBE\uFF0C\u624B\u52A8\u914D\u7F6E\u9879\u76EE\u529F\u80FD\u548C\u4EFB\u52A1\u3002
691
- </div>
692
- </div> -->
693
- <div nz-radio nzValue="git">
694
- <label for="git">Git\u5BFC\u5165</label>
695
- <div class="hint">
696
- \u4ECE\u73B0\u6709\u7684 Git \u4ED3\u5E93\u5BFC\u5165\u9879\u76EE\uFF0C\u81EA\u52A8\u8BC6\u522B\u9879\u76EE\u7ED3\u6784\u548C\u914D\u7F6E\u3002
697
- </div>
698
- </div>
699
- </nz-radio-group>
700
- </nz-card>
701
- <!-- <nz-card nzTitle="\u8BC6\u522B\u7ED3\u679C" [nzExtra]="extraTpl">
702
- <ng-template #extraTpl>
703
- <button nz-button nzSize="small" (click)="requestDetect.emit()">\u91CD\u65B0\u8BC6\u522B</button>
704
- </ng-template>
705
-
706
- <div class="kv">
707
- <div><span class="k">Framework</span><span class="v">{{draft.detected?.framework || 'unknown'}}</span></div>
708
- <div><span class="k">package.json</span><span class="v">{{draft.detected?.hasPackageJson ? 'Yes' : 'No'}}</span></div>
709
- <div><span class="k">scripts</span><span class="v">{{draft.detected?.scriptsCount ?? 0}}</span></div>
710
- <div><span class="k">lockfile</span><span class="v">{{draft.detected?.lockFile || 'none'}}</span></div>
711
- <div><span class="k">git</span><span class="v">{{draft.detected?.hasGit ? 'Yes' : 'No'}}</span></div>
712
- @if(draft.detected?.recommendedScript){
713
- <div>
714
- <span class="k">\u63A8\u8350\u8FD0\u884C</span>
715
- <span class="v"><nz-tag nzColor="blue">{{draft.detected?.recommendedScript}}</nz-tag></span>
716
- </div>
717
- }
718
- </div>
719
- </nz-card> -->
720
-
721
- <!-- <nz-card nzTitle="\u5BFC\u5165\u5185\u5BB9" style="margin-top:12px;">
722
- <label nz-checkbox [(ngModel)]="draft.importScriptsAsTasks" (ngModelChange)="emit()">
723
- \u5BFC\u5165 package.json scripts \u751F\u6210 Tasks\uFF08\u63A8\u8350\uFF09
724
- </label>
725
- @if(draft.detected?.hasMakefile){
726
- <div class="opt">
727
- <label nz-checkbox [(ngModel)]="draft.importMakefileTasks" (ngModelChange)="emit()">
728
- \u5BFC\u5165 Makefile \u4EFB\u52A1\uFF08\u53EF\u9009\uFF09
729
- </label>
730
- </div>
731
- }
732
- @if(draft.detected?.hasDockerCompose){
733
- <div class="opt" >
734
- <label nz-checkbox [(ngModel)]="draft.importDockerComposeTasks" (ngModelChange)="emit()">
735
- \u5BFC\u5165 docker-compose \u4EFB\u52A1\uFF08\u53EF\u9009\uFF09
736
- </label>
737
- </div>
738
- }
739
-
740
-
741
- <div class="opt">
742
- <label nz-checkbox [(ngModel)]="draft.generateCommonTasks" (ngModelChange)="emit()">
743
- \u751F\u6210\u901A\u7528\u4EFB\u52A1\u6A21\u677F\uFF08install / open / clean\uFF09
744
- </label>
745
- </div>
746
- </nz-card> -->
747
- `,
748
- styles: [step_preset_component_default]
749
- })
750
- ], StepPresetComponent);
751
-
752
- // src/app/pages/projects/models/project-draft.ts
753
- function createEmptyDraft() {
754
- return {
755
- preset: "angular",
756
- // 默认预设
757
- name: "",
758
- parentDir: "",
759
- rootPath: "",
760
- packageManager: "auto",
761
- overwriteIfExists: false,
762
- skipOnboarding: true,
763
- initGit: true,
764
- initialCommitMessage: "",
765
- importScriptsAsTasks: true,
766
- importMakefileTasks: false,
767
- importDockerComposeTasks: false,
768
- generateCommonTasks: true,
769
- pinFavorite: false,
770
- defaultTaskName: "",
771
- cliFramework: "angular",
772
- cliTool: "@angular/cli",
773
- cliArgs: []
774
- };
775
- }
776
-
777
- // src/app/pages/projects/project-create/project-create-modal.component.ts
778
- var ProjectCreateModal = class ProjectCreateModal2 {
779
- step = signal(0);
780
- draft = signal(createEmptyDraft());
781
- creating = signal(false);
782
- output = signal("");
783
- isDrawerOpen = signal(false);
784
- fs = inject(FsExplorerService);
785
- parentDir = this.fs.currentPath();
786
- modalRef = inject(NzModalRef);
787
- api = inject(ProjectApiService);
788
- modal = inject(NzModalService);
789
- notify = inject(UiNotifierService);
790
- taskStream = inject(TaskStreamService);
791
- projectState = inject(ProjectStateService);
792
- router = inject(Router);
793
- sub = new Subscription();
794
- ngOnInit() {
795
- const d = this.draft();
796
- const parentDir = this.parentDir;
797
- this.draft.set(__spreadProps(__spreadValues({}, d), { rootPath: "", parentDir, name: "" }));
798
- }
799
- detectNow() {
800
- const d = this.draft();
801
- if (!d.rootPath?.trim())
802
- return;
803
- this.api.detect(d.rootPath).subscribe((r) => {
804
- const scripts = r.scripts ?? [];
805
- const detected = {
806
- framework: r.framework ?? "unknown",
807
- hasPackageJson: !!r.hasPackageJson,
808
- scriptsCount: scripts.length,
809
- hasGit: !!r.hasGit,
810
- lockFile: r.lockFile ?? "unknown",
811
- recommendedScript: scripts.includes("dev") ? "dev" : scripts.includes("start") ? "start" : "",
812
- hasMakefile: !!r.hasMakefile,
813
- hasDockerCompose: !!r.hasDockerCompose
814
- };
815
- const importScriptsAsTasks = scripts.length > 0;
816
- const importMakefileTasks = !!r.hasMakefile;
817
- const importDockerComposeTasks = !!r.hasDockerCompose;
818
- this.draft.set(__spreadProps(__spreadValues({}, d), {
819
- detected,
820
- importScriptsAsTasks,
821
- importMakefileTasks: importMakefileTasks && d.importMakefileTasks,
822
- // 默认不强开
823
- importDockerComposeTasks: importDockerComposeTasks && d.importDockerComposeTasks,
824
- defaultTaskName: detected.recommendedScript || d.defaultTaskName
825
- }));
826
- });
827
- }
828
- async create() {
829
- const d = this.draft();
830
- if (!d.rootPath?.trim() || !d.name?.trim()) {
831
- this.notify.error("\u8BF7\u5148\u5B8C\u5584\u9879\u76EE\u4FE1\u606F");
832
- return;
833
- }
834
- if (this.creating())
835
- return;
836
- let nzTitle = "\u786E\u8BA4\u521B\u5EFA\u9879\u76EE\uFF1F", nzContent = `\u8BF7\u786E\u8BA4\u76EE\u6807\u8DEF\u5F84 ${d.rootPath}\uFF0C\u786E\u5B9A\u8981\u521B\u5EFA\u8BE5\u9879\u76EE\u5417\uFF1F`, nzOkText = "\u786E\u8BA4\u521B\u5EFA", nzOkDanger = false;
837
- if (d.overwriteIfExists) {
838
- nzTitle = "\u786E\u8BA4\u8986\u76D6\u5DF2\u5B58\u5728\u7684\u9879\u76EE\uFF1F";
839
- nzContent = `\u8BF7\u786E\u8BA4\u76EE\u6807\u8DEF\u5F84 ${d.rootPath}\uFF0C\u521B\u5EFA\u65F6\u4F1A\u8986\u76D6\u539F\u6709\u6570\u636E\uFF0C\u4E14\u4E0D\u53EF\u6062\u590D\uFF0C\u786E\u5B9A\u8981\u7EE7\u7EED\u5417\uFF1F`;
840
- nzOkText = "\u786E\u8BA4\u8986\u76D6";
841
- nzOkDanger = true;
842
- }
843
- const modalRef = this.modal.confirm({
844
- nzTitle,
845
- nzContent,
846
- nzOkText,
847
- nzCancelText: "\u53D6\u6D88",
848
- nzOkDanger,
849
- nzCentered: true,
850
- nzOnOk: async () => {
851
- this.doCreate(d);
852
- modalRef.close();
853
- }
854
- });
855
- }
856
- async doCreate(d) {
857
- this.creating.set(true);
858
- this.taskStream.ensureConnected();
859
- const destroy$ = new Subject();
860
- try {
861
- const bootstrap$ = d.preset === "git" ? this.api.bootstrapByGit(d) : this.api.bootstrapByCli(d);
862
- const { taskId } = await firstValueFrom(bootstrap$);
863
- this.taskStream.subscribeTask(taskId, 3e3);
864
- this.sub.add(this.taskStream.output$(taskId).subscribe((m) => {
865
- const chunk = m.payload.text ?? "";
866
- this.output.set(chunk);
867
- }));
868
- const firstEvt = await this.waitForTaskEvent(taskId, [
869
- "bootstrapDone",
870
- "bootstrapFailed",
871
- "bootstrapNeedPickRoot"
872
- ], 10 * 60 * 1e3, destroy$);
873
- if (firstEvt.type === "bootstrapDone") {
874
- const payload = firstEvt.payload;
875
- this.notify.success("\u9879\u76EE\u521B\u5EFA\u5B8C\u6210");
876
- this.projectState.getProjects(payload.projectId);
877
- this.modalRef.close({ ok: true });
878
- this.router.navigate(["/dashboard"]);
879
- return;
880
- }
881
- if (firstEvt.type === "bootstrapFailed") {
882
- const payload = firstEvt.payload;
883
- this.notify.error(`\u9879\u76EE\u521B\u5EFA\u5931\u8D25\uFF1A${payload?.reason ?? "unknown error"}`);
884
- return;
885
- }
886
- const pickPayload = firstEvt.payload;
887
- const candidates = pickPayload?.candidates ?? [];
888
- if (!candidates.length) {
889
- this.notify.error("\u9879\u76EE\u5BFC\u5165\u5931\u8D25\uFF1A\u672A\u627E\u5230\u53EF\u5BFC\u5165\u7684\u5DE5\u4F5C\u533A\u76EE\u5F55");
890
- return;
891
- }
892
- const pickedRoot = await this.pickWorkspaceRootByModal(candidates);
893
- if (!pickedRoot) {
894
- this.modal.info({
895
- nzTitle: "\u63D0\u793A",
896
- nzContent: "\u60A8\u672A\u9009\u62E9\u4EFB\u4F55\u76EE\u5F55\uFF0C\u9879\u76EE\u5BFC\u5165\u5DF2\u53D6\u6D88\u3002\u53EF\u901A\u8FC7\u201C\u5BFC\u5165\u201D\u529F\u80FD\u91CD\u65B0\u624B\u52A8\u5BFC\u5165\u3002",
897
- nzCancelText: null,
898
- nzOkText: "\u6211\u77E5\u9053\u4E86",
899
- nzOnOk: () => {
900
- this.modalRef.close();
901
- }
902
- });
903
- return;
904
- }
905
- const pickResult = await firstValueFrom(this.api.bootstrapPickRoot({ taskId, pickedRoot }).pipe(timeout(60 * 1e3), takeUntil(destroy$)));
906
- if (!pickResult.ok) {
907
- this.notify.error(pickResult.reason ?? "\u9879\u76EE\u5BFC\u5165\u5931\u8D25");
908
- return;
909
- }
910
- this.notify.success("\u9879\u76EE\u5BFC\u5165\u5B8C\u6210");
911
- this.projectState.getProjects(pickResult.projectId);
912
- this.modalRef.close({ ok: true });
913
- this.router.navigate(["/dashboard"]);
914
- } catch (err) {
915
- const msg = err?.name === "TimeoutError" ? "\u521B\u5EFA\u8D85\u65F6\uFF1A\u811A\u624B\u67B6/\u514B\u9686\u53EF\u80FD\u5361\u4F4F\u4E86\uFF0C\u8BF7\u67E5\u770B\u4EFB\u52A1\u65E5\u5FD7" : err?.error?.message || err?.message || "\u521B\u5EFA\u5931\u8D25";
916
- console.error("\u521B\u5EFA\u9879\u76EE\u5931\u8D25", err);
917
- this.notify.error(msg);
918
- } finally {
919
- destroy$.next();
920
- destroy$.complete();
921
- this.creating.set(false);
922
- }
923
- }
924
- /**
925
- * 等待指定 taskId 的某些事件类型之一出现(每次调用都会创建新订阅,避免 first() 复用导致丢事件)
926
- */
927
- async waitForTaskEvent(taskId, types, timeoutMs, destroy$) {
928
- const typeSet = new Set(types);
929
- return await firstValueFrom(this.taskStream.events$().pipe(filter((e) => e?.payload?.taskId === taskId), filter((e) => typeSet.has(e.type)), first(), timeout(timeoutMs), takeUntil(destroy$)));
930
- }
931
- setDraft(d) {
932
- this.draft.set(d);
933
- }
934
- canNext() {
935
- const s = this.step();
936
- const d = this.draft();
937
- if (s === 0) {
938
- if (!d.name?.trim())
939
- return false;
940
- if (!d.parentDir?.trim())
941
- return false;
942
- if (!d.rootPath?.trim())
943
- return false;
944
- return true;
945
- }
946
- if (s === 1) {
947
- return !!d.rootPath?.trim();
948
- }
949
- return true;
950
- }
951
- async next() {
952
- const s = this.step();
953
- if (s === 0) {
954
- const exists = await this.api.checkPathExists(this.draft().rootPath);
955
- if (exists && !this.draft().overwriteIfExists) {
956
- this.notify.error("\u8BE5\u8DEF\u5F84\u4E0D\u53EF\u7528\u6216\u5DF2\u5B58\u5728\u91CD\u590D\u9879\u76EE");
957
- return;
958
- }
959
- }
960
- const ns = Math.min(3, s + 1);
961
- this.step.set(ns);
962
- }
963
- prev() {
964
- this.step.set(Math.max(0, this.step() - 1));
965
- }
966
- canGoNext() {
967
- const s = this.step();
968
- if (s === 0)
969
- return true;
970
- if (s === 1)
971
- return this.isManual();
972
- if (s === 2)
973
- return true;
974
- return false;
975
- }
976
- isManual() {
977
- return this.draft().preset === "manual";
978
- }
979
- canCreateHere() {
980
- const s = this.step();
981
- return this.isManual() && s === 3 || !this.isManual() && s === 1;
982
- }
983
- cancel() {
984
- this.modal.confirm({
985
- nzTitle: "\u53D6\u6D88\u521B\u5EFA\u9879\u76EE",
986
- nzContent: "\u786E\u5B9A\u8981\u53D6\u6D88\u521B\u5EFA\u5417",
987
- nzOkDanger: true,
988
- nzOkText: "\u53D6\u6D88\u521B\u5EFA",
989
- nzCancelText: "\u4E0D",
990
- nzCentered: true,
991
- nzOnOk: () => {
992
- this.modalRef.close();
993
- }
994
- });
995
- }
996
- async pickWorkspaceRootByModal(candidates) {
997
- const modal = this.modal.create({
998
- nzTitle: "\u9009\u62E9\u8981\u5BFC\u5165\u7684\u5DE5\u4F5C\u533A\u76EE\u5F55",
999
- nzContent: PickWorkspaceModalComponent,
1000
- nzData: {
1001
- candidates,
1002
- defaultPicked: candidates[0]
1003
- },
1004
- nzFooter: null,
1005
- nzCentered: true,
1006
- nzMaskClosable: false,
1007
- nzClosable: true,
1008
- nzWidth: 720
1009
- });
1010
- const result = await firstValueFrom(modal.afterClose);
1011
- return result?.pickedRoot ?? null;
1012
- }
1013
- };
1014
- ProjectCreateModal = __decorate([
1015
- Component({
1016
- selector: "app-project-create-modal",
1017
- imports: [
1018
- CommonModule,
1019
- FormsModule,
1020
- NzModalModule,
1021
- NzCardModule,
1022
- NzGridModule,
1023
- NzStepsModule,
1024
- NzButtonModule,
1025
- NzInputModule,
1026
- NzIconModule,
1027
- NzSpinModule,
1028
- StepBasicComponent,
1029
- StepPresetComponent,
1030
- StepFeaturesComponent,
1031
- StepConfigComponent,
1032
- CreateSummaryAsideComponent
1033
- ],
1034
- template: `
1035
- <div nz-row nzJustify="start">
1036
- <div nz-col nzSpan="24">
1037
- <nz-steps [nzCurrent]="step()" >
1038
- <nz-step nzTitle="\u8BE6\u60C5"></nz-step>
1039
- <nz-step nzTitle="\u9884\u8BBE"></nz-step>
1040
- <nz-step nzTitle="\u529F\u80FD"></nz-step>
1041
- <nz-step nzTitle="\u914D\u7F6E"></nz-step>
1042
- </nz-steps>
1043
- <div class="content">
1044
- <nz-spin [nzSpinning]="creating()" nzTip="\u6B63\u5728\u521B\u5EFA\u9879\u76EE...">
1045
- <div class="main">
1046
- @switch(step()){ @case(0){
1047
- <app-step-basic [draft]="draft()" (draftChange)="setDraft($event)" />
1048
- } @case(1){
1049
- <app-step-preset
1050
- [draft]="draft()"
1051
- (draftChange)="setDraft($event)"
1052
- (requestDetect)="detectNow()"
1053
- />
1054
- } @case(2){
1055
- <app-step-features [draft]="draft()" (draftChange)="setDraft($event)" />
1056
- } @case(3){
1057
- <app-step-config [draft]="draft()" (draftChange)="setDraft($event)" />
1058
- } }
1059
- <div class="actions">
1060
- @if(step()===0){
1061
- <button nz-button (click)="cancel()">
1062
- <nz-icon nzType="close" nzTheme="outline" />
1063
- \u53D6\u6D88
1064
- </button>
1065
- }
1066
-
1067
- @if(step() > 0){
1068
- <button nz-button (click)="prev()">
1069
- <nz-icon nzType="arrow-left" nzTheme="outline" />
1070
- \u4E0A\u4E00\u6B65
1071
- </button>
1072
- }
1073
-
1074
- @if(canCreateHere()){
1075
- <button nz-button nzType="primary" (click)="create()" [disabled]="creating()">
1076
- <nz-icon nzType="check" nzTheme="outline" />
1077
- \u521B\u5EFA\u9879\u76EE
1078
- </button>
1079
- } @else {
1080
- <button nz-button nzType="primary" (click)="next()" [disabled]="!canNext() || !canGoNext()">
1081
- \u4E0B\u4E00\u6B65
1082
- <nz-icon nzType="arrow-right" nzTheme="outline" />
1083
- </button>
1084
- }
1085
- </div>
1086
- </div>
1087
- </nz-spin>
1088
- <div class="aside">
1089
- <app-create-summary-aside [draft]="draft()" [(isCreating)]="creating" [chunk]="output()" />
1090
- </div>
1091
- </div>
1092
-
1093
- </div>
1094
- </div>
1095
- `,
1096
- styles: [project_create_modal_component_default]
1097
- })
1098
- ], ProjectCreateModal);
1099
-
1100
- // src/app/pages/projects/project-create/project-create.component.ts
1101
- var ProjectCreateComponent = class ProjectCreateComponent2 {
1102
- modal;
1103
- constructor(modal) {
1104
- this.modal = modal;
1105
- }
1106
- goCreate() {
1107
- const modal = this.modal.create({
1108
- nzTitle: "\u521B\u5EFA\u65B0\u9879\u76EE",
1109
- nzFooter: null,
1110
- nzMaskClosable: false,
1111
- nzClosable: false,
1112
- nzContent: ProjectCreateModal,
1113
- nzWidth: "1020px",
1114
- nzCentered: true
1115
- });
1116
- const instance = modal.getContentComponent();
1117
- modal.afterClose.subscribe((data) => {
1118
- if (data?.ok) {
1119
- }
1120
- });
1121
- }
1122
- static ctorParameters = () => [
1123
- { type: NzModalService }
1124
- ];
1125
- };
1126
- ProjectCreateComponent = __decorate([
1127
- Component({
1128
- selector: "app-project-create",
1129
- imports: [
1130
- CommonModule,
1131
- NzButtonModule,
1132
- NzGridModule,
1133
- FsExplorerComponent,
1134
- NzIconModule
1135
- ],
1136
- template: `
1137
- <div nz-row class="page">
1138
- <div nz-col nzSpan="16" nzOffset="4" class="explorer-container">
1139
- <app-fs-explorer></app-fs-explorer>
1140
- </div>
1141
- <div class="actions-bar">
1142
- <button nz-button nzType="primary" nzSize="large" (click)="goCreate()">
1143
- <nz-icon nzType="plus" nzTheme="outline" />
1144
- \u5728\u6B64\u521B\u5EFA\u65B0\u9879\u76EE
1145
- </button>
1146
- </div>
1147
- </div>
1148
- `,
1149
- styles: [project_create_component_default]
1150
- })
1151
- ], ProjectCreateComponent);
1152
-
1153
- // angular:jit:style:inline:src\app\pages\projects\project-import\project-import.component.ts;CiAgICAucGFnZSB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CgogICAgICAuZXhwbG9yZXItY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5hY3Rpb25zLWJhciB7CiAgICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KICAgIH0KICA=
1154
- var project_import_component_default = "/* angular:styles/component:less;c4f558d877aae693b48ead1419972780fc56160bf7e1b24f85914fbb0acd5b9a;D:\\ng-manager\\webapp\\src\\app\\pages\\projects\\project-import\\project-import.component.ts */\n.page {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n.page .explorer-container {\n flex: 1 1 auto;\n height: 0;\n}\n.page .actions-bar {\n flex: 0 0 auto;\n padding: 16px;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n/*# sourceMappingURL=project-import.component.css.map */\n";
1155
-
1156
- // src/app/pages/projects/services/project-import.state.service.ts
1157
- var ProjectImportState = class ProjectImportState2 {
1158
- fs = inject(FsExplorerService);
1159
- projectApi = inject(ProjectApiService);
1160
- projectState = inject(ProjectStateService);
1161
- /** 是否处于 import 页面 */
1162
- active = signal(false);
1163
- checking = signal(false);
1164
- result = signal(null);
1165
- canImport = computed(() => this.result()?.ok === true);
1166
- warnings = computed(() => this.result()?.warnings ?? []);
1167
- reason = computed(() => this.result()?.reason ?? "");
1168
- currentPath = computed(() => this.fs.currentPath() || this.fs.path());
1169
- _seq = 0;
1170
- notify = inject(UiNotifierService);
1171
- constructor() {
1172
- effect(() => {
1173
- if (!this.active())
1174
- return;
1175
- const root = this.currentPath();
1176
- if (!root)
1177
- return;
1178
- this.check(root);
1179
- });
1180
- }
1181
- enter() {
1182
- this.active.set(true);
1183
- }
1184
- leave() {
1185
- this.active.set(false);
1186
- this.result.set(null);
1187
- }
1188
- check(root) {
1189
- const seq = ++this._seq;
1190
- this.checking.set(true);
1191
- this.result.set(null);
1192
- this.projectApi.checkImport(root).subscribe({
1193
- next: (res) => {
1194
- if (seq !== this._seq)
1195
- return;
1196
- this.result.set(res);
1197
- },
1198
- error: (e) => {
1199
- if (seq !== this._seq)
1200
- return;
1201
- this.result.set({
1202
- ok: false,
1203
- root,
1204
- reason: e?.message || "check failed"
1205
- });
1206
- },
1207
- complete: () => {
1208
- if (seq !== this._seq)
1209
- return;
1210
- this.checking.set(false);
1211
- }
1212
- });
1213
- }
1214
- import(name) {
1215
- const root = this.currentPath();
1216
- if (!root || !this.canImport())
1217
- return;
1218
- const defaultName = root.replace(/[\\\/]+$/, "").split(/[\\\/]/).pop() || "New Project";
1219
- this.projectApi.importByPath({
1220
- root,
1221
- name: name || defaultName,
1222
- syncTasks: true
1223
- }).subscribe({
1224
- next: (res) => {
1225
- this.projectState.getProjects();
1226
- this.projectState.setCurrentProjectById(res.id);
1227
- this.check(root);
1228
- this.notify.success(`\u9879\u76EE\u5BFC\u5165\u6210\u529F`);
1229
- }
1230
- });
1231
- }
1232
- static ctorParameters = () => [];
1233
- };
1234
- ProjectImportState = __decorate([
1235
- Injectable({ providedIn: "root" })
1236
- ], ProjectImportState);
1237
-
1238
- // src/app/pages/projects/project-import/project-import.component.ts
1239
- var ProjectImportComponent = class ProjectImportComponent2 {
1240
- importState = inject(ProjectImportState);
1241
- };
1242
- ProjectImportComponent = __decorate([
1243
- Component({
1244
- selector: "app-project-import",
1245
- imports: [
1246
- CommonModule,
1247
- FormsModule,
1248
- NzGridModule,
1249
- NzButtonModule,
1250
- NzIconModule,
1251
- FsExplorerComponent
1252
- ],
1253
- template: `
1254
- <div nz-row class="page">
1255
- <div nz-col nzSpan="16" nzOffset="4" class="explorer-container">
1256
- <app-fs-explorer></app-fs-explorer>
1257
- </div>
1258
- <div class="actions-bar center">
1259
- <button nz-button nzSize="large" nzType="primary" (click)="importState.import()" [disabled]="importState.checking() || !importState.canImport()">
1260
- <nz-icon nzType="import" nzTheme="outline" />
1261
- \u5BFC\u5165\u8FD9\u4E2A\u6587\u4EF6\u5939
1262
- </button>
1263
- </div>
1264
- </div>
1265
- `,
1266
- styles: [project_import_component_default]
1267
- })
1268
- ], ProjectImportComponent);
1269
-
1270
- // angular:jit:style:inline:src\app\pages\projects\project-list\project-list.component.ts;CiAgOmhvc3R7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGhlaWdodDogMTAwJTsKICAgIG92ZXJmbG93OmhpZGRlbjsKICB9CiAgICAucGFnZSB7CiAgICAgIGhlaWdodDoxMDAlOwogICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAudG9wYmFyewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgICBuei1pbnB1dC13cmFwcGVyewogICAgICAgICAgd2lkdGg6MjUlOwogICAgICAgICAgbWluLXdpZHRoOjIwMHB4OwogICAgICAgIH0KICAgICAgfQogICAgICAuY29sewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQogICAgfQogICAgLmhlYWRlciB7CiAgICAgIHBhZGRpbmc6IDEycHggMDsKICAgICAgaDJ7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIH0KICAgIH0gIAogIA==
1271
- var project_list_component_default = "/* angular:styles/component:less;a6e237ce29db8f9aeec1a97922a209791ce9c1f3ebef1fb61cff62893bb07135;D:\\ng-manager\\webapp\\src\\app\\pages\\projects\\project-list\\project-list.component.ts */\n:host {\n display: block;\n height: 100%;\n overflow: hidden;\n}\n.page {\n height: 100%;\n overflow-y: auto;\n}\n.page .topbar {\n width: 100%;\n display: flex;\n justify-content: center;\n margin-bottom: 12px;\n}\n.page .topbar nz-input-wrapper {\n width: 25%;\n min-width: 200px;\n}\n.page .col {\n display: flex;\n flex-direction: column;\n}\n.header {\n padding: 12px 0;\n}\n.header h2 {\n margin: 0;\n font-weight: 600;\n}\n/*# sourceMappingURL=project-list.component.css.map */\n";
1272
-
1273
- // angular:jit:style:inline:src\app\pages\projects\project-list\project-item.component.ts;CiAgICAucHJvamVjdC1pdGVtewogICAgICBib3JkZXItcmFkaXVzOjRweDsKICAgICAgcGFkZGluZzowOwogICAgICBtYXJnaW46OHB4IDA7CiAgICAgIHRyYW5zaXRpb246YWxsIC4zczsKICAgICAgY3Vyc29yOnBvaW50ZXI7CiAgICAgICYub3BlbiwgJjpob3ZlcnsKICAgICAgICBib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSk7CiAgICAgICAgYmFja2dyb3VuZDp2YXIoLS1hcHAtcHJpbWFyeS0zKTsKICAgICAgfQogICAgICAuY29udGVudHsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIDFmciBhdXRvOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogImljb24gaW5mbyBhY3Rpb25zIjsKICAgICAgICAgIGdyaWQtZ2FwOiAxNnB4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKCiAgICAgICAgLmZhdm9yaXRlewogICAgICAgICAgZ3JpZC1hcmVhOiBpY29uOwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB9CiAgICAgICAgLmluZm97CiAgICAgICAgICBncmlkLWFyZWE6IGluZm87CiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAgIC5saXN0LWl0ZW0taW5mbyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgICAgIC5uYW1lewogICAgICAgICAgICAgIGZsZXg6IGF1dG8gMCAwOwogICAgICAgICAgICAgIC50YXNrLXBvcG92ZXItdHJpZ2dlcnsKICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgICAgICBuei1iYWRnZSB7CiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZToxOHB4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAucm9vdC1wYXRoewogICAgICAgICAgICAgIGZsZXg6YXV0byAwIDA7CiAgICAgICAgICAgICAgb3BhY2l0eTowLjc7CiAgICAgICAgICAgICAgZm9udC1zaXplOjE0cHg7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgfQogICAg
1274
- var project_item_component_default = '/* angular:styles/component:less;8c34310a0e14da96f4fd592557a86c32d709cf19b5d88f7932b178fae2cf6ea8;D:\\ng-manager\\webapp\\src\\app\\pages\\projects\\project-list\\project-item.component.ts */\n.project-item {\n border-radius: 4px;\n padding: 0;\n margin: 8px 0;\n transition: all 0.3s;\n cursor: pointer;\n}\n.project-item.open,\n.project-item:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n background: var(--app-primary-3);\n}\n.project-item .content {\n padding: 16px;\n display: grid;\n grid-template-columns: auto 1fr auto;\n grid-template-rows: auto;\n grid-template-areas: "icon info actions";\n grid-gap: 16px;\n align-items: center;\n}\n.project-item .content .favorite {\n grid-area: icon;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.project-item .content .info {\n grid-area: info;\n -webkit-user-select: none;\n user-select: none;\n}\n.project-item .content .info .list-item-info {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n justify-content: center;\n gap: 4px;\n}\n.project-item .content .info .list-item-info .name {\n flex: auto 0 0;\n}\n.project-item .content .info .list-item-info .name .task-popover-trigger {\n display: inline-block;\n margin-left: 8px;\n cursor: pointer;\n}\n.project-item .content .info .list-item-info .name .task-popover-trigger nz-badge {\n font-size: 18px;\n}\n.project-item .content .info .list-item-info .root-path {\n flex: auto 0 0;\n opacity: 0.7;\n font-size: 14px;\n}\n/*# sourceMappingURL=project-item.component.css.map */\n';
1275
-
1276
- // angular:jit:style:inline:src\app\pages\projects\project-list\project-item-popover.component.ts;CiAgICAuZHJvcGRvd24tY29udGVudHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgLnBhbmUtdG9vbGJhcnsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA2cHggNnB4IDZweCAxNnB4OwogICAgICAgICY+KnsKICAgICAgICAgIGZsZXg6IGF1dG8gMCAwOwogICAgICAgIH0KICAgICAgICAuaWNvbnsKICAgICAgICAgIGZvbnQtc2l6ZToxOHB4OwogICAgICAgICAgbWFyZ2luLXJpZ2h0OjZweDsKICAgICAgICB9CiAgICAgICAgLnRpdGxlewogICAgICAgICAgZmxleDogMTAwJSAxIDE7CiAgICAgICAgICB3aWR0aDogMDsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgICAtbXMtdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgfQogICAgICB9CiAgICAgIC50YXNrc3sKICAgICAgICB3aWR0aDozMjBweDsKICAgICAgICBtYXgtaGVpZ2h0OjM2MHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW4gYXV0bzsKICAgICAgICAudGFzay1pdGVtewogICAgICAgICAgcGFkZGluZzoxNnB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgJjpob3ZlcnsKICAgICAgICAgICAgYmFja2dyb3VuZDojZjVmNWY1OwogICAgICAgICAgfQogICAgICAgICAgLml0ZW0tY29udGVudHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZmxleDogMTAwJSAxIDE7CiAgICAgICAgICAgIHdpZHRoOiAwOwogICAgICAgICAgICBnYXA6MTZweDsKICAgICAgICAgICAgY3Vyc29yOnBvaW50ZXI7CiAgICAgICAgICB9CiAgICAgICAgICAuaXRlbS1sb2dvewogICAgICAgICAgICBmb250LXNpemU6NDJweDsKICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OjE2cHg7CiAgICAgICAgICAgIGZsZXg6IGF1dG8gMCAwOwogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIH0KICAgICAgICAgIC5saXN0LWl0ZW0taW5mbyB7CiAgICAgICAgICAgIGZsZXg6IDEwMCUgMSAxOwogICAgICAgICAgICB3aWR0aDogMDsKICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICAuZGVzY3JpcHRpb257CiAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBidXR0b257CiAgICAgICAgICAgIGZsZXg6IGF1dG8gMCAwOwogICAgICAgICAgICBuei1pY29uewogICAgICAgICAgICAgIGZvbnQtc2l6ZToyNHB4OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIA==
1277
- var project_item_popover_component_default = "/* angular:styles/component:less;a3e12c60aee6315c488faab00515e2b272f207c0582a4e588555f216037cd542;D:\\ng-manager\\webapp\\src\\app\\pages\\projects\\project-list\\project-item-popover.component.ts */\n.dropdown-content {\n display: flex;\n flex-direction: column;\n}\n.dropdown-content .pane-toolbar {\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 6px 6px 6px 16px;\n}\n.dropdown-content .pane-toolbar > * {\n flex: auto 0 0;\n}\n.dropdown-content .pane-toolbar .icon {\n font-size: 18px;\n margin-right: 6px;\n}\n.dropdown-content .pane-toolbar .title {\n flex: 100% 1 1;\n width: 0;\n overflow: hidden;\n -ms-text-overflow: ellipsis;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dropdown-content .tasks {\n width: 320px;\n max-height: 360px;\n overflow: hidden auto;\n}\n.dropdown-content .tasks .task-item {\n padding: 16px;\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.dropdown-content .tasks .task-item:hover {\n background: #f5f5f5;\n}\n.dropdown-content .tasks .task-item .item-content {\n display: flex;\n flex-direction: row;\n align-items: center;\n flex: 100% 1 1;\n width: 0;\n gap: 16px;\n cursor: pointer;\n}\n.dropdown-content .tasks .task-item .item-logo {\n font-size: 42px;\n margin-right: 16px;\n flex: auto 0 0;\n display: inline-flex;\n align-items: center;\n}\n.dropdown-content .tasks .task-item .list-item-info {\n flex: 100% 1 1;\n width: 0;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n justify-content: center;\n}\n.dropdown-content .tasks .task-item .list-item-info .description {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dropdown-content .tasks .task-item button {\n flex: auto 0 0;\n}\n.dropdown-content .tasks .task-item button nz-icon {\n font-size: 24px;\n}\n/*# sourceMappingURL=project-item-popover.component.css.map */\n";
1278
-
1279
- // src/app/pages/projects/project-list/project-item-popover.component.ts
1280
- var ProjectItemPopoverComponent = class ProjectItemPopoverComponent2 {
1281
- projectId;
1282
- projectState = inject(ProjectStateService);
1283
- router = inject(Router);
1284
- state = inject(TaskStateService);
1285
- tasks = computed(() => {
1286
- if (!this.projectId)
1287
- return [];
1288
- return this.state.rowsViewOf(this.projectId)();
1289
- });
1290
- async ngOnChanges() {
1291
- if (this.projectId) {
1292
- await this.state.ensureProjectLoaded(this.projectId);
1293
- }
1294
- }
1295
- toggleTask(task) {
1296
- if (task.runtime?.status === "running") {
1297
- this.state.stopSelected();
1298
- } else {
1299
- this.state.startSelected();
1300
- }
1301
- this.openTask(task);
1302
- }
1303
- async openTask(task) {
1304
- this.state.select(task.spec.id);
1305
- await this.router.navigate(["/tasks"]);
1306
- this.projectState.setCurrentProjectById(task.spec.projectId);
1307
- }
1308
- getTaskName(task) {
1309
- return task.spec.name || task.spec.id;
1310
- }
1311
- getTaskDescription(task) {
1312
- const st = task.runtime?.status;
1313
- return task.runtime ? this.computedStatusText(st) : task.spec.description || "";
1314
- }
1315
- getTaskActionIcon(task) {
1316
- const st = task.runtime?.status;
1317
- return st === "running" || st === "stopping" ? "pause-circle" : "play-circle";
1318
- }
1319
- computedStatusText(status) {
1320
- switch (status) {
1321
- case "running":
1322
- return "\u8FD0\u884C\u4E2D";
1323
- case "stopping":
1324
- return "\u505C\u6B62\u4E2D";
1325
- case "success":
1326
- return "\u6210\u529F";
1327
- case "failed":
1328
- return "\u9519\u8BEF";
1329
- case "stopped":
1330
- return "\u5DF2\u505C\u6B62";
1331
- default:
1332
- return "\u7A7A\u95F2";
1333
- }
1334
- }
1335
- static propDecorators = {
1336
- projectId: [{ type: Input }]
1337
- };
1338
- };
1339
- ProjectItemPopoverComponent = __decorate([
1340
- Component({
1341
- selector: "app-project-item-popover",
1342
- imports: [CommonModule, NzIconModule, NzButtonModule, NzTooltipModule, RouterModule],
1343
- template: `
1344
- <div class="dropdown-content">
1345
- <div class="pane-toolbar">
1346
- <div class="icon">
1347
- <nz-icon nzType="inbox" nzTheme="outline" />
1348
- </div>
1349
- <div class="title">\u4EFB\u52A1</div>
1350
- <button nz-button type="button" nzType="text">
1351
- <nz-icon nzType="close" nzTheme="outline" />
1352
- </button>
1353
- </div>
1354
- <div class="tasks">
1355
- @for( task of tasks();track task.spec.id){
1356
- <div class="task-item" nz-tooltip [nzTooltipTitle]="getTaskDescription(task)" nzTooltipPlacement="right">
1357
- <div class="item-content" (click)="openTask(task)">
1358
- <div class="item-logo">
1359
- <nz-icon nzType="code" nzTheme="outline" />
1360
- </div>
1361
- <div class="list-item-info">
1362
- <div class="name">
1363
- <span>{{task.spec.name}}</span>
1364
- </div>
1365
- <div class="description">
1366
- <span>{{ getTaskDescription(task) }}</span>
1367
- </div>
1368
- </div>
1369
- </div>
1370
- <button nz-button nzType="text" type="button" (click)="$event.stopPropagation(); toggleTask(task)">
1371
- <nz-icon [nzType]="getTaskActionIcon(task)" nzTheme="outline" />
1372
- </button>
1373
- </div>
1374
- }
1375
- </div>
1376
- </div>
1377
- `,
1378
- styles: [project_item_popover_component_default]
1379
- })
1380
- ], ProjectItemPopoverComponent);
1381
-
1382
- // src/app/pages/projects/project-list/project-item.component.ts
1383
- var ProjectItem = class ProjectItem2 {
1384
- taskRuntime = inject(TaskRuntimeStore);
1385
- notify = inject(UiNotifierService);
1386
- project = null;
1387
- open = false;
1388
- selectProject = new EventEmitter();
1389
- toggleFavorite = new EventEmitter();
1390
- editProject = new EventEmitter();
1391
- openInEditor = new EventEmitter();
1392
- deleteProject = new EventEmitter();
1393
- /** 运行中任务数(running/stopping) */
1394
- tasksRunningCount = computed(() => {
1395
- const pid = this.project?.id?.trim();
1396
- if (!pid)
1397
- return 0;
1398
- return this.taskRuntime.runningCountSignal(pid)();
1399
- });
1400
- /** 是否有任务占用中 */
1401
- hasTasksRunning = computed(() => {
1402
- return this.tasksRunningCount() > 0;
1403
- });
1404
- /** tooltip 文案 */
1405
- taskBadgeTip = computed(() => {
1406
- const n = this.tasksRunningCount();
1407
- return n > 0 ? `${n} \u4E2A\u4EFB\u52A1\u6B63\u5728\u8FD0\u884C` : "\u4EFB\u52A1";
1408
- });
1409
- del() {
1410
- if (this.hasTasksRunning()) {
1411
- this.notify.warn("\u5F53\u524D\u9879\u76EE\u6709\u4EFB\u52A1\u6B63\u5728\u8FD0\u884C\uFF0C\u8BF7\u5148\u505C\u6B62\u8FD9\u4E9B\u4EFB\u52A1\u540E\u518D\u5220\u9664\u9879\u76EE\u3002");
1412
- return;
1413
- }
1414
- this.deleteProject.emit();
1415
- }
1416
- openPageUrl(url) {
1417
- if (url) {
1418
- window.open(url, "_blank");
1419
- }
1420
- }
1421
- static propDecorators = {
1422
- project: [{ type: Input }],
1423
- open: [{ type: Input }],
1424
- selectProject: [{ type: Output }],
1425
- toggleFavorite: [{ type: Output }],
1426
- editProject: [{ type: Output }],
1427
- openInEditor: [{ type: Output }],
1428
- deleteProject: [{ type: Output }]
1429
- };
1430
- };
1431
- ProjectItem = __decorate([
1432
- Component({
1433
- selector: "app-project-item",
1434
- imports: [CommonModule, FormsModule, NzGridModule, NzButtonModule, NzIconModule, NzPopoverModule, NzBadgeModule, NzSpaceModule, ProjectItemPopoverComponent, NzTooltipDirective],
1435
- template: `
1436
- <div nz-row class="project-item" [class.open]="open">
1437
- <div nz-col nzSpan="24" class="content">
1438
- <div class="favorite">
1439
- <button nz-button nzType="primary" (click)="$event.stopPropagation();toggleFavorite.emit()">
1440
- <nz-icon nzType="star" [nzTheme]="project?.isFavorite ? 'fill' : 'outline'"></nz-icon>
1441
- </button>
1442
- </div>
1443
- <div class="info" (click)="selectProject.emit()">
1444
- <div class="list-item-info">
1445
- <div class="name">
1446
- <span>{{ project?.name }}</span>
1447
- <span
1448
- class="task-popover-trigger"
1449
- (click)="$event.stopPropagation()"
1450
- nz-popover
1451
- nzPopoverTrigger="click"
1452
- [nzPopoverContent]="contentTemplate"
1453
- nzPopoverPlacement="right"
1454
- [nzPopoverOverlayClassName]="'project-item-popover'"
1455
- >
1456
- <nz-badge
1457
- [nzStatus]="hasTasksRunning() ? 'processing' : 'default'"
1458
- [nz-tooltip]="taskBadgeTip()">
1459
- </nz-badge>
1460
- </span>
1461
- </div>
1462
- <div class="root-path">
1463
- <span>{{ project?.root }}</span>
1464
- </div>
1465
- </div>
1466
- </div>
1467
- <div class="actions">
1468
- <nz-space nzSize="large">
1469
- <button nz-button nzType="primary" (click)="openInEditor.emit()">
1470
- <nz-icon nzType="code" nzTheme="outline"/>
1471
- <span>\u5728\u7F16\u8F91\u5668\u4E2D\u6253\u5F00</span>
1472
- </button>
1473
- <button nz-button nzType="primary" (click)="editProject.emit()" nz-tooltip="\u7F16\u8F91">
1474
- <nz-icon nzType="edit" nzTheme="outline"/>
1475
- </button>
1476
- @if(project?.repoPageUrl){
1477
- <button nz-button nzType="primary" (click)="openPageUrl(project?.repoPageUrl)" nz-tooltip="\u6253\u5F00\u4ED3\u5E93\u5730\u5740">
1478
- <nz-icon nzType="global" nzTheme="outline"/>
1479
- </button>
1480
- }
1481
- <button nz-button nzType="primary" (click)="del()" nz-tooltip="\u5220\u9664">
1482
- <nz-icon nzType="delete" nzTheme="outline"/>
1483
- </button>
1484
- </nz-space>
1485
- </div>
1486
- </div>
1487
- </div>
1488
-
1489
- <ng-template #contentTemplate>
1490
- <app-project-item-popover [projectId]="project?.id"></app-project-item-popover>
1491
- </ng-template>
1492
- `,
1493
- styles: [project_item_component_default]
1494
- })
1495
- ], ProjectItem);
1496
-
1497
- // src/app/pages/projects/project-list/project-list.component.ts
1498
- var ProjectListComponent = class ProjectListComponent2 {
1499
- projectState = inject(ProjectStateService);
1500
- };
1501
- ProjectListComponent = __decorate([
1502
- Component({
1503
- selector: "app-project-list",
1504
- imports: [CommonModule, FormsModule, NzCardModule, NzGridModule, ProjectItem, NzEmptyModule, NzInputModule, NzIconModule],
1505
- template: `
1506
- <div nz-row class="page">
1507
- <div nz-col nzSpan="16" nzOffset="4" class="col">
1508
- <div nz-col class="topbar">
1509
- <nz-input-wrapper>
1510
- <nz-icon class="search-icon" nzInputPrefix nzType="search" />
1511
- <input
1512
- nz-input
1513
- placeholder="\u641C\u7D22\u9879\u76EE"
1514
- [ngModel]="projectState.keyword()"
1515
- (ngModelChange)="projectState.keyword.set($event)"
1516
- />
1517
- </nz-input-wrapper>
1518
- </div>
1519
- @if(projectState.favoriteProjects().length > 0){
1520
- <div class="header">
1521
- <h2>\u6536\u85CF\u7684\u9879\u76EE</h2>
1522
- </div>
1523
- <ng-container *ngTemplateOutlet="itemsTpl; context: { $implicit: projectState.favoriteProjects()}"></ng-container>
1524
- }
1525
- @if(projectState.favoriteProjects().length > 0){
1526
- <div class="header">
1527
- <h2>\u66F4\u591A\u9879\u76EE</h2>
1528
- </div>
1529
- }
1530
- <ng-container *ngTemplateOutlet="itemsTpl; context: { $implicit: projectState.moreProjects()}"></ng-container>
1531
- @if(projectState.projects().length === 0){
1532
- <div class="no-projects">
1533
- <nz-empty nzNotFoundImage="simple" nzNotFoundContent="\u6682\u65E0\u9879\u76EE\uFF0C\u5FEB\u53BB\u521B\u5EFA\u6216\u5BFC\u5165\u7B2C\u4E00\u4E2A\u9879\u76EE\u5427\uFF01"></nz-empty>
1534
- </div>
1535
- }
1536
- </div>
1537
- <ng-template #itemsTpl let-projects>
1538
- <div class="content">
1539
- @for (project of projects; track project.id) {
1540
- <app-project-item
1541
- [project] ="project"
1542
- (selectProject)="projectState.selectProject(project)"
1543
- (toggleFavorite)="projectState.toggleFavorite(project.id)"
1544
- (openInEditor)="projectState.openInEditor(project.id)"
1545
- (editProject)="projectState.openEditModal(project)"
1546
- (deleteProject)="projectState.deleteProject(project.id)"
1547
- [project]="project"
1548
- [open]="projectState.isOpen(project)">
1549
- </app-project-item>
1550
- }
1551
- </div>
1552
- </ng-template>
1553
- </div>`,
1554
- styles: [project_list_component_default]
1555
- })
1556
- ], ProjectListComponent);
1557
-
1558
- // src/app/pages/projects/projects.component.ts
1559
- var ProjectsComponent = class ProjectsComponent2 {
1560
- importState = inject(ProjectImportState);
1561
- selectedIndex = 0;
1562
- tabIndexChange(index) {
1563
- if (index === 2) {
1564
- this.importState.active.set(true);
1565
- } else {
1566
- this.importState.active.set(false);
1567
- }
1568
- }
1569
- };
1570
- ProjectsComponent = __decorate([
1571
- Component({
1572
- selector: "app-projects",
1573
- imports: [CommonModule, NzTabsModule, NzIconModule, ProjectListComponent, ProjectCreateComponent, ProjectImportComponent],
1574
- template: `
1575
- <div class="page">
1576
- <div class="header">
1577
- <h2>\u9879\u76EE\u7BA1\u7406</h2>
1578
- </div>
1579
- <nz-tabs nzCentered class="tabs-container" [(nzSelectedIndex)]="selectedIndex" (nzSelectedIndexChange)="tabIndexChange($event)">
1580
- <nz-tab [nzTitle]="projectTitleTemplate">
1581
- <ng-template #projectTitleTemplate>
1582
- <nz-icon nzType="unordered-list" nzTheme="outline" />
1583
- \u9879\u76EE
1584
- </ng-template>
1585
- <ng-template nz-tab>
1586
- <app-project-list></app-project-list>
1587
- </ng-template>
1588
- </nz-tab>
1589
- <nz-tab [nzTitle]="addTitleTemplate">
1590
- <ng-template #addTitleTemplate>
1591
- <nz-icon nzType="plus-square" nzTheme="outline" />
1592
- \u521B\u5EFA
1593
- </ng-template>
1594
- <ng-template nz-tab>
1595
- <app-project-create></app-project-create>
1596
- </ng-template>
1597
- </nz-tab>
1598
- <nz-tab [nzTitle]="importTitleTemplate">
1599
- <ng-template #importTitleTemplate>
1600
- <nz-icon nzType="import" nzTheme="outline" />
1601
- \u5BFC\u5165
1602
- </ng-template>
1603
- <ng-template nz-tab>
1604
- <app-project-import></app-project-import>
1605
- </ng-template>
1606
- </nz-tab>
1607
- </nz-tabs>
1608
- </div>
1609
- `,
1610
- styles: [projects_component_default]
1611
- })
1612
- ], ProjectsComponent);
1613
-
1614
- // src/app/pages/projects/projects-routing-module.ts
1615
- var routes = [
1616
- { path: "", component: ProjectsComponent }
1617
- ];
1618
- var ProjectsRoutingModule = class ProjectsRoutingModule2 {
1619
- };
1620
- ProjectsRoutingModule = __decorate([
1621
- NgModule({
1622
- imports: [RouterModule.forChild(routes)],
1623
- exports: [RouterModule]
1624
- })
1625
- ], ProjectsRoutingModule);
1626
-
1627
- // src/app/pages/projects/projects-module.ts
1628
- var ProjectsModule = class ProjectsModule2 {
1629
- };
1630
- ProjectsModule = __decorate([
1631
- NgModule({
1632
- declarations: [],
1633
- imports: [
1634
- CommonModule,
1635
- ProjectsRoutingModule
1636
- ]
1637
- })
1638
- ], ProjectsModule);
1639
- export {
1640
- ProjectsModule
1641
- };
1642
- //# sourceMappingURL=chunk-W5HGHCQT.js.map