@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.
- package/lib/plugins/error-handler.plugin.js +5 -0
- package/lib/routes/api-client/hub-token.routes.js +22 -0
- package/lib/routes/index.js +2 -0
- package/lib/routes/node-version.routes.d.ts +2 -0
- package/lib/routes/node-version.routes.js +56 -0
- package/lib/routes/project.routes.js +5 -0
- package/lib/routes/sprite-browse.routes.js +19 -5
- package/lib/routes/sprite.routes.js +17 -11
- package/lib/routes/static-files.routes.js +16 -0
- package/lib/routes/task.routes.js +7 -0
- package/package.json +3 -3
- package/www/3rdpartylicenses.txt +14 -66
- package/www/browser/chunk-2BZRE4G7.js +1 -0
- package/www/browser/chunk-2X3MRS27.js +1 -0
- package/www/browser/chunk-4KETC6EB.js +1 -0
- package/www/browser/chunk-5T5KA5PG.js +1 -0
- package/www/browser/chunk-6CGHNKJI.js +1 -0
- package/www/browser/chunk-76TVIB33.js +63 -0
- package/www/browser/chunk-7J24TP36.js +1 -0
- package/www/browser/chunk-ACAZUX6C.js +1 -0
- package/www/browser/chunk-B6MBYCXI.js +1 -0
- package/www/browser/chunk-BYEU6KGP.js +2 -0
- package/www/browser/chunk-CZ5AZ3VW.js +1 -0
- package/www/browser/chunk-DW7F5PEA.js +1 -0
- package/www/browser/chunk-DXF7BVK5.js +1 -0
- package/www/browser/chunk-EEVPZGEY.js +1 -0
- package/www/browser/chunk-G2W3B7TJ.js +1 -0
- package/www/browser/chunk-GDWS2L66.js +1 -0
- package/www/browser/chunk-HFZLJHYR.js +1 -0
- package/www/browser/chunk-HGONFYP6.js +1 -0
- package/www/browser/chunk-HHBPULJW.js +2 -0
- package/www/browser/chunk-HRXCR3IN.js +1 -0
- package/www/browser/chunk-INL2PELS.js +1 -0
- package/www/browser/chunk-JHMEKUZ5.js +1 -0
- package/www/browser/chunk-JU3TEDBV.js +37 -0
- package/www/browser/chunk-JZULA5JV.js +1 -0
- package/www/browser/chunk-KVFR7GFV.js +20 -0
- package/www/browser/chunk-L5D75AMV.js +1 -0
- package/www/browser/chunk-L7TMCSHV.js +1 -0
- package/www/browser/chunk-LQ5OXSW7.js +3 -0
- package/www/browser/chunk-MVQTKINJ.js +1 -0
- package/www/browser/chunk-N4LRZJBP.js +1 -0
- package/www/browser/chunk-O2EYEF7J.js +1 -0
- package/www/browser/chunk-OMDHJIUB.js +1 -0
- package/www/browser/chunk-OWUAAOHW.js +2 -0
- package/www/browser/chunk-PIK5YPIB.js +1 -0
- package/www/browser/chunk-RHLQRQDK.js +9 -0
- package/www/browser/chunk-RW2JPJV7.js +1 -0
- package/www/browser/chunk-S3SJ4VVM.js +11 -0
- package/www/browser/chunk-SIVPP74B.js +0 -0
- package/www/browser/chunk-SPRWNZHF.js +15 -0
- package/www/browser/chunk-SQQNR223.js +1 -0
- package/www/browser/chunk-SVQWPHF5.js +1 -0
- package/www/browser/chunk-SYCNSLAW.js +4 -0
- package/www/browser/chunk-T3KK7ZXB.js +2 -0
- package/www/browser/chunk-TMX5TTV3.js +1 -0
- package/www/browser/chunk-UFY3FLDK.js +1 -0
- package/www/browser/chunk-UJOHBN2Y.js +1 -0
- package/www/browser/chunk-UQGCUFNM.js +1 -0
- package/www/browser/chunk-UXXWRMM6.js +1 -0
- package/www/browser/chunk-UZRJGJTD.js +2 -0
- package/www/browser/chunk-WD4IAQR3.js +1 -0
- package/www/browser/chunk-WF2QTF5L.js +1 -0
- package/www/browser/chunk-WI67LAOV.js +4 -0
- package/www/browser/chunk-WNCM6QKB.js +1 -0
- package/www/browser/chunk-XJ5KZQNN.js +1 -0
- package/www/browser/chunk-YETDFSQE.js +1 -0
- package/www/browser/chunk-YMTC5GZK.js +1 -0
- package/www/browser/chunk-YVZHJ76K.js +1 -0
- package/www/browser/chunk-ZNTJRLVH.js +1 -0
- package/www/browser/dark.css +1 -30433
- package/www/browser/default.css +1 -30149
- package/www/browser/index.html +3 -3
- package/www/browser/main-6LN5C22E.js +34 -0
- package/www/browser/scripts-U25HCVEI.js +6 -0
- package/www/browser/styles-ROAHD7MY.css +1 -0
- package/www/browser/add-widget-drawer.component.css.map +0 -7
- package/www/browser/advanced-editor.component.css.map +0 -7
- package/www/browser/api-client.component.css.map +0 -7
- package/www/browser/api-history-drawer.component.css.map +0 -7
- package/www/browser/app.css.map +0 -7
- package/www/browser/attachment-viewer.component.css.map +0 -7
- package/www/browser/auth-editor.component.css.map +0 -7
- package/www/browser/body-editor.component.css.map +0 -7
- package/www/browser/chunk-2YSUXBGC.js +0 -627
- package/www/browser/chunk-2YSUXBGC.js.map +0 -1
- package/www/browser/chunk-3G2GEOPV.js +0 -456
- package/www/browser/chunk-3G2GEOPV.js.map +0 -1
- package/www/browser/chunk-3L72DF3R.js +0 -1683
- package/www/browser/chunk-3L72DF3R.js.map +0 -1
- package/www/browser/chunk-3MCIETCQ.js +0 -8279
- package/www/browser/chunk-3MCIETCQ.js.map +0 -1
- package/www/browser/chunk-665WC4RU.js +0 -5383
- package/www/browser/chunk-665WC4RU.js.map +0 -1
- package/www/browser/chunk-6QMSEZPT.js +0 -10044
- package/www/browser/chunk-6QMSEZPT.js.map +0 -1
- package/www/browser/chunk-6TBQERYX.js +0 -280
- package/www/browser/chunk-6TBQERYX.js.map +0 -1
- package/www/browser/chunk-6UW4MRJZ.js +0 -43
- package/www/browser/chunk-6UW4MRJZ.js.map +0 -7
- package/www/browser/chunk-6XUMIL3W.js +0 -5495
- package/www/browser/chunk-6XUMIL3W.js.map +0 -1
- package/www/browser/chunk-724YOJI3.js +0 -903
- package/www/browser/chunk-724YOJI3.js.map +0 -1
- package/www/browser/chunk-766T7YES.js +0 -437
- package/www/browser/chunk-766T7YES.js.map +0 -1
- package/www/browser/chunk-7FC7DN65.js +0 -728
- package/www/browser/chunk-7FC7DN65.js.map +0 -1
- package/www/browser/chunk-APGQRYWX.js +0 -156
- package/www/browser/chunk-APGQRYWX.js.map +0 -7
- package/www/browser/chunk-AQHSGTHS.js +0 -1960
- package/www/browser/chunk-AQHSGTHS.js.map +0 -1
- package/www/browser/chunk-CTOEAJQK.js +0 -40
- package/www/browser/chunk-CTOEAJQK.js.map +0 -7
- package/www/browser/chunk-DEGQJKKZ.js +0 -409
- package/www/browser/chunk-DEGQJKKZ.js.map +0 -1
- package/www/browser/chunk-DIJX2663.js +0 -1166
- package/www/browser/chunk-DIJX2663.js.map +0 -1
- package/www/browser/chunk-E4XD4GLT.js +0 -427
- package/www/browser/chunk-E4XD4GLT.js.map +0 -1
- package/www/browser/chunk-EQOY6A3M.js +0 -212
- package/www/browser/chunk-EQOY6A3M.js.map +0 -1
- package/www/browser/chunk-ETTBRXVA.js +0 -2643
- package/www/browser/chunk-ETTBRXVA.js.map +0 -1
- package/www/browser/chunk-FLSUSPBD.js +0 -5569
- package/www/browser/chunk-FLSUSPBD.js.map +0 -1
- package/www/browser/chunk-FZNHBEAZ.js +0 -102
- package/www/browser/chunk-FZNHBEAZ.js.map +0 -1
- package/www/browser/chunk-GJC7CZIJ.js +0 -361
- package/www/browser/chunk-GJC7CZIJ.js.map +0 -7
- package/www/browser/chunk-GMCNMOTD.js +0 -844
- package/www/browser/chunk-GMCNMOTD.js.map +0 -7
- package/www/browser/chunk-H43HGCRW.js +0 -198
- package/www/browser/chunk-H43HGCRW.js.map +0 -7
- package/www/browser/chunk-J447GBHM.js +0 -160
- package/www/browser/chunk-J447GBHM.js.map +0 -1
- package/www/browser/chunk-JN3VOWP7.js +0 -384
- package/www/browser/chunk-JN3VOWP7.js.map +0 -1
- package/www/browser/chunk-KSHAGY2M.js +0 -399
- package/www/browser/chunk-KSHAGY2M.js.map +0 -7
- package/www/browser/chunk-KV72AKOD.js +0 -59
- package/www/browser/chunk-KV72AKOD.js.map +0 -7
- package/www/browser/chunk-LAVMY2SJ.js +0 -26
- package/www/browser/chunk-LAVMY2SJ.js.map +0 -7
- package/www/browser/chunk-LLRVGHG5.js +0 -73
- package/www/browser/chunk-LLRVGHG5.js.map +0 -7
- package/www/browser/chunk-LPME4AJ3.js +0 -196
- package/www/browser/chunk-LPME4AJ3.js.map +0 -1
- package/www/browser/chunk-LVPSURVU.js +0 -4615
- package/www/browser/chunk-LVPSURVU.js.map +0 -1
- package/www/browser/chunk-MMPO7QLO.js +0 -4146
- package/www/browser/chunk-MMPO7QLO.js.map +0 -7
- package/www/browser/chunk-O7LB6VFM.js +0 -1953
- package/www/browser/chunk-O7LB6VFM.js.map +0 -1
- package/www/browser/chunk-P5CWA4FO.js +0 -685
- package/www/browser/chunk-P5CWA4FO.js.map +0 -1
- package/www/browser/chunk-RBWIWNTL.js +0 -203
- package/www/browser/chunk-RBWIWNTL.js.map +0 -7
- package/www/browser/chunk-RUXJCM3V.js +0 -26199
- package/www/browser/chunk-RUXJCM3V.js.map +0 -1
- package/www/browser/chunk-S77VVYUZ.js +0 -168
- package/www/browser/chunk-S77VVYUZ.js.map +0 -1
- package/www/browser/chunk-SCXPYFOB.js +0 -4316
- package/www/browser/chunk-SCXPYFOB.js.map +0 -1
- package/www/browser/chunk-SS73S33S.js +0 -471
- package/www/browser/chunk-SS73S33S.js.map +0 -7
- package/www/browser/chunk-T6UAOWNP.js +0 -600
- package/www/browser/chunk-T6UAOWNP.js.map +0 -1
- package/www/browser/chunk-TEW4MY4J.js +0 -148
- package/www/browser/chunk-TEW4MY4J.js.map +0 -7
- package/www/browser/chunk-TVORF3SF.js +0 -82
- package/www/browser/chunk-TVORF3SF.js.map +0 -7
- package/www/browser/chunk-UAN42EUZ.js +0 -2147
- package/www/browser/chunk-UAN42EUZ.js.map +0 -1
- package/www/browser/chunk-ULOHDK7Y.js +0 -1
- package/www/browser/chunk-ULOHDK7Y.js.map +0 -7
- package/www/browser/chunk-UYJ3FVRV.js +0 -3978
- package/www/browser/chunk-UYJ3FVRV.js.map +0 -1
- package/www/browser/chunk-VXHZMSDM.js +0 -5509
- package/www/browser/chunk-VXHZMSDM.js.map +0 -1
- package/www/browser/chunk-VYNQPZQO.js +0 -281
- package/www/browser/chunk-VYNQPZQO.js.map +0 -1
- package/www/browser/chunk-W3J23PZI.js +0 -9213
- package/www/browser/chunk-W3J23PZI.js.map +0 -1
- package/www/browser/chunk-W5HGHCQT.js +0 -1642
- package/www/browser/chunk-W5HGHCQT.js.map +0 -7
- package/www/browser/chunk-XF5H7E4L.js +0 -4723
- package/www/browser/chunk-XF5H7E4L.js.map +0 -1
- package/www/browser/chunk-XNFNEBMY.js +0 -398
- package/www/browser/chunk-XNFNEBMY.js.map +0 -7
- package/www/browser/chunk-XQY5SPGI.js +0 -30811
- package/www/browser/chunk-XQY5SPGI.js.map +0 -1
- package/www/browser/chunk-Y7JBZHNK.js +0 -514
- package/www/browser/chunk-Y7JBZHNK.js.map +0 -1
- package/www/browser/chunk-YWHRP4X3.js +0 -406
- package/www/browser/chunk-YWHRP4X3.js.map +0 -1
- package/www/browser/chunk-Z7FJIV62.js +0 -95
- package/www/browser/chunk-Z7FJIV62.js.map +0 -7
- package/www/browser/chunk-ZBZHXS46.js +0 -1674
- package/www/browser/chunk-ZBZHXS46.js.map +0 -1
- package/www/browser/chunk-ZZA5NVAI.js +0 -735
- package/www/browser/chunk-ZZA5NVAI.js.map +0 -1
- package/www/browser/collection-modal.component.css.map +0 -7
- package/www/browser/collection-tree-item.component.css.map +0 -7
- package/www/browser/collection-tree.component.css.map +0 -7
- package/www/browser/config-change-bar-component.css.map +0 -7
- package/www/browser/config-item-component.css.map +0 -7
- package/www/browser/config-nav-component.css.map +0 -7
- package/www/browser/config-section-component.css.map +0 -7
- package/www/browser/create-summary-aside.component.css.map +0 -7
- package/www/browser/curl-actions.component.css.map +0 -7
- package/www/browser/dark.css.map +0 -7
- package/www/browser/dashboard-canvas.component.css.map +0 -7
- package/www/browser/dashboard.component.css.map +0 -7
- package/www/browser/default.css.map +0 -7
- package/www/browser/detail-item-card.component.css.map +0 -7
- package/www/browser/ellipsis-text.component.css.map +0 -7
- package/www/browser/env-modal.component.css.map +0 -7
- package/www/browser/env-picker.component.css.map +0 -7
- package/www/browser/feedback.component.css.map +0 -7
- package/www/browser/fs-explorer.component.css.map +0 -7
- package/www/browser/git-import-modal.component.css.map +0 -7
- package/www/browser/hub-v2-personal-token-modal.component.css.map +0 -7
- package/www/browser/issue-action-area.component.css.map +0 -7
- package/www/browser/issue-add-participants-dialog.component.css.map +0 -7
- package/www/browser/issue-assign-dialog.component.css.map +0 -7
- package/www/browser/issue-attachment-area.component.css.map +0 -7
- package/www/browser/issue-base-info-area.component.css.map +0 -7
- package/www/browser/issue-branches.component.css.map +0 -7
- package/www/browser/issue-close-dialog.component.css.map +0 -7
- package/www/browser/issue-collaborators-panel.component.css.map +0 -7
- package/www/browser/issue-comment-editor.component.css.map +0 -7
- package/www/browser/issue-create-branch-dialog.component.css.map +0 -7
- package/www/browser/issue-description-area.component.css.map +0 -7
- package/www/browser/issue-detail.component.css.map +0 -7
- package/www/browser/issue-resolve-dialog.component.css.map +0 -7
- package/www/browser/issue-start-own-branch-dialog.component.css.map +0 -7
- package/www/browser/issues-list-table.component.css.map +0 -7
- package/www/browser/issues.component.css.map +0 -7
- package/www/browser/kill-port-widget.component.css.map +0 -7
- package/www/browser/kv-table.component.css.map +0 -7
- package/www/browser/layout-footer.component.css.map +0 -7
- package/www/browser/layout-header.component.css.map +0 -7
- package/www/browser/layout-menu.component.css.map +0 -7
- package/www/browser/layout-project-nav.component.css.map +0 -7
- package/www/browser/layout-sidebar.component.css.map +0 -7
- package/www/browser/layout.component.css.map +0 -7
- package/www/browser/less-viewport-component.css.map +0 -7
- package/www/browser/main.js +0 -1872
- package/www/browser/main.js.map +0 -1
- package/www/browser/markdown-viewer.component.css.map +0 -7
- package/www/browser/news-feed-widget.component.css.map +0 -7
- package/www/browser/ng-devtool.component.css.map +0 -7
- package/www/browser/nginx-config-editor.component.css.map +0 -7
- package/www/browser/nginx-log-viewer.component.css.map +0 -7
- package/www/browser/nginx-secondary-logs-tab.component.css.map +0 -7
- package/www/browser/nginx-secondary-perf-tab.component.css.map +0 -7
- package/www/browser/nginx-secondary-settings-tab.component.css.map +0 -7
- package/www/browser/nginx-secondary-ssl-tab.component.css.map +0 -7
- package/www/browser/nginx-secondary-test-tab.component.css.map +0 -7
- package/www/browser/nginx-secondary-traffic-tab.component.css.map +0 -7
- package/www/browser/nginx-secondary-upstream-tab.component.css.map +0 -7
- package/www/browser/nginx-section-card.component.css.map +0 -7
- package/www/browser/nginx-server-drawer.component.css.map +0 -7
- package/www/browser/nginx-server-list.component.css.map +0 -7
- package/www/browser/nginx-stat-card.component.css.map +0 -7
- package/www/browser/nginx.component.css.map +0 -7
- package/www/browser/page-layout.component.css.map +0 -7
- package/www/browser/pick-workspace-modal.component.css.map +0 -7
- package/www/browser/polyfills.js +0 -26584
- package/www/browser/polyfills.js.map +0 -7
- package/www/browser/project-conf.component.css.map +0 -7
- package/www/browser/project-create-modal.component.css.map +0 -7
- package/www/browser/project-create.component.css.map +0 -7
- package/www/browser/project-deps.component.css.map +0 -7
- package/www/browser/project-edit-modal.component.css.map +0 -7
- package/www/browser/project-import.component.css.map +0 -7
- package/www/browser/project-item-popover.component.css.map +0 -7
- package/www/browser/project-item.component.css.map +0 -7
- package/www/browser/project-list.component.css.map +0 -7
- package/www/browser/projects.component.css.map +0 -7
- package/www/browser/quick-task-widget.component.css.map +0 -7
- package/www/browser/rd-action-area.component.css.map +0 -7
- package/www/browser/rd-advance-stage-dialog.component.css.map +0 -7
- package/www/browser/rd-block-dialog.component.css.map +0 -7
- package/www/browser/rd-create-dialog.component.css.map +0 -7
- package/www/browser/rd-detail.component.css.map +0 -7
- package/www/browser/rd-item-card.component.css.map +0 -7
- package/www/browser/rd-list-board.component.css.map +0 -7
- package/www/browser/rd-list-table.component.css.map +0 -7
- package/www/browser/rd.component.css.map +0 -7
- package/www/browser/request-collections.component.css.map +0 -7
- package/www/browser/request-editor.component.css.map +0 -7
- package/www/browser/request-list-item.component.css.map +0 -7
- package/www/browser/request-list.component.css.map +0 -7
- package/www/browser/request-tabs-bar.component.css.map +0 -7
- package/www/browser/request-tabs.component.css.map +0 -7
- package/www/browser/request-urlbar.component.css.map +0 -7
- package/www/browser/response-viewer.component.css.map +0 -7
- package/www/browser/scripts.js +0 -245
- package/www/browser/scripts.js.map +0 -7
- package/www/browser/setting.component.css.map +0 -7
- package/www/browser/sprite-conf-modal.component.css.map +0 -7
- package/www/browser/sprite-icons-panel-component.css.map +0 -7
- package/www/browser/sprite-images-panel-component.css.map +0 -7
- package/www/browser/sprite-result-tabs.component.css.map +0 -7
- package/www/browser/sprite-viewport-component.css.map +0 -7
- package/www/browser/sprite.component.css.map +0 -7
- package/www/browser/step-advance.component.css.map +0 -7
- package/www/browser/step-basic.component.css.map +0 -7
- package/www/browser/step-config.component.css.map +0 -7
- package/www/browser/step-features.component.css.map +0 -7
- package/www/browser/step-preset.component.css.map +0 -7
- package/www/browser/step-summary-aside.component.css.map +0 -7
- package/www/browser/styles.css +0 -258
- package/www/browser/styles.css.map +0 -7
- package/www/browser/system-log.component.css.map +0 -7
- package/www/browser/task-actions.component.css.map +0 -7
- package/www/browser/task-console.component.css.map +0 -7
- package/www/browser/task-header.component.css.map +0 -7
- package/www/browser/task-list.component.css.map +0 -7
- package/www/browser/tasks.component.css.map +0 -7
- package/www/browser/terminal-view.component.css.map +0 -7
- package/www/browser/welcome-widget.component.css.map +0 -7
- package/www/browser/widget-base.component.css.map +0 -7
- package/www/browser/widget-host.component.css.map +0 -7
package/www/browser/main.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["node_modules/@angular/common/locales/zh.js","node_modules/@angular/platform-browser/fesm2022/animations/async.mjs","src/app/theme.service.ts","src/app/app-initializer.service.ts","src/app/app.routes.ts","src/app/app.config.ts","angular:jit:style:inline:src\\app\\app.ts;Omhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICB9","src/app/icons/project-icons.ts","src/app/icons/project-icon-registry.ts","angular:jit:template:src\\app\\layout\\layout.component.html","angular:jit:style:src\\app\\layout\\layout.component.less","node_modules/ng-zorro-antd/fesm2022/ng-zorro-antd-breadcrumb.mjs","angular:jit:style:inline:src\\app\\layout\\footer\\layout-footer.component.ts;CiAgICAgIG56LWZvb3RlciB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgYXBwLXN5c3RlbS1sb2cgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICA=","angular:jit:template:src\\app\\layout\\footer\\system-log\\system-log.component.html","angular:jit:style:src\\app\\layout\\footer\\system-log\\system-log.component.less","src/app/core/log/syslog-stream.service.ts","src/app/layout/footer/system-log/system-log.component.ts","src/app/layout/footer/layout-footer.component.ts","angular:jit:style:inline:src\\app\\layout\\header\\layout-header.component.ts;CiAgICAgIG56LWhlYWRlci5hcHAtaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taGVhZGVyLWVycm9yLWJhY2tncm91bmQpOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KICAgIA==","src/app/layout/header/layout-header.component.ts","angular:jit:template:src\\app\\layout\\sidebar\\layout-sidebar.component.html","angular:jit:style:src\\app\\layout\\sidebar\\layout-sidebar.component.less","src/app/layout/layout.state.service.ts","angular:jit:template:src\\app\\layout\\menu\\layout-menu.component.html","angular:jit:style:src\\app\\layout\\menu\\layout-menu.component.less","src/app/layout/menu/menu.service.ts","src/app/pages/tasks/services/task-bootstrap.servcie.ts","src/app/layout/menu/layout-menu.component.ts","angular:jit:template:src\\app\\layout\\project-nav\\layout-project-nav.component.html","angular:jit:style:src\\app\\layout\\project-nav\\layout-project-nav.component.less","angular:jit:style:inline:src\\app\\pages\\projects\\project-list\\project-edit-modal.component.ts;CiAgICAubW9kYWwtYm9keSB7IGRpc3BsYXk6IGdyaWQ7IGdhcDogMTJweDsgfQogICAgLnNlY3Rpb24tdGl0bGUgeyBmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiA2MDA7IG9wYWNpdHk6IC45OyBtYXJnaW4tdG9wOiA0cHg7IH0KICAgIC5oaW50IHsgZm9udC1zaXplOiAxMnB4OyBvcGFjaXR5OiAuNzU7IH0KICA=","src/app/pages/projects/project-list/project-edit-modal.component.ts","angular:jit:style:inline:src\\app\\layout\\project-nav\\hub-v2-personal-token-modal.component.ts;CiAgICAgIC5tb2RhbC1ib2R5IHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQogICAgICAuaGludCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG9wYWNpdHk6IDAuNzU7CiAgICAgIH0KICAgIA==","src/app/layout/project-nav/hub-v2-personal-token-modal.component.ts","src/app/layout/project-nav/layout-project-nav.component.ts","src/app/layout/sidebar/layout-sidebar.component.ts","src/app/layout/layout.component.ts","src/app/app.ts","src/main.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n// THIS CODE IS GENERATED - DO NOT MODIFY.\nconst u = undefined;\nfunction plural(val) {\n const n = val;\n return 5;\n}\nexport default [\"zh\", [[\"上午\", \"下午\"]], u, [[\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"], [\"周日\", \"周一\", \"周二\", \"周三\", \"周四\", \"周五\", \"周六\"], [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"], [\"周日\", \"周一\", \"周二\", \"周三\", \"周四\", \"周五\", \"周六\"]], u, [[\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"], [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"], [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"]], u, [[\"公元前\", \"公元\"]], 0, [6, 0], [\"y/M/d\", \"y年M月d日\", u, \"y年M月d日EEEE\"], [\"HH:mm\", \"HH:mm:ss\", \"z HH:mm:ss\", \"zzzz HH:mm:ss\"], [\"{1} {0}\", u, u, u], [\".\", \",\", \";\", \"%\", \"+\", \"-\", \"E\", \"×\", \"‰\", \"∞\", \"NaN\", \":\"], [\"#,##0.###\", \"#,##0%\", \"¤#,##0.00\", \"#E0\"], \"CNY\", \"¥\", \"人民币\", { \"AUD\": [\"AU$\", \"$\"], \"BYN\": [u, \"р.\"], \"CNY\": [\"¥\"], \"ILR\": [\"ILS\"], \"JPY\": [\"JP¥\", \"¥\"], \"KRW\": [\"₩\", \"₩\"], \"PHP\": [u, \"₱\"], \"RUR\": [u, \"р.\"], \"TWD\": [\"NT$\"], \"USD\": [\"US$\", \"$\"], \"XXX\": [] }, \"ltr\", plural];\n","/**\n * @license Angular v20.3.15\n * (c) 2010-2025 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { inject, Injector, ɵRuntimeError as _RuntimeError, ɵChangeDetectionScheduler as _ChangeDetectionScheduler, Injectable, InjectionToken, ɵperformanceMarkFeature as _performanceMarkFeature, makeEnvironmentProviders, RendererFactory2, NgZone, ANIMATION_MODULE_TYPE } from '@angular/core';\nimport { DomRendererFactory2 } from '../dom_renderer.mjs';\n\nconst ANIMATION_PREFIX = '@';\nclass AsyncAnimationRendererFactory {\n doc;\n delegate;\n zone;\n animationType;\n moduleImpl;\n _rendererFactoryPromise = null;\n scheduler = null;\n injector = inject(Injector);\n loadingSchedulerFn = inject(ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN, {\n optional: true,\n });\n _engine;\n /**\n *\n * @param moduleImpl allows to provide a mock implmentation (or will load the animation module)\n */\n constructor(doc, delegate, zone, animationType, moduleImpl) {\n this.doc = doc;\n this.delegate = delegate;\n this.zone = zone;\n this.animationType = animationType;\n this.moduleImpl = moduleImpl;\n }\n /** @docs-private */\n ngOnDestroy() {\n // When the root view is removed, the renderer defers the actual work to the\n // `TransitionAnimationEngine` to do this, and the `TransitionAnimationEngine` doesn't actually\n // remove the DOM node, but just calls `markElementAsRemoved()`. The actual DOM node is not\n // removed until `TransitionAnimationEngine` \"flushes\".\n // Note: we already flush on destroy within the `InjectableAnimationEngine`. The injectable\n // engine is not provided when async animations are used.\n this._engine?.flush();\n }\n /**\n * @internal\n */\n loadImpl() {\n // Note on the `.then(m => m)` part below: Closure compiler optimizations in g3 require\n // `.then` to be present for a dynamic import (or an import should be `await`ed) to detect\n // the set of imported symbols.\n const loadFn = () => this.moduleImpl ?? import('@angular/animations/browser').then((m) => m);\n let moduleImplPromise;\n if (this.loadingSchedulerFn) {\n moduleImplPromise = this.loadingSchedulerFn(loadFn);\n }\n else {\n moduleImplPromise = loadFn();\n }\n return moduleImplPromise\n .catch((e) => {\n throw new _RuntimeError(5300 /* RuntimeErrorCode.ANIMATION_RENDERER_ASYNC_LOADING_FAILURE */, (typeof ngDevMode === 'undefined' || ngDevMode) &&\n 'Async loading for animations package was ' +\n 'enabled, but loading failed. Angular falls back to using regular rendering. ' +\n \"No animations will be displayed and their styles won't be applied.\");\n })\n .then(({ ɵcreateEngine, ɵAnimationRendererFactory }) => {\n // We can't create the renderer yet because we might need the hostElement and the type\n // Both are provided in createRenderer().\n this._engine = ɵcreateEngine(this.animationType, this.doc);\n const rendererFactory = new ɵAnimationRendererFactory(this.delegate, this._engine, this.zone);\n this.delegate = rendererFactory;\n return rendererFactory;\n });\n }\n /**\n * This method is delegating the renderer creation to the factories.\n * It uses default factory while the animation factory isn't loaded\n * and will rely on the animation factory once it is loaded.\n *\n * Calling this method will trigger as side effect the loading of the animation module\n * if the renderered component uses animations.\n */\n createRenderer(hostElement, rendererType) {\n const renderer = this.delegate.createRenderer(hostElement, rendererType);\n if (renderer.ɵtype === 0 /* AnimationRendererType.Regular */) {\n // The factory is already loaded, this is an animation renderer\n return renderer;\n }\n // We need to prevent the DomRenderer to throw an error because of synthetic properties\n if (typeof renderer.throwOnSyntheticProps === 'boolean') {\n renderer.throwOnSyntheticProps = false;\n }\n // Using a dynamic renderer to switch the renderer implementation once the module is loaded.\n const dynamicRenderer = new DynamicDelegationRenderer(renderer);\n // Kick off the module loading if the component uses animations but the module hasn't been\n // loaded yet.\n if (rendererType?.data?.['animation'] && !this._rendererFactoryPromise) {\n this._rendererFactoryPromise = this.loadImpl();\n }\n this._rendererFactoryPromise\n ?.then((animationRendererFactory) => {\n const animationRenderer = animationRendererFactory.createRenderer(hostElement, rendererType);\n dynamicRenderer.use(animationRenderer);\n this.scheduler ??= this.injector.get(_ChangeDetectionScheduler, null, { optional: true });\n this.scheduler?.notify(10 /* NotificationSource.AsyncAnimationsLoaded */);\n })\n .catch((e) => {\n // Permanently use regular renderer when loading fails.\n dynamicRenderer.use(renderer);\n });\n return dynamicRenderer;\n }\n begin() {\n this.delegate.begin?.();\n }\n end() {\n this.delegate.end?.();\n }\n whenRenderingDone() {\n return this.delegate.whenRenderingDone?.() ?? Promise.resolve();\n }\n /**\n * Used during HMR to clear any cached data about a component.\n * @param componentId ID of the component that is being replaced.\n */\n componentReplaced(componentId) {\n // Flush the engine since the renderer destruction waits for animations to be done.\n this._engine?.flush();\n this.delegate.componentReplaced?.(componentId);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AsyncAnimationRendererFactory, deps: \"invalid\", target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AsyncAnimationRendererFactory });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AsyncAnimationRendererFactory, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: Document }, { type: i0.RendererFactory2 }, { type: i0.NgZone }, { type: undefined }, { type: Promise }] });\n/**\n * The class allows to dynamicly switch between different renderer implementations\n * by changing the delegate renderer.\n */\nclass DynamicDelegationRenderer {\n delegate;\n // List of callbacks that need to be replayed on the animation renderer once its loaded\n replay = [];\n ɵtype = 1 /* AnimationRendererType.Delegated */;\n constructor(delegate) {\n this.delegate = delegate;\n }\n use(impl) {\n this.delegate = impl;\n if (this.replay !== null) {\n // Replay queued actions using the animation renderer to apply\n // all events and properties collected while loading was in progress.\n for (const fn of this.replay) {\n fn(impl);\n }\n // Set to `null` to indicate that the queue was processed\n // and we no longer need to collect events and properties.\n this.replay = null;\n }\n }\n get data() {\n return this.delegate.data;\n }\n destroy() {\n this.replay = null;\n this.delegate.destroy();\n }\n createElement(name, namespace) {\n return this.delegate.createElement(name, namespace);\n }\n createComment(value) {\n return this.delegate.createComment(value);\n }\n createText(value) {\n return this.delegate.createText(value);\n }\n get destroyNode() {\n return this.delegate.destroyNode;\n }\n appendChild(parent, newChild) {\n this.delegate.appendChild(parent, newChild);\n }\n insertBefore(parent, newChild, refChild, isMove) {\n this.delegate.insertBefore(parent, newChild, refChild, isMove);\n }\n removeChild(parent, oldChild, isHostElement, requireSynchronousElementRemoval) {\n this.delegate.removeChild(parent, oldChild, isHostElement, requireSynchronousElementRemoval);\n }\n selectRootElement(selectorOrNode, preserveContent) {\n return this.delegate.selectRootElement(selectorOrNode, preserveContent);\n }\n parentNode(node) {\n return this.delegate.parentNode(node);\n }\n nextSibling(node) {\n return this.delegate.nextSibling(node);\n }\n setAttribute(el, name, value, namespace) {\n this.delegate.setAttribute(el, name, value, namespace);\n }\n removeAttribute(el, name, namespace) {\n this.delegate.removeAttribute(el, name, namespace);\n }\n addClass(el, name) {\n this.delegate.addClass(el, name);\n }\n removeClass(el, name) {\n this.delegate.removeClass(el, name);\n }\n setStyle(el, style, value, flags) {\n this.delegate.setStyle(el, style, value, flags);\n }\n removeStyle(el, style, flags) {\n this.delegate.removeStyle(el, style, flags);\n }\n setProperty(el, name, value) {\n // We need to keep track of animation properties set on default renderer\n // So we can also set them also on the animation renderer\n if (this.shouldReplay(name)) {\n this.replay.push((renderer) => renderer.setProperty(el, name, value));\n }\n this.delegate.setProperty(el, name, value);\n }\n setValue(node, value) {\n this.delegate.setValue(node, value);\n }\n listen(target, eventName, callback, options) {\n // We need to keep track of animation events registred by the default renderer\n // So we can also register them against the animation renderer\n if (this.shouldReplay(eventName)) {\n this.replay.push((renderer) => renderer.listen(target, eventName, callback, options));\n }\n return this.delegate.listen(target, eventName, callback, options);\n }\n shouldReplay(propOrEventName) {\n //`null` indicates that we no longer need to collect events and properties\n return this.replay !== null && propOrEventName.startsWith(ANIMATION_PREFIX);\n }\n}\n/**\n * Provides a custom scheduler function for the async loading of the animation package.\n *\n * Private token for investigation purposes\n */\nconst ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN = new InjectionToken(ngDevMode ? 'async_animation_loading_scheduler_fn' : '');\n\n/**\n * Returns the set of dependency-injection providers\n * to enable animations in an application. See [animations guide](guide/animations)\n * to learn more about animations in Angular.\n *\n * When you use this function instead of the eager `provideAnimations()`, animations won't be\n * rendered until the renderer is loaded.\n *\n * @usageNotes\n *\n * The function is useful when you want to enable animations in an application\n * bootstrapped using the `bootstrapApplication` function. In this scenario there\n * is no need to import the `BrowserAnimationsModule` NgModule at all, just add\n * providers returned by this function to the `providers` list as show below.\n *\n * ```ts\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideAnimationsAsync()\n * ]\n * });\n * ```\n *\n * @param type pass `'noop'` as argument to disable animations.\n *\n * @publicApi\n *\n * @deprecated 20.2 Use `animate.enter` or `animate.leave` instead. Intent to remove in v23\n */\nfunction provideAnimationsAsync(type = 'animations') {\n _performanceMarkFeature('NgAsyncAnimations');\n // Animations don't work on the server so we switch them over to no-op automatically.\n if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n type = 'noop';\n }\n return makeEnvironmentProviders([\n {\n provide: RendererFactory2,\n useFactory: (doc, renderer, zone) => {\n return new AsyncAnimationRendererFactory(doc, renderer, zone, type);\n },\n deps: [DOCUMENT, DomRendererFactory2, NgZone],\n },\n {\n provide: ANIMATION_MODULE_TYPE,\n useValue: type === 'noop' ? 'NoopAnimations' : 'BrowserAnimations',\n },\n ]);\n}\n\nexport { provideAnimationsAsync, ɵASYNC_ANIMATION_LOADING_SCHEDULER_FN, AsyncAnimationRendererFactory as ɵAsyncAnimationRendererFactory };\n\n","import { Injectable } from '@angular/core';\r\n\r\nenum ThemeType {\r\n dark = 'dark',\r\n default = 'default',\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ThemeService {\r\n currentTheme = ThemeType.default;\r\n\r\n constructor() { }\r\n\r\n private reverseTheme(theme: string): ThemeType {\r\n return theme === ThemeType.dark ? ThemeType.default : ThemeType.dark;\r\n }\r\n\r\n private removeUnusedTheme(theme: ThemeType): void {\r\n document.documentElement.classList.remove(theme);\r\n const removedThemeStyle = document.getElementById(theme);\r\n if (removedThemeStyle) {\r\n document.head.removeChild(removedThemeStyle);\r\n }\r\n }\r\n\r\n private loadCss(href: string, id: string): Promise<Event> {\r\n return new Promise((resolve, reject) => {\r\n const style = document.createElement('link');\r\n style.rel = 'stylesheet';\r\n style.href = href;\r\n style.id = id;\r\n style.onload = resolve;\r\n style.onerror = reject;\r\n document.head.append(style);\r\n });\r\n }\r\n\r\n public loadTheme(firstLoad = true): Promise<Event> {\r\n const theme = this.currentTheme;\r\n if (firstLoad) {\r\n document.documentElement.classList.add(theme);\r\n }\r\n return new Promise<Event>((resolve, reject) => {\r\n this.loadCss(`${theme}.css`, theme).then(\r\n (e) => {\r\n if (!firstLoad) {\r\n document.documentElement.classList.add(theme);\r\n }\r\n this.removeUnusedTheme(this.reverseTheme(theme));\r\n resolve(e);\r\n },\r\n (e) => reject(e)\r\n );\r\n });\r\n }\r\n\r\n public toggleTheme(): Promise<Event> {\r\n this.currentTheme = this.reverseTheme(this.currentTheme);\r\n return this.loadTheme(false);\r\n }\r\n}","import { APP_INITIALIZER } from '@angular/core';\r\nimport { ThemeService } from './theme.service';\r\n\r\nexport const AppInitializerProvider = {\r\n provide: APP_INITIALIZER,\r\n useFactory: (themeService: ThemeService) => () => {\r\n return themeService.loadTheme();\r\n },\r\n deps: [ThemeService],\r\n multi: true,\r\n};","import { Routes } from '@angular/router';\r\n\r\nexport const routes: Routes = [\r\n {\r\n path: '',\r\n redirectTo: 'dashboard',\r\n pathMatch: 'full'\r\n },\r\n {\r\n path: 'dashboard',\r\n loadChildren: () => import('./pages/dashboard/dashboard-module').then(m => m.DashboardModule)\r\n },\r\n {\r\n path: 'tasks',\r\n loadChildren: () => import('./pages/tasks/tasks-module').then(m => m.TasksModule)\r\n },\r\n {\r\n path: 'projects',\r\n loadChildren: () => import('./pages/projects/projects-module').then(m => m.ProjectsModule)\r\n },\r\n {\r\n path: 'settings',\r\n loadChildren: () => import('./pages/setting/setting-module').then(m => m.SettingModule)\r\n },\r\n {\r\n path: 'configuration',\r\n loadChildren: () => import('./pages/configuration/configuration.module').then(m => m.ConfigurationModule)\r\n },\r\n {\r\n path: 'dependencies',\r\n loadChildren: () => import('./pages/dependencies/dependencies.module').then(m => m.DependenciesModule)\r\n },\r\n {\r\n path: 'rquest',\r\n loadChildren: () => import('./pages/api-client/api-client.module').then(m => m.ApiClientModule)\r\n },\r\n {\r\n path: 'sprite',\r\n loadChildren: () => import('./pages/sprite/sprite.module').then(m => m.SpriteModule)\r\n },\r\n {\r\n path:'rd',\r\n loadChildren: () => import('./pages/rd/rd.module').then(m => m.RdModule)\r\n },\r\n {\r\n path:'issues',\r\n loadChildren: () => import('./pages/issues/issues.module').then(m => m.IssuesModule)\r\n },\r\n {\r\n path: 'nginx',\r\n loadComponent: () => import('./pages/nginx/nginx.component').then(m => m.NginxComponent)\r\n },\r\n {\r\n path: 'about',\r\n loadChildren: () => import('./pages/about/about-routing-module').then(m => m.AboutRoutingModule)\r\n },\r\n {\r\n path: '**',\r\n redirectTo: 'dashboard'\r\n }\r\n];\r\n","import { ApplicationConfig, importProvidersFrom, provideZonelessChangeDetection } from '@angular/core';\r\nimport { provideRouter } from '@angular/router';\r\n\r\nimport { registerLocaleData } from '@angular/common';\r\nimport { provideHttpClient, withInterceptors } from '@angular/common/http';\r\nimport zh from '@angular/common/locales/zh';\r\nimport { provideAnimationsAsync } from '@angular/platform-browser/animations/async';\r\nimport { NzModalModule } from 'ng-zorro-antd/modal';\r\nimport { provideNzI18n, zh_CN } from 'ng-zorro-antd/i18n';\r\nimport { AppInitializerProvider } from './app-initializer.service';\r\nimport { routes } from './app.routes';\r\nimport { httpErrorInterceptor } from './core/http/http-error.interceptor';\r\nimport { provideMarkdown } from 'ngx-markdown';\r\n\r\nregisterLocaleData(zh);\r\n\r\nexport const appConfig: ApplicationConfig = {\r\n providers: [\r\n AppInitializerProvider,\r\n provideZonelessChangeDetection(),\r\n provideRouter(routes),\r\n provideNzI18n(zh_CN),\r\n provideAnimationsAsync(),\r\n provideHttpClient(withInterceptors([httpErrorInterceptor])),\r\n importProvidersFrom(NzModalModule),\r\n provideMarkdown(),\r\n ],\r\n};\r\n","/* angular:styles/component:less;0ae256c0ca17f80a8721d10f9aafb5a5314af03e1bebab9a3fc4980991127c7f;D:\\ng-manager\\webapp\\src\\app\\app.ts */\n:host {\n display: block;\n height: 100vh;\n}\n/*# sourceMappingURL=app.css.map */\n","// project-icons.ts\r\nexport const ICON_ANGULAR = `\r\n<svg viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M435.8 536.2H512V353z\" fill=\"#DD0031\"/>\r\n <path d=\"M400.9 616.8l-52.4 130.8h-97.2L512 163V64L94.9 212.7l63.6 551.5L512 960V616.8z\" fill=\"#DD0031\"/>\r\n <path d=\"M512 353v183.2h76.2z\" fill=\"#C3002F\"/>\r\n <path d=\"M512 64v99l259.8 584.6h-97.2l-52.4-130.8H512V960l353.5-195.8 63.6-551.5z\" fill=\"#C3002F\"/>\r\n</svg>\r\n`;\r\n\r\nexport const ICON_VUE = `\r\n<svg viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M615.6 123.6h165.5L512 589.7 242.9 123.6H63.5L512 900.4l448.5-776.9z\" fill=\"#41B883\"/>\r\n <path d=\"M781.1 123.6H615.6L512 303 408.4 123.6H242.9L512 589.7z\" fill=\"#34495E\"/>\r\n</svg>\r\n`;\r\n\r\nexport const ICON_REACT = `\r\n<svg viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <svg t=\"1767603739899\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"9231\" width=\"200\" height=\"200\">\r\n <path d=\"M512 511.8m-80 0a80 80 0 1 0 160 0 80 80 0 1 0-160 0Z\" fill=\"#61DAFB\" p-id=\"9232\"></path>\r\n <path d=\"M960.5 511.8c0-62.8-73.8-117.2-188.5-150.1 28.9-115.8 18.7-206.9-35.7-238.3-54.5-31.4-138.5 5.3-224.3 88.2-85.8-82.9-169.8-119.6-224.3-88.2-54.4 31.4-64.6 122.6-35.7 238.3C137.3 394.6 63.5 449 63.5 511.8S137.3 629 252 661.9c-28.9 115.7-18.7 206.9 35.7 238.3 13.4 7.8 28.6 11.6 45.2 11.6 39.7 0 87.8-21.8 140-64.2 13-10.6 26.1-22.6 39.1-35.2 13 12.6 26.1 24.6 39.1 35.2 52.2 42.4 100.2 64.2 140 64.2 16.6 0 31.8-3.8 45.2-11.6 54.4-31.4 64.6-122.5 35.7-238.3 114.7-32.9 188.5-87.3 188.5-150.1zM716.8 157.2c35.3 20.4 42.7 94.3 17.6 194.8-36.7-8.4-76.7-14.7-119.3-18.6-24.7-34.9-50.2-66.4-75.8-94 59.2-57.3 114.2-88.4 152-88.4 9.6-0.1 18.2 2 25.5 6.2zM637 584c-13.8 24-28.4 47-43.3 69-26.1 2-53.3 3.1-81.7 3.1-28.3 0-55.5-1.1-81.6-3.1-15-22-29.5-45.1-43.3-69-14.1-24.5-26.7-48.6-38.1-72.2 11.4-23.6 24-47.7 38.1-72.2 14.1-24.5 28.7-47.4 43.4-69.1 26.1-2 53.3-3.1 81.6-3.1 28.3 0 55.5 1.1 81.6 3.1 14.7 21.6 29.3 44.6 43.4 69 14.1 24.5 26.7 48.6 38.1 72.2-11.5 23.7-24.1 47.8-38.2 72.3z m58.8-26.4c11.2 26.6 20.4 52.1 28 76.5-24.9 5.6-51.7 10.4-80.3 14 9.3-14.5 18.4-29.3 27.3-44.6 8.8-15.4 17.1-30.7 25-45.9zM512 756.5c-17.7-19.2-35.1-40.1-52.2-62.6 17.1 0.8 34.5 1.3 52.2 1.3 17.7 0 35.1-0.5 52.2-1.3-17.1 22.5-34.5 43.4-52.2 62.6zM380.5 648.1c-28.6-3.6-55.3-8.4-80.3-14 7.6-24.4 16.8-49.9 28-76.5 7.9 15.2 16.1 30.5 25 45.9 8.9 15.2 18 30 27.3 44.6zM328.2 466c-11.2-26.6-20.4-52.1-28-76.5 24.9-5.6 51.6-10.4 80.2-14-9.2 14.4-18.4 29.2-27.2 44.6-8.8 15.4-17.1 30.7-25 45.9zM512 267.1c17.3 18.7 34.8 39.8 52.1 62.7-17.1-0.8-34.4-1.3-52.1-1.3-17.7 0-35 0.5-52.1 1.3 17.3-22.9 34.8-44 52.1-62.7z m158.7 153c-8.9-15.3-18-30.1-27.2-44.6 28.6 3.6 55.3 8.4 80.2 14-7.6 24.4-16.8 49.9-28 76.5-7.8-15.2-16.1-30.5-25-45.9zM307.2 157.2c7.2-4.2 15.8-6.2 25.6-6.2 37.8 0 92.7 31.1 151.9 88.4-25.6 27.6-51.1 59.2-75.8 94-42.5 3.9-82.6 10.2-119.3 18.6-25.1-100.6-17.6-174.5 17.6-194.8zM102.5 511.8c0-40.8 60.3-84.2 160-112.6 11.1 36 25.6 73.8 43.5 112.6-17.8 38.8-32.4 76.6-43.5 112.6-99.7-28.4-160-71.9-160-112.6z m345.8 305.5c-59.7 48.5-111.1 66.4-141.1 49.2-35.3-20.4-42.7-94.3-17.6-194.8 36.7 8.4 76.7 14.7 119.3 18.6 24.4 34.5 49.9 66.1 75.8 94.2-12.1 11.7-24.2 22.9-36.4 32.8z m268.5 49.2c-29.9 17.3-81.4-0.6-141.1-49.2-12.1-9.9-24.3-21.1-36.5-32.8 26-28.1 51.4-59.7 75.8-94.2 42.5-3.9 82.6-10.2 119.3-18.7 25.2 100.6 17.7 174.5-17.5 194.9z m44.8-242.1c-11.1-36-25.6-73.8-43.5-112.6 17.8-38.8 32.4-76.6 43.5-112.6 99.7 28.5 160 71.9 160 112.6-0.1 40.7-60.4 84.2-160 112.6z\" fill=\"#61DAFB\" p-id=\"9233\"></path></svg>\r\n</svg>\r\n`;\r\n\r\nexport const ICON_NODE = `\r\n<svg t=\"1767598826450\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"8231\" width=\"200\" height=\"200\">\r\n <path d=\"M875.2 262.3L546.7 72.7c-20.7-11.8-48.3-11.8-69 0L148.8 262.3c-21.5 12.2-34.5 34.9-34.5 59.7v379.2c0 24.8 13.4 47.9 34.5 60.1l86.1 49.5c41.8 20.7 56.8 20.7 75.9 20.7 62.1 0 97.4-37.8 97.4-102.7V354.4c0-5.3-4.1-9.3-9.3-9.3h-41.4c-5.3 0-9.3 4.1-9.3 9.3v374.3c0 28.8-30 57.7-78.8 33.3l-90.1-52c-3.2-2-5.3-5.3-5.3-8.9V321.9c0-3.7 2-7.3 5.3-8.9l328.1-190c3.2-1.6 7.3-1.6 10.2 0l328.5 189.6c3.2 1.6 5.3 5.3 5.3 8.9v379.2c0 3.7-2 7.3-4.9 8.9L517.9 899.3c-2.8 1.6-7.3 1.6-10.2 0l-84.4-49.9c-2.4-1.2-5.7-1.6-8.1-0.4-23.1 13.4-27.6 15-49.5 22.7-5.7 1.6-13.4 4.9 2.8 14.2l109.6 65c10.6 6.1 22.3 9.3 34.5 9.3 11.8-0.4 24-3.2 34.1-9.7l328.5-189.6c21.1-12.2 34.5-34.9 34.5-59.7V321.9c0-24.3-13.4-47.5-34.5-59.6z\" fill=\"#689F63\" p-id=\"8232\"></path>\r\n <path d=\"M614.1 641.1c-86.9 0-106-21.9-112.5-65-0.8-4.9-4.5-8.1-9.3-8.1h-42.6c-5.3 0-9.3 4.1-9.3 9.3 0 55.2 30 121.4 173.8 121.4l-0.4-0.4c103.9 0 163.6-41 163.6-112.5 0-70.6-47.9-89.7-149-103.1-101.9-13.4-112.5-20.3-112.5-44.3 0-19.5 8.9-45.9 84.4-45.9 67.8 0 92.6 14.6 102.7 60.1 1.2 4.1 4.9 7.3 9.3 7.3H755c2.4 0 5.3-0.8 6.9-2.8 1.6-2 2.8-4.5 2.4-7.3-6.9-78.4-58.9-114.9-164-114.9-93.4 0-149.4 39.4-149.4 105.6 0 71.9 55.6 91.8 145.8 100.7 107.6 10.6 116.1 26.4 116.1 47.5 0 36.5-29.3 52.4-98.7 52.4z\" fill=\"#689F63\" p-id=\"8233\"></path>\r\n</svg>\r\n`;\r\n\r\nexport const ICON_ESLINT = `\r\n<svg t=\"1768726164973\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"4725\" width=\"200\" height=\"200\">\r\n <path d=\"M332.72493 412.535453l171.001167-98.72725a13.830826 13.830826 0 0 1 13.83424 0l171.007994 98.72725a13.841066 13.841066 0 0 1 6.915413 11.9808v197.4545a13.858133 13.858133 0 0 1-6.918826 11.980799l-171.004581 98.72725a13.830826 13.830826 0 0 1-13.83424 0l-171.001167-98.72725a13.841066 13.841066 0 0 1-6.915413-11.980799V424.516253a13.847893 13.847893 0 0 1 6.915413-11.9808\" fill=\"#7986CB\" p-id=\"4726\"></path>\r\n <path d=\"M955.265709 502.476783L750.950409 147.036155c-7.420586-12.8512-21.128533-22.330026-35.969705-22.330026H306.329624c-14.844586 0-28.555946 9.478826-35.976532 22.330026L66.037792 501.701957c-7.420586 12.854613-7.420586 29.081599 0 41.932798L270.353092 896.170637c7.420586 12.8512 21.131946 19.421866 35.976532 19.421866h408.65108c14.83776 0 28.552532-6.372693 35.969705-19.227306l204.3153-353.109322c7.427413-12.847786 7.427413-27.921066 0-40.768852m-169.181861 170.922661c0 5.2224-3.14368 10.059093-7.676586 12.673706l-260.249592 150.152529a14.80704 14.80704 0 0 1-14.725119 0l-260.450978-150.152529c-4.52608-2.614613-7.693653-7.44448-7.693653-12.673706v-300.30847c0-5.229226 3.119787-10.059093 7.649279-12.677119l260.242765-150.152529a14.779733 14.779733 0 0 1 14.71488 0l260.471458 150.152529c4.529493 2.618027 7.717546 7.447893 7.717546 12.677119z\" fill=\"#3F51B5\" p-id=\"4727\"></path>\r\n</svg>\r\n`;\r\n\r\nexport const ICON_SVN = `\r\n<svg t=\"1772087297160\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"12394\" data-spm-anchor-id=\"a313x.search_index.0.i16.3dc23a81kNbNJb\" width=\"48\" height=\"48\">\r\n <path d=\"M0 512c0 282.848 229.312 512 512 512 282.848 0 512-229.312 512-512 0-282.848-229.312-512-512-512C229.152 0 0 229.152 0 512z\" fill=\"#333333\" p-id=\"12395\" data-spm-anchor-id=\"a313x.search_index.0.i13.3dc23a81kNbNJb\" class=\"selected\"></path>\r\n <path d=\"M948.48 449.824c-34.912 45.408-101.056 22.272-131.456 40.032-44.288 26.016-42.88 89.152-151.264 173.952-26.336 20.64 27.968 128.768 4.48 152.928-23.872 24.544-119.84 25.792-143.104 12.384-34.08-19.808-7.36-71.2 0.192-146.304-70.016 7.232-92.672 5.984-162.912 3.104 10.816 56.96 26.336 120.512 3.68 141.376-18.592 16.928-108.608 18.784-136.768 0.192-35.328-23.328 25.504-156 4.896-158.272-23.68-2.464-168.416 3.296-142.88-155.808 27.136 40.032 73.28 77.792 126.368 60.864 3.072-58.208 20-113.92 48.384-158.496 37.568-58.624 95.328-97.824 168.416-97.824 72.256 0 132.48 31.776 171.872 81.728 30.816 39.2 48.8 89.984 48.992 145.088 76.352-58.208 20.224-200.8 111.648-254.24 65.12-37.984 141.248-18.368 177.6 41.888 19.392 31.584 25.312 87.072 1.824 117.408z\" fill=\"#ffffff\" p-id=\"12396\" data-spm-anchor-id=\"a313x.search_index.0.i14.3dc23a81kNbNJb\" class=\"\"></path>\r\n</svg>\r\n`;","import { Injectable } from \"@angular/core\";\r\nimport { NzIconService } from \"ng-zorro-antd/icon\";\r\nimport { ICON_ANGULAR, ICON_ESLINT, ICON_NODE, ICON_REACT, ICON_SVN, ICON_VUE } from \"./project-icons\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class ProjectIconRegistry {\r\n private inited = false;\r\n\r\n constructor(private icons: NzIconService) { }\r\n\r\n init() {\r\n if (this.inited) return;\r\n this.inited = true;\r\n\r\n // 注册为 nzType,可复用\r\n this.icons.addIconLiteral(\"proj:angular\", ICON_ANGULAR);\r\n this.icons.addIconLiteral(\"proj:vue\", ICON_VUE);\r\n this.icons.addIconLiteral(\"proj:react\", ICON_REACT);\r\n this.icons.addIconLiteral(\"proj:node\", ICON_NODE);\r\n this.icons.addIconLiteral(\"proj:eslint\", ICON_ESLINT);\r\n this.icons.addIconLiteral(\"proj:svn\", ICON_SVN);\r\n }\r\n}\r\n","<nz-layout class=\"app-layout\">\r\n @if (visible()) {\r\n <div\r\n class=\"ws-banner-wrap\"\r\n [class.leaving]=\"leaving()\"\r\n (transitionend)=\"onWrapTransitionEnd($event)\"\r\n >\r\n <div\r\n class=\"ws-banner-inner\"\r\n [class.leaving]=\"leaving()\"\r\n (animationend)=\"onInnerAnimationEnd($event)\"\r\n >\r\n <ngm-header></ngm-header>\r\n </div>\r\n </div>\r\n }\r\n <nz-layout class=\"app-content\">\r\n <ngm-sidebar></ngm-sidebar>\r\n <nz-layout>\r\n <nz-content>\r\n <div class=\"inner-content\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n </nz-content>\r\n </nz-layout>\r\n </nz-layout>\r\n\r\n <ngm-footer></ngm-footer>\r\n</nz-layout>\r\n","/* src/app/layout/layout.component.less */\nhtml.default {\n}\nhtml.default :root {\n --app-gray: #e6f7ff;\n --app-primary: #1890ff;\n --app-primary-1: #e6f7ff;\n --app-primary-2: #bae7ff;\n --app-primary-3: #91d5ff;\n --app-primary-4: #69c0ff;\n --app-primary-5: #40a9ff;\n --app-primary-6: #1890ff;\n --app-text-color: rgba(0, 0, 0, 0.85);\n --app-text-secondary: rgba(0, 0, 0, 0.45);\n --text-color-primary: #1890ff;\n --app-component-bg: #fff;\n --app-border-color: #d9d9d9;\n --header-error-background: #ff4d4f;\n}\nhtml.default :root {\n --text-color-gray: #888;\n}\nhtml.default :host .inner-content {\n background: #fff;\n}\nhtml.dark {\n}\nhtml.dark :root {\n --text-color-gray: #bbb;\n}\nhtml.dark :host .inner-content {\n background: #141414;\n}\n:host {\n display: flex;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n:host .app-layout {\n height: 100vh;\n width: 100%;\n}\n:host .app-layout ngm-header {\n width: 100%;\n}\n:host .app-content {\n flex-direction: row;\n}\n:host nz-content .inner-content {\n border-radius: 8px;\n height: 100%;\n}\n:host nz-footer {\n text-align: center;\n}\n.ws-banner-wrap {\n height: 48px;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n.ws-banner-wrap.leaving {\n height: 0;\n}\n.ws-banner-inner {\n height: 48px;\n display: flex;\n align-items: stretch;\n}\n.ws-banner-inner.leaving {\n animation: fadeOutUpSoft 0.35s ease forwards;\n}\n@keyframes fadeOutUpSoft {\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(-30%);\n }\n}\n/*# sourceMappingURL=layout.component.css.map */\n","import { NgTemplateOutlet } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Component, inject, Input, ViewEncapsulation, ChangeDetectionStrategy, Injector, ChangeDetectorRef, ElementRef, Renderer2, DestroyRef, forwardRef, booleanAttribute, NgModule } from '@angular/core';\nimport * as i3 from 'ng-zorro-antd/core/outlet';\nimport { NzOutletModule } from 'ng-zorro-antd/core/outlet';\nimport * as i1 from 'ng-zorro-antd/dropdown';\nimport { NzDropDownModule } from 'ng-zorro-antd/dropdown';\nimport * as i2 from 'ng-zorro-antd/icon';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Router, ActivatedRoute, NavigationEnd, PRIMARY_OUTLET } from '@angular/router';\nimport { filter, startWith } from 'rxjs/operators';\nimport { PREFIX } from 'ng-zorro-antd/core/logger';\n\n/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n/**\n * https://angular.io/errors/NG3003\n * An intermediate interface for {@link NzBreadCrumbComponent} & {@link NzBreadCrumbItemComponent}\n */\nclass NzBreadcrumb {\n}\n\n/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\nclass NzBreadCrumbSeparatorComponent {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzBreadCrumbSeparatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.0\", type: NzBreadCrumbSeparatorComponent, isStandalone: true, selector: \"nz-breadcrumb-separator\", host: { classAttribute: \"ant-breadcrumb-separator\" }, exportAs: [\"nzBreadcrumbSeparator\"], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzBreadCrumbSeparatorComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'nz-breadcrumb-separator',\n exportAs: 'nzBreadcrumbSeparator',\n template: `<ng-content></ng-content>`,\n host: {\n class: 'ant-breadcrumb-separator'\n }\n }]\n }] });\n\n/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\nclass NzBreadCrumbItemComponent {\n nzBreadCrumbComponent = inject(NzBreadcrumb);\n /**\n * Dropdown content of a breadcrumb item.\n */\n nzOverlay;\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzBreadCrumbItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.0\", type: NzBreadCrumbItemComponent, isStandalone: true, selector: \"nz-breadcrumb-item\", inputs: { nzOverlay: \"nzOverlay\" }, exportAs: [\"nzBreadcrumbItem\"], ngImport: i0, template: `\n @if (!!nzOverlay) {\n <span class=\"ant-breadcrumb-overlay-link\" nz-dropdown [nzDropdownMenu]=\"nzOverlay\">\n <ng-template [ngTemplateOutlet]=\"noMenuTpl\"></ng-template>\n <nz-icon nzType=\"down\" />\n </span>\n } @else {\n <ng-template [ngTemplateOutlet]=\"noMenuTpl\" />\n }\n\n @if (nzBreadCrumbComponent.nzSeparator) {\n <nz-breadcrumb-separator>\n <ng-container *nzStringTemplateOutlet=\"nzBreadCrumbComponent.nzSeparator\">\n {{ nzBreadCrumbComponent.nzSeparator }}\n </ng-container>\n </nz-breadcrumb-separator>\n }\n\n <ng-template #noMenuTpl>\n <span class=\"ant-breadcrumb-link\">\n <ng-content />\n </span>\n </ng-template>\n `, isInline: true, dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: NzBreadCrumbSeparatorComponent, selector: \"nz-breadcrumb-separator\", exportAs: [\"nzBreadcrumbSeparator\"] }, { kind: \"ngmodule\", type: NzDropDownModule }, { kind: \"directive\", type: i1.NzDropDownDirective, selector: \"[nz-dropdown]\", inputs: [\"nzDropdownMenu\", \"nzTrigger\", \"nzMatchWidthElement\", \"nzBackdrop\", \"nzClickHide\", \"nzDisabled\", \"nzVisible\", \"nzArrow\", \"nzOverlayClassName\", \"nzOverlayStyle\", \"nzPlacement\"], outputs: [\"nzVisibleChange\"], exportAs: [\"nzDropdown\"] }, { kind: \"ngmodule\", type: NzIconModule }, { kind: \"directive\", type: i2.NzIconDirective, selector: \"nz-icon,[nz-icon]\", inputs: [\"nzSpin\", \"nzRotate\", \"nzType\", \"nzTheme\", \"nzTwotoneColor\", \"nzIconfont\"], exportAs: [\"nzIcon\"] }, { kind: \"ngmodule\", type: NzOutletModule }, { kind: \"directive\", type: i3.NzStringTemplateOutletDirective, selector: \"[nzStringTemplateOutlet]\", inputs: [\"nzStringTemplateOutletContext\", \"nzStringTemplateOutlet\"], exportAs: [\"nzStringTemplateOutlet\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzBreadCrumbItemComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n selector: 'nz-breadcrumb-item',\n exportAs: 'nzBreadcrumbItem',\n imports: [NgTemplateOutlet, NzBreadCrumbSeparatorComponent, NzDropDownModule, NzIconModule, NzOutletModule],\n template: `\n @if (!!nzOverlay) {\n <span class=\"ant-breadcrumb-overlay-link\" nz-dropdown [nzDropdownMenu]=\"nzOverlay\">\n <ng-template [ngTemplateOutlet]=\"noMenuTpl\"></ng-template>\n <nz-icon nzType=\"down\" />\n </span>\n } @else {\n <ng-template [ngTemplateOutlet]=\"noMenuTpl\" />\n }\n\n @if (nzBreadCrumbComponent.nzSeparator) {\n <nz-breadcrumb-separator>\n <ng-container *nzStringTemplateOutlet=\"nzBreadCrumbComponent.nzSeparator\">\n {{ nzBreadCrumbComponent.nzSeparator }}\n </ng-container>\n </nz-breadcrumb-separator>\n }\n\n <ng-template #noMenuTpl>\n <span class=\"ant-breadcrumb-link\">\n <ng-content />\n </span>\n </ng-template>\n `\n }]\n }], propDecorators: { nzOverlay: [{\n type: Input\n }] } });\n\n/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\nclass NzBreadCrumbComponent {\n injector = inject(Injector);\n cdr = inject(ChangeDetectorRef);\n elementRef = inject((ElementRef));\n renderer = inject(Renderer2);\n directionality = inject(Directionality);\n destroyRef = inject(DestroyRef);\n nzAutoGenerate = false;\n nzSeparator = '/';\n nzRouteLabel = 'breadcrumb';\n nzRouteLabelFn = label => label;\n nzRouteFn = route => route;\n breadcrumbs = [];\n dir = 'ltr';\n ngOnInit() {\n if (this.nzAutoGenerate) {\n this.registerRouterChange();\n }\n this.directionality.change?.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((direction) => {\n this.dir = direction;\n this.prepareComponentForRtl();\n this.cdr.detectChanges();\n });\n this.dir = this.directionality.value;\n this.prepareComponentForRtl();\n }\n navigate(url, e) {\n e.preventDefault();\n this.injector.get(Router).navigateByUrl(url);\n }\n registerRouterChange() {\n try {\n const router = this.injector.get(Router);\n const activatedRoute = this.injector.get(ActivatedRoute);\n router.events\n .pipe(filter(e => e instanceof NavigationEnd), takeUntilDestroyed(this.destroyRef), startWith(true) // trigger initial render\n )\n .subscribe(() => {\n this.breadcrumbs = this.getBreadcrumbs(activatedRoute.root);\n this.cdr.markForCheck();\n });\n }\n catch {\n throw new Error(`${PREFIX} You should import RouterModule if you want to use 'NzAutoGenerate'.`);\n }\n }\n getBreadcrumbs(route, url = '', breadcrumbs = []) {\n const children = route.children;\n // If there's no sub root, then stop the recurse and returns the generated breadcrumbs.\n if (children.length === 0) {\n return breadcrumbs;\n }\n for (const child of children) {\n if (child.outlet === PRIMARY_OUTLET) {\n // Only parse components in primary router-outlet (in another word, router-outlet without a specific name).\n // Parse this layer and generate a breadcrumb item.\n const routeUrl = child.snapshot.url\n .map(segment => segment.path)\n .filter(path => path)\n .join('/');\n // Do not change nextUrl if routeUrl is falsy. This happens when it's a route lazy loading other modules.\n const nextUrl = routeUrl ? `${url}/${routeUrl}` : url;\n const breadcrumbLabel = this.nzRouteLabelFn(child.snapshot.data[this.nzRouteLabel]);\n const shapedUrl = this.nzRouteFn(nextUrl);\n // If have data, go to generate a breadcrumb for it.\n if (routeUrl && breadcrumbLabel) {\n const breadcrumb = {\n label: breadcrumbLabel,\n params: child.snapshot.params,\n url: shapedUrl\n };\n breadcrumbs.push(breadcrumb);\n }\n return this.getBreadcrumbs(child, nextUrl, breadcrumbs);\n }\n }\n return breadcrumbs;\n }\n prepareComponentForRtl() {\n if (this.dir === 'rtl') {\n this.renderer.addClass(this.elementRef.nativeElement, 'ant-breadcrumb-rtl');\n }\n else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'ant-breadcrumb-rtl');\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzBreadCrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.0\", type: NzBreadCrumbComponent, isStandalone: true, selector: \"nz-breadcrumb\", inputs: { nzAutoGenerate: [\"nzAutoGenerate\", \"nzAutoGenerate\", booleanAttribute], nzSeparator: \"nzSeparator\", nzRouteLabel: \"nzRouteLabel\", nzRouteLabelFn: \"nzRouteLabelFn\", nzRouteFn: \"nzRouteFn\" }, host: { classAttribute: \"ant-breadcrumb\" }, providers: [{ provide: NzBreadcrumb, useExisting: forwardRef(() => NzBreadCrumbComponent) }], exportAs: [\"nzBreadcrumb\"], ngImport: i0, template: `\n <ng-content />\n @if (nzAutoGenerate && breadcrumbs.length) {\n @for (breadcrumb of breadcrumbs; track breadcrumb.url) {\n <nz-breadcrumb-item>\n <a [attr.href]=\"breadcrumb.url\" (click)=\"navigate(breadcrumb.url, $event)\">{{ breadcrumb.label }}</a>\n </nz-breadcrumb-item>\n }\n }\n `, isInline: true, dependencies: [{ kind: \"component\", type: NzBreadCrumbItemComponent, selector: \"nz-breadcrumb-item\", inputs: [\"nzOverlay\"], exportAs: [\"nzBreadcrumbItem\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzBreadCrumbComponent, decorators: [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n selector: 'nz-breadcrumb',\n exportAs: 'nzBreadcrumb',\n providers: [{ provide: NzBreadcrumb, useExisting: forwardRef(() => NzBreadCrumbComponent) }],\n imports: [NzBreadCrumbItemComponent],\n template: `\n <ng-content />\n @if (nzAutoGenerate && breadcrumbs.length) {\n @for (breadcrumb of breadcrumbs; track breadcrumb.url) {\n <nz-breadcrumb-item>\n <a [attr.href]=\"breadcrumb.url\" (click)=\"navigate(breadcrumb.url, $event)\">{{ breadcrumb.label }}</a>\n </nz-breadcrumb-item>\n }\n }\n `,\n host: {\n class: 'ant-breadcrumb'\n }\n }]\n }], propDecorators: { nzAutoGenerate: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], nzSeparator: [{\n type: Input\n }], nzRouteLabel: [{\n type: Input\n }], nzRouteLabelFn: [{\n type: Input\n }], nzRouteFn: [{\n type: Input\n }] } });\n\n/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\nclass NzBreadCrumbModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzBreadCrumbModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.0\", ngImport: i0, type: NzBreadCrumbModule, imports: [NzBreadCrumbComponent, NzBreadCrumbItemComponent, NzBreadCrumbSeparatorComponent], exports: [NzBreadCrumbComponent, NzBreadCrumbItemComponent, NzBreadCrumbSeparatorComponent] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzBreadCrumbModule, imports: [NzBreadCrumbComponent, NzBreadCrumbItemComponent] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzBreadCrumbModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [NzBreadCrumbComponent, NzBreadCrumbItemComponent, NzBreadCrumbSeparatorComponent],\n exports: [NzBreadCrumbComponent, NzBreadCrumbItemComponent, NzBreadCrumbSeparatorComponent]\n }]\n }] });\n\n/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { NzBreadCrumbComponent, NzBreadCrumbItemComponent, NzBreadCrumbModule, NzBreadCrumbSeparatorComponent };\n\n","/* angular:styles/component:less;4ffcb9fbc064aa82c85e1c8f150dbb95be50835959ea1fe0a167e4348f747d05;D:\\ng-manager\\webapp\\src\\app\\layout\\footer\\layout-footer.component.ts */\nnz-footer {\n padding: 0;\n align-items: center;\n display: flex;\n}\napp-system-log {\n width: 100%;\n}\n/*# sourceMappingURL=layout-footer.component.css.map */\n","<div class=\"status-bar\">\r\n <div class=\"project-path\">\r\n <a\r\n nz-button\r\n class=\"home\"\r\n nzType=\"text\"\r\n routerLink=\"/projects\"\r\n nz-tooltip=\"项目管理\"\r\n nzTooltipPlacement=\"top\"\r\n >\r\n <nz-icon class=\"icon\" nzType=\"home\" nzTheme=\"outline\" />\r\n </a>\r\n <button\r\n nz-button\r\n class=\"path\"\r\n nzType=\"text\"\r\n [nz-tooltip]=\"curProjectPath()\"\r\n nzTooltipPlacement=\"top\"\r\n >\r\n <nz-icon nzType=\"folder\" class=\"icon\" nzTheme=\"outline\" />\r\n <span>{{ curProjectPath() }}</span>\r\n </button>\r\n </div>\r\n <div class=\"last-log\" (click)=\"openLog()\" nz-tooltip=\"打开日志\">\r\n <nz-icon nzType=\"profile\" class=\"icon\" nzTheme=\"outline\" />\r\n @if (lastLine()) {\r\n <nz-tag [nzColor]=\"getColor(lastLine()?.level)\" class=\"level-tag\">\r\n {{ lastLine()?.level | uppercase }}\r\n </nz-tag>\r\n <div class=\"info\">{{ lastLine()?.text }}</div>\r\n <div class=\"time\">{{ lastLine()?.ts | date: 'yyyy-MM-dd HH:mm:ss' }}</div>\r\n } @else {\r\n <nz-tag nzColor=\"default\">INFO</nz-tag>\r\n <div class=\"info\">暂无日志</div>\r\n <div class=\"time\">--</div>\r\n }\r\n </div>\r\n <div class=\"actions\">\r\n <a nz-button nzType=\"link\" routerLink=\"/about/feedback\" nzTooltipPlacement=\"top\" nz-tooltip=\"反馈与帮助\">\r\n <nz-icon nzType=\"bug\" nzTheme=\"outline\" />\r\n </a>\r\n </div>\r\n</div>\r\n<nz-drawer\r\n [nzVisible]=\"isOpen()\"\r\n (nzOnClose)=\"closeLog()\"\r\n [nzMaskClosable]=\"false\"\r\n [nzMask]=\"false\"\r\n nzTitle=\"日志\"\r\n nzPlacement=\"bottom\"\r\n [nzExtra]=\"extra\"\r\n [nzHeight]=\"300\"\r\n [nzBodyStyle]=\"{ padding: '0px', overflow: 'hidden' }\"\r\n>\r\n <ng-container *nzDrawerContent>\r\n <div class=\"log\" #logBox>\r\n @for (l of lines(); track trackByLine($index, l)) {\r\n <div\r\n class=\"line\"\r\n [class.err]=\"l.level === 'error'\"\r\n [class.warn]=\"l.level === 'warn'\"\r\n [class.info]=\"l.level === 'info'\"\r\n [class.debug]=\"l.level === 'debug'\"\r\n [class.success]=\"l.level === 'success'\"\r\n >\r\n <nz-tag [nzColor]=\"getColor(l.level)\" class=\"level-tag\">\r\n {{ l.level | uppercase }}\r\n </nz-tag>\r\n <span class=\"time\">{{ l.ts | date: 'yyyy-MM-dd HH:mm:ss' }}</span>\r\n <span class=\"msg\">\r\n @if (l.data?.icon) {\r\n {{ l.data?.icon }}\r\n }\r\n {{ l.text }}\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n </ng-container>\r\n</nz-drawer>\r\n\r\n<ng-template #extra>\r\n <nz-space nzAlign=\"center\">\r\n <button nz-button nzType=\"text\" (click)=\"clearLog()\" nz-tooltip=\"清空日志\">\r\n <nz-icon nzType=\"clear\" nzTheme=\"outline\" />\r\n </button>\r\n <button nz-button nzType=\"text\" (click)=\"toBottom()\" nz-tooltip=\"滚动到底部\">\r\n <nz-icon nzType=\"vertical-align-bottom\" nzTheme=\"outline\" />\r\n </button>\r\n </nz-space>\r\n</ng-template>\r\n","/* src/app/layout/footer/system-log/system-log.component.less */\n:host {\n display: block;\n position: relative;\n z-index: 3;\n flex: 0 0 auto;\n}\n.status-bar {\n height: 32px;\n display: flex;\n align-items: center;\n width: 100%;\n -webkit-user-select: none;\n user-select: none;\n}\n.status-bar .project-path {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n padding: 0 8px;\n gap: 4px;\n}\n.status-bar .project-path .home,\n.status-bar .project-path .path {\n display: inline-flex;\n align-items: center;\n padding: 0;\n max-width: 360px;\n}\n.status-bar .project-path .home span,\n.status-bar .project-path .path span {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.status-bar .project-path .home {\n justify-content: center;\n}\n.status-bar .project-path .path {\n min-width: 240px;\n justify-content: flex-start;\n}\n.status-bar .last-log {\n cursor: pointer;\n flex: 1;\n display: flex;\n align-items: center;\n padding: 0 12px;\n gap: 8px;\n width: 0;\n}\n.status-bar .last-log .info {\n flex: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.status-bar .last-log .time {\n flex: 0 0 auto;\n opacity: 0.75;\n font-size: 14px;\n}\n.status-bar .last-log:hover {\n background: #f5f7fa;\n}\n.icon {\n margin-right: 8px;\n font-size: 18px;\n display: inline-flex;\n}\n.log {\n height: 100%;\n overflow: auto;\n padding: 8px 12px;\n font-family:\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n \"Liberation Mono\",\n \"Courier New\",\n monospace;\n font-size: 14px;\n line-height: 18px;\n}\n.line {\n display: flex;\n gap: 12px;\n padding: 2px 0;\n align-items: center;\n}\n.line .time {\n flex: 0 0 auto;\n opacity: 0.65;\n font-variant-numeric: tabular-nums;\n}\n.line .msg {\n flex: 1 1 auto;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.line.err .msg {\n font-weight: 600;\n}\n.line.warn .msg {\n font-weight: 500;\n}\n.level-tag {\n font-size: 12px;\n padding: 0 4px;\n line-height: 1.5;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 58px;\n border-radius: 4px;\n}\n/*# sourceMappingURL=system-log.component.css.map */\n","import { Injectable, signal } from \"@angular/core\";\r\nimport { filter } from \"rxjs/operators\";\r\nimport { Subscription } from \"rxjs\";\r\n\r\nimport { WsClientService } from \"@app/core/ws/ws-client.service\";\r\nimport type { WsServerMsg, WsState } from \"@app/core/ws/ws.types\";\r\nimport type { LogLine, LogLevel } from \"@models/log.model\";\r\n\r\nexport type SyslogFilter = {\r\n scope?: string; // task / project / ws / server ...\r\n level?: LogLine[\"level\"];\r\n source?: LogLine[\"source\"];\r\n refId?: string;\r\n};\r\n\r\nfunction isSysTail(m: WsServerMsg): m is Extract<WsServerMsg, { op: \"syslog.tail\" }> {\r\n return m.op === \"syslog.tail\";\r\n}\r\n\r\nfunction isSysAppend(m: WsServerMsg): m is Extract<WsServerMsg, { op: \"syslog.append\" }> {\r\n return m.op === \"syslog.append\";\r\n}\r\n\r\nfunction match(entry: LogLine, f?: SyslogFilter): boolean {\r\n if (!f) return true;\r\n if (f.scope !== undefined && entry?.scope !== f.scope) return false;\r\n if (f.level !== undefined && entry?.level !== f.level) return false;\r\n if (f.source !== undefined && entry?.source !== f.source) return false;\r\n if (f.refId !== undefined && entry?.refId !== f.refId) return false;\r\n return true;\r\n}\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class SyslogStreamService {\r\n private msgSub?: Subscription;\r\n private wsStateSub?: Subscription;\r\n\r\n /** 是否已 enable(幂等开关) */\r\n readonly enabled = signal(false);\r\n\r\n /** 当前过滤器(scope 区分) */\r\n private filter = signal<SyslogFilter>({});\r\n\r\n /** 最新日志列表 */\r\n readonly logs = signal<LogLine[]>([]);\r\n\r\n /** 未读计数(drawer 关闭时累加) */\r\n readonly unread = signal<number>(0);\r\n\r\n /** drawer 是否打开(由组件控制) */\r\n readonly drawerOpen = signal<boolean>(false);\r\n\r\n /** 最大缓存行数 */\r\n private capacity = 2000;\r\n\r\n /** 订阅 tail(服务端下发 tail) */\r\n private tail = 300;\r\n\r\n /** 用于避免一次连接里重复发送 sub(open 时置 true,close 时置 false) */\r\n private subSentForCurrentConnection = false;\r\n\r\n /** 记录上一次 ws state,用于识别 open 边沿 */\r\n private lastWsState: WsState = \"idle\";\r\n\r\n constructor(private ws: WsClientService) {\r\n // 只订阅一次 ws messages\r\n this.msgSub = this.ws\r\n .messages()\r\n .pipe(filter((m) => isSysTail(m) || isSysAppend(m)))\r\n .subscribe((m) => this.onWsMessage(m));\r\n\r\n // 监听连接状态:open 时重放订阅(但只发一次)\r\n this.wsStateSub = this.ws.stateChanges().subscribe((s) => {\r\n const wasOpen = this.lastWsState === \"open\";\r\n const isOpen = s === \"open\";\r\n\r\n if (!wasOpen && isOpen) {\r\n // 新连接建立:允许发送一次 sub\r\n this.subSentForCurrentConnection = false;\r\n this.sendSubIfNeeded();\r\n }\r\n\r\n if (wasOpen && !isOpen) {\r\n // 连接断开:下次 open 需要重发\r\n this.subSentForCurrentConnection = false;\r\n }\r\n\r\n this.lastWsState = s;\r\n });\r\n }\r\n\r\n /** UI 控制 drawer 开关:打开时 unread 清零 */\r\n setDrawerOpen(open: boolean) {\r\n this.drawerOpen.set(open);\r\n if (open) this.unread.set(0);\r\n }\r\n\r\n /** 设置过滤器(例如:{ scope: \"task\" }) */\r\n setFilter(next: SyslogFilter) {\r\n this.filter.set(next ?? {});\r\n // filter 变更后,立刻在现有 logs 上应用一次(不强制 re-tail,避免抖动)\r\n const cur = this.logs();\r\n if (!cur.length) return;\r\n const filtered = cur.filter((x) => match(x, this.filter()));\r\n this.logs.set(filtered.slice(-this.capacity));\r\n }\r\n\r\n /** 幂等启用:多次调用不会重复 sub */\r\n enable(tail = 300) {\r\n const t = Math.max(0, Math.min(5000, tail | 0));\r\n this.tail = t;\r\n\r\n // 已启用:不重复发送 sub(避免 pending 堆积)\r\n if (this.enabled()) {\r\n // 如果 tail 变化,且当前连接 open,则可选择重新 sub 刷 tail\r\n // MVP:只在 open 状态下刷新一次,避免 pending 重复\r\n if (this.ws.isOpen()) {\r\n this.subSentForCurrentConnection = false;\r\n this.sendSubIfNeeded();\r\n }\r\n return;\r\n }\r\n\r\n this.enabled.set(true);\r\n\r\n // 确保连接(connect 幂等)\r\n this.ws.connect();\r\n\r\n // 如果此刻已经 open,立即 sub;否则等 state=open 时 sendSubIfNeeded\r\n this.sendSubIfNeeded();\r\n }\r\n\r\n /** 可选:停前端流(通常不建议 unsub syslog) */\r\n disable() {\r\n this.enabled.set(false);\r\n this.subSentForCurrentConnection = false;\r\n // 不主动 unsub,避免诊断日志停掉\r\n // this.ws.send({ op: \"unsub\", topic: \"syslog\" });\r\n }\r\n\r\n markRead() {\r\n this.unread.set(0);\r\n }\r\n\r\n clear() {\r\n this.logs.set([]);\r\n this.unread.set(0);\r\n }\r\n\r\n /**\r\n * 前端本地追加日志(不走 WebSocket,仅显示在系统日志面板)\r\n * @param text 日志内容\r\n * @param level 日志级别\r\n * @param scope 归属范围\r\n */\r\n appendLocal(text: string, level: LogLevel = 'info', scope: LogLine['scope'] = 'server') {\r\n const entry: LogLine = {\r\n ts: Date.now(),\r\n level,\r\n source: 'system',\r\n scope,\r\n text,\r\n };\r\n\r\n const cur = this.logs();\r\n const next = cur.length >= this.capacity ? cur.slice(1) : cur.slice();\r\n next.push(entry);\r\n this.logs.set(next);\r\n\r\n if (!this.drawerOpen()) {\r\n this.unread.set(this.unread() + 1);\r\n }\r\n }\r\n\r\n private sendSubIfNeeded() {\r\n if (!this.enabled()) return;\r\n if (!this.ws.isOpen()) return;\r\n if (this.subSentForCurrentConnection) return;\r\n\r\n this.ws.send({ op: \"sub\", topic: \"syslog\", tail: this.tail });\r\n this.subSentForCurrentConnection = true;\r\n }\r\n\r\n private onWsMessage(m: Extract<WsServerMsg, { op: \"syslog.tail\" | \"syslog.append\" }>) {\r\n const f = this.filter();\r\n\r\n if (m.op === \"syslog.tail\") {\r\n const entries = (m.entries ?? []).filter((x) => match(x, f));\r\n this.logs.set(entries.slice(-this.capacity));\r\n // tail 是历史,不算未读\r\n return;\r\n }\r\n\r\n // syslog.append\r\n const entry = m.entry;\r\n if (!match(entry, f)) return;\r\n\r\n const cur = this.logs();\r\n const next = cur.length >= this.capacity ? cur.slice(1) : cur.slice();\r\n next.push(entry);\r\n this.logs.set(next);\r\n\r\n if (!this.drawerOpen()) {\r\n this.unread.set(this.unread() + 1);\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, OnInit, signal, viewChild } from '@angular/core';\r\nimport { NzButtonModule } from 'ng-zorro-antd/button';\r\nimport { NzDrawerModule } from 'ng-zorro-antd/drawer';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { NzSpaceModule } from 'ng-zorro-antd/space';\r\nimport { NzTagModule } from 'ng-zorro-antd/tag';\r\nimport { NzTooltipModule } from 'ng-zorro-antd/tooltip';\r\n\r\nimport { SyslogStreamService } from '@app/core/log/syslog-stream.service';\r\nimport { LogLevel } from '@models/log.model';\r\nimport { RouterModule } from '@angular/router';\r\nimport { ProjectContextStore } from '@app/core/stores';\r\n\r\n@Component({\r\n selector: 'app-system-log',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n NzTagModule,\r\n NzDrawerModule,\r\n NzButtonModule,\r\n NzSpaceModule,\r\n NzIconModule,\r\n NzTooltipModule,\r\n RouterModule\r\n ],\r\n templateUrl: './system-log.component.html',\r\n styleUrl: './system-log.component.less',\r\n})\r\nexport class SystemLogDrawerComponent implements OnInit {\r\n private sysLogStream = inject(SyslogStreamService);\r\n private projectContext = inject(ProjectContextStore);\r\n private logBox = viewChild<ElementRef<HTMLDivElement>>('logBox');\r\n // 自动跟随(可选开关,默认开更符合日志体验)\r\n readonly autoFollow = signal(true);\r\n // signal 化,便于模板调用 isOpen()\r\n readonly isOpen = signal(false);\r\n\r\n readonly curProjectPath = computed(() => this.projectContext.currentProject()?.root || '');\r\n\r\n // lines 是 computed,跟随 logs signal 更新\r\n readonly lines = computed(() => this.sysLogStream.logs());\r\n\r\n readonly lastLine = computed(() => {\r\n const logs = this.sysLogStream.logs();\r\n return logs.length ? logs[logs.length - 1] : null;\r\n });\r\n\r\n // 可用于 badge\r\n readonly unread = computed(() => this.sysLogStream.unread());\r\n constructor() {\r\n // 让 service 知道 drawer 开关,用于 unread 正确累加/清零\r\n effect(() => {\r\n this.sysLogStream.setDrawerOpen(this.isOpen());\r\n // 打开 drawer 时滚到底\r\n if (this.isOpen()) queueMicrotask(() => this.toBottom());\r\n });\r\n // 新日志到来且开启 autoFollow 时滚到底\r\n effect(() => {\r\n // 依赖 lines() 触发\r\n this.lines();\r\n if (!this.isOpen()) return;\r\n if (!this.autoFollow()) return;\r\n queueMicrotask(() => this.toBottom());\r\n });\r\n }\r\n ngOnInit(): void {\r\n // 应用启动就订阅一次(幂等)\r\n this.sysLogStream.enable(300);\r\n }\r\n\r\n openLog() {\r\n this.isOpen.set(true);\r\n }\r\n\r\n closeLog() {\r\n this.isOpen.set(false);\r\n }\r\n\r\n clearLog() {\r\n this.sysLogStream.clear();\r\n }\r\n\r\n toBottom() {\r\n const el = this.logBox()?.nativeElement;\r\n if (!el) return;\r\n el.scrollTop = el.scrollHeight;\r\n }\r\n\r\n /** 给 @for 的 trackBy,用 index 或 ts+refId+text */\r\n trackByLine = (_: number, l: any) => `${l.ts}-${l.refId ?? ''}-${l.text}`;\r\n\r\n getColor(level?: LogLevel): string {\r\n if (!level) return \"#000000\";\r\n switch (level) {\r\n case 'success': return \"#22c55e\";\r\n case 'info': return \"#18bdfd\";\r\n case 'debug': return \"#94a3b8\";\r\n case \"error\": return \"#ef4444\";\r\n case \"warn\": return \"#f59e0b\";\r\n default: return \"#000000\";\r\n }\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { NzLayoutModule } from 'ng-zorro-antd/layout';\r\nimport { SystemLogDrawerComponent } from './system-log/system-log.component';\r\n\r\n@Component({\r\n selector: 'ngm-footer',\r\n imports: [NzLayoutModule, SystemLogDrawerComponent],\r\n template:`\r\n <nz-footer>\r\n <app-system-log></app-system-log>\r\n </nz-footer>\r\n `,\r\n styles:[\r\n `\r\n nz-footer {\r\n padding: 0;\r\n align-items: center;\r\n display: flex;\r\n }\r\n app-system-log {\r\n width: 100%;\r\n }\r\n `\r\n ],\r\n})\r\nexport class LayoutFooterComponent {\r\n\r\n}\r\n","/* angular:styles/component:less;e1e1521f77919571396f0be38fc5d10fa6722ab9eac94da5a78ef8c961900fe5;D:\\ng-manager\\webapp\\src\\app\\layout\\header\\layout-header.component.ts */\nnz-header.app-header {\n padding: 0;\n width: 100%;\n position: relative;\n height: 48px;\n line-height: 48px;\n background: var(--header-error-background);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n gap: 8px;\n}\n/*# sourceMappingURL=layout-header.component.css.map */\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, } from '@angular/core';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { NzLayoutModule } from 'ng-zorro-antd/layout';\r\n@Component({\r\n selector: 'ngm-header',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule, NzLayoutModule, NzIconModule],\r\n template: `\r\n <nz-header class=\"app-header\">\r\n <nz-icon nzType=\"disconnect\" nzTheme=\"outline\" />\r\n <span>连接已断开</span>\r\n </nz-header>\r\n `,\r\n styles: [\r\n `\r\n nz-header.app-header {\r\n padding: 0;\r\n width: 100%;\r\n position: relative;\r\n height: 48px;\r\n line-height: 48px;\r\n background: var(--header-error-background);\r\n color: #fff;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 18px;\r\n gap: 8px;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class LayoutHeaderComponent {\r\n\r\n}\r\n","<nz-sider\r\n class=\"menu-sidebar\"\r\n nzCollapsible\r\n nzWidth=\"256px\"\r\n nzBreakpoint=\"md\"\r\n [(nzCollapsed)]=\"isCollapsed\"\r\n [nzTrigger]=\"null\"\r\n>\r\n <div class=\"header\">\r\n <ngm-project-nav [isCollapsed]=\"isCollapsed()\"></ngm-project-nav>\r\n </div>\r\n <div class=\"content\">\r\n <ngm-menu [isCollapsed]=\"isCollapsed()\"></ngm-menu>\r\n <button\r\n nz-button\r\n nzType=\"link\"\r\n nz-dropdown\r\n [nzDropdownMenu]=\"menu\"\r\n nzPlacement=\"bottomRight\"\r\n nzTrigger=\"click\"\r\n class=\"more-btn\"\r\n >\r\n <nz-icon nzType=\"more\"></nz-icon>\r\n </button>\r\n </div>\r\n</nz-sider>\r\n\r\n<nz-dropdown-menu #menu=\"nzDropdownMenu\">\r\n <ul nz-menu>\r\n <li nz-menu-item class=\"item\">\r\n <a routerLink=\"/projects\">\r\n <nz-icon nzType=\"project\" nzTheme=\"outline\" />\r\n <span>项目管理</span>\r\n </a>\r\n </li>\r\n <li nz-menu-item class=\"item\">\r\n <a routerLink=\"/about\">\r\n <nz-icon nzType=\"info-circle\" nzTheme=\"outline\" />\r\n <span>关于</span>\r\n </a>\r\n </li>\r\n </ul>\r\n</nz-dropdown-menu>\r\n","/* src/app/layout/sidebar/layout-sidebar.component.less */\nhtml.default {\n}\nhtml.default :root {\n --app-gray: #e6f7ff;\n --app-primary: #1890ff;\n --app-primary-1: #e6f7ff;\n --app-primary-2: #bae7ff;\n --app-primary-3: #91d5ff;\n --app-primary-4: #69c0ff;\n --app-primary-5: #40a9ff;\n --app-primary-6: #1890ff;\n --app-text-color: rgba(0, 0, 0, 0.85);\n --app-text-secondary: rgba(0, 0, 0, 0.45);\n --text-color-primary: #1890ff;\n --app-component-bg: #fff;\n --app-border-color: #d9d9d9;\n --header-error-background: #ff4d4f;\n}\nhtml.default :root {\n --text-color-gray: #888;\n}\nhtml.default :host .sidebar-logo {\n background: var(--ant-primary-1);\n}\nhtml.default :host .sidebar-logo h1 {\n color: var(--ant-text-color);\n}\nhtml.dark {\n}\nhtml.dark :root {\n --text-color-gray: #bbb;\n}\nhtml.dark :host .sidebar-logo {\n background: var(--ant-primary-1);\n}\nhtml.dark :host .sidebar-logo h1 {\n color: var(--ant-text-color);\n}\n:host {\n display: block;\n box-sizing: border-box;\n position: relative;\n z-index: 10;\n box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);\n width: 256px;\n transition: all 0.2s;\n flex: 0 0 auto;\n}\n:host.collapsed {\n width: 80px;\n}\n.menu-sidebar {\n height: 100%;\n}\n.menu-sidebar ::ng-deep .ant-layout-sider-children {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n.menu-sidebar ::ng-deep .ant-menu-inline {\n border-right: none;\n}\n.menu-sidebar .header {\n flex: 0 0 auto;\n}\n.menu-sidebar .content {\n flex: 1 1 auto;\n height: 0;\n display: flex;\n flex-direction: column;\n}\n.menu-sidebar .content ngm-menu {\n flex: 1 1 auto;\n height: 0;\n}\n.menu-sidebar .content button {\n margin: 12px;\n flex: 0 0 auto;\n}\n.menu-sidebar .content button:hover {\n background-color: var(--app-primary-2);\n}\n.sidebar-logo {\n position: relative;\n height: 64px;\n padding-left: 24px;\n overflow: hidden;\n line-height: 64px;\n transition: all 0.3s;\n}\n.sidebar-logo img {\n display: inline-block;\n height: 32px;\n width: 32px;\n vertical-align: middle;\n}\n.sidebar-logo h1 {\n display: inline-block;\n margin: 0 0 0 20px;\n font-weight: 600;\n font-size: 14px;\n font-family:\n Avenir,\n Helvetica Neue,\n Arial,\n Helvetica,\n sans-serif;\n vertical-align: middle;\n}\n.item ::ng-deep .ant-menu-title-content {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.item a {\n color: var(--app-text-color);\n display: flex;\n width: 100%;\n align-items: center;\n gap: 8px;\n}\n/*# sourceMappingURL=layout-sidebar.component.css.map */\n","import { Injectable, signal } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class LayoutStateService {\r\n readonly isCollapsed = signal(false);\r\n}\r\n","<ul nz-menu nzMode=\"inline\" [nzInlineCollapsed]=\"isCollapsed\">\r\n <ng-container *ngTemplateOutlet=\"menuTpl; context: { $implicit: menus }\"></ng-container>\r\n <ng-template #menuTpl let-menus>\r\n @for (menu of menus(); track menu) {\r\n @if (!menu?.hidden){\r\n @if (!menu.children) {\r\n <li\r\n nz-menu-item\r\n [nzPaddingLeft]=\"menu.level * 24\"\r\n [nzDisabled]=\"menu.disabled\"\r\n [nzSelected]=\"menuService.isActive(menu.path!)\"\r\n (click)=\"menuService.clickMenu(menu)\"\r\n [nz-tooltip]=\"\r\n menu.taskCountBadge === true && runningTaskCount() > 0\r\n ? runningTaskCount() + '个任务正在运行'\r\n : null\r\n \"\r\n nzTooltipPlacement=\"right\"\r\n >\r\n @if (menu.icon) {\r\n <nz-icon [nzType]=\"menu.icon\" nzTheme=\"outline\" style=\"font-size: 18px\" />\r\n }\r\n <span>{{ menu.title }}</span>\r\n @if(menu.taskCountBadge === true && runningTaskCount() > 0) {\r\n <nz-badge style=\"margin-left: 12px\" nzStatus=\"processing\"></nz-badge>\r\n }\r\n </li>\r\n } @else {\r\n <li\r\n nz-submenu\r\n [nzPaddingLeft]=\"menu.level * 24\"\r\n [nzOpen]=\"menu.open\"\r\n [nzTitle]=\"menu.title\"\r\n [nzIcon]=\"menu.icon\"\r\n [nzDisabled]=\"menu.disabled\"\r\n >\r\n <ul>\r\n <ng-container *ngTemplateOutlet=\"menuTpl; context: { $implicit: menu.children }\" />\r\n </ul>\r\n </li>\r\n }\r\n } \r\n }\r\n </ng-template>\r\n</ul>\r\n","/* src/app/layout/menu/layout-menu.component.less */\n/*# sourceMappingURL=layout-menu.component.css.map */\n","import { computed, effect, inject, Injectable, signal } from '@angular/core';\r\nimport { Router, NavigationEnd } from '@angular/router';\r\nimport { filter } from 'rxjs/operators';\r\nimport { MenuItem } from './menu.model';\r\nimport { ProjectContextStore } from '@app/core/stores';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class MenuService {\r\n private projectContext = inject(ProjectContextStore);\r\n currentMenu = signal<MenuItem | null>(null);\r\n\r\n private router = inject(Router);\r\n\r\n private isHubProjectValid = this.projectContext.isHubProjectValid;\r\n\r\n private menus = signal<MenuItem[]>([\r\n { title: '仪表盘', path: '/dashboard', icon: 'dashboard', level: 1 },\r\n { title: '依赖', path: '/dependencies', icon: 'codepen', level: 1 },\r\n { title: '任务', path: '/tasks', icon: 'schedule', level: 1, taskCountBadge: true },\r\n { title: '配置', path: '/configuration', icon: 'setting', level: 1 },\r\n { title: 'API', path: '/rquest', icon: 'api', level: 1 },\r\n { title: 'Nginx', path: '/nginx', icon: 'deployment-unit', level: 1 },\r\n { title: '雪碧图', path: '/sprite', icon: 'smile', level: 1 },\r\n { title: '研发管理', path: '/rd', icon: 'rocket', level: 1, hidden: true },\r\n { title: '测试跟踪', path: '/issues', icon: 'bug', level: 1, hidden: true },\r\n // { title: '系统设置', path: '/settings', icon: 'setting', level: 1 },\r\n ]);\r\n\r\n // 当前菜单(所有)\r\n readonly currentMenus = computed(() => {\r\n return this.menus();\r\n });\r\n\r\n constructor() {\r\n // 初始化时也同步一次\r\n this.syncByUrl(this.router.url);\r\n // 路由变化时同步\r\n this.router.events\r\n .pipe(filter((e): e is NavigationEnd => e instanceof NavigationEnd))\r\n .subscribe((e) => this.syncByUrl(e.urlAfterRedirects));\r\n\r\n // 当 `isHubProjectValid` 变化时,自动更新 `menus` 中的隐藏状态\r\n effect((onCleanup) => {\r\n const isValid = this.isHubProjectValid();\r\n this.menus.update((menus) => {\r\n return menus.map((menu) => {\r\n if (menu.path && (menu.path.includes('/rd') || menu.path.includes('/issues'))) {\r\n return { ...menu, hidden: !isValid };\r\n }\r\n return menu;\r\n });\r\n });\r\n\r\n onCleanup(() => {});\r\n });\r\n }\r\n\r\n isActive(path: string) {\r\n // 子路由也算 active(/projects/1 命中 /projects)\r\n return this.router.isActive(path, {\r\n paths: 'subset',\r\n queryParams: 'ignored',\r\n fragment: 'ignored',\r\n matrixParams: 'ignored',\r\n });\r\n }\r\n\r\n clickMenu(item: MenuItem) {\r\n if (item.path) this.router.navigateByUrl(item.path);\r\n // 这里可以不 set,让路由事件来驱动;也可以保留,体验更“即时”\r\n this.currentMenu.set(item);\r\n }\r\n\r\n private syncByUrl(url: string) {\r\n const path = this.normalizeUrl(url);\r\n const matched = this.findBestMatch(this.menus(), path);\r\n this.currentMenu.set(matched);\r\n }\r\n\r\n private normalizeUrl(url: string) {\r\n // 去掉 query/hash\r\n return url.split('?')[0].split('#')[0];\r\n }\r\n\r\n private findBestMatch(menus: MenuItem[], currentPath: string): MenuItem | null {\r\n // 递归扁平化后,找“最长前缀匹配”的 menu(支持 /projects/123 也命中 /projects)\r\n const all = this.flatten(menus).filter((m) => !!m.path);\r\n\r\n let best: MenuItem | null = null;\r\n for (const m of all) {\r\n const p = m.path!;\r\n if (currentPath === p || currentPath.startsWith(p + '/')) {\r\n if (!best || p.length > best.path!.length) best = m;\r\n }\r\n }\r\n return best;\r\n }\r\n\r\n private flatten(menus: MenuItem[]): MenuItem[] {\r\n const out: MenuItem[] = [];\r\n for (const m of menus) {\r\n out.push(m);\r\n if (m.children?.length) out.push(...this.flatten(m.children));\r\n }\r\n return out;\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { TasksApiService } from './tasks-api.service';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { TaskRuntimeStore } from './task-runtime-store';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class TaskBootstrapServcie {\r\n private api = inject(TasksApiService);\r\n private runtimeStore = inject(TaskRuntimeStore);\r\n\r\n async initActiveSnapshot(): Promise<void> {\r\n const res = await firstValueFrom(this.api.active());\r\n for (const rt of res ?? []) {\r\n this.runtimeStore.setRuntime(rt);\r\n }\r\n }\r\n}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport { Component, computed, inject, Input, OnInit, signal } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { NzMenuModule } from 'ng-zorro-antd/menu';\r\nimport { MenuItem } from './menu.model';\r\nimport { MenuService } from './menu.service';\r\nimport { TaskBootstrapServcie } from '@pages/tasks/services/task-bootstrap.servcie';\r\nimport { NzTooltipModule } from 'ng-zorro-antd/tooltip';\r\nimport { TaskRuntimeStore } from '@pages/tasks/services/task-runtime-store';\r\nimport { NzBadgeModule } from 'ng-zorro-antd/badge';\r\n\r\n@Component({\r\n selector: 'ngm-menu',\r\n imports: [NgTemplateOutlet, NzMenuModule, NzIconModule, RouterModule, NzTooltipModule, NzBadgeModule],\r\n templateUrl: './layout-menu.component.html',\r\n styleUrl: './layout-menu.component.less',\r\n})\r\nexport class LayoutMenuComponent implements OnInit {\r\n @Input() isCollapsed = false;\r\n public menuService: MenuService = inject(MenuService);\r\n private taskBootstrap = inject(TaskBootstrapServcie);\r\n private runtimeStore = inject(TaskRuntimeStore);\r\n menus = this.menuService.currentMenus;\r\n\r\n readonly runningTaskCount = computed(() => this.runtimeStore.totalRunningCountSignal()());\r\n\r\n ngOnInit(): void {\r\n this.taskBootstrap.initActiveSnapshot();\r\n }\r\n}\r\n","<button\r\n class=\"project-quick-dropdown\"\r\n [class.collapsed]=\"isCollapsed()\"\r\n nz-button\r\n nzType=\"primary\"\r\n nzSize=\"large\"\r\n nz-dropdown\r\n [nzDropdownMenu]=\"menu\"\r\n nzTrigger=\"click\"\r\n [nzPlacement]=\"'bottomCenter'\"\r\n [nzOverlayStyle]=\"{ width: '100%' }\"\r\n>\r\n <span>{{ curProjectName() }}</span>\r\n @if(!isCollapsed()) {\r\n <nz-icon nzType=\"down\" />\r\n }\r\n</button>\r\n<nz-dropdown-menu #menu=\"nzDropdownMenu\" style=\"width: 100%\">\r\n <ul nz-menu>\r\n @if(currentProject()) {\r\n <li nz-menu-item class=\"item\">\r\n <nz-icon\r\n nzType=\"star\"\r\n [nzTheme]=\"currentProject()?.isFavorite ? 'fill' : 'outline'\"\r\n ></nz-icon>\r\n <span>添加/取消收藏</span>\r\n <nz-switch\r\n [nzDisabled]=\"!currentProject()?.id\"\r\n style=\"margin-left: 6px\"\r\n [ngModel]=\"currentProject()?.isFavorite\"\r\n (ngModelChange)=\"projectState.toggleFavorite(currentProject()?.id!)\"\r\n />\r\n </li>\r\n <li\r\n nz-menu-item\r\n class=\"item\"\r\n (click)=\"projectState.openInEditor(currentProject()?.id!)\"\r\n >\r\n <nz-icon nzType=\"code\"></nz-icon>\r\n <span>在编辑器中打开</span>\r\n </li>\r\n <li\r\n nz-menu-item\r\n class=\"item\"\r\n (click)=\"projectState.openEditModal(currentProject()!)\"\r\n >\r\n <nz-icon nzType=\"edit\"></nz-icon>\r\n <span>编辑项目</span>\r\n </li>\r\n <li nz-menu-item class=\"item\" (click)=\"openPersonalTokenModal()\">\r\n <nz-icon nzType=\"safety-certificate\"></nz-icon>\r\n <span>Hub V2 Personal Token</span>\r\n <span class=\"token-status\" [class.ok]=\"userStore.hasHubUserToken()\">\r\n {{ userStore.hasHubUserToken() ? '已配置' : '未配置' }}\r\n </span>\r\n </li>\r\n }\r\n <li nz-menu-divider></li>\r\n <li nz-menu-group nzTitle=\"收藏的项目\"></li>\r\n @for(item of favoriteProjects(); track item.id) {\r\n <li nz-menu-item class=\"item\" (click)=\"projectState.selectProject(item)\">\r\n <nz-icon nzType=\"star\" nzTheme=\"fill\"></nz-icon>\r\n <span>{{ item.name }}</span>\r\n </li>\r\n }\r\n <li nz-menu-divider></li>\r\n <li nz-menu-group nzTitle=\"最近使用\"></li>\r\n @for(item of recentProjects(); track item.id) {\r\n <li nz-menu-item class=\"item\" (click)=\"projectState.selectProject(item)\">\r\n <nz-icon nzType=\"star\" [nzTheme]=\"item.isFavorite ? 'fill' : 'outline'\"></nz-icon>\r\n <span>{{ item.name }}</span>\r\n </li>\r\n }\r\n <li nz-menu-divider></li>\r\n <li nz-menu-item class=\"item\">\r\n <a routerLink=\"/projects\">\r\n <nz-icon nzType=\"project\"></nz-icon>\r\n <span>项目管理</span>\r\n </a>\r\n </li>\r\n </ul>\r\n</nz-dropdown-menu>\r\n<app-project-edit-modal></app-project-edit-modal>\r\n<app-hub-v2-personal-token-modal\r\n [visible]=\"personalTokenModalVisible\"\r\n (visibleChange)=\"personalTokenModalVisible = $event\"\r\n></app-hub-v2-personal-token-modal>\r\n","/* src/app/layout/project-nav/layout-project-nav.component.less */\n:host {\n display: flex;\n padding: 16px;\n}\n:host .project-quick-dropdown {\n flex: 1;\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n justify-content: center;\n border-radius: 20px;\n font-weight: 500;\n}\n:host .project-quick-dropdown span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.item ::ng-deep .ant-menu-title-content {\n display: flex;\n align-items: center;\n gap: 8px;\n overflow: hidden;\n}\n.item ::ng-deep .ant-menu-title-content span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.item .token-status {\n margin-left: auto;\n font-size: 12px;\n color: #8c8c8c;\n}\n.item .token-status.ok {\n color: #52c41a;\n}\n.item a {\n color: var(--app-text-color);\n display: flex;\n width: 100%;\n align-items: center;\n gap: 8px;\n}\n/*# sourceMappingURL=layout-project-nav.component.css.map */\n","/* angular:styles/component:less;176225aba4e5f20ae3e3bc03c308fe46cf63f04bbdf3bb701c7b5e59fdda0190;D:\\ng-manager\\webapp\\src\\app\\pages\\projects\\project-list\\project-edit-modal.component.ts */\n.modal-body {\n display: grid;\n gap: 12px;\n}\n.section-title {\n font-size: 13px;\n font-weight: 600;\n opacity: 0.9;\n margin-top: 4px;\n}\n.hint {\n font-size: 12px;\n opacity: 0.75;\n}\n/*# sourceMappingURL=project-edit-modal.component.css.map */\n","import { CommonModule } from '@angular/common';\r\nimport { Component, inject } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NzButtonModule } from 'ng-zorro-antd/button';\r\nimport { NzInputModule } from 'ng-zorro-antd/input';\r\nimport { NzModalModule } from 'ng-zorro-antd/modal';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { ProjectStateService } from '../services/project.state.service';\r\n\r\n@Component({\r\n selector: 'app-project-edit-modal',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, NzInputModule, NzButtonModule, NzModalModule, NzIconModule],\r\n template: `\r\n <nz-modal\r\n [nzClosable]=\"false\"\r\n [nzMaskClosable]=\"false\"\r\n [nzVisible]=\"projectState.isEditModalVisible()\"\r\n nzTitle=\"编辑项目\"\r\n (nzOnCancel)=\"projectState.closeEditModal()\"\r\n >\r\n <ng-container *nzModalContent>\r\n @if(editingProject()){\r\n <div class=\"modal-body\">\r\n <label class=\"label\">名称</label>\r\n <nz-input-wrapper >\r\n <input\r\n nz-input\r\n [ngModel]=\"editingProject()!.name\"\r\n (ngModelChange)=\"projectState.editingProject()!.name = $event\"\r\n placeholder=\"请输入新名称\"\r\n (keydown.enter)=\"projectState.confirmEditProject()\"\r\n autofocus\r\n />\r\n <nz-icon nzInputPrefix nzType=\"folder\" nzTheme=\"fill\" />\r\n </nz-input-wrapper>\r\n <div class=\"hint\">输入新名称,将同步更新项目显示名称(不会重命名磁盘目录)。</div>\r\n <label class=\"label\">Git仓库地址</label>\r\n <nz-input-wrapper >\r\n <input\r\n nz-input\r\n [ngModel]=\"editingProject()!.repoPageUrl\"\r\n (ngModelChange)=\"projectState.editingProject()!.repoPageUrl = $event\"\r\n placeholder=\"Git仓库地址\"\r\n />\r\n <nz-icon nzInputPrefix nzType=\"github\" nzTheme=\"outline\" />\r\n </nz-input-wrapper>\r\n\r\n <div class=\"section-title\">NGM Hub V2</div>\r\n <label class=\"label\">Hub 地址</label>\r\n <nz-input-wrapper>\r\n <input\r\n nz-input\r\n [ngModel]=\"editingProject()!.hubV2.baseUrl\"\r\n (ngModelChange)=\"projectState.editingProject()!.hubV2.baseUrl = $event\"\r\n placeholder=\"例如:http://192.168.1.31:7008\"\r\n />\r\n <nz-icon nzInputPrefix nzType=\"link\" nzTheme=\"outline\" />\r\n </nz-input-wrapper>\r\n\r\n <label class=\"label\">Project Key</label>\r\n <nz-input-wrapper>\r\n <input\r\n nz-input\r\n [ngModel]=\"editingProject()!.hubV2.projectKey\"\r\n (ngModelChange)=\"projectState.editingProject()!.hubV2.projectKey = $event\"\r\n placeholder=\"例如:NGM\"\r\n />\r\n <nz-icon nzInputPrefix nzType=\"key\" nzTheme=\"outline\" />\r\n </nz-input-wrapper>\r\n\r\n <label class=\"label\">API Token</label>\r\n <nz-input-wrapper>\r\n <input\r\n nz-input\r\n type=\"password\"\r\n [ngModel]=\"editingProject()!.hubV2.token\"\r\n (ngModelChange)=\"projectState.editingProject()!.hubV2.token = $event\"\r\n placeholder=\"粘贴 hub-v2 项目 token\"\r\n />\r\n <nz-icon nzInputPrefix nzType=\"safety-certificate\" nzTheme=\"outline\" />\r\n </nz-input-wrapper>\r\n <div class=\"hint\">以上配置会写入项目 env:NGM_HUB_V2_BASE_URL / NGM_HUB_V2_PROJECT_KEY / NGM_HUB_V2_TOKEN。</div>\r\n\r\n <!-- <label class=\"label\">原尺寸图标SVN地址</label>\r\n <nz-input-wrapper >\r\n <input\r\n nz-input\r\n [ngModel]=\"editingProject()!.iconsRepoUrl\"\r\n (ngModelChange)=\"projectState.editingProject()!.iconsRepoUrl = $event\"\r\n placeholder=\"原尺寸图标SVN地址\"\r\n />\r\n <nz-icon nzInputPrefix nzType=\"proj:svn\" nzTheme=\"outline\" />\r\n </nz-input-wrapper>\r\n <div class=\"hint\">输入项目的原尺寸图标SVN地址,用于制作项目所需雪碧图。</div>\r\n <div class=\"hint\">示例:svn://192.168.1.10/项目管理/xx项目/02.项目文档/05.系统设计/02-原型设计/02-UI设计效果图&切图/3-原尺寸图标</div> -->\r\n\r\n <label class=\"label\">描述</label>\r\n <nz-input-wrapper>\r\n <textarea\r\n nz-input\r\n rows=\"3\"\r\n style=\"resize: none;\"\r\n [ngModel]=\"editingProject()!.description\"\r\n (ngModelChange)=\"projectState.editingProject()!.description = $event\"\r\n placeholder=\"请输入新描述\"\r\n (keydown.enter)=\"projectState.confirmEditProject()\"\r\n ></textarea>\r\n </nz-input-wrapper>\r\n </div>\r\n }\r\n </ng-container>\r\n\r\n <ng-container *nzModalFooter>\r\n <button nz-button (click)=\"projectState.closeEditModal()\">取消</button>\r\n <button\r\n nz-button\r\n nzType=\"primary\"\r\n (click)=\"projectState.confirmEditProject()\"\r\n [disabled]=\"!projectState.editingProject()?.name?.trim() || projectState.isEditSaving()\"\r\n [nzLoading]=\"projectState.isEditSaving()\"\r\n >\r\n 确定\r\n </button>\r\n </ng-container>\r\n </nz-modal>\r\n\r\n `,\n styles: [`\n .modal-body { display: grid; gap: 12px; }\n .section-title { font-size: 13px; font-weight: 600; opacity: .9; margin-top: 4px; }\n .hint { font-size: 12px; opacity: .75; }\n `],\n})\nexport class ProjectEditModalComponent {\n projectState = inject(ProjectStateService)\n editingProject = this.projectState.editingProject;\n\n}\n","/* angular:styles/component:less;11d4227e1814fc017921dae35e531cb63e83883c9563c6d511773165dc9052d7;D:\\ng-manager\\webapp\\src\\app\\layout\\project-nav\\hub-v2-personal-token-modal.component.ts */\n.modal-body {\n display: grid;\n gap: 12px;\n}\n.hint {\n font-size: 12px;\n opacity: 0.75;\n}\n/*# sourceMappingURL=hub-v2-personal-token-modal.component.css.map */\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NzButtonModule } from 'ng-zorro-antd/button';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { NzInputModule } from 'ng-zorro-antd/input';\r\nimport { NzModalModule } from 'ng-zorro-antd/modal';\r\nimport { ProjectStateService } from '@pages/projects/services/project.state.service';\r\nimport { UserStore } from '@app/core/stores';\r\n\r\n@Component({\r\n selector: 'app-hub-v2-personal-token-modal',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, NzButtonModule, NzIconModule, NzInputModule, NzModalModule],\r\n template: `\r\n <nz-modal\r\n [nzVisible]=\"visible\"\r\n [nzClosable]=\"false\"\r\n [nzMaskClosable]=\"false\"\r\n nzTitle=\"Hub V2 Personal Token(全局)\"\r\n [nzWidth]=\"560\"\r\n (nzOnCancel)=\"close()\"\r\n >\r\n <ng-container *nzModalContent>\r\n <div class=\"modal-body\">\r\n <label class=\"label\">Personal Token</label>\r\n <nz-input-wrapper>\r\n <input nz-input type=\"password\" [(ngModel)]=\"draft\" placeholder=\"粘贴 ngm_uptk_xxx\" />\r\n <nz-icon nzInputPrefix nzType=\"safety-certificate\" nzTheme=\"outline\" />\r\n </nz-input-wrapper>\r\n <div class=\"hint\">仅保存在当前浏览器本地,用于 webapp 调用 Hub V2 /api/personal。</div>\r\n </div>\r\n </ng-container>\r\n <ng-container *nzModalFooter>\r\n <button nz-button (click)=\"clear()\">清空</button>\r\n <button nz-button (click)=\"close()\">取消</button>\r\n <button nz-button nzType=\"primary\" (click)=\"save()\">保存</button>\r\n </ng-container>\r\n </nz-modal>\r\n `,\r\n styles: [\r\n `\r\n .modal-body {\r\n display: grid;\r\n gap: 12px;\r\n }\r\n .hint {\r\n font-size: 12px;\r\n opacity: 0.75;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class HubV2PersonalTokenModalComponent {\r\n private userStore = inject(UserStore);\r\n\r\n @Input() visible = false;\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n\r\n draft = '';\r\n\r\n open(): void {\r\n this.userStore.ensureUserLoaded();\r\n this.draft = this.userStore.hubUserToken()!;\r\n }\r\n\r\n close(): void {\r\n this.visibleChange.emit(false);\r\n }\r\n\r\n save(): void {\r\n this.userStore.setHubUserToken(this.draft);\r\n this.userStore.loadCurrentUser();\r\n this.visibleChange.emit(false);\r\n }\r\n\r\n clear(): void {\r\n this.userStore.setHubUserToken('');\r\n this.draft = '';\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, inject, model, OnInit, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\nimport { ProjectStateService } from '@pages/projects/services/project.state.service';\r\nimport { NzButtonModule } from 'ng-zorro-antd/button';\r\nimport { NzDropDownModule } from 'ng-zorro-antd/dropdown';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { NzMenuModule } from 'ng-zorro-antd/menu';\r\nimport { NzSwitchModule } from 'ng-zorro-antd/switch';\r\nimport { ProjectEditModalComponent } from '@pages/projects/project-list/project-edit-modal.component';\r\nimport { HubV2PersonalTokenModalComponent } from './hub-v2-personal-token-modal.component';\r\nimport { ProjectContextStore } from '@app/core/stores/project-context/project-context.store';\r\nimport { UserStore } from '@app/core/stores';\r\n\r\n@Component({\r\n selector: 'ngm-project-nav',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NzDropDownModule,\r\n NzMenuModule,\r\n NzIconModule,\r\n NzSwitchModule,\r\n NzButtonModule,\r\n RouterModule,\r\n ProjectEditModalComponent,\r\n HubV2PersonalTokenModalComponent,\r\n ],\r\n templateUrl: './layout-project-nav.component.html',\r\n styleUrl: './layout-project-nav.component.less',\r\n})\r\nexport class LayoutProjectNavComponent implements OnInit {\r\n readonly userStore = inject(UserStore);\r\n readonly projectContext = inject(ProjectContextStore);\r\n readonly projectState = inject(ProjectStateService);\r\n\r\n isCollapsed = model(false);\r\n personalTokenModalVisible = false;\r\n @ViewChild(HubV2PersonalTokenModalComponent)\r\n personalTokenModal?: HubV2PersonalTokenModalComponent;\r\n\r\n readonly currentProject = this.projectContext.currentProject;\r\n readonly favoriteProjects = this.projectContext.favoriteProjects;\r\n readonly recentProjects = this.projectContext.recentProjects;\r\n\r\n readonly curProjectName = computed(() => {\r\n const name = this.projectContext.currentProject()?.name || '请选择项目';\r\n return this.isCollapsed() ? name?.charAt(0).toUpperCase() : name;\r\n });\r\n\r\n ngOnInit() {\r\n this.projectContext.loadProjects().subscribe();\r\n this.userStore.ensureHubUserTokenLoaded();\r\n }\r\n\r\n openPersonalTokenModal(): void {\r\n this.personalTokenModalVisible = true;\r\n queueMicrotask(() => this.personalTokenModal?.open());\r\n }\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { Router, RouterModule } from '@angular/router';\r\nimport { NzButtonModule } from \"ng-zorro-antd/button\";\r\nimport { NzDropDownModule } from 'ng-zorro-antd/dropdown';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { NzLayoutModule } from 'ng-zorro-antd/layout';\r\nimport { NzMenuModule } from 'ng-zorro-antd/menu';\r\nimport { LayoutStateService } from '../layout.state.service';\r\nimport { LayoutMenuComponent } from '../menu/layout-menu.component';\r\nimport { LayoutProjectNavComponent } from \"../project-nav/layout-project-nav.component\";\r\n\r\n@Component({\r\n selector: 'ngm-sidebar',\r\n imports: [\r\n NzLayoutModule,\r\n NzIconModule,\r\n NzMenuModule,\r\n LayoutMenuComponent,\r\n LayoutProjectNavComponent,\r\n NzButtonModule,\r\n NzDropDownModule,\r\n RouterModule,\r\n ],\r\n templateUrl: './layout-sidebar.component.html',\r\n styleUrl: './layout-sidebar.component.less',\r\n host: {\r\n '[class.collapsed]': 'isCollapsed()',\r\n '[class.ant-layout-sider]': 'true'\r\n }\r\n})\r\nexport class LayoutSidebarComponent {\r\n public router: Router = inject(Router)\r\n private state: LayoutStateService = inject(LayoutStateService);\r\n isCollapsed = this.state.isCollapsed;\r\n constructor() { }\r\n isActive(path: string) {\r\n return this.router.url.startsWith(path);\r\n }\r\n}\r\n","import { Component, computed, effect, inject, signal, Signal } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { WsClientService, WsState } from '@app/core/ws';\r\nimport { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { NzLayoutModule } from 'ng-zorro-antd/layout';\r\nimport { NzMenuModule } from 'ng-zorro-antd/menu';\r\nimport { LayoutFooterComponent } from \"./footer/layout-footer.component\";\r\nimport { LayoutHeaderComponent } from \"./header/layout-header.component\";\r\nimport { LayoutSidebarComponent } from './sidebar/layout-sidebar.component';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\n@Component({\r\n selector: 'ngm-layout',\r\n imports: [\r\n RouterModule,\r\n NzLayoutModule,\r\n NzBreadCrumbModule,\r\n NzIconModule,\r\n NzMenuModule,\r\n LayoutSidebarComponent,\r\n LayoutHeaderComponent,\r\n LayoutFooterComponent\r\n ],\r\n templateUrl: './layout.component.html',\r\n styleUrl: './layout.component.less',\r\n})\r\nexport class LayoutComponent {\r\n private ws = inject(WsClientService);\r\n\r\n constructor() {\r\n this.ws.connect();\r\n effect(() => this.syncVisible());\r\n }\r\n\r\n readonly wsState: Signal<WsState> = toSignal(this.ws.stateChanges(), {\r\n initialValue: 'idle' as WsState,\r\n });\r\n\r\n /** 规则:非 open 展示(逻辑态) */\r\n private readonly shouldShow = computed(() => this.wsState() !== 'open');\r\n\r\n /** DOM 是否渲染(含离场期间) */\r\n readonly visible = signal(false);\r\n /** 是否处于离场动画 */\r\n readonly leaving = signal(false);\r\n\r\n /** 给“正常启动瞬间 connecting”一个免闪窗口 */\r\n private readonly SHOW_DELAY_MS = 200;\r\n private showTimer?: any;\r\n\r\n /** 防止 transitionend/animationend 触发多次导致重复 set */\r\n private removed = false;\r\n\r\n private syncVisible() {\r\n const show = this.shouldShow();\r\n\r\n if (show) {\r\n this.removed = false;\r\n if (this.visible()) {\r\n this.leaving.set(false);\r\n return;\r\n }\r\n this.startShowDelay();\r\n return;\r\n }\r\n\r\n // open:触发离场\r\n this.clearShowDelay();\r\n if (this.visible() && !this.leaving()) {\r\n this.leaving.set(true);\r\n }\r\n }\r\n\r\n private startShowDelay() {\r\n if (this.showTimer) return;\r\n this.showTimer = setTimeout(() => {\r\n this.showTimer = undefined;\r\n if (this.shouldShow()) {\r\n this.visible.set(true);\r\n this.leaving.set(false);\r\n this.removed = false;\r\n }\r\n }, this.SHOW_DELAY_MS);\r\n }\r\n\r\n private clearShowDelay() {\r\n if (this.showTimer) {\r\n clearTimeout(this.showTimer);\r\n this.showTimer = undefined;\r\n }\r\n }\r\n\r\n /** 内层动画结束(opacity/transform)*/\r\n onInnerAnimationEnd(evt: AnimationEvent) {\r\n // 不做移除,真正的 DOM 移除交给 wrap 的 transitionend(height 归零)\r\n }\r\n\r\n /** 外层高度 transition 结束:此时高度已经 0,再移除 DOM,不会“瞬间上移” */\r\n onWrapTransitionEnd(evt: TransitionEvent) {\r\n if (evt.propertyName !== 'height') return;\r\n if (this.removed) return;\r\n if (!this.shouldShow() && this.leaving()) {\r\n this.removed = true;\r\n this.visible.set(false);\r\n this.leaving.set(false);\r\n }\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { ProjectIconRegistry } from './icons/project-icon-registry';\r\nimport { LayoutComponent } from './layout/layout.component';\r\n\r\n@Component({\r\n selector: 'app-root',\r\n imports: [LayoutComponent],\r\n template: `<ngm-layout></ngm-layout>`,\r\n styles: [\r\n `:host {\r\n display: block;\r\n height: 100vh;\r\n }`,\r\n ]\r\n})\r\nexport class App {\r\n constructor(reg: ProjectIconRegistry) {\r\n reg.init();\r\n }\r\n}\r\n","import { bootstrapApplication } from '@angular/platform-browser';\r\nimport { appConfig } from './app/app.config';\r\nimport { App } from './app/app';\r\n\r\nbootstrapApplication(App, appConfig)\r\n .catch((err) => console.error(err));\r\n"],"mappings":"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","names":["ThemeType","ThemeService","ProjectIconRegistry","layout_component_default","system_log_component_default","SyslogStreamService","SystemLogDrawerComponent","LayoutFooterComponent","LayoutHeaderComponent","layout_sidebar_component_default","LayoutStateService","layout_menu_component_default","MenuService","TaskBootstrapServcie","LayoutMenuComponent","layout_project_nav_component_default","ProjectEditModalComponent","HubV2PersonalTokenModalComponent","LayoutProjectNavComponent","LayoutSidebarComponent","LayoutComponent","App"],"x_google_ignoreList":[0,1,11]}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["src/app/shared/components/markdown-viewer/markdown-viewer.component.less"],
|
|
4
|
-
"sourcesContent": [" :host {\n display: block;\n width: 100%;\n\n .markdown-viewer {\n font-size: 14px;\n line-height: 1.8;\n color: var(--text-primary, #262626);\n word-break: break-word;\n\n .markdown-layout {\n display: block;\n position: relative;\n }\n\n .markdown-layout.has-toc {\n display: grid;\n grid-template-columns: minmax(0, 1fr) 280px;\n gap: 20px;\n align-items: start;\n }\n\n .markdown-content {\n min-width: 0;\n order: 1;\n display: flow-root;\n }\n\n .markdown-toc-floating {\n position: sticky;\n top: 8px;\n z-index: 4;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 8px;\n float: right;\n clear: right;\n margin: 0 0 8px 16px;\n width: fit-content;\n }\n\n .markdown-toc-floating__toggle {\n height: 30px;\n min-width: 64px;\n padding: 0 10px;\n border: 1px solid var(--border-color-soft, #d9dde6);\n border-radius: 999px;\n background: var(--surface-elevated, rgba(255, 255, 255, 0.92));\n color: var(--text-secondary, #475569);\n font-size: 12px;\n line-height: 28px;\n cursor: pointer;\n box-shadow: 0 6px 16px rgba(15, 23, 42, 0.1);\n backdrop-filter: blur(4px);\n }\n\n .markdown-toc-floating__toggle:hover {\n color: var(--text-primary, #0f172a);\n }\n\n .markdown-toc--floating {\n width: 220px;\n max-height: min(55vh, 420px);\n overflow: auto;\n margin: 0;\n padding: 10px 0 10px 14px;\n border-radius: 14px;\n border: 1px solid var(--border-color-soft, #e5e6eb);\n background: var(--surface-elevated, rgba(255, 255, 255, 0.96));\n box-shadow: 0 14px 28px rgba(15, 23, 42, 0.16);\n position: static;\n }\n\n .markdown-toc.markdown-toc--floating {\n position: static;\n top: auto;\n order: initial;\n border-left: 0;\n padding-left: 14px;\n }\n\n .markdown-toc {\n margin: 0;\n padding: 6px 0 6px 18px;\n border-left: 1px solid var(--border-color-soft, #e5e6eb);\n position: sticky;\n top: 76px;\n order: 2;\n min-width: 0;\n max-height: min(68vh, calc(100vh - 140px));\n overflow: auto;\n }\n\n .markdown-toc__title {\n margin: 0 0 10px;\n font-size: 14px;\n font-weight: 700;\n color: var(--text-heading, #1f2937);\n }\n\n .markdown-toc__list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: grid;\n gap: 2px;\n }\n\n .markdown-toc__item {\n position: relative;\n width: 100%;\n min-height: 30px;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: var(--text-muted, #64748b);\n text-align: left;\n font-size: 13px;\n line-height: 1.45;\n padding: 4px 8px 4px 10px;\n cursor: pointer;\n white-space: normal;\n word-break: break-word;\n overflow-wrap: anywhere;\n }\n\n .markdown-toc__item:hover {\n background: transparent;\n color: var(--text-primary, #0f172a);\n }\n\n .markdown-toc__item.is-active {\n color: var(--primary-500, #2563eb);\n font-weight: 600;\n }\n\n .markdown-toc__item.is-active::after {\n content: '';\n position: absolute;\n left: 2px;\n top: 7px;\n bottom: 7px;\n width: 2px;\n border-radius: 999px;\n background: var(--primary-500, #2563eb);\n }\n\n .markdown-toc--floating .markdown-toc__item {\n padding-left: 10px;\n }\n\n ::ng-deep h1,\n ::ng-deep h2,\n ::ng-deep h3,\n ::ng-deep h4,\n ::ng-deep h5,\n ::ng-deep h6 {\n margin: 1.2em 0 0.6em;\n font-weight: 600;\n line-height: 1.4;\n word-break: break-word;\n overflow-wrap: anywhere;\n }\n\n ::ng-deep h1 {\n font-size: 28px;\n }\n\n ::ng-deep h2 {\n font-size: 24px;\n }\n\n ::ng-deep h3 {\n font-size: 20px;\n }\n\n ::ng-deep h1,\n ::ng-deep h2,\n ::ng-deep h3,\n ::ng-deep h4,\n ::ng-deep h5,\n ::ng-deep h6 {\n scroll-margin-top: 88px;\n }\n\n ::ng-deep p {\n margin: 0 0 12px;\n }\n\n ::ng-deep ul,\n ::ng-deep ol {\n margin: 0 0 12px;\n padding-left: 24px;\n }\n\n ::ng-deep li {\n margin: 4px 0;\n }\n\n ::ng-deep blockquote {\n margin: 0 0 12px;\n padding: 8px 12px;\n color: #595959;\n border-left: 4px solid #d9d9d9;\n background: #fafafa;\n }\n\n ::ng-deep pre {\n overflow: auto;\n padding: 12px 14px;\n border-radius: 8px;\n background: #f6f8fa;\n border: 1px solid var(--border-color-soft, #e5e6eb);\n }\n\n ::ng-deep code {\n font-family: Consolas, 'Courier New', monospace;\n }\n\n ::ng-deep :not(pre)>code {\n padding: 2px 6px;\n border-radius: 6px;\n background: var(--bg-subtle, #f5f7fa);\n border: 1px solid var(--border-color-soft, #e5e6eb);\n color: var(--text-primary, #262626);\n font-size: 13px;\n }\n\n ::ng-deep pre code {\n background: transparent;\n border: 0;\n padding: 0;\n color: inherit;\n font-size: 13px;\n line-height: 1.7;\n }\n\n ::ng-deep table {\n width: 100%;\n margin: 0 0 12px;\n border-collapse: collapse;\n }\n\n ::ng-deep th,\n ::ng-deep td {\n padding: 8px 10px;\n border: 1px solid #e5e6eb;\n text-align: left;\n }\n\n ::ng-deep img {\n display: block;\n max-width: 100%;\n width: auto;\n max-height: min(32vh, 100px);\n margin: 12px 0;\n border-radius: 10px;\n object-fit: contain;\n border: 1px solid var(--border-color-soft, #e5e6eb);\n background: var(--bg-elevated, #fff);\n cursor: zoom-in;\n box-shadow: 0 4px 12px rgba(15, 23, 42, 0.08);\n }\n\n ::ng-deep a {\n color: #1677ff;\n text-decoration: none;\n }\n\n ::ng-deep a:hover {\n text-decoration: underline;\n }\n\n :host-context(html[data-theme='dark']) ::ng-deep pre {\n background: #0f172a;\n border-color: rgba(148, 163, 184, 0.24);\n }\n\n :host-context(html[data-theme='dark']) ::ng-deep :not(pre)>code {\n background: rgba(148, 163, 184, 0.14);\n border-color: rgba(148, 163, 184, 0.24);\n color: #e2e8f0;\n }\n\n :host-context(html[data-theme='dark']) .markdown-toc,\n :host-context(html.dark) .markdown-toc,\n :host-context(body[data-theme='dark']) .markdown-toc {\n border-color: rgba(148, 163, 184, 0.24);\n background: transparent;\n }\n\n :host-context(html[data-theme='dark']) .markdown-toc--floating,\n :host-context(html.dark) .markdown-toc--floating,\n :host-context(body[data-theme='dark']) .markdown-toc--floating {\n border-color: rgba(148, 163, 184, 0.28);\n background: #162033 !important;\n box-shadow: 0 14px 28px rgba(2, 6, 23, 0.45);\n }\n\n :host-context(html[data-theme='dark']) .markdown-toc-floating__toggle,\n :host-context(html.dark) .markdown-toc-floating__toggle,\n :host-context(body[data-theme='dark']) .markdown-toc-floating__toggle {\n border-color: rgba(148, 163, 184, 0.3) !important;\n background: #162033 !important;\n color: #e2e8f0 !important;\n box-shadow: 0 10px 22px rgba(2, 6, 23, 0.42);\n }\n\n :host-context(html[data-theme='dark']) .markdown-toc__title,\n :host-context(html.dark) .markdown-toc__title,\n :host-context(body[data-theme='dark']) .markdown-toc__title {\n color: #e2e8f0;\n }\n\n :host-context(html[data-theme='dark']) .markdown-toc__item,\n :host-context(html.dark) .markdown-toc__item,\n :host-context(body[data-theme='dark']) .markdown-toc__item {\n color: #cbd5e1;\n }\n\n :host-context(html[data-theme='dark']) .markdown-toc__item:hover,\n :host-context(html.dark) .markdown-toc__item:hover,\n :host-context(body[data-theme='dark']) .markdown-toc__item:hover {\n color: #f1f5f9;\n }\n\n :host-context(html[data-theme='dark']) .markdown-toc__item.is-active,\n :host-context(html.dark) .markdown-toc__item.is-active,\n :host-context(body[data-theme='dark']) .markdown-toc__item.is-active {\n color: #60a5fa;\n }\n\n @media (max-width: 1024px) {\n .markdown-layout.has-toc {\n grid-template-columns: 1fr;\n }\n\n .markdown-toc {\n position: static;\n margin-bottom: 12px;\n }\n\n .markdown-toc-floating {\n position: static;\n margin-bottom: 8px;\n align-items: flex-start;\n }\n\n .markdown-toc--floating {\n width: 100%;\n max-height: none;\n }\n }\n\n }\n }\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["src/app/pages/dashboard/components/widgets/news-feed/news-feed-widget.component.less"],
|
|
4
|
-
"sourcesContent": [".news-feed-widget {\n padding: 8px 12px;\n height: 100%;\n overflow: auto;\n}\n\n.empty {\n display: flex;\n flex-direction: column;\n gap: 8px;\n align-items: center;\n justify-content: center;\n height: 100%;\n opacity: .75;\n}\n\n.list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.row {\n display: block;\n padding: 8px;\n border-radius: 8px;\n text-decoration: none;\n border: 1px solid rgba(0, 0, 0, .06);\n}\n\n.row:hover {\n background: rgba(0, 0, 0, .02);\n}\n\n.t {\n font-size: 13px;\n line-height: 1.3;\n color: rgba(0, 0, 0, .88);\n}\n\n.m {\n margin-top: 4px;\n display: flex;\n gap: 10px;\n font-size: 12px;\n color: rgba(0, 0, 0, .45);\n}\n\n.error {\n display: flex;\n gap: 8px;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: #d4380d;\n p{\n width: 100%;\n white-space: pre-wrap;\n word-break: break-word;\n }\n}\n\n.loading {\n display: flex;\n gap: 8px;\n align-items: center;\n opacity: .75;\n}\n\n.modal-body {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n}\n\n.modal-body label {\n flex: 0 0 auto;\n margin-right: 16px;\n display: inline-block;\n width: 100px;\n}\n\n.modal-body input {\n flex: 1;\n margin-left: 16px;\n}"],
|
|
5
|
-
"mappings": ";AAAA,CAAA;AACI,WAAA,IAAA;AACA,UAAA;AACA,YAAA;;AAGJ,CAAA;AACI,WAAA;AACA,kBAAA;AACA,OAAA;AACA,eAAA;AACA,mBAAA;AACA,UAAA;AACA,WAAA;;AAGJ,CAAA;AACI,WAAA;AACA,kBAAA;AACA,OAAA;;AAGJ,CAAA;AACI,WAAA;AACA,WAAA;AACA,iBAAA;AACA,mBAAA;AACA,UAAA,IAAA,MAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA;;AAGJ,CARA,GAQI;AACA,cAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA;;AAGJ,CAAA;AACI,aAAA;AACA,eAAA;AACA,SAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA;;AAGJ,CAAA;AACI,cAAA;AACA,WAAA;AACA,OAAA;AACA,aAAA;AACA,SAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA;;AAGJ,CAAA;AACI,WAAA;AACA,OAAA;AACA,kBAAA;AACA,eAAA;AACA,mBAAA;AACA,SAAA;;AANJ,CAAA,MAOI;AACI,SAAA;AACA,eAAA;AACA,cAAA;;AAIR,CAAA;AACI,WAAA;AACA,OAAA;AACA,eAAA;AACA,WAAA;;AAGJ,CAAA;AACI,WAAA;AACA,kBAAA;AACA,mBAAA;AACA,eAAA;;AAGJ,CAPA,WAOY;AACR,QAAA,EAAA,EAAA;AACA,gBAAA;AACA,WAAA;AACA,SAAA;;AAGJ,CAdA,WAcY;AACR,QAAA;AACA,eAAA;;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["ng-devtool.component.ts"],
|
|
4
|
-
"sourcesContent": ["\n button[nz-button] {\n border-radius: 18px;\n }\n .install-popover-content {\n width: 440px;\n padding: 12px;\n\n .img-wrapper {\n width: 400px;\n margin: 0 auto;\n border-radius: 8px;\n overflow: hidden;\n\n img {\n width: 100%;\n max-height: auto;\n }\n }\n\n .actions {\n margin-top: 12px;\n padding: 0 8px;\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n }\n}\n "],
|
|
5
|
-
"mappings": ";AACE,MAAM,CAAA;AACJ,iBAAA;;AAEA,CAAA;AACA,SAAA;AACA,WAAA;;AAFA,CAAA,wBAIA,CAAA;AACI,SAAA;AACA,UAAA,EAAA;AACA,iBAAA;AACA,YAAA;;AARJ,CAAA,wBAIA,CAAA,YAMI;AACI,SAAA;AACA,cAAA;;AAZR,CAAA,wBAgBA,CAAA;AACI,cAAA;AACA,WAAA,EAAA;AACA,WAAA;AACA,mBAAA;AACA,OAAA;;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["nginx-config-editor.component.ts"],
|
|
4
|
-
"sourcesContent": ["\n .config-editor {\n display: flex;\n flex-direction: column;\n height: 100%;\n border: 1px solid #f0f0f0;\n border-radius: 8px;\n overflow: hidden;\n }\n\n .editor-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 12px;\n padding: 12px 16px;\n background: #fafafa;\n border-bottom: 1px solid #f0f0f0;\n\n .toolbar-left {\n min-width: 0;\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n flex-wrap: wrap;\n gap: 10px;\n }\n\n .file-info {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: var(--nginx-font-size-base, 14px);\n min-width: 0;\n\n .file-path {\n font-family: var(\n --nginx-font-family-mono,\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n 'Liberation Mono',\n monospace\n );\n color: rgba(0, 0, 0, 0.65);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n\n .file-selector {\n width: min(560px, 100%);\n }\n\n .editor-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n }\n }\n\n .editor-container {\n flex: 1;\n min-height: 520px;\n position: relative;\n }\n\n .code-editor {\n display: block;\n min-height: 520px;\n width: 100%;\n border: 1px solid #d9d9d9;\n }\n\n .validation-result {\n padding: 12px 16px;\n background: #f6ffed;\n border-top: 1px solid #b7eb8f;\n display: flex;\n align-items: center;\n gap: 8px;\n\n &.error {\n background: #fff2f0;\n border-top-color: #ffccc7;\n }\n\n .success-icon {\n color: #52c41a;\n }\n\n .error-icon {\n color: #ff4d4f;\n }\n\n .error-list,\n .warning-list {\n margin-top: 8px;\n width: 100%;\n\n .error-item {\n color: #ff4d4f;\n font-size: var(--nginx-font-size-sm, 12px);\n padding: 4px 0;\n font-family: var(\n --nginx-font-family-mono,\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n 'Liberation Mono',\n monospace\n );\n }\n\n .warning-item {\n color: #faad14;\n font-size: var(--nginx-font-size-sm, 12px);\n padding: 4px 0;\n font-family: var(\n --nginx-font-family-mono,\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n 'Liberation Mono',\n monospace\n );\n }\n }\n }\n\n :host ::ng-deep nz-code-editor.code-editor.ant-code-editor {\n width: 100%;\n min-height: 520px !important;\n display: block;\n }\n\n :host ::ng-deep nz-code-editor.code-editor .monaco-diff-editor {\n min-height: 520px;\n }\n "],
|
|
5
|
-
"mappings": ";AACI,CAAA;AACE,WAAA;AACA,kBAAA;AACA,UAAA;AACA,UAAA,IAAA,MAAA;AACA,iBAAA;AACA,YAAA;;AAGF,CAAA;AACE,WAAA;AACA,mBAAA;AACA,eAAA;AACA,OAAA;AACA,WAAA,KAAA;AACA,cAAA;AACA,iBAAA,IAAA,MAAA;;AAPF,CAAA,eASE,CAAA;AACE,aAAA;AACA,QAAA;AACA,WAAA;AACA,kBAAA;AACA,eAAA;AACA,aAAA;AACA,OAAA;;AAhBJ,CAAA,eAmBE,CAAA;AACE,WAAA;AACA,eAAA;AACA,OAAA;AACA,aAAW,IAAA,sBAAA,EAAA;AACX,aAAA;;AAxBJ,CAAA,eAmBE,CAAA,UAOE,CAAA;AACE,eAAa,IAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAOX,iBAAA,EAAA;AAGF,SAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA;AACA,YAAA;AACA,iBAAA;AACA,eAAA;;AAxCN,CAAA,eA4CE,CAAA;AACE,SAAO,IAAA,KAAA,EAAA;;AA7CX,CAAA,eAgDE,CAAA;AACE,WAAA;AACA,OAAA;AACA,eAAA;;AAIJ,CAAA;AACE,QAAA;AACA,cAAA;AACA,YAAA;;AAGF,CAAA;AACE,WAAA;AACA,cAAA;AACA,SAAA;AACA,UAAA,IAAA,MAAA;;AAGF,CAAA;AACE,WAAA,KAAA;AACA,cAAA;AACA,cAAA,IAAA,MAAA;AACA,WAAA;AACA,eAAA;AACA,OAAA;;AAEA,CARF,iBAQG,CAAA;AACC,cAAA;AACA,oBAAA;;AAVJ,CAAA,kBAaE,CAAA;AACE,SAAA;;AAdJ,CAAA,kBAiBE,CAAA;AACE,SAAA;;AAlBJ,CAAA,kBAqBE,CAAA;AArBF,CAAA,kBAsBE,CAAA;AACE,cAAA;AACA,SAAA;;AAxBJ,CAAA,kBAqBE,CAAA,WAKE,CAAA;AA1BJ,CAAA,kBAsBE,CAAA,aAIE,CAAA;AACE,SAAA;AACA,aAAW,IAAA,oBAAA,EAAA;AACX,WAAA,IAAA;AACA,eAAa,IAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAOX,iBAAA,EAAA;;AArCR,CAAA,kBAqBE,CAAA,WAqBE,CAAA;AA1CJ,CAAA,kBAsBE,CAAA,aAoBE,CAAA;AACE,SAAA;AACA,aAAW,IAAA,oBAAA,EAAA;AACX,WAAA,IAAA;AACA,eAAa,IAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAOX,iBAAA,EAAA;;AAOR,MAAM,UAAU,cAAc,CAnE9B,WAmE0C,CAAA;AACxC,SAAA;AACA,cAAA;AACA,WAAA;;AAGF,MAAM,UAAU,cAAc,CAzE9B,YAyE2C,CAAA;AACzC,cAAA;;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["nginx-log-viewer.component.ts"],
|
|
4
|
-
"sourcesContent": ["\n :host {\n display: block;\n }\n\n .log-panel {\n background: #1b2332;\n border-radius: 6px;\n overflow: hidden;\n }\n\n .log-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 14px;\n background: rgba(0, 0, 0, 0.15);\n }\n\n .log-header-title {\n font-size: var(--nginx-font-size-sm, 12px);\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: rgba(255, 255, 255, 0.4);\n }\n\n .log-header-status {\n font-size: var(--nginx-font-size-sm, 12px);\n color: rgba(255, 255, 255, 0.5);\n font-family: var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace);\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 5px;\n\n &.realtime {\n color: #3dd68c;\n }\n\n &.status-ok {\n color: #3dd68c;\n }\n\n &.status-warn {\n color: #f7ba1e;\n }\n\n &.status-error {\n color: #ef5350;\n }\n }\n\n .realtime-dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: #3dd68c;\n animation: pulse 2s ease-in-out infinite;\n }\n\n @keyframes pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.4;\n }\n }\n\n .log-body {\n padding: 10px 14px;\n max-height: 180px;\n overflow-y: auto;\n font-family: var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace);\n font-size: var(--nginx-font-size-sm, 12px);\n line-height: 1.8;\n\n &::-webkit-scrollbar {\n width: 6px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: #333944;\n border-radius: 3px;\n }\n }\n\n .log-empty {\n padding: 16px 0;\n font-size: var(--nginx-font-size-sm, 12px);\n color: rgba(255, 255, 255, 0.35);\n text-align: center;\n font-family: var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace);\n }\n\n .log-line {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n cursor: default;\n }\n\n .log-time {\n color: rgba(255, 255, 255, 0.5);\n flex-shrink: 0;\n min-width: 46px;\n }\n\n .log-level {\n font-weight: 700;\n flex-shrink: 0;\n width: 32px;\n\n &.info {\n color: #165dff;\n }\n\n &.warn {\n color: #ff7d00;\n }\n\n &.error {\n color: #ef5350;\n }\n\n &.ok {\n color: #3dd68c;\n }\n }\n\n .log-msg {\n color: rgba(255, 255, 255, 0.55);\n flex: 1;\n word-break: break-all;\n white-space: pre-wrap;\n }\n "],
|
|
5
|
-
"mappings": ";AACI;AACE,WAAA;;AAGF,CAAA;AACE,cAAA;AACA,iBAAA;AACA,YAAA;;AAGF,CAAA;AACE,WAAA;AACA,eAAA;AACA,mBAAA;AACA,WAAA,IAAA;AACA,cAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA;;AAGF,CAAA;AACE,aAAW,IAAA,oBAAA,EAAA;AACX,eAAA;AACA,kBAAA;AACA,kBAAA;AACA,SAAA,KAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA;;AAGF,CAAA;AACE,aAAW,IAAA,oBAAA,EAAA;AACX,SAAA,KAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA;AACA,eAAa,IAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAqF,iBAAA,EAAA;AAClG,eAAA;AACA,WAAA;AACA,eAAA;AACA,OAAA;;AAEA,CATF,iBASG,CAAA;AACC,SAAA;;AAGF,CAbF,iBAaG,CAAA;AACC,SAAA;;AAGF,CAjBF,iBAiBG,CAAA;AACC,SAAA;;AAGF,CArBF,iBAqBG,CAAA;AACC,SAAA;;AAIJ,CAAA;AACE,SAAA;AACA,UAAA;AACA,iBAAA;AACA,cAAA;AACA,aAAA,MAAA,GAAA,YAAA;;AAGF,WAHE;AAIA;AAEE,aAAA;;AAGF;AACE,aAAA;;;AAIJ,CAAA;AACE,WAAA,KAAA;AACA,cAAA;AACA,cAAA;AACA,eAAa,IAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAqF,iBAAA,EAAA;AAClG,aAAW,IAAA,oBAAA,EAAA;AACX,eAAA;;AAEA,CARF,QAQG;AACC,SAAA;;AAGF,CAZF,QAYG;AACC,cAAA;;AAGF,CAhBF,QAgBG;AACC,cAAA;AACA,iBAAA;;AAIJ,CAAA;AACE,WAAA,KAAA;AACA,aAAW,IAAA,oBAAA,EAAA;AACX,SAAA,KAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA;AACA,cAAA;AACA,eAAa,IAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAqF,iBAAA,EAAA;;AAGpG,CAAA;AACE,WAAA;AACA,eAAA;AACA,OAAA;AACA,UAAA;;AAGF,CAAA;AACE,SAAA,KAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA;AACA,eAAA;AACA,aAAA;;AAGF,CAAA;AACE,eAAA;AACA,eAAA;AACA,SAAA;;AAEA,CALF,SAKG,CAAA;AACC,SAAA;;AAGF,CATF,SASG,CAAA;AACC,SAAA;;AAGF,CAbF,SAaG,CAAA;AACC,SAAA;;AAGF,CAjBF,SAiBG,CAAA;AACC,SAAA;;AAIJ,CAAA;AACE,SAAA,KAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA;AACA,QAAA;AACA,cAAA;AACA,eAAA;;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["nginx-secondary-logs-tab.component.ts"],
|
|
4
|
-
"sourcesContent": ["\n :host {\n display: block;\n }\n\n .panel-header-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n\n &.compact {\n margin-bottom: 10px;\n }\n }\n\n .log-tabs {\n display: flex;\n gap: 0;\n }\n\n .log-tab {\n background: transparent;\n color: var(--text-3);\n font-size: var(--nginx-font-size-sm, 12px);\n font-weight: 500;\n padding: 6px 12px;\n cursor: pointer;\n transition: all 120ms ease;\n border: none;\n border-bottom: 2px solid transparent;\n margin-bottom: -1px;\n\n &:hover {\n color: var(--text-2);\n }\n\n &.active {\n color: var(--blue);\n border-bottom-color: var(--blue);\n font-weight: 600;\n }\n }\n\n .log-actions {\n display: flex;\n gap: 4px;\n }\n\n .log-action-btn {\n nz-icon {\n font-size: 12px;\n }\n }\n "],
|
|
5
|
-
"mappings": ";AACI;AACE,WAAA;;AAGF,CAAA;AACE,WAAA;AACA,mBAAA;AACA,eAAA;AACA,OAAA;AACA,iBAAA;;AAEA,CAPF,gBAOG,CAAA;AACC,iBAAA;;AAIJ,CAAA;AACE,WAAA;AACA,OAAA;;AAGF,CAAA;AACE,cAAA;AACA,SAAO,IAAA;AACP,aAAW,IAAA,oBAAA,EAAA;AACX,eAAA;AACA,WAAA,IAAA;AACA,UAAA;AACA,cAAA,IAAA,MAAA;AACA,UAAA;AACA,iBAAA,IAAA,MAAA;AACA,iBAAA;;AAEA,CAZF,OAYG;AACC,SAAO,IAAA;;AAGT,CAhBF,OAgBG,CAAA;AACC,SAAO,IAAA;AACP,uBAAqB,IAAA;AACrB,eAAA;;AAIJ,CAAA;AACE,WAAA;AACA,OAAA;;AAGF,CAAA,eACE;AACE,aAAA;;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["nginx-secondary-perf-tab.component.ts"],
|
|
4
|
-
"sourcesContent": ["\n :host {\n display: block;\n }\n\n .panel-header-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n }\n\n .panel-tip {\n font-size: var(--nginx-font-size-sm, 12px);\n color: var(--text-3);\n }\n\n .setting-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 10px;\n padding: 10px 0;\n border-bottom: 1px solid var(--border-light);\n\n &.no-border {\n border-bottom: none;\n }\n }\n\n .setting-label {\n font-size: var(--nginx-font-size-sm, 12px);\n font-weight: 600;\n color: var(--text-1);\n }\n\n .setting-desc {\n font-size: var(--nginx-font-size-sm, 12px);\n color: var(--text-3);\n margin-top: 2px;\n }\n\n .setting-ctrl {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .setting-input {\n width: 110px;\n padding: 5px 8px;\n border-radius: 4px;\n border: 1px solid var(--border);\n background: var(--bg-input);\n color: var(--text-2);\n font-size: var(--nginx-font-size-sm, 12px);\n text-align: center;\n font-family: var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace);\n outline: none;\n }\n\n .setting-input:focus,\n .setting-textarea:focus {\n border-color: var(--blue);\n box-shadow: 0 0 0 2px var(--blue-border);\n }\n\n .setting-textarea {\n width: 100%;\n margin-top: 8px;\n border: 1px solid var(--border);\n border-radius: 6px;\n background: var(--bg-input);\n color: var(--text-2);\n font-size: var(--nginx-font-size-sm, 12px);\n padding: 8px 10px;\n resize: vertical;\n outline: none;\n }\n .mono {\n font-family: var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace);\n }\n "],
|
|
5
|
-
"mappings": ";AACI;AACE,WAAA;;AAGF,CAAA;AACE,WAAA;AACA,mBAAA;AACA,eAAA;AACA,OAAA;AACA,iBAAA;;AAGF,CAAA;AACE,aAAW,IAAA,oBAAA,EAAA;AACX,SAAO,IAAA;;AAGT,CAAA;AACE,WAAA;AACA,mBAAA;AACA,eAAA;AACA,OAAA;AACA,WAAA,KAAA;AACA,iBAAA,IAAA,MAAyB,IAAA;;AAEzB,CARF,WAQG,CAAA;AACC,iBAAA;;AAIJ,CAAA;AACE,aAAW,IAAA,oBAAA,EAAA;AACX,eAAA;AACA,SAAO,IAAA;;AAGT,CAAA;AACE,aAAW,IAAA,oBAAA,EAAA;AACX,SAAO,IAAA;AACP,cAAA;;AAGF,CAAA;AACE,WAAA;AACA,eAAA;AACA,OAAA;;AAGF,CAAA;AACE,SAAA;AACA,WAAA,IAAA;AACA,iBAAA;AACA,UAAA,IAAA,MAAkB,IAAA;AAClB,cAAY,IAAA;AACZ,SAAO,IAAA;AACP,aAAW,IAAA,oBAAA,EAAA;AACX,cAAA;AACA,eAAa,IAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAqF,iBAAA,EAAA;AAClG,WAAA;;AAGF,CAbA,aAac;AACd,CAAA,gBAAiB;AACf,gBAAc,IAAA;AACd,cAAA,EAAA,EAAA,EAAA,IAAsB,IAAA;;AAGxB,CALA;AAME,SAAA;AACA,cAAA;AACA,UAAA,IAAA,MAAkB,IAAA;AAClB,iBAAA;AACA,cAAY,IAAA;AACZ,SAAO,IAAA;AACP,aAAW,IAAA,oBAAA,EAAA;AACX,WAAA,IAAA;AACA,UAAA;AACA,WAAA;;AAEF,CAAA;AACE,eAAa,IAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAqF,iBAAA,EAAA;;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["nginx-secondary-settings-tab.component.ts"],
|
|
4
|
-
"sourcesContent": ["\n .setting-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 10px;\n padding: 10px 0;\n border-bottom: 1px solid var(--border-light);\n\n &:last-child {\n border-bottom: none;\n }\n\n &.danger-row {\n padding: 6px 0 0;\n border-bottom: none;\n }\n }\n\n .setting-label {\n font-size: var(--nginx-font-size-sm, 12px);\n font-weight: 600;\n color: var(--text-1);\n\n &.danger {\n color: var(--red);\n margin-bottom: 4px;\n }\n }\n\n .setting-desc {\n font-size: var(--nginx-font-size-sm, 12px);\n color: var(--text-3);\n margin-top: 2px;\n }\n\n .setting-ctrl {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .retention-input {\n width: 92px;\n }\n\n .mono {\n font-family: var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace);\n\n &.strong {\n color: var(--text-1);\n font-weight: 600;\n }\n }\n\n .danger-box {\n margin-top: 8px;\n padding: 10px 12px;\n border: 1px solid rgba(245, 63, 63, 0.2);\n background: var(--red-bg);\n border-radius: 6px;\n }\n\n @media (max-width: 768px) {\n .setting-row {\n flex-direction: column;\n align-items: flex-start;\n }\n }\n "],
|
|
5
|
-
"mappings": ";AACI,CAAA;AACE,WAAA;AACA,mBAAA;AACA,eAAA;AACA,OAAA;AACA,WAAA,KAAA;AACA,iBAAA,IAAA,MAAyB,IAAA;;AAEzB,CARF,WAQG;AACC,iBAAA;;AAGF,CAZF,WAYG,CAAA;AACC,WAAA,IAAA,EAAA;AACA,iBAAA;;AAIJ,CAAA;AACE,aAAW,IAAA,oBAAA,EAAA;AACX,eAAA;AACA,SAAO,IAAA;;AAEP,CALF,aAKG,CAAA;AACC,SAAO,IAAA;AACP,iBAAA;;AAIJ,CAAA;AACE,aAAW,IAAA,oBAAA,EAAA;AACX,SAAO,IAAA;AACP,cAAA;;AAGF,CAAA;AACE,WAAA;AACA,eAAA;AACA,OAAA;;AAGF,CAAA;AACE,SAAA;;AAGF,CAAA;AACE,eAAa,IAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAqF,iBAAA,EAAA;;AAElG,CAHF,IAGG,CAAA;AACC,SAAO,IAAA;AACP,eAAA;;AAIJ,CAAA;AACE,cAAA;AACA,WAAA,KAAA;AACA,UAAA,IAAA,MAAA,KAAA,GAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AACA,cAAY,IAAA;AACZ,iBAAA;;AAGF,OAAA,CAA0B,SAAA,EAAA;AACxB,GA/DF;AAgEI,oBAAA;AACA,iBAAA;;;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["nginx-secondary-ssl-tab.component.ts"],
|
|
4
|
-
"sourcesContent": ["\n :host {\n display: block;\n }\n\n .panel-header-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n }\n\n .panel-tip {\n font-size: var(--nginx-font-size-sm, 12px);\n color: var(--text-3);\n }\n\n .header-actions {\n display: flex;\n gap: 8px;\n }\n\n .ssl-cards {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 10px;\n }\n\n .ssl-card {\n display: flex;\n flex-direction: column;\n gap: 10px;\n border: 1px solid var(--border-light);\n border-radius: 6px;\n padding: 10px;\n background: #fff;\n }\n\n .card-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n border-bottom: 1px solid var(--border-light);\n padding-bottom: 8px;\n }\n\n .card-domain {\n font-size: var(--nginx-font-size-base, 14px);\n color: var(--text-1);\n font-weight: 600;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .status-badge {\n display: inline-flex;\n align-items: center;\n height: 24px;\n border-radius: 12px;\n padding: 0 10px;\n font-size: var(--nginx-font-size-sm, 12px);\n line-height: 24px;\n border: 1px solid transparent;\n white-space: nowrap;\n }\n\n .status-badge.valid {\n color: var(--green);\n border-color: rgba(0, 180, 42, 0.2);\n background: var(--green-bg);\n }\n\n .status-badge.expiring {\n color: var(--orange);\n border-color: rgba(255, 125, 0, 0.2);\n background: var(--orange-bg);\n }\n\n .status-badge.expired {\n color: var(--red);\n border-color: rgba(245, 63, 63, 0.2);\n background: var(--red-bg);\n }\n\n .status-badge.pending {\n color: var(--text-2);\n border-color: var(--border);\n background: var(--bg-input);\n }\n\n .meta-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 1;\n }\n\n .meta-item {\n display: grid;\n grid-template-columns: 80px 1fr;\n gap: 8px;\n min-width: 0;\n }\n\n .meta-item.block {\n grid-template-columns: 1fr;\n }\n\n .meta-label {\n font-size: var(--nginx-font-size-sm, 12px);\n color: var(--text-3);\n font-weight: 600;\n }\n\n .meta-value {\n color: var(--text-1);\n font-size: var(--nginx-font-size-sm, 12px);\n min-width: 0;\n word-break: break-all;\n }\n\n .mono {\n font-family: var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace);\n }\n\n .card-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n }\n\n .drawer-body {\n padding: 0 24px 16px;\n }\n\n .form-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n }\n\n .drawer-footer {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 12px 24px;\n border-top: 1px solid rgba(0, 0, 0, 0.06);\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n background: #fff;\n }\n\n .empty-row {\n grid-column: 1 / -1;\n border: 1px dashed var(--border);\n border-radius: 6px;\n color: var(--text-3);\n font-size: var(--nginx-font-size-sm, 12px);\n text-align: center;\n padding: 20px 12px;\n background: #fff;\n }\n\n @media (max-width: 992px) {\n .panel-header-row {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .header-actions {\n width: 100%;\n }\n\n .form-grid {\n grid-template-columns: 1fr;\n }\n }\n "],
|
|
5
|
-
"mappings": ";AACI;AACE,WAAA;;AAGF,CAAA;AACE,WAAA;AACA,mBAAA;AACA,eAAA;AACA,OAAA;AACA,iBAAA;;AAGF,CAAA;AACE,aAAW,IAAA,oBAAA,EAAA;AACX,SAAO,IAAA;;AAGT,CAAA;AACE,WAAA;AACA,OAAA;;AAGF,CAAA;AACE,WAAA;AACA,yBAAuB,OAAA,SAAA,EAAkB,OAAA,KAAA,EAAA;AACzC,OAAA;;AAGF,CAAA;AACE,WAAA;AACA,kBAAA;AACA,OAAA;AACA,UAAA,IAAA,MAAkB,IAAA;AAClB,iBAAA;AACA,WAAA;AACA,cAAA;;AAGF,CAAA;AACE,WAAA;AACA,eAAA;AACA,mBAAA;AACA,OAAA;AACA,iBAAA,IAAA,MAAyB,IAAA;AACzB,kBAAA;;AAGF,CAAA;AACE,aAAW,IAAA,sBAAA,EAAA;AACX,SAAO,IAAA;AACP,eAAA;AACA,aAAA;AACA,YAAA;AACA,iBAAA;AACA,eAAA;;AAGF,CAAA;AACE,WAAA;AACA,eAAA;AACA,UAAA;AACA,iBAAA;AACA,WAAA,EAAA;AACA,aAAW,IAAA,oBAAA,EAAA;AACX,eAAA;AACA,UAAA,IAAA,MAAA;AACA,eAAA;;AAGF,CAZA,YAYa,CAAA;AACX,SAAO,IAAA;AACP,gBAAA,KAAA,CAAA,EAAA,GAAA,EAAA,EAAA,EAAA;AACA,cAAY,IAAA;;AAGd,CAlBA,YAkBa,CAAA;AACX,SAAO,IAAA;AACP,gBAAA,KAAA,GAAA,EAAA,GAAA,EAAA,CAAA,EAAA;AACA,cAAY,IAAA;;AAGd,CAxBA,YAwBa,CAAA;AACX,SAAO,IAAA;AACP,gBAAA,KAAA,GAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AACA,cAAY,IAAA;;AAGd,CA9BA,YA8Ba,CAAA;AACX,SAAO,IAAA;AACP,gBAAc,IAAA;AACd,cAAY,IAAA;;AAGd,CAAA;AACE,WAAA;AACA,kBAAA;AACA,OAAA;AACA,QAAA;;AAGF,CAAA;AACE,WAAA;AACA,yBAAA,KAAA;AACA,OAAA;AACA,aAAA;;AAGF,CAPA,SAOU,CAAA;AACR,yBAAA;;AAGF,CAAA;AACE,aAAW,IAAA,oBAAA,EAAA;AACX,SAAO,IAAA;AACP,eAAA;;AAGF,CAAA;AACE,SAAO,IAAA;AACP,aAAW,IAAA,oBAAA,EAAA;AACX,aAAA;AACA,cAAA;;AAGF,CAAA;AACE,eAAa,IAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAqF,iBAAA,EAAA;;AAGpG,CAAA;AACE,WAAA;AACA,mBAAA;AACA,OAAA;;AAGF,CAAA;AACE,WAAA,EAAA,KAAA;;AAGF,CAAA;AACE,WAAA;AACA,yBAAA,IAAA;AACA,OAAA;;AAGF,CAAA;AACE,YAAA;AACA,UAAA;AACA,QAAA;AACA,SAAA;AACA,WAAA,KAAA;AACA,cAAA,IAAA,MAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA;AACA,WAAA;AACA,mBAAA;AACA,OAAA;AACA,cAAA;;AAGF,CAAA;AACE,eAAA,EAAA,EAAA;AACA,UAAA,IAAA,OAAmB,IAAA;AACnB,iBAAA;AACA,SAAO,IAAA;AACP,aAAW,IAAA,oBAAA,EAAA;AACX,cAAA;AACA,WAAA,KAAA;AACA,cAAA;;AAGF,OAAA,CAA0B,SAAA,EAAA;AACxB,GArKF;AAsKI,oBAAA;AACA,iBAAA;;AAGF,GA7JF;AA8JI,WAAA;;AAGF,GAxCF;AAyCI,2BAAA;;;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["nginx-secondary-test-tab.component.ts"],
|
|
4
|
-
"sourcesContent": ["\n :host {\n display: block;\n }\n\n .panel-header-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n }\n\n .panel-tip {\n font-size: var(--nginx-font-size-base, 14px);\n color: var(--text-2);\n }\n\n .run-test-btn {\n background: var(--green);\n color: #fff;\n border-color: var(--green);\n font-weight: 600;\n min-height: 28px;\n padding-inline: 10px;\n\n &:hover,\n &:focus {\n background: #00a122;\n border-color: #00a122;\n color: #fff;\n }\n }\n\n @media (max-width: 992px) {\n .panel-header-row {\n flex-direction: column;\n align-items: flex-start;\n }\n }\n "],
|
|
5
|
-
"mappings": ";AACI;AACE,WAAA;;AAGF,CAAA;AACE,WAAA;AACA,mBAAA;AACA,eAAA;AACA,OAAA;AACA,iBAAA;;AAGF,CAAA;AACE,aAAW,IAAA,sBAAA,EAAA;AACX,SAAO,IAAA;;AAGT,CAAA;AACE,cAAY,IAAA;AACZ,SAAA;AACA,gBAAc,IAAA;AACd,eAAA;AACA,cAAA;AACA,kBAAA;;AAEA,CARF,YAQG;AACD,CATF,YASG;AACC,cAAA;AACA,gBAAA;AACA,SAAA;;AAIJ,OAAA,CAA0B,SAAA,EAAA;AACxB,GA9BF;AA+BI,oBAAA;AACA,iBAAA;;;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["nginx-secondary-traffic-tab.component.ts"],
|
|
4
|
-
"sourcesContent": ["\n :host {\n display: block;\n }\n\n .panel-header-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n }\n\n .panel-tip {\n font-size: var(--nginx-font-size-sm, 12px);\n color: var(--text-3);\n }\n\n .setting-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 10px;\n padding: 10px 0;\n border-bottom: 1px solid var(--border-light);\n\n &.no-border {\n border-bottom: none;\n }\n }\n\n .setting-label {\n font-size: var(--nginx-font-size-sm, 12px);\n font-weight: 600;\n color: var(--text-1);\n }\n\n .setting-desc {\n font-size: var(--nginx-font-size-sm, 12px);\n color: var(--text-3);\n margin-top: 2px;\n }\n\n .setting-ctrl {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .setting-input {\n width: 110px;\n padding: 5px 8px;\n border-radius: 4px;\n border: 1px solid var(--border);\n background: var(--bg-input);\n color: var(--text-2);\n font-size: var(--nginx-font-size-sm, 12px);\n text-align: center;\n font-family: var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace);\n outline: none;\n }\n\n .setting-input:focus,\n .setting-textarea:focus {\n border-color: var(--blue);\n box-shadow: 0 0 0 2px var(--blue-border);\n }\n\n .setting-textarea {\n width: 100%;\n margin-top: 8px;\n border: 1px solid var(--border);\n border-radius: 6px;\n background: var(--bg-input);\n color: var(--text-2);\n font-size: var(--nginx-font-size-sm, 12px);\n padding: 8px 10px;\n resize: vertical;\n outline: none;\n }\n\n .mono {\n font-family: var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace);\n }\n "],
|
|
5
|
-
"mappings": ";AACI;AACE,WAAA;;AAGF,CAAA;AACE,WAAA;AACA,mBAAA;AACA,eAAA;AACA,OAAA;AACA,iBAAA;;AAGF,CAAA;AACE,aAAW,IAAA,oBAAA,EAAA;AACX,SAAO,IAAA;;AAGT,CAAA;AACE,WAAA;AACA,mBAAA;AACA,eAAA;AACA,OAAA;AACA,WAAA,KAAA;AACA,iBAAA,IAAA,MAAyB,IAAA;;AAEzB,CARF,WAQG,CAAA;AACC,iBAAA;;AAIJ,CAAA;AACE,aAAW,IAAA,oBAAA,EAAA;AACX,eAAA;AACA,SAAO,IAAA;;AAGT,CAAA;AACE,aAAW,IAAA,oBAAA,EAAA;AACX,SAAO,IAAA;AACP,cAAA;;AAGF,CAAA;AACE,WAAA;AACA,eAAA;AACA,OAAA;;AAGF,CAAA;AACE,SAAA;AACA,WAAA,IAAA;AACA,iBAAA;AACA,UAAA,IAAA,MAAkB,IAAA;AAClB,cAAY,IAAA;AACZ,SAAO,IAAA;AACP,aAAW,IAAA,oBAAA,EAAA;AACX,cAAA;AACA,eAAa,IAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAqF,iBAAA,EAAA;AAClG,WAAA;;AAGF,CAbA,aAac;AACd,CAAA,gBAAiB;AACf,gBAAc,IAAA;AACd,cAAA,EAAA,EAAA,EAAA,IAAsB,IAAA;;AAGxB,CALA;AAME,SAAA;AACA,cAAA;AACA,UAAA,IAAA,MAAkB,IAAA;AAClB,iBAAA;AACA,cAAY,IAAA;AACZ,SAAO,IAAA;AACP,aAAW,IAAA,oBAAA,EAAA;AACX,WAAA,IAAA;AACA,UAAA;AACA,WAAA;;AAGF,CAAA;AACE,eAAa,IAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAqF,iBAAA,EAAA;;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["nginx-secondary-upstream-tab.component.ts"],
|
|
4
|
-
"sourcesContent": ["\n :host {\n display: block;\n }\n\n .list-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n margin-bottom: 12px;\n }\n\n .panel-tip {\n font-size: var(--nginx-font-size-sm, 12px);\n color: var(--text-3);\n }\n\n .header-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n }\n\n .upstream-grid-shell {\n border: none;\n border-radius: 0;\n overflow: hidden;\n }\n\n .upstream-grid-head,\n .upstream-grid-row {\n display: grid;\n grid-template-columns: minmax(180px, 1fr) minmax(150px, 0.9fr) minmax(130px, 0.7fr) minmax(220px, 1.6fr) 88px 116px;\n align-items: center;\n column-gap: 8px;\n padding: 0 12px;\n }\n\n .upstream-grid-head {\n min-height: 42px;\n background: #fafafa;\n border-bottom: 1px solid rgba(0, 0, 0, 0.06);\n\n .cell {\n font-size: var(--nginx-font-size-sm, 12px);\n color: rgba(0, 0, 0, 0.45);\n text-transform: uppercase;\n letter-spacing: 0.4px;\n font-weight: 700;\n }\n }\n\n .upstream-grid-body {\n background: #fff;\n }\n\n .upstream-grid-row {\n min-height: 58px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n transition: background 120ms ease;\n\n &:last-child {\n border-bottom: none;\n }\n\n &:hover {\n background: rgba(0, 0, 0, 0.02);\n }\n }\n\n .readonly-row {\n background: rgba(0, 0, 0, 0.015);\n }\n\n .cell {\n min-width: 0;\n }\n .row-actions{\n display: flex;\n gap: 4px;\n justify-content: flex-end;\n }\n .upstream-name {\n display: inline-block;\n font-size: var(--nginx-font-size-base, 14px);\n font-weight: 600;\n color: var(--text-1);\n word-break: break-all;\n }\n\n .strategy-pill {\n display: inline-flex;\n align-items: center;\n height: 22px;\n border-radius: 11px;\n padding: 0 10px;\n font-size: var(--nginx-font-size-sm, 12px);\n line-height: 22px;\n color: var(--text-2);\n background: var(--bg-input);\n border: 1px solid var(--border-light);\n }\n\n .source-badge {\n display: inline-flex;\n align-items: center;\n max-width: 100%;\n height: 22px;\n padding: 0 8px;\n border-radius: 4px;\n background: rgba(0, 0, 0, 0.04);\n color: var(--text-3);\n border: 1px solid rgba(0, 0, 0, 0.08);\n font-size: var(--nginx-font-size-sm, 12px);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .source-badge.managed {\n background: rgba(22, 93, 255, 0.08);\n color: #165dff;\n border-color: rgba(22, 93, 255, 0.2);\n }\n\n .nodes-wrap {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n padding: 8px 0;\n }\n\n .node-chip {\n display: inline-flex;\n align-items: center;\n height: 22px;\n padding: 0 8px;\n border-radius: 4px;\n border: 1px solid rgba(22, 93, 255, 0.2);\n background: rgba(22, 93, 255, 0.08);\n color: #165dff;\n font-size: var(--nginx-font-size-sm, 12px);\n max-width: 100%;\n word-break: break-all;\n }\n\n .node-count {\n font-size: var(--nginx-font-size-base, 14px);\n color: var(--text-2);\n font-weight: 600;\n }\n\n .action-col {\n justify-self: end;\n }\n\n .empty-state {\n text-align: center;\n padding: 48px 0;\n\n .empty-icon {\n font-size: 48px;\n color: rgba(0, 0, 0, 0.2);\n margin-bottom: 16px;\n }\n\n p {\n color: rgba(0, 0, 0, 0.4);\n margin: 0;\n }\n }\n\n .mono {\n font-family: var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace);\n }\n\n .drawer-body {\n padding: 0 24px 16px;\n }\n\n .drawer-footer {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 12px 24px;\n border-top: 1px solid rgba(0, 0, 0, 0.06);\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n background: #fff;\n }\n "],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["nginx-section-card.component.ts"],
|
|
4
|
-
"sourcesContent": ["\n :host {\n display: block;\n }\n\n .card {\n background: var(--bg-white);\n border: 1px solid var(--border);\n border-left-width: 3px;\n border-radius: 8px;\n box-shadow: var(--shadow-card);\n margin-bottom: 14px;\n overflow: hidden;\n border-left-color: transparent;\n }\n\n .card.card-blue {\n border-left-color: var(--blue);\n }\n\n .card.card-green {\n border-left-color: var(--green);\n }\n\n .card.card-orange {\n border-left-color: var(--orange);\n }\n\n .card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px 12px 20px;\n border-bottom: 1px solid var(--border-light);\n gap: 10px;\n }\n\n .card-header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n }\n\n .card-title {\n font-size: var(--nginx-font-size-base, 14px);\n font-weight: 700;\n color: var(--text-1);\n }\n\n .card-subtitle {\n font-size: var(--nginx-font-size-sm, 12px);\n color: var(--text-3);\n }\n\n .card-actions {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n justify-content: flex-end;\n }\n\n .card-body {\n padding: 14px 18px;\n\n &.no-padding {\n padding: 0;\n }\n }\n\n @media (max-width: 768px) {\n .card-header {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .card-actions {\n width: 100%;\n }\n }\n "],
|
|
5
|
-
"mappings": ";AACI;AACE,WAAA;;AAGF,CAAA;AACE,cAAY,IAAA;AACZ,UAAA,IAAA,MAAkB,IAAA;AAClB,qBAAA;AACA,iBAAA;AACA,cAAY,IAAA;AACZ,iBAAA;AACA,YAAA;AACA,qBAAA;;AAGF,CAXA,IAWK,CAAA;AACH,qBAAmB,IAAA;;AAGrB,CAfA,IAeK,CAAA;AACH,qBAAmB,IAAA;;AAGrB,CAnBA,IAmBK,CAAA;AACH,qBAAmB,IAAA;;AAGrB,CAAA;AACE,WAAA;AACA,eAAA;AACA,mBAAA;AACA,WAAA,KAAA,KAAA,KAAA;AACA,iBAAA,IAAA,MAAyB,IAAA;AACzB,OAAA;;AAGF,CAAA;AACE,WAAA;AACA,eAAA;AACA,OAAA;AACA,aAAA;;AAGF,CAAA;AACE,aAAW,IAAA,sBAAA,EAAA;AACX,eAAA;AACA,SAAO,IAAA;;AAGT,CAAA;AACE,aAAW,IAAA,oBAAA,EAAA;AACX,SAAO,IAAA;;AAGT,CAAA;AACE,WAAA;AACA,OAAA;AACA,aAAA;AACA,mBAAA;;AAGF,CAAA;AACE,WAAA,KAAA;;AAEA,CAHF,SAGG,CAAA;AACC,WAAA;;AAIJ,OAAA,CAA0B,SAAA,EAAA;AACxB,GA3CF;AA4CI,oBAAA;AACA,iBAAA;;AAGF,GArBF;AAsBI,WAAA;;;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["src/app/pages/nginx/components/nginx-server-drawer/nginx-server-drawer.component.less"],
|
|
4
|
-
"sourcesContent": [":host {\n display: block;\n}\n\n.drawer-body {\n padding: 0 24px 16px;\n}\n\n.mono-textarea {\n resize: none;\n}\n\n.domain-row-wrapper,\n.root-row-wrapper {\n display: flex;\n width: 100%;\n}\n\n.domain-row-protocol {\n width: 130px;\n flex: 0 0 130px;\n}\n\n.domain-row-domain {\n flex: 1 1 auto;\n min-width: 0;\n margin-left: -1px;\n}\n\n.domain-row-listen {\n width: 180px;\n flex: 0 0 180px;\n margin-left: -1px;\n}\n\n.root-row-root {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.root-row-index {\n width: 220px;\n flex: 0 0 220px;\n margin-left: -1px;\n}\n\n.field-hint {\n margin-top: 4px;\n font-size: 12px;\n opacity: .7;\n}\n\n.location-toolbar {\n display: flex;\n gap: 8px;\n margin-bottom: 10px;\n}\n\n.location-item {\n border: 1px solid rgba(0, 0, 0, 0.08);\n border-radius: 8px;\n padding: 10px;\n background: #fafafa;\n margin-bottom: 10px;\n}\n\n.location-item-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n}\n\n.location-grid {\n display: grid;\n grid-template-columns: 160px 1fr;\n gap: 8px;\n}\n\n.location-extra-textarea {\n margin-top: 8px;\n}\n\n.drawer-footer {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 12px 24px;\n border-top: 1px solid rgba(0, 0, 0, 0.06);\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n background: #fff;\n}\n\n@media (max-width: 640px) {\n .domain-row-wrapper,\n .root-row-wrapper {\n flex-wrap: wrap;\n gap: 8px;\n }\n\n .domain-row-protocol,\n .domain-row-domain,\n .domain-row-listen,\n .root-row-root,\n .root-row-index {\n width: 100%;\n flex: 1 1 100%;\n margin-left: 0;\n }\n}\n"],
|
|
5
|
-
"mappings": ";AAAA;AACI,WAAA;;AAGJ,CAAA;AACI,WAAA,EAAA,KAAA;;AAGJ,CAAA;AACI,UAAA;;AAGJ,CAAA;AACA,CAAA;AACI,WAAA;AACA,SAAA;;AAGJ,CAAA;AACI,SAAA;AACA,QAAA,EAAA,EAAA;;AAGJ,CAAA;AACI,QAAA,EAAA,EAAA;AACA,aAAA;AACA,eAAA;;AAGJ,CAAA;AACI,SAAA;AACA,QAAA,EAAA,EAAA;AACA,eAAA;;AAGJ,CAAA;AACI,QAAA,EAAA,EAAA;AACA,aAAA;;AAGJ,CAAA;AACI,SAAA;AACA,QAAA,EAAA,EAAA;AACA,eAAA;;AAGJ,CAAA;AACI,cAAA;AACA,aAAA;AACA,WAAA;;AAGJ,CAAA;AACI,WAAA;AACA,OAAA;AACA,iBAAA;;AAGJ,CAAA;AACI,UAAA,IAAA,MAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA;AACA,iBAAA;AACA,WAAA;AACA,cAAA;AACA,iBAAA;;AAGJ,CAAA;AACI,WAAA;AACA,eAAA;AACA,mBAAA;AACA,iBAAA;;AAGJ,CAAA;AACI,WAAA;AACA,yBAAA,MAAA;AACA,OAAA;;AAGJ,CAAA;AACI,cAAA;;AAGJ,CAAA;AACI,YAAA;AACA,UAAA;AACA,QAAA;AACA,SAAA;AACA,WAAA,KAAA;AACA,cAAA,IAAA,MAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA;AACA,WAAA;AACA,mBAAA;AACA,OAAA;AACA,cAAA;;AAGJ,OAAA,CAA0B,SAAA,EAAA;AACtB,GArFJ;EAsFI,CArFJ;AAsFQ,eAAA;AACA,SAAA;;AAGJ,GArFJ;EAsFI,CAjFJ;EAkFI,CA5EJ;EA6EI,CAvEJ;EAwEI,CAnEJ;AAoEQ,WAAA;AACA,UAAA,EAAA,EAAA;AACA,iBAAA;;;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|