@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,2147 +0,0 @@
1
- import {
2
- NzDividerModule
3
- } from "./chunk-FZNHBEAZ.js";
4
- import {
5
- NzImageModule
6
- } from "./chunk-724YOJI3.js";
7
- import {
8
- NzCodeEditorModule
9
- } from "./chunk-E4XD4GLT.js";
10
- import {
11
- NzPopconfirmModule
12
- } from "./chunk-Y7JBZHNK.js";
13
- import "./chunk-Z7FJIV62.js";
14
- import {
15
- NzStepsModule
16
- } from "./chunk-3G2GEOPV.js";
17
- import "./chunk-T6UAOWNP.js";
18
- import {
19
- NzTabsModule
20
- } from "./chunk-O7LB6VFM.js";
21
- import {
22
- NzFormModule
23
- } from "./chunk-P5CWA4FO.js";
24
- import {
25
- NzSwitchModule
26
- } from "./chunk-6TBQERYX.js";
27
- import {
28
- NzDrawerModule
29
- } from "./chunk-7FC7DN65.js";
30
- import {
31
- NZ_MODAL_DATA,
32
- NzModalModule,
33
- NzModalRef,
34
- NzModalService
35
- } from "./chunk-FLSUSPBD.js";
36
- import {
37
- Clipboard,
38
- ClipboardModule
39
- } from "./chunk-LPME4AJ3.js";
40
- import {
41
- NzCheckboxModule
42
- } from "./chunk-766T7YES.js";
43
- import "./chunk-S77VVYUZ.js";
44
- import "./chunk-ULOHDK7Y.js";
45
- import {
46
- NzSpinModule
47
- } from "./chunk-EQOY6A3M.js";
48
- import {
49
- NzTagModule
50
- } from "./chunk-J447GBHM.js";
51
- import "./chunk-ZBZHXS46.js";
52
- import "./chunk-KSHAGY2M.js";
53
- import "./chunk-VXHZMSDM.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
- PageLayoutComponent,
65
- TerminalViewComponent
66
- } from "./chunk-6QMSEZPT.js";
67
- import {
68
- NzBadgeModule
69
- } from "./chunk-DEGQJKKZ.js";
70
- import {
71
- ProjectContextStore
72
- } from "./chunk-TEW4MY4J.js";
73
- import {
74
- WsClientService
75
- } from "./chunk-APGQRYWX.js";
76
- import {
77
- ApiClient,
78
- NzMessageService,
79
- UiNotifierService
80
- } from "./chunk-2YSUXBGC.js";
81
- import {
82
- FormsModule,
83
- NzButtonModule,
84
- NzIconModule,
85
- NzInputModule,
86
- NzSpaceModule,
87
- NzTooltipModule
88
- } from "./chunk-RUXJCM3V.js";
89
- import "./chunk-VYNQPZQO.js";
90
- import {
91
- RouterModule
92
- } from "./chunk-665WC4RU.js";
93
- import {
94
- CommonModule,
95
- HttpParams
96
- } from "./chunk-3MCIETCQ.js";
97
- import {
98
- BehaviorSubject,
99
- Component,
100
- Injectable,
101
- Input,
102
- NgModule,
103
- Output,
104
- Subject,
105
- Subscription,
106
- ViewChild,
107
- __commonJS,
108
- __decorate,
109
- __spreadProps,
110
- __spreadValues,
111
- __toESM,
112
- computed,
113
- distinctUntilChanged,
114
- firstValueFrom,
115
- inject,
116
- input,
117
- model,
118
- signal
119
- } from "./chunk-XQY5SPGI.js";
120
-
121
- // node_modules/dayjs/dayjs.min.js
122
- var require_dayjs_min = __commonJS({
123
- "node_modules/dayjs/dayjs.min.js"(exports, module) {
124
- "use strict";
125
- !(function(t, e) {
126
- "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).dayjs = e();
127
- })(exports, (function() {
128
- "use strict";
129
- var t = 1e3, e = 6e4, n = 36e5, r = "millisecond", i = "second", s = "minute", u = "hour", a = "day", o = "week", c = "month", f = "quarter", h = "year", d = "date", l = "Invalid Date", $ = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, y = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, M = { name: "en", weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), ordinal: function(t2) {
130
- var e2 = ["th", "st", "nd", "rd"], n2 = t2 % 100;
131
- return "[" + t2 + (e2[(n2 - 20) % 10] || e2[n2] || e2[0]) + "]";
132
- } }, m = function(t2, e2, n2) {
133
- var r2 = String(t2);
134
- return !r2 || r2.length >= e2 ? t2 : "" + Array(e2 + 1 - r2.length).join(n2) + t2;
135
- }, v = { s: m, z: function(t2) {
136
- var e2 = -t2.utcOffset(), n2 = Math.abs(e2), r2 = Math.floor(n2 / 60), i2 = n2 % 60;
137
- return (e2 <= 0 ? "+" : "-") + m(r2, 2, "0") + ":" + m(i2, 2, "0");
138
- }, m: function t2(e2, n2) {
139
- if (e2.date() < n2.date()) return -t2(n2, e2);
140
- var r2 = 12 * (n2.year() - e2.year()) + (n2.month() - e2.month()), i2 = e2.clone().add(r2, c), s2 = n2 - i2 < 0, u2 = e2.clone().add(r2 + (s2 ? -1 : 1), c);
141
- return +(-(r2 + (n2 - i2) / (s2 ? i2 - u2 : u2 - i2)) || 0);
142
- }, a: function(t2) {
143
- return t2 < 0 ? Math.ceil(t2) || 0 : Math.floor(t2);
144
- }, p: function(t2) {
145
- return { M: c, y: h, w: o, d: a, D: d, h: u, m: s, s: i, ms: r, Q: f }[t2] || String(t2 || "").toLowerCase().replace(/s$/, "");
146
- }, u: function(t2) {
147
- return void 0 === t2;
148
- } }, g = "en", D = {};
149
- D[g] = M;
150
- var p = "$isDayjsObject", S = function(t2) {
151
- return t2 instanceof _ || !(!t2 || !t2[p]);
152
- }, w = function t2(e2, n2, r2) {
153
- var i2;
154
- if (!e2) return g;
155
- if ("string" == typeof e2) {
156
- var s2 = e2.toLowerCase();
157
- D[s2] && (i2 = s2), n2 && (D[s2] = n2, i2 = s2);
158
- var u2 = e2.split("-");
159
- if (!i2 && u2.length > 1) return t2(u2[0]);
160
- } else {
161
- var a2 = e2.name;
162
- D[a2] = e2, i2 = a2;
163
- }
164
- return !r2 && i2 && (g = i2), i2 || !r2 && g;
165
- }, O = function(t2, e2) {
166
- if (S(t2)) return t2.clone();
167
- var n2 = "object" == typeof e2 ? e2 : {};
168
- return n2.date = t2, n2.args = arguments, new _(n2);
169
- }, b = v;
170
- b.l = w, b.i = S, b.w = function(t2, e2) {
171
- return O(t2, { locale: e2.$L, utc: e2.$u, x: e2.$x, $offset: e2.$offset });
172
- };
173
- var _ = (function() {
174
- function M2(t2) {
175
- this.$L = w(t2.locale, null, true), this.parse(t2), this.$x = this.$x || t2.x || {}, this[p] = true;
176
- }
177
- var m2 = M2.prototype;
178
- return m2.parse = function(t2) {
179
- this.$d = (function(t3) {
180
- var e2 = t3.date, n2 = t3.utc;
181
- if (null === e2) return /* @__PURE__ */ new Date(NaN);
182
- if (b.u(e2)) return /* @__PURE__ */ new Date();
183
- if (e2 instanceof Date) return new Date(e2);
184
- if ("string" == typeof e2 && !/Z$/i.test(e2)) {
185
- var r2 = e2.match($);
186
- if (r2) {
187
- var i2 = r2[2] - 1 || 0, s2 = (r2[7] || "0").substring(0, 3);
188
- return n2 ? new Date(Date.UTC(r2[1], i2, r2[3] || 1, r2[4] || 0, r2[5] || 0, r2[6] || 0, s2)) : new Date(r2[1], i2, r2[3] || 1, r2[4] || 0, r2[5] || 0, r2[6] || 0, s2);
189
- }
190
- }
191
- return new Date(e2);
192
- })(t2), this.init();
193
- }, m2.init = function() {
194
- var t2 = this.$d;
195
- this.$y = t2.getFullYear(), this.$M = t2.getMonth(), this.$D = t2.getDate(), this.$W = t2.getDay(), this.$H = t2.getHours(), this.$m = t2.getMinutes(), this.$s = t2.getSeconds(), this.$ms = t2.getMilliseconds();
196
- }, m2.$utils = function() {
197
- return b;
198
- }, m2.isValid = function() {
199
- return !(this.$d.toString() === l);
200
- }, m2.isSame = function(t2, e2) {
201
- var n2 = O(t2);
202
- return this.startOf(e2) <= n2 && n2 <= this.endOf(e2);
203
- }, m2.isAfter = function(t2, e2) {
204
- return O(t2) < this.startOf(e2);
205
- }, m2.isBefore = function(t2, e2) {
206
- return this.endOf(e2) < O(t2);
207
- }, m2.$g = function(t2, e2, n2) {
208
- return b.u(t2) ? this[e2] : this.set(n2, t2);
209
- }, m2.unix = function() {
210
- return Math.floor(this.valueOf() / 1e3);
211
- }, m2.valueOf = function() {
212
- return this.$d.getTime();
213
- }, m2.startOf = function(t2, e2) {
214
- var n2 = this, r2 = !!b.u(e2) || e2, f2 = b.p(t2), l2 = function(t3, e3) {
215
- var i2 = b.w(n2.$u ? Date.UTC(n2.$y, e3, t3) : new Date(n2.$y, e3, t3), n2);
216
- return r2 ? i2 : i2.endOf(a);
217
- }, $2 = function(t3, e3) {
218
- return b.w(n2.toDate()[t3].apply(n2.toDate("s"), (r2 ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e3)), n2);
219
- }, y2 = this.$W, M3 = this.$M, m3 = this.$D, v2 = "set" + (this.$u ? "UTC" : "");
220
- switch (f2) {
221
- case h:
222
- return r2 ? l2(1, 0) : l2(31, 11);
223
- case c:
224
- return r2 ? l2(1, M3) : l2(0, M3 + 1);
225
- case o:
226
- var g2 = this.$locale().weekStart || 0, D2 = (y2 < g2 ? y2 + 7 : y2) - g2;
227
- return l2(r2 ? m3 - D2 : m3 + (6 - D2), M3);
228
- case a:
229
- case d:
230
- return $2(v2 + "Hours", 0);
231
- case u:
232
- return $2(v2 + "Minutes", 1);
233
- case s:
234
- return $2(v2 + "Seconds", 2);
235
- case i:
236
- return $2(v2 + "Milliseconds", 3);
237
- default:
238
- return this.clone();
239
- }
240
- }, m2.endOf = function(t2) {
241
- return this.startOf(t2, false);
242
- }, m2.$set = function(t2, e2) {
243
- var n2, o2 = b.p(t2), f2 = "set" + (this.$u ? "UTC" : ""), l2 = (n2 = {}, n2[a] = f2 + "Date", n2[d] = f2 + "Date", n2[c] = f2 + "Month", n2[h] = f2 + "FullYear", n2[u] = f2 + "Hours", n2[s] = f2 + "Minutes", n2[i] = f2 + "Seconds", n2[r] = f2 + "Milliseconds", n2)[o2], $2 = o2 === a ? this.$D + (e2 - this.$W) : e2;
244
- if (o2 === c || o2 === h) {
245
- var y2 = this.clone().set(d, 1);
246
- y2.$d[l2]($2), y2.init(), this.$d = y2.set(d, Math.min(this.$D, y2.daysInMonth())).$d;
247
- } else l2 && this.$d[l2]($2);
248
- return this.init(), this;
249
- }, m2.set = function(t2, e2) {
250
- return this.clone().$set(t2, e2);
251
- }, m2.get = function(t2) {
252
- return this[b.p(t2)]();
253
- }, m2.add = function(r2, f2) {
254
- var d2, l2 = this;
255
- r2 = Number(r2);
256
- var $2 = b.p(f2), y2 = function(t2) {
257
- var e2 = O(l2);
258
- return b.w(e2.date(e2.date() + Math.round(t2 * r2)), l2);
259
- };
260
- if ($2 === c) return this.set(c, this.$M + r2);
261
- if ($2 === h) return this.set(h, this.$y + r2);
262
- if ($2 === a) return y2(1);
263
- if ($2 === o) return y2(7);
264
- var M3 = (d2 = {}, d2[s] = e, d2[u] = n, d2[i] = t, d2)[$2] || 1, m3 = this.$d.getTime() + r2 * M3;
265
- return b.w(m3, this);
266
- }, m2.subtract = function(t2, e2) {
267
- return this.add(-1 * t2, e2);
268
- }, m2.format = function(t2) {
269
- var e2 = this, n2 = this.$locale();
270
- if (!this.isValid()) return n2.invalidDate || l;
271
- var r2 = t2 || "YYYY-MM-DDTHH:mm:ssZ", i2 = b.z(this), s2 = this.$H, u2 = this.$m, a2 = this.$M, o2 = n2.weekdays, c2 = n2.months, f2 = n2.meridiem, h2 = function(t3, n3, i3, s3) {
272
- return t3 && (t3[n3] || t3(e2, r2)) || i3[n3].slice(0, s3);
273
- }, d2 = function(t3) {
274
- return b.s(s2 % 12 || 12, t3, "0");
275
- }, $2 = f2 || function(t3, e3, n3) {
276
- var r3 = t3 < 12 ? "AM" : "PM";
277
- return n3 ? r3.toLowerCase() : r3;
278
- };
279
- return r2.replace(y, (function(t3, r3) {
280
- return r3 || (function(t4) {
281
- switch (t4) {
282
- case "YY":
283
- return String(e2.$y).slice(-2);
284
- case "YYYY":
285
- return b.s(e2.$y, 4, "0");
286
- case "M":
287
- return a2 + 1;
288
- case "MM":
289
- return b.s(a2 + 1, 2, "0");
290
- case "MMM":
291
- return h2(n2.monthsShort, a2, c2, 3);
292
- case "MMMM":
293
- return h2(c2, a2);
294
- case "D":
295
- return e2.$D;
296
- case "DD":
297
- return b.s(e2.$D, 2, "0");
298
- case "d":
299
- return String(e2.$W);
300
- case "dd":
301
- return h2(n2.weekdaysMin, e2.$W, o2, 2);
302
- case "ddd":
303
- return h2(n2.weekdaysShort, e2.$W, o2, 3);
304
- case "dddd":
305
- return o2[e2.$W];
306
- case "H":
307
- return String(s2);
308
- case "HH":
309
- return b.s(s2, 2, "0");
310
- case "h":
311
- return d2(1);
312
- case "hh":
313
- return d2(2);
314
- case "a":
315
- return $2(s2, u2, true);
316
- case "A":
317
- return $2(s2, u2, false);
318
- case "m":
319
- return String(u2);
320
- case "mm":
321
- return b.s(u2, 2, "0");
322
- case "s":
323
- return String(e2.$s);
324
- case "ss":
325
- return b.s(e2.$s, 2, "0");
326
- case "SSS":
327
- return b.s(e2.$ms, 3, "0");
328
- case "Z":
329
- return i2;
330
- }
331
- return null;
332
- })(t3) || i2.replace(":", "");
333
- }));
334
- }, m2.utcOffset = function() {
335
- return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);
336
- }, m2.diff = function(r2, d2, l2) {
337
- var $2, y2 = this, M3 = b.p(d2), m3 = O(r2), v2 = (m3.utcOffset() - this.utcOffset()) * e, g2 = this - m3, D2 = function() {
338
- return b.m(y2, m3);
339
- };
340
- switch (M3) {
341
- case h:
342
- $2 = D2() / 12;
343
- break;
344
- case c:
345
- $2 = D2();
346
- break;
347
- case f:
348
- $2 = D2() / 3;
349
- break;
350
- case o:
351
- $2 = (g2 - v2) / 6048e5;
352
- break;
353
- case a:
354
- $2 = (g2 - v2) / 864e5;
355
- break;
356
- case u:
357
- $2 = g2 / n;
358
- break;
359
- case s:
360
- $2 = g2 / e;
361
- break;
362
- case i:
363
- $2 = g2 / t;
364
- break;
365
- default:
366
- $2 = g2;
367
- }
368
- return l2 ? $2 : b.a($2);
369
- }, m2.daysInMonth = function() {
370
- return this.endOf(c).$D;
371
- }, m2.$locale = function() {
372
- return D[this.$L];
373
- }, m2.locale = function(t2, e2) {
374
- if (!t2) return this.$L;
375
- var n2 = this.clone(), r2 = w(t2, e2, true);
376
- return r2 && (n2.$L = r2), n2;
377
- }, m2.clone = function() {
378
- return b.w(this.$d, this);
379
- }, m2.toDate = function() {
380
- return new Date(this.valueOf());
381
- }, m2.toJSON = function() {
382
- return this.isValid() ? this.toISOString() : null;
383
- }, m2.toISOString = function() {
384
- return this.$d.toISOString();
385
- }, m2.toString = function() {
386
- return this.$d.toUTCString();
387
- }, M2;
388
- })(), k = _.prototype;
389
- return O.prototype = k, [["$ms", r], ["$s", i], ["$m", s], ["$H", u], ["$W", a], ["$M", c], ["$y", h], ["$D", d]].forEach((function(t2) {
390
- k[t2[1]] = function(e2) {
391
- return this.$g(e2, t2[0], t2[1]);
392
- };
393
- })), O.extend = function(t2, e2) {
394
- return t2.$i || (t2(e2, _, O), t2.$i = true), O;
395
- }, O.locale = w, O.isDayjs = S, O.unix = function(t2) {
396
- return O(1e3 * t2);
397
- }, O.en = D[g], O.Ls = D, O.p = {}, O;
398
- }));
399
- }
400
- });
401
-
402
- // angular:jit:style:inline:src\app\pages\sprite\sprite.component.ts;CiAgICAucGFnZXsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICBnYXA6IDE2cHg7CiAgICAgIHBhZGRpbmc6MCAxNnB4OwogICAgfQogICAgLmNvbnRlbnQgewogICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgd2lkdGg6IDA7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KICAgIC5jb250ZW50LmVtcHR5IHsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB9CiAgICAuYXNpZGUgewogICAgICB3aWR0aDogMDsKICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgcGFkZGluZzogMTZweDsKICAgICAgYmFja2dyb3VuZDogIzAwMDsKICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDE1MCUpOwogICAgfQogICAgLmFzaWRlLm9wZW4gewogICAgICB3aWR0aDogNDAwcHg7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICAgIH0KICAgIA==
403
- var sprite_component_default = "/* angular:styles/component:less;0b8b22c936238239f0eefecb7ef1320d00db89e47b2c1150ed010468d3e85fd7;D:\\ng-manager\\webapp\\src\\app\\pages\\sprite\\sprite.component.ts */\n.page {\n height: 100%;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n gap: 16px;\n padding: 0 16px;\n}\n.content {\n flex: 1 1 auto;\n width: 0;\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n.content.empty {\n justify-content: center;\n}\n.aside {\n width: 0;\n flex: 0 0 auto;\n height: 100%;\n padding: 16px;\n background: #000;\n transition: transform 0.2s ease;\n transform: translateX(150%);\n}\n.aside.open {\n width: 400px;\n transform: translateX(0);\n}\n/*# sourceMappingURL=sprite.component.css.map */\n";
404
-
405
- // src/app/pages/sprite/services/sprite-api.service.ts
406
- var SpriteApiService = class SpriteApiService2 {
407
- api = inject(ApiClient);
408
- generate(projectId, options = {}) {
409
- return this.api.post(`/api/sprite/generate/${projectId}`, options);
410
- }
411
- getConfig(projectId) {
412
- return this.api.get(`/api/sprite/config/${projectId}`);
413
- }
414
- createConfig(projectId, assets, config) {
415
- return this.api.post(`/api/sprite/config/${projectId}`, { config, assets });
416
- }
417
- checkout(projectId, options = {}) {
418
- return this.api.post(`/api/svn/sync/${projectId}`, options);
419
- }
420
- streamCheckout(projectId, options = {}) {
421
- return this.api.post(`/api/svn/sync/stream/${projectId}`, options);
422
- }
423
- getRuntimes(projectId) {
424
- return this.api.get(`/api/svn/runtime/${projectId}`);
425
- }
426
- getSprites(projectId) {
427
- return this.api.get(`/api/sprite/list/${projectId}`);
428
- }
429
- browseIconGroups(projectId) {
430
- return this.api.get(`/api/sprite/browse/icons/groups/${projectId}`);
431
- }
432
- browseIconFiles(projectId, group) {
433
- const params = new HttpParams().set("group", group);
434
- return this.api.get(`/api/sprite/browse/icons/files/${projectId}`, params);
435
- }
436
- browseImages(projectId, dir = "") {
437
- const params = new HttpParams().set("dir", dir);
438
- return this.api.get(`/api/sprite/browse/images/list/${projectId}`, params);
439
- }
440
- };
441
- SpriteApiService = __decorate([
442
- Injectable({
443
- providedIn: "root"
444
- })
445
- ], SpriteApiService);
446
-
447
- // src/app/pages/sprite/services/sprite-state.service.ts
448
- var SpriteStateService = class SpriteStateService2 {
449
- projectContext = inject(ProjectContextStore);
450
- api = inject(SpriteApiService);
451
- project = computed(() => {
452
- return this.projectContext.currentProject();
453
- });
454
- async loadConfig() {
455
- if (!this.project()) {
456
- throw new Error("No project selected");
457
- }
458
- const projectId = this.project().id;
459
- return await firstValueFrom(this.api.getConfig(projectId));
460
- }
461
- async createConfig(assets, config) {
462
- if (!this.project()) {
463
- throw new Error("No project selected");
464
- }
465
- const projectId = this.project().id;
466
- const data = await firstValueFrom(this.api.createConfig(projectId, assets, config));
467
- this.projectContext.patchProject(data.project);
468
- return data.cfg;
469
- }
470
- async checkout(options = {}) {
471
- const projectId = this.ensureProjectId();
472
- return await firstValueFrom(this.api.checkout(projectId, options));
473
- }
474
- async streamCheckout(options = {}) {
475
- const projectId = this.ensureProjectId();
476
- return await firstValueFrom(this.api.streamCheckout(projectId, options));
477
- }
478
- async getSvnRuntimes() {
479
- const projectId = this.ensureProjectId();
480
- return await firstValueFrom(this.api.getRuntimes(projectId));
481
- }
482
- async generate() {
483
- const projectId = this.ensureProjectId();
484
- return await firstValueFrom(this.api.generate(projectId));
485
- }
486
- async getSprites() {
487
- const projectId = this.ensureProjectId();
488
- return await firstValueFrom(this.api.getSprites(projectId));
489
- }
490
- ensureProjectId() {
491
- const project = this.project();
492
- if (!project) {
493
- throw new Error("No project selected");
494
- }
495
- return project.id;
496
- }
497
- };
498
- SpriteStateService = __decorate([
499
- Injectable({
500
- providedIn: "root"
501
- })
502
- ], SpriteStateService);
503
-
504
- // src/app/pages/sprite/services/sprite-stream.service.ts
505
- var SpriteStreamService = class SpriteStreamService2 {
506
- ws;
507
- subs = /* @__PURE__ */ new Map();
508
- // projectId -> tail
509
- lastWsState = "idle";
510
- event$ = new Subject();
511
- eventByProject = /* @__PURE__ */ new Map();
512
- runtimesByProject = /* @__PURE__ */ new Map();
513
- // projectId:sourceId -> output stream
514
- outputByKey = /* @__PURE__ */ new Map();
515
- constructor(ws) {
516
- this.ws = ws;
517
- this.ws.messages().subscribe((msg) => this.onMessage(msg));
518
- this.ws.stateChanges().subscribe((s) => {
519
- if (s === "open" && this.lastWsState !== "open")
520
- this.replaySubs();
521
- this.lastWsState = s;
522
- });
523
- }
524
- // ------------------------
525
- // connection + trigger
526
- // ------------------------
527
- ensureConnected() {
528
- this.ws.connect();
529
- }
530
- // ------------------------
531
- // subscribe lifecycle
532
- // ------------------------
533
- subscribeProject(projectId, tail = 1e3) {
534
- const id = String(projectId ?? "").trim();
535
- if (!id)
536
- return;
537
- const t = Math.max(0, Math.min(5e3, tail | 0));
538
- if (this.subs.get(id) === t)
539
- return;
540
- this.subs.set(id, t);
541
- this.ensureProjectEventSubject(id);
542
- this.ensureProjectRuntimesSubject(id);
543
- if (this.ws.isOpen()) {
544
- this.ws.send({ op: "sub", topic: "svn", projectId: id, tail: t });
545
- }
546
- }
547
- unsubscribeProject(projectId) {
548
- const id = String(projectId ?? "").trim();
549
- if (!this.subs.has(id))
550
- return;
551
- this.subs.delete(id);
552
- if (this.ws.isOpen()) {
553
- this.ws.send({ op: "unsub", topic: "svn", projectId: id });
554
- }
555
- }
556
- /**
557
- * 推荐:组件 add 进自己的 Subscription 容器
558
- * - sub.unsubscribe() 时自动触发 unsubscribeProject()
559
- */
560
- watchProject(projectId, tail = 1e3) {
561
- const id = String(projectId ?? "").trim();
562
- this.ensureConnected();
563
- this.subscribeProject(id, tail);
564
- const sub = new Subscription();
565
- sub.add(() => this.unsubscribeProject(id));
566
- return sub;
567
- }
568
- /**
569
- * 更自动:绑定到 DestroyRef(Angular 16+)
570
- */
571
- bindToDestroyRef(projectId, destroyRef, tail = 1e3) {
572
- const id = String(projectId ?? "").trim();
573
- this.ensureConnected();
574
- this.subscribeProject(id, tail);
575
- destroyRef.onDestroy(() => this.unsubscribeProject(id));
576
- }
577
- // ------------------------
578
- // streams
579
- // ------------------------
580
- events$() {
581
- return this.event$.asObservable();
582
- }
583
- eventsByProject$(projectId) {
584
- const id = String(projectId ?? "").trim();
585
- return this.ensureProjectEventSubject(id).asObservable();
586
- }
587
- runtimes$(projectId) {
588
- const id = String(projectId ?? "").trim();
589
- return this.ensureProjectRuntimesSubject(id).asObservable().pipe(distinctUntilChanged());
590
- }
591
- /**
592
- * 输出流:按 (projectId, sourceId)
593
- * - payload.output: { type, data, status }
594
- */
595
- output$(projectId) {
596
- const key = this.keyOf(projectId);
597
- if (!this.outputByKey.has(key))
598
- this.outputByKey.set(key, new Subject());
599
- return this.outputByKey.get(key).asObservable();
600
- }
601
- // ------------------------
602
- // internals
603
- // ------------------------
604
- replaySubs() {
605
- for (const [projectId, tail] of this.subs.entries()) {
606
- this.ws.send({ op: "sub", topic: "svn", projectId, tail });
607
- }
608
- }
609
- onMessage(msg) {
610
- if (msg?.op !== "svn.event")
611
- return;
612
- const m = msg;
613
- const type = m.type;
614
- const payload = m.payload;
615
- const projectId = String(payload?.projectId ?? "").trim();
616
- if (!projectId)
617
- return;
618
- this.event$.next(m);
619
- this.ensureProjectEventSubject(projectId).next(m);
620
- this.applyEvent(type, payload, m.ts ?? Date.now());
621
- }
622
- applyEvent(type, payload, ts) {
623
- const projectId = String(payload?.projectId ?? "").trim();
624
- const sourceId = String(payload?.sourceId ?? "").trim();
625
- if (!projectId || !sourceId)
626
- return;
627
- switch (type) {
628
- case "runtime": {
629
- const rt = payload;
630
- this.upsert(projectId, sourceId, (prev) => __spreadProps(__spreadValues(__spreadValues({}, prev), rt), {
631
- lastEventAt: ts
632
- }), true);
633
- return;
634
- }
635
- case "started": {
636
- const p = payload;
637
- this.upsert(projectId, sourceId, (prev) => __spreadProps(__spreadValues({}, prev), {
638
- status: p.status,
639
- lastEventAt: ts
640
- // started 时通常还没有 url/mode,保留 prev
641
- }));
642
- return;
643
- }
644
- case "output": {
645
- const p = payload;
646
- const stream = p.type;
647
- const text = String(p.data ?? "");
648
- if (text) {
649
- const key = this.keyOf(projectId);
650
- if (!this.outputByKey.has(key))
651
- this.outputByKey.set(key, new Subject());
652
- this.outputByKey.get(key).next({
653
- projectId,
654
- sourceId,
655
- stream,
656
- text,
657
- status: p.status,
658
- ts
659
- });
660
- }
661
- this.upsert(projectId, sourceId, (prev) => __spreadProps(__spreadValues({}, prev), {
662
- status: p.status,
663
- lastEventAt: ts,
664
- lastStdout: stream === "stdout" ? text : prev.lastStdout,
665
- lastStderr: stream === "stderr" ? text : prev.lastStderr
666
- }));
667
- return;
668
- }
669
- case "progress": {
670
- const p = payload;
671
- this.upsert(projectId, sourceId, (prev) => __spreadProps(__spreadValues({}, prev), {
672
- status: p.status,
673
- lastEventAt: ts,
674
- total: p.total ?? prev.total,
675
- changed: p.changed ?? prev.changed,
676
- percent: p.percent ?? prev.percent
677
- }));
678
- return;
679
- }
680
- case "done": {
681
- const p = payload;
682
- this.upsert(projectId, sourceId, (prev) => __spreadProps(__spreadValues({}, prev), {
683
- status: p.status,
684
- lastEventAt: ts,
685
- updatedAt: p.updatedAt,
686
- // 把本次同步的关键信息写回 runtime
687
- lastSyncAt: p.updatedAt,
688
- // 你 runtime 里叫 lastSyncAt
689
- lastSyncMode: p.mode,
690
- desiredUrl: p.desiredUrl,
691
- currentUrl: p.currentUrl
692
- }));
693
- return;
694
- }
695
- case "failed": {
696
- const p = payload;
697
- this.upsert(projectId, sourceId, (prev) => __spreadProps(__spreadValues({}, prev), {
698
- status: p.status,
699
- lastEventAt: ts,
700
- updatedAt: p.updatedAt,
701
- lastError: p.error,
702
- // 失败一般也希望 stderr 有一条提示,方便 aside/面板直接展示
703
- lastStderr: p.error ? `[failed] ${p.error}` : prev.lastStderr
704
- }));
705
- if (p.error) {
706
- const key = this.keyOf(projectId);
707
- if (!this.outputByKey.has(key))
708
- this.outputByKey.set(key, new Subject());
709
- this.outputByKey.get(key).next({
710
- projectId,
711
- sourceId,
712
- stream: "stderr",
713
- text: `[failed] ${p.error}
714
- `,
715
- status: p.status,
716
- ts
717
- });
718
- }
719
- return;
720
- }
721
- default:
722
- return;
723
- }
724
- }
725
- /** upsert by (projectId, sourceId) */
726
- upsert(projectId, sourceId, patcher, preferIncoming = false) {
727
- const $rt = this.ensureProjectRuntimesSubject(projectId);
728
- const prevList = $rt.value ?? [];
729
- const idx = prevList.findIndex((x) => x.projectId === projectId && x.sourceId === sourceId);
730
- const base = idx >= 0 ? prevList[idx] : { projectId, sourceId };
731
- const patched = patcher(base);
732
- const nextOne = preferIncoming ? __spreadValues(__spreadValues({}, base), patched) : patched;
733
- const next = prevList.slice();
734
- if (idx >= 0)
735
- next[idx] = nextOne;
736
- else
737
- next.unshift(nextOne);
738
- $rt.next(next.slice(0, 200));
739
- }
740
- ensureProjectEventSubject(projectId) {
741
- const id = String(projectId ?? "").trim();
742
- if (!this.eventByProject.has(id))
743
- this.eventByProject.set(id, new Subject());
744
- return this.eventByProject.get(id);
745
- }
746
- ensureProjectRuntimesSubject(projectId) {
747
- const id = String(projectId ?? "").trim();
748
- if (!this.runtimesByProject.has(id))
749
- this.runtimesByProject.set(id, new BehaviorSubject([]));
750
- return this.runtimesByProject.get(id);
751
- }
752
- keyOf(projectId) {
753
- return `svn:${projectId}`;
754
- }
755
- static ctorParameters = () => [
756
- { type: WsClientService }
757
- ];
758
- };
759
- SpriteStreamService = __decorate([
760
- Injectable({ providedIn: "root" })
761
- ], SpriteStreamService);
762
-
763
- // angular:jit:style:inline:src\app\pages\sprite\sprite-conf-modal.component.ts;CiAgICAuY29udGVudCB7CiAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDM2MHB4OwogICAgICBnYXA6IDE2cHg7CiAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICB9CgogICAgLm1haW4gewogICAgICBtaW4taGVpZ2h0OiA0MjBweDsKICAgIH0KCiAgICAuYWN0aW9ucyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGdhcDogOHB4OwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICBtYXJnaW4tdG9wOiAxOHB4OwogICAgfQoKICAgIC5hc2lkZSB7CiAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgIHRvcDogMTZweDsKICAgICAgaGVpZ2h0OiBmaXQtY29udGVudDsKICAgIH0KICAgIA==
764
- var sprite_conf_modal_component_default = "/* angular:styles/component:less;125834e9b5936eb64ca24f787803d49e0490724ab814641d7bcb085c7ceaba3d;D:\\ng-manager\\webapp\\src\\app\\pages\\sprite\\sprite-conf-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=sprite-conf-modal.component.css.map */\n";
765
-
766
- // angular:jit:style:inline:src\app\pages\sprite\components\step-basic.component.ts;CiAgICAuaGludCB7IG1hcmdpbi10b3A6IDZweDsgZm9udC1zaXplOiAxMnB4OyBvcGFjaXR5OiAuNzsgfQogICAgLmVtaXQgeyBtYXJnaW4tdG9wOiA4cHg7IH0KICA=
767
- var step_basic_component_default = "/* angular:styles/component:less;b7b62613d0435917e09e19b17aeff29a1d4ff7eee5edfd92a1ae057b0f1c85a0;D:\\ng-manager\\webapp\\src\\app\\pages\\sprite\\components\\step-basic.component.ts */\n.hint {\n margin-top: 6px;\n font-size: 12px;\n opacity: 0.7;\n}\n.emit {\n margin-top: 8px;\n}\n/*# sourceMappingURL=step-basic.component.css.map */\n";
768
-
769
- // src/app/pages/sprite/components/step-basic.component.ts
770
- var StepBasicComponent = class StepBasicComponent2 {
771
- draft;
772
- static propDecorators = {
773
- draft: [{ type: Input, args: [{ required: true }] }]
774
- };
775
- };
776
- StepBasicComponent = __decorate([
777
- Component({
778
- selector: "app-step-basic",
779
- imports: [
780
- CommonModule,
781
- FormsModule,
782
- NzFormModule,
783
- NzInputModule,
784
- NzButtonModule,
785
- NzSelectModule,
786
- NzSwitchModule,
787
- NzCardModule,
788
- NzTooltipModule,
789
- NzIconModule
790
- ],
791
- template: `
792
- <nz-card nzTitle="\u57FA\u7840\u8BBE\u7F6E">
793
- <form nz-form nzLayout="vertical">
794
- <nz-form-item>
795
- <nz-form-label nzRequired nzTooltipTitle="\u9879\u76EE\u7684\u539F\u5C3A\u5BF8\u56FE\u6807SVN\u5730\u5740\uFF0C\u7528\u4E8E\u5236\u4F5C\u9879\u76EE\u6240\u9700\u96EA\u78A7\u56FE" [nzTooltipIcon]="{ type: 'question-circle', theme: 'outline' }">\u539F\u5C3A\u5BF8\u56FE\u6807 SVN \u5730\u5740</nz-form-label>
796
- <nz-form-control nzHasFeedback nzErrorTip="\u8BF7\u8F93\u5165\u539F\u5C3A\u5BF8\u56FE\u6807SVN\u5730\u5740">
797
- <input nz-input [(ngModel)]="draft.iconSvnPath" required name="iconSvnPath" placeholder="\u8F93\u5165\u539F\u5C3A\u5BF8\u56FE\u6807SVN\u5730\u5740" />
798
- </nz-form-control>
799
- <div class="hint">\u793A\u4F8B\uFF1Asvn://192.168.1.10/\u9879\u76EE\u7BA1\u7406/xx\u9879\u76EE/02.\u9879\u76EE\u6587\u6863/05.\u7CFB\u7EDF\u8BBE\u8BA1/02-\u539F\u578B\u8BBE\u8BA1/02-UI\u8BBE\u8BA1\u6548\u679C\u56FE&\u5207\u56FE/3-\u539F\u5C3A\u5BF8\u56FE\u6807</div>
800
- </nz-form-item>
801
-
802
- <nz-form-item>
803
- <nz-form-label nzTooltipTitle="\u9879\u76EE\u7684\u5176\u4ED6\u5207\u56FESVN\u5730\u5740\uFF0C\u65B9\u4FBF\u6D4F\u89C8\u548C\u67E5\u770B\u8BE6\u60C5" [nzTooltipIcon]="{ type: 'question-circle', theme: 'outline' }">\u5176\u4ED6\u5207\u56FE SVN \u5730\u5740</nz-form-label>
804
- <nz-form-control>
805
- <input nz-input [(ngModel)]="draft.otherImagesSvnPath" name="otherImagesSvnPath" placeholder="\u8F93\u5165\u5176\u4ED6\u5207\u56FE SVN \u5730\u5740"/>
806
- </nz-form-control>
807
- </nz-form-item>
808
-
809
- <nz-form-item>
810
- <nz-form-label nzRequired nzTooltipTitle="\u7528\u4E8E\u5B58\u653E\u4ECESVN\u62C9\u53D6\u7684\u539F\u5C3A\u5BF8\u56FE\u6807\u548C\u5176\u4ED6\u5207\u56FE\u7B49\u8D44\u6E90\u6587\u4EF6\uFF0C\u4F9B\u540E\u7EED\u96EA\u78A7\u56FE\u5236\u4F5C\u4F7F\u7528">SVN\u8D44\u6E90\u76EE\u5F55</nz-form-label>
811
- <nz-form-control nzHasFeedback nzErrorTip="\u8BF7\u8F93\u5165\u5B58\u653ESVN\u8D44\u6E90\u76EE\u5F55">
812
- <input nz-input required [(ngModel)]="draft.localDir" name="localDir" placeholder="\u8F93\u5165SVN\u8D44\u6E90\u672C\u5730\u5B58\u653E\u76EE\u5F55" />
813
- </nz-form-control>
814
- </nz-form-item>
815
- <nz-form-item>
816
- <nz-form-label nzRequired nzTooltipTitle="\u7528\u4E8E\u5B58\u653E\u751F\u6210\u7684\u96EA\u78A7\u56FE\u6587\u4EF6">\u96EA\u78A7\u56FE\u5BFC\u51FA\u76EE\u5F55</nz-form-label>
817
- <nz-form-control nzHasFeedback nzErrorTip="\u8BF7\u8F93\u5165\u5B58\u653E\u96EA\u78A7\u56FE\u7684\u5BFC\u51FA\u76EE\u5F55">
818
- <input nz-input required [(ngModel)]="draft.spriteExportDir" name="spriteExportDir" placeholder="\u8F93\u5165\u96EA\u78A7\u56FE\u5BFC\u51FA\u76EE\u5F55" />
819
- </nz-form-control>
820
- <div class="hint">
821
- \u793A\u4F8B\uFF1A\u524D\u7AEF\u9879\u76EE\u4E2D\u516C\u5171\u8D44\u6E90\u76EE\u5F55\u4E00\u822C\u4E3A assets \u6216 public\uFF0C\u5EFA\u8BAE\u8BBE\u7F6E\u4E3A 'assets/icons' \u6216 'public/icons'
822
- </div>
823
- </nz-form-item>
824
- <nz-form-item>
825
- <nz-form-label nzRequired nzTooltipTitle="\u7528\u4E8E\u5B58\u653E\u751F\u6210\u7684Less\u6587\u4EF6">Less \u5BFC\u51FA\u76EE\u5F55</nz-form-label>
826
- <nz-form-control nzHasFeedback nzErrorTip="\u8BF7\u8F93\u5165\u5B58\u653ELess\u6587\u4EF6\u7684\u5BFC\u51FA\u76EE\u5F55">
827
- <input nz-input required [(ngModel)]="draft.lessExportDir" name="lessExportDir" placeholder="\u8F93\u5165Less\u5BFC\u51FA\u76EE\u5F55" />
828
- </nz-form-control>
829
- <div class="hint">
830
- \u793A\u4F8B\uFF1A\u524D\u7AEF\u9879\u76EE\u4E2D\u6837\u5F0F\u6587\u4EF6\u76EE\u5F55\u4E00\u822C\u4E3A '/src/styles'\uFF0C\u5EFA\u8BAE\u8BBE\u7F6E\u4E3A '/src/styles/icons'
831
- </div>
832
- </nz-form-item>
833
- </form>
834
- </nz-card>
835
- `,
836
- styles: [step_basic_component_default]
837
- })
838
- ], StepBasicComponent);
839
-
840
- // angular:jit:style:inline:src\app\pages\sprite\components\step-advance.component.ts;CiAgICAuaGludCB7IG1hcmdpbi10b3A6IDZweDsgZm9udC1zaXplOiAxMnB4OyBvcGFjaXR5OiAuNzsgfQogICAgLmVtaXQgeyBtYXJnaW4tdG9wOiA4cHg7IH0KICA=
841
- var step_advance_component_default = "/* angular:styles/component:less;b7b62613d0435917e09e19b17aeff29a1d4ff7eee5edfd92a1ae057b0f1c85a0;D:\\ng-manager\\webapp\\src\\app\\pages\\sprite\\components\\step-advance.component.ts */\n.hint {\n margin-top: 6px;\n font-size: 12px;\n opacity: 0.7;\n}\n.emit {\n margin-top: 8px;\n}\n/*# sourceMappingURL=step-advance.component.css.map */\n";
842
-
843
- // src/app/pages/sprite/components/step-advance.component.ts
844
- var StepAdvanceComponent = class StepAdvanceComponent2 {
845
- draft;
846
- spriteUrlHint = `\u9879\u76EE\u4E2D\u5B9E\u9645\u96EA\u78A7\u56FE\u8DEF\u5F84\uFF0C\u9ED8\u8BA4\uFF1A/assets/icons/{group}.png\uFF0C\u5982\uFF1A/assets/icons/16-16.png\u3002\u652F\u6301\u5360\u4F4D\u7B26\uFF1A {group} \u5206\u7EC4\u540D\uFF08\u5982 16-16\uFF09\uFF0C {size} \u5C3A\u5BF8\u524D\u7F00\uFF08\u5982 16\uFF09\u3002`;
847
- templatePlaceholder = `\u8F93\u5165\u590D\u5236\u6A21\u677F,\u9ED8\u8BA4\uFF1A<i class="{base} {class}"></i>`;
848
- templateHint = `\u5B9E\u9645\u590D\u5236\u7684\u6587\u672C\uFF0C\u9ED8\u8BA4\uFF1A<i class="{base} {class}"></i>\uFF0C\u5982\uFF1A<i class="sl-16 sl-16-1"></i>\u3002\u652F\u6301\u5360\u4F4D\u7B26\uFF1A{base} \u57FA\u7C7B\u540D\uFF0C{class} CSS \u7C7B\u540D\uFF1B{name} \u56FE\u6807\u540D\u79F0\uFF1B\u652F\u6301\u4F7F\u7528\u81EA\u5B9A\u4E49\u7EC4\u4EF6\uFF0C\u5982\u5C0F\u7A0B\u5E8F\u4E2D\u7528\u6CD5\uFF1A<SlIcon name="16-16-1" size="16" />\uFF0C\u5219\u6A21\u677F\u4E3A\uFF1A<SlIcon name="{name}" size="{size}"/>\u3002`;
849
- static propDecorators = {
850
- draft: [{ type: Input, args: [{ required: true }] }]
851
- };
852
- };
853
- StepAdvanceComponent = __decorate([
854
- Component({
855
- selector: "app-step-advance",
856
- imports: [
857
- CommonModule,
858
- FormsModule,
859
- NzFormModule,
860
- NzInputModule,
861
- NzButtonModule,
862
- NzSelectModule,
863
- NzSwitchModule,
864
- NzCardModule,
865
- NzTooltipModule,
866
- NzIconModule
867
- ],
868
- template: `
869
- <nz-card nzTitle="\u9AD8\u7EA7\u8BBE\u7F6E">
870
- <form nz-form nzLayout="vertical">
871
- <nz-form-item>
872
- <nz-form-label>CSS \u524D\u7F00</nz-form-label>
873
- <nz-form-control>
874
- <input nz-input [(ngModel)]="draft.cssPrefix" name="cssPrefix" placeholder="\u8F93\u5165 CSS \u524D\u7F00\uFF0C\u9ED8\u8BA4\uFF1Asl" />
875
- <div class="hint">
876
- \u53EF\u9009\uFF0C\u9ED8\u8BA4\u4E3A sl\u3002\u751F\u6210\u7684 CSS \u7C7B\u540D\u5C06\u4EE5\u8BE5\u524D\u7F00\u5F00\u5934\uFF0C\u5982\uFF1Asl-16-1\u3002
877
- </div>
878
- </nz-form-control>
879
- </nz-form-item>
880
- <nz-form-item>
881
- <nz-form-label>\u96EA\u78A7\u56FE URL</nz-form-label>
882
- <nz-form-control>
883
- <input nz-input [(ngModel)]="draft.spriteUrl" name="spriteUrl" placeholder="\u8F93\u5165\u96EA\u78A7\u56FE URL\uFF0C\u9ED8\u8BA4\uFF1A/assets/icons/{group}.png"/>
884
- <div class="hint">
885
- {{spriteUrlHint}}
886
- </div>
887
- </nz-form-control>
888
- </nz-form-item>
889
- <nz-form-item>
890
- <nz-form-label>\u590D\u5236\u6A21\u677F</nz-form-label>
891
- <nz-form-control>
892
- <textarea nz-input [(ngModel)]="draft.template" name="template" placeholder="{{templatePlaceholder}}" rows="3" style="resize:none;"></textarea>
893
- <div class="hint">
894
- {{templateHint}}
895
- </div>
896
- </nz-form-control>
897
- </nz-form-item>
898
- </form>
899
- </nz-card>
900
- `,
901
- styles: [step_advance_component_default]
902
- })
903
- ], StepAdvanceComponent);
904
-
905
- // angular:jit:style:inline:src\app\pages\sprite\components\step-summary-aside.component.ts;CiAgICAuaXRlbSB7IGRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47IGdhcDogMTBweDsgcGFkZGluZzogNnB4IDA7YWxpZ24taXRlbXM6IGNlbnRlcjsgfQogICAgLmsgeyBvcGFjaXR5OiAuNzsgd2lkdGg6IDkwcHg7Zm9udC1zaXplOiAxNHB4OyB9CiAgICAudiB7IHRleHQtYWxpZ246IHJpZ2h0OyBmbGV4OiAxO292ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9CiAgICAubW9ubyB7IGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgIkxpYmVyYXRpb24gTW9ubyIsIG1vbm9zcGFjZTsgd29yZC1icmVhazogYnJlYWstYWxsOyB9CiAgICAuc2VwIHsgaGVpZ2h0OiAxcHg7IGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsLjA2KTsgbWFyZ2luOiAxMHB4IDA7IH0KICAgIC50YWcgeyBtYXJnaW4tdG9wOiA4cHg7IHRleHQtYWxpZ246IHJpZ2h0OyB9CiAgICAud2FybiB7IG1hcmdpbi10b3A6IDEwcHg7IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6ICNkNDZiMDg7IH0KICA=
906
- var step_summary_aside_component_default = '/* angular:styles/component:less;b9ffde9aa18883857097dda339cdf9d1c94b1bdcae063459df7d83fbab96d96c;D:\\ng-manager\\webapp\\src\\app\\pages\\sprite\\components\\step-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=step-summary-aside.component.css.map */\n';
907
-
908
- // src/app/pages/sprite/components/step-summary-aside.component.ts
909
- var StepSummaryAsideComponent = class StepSummaryAsideComponent2 {
910
- draft;
911
- static propDecorators = {
912
- draft: [{ type: Input, args: [{ required: true }] }]
913
- };
914
- };
915
- StepSummaryAsideComponent = __decorate([
916
- Component({
917
- selector: "app-step-summary-aside",
918
- imports: [CommonModule, NzCardModule, NzTagModule, NzTooltipModule, NzIconModule, NzButtonModule, NzDrawerModule],
919
- template: `
920
- <nz-card nzTitle="\u6458\u8981" nzSize="small">
921
- <div class="item"><span class="k">\u9879\u76EE\u540D\u79F0</span><span class="v">{{draft.name || '-'}}</span></div>
922
- <div class="item"><span class="k">\u539F\u5C3A\u5BF8\u56FE\u6807</span><span class="v mono" [nz-tooltip]="draft.iconSvnPath">{{draft.iconSvnPath || '-'}}</span></div>
923
- <div class="item"><span class="k">\u5176\u4ED6\u5207\u56FE</span><span class="v" [nz-tooltip]="draft.otherImagesSvnPath">{{draft.otherImagesSvnPath || '-'}}</span></div>
924
- <div class="sep"></div>
925
- <div class="item"><span class="k">\u672C\u5730\u76EE\u5F55</span><span class="v" [nz-tooltip]="draft.localDir">{{draft.localDir || '-'}}</span></div>
926
- <div class="item"><span class="k">\u96EA\u78A7\u56FE\u5BFC\u51FA</span><span class="v" [nz-tooltip]="draft.spriteExportDir">{{draft.spriteExportDir ?? '-'}}</span></div>
927
- <div class="item"><span class="k">Less \u5BFC\u51FA\u76EE\u5F55</span><span class="v" [nz-tooltip]="draft.lessExportDir">{{draft.lessExportDir ?? '-'}}</span></div>
928
- <div class="sep"></div>
929
- <div class="item"><span class="k">CSS\u524D\u7F00</span><span class="v">{{draft.cssPrefix ?? '-'}}</span></div>
930
- <div class="item"><span class="k">\u96EA\u78A7\u56FE URL</span><span class="v">{{draft.spriteUrl ?? '-'}}</span></div>
931
- <div class="item"><span class="k">\u590D\u5236\u6A21\u677F</span><span class="v">{{draft.template ?? '-'}}</span></div>
932
-
933
- </nz-card>
934
- `,
935
- styles: [step_summary_aside_component_default]
936
- })
937
- ], StepSummaryAsideComponent);
938
-
939
- // angular:jit:style:inline:src\app\pages\sprite\components\sprite-icons-panel-component.ts;CiAgICAud3JhcHsgaGVpZ2h0OjEwMCU7IG1pbi1oZWlnaHQ6MDsgZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpjb2x1bW47IGdhcDoxMnB4OyB9CiAgICAuYmFyeyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47IGdhcDoxMnB4OyB9CiAgICAubGVmdHsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDoxMHB4OyBtaW4td2lkdGg6MDsgfQogICAgLmxhYmVseyBvcGFjaXR5Oi44OyB9CiAgICAuaGludHsgb3BhY2l0eTouNzU7IG1heC13aWR0aDo1MjBweDsgb3ZlcmZsb3c6aGlkZGVuOyB0ZXh0LW92ZXJmbG93OmVsbGlwc2lzOyB3aGl0ZS1zcGFjZTpub3dyYXA7IH0KICAgIC5va3sgY29sb3I6IzUyYzQxYTsgfQoKICAgIC5ncmlkewogICAgICBmbGV4OjEgMSBhdXRvOwogICAgICBtaW4taGVpZ2h0OjA7CiAgICAgIGRpc3BsYXk6Z3JpZDsKICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMmZyKSBtaW5tYXgoMCwgMS4yZnIpOwogICAgICBnYXA6IDEycHg7CiAgICB9CiAgICBAbWVkaWEgKG1heC13aWR0aDogMTEwMHB4KXsgLmdyaWR7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9IH0KCiAgICAucGFuZWx7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTUsIDIzLCA0MiwgLjEyKTsKICAgICAgYm9yZGVyLXJhZGl1czogMjBweDsKICAgICAgbWluLWhlaWdodDowOwogICAgICBkaXNwbGF5OmZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsKICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwuMDIpOwogICAgfQogICAgLnBhbmVsLWhlYWRlcnsKICAgICAgZGlzcGxheTpmbGV4OwogICAgICBhbGlnbi1pdGVtczpjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOwogICAgICBwYWRkaW5nOjEycHggMTJweDsKICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMTUsIDIzLCA0MiwgLjEyKTsKICAgIH0KICAgIC5wYW5lbC10aXRsZXsgCiAgICAgICAgZGlzcGxheTpmbGV4OwogICAgICAgICYuY29sdW1ueyBmbGV4LWRpcmVjdGlvbjpjb2x1bW47ICB9CiAgICAgICAgLnRleHR7IGZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDo1MDA7IH0KICAgICAgICAuc3ViLXRleHR7IGZvbnQtc2l6ZToxMnB4OyBvcGFjaXR5Oi43NTsgfQogICAgIH0KICAgICAuc2VhcmNoeyB3aWR0aDoyNDBweDsgfQoKICAgIC5pY29uLWdyaWR7CiAgICAgIGRpc3BsYXk6Z3JpZDsKICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTYwcHgsIDFmcikpOwogICAgICBnYXA6IDEwcHg7CiAgICAgIG92ZXJmbG93OmF1dG87CiAgICAgIHBhZGRpbmctcmlnaHQ6IDRweDsKICAgICAgcGFkZGluZzoxMnB4OwogICAgfQogICAgLmljb24tY2FyZHsKICAgICAgY3Vyc29yOnBvaW50ZXI7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjA2KTsKICAgICAgYm9yZGVyLXJhZGl1czogMTRweDsKICAgICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwuNSk7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMDhzIGVhc2UsIGJvcmRlci1jb2xvciAuMDhzIGVhc2U7CiAgICAgIHVzZXItc2VsZWN0Om5vbmU7CiAgICAgIGNvbG9yOiAjZmZmOwogICAgICBkaXNwbGF5OmZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOmNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICB9CiAgICAuaWNvbi1jYXJkOmhvdmVyeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwuOSk7IH0KICAgIC50aHVtYnsKICAgICAgZGlzcGxheTpmbGV4OwogICAgICBhbGlnbi1pdGVtczpjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDpjZW50ZXI7CiAgICB9CiAgICAudGh1bWIgaW1newogICAgICBtaW4td2lkdGg6MzJweDsKICAgICAgbWluLWhlaWdodDozMnB4OwogICAgfQogICAgLm1ldGEgLm5hbWV7IGZvbnQtc2l6ZToxMnB4OyBvcGFjaXR5Oi45OyB9CiAgICAubWV0YSAuY2xzeyBmb250LXNpemU6MTJweDsgb3BhY2l0eTouNjU7IH0KICAgIC5tZXRhIHsKICAgICAgcG9zaXRpb246cmVsYXRpdmU7CiAgICB9CiAgICAubWV0YSBuei1iYWRnZXsKICAgICAgcG9zaXRpb246YWJzb2x1dGU7CiAgICAgIHRvcDotMTJweDsKICAgICAgcmlnaHQ6MDsKICAgIH0KICAgIC5zcHJpdGUtY29udGVudHsKICAgICAgcGFkZGluZzogMTZweCAxNnB4IDAgMTZweDsKICAgIH0KICAgIC5jc3MtY29udGVudHsKICAgICAgcGFkZGluZzoxMnB4OwogICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICBmbGV4OjEgMSBhdXRvOwogICAgICBvdmVyZmxvdzpoaWRkZW47CiAgICB9CiAg
940
- var sprite_icons_panel_component_default = "/* angular:styles/component:less;c424390f4eb7d036a785308cf1e8016be36a23ef2d28b39a4b98d4537811f199;D:\\ng-manager\\webapp\\src\\app\\pages\\sprite\\components\\sprite-icons-panel-component.ts */\n.wrap {\n height: 100%;\n min-height: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n}\n.left {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n.label {\n opacity: 0.8;\n}\n.hint {\n opacity: 0.75;\n max-width: 520px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.ok {\n color: #52c41a;\n}\n.grid {\n flex: 1 1 auto;\n min-height: 0;\n display: grid;\n grid-template-columns: minmax(0, 2fr) minmax(0, 1.2fr);\n gap: 12px;\n}\n@media (max-width: 1100px) {\n .grid {\n grid-template-columns: 1fr;\n }\n}\n.panel {\n border: 1px solid rgba(15, 23, 42, 0.12);\n border-radius: 20px;\n min-height: 0;\n display: flex;\n flex-direction: column;\n background: rgba(255, 255, 255, 0.02);\n}\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 12px;\n border-bottom: 1px solid rgba(15, 23, 42, 0.12);\n}\n.panel-title {\n display: flex;\n}\n.panel-title.column {\n flex-direction: column;\n}\n.panel-title .text {\n font-size: 14px;\n font-weight: 500;\n}\n.panel-title .sub-text {\n font-size: 12px;\n opacity: 0.75;\n}\n.search {\n width: 240px;\n}\n.icon-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n gap: 10px;\n overflow: auto;\n padding-right: 4px;\n padding: 12px;\n}\n.icon-card {\n cursor: pointer;\n border: 1px solid rgba(255, 255, 255, 0.06);\n border-radius: 14px;\n background: rgba(0, 0, 0, 0.5);\n transition: transform 0.08s ease, border-color 0.08s ease;\n -webkit-user-select: none;\n user-select: none;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n}\n.icon-card:hover {\n transform: translateY(-1px);\n border-color: rgba(255, 255, 255, 0.9);\n}\n.thumb {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.thumb img {\n min-width: 32px;\n min-height: 32px;\n}\n.meta .name {\n font-size: 12px;\n opacity: 0.9;\n}\n.meta .cls {\n font-size: 12px;\n opacity: 0.65;\n}\n.meta {\n position: relative;\n}\n.meta nz-badge {\n position: absolute;\n top: -12px;\n right: 0;\n}\n.sprite-content {\n padding: 16px 16px 0 16px;\n}\n.css-content {\n padding: 12px;\n line-height: 1.5;\n flex: 1 1 auto;\n overflow: hidden;\n}\n/*# sourceMappingURL=sprite-icons-panel-component.css.map */\n";
941
-
942
- // angular:jit:style:inline:src\app\pages\sprite\components\less-viewport-component.ts;CiAgICAgIDpob3N0ewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAvKiDlvq7lvLHlmarngrkgKyDmuJDlj5jog4zmma8gKi8KICAgICAgLmJnLWZ4IHsKICAgICAgICAgIGJhY2tncm91bmQ6CiAgICAgICAgICAgICAgcmFkaWFsLWdyYWRpZW50KDEyMDBweCA2NTBweCBhdCAyMCUgMTAlLCByZ2JhKDM0LCAyMTEsIDIzOCwgLjE0KSwgdHJhbnNwYXJlbnQgNTUlKSwKICAgICAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoOTAwcHggNTIwcHggYXQgODAlIDM1JSwgcmdiYSgxMjQsIDU4LCAyMzcsIC4xNiksIHRyYW5zcGFyZW50IDU1JSksCiAgICAgICAgICAgICAgcmFkaWFsLWdyYWRpZW50KDkwMHB4IDUyMHB4IGF0IDQwJSA5MCUsIHJnYmEoNTIsIDIxMSwgMTUzLCAuMTApLCB0cmFuc3BhcmVudCA1NSUpLAogICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsICMwNTA4MTYgMCUsICMwNzBCMTggNDAlLCAjMDUwODE2IDEwMCUpOwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIC52aWV3LWNhcmR7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNSwgMjMsIDQyLCAwLjEyKTsKICAgICAgICBwb3NpdGlvbjpyZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgIGRpc3BsYXk6ZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjpjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CgogICAgICB9CiAgICAgIC52aWV3LWhlYWRlcnsKICAgICAgICBwYWRkaW5nOjhweCAxMnB4OwogICAgICAgIGRpc3BsYXk6ZmxleDsKICAgICAgICBhbGlnbi1pdGVtczpjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47CiAgICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgICAgLnRleHR7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjg1KTsKICAgICAgICB9CiAgICAgICAgLmFjdGlvbnN7CiAgICAgICAgICBkaXNwbGF5OmZsZXg7CiAgICAgICAgICBhbGlnbi1pdGVtczpjZW50ZXI7CiAgICAgICAgICBnYXA6OHB4OwogICAgICAgICAgYnV0dG9uW256LWJ1dHRvbl17CiAgICAgICAgICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjg1KTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICB9CiAgICAgIC52aWV3cG9ydHsKICAgICAgICBmbGV4OjEgMSBhdXRvOwogICAgICAgIG1pbi1oZWlnaHQ6MDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDUsIDgsIDIxKTsKICAgICAgICBwb3NpdGlvbjpyZWxhdGl2ZTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEycHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KICAgIA==
943
- var less_viewport_component_default = "/* angular:styles/component:less;eb9450ccb5878613586334d2156dfbb450da3ff7a9a080e1df710f4935e5d83d;D:\\ng-manager\\webapp\\src\\app\\pages\\sprite\\components\\less-viewport-component.ts */\n:host {\n display: block;\n height: 100%;\n}\n.bg-fx {\n background:\n radial-gradient(\n 1200px 650px at 20% 10%,\n rgba(34, 211, 238, 0.14),\n transparent 55%),\n radial-gradient(\n 900px 520px at 80% 35%,\n rgba(124, 58, 237, 0.16),\n transparent 55%),\n radial-gradient(\n 900px 520px at 40% 90%,\n rgba(52, 211, 153, 0.1),\n transparent 55%),\n linear-gradient(\n 180deg,\n #050816 0%,\n #070B18 40%,\n #050816 100%);\n position: relative;\n}\n.view-card {\n border: 1px solid rgba(15, 23, 42, 0.12);\n position: relative;\n border-radius: 12px;\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n.view-header {\n padding: 8px 12px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex: 0 0 auto;\n}\n.view-header .text {\n font-size: 14px;\n font-weight: 500;\n color: rgba(255, 255, 255, 0.85);\n}\n.view-header .actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.view-header .actions button[nz-button] {\n color: rgba(255, 255, 255, 0.85);\n}\n.viewport {\n flex: 1 1 auto;\n min-height: 0;\n cursor: default;\n background-color: #050815;\n position: relative;\n color: #fff;\n padding-left: 12px;\n overflow-x: hidden;\n overflow-y: auto;\n}\n/*# sourceMappingURL=less-viewport-component.css.map */\n";
944
-
945
- // src/app/pages/sprite/components/less-viewport-component.ts
946
- var LessViewportComponent = class LessViewportComponent2 {
947
- cssText = "";
948
- clipboard = inject(Clipboard);
949
- msg = inject(NzMessageService);
950
- async copyCss() {
951
- const t = this.cssText;
952
- if (!t)
953
- return;
954
- this.clipboard.copy(t);
955
- this.msg.success("\u5DF2\u590D\u5236\u6837\u5F0F");
956
- }
957
- static propDecorators = {
958
- cssText: [{ type: Input }]
959
- };
960
- };
961
- LessViewportComponent = __decorate([
962
- Component({
963
- selector: "app-less-viewport",
964
- imports: [
965
- CommonModule,
966
- NzCheckboxModule,
967
- FormsModule,
968
- NzSpaceModule,
969
- NzButtonModule,
970
- NzIconModule,
971
- ClipboardModule,
972
- NzTooltipModule
973
- ],
974
- template: `
975
- <div class="view-card bg-fx">
976
- <div class="view-header">
977
- <div class="text">\u6837\u5F0F\u4EE3\u7801</div>
978
- <div class="actions">
979
- <button nz-button nzType="text" (click)="copyCss()" [disabled]="!cssText" nz-tooltip="\u590D\u5236\u6837\u5F0F">
980
- <nz-icon nzType="copy"></nz-icon>
981
- </button>
982
- </div>
983
- </div>
984
- <div class="viewport">
985
- <pre><code>{{cssText}}</code></pre>
986
- </div>
987
- </div>
988
- `,
989
- styles: [less_viewport_component_default]
990
- })
991
- ], LessViewportComponent);
992
-
993
- // angular:jit:style:inline:src\app\pages\sprite\components\sprite-viewport-component.ts;CiAgICAgIC52aWV3LWNhcmR7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNSwgMjMsIDQyLCAwLjEyKTsKICAgICAgICBwb3NpdGlvbjpyZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgLnZpZXctaGVhZGVyewogICAgICAgIHBhZGRpbmc6OHB4IDEycHg7CiAgICAgICAgZGlzcGxheTpmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOmNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjsKICAgICAgICAudGlwewogICAgICAgICAgZGlzcGxheTppbmxpbmUtZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOmNlbnRlcjsKICAgICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgfQogICAgICAgIGxhYmVsewogICAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLnZpZXdwb3J0ewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBtaW4taGVpZ2h0OiAzNjBweDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNSwgOCwgMjEpOwogICAgICAgIHBvc2l0aW9uOnJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgJi5ncmlkLWZ4ewogICAgICAgIGJhY2tncm91bmQtaW1hZ2U6CiAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgxNDgsIDE2MywgMTg0LCAuMDYpIDFweCwgdHJhbnNwYXJlbnQgMXB4KSwKICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgxNDgsIDE2MywgMTg0LCAuMDYpIDFweCwgdHJhbnNwYXJlbnQgMXB4KTsKICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDI4cHggMjhweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyog5b6u5byx5Zmq54K5ICsg5riQ5Y+Y6IOM5pmvICovCiAgICAgIC5iZy1meCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOgogICAgICAgICAgICAgIHJhZGlhbC1ncmFkaWVudCgxMjAwcHggNjUwcHggYXQgMjAlIDEwJSwgcmdiYSgzNCwgMjExLCAyMzgsIC4xNCksIHRyYW5zcGFyZW50IDU1JSksCiAgICAgICAgICAgICAgcmFkaWFsLWdyYWRpZW50KDkwMHB4IDUyMHB4IGF0IDgwJSAzNSUsIHJnYmEoMTI0LCA1OCwgMjM3LCAuMTYpLCB0cmFuc3BhcmVudCA1NSUpLAogICAgICAgICAgICAgIHJhZGlhbC1ncmFkaWVudCg5MDBweCA1MjBweCBhdCA0MCUgOTAlLCByZ2JhKDUyLCAyMTEsIDE1MywgLjEwKSwgdHJhbnNwYXJlbnQgNTUlKSwKICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjMDUwODE2IDAlLCAjMDcwQjE4IDQwJSwgIzA1MDgxNiAxMDAlKTsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICAuYmctZng6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaW5zZXQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3BhY2l0eTogLjEwOwogICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNjAnIGhlaWdodD0nMTYwJyUzRSUzQ2ZpbHRlciBpZD0nbiclM0UlM0NmZVR1cmJ1bGVuY2UgdHlwZT0nZnJhY3RhbE5vaXNlJyBiYXNlRnJlcXVlbmN5PScuOCcgbnVtT2N0YXZlcz0nMycgc3RpdGNoVGlsZXM9J3N0aXRjaCcvJTNFJTNDL2ZpbHRlciUzRSUzQ3JlY3Qgd2lkdGg9JzE2MCcgaGVpZ2h0PScxNjAnIGZpbHRlcj0ndXJsKCUyM24pJyBvcGFjaXR5PScuMzUnLyUzRSUzQy9zdmclM0UiKTsKICAgICAgICBtaXgtYmxlbmQtbW9kZTogb3ZlcmxheTsKICAgICAgfQogICAgICAuc3ByaXRlewogICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwuMDIpOwogICAgICAgIHRvcDoyNHB4OwogICAgICAgIGxlZnQ6MjRweDsKICAgICAgICAtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogMCAwICMwMDAwOwogICAgICAgIC0tdHctc2hhZG93OiAwIDAgMCAxcHggcmdiYSgzNCwgMjExLCAyMzgsIC4xNCksIDAgMjRweCA4MHB4IHJnYmEoMCwgMCwgMCwgLjU1KTsKICAgICAgICAtLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDAgMCAxcHggdmFyKC0tdHctc2hhZG93LWNvbG9yKSwgMCAyNHB4IDgwcHggdmFyKC0tdHctc2hhZG93LWNvbG9yKTsKICAgICAgICBib3gtc2hhZG93OiB2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3csIDAgMCAjMDAwMCksIHZhcigtLXR3LXJpbmctc2hhZG93LCAwIDAgIzAwMDApLCB2YXIoLS10dy1zaGFkb3cpOwogICAgICB9CiAgICAgIC5hYnN7CiAgICAgICAgcG9zaXRpb246YWJzb2x1dGU7CiAgICAgIH0KICAgICAgLmluc2V0LTB7CiAgICAgICAgbGVmdDowOwogICAgICAgIHRvcDowOwogICAgICAgIHJpZ2h0OjA7CiAgICAgICAgYm90dG9tOjA7CiAgICAgIH0KICAgICAgLmFiczJ7CiAgICAgICAgYm9yZGVyLXJhZGl1czoxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMzQsIDIxMSwgMjM4LCAuMDgpLCByZ2JhKDEyNCwgNTgsIDIzNywgLjEwKSk7CiAgICAgIH0KICAgICAgLnRyYW5zaXRpb24gewogICAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGNvbG9yLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXItY29sb3IsIGZpbGwsIHN0cm9rZSwgb3BhY2l0eSwgYm94LXNoYWRvdywgdHJhbnNmb3JtLCBmaWx0ZXIsIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uLWNvbG9yLCAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjsKICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBjb2xvciwgYmFja2dyb3VuZC1jb2xvciwgYm9yZGVyLWNvbG9yLCB0ZXh0LWRlY29yYXRpb24tY29sb3IsIGZpbGwsIHN0cm9rZSwgb3BhY2l0eSwgYm94LXNoYWRvdywgdHJhbnNmb3JtLCBmaWx0ZXIsIGJhY2tkcm9wLWZpbHRlcjsKICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBjb2xvciwgYmFja2dyb3VuZC1jb2xvciwgYm9yZGVyLWNvbG9yLCB0ZXh0LWRlY29yYXRpb24tY29sb3IsIGZpbGwsIHN0cm9rZSwgb3BhY2l0eSwgYm94LXNoYWRvdywgdHJhbnNmb3JtLCBmaWx0ZXIsIGJhY2tkcm9wLWZpbHRlciwgLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tY29sb3IsIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDE1MG1zOwogICAgICB9CiAgICAgIC5ib3gtaXRlbXsKICAgICAgICBib3JkZXItd2lkdGg6IDFweDsKICAgICAgICBib3JkZXItc3R5bGU6IHNvbGlkOwogICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwuMTUpOwogICAgICAgICY6aG92ZXJ7CiAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMTI0LCA1OCwgMjM3LCAuNDApOwogICAgICAgIH0KICAgICAgICAmLmFjdGl2ZXsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgzNCwyMTEsMjM4LC43MCk7CiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgzNCwyMTEsMjM4LC4yNSksIDAgMCAyOHB4IHJnYmEoMzQsMjExLDIzOCwuMTgpOwogICAgICAgIH0KICAgICAgfQogICAgICAudG9vbHRpcHsKICAgICAgICBwb2ludGVyLWV2ZW50czpub25lOwogICAgICAgIHotaW5kZXg6MTA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJvcmRlcjoxcHggc29saWQgcmdiYSgxNDgsIDE2MywgMTg0LCAuMTQpOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTgsIDI4LCA1MiwgMC43KTsKICAgICAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgzNCwgMjExLCAyMzgsIC4yNSksIDAgMTBweCAzMHB4IHJnYmEoMTI0LCA1OCwgMjM3LCAuMTgpOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgICYuaGlkZGVuewogICAgICAgICAgZGlzcGxheTpub25lOwogICAgICAgIH0KICAgICAgfQogICAg
994
- var sprite_viewport_component_default = `/* angular:styles/component:less;991b632b353fdd67d564e85381720016a1fd0d5205f64b4bc87eeaee09e28352;D:\\ng-manager\\webapp\\src\\app\\pages\\sprite\\components\\sprite-viewport-component.ts */
995
- .view-card {
996
- border: 1px solid rgba(15, 23, 42, 0.12);
997
- position: relative;
998
- border-radius: 12px;
999
- overflow: hidden;
1000
- }
1001
- .view-header {
1002
- padding: 8px 12px;
1003
- display: flex;
1004
- align-items: center;
1005
- justify-content: space-between;
1006
- }
1007
- .view-header .tip {
1008
- display: inline-flex;
1009
- align-items: center;
1010
- color: rgba(255, 255, 255, 0.8);
1011
- font-size: 12px;
1012
- }
1013
- .view-header label {
1014
- color: rgba(255, 255, 255, 0.8);
1015
- }
1016
- .viewport {
1017
- cursor: default;
1018
- min-height: 360px;
1019
- background-color: #050815;
1020
- position: relative;
1021
- overflow: hidden;
1022
- }
1023
- .viewport.grid-fx {
1024
- background-image:
1025
- linear-gradient(
1026
- to right,
1027
- rgba(148, 163, 184, 0.06) 1px,
1028
- transparent 1px),
1029
- linear-gradient(
1030
- to bottom,
1031
- rgba(148, 163, 184, 0.06) 1px,
1032
- transparent 1px);
1033
- background-size: 28px 28px;
1034
- }
1035
- .bg-fx {
1036
- background:
1037
- radial-gradient(
1038
- 1200px 650px at 20% 10%,
1039
- rgba(34, 211, 238, 0.14),
1040
- transparent 55%),
1041
- radial-gradient(
1042
- 900px 520px at 80% 35%,
1043
- rgba(124, 58, 237, 0.16),
1044
- transparent 55%),
1045
- radial-gradient(
1046
- 900px 520px at 40% 90%,
1047
- rgba(52, 211, 153, 0.1),
1048
- transparent 55%),
1049
- linear-gradient(
1050
- 180deg,
1051
- #050816 0%,
1052
- #070B18 40%,
1053
- #050816 100%);
1054
- position: relative;
1055
- }
1056
- .bg-fx:before {
1057
- content: "";
1058
- position: absolute;
1059
- inset: 0;
1060
- pointer-events: none;
1061
- opacity: 0.1;
1062
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='.35'/%3E%3C/svg%3E");
1063
- mix-blend-mode: overlay;
1064
- }
1065
- .sprite {
1066
- border-radius: 12px;
1067
- background-color: rgba(255, 255, 255, 0.02);
1068
- top: 24px;
1069
- left: 24px;
1070
- --tw-ring-offset-shadow: 0 0 #0000;
1071
- --tw-shadow: 0 0 0 1px rgba(34, 211, 238, 0.14), 0 24px 80px rgba(0, 0, 0, 0.55);
1072
- --tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color), 0 24px 80px var(--tw-shadow-color);
1073
- box-shadow:
1074
- var(--tw-ring-offset-shadow, 0 0 #0000),
1075
- var(--tw-ring-shadow, 0 0 #0000),
1076
- var(--tw-shadow);
1077
- }
1078
- .abs {
1079
- position: absolute;
1080
- }
1081
- .inset-0 {
1082
- left: 0;
1083
- top: 0;
1084
- right: 0;
1085
- bottom: 0;
1086
- }
1087
- .abs2 {
1088
- border-radius: 12px;
1089
- background:
1090
- linear-gradient(
1091
- 135deg,
1092
- rgba(34, 211, 238, 0.08),
1093
- rgba(124, 58, 237, 0.1));
1094
- }
1095
- .transition {
1096
- transition-property:
1097
- color,
1098
- background-color,
1099
- border-color,
1100
- fill,
1101
- stroke,
1102
- opacity,
1103
- box-shadow,
1104
- transform,
1105
- filter,
1106
- -webkit-text-decoration-color,
1107
- -webkit-backdrop-filter;
1108
- transition-property:
1109
- color,
1110
- background-color,
1111
- border-color,
1112
- text-decoration-color,
1113
- fill,
1114
- stroke,
1115
- opacity,
1116
- box-shadow,
1117
- transform,
1118
- filter,
1119
- backdrop-filter;
1120
- transition-property:
1121
- color,
1122
- background-color,
1123
- border-color,
1124
- text-decoration-color,
1125
- fill,
1126
- stroke,
1127
- opacity,
1128
- box-shadow,
1129
- transform,
1130
- filter,
1131
- backdrop-filter,
1132
- -webkit-text-decoration-color,
1133
- -webkit-backdrop-filter;
1134
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1135
- transition-duration: 150ms;
1136
- }
1137
- .box-item {
1138
- border-width: 1px;
1139
- border-style: solid;
1140
- border-color: rgba(255, 255, 255, 0.15);
1141
- }
1142
- .box-item:hover {
1143
- border-color: rgba(124, 58, 237, 0.4);
1144
- }
1145
- .box-item.active {
1146
- border-color: rgba(34, 211, 238, 0.7);
1147
- box-shadow: 0 0 0 1px rgba(34, 211, 238, 0.25), 0 0 28px rgba(34, 211, 238, 0.18);
1148
- }
1149
- .tooltip {
1150
- pointer-events: none;
1151
- z-index: 10;
1152
- border-radius: 8px;
1153
- border: 1px solid rgba(148, 163, 184, 0.14);
1154
- background-color: rgba(18, 28, 52, 0.7);
1155
- padding: 6px 10px;
1156
- box-shadow: 0 0 0 1px rgba(34, 211, 238, 0.25), 0 10px 30px rgba(124, 58, 237, 0.18);
1157
- color: #fff;
1158
- }
1159
- .tooltip.hidden {
1160
- display: none;
1161
- }
1162
- /*# sourceMappingURL=sprite-viewport-component.css.map */
1163
- `;
1164
-
1165
- // src/app/pages/sprite/components/sprite-viewport-component.ts
1166
- var SpriteViewportComponent = class SpriteViewportComponent2 {
1167
- item = null;
1168
- viewportRef;
1169
- activeClassName = model("");
1170
- showGrid = true;
1171
- showBoxes = true;
1172
- scale = signal(1);
1173
- tx = signal(0);
1174
- ty = signal(0);
1175
- dragging = signal(false);
1176
- last = signal({ x: 0, y: 0 });
1177
- // Tooltip & Toast
1178
- tooltip = signal({
1179
- visible: false,
1180
- left: 0,
1181
- top: 0,
1182
- name: "\u2014",
1183
- meta: "\u2014"
1184
- });
1185
- get classes() {
1186
- return this.meta?.classes ?? [];
1187
- }
1188
- get meta() {
1189
- return this.item?.meta;
1190
- }
1191
- get previewSpriteUrl() {
1192
- return this.item?.previewSpriteUrl ?? "";
1193
- }
1194
- setActive(className) {
1195
- this.activeClassName.set(className);
1196
- }
1197
- stageTransform = computed(() => {
1198
- return `translate(${this.tx()}px, ${this.ty()}px) scale(${this.scale()})`;
1199
- });
1200
- onBoxMove(e, cls) {
1201
- if (!this.showBoxes)
1202
- return;
1203
- if (this.activeClassName() !== cls.className) {
1204
- this.setActive(cls.className);
1205
- }
1206
- const r = this.viewportRef.nativeElement.getBoundingClientRect();
1207
- this.tooltip.set({
1208
- visible: true,
1209
- left: e.clientX - r.left + 10,
1210
- top: e.clientY - r.top + 10,
1211
- name: cls.name,
1212
- meta: `${cls.width}\xD7${cls.height} \xB7 (-${cls.x}px, -${cls.y}px)`
1213
- });
1214
- }
1215
- onBoxLeave() {
1216
- this.tooltip.set(__spreadProps(__spreadValues({}, this.tooltip()), {
1217
- visible: false
1218
- }));
1219
- }
1220
- // ====== Pan / Zoom ======
1221
- onMouseDown(e) {
1222
- this.dragging.set(true);
1223
- this.last.set({ x: e.clientX, y: e.clientY });
1224
- }
1225
- onMouseUp() {
1226
- this.dragging.set(false);
1227
- }
1228
- onMouseMove(e) {
1229
- if (!this.dragging())
1230
- return;
1231
- const last = this.last();
1232
- const dx = e.clientX - last.x;
1233
- const dy = e.clientY - last.y;
1234
- this.last.set({ x: e.clientX, y: e.clientY });
1235
- this.tx.set(this.tx() + dx);
1236
- this.ty.set(this.ty() + dy);
1237
- }
1238
- onWheel(e) {
1239
- e.preventDefault();
1240
- const rect = this.viewportRef.nativeElement.getBoundingClientRect();
1241
- const mx = e.clientX - rect.left;
1242
- const my = e.clientY - rect.top;
1243
- const delta = -Math.sign(e.deltaY) * 0.08;
1244
- const current = this.scale();
1245
- const next = this.clamp(current * (1 + delta), 0.6, 3);
1246
- const wx = (mx - this.tx()) / current;
1247
- const wy = (my - this.ty()) / current;
1248
- this.scale.set(next);
1249
- this.tx.set(mx - wx * next);
1250
- this.ty.set(my - wy * next);
1251
- }
1252
- clearActiveIfBlank(e) {
1253
- const target = e.target;
1254
- if (target.id === "viewport")
1255
- this.setActive("");
1256
- }
1257
- resetView() {
1258
- this.scale.set(1);
1259
- this.tx.set(0);
1260
- this.ty.set(0);
1261
- }
1262
- clamp(v, min, max) {
1263
- return Math.max(min, Math.min(max, v));
1264
- }
1265
- static propDecorators = {
1266
- item: [{ type: Input }],
1267
- viewportRef: [{ type: ViewChild, args: ["viewport", { static: true }] }],
1268
- activeClassName: [{ type: Input, args: [{ isSignal: true, alias: "activeClassName", required: false }] }, { type: Output, args: ["activeClassNameChange"] }]
1269
- };
1270
- };
1271
- SpriteViewportComponent = __decorate([
1272
- Component({
1273
- selector: "app-sprite-viewport",
1274
- imports: [
1275
- CommonModule,
1276
- NzCheckboxModule,
1277
- FormsModule,
1278
- NzSpaceModule,
1279
- NzBadgeModule
1280
- ],
1281
- template: `
1282
- <div class="view-card bg-fx">
1283
- <div class="view-header">
1284
- <nz-space>
1285
- <div class="tip">
1286
- <nz-badge nzColor="purple"/>
1287
- \u9F20\u6807\u6EDA\u8F6E\u7F29\u653E
1288
- </div>
1289
- <div class="tip">
1290
- <nz-badge nzColor="geekblue"/>
1291
- \u62D6\u62FD\u79FB\u52A8
1292
- </div>
1293
-
1294
- </nz-space>
1295
- <div class="actions">
1296
- <nz-space>
1297
- <a href="javascript:;" class="tip" (click)="resetView()">\u91CD\u7F6E\u89C6\u56FE</a>
1298
- <label nz-checkbox [(ngModel)]="showGrid">\u50CF\u7D20\u7F51\u683C</label>
1299
- <label nz-checkbox [(ngModel)]="showBoxes">\u5207\u7247\u6846</label>
1300
- </nz-space>
1301
- </div>
1302
- </div>
1303
- <div class="viewport" #viewport
1304
- [style.height.px]="(meta?.spriteHeight ?? 0) + 48"
1305
- [class.grid-fx]="showGrid"
1306
- (mousedown)="onMouseDown($event)"
1307
- (mousemove)="onMouseMove($event)"
1308
- (mouseup)="onMouseUp()"
1309
- (mouseleave)="onMouseUp()"
1310
- (wheel)="onWheel($event)"
1311
- (click)="clearActiveIfBlank($event)"
1312
- >
1313
- <div class="stage abs inset-0" [style.transform]="stageTransform()" style="transform-origin: 0 0;">
1314
- <div class="sprite abs" [style.width.px]="meta?.spriteWidth" [style.height.px]="meta?.spriteHeight">
1315
- <div class="abs inset-0" [style.backgroundImage]="'url(' + previewSpriteUrl + ')'"
1316
- style="background-repeat:no-repeat;background-position:0 0;background-size:100% 100%;opacity:.95;" ></div>
1317
- <div class="abs inset-0 abs2"></div>
1318
- <div class="abs inset-0 boxes" [style.display]="showBoxes ? 'block' : 'none'">
1319
- @for (cls of classes; track cls.name) {
1320
- <div
1321
- class="abs box-item transition"
1322
- [class.active]="activeClassName() === cls.className"
1323
-
1324
- [style.left.px]="cls.x"
1325
- [style.top.px]="cls.y"
1326
- [style.width.px]="cls.width"
1327
- [style.height.px]="cls.height"
1328
- (mousemove)="onBoxMove($event, cls)"
1329
- (mouseleave)="onBoxLeave()"
1330
- (click)="$event.stopPropagation(); setActive(cls.name)"
1331
- ></div>
1332
- }
1333
- </div>
1334
- </div>
1335
- </div>
1336
- <div class="tooltip abs"
1337
- [class.hidden]="!tooltip().visible"
1338
- [style.left.px]="tooltip().left"
1339
- [style.top.px]="tooltip().top"
1340
- >
1341
- <div class="font-medium">{{ tooltip().name }}</div>
1342
- <div >{{ tooltip().meta }}</div>
1343
- </div>
1344
- </div>
1345
- <div class="info-bar"></div>
1346
- </div>
1347
- `,
1348
- styles: [sprite_viewport_component_default]
1349
- })
1350
- ], SpriteViewportComponent);
1351
-
1352
- // src/app/pages/sprite/components/sprite-icons-panel-component.ts
1353
- var SpriteIconsPanelComponent = class SpriteIconsPanelComponent2 {
1354
- clipboard = inject(Clipboard);
1355
- msg = inject(NzMessageService);
1356
- api = inject(SpriteApiService);
1357
- sprite = input(null);
1358
- groups = computed(() => {
1359
- return this.sprite()?.groups ?? [];
1360
- });
1361
- group = signal("");
1362
- activeItem = computed(() => {
1363
- const g = this.group();
1364
- return this.groups().find((x) => x.group === g) ?? null;
1365
- });
1366
- mode = computed(() => {
1367
- return this.activeItem()?.kind === "svg" ? "svg" : "png";
1368
- });
1369
- activeClassName = signal("");
1370
- activePreviewSpriteUrl = computed(() => {
1371
- const it = this.activeItem();
1372
- return it?.previewSpriteUrl ?? null;
1373
- });
1374
- ngOnChanges(changes) {
1375
- if (changes["sprite"]) {
1376
- const firstItem = this.sprite()?.groups?.[0];
1377
- if (firstItem) {
1378
- const firstGroup = firstItem.group ?? "";
1379
- this.group.set(firstGroup);
1380
- this.groupChange(firstGroup);
1381
- }
1382
- }
1383
- }
1384
- groupChange(group) {
1385
- if (this.activeItem()?.kind === "svg") {
1386
- this.loadImages(group);
1387
- }
1388
- }
1389
- loadImages(group) {
1390
- const id = this.sprite()?.projectId ?? "";
1391
- if (!id)
1392
- return;
1393
- this.api.browseIconFiles(id, group).subscribe((res) => {
1394
- const icons = res.entries ?? [];
1395
- this.icons.set(icons);
1396
- });
1397
- }
1398
- baseClass = computed(() => {
1399
- const prefix = this.sprite()?.config?.prefix || "sl";
1400
- const g = this.group();
1401
- const sizes = String(g).split("-");
1402
- if (sizes.length > 1) {
1403
- const [w, h] = sizes;
1404
- if (w !== h) {
1405
- return `${prefix}-${sizes[0]}-${sizes[1]}`;
1406
- }
1407
- return `${prefix}-${sizes[0]}`;
1408
- }
1409
- return `${prefix}-${sizes[0]}`;
1410
- });
1411
- iconClasses = computed(() => {
1412
- const it = this.activeItem();
1413
- const meta = it?.meta;
1414
- const classes = meta?.classes ?? [];
1415
- return classes.filter((x) => !!x.className);
1416
- });
1417
- icons = signal([]);
1418
- cssText = computed(() => {
1419
- const it = this.activeItem();
1420
- return String(it?.lessText ?? "");
1421
- });
1422
- async copySpriteClass(className) {
1423
- const tpl = this.sprite()?.config?.template || `<i class="{base} {class}"></i>`;
1424
- const html = tpl.replaceAll("{base}", this.baseClass()).replaceAll("{class}", className);
1425
- this.activeClassName.set(className);
1426
- this.clipboard.copy(html);
1427
- const safe = escapeHtmlText(html);
1428
- const tip = `\u5DF2\u590D\u5236\uFF1A${safe}`;
1429
- this.msg.success(tip);
1430
- }
1431
- async copySvg(c) {
1432
- const tpl = this.sprite()?.config?.template;
1433
- if (!tpl)
1434
- return;
1435
- const item = this.activeItem();
1436
- const meta = item?.meta;
1437
- if (!meta)
1438
- return;
1439
- const size = meta?.size;
1440
- const svgMeta = meta.icons.find((i) => i.file === c.name);
1441
- if (!svgMeta)
1442
- return;
1443
- const html = tpl.replaceAll("{name}", svgMeta.name).replaceAll("{size}", size).replaceAll("{base}", svgMeta.className).replaceAll("{group}", meta.group);
1444
- this.clipboard.copy(html);
1445
- const safe = escapeHtmlText(html);
1446
- const tip = `\u5DF2\u590D\u5236\uFF1A${safe}`;
1447
- this.msg.success(tip);
1448
- }
1449
- async copyCss() {
1450
- const t = this.cssText();
1451
- if (!t)
1452
- return;
1453
- this.clipboard.copy(t);
1454
- this.msg.success("\u5DF2\u590D\u5236");
1455
- }
1456
- baseSpriteStyle() {
1457
- const item = this.activeItem();
1458
- const url = item?.previewSpriteUrl;
1459
- if (!url)
1460
- return {};
1461
- const meta = item?.meta;
1462
- return {
1463
- backgroundImage: `url("${url}")`,
1464
- backgroundRepeat: "no-repeat",
1465
- backgroundSize: meta ? `${meta.spriteWidth}px ${meta.spriteHeight}px` : "initial"
1466
- };
1467
- }
1468
- spriteStyle(c) {
1469
- if (!c)
1470
- return {};
1471
- const base = this.baseSpriteStyle();
1472
- return __spreadProps(__spreadValues({}, base), {
1473
- width: `${c.width}px`,
1474
- height: `${c.height}px`,
1475
- backgroundPosition: `-${c.x}px -${c.y}px`
1476
- });
1477
- }
1478
- static propDecorators = {
1479
- sprite: [{ type: Input, args: [{ isSignal: true, alias: "sprite", required: false, transform: void 0 }] }]
1480
- };
1481
- };
1482
- SpriteIconsPanelComponent = __decorate([
1483
- Component({
1484
- selector: "app-sprite-icons-panel",
1485
- standalone: true,
1486
- imports: [
1487
- CommonModule,
1488
- FormsModule,
1489
- NzSelectModule,
1490
- NzGridModule,
1491
- NzEmptyModule,
1492
- NzCodeEditorModule,
1493
- NzButtonModule,
1494
- NzIconModule,
1495
- ClipboardModule,
1496
- NzInputModule,
1497
- SpriteViewportComponent,
1498
- LessViewportComponent,
1499
- NzBadgeModule,
1500
- NzImageModule
1501
- ],
1502
- template: `
1503
- <div class="wrap">
1504
- <div class="bar">
1505
- <div class="left">
1506
- <span class="label">\u5206\u7EC4</span>
1507
- <nz-select
1508
- style="width: 220px"
1509
- [ngModel]="group()"
1510
- (ngModelChange)="group.set($event); groupChange($event)"
1511
- nzPlaceHolder="\u8BF7\u9009\u62E9"
1512
- >
1513
- @for (opt of groups(); track opt.group) {
1514
- <nz-option [nzLabel]="opt.group" [nzValue]="opt.group"></nz-option>
1515
- }
1516
- </nz-select>
1517
- </div>
1518
- </div>
1519
-
1520
- @if(!activeItem()){
1521
- <nz-empty nzNotFoundContent="\u6CA1\u6709\u53EF\u5C55\u793A\u7684\u5206\u7EC4"></nz-empty>
1522
- } @else {
1523
- <div class="grid">
1524
- <div class="panel">
1525
- <div class="panel-header">
1526
- <div class="panel-title column">
1527
- <div class="text">\u56FE\u6807\u9884\u89C8</div>
1528
- <div class="sub-text">\u5171{{icons().length + iconClasses().length}}\u4E2A\u56FE\u6807</div>
1529
- </div>
1530
- <div class="search">
1531
- <input type="text" placeholder="\u641C\u7D22\u56FE\u6807\u540D\u79F0\u6216\u7C7B\u540D" nz-input />
1532
- </div>
1533
- </div>
1534
-
1535
- @if(iconClasses().length === 0 && icons().length === 0){
1536
- <nz-empty nzNotFoundContent="\u8BE5\u5206\u7EC4\u6CA1\u6709\u53EF\u7528\u56FE\u6807"></nz-empty>
1537
- } @else {
1538
- <div class="icon-grid">
1539
- @if(mode() === 'svg'){
1540
- @for (c of icons(); track c.name) {
1541
- <div class="icon-card" (click)="copySvg(c)">
1542
- <div class="thumb">
1543
- @if(c.kind === 'file' && c.url){
1544
- <img nz-image [nzSrc]="c.url" [alt]="c.name" loading="lazy" />
1545
- }
1546
- </div>
1547
- <div class="meta">
1548
- <div class="name">{{c.name}}</div>
1549
- </div>
1550
- </div>
1551
- }
1552
- }@else{
1553
- @for (c of iconClasses(); track c.className) {
1554
- <div class="icon-card" (click)="copySpriteClass(c.className)">
1555
- <div class="thumb">
1556
- <div class="sprite" [ngStyle]="spriteStyle(c)"></div>
1557
- </div>
1558
- <div class="meta">
1559
- <div class="name">{{c.name}}</div>
1560
- <div class="cls">{{c.className}}</div>
1561
- <nz-badge [nzStatus]="activeClassName() === c.className ? 'processing' : 'default'" />
1562
- </div>
1563
- </div>
1564
- }
1565
- }
1566
- </div>
1567
- }
1568
- </div>
1569
-
1570
- <div class="panel">
1571
- <div class="panel-header">
1572
- <div class="panel-title column">
1573
- <div class="text">\u751F\u6210\u7ED3\u679C</div>
1574
- <div class="sub-text">LESS/CSS \u6837\u5F0F\uFF0C\u5305\u542B\u96EA\u78A7\u56FE\u80CC\u666F\u5B9A\u4F4D\u7B49\u4FE1\u606F</div>
1575
- </div>
1576
- <div class="actions">
1577
- <!-- <button nz-button nzType="text" (click)="copyCss()" [disabled]="!cssText()">
1578
- <nz-icon nzType="reload"></nz-icon>
1579
- </button> -->
1580
- </div>
1581
- </div>
1582
- <div class="sprite-content">
1583
- <app-sprite-viewport [(activeClassName)]="activeClassName" [item]="activeItem()"/>
1584
- </div>
1585
- <div class="css-content">
1586
- <app-less-viewport [cssText]="cssText()"/>
1587
- </div>
1588
- </div>
1589
- </div>
1590
- }
1591
- </div>
1592
- `,
1593
- styles: [sprite_icons_panel_component_default]
1594
- })
1595
- ], SpriteIconsPanelComponent);
1596
- function escapeHtmlText(s) {
1597
- return s.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
1598
- }
1599
-
1600
- // angular:jit:style:inline:src\app\pages\sprite\components\sprite-images-panel-component.ts;CiAgICAud3JhcHsgaGVpZ2h0OjEwMCU7IG1pbi1oZWlnaHQ6MDsgb3ZlcmZsb3cteTphdXRvOyBwYWRkaW5nOjEycHg7IH0KICAgIC5oZWFkZXJ7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjsgZ2FwOjEycHg7IG1hcmdpbi1ib3R0b206MTJweDsgfQogICAgLmhlYWRlciAuY291bnR7IGZvbnQtc2l6ZToxNHB4OyBvcGFjaXR5Oi40NTsgZmxleDowIDAgYXV0bzsgd2hpdGUtc3BhY2U6bm93cmFwOyB9CiAgICAuZGlyLXN0YWNreyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjZweDsgbWFyZ2luLWJvdHRvbToxMnB4OyBmbGV4LXdyYXA6d3JhcDsgfQogICAgLmRpci1pdGVteyBjdXJzb3I6IHBvaW50ZXI7IH0KICAgIC5pbWctZ3JpZHsKICAgICAgZGlzcGxheTpncmlkOwogICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgyMjBweCwgMWZyKSk7CiAgICAgIGdhcDogMTJweDsKICAgICAgb3ZlcmZsb3c6YXV0bzsKICAgICAgcGFkZGluZy1yaWdodDogNHB4OwogICAgfQogICAgLmltZy1jYXJkewogICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4wOCk7CiAgICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgICAgIG92ZXJmbG93OmhpZGRlbjsKICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwuMDIpOwogICAgICBkaXNwbGF5OmZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsKICAgIH0KICAgIC50aHVtYnsgaGVpZ2h0OiAxNjBweDsgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwuMTgpOyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgdXNlci1zZWxlY3Q6bm9uZTt9CiAgICAudGh1bWIgaW1neyBtYXgtd2lkdGg6MTAwJTsgbWF4LWhlaWdodDoxMDAlOyBvYmplY3QtZml0OmNvbnRhaW47IGN1cnNvcjogcG9pbnRlcjsgICB9CiAgICAudGh1bWIgaW1nOmZvY3VzLC50aHVtYjpmb2N1c3tvdXRsaW5lOm5vbmV9CiAgICAudGh1bWIgLmRpcnsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjYpOyBmb250LXNpemU6NTZweDsgY3Vyc29yOnBvaW50ZXI7IH0KICAgIC5tZXRheyBwYWRkaW5nOiAxMHB4OyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47IGdhcDoxMHB4OyBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLC4wNCk7ICB9CiAgICAubmFtZXsgZm9udC1zaXplOjE0cHg7IG9wYWNpdHk6Ljg1OyBvdmVyZmxvdzpoaWRkZW47IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7IHdoaXRlLXNwYWNlOm5vd3JhcDsgfQogICAgLmZpbGUtY291bnR7IGZvbnQtc2l6ZToxNHB4OyBvcGFjaXR5Oi40NTtmbGV4OjAgMCBhdXRvOyB3aGl0ZS1zcGFjZTpub3dyYXA7IH0KICA=
1601
- var sprite_images_panel_component_default = "/* angular:styles/component:less;a4fc820090e8fad6f7382e666c8cdc1ace171077a29b1ea94c5cf76bc134eb68;D:\\ng-manager\\webapp\\src\\app\\pages\\sprite\\components\\sprite-images-panel-component.ts */\n.wrap {\n height: 100%;\n min-height: 0;\n overflow-y: auto;\n padding: 12px;\n}\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 12px;\n}\n.header .count {\n font-size: 14px;\n opacity: 0.45;\n flex: 0 0 auto;\n white-space: nowrap;\n}\n.dir-stack {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: 12px;\n flex-wrap: wrap;\n}\n.dir-item {\n cursor: pointer;\n}\n.img-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));\n gap: 12px;\n overflow: auto;\n padding-right: 4px;\n}\n.img-card {\n border: 1px solid rgba(255, 255, 255, 0.08);\n border-radius: 16px;\n overflow: hidden;\n background: rgba(255, 255, 255, 0.02);\n display: flex;\n flex-direction: column;\n}\n.thumb {\n height: 160px;\n background: rgba(0, 0, 0, 0.18);\n display: flex;\n align-items: center;\n justify-content: center;\n -webkit-user-select: none;\n user-select: none;\n}\n.thumb img {\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n cursor: pointer;\n}\n.thumb img:focus,\n.thumb:focus {\n outline: none;\n}\n.thumb .dir {\n color: rgba(255, 255, 255, 0.6);\n font-size: 56px;\n cursor: pointer;\n}\n.meta {\n padding: 10px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n background: rgba(0, 0, 0, 0.04);\n}\n.name {\n font-size: 14px;\n opacity: 0.85;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.file-count {\n font-size: 14px;\n opacity: 0.45;\n flex: 0 0 auto;\n white-space: nowrap;\n}\n/*# sourceMappingURL=sprite-images-panel-component.css.map */\n";
1602
-
1603
- // src/app/pages/sprite/components/sprite-images-panel-component.ts
1604
- var SpriteImagesPanelComponent = class SpriteImagesPanelComponent2 {
1605
- sprite = null;
1606
- api = inject(SpriteApiService);
1607
- clipboard = inject(Clipboard);
1608
- msg = inject(NzMessageService);
1609
- currentDir = signal("");
1610
- // '' root
1611
- dirStack = [{ label: "\u6839\u76EE\u5F55", dir: "" }];
1612
- // 记录当前路径,支持返回上级
1613
- cachedImages = signal([]);
1614
- imagesCount = computed(() => this.images().filter((i) => i.kind === "file").length);
1615
- keyword = signal("");
1616
- ngOnInit() {
1617
- }
1618
- ngOnChanges(changes) {
1619
- const sprite = changes["sprite"].currentValue;
1620
- if (sprite) {
1621
- this.dirStack = [{ label: "\u6839\u76EE\u5F55", dir: "" }];
1622
- this.loadImages(sprite.projectId);
1623
- }
1624
- }
1625
- images = computed(() => {
1626
- const kw = this.keyword().trim().toLowerCase();
1627
- if (!kw) {
1628
- return this.cachedImages();
1629
- } else {
1630
- return this.cachedImages().filter((i) => i.name.toLowerCase().includes(kw));
1631
- }
1632
- });
1633
- loadImages(projectId, dir = "") {
1634
- this.keyword.set("");
1635
- this.currentDir.set(dir);
1636
- this.api.browseImages(projectId, dir).subscribe((res) => {
1637
- this.cachedImages.set(res.entries);
1638
- });
1639
- }
1640
- loadDir(crumb) {
1641
- if (!this.sprite?.projectId)
1642
- return;
1643
- const idx = this.dirStack.findIndex((x) => x.dir === crumb.dir);
1644
- if (idx >= 0)
1645
- this.dirStack = this.dirStack.slice(0, idx + 1);
1646
- this.loadImages(this.sprite.projectId, crumb.dir);
1647
- }
1648
- openDir(entry) {
1649
- if (!this.sprite?.projectId)
1650
- return;
1651
- if (entry.kind !== "dir")
1652
- return;
1653
- const name = String(entry.name ?? "").trim();
1654
- if (!name)
1655
- return;
1656
- const base = this.currentDir();
1657
- const nextDir = base ? `${base}/${name}` : name;
1658
- this.dirStack = [...this.dirStack, { label: name, dir: nextDir }];
1659
- this.loadImages(this.sprite.projectId, nextDir);
1660
- }
1661
- copy(url) {
1662
- this.clipboard.copy(url);
1663
- this.msg.success("\u5DF2\u590D\u5236\u56FE\u7247 URL");
1664
- }
1665
- static propDecorators = {
1666
- sprite: [{ type: Input }]
1667
- };
1668
- };
1669
- SpriteImagesPanelComponent = __decorate([
1670
- Component({
1671
- selector: "app-sprite-images-panel",
1672
- standalone: true,
1673
- imports: [CommonModule, FormsModule, NzEmptyModule, NzButtonModule, NzIconModule, NzInputModule, NzTagModule, NzImageModule],
1674
- template: `
1675
- <div class="wrap">
1676
- <div class="header">
1677
- <input nz-input placeholder="\u641C\u7D22\u6587\u4EF6\u540D" [(ngModel)]="keyword"/>
1678
- <div class="count">
1679
- \u5171 {{imagesCount()}} \u5F20\u56FE\u7247
1680
- </div>
1681
- </div>
1682
- @if(cachedImages().length === 0){
1683
- <nz-empty nzNotFoundContent="\u6682\u65E0\u56FE\u7247\u5217\u8868\uFF08\u540E\u7EED\u53EF\u4ECE cutImageSvn \u626B\u63CF\u5E76\u6620\u5C04 URL\uFF09"></nz-empty>
1684
- } @else {
1685
- <div class="dir-stack">
1686
- @for(crumb of dirStack;let i = $index; track crumb.dir) {
1687
- <nz-tag color="blue" class="dir-item" (click)="loadDir(crumb)">
1688
- {{crumb.label}}
1689
- </nz-tag>
1690
- @if(i < dirStack.length - 1){
1691
- <nz-icon nzType="right" nzTheme="outline"></nz-icon>
1692
- }
1693
- }
1694
- </div>
1695
- <nz-image-group>
1696
- <div class="img-grid">
1697
- @for (img of images(); track img.url) {
1698
- <div class="img-card">
1699
- <div class="thumb">
1700
- @if(img.kind==='file'){
1701
- <img nz-image [nzSrc]="img.url!" [nzFallback]="'/images/placeholder.png'" [nzPlaceholder]="'/images/placeholder.png'" [alt]="img.name" loading="lazy" />
1702
- }@else {
1703
- <div class="dir" title="\u76EE\u5F55" (click)="openDir(img)">
1704
- <nz-icon nzType="folder" nzTheme="fill"></nz-icon>
1705
- </div>
1706
- }
1707
- </div>
1708
- <div class="meta">
1709
- <div class="name">{{img.name}}</div>
1710
- @if(img.kind === 'dir' && img.fileCount !== undefined){
1711
- <div class="file-count">\u5171{{img.fileCount}} \u5F20\u56FE\u7247</div>
1712
- }
1713
- <!-- <button nz-button nzSize="small" (click)="copy(img.url!)">
1714
- <nz-icon nzType="copy"></nz-icon>
1715
- \u590D\u5236URL
1716
- </button> -->
1717
- </div>
1718
- </div>
1719
- }
1720
- </div>
1721
- </nz-image-group>
1722
- }
1723
- </div>
1724
- `,
1725
- styles: [sprite_images_panel_component_default]
1726
- })
1727
- ], SpriteImagesPanelComponent);
1728
-
1729
- // src/app/pages/sprite/sprite-conf-modal.component.ts
1730
- var SpriteConfModalComponent = class SpriteConfModalComponent2 {
1731
- step = signal(0);
1732
- creating = signal(false);
1733
- draft = signal({ name: "", iconSvnPath: "", otherImagesSvnPath: "", localDir: "" });
1734
- nzModalData = inject(NZ_MODAL_DATA);
1735
- modalRef = inject(NzModalRef);
1736
- modal = inject(NzModalService);
1737
- state = inject(SpriteStateService);
1738
- notify = inject(UiNotifierService);
1739
- constructor() {
1740
- const p = this.state.project();
1741
- if (p) {
1742
- const iconsRepoUrl = p.assets?.iconsSvn?.url || "";
1743
- const sourceId = p.assets?.iconsSvn?.id || "";
1744
- const otherImageUrl = p.assets?.cutImageSvn?.url || "";
1745
- const cfg = this.nzModalData.cfg;
1746
- this.draft.update((d) => {
1747
- d.name = p.name;
1748
- d.sourceId = sourceId;
1749
- d.iconSvnPath = iconsRepoUrl;
1750
- d.otherImagesSvnPath = otherImageUrl;
1751
- d.localDir = cfg?.localDir || "";
1752
- d.cssPrefix = cfg?.prefix || "sl";
1753
- d.spriteUrl = cfg?.spriteUrl || "/assets/icons/{group}.png";
1754
- d.template = cfg?.template || '<i class="{base} {class}"></i>';
1755
- d.spriteExportDir = cfg?.spriteExportDir || "";
1756
- d.lessExportDir = cfg?.lessExportDir || "";
1757
- return d;
1758
- });
1759
- }
1760
- }
1761
- canNext() {
1762
- const s = this.step();
1763
- const d = this.draft();
1764
- if (s === 0) {
1765
- if (!d.iconSvnPath?.trim())
1766
- return false;
1767
- return true;
1768
- }
1769
- return true;
1770
- }
1771
- next() {
1772
- this.step.update((s) => s + 1);
1773
- }
1774
- prev() {
1775
- this.step.update((s) => s - 1);
1776
- }
1777
- canCreateHere() {
1778
- return this.step() === 1;
1779
- }
1780
- async create() {
1781
- if (this.creating())
1782
- return;
1783
- this.creating.set(true);
1784
- const d = this.draft();
1785
- const assets = {
1786
- iconsSvn: { kind: "svn", url: d.iconSvnPath, label: "icons", mode: "manual", localDir: d.localDir, id: d.sourceId }
1787
- };
1788
- if (d.otherImagesSvnPath) {
1789
- const cutImageId = this.state.project()?.assets?.cutImageSvn?.id || "";
1790
- assets.cutImageSvn = { kind: "svn", url: d.otherImagesSvnPath, label: "images", mode: "manual", localDir: d.localDir, id: cutImageId };
1791
- }
1792
- const nextCfg = {
1793
- enabled: true,
1794
- persistLess: true,
1795
- localDir: d.localDir,
1796
- template: d.template || '<i class="{base} {class}"></i>',
1797
- prefix: d.cssPrefix || "sl",
1798
- sourceId: d.sourceId || "",
1799
- spriteUrl: d.spriteUrl || "/assets/icons/{group}.png",
1800
- algorithm: "binary-tree",
1801
- spriteExportDir: d.spriteExportDir || "",
1802
- lessExportDir: d.lessExportDir || ""
1803
- };
1804
- const cfg = await this.state.createConfig(assets, nextCfg);
1805
- this.creating.set(false);
1806
- this.notify.success("\u914D\u7F6E\u5DF2\u4FDD\u5B58");
1807
- this.modalRef.close({ ok: true, cfg });
1808
- }
1809
- cancel() {
1810
- this.modalRef.close();
1811
- }
1812
- static ctorParameters = () => [];
1813
- };
1814
- SpriteConfModalComponent = __decorate([
1815
- Component({
1816
- selector: "app-sprite-conf-modal",
1817
- imports: [
1818
- CommonModule,
1819
- FormsModule,
1820
- NzModalModule,
1821
- NzCardModule,
1822
- NzGridModule,
1823
- NzStepsModule,
1824
- NzButtonModule,
1825
- NzInputModule,
1826
- NzIconModule,
1827
- NzSpinModule,
1828
- StepBasicComponent,
1829
- StepAdvanceComponent,
1830
- StepSummaryAsideComponent
1831
- ],
1832
- template: `
1833
- <div nz-row nzJustify="center" >
1834
- <div nz-col nzSpan="16">
1835
- <nz-steps [nzCurrent]="step()">
1836
- <nz-step nzTitle="\u8BE6\u60C5"></nz-step>
1837
- <nz-step nzTitle="\u914D\u7F6E"></nz-step>
1838
- </nz-steps>
1839
- </div>
1840
- </div>
1841
- <div nz-row nzJustify="start" >
1842
- <div nz-col nzSpan="24">
1843
- <nz-spin [nzSpinning]="creating()">
1844
- <div class="content">
1845
- <div class="main">
1846
- @switch(step()){ @case(0){
1847
- <app-step-basic [draft]="draft()" />
1848
- } @case(1){
1849
- <app-step-advance [draft]="draft()" />
1850
- }
1851
- }
1852
- <div class="actions">
1853
- @if(step()===0){
1854
- <button nz-button (click)="cancel()">
1855
- <nz-icon nzType="close" nzTheme="outline" />
1856
- \u53D6\u6D88
1857
- </button>
1858
- }
1859
- @if(step() > 0){
1860
- <button nz-button (click)="prev()">
1861
- <nz-icon nzType="arrow-left" nzTheme="outline" />
1862
- \u4E0A\u4E00\u6B65
1863
- </button>
1864
- }
1865
- @if(canCreateHere()){
1866
- <button nz-button nzType="primary" (click)="create()" >
1867
- <nz-icon nzType="check" nzTheme="outline" />
1868
- \u786E\u5B9A
1869
- </button>
1870
- } @else {
1871
- <button nz-button nzType="primary" (click)="next()" [disabled]="!canNext() ">
1872
- \u4E0B\u4E00\u6B65
1873
- <nz-icon nzType="arrow-right" nzTheme="outline" />
1874
- </button>
1875
- }
1876
- </div>
1877
- </div>
1878
- <div class="aside">
1879
- <app-step-summary-aside [draft]="draft()" />
1880
- </div>
1881
- </div>
1882
- </nz-spin>
1883
- </div>
1884
- </div>
1885
- `,
1886
- styles: [sprite_conf_modal_component_default]
1887
- })
1888
- ], SpriteConfModalComponent);
1889
-
1890
- // angular:jit:style:inline:src\app\pages\sprite\sprite-result-tabs.component.ts;CiAgICA6aG9zdHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgbnotdGFic3sKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgJjo6bmctZGVlcCAuYW50LXRhYnMtY29udGVudC1ob2xkZXJ7CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICAuYW50LXRhYnMtY29udGVudHsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICAuYW50LXRhYnMtdGFicGFuZXsKICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIA==
1891
- var sprite_result_tabs_component_default = "/* angular:styles/component:less;401419e42ea612974332f37ae64f79232bb6823bf87868ff3fbbd15fae67b438;D:\\ng-manager\\webapp\\src\\app\\pages\\sprite\\sprite-result-tabs.component.ts */\n:host {\n display: block;\n height: 100%;\n}\n:host nz-tabs {\n height: 100%;\n}\n:host nz-tabs::ng-deep .ant-tabs-content-holder {\n height: 100%;\n}\n:host nz-tabs::ng-deep .ant-tabs-content-holder .ant-tabs-content {\n height: 100%;\n}\n:host nz-tabs::ng-deep .ant-tabs-content-holder .ant-tabs-content .ant-tabs-tabpane {\n height: 100%;\n}\n/*# sourceMappingURL=sprite-result-tabs.component.css.map */\n";
1892
-
1893
- // src/app/pages/sprite/sprite-result-tabs.component.ts
1894
- var SpriteResultTabsComponent = class SpriteResultTabsComponent2 {
1895
- sprite = input(null);
1896
- tabIndex = 0;
1897
- static propDecorators = {
1898
- sprite: [{ type: Input, args: [{ isSignal: true, alias: "sprite", required: false, transform: void 0 }] }]
1899
- };
1900
- };
1901
- SpriteResultTabsComponent = __decorate([
1902
- Component({
1903
- selector: "app-sprite-result-tabs",
1904
- imports: [
1905
- CommonModule,
1906
- NzTabsModule,
1907
- NzEmptyModule,
1908
- NzSelectModule,
1909
- NzTagModule,
1910
- SpriteImagesPanelComponent,
1911
- SpriteIconsPanelComponent
1912
- ],
1913
- template: `
1914
- <!-- @if(!gen){
1915
- <nz-empty nzNotFoundContent="\u8BF7\u5148\u751F\u6210\u96EA\u78A7\u56FE"></nz-empty>
1916
- } @else { -->
1917
- <nz-tabs [(nzSelectedIndex)]="tabIndex">
1918
- <nz-tab nzTitle="\u56FE\u6807">
1919
- <ng-template nz-tab>
1920
- <app-sprite-icons-panel
1921
- [sprite]="sprite()"
1922
- />
1923
- </ng-template>
1924
- </nz-tab>
1925
-
1926
- <nz-tab nzTitle="\u56FE\u7247">
1927
- <ng-template nz-tab>
1928
- <app-sprite-images-panel [sprite]="sprite()"
1929
- />
1930
- </ng-template>
1931
- </nz-tab>
1932
- </nz-tabs>
1933
- <!-- } -->
1934
- `,
1935
- styles: [sprite_result_tabs_component_default]
1936
- })
1937
- ], SpriteResultTabsComponent);
1938
-
1939
- // src/app/pages/sprite/sprite.component.ts
1940
- var import_dayjs = __toESM(require_dayjs_min());
1941
- var SpriteComponent = class SpriteComponent2 {
1942
- isDrawerOpen = false;
1943
- loading = signal(false);
1944
- cfg = signal(null);
1945
- lastSyncAt = signal("N/A");
1946
- sub = new Subscription();
1947
- state = inject(SpriteStateService);
1948
- modal = inject(NzModalService);
1949
- svnStream = inject(SpriteStreamService);
1950
- term;
1951
- sprite = signal(null);
1952
- async ngOnInit() {
1953
- await this.loadConfig();
1954
- if (this.isEmpty())
1955
- return;
1956
- const projectId = this.state.project()?.id;
1957
- if (!projectId)
1958
- return;
1959
- const runtimes = await this.state.getSvnRuntimes();
1960
- if (runtimes?.length) {
1961
- runtimes.forEach((runtime) => {
1962
- const lastSyncAt = runtime.lastSyncAt ? (0, import_dayjs.default)(runtime.lastSyncAt).format("YYYY-MM-DD HH:mm:ss") : "N/A";
1963
- const lastStatus = runtime.lastStderr ? "\u5931\u8D25" : "\u6210\u529F";
1964
- const desiredUrl = runtime.desiredUrl ? `${runtime.desiredUrl}` : "No desired URL";
1965
- this.term?.writeln(`[\u66F4\u65B0\u65F6\u95F4]: ${lastSyncAt}`);
1966
- this.term?.writeln(`[\u66F4\u65B0\u72B6\u6001]: ${lastStatus}`);
1967
- this.term?.writeln(`[SVN \u8DEF\u5F84]: ${desiredUrl}`);
1968
- this.term?.writeln(`-----------------------------`);
1969
- if (runtime.sourceId === this.cfg()?.sourceId && runtime.lastSyncAt) {
1970
- this.lastSyncAt.set((0, import_dayjs.default)(runtime.lastSyncAt).format("YYYY-MM-DD HH:mm:ss"));
1971
- }
1972
- });
1973
- }
1974
- const sprite = await this.state.getSprites();
1975
- this.sprite.set(sprite);
1976
- this.sub.add(this.svnStream.watchProject(projectId, 1e3));
1977
- this.sub.add(this.svnStream.output$(projectId).subscribe((chunk) => {
1978
- if (this.term) {
1979
- this.term.write(chunk.text);
1980
- }
1981
- }));
1982
- }
1983
- ngOnDestroy() {
1984
- if (this.term) {
1985
- this.term.clear();
1986
- }
1987
- this.sub.unsubscribe();
1988
- }
1989
- isEmpty = computed(() => {
1990
- const cfg = this.cfg();
1991
- const p = this.state.project();
1992
- return cfg && p?.assets?.iconsSvn || cfg?.sourceId ? false : true;
1993
- });
1994
- async loadConfig() {
1995
- try {
1996
- this.loading.set(true);
1997
- const cfg = await this.state.loadConfig();
1998
- this.cfg.set(cfg);
1999
- this.loading.set(false);
2000
- } catch (e) {
2001
- this.loading.set(false);
2002
- }
2003
- }
2004
- async generate() {
2005
- this.loading.set(true);
2006
- const sprite = await this.state.generate();
2007
- this.sprite.set(sprite);
2008
- this.loading.set(false);
2009
- }
2010
- async checkout() {
2011
- this.loading.set(true);
2012
- const results = await this.state.checkout();
2013
- this.loading.set(false);
2014
- }
2015
- async streamCheckout() {
2016
- this.loading.set(true);
2017
- this.isDrawerOpen = true;
2018
- await this.state.streamCheckout();
2019
- this.loading.set(false);
2020
- }
2021
- openSettingModal() {
2022
- const modal = this.modal.create({
2023
- nzTitle: "\u96EA\u78A7\u56FE\u914D\u7F6E",
2024
- nzFooter: null,
2025
- nzKeyboard: false,
2026
- nzMaskClosable: false,
2027
- nzClosable: true,
2028
- nzContent: SpriteConfModalComponent,
2029
- nzData: {
2030
- cfg: this.cfg()
2031
- },
2032
- nzWidth: "1020px",
2033
- nzCentered: true
2034
- });
2035
- const instance = modal.getContentComponent();
2036
- modal.afterClose.subscribe((data) => {
2037
- if (data?.ok) {
2038
- this.loadConfig();
2039
- }
2040
- });
2041
- }
2042
- static propDecorators = {
2043
- term: [{ type: ViewChild, args: [TerminalViewComponent] }]
2044
- };
2045
- };
2046
- SpriteComponent = __decorate([
2047
- Component({
2048
- selector: "app-sprite",
2049
- imports: [
2050
- CommonModule,
2051
- FormsModule,
2052
- NzGridModule,
2053
- NzButtonModule,
2054
- NzInputModule,
2055
- NzIconModule,
2056
- NzTooltipModule,
2057
- NzTagModule,
2058
- NzSpinModule,
2059
- NzDividerModule,
2060
- NzPopconfirmModule,
2061
- NzPopoverModule,
2062
- PageLayoutComponent,
2063
- NzEmptyModule,
2064
- NzDrawerModule,
2065
- TerminalViewComponent,
2066
- SpriteResultTabsComponent
2067
- ],
2068
- template: `
2069
- <app-page-layout [title]="'\u96EA\u78A7\u56FE'" [loading]="loading()" [isFullscreen]="true" [isOverflowYAuto]="false">
2070
- <ng-container ngProjectAs="actions">
2071
- @if(!isEmpty()){
2072
- <button nz-button nzType="primary" (click)="generate()" nz-tooltip nzTooltipTitle="\u751F\u6210\u96EA\u78A7\u56FE">
2073
- <nz-icon nzType="play-circle" nzTheme="outline"></nz-icon>
2074
- <span>\u751F\u6210\u96EA\u78A7\u56FE</span>
2075
- </button>
2076
- <button nz-button nzType="primary" (click)="streamCheckout()" nz-tooltip nzTooltipTitle="\u4ECEsvn\u66F4\u65B0\u8D44\u6E90">
2077
- <nz-icon nzType="sync" nzTheme="outline"></nz-icon>
2078
- <span>\u540C\u6B65 {{lastSyncAt()}}</span>
2079
- </button>
2080
- }
2081
- <button nz-button nzType="text" (click)="isDrawerOpen = !isDrawerOpen" nz-tooltip nzTooltipTitle="\u67E5\u770B\u65E5\u5FD7">
2082
- <nz-icon nzType="desktop" nzTheme="outline"></nz-icon>
2083
- </button>
2084
- <button nz-button nzType="text" (click)="openSettingModal()" nz-tooltip nzTooltipTitle="\u914D\u7F6E\u96EA\u78A7\u56FE">
2085
- <nz-icon nzType="setting" nzTheme="outline"></nz-icon>
2086
- </button>
2087
- </ng-container>
2088
- <div class="page">
2089
- <div class="content" [class.empty]="isEmpty()">
2090
- @if(isEmpty()){
2091
- <nz-empty
2092
- [nzNotFoundContent]="contentTpl"
2093
- [nzNotFoundFooter]="footerTpl">
2094
- </nz-empty>
2095
- }@else{
2096
- <app-sprite-result-tabs [sprite]="sprite()"></app-sprite-result-tabs>
2097
- }
2098
-
2099
- </div>
2100
- <div class="aside" [class.open]="isDrawerOpen">
2101
- <app-terminal-view [style.height.%]="100"></app-terminal-view>
2102
- </div>
2103
- </div>
2104
- </app-page-layout>
2105
- <ng-template #contentTpl>
2106
- <span>\u6682\u65E0\u96EA\u78A7\u56FE\u914D\u7F6E\uFF0C\u70B9\u51FB\u53F3\u4E0A\u89D2\u201C<nz-icon nzType="setting" nzTheme="outline"></nz-icon>\u201D \u65B0\u589E\u914D\u7F6E</span>
2107
- </ng-template>
2108
- <ng-template #footerTpl>
2109
- <button nz-button nzType="primary" (click)="openSettingModal()">\u7ACB\u5373\u65B0\u589E</button>
2110
- </ng-template>
2111
- `,
2112
- styles: [sprite_component_default]
2113
- })
2114
- ], SpriteComponent);
2115
-
2116
- // src/app/pages/sprite/sprite-routing.module.ts
2117
- var routes = [
2118
- {
2119
- path: "",
2120
- component: SpriteComponent
2121
- }
2122
- ];
2123
- var SpriteRoutingModule = class SpriteRoutingModule2 {
2124
- };
2125
- SpriteRoutingModule = __decorate([
2126
- NgModule({
2127
- imports: [RouterModule.forChild(routes)],
2128
- exports: [RouterModule]
2129
- })
2130
- ], SpriteRoutingModule);
2131
-
2132
- // src/app/pages/sprite/sprite.module.ts
2133
- var SpriteModule = class SpriteModule2 {
2134
- };
2135
- SpriteModule = __decorate([
2136
- NgModule({
2137
- declarations: [],
2138
- imports: [
2139
- CommonModule,
2140
- SpriteRoutingModule
2141
- ]
2142
- })
2143
- ], SpriteModule);
2144
- export {
2145
- SpriteModule
2146
- };
2147
- //# sourceMappingURL=chunk-UAN42EUZ.js.map