comfyui-frontend-package 1.37.9__py3-none-any.whl → 1.37.10__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-BudnQURa.js → AboutPanel-C5DQxPC9.js} +2 -2
- comfyui_frontend_package/static/assets/{AboutPanel-BudnQURa.js.map → AboutPanel-C5DQxPC9.js.map} +1 -1
- comfyui_frontend_package/static/assets/{AudioPreviewPlayer-CHjtFZRu.js → AudioPreviewPlayer-BNO9ZjOM.js} +2 -2
- comfyui_frontend_package/static/assets/{AudioPreviewPlayer-CHjtFZRu.js.map → AudioPreviewPlayer-BNO9ZjOM.js.map} +1 -1
- comfyui_frontend_package/static/assets/{ComfyQueueButton-QhN0FmOY.js → ComfyQueueButton-D0Y-jFOd.js} +2 -2
- comfyui_frontend_package/static/assets/{ComfyQueueButton-QhN0FmOY.js.map → ComfyQueueButton-D0Y-jFOd.js.map} +1 -1
- comfyui_frontend_package/static/assets/{ExtensionPanel-D2sITMri.js → ExtensionPanel-CbCxE4jg.js} +2 -2
- comfyui_frontend_package/static/assets/{ExtensionPanel-D2sITMri.js.map → ExtensionPanel-CbCxE4jg.js.map} +1 -1
- comfyui_frontend_package/static/assets/GraphView-CepV6iZo.css +1 -0
- comfyui_frontend_package/static/assets/GraphView-_ZGu5uNf.js +15 -0
- comfyui_frontend_package/static/assets/GraphView-_ZGu5uNf.js.map +1 -0
- comfyui_frontend_package/static/assets/{KeybindingPanel-Dm6H1RN2.js → KeybindingPanel-Ceb51ttS.js} +2 -2
- comfyui_frontend_package/static/assets/{KeybindingPanel-Dm6H1RN2.js.map → KeybindingPanel-Ceb51ttS.js.map} +1 -1
- comfyui_frontend_package/static/assets/{LazyImage.vue_vue_type_script_setup_true_lang-C58MdJKR.js → LazyImage.vue_vue_type_script_setup_true_lang-BHcWsrBj.js} +2 -2
- comfyui_frontend_package/static/assets/{LazyImage.vue_vue_type_script_setup_true_lang-C58MdJKR.js.map → LazyImage.vue_vue_type_script_setup_true_lang-BHcWsrBj.js.map} +1 -1
- comfyui_frontend_package/static/assets/{LegacyCreditsPanel-Be7L1Af3.js → LegacyCreditsPanel-K_GDtrt_.js} +2 -2
- comfyui_frontend_package/static/assets/{LegacyCreditsPanel-Be7L1Af3.js.map → LegacyCreditsPanel-K_GDtrt_.js.map} +1 -1
- comfyui_frontend_package/static/assets/{Load3D-BAJ3yM4D.js → Load3D-CbCbkSys.js} +2 -2
- comfyui_frontend_package/static/assets/Load3D-CbCbkSys.js.map +1 -0
- comfyui_frontend_package/static/assets/{Load3D.vue_vue_type_script_setup_true_lang-DMHpkO9N.js → Load3D.vue_vue_type_script_setup_true_lang-3QcwinlP.js} +2 -2
- comfyui_frontend_package/static/assets/{Load3D.vue_vue_type_script_setup_true_lang-DMHpkO9N.js.map → Load3D.vue_vue_type_script_setup_true_lang-3QcwinlP.js.map} +1 -1
- comfyui_frontend_package/static/assets/{Media3DTop-DdNgRlQW.js → Media3DTop--kp0iekJ.js} +2 -2
- comfyui_frontend_package/static/assets/{Media3DTop-DdNgRlQW.js.map → Media3DTop--kp0iekJ.js.map} +1 -1
- comfyui_frontend_package/static/assets/{ServerConfigPanel-LtRqEOzu.js → ServerConfigPanel-BGnrWtif.js} +2 -2
- comfyui_frontend_package/static/assets/{ServerConfigPanel-LtRqEOzu.js.map → ServerConfigPanel-BGnrWtif.js.map} +1 -1
- comfyui_frontend_package/static/assets/{SubscriptionRequiredDialogContent-CDaF1jns.js → SubscriptionRequiredDialogContent-BMLw-0ti.js} +2 -2
- comfyui_frontend_package/static/assets/{SubscriptionRequiredDialogContent-CDaF1jns.js.map → SubscriptionRequiredDialogContent-BMLw-0ti.js.map} +1 -1
- comfyui_frontend_package/static/assets/{UserPanel-_xK7KdbS.js → UserPanel-BfOBqtyE.js} +2 -2
- comfyui_frontend_package/static/assets/{UserPanel-_xK7KdbS.js.map → UserPanel-BfOBqtyE.js.map} +1 -1
- comfyui_frontend_package/static/assets/{UserSelectView-B_VOz5XU.js → UserSelectView-hAFmUbm0.js} +2 -2
- comfyui_frontend_package/static/assets/{UserSelectView-B_VOz5XU.js.map → UserSelectView-hAFmUbm0.js.map} +1 -1
- comfyui_frontend_package/static/assets/{ValueControlPopover-BPJIx3_y.js → ValueControlPopover-BEbJxP9Z.js} +2 -2
- comfyui_frontend_package/static/assets/{ValueControlPopover-BPJIx3_y.js.map → ValueControlPopover-BEbJxP9Z.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetAudioUI-5nP5sugf.js → WidgetAudioUI-BuXP7XBQ.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetAudioUI-5nP5sugf.js.map → WidgetAudioUI-BuXP7XBQ.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetButton-Cd9G_fIM.js → WidgetButton-vKBzo4q0.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetButton-Cd9G_fIM.js.map → WidgetButton-vKBzo4q0.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetColorPicker-x6uZPjSf.js → WidgetColorPicker-FoC3o0Lp.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetColorPicker-x6uZPjSf.js.map → WidgetColorPicker-FoC3o0Lp.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetGalleria-DHPc3hwg.js → WidgetGalleria-CV4Nv2wv.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetGalleria-DHPc3hwg.js.map → WidgetGalleria-CV4Nv2wv.js.map} +1 -1
- comfyui_frontend_package/static/assets/WidgetInputNumber-zsVb0Vit.js +2 -0
- comfyui_frontend_package/static/assets/WidgetInputNumber-zsVb0Vit.js.map +1 -0
- comfyui_frontend_package/static/assets/{WidgetInputNumber.vue_vue_type_script_setup_true_lang-vY96bQKz.js → WidgetInputNumber.vue_vue_type_script_setup_true_lang-D-IwEPPr.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetInputNumber.vue_vue_type_script_setup_true_lang-vY96bQKz.js.map → WidgetInputNumber.vue_vue_type_script_setup_true_lang-D-IwEPPr.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetInputText-BbfUME5C.js → WidgetInputText-Cv8Z1_b9.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetInputText-BbfUME5C.js.map → WidgetInputText-Cv8Z1_b9.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetLayoutField.vue_vue_type_script_setup_true_lang-7bIn_5fI.js → WidgetLayoutField.vue_vue_type_script_setup_true_lang-DFWVBJH-.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetLayoutField.vue_vue_type_script_setup_true_lang-7bIn_5fI.js.map → WidgetLayoutField.vue_vue_type_script_setup_true_lang-DFWVBJH-.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetLegacy-AkIJRd8v.js → WidgetLegacy-Dh4xE798.js} +2 -2
- comfyui_frontend_package/static/assets/WidgetLegacy-Dh4xE798.js.map +1 -0
- comfyui_frontend_package/static/assets/WidgetMarkdown-C4CnxNoM.js +2 -0
- comfyui_frontend_package/static/assets/{WidgetMarkdown-voa7Ohgp.js.map → WidgetMarkdown-C4CnxNoM.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetRecordAudio-DelweXYm.js → WidgetRecordAudio-BQ9yATXo.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetRecordAudio-DelweXYm.js.map → WidgetRecordAudio-BQ9yATXo.js.map} +1 -1
- comfyui_frontend_package/static/assets/WidgetSelect-B9DwAKiE.js +2 -0
- comfyui_frontend_package/static/assets/WidgetSelect-B9DwAKiE.js.map +1 -0
- comfyui_frontend_package/static/assets/{WidgetSelect.vue_vue_type_script_setup_true_lang-CT0J0vij.js → WidgetSelect.vue_vue_type_script_setup_true_lang-EU2Y4eXi.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetSelect.vue_vue_type_script_setup_true_lang-CT0J0vij.js.map → WidgetSelect.vue_vue_type_script_setup_true_lang-EU2Y4eXi.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetTextarea-SHMM72Cj.js → WidgetTextarea-C3Wo0ULT.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetTextarea-SHMM72Cj.js.map → WidgetTextarea-C3Wo0ULT.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetToggleSwitch-BmT1MQCn.js → WidgetToggleSwitch-BZUubsU5.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetToggleSwitch-BmT1MQCn.js.map → WidgetToggleSwitch-BZUubsU5.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetWithControl.vue_vue_type_script_setup_true_lang-CTEGWC4h.js → WidgetWithControl.vue_vue_type_script_setup_true_lang-B7cz0rwK.js} +3 -3
- comfyui_frontend_package/static/assets/{WidgetWithControl.vue_vue_type_script_setup_true_lang-CTEGWC4h.js.map → WidgetWithControl.vue_vue_type_script_setup_true_lang-B7cz0rwK.js.map} +1 -1
- comfyui_frontend_package/static/assets/{audioService-BcbrJBnn.js → audioService-CNb54hvw.js} +2 -2
- comfyui_frontend_package/static/assets/{audioService-BcbrJBnn.js.map → audioService-CNb54hvw.js.map} +1 -1
- comfyui_frontend_package/static/assets/{audioUtils-CJCA0wCG.js → audioUtils-ClyG3xvN.js} +2 -2
- comfyui_frontend_package/static/assets/{audioUtils-CJCA0wCG.js.map → audioUtils-ClyG3xvN.js.map} +1 -1
- comfyui_frontend_package/static/assets/commands-DHxq3nWN.js +2 -0
- comfyui_frontend_package/static/assets/commands-DHxq3nWN.js.map +1 -0
- comfyui_frontend_package/static/assets/{index-DvCHS_f2.js → index-B3VEOed6.js} +20 -20
- comfyui_frontend_package/static/assets/index-B3VEOed6.js.map +1 -0
- comfyui_frontend_package/static/assets/index-B5S_Le6r.js +5 -0
- comfyui_frontend_package/static/assets/index-B5S_Le6r.js.map +1 -0
- comfyui_frontend_package/static/assets/index-CPtP45Cb.css +1 -0
- comfyui_frontend_package/static/assets/{index-kQCr6fgp.js → index-CtDW77xi.js} +2 -2
- comfyui_frontend_package/static/assets/{index-kQCr6fgp.js.map → index-CtDW77xi.js.map} +1 -1
- comfyui_frontend_package/static/assets/{keybindingService-D3pQ4cJG.js → keybindingService-50G4NbCc.js} +2 -2
- comfyui_frontend_package/static/assets/{keybindingService-D3pQ4cJG.js.map → keybindingService-50G4NbCc.js.map} +1 -1
- comfyui_frontend_package/static/assets/{main-BFC5CmrY.js → main-B3vd7GL1.js} +3 -3
- comfyui_frontend_package/static/assets/main-B3vd7GL1.js.map +1 -0
- comfyui_frontend_package/static/assets/{main-M4YqFlAB.js → main-BKCc2TkD.js} +3 -3
- comfyui_frontend_package/static/assets/main-BKCc2TkD.js.map +1 -0
- comfyui_frontend_package/static/assets/{main-C0iYASPd.js → main-BNvzUx74.js} +3 -3
- comfyui_frontend_package/static/assets/main-BNvzUx74.js.map +1 -0
- comfyui_frontend_package/static/assets/main-BPu7av80.js +17 -0
- comfyui_frontend_package/static/assets/main-BPu7av80.js.map +1 -0
- comfyui_frontend_package/static/assets/{main-Dd3BY3MO.js → main-BQ4z0Xxc.js} +2 -2
- comfyui_frontend_package/static/assets/main-BQ4z0Xxc.js.map +1 -0
- comfyui_frontend_package/static/assets/{main-BI-3llij.js → main-BoyaoV4J.js} +2 -2
- comfyui_frontend_package/static/assets/main-BoyaoV4J.js.map +1 -0
- comfyui_frontend_package/static/assets/{main-DB30B6rY.js → main-CJ1ZmTbz.js} +3 -3
- comfyui_frontend_package/static/assets/main-CJ1ZmTbz.js.map +1 -0
- comfyui_frontend_package/static/assets/{main-D8hMMX5u.js → main-DxByB8u3.js} +2 -2
- comfyui_frontend_package/static/assets/main-DxByB8u3.js.map +1 -0
- comfyui_frontend_package/static/assets/{main-BdVq5c-Q.js → main-Dyk43SJi.js} +2 -2
- comfyui_frontend_package/static/assets/main-Dyk43SJi.js.map +1 -0
- comfyui_frontend_package/static/assets/{main-Cte3FX_T.js → main-QMLeyFJQ.js} +3 -3
- comfyui_frontend_package/static/assets/main-QMLeyFJQ.js.map +1 -0
- comfyui_frontend_package/static/assets/{main-BPVbVwRz.js → main-f7MqrMkx.js} +3 -3
- comfyui_frontend_package/static/assets/main-f7MqrMkx.js.map +1 -0
- comfyui_frontend_package/static/assets/nodeDefs-CqPqVYqF.js +54 -0
- comfyui_frontend_package/static/assets/nodeDefs-CqPqVYqF.js.map +1 -0
- comfyui_frontend_package/static/assets/settings-BDcsAddA.js +6 -0
- comfyui_frontend_package/static/assets/settings-BDcsAddA.js.map +1 -0
- comfyui_frontend_package/static/assets/settings-BscQZApb.js +6 -0
- comfyui_frontend_package/static/assets/settings-BscQZApb.js.map +1 -0
- comfyui_frontend_package/static/assets/settings-BxGvSZQt.js +6 -0
- comfyui_frontend_package/static/assets/settings-BxGvSZQt.js.map +1 -0
- comfyui_frontend_package/static/assets/settings-CRbIyGOx.js +6 -0
- comfyui_frontend_package/static/assets/settings-CRbIyGOx.js.map +1 -0
- comfyui_frontend_package/static/assets/settings-C_M95LcR.js +6 -0
- comfyui_frontend_package/static/assets/settings-C_M95LcR.js.map +1 -0
- comfyui_frontend_package/static/assets/{settings-C83z84hb.js → settings-CfAtcjYG.js} +3 -3
- comfyui_frontend_package/static/assets/settings-CfAtcjYG.js.map +1 -0
- comfyui_frontend_package/static/assets/settings-D1FGfDLO.js +6 -0
- comfyui_frontend_package/static/assets/settings-D1FGfDLO.js.map +1 -0
- comfyui_frontend_package/static/assets/settings-DIhoSYUg.js +6 -0
- comfyui_frontend_package/static/assets/settings-DIhoSYUg.js.map +1 -0
- comfyui_frontend_package/static/assets/settings-DR935Ify.js +6 -0
- comfyui_frontend_package/static/assets/settings-DR935Ify.js.map +1 -0
- comfyui_frontend_package/static/assets/settings-DwzAhg99.js +6 -0
- comfyui_frontend_package/static/assets/settings-DwzAhg99.js.map +1 -0
- comfyui_frontend_package/static/assets/settings-ydiuzS6H.js +6 -0
- comfyui_frontend_package/static/assets/settings-ydiuzS6H.js.map +1 -0
- comfyui_frontend_package/static/index.html +1 -1
- {comfyui_frontend_package-1.37.9.dist-info → comfyui_frontend_package-1.37.10.dist-info}/METADATA +1 -1
- {comfyui_frontend_package-1.37.9.dist-info → comfyui_frontend_package-1.37.10.dist-info}/RECORD +131 -123
- comfyui_frontend_package/static/assets/GraphView-BZLpyVMl.css +0 -1
- comfyui_frontend_package/static/assets/GraphView-C35zkdNN.js +0 -15
- comfyui_frontend_package/static/assets/GraphView-C35zkdNN.js.map +0 -1
- comfyui_frontend_package/static/assets/Load3D-BAJ3yM4D.js.map +0 -1
- comfyui_frontend_package/static/assets/WidgetInputNumber-Cnhf4Ann.js +0 -2
- comfyui_frontend_package/static/assets/WidgetInputNumber-Cnhf4Ann.js.map +0 -1
- comfyui_frontend_package/static/assets/WidgetLegacy-AkIJRd8v.js.map +0 -1
- comfyui_frontend_package/static/assets/WidgetMarkdown-voa7Ohgp.js +0 -2
- comfyui_frontend_package/static/assets/WidgetSelect-XG4R8CnZ.js +0 -2
- comfyui_frontend_package/static/assets/WidgetSelect-XG4R8CnZ.js.map +0 -1
- comfyui_frontend_package/static/assets/index-BB_8e12C.css +0 -1
- comfyui_frontend_package/static/assets/index-Cm0D-ExL.js +0 -5
- comfyui_frontend_package/static/assets/index-Cm0D-ExL.js.map +0 -1
- comfyui_frontend_package/static/assets/index-DvCHS_f2.js.map +0 -1
- comfyui_frontend_package/static/assets/main-BFC5CmrY.js.map +0 -1
- comfyui_frontend_package/static/assets/main-BI-3llij.js.map +0 -1
- comfyui_frontend_package/static/assets/main-BPVbVwRz.js.map +0 -1
- comfyui_frontend_package/static/assets/main-BdVq5c-Q.js.map +0 -1
- comfyui_frontend_package/static/assets/main-C0iYASPd.js.map +0 -1
- comfyui_frontend_package/static/assets/main-Cte3FX_T.js.map +0 -1
- comfyui_frontend_package/static/assets/main-D8hMMX5u.js.map +0 -1
- comfyui_frontend_package/static/assets/main-DB30B6rY.js.map +0 -1
- comfyui_frontend_package/static/assets/main-Dd3BY3MO.js.map +0 -1
- comfyui_frontend_package/static/assets/main-M4YqFlAB.js.map +0 -1
- comfyui_frontend_package/static/assets/settings-2GCqRrJG.js +0 -6
- comfyui_frontend_package/static/assets/settings-2GCqRrJG.js.map +0 -1
- comfyui_frontend_package/static/assets/settings-BwT6YspU.js +0 -6
- comfyui_frontend_package/static/assets/settings-BwT6YspU.js.map +0 -1
- comfyui_frontend_package/static/assets/settings-C83z84hb.js.map +0 -1
- comfyui_frontend_package/static/assets/settings-CpGAolL8.js +0 -6
- comfyui_frontend_package/static/assets/settings-CpGAolL8.js.map +0 -1
- comfyui_frontend_package/static/assets/settings-DHYEklkf.js +0 -6
- comfyui_frontend_package/static/assets/settings-DHYEklkf.js.map +0 -1
- comfyui_frontend_package/static/assets/settings-DLFPCNJr.js +0 -6
- comfyui_frontend_package/static/assets/settings-DLFPCNJr.js.map +0 -1
- comfyui_frontend_package/static/assets/settings-JVJwzdtf.js +0 -6
- comfyui_frontend_package/static/assets/settings-JVJwzdtf.js.map +0 -1
- comfyui_frontend_package/static/assets/settings-Tg5NBf0t.js +0 -6
- comfyui_frontend_package/static/assets/settings-Tg5NBf0t.js.map +0 -1
- comfyui_frontend_package/static/assets/settings-_tes1LYa.js +0 -6
- comfyui_frontend_package/static/assets/settings-_tes1LYa.js.map +0 -1
- comfyui_frontend_package/static/assets/settings-cav_bQJj.js +0 -6
- comfyui_frontend_package/static/assets/settings-cav_bQJj.js.map +0 -1
- {comfyui_frontend_package-1.37.9.dist-info → comfyui_frontend_package-1.37.10.dist-info}/WHEEL +0 -0
- {comfyui_frontend_package-1.37.9.dist-info → comfyui_frontend_package-1.37.10.dist-info}/top_level.txt +0 -0
comfyui_frontend_package/static/assets/{KeybindingPanel-Dm6H1RN2.js → KeybindingPanel-Ceb51ttS.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-Bp7MMXLP.js";import{u as ne}from"./vendor-vue-DaLZjKA7.js";import{bu 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-Bp7MMXLP.js";import{u as ne}from"./vendor-vue-DaLZjKA7.js";import{bu 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-B3VEOed6.js";import{u as ye}from"./keybindingService-50G4NbCc.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"},ge=["title"],ve={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),g=b(!1),o=b(null),y=b(null),A=b(null),v=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,g.value=!0}t(B,"editKeybinding"),G(()=>{g.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(){g.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,ge)]),_: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",ve,"-"))]),_: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:g.value,"onUpdate:visible":a[3]||(a[3]=i=>g.value=i),class:"min-w-96",modal:"",header:y.value?.label,onHide:I},{footer:n(()=>[l(p,{variant:v.value?"destructive":"primary",autofocus:"",onClick:x},{default:n(()=>[r("i",{class:X(v.value?"pi pi-pencil":"pi pi-check")},null,2),h(" "+f(v.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"]),v.value?(u(),$(s(ie),{key:0,severity:"warn"},{default:n(()=>[h(f(e.$t("g.keybindingAlreadyExists"))+" ",1),l(s(z),{severity:"secondary",value:v.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-Ceb51ttS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeybindingPanel-Dm6H1RN2.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-Ceb51ttS.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 ce=Object.defineProperty;var m=(i,e)=>ce(i,"name",{value:e,configurable:!0});import{cG as E,a as I,c as se,_ as F,k as pe,cu as me,l as fe,h as q,s as ge,u as ee,d as te,m as ve}from"./index-DvCHS_f2.js";import{b as le,E as V,a as he,bx as B,cM as O,cN as N,j as S,d,by as p,m as be,k as y,e as l,G as Z,c as g,q as _,u,p as ye,d3 as we,cw as _e,z as $,w as G,d2 as $e,eE as ke,r as x,A as D,f as re,o as Me,bg as Ue,dc as xe,cd as Se,s as X}from"./vendor-other-B8t_Wf2K.js";import{i as Ce,y as Ie,e as ne,a as Be}from"./vendor-primevue-Bp7MMXLP.js";import{u as ie}from"./vendor-vue-DaLZjKA7.js";function A(){const i=le({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:he(i),featureFlag:e}}m(A,"useFeatureFlags");const Fe={class:"flex items-center gap-2 text-sm"},Ve={key:0,class:"text-base-foreground"},Le={key:1,class:"text-base-foreground"},je={class:"truncate"},Ee={key:0,class:"icon-[lucide--check] text-base-foreground"},De=B({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}=ie(),s=m(o=>{if(o==null||!i.options)return i.label??"";const a=i.options.find(r=>r.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(),S(p(Ce),be({modelValue:e.value,"onUpdate:modelValue":a[0]||(a[0]=r=>e.value=r)},o.$attrs,{options:o.options,"option-label":"name","option-value":"value",unstyled:"",pt:{root:m(({props:r})=>({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":r.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(se)("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:r})=>({class:p(se)("flex items-center justify-between gap-3 px-2 py-3 rounded","hover:bg-secondary-background-hover",r.focused&&"bg-secondary-background-hover",r.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:y(r=>[l("div",Fe,[ye(o.$slots,"icon"),r.value!==null&&r.value!==void 0?(d(),g("span",Ve,u(s(r.value)),1)):(d(),g("span",Le,u(o.label),1))])]),dropdownicon:y(()=>a[1]||(a[1]=[l("i",{class:"icon-[lucide--chevron-down] text-muted-foreground"},null,-1)])),option:y(({option:r,selected:c})=>[l("div",{class:"flex w-full items-center justify-between gap-3",style:Z(t.value)},[l("span",je,u(r.name),1),c?(d(),g("i",Ee)):_("",!0)],4)]),_:3},16,["modelValue","options","pt","aria-label"]))}});function Ae(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(Ae,"formatDisplayName");const ze=["nlf"],de=we(()=>{const{state:i,isLoading:e,error:n,execute:s}=_e(async()=>(await I.getModelFolders()).filter(o=>!ze.includes(o.name)).map(o=>({name:Ae(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}}),Re={class:"flex flex-col gap-4 text-sm text-muted-foreground"},Te={class:"flex flex-col gap-2"},He={class:"m-0"},Pe={class:"flex items-center gap-3 rounded-lg bg-secondary-background p-3"},qe=["src","alt"],We={class:"m-0 min-w-0 flex-1 truncate text-base-foreground"},Oe={class:"flex flex-col gap-2"},Ne={class:""},Ge={class:"flex items-center gap-2"},Ke=B({__name:"UploadModelConfirmation",props:O({metadata:{},previewImage:{}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const e=N(i,"modelValue"),{modelTypes:n,isLoading:s}=de();return(t,o)=>(d(),g("div",Re,[l("div",Te,[l("p",He,u(t.$t("assetBrowser.modelAssociatedWithLink")),1),l("div",Pe,[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,qe)):_("",!0),l("p",We,u(t.metadata?.filename||t.metadata?.name),1)])]),l("div",Oe,[l("label",Ne,u(t.$t("assetBrowser.modelTypeSelectorLabel")),1),$(De,{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"]),l("div",Ge,[o[1]||(o[1]=l("i",{class:"icon-[lucide--circle-question-mark]"},null,-1)),l("span",null,u(t.$t("assetBrowser.notSureLeaveAsIs")),1)])])]))}}),Ye={class:"relative"},Je=["aria-label","src"],oe=B({__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=$e(document,"keydown",n,{capture:!0});ke(t)}},{immediate:!0}),(s,t)=>(d(),S(p(Ie),{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:y(()=>[l("div",Ye,[$(F,{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:y(()=>t[2]||(t[2]=[l("i",{class:"pi pi-times text-sm"},null,-1)])),_:1},8,["aria-label"]),l("video",{autoplay:"",muted:"",loop:"","aria-label":s.ariaLabel,class:"w-full rounded-lg",src:s.videoUrl},u(s.$t("g.videoFailedToLoad")),9,Je)])]),_:1},8,["visible"]))}}),Qe={class:"flex justify-end gap-2 w-full"},Xe={key:0,class:"mr-auto flex items-center gap-2"},Ze={key:4},et={key:0,class:"icon-[lucide--loader-circle] animate-spin"},tt={key:0,class:"icon-[lucide--loader-circle] animate-spin"},at=B({__name:"UploadModelFooter",props:{currentStep:{},isFetchingMetadata:{type:Boolean},isUploading:{type:Boolean},canFetchMetadata:{type:Boolean},canUploadModel:{type:Boolean},uploadStatus:{}},emits:["back","fetchMetadata","upload","close"],setup(i,{emit:e}){const{flags:n}=A(),s=x(!1),t=x(!1),o=e;return(a,r)=>(d(),g("div",Qe,[a.currentStep===1&&p(n).huggingfaceModelImportEnabled?(d(),g("div",Xe,[r[10]||(r[10]=l("i",{class:"icon-[lucide--circle-question-mark] text-muted-foreground"},null,-1)),$(F,{variant:"muted-textonly",size:"sm","data-attr":"upload-model-step1-help-civitai",onClick:r[0]||(r[0]=c=>s.value=!0)},{default:y(()=>[D(u(a.$t("assetBrowser.providerCivitai")),1)]),_:1}),$(F,{variant:"muted-textonly",size:"sm","data-attr":"upload-model-step1-help-huggingface",onClick:r[1]||(r[1]=c=>t.value=!0)},{default:y(()=>[D(u(a.$t("assetBrowser.providerHuggingFace")),1)]),_:1})])):a.currentStep===1?(d(),S(F,{key:1,variant:"muted-textonly",size:"lg",class:"mr-auto underline","data-attr":"upload-model-step1-help-link",onClick:r[2]||(r[2]=c=>s.value=!0)},{default:y(()=>[r[11]||(r[11]=l("i",{class:"icon-[lucide--circle-question-mark]"},null,-1)),l("span",null,u(a.$t("assetBrowser.uploadModelHowDoIFindThis")),1)]),_:1})):_("",!0),a.currentStep===1?(d(),S(F,{key:2,variant:"muted-textonly",size:"lg","data-attr":"upload-model-step1-cancel-button",disabled:a.isFetchingMetadata||a.isUploading,onClick:r[3]||(r[3]=c=>o("close"))},{default:y(()=>[D(u(a.$t("g.cancel")),1)]),_:1},8,["disabled"])):_("",!0),a.currentStep!==1&&a.currentStep!==3?(d(),S(F,{key:3,variant:"muted-textonly",size:"lg","data-attr":`upload-model-step${a.currentStep}-back-button`,disabled:a.isFetchingMetadata||a.isUploading,onClick:r[4]||(r[4]=c=>o("back"))},{default:y(()=>[D(u(a.$t("g.back")),1)]),_:1},8,["data-attr","disabled"])):(d(),g("span",Ze)),a.currentStep===1?(d(),S(F,{key:5,variant:"secondary",size:"lg","data-attr":"upload-model-step1-continue-button",disabled:!a.canFetchMetadata||a.isFetchingMetadata,onClick:r[5]||(r[5]=c=>o("fetchMetadata"))},{default:y(()=>[a.isFetchingMetadata?(d(),g("i",et)):_("",!0),l("span",null,u(a.$t("g.continue")),1)]),_:1},8,["disabled"])):a.currentStep===2?(d(),S(F,{key:6,variant:"secondary",size:"lg","data-attr":"upload-model-step2-confirm-button",disabled:!a.canUploadModel||a.isUploading,onClick:r[6]||(r[6]=c=>o("upload"))},{default:y(()=>[a.isUploading?(d(),g("i",tt)):_("",!0),l("span",null,u(a.$t("assetBrowser.upload")),1)]),_:1},8,["disabled"])):a.currentStep===3&&(a.uploadStatus==="success"||a.uploadStatus==="processing")?(d(),S(F,{key:7,variant:"secondary","data-attr":"upload-model-step3-finish-button",onClick:r[7]||(r[7]=c=>o("close"))},{default:y(()=>[D(u(a.uploadStatus==="processing"?a.$t("g.close"):a.$t("assetBrowser.finish")),1)]),_:1})):_("",!0),$(oe,{modelValue:s.value,"onUpdate:modelValue":r[8]||(r[8]=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"]),$(oe,{modelValue:t.value,"onUpdate:modelValue":r[9]||(r[9]=c=>t.value=c),"video-url":"https://media.comfy.org/byom/huggingfacehowto.mp4","aria-label":a.$t("assetBrowser.uploadModelHelpVideo")},null,8,["modelValue","aria-label"])]))}}),st={class:"flex flex-1 flex-col gap-6 text-sm text-muted-foreground"},ot={key:0,class:"flex flex-col gap-2"},lt={class:"m-0 font-bold"},rt={class:"m-0"},nt={class:"flex flex-row items-center gap-3 rounded-lg bg-modal-card-background p-4"},it=["src","alt"],dt={class:"flex min-w-0 flex-1 flex-col items-start justify-center gap-1"},ut={class:"m-0 w-full truncate text-base-foreground"},ct={class:"m-0 text-sm text-muted"},pt={key:1,class:"flex flex-col gap-2"},mt={class:"m-0 font-bold"},ft={class:"m-0"},gt={class:"flex flex-row items-center gap-3 rounded-lg bg-modal-card-background p-4"},vt=["src","alt"],ht={class:"flex min-w-0 flex-1 flex-col items-start justify-center gap-1"},bt={class:"m-0 w-full truncate text-base-foreground"},yt={class:"m-0 text-sm text-muted"},wt={key:2,class:"flex flex-1 flex-col items-center justify-center gap-6"},_t={class:"text-center"},$t={class:"m-0 text-sm font-bold"},kt={key:0,class:"text-sm text-muted mb-0"},Mt=B({__name:"UploadModelProgress",props:{result:{},error:{},metadata:{},modelType:{},previewImage:{}},setup(i){return(e,n)=>(d(),g("div",st,[e.result==="processing"?(d(),g("div",ot,[l("p",lt,u(e.$t("assetBrowser.processingModel")),1),l("p",rt,u(e.$t("assetBrowser.processingModelDescription")),1),l("div",nt,[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,it)):_("",!0),l("div",dt,[l("p",ut,u(e.metadata?.filename||e.metadata?.name),1),l("p",ct,u(e.modelType),1)])])])):e.result==="success"?(d(),g("div",pt,[l("p",mt,u(e.$t("assetBrowser.modelUploaded")),1),l("p",ft,u(e.$t("assetBrowser.findInLibrary",{type:e.modelType})),1),l("div",gt,[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,vt)):_("",!0),l("div",ht,[l("p",bt,u(e.metadata?.filename||e.metadata?.name),1),l("p",yt,u(e.modelType),1)])])])):e.result==="error"?(d(),g("div",wt,[n[0]||(n[0]=l("i",{class:"icon-[lucide--x-circle] text-6xl text-error"},null,-1)),l("div",_t,[l("p",$t,u(e.$t("assetBrowser.uploadFailed")),1),e.error?(d(),g("p",kt,u(e.error),1)):_("",!0)])])):_("",!0)]))}}),W={type:"civitai",name:"Civitai",hostnames:["civitai.com"]},ue={type:"huggingface",name:"Hugging Face",hostnames:["huggingface.co"]};function ae(i,e){try{const n=new URL(i).hostname.toLowerCase();return e.hostnames.some(s=>n===s||n.endsWith(`.${s}`))}catch{return!1}}m(ae,"validateSourceUrl");const Ut={class:"flex flex-col justify-between h-full gap-6 text-sm"},xt={class:"flex flex-col gap-6"},St={class:"flex flex-col gap-2"},Ct={class:"m-0 text-foreground"},It={class:"m-0"},Bt={class:"m-0 text-muted-foreground"},Ft={class:"inline-flex items-center gap-1 flex-wrap mt-2"},Vt={class:"inline-flex items-center gap-1"},Lt=["alt"],jt={class:"inline-flex items-center gap-1"},Et=["alt"],Dt={class:"flex flex-col gap-2"},At={class:"relative"},zt={key:0,class:"icon-[lucide--circle-check-big] absolute top-1/2 right-3 size-5 -translate-y-1/2 text-green-500"},Rt={key:0,class:"text-xs text-error"},Tt={key:1,class:"text-foreground"},Ht={class:"font-bold italic"},Pt={class:"text-sm text-muted"},qt="/assets/images/civitai.svg",Wt="https://civitai.com/models",Ot="/assets/images/hf-logo.svg",Nt="https://huggingface.co",Gt=B({__name:"UploadModelUrlInput",props:{modelValue:{},error:{}},emits:["update:modelValue"],setup(i,{emit:e}){const{flags:n}=A(),s=i,t=e,o=V({get:m(()=>s.modelValue,"get"),set:m(c=>t("update:modelValue",c),"set")}),a=[W,ue],r=V(()=>{const c=o.value.trim();return c?a.some(w=>ae(c,w)):!1});return(c,w)=>{const k=re("i18n-t");return d(),g("div",Ut,[l("div",xt,[l("div",St,[l("p",Ct,u(c.$t("assetBrowser.uploadModelDescription1Generic")),1),l("div",It,[l("p",Bt,u(c.$t("assetBrowser.uploadModelDescription2Generic")),1),l("span",Ft,[l("span",Vt,[l("img",{src:qt,alt:c.$t("assetBrowser.providerCivitai"),class:"w-4 h-4"},null,8,Lt),l("a",{href:Wt,target:"_blank",rel:"noopener noreferrer",class:"text-muted underline"},u(c.$t("assetBrowser.providerCivitai")),1),w[1]||(w[1]=l("span",null,",",-1))]),l("span",jt,[l("img",{src:Ot,alt:c.$t("assetBrowser.providerHuggingFace"),class:"w-4 h-4"},null,8,Et),l("a",{href:Nt,target:"_blank",rel:"noopener noreferrer",class:"text-muted underline"},u(c.$t("assetBrowser.providerHuggingFace")),1)])])])]),l("div",Dt,[l("div",At,[$(p(ne),{modelValue:o.value,"onUpdate:modelValue":w[0]||(w[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"]),r.value?(d(),g("i",zt)):_("",!0)]),c.error?(d(),g("p",Rt,u(c.error),1)):p(n).asyncModelUploadEnabled?_("",!0):(d(),g("p",Tt,[$(k,{keypath:"assetBrowser.maxFileSize",tag:"span"},{size:y(()=>[l("span",Ht,u(c.$t("assetBrowser.maxFileSizeValue")),1)]),_:1})]))])]),l("div",Pt,u(c.$t("assetBrowser.uploadModelHelpFooterText")),1)])}}}),Kt={class:"flex flex-col gap-6 text-sm text-muted-foreground"},Yt={class:"flex flex-col gap-2"},Jt={class:"m-0"},Qt={class:"list-disc space-y-1 pl-5 mt-0"},Xt={href:"https://civitai.com/models",target:"_blank",class:"text-muted-foreground"},Zt={key:0},ea={class:"font-bold italic"},ta={class:"flex flex-col gap-2"},aa={class:"font-bold italic"},sa={class:"relative"},oa={key:0,class:"icon-[lucide--circle-check-big] absolute top-1/2 right-3 size-5 -translate-y-1/2 text-green-500"},la={key:0,class:"text-xs text-error"},ra={href:"https://civitai.com/models/10706/luisap-z-image-and-qwen-pixel-art-refiner?modelVersionId=2225295",target:"_blank",class:"text-muted-foreground"},na=B({__name:"UploadModelUrlInputCivitai",props:O({error:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const{flags:e}=A(),n=N(i,"modelValue"),s=V(()=>{const t=n.value.trim();return t?ae(t,W):!1});return(t,o)=>{const a=re("i18n-t");return d(),g("div",Kt,[l("div",Yt,[l("p",Jt,u(t.$t("assetBrowser.uploadModelDescription1")),1),l("ul",Qt,[l("li",null,[$(a,{keypath:"assetBrowser.uploadModelDescription2",tag:"span"},{link:y(()=>[l("a",Xt,u(t.$t("assetBrowser.uploadModelDescription2Link")),1)]),_:1})]),p(e).asyncModelUploadEnabled?_("",!0):(d(),g("li",Zt,[$(a,{keypath:"assetBrowser.uploadModelDescription3",tag:"span"},{size:y(()=>[l("span",ea,u(t.$t("assetBrowser.maxFileSizeValue")),1)]),_:1})]))])]),l("div",ta,[$(a,{keypath:"assetBrowser.civitaiLinkLabel",tag:"label",class:"mb-0"},{download:y(()=>[l("span",aa,u(t.$t("assetBrowser.civitaiLinkLabelDownload")),1)]),_:1}),l("div",sa,[$(p(ne),{modelValue:n.value,"onUpdate:modelValue":o[0]||(o[0]=r=>n.value=r),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",oa)):_("",!0)]),t.error?(d(),g("p",la,u(t.error),1)):(d(),S(a,{key:1,keypath:"assetBrowser.civitaiLinkExample",tag:"p",class:"text-xs"},{example:y(()=>[l("strong",null,u(t.$t("assetBrowser.civitaiLinkExampleStrong")),1)]),link:y(()=>[l("a",ra,u(t.$t("assetBrowser.civitaiLinkExampleUrl")),1)]),_:1}))])])}}});function ia(i){const{t:e}=ie(),n=pe(),s=me(),t=fe(),{flags:o}=A(),a=x(1),r=x(!1),c=x(!1),w=x(),k=x(""),h=x({url:"",name:"",tags:[]}),v=x(),M=o.huggingfaceModelImportEnabled?[W,ue]:[W],j=V(()=>{const U=h.value.url.trim();return U?M.find(b=>ae(U,b))??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,!j.value){const f=M.map(C=>C.name).join(", ");k.value=e("assetBrowser.unsupportedUrlSource",{sources:f});return}r.value=!0;try{const f=await q.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 C=f.tags.find(z=>i.value.some(R=>R.value===z));C&&(v.value=C)}a.value=2}catch(f){console.error("Failed to retrieve metadata:",f),k.value=f instanceof Error?f.message:ge("assetBrowser.uploadModelFailedToRetrieveMetadata","Failed to retrieve metadata. Please check the link and try again."),a.value=1}finally{r.value=!1}}m(K,"fetchMetadata");async function Y(U){if(h.value.previewImage)try{const b=U.split(".")[0];let f="png";const C=h.value.previewImage.match(/^data:image\/([^;]+);/);return C&&(f=C[1]==="jpeg"?"jpg":C[1]),(await q.uploadAssetFromBase64({data:h.value.previewImage,name:`${b}_preview.${f}`,tags:["preview"]})).id}catch(b){console.error("Failed to upload preview image:",b);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,C)=>{f.status==="rejected"&&console.error(`Failed to refresh ${U[C].nodeDef.name}:`,f.reason)})}m(P,"refreshModelCaches");async function J(){if(!H.value)return!1;const U=j.value;if(!U)return k.value=e("assetBrowser.noValidSourceDetected"),!1;c.value=!0;try{const b=v.value?["models",v.value]:["models"],f=h.value.metadata?.filename||h.value.metadata?.name||"model",C=await Y(f),z={source:U.type,source_url:h.value.url,model_type:v.value};if(o.asyncModelUploadEnabled){const R=await q.uploadAssetAsync({source_url:h.value.url,tags:b,user_metadata:z,preview_id:C});R.type==="async"&&R.task.status!=="completed"?(v.value&&s.trackDownload(R.task.task_id,v.value),w.value="processing"):(w.value="success",await P()),a.value=3}else await q.uploadAssetFromUrl({url:h.value.url,name:f,tags:b,user_metadata:z,preview_id:C}),w.value="success",await P(),a.value=3}catch(b){console.error("Failed to upload asset:",b),w.value="error",k.value=b instanceof Error?b.message:"Failed to upload model",a.value=3}finally{c.value=!1}return w.value!=="error"}m(J,"uploadModel");function Q(){a.value>1&&(a.value=a.value-1)}return m(Q,"goToPreviousStep"),{currentStep:a,isFetchingMetadata:r,isUploading:c,uploadStatus:w,uploadError:k,wizardData:h,selectedModelType:v,canFetchMetadata:T,canUploadModel:H,detectedSource:j,fetchMetadata:K,uploadModel:J,goToPreviousStep:Q}}m(ia,"useUploadModelWizard");const da={class:"upload-model-dialog flex flex-col gap-6 border-t border-border-default p-4 pt-6"},ua={class:"min-h-0 flex-auto basis-0 overflow-y-auto"},ca=B({__name:"UploadModelDialog",emits:["upload-success"],setup(i,{emit:e}){const{flags:n}=A(),s=ee(),{modelTypes:t,fetchModelTypes:o}=de(),a=e,{currentStep:r,isFetchingMetadata:c,isUploading:w,uploadStatus:k,uploadError:h,wizardData:v,selectedModelType:M,canFetchMetadata:j,canUploadModel:T,fetchMetadata:H,uploadModel:K,goToPreviousStep:Y}=ia(t);async function P(){await H()}m(P,"handleFetchMetadata");async function J(){await K()&&a("upload-success")}m(J,"handleUploadModel");function Q(){s.closeDialog({key:"upload-model"})}return m(Q,"handleClose"),Me(()=>{o()}),(U,b)=>(d(),g("div",da,[l("div",ua,[p(r)===1&&p(n).huggingfaceModelImportEnabled?(d(),S(Gt,{key:0,modelValue:p(v).url,"onUpdate:modelValue":b[0]||(b[0]=f=>p(v).url=f),error:p(h)},null,8,["modelValue","error"])):p(r)===1?(d(),S(na,{key:1,modelValue:p(v).url,"onUpdate:modelValue":b[1]||(b[1]=f=>p(v).url=f),error:p(h)},null,8,["modelValue","error"])):p(r)===2?(d(),S(Ke,{key:2,modelValue:p(M),"onUpdate:modelValue":b[2]||(b[2]=f=>Ue(M)?M.value=f:null),metadata:p(v).metadata,"preview-image":p(v).previewImage},null,8,["modelValue","metadata","preview-image"])):p(r)===3&&p(k)!=null?(d(),S(Mt,{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)]),$(at,{class:"flex-shrink-0","current-step":p(r),"is-fetching-metadata":p(c),"is-uploading":p(w),"can-fetch-metadata":p(j),"can-upload-model":p(T),"upload-status":p(k),onBack:p(Y),onFetchMetadata:P,onUpload:J,onClose:Q},null,8,["current-step","is-fetching-metadata","is-uploading","can-fetch-metadata","can-upload-model","upload-status","onBack"])]))}}),pa=te(ca,[["__scopeId","data-v-0825b930"]]),ma=""+new URL("images/civitai.svg",import.meta.url).href,fa={class:"flex items-center gap-2 p-4 font-bold"},ga={key:0,src:ma,class:"size-4"},va={class:"rounded-full bg-white px-1.5 py-0 text-xxs font-inter font-semibold uppercase text-black"},ha=B({__name:"UploadModelDialogHeader",setup(i){const{flags:e}=A(),n=V(()=>e.huggingfaceModelImportEnabled?"assetBrowser.uploadModelGeneric":"assetBrowser.uploadModelFromCivitai");return(s,t)=>(d(),g("div",fa,[p(e).huggingfaceModelImportEnabled?_("",!0):(d(),g("img",ga)),l("span",null,u(s.$t(n.value)),1),l("span",va,u(s.$t("g.beta")),1)]))}}),ba={},ya={class:"flex flex-1 flex-col items-center justify-center text-base text-muted-foreground"},wa={class:"m-0 max-w-md"};function _a(i,e){return d(),g("div",ya,[l("p",wa,u(i.$t("assetBrowser.upgradeFeatureDescription")),1)])}m(_a,"_sfc_render$1");const $a=te(ba,[["render",_a]]),ka={class:"flex flex-wrap justify-end gap-2 w-full"},Ma={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"},Ua=B({__name:"UploadModelUpgradeModalFooter",emits:["close","subscribe"],setup(i,{emit:e}){const n=e;return(s,t)=>(d(),g("div",ka,[l("a",Ma,[t[2]||(t[2]=l("i",{class:"icon-[lucide--external-link]"},null,-1)),l("span",null,u(s.$t("g.learnMore")),1)]),$(F,{variant:"textonly",onClick:t[0]||(t[0]=o=>n("close"))},{default:y(()=>[D(u(s.$t("g.close")),1)]),_:1}),$(F,{variant:"secondary",onClick:t[1]||(t[1]=o=>n("subscribe"))},{default:y(()=>[D(u(s.$t("subscription.required.subscribe")),1)]),_:1})]))}}),xa={class:"flex flex-col justify-between gap-10 p-4 border-t border-border-default w-auto max-w-[min(500px,90vw)]"},Sa=B({__name:"UploadModelUpgradeModal",setup(i){const e=ee(),{showSubscriptionDialog:n}=ve();function s(){e.closeDialog({key:"upload-model-upgrade"})}m(s,"handleClose");function t(){n()}return m(t,"handleSubscribe"),(o,a)=>(d(),g("div",xa,[$($a),$(Ua,{onClose:s,onSubscribe:t})]))}}),Ca={},Ia={class:"flex items-center gap-2 p-4 font-bold"};function Ba(i,e){return d(),g("div",Ia,[l("span",null,u(i.$t("assetBrowser.upgradeToUnlockFeature")),1)])}m(Ba,"_sfc_render");const Fa=te(Ca,[["render",Ba]]);function Wa(i){const e=ee(),{flags:n}=A(),s=V(()=>n.modelUploadButtonEnabled);function t(){n.privateModelsEnabled?e.showDialog({key:"upload-model",headerComponent:ha,component:pa,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:Fa,component:Sa,dialogComponentProps:{pt:{header:"py-0! pl-0!",content:"p-0! overflow-y-hidden!"}}})}return m(t,"showUploadDialog"),{isUploadButtonEnabled:s,showUploadDialog:t}}m(Wa,"useModelUpload");const Va=""+new URL("images/default-template.png",import.meta.url).href;function La(i,e,n={}){const{immediate:s=!0,...t}=n,o=typeof window<"u"&&"IntersectionObserver"in window,a=x(!1);let r=null;const c=m(()=>{r&&(r.disconnect(),r=null)},"cleanup"),w=m(()=>{c(),!(!o||!i.value)&&(r=new IntersectionObserver(h=>{a.value=h.some(v=>v.isIntersecting),e(h,r)},t),r.observe(i.value))},"observe"),k=m(()=>{r&&i.value&&r.unobserve(i.value)},"unobserve");return s&&G(i,w,{immediate:!0,flush:"post"}),xe(c),{isSupported:o,isIntersecting:a,observe:w,unobserve:k,cleanup:c}}m(La,"useIntersectionObserver");class ja{static{m(this,"MediaCacheService")}cache=le(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,r)=>a[1].lastAccessed-r[1].lastAccessed);let t=0;const o=this.cache.size-this.maxSize;for(const[a,r]of s){if(t>=o)break;r.objectUrl?(this.urlRefCount.get(r.objectUrl)||0)===0&&(URL.revokeObjectURL(r.objectUrl),this.urlRefCount.delete(r.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 Ea(i){return L||(L=new ja(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(Ea,"useMediaCache");typeof window<"u"&&window.addEventListener("beforeunload",()=>{L&&L.destroy()});const Da=["src","alt"],Aa={key:2,class:"absolute inset-0 flex items-center justify-center"},za=["alt"],Oa=B({__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:r,releaseUrl:c}=Ea();La(e,v=>{const M=v[0];n.value=M?.isIntersecting??!1},{rootMargin:i.rootMargin,threshold:.1});const w=V(()=>n.value);G(w,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 j=r(i.src);o.value=j||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 Se(()=>{o.value?.startsWith("blob:")&&c(i.src)}),(v,M)=>(d(),g("div",{ref_key:"containerRef",ref:e,class:X(["relative flex h-full w-full items-center justify-center overflow-hidden",v.containerClass])},[s.value?_("",!0):(d(),S(p(Be),{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:X(v.imageClass),style:Z(v.imageStyle),onLoad:k,onError:h},null,46,Da)):_("",!0),t.value?(d(),g("div",Aa,[l("img",{src:Va,alt:v.alt,draggable:"false",class:X(v.imageClass),style:Z(v.imageStyle)},null,14,za)])):_("",!0)],2))}});export{De as _,Wa as a,Va as b,Oa as c,La as d,A as u};
|
|
2
|
-
//# sourceMappingURL=LazyImage.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
var ce=Object.defineProperty;var m=(i,e)=>ce(i,"name",{value:e,configurable:!0});import{cG as E,a as I,c as se,_ as F,k as pe,cu as me,l as fe,h as q,s as ge,u as ee,d as te,m as ve}from"./index-B3VEOed6.js";import{b as le,E as V,a as he,bx as B,cM as O,cN as N,j as S,d,by as p,m as be,k as y,e as l,G as Z,c as g,q as _,u,p as ye,d3 as we,cw as _e,z as $,w as G,d2 as $e,eE as ke,r as x,A as D,f as re,o as Me,bg as Ue,dc as xe,cd as Se,s as X}from"./vendor-other-B8t_Wf2K.js";import{i as Ce,y as Ie,e as ne,a as Be}from"./vendor-primevue-Bp7MMXLP.js";import{u as ie}from"./vendor-vue-DaLZjKA7.js";function A(){const i=le({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:he(i),featureFlag:e}}m(A,"useFeatureFlags");const Fe={class:"flex items-center gap-2 text-sm"},Ve={key:0,class:"text-base-foreground"},Le={key:1,class:"text-base-foreground"},je={class:"truncate"},Ee={key:0,class:"icon-[lucide--check] text-base-foreground"},De=B({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}=ie(),s=m(o=>{if(o==null||!i.options)return i.label??"";const a=i.options.find(r=>r.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(),S(p(Ce),be({modelValue:e.value,"onUpdate:modelValue":a[0]||(a[0]=r=>e.value=r)},o.$attrs,{options:o.options,"option-label":"name","option-value":"value",unstyled:"",pt:{root:m(({props:r})=>({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":r.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(se)("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:r})=>({class:p(se)("flex items-center justify-between gap-3 px-2 py-3 rounded","hover:bg-secondary-background-hover",r.focused&&"bg-secondary-background-hover",r.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:y(r=>[l("div",Fe,[ye(o.$slots,"icon"),r.value!==null&&r.value!==void 0?(d(),g("span",Ve,u(s(r.value)),1)):(d(),g("span",Le,u(o.label),1))])]),dropdownicon:y(()=>a[1]||(a[1]=[l("i",{class:"icon-[lucide--chevron-down] text-muted-foreground"},null,-1)])),option:y(({option:r,selected:c})=>[l("div",{class:"flex w-full items-center justify-between gap-3",style:Z(t.value)},[l("span",je,u(r.name),1),c?(d(),g("i",Ee)):_("",!0)],4)]),_:3},16,["modelValue","options","pt","aria-label"]))}});function Ae(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(Ae,"formatDisplayName");const ze=["nlf"],de=we(()=>{const{state:i,isLoading:e,error:n,execute:s}=_e(async()=>(await I.getModelFolders()).filter(o=>!ze.includes(o.name)).map(o=>({name:Ae(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}}),Re={class:"flex flex-col gap-4 text-sm text-muted-foreground"},Te={class:"flex flex-col gap-2"},He={class:"m-0"},Pe={class:"flex items-center gap-3 rounded-lg bg-secondary-background p-3"},qe=["src","alt"],We={class:"m-0 min-w-0 flex-1 truncate text-base-foreground"},Oe={class:"flex flex-col gap-2"},Ne={class:""},Ge={class:"flex items-center gap-2"},Ke=B({__name:"UploadModelConfirmation",props:O({metadata:{},previewImage:{}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const e=N(i,"modelValue"),{modelTypes:n,isLoading:s}=de();return(t,o)=>(d(),g("div",Re,[l("div",Te,[l("p",He,u(t.$t("assetBrowser.modelAssociatedWithLink")),1),l("div",Pe,[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,qe)):_("",!0),l("p",We,u(t.metadata?.filename||t.metadata?.name),1)])]),l("div",Oe,[l("label",Ne,u(t.$t("assetBrowser.modelTypeSelectorLabel")),1),$(De,{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"]),l("div",Ge,[o[1]||(o[1]=l("i",{class:"icon-[lucide--circle-question-mark]"},null,-1)),l("span",null,u(t.$t("assetBrowser.notSureLeaveAsIs")),1)])])]))}}),Ye={class:"relative"},Je=["aria-label","src"],oe=B({__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=$e(document,"keydown",n,{capture:!0});ke(t)}},{immediate:!0}),(s,t)=>(d(),S(p(Ie),{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:y(()=>[l("div",Ye,[$(F,{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:y(()=>t[2]||(t[2]=[l("i",{class:"pi pi-times text-sm"},null,-1)])),_:1},8,["aria-label"]),l("video",{autoplay:"",muted:"",loop:"","aria-label":s.ariaLabel,class:"w-full rounded-lg",src:s.videoUrl},u(s.$t("g.videoFailedToLoad")),9,Je)])]),_:1},8,["visible"]))}}),Qe={class:"flex justify-end gap-2 w-full"},Xe={key:0,class:"mr-auto flex items-center gap-2"},Ze={key:4},et={key:0,class:"icon-[lucide--loader-circle] animate-spin"},tt={key:0,class:"icon-[lucide--loader-circle] animate-spin"},at=B({__name:"UploadModelFooter",props:{currentStep:{},isFetchingMetadata:{type:Boolean},isUploading:{type:Boolean},canFetchMetadata:{type:Boolean},canUploadModel:{type:Boolean},uploadStatus:{}},emits:["back","fetchMetadata","upload","close"],setup(i,{emit:e}){const{flags:n}=A(),s=x(!1),t=x(!1),o=e;return(a,r)=>(d(),g("div",Qe,[a.currentStep===1&&p(n).huggingfaceModelImportEnabled?(d(),g("div",Xe,[r[10]||(r[10]=l("i",{class:"icon-[lucide--circle-question-mark] text-muted-foreground"},null,-1)),$(F,{variant:"muted-textonly",size:"sm","data-attr":"upload-model-step1-help-civitai",onClick:r[0]||(r[0]=c=>s.value=!0)},{default:y(()=>[D(u(a.$t("assetBrowser.providerCivitai")),1)]),_:1}),$(F,{variant:"muted-textonly",size:"sm","data-attr":"upload-model-step1-help-huggingface",onClick:r[1]||(r[1]=c=>t.value=!0)},{default:y(()=>[D(u(a.$t("assetBrowser.providerHuggingFace")),1)]),_:1})])):a.currentStep===1?(d(),S(F,{key:1,variant:"muted-textonly",size:"lg",class:"mr-auto underline","data-attr":"upload-model-step1-help-link",onClick:r[2]||(r[2]=c=>s.value=!0)},{default:y(()=>[r[11]||(r[11]=l("i",{class:"icon-[lucide--circle-question-mark]"},null,-1)),l("span",null,u(a.$t("assetBrowser.uploadModelHowDoIFindThis")),1)]),_:1})):_("",!0),a.currentStep===1?(d(),S(F,{key:2,variant:"muted-textonly",size:"lg","data-attr":"upload-model-step1-cancel-button",disabled:a.isFetchingMetadata||a.isUploading,onClick:r[3]||(r[3]=c=>o("close"))},{default:y(()=>[D(u(a.$t("g.cancel")),1)]),_:1},8,["disabled"])):_("",!0),a.currentStep!==1&&a.currentStep!==3?(d(),S(F,{key:3,variant:"muted-textonly",size:"lg","data-attr":`upload-model-step${a.currentStep}-back-button`,disabled:a.isFetchingMetadata||a.isUploading,onClick:r[4]||(r[4]=c=>o("back"))},{default:y(()=>[D(u(a.$t("g.back")),1)]),_:1},8,["data-attr","disabled"])):(d(),g("span",Ze)),a.currentStep===1?(d(),S(F,{key:5,variant:"secondary",size:"lg","data-attr":"upload-model-step1-continue-button",disabled:!a.canFetchMetadata||a.isFetchingMetadata,onClick:r[5]||(r[5]=c=>o("fetchMetadata"))},{default:y(()=>[a.isFetchingMetadata?(d(),g("i",et)):_("",!0),l("span",null,u(a.$t("g.continue")),1)]),_:1},8,["disabled"])):a.currentStep===2?(d(),S(F,{key:6,variant:"secondary",size:"lg","data-attr":"upload-model-step2-confirm-button",disabled:!a.canUploadModel||a.isUploading,onClick:r[6]||(r[6]=c=>o("upload"))},{default:y(()=>[a.isUploading?(d(),g("i",tt)):_("",!0),l("span",null,u(a.$t("assetBrowser.upload")),1)]),_:1},8,["disabled"])):a.currentStep===3&&(a.uploadStatus==="success"||a.uploadStatus==="processing")?(d(),S(F,{key:7,variant:"secondary","data-attr":"upload-model-step3-finish-button",onClick:r[7]||(r[7]=c=>o("close"))},{default:y(()=>[D(u(a.uploadStatus==="processing"?a.$t("g.close"):a.$t("assetBrowser.finish")),1)]),_:1})):_("",!0),$(oe,{modelValue:s.value,"onUpdate:modelValue":r[8]||(r[8]=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"]),$(oe,{modelValue:t.value,"onUpdate:modelValue":r[9]||(r[9]=c=>t.value=c),"video-url":"https://media.comfy.org/byom/huggingfacehowto.mp4","aria-label":a.$t("assetBrowser.uploadModelHelpVideo")},null,8,["modelValue","aria-label"])]))}}),st={class:"flex flex-1 flex-col gap-6 text-sm text-muted-foreground"},ot={key:0,class:"flex flex-col gap-2"},lt={class:"m-0 font-bold"},rt={class:"m-0"},nt={class:"flex flex-row items-center gap-3 rounded-lg bg-modal-card-background p-4"},it=["src","alt"],dt={class:"flex min-w-0 flex-1 flex-col items-start justify-center gap-1"},ut={class:"m-0 w-full truncate text-base-foreground"},ct={class:"m-0 text-sm text-muted"},pt={key:1,class:"flex flex-col gap-2"},mt={class:"m-0 font-bold"},ft={class:"m-0"},gt={class:"flex flex-row items-center gap-3 rounded-lg bg-modal-card-background p-4"},vt=["src","alt"],ht={class:"flex min-w-0 flex-1 flex-col items-start justify-center gap-1"},bt={class:"m-0 w-full truncate text-base-foreground"},yt={class:"m-0 text-sm text-muted"},wt={key:2,class:"flex flex-1 flex-col items-center justify-center gap-6"},_t={class:"text-center"},$t={class:"m-0 text-sm font-bold"},kt={key:0,class:"text-sm text-muted mb-0"},Mt=B({__name:"UploadModelProgress",props:{result:{},error:{},metadata:{},modelType:{},previewImage:{}},setup(i){return(e,n)=>(d(),g("div",st,[e.result==="processing"?(d(),g("div",ot,[l("p",lt,u(e.$t("assetBrowser.processingModel")),1),l("p",rt,u(e.$t("assetBrowser.processingModelDescription")),1),l("div",nt,[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,it)):_("",!0),l("div",dt,[l("p",ut,u(e.metadata?.filename||e.metadata?.name),1),l("p",ct,u(e.modelType),1)])])])):e.result==="success"?(d(),g("div",pt,[l("p",mt,u(e.$t("assetBrowser.modelUploaded")),1),l("p",ft,u(e.$t("assetBrowser.findInLibrary",{type:e.modelType})),1),l("div",gt,[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,vt)):_("",!0),l("div",ht,[l("p",bt,u(e.metadata?.filename||e.metadata?.name),1),l("p",yt,u(e.modelType),1)])])])):e.result==="error"?(d(),g("div",wt,[n[0]||(n[0]=l("i",{class:"icon-[lucide--x-circle] text-6xl text-error"},null,-1)),l("div",_t,[l("p",$t,u(e.$t("assetBrowser.uploadFailed")),1),e.error?(d(),g("p",kt,u(e.error),1)):_("",!0)])])):_("",!0)]))}}),W={type:"civitai",name:"Civitai",hostnames:["civitai.com"]},ue={type:"huggingface",name:"Hugging Face",hostnames:["huggingface.co"]};function ae(i,e){try{const n=new URL(i).hostname.toLowerCase();return e.hostnames.some(s=>n===s||n.endsWith(`.${s}`))}catch{return!1}}m(ae,"validateSourceUrl");const Ut={class:"flex flex-col justify-between h-full gap-6 text-sm"},xt={class:"flex flex-col gap-6"},St={class:"flex flex-col gap-2"},Ct={class:"m-0 text-foreground"},It={class:"m-0"},Bt={class:"m-0 text-muted-foreground"},Ft={class:"inline-flex items-center gap-1 flex-wrap mt-2"},Vt={class:"inline-flex items-center gap-1"},Lt=["alt"],jt={class:"inline-flex items-center gap-1"},Et=["alt"],Dt={class:"flex flex-col gap-2"},At={class:"relative"},zt={key:0,class:"icon-[lucide--circle-check-big] absolute top-1/2 right-3 size-5 -translate-y-1/2 text-green-500"},Rt={key:0,class:"text-xs text-error"},Tt={key:1,class:"text-foreground"},Ht={class:"font-bold italic"},Pt={class:"text-sm text-muted"},qt="/assets/images/civitai.svg",Wt="https://civitai.com/models",Ot="/assets/images/hf-logo.svg",Nt="https://huggingface.co",Gt=B({__name:"UploadModelUrlInput",props:{modelValue:{},error:{}},emits:["update:modelValue"],setup(i,{emit:e}){const{flags:n}=A(),s=i,t=e,o=V({get:m(()=>s.modelValue,"get"),set:m(c=>t("update:modelValue",c),"set")}),a=[W,ue],r=V(()=>{const c=o.value.trim();return c?a.some(w=>ae(c,w)):!1});return(c,w)=>{const k=re("i18n-t");return d(),g("div",Ut,[l("div",xt,[l("div",St,[l("p",Ct,u(c.$t("assetBrowser.uploadModelDescription1Generic")),1),l("div",It,[l("p",Bt,u(c.$t("assetBrowser.uploadModelDescription2Generic")),1),l("span",Ft,[l("span",Vt,[l("img",{src:qt,alt:c.$t("assetBrowser.providerCivitai"),class:"w-4 h-4"},null,8,Lt),l("a",{href:Wt,target:"_blank",rel:"noopener noreferrer",class:"text-muted underline"},u(c.$t("assetBrowser.providerCivitai")),1),w[1]||(w[1]=l("span",null,",",-1))]),l("span",jt,[l("img",{src:Ot,alt:c.$t("assetBrowser.providerHuggingFace"),class:"w-4 h-4"},null,8,Et),l("a",{href:Nt,target:"_blank",rel:"noopener noreferrer",class:"text-muted underline"},u(c.$t("assetBrowser.providerHuggingFace")),1)])])])]),l("div",Dt,[l("div",At,[$(p(ne),{modelValue:o.value,"onUpdate:modelValue":w[0]||(w[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"]),r.value?(d(),g("i",zt)):_("",!0)]),c.error?(d(),g("p",Rt,u(c.error),1)):p(n).asyncModelUploadEnabled?_("",!0):(d(),g("p",Tt,[$(k,{keypath:"assetBrowser.maxFileSize",tag:"span"},{size:y(()=>[l("span",Ht,u(c.$t("assetBrowser.maxFileSizeValue")),1)]),_:1})]))])]),l("div",Pt,u(c.$t("assetBrowser.uploadModelHelpFooterText")),1)])}}}),Kt={class:"flex flex-col gap-6 text-sm text-muted-foreground"},Yt={class:"flex flex-col gap-2"},Jt={class:"m-0"},Qt={class:"list-disc space-y-1 pl-5 mt-0"},Xt={href:"https://civitai.com/models",target:"_blank",class:"text-muted-foreground"},Zt={key:0},ea={class:"font-bold italic"},ta={class:"flex flex-col gap-2"},aa={class:"font-bold italic"},sa={class:"relative"},oa={key:0,class:"icon-[lucide--circle-check-big] absolute top-1/2 right-3 size-5 -translate-y-1/2 text-green-500"},la={key:0,class:"text-xs text-error"},ra={href:"https://civitai.com/models/10706/luisap-z-image-and-qwen-pixel-art-refiner?modelVersionId=2225295",target:"_blank",class:"text-muted-foreground"},na=B({__name:"UploadModelUrlInputCivitai",props:O({error:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const{flags:e}=A(),n=N(i,"modelValue"),s=V(()=>{const t=n.value.trim();return t?ae(t,W):!1});return(t,o)=>{const a=re("i18n-t");return d(),g("div",Kt,[l("div",Yt,[l("p",Jt,u(t.$t("assetBrowser.uploadModelDescription1")),1),l("ul",Qt,[l("li",null,[$(a,{keypath:"assetBrowser.uploadModelDescription2",tag:"span"},{link:y(()=>[l("a",Xt,u(t.$t("assetBrowser.uploadModelDescription2Link")),1)]),_:1})]),p(e).asyncModelUploadEnabled?_("",!0):(d(),g("li",Zt,[$(a,{keypath:"assetBrowser.uploadModelDescription3",tag:"span"},{size:y(()=>[l("span",ea,u(t.$t("assetBrowser.maxFileSizeValue")),1)]),_:1})]))])]),l("div",ta,[$(a,{keypath:"assetBrowser.civitaiLinkLabel",tag:"label",class:"mb-0"},{download:y(()=>[l("span",aa,u(t.$t("assetBrowser.civitaiLinkLabelDownload")),1)]),_:1}),l("div",sa,[$(p(ne),{modelValue:n.value,"onUpdate:modelValue":o[0]||(o[0]=r=>n.value=r),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",oa)):_("",!0)]),t.error?(d(),g("p",la,u(t.error),1)):(d(),S(a,{key:1,keypath:"assetBrowser.civitaiLinkExample",tag:"p",class:"text-xs"},{example:y(()=>[l("strong",null,u(t.$t("assetBrowser.civitaiLinkExampleStrong")),1)]),link:y(()=>[l("a",ra,u(t.$t("assetBrowser.civitaiLinkExampleUrl")),1)]),_:1}))])])}}});function ia(i){const{t:e}=ie(),n=pe(),s=me(),t=fe(),{flags:o}=A(),a=x(1),r=x(!1),c=x(!1),w=x(),k=x(""),h=x({url:"",name:"",tags:[]}),v=x(),M=o.huggingfaceModelImportEnabled?[W,ue]:[W],j=V(()=>{const U=h.value.url.trim();return U?M.find(b=>ae(U,b))??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,!j.value){const f=M.map(C=>C.name).join(", ");k.value=e("assetBrowser.unsupportedUrlSource",{sources:f});return}r.value=!0;try{const f=await q.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 C=f.tags.find(z=>i.value.some(R=>R.value===z));C&&(v.value=C)}a.value=2}catch(f){console.error("Failed to retrieve metadata:",f),k.value=f instanceof Error?f.message:ge("assetBrowser.uploadModelFailedToRetrieveMetadata","Failed to retrieve metadata. Please check the link and try again."),a.value=1}finally{r.value=!1}}m(K,"fetchMetadata");async function Y(U){if(h.value.previewImage)try{const b=U.split(".")[0];let f="png";const C=h.value.previewImage.match(/^data:image\/([^;]+);/);return C&&(f=C[1]==="jpeg"?"jpg":C[1]),(await q.uploadAssetFromBase64({data:h.value.previewImage,name:`${b}_preview.${f}`,tags:["preview"]})).id}catch(b){console.error("Failed to upload preview image:",b);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,C)=>{f.status==="rejected"&&console.error(`Failed to refresh ${U[C].nodeDef.name}:`,f.reason)})}m(P,"refreshModelCaches");async function J(){if(!H.value)return!1;const U=j.value;if(!U)return k.value=e("assetBrowser.noValidSourceDetected"),!1;c.value=!0;try{const b=v.value?["models",v.value]:["models"],f=h.value.metadata?.filename||h.value.metadata?.name||"model",C=await Y(f),z={source:U.type,source_url:h.value.url,model_type:v.value};if(o.asyncModelUploadEnabled){const R=await q.uploadAssetAsync({source_url:h.value.url,tags:b,user_metadata:z,preview_id:C});R.type==="async"&&R.task.status!=="completed"?(v.value&&s.trackDownload(R.task.task_id,v.value),w.value="processing"):(w.value="success",await P()),a.value=3}else await q.uploadAssetFromUrl({url:h.value.url,name:f,tags:b,user_metadata:z,preview_id:C}),w.value="success",await P(),a.value=3}catch(b){console.error("Failed to upload asset:",b),w.value="error",k.value=b instanceof Error?b.message:"Failed to upload model",a.value=3}finally{c.value=!1}return w.value!=="error"}m(J,"uploadModel");function Q(){a.value>1&&(a.value=a.value-1)}return m(Q,"goToPreviousStep"),{currentStep:a,isFetchingMetadata:r,isUploading:c,uploadStatus:w,uploadError:k,wizardData:h,selectedModelType:v,canFetchMetadata:T,canUploadModel:H,detectedSource:j,fetchMetadata:K,uploadModel:J,goToPreviousStep:Q}}m(ia,"useUploadModelWizard");const da={class:"upload-model-dialog flex flex-col gap-6 border-t border-border-default p-4 pt-6"},ua={class:"min-h-0 flex-auto basis-0 overflow-y-auto"},ca=B({__name:"UploadModelDialog",emits:["upload-success"],setup(i,{emit:e}){const{flags:n}=A(),s=ee(),{modelTypes:t,fetchModelTypes:o}=de(),a=e,{currentStep:r,isFetchingMetadata:c,isUploading:w,uploadStatus:k,uploadError:h,wizardData:v,selectedModelType:M,canFetchMetadata:j,canUploadModel:T,fetchMetadata:H,uploadModel:K,goToPreviousStep:Y}=ia(t);async function P(){await H()}m(P,"handleFetchMetadata");async function J(){await K()&&a("upload-success")}m(J,"handleUploadModel");function Q(){s.closeDialog({key:"upload-model"})}return m(Q,"handleClose"),Me(()=>{o()}),(U,b)=>(d(),g("div",da,[l("div",ua,[p(r)===1&&p(n).huggingfaceModelImportEnabled?(d(),S(Gt,{key:0,modelValue:p(v).url,"onUpdate:modelValue":b[0]||(b[0]=f=>p(v).url=f),error:p(h)},null,8,["modelValue","error"])):p(r)===1?(d(),S(na,{key:1,modelValue:p(v).url,"onUpdate:modelValue":b[1]||(b[1]=f=>p(v).url=f),error:p(h)},null,8,["modelValue","error"])):p(r)===2?(d(),S(Ke,{key:2,modelValue:p(M),"onUpdate:modelValue":b[2]||(b[2]=f=>Ue(M)?M.value=f:null),metadata:p(v).metadata,"preview-image":p(v).previewImage},null,8,["modelValue","metadata","preview-image"])):p(r)===3&&p(k)!=null?(d(),S(Mt,{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)]),$(at,{class:"flex-shrink-0","current-step":p(r),"is-fetching-metadata":p(c),"is-uploading":p(w),"can-fetch-metadata":p(j),"can-upload-model":p(T),"upload-status":p(k),onBack:p(Y),onFetchMetadata:P,onUpload:J,onClose:Q},null,8,["current-step","is-fetching-metadata","is-uploading","can-fetch-metadata","can-upload-model","upload-status","onBack"])]))}}),pa=te(ca,[["__scopeId","data-v-0825b930"]]),ma=""+new URL("images/civitai.svg",import.meta.url).href,fa={class:"flex items-center gap-2 p-4 font-bold"},ga={key:0,src:ma,class:"size-4"},va={class:"rounded-full bg-white px-1.5 py-0 text-xxs font-inter font-semibold uppercase text-black"},ha=B({__name:"UploadModelDialogHeader",setup(i){const{flags:e}=A(),n=V(()=>e.huggingfaceModelImportEnabled?"assetBrowser.uploadModelGeneric":"assetBrowser.uploadModelFromCivitai");return(s,t)=>(d(),g("div",fa,[p(e).huggingfaceModelImportEnabled?_("",!0):(d(),g("img",ga)),l("span",null,u(s.$t(n.value)),1),l("span",va,u(s.$t("g.beta")),1)]))}}),ba={},ya={class:"flex flex-1 flex-col items-center justify-center text-base text-muted-foreground"},wa={class:"m-0 max-w-md"};function _a(i,e){return d(),g("div",ya,[l("p",wa,u(i.$t("assetBrowser.upgradeFeatureDescription")),1)])}m(_a,"_sfc_render$1");const $a=te(ba,[["render",_a]]),ka={class:"flex flex-wrap justify-end gap-2 w-full"},Ma={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"},Ua=B({__name:"UploadModelUpgradeModalFooter",emits:["close","subscribe"],setup(i,{emit:e}){const n=e;return(s,t)=>(d(),g("div",ka,[l("a",Ma,[t[2]||(t[2]=l("i",{class:"icon-[lucide--external-link]"},null,-1)),l("span",null,u(s.$t("g.learnMore")),1)]),$(F,{variant:"textonly",onClick:t[0]||(t[0]=o=>n("close"))},{default:y(()=>[D(u(s.$t("g.close")),1)]),_:1}),$(F,{variant:"secondary",onClick:t[1]||(t[1]=o=>n("subscribe"))},{default:y(()=>[D(u(s.$t("subscription.required.subscribe")),1)]),_:1})]))}}),xa={class:"flex flex-col justify-between gap-10 p-4 border-t border-border-default w-auto max-w-[min(500px,90vw)]"},Sa=B({__name:"UploadModelUpgradeModal",setup(i){const e=ee(),{showSubscriptionDialog:n}=ve();function s(){e.closeDialog({key:"upload-model-upgrade"})}m(s,"handleClose");function t(){n()}return m(t,"handleSubscribe"),(o,a)=>(d(),g("div",xa,[$($a),$(Ua,{onClose:s,onSubscribe:t})]))}}),Ca={},Ia={class:"flex items-center gap-2 p-4 font-bold"};function Ba(i,e){return d(),g("div",Ia,[l("span",null,u(i.$t("assetBrowser.upgradeToUnlockFeature")),1)])}m(Ba,"_sfc_render");const Fa=te(Ca,[["render",Ba]]);function Wa(i){const e=ee(),{flags:n}=A(),s=V(()=>n.modelUploadButtonEnabled);function t(){n.privateModelsEnabled?e.showDialog({key:"upload-model",headerComponent:ha,component:pa,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:Fa,component:Sa,dialogComponentProps:{pt:{header:"py-0! pl-0!",content:"p-0! overflow-y-hidden!"}}})}return m(t,"showUploadDialog"),{isUploadButtonEnabled:s,showUploadDialog:t}}m(Wa,"useModelUpload");const Va=""+new URL("images/default-template.png",import.meta.url).href;function La(i,e,n={}){const{immediate:s=!0,...t}=n,o=typeof window<"u"&&"IntersectionObserver"in window,a=x(!1);let r=null;const c=m(()=>{r&&(r.disconnect(),r=null)},"cleanup"),w=m(()=>{c(),!(!o||!i.value)&&(r=new IntersectionObserver(h=>{a.value=h.some(v=>v.isIntersecting),e(h,r)},t),r.observe(i.value))},"observe"),k=m(()=>{r&&i.value&&r.unobserve(i.value)},"unobserve");return s&&G(i,w,{immediate:!0,flush:"post"}),xe(c),{isSupported:o,isIntersecting:a,observe:w,unobserve:k,cleanup:c}}m(La,"useIntersectionObserver");class ja{static{m(this,"MediaCacheService")}cache=le(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,r)=>a[1].lastAccessed-r[1].lastAccessed);let t=0;const o=this.cache.size-this.maxSize;for(const[a,r]of s){if(t>=o)break;r.objectUrl?(this.urlRefCount.get(r.objectUrl)||0)===0&&(URL.revokeObjectURL(r.objectUrl),this.urlRefCount.delete(r.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 Ea(i){return L||(L=new ja(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(Ea,"useMediaCache");typeof window<"u"&&window.addEventListener("beforeunload",()=>{L&&L.destroy()});const Da=["src","alt"],Aa={key:2,class:"absolute inset-0 flex items-center justify-center"},za=["alt"],Oa=B({__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:r,releaseUrl:c}=Ea();La(e,v=>{const M=v[0];n.value=M?.isIntersecting??!1},{rootMargin:i.rootMargin,threshold:.1});const w=V(()=>n.value);G(w,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 j=r(i.src);o.value=j||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 Se(()=>{o.value?.startsWith("blob:")&&c(i.src)}),(v,M)=>(d(),g("div",{ref_key:"containerRef",ref:e,class:X(["relative flex h-full w-full items-center justify-center overflow-hidden",v.containerClass])},[s.value?_("",!0):(d(),S(p(Be),{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:X(v.imageClass),style:Z(v.imageStyle),onLoad:k,onError:h},null,46,Da)):_("",!0),t.value?(d(),g("div",Aa,[l("img",{src:Va,alt:v.alt,draggable:"false",class:X(v.imageClass),style:Z(v.imageStyle)},null,14,za)])):_("",!0)],2))}});export{De as _,Wa as a,Va as b,Oa as c,La as d,A as u};
|
|
2
|
+
//# sourceMappingURL=LazyImage.vue_vue_type_script_setup_true_lang-BHcWsrBj.js.map
|