comfyui-frontend-package 1.37.11__py3-none-any.whl → 1.38.0__py3-none-any.whl
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.
- comfyui_frontend_package/static/assets/{AboutPanel-B-lCq9HV.js → AboutPanel-DeWaRZUc.js} +2 -2
- comfyui_frontend_package/static/assets/{AboutPanel-B-lCq9HV.js.map → AboutPanel-DeWaRZUc.js.map} +1 -1
- comfyui_frontend_package/static/assets/{AudioPreviewPlayer-CXgr12AM.js → AudioPreviewPlayer-CSxbl0y3.js} +2 -2
- comfyui_frontend_package/static/assets/{AudioPreviewPlayer-CXgr12AM.js.map → AudioPreviewPlayer-CSxbl0y3.js.map} +1 -1
- comfyui_frontend_package/static/assets/{ComfyQueueButton-C6ttLtL6.js → ComfyQueueButton-BV0p-R1-.js} +2 -2
- comfyui_frontend_package/static/assets/{ComfyQueueButton-C6ttLtL6.js.map → ComfyQueueButton-BV0p-R1-.js.map} +1 -1
- comfyui_frontend_package/static/assets/{ExtensionPanel-uFlj7Yfm.js → ExtensionPanel-DvPzK040.js} +2 -2
- comfyui_frontend_package/static/assets/{ExtensionPanel-uFlj7Yfm.js.map → ExtensionPanel-DvPzK040.js.map} +1 -1
- comfyui_frontend_package/static/assets/GraphView-BuGkgiGk.js +15 -0
- comfyui_frontend_package/static/assets/GraphView-BuGkgiGk.js.map +1 -0
- comfyui_frontend_package/static/assets/{KeybindingPanel-DtxoTOoX.js → KeybindingPanel-DbjoObzw.js} +2 -2
- comfyui_frontend_package/static/assets/{KeybindingPanel-DtxoTOoX.js.map → KeybindingPanel-DbjoObzw.js.map} +1 -1
- comfyui_frontend_package/static/assets/{LazyImage.vue_vue_type_script_setup_true_lang-BSzd4gKh.js → LazyImage.vue_vue_type_script_setup_true_lang-Op4fug5d.js} +2 -2
- comfyui_frontend_package/static/assets/{LazyImage.vue_vue_type_script_setup_true_lang-BSzd4gKh.js.map → LazyImage.vue_vue_type_script_setup_true_lang-Op4fug5d.js.map} +1 -1
- comfyui_frontend_package/static/assets/{LegacyCreditsPanel-CO0JRKfg.js → LegacyCreditsPanel-BFKSdy5y.js} +2 -2
- comfyui_frontend_package/static/assets/{LegacyCreditsPanel-CO0JRKfg.js.map → LegacyCreditsPanel-BFKSdy5y.js.map} +1 -1
- comfyui_frontend_package/static/assets/{Load3D-NG6IeknA.js → Load3D-B3uXG_Os.js} +2 -2
- comfyui_frontend_package/static/assets/Load3D-B3uXG_Os.js.map +1 -0
- comfyui_frontend_package/static/assets/{Load3D.vue_vue_type_script_setup_true_lang-DYT5Ecka.js → Load3D.vue_vue_type_script_setup_true_lang-CslfLloq.js} +2 -2
- comfyui_frontend_package/static/assets/{Load3D.vue_vue_type_script_setup_true_lang-DYT5Ecka.js.map → Load3D.vue_vue_type_script_setup_true_lang-CslfLloq.js.map} +1 -1
- comfyui_frontend_package/static/assets/{Media3DTop-iLfJefgN.js → Media3DTop-CfCHfZKG.js} +2 -2
- comfyui_frontend_package/static/assets/{Media3DTop-iLfJefgN.js.map → Media3DTop-CfCHfZKG.js.map} +1 -1
- comfyui_frontend_package/static/assets/{ServerConfigPanel-B8Qy2naY.js → ServerConfigPanel-DvFzfUMn.js} +2 -2
- comfyui_frontend_package/static/assets/{ServerConfigPanel-B8Qy2naY.js.map → ServerConfigPanel-DvFzfUMn.js.map} +1 -1
- comfyui_frontend_package/static/assets/{SubscriptionRequiredDialogContent-CIYbxFB5.js → SubscriptionRequiredDialogContent-DTq1ffwv.js} +2 -2
- comfyui_frontend_package/static/assets/{SubscriptionRequiredDialogContent-CIYbxFB5.js.map → SubscriptionRequiredDialogContent-DTq1ffwv.js.map} +1 -1
- comfyui_frontend_package/static/assets/{UserPanel-D5s95p9f.js → UserPanel-Xvm9QBld.js} +2 -2
- comfyui_frontend_package/static/assets/{UserPanel-D5s95p9f.js.map → UserPanel-Xvm9QBld.js.map} +1 -1
- comfyui_frontend_package/static/assets/{UserSelectView-TWmqiRNC.js → UserSelectView-Bh8_ghwS.js} +2 -2
- comfyui_frontend_package/static/assets/{UserSelectView-TWmqiRNC.js.map → UserSelectView-Bh8_ghwS.js.map} +1 -1
- comfyui_frontend_package/static/assets/{ValueControlPopover-oFjRn7nT.js → ValueControlPopover-BrAoQ_2-.js} +2 -2
- comfyui_frontend_package/static/assets/{ValueControlPopover-oFjRn7nT.js.map → ValueControlPopover-BrAoQ_2-.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetAudioUI-DYG-X1jd.js → WidgetAudioUI-BjV6M32Q.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetAudioUI-DYG-X1jd.js.map → WidgetAudioUI-BjV6M32Q.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetButton-pJqn_pIo.js → WidgetButton-Dk30Nukl.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetButton-pJqn_pIo.js.map → WidgetButton-Dk30Nukl.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetColorPicker-JIRhb2dg.js → WidgetColorPicker-CkqNsGhI.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetColorPicker-JIRhb2dg.js.map → WidgetColorPicker-CkqNsGhI.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetGalleria-CtUTrKmF.js → WidgetGalleria-BYYCCQyX.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetGalleria-CtUTrKmF.js.map → WidgetGalleria-BYYCCQyX.js.map} +1 -1
- comfyui_frontend_package/static/assets/WidgetInputNumber-psomfHIy.js +2 -0
- comfyui_frontend_package/static/assets/WidgetInputNumber-psomfHIy.js.map +1 -0
- comfyui_frontend_package/static/assets/{WidgetInputNumber.vue_vue_type_script_setup_true_lang-Cb9Vjdsr.js → WidgetInputNumber.vue_vue_type_script_setup_true_lang-qjF5C0EN.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetInputNumber.vue_vue_type_script_setup_true_lang-Cb9Vjdsr.js.map → WidgetInputNumber.vue_vue_type_script_setup_true_lang-qjF5C0EN.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetInputText-C9e7Utok.js → WidgetInputText-Btor0Uhs.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetInputText-C9e7Utok.js.map → WidgetInputText-Btor0Uhs.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetLayoutField.vue_vue_type_script_setup_true_lang-B2h9BxrZ.js → WidgetLayoutField.vue_vue_type_script_setup_true_lang-Bq1noASf.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetLayoutField.vue_vue_type_script_setup_true_lang-B2h9BxrZ.js.map → WidgetLayoutField.vue_vue_type_script_setup_true_lang-Bq1noASf.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetLegacy-DxWXa1q8.js → WidgetLegacy-Cj4T7tN3.js} +2 -2
- comfyui_frontend_package/static/assets/WidgetLegacy-Cj4T7tN3.js.map +1 -0
- comfyui_frontend_package/static/assets/{WidgetMarkdown-BbdYbwjR.js → WidgetMarkdown-CsRRMdeD.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetMarkdown-BbdYbwjR.js.map → WidgetMarkdown-CsRRMdeD.js.map} +1 -1
- comfyui_frontend_package/static/assets/WidgetRecordAudio-CbCqPJqI.js +2 -0
- comfyui_frontend_package/static/assets/WidgetRecordAudio-CbCqPJqI.js.map +1 -0
- comfyui_frontend_package/static/assets/WidgetSelect-DcVQrOUl.js +2 -0
- comfyui_frontend_package/static/assets/WidgetSelect-DcVQrOUl.js.map +1 -0
- comfyui_frontend_package/static/assets/{WidgetSelect.vue_vue_type_script_setup_true_lang-DnNAGP6n.js → WidgetSelect.vue_vue_type_script_setup_true_lang-B0Z0OQv6.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetSelect.vue_vue_type_script_setup_true_lang-DnNAGP6n.js.map → WidgetSelect.vue_vue_type_script_setup_true_lang-B0Z0OQv6.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetTextarea-DtdgdYZv.js → WidgetTextarea-OMPagx9K.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetTextarea-DtdgdYZv.js.map → WidgetTextarea-OMPagx9K.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetToggleSwitch-BZnc8nGp.js → WidgetToggleSwitch-mOArdF4c.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetToggleSwitch-BZnc8nGp.js.map → WidgetToggleSwitch-mOArdF4c.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetWithControl.vue_vue_type_script_setup_true_lang-39lKeCWN.js → WidgetWithControl.vue_vue_type_script_setup_true_lang-Bx6suA2O.js} +3 -3
- comfyui_frontend_package/static/assets/{WidgetWithControl.vue_vue_type_script_setup_true_lang-39lKeCWN.js.map → WidgetWithControl.vue_vue_type_script_setup_true_lang-Bx6suA2O.js.map} +1 -1
- comfyui_frontend_package/static/assets/{audioService-CxmGtl4K.js → audioService-jRjL5LtP.js} +2 -2
- comfyui_frontend_package/static/assets/{audioService-CxmGtl4K.js.map → audioService-jRjL5LtP.js.map} +1 -1
- comfyui_frontend_package/static/assets/{audioUtils-B4fAuqez.js → audioUtils-DsaLmBXU.js} +2 -2
- comfyui_frontend_package/static/assets/{audioUtils-B4fAuqez.js.map → audioUtils-DsaLmBXU.js.map} +1 -1
- comfyui_frontend_package/static/assets/{commands-DHxq3nWN.js → commands-6krn3srk.js} +2 -2
- comfyui_frontend_package/static/assets/commands-6krn3srk.js.map +1 -0
- comfyui_frontend_package/static/assets/commands-B8TX-OdW.js +2 -0
- comfyui_frontend_package/static/assets/commands-B8TX-OdW.js.map +1 -0
- comfyui_frontend_package/static/assets/commands-BBMcY34D.js +2 -0
- comfyui_frontend_package/static/assets/commands-BBMcY34D.js.map +1 -0
- comfyui_frontend_package/static/assets/commands-C0R_Md8R.js +2 -0
- comfyui_frontend_package/static/assets/commands-C0R_Md8R.js.map +1 -0
- comfyui_frontend_package/static/assets/commands-CAv4QkZ-.js +2 -0
- comfyui_frontend_package/static/assets/commands-CAv4QkZ-.js.map +1 -0
- comfyui_frontend_package/static/assets/commands-CeIcZl_a.js +2 -0
- comfyui_frontend_package/static/assets/commands-CeIcZl_a.js.map +1 -0
- comfyui_frontend_package/static/assets/commands-CtwQRBL_.js +2 -0
- comfyui_frontend_package/static/assets/commands-CtwQRBL_.js.map +1 -0
- comfyui_frontend_package/static/assets/commands-DjX42wW9.js +2 -0
- comfyui_frontend_package/static/assets/commands-DjX42wW9.js.map +1 -0
- comfyui_frontend_package/static/assets/commands-DzwpXu9N.js +2 -0
- comfyui_frontend_package/static/assets/commands-DzwpXu9N.js.map +1 -0
- comfyui_frontend_package/static/assets/commands-E4h99f7h.js +2 -0
- comfyui_frontend_package/static/assets/commands-E4h99f7h.js.map +1 -0
- comfyui_frontend_package/static/assets/commands-we3Embjk.js +2 -0
- comfyui_frontend_package/static/assets/commands-we3Embjk.js.map +1 -0
- comfyui_frontend_package/static/assets/{index-BFHZsBkN.js → index--yK73oka.js} +14 -14
- comfyui_frontend_package/static/assets/index--yK73oka.js.map +1 -0
- comfyui_frontend_package/static/assets/{index-DJa4hQi7.css → index-CofcAZPL.css} +1 -1
- comfyui_frontend_package/static/assets/{index-tImAQKwZ.js → index-CwTFEsg4.js} +2 -2
- comfyui_frontend_package/static/assets/{index-tImAQKwZ.js.map → index-CwTFEsg4.js.map} +1 -1
- comfyui_frontend_package/static/assets/{index-B7ehZHKU.js → index-Hz5b30sA.js} +2 -2
- comfyui_frontend_package/static/assets/{index-B7ehZHKU.js.map → index-Hz5b30sA.js.map} +1 -1
- comfyui_frontend_package/static/assets/{keybindingService-B_cUhEnt.js → keybindingService-XE4XFAxf.js} +2 -2
- comfyui_frontend_package/static/assets/{keybindingService-B_cUhEnt.js.map → keybindingService-XE4XFAxf.js.map} +1 -1
- comfyui_frontend_package/static/assets/main-B1lLjnTc.js +17 -0
- comfyui_frontend_package/static/assets/main-B1lLjnTc.js.map +1 -0
- comfyui_frontend_package/static/assets/main-B6hk_BFB.js +17 -0
- comfyui_frontend_package/static/assets/main-B6hk_BFB.js.map +1 -0
- comfyui_frontend_package/static/assets/main-BJ1OB7_l.js +14 -0
- comfyui_frontend_package/static/assets/main-BJ1OB7_l.js.map +1 -0
- comfyui_frontend_package/static/assets/main-Beff11ll.js +17 -0
- comfyui_frontend_package/static/assets/main-Beff11ll.js.map +1 -0
- comfyui_frontend_package/static/assets/main-Bmv0nfqm.js +14 -0
- comfyui_frontend_package/static/assets/main-Bmv0nfqm.js.map +1 -0
- comfyui_frontend_package/static/assets/main-Bmv_vwNy.js +14 -0
- comfyui_frontend_package/static/assets/main-Bmv_vwNy.js.map +1 -0
- comfyui_frontend_package/static/assets/main-CC-DWYqg.js +17 -0
- comfyui_frontend_package/static/assets/main-CC-DWYqg.js.map +1 -0
- comfyui_frontend_package/static/assets/main-CPEN9kTz.js +17 -0
- comfyui_frontend_package/static/assets/main-CPEN9kTz.js.map +1 -0
- comfyui_frontend_package/static/assets/main-Ca_1lXEg.js +17 -0
- comfyui_frontend_package/static/assets/main-Ca_1lXEg.js.map +1 -0
- comfyui_frontend_package/static/assets/main-CiNLJloN.js +17 -0
- comfyui_frontend_package/static/assets/main-CiNLJloN.js.map +1 -0
- comfyui_frontend_package/static/assets/main-Dy-2iV5r.js +14 -0
- comfyui_frontend_package/static/assets/main-Dy-2iV5r.js.map +1 -0
- comfyui_frontend_package/static/index.html +1 -1
- {comfyui_frontend_package-1.37.11.dist-info → comfyui_frontend_package-1.38.0.dist-info}/METADATA +1 -1
- {comfyui_frontend_package-1.37.11.dist-info → comfyui_frontend_package-1.38.0.dist-info}/RECORD +126 -126
- comfyui_frontend_package/static/assets/GraphView-0U0T8pwU.js +0 -15
- comfyui_frontend_package/static/assets/GraphView-0U0T8pwU.js.map +0 -1
- comfyui_frontend_package/static/assets/Load3D-NG6IeknA.js.map +0 -1
- comfyui_frontend_package/static/assets/WidgetInputNumber-DPITONSH.js +0 -2
- comfyui_frontend_package/static/assets/WidgetInputNumber-DPITONSH.js.map +0 -1
- comfyui_frontend_package/static/assets/WidgetLegacy-DxWXa1q8.js.map +0 -1
- comfyui_frontend_package/static/assets/WidgetRecordAudio-DQzt1Okr.js +0 -2
- comfyui_frontend_package/static/assets/WidgetRecordAudio-DQzt1Okr.js.map +0 -1
- comfyui_frontend_package/static/assets/WidgetSelect-BCeT8JsM.js +0 -2
- comfyui_frontend_package/static/assets/WidgetSelect-BCeT8JsM.js.map +0 -1
- comfyui_frontend_package/static/assets/commands-2re7xZu6.js +0 -2
- comfyui_frontend_package/static/assets/commands-2re7xZu6.js.map +0 -1
- comfyui_frontend_package/static/assets/commands-5dfPmqrI.js +0 -2
- comfyui_frontend_package/static/assets/commands-5dfPmqrI.js.map +0 -1
- comfyui_frontend_package/static/assets/commands-9-tUiihM.js +0 -2
- comfyui_frontend_package/static/assets/commands-9-tUiihM.js.map +0 -1
- comfyui_frontend_package/static/assets/commands-BOYC3thj.js +0 -2
- comfyui_frontend_package/static/assets/commands-BOYC3thj.js.map +0 -1
- comfyui_frontend_package/static/assets/commands-CSrZnGH2.js +0 -2
- comfyui_frontend_package/static/assets/commands-CSrZnGH2.js.map +0 -1
- comfyui_frontend_package/static/assets/commands-DGL_KBDe.js +0 -2
- comfyui_frontend_package/static/assets/commands-DGL_KBDe.js.map +0 -1
- comfyui_frontend_package/static/assets/commands-DHxq3nWN.js.map +0 -1
- comfyui_frontend_package/static/assets/commands-DOgmN2m6.js +0 -2
- comfyui_frontend_package/static/assets/commands-DOgmN2m6.js.map +0 -1
- comfyui_frontend_package/static/assets/commands-DoQ2gxMh.js +0 -2
- comfyui_frontend_package/static/assets/commands-DoQ2gxMh.js.map +0 -1
- comfyui_frontend_package/static/assets/commands-irqWUFB-.js +0 -2
- comfyui_frontend_package/static/assets/commands-irqWUFB-.js.map +0 -1
- comfyui_frontend_package/static/assets/commands-xGVSTfS4.js +0 -2
- comfyui_frontend_package/static/assets/commands-xGVSTfS4.js.map +0 -1
- comfyui_frontend_package/static/assets/index-BFHZsBkN.js.map +0 -1
- comfyui_frontend_package/static/assets/main-B3vd7GL1.js +0 -17
- comfyui_frontend_package/static/assets/main-B3vd7GL1.js.map +0 -1
- comfyui_frontend_package/static/assets/main-BKCc2TkD.js +0 -17
- comfyui_frontend_package/static/assets/main-BKCc2TkD.js.map +0 -1
- comfyui_frontend_package/static/assets/main-BNvzUx74.js +0 -17
- comfyui_frontend_package/static/assets/main-BNvzUx74.js.map +0 -1
- comfyui_frontend_package/static/assets/main-BPu7av80.js +0 -17
- comfyui_frontend_package/static/assets/main-BPu7av80.js.map +0 -1
- comfyui_frontend_package/static/assets/main-BQ4z0Xxc.js +0 -14
- comfyui_frontend_package/static/assets/main-BQ4z0Xxc.js.map +0 -1
- comfyui_frontend_package/static/assets/main-BoyaoV4J.js +0 -14
- comfyui_frontend_package/static/assets/main-BoyaoV4J.js.map +0 -1
- comfyui_frontend_package/static/assets/main-CJ1ZmTbz.js +0 -14
- comfyui_frontend_package/static/assets/main-CJ1ZmTbz.js.map +0 -1
- comfyui_frontend_package/static/assets/main-DxByB8u3.js +0 -17
- comfyui_frontend_package/static/assets/main-DxByB8u3.js.map +0 -1
- comfyui_frontend_package/static/assets/main-Dyk43SJi.js +0 -17
- comfyui_frontend_package/static/assets/main-Dyk43SJi.js.map +0 -1
- comfyui_frontend_package/static/assets/main-QMLeyFJQ.js +0 -17
- comfyui_frontend_package/static/assets/main-QMLeyFJQ.js.map +0 -1
- comfyui_frontend_package/static/assets/main-f7MqrMkx.js +0 -14
- comfyui_frontend_package/static/assets/main-f7MqrMkx.js.map +0 -1
- {comfyui_frontend_package-1.37.11.dist-info → comfyui_frontend_package-1.38.0.dist-info}/WHEEL +0 -0
- {comfyui_frontend_package-1.37.11.dist-info → comfyui_frontend_package-1.38.0.dist-info}/top_level.txt +0 -0
comfyui_frontend_package/static/assets/{KeybindingPanel-DtxoTOoX.js → KeybindingPanel-DbjoObzw.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var L=Object.defineProperty;var t=(K,c)=>L(K,"name",{value:c,configurable:!0});import{bx as V,E as S,c as k,d as u,F as N,y as R,z as l,q as U,k as n,A as h,u as f,by as s,r as b,dI as G,h as J,j as $,l as Q,e as r,I as W,s as X}from"./vendor-other-B8t_Wf2K.js";import{w as z,u as Y,ad as Z,ae as w,y as P,e as ee,s as ie,af as ae}from"./vendor-primevue-DeKsC2uk.js";import{u as ne}from"./vendor-vue-DaLZjKA7.js";import{bv as le,A as se,n as te,_ as p,S as de,du as oe,cE as re,cD as ue,d as ce}from"./index
|
|
2
|
-
//# sourceMappingURL=KeybindingPanel-
|
|
1
|
+
var L=Object.defineProperty;var t=(K,c)=>L(K,"name",{value:c,configurable:!0});import{bx as V,E as S,c as k,d as u,F as N,y as R,z as l,q as U,k as n,A as h,u as f,by as s,r as b,dI as G,h as J,j as $,l as Q,e as r,I as W,s as X}from"./vendor-other-B8t_Wf2K.js";import{w as z,u as Y,ad as Z,ae as w,y as P,e as ee,s as ie,af as ae}from"./vendor-primevue-DeKsC2uk.js";import{u as ne}from"./vendor-vue-DaLZjKA7.js";import{bv as le,A as se,n as te,_ as p,S as de,du as oe,cE as re,cD as ue,d as ce}from"./index--yK73oka.js";import{u as ye}from"./keybindingService-XE4XFAxf.js";import"./vendor-xterm-CWYFmgbN.js";import"./vendor-three-DH0o8VQ7.js";import"./vendor-tiptap-VxK0yxkd.js";const be={key:0,class:"px-2"},fe=V({__name:"KeyComboDisplay",props:{keyCombo:{},isModified:{type:Boolean,default:!1}},setup(K){const c=S(()=>K.keyCombo.getKeySequences());return(d,m)=>(u(),k("span",null,[(u(!0),k(N,null,R(c.value,(_,C)=>(u(),k(N,{key:C},[l(s(z),{severity:d.isModified?"info":"secondary"},{default:n(()=>[h(f(_),1)]),_:2},1032,["severity"]),C<c.value.length-1?(u(),k("span",be,"+")):U("",!0)],64))),128))]))}}),me={class:"actions invisible flex flex-row"},ve=["title"],ge={key:1},pe={class:"overflow-hidden text-ellipsis"},ke=V({__name:"KeybindingPanel",setup(K){const c=b({global:{value:"",matchMode:ae.CONTAINS}}),d=le(),m=ye(),_=se(),{t:C}=ne(),D=S(()=>Object.values(_.commands).map(e=>({id:e.id,label:C(`commands.${te(e.id)}.label`,e.label??""),keybinding:d.getKeybindingByCommandId(e.id),source:e.source}))),E=b(null),v=b(!1),o=b(null),y=b(null),A=b(null),g=S(()=>!y.value||y.value.keybinding?.combo?.equals(o.value)||!o.value?null:d.getKeybinding(o.value));function B(e){y.value=e,o.value=e.keybinding?e.keybinding.combo:null,v.value=!0}t(B,"editKeybinding"),G(()=>{v.value&&setTimeout(()=>{A.value?.$el?.focus()},300)});async function F(e){e.keybinding&&(d.unsetKeybinding(e.keybinding),await m.persistUserKeybindings())}t(F,"removeKeybinding");async function T(e){if(!e.shiftKey&&!e.altKey&&!e.ctrlKey&&!e.metaKey)switch(e.key){case"Escape":I();return;case"Enter":await x();return}const a=re.fromEvent(e);o.value=a}t(T,"captureKeybinding");function I(){v.value=!1,y.value=null,o.value=null}t(I,"cancelEdit");async function x(){y.value&&o.value&&d.updateKeybindingOnCommand(new ue({commandId:y.value.id,combo:o.value}))&&await m.persistUserKeybindings(),I()}t(x,"saveKeybinding");async function q(e){d.resetKeybindingForCommand(e.id)?await m.persistUserKeybindings():console.warn(`No changes made when resetting keybinding for command: ${e.id}`)}t(q,"resetKeybinding");const O=Y();async function j(){d.resetAllKeybindings(),await m.persistUserKeybindings(),O.add({severity:"info",summary:"Info",detail:"All keybindings reset",life:3e3})}return t(j,"resetAllKeybindings"),(e,a)=>{const H=J("tooltip");return u(),$(oe,{value:"Keybinding",class:"keybinding-panel"},{header:n(()=>[l(de,{modelValue:c.value.global.value,"onUpdate:modelValue":a[0]||(a[0]=i=>c.value.global.value=i),placeholder:e.$t("g.searchKeybindings")+"..."},null,8,["modelValue","placeholder"])]),default:n(()=>[l(s(Z),{selection:E.value,"onUpdate:selection":a[1]||(a[1]=i=>E.value=i),value:D.value,"global-filter-fields":["id","label"],filters:c.value,"selection-mode":"single","striped-rows":"",pt:{header:"px-0"},onRowDblclick:a[2]||(a[2]=i=>B(i.data))},{default:n(()=>[l(s(w),{field:"actions",header:""},{body:n(i=>[r("div",me,[l(p,{variant:"textonly",size:"icon","aria-label":e.$t("g.edit"),onClick:t(M=>B(i.data),"onClick")},{default:n(()=>a[4]||(a[4]=[r("i",{class:"pi pi-pencil"},null,-1)])),_:2},1032,["aria-label","onClick"]),l(p,{variant:"textonly",size:"icon","aria-label":e.$t("g.reset"),disabled:!s(d).isCommandKeybindingModified(i.data.id),onClick:t(M=>q(i.data),"onClick")},{default:n(()=>a[5]||(a[5]=[r("i",{class:"pi pi-replay"},null,-1)])),_:2},1032,["aria-label","disabled","onClick"]),l(p,{variant:"textonly",size:"icon","aria-label":e.$t("g.delete"),disabled:!i.data.keybinding,onClick:t(M=>F(i.data),"onClick")},{default:n(()=>a[6]||(a[6]=[r("i",{class:"pi pi-trash"},null,-1)])),_:2},1032,["aria-label","disabled","onClick"])])]),_:1}),l(s(w),{field:"id",header:e.$t("g.command"),sortable:"",class:"max-w-64 2xl:max-w-full"},{body:n(i=>[r("div",{class:"truncate",title:i.data.id},f(i.data.label),9,ve)]),_:1},8,["header"]),l(s(w),{field:"keybinding",header:e.$t("g.keybinding")},{body:n(i=>[i.data.keybinding?(u(),$(fe,{key:0,"key-combo":i.data.keybinding.combo,"is-modified":s(d).isCommandKeybindingModified(i.data.id)},null,8,["key-combo","is-modified"])):(u(),k("span",ge,"-"))]),_:1},8,["header"]),l(s(w),{field:"source",header:e.$t("g.source")},{body:n(i=>[r("span",pe,f(i.data.source||"-"),1)]),_:1},8,["header"])]),_:1},8,["selection","value","filters"]),l(s(P),{visible:v.value,"onUpdate:visible":a[3]||(a[3]=i=>v.value=i),class:"min-w-96",modal:"",header:y.value?.label,onHide:I},{footer:n(()=>[l(p,{variant:g.value?"destructive":"primary",autofocus:"",onClick:x},{default:n(()=>[r("i",{class:X(g.value?"pi pi-pencil":"pi pi-check")},null,2),h(" "+f(g.value?e.$t("g.overwrite"):e.$t("g.save")),1)]),_:1},8,["variant"])]),default:n(()=>[r("div",null,[l(s(ee),{ref_key:"keybindingInput",ref:A,class:"mb-2 text-center","model-value":o.value?.toString()??"",placeholder:e.$t("g.pressKeysForNewBinding"),autocomplete:"off",fluid:"",onKeydown:W(T,["stop","prevent"])},null,8,["model-value","placeholder"]),g.value?(u(),$(s(ie),{key:0,severity:"warn"},{default:n(()=>[h(f(e.$t("g.keybindingAlreadyExists"))+" ",1),l(s(z),{severity:"secondary",value:g.value.commandId},null,8,["value"])]),_:1})):U("",!0)])]),_:1},8,["visible","header"]),Q((u(),$(p,{class:"mt-4 w-full",variant:"destructive-textonly",onClick:j},{default:n(()=>[a[7]||(a[7]=r("i",{class:"pi pi-replay"},null,-1)),h(" "+f(e.$t("g.resetAll")),1)]),_:1})),[[H,e.$t("g.resetAllKeybindingsTooltip")]])]),_:1})}}}),Ae=ce(ke,[["__scopeId","data-v-06049058"]]);export{Ae as default};
|
|
2
|
+
//# sourceMappingURL=KeybindingPanel-DbjoObzw.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeybindingPanel-DtxoTOoX.js","sources":["../../src/components/dialog/content/setting/keybinding/KeyComboDisplay.vue","../../src/components/dialog/content/setting/KeybindingPanel.vue"],"sourcesContent":["<template>\n <span>\n <template v-for=\"(sequence, index) in keySequences\" :key=\"index\">\n <Tag :severity=\"isModified ? 'info' : 'secondary'\">\n {{ sequence }}\n </Tag>\n <span v-if=\"index < keySequences.length - 1\" class=\"px-2\">+</span>\n </template>\n </span>\n</template>\n\n<script setup lang=\"ts\">\nimport Tag from 'primevue/tag'\nimport { computed } from 'vue'\n\nimport type { KeyComboImpl } from '@/stores/keybindingStore'\n\nconst { keyCombo, isModified = false } = defineProps<{\n keyCombo: KeyComboImpl\n isModified?: boolean\n}>()\n\nconst keySequences = computed(() => keyCombo.getKeySequences())\n</script>\n","<template>\n <PanelTemplate value=\"Keybinding\" class=\"keybinding-panel\">\n <template #header>\n <SearchBox\n v-model=\"filters['global'].value\"\n :placeholder=\"$t('g.searchKeybindings') + '...'\"\n />\n </template>\n\n <DataTable\n v-model:selection=\"selectedCommandData\"\n :value=\"commandsData\"\n :global-filter-fields=\"['id', 'label']\"\n :filters=\"filters\"\n selection-mode=\"single\"\n striped-rows\n :pt=\"{\n header: 'px-0'\n }\"\n @row-dblclick=\"editKeybinding($event.data)\"\n >\n <Column field=\"actions\" header=\"\">\n <template #body=\"slotProps\">\n <div class=\"actions invisible flex flex-row\">\n <Button\n variant=\"textonly\"\n size=\"icon\"\n :aria-label=\"$t('g.edit')\"\n @click=\"editKeybinding(slotProps.data)\"\n >\n <i class=\"pi pi-pencil\" />\n </Button>\n <Button\n variant=\"textonly\"\n size=\"icon\"\n :aria-label=\"$t('g.reset')\"\n :disabled=\"\n !keybindingStore.isCommandKeybindingModified(slotProps.data.id)\n \"\n @click=\"resetKeybinding(slotProps.data)\"\n >\n <i class=\"pi pi-replay\" />\n </Button>\n <Button\n variant=\"textonly\"\n size=\"icon\"\n :aria-label=\"$t('g.delete')\"\n :disabled=\"!slotProps.data.keybinding\"\n @click=\"removeKeybinding(slotProps.data)\"\n >\n <i class=\"pi pi-trash\" />\n </Button>\n </div>\n </template>\n </Column>\n <Column\n field=\"id\"\n :header=\"$t('g.command')\"\n sortable\n class=\"max-w-64 2xl:max-w-full\"\n >\n <template #body=\"slotProps\">\n <div class=\"truncate\" :title=\"slotProps.data.id\">\n {{ slotProps.data.label }}\n </div>\n </template>\n </Column>\n <Column field=\"keybinding\" :header=\"$t('g.keybinding')\">\n <template #body=\"slotProps\">\n <KeyComboDisplay\n v-if=\"slotProps.data.keybinding\"\n :key-combo=\"slotProps.data.keybinding.combo\"\n :is-modified=\"\n keybindingStore.isCommandKeybindingModified(slotProps.data.id)\n \"\n />\n <span v-else>-</span>\n </template>\n </Column>\n <Column field=\"source\" :header=\"$t('g.source')\">\n <template #body=\"slotProps\">\n <span class=\"overflow-hidden text-ellipsis\">{{\n slotProps.data.source || '-'\n }}</span>\n </template>\n </Column>\n </DataTable>\n\n <Dialog\n v-model:visible=\"editDialogVisible\"\n class=\"min-w-96\"\n modal\n :header=\"currentEditingCommand?.label\"\n @hide=\"cancelEdit\"\n >\n <div>\n <InputText\n ref=\"keybindingInput\"\n class=\"mb-2 text-center\"\n :model-value=\"newBindingKeyCombo?.toString() ?? ''\"\n :placeholder=\"$t('g.pressKeysForNewBinding')\"\n autocomplete=\"off\"\n fluid\n @keydown.stop.prevent=\"captureKeybinding\"\n />\n <Message v-if=\"existingKeybindingOnCombo\" severity=\"warn\">\n {{ $t('g.keybindingAlreadyExists') }}\n <Tag\n severity=\"secondary\"\n :value=\"existingKeybindingOnCombo.commandId\"\n />\n </Message>\n </div>\n <template #footer>\n <Button\n :variant=\"existingKeybindingOnCombo ? 'destructive' : 'primary'\"\n autofocus\n @click=\"saveKeybinding\"\n >\n <i\n :class=\"existingKeybindingOnCombo ? 'pi pi-pencil' : 'pi pi-check'\"\n />\n {{ existingKeybindingOnCombo ? $t('g.overwrite') : $t('g.save') }}\n </Button>\n </template>\n </Dialog>\n <Button\n v-tooltip=\"$t('g.resetAllKeybindingsTooltip')\"\n class=\"mt-4 w-full\"\n variant=\"destructive-textonly\"\n @click=\"resetAllKeybindings\"\n >\n <i class=\"pi pi-replay\" />\n {{ $t('g.resetAll') }}\n </Button>\n </PanelTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport { FilterMatchMode } from '@primevue/core/api'\nimport Column from 'primevue/column'\nimport DataTable from 'primevue/datatable'\nimport Dialog from 'primevue/dialog'\nimport InputText from 'primevue/inputtext'\nimport Message from 'primevue/message'\nimport Tag from 'primevue/tag'\nimport { useToast } from 'primevue/usetoast'\nimport { computed, ref, watchEffect } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport SearchBox from '@/components/common/SearchBox.vue'\nimport Button from '@/components/ui/button/Button.vue'\nimport { useKeybindingService } from '@/services/keybindingService'\nimport { useCommandStore } from '@/stores/commandStore'\nimport {\n KeyComboImpl,\n KeybindingImpl,\n useKeybindingStore\n} from '@/stores/keybindingStore'\nimport { normalizeI18nKey } from '@/utils/formatUtil'\n\nimport PanelTemplate from './PanelTemplate.vue'\nimport KeyComboDisplay from './keybinding/KeyComboDisplay.vue'\n\nconst filters = ref({\n global: { value: '', matchMode: FilterMatchMode.CONTAINS }\n})\n\nconst keybindingStore = useKeybindingStore()\nconst keybindingService = useKeybindingService()\nconst commandStore = useCommandStore()\nconst { t } = useI18n()\n\ninterface ICommandData {\n id: string\n keybinding: KeybindingImpl | null\n label: string\n source?: string\n}\n\nconst commandsData = computed<ICommandData[]>(() => {\n return Object.values(commandStore.commands).map((command) => ({\n id: command.id,\n label: t(\n `commands.${normalizeI18nKey(command.id)}.label`,\n command.label ?? ''\n ),\n keybinding: keybindingStore.getKeybindingByCommandId(command.id),\n source: command.source\n }))\n})\n\nconst selectedCommandData = ref<ICommandData | null>(null)\nconst editDialogVisible = ref(false)\nconst newBindingKeyCombo = ref<KeyComboImpl | null>(null)\nconst currentEditingCommand = ref<ICommandData | null>(null)\nconst keybindingInput = ref<InstanceType<typeof InputText> | null>(null)\n\nconst existingKeybindingOnCombo = computed<KeybindingImpl | null>(() => {\n if (!currentEditingCommand.value) {\n return null\n }\n\n // If the new keybinding is the same as the current editing command, then don't show the error\n if (\n currentEditingCommand.value.keybinding?.combo?.equals(\n newBindingKeyCombo.value\n )\n ) {\n return null\n }\n\n if (!newBindingKeyCombo.value) {\n return null\n }\n\n return keybindingStore.getKeybinding(newBindingKeyCombo.value)\n})\n\nfunction editKeybinding(commandData: ICommandData) {\n currentEditingCommand.value = commandData\n newBindingKeyCombo.value = commandData.keybinding\n ? commandData.keybinding.combo\n : null\n editDialogVisible.value = true\n}\n\nwatchEffect(() => {\n if (editDialogVisible.value) {\n // nextTick doesn't work here, so we use a timeout instead\n setTimeout(() => {\n // @ts-expect-error - $el is an internal property of the InputText component\n keybindingInput.value?.$el?.focus()\n }, 300)\n }\n})\n\nasync function removeKeybinding(commandData: ICommandData) {\n if (commandData.keybinding) {\n keybindingStore.unsetKeybinding(commandData.keybinding)\n await keybindingService.persistUserKeybindings()\n }\n}\n\nasync function captureKeybinding(event: KeyboardEvent) {\n // Allow the use of keyboard shortcuts when adding keyboard shortcuts\n if (!event.shiftKey && !event.altKey && !event.ctrlKey && !event.metaKey) {\n switch (event.key) {\n case 'Escape':\n cancelEdit()\n return\n case 'Enter':\n await saveKeybinding()\n return\n }\n }\n const keyCombo = KeyComboImpl.fromEvent(event)\n newBindingKeyCombo.value = keyCombo\n}\n\nfunction cancelEdit() {\n editDialogVisible.value = false\n currentEditingCommand.value = null\n newBindingKeyCombo.value = null\n}\n\nasync function saveKeybinding() {\n if (currentEditingCommand.value && newBindingKeyCombo.value) {\n const updated = keybindingStore.updateKeybindingOnCommand(\n new KeybindingImpl({\n commandId: currentEditingCommand.value.id,\n combo: newBindingKeyCombo.value\n })\n )\n if (updated) {\n await keybindingService.persistUserKeybindings()\n }\n }\n cancelEdit()\n}\n\nasync function resetKeybinding(commandData: ICommandData) {\n if (keybindingStore.resetKeybindingForCommand(commandData.id)) {\n await keybindingService.persistUserKeybindings()\n } else {\n console.warn(\n `No changes made when resetting keybinding for command: ${commandData.id}`\n )\n }\n}\n\nconst toast = useToast()\nasync function resetAllKeybindings() {\n keybindingStore.resetAllKeybindings()\n await keybindingService.persistUserKeybindings()\n toast.add({\n severity: 'info',\n summary: 'Info',\n detail: 'All keybindings reset',\n life: 3000\n })\n}\n</script>\n\n<style scoped>\n@reference '../../../../assets/css/style.css';\n\n:deep(.p-datatable-tbody) > tr > td {\n @apply p-1;\n min-height: 2rem;\n}\n\n:deep(.p-datatable-row-selected) .actions,\n:deep(.p-datatable-selectable-row:hover) .actions {\n @apply visible;\n}\n</style>\n"],"names":["keySequences","computed","__props","filters","ref","FilterMatchMode","keybindingStore","useKeybindingStore","keybindingService","useKeybindingService","commandStore","useCommandStore","t","useI18n","commandsData","command","normalizeI18nKey","selectedCommandData","editDialogVisible","newBindingKeyCombo","currentEditingCommand","keybindingInput","existingKeybindingOnCombo","editKeybinding","commandData","__name","watchEffect","removeKeybinding","captureKeybinding","event","cancelEdit","saveKeybinding","keyCombo","KeyComboImpl","KeybindingImpl","resetKeybinding","toast","useToast","resetAllKeybindings"],"mappings":"uyBAsBA,MAAMA,EAAeC,EAAS,IAAMC,EAAA,SAAS,iBAAiB,0ZC8I9D,MAAMC,EAAUC,EAAI,CAClB,OAAQ,CAAE,MAAO,GAAI,UAAWC,GAAgB,QAAA,CAAS,CAC1D,EAEKC,EAAkBC,GAAA,EAClBC,EAAoBC,GAAA,EACpBC,EAAeC,GAAA,EACf,CAAE,EAAAC,CAAA,EAAMC,GAAA,EASRC,EAAeb,EAAyB,IACrC,OAAO,OAAOS,EAAa,QAAQ,EAAE,IAAKK,IAAa,CAC5D,GAAIA,EAAQ,GACZ,MAAOH,EACL,YAAYI,GAAiBD,EAAQ,EAAE,CAAC,SACxCA,EAAQ,OAAS,EAAA,EAEnB,WAAYT,EAAgB,yBAAyBS,EAAQ,EAAE,EAC/D,OAAQA,EAAQ,MAAA,EAChB,CACH,EAEKE,EAAsBb,EAAyB,IAAI,EACnDc,EAAoBd,EAAI,EAAK,EAC7Be,EAAqBf,EAAyB,IAAI,EAClDgB,EAAwBhB,EAAyB,IAAI,EACrDiB,EAAkBjB,EAA2C,IAAI,EAEjEkB,EAA4BrB,EAAgC,IAC5D,CAACmB,EAAsB,OAMzBA,EAAsB,MAAM,YAAY,OAAO,OAC7CD,EAAmB,KAAA,GAMnB,CAACA,EAAmB,MACf,KAGFb,EAAgB,cAAca,EAAmB,KAAK,CAC9D,EAED,SAASI,EAAeC,EAA2B,CACjDJ,EAAsB,MAAQI,EAC9BL,EAAmB,MAAQK,EAAY,WACnCA,EAAY,WAAW,MACvB,KACJN,EAAkB,MAAQ,EAC5B,CANSO,EAAAF,EAAA,kBAQTG,EAAY,IAAM,CACZR,EAAkB,OAEpB,WAAW,IAAM,CAEfG,EAAgB,OAAO,KAAK,MAAA,CAC9B,EAAG,GAAG,CAEV,CAAC,EAED,eAAeM,EAAiBH,EAA2B,CACrDA,EAAY,aACdlB,EAAgB,gBAAgBkB,EAAY,UAAU,EACtD,MAAMhB,EAAkB,uBAAA,EAE5B,CALeiB,EAAAE,EAAA,oBAOf,eAAeC,EAAkBC,EAAsB,CAErD,GAAI,CAACA,EAAM,UAAY,CAACA,EAAM,QAAU,CAACA,EAAM,SAAW,CAACA,EAAM,QAC/D,OAAQA,EAAM,IAAA,CACZ,IAAK,SACHC,EAAA,EACA,OACF,IAAK,QACH,MAAMC,EAAA,EACN,MAAA,CAGN,MAAMC,EAAWC,GAAa,UAAUJ,CAAK,EAC7CV,EAAmB,MAAQa,CAC7B,CAdeP,EAAAG,EAAA,qBAgBf,SAASE,GAAa,CACpBZ,EAAkB,MAAQ,GAC1BE,EAAsB,MAAQ,KAC9BD,EAAmB,MAAQ,IAC7B,CAJSM,EAAAK,EAAA,cAMT,eAAeC,GAAiB,CAC1BX,EAAsB,OAASD,EAAmB,OACpCb,EAAgB,0BAC9B,IAAI4B,GAAe,CACjB,UAAWd,EAAsB,MAAM,GACvC,MAAOD,EAAmB,KAAA,CAC3B,CAAA,GAGD,MAAMX,EAAkB,uBAAA,EAG5BsB,EAAA,CACF,CAbeL,EAAAM,EAAA,kBAef,eAAeI,EAAgBX,EAA2B,CACpDlB,EAAgB,0BAA0BkB,EAAY,EAAE,EAC1D,MAAMhB,EAAkB,uBAAA,EAExB,QAAQ,KACN,0DAA0DgB,EAAY,EAAE,EAAA,CAG9E,CAReC,EAAAU,EAAA,mBAUf,MAAMC,EAAQC,EAAA,EACd,eAAeC,GAAsB,CACnChC,EAAgB,oBAAA,EAChB,MAAME,EAAkB,uBAAA,EACxB4B,EAAM,IAAI,CACR,SAAU,OACV,QAAS,OACT,OAAQ,wBACR,KAAM,GAAA,CACP,CACH,CATe,OAAAX,EAAAa,EAAA"}
|
|
1
|
+
{"version":3,"file":"KeybindingPanel-DbjoObzw.js","sources":["../../src/components/dialog/content/setting/keybinding/KeyComboDisplay.vue","../../src/components/dialog/content/setting/KeybindingPanel.vue"],"sourcesContent":["<template>\n <span>\n <template v-for=\"(sequence, index) in keySequences\" :key=\"index\">\n <Tag :severity=\"isModified ? 'info' : 'secondary'\">\n {{ sequence }}\n </Tag>\n <span v-if=\"index < keySequences.length - 1\" class=\"px-2\">+</span>\n </template>\n </span>\n</template>\n\n<script setup lang=\"ts\">\nimport Tag from 'primevue/tag'\nimport { computed } from 'vue'\n\nimport type { KeyComboImpl } from '@/stores/keybindingStore'\n\nconst { keyCombo, isModified = false } = defineProps<{\n keyCombo: KeyComboImpl\n isModified?: boolean\n}>()\n\nconst keySequences = computed(() => keyCombo.getKeySequences())\n</script>\n","<template>\n <PanelTemplate value=\"Keybinding\" class=\"keybinding-panel\">\n <template #header>\n <SearchBox\n v-model=\"filters['global'].value\"\n :placeholder=\"$t('g.searchKeybindings') + '...'\"\n />\n </template>\n\n <DataTable\n v-model:selection=\"selectedCommandData\"\n :value=\"commandsData\"\n :global-filter-fields=\"['id', 'label']\"\n :filters=\"filters\"\n selection-mode=\"single\"\n striped-rows\n :pt=\"{\n header: 'px-0'\n }\"\n @row-dblclick=\"editKeybinding($event.data)\"\n >\n <Column field=\"actions\" header=\"\">\n <template #body=\"slotProps\">\n <div class=\"actions invisible flex flex-row\">\n <Button\n variant=\"textonly\"\n size=\"icon\"\n :aria-label=\"$t('g.edit')\"\n @click=\"editKeybinding(slotProps.data)\"\n >\n <i class=\"pi pi-pencil\" />\n </Button>\n <Button\n variant=\"textonly\"\n size=\"icon\"\n :aria-label=\"$t('g.reset')\"\n :disabled=\"\n !keybindingStore.isCommandKeybindingModified(slotProps.data.id)\n \"\n @click=\"resetKeybinding(slotProps.data)\"\n >\n <i class=\"pi pi-replay\" />\n </Button>\n <Button\n variant=\"textonly\"\n size=\"icon\"\n :aria-label=\"$t('g.delete')\"\n :disabled=\"!slotProps.data.keybinding\"\n @click=\"removeKeybinding(slotProps.data)\"\n >\n <i class=\"pi pi-trash\" />\n </Button>\n </div>\n </template>\n </Column>\n <Column\n field=\"id\"\n :header=\"$t('g.command')\"\n sortable\n class=\"max-w-64 2xl:max-w-full\"\n >\n <template #body=\"slotProps\">\n <div class=\"truncate\" :title=\"slotProps.data.id\">\n {{ slotProps.data.label }}\n </div>\n </template>\n </Column>\n <Column field=\"keybinding\" :header=\"$t('g.keybinding')\">\n <template #body=\"slotProps\">\n <KeyComboDisplay\n v-if=\"slotProps.data.keybinding\"\n :key-combo=\"slotProps.data.keybinding.combo\"\n :is-modified=\"\n keybindingStore.isCommandKeybindingModified(slotProps.data.id)\n \"\n />\n <span v-else>-</span>\n </template>\n </Column>\n <Column field=\"source\" :header=\"$t('g.source')\">\n <template #body=\"slotProps\">\n <span class=\"overflow-hidden text-ellipsis\">{{\n slotProps.data.source || '-'\n }}</span>\n </template>\n </Column>\n </DataTable>\n\n <Dialog\n v-model:visible=\"editDialogVisible\"\n class=\"min-w-96\"\n modal\n :header=\"currentEditingCommand?.label\"\n @hide=\"cancelEdit\"\n >\n <div>\n <InputText\n ref=\"keybindingInput\"\n class=\"mb-2 text-center\"\n :model-value=\"newBindingKeyCombo?.toString() ?? ''\"\n :placeholder=\"$t('g.pressKeysForNewBinding')\"\n autocomplete=\"off\"\n fluid\n @keydown.stop.prevent=\"captureKeybinding\"\n />\n <Message v-if=\"existingKeybindingOnCombo\" severity=\"warn\">\n {{ $t('g.keybindingAlreadyExists') }}\n <Tag\n severity=\"secondary\"\n :value=\"existingKeybindingOnCombo.commandId\"\n />\n </Message>\n </div>\n <template #footer>\n <Button\n :variant=\"existingKeybindingOnCombo ? 'destructive' : 'primary'\"\n autofocus\n @click=\"saveKeybinding\"\n >\n <i\n :class=\"existingKeybindingOnCombo ? 'pi pi-pencil' : 'pi pi-check'\"\n />\n {{ existingKeybindingOnCombo ? $t('g.overwrite') : $t('g.save') }}\n </Button>\n </template>\n </Dialog>\n <Button\n v-tooltip=\"$t('g.resetAllKeybindingsTooltip')\"\n class=\"mt-4 w-full\"\n variant=\"destructive-textonly\"\n @click=\"resetAllKeybindings\"\n >\n <i class=\"pi pi-replay\" />\n {{ $t('g.resetAll') }}\n </Button>\n </PanelTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport { FilterMatchMode } from '@primevue/core/api'\nimport Column from 'primevue/column'\nimport DataTable from 'primevue/datatable'\nimport Dialog from 'primevue/dialog'\nimport InputText from 'primevue/inputtext'\nimport Message from 'primevue/message'\nimport Tag from 'primevue/tag'\nimport { useToast } from 'primevue/usetoast'\nimport { computed, ref, watchEffect } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport SearchBox from '@/components/common/SearchBox.vue'\nimport Button from '@/components/ui/button/Button.vue'\nimport { useKeybindingService } from '@/services/keybindingService'\nimport { useCommandStore } from '@/stores/commandStore'\nimport {\n KeyComboImpl,\n KeybindingImpl,\n useKeybindingStore\n} from '@/stores/keybindingStore'\nimport { normalizeI18nKey } from '@/utils/formatUtil'\n\nimport PanelTemplate from './PanelTemplate.vue'\nimport KeyComboDisplay from './keybinding/KeyComboDisplay.vue'\n\nconst filters = ref({\n global: { value: '', matchMode: FilterMatchMode.CONTAINS }\n})\n\nconst keybindingStore = useKeybindingStore()\nconst keybindingService = useKeybindingService()\nconst commandStore = useCommandStore()\nconst { t } = useI18n()\n\ninterface ICommandData {\n id: string\n keybinding: KeybindingImpl | null\n label: string\n source?: string\n}\n\nconst commandsData = computed<ICommandData[]>(() => {\n return Object.values(commandStore.commands).map((command) => ({\n id: command.id,\n label: t(\n `commands.${normalizeI18nKey(command.id)}.label`,\n command.label ?? ''\n ),\n keybinding: keybindingStore.getKeybindingByCommandId(command.id),\n source: command.source\n }))\n})\n\nconst selectedCommandData = ref<ICommandData | null>(null)\nconst editDialogVisible = ref(false)\nconst newBindingKeyCombo = ref<KeyComboImpl | null>(null)\nconst currentEditingCommand = ref<ICommandData | null>(null)\nconst keybindingInput = ref<InstanceType<typeof InputText> | null>(null)\n\nconst existingKeybindingOnCombo = computed<KeybindingImpl | null>(() => {\n if (!currentEditingCommand.value) {\n return null\n }\n\n // If the new keybinding is the same as the current editing command, then don't show the error\n if (\n currentEditingCommand.value.keybinding?.combo?.equals(\n newBindingKeyCombo.value\n )\n ) {\n return null\n }\n\n if (!newBindingKeyCombo.value) {\n return null\n }\n\n return keybindingStore.getKeybinding(newBindingKeyCombo.value)\n})\n\nfunction editKeybinding(commandData: ICommandData) {\n currentEditingCommand.value = commandData\n newBindingKeyCombo.value = commandData.keybinding\n ? commandData.keybinding.combo\n : null\n editDialogVisible.value = true\n}\n\nwatchEffect(() => {\n if (editDialogVisible.value) {\n // nextTick doesn't work here, so we use a timeout instead\n setTimeout(() => {\n // @ts-expect-error - $el is an internal property of the InputText component\n keybindingInput.value?.$el?.focus()\n }, 300)\n }\n})\n\nasync function removeKeybinding(commandData: ICommandData) {\n if (commandData.keybinding) {\n keybindingStore.unsetKeybinding(commandData.keybinding)\n await keybindingService.persistUserKeybindings()\n }\n}\n\nasync function captureKeybinding(event: KeyboardEvent) {\n // Allow the use of keyboard shortcuts when adding keyboard shortcuts\n if (!event.shiftKey && !event.altKey && !event.ctrlKey && !event.metaKey) {\n switch (event.key) {\n case 'Escape':\n cancelEdit()\n return\n case 'Enter':\n await saveKeybinding()\n return\n }\n }\n const keyCombo = KeyComboImpl.fromEvent(event)\n newBindingKeyCombo.value = keyCombo\n}\n\nfunction cancelEdit() {\n editDialogVisible.value = false\n currentEditingCommand.value = null\n newBindingKeyCombo.value = null\n}\n\nasync function saveKeybinding() {\n if (currentEditingCommand.value && newBindingKeyCombo.value) {\n const updated = keybindingStore.updateKeybindingOnCommand(\n new KeybindingImpl({\n commandId: currentEditingCommand.value.id,\n combo: newBindingKeyCombo.value\n })\n )\n if (updated) {\n await keybindingService.persistUserKeybindings()\n }\n }\n cancelEdit()\n}\n\nasync function resetKeybinding(commandData: ICommandData) {\n if (keybindingStore.resetKeybindingForCommand(commandData.id)) {\n await keybindingService.persistUserKeybindings()\n } else {\n console.warn(\n `No changes made when resetting keybinding for command: ${commandData.id}`\n )\n }\n}\n\nconst toast = useToast()\nasync function resetAllKeybindings() {\n keybindingStore.resetAllKeybindings()\n await keybindingService.persistUserKeybindings()\n toast.add({\n severity: 'info',\n summary: 'Info',\n detail: 'All keybindings reset',\n life: 3000\n })\n}\n</script>\n\n<style scoped>\n@reference '../../../../assets/css/style.css';\n\n:deep(.p-datatable-tbody) > tr > td {\n @apply p-1;\n min-height: 2rem;\n}\n\n:deep(.p-datatable-row-selected) .actions,\n:deep(.p-datatable-selectable-row:hover) .actions {\n @apply visible;\n}\n</style>\n"],"names":["keySequences","computed","__props","filters","ref","FilterMatchMode","keybindingStore","useKeybindingStore","keybindingService","useKeybindingService","commandStore","useCommandStore","t","useI18n","commandsData","command","normalizeI18nKey","selectedCommandData","editDialogVisible","newBindingKeyCombo","currentEditingCommand","keybindingInput","existingKeybindingOnCombo","editKeybinding","commandData","__name","watchEffect","removeKeybinding","captureKeybinding","event","cancelEdit","saveKeybinding","keyCombo","KeyComboImpl","KeybindingImpl","resetKeybinding","toast","useToast","resetAllKeybindings"],"mappings":"uyBAsBA,MAAMA,EAAeC,EAAS,IAAMC,EAAA,SAAS,iBAAiB,0ZC8I9D,MAAMC,EAAUC,EAAI,CAClB,OAAQ,CAAE,MAAO,GAAI,UAAWC,GAAgB,QAAA,CAAS,CAC1D,EAEKC,EAAkBC,GAAA,EAClBC,EAAoBC,GAAA,EACpBC,EAAeC,GAAA,EACf,CAAE,EAAAC,CAAA,EAAMC,GAAA,EASRC,EAAeb,EAAyB,IACrC,OAAO,OAAOS,EAAa,QAAQ,EAAE,IAAKK,IAAa,CAC5D,GAAIA,EAAQ,GACZ,MAAOH,EACL,YAAYI,GAAiBD,EAAQ,EAAE,CAAC,SACxCA,EAAQ,OAAS,EAAA,EAEnB,WAAYT,EAAgB,yBAAyBS,EAAQ,EAAE,EAC/D,OAAQA,EAAQ,MAAA,EAChB,CACH,EAEKE,EAAsBb,EAAyB,IAAI,EACnDc,EAAoBd,EAAI,EAAK,EAC7Be,EAAqBf,EAAyB,IAAI,EAClDgB,EAAwBhB,EAAyB,IAAI,EACrDiB,EAAkBjB,EAA2C,IAAI,EAEjEkB,EAA4BrB,EAAgC,IAC5D,CAACmB,EAAsB,OAMzBA,EAAsB,MAAM,YAAY,OAAO,OAC7CD,EAAmB,KAAA,GAMnB,CAACA,EAAmB,MACf,KAGFb,EAAgB,cAAca,EAAmB,KAAK,CAC9D,EAED,SAASI,EAAeC,EAA2B,CACjDJ,EAAsB,MAAQI,EAC9BL,EAAmB,MAAQK,EAAY,WACnCA,EAAY,WAAW,MACvB,KACJN,EAAkB,MAAQ,EAC5B,CANSO,EAAAF,EAAA,kBAQTG,EAAY,IAAM,CACZR,EAAkB,OAEpB,WAAW,IAAM,CAEfG,EAAgB,OAAO,KAAK,MAAA,CAC9B,EAAG,GAAG,CAEV,CAAC,EAED,eAAeM,EAAiBH,EAA2B,CACrDA,EAAY,aACdlB,EAAgB,gBAAgBkB,EAAY,UAAU,EACtD,MAAMhB,EAAkB,uBAAA,EAE5B,CALeiB,EAAAE,EAAA,oBAOf,eAAeC,EAAkBC,EAAsB,CAErD,GAAI,CAACA,EAAM,UAAY,CAACA,EAAM,QAAU,CAACA,EAAM,SAAW,CAACA,EAAM,QAC/D,OAAQA,EAAM,IAAA,CACZ,IAAK,SACHC,EAAA,EACA,OACF,IAAK,QACH,MAAMC,EAAA,EACN,MAAA,CAGN,MAAMC,EAAWC,GAAa,UAAUJ,CAAK,EAC7CV,EAAmB,MAAQa,CAC7B,CAdeP,EAAAG,EAAA,qBAgBf,SAASE,GAAa,CACpBZ,EAAkB,MAAQ,GAC1BE,EAAsB,MAAQ,KAC9BD,EAAmB,MAAQ,IAC7B,CAJSM,EAAAK,EAAA,cAMT,eAAeC,GAAiB,CAC1BX,EAAsB,OAASD,EAAmB,OACpCb,EAAgB,0BAC9B,IAAI4B,GAAe,CACjB,UAAWd,EAAsB,MAAM,GACvC,MAAOD,EAAmB,KAAA,CAC3B,CAAA,GAGD,MAAMX,EAAkB,uBAAA,EAG5BsB,EAAA,CACF,CAbeL,EAAAM,EAAA,kBAef,eAAeI,EAAgBX,EAA2B,CACpDlB,EAAgB,0BAA0BkB,EAAY,EAAE,EAC1D,MAAMhB,EAAkB,uBAAA,EAExB,QAAQ,KACN,0DAA0DgB,EAAY,EAAE,EAAA,CAG9E,CAReC,EAAAU,EAAA,mBAUf,MAAMC,EAAQC,EAAA,EACd,eAAeC,GAAsB,CACnChC,EAAgB,oBAAA,EAChB,MAAME,EAAkB,uBAAA,EACxB4B,EAAM,IAAI,CACR,SAAU,OACV,QAAS,OACT,OAAQ,wBACR,KAAM,GAAA,CACP,CACH,CATe,OAAAX,EAAAa,EAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var pe=Object.defineProperty;var m=(i,e)=>pe(i,"name",{value:e,configurable:!0});import{cG as E,a as I,c as oe,_ as B,k as me,cu as fe,l as ge,h as W,s as ve,u as te,d as ae,m as he}from"./index-BFHZsBkN.js";import{b as re,E as V,a as be,bx as F,cM as O,cN as N,j as C,d,by as p,m as ye,k as b,e as r,G as ee,c as g,q as _,u,p as we,d3 as _e,cw as $e,z as $,w as G,d2 as ke,eE as Me,r as x,A as j,F as Ue,f as ne,o as xe,bg as Se,dc as Ce,cd as Ie,s as Z}from"./vendor-other-B8t_Wf2K.js";import{i as Be,y as Fe,e as ie,a as Ve}from"./vendor-primevue-DeKsC2uk.js";import{u as de}from"./vendor-vue-DaLZjKA7.js";function D(){const i=re({get supportsPreviewMetadata(){return I.getServerFeature("supports_preview_metadata")},get maxUploadSize(){return I.getServerFeature("max_upload_size")},get supportsManagerV4(){return I.getServerFeature("extension.manager.supports_v4")},get modelUploadButtonEnabled(){return E.value.model_upload_button_enabled??I.getServerFeature("model_upload_button_enabled",!1)},get assetDeletionEnabled(){return E.value.asset_deletion_enabled??I.getServerFeature("asset_deletion_enabled",!1)},get assetRenameEnabled(){return E.value.asset_rename_enabled??I.getServerFeature("asset_rename_enabled",!1)},get privateModelsEnabled(){return E.value.private_models_enabled??I.getServerFeature("private_models_enabled",!1)},get onboardingSurveyEnabled(){return E.value.onboarding_survey_enabled??I.getServerFeature("onboarding_survey_enabled",!0)},get huggingfaceModelImportEnabled(){return E.value.huggingface_model_import_enabled??I.getServerFeature("huggingface_model_import_enabled",!1)},get asyncModelUploadEnabled(){return E.value.async_model_upload_enabled??I.getServerFeature("async_model_upload_enabled",!1)}}),e=m((n,s)=>V(()=>I.getServerFeature(n,s)),"featureFlag");return{flags:be(i),featureFlag:e}}m(D,"useFeatureFlags");const Le={class:"flex items-center gap-2 text-sm"},je={key:0,class:"text-base-foreground"},Ae={key:1,class:"text-base-foreground"},Ee={class:"truncate"},De={key:0,class:"icon-[lucide--check] text-base-foreground"},ze=F({inheritAttrs:!1,__name:"SingleSelect",props:O({label:{},options:{},listMaxHeight:{default:"28rem"},popoverMinWidth:{},popoverMaxWidth:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const e=N(i,"modelValue"),{t:n}=de(),s=m(o=>{if(o==null||!i.options)return i.label??"";const a=i.options.find(l=>l.value===o);return a?a.name:i.label??""},"getLabel"),t=V(()=>{if(!i.popoverMinWidth&&!i.popoverMaxWidth)return;const o=[];return i.popoverMinWidth&&o.push(`min-width: ${i.popoverMinWidth}`),i.popoverMaxWidth&&o.push(`max-width: ${i.popoverMaxWidth}`),o.join("; ")});return(o,a)=>(d(),C(p(Be),ye({modelValue:e.value,"onUpdate:modelValue":a[0]||(a[0]=l=>e.value=l)},o.$attrs,{options:o.options,"option-label":"name","option-value":"value",unstyled:"",pt:{root:m(({props:l})=>({class:["h-10 relative inline-flex cursor-pointer select-none items-center","rounded-lg","bg-secondary-background text-base-foreground","border-[2.5px] border-solid border-transparent","transition-all duration-200 ease-in-out","focus-within:border-node-component-border",{"opacity-60 cursor-default":l.disabled}]}),"root"),label:{class:"flex-1 flex items-center whitespace-nowrap pl-4 py-2 outline-hidden"},dropdown:{class:"flex shrink-0 items-center justify-center px-3 py-2"},overlay:{class:p(oe)("mt-2 p-2 rounded-lg","bg-base-background text-base-foreground","border border-solid border-border-default")},listContainer:m(()=>({style:`max-height: min(${o.listMaxHeight}, 50vh)`,class:"scrollbar-custom"}),"listContainer"),list:{class:"flex flex-col gap-0 p-0 m-0 list-none border-none text-sm"},option:m(({context:l})=>({class:p(oe)("flex items-center justify-between gap-3 px-2 py-3 rounded","hover:bg-secondary-background-hover",l.focused&&"bg-secondary-background-hover",l.selected&&"bg-secondary-background-selected hover:bg-secondary-background-selected")}),"option"),optionLabel:{class:"truncate"},optionGroupLabel:{class:"px-3 py-2 text-xs uppercase tracking-wide text-muted-foreground"},emptyMessage:{class:"px-3 py-2 text-sm text-muted-foreground"}},"aria-label":o.label||p(n)("g.singleSelectDropdown"),role:"combobox","aria-expanded":!1,"aria-haspopup":"listbox",tabindex:0}),{value:b(l=>[r("div",Le,[we(o.$slots,"icon"),l.value!==null&&l.value!==void 0?(d(),g("span",je,u(s(l.value)),1)):(d(),g("span",Ae,u(o.label),1))])]),dropdownicon:b(()=>a[1]||(a[1]=[r("i",{class:"icon-[lucide--chevron-down] text-muted-foreground"},null,-1)])),option:b(({option:l,selected:c})=>[r("div",{class:"flex w-full items-center justify-between gap-3",style:ee(t.value)},[r("span",Ee,u(l.name),1),c?(d(),g("i",De)):_("",!0)],4)]),_:3},16,["modelValue","options","pt","aria-label"]))}});function Re(i){const e={loras:"LoRA",ipadapter:"IP-Adapter",sams:"SAM",clip_vision:"CLIP Vision",animatediff_motion_lora:"AnimateDiff Motion LoRA",animatediff_models:"AnimateDiff Model",vae:"VAE",sam2:"SAM 2",controlnet:"ControlNet",gligen:"GLIGEN"};return e[i]?e[i]:i.split("_").map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join(" ")}m(Re,"formatDisplayName");const Te=["nlf"],ue=_e(()=>{const{state:i,isLoading:e,error:n,execute:s}=$e(async()=>(await I.getModelFolders()).filter(o=>!Te.includes(o.name)).map(o=>({name:Re(o.name),value:o.name})).sort((o,a)=>o.name.localeCompare(a.name)),[],{immediate:!1,onError:m(t=>{console.error("Failed to fetch model types:",t)},"onError")});return{modelTypes:i,isLoading:e,error:n,fetchModelTypes:s}}),He={class:"flex flex-col gap-4 text-sm text-muted-foreground"},Pe={class:"flex flex-col gap-2"},We={class:"m-0"},qe={class:"flex items-center gap-3 rounded-lg bg-secondary-background px-4 py-2"},Oe=["src","alt"],Ne={class:"m-0 min-w-0 flex-1 truncate text-base-foreground"},Ge={class:"flex flex-col gap-2"},Ke={class:"flex items-center gap-2"},Ye={class:"text-muted-foreground"},Je=F({__name:"UploadModelConfirmation",props:O({metadata:{},previewImage:{}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const e=N(i,"modelValue"),{modelTypes:n,isLoading:s}=ue();return(t,o)=>(d(),g("div",He,[r("div",Pe,[r("p",We,u(t.$t("assetBrowser.modelAssociatedWithLink")),1),r("div",qe,[t.previewImage?(d(),g("img",{key:0,src:t.previewImage,alt:t.metadata?.filename||t.metadata?.name||"Model preview",class:"size-14 flex-shrink-0 rounded object-cover"},null,8,Oe)):_("",!0),r("p",Ne,u(t.metadata?.filename||t.metadata?.name),1)])]),r("div",Ge,[r("div",Ke,[r("label",null,u(t.$t("assetBrowser.modelTypeSelectorLabel")),1),o[1]||(o[1]=r("i",{class:"icon-[lucide--circle-question-mark] text-muted-foreground"},null,-1)),r("span",Ye,u(t.$t("assetBrowser.notSureLeaveAsIs")),1)]),$(ze,{modelValue:e.value,"onUpdate:modelValue":o[0]||(o[0]=a=>e.value=a),label:p(s)?t.$t("g.loading"):t.$t("assetBrowser.modelTypeSelectorPlaceholder"),options:p(n),disabled:p(s),"data-attr":"upload-model-step2-type-selector"},null,8,["modelValue","label","options","disabled"])])]))}}),Qe={class:"relative"},Xe=["aria-label","src"],le=F({__name:"VideoHelpDialog",props:O({videoUrl:{},ariaLabel:{default:"Help video"}},{modelValue:{type:Boolean,required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const e=N(i,"modelValue"),n=m(s=>{s.key==="Escape"&&(s.stopImmediatePropagation(),s.stopPropagation(),s.preventDefault(),e.value=!1)},"handleEscapeKey");return G(e,s=>{if(s){const t=ke(document,"keydown",n,{capture:!0});Me(t)}},{immediate:!0}),(s,t)=>(d(),C(p(Fe),{visible:e.value,"onUpdate:visible":t[1]||(t[1]=o=>e.value=o),modal:"",closable:!1,"close-on-escape":!1,"dismissable-mask":!0,pt:{root:{class:"video-help-dialog"},header:{class:"!hidden"},content:{class:"!p-0"},mask:{class:"!bg-black/70"}},style:{width:"90vw"}},{default:b(()=>[r("div",Qe,[$(B,{variant:"textonly",size:"icon",class:"absolute top-4 right-6 z-10","aria-label":s.$t("g.close"),onClick:t[0]||(t[0]=o=>e.value=!1)},{default:b(()=>t[2]||(t[2]=[r("i",{class:"pi pi-times text-sm"},null,-1)])),_:1},8,["aria-label"]),r("video",{autoplay:"",muted:"",loop:"","aria-label":s.ariaLabel,class:"w-full rounded-lg",src:s.videoUrl},u(s.$t("g.videoFailedToLoad")),9,Xe)])]),_:1},8,["visible"]))}}),Ze={class:"flex justify-end gap-2 w-full"},et={key:0,class:"mr-auto flex items-center gap-2"},tt={key:4},at={key:0,class:"icon-[lucide--loader-circle] animate-spin"},st={key:0,class:"icon-[lucide--loader-circle] animate-spin"},ot=F({__name:"UploadModelFooter",props:{currentStep:{},isFetchingMetadata:{type:Boolean},isUploading:{type:Boolean},canFetchMetadata:{type:Boolean},canUploadModel:{type:Boolean},uploadStatus:{}},emits:["back","fetchMetadata","upload","close","importAnother"],setup(i,{emit:e}){const{flags:n}=D(),s=x(!1),t=x(!1),o=e;return(a,l)=>(d(),g("div",Ze,[a.currentStep===1&&p(n).huggingfaceModelImportEnabled?(d(),g("div",et,[l[11]||(l[11]=r("i",{class:"icon-[lucide--circle-question-mark] text-muted-foreground"},null,-1)),$(B,{variant:"muted-textonly",size:"sm","data-attr":"upload-model-step1-help-civitai",onClick:l[0]||(l[0]=c=>s.value=!0)},{default:b(()=>[j(u(a.$t("assetBrowser.providerCivitai")),1)]),_:1}),$(B,{variant:"muted-textonly",size:"sm","data-attr":"upload-model-step1-help-huggingface",onClick:l[1]||(l[1]=c=>t.value=!0)},{default:b(()=>[j(u(a.$t("assetBrowser.providerHuggingFace")),1)]),_:1})])):a.currentStep===1?(d(),C(B,{key:1,variant:"muted-textonly",size:"lg",class:"mr-auto underline","data-attr":"upload-model-step1-help-link",onClick:l[2]||(l[2]=c=>s.value=!0)},{default:b(()=>[l[12]||(l[12]=r("i",{class:"icon-[lucide--circle-question-mark]"},null,-1)),r("span",null,u(a.$t("assetBrowser.uploadModelHowDoIFindThis")),1)]),_:1})):_("",!0),a.currentStep===1?(d(),C(B,{key:2,variant:"muted-textonly",size:"lg","data-attr":"upload-model-step1-cancel-button",disabled:a.isFetchingMetadata||a.isUploading,onClick:l[3]||(l[3]=c=>o("close"))},{default:b(()=>[j(u(a.$t("g.cancel")),1)]),_:1},8,["disabled"])):_("",!0),a.currentStep!==1&&a.currentStep!==3?(d(),C(B,{key:3,variant:"muted-textonly",size:"lg","data-attr":`upload-model-step${a.currentStep}-back-button`,disabled:a.isFetchingMetadata||a.isUploading,onClick:l[4]||(l[4]=c=>o("back"))},{default:b(()=>[j(u(a.$t("g.back")),1)]),_:1},8,["data-attr","disabled"])):(d(),g("span",tt)),a.currentStep===1?(d(),C(B,{key:5,variant:"secondary",size:"lg","data-attr":"upload-model-step1-continue-button",disabled:!a.canFetchMetadata||a.isFetchingMetadata,onClick:l[5]||(l[5]=c=>o("fetchMetadata"))},{default:b(()=>[a.isFetchingMetadata?(d(),g("i",at)):_("",!0),r("span",null,u(a.$t("g.continue")),1)]),_:1},8,["disabled"])):a.currentStep===2?(d(),C(B,{key:6,variant:"secondary",size:"lg","data-attr":"upload-model-step2-confirm-button",disabled:!a.canUploadModel||a.isUploading,onClick:l[6]||(l[6]=c=>o("upload"))},{default:b(()=>[a.isUploading?(d(),g("i",st)):_("",!0),r("span",null,u(a.$t("assetBrowser.upload")),1)]),_:1},8,["disabled"])):a.currentStep===3&&(a.uploadStatus==="success"||a.uploadStatus==="processing")?(d(),g(Ue,{key:7},[$(B,{variant:"muted-textonly",size:"lg","data-attr":"upload-model-step3-import-another-button",onClick:l[7]||(l[7]=c=>o("importAnother"))},{default:b(()=>[j(u(a.$t("assetBrowser.importAnother")),1)]),_:1}),$(B,{variant:"secondary",size:"lg","data-attr":"upload-model-step3-finish-button",onClick:l[8]||(l[8]=c=>o("close"))},{default:b(()=>[j(u(a.uploadStatus==="processing"?a.$t("g.close"):a.$t("assetBrowser.finish")),1)]),_:1})],64)):_("",!0),$(le,{modelValue:s.value,"onUpdate:modelValue":l[9]||(l[9]=c=>s.value=c),"video-url":"https://media.comfy.org/compressed_768/civitai_howto.webm","aria-label":a.$t("assetBrowser.uploadModelHelpVideo")},null,8,["modelValue","aria-label"]),$(le,{modelValue:t.value,"onUpdate:modelValue":l[10]||(l[10]=c=>t.value=c),"video-url":"https://media.comfy.org/byom/huggingfacehowto.mp4","aria-label":a.$t("assetBrowser.uploadModelHelpVideo")},null,8,["modelValue","aria-label"])]))}}),lt={class:"flex flex-1 flex-col gap-6 text-sm text-muted-foreground"},rt={key:0,class:"flex flex-col gap-2"},nt={class:"m-0 font-bold"},it={class:"m-0"},dt={class:"flex flex-row items-center gap-3 rounded-lg bg-modal-card-background p-4"},ut=["src","alt"],ct={class:"flex min-w-0 flex-1 flex-col items-start justify-center gap-1"},pt={class:"m-0 w-full truncate text-base-foreground"},mt={class:"m-0 text-sm text-muted"},ft={key:1,class:"flex flex-col gap-2"},gt={class:"m-0 font-bold"},vt={class:"m-0"},ht={class:"flex flex-row items-center gap-3 rounded-lg bg-modal-card-background p-4"},bt=["src","alt"],yt={class:"flex min-w-0 flex-1 flex-col items-start justify-center gap-1"},wt={class:"m-0 w-full truncate text-base-foreground"},_t={class:"m-0 text-sm text-muted"},$t={key:2,class:"flex flex-1 flex-col items-center justify-center gap-6"},kt={class:"text-center"},Mt={class:"m-0 text-sm font-bold"},Ut={key:0,class:"text-sm text-muted mb-0"},xt=F({__name:"UploadModelProgress",props:{result:{},error:{},metadata:{},modelType:{},previewImage:{}},setup(i){return(e,n)=>(d(),g("div",lt,[e.result==="processing"?(d(),g("div",rt,[r("p",nt,u(e.$t("assetBrowser.processingModel")),1),r("p",it,u(e.$t("assetBrowser.processingModelDescription")),1),r("div",dt,[e.previewImage?(d(),g("img",{key:0,src:e.previewImage,alt:e.metadata?.filename||e.metadata?.name||"Model preview",class:"size-14 flex-shrink-0 rounded object-cover"},null,8,ut)):_("",!0),r("div",ct,[r("p",pt,u(e.metadata?.filename||e.metadata?.name),1),r("p",mt,u(e.modelType),1)])])])):e.result==="success"?(d(),g("div",ft,[r("p",gt,u(e.$t("assetBrowser.modelUploaded")),1),r("p",vt,u(e.$t("assetBrowser.findInLibrary",{type:e.modelType})),1),r("div",ht,[e.previewImage?(d(),g("img",{key:0,src:e.previewImage,alt:e.metadata?.filename||e.metadata?.name||"Model preview",class:"size-14 flex-shrink-0 rounded object-cover"},null,8,bt)):_("",!0),r("div",yt,[r("p",wt,u(e.metadata?.filename||e.metadata?.name),1),r("p",_t,u(e.modelType),1)])])])):e.result==="error"?(d(),g("div",$t,[n[0]||(n[0]=r("i",{class:"icon-[lucide--x-circle] text-6xl text-error"},null,-1)),r("div",kt,[r("p",Mt,u(e.$t("assetBrowser.uploadFailed")),1),e.error?(d(),g("p",Ut,u(e.error),1)):_("",!0)])])):_("",!0)]))}}),q={type:"civitai",name:"Civitai",hostnames:["civitai.com"]},ce={type:"huggingface",name:"Hugging Face",hostnames:["huggingface.co"]};function se(i,e){try{const n=new URL(i).hostname.toLowerCase();return e.hostnames.some(s=>n===s||n.endsWith(`.${s}`))}catch{return!1}}m(se,"validateSourceUrl");const St={class:"flex flex-col justify-between h-full gap-6 text-sm"},Ct={class:"flex flex-col gap-6"},It={class:"flex flex-col gap-2"},Bt={class:"m-0 text-foreground"},Ft={class:"m-0"},Vt={class:"m-0 text-muted-foreground"},Lt={class:"inline-flex items-center gap-1 flex-wrap mt-2"},jt={class:"inline-flex items-center gap-1"},At=["alt"],Et={class:"inline-flex items-center gap-1"},Dt=["alt"],zt={class:"flex flex-col gap-2"},Rt={class:"relative"},Tt={key:0,class:"icon-[lucide--circle-check-big] absolute top-1/2 right-3 size-5 -translate-y-1/2 text-green-500"},Ht={key:0,class:"text-sm text-error"},Pt={key:1,class:"text-foreground"},Wt={class:"font-bold italic"},qt={class:"text-sm text-muted"},Ot="/assets/images/civitai.svg",Nt="https://civitai.com/models",Gt="/assets/images/hf-logo.svg",Kt="https://huggingface.co",Yt=F({__name:"UploadModelUrlInput",props:{modelValue:{},error:{}},emits:["update:modelValue"],setup(i,{emit:e}){const{flags:n}=D(),s=i,t=e,o=V({get:m(()=>s.modelValue,"get"),set:m(c=>t("update:modelValue",c),"set")}),a=[q,ce],l=V(()=>{const c=o.value.trim();return c?a.some(y=>se(c,y)):!1});return(c,y)=>{const k=ne("i18n-t");return d(),g("div",St,[r("div",Ct,[r("div",It,[r("p",Bt,u(c.$t("assetBrowser.uploadModelDescription1Generic")),1),r("div",Ft,[r("p",Vt,u(c.$t("assetBrowser.uploadModelDescription2Generic")),1),r("span",Lt,[r("span",jt,[r("img",{src:Ot,alt:c.$t("assetBrowser.providerCivitai"),class:"w-4 h-4"},null,8,At),r("a",{href:Nt,target:"_blank",rel:"noopener noreferrer",class:"text-muted-foreground underline"},u(c.$t("assetBrowser.providerCivitai")),1),y[1]||(y[1]=r("span",null,",",-1))]),r("span",Et,[r("img",{src:Gt,alt:c.$t("assetBrowser.providerHuggingFace"),class:"w-4 h-4"},null,8,Dt),r("a",{href:Kt,target:"_blank",rel:"noopener noreferrer",class:"text-muted-foreground underline"},u(c.$t("assetBrowser.providerHuggingFace")),1)])])])]),r("div",zt,[r("div",Rt,[$(p(ie),{modelValue:o.value,"onUpdate:modelValue":y[0]||(y[0]=h=>o.value=h),autofocus:"",placeholder:c.$t("assetBrowser.genericLinkPlaceholder"),class:"w-full border-0 bg-secondary-background p-4 pr-10","data-attr":"upload-model-step1-url-input"},null,8,["modelValue","placeholder"]),l.value?(d(),g("i",Tt)):_("",!0)]),c.error?(d(),g("p",Ht,u(c.error),1)):p(n).asyncModelUploadEnabled?_("",!0):(d(),g("p",Pt,[$(k,{keypath:"assetBrowser.maxFileSize",tag:"span"},{size:b(()=>[r("span",Wt,u(c.$t("assetBrowser.maxFileSizeValue")),1)]),_:1})]))])]),r("div",qt,u(c.$t("assetBrowser.uploadModelHelpFooterText")),1)])}}}),Jt={class:"flex flex-col gap-6 text-sm text-muted-foreground"},Qt={class:"flex flex-col gap-2"},Xt={class:"m-0"},Zt={class:"list-disc space-y-1 pl-5 mt-0"},ea={href:"https://civitai.com/models",target:"_blank",class:"text-muted-foreground underline"},ta={key:0},aa={class:"font-bold italic"},sa={class:"flex flex-col gap-2"},oa={class:"font-bold italic"},la={class:"relative"},ra={key:0,class:"icon-[lucide--circle-check-big] absolute top-1/2 right-3 size-5 -translate-y-1/2 text-green-500"},na={key:0,class:"text-sm text-error"},ia={href:"https://civitai.com/models/10706/luisap-z-image-and-qwen-pixel-art-refiner?modelVersionId=2225295",target:"_blank",class:"text-muted-foreground underline"},da=F({__name:"UploadModelUrlInputCivitai",props:O({error:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const{flags:e}=D(),n=N(i,"modelValue"),s=V(()=>{const t=n.value.trim();return t?se(t,q):!1});return(t,o)=>{const a=ne("i18n-t");return d(),g("div",Jt,[r("div",Qt,[r("p",Xt,u(t.$t("assetBrowser.uploadModelDescription1")),1),r("ul",Zt,[r("li",null,[$(a,{keypath:"assetBrowser.uploadModelDescription2",tag:"span"},{link:b(()=>[r("a",ea,u(t.$t("assetBrowser.uploadModelDescription2Link")),1)]),_:1})]),p(e).asyncModelUploadEnabled?_("",!0):(d(),g("li",ta,[$(a,{keypath:"assetBrowser.uploadModelDescription3",tag:"span"},{size:b(()=>[r("span",aa,u(t.$t("assetBrowser.maxFileSizeValue")),1)]),_:1})]))])]),r("div",sa,[$(a,{keypath:"assetBrowser.civitaiLinkLabel",tag:"label",class:"mb-0"},{download:b(()=>[r("span",oa,u(t.$t("assetBrowser.civitaiLinkLabelDownload")),1)]),_:1}),r("div",la,[$(p(ie),{modelValue:n.value,"onUpdate:modelValue":o[0]||(o[0]=l=>n.value=l),autofocus:"",placeholder:t.$t("assetBrowser.civitaiLinkPlaceholder"),class:"w-full border-0 bg-secondary-background p-4 pr-10","data-attr":"upload-model-step1-url-input"},null,8,["modelValue","placeholder"]),s.value?(d(),g("i",ra)):_("",!0)]),t.error?(d(),g("p",na,u(t.error),1)):(d(),C(a,{key:1,keypath:"assetBrowser.civitaiLinkExample",tag:"p",class:"text-sm"},{example:b(()=>[r("strong",null,u(t.$t("assetBrowser.civitaiLinkExampleStrong")),1)]),link:b(()=>[r("a",ia,u(t.$t("assetBrowser.civitaiLinkExampleUrl")),1)]),_:1}))])])}}});function ua(i){const{t:e}=de(),n=me(),s=fe(),t=ge(),{flags:o}=D(),a=x(1),l=x(!1),c=x(!1),y=x(),k=x(""),h=x({url:"",name:"",tags:[]}),v=x(),M=o.huggingfaceModelImportEnabled?[q,ce]:[q],A=V(()=>{const U=h.value.url.trim();return U?M.find(w=>se(U,w))??null:null});G(()=>h.value.url,()=>{k.value=""});const T=V(()=>h.value.url.trim().length>0),H=V(()=>!!v.value);async function K(){if(!T.value)return;let U=h.value.url.trim();try{U=new URL(encodeURI(U)).toString()}catch{}if(h.value.url=U,!A.value){const f=M.map(S=>S.name).join(", ");k.value=e("assetBrowser.unsupportedUrlSource",{sources:f});return}l.value=!0;try{const f=await W.getAssetMetadata(h.value.url);if(f.filename)try{f.filename=decodeURIComponent(f.filename)}catch{}if(f.name)try{f.name=decodeURIComponent(f.name)}catch{}if(h.value.metadata=f,h.value.name=f.filename||f.name||"",h.value.previewImage=f.preview_image,f.tags&&f.tags.length>0){h.value.tags=f.tags;const S=f.tags.find(z=>i.value.some(R=>R.value===z));S&&(v.value=S)}a.value=2}catch(f){console.error("Failed to retrieve metadata:",f),k.value=f instanceof Error?f.message:ve("assetBrowser.uploadModelFailedToRetrieveMetadata","Failed to retrieve metadata. Please check the link and try again."),a.value=1}finally{l.value=!1}}m(K,"fetchMetadata");async function Y(U){if(h.value.previewImage)try{const w=U.split(".")[0];let f="png";const S=h.value.previewImage.match(/^data:image\/([^;]+);/);return S&&(f=S[1]==="jpeg"?"jpg":S[1]),(await W.uploadAssetFromBase64({data:h.value.previewImage,name:`${w}_preview.${f}`,tags:["preview"]})).id}catch(w){console.error("Failed to upload preview image:",w);return}}m(Y,"uploadPreviewImage");async function P(){if(!v.value)return;const U=t.getAllNodeProviders(v.value);(await Promise.allSettled(U.map(f=>n.updateModelsForNodeType(f.nodeDef.name)))).forEach((f,S)=>{f.status==="rejected"&&console.error(`Failed to refresh ${U[S].nodeDef.name}:`,f.reason)})}m(P,"refreshModelCaches");async function J(){if(!H.value)return!1;const U=A.value;if(!U)return k.value=e("assetBrowser.noValidSourceDetected"),!1;c.value=!0;try{const w=v.value?["models",v.value]:["models"],f=h.value.metadata?.filename||h.value.metadata?.name||"model",S=await Y(f),z={source:U.type,source_url:h.value.url,model_type:v.value};if(o.asyncModelUploadEnabled){const R=await W.uploadAssetAsync({source_url:h.value.url,tags:w,user_metadata:z,preview_id:S});R.type==="async"&&R.task.status!=="completed"?(v.value&&s.trackDownload(R.task.task_id,v.value,f),y.value="processing"):(y.value="success",await P()),a.value=3}else await W.uploadAssetFromUrl({url:h.value.url,name:f,tags:w,user_metadata:z,preview_id:S}),y.value="success",await P(),a.value=3}catch(w){console.error("Failed to upload asset:",w),y.value="error",k.value=w instanceof Error?w.message:"Failed to upload model",a.value=3}finally{c.value=!1}return y.value!=="error"}m(J,"uploadModel");function Q(){a.value>1&&(a.value=a.value-1)}m(Q,"goToPreviousStep");function X(){a.value=1,l.value=!1,c.value=!1,y.value=void 0,k.value="",h.value={url:"",name:"",tags:[]},v.value=void 0}return m(X,"resetWizard"),{currentStep:a,isFetchingMetadata:l,isUploading:c,uploadStatus:y,uploadError:k,wizardData:h,selectedModelType:v,canFetchMetadata:T,canUploadModel:H,detectedSource:A,fetchMetadata:K,uploadModel:J,goToPreviousStep:Q,resetWizard:X}}m(ua,"useUploadModelWizard");const ca={class:"upload-model-dialog flex flex-col gap-6 border-t border-border-default p-4 pt-6"},pa={class:"min-h-0 flex-auto basis-0 overflow-y-auto"},ma=F({__name:"UploadModelDialog",emits:["upload-success"],setup(i,{emit:e}){const{flags:n}=D(),s=te(),{modelTypes:t,fetchModelTypes:o}=ue(),a=e,{currentStep:l,isFetchingMetadata:c,isUploading:y,uploadStatus:k,uploadError:h,wizardData:v,selectedModelType:M,canFetchMetadata:A,canUploadModel:T,fetchMetadata:H,uploadModel:K,goToPreviousStep:Y,resetWizard:P}=ua(t);async function J(){await H()}m(J,"handleFetchMetadata");async function Q(){await K()&&a("upload-success")}m(Q,"handleUploadModel");function X(){s.closeDialog({key:"upload-model"})}return m(X,"handleClose"),xe(()=>{o()}),(U,w)=>(d(),g("div",ca,[r("div",pa,[p(l)===1&&p(n).huggingfaceModelImportEnabled?(d(),C(Yt,{key:0,modelValue:p(v).url,"onUpdate:modelValue":w[0]||(w[0]=f=>p(v).url=f),error:p(h)},null,8,["modelValue","error"])):p(l)===1?(d(),C(da,{key:1,modelValue:p(v).url,"onUpdate:modelValue":w[1]||(w[1]=f=>p(v).url=f),error:p(h)},null,8,["modelValue","error"])):p(l)===2?(d(),C(Je,{key:2,modelValue:p(M),"onUpdate:modelValue":w[2]||(w[2]=f=>Se(M)?M.value=f:null),metadata:p(v).metadata,"preview-image":p(v).previewImage},null,8,["modelValue","metadata","preview-image"])):p(l)===3&&p(k)!=null?(d(),C(xt,{key:3,result:p(k),error:p(h),metadata:p(v).metadata,"model-type":p(M),"preview-image":p(v).previewImage},null,8,["result","error","metadata","model-type","preview-image"])):_("",!0)]),$(ot,{class:"flex-shrink-0","current-step":p(l),"is-fetching-metadata":p(c),"is-uploading":p(y),"can-fetch-metadata":p(A),"can-upload-model":p(T),"upload-status":p(k),onBack:p(Y),onFetchMetadata:J,onUpload:Q,onClose:X,onImportAnother:p(P)},null,8,["current-step","is-fetching-metadata","is-uploading","can-fetch-metadata","can-upload-model","upload-status","onBack","onImportAnother"])]))}}),fa=ae(ma,[["__scopeId","data-v-f4fd265e"]]),ga=""+new URL("images/civitai.svg",import.meta.url).href,va={class:"flex items-center gap-2 p-4 font-bold"},ha={key:0,src:ga,class:"size-4"},ba={class:"rounded-full bg-white px-1.5 py-0 text-xxs font-inter font-semibold uppercase text-black"},ya=F({__name:"UploadModelDialogHeader",setup(i){const{flags:e}=D(),n=V(()=>e.huggingfaceModelImportEnabled?"assetBrowser.uploadModelGeneric":"assetBrowser.uploadModelFromCivitai");return(s,t)=>(d(),g("div",va,[p(e).huggingfaceModelImportEnabled?_("",!0):(d(),g("img",ha)),r("span",null,u(s.$t(n.value)),1),r("span",ba,u(s.$t("g.beta")),1)]))}}),wa={},_a={class:"flex flex-1 flex-col items-center justify-center text-base text-muted-foreground"},$a={class:"m-0 max-w-md"};function ka(i,e){return d(),g("div",_a,[r("p",$a,u(i.$t("assetBrowser.upgradeFeatureDescription")),1)])}m(ka,"_sfc_render$1");const Ma=ae(wa,[["render",ka]]),Ua={class:"flex flex-wrap justify-end gap-2 w-full"},xa={href:"https://blog.comfy.org/p/comfy-cloud-new-features-and-pricing",target:"_blank",rel:"noopener noreferrer",class:"text-muted-foreground mr-auto underline flex items-center gap-2"},Sa=F({__name:"UploadModelUpgradeModalFooter",emits:["close","subscribe"],setup(i,{emit:e}){const n=e;return(s,t)=>(d(),g("div",Ua,[r("a",xa,[t[2]||(t[2]=r("i",{class:"icon-[lucide--external-link]"},null,-1)),r("span",null,u(s.$t("g.learnMore")),1)]),$(B,{variant:"textonly",onClick:t[0]||(t[0]=o=>n("close"))},{default:b(()=>[j(u(s.$t("g.close")),1)]),_:1}),$(B,{variant:"secondary",onClick:t[1]||(t[1]=o=>n("subscribe"))},{default:b(()=>[j(u(s.$t("subscription.required.subscribe")),1)]),_:1})]))}}),Ca={class:"flex flex-col justify-between gap-10 p-4 border-t border-border-default w-auto max-w-[min(500px,90vw)]"},Ia=F({__name:"UploadModelUpgradeModal",setup(i){const e=te(),{showSubscriptionDialog:n}=he();function s(){e.closeDialog({key:"upload-model-upgrade"})}m(s,"handleClose");function t(){n()}return m(t,"handleSubscribe"),(o,a)=>(d(),g("div",Ca,[$(Ma),$(Sa,{onClose:s,onSubscribe:t})]))}}),Ba={},Fa={class:"flex items-center gap-2 p-4 font-bold"};function Va(i,e){return d(),g("div",Fa,[r("span",null,u(i.$t("assetBrowser.upgradeToUnlockFeature")),1)])}m(Va,"_sfc_render");const La=ae(Ba,[["render",Va]]);function Na(i){const e=te(),{flags:n}=D(),s=V(()=>n.modelUploadButtonEnabled);function t(){n.privateModelsEnabled?e.showDialog({key:"upload-model",headerComponent:ya,component:fa,props:{onUploadSuccess:m(async()=>{await i?.()},"onUploadSuccess")},dialogComponentProps:{pt:{header:"py-0! pl-0!",content:"p-0! overflow-y-hidden!"}}}):e.showDialog({key:"upload-model-upgrade",headerComponent:La,component:Ia,dialogComponentProps:{pt:{header:"py-0! pl-0!",content:"p-0! overflow-y-hidden!"}}})}return m(t,"showUploadDialog"),{isUploadButtonEnabled:s,showUploadDialog:t}}m(Na,"useModelUpload");const ja=""+new URL("images/default-template.png",import.meta.url).href;function Aa(i,e,n={}){const{immediate:s=!0,...t}=n,o=typeof window<"u"&&"IntersectionObserver"in window,a=x(!1);let l=null;const c=m(()=>{l&&(l.disconnect(),l=null)},"cleanup"),y=m(()=>{c(),!(!o||!i.value)&&(l=new IntersectionObserver(h=>{a.value=h.some(v=>v.isIntersecting),e(h,l)},t),l.observe(i.value))},"observe"),k=m(()=>{l&&i.value&&l.unobserve(i.value)},"unobserve");return s&&G(i,y,{immediate:!0,flush:"post"}),Ce(c),{isSupported:o,isIntersecting:a,observe:y,unobserve:k,cleanup:c}}m(Aa,"useIntersectionObserver");class Ea{static{m(this,"MediaCacheService")}cache=re(new Map);maxSize;maxAge;cleanupInterval=null;urlRefCount=new Map;constructor(e={}){this.maxSize=e.maxSize??100,this.maxAge=e.maxAge??1800*1e3,this.startCleanupInterval()}startCleanupInterval(){this.cleanupInterval=window.setInterval(()=>{this.cleanup()},300*1e3)}cleanup(){const e=Date.now(),n=[];for(const[s,t]of Array.from(this.cache.entries()))e-t.lastAccessed>this.maxAge&&(t.objectUrl?(this.urlRefCount.get(t.objectUrl)||0)===0&&(URL.revokeObjectURL(t.objectUrl),this.urlRefCount.delete(t.objectUrl),n.push(s)):n.push(s));if(n.forEach(s=>this.cache.delete(s)),this.cache.size>this.maxSize){const s=Array.from(this.cache.entries());s.sort((a,l)=>a[1].lastAccessed-l[1].lastAccessed);let t=0;const o=this.cache.size-this.maxSize;for(const[a,l]of s){if(t>=o)break;l.objectUrl?(this.urlRefCount.get(l.objectUrl)||0)===0&&(URL.revokeObjectURL(l.objectUrl),this.urlRefCount.delete(l.objectUrl),this.cache.delete(a),t++):(this.cache.delete(a),t++)}}}async getCachedMedia(e){let n=this.cache.get(e);if(n)return n.lastAccessed=Date.now(),n;n={src:e,isLoading:!0,lastAccessed:Date.now()},this.cache.set(e,n);try{const s=await fetch(e,{cache:"force-cache"});if(!s.ok)throw new Error(`Failed to fetch: ${s.status}`);const t=await s.blob(),o=URL.createObjectURL(t),a={src:e,blob:t,objectUrl:o,isLoading:!1,lastAccessed:Date.now()};return this.cache.set(e,a),a}catch(s){console.warn("Failed to cache media:",e,s);const t={src:e,error:!0,isLoading:!1,lastAccessed:Date.now()};return this.cache.set(e,t),t}}acquireUrl(e){const n=this.cache.get(e);if(n?.objectUrl){const s=this.urlRefCount.get(n.objectUrl)||0;return this.urlRefCount.set(n.objectUrl,s+1),n.objectUrl}}releaseUrl(e){const n=this.cache.get(e);if(n?.objectUrl){const s=(this.urlRefCount.get(n.objectUrl)||1)-1;s<=0?(URL.revokeObjectURL(n.objectUrl),this.urlRefCount.delete(n.objectUrl),this.cache.delete(e)):this.urlRefCount.set(n.objectUrl,s)}}clearCache(){for(const e of Array.from(this.cache.values()))e.objectUrl&&URL.revokeObjectURL(e.objectUrl);this.cache.clear(),this.urlRefCount.clear()}destroy(){this.cleanupInterval&&(clearInterval(this.cleanupInterval),this.cleanupInterval=null),this.clearCache()}}let L=null;function Da(i){return L||(L=new Ea(i)),{getCachedMedia:m(o=>L.getCachedMedia(o),"getCachedMedia"),clearCache:m(()=>L.clearCache(),"clearCache"),acquireUrl:m(o=>L.acquireUrl(o),"acquireUrl"),releaseUrl:m(o=>L.releaseUrl(o),"releaseUrl"),cache:L.cache}}m(Da,"useMediaCache");typeof window<"u"&&window.addEventListener("beforeunload",()=>{L&&L.destroy()});const za=["src","alt"],Ra={key:2,class:"absolute inset-0 flex items-center justify-center"},Ta=["alt"],Ga=F({__name:"LazyImage",props:{src:{},alt:{default:""},containerClass:{type:[Array,Object,String,Number,null,Boolean],default:""},imageClass:{type:[Array,Object,String,Number,null,Boolean],default:""},imageStyle:{},rootMargin:{default:"300px"}},setup(i){const e=x(null),n=x(!1),s=x(!1),t=x(!1),o=x(void 0),{getCachedMedia:a,acquireUrl:l,releaseUrl:c}=Da();Aa(e,v=>{const M=v[0];n.value=M?.isIntersecting??!1},{rootMargin:i.rootMargin,threshold:.1});const y=V(()=>n.value);G(y,async v=>{if(v&&i.src&&!o.value&&!t.value)try{const M=await a(i.src);if(M.error)t.value=!0;else if(M.objectUrl){const A=l(i.src);o.value=A||M.objectUrl}else o.value=i.src}catch(M){console.warn("Failed to load cached media:",M),o.value=i.src}else v||(o.value?.startsWith("blob:")&&c(i.src),s.value=!1,o.value=void 0,t.value=!1)},{immediate:!0});const k=m(()=>{s.value=!0,t.value=!1},"onImageLoad"),h=m(()=>{t.value=!0,s.value=!1},"onImageError");return Ie(()=>{o.value?.startsWith("blob:")&&c(i.src)}),(v,M)=>(d(),g("div",{ref_key:"containerRef",ref:e,class:Z(["relative flex h-full w-full items-center justify-center overflow-hidden",v.containerClass])},[s.value?_("",!0):(d(),C(p(Ve),{key:0,width:"100%",height:"100%",class:"absolute inset-0"})),o.value?(d(),g("img",{key:1,src:o.value,alt:v.alt,draggable:"false",class:Z(v.imageClass),style:ee(v.imageStyle),onLoad:k,onError:h},null,46,za)):_("",!0),t.value?(d(),g("div",Ra,[r("img",{src:ja,alt:v.alt,draggable:"false",class:Z(v.imageClass),style:ee(v.imageStyle)},null,14,Ta)])):_("",!0)],2))}});export{ze as _,Na as a,ja as b,Ga as c,Aa as d,D as u};
|
|
2
|
-
//# sourceMappingURL=LazyImage.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
var pe=Object.defineProperty;var m=(i,e)=>pe(i,"name",{value:e,configurable:!0});import{cG as E,a as I,c as oe,_ as B,k as me,cu as fe,l as ge,h as W,s as ve,u as te,d as ae,m as he}from"./index--yK73oka.js";import{b as re,E as V,a as be,bx as F,cM as O,cN as N,j as C,d,by as p,m as ye,k as b,e as r,G as ee,c as g,q as _,u,p as we,d3 as _e,cw as $e,z as $,w as G,d2 as ke,eE as Me,r as x,A as j,F as Ue,f as ne,o as xe,bg as Se,dc as Ce,cd as Ie,s as Z}from"./vendor-other-B8t_Wf2K.js";import{i as Be,y as Fe,e as ie,a as Ve}from"./vendor-primevue-DeKsC2uk.js";import{u as de}from"./vendor-vue-DaLZjKA7.js";function D(){const i=re({get supportsPreviewMetadata(){return I.getServerFeature("supports_preview_metadata")},get maxUploadSize(){return I.getServerFeature("max_upload_size")},get supportsManagerV4(){return I.getServerFeature("extension.manager.supports_v4")},get modelUploadButtonEnabled(){return E.value.model_upload_button_enabled??I.getServerFeature("model_upload_button_enabled",!1)},get assetDeletionEnabled(){return E.value.asset_deletion_enabled??I.getServerFeature("asset_deletion_enabled",!1)},get assetRenameEnabled(){return E.value.asset_rename_enabled??I.getServerFeature("asset_rename_enabled",!1)},get privateModelsEnabled(){return E.value.private_models_enabled??I.getServerFeature("private_models_enabled",!1)},get onboardingSurveyEnabled(){return E.value.onboarding_survey_enabled??I.getServerFeature("onboarding_survey_enabled",!0)},get huggingfaceModelImportEnabled(){return E.value.huggingface_model_import_enabled??I.getServerFeature("huggingface_model_import_enabled",!1)},get asyncModelUploadEnabled(){return E.value.async_model_upload_enabled??I.getServerFeature("async_model_upload_enabled",!1)}}),e=m((n,s)=>V(()=>I.getServerFeature(n,s)),"featureFlag");return{flags:be(i),featureFlag:e}}m(D,"useFeatureFlags");const Le={class:"flex items-center gap-2 text-sm"},je={key:0,class:"text-base-foreground"},Ae={key:1,class:"text-base-foreground"},Ee={class:"truncate"},De={key:0,class:"icon-[lucide--check] text-base-foreground"},ze=F({inheritAttrs:!1,__name:"SingleSelect",props:O({label:{},options:{},listMaxHeight:{default:"28rem"},popoverMinWidth:{},popoverMaxWidth:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const e=N(i,"modelValue"),{t:n}=de(),s=m(o=>{if(o==null||!i.options)return i.label??"";const a=i.options.find(l=>l.value===o);return a?a.name:i.label??""},"getLabel"),t=V(()=>{if(!i.popoverMinWidth&&!i.popoverMaxWidth)return;const o=[];return i.popoverMinWidth&&o.push(`min-width: ${i.popoverMinWidth}`),i.popoverMaxWidth&&o.push(`max-width: ${i.popoverMaxWidth}`),o.join("; ")});return(o,a)=>(d(),C(p(Be),ye({modelValue:e.value,"onUpdate:modelValue":a[0]||(a[0]=l=>e.value=l)},o.$attrs,{options:o.options,"option-label":"name","option-value":"value",unstyled:"",pt:{root:m(({props:l})=>({class:["h-10 relative inline-flex cursor-pointer select-none items-center","rounded-lg","bg-secondary-background text-base-foreground","border-[2.5px] border-solid border-transparent","transition-all duration-200 ease-in-out","focus-within:border-node-component-border",{"opacity-60 cursor-default":l.disabled}]}),"root"),label:{class:"flex-1 flex items-center whitespace-nowrap pl-4 py-2 outline-hidden"},dropdown:{class:"flex shrink-0 items-center justify-center px-3 py-2"},overlay:{class:p(oe)("mt-2 p-2 rounded-lg","bg-base-background text-base-foreground","border border-solid border-border-default")},listContainer:m(()=>({style:`max-height: min(${o.listMaxHeight}, 50vh)`,class:"scrollbar-custom"}),"listContainer"),list:{class:"flex flex-col gap-0 p-0 m-0 list-none border-none text-sm"},option:m(({context:l})=>({class:p(oe)("flex items-center justify-between gap-3 px-2 py-3 rounded","hover:bg-secondary-background-hover",l.focused&&"bg-secondary-background-hover",l.selected&&"bg-secondary-background-selected hover:bg-secondary-background-selected")}),"option"),optionLabel:{class:"truncate"},optionGroupLabel:{class:"px-3 py-2 text-xs uppercase tracking-wide text-muted-foreground"},emptyMessage:{class:"px-3 py-2 text-sm text-muted-foreground"}},"aria-label":o.label||p(n)("g.singleSelectDropdown"),role:"combobox","aria-expanded":!1,"aria-haspopup":"listbox",tabindex:0}),{value:b(l=>[r("div",Le,[we(o.$slots,"icon"),l.value!==null&&l.value!==void 0?(d(),g("span",je,u(s(l.value)),1)):(d(),g("span",Ae,u(o.label),1))])]),dropdownicon:b(()=>a[1]||(a[1]=[r("i",{class:"icon-[lucide--chevron-down] text-muted-foreground"},null,-1)])),option:b(({option:l,selected:c})=>[r("div",{class:"flex w-full items-center justify-between gap-3",style:ee(t.value)},[r("span",Ee,u(l.name),1),c?(d(),g("i",De)):_("",!0)],4)]),_:3},16,["modelValue","options","pt","aria-label"]))}});function Re(i){const e={loras:"LoRA",ipadapter:"IP-Adapter",sams:"SAM",clip_vision:"CLIP Vision",animatediff_motion_lora:"AnimateDiff Motion LoRA",animatediff_models:"AnimateDiff Model",vae:"VAE",sam2:"SAM 2",controlnet:"ControlNet",gligen:"GLIGEN"};return e[i]?e[i]:i.split("_").map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join(" ")}m(Re,"formatDisplayName");const Te=["nlf"],ue=_e(()=>{const{state:i,isLoading:e,error:n,execute:s}=$e(async()=>(await I.getModelFolders()).filter(o=>!Te.includes(o.name)).map(o=>({name:Re(o.name),value:o.name})).sort((o,a)=>o.name.localeCompare(a.name)),[],{immediate:!1,onError:m(t=>{console.error("Failed to fetch model types:",t)},"onError")});return{modelTypes:i,isLoading:e,error:n,fetchModelTypes:s}}),He={class:"flex flex-col gap-4 text-sm text-muted-foreground"},Pe={class:"flex flex-col gap-2"},We={class:"m-0"},qe={class:"flex items-center gap-3 rounded-lg bg-secondary-background px-4 py-2"},Oe=["src","alt"],Ne={class:"m-0 min-w-0 flex-1 truncate text-base-foreground"},Ge={class:"flex flex-col gap-2"},Ke={class:"flex items-center gap-2"},Ye={class:"text-muted-foreground"},Je=F({__name:"UploadModelConfirmation",props:O({metadata:{},previewImage:{}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const e=N(i,"modelValue"),{modelTypes:n,isLoading:s}=ue();return(t,o)=>(d(),g("div",He,[r("div",Pe,[r("p",We,u(t.$t("assetBrowser.modelAssociatedWithLink")),1),r("div",qe,[t.previewImage?(d(),g("img",{key:0,src:t.previewImage,alt:t.metadata?.filename||t.metadata?.name||"Model preview",class:"size-14 flex-shrink-0 rounded object-cover"},null,8,Oe)):_("",!0),r("p",Ne,u(t.metadata?.filename||t.metadata?.name),1)])]),r("div",Ge,[r("div",Ke,[r("label",null,u(t.$t("assetBrowser.modelTypeSelectorLabel")),1),o[1]||(o[1]=r("i",{class:"icon-[lucide--circle-question-mark] text-muted-foreground"},null,-1)),r("span",Ye,u(t.$t("assetBrowser.notSureLeaveAsIs")),1)]),$(ze,{modelValue:e.value,"onUpdate:modelValue":o[0]||(o[0]=a=>e.value=a),label:p(s)?t.$t("g.loading"):t.$t("assetBrowser.modelTypeSelectorPlaceholder"),options:p(n),disabled:p(s),"data-attr":"upload-model-step2-type-selector"},null,8,["modelValue","label","options","disabled"])])]))}}),Qe={class:"relative"},Xe=["aria-label","src"],le=F({__name:"VideoHelpDialog",props:O({videoUrl:{},ariaLabel:{default:"Help video"}},{modelValue:{type:Boolean,required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const e=N(i,"modelValue"),n=m(s=>{s.key==="Escape"&&(s.stopImmediatePropagation(),s.stopPropagation(),s.preventDefault(),e.value=!1)},"handleEscapeKey");return G(e,s=>{if(s){const t=ke(document,"keydown",n,{capture:!0});Me(t)}},{immediate:!0}),(s,t)=>(d(),C(p(Fe),{visible:e.value,"onUpdate:visible":t[1]||(t[1]=o=>e.value=o),modal:"",closable:!1,"close-on-escape":!1,"dismissable-mask":!0,pt:{root:{class:"video-help-dialog"},header:{class:"!hidden"},content:{class:"!p-0"},mask:{class:"!bg-black/70"}},style:{width:"90vw"}},{default:b(()=>[r("div",Qe,[$(B,{variant:"textonly",size:"icon",class:"absolute top-4 right-6 z-10","aria-label":s.$t("g.close"),onClick:t[0]||(t[0]=o=>e.value=!1)},{default:b(()=>t[2]||(t[2]=[r("i",{class:"pi pi-times text-sm"},null,-1)])),_:1},8,["aria-label"]),r("video",{autoplay:"",muted:"",loop:"","aria-label":s.ariaLabel,class:"w-full rounded-lg",src:s.videoUrl},u(s.$t("g.videoFailedToLoad")),9,Xe)])]),_:1},8,["visible"]))}}),Ze={class:"flex justify-end gap-2 w-full"},et={key:0,class:"mr-auto flex items-center gap-2"},tt={key:4},at={key:0,class:"icon-[lucide--loader-circle] animate-spin"},st={key:0,class:"icon-[lucide--loader-circle] animate-spin"},ot=F({__name:"UploadModelFooter",props:{currentStep:{},isFetchingMetadata:{type:Boolean},isUploading:{type:Boolean},canFetchMetadata:{type:Boolean},canUploadModel:{type:Boolean},uploadStatus:{}},emits:["back","fetchMetadata","upload","close","importAnother"],setup(i,{emit:e}){const{flags:n}=D(),s=x(!1),t=x(!1),o=e;return(a,l)=>(d(),g("div",Ze,[a.currentStep===1&&p(n).huggingfaceModelImportEnabled?(d(),g("div",et,[l[11]||(l[11]=r("i",{class:"icon-[lucide--circle-question-mark] text-muted-foreground"},null,-1)),$(B,{variant:"muted-textonly",size:"sm","data-attr":"upload-model-step1-help-civitai",onClick:l[0]||(l[0]=c=>s.value=!0)},{default:b(()=>[j(u(a.$t("assetBrowser.providerCivitai")),1)]),_:1}),$(B,{variant:"muted-textonly",size:"sm","data-attr":"upload-model-step1-help-huggingface",onClick:l[1]||(l[1]=c=>t.value=!0)},{default:b(()=>[j(u(a.$t("assetBrowser.providerHuggingFace")),1)]),_:1})])):a.currentStep===1?(d(),C(B,{key:1,variant:"muted-textonly",size:"lg",class:"mr-auto underline","data-attr":"upload-model-step1-help-link",onClick:l[2]||(l[2]=c=>s.value=!0)},{default:b(()=>[l[12]||(l[12]=r("i",{class:"icon-[lucide--circle-question-mark]"},null,-1)),r("span",null,u(a.$t("assetBrowser.uploadModelHowDoIFindThis")),1)]),_:1})):_("",!0),a.currentStep===1?(d(),C(B,{key:2,variant:"muted-textonly",size:"lg","data-attr":"upload-model-step1-cancel-button",disabled:a.isFetchingMetadata||a.isUploading,onClick:l[3]||(l[3]=c=>o("close"))},{default:b(()=>[j(u(a.$t("g.cancel")),1)]),_:1},8,["disabled"])):_("",!0),a.currentStep!==1&&a.currentStep!==3?(d(),C(B,{key:3,variant:"muted-textonly",size:"lg","data-attr":`upload-model-step${a.currentStep}-back-button`,disabled:a.isFetchingMetadata||a.isUploading,onClick:l[4]||(l[4]=c=>o("back"))},{default:b(()=>[j(u(a.$t("g.back")),1)]),_:1},8,["data-attr","disabled"])):(d(),g("span",tt)),a.currentStep===1?(d(),C(B,{key:5,variant:"secondary",size:"lg","data-attr":"upload-model-step1-continue-button",disabled:!a.canFetchMetadata||a.isFetchingMetadata,onClick:l[5]||(l[5]=c=>o("fetchMetadata"))},{default:b(()=>[a.isFetchingMetadata?(d(),g("i",at)):_("",!0),r("span",null,u(a.$t("g.continue")),1)]),_:1},8,["disabled"])):a.currentStep===2?(d(),C(B,{key:6,variant:"secondary",size:"lg","data-attr":"upload-model-step2-confirm-button",disabled:!a.canUploadModel||a.isUploading,onClick:l[6]||(l[6]=c=>o("upload"))},{default:b(()=>[a.isUploading?(d(),g("i",st)):_("",!0),r("span",null,u(a.$t("assetBrowser.upload")),1)]),_:1},8,["disabled"])):a.currentStep===3&&(a.uploadStatus==="success"||a.uploadStatus==="processing")?(d(),g(Ue,{key:7},[$(B,{variant:"muted-textonly",size:"lg","data-attr":"upload-model-step3-import-another-button",onClick:l[7]||(l[7]=c=>o("importAnother"))},{default:b(()=>[j(u(a.$t("assetBrowser.importAnother")),1)]),_:1}),$(B,{variant:"secondary",size:"lg","data-attr":"upload-model-step3-finish-button",onClick:l[8]||(l[8]=c=>o("close"))},{default:b(()=>[j(u(a.uploadStatus==="processing"?a.$t("g.close"):a.$t("assetBrowser.finish")),1)]),_:1})],64)):_("",!0),$(le,{modelValue:s.value,"onUpdate:modelValue":l[9]||(l[9]=c=>s.value=c),"video-url":"https://media.comfy.org/compressed_768/civitai_howto.webm","aria-label":a.$t("assetBrowser.uploadModelHelpVideo")},null,8,["modelValue","aria-label"]),$(le,{modelValue:t.value,"onUpdate:modelValue":l[10]||(l[10]=c=>t.value=c),"video-url":"https://media.comfy.org/byom/huggingfacehowto.mp4","aria-label":a.$t("assetBrowser.uploadModelHelpVideo")},null,8,["modelValue","aria-label"])]))}}),lt={class:"flex flex-1 flex-col gap-6 text-sm text-muted-foreground"},rt={key:0,class:"flex flex-col gap-2"},nt={class:"m-0 font-bold"},it={class:"m-0"},dt={class:"flex flex-row items-center gap-3 rounded-lg bg-modal-card-background p-4"},ut=["src","alt"],ct={class:"flex min-w-0 flex-1 flex-col items-start justify-center gap-1"},pt={class:"m-0 w-full truncate text-base-foreground"},mt={class:"m-0 text-sm text-muted"},ft={key:1,class:"flex flex-col gap-2"},gt={class:"m-0 font-bold"},vt={class:"m-0"},ht={class:"flex flex-row items-center gap-3 rounded-lg bg-modal-card-background p-4"},bt=["src","alt"],yt={class:"flex min-w-0 flex-1 flex-col items-start justify-center gap-1"},wt={class:"m-0 w-full truncate text-base-foreground"},_t={class:"m-0 text-sm text-muted"},$t={key:2,class:"flex flex-1 flex-col items-center justify-center gap-6"},kt={class:"text-center"},Mt={class:"m-0 text-sm font-bold"},Ut={key:0,class:"text-sm text-muted mb-0"},xt=F({__name:"UploadModelProgress",props:{result:{},error:{},metadata:{},modelType:{},previewImage:{}},setup(i){return(e,n)=>(d(),g("div",lt,[e.result==="processing"?(d(),g("div",rt,[r("p",nt,u(e.$t("assetBrowser.processingModel")),1),r("p",it,u(e.$t("assetBrowser.processingModelDescription")),1),r("div",dt,[e.previewImage?(d(),g("img",{key:0,src:e.previewImage,alt:e.metadata?.filename||e.metadata?.name||"Model preview",class:"size-14 flex-shrink-0 rounded object-cover"},null,8,ut)):_("",!0),r("div",ct,[r("p",pt,u(e.metadata?.filename||e.metadata?.name),1),r("p",mt,u(e.modelType),1)])])])):e.result==="success"?(d(),g("div",ft,[r("p",gt,u(e.$t("assetBrowser.modelUploaded")),1),r("p",vt,u(e.$t("assetBrowser.findInLibrary",{type:e.modelType})),1),r("div",ht,[e.previewImage?(d(),g("img",{key:0,src:e.previewImage,alt:e.metadata?.filename||e.metadata?.name||"Model preview",class:"size-14 flex-shrink-0 rounded object-cover"},null,8,bt)):_("",!0),r("div",yt,[r("p",wt,u(e.metadata?.filename||e.metadata?.name),1),r("p",_t,u(e.modelType),1)])])])):e.result==="error"?(d(),g("div",$t,[n[0]||(n[0]=r("i",{class:"icon-[lucide--x-circle] text-6xl text-error"},null,-1)),r("div",kt,[r("p",Mt,u(e.$t("assetBrowser.uploadFailed")),1),e.error?(d(),g("p",Ut,u(e.error),1)):_("",!0)])])):_("",!0)]))}}),q={type:"civitai",name:"Civitai",hostnames:["civitai.com"]},ce={type:"huggingface",name:"Hugging Face",hostnames:["huggingface.co"]};function se(i,e){try{const n=new URL(i).hostname.toLowerCase();return e.hostnames.some(s=>n===s||n.endsWith(`.${s}`))}catch{return!1}}m(se,"validateSourceUrl");const St={class:"flex flex-col justify-between h-full gap-6 text-sm"},Ct={class:"flex flex-col gap-6"},It={class:"flex flex-col gap-2"},Bt={class:"m-0 text-foreground"},Ft={class:"m-0"},Vt={class:"m-0 text-muted-foreground"},Lt={class:"inline-flex items-center gap-1 flex-wrap mt-2"},jt={class:"inline-flex items-center gap-1"},At=["alt"],Et={class:"inline-flex items-center gap-1"},Dt=["alt"],zt={class:"flex flex-col gap-2"},Rt={class:"relative"},Tt={key:0,class:"icon-[lucide--circle-check-big] absolute top-1/2 right-3 size-5 -translate-y-1/2 text-green-500"},Ht={key:0,class:"text-sm text-error"},Pt={key:1,class:"text-foreground"},Wt={class:"font-bold italic"},qt={class:"text-sm text-muted"},Ot="/assets/images/civitai.svg",Nt="https://civitai.com/models",Gt="/assets/images/hf-logo.svg",Kt="https://huggingface.co",Yt=F({__name:"UploadModelUrlInput",props:{modelValue:{},error:{}},emits:["update:modelValue"],setup(i,{emit:e}){const{flags:n}=D(),s=i,t=e,o=V({get:m(()=>s.modelValue,"get"),set:m(c=>t("update:modelValue",c),"set")}),a=[q,ce],l=V(()=>{const c=o.value.trim();return c?a.some(y=>se(c,y)):!1});return(c,y)=>{const k=ne("i18n-t");return d(),g("div",St,[r("div",Ct,[r("div",It,[r("p",Bt,u(c.$t("assetBrowser.uploadModelDescription1Generic")),1),r("div",Ft,[r("p",Vt,u(c.$t("assetBrowser.uploadModelDescription2Generic")),1),r("span",Lt,[r("span",jt,[r("img",{src:Ot,alt:c.$t("assetBrowser.providerCivitai"),class:"w-4 h-4"},null,8,At),r("a",{href:Nt,target:"_blank",rel:"noopener noreferrer",class:"text-muted-foreground underline"},u(c.$t("assetBrowser.providerCivitai")),1),y[1]||(y[1]=r("span",null,",",-1))]),r("span",Et,[r("img",{src:Gt,alt:c.$t("assetBrowser.providerHuggingFace"),class:"w-4 h-4"},null,8,Dt),r("a",{href:Kt,target:"_blank",rel:"noopener noreferrer",class:"text-muted-foreground underline"},u(c.$t("assetBrowser.providerHuggingFace")),1)])])])]),r("div",zt,[r("div",Rt,[$(p(ie),{modelValue:o.value,"onUpdate:modelValue":y[0]||(y[0]=h=>o.value=h),autofocus:"",placeholder:c.$t("assetBrowser.genericLinkPlaceholder"),class:"w-full border-0 bg-secondary-background p-4 pr-10","data-attr":"upload-model-step1-url-input"},null,8,["modelValue","placeholder"]),l.value?(d(),g("i",Tt)):_("",!0)]),c.error?(d(),g("p",Ht,u(c.error),1)):p(n).asyncModelUploadEnabled?_("",!0):(d(),g("p",Pt,[$(k,{keypath:"assetBrowser.maxFileSize",tag:"span"},{size:b(()=>[r("span",Wt,u(c.$t("assetBrowser.maxFileSizeValue")),1)]),_:1})]))])]),r("div",qt,u(c.$t("assetBrowser.uploadModelHelpFooterText")),1)])}}}),Jt={class:"flex flex-col gap-6 text-sm text-muted-foreground"},Qt={class:"flex flex-col gap-2"},Xt={class:"m-0"},Zt={class:"list-disc space-y-1 pl-5 mt-0"},ea={href:"https://civitai.com/models",target:"_blank",class:"text-muted-foreground underline"},ta={key:0},aa={class:"font-bold italic"},sa={class:"flex flex-col gap-2"},oa={class:"font-bold italic"},la={class:"relative"},ra={key:0,class:"icon-[lucide--circle-check-big] absolute top-1/2 right-3 size-5 -translate-y-1/2 text-green-500"},na={key:0,class:"text-sm text-error"},ia={href:"https://civitai.com/models/10706/luisap-z-image-and-qwen-pixel-art-refiner?modelVersionId=2225295",target:"_blank",class:"text-muted-foreground underline"},da=F({__name:"UploadModelUrlInputCivitai",props:O({error:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const{flags:e}=D(),n=N(i,"modelValue"),s=V(()=>{const t=n.value.trim();return t?se(t,q):!1});return(t,o)=>{const a=ne("i18n-t");return d(),g("div",Jt,[r("div",Qt,[r("p",Xt,u(t.$t("assetBrowser.uploadModelDescription1")),1),r("ul",Zt,[r("li",null,[$(a,{keypath:"assetBrowser.uploadModelDescription2",tag:"span"},{link:b(()=>[r("a",ea,u(t.$t("assetBrowser.uploadModelDescription2Link")),1)]),_:1})]),p(e).asyncModelUploadEnabled?_("",!0):(d(),g("li",ta,[$(a,{keypath:"assetBrowser.uploadModelDescription3",tag:"span"},{size:b(()=>[r("span",aa,u(t.$t("assetBrowser.maxFileSizeValue")),1)]),_:1})]))])]),r("div",sa,[$(a,{keypath:"assetBrowser.civitaiLinkLabel",tag:"label",class:"mb-0"},{download:b(()=>[r("span",oa,u(t.$t("assetBrowser.civitaiLinkLabelDownload")),1)]),_:1}),r("div",la,[$(p(ie),{modelValue:n.value,"onUpdate:modelValue":o[0]||(o[0]=l=>n.value=l),autofocus:"",placeholder:t.$t("assetBrowser.civitaiLinkPlaceholder"),class:"w-full border-0 bg-secondary-background p-4 pr-10","data-attr":"upload-model-step1-url-input"},null,8,["modelValue","placeholder"]),s.value?(d(),g("i",ra)):_("",!0)]),t.error?(d(),g("p",na,u(t.error),1)):(d(),C(a,{key:1,keypath:"assetBrowser.civitaiLinkExample",tag:"p",class:"text-sm"},{example:b(()=>[r("strong",null,u(t.$t("assetBrowser.civitaiLinkExampleStrong")),1)]),link:b(()=>[r("a",ia,u(t.$t("assetBrowser.civitaiLinkExampleUrl")),1)]),_:1}))])])}}});function ua(i){const{t:e}=de(),n=me(),s=fe(),t=ge(),{flags:o}=D(),a=x(1),l=x(!1),c=x(!1),y=x(),k=x(""),h=x({url:"",name:"",tags:[]}),v=x(),M=o.huggingfaceModelImportEnabled?[q,ce]:[q],A=V(()=>{const U=h.value.url.trim();return U?M.find(w=>se(U,w))??null:null});G(()=>h.value.url,()=>{k.value=""});const T=V(()=>h.value.url.trim().length>0),H=V(()=>!!v.value);async function K(){if(!T.value)return;let U=h.value.url.trim();try{U=new URL(encodeURI(U)).toString()}catch{}if(h.value.url=U,!A.value){const f=M.map(S=>S.name).join(", ");k.value=e("assetBrowser.unsupportedUrlSource",{sources:f});return}l.value=!0;try{const f=await W.getAssetMetadata(h.value.url);if(f.filename)try{f.filename=decodeURIComponent(f.filename)}catch{}if(f.name)try{f.name=decodeURIComponent(f.name)}catch{}if(h.value.metadata=f,h.value.name=f.filename||f.name||"",h.value.previewImage=f.preview_image,f.tags&&f.tags.length>0){h.value.tags=f.tags;const S=f.tags.find(z=>i.value.some(R=>R.value===z));S&&(v.value=S)}a.value=2}catch(f){console.error("Failed to retrieve metadata:",f),k.value=f instanceof Error?f.message:ve("assetBrowser.uploadModelFailedToRetrieveMetadata","Failed to retrieve metadata. Please check the link and try again."),a.value=1}finally{l.value=!1}}m(K,"fetchMetadata");async function Y(U){if(h.value.previewImage)try{const w=U.split(".")[0];let f="png";const S=h.value.previewImage.match(/^data:image\/([^;]+);/);return S&&(f=S[1]==="jpeg"?"jpg":S[1]),(await W.uploadAssetFromBase64({data:h.value.previewImage,name:`${w}_preview.${f}`,tags:["preview"]})).id}catch(w){console.error("Failed to upload preview image:",w);return}}m(Y,"uploadPreviewImage");async function P(){if(!v.value)return;const U=t.getAllNodeProviders(v.value);(await Promise.allSettled(U.map(f=>n.updateModelsForNodeType(f.nodeDef.name)))).forEach((f,S)=>{f.status==="rejected"&&console.error(`Failed to refresh ${U[S].nodeDef.name}:`,f.reason)})}m(P,"refreshModelCaches");async function J(){if(!H.value)return!1;const U=A.value;if(!U)return k.value=e("assetBrowser.noValidSourceDetected"),!1;c.value=!0;try{const w=v.value?["models",v.value]:["models"],f=h.value.metadata?.filename||h.value.metadata?.name||"model",S=await Y(f),z={source:U.type,source_url:h.value.url,model_type:v.value};if(o.asyncModelUploadEnabled){const R=await W.uploadAssetAsync({source_url:h.value.url,tags:w,user_metadata:z,preview_id:S});R.type==="async"&&R.task.status!=="completed"?(v.value&&s.trackDownload(R.task.task_id,v.value,f),y.value="processing"):(y.value="success",await P()),a.value=3}else await W.uploadAssetFromUrl({url:h.value.url,name:f,tags:w,user_metadata:z,preview_id:S}),y.value="success",await P(),a.value=3}catch(w){console.error("Failed to upload asset:",w),y.value="error",k.value=w instanceof Error?w.message:"Failed to upload model",a.value=3}finally{c.value=!1}return y.value!=="error"}m(J,"uploadModel");function Q(){a.value>1&&(a.value=a.value-1)}m(Q,"goToPreviousStep");function X(){a.value=1,l.value=!1,c.value=!1,y.value=void 0,k.value="",h.value={url:"",name:"",tags:[]},v.value=void 0}return m(X,"resetWizard"),{currentStep:a,isFetchingMetadata:l,isUploading:c,uploadStatus:y,uploadError:k,wizardData:h,selectedModelType:v,canFetchMetadata:T,canUploadModel:H,detectedSource:A,fetchMetadata:K,uploadModel:J,goToPreviousStep:Q,resetWizard:X}}m(ua,"useUploadModelWizard");const ca={class:"upload-model-dialog flex flex-col gap-6 border-t border-border-default p-4 pt-6"},pa={class:"min-h-0 flex-auto basis-0 overflow-y-auto"},ma=F({__name:"UploadModelDialog",emits:["upload-success"],setup(i,{emit:e}){const{flags:n}=D(),s=te(),{modelTypes:t,fetchModelTypes:o}=ue(),a=e,{currentStep:l,isFetchingMetadata:c,isUploading:y,uploadStatus:k,uploadError:h,wizardData:v,selectedModelType:M,canFetchMetadata:A,canUploadModel:T,fetchMetadata:H,uploadModel:K,goToPreviousStep:Y,resetWizard:P}=ua(t);async function J(){await H()}m(J,"handleFetchMetadata");async function Q(){await K()&&a("upload-success")}m(Q,"handleUploadModel");function X(){s.closeDialog({key:"upload-model"})}return m(X,"handleClose"),xe(()=>{o()}),(U,w)=>(d(),g("div",ca,[r("div",pa,[p(l)===1&&p(n).huggingfaceModelImportEnabled?(d(),C(Yt,{key:0,modelValue:p(v).url,"onUpdate:modelValue":w[0]||(w[0]=f=>p(v).url=f),error:p(h)},null,8,["modelValue","error"])):p(l)===1?(d(),C(da,{key:1,modelValue:p(v).url,"onUpdate:modelValue":w[1]||(w[1]=f=>p(v).url=f),error:p(h)},null,8,["modelValue","error"])):p(l)===2?(d(),C(Je,{key:2,modelValue:p(M),"onUpdate:modelValue":w[2]||(w[2]=f=>Se(M)?M.value=f:null),metadata:p(v).metadata,"preview-image":p(v).previewImage},null,8,["modelValue","metadata","preview-image"])):p(l)===3&&p(k)!=null?(d(),C(xt,{key:3,result:p(k),error:p(h),metadata:p(v).metadata,"model-type":p(M),"preview-image":p(v).previewImage},null,8,["result","error","metadata","model-type","preview-image"])):_("",!0)]),$(ot,{class:"flex-shrink-0","current-step":p(l),"is-fetching-metadata":p(c),"is-uploading":p(y),"can-fetch-metadata":p(A),"can-upload-model":p(T),"upload-status":p(k),onBack:p(Y),onFetchMetadata:J,onUpload:Q,onClose:X,onImportAnother:p(P)},null,8,["current-step","is-fetching-metadata","is-uploading","can-fetch-metadata","can-upload-model","upload-status","onBack","onImportAnother"])]))}}),fa=ae(ma,[["__scopeId","data-v-f4fd265e"]]),ga=""+new URL("images/civitai.svg",import.meta.url).href,va={class:"flex items-center gap-2 p-4 font-bold"},ha={key:0,src:ga,class:"size-4"},ba={class:"rounded-full bg-white px-1.5 py-0 text-xxs font-inter font-semibold uppercase text-black"},ya=F({__name:"UploadModelDialogHeader",setup(i){const{flags:e}=D(),n=V(()=>e.huggingfaceModelImportEnabled?"assetBrowser.uploadModelGeneric":"assetBrowser.uploadModelFromCivitai");return(s,t)=>(d(),g("div",va,[p(e).huggingfaceModelImportEnabled?_("",!0):(d(),g("img",ha)),r("span",null,u(s.$t(n.value)),1),r("span",ba,u(s.$t("g.beta")),1)]))}}),wa={},_a={class:"flex flex-1 flex-col items-center justify-center text-base text-muted-foreground"},$a={class:"m-0 max-w-md"};function ka(i,e){return d(),g("div",_a,[r("p",$a,u(i.$t("assetBrowser.upgradeFeatureDescription")),1)])}m(ka,"_sfc_render$1");const Ma=ae(wa,[["render",ka]]),Ua={class:"flex flex-wrap justify-end gap-2 w-full"},xa={href:"https://blog.comfy.org/p/comfy-cloud-new-features-and-pricing",target:"_blank",rel:"noopener noreferrer",class:"text-muted-foreground mr-auto underline flex items-center gap-2"},Sa=F({__name:"UploadModelUpgradeModalFooter",emits:["close","subscribe"],setup(i,{emit:e}){const n=e;return(s,t)=>(d(),g("div",Ua,[r("a",xa,[t[2]||(t[2]=r("i",{class:"icon-[lucide--external-link]"},null,-1)),r("span",null,u(s.$t("g.learnMore")),1)]),$(B,{variant:"textonly",onClick:t[0]||(t[0]=o=>n("close"))},{default:b(()=>[j(u(s.$t("g.close")),1)]),_:1}),$(B,{variant:"secondary",onClick:t[1]||(t[1]=o=>n("subscribe"))},{default:b(()=>[j(u(s.$t("subscription.required.subscribe")),1)]),_:1})]))}}),Ca={class:"flex flex-col justify-between gap-10 p-4 border-t border-border-default w-auto max-w-[min(500px,90vw)]"},Ia=F({__name:"UploadModelUpgradeModal",setup(i){const e=te(),{showSubscriptionDialog:n}=he();function s(){e.closeDialog({key:"upload-model-upgrade"})}m(s,"handleClose");function t(){n()}return m(t,"handleSubscribe"),(o,a)=>(d(),g("div",Ca,[$(Ma),$(Sa,{onClose:s,onSubscribe:t})]))}}),Ba={},Fa={class:"flex items-center gap-2 p-4 font-bold"};function Va(i,e){return d(),g("div",Fa,[r("span",null,u(i.$t("assetBrowser.upgradeToUnlockFeature")),1)])}m(Va,"_sfc_render");const La=ae(Ba,[["render",Va]]);function Na(i){const e=te(),{flags:n}=D(),s=V(()=>n.modelUploadButtonEnabled);function t(){n.privateModelsEnabled?e.showDialog({key:"upload-model",headerComponent:ya,component:fa,props:{onUploadSuccess:m(async()=>{await i?.()},"onUploadSuccess")},dialogComponentProps:{pt:{header:"py-0! pl-0!",content:"p-0! overflow-y-hidden!"}}}):e.showDialog({key:"upload-model-upgrade",headerComponent:La,component:Ia,dialogComponentProps:{pt:{header:"py-0! pl-0!",content:"p-0! overflow-y-hidden!"}}})}return m(t,"showUploadDialog"),{isUploadButtonEnabled:s,showUploadDialog:t}}m(Na,"useModelUpload");const ja=""+new URL("images/default-template.png",import.meta.url).href;function Aa(i,e,n={}){const{immediate:s=!0,...t}=n,o=typeof window<"u"&&"IntersectionObserver"in window,a=x(!1);let l=null;const c=m(()=>{l&&(l.disconnect(),l=null)},"cleanup"),y=m(()=>{c(),!(!o||!i.value)&&(l=new IntersectionObserver(h=>{a.value=h.some(v=>v.isIntersecting),e(h,l)},t),l.observe(i.value))},"observe"),k=m(()=>{l&&i.value&&l.unobserve(i.value)},"unobserve");return s&&G(i,y,{immediate:!0,flush:"post"}),Ce(c),{isSupported:o,isIntersecting:a,observe:y,unobserve:k,cleanup:c}}m(Aa,"useIntersectionObserver");class Ea{static{m(this,"MediaCacheService")}cache=re(new Map);maxSize;maxAge;cleanupInterval=null;urlRefCount=new Map;constructor(e={}){this.maxSize=e.maxSize??100,this.maxAge=e.maxAge??1800*1e3,this.startCleanupInterval()}startCleanupInterval(){this.cleanupInterval=window.setInterval(()=>{this.cleanup()},300*1e3)}cleanup(){const e=Date.now(),n=[];for(const[s,t]of Array.from(this.cache.entries()))e-t.lastAccessed>this.maxAge&&(t.objectUrl?(this.urlRefCount.get(t.objectUrl)||0)===0&&(URL.revokeObjectURL(t.objectUrl),this.urlRefCount.delete(t.objectUrl),n.push(s)):n.push(s));if(n.forEach(s=>this.cache.delete(s)),this.cache.size>this.maxSize){const s=Array.from(this.cache.entries());s.sort((a,l)=>a[1].lastAccessed-l[1].lastAccessed);let t=0;const o=this.cache.size-this.maxSize;for(const[a,l]of s){if(t>=o)break;l.objectUrl?(this.urlRefCount.get(l.objectUrl)||0)===0&&(URL.revokeObjectURL(l.objectUrl),this.urlRefCount.delete(l.objectUrl),this.cache.delete(a),t++):(this.cache.delete(a),t++)}}}async getCachedMedia(e){let n=this.cache.get(e);if(n)return n.lastAccessed=Date.now(),n;n={src:e,isLoading:!0,lastAccessed:Date.now()},this.cache.set(e,n);try{const s=await fetch(e,{cache:"force-cache"});if(!s.ok)throw new Error(`Failed to fetch: ${s.status}`);const t=await s.blob(),o=URL.createObjectURL(t),a={src:e,blob:t,objectUrl:o,isLoading:!1,lastAccessed:Date.now()};return this.cache.set(e,a),a}catch(s){console.warn("Failed to cache media:",e,s);const t={src:e,error:!0,isLoading:!1,lastAccessed:Date.now()};return this.cache.set(e,t),t}}acquireUrl(e){const n=this.cache.get(e);if(n?.objectUrl){const s=this.urlRefCount.get(n.objectUrl)||0;return this.urlRefCount.set(n.objectUrl,s+1),n.objectUrl}}releaseUrl(e){const n=this.cache.get(e);if(n?.objectUrl){const s=(this.urlRefCount.get(n.objectUrl)||1)-1;s<=0?(URL.revokeObjectURL(n.objectUrl),this.urlRefCount.delete(n.objectUrl),this.cache.delete(e)):this.urlRefCount.set(n.objectUrl,s)}}clearCache(){for(const e of Array.from(this.cache.values()))e.objectUrl&&URL.revokeObjectURL(e.objectUrl);this.cache.clear(),this.urlRefCount.clear()}destroy(){this.cleanupInterval&&(clearInterval(this.cleanupInterval),this.cleanupInterval=null),this.clearCache()}}let L=null;function Da(i){return L||(L=new Ea(i)),{getCachedMedia:m(o=>L.getCachedMedia(o),"getCachedMedia"),clearCache:m(()=>L.clearCache(),"clearCache"),acquireUrl:m(o=>L.acquireUrl(o),"acquireUrl"),releaseUrl:m(o=>L.releaseUrl(o),"releaseUrl"),cache:L.cache}}m(Da,"useMediaCache");typeof window<"u"&&window.addEventListener("beforeunload",()=>{L&&L.destroy()});const za=["src","alt"],Ra={key:2,class:"absolute inset-0 flex items-center justify-center"},Ta=["alt"],Ga=F({__name:"LazyImage",props:{src:{},alt:{default:""},containerClass:{type:[Array,Object,String,Number,null,Boolean],default:""},imageClass:{type:[Array,Object,String,Number,null,Boolean],default:""},imageStyle:{},rootMargin:{default:"300px"}},setup(i){const e=x(null),n=x(!1),s=x(!1),t=x(!1),o=x(void 0),{getCachedMedia:a,acquireUrl:l,releaseUrl:c}=Da();Aa(e,v=>{const M=v[0];n.value=M?.isIntersecting??!1},{rootMargin:i.rootMargin,threshold:.1});const y=V(()=>n.value);G(y,async v=>{if(v&&i.src&&!o.value&&!t.value)try{const M=await a(i.src);if(M.error)t.value=!0;else if(M.objectUrl){const A=l(i.src);o.value=A||M.objectUrl}else o.value=i.src}catch(M){console.warn("Failed to load cached media:",M),o.value=i.src}else v||(o.value?.startsWith("blob:")&&c(i.src),s.value=!1,o.value=void 0,t.value=!1)},{immediate:!0});const k=m(()=>{s.value=!0,t.value=!1},"onImageLoad"),h=m(()=>{t.value=!0,s.value=!1},"onImageError");return Ie(()=>{o.value?.startsWith("blob:")&&c(i.src)}),(v,M)=>(d(),g("div",{ref_key:"containerRef",ref:e,class:Z(["relative flex h-full w-full items-center justify-center overflow-hidden",v.containerClass])},[s.value?_("",!0):(d(),C(p(Ve),{key:0,width:"100%",height:"100%",class:"absolute inset-0"})),o.value?(d(),g("img",{key:1,src:o.value,alt:v.alt,draggable:"false",class:Z(v.imageClass),style:ee(v.imageStyle),onLoad:k,onError:h},null,46,za)):_("",!0),t.value?(d(),g("div",Ra,[r("img",{src:ja,alt:v.alt,draggable:"false",class:Z(v.imageClass),style:ee(v.imageStyle)},null,14,Ta)])):_("",!0)],2))}});export{ze as _,Na as a,ja as b,Ga as c,Aa as d,D as u};
|
|
2
|
+
//# sourceMappingURL=LazyImage.vue_vue_type_script_setup_true_lang-Op4fug5d.js.map
|