comfyui-frontend-package 1.37.1__py3-none-any.whl → 1.37.2__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-CTGWwQqp.js → AboutPanel-DLChcmDc.js} +2 -2
- comfyui_frontend_package/static/assets/{AboutPanel-CTGWwQqp.js.map → AboutPanel-DLChcmDc.js.map} +1 -1
- comfyui_frontend_package/static/assets/{AudioPreviewPlayer-DDwwIMxr.js → AudioPreviewPlayer-B8RfUAL6.js} +2 -2
- comfyui_frontend_package/static/assets/{AudioPreviewPlayer-DDwwIMxr.js.map → AudioPreviewPlayer-B8RfUAL6.js.map} +1 -1
- comfyui_frontend_package/static/assets/{ComfyQueueButton-BDRXGOWF.js → ComfyQueueButton-DRgA2g3T.js} +2 -2
- comfyui_frontend_package/static/assets/{ComfyQueueButton-BDRXGOWF.js.map → ComfyQueueButton-DRgA2g3T.js.map} +1 -1
- comfyui_frontend_package/static/assets/{ExtensionPanel-Dxe7qElb.js → ExtensionPanel-CpMR9h6B.js} +2 -2
- comfyui_frontend_package/static/assets/{ExtensionPanel-Dxe7qElb.js.map → ExtensionPanel-CpMR9h6B.js.map} +1 -1
- comfyui_frontend_package/static/assets/{GraphView-Cx4wYzNo.js → GraphView-xK7kCVVH.js} +5 -5
- comfyui_frontend_package/static/assets/{GraphView-Cx4wYzNo.js.map → GraphView-xK7kCVVH.js.map} +1 -1
- comfyui_frontend_package/static/assets/{KeybindingPanel-pmyMPZHn.js → KeybindingPanel-CM_PwegN.js} +2 -2
- comfyui_frontend_package/static/assets/{KeybindingPanel-pmyMPZHn.js.map → KeybindingPanel-CM_PwegN.js.map} +1 -1
- comfyui_frontend_package/static/assets/{LazyImage.vue_vue_type_script_setup_true_lang-C3ynRbso.js → LazyImage.vue_vue_type_script_setup_true_lang-Dza6G4hd.js} +2 -2
- comfyui_frontend_package/static/assets/{LazyImage.vue_vue_type_script_setup_true_lang-C3ynRbso.js.map → LazyImage.vue_vue_type_script_setup_true_lang-Dza6G4hd.js.map} +1 -1
- comfyui_frontend_package/static/assets/{LegacyCreditsPanel-DSos04Q3.js → LegacyCreditsPanel-BujZmWgC.js} +2 -2
- comfyui_frontend_package/static/assets/{LegacyCreditsPanel-DSos04Q3.js.map → LegacyCreditsPanel-BujZmWgC.js.map} +1 -1
- comfyui_frontend_package/static/assets/{Load3D-Cu5zG2Cw.js → Load3D-DWafZUud.js} +2 -2
- comfyui_frontend_package/static/assets/Load3D-DWafZUud.js.map +1 -0
- comfyui_frontend_package/static/assets/{Load3D.vue_vue_type_script_setup_true_lang-BJ0IqFdp.js → Load3D.vue_vue_type_script_setup_true_lang-_XswHXHt.js} +2 -2
- comfyui_frontend_package/static/assets/{Load3D.vue_vue_type_script_setup_true_lang-BJ0IqFdp.js.map → Load3D.vue_vue_type_script_setup_true_lang-_XswHXHt.js.map} +1 -1
- comfyui_frontend_package/static/assets/{Media3DBottom-DsMr4v-s.js → Media3DBottom-Z9nkVIUT.js} +2 -2
- comfyui_frontend_package/static/assets/{Media3DBottom-DsMr4v-s.js.map → Media3DBottom-Z9nkVIUT.js.map} +1 -1
- comfyui_frontend_package/static/assets/{Media3DTop-DQ18QW3M.js → Media3DTop-DKaMli8A.js} +2 -2
- comfyui_frontend_package/static/assets/{Media3DTop-DQ18QW3M.js.map → Media3DTop-DKaMli8A.js.map} +1 -1
- comfyui_frontend_package/static/assets/{MediaAudioBottom-99GB7NqQ.js → MediaAudioBottom-B62n8OnR.js} +2 -2
- comfyui_frontend_package/static/assets/{MediaAudioBottom-99GB7NqQ.js.map → MediaAudioBottom-B62n8OnR.js.map} +1 -1
- comfyui_frontend_package/static/assets/{MediaImageBottom-C6Bpu_d9.js → MediaImageBottom-DChcPA0h.js} +2 -2
- comfyui_frontend_package/static/assets/{MediaImageBottom-C6Bpu_d9.js.map → MediaImageBottom-DChcPA0h.js.map} +1 -1
- comfyui_frontend_package/static/assets/{MediaTitle.vue_vue_type_script_setup_true_lang-BFgOqxto.js → MediaTitle.vue_vue_type_script_setup_true_lang-CFkifLSX.js} +2 -2
- comfyui_frontend_package/static/assets/{MediaTitle.vue_vue_type_script_setup_true_lang-BFgOqxto.js.map → MediaTitle.vue_vue_type_script_setup_true_lang-CFkifLSX.js.map} +1 -1
- comfyui_frontend_package/static/assets/{MediaVideoBottom-DgdszioB.js → MediaVideoBottom-fWb8qHcu.js} +2 -2
- comfyui_frontend_package/static/assets/{MediaVideoBottom-DgdszioB.js.map → MediaVideoBottom-fWb8qHcu.js.map} +1 -1
- comfyui_frontend_package/static/assets/{ServerConfigPanel-BlC22rDX.js → ServerConfigPanel-umnHESaV.js} +2 -2
- comfyui_frontend_package/static/assets/{ServerConfigPanel-BlC22rDX.js.map → ServerConfigPanel-umnHESaV.js.map} +1 -1
- comfyui_frontend_package/static/assets/SubscriptionRequiredDialogContent-BdL9OjAj.js +2 -0
- comfyui_frontend_package/static/assets/SubscriptionRequiredDialogContent-BdL9OjAj.js.map +1 -0
- comfyui_frontend_package/static/assets/{UserPanel-Ccmz94Hx.js → UserPanel-CwkZrKjy.js} +2 -2
- comfyui_frontend_package/static/assets/{UserPanel-Ccmz94Hx.js.map → UserPanel-CwkZrKjy.js.map} +1 -1
- comfyui_frontend_package/static/assets/{UserSelectView-DVFY57_D.js → UserSelectView-TeLhcKfi.js} +2 -2
- comfyui_frontend_package/static/assets/{UserSelectView-DVFY57_D.js.map → UserSelectView-TeLhcKfi.js.map} +1 -1
- comfyui_frontend_package/static/assets/{ValueControlPopover-BLxzZY7u.js → ValueControlPopover-CSvGimoz.js} +2 -2
- comfyui_frontend_package/static/assets/{ValueControlPopover-BLxzZY7u.js.map → ValueControlPopover-CSvGimoz.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetAudioUI-BtX1BUnO.js → WidgetAudioUI-CfZQ32fr.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetAudioUI-BtX1BUnO.js.map → WidgetAudioUI-CfZQ32fr.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetButton-CyIVF8iQ.js → WidgetButton-Bo9rWiUg.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetButton-CyIVF8iQ.js.map → WidgetButton-Bo9rWiUg.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetColorPicker-BcGFRyIl.js → WidgetColorPicker-CyNNmSC9.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetColorPicker-BcGFRyIl.js.map → WidgetColorPicker-CyNNmSC9.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetGalleria-CfluZbRG.js → WidgetGalleria-X2v42F2a.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetGalleria-CfluZbRG.js.map → WidgetGalleria-X2v42F2a.js.map} +1 -1
- comfyui_frontend_package/static/assets/WidgetInputNumber-BL6P8as9.js +2 -0
- comfyui_frontend_package/static/assets/WidgetInputNumber-BL6P8as9.js.map +1 -0
- comfyui_frontend_package/static/assets/{WidgetInputNumber.vue_vue_type_script_setup_true_lang-Bmxd6b-H.js → WidgetInputNumber.vue_vue_type_script_setup_true_lang-DPaOKLY2.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetInputNumber.vue_vue_type_script_setup_true_lang-Bmxd6b-H.js.map → WidgetInputNumber.vue_vue_type_script_setup_true_lang-DPaOKLY2.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetInputText-CecuaK0n.js → WidgetInputText-LR89p-m1.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetInputText-CecuaK0n.js.map → WidgetInputText-LR89p-m1.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetLayoutField.vue_vue_type_script_setup_true_lang-CbjST6rI.js → WidgetLayoutField.vue_vue_type_script_setup_true_lang-C5dBI8au.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetLayoutField.vue_vue_type_script_setup_true_lang-CbjST6rI.js.map → WidgetLayoutField.vue_vue_type_script_setup_true_lang-C5dBI8au.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetLegacy-B8P9bOsC.js → WidgetLegacy-CJpsLPyI.js} +2 -2
- comfyui_frontend_package/static/assets/WidgetLegacy-CJpsLPyI.js.map +1 -0
- comfyui_frontend_package/static/assets/{WidgetMarkdown-nXPgrFZi.js → WidgetMarkdown-DrH35WSE.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetMarkdown-nXPgrFZi.js.map → WidgetMarkdown-DrH35WSE.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetRecordAudio-C6urheNU.js → WidgetRecordAudio-DL4kMpXw.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetRecordAudio-C6urheNU.js.map → WidgetRecordAudio-DL4kMpXw.js.map} +1 -1
- comfyui_frontend_package/static/assets/WidgetSelect-Bk32AcQe.js +2 -0
- comfyui_frontend_package/static/assets/WidgetSelect-Bk32AcQe.js.map +1 -0
- comfyui_frontend_package/static/assets/{WidgetSelect.vue_vue_type_script_setup_true_lang-DTcBUlhn.js → WidgetSelect.vue_vue_type_script_setup_true_lang-CHjOuVyH.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetSelect.vue_vue_type_script_setup_true_lang-DTcBUlhn.js.map → WidgetSelect.vue_vue_type_script_setup_true_lang-CHjOuVyH.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetTextarea-DuXhEnsH.js → WidgetTextarea-orpeeVx4.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetTextarea-DuXhEnsH.js.map → WidgetTextarea-orpeeVx4.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetToggleSwitch-BTeDQHuf.js → WidgetToggleSwitch-CSN313_V.js} +2 -2
- comfyui_frontend_package/static/assets/{WidgetToggleSwitch-BTeDQHuf.js.map → WidgetToggleSwitch-CSN313_V.js.map} +1 -1
- comfyui_frontend_package/static/assets/{WidgetWithControl.vue_vue_type_script_setup_true_lang-DFvQ9Mdf.js → WidgetWithControl.vue_vue_type_script_setup_true_lang-CU_cmbAA.js} +3 -3
- comfyui_frontend_package/static/assets/{WidgetWithControl.vue_vue_type_script_setup_true_lang-DFvQ9Mdf.js.map → WidgetWithControl.vue_vue_type_script_setup_true_lang-CU_cmbAA.js.map} +1 -1
- comfyui_frontend_package/static/assets/{audioService-B43wn81n.js → audioService-DvqSt3rU.js} +2 -2
- comfyui_frontend_package/static/assets/{audioService-B43wn81n.js.map → audioService-DvqSt3rU.js.map} +1 -1
- comfyui_frontend_package/static/assets/{audioUtils-iqnmct8N.js → audioUtils-bxVioEE3.js} +2 -2
- comfyui_frontend_package/static/assets/{audioUtils-iqnmct8N.js.map → audioUtils-bxVioEE3.js.map} +1 -1
- comfyui_frontend_package/static/assets/{index-FoJ8Eu4a.js → index-BODInyrK.js} +21 -21
- comfyui_frontend_package/static/assets/{index-FoJ8Eu4a.js.map → index-BODInyrK.js.map} +1 -1
- comfyui_frontend_package/static/assets/{index-BbFKUlCt.js → index-CyS0uSKu.js} +2 -2
- comfyui_frontend_package/static/assets/{index-BbFKUlCt.js.map → index-CyS0uSKu.js.map} +1 -1
- comfyui_frontend_package/static/assets/{index-B2FA5n0E.js → index-fwtcK193.js} +2 -2
- comfyui_frontend_package/static/assets/{index-B2FA5n0E.js.map → index-fwtcK193.js.map} +1 -1
- comfyui_frontend_package/static/assets/{keybindingService-D_lPZZ7u.js → keybindingService-DR_nPGKY.js} +2 -2
- comfyui_frontend_package/static/assets/{keybindingService-D_lPZZ7u.js.map → keybindingService-DR_nPGKY.js.map} +1 -1
- comfyui_frontend_package/static/index.html +1 -1
- {comfyui_frontend_package-1.37.1.dist-info → comfyui_frontend_package-1.37.2.dist-info}/METADATA +1 -1
- {comfyui_frontend_package-1.37.1.dist-info → comfyui_frontend_package-1.37.2.dist-info}/RECORD +91 -91
- comfyui_frontend_package/static/assets/Load3D-Cu5zG2Cw.js.map +0 -1
- comfyui_frontend_package/static/assets/SubscriptionRequiredDialogContent-CY-BY6v5.js +0 -2
- comfyui_frontend_package/static/assets/SubscriptionRequiredDialogContent-CY-BY6v5.js.map +0 -1
- comfyui_frontend_package/static/assets/WidgetInputNumber-BTFa3T0H.js +0 -2
- comfyui_frontend_package/static/assets/WidgetInputNumber-BTFa3T0H.js.map +0 -1
- comfyui_frontend_package/static/assets/WidgetLegacy-B8P9bOsC.js.map +0 -1
- comfyui_frontend_package/static/assets/WidgetSelect-VznDfSeg.js +0 -2
- comfyui_frontend_package/static/assets/WidgetSelect-VznDfSeg.js.map +0 -1
- {comfyui_frontend_package-1.37.1.dist-info → comfyui_frontend_package-1.37.2.dist-info}/WHEEL +0 -0
- {comfyui_frontend_package-1.37.1.dist-info → comfyui_frontend_package-1.37.2.dist-info}/top_level.txt +0 -0
comfyui_frontend_package/static/assets/{KeybindingPanel-pmyMPZHn.js → KeybindingPanel-CM_PwegN.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var L=Object.defineProperty;var t=(K,c)=>L(K,"name",{value:c,configurable:!0});import{bq as V,E as S,c as k,d as u,F as N,y as R,z as l,q as x,k as n,A as h,u as f,br as s,r as b,du as G,h as J,j as $,l as Q,e as r,I as W,s as X}from"./vendor-other-BxP-0xn6.js";import{w as U,u as Y,ad as Z,ae as w,y as P,e as ee,s as ie,af as ae}from"./vendor-primevue-rR0TB_Js.js";import{u as ne}from"./vendor-vue-BEnTqVKr.js";import{bs as le,z as se,n as te,_ as p,S as de,dl as oe,cz as re,cy 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{bq as V,E as S,c as k,d as u,F as N,y as R,z as l,q as x,k as n,A as h,u as f,br as s,r as b,du as G,h as J,j as $,l as Q,e as r,I as W,s as X}from"./vendor-other-BxP-0xn6.js";import{w as U,u as Y,ad as Z,ae as w,y as P,e as ee,s as ie,af as ae}from"./vendor-primevue-rR0TB_Js.js";import{u as ne}from"./vendor-vue-BEnTqVKr.js";import{bs as le,z as se,n as te,_ as p,S as de,dl as oe,cz as re,cy as ue,d as ce}from"./index-BODInyrK.js";import{u as ye}from"./keybindingService-DR_nPGKY.js";import"./vendor-xterm-CWYFmgbN.js";import"./vendor-three-BsnVSA6y.js";import"./vendor-tiptap-4vvRsqpM.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(U),{severity:d.isModified?"info":"secondary"},{default:n(()=>[h(f(_),1)]),_:2},1032,["severity"]),C<c.value.length-1?(u(),k("span",be,"+")):x("",!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(),q=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}))),B=b(null),g=b(!1),o=b(null),y=b(null),E=b(null),v=S(()=>!y.value||y.value.keybinding?.combo?.equals(o.value)||!o.value?null:d.getKeybinding(o.value));function z(e){y.value=e,o.value=e.keybinding?e.keybinding.combo:null,g.value=!0}t(z,"editKeybinding"),G(()=>{g.value&&setTimeout(()=>{E.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 A();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 A(){y.value&&o.value&&d.updateKeybindingOnCommand(new ue({commandId:y.value.id,combo:o.value}))&&await m.persistUserKeybindings(),I()}t(A,"saveKeybinding");async function D(e){d.resetKeybindingForCommand(e.id)?await m.persistUserKeybindings():console.warn(`No changes made when resetting keybinding for command: ${e.id}`)}t(D,"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:B.value,"onUpdate:selection":a[1]||(a[1]=i=>B.value=i),value:q.value,"global-filter-fields":["id","label"],filters:c.value,"selection-mode":"single","striped-rows":"",pt:{header:"px-0"},onRowDblclick:a[2]||(a[2]=i=>z(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=>z(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=>D(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:A},{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:E,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(U),{severity:"secondary",value:v.value.commandId},null,8,["value"])]),_:1})):x("",!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})}}}),Ee=ce(ke,[["__scopeId","data-v-06049058"]]);export{Ee as default};
|
|
2
|
+
//# sourceMappingURL=KeybindingPanel-CM_PwegN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeybindingPanel-pmyMPZHn.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-CM_PwegN.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 ne=Object.defineProperty;var c=(i,e)=>ne(i,"name",{value:e,configurable:!0});import{cA as R,a as V,c as Z,_ as I,W as ie,k as de,h as K,s as ue,u as J,d as Q,l as ce}from"./index-FoJ8Eu4a.js";import{b as ae,E as A,a as pe,bq as C,cF as H,cG as W,j as U,d,br as p,m as me,k as b,e as r,G as X,c as m,q as k,u,p as fe,cY as ge,cp as ve,z as $,w as q,cX as he,ew as be,r as _,A as D,f as se,o as ye,b9 as we,d8 as $e,c6 as _e,s as Y}from"./vendor-other-BxP-0xn6.js";import{i as ke,y as Me,e as oe,a as Ue}from"./vendor-primevue-rR0TB_Js.js";import{u as le}from"./vendor-vue-BEnTqVKr.js";function z(){const i=ae({get supportsPreviewMetadata(){return V.getServerFeature("supports_preview_metadata")},get maxUploadSize(){return V.getServerFeature("max_upload_size")},get supportsManagerV4(){return V.getServerFeature("extension.manager.supports_v4")},get modelUploadButtonEnabled(){return R.value.model_upload_button_enabled??V.getServerFeature("model_upload_button_enabled",!1)},get assetUpdateOptionsEnabled(){return R.value.asset_update_options_enabled??V.getServerFeature("asset_update_options_enabled",!1)},get privateModelsEnabled(){return R.value.private_models_enabled??V.getServerFeature("private_models_enabled",!1)},get onboardingSurveyEnabled(){return R.value.onboarding_survey_enabled??V.getServerFeature("onboarding_survey_enabled",!0)},get huggingfaceModelImportEnabled(){return R.value.huggingface_model_import_enabled??V.getServerFeature("huggingface_model_import_enabled",!1)}}),e=c((s,o)=>A(()=>V.getServerFeature(s,o)),"featureFlag");return{flags:pe(i),featureFlag:e}}c(z,"useFeatureFlags");const xe={class:"flex items-center gap-2 text-sm"},Se={key:0,class:"text-base-foreground"},Ce={key:1,class:"text-base-foreground"},Be={class:"truncate"},Ie={key:0,class:"icon-[lucide--check] text-base-foreground"},Fe=C({inheritAttrs:!1,__name:"SingleSelect",props:H({label:{},options:{},listMaxHeight:{default:"28rem"},popoverMinWidth:{},popoverMaxWidth:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const e=W(i,"modelValue"),{t:s}=le(),o=c(t=>{if(t==null||!i.options)return i.label??"";const n=i.options.find(l=>l.value===t);return n?n.name:i.label??""},"getLabel"),a=A(()=>{if(!i.popoverMinWidth&&!i.popoverMaxWidth)return;const t=[];return i.popoverMinWidth&&t.push(`min-width: ${i.popoverMinWidth}`),i.popoverMaxWidth&&t.push(`max-width: ${i.popoverMaxWidth}`),t.join("; ")});return(t,n)=>(d(),U(p(ke),me({modelValue:e.value,"onUpdate:modelValue":n[0]||(n[0]=l=>e.value=l)},t.$attrs,{options:t.options,"option-label":"name","option-value":"value",unstyled:"",pt:{root:c(({props:l})=>({class:["h-10 relative inline-flex cursor-pointer select-none items-center","rounded-lg","bg-secondary-background text-base-foreground","border-[2.5px] border-solid border-transparent","transition-all duration-200 ease-in-out","focus-within:border-node-component-border",{"opacity-60 cursor-default":l.disabled}]}),"root"),label:{class:"flex-1 flex items-center whitespace-nowrap pl-4 py-2 outline-hidden"},dropdown:{class:"flex shrink-0 items-center justify-center px-3 py-2"},overlay:{class:p(Z)("mt-2 p-2 rounded-lg","bg-base-background text-base-foreground","border border-solid border-border-default")},listContainer:c(()=>({style:`max-height: min(${t.listMaxHeight}, 50vh)`,class:"scrollbar-custom"}),"listContainer"),list:{class:"flex flex-col gap-0 p-0 m-0 list-none border-none text-sm"},option:c(({context:l})=>({class:p(Z)("flex items-center justify-between gap-3 px-2 py-3 rounded","hover:bg-secondary-background-hover",l.focused&&"bg-secondary-background-hover",l.selected&&"bg-secondary-background-selected hover:bg-secondary-background-selected")}),"option"),optionLabel:{class:"truncate"},optionGroupLabel:{class:"px-3 py-2 text-xs uppercase tracking-wide text-muted-foreground"},emptyMessage:{class:"px-3 py-2 text-sm text-muted-foreground"}},"aria-label":t.label||p(s)("g.singleSelectDropdown"),role:"combobox","aria-expanded":!1,"aria-haspopup":"listbox",tabindex:0}),{value:b(l=>[r("div",xe,[fe(t.$slots,"icon"),l.value!==null&&l.value!==void 0?(d(),m("span",Se,u(o(l.value)),1)):(d(),m("span",Ce,u(t.label),1))])]),dropdownicon:b(()=>n[1]||(n[1]=[r("i",{class:"icon-[lucide--chevron-down] text-muted-foreground"},null,-1)])),option:b(({option:l,selected:f})=>[r("div",{class:"flex w-full items-center justify-between gap-3",style:X(a.value)},[r("span",Be,u(l.name),1),f?(d(),m("i",Ie)):k("",!0)],4)]),_:3},16,["modelValue","options","pt","aria-label"]))}});function Ve(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(s=>s.charAt(0).toUpperCase()+s.slice(1)).join(" ")}c(Ve,"formatDisplayName");const Le=["nlf"],re=ge(()=>{const{state:i,isLoading:e,error:s,execute:o}=ve(async()=>(await V.getModelFolders()).filter(t=>!Le.includes(t.name)).map(t=>({name:Ve(t.name),value:t.name})).sort((t,n)=>t.name.localeCompare(n.name)),[],{immediate:!1,onError:c(a=>{console.error("Failed to fetch model types:",a)},"onError")});return{modelTypes:i,isLoading:e,error:s,fetchModelTypes:o}}),je={class:"flex flex-col gap-4 text-sm text-muted-foreground"},Ae={class:"flex flex-col gap-2"},De={class:"m-0"},Ee={class:"flex items-center gap-3 bg-secondary-background p-3 rounded-lg"},Re=["src","alt"],ze={class:"m-0 text-base-foreground"},Te={class:"flex flex-col gap-2"},He={class:""},We={class:"flex items-center gap-2"},qe=C({__name:"UploadModelConfirmation",props:H({metadata:{},previewImage:{}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const e=W(i,"modelValue"),{modelTypes:s,isLoading:o}=re();return(a,t)=>(d(),m("div",je,[r("div",Ae,[r("p",De,u(a.$t("assetBrowser.modelAssociatedWithLink")),1),r("div",Ee,[a.previewImage?(d(),m("img",{key:0,src:a.previewImage,alt:a.metadata?.filename||a.metadata?.name||"Model preview",class:"w-14 h-14 rounded object-cover flex-shrink-0"},null,8,Re)):k("",!0),r("p",ze,u(a.metadata?.filename||a.metadata?.name),1)])]),r("div",Te,[r("label",He,u(a.$t("assetBrowser.modelTypeSelectorLabel")),1),$(Fe,{modelValue:e.value,"onUpdate:modelValue":t[0]||(t[0]=n=>e.value=n),label:p(o)?a.$t("g.loading"):a.$t("assetBrowser.modelTypeSelectorPlaceholder"),options:p(s),disabled:p(o),"data-attr":"upload-model-step2-type-selector"},null,8,["modelValue","label","options","disabled"]),r("div",We,[t[1]||(t[1]=r("i",{class:"icon-[lucide--circle-question-mark]"},null,-1)),r("span",null,u(a.$t("assetBrowser.notSureLeaveAsIs")),1)])])]))}}),Pe={class:"relative"},Oe=["aria-label","src"],ee=C({__name:"VideoHelpDialog",props:H({videoUrl:{},ariaLabel:{default:"Help video"}},{modelValue:{type:Boolean,required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const e=W(i,"modelValue"),s=c(o=>{o.key==="Escape"&&(o.stopImmediatePropagation(),o.stopPropagation(),o.preventDefault(),e.value=!1)},"handleEscapeKey");return q(e,o=>{if(o){const a=he(document,"keydown",s,{capture:!0});be(a)}},{immediate:!0}),(o,a)=>(d(),U(p(Me),{visible:e.value,"onUpdate:visible":a[1]||(a[1]=t=>e.value=t),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",maxWidth:"800px"}},{default:b(()=>[r("div",Pe,[$(I,{variant:"textonly",size:"icon",class:"absolute top-4 right-6 z-10","aria-label":o.$t("g.close"),onClick:a[0]||(a[0]=t=>e.value=!1)},{default:b(()=>a[2]||(a[2]=[r("i",{class:"pi pi-times text-sm"},null,-1)])),_:1},8,["aria-label"]),r("video",{autoplay:"",muted:"",loop:"","aria-label":o.ariaLabel,class:"w-full rounded-lg",src:o.videoUrl},u(o.$t("g.videoFailedToLoad")),9,Oe)])]),_:1},8,["visible"]))}}),Ne={class:"flex justify-end gap-2 w-full"},Ge={key:0,class:"mr-auto flex items-center gap-2"},Ke={key:4},Ye={key:0,class:"icon-[lucide--loader-circle] animate-spin"},Xe={key:0,class:"icon-[lucide--loader-circle] animate-spin"},Je=C({__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:s}=z(),o=_(!1),a=_(!1),t=e;return(n,l)=>(d(),m("div",Ne,[n.currentStep===1&&p(s).huggingfaceModelImportEnabled?(d(),m("div",Ge,[l[10]||(l[10]=r("i",{class:"icon-[lucide--circle-question-mark] text-muted-foreground"},null,-1)),$(I,{variant:"muted-textonly",size:"sm","data-attr":"upload-model-step1-help-civitai",onClick:l[0]||(l[0]=f=>o.value=!0)},{default:b(()=>[D(u(n.$t("assetBrowser.providerCivitai")),1)]),_:1}),$(I,{variant:"muted-textonly",size:"sm","data-attr":"upload-model-step1-help-huggingface",onClick:l[1]||(l[1]=f=>a.value=!0)},{default:b(()=>[D(u(n.$t("assetBrowser.providerHuggingFace")),1)]),_:1})])):n.currentStep===1?(d(),U(I,{key:1,variant:"muted-textonly",size:"lg",class:"mr-auto underline","data-attr":"upload-model-step1-help-link",onClick:l[2]||(l[2]=f=>o.value=!0)},{default:b(()=>[l[11]||(l[11]=r("i",{class:"icon-[lucide--circle-question-mark]"},null,-1)),r("span",null,u(n.$t("assetBrowser.uploadModelHowDoIFindThis")),1)]),_:1})):k("",!0),n.currentStep===1?(d(),U(I,{key:2,variant:"muted-textonly",size:"lg","data-attr":"upload-model-step1-cancel-button",disabled:n.isFetchingMetadata||n.isUploading,onClick:l[3]||(l[3]=f=>t("close"))},{default:b(()=>[D(u(n.$t("g.cancel")),1)]),_:1},8,["disabled"])):k("",!0),n.currentStep!==1&&n.currentStep!==3?(d(),U(I,{key:3,variant:"muted-textonly",size:"lg","data-attr":`upload-model-step${n.currentStep}-back-button`,disabled:n.isFetchingMetadata||n.isUploading,onClick:l[4]||(l[4]=f=>t("back"))},{default:b(()=>[D(u(n.$t("g.back")),1)]),_:1},8,["data-attr","disabled"])):(d(),m("span",Ke)),n.currentStep===1?(d(),U(I,{key:5,variant:"secondary",size:"lg","data-attr":"upload-model-step1-continue-button",disabled:!n.canFetchMetadata||n.isFetchingMetadata,onClick:l[5]||(l[5]=f=>t("fetchMetadata"))},{default:b(()=>[n.isFetchingMetadata?(d(),m("i",Ye)):k("",!0),r("span",null,u(n.$t("g.continue")),1)]),_:1},8,["disabled"])):n.currentStep===2?(d(),U(I,{key:6,variant:"secondary",size:"lg","data-attr":"upload-model-step2-confirm-button",disabled:!n.canUploadModel||n.isUploading,onClick:l[6]||(l[6]=f=>t("upload"))},{default:b(()=>[n.isUploading?(d(),m("i",Xe)):k("",!0),r("span",null,u(n.$t("assetBrowser.upload")),1)]),_:1},8,["disabled"])):n.currentStep===3&&n.uploadStatus==="success"?(d(),U(I,{key:7,variant:"secondary","data-attr":"upload-model-step3-finish-button",onClick:l[7]||(l[7]=f=>t("close"))},{default:b(()=>[D(u(n.$t("assetBrowser.finish")),1)]),_:1})):k("",!0),$(ee,{modelValue:o.value,"onUpdate:modelValue":l[8]||(l[8]=f=>o.value=f),"video-url":"https://media.comfy.org/compressed_768/civitai_howto.webm","aria-label":n.$t("assetBrowser.uploadModelHelpVideo")},null,8,["modelValue","aria-label"]),$(ee,{modelValue:a.value,"onUpdate:modelValue":l[9]||(l[9]=f=>a.value=f),"video-url":"https://media.comfy.org/byom/huggingfacehowto.mp4","aria-label":n.$t("assetBrowser.uploadModelHelpVideo")},null,8,["modelValue","aria-label"])]))}}),Qe={class:"flex flex-1 flex-col gap-6 text-sm text-muted-foreground"},Ze={key:0,class:"flex flex-1 flex-col items-center justify-center gap-2"},et={class:"text-center"},tt={class:"m-0 font-bold"},at={key:1,class:"flex flex-col gap-2"},st={class:"m-0 font-bold"},ot={class:"m-0"},lt={class:"flex flex-row items-center gap-3 p-4 bg-modal-card-background rounded-lg"},rt=["src","alt"],nt={class:"flex flex-col justify-center items-start gap-1 flex-1"},it={class:"text-base-foreground m-0"},dt={class:"text-sm text-muted m-0"},ut={key:2,class:"flex flex-1 flex-col items-center justify-center gap-6"},ct={class:"text-center"},pt={class:"m-0 text-sm font-bold"},mt={key:0,class:"text-sm text-muted mb-0"},ft=C({__name:"UploadModelProgress",props:{status:{},error:{},metadata:{},modelType:{},previewImage:{}},setup(i){return(e,s)=>(d(),m("div",Qe,[e.status==="uploading"?(d(),m("div",Ze,[s[0]||(s[0]=r("i",{class:"icon-[lucide--loader-circle] animate-spin text-6xl text-muted-foreground"},null,-1)),r("div",et,[r("p",tt,u(e.$t("assetBrowser.uploadingModel")),1)])])):e.status==="success"?(d(),m("div",at,[r("p",st,u(e.$t("assetBrowser.modelUploaded")),1),r("p",ot,u(e.$t("assetBrowser.findInLibrary",{type:e.modelType})),1),r("div",lt,[e.previewImage?(d(),m("img",{key:0,src:e.previewImage,alt:e.metadata?.filename||e.metadata?.name||"Model preview",class:"w-14 h-14 rounded object-cover flex-shrink-0"},null,8,rt)):k("",!0),r("div",nt,[r("p",it,u(e.metadata?.filename||e.metadata?.name),1),r("p",dt,u(e.modelType),1)])])])):e.status==="error"?(d(),m("div",ut,[s[1]||(s[1]=r("i",{class:"icon-[lucide--x-circle] text-6xl text-error"},null,-1)),r("div",ct,[r("p",pt,u(e.$t("assetBrowser.uploadFailed")),1),e.error?(d(),m("p",mt,u(e.error),1)):k("",!0)])])):k("",!0)]))}}),gt={class:"flex flex-col justify-between h-full gap-6 text-sm"},vt={class:"flex flex-col gap-6"},ht={class:"flex flex-col gap-2"},bt={class:"m-0 text-foreground"},yt={class:"m-0"},wt={class:"m-0 text-muted-foreground"},$t={class:"inline-flex items-center gap-1 flex-wrap mt-2"},_t={class:"inline-flex items-center gap-1"},kt=["alt"],Mt={class:"inline-flex items-center gap-1"},Ut=["alt"],xt={class:"flex flex-col gap-2"},St={key:0,class:"text-xs text-error"},Ct={key:1,class:"text-foreground"},Bt={class:"font-bold italic"},It={class:"text-sm text-muted"},Ft="/assets/images/civitai.svg",Vt="https://civitai.com/models",Lt="/assets/images/hf-logo.svg",jt="https://huggingface.co",At=C({__name:"UploadModelUrlInput",props:{modelValue:{},error:{}},emits:["update:modelValue"],setup(i,{emit:e}){const s=i,o=e,a=A({get:c(()=>s.modelValue,"get"),set:c(t=>o("update:modelValue",t),"set")});return(t,n)=>{const l=se("i18n-t");return d(),m("div",gt,[r("div",vt,[r("div",ht,[r("p",bt,u(t.$t("assetBrowser.uploadModelDescription1Generic")),1),r("div",yt,[r("p",wt,u(t.$t("assetBrowser.uploadModelDescription2Generic")),1),r("span",$t,[r("span",_t,[r("img",{src:Ft,alt:t.$t("assetBrowser.providerCivitai"),class:"w-4 h-4"},null,8,kt),r("a",{href:Vt,target:"_blank",rel:"noopener noreferrer",class:"text-muted underline"},u(t.$t("assetBrowser.providerCivitai")),1),n[1]||(n[1]=r("span",null,",",-1))]),r("span",Mt,[r("img",{src:Lt,alt:t.$t("assetBrowser.providerHuggingFace"),class:"w-4 h-4"},null,8,Ut),r("a",{href:jt,target:"_blank",rel:"noopener noreferrer",class:"text-muted underline"},u(t.$t("assetBrowser.providerHuggingFace")),1)])])])]),r("div",xt,[$(p(oe),{modelValue:a.value,"onUpdate:modelValue":n[0]||(n[0]=f=>a.value=f),autofocus:"",placeholder:t.$t("assetBrowser.genericLinkPlaceholder"),class:"w-full bg-secondary-background border-0 p-4","data-attr":"upload-model-step1-url-input"},null,8,["modelValue","placeholder"]),t.error?(d(),m("p",St,u(t.error),1)):(d(),m("p",Ct,[$(l,{keypath:"assetBrowser.maxFileSize",tag:"span"},{size:b(()=>[r("span",Bt,u(t.$t("assetBrowser.maxFileSizeValue")),1)]),_:1})]))])]),r("div",It,u(t.$t("assetBrowser.uploadModelHelpFooterText")),1)])}}}),Dt={class:"flex flex-col gap-6 text-sm text-muted-foreground"},Et={class:"flex flex-col gap-2"},Rt={class:"m-0"},zt={class:"list-disc space-y-1 pl-5 mt-0"},Tt={href:"https://civitai.com/models",target:"_blank",class:"text-muted-foreground"},Ht={class:"font-bold italic"},Wt={class:"flex flex-col gap-2"},qt={class:"font-bold italic"},Pt={key:0,class:"text-xs text-error"},Ot={href:"https://civitai.com/models/10706/luisap-z-image-and-qwen-pixel-art-refiner?modelVersionId=2225295",target:"_blank",class:"text-muted-foreground"},Nt=C({__name:"UploadModelUrlInputCivitai",props:H({error:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const e=W(i,"modelValue");return(s,o)=>{const a=se("i18n-t");return d(),m("div",Dt,[r("div",Et,[r("p",Rt,u(s.$t("assetBrowser.uploadModelDescription1")),1),r("ul",zt,[r("li",null,[$(a,{keypath:"assetBrowser.uploadModelDescription2",tag:"span"},{link:b(()=>[r("a",Tt,u(s.$t("assetBrowser.uploadModelDescription2Link")),1)]),_:1})]),r("li",null,[$(a,{keypath:"assetBrowser.uploadModelDescription3",tag:"span"},{size:b(()=>[r("span",Ht,u(s.$t("assetBrowser.maxFileSizeValue")),1)]),_:1})])])]),r("div",Wt,[$(a,{keypath:"assetBrowser.civitaiLinkLabel",tag:"label",class:"mb-0"},{download:b(()=>[r("span",qt,u(s.$t("assetBrowser.civitaiLinkLabelDownload")),1)]),_:1}),$(p(oe),{modelValue:e.value,"onUpdate:modelValue":o[0]||(o[0]=t=>e.value=t),autofocus:"",placeholder:s.$t("assetBrowser.civitaiLinkPlaceholder"),class:"w-full bg-secondary-background border-0 p-4","data-attr":"upload-model-step1-url-input"},null,8,["modelValue","placeholder"]),s.error?(d(),m("p",Pt,u(s.error),1)):(d(),U(a,{key:1,keypath:"assetBrowser.civitaiLinkExample",tag:"p",class:"text-xs"},{example:b(()=>[r("strong",null,u(s.$t("assetBrowser.civitaiLinkExampleStrong")),1)]),link:b(()=>[r("a",Ot,u(s.$t("assetBrowser.civitaiLinkExampleUrl")),1)]),_:1}))])])}}}),te={type:"civitai",name:"Civitai",hostnames:["civitai.com"]},Gt={type:"huggingface",name:"Hugging Face",hostnames:["huggingface.co"]};function Kt(i,e){try{const s=new URL(i).hostname.toLowerCase();return e.hostnames.some(o=>s===o||s.endsWith(`.${o}`))}catch{return!1}}c(Kt,"validateSourceUrl");function Yt(i){const{t:e}=le(),s=ie(),o=de(),{flags:a}=z(),t=_(1),n=_(!1),l=_(!1),f=_("idle"),x=_(""),v=_({url:"",name:"",tags:[]}),y=_(),g=a.huggingfaceModelImportEnabled?[te,Gt]:[te],w=A(()=>{const B=v.value.url.trim();return B?g.find(F=>Kt(B,F))??null:null});q(()=>v.value.url,()=>{x.value=""});const E=A(()=>v.value.url.trim().length>0),T=A(()=>!!y.value);async function P(){if(!E.value)return;let B=v.value.url.trim();try{B=new URL(encodeURI(B)).toString()}catch{}if(v.value.url=B,!w.value){const h=g.map(L=>L.name).join(", ");x.value=e("assetBrowser.unsupportedUrlSource",{sources:h});return}n.value=!0;try{const h=await K.getAssetMetadata(v.value.url);if(h.filename)try{h.filename=decodeURIComponent(h.filename)}catch{}if(h.name)try{h.name=decodeURIComponent(h.name)}catch{}if(v.value.metadata=h,v.value.name=h.filename||h.name||"",v.value.previewImage=h.preview_image,h.tags&&h.tags.length>0){v.value.tags=h.tags;const L=h.tags.find(M=>i.value.some(S=>S.value===M));L&&(y.value=L)}t.value=2}catch(h){console.error("Failed to retrieve metadata:",h),x.value=h instanceof Error?h.message:ue("assetBrowser.uploadModelFailedToRetrieveMetadata","Failed to retrieve metadata. Please check the link and try again."),t.value=1}finally{n.value=!1}}c(P,"fetchMetadata");async function O(){if(!T.value)return;const B=w.value;if(!B)return x.value=e("assetBrowser.noValidSourceDetected"),!1;l.value=!0,f.value="uploading";try{const F=y.value?["models",y.value]:["models"],h=v.value.metadata?.filename||v.value.metadata?.name||"model";let L;if(v.value.previewImage)try{const M=h.split(".")[0];let S="png";const G=v.value.previewImage.match(/^data:image\/([^;]+);/);G&&(S=G[1]==="jpeg"?"jpg":G[1]),L=(await K.uploadAssetFromBase64({data:v.value.previewImage,name:`${M}_preview.${S}`,tags:["preview"]})).id}catch(M){console.error("Failed to upload preview image:",M)}if(await K.uploadAssetFromUrl({url:v.value.url,name:h,tags:F,user_metadata:{source:B.type,source_url:v.value.url,model_type:y.value},preview_id:L}),f.value="success",t.value=3,y.value){const M=o.getAllNodeProviders(y.value);await Promise.all(M.map(S=>s.updateModelsForNodeType(S.nodeDef.name)))}return!0}catch(F){return console.error("Failed to upload asset:",F),f.value="error",x.value=F instanceof Error?F.message:"Failed to upload model",t.value=3,!1}finally{l.value=!1}}c(O,"uploadModel");function N(){t.value>1&&(t.value=t.value-1)}return c(N,"goToPreviousStep"),{currentStep:t,isFetchingMetadata:n,isUploading:l,uploadStatus:f,uploadError:x,wizardData:v,selectedModelType:y,canFetchMetadata:E,canUploadModel:T,detectedSource:w,fetchMetadata:P,uploadModel:O,goToPreviousStep:N}}c(Yt,"useUploadModelWizard");const Xt={class:"upload-model-dialog flex flex-col justify-between gap-6 p-4 pt-6 border-t border-border-default"},Jt=C({__name:"UploadModelDialog",emits:["upload-success"],setup(i,{emit:e}){const{flags:s}=z(),o=J(),{modelTypes:a,fetchModelTypes:t}=re(),n=e,{currentStep:l,isFetchingMetadata:f,isUploading:x,uploadStatus:v,uploadError:y,wizardData:g,selectedModelType:w,canFetchMetadata:E,canUploadModel:T,fetchMetadata:P,uploadModel:O,goToPreviousStep:N}=Yt(a);async function B(){await P()}c(B,"handleFetchMetadata");async function F(){await O()&&n("upload-success")}c(F,"handleUploadModel");function h(){o.closeDialog({key:"upload-model"})}return c(h,"handleClose"),ye(()=>{t()}),(L,M)=>(d(),m("div",Xt,[p(l)===1&&p(s).huggingfaceModelImportEnabled?(d(),U(At,{key:0,modelValue:p(g).url,"onUpdate:modelValue":M[0]||(M[0]=S=>p(g).url=S),error:p(y),class:"flex-1"},null,8,["modelValue","error"])):p(l)===1?(d(),U(Nt,{key:1,modelValue:p(g).url,"onUpdate:modelValue":M[1]||(M[1]=S=>p(g).url=S),error:p(y)},null,8,["modelValue","error"])):p(l)===2?(d(),U(qe,{key:2,modelValue:p(w),"onUpdate:modelValue":M[2]||(M[2]=S=>we(w)?w.value=S:null),metadata:p(g).metadata,"preview-image":p(g).previewImage},null,8,["modelValue","metadata","preview-image"])):p(l)===3?(d(),U(ft,{key:3,status:p(v),error:p(y),metadata:p(g).metadata,"model-type":p(w),"preview-image":p(g).previewImage},null,8,["status","error","metadata","model-type","preview-image"])):k("",!0),$(Je,{"current-step":p(l),"is-fetching-metadata":p(f),"is-uploading":p(x),"can-fetch-metadata":p(E),"can-upload-model":p(T),"upload-status":p(v),onBack:p(N),onFetchMetadata:B,onUpload:F,onClose:h},null,8,["current-step","is-fetching-metadata","is-uploading","can-fetch-metadata","can-upload-model","upload-status","onBack"])]))}}),Qt=Q(Jt,[["__scopeId","data-v-88e3f4c1"]]),Zt=""+new URL("images/civitai.svg",import.meta.url).href,ea={class:"flex items-center gap-2 p-4 font-bold"},ta={key:0,src:Zt,class:"size-4"},aa={class:"rounded-full bg-white px-1.5 py-0 text-xxs font-inter font-semibold uppercase text-black"},sa=C({__name:"UploadModelDialogHeader",setup(i){const{flags:e}=z(),s=A(()=>e.huggingfaceModelImportEnabled?"assetBrowser.uploadModelGeneric":"assetBrowser.uploadModelFromCivitai");return(o,a)=>(d(),m("div",ea,[p(e).huggingfaceModelImportEnabled?k("",!0):(d(),m("img",ta)),r("span",null,u(o.$t(s.value)),1),r("span",aa,u(o.$t("g.beta")),1)]))}}),oa={},la={class:"flex flex-1 flex-col items-center justify-center text-base text-muted-foreground"},ra={class:"m-0 max-w-md"};function na(i,e){return d(),m("div",la,[r("p",ra,u(i.$t("assetBrowser.upgradeFeatureDescription")),1)])}c(na,"_sfc_render$1");const ia=Q(oa,[["render",na]]),da={class:"flex flex-wrap justify-end gap-2 w-full"},ua={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"},ca=C({__name:"UploadModelUpgradeModalFooter",emits:["close","subscribe"],setup(i,{emit:e}){const s=e;return(o,a)=>(d(),m("div",da,[r("a",ua,[a[2]||(a[2]=r("i",{class:"icon-[lucide--external-link]"},null,-1)),r("span",null,u(o.$t("g.learnMore")),1)]),$(I,{variant:"textonly",onClick:a[0]||(a[0]=t=>s("close"))},{default:b(()=>[D(u(o.$t("g.close")),1)]),_:1}),$(I,{variant:"secondary",onClick:a[1]||(a[1]=t=>s("subscribe"))},{default:b(()=>[D(u(o.$t("subscription.required.subscribe")),1)]),_:1})]))}}),pa={class:"flex flex-col justify-between gap-10 p-4 border-t border-border-default w-auto max-w-[min(500px,90vw)]"},ma=C({__name:"UploadModelUpgradeModal",setup(i){const e=J(),{showSubscriptionDialog:s}=ce();function o(){e.closeDialog({key:"upload-model-upgrade"})}c(o,"handleClose");function a(){s()}return c(a,"handleSubscribe"),(t,n)=>(d(),m("div",pa,[$(ia),$(ca,{onClose:o,onSubscribe:a})]))}}),fa={},ga={class:"flex items-center gap-2 p-4 font-bold"};function va(i,e){return d(),m("div",ga,[r("span",null,u(i.$t("assetBrowser.upgradeToUnlockFeature")),1)])}c(va,"_sfc_render");const ha=Q(fa,[["render",va]]);function Fa(i){const e=J(),{flags:s}=z(),o=A(()=>s.modelUploadButtonEnabled);function a(){s.privateModelsEnabled?e.showDialog({key:"upload-model",headerComponent:sa,component:Qt,props:{onUploadSuccess:c(async()=>{await i?.()},"onUploadSuccess")},dialogComponentProps:{pt:{header:"py-0! pl-0!",content:"p-0!"}}}):e.showDialog({key:"upload-model-upgrade",headerComponent:ha,component:ma,dialogComponentProps:{pt:{header:"py-0! pl-0!",content:"p-0!"}}})}return c(a,"showUploadDialog"),{isUploadButtonEnabled:o,showUploadDialog:a}}c(Fa,"useModelUpload");const ba=""+new URL("images/default-template.png",import.meta.url).href;function ya(i,e,s={}){const{immediate:o=!0,...a}=s,t=typeof window<"u"&&"IntersectionObserver"in window,n=_(!1);let l=null;const f=c(()=>{l&&(l.disconnect(),l=null)},"cleanup"),x=c(()=>{f(),!(!t||!i.value)&&(l=new IntersectionObserver(y=>{n.value=y.some(g=>g.isIntersecting),e(y,l)},a),l.observe(i.value))},"observe"),v=c(()=>{l&&i.value&&l.unobserve(i.value)},"unobserve");return o&&q(i,x,{immediate:!0,flush:"post"}),$e(f),{isSupported:t,isIntersecting:n,observe:x,unobserve:v,cleanup:f}}c(ya,"useIntersectionObserver");class wa{static{c(this,"MediaCacheService")}cache=ae(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(),s=[];for(const[o,a]of Array.from(this.cache.entries()))e-a.lastAccessed>this.maxAge&&(a.objectUrl?(this.urlRefCount.get(a.objectUrl)||0)===0&&(URL.revokeObjectURL(a.objectUrl),this.urlRefCount.delete(a.objectUrl),s.push(o)):s.push(o));if(s.forEach(o=>this.cache.delete(o)),this.cache.size>this.maxSize){const o=Array.from(this.cache.entries());o.sort((n,l)=>n[1].lastAccessed-l[1].lastAccessed);let a=0;const t=this.cache.size-this.maxSize;for(const[n,l]of o){if(a>=t)break;l.objectUrl?(this.urlRefCount.get(l.objectUrl)||0)===0&&(URL.revokeObjectURL(l.objectUrl),this.urlRefCount.delete(l.objectUrl),this.cache.delete(n),a++):(this.cache.delete(n),a++)}}}async getCachedMedia(e){let s=this.cache.get(e);if(s)return s.lastAccessed=Date.now(),s;s={src:e,isLoading:!0,lastAccessed:Date.now()},this.cache.set(e,s);try{const o=await fetch(e,{cache:"force-cache"});if(!o.ok)throw new Error(`Failed to fetch: ${o.status}`);const a=await o.blob(),t=URL.createObjectURL(a),n={src:e,blob:a,objectUrl:t,isLoading:!1,lastAccessed:Date.now()};return this.cache.set(e,n),n}catch(o){console.warn("Failed to cache media:",e,o);const a={src:e,error:!0,isLoading:!1,lastAccessed:Date.now()};return this.cache.set(e,a),a}}acquireUrl(e){const s=this.cache.get(e);if(s?.objectUrl){const o=this.urlRefCount.get(s.objectUrl)||0;return this.urlRefCount.set(s.objectUrl,o+1),s.objectUrl}}releaseUrl(e){const s=this.cache.get(e);if(s?.objectUrl){const o=(this.urlRefCount.get(s.objectUrl)||1)-1;o<=0?(URL.revokeObjectURL(s.objectUrl),this.urlRefCount.delete(s.objectUrl),this.cache.delete(e)):this.urlRefCount.set(s.objectUrl,o)}}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 j=null;function $a(i){return j||(j=new wa(i)),{getCachedMedia:c(t=>j.getCachedMedia(t),"getCachedMedia"),clearCache:c(()=>j.clearCache(),"clearCache"),acquireUrl:c(t=>j.acquireUrl(t),"acquireUrl"),releaseUrl:c(t=>j.releaseUrl(t),"releaseUrl"),cache:j.cache}}c($a,"useMediaCache");typeof window<"u"&&window.addEventListener("beforeunload",()=>{j&&j.destroy()});const _a=["src","alt"],ka={key:2,class:"absolute inset-0 flex items-center justify-center"},Ma=["alt"],Va=C({__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=_(null),s=_(!1),o=_(!1),a=_(!1),t=_(void 0),{getCachedMedia:n,acquireUrl:l,releaseUrl:f}=$a();ya(e,g=>{const w=g[0];s.value=w?.isIntersecting??!1},{rootMargin:i.rootMargin,threshold:.1});const x=A(()=>s.value);q(x,async g=>{if(g&&i.src&&!t.value&&!a.value)try{const w=await n(i.src);if(w.error)a.value=!0;else if(w.objectUrl){const E=l(i.src);t.value=E||w.objectUrl}else t.value=i.src}catch(w){console.warn("Failed to load cached media:",w),t.value=i.src}else g||(t.value?.startsWith("blob:")&&f(i.src),o.value=!1,t.value=void 0,a.value=!1)},{immediate:!0});const v=c(()=>{o.value=!0,a.value=!1},"onImageLoad"),y=c(()=>{a.value=!0,o.value=!1},"onImageError");return _e(()=>{t.value?.startsWith("blob:")&&f(i.src)}),(g,w)=>(d(),m("div",{ref_key:"containerRef",ref:e,class:Y(["relative flex h-full w-full items-center justify-center overflow-hidden",g.containerClass])},[o.value?k("",!0):(d(),U(p(Ue),{key:0,width:"100%",height:"100%",class:"absolute inset-0"})),t.value?(d(),m("img",{key:1,src:t.value,alt:g.alt,draggable:"false",class:Y(g.imageClass),style:X(g.imageStyle),onLoad:v,onError:y},null,46,_a)):k("",!0),a.value?(d(),m("div",ka,[r("img",{src:ba,alt:g.alt,draggable:"false",class:Y(g.imageClass),style:X(g.imageStyle)},null,14,Ma)])):k("",!0)],2))}});export{Fe as _,Fa as a,ba as b,Va as c,ya as d,z as u};
|
|
2
|
-
//# sourceMappingURL=LazyImage.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
var ne=Object.defineProperty;var c=(i,e)=>ne(i,"name",{value:e,configurable:!0});import{cA as R,a as V,c as Z,_ as I,W as ie,k as de,h as K,s as ue,u as J,d as Q,l as ce}from"./index-BODInyrK.js";import{b as ae,E as A,a as pe,bq as C,cF as H,cG as W,j as U,d,br as p,m as me,k as b,e as r,G as X,c as m,q as k,u,p as fe,cY as ge,cp as ve,z as $,w as q,cX as he,ew as be,r as _,A as D,f as se,o as ye,b9 as we,d8 as $e,c6 as _e,s as Y}from"./vendor-other-BxP-0xn6.js";import{i as ke,y as Me,e as oe,a as Ue}from"./vendor-primevue-rR0TB_Js.js";import{u as le}from"./vendor-vue-BEnTqVKr.js";function z(){const i=ae({get supportsPreviewMetadata(){return V.getServerFeature("supports_preview_metadata")},get maxUploadSize(){return V.getServerFeature("max_upload_size")},get supportsManagerV4(){return V.getServerFeature("extension.manager.supports_v4")},get modelUploadButtonEnabled(){return R.value.model_upload_button_enabled??V.getServerFeature("model_upload_button_enabled",!1)},get assetUpdateOptionsEnabled(){return R.value.asset_update_options_enabled??V.getServerFeature("asset_update_options_enabled",!1)},get privateModelsEnabled(){return R.value.private_models_enabled??V.getServerFeature("private_models_enabled",!1)},get onboardingSurveyEnabled(){return R.value.onboarding_survey_enabled??V.getServerFeature("onboarding_survey_enabled",!0)},get huggingfaceModelImportEnabled(){return R.value.huggingface_model_import_enabled??V.getServerFeature("huggingface_model_import_enabled",!1)}}),e=c((s,o)=>A(()=>V.getServerFeature(s,o)),"featureFlag");return{flags:pe(i),featureFlag:e}}c(z,"useFeatureFlags");const xe={class:"flex items-center gap-2 text-sm"},Se={key:0,class:"text-base-foreground"},Ce={key:1,class:"text-base-foreground"},Be={class:"truncate"},Ie={key:0,class:"icon-[lucide--check] text-base-foreground"},Fe=C({inheritAttrs:!1,__name:"SingleSelect",props:H({label:{},options:{},listMaxHeight:{default:"28rem"},popoverMinWidth:{},popoverMaxWidth:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const e=W(i,"modelValue"),{t:s}=le(),o=c(t=>{if(t==null||!i.options)return i.label??"";const n=i.options.find(l=>l.value===t);return n?n.name:i.label??""},"getLabel"),a=A(()=>{if(!i.popoverMinWidth&&!i.popoverMaxWidth)return;const t=[];return i.popoverMinWidth&&t.push(`min-width: ${i.popoverMinWidth}`),i.popoverMaxWidth&&t.push(`max-width: ${i.popoverMaxWidth}`),t.join("; ")});return(t,n)=>(d(),U(p(ke),me({modelValue:e.value,"onUpdate:modelValue":n[0]||(n[0]=l=>e.value=l)},t.$attrs,{options:t.options,"option-label":"name","option-value":"value",unstyled:"",pt:{root:c(({props:l})=>({class:["h-10 relative inline-flex cursor-pointer select-none items-center","rounded-lg","bg-secondary-background text-base-foreground","border-[2.5px] border-solid border-transparent","transition-all duration-200 ease-in-out","focus-within:border-node-component-border",{"opacity-60 cursor-default":l.disabled}]}),"root"),label:{class:"flex-1 flex items-center whitespace-nowrap pl-4 py-2 outline-hidden"},dropdown:{class:"flex shrink-0 items-center justify-center px-3 py-2"},overlay:{class:p(Z)("mt-2 p-2 rounded-lg","bg-base-background text-base-foreground","border border-solid border-border-default")},listContainer:c(()=>({style:`max-height: min(${t.listMaxHeight}, 50vh)`,class:"scrollbar-custom"}),"listContainer"),list:{class:"flex flex-col gap-0 p-0 m-0 list-none border-none text-sm"},option:c(({context:l})=>({class:p(Z)("flex items-center justify-between gap-3 px-2 py-3 rounded","hover:bg-secondary-background-hover",l.focused&&"bg-secondary-background-hover",l.selected&&"bg-secondary-background-selected hover:bg-secondary-background-selected")}),"option"),optionLabel:{class:"truncate"},optionGroupLabel:{class:"px-3 py-2 text-xs uppercase tracking-wide text-muted-foreground"},emptyMessage:{class:"px-3 py-2 text-sm text-muted-foreground"}},"aria-label":t.label||p(s)("g.singleSelectDropdown"),role:"combobox","aria-expanded":!1,"aria-haspopup":"listbox",tabindex:0}),{value:b(l=>[r("div",xe,[fe(t.$slots,"icon"),l.value!==null&&l.value!==void 0?(d(),m("span",Se,u(o(l.value)),1)):(d(),m("span",Ce,u(t.label),1))])]),dropdownicon:b(()=>n[1]||(n[1]=[r("i",{class:"icon-[lucide--chevron-down] text-muted-foreground"},null,-1)])),option:b(({option:l,selected:f})=>[r("div",{class:"flex w-full items-center justify-between gap-3",style:X(a.value)},[r("span",Be,u(l.name),1),f?(d(),m("i",Ie)):k("",!0)],4)]),_:3},16,["modelValue","options","pt","aria-label"]))}});function Ve(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(s=>s.charAt(0).toUpperCase()+s.slice(1)).join(" ")}c(Ve,"formatDisplayName");const Le=["nlf"],re=ge(()=>{const{state:i,isLoading:e,error:s,execute:o}=ve(async()=>(await V.getModelFolders()).filter(t=>!Le.includes(t.name)).map(t=>({name:Ve(t.name),value:t.name})).sort((t,n)=>t.name.localeCompare(n.name)),[],{immediate:!1,onError:c(a=>{console.error("Failed to fetch model types:",a)},"onError")});return{modelTypes:i,isLoading:e,error:s,fetchModelTypes:o}}),je={class:"flex flex-col gap-4 text-sm text-muted-foreground"},Ae={class:"flex flex-col gap-2"},De={class:"m-0"},Ee={class:"flex items-center gap-3 bg-secondary-background p-3 rounded-lg"},Re=["src","alt"],ze={class:"m-0 text-base-foreground"},Te={class:"flex flex-col gap-2"},He={class:""},We={class:"flex items-center gap-2"},qe=C({__name:"UploadModelConfirmation",props:H({metadata:{},previewImage:{}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const e=W(i,"modelValue"),{modelTypes:s,isLoading:o}=re();return(a,t)=>(d(),m("div",je,[r("div",Ae,[r("p",De,u(a.$t("assetBrowser.modelAssociatedWithLink")),1),r("div",Ee,[a.previewImage?(d(),m("img",{key:0,src:a.previewImage,alt:a.metadata?.filename||a.metadata?.name||"Model preview",class:"w-14 h-14 rounded object-cover flex-shrink-0"},null,8,Re)):k("",!0),r("p",ze,u(a.metadata?.filename||a.metadata?.name),1)])]),r("div",Te,[r("label",He,u(a.$t("assetBrowser.modelTypeSelectorLabel")),1),$(Fe,{modelValue:e.value,"onUpdate:modelValue":t[0]||(t[0]=n=>e.value=n),label:p(o)?a.$t("g.loading"):a.$t("assetBrowser.modelTypeSelectorPlaceholder"),options:p(s),disabled:p(o),"data-attr":"upload-model-step2-type-selector"},null,8,["modelValue","label","options","disabled"]),r("div",We,[t[1]||(t[1]=r("i",{class:"icon-[lucide--circle-question-mark]"},null,-1)),r("span",null,u(a.$t("assetBrowser.notSureLeaveAsIs")),1)])])]))}}),Pe={class:"relative"},Oe=["aria-label","src"],ee=C({__name:"VideoHelpDialog",props:H({videoUrl:{},ariaLabel:{default:"Help video"}},{modelValue:{type:Boolean,required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const e=W(i,"modelValue"),s=c(o=>{o.key==="Escape"&&(o.stopImmediatePropagation(),o.stopPropagation(),o.preventDefault(),e.value=!1)},"handleEscapeKey");return q(e,o=>{if(o){const a=he(document,"keydown",s,{capture:!0});be(a)}},{immediate:!0}),(o,a)=>(d(),U(p(Me),{visible:e.value,"onUpdate:visible":a[1]||(a[1]=t=>e.value=t),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",maxWidth:"800px"}},{default:b(()=>[r("div",Pe,[$(I,{variant:"textonly",size:"icon",class:"absolute top-4 right-6 z-10","aria-label":o.$t("g.close"),onClick:a[0]||(a[0]=t=>e.value=!1)},{default:b(()=>a[2]||(a[2]=[r("i",{class:"pi pi-times text-sm"},null,-1)])),_:1},8,["aria-label"]),r("video",{autoplay:"",muted:"",loop:"","aria-label":o.ariaLabel,class:"w-full rounded-lg",src:o.videoUrl},u(o.$t("g.videoFailedToLoad")),9,Oe)])]),_:1},8,["visible"]))}}),Ne={class:"flex justify-end gap-2 w-full"},Ge={key:0,class:"mr-auto flex items-center gap-2"},Ke={key:4},Ye={key:0,class:"icon-[lucide--loader-circle] animate-spin"},Xe={key:0,class:"icon-[lucide--loader-circle] animate-spin"},Je=C({__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:s}=z(),o=_(!1),a=_(!1),t=e;return(n,l)=>(d(),m("div",Ne,[n.currentStep===1&&p(s).huggingfaceModelImportEnabled?(d(),m("div",Ge,[l[10]||(l[10]=r("i",{class:"icon-[lucide--circle-question-mark] text-muted-foreground"},null,-1)),$(I,{variant:"muted-textonly",size:"sm","data-attr":"upload-model-step1-help-civitai",onClick:l[0]||(l[0]=f=>o.value=!0)},{default:b(()=>[D(u(n.$t("assetBrowser.providerCivitai")),1)]),_:1}),$(I,{variant:"muted-textonly",size:"sm","data-attr":"upload-model-step1-help-huggingface",onClick:l[1]||(l[1]=f=>a.value=!0)},{default:b(()=>[D(u(n.$t("assetBrowser.providerHuggingFace")),1)]),_:1})])):n.currentStep===1?(d(),U(I,{key:1,variant:"muted-textonly",size:"lg",class:"mr-auto underline","data-attr":"upload-model-step1-help-link",onClick:l[2]||(l[2]=f=>o.value=!0)},{default:b(()=>[l[11]||(l[11]=r("i",{class:"icon-[lucide--circle-question-mark]"},null,-1)),r("span",null,u(n.$t("assetBrowser.uploadModelHowDoIFindThis")),1)]),_:1})):k("",!0),n.currentStep===1?(d(),U(I,{key:2,variant:"muted-textonly",size:"lg","data-attr":"upload-model-step1-cancel-button",disabled:n.isFetchingMetadata||n.isUploading,onClick:l[3]||(l[3]=f=>t("close"))},{default:b(()=>[D(u(n.$t("g.cancel")),1)]),_:1},8,["disabled"])):k("",!0),n.currentStep!==1&&n.currentStep!==3?(d(),U(I,{key:3,variant:"muted-textonly",size:"lg","data-attr":`upload-model-step${n.currentStep}-back-button`,disabled:n.isFetchingMetadata||n.isUploading,onClick:l[4]||(l[4]=f=>t("back"))},{default:b(()=>[D(u(n.$t("g.back")),1)]),_:1},8,["data-attr","disabled"])):(d(),m("span",Ke)),n.currentStep===1?(d(),U(I,{key:5,variant:"secondary",size:"lg","data-attr":"upload-model-step1-continue-button",disabled:!n.canFetchMetadata||n.isFetchingMetadata,onClick:l[5]||(l[5]=f=>t("fetchMetadata"))},{default:b(()=>[n.isFetchingMetadata?(d(),m("i",Ye)):k("",!0),r("span",null,u(n.$t("g.continue")),1)]),_:1},8,["disabled"])):n.currentStep===2?(d(),U(I,{key:6,variant:"secondary",size:"lg","data-attr":"upload-model-step2-confirm-button",disabled:!n.canUploadModel||n.isUploading,onClick:l[6]||(l[6]=f=>t("upload"))},{default:b(()=>[n.isUploading?(d(),m("i",Xe)):k("",!0),r("span",null,u(n.$t("assetBrowser.upload")),1)]),_:1},8,["disabled"])):n.currentStep===3&&n.uploadStatus==="success"?(d(),U(I,{key:7,variant:"secondary","data-attr":"upload-model-step3-finish-button",onClick:l[7]||(l[7]=f=>t("close"))},{default:b(()=>[D(u(n.$t("assetBrowser.finish")),1)]),_:1})):k("",!0),$(ee,{modelValue:o.value,"onUpdate:modelValue":l[8]||(l[8]=f=>o.value=f),"video-url":"https://media.comfy.org/compressed_768/civitai_howto.webm","aria-label":n.$t("assetBrowser.uploadModelHelpVideo")},null,8,["modelValue","aria-label"]),$(ee,{modelValue:a.value,"onUpdate:modelValue":l[9]||(l[9]=f=>a.value=f),"video-url":"https://media.comfy.org/byom/huggingfacehowto.mp4","aria-label":n.$t("assetBrowser.uploadModelHelpVideo")},null,8,["modelValue","aria-label"])]))}}),Qe={class:"flex flex-1 flex-col gap-6 text-sm text-muted-foreground"},Ze={key:0,class:"flex flex-1 flex-col items-center justify-center gap-2"},et={class:"text-center"},tt={class:"m-0 font-bold"},at={key:1,class:"flex flex-col gap-2"},st={class:"m-0 font-bold"},ot={class:"m-0"},lt={class:"flex flex-row items-center gap-3 p-4 bg-modal-card-background rounded-lg"},rt=["src","alt"],nt={class:"flex flex-col justify-center items-start gap-1 flex-1"},it={class:"text-base-foreground m-0"},dt={class:"text-sm text-muted m-0"},ut={key:2,class:"flex flex-1 flex-col items-center justify-center gap-6"},ct={class:"text-center"},pt={class:"m-0 text-sm font-bold"},mt={key:0,class:"text-sm text-muted mb-0"},ft=C({__name:"UploadModelProgress",props:{status:{},error:{},metadata:{},modelType:{},previewImage:{}},setup(i){return(e,s)=>(d(),m("div",Qe,[e.status==="uploading"?(d(),m("div",Ze,[s[0]||(s[0]=r("i",{class:"icon-[lucide--loader-circle] animate-spin text-6xl text-muted-foreground"},null,-1)),r("div",et,[r("p",tt,u(e.$t("assetBrowser.uploadingModel")),1)])])):e.status==="success"?(d(),m("div",at,[r("p",st,u(e.$t("assetBrowser.modelUploaded")),1),r("p",ot,u(e.$t("assetBrowser.findInLibrary",{type:e.modelType})),1),r("div",lt,[e.previewImage?(d(),m("img",{key:0,src:e.previewImage,alt:e.metadata?.filename||e.metadata?.name||"Model preview",class:"w-14 h-14 rounded object-cover flex-shrink-0"},null,8,rt)):k("",!0),r("div",nt,[r("p",it,u(e.metadata?.filename||e.metadata?.name),1),r("p",dt,u(e.modelType),1)])])])):e.status==="error"?(d(),m("div",ut,[s[1]||(s[1]=r("i",{class:"icon-[lucide--x-circle] text-6xl text-error"},null,-1)),r("div",ct,[r("p",pt,u(e.$t("assetBrowser.uploadFailed")),1),e.error?(d(),m("p",mt,u(e.error),1)):k("",!0)])])):k("",!0)]))}}),gt={class:"flex flex-col justify-between h-full gap-6 text-sm"},vt={class:"flex flex-col gap-6"},ht={class:"flex flex-col gap-2"},bt={class:"m-0 text-foreground"},yt={class:"m-0"},wt={class:"m-0 text-muted-foreground"},$t={class:"inline-flex items-center gap-1 flex-wrap mt-2"},_t={class:"inline-flex items-center gap-1"},kt=["alt"],Mt={class:"inline-flex items-center gap-1"},Ut=["alt"],xt={class:"flex flex-col gap-2"},St={key:0,class:"text-xs text-error"},Ct={key:1,class:"text-foreground"},Bt={class:"font-bold italic"},It={class:"text-sm text-muted"},Ft="/assets/images/civitai.svg",Vt="https://civitai.com/models",Lt="/assets/images/hf-logo.svg",jt="https://huggingface.co",At=C({__name:"UploadModelUrlInput",props:{modelValue:{},error:{}},emits:["update:modelValue"],setup(i,{emit:e}){const s=i,o=e,a=A({get:c(()=>s.modelValue,"get"),set:c(t=>o("update:modelValue",t),"set")});return(t,n)=>{const l=se("i18n-t");return d(),m("div",gt,[r("div",vt,[r("div",ht,[r("p",bt,u(t.$t("assetBrowser.uploadModelDescription1Generic")),1),r("div",yt,[r("p",wt,u(t.$t("assetBrowser.uploadModelDescription2Generic")),1),r("span",$t,[r("span",_t,[r("img",{src:Ft,alt:t.$t("assetBrowser.providerCivitai"),class:"w-4 h-4"},null,8,kt),r("a",{href:Vt,target:"_blank",rel:"noopener noreferrer",class:"text-muted underline"},u(t.$t("assetBrowser.providerCivitai")),1),n[1]||(n[1]=r("span",null,",",-1))]),r("span",Mt,[r("img",{src:Lt,alt:t.$t("assetBrowser.providerHuggingFace"),class:"w-4 h-4"},null,8,Ut),r("a",{href:jt,target:"_blank",rel:"noopener noreferrer",class:"text-muted underline"},u(t.$t("assetBrowser.providerHuggingFace")),1)])])])]),r("div",xt,[$(p(oe),{modelValue:a.value,"onUpdate:modelValue":n[0]||(n[0]=f=>a.value=f),autofocus:"",placeholder:t.$t("assetBrowser.genericLinkPlaceholder"),class:"w-full bg-secondary-background border-0 p-4","data-attr":"upload-model-step1-url-input"},null,8,["modelValue","placeholder"]),t.error?(d(),m("p",St,u(t.error),1)):(d(),m("p",Ct,[$(l,{keypath:"assetBrowser.maxFileSize",tag:"span"},{size:b(()=>[r("span",Bt,u(t.$t("assetBrowser.maxFileSizeValue")),1)]),_:1})]))])]),r("div",It,u(t.$t("assetBrowser.uploadModelHelpFooterText")),1)])}}}),Dt={class:"flex flex-col gap-6 text-sm text-muted-foreground"},Et={class:"flex flex-col gap-2"},Rt={class:"m-0"},zt={class:"list-disc space-y-1 pl-5 mt-0"},Tt={href:"https://civitai.com/models",target:"_blank",class:"text-muted-foreground"},Ht={class:"font-bold italic"},Wt={class:"flex flex-col gap-2"},qt={class:"font-bold italic"},Pt={key:0,class:"text-xs text-error"},Ot={href:"https://civitai.com/models/10706/luisap-z-image-and-qwen-pixel-art-refiner?modelVersionId=2225295",target:"_blank",class:"text-muted-foreground"},Nt=C({__name:"UploadModelUrlInputCivitai",props:H({error:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const e=W(i,"modelValue");return(s,o)=>{const a=se("i18n-t");return d(),m("div",Dt,[r("div",Et,[r("p",Rt,u(s.$t("assetBrowser.uploadModelDescription1")),1),r("ul",zt,[r("li",null,[$(a,{keypath:"assetBrowser.uploadModelDescription2",tag:"span"},{link:b(()=>[r("a",Tt,u(s.$t("assetBrowser.uploadModelDescription2Link")),1)]),_:1})]),r("li",null,[$(a,{keypath:"assetBrowser.uploadModelDescription3",tag:"span"},{size:b(()=>[r("span",Ht,u(s.$t("assetBrowser.maxFileSizeValue")),1)]),_:1})])])]),r("div",Wt,[$(a,{keypath:"assetBrowser.civitaiLinkLabel",tag:"label",class:"mb-0"},{download:b(()=>[r("span",qt,u(s.$t("assetBrowser.civitaiLinkLabelDownload")),1)]),_:1}),$(p(oe),{modelValue:e.value,"onUpdate:modelValue":o[0]||(o[0]=t=>e.value=t),autofocus:"",placeholder:s.$t("assetBrowser.civitaiLinkPlaceholder"),class:"w-full bg-secondary-background border-0 p-4","data-attr":"upload-model-step1-url-input"},null,8,["modelValue","placeholder"]),s.error?(d(),m("p",Pt,u(s.error),1)):(d(),U(a,{key:1,keypath:"assetBrowser.civitaiLinkExample",tag:"p",class:"text-xs"},{example:b(()=>[r("strong",null,u(s.$t("assetBrowser.civitaiLinkExampleStrong")),1)]),link:b(()=>[r("a",Ot,u(s.$t("assetBrowser.civitaiLinkExampleUrl")),1)]),_:1}))])])}}}),te={type:"civitai",name:"Civitai",hostnames:["civitai.com"]},Gt={type:"huggingface",name:"Hugging Face",hostnames:["huggingface.co"]};function Kt(i,e){try{const s=new URL(i).hostname.toLowerCase();return e.hostnames.some(o=>s===o||s.endsWith(`.${o}`))}catch{return!1}}c(Kt,"validateSourceUrl");function Yt(i){const{t:e}=le(),s=ie(),o=de(),{flags:a}=z(),t=_(1),n=_(!1),l=_(!1),f=_("idle"),x=_(""),v=_({url:"",name:"",tags:[]}),y=_(),g=a.huggingfaceModelImportEnabled?[te,Gt]:[te],w=A(()=>{const B=v.value.url.trim();return B?g.find(F=>Kt(B,F))??null:null});q(()=>v.value.url,()=>{x.value=""});const E=A(()=>v.value.url.trim().length>0),T=A(()=>!!y.value);async function P(){if(!E.value)return;let B=v.value.url.trim();try{B=new URL(encodeURI(B)).toString()}catch{}if(v.value.url=B,!w.value){const h=g.map(L=>L.name).join(", ");x.value=e("assetBrowser.unsupportedUrlSource",{sources:h});return}n.value=!0;try{const h=await K.getAssetMetadata(v.value.url);if(h.filename)try{h.filename=decodeURIComponent(h.filename)}catch{}if(h.name)try{h.name=decodeURIComponent(h.name)}catch{}if(v.value.metadata=h,v.value.name=h.filename||h.name||"",v.value.previewImage=h.preview_image,h.tags&&h.tags.length>0){v.value.tags=h.tags;const L=h.tags.find(M=>i.value.some(S=>S.value===M));L&&(y.value=L)}t.value=2}catch(h){console.error("Failed to retrieve metadata:",h),x.value=h instanceof Error?h.message:ue("assetBrowser.uploadModelFailedToRetrieveMetadata","Failed to retrieve metadata. Please check the link and try again."),t.value=1}finally{n.value=!1}}c(P,"fetchMetadata");async function O(){if(!T.value)return;const B=w.value;if(!B)return x.value=e("assetBrowser.noValidSourceDetected"),!1;l.value=!0,f.value="uploading";try{const F=y.value?["models",y.value]:["models"],h=v.value.metadata?.filename||v.value.metadata?.name||"model";let L;if(v.value.previewImage)try{const M=h.split(".")[0];let S="png";const G=v.value.previewImage.match(/^data:image\/([^;]+);/);G&&(S=G[1]==="jpeg"?"jpg":G[1]),L=(await K.uploadAssetFromBase64({data:v.value.previewImage,name:`${M}_preview.${S}`,tags:["preview"]})).id}catch(M){console.error("Failed to upload preview image:",M)}if(await K.uploadAssetFromUrl({url:v.value.url,name:h,tags:F,user_metadata:{source:B.type,source_url:v.value.url,model_type:y.value},preview_id:L}),f.value="success",t.value=3,y.value){const M=o.getAllNodeProviders(y.value);await Promise.all(M.map(S=>s.updateModelsForNodeType(S.nodeDef.name)))}return!0}catch(F){return console.error("Failed to upload asset:",F),f.value="error",x.value=F instanceof Error?F.message:"Failed to upload model",t.value=3,!1}finally{l.value=!1}}c(O,"uploadModel");function N(){t.value>1&&(t.value=t.value-1)}return c(N,"goToPreviousStep"),{currentStep:t,isFetchingMetadata:n,isUploading:l,uploadStatus:f,uploadError:x,wizardData:v,selectedModelType:y,canFetchMetadata:E,canUploadModel:T,detectedSource:w,fetchMetadata:P,uploadModel:O,goToPreviousStep:N}}c(Yt,"useUploadModelWizard");const Xt={class:"upload-model-dialog flex flex-col justify-between gap-6 p-4 pt-6 border-t border-border-default"},Jt=C({__name:"UploadModelDialog",emits:["upload-success"],setup(i,{emit:e}){const{flags:s}=z(),o=J(),{modelTypes:a,fetchModelTypes:t}=re(),n=e,{currentStep:l,isFetchingMetadata:f,isUploading:x,uploadStatus:v,uploadError:y,wizardData:g,selectedModelType:w,canFetchMetadata:E,canUploadModel:T,fetchMetadata:P,uploadModel:O,goToPreviousStep:N}=Yt(a);async function B(){await P()}c(B,"handleFetchMetadata");async function F(){await O()&&n("upload-success")}c(F,"handleUploadModel");function h(){o.closeDialog({key:"upload-model"})}return c(h,"handleClose"),ye(()=>{t()}),(L,M)=>(d(),m("div",Xt,[p(l)===1&&p(s).huggingfaceModelImportEnabled?(d(),U(At,{key:0,modelValue:p(g).url,"onUpdate:modelValue":M[0]||(M[0]=S=>p(g).url=S),error:p(y),class:"flex-1"},null,8,["modelValue","error"])):p(l)===1?(d(),U(Nt,{key:1,modelValue:p(g).url,"onUpdate:modelValue":M[1]||(M[1]=S=>p(g).url=S),error:p(y)},null,8,["modelValue","error"])):p(l)===2?(d(),U(qe,{key:2,modelValue:p(w),"onUpdate:modelValue":M[2]||(M[2]=S=>we(w)?w.value=S:null),metadata:p(g).metadata,"preview-image":p(g).previewImage},null,8,["modelValue","metadata","preview-image"])):p(l)===3?(d(),U(ft,{key:3,status:p(v),error:p(y),metadata:p(g).metadata,"model-type":p(w),"preview-image":p(g).previewImage},null,8,["status","error","metadata","model-type","preview-image"])):k("",!0),$(Je,{"current-step":p(l),"is-fetching-metadata":p(f),"is-uploading":p(x),"can-fetch-metadata":p(E),"can-upload-model":p(T),"upload-status":p(v),onBack:p(N),onFetchMetadata:B,onUpload:F,onClose:h},null,8,["current-step","is-fetching-metadata","is-uploading","can-fetch-metadata","can-upload-model","upload-status","onBack"])]))}}),Qt=Q(Jt,[["__scopeId","data-v-88e3f4c1"]]),Zt=""+new URL("images/civitai.svg",import.meta.url).href,ea={class:"flex items-center gap-2 p-4 font-bold"},ta={key:0,src:Zt,class:"size-4"},aa={class:"rounded-full bg-white px-1.5 py-0 text-xxs font-inter font-semibold uppercase text-black"},sa=C({__name:"UploadModelDialogHeader",setup(i){const{flags:e}=z(),s=A(()=>e.huggingfaceModelImportEnabled?"assetBrowser.uploadModelGeneric":"assetBrowser.uploadModelFromCivitai");return(o,a)=>(d(),m("div",ea,[p(e).huggingfaceModelImportEnabled?k("",!0):(d(),m("img",ta)),r("span",null,u(o.$t(s.value)),1),r("span",aa,u(o.$t("g.beta")),1)]))}}),oa={},la={class:"flex flex-1 flex-col items-center justify-center text-base text-muted-foreground"},ra={class:"m-0 max-w-md"};function na(i,e){return d(),m("div",la,[r("p",ra,u(i.$t("assetBrowser.upgradeFeatureDescription")),1)])}c(na,"_sfc_render$1");const ia=Q(oa,[["render",na]]),da={class:"flex flex-wrap justify-end gap-2 w-full"},ua={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"},ca=C({__name:"UploadModelUpgradeModalFooter",emits:["close","subscribe"],setup(i,{emit:e}){const s=e;return(o,a)=>(d(),m("div",da,[r("a",ua,[a[2]||(a[2]=r("i",{class:"icon-[lucide--external-link]"},null,-1)),r("span",null,u(o.$t("g.learnMore")),1)]),$(I,{variant:"textonly",onClick:a[0]||(a[0]=t=>s("close"))},{default:b(()=>[D(u(o.$t("g.close")),1)]),_:1}),$(I,{variant:"secondary",onClick:a[1]||(a[1]=t=>s("subscribe"))},{default:b(()=>[D(u(o.$t("subscription.required.subscribe")),1)]),_:1})]))}}),pa={class:"flex flex-col justify-between gap-10 p-4 border-t border-border-default w-auto max-w-[min(500px,90vw)]"},ma=C({__name:"UploadModelUpgradeModal",setup(i){const e=J(),{showSubscriptionDialog:s}=ce();function o(){e.closeDialog({key:"upload-model-upgrade"})}c(o,"handleClose");function a(){s()}return c(a,"handleSubscribe"),(t,n)=>(d(),m("div",pa,[$(ia),$(ca,{onClose:o,onSubscribe:a})]))}}),fa={},ga={class:"flex items-center gap-2 p-4 font-bold"};function va(i,e){return d(),m("div",ga,[r("span",null,u(i.$t("assetBrowser.upgradeToUnlockFeature")),1)])}c(va,"_sfc_render");const ha=Q(fa,[["render",va]]);function Fa(i){const e=J(),{flags:s}=z(),o=A(()=>s.modelUploadButtonEnabled);function a(){s.privateModelsEnabled?e.showDialog({key:"upload-model",headerComponent:sa,component:Qt,props:{onUploadSuccess:c(async()=>{await i?.()},"onUploadSuccess")},dialogComponentProps:{pt:{header:"py-0! pl-0!",content:"p-0!"}}}):e.showDialog({key:"upload-model-upgrade",headerComponent:ha,component:ma,dialogComponentProps:{pt:{header:"py-0! pl-0!",content:"p-0!"}}})}return c(a,"showUploadDialog"),{isUploadButtonEnabled:o,showUploadDialog:a}}c(Fa,"useModelUpload");const ba=""+new URL("images/default-template.png",import.meta.url).href;function ya(i,e,s={}){const{immediate:o=!0,...a}=s,t=typeof window<"u"&&"IntersectionObserver"in window,n=_(!1);let l=null;const f=c(()=>{l&&(l.disconnect(),l=null)},"cleanup"),x=c(()=>{f(),!(!t||!i.value)&&(l=new IntersectionObserver(y=>{n.value=y.some(g=>g.isIntersecting),e(y,l)},a),l.observe(i.value))},"observe"),v=c(()=>{l&&i.value&&l.unobserve(i.value)},"unobserve");return o&&q(i,x,{immediate:!0,flush:"post"}),$e(f),{isSupported:t,isIntersecting:n,observe:x,unobserve:v,cleanup:f}}c(ya,"useIntersectionObserver");class wa{static{c(this,"MediaCacheService")}cache=ae(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(),s=[];for(const[o,a]of Array.from(this.cache.entries()))e-a.lastAccessed>this.maxAge&&(a.objectUrl?(this.urlRefCount.get(a.objectUrl)||0)===0&&(URL.revokeObjectURL(a.objectUrl),this.urlRefCount.delete(a.objectUrl),s.push(o)):s.push(o));if(s.forEach(o=>this.cache.delete(o)),this.cache.size>this.maxSize){const o=Array.from(this.cache.entries());o.sort((n,l)=>n[1].lastAccessed-l[1].lastAccessed);let a=0;const t=this.cache.size-this.maxSize;for(const[n,l]of o){if(a>=t)break;l.objectUrl?(this.urlRefCount.get(l.objectUrl)||0)===0&&(URL.revokeObjectURL(l.objectUrl),this.urlRefCount.delete(l.objectUrl),this.cache.delete(n),a++):(this.cache.delete(n),a++)}}}async getCachedMedia(e){let s=this.cache.get(e);if(s)return s.lastAccessed=Date.now(),s;s={src:e,isLoading:!0,lastAccessed:Date.now()},this.cache.set(e,s);try{const o=await fetch(e,{cache:"force-cache"});if(!o.ok)throw new Error(`Failed to fetch: ${o.status}`);const a=await o.blob(),t=URL.createObjectURL(a),n={src:e,blob:a,objectUrl:t,isLoading:!1,lastAccessed:Date.now()};return this.cache.set(e,n),n}catch(o){console.warn("Failed to cache media:",e,o);const a={src:e,error:!0,isLoading:!1,lastAccessed:Date.now()};return this.cache.set(e,a),a}}acquireUrl(e){const s=this.cache.get(e);if(s?.objectUrl){const o=this.urlRefCount.get(s.objectUrl)||0;return this.urlRefCount.set(s.objectUrl,o+1),s.objectUrl}}releaseUrl(e){const s=this.cache.get(e);if(s?.objectUrl){const o=(this.urlRefCount.get(s.objectUrl)||1)-1;o<=0?(URL.revokeObjectURL(s.objectUrl),this.urlRefCount.delete(s.objectUrl),this.cache.delete(e)):this.urlRefCount.set(s.objectUrl,o)}}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 j=null;function $a(i){return j||(j=new wa(i)),{getCachedMedia:c(t=>j.getCachedMedia(t),"getCachedMedia"),clearCache:c(()=>j.clearCache(),"clearCache"),acquireUrl:c(t=>j.acquireUrl(t),"acquireUrl"),releaseUrl:c(t=>j.releaseUrl(t),"releaseUrl"),cache:j.cache}}c($a,"useMediaCache");typeof window<"u"&&window.addEventListener("beforeunload",()=>{j&&j.destroy()});const _a=["src","alt"],ka={key:2,class:"absolute inset-0 flex items-center justify-center"},Ma=["alt"],Va=C({__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=_(null),s=_(!1),o=_(!1),a=_(!1),t=_(void 0),{getCachedMedia:n,acquireUrl:l,releaseUrl:f}=$a();ya(e,g=>{const w=g[0];s.value=w?.isIntersecting??!1},{rootMargin:i.rootMargin,threshold:.1});const x=A(()=>s.value);q(x,async g=>{if(g&&i.src&&!t.value&&!a.value)try{const w=await n(i.src);if(w.error)a.value=!0;else if(w.objectUrl){const E=l(i.src);t.value=E||w.objectUrl}else t.value=i.src}catch(w){console.warn("Failed to load cached media:",w),t.value=i.src}else g||(t.value?.startsWith("blob:")&&f(i.src),o.value=!1,t.value=void 0,a.value=!1)},{immediate:!0});const v=c(()=>{o.value=!0,a.value=!1},"onImageLoad"),y=c(()=>{a.value=!0,o.value=!1},"onImageError");return _e(()=>{t.value?.startsWith("blob:")&&f(i.src)}),(g,w)=>(d(),m("div",{ref_key:"containerRef",ref:e,class:Y(["relative flex h-full w-full items-center justify-center overflow-hidden",g.containerClass])},[o.value?k("",!0):(d(),U(p(Ue),{key:0,width:"100%",height:"100%",class:"absolute inset-0"})),t.value?(d(),m("img",{key:1,src:t.value,alt:g.alt,draggable:"false",class:Y(g.imageClass),style:X(g.imageStyle),onLoad:v,onError:y},null,46,_a)):k("",!0),a.value?(d(),m("div",ka,[r("img",{src:ba,alt:g.alt,draggable:"false",class:Y(g.imageClass),style:X(g.imageStyle)},null,14,Ma)])):k("",!0)],2))}});export{Fe as _,Fa as a,ba as b,Va as c,ya as d,z as u};
|
|
2
|
+
//# sourceMappingURL=LazyImage.vue_vue_type_script_setup_true_lang-Dza6G4hd.js.map
|