@yinuo-ngm/server 1.0.15 → 1.0.17
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/app.js +3 -15
- package/lib/common/editor.js +2 -2
- package/lib/env.d.ts +1 -0
- package/lib/env.js +1 -0
- package/lib/plugins/error-handler.plugin.d.ts +2 -2
- package/lib/plugins/error-handler.plugin.js +97 -88
- package/lib/plugins/ws/topics/nginx.ws.js +2 -1
- package/lib/plugins/ws/topics/svn.ws.d.ts +2 -1
- package/lib/plugins/ws/topics/svn.ws.js +3 -2
- package/lib/plugins/ws/topics/syslog.ws.d.ts +1 -1
- package/lib/plugins/ws/topics/task.ws.d.ts +2 -1
- package/lib/plugins/ws/topics/task.ws.js +2 -1
- package/lib/plugins/ws/ws.context.d.ts +1 -1
- package/lib/plugins/ws/ws.plugin.js +4 -3
- package/lib/plugins/ws/ws.router.d.ts +2 -2
- package/lib/plugins/ws/ws.router.js +8 -7
- package/lib/routes/api-client/collection.routes.js +8 -6
- package/lib/routes/api-client/env.routes.js +4 -3
- package/lib/routes/api-client/history.routes.js +3 -2
- package/lib/routes/api-client/hub-token.routes.js +32 -10
- package/lib/routes/api-client/request.routes.js +7 -6
- package/lib/routes/api-client/send.routes.js +3 -2
- package/lib/routes/config.routes.js +5 -5
- package/lib/routes/hub.routes.js +10 -10
- package/lib/routes/index.js +2 -0
- package/lib/routes/nginx/nginx-lifecycle.routes.js +4 -0
- package/lib/routes/nginx/nginx-route.context.js +23 -7
- package/lib/routes/nginx/nginx-server.routes.js +158 -6
- 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 +14 -9
- package/lib/routes/rss.routes.js +3 -3
- package/lib/routes/sprite-browse.routes.js +21 -6
- package/lib/routes/sprite.routes.js +18 -12
- package/lib/routes/static-files.routes.js +21 -5
- package/lib/routes/svn.routes.js +5 -3
- package/lib/routes/system.routes.js +20 -1
- package/lib/routes/task.routes.js +10 -3
- package/package.json +13 -6
- package/www/3rdpartylicenses.txt +66 -118
- package/www/browser/chunk-2L7NUOMX.js +2 -0
- package/www/browser/chunk-2NZJ7CN2.js +20 -0
- package/www/browser/chunk-3CM4SKDO.js +15 -0
- package/www/browser/chunk-3I7BQCXS.js +1 -0
- package/www/browser/chunk-3M56F2S2.js +1 -0
- package/www/browser/chunk-3OHBKMAA.js +1 -0
- package/www/browser/chunk-3XNNQFWR.js +1 -0
- package/www/browser/chunk-4BRW6LCZ.js +4 -0
- package/www/browser/chunk-4LBSLURA.js +1 -0
- package/www/browser/chunk-4X42HB6N.js +2 -0
- package/www/browser/chunk-5DYX4DUX.js +11 -0
- package/www/browser/chunk-6SYVDN5L.js +1 -0
- package/www/browser/chunk-6YYNHZ2A.js +1 -0
- package/www/browser/chunk-75W3GVSO.js +1 -0
- package/www/browser/chunk-7U44RF5F.js +63 -0
- package/www/browser/chunk-AELTP6YN.js +1 -0
- package/www/browser/chunk-AMXRL4GR.js +1 -0
- package/www/browser/chunk-AV2ZODEH.js +1 -0
- package/www/browser/chunk-AZ6SIMYH.js +1 -0
- package/www/browser/chunk-B3C35ET3.js +2 -0
- package/www/browser/chunk-BTQIUVTQ.js +1 -0
- package/www/browser/chunk-CN5J4WNO.js +1 -0
- package/www/browser/chunk-D2ODDESN.js +1 -0
- package/www/browser/chunk-DE6E23ET.js +1 -0
- package/www/browser/chunk-DIJPUYIA.js +1 -0
- package/www/browser/chunk-DLGJD6YU.js +4 -0
- package/www/browser/chunk-EEDA5U4V.js +1 -0
- package/www/browser/chunk-FK6Z4HLL.js +1 -0
- package/www/browser/chunk-FL6GDGHW.js +1 -0
- package/www/browser/chunk-FXCG34QS.js +1 -0
- package/www/browser/chunk-H2USFIYR.js +1 -0
- package/www/browser/chunk-H5HGMOE6.js +1 -0
- package/www/browser/chunk-HB3HECPD.js +1 -0
- package/www/browser/chunk-HDNG236Q.js +1 -0
- package/www/browser/chunk-HFZLJHYR.js +1 -0
- package/www/browser/chunk-HJTXXSMC.js +1 -0
- package/www/browser/chunk-HUMCWAKJ.js +3 -0
- package/www/browser/chunk-IKB3EQCP.js +2 -0
- package/www/browser/chunk-K7PESFPY.js +1 -0
- package/www/browser/chunk-KRYMOHYF.js +2 -0
- package/www/browser/chunk-M4QRBV3K.js +1 -0
- package/www/browser/chunk-N2PELLMM.js +30 -0
- package/www/browser/chunk-ONXBYGIG.js +1 -0
- package/www/browser/chunk-OSBDR36P.js +1 -0
- package/www/browser/chunk-OZCK4XVV.js +1 -0
- package/www/browser/chunk-QJP5F735.js +1 -0
- package/www/browser/chunk-RGOYDY7H.js +1 -0
- package/www/browser/chunk-UJKK4A7Y.js +1 -0
- package/www/browser/chunk-WD2EKZQC.js +1 -0
- package/www/browser/chunk-WUA5JFDD.js +1 -0
- package/www/browser/chunk-XLFHB7RS.js +3 -0
- package/www/browser/chunk-YNW4HEJO.js +37 -0
- package/www/browser/chunk-ZTDLWBW5.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-N64WJCHX.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
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["src/app/pages/projects/components/fs-explorer/fs-explorer-api.service.ts", "src/app/pages/projects/components/fs-explorer/fs-explorer.service.ts", "angular:jit:template:src\\app\\pages\\projects\\components\\fs-explorer\\fs-explorer.component.html", "angular:jit:style:src\\app\\pages\\projects\\components\\fs-explorer\\fs-explorer.component.less", "src/app/pages/projects/components/fs-explorer/fs-explorer.component.ts", "src/app/pages/projects/services/project-api.service.ts", "src/app/pages/projects/services/project.state.service.ts"],
|
|
4
|
-
"sourcesContent": ["import { HttpParams } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { ApiClient } from '@core/api';\r\nimport { FsListResult } from '@models/fs.model';\r\nimport { map } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FsExplorerApiService {\r\n private api = inject(ApiClient);\r\n ls(dirPath: string, showSystem = false) {\r\n const params = new HttpParams()\r\n .set(\"path\", dirPath)\r\n .set(\"showSystem\", showSystem ? \"1\" : \"0\");\r\n return this.api.get<FsListResult>(\"/api/fs/ls\", params);\r\n }\r\n\r\n mkdir(dirPath: string, folderName: string) {\r\n return this.api.post<void>(\"/api/fs/mkdir\", { path: dirPath, name: folderName });\r\n }\r\n\r\n pathExists(path: string) {\r\n const params = new HttpParams().set(\"path\", path);\r\n return this.api.get<{ exists: boolean }>(\"/api/fs/path-exists\", params).pipe(\r\n map(res => res.exists)\r\n );\r\n }\r\n}\r\n", "import { Injectable, computed, inject, signal } from \"@angular/core\";\r\nimport type { FsEntry, FsFavorite } from \"@models/fs.model\";\r\nimport { FsExplorerApiService } from \"./fs-explorer-api.service\";\r\nimport { LocalStateStore, LS_KEYS } from \"@core/local-state\";\r\n\r\nexport type PathSeg = {\r\n key: string;\r\n label: string;\r\n fullPath: string;\r\n disabled?: boolean;\r\n};\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FsExplorerService {\r\n private fsApi = inject(FsExplorerApiService)\r\n private localState = inject(LocalStateStore);\r\n\r\n /* ---------------- state ---------------- */\r\n // 输入框 path(用户可编辑)\r\n readonly path = signal<string>(\"D:\\\\\");\r\n // 服务端返回的 realpath(更可信)\r\n readonly currentPath = signal<string>(\"\");\r\n readonly entries = signal<FsEntry[]>([]);\r\n readonly reloading = signal<boolean>(false);\r\n\r\n readonly isEditingPath = signal<boolean>(false);\r\n readonly showSystemFolders = signal<boolean>(false);\r\n\r\n // 新建目录 UI\r\n readonly isCreateFolderModalVisible = signal<boolean>(false);\r\n readonly newFolderName = signal<string>(\"\");\r\n\r\n // breadcrumb\r\n readonly segments = computed<PathSeg[]>(() => {\r\n const p = this.currentPath() || this.path() || \"\";\r\n return this.buildSegments(p);\r\n });\r\n\r\n // 当前是否处于根目录(用于禁用“上一级”)\r\n readonly isRoot = computed(() => {\r\n const p = (this.currentPath() || this.path() || \"\").trim();\r\n if (!p) return true;\r\n\r\n // UNC: \\\\server\\share 视为根\r\n if (/^\\\\\\\\[^\\\\]+\\\\[^\\\\]+$/.test(p.replaceAll(\"/\", \"\\\\\"))) return true;\r\n\r\n // Windows drive: D:\\ 或 D:\r\n const win = p.replaceAll(\"/\", \"\\\\\");\r\n if (/^[a-zA-Z]:\\\\?$/.test(win)) return true;\r\n\r\n // Posix: /\r\n const posix = p.replaceAll(\"\\\\\", \"/\");\r\n return posix === \"/\";\r\n });\r\n\r\n // 是否可以上退(非根目录且不在加载中)\r\n readonly canUp = computed(() => !this.reloading() && !this.isRoot());\r\n\r\n /* ---------------- favorites ---------------- */\r\n // 从 LocalState 初始化\r\n readonly favorites = signal<FsFavorite[]>(\r\n this.normalizeFavorites(\r\n this.localState.get<FsFavorite[]>(LS_KEYS.fs.explorer.favorites, [])\r\n )\r\n );\r\n // 当前路径是否已收藏\r\n readonly isCurFavorited = computed(() => {\r\n const p = this.normalizePath(this.currentPath() || this.path() || \"\");\r\n if (!p) return false;\r\n return this.favorites().some((f) => f.path === p);\r\n });\r\n\r\n /** 添加/取消收藏 */\r\n toggleFavoriteCurrent() {\r\n const cur = this.normalizePath(this.currentPath() || this.path() || \"\");\r\n if (!cur) return;\r\n\r\n const list = this.favorites();\r\n const idx = list.findIndex((f) => f.path === cur);\r\n\r\n let next: FsFavorite[];\r\n if (idx >= 0) {\r\n // 取消\r\n next = list.slice(0, idx).concat(list.slice(idx + 1));\r\n } else {\r\n // 添加(置顶)\r\n const fav: FsFavorite = {\r\n path: cur,\r\n label: this.buildFavoriteLabel(cur),\r\n createdAt: Date.now(),\r\n };\r\n next = [fav, ...list];\r\n }\r\n\r\n next = this.normalizeFavorites(next);\r\n this.favorites.set(next);\r\n this.persistFavorites(next);\r\n }\r\n\r\n /** 从收藏跳转 */\r\n openFavorite(f: FsFavorite) {\r\n if (!f?.path) return;\r\n this.path.set(f.path);\r\n this.load();\r\n }\r\n\r\n /** 删除某条收藏 */\r\n removeFavorite(f: FsFavorite) {\r\n const next = this.normalizeFavorites(\r\n this.favorites().filter((x) => x.path !== f.path)\r\n );\r\n this.favorites.set(next);\r\n this.persistFavorites(next);\r\n }\r\n\r\n /** 清空收藏(可选) */\r\n clearFavorites() {\r\n this.favorites.set([]);\r\n this.persistFavorites([]);\r\n }\r\n\r\n /** 写入 LocalStateStore */\r\n private persistFavorites(list: FsFavorite[]) {\r\n this.localState.set(LS_KEYS.fs.explorer.favorites, list);\r\n }\r\n\r\n /** 兜底:规范化 + 去重 + 排序 */\r\n private normalizeFavorites(list: FsFavorite[]): FsFavorite[] {\r\n const map = new Map<string, FsFavorite>();\r\n\r\n for (const it of list || []) {\r\n const p = this.normalizePath((it as any)?.path || \"\");\r\n if (!p) continue;\r\n\r\n map.set(p, {\r\n path: p,\r\n label: String((it as any)?.label || this.buildFavoriteLabel(p)).trim(),\r\n createdAt: Number((it as any)?.createdAt || Date.now()),\r\n });\r\n }\r\n\r\n // 最近收藏在前\r\n return Array.from(map.values()).sort((a, b) => b.createdAt - a.createdAt);\r\n }\r\n\r\n /** label 生成策略:最后一段目录名 / 盘符 / UNC */\r\n private buildFavoriteLabel(p: string): string {\r\n const win = p.replaceAll(\"/\", \"\\\\\");\r\n\r\n // Windows drive root: D:\\ -> D:\r\n if (/^[a-zA-Z]:\\\\?$/.test(win)) return win.slice(0, 2);\r\n\r\n // UNC root: \\\\server\\share\r\n if (/^\\\\\\\\[^\\\\]+\\\\[^\\\\]+$/.test(win)) return win;\r\n\r\n // UNC: \\\\server\\share\\dir -> dir\r\n if (/^\\\\\\\\/.test(win)) {\r\n const parts = win.split(\"\\\\\").filter(Boolean);\r\n return parts[parts.length - 1] || win;\r\n }\r\n\r\n // Posix: /a/b -> b ; / -> /\r\n const posix = p.replaceAll(\"\\\\\", \"/\");\r\n if (posix === \"/\") return \"/\";\r\n const arr = posix.split(\"/\").filter(Boolean);\r\n return arr[arr.length - 1] || posix;\r\n }\r\n\r\n /* ---------------- actions ---------------- */\r\n\r\n /** 初始化/刷新 */\r\n load(force = false) {\r\n const p = (this.path() || \"\").trim();\r\n if (!p) return;\r\n\r\n // 如果 path 与 currentPath 一样,并且 entries 已经有了,就不重复刷\r\n const cur = (this.currentPath() || \"\").trim();\r\n if (cur && this.normalizePath(cur) === this.normalizePath(p) && this.entries().length && !force) {\r\n this.isEditingPath.set(false);\r\n return;\r\n }\r\n\r\n this.reloading.set(true);\r\n this.isEditingPath.set(false);\r\n\r\n this.fsApi.ls(p, this.showSystemFolders()).subscribe({\r\n next: (res) => {\r\n this.currentPath.set(res.path);\r\n this.entries.set(res.entries);\r\n this.path.set(res.path);\r\n },\r\n error: () => {\r\n this.reloading.set(false);\r\n },\r\n complete: () => {\r\n this.reloading.set(false);\r\n },\r\n });\r\n }\r\n\r\n\r\n toggleShowSystemFolders() {\r\n this.showSystemFolders.update((v) => !v);\r\n this.load();\r\n }\r\n\r\n editPath() {\r\n this.isEditingPath.update((v) => !v);\r\n }\r\n\r\n /** 进入目录 */\r\n open(entry: FsEntry) {\r\n if (entry.type !== \"dir\") return;\r\n this.path.set(entry.fullPath);\r\n this.load();\r\n }\r\n\r\n /** 返回父级目录,直到根目录停止 */\r\n up() {\r\n if (!this.canUp()) return;\r\n\r\n const curRaw = (this.currentPath() || this.path() || \"\").trim();\r\n if (!curRaw) return;\r\n\r\n const cur = this.normalizePath(curRaw);\r\n\r\n // 判断 win/unc\r\n const winCur = cur.replaceAll(\"/\", \"\\\\\");\r\n const isUNC = /^\\\\\\\\[^\\\\]+\\\\[^\\\\]+/.test(winCur);\r\n const isWinDrive = /^[a-zA-Z]:\\\\/.test(winCur);\r\n const isWin = isUNC || isWinDrive;\r\n const sep = isWin ? \"\\\\\" : \"/\";\r\n\r\n // UNC 根:\\\\server\\share 不再上退\r\n if (isUNC) {\r\n const m = winCur.match(/^\\\\\\\\([^\\\\]+)\\\\([^\\\\]+)(?:\\\\(.*))?$/);\r\n if (!m) return;\r\n const root = `\\\\\\\\${m[1]}\\\\${m[2]}`;\r\n if (winCur === root) return;\r\n\r\n const idx = winCur.lastIndexOf(\"\\\\\");\r\n const next = idx <= root.length ? root : winCur.slice(0, idx);\r\n if (this.normalizePath(next) === this.normalizePath(this.currentPath())) return;\r\n\r\n this.path.set(next);\r\n this.load();\r\n return;\r\n }\r\n\r\n // Windows drive:D:\\foo\\bar -> D:\\foo -> D:\\\r\n if (isWinDrive) {\r\n const idx = winCur.lastIndexOf(\"\\\\\");\r\n if (idx <= 2) {\r\n const driveRoot = `${winCur.slice(0, 2)}\\\\`;\r\n if (this.normalizePath(driveRoot) === this.normalizePath(this.currentPath())) return;\r\n this.path.set(driveRoot);\r\n this.load();\r\n return;\r\n }\r\n\r\n const next = winCur.slice(0, idx);\r\n if (this.normalizePath(next) === this.normalizePath(this.currentPath())) return;\r\n this.path.set(next);\r\n this.load();\r\n return;\r\n }\r\n\r\n // Posix:/a/b -> /a -> /\r\n const posixCur = cur.replaceAll(\"\\\\\", \"/\");\r\n if (posixCur === \"/\") return;\r\n\r\n const idx = posixCur.lastIndexOf(\"/\");\r\n const next = idx <= 0 ? \"/\" : posixCur.slice(0, idx);\r\n\r\n if (this.normalizePath(next) === this.normalizePath(this.currentPath())) return;\r\n this.path.set(next);\r\n this.load();\r\n }\r\n\r\n /** breadcrumb 跳转 */\r\n jumpTo(seg: PathSeg) {\r\n if (seg.disabled) return;\r\n this.path.set(seg.fullPath);\r\n this.load();\r\n }\r\n\r\n /** 打开新建文件夹 modal */\r\n openCreateFolderModal() {\r\n this.newFolderName.set(\"\");\r\n this.isCreateFolderModalVisible.set(true);\r\n }\r\n\r\n /** 取消创建 */\r\n cancelCreateFolder() {\r\n this.isCreateFolderModalVisible.set(false);\r\n this.newFolderName.set(\"\");\r\n }\r\n\r\n /** 确认创建 */\r\n confirmCreateFolder() {\r\n const name = (this.newFolderName() || \"\").trim();\r\n if (!name) return;\r\n\r\n const parentPath = this.currentPath() || this.path();\r\n this.fsApi.mkdir(parentPath, name).subscribe(() => {\r\n this.isCreateFolderModalVisible.set(false);\r\n this.newFolderName.set(\"\");\r\n this.load(true);\r\n });\r\n }\r\n\r\n /* ---------------- breadcrumb utils ---------------- */\r\n private buildSegments(raw: string): PathSeg[] {\r\n const p = (raw || \"\").trim();\r\n if (!p) return [];\r\n\r\n const isWin = /^[a-zA-Z]:[\\\\/]/.test(p) || /^[a-zA-Z]:$/.test(p);\r\n const sep = isWin ? \"\\\\\" : \"/\";\r\n\r\n const norm = isWin ? p.replaceAll(\"/\", \"\\\\\") : p.replaceAll(\"\\\\\", \"/\");\r\n\r\n let rootLabel = isWin ? norm.slice(0, 2) : \"/\";\r\n let rest = norm;\r\n\r\n if (isWin) {\r\n const m = norm.match(/^([a-zA-Z]:)(?:[\\\\\\/])?(.*)$/);\r\n if (m) {\r\n rootLabel = m[1];\r\n rest = m[2] || \"\";\r\n }\r\n } else {\r\n rest = norm.startsWith(\"/\") ? norm.slice(1) : norm;\r\n }\r\n\r\n const parts = rest.split(isWin ? /[\\\\]+/ : /[\\/]+/).filter(Boolean);\r\n\r\n const segs: PathSeg[] = [];\r\n const rootFull = isWin ? `${rootLabel}\\\\` : \"/\";\r\n\r\n segs.push({\r\n key: \"root\",\r\n label: rootLabel,\r\n fullPath: rootFull,\r\n disabled: parts.length === 0,\r\n });\r\n\r\n let acc = rootFull;\r\n for (let i = 0; i < parts.length; i++) {\r\n const part = parts[i];\r\n acc = acc.endsWith(sep) ? acc + part : acc + sep + part;\r\n\r\n const isLast = i === parts.length - 1;\r\n const fullPath = isLast ? acc : acc + sep;\r\n\r\n segs.push({\r\n key: `${i}-${part}`,\r\n label: part,\r\n fullPath,\r\n disabled: isLast,\r\n });\r\n }\r\n\r\n return segs;\r\n }\r\n\r\n private normalizePath(raw: string): string {\r\n const p = (raw || \"\").trim();\r\n if (!p) return \"\";\r\n\r\n // 先判断 win/unc\r\n const isUNC = /^\\\\\\\\[^\\\\]+\\\\[^\\\\]+/.test(p.replaceAll(\"/\", \"\\\\\"));\r\n const isWinDrive = /^[a-zA-Z]:([\\\\/]|$)/.test(p);\r\n const isWin = isUNC || isWinDrive;\r\n\r\n let norm = isWin ? p.replaceAll(\"/\", \"\\\\\") : p.replaceAll(\"\\\\\", \"/\");\r\n\r\n // 去掉末尾分隔符,但保留根\r\n if (isWinDrive) {\r\n const drive = norm.slice(0, 2);\r\n if (norm === drive || norm === `${drive}\\\\`) return `${drive}\\\\`;\r\n }\r\n if (!isWin && norm === \"/\") return \"/\";\r\n\r\n norm = norm.replace(/[\\\\\\/]+$/, \"\");\r\n return norm;\r\n }\r\n}\r\n", "<div class=\"page\">\r\n <div class=\"toolbar\">\r\n <button nz-button (click)=\"fs.up()\" [disabled]=\"!fs.canUp()\" nz-tooltip=\"\u4E0A\u4E00\u5C42\">\r\n <nz-icon nzType=\"up\" nzTheme=\"outline\" />\r\n </button>\r\n @if (fs.isEditingPath()) {\r\n <div class=\"path-edit\">\r\n <nz-input-wrapper>\r\n <input\r\n nz-input\r\n nzSize=\"small\"\r\n [(ngModel)]=\"fs.path\"\r\n placeholder=\"\u8F93\u5165\u6587\u4EF6\u5939\u5B8C\u6574\u8DEF\u5F84\uFF0C\u5982 D:\\work \u6216 /Users/xx\"\r\n (keyup.enter)=\"fs.load()\"\r\n />\r\n <button nzInputSuffix nz-button nzType=\"link\">\r\n <nz-icon nzInputSuffix nzType=\"edit\" nzTheme=\"outline\" />\r\n </button>\r\n </nz-input-wrapper>\r\n </div>\r\n } @else {\r\n <div class=\"current-path\">\r\n <div class=\"path-value\">\r\n @for (seg of fs.segments(); track seg.key) {\r\n <div class=\"path-part\">\r\n <button nz-button nzType=\"link\" (click)=\"fs.jumpTo(seg)\">\r\n {{ seg.label }}\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n <button nz-button nzType=\"link\" (click)=\"fs.editPath()\">\r\n <nz-icon nzType=\"edit\" nzTheme=\"outline\" />\r\n </button>\r\n </div>\r\n }\r\n <button\r\n nz-button\r\n nzType=\"primary\"\r\n (click)=\"fs.load(true)\"\r\n [nzLoading]=\"fs.reloading()\"\r\n nz-tooltip=\"\u5237\u65B0\"\r\n >\r\n <nz-icon [nzType]=\"fs.reloading() ? 'loading' : 'reload'\" nzTheme=\"outline\" />\r\n </button>\r\n <button nz-button (click)=\"fs.toggleFavoriteCurrent()\" nz-tooltip=\"\u6DFB\u52A0/\u53D6\u6D88\u6536\u85CF\">\r\n <nz-icon nzType=\"star\" [nzTheme]=\"fs.isCurFavorited() ? 'fill' : 'outline'\" />\r\n </button>\r\n <button\r\n nz-button\r\n nz-tooltip=\"\u6536\u85CF\u7684\u6587\u4EF6\u5939\"\r\n nz-dropdown\r\n [nzDropdownMenu]=\"collectMenu\"\r\n nzTrigger=\"click\"\r\n nzPlacement=\"bottomRight\"\r\n >\r\n <nz-icon nzType=\"caret-down\" nzTheme=\"outline\" />\r\n </button>\r\n <button\r\n nz-button\r\n nz-dropdown\r\n [nzDropdownMenu]=\"moreMenu\"\r\n nzPlacement=\"bottomRight\"\r\n nzTrigger=\"click\"\r\n nz-tooltip=\"\u66F4\u591A\u64CD\u4F5C\"\r\n >\r\n <nz-icon nzType=\"more\" nzTheme=\"outline\" />\r\n </button>\r\n </div>\r\n <div class=\"folders\">\r\n @for (e of fs.entries(); track $index) {\r\n <div class=\"folder-item\" (click)=\"fs.open(e)\">\r\n <div class=\"icon\">\r\n <span nz-icon [nzType]=\"e.type === 'dir' ? 'folder' : 'file'\"></span>\r\n </div>\r\n <div class=\"name\" title=\"{{ e.name }}\">\r\n {{ e.name }}\r\n @if (e.projectKind && e.projectKind != 'unknown') {\r\n <nz-icon\r\n class=\"project-suffix-icon\"\r\n [nzType]=\"'proj:' + e.projectKind\"\r\n nzTheme=\"outline\"\r\n ></nz-icon>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n\r\n<nz-dropdown-menu #collectMenu=\"nzDropdownMenu\">\r\n <ul nz-menu>\r\n @for (fav of fs.favorites(); track fav.path) {\r\n <li nz-menu-item>\r\n <nz-icon nzType=\"folder\" nzTheme=\"fill\" />\r\n <button nz-button nzType=\"link\" (click)=\"fs.openFavorite(fav)\" [nz-tooltip]=\"fav.path\">\r\n {{ fav.label }}\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n</nz-dropdown-menu>\r\n\r\n<nz-dropdown-menu #moreMenu=\"nzDropdownMenu\">\r\n <ul nz-menu>\r\n <li nz-menu-item (click)=\"fs.openCreateFolderModal()\">\r\n <nz-icon nzType=\"folder-add\" nzTheme=\"fill\" style=\"font-size: 16px\" />\r\n \u65B0\u5EFA\u6587\u4EF6\u5939\r\n </li>\r\n <li nz-menu-item (click)=\"fs.toggleShowSystemFolders()\">\r\n <nz-icon nzType=\"eye\" nzTheme=\"fill\" style=\"font-size: 16px\" />\r\n \u662F\u5426\u9690\u85CF\u7CFB\u7EDF\u6587\u4EF6\u5939\r\n <nz-switch [ngModel]=\"fs.showSystemFolders()\" style=\"margin-left: 8px\"></nz-switch>\r\n </li>\r\n </ul>\r\n</nz-dropdown-menu>\r\n\r\n<!--\u65B0\u589E\u6587\u4EF6\u5939-->\r\n<nz-modal\r\n [(nzVisible)]=\"fs.isCreateFolderModalVisible\"\r\n nzTitle=\"\u65B0\u5EFA\u6587\u4EF6\u5939\"\r\n (nzOnCancel)=\"fs.isCreateFolderModalVisible.set(false)\"\r\n [nzMaskClosable]=\"false\"\r\n>\r\n <ng-container *nzModalContent>\r\n <div class=\"modal-body\">\r\n <label>\u6587\u4EF6\u5939\u540D\u79F0\uFF1A </label>\r\n <nz-input-wrapper>\r\n <input nz-input [(ngModel)]=\"fs.newFolderName\" placeholder=\"\u8BF7\u8F93\u5165\u6587\u4EF6\u5939\u540D\u79F0\" />\r\n <nz-icon nzInputPrefix nzType=\"folder\" nzTheme=\"fill\" />\r\n <nz-icon\r\n nzInputSuffix\r\n nzType=\"question-circle\"\r\n nzTheme=\"outline\"\r\n nz-tooltip=\"\u4F60\u53EF\u4EE5\u4F7F\u7528\u8DEF\u5F84\u5206\u9694\u7B26\u6765\u521B\u5EFA\u5D4C\u5957\u7684\u6587\u4EF6\u5939\"\r\n nzTooltipTrigger=\"hover\"\r\n nzTooltipPlacement=\"right\"\r\n />\r\n </nz-input-wrapper>\r\n <div class=\"hint\">{{ fs.currentPath() }}{{ fs.newFolderName() }}</div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *nzModalFooter>\r\n <button nz-button (click)=\"fs.isCreateFolderModalVisible.set(false)\">\u53D6\u6D88</button>\r\n <button\r\n nz-button\r\n nzType=\"primary\"\r\n (click)=\"fs.confirmCreateFolder()\"\r\n [disabled]=\"!fs.newFolderName().trim()\"\r\n >\r\n <nz-icon nzType=\"folder-add\" nzTheme=\"fill\" />\r\n \u521B\u5EFA\r\n </button>\r\n </ng-container>\r\n</nz-modal>\r\n", "/* src/app/pages/projects/components/fs-explorer/fs-explorer.component.less */\n.page {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n.toolbar {\n display: flex;\n gap: 8px;\n align-items: center;\n padding: 16px 0;\n flex: 0 0 auto;\n}\n.folders {\n flex: 100% 1 1;\n height: 0;\n overflow-x: hidden;\n overflow-y: auto;\n position: relative;\n}\n.current-path {\n min-width: 0;\n flex: 100% 1 1;\n display: flex;\n flex-direction: row;\n align-items: stretch;\n border-radius: 3px;\n height: 34px;\n}\n.current-path .path-value {\n flex: auto 1 1;\n display: flex;\n flex-direction: row;\n align-items: stretch;\n}\n.current-path .path-value .path-part {\n flex: auto 0 0;\n border-left-width: 2px;\n border-left-style: solid;\n}\n.path-edit {\n flex: 100% 1 1;\n display: flex;\n flex-direction: row;\n align-items: stretch;\n border-radius: 3px;\n border: none;\n outline: none;\n}\n.folder-item {\n padding: 16px;\n display: flex;\n flex-direction: row;\n align-items: center;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n cursor: pointer;\n position: relative;\n}\n.folder-item .icon {\n margin: 0 4px;\n flex: auto 0 0;\n}\n.folder-item .icon span {\n font-size: 24px;\n}\n.folder-item .name {\n flex: 100% 1 1;\n display: inline-flex;\n align-items: center;\n margin-left: 16px;\n overflow: hidden;\n -ms-text-overflow: ellipsis;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.folder-item .name nz-icon {\n font-size: 16px;\n margin-left: 4px;\n}\n.modal-body {\n display: grid;\n gap: 12px;\n}\n.hint {\n font-size: 12px;\n opacity: 0.75;\n}\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 .current-path {\n background: var(--app-primary-3);\n}\nhtml.default :host button:not(.ant-btn-link) {\n background-color: var(--app-primary-3);\n}\nhtml.default :host .path-part button {\n color: rgba(0, 0, 0, 0.85);\n}\nhtml.default :host .path-part {\n border-left-color: #fff;\n}\nhtml.default :host .folder-item:hover {\n background: var(--app-primary-3);\n}\nhtml.dark {\n}\nhtml.dark :root {\n --text-color-gray: #bbb;\n}\nhtml.dark :host .current-path {\n background: var(--app-primary-3);\n}\nhtml.dark :host button:not(.ant-btn-link) {\n background-color: var(--app-primary-3);\n}\nhtml.dark :host .path-part button {\n color: rgba(255, 255, 255, 0.85);\n}\nhtml.dark :host .path-part {\n border-left-color: #141414;\n}\nhtml.dark :host .folder-item:hover {\n background: var(--app-primary-3);\n}\n/*# sourceMappingURL=fs-explorer.component.css.map */\n", "import { CommonModule } from \"@angular/common\";\r\nimport { Component, OnInit } from \"@angular/core\";\r\nimport { FormsModule } from \"@angular/forms\";\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 { NzInputModule } from \"ng-zorro-antd/input\";\r\nimport { NzMenuModule } from \"ng-zorro-antd/menu\";\r\nimport { NzModalModule } from \"ng-zorro-antd/modal\";\r\nimport { NzSwitchModule } from \"ng-zorro-antd/switch\";\r\nimport { NzTooltipModule } from \"ng-zorro-antd/tooltip\";\r\nimport { FsExplorerService } from \"./fs-explorer.service\";\r\n\r\n@Component({\r\n selector: \"app-fs-explorer\",\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NzInputModule,\r\n NzButtonModule,\r\n NzIconModule,\r\n NzTooltipModule,\r\n NzDropDownModule,\r\n NzMenuModule,\r\n NzSwitchModule,\r\n NzModalModule,\r\n ],\r\n templateUrl: \"./fs-explorer.component.html\",\r\n styleUrl: \"./fs-explorer.component.less\",\r\n})\r\nexport class FsExplorerComponent implements OnInit {\r\n constructor(public fs: FsExplorerService) { }\r\n\r\n ngOnInit() {\r\n this.fs.load();\r\n }\r\n}\r\n", "import { inject, Injectable } from '@angular/core';\r\nimport { ApiClient } from '@core/api';\r\nimport {\r\n CheckRootResult,\r\n DetectResult,\r\n ImportCheckResult,\r\n Project,\r\n ProjectAssets,\r\n} from '@models/project.model';\r\nimport { lastValueFrom, Observable } from 'rxjs';\r\nimport { FsExplorerApiService } from '../components/fs-explorer';\r\nimport { CreateProjectDraft } from '../models/project-draft';\r\nimport { ProjectMemberEntity } from '@models/project.model';\r\n@Injectable({ providedIn: 'root' })\r\nexport class ProjectApiService {\r\n api = inject(ApiClient);\r\n fs = inject(FsExplorerApiService);\r\n\r\n // 调用本地服务检查路径是否存在 & 是否重复注册\r\n async checkPathExists(path: string): Promise<boolean> {\r\n return await lastValueFrom(this.fs.pathExists(path));\r\n }\r\n\r\n detect(rootPath: string): Observable<DetectResult> {\r\n return this.api.post<DetectResult>('/api/projects/detect', { rootPath });\r\n }\r\n\r\n // Electron 里建议通过 preload 暴露 window.ngm.pickFolder()\r\n async pickFolder(): Promise<string | null> {\r\n return null;\r\n }\r\n\r\n bootstrapByCli(draft: CreateProjectDraft): Observable<{ taskId: string; rootPath: string }> {\r\n return this.api.post('/api/projects/bootstrap/cli', {\r\n parentDir: draft.parentDir,\r\n name: draft.name,\r\n rootPath: draft.rootPath,\r\n packageManager: draft.packageManager,\r\n overwriteIfExists: draft.overwriteIfExists,\r\n skipOnboarding: draft.skipOnboarding,\r\n initGit: draft.initGit,\r\n initialCommitMessage: draft.initialCommitMessage,\r\n cliFramework: draft.cliFramework,\r\n cliTool: draft.cliTool,\r\n cliArgs: draft.cliArgs ?? [],\r\n });\r\n }\r\n\r\n bootstrapPickRoot(input: { taskId: string; pickedRoot: string }) {\r\n return this.api.post<{ ok: boolean; reason?: string; projectId?: string; rootPath?: string }>(\r\n '/api/projects/bootstrap/pickRoot',\r\n input,\r\n );\r\n }\r\n\r\n bootstrapByGit(draft: CreateProjectDraft): Observable<{ taskId: string; rootPath: string }> {\r\n return this.api.post('/api/projects/bootstrap/git', {\r\n repoUrl: draft.repoUrl,\r\n parentDir: draft.parentDir,\r\n name: draft.name,\r\n rootPath: draft.rootPath,\r\n overwriteIfExists: draft.overwriteIfExists,\r\n initGit: draft.initGit,\r\n initialCommitMessage: draft.initialCommitMessage,\r\n packageManager: draft.packageManager,\r\n skipOnboarding: draft.skipOnboarding ?? true,\r\n });\r\n }\r\n\r\n // 从hub-v2中获取项目成员\r\n getProjectMembers(projectId: string) {\r\n return this.api.hubRequestWithPrjId<{ items: ProjectMemberEntity[] }>({\r\n projectId: projectId,\r\n path: '/members',\r\n });\r\n }\r\n\r\n list() {\r\n return this.api.get<Project[]>('/api/projects/list');\r\n }\r\n\r\n get(id: string) {\r\n return this.api.get<Project>(`/api/projects/getInfo/${id}`);\r\n }\r\n\r\n check(rootPath: string) {\r\n return this.api.post<CheckRootResult>('/api/projects/check', { rootPath });\r\n }\r\n\r\n createByPath(data: { root: string; name: string; syncTasks?: boolean }) {\r\n return this.api.post<{ id: string }>('/api/projects/create', data);\r\n }\r\n\r\n checkImport(root: string) {\r\n return this.api.post<ImportCheckResult>('/api/projects/checkImport', { root });\r\n }\r\n\r\n importByPath(data: { root: string; name?: string; syncTasks?: boolean }) {\r\n return this.api.post<{ id: string }>('/api/projects/import', data);\r\n }\r\n\r\n delete(id: string) {\r\n return this.api.delete<{ id: string }>(`/api/projects/delete/${id}`);\r\n }\r\n\r\n update(id: string, data: Partial<Project>) {\r\n return this.api.post<Project>(`/api/projects/update/${id}`, data);\r\n }\r\n\r\n setFavorite(id: string, isFavorite: boolean) {\r\n return this.api.post<Project>(`/api/projects/favorite/${id}`, { isFavorite });\r\n }\r\n\r\n toggleFavorite(id: string) {\r\n return this.api.post<Project>(`/api/projects/favorite/${id}/toggle`, {});\r\n }\r\n\r\n setLastOpened(id: string, timestamp: number) {\r\n return this.api.post<Project>(`/api/projects/lastOpened/${id}`, { timestamp });\r\n }\r\n\r\n openInEditor(id: string, editor: 'code' | 'system' = 'code') {\r\n return this.api.post<{ ok: boolean }>(`/api/projects/openInEditor/${id}`, { editor });\r\n }\r\n\r\n edit(\r\n projectId: string,\r\n data: { name: string; description?: string; repoPageUrl?: string },\r\n ): Observable<Project> {\r\n return this.api.post<Project>(`/api/projects/edit/${projectId}`, data);\r\n }\r\n\r\n updateAssets(projectId: string, assets: ProjectAssets): Observable<Project> {\r\n return this.api.post<Project>(`/api/projects/updateAssets/${projectId}`, { assets });\r\n }\r\n}\r\n", "import { computed, inject, Injectable, signal } from '@angular/core';\r\nimport { EditingProjectDraft, Project, ProjectMemberEntity } from '@models/project.model';\r\nimport { ProjectApiService } from './project-api.service';\r\nimport { UiNotifierService } from '@core/ui-notifier.service';\r\nimport { NzModalService } from 'ng-zorro-antd/modal';\r\nimport { LocalStateStore, LS_KEYS } from '@core/local-state';\r\nimport { Router } from '@angular/router';\r\nimport { ProjectContextStore } from '@app/core/stores/project-context/project-context.store';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ProjectStateService {\r\n private modal = inject(NzModalService);\r\n private notify = inject(UiNotifierService);\r\n private projectService = inject(ProjectApiService);\r\n private projectContext = inject(ProjectContextStore);\r\n private ls = inject(LocalStateStore);\r\n private router = inject(Router);\r\n\r\n projects = computed(() => this.projectContext.projects());\r\n\r\n keyword = signal<string>('');\r\n\r\n /* ----------------- edit modal state ----------------- */\r\n isEditModalVisible = signal(false);\r\n isEditSaving = signal(false);\r\n /* 正在编辑的项目 */\r\n editingProject = signal<EditingProjectDraft | null>(null);\r\n\r\n /* ----------------- list computed ----------------- */\r\n filteredProjects = computed(() => {\r\n const kw = this.keyword().trim().toLowerCase();\r\n if (!kw) return this.projects();\r\n return this.projects().filter((p) => p.name.toLowerCase().includes(kw));\r\n }); \r\n favoriteProjects = computed(() => this.filteredProjects().filter((p) => p.isFavorite));\r\n moreProjects = computed(() => this.filteredProjects().filter((p) => !p.isFavorite));\r\n recentProjects = computed(() =>\r\n this.projects()\r\n .slice()\r\n .sort((a, b) => {\r\n const dateA = new Date(a.lastOpened || 0).getTime();\r\n const dateB = new Date(b.lastOpened || 0).getTime();\r\n return dateB - dateA;\r\n })\r\n .slice(0, 5),\r\n );\r\n\r\n /** 点击列表项:切换当前项目 + 记录 lastOpened */\r\n selectProject(project: Project) {\r\n // this.setCurrentProject(project);\r\n this.projectContext.setCurrentProject(project);\r\n const lastOpened = Date.now();\r\n this.projectContext.patchProject({ ...project, lastOpened });\r\n // 异步落库\r\n this.projectService.setLastOpened(project.id, lastOpened).subscribe();\r\n\r\n this.router.navigate(['/dashboard']);\r\n }\r\n\r\n openInEditor(projectId: string) {\r\n this.projectService.openInEditor(projectId).subscribe({\r\n next: () => {\r\n console.log('Opened project in editor:', projectId);\r\n this.notify.success('已在编辑器中打开项目');\r\n },\r\n });\r\n }\r\n\r\n toggleFavorite(projectId: string) {\r\n this.projectService.toggleFavorite(projectId).subscribe((updated) => {\r\n // this.patchProject(updated);\r\n this.projectContext.patchProject(updated);\r\n });\r\n }\r\n\r\n getProjects(currentProjectId?: string) {\r\n this.projectContext.loadProjects(currentProjectId).subscribe();\r\n }\r\n\r\n setCurrentProjectById(projectId: string) {\r\n this.projectContext.setCurrentProjectById(projectId);\r\n }\r\n\r\n isOpen(project: Project): boolean {\r\n // return this.currentProjectId() === project.id;\r\n return this.projectContext.isOpen(project);\r\n }\r\n\r\n /* ----------------- rename modal ----------------- */\r\n /** 打开重命名弹窗:默认带入当前名称 */\r\n openEditModal(project: Project) {\r\n const env = project.env ?? {};\r\n this.editingProject.set({\r\n id: project.id,\r\n name: project.name ?? '',\r\n repoPageUrl: project.repoPageUrl ?? '',\r\n description: project.description ?? '',\r\n hubV2: {\r\n baseUrl: env['NGM_HUB_V2_BASE_URL'] ?? '',\r\n projectKey: env['NGM_HUB_V2_PROJECT_KEY'] ?? '',\r\n token: env['NGM_HUB_V2_TOKEN'] ?? '',\r\n },\r\n });\r\n this.isEditModalVisible.set(true);\r\n }\r\n\r\n closeEditModal() {\r\n if (this.isEditSaving()) return;\r\n this.isEditModalVisible.set(false);\r\n this.editingProject.set(null);\r\n }\r\n\r\n confirmEditProject() {\r\n if (this.isEditSaving() || !this.editingProject()) return;\r\n const { id, name, description, repoPageUrl, hubV2 } = this.editingProject()!;\r\n\r\n if (!id) {\r\n this.notify.error('未选中需要重命名的项目');\r\n return;\r\n }\r\n if (!name) return;\r\n const desc = description?.trim();\r\n const repoPUrl = repoPageUrl?.trim();\r\n const nextHubV2 = {\r\n baseUrl: hubV2.baseUrl.trim(),\r\n projectKey: hubV2.projectKey.trim(),\r\n token: hubV2.token.trim(),\r\n };\r\n const current = this.projectContext.getProjectById(id);\r\n const currentEnv = current?.env ?? {};\r\n if (\r\n current &&\r\n current.name === name &&\r\n current.description === desc &&\r\n current.repoPageUrl === repoPUrl &&\r\n (currentEnv['NGM_HUB_V2_BASE_URL'] ?? '') === nextHubV2.baseUrl &&\r\n (currentEnv['NGM_HUB_V2_PROJECT_KEY'] ?? '') === nextHubV2.projectKey &&\r\n (currentEnv['NGM_HUB_V2_TOKEN'] ?? '') === nextHubV2.token\r\n ) {\r\n this.closeEditModal();\r\n return;\r\n }\r\n\r\n this.isEditSaving.set(true);\r\n this.projectService.edit(id, { name, description: desc, repoPageUrl: repoPUrl }).subscribe({\r\n next: () => {\r\n const nextEnv = {\r\n ...(current?.env ?? {}),\r\n NGM_HUB_V2_BASE_URL: nextHubV2.baseUrl,\r\n NGM_HUB_V2_PROJECT_KEY: nextHubV2.projectKey,\r\n NGM_HUB_V2_TOKEN: nextHubV2.token,\r\n };\r\n this.projectService.update(id, { env: nextEnv }).subscribe({\r\n next: (updated) => {\r\n this.projectContext.patchProject(updated);\r\n this.notify.success('修改成功');\r\n this.closeEditModal();\r\n this.isEditSaving.set(false);\r\n },\r\n error: (err) => {\r\n this.notify.error(err?.message || '项目配置保存失败');\r\n this.isEditSaving.set(false);\r\n },\r\n });\r\n },\r\n error: (err) => {\r\n this.notify.error(err?.message || '修改失败');\r\n this.isEditSaving.set(false);\r\n },\r\n });\r\n }\r\n\r\n /** 删除项目 */\r\n deleteProject(projectId: string) {\r\n this.modal.confirm({\r\n nzTitle: '确认删除该项目吗?',\r\n nzContent: '删除项目只会移除项目记录,不会删除磁盘上的文件夹。如需删除磁盘文件,请手动操作。',\r\n nzOkText: '删除',\r\n nzCancelText: '取消',\r\n nzOkDanger: true,\r\n nzOnOk: () => {\r\n this.projectService.delete(projectId).subscribe({\r\n next: () => {\r\n this.projectContext.removeProject(projectId);\r\n\r\n if (!this.projectContext.currentProject()) {\r\n this.notify.info('当前没有项目,请先创建或导入项目');\r\n }\r\n this.notify.success('项目已删除');\r\n },\r\n });\r\n },\r\n });\r\n }\r\n}\r\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["FsExplorerApiService", "FsExplorerService", "map", "idx", "next", "fs_explorer_component_default", "FsExplorerComponent", "ProjectApiService", "ProjectStateService"]
|
|
7
|
-
}
|
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
NzFormModule
|
|
3
|
-
} from "./chunk-P5CWA4FO.js";
|
|
4
|
-
import "./chunk-ULOHDK7Y.js";
|
|
5
|
-
import "./chunk-KSHAGY2M.js";
|
|
6
|
-
import "./chunk-VXHZMSDM.js";
|
|
7
|
-
import {
|
|
8
|
-
NzSelectModule
|
|
9
|
-
} from "./chunk-ETTBRXVA.js";
|
|
10
|
-
import {
|
|
11
|
-
PageLayoutComponent
|
|
12
|
-
} from "./chunk-6QMSEZPT.js";
|
|
13
|
-
import "./chunk-APGQRYWX.js";
|
|
14
|
-
import {
|
|
15
|
-
ApiClient
|
|
16
|
-
} from "./chunk-2YSUXBGC.js";
|
|
17
|
-
import {
|
|
18
|
-
FormsModule,
|
|
19
|
-
NzButtonModule,
|
|
20
|
-
NzInputModule
|
|
21
|
-
} from "./chunk-RUXJCM3V.js";
|
|
22
|
-
import "./chunk-VYNQPZQO.js";
|
|
23
|
-
import {
|
|
24
|
-
CommonModule
|
|
25
|
-
} from "./chunk-3MCIETCQ.js";
|
|
26
|
-
import {
|
|
27
|
-
Component,
|
|
28
|
-
Injectable,
|
|
29
|
-
__decorate,
|
|
30
|
-
firstValueFrom,
|
|
31
|
-
inject,
|
|
32
|
-
signal
|
|
33
|
-
} from "./chunk-XQY5SPGI.js";
|
|
34
|
-
|
|
35
|
-
// angular:jit:style:inline:src\app\pages\about\feedback.component.ts;CiAgICAgIC5mZWVkYmFjay1ibG9jayB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2YwZjBmMDsKICAgICAgICBtYXgtd2lkdGg6IDcyMHB4OwogICAgICB9CiAgICAgIC5zdWJtaXQtdGlwIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgIGNvbG9yOiAjMzg5ZTBkOwogICAgICB9CgogICAgICAuc3VibWl0LXRpcC5lcnJvciB7CiAgICAgICAgY29sb3I6ICNjZjEzMjI7CiAgICAgIH0KICAgIA==
|
|
36
|
-
var feedback_component_default = "/* angular:styles/component:less;8f3fd587c7db6ecb20cc35654414fdf2e6b878c05876df365e2a239c77ec56eb;D:\\ng-manager\\webapp\\src\\app\\pages\\about\\feedback.component.ts */\n.feedback-block {\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid #f0f0f0;\n max-width: 720px;\n}\n.submit-tip {\n margin-top: 12px;\n color: #389e0d;\n}\n.submit-tip.error {\n color: #cf1322;\n}\n/*# sourceMappingURL=feedback.component.css.map */\n";
|
|
37
|
-
|
|
38
|
-
// src/app/pages/about/about-feedback.service.ts
|
|
39
|
-
var AboutFeedbackService = class AboutFeedbackService2 {
|
|
40
|
-
api = inject(ApiClient);
|
|
41
|
-
submit(payload) {
|
|
42
|
-
return this.api.post("/api/hub/feedback", payload);
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
AboutFeedbackService = __decorate([
|
|
46
|
-
Injectable({
|
|
47
|
-
providedIn: "root"
|
|
48
|
-
})
|
|
49
|
-
], AboutFeedbackService);
|
|
50
|
-
|
|
51
|
-
// src/app/pages/about/feedback.component.ts
|
|
52
|
-
var FeedbackComponent = class FeedbackComponent2 {
|
|
53
|
-
feedbackApi = inject(AboutFeedbackService);
|
|
54
|
-
version = "0.1.12";
|
|
55
|
-
categoryOptions = [
|
|
56
|
-
{ label: "\u95EE\u9898\u53CD\u9988", value: "bug" },
|
|
57
|
-
{ label: "\u529F\u80FD\u5EFA\u8BAE", value: "suggestion" },
|
|
58
|
-
{ label: "\u65B0\u529F\u80FD\u9700\u6C42", value: "feature" },
|
|
59
|
-
{ label: "\u5176\u4ED6", value: "other" }
|
|
60
|
-
];
|
|
61
|
-
category = "suggestion";
|
|
62
|
-
title = "";
|
|
63
|
-
content = "";
|
|
64
|
-
contact = "";
|
|
65
|
-
submitting = signal(false);
|
|
66
|
-
submitMessage = signal("");
|
|
67
|
-
submitType = signal("success");
|
|
68
|
-
async submitFeedback() {
|
|
69
|
-
const title = this.title.trim();
|
|
70
|
-
const content = this.content.trim();
|
|
71
|
-
const contact = this.contact.trim();
|
|
72
|
-
if (!title) {
|
|
73
|
-
this.submitType.set("error");
|
|
74
|
-
this.submitMessage.set("\u6807\u9898\u4E0D\u80FD\u4E3A\u7A7A");
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
if (!content) {
|
|
78
|
-
this.submitType.set("error");
|
|
79
|
-
this.submitMessage.set("\u5185\u5BB9\u4E0D\u80FD\u4E3A\u7A7A");
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
this.submitting.set(true);
|
|
83
|
-
this.submitMessage.set("");
|
|
84
|
-
try {
|
|
85
|
-
await firstValueFrom(this.feedbackApi.submit({
|
|
86
|
-
projectKey: "prj_kmf73us77x0r1z4b3g76soc5",
|
|
87
|
-
// ng-manager 项目
|
|
88
|
-
category: this.category,
|
|
89
|
-
title,
|
|
90
|
-
content,
|
|
91
|
-
contact: contact || void 0,
|
|
92
|
-
clientName: "ng-manager-webapp",
|
|
93
|
-
clientVersion: "0.1.12",
|
|
94
|
-
osInfo: typeof navigator === "undefined" ? "unknown" : navigator.userAgent
|
|
95
|
-
}));
|
|
96
|
-
this.submitType.set("success");
|
|
97
|
-
this.submitMessage.set("\u53CD\u9988\u63D0\u4EA4\u6210\u529F\uFF0C\u611F\u8C22\u4F60\u7684\u5EFA\u8BAE\u3002");
|
|
98
|
-
this.title = "";
|
|
99
|
-
this.content = "";
|
|
100
|
-
this.contact = "";
|
|
101
|
-
this.category = "suggestion";
|
|
102
|
-
} catch (error) {
|
|
103
|
-
this.submitType.set("error");
|
|
104
|
-
this.submitMessage.set(error?.message || "\u63D0\u4EA4\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5\u3002");
|
|
105
|
-
} finally {
|
|
106
|
-
this.submitting.set(false);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
FeedbackComponent = __decorate([
|
|
111
|
-
Component({
|
|
112
|
-
selector: "app-feedback.component",
|
|
113
|
-
imports: [
|
|
114
|
-
CommonModule,
|
|
115
|
-
FormsModule,
|
|
116
|
-
NzFormModule,
|
|
117
|
-
NzInputModule,
|
|
118
|
-
NzSelectModule,
|
|
119
|
-
NzButtonModule,
|
|
120
|
-
PageLayoutComponent
|
|
121
|
-
],
|
|
122
|
-
template: `
|
|
123
|
-
<app-page-layout [title]="'\u7528\u6237\u53CD\u9988'">
|
|
124
|
-
<div class="feedback-block">
|
|
125
|
-
<h3>\u7528\u6237\u53CD\u9988</h3>
|
|
126
|
-
<form nz-form nzLayout="vertical" (ngSubmit)="submitFeedback()">
|
|
127
|
-
<nz-form-item>
|
|
128
|
-
<nz-form-label nzRequired>\u53CD\u9988\u7C7B\u578B</nz-form-label>
|
|
129
|
-
<nz-form-control>
|
|
130
|
-
<nz-select [(ngModel)]="category" name="category" [disabled]="submitting()">
|
|
131
|
-
@for (option of categoryOptions; track option.value) {
|
|
132
|
-
<nz-option [nzLabel]="option.label" [nzValue]="option.value"></nz-option>
|
|
133
|
-
}
|
|
134
|
-
</nz-select>
|
|
135
|
-
</nz-form-control>
|
|
136
|
-
</nz-form-item>
|
|
137
|
-
|
|
138
|
-
<nz-form-item>
|
|
139
|
-
<nz-form-label nzRequired>\u6807\u9898</nz-form-label>
|
|
140
|
-
<nz-form-control>
|
|
141
|
-
<input
|
|
142
|
-
nz-input
|
|
143
|
-
name="title"
|
|
144
|
-
[(ngModel)]="title"
|
|
145
|
-
[maxlength]="120"
|
|
146
|
-
[disabled]="submitting()"
|
|
147
|
-
placeholder="\u8BF7\u7B80\u8981\u63CF\u8FF0\u4F60\u7684\u95EE\u9898\u6216\u5EFA\u8BAE"
|
|
148
|
-
/>
|
|
149
|
-
</nz-form-control>
|
|
150
|
-
</nz-form-item>
|
|
151
|
-
|
|
152
|
-
<nz-form-item>
|
|
153
|
-
<nz-form-label nzRequired>\u5185\u5BB9</nz-form-label>
|
|
154
|
-
<nz-form-control >
|
|
155
|
-
<textarea
|
|
156
|
-
nz-input
|
|
157
|
-
name="content"
|
|
158
|
-
[(ngModel)]="content"
|
|
159
|
-
[maxlength]="5000"
|
|
160
|
-
[disabled]="submitting()"
|
|
161
|
-
rows="5"
|
|
162
|
-
placeholder="\u8BF7\u8865\u5145\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u4FBF\u4E8E\u6211\u4EEC\u5B9A\u4F4D\u95EE\u9898"
|
|
163
|
-
></textarea>
|
|
164
|
-
</nz-form-control>
|
|
165
|
-
</nz-form-item>
|
|
166
|
-
|
|
167
|
-
<nz-form-item>
|
|
168
|
-
<nz-form-label>\u8054\u7CFB\u65B9\u5F0F</nz-form-label>
|
|
169
|
-
<nz-form-control>
|
|
170
|
-
<input
|
|
171
|
-
nz-input
|
|
172
|
-
name="contact"
|
|
173
|
-
[(ngModel)]="contact"
|
|
174
|
-
[maxlength]="120"
|
|
175
|
-
[disabled]="submitting()"
|
|
176
|
-
placeholder="\u90AE\u7BB1\u3001IM \u6216\u5176\u4ED6\u8054\u7CFB\u65B9\u5F0F\uFF08\u9009\u586B\uFF09"
|
|
177
|
-
/>
|
|
178
|
-
</nz-form-control>
|
|
179
|
-
</nz-form-item>
|
|
180
|
-
|
|
181
|
-
<button nz-button nzType="primary" [nzLoading]="submitting()" [disabled]="submitting()">
|
|
182
|
-
\u63D0\u4EA4\u53CD\u9988
|
|
183
|
-
</button>
|
|
184
|
-
</form>
|
|
185
|
-
|
|
186
|
-
@if (submitMessage()) {
|
|
187
|
-
<p class="submit-tip" [class.error]="submitType() === 'error'">{{ submitMessage() }}</p>
|
|
188
|
-
}
|
|
189
|
-
</div>
|
|
190
|
-
</app-page-layout>
|
|
191
|
-
`,
|
|
192
|
-
styles: [feedback_component_default]
|
|
193
|
-
})
|
|
194
|
-
], FeedbackComponent);
|
|
195
|
-
export {
|
|
196
|
-
FeedbackComponent
|
|
197
|
-
};
|
|
198
|
-
//# sourceMappingURL=chunk-H43HGCRW.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["angular:jit:style:inline:src\\app\\pages\\about\\feedback.component.ts;CiAgICAgIC5mZWVkYmFjay1ibG9jayB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2YwZjBmMDsKICAgICAgICBtYXgtd2lkdGg6IDcyMHB4OwogICAgICB9CiAgICAgIC5zdWJtaXQtdGlwIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgIGNvbG9yOiAjMzg5ZTBkOwogICAgICB9CgogICAgICAuc3VibWl0LXRpcC5lcnJvciB7CiAgICAgICAgY29sb3I6ICNjZjEzMjI7CiAgICAgIH0KICAgIA==", "src/app/pages/about/about-feedback.service.ts", "src/app/pages/about/feedback.component.ts"],
|
|
4
|
-
"sourcesContent": ["/* angular:styles/component:less;8f3fd587c7db6ecb20cc35654414fdf2e6b878c05876df365e2a239c77ec56eb;D:\\ng-manager\\webapp\\src\\app\\pages\\about\\feedback.component.ts */\n.feedback-block {\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid #f0f0f0;\n max-width: 720px;\n}\n.submit-tip {\n margin-top: 12px;\n color: #389e0d;\n}\n.submit-tip.error {\n color: #cf1322;\n}\n/*# sourceMappingURL=feedback.component.css.map */\n", "import { inject, Injectable } from '@angular/core';\nimport { ApiClient } from '@app/core';\n\nexport type FeedbackCategory = 'bug' | 'suggestion' | 'feature' | 'other';\n\nexport type SubmitFeedbackPayload = {\n category: FeedbackCategory;\n title: string;\n content: string;\n contact?: string;\n projectKey?: string;\n clientName?: string;\n clientVersion?: string;\n osInfo?: string;\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AboutFeedbackService {\n private api = inject(ApiClient);\n\n submit(payload: SubmitFeedbackPayload) {\n return this.api.post<{ id: string }>('/api/hub/feedback', payload);\n }\n}\r\n", "import { Component, inject, signal } from '@angular/core';\r\nimport { PageLayoutComponent } from '@app/shared';\r\nimport { NzButtonModule } from 'ng-zorro-antd/button';\r\nimport { NzFormModule } from 'ng-zorro-antd/form';\r\nimport { NzInputModule } from 'ng-zorro-antd/input';\r\nimport { NzSelectModule } from 'ng-zorro-antd/select';\r\nimport { AboutFeedbackService, FeedbackCategory } from './about-feedback.service';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n\r\n@Component({\r\n selector: 'app-feedback.component',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NzFormModule,\r\n NzInputModule,\r\n NzSelectModule,\r\n NzButtonModule,\r\n PageLayoutComponent\r\n ],\r\n template: `\r\n <app-page-layout [title]=\"'用户反馈'\">\r\n <div class=\"feedback-block\">\r\n <h3>用户反馈</h3>\r\n <form nz-form nzLayout=\"vertical\" (ngSubmit)=\"submitFeedback()\">\r\n <nz-form-item>\r\n <nz-form-label nzRequired>反馈类型</nz-form-label>\r\n <nz-form-control>\r\n <nz-select [(ngModel)]=\"category\" name=\"category\" [disabled]=\"submitting()\">\r\n @for (option of categoryOptions; track option.value) {\r\n <nz-option [nzLabel]=\"option.label\" [nzValue]=\"option.value\"></nz-option>\r\n }\r\n </nz-select>\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label nzRequired>标题</nz-form-label>\r\n <nz-form-control>\r\n <input\r\n nz-input\r\n name=\"title\"\r\n [(ngModel)]=\"title\"\r\n [maxlength]=\"120\"\r\n [disabled]=\"submitting()\"\r\n placeholder=\"请简要描述你的问题或建议\"\r\n />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label nzRequired>内容</nz-form-label>\r\n <nz-form-control >\r\n <textarea\r\n nz-input\r\n name=\"content\"\r\n [(ngModel)]=\"content\"\r\n [maxlength]=\"5000\"\r\n [disabled]=\"submitting()\"\r\n rows=\"5\"\r\n placeholder=\"请补充详细信息,便于我们定位问题\"\r\n ></textarea>\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label>联系方式</nz-form-label>\r\n <nz-form-control>\r\n <input\r\n nz-input\r\n name=\"contact\"\r\n [(ngModel)]=\"contact\"\r\n [maxlength]=\"120\"\r\n [disabled]=\"submitting()\"\r\n placeholder=\"邮箱、IM 或其他联系方式(选填)\"\r\n />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <button nz-button nzType=\"primary\" [nzLoading]=\"submitting()\" [disabled]=\"submitting()\">\r\n 提交反馈\r\n </button>\r\n </form>\r\n\r\n @if (submitMessage()) {\r\n <p class=\"submit-tip\" [class.error]=\"submitType() === 'error'\">{{ submitMessage() }}</p>\r\n }\r\n </div>\r\n </app-page-layout>\r\n `,\r\n styles: [\r\n `\r\n .feedback-block {\r\n margin-top: 24px;\r\n padding-top: 16px;\r\n border-top: 1px solid #f0f0f0;\r\n max-width: 720px;\r\n }\r\n .submit-tip {\r\n margin-top: 12px;\r\n color: #389e0d;\r\n }\r\n\r\n .submit-tip.error {\r\n color: #cf1322;\r\n }\r\n `,\r\n ]\r\n})\r\nexport class FeedbackComponent {\r\n private feedbackApi = inject(AboutFeedbackService);\r\n readonly version = '0.1.12';\r\n\r\n readonly categoryOptions: Array<{ label: string; value: FeedbackCategory }> = [\r\n { label: '问题反馈', value: 'bug' },\r\n { label: '功能建议', value: 'suggestion' },\r\n { label: '新功能需求', value: 'feature' },\r\n { label: '其他', value: 'other' },\r\n ];\r\n\r\n category: FeedbackCategory = 'suggestion';\r\n title = '';\r\n content = '';\r\n contact = '';\r\n\r\n submitting = signal(false);\r\n submitMessage = signal('');\r\n submitType = signal<'success' | 'error'>('success');\r\n\r\n async submitFeedback() {\r\n const title = this.title.trim();\r\n const content = this.content.trim();\r\n const contact = this.contact.trim();\r\n\r\n if (!title) {\r\n this.submitType.set('error');\r\n this.submitMessage.set('标题不能为空');\r\n return;\r\n }\r\n if (!content) {\r\n this.submitType.set('error');\r\n this.submitMessage.set('内容不能为空');\r\n return;\r\n }\r\n\r\n this.submitting.set(true);\r\n this.submitMessage.set('');\r\n\r\n try {\r\n await firstValueFrom(\r\n this.feedbackApi.submit({\r\n projectKey: 'prj_kmf73us77x0r1z4b3g76soc5', // ng-manager 项目\r\n category: this.category,\r\n title,\r\n content,\r\n contact: contact || undefined,\r\n clientName: 'ng-manager-webapp',\r\n clientVersion: '0.1.12',\r\n osInfo: typeof navigator === 'undefined' ? 'unknown' : navigator.userAgent,\r\n })\r\n );\r\n\r\n this.submitType.set('success');\r\n this.submitMessage.set('反馈提交成功,感谢你的建议。');\r\n this.title = '';\r\n this.content = '';\r\n this.contact = '';\r\n this.category = 'suggestion';\r\n } catch (error: any) {\r\n this.submitType.set('error');\r\n this.submitMessage.set(error?.message || '提交失败,请稍后再试。');\r\n } finally {\r\n this.submitting.set(false);\r\n }\r\n }\r\n}\r\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;ACmBO,IAAM,uBAAN,MAAMA,sBAAoB;EACvB,MAAM,OAAO,SAAS;EAE9B,OAAO,SAA8B;AACnC,WAAO,KAAK,IAAI,KAAqB,qBAAqB,OAAO;EACnE;;AALW,uBAAoB,WAAA;EAHhC,WAAW;IACV,YAAY;GACb;GACY,oBAAoB;;;AC6F1B,IAAM,oBAAN,MAAMC,mBAAiB;EACpB,cAAc,OAAO,oBAAoB;EACxC,UAAU;EAEV,kBAAqE;IAC5E,EAAE,OAAO,4BAAQ,OAAO,MAAK;IAC7B,EAAE,OAAO,4BAAQ,OAAO,aAAY;IACpC,EAAE,OAAO,kCAAS,OAAO,UAAS;IAClC,EAAE,OAAO,gBAAM,OAAO,QAAO;;EAG/B,WAA6B;EAC7B,QAAQ;EACR,UAAU;EACV,UAAU;EAEV,aAAa,OAAO,KAAK;EACzB,gBAAgB,OAAO,EAAE;EACzB,aAAa,OAA4B,SAAS;EAElD,MAAM,iBAAc;AAClB,UAAM,QAAQ,KAAK,MAAM,KAAI;AAC7B,UAAM,UAAU,KAAK,QAAQ,KAAI;AACjC,UAAM,UAAU,KAAK,QAAQ,KAAI;AAEjC,QAAI,CAAC,OAAO;AACV,WAAK,WAAW,IAAI,OAAO;AAC3B,WAAK,cAAc,IAAI,sCAAQ;AAC/B;IACF;AACA,QAAI,CAAC,SAAS;AACZ,WAAK,WAAW,IAAI,OAAO;AAC3B,WAAK,cAAc,IAAI,sCAAQ;AAC/B;IACF;AAEA,SAAK,WAAW,IAAI,IAAI;AACxB,SAAK,cAAc,IAAI,EAAE;AAEzB,QAAI;AACF,YAAM,eACJ,KAAK,YAAY,OAAO;QACtB,YAAY;;QACZ,UAAU,KAAK;QACf;QACA;QACA,SAAS,WAAW;QACpB,YAAY;QACZ,eAAe;QACf,QAAQ,OAAO,cAAc,cAAc,YAAY,UAAU;OAClE,CAAC;AAGJ,WAAK,WAAW,IAAI,SAAS;AAC7B,WAAK,cAAc,IAAI,sFAAgB;AACvC,WAAK,QAAQ;AACb,WAAK,UAAU;AACf,WAAK,UAAU;AACf,WAAK,WAAW;IAClB,SAAS,OAAY;AACnB,WAAK,WAAW,IAAI,OAAO;AAC3B,WAAK,cAAc,IAAI,OAAO,WAAW,oEAAa;IACxD;AACE,WAAK,WAAW,IAAI,KAAK;IAC3B;EACF;;AAjEW,oBAAiB,WAAA;EApG7B,UAAU;IACT,UAAU;IACV,SAAS;MACP;MACA;MACA;MACA;MACA;MACA;MACA;;IAEF,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwFX;GACY,iBAAiB;",
|
|
6
|
-
"names": ["AboutFeedbackService", "FeedbackComponent"]
|
|
7
|
-
}
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Directionality,
|
|
3
|
-
NzIconDirective,
|
|
4
|
-
NzIconModule,
|
|
5
|
-
isPresetColor,
|
|
6
|
-
isStatusColor,
|
|
7
|
-
presetColors,
|
|
8
|
-
statusColors,
|
|
9
|
-
takeUntilDestroyed
|
|
10
|
-
} from "./chunk-RUXJCM3V.js";
|
|
11
|
-
import {
|
|
12
|
-
ChangeDetectionStrategy,
|
|
13
|
-
ChangeDetectorRef,
|
|
14
|
-
Component,
|
|
15
|
-
DestroyRef,
|
|
16
|
-
ElementRef,
|
|
17
|
-
EventEmitter,
|
|
18
|
-
FactoryTarget,
|
|
19
|
-
Input,
|
|
20
|
-
NgModule,
|
|
21
|
-
Output,
|
|
22
|
-
Renderer2,
|
|
23
|
-
ViewEncapsulation,
|
|
24
|
-
booleanAttribute,
|
|
25
|
-
core_exports,
|
|
26
|
-
inject,
|
|
27
|
-
ɵɵngDeclareClassMetadata,
|
|
28
|
-
ɵɵngDeclareComponent,
|
|
29
|
-
ɵɵngDeclareFactory,
|
|
30
|
-
ɵɵngDeclareInjector,
|
|
31
|
-
ɵɵngDeclareNgModule
|
|
32
|
-
} from "./chunk-XQY5SPGI.js";
|
|
33
|
-
|
|
34
|
-
// node_modules/ng-zorro-antd/fesm2022/ng-zorro-antd-tag.mjs
|
|
35
|
-
var NzTagComponent = class _NzTagComponent {
|
|
36
|
-
cdr = inject(ChangeDetectorRef);
|
|
37
|
-
renderer = inject(Renderer2);
|
|
38
|
-
el = inject(ElementRef).nativeElement;
|
|
39
|
-
directionality = inject(Directionality);
|
|
40
|
-
destroyRef = inject(DestroyRef);
|
|
41
|
-
nzMode = "default";
|
|
42
|
-
nzColor;
|
|
43
|
-
nzChecked = false;
|
|
44
|
-
nzBordered = true;
|
|
45
|
-
nzOnClose = new EventEmitter();
|
|
46
|
-
nzCheckedChange = new EventEmitter();
|
|
47
|
-
dir = "ltr";
|
|
48
|
-
isPresetColor = false;
|
|
49
|
-
updateCheckedStatus() {
|
|
50
|
-
if (this.nzMode === "checkable") {
|
|
51
|
-
this.nzChecked = !this.nzChecked;
|
|
52
|
-
this.nzCheckedChange.emit(this.nzChecked);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
closeTag(e) {
|
|
56
|
-
this.nzOnClose.emit(e);
|
|
57
|
-
if (!e.defaultPrevented) {
|
|
58
|
-
this.renderer.removeChild(this.renderer.parentNode(this.el), this.el);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
clearPresetColor() {
|
|
62
|
-
const regexp = new RegExp(`(ant-tag-(?:${[...presetColors, ...statusColors].join("|")}))`, "g");
|
|
63
|
-
const classname = this.el.classList.toString();
|
|
64
|
-
const matches = [];
|
|
65
|
-
let match = regexp.exec(classname);
|
|
66
|
-
while (match !== null) {
|
|
67
|
-
matches.push(match[1]);
|
|
68
|
-
match = regexp.exec(classname);
|
|
69
|
-
}
|
|
70
|
-
this.el.classList.remove(...matches);
|
|
71
|
-
}
|
|
72
|
-
setPresetColor() {
|
|
73
|
-
this.clearPresetColor();
|
|
74
|
-
if (!this.nzColor) {
|
|
75
|
-
this.isPresetColor = false;
|
|
76
|
-
} else {
|
|
77
|
-
this.isPresetColor = isPresetColor(this.nzColor) || isStatusColor(this.nzColor);
|
|
78
|
-
}
|
|
79
|
-
if (this.isPresetColor) {
|
|
80
|
-
this.el.classList.add(`ant-tag-${this.nzColor}`);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
ngOnInit() {
|
|
84
|
-
this.directionality.change?.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((direction) => {
|
|
85
|
-
this.dir = direction;
|
|
86
|
-
this.cdr.detectChanges();
|
|
87
|
-
});
|
|
88
|
-
this.dir = this.directionality.value;
|
|
89
|
-
}
|
|
90
|
-
ngOnChanges(changes) {
|
|
91
|
-
const { nzColor } = changes;
|
|
92
|
-
if (nzColor) {
|
|
93
|
-
this.setPresetColor();
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
static \u0275fac = \u0275\u0275ngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: core_exports, type: _NzTagComponent, deps: [], target: FactoryTarget.Component });
|
|
97
|
-
static \u0275cmp = \u0275\u0275ngDeclareComponent({ minVersion: "17.0.0", version: "20.3.0", type: _NzTagComponent, isStandalone: true, selector: "nz-tag", inputs: { nzMode: "nzMode", nzColor: "nzColor", nzChecked: ["nzChecked", "nzChecked", booleanAttribute], nzBordered: ["nzBordered", "nzBordered", booleanAttribute] }, outputs: { nzOnClose: "nzOnClose", nzCheckedChange: "nzCheckedChange" }, host: { listeners: { "click": "updateCheckedStatus()" }, properties: { "style.background-color": "isPresetColor ? '' : nzColor", "class.ant-tag-has-color": "nzColor && !isPresetColor", "class.ant-tag-checkable": "nzMode === 'checkable'", "class.ant-tag-checkable-checked": "nzChecked", "class.ant-tag-rtl": "dir === 'rtl'", "class.ant-tag-borderless": "!nzBordered" }, classAttribute: "ant-tag" }, exportAs: ["nzTag"], usesOnChanges: true, ngImport: core_exports, template: `
|
|
98
|
-
<ng-content></ng-content>
|
|
99
|
-
@if (nzMode === 'closeable') {
|
|
100
|
-
<nz-icon nzType="close" class="ant-tag-close-icon" tabindex="-1" (click)="closeTag($event)" />
|
|
101
|
-
}
|
|
102
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None });
|
|
103
|
-
};
|
|
104
|
-
\u0275\u0275ngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: core_exports, type: NzTagComponent, decorators: [{
|
|
105
|
-
type: Component,
|
|
106
|
-
args: [{
|
|
107
|
-
selector: "nz-tag",
|
|
108
|
-
exportAs: "nzTag",
|
|
109
|
-
template: `
|
|
110
|
-
<ng-content></ng-content>
|
|
111
|
-
@if (nzMode === 'closeable') {
|
|
112
|
-
<nz-icon nzType="close" class="ant-tag-close-icon" tabindex="-1" (click)="closeTag($event)" />
|
|
113
|
-
}
|
|
114
|
-
`,
|
|
115
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
116
|
-
encapsulation: ViewEncapsulation.None,
|
|
117
|
-
host: {
|
|
118
|
-
class: "ant-tag",
|
|
119
|
-
"[style.background-color]": `isPresetColor ? '' : nzColor`,
|
|
120
|
-
"[class.ant-tag-has-color]": `nzColor && !isPresetColor`,
|
|
121
|
-
"[class.ant-tag-checkable]": `nzMode === 'checkable'`,
|
|
122
|
-
"[class.ant-tag-checkable-checked]": `nzChecked`,
|
|
123
|
-
"[class.ant-tag-rtl]": `dir === 'rtl'`,
|
|
124
|
-
"[class.ant-tag-borderless]": `!nzBordered`,
|
|
125
|
-
"(click)": "updateCheckedStatus()"
|
|
126
|
-
},
|
|
127
|
-
imports: [NzIconModule]
|
|
128
|
-
}]
|
|
129
|
-
}], propDecorators: { nzMode: [{
|
|
130
|
-
type: Input
|
|
131
|
-
}], nzColor: [{
|
|
132
|
-
type: Input
|
|
133
|
-
}], nzChecked: [{
|
|
134
|
-
type: Input,
|
|
135
|
-
args: [{ transform: booleanAttribute }]
|
|
136
|
-
}], nzBordered: [{
|
|
137
|
-
type: Input,
|
|
138
|
-
args: [{ transform: booleanAttribute }]
|
|
139
|
-
}], nzOnClose: [{
|
|
140
|
-
type: Output
|
|
141
|
-
}], nzCheckedChange: [{
|
|
142
|
-
type: Output
|
|
143
|
-
}] } });
|
|
144
|
-
var NzTagModule = class _NzTagModule {
|
|
145
|
-
static \u0275fac = \u0275\u0275ngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: core_exports, type: _NzTagModule, deps: [], target: FactoryTarget.NgModule });
|
|
146
|
-
static \u0275mod = \u0275\u0275ngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.0", ngImport: core_exports, type: _NzTagModule, imports: [NzTagComponent], exports: [NzTagComponent] });
|
|
147
|
-
static \u0275inj = \u0275\u0275ngDeclareInjector({ minVersion: "12.0.0", version: "20.3.0", ngImport: core_exports, type: _NzTagModule, imports: [NzTagComponent] });
|
|
148
|
-
};
|
|
149
|
-
\u0275\u0275ngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: core_exports, type: NzTagModule, decorators: [{
|
|
150
|
-
type: NgModule,
|
|
151
|
-
args: [{
|
|
152
|
-
imports: [NzTagComponent],
|
|
153
|
-
exports: [NzTagComponent]
|
|
154
|
-
}]
|
|
155
|
-
}] });
|
|
156
|
-
|
|
157
|
-
export {
|
|
158
|
-
NzTagModule
|
|
159
|
-
};
|
|
160
|
-
//# sourceMappingURL=chunk-J447GBHM.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["node_modules/ng-zorro-antd/fesm2022/ng-zorro-antd-tag.mjs"],"sourcesContent":["import { Directionality } from '@angular/cdk/bidi';\nimport * as i0 from '@angular/core';\nimport { inject, ChangeDetectorRef, Renderer2, ElementRef, DestroyRef, EventEmitter, booleanAttribute, Output, Input, ViewEncapsulation, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { presetColors, statusColors, isPresetColor, isStatusColor } from 'ng-zorro-antd/core/color';\nimport * as i1 from 'ng-zorro-antd/icon';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\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 NzTagComponent {\n cdr = inject(ChangeDetectorRef);\n renderer = inject(Renderer2);\n el = inject((ElementRef)).nativeElement;\n directionality = inject(Directionality);\n destroyRef = inject(DestroyRef);\n nzMode = 'default';\n nzColor;\n nzChecked = false;\n nzBordered = true;\n nzOnClose = new EventEmitter();\n nzCheckedChange = new EventEmitter();\n dir = 'ltr';\n isPresetColor = false;\n updateCheckedStatus() {\n if (this.nzMode === 'checkable') {\n this.nzChecked = !this.nzChecked;\n this.nzCheckedChange.emit(this.nzChecked);\n }\n }\n closeTag(e) {\n this.nzOnClose.emit(e);\n if (!e.defaultPrevented) {\n this.renderer.removeChild(this.renderer.parentNode(this.el), this.el);\n }\n }\n clearPresetColor() {\n // /(ant-tag-(?:pink|red|...))/g\n const regexp = new RegExp(`(ant-tag-(?:${[...presetColors, ...statusColors].join('|')}))`, 'g');\n const classname = this.el.classList.toString();\n const matches = [];\n let match = regexp.exec(classname);\n while (match !== null) {\n matches.push(match[1]);\n match = regexp.exec(classname);\n }\n this.el.classList.remove(...matches);\n }\n setPresetColor() {\n this.clearPresetColor();\n if (!this.nzColor) {\n this.isPresetColor = false;\n }\n else {\n this.isPresetColor = isPresetColor(this.nzColor) || isStatusColor(this.nzColor);\n }\n if (this.isPresetColor) {\n this.el.classList.add(`ant-tag-${this.nzColor}`);\n }\n }\n ngOnInit() {\n this.directionality.change?.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(direction => {\n this.dir = direction;\n this.cdr.detectChanges();\n });\n this.dir = this.directionality.value;\n }\n ngOnChanges(changes) {\n const { nzColor } = changes;\n if (nzColor) {\n this.setPresetColor();\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTagComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.0\", type: NzTagComponent, isStandalone: true, selector: \"nz-tag\", inputs: { nzMode: \"nzMode\", nzColor: \"nzColor\", nzChecked: [\"nzChecked\", \"nzChecked\", booleanAttribute], nzBordered: [\"nzBordered\", \"nzBordered\", booleanAttribute] }, outputs: { nzOnClose: \"nzOnClose\", nzCheckedChange: \"nzCheckedChange\" }, host: { listeners: { \"click\": \"updateCheckedStatus()\" }, properties: { \"style.background-color\": \"isPresetColor ? '' : nzColor\", \"class.ant-tag-has-color\": \"nzColor && !isPresetColor\", \"class.ant-tag-checkable\": \"nzMode === 'checkable'\", \"class.ant-tag-checkable-checked\": \"nzChecked\", \"class.ant-tag-rtl\": \"dir === 'rtl'\", \"class.ant-tag-borderless\": \"!nzBordered\" }, classAttribute: \"ant-tag\" }, exportAs: [\"nzTag\"], usesOnChanges: true, ngImport: i0, template: `\n <ng-content></ng-content>\n @if (nzMode === 'closeable') {\n <nz-icon nzType=\"close\" class=\"ant-tag-close-icon\" tabindex=\"-1\" (click)=\"closeTag($event)\" />\n }\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: NzIconModule }, { kind: \"directive\", type: i1.NzIconDirective, selector: \"nz-icon,[nz-icon]\", inputs: [\"nzSpin\", \"nzRotate\", \"nzType\", \"nzTheme\", \"nzTwotoneColor\", \"nzIconfont\"], exportAs: [\"nzIcon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTagComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'nz-tag',\n exportAs: 'nzTag',\n template: `\n <ng-content></ng-content>\n @if (nzMode === 'closeable') {\n <nz-icon nzType=\"close\" class=\"ant-tag-close-icon\" tabindex=\"-1\" (click)=\"closeTag($event)\" />\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'ant-tag',\n '[style.background-color]': `isPresetColor ? '' : nzColor`,\n '[class.ant-tag-has-color]': `nzColor && !isPresetColor`,\n '[class.ant-tag-checkable]': `nzMode === 'checkable'`,\n '[class.ant-tag-checkable-checked]': `nzChecked`,\n '[class.ant-tag-rtl]': `dir === 'rtl'`,\n '[class.ant-tag-borderless]': `!nzBordered`,\n '(click)': 'updateCheckedStatus()'\n },\n imports: [NzIconModule]\n }]\n }], propDecorators: { nzMode: [{\n type: Input\n }], nzColor: [{\n type: Input\n }], nzChecked: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], nzBordered: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], nzOnClose: [{\n type: Output\n }], nzCheckedChange: [{\n type: Output\n }] } });\n\n/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\nclass NzTagModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTagModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTagModule, imports: [NzTagComponent], exports: [NzTagComponent] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTagModule, imports: [NzTagComponent] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: NzTagModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [NzTagComponent],\n exports: [NzTagComponent]\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 * 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 { NzTagComponent, NzTagModule };\n\n"],"mappings":"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","names":[],"x_google_ignoreList":[0]}
|