($(),G(Re,{justify:"space-between",dense:""},{default:w(()=>[a(Z,{cols:"6"},{default:w(()=>[a(W,{loading:l.value,variant:"outlined"},{default:w(()=>[a(Y,null,{default:w(()=>[a(Ue,{activated:t.value,"onUpdate:activated":s[0]||(s[0]=i=>t.value=i),"return-object":"",activatable:"",rounded:"","indent-lines":"","hide-actions":"",density:"compact","open-all":"","item-title":"name",items:h.value,disabled:l.value},{append:w(({item:i,depth:k,isFirst:g,isLast:v})=>[i.id==n.value.id?($(),G(Be,{key:0,icon:"fa-solid fa-location-crosshairs"})):x("",!0)]),_:1},8,["activated","items","disabled"])]),_:1})]),_:1},8,["loading"])]),_:1}),a(Z,{cols:"6"},{default:w(()=>[t.value.length==1?($(),G(W,{key:0,title:t.value[0].name,"prepend-icon":m.value.model.icon,variant:"outlined"},{default:w(()=>[a(Y,null,{default:w(()=>[a(X,null,{default:w(()=>[R(B(c.$t("AddChild")),1)]),_:1}),a(ee,{model:m.value.model.name,modelValue:r.value,"onUpdate:modelValue":s[2]||(s[2]=i=>r.value=i),"allow-create":""},{append:w(()=>[a(j,{color:"save",icon:"$save",disabled:r.value==null,onClick:s[1]||(s[1]=i=>{P(r.value,t.value[0].id),r.value=void 0})},null,8,["disabled"])]),_:1},8,["model","modelValue"]),a(X,null,{default:w(()=>[R(B(c.$t("Parent")),1)]),_:1}),a(ee,{model:m.value.model.name,modelValue:p.value,"onUpdate:modelValue":s[4]||(s[4]=i=>p.value=i),"allow-create":""},{append:w(()=>[a(j,{color:"save",icon:"$save",disabled:p.value==null,onClick:s[3]||(s[3]=i=>{P(t.value[0],p.value.id),p.value=void 0})},null,8,["disabled"])]),_:1},8,["model","modelValue"]),a(j,{onClick:s[5]||(s[5]=i=>P(t.value[0],0)),class:"mt-2",color:"warning","prepend-icon":"fa-solid fa-link-slash",block:""},{default:w(()=>[R(B(c.$t("RemoveParent")),1)]),_:1}),t.value[0].id!=n.value.id?($(),G(j,{key:0,block:"","prepend-icon":"$edit",color:"info",class:"mt-4",to:{name:"ModelEditPage",params:{model:m.value.model.name,id:t.value[0].id}}},{default:w(()=>[R(B(c.$t("Edit")),1)]),_:1},8,["to"])):x("",!0),o.value?($(),G(j,{key:1,block:"","prepend-icon":"$search",color:"success",class:"mt-4 mb-10",to:o.value,target:"_blank"},{default:w(()=>[R(B(c.$t("Recipes")),1)]),_:1},8,["to"])):x("",!0)]),_:1})]),_:1},8,["title","prepend-icon"])):x("",!0)]),_:1})]),_:1}))}});export{ze as _};
diff --git a/config/tandoor/staticfiles/vue3/assets/HierarchyEditor.vue_vue_type_script_setup_true_lang-VFBtIeub.js.gz b/config/tandoor/staticfiles/vue3/assets/HierarchyEditor.vue_vue_type_script_setup_true_lang-VFBtIeub.js.gz
deleted file mode 100644
index c2793dbc..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/HierarchyEditor.vue_vue_type_script_setup_true_lang-VFBtIeub.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/IngredientEditorPage-C6Hu5jvm.bebf63f7116b.js b/config/tandoor/staticfiles/vue3/assets/IngredientEditorPage-C6Hu5jvm.bebf63f7116b.js
deleted file mode 100644
index b4f72546..00000000
--- a/config/tandoor/staticfiles/vue3/assets/IngredientEditorPage-C6Hu5jvm.bebf63f7116b.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as X,u as Y,b8 as Z,r as m,o as ee,A as V,Q as y,R as _,h as $,w as n,K as ae,g as a,N as le,j as s,t as u,O as te,k as M,V as w,ag as R,z as f,G as E,H as B,x as O,y as v,_ as I,e as D,M as z,ba as ne,S as oe,af as de,i as j,b as ie,p as ue,F as se,f as b}from"./main-BhFWIRV_.js";import{_ as re}from"./ClosableHelpAlert.vue_vue_type_script_setup_true_lang-Bq7D6yIF.js";import{_ as A}from"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import{_ as H}from"./ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.js";import{V as me}from"./VDataTableServer-PUUq4Eqa.js";const pe=["colspan"],$e=X({__name:"IngredientEditorPage",setup(fe){const{t:k}=Y(),p=Z("history",{}),c=m([]),W=[{title:k("Amount"),key:"amount",minWidth:"120px",cellProps:{class:"pr-0"}},{title:k("Unit"),key:"unit",minWidth:"120px",cellProps:{class:"pr-0"}},{title:k("Food"),key:"food",minWidth:"120px",cellProps:{class:"pr-0"}},{title:k("Note"),key:"note",minWidth:"120px",cellProps:{class:"pr-0"}},{key:"action",width:"1%",noBreak:!0,align:"end"}],C=m(1),F=m(25),L=m(0),P=m(!1),g=m(!0),o=m(null),d=m(null);m(!1),ee(()=>{x()});function G(){c.value.forEach(t=>{t.changed&&S(t)})}function S(t){let l=new V;t.loading=!0,l.apiIngredientUpdate({id:t.id,ingredient:t}).then(e=>{}).catch(e=>{y().addError(_.UPDATE_ERROR,e)}).finally(()=>{t.loading=!1,t.changed=!1})}function q(t){let l=new V;t.loading=!0,l.apiIngredientDestroy({id:t.id}).then(e=>{c.value=c.value.filter(i=>i.id!=t.id)}).catch(e=>{y().addError(_.DELETE_ERROR,e)}).finally(()=>{t.loading=!1})}function x(){let t=new V,l=[];g.value=!0,p.food_id&&!Number.isNaN(p.food_id)&&l.push(t.apiFoodRetrieve({id:Number(p.food_id)}).then(e=>{o.value=e})),p.unit_id&&!Number.isNaN(p.unit_id)&&l.push(t.apiUnitRetrieve({id:Number(p.unit_id)}).then(e=>{d.value=e})),Promise.allSettled(l).then(()=>{g.value=!1,(p.food_id||p.unit_id)&&r()})}function r(){T({page:C.value,itemsPerPage:F.value})}function T({page:t,itemsPerPage:l,search:e,sortBy:i,groupBy:U}){if(!o.value&&!d.value){c.value=[];return}let J=new V;P.value=!0;let N={page:t,pageSize:l};o.value&&(N.food=o.value.id),d.value&&(N.unit=d.value.id),J.apiIngredientList(N).then(h=>{c.value=h.results,L.value=h.count}).catch(h=>{y().addError(_.FETCH_ERROR,h)}).finally(()=>{P.value=!1})}function K(){let t=new V;o.value&&(g.value=!0,t.apiFoodDestroy({id:o.value.id}).then(l=>{o.value=null,r()}).catch(l=>{y().addError(_.DELETE_ERROR,l)}).finally(()=>{g.value=!1}))}function Q(){let t=new V;d.value&&(g.value=!0,t.apiUnitDestroy({id:d.value.id}).then(l=>{d.value=null,r()}).catch(l=>{y().addError(_.DELETE_ERROR,l)}).finally(()=>{g.value=!1}))}return(t,l)=>(b(),$(ae,null,{default:n(()=>[a(z,{loading:g.value},{default:n(()=>[a(le,null,{default:n(()=>[s(u(t.$t("Ingredient Editor")),1)]),_:1}),a(te,null,{default:n(()=>[a(M,null,{default:n(()=>[a(w,null,{default:n(()=>[a(re,{class:"mb-2",text:t.$t("IngredientEditorHelp")},null,8,["text"])]),_:1})]),_:1}),a(M,null,{default:n(()=>[a(w,{cols:"12",md:"6"},{default:n(()=>[a(R,{model:"Food",modelValue:o.value,"onUpdate:modelValue":[l[4]||(l[4]=e=>o.value=e),l[5]||(l[5]=e=>r())],"append-to-body":""},{append:n(()=>[a(f,{icon:"",variant:"plain"},{default:n(()=>[a(E,{icon:"$menu"}),a(B,{activator:"parent"},{default:n(()=>[a(O,{density:"compact"},{default:n(()=>[a(v,{link:"","prepend-icon":"$edit",disabled:!o.value},{default:n(()=>[s(u(t.$t("Edit"))+" ",1),a(I,{model:"Food",item:o.value,activator:"parent",onSave:l[0]||(l[0]=e=>{o.value=e}),onDelete:l[1]||(l[1]=e=>{o.value=null,r()})},null,8,["item"])]),_:1},8,["disabled"]),a(v,{link:"","prepend-icon":"fa-solid fa-arrows-to-dot",disabled:!o.value},{default:n(()=>[s(u(t.$t("Merge"))+" ",1),a(H,{source:[o.value],model:"Food",onChange:l[2]||(l[2]=e=>{o.value=e,r()})},null,8,["source"])]),_:1},8,["disabled"]),a(v,{link:"","prepend-icon":"$automation",disabled:!o.value},{default:n(()=>[s(u(t.$t("Automate"))+" ",1),o.value?(b(),$(I,{key:0,model:"Automation",activator:"parent","item-defaults":{param1:o.value.name,type:"FOOD_ALIAS"}},null,8,["item-defaults"])):D("",!0)]),_:1},8,["disabled"]),a(v,{link:"","prepend-icon":"$delete",disabled:!o.value},{default:n(()=>[s(u(t.$t("Delete"))+" ",1),o.value?(b(),$(A,{key:0,"model-name":t.$t("Food"),"object-name":o.value.name,onDelete:l[3]||(l[3]=e=>K())},null,8,["model-name","object-name"])):D("",!0)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1}),a(f,{icon:"fa-solid fa-carrot",to:{name:"ModelListPage",params:{model:"food"}},variant:"plain"})]),_:1},8,["modelValue"])]),_:1}),a(w,{cols:"12",md:"6"},{default:n(()=>[a(R,{model:"Unit",modelValue:d.value,"onUpdate:modelValue":[l[10]||(l[10]=e=>d.value=e),l[11]||(l[11]=e=>r())],"append-to-body":""},{append:n(()=>[a(f,{icon:"",variant:"plain"},{default:n(()=>[a(E,{icon:"$menu"}),a(B,{activator:"parent"},{default:n(()=>[a(O,{density:"compact"},{default:n(()=>[a(v,{link:"","prepend-icon":"$edit",disabled:!d.value},{default:n(()=>[s(u(t.$t("Edit"))+" ",1),a(I,{model:"Unit",item:d.value,activator:"parent",onSave:l[6]||(l[6]=e=>{d.value=e}),onDelete:l[7]||(l[7]=e=>{d.value=null,r()})},null,8,["item"])]),_:1},8,["disabled"]),a(v,{link:"","prepend-icon":"fa-solid fa-arrows-to-dot",disabled:!d.value},{default:n(()=>[s(u(t.$t("Merge"))+" ",1),a(H,{source:[d.value],model:"Unit",onChange:l[8]||(l[8]=e=>{d.value=e,r()})},null,8,["source"])]),_:1},8,["disabled"]),a(v,{link:"","prepend-icon":"$automation",disabled:!d.value},{default:n(()=>[s(u(t.$t("Automate"))+" ",1),d.value?(b(),$(I,{key:0,model:"Automation",activator:"parent","item-defaults":{param1:d.value.name,type:"UNIT_ALIAS"}},null,8,["item-defaults"])):D("",!0)]),_:1},8,["disabled"]),a(v,{link:"","prepend-icon":"$delete",disabled:!d.value},{default:n(()=>[s(u(t.$t("Delete"))+" ",1),d.value?(b(),$(A,{key:0,"model-name":t.$t("Unit"),"object-name":d.value.name,onDelete:l[9]||(l[9]=e=>Q())},null,8,["model-name","object-name"])):D("",!0)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1}),a(f,{icon:"fa-solid fa-scale-balanced",to:{name:"ModelListPage",params:{model:"unit"}},variant:"plain"})]),_:1},8,["modelValue"])]),_:1})]),_:1})]),_:1})]),_:1},8,["loading"]),a(z,{class:"mt-2"},{default:n(()=>[a(me,{"onUpdate:options":T,items:c.value,"items-length":L.value,"items-per-page":F.value,headers:W,expanded:c.value.flatMap(e=>e.id),page:C.value,loading:P.value,"disable-sort":""},{"header.action":n(({column:e})=>[a(f,{size:"small",color:"save",onClick:l[12]||(l[12]=i=>G())},{default:n(()=>[a(E,{icon:"$save"})]),_:1})]),"expanded-row":n(({columns:e,item:i})=>[j("tr",null,[j("td",{colspan:e.length},[(b(!0),ie(se,null,ue(i.usedInRecipes,U=>(b(),$(f,{variant:"outlined",color:"secondary",target:"_blank",to:{name:"RecipeViewPage",params:{id:U.id}}},{default:n(()=>[s(u(U.name)+" (#"+u(U.id)+") ",1)]),_:2},1032,["to"]))),256))],8,pe)])]),"item.amount":n(({item:e})=>[a(de,{label:t.$t("Amount"),modelValue:e.amount,"onUpdate:modelValue":[i=>e.amount=i,i=>e.changed=!0],inset:"","control-variant":"stacked","hide-details":"",min:0,density:"compact",precision:2},null,8,["label","modelValue","onUpdate:modelValue"])]),"item.unit":n(({item:e})=>[a(R,{model:"Unit",modelValue:e.unit,"onUpdate:modelValue":[i=>e.unit=i,i=>e.changed=!0],density:"compact","hide-details":"","allow-create":"","append-to-body":""},null,8,["modelValue","onUpdate:modelValue"])]),"item.food":n(({item:e})=>[a(R,{model:"Food",modelValue:e.food,"onUpdate:modelValue":[i=>e.food=i,i=>e.changed=!0],density:"compact","hide-details":"","allow-create":"","append-to-body":""},null,8,["modelValue","onUpdate:modelValue"])]),"item.note":n(({item:e})=>[a(oe,{modelValue:e.note,"onUpdate:modelValue":[i=>e.note=i,i=>e.changed=!0],label:t.$t("Note"),density:"compact","hide-details":""},null,8,["modelValue","onUpdate:modelValue","label"])]),"item.action":n(({item:e})=>[a(ne,{density:"comfortable"},{default:n(()=>[a(f,{size:"small",color:"save",loading:e.loading,onClick:i=>S(e),disabled:!e.changed},{default:n(()=>[a(E,{icon:"$save"})]),_:2},1032,["loading","onClick","disabled"]),a(f,{size:"small",color:"delete",loading:e.loading},{default:n(()=>[a(E,{icon:"$delete"}),a(A,{"model-name":t.$t("Ingredient"),onDelete:i=>q(e)},null,8,["model-name","onDelete"])]),_:2},1032,["loading"])]),_:2},1024)]),_:1},8,["items","items-length","items-per-page","expanded","page","loading"])]),_:1})]),_:1}))}});export{$e as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/IngredientEditorPage-C6Hu5jvm.bebf63f7116b.js.gz b/config/tandoor/staticfiles/vue3/assets/IngredientEditorPage-C6Hu5jvm.bebf63f7116b.js.gz
deleted file mode 100644
index 03bf18f8..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/IngredientEditorPage-C6Hu5jvm.bebf63f7116b.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/IngredientEditorPage-C6Hu5jvm.js b/config/tandoor/staticfiles/vue3/assets/IngredientEditorPage-C6Hu5jvm.js
deleted file mode 100644
index b4f72546..00000000
--- a/config/tandoor/staticfiles/vue3/assets/IngredientEditorPage-C6Hu5jvm.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as X,u as Y,b8 as Z,r as m,o as ee,A as V,Q as y,R as _,h as $,w as n,K as ae,g as a,N as le,j as s,t as u,O as te,k as M,V as w,ag as R,z as f,G as E,H as B,x as O,y as v,_ as I,e as D,M as z,ba as ne,S as oe,af as de,i as j,b as ie,p as ue,F as se,f as b}from"./main-BhFWIRV_.js";import{_ as re}from"./ClosableHelpAlert.vue_vue_type_script_setup_true_lang-Bq7D6yIF.js";import{_ as A}from"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import{_ as H}from"./ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.js";import{V as me}from"./VDataTableServer-PUUq4Eqa.js";const pe=["colspan"],$e=X({__name:"IngredientEditorPage",setup(fe){const{t:k}=Y(),p=Z("history",{}),c=m([]),W=[{title:k("Amount"),key:"amount",minWidth:"120px",cellProps:{class:"pr-0"}},{title:k("Unit"),key:"unit",minWidth:"120px",cellProps:{class:"pr-0"}},{title:k("Food"),key:"food",minWidth:"120px",cellProps:{class:"pr-0"}},{title:k("Note"),key:"note",minWidth:"120px",cellProps:{class:"pr-0"}},{key:"action",width:"1%",noBreak:!0,align:"end"}],C=m(1),F=m(25),L=m(0),P=m(!1),g=m(!0),o=m(null),d=m(null);m(!1),ee(()=>{x()});function G(){c.value.forEach(t=>{t.changed&&S(t)})}function S(t){let l=new V;t.loading=!0,l.apiIngredientUpdate({id:t.id,ingredient:t}).then(e=>{}).catch(e=>{y().addError(_.UPDATE_ERROR,e)}).finally(()=>{t.loading=!1,t.changed=!1})}function q(t){let l=new V;t.loading=!0,l.apiIngredientDestroy({id:t.id}).then(e=>{c.value=c.value.filter(i=>i.id!=t.id)}).catch(e=>{y().addError(_.DELETE_ERROR,e)}).finally(()=>{t.loading=!1})}function x(){let t=new V,l=[];g.value=!0,p.food_id&&!Number.isNaN(p.food_id)&&l.push(t.apiFoodRetrieve({id:Number(p.food_id)}).then(e=>{o.value=e})),p.unit_id&&!Number.isNaN(p.unit_id)&&l.push(t.apiUnitRetrieve({id:Number(p.unit_id)}).then(e=>{d.value=e})),Promise.allSettled(l).then(()=>{g.value=!1,(p.food_id||p.unit_id)&&r()})}function r(){T({page:C.value,itemsPerPage:F.value})}function T({page:t,itemsPerPage:l,search:e,sortBy:i,groupBy:U}){if(!o.value&&!d.value){c.value=[];return}let J=new V;P.value=!0;let N={page:t,pageSize:l};o.value&&(N.food=o.value.id),d.value&&(N.unit=d.value.id),J.apiIngredientList(N).then(h=>{c.value=h.results,L.value=h.count}).catch(h=>{y().addError(_.FETCH_ERROR,h)}).finally(()=>{P.value=!1})}function K(){let t=new V;o.value&&(g.value=!0,t.apiFoodDestroy({id:o.value.id}).then(l=>{o.value=null,r()}).catch(l=>{y().addError(_.DELETE_ERROR,l)}).finally(()=>{g.value=!1}))}function Q(){let t=new V;d.value&&(g.value=!0,t.apiUnitDestroy({id:d.value.id}).then(l=>{d.value=null,r()}).catch(l=>{y().addError(_.DELETE_ERROR,l)}).finally(()=>{g.value=!1}))}return(t,l)=>(b(),$(ae,null,{default:n(()=>[a(z,{loading:g.value},{default:n(()=>[a(le,null,{default:n(()=>[s(u(t.$t("Ingredient Editor")),1)]),_:1}),a(te,null,{default:n(()=>[a(M,null,{default:n(()=>[a(w,null,{default:n(()=>[a(re,{class:"mb-2",text:t.$t("IngredientEditorHelp")},null,8,["text"])]),_:1})]),_:1}),a(M,null,{default:n(()=>[a(w,{cols:"12",md:"6"},{default:n(()=>[a(R,{model:"Food",modelValue:o.value,"onUpdate:modelValue":[l[4]||(l[4]=e=>o.value=e),l[5]||(l[5]=e=>r())],"append-to-body":""},{append:n(()=>[a(f,{icon:"",variant:"plain"},{default:n(()=>[a(E,{icon:"$menu"}),a(B,{activator:"parent"},{default:n(()=>[a(O,{density:"compact"},{default:n(()=>[a(v,{link:"","prepend-icon":"$edit",disabled:!o.value},{default:n(()=>[s(u(t.$t("Edit"))+" ",1),a(I,{model:"Food",item:o.value,activator:"parent",onSave:l[0]||(l[0]=e=>{o.value=e}),onDelete:l[1]||(l[1]=e=>{o.value=null,r()})},null,8,["item"])]),_:1},8,["disabled"]),a(v,{link:"","prepend-icon":"fa-solid fa-arrows-to-dot",disabled:!o.value},{default:n(()=>[s(u(t.$t("Merge"))+" ",1),a(H,{source:[o.value],model:"Food",onChange:l[2]||(l[2]=e=>{o.value=e,r()})},null,8,["source"])]),_:1},8,["disabled"]),a(v,{link:"","prepend-icon":"$automation",disabled:!o.value},{default:n(()=>[s(u(t.$t("Automate"))+" ",1),o.value?(b(),$(I,{key:0,model:"Automation",activator:"parent","item-defaults":{param1:o.value.name,type:"FOOD_ALIAS"}},null,8,["item-defaults"])):D("",!0)]),_:1},8,["disabled"]),a(v,{link:"","prepend-icon":"$delete",disabled:!o.value},{default:n(()=>[s(u(t.$t("Delete"))+" ",1),o.value?(b(),$(A,{key:0,"model-name":t.$t("Food"),"object-name":o.value.name,onDelete:l[3]||(l[3]=e=>K())},null,8,["model-name","object-name"])):D("",!0)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1}),a(f,{icon:"fa-solid fa-carrot",to:{name:"ModelListPage",params:{model:"food"}},variant:"plain"})]),_:1},8,["modelValue"])]),_:1}),a(w,{cols:"12",md:"6"},{default:n(()=>[a(R,{model:"Unit",modelValue:d.value,"onUpdate:modelValue":[l[10]||(l[10]=e=>d.value=e),l[11]||(l[11]=e=>r())],"append-to-body":""},{append:n(()=>[a(f,{icon:"",variant:"plain"},{default:n(()=>[a(E,{icon:"$menu"}),a(B,{activator:"parent"},{default:n(()=>[a(O,{density:"compact"},{default:n(()=>[a(v,{link:"","prepend-icon":"$edit",disabled:!d.value},{default:n(()=>[s(u(t.$t("Edit"))+" ",1),a(I,{model:"Unit",item:d.value,activator:"parent",onSave:l[6]||(l[6]=e=>{d.value=e}),onDelete:l[7]||(l[7]=e=>{d.value=null,r()})},null,8,["item"])]),_:1},8,["disabled"]),a(v,{link:"","prepend-icon":"fa-solid fa-arrows-to-dot",disabled:!d.value},{default:n(()=>[s(u(t.$t("Merge"))+" ",1),a(H,{source:[d.value],model:"Unit",onChange:l[8]||(l[8]=e=>{d.value=e,r()})},null,8,["source"])]),_:1},8,["disabled"]),a(v,{link:"","prepend-icon":"$automation",disabled:!d.value},{default:n(()=>[s(u(t.$t("Automate"))+" ",1),d.value?(b(),$(I,{key:0,model:"Automation",activator:"parent","item-defaults":{param1:d.value.name,type:"UNIT_ALIAS"}},null,8,["item-defaults"])):D("",!0)]),_:1},8,["disabled"]),a(v,{link:"","prepend-icon":"$delete",disabled:!d.value},{default:n(()=>[s(u(t.$t("Delete"))+" ",1),d.value?(b(),$(A,{key:0,"model-name":t.$t("Unit"),"object-name":d.value.name,onDelete:l[9]||(l[9]=e=>Q())},null,8,["model-name","object-name"])):D("",!0)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1}),a(f,{icon:"fa-solid fa-scale-balanced",to:{name:"ModelListPage",params:{model:"unit"}},variant:"plain"})]),_:1},8,["modelValue"])]),_:1})]),_:1})]),_:1})]),_:1},8,["loading"]),a(z,{class:"mt-2"},{default:n(()=>[a(me,{"onUpdate:options":T,items:c.value,"items-length":L.value,"items-per-page":F.value,headers:W,expanded:c.value.flatMap(e=>e.id),page:C.value,loading:P.value,"disable-sort":""},{"header.action":n(({column:e})=>[a(f,{size:"small",color:"save",onClick:l[12]||(l[12]=i=>G())},{default:n(()=>[a(E,{icon:"$save"})]),_:1})]),"expanded-row":n(({columns:e,item:i})=>[j("tr",null,[j("td",{colspan:e.length},[(b(!0),ie(se,null,ue(i.usedInRecipes,U=>(b(),$(f,{variant:"outlined",color:"secondary",target:"_blank",to:{name:"RecipeViewPage",params:{id:U.id}}},{default:n(()=>[s(u(U.name)+" (#"+u(U.id)+") ",1)]),_:2},1032,["to"]))),256))],8,pe)])]),"item.amount":n(({item:e})=>[a(de,{label:t.$t("Amount"),modelValue:e.amount,"onUpdate:modelValue":[i=>e.amount=i,i=>e.changed=!0],inset:"","control-variant":"stacked","hide-details":"",min:0,density:"compact",precision:2},null,8,["label","modelValue","onUpdate:modelValue"])]),"item.unit":n(({item:e})=>[a(R,{model:"Unit",modelValue:e.unit,"onUpdate:modelValue":[i=>e.unit=i,i=>e.changed=!0],density:"compact","hide-details":"","allow-create":"","append-to-body":""},null,8,["modelValue","onUpdate:modelValue"])]),"item.food":n(({item:e})=>[a(R,{model:"Food",modelValue:e.food,"onUpdate:modelValue":[i=>e.food=i,i=>e.changed=!0],density:"compact","hide-details":"","allow-create":"","append-to-body":""},null,8,["modelValue","onUpdate:modelValue"])]),"item.note":n(({item:e})=>[a(oe,{modelValue:e.note,"onUpdate:modelValue":[i=>e.note=i,i=>e.changed=!0],label:t.$t("Note"),density:"compact","hide-details":""},null,8,["modelValue","onUpdate:modelValue","label"])]),"item.action":n(({item:e})=>[a(ne,{density:"comfortable"},{default:n(()=>[a(f,{size:"small",color:"save",loading:e.loading,onClick:i=>S(e),disabled:!e.changed},{default:n(()=>[a(E,{icon:"$save"})]),_:2},1032,["loading","onClick","disabled"]),a(f,{size:"small",color:"delete",loading:e.loading},{default:n(()=>[a(E,{icon:"$delete"}),a(A,{"model-name":t.$t("Ingredient"),onDelete:i=>q(e)},null,8,["model-name","onDelete"])]),_:2},1032,["loading"])]),_:2},1024)]),_:1},8,["items","items-length","items-per-page","expanded","page","loading"])]),_:1})]),_:1}))}});export{$e as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/IngredientEditorPage-C6Hu5jvm.js.gz b/config/tandoor/staticfiles/vue3/assets/IngredientEditorPage-C6Hu5jvm.js.gz
deleted file mode 100644
index 03bf18f8..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/IngredientEditorPage-C6Hu5jvm.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/IngredientsTable.vue_vue_type_script_setup_true_lang-ClY6kQB1.6342aa96f42d.js b/config/tandoor/staticfiles/vue3/assets/IngredientsTable.vue_vue_type_script_setup_true_lang-ClY6kQB1.6342aa96f42d.js
deleted file mode 100644
index bdd61f2b..00000000
--- a/config/tandoor/staticfiles/vue3/assets/IngredientsTable.vue_vue_type_script_setup_true_lang-ClY6kQB1.6342aa96f42d.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as w,aL as g,aH as _,c as V,h as d,aj as b,w as l,i as c,b as o,F as i,p as x,a9 as F,f as t,t as n,e as r,bb as B,l as s,L as C,j as p,G as T,g as N}from"./main-BhFWIRV_.js";import{d as v}from"./number_utils-1sJWKMUK.js";import{i as H,a as m}from"./model_utils-CVQgSPL_.js";import{V as L}from"./VTooltip-CP00KBBq.js";const M=["onClick"],P={key:0,colspan:"5",class:"font-weight-bold"},S={key:0,style:{width:"1%","text-wrap":"nowrap"},class:"pa-0 d-print-none"},U=["innerHTML"],A={key:2,style:{width:"1%","text-wrap":"nowrap"},class:"pr-1"},j={style:{width:"1%","text-wrap":"nowrap"},class:"pr-1"},q=["href"],I={key:2},D={key:3,class:"d-none d-print-block text-disabled font-italic"},E={style:{width:"1%","text-wrap":"nowrap"},class:"d-print-none"},K=w({__name:"IngredientsTable",props:g({showNotes:{type:Boolean,default:!0},ingredientFactor:{type:Number,required:!0},showCheckbox:{type:Boolean,default:!0}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(a){const f=_(a,"modelValue"),k=a;return V(()=>{let u=[{title:"",key:"checked",align:"start",width:"1%",noBreak:!0,cellProps:{class:"pa-0"}},{title:"",key:"amount",align:"start",width:"1%",noBreak:!0,cellProps:{class:"pr-1"}},{title:"",key:"unit.name",align:"start",width:"1%",noBreak:!0,cellProps:{class:"pr-1"}},{title:"",key:"food.name"}];return k.showNotes&&u.push({title:"",key:"note",align:"end"}),u}),(u,G)=>{const y=F("router-link");return t(),d(b,{density:"compact"},{default:l(()=>[c("tbody",null,[(t(!0),o(i,null,x(f.value,e=>(t(),o("tr",{key:e.id,onClick:h=>e.checked=!e.checked},[e.isHeader?(t(),o("td",P,n(e.note),1)):(t(),o(i,{key:1},[a.showCheckbox?(t(),o("td",S,[e.isHeader?r("",!0):(t(),d(B,{key:0,modelValue:e.checked,"onUpdate:modelValue":h=>e.checked=h,color:"success"},null,8,["modelValue","onUpdate:modelValue"]))])):r("",!0),!e.noAmount&&e.amount!=0?(t(),o("td",{key:1,style:{width:"1%","text-wrap":"nowrap"},class:"pr-1",innerHTML:s(v)(e.amount,k.ingredientFactor,s(C)().userSettings.useFractions)},null,8,U)):(t(),o("td",A)),c("td",j,[e.unit&&!e.noAmount&&e.amount!=0?(t(),o(i,{key:0},[p(n(s(H)(e,a.ingredientFactor)),1)],64)):r("",!0)]),c("td",null,[e.food?(t(),o(i,{key:0},[e.food.recipe?(t(),d(y,{key:0,to:{name:"RecipeViewPage",params:{id:e.food.recipe.id}}},{default:l(()=>[p(n(s(m)(e,a.ingredientFactor)),1)]),_:2},1032,["to"])):e.food.url?(t(),o("a",{key:1,href:e.food.url,target:"_blank"},n(s(m)(e,a.ingredientFactor)),9,q)):(t(),o("span",I,n(s(m)(e,a.ingredientFactor)),1)),e.note!=""&&e.note!=null?(t(),o("span",D,"Â "+n(e.note),1)):r("",!0)],64)):r("",!0)]),c("td",E,[e.note!=""&&e.note!=null?(t(),d(T,{key:0,class:"far fa-comment float-right"},{default:l(()=>[N(L,{activator:"parent","open-on-click":"",location:"start"},{default:l(()=>[p(n(e.note),1)]),_:2},1024)]),_:2},1024)):r("",!0)])],64))],8,M))),128))])]),_:1})}}});export{K as _};
diff --git a/config/tandoor/staticfiles/vue3/assets/IngredientsTable.vue_vue_type_script_setup_true_lang-ClY6kQB1.6342aa96f42d.js.gz b/config/tandoor/staticfiles/vue3/assets/IngredientsTable.vue_vue_type_script_setup_true_lang-ClY6kQB1.6342aa96f42d.js.gz
deleted file mode 100644
index 43d6e958..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/IngredientsTable.vue_vue_type_script_setup_true_lang-ClY6kQB1.6342aa96f42d.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/IngredientsTable.vue_vue_type_script_setup_true_lang-ClY6kQB1.js b/config/tandoor/staticfiles/vue3/assets/IngredientsTable.vue_vue_type_script_setup_true_lang-ClY6kQB1.js
deleted file mode 100644
index bdd61f2b..00000000
--- a/config/tandoor/staticfiles/vue3/assets/IngredientsTable.vue_vue_type_script_setup_true_lang-ClY6kQB1.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as w,aL as g,aH as _,c as V,h as d,aj as b,w as l,i as c,b as o,F as i,p as x,a9 as F,f as t,t as n,e as r,bb as B,l as s,L as C,j as p,G as T,g as N}from"./main-BhFWIRV_.js";import{d as v}from"./number_utils-1sJWKMUK.js";import{i as H,a as m}from"./model_utils-CVQgSPL_.js";import{V as L}from"./VTooltip-CP00KBBq.js";const M=["onClick"],P={key:0,colspan:"5",class:"font-weight-bold"},S={key:0,style:{width:"1%","text-wrap":"nowrap"},class:"pa-0 d-print-none"},U=["innerHTML"],A={key:2,style:{width:"1%","text-wrap":"nowrap"},class:"pr-1"},j={style:{width:"1%","text-wrap":"nowrap"},class:"pr-1"},q=["href"],I={key:2},D={key:3,class:"d-none d-print-block text-disabled font-italic"},E={style:{width:"1%","text-wrap":"nowrap"},class:"d-print-none"},K=w({__name:"IngredientsTable",props:g({showNotes:{type:Boolean,default:!0},ingredientFactor:{type:Number,required:!0},showCheckbox:{type:Boolean,default:!0}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(a){const f=_(a,"modelValue"),k=a;return V(()=>{let u=[{title:"",key:"checked",align:"start",width:"1%",noBreak:!0,cellProps:{class:"pa-0"}},{title:"",key:"amount",align:"start",width:"1%",noBreak:!0,cellProps:{class:"pr-1"}},{title:"",key:"unit.name",align:"start",width:"1%",noBreak:!0,cellProps:{class:"pr-1"}},{title:"",key:"food.name"}];return k.showNotes&&u.push({title:"",key:"note",align:"end"}),u}),(u,G)=>{const y=F("router-link");return t(),d(b,{density:"compact"},{default:l(()=>[c("tbody",null,[(t(!0),o(i,null,x(f.value,e=>(t(),o("tr",{key:e.id,onClick:h=>e.checked=!e.checked},[e.isHeader?(t(),o("td",P,n(e.note),1)):(t(),o(i,{key:1},[a.showCheckbox?(t(),o("td",S,[e.isHeader?r("",!0):(t(),d(B,{key:0,modelValue:e.checked,"onUpdate:modelValue":h=>e.checked=h,color:"success"},null,8,["modelValue","onUpdate:modelValue"]))])):r("",!0),!e.noAmount&&e.amount!=0?(t(),o("td",{key:1,style:{width:"1%","text-wrap":"nowrap"},class:"pr-1",innerHTML:s(v)(e.amount,k.ingredientFactor,s(C)().userSettings.useFractions)},null,8,U)):(t(),o("td",A)),c("td",j,[e.unit&&!e.noAmount&&e.amount!=0?(t(),o(i,{key:0},[p(n(s(H)(e,a.ingredientFactor)),1)],64)):r("",!0)]),c("td",null,[e.food?(t(),o(i,{key:0},[e.food.recipe?(t(),d(y,{key:0,to:{name:"RecipeViewPage",params:{id:e.food.recipe.id}}},{default:l(()=>[p(n(s(m)(e,a.ingredientFactor)),1)]),_:2},1032,["to"])):e.food.url?(t(),o("a",{key:1,href:e.food.url,target:"_blank"},n(s(m)(e,a.ingredientFactor)),9,q)):(t(),o("span",I,n(s(m)(e,a.ingredientFactor)),1)),e.note!=""&&e.note!=null?(t(),o("span",D,"Â "+n(e.note),1)):r("",!0)],64)):r("",!0)]),c("td",E,[e.note!=""&&e.note!=null?(t(),d(T,{key:0,class:"far fa-comment float-right"},{default:l(()=>[N(L,{activator:"parent","open-on-click":"",location:"start"},{default:l(()=>[p(n(e.note),1)]),_:2},1024)]),_:2},1024)):r("",!0)])],64))],8,M))),128))])]),_:1})}}});export{K as _};
diff --git a/config/tandoor/staticfiles/vue3/assets/IngredientsTable.vue_vue_type_script_setup_true_lang-ClY6kQB1.js.gz b/config/tandoor/staticfiles/vue3/assets/IngredientsTable.vue_vue_type_script_setup_true_lang-ClY6kQB1.js.gz
deleted file mode 100644
index 43d6e958..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/IngredientsTable.vue_vue_type_script_setup_true_lang-ClY6kQB1.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/InviteLinkEditor-CVYwkQ1F.f1c99f1455ae.js b/config/tandoor/staticfiles/vue3/assets/InviteLinkEditor-CVYwkQ1F.f1c99f1455ae.js
deleted file mode 100644
index f8787345..00000000
--- a/config/tandoor/staticfiles/vue3/assets/InviteLinkEditor-CVYwkQ1F.f1c99f1455ae.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as S,aM as k,r as E,o as I,A as N,D as O,Q as T,R as w,h as V,f as v,w as d,g as i,O as R,ac as F,l as e,e as L,S as c,T as M,aY as q,U as A,a7 as B}from"./main-BhFWIRV_.js";import{u as x,_ as z}from"./useModelEditorFunctions-Du2kfr61.js";import{_ as G}from"./BtnCopy.vue_vue_type_script_setup_true_lang-B_1A58TG.js";import{V as H}from"./VTextarea-Dyu7dPGe.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import"./VTooltip-CP00KBBq.js";const W=S({__name:"InviteLinkEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(u,{emit:U}){const n=u,m=U,{setupState:j,deleteObject:D,saveObject:$,isUpdate:r,editingObjName:y,loading:p,editingObj:a,editingObjChanged:f,modelClass:C}=x("InviteLink",m);k([()=>n.item,()=>n.itemId],()=>{b()});const s=E([]);I(()=>{b()});function b(){new N().apiGroupList().then(l=>{s.value=l,j(n.item,n.itemId,{newItemFunction:()=>{a.value.validUntil=O.now().plus({month:1}).toJSDate(),a.value.group=s.value[0]},itemDefaults:n.itemDefaults})}).catch(l=>{T().addError(w.FETCH_ERROR,l)})}function g(o){return B().getDjangoUrl(`/invite/${o.uuid}`)}return(o,l)=>(v(),V(z,{loading:e(p),dialog:u.dialog,onSave:e($),onDelete:e(D),onClose:l[5]||(l[5]=t=>{m("close"),f.value=!1}),"is-update":e(r)(),"is-changed":e(f),"model-class":e(C),"object-name":e(y)(),"editing-object":e(a)},{default:d(()=>[i(R,null,{default:d(()=>[i(F,{disabled:e(p)},{default:d(()=>[i(c,{label:o.$t("Email"),modelValue:e(a).email,"onUpdate:modelValue":l[0]||(l[0]=t=>e(a).email=t)},null,8,["label","modelValue"]),i(M,{label:o.$t("Role"),items:s.value,"item-value":"id","item-title":"name","return-object":"",modelValue:e(a).group,"onUpdate:modelValue":l[1]||(l[1]=t=>e(a).group=t)},null,8,["label","items","modelValue"]),i(e(q),{label:o.$t("Valid Until"),modelValue:e(a).validUntil,"onUpdate:modelValue":l[2]||(l[2]=t=>e(a).validUntil=t)},null,8,["label","modelValue"]),i(H,{label:o.$t("Note"),modelValue:e(a).internalNote,"onUpdate:modelValue":l[3]||(l[3]=t=>e(a).internalNote=t)},null,8,["label","modelValue"]),i(A,{label:o.$t("Reusable"),modelValue:e(a).reusable,"onUpdate:modelValue":l[4]||(l[4]=t=>e(a).reusable=t)},null,8,["label","modelValue"]),e(r)()?(v(),V(c,{key:0,label:o.$t("Link"),readonly:"","model-value":g(e(a))},{"append-inner":d(()=>[i(G,{variant:"plain",color:"undefined","copy-value":g(e(a))},null,8,["copy-value"])]),_:1},8,["label","model-value"])):L("",!0)]),_:1},8,["disabled"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{W as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/InviteLinkEditor-CVYwkQ1F.f1c99f1455ae.js.gz b/config/tandoor/staticfiles/vue3/assets/InviteLinkEditor-CVYwkQ1F.f1c99f1455ae.js.gz
deleted file mode 100644
index 46c4cf9c..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/InviteLinkEditor-CVYwkQ1F.f1c99f1455ae.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/InviteLinkEditor-CVYwkQ1F.js b/config/tandoor/staticfiles/vue3/assets/InviteLinkEditor-CVYwkQ1F.js
deleted file mode 100644
index f8787345..00000000
--- a/config/tandoor/staticfiles/vue3/assets/InviteLinkEditor-CVYwkQ1F.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as S,aM as k,r as E,o as I,A as N,D as O,Q as T,R as w,h as V,f as v,w as d,g as i,O as R,ac as F,l as e,e as L,S as c,T as M,aY as q,U as A,a7 as B}from"./main-BhFWIRV_.js";import{u as x,_ as z}from"./useModelEditorFunctions-Du2kfr61.js";import{_ as G}from"./BtnCopy.vue_vue_type_script_setup_true_lang-B_1A58TG.js";import{V as H}from"./VTextarea-Dyu7dPGe.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import"./VTooltip-CP00KBBq.js";const W=S({__name:"InviteLinkEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(u,{emit:U}){const n=u,m=U,{setupState:j,deleteObject:D,saveObject:$,isUpdate:r,editingObjName:y,loading:p,editingObj:a,editingObjChanged:f,modelClass:C}=x("InviteLink",m);k([()=>n.item,()=>n.itemId],()=>{b()});const s=E([]);I(()=>{b()});function b(){new N().apiGroupList().then(l=>{s.value=l,j(n.item,n.itemId,{newItemFunction:()=>{a.value.validUntil=O.now().plus({month:1}).toJSDate(),a.value.group=s.value[0]},itemDefaults:n.itemDefaults})}).catch(l=>{T().addError(w.FETCH_ERROR,l)})}function g(o){return B().getDjangoUrl(`/invite/${o.uuid}`)}return(o,l)=>(v(),V(z,{loading:e(p),dialog:u.dialog,onSave:e($),onDelete:e(D),onClose:l[5]||(l[5]=t=>{m("close"),f.value=!1}),"is-update":e(r)(),"is-changed":e(f),"model-class":e(C),"object-name":e(y)(),"editing-object":e(a)},{default:d(()=>[i(R,null,{default:d(()=>[i(F,{disabled:e(p)},{default:d(()=>[i(c,{label:o.$t("Email"),modelValue:e(a).email,"onUpdate:modelValue":l[0]||(l[0]=t=>e(a).email=t)},null,8,["label","modelValue"]),i(M,{label:o.$t("Role"),items:s.value,"item-value":"id","item-title":"name","return-object":"",modelValue:e(a).group,"onUpdate:modelValue":l[1]||(l[1]=t=>e(a).group=t)},null,8,["label","items","modelValue"]),i(e(q),{label:o.$t("Valid Until"),modelValue:e(a).validUntil,"onUpdate:modelValue":l[2]||(l[2]=t=>e(a).validUntil=t)},null,8,["label","modelValue"]),i(H,{label:o.$t("Note"),modelValue:e(a).internalNote,"onUpdate:modelValue":l[3]||(l[3]=t=>e(a).internalNote=t)},null,8,["label","modelValue"]),i(A,{label:o.$t("Reusable"),modelValue:e(a).reusable,"onUpdate:modelValue":l[4]||(l[4]=t=>e(a).reusable=t)},null,8,["label","modelValue"]),e(r)()?(v(),V(c,{key:0,label:o.$t("Link"),readonly:"","model-value":g(e(a))},{"append-inner":d(()=>[i(G,{variant:"plain",color:"undefined","copy-value":g(e(a))},null,8,["copy-value"])]),_:1},8,["label","model-value"])):L("",!0)]),_:1},8,["disabled"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{W as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/InviteLinkEditor-CVYwkQ1F.js.gz b/config/tandoor/staticfiles/vue3/assets/InviteLinkEditor-CVYwkQ1F.js.gz
deleted file mode 100644
index 46c4cf9c..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/InviteLinkEditor-CVYwkQ1F.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/KeywordEditor-B_K-9QDF.42c591f12fba.js b/config/tandoor/staticfiles/vue3/assets/KeywordEditor-B_K-9QDF.42c591f12fba.js
deleted file mode 100644
index d6269bd3..00000000
--- a/config/tandoor/staticfiles/vue3/assets/KeywordEditor-B_K-9QDF.42c591f12fba.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as C,r as O,aM as U,o as k,h as N,f as I,w as d,g as l,O as b,l as e,j as g,t as v,ac as _,S as q,aS as x}from"./main-BhFWIRV_.js";import{u as B,_ as E}from"./useModelEditorFunctions-Du2kfr61.js";import{_ as F}from"./HierarchyEditor.vue_vue_type_script_setup_true_lang-VFBtIeub.js";import{a as K,V as c,b as M,c as y}from"./VTabs-BQFRhgOd.js";import{V as W}from"./VTextarea-Dyu7dPGe.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import"./VListItemAction-BR9wagZD.js";const L=C({__name:"KeywordEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(m,{emit:w}){const i=m,r=w,{setupState:j,deleteObject:S,saveObject:T,isUpdate:D,editingObjName:$,loading:u,editingObj:o,editingObjChanged:f,modelClass:p}=B("Keyword",r),s=O("keyword");U([()=>i.item,()=>i.itemId],()=>{V()}),k(()=>{V()});function V(){j(i.item,i.itemId,{itemDefaults:i.itemDefaults})}return(n,a)=>(I(),N(E,{loading:e(u),dialog:m.dialog,onSave:e(T),onDelete:e(S),onClose:a[5]||(a[5]=t=>{r("close"),f.value=!1}),"is-update":e(D)(),"is-changed":e(f),"model-class":e(p),"object-name":e($)(),"editing-object":e(o)},{default:d(()=>[l(b,{class:"pa-0"},{default:d(()=>[l(K,{modelValue:s.value,"onUpdate:modelValue":a[0]||(a[0]=t=>s.value=t),disabled:e(u),grow:""},{default:d(()=>[l(c,{value:"keyword"},{default:d(()=>[g(v(n.$t("Keyword")),1)]),_:1}),l(c,{value:"hierarchy"},{default:d(()=>[g(v(n.$t("Hierarchy")),1)]),_:1})]),_:1},8,["modelValue","disabled"])]),_:1}),l(b,null,{default:d(()=>[l(M,{modelValue:s.value,"onUpdate:modelValue":a[4]||(a[4]=t=>s.value=t)},{default:d(()=>[l(y,{value:"keyword"},{default:d(()=>[l(_,{disabled:e(u)},{default:d(()=>[l(q,{label:n.$t("Name"),modelValue:e(o).name,"onUpdate:modelValue":a[1]||(a[1]=t=>e(o).name=t)},null,8,["label","modelValue"]),l(W,{label:n.$t("Description"),modelValue:e(o).description,"onUpdate:modelValue":a[2]||(a[2]=t=>e(o).description=t)},null,8,["label","modelValue"])]),_:1},8,["disabled"])]),_:1}),l(y,{value:"hierarchy"},{default:d(()=>[l(F,{modelValue:e(o),"onUpdate:modelValue":a[3]||(a[3]=t=>x(o)?o.value=t:null),model:e(p).model.name},null,8,["modelValue","model"])]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{L as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/KeywordEditor-B_K-9QDF.42c591f12fba.js.gz b/config/tandoor/staticfiles/vue3/assets/KeywordEditor-B_K-9QDF.42c591f12fba.js.gz
deleted file mode 100644
index 09817561..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/KeywordEditor-B_K-9QDF.42c591f12fba.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/KeywordEditor-B_K-9QDF.js b/config/tandoor/staticfiles/vue3/assets/KeywordEditor-B_K-9QDF.js
deleted file mode 100644
index d6269bd3..00000000
--- a/config/tandoor/staticfiles/vue3/assets/KeywordEditor-B_K-9QDF.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as C,r as O,aM as U,o as k,h as N,f as I,w as d,g as l,O as b,l as e,j as g,t as v,ac as _,S as q,aS as x}from"./main-BhFWIRV_.js";import{u as B,_ as E}from"./useModelEditorFunctions-Du2kfr61.js";import{_ as F}from"./HierarchyEditor.vue_vue_type_script_setup_true_lang-VFBtIeub.js";import{a as K,V as c,b as M,c as y}from"./VTabs-BQFRhgOd.js";import{V as W}from"./VTextarea-Dyu7dPGe.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import"./VListItemAction-BR9wagZD.js";const L=C({__name:"KeywordEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(m,{emit:w}){const i=m,r=w,{setupState:j,deleteObject:S,saveObject:T,isUpdate:D,editingObjName:$,loading:u,editingObj:o,editingObjChanged:f,modelClass:p}=B("Keyword",r),s=O("keyword");U([()=>i.item,()=>i.itemId],()=>{V()}),k(()=>{V()});function V(){j(i.item,i.itemId,{itemDefaults:i.itemDefaults})}return(n,a)=>(I(),N(E,{loading:e(u),dialog:m.dialog,onSave:e(T),onDelete:e(S),onClose:a[5]||(a[5]=t=>{r("close"),f.value=!1}),"is-update":e(D)(),"is-changed":e(f),"model-class":e(p),"object-name":e($)(),"editing-object":e(o)},{default:d(()=>[l(b,{class:"pa-0"},{default:d(()=>[l(K,{modelValue:s.value,"onUpdate:modelValue":a[0]||(a[0]=t=>s.value=t),disabled:e(u),grow:""},{default:d(()=>[l(c,{value:"keyword"},{default:d(()=>[g(v(n.$t("Keyword")),1)]),_:1}),l(c,{value:"hierarchy"},{default:d(()=>[g(v(n.$t("Hierarchy")),1)]),_:1})]),_:1},8,["modelValue","disabled"])]),_:1}),l(b,null,{default:d(()=>[l(M,{modelValue:s.value,"onUpdate:modelValue":a[4]||(a[4]=t=>s.value=t)},{default:d(()=>[l(y,{value:"keyword"},{default:d(()=>[l(_,{disabled:e(u)},{default:d(()=>[l(q,{label:n.$t("Name"),modelValue:e(o).name,"onUpdate:modelValue":a[1]||(a[1]=t=>e(o).name=t)},null,8,["label","modelValue"]),l(W,{label:n.$t("Description"),modelValue:e(o).description,"onUpdate:modelValue":a[2]||(a[2]=t=>e(o).description=t)},null,8,["label","modelValue"])]),_:1},8,["disabled"])]),_:1}),l(y,{value:"hierarchy"},{default:d(()=>[l(F,{modelValue:e(o),"onUpdate:modelValue":a[3]||(a[3]=t=>x(o)?o.value=t:null),model:e(p).model.name},null,8,["modelValue","model"])]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{L as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/KeywordEditor-B_K-9QDF.js.gz b/config/tandoor/staticfiles/vue3/assets/KeywordEditor-B_K-9QDF.js.gz
deleted file mode 100644
index 09817561..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/KeywordEditor-B_K-9QDF.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.24a1624e2a3d.js b/config/tandoor/staticfiles/vue3/assets/KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.24a1624e2a3d.js
deleted file mode 100644
index 39bfeca0..00000000
--- a/config/tandoor/staticfiles/vue3/assets/KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.24a1624e2a3d.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d,c as i,b as s,e as c,aJ as o,F as u,p,f as a,h as y,w as m,j as f,t as w,l as k,L as b,ai as _}from"./main-BhFWIRV_.js";const h={key:0},g=d({__name:"KeywordsBar",props:{keywords:Array,size:{type:String,default:"x-small"},color:{type:String,default:""},variant:{type:String,default:"tonal"},label:{type:Boolean,default:!0},maxKeywords:{type:Number,default:0}},setup(l){const e=l,n=i(()=>e.maxKeywords>0?e.keywords?.slice(0,e.maxKeywords):e.keywords);return(r,v)=>e.keywords?(a(),s("div",h,[o(r.$slots,"prepend"),(a(!0),s(u,null,p(n.value,t=>(a(),y(_,{class:"me-1 mb-1",label:e.label,color:e.color,size:e.size,variant:e.variant,to:k(b)().isAuthenticated?{name:"SearchPage",query:{keywords:t.id}}:void 0},{default:m(()=>[f(w(t.label),1)]),_:2},1032,["label","color","size","variant","to"]))),256)),o(r.$slots,"append")])):c("",!0)}});export{g as _};
diff --git a/config/tandoor/staticfiles/vue3/assets/KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.24a1624e2a3d.js.gz b/config/tandoor/staticfiles/vue3/assets/KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.24a1624e2a3d.js.gz
deleted file mode 100644
index 4a20a9d0..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.24a1624e2a3d.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.js b/config/tandoor/staticfiles/vue3/assets/KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.js
deleted file mode 100644
index 39bfeca0..00000000
--- a/config/tandoor/staticfiles/vue3/assets/KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d,c as i,b as s,e as c,aJ as o,F as u,p,f as a,h as y,w as m,j as f,t as w,l as k,L as b,ai as _}from"./main-BhFWIRV_.js";const h={key:0},g=d({__name:"KeywordsBar",props:{keywords:Array,size:{type:String,default:"x-small"},color:{type:String,default:""},variant:{type:String,default:"tonal"},label:{type:Boolean,default:!0},maxKeywords:{type:Number,default:0}},setup(l){const e=l,n=i(()=>e.maxKeywords>0?e.keywords?.slice(0,e.maxKeywords):e.keywords);return(r,v)=>e.keywords?(a(),s("div",h,[o(r.$slots,"prepend"),(a(!0),s(u,null,p(n.value,t=>(a(),y(_,{class:"me-1 mb-1",label:e.label,color:e.color,size:e.size,variant:e.variant,to:k(b)().isAuthenticated?{name:"SearchPage",query:{keywords:t.id}}:void 0},{default:m(()=>[f(w(t.label),1)]),_:2},1032,["label","color","size","variant","to"]))),256)),o(r.$slots,"append")])):c("",!0)}});export{g as _};
diff --git a/config/tandoor/staticfiles/vue3/assets/KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.js.gz b/config/tandoor/staticfiles/vue3/assets/KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.js.gz
deleted file mode 100644
index 4a20a9d0..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/MealPlanEditor-8ZJIBqi6.5dfbb83ba6be.js b/config/tandoor/staticfiles/vue3/assets/MealPlanEditor-8ZJIBqi6.5dfbb83ba6be.js
deleted file mode 100644
index fd39fff0..00000000
--- a/config/tandoor/staticfiles/vue3/assets/MealPlanEditor-8ZJIBqi6.5dfbb83ba6be.js
+++ /dev/null
@@ -1 +0,0 @@
-import{D as f,d as R,aM as Y,r as c,o as _,A as H,aQ as K,L as $,aT as X,h as v,f as m,w as o,g as s,O as A,l,j as M,t as U,ac as Z,k as j,V as k,e as b,ag as I,z as S,U as ee,S as le,aY as ae,aK as te,ba as se,i as T,af as oe,x as ne,b as ie,F as ue,p as de,v as E,Q as re,Y as pe}from"./main-BhFWIRV_.js";import{u as me,_ as fe}from"./useModelEditorFunctions-Du2kfr61.js";import{R as ve}from"./RecipeCard-ZQiVryVZ.js";import{u as J,_ as ge,a as Ve}from"./ShoppingListEntryInput.vue_vue_type_style_index_1_lang-DiO3wd3y.js";import{_ as De}from"./ClosableHelpAlert.vue_vue_type_script_setup_true_lang-Bq7D6yIF.js";import{_ as be}from"./AddToShoppingDialog.vue_vue_type_script_setup_true_lang-ByrmCw9F.js";import{a as Se,V as F,b as we,c as P}from"./VTabs-BQFRhgOd.js";import{V as ye}from"./VTextarea-Dyu7dPGe.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import"./KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.js";import"./PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.js";import"./BtnCopy.vue_vue_type_script_setup_true_lang-B_1A58TG.js";import"./VTooltip-CP00KBBq.js";import"./useFileApi-4KcBp6Fj.js";import"./model_utils-CVQgSPL_.js";import"./number_utils-1sJWKMUK.js";function B(u,p){let d=[];return u.forEach(r=>{d.push(f.fromJSDate(r).plus({days:p}).toJSDate())}),d}function L(u,p){if(u=u.sort((d,r)=>d.getTime()-r.getTime()),p<0)u.splice(u.length-Math.abs(p),Math.abs(p));else if(u.length==0)u.push(new Date);else{let d=f.fromJSDate(u[u.length-1]);for(let r=0;rd.item,()=>d.itemId],()=>{N()});const y=c("plan"),n=c([]);_(()=>{N()});function N(){const i=new H;w.value=!0,i.apiMealTypeList().then(a=>{let t={};a.results.forEach(D=>{D._default&&(t=D)}),Object.keys(t).length==0&&a.results.length>0&&(t=a.results[0]),x(d.item,d.itemId,{newItemFunction:()=>{e.value.fromDate=f.now().toJSDate(),e.value.toDate=f.now().toJSDate(),e.value.shared=$().userSettings.planShare,e.value.servings=1,e.value.mealType=t,e.value.addshopping=$().userSettings.mealplanAutoaddShopping,G(d.itemDefaults),e.value.toDate{C.value=!1})},existingItemFunction:()=>{e.value=structuredClone(K(e.value)),O(),h()}})})}function V(){n.value!=null?(e.value.fromDate=n.value[0],n.value[n.value.length-1]>e.value.fromDate?e.value.toDate=n.value[n.value.length-1]:e.value.toDate=e.value.fromDate):re().addMessage(pe.WARNING,"Missing Date",7e3)}function h(){J().refreshFromAPI(e.value.id)}function O(){if(e.value.toDate&&f.fromJSDate(e.value.toDate).diff(f.fromJSDate(e.value.fromDate),"days").toObject().days>=1){n.value=[e.value.fromDate];let i=f.fromJSDate(e.value.fromDate).plus({day:1}).toJSDate();for(;i<=e.value.toDate;)n.value.push(i),i=f.fromJSDate(i).plus({day:1}).toJSDate()}else n.value=[e.value.fromDate,e.value.fromDate]}return(i,a)=>(m(),v(fe,{loading:l(w),dialog:u.dialog,onSave:a[17]||(a[17]=t=>{l(q)().then(D=>{l(E)().plans.set(D.id,D),h()})}),onDelete:a[18]||(a[18]=t=>{l(E)().plans.delete(l(e).id),l(W)()}),onClose:a[19]||(a[19]=t=>{r("close"),C.value=!1}),"is-update":l(g)(),"is-changed":l(C),"model-class":l(Q),"object-name":l(z)(),"editing-object":l(e)},{default:o(()=>[s(A,{class:"pa-0"},{default:o(()=>[s(Se,{modelValue:y.value,"onUpdate:modelValue":a[0]||(a[0]=t=>y.value=t),disabled:l(w),grow:""},{default:o(()=>[s(F,{"prepend-icon":"$mealplan",value:"plan"},{default:o(()=>[M(U(i.$t("Meal_Plan")),1)]),_:1}),s(F,{"prepend-icon":"$shopping",value:"shopping",disabled:!l(g)()},{default:o(()=>[M(U(i.$t("Shopping_list")),1)]),_:1},8,["disabled"])]),_:1},8,["modelValue","disabled"])]),_:1}),s(A,null,{default:o(()=>[s(we,{modelValue:y.value,"onUpdate:modelValue":a[16]||(a[16]=t=>y.value=t)},{default:o(()=>[s(P,{value:"plan"},{default:o(()=>[s(Z,{disabled:l(w)},{default:o(()=>[s(j,null,{default:o(()=>[s(k,{cols:"12",md:"6"},{default:o(()=>[s(I,{model:"Recipe",modelValue:l(e).recipe,"onUpdate:modelValue":[a[1]||(a[1]=t=>l(e).recipe=t),a[2]||(a[2]=t=>l(e).servings=l(e).recipe?l(e).recipe.servings:1)]},null,8,["modelValue"]),l(e)&&l(e).recipe?(m(),v(ve,{key:0,recipe:l(e).recipe,"link-target":"_blank"},null,8,["recipe"])):b("",!0),!l(e).shopping&&l(e).recipe&&l(g)()?(m(),v(S,{key:1,"prepend-icon":"$shopping",color:"create",class:"mt-1"},{default:o(()=>[M(U(i.$t("Add"))+" ",1),s(be,{recipe:l(e).recipe,"meal-plan":l(e),onCreated:a[3]||(a[3]=t=>{h(),l(e).shopping=!0})},null,8,["recipe","meal-plan"])]),_:1})):b("",!0),l(e).recipe&&!l(g)()?(m(),v(ee,{key:2,label:i.$t("AddToShopping"),modelValue:l(e).addshopping,"onUpdate:modelValue":a[4]||(a[4]=t=>l(e).addshopping=t),"hide-details":""},null,8,["label","modelValue"])):b("",!0)]),_:1}),s(k,{cols:"12",md:"6"},{default:o(()=>[s(le,{label:i.$t("Title"),modelValue:l(e).title,"onUpdate:modelValue":a[5]||(a[5]=t=>l(e).title=t)},null,8,["label","modelValue"]),s(l(ae),{modelValue:n.value,"onUpdate:modelValue":[a[6]||(a[6]=t=>n.value=t),a[7]||(a[7]=t=>V())],"first-day-of-week":l($)().deviceSettings.mealplan_startingDayOfWeek,"show-week":l($)().deviceSettings.mealplan_displayWeekNumbers,label:i.$t("Date"),multiple:"range","prepend-icon":"","prepend-inner-icon":"$calendar","hide-details":""},null,8,["modelValue","first-day-of-week","show-week","label"]),s(te,null,{default:o(()=>[s(se,{elevation:"1",class:"w-100",divided:"",border:""},{default:o(()=>[s(S,{class:"w-25",onClick:a[8]||(a[8]=t=>{l(L)(n.value,-1),V()})},{default:o(()=>a[20]||(a[20]=[T("i",{class:"fa-solid fa-minus"},null,-1)])),_:1,__:[20]}),s(S,{class:"w-25",onClick:a[9]||(a[9]=t=>{n.value=l(B)(n.value,-1),V()})},{default:o(()=>a[21]||(a[21]=[T("i",{class:"fa-solid fa-angles-left"},null,-1)])),_:1,__:[21]}),s(S,{class:"w-25",onClick:a[10]||(a[10]=t=>{n.value=l(B)(n.value,1),V()})},{default:o(()=>a[22]||(a[22]=[T("i",{class:"fa-solid fa-angles-right"},null,-1)])),_:1,__:[22]}),s(S,{class:"w-25",onClick:a[11]||(a[11]=t=>{l(L)(n.value,1),V()})},{default:o(()=>a[23]||(a[23]=[T("i",{class:"fa-solid fa-plus"},null,-1)])),_:1,__:[23]})]),_:1})]),_:1}),s(I,{model:"MealType","allow-create":!0,modelValue:l(e).mealType,"onUpdate:modelValue":a[12]||(a[12]=t=>l(e).mealType=t)},null,8,["modelValue"]),s(oe,{"control-variant":"split",min:0,modelValue:l(e).servings,"onUpdate:modelValue":a[13]||(a[13]=t=>l(e).servings=t),label:i.$t("Servings"),precision:2},null,8,["modelValue","label"]),s(I,{model:"User","allow-create":!1,modelValue:l(e).shared,"onUpdate:modelValue":a[14]||(a[14]=t=>l(e).shared=t),"item-label":"displayName",mode:"tags"},null,8,["modelValue"])]),_:1})]),_:1}),s(j,{dense:""},{default:o(()=>[s(k,{cols:"12"},{default:o(()=>[s(ye,{label:i.$t("Note"),modelValue:l(e).note,"onUpdate:modelValue":a[15]||(a[15]=t=>l(e).note=t),rows:"3"},null,8,["label","modelValue"])]),_:1})]),_:1})]),_:1},8,["disabled"])]),_:1}),s(P,{value:"shopping"},{default:o(()=>[s(De,{class:"mb-2",text:i.$t("MealPlanShoppingHelp")},null,8,["text"]),l(g)()?(m(),v(j,{key:0,dense:"",style:{"max-height":"75vh","min-height":"30vh"},class:"overflow-y-scroll"},{default:o(()=>[s(k,null,{default:o(()=>[s(ge,{loading:l(J)().currentlyUpdating,"meal-plan":l(e)},null,8,["loading","meal-plan"]),l(e).id?(m(),v(ne,{key:0},{default:o(()=>[(m(!0),ie(ue,null,de(l(J)().getMealPlanEntries(l(e).id),t=>(m(),v(Ve,{"shopping-list-food":t,"hide-info-row":"",key:t.food.id},null,8,["shopping-list-food"]))),128))]),_:1})):b("",!0)]),_:1})]),_:1})):b("",!0)]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["loading","dialog","is-update","is-changed","model-class","object-name","editing-object"]))}});export{Pe as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/MealPlanEditor-8ZJIBqi6.5dfbb83ba6be.js.gz b/config/tandoor/staticfiles/vue3/assets/MealPlanEditor-8ZJIBqi6.5dfbb83ba6be.js.gz
deleted file mode 100644
index b2072bf4..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/MealPlanEditor-8ZJIBqi6.5dfbb83ba6be.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/MealPlanEditor-8ZJIBqi6.js b/config/tandoor/staticfiles/vue3/assets/MealPlanEditor-8ZJIBqi6.js
deleted file mode 100644
index fd39fff0..00000000
--- a/config/tandoor/staticfiles/vue3/assets/MealPlanEditor-8ZJIBqi6.js
+++ /dev/null
@@ -1 +0,0 @@
-import{D as f,d as R,aM as Y,r as c,o as _,A as H,aQ as K,L as $,aT as X,h as v,f as m,w as o,g as s,O as A,l,j as M,t as U,ac as Z,k as j,V as k,e as b,ag as I,z as S,U as ee,S as le,aY as ae,aK as te,ba as se,i as T,af as oe,x as ne,b as ie,F as ue,p as de,v as E,Q as re,Y as pe}from"./main-BhFWIRV_.js";import{u as me,_ as fe}from"./useModelEditorFunctions-Du2kfr61.js";import{R as ve}from"./RecipeCard-ZQiVryVZ.js";import{u as J,_ as ge,a as Ve}from"./ShoppingListEntryInput.vue_vue_type_style_index_1_lang-DiO3wd3y.js";import{_ as De}from"./ClosableHelpAlert.vue_vue_type_script_setup_true_lang-Bq7D6yIF.js";import{_ as be}from"./AddToShoppingDialog.vue_vue_type_script_setup_true_lang-ByrmCw9F.js";import{a as Se,V as F,b as we,c as P}from"./VTabs-BQFRhgOd.js";import{V as ye}from"./VTextarea-Dyu7dPGe.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import"./KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.js";import"./PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.js";import"./BtnCopy.vue_vue_type_script_setup_true_lang-B_1A58TG.js";import"./VTooltip-CP00KBBq.js";import"./useFileApi-4KcBp6Fj.js";import"./model_utils-CVQgSPL_.js";import"./number_utils-1sJWKMUK.js";function B(u,p){let d=[];return u.forEach(r=>{d.push(f.fromJSDate(r).plus({days:p}).toJSDate())}),d}function L(u,p){if(u=u.sort((d,r)=>d.getTime()-r.getTime()),p<0)u.splice(u.length-Math.abs(p),Math.abs(p));else if(u.length==0)u.push(new Date);else{let d=f.fromJSDate(u[u.length-1]);for(let r=0;rd.item,()=>d.itemId],()=>{N()});const y=c("plan"),n=c([]);_(()=>{N()});function N(){const i=new H;w.value=!0,i.apiMealTypeList().then(a=>{let t={};a.results.forEach(D=>{D._default&&(t=D)}),Object.keys(t).length==0&&a.results.length>0&&(t=a.results[0]),x(d.item,d.itemId,{newItemFunction:()=>{e.value.fromDate=f.now().toJSDate(),e.value.toDate=f.now().toJSDate(),e.value.shared=$().userSettings.planShare,e.value.servings=1,e.value.mealType=t,e.value.addshopping=$().userSettings.mealplanAutoaddShopping,G(d.itemDefaults),e.value.toDate{C.value=!1})},existingItemFunction:()=>{e.value=structuredClone(K(e.value)),O(),h()}})})}function V(){n.value!=null?(e.value.fromDate=n.value[0],n.value[n.value.length-1]>e.value.fromDate?e.value.toDate=n.value[n.value.length-1]:e.value.toDate=e.value.fromDate):re().addMessage(pe.WARNING,"Missing Date",7e3)}function h(){J().refreshFromAPI(e.value.id)}function O(){if(e.value.toDate&&f.fromJSDate(e.value.toDate).diff(f.fromJSDate(e.value.fromDate),"days").toObject().days>=1){n.value=[e.value.fromDate];let i=f.fromJSDate(e.value.fromDate).plus({day:1}).toJSDate();for(;i<=e.value.toDate;)n.value.push(i),i=f.fromJSDate(i).plus({day:1}).toJSDate()}else n.value=[e.value.fromDate,e.value.fromDate]}return(i,a)=>(m(),v(fe,{loading:l(w),dialog:u.dialog,onSave:a[17]||(a[17]=t=>{l(q)().then(D=>{l(E)().plans.set(D.id,D),h()})}),onDelete:a[18]||(a[18]=t=>{l(E)().plans.delete(l(e).id),l(W)()}),onClose:a[19]||(a[19]=t=>{r("close"),C.value=!1}),"is-update":l(g)(),"is-changed":l(C),"model-class":l(Q),"object-name":l(z)(),"editing-object":l(e)},{default:o(()=>[s(A,{class:"pa-0"},{default:o(()=>[s(Se,{modelValue:y.value,"onUpdate:modelValue":a[0]||(a[0]=t=>y.value=t),disabled:l(w),grow:""},{default:o(()=>[s(F,{"prepend-icon":"$mealplan",value:"plan"},{default:o(()=>[M(U(i.$t("Meal_Plan")),1)]),_:1}),s(F,{"prepend-icon":"$shopping",value:"shopping",disabled:!l(g)()},{default:o(()=>[M(U(i.$t("Shopping_list")),1)]),_:1},8,["disabled"])]),_:1},8,["modelValue","disabled"])]),_:1}),s(A,null,{default:o(()=>[s(we,{modelValue:y.value,"onUpdate:modelValue":a[16]||(a[16]=t=>y.value=t)},{default:o(()=>[s(P,{value:"plan"},{default:o(()=>[s(Z,{disabled:l(w)},{default:o(()=>[s(j,null,{default:o(()=>[s(k,{cols:"12",md:"6"},{default:o(()=>[s(I,{model:"Recipe",modelValue:l(e).recipe,"onUpdate:modelValue":[a[1]||(a[1]=t=>l(e).recipe=t),a[2]||(a[2]=t=>l(e).servings=l(e).recipe?l(e).recipe.servings:1)]},null,8,["modelValue"]),l(e)&&l(e).recipe?(m(),v(ve,{key:0,recipe:l(e).recipe,"link-target":"_blank"},null,8,["recipe"])):b("",!0),!l(e).shopping&&l(e).recipe&&l(g)()?(m(),v(S,{key:1,"prepend-icon":"$shopping",color:"create",class:"mt-1"},{default:o(()=>[M(U(i.$t("Add"))+" ",1),s(be,{recipe:l(e).recipe,"meal-plan":l(e),onCreated:a[3]||(a[3]=t=>{h(),l(e).shopping=!0})},null,8,["recipe","meal-plan"])]),_:1})):b("",!0),l(e).recipe&&!l(g)()?(m(),v(ee,{key:2,label:i.$t("AddToShopping"),modelValue:l(e).addshopping,"onUpdate:modelValue":a[4]||(a[4]=t=>l(e).addshopping=t),"hide-details":""},null,8,["label","modelValue"])):b("",!0)]),_:1}),s(k,{cols:"12",md:"6"},{default:o(()=>[s(le,{label:i.$t("Title"),modelValue:l(e).title,"onUpdate:modelValue":a[5]||(a[5]=t=>l(e).title=t)},null,8,["label","modelValue"]),s(l(ae),{modelValue:n.value,"onUpdate:modelValue":[a[6]||(a[6]=t=>n.value=t),a[7]||(a[7]=t=>V())],"first-day-of-week":l($)().deviceSettings.mealplan_startingDayOfWeek,"show-week":l($)().deviceSettings.mealplan_displayWeekNumbers,label:i.$t("Date"),multiple:"range","prepend-icon":"","prepend-inner-icon":"$calendar","hide-details":""},null,8,["modelValue","first-day-of-week","show-week","label"]),s(te,null,{default:o(()=>[s(se,{elevation:"1",class:"w-100",divided:"",border:""},{default:o(()=>[s(S,{class:"w-25",onClick:a[8]||(a[8]=t=>{l(L)(n.value,-1),V()})},{default:o(()=>a[20]||(a[20]=[T("i",{class:"fa-solid fa-minus"},null,-1)])),_:1,__:[20]}),s(S,{class:"w-25",onClick:a[9]||(a[9]=t=>{n.value=l(B)(n.value,-1),V()})},{default:o(()=>a[21]||(a[21]=[T("i",{class:"fa-solid fa-angles-left"},null,-1)])),_:1,__:[21]}),s(S,{class:"w-25",onClick:a[10]||(a[10]=t=>{n.value=l(B)(n.value,1),V()})},{default:o(()=>a[22]||(a[22]=[T("i",{class:"fa-solid fa-angles-right"},null,-1)])),_:1,__:[22]}),s(S,{class:"w-25",onClick:a[11]||(a[11]=t=>{l(L)(n.value,1),V()})},{default:o(()=>a[23]||(a[23]=[T("i",{class:"fa-solid fa-plus"},null,-1)])),_:1,__:[23]})]),_:1})]),_:1}),s(I,{model:"MealType","allow-create":!0,modelValue:l(e).mealType,"onUpdate:modelValue":a[12]||(a[12]=t=>l(e).mealType=t)},null,8,["modelValue"]),s(oe,{"control-variant":"split",min:0,modelValue:l(e).servings,"onUpdate:modelValue":a[13]||(a[13]=t=>l(e).servings=t),label:i.$t("Servings"),precision:2},null,8,["modelValue","label"]),s(I,{model:"User","allow-create":!1,modelValue:l(e).shared,"onUpdate:modelValue":a[14]||(a[14]=t=>l(e).shared=t),"item-label":"displayName",mode:"tags"},null,8,["modelValue"])]),_:1})]),_:1}),s(j,{dense:""},{default:o(()=>[s(k,{cols:"12"},{default:o(()=>[s(ye,{label:i.$t("Note"),modelValue:l(e).note,"onUpdate:modelValue":a[15]||(a[15]=t=>l(e).note=t),rows:"3"},null,8,["label","modelValue"])]),_:1})]),_:1})]),_:1},8,["disabled"])]),_:1}),s(P,{value:"shopping"},{default:o(()=>[s(De,{class:"mb-2",text:i.$t("MealPlanShoppingHelp")},null,8,["text"]),l(g)()?(m(),v(j,{key:0,dense:"",style:{"max-height":"75vh","min-height":"30vh"},class:"overflow-y-scroll"},{default:o(()=>[s(k,null,{default:o(()=>[s(ge,{loading:l(J)().currentlyUpdating,"meal-plan":l(e)},null,8,["loading","meal-plan"]),l(e).id?(m(),v(ne,{key:0},{default:o(()=>[(m(!0),ie(ue,null,de(l(J)().getMealPlanEntries(l(e).id),t=>(m(),v(Ve,{"shopping-list-food":t,"hide-info-row":"",key:t.food.id},null,8,["shopping-list-food"]))),128))]),_:1})):b("",!0)]),_:1})]),_:1})):b("",!0)]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["loading","dialog","is-update","is-changed","model-class","object-name","editing-object"]))}});export{Pe as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/MealPlanEditor-8ZJIBqi6.js.gz b/config/tandoor/staticfiles/vue3/assets/MealPlanEditor-8ZJIBqi6.js.gz
deleted file mode 100644
index b2072bf4..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/MealPlanEditor-8ZJIBqi6.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/MealPlanSettings-9gU5vdbh.3ec58af0d5b5.js b/config/tandoor/staticfiles/vue3/assets/MealPlanSettings-9gU5vdbh.3ec58af0d5b5.js
deleted file mode 100644
index b646d3e4..00000000
--- a/config/tandoor/staticfiles/vue3/assets/MealPlanSettings-9gU5vdbh.3ec58af0d5b5.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as g,r as S,o as V,A as v,Q as y,R as M,h as _,w as l,ac as T,i,g as a,t as n,B as p,l as u,ag as b,j as r,z as d,ah as B,_ as h,b as C,p as D,F as w,x as E,f as c,L as m,y as L,I as N,ai as k,G as A}from"./main-BhFWIRV_.js";const F={class:"text-h6"},R={class:"text-h6 mt-2"},U={class:"text-subtitle-2 mb-2"},I={class:"text-h6 mt-2"},z=g({__name:"MealPlanSettings",setup(P){const o=S([]);V(()=>{new v().apiMealTypeList().then(t=>{o.value=t.results}).catch(t=>{y().addError(M.FETCH_ERROR,t)})});function $(e,t){return e.timet.time?1:0}function f(e){o.value.splice(o.value.indexOf(e),1)}return(e,t)=>(c(),_(T,null,{default:l(()=>[i("p",F,n(e.$t("Meal_Plan")),1),a(p,{class:"mb-3"}),a(b,{hint:e.$t("plan_share_desc"),label:e.$t("Share"),model:"User","allow-create":!1,modelValue:u(m)().userSettings.planShare,"onUpdate:modelValue":t[0]||(t[0]=s=>u(m)().userSettings.planShare=s),"item-label":"displayName",mode:"tags"},null,8,["hint","label","modelValue"]),a(d,{class:"mt-3",color:"success",onClick:t[1]||(t[1]=s=>u(m)().updateUserSettings()),"prepend-icon":"$save"},{default:l(()=>[r(n(e.$t("Save")),1)]),_:1}),i("p",R,n(e.$t("DeviceSettings")),1),a(p),i("p",U,n(e.$t("DeviceSettingsHelp")),1),a(B),i("p",I,[r(n(e.$t("Meal_Types"))+" ",1),a(d,{"prepend-icon":"$create",color:"create",size:"small",class:"float-right"},{default:l(()=>[r(n(e.$t("New"))+" ",1),a(h,{model:"MealType",onCreate:t[2]||(t[2]=s=>o.value.push(s)),onDelete:f})]),_:1})]),a(p),a(E,{class:"mt-2"},{default:l(()=>[(c(!0),C(w,null,D(o.value.sort($),s=>(c(),_(L,null,{append:l(()=>[a(k,{class:"me-2"},{default:l(()=>[r(n(s.time),1)]),_:2},1024),a(d,{color:"edit"},{default:l(()=>[a(A,{icon:"$edit"}),a(h,{model:"MealType",item:s,onDelete:f},null,8,["item"])]),_:2},1024)]),default:l(()=>[a(N,{color:s.color},null,8,["color"]),r(" "+n(s.name)+" ",1)]),_:2},1024))),256))]),_:1})]),_:1}))}});export{z as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/MealPlanSettings-9gU5vdbh.3ec58af0d5b5.js.gz b/config/tandoor/staticfiles/vue3/assets/MealPlanSettings-9gU5vdbh.3ec58af0d5b5.js.gz
deleted file mode 100644
index 13b3b1f7..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/MealPlanSettings-9gU5vdbh.3ec58af0d5b5.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/MealPlanSettings-9gU5vdbh.js b/config/tandoor/staticfiles/vue3/assets/MealPlanSettings-9gU5vdbh.js
deleted file mode 100644
index b646d3e4..00000000
--- a/config/tandoor/staticfiles/vue3/assets/MealPlanSettings-9gU5vdbh.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as g,r as S,o as V,A as v,Q as y,R as M,h as _,w as l,ac as T,i,g as a,t as n,B as p,l as u,ag as b,j as r,z as d,ah as B,_ as h,b as C,p as D,F as w,x as E,f as c,L as m,y as L,I as N,ai as k,G as A}from"./main-BhFWIRV_.js";const F={class:"text-h6"},R={class:"text-h6 mt-2"},U={class:"text-subtitle-2 mb-2"},I={class:"text-h6 mt-2"},z=g({__name:"MealPlanSettings",setup(P){const o=S([]);V(()=>{new v().apiMealTypeList().then(t=>{o.value=t.results}).catch(t=>{y().addError(M.FETCH_ERROR,t)})});function $(e,t){return e.timet.time?1:0}function f(e){o.value.splice(o.value.indexOf(e),1)}return(e,t)=>(c(),_(T,null,{default:l(()=>[i("p",F,n(e.$t("Meal_Plan")),1),a(p,{class:"mb-3"}),a(b,{hint:e.$t("plan_share_desc"),label:e.$t("Share"),model:"User","allow-create":!1,modelValue:u(m)().userSettings.planShare,"onUpdate:modelValue":t[0]||(t[0]=s=>u(m)().userSettings.planShare=s),"item-label":"displayName",mode:"tags"},null,8,["hint","label","modelValue"]),a(d,{class:"mt-3",color:"success",onClick:t[1]||(t[1]=s=>u(m)().updateUserSettings()),"prepend-icon":"$save"},{default:l(()=>[r(n(e.$t("Save")),1)]),_:1}),i("p",R,n(e.$t("DeviceSettings")),1),a(p),i("p",U,n(e.$t("DeviceSettingsHelp")),1),a(B),i("p",I,[r(n(e.$t("Meal_Types"))+" ",1),a(d,{"prepend-icon":"$create",color:"create",size:"small",class:"float-right"},{default:l(()=>[r(n(e.$t("New"))+" ",1),a(h,{model:"MealType",onCreate:t[2]||(t[2]=s=>o.value.push(s)),onDelete:f})]),_:1})]),a(p),a(E,{class:"mt-2"},{default:l(()=>[(c(!0),C(w,null,D(o.value.sort($),s=>(c(),_(L,null,{append:l(()=>[a(k,{class:"me-2"},{default:l(()=>[r(n(s.time),1)]),_:2},1024),a(d,{color:"edit"},{default:l(()=>[a(A,{icon:"$edit"}),a(h,{model:"MealType",item:s,onDelete:f},null,8,["item"])]),_:2},1024)]),default:l(()=>[a(N,{color:s.color},null,8,["color"]),r(" "+n(s.name)+" ",1)]),_:2},1024))),256))]),_:1})]),_:1}))}});export{z as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/MealPlanSettings-9gU5vdbh.js.gz b/config/tandoor/staticfiles/vue3/assets/MealPlanSettings-9gU5vdbh.js.gz
deleted file mode 100644
index 13b3b1f7..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/MealPlanSettings-9gU5vdbh.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/MealTypeEditor-CeNz0Pzn.69b5bb4063bf.js b/config/tandoor/staticfiles/vue3/assets/MealTypeEditor-CeNz0Pzn.69b5bb4063bf.js
deleted file mode 100644
index 63807ae3..00000000
--- a/config/tandoor/staticfiles/vue3/assets/MealTypeEditor-CeNz0Pzn.69b5bb4063bf.js
+++ /dev/null
@@ -1 +0,0 @@
-import{ak as p,al as ee,r as k,dQ as Me,ap as ye,am as xe,c as x,aM as te,at as le,i as C,bL as ce,n as y,ao as be,g as h,z,j as de,bj as Ce,o as ke,cx as re,bk as we,av as Z,cy as Se,ck as ne,d as Pe,h as se,f as me,w as O,O as Ne,ac as Te,l as m,S as ve,H as He,e as Be,U as Ae}from"./main-BhFWIRV_.js";import{u as De,_ as Ie}from"./useModelEditorFunctions-Du2kfr61.js";import{V as $e}from"./VColorPicker-DN5Oz5I8.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";function j(e){let T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;return String(e).padStart(T,"0")}const Ue=ee({allowedValues:Function,ampm:Boolean,color:String,disabled:Boolean,displayedValue:null,double:Boolean,format:{type:Function,default:e=>e},max:{type:Number,required:!0},min:{type:Number,required:!0},scrollable:Boolean,readonly:Boolean,rotate:{type:Number,default:0},step:{type:Number,default:1},modelValue:{type:Number}},"VTimePickerClock"),fe=p()({name:"VTimePickerClock",props:Ue(),emits:{change:e=>!0,input:e=>!0},setup(e,T){let{emit:r}=T;const S=k(null),H=k(null),a=k(void 0),s=k(!1),v=k(null),P=k(null),$=Me(t=>r("change",t),750),{textColorClasses:_,textColorStyles:M}=ye(()=>e.color),{backgroundColorClasses:d,backgroundColorStyles:B}=xe(()=>e.color),N=x(()=>e.max-e.min+1),w=x(()=>e.double?N.value/2:N.value),o=x(()=>360/w.value),f=x(()=>o.value*Math.PI/180),g=x(()=>e.modelValue==null?e.min:e.modelValue),F=x(()=>.62),q=x(()=>{const t=[];for(let n=e.min;n<=e.max;n=n+e.step)t.push(n);return t});te(()=>e.modelValue,t=>{a.value=t});function Y(t){a.value!==t&&(a.value=t),r("input",t)}function A(t){return!e.allowedValues||e.allowedValues(t)}function W(t){if(!e.scrollable||e.disabled)return;t.preventDefault();const n=Math.sign(-t.deltaY||1);let i=g.value;do i=i+n,i=(i-e.min+N.value)%N.value+e.min;while(!A(i)&&i!==g.value);i!==e.displayedValue&&Y(i),$(i)}function Q(t){return e.double&&t-e.min>=w.value}function R(t){return Q(t)?F.value:1}function K(t){const n=e.rotate*Math.PI/180;return{x:Math.sin((t-e.min)*f.value+n)*R(t),y:-Math.cos((t-e.min)*f.value+n)*R(t)}}function X(t,n){const i=(Math.round(t/o.value)+(n?w.value:0))%N.value+e.min;return t<360-o.value/2?i:n?e.max-w.value+1:e.min}function l(t){const{x:n,y:i}=K(t);return{left:`${Math.round(50+n*50)}%`,top:`${Math.round(50+i*50)}%`}}function c(t,n){const i=n.x-t.x,E=n.y-t.y;return Math.sqrt(i*i+E*E)}function b(t,n){const i=2*Math.atan2(n.y-t.y-c(t,n),n.x-t.x);return Math.abs(i*180/Math.PI)}function u(t){v.value===null&&(v.value=t),P.value=t,Y(t)}function V(t){if(t.preventDefault(),!s.value&&t.type!=="click"||!S.value)return;const{width:n,top:i,left:E}=S.value?.getBoundingClientRect(),{width:U}=H.value?.getBoundingClientRect()??{width:0},{clientX:G,clientY:ge}="touches"in t?t.touches[0]:t,ae={x:n/2,y:-n/2},ue={x:G-E,y:i-ge},oe=Math.round(b(ae,ue)-e.rotate+360)%360,ie=e.double&&c(ae,ue)<(U+U*F.value)/4,Ve=Math.ceil(15/o.value);let L;for(let J=0;JC("div",{class:y([{"v-time-picker-clock":!0,"v-time-picker-clock--indeterminate":e.modelValue==null,"v-time-picker-clock--readonly":e.readonly}]),onMousedown:D,onTouchstart:D,onWheel:W,ref:S},[C("div",{class:"v-time-picker-clock__inner",ref:H},[C("div",{class:y([{"v-time-picker-clock__hand":!0,"v-time-picker-clock__hand--inner":Q(e.modelValue)},_.value]),style:ce([{transform:`rotate(${e.rotate+o.value*(g.value-e.min)}deg) scaleY(${R(g.value)})`},M.value])},null),q.value.map(t=>{const n=t===g.value;return C("div",{class:y([{"v-time-picker-clock__item":!0,"v-time-picker-clock__item--active":n,"v-time-picker-clock__item--disabled":e.disabled||!A(t)},n&&d.value]),style:ce([l(t),n&&B.value])},[C("span",null,[e.format(t)])])})])]))}}),je=ee({ampm:Boolean,color:String,disabled:Boolean,hour:Number,minute:Number,second:Number,period:String,readonly:Boolean,useSeconds:Boolean,value:Number,viewMode:String},"VTimePickerControls"),_e=p()({name:"VTimePickerControls",props:je(),emits:{"update:period":e=>!0,"update:viewMode":e=>!0},setup(e,T){let{emit:r,slots:S}=T;const{t:H}=be();return le(()=>{let a=e.hour;return e.ampm&&(a=a?(a-1)%12+1:12),C("div",{class:"v-time-picker-controls"},[C("div",{class:y({"v-time-picker-controls__time":!0,"v-time-picker-controls__time--with-seconds":e.useSeconds})},[h(z,{active:e.viewMode==="hour",color:e.viewMode==="hour"?e.color:void 0,disabled:e.disabled,variant:"tonal",class:y({"v-time-picker-controls__time__btn":!0,"v-time-picker-controls__time--with-ampm__btn":e.ampm,"v-time-picker-controls__time--with-seconds__btn":e.useSeconds}),text:e.hour==null?"--":j(`${a}`),onClick:()=>r("update:viewMode","hour")},null),C("span",{class:y(["v-time-picker-controls__time__separator",{"v-time-picker-controls--with-seconds__time__separator":e.useSeconds}])},[de(":")]),h(z,{active:e.viewMode==="minute",color:e.viewMode==="minute"?e.color:void 0,class:y({"v-time-picker-controls__time__btn":!0,"v-time-picker-controls__time__btn__active":e.viewMode==="minute","v-time-picker-controls__time--with-ampm__btn":e.ampm,"v-time-picker-controls__time--with-seconds__btn":e.useSeconds}),disabled:e.disabled,variant:"tonal",text:e.minute==null?"--":j(e.minute),onClick:()=>r("update:viewMode","minute")},null),e.useSeconds&&C("span",{class:y(["v-time-picker-controls__time__separator",{"v-time-picker-controls--with-seconds__time__separator":e.useSeconds}]),key:"secondsDivider"},[de(":")]),e.useSeconds&&h(z,{key:"secondsVal",active:e.viewMode==="second",color:e.viewMode==="second"?e.color:void 0,variant:"tonal",onClick:()=>r("update:viewMode","second"),class:y({"v-time-picker-controls__time__btn":!0,"v-time-picker-controls__time__btn__active":e.viewMode==="second","v-time-picker-controls__time--with-seconds__btn":e.useSeconds}),disabled:e.disabled,text:e.second==null?"--":j(e.second)},null),e.ampm&&C("div",{class:"v-time-picker-controls__ampm"},[h(z,{active:e.period==="am",color:e.period==="am"?e.color:void 0,class:y({"v-time-picker-controls__ampm__am":!0,"v-time-picker-controls__ampm__btn":!0,"v-time-picker-controls__ampm__btn__active":e.period==="am"}),disabled:e.disabled,text:H("$vuetify.timePicker.am"),variant:e.disabled&&e.period==="am"?"elevated":"tonal",onClick:()=>e.period!=="am"?r("update:period","am"):null},null),h(z,{active:e.period==="pm",color:e.period==="pm"?e.color:void 0,class:y({"v-time-picker-controls__ampm__pm":!0,"v-time-picker-controls__ampm__btn":!0,"v-time-picker-controls__ampm__btn__active":e.period==="pm"}),disabled:e.disabled,text:H("$vuetify.timePicker.pm"),variant:e.disabled&&e.period==="pm"?"elevated":"tonal",onClick:()=>e.period!=="pm"?r("update:period","pm"):null},null)])])])}),{}}}),Ee=ne(24),he=ne(12),Le=he.map(e=>e+12);ne(60);const Fe=ee({allowedHours:[Function,Array],allowedMinutes:[Function,Array],allowedSeconds:[Function,Array],disabled:Boolean,format:{type:String,default:"ampm"},max:String,min:String,viewMode:{type:String,default:"hour"},modelValue:null,readonly:Boolean,scrollable:Boolean,useSeconds:Boolean,...we(Se({title:"$vuetify.timePicker.title"}),["landscape"])},"VTimePicker"),Re=p()({name:"VTimePicker",props:Fe(),emits:{"update:hour":e=>!0,"update:minute":e=>!0,"update:period":e=>!0,"update:second":e=>!0,"update:modelValue":e=>!0,"update:viewMode":e=>!0},setup(e,T){let{emit:r,slots:S}=T;const{t:H}=be(),a=k(null),s=k(null),v=k(null),P=k(null),$=k(null),_=k(null),M=k("am"),d=Ce(e,"viewMode","hour"),B=k(null),N=k(null),w=x(()=>{let l;if(e.allowedHours instanceof Array?l=u=>e.allowedHours.includes(u):l=e.allowedHours,!e.min&&!e.max)return l;const c=e.min?Number(e.min.split(":")[0]):0,b=e.max?Number(e.max.split(":")[0]):23;return u=>u>=Number(c)&&u<=Number(b)&&(!l||l(u))}),o=x(()=>{let l;const c=!w.value||a.value===null||w.value(a.value);if(e.allowedMinutes instanceof Array?l=n=>e.allowedMinutes.includes(n):l=e.allowedMinutes,!e.min&&!e.max)return c?l:()=>!1;const[b,u]=e.min?e.min.split(":").map(Number):[0,0],[V,D]=e.max?e.max.split(":").map(Number):[23,59],I=b*60+Number(u),t=V*60+Number(D);return n=>{const i=60*a.value+n;return i>=I&&i<=t&&c&&(!l||l(n))}}),f=x(()=>{let l;const b=(!w.value||a.value===null||w.value(a.value))&&(!o.value||s.value===null||o.value(s.value));if(e.allowedSeconds instanceof Array?l=U=>e.allowedSeconds.includes(U):l=e.allowedSeconds,!e.min&&!e.max)return b?l:()=>!1;const[u,V,D]=e.min?e.min.split(":").map(Number):[0,0,0],[I,t,n]=e.max?e.max.split(":").map(Number):[23,59,59],i=u*3600+V*60+Number(D||0),E=I*3600+t*60+Number(n||0);return U=>{const G=3600*a.value+60*s.value+U;return G>=i&&G<=E&&b&&(!l||l(U))}}),g=x(()=>e.format==="ampm");te(()=>e.modelValue,l=>W(l)),ke(()=>{W(e.modelValue)});function F(){return a.value!=null&&s.value!=null&&(!e.useSeconds||v.value!=null)?`${j(a.value)}:${j(s.value)}`+(e.useSeconds?`:${j(v.value)}`:""):null}function q(){const l=F();l!==null&&r("update:modelValue",l)}function Y(l){return l?(l-1)%12+1:12}function A(l,c){return l%12+(c==="pm"?12:0)}function W(l){if(l==null||l==="")a.value=null,s.value=null,v.value=null;else if(l instanceof Date)a.value=l.getHours(),s.value=l.getMinutes(),v.value=l.getSeconds();else{const[c,,b,,u,V]=l.trim().toLowerCase().match(/^(\d+):(\d+)(:(\d+))?([ap]m)?$/)||new Array(6);a.value=V?A(parseInt(c,10),V):parseInt(c,10),s.value=parseInt(b,10),v.value=parseInt(u||0,10)}M.value=a.value==null||a.value<12?"am":"pm"}function Q(l,c){const b=w.value;if(!b)return c;const u=g.value?c<12?he:Le:Ee;return((u.find(D=>b((D+c)%u.length+u[0]))||0)+c)%u.length+u[0]}function R(l){if(M.value=l,a.value!=null){const c=a.value+(M.value==="am"?-12:12);a.value=Q("hour",c)}return r("update:period",l),q(),!0}function K(l){d.value==="hour"?a.value=g.value?A(l,M.value):l:d.value==="minute"?s.value=l:v.value=l}function X(l){switch(d.value||"hour"){case"hour":r("update:hour",l);break;case"minute":r("update:minute",l);break;case"second":r("update:second",l);break}const c=a.value!==null&&s.value!==null&&(e.useSeconds?v.value!==null:!0);d.value==="hour"?d.value="minute":e.useSeconds&&d.value==="minute"&&(d.value="second"),!(a.value===P.value&&s.value===$.value&&(!e.useSeconds||v.value===_.value)||F()===null)&&(P.value=a.value,$.value=s.value,e.useSeconds&&(_.value=v.value),c&&q())}le(()=>{const l=re.filterProps(e),c=_e.filterProps(e),b=fe.filterProps(we(e,["format","modelValue","min","max"]));return h(re,Z(l,{color:void 0,class:["v-time-picker",e.class],style:e.style}),{title:()=>S.title?.()??C("div",{class:"v-time-picker__title"},[H(e.title)]),header:()=>h(_e,Z(c,{ampm:g.value,hour:a.value,minute:s.value,period:M.value,second:v.value,viewMode:d.value,"onUpdate:period":u=>R(u),"onUpdate:viewMode":u=>d.value=u,ref:B}),null),default:()=>h(fe,Z(b,{allowedValues:d.value==="hour"?w.value:d.value==="minute"?o.value:f.value,double:d.value==="hour"&&!g.value,format:d.value==="hour"?g.value?Y:u=>u:u=>j(u,2),max:d.value==="hour"?g.value&&M.value==="am"?11:23:59,min:d.value==="hour"&&g.value&&M.value==="pm"?12:0,size:20,step:d.value==="hour"?1:5,modelValue:d.value==="hour"?a.value:d.value==="minute"?s.value:v.value,onChange:X,onInput:K,ref:N}),null),actions:S.actions})})}}),We=Pe({__name:"MealTypeEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(e,{emit:T}){const r=e,S=T,{setupState:H,deleteObject:a,saveObject:s,isUpdate:v,editingObjName:P,loading:$,editingObj:_,editingObjChanged:M,modelClass:d}=De("MealType",S);te([()=>r.item,()=>r.itemId],()=>{N()});const B=k(!1);ke(()=>{N()});function N(){H(r.item,r.itemId,{itemDefaults:r.itemDefaults})}return(w,o)=>(me(),se(Ie,{loading:m($),dialog:e.dialog,onSave:m(s),onDelete:m(a),onClose:o[6]||(o[6]=f=>{S("close"),M.value=!1}),"is-update":m(v)(),"is-changed":m(M),"model-class":m(d),"object-name":m(P)(),"editing-object":m(_)},{default:O(()=>[h(Ne,null,{default:O(()=>[h(Te,{disabled:m($)},{default:O(()=>[h(ve,{modelValue:m(_).name,"onUpdate:modelValue":o[0]||(o[0]=f=>m(_).name=f),label:w.$t("Name")},null,8,["modelValue","label"]),h(ve,{"max-width":"200px",modelValue:m(_).time,"onUpdate:modelValue":o[3]||(o[3]=f=>m(_).time=f),active:B.value,focus:B.value,label:w.$t("Time"),"prepend-icon":"fa-solid fa-clock",readonly:""},{default:O(()=>[h(He,{modelValue:B.value,"onUpdate:modelValue":o[2]||(o[2]=f=>B.value=f),"close-on-content-click":!1,activator:"parent",transition:"scale-transition"},{default:O(()=>[B.value?(me(),se(Re,{key:0,format:"24hr",modelValue:m(_).time,"onUpdate:modelValue":o[1]||(o[1]=f=>m(_).time=f)},null,8,["modelValue"])):Be("",!0)]),_:1},8,["modelValue"])]),_:1},8,["modelValue","active","focus","label"]),h(Ae,{modelValue:m(_)._default,"onUpdate:modelValue":o[4]||(o[4]=f=>m(_)._default=f),label:w.$t("Default")},null,8,["modelValue","label"]),h($e,{modelValue:m(_).color,"onUpdate:modelValue":o[5]||(o[5]=f=>m(_).color=f),mode:"hex",modes:["hex"],"show-swatches":"",swatches:[["#ddbf86"],["#b98766"],["#b55e4f"],["#82aa8b"],["#385f84"]]},null,8,["modelValue"])]),_:1},8,["disabled"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{We as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/MealTypeEditor-CeNz0Pzn.69b5bb4063bf.js.gz b/config/tandoor/staticfiles/vue3/assets/MealTypeEditor-CeNz0Pzn.69b5bb4063bf.js.gz
deleted file mode 100644
index cd1d75bb..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/MealTypeEditor-CeNz0Pzn.69b5bb4063bf.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/MealTypeEditor-CeNz0Pzn.js b/config/tandoor/staticfiles/vue3/assets/MealTypeEditor-CeNz0Pzn.js
deleted file mode 100644
index 63807ae3..00000000
--- a/config/tandoor/staticfiles/vue3/assets/MealTypeEditor-CeNz0Pzn.js
+++ /dev/null
@@ -1 +0,0 @@
-import{ak as p,al as ee,r as k,dQ as Me,ap as ye,am as xe,c as x,aM as te,at as le,i as C,bL as ce,n as y,ao as be,g as h,z,j as de,bj as Ce,o as ke,cx as re,bk as we,av as Z,cy as Se,ck as ne,d as Pe,h as se,f as me,w as O,O as Ne,ac as Te,l as m,S as ve,H as He,e as Be,U as Ae}from"./main-BhFWIRV_.js";import{u as De,_ as Ie}from"./useModelEditorFunctions-Du2kfr61.js";import{V as $e}from"./VColorPicker-DN5Oz5I8.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";function j(e){let T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;return String(e).padStart(T,"0")}const Ue=ee({allowedValues:Function,ampm:Boolean,color:String,disabled:Boolean,displayedValue:null,double:Boolean,format:{type:Function,default:e=>e},max:{type:Number,required:!0},min:{type:Number,required:!0},scrollable:Boolean,readonly:Boolean,rotate:{type:Number,default:0},step:{type:Number,default:1},modelValue:{type:Number}},"VTimePickerClock"),fe=p()({name:"VTimePickerClock",props:Ue(),emits:{change:e=>!0,input:e=>!0},setup(e,T){let{emit:r}=T;const S=k(null),H=k(null),a=k(void 0),s=k(!1),v=k(null),P=k(null),$=Me(t=>r("change",t),750),{textColorClasses:_,textColorStyles:M}=ye(()=>e.color),{backgroundColorClasses:d,backgroundColorStyles:B}=xe(()=>e.color),N=x(()=>e.max-e.min+1),w=x(()=>e.double?N.value/2:N.value),o=x(()=>360/w.value),f=x(()=>o.value*Math.PI/180),g=x(()=>e.modelValue==null?e.min:e.modelValue),F=x(()=>.62),q=x(()=>{const t=[];for(let n=e.min;n<=e.max;n=n+e.step)t.push(n);return t});te(()=>e.modelValue,t=>{a.value=t});function Y(t){a.value!==t&&(a.value=t),r("input",t)}function A(t){return!e.allowedValues||e.allowedValues(t)}function W(t){if(!e.scrollable||e.disabled)return;t.preventDefault();const n=Math.sign(-t.deltaY||1);let i=g.value;do i=i+n,i=(i-e.min+N.value)%N.value+e.min;while(!A(i)&&i!==g.value);i!==e.displayedValue&&Y(i),$(i)}function Q(t){return e.double&&t-e.min>=w.value}function R(t){return Q(t)?F.value:1}function K(t){const n=e.rotate*Math.PI/180;return{x:Math.sin((t-e.min)*f.value+n)*R(t),y:-Math.cos((t-e.min)*f.value+n)*R(t)}}function X(t,n){const i=(Math.round(t/o.value)+(n?w.value:0))%N.value+e.min;return t<360-o.value/2?i:n?e.max-w.value+1:e.min}function l(t){const{x:n,y:i}=K(t);return{left:`${Math.round(50+n*50)}%`,top:`${Math.round(50+i*50)}%`}}function c(t,n){const i=n.x-t.x,E=n.y-t.y;return Math.sqrt(i*i+E*E)}function b(t,n){const i=2*Math.atan2(n.y-t.y-c(t,n),n.x-t.x);return Math.abs(i*180/Math.PI)}function u(t){v.value===null&&(v.value=t),P.value=t,Y(t)}function V(t){if(t.preventDefault(),!s.value&&t.type!=="click"||!S.value)return;const{width:n,top:i,left:E}=S.value?.getBoundingClientRect(),{width:U}=H.value?.getBoundingClientRect()??{width:0},{clientX:G,clientY:ge}="touches"in t?t.touches[0]:t,ae={x:n/2,y:-n/2},ue={x:G-E,y:i-ge},oe=Math.round(b(ae,ue)-e.rotate+360)%360,ie=e.double&&c(ae,ue)<(U+U*F.value)/4,Ve=Math.ceil(15/o.value);let L;for(let J=0;JC("div",{class:y([{"v-time-picker-clock":!0,"v-time-picker-clock--indeterminate":e.modelValue==null,"v-time-picker-clock--readonly":e.readonly}]),onMousedown:D,onTouchstart:D,onWheel:W,ref:S},[C("div",{class:"v-time-picker-clock__inner",ref:H},[C("div",{class:y([{"v-time-picker-clock__hand":!0,"v-time-picker-clock__hand--inner":Q(e.modelValue)},_.value]),style:ce([{transform:`rotate(${e.rotate+o.value*(g.value-e.min)}deg) scaleY(${R(g.value)})`},M.value])},null),q.value.map(t=>{const n=t===g.value;return C("div",{class:y([{"v-time-picker-clock__item":!0,"v-time-picker-clock__item--active":n,"v-time-picker-clock__item--disabled":e.disabled||!A(t)},n&&d.value]),style:ce([l(t),n&&B.value])},[C("span",null,[e.format(t)])])})])]))}}),je=ee({ampm:Boolean,color:String,disabled:Boolean,hour:Number,minute:Number,second:Number,period:String,readonly:Boolean,useSeconds:Boolean,value:Number,viewMode:String},"VTimePickerControls"),_e=p()({name:"VTimePickerControls",props:je(),emits:{"update:period":e=>!0,"update:viewMode":e=>!0},setup(e,T){let{emit:r,slots:S}=T;const{t:H}=be();return le(()=>{let a=e.hour;return e.ampm&&(a=a?(a-1)%12+1:12),C("div",{class:"v-time-picker-controls"},[C("div",{class:y({"v-time-picker-controls__time":!0,"v-time-picker-controls__time--with-seconds":e.useSeconds})},[h(z,{active:e.viewMode==="hour",color:e.viewMode==="hour"?e.color:void 0,disabled:e.disabled,variant:"tonal",class:y({"v-time-picker-controls__time__btn":!0,"v-time-picker-controls__time--with-ampm__btn":e.ampm,"v-time-picker-controls__time--with-seconds__btn":e.useSeconds}),text:e.hour==null?"--":j(`${a}`),onClick:()=>r("update:viewMode","hour")},null),C("span",{class:y(["v-time-picker-controls__time__separator",{"v-time-picker-controls--with-seconds__time__separator":e.useSeconds}])},[de(":")]),h(z,{active:e.viewMode==="minute",color:e.viewMode==="minute"?e.color:void 0,class:y({"v-time-picker-controls__time__btn":!0,"v-time-picker-controls__time__btn__active":e.viewMode==="minute","v-time-picker-controls__time--with-ampm__btn":e.ampm,"v-time-picker-controls__time--with-seconds__btn":e.useSeconds}),disabled:e.disabled,variant:"tonal",text:e.minute==null?"--":j(e.minute),onClick:()=>r("update:viewMode","minute")},null),e.useSeconds&&C("span",{class:y(["v-time-picker-controls__time__separator",{"v-time-picker-controls--with-seconds__time__separator":e.useSeconds}]),key:"secondsDivider"},[de(":")]),e.useSeconds&&h(z,{key:"secondsVal",active:e.viewMode==="second",color:e.viewMode==="second"?e.color:void 0,variant:"tonal",onClick:()=>r("update:viewMode","second"),class:y({"v-time-picker-controls__time__btn":!0,"v-time-picker-controls__time__btn__active":e.viewMode==="second","v-time-picker-controls__time--with-seconds__btn":e.useSeconds}),disabled:e.disabled,text:e.second==null?"--":j(e.second)},null),e.ampm&&C("div",{class:"v-time-picker-controls__ampm"},[h(z,{active:e.period==="am",color:e.period==="am"?e.color:void 0,class:y({"v-time-picker-controls__ampm__am":!0,"v-time-picker-controls__ampm__btn":!0,"v-time-picker-controls__ampm__btn__active":e.period==="am"}),disabled:e.disabled,text:H("$vuetify.timePicker.am"),variant:e.disabled&&e.period==="am"?"elevated":"tonal",onClick:()=>e.period!=="am"?r("update:period","am"):null},null),h(z,{active:e.period==="pm",color:e.period==="pm"?e.color:void 0,class:y({"v-time-picker-controls__ampm__pm":!0,"v-time-picker-controls__ampm__btn":!0,"v-time-picker-controls__ampm__btn__active":e.period==="pm"}),disabled:e.disabled,text:H("$vuetify.timePicker.pm"),variant:e.disabled&&e.period==="pm"?"elevated":"tonal",onClick:()=>e.period!=="pm"?r("update:period","pm"):null},null)])])])}),{}}}),Ee=ne(24),he=ne(12),Le=he.map(e=>e+12);ne(60);const Fe=ee({allowedHours:[Function,Array],allowedMinutes:[Function,Array],allowedSeconds:[Function,Array],disabled:Boolean,format:{type:String,default:"ampm"},max:String,min:String,viewMode:{type:String,default:"hour"},modelValue:null,readonly:Boolean,scrollable:Boolean,useSeconds:Boolean,...we(Se({title:"$vuetify.timePicker.title"}),["landscape"])},"VTimePicker"),Re=p()({name:"VTimePicker",props:Fe(),emits:{"update:hour":e=>!0,"update:minute":e=>!0,"update:period":e=>!0,"update:second":e=>!0,"update:modelValue":e=>!0,"update:viewMode":e=>!0},setup(e,T){let{emit:r,slots:S}=T;const{t:H}=be(),a=k(null),s=k(null),v=k(null),P=k(null),$=k(null),_=k(null),M=k("am"),d=Ce(e,"viewMode","hour"),B=k(null),N=k(null),w=x(()=>{let l;if(e.allowedHours instanceof Array?l=u=>e.allowedHours.includes(u):l=e.allowedHours,!e.min&&!e.max)return l;const c=e.min?Number(e.min.split(":")[0]):0,b=e.max?Number(e.max.split(":")[0]):23;return u=>u>=Number(c)&&u<=Number(b)&&(!l||l(u))}),o=x(()=>{let l;const c=!w.value||a.value===null||w.value(a.value);if(e.allowedMinutes instanceof Array?l=n=>e.allowedMinutes.includes(n):l=e.allowedMinutes,!e.min&&!e.max)return c?l:()=>!1;const[b,u]=e.min?e.min.split(":").map(Number):[0,0],[V,D]=e.max?e.max.split(":").map(Number):[23,59],I=b*60+Number(u),t=V*60+Number(D);return n=>{const i=60*a.value+n;return i>=I&&i<=t&&c&&(!l||l(n))}}),f=x(()=>{let l;const b=(!w.value||a.value===null||w.value(a.value))&&(!o.value||s.value===null||o.value(s.value));if(e.allowedSeconds instanceof Array?l=U=>e.allowedSeconds.includes(U):l=e.allowedSeconds,!e.min&&!e.max)return b?l:()=>!1;const[u,V,D]=e.min?e.min.split(":").map(Number):[0,0,0],[I,t,n]=e.max?e.max.split(":").map(Number):[23,59,59],i=u*3600+V*60+Number(D||0),E=I*3600+t*60+Number(n||0);return U=>{const G=3600*a.value+60*s.value+U;return G>=i&&G<=E&&b&&(!l||l(U))}}),g=x(()=>e.format==="ampm");te(()=>e.modelValue,l=>W(l)),ke(()=>{W(e.modelValue)});function F(){return a.value!=null&&s.value!=null&&(!e.useSeconds||v.value!=null)?`${j(a.value)}:${j(s.value)}`+(e.useSeconds?`:${j(v.value)}`:""):null}function q(){const l=F();l!==null&&r("update:modelValue",l)}function Y(l){return l?(l-1)%12+1:12}function A(l,c){return l%12+(c==="pm"?12:0)}function W(l){if(l==null||l==="")a.value=null,s.value=null,v.value=null;else if(l instanceof Date)a.value=l.getHours(),s.value=l.getMinutes(),v.value=l.getSeconds();else{const[c,,b,,u,V]=l.trim().toLowerCase().match(/^(\d+):(\d+)(:(\d+))?([ap]m)?$/)||new Array(6);a.value=V?A(parseInt(c,10),V):parseInt(c,10),s.value=parseInt(b,10),v.value=parseInt(u||0,10)}M.value=a.value==null||a.value<12?"am":"pm"}function Q(l,c){const b=w.value;if(!b)return c;const u=g.value?c<12?he:Le:Ee;return((u.find(D=>b((D+c)%u.length+u[0]))||0)+c)%u.length+u[0]}function R(l){if(M.value=l,a.value!=null){const c=a.value+(M.value==="am"?-12:12);a.value=Q("hour",c)}return r("update:period",l),q(),!0}function K(l){d.value==="hour"?a.value=g.value?A(l,M.value):l:d.value==="minute"?s.value=l:v.value=l}function X(l){switch(d.value||"hour"){case"hour":r("update:hour",l);break;case"minute":r("update:minute",l);break;case"second":r("update:second",l);break}const c=a.value!==null&&s.value!==null&&(e.useSeconds?v.value!==null:!0);d.value==="hour"?d.value="minute":e.useSeconds&&d.value==="minute"&&(d.value="second"),!(a.value===P.value&&s.value===$.value&&(!e.useSeconds||v.value===_.value)||F()===null)&&(P.value=a.value,$.value=s.value,e.useSeconds&&(_.value=v.value),c&&q())}le(()=>{const l=re.filterProps(e),c=_e.filterProps(e),b=fe.filterProps(we(e,["format","modelValue","min","max"]));return h(re,Z(l,{color:void 0,class:["v-time-picker",e.class],style:e.style}),{title:()=>S.title?.()??C("div",{class:"v-time-picker__title"},[H(e.title)]),header:()=>h(_e,Z(c,{ampm:g.value,hour:a.value,minute:s.value,period:M.value,second:v.value,viewMode:d.value,"onUpdate:period":u=>R(u),"onUpdate:viewMode":u=>d.value=u,ref:B}),null),default:()=>h(fe,Z(b,{allowedValues:d.value==="hour"?w.value:d.value==="minute"?o.value:f.value,double:d.value==="hour"&&!g.value,format:d.value==="hour"?g.value?Y:u=>u:u=>j(u,2),max:d.value==="hour"?g.value&&M.value==="am"?11:23:59,min:d.value==="hour"&&g.value&&M.value==="pm"?12:0,size:20,step:d.value==="hour"?1:5,modelValue:d.value==="hour"?a.value:d.value==="minute"?s.value:v.value,onChange:X,onInput:K,ref:N}),null),actions:S.actions})})}}),We=Pe({__name:"MealTypeEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(e,{emit:T}){const r=e,S=T,{setupState:H,deleteObject:a,saveObject:s,isUpdate:v,editingObjName:P,loading:$,editingObj:_,editingObjChanged:M,modelClass:d}=De("MealType",S);te([()=>r.item,()=>r.itemId],()=>{N()});const B=k(!1);ke(()=>{N()});function N(){H(r.item,r.itemId,{itemDefaults:r.itemDefaults})}return(w,o)=>(me(),se(Ie,{loading:m($),dialog:e.dialog,onSave:m(s),onDelete:m(a),onClose:o[6]||(o[6]=f=>{S("close"),M.value=!1}),"is-update":m(v)(),"is-changed":m(M),"model-class":m(d),"object-name":m(P)(),"editing-object":m(_)},{default:O(()=>[h(Ne,null,{default:O(()=>[h(Te,{disabled:m($)},{default:O(()=>[h(ve,{modelValue:m(_).name,"onUpdate:modelValue":o[0]||(o[0]=f=>m(_).name=f),label:w.$t("Name")},null,8,["modelValue","label"]),h(ve,{"max-width":"200px",modelValue:m(_).time,"onUpdate:modelValue":o[3]||(o[3]=f=>m(_).time=f),active:B.value,focus:B.value,label:w.$t("Time"),"prepend-icon":"fa-solid fa-clock",readonly:""},{default:O(()=>[h(He,{modelValue:B.value,"onUpdate:modelValue":o[2]||(o[2]=f=>B.value=f),"close-on-content-click":!1,activator:"parent",transition:"scale-transition"},{default:O(()=>[B.value?(me(),se(Re,{key:0,format:"24hr",modelValue:m(_).time,"onUpdate:modelValue":o[1]||(o[1]=f=>m(_).time=f)},null,8,["modelValue"])):Be("",!0)]),_:1},8,["modelValue"])]),_:1},8,["modelValue","active","focus","label"]),h(Ae,{modelValue:m(_)._default,"onUpdate:modelValue":o[4]||(o[4]=f=>m(_)._default=f),label:w.$t("Default")},null,8,["modelValue","label"]),h($e,{modelValue:m(_).color,"onUpdate:modelValue":o[5]||(o[5]=f=>m(_).color=f),mode:"hex",modes:["hex"],"show-swatches":"",swatches:[["#ddbf86"],["#b98766"],["#b55e4f"],["#82aa8b"],["#385f84"]]},null,8,["modelValue"])]),_:1},8,["disabled"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{We as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/MealTypeEditor-CeNz0Pzn.js.gz b/config/tandoor/staticfiles/vue3/assets/MealTypeEditor-CeNz0Pzn.js.gz
deleted file mode 100644
index cd1d75bb..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/MealTypeEditor-CeNz0Pzn.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/ModelDeletePage-C4erPWw9.ef84df9852da.js b/config/tandoor/staticfiles/vue3/assets/ModelDeletePage-C4erPWw9.ef84df9852da.js
deleted file mode 100644
index 368b7b11..00000000
--- a/config/tandoor/staticfiles/vue3/assets/ModelDeletePage-C4erPWw9.ef84df9852da.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as ae,bB as te,u as oe,r as v,L as de,bD as ne,bC as d,o as ue,Q as k,R as D,h as r,w as a,K as ie,g as t,e as g,V as E,M as b,O as z,z as p,l as n,s as se,j as i,t as u,k as V,N as K,ai as A,G as B,aP as Z,f as m}from"./main-BhFWIRV_.js";import{_ as re}from"./ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.js";import{_ as H}from"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import{a as me,V as F,b as ge,c as I}from"./VTabs-BQFRhgOd.js";import{V as U}from"./VDataTableServer-PUUq4Eqa.js";const be=ae({__name:"ModelDeletePage",props:{model:{type:String,required:!0},id:{type:String,required:!0}},setup(q){const T=se(),x=te(),{t:c}=oe(),$=q,_=[{title:"ID",key:"id"},{title:c("Model"),key:"model"},{title:c("Name"),key:"name"},{title:c("Actions"),key:"actions",align:"end"}],o=v({}),f=v({}),M=v("protecting"),N=v(!1),R=v(de().deviceSettings.general_tableItemsPerPage),G=v([]),y=v(0),h=v(!1),W=v([]),C=v(0),O=v(!1),Q=v([]),P=v(0),j=v(!1);ne(()=>{try{o.value=d($.model,c)}catch{console.error("Invalid model passed to ModelListPage, loading Food instead"),o.value=d("Food",c)}}),ue(()=>{ee(),S()});function ee(){o.value.retrieve(Number($.id)).then(l=>{f.value=l,x.value=c("DeleteSomething",{item:`${c(o.value.model.localizationKey)} ${o.value.getLabel(f.value)}`})}).catch(l=>{k().addError(D.FETCH_ERROR,l)})}function le(){N.value=!0,o.value.destroy(Number($.id)).then(()=>{T.push({name:"ModelListPage",params:{model:$.model}})}).catch(l=>{k().addError(D.DELETE_ERROR,l)}).finally(()=>{N.value=!1})}function S(l=!0){J({page:1,itemsPerPage:R.value},l),X({page:1,itemsPerPage:R.value},l),Y({page:1,itemsPerPage:R.value},l)}function J(l,s=!0){h.value=!0,o.value.getDeleteProtecting({id:Number($.id),page:l.page,pageSize:l.itemsPerPage,cache:s}).then(e=>{G.value=e.results,y.value=e.count}).catch(e=>{k().addError(D.FETCH_ERROR,e)}).finally(()=>{h.value=!1})}function X(l,s=!0){O.value=!0,o.value.getDeleteCascading({id:Number($.id),page:l.page,pageSize:l.itemsPerPage,cache:s}).then(e=>{W.value=e.results,C.value=e.count}).catch(e=>{k().addError(D.FETCH_ERROR,e)}).finally(()=>{O.value=!1})}function Y(l,s=!0){j.value=!0,o.value.getDeleteNulling({id:Number($.id),page:l.page,pageSize:l.itemsPerPage,cache:s}).then(e=>{Q.value=e.results,P.value=e.count}).catch(e=>{k().addError(D.FETCH_ERROR,e)}).finally(()=>{j.value=!1})}function w(l,s){let e=d(l,c);e&&e.destroy(s).then(()=>{S(!1)}).catch(L=>{k().addError(D.DELETE_ERROR,L)})}return(l,s)=>(m(),r(ie,null,{default:a(()=>[t(V,null,{default:a(()=>[t(E,null,{default:a(()=>[t(b,null,{default:a(()=>[t(z,{class:"pt-2 pb-2"},{default:a(()=>[t(p,{variant:"flat",onClick:s[0]||(s[0]=e=>n(T).go(-1)),"prepend-icon":"fa-solid fa-arrow-left"},{default:a(()=>[i(u(l.$t("Back")),1)]),_:1}),t(p,{variant:"flat",onClick:s[1]||(s[1]=e=>S()),loading:h.value||O.value||j.value,class:"float-right","prepend-icon":"fa-solid fa-arrows-rotate"},{default:a(()=>[i(u(l.$t("Refresh")),1)]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1})]),_:1}),f.value?(m(),r(V,{key:0,dense:""},{default:a(()=>[t(E,null,{default:a(()=>[t(b,null,{default:a(()=>[t(K,{class:"text-h4"},{default:a(()=>[i(u(l.$t("Delete"))+" "+u(l.$t(o.value.model.localizationKey))+": "+u(o.value.getLabel(f.value)),1)]),_:1})]),_:1})]),_:1})]),_:1})):g("",!0),y.value>0||C.value>0||P.value>0?(m(),r(V,{key:1,dense:""},{default:a(()=>[t(E,null,{default:a(()=>[t(b,null,{default:a(()=>[t(me,{modelValue:M.value,"onUpdate:modelValue":s[2]||(s[2]=e=>M.value=e),grow:""},{default:a(()=>[y.value>0?(m(),r(F,{key:0,value:"protecting"},{append:a(()=>[t(A,{size:"small"},{default:a(()=>[i(u(y.value),1)]),_:1})]),default:a(()=>[i(u(l.$t("Blocking"))+" ",1)]),_:1})):g("",!0),C.value>0?(m(),r(F,{key:1,value:"cascading"},{append:a(()=>[t(A,{size:"small"},{default:a(()=>[i(u(C.value),1)]),_:1})]),default:a(()=>[i(u(l.$t("Cascading"))+" ",1)]),_:1})):g("",!0),P.value>0?(m(),r(F,{key:2,value:"nulling"},{append:a(()=>[t(A,{size:"small"},{default:a(()=>[i(u(P.value),1)]),_:1})]),default:a(()=>[i(u(l.$t("Changing"))+" ",1)]),_:1})):g("",!0)]),_:1},8,["modelValue"])]),_:1}),t(ge,{modelValue:M.value,"onUpdate:modelValue":s[3]||(s[3]=e=>M.value=e)},{default:a(()=>[t(I,{value:"protecting"},{default:a(()=>[t(b,{title:l.$t("Blocking")},{default:a(()=>[t(z,null,{default:a(()=>[i(u(l.$t("BlockingHelp",{type:l.$t(o.value.model.localizationKey)}))+" ",1),t(U,{density:"compact",headers:_,loading:h.value,"items-length":y.value,items:G.value,"onUpdate:options":J},{"item.model":a(({item:e})=>[i(u(l.$t(e.model)),1)]),"item.actions":a(({item:e})=>[n(d)(e.model,l.$t)&&n(d)(e.model,l.$t).model.isAdvancedDelete?(m(),r(p,{key:0,icon:"$delete",variant:"plain",size:"small",target:"_blank",to:{name:"ModelDeletePage",params:{model:e.model,id:e.id}}},null,8,["to"])):g("",!0),n(d)(e.model,l.$t)&&!n(d)(e.model,l.$t).model.isAdvancedDelete&&!n(d)(e.model,l.$t).model.disableDelete?(m(),r(p,{key:1,icon:"$delete",variant:"plain",size:"small"},{default:a(()=>[t(B,{icon:"$delete",variant:"plain",size:"small"}),t(H,{"object-name":o.value.getLabel(f.value),"model-name":l.$t(o.value.model.localizationKey),onDelete:L=>w(e.model,e.id)},null,8,["object-name","model-name","onDelete"])]),_:2},1024)):g("",!0),n(d)(e.model,l.$t)&&n(d)(e.model,l.$t).model.editorComponent?(m(),r(p,{key:2,icon:"$edit",variant:"plain",size:"small",target:"_blank",to:{name:"ModelEditPage",params:{model:e.model,id:e.id}}},null,8,["to"])):g("",!0)]),_:1},8,["loading","items-length","items"])]),_:1})]),_:1},8,["title"])]),_:1}),t(I,{value:"cascading"},{default:a(()=>[t(b,null,{default:a(()=>[t(z,null,{default:a(()=>[i(u(l.$t("CascadingHelp",{type:l.$t(o.value.model.localizationKey)}))+" ",1),t(U,{density:"compact",headers:_,loading:O.value,"items-length":C.value,items:W.value,"onUpdate:options":X},{"item.model":a(({item:e})=>[i(u(l.$t(e.model)),1)]),"item.actions":a(({item:e})=>[n(d)(e.model,l.$t)&&n(d)(e.model,l.$t).model.isAdvancedDelete?(m(),r(p,{key:0,icon:"$delete",variant:"plain",size:"small",target:"_blank",to:{name:"ModelDeletePage",params:{model:e.model,id:e.id}}},null,8,["to"])):g("",!0),n(d)(e.model,l.$t)&&!n(d)(e.model,l.$t).model.isAdvancedDelete&&!n(d)(e.model,l.$t).model.disableDelete?(m(),r(p,{key:1,icon:"$delete",variant:"plain",size:"small"},{default:a(()=>[t(B,{icon:"$delete",variant:"plain",size:"small"}),t(H,{"object-name":o.value.getLabel(f.value),"model-name":l.$t(o.value.model.localizationKey),onDelete:L=>w(e.model,e.id)},null,8,["object-name","model-name","onDelete"])]),_:2},1024)):g("",!0),n(d)(e.model,l.$t)&&n(d)(e.model,l.$t).model.editorComponent?(m(),r(p,{key:2,icon:"$edit",variant:"plain",size:"small",target:"_blank",to:{name:"ModelEditPage",params:{model:e.model,id:e.id}}},null,8,["to"])):g("",!0)]),_:1},8,["loading","items-length","items"])]),_:1})]),_:1})]),_:1}),t(I,{value:"nulling"},{default:a(()=>[t(b,null,{default:a(()=>[t(z,null,{default:a(()=>[i(u(l.$t("NullingHelp",{type:l.$t(o.value.model.localizationKey)}))+" ",1),t(U,{density:"compact",headers:_,loading:j.value,"items-length":P.value,items:Q.value,"items-per-page":R.value,"onUpdate:options":Y},{"item.model":a(({item:e})=>[i(u(l.$t(e.model)),1)]),"item.actions":a(({item:e})=>[n(d)(e.model,l.$t)&&n(d)(e.model,l.$t).model.isAdvancedDelete?(m(),r(p,{key:0,icon:"$delete",variant:"plain",size:"small",target:"_blank",to:{name:"ModelDeletePage",params:{model:e.model,id:e.id}}},null,8,["to"])):g("",!0),n(d)(e.model,l.$t)&&!n(d)(e.model,l.$t).model.isAdvancedDelete&&!n(d)(e.model,l.$t).model.disableDelete?(m(),r(p,{key:1,icon:"$delete",variant:"plain",size:"small"},{default:a(()=>[t(B,{icon:"$delete",variant:"plain",size:"small"}),t(H,{"object-name":o.value.getLabel(f.value),"model-name":l.$t(o.value.model.localizationKey),onDelete:L=>w(e.model,e.id)},null,8,["object-name","model-name","onDelete"])]),_:2},1024)):g("",!0),n(d)(e.model,l.$t)&&n(d)(e.model,l.$t).model.editorComponent?(m(),r(p,{key:2,icon:"$edit",variant:"plain",size:"small",target:"_blank",to:{name:"ModelEditPage",params:{model:e.model,id:e.id}}},null,8,["to"])):g("",!0)]),_:1},8,["loading","items-length","items","items-per-page"])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1})):g("",!0),o.value.model.isMerge?(m(),r(V,{key:2,dense:""},{default:a(()=>[t(E,null,{default:a(()=>[t(b,{class:"border-warning border-sm border-opacity-100"},{default:a(()=>[t(K,null,{default:a(()=>[i(u(l.$t("Merge")),1)]),_:1}),t(z,null,{default:a(()=>[i(u(l.$t("MergeInsteadOfDelete",{type:l.$t(o.value.model.localizationKey)})),1)]),_:1}),t(Z,null,{default:a(()=>[t(p,{color:"warning","prepend-icon":"fa-solid fa-arrows-to-dot"},{default:a(()=>[i(u(l.$t("Merge"))+" ",1),t(re,{model:q.model,source:[f.value],onChange:s[4]||(s[4]=e=>n(T).push({name:"ModelListPage",params:{model:$.model}}))},null,8,["model","source"])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})):g("",!0),t(V,{dense:""},{default:a(()=>[t(E,null,{default:a(()=>[t(b,{class:"border-error border-sm border-opacity-100"},{default:a(()=>[t(K,null,{default:a(()=>[i(u(l.$t("Delete")),1)]),_:1}),t(z,null,{default:a(()=>[i(u(l.$t("delete_confirmation",{source:`${l.$t(o.value.model.localizationKey)} ${o.value.getLabel(f.value)}`})),1)]),_:1}),t(Z,null,{default:a(()=>[t(p,{color:"delete","prepend-icon":"$delete",disabled:y.value>0,onClick:s[5]||(s[5]=e=>le()),loading:N.value},{default:a(()=>[i(u(l.$t("Delete")),1)]),_:1},8,["disabled","loading"])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}))}});export{be as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/ModelDeletePage-C4erPWw9.ef84df9852da.js.gz b/config/tandoor/staticfiles/vue3/assets/ModelDeletePage-C4erPWw9.ef84df9852da.js.gz
deleted file mode 100644
index 9fbea0e7..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/ModelDeletePage-C4erPWw9.ef84df9852da.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/ModelDeletePage-C4erPWw9.js b/config/tandoor/staticfiles/vue3/assets/ModelDeletePage-C4erPWw9.js
deleted file mode 100644
index 368b7b11..00000000
--- a/config/tandoor/staticfiles/vue3/assets/ModelDeletePage-C4erPWw9.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as ae,bB as te,u as oe,r as v,L as de,bD as ne,bC as d,o as ue,Q as k,R as D,h as r,w as a,K as ie,g as t,e as g,V as E,M as b,O as z,z as p,l as n,s as se,j as i,t as u,k as V,N as K,ai as A,G as B,aP as Z,f as m}from"./main-BhFWIRV_.js";import{_ as re}from"./ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.js";import{_ as H}from"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import{a as me,V as F,b as ge,c as I}from"./VTabs-BQFRhgOd.js";import{V as U}from"./VDataTableServer-PUUq4Eqa.js";const be=ae({__name:"ModelDeletePage",props:{model:{type:String,required:!0},id:{type:String,required:!0}},setup(q){const T=se(),x=te(),{t:c}=oe(),$=q,_=[{title:"ID",key:"id"},{title:c("Model"),key:"model"},{title:c("Name"),key:"name"},{title:c("Actions"),key:"actions",align:"end"}],o=v({}),f=v({}),M=v("protecting"),N=v(!1),R=v(de().deviceSettings.general_tableItemsPerPage),G=v([]),y=v(0),h=v(!1),W=v([]),C=v(0),O=v(!1),Q=v([]),P=v(0),j=v(!1);ne(()=>{try{o.value=d($.model,c)}catch{console.error("Invalid model passed to ModelListPage, loading Food instead"),o.value=d("Food",c)}}),ue(()=>{ee(),S()});function ee(){o.value.retrieve(Number($.id)).then(l=>{f.value=l,x.value=c("DeleteSomething",{item:`${c(o.value.model.localizationKey)} ${o.value.getLabel(f.value)}`})}).catch(l=>{k().addError(D.FETCH_ERROR,l)})}function le(){N.value=!0,o.value.destroy(Number($.id)).then(()=>{T.push({name:"ModelListPage",params:{model:$.model}})}).catch(l=>{k().addError(D.DELETE_ERROR,l)}).finally(()=>{N.value=!1})}function S(l=!0){J({page:1,itemsPerPage:R.value},l),X({page:1,itemsPerPage:R.value},l),Y({page:1,itemsPerPage:R.value},l)}function J(l,s=!0){h.value=!0,o.value.getDeleteProtecting({id:Number($.id),page:l.page,pageSize:l.itemsPerPage,cache:s}).then(e=>{G.value=e.results,y.value=e.count}).catch(e=>{k().addError(D.FETCH_ERROR,e)}).finally(()=>{h.value=!1})}function X(l,s=!0){O.value=!0,o.value.getDeleteCascading({id:Number($.id),page:l.page,pageSize:l.itemsPerPage,cache:s}).then(e=>{W.value=e.results,C.value=e.count}).catch(e=>{k().addError(D.FETCH_ERROR,e)}).finally(()=>{O.value=!1})}function Y(l,s=!0){j.value=!0,o.value.getDeleteNulling({id:Number($.id),page:l.page,pageSize:l.itemsPerPage,cache:s}).then(e=>{Q.value=e.results,P.value=e.count}).catch(e=>{k().addError(D.FETCH_ERROR,e)}).finally(()=>{j.value=!1})}function w(l,s){let e=d(l,c);e&&e.destroy(s).then(()=>{S(!1)}).catch(L=>{k().addError(D.DELETE_ERROR,L)})}return(l,s)=>(m(),r(ie,null,{default:a(()=>[t(V,null,{default:a(()=>[t(E,null,{default:a(()=>[t(b,null,{default:a(()=>[t(z,{class:"pt-2 pb-2"},{default:a(()=>[t(p,{variant:"flat",onClick:s[0]||(s[0]=e=>n(T).go(-1)),"prepend-icon":"fa-solid fa-arrow-left"},{default:a(()=>[i(u(l.$t("Back")),1)]),_:1}),t(p,{variant:"flat",onClick:s[1]||(s[1]=e=>S()),loading:h.value||O.value||j.value,class:"float-right","prepend-icon":"fa-solid fa-arrows-rotate"},{default:a(()=>[i(u(l.$t("Refresh")),1)]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1})]),_:1}),f.value?(m(),r(V,{key:0,dense:""},{default:a(()=>[t(E,null,{default:a(()=>[t(b,null,{default:a(()=>[t(K,{class:"text-h4"},{default:a(()=>[i(u(l.$t("Delete"))+" "+u(l.$t(o.value.model.localizationKey))+": "+u(o.value.getLabel(f.value)),1)]),_:1})]),_:1})]),_:1})]),_:1})):g("",!0),y.value>0||C.value>0||P.value>0?(m(),r(V,{key:1,dense:""},{default:a(()=>[t(E,null,{default:a(()=>[t(b,null,{default:a(()=>[t(me,{modelValue:M.value,"onUpdate:modelValue":s[2]||(s[2]=e=>M.value=e),grow:""},{default:a(()=>[y.value>0?(m(),r(F,{key:0,value:"protecting"},{append:a(()=>[t(A,{size:"small"},{default:a(()=>[i(u(y.value),1)]),_:1})]),default:a(()=>[i(u(l.$t("Blocking"))+" ",1)]),_:1})):g("",!0),C.value>0?(m(),r(F,{key:1,value:"cascading"},{append:a(()=>[t(A,{size:"small"},{default:a(()=>[i(u(C.value),1)]),_:1})]),default:a(()=>[i(u(l.$t("Cascading"))+" ",1)]),_:1})):g("",!0),P.value>0?(m(),r(F,{key:2,value:"nulling"},{append:a(()=>[t(A,{size:"small"},{default:a(()=>[i(u(P.value),1)]),_:1})]),default:a(()=>[i(u(l.$t("Changing"))+" ",1)]),_:1})):g("",!0)]),_:1},8,["modelValue"])]),_:1}),t(ge,{modelValue:M.value,"onUpdate:modelValue":s[3]||(s[3]=e=>M.value=e)},{default:a(()=>[t(I,{value:"protecting"},{default:a(()=>[t(b,{title:l.$t("Blocking")},{default:a(()=>[t(z,null,{default:a(()=>[i(u(l.$t("BlockingHelp",{type:l.$t(o.value.model.localizationKey)}))+" ",1),t(U,{density:"compact",headers:_,loading:h.value,"items-length":y.value,items:G.value,"onUpdate:options":J},{"item.model":a(({item:e})=>[i(u(l.$t(e.model)),1)]),"item.actions":a(({item:e})=>[n(d)(e.model,l.$t)&&n(d)(e.model,l.$t).model.isAdvancedDelete?(m(),r(p,{key:0,icon:"$delete",variant:"plain",size:"small",target:"_blank",to:{name:"ModelDeletePage",params:{model:e.model,id:e.id}}},null,8,["to"])):g("",!0),n(d)(e.model,l.$t)&&!n(d)(e.model,l.$t).model.isAdvancedDelete&&!n(d)(e.model,l.$t).model.disableDelete?(m(),r(p,{key:1,icon:"$delete",variant:"plain",size:"small"},{default:a(()=>[t(B,{icon:"$delete",variant:"plain",size:"small"}),t(H,{"object-name":o.value.getLabel(f.value),"model-name":l.$t(o.value.model.localizationKey),onDelete:L=>w(e.model,e.id)},null,8,["object-name","model-name","onDelete"])]),_:2},1024)):g("",!0),n(d)(e.model,l.$t)&&n(d)(e.model,l.$t).model.editorComponent?(m(),r(p,{key:2,icon:"$edit",variant:"plain",size:"small",target:"_blank",to:{name:"ModelEditPage",params:{model:e.model,id:e.id}}},null,8,["to"])):g("",!0)]),_:1},8,["loading","items-length","items"])]),_:1})]),_:1},8,["title"])]),_:1}),t(I,{value:"cascading"},{default:a(()=>[t(b,null,{default:a(()=>[t(z,null,{default:a(()=>[i(u(l.$t("CascadingHelp",{type:l.$t(o.value.model.localizationKey)}))+" ",1),t(U,{density:"compact",headers:_,loading:O.value,"items-length":C.value,items:W.value,"onUpdate:options":X},{"item.model":a(({item:e})=>[i(u(l.$t(e.model)),1)]),"item.actions":a(({item:e})=>[n(d)(e.model,l.$t)&&n(d)(e.model,l.$t).model.isAdvancedDelete?(m(),r(p,{key:0,icon:"$delete",variant:"plain",size:"small",target:"_blank",to:{name:"ModelDeletePage",params:{model:e.model,id:e.id}}},null,8,["to"])):g("",!0),n(d)(e.model,l.$t)&&!n(d)(e.model,l.$t).model.isAdvancedDelete&&!n(d)(e.model,l.$t).model.disableDelete?(m(),r(p,{key:1,icon:"$delete",variant:"plain",size:"small"},{default:a(()=>[t(B,{icon:"$delete",variant:"plain",size:"small"}),t(H,{"object-name":o.value.getLabel(f.value),"model-name":l.$t(o.value.model.localizationKey),onDelete:L=>w(e.model,e.id)},null,8,["object-name","model-name","onDelete"])]),_:2},1024)):g("",!0),n(d)(e.model,l.$t)&&n(d)(e.model,l.$t).model.editorComponent?(m(),r(p,{key:2,icon:"$edit",variant:"plain",size:"small",target:"_blank",to:{name:"ModelEditPage",params:{model:e.model,id:e.id}}},null,8,["to"])):g("",!0)]),_:1},8,["loading","items-length","items"])]),_:1})]),_:1})]),_:1}),t(I,{value:"nulling"},{default:a(()=>[t(b,null,{default:a(()=>[t(z,null,{default:a(()=>[i(u(l.$t("NullingHelp",{type:l.$t(o.value.model.localizationKey)}))+" ",1),t(U,{density:"compact",headers:_,loading:j.value,"items-length":P.value,items:Q.value,"items-per-page":R.value,"onUpdate:options":Y},{"item.model":a(({item:e})=>[i(u(l.$t(e.model)),1)]),"item.actions":a(({item:e})=>[n(d)(e.model,l.$t)&&n(d)(e.model,l.$t).model.isAdvancedDelete?(m(),r(p,{key:0,icon:"$delete",variant:"plain",size:"small",target:"_blank",to:{name:"ModelDeletePage",params:{model:e.model,id:e.id}}},null,8,["to"])):g("",!0),n(d)(e.model,l.$t)&&!n(d)(e.model,l.$t).model.isAdvancedDelete&&!n(d)(e.model,l.$t).model.disableDelete?(m(),r(p,{key:1,icon:"$delete",variant:"plain",size:"small"},{default:a(()=>[t(B,{icon:"$delete",variant:"plain",size:"small"}),t(H,{"object-name":o.value.getLabel(f.value),"model-name":l.$t(o.value.model.localizationKey),onDelete:L=>w(e.model,e.id)},null,8,["object-name","model-name","onDelete"])]),_:2},1024)):g("",!0),n(d)(e.model,l.$t)&&n(d)(e.model,l.$t).model.editorComponent?(m(),r(p,{key:2,icon:"$edit",variant:"plain",size:"small",target:"_blank",to:{name:"ModelEditPage",params:{model:e.model,id:e.id}}},null,8,["to"])):g("",!0)]),_:1},8,["loading","items-length","items","items-per-page"])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1})):g("",!0),o.value.model.isMerge?(m(),r(V,{key:2,dense:""},{default:a(()=>[t(E,null,{default:a(()=>[t(b,{class:"border-warning border-sm border-opacity-100"},{default:a(()=>[t(K,null,{default:a(()=>[i(u(l.$t("Merge")),1)]),_:1}),t(z,null,{default:a(()=>[i(u(l.$t("MergeInsteadOfDelete",{type:l.$t(o.value.model.localizationKey)})),1)]),_:1}),t(Z,null,{default:a(()=>[t(p,{color:"warning","prepend-icon":"fa-solid fa-arrows-to-dot"},{default:a(()=>[i(u(l.$t("Merge"))+" ",1),t(re,{model:q.model,source:[f.value],onChange:s[4]||(s[4]=e=>n(T).push({name:"ModelListPage",params:{model:$.model}}))},null,8,["model","source"])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})):g("",!0),t(V,{dense:""},{default:a(()=>[t(E,null,{default:a(()=>[t(b,{class:"border-error border-sm border-opacity-100"},{default:a(()=>[t(K,null,{default:a(()=>[i(u(l.$t("Delete")),1)]),_:1}),t(z,null,{default:a(()=>[i(u(l.$t("delete_confirmation",{source:`${l.$t(o.value.model.localizationKey)} ${o.value.getLabel(f.value)}`})),1)]),_:1}),t(Z,null,{default:a(()=>[t(p,{color:"delete","prepend-icon":"$delete",disabled:y.value>0,onClick:s[5]||(s[5]=e=>le()),loading:N.value},{default:a(()=>[i(u(l.$t("Delete")),1)]),_:1},8,["disabled","loading"])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}))}});export{be as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/ModelDeletePage-C4erPWw9.js.gz b/config/tandoor/staticfiles/vue3/assets/ModelDeletePage-C4erPWw9.js.gz
deleted file mode 100644
index 9fbea0e7..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/ModelDeletePage-C4erPWw9.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/ModelEditPage-BDgAqMDH.2cf0d2936afe.js b/config/tandoor/staticfiles/vue3/assets/ModelEditPage-BDgAqMDH.2cf0d2936afe.js
deleted file mode 100644
index d52335d8..00000000
--- a/config/tandoor/staticfiles/vue3/assets/ModelEditPage-BDgAqMDH.2cf0d2936afe.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as v,u as y,bJ as M,bC as S,aM as b,h as s,w as e,K as B,g as o,V as u,M as D,O as P,e as R,z as f,l as m,s as $,j as p,t as c,k as C,aX as h,f as r}from"./main-BhFWIRV_.js";const N=v({__name:"ModelEditPage",props:{model:{type:String,required:!0},id:{type:String,required:!1,default:void 0}},setup(d){const{t:g}=y(),l=d,V=M(S(l.model,g).model.editorComponent),n=$();b(()=>l.id,(a,t)=>{a!=t&&location.reload()});function w(a){a.id&&n.push({name:"ModelEditPage",params:{model:l.model,id:a.id}})}function k(){l.model.toLowerCase()=="recipe"?n.push({name:"StartPage"}):n.go(-1)}return(a,t)=>(r(),s(B,null,{default:e(()=>[o(C,null,{default:e(()=>[o(u,null,{default:e(()=>[o(D,null,{default:e(()=>[o(P,{class:"pt-2 pb-2"},{default:e(()=>[o(f,{variant:"flat",onClick:t[0]||(t[0]=i=>m(n).go(-1)),"prepend-icon":"fa-solid fa-arrow-left"},{default:e(()=>[p(c(a.$t("Back")),1)]),_:1}),l.id&&d.model.toLowerCase()=="recipe"?(r(),s(f,{key:0,variant:"flat",onClick:t[1]||(t[1]=i=>m(n).push({name:"RecipeViewPage",params:{id:l.id}})),class:"float-right","prepend-icon":"fa-solid fa-eye"},{default:e(()=>[p(c(a.$t("View")),1)]),_:1})):R("",!0)]),_:1})]),_:1})]),_:1})]),_:1}),o(C,{dense:""},{default:e(()=>[o(u,null,{default:e(()=>[(r(),s(h(V.value),{"item-id":d.id,onDelete:k,onCreate:t[2]||(t[2]=i=>w(i))},null,40,["item-id"]))]),_:1})]),_:1})]),_:1}))}});export{N as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/ModelEditPage-BDgAqMDH.2cf0d2936afe.js.gz b/config/tandoor/staticfiles/vue3/assets/ModelEditPage-BDgAqMDH.2cf0d2936afe.js.gz
deleted file mode 100644
index 7267f1f2..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/ModelEditPage-BDgAqMDH.2cf0d2936afe.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/ModelEditPage-BDgAqMDH.js b/config/tandoor/staticfiles/vue3/assets/ModelEditPage-BDgAqMDH.js
deleted file mode 100644
index d52335d8..00000000
--- a/config/tandoor/staticfiles/vue3/assets/ModelEditPage-BDgAqMDH.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as v,u as y,bJ as M,bC as S,aM as b,h as s,w as e,K as B,g as o,V as u,M as D,O as P,e as R,z as f,l as m,s as $,j as p,t as c,k as C,aX as h,f as r}from"./main-BhFWIRV_.js";const N=v({__name:"ModelEditPage",props:{model:{type:String,required:!0},id:{type:String,required:!1,default:void 0}},setup(d){const{t:g}=y(),l=d,V=M(S(l.model,g).model.editorComponent),n=$();b(()=>l.id,(a,t)=>{a!=t&&location.reload()});function w(a){a.id&&n.push({name:"ModelEditPage",params:{model:l.model,id:a.id}})}function k(){l.model.toLowerCase()=="recipe"?n.push({name:"StartPage"}):n.go(-1)}return(a,t)=>(r(),s(B,null,{default:e(()=>[o(C,null,{default:e(()=>[o(u,null,{default:e(()=>[o(D,null,{default:e(()=>[o(P,{class:"pt-2 pb-2"},{default:e(()=>[o(f,{variant:"flat",onClick:t[0]||(t[0]=i=>m(n).go(-1)),"prepend-icon":"fa-solid fa-arrow-left"},{default:e(()=>[p(c(a.$t("Back")),1)]),_:1}),l.id&&d.model.toLowerCase()=="recipe"?(r(),s(f,{key:0,variant:"flat",onClick:t[1]||(t[1]=i=>m(n).push({name:"RecipeViewPage",params:{id:l.id}})),class:"float-right","prepend-icon":"fa-solid fa-eye"},{default:e(()=>[p(c(a.$t("View")),1)]),_:1})):R("",!0)]),_:1})]),_:1})]),_:1})]),_:1}),o(C,{dense:""},{default:e(()=>[o(u,null,{default:e(()=>[(r(),s(h(V.value),{"item-id":d.id,onDelete:k,onCreate:t[2]||(t[2]=i=>w(i))},null,40,["item-id"]))]),_:1})]),_:1})]),_:1}))}});export{N as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/ModelEditPage-BDgAqMDH.js.gz b/config/tandoor/staticfiles/vue3/assets/ModelEditPage-BDgAqMDH.js.gz
deleted file mode 100644
index 7267f1f2..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/ModelEditPage-BDgAqMDH.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/ModelListPage-kwiBvRmX.d09ad4e2e5c1.js b/config/tandoor/staticfiles/vue3/assets/ModelListPage-kwiBvRmX.d09ad4e2e5c1.js
deleted file mode 100644
index 527f5803..00000000
--- a/config/tandoor/staticfiles/vue3/assets/ModelListPage-kwiBvRmX.d09ad4e2e5c1.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as Y,r as y,h as f,aN as ie,w as l,g as e,M as T,aO as ne,O as L,b as x,e as V,by as fe,ai as M,j as c,t as m,l as s,D as _,F as ve,aP as H,z as I,A as q,Q as P,R as D,f as p,aL as ee,u as ue,aH as ce,aM as se,$ as ge,B as Ve,ac as be,k as z,V as N,ag as k,T as O,W as K,ae as G,G as $,U as J,bB as ye,L as F,bC as Q,bD as Ue,K as $e,s as he,aI as le,i as ae,b7 as Se,bE as ke,_ as Be,S as Ce,aS as Fe,H as te,x as oe,y as R,bF as Re}from"./main-BhFWIRV_.js";import{_ as de}from"./ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.js";import{V as Ie}from"./VTextarea-Dyu7dPGe.js";import{u as W,_ as Ee}from"./BatchDeleteDialog.vue_vue_type_script_setup_true_lang-D0heUVsC.js";import{V as we}from"./VDataTableServer-PUUq4Eqa.js";const Ae={key:0,class:"text-center"},Me=Y({__name:"SyncDialog",props:{sync:{type:{},required:!0}},setup(h){const E=h,w=y(!1),B=y(!1),b=y(void 0);function C(){new q().apiSyncQuerySyncedFolderCreate({id:E.sync.id,sync:E.sync}).then(v=>{b.value=v}).catch(v=>{P().addError(D.UPDATE_ERROR,v)})}return(g,v)=>(p(),f(ie,{"max-width":"600px",activator:"parent",modelValue:w.value,"onUpdate:modelValue":v[3]||(v[3]=a=>w.value=a)},{default:l(()=>[e(T,null,{default:l(()=>[e(ne,{modelValue:w.value,"onUpdate:modelValue":v[0]||(v[0]=a=>w.value=a),title:g.$t("Import")},null,8,["modelValue","title"]),e(L,null,{default:l(()=>[B.value?(p(),x("div",Ae,[e(fe,{indeterminate:!0,color:"success",size:"x-large"})])):V("",!0),b.value?(p(),x(ve,{key:1},[b.value.status=="SUCCESS"?(p(),f(M,{key:0,label:"",color:"success"},{default:l(()=>[c(m(g.$t("Success")),1)]),_:1})):V("",!0),b.value.status!="SUCCESS"?(p(),f(M,{key:1,label:"",color:"danger"},{default:l(()=>[c(m(g.$t("Error")),1)]),_:1})):V("",!0),e(Ie,{"auto-grow":"","max-rows":"10",modelValue:b.value.msg,"onUpdate:modelValue":v[1]||(v[1]=a=>b.value.msg=a),hint:s(_).fromJSDate(b.value.createdAt).toLocaleString(s(_).DATETIME_SHORT),"persistent-hint":"",readonly:""},null,8,["modelValue","hint"])],64)):V("",!0)]),_:1}),e(H,null,{default:l(()=>[b.value?V("",!0):(p(),f(I,{key:0,onClick:v[2]||(v[2]=a=>C()),color:"create",loading:B.value},{default:l(()=>[c(m(g.$t("Import")),1)]),_:1},8,["loading"])),b.value?(p(),f(I,{key:1,to:{name:"ModelListPage",params:{model:"RecipeImport"}},color:"primary",loading:B.value},{default:l(()=>[c(m(g.$t("View")),1)]),_:1},8,["loading"])):V("",!0)]),_:1})]),_:1})]),_:1},8,["modelValue"]))}}),Pe=Y({__name:"BatchEditFoodDialog",props:ee({items:{type:Array,required:!0},activator:{type:String,default:"parent"}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:ee(["change"],["update:modelValue"]),setup(h,{emit:E}){const w=E,B=h,{t:b}=ue(),C=ce(h,"modelValue"),g=y(!1),v=y([]),a=y({foodBatchUpdate:{}}),U=y([{value:!0,title:b("Yes")},{value:!1,title:b("No")}]);se(C,(r,t)=>{!t&&r&&B.items!=null&&(a.value.foodBatchUpdate.foods=B.items.flatMap(o=>o.id),v.value=JSON.parse(JSON.stringify(B.items)))});function j(){let r=new q;g.value=!0,r.apiFoodBatchUpdateUpdate(a.value).then(t=>{}).catch(t=>{P().addError(D.UPDATE_ERROR,t)}).finally(()=>{w("change"),g.value=!1})}return(r,t)=>(p(),f(ie,{"max-width":"1200px",activator:B.activator,modelValue:C.value,"onUpdate:modelValue":t[22]||(t[22]=o=>C.value=o)},{default:l(()=>[e(T,{loading:g.value},{default:l(()=>[e(ne,{title:r.$t("BatchEdit"),"sub-title":r.$t("BatchEditUpdatingItemsCount",{type:r.$t("Foods"),count:v.value.length}),icon:s(ge).icon,modelValue:C.value,"onUpdate:modelValue":t[0]||(t[0]=o=>C.value=o)},null,8,["title","sub-title","icon","modelValue"]),e(Ve),e(L,null,{default:l(()=>[e(be,null,{default:l(()=>[e(z,null,{default:l(()=>[e(N,{cols:"12",md:"6"},{default:l(()=>[e(T,{title:r.$t("Miscellaneous"),"prepend-icon":"fa-solid fa-list",variant:"flat"},{default:l(()=>[e(L,null,{default:l(()=>[e(k,{model:"SupermarketCategory",modelValue:a.value.foodBatchUpdate.category,"onUpdate:modelValue":t[1]||(t[1]=o=>a.value.foodBatchUpdate.category=o),object:!1,"allow-create":"",mode:"single"},null,8,["modelValue"]),e(O,{items:U.value,label:r.$t("Ignore_Shopping"),clearable:"",modelValue:a.value.foodBatchUpdate.ignoreShopping,"onUpdate:modelValue":t[2]||(t[2]=o=>a.value.foodBatchUpdate.ignoreShopping=o)},null,8,["items","label","modelValue"]),e(O,{items:U.value,label:r.$t("OnHand"),clearable:"",modelValue:a.value.foodBatchUpdate.onHand,"onUpdate:modelValue":t[3]||(t[3]=o=>a.value.foodBatchUpdate.onHand=o)},null,8,["items","label","modelValue"]),e(K),e(G,{text:r.$t("Substitutes")},null,8,["text"]),e(k,{model:"Food",modelValue:a.value.foodBatchUpdate.substituteAdd,"onUpdate:modelValue":t[4]||(t[4]=o=>a.value.foodBatchUpdate.substituteAdd=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-add"})]),_:1},8,["modelValue"]),e(k,{model:"Food",modelValue:a.value.foodBatchUpdate.substituteRemove,"onUpdate:modelValue":t[5]||(t[5]=o=>a.value.foodBatchUpdate.substituteRemove=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-minus"})]),_:1},8,["modelValue"]),e(k,{model:"Food",modelValue:a.value.foodBatchUpdate.substituteSet,"onUpdate:modelValue":t[6]||(t[6]=o=>a.value.foodBatchUpdate.substituteSet=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-equals"})]),_:1},8,["modelValue"]),e(J,{label:r.$t("RemoveAllType",{type:r.$t("Substitutes")}),"hide-details":"",modelValue:a.value.foodBatchUpdate.substituteRemoveAll,"onUpdate:modelValue":t[7]||(t[7]=o=>a.value.foodBatchUpdate.substituteRemoveAll=o)},null,8,["label","modelValue"]),e(O,{items:U.value,label:r.$t("substitute_siblings"),clearable:"",modelValue:a.value.foodBatchUpdate.substituteChildren,"onUpdate:modelValue":t[8]||(t[8]=o=>a.value.foodBatchUpdate.substituteChildren=o)},null,8,["items","label","modelValue"]),e(O,{items:U.value,label:r.$t("substitute_children"),clearable:"",modelValue:a.value.foodBatchUpdate.substituteSiblings,"onUpdate:modelValue":t[9]||(t[9]=o=>a.value.foodBatchUpdate.substituteSiblings=o)},null,8,["items","label","modelValue"])]),_:1})]),_:1},8,["title"])]),_:1}),e(N,{cols:"12",md:"6"},{default:l(()=>[e(T,{title:r.$t("Hierarchy"),"prepend-icon":"fa-solid fa-folder-tree",variant:"flat"},{default:l(()=>[e(L,null,{default:l(()=>[e(k,{model:"Food",label:r.$t("Parent"),object:!1,"allow-create":"",clearable:"",modelValue:a.value.foodBatchUpdate.parentSet,"onUpdate:modelValue":t[10]||(t[10]=o=>a.value.foodBatchUpdate.parentSet=o)},{prepend:l(()=>[e($,{icon:"fa-solid fa-equals"})]),_:1},8,["label","modelValue"]),e(O,{items:U.value,label:r.$t("RemoveParent"),clearable:"",modelValue:a.value.foodBatchUpdate.parentRemove,"onUpdate:modelValue":t[11]||(t[11]=o=>a.value.foodBatchUpdate.parentRemove=o)},null,8,["items","label","modelValue"]),e(K),e(G,{text:r.$t("InheritFields")},null,8,["text"]),e(k,{model:"FoodInheritField",modelValue:a.value.foodBatchUpdate.inheritFieldsAdd,"onUpdate:modelValue":t[12]||(t[12]=o=>a.value.foodBatchUpdate.inheritFieldsAdd=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-add"})]),_:1},8,["modelValue"]),e(k,{model:"FoodInheritField",modelValue:a.value.foodBatchUpdate.inheritFieldsRemove,"onUpdate:modelValue":t[13]||(t[13]=o=>a.value.foodBatchUpdate.inheritFieldsRemove=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-minus"})]),_:1},8,["modelValue"]),e(k,{model:"FoodInheritField",modelValue:a.value.foodBatchUpdate.inheritFieldsSet,"onUpdate:modelValue":t[14]||(t[14]=o=>a.value.foodBatchUpdate.inheritFieldsSet=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-equals"})]),_:1},8,["modelValue"]),e(J,{label:r.$t("RemoveAllType",{type:r.$t("InheritFields")}),"hide-details":"",modelValue:a.value.foodBatchUpdate.inheritFieldsRemoveAll,"onUpdate:modelValue":t[15]||(t[15]=o=>a.value.foodBatchUpdate.inheritFieldsRemoveAll=o)},null,8,["label","modelValue"]),e(K),e(G,{text:r.$t("ChildInheritFields")},null,8,["text"]),e(k,{model:"FoodInheritField",modelValue:a.value.foodBatchUpdate.childInheritFieldsAdd,"onUpdate:modelValue":t[16]||(t[16]=o=>a.value.foodBatchUpdate.childInheritFieldsAdd=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-add"})]),_:1},8,["modelValue"]),e(k,{model:"FoodInheritField",modelValue:a.value.foodBatchUpdate.childInheritFieldsRemove,"onUpdate:modelValue":t[17]||(t[17]=o=>a.value.foodBatchUpdate.childInheritFieldsRemove=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-minus"})]),_:1},8,["modelValue"]),e(k,{model:"FoodInheritField",modelValue:a.value.foodBatchUpdate.childInheritFieldsSet,"onUpdate:modelValue":t[18]||(t[18]=o=>a.value.foodBatchUpdate.childInheritFieldsSet=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-equals"})]),_:1},8,["modelValue"]),e(J,{label:r.$t("RemoveAllType",{type:r.$t("ChildInheritFields")}),"hide-details":"",modelValue:a.value.foodBatchUpdate.childInheritFieldsRemoveAll,"onUpdate:modelValue":t[19]||(t[19]=o=>a.value.foodBatchUpdate.childInheritFieldsRemoveAll=o)},null,8,["label","modelValue"])]),_:1})]),_:1},8,["title"])]),_:1})]),_:1})]),_:1})]),_:1}),e(H,null,{default:l(()=>[e(I,{disabled:g.value,onClick:t[20]||(t[20]=o=>C.value=!1)},{default:l(()=>[c(m(r.$t("Cancel")),1)]),_:1},8,["disabled"]),e(I,{color:"warning",loading:g.value,onClick:t[21]||(t[21]=o=>j()),disabled:v.value.length<1},{default:l(()=>[c(m(r.$t("Update")),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1},8,["loading"])]),_:1},8,["activator","modelValue"]))}}),De={class:"text-wrap"},Ne=Y({__name:"ModelListPage",props:{model:{type:String,default:"food"}},setup(h){const{t:E}=ue(),w=he();Re();const B=ye(),b=h,C=[{value:10,title:"10"},{value:25,title:"25"},{value:50,title:"50"}],g=W("query",""),v=W("page",1,{transform:Number}),a=W("pageSize",F().deviceSettings.general_tableItemsPerPage,{transform:Number}),U=y([]),j=y(!1),r=y(!1),t=y(!1),o=y(!1),X=y([]),Z=y(0),u=y({});se(()=>b.model,(n,d)=>{n!=d&&(u.value=Q(b.model,E),S({page:1}))}),Ue(()=>{try{u.value=Q(b.model,E)}catch{console.error("Invalid model passed to ModelListPage, loading Food instead"),u.value=Q("Food",E)}B.value=E(u.value.model.localizationKey)});function S(n){o.value=!0,U.value=[],window.scrollTo({top:0,behavior:"smooth"}),v.value=n.page,a.value=n.itemsPerPage,u.value.list({query:g.value,page:n.page,pageSize:a.value}).then(d=>{X.value=d.results,Z.value=d.count}).catch(d=>{P().addError(D.FETCH_ERROR,d)}).finally(()=>{o.value=!1})}function re(n){new q().apiRecipeImportImportRecipeCreate({id:n.id,recipeImport:n}).then(i=>{S({page:1})}).catch(i=>{P().addError(D.CREATE_ERROR,i)})}function me(){new q().apiRecipeImportImportAllCreate({recipeImport:{}}).then(d=>{S({page:1})}).catch(d=>{P().addError(D.CREATE_ERROR,d)})}function pe(n){let d=new q;F().userSpaces.forEach(i=>{i.space==n.id&&(o.value=!0,d.apiUserSpaceDestroy({id:i.id}).then(A=>{}).catch(A=>{P().addError(D.DELETE_ERROR,A)}).finally(()=>{o.value=!1}))})}return(n,d)=>(p(),f($e,null,{default:l(()=>[e(z,null,{default:l(()=>[e(N,null,{default:l(()=>[e(T,null,{default:l(()=>[e(L,{class:"pt-2 pb-2"},{default:l(()=>[e(I,{variant:"flat",onClick:d[0]||(d[0]=i=>s(w).go(-1)),"prepend-icon":"fa-solid fa-arrow-left"},{default:l(()=>[c(m(n.$t("Back")),1)]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),e(z,{dense:""},{default:l(()=>[e(N,null,{default:l(()=>[e(T,{"prepend-icon":u.value.model.icon,title:n.$t(u.value.model.localizationKey)},le({append:l(()=>[u.value.model.disableCreate?V("",!0):(p(),f(I,{key:0,class:"float-right",icon:"$create",color:"create"},{default:l(()=>[d[17]||(d[17]=ae("i",{class:"fa-solid fa-plus"},null,-1)),e(Be,{"close-after-create":!1,model:h.model,onCreate:d[1]||(d[1]=i=>S({page:s(v)})),onSave:d[2]||(d[2]=i=>S({page:s(v)})),onDelete:d[3]||(d[3]=i=>S({page:s(v)}))},null,8,["model"])]),_:1,__:[17]}))]),default:l(()=>[u.value.model.name=="RecipeImport"?(p(),f(H,{key:0},{default:l(()=>[e(I,{"prepend-icon":"fa-solid fa-rotate",color:"success",onClick:d[4]||(d[4]=i=>me())},{default:l(()=>[c(m(n.$t("ImportAll")),1)]),_:1})]),_:1})):V("",!0),u.value.model.name=="AiLog"?(p(),f(L,{key:1},{default:l(()=>[c(m(n.$t("MonthlyCreditsUsed"))+" ("+m(s(F)().activeSpace.aiMonthlyCreditsUsed)+" / "+m(s(F)().activeSpace.aiCreditsMonthly)+") "+m(n.$t("AiCreditsBalance"))+" : "+m(s(F)().activeSpace.aiCreditsBalance)+" ",1),e(Se,{"model-value":s(F)().activeSpace.aiMonthlyCreditsUsed,max:s(F)().activeSpace.aiCreditsMonthly},null,8,["model-value","max"])]),_:1})):V("",!0),u.value.model.name=="UserSpace"?(p(),f(H,{key:2},{default:l(()=>[e(I,{"prepend-icon":s(ke).icon,to:{name:"ModelListPage",params:{model:"InviteLink"}}},{default:l(()=>[c(m(n.$t("Invites")),1)]),_:1},8,["prepend-icon"])]),_:1})):V("",!0)]),_:2},[u.value.model.localizationKeyDescription?{name:"subtitle",fn:l(()=>[ae("div",De,m(n.$t(u.value.model.localizationKeyDescription)),1)]),key:"0"}:void 0]),1032,["prepend-icon","title"])]),_:1})]),_:1}),e(z,null,{default:l(()=>[e(N,null,{default:l(()=>[u.value.model.disableSearch?V("",!0):(p(),f(Ce,{key:0,"prepend-inner-icon":"$search",label:n.$t("Search"),modelValue:s(g),"onUpdate:modelValue":d[5]||(d[5]=i=>Fe(g)?g.value=i:null),clearable:""},null,8,["label","modelValue"])),e(we,{modelValue:U.value,"onUpdate:modelValue":d[10]||(d[10]=i=>U.value=i),"return-object":"","onUpdate:options":S,items:X.value,"items-length":Z.value,loading:o.value,search:s(g),headers:u.value.getTableHeaders(),"items-per-page-options":C,"show-select":!u.value.model.disableDelete||u.value.model.isMerge,page:s(v),"items-per-page":s(a),"disable-sort":""},le({"item.action":l(({item:i})=>[e(I,{class:"float-right",icon:"$menu",variant:"plain"},{default:l(()=>[e($,{icon:"$menu"}),e(te,{activator:"parent","close-on-content-click":""},{default:l(()=>[e(oe,{density:"compact"},{default:l(()=>[u.value.model.disableCreate&&u.value.model.disableUpdate&&u.value.model.disableDelete?V("",!0):(p(),f(R,{key:0,"prepend-icon":"$edit",to:{name:"ModelEditPage",params:{model:h.model,id:i.id}}},{default:l(()=>[c(m(n.$t("Edit")),1)]),_:2},1032,["to"])),u.value.model.isMerge?(p(),f(R,{key:1,"prepend-icon":"fa-solid fa-arrows-to-dot",link:""},{default:l(()=>[c(m(n.$t("Merge"))+" ",1),e(de,{model:h.model,source:[i],onChange:d[9]||(d[9]=A=>S({page:s(v),itemsPerPage:s(a),search:s(g)}))},null,8,["model","source"])]),_:2},1024)):V("",!0),u.value.model.name=="Food"?(p(),f(R,{key:2,"prepend-icon":"fa-solid fa-table-list",to:{name:"IngredientEditorPage",query:{food_id:i.id}}},{default:l(()=>[c(m(n.$t("Ingredient Editor")),1)]),_:2},1032,["to"])):V("",!0),u.value.model.name=="Unit"?(p(),f(R,{key:3,"prepend-icon":"fa-solid fa-table-list",to:{name:"IngredientEditorPage",query:{unit_id:i.id}}},{default:l(()=>[c(m(n.$t("Ingredient Editor")),1)]),_:2},1032,["to"])):V("",!0),u.value.model.name=="Sync"?(p(),f(R,{key:4,"prepend-icon":"fa-solid fa-rotate",link:""},{default:l(()=>[c(m(n.$t("Import"))+" ",1),e(Me,{sync:i},null,8,["sync"])]),_:2},1024)):V("",!0),u.value.model.name=="RecipeImport"?(p(),f(R,{key:5,"prepend-icon":"fa-solid fa-rotate",onClick:A=>re(i)},{default:l(()=>[c(m(n.$t("Import")),1)]),_:2},1032,["onClick"])):V("",!0),u.value.model.name=="Space"&&i.createdBy.id!=s(F)().userSettings.user.id?(p(),f(R,{key:6,"prepend-icon":"fa-solid fa-arrow-right-from-bracket",onClick:A=>pe(i)},{default:l(()=>[c(m(n.$t("LeaveSpace")),1)]),_:2},1032,["onClick"])):V("",!0)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},[U.value.length>0?{name:"header.action",fn:l(()=>[e(I,{icon:"fa-solid fa-ellipsis-v",variant:"plain",color:"info"},{default:l(()=>[e($,{icon:"fa-solid fa-ellipsis-v"}),e(te,{activator:"parent","close-on-content-click":""},{default:l(()=>[e(oe,{density:"compact",class:"pt-1 pb-1",activatable:""},{default:l(()=>[u.value.model.name=="Food"?(p(),f(R,{key:0,"prepend-icon":"fa-solid fa-list-check",onClick:d[6]||(d[6]=i=>t.value=!0)},{default:l(()=>[c(m(n.$t("BatchEdit")),1)]),_:1})):V("",!0),u.value.model.isMerge?(p(),f(R,{key:1,"prepend-icon":"fa-solid fa-arrows-to-dot",onClick:d[7]||(d[7]=i=>r.value=!0)},{default:l(()=>[c(m(n.$t("Merge")),1)]),_:1})):V("",!0),u.value.model.disableDelete?V("",!0):(p(),f(R,{key:2,"prepend-icon":"$delete",onClick:d[8]||(d[8]=i=>j.value=!0)},{default:l(()=>[c(m(n.$t("Delete_All")),1)]),_:1}))]),_:1})]),_:1})]),_:1})]),key:"0"}:void 0,u.value.model.name=="AiProvider"?{name:"item.space",fn:l(({item:i})=>[i.space==null?(p(),f(M,{key:0,label:"",color:"success"},{default:l(()=>[c(m(n.$t("Global")),1)]),_:1})):(p(),f(M,{key:1,label:"",color:"info"},{default:l(()=>[c(m(n.$t("Space")),1)]),_:1}))]),key:"1"}:void 0,u.value.model.name=="UserSpace"?{name:"item.groups",fn:l(({item:i})=>[c(m(i.groups.flatMap(A=>A.name).join(", ")),1)]),key:"2"}:void 0,u.value.model.name=="Space"?{name:"item.active",fn:l(({item:i})=>[i.id==s(F)().activeSpace.id?(p(),f(M,{key:0,label:"",color:"success"},{default:l(()=>[c(m(n.$t("Active")),1)]),_:1})):(p(),f(M,{key:1,label:"",color:"info",onClick:A=>s(F)().switchSpace(i)},{default:l(()=>[c(m(n.$t("Select")),1)]),_:2},1032,["onClick"]))]),key:"3"}:void 0]),1032,["modelValue","items","items-length","loading","search","headers","show-select","page","items-per-page"])]),_:1})]),_:1}),e(Ee,{items:U.value,model:b.model,modelValue:j.value,"onUpdate:modelValue":d[11]||(d[11]=i=>j.value=i),activator:"model",onChange:d[12]||(d[12]=i=>S({page:s(v),itemsPerPage:s(a),search:s(g)}))},null,8,["items","model","modelValue"]),e(de,{model:h.model,source:U.value,modelValue:r.value,"onUpdate:modelValue":d[13]||(d[13]=i=>r.value=i),activator:"model",onChange:d[14]||(d[14]=i=>S({page:s(v),itemsPerPage:s(a),search:s(g)}))},null,8,["model","source","modelValue"]),h.model=="Food"?(p(),f(Pe,{key:0,items:U.value,modelValue:t.value,"onUpdate:modelValue":d[15]||(d[15]=i=>t.value=i),activator:"model",onChange:d[16]||(d[16]=i=>S({page:s(v),itemsPerPage:s(a),search:s(g)}))},null,8,["items","modelValue"])):V("",!0)]),_:1}))}});export{Ne as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/ModelListPage-kwiBvRmX.d09ad4e2e5c1.js.gz b/config/tandoor/staticfiles/vue3/assets/ModelListPage-kwiBvRmX.d09ad4e2e5c1.js.gz
deleted file mode 100644
index 5b38dc40..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/ModelListPage-kwiBvRmX.d09ad4e2e5c1.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/ModelListPage-kwiBvRmX.js b/config/tandoor/staticfiles/vue3/assets/ModelListPage-kwiBvRmX.js
deleted file mode 100644
index 527f5803..00000000
--- a/config/tandoor/staticfiles/vue3/assets/ModelListPage-kwiBvRmX.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as Y,r as y,h as f,aN as ie,w as l,g as e,M as T,aO as ne,O as L,b as x,e as V,by as fe,ai as M,j as c,t as m,l as s,D as _,F as ve,aP as H,z as I,A as q,Q as P,R as D,f as p,aL as ee,u as ue,aH as ce,aM as se,$ as ge,B as Ve,ac as be,k as z,V as N,ag as k,T as O,W as K,ae as G,G as $,U as J,bB as ye,L as F,bC as Q,bD as Ue,K as $e,s as he,aI as le,i as ae,b7 as Se,bE as ke,_ as Be,S as Ce,aS as Fe,H as te,x as oe,y as R,bF as Re}from"./main-BhFWIRV_.js";import{_ as de}from"./ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.js";import{V as Ie}from"./VTextarea-Dyu7dPGe.js";import{u as W,_ as Ee}from"./BatchDeleteDialog.vue_vue_type_script_setup_true_lang-D0heUVsC.js";import{V as we}from"./VDataTableServer-PUUq4Eqa.js";const Ae={key:0,class:"text-center"},Me=Y({__name:"SyncDialog",props:{sync:{type:{},required:!0}},setup(h){const E=h,w=y(!1),B=y(!1),b=y(void 0);function C(){new q().apiSyncQuerySyncedFolderCreate({id:E.sync.id,sync:E.sync}).then(v=>{b.value=v}).catch(v=>{P().addError(D.UPDATE_ERROR,v)})}return(g,v)=>(p(),f(ie,{"max-width":"600px",activator:"parent",modelValue:w.value,"onUpdate:modelValue":v[3]||(v[3]=a=>w.value=a)},{default:l(()=>[e(T,null,{default:l(()=>[e(ne,{modelValue:w.value,"onUpdate:modelValue":v[0]||(v[0]=a=>w.value=a),title:g.$t("Import")},null,8,["modelValue","title"]),e(L,null,{default:l(()=>[B.value?(p(),x("div",Ae,[e(fe,{indeterminate:!0,color:"success",size:"x-large"})])):V("",!0),b.value?(p(),x(ve,{key:1},[b.value.status=="SUCCESS"?(p(),f(M,{key:0,label:"",color:"success"},{default:l(()=>[c(m(g.$t("Success")),1)]),_:1})):V("",!0),b.value.status!="SUCCESS"?(p(),f(M,{key:1,label:"",color:"danger"},{default:l(()=>[c(m(g.$t("Error")),1)]),_:1})):V("",!0),e(Ie,{"auto-grow":"","max-rows":"10",modelValue:b.value.msg,"onUpdate:modelValue":v[1]||(v[1]=a=>b.value.msg=a),hint:s(_).fromJSDate(b.value.createdAt).toLocaleString(s(_).DATETIME_SHORT),"persistent-hint":"",readonly:""},null,8,["modelValue","hint"])],64)):V("",!0)]),_:1}),e(H,null,{default:l(()=>[b.value?V("",!0):(p(),f(I,{key:0,onClick:v[2]||(v[2]=a=>C()),color:"create",loading:B.value},{default:l(()=>[c(m(g.$t("Import")),1)]),_:1},8,["loading"])),b.value?(p(),f(I,{key:1,to:{name:"ModelListPage",params:{model:"RecipeImport"}},color:"primary",loading:B.value},{default:l(()=>[c(m(g.$t("View")),1)]),_:1},8,["loading"])):V("",!0)]),_:1})]),_:1})]),_:1},8,["modelValue"]))}}),Pe=Y({__name:"BatchEditFoodDialog",props:ee({items:{type:Array,required:!0},activator:{type:String,default:"parent"}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:ee(["change"],["update:modelValue"]),setup(h,{emit:E}){const w=E,B=h,{t:b}=ue(),C=ce(h,"modelValue"),g=y(!1),v=y([]),a=y({foodBatchUpdate:{}}),U=y([{value:!0,title:b("Yes")},{value:!1,title:b("No")}]);se(C,(r,t)=>{!t&&r&&B.items!=null&&(a.value.foodBatchUpdate.foods=B.items.flatMap(o=>o.id),v.value=JSON.parse(JSON.stringify(B.items)))});function j(){let r=new q;g.value=!0,r.apiFoodBatchUpdateUpdate(a.value).then(t=>{}).catch(t=>{P().addError(D.UPDATE_ERROR,t)}).finally(()=>{w("change"),g.value=!1})}return(r,t)=>(p(),f(ie,{"max-width":"1200px",activator:B.activator,modelValue:C.value,"onUpdate:modelValue":t[22]||(t[22]=o=>C.value=o)},{default:l(()=>[e(T,{loading:g.value},{default:l(()=>[e(ne,{title:r.$t("BatchEdit"),"sub-title":r.$t("BatchEditUpdatingItemsCount",{type:r.$t("Foods"),count:v.value.length}),icon:s(ge).icon,modelValue:C.value,"onUpdate:modelValue":t[0]||(t[0]=o=>C.value=o)},null,8,["title","sub-title","icon","modelValue"]),e(Ve),e(L,null,{default:l(()=>[e(be,null,{default:l(()=>[e(z,null,{default:l(()=>[e(N,{cols:"12",md:"6"},{default:l(()=>[e(T,{title:r.$t("Miscellaneous"),"prepend-icon":"fa-solid fa-list",variant:"flat"},{default:l(()=>[e(L,null,{default:l(()=>[e(k,{model:"SupermarketCategory",modelValue:a.value.foodBatchUpdate.category,"onUpdate:modelValue":t[1]||(t[1]=o=>a.value.foodBatchUpdate.category=o),object:!1,"allow-create":"",mode:"single"},null,8,["modelValue"]),e(O,{items:U.value,label:r.$t("Ignore_Shopping"),clearable:"",modelValue:a.value.foodBatchUpdate.ignoreShopping,"onUpdate:modelValue":t[2]||(t[2]=o=>a.value.foodBatchUpdate.ignoreShopping=o)},null,8,["items","label","modelValue"]),e(O,{items:U.value,label:r.$t("OnHand"),clearable:"",modelValue:a.value.foodBatchUpdate.onHand,"onUpdate:modelValue":t[3]||(t[3]=o=>a.value.foodBatchUpdate.onHand=o)},null,8,["items","label","modelValue"]),e(K),e(G,{text:r.$t("Substitutes")},null,8,["text"]),e(k,{model:"Food",modelValue:a.value.foodBatchUpdate.substituteAdd,"onUpdate:modelValue":t[4]||(t[4]=o=>a.value.foodBatchUpdate.substituteAdd=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-add"})]),_:1},8,["modelValue"]),e(k,{model:"Food",modelValue:a.value.foodBatchUpdate.substituteRemove,"onUpdate:modelValue":t[5]||(t[5]=o=>a.value.foodBatchUpdate.substituteRemove=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-minus"})]),_:1},8,["modelValue"]),e(k,{model:"Food",modelValue:a.value.foodBatchUpdate.substituteSet,"onUpdate:modelValue":t[6]||(t[6]=o=>a.value.foodBatchUpdate.substituteSet=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-equals"})]),_:1},8,["modelValue"]),e(J,{label:r.$t("RemoveAllType",{type:r.$t("Substitutes")}),"hide-details":"",modelValue:a.value.foodBatchUpdate.substituteRemoveAll,"onUpdate:modelValue":t[7]||(t[7]=o=>a.value.foodBatchUpdate.substituteRemoveAll=o)},null,8,["label","modelValue"]),e(O,{items:U.value,label:r.$t("substitute_siblings"),clearable:"",modelValue:a.value.foodBatchUpdate.substituteChildren,"onUpdate:modelValue":t[8]||(t[8]=o=>a.value.foodBatchUpdate.substituteChildren=o)},null,8,["items","label","modelValue"]),e(O,{items:U.value,label:r.$t("substitute_children"),clearable:"",modelValue:a.value.foodBatchUpdate.substituteSiblings,"onUpdate:modelValue":t[9]||(t[9]=o=>a.value.foodBatchUpdate.substituteSiblings=o)},null,8,["items","label","modelValue"])]),_:1})]),_:1},8,["title"])]),_:1}),e(N,{cols:"12",md:"6"},{default:l(()=>[e(T,{title:r.$t("Hierarchy"),"prepend-icon":"fa-solid fa-folder-tree",variant:"flat"},{default:l(()=>[e(L,null,{default:l(()=>[e(k,{model:"Food",label:r.$t("Parent"),object:!1,"allow-create":"",clearable:"",modelValue:a.value.foodBatchUpdate.parentSet,"onUpdate:modelValue":t[10]||(t[10]=o=>a.value.foodBatchUpdate.parentSet=o)},{prepend:l(()=>[e($,{icon:"fa-solid fa-equals"})]),_:1},8,["label","modelValue"]),e(O,{items:U.value,label:r.$t("RemoveParent"),clearable:"",modelValue:a.value.foodBatchUpdate.parentRemove,"onUpdate:modelValue":t[11]||(t[11]=o=>a.value.foodBatchUpdate.parentRemove=o)},null,8,["items","label","modelValue"]),e(K),e(G,{text:r.$t("InheritFields")},null,8,["text"]),e(k,{model:"FoodInheritField",modelValue:a.value.foodBatchUpdate.inheritFieldsAdd,"onUpdate:modelValue":t[12]||(t[12]=o=>a.value.foodBatchUpdate.inheritFieldsAdd=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-add"})]),_:1},8,["modelValue"]),e(k,{model:"FoodInheritField",modelValue:a.value.foodBatchUpdate.inheritFieldsRemove,"onUpdate:modelValue":t[13]||(t[13]=o=>a.value.foodBatchUpdate.inheritFieldsRemove=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-minus"})]),_:1},8,["modelValue"]),e(k,{model:"FoodInheritField",modelValue:a.value.foodBatchUpdate.inheritFieldsSet,"onUpdate:modelValue":t[14]||(t[14]=o=>a.value.foodBatchUpdate.inheritFieldsSet=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-equals"})]),_:1},8,["modelValue"]),e(J,{label:r.$t("RemoveAllType",{type:r.$t("InheritFields")}),"hide-details":"",modelValue:a.value.foodBatchUpdate.inheritFieldsRemoveAll,"onUpdate:modelValue":t[15]||(t[15]=o=>a.value.foodBatchUpdate.inheritFieldsRemoveAll=o)},null,8,["label","modelValue"]),e(K),e(G,{text:r.$t("ChildInheritFields")},null,8,["text"]),e(k,{model:"FoodInheritField",modelValue:a.value.foodBatchUpdate.childInheritFieldsAdd,"onUpdate:modelValue":t[16]||(t[16]=o=>a.value.foodBatchUpdate.childInheritFieldsAdd=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-add"})]),_:1},8,["modelValue"]),e(k,{model:"FoodInheritField",modelValue:a.value.foodBatchUpdate.childInheritFieldsRemove,"onUpdate:modelValue":t[17]||(t[17]=o=>a.value.foodBatchUpdate.childInheritFieldsRemove=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-minus"})]),_:1},8,["modelValue"]),e(k,{model:"FoodInheritField",modelValue:a.value.foodBatchUpdate.childInheritFieldsSet,"onUpdate:modelValue":t[18]||(t[18]=o=>a.value.foodBatchUpdate.childInheritFieldsSet=o),object:!1,"allow-create":"",mode:"tags"},{prepend:l(()=>[e($,{icon:"fa-solid fa-equals"})]),_:1},8,["modelValue"]),e(J,{label:r.$t("RemoveAllType",{type:r.$t("ChildInheritFields")}),"hide-details":"",modelValue:a.value.foodBatchUpdate.childInheritFieldsRemoveAll,"onUpdate:modelValue":t[19]||(t[19]=o=>a.value.foodBatchUpdate.childInheritFieldsRemoveAll=o)},null,8,["label","modelValue"])]),_:1})]),_:1},8,["title"])]),_:1})]),_:1})]),_:1})]),_:1}),e(H,null,{default:l(()=>[e(I,{disabled:g.value,onClick:t[20]||(t[20]=o=>C.value=!1)},{default:l(()=>[c(m(r.$t("Cancel")),1)]),_:1},8,["disabled"]),e(I,{color:"warning",loading:g.value,onClick:t[21]||(t[21]=o=>j()),disabled:v.value.length<1},{default:l(()=>[c(m(r.$t("Update")),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1},8,["loading"])]),_:1},8,["activator","modelValue"]))}}),De={class:"text-wrap"},Ne=Y({__name:"ModelListPage",props:{model:{type:String,default:"food"}},setup(h){const{t:E}=ue(),w=he();Re();const B=ye(),b=h,C=[{value:10,title:"10"},{value:25,title:"25"},{value:50,title:"50"}],g=W("query",""),v=W("page",1,{transform:Number}),a=W("pageSize",F().deviceSettings.general_tableItemsPerPage,{transform:Number}),U=y([]),j=y(!1),r=y(!1),t=y(!1),o=y(!1),X=y([]),Z=y(0),u=y({});se(()=>b.model,(n,d)=>{n!=d&&(u.value=Q(b.model,E),S({page:1}))}),Ue(()=>{try{u.value=Q(b.model,E)}catch{console.error("Invalid model passed to ModelListPage, loading Food instead"),u.value=Q("Food",E)}B.value=E(u.value.model.localizationKey)});function S(n){o.value=!0,U.value=[],window.scrollTo({top:0,behavior:"smooth"}),v.value=n.page,a.value=n.itemsPerPage,u.value.list({query:g.value,page:n.page,pageSize:a.value}).then(d=>{X.value=d.results,Z.value=d.count}).catch(d=>{P().addError(D.FETCH_ERROR,d)}).finally(()=>{o.value=!1})}function re(n){new q().apiRecipeImportImportRecipeCreate({id:n.id,recipeImport:n}).then(i=>{S({page:1})}).catch(i=>{P().addError(D.CREATE_ERROR,i)})}function me(){new q().apiRecipeImportImportAllCreate({recipeImport:{}}).then(d=>{S({page:1})}).catch(d=>{P().addError(D.CREATE_ERROR,d)})}function pe(n){let d=new q;F().userSpaces.forEach(i=>{i.space==n.id&&(o.value=!0,d.apiUserSpaceDestroy({id:i.id}).then(A=>{}).catch(A=>{P().addError(D.DELETE_ERROR,A)}).finally(()=>{o.value=!1}))})}return(n,d)=>(p(),f($e,null,{default:l(()=>[e(z,null,{default:l(()=>[e(N,null,{default:l(()=>[e(T,null,{default:l(()=>[e(L,{class:"pt-2 pb-2"},{default:l(()=>[e(I,{variant:"flat",onClick:d[0]||(d[0]=i=>s(w).go(-1)),"prepend-icon":"fa-solid fa-arrow-left"},{default:l(()=>[c(m(n.$t("Back")),1)]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),e(z,{dense:""},{default:l(()=>[e(N,null,{default:l(()=>[e(T,{"prepend-icon":u.value.model.icon,title:n.$t(u.value.model.localizationKey)},le({append:l(()=>[u.value.model.disableCreate?V("",!0):(p(),f(I,{key:0,class:"float-right",icon:"$create",color:"create"},{default:l(()=>[d[17]||(d[17]=ae("i",{class:"fa-solid fa-plus"},null,-1)),e(Be,{"close-after-create":!1,model:h.model,onCreate:d[1]||(d[1]=i=>S({page:s(v)})),onSave:d[2]||(d[2]=i=>S({page:s(v)})),onDelete:d[3]||(d[3]=i=>S({page:s(v)}))},null,8,["model"])]),_:1,__:[17]}))]),default:l(()=>[u.value.model.name=="RecipeImport"?(p(),f(H,{key:0},{default:l(()=>[e(I,{"prepend-icon":"fa-solid fa-rotate",color:"success",onClick:d[4]||(d[4]=i=>me())},{default:l(()=>[c(m(n.$t("ImportAll")),1)]),_:1})]),_:1})):V("",!0),u.value.model.name=="AiLog"?(p(),f(L,{key:1},{default:l(()=>[c(m(n.$t("MonthlyCreditsUsed"))+" ("+m(s(F)().activeSpace.aiMonthlyCreditsUsed)+" / "+m(s(F)().activeSpace.aiCreditsMonthly)+") "+m(n.$t("AiCreditsBalance"))+" : "+m(s(F)().activeSpace.aiCreditsBalance)+" ",1),e(Se,{"model-value":s(F)().activeSpace.aiMonthlyCreditsUsed,max:s(F)().activeSpace.aiCreditsMonthly},null,8,["model-value","max"])]),_:1})):V("",!0),u.value.model.name=="UserSpace"?(p(),f(H,{key:2},{default:l(()=>[e(I,{"prepend-icon":s(ke).icon,to:{name:"ModelListPage",params:{model:"InviteLink"}}},{default:l(()=>[c(m(n.$t("Invites")),1)]),_:1},8,["prepend-icon"])]),_:1})):V("",!0)]),_:2},[u.value.model.localizationKeyDescription?{name:"subtitle",fn:l(()=>[ae("div",De,m(n.$t(u.value.model.localizationKeyDescription)),1)]),key:"0"}:void 0]),1032,["prepend-icon","title"])]),_:1})]),_:1}),e(z,null,{default:l(()=>[e(N,null,{default:l(()=>[u.value.model.disableSearch?V("",!0):(p(),f(Ce,{key:0,"prepend-inner-icon":"$search",label:n.$t("Search"),modelValue:s(g),"onUpdate:modelValue":d[5]||(d[5]=i=>Fe(g)?g.value=i:null),clearable:""},null,8,["label","modelValue"])),e(we,{modelValue:U.value,"onUpdate:modelValue":d[10]||(d[10]=i=>U.value=i),"return-object":"","onUpdate:options":S,items:X.value,"items-length":Z.value,loading:o.value,search:s(g),headers:u.value.getTableHeaders(),"items-per-page-options":C,"show-select":!u.value.model.disableDelete||u.value.model.isMerge,page:s(v),"items-per-page":s(a),"disable-sort":""},le({"item.action":l(({item:i})=>[e(I,{class:"float-right",icon:"$menu",variant:"plain"},{default:l(()=>[e($,{icon:"$menu"}),e(te,{activator:"parent","close-on-content-click":""},{default:l(()=>[e(oe,{density:"compact"},{default:l(()=>[u.value.model.disableCreate&&u.value.model.disableUpdate&&u.value.model.disableDelete?V("",!0):(p(),f(R,{key:0,"prepend-icon":"$edit",to:{name:"ModelEditPage",params:{model:h.model,id:i.id}}},{default:l(()=>[c(m(n.$t("Edit")),1)]),_:2},1032,["to"])),u.value.model.isMerge?(p(),f(R,{key:1,"prepend-icon":"fa-solid fa-arrows-to-dot",link:""},{default:l(()=>[c(m(n.$t("Merge"))+" ",1),e(de,{model:h.model,source:[i],onChange:d[9]||(d[9]=A=>S({page:s(v),itemsPerPage:s(a),search:s(g)}))},null,8,["model","source"])]),_:2},1024)):V("",!0),u.value.model.name=="Food"?(p(),f(R,{key:2,"prepend-icon":"fa-solid fa-table-list",to:{name:"IngredientEditorPage",query:{food_id:i.id}}},{default:l(()=>[c(m(n.$t("Ingredient Editor")),1)]),_:2},1032,["to"])):V("",!0),u.value.model.name=="Unit"?(p(),f(R,{key:3,"prepend-icon":"fa-solid fa-table-list",to:{name:"IngredientEditorPage",query:{unit_id:i.id}}},{default:l(()=>[c(m(n.$t("Ingredient Editor")),1)]),_:2},1032,["to"])):V("",!0),u.value.model.name=="Sync"?(p(),f(R,{key:4,"prepend-icon":"fa-solid fa-rotate",link:""},{default:l(()=>[c(m(n.$t("Import"))+" ",1),e(Me,{sync:i},null,8,["sync"])]),_:2},1024)):V("",!0),u.value.model.name=="RecipeImport"?(p(),f(R,{key:5,"prepend-icon":"fa-solid fa-rotate",onClick:A=>re(i)},{default:l(()=>[c(m(n.$t("Import")),1)]),_:2},1032,["onClick"])):V("",!0),u.value.model.name=="Space"&&i.createdBy.id!=s(F)().userSettings.user.id?(p(),f(R,{key:6,"prepend-icon":"fa-solid fa-arrow-right-from-bracket",onClick:A=>pe(i)},{default:l(()=>[c(m(n.$t("LeaveSpace")),1)]),_:2},1032,["onClick"])):V("",!0)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},[U.value.length>0?{name:"header.action",fn:l(()=>[e(I,{icon:"fa-solid fa-ellipsis-v",variant:"plain",color:"info"},{default:l(()=>[e($,{icon:"fa-solid fa-ellipsis-v"}),e(te,{activator:"parent","close-on-content-click":""},{default:l(()=>[e(oe,{density:"compact",class:"pt-1 pb-1",activatable:""},{default:l(()=>[u.value.model.name=="Food"?(p(),f(R,{key:0,"prepend-icon":"fa-solid fa-list-check",onClick:d[6]||(d[6]=i=>t.value=!0)},{default:l(()=>[c(m(n.$t("BatchEdit")),1)]),_:1})):V("",!0),u.value.model.isMerge?(p(),f(R,{key:1,"prepend-icon":"fa-solid fa-arrows-to-dot",onClick:d[7]||(d[7]=i=>r.value=!0)},{default:l(()=>[c(m(n.$t("Merge")),1)]),_:1})):V("",!0),u.value.model.disableDelete?V("",!0):(p(),f(R,{key:2,"prepend-icon":"$delete",onClick:d[8]||(d[8]=i=>j.value=!0)},{default:l(()=>[c(m(n.$t("Delete_All")),1)]),_:1}))]),_:1})]),_:1})]),_:1})]),key:"0"}:void 0,u.value.model.name=="AiProvider"?{name:"item.space",fn:l(({item:i})=>[i.space==null?(p(),f(M,{key:0,label:"",color:"success"},{default:l(()=>[c(m(n.$t("Global")),1)]),_:1})):(p(),f(M,{key:1,label:"",color:"info"},{default:l(()=>[c(m(n.$t("Space")),1)]),_:1}))]),key:"1"}:void 0,u.value.model.name=="UserSpace"?{name:"item.groups",fn:l(({item:i})=>[c(m(i.groups.flatMap(A=>A.name).join(", ")),1)]),key:"2"}:void 0,u.value.model.name=="Space"?{name:"item.active",fn:l(({item:i})=>[i.id==s(F)().activeSpace.id?(p(),f(M,{key:0,label:"",color:"success"},{default:l(()=>[c(m(n.$t("Active")),1)]),_:1})):(p(),f(M,{key:1,label:"",color:"info",onClick:A=>s(F)().switchSpace(i)},{default:l(()=>[c(m(n.$t("Select")),1)]),_:2},1032,["onClick"]))]),key:"3"}:void 0]),1032,["modelValue","items","items-length","loading","search","headers","show-select","page","items-per-page"])]),_:1})]),_:1}),e(Ee,{items:U.value,model:b.model,modelValue:j.value,"onUpdate:modelValue":d[11]||(d[11]=i=>j.value=i),activator:"model",onChange:d[12]||(d[12]=i=>S({page:s(v),itemsPerPage:s(a),search:s(g)}))},null,8,["items","model","modelValue"]),e(de,{model:h.model,source:U.value,modelValue:r.value,"onUpdate:modelValue":d[13]||(d[13]=i=>r.value=i),activator:"model",onChange:d[14]||(d[14]=i=>S({page:s(v),itemsPerPage:s(a),search:s(g)}))},null,8,["model","source","modelValue"]),h.model=="Food"?(p(),f(Pe,{key:0,items:U.value,modelValue:t.value,"onUpdate:modelValue":d[15]||(d[15]=i=>t.value=i),activator:"model",onChange:d[16]||(d[16]=i=>S({page:s(v),itemsPerPage:s(a),search:s(g)}))},null,8,["items","modelValue"])):V("",!0)]),_:1}))}});export{Ne as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/ModelListPage-kwiBvRmX.js.gz b/config/tandoor/staticfiles/vue3/assets/ModelListPage-kwiBvRmX.js.gz
deleted file mode 100644
index 5b38dc40..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/ModelListPage-kwiBvRmX.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.c864bd88ffb2.js b/config/tandoor/staticfiles/vue3/assets/ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.c864bd88ffb2.js
deleted file mode 100644
index d7566acc..00000000
--- a/config/tandoor/staticfiles/vue3/assets/ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.c864bd88ffb2.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as D,aL as w,u as R,aH as j,r as d,bC as x,aM as T,c as z,h as m,aN as F,w as o,g as t,M as P,aO as q,l as c,B as G,O as H,j as g,e as A,t as p,ag as J,k as K,V as Q,x as I,b as k,p as W,F as X,y as M,G as V,U as Y,aP as Z,z as O,A as ee,Q as ae,R as le,f as u}from"./main-BhFWIRV_.js";const te={key:0},oe={key:1},se=D({__name:"ModelMergeDialog",props:w({model:{type:String,required:!0},source:{type:Array,required:!0},activator:{type:String,default:"parent"}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:w(["change"],["update:modelValue"]),setup($,{emit:S}){const _=S,v=$,{t:h}=R(),r=j($,"modelValue"),i=d(!1),b=d(!1),s=x(v.model,h),n=d(null),f=d([]),L=d([]),y=d([]);T(r,(l,a)=>{!a&&l&&(f.value=JSON.parse(JSON.stringify(v.source)))});const C=z(()=>f.value?f.value.map(l=>s.getLabel(l)).join(", "):"");function N(){let l=new ee,a=[];n.value!=null&&(i.value=!0,f.value.forEach(e=>{a.push(s.merge(e,n.value).then(B=>{if(y.value.push(e),b.value&&n.value!=null&&Object.hasOwn(e,"name")&&Object.hasOwn(e,"name")){let E={name:`${h("Merge")} ${e.name} -> ${n.value.name}`.substring(0,128),param1:e.name,param2:n.value.name,type:s.model.mergeAutomation};a.push(l.apiAutomationCreate({automation:E}).catch(U=>{ae().addError(le.UPDATE_ERROR,U)}))}}).catch(B=>{y.value.push(e)}))}),Promise.allSettled(a).then(()=>{i.value=!1,_("change")}))}return(l,a)=>(u(),m(F,{"max-width":"600px",activator:v.activator,modelValue:r.value,"onUpdate:modelValue":a[5]||(a[5]=e=>r.value=e)},{default:o(()=>[t(P,{loading:i.value},{default:o(()=>[t(q,{title:l.$t("merge_title",{type:l.$t(c(s).model.localizationKey)}),"sub-title":C.value,icon:c(s).model.icon,modelValue:r.value,"onUpdate:modelValue":a[0]||(a[0]=e=>r.value=e)},null,8,["title","sub-title","icon","modelValue"]),t(G),t(H,null,{default:o(()=>[g(p(l.$t("merge_selection",{source:C.value,type:l.$t(c(s).model.localizationKey)}))+" ",1),t(J,{model:v.model,modelValue:n.value,"onUpdate:modelValue":a[1]||(a[1]=e=>n.value=e),"allow-create":""},null,8,["model","modelValue"]),t(K,null,{default:o(()=>[t(Q,null,{default:o(()=>[t(I,null,{default:o(()=>[(u(!0),k(X,null,W(f.value,e=>(u(),m(M,{border:""},{append:o(()=>[L.value.includes(e)?(u(),m(V,{key:0,icon:"fa-solid fa-xmark",color:"error",variant:"tonal"})):y.value.includes(e)?(u(),m(V,{key:1,icon:"fa-solid fa-check",color:"success",variant:"tonal"})):i.value?(u(),m(V,{key:2,icon:"fa-solid fa-circle-notch fa-spin",variant:"tonal",color:"info"})):A("",!0)]),default:o(()=>[g(p(c(s).getLabel(e))+" ",1)]),_:2},1024))),256)),t(M,{class:"text-center"},{default:o(()=>[t(V,{icon:"fa-solid fa-arrow-down",class:"mt-4 mb-4"})]),_:1}),t(M,{class:"text-center",border:""},{default:o(()=>[n.value?(u(),k("span",oe,p(c(s).getLabel(n.value)),1)):(u(),k("span",te,"?"))]),_:1})]),_:1})]),_:1})]),_:1}),c(s).model.mergeAutomation?(u(),m(Y,{key:0,label:l.$t("Automate"),modelValue:b.value,"onUpdate:modelValue":a[2]||(a[2]=e=>b.value=e),hint:l.$t("MergeAutomateHelp"),"persistent-hint":""},null,8,["label","modelValue","hint"])):A("",!0)]),_:1}),t(Z,null,{default:o(()=>[t(O,{disabled:i.value,onClick:a[3]||(a[3]=e=>r.value=!1)},{default:o(()=>[g(p(l.$t("Cancel")),1)]),_:1},8,["disabled"]),t(O,{color:"warning",onClick:a[4]||(a[4]=e=>N()),loading:i.value,disabled:!n.value},{default:o(()=>[g(p(l.$t("Merge")),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1},8,["loading"])]),_:1},8,["activator","modelValue"]))}});export{se as _};
diff --git a/config/tandoor/staticfiles/vue3/assets/ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.c864bd88ffb2.js.gz b/config/tandoor/staticfiles/vue3/assets/ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.c864bd88ffb2.js.gz
deleted file mode 100644
index 1aa39ee1..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.c864bd88ffb2.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.js b/config/tandoor/staticfiles/vue3/assets/ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.js
deleted file mode 100644
index d7566acc..00000000
--- a/config/tandoor/staticfiles/vue3/assets/ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as D,aL as w,u as R,aH as j,r as d,bC as x,aM as T,c as z,h as m,aN as F,w as o,g as t,M as P,aO as q,l as c,B as G,O as H,j as g,e as A,t as p,ag as J,k as K,V as Q,x as I,b as k,p as W,F as X,y as M,G as V,U as Y,aP as Z,z as O,A as ee,Q as ae,R as le,f as u}from"./main-BhFWIRV_.js";const te={key:0},oe={key:1},se=D({__name:"ModelMergeDialog",props:w({model:{type:String,required:!0},source:{type:Array,required:!0},activator:{type:String,default:"parent"}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:w(["change"],["update:modelValue"]),setup($,{emit:S}){const _=S,v=$,{t:h}=R(),r=j($,"modelValue"),i=d(!1),b=d(!1),s=x(v.model,h),n=d(null),f=d([]),L=d([]),y=d([]);T(r,(l,a)=>{!a&&l&&(f.value=JSON.parse(JSON.stringify(v.source)))});const C=z(()=>f.value?f.value.map(l=>s.getLabel(l)).join(", "):"");function N(){let l=new ee,a=[];n.value!=null&&(i.value=!0,f.value.forEach(e=>{a.push(s.merge(e,n.value).then(B=>{if(y.value.push(e),b.value&&n.value!=null&&Object.hasOwn(e,"name")&&Object.hasOwn(e,"name")){let E={name:`${h("Merge")} ${e.name} -> ${n.value.name}`.substring(0,128),param1:e.name,param2:n.value.name,type:s.model.mergeAutomation};a.push(l.apiAutomationCreate({automation:E}).catch(U=>{ae().addError(le.UPDATE_ERROR,U)}))}}).catch(B=>{y.value.push(e)}))}),Promise.allSettled(a).then(()=>{i.value=!1,_("change")}))}return(l,a)=>(u(),m(F,{"max-width":"600px",activator:v.activator,modelValue:r.value,"onUpdate:modelValue":a[5]||(a[5]=e=>r.value=e)},{default:o(()=>[t(P,{loading:i.value},{default:o(()=>[t(q,{title:l.$t("merge_title",{type:l.$t(c(s).model.localizationKey)}),"sub-title":C.value,icon:c(s).model.icon,modelValue:r.value,"onUpdate:modelValue":a[0]||(a[0]=e=>r.value=e)},null,8,["title","sub-title","icon","modelValue"]),t(G),t(H,null,{default:o(()=>[g(p(l.$t("merge_selection",{source:C.value,type:l.$t(c(s).model.localizationKey)}))+" ",1),t(J,{model:v.model,modelValue:n.value,"onUpdate:modelValue":a[1]||(a[1]=e=>n.value=e),"allow-create":""},null,8,["model","modelValue"]),t(K,null,{default:o(()=>[t(Q,null,{default:o(()=>[t(I,null,{default:o(()=>[(u(!0),k(X,null,W(f.value,e=>(u(),m(M,{border:""},{append:o(()=>[L.value.includes(e)?(u(),m(V,{key:0,icon:"fa-solid fa-xmark",color:"error",variant:"tonal"})):y.value.includes(e)?(u(),m(V,{key:1,icon:"fa-solid fa-check",color:"success",variant:"tonal"})):i.value?(u(),m(V,{key:2,icon:"fa-solid fa-circle-notch fa-spin",variant:"tonal",color:"info"})):A("",!0)]),default:o(()=>[g(p(c(s).getLabel(e))+" ",1)]),_:2},1024))),256)),t(M,{class:"text-center"},{default:o(()=>[t(V,{icon:"fa-solid fa-arrow-down",class:"mt-4 mb-4"})]),_:1}),t(M,{class:"text-center",border:""},{default:o(()=>[n.value?(u(),k("span",oe,p(c(s).getLabel(n.value)),1)):(u(),k("span",te,"?"))]),_:1})]),_:1})]),_:1})]),_:1}),c(s).model.mergeAutomation?(u(),m(Y,{key:0,label:l.$t("Automate"),modelValue:b.value,"onUpdate:modelValue":a[2]||(a[2]=e=>b.value=e),hint:l.$t("MergeAutomateHelp"),"persistent-hint":""},null,8,["label","modelValue","hint"])):A("",!0)]),_:1}),t(Z,null,{default:o(()=>[t(O,{disabled:i.value,onClick:a[3]||(a[3]=e=>r.value=!1)},{default:o(()=>[g(p(l.$t("Cancel")),1)]),_:1},8,["disabled"]),t(O,{color:"warning",onClick:a[4]||(a[4]=e=>N()),loading:i.value,disabled:!n.value},{default:o(()=>[g(p(l.$t("Merge")),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1},8,["loading"])]),_:1},8,["activator","modelValue"]))}});export{se as _};
diff --git a/config/tandoor/staticfiles/vue3/assets/ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.js.gz b/config/tandoor/staticfiles/vue3/assets/ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.js.gz
deleted file mode 100644
index 1aa39ee1..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/ModelMergeDialog.vue_vue_type_script_setup_true_lang-BaAGJhdt.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/NumberScalerDialog.vue_vue_type_script_setup_true_lang-BKqLc88N.f5612d8a83cd.js b/config/tandoor/staticfiles/vue3/assets/NumberScalerDialog.vue_vue_type_script_setup_true_lang-BKqLc88N.f5612d8a83cd.js
deleted file mode 100644
index 135d41a9..00000000
--- a/config/tandoor/staticfiles/vue3/assets/NumberScalerDialog.vue_vue_type_script_setup_true_lang-BKqLc88N.f5612d8a83cd.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as g,r as m,aM as C,o as N,h as $,aN as k,w as n,g as t,M as w,aO as x,O as B,af as S,ba as y,z as d,i as V,j as i,aP as D,t as p,f as M}from"./main-BhFWIRV_.js";const O=g({__name:"NumberScalerDialog",props:{number:{type:Number,default:0},title:{type:String,default:"Number"}},emits:{change(s){return s},confirm(s){return s}},setup(s,{emit:b}){const f=b,v=s,o=m(!1),l=m(0);C(()=>v.number,u=>{l.value=u}),N(()=>{l.value=v.number});function r(u){u==="half"&&(l.value=l.value/2),u==="double"&&(l.value=l.value*2),u==="add"&&(l.value=l.value+1),u==="sub"&&(l.value=l.value-1),f("change",l.value)}return(u,e)=>(M(),$(k,{width:"500",activator:"parent",modelValue:o.value,"onUpdate:modelValue":e[7]||(e[7]=a=>o.value=a)},{default:n(()=>[t(w,null,{default:n(()=>[t(x,{title:s.title,modelValue:o.value,"onUpdate:modelValue":e[0]||(e[0]=a=>o.value=a)},null,8,["title","modelValue"]),t(B,null,{default:n(()=>[t(S,{precision:"2",modelValue:l.value,"onUpdate:modelValue":[e[1]||(e[1]=a=>l.value=a),e[2]||(e[2]=a=>r("set"))],"control-variant":"split",min:0},null,8,["modelValue"]),t(y,{divided:"",class:"d-flex"},{default:n(()=>[t(d,{variant:"tonal",class:"flex-grow-1",onClick:e[3]||(e[3]=a=>r("half"))},{default:n(()=>e[8]||(e[8]=[V("i",{class:"fas fa-divide"},null,-1),i(" 2 ")])),_:1,__:[8]}),t(d,{variant:"tonal",class:"flex-grow-1",onClick:e[4]||(e[4]=a=>r("double"))},{default:n(()=>e[9]||(e[9]=[V("i",{class:"fas fa-times"},null,-1),i(" 2 ")])),_:1,__:[9]})]),_:1})]),_:1}),t(D,null,{default:n(()=>[t(d,{onClick:e[5]||(e[5]=a=>o.value=!1)},{default:n(()=>[i(p(u.$t("Close")),1)]),_:1}),t(d,{color:"save","prepend-icon":"$save",onClick:e[6]||(e[6]=a=>{f("confirm",l.value),o.value=!1})},{default:n(()=>[i(p(u.$t("Save")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]))}});export{O as _};
diff --git a/config/tandoor/staticfiles/vue3/assets/NumberScalerDialog.vue_vue_type_script_setup_true_lang-BKqLc88N.f5612d8a83cd.js.gz b/config/tandoor/staticfiles/vue3/assets/NumberScalerDialog.vue_vue_type_script_setup_true_lang-BKqLc88N.f5612d8a83cd.js.gz
deleted file mode 100644
index 2ed46985..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/NumberScalerDialog.vue_vue_type_script_setup_true_lang-BKqLc88N.f5612d8a83cd.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/NumberScalerDialog.vue_vue_type_script_setup_true_lang-BKqLc88N.js b/config/tandoor/staticfiles/vue3/assets/NumberScalerDialog.vue_vue_type_script_setup_true_lang-BKqLc88N.js
deleted file mode 100644
index 135d41a9..00000000
--- a/config/tandoor/staticfiles/vue3/assets/NumberScalerDialog.vue_vue_type_script_setup_true_lang-BKqLc88N.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as g,r as m,aM as C,o as N,h as $,aN as k,w as n,g as t,M as w,aO as x,O as B,af as S,ba as y,z as d,i as V,j as i,aP as D,t as p,f as M}from"./main-BhFWIRV_.js";const O=g({__name:"NumberScalerDialog",props:{number:{type:Number,default:0},title:{type:String,default:"Number"}},emits:{change(s){return s},confirm(s){return s}},setup(s,{emit:b}){const f=b,v=s,o=m(!1),l=m(0);C(()=>v.number,u=>{l.value=u}),N(()=>{l.value=v.number});function r(u){u==="half"&&(l.value=l.value/2),u==="double"&&(l.value=l.value*2),u==="add"&&(l.value=l.value+1),u==="sub"&&(l.value=l.value-1),f("change",l.value)}return(u,e)=>(M(),$(k,{width:"500",activator:"parent",modelValue:o.value,"onUpdate:modelValue":e[7]||(e[7]=a=>o.value=a)},{default:n(()=>[t(w,null,{default:n(()=>[t(x,{title:s.title,modelValue:o.value,"onUpdate:modelValue":e[0]||(e[0]=a=>o.value=a)},null,8,["title","modelValue"]),t(B,null,{default:n(()=>[t(S,{precision:"2",modelValue:l.value,"onUpdate:modelValue":[e[1]||(e[1]=a=>l.value=a),e[2]||(e[2]=a=>r("set"))],"control-variant":"split",min:0},null,8,["modelValue"]),t(y,{divided:"",class:"d-flex"},{default:n(()=>[t(d,{variant:"tonal",class:"flex-grow-1",onClick:e[3]||(e[3]=a=>r("half"))},{default:n(()=>e[8]||(e[8]=[V("i",{class:"fas fa-divide"},null,-1),i(" 2 ")])),_:1,__:[8]}),t(d,{variant:"tonal",class:"flex-grow-1",onClick:e[4]||(e[4]=a=>r("double"))},{default:n(()=>e[9]||(e[9]=[V("i",{class:"fas fa-times"},null,-1),i(" 2 ")])),_:1,__:[9]})]),_:1})]),_:1}),t(D,null,{default:n(()=>[t(d,{onClick:e[5]||(e[5]=a=>o.value=!1)},{default:n(()=>[i(p(u.$t("Close")),1)]),_:1}),t(d,{color:"save","prepend-icon":"$save",onClick:e[6]||(e[6]=a=>{f("confirm",l.value),o.value=!1})},{default:n(()=>[i(p(u.$t("Save")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]))}});export{O as _};
diff --git a/config/tandoor/staticfiles/vue3/assets/NumberScalerDialog.vue_vue_type_script_setup_true_lang-BKqLc88N.js.gz b/config/tandoor/staticfiles/vue3/assets/NumberScalerDialog.vue_vue_type_script_setup_true_lang-BKqLc88N.js.gz
deleted file mode 100644
index 2ed46985..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/NumberScalerDialog.vue_vue_type_script_setup_true_lang-BKqLc88N.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings-CAAW1WFm.55a1bf26a016.js b/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings-CAAW1WFm.55a1bf26a016.js
deleted file mode 100644
index 5e3a73b1..00000000
--- a/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings-CAAW1WFm.55a1bf26a016.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as m}from"./OpenDataImportSettings.vue_vue_type_script_setup_true_lang-DCLFRok1.js";import"./main-BhFWIRV_.js";export{m as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings-CAAW1WFm.js b/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings-CAAW1WFm.js
deleted file mode 100644
index 5e3a73b1..00000000
--- a/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings-CAAW1WFm.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as m}from"./OpenDataImportSettings.vue_vue_type_script_setup_true_lang-DCLFRok1.js";import"./main-BhFWIRV_.js";export{m as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings.vue_vue_type_script_setup_true_lang-DCLFRok1.05de75d7cdc4.js b/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings.vue_vue_type_script_setup_true_lang-DCLFRok1.05de75d7cdc4.js
deleted file mode 100644
index acd17aa8..00000000
--- a/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings.vue_vue_type_script_setup_true_lang-DCLFRok1.05de75d7cdc4.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as C,r as c,o as O,A as b,Q as $,R as D,b as i,i as o,g as d,h as R,e as m,t as s,B as I,j as f,l as a,T as M,w as y,k as w,F as h,U as v,aj as T,p as B,z as _,V as A,f as u}from"./main-BhFWIRV_.js";const N={class:"text-h4"},S={class:"text-subtitle-1"},j={href:"https://github.com/TandoorRecipes/open-tandoor-data",target:"_blank",rel:"noreferrer nofollow"},F={key:0},L={key:1},q={key:2},H={key:3},G=C({__name:"OpenDataImportSettings",setup(z){let p=c(!1),V=c({}),r=c({useMetric:!0,updateExisting:!0}),n=c({}),g=c({food:!0,unit:!0,category:!0,property:!0,store:!1,conversion:!0});O(()=>{E()});function E(){let l=new b;p.value=!0,l.apiImportOpenDataRetrieve().then(e=>{V.value=e;let t=document.querySelector("html").getAttribute("lang");t!=null&&V.value.versions.includes(t)&&(r.value.selectedVersion=t)}).catch(e=>{$().addError(D.FETCH_ERROR,e)}).finally(()=>{p.value=!1})}function U(){let l=new b;p.value=!0,r.value.selectedDatatypes=[],Object.keys(g.value).forEach(e=>{g.value[e]&&r.value.selectedDatatypes.push(e)}),l.apiImportOpenDataCreate({importOpenData:r.value}).then(e=>{n.value=e}).catch(e=>{$().addError(D.FETCH_ERROR,e)}).finally(()=>{p.value=!1})}return(l,e)=>(u(),i(h,null,[o("p",N,s(l.$t("Open_Data_Import")),1),d(I),o("p",S,[f(s(l.$t("Data_Import_Info"))+" ",1),o("a",j,s(l.$t("Learn_More")),1)]),d(M,{items:a(V).versions,label:l.$t("Language"),class:"mt-4",modelValue:a(r).selectedVersion,"onUpdate:modelValue":e[0]||(e[0]=t=>a(r).selectedVersion=t),loading:a(p)},null,8,["items","label","modelValue","loading"]),a(r).selectedVersion?(u(),R(w,{key:0},{default:y(()=>[d(A,null,{default:y(()=>[d(v,{label:l.$t("Update_Existing_Data"),modelValue:a(r).updateExisting,"onUpdate:modelValue":e[1]||(e[1]=t=>a(r).updateExisting=t),"hide-details":""},null,8,["label","modelValue"]),d(v,{label:l.$t("Use_Metric"),modelValue:a(r).useMetric,"onUpdate:modelValue":e[2]||(e[2]=t=>a(r).useMetric=t),"hide-details":""},null,8,["label","modelValue"]),d(T,null,{default:y(()=>[o("thead",null,[o("tr",null,[o("th",null,s(l.$t("Import")),1),o("th",null,s(l.$t("Datatype")),1),o("th",null,s(l.$t("Number of Objects")),1),o("th",null,s(l.$t("Imported")),1)])]),o("tbody",null,[(u(!0),i(h,null,B(a(V).datatypes,t=>(u(),i("tr",null,[o("td",null,[d(v,{"hide-details":"",density:"compact",loading:a(p),modelValue:a(g)[t],"onUpdate:modelValue":k=>a(g)[t]=k},null,8,["loading","modelValue","onUpdate:modelValue"])]),o("td",null,s(l.$t(t.charAt(0).toUpperCase()+t.slice(1))),1),o("td",null,s(a(V)[a(r).selectedVersion][t]),1),o("td",null,[a(n)[t]?(u(),i(h,{key:0},[a(n)[t].totalCreated>0?(u(),i("p",F,[e[4]||(e[4]=o("i",{class:"fas fa-plus-circle"},null,-1)),f(" "+s(a(n)[t].totalCreated)+" "+s(l.$t("Created")),1)])):m("",!0),a(n)[t].totalUpdated>0?(u(),i("p",L,[e[5]||(e[5]=o("i",{class:"fas fa-pencil-alt"},null,-1)),f(" "+s(a(n)[t].totalUpdated)+" "+s(l.$t("Updated")),1)])):m("",!0),a(n)[t].totalUntouched>0?(u(),i("p",q,[e[6]||(e[6]=o("i",{class:"fas fa-forward"},null,-1)),f(" "+s(a(n)[t].totalUntouched)+" "+s(l.$t("Unchanged")),1)])):m("",!0),a(n)[t].totalErrored>0?(u(),i("p",H,[e[7]||(e[7]=o("i",{class:"fas fa-exclamation-circle"},null,-1)),f(" "+s(a(n)[t].totalErrored)+" "+s(l.$t("Error")),1)])):m("",!0)],64)):m("",!0)])]))),256))])]),_:1}),d(_,{onClick:e[3]||(e[3]=t=>U()),class:"mt-2 float-right",color:"success",loading:a(p)},{default:y(()=>[f(s(l.$t("Import")),1)]),_:1},8,["loading"])]),_:1})]),_:1})):m("",!0)],64))}});export{G as _};
diff --git a/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings.vue_vue_type_script_setup_true_lang-DCLFRok1.05de75d7cdc4.js.gz b/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings.vue_vue_type_script_setup_true_lang-DCLFRok1.05de75d7cdc4.js.gz
deleted file mode 100644
index 155b8630..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings.vue_vue_type_script_setup_true_lang-DCLFRok1.05de75d7cdc4.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings.vue_vue_type_script_setup_true_lang-DCLFRok1.js b/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings.vue_vue_type_script_setup_true_lang-DCLFRok1.js
deleted file mode 100644
index acd17aa8..00000000
--- a/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings.vue_vue_type_script_setup_true_lang-DCLFRok1.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as C,r as c,o as O,A as b,Q as $,R as D,b as i,i as o,g as d,h as R,e as m,t as s,B as I,j as f,l as a,T as M,w as y,k as w,F as h,U as v,aj as T,p as B,z as _,V as A,f as u}from"./main-BhFWIRV_.js";const N={class:"text-h4"},S={class:"text-subtitle-1"},j={href:"https://github.com/TandoorRecipes/open-tandoor-data",target:"_blank",rel:"noreferrer nofollow"},F={key:0},L={key:1},q={key:2},H={key:3},G=C({__name:"OpenDataImportSettings",setup(z){let p=c(!1),V=c({}),r=c({useMetric:!0,updateExisting:!0}),n=c({}),g=c({food:!0,unit:!0,category:!0,property:!0,store:!1,conversion:!0});O(()=>{E()});function E(){let l=new b;p.value=!0,l.apiImportOpenDataRetrieve().then(e=>{V.value=e;let t=document.querySelector("html").getAttribute("lang");t!=null&&V.value.versions.includes(t)&&(r.value.selectedVersion=t)}).catch(e=>{$().addError(D.FETCH_ERROR,e)}).finally(()=>{p.value=!1})}function U(){let l=new b;p.value=!0,r.value.selectedDatatypes=[],Object.keys(g.value).forEach(e=>{g.value[e]&&r.value.selectedDatatypes.push(e)}),l.apiImportOpenDataCreate({importOpenData:r.value}).then(e=>{n.value=e}).catch(e=>{$().addError(D.FETCH_ERROR,e)}).finally(()=>{p.value=!1})}return(l,e)=>(u(),i(h,null,[o("p",N,s(l.$t("Open_Data_Import")),1),d(I),o("p",S,[f(s(l.$t("Data_Import_Info"))+" ",1),o("a",j,s(l.$t("Learn_More")),1)]),d(M,{items:a(V).versions,label:l.$t("Language"),class:"mt-4",modelValue:a(r).selectedVersion,"onUpdate:modelValue":e[0]||(e[0]=t=>a(r).selectedVersion=t),loading:a(p)},null,8,["items","label","modelValue","loading"]),a(r).selectedVersion?(u(),R(w,{key:0},{default:y(()=>[d(A,null,{default:y(()=>[d(v,{label:l.$t("Update_Existing_Data"),modelValue:a(r).updateExisting,"onUpdate:modelValue":e[1]||(e[1]=t=>a(r).updateExisting=t),"hide-details":""},null,8,["label","modelValue"]),d(v,{label:l.$t("Use_Metric"),modelValue:a(r).useMetric,"onUpdate:modelValue":e[2]||(e[2]=t=>a(r).useMetric=t),"hide-details":""},null,8,["label","modelValue"]),d(T,null,{default:y(()=>[o("thead",null,[o("tr",null,[o("th",null,s(l.$t("Import")),1),o("th",null,s(l.$t("Datatype")),1),o("th",null,s(l.$t("Number of Objects")),1),o("th",null,s(l.$t("Imported")),1)])]),o("tbody",null,[(u(!0),i(h,null,B(a(V).datatypes,t=>(u(),i("tr",null,[o("td",null,[d(v,{"hide-details":"",density:"compact",loading:a(p),modelValue:a(g)[t],"onUpdate:modelValue":k=>a(g)[t]=k},null,8,["loading","modelValue","onUpdate:modelValue"])]),o("td",null,s(l.$t(t.charAt(0).toUpperCase()+t.slice(1))),1),o("td",null,s(a(V)[a(r).selectedVersion][t]),1),o("td",null,[a(n)[t]?(u(),i(h,{key:0},[a(n)[t].totalCreated>0?(u(),i("p",F,[e[4]||(e[4]=o("i",{class:"fas fa-plus-circle"},null,-1)),f(" "+s(a(n)[t].totalCreated)+" "+s(l.$t("Created")),1)])):m("",!0),a(n)[t].totalUpdated>0?(u(),i("p",L,[e[5]||(e[5]=o("i",{class:"fas fa-pencil-alt"},null,-1)),f(" "+s(a(n)[t].totalUpdated)+" "+s(l.$t("Updated")),1)])):m("",!0),a(n)[t].totalUntouched>0?(u(),i("p",q,[e[6]||(e[6]=o("i",{class:"fas fa-forward"},null,-1)),f(" "+s(a(n)[t].totalUntouched)+" "+s(l.$t("Unchanged")),1)])):m("",!0),a(n)[t].totalErrored>0?(u(),i("p",H,[e[7]||(e[7]=o("i",{class:"fas fa-exclamation-circle"},null,-1)),f(" "+s(a(n)[t].totalErrored)+" "+s(l.$t("Error")),1)])):m("",!0)],64)):m("",!0)])]))),256))])]),_:1}),d(_,{onClick:e[3]||(e[3]=t=>U()),class:"mt-2 float-right",color:"success",loading:a(p)},{default:y(()=>[f(s(l.$t("Import")),1)]),_:1},8,["loading"])]),_:1})]),_:1})):m("",!0)],64))}});export{G as _};
diff --git a/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings.vue_vue_type_script_setup_true_lang-DCLFRok1.js.gz b/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings.vue_vue_type_script_setup_true_lang-DCLFRok1.js.gz
deleted file mode 100644
index 155b8630..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/OpenDataImportSettings.vue_vue_type_script_setup_true_lang-DCLFRok1.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.54d0f5188c62.js b/config/tandoor/staticfiles/vue3/assets/PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.54d0f5188c62.js
deleted file mode 100644
index b7c20f0f..00000000
--- a/config/tandoor/staticfiles/vue3/assets/PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.54d0f5188c62.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as E,u as b,r as g,aM as S,A as _,Q as V,R as $,h as C,aN as z,w as l,g as t,M as A,aO as T,O as w,S as D,aP as M,z as R,j as c,t as p,f,b as k,av as L,G as O,H as B,x as N,y as m,bQ as x,e as P,by as F,_ as I,F as h,s as U,i as q,p as j,ai as H}from"./main-BhFWIRV_.js";import{_ as Q}from"./BtnCopy.vue_vue_type_script_setup_true_lang-B_1A58TG.js";import{_ as G}from"./AddToShoppingDialog.vue_vue_type_script_setup_true_lang-ByrmCw9F.js";import{u as J}from"./useFileApi-4KcBp6Fj.js";const K=E({__name:"RecipeShareDialog",props:{recipe:{type:Object,required:!0}},setup(r){const n=r,{t:v}=b(),i=g(!1),d=g(!1),s=g({});S(i,(a,e)=>{!e&&a&&y()});function y(){let a=new _;d.value=!0,a.apiShareLinkRetrieve({id:n.recipe.id}).then(e=>{s.value=e}).catch(e=>{V().addError($.CREATE_ERROR,e)}).finally(()=>{d.value=!1})}function o(){let a={title:n.recipe.name,text:`${v("Check out this recipe: ")} ${n.recipe.name}`,url:s.value.link};navigator.share(a)}return(a,e)=>(f(),C(z,{"max-width":"600px",activator:"parent",modelValue:i.value,"onUpdate:modelValue":e[4]||(e[4]=u=>i.value=u)},{default:l(()=>[t(A,null,{default:l(()=>[t(T,{title:a.$t("Share"),"sub-title":r.recipe.name,modelValue:i.value,"onUpdate:modelValue":e[0]||(e[0]=u=>i.value=u)},null,8,["title","sub-title","modelValue"]),t(w,null,{default:l(()=>[t(D,{label:a.$t("Link"),modelValue:s.value.link,"onUpdate:modelValue":e[1]||(e[1]=u=>s.value.link=u),loading:d.value},{"append-inner":l(()=>[t(Q,{"copy-value":s.value.link,color:"",variant:"plain"},null,8,["copy-value"])]),_:1},8,["label","modelValue","loading"])]),_:1}),t(M,null,{default:l(()=>[t(R,{class:"float-right",onClick:e[2]||(e[2]=u=>i.value=!1)},{default:l(()=>[c(p(a.$t("Close")),1)]),_:1}),t(R,{class:"float-right",color:"success","prepend-icon":"fa-solid fa-share-nodes",onClick:e[3]||(e[3]=u=>o())},{default:l(()=>[c(p(a.$t("Share")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]))}}),ae=E({__name:"RecipeContextMenu",props:{recipe:{type:Object,required:!0},size:{type:String,default:"medium"}},setup(r){const n=U(),{updateRecipeImage:v}=J(),i=r,d=g(!1),s=g(!1);function y(){let o=new _;s.value=!0,o.apiRecipeRetrieve({id:i.recipe.id}).then(a=>{o.apiRecipeCreate({recipe:a}).then(e=>{a.image?v(e.id,null,a.image).then(u=>{n.push({name:"RecipeViewPage",params:{id:e.id}})}).catch(u=>{V().addError($.UPDATE_ERROR,u),s.value=!1}):n.push({name:"RecipeViewPage",params:{id:e.id}})}).catch(e=>{V().addError($.CREATE_ERROR,e),s.value=!1})}).catch(a=>{V().addError($.FETCH_ERROR,a),s.value=!1})}return(o,a)=>(f(),k(h,null,[t(R,L(i,{icon:"fa-solid fa-ellipsis-v",variant:"plain",size:i.size,class:"d-print-none"}),{default:l(()=>[t(O,{icon:"fa-solid fa-ellipsis-v"}),t(B,{activator:"parent","close-on-content-click":""},{default:l(()=>[t(N,{density:"compact",class:"pt-1 pb-1"},{default:l(()=>[t(m,{to:{name:"ModelEditPage",params:{model:"recipe",id:r.recipe.id}},"prepend-icon":"$edit"},{default:l(()=>[c(p(o.$t("Edit")),1)]),_:1},8,["to"]),t(m,{"prepend-icon":"$mealplan",onClick:a[0]||(a[0]=e=>d.value=!0)},{default:l(()=>[c(p(o.$t("Add_to_Plan")),1)]),_:1}),t(m,{"prepend-icon":"$shopping",link:""},{default:l(()=>[c(p(o.$t("Add_to_Shopping"))+" ",1),t(G,{recipe:i.recipe},null,8,["recipe"])]),_:1}),t(m,{to:{name:"PropertyEditorPage",query:{recipe:r.recipe.id}},"prepend-icon":"fa-solid fa-table",link:""},{default:l(()=>[c(p(o.$t("Property_Editor")),1)]),_:1},8,["to"]),t(m,{"prepend-icon":"fa-solid fa-share-nodes",link:""},{default:l(()=>[c(p(o.$t("Share"))+" ",1),t(K,{recipe:i.recipe},null,8,["recipe"])]),_:1}),t(m,{onClick:a[1]||(a[1]=x(e=>y(),["stop"])),"prepend-icon":"$copy",disabled:s.value},{append:l(()=>[s.value?(f(),C(F,{key:0,indeterminate:"",size:"small"})):P("",!0)]),default:l(()=>[c(p(o.$t("Duplicate"))+" ",1)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},16,["size"]),t(I,{model:"MealPlan",itemDefaults:{recipe:r.recipe,servings:r.recipe.servings},"close-after-create":!1,"close-after-save":!1,modelValue:d.value,"onUpdate:modelValue":a[2]||(a[2]=e=>d.value=e)},null,8,["itemDefaults","modelValue"])],64))}}),W={key:0,class:"ms-1 me-1"},te=E({__name:"PrivateRecipeBadge",props:{showText:{type:Boolean,default:!0},users:{type:[],required:!1},size:{type:String,default:"x-small"},color:{type:String,default:""},variant:{type:String,default:"tonal"}},setup(r){const n=r;return(v,i)=>(f(),k(h,null,[i[0]||(i[0]=q("i",{class:"fa-solid fa-lock"},null,-1)),n.showText?(f(),k("span",W,p(v.$t("Private_Recipe")),1)):P("",!0),(f(!0),k(h,null,j(r.users,d=>(f(),C(H,{class:"me-1 mb-1",color:n.color,size:n.size,variant:n.variant,key:d.id,"prepend-icon":"fa-solid fa-share-nodes"},{default:l(()=>[c(p(d.displayName),1)]),_:2},1032,["color","size","variant"]))),128))],64))}});export{ae as _,te as a};
diff --git a/config/tandoor/staticfiles/vue3/assets/PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.54d0f5188c62.js.gz b/config/tandoor/staticfiles/vue3/assets/PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.54d0f5188c62.js.gz
deleted file mode 100644
index 72f33535..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.54d0f5188c62.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.js b/config/tandoor/staticfiles/vue3/assets/PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.js
deleted file mode 100644
index b7c20f0f..00000000
--- a/config/tandoor/staticfiles/vue3/assets/PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as E,u as b,r as g,aM as S,A as _,Q as V,R as $,h as C,aN as z,w as l,g as t,M as A,aO as T,O as w,S as D,aP as M,z as R,j as c,t as p,f,b as k,av as L,G as O,H as B,x as N,y as m,bQ as x,e as P,by as F,_ as I,F as h,s as U,i as q,p as j,ai as H}from"./main-BhFWIRV_.js";import{_ as Q}from"./BtnCopy.vue_vue_type_script_setup_true_lang-B_1A58TG.js";import{_ as G}from"./AddToShoppingDialog.vue_vue_type_script_setup_true_lang-ByrmCw9F.js";import{u as J}from"./useFileApi-4KcBp6Fj.js";const K=E({__name:"RecipeShareDialog",props:{recipe:{type:Object,required:!0}},setup(r){const n=r,{t:v}=b(),i=g(!1),d=g(!1),s=g({});S(i,(a,e)=>{!e&&a&&y()});function y(){let a=new _;d.value=!0,a.apiShareLinkRetrieve({id:n.recipe.id}).then(e=>{s.value=e}).catch(e=>{V().addError($.CREATE_ERROR,e)}).finally(()=>{d.value=!1})}function o(){let a={title:n.recipe.name,text:`${v("Check out this recipe: ")} ${n.recipe.name}`,url:s.value.link};navigator.share(a)}return(a,e)=>(f(),C(z,{"max-width":"600px",activator:"parent",modelValue:i.value,"onUpdate:modelValue":e[4]||(e[4]=u=>i.value=u)},{default:l(()=>[t(A,null,{default:l(()=>[t(T,{title:a.$t("Share"),"sub-title":r.recipe.name,modelValue:i.value,"onUpdate:modelValue":e[0]||(e[0]=u=>i.value=u)},null,8,["title","sub-title","modelValue"]),t(w,null,{default:l(()=>[t(D,{label:a.$t("Link"),modelValue:s.value.link,"onUpdate:modelValue":e[1]||(e[1]=u=>s.value.link=u),loading:d.value},{"append-inner":l(()=>[t(Q,{"copy-value":s.value.link,color:"",variant:"plain"},null,8,["copy-value"])]),_:1},8,["label","modelValue","loading"])]),_:1}),t(M,null,{default:l(()=>[t(R,{class:"float-right",onClick:e[2]||(e[2]=u=>i.value=!1)},{default:l(()=>[c(p(a.$t("Close")),1)]),_:1}),t(R,{class:"float-right",color:"success","prepend-icon":"fa-solid fa-share-nodes",onClick:e[3]||(e[3]=u=>o())},{default:l(()=>[c(p(a.$t("Share")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]))}}),ae=E({__name:"RecipeContextMenu",props:{recipe:{type:Object,required:!0},size:{type:String,default:"medium"}},setup(r){const n=U(),{updateRecipeImage:v}=J(),i=r,d=g(!1),s=g(!1);function y(){let o=new _;s.value=!0,o.apiRecipeRetrieve({id:i.recipe.id}).then(a=>{o.apiRecipeCreate({recipe:a}).then(e=>{a.image?v(e.id,null,a.image).then(u=>{n.push({name:"RecipeViewPage",params:{id:e.id}})}).catch(u=>{V().addError($.UPDATE_ERROR,u),s.value=!1}):n.push({name:"RecipeViewPage",params:{id:e.id}})}).catch(e=>{V().addError($.CREATE_ERROR,e),s.value=!1})}).catch(a=>{V().addError($.FETCH_ERROR,a),s.value=!1})}return(o,a)=>(f(),k(h,null,[t(R,L(i,{icon:"fa-solid fa-ellipsis-v",variant:"plain",size:i.size,class:"d-print-none"}),{default:l(()=>[t(O,{icon:"fa-solid fa-ellipsis-v"}),t(B,{activator:"parent","close-on-content-click":""},{default:l(()=>[t(N,{density:"compact",class:"pt-1 pb-1"},{default:l(()=>[t(m,{to:{name:"ModelEditPage",params:{model:"recipe",id:r.recipe.id}},"prepend-icon":"$edit"},{default:l(()=>[c(p(o.$t("Edit")),1)]),_:1},8,["to"]),t(m,{"prepend-icon":"$mealplan",onClick:a[0]||(a[0]=e=>d.value=!0)},{default:l(()=>[c(p(o.$t("Add_to_Plan")),1)]),_:1}),t(m,{"prepend-icon":"$shopping",link:""},{default:l(()=>[c(p(o.$t("Add_to_Shopping"))+" ",1),t(G,{recipe:i.recipe},null,8,["recipe"])]),_:1}),t(m,{to:{name:"PropertyEditorPage",query:{recipe:r.recipe.id}},"prepend-icon":"fa-solid fa-table",link:""},{default:l(()=>[c(p(o.$t("Property_Editor")),1)]),_:1},8,["to"]),t(m,{"prepend-icon":"fa-solid fa-share-nodes",link:""},{default:l(()=>[c(p(o.$t("Share"))+" ",1),t(K,{recipe:i.recipe},null,8,["recipe"])]),_:1}),t(m,{onClick:a[1]||(a[1]=x(e=>y(),["stop"])),"prepend-icon":"$copy",disabled:s.value},{append:l(()=>[s.value?(f(),C(F,{key:0,indeterminate:"",size:"small"})):P("",!0)]),default:l(()=>[c(p(o.$t("Duplicate"))+" ",1)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},16,["size"]),t(I,{model:"MealPlan",itemDefaults:{recipe:r.recipe,servings:r.recipe.servings},"close-after-create":!1,"close-after-save":!1,modelValue:d.value,"onUpdate:modelValue":a[2]||(a[2]=e=>d.value=e)},null,8,["itemDefaults","modelValue"])],64))}}),W={key:0,class:"ms-1 me-1"},te=E({__name:"PrivateRecipeBadge",props:{showText:{type:Boolean,default:!0},users:{type:[],required:!1},size:{type:String,default:"x-small"},color:{type:String,default:""},variant:{type:String,default:"tonal"}},setup(r){const n=r;return(v,i)=>(f(),k(h,null,[i[0]||(i[0]=q("i",{class:"fa-solid fa-lock"},null,-1)),n.showText?(f(),k("span",W,p(v.$t("Private_Recipe")),1)):P("",!0),(f(!0),k(h,null,j(r.users,d=>(f(),C(H,{class:"me-1 mb-1",color:n.color,size:n.size,variant:n.variant,key:d.id,"prepend-icon":"fa-solid fa-share-nodes"},{default:l(()=>[c(p(d.displayName),1)]),_:2},1032,["color","size","variant"]))),128))],64))}});export{ae as _,te as a};
diff --git a/config/tandoor/staticfiles/vue3/assets/PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.js.gz b/config/tandoor/staticfiles/vue3/assets/PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.js.gz
deleted file mode 100644
index 72f33535..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/PropertiesEditor.vue_vue_type_script_setup_true_lang-nI_GsYpC.9bd824687351.js b/config/tandoor/staticfiles/vue3/assets/PropertiesEditor.vue_vue_type_script_setup_true_lang-nI_GsYpC.9bd824687351.js
deleted file mode 100644
index b59875de..00000000
--- a/config/tandoor/staticfiles/vue3/assets/PropertiesEditor.vue_vue_type_script_setup_true_lang-nI_GsYpC.9bd824687351.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as I,r as P,o as S,A as C,Q as k,R as h,h as g,e as N,l as b,L as F,f as l,z as m,av as B,w as o,j as f,g as a,t as n,H as w,x as R,b as c,F as V,p as E,y as L,C as x,aL as M,c as O,aH as D,ba as H,k as j,af as G,aI as q,ai as z,V as U,ag as Q,G as $,i as Y,_ as J,aT as K}from"./main-BhFWIRV_.js";const W=I({__name:"AiActionButton",props:{text:{type:String,default:"AI"},color:{type:String,default:""},variant:{type:void 0,default:void 0},density:{type:void 0,default:void 0},icon:{type:String,default:void 0},prependIcon:{type:String,default:void 0},loading:{type:Boolean,default:!1}},emits:["selected"],setup(y,{emit:v}){const _=v,e=y,s=P([]);S(()=>{A()});function A(){new C().apiAiProviderList().then(p=>{s.value=p.results}).catch(p=>{k().addError(h.FETCH_ERROR,p)})}return(T,p)=>b(F)().activeSpace.aiEnabled?(l(),g(m,B({key:0},e,{color:e.color,variant:e.variant,density:e.density,icon:e.icon,"prepend-icon":e.prependIcon,loading:e.loading}),{default:o(()=>[f(n(e.text)+" ",1),a(w,{activator:"parent"},{default:o(()=>[a(R,null,{default:o(()=>[(l(!0),c(V,null,E(s.value,d=>(l(),g(L,{key:d.id,onClick:r=>_("selected",d.id)},{default:o(()=>[a(x,null,{default:o(()=>[f(n(d.name),1)]),_:2},1024)]),_:2},1032,["onClick"]))),128))]),_:1})]),_:1})]),_:1},16,["color","variant","density","icon","prepend-icon","loading"])):N("",!0)}}),X={key:0},Z={key:1},te=I({__name:"PropertiesEditor",props:M({amountFor:{type:String,required:!0}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(y){const v=y,_=O(()=>!("steps"in e.value)),e=D(y,"modelValue"),s=P(!1);function A(r){e.value.properties&&(e.value.properties=e.value.properties.filter(i=>i!==r))}function T(){const r=new C;d(),r.apiPropertyTypeList().then(i=>{i.results.forEach(t=>{e.value.properties.findIndex(u=>u.propertyType.name==t.name)==-1&&e.value.properties.push({propertyAmount:0,propertyType:t})})})}function p(r){const i=new C;s.value=!0,_.value?i.apiFoodAipropertiesCreate({id:e.value.id,food:e.value,provider:r}).then(t=>{e.value=t,K(()=>{d()})}).catch(t=>{k().addError(h.FETCH_ERROR,t)}).finally(()=>{s.value=!1}):i.apiRecipeAipropertiesCreate({id:e.value.id,recipe:e.value,provider:r}).then(t=>{e.value=t}).catch(t=>{k().addError(h.FETCH_ERROR,t)}).finally(()=>{s.value=!1})}function d(){console.log("ADDING UNIT",!e.value.propertiesFoodUnit),_.value&&!e.value.propertiesFoodUnit&&(console.log("ADDING UNIT ACTUALLY"),e.value.propertiesFoodUnit=F().defaultUnitObj!=null?F().defaultUnitObj:{name:"g"})}return(r,i)=>(l(),c(V,null,[a(H,{density:"compact"},{default:o(()=>[a(m,{color:"create",onClick:i[0]||(i[0]=t=>{e.value.properties.push({}),d()}),"prepend-icon":"$create"},{default:o(()=>[f(n(r.$t("Add")),1)]),_:1}),a(m,{color:"secondary",onClick:T,"prepend-icon":"fa-solid fa-list"},{default:o(()=>[f(n(r.$t("AddAll")),1)]),_:1}),a(W,{color:"info",onSelected:p,loading:s.value,"prepend-icon":"$ai"},{default:o(()=>[f(n(r.$t("AI")),1)]),_:1},8,["loading"])]),_:1}),(l(!0),c(V,null,E(e.value.properties,t=>(l(),g(j,{class:"d-none d-md-flex mt-2",dense:""},{default:o(()=>[a(U,{cols:"0",md:"6"},{default:o(()=>[a(G,{step:10,modelValue:t.propertyAmount,"onUpdate:modelValue":u=>t.propertyAmount=u,"control-variant":"stacked",precision:2},q({_:2},[t.propertyType?{name:"append-inner",fn:o(()=>[a(z,{class:"me-4"},{default:o(()=>[f(n(t.propertyType.unit)+" / "+n(v.amountFor),1)]),_:2},1024)]),key:"0"}:void 0]),1032,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(U,{cols:"0",md:"6"},{default:o(()=>[a(Q,{modelValue:t.propertyType,"onUpdate:modelValue":u=>t.propertyType=u,model:"PropertyType"},{append:o(()=>[a(m,{color:"delete",icon:"",onClick:u=>A(t)},{default:o(()=>[a($,{icon:"$delete"})]),_:2},1032,["onClick"])]),_:2},1032,["modelValue","onUpdate:modelValue"])]),_:2},1024)]),_:2},1024))),256)),a(R,{class:"d-md-none"},{default:o(()=>[(l(!0),c(V,null,E(e.value.properties,t=>(l(),g(L,{border:""},{append:o(()=>[a(m,{color:"edit"},{default:o(()=>[a($,{icon:"$edit"}),a(J,{model:"Property",item:t},null,8,["item"])]),_:2},1024)]),default:o(()=>[t.propertyType?(l(),c("span",X,n(t.propertyAmount)+" "+n(t.propertyType.unit)+" "+n(t.propertyType.name)+" / "+n(v.amountFor),1)):(l(),c("span",Z,[Y("i",null,"<"+n(r.$t("New"))+">",1)]))]),_:2},1024))),256))]),_:1})],64))}});export{te as _,W as a};
diff --git a/config/tandoor/staticfiles/vue3/assets/PropertiesEditor.vue_vue_type_script_setup_true_lang-nI_GsYpC.9bd824687351.js.gz b/config/tandoor/staticfiles/vue3/assets/PropertiesEditor.vue_vue_type_script_setup_true_lang-nI_GsYpC.9bd824687351.js.gz
deleted file mode 100644
index d741ca09..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/PropertiesEditor.vue_vue_type_script_setup_true_lang-nI_GsYpC.9bd824687351.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/PropertiesEditor.vue_vue_type_script_setup_true_lang-nI_GsYpC.js b/config/tandoor/staticfiles/vue3/assets/PropertiesEditor.vue_vue_type_script_setup_true_lang-nI_GsYpC.js
deleted file mode 100644
index b59875de..00000000
--- a/config/tandoor/staticfiles/vue3/assets/PropertiesEditor.vue_vue_type_script_setup_true_lang-nI_GsYpC.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as I,r as P,o as S,A as C,Q as k,R as h,h as g,e as N,l as b,L as F,f as l,z as m,av as B,w as o,j as f,g as a,t as n,H as w,x as R,b as c,F as V,p as E,y as L,C as x,aL as M,c as O,aH as D,ba as H,k as j,af as G,aI as q,ai as z,V as U,ag as Q,G as $,i as Y,_ as J,aT as K}from"./main-BhFWIRV_.js";const W=I({__name:"AiActionButton",props:{text:{type:String,default:"AI"},color:{type:String,default:""},variant:{type:void 0,default:void 0},density:{type:void 0,default:void 0},icon:{type:String,default:void 0},prependIcon:{type:String,default:void 0},loading:{type:Boolean,default:!1}},emits:["selected"],setup(y,{emit:v}){const _=v,e=y,s=P([]);S(()=>{A()});function A(){new C().apiAiProviderList().then(p=>{s.value=p.results}).catch(p=>{k().addError(h.FETCH_ERROR,p)})}return(T,p)=>b(F)().activeSpace.aiEnabled?(l(),g(m,B({key:0},e,{color:e.color,variant:e.variant,density:e.density,icon:e.icon,"prepend-icon":e.prependIcon,loading:e.loading}),{default:o(()=>[f(n(e.text)+" ",1),a(w,{activator:"parent"},{default:o(()=>[a(R,null,{default:o(()=>[(l(!0),c(V,null,E(s.value,d=>(l(),g(L,{key:d.id,onClick:r=>_("selected",d.id)},{default:o(()=>[a(x,null,{default:o(()=>[f(n(d.name),1)]),_:2},1024)]),_:2},1032,["onClick"]))),128))]),_:1})]),_:1})]),_:1},16,["color","variant","density","icon","prepend-icon","loading"])):N("",!0)}}),X={key:0},Z={key:1},te=I({__name:"PropertiesEditor",props:M({amountFor:{type:String,required:!0}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(y){const v=y,_=O(()=>!("steps"in e.value)),e=D(y,"modelValue"),s=P(!1);function A(r){e.value.properties&&(e.value.properties=e.value.properties.filter(i=>i!==r))}function T(){const r=new C;d(),r.apiPropertyTypeList().then(i=>{i.results.forEach(t=>{e.value.properties.findIndex(u=>u.propertyType.name==t.name)==-1&&e.value.properties.push({propertyAmount:0,propertyType:t})})})}function p(r){const i=new C;s.value=!0,_.value?i.apiFoodAipropertiesCreate({id:e.value.id,food:e.value,provider:r}).then(t=>{e.value=t,K(()=>{d()})}).catch(t=>{k().addError(h.FETCH_ERROR,t)}).finally(()=>{s.value=!1}):i.apiRecipeAipropertiesCreate({id:e.value.id,recipe:e.value,provider:r}).then(t=>{e.value=t}).catch(t=>{k().addError(h.FETCH_ERROR,t)}).finally(()=>{s.value=!1})}function d(){console.log("ADDING UNIT",!e.value.propertiesFoodUnit),_.value&&!e.value.propertiesFoodUnit&&(console.log("ADDING UNIT ACTUALLY"),e.value.propertiesFoodUnit=F().defaultUnitObj!=null?F().defaultUnitObj:{name:"g"})}return(r,i)=>(l(),c(V,null,[a(H,{density:"compact"},{default:o(()=>[a(m,{color:"create",onClick:i[0]||(i[0]=t=>{e.value.properties.push({}),d()}),"prepend-icon":"$create"},{default:o(()=>[f(n(r.$t("Add")),1)]),_:1}),a(m,{color:"secondary",onClick:T,"prepend-icon":"fa-solid fa-list"},{default:o(()=>[f(n(r.$t("AddAll")),1)]),_:1}),a(W,{color:"info",onSelected:p,loading:s.value,"prepend-icon":"$ai"},{default:o(()=>[f(n(r.$t("AI")),1)]),_:1},8,["loading"])]),_:1}),(l(!0),c(V,null,E(e.value.properties,t=>(l(),g(j,{class:"d-none d-md-flex mt-2",dense:""},{default:o(()=>[a(U,{cols:"0",md:"6"},{default:o(()=>[a(G,{step:10,modelValue:t.propertyAmount,"onUpdate:modelValue":u=>t.propertyAmount=u,"control-variant":"stacked",precision:2},q({_:2},[t.propertyType?{name:"append-inner",fn:o(()=>[a(z,{class:"me-4"},{default:o(()=>[f(n(t.propertyType.unit)+" / "+n(v.amountFor),1)]),_:2},1024)]),key:"0"}:void 0]),1032,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(U,{cols:"0",md:"6"},{default:o(()=>[a(Q,{modelValue:t.propertyType,"onUpdate:modelValue":u=>t.propertyType=u,model:"PropertyType"},{append:o(()=>[a(m,{color:"delete",icon:"",onClick:u=>A(t)},{default:o(()=>[a($,{icon:"$delete"})]),_:2},1032,["onClick"])]),_:2},1032,["modelValue","onUpdate:modelValue"])]),_:2},1024)]),_:2},1024))),256)),a(R,{class:"d-md-none"},{default:o(()=>[(l(!0),c(V,null,E(e.value.properties,t=>(l(),g(L,{border:""},{append:o(()=>[a(m,{color:"edit"},{default:o(()=>[a($,{icon:"$edit"}),a(J,{model:"Property",item:t},null,8,["item"])]),_:2},1024)]),default:o(()=>[t.propertyType?(l(),c("span",X,n(t.propertyAmount)+" "+n(t.propertyType.unit)+" "+n(t.propertyType.name)+" / "+n(v.amountFor),1)):(l(),c("span",Z,[Y("i",null,"<"+n(r.$t("New"))+">",1)]))]),_:2},1024))),256))]),_:1})],64))}});export{te as _,W as a};
diff --git a/config/tandoor/staticfiles/vue3/assets/PropertiesEditor.vue_vue_type_script_setup_true_lang-nI_GsYpC.js.gz b/config/tandoor/staticfiles/vue3/assets/PropertiesEditor.vue_vue_type_script_setup_true_lang-nI_GsYpC.js.gz
deleted file mode 100644
index d741ca09..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/PropertiesEditor.vue_vue_type_script_setup_true_lang-nI_GsYpC.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/PropertyEditor-BAth2eIg.da47f8171924.js b/config/tandoor/staticfiles/vue3/assets/PropertyEditor-BAth2eIg.da47f8171924.js
deleted file mode 100644
index 233046f3..00000000
--- a/config/tandoor/staticfiles/vue3/assets/PropertyEditor-BAth2eIg.da47f8171924.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as v,aM as C,o as S,h as T,f as _,w as l,g as i,O as D,ac as O,af as I,l as e,aI as N,ai as k,j as x,t as P,ag as $}from"./main-BhFWIRV_.js";import{u as h,_ as q}from"./useModelEditorFunctions-Du2kfr61.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";const M=v({__name:"PropertyEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(s,{emit:u}){const o=s,d=u,{setupState:m,deleteObject:f,saveObject:c,isUpdate:y,editingObjName:g,loading:b,editingObj:t,editingObjChanged:r,modelClass:V}=h("Property",d);C([()=>o.item,()=>o.itemId],()=>{p()}),S(()=>{p()});function p(){m(o.item,o.itemId,{itemDefaults:o.itemDefaults})}return(j,a)=>(_(),T(q,{loading:e(b),dialog:s.dialog,onSave:e(c),onDelete:e(f),onClose:a[2]||(a[2]=n=>{d("close"),r.value=!1}),"is-update":e(y)(),"is-changed":e(r),"model-class":e(V),"object-name":e(g)(),"editing-object":e(t)},{default:l(()=>[i(D,null,{default:l(()=>[i(O,null,{default:l(()=>[i(I,{step:10,modelValue:e(t).propertyAmount,"onUpdate:modelValue":a[0]||(a[0]=n=>e(t).propertyAmount=n),"control-variant":"stacked",precision:2},N({_:2},[e(t).propertyType?{name:"append-inner",fn:l(()=>[i(k,{class:"me-4"},{default:l(()=>[x(P(e(t).propertyType.unit),1)]),_:1})]),key:"0"}:void 0]),1032,["modelValue"]),i($,{label:j.$t("Property"),modelValue:e(t).propertyType,"onUpdate:modelValue":a[1]||(a[1]=n=>e(t).propertyType=n),model:"PropertyType"},null,8,["label","modelValue"])]),_:1})]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{M as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/PropertyEditor-BAth2eIg.da47f8171924.js.gz b/config/tandoor/staticfiles/vue3/assets/PropertyEditor-BAth2eIg.da47f8171924.js.gz
deleted file mode 100644
index 880f7980..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/PropertyEditor-BAth2eIg.da47f8171924.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/PropertyEditor-BAth2eIg.js b/config/tandoor/staticfiles/vue3/assets/PropertyEditor-BAth2eIg.js
deleted file mode 100644
index 233046f3..00000000
--- a/config/tandoor/staticfiles/vue3/assets/PropertyEditor-BAth2eIg.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as v,aM as C,o as S,h as T,f as _,w as l,g as i,O as D,ac as O,af as I,l as e,aI as N,ai as k,j as x,t as P,ag as $}from"./main-BhFWIRV_.js";import{u as h,_ as q}from"./useModelEditorFunctions-Du2kfr61.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";const M=v({__name:"PropertyEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(s,{emit:u}){const o=s,d=u,{setupState:m,deleteObject:f,saveObject:c,isUpdate:y,editingObjName:g,loading:b,editingObj:t,editingObjChanged:r,modelClass:V}=h("Property",d);C([()=>o.item,()=>o.itemId],()=>{p()}),S(()=>{p()});function p(){m(o.item,o.itemId,{itemDefaults:o.itemDefaults})}return(j,a)=>(_(),T(q,{loading:e(b),dialog:s.dialog,onSave:e(c),onDelete:e(f),onClose:a[2]||(a[2]=n=>{d("close"),r.value=!1}),"is-update":e(y)(),"is-changed":e(r),"model-class":e(V),"object-name":e(g)(),"editing-object":e(t)},{default:l(()=>[i(D,null,{default:l(()=>[i(O,null,{default:l(()=>[i(I,{step:10,modelValue:e(t).propertyAmount,"onUpdate:modelValue":a[0]||(a[0]=n=>e(t).propertyAmount=n),"control-variant":"stacked",precision:2},N({_:2},[e(t).propertyType?{name:"append-inner",fn:l(()=>[i(k,{class:"me-4"},{default:l(()=>[x(P(e(t).propertyType.unit),1)]),_:1})]),key:"0"}:void 0]),1032,["modelValue"]),i($,{label:j.$t("Property"),modelValue:e(t).propertyType,"onUpdate:modelValue":a[1]||(a[1]=n=>e(t).propertyType=n),model:"PropertyType"},null,8,["label","modelValue"])]),_:1})]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{M as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/PropertyEditor-BAth2eIg.js.gz b/config/tandoor/staticfiles/vue3/assets/PropertyEditor-BAth2eIg.js.gz
deleted file mode 100644
index 880f7980..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/PropertyEditor-BAth2eIg.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/PropertyEditorPage-DFfeym2k.dfc820e48390.js b/config/tandoor/staticfiles/vue3/assets/PropertyEditorPage-DFfeym2k.dfc820e48390.js
deleted file mode 100644
index f84f0709..00000000
--- a/config/tandoor/staticfiles/vue3/assets/PropertyEditorPage-DFfeym2k.dfc820e48390.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as oe,b8 as ae,c as te,r as s,o as de,A as U,Q as F,R as b,b as V,g as o,w as t,K as ue,aN as ne,F as _,M as S,N as re,j as k,t as p,O as B,ag as L,h as m,e as v,z as i,k as W,V as E,aj as se,i as n,p as q,G as A,_ as J,W as ie,S as C,aO as pe,f as r,ai as j,l as fe,af as X}from"./main-BhFWIRV_.js";import{_ as me}from"./BtnCopy.vue_vue_type_script_setup_true_lang-B_1A58TG.js";import{_ as ve}from"./FdcSearchDialog.vue_vue_type_script_setup_true_lang-C-bx54-t.js";import{o as ce}from"./fdc-CkSQIsAv.js";import"./VTooltip-CP00KBBq.js";const Fe=oe({__name:"PropertyEditorPage",setup(ye){const R=ae("history",{}),g=te(()=>(I.value/D.value*N.value).toFixed(2)),$=s(!1),h=s(100),T=s(void 0),I=s(250),D=s(500),N=s(100),M=s(!1),x=s(void 0),f=s(),w=s([]),c=s(new Map),z=s(!1),O=s(!1);de(()=>{Y(),R.recipe&&typeof R.recipe=="string"&&!isNaN(parseInt(R.recipe))&&H(parseInt(R.recipe))});function H(a){let e=new U;z.value=!0,e.apiRecipeRetrieve({id:a}).then(l=>{f.value=l,G()}).catch(l=>{F().addError(b.FETCH_ERROR,l)}).finally(()=>{z.value=!1})}function Y(){let a=new U;O.value=!0,a.apiPropertyTypeList().then(e=>{w.value=e.results,G()}).catch(e=>{F().addError(b.FETCH_ERROR,e)}).finally(()=>{O.value=!1})}function G(){c.value=new Map,f.value!=null&&f.value.steps.forEach(a=>{a.ingredients.forEach(e=>{if(e.food&&!c.value.has(e.food.id)){let l=K(e);l.loading=!1,c.value.set(l.food.id,l)}})})}function K(a){let e=new Map;return a.food.properties.forEach(l=>{e.set(l.propertyType.id,l)}),a.food.properties=[],w.value.forEach(l=>{e.has(l.id)?a.food.properties.push(e.get(l.id)):a.food.properties.push({propertyType:l,propertyAmount:null})}),a}function Z(a,e){let l=new U;a.id?(e.loading=!0,l.apiPropertyDestroy({id:a.id}).then(d=>{a.propertyAmount=null}).catch(d=>{F().addError(b.DELETE_ERROR,d)}).finally(()=>{e.loading=!1})):a.propertyAmount=null}function y(a){let e=new U;a.loading=!0,e.apiFoodPartialUpdate({id:a.food.id,patchedFood:a.food}).then(l=>{}).catch(l=>{F().addError(b.UPDATE_ERROR,l)}).finally(()=>{a.loading=!1})}function Q(a){let e=new U;a.food.fdcId&&(a.loading=!0,e.apiFoodFdcCreate({id:a.food.id,food:a.food}).then(l=>{a.food=l,c.value.set(l.id,K(a))}).catch(l=>{F().addError(b.UPDATE_ERROR,l)}).finally(()=>{a.loading=!1}))}function ee(a){c.value.forEach(e=>{e.food.propertiesFoodUnit=a,y(e)})}function le(a){c.value.forEach(e=>{e.food.propertiesFoodAmount=a,y(e)})}return(a,e)=>(r(),V(_,null,[o(ue,null,{default:t(()=>[o(S,{loading:z.value||O.value},{default:t(()=>[o(re,null,{default:t(()=>[k(p(a.$t("Property_Editor")),1)]),_:1}),o(B,null,{default:t(()=>[o(L,{"append-to-body":"",model:"Recipe",modelValue:f.value,"onUpdate:modelValue":[e[0]||(e[0]=l=>f.value=l),e[1]||(e[1]=l=>H(f.value.id))]},{append:t(()=>[f.value!=null?(r(),m(i,{key:0,icon:"fa-solid fa-arrow-up-right-from-square",to:{name:"RecipeViewPage",params:{id:f.value.id}}},null,8,["to"])):v("",!0)]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["loading"]),o(W,null,{default:t(()=>[o(E,null,{default:t(()=>[o(se,{class:"mt-2"},{default:t(()=>[n("thead",null,[n("tr",null,[n("th",null,p(a.$t("Food")),1),n("th",null,[o(i,{variant:"outlined",block:"",href:"https://fdc.nal.usda.gov/food-search",target:"_blank","prepend-icon":"$search",stacked:""},{default:t(()=>[k(p(a.$t("FDC_ID")),1)]),_:1})]),n("th",null,[o(i,{variant:"outlined",onClick:e[2]||(e[2]=l=>$.value=!0),block:"",stacked:""},{default:t(()=>[k(p(a.$t("Amount")),1)]),_:1})]),n("th",null,[o(i,{variant:"outlined",onClick:e[3]||(e[3]=l=>$.value=!0),block:"",stacked:""},{default:t(()=>[k(p(a.$t("Properties_Food_Unit")),1)]),_:1})]),(r(!0),V(_,null,q(w.value,l=>(r(),V("th",{key:l.id},[o(i,{stacked:"",block:"",variant:"outlined",class:"mt-2 mb-2"},{default:t(()=>[n("span",null,p(l.name),1),n("span",null,[o(j,{color:"info",size:"x-small"},{default:t(()=>[o(A,{icon:"fa-solid fa-arrow-down-1-9"}),k(p(l.order),1)]),_:2},1024),l.fdcId?(r(),m(j,{key:0,color:"success",size:"x-small"},{default:t(()=>[o(A,{icon:"fa-solid fa-check"}),e[17]||(e[17]=k("FDC"))]),_:1,__:[17]})):v("",!0),l.fdcId?v("",!0):(r(),m(j,{key:1,color:"error",size:"x-small"},{default:t(()=>[o(A,{icon:"fa-solid fa-times"}),e[18]||(e[18]=k("FDC"))]),_:1,__:[18]}))]),o(J,{model:"PropertyType",item:l},null,8,["item"])]),_:2},1024)]))),128)),n("th",null,[o(i,{color:"create",class:"mt-1 float-right"},{default:t(()=>[o(A,{icon:"$create"}),o(J,{model:"PropertyType",onCreate:e[4]||(e[4]=l=>w.value.push(l))})]),_:1})])])]),n("tbody",null,[(r(!0),V(_,null,q(c.value.entries(),([l,d])=>(r(),V("tr",null,[n("td",null,p(d.food.name),1),n("td",null,[o(C,{type:"number",modelValue:d.food.fdcId,"onUpdate:modelValue":u=>d.food.fdcId=u,density:"compact","hide-details":"",onChange:u=>y(d),style:{"min-width":"180px"},loading:d.loading},{"append-inner":t(()=>[d.food.fdcId==null?(r(),m(i,{key:0,icon:"$search",size:"small",density:"compact",variant:"plain",onClick:u=>{x.value=d,M.value=!0}},null,8,["onClick"])):v("",!0),d.food.fdcId?(r(),m(i,{key:1,onClick:u=>Q(d),icon:"fa-solid fa-arrows-rotate",size:"small",density:"compact",variant:"plain"},null,8,["onClick"])):v("",!0),d.food.fdcId?(r(),m(i,{key:2,onClick:u=>fe(ce)(d.food.fdcId),href:`https://fdc.nal.usda.gov/food-details/${d.food.fdcId}/nutrients`,target:"_blank",icon:"fa-solid fa-arrow-up-right-from-square",size:"small",variant:"plain"},null,8,["onClick","href"])):v("",!0)]),_:2},1032,["modelValue","onUpdate:modelValue","onChange","loading"])]),n("td",null,[o(X,{modelValue:d.food.propertiesFoodAmount,"onUpdate:modelValue":u=>d.food.propertiesFoodAmount=u,density:"compact","hide-details":"",onChange:u=>y(d),loading:d.loading,style:{"min-width":"100px"},"control-variant":"hidden",precision:2},null,8,["modelValue","onUpdate:modelValue","onChange","loading"])]),n("td",null,[o(L,{model:"Unit",density:"compact",modelValue:d.food.propertiesFoodUnit,"onUpdate:modelValue":[u=>d.food.propertiesFoodUnit=u,u=>y(d)],"hide-details":"",loading:d.loading},null,8,["modelValue","onUpdate:modelValue","loading"])]),(r(!0),V(_,null,q(d.food.properties,u=>(r(),V("td",{key:`${d.food.id}_${u.propertyType.id}`},[u.propertyAmount!=null?(r(),m(X,{key:0,modelValue:u.propertyAmount,"onUpdate:modelValue":P=>u.propertyAmount=P,density:"compact","hide-details":"",onChange:P=>y(d),precision:2,loading:d.loading,"onClick:clear":P=>Z(u,d),style:{"min-width":"120px"},"control-variant":"hidden",clearable:""},null,8,["modelValue","onUpdate:modelValue","onChange","loading","onClick:clear"])):v("",!0),u.propertyAmount==null?(r(),m(i,{key:1,variant:"outlined",color:"create",block:"",onClick:P=>{u.propertyAmount=0,y(d)}},{default:t(()=>[o(A,{icon:"$create"})]),_:2},1032,["onClick"])):v("",!0)]))),128)),e[19]||(e[19]=n("td",null,null,-1))]))),256))]),o(ie,{style:{"margin-top":"120px"}})]),_:1}),o(S,{"prepend-icon":"fa-solid fa-calculator",title:a.$t("Calculator")},{default:t(()=>[o(B,null,{default:t(()=>[o(W,{dense:""},{default:t(()=>[o(E,{cols:"3"},{default:t(()=>[o(C,{type:"number",modelValue:I.value,"onUpdate:modelValue":e[5]||(e[5]=l=>I.value=l)},{append:t(()=>e[20]||(e[20]=[n("i",{class:"fa-solid fa-divide"},null,-1)])),_:1},8,["modelValue"])]),_:1}),o(E,{cols:"3"},{default:t(()=>[o(C,{type:"number",modelValue:D.value,"onUpdate:modelValue":e[6]||(e[6]=l=>D.value=l)},{append:t(()=>e[21]||(e[21]=[n("i",{class:"fa-solid fa-equals"},null,-1)])),_:1},8,["modelValue"])]),_:1}),o(E,{cols:"3"},{default:t(()=>[o(C,{type:"number",modelValue:g.value,"onUpdate:modelValue":e[7]||(e[7]=l=>g.value=l)},{append:t(()=>e[22]||(e[22]=[n("i",{class:"fa-solid fa-divide"},null,-1)])),"append-inner":t(()=>[o(me,{variant:"plain","copy-value":g.value},null,8,["copy-value"])]),_:1},8,["modelValue"])]),_:1}),o(E,{cols:"3"},{default:t(()=>[o(C,{type:"number",modelValue:N.value,"onUpdate:modelValue":e[8]||(e[8]=l=>N.value=l)},null,8,["modelValue"])]),_:1})]),_:1})]),_:1})]),_:1},8,["title"])]),_:1})]),_:1}),o(ve,{modelValue:M.value,"onUpdate:modelValue":e[9]||(e[9]=l=>M.value=l),onSelected:e[10]||(e[10]=l=>{x.value.food.fdcId=l,Q(x.value)})},null,8,["modelValue"])]),_:1}),o(ne,{modelValue:$.value,"onUpdate:modelValue":e[16]||(e[16]=l=>$.value=l),"max-width":"600"},{default:t(()=>[o(S,null,{default:t(()=>[o(pe,{modelValue:$.value,"onUpdate:modelValue":e[11]||(e[11]=l=>$.value=l),title:a.$t("Update")},null,8,["modelValue","title"]),o(B,null,{default:t(()=>[n("p",null,p(a.$t("Update_Existing_Data")),1),o(L,{model:"Unit",label:a.$t("Properties_Food_Unit"),modelValue:T.value,"onUpdate:modelValue":e[13]||(e[13]=l=>T.value=l)},{append:t(()=>[o(i,{onClick:e[12]||(e[12]=l=>ee(T.value)),icon:"$save",color:"save",disabled:T.value==null},null,8,["disabled"])]),_:1},8,["label","modelValue"]),o(C,{type:"number",label:a.$t("Properties_Food_Amount"),modelValue:h.value,"onUpdate:modelValue":e[15]||(e[15]=l=>h.value=l)},{append:t(()=>[o(i,{onClick:e[14]||(e[14]=l=>le(h.value)),icon:"$save",color:"save"})]),_:1},8,["label","modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"])],64))}});export{Fe as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/PropertyEditorPage-DFfeym2k.dfc820e48390.js.gz b/config/tandoor/staticfiles/vue3/assets/PropertyEditorPage-DFfeym2k.dfc820e48390.js.gz
deleted file mode 100644
index d216eb4d..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/PropertyEditorPage-DFfeym2k.dfc820e48390.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/PropertyEditorPage-DFfeym2k.js b/config/tandoor/staticfiles/vue3/assets/PropertyEditorPage-DFfeym2k.js
deleted file mode 100644
index f84f0709..00000000
--- a/config/tandoor/staticfiles/vue3/assets/PropertyEditorPage-DFfeym2k.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as oe,b8 as ae,c as te,r as s,o as de,A as U,Q as F,R as b,b as V,g as o,w as t,K as ue,aN as ne,F as _,M as S,N as re,j as k,t as p,O as B,ag as L,h as m,e as v,z as i,k as W,V as E,aj as se,i as n,p as q,G as A,_ as J,W as ie,S as C,aO as pe,f as r,ai as j,l as fe,af as X}from"./main-BhFWIRV_.js";import{_ as me}from"./BtnCopy.vue_vue_type_script_setup_true_lang-B_1A58TG.js";import{_ as ve}from"./FdcSearchDialog.vue_vue_type_script_setup_true_lang-C-bx54-t.js";import{o as ce}from"./fdc-CkSQIsAv.js";import"./VTooltip-CP00KBBq.js";const Fe=oe({__name:"PropertyEditorPage",setup(ye){const R=ae("history",{}),g=te(()=>(I.value/D.value*N.value).toFixed(2)),$=s(!1),h=s(100),T=s(void 0),I=s(250),D=s(500),N=s(100),M=s(!1),x=s(void 0),f=s(),w=s([]),c=s(new Map),z=s(!1),O=s(!1);de(()=>{Y(),R.recipe&&typeof R.recipe=="string"&&!isNaN(parseInt(R.recipe))&&H(parseInt(R.recipe))});function H(a){let e=new U;z.value=!0,e.apiRecipeRetrieve({id:a}).then(l=>{f.value=l,G()}).catch(l=>{F().addError(b.FETCH_ERROR,l)}).finally(()=>{z.value=!1})}function Y(){let a=new U;O.value=!0,a.apiPropertyTypeList().then(e=>{w.value=e.results,G()}).catch(e=>{F().addError(b.FETCH_ERROR,e)}).finally(()=>{O.value=!1})}function G(){c.value=new Map,f.value!=null&&f.value.steps.forEach(a=>{a.ingredients.forEach(e=>{if(e.food&&!c.value.has(e.food.id)){let l=K(e);l.loading=!1,c.value.set(l.food.id,l)}})})}function K(a){let e=new Map;return a.food.properties.forEach(l=>{e.set(l.propertyType.id,l)}),a.food.properties=[],w.value.forEach(l=>{e.has(l.id)?a.food.properties.push(e.get(l.id)):a.food.properties.push({propertyType:l,propertyAmount:null})}),a}function Z(a,e){let l=new U;a.id?(e.loading=!0,l.apiPropertyDestroy({id:a.id}).then(d=>{a.propertyAmount=null}).catch(d=>{F().addError(b.DELETE_ERROR,d)}).finally(()=>{e.loading=!1})):a.propertyAmount=null}function y(a){let e=new U;a.loading=!0,e.apiFoodPartialUpdate({id:a.food.id,patchedFood:a.food}).then(l=>{}).catch(l=>{F().addError(b.UPDATE_ERROR,l)}).finally(()=>{a.loading=!1})}function Q(a){let e=new U;a.food.fdcId&&(a.loading=!0,e.apiFoodFdcCreate({id:a.food.id,food:a.food}).then(l=>{a.food=l,c.value.set(l.id,K(a))}).catch(l=>{F().addError(b.UPDATE_ERROR,l)}).finally(()=>{a.loading=!1}))}function ee(a){c.value.forEach(e=>{e.food.propertiesFoodUnit=a,y(e)})}function le(a){c.value.forEach(e=>{e.food.propertiesFoodAmount=a,y(e)})}return(a,e)=>(r(),V(_,null,[o(ue,null,{default:t(()=>[o(S,{loading:z.value||O.value},{default:t(()=>[o(re,null,{default:t(()=>[k(p(a.$t("Property_Editor")),1)]),_:1}),o(B,null,{default:t(()=>[o(L,{"append-to-body":"",model:"Recipe",modelValue:f.value,"onUpdate:modelValue":[e[0]||(e[0]=l=>f.value=l),e[1]||(e[1]=l=>H(f.value.id))]},{append:t(()=>[f.value!=null?(r(),m(i,{key:0,icon:"fa-solid fa-arrow-up-right-from-square",to:{name:"RecipeViewPage",params:{id:f.value.id}}},null,8,["to"])):v("",!0)]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["loading"]),o(W,null,{default:t(()=>[o(E,null,{default:t(()=>[o(se,{class:"mt-2"},{default:t(()=>[n("thead",null,[n("tr",null,[n("th",null,p(a.$t("Food")),1),n("th",null,[o(i,{variant:"outlined",block:"",href:"https://fdc.nal.usda.gov/food-search",target:"_blank","prepend-icon":"$search",stacked:""},{default:t(()=>[k(p(a.$t("FDC_ID")),1)]),_:1})]),n("th",null,[o(i,{variant:"outlined",onClick:e[2]||(e[2]=l=>$.value=!0),block:"",stacked:""},{default:t(()=>[k(p(a.$t("Amount")),1)]),_:1})]),n("th",null,[o(i,{variant:"outlined",onClick:e[3]||(e[3]=l=>$.value=!0),block:"",stacked:""},{default:t(()=>[k(p(a.$t("Properties_Food_Unit")),1)]),_:1})]),(r(!0),V(_,null,q(w.value,l=>(r(),V("th",{key:l.id},[o(i,{stacked:"",block:"",variant:"outlined",class:"mt-2 mb-2"},{default:t(()=>[n("span",null,p(l.name),1),n("span",null,[o(j,{color:"info",size:"x-small"},{default:t(()=>[o(A,{icon:"fa-solid fa-arrow-down-1-9"}),k(p(l.order),1)]),_:2},1024),l.fdcId?(r(),m(j,{key:0,color:"success",size:"x-small"},{default:t(()=>[o(A,{icon:"fa-solid fa-check"}),e[17]||(e[17]=k("FDC"))]),_:1,__:[17]})):v("",!0),l.fdcId?v("",!0):(r(),m(j,{key:1,color:"error",size:"x-small"},{default:t(()=>[o(A,{icon:"fa-solid fa-times"}),e[18]||(e[18]=k("FDC"))]),_:1,__:[18]}))]),o(J,{model:"PropertyType",item:l},null,8,["item"])]),_:2},1024)]))),128)),n("th",null,[o(i,{color:"create",class:"mt-1 float-right"},{default:t(()=>[o(A,{icon:"$create"}),o(J,{model:"PropertyType",onCreate:e[4]||(e[4]=l=>w.value.push(l))})]),_:1})])])]),n("tbody",null,[(r(!0),V(_,null,q(c.value.entries(),([l,d])=>(r(),V("tr",null,[n("td",null,p(d.food.name),1),n("td",null,[o(C,{type:"number",modelValue:d.food.fdcId,"onUpdate:modelValue":u=>d.food.fdcId=u,density:"compact","hide-details":"",onChange:u=>y(d),style:{"min-width":"180px"},loading:d.loading},{"append-inner":t(()=>[d.food.fdcId==null?(r(),m(i,{key:0,icon:"$search",size:"small",density:"compact",variant:"plain",onClick:u=>{x.value=d,M.value=!0}},null,8,["onClick"])):v("",!0),d.food.fdcId?(r(),m(i,{key:1,onClick:u=>Q(d),icon:"fa-solid fa-arrows-rotate",size:"small",density:"compact",variant:"plain"},null,8,["onClick"])):v("",!0),d.food.fdcId?(r(),m(i,{key:2,onClick:u=>fe(ce)(d.food.fdcId),href:`https://fdc.nal.usda.gov/food-details/${d.food.fdcId}/nutrients`,target:"_blank",icon:"fa-solid fa-arrow-up-right-from-square",size:"small",variant:"plain"},null,8,["onClick","href"])):v("",!0)]),_:2},1032,["modelValue","onUpdate:modelValue","onChange","loading"])]),n("td",null,[o(X,{modelValue:d.food.propertiesFoodAmount,"onUpdate:modelValue":u=>d.food.propertiesFoodAmount=u,density:"compact","hide-details":"",onChange:u=>y(d),loading:d.loading,style:{"min-width":"100px"},"control-variant":"hidden",precision:2},null,8,["modelValue","onUpdate:modelValue","onChange","loading"])]),n("td",null,[o(L,{model:"Unit",density:"compact",modelValue:d.food.propertiesFoodUnit,"onUpdate:modelValue":[u=>d.food.propertiesFoodUnit=u,u=>y(d)],"hide-details":"",loading:d.loading},null,8,["modelValue","onUpdate:modelValue","loading"])]),(r(!0),V(_,null,q(d.food.properties,u=>(r(),V("td",{key:`${d.food.id}_${u.propertyType.id}`},[u.propertyAmount!=null?(r(),m(X,{key:0,modelValue:u.propertyAmount,"onUpdate:modelValue":P=>u.propertyAmount=P,density:"compact","hide-details":"",onChange:P=>y(d),precision:2,loading:d.loading,"onClick:clear":P=>Z(u,d),style:{"min-width":"120px"},"control-variant":"hidden",clearable:""},null,8,["modelValue","onUpdate:modelValue","onChange","loading","onClick:clear"])):v("",!0),u.propertyAmount==null?(r(),m(i,{key:1,variant:"outlined",color:"create",block:"",onClick:P=>{u.propertyAmount=0,y(d)}},{default:t(()=>[o(A,{icon:"$create"})]),_:2},1032,["onClick"])):v("",!0)]))),128)),e[19]||(e[19]=n("td",null,null,-1))]))),256))]),o(ie,{style:{"margin-top":"120px"}})]),_:1}),o(S,{"prepend-icon":"fa-solid fa-calculator",title:a.$t("Calculator")},{default:t(()=>[o(B,null,{default:t(()=>[o(W,{dense:""},{default:t(()=>[o(E,{cols:"3"},{default:t(()=>[o(C,{type:"number",modelValue:I.value,"onUpdate:modelValue":e[5]||(e[5]=l=>I.value=l)},{append:t(()=>e[20]||(e[20]=[n("i",{class:"fa-solid fa-divide"},null,-1)])),_:1},8,["modelValue"])]),_:1}),o(E,{cols:"3"},{default:t(()=>[o(C,{type:"number",modelValue:D.value,"onUpdate:modelValue":e[6]||(e[6]=l=>D.value=l)},{append:t(()=>e[21]||(e[21]=[n("i",{class:"fa-solid fa-equals"},null,-1)])),_:1},8,["modelValue"])]),_:1}),o(E,{cols:"3"},{default:t(()=>[o(C,{type:"number",modelValue:g.value,"onUpdate:modelValue":e[7]||(e[7]=l=>g.value=l)},{append:t(()=>e[22]||(e[22]=[n("i",{class:"fa-solid fa-divide"},null,-1)])),"append-inner":t(()=>[o(me,{variant:"plain","copy-value":g.value},null,8,["copy-value"])]),_:1},8,["modelValue"])]),_:1}),o(E,{cols:"3"},{default:t(()=>[o(C,{type:"number",modelValue:N.value,"onUpdate:modelValue":e[8]||(e[8]=l=>N.value=l)},null,8,["modelValue"])]),_:1})]),_:1})]),_:1})]),_:1},8,["title"])]),_:1})]),_:1}),o(ve,{modelValue:M.value,"onUpdate:modelValue":e[9]||(e[9]=l=>M.value=l),onSelected:e[10]||(e[10]=l=>{x.value.food.fdcId=l,Q(x.value)})},null,8,["modelValue"])]),_:1}),o(ne,{modelValue:$.value,"onUpdate:modelValue":e[16]||(e[16]=l=>$.value=l),"max-width":"600"},{default:t(()=>[o(S,null,{default:t(()=>[o(pe,{modelValue:$.value,"onUpdate:modelValue":e[11]||(e[11]=l=>$.value=l),title:a.$t("Update")},null,8,["modelValue","title"]),o(B,null,{default:t(()=>[n("p",null,p(a.$t("Update_Existing_Data")),1),o(L,{model:"Unit",label:a.$t("Properties_Food_Unit"),modelValue:T.value,"onUpdate:modelValue":e[13]||(e[13]=l=>T.value=l)},{append:t(()=>[o(i,{onClick:e[12]||(e[12]=l=>ee(T.value)),icon:"$save",color:"save",disabled:T.value==null},null,8,["disabled"])]),_:1},8,["label","modelValue"]),o(C,{type:"number",label:a.$t("Properties_Food_Amount"),modelValue:h.value,"onUpdate:modelValue":e[15]||(e[15]=l=>h.value=l)},{append:t(()=>[o(i,{onClick:e[14]||(e[14]=l=>le(h.value)),icon:"$save",color:"save"})]),_:1},8,["label","modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"])],64))}});export{Fe as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/PropertyEditorPage-DFfeym2k.js.gz b/config/tandoor/staticfiles/vue3/assets/PropertyEditorPage-DFfeym2k.js.gz
deleted file mode 100644
index d216eb4d..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/PropertyEditorPage-DFfeym2k.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/PropertyTypeEditor-g4a-YJm5.413d02b5d234.js b/config/tandoor/staticfiles/vue3/assets/PropertyTypeEditor-g4a-YJm5.413d02b5d234.js
deleted file mode 100644
index 3888c7bc..00000000
--- a/config/tandoor/staticfiles/vue3/assets/PropertyTypeEditor-g4a-YJm5.413d02b5d234.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as S,aM as j,o as v,h as C,f as I,w as n,g as d,O as U,ac as T,l as e,S as s,af as F}from"./main-BhFWIRV_.js";import{u as E,_ as N}from"./useModelEditorFunctions-Du2kfr61.js";import{F as P}from"./fdc-CkSQIsAv.js";import{V as c}from"./VTextarea-Dyu7dPGe.js";import{V as h}from"./VAutocomplete-b809Bykv.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";const Y=S({__name:"PropertyTypeEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(m,{emit:V}){const i=m,u=V,{setupState:b,deleteObject:g,saveObject:D,isUpdate:$,editingObjName:y,loading:r,editingObj:l,editingObjChanged:p,modelClass:O}=E("PropertyType",u);j([()=>i.item,()=>i.itemId],()=>{f()}),v(()=>{f()});function f(){b(i.item,i.itemId,{itemDefaults:i.itemDefaults})}return(o,t)=>(I(),C(N,{loading:e(r),dialog:m.dialog,onSave:e(D),onDelete:e(g),onClose:t[6]||(t[6]=a=>{u("close"),p.value=!1}),"is-update":e($)(),"is-changed":e(p),"model-class":e(O),"object-name":e(y)(),"editing-object":e(l)},{default:n(()=>[d(U,null,{default:n(()=>[d(T,{disabled:e(r)},{default:n(()=>[d(s,{label:o.$t("Name"),modelValue:e(l).name,"onUpdate:modelValue":t[0]||(t[0]=a=>e(l).name=a)},null,8,["label","modelValue"]),d(c,{label:o.$t("Description"),modelValue:e(l).description,"onUpdate:modelValue":t[1]||(t[1]=a=>e(l).description=a)},null,8,["label","modelValue"]),d(s,{label:o.$t("Unit"),modelValue:e(l).unit,"onUpdate:modelValue":t[2]||(t[2]=a=>e(l).unit=a)},null,8,["label","modelValue"]),d(h,{label:o.$t("FDC_ID"),hint:o.$t("property_type_fdc_hint"),modelValue:e(l).fdcId,"onUpdate:modelValue":t[3]||(t[3]=a=>e(l).fdcId=a),items:e(P),"item-title":"text"},null,8,["label","hint","modelValue","items"]),d(F,{label:o.$t("Order"),step:10,modelValue:e(l).order,"onUpdate:modelValue":t[4]||(t[4]=a=>e(l).order=a),hint:o.$t("OrderInformation"),"control-variant":"stacked"},null,8,["label","modelValue","hint"]),d(s,{label:o.$t("Open_Data_Slug"),hint:o.$t("open_data_help_text"),"persistent-hint":"",modelValue:e(l).openDataSlug,"onUpdate:modelValue":t[5]||(t[5]=a=>e(l).openDataSlug=a),disabled:""},null,8,["label","hint","modelValue"])]),_:1},8,["disabled"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{Y as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/PropertyTypeEditor-g4a-YJm5.413d02b5d234.js.gz b/config/tandoor/staticfiles/vue3/assets/PropertyTypeEditor-g4a-YJm5.413d02b5d234.js.gz
deleted file mode 100644
index 76565417..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/PropertyTypeEditor-g4a-YJm5.413d02b5d234.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/PropertyTypeEditor-g4a-YJm5.js b/config/tandoor/staticfiles/vue3/assets/PropertyTypeEditor-g4a-YJm5.js
deleted file mode 100644
index 3888c7bc..00000000
--- a/config/tandoor/staticfiles/vue3/assets/PropertyTypeEditor-g4a-YJm5.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as S,aM as j,o as v,h as C,f as I,w as n,g as d,O as U,ac as T,l as e,S as s,af as F}from"./main-BhFWIRV_.js";import{u as E,_ as N}from"./useModelEditorFunctions-Du2kfr61.js";import{F as P}from"./fdc-CkSQIsAv.js";import{V as c}from"./VTextarea-Dyu7dPGe.js";import{V as h}from"./VAutocomplete-b809Bykv.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";const Y=S({__name:"PropertyTypeEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(m,{emit:V}){const i=m,u=V,{setupState:b,deleteObject:g,saveObject:D,isUpdate:$,editingObjName:y,loading:r,editingObj:l,editingObjChanged:p,modelClass:O}=E("PropertyType",u);j([()=>i.item,()=>i.itemId],()=>{f()}),v(()=>{f()});function f(){b(i.item,i.itemId,{itemDefaults:i.itemDefaults})}return(o,t)=>(I(),C(N,{loading:e(r),dialog:m.dialog,onSave:e(D),onDelete:e(g),onClose:t[6]||(t[6]=a=>{u("close"),p.value=!1}),"is-update":e($)(),"is-changed":e(p),"model-class":e(O),"object-name":e(y)(),"editing-object":e(l)},{default:n(()=>[d(U,null,{default:n(()=>[d(T,{disabled:e(r)},{default:n(()=>[d(s,{label:o.$t("Name"),modelValue:e(l).name,"onUpdate:modelValue":t[0]||(t[0]=a=>e(l).name=a)},null,8,["label","modelValue"]),d(c,{label:o.$t("Description"),modelValue:e(l).description,"onUpdate:modelValue":t[1]||(t[1]=a=>e(l).description=a)},null,8,["label","modelValue"]),d(s,{label:o.$t("Unit"),modelValue:e(l).unit,"onUpdate:modelValue":t[2]||(t[2]=a=>e(l).unit=a)},null,8,["label","modelValue"]),d(h,{label:o.$t("FDC_ID"),hint:o.$t("property_type_fdc_hint"),modelValue:e(l).fdcId,"onUpdate:modelValue":t[3]||(t[3]=a=>e(l).fdcId=a),items:e(P),"item-title":"text"},null,8,["label","hint","modelValue","items"]),d(F,{label:o.$t("Order"),step:10,modelValue:e(l).order,"onUpdate:modelValue":t[4]||(t[4]=a=>e(l).order=a),hint:o.$t("OrderInformation"),"control-variant":"stacked"},null,8,["label","modelValue","hint"]),d(s,{label:o.$t("Open_Data_Slug"),hint:o.$t("open_data_help_text"),"persistent-hint":"",modelValue:e(l).openDataSlug,"onUpdate:modelValue":t[5]||(t[5]=a=>e(l).openDataSlug=a),disabled:""},null,8,["label","hint","modelValue"])]),_:1},8,["disabled"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{Y as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/PropertyTypeEditor-g4a-YJm5.js.gz b/config/tandoor/staticfiles/vue3/assets/PropertyTypeEditor-g4a-YJm5.js.gz
deleted file mode 100644
index 76565417..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/PropertyTypeEditor-g4a-YJm5.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeBookEditor-Bfg_IQG9.570c6c168e8f.js b/config/tandoor/staticfiles/vue3/assets/RecipeBookEditor-Bfg_IQG9.570c6c168e8f.js
deleted file mode 100644
index 7d5e1dc1..00000000
--- a/config/tandoor/staticfiles/vue3/assets/RecipeBookEditor-Bfg_IQG9.570c6c168e8f.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as q,aM as x,u as z,r as m,o as G,h as H,f as Q,w as d,g as t,O as B,l,j as S,t as w,ac as Y,S as _,ag as c,af as J,z as $,G as K,A as g,Q as p,R as v,Y as X,ad as Z,L as ee}from"./main-BhFWIRV_.js";import{u as ae,_ as le}from"./useModelEditorFunctions-Du2kfr61.js";import{a as te,V as I,b as oe,c as U}from"./VTabs-BQFRhgOd.js";import{V as ie}from"./VTextarea-Dyu7dPGe.js";import{V as de}from"./VDataTableServer-PUUq4Eqa.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";const fe=q({__name:"RecipeBookEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(V,{emit:D}){const u=V,b=D,{setupState:O,deleteObject:j,saveObject:P,isUpdate:E,editingObjName:F,loading:r,editingObj:i,editingObjChanged:k,modelClass:M}=ae("RecipeBook",b);x([()=>u.item,()=>u.itemId],()=>{T()});const{t:N}=z(),f=m("book"),s=m([]),n=m({}),R=m(1),C=m(0),h=[{title:N("Name"),key:"recipeContent.name"},{key:"action",width:"1%",noBreak:!0,align:"end"}];G(()=>{T()});function T(){O(u.item,u.itemId,{newItemFunction:()=>{i.value.shared=[],s.value=[]},existingItemFunction:()=>{s.value=[]},itemDefaults:u.itemDefaults})}function A(){let o=new g;if(Object.keys(n.value).length>0){let a=!1;s.value.forEach(e=>{e.recipe==n.value.id&&(a=!0)}),a?(n.value={},p().addMessage(X.WARNING,$t("WarningRecipeBookEntryDuplicate"),5e3)):o.apiRecipeBookEntryCreate({recipeBookEntry:{book:i.value.id,recipe:n.value.id}}).then(e=>{s.value.push(e),n.value={}}).catch(e=>{p().addError(v.CREATE_ERROR,e)})}}function L(o){new g().apiRecipeBookEntryDestroy({id:o.id}).then(e=>{s.value.splice(s.value.findIndex(y=>y.id==o.id),1),p().addPreparedMessage(Z.DELETE_SUCCESS)}).catch(e=>{p().addError(v.DELETE_ERROR,e)})}function W(o){let a=new g;r.value=!0,window.scrollTo({top:0,behavior:"smooth"}),R.value!=o.page&&(R.value=o.page),ee().deviceSettings.general_tableItemsPerPage=o.itemsPerPage,a.apiRecipeBookEntryList({page:o.page,pageSize:o.itemsPerPage,book:i.value.id}).then(e=>{s.value=e.results,C.value=e.count}).catch(e=>{p().addError(v.FETCH_ERROR,e)}).finally(()=>{r.value=!1})}return(o,a)=>(Q(),H(le,{loading:l(r),dialog:V.dialog,onSave:l(P),onDelete:l(j),onClose:a[9]||(a[9]=e=>{b("close"),k.value=!1}),"is-update":l(E)(),"is-changed":l(k),"model-class":l(M),"object-name":l(F)(),"editing-object":l(i)},{default:d(()=>[t(B,{class:"pa-0"},{default:d(()=>[t(te,{modelValue:f.value,"onUpdate:modelValue":a[0]||(a[0]=e=>f.value=e),disabled:l(r),grow:""},{default:d(()=>[t(I,{value:"book"},{default:d(()=>[S(w(o.$t("Book")),1)]),_:1}),t(I,{value:"recipes",disabled:!l(E)()},{default:d(()=>[S(w(o.$t("Recipes")),1)]),_:1},8,["disabled"])]),_:1},8,["modelValue","disabled"])]),_:1}),t(B,null,{default:d(()=>[t(oe,{modelValue:f.value,"onUpdate:modelValue":a[8]||(a[8]=e=>f.value=e)},{default:d(()=>[t(U,{value:"book"},{default:d(()=>[t(Y,{disabled:l(r)},{default:d(()=>[t(_,{label:o.$t("Name"),modelValue:l(i).name,"onUpdate:modelValue":a[1]||(a[1]=e=>l(i).name=e)},null,8,["label","modelValue"]),t(ie,{label:o.$t("Description"),modelValue:l(i).description,"onUpdate:modelValue":a[2]||(a[2]=e=>l(i).description=e),rows:"3"},null,8,["label","modelValue"]),t(c,{model:"User",modelValue:l(i).shared,"onUpdate:modelValue":a[3]||(a[3]=e=>l(i).shared=e),mode:"tags"},null,8,["modelValue"]),t(c,{model:"CustomFilter",modelValue:l(i).filter,"onUpdate:modelValue":a[4]||(a[4]=e=>l(i).filter=e)},null,8,["modelValue"]),t(J,{label:o.$t("Order"),hint:o.$t("OrderInformation"),modelValue:l(i).order,"onUpdate:modelValue":a[5]||(a[5]=e=>l(i).order=e)},null,8,["label","hint","modelValue"])]),_:1},8,["disabled"])]),_:1}),t(U,{value:"recipes"},{default:d(()=>[t(c,{model:"Recipe",modelValue:n.value,"onUpdate:modelValue":a[7]||(a[7]=e=>n.value=e)},{append:d(()=>[t($,{icon:"",color:"create",onClick:a[6]||(a[6]=e=>A())},{default:d(()=>[t(K,{icon:"$create"})]),_:1})]),_:1},8,["modelValue"]),t(de,{"onUpdate:options":W,items:s.value,headers:h,"items-length":C.value},{"item.action":d(({item:e})=>[t($,{icon:"$delete",color:"delete",onClick:y=>L(e)},null,8,["onClick"])]),_:1},8,["items","items-length"])]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{fe as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeBookEditor-Bfg_IQG9.570c6c168e8f.js.gz b/config/tandoor/staticfiles/vue3/assets/RecipeBookEditor-Bfg_IQG9.570c6c168e8f.js.gz
deleted file mode 100644
index 1537bbdf..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/RecipeBookEditor-Bfg_IQG9.570c6c168e8f.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeBookEditor-Bfg_IQG9.js b/config/tandoor/staticfiles/vue3/assets/RecipeBookEditor-Bfg_IQG9.js
deleted file mode 100644
index 7d5e1dc1..00000000
--- a/config/tandoor/staticfiles/vue3/assets/RecipeBookEditor-Bfg_IQG9.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as q,aM as x,u as z,r as m,o as G,h as H,f as Q,w as d,g as t,O as B,l,j as S,t as w,ac as Y,S as _,ag as c,af as J,z as $,G as K,A as g,Q as p,R as v,Y as X,ad as Z,L as ee}from"./main-BhFWIRV_.js";import{u as ae,_ as le}from"./useModelEditorFunctions-Du2kfr61.js";import{a as te,V as I,b as oe,c as U}from"./VTabs-BQFRhgOd.js";import{V as ie}from"./VTextarea-Dyu7dPGe.js";import{V as de}from"./VDataTableServer-PUUq4Eqa.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";const fe=q({__name:"RecipeBookEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(V,{emit:D}){const u=V,b=D,{setupState:O,deleteObject:j,saveObject:P,isUpdate:E,editingObjName:F,loading:r,editingObj:i,editingObjChanged:k,modelClass:M}=ae("RecipeBook",b);x([()=>u.item,()=>u.itemId],()=>{T()});const{t:N}=z(),f=m("book"),s=m([]),n=m({}),R=m(1),C=m(0),h=[{title:N("Name"),key:"recipeContent.name"},{key:"action",width:"1%",noBreak:!0,align:"end"}];G(()=>{T()});function T(){O(u.item,u.itemId,{newItemFunction:()=>{i.value.shared=[],s.value=[]},existingItemFunction:()=>{s.value=[]},itemDefaults:u.itemDefaults})}function A(){let o=new g;if(Object.keys(n.value).length>0){let a=!1;s.value.forEach(e=>{e.recipe==n.value.id&&(a=!0)}),a?(n.value={},p().addMessage(X.WARNING,$t("WarningRecipeBookEntryDuplicate"),5e3)):o.apiRecipeBookEntryCreate({recipeBookEntry:{book:i.value.id,recipe:n.value.id}}).then(e=>{s.value.push(e),n.value={}}).catch(e=>{p().addError(v.CREATE_ERROR,e)})}}function L(o){new g().apiRecipeBookEntryDestroy({id:o.id}).then(e=>{s.value.splice(s.value.findIndex(y=>y.id==o.id),1),p().addPreparedMessage(Z.DELETE_SUCCESS)}).catch(e=>{p().addError(v.DELETE_ERROR,e)})}function W(o){let a=new g;r.value=!0,window.scrollTo({top:0,behavior:"smooth"}),R.value!=o.page&&(R.value=o.page),ee().deviceSettings.general_tableItemsPerPage=o.itemsPerPage,a.apiRecipeBookEntryList({page:o.page,pageSize:o.itemsPerPage,book:i.value.id}).then(e=>{s.value=e.results,C.value=e.count}).catch(e=>{p().addError(v.FETCH_ERROR,e)}).finally(()=>{r.value=!1})}return(o,a)=>(Q(),H(le,{loading:l(r),dialog:V.dialog,onSave:l(P),onDelete:l(j),onClose:a[9]||(a[9]=e=>{b("close"),k.value=!1}),"is-update":l(E)(),"is-changed":l(k),"model-class":l(M),"object-name":l(F)(),"editing-object":l(i)},{default:d(()=>[t(B,{class:"pa-0"},{default:d(()=>[t(te,{modelValue:f.value,"onUpdate:modelValue":a[0]||(a[0]=e=>f.value=e),disabled:l(r),grow:""},{default:d(()=>[t(I,{value:"book"},{default:d(()=>[S(w(o.$t("Book")),1)]),_:1}),t(I,{value:"recipes",disabled:!l(E)()},{default:d(()=>[S(w(o.$t("Recipes")),1)]),_:1},8,["disabled"])]),_:1},8,["modelValue","disabled"])]),_:1}),t(B,null,{default:d(()=>[t(oe,{modelValue:f.value,"onUpdate:modelValue":a[8]||(a[8]=e=>f.value=e)},{default:d(()=>[t(U,{value:"book"},{default:d(()=>[t(Y,{disabled:l(r)},{default:d(()=>[t(_,{label:o.$t("Name"),modelValue:l(i).name,"onUpdate:modelValue":a[1]||(a[1]=e=>l(i).name=e)},null,8,["label","modelValue"]),t(ie,{label:o.$t("Description"),modelValue:l(i).description,"onUpdate:modelValue":a[2]||(a[2]=e=>l(i).description=e),rows:"3"},null,8,["label","modelValue"]),t(c,{model:"User",modelValue:l(i).shared,"onUpdate:modelValue":a[3]||(a[3]=e=>l(i).shared=e),mode:"tags"},null,8,["modelValue"]),t(c,{model:"CustomFilter",modelValue:l(i).filter,"onUpdate:modelValue":a[4]||(a[4]=e=>l(i).filter=e)},null,8,["modelValue"]),t(J,{label:o.$t("Order"),hint:o.$t("OrderInformation"),modelValue:l(i).order,"onUpdate:modelValue":a[5]||(a[5]=e=>l(i).order=e)},null,8,["label","hint","modelValue"])]),_:1},8,["disabled"])]),_:1}),t(U,{value:"recipes"},{default:d(()=>[t(c,{model:"Recipe",modelValue:n.value,"onUpdate:modelValue":a[7]||(a[7]=e=>n.value=e)},{append:d(()=>[t($,{icon:"",color:"create",onClick:a[6]||(a[6]=e=>A())},{default:d(()=>[t(K,{icon:"$create"})]),_:1})]),_:1},8,["modelValue"]),t(de,{"onUpdate:options":W,items:s.value,headers:h,"items-length":C.value},{"item.action":d(({item:e})=>[t($,{icon:"$delete",color:"delete",onClick:y=>L(e)},null,8,["onClick"])]),_:1},8,["items","items-length"])]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{fe as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeBookEditor-Bfg_IQG9.js.gz b/config/tandoor/staticfiles/vue3/assets/RecipeBookEditor-Bfg_IQG9.js.gz
deleted file mode 100644
index 1537bbdf..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/RecipeBookEditor-Bfg_IQG9.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeCard-ZQiVryVZ.84fcefdcfa17.js b/config/tandoor/staticfiles/vue3/assets/RecipeCard-ZQiVryVZ.84fcefdcfa17.js
deleted file mode 100644
index 0c152e25..00000000
--- a/config/tandoor/staticfiles/vue3/assets/RecipeCard-ZQiVryVZ.84fcefdcfa17.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as y,s as k,a9 as w,b as v,h as i,f as r,F as V,g as a,i as l,e as s,w as t,b6 as x,bL as u,t as c,ai as d,j as f,M as b,b9 as C,J as T,N as B,O as R,P as q}from"./main-BhFWIRV_.js";import{_ as $}from"./KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.js";import{_ as z,a as N}from"./PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.js";import{V as _}from"./AddToShoppingDialog.vue_vue_type_script_setup_true_lang-ByrmCw9F.js";const S={class:"ml-3"},P={class:"d-flex"},M={class:"font-weight-bold mt-2"},D={class:"mt-1"},E=y({__name:"RecipeCard",props:{recipe:{type:{},required:!0},loading:{type:Boolean,required:!1},showKeywords:{type:Boolean,default:!0,required:!1},show_description:{type:Boolean,required:!1},height:{type:String,required:!1,default:"15vh"},linkTarget:{type:String,required:!1,default:""},showMenu:{type:Boolean,default:!0,required:!1}},setup(o){const e=o,p=k();function g(){if(e.linkTarget!=""){const n=p.resolve({name:"RecipeViewPage",params:{id:e.recipe.id}});window.open(n.href,e.linkTarget)}else p.push({name:"RecipeViewPage",params:{id:e.recipe.id}})}return(n,m)=>{const h=w("router-link");return e.loading?(r(),i(b,{key:1,style:u({height:e.height})},{default:t(()=>[a(C,{src:T,cover:"",height:"60%"}),a(B,null,{default:t(()=>[a(_,{type:"heading"})]),_:1}),a(R,null,{default:t(()=>[a(_,{type:"subtitle"})]),_:1})]),_:1},8,["style"])):(r(),v(V,{key:0},[a(h,{to:{name:"RecipeViewPage",params:{id:e.recipe.id}},target:o.linkTarget},{default:t(()=>[a(x,{style:u({height:e.height}),recipe:e.recipe,rounded:"lg",class:"mr-3 ml-3"},null,8,["style","recipe"])]),_:1},8,["to","target"]),l("div",S,[l("div",P,[l("div",{class:"flex-grow-1 cursor-pointer",onClick:m[0]||(m[0]=F=>g())},[l("p",M,c(e.recipe.name),1)]),l("div",D,[e.showMenu?(r(),i(z,{key:0,recipe:e.recipe,size:"small"},null,8,["recipe"])):s("",!0)])]),e.showKeywords?(r(),i($,{key:0,variant:"outlined",keywords:e.recipe.keywords,"max-keywords":3},{prepend:t(()=>[o.recipe._private?(r(),i(d,{key:0,class:"mb-1 me-1",size:"x-small",label:"",variant:"outlined"},{default:t(()=>[a(N,{"show-text":!1})]),_:1})):s("",!0),e.recipe.internal==!1?(r(),i(d,{key:1,class:"mb-1 me-1",size:"x-small",label:"",variant:"outlined",color:"info"},{default:t(()=>[f(c(n.$t("External")),1)]),_:1})):s("",!0),e.recipe.workingTime!=null&&e.recipe.workingTime>0?(r(),i(d,{key:2,class:"mb-1 me-1",size:"x-small","prepend-icon":"far fa-clock",label:"",variant:"outlined"},{default:t(()=>[f(c(o.recipe.workingTime+o.recipe.waitingTime),1)]),_:1})):s("",!0)]),_:1},8,["keywords"])):s("",!0)]),s("",!0)],64))}}}),J=q(E,[["__scopeId","data-v-31e3ea35"]]);export{J as R};
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeCard-ZQiVryVZ.84fcefdcfa17.js.gz b/config/tandoor/staticfiles/vue3/assets/RecipeCard-ZQiVryVZ.84fcefdcfa17.js.gz
deleted file mode 100644
index e3399801..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/RecipeCard-ZQiVryVZ.84fcefdcfa17.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeCard-ZQiVryVZ.js b/config/tandoor/staticfiles/vue3/assets/RecipeCard-ZQiVryVZ.js
deleted file mode 100644
index 0c152e25..00000000
--- a/config/tandoor/staticfiles/vue3/assets/RecipeCard-ZQiVryVZ.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as y,s as k,a9 as w,b as v,h as i,f as r,F as V,g as a,i as l,e as s,w as t,b6 as x,bL as u,t as c,ai as d,j as f,M as b,b9 as C,J as T,N as B,O as R,P as q}from"./main-BhFWIRV_.js";import{_ as $}from"./KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.js";import{_ as z,a as N}from"./PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.js";import{V as _}from"./AddToShoppingDialog.vue_vue_type_script_setup_true_lang-ByrmCw9F.js";const S={class:"ml-3"},P={class:"d-flex"},M={class:"font-weight-bold mt-2"},D={class:"mt-1"},E=y({__name:"RecipeCard",props:{recipe:{type:{},required:!0},loading:{type:Boolean,required:!1},showKeywords:{type:Boolean,default:!0,required:!1},show_description:{type:Boolean,required:!1},height:{type:String,required:!1,default:"15vh"},linkTarget:{type:String,required:!1,default:""},showMenu:{type:Boolean,default:!0,required:!1}},setup(o){const e=o,p=k();function g(){if(e.linkTarget!=""){const n=p.resolve({name:"RecipeViewPage",params:{id:e.recipe.id}});window.open(n.href,e.linkTarget)}else p.push({name:"RecipeViewPage",params:{id:e.recipe.id}})}return(n,m)=>{const h=w("router-link");return e.loading?(r(),i(b,{key:1,style:u({height:e.height})},{default:t(()=>[a(C,{src:T,cover:"",height:"60%"}),a(B,null,{default:t(()=>[a(_,{type:"heading"})]),_:1}),a(R,null,{default:t(()=>[a(_,{type:"subtitle"})]),_:1})]),_:1},8,["style"])):(r(),v(V,{key:0},[a(h,{to:{name:"RecipeViewPage",params:{id:e.recipe.id}},target:o.linkTarget},{default:t(()=>[a(x,{style:u({height:e.height}),recipe:e.recipe,rounded:"lg",class:"mr-3 ml-3"},null,8,["style","recipe"])]),_:1},8,["to","target"]),l("div",S,[l("div",P,[l("div",{class:"flex-grow-1 cursor-pointer",onClick:m[0]||(m[0]=F=>g())},[l("p",M,c(e.recipe.name),1)]),l("div",D,[e.showMenu?(r(),i(z,{key:0,recipe:e.recipe,size:"small"},null,8,["recipe"])):s("",!0)])]),e.showKeywords?(r(),i($,{key:0,variant:"outlined",keywords:e.recipe.keywords,"max-keywords":3},{prepend:t(()=>[o.recipe._private?(r(),i(d,{key:0,class:"mb-1 me-1",size:"x-small",label:"",variant:"outlined"},{default:t(()=>[a(N,{"show-text":!1})]),_:1})):s("",!0),e.recipe.internal==!1?(r(),i(d,{key:1,class:"mb-1 me-1",size:"x-small",label:"",variant:"outlined",color:"info"},{default:t(()=>[f(c(n.$t("External")),1)]),_:1})):s("",!0),e.recipe.workingTime!=null&&e.recipe.workingTime>0?(r(),i(d,{key:2,class:"mb-1 me-1",size:"x-small","prepend-icon":"far fa-clock",label:"",variant:"outlined"},{default:t(()=>[f(c(o.recipe.workingTime+o.recipe.waitingTime),1)]),_:1})):s("",!0)]),_:1},8,["keywords"])):s("",!0)]),s("",!0)],64))}}}),J=q(E,[["__scopeId","data-v-31e3ea35"]]);export{J as R};
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeCard-ZQiVryVZ.js.gz b/config/tandoor/staticfiles/vue3/assets/RecipeCard-ZQiVryVZ.js.gz
deleted file mode 100644
index e3399801..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/RecipeCard-ZQiVryVZ.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeCard-rQ-GRttr.51088e1fba9e.css b/config/tandoor/staticfiles/vue3/assets/RecipeCard-rQ-GRttr.51088e1fba9e.css
deleted file mode 100644
index 0e935e41..00000000
--- a/config/tandoor/staticfiles/vue3/assets/RecipeCard-rQ-GRttr.51088e1fba9e.css
+++ /dev/null
@@ -1 +0,0 @@
-.text-rows-1[data-v-31e3ea35]{overflow:hidden;text-overflow:clip;display:-webkit-box;-webkit-line-clamp:1;line-clamp:1;-webkit-box-orient:vertical}.text-rows-2[data-v-31e3ea35]{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical}
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeCard-rQ-GRttr.51088e1fba9e.css.gz b/config/tandoor/staticfiles/vue3/assets/RecipeCard-rQ-GRttr.51088e1fba9e.css.gz
deleted file mode 100644
index 17fe2d3a..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/RecipeCard-rQ-GRttr.51088e1fba9e.css.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeCard-rQ-GRttr.css b/config/tandoor/staticfiles/vue3/assets/RecipeCard-rQ-GRttr.css
deleted file mode 100644
index 0e935e41..00000000
--- a/config/tandoor/staticfiles/vue3/assets/RecipeCard-rQ-GRttr.css
+++ /dev/null
@@ -1 +0,0 @@
-.text-rows-1[data-v-31e3ea35]{overflow:hidden;text-overflow:clip;display:-webkit-box;-webkit-line-clamp:1;line-clamp:1;-webkit-box-orient:vertical}.text-rows-2[data-v-31e3ea35]{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical}
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeCard-rQ-GRttr.css.gz b/config/tandoor/staticfiles/vue3/assets/RecipeCard-rQ-GRttr.css.gz
deleted file mode 100644
index 17fe2d3a..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/RecipeCard-rQ-GRttr.css.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeEditor-Z3qd3Db3.40c8c532cea0.js b/config/tandoor/staticfiles/vue3/assets/RecipeEditor-Z3qd3Db3.40c8c532cea0.js
deleted file mode 100644
index ebef2766..00000000
--- a/config/tandoor/staticfiles/vue3/assets/RecipeEditor-Z3qd3Db3.40c8c532cea0.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{d as de,b as $,f as u,t as p,F as O,e as f,aH as re,bV as De,c as he,a9 as Me,h as V,w as l,i as z,g as e,H as me,x as le,a8 as Fe,j as g,p as ae,y as I,aT as Ue,P as Ne,aL as $e,a as Se,r as H,M as Z,O as J,S as q,k as W,af as Q,V as E,ag as x,ae as pe,l as t,G as K,L as _,aR as Oe,n as Pe,aI as je,z as w,aa as Ce,N as Ie,aN as fe,aO as ue,aP as se,dO as Le,ac as ee,U as ve,A as ge,aM as xe,bJ as ze,o as qe,dP as be,b9 as Be,ba as Ke,aS as ke,W as We,ai as _e,Q as ye,R as ce}from"./main-BhFWIRV_.js";import{u as Ge,_ as Je}from"./useModelEditorFunctions-Du2kfr61.js";import{l as Ve,_ as Qe,b as Xe,m as Ye,s as Ze}from"./step_utils-C0FnMRXv.js";import{V as te}from"./VSwitch-BzI8Cngm.js";import{V as Te}from"./VTextarea-Dyu7dPGe.js";import{a as el,_ as ll}from"./PropertiesEditor.vue_vue_type_script_setup_true_lang-nI_GsYpC.js";import{u as al}from"./useFileApi-4KcBp6Fj.js";import{_ as tl}from"./ClosableHelpAlert.vue_vue_type_script_setup_true_lang-Bq7D6yIF.js";import{_ as nl}from"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import{a as ol,V as ne,b as dl,c as oe}from"./VTabs-BQFRhgOd.js";import{V as il}from"./VFileUpload-DmaEfjuX.js";import"./model_utils-CVQgSPL_.js";import"./fileDrop-BjiZTCss.js";const ul={key:0,class:"font-weight-bold"},sl={key:0},rl={key:1,class:"ms-1"},ml={key:2,class:"ms-1"},Re=de({__name:"IngredientString",props:{ingredient:{type:{},required:!0}},setup(U){return(T,C)=>U.ingredient.isHeader?(u(),$("span",ul,p(U.ingredient.note),1)):(u(),$(O,{key:1},[U.ingredient.amount&&!Number.isNaN(U.ingredient.amount)?(u(),$("span",sl,p(T.$n(U.ingredient.amount)),1)):f("",!0),U.ingredient.unit?(u(),$("span",rl,p(U.ingredient.unit.name),1)):f("",!0),U.ingredient.food?(u(),$("span",ml,p(U.ingredient.food.name),1)):f("",!0)],64))}}),pl=["title"],fl={key:0,class:"op-icon fa-solid fa-code",type:"button"},vl=de({__name:"StepMarkdownEditor",props:{modelValue:{required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(U){const T=re(U,"modelValue"),C=De("markdownEditor"),o=he(()=>{let y=[];return T.value.ingredients.forEach((b,R)=>{!b.isHeader&&b.food!=null&&y.push({name:b.food.name,ingredient:b,template:`{{ ingredients[${R}] }}{# ${b.food.name} #}`})}),y});function P(y){let b=C.value.getTextareaDom(),R=b.selectionStart;T.value.instruction!=null&&(T.value.instruction=T.value.instruction.slice(0,R)+y+T.value.instruction.slice(R),Ue(()=>{b.focus(),b.selectionStart=R+y.length,b.selectionEnd=R+y.length}))}const j={bold:!0,italic:!0,header:!0,underline:!1,strikethrough:!1,mark:!1,superscript:!1,subscript:!1,quote:!0,ol:!0,ul:!0,link:!0,imagelink:!1,code:!1,table:!1,fullscreen:!1,readmodel:!1,htmlcode:!1,help:!1,undo:!0,redo:!0,navigation:!1,alignleft:!1,aligncenter:!1,alignright:!1,subfield:!0,preview:!0};return(y,b)=>{const R=Me("mavon-editor");return u(),V(R,{modelValue:T.value.instruction,"onUpdate:modelValue":b[1]||(b[1]=c=>T.value.instruction=c),autofocus:!1,"external-link":!1,style:{"z-index":"auto","box-shadow":"none"},class:"border-sm",id:"id_instruction_"+T.value.id,language:"en",toolbars:j,defaultOpen:"edit",ref_key:"markdownEditor",ref:C},{"left-toolbar-after":l(()=>[b[2]||(b[2]=z("span",{class:"op-icon-divider"},null,-1)),z("button",{type:"button",onClick:b[0]||(b[0]=c=>P("{{ scale(100) }} ")),class:"op-icon fas fa-calculator","aria-hidden":"true",title:y.$t("ScalableNumber")},null,8,pl),o.value.length>0?(u(),$("button",fl,[e(me,{activator:"parent"},{default:l(()=>[e(le,{density:"compact"},{default:l(()=>[e(Fe,null,{default:l(()=>[g(p(y.$t("Ingredients")),1)]),_:1}),(u(!0),$(O,null,ae(o.value,c=>(u(),V(I,{onClick:d=>P(c.template+" ")},{default:l(()=>[e(Re,{ingredient:c.ingredient},null,8,["ingredient"])]),_:2},1032,["onClick"]))),256))]),_:1})]),_:1})])):f("",!0)]),_:1},8,["modelValue","id"])}}}),we=Ne(vl,[["__scopeId","data-v-5d87fe5b"]]),gl={key:0},Vl={key:0,class:"pa-0 ma-0 text-center text-disabled"},$l={class:"d-flex flex-nowrap"},bl={key:0,class:"flex-col flex-grow-0 ma-1",style:{"min-width":"15%"}},kl={key:1,class:"flex-col flex-grow-0 ma-1",style:{"min-width":"15%"}},yl={key:2,class:"flex-col flex-grow-1 ma-1",style:{"min-width":"15%"}},cl=["onKeydown"],wl={class:"flex-col flex-grow-0 d-flex ma-1"},Ul={class:"d-flex align-center justify-center"},Sl={class:"text-center mt-2"},Cl={key:1},Il={key:1},Tl=de({__name:"StepEditor",props:$e({stepIndex:{type:Number,required:!0}},{modelValue:{required:!0},modelModifiers:{},recipe:{required:!0},recipeModifiers:{}}),emits:$e(["delete","move"],["update:modelValue","update:recipe"]),setup(U,{emit:T}){const C=T,o=re(U,"modelValue"),P=re(U,"recipe"),j=U,{mobile:y}=Se(),b=H(!1),R=H(!1),c=H(!1),d=H(!1),N=H(!1),A=H(!1),D=H(!1),F=H(!1),v=H(0),h=H("");function G(){o.value.ingredients.forEach((s,a)=>{s.order=a})}function B(){let s=new ge,a=[];h.value.split(/\r?\n/).forEach(S=>{S.trim()!=""&&a.push(s.apiIngredientFromStringCreate({ingredientString:{text:S}}))}),Promise.allSettled(a).then(S=>{S.forEach(k=>{console.log(k),o.value.ingredients.push({originalText:k.value.originalText,amount:k.value.amount,food:k.value.food,unit:k.value.unit,note:k.value.note})}),h.value="",D.value=!1})}function X(s,a){o.value.ingredients.length==a+1&&!s.shiftKey&&!s.altKey&&!s.ctrlKey&&(s.preventDefault(),Y())}function Y(){let s={amount:0,unit:_().defaultUnitObj,food:null};o.value.ingredients.push(s),Ue(()=>{G(),y.value?(v.value=o.value.ingredients.length-1,A.value=!0):document.getElementById(`id_input_amount_${j.stepIndex}_${o.value.ingredients.length-1}`).select()})}function ie(s){o.value.ingredients.splice(s,1)}return(s,a)=>(u(),$(O,null,[e(Z,{class:"border-sm",variant:"flat"},{title:l(()=>[e(Ie,null,{default:l(()=>[g(p(s.$t("Step"))+" "+p(j.stepIndex+1)+" "+p(o.value.name),1)]),_:1})]),append:l(()=>[e(w,{variant:"plain",density:"compact",icon:""},{default:l(()=>[e(K,{icon:"$menu"}),e(me,{activator:"parent"},{default:l(()=>[e(le,null,{default:l(()=>[!b.value&&(o.value.name==null||o.value.name=="")?(u(),V(I,{key:0,"prepend-icon":"fas fa-plus-circle",onClick:a[0]||(a[0]=n=>b.value=!0)},{default:l(()=>[g(p(s.$t("Name")),1)]),_:1})):f("",!0),!R.value&&o.value.time==0?(u(),V(I,{key:1,"prepend-icon":"fas fa-plus-circle",onClick:a[1]||(a[1]=n=>R.value=!0)},{default:l(()=>[g(p(s.$t("Time")),1)]),_:1})):f("",!0),!d.value&&o.value.file==null?(u(),V(I,{key:2,"prepend-icon":"fas fa-plus-circle",onClick:a[2]||(a[2]=n=>d.value=!0)},{default:l(()=>[g(p(s.$t("File")),1)]),_:1})):f("",!0),!c.value&&o.value.stepRecipe==null?(u(),V(I,{key:3,"prepend-icon":"fas fa-plus-circle",onClick:a[3]||(a[3]=n=>c.value=!0)},{default:l(()=>[g(p(s.$t("Recipe")),1)]),_:1})):f("",!0),e(I,{link:""},{default:l(()=>[e(te,{modelValue:o.value.showIngredientsTable,"onUpdate:modelValue":a[4]||(a[4]=n=>o.value.showIngredientsTable=n),label:s.$t("ShowIngredients"),"hide-details":""},null,8,["modelValue","label"])]),_:1}),e(I,{link:""},{default:l(()=>[e(te,{modelValue:o.value.showAsHeader,"onUpdate:modelValue":a[5]||(a[5]=n=>o.value.showAsHeader=n),label:s.$t("Show_as_header"),"hide-details":""},null,8,["modelValue","label"])]),_:1}),e(I,{onClick:a[6]||(a[6]=n=>C("move")),"prepend-icon":"fa-solid fa-sort"},{default:l(()=>[g(p(s.$t("Move")),1)]),_:1}),e(I,{"prepend-icon":"$delete",onClick:a[7]||(a[7]=n=>C("delete"))},{default:l(()=>[g(p(s.$t("Delete")),1)]),_:1})]),_:1})]),_:1})]),_:1})]),default:l(()=>[e(J,null,{default:l(()=>[b.value||o.value.name!=null&&o.value.name!=""?(u(),V(q,{key:0,modelValue:o.value.name,"onUpdate:modelValue":a[8]||(a[8]=n=>o.value.name=n),label:s.$t("Name")},null,8,["modelValue","label"])):f("",!0),e(W,null,{default:l(()=>[R.value||o.value.time!=0?(u(),V(E,{key:0,cols:"12",md:"6"},{default:l(()=>[e(Q,{label:s.$t("Time"),modelValue:o.value.time,"onUpdate:modelValue":a[9]||(a[9]=n=>o.value.time=n),min:0,step:5,"control-variant":"split"},null,8,["label","modelValue"])]),_:1})):f("",!0),c.value||o.value.stepRecipe!=null?(u(),V(E,{key:1,cols:"12",md:"6"},{default:l(()=>[e(x,{model:"Recipe",modelValue:o.value.stepRecipeData,"onUpdate:modelValue":[a[10]||(a[10]=n=>o.value.stepRecipeData=n),a[11]||(a[11]=n=>o.value.stepRecipe=o.value.stepRecipeData!=null?o.value.stepRecipeData.id:null)]},null,8,["modelValue"])]),_:1})):f("",!0),d.value||o.value.file!=null?(u(),V(E,{key:2,cols:"12",md:"6"},{default:l(()=>[e(x,{model:"UserFile",modelValue:o.value.file,"onUpdate:modelValue":a[12]||(a[12]=n=>o.value.file=n)},null,8,["modelValue"])]),_:1})):f("",!0)]),_:1}),e(W,{class:"mt-2",dense:""},{default:l(()=>[e(E,{cols:"12"},{default:l(()=>[e(pe,null,{default:l(()=>[g(p(s.$t("Ingredients")),1)]),_:1}),t(y)?f("",!0):(u(),$("div",gl,[e(t(Ve),{modelValue:o.value.ingredients,"onUpdate:modelValue":a[13]||(a[13]=n=>o.value.ingredients=n),handle:".drag-handle","on-sort":G,"empty-insert-threshold":25,group:"ingredients"},{default:l(()=>[(u(!0),$(O,null,ae(o.value.ingredients,(n,S)=>(u(),$("div",{key:n.id,dense:""},[n.originalText?(u(),$("div",Vl,[e(K,{icon:"$import",size:"x-small"}),g(" "+p(n.originalText),1)])):f("",!0),z("div",$l,[n.isHeader?f("",!0):(u(),$("div",bl,[e(Q,{id:`id_input_amount_${j.stepIndex}_${S}`,label:s.$t("Amount"),modelValue:n.amount,"onUpdate:modelValue":k=>n.amount=k,density:"compact","hide-details":"","control-variant":"hidden",disabled:n.noAmount,precision:t(_)().userSettings.ingredientDecimals},{prepend:l(()=>[e(K,{icon:"$dragHandle",class:"drag-handle cursor-grab"})]),_:2},1032,["id","label","modelValue","onUpdate:modelValue","disabled","precision"])])),n.isHeader?f("",!0):(u(),$("div",kl,[e(x,{model:"Unit",modelValue:n.unit,"onUpdate:modelValue":k=>n.unit=k,density:"compact","allow-create":"","hide-details":"",disabled:n.noAmount},null,8,["modelValue","onUpdate:modelValue","disabled"])])),n.isHeader?f("",!0):(u(),$("div",yl,[e(x,{model:"Food",modelValue:n.food,"onUpdate:modelValue":k=>n.food=k,density:"compact","allow-create":"","hide-details":""},null,8,["modelValue","onUpdate:modelValue"])])),z("div",{class:Pe(["flex-col ma-1",{"flex-grow-1":n.isHeader,"flex-grow-0":!n.isHeader}]),style:{"min-width":"15%"},onKeydown:Oe(k=>X(k,S),["tab"])},[e(q,{label:n.isHeader?s.$t("Headline"):s.$t("Note"),modelValue:n.note,"onUpdate:modelValue":k=>n.note=k,density:"compact","hide-details":""},je({_:2},[n.isHeader?{name:"prepend",fn:l(()=>[e(K,{icon:"$dragHandle",class:"drag-handle cursor-grab"})]),key:"0"}:void 0]),1032,["label","modelValue","onUpdate:modelValue"])],42,cl),z("div",wl,[z("div",Ul,[e(w,{variant:"plain",class:"",density:"compact",tabindex:"-1",icon:""},{default:l(()=>[e(K,{icon:"$menu"}),e(me,{activator:"parent"},{default:l(()=>[e(le,null,{default:l(()=>[e(I,{link:""},{default:l(()=>[e(te,{modelValue:o.value.ingredients[S].isHeader,"onUpdate:modelValue":k=>o.value.ingredients[S].isHeader=k,label:s.$t("Headline"),"hide-details":""},null,8,["modelValue","onUpdate:modelValue","label"])]),_:2},1024),e(I,{link:""},{default:l(()=>[e(te,{modelValue:o.value.ingredients[S].noAmount,"onUpdate:modelValue":k=>o.value.ingredients[S].noAmount=k,label:s.$t("Disable_Amount"),"hide-details":""},null,8,["modelValue","onUpdate:modelValue","label"])]),_:2},1024),e(I,{onClick:k=>{v.value=S,F.value=!0},"prepend-icon":"fa-solid fa-sort"},{default:l(()=>[g(p(s.$t("Move")),1)]),_:2},1032,["onClick"]),e(I,{onClick:k=>o.value.ingredients.splice(S,1),"prepend-icon":"$delete"},{default:l(()=>[g(p(s.$t("Delete")),1)]),_:2},1032,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1024)])])])]))),128))]),_:1},8,["modelValue"])])),t(y)?(u(),V(le,{key:1},{default:l(()=>[e(t(Ve),{modelValue:o.value.ingredients,"onUpdate:modelValue":a[14]||(a[14]=n=>o.value.ingredients=n),handle:".drag-handle","on-sort":G,group:"ingredients","empty-insert-threshold":"25"},{default:l(()=>[(u(!0),$(O,null,ae(o.value.ingredients,(n,S)=>(u(),V(I,{key:n.id,border:"",onClick:k=>{v.value=S,A.value=!0}},{append:l(()=>[e(K,{icon:"$dragHandle",class:"drag-handle"})]),default:l(()=>[e(Re,{ingredient:n},null,8,["ingredient"])]),_:2},1032,["onClick"]))),128))]),_:1},8,["modelValue"])]),_:1})):f("",!0),z("div",Sl,[e(w,{icon:"$create",variant:"outlined",size:"x-small",onClick:a[15]||(a[15]=n=>Y())}),e(w,{icon:"fa-solid fa-clipboard-list",variant:"outlined",size:"x-small",class:"ms-2",onClick:a[16]||(a[16]=n=>D.value=!0)})])]),_:1}),e(E,{cols:"12"},{default:l(()=>[e(pe,null,{default:l(()=>[g(p(s.$t("Instructions")),1)]),_:1}),t(y)?(u(),V(Ce,{key:0,onClick:a[17]||(a[17]=n=>N.value=!0),class:"mt-2 cursor-pointer","min-height":"52px"},{default:l(()=>[o.value.instruction!=""&&o.value.instruction!=null?(u(),$(O,{key:0},[g(p(o.value.instruction),1)],64)):(u(),$("i",Cl,p(s.$t("InstructionsEditHelp")),1))]),_:1})):(u(),$("p",Il,[e(we,{modelValue:o.value,"onUpdate:modelValue":a[18]||(a[18]=n=>o.value=n)},null,8,["modelValue"])]))]),_:1})]),_:1})]),_:1})]),_:1}),e(fe,{modelValue:N.value,"onUpdate:modelValue":a[22]||(a[22]=n=>N.value=n),"max-width":t(y)?"100vw":"75vw",fullscreen:t(y)},{default:l(()=>[e(Z,null,{default:l(()=>[e(ue,{title:s.$t("Instructions"),modelValue:N.value,"onUpdate:modelValue":a[19]||(a[19]=n=>N.value=n)},null,8,["title","modelValue"]),e(we,{class:"h-100",modelValue:o.value,"onUpdate:modelValue":a[20]||(a[20]=n=>o.value=n)},null,8,["modelValue"]),t(y)?f("",!0):(u(),V(se,{key:0},{default:l(()=>[e(w,{onClick:a[21]||(a[21]=n=>N.value=!1)},{default:l(()=>[g(p(s.$t("Close")),1)]),_:1})]),_:1}))]),_:1})]),_:1},8,["modelValue","max-width","fullscreen"]),e(fe,{modelValue:D.value,"onUpdate:modelValue":a[26]||(a[26]=n=>D.value=n),"max-width":t(y)?"100vw":"75vw",fullscreen:t(y)},{default:l(()=>[e(Z,null,{default:l(()=>[e(ue,{title:s.$t("Ingredients"),modelValue:D.value,"onUpdate:modelValue":a[23]||(a[23]=n=>D.value=n)},null,8,["title","modelValue"]),e(J,null,{default:l(()=>[e(Te,{modelValue:h.value,"onUpdate:modelValue":a[24]||(a[24]=n=>h.value=n),placeholder:s.$t("paste_ingredients_placeholder")},null,8,["modelValue","placeholder"])]),_:1}),e(se,null,{default:l(()=>[e(w,{onClick:a[25]||(a[25]=n=>B()),color:"save"},{default:l(()=>[g(p(s.$t("Add")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue","max-width","fullscreen"]),e(Qe,{"step-index":j.stepIndex,step:o.value,recipe:P.value,modelValue:F.value,"onUpdate:modelValue":a[27]||(a[27]=n=>F.value=n),"ingredient-index":v.value},null,8,["step-index","step","recipe","modelValue","ingredient-index"]),e(Le,{modelValue:A.value,"onUpdate:modelValue":a[39]||(a[39]=n=>A.value=n)},{default:l(()=>[v.value>=0?(u(),V(Z,{key:0},{default:l(()=>[e(ue,{title:s.$t("Ingredient Editor"),modelValue:A.value,"onUpdate:modelValue":a[28]||(a[28]=n=>A.value=n)},null,8,["title","modelValue"]),e(J,null,{default:l(()=>[e(ee,null,{default:l(()=>[o.value.ingredients[v.value].originalText?(u(),V(q,{key:0,label:s.$t("Original_Text"),readonly:"",modelValue:o.value.ingredients[v.value].originalText,"onUpdate:modelValue":a[29]||(a[29]=n=>o.value.ingredients[v.value].originalText=n)},null,8,["label","modelValue"])):f("",!0),o.value.ingredients[v.value].isHeader?f("",!0):(u(),V(Q,{key:1,modelValue:o.value.ingredients[v.value].amount,"onUpdate:modelValue":a[30]||(a[30]=n=>o.value.ingredients[v.value].amount=n),inset:"","control-variant":"stacked",autofocus:"",label:s.$t("Amount"),min:0,precision:t(_)().userSettings.ingredientDecimals},null,8,["modelValue","label","precision"])),o.value.ingredients[v.value].isHeader?f("",!0):(u(),V(x,{key:2,model:"Unit",modelValue:o.value.ingredients[v.value].unit,"onUpdate:modelValue":a[31]||(a[31]=n=>o.value.ingredients[v.value].unit=n),label:s.$t("Unit"),"allow-create":""},null,8,["modelValue","label"])),o.value.ingredients[v.value].isHeader?f("",!0):(u(),V(x,{key:3,model:"Food",modelValue:o.value.ingredients[v.value].food,"onUpdate:modelValue":a[32]||(a[32]=n=>o.value.ingredients[v.value].food=n),label:s.$t("Food"),"allow-create":""},null,8,["modelValue","label"])),e(q,{label:o.value.ingredients[v.value].isHeader?s.$t("Headline"):s.$t("Note"),modelValue:o.value.ingredients[v.value].note,"onUpdate:modelValue":a[33]||(a[33]=n=>o.value.ingredients[v.value].note=n)},null,8,["label","modelValue"]),e(ve,{modelValue:o.value.ingredients[v.value].isHeader,"onUpdate:modelValue":[a[34]||(a[34]=n=>o.value.ingredients[v.value].isHeader=n),a[35]||(a[35]=n=>{o.value.ingredients[v.value].unit=null,o.value.ingredients[v.value].food=null,o.value.ingredients[v.value].amount=0})],label:s.$t("Headline"),hint:s.$t("HeaderWarning"),"persistent-hint":""},null,8,["modelValue","label","hint"])]),_:1}),e(w,{color:"info",class:"mt-2",onClick:a[36]||(a[36]=n=>{A.value=!1,F.value=!0}),"prepend-icon":"fa-solid fa-sort"},{default:l(()=>[g(p(s.$t("Move")),1)]),_:1})]),_:1}),e(se,null,{default:l(()=>[e(w,{onClick:a[37]||(a[37]=n=>{A.value=!1,ie(v.value),v.value=-1}),color:"delete","prepend-icon":"$delete"},{default:l(()=>[g(p(s.$t("Delete")),1)]),_:1}),e(w,{onClick:a[38]||(a[38]=n=>A.value=!1),color:"save","prepend-icon":"$save"},{default:l(()=>[g(p(s.$t("Save")),1)]),_:1})]),_:1})]),_:1})):f("",!0)]),_:1},8,["modelValue"])],64))}}),Rl={key:0},El={key:0},Hl={class:"text-center mt-2"},Al={key:1,class:"mt-2"},Dl={key:0,class:"ms-2"},hl={key:1,class:"ms-2"},_l=de({__name:"RecipeEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(U,{emit:T}){const C=U,o=T,{setupState:P,deleteObject:j,saveObject:y,isUpdate:b,editingObjName:R,loading:c,editingObj:d,editingObjChanged:N,modelClass:A}=Ge("Recipe",o);xe([()=>C.item,()=>C.itemId],()=>{Y()});const{mobile:D}=Se(),F=H("recipe"),v=H(!1),{fileApiLoading:h,updateRecipeImage:G}=al(),B=ze(null),X=H(!1);qe(()=>{Y()});function Y(){P(C.item,C.itemId,{newItemFunction:()=>{d.value.steps=[],a(),d.value.steps[0].ingredients.push({food:null,unit:_().defaultUnitObj,amount:0}),d.value.internal=!0},itemDefaults:C.itemDefaults})}function ie(){y().then(()=>{B.value!=null&&d.value.id&&G(d.value.id,B.value).then(m=>{B.value=null,P(C.item,C.itemId)})})}function s(){G(d.value.id,null).then(m=>{P(C.item,C.itemId)})}function a(m=-1){let i={ingredients:[],time:0,showIngredientsTable:_().userSettings.showStepIngredients};m>=0?d.value.steps.splice(m,0,i):d.value.steps.push(i)}function n(){d.value.steps.forEach((m,i)=>{m.order=i})}function S(m){d.value.steps.splice(m,1)}function k(){return d.value.steps?Ye(d.value.steps):[]}function Ee(){d.value.steps&&Ze(d.value.steps,`
-`)}function He(){let m=new ge;c.value=!0,m.apiRecipeDeleteExternalPartialUpdate({id:d.value.id,patchedRecipe:d.value}).then(i=>{d.value=i}).catch(i=>{ye().addError(ce.DELETE_ERROR,i)}).finally(()=>{c.value=!1})}function Ae(m){let i=new ge;X.value=!0,i.apiAiStepSortCreate({recipe:d.value,provider:m}).then(r=>{d.value=r}).catch(r=>{ye().addError(ce.FETCH_ERROR,r)}).finally(()=>{X.value=!1})}return(m,i)=>(u(),$(O,null,[e(Je,{loading:t(c)||t(h),dialog:U.dialog,onSave:ie,onDelete:t(j),onClose:i[24]||(i[24]=r=>{o("close"),N.value=!1}),"is-update":t(b)(),"is-changed":t(N),"model-class":t(A),"object-name":t(R)(),"editing-object":t(d)},{default:l(()=>[e(J,{class:"pa-0"},{default:l(()=>[e(ol,{modelValue:F.value,"onUpdate:modelValue":i[0]||(i[0]=r=>F.value=r),disabled:t(c)||t(h),grow:""},{default:l(()=>[e(ne,{value:"recipe"},{default:l(()=>[g(p(m.$t("Recipe")),1)]),_:1}),e(ne,{value:"steps"},{default:l(()=>[g(p(m.$t("Steps")),1)]),_:1}),e(ne,{value:"properties",disabled:!t(b)()},{default:l(()=>[g(p(m.$t("Properties")),1)]),_:1},8,["disabled"]),e(ne,{value:"settings",disabled:!t(b)()},{default:l(()=>[g(p(m.$t("Miscellaneous")),1)]),_:1},8,["disabled"])]),_:1},8,["modelValue","disabled"])]),_:1}),t(be)(t(_)().activeSpace)?f("",!0):(u(),V(J,{key:0},{default:l(()=>[e(dl,{modelValue:F.value,"onUpdate:modelValue":i[23]||(i[23]=r=>F.value=r)},{default:l(()=>[e(oe,{value:"recipe"},{default:l(()=>[e(ee,{disabled:t(c)||t(h)},{default:l(()=>[e(q,{label:m.$t("Name"),modelValue:t(d).name,"onUpdate:modelValue":i[1]||(i[1]=r=>t(d).name=r)},null,8,["label","modelValue"]),e(Te,{label:m.$t("Description"),modelValue:t(d).description,"onUpdate:modelValue":i[2]||(i[2]=r=>t(d).description=r),clearable:"",counter:"512",maxlength:"512",rows:"2","auto-grow":""},null,8,["label","modelValue"]),e(W,null,{default:l(()=>[e(E,{cols:"12",md:"6"},{default:l(()=>[e(t(il),{modelValue:B.value,"onUpdate:modelValue":i[3]||(i[3]=r=>B.value=r),title:t(D)?m.$t("Select_File"):m.$t("DragToUpload"),"browse-text":m.$t("Select_File"),"divider-text":m.$t("or"),density:t(D)?"compact":"comfortable"},null,8,["modelValue","title","browse-text","divider-text","density"])]),_:1}),t(d).image?(u(),V(E,{key:0,cols:"12",md:"6"},{default:l(()=>[e(Be,{style:{"max-height":"180px"},cover:"",class:"mb-2",src:t(d).image},{default:l(()=>[t(d).image?(u(),V(w,{key:0,color:"delete",class:"float-right mt-2 mr-2","prepend-icon":"$delete",onClick:i[4]||(i[4]=r=>s())},{default:l(()=>[g(p(m.$t("Delete")),1)]),_:1})):f("",!0)]),_:1},8,["src"])]),_:1})):f("",!0)]),_:1}),e(pe,null,{default:l(()=>[g(p(m.$t("Keywords")),1)]),_:1}),e(x,{mode:"tags",modelValue:t(d).keywords,"onUpdate:modelValue":i[5]||(i[5]=r=>t(d).keywords=r),model:"Keyword","allow-create":""},null,8,["modelValue"]),e(W,{dense:""},{default:l(()=>[e(E,{cols:"12",md:"6"},{default:l(()=>[e(Q,{label:m.$t("WaitingTime"),modelValue:t(d).waitingTime,"onUpdate:modelValue":i[6]||(i[6]=r=>t(d).waitingTime=r),step:5},null,8,["label","modelValue"])]),_:1}),e(E,{cols:"12",md:"6"},{default:l(()=>[e(Q,{label:m.$t("WorkingTime"),modelValue:t(d).workingTime,"onUpdate:modelValue":i[7]||(i[7]=r=>t(d).workingTime=r),step:5},null,8,["label","modelValue"])]),_:1}),e(E,{cols:"12",md:"6"},{default:l(()=>[e(Q,{label:m.$t("Servings"),modelValue:t(d).servings,"onUpdate:modelValue":i[8]||(i[8]=r=>t(d).servings=r)},null,8,["label","modelValue"])]),_:1}),e(E,{cols:"12",md:"6"},{default:l(()=>[e(q,{label:m.$t("ServingsText"),modelValue:t(d).servingsText,"onUpdate:modelValue":i[9]||(i[9]=r=>t(d).servingsText=r)},null,8,["label","modelValue"])]),_:1})]),_:1}),e(w,{onClick:i[10]||(i[10]=r=>F.value="steps"),class:"float-right",variant:"tonal","append-icon":"fa-solid fa-arrow-right"},{default:l(()=>[g(p(m.$t("Steps")),1)]),_:1})]),_:1},8,["disabled"])]),_:1}),e(oe,{value:"steps"},{default:l(()=>[e(W,null,{default:l(()=>[e(E,null,{default:l(()=>[e(Ke,{density:"compact",divided:"",border:""},{default:l(()=>[e(w,{"prepend-icon":"fa-solid fa-maximize",onClick:Ee,disabled:t(d).steps.length<1},{default:l(()=>[t(D)?f("",!0):(u(),$("span",Rl,p(m.$t("Split")),1))]),_:1},8,["disabled"]),e(w,{"prepend-icon":"fa-solid fa-minimize",onClick:i[11]||(i[11]=r=>t(d).steps=k()),disabled:t(d).steps.length<2},{default:l(()=>[t(D)?f("",!0):(u(),$("span",El,p(m.$t("Merge")),1))]),_:1},8,["disabled"]),e(el,{text:m.$t("Auto_Sort"),"prepend-icon":"$ai",loading:X.value,onSelected:Ae,disabled:t(d).steps.length<1},null,8,["text","loading","disabled"])]),_:1})]),_:1})]),_:1}),e(ee,{disabled:t(c)||t(h)},{default:l(()=>[t(d).steps.length==0?(u(),V(W,{key:0},{default:l(()=>[e(E,{class:"text-center"},{default:l(()=>[e(w,{icon:"$create",variant:"outlined",size:"x-small",onClick:i[12]||(i[12]=r=>a(m.i+1))})]),_:1})]),_:1})):f("",!0),(u(!0),$(O,null,ae(t(d).steps,(r,M)=>(u(),V(W,{key:r.id,dense:""},{default:l(()=>[e(E,null,{default:l(()=>[e(Tl,{modelValue:t(d).steps[M],"onUpdate:modelValue":L=>t(d).steps[M]=L,recipe:t(d),"onUpdate:recipe":i[13]||(i[13]=L=>ke(d)?d.value=L:null),"step-index":M,onDelete:L=>S(M),onMove:i[14]||(i[14]=L=>v.value=!0)},null,8,["modelValue","onUpdate:modelValue","recipe","step-index","onDelete"]),z("div",Hl,[e(w,{icon:"$create",variant:"outlined",size:"x-small",onClick:L=>a(M+1)},null,8,["onClick"]),t(d).steps.length>M+1?(u(),V(w,{key:0,icon:"fa-solid fa-down-left-and-up-right-to-center",style:{transform:"rotate(135deg)"},variant:"outlined",size:"x-small",class:"ms-2",onClick:L=>{t(Xe)(r,t(d).steps[M+1]),t(d).steps.splice(M+1,1)}},null,8,["onClick"])):f("",!0),e(w,{icon:"fa-solid fa-arrow-down-1-9",variant:"outlined",size:"x-small",class:"ms-2",onClick:i[15]||(i[15]=L=>v.value=!0),disabled:t(d).steps.length<2},null,8,["disabled"])])]),_:2},1024)]),_:2},1024))),128))]),_:1},8,["disabled"])]),_:1}),e(oe,{value:"properties"},{default:l(()=>[e(ee,{disabled:t(c)||t(h)},{default:l(()=>[e(tl,{text:m.$t("PropertiesFoodHelp")},null,8,["text"]),e(ll,{modelValue:t(d),"onUpdate:modelValue":i[16]||(i[16]=r=>ke(d)?d.value=r:null),"amount-for":m.$t("Serving")},null,8,["modelValue","amount-for"]),e(We,{style:{"margin-top":"100px"}})]),_:1},8,["disabled"])]),_:1}),e(oe,{value:"settings"},{default:l(()=>[e(ee,{disabled:t(c)||t(h)},{default:l(()=>[e(ve,{label:m.$t("show_ingredient_overview"),modelValue:t(d).showIngredientOverview,"onUpdate:modelValue":i[17]||(i[17]=r=>t(d).showIngredientOverview=r)},null,8,["label","modelValue"]),e(q,{label:m.$t("Imported_From"),modelValue:t(d).sourceUrl,"onUpdate:modelValue":i[18]||(i[18]=r=>t(d).sourceUrl=r)},null,8,["label","modelValue"]),e(ve,{label:m.$t("Private_Recipe"),"persistent-hint":"",hint:m.$t("Private_Recipe_Help"),modelValue:t(d)._private,"onUpdate:modelValue":i[19]||(i[19]=r=>t(d)._private=r)},null,8,["label","hint","modelValue"]),t(d)._private?(u(),V(x,{key:0,mode:"tags",model:"User",label:m.$t("Share"),"persistent-hint":"",modelValue:t(d).shared,"onUpdate:modelValue":i[20]||(i[20]=r=>t(d).shared=r),"append-to-body":""},null,8,["label","modelValue"])):f("",!0),t(d).filePath?(u(),$("div",Al,[g(p(m.$t("ExternalRecipe"))+" ",1),e(q,{readonly:"",modelValue:t(d).filePath,"onUpdate:modelValue":i[21]||(i[21]=r=>t(d).filePath=r)},null,8,["modelValue"]),e(w,{"prepend-icon":"$delete",color:"error",loading:t(c)},{default:l(()=>[g(p(m.$t("delete_title",{type:m.$t("ExternalRecipe")}))+" ",1),e(nl,{"object-name":t(d).filePath,"model-name":m.$t("ExternalRecipe"),onDelete:i[22]||(i[22]=r=>He())},null,8,["object-name","model-name"])]),_:1},8,["loading"])])):f("",!0)]),_:1},8,["disabled"])]),_:1})]),_:1},8,["modelValue"])]),_:1})),t(be)(t(_)().activeSpace)?(u(),V(J,{key:1},{default:l(()=>[e(Ce,{color:"warning",icon:"fa-solid fa-triangle-exclamation"},{default:l(()=>[g(p(m.$t("SpaceLimitReached"))+" ",1),e(w,{color:"success",variant:"flat",to:{name:"SpaceSettings"}},{default:l(()=>[g(p(m.$t("SpaceSettings")),1)]),_:1})]),_:1})]),_:1})):f("",!0)]),_:1},8,["loading","dialog","onDelete","is-update","is-changed","model-class","object-name","editing-object"]),e(fe,{"max-width":"600px",modelValue:v.value,"onUpdate:modelValue":i[26]||(i[26]=r=>v.value=r)},{default:l(()=>[e(Z,null,{default:l(()=>[e(Ie,null,{default:l(()=>[g(p(m.$t("Steps")),1)]),_:1}),e(le,null,{default:l(()=>[e(t(Ve),{handle:".drag-handle",modelValue:t(d).steps,"onUpdate:modelValue":i[25]||(i[25]=r=>t(d).steps=r),"on-sort":n},{default:l(()=>[(u(!0),$(O,null,ae(t(d).steps,(r,M)=>(u(),V(I,{key:r.id},{append:l(()=>[e(K,{class:"drag-handle",icon:"$dragHandle"})]),default:l(()=>[e(_e,{color:"primary"},{default:l(()=>[g(p(M+1),1)]),_:2},1024),r.name?(u(),$("span",Dl,p(r.name),1)):(u(),$("span",hl,p(m.$t("Step"))+" "+p(M+1),1))]),_:2},1024))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"])],64))}});export{_l as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeEditor-Z3qd3Db3.40c8c532cea0.js.gz b/config/tandoor/staticfiles/vue3/assets/RecipeEditor-Z3qd3Db3.40c8c532cea0.js.gz
deleted file mode 100644
index e5caf54a..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/RecipeEditor-Z3qd3Db3.40c8c532cea0.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeEditor-Z3qd3Db3.js b/config/tandoor/staticfiles/vue3/assets/RecipeEditor-Z3qd3Db3.js
deleted file mode 100644
index ebef2766..00000000
--- a/config/tandoor/staticfiles/vue3/assets/RecipeEditor-Z3qd3Db3.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{d as de,b as $,f as u,t as p,F as O,e as f,aH as re,bV as De,c as he,a9 as Me,h as V,w as l,i as z,g as e,H as me,x as le,a8 as Fe,j as g,p as ae,y as I,aT as Ue,P as Ne,aL as $e,a as Se,r as H,M as Z,O as J,S as q,k as W,af as Q,V as E,ag as x,ae as pe,l as t,G as K,L as _,aR as Oe,n as Pe,aI as je,z as w,aa as Ce,N as Ie,aN as fe,aO as ue,aP as se,dO as Le,ac as ee,U as ve,A as ge,aM as xe,bJ as ze,o as qe,dP as be,b9 as Be,ba as Ke,aS as ke,W as We,ai as _e,Q as ye,R as ce}from"./main-BhFWIRV_.js";import{u as Ge,_ as Je}from"./useModelEditorFunctions-Du2kfr61.js";import{l as Ve,_ as Qe,b as Xe,m as Ye,s as Ze}from"./step_utils-C0FnMRXv.js";import{V as te}from"./VSwitch-BzI8Cngm.js";import{V as Te}from"./VTextarea-Dyu7dPGe.js";import{a as el,_ as ll}from"./PropertiesEditor.vue_vue_type_script_setup_true_lang-nI_GsYpC.js";import{u as al}from"./useFileApi-4KcBp6Fj.js";import{_ as tl}from"./ClosableHelpAlert.vue_vue_type_script_setup_true_lang-Bq7D6yIF.js";import{_ as nl}from"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import{a as ol,V as ne,b as dl,c as oe}from"./VTabs-BQFRhgOd.js";import{V as il}from"./VFileUpload-DmaEfjuX.js";import"./model_utils-CVQgSPL_.js";import"./fileDrop-BjiZTCss.js";const ul={key:0,class:"font-weight-bold"},sl={key:0},rl={key:1,class:"ms-1"},ml={key:2,class:"ms-1"},Re=de({__name:"IngredientString",props:{ingredient:{type:{},required:!0}},setup(U){return(T,C)=>U.ingredient.isHeader?(u(),$("span",ul,p(U.ingredient.note),1)):(u(),$(O,{key:1},[U.ingredient.amount&&!Number.isNaN(U.ingredient.amount)?(u(),$("span",sl,p(T.$n(U.ingredient.amount)),1)):f("",!0),U.ingredient.unit?(u(),$("span",rl,p(U.ingredient.unit.name),1)):f("",!0),U.ingredient.food?(u(),$("span",ml,p(U.ingredient.food.name),1)):f("",!0)],64))}}),pl=["title"],fl={key:0,class:"op-icon fa-solid fa-code",type:"button"},vl=de({__name:"StepMarkdownEditor",props:{modelValue:{required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(U){const T=re(U,"modelValue"),C=De("markdownEditor"),o=he(()=>{let y=[];return T.value.ingredients.forEach((b,R)=>{!b.isHeader&&b.food!=null&&y.push({name:b.food.name,ingredient:b,template:`{{ ingredients[${R}] }}{# ${b.food.name} #}`})}),y});function P(y){let b=C.value.getTextareaDom(),R=b.selectionStart;T.value.instruction!=null&&(T.value.instruction=T.value.instruction.slice(0,R)+y+T.value.instruction.slice(R),Ue(()=>{b.focus(),b.selectionStart=R+y.length,b.selectionEnd=R+y.length}))}const j={bold:!0,italic:!0,header:!0,underline:!1,strikethrough:!1,mark:!1,superscript:!1,subscript:!1,quote:!0,ol:!0,ul:!0,link:!0,imagelink:!1,code:!1,table:!1,fullscreen:!1,readmodel:!1,htmlcode:!1,help:!1,undo:!0,redo:!0,navigation:!1,alignleft:!1,aligncenter:!1,alignright:!1,subfield:!0,preview:!0};return(y,b)=>{const R=Me("mavon-editor");return u(),V(R,{modelValue:T.value.instruction,"onUpdate:modelValue":b[1]||(b[1]=c=>T.value.instruction=c),autofocus:!1,"external-link":!1,style:{"z-index":"auto","box-shadow":"none"},class:"border-sm",id:"id_instruction_"+T.value.id,language:"en",toolbars:j,defaultOpen:"edit",ref_key:"markdownEditor",ref:C},{"left-toolbar-after":l(()=>[b[2]||(b[2]=z("span",{class:"op-icon-divider"},null,-1)),z("button",{type:"button",onClick:b[0]||(b[0]=c=>P("{{ scale(100) }} ")),class:"op-icon fas fa-calculator","aria-hidden":"true",title:y.$t("ScalableNumber")},null,8,pl),o.value.length>0?(u(),$("button",fl,[e(me,{activator:"parent"},{default:l(()=>[e(le,{density:"compact"},{default:l(()=>[e(Fe,null,{default:l(()=>[g(p(y.$t("Ingredients")),1)]),_:1}),(u(!0),$(O,null,ae(o.value,c=>(u(),V(I,{onClick:d=>P(c.template+" ")},{default:l(()=>[e(Re,{ingredient:c.ingredient},null,8,["ingredient"])]),_:2},1032,["onClick"]))),256))]),_:1})]),_:1})])):f("",!0)]),_:1},8,["modelValue","id"])}}}),we=Ne(vl,[["__scopeId","data-v-5d87fe5b"]]),gl={key:0},Vl={key:0,class:"pa-0 ma-0 text-center text-disabled"},$l={class:"d-flex flex-nowrap"},bl={key:0,class:"flex-col flex-grow-0 ma-1",style:{"min-width":"15%"}},kl={key:1,class:"flex-col flex-grow-0 ma-1",style:{"min-width":"15%"}},yl={key:2,class:"flex-col flex-grow-1 ma-1",style:{"min-width":"15%"}},cl=["onKeydown"],wl={class:"flex-col flex-grow-0 d-flex ma-1"},Ul={class:"d-flex align-center justify-center"},Sl={class:"text-center mt-2"},Cl={key:1},Il={key:1},Tl=de({__name:"StepEditor",props:$e({stepIndex:{type:Number,required:!0}},{modelValue:{required:!0},modelModifiers:{},recipe:{required:!0},recipeModifiers:{}}),emits:$e(["delete","move"],["update:modelValue","update:recipe"]),setup(U,{emit:T}){const C=T,o=re(U,"modelValue"),P=re(U,"recipe"),j=U,{mobile:y}=Se(),b=H(!1),R=H(!1),c=H(!1),d=H(!1),N=H(!1),A=H(!1),D=H(!1),F=H(!1),v=H(0),h=H("");function G(){o.value.ingredients.forEach((s,a)=>{s.order=a})}function B(){let s=new ge,a=[];h.value.split(/\r?\n/).forEach(S=>{S.trim()!=""&&a.push(s.apiIngredientFromStringCreate({ingredientString:{text:S}}))}),Promise.allSettled(a).then(S=>{S.forEach(k=>{console.log(k),o.value.ingredients.push({originalText:k.value.originalText,amount:k.value.amount,food:k.value.food,unit:k.value.unit,note:k.value.note})}),h.value="",D.value=!1})}function X(s,a){o.value.ingredients.length==a+1&&!s.shiftKey&&!s.altKey&&!s.ctrlKey&&(s.preventDefault(),Y())}function Y(){let s={amount:0,unit:_().defaultUnitObj,food:null};o.value.ingredients.push(s),Ue(()=>{G(),y.value?(v.value=o.value.ingredients.length-1,A.value=!0):document.getElementById(`id_input_amount_${j.stepIndex}_${o.value.ingredients.length-1}`).select()})}function ie(s){o.value.ingredients.splice(s,1)}return(s,a)=>(u(),$(O,null,[e(Z,{class:"border-sm",variant:"flat"},{title:l(()=>[e(Ie,null,{default:l(()=>[g(p(s.$t("Step"))+" "+p(j.stepIndex+1)+" "+p(o.value.name),1)]),_:1})]),append:l(()=>[e(w,{variant:"plain",density:"compact",icon:""},{default:l(()=>[e(K,{icon:"$menu"}),e(me,{activator:"parent"},{default:l(()=>[e(le,null,{default:l(()=>[!b.value&&(o.value.name==null||o.value.name=="")?(u(),V(I,{key:0,"prepend-icon":"fas fa-plus-circle",onClick:a[0]||(a[0]=n=>b.value=!0)},{default:l(()=>[g(p(s.$t("Name")),1)]),_:1})):f("",!0),!R.value&&o.value.time==0?(u(),V(I,{key:1,"prepend-icon":"fas fa-plus-circle",onClick:a[1]||(a[1]=n=>R.value=!0)},{default:l(()=>[g(p(s.$t("Time")),1)]),_:1})):f("",!0),!d.value&&o.value.file==null?(u(),V(I,{key:2,"prepend-icon":"fas fa-plus-circle",onClick:a[2]||(a[2]=n=>d.value=!0)},{default:l(()=>[g(p(s.$t("File")),1)]),_:1})):f("",!0),!c.value&&o.value.stepRecipe==null?(u(),V(I,{key:3,"prepend-icon":"fas fa-plus-circle",onClick:a[3]||(a[3]=n=>c.value=!0)},{default:l(()=>[g(p(s.$t("Recipe")),1)]),_:1})):f("",!0),e(I,{link:""},{default:l(()=>[e(te,{modelValue:o.value.showIngredientsTable,"onUpdate:modelValue":a[4]||(a[4]=n=>o.value.showIngredientsTable=n),label:s.$t("ShowIngredients"),"hide-details":""},null,8,["modelValue","label"])]),_:1}),e(I,{link:""},{default:l(()=>[e(te,{modelValue:o.value.showAsHeader,"onUpdate:modelValue":a[5]||(a[5]=n=>o.value.showAsHeader=n),label:s.$t("Show_as_header"),"hide-details":""},null,8,["modelValue","label"])]),_:1}),e(I,{onClick:a[6]||(a[6]=n=>C("move")),"prepend-icon":"fa-solid fa-sort"},{default:l(()=>[g(p(s.$t("Move")),1)]),_:1}),e(I,{"prepend-icon":"$delete",onClick:a[7]||(a[7]=n=>C("delete"))},{default:l(()=>[g(p(s.$t("Delete")),1)]),_:1})]),_:1})]),_:1})]),_:1})]),default:l(()=>[e(J,null,{default:l(()=>[b.value||o.value.name!=null&&o.value.name!=""?(u(),V(q,{key:0,modelValue:o.value.name,"onUpdate:modelValue":a[8]||(a[8]=n=>o.value.name=n),label:s.$t("Name")},null,8,["modelValue","label"])):f("",!0),e(W,null,{default:l(()=>[R.value||o.value.time!=0?(u(),V(E,{key:0,cols:"12",md:"6"},{default:l(()=>[e(Q,{label:s.$t("Time"),modelValue:o.value.time,"onUpdate:modelValue":a[9]||(a[9]=n=>o.value.time=n),min:0,step:5,"control-variant":"split"},null,8,["label","modelValue"])]),_:1})):f("",!0),c.value||o.value.stepRecipe!=null?(u(),V(E,{key:1,cols:"12",md:"6"},{default:l(()=>[e(x,{model:"Recipe",modelValue:o.value.stepRecipeData,"onUpdate:modelValue":[a[10]||(a[10]=n=>o.value.stepRecipeData=n),a[11]||(a[11]=n=>o.value.stepRecipe=o.value.stepRecipeData!=null?o.value.stepRecipeData.id:null)]},null,8,["modelValue"])]),_:1})):f("",!0),d.value||o.value.file!=null?(u(),V(E,{key:2,cols:"12",md:"6"},{default:l(()=>[e(x,{model:"UserFile",modelValue:o.value.file,"onUpdate:modelValue":a[12]||(a[12]=n=>o.value.file=n)},null,8,["modelValue"])]),_:1})):f("",!0)]),_:1}),e(W,{class:"mt-2",dense:""},{default:l(()=>[e(E,{cols:"12"},{default:l(()=>[e(pe,null,{default:l(()=>[g(p(s.$t("Ingredients")),1)]),_:1}),t(y)?f("",!0):(u(),$("div",gl,[e(t(Ve),{modelValue:o.value.ingredients,"onUpdate:modelValue":a[13]||(a[13]=n=>o.value.ingredients=n),handle:".drag-handle","on-sort":G,"empty-insert-threshold":25,group:"ingredients"},{default:l(()=>[(u(!0),$(O,null,ae(o.value.ingredients,(n,S)=>(u(),$("div",{key:n.id,dense:""},[n.originalText?(u(),$("div",Vl,[e(K,{icon:"$import",size:"x-small"}),g(" "+p(n.originalText),1)])):f("",!0),z("div",$l,[n.isHeader?f("",!0):(u(),$("div",bl,[e(Q,{id:`id_input_amount_${j.stepIndex}_${S}`,label:s.$t("Amount"),modelValue:n.amount,"onUpdate:modelValue":k=>n.amount=k,density:"compact","hide-details":"","control-variant":"hidden",disabled:n.noAmount,precision:t(_)().userSettings.ingredientDecimals},{prepend:l(()=>[e(K,{icon:"$dragHandle",class:"drag-handle cursor-grab"})]),_:2},1032,["id","label","modelValue","onUpdate:modelValue","disabled","precision"])])),n.isHeader?f("",!0):(u(),$("div",kl,[e(x,{model:"Unit",modelValue:n.unit,"onUpdate:modelValue":k=>n.unit=k,density:"compact","allow-create":"","hide-details":"",disabled:n.noAmount},null,8,["modelValue","onUpdate:modelValue","disabled"])])),n.isHeader?f("",!0):(u(),$("div",yl,[e(x,{model:"Food",modelValue:n.food,"onUpdate:modelValue":k=>n.food=k,density:"compact","allow-create":"","hide-details":""},null,8,["modelValue","onUpdate:modelValue"])])),z("div",{class:Pe(["flex-col ma-1",{"flex-grow-1":n.isHeader,"flex-grow-0":!n.isHeader}]),style:{"min-width":"15%"},onKeydown:Oe(k=>X(k,S),["tab"])},[e(q,{label:n.isHeader?s.$t("Headline"):s.$t("Note"),modelValue:n.note,"onUpdate:modelValue":k=>n.note=k,density:"compact","hide-details":""},je({_:2},[n.isHeader?{name:"prepend",fn:l(()=>[e(K,{icon:"$dragHandle",class:"drag-handle cursor-grab"})]),key:"0"}:void 0]),1032,["label","modelValue","onUpdate:modelValue"])],42,cl),z("div",wl,[z("div",Ul,[e(w,{variant:"plain",class:"",density:"compact",tabindex:"-1",icon:""},{default:l(()=>[e(K,{icon:"$menu"}),e(me,{activator:"parent"},{default:l(()=>[e(le,null,{default:l(()=>[e(I,{link:""},{default:l(()=>[e(te,{modelValue:o.value.ingredients[S].isHeader,"onUpdate:modelValue":k=>o.value.ingredients[S].isHeader=k,label:s.$t("Headline"),"hide-details":""},null,8,["modelValue","onUpdate:modelValue","label"])]),_:2},1024),e(I,{link:""},{default:l(()=>[e(te,{modelValue:o.value.ingredients[S].noAmount,"onUpdate:modelValue":k=>o.value.ingredients[S].noAmount=k,label:s.$t("Disable_Amount"),"hide-details":""},null,8,["modelValue","onUpdate:modelValue","label"])]),_:2},1024),e(I,{onClick:k=>{v.value=S,F.value=!0},"prepend-icon":"fa-solid fa-sort"},{default:l(()=>[g(p(s.$t("Move")),1)]),_:2},1032,["onClick"]),e(I,{onClick:k=>o.value.ingredients.splice(S,1),"prepend-icon":"$delete"},{default:l(()=>[g(p(s.$t("Delete")),1)]),_:2},1032,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1024)])])])]))),128))]),_:1},8,["modelValue"])])),t(y)?(u(),V(le,{key:1},{default:l(()=>[e(t(Ve),{modelValue:o.value.ingredients,"onUpdate:modelValue":a[14]||(a[14]=n=>o.value.ingredients=n),handle:".drag-handle","on-sort":G,group:"ingredients","empty-insert-threshold":"25"},{default:l(()=>[(u(!0),$(O,null,ae(o.value.ingredients,(n,S)=>(u(),V(I,{key:n.id,border:"",onClick:k=>{v.value=S,A.value=!0}},{append:l(()=>[e(K,{icon:"$dragHandle",class:"drag-handle"})]),default:l(()=>[e(Re,{ingredient:n},null,8,["ingredient"])]),_:2},1032,["onClick"]))),128))]),_:1},8,["modelValue"])]),_:1})):f("",!0),z("div",Sl,[e(w,{icon:"$create",variant:"outlined",size:"x-small",onClick:a[15]||(a[15]=n=>Y())}),e(w,{icon:"fa-solid fa-clipboard-list",variant:"outlined",size:"x-small",class:"ms-2",onClick:a[16]||(a[16]=n=>D.value=!0)})])]),_:1}),e(E,{cols:"12"},{default:l(()=>[e(pe,null,{default:l(()=>[g(p(s.$t("Instructions")),1)]),_:1}),t(y)?(u(),V(Ce,{key:0,onClick:a[17]||(a[17]=n=>N.value=!0),class:"mt-2 cursor-pointer","min-height":"52px"},{default:l(()=>[o.value.instruction!=""&&o.value.instruction!=null?(u(),$(O,{key:0},[g(p(o.value.instruction),1)],64)):(u(),$("i",Cl,p(s.$t("InstructionsEditHelp")),1))]),_:1})):(u(),$("p",Il,[e(we,{modelValue:o.value,"onUpdate:modelValue":a[18]||(a[18]=n=>o.value=n)},null,8,["modelValue"])]))]),_:1})]),_:1})]),_:1})]),_:1}),e(fe,{modelValue:N.value,"onUpdate:modelValue":a[22]||(a[22]=n=>N.value=n),"max-width":t(y)?"100vw":"75vw",fullscreen:t(y)},{default:l(()=>[e(Z,null,{default:l(()=>[e(ue,{title:s.$t("Instructions"),modelValue:N.value,"onUpdate:modelValue":a[19]||(a[19]=n=>N.value=n)},null,8,["title","modelValue"]),e(we,{class:"h-100",modelValue:o.value,"onUpdate:modelValue":a[20]||(a[20]=n=>o.value=n)},null,8,["modelValue"]),t(y)?f("",!0):(u(),V(se,{key:0},{default:l(()=>[e(w,{onClick:a[21]||(a[21]=n=>N.value=!1)},{default:l(()=>[g(p(s.$t("Close")),1)]),_:1})]),_:1}))]),_:1})]),_:1},8,["modelValue","max-width","fullscreen"]),e(fe,{modelValue:D.value,"onUpdate:modelValue":a[26]||(a[26]=n=>D.value=n),"max-width":t(y)?"100vw":"75vw",fullscreen:t(y)},{default:l(()=>[e(Z,null,{default:l(()=>[e(ue,{title:s.$t("Ingredients"),modelValue:D.value,"onUpdate:modelValue":a[23]||(a[23]=n=>D.value=n)},null,8,["title","modelValue"]),e(J,null,{default:l(()=>[e(Te,{modelValue:h.value,"onUpdate:modelValue":a[24]||(a[24]=n=>h.value=n),placeholder:s.$t("paste_ingredients_placeholder")},null,8,["modelValue","placeholder"])]),_:1}),e(se,null,{default:l(()=>[e(w,{onClick:a[25]||(a[25]=n=>B()),color:"save"},{default:l(()=>[g(p(s.$t("Add")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue","max-width","fullscreen"]),e(Qe,{"step-index":j.stepIndex,step:o.value,recipe:P.value,modelValue:F.value,"onUpdate:modelValue":a[27]||(a[27]=n=>F.value=n),"ingredient-index":v.value},null,8,["step-index","step","recipe","modelValue","ingredient-index"]),e(Le,{modelValue:A.value,"onUpdate:modelValue":a[39]||(a[39]=n=>A.value=n)},{default:l(()=>[v.value>=0?(u(),V(Z,{key:0},{default:l(()=>[e(ue,{title:s.$t("Ingredient Editor"),modelValue:A.value,"onUpdate:modelValue":a[28]||(a[28]=n=>A.value=n)},null,8,["title","modelValue"]),e(J,null,{default:l(()=>[e(ee,null,{default:l(()=>[o.value.ingredients[v.value].originalText?(u(),V(q,{key:0,label:s.$t("Original_Text"),readonly:"",modelValue:o.value.ingredients[v.value].originalText,"onUpdate:modelValue":a[29]||(a[29]=n=>o.value.ingredients[v.value].originalText=n)},null,8,["label","modelValue"])):f("",!0),o.value.ingredients[v.value].isHeader?f("",!0):(u(),V(Q,{key:1,modelValue:o.value.ingredients[v.value].amount,"onUpdate:modelValue":a[30]||(a[30]=n=>o.value.ingredients[v.value].amount=n),inset:"","control-variant":"stacked",autofocus:"",label:s.$t("Amount"),min:0,precision:t(_)().userSettings.ingredientDecimals},null,8,["modelValue","label","precision"])),o.value.ingredients[v.value].isHeader?f("",!0):(u(),V(x,{key:2,model:"Unit",modelValue:o.value.ingredients[v.value].unit,"onUpdate:modelValue":a[31]||(a[31]=n=>o.value.ingredients[v.value].unit=n),label:s.$t("Unit"),"allow-create":""},null,8,["modelValue","label"])),o.value.ingredients[v.value].isHeader?f("",!0):(u(),V(x,{key:3,model:"Food",modelValue:o.value.ingredients[v.value].food,"onUpdate:modelValue":a[32]||(a[32]=n=>o.value.ingredients[v.value].food=n),label:s.$t("Food"),"allow-create":""},null,8,["modelValue","label"])),e(q,{label:o.value.ingredients[v.value].isHeader?s.$t("Headline"):s.$t("Note"),modelValue:o.value.ingredients[v.value].note,"onUpdate:modelValue":a[33]||(a[33]=n=>o.value.ingredients[v.value].note=n)},null,8,["label","modelValue"]),e(ve,{modelValue:o.value.ingredients[v.value].isHeader,"onUpdate:modelValue":[a[34]||(a[34]=n=>o.value.ingredients[v.value].isHeader=n),a[35]||(a[35]=n=>{o.value.ingredients[v.value].unit=null,o.value.ingredients[v.value].food=null,o.value.ingredients[v.value].amount=0})],label:s.$t("Headline"),hint:s.$t("HeaderWarning"),"persistent-hint":""},null,8,["modelValue","label","hint"])]),_:1}),e(w,{color:"info",class:"mt-2",onClick:a[36]||(a[36]=n=>{A.value=!1,F.value=!0}),"prepend-icon":"fa-solid fa-sort"},{default:l(()=>[g(p(s.$t("Move")),1)]),_:1})]),_:1}),e(se,null,{default:l(()=>[e(w,{onClick:a[37]||(a[37]=n=>{A.value=!1,ie(v.value),v.value=-1}),color:"delete","prepend-icon":"$delete"},{default:l(()=>[g(p(s.$t("Delete")),1)]),_:1}),e(w,{onClick:a[38]||(a[38]=n=>A.value=!1),color:"save","prepend-icon":"$save"},{default:l(()=>[g(p(s.$t("Save")),1)]),_:1})]),_:1})]),_:1})):f("",!0)]),_:1},8,["modelValue"])],64))}}),Rl={key:0},El={key:0},Hl={class:"text-center mt-2"},Al={key:1,class:"mt-2"},Dl={key:0,class:"ms-2"},hl={key:1,class:"ms-2"},_l=de({__name:"RecipeEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(U,{emit:T}){const C=U,o=T,{setupState:P,deleteObject:j,saveObject:y,isUpdate:b,editingObjName:R,loading:c,editingObj:d,editingObjChanged:N,modelClass:A}=Ge("Recipe",o);xe([()=>C.item,()=>C.itemId],()=>{Y()});const{mobile:D}=Se(),F=H("recipe"),v=H(!1),{fileApiLoading:h,updateRecipeImage:G}=al(),B=ze(null),X=H(!1);qe(()=>{Y()});function Y(){P(C.item,C.itemId,{newItemFunction:()=>{d.value.steps=[],a(),d.value.steps[0].ingredients.push({food:null,unit:_().defaultUnitObj,amount:0}),d.value.internal=!0},itemDefaults:C.itemDefaults})}function ie(){y().then(()=>{B.value!=null&&d.value.id&&G(d.value.id,B.value).then(m=>{B.value=null,P(C.item,C.itemId)})})}function s(){G(d.value.id,null).then(m=>{P(C.item,C.itemId)})}function a(m=-1){let i={ingredients:[],time:0,showIngredientsTable:_().userSettings.showStepIngredients};m>=0?d.value.steps.splice(m,0,i):d.value.steps.push(i)}function n(){d.value.steps.forEach((m,i)=>{m.order=i})}function S(m){d.value.steps.splice(m,1)}function k(){return d.value.steps?Ye(d.value.steps):[]}function Ee(){d.value.steps&&Ze(d.value.steps,`
-`)}function He(){let m=new ge;c.value=!0,m.apiRecipeDeleteExternalPartialUpdate({id:d.value.id,patchedRecipe:d.value}).then(i=>{d.value=i}).catch(i=>{ye().addError(ce.DELETE_ERROR,i)}).finally(()=>{c.value=!1})}function Ae(m){let i=new ge;X.value=!0,i.apiAiStepSortCreate({recipe:d.value,provider:m}).then(r=>{d.value=r}).catch(r=>{ye().addError(ce.FETCH_ERROR,r)}).finally(()=>{X.value=!1})}return(m,i)=>(u(),$(O,null,[e(Je,{loading:t(c)||t(h),dialog:U.dialog,onSave:ie,onDelete:t(j),onClose:i[24]||(i[24]=r=>{o("close"),N.value=!1}),"is-update":t(b)(),"is-changed":t(N),"model-class":t(A),"object-name":t(R)(),"editing-object":t(d)},{default:l(()=>[e(J,{class:"pa-0"},{default:l(()=>[e(ol,{modelValue:F.value,"onUpdate:modelValue":i[0]||(i[0]=r=>F.value=r),disabled:t(c)||t(h),grow:""},{default:l(()=>[e(ne,{value:"recipe"},{default:l(()=>[g(p(m.$t("Recipe")),1)]),_:1}),e(ne,{value:"steps"},{default:l(()=>[g(p(m.$t("Steps")),1)]),_:1}),e(ne,{value:"properties",disabled:!t(b)()},{default:l(()=>[g(p(m.$t("Properties")),1)]),_:1},8,["disabled"]),e(ne,{value:"settings",disabled:!t(b)()},{default:l(()=>[g(p(m.$t("Miscellaneous")),1)]),_:1},8,["disabled"])]),_:1},8,["modelValue","disabled"])]),_:1}),t(be)(t(_)().activeSpace)?f("",!0):(u(),V(J,{key:0},{default:l(()=>[e(dl,{modelValue:F.value,"onUpdate:modelValue":i[23]||(i[23]=r=>F.value=r)},{default:l(()=>[e(oe,{value:"recipe"},{default:l(()=>[e(ee,{disabled:t(c)||t(h)},{default:l(()=>[e(q,{label:m.$t("Name"),modelValue:t(d).name,"onUpdate:modelValue":i[1]||(i[1]=r=>t(d).name=r)},null,8,["label","modelValue"]),e(Te,{label:m.$t("Description"),modelValue:t(d).description,"onUpdate:modelValue":i[2]||(i[2]=r=>t(d).description=r),clearable:"",counter:"512",maxlength:"512",rows:"2","auto-grow":""},null,8,["label","modelValue"]),e(W,null,{default:l(()=>[e(E,{cols:"12",md:"6"},{default:l(()=>[e(t(il),{modelValue:B.value,"onUpdate:modelValue":i[3]||(i[3]=r=>B.value=r),title:t(D)?m.$t("Select_File"):m.$t("DragToUpload"),"browse-text":m.$t("Select_File"),"divider-text":m.$t("or"),density:t(D)?"compact":"comfortable"},null,8,["modelValue","title","browse-text","divider-text","density"])]),_:1}),t(d).image?(u(),V(E,{key:0,cols:"12",md:"6"},{default:l(()=>[e(Be,{style:{"max-height":"180px"},cover:"",class:"mb-2",src:t(d).image},{default:l(()=>[t(d).image?(u(),V(w,{key:0,color:"delete",class:"float-right mt-2 mr-2","prepend-icon":"$delete",onClick:i[4]||(i[4]=r=>s())},{default:l(()=>[g(p(m.$t("Delete")),1)]),_:1})):f("",!0)]),_:1},8,["src"])]),_:1})):f("",!0)]),_:1}),e(pe,null,{default:l(()=>[g(p(m.$t("Keywords")),1)]),_:1}),e(x,{mode:"tags",modelValue:t(d).keywords,"onUpdate:modelValue":i[5]||(i[5]=r=>t(d).keywords=r),model:"Keyword","allow-create":""},null,8,["modelValue"]),e(W,{dense:""},{default:l(()=>[e(E,{cols:"12",md:"6"},{default:l(()=>[e(Q,{label:m.$t("WaitingTime"),modelValue:t(d).waitingTime,"onUpdate:modelValue":i[6]||(i[6]=r=>t(d).waitingTime=r),step:5},null,8,["label","modelValue"])]),_:1}),e(E,{cols:"12",md:"6"},{default:l(()=>[e(Q,{label:m.$t("WorkingTime"),modelValue:t(d).workingTime,"onUpdate:modelValue":i[7]||(i[7]=r=>t(d).workingTime=r),step:5},null,8,["label","modelValue"])]),_:1}),e(E,{cols:"12",md:"6"},{default:l(()=>[e(Q,{label:m.$t("Servings"),modelValue:t(d).servings,"onUpdate:modelValue":i[8]||(i[8]=r=>t(d).servings=r)},null,8,["label","modelValue"])]),_:1}),e(E,{cols:"12",md:"6"},{default:l(()=>[e(q,{label:m.$t("ServingsText"),modelValue:t(d).servingsText,"onUpdate:modelValue":i[9]||(i[9]=r=>t(d).servingsText=r)},null,8,["label","modelValue"])]),_:1})]),_:1}),e(w,{onClick:i[10]||(i[10]=r=>F.value="steps"),class:"float-right",variant:"tonal","append-icon":"fa-solid fa-arrow-right"},{default:l(()=>[g(p(m.$t("Steps")),1)]),_:1})]),_:1},8,["disabled"])]),_:1}),e(oe,{value:"steps"},{default:l(()=>[e(W,null,{default:l(()=>[e(E,null,{default:l(()=>[e(Ke,{density:"compact",divided:"",border:""},{default:l(()=>[e(w,{"prepend-icon":"fa-solid fa-maximize",onClick:Ee,disabled:t(d).steps.length<1},{default:l(()=>[t(D)?f("",!0):(u(),$("span",Rl,p(m.$t("Split")),1))]),_:1},8,["disabled"]),e(w,{"prepend-icon":"fa-solid fa-minimize",onClick:i[11]||(i[11]=r=>t(d).steps=k()),disabled:t(d).steps.length<2},{default:l(()=>[t(D)?f("",!0):(u(),$("span",El,p(m.$t("Merge")),1))]),_:1},8,["disabled"]),e(el,{text:m.$t("Auto_Sort"),"prepend-icon":"$ai",loading:X.value,onSelected:Ae,disabled:t(d).steps.length<1},null,8,["text","loading","disabled"])]),_:1})]),_:1})]),_:1}),e(ee,{disabled:t(c)||t(h)},{default:l(()=>[t(d).steps.length==0?(u(),V(W,{key:0},{default:l(()=>[e(E,{class:"text-center"},{default:l(()=>[e(w,{icon:"$create",variant:"outlined",size:"x-small",onClick:i[12]||(i[12]=r=>a(m.i+1))})]),_:1})]),_:1})):f("",!0),(u(!0),$(O,null,ae(t(d).steps,(r,M)=>(u(),V(W,{key:r.id,dense:""},{default:l(()=>[e(E,null,{default:l(()=>[e(Tl,{modelValue:t(d).steps[M],"onUpdate:modelValue":L=>t(d).steps[M]=L,recipe:t(d),"onUpdate:recipe":i[13]||(i[13]=L=>ke(d)?d.value=L:null),"step-index":M,onDelete:L=>S(M),onMove:i[14]||(i[14]=L=>v.value=!0)},null,8,["modelValue","onUpdate:modelValue","recipe","step-index","onDelete"]),z("div",Hl,[e(w,{icon:"$create",variant:"outlined",size:"x-small",onClick:L=>a(M+1)},null,8,["onClick"]),t(d).steps.length>M+1?(u(),V(w,{key:0,icon:"fa-solid fa-down-left-and-up-right-to-center",style:{transform:"rotate(135deg)"},variant:"outlined",size:"x-small",class:"ms-2",onClick:L=>{t(Xe)(r,t(d).steps[M+1]),t(d).steps.splice(M+1,1)}},null,8,["onClick"])):f("",!0),e(w,{icon:"fa-solid fa-arrow-down-1-9",variant:"outlined",size:"x-small",class:"ms-2",onClick:i[15]||(i[15]=L=>v.value=!0),disabled:t(d).steps.length<2},null,8,["disabled"])])]),_:2},1024)]),_:2},1024))),128))]),_:1},8,["disabled"])]),_:1}),e(oe,{value:"properties"},{default:l(()=>[e(ee,{disabled:t(c)||t(h)},{default:l(()=>[e(tl,{text:m.$t("PropertiesFoodHelp")},null,8,["text"]),e(ll,{modelValue:t(d),"onUpdate:modelValue":i[16]||(i[16]=r=>ke(d)?d.value=r:null),"amount-for":m.$t("Serving")},null,8,["modelValue","amount-for"]),e(We,{style:{"margin-top":"100px"}})]),_:1},8,["disabled"])]),_:1}),e(oe,{value:"settings"},{default:l(()=>[e(ee,{disabled:t(c)||t(h)},{default:l(()=>[e(ve,{label:m.$t("show_ingredient_overview"),modelValue:t(d).showIngredientOverview,"onUpdate:modelValue":i[17]||(i[17]=r=>t(d).showIngredientOverview=r)},null,8,["label","modelValue"]),e(q,{label:m.$t("Imported_From"),modelValue:t(d).sourceUrl,"onUpdate:modelValue":i[18]||(i[18]=r=>t(d).sourceUrl=r)},null,8,["label","modelValue"]),e(ve,{label:m.$t("Private_Recipe"),"persistent-hint":"",hint:m.$t("Private_Recipe_Help"),modelValue:t(d)._private,"onUpdate:modelValue":i[19]||(i[19]=r=>t(d)._private=r)},null,8,["label","hint","modelValue"]),t(d)._private?(u(),V(x,{key:0,mode:"tags",model:"User",label:m.$t("Share"),"persistent-hint":"",modelValue:t(d).shared,"onUpdate:modelValue":i[20]||(i[20]=r=>t(d).shared=r),"append-to-body":""},null,8,["label","modelValue"])):f("",!0),t(d).filePath?(u(),$("div",Al,[g(p(m.$t("ExternalRecipe"))+" ",1),e(q,{readonly:"",modelValue:t(d).filePath,"onUpdate:modelValue":i[21]||(i[21]=r=>t(d).filePath=r)},null,8,["modelValue"]),e(w,{"prepend-icon":"$delete",color:"error",loading:t(c)},{default:l(()=>[g(p(m.$t("delete_title",{type:m.$t("ExternalRecipe")}))+" ",1),e(nl,{"object-name":t(d).filePath,"model-name":m.$t("ExternalRecipe"),onDelete:i[22]||(i[22]=r=>He())},null,8,["object-name","model-name"])]),_:1},8,["loading"])])):f("",!0)]),_:1},8,["disabled"])]),_:1})]),_:1},8,["modelValue"])]),_:1})),t(be)(t(_)().activeSpace)?(u(),V(J,{key:1},{default:l(()=>[e(Ce,{color:"warning",icon:"fa-solid fa-triangle-exclamation"},{default:l(()=>[g(p(m.$t("SpaceLimitReached"))+" ",1),e(w,{color:"success",variant:"flat",to:{name:"SpaceSettings"}},{default:l(()=>[g(p(m.$t("SpaceSettings")),1)]),_:1})]),_:1})]),_:1})):f("",!0)]),_:1},8,["loading","dialog","onDelete","is-update","is-changed","model-class","object-name","editing-object"]),e(fe,{"max-width":"600px",modelValue:v.value,"onUpdate:modelValue":i[26]||(i[26]=r=>v.value=r)},{default:l(()=>[e(Z,null,{default:l(()=>[e(Ie,null,{default:l(()=>[g(p(m.$t("Steps")),1)]),_:1}),e(le,null,{default:l(()=>[e(t(Ve),{handle:".drag-handle",modelValue:t(d).steps,"onUpdate:modelValue":i[25]||(i[25]=r=>t(d).steps=r),"on-sort":n},{default:l(()=>[(u(!0),$(O,null,ae(t(d).steps,(r,M)=>(u(),V(I,{key:r.id},{append:l(()=>[e(K,{class:"drag-handle",icon:"$dragHandle"})]),default:l(()=>[e(_e,{color:"primary"},{default:l(()=>[g(p(M+1),1)]),_:2},1024),r.name?(u(),$("span",Dl,p(r.name),1)):(u(),$("span",hl,p(m.$t("Step"))+" "+p(M+1),1))]),_:2},1024))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"])],64))}});export{_l as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeEditor-Z3qd3Db3.js.gz b/config/tandoor/staticfiles/vue3/assets/RecipeEditor-Z3qd3Db3.js.gz
deleted file mode 100644
index e5caf54a..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/RecipeEditor-Z3qd3Db3.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeImportPage-DvlxImUu.3c0013ac725e.js b/config/tandoor/staticfiles/vue3/assets/RecipeImportPage-DvlxImUu.3c0013ac725e.js
deleted file mode 100644
index 74433773..00000000
--- a/config/tandoor/staticfiles/vue3/assets/RecipeImportPage-DvlxImUu.3c0013ac725e.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import{d as Ee,b as k,F as S,h as p,e as m,k as A,w as t,g as l,V as C,b7 as Fe,j as n,t as u,f as r,b8 as _e,a as el,u as ll,a7 as tl,c as al,r as g,L as Ce,o as ol,A as q,s as ul,Q as G,R as h,D as il,K as nl,B as Z,M as N,l as R,z as d,W as rl,aR as Ie,S as K,ag as We,b1 as dl,G as x,aa as ke,ab as sl,x as z,p as J,i as P,b9 as Ae,ba as Ge,aN as pl,aO as vl,O as ml,aP as gl,N as fl,af as Cl,U as _,ad as Ne,Y as Te,y as T,n as Il,bb as kl,ai as ue,H as He}from"./main-BhFWIRV_.js";import{_ as Al,m as bl,s as $l,a as Vl,l as cl}from"./step_utils-C0FnMRXv.js";import{u as yl}from"./useFileApi-4KcBp6Fj.js";import{I as Sl}from"./integration_utils-sX7uYpAT.js";import{V as j}from"./VTextarea-Dyu7dPGe.js";import{e as Rl,V as wl,a as V,b as Bl,c,d as y}from"./VStepper-lPKDXqVi.js";import{V as Ke}from"./VFileUpload-DmaEfjuX.js";import"./model_utils-CVQgSPL_.js";import"./fileDrop-BjiZTCss.js";const Ul=Ee({__name:"ImportLogViewer",props:{importLog:{type:{},required:!0}},setup(ee){const U=ee;return(ie,w)=>(r(),k(S,null,[U.importLog.importedRecipes!=null&&U.importLog.totalRecipes!=null?(r(),p(A,{key:0},{default:t(()=>[l(C,null,{default:t(()=>[l(Fe,{"model-value":U.importLog.importedRecipes/U.importLog.totalRecipes*100,height:"24",color:"primary"},{default:t(()=>[n(u(U.importLog.importedRecipes)+" / "+u(U.importLog.totalRecipes),1)]),_:1},8,["model-value"])]),_:1})]),_:1})):m("",!0),U.importLog.importedRecipes!=null&&U.importLog.totalRecipes!=null?(r(),p(A,{key:1},{default:t(()=>[l(C,null,{default:t(()=>[l(j,{"model-value":ee.importLog.msg,"max-rows":"25",loading:ee.importLog.running,"auto-grow":""},null,8,["model-value","loading"])]),_:1})]),_:1})):m("",!0)],64))}}),Ll="data:text/javascript;base64,KGZ1bmN0aW9uKCl7CgogICAgdmFyIHYgPSAiMS4zLjIiOwoKICAgIGlmICh3aW5kb3cualF1ZXJ5ID09PSB1bmRlZmluZWQgfHwgd2luZG93LmpRdWVyeS5mbi5qcXVlcnkgPCB2KSB7CiAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTsKICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgc2NyaXB0LnNyYyA9ICJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8iICsgdiArICIvanF1ZXJ5Lm1pbi5qcyI7CiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpewogICAgICAgICAgICBpZiAoIWRvbmUgJiYgKCF0aGlzLnJlYWR5U3RhdGUgfHwgdGhpcy5yZWFkeVN0YXRlID09ICJsb2FkZWQiIHx8IHRoaXMucmVhZHlTdGF0ZSA9PSAiY29tcGxldGUiKSkgewogICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgICAgICAgICAgICBpbml0Qm9va21hcmtsZXQoKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpOwogICAgfSBlbHNlIHsKICAgICAgICBpbml0Qm9va21hcmtsZXQoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGluaXRCb29rbWFya2xldCgpIHsKICAgICAgICAod2luZG93LmJvb2ttYXJrbGV0VGFuZG9vciA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBsZXQgcmVjaXBlID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTAogICAgICAgICAgICBsZXQgd2luZG93TmFtZSA9ICJJbXBvcnRSZWNpcGUiCiAgICAgICAgICAgIGxldCB1cmwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW1wb3J0VVJMJykKICAgICAgICAgICAgbGV0IHJlZGlyZWN0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3JlZGlyZWN0VVJMJykKICAgICAgICAgICAgbGV0IHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJykKICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHsgJ3VybCc6IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSwgJ2h0bWwnIDogcmVjaXBlfTsgCiAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICAgICAgeGhyLm9wZW4oJ1BPU1QnLCB1cmwsIHRydWUpOwogICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTsKICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyB0b2tlbik7CgogICAgICAgICAgICAvLyBsaXN0ZW4gZm9yIGBvbmxvYWRgIGV2ZW50CiAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7CiAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIHJlc3BvbnNlCiAgICAgICAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCAmJiB4aHIuc3RhdHVzID09IDIwMSkgewogICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlIEpTT04gZGF0YQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHJlZGlyZWN0LmNvbmNhdCgnP2Jvb2ttYXJrbGV0X2ltcG9ydD0nLCBKU09OLnBhcnNlKHhoci5yZXNwb25zZSkuaWQpICkKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IhJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KHBhcmFtcykpOwogICAgICAgICAgICB9CiAgICAgICAgKSgpOwogICAgfQp9KSgpOw==",Zl={key:1},Wl={class:"text-h5"},Gl={class:"text-h5"},Nl={key:0},Tl={key:0},Hl={key:0},Kl={key:0},jl=Ee({__name:"RecipeImportPage",setup(ee){function U(){de.value=E.value.split(`
-`),I.value=!0,ie()}function ie(){let o=new q,e=de.value.pop();e!=null&&e.trim()!=""?o.apiRecipeFromSourceCreate({recipeFromSource:{url:e}}).then(s=>{s.recipe&&o.apiRecipeCreate({recipe:s.recipe}).then(B=>{te.value.push(B),be(B.id,null,s.recipe?.imageUrl).then(a=>{setTimeout(ie,500)})}).catch(B=>{}).finally(()=>{I.value=!1})}).catch(s=>{s.response.status==429?G().addPreparedMessage(Ne.RATE_LIMIT,s):G().addMessage(Te.WARNING,Je("ErrorUrlListImport"),8e3,e),E.value=e+`
-`+de.value.join(`
-`),v.value="url_list_input"}).finally(()=>{}):(G().addPreparedMessage(Ne.CREATE_SUCCESS),I.value=!1)}const w=_e("history",{}),{mobile:ne}=el(),re=ul(),{t:Je}=ll(),{updateRecipeImage:be,doAiImport:$e,doAppImport:Pe,fileApiLoading:Ve}=yl(),{getDjangoUrl:ce}=tl(),Xe=al(()=>`javascript:(function(){if(window.bookmarkletTandoor!==undefined){bookmarkletTandoor();} else {localStorage.setItem("importURL", "${ce("/api/bookmarklet-import/")}");localStorage.setItem("redirectURL", "${ce("/recipe/import/")}");localStorage.setItem("token", "${oe.value}");document.body.appendChild(document.createElement("script")).src="${Ll}"}})()`),f=g("url"),le=g("DEFAULT"),v=g("type"),X=g(!1),I=g(!1),W=g(""),E=g(""),de=g([]),te=g([]),L=g(""),ae=g([]),se=g(!1),pe=g(!0),ve=g(!0),me=g(!1),Y=g(null),Q=g(null),H=g("file"),O=g(Ce().activeSpace.aiDefaultProvider),ge=g(!1),oe=g(""),i=g({}),D=g(null),b=g({}),ye=g(0),fe=g(!1),Se=g({}),Re=g(0);ol(()=>{he(),w.url&&typeof w.url=="string"&&(W.value=w.url,F({url:W.value})),w.text&&typeof w.text=="string"&&(W.value=w.text,F({url:W.value})),w.bookmarklet_import&&typeof w.bookmarklet_import=="string"&&!isNaN(parseInt(w.bookmarklet_import))&&(f.value="url",F({bookmarklet:parseInt(w.bookmarklet_import)}))});function F(o){let e=new q;I.value=!0,i.value={},e.apiRecipeFromSourceCreate({recipeFromSource:o}).then(s=>{if(s.recipeId!=null){re.push({name:"RecipeViewPage",params:{id:s.recipeId}});return}i.value=s,i.value.duplicates&&i.value.duplicates.length>0?v.value="duplicates":i.value.images&&i.value.images.length>0?v.value="image_chooser":v.value="keywords_chooser"}).catch(s=>{s.response.json().then(B=>{B.error?i.value=B:G().addError(h.FETCH_ERROR,B)})}).finally(()=>{I.value=!1})}function we(){let o=null;O.value==null&&G().addError(h.CREATE_ERROR,"No AI Provider selected"),Q.value!=null&&H.value=="file"?o=$e(O.value.id,Q.value):L.value!=""&&H.value=="text"&&(o=$e(O.value.id,null,L.value)),o!=null&&(I.value=!0,o.then(e=>{I.value=!1,i.value=e,i.value.error||(i.value.images&&i.value.images.length>0?v.value="image_chooser":v.value="keywords_chooser")}).catch(e=>{G().addError(h.FETCH_ERROR,e)}))}function Ye(){Pe(ae.value,le.value,se.value,pe.value,ve.value,me.value).then(o=>{v.value="import_log",Be(o)})}function Be(o){new q().apiImportLogRetrieve({id:o}).then(s=>{Y.value=s,s.running&&setTimeout(()=>{Be(o)},1e3)}).catch(s=>{G().addError(h.FETCH_ERROR,s)})}function De(){let o=new q;i.value.recipe&&(I.value=!0,i.value.recipe.keywords=i.value.recipe.keywords.filter(e=>e.importKeyword),o.apiRecipeCreate({recipe:i.value.recipe}).then(e=>{be(e.id,null,i.value.recipe?.imageUrl).then(s=>{ge.value?re.push({name:"ModelEditPage",params:{id:e.id,model:"recipe"}}):re.push({name:"RecipeViewPage",params:{id:e.id}})})}).catch(e=>{G().addError(h.CREATE_ERROR,e)}).finally(()=>{I.value=!1}))}function Me(o){i.value.recipe&&i.value.recipe.steps.splice(i.value.recipe.steps.findIndex(e=>e===o),1)}function ze(){i.value.recipe&&i.value.recipe.steps&&(i.value.recipe.steps=bl(i.value.recipe.steps))}function je(){i.value.recipe&&i.value.recipe.steps&&$l(i.value.recipe.steps,`
-`)}function Qe(o,e){o.ingredients=o.ingredients.filter(s=>s!=e)}function Oe(){if(i.value.recipe){let o=i.value.recipe.steps.flatMap(e=>e.ingredients);i.value.recipe.steps.forEach(e=>e.ingredients=[]),o.forEach(e=>{let s=!1;i.value.recipe.steps.forEach(B=>{B.instruction.toLowerCase().includes(e.food.name.trim().toLowerCase())&&!s&&(s=!0,B.ingredients.push(e))}),s||i.value.recipe.steps[0].ingredients.push(e)})}else G().addMessage(Te.ERROR,"no steps found to split")}function Ue(o){i.value.recipe?.keywords.forEach(e=>{e.importKeyword=o})}function qe(){i.value.recipe?.steps.push({ingredients:[],instruction:""})}function he(){let o=new q;o.apiAccessTokenList().then(e=>{e.forEach(s=>{s.scope=="bookmarklet"&&(oe.value=s.token)}),oe.value==""&&o.apiAccessTokenCreate({accessToken:{scope:"bookmarklet",expires:il.now().plus({year:100}).toJSDate()}}).then(s=>{oe.value=s.token})})}function Le(){location.reload()}return(o,e)=>(r(),k(S,null,[l(nl,null,{default:t(()=>[l(A,null,{default:t(()=>[l(C,null,{default:t(()=>[l(Rl,{modelValue:v.value,"onUpdate:modelValue":e[73]||(e[73]=s=>v.value=s)},{default:t(({prev:s,next:B})=>[l(wl,null,{default:t(()=>[l(V,{title:o.$t("Type"),value:"type",icon:" "},null,8,["title"]),l(Z),["url","ai","source"].includes(f.value)?(r(),k(S,{key:0},[l(V,{title:o.$t("Import"),value:"url",icon:" "},null,8,["title"]),l(Z),i.value.duplicates&&i.value.duplicates.length>0?(r(),k(S,{key:0},[l(V,{title:o.$t("Duplicate"),value:"duplicates",icon:" "},null,8,["title"]),l(Z)],64)):m("",!0),l(V,{title:o.$t("Image"),value:"image_chooser",icon:" "},null,8,["title"]),l(Z),l(V,{title:o.$t("Keywords"),value:"keywords_chooser",icon:" "},null,8,["title"]),l(Z),l(V,{title:o.$t("Steps"),value:"step_editor",icon:" "},null,8,["title"]),l(Z),l(V,{title:o.$t("Save"),value:"confirm",icon:" "},null,8,["title"])],64)):m("",!0),f.value=="app"?(r(),k(S,{key:1},[l(V,{title:o.$t("App"),value:"app",icon:" "},null,8,["title"]),l(Z),l(V,{title:o.$t("File"),value:"file",icon:" "},null,8,["title"]),l(Z),l(V,{title:o.$t("Import"),value:"import_log",icon:" "},null,8,["title"])],64)):m("",!0),f.value=="bookmarklet"?(r(),p(V,{key:2,title:o.$t("Bookmarklet"),value:"bookmarklet",icon:" "},null,8,["title"])):m("",!0),f.value=="url-list"?(r(),k(S,{key:3},[l(V,{title:o.$t("UrlList"),value:"url_list_input",icon:" "},null,8,["title"]),l(Z),l(V,{title:o.$t("Import"),value:"url_list_import",icon:" "},null,8,["title"])],64)):m("",!0)]),_:1}),l(Bl,null,{default:t(()=>[l(c,{value:"type"},{default:t(()=>[l(A,null,{default:t(()=>[l(C,{cols:"12",md:"6"},{default:t(()=>[l(N,{title:o.$t("Url_Import"),subtitle:o.$t("UrlImportSubtitle"),"prepend-icon":"$import",variant:"outlined",color:f.value=="url"?"primary":"",elevation:"1",onClick:e[0]||(e[0]=a=>f.value="url")},null,8,["title","subtitle","color"])]),_:1}),R(Ce)().activeSpace.aiEnabled?(r(),p(C,{key:0,cols:"12",md:"6"},{default:t(()=>[l(N,{title:o.$t("AI"),subtitle:o.$t("AIImportSubtitle"),"prepend-icon":"$ai",variant:"outlined",color:f.value=="ai"?"primary":"",elevation:"1",onClick:e[1]||(e[1]=a=>f.value="ai"),disabled:!R(Ce)().activeSpace.aiEnabled},null,8,["title","subtitle","color","disabled"])]),_:1})):m("",!0),l(C,{cols:"12",md:"6"},{default:t(()=>[l(N,{title:o.$t("App"),subtitle:o.$t("AppImportSubtitle"),"prepend-icon":"fa-solid fa-folder-open",variant:"outlined",color:f.value=="app"?"primary":"",elevation:"1",onClick:e[2]||(e[2]=a=>f.value="app")},null,8,["title","subtitle","color"])]),_:1}),l(C,{cols:"12",md:"6"},{default:t(()=>[l(N,{title:o.$t("Bookmarklet"),subtitle:o.$t("BookmarkletImportSubtitle"),"prepend-icon":"fa-solid fa-bookmark",variant:"outlined",color:f.value=="bookmarklet"?"primary":"",elevation:"1",onClick:e[3]||(e[3]=a=>f.value="bookmarklet")},null,8,["title","subtitle","color"])]),_:1}),l(C,{cols:"12",md:"6"},{default:t(()=>[l(N,{title:"JSON/HTML",subtitle:o.$t("SourceImportSubtitle"),"prepend-icon":"fa-solid fa-code",variant:"outlined",color:f.value=="source"?"primary":"",elevation:"1",onClick:e[4]||(e[4]=a=>f.value="source")},null,8,["subtitle","color"])]),_:1}),l(C,{cols:"12",md:"6"},{default:t(()=>[l(N,{title:o.$t("UrlList"),subtitle:o.$t("UrlListSubtitle"),"prepend-icon":"fa-solid fa-list",variant:"outlined",color:f.value=="url-list"?"primary":"",elevation:"1",onClick:e[5]||(e[5]=a=>f.value="url-list")},null,8,["title","subtitle","color"])]),_:1})]),_:1}),l(y,null,{prev:t(()=>[l(rl)]),next:t(()=>[["url","ai","source"].includes(f.value)?(r(),p(d,{key:0,onClick:e[6]||(e[6]=a=>v.value="url"),color:"success"},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})):m("",!0),f.value=="app"?(r(),p(d,{key:1,onClick:e[7]||(e[7]=a=>v.value="app"),color:"success"},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})):m("",!0),f.value=="bookmarklet"?(r(),p(d,{key:2,onClick:e[8]||(e[8]=a=>v.value="bookmarklet"),color:"success"},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})):m("",!0),f.value=="url-list"?(r(),p(d,{key:3,onClick:e[9]||(e[9]=a=>v.value="url_list_input"),color:"success"},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})):m("",!0)]),_:1})]),_:1}),l(c,{value:"url"},{default:t(()=>[f.value=="url"?(r(),p(K,{key:0,label:o.$t("Website")+" (https://...)",modelValue:W.value,"onUpdate:modelValue":e[10]||(e[10]=a=>W.value=a),loading:I.value,autofocus:"",onKeydown:e[11]||(e[11]=Ie(a=>F({url:W.value}),["enter"]))},null,8,["label","modelValue","loading"])):m("",!0),f.value=="ai"?(r(),k("div",Zl,[l(A,null,{default:t(()=>[l(C,{cols:"12",md:"6"},{default:t(()=>[l(We,{model:"AiProvider",modelValue:O.value,"onUpdate:modelValue":e[12]||(e[12]=a=>O.value=a),"hide-details":""},{append:t(()=>[l(d,{icon:"$settings",to:{name:"ModelListPage",params:{model:"AiProvider"}},color:"success"})]),_:1},8,["modelValue"])]),_:1}),l(C,{cols:"12",md:"6"},{default:t(()=>[l(dl,{class:"mb-2",border:"",divided:"",modelValue:H.value,"onUpdate:modelValue":e[13]||(e[13]=a=>H.value=a)},{default:t(()=>[l(d,{value:"file"},{default:t(()=>[n(u(o.$t("File")),1)]),_:1}),l(d,{value:"text"},{default:t(()=>[n(u(o.$t("Text")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1}),H.value=="file"?(r(),p(R(Ke),{key:0,modelValue:Q.value,"onUpdate:modelValue":e[14]||(e[14]=a=>Q.value=a),loading:I.value,clearable:""},{icon:t(()=>[l(x,{icon:"fa-solid fa-file-pdf"}),n(" "+u(o.$t("or"))+" ",1),l(x,{icon:"fa-solid fa-file-image"})]),_:1},8,["modelValue","loading"])):m("",!0),H.value=="text"?(r(),p(j,{key:1,modelValue:L.value,"onUpdate:modelValue":e[15]||(e[15]=a=>L.value=a),loading:I.value,autofocus:"",onKeydown:e[16]||(e[16]=Ie(a=>we(),["enter"]))},null,8,["modelValue","loading"])):m("",!0)])):m("",!0),f.value=="source"?(r(),p(j,{key:2,modelValue:L.value,"onUpdate:modelValue":e[17]||(e[17]=a=>L.value=a),label:"JSON/HTML",loading:I.value,hint:o.$t("SourceImportHelp"),"persistent-hint":"",autofocus:"",onKeydown:e[18]||(e[18]=Ie(a=>F({data:L.value}),["enter"]))},null,8,["modelValue","loading","hint"])):m("",!0),i.value.error?(r(),p(ke,{key:3,title:o.$t("Error"),text:i.value.msg,color:"warning"},null,8,["title","text"])):m("",!0),l(y,null,{prev:t(()=>[l(d,{onClick:e[19]||(e[19]=a=>{v.value="type",i.value={}})},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[f.value=="url"?(r(),p(d,{key:0,onClick:e[20]||(e[20]=a=>F({url:W.value})),disabled:W.value=="",loading:I.value},{default:t(()=>[n(u(o.$t("Load")),1)]),_:1},8,["disabled","loading"])):m("",!0),f.value=="source"?(r(),p(d,{key:1,onClick:e[21]||(e[21]=a=>F({data:L.value})),disabled:L.value=="",loading:I.value},{default:t(()=>[n(u(o.$t("Load")),1)]),_:1},8,["disabled","loading"])):m("",!0),f.value=="ai"?(r(),p(d,{key:2,onClick:e[22]||(e[22]=a=>we()),disabled:H.value=="file"&&Q.value==null||H.value=="text"&&L.value=="",loading:I.value},{default:t(()=>[n(u(o.$t("Load")),1)]),_:1},8,["disabled","loading"])):m("",!0)]),_:1})]),_:1}),l(c,{value:"duplicates"},{default:t(()=>[i.value.duplicates&&i.value.duplicates.length>0?(r(),p(ke,{key:0,variant:"tonal"},{default:t(()=>[l(sl,null,{default:t(()=>[n(u(o.$t("Duplicate")),1)]),_:1}),n(" "+u(o.$t("DuplicateFoundInfo"))+" ",1),l(z,null,{default:t(()=>[(r(!0),k(S,null,J(i.value.duplicates,a=>(r(),p(T,{to:{name:"RecipeViewPage",params:{id:a.id}},key:a.id},{default:t(()=>[n(u(a.name)+" (#"+u(a.id)+") ",1)]),_:2},1032,["to"]))),128))]),_:1})]),_:1})):m("",!0),l(y,null,{prev:t(()=>[l(d,{onClick:e[23]||(e[23]=a=>v.value="url")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[l(d,{onClick:e[24]||(e[24]=a=>v.value="image_chooser")},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})]),_:1})]),_:1}),l(c,{value:"image_chooser"},{default:t(()=>[l(A,null,{default:t(()=>[l(C,{cols:"12",md:"6"},{default:t(()=>[P("h2",Wl,u(o.$t("Selected")),1),l(Ae,{"max-height":"30vh",src:i.value.recipe.imageUrl},null,8,["src"])]),_:1}),l(C,{cols:"12",md:"6"},{default:t(()=>[P("h2",Gl,u(o.$t("Available")),1),l(A,{dense:""},{default:t(()=>[(r(!0),k(S,null,J(i.value.images,a=>(r(),p(C,{cols:"4"},{default:t(()=>[l(Ae,{"max-height":"10vh",cover:"","aspect-ratio":"1",src:a,onClick:M=>i.value.recipe.imageUrl=a},null,8,["src","onClick"])]),_:2},1024))),256))]),_:1})]),_:1})]),_:1}),l(y,null,{prev:t(()=>[i.value.duplicates&&i.value.duplicates.length>0?(r(),p(d,{key:0,onClick:e[25]||(e[25]=a=>v.value="duplicates")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})):(r(),p(d,{key:1,onClick:e[26]||(e[26]=a=>v.value="url")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1}))]),next:t(()=>[l(d,{onClick:e[27]||(e[27]=a=>v.value="keywords_chooser")},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})]),_:1})]),_:1}),l(c,{value:"keywords_chooser"},{default:t(()=>[l(A,null,{default:t(()=>[l(C,{class:"text-center"},{default:t(()=>[l(Ge,{border:"",divided:""},{default:t(()=>[l(d,{"prepend-icon":"fa-solid fa-square-check",onClick:e[28]||(e[28]=a=>Ue(!0))},{default:t(()=>[n(u(o.$t("SelectAll")),1)]),_:1}),l(d,{"prepend-icon":"fa-solid fa-square-minus",onClick:e[29]||(e[29]=a=>Ue(!1))},{default:t(()=>[n(u(o.$t("SelectNone")),1)]),_:1})]),_:1})]),_:1})]),_:1}),l(A,null,{default:t(()=>[l(C,null,{default:t(()=>[l(We,{model:"Keyword",modelValue:D.value,"onUpdate:modelValue":e[31]||(e[31]=a=>D.value=a),"allow-create":""},{append:t(()=>[l(d,{icon:"$add",color:"success",onClick:e[30]||(e[30]=a=>{D.value.importKeyword=!0,i.value.recipe.keywords.push(D.value),D.value=null}),disabled:D.value==null},null,8,["disabled"])]),_:1},8,["modelValue"])]),_:1})]),_:1}),l(z,null,{default:t(()=>[(r(!0),k(S,null,J(i.value.recipe.keywords,a=>(r(),p(T,{border:"",key:a,class:Il({"bg-success":a.importKeyword}),onClick:M=>a.importKeyword=!a.importKeyword},{append:t(()=>[l(kl,{"model-value":a.importKeyword},null,8,["model-value"])]),default:t(()=>[n(u(a.label)+" ",1)]),_:2},1032,["class","onClick"]))),128))]),_:1}),l(y,null,{prev:t(()=>[l(d,{onClick:e[32]||(e[32]=a=>v.value="image_chooser")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[l(d,{onClick:e[33]||(e[33]=a=>v.value="step_editor")},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})]),_:1})]),_:1}),l(c,{value:"step_editor"},{default:t(()=>[l(A,null,{default:t(()=>[l(C,{class:"text-center"},{default:t(()=>[l(Ge,{border:"",divided:""},{default:t(()=>[l(d,{"prepend-icon":"fa-solid fa-shuffle",onClick:e[34]||(e[34]=a=>Oe())},{default:t(()=>[R(ne)?m("",!0):(r(),k("span",Nl,u(o.$t("Auto_Sort")),1))]),_:1}),l(d,{"prepend-icon":"fa-solid fa-maximize",onClick:e[35]||(e[35]=a=>je())},{default:t(()=>[R(ne)?m("",!0):(r(),k("span",Tl,u(o.$t("Split")),1))]),_:1}),l(d,{"prepend-icon":"fa-solid fa-minimize",onClick:e[36]||(e[36]=a=>ze())},{default:t(()=>[R(ne)?m("",!0):(r(),k("span",Hl,u(o.$t("Merge")),1))]),_:1})]),_:1})]),_:1})]),_:1}),(r(!0),k(S,null,J(i.value.recipe.steps,(a,M)=>(r(),p(A,{key:M},{default:t(()=>[l(C,{cols:"12"},{default:t(()=>[l(ue,{color:"primary"},{default:t(()=>[n("#"+u(M+1),1)]),_:2},1024),l(d,{variant:"plain",size:"small",icon:"",class:"float-right"},{default:t(()=>[l(x,{icon:"$menu"}),l(He,{activator:"parent"},{default:t(()=>[l(z,null,{default:t(()=>[l(T,{"prepend-icon":"$delete",onClick:$=>Me(a)},{default:t(()=>[n(u(o.$t("Delete")),1)]),_:2},1032,["onClick"]),l(T,{"prepend-icon":"fa-solid fa-maximize",onClick:$=>R(Vl)(a,`
-`)},{default:t(()=>[n(u(o.$t("Split")),1)]),_:2},1032,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024),l(C,{cols:"12",md:"6"},{default:t(()=>[l(z,null,{default:t(()=>[l(R(cl),{modelValue:a.ingredients,"onUpdate:modelValue":$=>a.ingredients=$,group:"ingredients",handle:".drag-handle","empty-insert-threshold":25},{default:t(()=>[(r(!0),k(S,null,J(a.ingredients,($,xe)=>(r(),p(T,{border:""},{append:t(()=>[l(d,{variant:"plain",size:"small",icon:"",class:"float-right"},{default:t(()=>[l(x,{icon:"$menu"}),l(He,{activator:"parent"},{default:t(()=>[l(z,null,{default:t(()=>[l(T,{"prepend-icon":"$edit",onClick:Ze=>{b.value=$,X.value=!0}},{default:t(()=>[n(u(o.$t("Edit")),1)]),_:2},1032,["onClick"]),l(T,{"prepend-icon":"$delete",onClick:Ze=>Qe(a,$)},{default:t(()=>[n(u(o.$t("Delete")),1)]),_:2},1032,["onClick"]),l(T,{"prepend-icon":"fa-solid fa-sort",onClick:Ze=>{ye.value=xe,Re.value=M,Se.value=a,fe.value=!0}},{default:t(()=>[n(u(o.$t("Move")),1)]),_:2},1032,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1024)]),default:t(()=>[l(x,{size:"small",class:"drag-handle cursor-grab mr-2",icon:"$dragHandle"}),l(ue,{density:"compact",label:"",class:"mr-1"},{default:t(()=>[n(u($.amount),1)]),_:2},1024),$.unit?(r(),p(ue,{key:0,density:"compact",label:"",class:"mr-1"},{default:t(()=>[n(u($.unit.name),1)]),_:2},1024)):m("",!0),$.food?(r(),p(ue,{key:1,density:"compact",label:"",class:"mr-1"},{default:t(()=>[n(u($.food.name),1)]),_:2},1024)):m("",!0)]),_:2},1024))),256))]),_:2},1032,["modelValue","onUpdate:modelValue"])]),_:2},1024)]),_:2},1024),l(C,{cols:"12",md:"6"},{default:t(()=>[l(j,{class:"mt-2",modelValue:a.instruction,"onUpdate:modelValue":$=>a.instruction=$,"auto-grow":""},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),l(Z)]),_:2},1024))),128)),l(A,null,{default:t(()=>[l(C,{class:"text-center"},{default:t(()=>[l(d,{icon:"$add",color:"create",onClick:e[37]||(e[37]=a=>qe())})]),_:1})]),_:1}),l(pl,{"max-width":"450px",modelValue:X.value,"onUpdate:modelValue":e[47]||(e[47]=a=>X.value=a)},{default:t(()=>[l(N,null,{default:t(()=>[l(vl,{modelValue:X.value,"onUpdate:modelValue":e[38]||(e[38]=a=>X.value=a),title:o.$t("Ingredient Editor")},null,8,["modelValue","title"]),l(ml,null,{default:t(()=>[l(K,{label:o.$t("Original_Text"),modelValue:b.value.originalText,"onUpdate:modelValue":e[39]||(e[39]=a=>b.value.originalText=a),readonly:""},null,8,["label","modelValue"]),l(K,{label:o.$t("Amount"),modelValue:b.value.amount,"onUpdate:modelValue":e[40]||(e[40]=a=>b.value.amount=a)},null,8,["label","modelValue"]),b.value.unit?(r(),p(K,{key:0,label:o.$t("Unit"),modelValue:b.value.unit.name,"onUpdate:modelValue":e[42]||(e[42]=a=>b.value.unit.name=a),rules:["required"]},{"append-inner":t(()=>[l(d,{icon:"$delete",color:"delete",onClick:e[41]||(e[41]=a=>b.value.unit=null)})]),_:1},8,["label","modelValue"])):(r(),p(d,{key:1,"prepend-icon":"$create",color:"create",class:"mb-4",onClick:e[43]||(e[43]=a=>b.value.unit={name:""})},{default:t(()=>[n(u(o.$t("Unit")),1)]),_:1})),l(K,{label:o.$t("Food"),modelValue:b.value.food.name,"onUpdate:modelValue":e[44]||(e[44]=a=>b.value.food.name=a)},null,8,["label","modelValue"]),l(K,{label:o.$t("Note"),modelValue:b.value.note,"onUpdate:modelValue":e[45]||(e[45]=a=>b.value.note=a)},null,8,["label","modelValue"])]),_:1}),l(gl,null,{default:t(()=>[l(d,{class:"float-right",color:"save",onClick:e[46]||(e[46]=a=>X.value=!1)},{default:t(()=>[n(u(o.$t("Save")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]),l(y,null,{prev:t(()=>[l(d,{onClick:e[48]||(e[48]=a=>v.value="keywords_chooser")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[l(d,{onClick:e[49]||(e[49]=a=>v.value="confirm")},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})]),_:1})]),_:1}),l(c,{value:"confirm"},{default:t(()=>[l(N,{loading:I.value||R(Ve)},{default:t(()=>[l(fl,null,{default:t(()=>[n(u(i.value.recipe.name),1)]),_:1}),l(A,null,{default:t(()=>[l(C,{cols:"12",md:"6"},{default:t(()=>[i.value.recipe.imageUrl?(r(),p(Ae,{key:0,src:i.value.recipe.imageUrl},null,8,["src"])):m("",!0)]),_:1}),l(C,{cols:"12",md:"6"},{default:t(()=>[l(K,{label:o.$t("Name"),modelValue:i.value.recipe.name,"onUpdate:modelValue":e[50]||(e[50]=a=>i.value.recipe.name=a),rules:[["maxLength",128]]},null,8,["label","modelValue"]),l(Cl,{label:o.$t("Servings"),modelValue:i.value.recipe.servings,"onUpdate:modelValue":e[51]||(e[51]=a=>i.value.recipe.servings=a),precision:2},null,8,["label","modelValue"]),l(K,{label:o.$t("ServingsText"),modelValue:i.value.recipe.servingsText,"onUpdate:modelValue":e[52]||(e[52]=a=>i.value.recipe.servingsText=a)},null,8,["label","modelValue"]),l(j,{label:o.$t("Description"),modelValue:i.value.recipe.description,"onUpdate:modelValue":e[53]||(e[53]=a=>i.value.recipe.description=a),rules:[["maxLength",512]],counter:"",clearable:""},null,8,["label","modelValue"]),l(_,{modelValue:ge.value,"onUpdate:modelValue":e[54]||(e[54]=a=>ge.value=a),label:o.$t("Edit_Recipe"),"hide-details":""},null,8,["modelValue","label"])]),_:1})]),_:1})]),_:1},8,["loading"]),l(y,null,{prev:t(()=>[l(d,{onClick:e[55]||(e[55]=a=>v.value="step_editor")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[l(d,{onClick:e[56]||(e[56]=a=>De()),disabled:!1,color:"success"},{default:t(()=>[n(u(o.$t("Import")),1)]),_:1})]),_:1})]),_:1}),l(c,{value:"app"},{default:t(()=>[l(A,null,{default:t(()=>[(r(!0),k(S,null,J(R(Sl),a=>(r(),p(C,{cols:"12",md:"3"},{default:t(()=>[l(N,{"prepend-icon":"fa-solid fa-carrot",title:a.name,onClick:M=>le.value=a.id,variant:"outlined",elevation:"1",color:le.value==a.id?"primary":""},{append:t(()=>[l(d,{icon:"$help",variant:"plain",href:a.helpUrl,target:"_blank"},null,8,["href"])]),_:2},1032,["title","onClick","color"])]),_:2},1024))),256))]),_:1}),l(y,null,{prev:t(()=>[l(d,{onClick:e[57]||(e[57]=a=>v.value="type")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[l(d,{onClick:e[58]||(e[58]=a=>v.value="file")},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})]),_:1})]),_:1}),l(c,{value:"file"},{default:t(()=>[l(R(Ke),{modelValue:ae.value,"onUpdate:modelValue":e[59]||(e[59]=a=>ae.value=a),multiple:""},null,8,["modelValue"]),l(ke,{variant:"outlined",elevation:"1",density:"compact",title:o.$t("Duplicate"),text:o.$t("import_duplicates"),class:"mt-2"},{prepend:t(()=>[l(_,{modelValue:se.value,"onUpdate:modelValue":e[60]||(e[60]=a=>se.value=a)},null,8,["modelValue"])]),_:1},8,["title","text"]),le.value=="MEALIE1"?(r(),k("div",Kl,[l(_,{modelValue:pe.value,"onUpdate:modelValue":e[61]||(e[61]=a=>pe.value=a),label:o.$t("ImportMealPlans"),"hide-details":""},null,8,["modelValue","label"]),l(_,{modelValue:ve.value,"onUpdate:modelValue":e[62]||(e[62]=a=>ve.value=a),label:o.$t("ImportShoppingList"),"hide-details":""},null,8,["modelValue","label"]),l(_,{modelValue:me.value,"onUpdate:modelValue":e[63]||(e[63]=a=>me.value=a),label:o.$t("NutritionsPerServing"),hint:o.$t("NutritionsPerServingHelp"),"persistent-hint":""},null,8,["modelValue","label","hint"])])):m("",!0),l(y,null,{prev:t(()=>[l(d,{onClick:e[64]||(e[64]=a=>v.value="app")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[l(d,{onClick:e[65]||(e[65]=a=>Ye()),disabled:ae.value.length==0,loading:R(Ve)},{default:t(()=>[n(u(o.$t("Import")),1)]),_:1},8,["disabled","loading"])]),_:1})]),_:1}),l(c,{value:"import_log"},{default:t(()=>[Y.value?(r(),p(Ul,{key:0,"import-log":Y.value},null,8,["import-log"])):m("",!0),l(y,null,{prev:t(()=>[l(d,{onClick:e[66]||(e[66]=a=>v.value="file")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[Y.value&&!Y.value.running?(r(),p(d,{key:0,to:{name:"SearchPage",query:{keywords:Y.value.keyword.id}},disabled:!1},{default:t(()=>[n(u(o.$t("View_Recipes")),1)]),_:1},8,["to"])):m("",!0)]),_:1})]),_:1}),l(c,{value:"bookmarklet"},{default:t(()=>[n(u(o.$t("BookmarkletImportSubtitle"))+" ",1),P("ol",null,[P("li",null,"1. "+u(o.$t("BookmarkletHelp1")),1),P("li",null,[l(d,{href:Xe.value,color:"primary"},{default:t(()=>[n(u(o.$t("ImportIntoTandoor")),1)]),_:1},8,["href"])]),P("li",null,"2. "+u(o.$t("BookmarkletHelp2")),1),P("li",null,"3. "+u(o.$t("BookmarkletHelp3")),1)]),l(y,null,{prev:t(()=>[l(d,{onClick:e[67]||(e[67]=a=>v.value="type")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>e[76]||(e[76]=[])),_:1})]),_:1}),l(c,{value:"url_list_input"},{default:t(()=>[l(j,{hint:o.$t("one_url_per_line"),"auto-grow":"","max-rows":"20","persistent-hint":"",modelValue:E.value,"onUpdate:modelValue":e[68]||(e[68]=a=>E.value=a)},null,8,["hint","modelValue"]),l(y,null,{prev:t(()=>[l(d,{onClick:e[69]||(e[69]=a=>v.value="type")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[l(d,{onClick:e[70]||(e[70]=a=>{v.value="url_list_import",U()}),disabled:E.value.length==0},{default:t(()=>[n(u(o.$t("Import")),1)]),_:1},8,["disabled"])]),_:1})]),_:1}),l(c,{value:"url_list_import"},{default:t(()=>[l(Fe,{height:16,"model-value":te.value.length/E.value.split(`
-`).length*100},{default:t(()=>[n(u(te.value.length)+" / "+u(E.value.split(`
-`).length),1)]),_:1},8,["model-value"]),l(z,null,{default:t(()=>[(r(!0),k(S,null,J(te.value,a=>(r(),p(T,{border:"",title:a.name,subtitle:a.sourceUrl,key:a.id,to:{name:"RecipeViewPage",params:{id:a.id}},target:"_blank"},null,8,["title","subtitle","to"]))),128))]),_:1}),l(y,null,{prev:t(()=>[l(d,{onClick:e[71]||(e[71]=a=>v.value="url_list_input")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[l(d,{onClick:e[72]||(e[72]=a=>Le()),disabled:I.value},{default:t(()=>[n(u(o.$t("Reset")),1)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1}),l(A,{dense:""},{default:t(()=>[l(C,{class:"text-center"},{default:t(()=>[l(d,{size:"small","prepend-icon":"fa-solid fa-arrow-rotate-left",variant:"tonal",color:"warning",onClick:e[74]||(e[74]=s=>Le())},{default:t(()=>[n(u(o.$t("Reset")),1)]),_:1})]),_:1})]),_:1})]),_:1}),l(Al,{"step-index":Re.value,step:Se.value,recipe:i.value.recipe,modelValue:fe.value,"onUpdate:modelValue":e[75]||(e[75]=s=>fe.value=s),"ingredient-index":ye.value},null,8,["step-index","step","recipe","modelValue","ingredient-index"])],64))}});export{jl as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeImportPage-DvlxImUu.3c0013ac725e.js.gz b/config/tandoor/staticfiles/vue3/assets/RecipeImportPage-DvlxImUu.3c0013ac725e.js.gz
deleted file mode 100644
index 9fa9751b..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/RecipeImportPage-DvlxImUu.3c0013ac725e.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeImportPage-DvlxImUu.js b/config/tandoor/staticfiles/vue3/assets/RecipeImportPage-DvlxImUu.js
deleted file mode 100644
index 74433773..00000000
--- a/config/tandoor/staticfiles/vue3/assets/RecipeImportPage-DvlxImUu.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import{d as Ee,b as k,F as S,h as p,e as m,k as A,w as t,g as l,V as C,b7 as Fe,j as n,t as u,f as r,b8 as _e,a as el,u as ll,a7 as tl,c as al,r as g,L as Ce,o as ol,A as q,s as ul,Q as G,R as h,D as il,K as nl,B as Z,M as N,l as R,z as d,W as rl,aR as Ie,S as K,ag as We,b1 as dl,G as x,aa as ke,ab as sl,x as z,p as J,i as P,b9 as Ae,ba as Ge,aN as pl,aO as vl,O as ml,aP as gl,N as fl,af as Cl,U as _,ad as Ne,Y as Te,y as T,n as Il,bb as kl,ai as ue,H as He}from"./main-BhFWIRV_.js";import{_ as Al,m as bl,s as $l,a as Vl,l as cl}from"./step_utils-C0FnMRXv.js";import{u as yl}from"./useFileApi-4KcBp6Fj.js";import{I as Sl}from"./integration_utils-sX7uYpAT.js";import{V as j}from"./VTextarea-Dyu7dPGe.js";import{e as Rl,V as wl,a as V,b as Bl,c,d as y}from"./VStepper-lPKDXqVi.js";import{V as Ke}from"./VFileUpload-DmaEfjuX.js";import"./model_utils-CVQgSPL_.js";import"./fileDrop-BjiZTCss.js";const Ul=Ee({__name:"ImportLogViewer",props:{importLog:{type:{},required:!0}},setup(ee){const U=ee;return(ie,w)=>(r(),k(S,null,[U.importLog.importedRecipes!=null&&U.importLog.totalRecipes!=null?(r(),p(A,{key:0},{default:t(()=>[l(C,null,{default:t(()=>[l(Fe,{"model-value":U.importLog.importedRecipes/U.importLog.totalRecipes*100,height:"24",color:"primary"},{default:t(()=>[n(u(U.importLog.importedRecipes)+" / "+u(U.importLog.totalRecipes),1)]),_:1},8,["model-value"])]),_:1})]),_:1})):m("",!0),U.importLog.importedRecipes!=null&&U.importLog.totalRecipes!=null?(r(),p(A,{key:1},{default:t(()=>[l(C,null,{default:t(()=>[l(j,{"model-value":ee.importLog.msg,"max-rows":"25",loading:ee.importLog.running,"auto-grow":""},null,8,["model-value","loading"])]),_:1})]),_:1})):m("",!0)],64))}}),Ll="data:text/javascript;base64,KGZ1bmN0aW9uKCl7CgogICAgdmFyIHYgPSAiMS4zLjIiOwoKICAgIGlmICh3aW5kb3cualF1ZXJ5ID09PSB1bmRlZmluZWQgfHwgd2luZG93LmpRdWVyeS5mbi5qcXVlcnkgPCB2KSB7CiAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTsKICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgc2NyaXB0LnNyYyA9ICJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8iICsgdiArICIvanF1ZXJ5Lm1pbi5qcyI7CiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpewogICAgICAgICAgICBpZiAoIWRvbmUgJiYgKCF0aGlzLnJlYWR5U3RhdGUgfHwgdGhpcy5yZWFkeVN0YXRlID09ICJsb2FkZWQiIHx8IHRoaXMucmVhZHlTdGF0ZSA9PSAiY29tcGxldGUiKSkgewogICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgICAgICAgICAgICBpbml0Qm9va21hcmtsZXQoKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpOwogICAgfSBlbHNlIHsKICAgICAgICBpbml0Qm9va21hcmtsZXQoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGluaXRCb29rbWFya2xldCgpIHsKICAgICAgICAod2luZG93LmJvb2ttYXJrbGV0VGFuZG9vciA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBsZXQgcmVjaXBlID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTAogICAgICAgICAgICBsZXQgd2luZG93TmFtZSA9ICJJbXBvcnRSZWNpcGUiCiAgICAgICAgICAgIGxldCB1cmwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW1wb3J0VVJMJykKICAgICAgICAgICAgbGV0IHJlZGlyZWN0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3JlZGlyZWN0VVJMJykKICAgICAgICAgICAgbGV0IHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJykKICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHsgJ3VybCc6IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSwgJ2h0bWwnIDogcmVjaXBlfTsgCiAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICAgICAgeGhyLm9wZW4oJ1BPU1QnLCB1cmwsIHRydWUpOwogICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTsKICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyB0b2tlbik7CgogICAgICAgICAgICAvLyBsaXN0ZW4gZm9yIGBvbmxvYWRgIGV2ZW50CiAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7CiAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIHJlc3BvbnNlCiAgICAgICAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCAmJiB4aHIuc3RhdHVzID09IDIwMSkgewogICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlIEpTT04gZGF0YQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHJlZGlyZWN0LmNvbmNhdCgnP2Jvb2ttYXJrbGV0X2ltcG9ydD0nLCBKU09OLnBhcnNlKHhoci5yZXNwb25zZSkuaWQpICkKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IhJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KHBhcmFtcykpOwogICAgICAgICAgICB9CiAgICAgICAgKSgpOwogICAgfQp9KSgpOw==",Zl={key:1},Wl={class:"text-h5"},Gl={class:"text-h5"},Nl={key:0},Tl={key:0},Hl={key:0},Kl={key:0},jl=Ee({__name:"RecipeImportPage",setup(ee){function U(){de.value=E.value.split(`
-`),I.value=!0,ie()}function ie(){let o=new q,e=de.value.pop();e!=null&&e.trim()!=""?o.apiRecipeFromSourceCreate({recipeFromSource:{url:e}}).then(s=>{s.recipe&&o.apiRecipeCreate({recipe:s.recipe}).then(B=>{te.value.push(B),be(B.id,null,s.recipe?.imageUrl).then(a=>{setTimeout(ie,500)})}).catch(B=>{}).finally(()=>{I.value=!1})}).catch(s=>{s.response.status==429?G().addPreparedMessage(Ne.RATE_LIMIT,s):G().addMessage(Te.WARNING,Je("ErrorUrlListImport"),8e3,e),E.value=e+`
-`+de.value.join(`
-`),v.value="url_list_input"}).finally(()=>{}):(G().addPreparedMessage(Ne.CREATE_SUCCESS),I.value=!1)}const w=_e("history",{}),{mobile:ne}=el(),re=ul(),{t:Je}=ll(),{updateRecipeImage:be,doAiImport:$e,doAppImport:Pe,fileApiLoading:Ve}=yl(),{getDjangoUrl:ce}=tl(),Xe=al(()=>`javascript:(function(){if(window.bookmarkletTandoor!==undefined){bookmarkletTandoor();} else {localStorage.setItem("importURL", "${ce("/api/bookmarklet-import/")}");localStorage.setItem("redirectURL", "${ce("/recipe/import/")}");localStorage.setItem("token", "${oe.value}");document.body.appendChild(document.createElement("script")).src="${Ll}"}})()`),f=g("url"),le=g("DEFAULT"),v=g("type"),X=g(!1),I=g(!1),W=g(""),E=g(""),de=g([]),te=g([]),L=g(""),ae=g([]),se=g(!1),pe=g(!0),ve=g(!0),me=g(!1),Y=g(null),Q=g(null),H=g("file"),O=g(Ce().activeSpace.aiDefaultProvider),ge=g(!1),oe=g(""),i=g({}),D=g(null),b=g({}),ye=g(0),fe=g(!1),Se=g({}),Re=g(0);ol(()=>{he(),w.url&&typeof w.url=="string"&&(W.value=w.url,F({url:W.value})),w.text&&typeof w.text=="string"&&(W.value=w.text,F({url:W.value})),w.bookmarklet_import&&typeof w.bookmarklet_import=="string"&&!isNaN(parseInt(w.bookmarklet_import))&&(f.value="url",F({bookmarklet:parseInt(w.bookmarklet_import)}))});function F(o){let e=new q;I.value=!0,i.value={},e.apiRecipeFromSourceCreate({recipeFromSource:o}).then(s=>{if(s.recipeId!=null){re.push({name:"RecipeViewPage",params:{id:s.recipeId}});return}i.value=s,i.value.duplicates&&i.value.duplicates.length>0?v.value="duplicates":i.value.images&&i.value.images.length>0?v.value="image_chooser":v.value="keywords_chooser"}).catch(s=>{s.response.json().then(B=>{B.error?i.value=B:G().addError(h.FETCH_ERROR,B)})}).finally(()=>{I.value=!1})}function we(){let o=null;O.value==null&&G().addError(h.CREATE_ERROR,"No AI Provider selected"),Q.value!=null&&H.value=="file"?o=$e(O.value.id,Q.value):L.value!=""&&H.value=="text"&&(o=$e(O.value.id,null,L.value)),o!=null&&(I.value=!0,o.then(e=>{I.value=!1,i.value=e,i.value.error||(i.value.images&&i.value.images.length>0?v.value="image_chooser":v.value="keywords_chooser")}).catch(e=>{G().addError(h.FETCH_ERROR,e)}))}function Ye(){Pe(ae.value,le.value,se.value,pe.value,ve.value,me.value).then(o=>{v.value="import_log",Be(o)})}function Be(o){new q().apiImportLogRetrieve({id:o}).then(s=>{Y.value=s,s.running&&setTimeout(()=>{Be(o)},1e3)}).catch(s=>{G().addError(h.FETCH_ERROR,s)})}function De(){let o=new q;i.value.recipe&&(I.value=!0,i.value.recipe.keywords=i.value.recipe.keywords.filter(e=>e.importKeyword),o.apiRecipeCreate({recipe:i.value.recipe}).then(e=>{be(e.id,null,i.value.recipe?.imageUrl).then(s=>{ge.value?re.push({name:"ModelEditPage",params:{id:e.id,model:"recipe"}}):re.push({name:"RecipeViewPage",params:{id:e.id}})})}).catch(e=>{G().addError(h.CREATE_ERROR,e)}).finally(()=>{I.value=!1}))}function Me(o){i.value.recipe&&i.value.recipe.steps.splice(i.value.recipe.steps.findIndex(e=>e===o),1)}function ze(){i.value.recipe&&i.value.recipe.steps&&(i.value.recipe.steps=bl(i.value.recipe.steps))}function je(){i.value.recipe&&i.value.recipe.steps&&$l(i.value.recipe.steps,`
-`)}function Qe(o,e){o.ingredients=o.ingredients.filter(s=>s!=e)}function Oe(){if(i.value.recipe){let o=i.value.recipe.steps.flatMap(e=>e.ingredients);i.value.recipe.steps.forEach(e=>e.ingredients=[]),o.forEach(e=>{let s=!1;i.value.recipe.steps.forEach(B=>{B.instruction.toLowerCase().includes(e.food.name.trim().toLowerCase())&&!s&&(s=!0,B.ingredients.push(e))}),s||i.value.recipe.steps[0].ingredients.push(e)})}else G().addMessage(Te.ERROR,"no steps found to split")}function Ue(o){i.value.recipe?.keywords.forEach(e=>{e.importKeyword=o})}function qe(){i.value.recipe?.steps.push({ingredients:[],instruction:""})}function he(){let o=new q;o.apiAccessTokenList().then(e=>{e.forEach(s=>{s.scope=="bookmarklet"&&(oe.value=s.token)}),oe.value==""&&o.apiAccessTokenCreate({accessToken:{scope:"bookmarklet",expires:il.now().plus({year:100}).toJSDate()}}).then(s=>{oe.value=s.token})})}function Le(){location.reload()}return(o,e)=>(r(),k(S,null,[l(nl,null,{default:t(()=>[l(A,null,{default:t(()=>[l(C,null,{default:t(()=>[l(Rl,{modelValue:v.value,"onUpdate:modelValue":e[73]||(e[73]=s=>v.value=s)},{default:t(({prev:s,next:B})=>[l(wl,null,{default:t(()=>[l(V,{title:o.$t("Type"),value:"type",icon:" "},null,8,["title"]),l(Z),["url","ai","source"].includes(f.value)?(r(),k(S,{key:0},[l(V,{title:o.$t("Import"),value:"url",icon:" "},null,8,["title"]),l(Z),i.value.duplicates&&i.value.duplicates.length>0?(r(),k(S,{key:0},[l(V,{title:o.$t("Duplicate"),value:"duplicates",icon:" "},null,8,["title"]),l(Z)],64)):m("",!0),l(V,{title:o.$t("Image"),value:"image_chooser",icon:" "},null,8,["title"]),l(Z),l(V,{title:o.$t("Keywords"),value:"keywords_chooser",icon:" "},null,8,["title"]),l(Z),l(V,{title:o.$t("Steps"),value:"step_editor",icon:" "},null,8,["title"]),l(Z),l(V,{title:o.$t("Save"),value:"confirm",icon:" "},null,8,["title"])],64)):m("",!0),f.value=="app"?(r(),k(S,{key:1},[l(V,{title:o.$t("App"),value:"app",icon:" "},null,8,["title"]),l(Z),l(V,{title:o.$t("File"),value:"file",icon:" "},null,8,["title"]),l(Z),l(V,{title:o.$t("Import"),value:"import_log",icon:" "},null,8,["title"])],64)):m("",!0),f.value=="bookmarklet"?(r(),p(V,{key:2,title:o.$t("Bookmarklet"),value:"bookmarklet",icon:" "},null,8,["title"])):m("",!0),f.value=="url-list"?(r(),k(S,{key:3},[l(V,{title:o.$t("UrlList"),value:"url_list_input",icon:" "},null,8,["title"]),l(Z),l(V,{title:o.$t("Import"),value:"url_list_import",icon:" "},null,8,["title"])],64)):m("",!0)]),_:1}),l(Bl,null,{default:t(()=>[l(c,{value:"type"},{default:t(()=>[l(A,null,{default:t(()=>[l(C,{cols:"12",md:"6"},{default:t(()=>[l(N,{title:o.$t("Url_Import"),subtitle:o.$t("UrlImportSubtitle"),"prepend-icon":"$import",variant:"outlined",color:f.value=="url"?"primary":"",elevation:"1",onClick:e[0]||(e[0]=a=>f.value="url")},null,8,["title","subtitle","color"])]),_:1}),R(Ce)().activeSpace.aiEnabled?(r(),p(C,{key:0,cols:"12",md:"6"},{default:t(()=>[l(N,{title:o.$t("AI"),subtitle:o.$t("AIImportSubtitle"),"prepend-icon":"$ai",variant:"outlined",color:f.value=="ai"?"primary":"",elevation:"1",onClick:e[1]||(e[1]=a=>f.value="ai"),disabled:!R(Ce)().activeSpace.aiEnabled},null,8,["title","subtitle","color","disabled"])]),_:1})):m("",!0),l(C,{cols:"12",md:"6"},{default:t(()=>[l(N,{title:o.$t("App"),subtitle:o.$t("AppImportSubtitle"),"prepend-icon":"fa-solid fa-folder-open",variant:"outlined",color:f.value=="app"?"primary":"",elevation:"1",onClick:e[2]||(e[2]=a=>f.value="app")},null,8,["title","subtitle","color"])]),_:1}),l(C,{cols:"12",md:"6"},{default:t(()=>[l(N,{title:o.$t("Bookmarklet"),subtitle:o.$t("BookmarkletImportSubtitle"),"prepend-icon":"fa-solid fa-bookmark",variant:"outlined",color:f.value=="bookmarklet"?"primary":"",elevation:"1",onClick:e[3]||(e[3]=a=>f.value="bookmarklet")},null,8,["title","subtitle","color"])]),_:1}),l(C,{cols:"12",md:"6"},{default:t(()=>[l(N,{title:"JSON/HTML",subtitle:o.$t("SourceImportSubtitle"),"prepend-icon":"fa-solid fa-code",variant:"outlined",color:f.value=="source"?"primary":"",elevation:"1",onClick:e[4]||(e[4]=a=>f.value="source")},null,8,["subtitle","color"])]),_:1}),l(C,{cols:"12",md:"6"},{default:t(()=>[l(N,{title:o.$t("UrlList"),subtitle:o.$t("UrlListSubtitle"),"prepend-icon":"fa-solid fa-list",variant:"outlined",color:f.value=="url-list"?"primary":"",elevation:"1",onClick:e[5]||(e[5]=a=>f.value="url-list")},null,8,["title","subtitle","color"])]),_:1})]),_:1}),l(y,null,{prev:t(()=>[l(rl)]),next:t(()=>[["url","ai","source"].includes(f.value)?(r(),p(d,{key:0,onClick:e[6]||(e[6]=a=>v.value="url"),color:"success"},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})):m("",!0),f.value=="app"?(r(),p(d,{key:1,onClick:e[7]||(e[7]=a=>v.value="app"),color:"success"},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})):m("",!0),f.value=="bookmarklet"?(r(),p(d,{key:2,onClick:e[8]||(e[8]=a=>v.value="bookmarklet"),color:"success"},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})):m("",!0),f.value=="url-list"?(r(),p(d,{key:3,onClick:e[9]||(e[9]=a=>v.value="url_list_input"),color:"success"},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})):m("",!0)]),_:1})]),_:1}),l(c,{value:"url"},{default:t(()=>[f.value=="url"?(r(),p(K,{key:0,label:o.$t("Website")+" (https://...)",modelValue:W.value,"onUpdate:modelValue":e[10]||(e[10]=a=>W.value=a),loading:I.value,autofocus:"",onKeydown:e[11]||(e[11]=Ie(a=>F({url:W.value}),["enter"]))},null,8,["label","modelValue","loading"])):m("",!0),f.value=="ai"?(r(),k("div",Zl,[l(A,null,{default:t(()=>[l(C,{cols:"12",md:"6"},{default:t(()=>[l(We,{model:"AiProvider",modelValue:O.value,"onUpdate:modelValue":e[12]||(e[12]=a=>O.value=a),"hide-details":""},{append:t(()=>[l(d,{icon:"$settings",to:{name:"ModelListPage",params:{model:"AiProvider"}},color:"success"})]),_:1},8,["modelValue"])]),_:1}),l(C,{cols:"12",md:"6"},{default:t(()=>[l(dl,{class:"mb-2",border:"",divided:"",modelValue:H.value,"onUpdate:modelValue":e[13]||(e[13]=a=>H.value=a)},{default:t(()=>[l(d,{value:"file"},{default:t(()=>[n(u(o.$t("File")),1)]),_:1}),l(d,{value:"text"},{default:t(()=>[n(u(o.$t("Text")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1}),H.value=="file"?(r(),p(R(Ke),{key:0,modelValue:Q.value,"onUpdate:modelValue":e[14]||(e[14]=a=>Q.value=a),loading:I.value,clearable:""},{icon:t(()=>[l(x,{icon:"fa-solid fa-file-pdf"}),n(" "+u(o.$t("or"))+" ",1),l(x,{icon:"fa-solid fa-file-image"})]),_:1},8,["modelValue","loading"])):m("",!0),H.value=="text"?(r(),p(j,{key:1,modelValue:L.value,"onUpdate:modelValue":e[15]||(e[15]=a=>L.value=a),loading:I.value,autofocus:"",onKeydown:e[16]||(e[16]=Ie(a=>we(),["enter"]))},null,8,["modelValue","loading"])):m("",!0)])):m("",!0),f.value=="source"?(r(),p(j,{key:2,modelValue:L.value,"onUpdate:modelValue":e[17]||(e[17]=a=>L.value=a),label:"JSON/HTML",loading:I.value,hint:o.$t("SourceImportHelp"),"persistent-hint":"",autofocus:"",onKeydown:e[18]||(e[18]=Ie(a=>F({data:L.value}),["enter"]))},null,8,["modelValue","loading","hint"])):m("",!0),i.value.error?(r(),p(ke,{key:3,title:o.$t("Error"),text:i.value.msg,color:"warning"},null,8,["title","text"])):m("",!0),l(y,null,{prev:t(()=>[l(d,{onClick:e[19]||(e[19]=a=>{v.value="type",i.value={}})},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[f.value=="url"?(r(),p(d,{key:0,onClick:e[20]||(e[20]=a=>F({url:W.value})),disabled:W.value=="",loading:I.value},{default:t(()=>[n(u(o.$t("Load")),1)]),_:1},8,["disabled","loading"])):m("",!0),f.value=="source"?(r(),p(d,{key:1,onClick:e[21]||(e[21]=a=>F({data:L.value})),disabled:L.value=="",loading:I.value},{default:t(()=>[n(u(o.$t("Load")),1)]),_:1},8,["disabled","loading"])):m("",!0),f.value=="ai"?(r(),p(d,{key:2,onClick:e[22]||(e[22]=a=>we()),disabled:H.value=="file"&&Q.value==null||H.value=="text"&&L.value=="",loading:I.value},{default:t(()=>[n(u(o.$t("Load")),1)]),_:1},8,["disabled","loading"])):m("",!0)]),_:1})]),_:1}),l(c,{value:"duplicates"},{default:t(()=>[i.value.duplicates&&i.value.duplicates.length>0?(r(),p(ke,{key:0,variant:"tonal"},{default:t(()=>[l(sl,null,{default:t(()=>[n(u(o.$t("Duplicate")),1)]),_:1}),n(" "+u(o.$t("DuplicateFoundInfo"))+" ",1),l(z,null,{default:t(()=>[(r(!0),k(S,null,J(i.value.duplicates,a=>(r(),p(T,{to:{name:"RecipeViewPage",params:{id:a.id}},key:a.id},{default:t(()=>[n(u(a.name)+" (#"+u(a.id)+") ",1)]),_:2},1032,["to"]))),128))]),_:1})]),_:1})):m("",!0),l(y,null,{prev:t(()=>[l(d,{onClick:e[23]||(e[23]=a=>v.value="url")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[l(d,{onClick:e[24]||(e[24]=a=>v.value="image_chooser")},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})]),_:1})]),_:1}),l(c,{value:"image_chooser"},{default:t(()=>[l(A,null,{default:t(()=>[l(C,{cols:"12",md:"6"},{default:t(()=>[P("h2",Wl,u(o.$t("Selected")),1),l(Ae,{"max-height":"30vh",src:i.value.recipe.imageUrl},null,8,["src"])]),_:1}),l(C,{cols:"12",md:"6"},{default:t(()=>[P("h2",Gl,u(o.$t("Available")),1),l(A,{dense:""},{default:t(()=>[(r(!0),k(S,null,J(i.value.images,a=>(r(),p(C,{cols:"4"},{default:t(()=>[l(Ae,{"max-height":"10vh",cover:"","aspect-ratio":"1",src:a,onClick:M=>i.value.recipe.imageUrl=a},null,8,["src","onClick"])]),_:2},1024))),256))]),_:1})]),_:1})]),_:1}),l(y,null,{prev:t(()=>[i.value.duplicates&&i.value.duplicates.length>0?(r(),p(d,{key:0,onClick:e[25]||(e[25]=a=>v.value="duplicates")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})):(r(),p(d,{key:1,onClick:e[26]||(e[26]=a=>v.value="url")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1}))]),next:t(()=>[l(d,{onClick:e[27]||(e[27]=a=>v.value="keywords_chooser")},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})]),_:1})]),_:1}),l(c,{value:"keywords_chooser"},{default:t(()=>[l(A,null,{default:t(()=>[l(C,{class:"text-center"},{default:t(()=>[l(Ge,{border:"",divided:""},{default:t(()=>[l(d,{"prepend-icon":"fa-solid fa-square-check",onClick:e[28]||(e[28]=a=>Ue(!0))},{default:t(()=>[n(u(o.$t("SelectAll")),1)]),_:1}),l(d,{"prepend-icon":"fa-solid fa-square-minus",onClick:e[29]||(e[29]=a=>Ue(!1))},{default:t(()=>[n(u(o.$t("SelectNone")),1)]),_:1})]),_:1})]),_:1})]),_:1}),l(A,null,{default:t(()=>[l(C,null,{default:t(()=>[l(We,{model:"Keyword",modelValue:D.value,"onUpdate:modelValue":e[31]||(e[31]=a=>D.value=a),"allow-create":""},{append:t(()=>[l(d,{icon:"$add",color:"success",onClick:e[30]||(e[30]=a=>{D.value.importKeyword=!0,i.value.recipe.keywords.push(D.value),D.value=null}),disabled:D.value==null},null,8,["disabled"])]),_:1},8,["modelValue"])]),_:1})]),_:1}),l(z,null,{default:t(()=>[(r(!0),k(S,null,J(i.value.recipe.keywords,a=>(r(),p(T,{border:"",key:a,class:Il({"bg-success":a.importKeyword}),onClick:M=>a.importKeyword=!a.importKeyword},{append:t(()=>[l(kl,{"model-value":a.importKeyword},null,8,["model-value"])]),default:t(()=>[n(u(a.label)+" ",1)]),_:2},1032,["class","onClick"]))),128))]),_:1}),l(y,null,{prev:t(()=>[l(d,{onClick:e[32]||(e[32]=a=>v.value="image_chooser")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[l(d,{onClick:e[33]||(e[33]=a=>v.value="step_editor")},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})]),_:1})]),_:1}),l(c,{value:"step_editor"},{default:t(()=>[l(A,null,{default:t(()=>[l(C,{class:"text-center"},{default:t(()=>[l(Ge,{border:"",divided:""},{default:t(()=>[l(d,{"prepend-icon":"fa-solid fa-shuffle",onClick:e[34]||(e[34]=a=>Oe())},{default:t(()=>[R(ne)?m("",!0):(r(),k("span",Nl,u(o.$t("Auto_Sort")),1))]),_:1}),l(d,{"prepend-icon":"fa-solid fa-maximize",onClick:e[35]||(e[35]=a=>je())},{default:t(()=>[R(ne)?m("",!0):(r(),k("span",Tl,u(o.$t("Split")),1))]),_:1}),l(d,{"prepend-icon":"fa-solid fa-minimize",onClick:e[36]||(e[36]=a=>ze())},{default:t(()=>[R(ne)?m("",!0):(r(),k("span",Hl,u(o.$t("Merge")),1))]),_:1})]),_:1})]),_:1})]),_:1}),(r(!0),k(S,null,J(i.value.recipe.steps,(a,M)=>(r(),p(A,{key:M},{default:t(()=>[l(C,{cols:"12"},{default:t(()=>[l(ue,{color:"primary"},{default:t(()=>[n("#"+u(M+1),1)]),_:2},1024),l(d,{variant:"plain",size:"small",icon:"",class:"float-right"},{default:t(()=>[l(x,{icon:"$menu"}),l(He,{activator:"parent"},{default:t(()=>[l(z,null,{default:t(()=>[l(T,{"prepend-icon":"$delete",onClick:$=>Me(a)},{default:t(()=>[n(u(o.$t("Delete")),1)]),_:2},1032,["onClick"]),l(T,{"prepend-icon":"fa-solid fa-maximize",onClick:$=>R(Vl)(a,`
-`)},{default:t(()=>[n(u(o.$t("Split")),1)]),_:2},1032,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024),l(C,{cols:"12",md:"6"},{default:t(()=>[l(z,null,{default:t(()=>[l(R(cl),{modelValue:a.ingredients,"onUpdate:modelValue":$=>a.ingredients=$,group:"ingredients",handle:".drag-handle","empty-insert-threshold":25},{default:t(()=>[(r(!0),k(S,null,J(a.ingredients,($,xe)=>(r(),p(T,{border:""},{append:t(()=>[l(d,{variant:"plain",size:"small",icon:"",class:"float-right"},{default:t(()=>[l(x,{icon:"$menu"}),l(He,{activator:"parent"},{default:t(()=>[l(z,null,{default:t(()=>[l(T,{"prepend-icon":"$edit",onClick:Ze=>{b.value=$,X.value=!0}},{default:t(()=>[n(u(o.$t("Edit")),1)]),_:2},1032,["onClick"]),l(T,{"prepend-icon":"$delete",onClick:Ze=>Qe(a,$)},{default:t(()=>[n(u(o.$t("Delete")),1)]),_:2},1032,["onClick"]),l(T,{"prepend-icon":"fa-solid fa-sort",onClick:Ze=>{ye.value=xe,Re.value=M,Se.value=a,fe.value=!0}},{default:t(()=>[n(u(o.$t("Move")),1)]),_:2},1032,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1024)]),default:t(()=>[l(x,{size:"small",class:"drag-handle cursor-grab mr-2",icon:"$dragHandle"}),l(ue,{density:"compact",label:"",class:"mr-1"},{default:t(()=>[n(u($.amount),1)]),_:2},1024),$.unit?(r(),p(ue,{key:0,density:"compact",label:"",class:"mr-1"},{default:t(()=>[n(u($.unit.name),1)]),_:2},1024)):m("",!0),$.food?(r(),p(ue,{key:1,density:"compact",label:"",class:"mr-1"},{default:t(()=>[n(u($.food.name),1)]),_:2},1024)):m("",!0)]),_:2},1024))),256))]),_:2},1032,["modelValue","onUpdate:modelValue"])]),_:2},1024)]),_:2},1024),l(C,{cols:"12",md:"6"},{default:t(()=>[l(j,{class:"mt-2",modelValue:a.instruction,"onUpdate:modelValue":$=>a.instruction=$,"auto-grow":""},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),l(Z)]),_:2},1024))),128)),l(A,null,{default:t(()=>[l(C,{class:"text-center"},{default:t(()=>[l(d,{icon:"$add",color:"create",onClick:e[37]||(e[37]=a=>qe())})]),_:1})]),_:1}),l(pl,{"max-width":"450px",modelValue:X.value,"onUpdate:modelValue":e[47]||(e[47]=a=>X.value=a)},{default:t(()=>[l(N,null,{default:t(()=>[l(vl,{modelValue:X.value,"onUpdate:modelValue":e[38]||(e[38]=a=>X.value=a),title:o.$t("Ingredient Editor")},null,8,["modelValue","title"]),l(ml,null,{default:t(()=>[l(K,{label:o.$t("Original_Text"),modelValue:b.value.originalText,"onUpdate:modelValue":e[39]||(e[39]=a=>b.value.originalText=a),readonly:""},null,8,["label","modelValue"]),l(K,{label:o.$t("Amount"),modelValue:b.value.amount,"onUpdate:modelValue":e[40]||(e[40]=a=>b.value.amount=a)},null,8,["label","modelValue"]),b.value.unit?(r(),p(K,{key:0,label:o.$t("Unit"),modelValue:b.value.unit.name,"onUpdate:modelValue":e[42]||(e[42]=a=>b.value.unit.name=a),rules:["required"]},{"append-inner":t(()=>[l(d,{icon:"$delete",color:"delete",onClick:e[41]||(e[41]=a=>b.value.unit=null)})]),_:1},8,["label","modelValue"])):(r(),p(d,{key:1,"prepend-icon":"$create",color:"create",class:"mb-4",onClick:e[43]||(e[43]=a=>b.value.unit={name:""})},{default:t(()=>[n(u(o.$t("Unit")),1)]),_:1})),l(K,{label:o.$t("Food"),modelValue:b.value.food.name,"onUpdate:modelValue":e[44]||(e[44]=a=>b.value.food.name=a)},null,8,["label","modelValue"]),l(K,{label:o.$t("Note"),modelValue:b.value.note,"onUpdate:modelValue":e[45]||(e[45]=a=>b.value.note=a)},null,8,["label","modelValue"])]),_:1}),l(gl,null,{default:t(()=>[l(d,{class:"float-right",color:"save",onClick:e[46]||(e[46]=a=>X.value=!1)},{default:t(()=>[n(u(o.$t("Save")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]),l(y,null,{prev:t(()=>[l(d,{onClick:e[48]||(e[48]=a=>v.value="keywords_chooser")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[l(d,{onClick:e[49]||(e[49]=a=>v.value="confirm")},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})]),_:1})]),_:1}),l(c,{value:"confirm"},{default:t(()=>[l(N,{loading:I.value||R(Ve)},{default:t(()=>[l(fl,null,{default:t(()=>[n(u(i.value.recipe.name),1)]),_:1}),l(A,null,{default:t(()=>[l(C,{cols:"12",md:"6"},{default:t(()=>[i.value.recipe.imageUrl?(r(),p(Ae,{key:0,src:i.value.recipe.imageUrl},null,8,["src"])):m("",!0)]),_:1}),l(C,{cols:"12",md:"6"},{default:t(()=>[l(K,{label:o.$t("Name"),modelValue:i.value.recipe.name,"onUpdate:modelValue":e[50]||(e[50]=a=>i.value.recipe.name=a),rules:[["maxLength",128]]},null,8,["label","modelValue"]),l(Cl,{label:o.$t("Servings"),modelValue:i.value.recipe.servings,"onUpdate:modelValue":e[51]||(e[51]=a=>i.value.recipe.servings=a),precision:2},null,8,["label","modelValue"]),l(K,{label:o.$t("ServingsText"),modelValue:i.value.recipe.servingsText,"onUpdate:modelValue":e[52]||(e[52]=a=>i.value.recipe.servingsText=a)},null,8,["label","modelValue"]),l(j,{label:o.$t("Description"),modelValue:i.value.recipe.description,"onUpdate:modelValue":e[53]||(e[53]=a=>i.value.recipe.description=a),rules:[["maxLength",512]],counter:"",clearable:""},null,8,["label","modelValue"]),l(_,{modelValue:ge.value,"onUpdate:modelValue":e[54]||(e[54]=a=>ge.value=a),label:o.$t("Edit_Recipe"),"hide-details":""},null,8,["modelValue","label"])]),_:1})]),_:1})]),_:1},8,["loading"]),l(y,null,{prev:t(()=>[l(d,{onClick:e[55]||(e[55]=a=>v.value="step_editor")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[l(d,{onClick:e[56]||(e[56]=a=>De()),disabled:!1,color:"success"},{default:t(()=>[n(u(o.$t("Import")),1)]),_:1})]),_:1})]),_:1}),l(c,{value:"app"},{default:t(()=>[l(A,null,{default:t(()=>[(r(!0),k(S,null,J(R(Sl),a=>(r(),p(C,{cols:"12",md:"3"},{default:t(()=>[l(N,{"prepend-icon":"fa-solid fa-carrot",title:a.name,onClick:M=>le.value=a.id,variant:"outlined",elevation:"1",color:le.value==a.id?"primary":""},{append:t(()=>[l(d,{icon:"$help",variant:"plain",href:a.helpUrl,target:"_blank"},null,8,["href"])]),_:2},1032,["title","onClick","color"])]),_:2},1024))),256))]),_:1}),l(y,null,{prev:t(()=>[l(d,{onClick:e[57]||(e[57]=a=>v.value="type")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[l(d,{onClick:e[58]||(e[58]=a=>v.value="file")},{default:t(()=>[n(u(o.$t("Next")),1)]),_:1})]),_:1})]),_:1}),l(c,{value:"file"},{default:t(()=>[l(R(Ke),{modelValue:ae.value,"onUpdate:modelValue":e[59]||(e[59]=a=>ae.value=a),multiple:""},null,8,["modelValue"]),l(ke,{variant:"outlined",elevation:"1",density:"compact",title:o.$t("Duplicate"),text:o.$t("import_duplicates"),class:"mt-2"},{prepend:t(()=>[l(_,{modelValue:se.value,"onUpdate:modelValue":e[60]||(e[60]=a=>se.value=a)},null,8,["modelValue"])]),_:1},8,["title","text"]),le.value=="MEALIE1"?(r(),k("div",Kl,[l(_,{modelValue:pe.value,"onUpdate:modelValue":e[61]||(e[61]=a=>pe.value=a),label:o.$t("ImportMealPlans"),"hide-details":""},null,8,["modelValue","label"]),l(_,{modelValue:ve.value,"onUpdate:modelValue":e[62]||(e[62]=a=>ve.value=a),label:o.$t("ImportShoppingList"),"hide-details":""},null,8,["modelValue","label"]),l(_,{modelValue:me.value,"onUpdate:modelValue":e[63]||(e[63]=a=>me.value=a),label:o.$t("NutritionsPerServing"),hint:o.$t("NutritionsPerServingHelp"),"persistent-hint":""},null,8,["modelValue","label","hint"])])):m("",!0),l(y,null,{prev:t(()=>[l(d,{onClick:e[64]||(e[64]=a=>v.value="app")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[l(d,{onClick:e[65]||(e[65]=a=>Ye()),disabled:ae.value.length==0,loading:R(Ve)},{default:t(()=>[n(u(o.$t("Import")),1)]),_:1},8,["disabled","loading"])]),_:1})]),_:1}),l(c,{value:"import_log"},{default:t(()=>[Y.value?(r(),p(Ul,{key:0,"import-log":Y.value},null,8,["import-log"])):m("",!0),l(y,null,{prev:t(()=>[l(d,{onClick:e[66]||(e[66]=a=>v.value="file")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[Y.value&&!Y.value.running?(r(),p(d,{key:0,to:{name:"SearchPage",query:{keywords:Y.value.keyword.id}},disabled:!1},{default:t(()=>[n(u(o.$t("View_Recipes")),1)]),_:1},8,["to"])):m("",!0)]),_:1})]),_:1}),l(c,{value:"bookmarklet"},{default:t(()=>[n(u(o.$t("BookmarkletImportSubtitle"))+" ",1),P("ol",null,[P("li",null,"1. "+u(o.$t("BookmarkletHelp1")),1),P("li",null,[l(d,{href:Xe.value,color:"primary"},{default:t(()=>[n(u(o.$t("ImportIntoTandoor")),1)]),_:1},8,["href"])]),P("li",null,"2. "+u(o.$t("BookmarkletHelp2")),1),P("li",null,"3. "+u(o.$t("BookmarkletHelp3")),1)]),l(y,null,{prev:t(()=>[l(d,{onClick:e[67]||(e[67]=a=>v.value="type")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>e[76]||(e[76]=[])),_:1})]),_:1}),l(c,{value:"url_list_input"},{default:t(()=>[l(j,{hint:o.$t("one_url_per_line"),"auto-grow":"","max-rows":"20","persistent-hint":"",modelValue:E.value,"onUpdate:modelValue":e[68]||(e[68]=a=>E.value=a)},null,8,["hint","modelValue"]),l(y,null,{prev:t(()=>[l(d,{onClick:e[69]||(e[69]=a=>v.value="type")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[l(d,{onClick:e[70]||(e[70]=a=>{v.value="url_list_import",U()}),disabled:E.value.length==0},{default:t(()=>[n(u(o.$t("Import")),1)]),_:1},8,["disabled"])]),_:1})]),_:1}),l(c,{value:"url_list_import"},{default:t(()=>[l(Fe,{height:16,"model-value":te.value.length/E.value.split(`
-`).length*100},{default:t(()=>[n(u(te.value.length)+" / "+u(E.value.split(`
-`).length),1)]),_:1},8,["model-value"]),l(z,null,{default:t(()=>[(r(!0),k(S,null,J(te.value,a=>(r(),p(T,{border:"",title:a.name,subtitle:a.sourceUrl,key:a.id,to:{name:"RecipeViewPage",params:{id:a.id}},target:"_blank"},null,8,["title","subtitle","to"]))),128))]),_:1}),l(y,null,{prev:t(()=>[l(d,{onClick:e[71]||(e[71]=a=>v.value="url_list_input")},{default:t(()=>[n(u(o.$t("Back")),1)]),_:1})]),next:t(()=>[l(d,{onClick:e[72]||(e[72]=a=>Le()),disabled:I.value},{default:t(()=>[n(u(o.$t("Reset")),1)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1}),l(A,{dense:""},{default:t(()=>[l(C,{class:"text-center"},{default:t(()=>[l(d,{size:"small","prepend-icon":"fa-solid fa-arrow-rotate-left",variant:"tonal",color:"warning",onClick:e[74]||(e[74]=s=>Le())},{default:t(()=>[n(u(o.$t("Reset")),1)]),_:1})]),_:1})]),_:1})]),_:1}),l(Al,{"step-index":Re.value,step:Se.value,recipe:i.value.recipe,modelValue:fe.value,"onUpdate:modelValue":e[75]||(e[75]=s=>fe.value=s),"ingredient-index":ye.value},null,8,["step-index","step","recipe","modelValue","ingredient-index"])],64))}});export{jl as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeImportPage-DvlxImUu.js.gz b/config/tandoor/staticfiles/vue3/assets/RecipeImportPage-DvlxImUu.js.gz
deleted file mode 100644
index 9fa9751b..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/RecipeImportPage-DvlxImUu.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeViewPage-CDj_dH5L.a6056ace9b7c.js b/config/tandoor/staticfiles/vue3/assets/RecipeViewPage-CDj_dH5L.a6056ace9b7c.js
deleted file mode 100644
index 418eb058..00000000
--- a/config/tandoor/staticfiles/vue3/assets/RecipeViewPage-CDj_dH5L.a6056ace9b7c.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{d as P,r as C,c as E,h as f,w as t,g as e,i as p,j as V,t as s,b,e as _,k as L,V as T,b1 as me,l as k,L as U,z as R,F as D,p as N,f as n,M as A,o as z,A as H,O as F,ae as Ce,af as Re,aY as Ue,aP as ve,N as M,x as Y,Q as x,R as B,y as q,C as De,E as Ee,_ as X,W as Ie,D as I,av as Pe,I as Le,b8 as fe,a7 as Fe,b9 as ce,n as j,P as Me,aX as Ne,bw as Oe,u as qe,b7 as xe,ab as Be,bx as ze,ba as ge,aa as He,aL as _e,aH as Z,a9 as je,G as ye,aj as We,aN as Ve,aO as $e,ai as J,by as ee,aT as Je,aM as be,bz as Ge,bA as Ke,b6 as te,br as le,K as ke,ag as Qe,S as Xe,a as Ye,bB as Ze}from"./main-BhFWIRV_.js";import{_ as ae}from"./NumberScalerDialog.vue_vue_type_script_setup_true_lang-BKqLc88N.js";import{_ as G}from"./IngredientsTable.vue_vue_type_script_setup_true_lang-ClY6kQB1.js";import{V as we,a as he,c as Te,b as Se,d as et,r as ne}from"./number_utils-1sJWKMUK.js";import{V as tt}from"./VTextarea-Dyu7dPGe.js";import{V as K}from"./VRating-BGFrV4il.js";import{V as lt}from"./VListItemAction-BR9wagZD.js";import{V as at}from"./VTooltip-CP00KBBq.js";import{_ as re,a as se}from"./PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.js";import{_ as oe}from"./KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.js";import{u as nt}from"./useFileApi-4KcBp6Fj.js";import{V as O}from"./AddToShoppingDialog.vue_vue_type_script_setup_true_lang-ByrmCw9F.js";import{_ as rt}from"./logo_color-BwefLr6I.js";import{a as st,V as ue,b as ot,c as ie}from"./VTabs-BQFRhgOd.js";import"./model_utils-CVQgSPL_.js";import"./BtnCopy.vue_vue_type_script_setup_true_lang-B_1A58TG.js";const ut={key:0},it=P({__name:"StepsOverview",props:{steps:{type:Array,default:[]},ingredientFactor:{type:Number,required:!0}},setup(w){const i=w;C(!1);const c=E(()=>{const $=(()=>{const u=[];return i.steps.forEach(o=>{o.ingredients.forEach(d=>{d.food&&!d.isHeader&&u.push(d)}),o.stepRecipeData&&o.stepRecipeData.steps?.forEach(d=>{d.ingredients.forEach(m=>{m.food&&!m.isHeader&&u.push(m)})})}),u})(),v=new Map;return $.forEach(u=>{if(!u.food)return;const o=`${u.food.id}-${u.unit?u.unit.id:"no_unit"}`;if(v.has(o)){const d=v.get(o);d.amount+=u.amount}else{const d={...u};v.set(o,d)}}),Array.from(v.values()).sort((u,o)=>{const d=u.food?.name.toLowerCase()||"",m=o.food?.name.toLowerCase()||"";return d.localeCompare(m)})});return(y,$)=>(n(),f(we,null,{default:t(()=>[e(he,null,{default:t(()=>[e(Te,null,{default:t(()=>[$[2]||($[2]=p("i",{class:"far fa-list-alt fa-fw me-2"},null,-1)),V(" "+s(y.$t("StepsOverview")),1)]),_:1,__:[2]}),e(Se,null,{default:t(()=>[e(L,null,{default:t(()=>[e(T,null,{default:t(()=>[e(me,{density:"compact",modelValue:k(U)().deviceSettings.recipe_mergeStepOverview,"onUpdate:modelValue":$[0]||($[0]=v=>k(U)().deviceSettings.recipe_mergeStepOverview=v),border:"",divided:""},{default:t(()=>[e(R,{value:!1,"prepend-icon":"fa-solid fa-folder-tree"},{default:t(()=>[V(s(y.$t("Structured")),1)]),_:1}),e(R,{value:!0,"prepend-icon":"fa-solid fa-arrows-to-circle"},{default:t(()=>[V(s(y.$t("Summary")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1}),k(U)().deviceSettings.recipe_mergeStepOverview?_("",!0):(n(!0),b(D,{key:0},N(i.steps,(v,l)=>(n(),f(L,null,{default:t(()=>[e(T,{class:"pa-1",cols:"12",md:"6"},{default:t(()=>[v.showAsHeader?(n(),b("b",ut,s(l+1)+". "+s(v.name),1)):_("",!0),e(G,{modelValue:v.ingredients,"onUpdate:modelValue":u=>v.ingredients=u,"ingredient-factor":i.ingredientFactor},null,8,["modelValue","onUpdate:modelValue","ingredient-factor"]),v.stepRecipe?(n(),f(A,{key:1,class:"ma-2 border-md","prepend-icon":"$recipes",title:v.stepRecipeData.name,to:{name:"RecipeViewPage",params:{id:v.stepRecipeData.id}},target:"_blank"},{default:t(()=>[(n(!0),b(D,null,N(v.stepRecipeData.steps,u=>(n(),f(L,null,{default:t(()=>[e(T,null,{default:t(()=>[e(G,{modelValue:u.ingredients,"onUpdate:modelValue":o=>u.ingredients=o,"ingredient-factor":i.ingredientFactor},null,8,["modelValue","onUpdate:modelValue","ingredient-factor"])]),_:2},1024)]),_:2},1024))),256))]),_:2},1032,["title","to"])):_("",!0)]),_:2},1024)]),_:2},1024))),256)),k(U)().deviceSettings.recipe_mergeStepOverview?(n(),f(L,{key:1},{default:t(()=>[e(T,{class:"pa-1",cols:"12",md:"6"},{default:t(()=>[e(G,{modelValue:c.value,"onUpdate:modelValue":$[1]||($[1]=v=>c.value=v),"ingredient-factor":i.ingredientFactor,"show-checkbox":!1},null,8,["modelValue","ingredient-factor"])]),_:1})]),_:1})):_("",!0)]),_:1})]),_:1})]),_:1}))}}),dt={key:0},pt={key:1},mt={key:2},vt=P({__name:"RecipeActivity",props:{recipe:{type:Object,required:!0}},setup(w){const i=w,c=C({}),y=C([]),$=C(!1);z(()=>{v(i.recipe.id),l()});function v(o,d=1){const m=new H;$.value=!0,d==1&&(y.value=[]),m.apiCookLogList({recipe:i.recipe.id,page:d}).then(S=>{S.results&&(y.value=y.value.concat(S.results),S.next?v(o,d+1):(y.value=y.value.sort((g,r)=>g.createdAt>r.createdAt?1:-1),$.value=!1))})}function l(){c.value={},c.value.servings=i.recipe.servings,c.value.createdAt=new Date,c.value.recipe=i.recipe.id}function u(){new H().apiCookLogCreate({cookLog:c.value}).then(d=>{y.value.push(d),l()}).catch(d=>{x().addError(B.CREATE_ERROR,d)})}return(o,d)=>(n(),b(D,null,[k(U)().isAuthenticated?(n(),f(A,{key:0,class:"mt-1 d-print-none",loading:$.value},{default:t(()=>[e(F,null,{default:t(()=>[e(tt,{label:o.$t("Comment"),rows:"2",modelValue:c.value.comment,"onUpdate:modelValue":d[0]||(d[0]=m=>c.value.comment=m),"auto-grow":""},null,8,["label","modelValue"]),e(L,{dense:""},{default:t(()=>[e(T,{cols:"12",md:"4"},{default:t(()=>[e(Ce,null,{default:t(()=>[V(s(o.$t("Rating")),1)]),_:1}),d[7]||(d[7]=p("br",null,null,-1)),e(K,{modelValue:c.value.rating,"onUpdate:modelValue":d[1]||(d[1]=m=>c.value.rating=m),clearable:"",hover:"",density:"compact"},null,8,["modelValue"])]),_:1,__:[7]}),e(T,{cols:"12",md:"4"},{default:t(()=>[e(Re,{label:o.$t("Servings"),modelValue:c.value.servings,"onUpdate:modelValue":d[2]||(d[2]=m=>c.value.servings=m),precision:2},null,8,["label","modelValue"])]),_:1}),e(T,{cols:"12",md:"4"},{default:t(()=>[e(k(Ue),{label:o.$t("Date"),modelValue:c.value.createdAt,"onUpdate:modelValue":d[3]||(d[3]=m=>c.value.createdAt=m)},null,8,["label","modelValue"])]),_:1})]),_:1})]),_:1}),e(ve,null,{default:t(()=>[e(R,{color:"create","prepend-icon":"$create",onClick:d[4]||(d[4]=m=>u())},{default:t(()=>[V(s(o.$t("Create")),1)]),_:1})]),_:1})]),_:1},8,["loading"])):_("",!0),y.value.length>0?(n(),f(A,{key:1,class:"mt-1",loading:$.value},{default:t(()=>[e(M,null,{default:t(()=>[V(s(o.$t("Activity")),1)]),_:1}),e(F,null,{default:t(()=>[e(Y,null,{default:t(()=>[(n(!0),b(D,null,N(y.value,m=>(n(),f(q,{class:"border-t-sm",key:m.id,link:m.createdBy.id==k(U)().userSettings?.user.id},{prepend:t(()=>[e(Le,{color:"primary"},{default:t(()=>[V(s(m.createdBy.displayName.charAt(0)),1)]),_:2},1024)]),append:t(()=>[e(lt,{class:"flex-column align-end"},{default:t(()=>[m.rating!=null?(n(),f(K,{key:0,density:"comfortable",size:"x-small",color:"tandoor",modelValue:m.rating,"onUpdate:modelValue":S=>m.rating=S,"half-increments":"",readonly:"",style:{overflow:"hidden"}},null,8,["modelValue","onUpdate:modelValue"])):_("",!0),e(Ie),m.createdAt!=null?(n(),f(at,{key:1,location:"top",text:k(I).fromJSDate(m.createdAt).toLocaleString(k(I).DATETIME_MED)},{activator:t(({props:S})=>[p("span",Pe({ref_for:!0},S),s(k(I).fromJSDate(m.createdAt).toRelative({style:"narrow"})),17)]),_:2},1032,["text"])):_("",!0)]),_:2},1024)]),default:t(()=>[e(De,{class:"font-weight-bold"},{default:t(()=>[V(s(m.createdBy.displayName),1)]),_:2},1024),p("span",null,s(m.comment),1),m.servings!=null&&m.servings>0?(n(),f(Ee,{key:0,class:"font-italic mt-1"},{default:t(()=>[V(s(m.servings)+" ",1),w.recipe.servingsText!=""?(n(),b("span",dt,s(w.recipe.servingsText),1)):m.servings==1?(n(),b("span",pt,s(o.$t("Serving")),1)):(n(),b("span",mt,s(o.$t("Servings")),1))]),_:2},1024)):_("",!0),m.createdBy.id==k(U)().userSettings?.user.id?(n(),f(X,{key:1,model:"CookLog",item:m,onSave:d[5]||(d[5]=S=>v(i.recipe.id)),onDelete:d[6]||(d[6]=S=>v(i.recipe.id))},null,8,["item"])):_("",!0)]),_:2},1032,["link"]))),128))]),_:1})]),_:1})]),_:1},8,["loading"])):_("",!0)],64))}}),ft=["src"],ct=P({__name:"ExternalRecipeViewer",props:{recipe:{type:{},required:!0}},setup(w){const i=w,c=fe("history"),{getDjangoUrl:y}=Fe(),$=C("");z(()=>{(!i.recipe.internal||i.recipe.steps.length==0)&&($.value="show")});const v=E(()=>{let o=i.recipe.filePath;return o?o.includes(".pdf"):!1}),l=E(()=>{let o=i.recipe.filePath;return o?o.includes(".png")||o.includes(".jpg")||o.includes(".jpeg")||o.includes(".gif"):!1}),u=E(()=>{let o="";return l.value?o=`${y("/api/get_recipe_file/")}${i.recipe.id}/`:v.value&&(o=`${y("/view-recipe-pdf/")}${i.recipe.id}/`),c.share&&typeof c.share=="string"&&(o+=`?share=${c.share}`),o});return(o,d)=>(n(),f(we,{modelValue:$.value,"onUpdate:modelValue":d[0]||(d[0]=m=>$.value=m)},{default:t(()=>[e(he,{value:"show"},{default:t(()=>[e(Te,null,{default:t(()=>[V(s(o.$t("ExternalRecipe")),1)]),_:1}),e(Se,null,{default:t(()=>[e(A,{class:"mt-1 h-100"},{default:t(()=>[v.value?(n(),b("iframe",{key:0,width:"100%",height:"700px",src:u.value},null,8,ft)):_("",!0),l.value?(n(),f(ce,{key:1,src:u.value},null,8,["src"])):_("",!0)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]))}}),gt=["innerHTML"],de=P({__name:"ScalableNumber",props:{number:Number,factor:{type:Number,default:4}},setup(w){const i=w;function c(y){return et(y,i.factor,U().userSettings.useFractions)}return(y,$)=>(n(),b("span",{class:j(["step__scalable-num",[i.factor===1?"step__scalable-num_scaled_false":i.factor>1?"step__scalable-num_scaled_up":"step__scalable-num_scaled_down"]]),innerHTML:c(w.number)},null,10,gt))}}),_t=P({name:"Instructions",computed:{},components:{ScalableNumber:de},props:{instructions_html:{type:String,required:!0},ingredient_factor:{type:Number,required:!0}},data(){return{compiled_instructions:Oe(P({name:"compiled-instructions-component",props:{instructions_html:{type:String,required:!0},ingredient_factor:{type:Number,required:!0}},components:{ScalableNumber:de},template:`
- ${this.instructions_html}
`}))}},mounted(){}});function yt(w,i,c,y,$,v){return n(),f(Ne(w.compiled_instructions),{ingredient_factor:w.ingredient_factor,instructions_html:w.instructions_html},null,8,["ingredient_factor","instructions_html"])}const pe=Me(_t,[["render",yt]]),Vt=P({__name:"Timer",props:{seconds:{type:Number,required:!0}},emits:["stop"],setup(w,{emit:i}){const c=i,y=w,{t:$}=qe(),v=C(y.seconds),l=C(v.value),u=C(!0);let o=E(()=>l.value>0?"primary":"warning");const d=E(()=>v.value==0?100:(1-l.value/v.value)*100);z(()=>{setInterval(()=>{u.value&&l.value>0&&(l.value=l.value-1)},1e3)});function m(r){l.value=Math.max(0,l.value+r),v.value=Math.max(0,v.value+r)}function S(){l.value=y.seconds,v.value=y.seconds,c("stop")}function g(r){const a=I.now(),h=a.plus({seconds:r});let W=h.toLocaleString(I.TIME_SIMPLE);const Q=Math.floor(h.startOf("day").diff(a.startOf("day"),"days").days);if(Q>=1){const Ae=$(Q===1?"Day":"Days");W+=` +${Q} ${Ae}`}return W}return(r,a)=>(n(),b(D,null,[e(xe,{"model-value":d.value,color:"primary",height:"5"},null,8,["model-value"]),e(He,{color:k(o),class:"rounded-0",variant:"tonal"},{close:t(()=>[e(ge,{divided:""},{default:t(()=>[e(R,{width:"40",onClick:a[0]||(a[0]=h=>m(-60))},{default:t(()=>a[5]||(a[5]=[p("i",{class:"fas fa-minus"},null,-1),V("1")])),_:1,__:[5]}),e(R,{width:"40",onClick:a[1]||(a[1]=h=>m(60))},{default:t(()=>a[6]||(a[6]=[p("i",{class:"fas fa-plus"},null,-1),V("1")])),_:1,__:[6]}),e(R,{width:"40",onClick:a[2]||(a[2]=h=>u.value=!u.value)},{default:t(()=>[p("i",{class:j(["fas fa-fw",{"fa-pause":u.value,"fa-play":!u.value}])},null,2)]),_:1}),e(R,{width:"40",onClick:a[3]||(a[3]=h=>S())},{default:t(()=>a[7]||(a[7]=[p("i",{class:"fas fa-stop"},null,-1)])),_:1,__:[7]})]),_:1})]),default:t(()=>[e(Be,null,{default:t(()=>[a[4]||(a[4]=p("i",{class:"fas fa-stopwatch mr-1"},null,-1)),V(" "+s(k(ze).fromMillis(l.value*1e3).toFormat("hh:mm:ss")),1)]),_:1,__:[4]}),V(" "+s(r.$t("FinishedAt"))+" "+s(g(l.value))+" ",1)]),_:1},8,["color"])],64))}}),$t={key:0},bt={key:1},kt=["href"],wt=P({__name:"StepView",props:_e({stepNumber:{type:Number,required:!1,default:1},ingredientFactor:{type:Number,required:!0}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(w){const i=Z(w,"modelValue"),c=w,y=C(!1),$=C(!1),v=E(()=>i.value.ingredients.length>0||i.value.instruction!=null&&i.value.instruction.length>0||i.value.stepRecipeData!=null||i.value.file!=null);return(l,u)=>{const o=je("step-view",!0);return n(),f(A,null,{default:t(()=>[e(M,null,{default:t(()=>[e(L,null,{default:t(()=>[e(T,null,{default:t(()=>[i.value.name?(n(),b("span",$t,s(i.value.name),1)):(n(),b("span",bt,s(l.$t("Step"))+" "+s(c.stepNumber),1))]),_:1}),e(T,{class:"text-right"},{default:t(()=>[e(ge,{density:"compact",variant:"tonal",class:"d-print-none"},{default:t(()=>[i.value.time!=null&&i.value.time>0?(n(),f(R,{key:0,size:"small",color:"info",onClick:u[0]||(u[0]=d=>y.value=!0)},{default:t(()=>[u[4]||(u[4]=p("i",{class:"fas fa-stopwatch mr-1 fa-fw"},null,-1)),V(" "+s(i.value.time),1)]),_:1,__:[4]})):_("",!0),v.value?(n(),f(R,{key:1,size:"small",color:"success",onClick:u[1]||(u[1]=d=>$.value=!$.value)},{default:t(()=>[p("i",{class:j(["fas fa-fw",{"fa-check":!$.value,"fa-times":$.value}])},null,2)]),_:1})):_("",!0)]),_:1})]),_:1})]),_:1})]),_:1}),$.value?_("",!0):(n(),b(D,{key:0},[y.value?(n(),f(Vt,{key:0,seconds:i.value.time!=null?i.value.time*60:0,onStop:u[2]||(u[2]=d=>y.value=!1)},null,8,["seconds"])):_("",!0),i.value.ingredients.length>0||i.value.instruction!=""?(n(),f(F,{key:1},{default:t(()=>[e(L,null,{default:t(()=>[i.value.ingredients.length>0&&(i.value.showIngredientsTable||i.value.show_ingredients_table)?(n(),f(T,{key:0,cols:"12",md:"6"},{default:t(()=>[e(G,{modelValue:i.value.ingredients,"onUpdate:modelValue":u[3]||(u[3]=d=>i.value.ingredients=d),"ingredient-factor":w.ingredientFactor},null,8,["modelValue","ingredient-factor"])]),_:1})):_("",!0),e(T,{cols:"12",md:"6",class:"markdown-body"},{default:t(()=>[i.value.instructionsMarkdown!=null?(n(),f(pe,{key:0,instructions_html:i.value.instructionsMarkdown,ingredient_factor:w.ingredientFactor},null,8,["instructions_html","ingredient_factor"])):(n(),f(pe,{key:1,instructions_html:i.value.instructions_markdown,ingredient_factor:w.ingredientFactor},null,8,["instructions_html","ingredient_factor"]))]),_:1})]),_:1})]),_:1})):_("",!0),i.value.stepRecipe?(n(),f(A,{key:2,class:"ma-2 border-md"},{default:t(()=>[e(M,null,{default:t(()=>[e(ye,{icon:"$recipes"}),V(" "+s(i.value.stepRecipeData.name)+" ",1),e(R,{icon:"fa-solid fa-up-right-from-square",size:"x-small",to:{name:"RecipeViewPage",params:{id:i.value.stepRecipeData.id}},target:"_blank",variant:"plain"},null,8,["to"])]),_:1}),(n(!0),b(D,null,N(i.value.stepRecipeData.steps,(d,m)=>(n(),f(F,{class:"mt-1",key:d.id},{default:t(()=>[e(o,{modelValue:i.value.stepRecipeData.steps[m],"onUpdate:modelValue":S=>i.value.stepRecipeData.steps[m]=S,"step-number":m+1,ingredientFactor:w.ingredientFactor},null,8,["modelValue","onUpdate:modelValue","step-number","ingredientFactor"])]),_:2},1024))),128))]),_:1})):_("",!0),i.value.file?(n(),b(D,{key:3},[i.value.file.preview?(n(),f(ce,{key:0,src:i.value.file.preview},null,8,["src"])):(n(),b("a",{key:1,href:i.value.file.fileDownload},s(l.$t("Download")),9,kt))],64)):_("",!0)],64))]),_:1})}}}),ht={key:0},Tt={key:0},St={class:"ms-2"},At=P({__name:"PropertyView",props:_e({servings:{type:Number,required:!0}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(w){const i=w,c=Z(w,"modelValue"),y=E(()=>c.value.properties!=null&&c.value.properties.length>0),$=E(()=>{let g=!1;for(const[r,a]of Object.entries(c.value.foodProperties))a.total_value!==0&&(console.log(a,a.total_value),g=!0);return g}),v=E(()=>{let g=[];if(l.value=="recipe")y.value&&c.value.properties.forEach(a=>{g.push({id:a.propertyType.id,name:a.propertyType.name,description:a.propertyType.description,foodValues:[],propertyAmountPerServing:a.propertyAmount,propertyAmountTotal:a.propertyAmount*c.value.servings*(i.servings/c.value.servings),missingValue:!1,unit:a.propertyType.unit,type:a.propertyType})});else for(const[a,h]of Object.entries(c.value.foodProperties))g.push({id:h.id,name:h.name,description:h.description,icon:h.icon,foodValues:h.food_values,propertyAmountPerServing:h.total_value/c.value.servings,propertyAmountTotal:h.total_value*(i.servings/c.value.servings),missingValue:h.missing_value,unit:h.unit,type:h});function r(a,h){return a.type.order>h.type.order?1:a.type.order{$.value||(l.value="recipe")});function m(){let g=new H;d.value=!0,g.apiRecipeRetrieve({id:c.value.id}).then(r=>{c.value=r,Je(()=>{o.value!=null&&u.value&&v.value.forEach(a=>{o.value.id==a.id&&(o.value=a)}),d.value=!1})}).catch(r=>{x().addError(B.FETCH_ERROR,r)})}function S(g){return g>80?"error":g>50?"warning":g>30?"info":"success"}return(g,r)=>(n(),b(D,null,[$.value||y.value?(n(),f(A,{key:0,class:"mt-2"},{default:t(()=>[e(M,null,{default:t(()=>[e(ye,{icon:"$properties"}),V(" "+s(g.$t("Properties"))+" ",1),y.value&&y.value?(n(),f(me,{key:0,border:"",divided:"",density:"compact",class:"float-right d-print-none",modelValue:l.value,"onUpdate:modelValue":r[0]||(r[0]=a=>l.value=a)},{default:t(()=>[e(R,{size:"small",value:"food"},{default:t(()=>[V(s(g.$t("Food")),1)]),_:1}),e(R,{size:"small",value:"recipe"},{default:t(()=>[V(s(g.$t("Recipe")),1)]),_:1})]),_:1},8,["modelValue"])):_("",!0)]),_:1}),e(F,null,{default:t(()=>[e(We,{density:"compact",style:{"max-width":"800px"}},{default:t(()=>[p("thead",null,[p("tr",null,[r[5]||(r[5]=p("th",null,null,-1)),p("th",null,s(g.$t("per_serving")),1),p("th",null,s(g.$t("total")),1),l.value=="food"?(n(),b("th",ht)):_("",!0)])]),p("tbody",null,[(n(!0),b(D,null,N(v.value,a=>(n(),b("tr",{key:a.id},[p("td",null,s(a.name),1),p("td",null,s(g.$n(k(ne)(a.propertyAmountPerServing)))+" "+s(a.unit),1),p("td",null,s(g.$n(k(ne)(a.propertyAmountTotal)))+" "+s(a.unit),1),l.value=="food"?(n(),b("td",Tt,[a.missingValue?(n(),f(R,{key:0,onClick:h=>{o.value=a,u.value=!0},variant:"plain",color:"warning",icon:"fa-solid fa-triangle-exclamation",size:"small",class:"d-print-none"},null,8,["onClick"])):_("",!0),a.missingValue?_("",!0):(n(),f(R,{key:1,onClick:h=>{o.value=a,u.value=!0},variant:"plain",icon:"fa-solid fa-circle-info",size:"small",class:"d-print-none"},null,8,["onClick"]))])):_("",!0)]))),128))])]),_:1})]),_:1})]),_:1})):_("",!0),e(Ve,{"max-width":"900px",modelValue:u.value,"onUpdate:modelValue":r[4]||(r[4]=a=>u.value=a)},{default:t(()=>[o.value?(n(),f(A,{key:0,loading:d.value},{default:t(()=>[e($e,{title:`${o.value.propertyAmountTotal} ${o.value.unit} ${o.value.name}`,"sub-title":g.$t("total"),icon:"$properties",modelValue:u.value,"onUpdate:modelValue":r[1]||(r[1]=a=>u.value=a)},null,8,["title","sub-title","modelValue"]),e(F,null,{default:t(()=>[e(Y,null,{default:t(()=>[(n(!0),b(D,null,N(o.value.foodValues,a=>(n(),f(q,{border:"",key:`${o.value.id}_${a.id}`},{prepend:t(()=>[a.value!=null&&o.value.propertyAmountTotal>0?(n(),f(ee,{key:0,size:"55",width:"5","model-value":a.value/o.value.propertyAmountTotal*100,color:S(a.value/o.value.propertyAmountTotal*100)},{default:t(()=>[V(s(Math.round(a.value/o.value.propertyAmountTotal*100))+"% ",1)]),_:2},1032,["model-value","color"])):_("",!0),a.value==null?(n(),f(ee,{key:1,size:"55",width:"5"},{default:t(()=>r[6]||(r[6]=[V("?")])),_:1,__:[6]})):_("",!0)]),append:t(()=>[a.missing_conversion?(n(),f(J,{key:0,color:"create",class:"cursor-pointer","prepend-icon":"$create"},{default:t(()=>[V(s(g.$t("Conversion"))+": "+s(a.missing_conversion.base_unit.name)+" ",1),r[7]||(r[7]=p("i",{class:"fa-solid fa-arrow-right me-1 ms-1"},null,-1)),V(" "+s(a.missing_conversion.converted_unit.name)+" ",1),e(X,{model:"UnitConversion",onCreate:r[2]||(r[2]=h=>m()),"item-defaults":{baseAmount:1,baseUnit:a.missing_conversion.base_unit,convertedUnit:a.missing_conversion.converted_unit,food:a.food}},null,8,["item-defaults"])]),_:2,__:[7]},1024)):a.value!=null?(n(),f(J,{key:1},{default:t(()=>[V(s(g.$n(a.value))+" "+s(o.value.unit),1)]),_:2},1024)):a.missing_unit?(n(),f(J,{key:2,color:"warning","prepend-icon":"$edit",class:"cursor-pointer",to:{name:"ModelEditPage",params:{model:"Recipe",id:c.value.id}}},{default:t(()=>[V(s(g.$t("NoUnit")),1)]),_:1},8,["to"])):(n(),f(J,{key:3,color:"error","prepend-icon":"$edit",class:"cursor-pointer"},{default:t(()=>[V(s(g.$t("MissingProperties"))+" ",1),e(X,{model:"Food","item-id":a.food.id,"onUpdate:modelValue":r[3]||(r[3]=h=>m())},null,8,["item-id"])]),_:2},1024))]),default:t(()=>[p("span",St,s(a.food.name),1)]),_:2},1024))),128))]),_:1})]),_:1}),e(ve,null,{default:t(()=>[e(R,{to:{name:"PropertyEditorPage",query:{recipe:c.value.id}}},{default:t(()=>[V(s(g.$t("Property_Editor")),1)]),_:1},8,["to"])]),_:1})]),_:1},8,["loading"])):_("",!0)]),_:1},8,["modelValue"])],64))}}),Ct={class:"d-block d-lg-none"},Rt={class:"text-grey"},Ut={class:"text-grey"},Dt={class:"cursor-pointer"},Et={class:"text-grey"},It={key:0},Pt={key:1},Lt={class:"d-none d-lg-block"},Ft={class:"d-flex"},Mt={class:"flex-column flex-grow-1"},Nt={class:"text-grey"},Ot={class:"text-grey"},qt={class:"cursor-pointer"},xt={class:"text-grey"},Bt={key:0},zt={key:1},Ht=["href"],jt=P({__name:"RecipeView",props:{modelValue:{required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(w){const{request:i,release:c}=Ge(),{doAiImport:y,fileApiLoading:$}=nt(),v=C(!1),l=Z(w,"modelValue"),u=C(1),o=C(!1),d=C(U().activeSpace.aiDefaultProvider),m=E(()=>u.value/(l.value.servings!=null?Math.max(l.value.servings,1):1));be(()=>l.value.servings,()=>{l.value.servings&&(u.value=l.value.servings)}),z(()=>{i("screen")}),Ke(()=>{c()});function S(){let g=new H;y(d.value.id,null,"",l.value.id).then(r=>{r.recipe?(l.value.internal=!0,l.value.steps=r.recipe.steps,l.value.keywords=r.recipe.keywords,l.value.servings=r.recipe.servings,l.value.servingsText=r.recipe.servingsText,l.value.workingTime=r.recipe.workingTime,l.value.waitingTime=r.recipe.waitingTime,u.value=r.recipe.servings,v.value=!0,g.apiRecipeUpdate({id:l.value.id,recipe:l.value}).then(a=>{l.value=a}).catch(a=>{x().addError(B.UPDATE_ERROR,a)}).finally(()=>{v.value=!1})):x().addError(B.UPDATE_ERROR,[r.error,r.msg])}).catch(r=>{x().addError(B.FETCH_ERROR,r)})}return(g,r)=>(n(),b(D,null,[l.value.name==null?(n(),b(D,{key:0},[e(O,{type:"card",class:"mt-md-4 rounded-0"}),e(O,{type:"article",class:"mt-2"}),e(O,{type:"article",class:"mt-2"}),e(O,{type:"list-item-avatar-three-line",class:"mt-2"}),e(O,{type:"list-item-avatar-two-line"}),e(O,{type:"list-item-avatar-three-line"})],64)):_("",!0),l.value.name!=null?(n(),b(D,{key:1},[p("template",Ct,[e(A,{class:"rounded-0"},{default:t(()=>[l.value.image!=null?(n(),f(te,{key:0,"max-height":"25vh",recipe:l.value},null,8,["recipe"])):_("",!0),e(A,null,{default:t(()=>[e(le,{class:"d-flex align-center"},{default:t(()=>[p("span",{class:j(["ps-2 text-h5 flex-grow-1 pa-1",{"text-truncate":!o.value}]),onClick:r[0]||(r[0]=a=>o.value=!o.value)},s(l.value.name),3),k(U)().isAuthenticated?(n(),f(re,{key:0,recipe:l.value},null,8,["recipe"])):_("",!0)]),_:1}),e(oe,{variant:"flat",class:"ms-1",keywords:l.value.keywords},null,8,["keywords"]),l.value._private?(n(),f(se,{key:0,users:l.value.shared},null,8,["users"])):_("",!0),l.value.rating?(n(),f(K,{key:1,modelValue:l.value.rating,"onUpdate:modelValue":r[1]||(r[1]=a=>l.value.rating=a),size:"x-small","half-increments":"",readonly:""},null,8,["modelValue"])):_("",!0),e(le,{class:"ps-2 text-disabled"},{default:t(()=>[V(s(l.value.description),1)]),_:1})]),_:1})]),_:1}),e(A,{class:"mt-1"},{default:t(()=>[e(ke,null,{default:t(()=>[e(L,{class:"text-center text-body-2"},{default:t(()=>[e(T,{class:"pt-1 pb-1"},{default:t(()=>[r[8]||(r[8]=p("i",{class:"fas fa-cogs fa-fw mr-1"},null,-1)),V(" "+s(l.value.workingTime)+" min",1),r[9]||(r[9]=p("br",null,null,-1)),p("div",Rt,s(g.$t("WorkingTime")),1)]),_:1,__:[8,9]}),e(T,{class:"pt-1 pb-1"},{default:t(()=>[p("div",null,[r[10]||(r[10]=p("i",{class:"fas fa-hourglass-half fa-fw mr-1"},null,-1)),V(" "+s(l.value.waitingTime)+" min",1)]),p("div",Ut,s(g.$t("WaitingTime")),1)]),_:1}),e(T,{class:"pt-1 pb-1"},{default:t(()=>[p("div",Dt,[r[11]||(r[11]=p("i",{class:"fas fa-sort-numeric-up fa-fw mr-1"},null,-1)),V(" "+s(u.value)+" ",1),r[12]||(r[12]=p("br",null,null,-1)),p("div",Et,[l.value.servingsText?(n(),b("span",It,s(l.value.servingsText),1)):(n(),b("span",Pt,s(g.$t("Servings")),1))]),e(ae,{number:u.value,onConfirm:r[2]||(r[2]=a=>{u.value=a}),title:"Servings"},null,8,["number"])])]),_:1})]),_:1})]),_:1})]),_:1})]),p("template",Lt,[e(L,{dense:""},{default:t(()=>[e(T,{cols:"8"},{default:t(()=>[e(te,{rounded:!0,"max-height":"40vh",recipe:l.value},null,8,["recipe"])]),_:1}),e(T,{cols:"4"},{default:t(()=>[e(A,{class:"h-100 d-flex flex-column"},{default:t(()=>[e(F,{class:"flex-grow-1"},{default:t(()=>[p("div",Ft,[p("h1",Mt,s(l.value.name),1),k(U)().isAuthenticated?(n(),f(re,{key:0,recipe:l.value,class:"flex-column mb-auto mt-2 float-right"},null,8,["recipe"])):_("",!0)]),p("p",null,s(g.$t("created_by"))+" "+s(l.value.createdBy.displayName)+" ("+s(k(I).fromJSDate(l.value.createdAt).toLocaleString(k(I).DATE_SHORT))+") ",1),p("p",null,[p("i",null,s(l.value.description),1)]),l.value._private?(n(),f(se,{key:0,users:l.value.shared},null,8,["users"])):_("",!0),l.value.rating?(n(),f(K,{key:1,modelValue:l.value.rating,"onUpdate:modelValue":r[3]||(r[3]=a=>l.value.rating=a),size:"x-small",readonly:""},null,8,["modelValue"])):_("",!0),e(oe,{variant:"flat",class:"mt-4",keywords:l.value.keywords},null,8,["keywords"])]),_:1}),e(L,{class:"text-center text-body-2 mb-1 flex-grow-0"},{default:t(()=>[e(T,null,{default:t(()=>[r[13]||(r[13]=p("i",{class:"fas fa-cogs fa-fw mr-1"},null,-1)),V(" "+s(l.value.workingTime)+" "+s(g.$t("min")),1),r[14]||(r[14]=p("br",null,null,-1)),p("div",Nt,s(g.$t("WorkingTime")),1)]),_:1,__:[13,14]}),e(T,null,{default:t(()=>[p("div",null,[r[15]||(r[15]=p("i",{class:"fas fa-hourglass-half fa-fw mr-1"},null,-1)),V(" "+s(l.value.waitingTime)+" "+s(g.$t("min")),1)]),p("div",Ot,s(g.$t("WaitingTime")),1)]),_:1}),e(T,null,{default:t(()=>[p("div",qt,[r[16]||(r[16]=p("i",{class:"fas fa-sort-numeric-up fa-fw mr-1"},null,-1)),V(" "+s(u.value)+" ",1),r[17]||(r[17]=p("br",null,null,-1)),p("div",xt,[l.value.servingsText?(n(),b("span",Bt,s(l.value.servingsText),1)):(n(),b("span",zt,s(g.$t("Servings")),1))]),e(ae,{number:u.value,onConfirm:r[4]||(r[4]=a=>{u.value=a}),title:"Servings"},null,8,["number"])])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),l.value.filePath?(n(),b(D,{key:0},[e(ct,{class:"mt-2",recipe:l.value},null,8,["recipe"]),l.value.internal?_("",!0):(n(),f(A,{key:0,title:g.$t("AI"),"prepend-icon":"$ai",loading:k($)||v.value,disabled:k($)||v.value||!k(U)().activeSpace.aiEnabled},{default:t(()=>[e(F,null,{default:t(()=>[V(s(g.$t("ConvertUsingAI"))+" ",1),e(Qe,{model:"AiProvider",modelValue:d.value,"onUpdate:modelValue":r[6]||(r[6]=a=>d.value=a)},{append:t(()=>[e(R,{onClick:r[5]||(r[5]=a=>S()),icon:"fa-solid fa-person-running",color:"success"})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["title","loading","disabled"]))],64)):_("",!0),(l.value.steps.length>1||l.value.steps.length==1&&!l.value.steps[0].showIngredientsTable)&&l.value.showIngredientOverview?(n(),f(A,{key:1,class:"mt-1"},{default:t(()=>[e(it,{steps:l.value.steps,"ingredient-factor":m.value},null,8,["steps","ingredient-factor"])]),_:1})):_("",!0),(n(!0),b(D,null,N(l.value.steps,(a,h)=>(n(),f(A,{class:"mt-1",key:a.id},{default:t(()=>[e(wt,{modelValue:l.value.steps[h],"onUpdate:modelValue":W=>l.value.steps[h]=W,"step-number":h+1,ingredientFactor:m.value},null,8,["modelValue","onUpdate:modelValue","step-number","ingredientFactor"])]),_:2},1024))),128)),e(At,{modelValue:l.value,"onUpdate:modelValue":r[7]||(r[7]=a=>l.value=a),servings:u.value},null,8,["modelValue","servings"]),e(A,{class:"mt-2"},{default:t(()=>[e(F,null,{default:t(()=>[e(L,null,{default:t(()=>[e(T,{cols:"12",md:"3"},{default:t(()=>[e(A,{variant:"outlined",title:g.$t("CreatedBy"),subtitle:l.value.createdBy.displayName,"prepend-icon":"fa-solid fa-user",to:k(U)().isAuthenticated?{name:"SearchPage",query:{createdby:l.value.createdBy.id}}:void 0},null,8,["title","subtitle","to"])]),_:1}),e(T,{cols:"12",md:"3"},{default:t(()=>[e(A,{variant:"outlined",title:g.$t("Created"),subtitle:k(I).fromJSDate(l.value.createdAt).toLocaleString(k(I).DATETIME_MED),"prepend-icon":"$create",to:k(U)().isAuthenticated?{name:"SearchPage",query:{createdon:k(I).fromJSDate(l.value.createdAt).toISODate()}}:void 0},null,8,["title","subtitle","to"])]),_:1}),e(T,{cols:"12",md:"3"},{default:t(()=>[e(A,{variant:"outlined",title:g.$t("Updated"),subtitle:k(I).fromJSDate(l.value.updatedAt).toLocaleString(k(I).DATETIME_MED),"prepend-icon":"$edit",to:k(U)().isAuthenticated?{name:"SearchPage",query:{updatedon:k(I).fromJSDate(l.value.updatedAt).toISODate()}}:void 0},null,8,["title","subtitle","to"])]),_:1}),l.value.sourceUrl?(n(),f(T,{key:0,cols:"12",md:"3"},{default:t(()=>[e(A,{variant:"outlined",title:g.$t("Imported_From"),"prepend-icon":"$import"},{subtitle:t(()=>[p("a",{href:l.value.sourceUrl,target:"_blank"},s(l.value.sourceUrl),9,Ht)]),_:1},8,["title"])]),_:1})):_("",!0)]),_:1})]),_:1})]),_:1}),k(U)().userSettings.comments?(n(),f(vt,{key:2,recipe:l.value},null,8,["recipe"])):_("",!0)],64)):_("",!0)],64))}}),Wt={href:"https://tandoor.dev",target:"_blank"},Jt={href:"https://tandoor.dev",target:"_blank"},Gt=P({__name:"ImportTandoorDialog",setup(w){const i=E(()=>"https://app.tandoor.dev/recipe/import/?url="+location.href),c=E(()=>{let l=v.value;return l.endsWith("/")||(l+="/"),l+"recipe/import/?url="+location.href}),y=C(!1),$=C("hosted"),v=C("");return(l,u)=>(n(),b(D,null,[e(A,{class:"ml-auto mr-auto","max-width":"300px","prepend-avatar":rt,title:l.$t("ImportIntoTandoor"),onClick:u[0]||(u[0]=o=>y.value=!0)},null,8,["title"]),e(Ve,{"max-width":"800px",modelValue:y.value,"onUpdate:modelValue":u[5]||(u[5]=o=>y.value=o)},{default:t(()=>[e(A,null,{default:t(()=>[e($e,{title:l.$t("ImportIntoTandoor"),modelValue:y.value,"onUpdate:modelValue":u[1]||(u[1]=o=>y.value=o)},null,8,["title","modelValue"]),e(st,{grow:"",modelValue:$.value,"onUpdate:modelValue":u[2]||(u[2]=o=>$.value=o)},{default:t(()=>[e(ue,{value:"hosted"},{default:t(()=>u[6]||(u[6]=[V("tandoor.dev")])),_:1,__:[6]}),e(ue,{value:"selfhosted"},{default:t(()=>[V(s(l.$t("SelfHosted")),1)]),_:1})]),_:1},8,["modelValue"]),e(F,null,{default:t(()=>[e(ot,{modelValue:$.value,"onUpdate:modelValue":u[4]||(u[4]=o=>$.value=o)},{default:t(()=>[e(ie,{value:"hosted"},{default:t(()=>[p("p",null,[V(s(l.$t("AboutTandoor"))+" ",1),p("a",Wt,s(l.$t("Learn_More"))+".",1)]),p("p",null,s(l.$t("ImportIntoTandoorHelp")),1),e(Y,null,{default:t(()=>[e(q,{border:""},{append:t(()=>[e(R,{icon:"fa-solid fa-arrow-up-right-from-square",href:"https://app.tandoor.dev",target:"_blank"})]),default:t(()=>[e(M,null,{default:t(()=>[V("1. "+s(l.$t("CreateAccount")),1)]),_:1})]),_:1}),e(q,{border:""},{append:t(()=>[e(R,{icon:"fa-solid fa-paper-plane",href:i.value,target:"_blank"},null,8,["href"])]),default:t(()=>[e(M,null,{default:t(()=>[V("2. "+s(l.$t("Import")),1)]),_:1})]),_:1})]),_:1})]),_:1}),e(ie,{value:"selfhosted"},{default:t(()=>[p("p",null,[V(s(l.$t("AboutTandoor"))+" ",1),p("a",Jt,s(l.$t("Learn_More"))+".",1)]),p("p",null,s(l.$t("ImportIntoTandoorHelp")),1),e(q,{border:""},{default:t(()=>[e(M,null,{default:t(()=>[V("1. "+s(l.$t("URL")),1)]),_:1}),e(Xe,{modelValue:v.value,"onUpdate:modelValue":u[3]||(u[3]=o=>v.value=o),label:l.$t("Url")},null,8,["modelValue","label"])]),_:1}),e(q,{border:""},{append:t(()=>[e(R,{icon:"fa-solid fa-paper-plane",href:c.value,disabled:v.value=="",target:"_blank"},null,8,["href","disabled"])]),default:t(()=>[e(M,null,{default:t(()=>[V("2. "+s(l.$t("Import")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"])],64))}}),Kt={key:0,class:"mt-2"},ml=P({__name:"RecipeViewPage",props:{id:{type:String,required:!0}},setup(w){const i=w,c=fe("history"),{mobile:y}=Ye(),$=Ze(),v=E(()=>c.share&&typeof c.share=="string"),l=C({});be(()=>i.id,()=>{u(i.id)}),z(()=>{u(i.id)});function u(o){const d=new H;l.value={};let m={id:i.id};v.value&&(m.share=c.share),d.apiRecipeRetrieve(m).then(S=>{l.value=S,$.value=l.value.name,U().isAuthenticated&&d.apiViewLogCreate({viewLog:{recipe:Number(o)}})}).catch(S=>{S.response.status==403||x().addError(B.FETCH_ERROR,S)})}return(o,d)=>(n(),f(ke,{class:j({"ps-0 pe-0 pt-0":k(y)})},{default:t(()=>[e(jt,{modelValue:l.value,"onUpdate:modelValue":d[0]||(d[0]=m=>l.value=m)},null,8,["modelValue"]),v.value&&Object.keys(l.value).length>0?(n(),b("div",Kt,[e(Gt)])):_("",!0)]),_:1},8,["class"]))}});export{ml as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeViewPage-CDj_dH5L.a6056ace9b7c.js.gz b/config/tandoor/staticfiles/vue3/assets/RecipeViewPage-CDj_dH5L.a6056ace9b7c.js.gz
deleted file mode 100644
index 129e1a2e..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/RecipeViewPage-CDj_dH5L.a6056ace9b7c.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeViewPage-CDj_dH5L.js b/config/tandoor/staticfiles/vue3/assets/RecipeViewPage-CDj_dH5L.js
deleted file mode 100644
index 418eb058..00000000
--- a/config/tandoor/staticfiles/vue3/assets/RecipeViewPage-CDj_dH5L.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{d as P,r as C,c as E,h as f,w as t,g as e,i as p,j as V,t as s,b,e as _,k as L,V as T,b1 as me,l as k,L as U,z as R,F as D,p as N,f as n,M as A,o as z,A as H,O as F,ae as Ce,af as Re,aY as Ue,aP as ve,N as M,x as Y,Q as x,R as B,y as q,C as De,E as Ee,_ as X,W as Ie,D as I,av as Pe,I as Le,b8 as fe,a7 as Fe,b9 as ce,n as j,P as Me,aX as Ne,bw as Oe,u as qe,b7 as xe,ab as Be,bx as ze,ba as ge,aa as He,aL as _e,aH as Z,a9 as je,G as ye,aj as We,aN as Ve,aO as $e,ai as J,by as ee,aT as Je,aM as be,bz as Ge,bA as Ke,b6 as te,br as le,K as ke,ag as Qe,S as Xe,a as Ye,bB as Ze}from"./main-BhFWIRV_.js";import{_ as ae}from"./NumberScalerDialog.vue_vue_type_script_setup_true_lang-BKqLc88N.js";import{_ as G}from"./IngredientsTable.vue_vue_type_script_setup_true_lang-ClY6kQB1.js";import{V as we,a as he,c as Te,b as Se,d as et,r as ne}from"./number_utils-1sJWKMUK.js";import{V as tt}from"./VTextarea-Dyu7dPGe.js";import{V as K}from"./VRating-BGFrV4il.js";import{V as lt}from"./VListItemAction-BR9wagZD.js";import{V as at}from"./VTooltip-CP00KBBq.js";import{_ as re,a as se}from"./PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.js";import{_ as oe}from"./KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.js";import{u as nt}from"./useFileApi-4KcBp6Fj.js";import{V as O}from"./AddToShoppingDialog.vue_vue_type_script_setup_true_lang-ByrmCw9F.js";import{_ as rt}from"./logo_color-BwefLr6I.js";import{a as st,V as ue,b as ot,c as ie}from"./VTabs-BQFRhgOd.js";import"./model_utils-CVQgSPL_.js";import"./BtnCopy.vue_vue_type_script_setup_true_lang-B_1A58TG.js";const ut={key:0},it=P({__name:"StepsOverview",props:{steps:{type:Array,default:[]},ingredientFactor:{type:Number,required:!0}},setup(w){const i=w;C(!1);const c=E(()=>{const $=(()=>{const u=[];return i.steps.forEach(o=>{o.ingredients.forEach(d=>{d.food&&!d.isHeader&&u.push(d)}),o.stepRecipeData&&o.stepRecipeData.steps?.forEach(d=>{d.ingredients.forEach(m=>{m.food&&!m.isHeader&&u.push(m)})})}),u})(),v=new Map;return $.forEach(u=>{if(!u.food)return;const o=`${u.food.id}-${u.unit?u.unit.id:"no_unit"}`;if(v.has(o)){const d=v.get(o);d.amount+=u.amount}else{const d={...u};v.set(o,d)}}),Array.from(v.values()).sort((u,o)=>{const d=u.food?.name.toLowerCase()||"",m=o.food?.name.toLowerCase()||"";return d.localeCompare(m)})});return(y,$)=>(n(),f(we,null,{default:t(()=>[e(he,null,{default:t(()=>[e(Te,null,{default:t(()=>[$[2]||($[2]=p("i",{class:"far fa-list-alt fa-fw me-2"},null,-1)),V(" "+s(y.$t("StepsOverview")),1)]),_:1,__:[2]}),e(Se,null,{default:t(()=>[e(L,null,{default:t(()=>[e(T,null,{default:t(()=>[e(me,{density:"compact",modelValue:k(U)().deviceSettings.recipe_mergeStepOverview,"onUpdate:modelValue":$[0]||($[0]=v=>k(U)().deviceSettings.recipe_mergeStepOverview=v),border:"",divided:""},{default:t(()=>[e(R,{value:!1,"prepend-icon":"fa-solid fa-folder-tree"},{default:t(()=>[V(s(y.$t("Structured")),1)]),_:1}),e(R,{value:!0,"prepend-icon":"fa-solid fa-arrows-to-circle"},{default:t(()=>[V(s(y.$t("Summary")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1}),k(U)().deviceSettings.recipe_mergeStepOverview?_("",!0):(n(!0),b(D,{key:0},N(i.steps,(v,l)=>(n(),f(L,null,{default:t(()=>[e(T,{class:"pa-1",cols:"12",md:"6"},{default:t(()=>[v.showAsHeader?(n(),b("b",ut,s(l+1)+". "+s(v.name),1)):_("",!0),e(G,{modelValue:v.ingredients,"onUpdate:modelValue":u=>v.ingredients=u,"ingredient-factor":i.ingredientFactor},null,8,["modelValue","onUpdate:modelValue","ingredient-factor"]),v.stepRecipe?(n(),f(A,{key:1,class:"ma-2 border-md","prepend-icon":"$recipes",title:v.stepRecipeData.name,to:{name:"RecipeViewPage",params:{id:v.stepRecipeData.id}},target:"_blank"},{default:t(()=>[(n(!0),b(D,null,N(v.stepRecipeData.steps,u=>(n(),f(L,null,{default:t(()=>[e(T,null,{default:t(()=>[e(G,{modelValue:u.ingredients,"onUpdate:modelValue":o=>u.ingredients=o,"ingredient-factor":i.ingredientFactor},null,8,["modelValue","onUpdate:modelValue","ingredient-factor"])]),_:2},1024)]),_:2},1024))),256))]),_:2},1032,["title","to"])):_("",!0)]),_:2},1024)]),_:2},1024))),256)),k(U)().deviceSettings.recipe_mergeStepOverview?(n(),f(L,{key:1},{default:t(()=>[e(T,{class:"pa-1",cols:"12",md:"6"},{default:t(()=>[e(G,{modelValue:c.value,"onUpdate:modelValue":$[1]||($[1]=v=>c.value=v),"ingredient-factor":i.ingredientFactor,"show-checkbox":!1},null,8,["modelValue","ingredient-factor"])]),_:1})]),_:1})):_("",!0)]),_:1})]),_:1})]),_:1}))}}),dt={key:0},pt={key:1},mt={key:2},vt=P({__name:"RecipeActivity",props:{recipe:{type:Object,required:!0}},setup(w){const i=w,c=C({}),y=C([]),$=C(!1);z(()=>{v(i.recipe.id),l()});function v(o,d=1){const m=new H;$.value=!0,d==1&&(y.value=[]),m.apiCookLogList({recipe:i.recipe.id,page:d}).then(S=>{S.results&&(y.value=y.value.concat(S.results),S.next?v(o,d+1):(y.value=y.value.sort((g,r)=>g.createdAt>r.createdAt?1:-1),$.value=!1))})}function l(){c.value={},c.value.servings=i.recipe.servings,c.value.createdAt=new Date,c.value.recipe=i.recipe.id}function u(){new H().apiCookLogCreate({cookLog:c.value}).then(d=>{y.value.push(d),l()}).catch(d=>{x().addError(B.CREATE_ERROR,d)})}return(o,d)=>(n(),b(D,null,[k(U)().isAuthenticated?(n(),f(A,{key:0,class:"mt-1 d-print-none",loading:$.value},{default:t(()=>[e(F,null,{default:t(()=>[e(tt,{label:o.$t("Comment"),rows:"2",modelValue:c.value.comment,"onUpdate:modelValue":d[0]||(d[0]=m=>c.value.comment=m),"auto-grow":""},null,8,["label","modelValue"]),e(L,{dense:""},{default:t(()=>[e(T,{cols:"12",md:"4"},{default:t(()=>[e(Ce,null,{default:t(()=>[V(s(o.$t("Rating")),1)]),_:1}),d[7]||(d[7]=p("br",null,null,-1)),e(K,{modelValue:c.value.rating,"onUpdate:modelValue":d[1]||(d[1]=m=>c.value.rating=m),clearable:"",hover:"",density:"compact"},null,8,["modelValue"])]),_:1,__:[7]}),e(T,{cols:"12",md:"4"},{default:t(()=>[e(Re,{label:o.$t("Servings"),modelValue:c.value.servings,"onUpdate:modelValue":d[2]||(d[2]=m=>c.value.servings=m),precision:2},null,8,["label","modelValue"])]),_:1}),e(T,{cols:"12",md:"4"},{default:t(()=>[e(k(Ue),{label:o.$t("Date"),modelValue:c.value.createdAt,"onUpdate:modelValue":d[3]||(d[3]=m=>c.value.createdAt=m)},null,8,["label","modelValue"])]),_:1})]),_:1})]),_:1}),e(ve,null,{default:t(()=>[e(R,{color:"create","prepend-icon":"$create",onClick:d[4]||(d[4]=m=>u())},{default:t(()=>[V(s(o.$t("Create")),1)]),_:1})]),_:1})]),_:1},8,["loading"])):_("",!0),y.value.length>0?(n(),f(A,{key:1,class:"mt-1",loading:$.value},{default:t(()=>[e(M,null,{default:t(()=>[V(s(o.$t("Activity")),1)]),_:1}),e(F,null,{default:t(()=>[e(Y,null,{default:t(()=>[(n(!0),b(D,null,N(y.value,m=>(n(),f(q,{class:"border-t-sm",key:m.id,link:m.createdBy.id==k(U)().userSettings?.user.id},{prepend:t(()=>[e(Le,{color:"primary"},{default:t(()=>[V(s(m.createdBy.displayName.charAt(0)),1)]),_:2},1024)]),append:t(()=>[e(lt,{class:"flex-column align-end"},{default:t(()=>[m.rating!=null?(n(),f(K,{key:0,density:"comfortable",size:"x-small",color:"tandoor",modelValue:m.rating,"onUpdate:modelValue":S=>m.rating=S,"half-increments":"",readonly:"",style:{overflow:"hidden"}},null,8,["modelValue","onUpdate:modelValue"])):_("",!0),e(Ie),m.createdAt!=null?(n(),f(at,{key:1,location:"top",text:k(I).fromJSDate(m.createdAt).toLocaleString(k(I).DATETIME_MED)},{activator:t(({props:S})=>[p("span",Pe({ref_for:!0},S),s(k(I).fromJSDate(m.createdAt).toRelative({style:"narrow"})),17)]),_:2},1032,["text"])):_("",!0)]),_:2},1024)]),default:t(()=>[e(De,{class:"font-weight-bold"},{default:t(()=>[V(s(m.createdBy.displayName),1)]),_:2},1024),p("span",null,s(m.comment),1),m.servings!=null&&m.servings>0?(n(),f(Ee,{key:0,class:"font-italic mt-1"},{default:t(()=>[V(s(m.servings)+" ",1),w.recipe.servingsText!=""?(n(),b("span",dt,s(w.recipe.servingsText),1)):m.servings==1?(n(),b("span",pt,s(o.$t("Serving")),1)):(n(),b("span",mt,s(o.$t("Servings")),1))]),_:2},1024)):_("",!0),m.createdBy.id==k(U)().userSettings?.user.id?(n(),f(X,{key:1,model:"CookLog",item:m,onSave:d[5]||(d[5]=S=>v(i.recipe.id)),onDelete:d[6]||(d[6]=S=>v(i.recipe.id))},null,8,["item"])):_("",!0)]),_:2},1032,["link"]))),128))]),_:1})]),_:1})]),_:1},8,["loading"])):_("",!0)],64))}}),ft=["src"],ct=P({__name:"ExternalRecipeViewer",props:{recipe:{type:{},required:!0}},setup(w){const i=w,c=fe("history"),{getDjangoUrl:y}=Fe(),$=C("");z(()=>{(!i.recipe.internal||i.recipe.steps.length==0)&&($.value="show")});const v=E(()=>{let o=i.recipe.filePath;return o?o.includes(".pdf"):!1}),l=E(()=>{let o=i.recipe.filePath;return o?o.includes(".png")||o.includes(".jpg")||o.includes(".jpeg")||o.includes(".gif"):!1}),u=E(()=>{let o="";return l.value?o=`${y("/api/get_recipe_file/")}${i.recipe.id}/`:v.value&&(o=`${y("/view-recipe-pdf/")}${i.recipe.id}/`),c.share&&typeof c.share=="string"&&(o+=`?share=${c.share}`),o});return(o,d)=>(n(),f(we,{modelValue:$.value,"onUpdate:modelValue":d[0]||(d[0]=m=>$.value=m)},{default:t(()=>[e(he,{value:"show"},{default:t(()=>[e(Te,null,{default:t(()=>[V(s(o.$t("ExternalRecipe")),1)]),_:1}),e(Se,null,{default:t(()=>[e(A,{class:"mt-1 h-100"},{default:t(()=>[v.value?(n(),b("iframe",{key:0,width:"100%",height:"700px",src:u.value},null,8,ft)):_("",!0),l.value?(n(),f(ce,{key:1,src:u.value},null,8,["src"])):_("",!0)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]))}}),gt=["innerHTML"],de=P({__name:"ScalableNumber",props:{number:Number,factor:{type:Number,default:4}},setup(w){const i=w;function c(y){return et(y,i.factor,U().userSettings.useFractions)}return(y,$)=>(n(),b("span",{class:j(["step__scalable-num",[i.factor===1?"step__scalable-num_scaled_false":i.factor>1?"step__scalable-num_scaled_up":"step__scalable-num_scaled_down"]]),innerHTML:c(w.number)},null,10,gt))}}),_t=P({name:"Instructions",computed:{},components:{ScalableNumber:de},props:{instructions_html:{type:String,required:!0},ingredient_factor:{type:Number,required:!0}},data(){return{compiled_instructions:Oe(P({name:"compiled-instructions-component",props:{instructions_html:{type:String,required:!0},ingredient_factor:{type:Number,required:!0}},components:{ScalableNumber:de},template:`
- ${this.instructions_html}
`}))}},mounted(){}});function yt(w,i,c,y,$,v){return n(),f(Ne(w.compiled_instructions),{ingredient_factor:w.ingredient_factor,instructions_html:w.instructions_html},null,8,["ingredient_factor","instructions_html"])}const pe=Me(_t,[["render",yt]]),Vt=P({__name:"Timer",props:{seconds:{type:Number,required:!0}},emits:["stop"],setup(w,{emit:i}){const c=i,y=w,{t:$}=qe(),v=C(y.seconds),l=C(v.value),u=C(!0);let o=E(()=>l.value>0?"primary":"warning");const d=E(()=>v.value==0?100:(1-l.value/v.value)*100);z(()=>{setInterval(()=>{u.value&&l.value>0&&(l.value=l.value-1)},1e3)});function m(r){l.value=Math.max(0,l.value+r),v.value=Math.max(0,v.value+r)}function S(){l.value=y.seconds,v.value=y.seconds,c("stop")}function g(r){const a=I.now(),h=a.plus({seconds:r});let W=h.toLocaleString(I.TIME_SIMPLE);const Q=Math.floor(h.startOf("day").diff(a.startOf("day"),"days").days);if(Q>=1){const Ae=$(Q===1?"Day":"Days");W+=` +${Q} ${Ae}`}return W}return(r,a)=>(n(),b(D,null,[e(xe,{"model-value":d.value,color:"primary",height:"5"},null,8,["model-value"]),e(He,{color:k(o),class:"rounded-0",variant:"tonal"},{close:t(()=>[e(ge,{divided:""},{default:t(()=>[e(R,{width:"40",onClick:a[0]||(a[0]=h=>m(-60))},{default:t(()=>a[5]||(a[5]=[p("i",{class:"fas fa-minus"},null,-1),V("1")])),_:1,__:[5]}),e(R,{width:"40",onClick:a[1]||(a[1]=h=>m(60))},{default:t(()=>a[6]||(a[6]=[p("i",{class:"fas fa-plus"},null,-1),V("1")])),_:1,__:[6]}),e(R,{width:"40",onClick:a[2]||(a[2]=h=>u.value=!u.value)},{default:t(()=>[p("i",{class:j(["fas fa-fw",{"fa-pause":u.value,"fa-play":!u.value}])},null,2)]),_:1}),e(R,{width:"40",onClick:a[3]||(a[3]=h=>S())},{default:t(()=>a[7]||(a[7]=[p("i",{class:"fas fa-stop"},null,-1)])),_:1,__:[7]})]),_:1})]),default:t(()=>[e(Be,null,{default:t(()=>[a[4]||(a[4]=p("i",{class:"fas fa-stopwatch mr-1"},null,-1)),V(" "+s(k(ze).fromMillis(l.value*1e3).toFormat("hh:mm:ss")),1)]),_:1,__:[4]}),V(" "+s(r.$t("FinishedAt"))+" "+s(g(l.value))+" ",1)]),_:1},8,["color"])],64))}}),$t={key:0},bt={key:1},kt=["href"],wt=P({__name:"StepView",props:_e({stepNumber:{type:Number,required:!1,default:1},ingredientFactor:{type:Number,required:!0}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(w){const i=Z(w,"modelValue"),c=w,y=C(!1),$=C(!1),v=E(()=>i.value.ingredients.length>0||i.value.instruction!=null&&i.value.instruction.length>0||i.value.stepRecipeData!=null||i.value.file!=null);return(l,u)=>{const o=je("step-view",!0);return n(),f(A,null,{default:t(()=>[e(M,null,{default:t(()=>[e(L,null,{default:t(()=>[e(T,null,{default:t(()=>[i.value.name?(n(),b("span",$t,s(i.value.name),1)):(n(),b("span",bt,s(l.$t("Step"))+" "+s(c.stepNumber),1))]),_:1}),e(T,{class:"text-right"},{default:t(()=>[e(ge,{density:"compact",variant:"tonal",class:"d-print-none"},{default:t(()=>[i.value.time!=null&&i.value.time>0?(n(),f(R,{key:0,size:"small",color:"info",onClick:u[0]||(u[0]=d=>y.value=!0)},{default:t(()=>[u[4]||(u[4]=p("i",{class:"fas fa-stopwatch mr-1 fa-fw"},null,-1)),V(" "+s(i.value.time),1)]),_:1,__:[4]})):_("",!0),v.value?(n(),f(R,{key:1,size:"small",color:"success",onClick:u[1]||(u[1]=d=>$.value=!$.value)},{default:t(()=>[p("i",{class:j(["fas fa-fw",{"fa-check":!$.value,"fa-times":$.value}])},null,2)]),_:1})):_("",!0)]),_:1})]),_:1})]),_:1})]),_:1}),$.value?_("",!0):(n(),b(D,{key:0},[y.value?(n(),f(Vt,{key:0,seconds:i.value.time!=null?i.value.time*60:0,onStop:u[2]||(u[2]=d=>y.value=!1)},null,8,["seconds"])):_("",!0),i.value.ingredients.length>0||i.value.instruction!=""?(n(),f(F,{key:1},{default:t(()=>[e(L,null,{default:t(()=>[i.value.ingredients.length>0&&(i.value.showIngredientsTable||i.value.show_ingredients_table)?(n(),f(T,{key:0,cols:"12",md:"6"},{default:t(()=>[e(G,{modelValue:i.value.ingredients,"onUpdate:modelValue":u[3]||(u[3]=d=>i.value.ingredients=d),"ingredient-factor":w.ingredientFactor},null,8,["modelValue","ingredient-factor"])]),_:1})):_("",!0),e(T,{cols:"12",md:"6",class:"markdown-body"},{default:t(()=>[i.value.instructionsMarkdown!=null?(n(),f(pe,{key:0,instructions_html:i.value.instructionsMarkdown,ingredient_factor:w.ingredientFactor},null,8,["instructions_html","ingredient_factor"])):(n(),f(pe,{key:1,instructions_html:i.value.instructions_markdown,ingredient_factor:w.ingredientFactor},null,8,["instructions_html","ingredient_factor"]))]),_:1})]),_:1})]),_:1})):_("",!0),i.value.stepRecipe?(n(),f(A,{key:2,class:"ma-2 border-md"},{default:t(()=>[e(M,null,{default:t(()=>[e(ye,{icon:"$recipes"}),V(" "+s(i.value.stepRecipeData.name)+" ",1),e(R,{icon:"fa-solid fa-up-right-from-square",size:"x-small",to:{name:"RecipeViewPage",params:{id:i.value.stepRecipeData.id}},target:"_blank",variant:"plain"},null,8,["to"])]),_:1}),(n(!0),b(D,null,N(i.value.stepRecipeData.steps,(d,m)=>(n(),f(F,{class:"mt-1",key:d.id},{default:t(()=>[e(o,{modelValue:i.value.stepRecipeData.steps[m],"onUpdate:modelValue":S=>i.value.stepRecipeData.steps[m]=S,"step-number":m+1,ingredientFactor:w.ingredientFactor},null,8,["modelValue","onUpdate:modelValue","step-number","ingredientFactor"])]),_:2},1024))),128))]),_:1})):_("",!0),i.value.file?(n(),b(D,{key:3},[i.value.file.preview?(n(),f(ce,{key:0,src:i.value.file.preview},null,8,["src"])):(n(),b("a",{key:1,href:i.value.file.fileDownload},s(l.$t("Download")),9,kt))],64)):_("",!0)],64))]),_:1})}}}),ht={key:0},Tt={key:0},St={class:"ms-2"},At=P({__name:"PropertyView",props:_e({servings:{type:Number,required:!0}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(w){const i=w,c=Z(w,"modelValue"),y=E(()=>c.value.properties!=null&&c.value.properties.length>0),$=E(()=>{let g=!1;for(const[r,a]of Object.entries(c.value.foodProperties))a.total_value!==0&&(console.log(a,a.total_value),g=!0);return g}),v=E(()=>{let g=[];if(l.value=="recipe")y.value&&c.value.properties.forEach(a=>{g.push({id:a.propertyType.id,name:a.propertyType.name,description:a.propertyType.description,foodValues:[],propertyAmountPerServing:a.propertyAmount,propertyAmountTotal:a.propertyAmount*c.value.servings*(i.servings/c.value.servings),missingValue:!1,unit:a.propertyType.unit,type:a.propertyType})});else for(const[a,h]of Object.entries(c.value.foodProperties))g.push({id:h.id,name:h.name,description:h.description,icon:h.icon,foodValues:h.food_values,propertyAmountPerServing:h.total_value/c.value.servings,propertyAmountTotal:h.total_value*(i.servings/c.value.servings),missingValue:h.missing_value,unit:h.unit,type:h});function r(a,h){return a.type.order>h.type.order?1:a.type.order{$.value||(l.value="recipe")});function m(){let g=new H;d.value=!0,g.apiRecipeRetrieve({id:c.value.id}).then(r=>{c.value=r,Je(()=>{o.value!=null&&u.value&&v.value.forEach(a=>{o.value.id==a.id&&(o.value=a)}),d.value=!1})}).catch(r=>{x().addError(B.FETCH_ERROR,r)})}function S(g){return g>80?"error":g>50?"warning":g>30?"info":"success"}return(g,r)=>(n(),b(D,null,[$.value||y.value?(n(),f(A,{key:0,class:"mt-2"},{default:t(()=>[e(M,null,{default:t(()=>[e(ye,{icon:"$properties"}),V(" "+s(g.$t("Properties"))+" ",1),y.value&&y.value?(n(),f(me,{key:0,border:"",divided:"",density:"compact",class:"float-right d-print-none",modelValue:l.value,"onUpdate:modelValue":r[0]||(r[0]=a=>l.value=a)},{default:t(()=>[e(R,{size:"small",value:"food"},{default:t(()=>[V(s(g.$t("Food")),1)]),_:1}),e(R,{size:"small",value:"recipe"},{default:t(()=>[V(s(g.$t("Recipe")),1)]),_:1})]),_:1},8,["modelValue"])):_("",!0)]),_:1}),e(F,null,{default:t(()=>[e(We,{density:"compact",style:{"max-width":"800px"}},{default:t(()=>[p("thead",null,[p("tr",null,[r[5]||(r[5]=p("th",null,null,-1)),p("th",null,s(g.$t("per_serving")),1),p("th",null,s(g.$t("total")),1),l.value=="food"?(n(),b("th",ht)):_("",!0)])]),p("tbody",null,[(n(!0),b(D,null,N(v.value,a=>(n(),b("tr",{key:a.id},[p("td",null,s(a.name),1),p("td",null,s(g.$n(k(ne)(a.propertyAmountPerServing)))+" "+s(a.unit),1),p("td",null,s(g.$n(k(ne)(a.propertyAmountTotal)))+" "+s(a.unit),1),l.value=="food"?(n(),b("td",Tt,[a.missingValue?(n(),f(R,{key:0,onClick:h=>{o.value=a,u.value=!0},variant:"plain",color:"warning",icon:"fa-solid fa-triangle-exclamation",size:"small",class:"d-print-none"},null,8,["onClick"])):_("",!0),a.missingValue?_("",!0):(n(),f(R,{key:1,onClick:h=>{o.value=a,u.value=!0},variant:"plain",icon:"fa-solid fa-circle-info",size:"small",class:"d-print-none"},null,8,["onClick"]))])):_("",!0)]))),128))])]),_:1})]),_:1})]),_:1})):_("",!0),e(Ve,{"max-width":"900px",modelValue:u.value,"onUpdate:modelValue":r[4]||(r[4]=a=>u.value=a)},{default:t(()=>[o.value?(n(),f(A,{key:0,loading:d.value},{default:t(()=>[e($e,{title:`${o.value.propertyAmountTotal} ${o.value.unit} ${o.value.name}`,"sub-title":g.$t("total"),icon:"$properties",modelValue:u.value,"onUpdate:modelValue":r[1]||(r[1]=a=>u.value=a)},null,8,["title","sub-title","modelValue"]),e(F,null,{default:t(()=>[e(Y,null,{default:t(()=>[(n(!0),b(D,null,N(o.value.foodValues,a=>(n(),f(q,{border:"",key:`${o.value.id}_${a.id}`},{prepend:t(()=>[a.value!=null&&o.value.propertyAmountTotal>0?(n(),f(ee,{key:0,size:"55",width:"5","model-value":a.value/o.value.propertyAmountTotal*100,color:S(a.value/o.value.propertyAmountTotal*100)},{default:t(()=>[V(s(Math.round(a.value/o.value.propertyAmountTotal*100))+"% ",1)]),_:2},1032,["model-value","color"])):_("",!0),a.value==null?(n(),f(ee,{key:1,size:"55",width:"5"},{default:t(()=>r[6]||(r[6]=[V("?")])),_:1,__:[6]})):_("",!0)]),append:t(()=>[a.missing_conversion?(n(),f(J,{key:0,color:"create",class:"cursor-pointer","prepend-icon":"$create"},{default:t(()=>[V(s(g.$t("Conversion"))+": "+s(a.missing_conversion.base_unit.name)+" ",1),r[7]||(r[7]=p("i",{class:"fa-solid fa-arrow-right me-1 ms-1"},null,-1)),V(" "+s(a.missing_conversion.converted_unit.name)+" ",1),e(X,{model:"UnitConversion",onCreate:r[2]||(r[2]=h=>m()),"item-defaults":{baseAmount:1,baseUnit:a.missing_conversion.base_unit,convertedUnit:a.missing_conversion.converted_unit,food:a.food}},null,8,["item-defaults"])]),_:2,__:[7]},1024)):a.value!=null?(n(),f(J,{key:1},{default:t(()=>[V(s(g.$n(a.value))+" "+s(o.value.unit),1)]),_:2},1024)):a.missing_unit?(n(),f(J,{key:2,color:"warning","prepend-icon":"$edit",class:"cursor-pointer",to:{name:"ModelEditPage",params:{model:"Recipe",id:c.value.id}}},{default:t(()=>[V(s(g.$t("NoUnit")),1)]),_:1},8,["to"])):(n(),f(J,{key:3,color:"error","prepend-icon":"$edit",class:"cursor-pointer"},{default:t(()=>[V(s(g.$t("MissingProperties"))+" ",1),e(X,{model:"Food","item-id":a.food.id,"onUpdate:modelValue":r[3]||(r[3]=h=>m())},null,8,["item-id"])]),_:2},1024))]),default:t(()=>[p("span",St,s(a.food.name),1)]),_:2},1024))),128))]),_:1})]),_:1}),e(ve,null,{default:t(()=>[e(R,{to:{name:"PropertyEditorPage",query:{recipe:c.value.id}}},{default:t(()=>[V(s(g.$t("Property_Editor")),1)]),_:1},8,["to"])]),_:1})]),_:1},8,["loading"])):_("",!0)]),_:1},8,["modelValue"])],64))}}),Ct={class:"d-block d-lg-none"},Rt={class:"text-grey"},Ut={class:"text-grey"},Dt={class:"cursor-pointer"},Et={class:"text-grey"},It={key:0},Pt={key:1},Lt={class:"d-none d-lg-block"},Ft={class:"d-flex"},Mt={class:"flex-column flex-grow-1"},Nt={class:"text-grey"},Ot={class:"text-grey"},qt={class:"cursor-pointer"},xt={class:"text-grey"},Bt={key:0},zt={key:1},Ht=["href"],jt=P({__name:"RecipeView",props:{modelValue:{required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(w){const{request:i,release:c}=Ge(),{doAiImport:y,fileApiLoading:$}=nt(),v=C(!1),l=Z(w,"modelValue"),u=C(1),o=C(!1),d=C(U().activeSpace.aiDefaultProvider),m=E(()=>u.value/(l.value.servings!=null?Math.max(l.value.servings,1):1));be(()=>l.value.servings,()=>{l.value.servings&&(u.value=l.value.servings)}),z(()=>{i("screen")}),Ke(()=>{c()});function S(){let g=new H;y(d.value.id,null,"",l.value.id).then(r=>{r.recipe?(l.value.internal=!0,l.value.steps=r.recipe.steps,l.value.keywords=r.recipe.keywords,l.value.servings=r.recipe.servings,l.value.servingsText=r.recipe.servingsText,l.value.workingTime=r.recipe.workingTime,l.value.waitingTime=r.recipe.waitingTime,u.value=r.recipe.servings,v.value=!0,g.apiRecipeUpdate({id:l.value.id,recipe:l.value}).then(a=>{l.value=a}).catch(a=>{x().addError(B.UPDATE_ERROR,a)}).finally(()=>{v.value=!1})):x().addError(B.UPDATE_ERROR,[r.error,r.msg])}).catch(r=>{x().addError(B.FETCH_ERROR,r)})}return(g,r)=>(n(),b(D,null,[l.value.name==null?(n(),b(D,{key:0},[e(O,{type:"card",class:"mt-md-4 rounded-0"}),e(O,{type:"article",class:"mt-2"}),e(O,{type:"article",class:"mt-2"}),e(O,{type:"list-item-avatar-three-line",class:"mt-2"}),e(O,{type:"list-item-avatar-two-line"}),e(O,{type:"list-item-avatar-three-line"})],64)):_("",!0),l.value.name!=null?(n(),b(D,{key:1},[p("template",Ct,[e(A,{class:"rounded-0"},{default:t(()=>[l.value.image!=null?(n(),f(te,{key:0,"max-height":"25vh",recipe:l.value},null,8,["recipe"])):_("",!0),e(A,null,{default:t(()=>[e(le,{class:"d-flex align-center"},{default:t(()=>[p("span",{class:j(["ps-2 text-h5 flex-grow-1 pa-1",{"text-truncate":!o.value}]),onClick:r[0]||(r[0]=a=>o.value=!o.value)},s(l.value.name),3),k(U)().isAuthenticated?(n(),f(re,{key:0,recipe:l.value},null,8,["recipe"])):_("",!0)]),_:1}),e(oe,{variant:"flat",class:"ms-1",keywords:l.value.keywords},null,8,["keywords"]),l.value._private?(n(),f(se,{key:0,users:l.value.shared},null,8,["users"])):_("",!0),l.value.rating?(n(),f(K,{key:1,modelValue:l.value.rating,"onUpdate:modelValue":r[1]||(r[1]=a=>l.value.rating=a),size:"x-small","half-increments":"",readonly:""},null,8,["modelValue"])):_("",!0),e(le,{class:"ps-2 text-disabled"},{default:t(()=>[V(s(l.value.description),1)]),_:1})]),_:1})]),_:1}),e(A,{class:"mt-1"},{default:t(()=>[e(ke,null,{default:t(()=>[e(L,{class:"text-center text-body-2"},{default:t(()=>[e(T,{class:"pt-1 pb-1"},{default:t(()=>[r[8]||(r[8]=p("i",{class:"fas fa-cogs fa-fw mr-1"},null,-1)),V(" "+s(l.value.workingTime)+" min",1),r[9]||(r[9]=p("br",null,null,-1)),p("div",Rt,s(g.$t("WorkingTime")),1)]),_:1,__:[8,9]}),e(T,{class:"pt-1 pb-1"},{default:t(()=>[p("div",null,[r[10]||(r[10]=p("i",{class:"fas fa-hourglass-half fa-fw mr-1"},null,-1)),V(" "+s(l.value.waitingTime)+" min",1)]),p("div",Ut,s(g.$t("WaitingTime")),1)]),_:1}),e(T,{class:"pt-1 pb-1"},{default:t(()=>[p("div",Dt,[r[11]||(r[11]=p("i",{class:"fas fa-sort-numeric-up fa-fw mr-1"},null,-1)),V(" "+s(u.value)+" ",1),r[12]||(r[12]=p("br",null,null,-1)),p("div",Et,[l.value.servingsText?(n(),b("span",It,s(l.value.servingsText),1)):(n(),b("span",Pt,s(g.$t("Servings")),1))]),e(ae,{number:u.value,onConfirm:r[2]||(r[2]=a=>{u.value=a}),title:"Servings"},null,8,["number"])])]),_:1})]),_:1})]),_:1})]),_:1})]),p("template",Lt,[e(L,{dense:""},{default:t(()=>[e(T,{cols:"8"},{default:t(()=>[e(te,{rounded:!0,"max-height":"40vh",recipe:l.value},null,8,["recipe"])]),_:1}),e(T,{cols:"4"},{default:t(()=>[e(A,{class:"h-100 d-flex flex-column"},{default:t(()=>[e(F,{class:"flex-grow-1"},{default:t(()=>[p("div",Ft,[p("h1",Mt,s(l.value.name),1),k(U)().isAuthenticated?(n(),f(re,{key:0,recipe:l.value,class:"flex-column mb-auto mt-2 float-right"},null,8,["recipe"])):_("",!0)]),p("p",null,s(g.$t("created_by"))+" "+s(l.value.createdBy.displayName)+" ("+s(k(I).fromJSDate(l.value.createdAt).toLocaleString(k(I).DATE_SHORT))+") ",1),p("p",null,[p("i",null,s(l.value.description),1)]),l.value._private?(n(),f(se,{key:0,users:l.value.shared},null,8,["users"])):_("",!0),l.value.rating?(n(),f(K,{key:1,modelValue:l.value.rating,"onUpdate:modelValue":r[3]||(r[3]=a=>l.value.rating=a),size:"x-small",readonly:""},null,8,["modelValue"])):_("",!0),e(oe,{variant:"flat",class:"mt-4",keywords:l.value.keywords},null,8,["keywords"])]),_:1}),e(L,{class:"text-center text-body-2 mb-1 flex-grow-0"},{default:t(()=>[e(T,null,{default:t(()=>[r[13]||(r[13]=p("i",{class:"fas fa-cogs fa-fw mr-1"},null,-1)),V(" "+s(l.value.workingTime)+" "+s(g.$t("min")),1),r[14]||(r[14]=p("br",null,null,-1)),p("div",Nt,s(g.$t("WorkingTime")),1)]),_:1,__:[13,14]}),e(T,null,{default:t(()=>[p("div",null,[r[15]||(r[15]=p("i",{class:"fas fa-hourglass-half fa-fw mr-1"},null,-1)),V(" "+s(l.value.waitingTime)+" "+s(g.$t("min")),1)]),p("div",Ot,s(g.$t("WaitingTime")),1)]),_:1}),e(T,null,{default:t(()=>[p("div",qt,[r[16]||(r[16]=p("i",{class:"fas fa-sort-numeric-up fa-fw mr-1"},null,-1)),V(" "+s(u.value)+" ",1),r[17]||(r[17]=p("br",null,null,-1)),p("div",xt,[l.value.servingsText?(n(),b("span",Bt,s(l.value.servingsText),1)):(n(),b("span",zt,s(g.$t("Servings")),1))]),e(ae,{number:u.value,onConfirm:r[4]||(r[4]=a=>{u.value=a}),title:"Servings"},null,8,["number"])])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),l.value.filePath?(n(),b(D,{key:0},[e(ct,{class:"mt-2",recipe:l.value},null,8,["recipe"]),l.value.internal?_("",!0):(n(),f(A,{key:0,title:g.$t("AI"),"prepend-icon":"$ai",loading:k($)||v.value,disabled:k($)||v.value||!k(U)().activeSpace.aiEnabled},{default:t(()=>[e(F,null,{default:t(()=>[V(s(g.$t("ConvertUsingAI"))+" ",1),e(Qe,{model:"AiProvider",modelValue:d.value,"onUpdate:modelValue":r[6]||(r[6]=a=>d.value=a)},{append:t(()=>[e(R,{onClick:r[5]||(r[5]=a=>S()),icon:"fa-solid fa-person-running",color:"success"})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["title","loading","disabled"]))],64)):_("",!0),(l.value.steps.length>1||l.value.steps.length==1&&!l.value.steps[0].showIngredientsTable)&&l.value.showIngredientOverview?(n(),f(A,{key:1,class:"mt-1"},{default:t(()=>[e(it,{steps:l.value.steps,"ingredient-factor":m.value},null,8,["steps","ingredient-factor"])]),_:1})):_("",!0),(n(!0),b(D,null,N(l.value.steps,(a,h)=>(n(),f(A,{class:"mt-1",key:a.id},{default:t(()=>[e(wt,{modelValue:l.value.steps[h],"onUpdate:modelValue":W=>l.value.steps[h]=W,"step-number":h+1,ingredientFactor:m.value},null,8,["modelValue","onUpdate:modelValue","step-number","ingredientFactor"])]),_:2},1024))),128)),e(At,{modelValue:l.value,"onUpdate:modelValue":r[7]||(r[7]=a=>l.value=a),servings:u.value},null,8,["modelValue","servings"]),e(A,{class:"mt-2"},{default:t(()=>[e(F,null,{default:t(()=>[e(L,null,{default:t(()=>[e(T,{cols:"12",md:"3"},{default:t(()=>[e(A,{variant:"outlined",title:g.$t("CreatedBy"),subtitle:l.value.createdBy.displayName,"prepend-icon":"fa-solid fa-user",to:k(U)().isAuthenticated?{name:"SearchPage",query:{createdby:l.value.createdBy.id}}:void 0},null,8,["title","subtitle","to"])]),_:1}),e(T,{cols:"12",md:"3"},{default:t(()=>[e(A,{variant:"outlined",title:g.$t("Created"),subtitle:k(I).fromJSDate(l.value.createdAt).toLocaleString(k(I).DATETIME_MED),"prepend-icon":"$create",to:k(U)().isAuthenticated?{name:"SearchPage",query:{createdon:k(I).fromJSDate(l.value.createdAt).toISODate()}}:void 0},null,8,["title","subtitle","to"])]),_:1}),e(T,{cols:"12",md:"3"},{default:t(()=>[e(A,{variant:"outlined",title:g.$t("Updated"),subtitle:k(I).fromJSDate(l.value.updatedAt).toLocaleString(k(I).DATETIME_MED),"prepend-icon":"$edit",to:k(U)().isAuthenticated?{name:"SearchPage",query:{updatedon:k(I).fromJSDate(l.value.updatedAt).toISODate()}}:void 0},null,8,["title","subtitle","to"])]),_:1}),l.value.sourceUrl?(n(),f(T,{key:0,cols:"12",md:"3"},{default:t(()=>[e(A,{variant:"outlined",title:g.$t("Imported_From"),"prepend-icon":"$import"},{subtitle:t(()=>[p("a",{href:l.value.sourceUrl,target:"_blank"},s(l.value.sourceUrl),9,Ht)]),_:1},8,["title"])]),_:1})):_("",!0)]),_:1})]),_:1})]),_:1}),k(U)().userSettings.comments?(n(),f(vt,{key:2,recipe:l.value},null,8,["recipe"])):_("",!0)],64)):_("",!0)],64))}}),Wt={href:"https://tandoor.dev",target:"_blank"},Jt={href:"https://tandoor.dev",target:"_blank"},Gt=P({__name:"ImportTandoorDialog",setup(w){const i=E(()=>"https://app.tandoor.dev/recipe/import/?url="+location.href),c=E(()=>{let l=v.value;return l.endsWith("/")||(l+="/"),l+"recipe/import/?url="+location.href}),y=C(!1),$=C("hosted"),v=C("");return(l,u)=>(n(),b(D,null,[e(A,{class:"ml-auto mr-auto","max-width":"300px","prepend-avatar":rt,title:l.$t("ImportIntoTandoor"),onClick:u[0]||(u[0]=o=>y.value=!0)},null,8,["title"]),e(Ve,{"max-width":"800px",modelValue:y.value,"onUpdate:modelValue":u[5]||(u[5]=o=>y.value=o)},{default:t(()=>[e(A,null,{default:t(()=>[e($e,{title:l.$t("ImportIntoTandoor"),modelValue:y.value,"onUpdate:modelValue":u[1]||(u[1]=o=>y.value=o)},null,8,["title","modelValue"]),e(st,{grow:"",modelValue:$.value,"onUpdate:modelValue":u[2]||(u[2]=o=>$.value=o)},{default:t(()=>[e(ue,{value:"hosted"},{default:t(()=>u[6]||(u[6]=[V("tandoor.dev")])),_:1,__:[6]}),e(ue,{value:"selfhosted"},{default:t(()=>[V(s(l.$t("SelfHosted")),1)]),_:1})]),_:1},8,["modelValue"]),e(F,null,{default:t(()=>[e(ot,{modelValue:$.value,"onUpdate:modelValue":u[4]||(u[4]=o=>$.value=o)},{default:t(()=>[e(ie,{value:"hosted"},{default:t(()=>[p("p",null,[V(s(l.$t("AboutTandoor"))+" ",1),p("a",Wt,s(l.$t("Learn_More"))+".",1)]),p("p",null,s(l.$t("ImportIntoTandoorHelp")),1),e(Y,null,{default:t(()=>[e(q,{border:""},{append:t(()=>[e(R,{icon:"fa-solid fa-arrow-up-right-from-square",href:"https://app.tandoor.dev",target:"_blank"})]),default:t(()=>[e(M,null,{default:t(()=>[V("1. "+s(l.$t("CreateAccount")),1)]),_:1})]),_:1}),e(q,{border:""},{append:t(()=>[e(R,{icon:"fa-solid fa-paper-plane",href:i.value,target:"_blank"},null,8,["href"])]),default:t(()=>[e(M,null,{default:t(()=>[V("2. "+s(l.$t("Import")),1)]),_:1})]),_:1})]),_:1})]),_:1}),e(ie,{value:"selfhosted"},{default:t(()=>[p("p",null,[V(s(l.$t("AboutTandoor"))+" ",1),p("a",Jt,s(l.$t("Learn_More"))+".",1)]),p("p",null,s(l.$t("ImportIntoTandoorHelp")),1),e(q,{border:""},{default:t(()=>[e(M,null,{default:t(()=>[V("1. "+s(l.$t("URL")),1)]),_:1}),e(Xe,{modelValue:v.value,"onUpdate:modelValue":u[3]||(u[3]=o=>v.value=o),label:l.$t("Url")},null,8,["modelValue","label"])]),_:1}),e(q,{border:""},{append:t(()=>[e(R,{icon:"fa-solid fa-paper-plane",href:c.value,disabled:v.value=="",target:"_blank"},null,8,["href","disabled"])]),default:t(()=>[e(M,null,{default:t(()=>[V("2. "+s(l.$t("Import")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"])],64))}}),Kt={key:0,class:"mt-2"},ml=P({__name:"RecipeViewPage",props:{id:{type:String,required:!0}},setup(w){const i=w,c=fe("history"),{mobile:y}=Ye(),$=Ze(),v=E(()=>c.share&&typeof c.share=="string"),l=C({});be(()=>i.id,()=>{u(i.id)}),z(()=>{u(i.id)});function u(o){const d=new H;l.value={};let m={id:i.id};v.value&&(m.share=c.share),d.apiRecipeRetrieve(m).then(S=>{l.value=S,$.value=l.value.name,U().isAuthenticated&&d.apiViewLogCreate({viewLog:{recipe:Number(o)}})}).catch(S=>{S.response.status==403||x().addError(B.FETCH_ERROR,S)})}return(o,d)=>(n(),f(ke,{class:j({"ps-0 pe-0 pt-0":k(y)})},{default:t(()=>[e(jt,{modelValue:l.value,"onUpdate:modelValue":d[0]||(d[0]=m=>l.value=m)},null,8,["modelValue"]),v.value&&Object.keys(l.value).length>0?(n(),b("div",Kt,[e(Gt)])):_("",!0)]),_:1},8,["class"]))}});export{ml as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/RecipeViewPage-CDj_dH5L.js.gz b/config/tandoor/staticfiles/vue3/assets/RecipeViewPage-CDj_dH5L.js.gz
deleted file mode 100644
index 129e1a2e..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/RecipeViewPage-CDj_dH5L.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SearchPage-DRMC5092.d14b6ae95d5c.js b/config/tandoor/staticfiles/vue3/assets/SearchPage-DRMC5092.d14b6ae95d5c.js
deleted file mode 100644
index f4a1e7b0..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SearchPage-DRMC5092.d14b6ae95d5c.js
+++ /dev/null
@@ -1 +0,0 @@
-import{ak as Le,al as je,am as Te,an as Ee,ao as De,ap as He,aq as Ke,ar as _e,as as Ge,at as Me,au as Fe,g as t,av as ne,aw as Ie,ax as ze,ay as qe,az as We,aA as xe,aB as Je,aC as Ye,aD as Qe,i as Z,aE as Xe,aF as Ze,aG as Pe,G as E,d as P,c as se,h as k,f as c,aH as ge,aI as Ve,w as d,aJ as fe,aK as ea,aL as me,u as ke,r as b,aM as $e,aN as ye,M as z,aO as we,l as v,Z as aa,B as he,O as W,ac as Ue,k as M,V as T,a2 as la,ag as m,U as J,T as F,af as q,S as ie,aP as ue,z as O,j as H,t as K,A as Y,Q,R as X,a as ta,L as S,o as oa,aQ as da,K as na,e as D,aR as sa,aS as te,b as oe,p as pe,F as ve,aT as ia,H as ua,x as ra,y as ce,I as be,aU as fa,s as ma,aV as L,aW as U,aX as pa,aY as j}from"./main-BhFWIRV_.js";import{_ as va}from"./PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.js";import{_ as ca}from"./KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.js";import{R as ba}from"./RecipeCard-ZQiVryVZ.js";import{u as r,_ as ga}from"./BatchDeleteDialog.vue_vue_type_script_setup_true_lang-D0heUVsC.js";import{V as Va}from"./VRating-BGFrV4il.js";import{V as ka,a as $a,b as ya}from"./number_utils-1sJWKMUK.js";import{V as wa}from"./VAutocomplete-b809Bykv.js";import{V as ha}from"./VDataTableServer-PUUq4Eqa.js";import"./BtnCopy.vue_vue_type_script_setup_true_lang-B_1A58TG.js";import"./VTooltip-CP00KBBq.js";import"./AddToShoppingDialog.vue_vue_type_script_setup_true_lang-ByrmCw9F.js";import"./model_utils-CVQgSPL_.js";import"./useFileApi-4KcBp6Fj.js";const Ua=je({bordered:Boolean,color:String,content:[Number,String],dot:Boolean,floating:Boolean,icon:Qe,inline:Boolean,label:{type:String,default:"$vuetify.badge"},max:[Number,String],modelValue:{type:Boolean,default:!0},offsetX:[Number,String],offsetY:[Number,String],textColor:String,...Ye(),...Je({location:"top end"}),...xe(),...We(),...qe(),...ze({transition:"scale-rotate-transition"}),...Ie()},"VBadge"),Ba=Le()({name:"VBadge",inheritAttrs:!1,props:Ua(),setup(u,e){const{backgroundColorClasses:$,backgroundColorStyles:B}=Te(()=>u.color),{roundedClasses:g}=Ee(u),{t:p}=De(),{textColorClasses:y,textColorStyles:_}=He(()=>u.textColor),{themeClasses:i}=Ke(),{locationStyles:w}=_e(u,!0,h=>(u.floating?u.dot?2:4:u.dot?8:12)+(["top","bottom"].includes(h)?Number(u.offsetY??0):["left","right"].includes(h)?Number(u.offsetX??0):0)),{dimensionStyles:C}=Ge(u);return Me(()=>{const h=Number(u.content),f=!u.max||isNaN(h)?u.content:h<=Number(u.max)?h:`${u.max}+`,[n,s]=Fe(e.attrs,["aria-atomic","aria-label","aria-live","role","title"]);return t(u.tag,ne({class:["v-badge",{"v-badge--bordered":u.bordered,"v-badge--dot":u.dot,"v-badge--floating":u.floating,"v-badge--inline":u.inline},u.class]},s,{style:u.style}),{default:()=>[Z("div",{class:"v-badge__wrapper"},[e.slots.default?.(),t(Xe,{transition:u.transition},{default:()=>[Ze(Z("span",ne({class:["v-badge__badge",i.value,$.value,g.value,y.value],style:[B.value,_.value,C.value,u.inline?{}:w.value],"aria-atomic":"true","aria-label":p(u.label,h),"aria-live":"polite",role:"status"},n),[u.dot?void 0:e.slots.badge?e.slots.badge?.():u.icon?t(E,{icon:u.icon},null):f]),[[Pe,u.modelValue]])]})])]})}),{}}}),Ca=P({__name:"RandomIcon",setup(u){const e=se(()=>{let $=["fa-solid fa-fw fa-hamburger","fa-solid fa-fw fa-utensils","fa-solid fa-fw fa-apple-alt","fa-solid fa-fw fa-bacon","fa-solid fa-fw fa-bread-slice","fa-solid fa-fw fa-candy-cane","fa-solid fa-fw fa-carrot","fa-solid fa-fw fa-cheese","fa-solid fa-fw fa-cookie","fa-solid fa-fw fa-drumstick-bite","fa-solid fa-fw fa-egg","fa-solid fa-fw fa-fish","fa-solid fa-fw fa-hotdog","fa-solid fa-fw fa-ice-cream","fa-solid fa-fw fa-lemon","fa-solid fa-fw fa-pepper-hot","fa-solid fa-fw fa-pizza-slice","fa-solid fa-fw fa-cookie-bite"];return $[Math.floor(Math.random()*$.length)]});return($,B)=>(c(),k(E,{icon:e.value},null,8,["icon"]))}}),de=P({__name:"RatingField",props:{modelValue:{type:Boolean,required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(u){const e=ge(u,"modelValue");return($,B)=>(c(),k(ea,{label:"Test",hint:"Test hint","persistent-hint":""},Ve({default:d(()=>[t(Va,{modelValue:e.value,"onUpdate:modelValue":B[0]||(B[0]=g=>e.value=g)},null,8,["modelValue"])]),_:2},[$.$slots.prepend?{name:"prepend",fn:d(()=>[fe($.$slots,"prepend")]),key:"0"}:void 0,$.$slots.append?{name:"append",fn:d(()=>[fe($.$slots,"append")]),key:"1"}:void 0]),1024))}}),Na=P({__name:"BatchEditRecipeDialog",props:me({items:{type:Array,required:!0},activator:{type:String,default:"parent"}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:me(["change"],["update:modelValue"]),setup(u,{emit:e}){const $=e,B=u,{t:g}=ke(),p=ge(u,"modelValue"),y=b(!1),_=b([]),i=b({recipeBatchUpdate:{servingsText:""}}),w=b(!1),C=b([{value:!0,title:g("Yes")},{value:!1,title:g("No")}]);$e(p,(f,n)=>{!n&&f&&B.items!=null&&(i.value.recipeBatchUpdate.recipes=B.items.flatMap(s=>s.id),_.value=JSON.parse(JSON.stringify(B.items)))});function h(){let f=new Y;y.value=!0,w.value||(i.value.recipeBatchUpdate.servingsText=void 0),f.apiRecipeBatchUpdateUpdate(i.value).then(n=>{}).catch(n=>{Q().addError(X.UPDATE_ERROR,n)}).finally(()=>{$("change"),y.value=!1})}return(f,n)=>(c(),k(ye,{"max-width":"1200px",activator:B.activator,modelValue:p.value,"onUpdate:modelValue":n[20]||(n[20]=s=>p.value=s)},{default:d(()=>[t(z,{loading:y.value},{default:d(()=>[t(we,{title:f.$t("BatchEdit"),"sub-title":f.$t("BatchEditUpdatingItemsCount",{type:f.$t("Recipes"),count:_.value.length}),icon:v(aa).icon,modelValue:p.value,"onUpdate:modelValue":n[0]||(n[0]=s=>p.value=s)},null,8,["title","sub-title","icon","modelValue"]),t(he),t(W,null,{default:d(()=>[t(Ue,null,{default:d(()=>[t(M,null,{default:d(()=>[t(T,{cols:"12",md:"6"},{default:d(()=>[t(z,{title:f.$t("Keywords"),"prepend-icon":v(la).icon,variant:"plain"},{default:d(()=>[t(W,null,{default:d(()=>[t(m,{model:"Keyword",modelValue:i.value.recipeBatchUpdate.keywordsAdd,"onUpdate:modelValue":n[1]||(n[1]=s=>i.value.recipeBatchUpdate.keywordsAdd=s),object:!1,"allow-create":"",mode:"tags"},{prepend:d(()=>[t(E,{icon:"fa-solid fa-add"})]),_:1},8,["modelValue"]),t(m,{model:"Keyword",modelValue:i.value.recipeBatchUpdate.keywordsRemove,"onUpdate:modelValue":n[2]||(n[2]=s=>i.value.recipeBatchUpdate.keywordsRemove=s),object:!1,"allow-create":"",mode:"tags"},{prepend:d(()=>[t(E,{icon:"fa-solid fa-minus"})]),_:1},8,["modelValue"]),t(m,{model:"Keyword",modelValue:i.value.recipeBatchUpdate.keywordsSet,"onUpdate:modelValue":n[3]||(n[3]=s=>i.value.recipeBatchUpdate.keywordsSet=s),object:!1,"allow-create":"",mode:"tags"},{prepend:d(()=>[t(E,{icon:"fa-solid fa-equals"})]),_:1},8,["modelValue"]),t(J,{label:f.$t("RemoveAllType",{type:f.$t("Keywords")}),"hide-details":"",modelValue:i.value.recipeBatchUpdate.keywordsRemoveAll,"onUpdate:modelValue":n[4]||(n[4]=s=>i.value.recipeBatchUpdate.keywordsRemoveAll=s)},null,8,["label","modelValue"])]),_:1})]),_:1},8,["title","prepend-icon"]),t(z,{title:f.$t("Private_Recipe"),subtitle:f.$t("Private_Recipe_Help"),"prepend-icon":"fa-solid fa-eye-slash",variant:"plain"},{default:d(()=>[t(W,null,{default:d(()=>[t(F,{items:C.value,label:f.$t("Private_Recipe"),clearable:"",modelValue:i.value.recipeBatchUpdate._private,"onUpdate:modelValue":n[5]||(n[5]=s=>i.value.recipeBatchUpdate._private=s)},null,8,["items","label","modelValue"]),t(m,{model:"User",modelValue:i.value.recipeBatchUpdate.sharedAdd,"onUpdate:modelValue":n[6]||(n[6]=s=>i.value.recipeBatchUpdate.sharedAdd=s),object:!1,"allow-create":"",mode:"tags"},{prepend:d(()=>[t(E,{icon:"fa-solid fa-add"})]),_:1},8,["modelValue"]),t(m,{model:"User",modelValue:i.value.recipeBatchUpdate.sharedRemove,"onUpdate:modelValue":n[7]||(n[7]=s=>i.value.recipeBatchUpdate.sharedRemove=s),object:!1,"allow-create":"",mode:"tags"},{prepend:d(()=>[t(E,{icon:"fa-solid fa-minus"})]),_:1},8,["modelValue"]),t(m,{model:"User",modelValue:i.value.recipeBatchUpdate.sharedSet,"onUpdate:modelValue":n[8]||(n[8]=s=>i.value.recipeBatchUpdate.sharedSet=s),object:!1,"allow-create":"",mode:"tags"},{prepend:d(()=>[t(E,{icon:"fa-solid fa-equals"})]),_:1},8,["modelValue"]),t(J,{label:f.$t("RemoveAllType",{type:f.$t("Users")}),"hide-details":"",modelValue:i.value.recipeBatchUpdate.sharedRemoveAll,"onUpdate:modelValue":n[9]||(n[9]=s=>i.value.recipeBatchUpdate.sharedRemoveAll=s)},null,8,["label","modelValue"])]),_:1})]),_:1},8,["title","subtitle"])]),_:1}),t(T,{cols:"12",md:"6"},{default:d(()=>[t(z,{title:f.$t("Miscellaneous"),"prepend-icon":"fa-solid fa-list",variant:"plain"},{default:d(()=>[t(W,null,{default:d(()=>[t(q,{label:f.$t("WorkingTime"),modelValue:i.value.recipeBatchUpdate.workingTime,"onUpdate:modelValue":n[10]||(n[10]=s=>i.value.recipeBatchUpdate.workingTime=s),step:5},null,8,["label","modelValue"]),t(q,{label:f.$t("WaitingTime"),modelValue:i.value.recipeBatchUpdate.waitingTime,"onUpdate:modelValue":n[11]||(n[11]=s=>i.value.recipeBatchUpdate.waitingTime=s),step:5},null,8,["label","modelValue"]),t(q,{label:f.$t("Serving"),modelValue:i.value.recipeBatchUpdate.servings,"onUpdate:modelValue":n[12]||(n[12]=s=>i.value.recipeBatchUpdate.servings=s)},null,8,["label","modelValue"]),t(ie,{label:f.$t("ServingsText"),modelValue:i.value.recipeBatchUpdate.servingsText,"onUpdate:modelValue":[n[14]||(n[14]=s=>i.value.recipeBatchUpdate.servingsText=s),n[15]||(n[15]=s=>w.value=!0)]},{append:d(()=>[t(J,{modelValue:w.value,"onUpdate:modelValue":n[13]||(n[13]=s=>w.value=s),"hide-details":""},null,8,["modelValue"])]),_:1},8,["label","modelValue"]),t(F,{items:C.value,label:f.$t("show_ingredient_overview"),clearable:"",modelValue:i.value.recipeBatchUpdate.showIngredientOverview,"onUpdate:modelValue":n[16]||(n[16]=s=>i.value.recipeBatchUpdate.showIngredientOverview=s)},null,8,["items","label","modelValue"]),t(J,{"hide-details":"",label:f.$t("DeleteSomething",{item:f.$t("Description")}),modelValue:i.value.recipeBatchUpdate.clearDescription,"onUpdate:modelValue":n[17]||(n[17]=s=>i.value.recipeBatchUpdate.clearDescription=s)},null,8,["label","modelValue"])]),_:1})]),_:1},8,["title"])]),_:1})]),_:1})]),_:1})]),_:1}),t(ue,null,{default:d(()=>[t(O,{disabled:y.value,onClick:n[18]||(n[18]=s=>p.value=!1)},{default:d(()=>[H(K(f.$t("Cancel")),1)]),_:1},8,["disabled"]),t(O,{color:"warning",loading:y.value,onClick:n[19]||(n[19]=s=>h()),disabled:_.value.length<1},{default:d(()=>[H(K(f.$t("Update")),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1},8,["loading"])]),_:1},8,["activator","modelValue"]))}}),Fa=P({__name:"SearchPage",setup(u){const{t:e}=ke(),$=ma(),{mdAndUp:B}=ta(),g=r("query",""),p=r("page",1,{transform:Number}),y=r("pageSize",S().deviceSettings.general_tableItemsPerPage,{transform:Number}),_=se(()=>{let a=[];return S().deviceSettings.search_visibleFilters=[],Object.entries(N.value).forEach(l=>{let[o,V]=l;V.enabled?S().deviceSettings.search_visibleFilters.push(V.id):a.push({value:V.id,title:V.label})}),a}),i=b(!1),w=b(!1),C=b(""),h=b(null),f=b(!1),n=se(()=>{let a=[{title:e("Image"),width:"1%",noBreak:!0,key:"image"},{title:e("Name"),key:"name"}];return B.value&&a.push({title:e("Keywords"),key:"keywords"}),a.push({title:e("Actions"),key:"action",width:"1%",noBreak:!0,align:"end"}),a}),s=b(0),G=b([]),R=b(null),x=b(""),I=b([]),ee=b(!1),ae=b(!1);$e(()=>g.value,()=>{A({page:1})}),oa(()=>{S().deviceSettings.search_visibleFilters.forEach(a=>{a in N.value?N.value[a].enabled=!0:S().deviceSettings.search_visibleFilters.splice(S().deviceSettings.search_visibleFilters.indexOf(a),1)}),Ne(),A({page:p.value})});function A(a){let l=new Y;i.value=!0,f.value=!1,I.value=[],p.value=a.page;let o={query:g.value,page:a.page,pageSize:y.value};Object.values(N.value).forEach(V=>{le(V)||(o[V.id]=V.modelValue,f.value=!0)}),l.apiRecipeList(o).then(V=>{G.value=V.results,s.value=V.count}).catch(V=>{Q().addError(X.FETCH_ERROR,V)}).finally(()=>{i.value=!1,window.scrollTo({top:0,behavior:"smooth"})})}function Be(){p.value=1,g.value="",Object.values(N.value).forEach(a=>{a.modelValue=a.default}),R.value=null,G.value=[],A({page:1})}function Ce(a,l){$.push({name:"RecipeViewPage",params:{id:G.value[l.index].id}})}function Ne(){Object.values(N.value).forEach(a=>{le(a)||(a.enabled=!0)})}function le(a){return Array.isArray(a.default)&&Array.isArray(a.modelValue)?a.default.length==a.modelValue.length:isNaN(a.default)&&isNaN(a.modelValue)?!0:da(a.default)===a.modelValue}function Oe(){let a=new Y;R.value!=null?(i.value=!0,R.value.search=JSON.stringify(re()),a.apiCustomFilterUpdate({id:R.value.id,customFilter:R.value}).then(l=>{R.value=l}).catch(l=>{Q().addError(X.UPDATE_ERROR,l)}).finally(()=>{i.value=!1})):(x.value="",w.value=!0)}function Re(){let a=new Y;w.value=!1,i.value=!0,a.apiCustomFilterCreate({customFilter:{name:x.value,search:JSON.stringify(re())}}).then(l=>{R.value=l}).catch(l=>{Q().addError(X.UPDATE_ERROR,l)}).finally(()=>{i.value=!1})}function Ae(){let a=JSON.parse(R.value.search);a.version==null&&(a=Se(a)),a.query!=null&&(g.value=a.query),Object.values(N.value).forEach(l=>{let o=l.id.replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase();a[o]!=null&&(l.modelValue=a[o],l.enabled=!0)})}function re(){let a={};return g.value!=""&&(a.query=g.value),Object.values(N.value).forEach(l=>{if(!le(l)){let o=l.id.replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase();a[o]=l.modelValue}}),a.version="2",a}function Se(a){return[["books_or","books"],["foods_or","foods"],["keywords_or","keywords"]].forEach(l=>{a[l[1]]!=null&&(a[l[2]]!=null?a[l[2]].concat(a[l[1]]):a[l[2]]=a[l[1]])}),a.cookedon!=null&&(a.cookedon.startsWith("-")?a.cookedon_lte=a.cookedon.substring(1):a.cookedon_gte=a.cookedon),a.viewedon!=null&&(a.viewedon.startsWith("-")?a.viewedon_lte=a.viewedon.substring(1):a.viewedon_gte=a.viewedon),a.updatedon!=null&&(a.updatedon.startsWith("-")?a.updatedon_lte=a.updatedon.substring(1):a.updatedon_gte=a.updatedon),a.createdon!=null&&(a.createdon.startsWith("-")?a.createdon_lte=a.createdon.substring(1):a.createdon_gte=a.createdon),a.rating!=null&&(a.rating.startsWith("-")?a.rating_lte=a.rating.substring(1):a.rating_gte=a.rating),a.timescooked!=null&&(a.timescooked.startsWith("-")?a.timescooked_lte=a.timescooked.substring(1):a.timescooked_gte=a.timescooked),a.version="2",a}const N=b({sortOrder:{id:"sortOrder",label:`${e("sort_by")}`,hint:"",enabled:!1,default:"",is:F,items:[{value:"random",title:`${e("RandomOrder")}`},{value:"score",title:`${e("search_rank")} (1-9)`},{value:"-score",title:`${e("search_rank")} (9-1)`},{value:"name",title:`${e("Name")} (A-z)`},{value:"-name",title:`${e("Name")} (Z-a)`},{value:"lastcooked",title:`${e("last_cooked")} (↑)`},{value:"-lastcooked",title:`${e("last_cooked")} (↓)`},{value:"rating",title:`${e("Rating")} (1-5)`},{value:"-rating",title:`${e("Rating")} (5-1)`},{value:"times_cooked",title:`${e("favorite")} (↑)`},{value:"-times_cooked",title:`${e("favorite")} (↓)`},{value:"created_at",title:`${e("date_created")} (↑)`},{value:"-created_at",title:`${e("date_created")} (↓)`},{value:"lastviewed",title:`${e("date_viewed")} (↑)`},{value:"-lastviewed",title:`${e("date_viewed")} (↓)`}],modelValue:r("sortOrder","")},keywords:{id:"keywords",label:`${e("Keywords")} (${e("any")})`,hint:e("searchFilterObjectsHelp",{type:e("Keywords")}),enabled:!1,default:[],is:m,model:"Keyword",modelValue:r("keywords",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},keywordsAnd:{id:"keywordsAnd",label:`${e("Keywords")} (${e("all")})`,hint:e("searchFilterObjectsAndHelp",{type:e("Keywords")}),enabled:!1,default:[],is:m,model:"Keyword",modelValue:r("keywordsAnd",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},keywordsOrNot:{id:"keywordsOrNot",label:`${e("Keywords")} exclude (${e("any")})`,hint:e("searchFilterObjectsOrNotHelp",{type:e("Keywords")}),enabled:!1,default:[],is:m,model:"Keyword",modelValue:r("keywordsOrNot",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},keywordsAndNot:{id:"keywordsAndNot",label:`${e("Keywords")} exclude (${e("all")})`,hint:e("searchFilterObjectsAndNotHelp",{type:e("Keywords")}),enabled:!1,default:[],is:m,model:"Keyword",modelValue:r("keywordsAndNot",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},foods:{id:"foods",label:`${e("Foods")} (${e("any")})`,hint:e("searchFilterObjectsHelp",{type:e("Foods")}),enabled:!1,default:[],is:m,model:"Food",modelValue:r("foods",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},foodsAnd:{id:"foodsAnd",label:`${e("Foods")} (${e("all")})`,hint:e("searchFilterObjectsAndHelp",{type:e("Foods")}),enabled:!1,default:[],is:m,model:"Food",modelValue:r("foodsAnd",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},foodsOrNot:{id:"foodsOrNot",label:`${e("Foods")} exclude (${e("any")})`,hint:e("searchFilterObjectsOrNotHelp",{type:e("Foods")}),enabled:!1,default:[],is:m,model:"Food",modelValue:r("foodsOrNot",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},foodsAndNot:{id:"foodsAndNot",label:`${e("Foods")} exclude (${e("all")})`,hint:e("searchFilterObjectsAndNotHelp",{type:e("Foods")}),enabled:!1,default:[],is:m,model:"Food",modelValue:r("foodsAndNot",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},books:{id:"books",label:`${e("Books")} (${e("any")})`,hint:e("searchFilterObjectsHelp",{type:e("Books")}),enabled:!1,default:[],is:m,model:"RecipeBook",modelValue:r("books",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},booksAnd:{id:"booksAnd",label:`${e("Books")} (${e("all")})`,hint:e("searchFilterObjectsAndHelp",{type:e("Books")}),enabled:!1,default:[],is:m,model:"RecipeBook",modelValue:r("booksAnd",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},booksOrNot:{id:"booksOrNot",label:`${e("Books")} exclude (${e("any")})`,hint:e("searchFilterObjectsOrNotHelp",{type:e("Books")}),enabled:!1,default:[],is:m,model:"RecipeBook",modelValue:r("booksOrNot",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},booksAndNot:{id:"booksAndNot",label:`${e("Books")} exclude (${e("all")})`,hint:e("searchFilterObjectsAndNotHelp",{type:e("Books")}),enabled:!1,default:[],is:m,model:"RecipeBook",modelValue:r("booksAndNot",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},createdby:{id:"createdby",label:e("CreatedBy"),hint:e("searchFilterCreatedByHelp"),enabled:!1,default:void 0,is:m,model:"User",modelValue:r("createdby",void 0,{transform:Number}),mode:"single",object:!1,searchOnLoad:!0},units:{id:"units",label:`${e("Units")} (${e("any")})`,hint:e("searchFilterObjectsHelp",{type:e("Units")}),enabled:!1,default:[],is:m,model:"Unit",modelValue:r("units",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},internal:{id:"internal",label:e("Hide_External"),hint:e("searchFilterHideExternalHelp"),enabled:!1,default:"false",is:F,items:[{value:"true",title:"Yes"},{value:"false",title:"No"}],modelValue:r("internal","false")},rating:{id:"rating",label:`${e("Rating")} (${e("exact")})`,hint:"",enabled:!1,default:void 0,is:de,modelValue:r("rating",void 0,{transform:Number})},ratingGte:{id:"ratingGte",label:`${e("Rating")} (>=)`,hint:"",enabled:!1,default:void 0,is:de,modelValue:r("ratingGte",void 0,{transform:Number})},ratingLte:{id:"ratingLte",label:`${e("Rating")} (<=)`,hint:"",enabled:!1,default:void 0,is:de,modelValue:r("ratingLte",void 0,{transform:Number})},timescooked:{id:"timescooked",label:`${e("times_cooked")} (${e("exact")})`,hint:"Recipes that were cooked at least X times",enabled:!1,default:void 0,is:q,modelValue:r("timescooked",void 0,{transform:Number})},timescookedGte:{id:"timescookedGte",label:`${e("times_cooked")} (>=)`,hint:"",enabled:!1,default:void 0,is:q,modelValue:r("timescookedGte",void 0,{transform:Number})},timescookedLte:{id:"timescookedLte",label:`${e("times_cooked")} (<=)`,hint:"",enabled:!1,default:void 0,is:q,modelValue:r("timescookedLte",void 0,{transform:Number})},makenow:{id:"makenow",label:e("OnHand"),hint:e("searchFilterOnHandHelp"),enabled:!1,default:"false",is:F,items:[{value:"true",title:"Yes"},{value:"false",title:"No"}],modelValue:r("makenow","false")},cookedonGte:{id:"cookedonGte",label:`${e("Cooked")} ${e("after")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("cookedonGte",null,{transform:L})},cookedonLte:{id:"cookedonLte",label:`${e("Cooked")} ${e("before")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("cookedonLte",null,{transform:L})},viewedonGte:{id:"viewedonGte",label:`${e("Viewed")} ${e("after")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("viewedonGte",null,{transform:L})},viewedonLte:{id:"viewedonLte",label:`${e("Viewed")} ${e("before")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("viewedonLte",null,{transform:L})},createdon:{id:"createdon",label:`${e("Created")} ${e("on")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("createdon",null,{transform:L})},createdonGte:{id:"createdonGte",label:`${e("Created")} ${e("on")}/${e("after")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("createdonGte",null,{transform:L})},createdonLte:{id:"createdonLte",label:`${e("Created")} ${e("on")}/${e("before")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("createdonLte",null,{transform:L})},updatedon:{id:"updatedon",label:`${e("Updated")} ${e("on")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("updatedon",null,{transform:L})},updatedonGte:{id:"updatedonGte",label:`${e("Updated")} ${e("on")}/${e("after")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("updatedonGte",null,{transform:L})},updatedonLte:{id:"updatedonLte",label:`${e("Updated")} ${e("on")}/${e("before")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("updatedonLte",null,{transform:L})}});return(a,l)=>(c(),k(na,null,{default:d(()=>[t(M,null,{default:d(()=>[t(T,{cols:"12",md:"6","offset-md":"3"},{default:d(()=>[t(v(ie),{label:a.$t("Search"),modelValue:v(g),"onUpdate:modelValue":l[3]||(l[3]=o=>te(g)?g.value=o:null),loading:i.value,onSubmit:l[4]||(l[4]=o=>A({page:1})),onKeydown:l[5]||(l[5]=sa(o=>A({page:1}),["enter"])),"onClick:clear":l[6]||(l[6]=o=>g.value=""),clearable:"","hide-details":""},{append:d(()=>[t(Ba,{bordered:"","offset-x":5,"offset-y":5,color:"secondary",modelValue:f.value,"onUpdate:modelValue":l[2]||(l[2]=o=>f.value=o)},{default:d(()=>[C.value==""?(c(),k(O,{key:0,onClick:l[0]||(l[0]=o=>C.value="search"),color:"primary",icon:""},{default:d(()=>l[31]||(l[31]=[Z("i",{class:"fa-solid fa-caret-down"},null,-1)])),_:1,__:[31]})):D("",!0),C.value=="search"?(c(),k(O,{key:1,onClick:l[1]||(l[1]=o=>C.value=""),color:"primary",icon:""},{default:d(()=>l[32]||(l[32]=[Z("i",{class:"fa-solid fa-caret-up"},null,-1)])),_:1,__:[32]})):D("",!0)]),_:1},8,["modelValue"])]),_:1},8,["label","modelValue","loading"])]),_:1})]),_:1}),t(M,{dense:""},{default:d(()=>[t(T,null,{default:d(()=>[t(ka,{modelValue:C.value,"onUpdate:modelValue":l[16]||(l[16]=o=>C.value=o)},{default:d(()=>[t($a,{value:"search"},{default:d(()=>[t(ya,null,{default:d(()=>[t(Ue,{disabled:i.value,class:"mt-4"},{default:d(()=>[(c(!0),oe(ve,null,pe(Object.values(N.value),o=>(c(),oe("div",{key:o.id},[o.enabled?(c(),k(pa(o.is),ne({key:0,ref_for:!0},o,{density:"compact",modelValue:o.modelValue,"onUpdate:modelValue":V=>o.modelValue=V}),{append:d(()=>[t(O,{icon:"fa-solid fa-times",size:"small",variant:"plain",onClick:V=>{o.enabled=!1,o.modelValue=o.default}},null,8,["onClick"])]),_:2},1040,["modelValue","onUpdate:modelValue"])):D("",!0)]))),128)),t(he,{class:"mt-2 mb-2"}),t(wa,{items:_.value,"onUpdate:modelValue":[l[7]||(l[7]=o=>{N.value[o].enabled=!0,ia(()=>{h.value=null})}),l[8]||(l[8]=o=>h.value=o)],density:"compact",label:a.$t("AddFilter"),modelValue:h.value},null,8,["items","label","modelValue"]),t(m,{model:"CustomFilter",modelValue:R.value,"onUpdate:modelValue":l[11]||(l[11]=o=>R.value=o),density:"compact"},{append:d(()=>[t(O,{icon:"fa-solid fa-upload",color:"warning",disabled:R.value==null,onClick:l[9]||(l[9]=o=>Ae())},null,8,["disabled"]),t(O,{icon:"$save",class:"ms-1",color:"save",onClick:l[10]||(l[10]=o=>Oe())})]),_:1},8,["modelValue"])]),_:1},8,["disabled"]),t(M,null,{default:d(()=>[t(T,{cols:"6"},{default:d(()=>[t(v(F),{label:a.$t("View"),modelValue:v(S)().deviceSettings.search_viewMode,"onUpdate:modelValue":l[12]||(l[12]=o=>v(S)().deviceSettings.search_viewMode=o),items:[{title:a.$t("Table"),value:"table"},{title:a.$t("Cards"),value:"grid"}],density:"compact"},null,8,["label","modelValue","items"])]),_:1}),t(T,{cols:"6"},{default:d(()=>[t(v(F),{class:"float-right",label:a.$t("PerPage"),modelValue:v(y),"onUpdate:modelValue":l[13]||(l[13]=o=>te(y)?y.value=o:null),items:[10,25,50,100],density:"compact",width:"100%"},null,8,["label","modelValue"])]),_:1})]),_:1})]),_:1}),C.value=="search"?(c(),k(ue,{key:0},{default:d(()=>[t(O,{onClick:l[14]||(l[14]=o=>Be()),"prepend-icon":"fa-solid fa-circle-xmark"},{default:d(()=>[H(K(a.$t("Reset")),1)]),_:1}),t(O,{onClick:l[15]||(l[15]=o=>A({page:1})),"prepend-icon":"$search"},{default:d(()=>[H(K(a.$t("Search")),1)]),_:1})]),_:1})):D("",!0)]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1}),G.value.length>0&&v(S)().deviceSettings.search_viewMode=="table"?(c(),k(M,{key:0},{default:d(()=>[t(T,null,{default:d(()=>[t(z,null,{default:d(()=>[t(ha,{modelValue:I.value,"onUpdate:modelValue":l[19]||(l[19]=o=>I.value=o),"return-object":"","onUpdate:options":A,loading:i.value,items:G.value,headers:n.value,page:v(p),"items-per-page":v(y),"items-length":s.value,"onClick:row":Ce,"disable-sort":"","show-select":"","hide-default-footer":""},Ve({"item.image":d(({item:o})=>[o.image?(c(),k(be,{key:0,image:o.image,size:"x-large",class:"mt-1 mb-1"},null,8,["image"])):(c(),k(be,{key:1,color:"primary",variant:"tonal",size:"x-large",class:"mt-1 mb-1"},{default:d(()=>[t(Ca)]),_:1}))]),"item.keywords":d(({item:o})=>[t(ca,{keywords:o.keywords},null,8,["keywords"])]),"item.action":d(({item:o})=>[t(va,{recipe:o},null,8,["recipe"])]),_:2},[I.value.length>0?{name:"header.action",fn:d(()=>[t(O,{icon:"fa-solid fa-ellipsis-v",variant:"plain",color:"info"},{default:d(()=>[t(E,{icon:"fa-solid fa-ellipsis-v"}),t(ua,{activator:"parent","close-on-content-click":""},{default:d(()=>[t(ra,{density:"compact",class:"pt-1 pb-1",activatable:""},{default:d(()=>[t(ce,{"prepend-icon":"$edit",onClick:l[17]||(l[17]=o=>ae.value=!0)},{default:d(()=>[H(K(a.$t("BatchEdit")),1)]),_:1}),t(ce,{"prepend-icon":"$delete",onClick:l[18]||(l[18]=o=>ee.value=!0)},{default:d(()=>[H(K(a.$t("Delete_All")),1)]),_:1})]),_:1})]),_:1})]),_:1})]),key:"0"}:void 0]),1032,["modelValue","loading","items","headers","page","items-per-page","items-length"])]),_:1})]),_:1})]),_:1})):D("",!0),G.value.length>0&&v(S)().deviceSettings.search_viewMode=="grid"?(c(),k(M,{key:1},{default:d(()=>[(c(!0),oe(ve,null,pe(G.value,o=>(c(),k(T,{cols:"6",md:"4",key:o.id,class:"pa-0"},{default:d(()=>[t(ba,{recipe:o},null,8,["recipe"])]),_:2},1024))),128))]),_:1})):D("",!0),t(M,null,{default:d(()=>[t(T,{cols:"12",md:"6","offset-md":"3",class:"text-center"},{default:d(()=>[N.value.sortOrder.modelValue!="random"?(c(),k(fa,{key:0,modelValue:v(p),"onUpdate:modelValue":[l[20]||(l[20]=o=>te(p)?p.value=o:null),l[21]||(l[21]=o=>A({page:v(p)}))],length:Math.ceil(s.value/v(y)),class:"ms-2 me-2",size:"small"},null,8,["modelValue","length"])):D("",!0),N.value.sortOrder.modelValue=="random"?(c(),k(O,{key:1,size:"x-large",rounded:"xl","prepend-icon":"fa-solid fa-dice",variant:"tonal",onClick:l[22]||(l[22]=o=>A())},{default:d(()=>[H(K(a.$t("Random Recipes")),1)]),_:1})):D("",!0)]),_:1})]),_:1}),t(ye,{modelValue:w.value,"onUpdate:modelValue":l[26]||(l[26]=o=>w.value=o)},{default:d(()=>[t(z,null,{default:d(()=>[t(we,{title:a.$t("SavedSearch"),modelValue:w.value,"onUpdate:modelValue":l[23]||(l[23]=o=>w.value=o)},null,8,["title","modelValue"]),t(W,null,{default:d(()=>[t(v(ie),{label:a.$t("Name"),modelValue:x.value,"onUpdate:modelValue":l[24]||(l[24]=o=>x.value=o)},null,8,["label","modelValue"])]),_:1}),t(ue,null,{default:d(()=>[t(O,{"prepend-icon":"$create",color:"create",onClick:l[25]||(l[25]=o=>Re())},{default:d(()=>[H(K(a.$t("Create")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]),t(ga,{items:I.value,model:"Recipe",modelValue:ee.value,"onUpdate:modelValue":l[27]||(l[27]=o=>ee.value=o),activator:"model",onChange:l[28]||(l[28]=o=>A({page:1}))},null,8,["items","modelValue"]),t(Na,{items:I.value,modelValue:ae.value,"onUpdate:modelValue":l[29]||(l[29]=o=>ae.value=o),activator:"model",onChange:l[30]||(l[30]=o=>A({page:v(p)}))},null,8,["items","modelValue"])]),_:1}))}});export{Fa as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/SearchPage-DRMC5092.d14b6ae95d5c.js.gz b/config/tandoor/staticfiles/vue3/assets/SearchPage-DRMC5092.d14b6ae95d5c.js.gz
deleted file mode 100644
index 5c0c69ff..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/SearchPage-DRMC5092.d14b6ae95d5c.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SearchPage-DRMC5092.js b/config/tandoor/staticfiles/vue3/assets/SearchPage-DRMC5092.js
deleted file mode 100644
index f4a1e7b0..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SearchPage-DRMC5092.js
+++ /dev/null
@@ -1 +0,0 @@
-import{ak as Le,al as je,am as Te,an as Ee,ao as De,ap as He,aq as Ke,ar as _e,as as Ge,at as Me,au as Fe,g as t,av as ne,aw as Ie,ax as ze,ay as qe,az as We,aA as xe,aB as Je,aC as Ye,aD as Qe,i as Z,aE as Xe,aF as Ze,aG as Pe,G as E,d as P,c as se,h as k,f as c,aH as ge,aI as Ve,w as d,aJ as fe,aK as ea,aL as me,u as ke,r as b,aM as $e,aN as ye,M as z,aO as we,l as v,Z as aa,B as he,O as W,ac as Ue,k as M,V as T,a2 as la,ag as m,U as J,T as F,af as q,S as ie,aP as ue,z as O,j as H,t as K,A as Y,Q,R as X,a as ta,L as S,o as oa,aQ as da,K as na,e as D,aR as sa,aS as te,b as oe,p as pe,F as ve,aT as ia,H as ua,x as ra,y as ce,I as be,aU as fa,s as ma,aV as L,aW as U,aX as pa,aY as j}from"./main-BhFWIRV_.js";import{_ as va}from"./PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.js";import{_ as ca}from"./KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.js";import{R as ba}from"./RecipeCard-ZQiVryVZ.js";import{u as r,_ as ga}from"./BatchDeleteDialog.vue_vue_type_script_setup_true_lang-D0heUVsC.js";import{V as Va}from"./VRating-BGFrV4il.js";import{V as ka,a as $a,b as ya}from"./number_utils-1sJWKMUK.js";import{V as wa}from"./VAutocomplete-b809Bykv.js";import{V as ha}from"./VDataTableServer-PUUq4Eqa.js";import"./BtnCopy.vue_vue_type_script_setup_true_lang-B_1A58TG.js";import"./VTooltip-CP00KBBq.js";import"./AddToShoppingDialog.vue_vue_type_script_setup_true_lang-ByrmCw9F.js";import"./model_utils-CVQgSPL_.js";import"./useFileApi-4KcBp6Fj.js";const Ua=je({bordered:Boolean,color:String,content:[Number,String],dot:Boolean,floating:Boolean,icon:Qe,inline:Boolean,label:{type:String,default:"$vuetify.badge"},max:[Number,String],modelValue:{type:Boolean,default:!0},offsetX:[Number,String],offsetY:[Number,String],textColor:String,...Ye(),...Je({location:"top end"}),...xe(),...We(),...qe(),...ze({transition:"scale-rotate-transition"}),...Ie()},"VBadge"),Ba=Le()({name:"VBadge",inheritAttrs:!1,props:Ua(),setup(u,e){const{backgroundColorClasses:$,backgroundColorStyles:B}=Te(()=>u.color),{roundedClasses:g}=Ee(u),{t:p}=De(),{textColorClasses:y,textColorStyles:_}=He(()=>u.textColor),{themeClasses:i}=Ke(),{locationStyles:w}=_e(u,!0,h=>(u.floating?u.dot?2:4:u.dot?8:12)+(["top","bottom"].includes(h)?Number(u.offsetY??0):["left","right"].includes(h)?Number(u.offsetX??0):0)),{dimensionStyles:C}=Ge(u);return Me(()=>{const h=Number(u.content),f=!u.max||isNaN(h)?u.content:h<=Number(u.max)?h:`${u.max}+`,[n,s]=Fe(e.attrs,["aria-atomic","aria-label","aria-live","role","title"]);return t(u.tag,ne({class:["v-badge",{"v-badge--bordered":u.bordered,"v-badge--dot":u.dot,"v-badge--floating":u.floating,"v-badge--inline":u.inline},u.class]},s,{style:u.style}),{default:()=>[Z("div",{class:"v-badge__wrapper"},[e.slots.default?.(),t(Xe,{transition:u.transition},{default:()=>[Ze(Z("span",ne({class:["v-badge__badge",i.value,$.value,g.value,y.value],style:[B.value,_.value,C.value,u.inline?{}:w.value],"aria-atomic":"true","aria-label":p(u.label,h),"aria-live":"polite",role:"status"},n),[u.dot?void 0:e.slots.badge?e.slots.badge?.():u.icon?t(E,{icon:u.icon},null):f]),[[Pe,u.modelValue]])]})])]})}),{}}}),Ca=P({__name:"RandomIcon",setup(u){const e=se(()=>{let $=["fa-solid fa-fw fa-hamburger","fa-solid fa-fw fa-utensils","fa-solid fa-fw fa-apple-alt","fa-solid fa-fw fa-bacon","fa-solid fa-fw fa-bread-slice","fa-solid fa-fw fa-candy-cane","fa-solid fa-fw fa-carrot","fa-solid fa-fw fa-cheese","fa-solid fa-fw fa-cookie","fa-solid fa-fw fa-drumstick-bite","fa-solid fa-fw fa-egg","fa-solid fa-fw fa-fish","fa-solid fa-fw fa-hotdog","fa-solid fa-fw fa-ice-cream","fa-solid fa-fw fa-lemon","fa-solid fa-fw fa-pepper-hot","fa-solid fa-fw fa-pizza-slice","fa-solid fa-fw fa-cookie-bite"];return $[Math.floor(Math.random()*$.length)]});return($,B)=>(c(),k(E,{icon:e.value},null,8,["icon"]))}}),de=P({__name:"RatingField",props:{modelValue:{type:Boolean,required:!0},modelModifiers:{}},emits:["update:modelValue"],setup(u){const e=ge(u,"modelValue");return($,B)=>(c(),k(ea,{label:"Test",hint:"Test hint","persistent-hint":""},Ve({default:d(()=>[t(Va,{modelValue:e.value,"onUpdate:modelValue":B[0]||(B[0]=g=>e.value=g)},null,8,["modelValue"])]),_:2},[$.$slots.prepend?{name:"prepend",fn:d(()=>[fe($.$slots,"prepend")]),key:"0"}:void 0,$.$slots.append?{name:"append",fn:d(()=>[fe($.$slots,"append")]),key:"1"}:void 0]),1024))}}),Na=P({__name:"BatchEditRecipeDialog",props:me({items:{type:Array,required:!0},activator:{type:String,default:"parent"}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:me(["change"],["update:modelValue"]),setup(u,{emit:e}){const $=e,B=u,{t:g}=ke(),p=ge(u,"modelValue"),y=b(!1),_=b([]),i=b({recipeBatchUpdate:{servingsText:""}}),w=b(!1),C=b([{value:!0,title:g("Yes")},{value:!1,title:g("No")}]);$e(p,(f,n)=>{!n&&f&&B.items!=null&&(i.value.recipeBatchUpdate.recipes=B.items.flatMap(s=>s.id),_.value=JSON.parse(JSON.stringify(B.items)))});function h(){let f=new Y;y.value=!0,w.value||(i.value.recipeBatchUpdate.servingsText=void 0),f.apiRecipeBatchUpdateUpdate(i.value).then(n=>{}).catch(n=>{Q().addError(X.UPDATE_ERROR,n)}).finally(()=>{$("change"),y.value=!1})}return(f,n)=>(c(),k(ye,{"max-width":"1200px",activator:B.activator,modelValue:p.value,"onUpdate:modelValue":n[20]||(n[20]=s=>p.value=s)},{default:d(()=>[t(z,{loading:y.value},{default:d(()=>[t(we,{title:f.$t("BatchEdit"),"sub-title":f.$t("BatchEditUpdatingItemsCount",{type:f.$t("Recipes"),count:_.value.length}),icon:v(aa).icon,modelValue:p.value,"onUpdate:modelValue":n[0]||(n[0]=s=>p.value=s)},null,8,["title","sub-title","icon","modelValue"]),t(he),t(W,null,{default:d(()=>[t(Ue,null,{default:d(()=>[t(M,null,{default:d(()=>[t(T,{cols:"12",md:"6"},{default:d(()=>[t(z,{title:f.$t("Keywords"),"prepend-icon":v(la).icon,variant:"plain"},{default:d(()=>[t(W,null,{default:d(()=>[t(m,{model:"Keyword",modelValue:i.value.recipeBatchUpdate.keywordsAdd,"onUpdate:modelValue":n[1]||(n[1]=s=>i.value.recipeBatchUpdate.keywordsAdd=s),object:!1,"allow-create":"",mode:"tags"},{prepend:d(()=>[t(E,{icon:"fa-solid fa-add"})]),_:1},8,["modelValue"]),t(m,{model:"Keyword",modelValue:i.value.recipeBatchUpdate.keywordsRemove,"onUpdate:modelValue":n[2]||(n[2]=s=>i.value.recipeBatchUpdate.keywordsRemove=s),object:!1,"allow-create":"",mode:"tags"},{prepend:d(()=>[t(E,{icon:"fa-solid fa-minus"})]),_:1},8,["modelValue"]),t(m,{model:"Keyword",modelValue:i.value.recipeBatchUpdate.keywordsSet,"onUpdate:modelValue":n[3]||(n[3]=s=>i.value.recipeBatchUpdate.keywordsSet=s),object:!1,"allow-create":"",mode:"tags"},{prepend:d(()=>[t(E,{icon:"fa-solid fa-equals"})]),_:1},8,["modelValue"]),t(J,{label:f.$t("RemoveAllType",{type:f.$t("Keywords")}),"hide-details":"",modelValue:i.value.recipeBatchUpdate.keywordsRemoveAll,"onUpdate:modelValue":n[4]||(n[4]=s=>i.value.recipeBatchUpdate.keywordsRemoveAll=s)},null,8,["label","modelValue"])]),_:1})]),_:1},8,["title","prepend-icon"]),t(z,{title:f.$t("Private_Recipe"),subtitle:f.$t("Private_Recipe_Help"),"prepend-icon":"fa-solid fa-eye-slash",variant:"plain"},{default:d(()=>[t(W,null,{default:d(()=>[t(F,{items:C.value,label:f.$t("Private_Recipe"),clearable:"",modelValue:i.value.recipeBatchUpdate._private,"onUpdate:modelValue":n[5]||(n[5]=s=>i.value.recipeBatchUpdate._private=s)},null,8,["items","label","modelValue"]),t(m,{model:"User",modelValue:i.value.recipeBatchUpdate.sharedAdd,"onUpdate:modelValue":n[6]||(n[6]=s=>i.value.recipeBatchUpdate.sharedAdd=s),object:!1,"allow-create":"",mode:"tags"},{prepend:d(()=>[t(E,{icon:"fa-solid fa-add"})]),_:1},8,["modelValue"]),t(m,{model:"User",modelValue:i.value.recipeBatchUpdate.sharedRemove,"onUpdate:modelValue":n[7]||(n[7]=s=>i.value.recipeBatchUpdate.sharedRemove=s),object:!1,"allow-create":"",mode:"tags"},{prepend:d(()=>[t(E,{icon:"fa-solid fa-minus"})]),_:1},8,["modelValue"]),t(m,{model:"User",modelValue:i.value.recipeBatchUpdate.sharedSet,"onUpdate:modelValue":n[8]||(n[8]=s=>i.value.recipeBatchUpdate.sharedSet=s),object:!1,"allow-create":"",mode:"tags"},{prepend:d(()=>[t(E,{icon:"fa-solid fa-equals"})]),_:1},8,["modelValue"]),t(J,{label:f.$t("RemoveAllType",{type:f.$t("Users")}),"hide-details":"",modelValue:i.value.recipeBatchUpdate.sharedRemoveAll,"onUpdate:modelValue":n[9]||(n[9]=s=>i.value.recipeBatchUpdate.sharedRemoveAll=s)},null,8,["label","modelValue"])]),_:1})]),_:1},8,["title","subtitle"])]),_:1}),t(T,{cols:"12",md:"6"},{default:d(()=>[t(z,{title:f.$t("Miscellaneous"),"prepend-icon":"fa-solid fa-list",variant:"plain"},{default:d(()=>[t(W,null,{default:d(()=>[t(q,{label:f.$t("WorkingTime"),modelValue:i.value.recipeBatchUpdate.workingTime,"onUpdate:modelValue":n[10]||(n[10]=s=>i.value.recipeBatchUpdate.workingTime=s),step:5},null,8,["label","modelValue"]),t(q,{label:f.$t("WaitingTime"),modelValue:i.value.recipeBatchUpdate.waitingTime,"onUpdate:modelValue":n[11]||(n[11]=s=>i.value.recipeBatchUpdate.waitingTime=s),step:5},null,8,["label","modelValue"]),t(q,{label:f.$t("Serving"),modelValue:i.value.recipeBatchUpdate.servings,"onUpdate:modelValue":n[12]||(n[12]=s=>i.value.recipeBatchUpdate.servings=s)},null,8,["label","modelValue"]),t(ie,{label:f.$t("ServingsText"),modelValue:i.value.recipeBatchUpdate.servingsText,"onUpdate:modelValue":[n[14]||(n[14]=s=>i.value.recipeBatchUpdate.servingsText=s),n[15]||(n[15]=s=>w.value=!0)]},{append:d(()=>[t(J,{modelValue:w.value,"onUpdate:modelValue":n[13]||(n[13]=s=>w.value=s),"hide-details":""},null,8,["modelValue"])]),_:1},8,["label","modelValue"]),t(F,{items:C.value,label:f.$t("show_ingredient_overview"),clearable:"",modelValue:i.value.recipeBatchUpdate.showIngredientOverview,"onUpdate:modelValue":n[16]||(n[16]=s=>i.value.recipeBatchUpdate.showIngredientOverview=s)},null,8,["items","label","modelValue"]),t(J,{"hide-details":"",label:f.$t("DeleteSomething",{item:f.$t("Description")}),modelValue:i.value.recipeBatchUpdate.clearDescription,"onUpdate:modelValue":n[17]||(n[17]=s=>i.value.recipeBatchUpdate.clearDescription=s)},null,8,["label","modelValue"])]),_:1})]),_:1},8,["title"])]),_:1})]),_:1})]),_:1})]),_:1}),t(ue,null,{default:d(()=>[t(O,{disabled:y.value,onClick:n[18]||(n[18]=s=>p.value=!1)},{default:d(()=>[H(K(f.$t("Cancel")),1)]),_:1},8,["disabled"]),t(O,{color:"warning",loading:y.value,onClick:n[19]||(n[19]=s=>h()),disabled:_.value.length<1},{default:d(()=>[H(K(f.$t("Update")),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1},8,["loading"])]),_:1},8,["activator","modelValue"]))}}),Fa=P({__name:"SearchPage",setup(u){const{t:e}=ke(),$=ma(),{mdAndUp:B}=ta(),g=r("query",""),p=r("page",1,{transform:Number}),y=r("pageSize",S().deviceSettings.general_tableItemsPerPage,{transform:Number}),_=se(()=>{let a=[];return S().deviceSettings.search_visibleFilters=[],Object.entries(N.value).forEach(l=>{let[o,V]=l;V.enabled?S().deviceSettings.search_visibleFilters.push(V.id):a.push({value:V.id,title:V.label})}),a}),i=b(!1),w=b(!1),C=b(""),h=b(null),f=b(!1),n=se(()=>{let a=[{title:e("Image"),width:"1%",noBreak:!0,key:"image"},{title:e("Name"),key:"name"}];return B.value&&a.push({title:e("Keywords"),key:"keywords"}),a.push({title:e("Actions"),key:"action",width:"1%",noBreak:!0,align:"end"}),a}),s=b(0),G=b([]),R=b(null),x=b(""),I=b([]),ee=b(!1),ae=b(!1);$e(()=>g.value,()=>{A({page:1})}),oa(()=>{S().deviceSettings.search_visibleFilters.forEach(a=>{a in N.value?N.value[a].enabled=!0:S().deviceSettings.search_visibleFilters.splice(S().deviceSettings.search_visibleFilters.indexOf(a),1)}),Ne(),A({page:p.value})});function A(a){let l=new Y;i.value=!0,f.value=!1,I.value=[],p.value=a.page;let o={query:g.value,page:a.page,pageSize:y.value};Object.values(N.value).forEach(V=>{le(V)||(o[V.id]=V.modelValue,f.value=!0)}),l.apiRecipeList(o).then(V=>{G.value=V.results,s.value=V.count}).catch(V=>{Q().addError(X.FETCH_ERROR,V)}).finally(()=>{i.value=!1,window.scrollTo({top:0,behavior:"smooth"})})}function Be(){p.value=1,g.value="",Object.values(N.value).forEach(a=>{a.modelValue=a.default}),R.value=null,G.value=[],A({page:1})}function Ce(a,l){$.push({name:"RecipeViewPage",params:{id:G.value[l.index].id}})}function Ne(){Object.values(N.value).forEach(a=>{le(a)||(a.enabled=!0)})}function le(a){return Array.isArray(a.default)&&Array.isArray(a.modelValue)?a.default.length==a.modelValue.length:isNaN(a.default)&&isNaN(a.modelValue)?!0:da(a.default)===a.modelValue}function Oe(){let a=new Y;R.value!=null?(i.value=!0,R.value.search=JSON.stringify(re()),a.apiCustomFilterUpdate({id:R.value.id,customFilter:R.value}).then(l=>{R.value=l}).catch(l=>{Q().addError(X.UPDATE_ERROR,l)}).finally(()=>{i.value=!1})):(x.value="",w.value=!0)}function Re(){let a=new Y;w.value=!1,i.value=!0,a.apiCustomFilterCreate({customFilter:{name:x.value,search:JSON.stringify(re())}}).then(l=>{R.value=l}).catch(l=>{Q().addError(X.UPDATE_ERROR,l)}).finally(()=>{i.value=!1})}function Ae(){let a=JSON.parse(R.value.search);a.version==null&&(a=Se(a)),a.query!=null&&(g.value=a.query),Object.values(N.value).forEach(l=>{let o=l.id.replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase();a[o]!=null&&(l.modelValue=a[o],l.enabled=!0)})}function re(){let a={};return g.value!=""&&(a.query=g.value),Object.values(N.value).forEach(l=>{if(!le(l)){let o=l.id.replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase();a[o]=l.modelValue}}),a.version="2",a}function Se(a){return[["books_or","books"],["foods_or","foods"],["keywords_or","keywords"]].forEach(l=>{a[l[1]]!=null&&(a[l[2]]!=null?a[l[2]].concat(a[l[1]]):a[l[2]]=a[l[1]])}),a.cookedon!=null&&(a.cookedon.startsWith("-")?a.cookedon_lte=a.cookedon.substring(1):a.cookedon_gte=a.cookedon),a.viewedon!=null&&(a.viewedon.startsWith("-")?a.viewedon_lte=a.viewedon.substring(1):a.viewedon_gte=a.viewedon),a.updatedon!=null&&(a.updatedon.startsWith("-")?a.updatedon_lte=a.updatedon.substring(1):a.updatedon_gte=a.updatedon),a.createdon!=null&&(a.createdon.startsWith("-")?a.createdon_lte=a.createdon.substring(1):a.createdon_gte=a.createdon),a.rating!=null&&(a.rating.startsWith("-")?a.rating_lte=a.rating.substring(1):a.rating_gte=a.rating),a.timescooked!=null&&(a.timescooked.startsWith("-")?a.timescooked_lte=a.timescooked.substring(1):a.timescooked_gte=a.timescooked),a.version="2",a}const N=b({sortOrder:{id:"sortOrder",label:`${e("sort_by")}`,hint:"",enabled:!1,default:"",is:F,items:[{value:"random",title:`${e("RandomOrder")}`},{value:"score",title:`${e("search_rank")} (1-9)`},{value:"-score",title:`${e("search_rank")} (9-1)`},{value:"name",title:`${e("Name")} (A-z)`},{value:"-name",title:`${e("Name")} (Z-a)`},{value:"lastcooked",title:`${e("last_cooked")} (↑)`},{value:"-lastcooked",title:`${e("last_cooked")} (↓)`},{value:"rating",title:`${e("Rating")} (1-5)`},{value:"-rating",title:`${e("Rating")} (5-1)`},{value:"times_cooked",title:`${e("favorite")} (↑)`},{value:"-times_cooked",title:`${e("favorite")} (↓)`},{value:"created_at",title:`${e("date_created")} (↑)`},{value:"-created_at",title:`${e("date_created")} (↓)`},{value:"lastviewed",title:`${e("date_viewed")} (↑)`},{value:"-lastviewed",title:`${e("date_viewed")} (↓)`}],modelValue:r("sortOrder","")},keywords:{id:"keywords",label:`${e("Keywords")} (${e("any")})`,hint:e("searchFilterObjectsHelp",{type:e("Keywords")}),enabled:!1,default:[],is:m,model:"Keyword",modelValue:r("keywords",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},keywordsAnd:{id:"keywordsAnd",label:`${e("Keywords")} (${e("all")})`,hint:e("searchFilterObjectsAndHelp",{type:e("Keywords")}),enabled:!1,default:[],is:m,model:"Keyword",modelValue:r("keywordsAnd",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},keywordsOrNot:{id:"keywordsOrNot",label:`${e("Keywords")} exclude (${e("any")})`,hint:e("searchFilterObjectsOrNotHelp",{type:e("Keywords")}),enabled:!1,default:[],is:m,model:"Keyword",modelValue:r("keywordsOrNot",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},keywordsAndNot:{id:"keywordsAndNot",label:`${e("Keywords")} exclude (${e("all")})`,hint:e("searchFilterObjectsAndNotHelp",{type:e("Keywords")}),enabled:!1,default:[],is:m,model:"Keyword",modelValue:r("keywordsAndNot",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},foods:{id:"foods",label:`${e("Foods")} (${e("any")})`,hint:e("searchFilterObjectsHelp",{type:e("Foods")}),enabled:!1,default:[],is:m,model:"Food",modelValue:r("foods",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},foodsAnd:{id:"foodsAnd",label:`${e("Foods")} (${e("all")})`,hint:e("searchFilterObjectsAndHelp",{type:e("Foods")}),enabled:!1,default:[],is:m,model:"Food",modelValue:r("foodsAnd",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},foodsOrNot:{id:"foodsOrNot",label:`${e("Foods")} exclude (${e("any")})`,hint:e("searchFilterObjectsOrNotHelp",{type:e("Foods")}),enabled:!1,default:[],is:m,model:"Food",modelValue:r("foodsOrNot",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},foodsAndNot:{id:"foodsAndNot",label:`${e("Foods")} exclude (${e("all")})`,hint:e("searchFilterObjectsAndNotHelp",{type:e("Foods")}),enabled:!1,default:[],is:m,model:"Food",modelValue:r("foodsAndNot",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},books:{id:"books",label:`${e("Books")} (${e("any")})`,hint:e("searchFilterObjectsHelp",{type:e("Books")}),enabled:!1,default:[],is:m,model:"RecipeBook",modelValue:r("books",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},booksAnd:{id:"booksAnd",label:`${e("Books")} (${e("all")})`,hint:e("searchFilterObjectsAndHelp",{type:e("Books")}),enabled:!1,default:[],is:m,model:"RecipeBook",modelValue:r("booksAnd",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},booksOrNot:{id:"booksOrNot",label:`${e("Books")} exclude (${e("any")})`,hint:e("searchFilterObjectsOrNotHelp",{type:e("Books")}),enabled:!1,default:[],is:m,model:"RecipeBook",modelValue:r("booksOrNot",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},booksAndNot:{id:"booksAndNot",label:`${e("Books")} exclude (${e("all")})`,hint:e("searchFilterObjectsAndNotHelp",{type:e("Books")}),enabled:!1,default:[],is:m,model:"RecipeBook",modelValue:r("booksAndNot",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},createdby:{id:"createdby",label:e("CreatedBy"),hint:e("searchFilterCreatedByHelp"),enabled:!1,default:void 0,is:m,model:"User",modelValue:r("createdby",void 0,{transform:Number}),mode:"single",object:!1,searchOnLoad:!0},units:{id:"units",label:`${e("Units")} (${e("any")})`,hint:e("searchFilterObjectsHelp",{type:e("Units")}),enabled:!1,default:[],is:m,model:"Unit",modelValue:r("units",[],{transform:U}),mode:"tags",object:!1,searchOnLoad:!0},internal:{id:"internal",label:e("Hide_External"),hint:e("searchFilterHideExternalHelp"),enabled:!1,default:"false",is:F,items:[{value:"true",title:"Yes"},{value:"false",title:"No"}],modelValue:r("internal","false")},rating:{id:"rating",label:`${e("Rating")} (${e("exact")})`,hint:"",enabled:!1,default:void 0,is:de,modelValue:r("rating",void 0,{transform:Number})},ratingGte:{id:"ratingGte",label:`${e("Rating")} (>=)`,hint:"",enabled:!1,default:void 0,is:de,modelValue:r("ratingGte",void 0,{transform:Number})},ratingLte:{id:"ratingLte",label:`${e("Rating")} (<=)`,hint:"",enabled:!1,default:void 0,is:de,modelValue:r("ratingLte",void 0,{transform:Number})},timescooked:{id:"timescooked",label:`${e("times_cooked")} (${e("exact")})`,hint:"Recipes that were cooked at least X times",enabled:!1,default:void 0,is:q,modelValue:r("timescooked",void 0,{transform:Number})},timescookedGte:{id:"timescookedGte",label:`${e("times_cooked")} (>=)`,hint:"",enabled:!1,default:void 0,is:q,modelValue:r("timescookedGte",void 0,{transform:Number})},timescookedLte:{id:"timescookedLte",label:`${e("times_cooked")} (<=)`,hint:"",enabled:!1,default:void 0,is:q,modelValue:r("timescookedLte",void 0,{transform:Number})},makenow:{id:"makenow",label:e("OnHand"),hint:e("searchFilterOnHandHelp"),enabled:!1,default:"false",is:F,items:[{value:"true",title:"Yes"},{value:"false",title:"No"}],modelValue:r("makenow","false")},cookedonGte:{id:"cookedonGte",label:`${e("Cooked")} ${e("after")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("cookedonGte",null,{transform:L})},cookedonLte:{id:"cookedonLte",label:`${e("Cooked")} ${e("before")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("cookedonLte",null,{transform:L})},viewedonGte:{id:"viewedonGte",label:`${e("Viewed")} ${e("after")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("viewedonGte",null,{transform:L})},viewedonLte:{id:"viewedonLte",label:`${e("Viewed")} ${e("before")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("viewedonLte",null,{transform:L})},createdon:{id:"createdon",label:`${e("Created")} ${e("on")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("createdon",null,{transform:L})},createdonGte:{id:"createdonGte",label:`${e("Created")} ${e("on")}/${e("after")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("createdonGte",null,{transform:L})},createdonLte:{id:"createdonLte",label:`${e("Created")} ${e("on")}/${e("before")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("createdonLte",null,{transform:L})},updatedon:{id:"updatedon",label:`${e("Updated")} ${e("on")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("updatedon",null,{transform:L})},updatedonGte:{id:"updatedonGte",label:`${e("Updated")} ${e("on")}/${e("after")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("updatedonGte",null,{transform:L})},updatedonLte:{id:"updatedonLte",label:`${e("Updated")} ${e("on")}/${e("before")}`,hint:"",enabled:!1,default:null,is:j,modelValue:r("updatedonLte",null,{transform:L})}});return(a,l)=>(c(),k(na,null,{default:d(()=>[t(M,null,{default:d(()=>[t(T,{cols:"12",md:"6","offset-md":"3"},{default:d(()=>[t(v(ie),{label:a.$t("Search"),modelValue:v(g),"onUpdate:modelValue":l[3]||(l[3]=o=>te(g)?g.value=o:null),loading:i.value,onSubmit:l[4]||(l[4]=o=>A({page:1})),onKeydown:l[5]||(l[5]=sa(o=>A({page:1}),["enter"])),"onClick:clear":l[6]||(l[6]=o=>g.value=""),clearable:"","hide-details":""},{append:d(()=>[t(Ba,{bordered:"","offset-x":5,"offset-y":5,color:"secondary",modelValue:f.value,"onUpdate:modelValue":l[2]||(l[2]=o=>f.value=o)},{default:d(()=>[C.value==""?(c(),k(O,{key:0,onClick:l[0]||(l[0]=o=>C.value="search"),color:"primary",icon:""},{default:d(()=>l[31]||(l[31]=[Z("i",{class:"fa-solid fa-caret-down"},null,-1)])),_:1,__:[31]})):D("",!0),C.value=="search"?(c(),k(O,{key:1,onClick:l[1]||(l[1]=o=>C.value=""),color:"primary",icon:""},{default:d(()=>l[32]||(l[32]=[Z("i",{class:"fa-solid fa-caret-up"},null,-1)])),_:1,__:[32]})):D("",!0)]),_:1},8,["modelValue"])]),_:1},8,["label","modelValue","loading"])]),_:1})]),_:1}),t(M,{dense:""},{default:d(()=>[t(T,null,{default:d(()=>[t(ka,{modelValue:C.value,"onUpdate:modelValue":l[16]||(l[16]=o=>C.value=o)},{default:d(()=>[t($a,{value:"search"},{default:d(()=>[t(ya,null,{default:d(()=>[t(Ue,{disabled:i.value,class:"mt-4"},{default:d(()=>[(c(!0),oe(ve,null,pe(Object.values(N.value),o=>(c(),oe("div",{key:o.id},[o.enabled?(c(),k(pa(o.is),ne({key:0,ref_for:!0},o,{density:"compact",modelValue:o.modelValue,"onUpdate:modelValue":V=>o.modelValue=V}),{append:d(()=>[t(O,{icon:"fa-solid fa-times",size:"small",variant:"plain",onClick:V=>{o.enabled=!1,o.modelValue=o.default}},null,8,["onClick"])]),_:2},1040,["modelValue","onUpdate:modelValue"])):D("",!0)]))),128)),t(he,{class:"mt-2 mb-2"}),t(wa,{items:_.value,"onUpdate:modelValue":[l[7]||(l[7]=o=>{N.value[o].enabled=!0,ia(()=>{h.value=null})}),l[8]||(l[8]=o=>h.value=o)],density:"compact",label:a.$t("AddFilter"),modelValue:h.value},null,8,["items","label","modelValue"]),t(m,{model:"CustomFilter",modelValue:R.value,"onUpdate:modelValue":l[11]||(l[11]=o=>R.value=o),density:"compact"},{append:d(()=>[t(O,{icon:"fa-solid fa-upload",color:"warning",disabled:R.value==null,onClick:l[9]||(l[9]=o=>Ae())},null,8,["disabled"]),t(O,{icon:"$save",class:"ms-1",color:"save",onClick:l[10]||(l[10]=o=>Oe())})]),_:1},8,["modelValue"])]),_:1},8,["disabled"]),t(M,null,{default:d(()=>[t(T,{cols:"6"},{default:d(()=>[t(v(F),{label:a.$t("View"),modelValue:v(S)().deviceSettings.search_viewMode,"onUpdate:modelValue":l[12]||(l[12]=o=>v(S)().deviceSettings.search_viewMode=o),items:[{title:a.$t("Table"),value:"table"},{title:a.$t("Cards"),value:"grid"}],density:"compact"},null,8,["label","modelValue","items"])]),_:1}),t(T,{cols:"6"},{default:d(()=>[t(v(F),{class:"float-right",label:a.$t("PerPage"),modelValue:v(y),"onUpdate:modelValue":l[13]||(l[13]=o=>te(y)?y.value=o:null),items:[10,25,50,100],density:"compact",width:"100%"},null,8,["label","modelValue"])]),_:1})]),_:1})]),_:1}),C.value=="search"?(c(),k(ue,{key:0},{default:d(()=>[t(O,{onClick:l[14]||(l[14]=o=>Be()),"prepend-icon":"fa-solid fa-circle-xmark"},{default:d(()=>[H(K(a.$t("Reset")),1)]),_:1}),t(O,{onClick:l[15]||(l[15]=o=>A({page:1})),"prepend-icon":"$search"},{default:d(()=>[H(K(a.$t("Search")),1)]),_:1})]),_:1})):D("",!0)]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1}),G.value.length>0&&v(S)().deviceSettings.search_viewMode=="table"?(c(),k(M,{key:0},{default:d(()=>[t(T,null,{default:d(()=>[t(z,null,{default:d(()=>[t(ha,{modelValue:I.value,"onUpdate:modelValue":l[19]||(l[19]=o=>I.value=o),"return-object":"","onUpdate:options":A,loading:i.value,items:G.value,headers:n.value,page:v(p),"items-per-page":v(y),"items-length":s.value,"onClick:row":Ce,"disable-sort":"","show-select":"","hide-default-footer":""},Ve({"item.image":d(({item:o})=>[o.image?(c(),k(be,{key:0,image:o.image,size:"x-large",class:"mt-1 mb-1"},null,8,["image"])):(c(),k(be,{key:1,color:"primary",variant:"tonal",size:"x-large",class:"mt-1 mb-1"},{default:d(()=>[t(Ca)]),_:1}))]),"item.keywords":d(({item:o})=>[t(ca,{keywords:o.keywords},null,8,["keywords"])]),"item.action":d(({item:o})=>[t(va,{recipe:o},null,8,["recipe"])]),_:2},[I.value.length>0?{name:"header.action",fn:d(()=>[t(O,{icon:"fa-solid fa-ellipsis-v",variant:"plain",color:"info"},{default:d(()=>[t(E,{icon:"fa-solid fa-ellipsis-v"}),t(ua,{activator:"parent","close-on-content-click":""},{default:d(()=>[t(ra,{density:"compact",class:"pt-1 pb-1",activatable:""},{default:d(()=>[t(ce,{"prepend-icon":"$edit",onClick:l[17]||(l[17]=o=>ae.value=!0)},{default:d(()=>[H(K(a.$t("BatchEdit")),1)]),_:1}),t(ce,{"prepend-icon":"$delete",onClick:l[18]||(l[18]=o=>ee.value=!0)},{default:d(()=>[H(K(a.$t("Delete_All")),1)]),_:1})]),_:1})]),_:1})]),_:1})]),key:"0"}:void 0]),1032,["modelValue","loading","items","headers","page","items-per-page","items-length"])]),_:1})]),_:1})]),_:1})):D("",!0),G.value.length>0&&v(S)().deviceSettings.search_viewMode=="grid"?(c(),k(M,{key:1},{default:d(()=>[(c(!0),oe(ve,null,pe(G.value,o=>(c(),k(T,{cols:"6",md:"4",key:o.id,class:"pa-0"},{default:d(()=>[t(ba,{recipe:o},null,8,["recipe"])]),_:2},1024))),128))]),_:1})):D("",!0),t(M,null,{default:d(()=>[t(T,{cols:"12",md:"6","offset-md":"3",class:"text-center"},{default:d(()=>[N.value.sortOrder.modelValue!="random"?(c(),k(fa,{key:0,modelValue:v(p),"onUpdate:modelValue":[l[20]||(l[20]=o=>te(p)?p.value=o:null),l[21]||(l[21]=o=>A({page:v(p)}))],length:Math.ceil(s.value/v(y)),class:"ms-2 me-2",size:"small"},null,8,["modelValue","length"])):D("",!0),N.value.sortOrder.modelValue=="random"?(c(),k(O,{key:1,size:"x-large",rounded:"xl","prepend-icon":"fa-solid fa-dice",variant:"tonal",onClick:l[22]||(l[22]=o=>A())},{default:d(()=>[H(K(a.$t("Random Recipes")),1)]),_:1})):D("",!0)]),_:1})]),_:1}),t(ye,{modelValue:w.value,"onUpdate:modelValue":l[26]||(l[26]=o=>w.value=o)},{default:d(()=>[t(z,null,{default:d(()=>[t(we,{title:a.$t("SavedSearch"),modelValue:w.value,"onUpdate:modelValue":l[23]||(l[23]=o=>w.value=o)},null,8,["title","modelValue"]),t(W,null,{default:d(()=>[t(v(ie),{label:a.$t("Name"),modelValue:x.value,"onUpdate:modelValue":l[24]||(l[24]=o=>x.value=o)},null,8,["label","modelValue"])]),_:1}),t(ue,null,{default:d(()=>[t(O,{"prepend-icon":"$create",color:"create",onClick:l[25]||(l[25]=o=>Re())},{default:d(()=>[H(K(a.$t("Create")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]),t(ga,{items:I.value,model:"Recipe",modelValue:ee.value,"onUpdate:modelValue":l[27]||(l[27]=o=>ee.value=o),activator:"model",onChange:l[28]||(l[28]=o=>A({page:1}))},null,8,["items","modelValue"]),t(Na,{items:I.value,modelValue:ae.value,"onUpdate:modelValue":l[29]||(l[29]=o=>ae.value=o),activator:"model",onChange:l[30]||(l[30]=o=>A({page:v(p)}))},null,8,["items","modelValue"])]),_:1}))}});export{Fa as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/SearchPage-DRMC5092.js.gz b/config/tandoor/staticfiles/vue3/assets/SearchPage-DRMC5092.js.gz
deleted file mode 100644
index 5c0c69ff..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/SearchPage-DRMC5092.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SearchSettings-Bh4iR-uS.3cf39fb019ed.js b/config/tandoor/staticfiles/vue3/assets/SearchSettings-Bh4iR-uS.3cf39fb019ed.js
deleted file mode 100644
index 51b3c03f..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SearchSettings-Bh4iR-uS.3cf39fb019ed.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as E,r as o,o as A,A as p,Q as d,R as v,h as V,w as r,ac as $,i as c,g as s,e as k,t as i,B as b,aa as C,z as S,j as g,M as F,T as R,U as H,af as M,ag as u,L as N,ad as B,f as P}from"./main-BhFWIRV_.js";const D={class:"text-h6"},I={class:"mt-2 mb-2"},O={class:"text-h6 mt-4"},j=E({__name:"SearchSettings",setup(W){const y=o([{title:"Simple",value:"plain"},{title:"Phrase",value:"phrase"},{title:"Web",value:"websearch"},{title:"Raw",value:"raw"}]),n=o(!1),a=o(void 0),f=o([]);A(()=>{w(),z()});function w(){let e=new p;n.value=!0,e.apiSearchPreferenceList().then(l=>{l.length==1&&(a.value=l[0])}).catch(l=>{d().addError(v.FETCH_ERROR,l)}).finally(()=>{n.value=!1})}function m(){let e=new p;n.value=!0,a.value!=null&&e.apiSearchPreferencePartialUpdate({patchedSearchPreference:a.value,user:N().userSettings.user.id}).then(l=>{a.value=l,d().addPreparedMessage(B.UPDATE_SUCCESS)}).catch(l=>{d().addError(v.UPDATE_ERROR,l)}).finally(()=>{n.value=!1})}function z(){new p().apiSearchFieldsList().then(l=>{f.value=l}).catch(l=>{d().addError(v.UPDATE_ERROR,l)})}function T(){let e=h("Name");a.value&&e&&(a.value.search="plain",a.value.unaccent=[e],a.value.icontains=[e],a.value.istartswith=[],a.value.fulltext=[],a.value.trigram=[e],a.value.trigramThreshold=.2,a.value.lookup=!0,m())}function U(){let e=h("Name"),l=h("Ingredients");a.value&&e&&l&&(a.value.search="websearch",a.value.unaccent=[],a.value.icontains=[e],a.value.istartswith=[e],a.value.fulltext=[l],a.value.trigram=[],a.value.trigramThreshold=.2,a.value.lookup=!0,m())}function h(e){let l;return f.value.forEach(t=>{t.name==e&&(l=t)}),l}return(e,l)=>(P(),V($,null,{default:r(()=>[c("p",D,i(e.$t("Search")),1),s(b,{class:"mb-3"}),s(C,{variant:"tonal",color:"warning",text:e.$t("SearchSettingsWarning")},null,8,["text"]),c("p",I,i(e.$t("SearchSettingsOverview")),1),s(F,{title:e.$t("Fuzzy")+" ("+e.$t("Default")+")",subtitle:e.$t("FuzzySearchHelp")},{append:r(()=>[s(S,{color:"success",onClick:l[0]||(l[0]=t=>T())},{default:r(()=>[g(i(e.$t("Apply")),1)]),_:1})]),_:1},8,["title","subtitle"]),s(F,{title:e.$t("Precision"),subtitle:e.$t("PrecisionSearchHelp"),class:"mt-2"},{append:r(()=>[s(S,{color:"success",onClick:l[1]||(l[1]=t=>U())},{default:r(()=>[g(i(e.$t("Apply")),1)]),_:1})]),_:1},8,["title","subtitle"]),c("p",O,i(e.$t("Advanced Search Settings")),1),s(b,{class:"mb-3"}),a.value?(P(),V($,{key:0},{default:r(()=>[s(R,{modelValue:a.value.search,"onUpdate:modelValue":l[2]||(l[2]=t=>a.value.search=t),items:y.value,label:e.$t("Method")},null,8,["modelValue","items","label"]),s(H,{modelValue:a.value.lookup,"onUpdate:modelValue":l[3]||(l[3]=t=>a.value.lookup=t),label:e.$t("Fuzzy"),"persistent-hint":"",hint:e.$t("FuzzySearchHelp"),class:"mb-4"},null,8,["modelValue","label","hint"]),s(M,{modelValue:a.value.trigramThreshold,"onUpdate:modelValue":l[4]||(l[4]=t=>a.value.trigramThreshold=t),precision:2,min:.01,max:1,step:.1,label:e.$t("TrigramThreshold"),"persistent-hint":"",hint:e.$t("TrigramThresholdHelp")},null,8,["modelValue","label","hint"]),s(u,{model:"SearchFields",mode:"tags",modelValue:a.value.unaccent,"onUpdate:modelValue":l[5]||(l[5]=t=>a.value.unaccent=t),label:e.$t("IgnoreAccents"),hint:e.$t("IgnoreAccentsHelp")},null,8,["modelValue","label","hint"]),s(u,{model:"SearchFields",mode:"tags",modelValue:a.value.icontains,"onUpdate:modelValue":l[6]||(l[6]=t=>a.value.icontains=t),label:e.$t("PartialMatch"),hint:e.$t("PartialMatchHelp")},null,8,["modelValue","label","hint"]),s(u,{model:"SearchFields",mode:"tags",modelValue:a.value.istartswith,"onUpdate:modelValue":l[7]||(l[7]=t=>a.value.istartswith=t),label:e.$t("StartsWith"),hint:e.$t("StartsWithHelp")},null,8,["modelValue","label","hint"]),s(u,{model:"SearchFields",mode:"tags",modelValue:a.value.fulltext,"onUpdate:modelValue":l[8]||(l[8]=t=>a.value.fulltext=t),label:e.$t("Fulltext"),hint:e.$t("FulltextHelp")},null,8,["modelValue","label","hint"]),s(u,{model:"SearchFields",mode:"tags",modelValue:a.value.trigram,"onUpdate:modelValue":l[9]||(l[9]=t=>a.value.trigram=t),label:e.$t("Fuzzy"),hint:e.$t("FuzzySearchHelp")},null,8,["modelValue","label","hint"]),s(S,{class:"mt-3",color:"success",onClick:l[10]||(l[10]=t=>m()),"prepend-icon":"$save",loading:n.value},{default:r(()=>[g(i(e.$t("Save")),1)]),_:1},8,["loading"])]),_:1})):k("",!0)]),_:1}))}});export{j as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/SearchSettings-Bh4iR-uS.3cf39fb019ed.js.gz b/config/tandoor/staticfiles/vue3/assets/SearchSettings-Bh4iR-uS.3cf39fb019ed.js.gz
deleted file mode 100644
index eae16236..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/SearchSettings-Bh4iR-uS.3cf39fb019ed.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SearchSettings-Bh4iR-uS.js b/config/tandoor/staticfiles/vue3/assets/SearchSettings-Bh4iR-uS.js
deleted file mode 100644
index 51b3c03f..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SearchSettings-Bh4iR-uS.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as E,r as o,o as A,A as p,Q as d,R as v,h as V,w as r,ac as $,i as c,g as s,e as k,t as i,B as b,aa as C,z as S,j as g,M as F,T as R,U as H,af as M,ag as u,L as N,ad as B,f as P}from"./main-BhFWIRV_.js";const D={class:"text-h6"},I={class:"mt-2 mb-2"},O={class:"text-h6 mt-4"},j=E({__name:"SearchSettings",setup(W){const y=o([{title:"Simple",value:"plain"},{title:"Phrase",value:"phrase"},{title:"Web",value:"websearch"},{title:"Raw",value:"raw"}]),n=o(!1),a=o(void 0),f=o([]);A(()=>{w(),z()});function w(){let e=new p;n.value=!0,e.apiSearchPreferenceList().then(l=>{l.length==1&&(a.value=l[0])}).catch(l=>{d().addError(v.FETCH_ERROR,l)}).finally(()=>{n.value=!1})}function m(){let e=new p;n.value=!0,a.value!=null&&e.apiSearchPreferencePartialUpdate({patchedSearchPreference:a.value,user:N().userSettings.user.id}).then(l=>{a.value=l,d().addPreparedMessage(B.UPDATE_SUCCESS)}).catch(l=>{d().addError(v.UPDATE_ERROR,l)}).finally(()=>{n.value=!1})}function z(){new p().apiSearchFieldsList().then(l=>{f.value=l}).catch(l=>{d().addError(v.UPDATE_ERROR,l)})}function T(){let e=h("Name");a.value&&e&&(a.value.search="plain",a.value.unaccent=[e],a.value.icontains=[e],a.value.istartswith=[],a.value.fulltext=[],a.value.trigram=[e],a.value.trigramThreshold=.2,a.value.lookup=!0,m())}function U(){let e=h("Name"),l=h("Ingredients");a.value&&e&&l&&(a.value.search="websearch",a.value.unaccent=[],a.value.icontains=[e],a.value.istartswith=[e],a.value.fulltext=[l],a.value.trigram=[],a.value.trigramThreshold=.2,a.value.lookup=!0,m())}function h(e){let l;return f.value.forEach(t=>{t.name==e&&(l=t)}),l}return(e,l)=>(P(),V($,null,{default:r(()=>[c("p",D,i(e.$t("Search")),1),s(b,{class:"mb-3"}),s(C,{variant:"tonal",color:"warning",text:e.$t("SearchSettingsWarning")},null,8,["text"]),c("p",I,i(e.$t("SearchSettingsOverview")),1),s(F,{title:e.$t("Fuzzy")+" ("+e.$t("Default")+")",subtitle:e.$t("FuzzySearchHelp")},{append:r(()=>[s(S,{color:"success",onClick:l[0]||(l[0]=t=>T())},{default:r(()=>[g(i(e.$t("Apply")),1)]),_:1})]),_:1},8,["title","subtitle"]),s(F,{title:e.$t("Precision"),subtitle:e.$t("PrecisionSearchHelp"),class:"mt-2"},{append:r(()=>[s(S,{color:"success",onClick:l[1]||(l[1]=t=>U())},{default:r(()=>[g(i(e.$t("Apply")),1)]),_:1})]),_:1},8,["title","subtitle"]),c("p",O,i(e.$t("Advanced Search Settings")),1),s(b,{class:"mb-3"}),a.value?(P(),V($,{key:0},{default:r(()=>[s(R,{modelValue:a.value.search,"onUpdate:modelValue":l[2]||(l[2]=t=>a.value.search=t),items:y.value,label:e.$t("Method")},null,8,["modelValue","items","label"]),s(H,{modelValue:a.value.lookup,"onUpdate:modelValue":l[3]||(l[3]=t=>a.value.lookup=t),label:e.$t("Fuzzy"),"persistent-hint":"",hint:e.$t("FuzzySearchHelp"),class:"mb-4"},null,8,["modelValue","label","hint"]),s(M,{modelValue:a.value.trigramThreshold,"onUpdate:modelValue":l[4]||(l[4]=t=>a.value.trigramThreshold=t),precision:2,min:.01,max:1,step:.1,label:e.$t("TrigramThreshold"),"persistent-hint":"",hint:e.$t("TrigramThresholdHelp")},null,8,["modelValue","label","hint"]),s(u,{model:"SearchFields",mode:"tags",modelValue:a.value.unaccent,"onUpdate:modelValue":l[5]||(l[5]=t=>a.value.unaccent=t),label:e.$t("IgnoreAccents"),hint:e.$t("IgnoreAccentsHelp")},null,8,["modelValue","label","hint"]),s(u,{model:"SearchFields",mode:"tags",modelValue:a.value.icontains,"onUpdate:modelValue":l[6]||(l[6]=t=>a.value.icontains=t),label:e.$t("PartialMatch"),hint:e.$t("PartialMatchHelp")},null,8,["modelValue","label","hint"]),s(u,{model:"SearchFields",mode:"tags",modelValue:a.value.istartswith,"onUpdate:modelValue":l[7]||(l[7]=t=>a.value.istartswith=t),label:e.$t("StartsWith"),hint:e.$t("StartsWithHelp")},null,8,["modelValue","label","hint"]),s(u,{model:"SearchFields",mode:"tags",modelValue:a.value.fulltext,"onUpdate:modelValue":l[8]||(l[8]=t=>a.value.fulltext=t),label:e.$t("Fulltext"),hint:e.$t("FulltextHelp")},null,8,["modelValue","label","hint"]),s(u,{model:"SearchFields",mode:"tags",modelValue:a.value.trigram,"onUpdate:modelValue":l[9]||(l[9]=t=>a.value.trigram=t),label:e.$t("Fuzzy"),hint:e.$t("FuzzySearchHelp")},null,8,["modelValue","label","hint"]),s(S,{class:"mt-3",color:"success",onClick:l[10]||(l[10]=t=>m()),"prepend-icon":"$save",loading:n.value},{default:r(()=>[g(i(e.$t("Save")),1)]),_:1},8,["loading"])]),_:1})):k("",!0)]),_:1}))}});export{j as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/SearchSettings-Bh4iR-uS.js.gz b/config/tandoor/staticfiles/vue3/assets/SearchSettings-Bh4iR-uS.js.gz
deleted file mode 100644
index eae16236..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/SearchSettings-Bh4iR-uS.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SettingsPage-BOXp8G3y.e2f6ed0bca00.js b/config/tandoor/staticfiles/vue3/assets/SettingsPage-BOXp8G3y.e2f6ed0bca00.js
deleted file mode 100644
index c8aa6f39..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SettingsPage-BOXp8G3y.e2f6ed0bca00.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as u,a7 as m,h as g,w as t,K as _,g as e,V as p,x as S,y as s,j as a,t as o,B as i,a8 as r,l as c,a9 as $,k as V,f as h}from"./main-BhFWIRV_.js";const D=u({__name:"SettingsPage",setup(w){const{getDjangoUrl:d}=m();return(n,l)=>{const f=$("router-view");return h(),g(_,null,{default:t(()=>[e(V,null,{default:t(()=>[e(p,{cols:"12",md:"3","offset-md":"1","offset-xl":"2",xl:"2"},{default:t(()=>[e(S,{class:"bg-transparent"},{default:t(()=>[e(s,{to:{name:"AccountSettings"},"prepend-icon":"fa-solid fa-user"},{default:t(()=>[a(o(n.$t("Profile")),1)]),_:1}),e(i),e(r,null,{default:t(()=>[a(o(n.$t("Settings")),1)]),_:1}),e(s,{to:{name:"CosmeticSettings"},"prepend-icon":"fa-solid fa-palette"},{default:t(()=>[a(o(n.$t("Cosmetic")),1)]),_:1}),e(s,{to:{name:"ShoppingSettings"},"prepend-icon":"$shopping"},{default:t(()=>[a(o(n.$t("Shopping_list")),1)]),_:1}),e(s,{to:{name:"MealPlanSettings"},"prepend-icon":"$mealplan"},{default:t(()=>[a(o(n.$t("Meal_Plan")),1)]),_:1}),e(s,{to:{name:"SearchSettings"},"prepend-icon":"$search"},{default:t(()=>[a(o(n.$t("Search")),1)]),_:1}),e(i),e(r,null,{default:t(()=>l[0]||(l[0]=[a("Space")])),_:1,__:[0]}),e(s,{to:{name:"SpaceSettings"},"prepend-icon":"$settings"},{default:t(()=>[a(o(n.$t("SpaceSettings")),1)]),_:1}),e(s,{to:{name:"OpenDataImportSettings"},"prepend-icon":"fa-solid fa-cloud-arrow-down"},{default:t(()=>[a(o(n.$t("Open_Data_Import")),1)]),_:1}),e(s,{to:{name:"ExportDataSettings"},"prepend-icon":"fa-solid fa-file-export"},{default:t(()=>[a(o(n.$t("Export")),1)]),_:1}),e(i),e(r,null,{default:t(()=>l[1]||(l[1]=[a("Admin")])),_:1,__:[1]}),e(s,{to:{name:"ApiSettings"},"prepend-icon":"fa-solid fa-code"},{default:t(()=>[a(o(n.$t("API")),1)]),_:1}),e(s,{href:c(d)("system"),target:"_blank","prepend-icon":"fa-solid fa-server"},{default:t(()=>[a(o(n.$t("System")),1)]),_:1},8,["href"])]),_:1})]),_:1}),e(p,{cols:"12",md:"7",xl:"6"},{default:t(()=>[e(f)]),_:1})]),_:1})]),_:1})}}});export{D as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/SettingsPage-BOXp8G3y.e2f6ed0bca00.js.gz b/config/tandoor/staticfiles/vue3/assets/SettingsPage-BOXp8G3y.e2f6ed0bca00.js.gz
deleted file mode 100644
index 92fbddc4..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/SettingsPage-BOXp8G3y.e2f6ed0bca00.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SettingsPage-BOXp8G3y.js b/config/tandoor/staticfiles/vue3/assets/SettingsPage-BOXp8G3y.js
deleted file mode 100644
index c8aa6f39..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SettingsPage-BOXp8G3y.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as u,a7 as m,h as g,w as t,K as _,g as e,V as p,x as S,y as s,j as a,t as o,B as i,a8 as r,l as c,a9 as $,k as V,f as h}from"./main-BhFWIRV_.js";const D=u({__name:"SettingsPage",setup(w){const{getDjangoUrl:d}=m();return(n,l)=>{const f=$("router-view");return h(),g(_,null,{default:t(()=>[e(V,null,{default:t(()=>[e(p,{cols:"12",md:"3","offset-md":"1","offset-xl":"2",xl:"2"},{default:t(()=>[e(S,{class:"bg-transparent"},{default:t(()=>[e(s,{to:{name:"AccountSettings"},"prepend-icon":"fa-solid fa-user"},{default:t(()=>[a(o(n.$t("Profile")),1)]),_:1}),e(i),e(r,null,{default:t(()=>[a(o(n.$t("Settings")),1)]),_:1}),e(s,{to:{name:"CosmeticSettings"},"prepend-icon":"fa-solid fa-palette"},{default:t(()=>[a(o(n.$t("Cosmetic")),1)]),_:1}),e(s,{to:{name:"ShoppingSettings"},"prepend-icon":"$shopping"},{default:t(()=>[a(o(n.$t("Shopping_list")),1)]),_:1}),e(s,{to:{name:"MealPlanSettings"},"prepend-icon":"$mealplan"},{default:t(()=>[a(o(n.$t("Meal_Plan")),1)]),_:1}),e(s,{to:{name:"SearchSettings"},"prepend-icon":"$search"},{default:t(()=>[a(o(n.$t("Search")),1)]),_:1}),e(i),e(r,null,{default:t(()=>l[0]||(l[0]=[a("Space")])),_:1,__:[0]}),e(s,{to:{name:"SpaceSettings"},"prepend-icon":"$settings"},{default:t(()=>[a(o(n.$t("SpaceSettings")),1)]),_:1}),e(s,{to:{name:"OpenDataImportSettings"},"prepend-icon":"fa-solid fa-cloud-arrow-down"},{default:t(()=>[a(o(n.$t("Open_Data_Import")),1)]),_:1}),e(s,{to:{name:"ExportDataSettings"},"prepend-icon":"fa-solid fa-file-export"},{default:t(()=>[a(o(n.$t("Export")),1)]),_:1}),e(i),e(r,null,{default:t(()=>l[1]||(l[1]=[a("Admin")])),_:1,__:[1]}),e(s,{to:{name:"ApiSettings"},"prepend-icon":"fa-solid fa-code"},{default:t(()=>[a(o(n.$t("API")),1)]),_:1}),e(s,{href:c(d)("system"),target:"_blank","prepend-icon":"fa-solid fa-server"},{default:t(()=>[a(o(n.$t("System")),1)]),_:1},8,["href"])]),_:1})]),_:1}),e(p,{cols:"12",md:"7",xl:"6"},{default:t(()=>[e(f)]),_:1})]),_:1})]),_:1})}}});export{D as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/SettingsPage-BOXp8G3y.js.gz b/config/tandoor/staticfiles/vue3/assets/SettingsPage-BOXp8G3y.js.gz
deleted file mode 100644
index 92fbddc4..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/SettingsPage-BOXp8G3y.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryEditor-BO9U6pqW.56df3d1fc8a6.js b/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryEditor-BO9U6pqW.56df3d1fc8a6.js
deleted file mode 100644
index 84c1483e..00000000
--- a/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryEditor-BO9U6pqW.56df3d1fc8a6.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as y,aM as O,o as w,h as D,f as E,w as i,g as o,O as I,ac as U,l as e,af as $,z as f,G as p,ag as g}from"./main-BhFWIRV_.js";import{u as k,_ as x}from"./useModelEditorFunctions-Du2kfr61.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";const M=y({__name:"ShoppingListEntryEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(d,{emit:c}){const n=d,s=c,{setupState:V,deleteObject:b,saveObject:v,isUpdate:j,editingObjName:C,loading:u,editingObj:a,editingObjChanged:m,modelClass:S}=k("ShoppingListEntry",s);O([()=>n.item,()=>n.itemId],()=>{r()}),w(()=>{r()});function r(){V(n.item,n.itemId,{itemDefaults:n.itemDefaults})}return(B,t)=>(E(),D(x,{loading:e(u),dialog:d.dialog,onSave:e(v),onDelete:e(b),onClose:t[5]||(t[5]=l=>{s("close"),m.value=!1}),"is-update":e(j)(),"is-changed":e(m),"model-class":e(S),"object-name":e(C)(),"editing-object":e(a)},{default:i(()=>[o(I,null,{default:i(()=>[o(U,{disabled:e(u)},{default:i(()=>[o($,{modelValue:e(a).amount,"onUpdate:modelValue":t[2]||(t[2]=l=>e(a).amount=l),"control-variant":"split",precision:2},{prepend:i(()=>[o(f,{icon:"",onClick:t[0]||(t[0]=l=>e(a).amount=e(a).amount/2)},{default:i(()=>[o(p,{icon:"fa-solid fa-divide"})]),_:1})]),append:i(()=>[o(f,{icon:"",onClick:t[1]||(t[1]=l=>e(a).amount=e(a).amount*2)},{default:i(()=>[o(p,{icon:"fa-solid fa-times"})]),_:1})]),_:1},8,["modelValue"]),o(g,{model:"Unit","allow-create":"",modelValue:e(a).unit,"onUpdate:modelValue":t[3]||(t[3]=l=>e(a).unit=l)},null,8,["modelValue"]),o(g,{model:"Food","allow-create":"",modelValue:e(a).food,"onUpdate:modelValue":t[4]||(t[4]=l=>e(a).food=l)},null,8,["modelValue"])]),_:1},8,["disabled"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{M as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryEditor-BO9U6pqW.56df3d1fc8a6.js.gz b/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryEditor-BO9U6pqW.56df3d1fc8a6.js.gz
deleted file mode 100644
index 4e9cdc83..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryEditor-BO9U6pqW.56df3d1fc8a6.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryEditor-BO9U6pqW.js b/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryEditor-BO9U6pqW.js
deleted file mode 100644
index 84c1483e..00000000
--- a/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryEditor-BO9U6pqW.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as y,aM as O,o as w,h as D,f as E,w as i,g as o,O as I,ac as U,l as e,af as $,z as f,G as p,ag as g}from"./main-BhFWIRV_.js";import{u as k,_ as x}from"./useModelEditorFunctions-Du2kfr61.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";const M=y({__name:"ShoppingListEntryEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(d,{emit:c}){const n=d,s=c,{setupState:V,deleteObject:b,saveObject:v,isUpdate:j,editingObjName:C,loading:u,editingObj:a,editingObjChanged:m,modelClass:S}=k("ShoppingListEntry",s);O([()=>n.item,()=>n.itemId],()=>{r()}),w(()=>{r()});function r(){V(n.item,n.itemId,{itemDefaults:n.itemDefaults})}return(B,t)=>(E(),D(x,{loading:e(u),dialog:d.dialog,onSave:e(v),onDelete:e(b),onClose:t[5]||(t[5]=l=>{s("close"),m.value=!1}),"is-update":e(j)(),"is-changed":e(m),"model-class":e(S),"object-name":e(C)(),"editing-object":e(a)},{default:i(()=>[o(I,null,{default:i(()=>[o(U,{disabled:e(u)},{default:i(()=>[o($,{modelValue:e(a).amount,"onUpdate:modelValue":t[2]||(t[2]=l=>e(a).amount=l),"control-variant":"split",precision:2},{prepend:i(()=>[o(f,{icon:"",onClick:t[0]||(t[0]=l=>e(a).amount=e(a).amount/2)},{default:i(()=>[o(p,{icon:"fa-solid fa-divide"})]),_:1})]),append:i(()=>[o(f,{icon:"",onClick:t[1]||(t[1]=l=>e(a).amount=e(a).amount*2)},{default:i(()=>[o(p,{icon:"fa-solid fa-times"})]),_:1})]),_:1},8,["modelValue"]),o(g,{model:"Unit","allow-create":"",modelValue:e(a).unit,"onUpdate:modelValue":t[3]||(t[3]=l=>e(a).unit=l)},null,8,["modelValue"]),o(g,{model:"Food","allow-create":"",modelValue:e(a).food,"onUpdate:modelValue":t[4]||(t[4]=l=>e(a).food=l)},null,8,["modelValue"])]),_:1},8,["disabled"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{M as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryEditor-BO9U6pqW.js.gz b/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryEditor-BO9U6pqW.js.gz
deleted file mode 100644
index 4e9cdc83..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryEditor-BO9U6pqW.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryInput.vue_vue_type_style_index_1_lang-DiO3wd3y.14ce9971b681.js b/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryInput.vue_vue_type_style_index_1_lang-DiO3wd3y.14ce9971b681.js
deleted file mode 100644
index 259f87db..00000000
--- a/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryInput.vue_vue_type_style_index_1_lang-DiO3wd3y.14ce9971b681.js
+++ /dev/null
@@ -1 +0,0 @@
-import{ds as _e,r as S,c as B,L as w,b2 as K,dt as Q,D as O,A,Q as F,R as V,b0 as ae,d as le,a as ye,aH as de,du as Se,h as L,f as c,w as u,g as d,M as De,e as g,aO as Re,O as Ce,i as C,ae as re,j as U,t as f,ag as Le,k as ce,V as q,z as T,l as h,b,G as x,x as we,F as X,p as me,y as ge,C as Te,E as J,ba as be,_ as $e,aP as Ue,aN as Fe,ad as Oe,a$ as Ae,n as pe,bQ as Ve,S as Ie,aR as Pe,dv as Ne}from"./main-BhFWIRV_.js";import{p as fe}from"./model_utils-CVQgSPL_.js";const xe="shopping_store",W="shopping_undefined_category",M=_e(xe,()=>{let _=S(new Map),N=S([]),v=S([]),p=S({countChecked:0,countUnchecked:0,countCheckedFood:0,countUncheckedFood:0,countUncheckedDelayed:0}),E=S(!1),k=S(!1),$=S(new Date("1970-01-01")),I=S(!0),G=S(0),D=S([]),r=S(-1),s=S([]);const i=B(()=>{p.value={countChecked:0,countUnchecked:0,countCheckedFood:0,countUncheckedFood:0,countUncheckedDelayed:0};let a={};a.categories=new Map,w().deviceSettings.shopping_selected_grouping===K.CATEGORY&&w().deviceSettings.shopping_selected_supermarket!=null&&w().deviceSettings.shopping_selected_supermarket.categoryToSupermarket.forEach(o=>{a.categories.set(o.category.name,{name:o.category.name,foods:new Map})});let t=[];_.value.forEach(o=>{a=ve(a,o)}),a.categories.forEach(o=>{let m={countChecked:0,countUnchecked:0,countCheckedFood:0,countUncheckedFood:0,countUncheckedDelayed:0};o.foods.forEach(R=>{R.entries.forEach(z=>{z.checked?m.countChecked++:Q(z)?m.countUncheckedDelayed++:m.countUnchecked++}),m.countCheckedFood++}),o.stats=m,p.value.countChecked+=m.countChecked,p.value.countUnchecked+=m.countUnchecked,p.value.countCheckedFood+=m.countCheckedFood,p.value.countUncheckedFood+=m.countUncheckedFood});let l=a.categories.get(W);return l!=null&&(t.push(l),a.categories.delete(W)),a.categories.forEach(o=>{t.push(o)}),t});function e(){let a=[];return i.value.forEach(t=>{t.foods.forEach(l=>{l.entries.forEach(o=>{a.push({amount:o.amount,unit:o.unit?.name??"",food:o.food?.name??""})})})}),a}function n(a){let t=[];return _.value.forEach(l=>{l.listRecipe&&l.listRecipeData.mealplan==a&&t.push({food:l.food,entries:new Map().set(l.id,l)})}),t}function P(){for(let a in s.value)if(s.value[a].status==="syncing_failed_before"||s.value[a].status==="waiting_failed_before")return!0;return!1}function Y(a){if(!E.value){E.value=!0,$.value=new Date;let t=new A,l={pageSize:50,page:1};a?l.mealplan=a:_.value=new Map,y(l),t.apiSupermarketCategoryList().then(o=>{N.value=o.results}).catch(o=>{F().addError(V.FETCH_ERROR,o)}),t.apiSupermarketList().then(o=>{v.value=o.results}).catch(o=>{F().addError(V.FETCH_ERROR,o)})}}function y(a){new A().apiShoppingListEntryList(a).then(l=>{l.results.forEach(o=>{_.value.set(o.id,o)}),l.next?(a.page=a.page+1,y(a)):(E.value=!1,k.value=!0)}).catch(l=>{E.value=!1,F().addError(V.FETCH_ERROR,l)})}function H(){!E.value&&I.value&&!P()&&(E.value=!0,new A().apiShoppingListEntryList({updatedAfter:$.value}).then(t=>{$.value=t.timestamp,t.results.forEach(l=>{_.value.set(l.id,l)}),E.value=!1}).catch(t=>{E.value=!1}))}function ie(a,t){return new A().apiShoppingListEntryCreate({shoppingListEntry:a}).then(o=>(_.value.set(o.id,o),t&&j("CREATE",[o]),o)).catch(o=>{F().addError(V.CREATE_ERROR,o)})}function ne(a){return new A().apiShoppingListEntryUpdate({id:a.id,shoppingListEntry:a}).then(l=>{_.value.set(l.id,l)}).catch(l=>{F().addError(V.UPDATE_ERROR,l)})}function oe(a,t){return new A().apiShoppingListEntryDestroy({id:a.id}).then(o=>{_.value.delete(a.id),t&&j("DESTROY",[a])}).catch(o=>{F().addError(V.DELETE_ERROR,o)})}function he(){let a=[];return _.value.forEach(t=>{t.listRecipe!=null&&a.findIndex(l=>l.id==t.listRecipe)==-1&&ae(t,w().deviceSettings)&&a.push(t.listRecipeData)}),a}function ve(a,t){let l=W,o=w().deviceSettings.shopping_selected_grouping;return o==K.CATEGORY&&t.food!=null&&t.food.supermarketCategory!=null?l=t.food?.supermarketCategory?.name:o==K.CREATED_BY?l=t.createdBy.displayName:o==K.RECIPE&&t.listRecipeData!=null&&t.listRecipeData.recipeData!=null&&(l=t.listRecipeData.recipeData.name,t.listRecipeData.mealPlanData!=null&&(l+=" - "+t.listRecipeData.mealPlanData.mealType.name+" - "+O.fromJSDate(t.listRecipeData.mealPlanData.fromDate).toLocaleString(O.DATE_SHORT))),!a.categories.has(l)&&!(o==K.CATEGORY&&w().deviceSettings.shopping_show_selected_supermarket_only)&&a.categories.set(l,{name:l,foods:new Map}),a.categories.has(l)&&(a.categories.get(l).foods.has(t.food.id)||a.categories.get(l).foods.set(t.food.id,{food:t.food,entries:new Map}),a.categories.get(l).foods.get(t.food.id).entries.set(t.id,t)),a}function Z(a,t,l){l&&j(t?"CHECKED":"UNCHECKED",a);let o=[];a.forEach(m=>{m.checked=t,o.push(m.id)}),s.value.push({ids:o,checked:t,status:"waiting"}),ee(5)}function Ee(){if(navigator.onLine||document.location.href.includes("localhost")){let a=new A,t=[];s.value.forEach((l,o)=>{l.status=l.status==="waiting"?"syncing":"syncing_failed_before";let m=a.apiShoppingListEntryBulkCreate({shoppingListEntryBulk:l},{}).then(R=>{l.ids.forEach(z=>{let te=_.value.get(z);te.updatedAt=R.timestamp,te.checked=R.checked,_.value.set(z,te)}),s.value.splice(o,1)}).catch(R=>{R.name==="FetchError"?l.status="waiting_failed_before":(s.value.splice(o,1),F().addError(V.UPDATE_ERROR,R))});t.push(m)}),Promise.allSettled(t).finally(()=>{s.value.length>0&&ee(500)})}else ee(5e3)}function ee(a){clearTimeout(r.value),r.value=window.setTimeout(()=>{Ee()},a)}function se(a,t,l){let o=w().userSettings.defaultDelay,m=new Date(Date.now()+o*(60*60*1e3));l&&j(t?"DELAY":"UNDELAY",a),a.forEach(R=>{R.delayUntil=t?m:new Date("1970-01-01"),ne(R)})}function ue(a,t,l){const o=new A;l&&j(t?"IGNORE":"UNIGNORE",a);let m=[];a.forEach(R=>{m.includes(R.food)||m.push(R.food)}),Z(a,t,!1),m.forEach(R=>{R.ignoreShopping=t,o.apiFoodUpdate({food:R,id:R.id}).catch(z=>{F().addError(V.UPDATE_ERROR,z)})})}function j(a,t){D.value.push({type:a,entries:t})}function ke(){let a=D.value.pop();if(a!==void 0){let t=a.type,l=a.entries;if(t==="CHECKED"||t==="UNCHECKED")Z(l,t==="UNCHECKED",!1);else if(t==="DELAY"||t==="UNDELAY")se(l,t==="UNDELAY",!1);else if(t==="CREATE")for(let o in l){let m=l[o];oe(m,!1)}else if(t==="DESTROY")for(let o in l){let m=l[o];ie(m,!1)}else(t==="IGNORE"||t==="UNIGNORE")&&ue(l,t==="UNIGNORE",!1)}}return{UNDEFINED_CATEGORY:W,entries:_,supermarkets:v,supermarketCategories:N,getEntriesByGroup:i,autoSyncTimeoutId:G,autoSyncHasFocus:I,autoSyncLastTimestamp:$,currentlyUpdating:E,initialized:k,getFlatEntries:e,hasFailedItems:P,itemCheckSyncQueue:s,undoStack:D,stats:p,refreshFromAPI:Y,autoSync:H,createObject:ie,deleteObject:oe,updateObject:ne,undoChange:ke,setEntriesCheckedState:Z,setFoodIgnoredState:ue,delayEntries:se,getAssociatedRecipes:he,getMealPlanEntries:n}}),Me={key:0},Be={key:1},He={class:"mt-2"},Ge={key:0},ze={key:1},Ye={key:0},je=le({__name:"ShoppingLineItemDialog",props:{modelValue:{},modelModifiers:{},shoppingListFood:{required:!0},shoppingListFoodModifiers:{}},emits:["update:modelValue","update:shoppingListFood"],setup(_){const{mobile:N}=ye(),v=de(_,"modelValue"),p=de(_,"shoppingListFood"),E=B(()=>{let r=[];return p.value.entries.forEach(s=>{r.push(s)}),r}),k=B(()=>Se(p.value));function $(r){const s=new A;p.value.food.supermarketCategory=r,s.apiFoodUpdate({id:p.value.food.id,food:p.value.food}).then(i=>{F().addPreparedMessage(Oe.UPDATE_SUCCESS)}).catch(i=>{F().addError(V.UPDATE_ERROR,i)})}function I(){M().createObject({food:p.value?.food,unit:null,amount:1},!1).then(r=>{r!=null&&p.value?.entries.set(r.id,r)})}function G(){v.value=!1,p.value.entries.forEach(r=>{M().deleteObject(r,!0)})}function D(r){new A().apiShoppingListEntryPartialUpdate({id:r.id,patchedShoppingListEntry:{amount:r.amount}}).then(i=>{}).catch(i=>{F().addError(V.UPDATE_ERROR,i)})}return(r,s)=>(c(),L(Fe,{fullscreen:h(N),modelValue:v.value,"onUpdate:modelValue":s[6]||(s[6]=i=>v.value=i),"max-width":"500px"},{default:u(()=>[d(De,null,{default:u(()=>[d(Re,{title:p.value.food.name,modelValue:v.value,"onUpdate:modelValue":s[0]||(s[0]=i=>v.value=i)},null,8,["title","modelValue"]),d(Ce,{class:"pt-0 pr-4 pl-4"},{default:u(()=>[d(re,null,{default:u(()=>[U(f(r.$t("Choose_Category")),1)]),_:1}),d(Le,{model:"SupermarketCategory","onUpdate:modelValue":$,"allow-create":""}),d(ce,null,{default:u(()=>[d(q,{class:"pr-0"},{default:u(()=>[d(T,{height:"80px",color:"info",density:"compact",size:"small",block:"",stacked:"",onClick:s[1]||(s[1]=i=>{h(M)().delayEntries(E.value,!k.value,!0),v.value=!1})},{default:u(()=>[s[7]||(s[7]=C("i",{class:"fa-solid fa-clock-rotate-left fa-2x mb-2"},null,-1)),k.value?g("",!0):(c(),b("span",Me,f(r.$t("ShopLater")),1)),k.value?(c(),b("span",Be,f(r.$t("ShopNow")),1)):g("",!0)]),_:1,__:[7]})]),_:1}),d(q,null,{default:u(()=>[d(T,{height:"80px",color:"secondary",density:"compact",size:"small",block:"",stacked:"",onClick:s[2]||(s[2]=i=>{h(M)().setFoodIgnoredState(E.value,!0,!0),v.value=!1})},{default:u(()=>[s[8]||(s[8]=C("i",{class:"fa-solid fa-eye-slash fa-2x mb-2"},null,-1)),U(" "+f(r.$t("Ignore_Shopping")),1)]),_:1,__:[8]})]),_:1})]),_:1}),d(ce,null,{default:u(()=>[d(q,{class:"pr-0 pt-0"},{default:u(()=>[d(T,{height:"80px",color:"primary",density:"compact",size:"small",to:{name:"ModelEditPage",params:{model:"Food",id:p.value?.food.id}},target:"_blank",block:"",stacked:""},{default:u(()=>[s[9]||(s[9]=C("i",{class:"fa-solid fa-carrot fa-2x mb-2"},null,-1)),U(" "+f(r.$t("Edit")),1)]),_:1,__:[9]},8,["to"])]),_:1}),d(q,{class:"pt-0"},{default:u(()=>[d(T,{height:"80px",color:"error",density:"compact",size:"small",onClick:s[3]||(s[3]=i=>G()),block:"",stacked:""},{default:u(()=>[s[10]||(s[10]=C("i",{class:"fa-solid fa-trash fa-2x mb-2"},null,-1)),U(" "+f(r.$t("Delete_All")),1)]),_:1,__:[10]})]),_:1})]),_:1}),C("div",He,[d(re,{class:"mt-3"},{default:u(()=>[U(f(r.$t("Entries")),1)]),_:1}),d(T,{color:"success",class:"float-right",onClick:s[4]||(s[4]=i=>I())},{default:u(()=>[d(x,{icon:"$create"})]),_:1})]),d(we,{density:"compact"},{default:u(()=>[(c(!0),b(X,null,me(p.value.entries,([i,e])=>(c(),L(ge,{key:e.id,border:"",class:"mt-1"},{default:u(()=>[d(Te,null,{default:u(()=>[C("b",null,[e.amount!=0?(c(),b("span",Ge,f(r.$n(e.amount))+"Â ",1)):g("",!0),e.unit?(c(),b("span",ze,f(e.unit.name)+"Â ",1)):g("",!0)]),e.food?(c(),b("span",Ye,f(e.food.name),1)):g("",!0)]),_:2},1024),e.completedAt?(c(),L(J,{key:0},{default:u(()=>[d(x,{icon:"fa-solid fa-check",size:"small",color:"success"}),U(" "+f(r.$t("Completed"))+" "+f(h(O).fromJSDate(e.completedAt).toLocaleString(h(O).DATETIME_SHORT)),1)]),_:2},1024)):g("",!0),e.listRecipe&&e.listRecipeData.recipe?(c(),L(J,{key:1},{default:u(()=>[U(f(e.listRecipeData.servings)+" x "+f(e.listRecipeData.recipeData.name),1)]),_:2},1024)):g("",!0),e.listRecipe&&e.listRecipeData.mealplan?(c(),L(J,{key:2},{default:u(()=>[U(f(e.listRecipeData.mealPlanData.mealType.name)+" "+f(h(O).fromJSDate(e.listRecipeData.mealPlanData.fromDate).toLocaleString(h(O).DATE_SHORT)),1)]),_:2},1024)):g("",!0),d(J,null,{default:u(()=>[U(f(e.createdBy.displayName)+" - "+f(h(O).fromJSDate(e.createdAt).toLocaleString(h(O).DATETIME_SHORT)),1)]),_:2},1024),h(Q)(e)?(c(),L(J,{key:3,class:"text-info font-weight-bold"},{default:u(()=>[U(f(r.$t("PostponedUntil"))+" "+f(h(O).fromJSDate(e.delayUntil).toLocaleString(h(O).DATETIME_SHORT)),1)]),_:2},1024)):g("",!0),d(be,{divided:"",border:""},{default:u(()=>[e.ingredient?g("",!0):(c(),L(T,{key:0,icon:"",onClick:n=>{e.amount=e.amount/2,D(e)}},{default:u(()=>[d(x,{icon:"fa-solid fa-divide"})]),_:2},1032,["onClick"])),e.ingredient?g("",!0):(c(),L(T,{key:1,icon:"",onClick:n=>{e.amount--,D(e)}},{default:u(()=>[d(x,{icon:"fa-solid fa-minus"})]),_:2},1032,["onClick"])),e.ingredient?g("",!0):(c(),L(T,{key:2,icon:"",onClick:n=>{e.amount++,D(e)}},{default:u(()=>[d(x,{icon:"fa-solid fa-plus"})]),_:2},1032,["onClick"])),e.ingredient?g("",!0):(c(),L(T,{key:3,icon:"",onClick:n=>{e.amount=e.amount*2,D(e)}},{default:u(()=>[d(x,{icon:"fa-solid fa-times"})]),_:2},1032,["onClick"])),e.ingredient?g("",!0):(c(),L(T,{key:4,color:"edit",icon:"$edit"},{default:u(()=>[d(x,{icon:"$edit"}),d($e,{model:"ShoppingListEntry",item:e,onDelete:n=>{h(M)().entries.delete(e.id),p.value.entries.delete(e.id)},onSave:n=>{h(M)().entries.set(e.id,n),p.value.entries.set(e.id,n)}},null,8,["item","onDelete","onSave"])]),_:2},1024)),e.listRecipe&&e.listRecipeData.recipe&&e.ingredient?(c(),L(T,{key:5,color:"edit",icon:"$recipes",to:{name:"RecipeViewPage",params:{id:e.listRecipeData.recipe}}},{default:u(()=>[d(x,{icon:"$recipes"})]),_:2},1032,["to"])):g("",!0),d(T,{icon:"",onClick:n=>{h(M)().deleteObject(e,!0),p.value.entries.delete(e.id)},color:"delete"},{default:u(()=>[d(x,{icon:"$delete"})]),_:2},1032,["onClick"])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1}),h(N)?(c(),L(Ue,{key:0},{default:u(()=>[d(T,{onClick:s[5]||(s[5]=i=>v.value=!1)},{default:u(()=>[U(f(r.$t("Close")),1)]),_:1})]),_:1})):g("",!0)]),_:1})]),_:1},8,["fullscreen","modelValue"]))}}),Ke={class:"flex-grow-1 p-2"},Je={class:"d-flex"},Qe={class:"d-flex flex-column pr-2 pl-4"},qe={key:0,class:"fas fa-check text-success fa-fw"},We={key:1,class:"fas fa-clock-rotate-left text-info fa-fw"},Xe={key:0},Ze={key:1,class:"ms-1"},et={class:"d-flex flex-column flex-grow-1 align-self-center"},tt={key:0},at={class:"text-disabled"},nt=le({__name:"ShoppingLineItem",props:{shoppingListFood:{type:{},required:!0},hideInfoRow:{type:Boolean,default:!1}},emits:["clicked"],setup(_,{emit:N}){const v=_,p=S(w().userSettings.leftHanded?"prepend":"append"),E=S(!1),k=B(()=>Array.from(v.shoppingListFood.entries.values())),$=B(()=>{let i="id_sli_";for(let e in k.value)i+=e+"_";return i}),I=B(()=>{for(let i in k.value)if(!k.value[i].checked)return!1;return!0}),G=B(()=>I.value?"fa-solid fa-plus":"fa-solid fa-check"),D=B(()=>{let i=[];for(let e in k.value){let n=k.value[e];if(ae(n,w().deviceSettings)){let P=-1;if(n.unit!==void 0&&n.unit!==null&&(P=n.unit.id),n.amount>0){let Y=!1;i.forEach(y=>{(y.unit==null&&n.unit==null||y.unit!=null&&y.unit.id==P)&&y.checked==n.checked&&y.delayed==Q(n)&&(y.amount+=n.amount,Y=!0)}),Y||i.push({key:`${P}_${n.checked}_${Q(n)}`,amount:n.amount,unit:n.unit,checked:n.checked,delayed:Q(n)})}}}return i}),r=B(()=>{if(v.hideInfoRow)return"";let i=[],e=[],n=[],P=[];for(let Y in k.value){let y=k.value[Y];if(ae(y,w().deviceSettings)&&(e.indexOf(y.createdBy.displayName)===-1&&e.push(y.createdBy.displayName),y.listRecipe!=null)){if(y.listRecipeData.recipe!=null){let H=y.listRecipeData.recipeData.name;n.indexOf(H)===-1&&n.push(H.substring(0,14)+(H.length>14?"..":""))}if(y.listRecipeData.mealplan!=null){let H=(y.listRecipeData.mealPlanData.mealType.name.substring(0,8)||"")+(y.listRecipeData.mealPlanData.mealType.name.length>8?"..":"")+" ("+O.fromJSDate(y.listRecipeData.mealPlanData.fromDate).toLocaleString(O.DATE_SHORT)+")";P.indexOf(H)===-1&&P.push(H)}}}return w().deviceSettings.shopping_item_info_created_by&&e.length>0&&i.push(e.join(", ")),w().deviceSettings.shopping_item_info_recipe&&n.length>0&&i.push(n.join(", ")),w().deviceSettings.shopping_item_info_mealplan&&P.length>0&&i.push(P.join(", ")),i.join(" - ")});function s(){}return(i,e)=>(c(),b(X,null,[h(Ae)(v.shoppingListFood,h(w)().deviceSettings)?(c(),L(ge,{key:0,class:"swipe-container border-t-sm mt-0 mb-0 pt-0 pb-0 pe-0 pa-0",id:$.value,onTouchend:e[1]||(e[1]=n=>void 0),onClick:e[2]||(e[2]=n=>{E.value=!0})},{[p.value]:u(()=>[C("div",{class:"ps-3 pe-3",onClick:e[0]||(e[0]=Ve(n=>{h(M)().setEntriesCheckedState(k.value,!I.value,!0)},["stop"]))},[d(T,{color:"success",size:"large",class:pe({"btn-success":!I.value,"btn-warning":I.value}),icon:G.value,variant:"plain"},null,8,["class","icon"])])]),default:u(()=>[C("div",Ke,[C("div",Je,[C("div",Qe,[(c(!0),b(X,null,me(D.value,n=>(c(),b("span",{key:n.key},[C("span",null,[n.checked?(c(),b("i",qe)):g("",!0),n.delayed?(c(),b("i",We)):g("",!0),e[5]||(e[5]=U()),C("b",null,[C("span",{class:pe([{"text-disabled":n.checked||n.delayed},"text-no-wrap"])},[D.value.length>1||D.value.length==1&&n.amount!=1||n.unit?(c(),b("span",Xe,f(i.$n(n.amount)),1)):g("",!0),n.unit?(c(),b("span",Ze,f(h(fe)(n.unit,n.amount)),1)):g("",!0)],2)])]),e[6]||(e[6]=C("br",null,null,-1))]))),128))]),C("div",et,[U(f(h(fe)(_.shoppingListFood.food,D.value.length>1||D.value.length==1&&D.value[0].amount>1?2:1))+" ",1),e[7]||(e[7]=C("br",null,null,-1)),r.value?(c(),b("span",tt,[C("small",at,f(r.value),1)])):g("",!0)])])])]),_:2},1032,["id"])):g("",!0),d(je,{modelValue:E.value,"onUpdate:modelValue":e[3]||(e[3]=n=>E.value=n),"shopping-list-food":v.shoppingListFood,"onUpdate:shoppingListFood":e[4]||(e[4]=n=>v.shoppingListFood=n)},null,8,["modelValue","shopping-list-food"])],64))}}),ot=le({__name:"ShoppingListEntryInput",props:{shoppingListRecipe:{type:{},required:!1},mealPlan:{type:{},required:!1},loading:{type:Boolean,required:!1}},setup(_){const N=_,v=S(""),p=S("fa-solid fa-plus"),E=S({});S("");const k=S(!1);function $(s,i,e){let n={amount:Math.max(s,1),unit:i,food:e};N.mealPlan&&(n.mealplanId=N.mealPlan.id),M().createObject(n,!0).finally(()=>{k.value=!1}),v.value="",p.value="fa-solid fa-check",setTimeout(()=>{p.value="fa-solid fa-plus"},1e3)}function I(){const s=new A;k.value=!0,s.apiIngredientFromStringCreate({ingredientString:{text:v.value}}).then(i=>{$(i.amount,i.unit,i.food)}).catch(i=>{F().addError(V.CREATE_ERROR,i),k.value=!1})}function G(s,i){return v.value=s.name,E.value={},i.close(),i.clearSearch(),I(),!1}function D(s,i,e){return E.value={},$(1,null,i),!1}function r(s){return k.value=!0,new A().apiFoodList({query:s,page:1,pageSize:25}).then(e=>e.results).catch(e=>{F().addError(V.FETCH_ERROR,e)}).finally(()=>{k.value=!1})}return(s,i)=>(c(),b(X,null,[h(w)().deviceSettings.shopping_input_autocomplete?g("",!0):(c(),L(Ie,{key:0,label:s.$t("Shopping_input_placeholder"),density:"compact",onKeyup:i[1]||(i[1]=Pe(e=>$(),["enter"])),modelValue:v.value,"onUpdate:modelValue":i[2]||(i[2]=e=>v.value=e),loading:N.loading,"hide-detail":"",s:""},{append:u(()=>[d(T,{density:"comfortable",onClick:i[0]||(i[0]=e=>$()),icon:p.value,color:"create"},null,8,["icon"])]),_:1},8,["label","modelValue","loading"])),h(w)().deviceSettings.shopping_input_autocomplete?(c(),L(h(Ne),{key:1,placeholder:s.$t("Shopping_input_placeholder"),class:"material-multiselect",modelValue:E.value,"onUpdate:modelValue":i[3]||(i[3]=e=>E.value=e),options:r,"on-create":G,"create-option":"",onSelect:D,valueProp:"id",label:"name",delay:300,searchable:!0,strict:!1,classes:{dropdown:"multiselect-dropdown z-3000",containerActive:""}},null,8,["placeholder","modelValue"])):g("",!0)],64))}});export{ot as _,nt as a,M as u};
diff --git a/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryInput.vue_vue_type_style_index_1_lang-DiO3wd3y.14ce9971b681.js.gz b/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryInput.vue_vue_type_style_index_1_lang-DiO3wd3y.14ce9971b681.js.gz
deleted file mode 100644
index c565269d..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryInput.vue_vue_type_style_index_1_lang-DiO3wd3y.14ce9971b681.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryInput.vue_vue_type_style_index_1_lang-DiO3wd3y.js b/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryInput.vue_vue_type_style_index_1_lang-DiO3wd3y.js
deleted file mode 100644
index 259f87db..00000000
--- a/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryInput.vue_vue_type_style_index_1_lang-DiO3wd3y.js
+++ /dev/null
@@ -1 +0,0 @@
-import{ds as _e,r as S,c as B,L as w,b2 as K,dt as Q,D as O,A,Q as F,R as V,b0 as ae,d as le,a as ye,aH as de,du as Se,h as L,f as c,w as u,g as d,M as De,e as g,aO as Re,O as Ce,i as C,ae as re,j as U,t as f,ag as Le,k as ce,V as q,z as T,l as h,b,G as x,x as we,F as X,p as me,y as ge,C as Te,E as J,ba as be,_ as $e,aP as Ue,aN as Fe,ad as Oe,a$ as Ae,n as pe,bQ as Ve,S as Ie,aR as Pe,dv as Ne}from"./main-BhFWIRV_.js";import{p as fe}from"./model_utils-CVQgSPL_.js";const xe="shopping_store",W="shopping_undefined_category",M=_e(xe,()=>{let _=S(new Map),N=S([]),v=S([]),p=S({countChecked:0,countUnchecked:0,countCheckedFood:0,countUncheckedFood:0,countUncheckedDelayed:0}),E=S(!1),k=S(!1),$=S(new Date("1970-01-01")),I=S(!0),G=S(0),D=S([]),r=S(-1),s=S([]);const i=B(()=>{p.value={countChecked:0,countUnchecked:0,countCheckedFood:0,countUncheckedFood:0,countUncheckedDelayed:0};let a={};a.categories=new Map,w().deviceSettings.shopping_selected_grouping===K.CATEGORY&&w().deviceSettings.shopping_selected_supermarket!=null&&w().deviceSettings.shopping_selected_supermarket.categoryToSupermarket.forEach(o=>{a.categories.set(o.category.name,{name:o.category.name,foods:new Map})});let t=[];_.value.forEach(o=>{a=ve(a,o)}),a.categories.forEach(o=>{let m={countChecked:0,countUnchecked:0,countCheckedFood:0,countUncheckedFood:0,countUncheckedDelayed:0};o.foods.forEach(R=>{R.entries.forEach(z=>{z.checked?m.countChecked++:Q(z)?m.countUncheckedDelayed++:m.countUnchecked++}),m.countCheckedFood++}),o.stats=m,p.value.countChecked+=m.countChecked,p.value.countUnchecked+=m.countUnchecked,p.value.countCheckedFood+=m.countCheckedFood,p.value.countUncheckedFood+=m.countUncheckedFood});let l=a.categories.get(W);return l!=null&&(t.push(l),a.categories.delete(W)),a.categories.forEach(o=>{t.push(o)}),t});function e(){let a=[];return i.value.forEach(t=>{t.foods.forEach(l=>{l.entries.forEach(o=>{a.push({amount:o.amount,unit:o.unit?.name??"",food:o.food?.name??""})})})}),a}function n(a){let t=[];return _.value.forEach(l=>{l.listRecipe&&l.listRecipeData.mealplan==a&&t.push({food:l.food,entries:new Map().set(l.id,l)})}),t}function P(){for(let a in s.value)if(s.value[a].status==="syncing_failed_before"||s.value[a].status==="waiting_failed_before")return!0;return!1}function Y(a){if(!E.value){E.value=!0,$.value=new Date;let t=new A,l={pageSize:50,page:1};a?l.mealplan=a:_.value=new Map,y(l),t.apiSupermarketCategoryList().then(o=>{N.value=o.results}).catch(o=>{F().addError(V.FETCH_ERROR,o)}),t.apiSupermarketList().then(o=>{v.value=o.results}).catch(o=>{F().addError(V.FETCH_ERROR,o)})}}function y(a){new A().apiShoppingListEntryList(a).then(l=>{l.results.forEach(o=>{_.value.set(o.id,o)}),l.next?(a.page=a.page+1,y(a)):(E.value=!1,k.value=!0)}).catch(l=>{E.value=!1,F().addError(V.FETCH_ERROR,l)})}function H(){!E.value&&I.value&&!P()&&(E.value=!0,new A().apiShoppingListEntryList({updatedAfter:$.value}).then(t=>{$.value=t.timestamp,t.results.forEach(l=>{_.value.set(l.id,l)}),E.value=!1}).catch(t=>{E.value=!1}))}function ie(a,t){return new A().apiShoppingListEntryCreate({shoppingListEntry:a}).then(o=>(_.value.set(o.id,o),t&&j("CREATE",[o]),o)).catch(o=>{F().addError(V.CREATE_ERROR,o)})}function ne(a){return new A().apiShoppingListEntryUpdate({id:a.id,shoppingListEntry:a}).then(l=>{_.value.set(l.id,l)}).catch(l=>{F().addError(V.UPDATE_ERROR,l)})}function oe(a,t){return new A().apiShoppingListEntryDestroy({id:a.id}).then(o=>{_.value.delete(a.id),t&&j("DESTROY",[a])}).catch(o=>{F().addError(V.DELETE_ERROR,o)})}function he(){let a=[];return _.value.forEach(t=>{t.listRecipe!=null&&a.findIndex(l=>l.id==t.listRecipe)==-1&&ae(t,w().deviceSettings)&&a.push(t.listRecipeData)}),a}function ve(a,t){let l=W,o=w().deviceSettings.shopping_selected_grouping;return o==K.CATEGORY&&t.food!=null&&t.food.supermarketCategory!=null?l=t.food?.supermarketCategory?.name:o==K.CREATED_BY?l=t.createdBy.displayName:o==K.RECIPE&&t.listRecipeData!=null&&t.listRecipeData.recipeData!=null&&(l=t.listRecipeData.recipeData.name,t.listRecipeData.mealPlanData!=null&&(l+=" - "+t.listRecipeData.mealPlanData.mealType.name+" - "+O.fromJSDate(t.listRecipeData.mealPlanData.fromDate).toLocaleString(O.DATE_SHORT))),!a.categories.has(l)&&!(o==K.CATEGORY&&w().deviceSettings.shopping_show_selected_supermarket_only)&&a.categories.set(l,{name:l,foods:new Map}),a.categories.has(l)&&(a.categories.get(l).foods.has(t.food.id)||a.categories.get(l).foods.set(t.food.id,{food:t.food,entries:new Map}),a.categories.get(l).foods.get(t.food.id).entries.set(t.id,t)),a}function Z(a,t,l){l&&j(t?"CHECKED":"UNCHECKED",a);let o=[];a.forEach(m=>{m.checked=t,o.push(m.id)}),s.value.push({ids:o,checked:t,status:"waiting"}),ee(5)}function Ee(){if(navigator.onLine||document.location.href.includes("localhost")){let a=new A,t=[];s.value.forEach((l,o)=>{l.status=l.status==="waiting"?"syncing":"syncing_failed_before";let m=a.apiShoppingListEntryBulkCreate({shoppingListEntryBulk:l},{}).then(R=>{l.ids.forEach(z=>{let te=_.value.get(z);te.updatedAt=R.timestamp,te.checked=R.checked,_.value.set(z,te)}),s.value.splice(o,1)}).catch(R=>{R.name==="FetchError"?l.status="waiting_failed_before":(s.value.splice(o,1),F().addError(V.UPDATE_ERROR,R))});t.push(m)}),Promise.allSettled(t).finally(()=>{s.value.length>0&&ee(500)})}else ee(5e3)}function ee(a){clearTimeout(r.value),r.value=window.setTimeout(()=>{Ee()},a)}function se(a,t,l){let o=w().userSettings.defaultDelay,m=new Date(Date.now()+o*(60*60*1e3));l&&j(t?"DELAY":"UNDELAY",a),a.forEach(R=>{R.delayUntil=t?m:new Date("1970-01-01"),ne(R)})}function ue(a,t,l){const o=new A;l&&j(t?"IGNORE":"UNIGNORE",a);let m=[];a.forEach(R=>{m.includes(R.food)||m.push(R.food)}),Z(a,t,!1),m.forEach(R=>{R.ignoreShopping=t,o.apiFoodUpdate({food:R,id:R.id}).catch(z=>{F().addError(V.UPDATE_ERROR,z)})})}function j(a,t){D.value.push({type:a,entries:t})}function ke(){let a=D.value.pop();if(a!==void 0){let t=a.type,l=a.entries;if(t==="CHECKED"||t==="UNCHECKED")Z(l,t==="UNCHECKED",!1);else if(t==="DELAY"||t==="UNDELAY")se(l,t==="UNDELAY",!1);else if(t==="CREATE")for(let o in l){let m=l[o];oe(m,!1)}else if(t==="DESTROY")for(let o in l){let m=l[o];ie(m,!1)}else(t==="IGNORE"||t==="UNIGNORE")&&ue(l,t==="UNIGNORE",!1)}}return{UNDEFINED_CATEGORY:W,entries:_,supermarkets:v,supermarketCategories:N,getEntriesByGroup:i,autoSyncTimeoutId:G,autoSyncHasFocus:I,autoSyncLastTimestamp:$,currentlyUpdating:E,initialized:k,getFlatEntries:e,hasFailedItems:P,itemCheckSyncQueue:s,undoStack:D,stats:p,refreshFromAPI:Y,autoSync:H,createObject:ie,deleteObject:oe,updateObject:ne,undoChange:ke,setEntriesCheckedState:Z,setFoodIgnoredState:ue,delayEntries:se,getAssociatedRecipes:he,getMealPlanEntries:n}}),Me={key:0},Be={key:1},He={class:"mt-2"},Ge={key:0},ze={key:1},Ye={key:0},je=le({__name:"ShoppingLineItemDialog",props:{modelValue:{},modelModifiers:{},shoppingListFood:{required:!0},shoppingListFoodModifiers:{}},emits:["update:modelValue","update:shoppingListFood"],setup(_){const{mobile:N}=ye(),v=de(_,"modelValue"),p=de(_,"shoppingListFood"),E=B(()=>{let r=[];return p.value.entries.forEach(s=>{r.push(s)}),r}),k=B(()=>Se(p.value));function $(r){const s=new A;p.value.food.supermarketCategory=r,s.apiFoodUpdate({id:p.value.food.id,food:p.value.food}).then(i=>{F().addPreparedMessage(Oe.UPDATE_SUCCESS)}).catch(i=>{F().addError(V.UPDATE_ERROR,i)})}function I(){M().createObject({food:p.value?.food,unit:null,amount:1},!1).then(r=>{r!=null&&p.value?.entries.set(r.id,r)})}function G(){v.value=!1,p.value.entries.forEach(r=>{M().deleteObject(r,!0)})}function D(r){new A().apiShoppingListEntryPartialUpdate({id:r.id,patchedShoppingListEntry:{amount:r.amount}}).then(i=>{}).catch(i=>{F().addError(V.UPDATE_ERROR,i)})}return(r,s)=>(c(),L(Fe,{fullscreen:h(N),modelValue:v.value,"onUpdate:modelValue":s[6]||(s[6]=i=>v.value=i),"max-width":"500px"},{default:u(()=>[d(De,null,{default:u(()=>[d(Re,{title:p.value.food.name,modelValue:v.value,"onUpdate:modelValue":s[0]||(s[0]=i=>v.value=i)},null,8,["title","modelValue"]),d(Ce,{class:"pt-0 pr-4 pl-4"},{default:u(()=>[d(re,null,{default:u(()=>[U(f(r.$t("Choose_Category")),1)]),_:1}),d(Le,{model:"SupermarketCategory","onUpdate:modelValue":$,"allow-create":""}),d(ce,null,{default:u(()=>[d(q,{class:"pr-0"},{default:u(()=>[d(T,{height:"80px",color:"info",density:"compact",size:"small",block:"",stacked:"",onClick:s[1]||(s[1]=i=>{h(M)().delayEntries(E.value,!k.value,!0),v.value=!1})},{default:u(()=>[s[7]||(s[7]=C("i",{class:"fa-solid fa-clock-rotate-left fa-2x mb-2"},null,-1)),k.value?g("",!0):(c(),b("span",Me,f(r.$t("ShopLater")),1)),k.value?(c(),b("span",Be,f(r.$t("ShopNow")),1)):g("",!0)]),_:1,__:[7]})]),_:1}),d(q,null,{default:u(()=>[d(T,{height:"80px",color:"secondary",density:"compact",size:"small",block:"",stacked:"",onClick:s[2]||(s[2]=i=>{h(M)().setFoodIgnoredState(E.value,!0,!0),v.value=!1})},{default:u(()=>[s[8]||(s[8]=C("i",{class:"fa-solid fa-eye-slash fa-2x mb-2"},null,-1)),U(" "+f(r.$t("Ignore_Shopping")),1)]),_:1,__:[8]})]),_:1})]),_:1}),d(ce,null,{default:u(()=>[d(q,{class:"pr-0 pt-0"},{default:u(()=>[d(T,{height:"80px",color:"primary",density:"compact",size:"small",to:{name:"ModelEditPage",params:{model:"Food",id:p.value?.food.id}},target:"_blank",block:"",stacked:""},{default:u(()=>[s[9]||(s[9]=C("i",{class:"fa-solid fa-carrot fa-2x mb-2"},null,-1)),U(" "+f(r.$t("Edit")),1)]),_:1,__:[9]},8,["to"])]),_:1}),d(q,{class:"pt-0"},{default:u(()=>[d(T,{height:"80px",color:"error",density:"compact",size:"small",onClick:s[3]||(s[3]=i=>G()),block:"",stacked:""},{default:u(()=>[s[10]||(s[10]=C("i",{class:"fa-solid fa-trash fa-2x mb-2"},null,-1)),U(" "+f(r.$t("Delete_All")),1)]),_:1,__:[10]})]),_:1})]),_:1}),C("div",He,[d(re,{class:"mt-3"},{default:u(()=>[U(f(r.$t("Entries")),1)]),_:1}),d(T,{color:"success",class:"float-right",onClick:s[4]||(s[4]=i=>I())},{default:u(()=>[d(x,{icon:"$create"})]),_:1})]),d(we,{density:"compact"},{default:u(()=>[(c(!0),b(X,null,me(p.value.entries,([i,e])=>(c(),L(ge,{key:e.id,border:"",class:"mt-1"},{default:u(()=>[d(Te,null,{default:u(()=>[C("b",null,[e.amount!=0?(c(),b("span",Ge,f(r.$n(e.amount))+"Â ",1)):g("",!0),e.unit?(c(),b("span",ze,f(e.unit.name)+"Â ",1)):g("",!0)]),e.food?(c(),b("span",Ye,f(e.food.name),1)):g("",!0)]),_:2},1024),e.completedAt?(c(),L(J,{key:0},{default:u(()=>[d(x,{icon:"fa-solid fa-check",size:"small",color:"success"}),U(" "+f(r.$t("Completed"))+" "+f(h(O).fromJSDate(e.completedAt).toLocaleString(h(O).DATETIME_SHORT)),1)]),_:2},1024)):g("",!0),e.listRecipe&&e.listRecipeData.recipe?(c(),L(J,{key:1},{default:u(()=>[U(f(e.listRecipeData.servings)+" x "+f(e.listRecipeData.recipeData.name),1)]),_:2},1024)):g("",!0),e.listRecipe&&e.listRecipeData.mealplan?(c(),L(J,{key:2},{default:u(()=>[U(f(e.listRecipeData.mealPlanData.mealType.name)+" "+f(h(O).fromJSDate(e.listRecipeData.mealPlanData.fromDate).toLocaleString(h(O).DATE_SHORT)),1)]),_:2},1024)):g("",!0),d(J,null,{default:u(()=>[U(f(e.createdBy.displayName)+" - "+f(h(O).fromJSDate(e.createdAt).toLocaleString(h(O).DATETIME_SHORT)),1)]),_:2},1024),h(Q)(e)?(c(),L(J,{key:3,class:"text-info font-weight-bold"},{default:u(()=>[U(f(r.$t("PostponedUntil"))+" "+f(h(O).fromJSDate(e.delayUntil).toLocaleString(h(O).DATETIME_SHORT)),1)]),_:2},1024)):g("",!0),d(be,{divided:"",border:""},{default:u(()=>[e.ingredient?g("",!0):(c(),L(T,{key:0,icon:"",onClick:n=>{e.amount=e.amount/2,D(e)}},{default:u(()=>[d(x,{icon:"fa-solid fa-divide"})]),_:2},1032,["onClick"])),e.ingredient?g("",!0):(c(),L(T,{key:1,icon:"",onClick:n=>{e.amount--,D(e)}},{default:u(()=>[d(x,{icon:"fa-solid fa-minus"})]),_:2},1032,["onClick"])),e.ingredient?g("",!0):(c(),L(T,{key:2,icon:"",onClick:n=>{e.amount++,D(e)}},{default:u(()=>[d(x,{icon:"fa-solid fa-plus"})]),_:2},1032,["onClick"])),e.ingredient?g("",!0):(c(),L(T,{key:3,icon:"",onClick:n=>{e.amount=e.amount*2,D(e)}},{default:u(()=>[d(x,{icon:"fa-solid fa-times"})]),_:2},1032,["onClick"])),e.ingredient?g("",!0):(c(),L(T,{key:4,color:"edit",icon:"$edit"},{default:u(()=>[d(x,{icon:"$edit"}),d($e,{model:"ShoppingListEntry",item:e,onDelete:n=>{h(M)().entries.delete(e.id),p.value.entries.delete(e.id)},onSave:n=>{h(M)().entries.set(e.id,n),p.value.entries.set(e.id,n)}},null,8,["item","onDelete","onSave"])]),_:2},1024)),e.listRecipe&&e.listRecipeData.recipe&&e.ingredient?(c(),L(T,{key:5,color:"edit",icon:"$recipes",to:{name:"RecipeViewPage",params:{id:e.listRecipeData.recipe}}},{default:u(()=>[d(x,{icon:"$recipes"})]),_:2},1032,["to"])):g("",!0),d(T,{icon:"",onClick:n=>{h(M)().deleteObject(e,!0),p.value.entries.delete(e.id)},color:"delete"},{default:u(()=>[d(x,{icon:"$delete"})]),_:2},1032,["onClick"])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1}),h(N)?(c(),L(Ue,{key:0},{default:u(()=>[d(T,{onClick:s[5]||(s[5]=i=>v.value=!1)},{default:u(()=>[U(f(r.$t("Close")),1)]),_:1})]),_:1})):g("",!0)]),_:1})]),_:1},8,["fullscreen","modelValue"]))}}),Ke={class:"flex-grow-1 p-2"},Je={class:"d-flex"},Qe={class:"d-flex flex-column pr-2 pl-4"},qe={key:0,class:"fas fa-check text-success fa-fw"},We={key:1,class:"fas fa-clock-rotate-left text-info fa-fw"},Xe={key:0},Ze={key:1,class:"ms-1"},et={class:"d-flex flex-column flex-grow-1 align-self-center"},tt={key:0},at={class:"text-disabled"},nt=le({__name:"ShoppingLineItem",props:{shoppingListFood:{type:{},required:!0},hideInfoRow:{type:Boolean,default:!1}},emits:["clicked"],setup(_,{emit:N}){const v=_,p=S(w().userSettings.leftHanded?"prepend":"append"),E=S(!1),k=B(()=>Array.from(v.shoppingListFood.entries.values())),$=B(()=>{let i="id_sli_";for(let e in k.value)i+=e+"_";return i}),I=B(()=>{for(let i in k.value)if(!k.value[i].checked)return!1;return!0}),G=B(()=>I.value?"fa-solid fa-plus":"fa-solid fa-check"),D=B(()=>{let i=[];for(let e in k.value){let n=k.value[e];if(ae(n,w().deviceSettings)){let P=-1;if(n.unit!==void 0&&n.unit!==null&&(P=n.unit.id),n.amount>0){let Y=!1;i.forEach(y=>{(y.unit==null&&n.unit==null||y.unit!=null&&y.unit.id==P)&&y.checked==n.checked&&y.delayed==Q(n)&&(y.amount+=n.amount,Y=!0)}),Y||i.push({key:`${P}_${n.checked}_${Q(n)}`,amount:n.amount,unit:n.unit,checked:n.checked,delayed:Q(n)})}}}return i}),r=B(()=>{if(v.hideInfoRow)return"";let i=[],e=[],n=[],P=[];for(let Y in k.value){let y=k.value[Y];if(ae(y,w().deviceSettings)&&(e.indexOf(y.createdBy.displayName)===-1&&e.push(y.createdBy.displayName),y.listRecipe!=null)){if(y.listRecipeData.recipe!=null){let H=y.listRecipeData.recipeData.name;n.indexOf(H)===-1&&n.push(H.substring(0,14)+(H.length>14?"..":""))}if(y.listRecipeData.mealplan!=null){let H=(y.listRecipeData.mealPlanData.mealType.name.substring(0,8)||"")+(y.listRecipeData.mealPlanData.mealType.name.length>8?"..":"")+" ("+O.fromJSDate(y.listRecipeData.mealPlanData.fromDate).toLocaleString(O.DATE_SHORT)+")";P.indexOf(H)===-1&&P.push(H)}}}return w().deviceSettings.shopping_item_info_created_by&&e.length>0&&i.push(e.join(", ")),w().deviceSettings.shopping_item_info_recipe&&n.length>0&&i.push(n.join(", ")),w().deviceSettings.shopping_item_info_mealplan&&P.length>0&&i.push(P.join(", ")),i.join(" - ")});function s(){}return(i,e)=>(c(),b(X,null,[h(Ae)(v.shoppingListFood,h(w)().deviceSettings)?(c(),L(ge,{key:0,class:"swipe-container border-t-sm mt-0 mb-0 pt-0 pb-0 pe-0 pa-0",id:$.value,onTouchend:e[1]||(e[1]=n=>void 0),onClick:e[2]||(e[2]=n=>{E.value=!0})},{[p.value]:u(()=>[C("div",{class:"ps-3 pe-3",onClick:e[0]||(e[0]=Ve(n=>{h(M)().setEntriesCheckedState(k.value,!I.value,!0)},["stop"]))},[d(T,{color:"success",size:"large",class:pe({"btn-success":!I.value,"btn-warning":I.value}),icon:G.value,variant:"plain"},null,8,["class","icon"])])]),default:u(()=>[C("div",Ke,[C("div",Je,[C("div",Qe,[(c(!0),b(X,null,me(D.value,n=>(c(),b("span",{key:n.key},[C("span",null,[n.checked?(c(),b("i",qe)):g("",!0),n.delayed?(c(),b("i",We)):g("",!0),e[5]||(e[5]=U()),C("b",null,[C("span",{class:pe([{"text-disabled":n.checked||n.delayed},"text-no-wrap"])},[D.value.length>1||D.value.length==1&&n.amount!=1||n.unit?(c(),b("span",Xe,f(i.$n(n.amount)),1)):g("",!0),n.unit?(c(),b("span",Ze,f(h(fe)(n.unit,n.amount)),1)):g("",!0)],2)])]),e[6]||(e[6]=C("br",null,null,-1))]))),128))]),C("div",et,[U(f(h(fe)(_.shoppingListFood.food,D.value.length>1||D.value.length==1&&D.value[0].amount>1?2:1))+" ",1),e[7]||(e[7]=C("br",null,null,-1)),r.value?(c(),b("span",tt,[C("small",at,f(r.value),1)])):g("",!0)])])])]),_:2},1032,["id"])):g("",!0),d(je,{modelValue:E.value,"onUpdate:modelValue":e[3]||(e[3]=n=>E.value=n),"shopping-list-food":v.shoppingListFood,"onUpdate:shoppingListFood":e[4]||(e[4]=n=>v.shoppingListFood=n)},null,8,["modelValue","shopping-list-food"])],64))}}),ot=le({__name:"ShoppingListEntryInput",props:{shoppingListRecipe:{type:{},required:!1},mealPlan:{type:{},required:!1},loading:{type:Boolean,required:!1}},setup(_){const N=_,v=S(""),p=S("fa-solid fa-plus"),E=S({});S("");const k=S(!1);function $(s,i,e){let n={amount:Math.max(s,1),unit:i,food:e};N.mealPlan&&(n.mealplanId=N.mealPlan.id),M().createObject(n,!0).finally(()=>{k.value=!1}),v.value="",p.value="fa-solid fa-check",setTimeout(()=>{p.value="fa-solid fa-plus"},1e3)}function I(){const s=new A;k.value=!0,s.apiIngredientFromStringCreate({ingredientString:{text:v.value}}).then(i=>{$(i.amount,i.unit,i.food)}).catch(i=>{F().addError(V.CREATE_ERROR,i),k.value=!1})}function G(s,i){return v.value=s.name,E.value={},i.close(),i.clearSearch(),I(),!1}function D(s,i,e){return E.value={},$(1,null,i),!1}function r(s){return k.value=!0,new A().apiFoodList({query:s,page:1,pageSize:25}).then(e=>e.results).catch(e=>{F().addError(V.FETCH_ERROR,e)}).finally(()=>{k.value=!1})}return(s,i)=>(c(),b(X,null,[h(w)().deviceSettings.shopping_input_autocomplete?g("",!0):(c(),L(Ie,{key:0,label:s.$t("Shopping_input_placeholder"),density:"compact",onKeyup:i[1]||(i[1]=Pe(e=>$(),["enter"])),modelValue:v.value,"onUpdate:modelValue":i[2]||(i[2]=e=>v.value=e),loading:N.loading,"hide-detail":"",s:""},{append:u(()=>[d(T,{density:"comfortable",onClick:i[0]||(i[0]=e=>$()),icon:p.value,color:"create"},null,8,["icon"])]),_:1},8,["label","modelValue","loading"])),h(w)().deviceSettings.shopping_input_autocomplete?(c(),L(h(Ne),{key:1,placeholder:s.$t("Shopping_input_placeholder"),class:"material-multiselect",modelValue:E.value,"onUpdate:modelValue":i[3]||(i[3]=e=>E.value=e),options:r,"on-create":G,"create-option":"",onSelect:D,valueProp:"id",label:"name",delay:300,searchable:!0,strict:!1,classes:{dropdown:"multiselect-dropdown z-3000",containerActive:""}},null,8,["placeholder","modelValue"])):g("",!0)],64))}});export{ot as _,nt as a,M as u};
diff --git a/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryInput.vue_vue_type_style_index_1_lang-DiO3wd3y.js.gz b/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryInput.vue_vue_type_style_index_1_lang-DiO3wd3y.js.gz
deleted file mode 100644
index c565269d..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/ShoppingListEntryInput.vue_vue_type_style_index_1_lang-DiO3wd3y.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/ShoppingListPage-B_cxskGt.e39bd0908ae5.js b/config/tandoor/staticfiles/vue3/assets/ShoppingListPage-B_cxskGt.e39bd0908ae5.js
deleted file mode 100644
index 14d27f2a..00000000
--- a/config/tandoor/staticfiles/vue3/assets/ShoppingListPage-B_cxskGt.e39bd0908ae5.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import{d as q,u as te,aZ as ne,aH as ie,r as O,c as Y,L as i,a_ as ae,a$ as se,b0 as oe,h as f,aN as ue,w as a,g as l,M as A,aO as de,O as L,k as C,V as y,b1 as re,z as S,i as g,S as J,l as n,aP as pe,j as r,t as d,f as u,b2 as K,o as me,A as F,b3 as fe,b4 as _e,Q as T,R as H,b as V,e as c,n as ge,H as ve,x as U,y as _,B as Z,T as ce,ag as X,a8 as j,av as Se,q as Q,K as W,b5 as Ve,F as b,p as D,aa as ye,G as x,W as be,N as M,m as $e,ai as ke,D as ee,_ as he,ad as le}from"./main-BhFWIRV_.js";import{u as o,_ as Ce,a as Ee}from"./ShoppingListEntryInput.vue_vue_type_style_index_1_lang-DiO3wd3y.js";import{_ as Ue}from"./NumberScalerDialog.vue_vue_type_script_setup_true_lang-BKqLc88N.js";import{_ as we}from"./SupermarketEditor.vue_vue_type_script_setup_true_lang-DaKxST5A.js";import{_ as De}from"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import{_ as Re}from"./BtnCopy.vue_vue_type_script_setup_true_lang-B_1A58TG.js";import{V as Te}from"./VTextarea-Dyu7dPGe.js";import{V as B,_ as Ae}from"./AddToShoppingDialog.vue_vue_type_script_setup_true_lang-ByrmCw9F.js";import{V as z,a as Le}from"./VTabs-BQFRhgOd.js";import{V as h}from"./VSwitch-BzI8Cngm.js";import"./model_utils-CVQgSPL_.js";import"./useModelEditorFunctions-Du2kfr61.js";import"./VTooltip-CP00KBBq.js";import"./number_utils-1sJWKMUK.js";const Ie=q({__name:"ShoppingExportDialog",props:{modelValue:{type:Boolean},modelModifiers:{}},emits:["update:modelValue"],setup(N){const{t:v}=te(),{copy:E}=ne(),$=ie(N,"modelValue"),m=O("md_list"),k=Y(()=>i().userSettings.csvDelim),w=Y(()=>{let e=[];return e.push(I()),o().getEntriesByGroup.forEach(t=>{ae(t)&&(t.name===o().UNDEFINED_CATEGORY?e.push(P(v("NoCategory"))):e.push(P(t.name)),t.foods.forEach(p=>{se(p,i().deviceSettings)&&p.entries.forEach(R=>{oe(R,i().deviceSettings)&&e.push(G(R))})}))}),m.value=="md_list"&&e.splice(0,2),e.join(`
-`)});function I(){return m.value=="md_list"?"":m.value=="md_table"?`|${v("Amount")}|${v("Unit")}|${v("Food")}|
-|-|-|-|`:m.value=="csv"?`${v("Amount")} ${k.value} ${v("Unit")} ${k.value} ${v("Food")}`:""}function P(e){return m.value=="md_list"?`
-${e}`:m.value=="md_table"?`|${e}|`:m.value=="csv"?`${e}${k.value}${k.value}`:""}function G(e){return m.value=="md_list"?`${i().userSettings.csvPrefix} ${e.amount} ${e.unit?.name} ${e.food?.name}`:m.value=="md_table"?`|${e.amount}|${e.unit?.name}|${e.food?.name}|`:m.value=="csv"?`${e.amount}${k.value}${e.unit?.name}${k.value}${e.food?.name}`:""}function s(){let e=encodeURI("data:text/text;charset=utf-8,"+w.value),t=document.createElement("a");t.setAttribute("href",e),m.value=="md_list"||m.value=="md_table"?t.setAttribute("download",`${v("Shopping_list")}.md`):m.value=="csv"&&t.setAttribute("download",`${v("Shopping_list")}.csv`),t.click()}return(e,t)=>(u(),f(ue,{modelValue:$.value,"onUpdate:modelValue":t[6]||(t[6]=p=>$.value=p),activator:"parent",style:{"max-width":"75vw"}},{default:a(()=>[l(A,null,{default:a(()=>[l(de,{title:e.$t("Export"),modelValue:$.value,"onUpdate:modelValue":t[0]||(t[0]=p=>$.value=p)},null,8,["title","modelValue"]),l(L,null,{default:a(()=>[l(C,null,{default:a(()=>[l(y,null,{default:a(()=>[l(re,{border:"",divided:"",modelValue:m.value,"onUpdate:modelValue":t[1]||(t[1]=p=>m.value=p)},{default:a(()=>[l(S,{value:"md_list"},{default:a(()=>t[7]||(t[7]=[g("i",{class:"fa-solid fa-list-check"},null,-1)])),_:1,__:[7]}),l(S,{value:"md_table"},{default:a(()=>t[8]||(t[8]=[g("i",{class:"fa-solid fa-table-cells"},null,-1)])),_:1,__:[8]}),l(S,{value:"csv"},{default:a(()=>t[9]||(t[9]=[g("i",{class:"fa-solid fa-file-csv"},null,-1)])),_:1,__:[9]})]),_:1},8,["modelValue"])]),_:1})]),_:1}),l(C,null,{default:a(()=>[l(y,null,{default:a(()=>[l(J,{label:e.$t("csv_delim_label"),hint:e.$t("csv_delim_help"),"persistent-hint":"",modelValue:n(i)().userSettings.csvDelim,"onUpdate:modelValue":t[2]||(t[2]=p=>n(i)().userSettings.csvDelim=p)},null,8,["label","hint","modelValue"])]),_:1}),l(y,null,{default:a(()=>[l(J,{label:e.$t("csv_prefix_label"),hint:e.$t("csv_prefix_help"),"persistent-hint":"",modelValue:n(i)().userSettings.csvPrefix,"onUpdate:modelValue":t[3]||(t[3]=p=>n(i)().userSettings.csvPrefix=p)},null,8,["label","hint","modelValue"])]),_:1})]),_:1}),l(C,null,{default:a(()=>[l(y,null,{default:a(()=>[l(Te,{"model-value":w.value,"auto-grow":"","max-rows":"25",readonly:""},null,8,["model-value"])]),_:1})]),_:1}),l(Re,{class:"float-right","copy-value":w.value},null,8,["copy-value"])]),_:1}),l(pe,null,{default:a(()=>[l(S,{onClick:t[4]||(t[4]=p=>s()),"prepend-icon":"fa-solid fa-download"},{default:a(()=>[r(d(e.$t("Download")),1)]),_:1}),l(S,{onClick:t[5]||(t[5]=p=>n(E)(w.value)),"prepend-icon":"$copy"},{default:a(()=>[r(d(e.$t("Copy")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]))}}),Pe={class:"d-none d-md-block ms-1"},Fe={class:"d-none d-md-block ms-1"},Me={class:"d-none d-md-block ms-1"},Be={class:"ms-2"},Oe={key:0},Ne={key:1},Ge=q({__name:"ShoppingListView",setup(N){const{t:v}=te(),E=O("shopping"),$=O([]),m=O(void 0),k=Y(()=>{let s=[];return Object.values(K).forEach(e=>{s.push({title:v(e),value:e})}),s});me(()=>{addEventListener("visibilitychange",s=>{o().autoSyncHasFocus=document.visibilityState==="visible"}),o().refreshFromAPI(),I(),i().deviceSettings.shopping_selected_supermarket!=null&&new F().apiSupermarketRetrieve({id:i().deviceSettings.shopping_selected_supermarket.id}).then(s=>{i().deviceSettings.shopping_selected_supermarket=s}).catch(s=>{s instanceof fe&&s.response.status==404&&(i().deviceSettings.shopping_selected_supermarket=null)}),G()});function w(s,e){let t=new F;o().currentlyUpdating=!0,s.servings=e,t.apiShoppingListRecipeUpdate({id:s.id,shoppingListRecipe:s}).then(p=>{o().currentlyUpdating=!1,o().refreshFromAPI(),T().addPreparedMessage(le.UPDATE_SUCCESS)}).catch(p=>{T().addError(H.UPDATE_ERROR,p),o().currentlyUpdating=!1})}function I(){clearTimeout(o().autoSyncTimeoutId);let s=Math.max(i().userSettings.shoppingAutoSync,1)*1e3;o().autoSyncTimeoutId=setTimeout(()=>{i().userSettings.shoppingAutoSync>0&&o().autoSync(),I()},s)}_e(()=>{clearTimeout(o().autoSyncTimeoutId)});function P(s){new F().apiShoppingListRecipeDestroy({id:s.id}).then(t=>{o().refreshFromAPI(),T().addPreparedMessage(le.DELETE_SUCCESS)}).catch(t=>{T().addError(H.DELETE_ERROR,t)})}function G(){new F().apiSupermarketList().then(e=>{$.value=e.results}).catch(e=>{T().addError(H.FETCH_ERROR,e)})}return(s,e)=>(u(),V(b,null,[l(Le,{modelValue:E.value,"onUpdate:modelValue":e[12]||(e[12]=t=>E.value=t)},{default:a(()=>[l(z,{value:"shopping"},{default:a(()=>[g("i",{class:ge(["fas fa-fw",{"fa-circle-notch fa-spin":n(o)().currentlyUpdating,"fa-shopping-cart ":!n(o)().currentlyUpdating}])},null,2),e[19]||(e[19]=r()),g("span",Pe,d(s.$t("Shopping_list"))+" ("+d(n(o)().stats.countUnchecked)+")",1)]),_:1,__:[19]}),l(z,{value:"recipes"},{default:a(()=>[e[20]||(e[20]=g("i",{class:"fas fa-book fa-fw"},null,-1)),e[21]||(e[21]=r()),g("span",Fe,d(s.$t("Recipes"))+" ("+d(n(o)().getAssociatedRecipes().length)+")",1)]),_:1,__:[20,21]}),n(i)().deviceSettings.shopping_selected_supermarket!=null?(u(),f(z,{key:0,value:"selected_supermarket"},{default:a(()=>[e[22]||(e[22]=g("i",{class:"fa-solid fa-store fa-fw"},null,-1)),e[23]||(e[23]=r()),g("span",Me,d(n(i)().deviceSettings.shopping_selected_supermarket.name),1)]),_:1,__:[22,23]})):c("",!0),l(ve,{"close-on-content-click":!1},{activator:a(({props:t})=>[l(S,Se({class:"me-4 float-right",height:"100%",rounded:"0",variant:"plain"},t),{default:a(()=>e[24]||(e[24]=[g("i",{class:"fa-solid fa-sliders"},null,-1)])),_:2,__:[24]},1040)]),default:a(()=>[l(U,{density:"compact"},{default:a(()=>[l(_,{onClick:e[0]||(e[0]=t=>n(o)().undoChange()),"prepend-icon":"fa-solid fa-arrow-rotate-left"},{default:a(()=>[r(d(s.$t("Undo")),1)]),_:1}),l(Z),l(_,null,{default:a(()=>[l(ce,{"hide-details":"",items:k.value,modelValue:n(i)().deviceSettings.shopping_selected_grouping,"onUpdate:modelValue":e[1]||(e[1]=t=>n(i)().deviceSettings.shopping_selected_grouping=t),label:s.$t("GroupBy")},null,8,["items","modelValue","label"])]),_:1}),n(i)().deviceSettings.shopping_selected_grouping==n(K).CATEGORY?(u(),f(_,{key:0},{default:a(()=>[l(h,{color:"primary","hide-details":"",label:s.$t("SupermarketCategoriesOnly"),modelValue:n(i)().deviceSettings.shopping_show_selected_supermarket_only,"onUpdate:modelValue":e[2]||(e[2]=t=>n(i)().deviceSettings.shopping_show_selected_supermarket_only=t)},null,8,["label","modelValue"])]),_:1})):c("",!0),l(_,null,{default:a(()=>[l(X,{model:"Supermarket","append-to-body":"",modelValue:n(i)().deviceSettings.shopping_selected_supermarket,"onUpdate:modelValue":e[3]||(e[3]=t=>n(i)().deviceSettings.shopping_selected_supermarket=t)},null,8,["modelValue"])]),_:1}),l(_,null,{default:a(()=>[l(h,{color:"primary","hide-details":"",label:s.$t("ShowDelayed"),modelValue:n(i)().deviceSettings.shopping_show_delayed_entries,"onUpdate:modelValue":e[4]||(e[4]=t=>n(i)().deviceSettings.shopping_show_delayed_entries=t)},null,8,["label","modelValue"])]),_:1}),l(_,null,{default:a(()=>[l(h,{color:"primary","hide-details":"",label:s.$t("ShowRecentlyCompleted"),modelValue:n(i)().deviceSettings.shopping_show_checked_entries,"onUpdate:modelValue":e[5]||(e[5]=t=>n(i)().deviceSettings.shopping_show_checked_entries=t)},null,8,["label","modelValue"])]),_:1}),l(j,null,{default:a(()=>[r(d(s.$t("Information")),1)]),_:1}),l(_,null,{default:a(()=>[l(h,{color:"primary","hide-details":"",label:s.$t("Recipe"),modelValue:n(i)().deviceSettings.shopping_item_info_recipe,"onUpdate:modelValue":e[6]||(e[6]=t=>n(i)().deviceSettings.shopping_item_info_recipe=t)},null,8,["label","modelValue"])]),_:1}),l(_,null,{default:a(()=>[l(h,{color:"primary","hide-details":"",label:s.$t("Meal_Plan"),modelValue:n(i)().deviceSettings.shopping_item_info_mealplan,"onUpdate:modelValue":e[7]||(e[7]=t=>n(i)().deviceSettings.shopping_item_info_mealplan=t)},null,8,["label","modelValue"])]),_:1}),l(_,null,{default:a(()=>[l(h,{color:"primary","hide-details":"",label:s.$t("CreatedBy"),modelValue:n(i)().deviceSettings.shopping_item_info_created_by,"onUpdate:modelValue":e[8]||(e[8]=t=>n(i)().deviceSettings.shopping_item_info_created_by=t)},null,8,["label","modelValue"])]),_:1}),l(_,null,{default:a(()=>[l(h,{color:"primary","hide-details":"",label:"New Input",modelValue:n(i)().deviceSettings.shopping_input_autocomplete,"onUpdate:modelValue":e[9]||(e[9]=t=>n(i)().deviceSettings.shopping_input_autocomplete=t)},null,8,["modelValue"])]),_:1}),n(i)().serverSettings.debug?(u(),f(_,{key:1},{default:a(()=>[l(h,{color:"primary","hide-details":"",label:"Show Debug Info",modelValue:n(i)().deviceSettings.shopping_show_debug,"onUpdate:modelValue":e[10]||(e[10]=t=>n(i)().deviceSettings.shopping_show_debug=t)},null,8,["modelValue"])]),_:1})):c("",!0)]),_:1})]),_:1}),l(S,{height:"100%",rounded:"0",variant:"plain"},{default:a(()=>[e[25]||(e[25]=g("i",{class:"fa-solid fa-download"},null,-1)),l(Ie)]),_:1,__:[25]}),l(S,{height:"100%",rounded:"0",variant:"plain",onClick:e[11]||(e[11]=t=>n(o)().undoChange())},{default:a(()=>e[26]||(e[26]=[g("i",{class:"fa-solid fa-arrow-rotate-left"},null,-1)])),_:1,__:[26]})]),_:1},8,["modelValue"]),l($e,{modelValue:E.value,"onUpdate:modelValue":e[18]||(e[18]=t=>E.value=t)},{default:a(()=>[l(Q,{value:"shopping"},{default:a(()=>[l(W,null,{default:a(()=>[l(C,{class:"pa-0",dense:""},{default:a(()=>[l(y,{class:"pa-0"},{default:a(()=>[$.value.length>0?(u(),f(Ve,{key:0,modelValue:n(i)().deviceSettings.shopping_selected_supermarket,"onUpdate:modelValue":e[13]||(e[13]=t=>n(i)().deviceSettings.shopping_selected_supermarket=t)},{default:a(()=>[(u(!0),V(b,null,D($.value,t=>(u(),f(ke,{value:t,key:t.id,label:"",density:"compact",variant:"outlined",color:"primary"},{default:a(()=>[r(d(t.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue"])):c("",!0)]),_:1})]),_:1}),l(C,null,{default:a(()=>[l(y,null,{default:a(()=>[n(o)().hasFailedItems()?(u(),f(ye,{key:0,color:"warning",class:"mb-2"},{prepend:a(()=>[l(x,{icon:"fa-solid fa-link-slash"})]),append:a(()=>[r(d(n(o)().itemCheckSyncQueue.length),1)]),default:a(()=>[r(" "+d(s.$t("ShoppingBackgroundSyncWarning"))+" ",1)]),_:1})):c("",!0),l(Ce),n(o)().initialized?(u(),f(U,{key:2,class:"mt-3",density:"compact"},{default:a(()=>[(u(!0),V(b,null,D(n(o)().getEntriesByGroup,t=>(u(),V(b,{key:t.name},[n(ae)(t)?(u(),V(b,{key:0},[t.name===n(o)().UNDEFINED_CATEGORY?(u(),f(j,{key:0},{default:a(()=>[g("i",null,d(s.$t("NoCategory")),1)]),_:1})):(u(),f(j,{key:1},{default:a(()=>[r(d(t.name),1)]),_:2},1024)),l(Z),(u(!0),V(b,null,D(t.foods,([p,R])=>(u(),f(Ee,{key:R.food.id,"shopping-list-food":R},null,8,["shopping-list-food"]))),128))],64)):c("",!0)],64))),128))]),_:1})):(u(),f(U,{key:1,class:"mt-3",density:"compact"},{default:a(()=>[l(B,{type:"list-item"}),l(B,{type:"list-item"}),l(B,{type:"list-item"}),l(B,{type:"list-item"})]),_:1})),l(be,{style:{"margin-top":"120px"}})]),_:1})]),_:1}),n(i)().deviceSettings.shopping_show_debug?(u(),f(C,{key:0},{default:a(()=>[l(y,{cols:"12",md:"4"},{default:a(()=>[l(A,null,{default:a(()=>[l(M,null,{default:a(()=>e[27]||(e[27]=[r("Auto Sync Debug")])),_:1,__:[27]}),l(S,{onClick:e[14]||(e[14]=t=>n(o)().autoSync())},{default:a(()=>e[28]||(e[28]=[r("Run Sync")])),_:1,__:[28]}),l(L,null,{default:a(()=>[l(U,null,{default:a(()=>[l(_,null,{default:a(()=>[r("currentlyUpdating: "+d(n(o)().currentlyUpdating),1)]),_:1}),l(_,null,{default:a(()=>[r("hasFocus: "+d(n(o)().autoSyncHasFocus),1)]),_:1}),l(_,null,{default:a(()=>[r("autoSyncTimeoutId: "+d(n(o)().autoSyncTimeoutId),1)]),_:1}),l(_,null,{default:a(()=>[r("autoSyncLastTimestamp: "+d(n(o)().autoSyncLastTimestamp),1)]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),l(y,{cols:"12",md:"4"},{default:a(()=>[l(A,null,{default:a(()=>[l(M,null,{default:a(()=>e[29]||(e[29]=[r("Sync Queue Debug")])),_:1,__:[29]}),l(L,null,{default:a(()=>[r(" Length: "+d(n(o)().itemCheckSyncQueue.length)+" ",1),e[30]||(e[30]=g("br",null,null,-1)),r(" Has Failed Items: "+d(n(o)().hasFailedItems())+" ",1),l(U,null,{default:a(()=>[(u(!0),V(b,null,D(n(o)().itemCheckSyncQueue,t=>(u(),f(_,{key:t},{default:a(()=>[r(d(t),1)]),_:2},1024))),128))]),_:1})]),_:1,__:[30]})]),_:1})]),_:1}),l(y,{cols:"12",md:"4"},{default:a(()=>[l(A,null,{default:a(()=>[l(M,null,{default:a(()=>e[31]||(e[31]=[r("Undo Debug")])),_:1,__:[31]}),l(L,null,{default:a(()=>[l(U,null,{default:a(()=>[(u(!0),V(b,null,D(n(o)().undoStack,t=>(u(),f(_,{key:t},{default:a(()=>[r(d(t.type)+" "+d(t.entries.flatMap(p=>p.food.name)),1)]),_:2},1024))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})):c("",!0)]),_:1})]),_:1}),l(Q,{value:"recipes"},{default:a(()=>[l(W,null,{default:a(()=>[l(C,null,{default:a(()=>[l(y,null,{default:a(()=>[l(A,null,{default:a(()=>[l(M,null,{default:a(()=>[r(d(s.$t("Recipes"))+" / "+d(s.$t("Meal_Plan")),1)]),_:1}),l(L,null,{default:a(()=>[l(X,{model:"Recipe",modelValue:m.value,"onUpdate:modelValue":e[16]||(e[16]=t=>m.value=t),"append-to-body":""},{append:a(()=>[l(S,{icon:"$create",color:"create",disabled:m.value==null},{default:a(()=>[l(x,{icon:"$create"}),m.value!=null?(u(),f(Ae,{key:0,recipe:m.value,onCreated:e[15]||(e[15]=t=>{n(o)().refreshFromAPI(),m.value=void 0})},null,8,["recipe"])):c("",!0)]),_:1},8,["disabled"])]),_:1},8,["modelValue"]),l(U,null,{default:a(()=>[(u(!0),V(b,null,D(n(o)().getAssociatedRecipes(),t=>(u(),f(_,null,{prepend:a(()=>[l(S,{color:"edit",icon:""},{default:a(()=>[r(d(t.servings)+" ",1),t.mealplan==null?(u(),f(Ue,{key:0,number:t.servings,onConfirm:p=>{w(t,p)}},null,8,["number","onConfirm"])):c("",!0),t.mealplan!=null?(u(),f(he,{key:1,model:"MealPlan","item-id":t.mealplan,activator:"parent"},null,8,["item-id"])):c("",!0)]),_:2},1024)]),append:a(()=>[l(S,{icon:"",color:"delete"},{default:a(()=>[l(x,{icon:"$delete"}),l(De,{"object-name":t.name,"model-name":s.$t("ShoppingListRecipe"),onDelete:p=>P(t)},null,8,["object-name","model-name","onDelete"])]),_:2},1024)]),default:a(()=>[g("div",Be,[t.recipe?(u(),V("p",Oe,[r(d(t.recipeData.name),1),e[32]||(e[32]=g("br",null,null,-1))])):c("",!0),t.mealplan?(u(),V("p",Ne,d(t.mealPlanData.mealType.name)+" - "+d(n(ee).fromJSDate(t.mealPlanData.fromDate).toLocaleString(n(ee).DATE_FULL))+" #"+d(t.id),1)):c("",!0)])]),_:2},1024))),256))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),l(Q,{value:"selected_supermarket"},{default:a(()=>[l(W,null,{default:a(()=>[l(C,null,{default:a(()=>[l(y,null,{default:a(()=>[l(we,{item:n(i)().deviceSettings.shopping_selected_supermarket,onSave:e[17]||(e[17]=t=>n(i)().deviceSettings.shopping_selected_supermarket=t)},null,8,["item"])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])],64))}}),tl=q({__name:"ShoppingListPage",setup(N){return(v,E)=>(u(),f(Ge))}});export{tl as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/ShoppingListPage-B_cxskGt.e39bd0908ae5.js.gz b/config/tandoor/staticfiles/vue3/assets/ShoppingListPage-B_cxskGt.e39bd0908ae5.js.gz
deleted file mode 100644
index bc4a81f1..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/ShoppingListPage-B_cxskGt.e39bd0908ae5.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/ShoppingListPage-B_cxskGt.js b/config/tandoor/staticfiles/vue3/assets/ShoppingListPage-B_cxskGt.js
deleted file mode 100644
index 14d27f2a..00000000
--- a/config/tandoor/staticfiles/vue3/assets/ShoppingListPage-B_cxskGt.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import{d as q,u as te,aZ as ne,aH as ie,r as O,c as Y,L as i,a_ as ae,a$ as se,b0 as oe,h as f,aN as ue,w as a,g as l,M as A,aO as de,O as L,k as C,V as y,b1 as re,z as S,i as g,S as J,l as n,aP as pe,j as r,t as d,f as u,b2 as K,o as me,A as F,b3 as fe,b4 as _e,Q as T,R as H,b as V,e as c,n as ge,H as ve,x as U,y as _,B as Z,T as ce,ag as X,a8 as j,av as Se,q as Q,K as W,b5 as Ve,F as b,p as D,aa as ye,G as x,W as be,N as M,m as $e,ai as ke,D as ee,_ as he,ad as le}from"./main-BhFWIRV_.js";import{u as o,_ as Ce,a as Ee}from"./ShoppingListEntryInput.vue_vue_type_style_index_1_lang-DiO3wd3y.js";import{_ as Ue}from"./NumberScalerDialog.vue_vue_type_script_setup_true_lang-BKqLc88N.js";import{_ as we}from"./SupermarketEditor.vue_vue_type_script_setup_true_lang-DaKxST5A.js";import{_ as De}from"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import{_ as Re}from"./BtnCopy.vue_vue_type_script_setup_true_lang-B_1A58TG.js";import{V as Te}from"./VTextarea-Dyu7dPGe.js";import{V as B,_ as Ae}from"./AddToShoppingDialog.vue_vue_type_script_setup_true_lang-ByrmCw9F.js";import{V as z,a as Le}from"./VTabs-BQFRhgOd.js";import{V as h}from"./VSwitch-BzI8Cngm.js";import"./model_utils-CVQgSPL_.js";import"./useModelEditorFunctions-Du2kfr61.js";import"./VTooltip-CP00KBBq.js";import"./number_utils-1sJWKMUK.js";const Ie=q({__name:"ShoppingExportDialog",props:{modelValue:{type:Boolean},modelModifiers:{}},emits:["update:modelValue"],setup(N){const{t:v}=te(),{copy:E}=ne(),$=ie(N,"modelValue"),m=O("md_list"),k=Y(()=>i().userSettings.csvDelim),w=Y(()=>{let e=[];return e.push(I()),o().getEntriesByGroup.forEach(t=>{ae(t)&&(t.name===o().UNDEFINED_CATEGORY?e.push(P(v("NoCategory"))):e.push(P(t.name)),t.foods.forEach(p=>{se(p,i().deviceSettings)&&p.entries.forEach(R=>{oe(R,i().deviceSettings)&&e.push(G(R))})}))}),m.value=="md_list"&&e.splice(0,2),e.join(`
-`)});function I(){return m.value=="md_list"?"":m.value=="md_table"?`|${v("Amount")}|${v("Unit")}|${v("Food")}|
-|-|-|-|`:m.value=="csv"?`${v("Amount")} ${k.value} ${v("Unit")} ${k.value} ${v("Food")}`:""}function P(e){return m.value=="md_list"?`
-${e}`:m.value=="md_table"?`|${e}|`:m.value=="csv"?`${e}${k.value}${k.value}`:""}function G(e){return m.value=="md_list"?`${i().userSettings.csvPrefix} ${e.amount} ${e.unit?.name} ${e.food?.name}`:m.value=="md_table"?`|${e.amount}|${e.unit?.name}|${e.food?.name}|`:m.value=="csv"?`${e.amount}${k.value}${e.unit?.name}${k.value}${e.food?.name}`:""}function s(){let e=encodeURI("data:text/text;charset=utf-8,"+w.value),t=document.createElement("a");t.setAttribute("href",e),m.value=="md_list"||m.value=="md_table"?t.setAttribute("download",`${v("Shopping_list")}.md`):m.value=="csv"&&t.setAttribute("download",`${v("Shopping_list")}.csv`),t.click()}return(e,t)=>(u(),f(ue,{modelValue:$.value,"onUpdate:modelValue":t[6]||(t[6]=p=>$.value=p),activator:"parent",style:{"max-width":"75vw"}},{default:a(()=>[l(A,null,{default:a(()=>[l(de,{title:e.$t("Export"),modelValue:$.value,"onUpdate:modelValue":t[0]||(t[0]=p=>$.value=p)},null,8,["title","modelValue"]),l(L,null,{default:a(()=>[l(C,null,{default:a(()=>[l(y,null,{default:a(()=>[l(re,{border:"",divided:"",modelValue:m.value,"onUpdate:modelValue":t[1]||(t[1]=p=>m.value=p)},{default:a(()=>[l(S,{value:"md_list"},{default:a(()=>t[7]||(t[7]=[g("i",{class:"fa-solid fa-list-check"},null,-1)])),_:1,__:[7]}),l(S,{value:"md_table"},{default:a(()=>t[8]||(t[8]=[g("i",{class:"fa-solid fa-table-cells"},null,-1)])),_:1,__:[8]}),l(S,{value:"csv"},{default:a(()=>t[9]||(t[9]=[g("i",{class:"fa-solid fa-file-csv"},null,-1)])),_:1,__:[9]})]),_:1},8,["modelValue"])]),_:1})]),_:1}),l(C,null,{default:a(()=>[l(y,null,{default:a(()=>[l(J,{label:e.$t("csv_delim_label"),hint:e.$t("csv_delim_help"),"persistent-hint":"",modelValue:n(i)().userSettings.csvDelim,"onUpdate:modelValue":t[2]||(t[2]=p=>n(i)().userSettings.csvDelim=p)},null,8,["label","hint","modelValue"])]),_:1}),l(y,null,{default:a(()=>[l(J,{label:e.$t("csv_prefix_label"),hint:e.$t("csv_prefix_help"),"persistent-hint":"",modelValue:n(i)().userSettings.csvPrefix,"onUpdate:modelValue":t[3]||(t[3]=p=>n(i)().userSettings.csvPrefix=p)},null,8,["label","hint","modelValue"])]),_:1})]),_:1}),l(C,null,{default:a(()=>[l(y,null,{default:a(()=>[l(Te,{"model-value":w.value,"auto-grow":"","max-rows":"25",readonly:""},null,8,["model-value"])]),_:1})]),_:1}),l(Re,{class:"float-right","copy-value":w.value},null,8,["copy-value"])]),_:1}),l(pe,null,{default:a(()=>[l(S,{onClick:t[4]||(t[4]=p=>s()),"prepend-icon":"fa-solid fa-download"},{default:a(()=>[r(d(e.$t("Download")),1)]),_:1}),l(S,{onClick:t[5]||(t[5]=p=>n(E)(w.value)),"prepend-icon":"$copy"},{default:a(()=>[r(d(e.$t("Copy")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]))}}),Pe={class:"d-none d-md-block ms-1"},Fe={class:"d-none d-md-block ms-1"},Me={class:"d-none d-md-block ms-1"},Be={class:"ms-2"},Oe={key:0},Ne={key:1},Ge=q({__name:"ShoppingListView",setup(N){const{t:v}=te(),E=O("shopping"),$=O([]),m=O(void 0),k=Y(()=>{let s=[];return Object.values(K).forEach(e=>{s.push({title:v(e),value:e})}),s});me(()=>{addEventListener("visibilitychange",s=>{o().autoSyncHasFocus=document.visibilityState==="visible"}),o().refreshFromAPI(),I(),i().deviceSettings.shopping_selected_supermarket!=null&&new F().apiSupermarketRetrieve({id:i().deviceSettings.shopping_selected_supermarket.id}).then(s=>{i().deviceSettings.shopping_selected_supermarket=s}).catch(s=>{s instanceof fe&&s.response.status==404&&(i().deviceSettings.shopping_selected_supermarket=null)}),G()});function w(s,e){let t=new F;o().currentlyUpdating=!0,s.servings=e,t.apiShoppingListRecipeUpdate({id:s.id,shoppingListRecipe:s}).then(p=>{o().currentlyUpdating=!1,o().refreshFromAPI(),T().addPreparedMessage(le.UPDATE_SUCCESS)}).catch(p=>{T().addError(H.UPDATE_ERROR,p),o().currentlyUpdating=!1})}function I(){clearTimeout(o().autoSyncTimeoutId);let s=Math.max(i().userSettings.shoppingAutoSync,1)*1e3;o().autoSyncTimeoutId=setTimeout(()=>{i().userSettings.shoppingAutoSync>0&&o().autoSync(),I()},s)}_e(()=>{clearTimeout(o().autoSyncTimeoutId)});function P(s){new F().apiShoppingListRecipeDestroy({id:s.id}).then(t=>{o().refreshFromAPI(),T().addPreparedMessage(le.DELETE_SUCCESS)}).catch(t=>{T().addError(H.DELETE_ERROR,t)})}function G(){new F().apiSupermarketList().then(e=>{$.value=e.results}).catch(e=>{T().addError(H.FETCH_ERROR,e)})}return(s,e)=>(u(),V(b,null,[l(Le,{modelValue:E.value,"onUpdate:modelValue":e[12]||(e[12]=t=>E.value=t)},{default:a(()=>[l(z,{value:"shopping"},{default:a(()=>[g("i",{class:ge(["fas fa-fw",{"fa-circle-notch fa-spin":n(o)().currentlyUpdating,"fa-shopping-cart ":!n(o)().currentlyUpdating}])},null,2),e[19]||(e[19]=r()),g("span",Pe,d(s.$t("Shopping_list"))+" ("+d(n(o)().stats.countUnchecked)+")",1)]),_:1,__:[19]}),l(z,{value:"recipes"},{default:a(()=>[e[20]||(e[20]=g("i",{class:"fas fa-book fa-fw"},null,-1)),e[21]||(e[21]=r()),g("span",Fe,d(s.$t("Recipes"))+" ("+d(n(o)().getAssociatedRecipes().length)+")",1)]),_:1,__:[20,21]}),n(i)().deviceSettings.shopping_selected_supermarket!=null?(u(),f(z,{key:0,value:"selected_supermarket"},{default:a(()=>[e[22]||(e[22]=g("i",{class:"fa-solid fa-store fa-fw"},null,-1)),e[23]||(e[23]=r()),g("span",Me,d(n(i)().deviceSettings.shopping_selected_supermarket.name),1)]),_:1,__:[22,23]})):c("",!0),l(ve,{"close-on-content-click":!1},{activator:a(({props:t})=>[l(S,Se({class:"me-4 float-right",height:"100%",rounded:"0",variant:"plain"},t),{default:a(()=>e[24]||(e[24]=[g("i",{class:"fa-solid fa-sliders"},null,-1)])),_:2,__:[24]},1040)]),default:a(()=>[l(U,{density:"compact"},{default:a(()=>[l(_,{onClick:e[0]||(e[0]=t=>n(o)().undoChange()),"prepend-icon":"fa-solid fa-arrow-rotate-left"},{default:a(()=>[r(d(s.$t("Undo")),1)]),_:1}),l(Z),l(_,null,{default:a(()=>[l(ce,{"hide-details":"",items:k.value,modelValue:n(i)().deviceSettings.shopping_selected_grouping,"onUpdate:modelValue":e[1]||(e[1]=t=>n(i)().deviceSettings.shopping_selected_grouping=t),label:s.$t("GroupBy")},null,8,["items","modelValue","label"])]),_:1}),n(i)().deviceSettings.shopping_selected_grouping==n(K).CATEGORY?(u(),f(_,{key:0},{default:a(()=>[l(h,{color:"primary","hide-details":"",label:s.$t("SupermarketCategoriesOnly"),modelValue:n(i)().deviceSettings.shopping_show_selected_supermarket_only,"onUpdate:modelValue":e[2]||(e[2]=t=>n(i)().deviceSettings.shopping_show_selected_supermarket_only=t)},null,8,["label","modelValue"])]),_:1})):c("",!0),l(_,null,{default:a(()=>[l(X,{model:"Supermarket","append-to-body":"",modelValue:n(i)().deviceSettings.shopping_selected_supermarket,"onUpdate:modelValue":e[3]||(e[3]=t=>n(i)().deviceSettings.shopping_selected_supermarket=t)},null,8,["modelValue"])]),_:1}),l(_,null,{default:a(()=>[l(h,{color:"primary","hide-details":"",label:s.$t("ShowDelayed"),modelValue:n(i)().deviceSettings.shopping_show_delayed_entries,"onUpdate:modelValue":e[4]||(e[4]=t=>n(i)().deviceSettings.shopping_show_delayed_entries=t)},null,8,["label","modelValue"])]),_:1}),l(_,null,{default:a(()=>[l(h,{color:"primary","hide-details":"",label:s.$t("ShowRecentlyCompleted"),modelValue:n(i)().deviceSettings.shopping_show_checked_entries,"onUpdate:modelValue":e[5]||(e[5]=t=>n(i)().deviceSettings.shopping_show_checked_entries=t)},null,8,["label","modelValue"])]),_:1}),l(j,null,{default:a(()=>[r(d(s.$t("Information")),1)]),_:1}),l(_,null,{default:a(()=>[l(h,{color:"primary","hide-details":"",label:s.$t("Recipe"),modelValue:n(i)().deviceSettings.shopping_item_info_recipe,"onUpdate:modelValue":e[6]||(e[6]=t=>n(i)().deviceSettings.shopping_item_info_recipe=t)},null,8,["label","modelValue"])]),_:1}),l(_,null,{default:a(()=>[l(h,{color:"primary","hide-details":"",label:s.$t("Meal_Plan"),modelValue:n(i)().deviceSettings.shopping_item_info_mealplan,"onUpdate:modelValue":e[7]||(e[7]=t=>n(i)().deviceSettings.shopping_item_info_mealplan=t)},null,8,["label","modelValue"])]),_:1}),l(_,null,{default:a(()=>[l(h,{color:"primary","hide-details":"",label:s.$t("CreatedBy"),modelValue:n(i)().deviceSettings.shopping_item_info_created_by,"onUpdate:modelValue":e[8]||(e[8]=t=>n(i)().deviceSettings.shopping_item_info_created_by=t)},null,8,["label","modelValue"])]),_:1}),l(_,null,{default:a(()=>[l(h,{color:"primary","hide-details":"",label:"New Input",modelValue:n(i)().deviceSettings.shopping_input_autocomplete,"onUpdate:modelValue":e[9]||(e[9]=t=>n(i)().deviceSettings.shopping_input_autocomplete=t)},null,8,["modelValue"])]),_:1}),n(i)().serverSettings.debug?(u(),f(_,{key:1},{default:a(()=>[l(h,{color:"primary","hide-details":"",label:"Show Debug Info",modelValue:n(i)().deviceSettings.shopping_show_debug,"onUpdate:modelValue":e[10]||(e[10]=t=>n(i)().deviceSettings.shopping_show_debug=t)},null,8,["modelValue"])]),_:1})):c("",!0)]),_:1})]),_:1}),l(S,{height:"100%",rounded:"0",variant:"plain"},{default:a(()=>[e[25]||(e[25]=g("i",{class:"fa-solid fa-download"},null,-1)),l(Ie)]),_:1,__:[25]}),l(S,{height:"100%",rounded:"0",variant:"plain",onClick:e[11]||(e[11]=t=>n(o)().undoChange())},{default:a(()=>e[26]||(e[26]=[g("i",{class:"fa-solid fa-arrow-rotate-left"},null,-1)])),_:1,__:[26]})]),_:1},8,["modelValue"]),l($e,{modelValue:E.value,"onUpdate:modelValue":e[18]||(e[18]=t=>E.value=t)},{default:a(()=>[l(Q,{value:"shopping"},{default:a(()=>[l(W,null,{default:a(()=>[l(C,{class:"pa-0",dense:""},{default:a(()=>[l(y,{class:"pa-0"},{default:a(()=>[$.value.length>0?(u(),f(Ve,{key:0,modelValue:n(i)().deviceSettings.shopping_selected_supermarket,"onUpdate:modelValue":e[13]||(e[13]=t=>n(i)().deviceSettings.shopping_selected_supermarket=t)},{default:a(()=>[(u(!0),V(b,null,D($.value,t=>(u(),f(ke,{value:t,key:t.id,label:"",density:"compact",variant:"outlined",color:"primary"},{default:a(()=>[r(d(t.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue"])):c("",!0)]),_:1})]),_:1}),l(C,null,{default:a(()=>[l(y,null,{default:a(()=>[n(o)().hasFailedItems()?(u(),f(ye,{key:0,color:"warning",class:"mb-2"},{prepend:a(()=>[l(x,{icon:"fa-solid fa-link-slash"})]),append:a(()=>[r(d(n(o)().itemCheckSyncQueue.length),1)]),default:a(()=>[r(" "+d(s.$t("ShoppingBackgroundSyncWarning"))+" ",1)]),_:1})):c("",!0),l(Ce),n(o)().initialized?(u(),f(U,{key:2,class:"mt-3",density:"compact"},{default:a(()=>[(u(!0),V(b,null,D(n(o)().getEntriesByGroup,t=>(u(),V(b,{key:t.name},[n(ae)(t)?(u(),V(b,{key:0},[t.name===n(o)().UNDEFINED_CATEGORY?(u(),f(j,{key:0},{default:a(()=>[g("i",null,d(s.$t("NoCategory")),1)]),_:1})):(u(),f(j,{key:1},{default:a(()=>[r(d(t.name),1)]),_:2},1024)),l(Z),(u(!0),V(b,null,D(t.foods,([p,R])=>(u(),f(Ee,{key:R.food.id,"shopping-list-food":R},null,8,["shopping-list-food"]))),128))],64)):c("",!0)],64))),128))]),_:1})):(u(),f(U,{key:1,class:"mt-3",density:"compact"},{default:a(()=>[l(B,{type:"list-item"}),l(B,{type:"list-item"}),l(B,{type:"list-item"}),l(B,{type:"list-item"})]),_:1})),l(be,{style:{"margin-top":"120px"}})]),_:1})]),_:1}),n(i)().deviceSettings.shopping_show_debug?(u(),f(C,{key:0},{default:a(()=>[l(y,{cols:"12",md:"4"},{default:a(()=>[l(A,null,{default:a(()=>[l(M,null,{default:a(()=>e[27]||(e[27]=[r("Auto Sync Debug")])),_:1,__:[27]}),l(S,{onClick:e[14]||(e[14]=t=>n(o)().autoSync())},{default:a(()=>e[28]||(e[28]=[r("Run Sync")])),_:1,__:[28]}),l(L,null,{default:a(()=>[l(U,null,{default:a(()=>[l(_,null,{default:a(()=>[r("currentlyUpdating: "+d(n(o)().currentlyUpdating),1)]),_:1}),l(_,null,{default:a(()=>[r("hasFocus: "+d(n(o)().autoSyncHasFocus),1)]),_:1}),l(_,null,{default:a(()=>[r("autoSyncTimeoutId: "+d(n(o)().autoSyncTimeoutId),1)]),_:1}),l(_,null,{default:a(()=>[r("autoSyncLastTimestamp: "+d(n(o)().autoSyncLastTimestamp),1)]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),l(y,{cols:"12",md:"4"},{default:a(()=>[l(A,null,{default:a(()=>[l(M,null,{default:a(()=>e[29]||(e[29]=[r("Sync Queue Debug")])),_:1,__:[29]}),l(L,null,{default:a(()=>[r(" Length: "+d(n(o)().itemCheckSyncQueue.length)+" ",1),e[30]||(e[30]=g("br",null,null,-1)),r(" Has Failed Items: "+d(n(o)().hasFailedItems())+" ",1),l(U,null,{default:a(()=>[(u(!0),V(b,null,D(n(o)().itemCheckSyncQueue,t=>(u(),f(_,{key:t},{default:a(()=>[r(d(t),1)]),_:2},1024))),128))]),_:1})]),_:1,__:[30]})]),_:1})]),_:1}),l(y,{cols:"12",md:"4"},{default:a(()=>[l(A,null,{default:a(()=>[l(M,null,{default:a(()=>e[31]||(e[31]=[r("Undo Debug")])),_:1,__:[31]}),l(L,null,{default:a(()=>[l(U,null,{default:a(()=>[(u(!0),V(b,null,D(n(o)().undoStack,t=>(u(),f(_,{key:t},{default:a(()=>[r(d(t.type)+" "+d(t.entries.flatMap(p=>p.food.name)),1)]),_:2},1024))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})):c("",!0)]),_:1})]),_:1}),l(Q,{value:"recipes"},{default:a(()=>[l(W,null,{default:a(()=>[l(C,null,{default:a(()=>[l(y,null,{default:a(()=>[l(A,null,{default:a(()=>[l(M,null,{default:a(()=>[r(d(s.$t("Recipes"))+" / "+d(s.$t("Meal_Plan")),1)]),_:1}),l(L,null,{default:a(()=>[l(X,{model:"Recipe",modelValue:m.value,"onUpdate:modelValue":e[16]||(e[16]=t=>m.value=t),"append-to-body":""},{append:a(()=>[l(S,{icon:"$create",color:"create",disabled:m.value==null},{default:a(()=>[l(x,{icon:"$create"}),m.value!=null?(u(),f(Ae,{key:0,recipe:m.value,onCreated:e[15]||(e[15]=t=>{n(o)().refreshFromAPI(),m.value=void 0})},null,8,["recipe"])):c("",!0)]),_:1},8,["disabled"])]),_:1},8,["modelValue"]),l(U,null,{default:a(()=>[(u(!0),V(b,null,D(n(o)().getAssociatedRecipes(),t=>(u(),f(_,null,{prepend:a(()=>[l(S,{color:"edit",icon:""},{default:a(()=>[r(d(t.servings)+" ",1),t.mealplan==null?(u(),f(Ue,{key:0,number:t.servings,onConfirm:p=>{w(t,p)}},null,8,["number","onConfirm"])):c("",!0),t.mealplan!=null?(u(),f(he,{key:1,model:"MealPlan","item-id":t.mealplan,activator:"parent"},null,8,["item-id"])):c("",!0)]),_:2},1024)]),append:a(()=>[l(S,{icon:"",color:"delete"},{default:a(()=>[l(x,{icon:"$delete"}),l(De,{"object-name":t.name,"model-name":s.$t("ShoppingListRecipe"),onDelete:p=>P(t)},null,8,["object-name","model-name","onDelete"])]),_:2},1024)]),default:a(()=>[g("div",Be,[t.recipe?(u(),V("p",Oe,[r(d(t.recipeData.name),1),e[32]||(e[32]=g("br",null,null,-1))])):c("",!0),t.mealplan?(u(),V("p",Ne,d(t.mealPlanData.mealType.name)+" - "+d(n(ee).fromJSDate(t.mealPlanData.fromDate).toLocaleString(n(ee).DATE_FULL))+" #"+d(t.id),1)):c("",!0)])]),_:2},1024))),256))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),l(Q,{value:"selected_supermarket"},{default:a(()=>[l(W,null,{default:a(()=>[l(C,null,{default:a(()=>[l(y,null,{default:a(()=>[l(we,{item:n(i)().deviceSettings.shopping_selected_supermarket,onSave:e[17]||(e[17]=t=>n(i)().deviceSettings.shopping_selected_supermarket=t)},null,8,["item"])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])],64))}}),tl=q({__name:"ShoppingListPage",setup(N){return(v,E)=>(u(),f(Ge))}});export{tl as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/ShoppingListPage-B_cxskGt.js.gz b/config/tandoor/staticfiles/vue3/assets/ShoppingListPage-B_cxskGt.js.gz
deleted file mode 100644
index bc4a81f1..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/ShoppingListPage-B_cxskGt.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/ShoppingSettings-BX-lg7k4.2b4829a43b77.js b/config/tandoor/staticfiles/vue3/assets/ShoppingSettings-BX-lg7k4.2b4829a43b77.js
deleted file mode 100644
index be2f3dd3..00000000
--- a/config/tandoor/staticfiles/vue3/assets/ShoppingSettings-BX-lg7k4.2b4829a43b77.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as g,h,w as o,ac as V,i as S,g as a,t as u,B as b,l as e,ag as $,z as p,j as r,af as d,U as i,S as m,f,L as l}from"./main-BhFWIRV_.js";const y={class:"text-h6"},_=g({__name:"ShoppingSettings",setup(v){return(n,t)=>(f(),h(V,null,{default:o(()=>[S("p",y,u(n.$t("Shopping_list")),1),a(b,{class:"mb-3"}),a($,{hint:n.$t("shopping_share_desc"),label:n.$t("shopping_share"),model:"User","allow-create":!1,modelValue:e(l)().userSettings.shoppingShare,"onUpdate:modelValue":t[0]||(t[0]=s=>e(l)().userSettings.shoppingShare=s),"item-label":"displayName",mode:"tags"},null,8,["hint","label","modelValue"]),a(d,{class:"mt-2",label:n.$t("shopping_auto_sync"),hint:n.$t("shopping_auto_sync_desc"),"persistent-hint":"",controlVariant:"split",modelValue:e(l)().userSettings.shoppingAutoSync,"onUpdate:modelValue":t[2]||(t[2]=s=>e(l)().userSettings.shoppingAutoSync=s),step:Number(e(l)().serverSettings.shoppingMinAutosyncInterval),min:e(l)().userSettings.shoppingAutoSync==0?0:Number(e(l)().serverSettings.shoppingMinAutosyncInterval)},{append:o(()=>[a(p,{onClick:t[1]||(t[1]=s=>e(l)().userSettings.shoppingAutoSync=0)},{default:o(()=>[r(u(n.$t("Disable")),1)]),_:1})]),_:1},8,["label","hint","modelValue","step","min"]),a(i,{label:n.$t("mealplan_autoadd_shopping"),hint:n.$t("mealplan_autoadd_shopping_desc"),"persistent-hint":"",modelValue:e(l)().userSettings.mealplanAutoaddShopping,"onUpdate:modelValue":t[3]||(t[3]=s=>e(l)().userSettings.mealplanAutoaddShopping=s)},null,8,["label","hint","modelValue"]),a(i,{label:n.$t("mealplan_autoexclude_onhand"),hint:n.$t("mealplan_autoexclude_onhand_desc"),"persistent-hint":"",modelValue:e(l)().userSettings.mealplanAutoexcludeOnhand,"onUpdate:modelValue":t[4]||(t[4]=s=>e(l)().userSettings.mealplanAutoexcludeOnhand=s)},null,8,["label","hint","modelValue"]),a(i,{label:n.$t("mealplan_autoinclude_related"),hint:n.$t("mealplan_autoinclude_related_desc"),"persistent-hint":"",modelValue:e(l)().userSettings.mealplanAutoincludeRelated,"onUpdate:modelValue":t[5]||(t[5]=s=>e(l)().userSettings.mealplanAutoincludeRelated=s)},null,8,["label","hint","modelValue"]),a(i,{label:n.$t("shopping_add_onhand"),hint:n.$t("shopping_add_onhand_desc"),"persistent-hint":"",modelValue:e(l)().userSettings.shoppingAddOnhand,"onUpdate:modelValue":t[6]||(t[6]=s=>e(l)().userSettings.shoppingAddOnhand=s)},null,8,["label","hint","modelValue"]),a(i,{label:n.$t("filter_to_supermarket"),hint:n.$t("filter_to_supermarket_desc"),"persistent-hint":"",modelValue:e(l)().userSettings.filterToSupermarket,"onUpdate:modelValue":t[7]||(t[7]=s=>e(l)().userSettings.filterToSupermarket=s)},null,8,["label","hint","modelValue"]),a(d,{class:"mt-2",label:n.$t("default_delay"),hint:n.$t("default_delay_desc"),"persistent-hint":"",controlVariant:"split",modelValue:e(l)().userSettings.defaultDelay,"onUpdate:modelValue":t[8]||(t[8]=s=>e(l)().userSettings.defaultDelay=s),min:1},null,8,["label","hint","modelValue"]),a(d,{class:"mt-2",label:n.$t("shopping_recent_days"),hint:n.$t("shopping_recent_days_desc"),"persistent-hint":"",controlVariant:"split",modelValue:e(l)().userSettings.shoppingRecentDays,"onUpdate:modelValue":t[9]||(t[9]=s=>e(l)().userSettings.shoppingRecentDays=s),min:0},null,8,["label","hint","modelValue"]),a(m,{label:n.$t("csv_delim_label"),hint:n.$t("csv_delim_help"),"persistent-hint":"",modelValue:e(l)().userSettings.csvDelim,"onUpdate:modelValue":t[10]||(t[10]=s=>e(l)().userSettings.csvDelim=s)},null,8,["label","hint","modelValue"]),a(m,{label:n.$t("csv_prefix_label"),hint:n.$t("csv_prefix_help"),"persistent-hint":"",modelValue:e(l)().userSettings.csvPrefix,"onUpdate:modelValue":t[11]||(t[11]=s=>e(l)().userSettings.csvPrefix=s)},null,8,["label","hint","modelValue"]),a(p,{class:"mt-3",color:"success",onClick:t[12]||(t[12]=s=>e(l)().updateUserSettings()),"prepend-icon":"$save"},{default:o(()=>[r(u(n.$t("Save")),1)]),_:1})]),_:1}))}});export{_ as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/ShoppingSettings-BX-lg7k4.2b4829a43b77.js.gz b/config/tandoor/staticfiles/vue3/assets/ShoppingSettings-BX-lg7k4.2b4829a43b77.js.gz
deleted file mode 100644
index f46ae44a..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/ShoppingSettings-BX-lg7k4.2b4829a43b77.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/ShoppingSettings-BX-lg7k4.js b/config/tandoor/staticfiles/vue3/assets/ShoppingSettings-BX-lg7k4.js
deleted file mode 100644
index be2f3dd3..00000000
--- a/config/tandoor/staticfiles/vue3/assets/ShoppingSettings-BX-lg7k4.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as g,h,w as o,ac as V,i as S,g as a,t as u,B as b,l as e,ag as $,z as p,j as r,af as d,U as i,S as m,f,L as l}from"./main-BhFWIRV_.js";const y={class:"text-h6"},_=g({__name:"ShoppingSettings",setup(v){return(n,t)=>(f(),h(V,null,{default:o(()=>[S("p",y,u(n.$t("Shopping_list")),1),a(b,{class:"mb-3"}),a($,{hint:n.$t("shopping_share_desc"),label:n.$t("shopping_share"),model:"User","allow-create":!1,modelValue:e(l)().userSettings.shoppingShare,"onUpdate:modelValue":t[0]||(t[0]=s=>e(l)().userSettings.shoppingShare=s),"item-label":"displayName",mode:"tags"},null,8,["hint","label","modelValue"]),a(d,{class:"mt-2",label:n.$t("shopping_auto_sync"),hint:n.$t("shopping_auto_sync_desc"),"persistent-hint":"",controlVariant:"split",modelValue:e(l)().userSettings.shoppingAutoSync,"onUpdate:modelValue":t[2]||(t[2]=s=>e(l)().userSettings.shoppingAutoSync=s),step:Number(e(l)().serverSettings.shoppingMinAutosyncInterval),min:e(l)().userSettings.shoppingAutoSync==0?0:Number(e(l)().serverSettings.shoppingMinAutosyncInterval)},{append:o(()=>[a(p,{onClick:t[1]||(t[1]=s=>e(l)().userSettings.shoppingAutoSync=0)},{default:o(()=>[r(u(n.$t("Disable")),1)]),_:1})]),_:1},8,["label","hint","modelValue","step","min"]),a(i,{label:n.$t("mealplan_autoadd_shopping"),hint:n.$t("mealplan_autoadd_shopping_desc"),"persistent-hint":"",modelValue:e(l)().userSettings.mealplanAutoaddShopping,"onUpdate:modelValue":t[3]||(t[3]=s=>e(l)().userSettings.mealplanAutoaddShopping=s)},null,8,["label","hint","modelValue"]),a(i,{label:n.$t("mealplan_autoexclude_onhand"),hint:n.$t("mealplan_autoexclude_onhand_desc"),"persistent-hint":"",modelValue:e(l)().userSettings.mealplanAutoexcludeOnhand,"onUpdate:modelValue":t[4]||(t[4]=s=>e(l)().userSettings.mealplanAutoexcludeOnhand=s)},null,8,["label","hint","modelValue"]),a(i,{label:n.$t("mealplan_autoinclude_related"),hint:n.$t("mealplan_autoinclude_related_desc"),"persistent-hint":"",modelValue:e(l)().userSettings.mealplanAutoincludeRelated,"onUpdate:modelValue":t[5]||(t[5]=s=>e(l)().userSettings.mealplanAutoincludeRelated=s)},null,8,["label","hint","modelValue"]),a(i,{label:n.$t("shopping_add_onhand"),hint:n.$t("shopping_add_onhand_desc"),"persistent-hint":"",modelValue:e(l)().userSettings.shoppingAddOnhand,"onUpdate:modelValue":t[6]||(t[6]=s=>e(l)().userSettings.shoppingAddOnhand=s)},null,8,["label","hint","modelValue"]),a(i,{label:n.$t("filter_to_supermarket"),hint:n.$t("filter_to_supermarket_desc"),"persistent-hint":"",modelValue:e(l)().userSettings.filterToSupermarket,"onUpdate:modelValue":t[7]||(t[7]=s=>e(l)().userSettings.filterToSupermarket=s)},null,8,["label","hint","modelValue"]),a(d,{class:"mt-2",label:n.$t("default_delay"),hint:n.$t("default_delay_desc"),"persistent-hint":"",controlVariant:"split",modelValue:e(l)().userSettings.defaultDelay,"onUpdate:modelValue":t[8]||(t[8]=s=>e(l)().userSettings.defaultDelay=s),min:1},null,8,["label","hint","modelValue"]),a(d,{class:"mt-2",label:n.$t("shopping_recent_days"),hint:n.$t("shopping_recent_days_desc"),"persistent-hint":"",controlVariant:"split",modelValue:e(l)().userSettings.shoppingRecentDays,"onUpdate:modelValue":t[9]||(t[9]=s=>e(l)().userSettings.shoppingRecentDays=s),min:0},null,8,["label","hint","modelValue"]),a(m,{label:n.$t("csv_delim_label"),hint:n.$t("csv_delim_help"),"persistent-hint":"",modelValue:e(l)().userSettings.csvDelim,"onUpdate:modelValue":t[10]||(t[10]=s=>e(l)().userSettings.csvDelim=s)},null,8,["label","hint","modelValue"]),a(m,{label:n.$t("csv_prefix_label"),hint:n.$t("csv_prefix_help"),"persistent-hint":"",modelValue:e(l)().userSettings.csvPrefix,"onUpdate:modelValue":t[11]||(t[11]=s=>e(l)().userSettings.csvPrefix=s)},null,8,["label","hint","modelValue"]),a(p,{class:"mt-3",color:"success",onClick:t[12]||(t[12]=s=>e(l)().updateUserSettings()),"prepend-icon":"$save"},{default:o(()=>[r(u(n.$t("Save")),1)]),_:1})]),_:1}))}});export{_ as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/ShoppingSettings-BX-lg7k4.js.gz b/config/tandoor/staticfiles/vue3/assets/ShoppingSettings-BX-lg7k4.js.gz
deleted file mode 100644
index f46ae44a..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/ShoppingSettings-BX-lg7k4.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SpaceEditor-BVY5PqRN.e17c360820eb.js b/config/tandoor/staticfiles/vue3/assets/SpaceEditor-BVY5PqRN.e17c360820eb.js
deleted file mode 100644
index c9fb3e63..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SpaceEditor-BVY5PqRN.e17c360820eb.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as o}from"./SpaceEditor.vue_vue_type_script_setup_true_lang-BWOLGWRZ.js";import"./main-BhFWIRV_.js";import"./useModelEditorFunctions-Du2kfr61.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import"./VTabs-BQFRhgOd.js";import"./fileDrop-BjiZTCss.js";import"./VTextarea-Dyu7dPGe.js";import"./VColorPicker-DN5Oz5I8.js";export{o as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/SpaceEditor-BVY5PqRN.e17c360820eb.js.gz b/config/tandoor/staticfiles/vue3/assets/SpaceEditor-BVY5PqRN.e17c360820eb.js.gz
deleted file mode 100644
index 38671438..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/SpaceEditor-BVY5PqRN.e17c360820eb.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SpaceEditor-BVY5PqRN.js b/config/tandoor/staticfiles/vue3/assets/SpaceEditor-BVY5PqRN.js
deleted file mode 100644
index c9fb3e63..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SpaceEditor-BVY5PqRN.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as o}from"./SpaceEditor.vue_vue_type_script_setup_true_lang-BWOLGWRZ.js";import"./main-BhFWIRV_.js";import"./useModelEditorFunctions-Du2kfr61.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import"./VTabs-BQFRhgOd.js";import"./fileDrop-BjiZTCss.js";import"./VTextarea-Dyu7dPGe.js";import"./VColorPicker-DN5Oz5I8.js";export{o as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/SpaceEditor-BVY5PqRN.js.gz b/config/tandoor/staticfiles/vue3/assets/SpaceEditor-BVY5PqRN.js.gz
deleted file mode 100644
index 38671438..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/SpaceEditor-BVY5PqRN.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SpaceEditor.vue_vue_type_script_setup_true_lang-BWOLGWRZ.2efce23f9159.js b/config/tandoor/staticfiles/vue3/assets/SpaceEditor.vue_vue_type_script_setup_true_lang-BWOLGWRZ.2efce23f9159.js
deleted file mode 100644
index 6e5a0a0f..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SpaceEditor.vue_vue_type_script_setup_true_lang-BWOLGWRZ.2efce23f9159.js
+++ /dev/null
@@ -1 +0,0 @@
-import{ak as Le,al as Te,ao as Ne,bj as ze,bO as fe,cn as Oe,c as N,cz as se,r as D,bZ as je,bJ as He,aM as le,at as qe,cA as Je,aK as _,cB as ie,g as e,av as Z,c2 as Ge,cC as Ke,co as Qe,i as c,F as z,cD as We,n as Xe,ai as Ze,aT as Ye,cE as xe,d as ae,aL as de,aH as _e,u as el,D as G,o as pe,A as ll,Q as Y,R as re,b as T,w as l,M as I,O as S,h as k,e as y,I as K,t as d,aN as al,N as L,j as p,l as t,b9 as tl,aP as x,z as h,S as ee,cF as ol,bR as nl,bU as ul,ad as sl,f as $,k as il,V as H,b7 as q,cG as dl,cH as rl,cI as ml,ac as fl,ae as pl,U as vl,ag as gl,af as me,L as Q}from"./main-BhFWIRV_.js";import{u as bl,_ as cl}from"./useModelEditorFunctions-Du2kfr61.js";import{a as ve,V as O,b as ge,c as j}from"./VTabs-BQFRhgOd.js";import{u as Vl}from"./fileDrop-BjiZTCss.js";import{V as Cl}from"./VTextarea-Dyu7dPGe.js";import{V as $l}from"./VColorPicker-DN5Oz5I8.js";const yl=Te({chips:Boolean,counter:Boolean,counterSizeString:{type:String,default:"$vuetify.fileInput.counterSize"},counterString:{type:String,default:"$vuetify.fileInput.counter"},hideInput:Boolean,multiple:Boolean,showSize:{type:[Boolean,Number,String],default:!1,validator:o=>typeof o=="boolean"||[1e3,1024].includes(Number(o))},...Qe({prependIcon:"$file"}),modelValue:{type:[Array,Object],default:o=>o.multiple?[]:null,validator:o=>fe(o).every(m=>m!=null&&typeof m=="object")},...Ke({clearable:!0})},"VFileInput"),Sl=Le()({name:"VFileInput",inheritAttrs:!1,props:yl(),emits:{"click:control":o=>!0,"mousedown:control":o=>!0,"update:focused":o=>!0,"update:modelValue":o=>!0},setup(o,m){let{attrs:u,emit:b,slots:V}=m;const{t:w}=Ne(),C=ze(o,"modelValue",o.modelValue,r=>fe(r),r=>!o.multiple&&Array.isArray(r)?r[0]:r),{isFocused:U,focus:A,blur:R}=Oe(o),i=N(()=>typeof o.showSize!="boolean"?o.showSize:void 0),B=N(()=>(C.value??[]).reduce((r,F)=>{let{size:E=0}=F;return r+E},0)),v=N(()=>se(B.value,i.value)),a=N(()=>(C.value??[]).map(r=>{const{name:F="",size:E=0}=r;return o.showSize?`${F} (${se(E,i.value)})`:F})),f=N(()=>{const r=C.value?.length??0;return o.showSize?w(o.counterSizeString,r,v.value):w(o.counterString,r)}),g=D(),s=D(),n=D(),be=je(()=>U.value||o.active),te=N(()=>["plain","underlined"].includes(o.variant)),J=He(!1),{handleDrop:ce,hasFilesOrFolders:Ve}=Vl();function W(){n.value!==document.activeElement&&n.value?.focus(),U.value||A()}function Ce(r){n.value?.click()}function $e(r){b("mousedown:control",r)}function ye(r){n.value?.click(),b("click:control",r)}function Se(r){r.stopPropagation(),W(),Ye(()=>{C.value=[],xe(o["onClick:clear"],r)})}function ke(r){r.preventDefault(),r.stopImmediatePropagation(),J.value=!0}function we(r){r.preventDefault(),J.value=!1}async function Ue(r){if(r.preventDefault(),r.stopImmediatePropagation(),J.value=!1,!n.value||!Ve(r))return;const F=new DataTransfer;for(const E of await ce(r))F.items.add(E);n.value.files=F.files,n.value.dispatchEvent(new Event("change",{bubbles:!0}))}return le(C,r=>{(!Array.isArray(r)||!r.length)&&n.value&&(n.value.value="")}),qe(()=>{const r=!!(V.counter||o.counter),F=!!(r||V.details),[E,Fe]=Je(u),{modelValue:Pl,...Me}=_.filterProps(o),De={...ie.filterProps(o),"onClick:clear":Se};return e(_,Z({ref:g,modelValue:o.multiple?C.value:C.value[0],class:["v-file-input",{"v-file-input--chips":!!o.chips,"v-file-input--dragging":J.value,"v-file-input--hide":o.hideInput,"v-input--plain-underlined":te.value},o.class],style:o.style,"onClick:prepend":Ce},E,Me,{centerAffix:!te.value,focused:U.value}),{...V,default:X=>{let{id:Ie,isDisabled:oe,isDirty:ne,isReadonly:ue,isValid:he,hasDetails:Ae}=X;return e(ie,Z({ref:s,prependIcon:o.prependIcon,onMousedown:$e,onClick:ye,"onClick:prependInner":o["onClick:prependInner"],"onClick:appendInner":o["onClick:appendInner"]},De,{id:Ie.value,active:be.value||ne.value,dirty:ne.value||o.dirty,disabled:oe.value,focused:U.value,details:Ae.value,error:he.value===!1,onDragover:ke,onDrop:Ue}),{...V,default:Pe=>{let{props:{class:Re,...Be}}=Pe;return c(z,null,[c("input",Z({ref:n,type:"file",readonly:ue.value,disabled:oe.value,multiple:o.multiple,name:o.name,onClick:P=>{P.stopPropagation(),ue.value&&P.preventDefault(),W()},onChange:P=>{if(!P.target)return;const Ee=P.target;C.value=[...Ee.files??[]]},onDragleave:we,onFocus:W,onBlur:R},Be,Fe),null),c("div",{class:Xe(Re)},[!!C.value?.length&&!o.hideInput&&(V.selection?V.selection({fileNames:a.value,totalBytes:B.value,totalBytesReadable:v.value}):o.chips?a.value.map(P=>e(Ze,{key:P,size:"small",text:P},null)):a.value.join(", "))])])}})},details:F?X=>c(z,null,[V.details?.(X),r&&c(z,null,[c("span",null,null),e(We,{active:!!C.value?.length,value:f.value,disabled:o.disabled},V.counter)])]):void 0})}),Ge({},g,s,n)}}),kl={class:"d-flex flex-row"},wl={class:"align-content-center"},Ul={class:"ms-2 text-disabled"},Fl={key:1,class:"ms-2"},Ml={key:2,class:"ms-2"},M=ae({__name:"UserFileField",props:de({model:{type:{},default:null},label:{type:String,default:""},hint:{type:String,default:""},persistentHint:{type:Boolean,default:!1}},{modelValue:{},modelModifiers:{}}),emits:de(["update:modelValue","create"],["update:modelValue"]),setup(o,{emit:m}){const u=_e(o,"modelValue"),{t:b}=el(),V=D(!1),w=D(0),C=D({}),U=D([]),A=D(""),R=D([{title:b("Quick actions"),key:"actions"},{title:b("Preview"),key:"preview"},{title:b("Name"),value:"name"},{title:b("created_on"),key:"createdAt",value:v=>G.fromJSDate(v.createdAt).toLocaleString(G.DATETIME_MED)},{title:b("created_by"),value:"createdBy.displayName"}]);pe(()=>{}),le(()=>V.value,(v,a)=>{v&&!a&&i()});function i(){new ll().apiUserFileList().then(a=>{U.value=a.results}).catch(a=>{Y().addError(re.FETCH_ERROR,a)})}function B(){let v=new FormData;v.append("file",C.value.file),v.append("name",C.value.name),fetch("/api/user-file/",{method:"POST",headers:{"X-CSRFToken":nl("csrftoken")},body:v}).then(a=>{a.json().then(f=>{u.value=ul(f)}),Y().addPreparedMessage(sl.CREATE_SUCCESS)}).catch(a=>{Y().addError(re.CREATE_ERROR,a)})}return(v,a)=>($(),T(z,null,[e(_,{hint:o.hint,"persistent-hint":o.persistentHint},{default:l(()=>[e(I,{width:"100%",link:"",onClick:a[0]||(a[0]=f=>V.value=!V.value)},{default:l(()=>[e(S,{class:"pt-2 pb-2"},{default:l(()=>[c("div",kl,[c("div",null,[u.value==null?($(),k(K,{key:0,color:"primary"},{default:l(()=>a[14]||(a[14]=[c("i",{class:"fa-solid fa-file-arrow-up"},null,-1)])),_:1,__:[14]})):y("",!0),u.value!=null&&u.value.preview!=""?($(),k(K,{key:1,image:u.value.preview},null,8,["image"])):y("",!0),u.value!=null&&u.value.preview==""?($(),k(K,{key:2,color:"success"},{default:l(()=>a[15]||(a[15]=[c("i",{class:"fa-solid fa-eye-slash"},null,-1)])),_:1,__:[15]})):y("",!0)]),c("div",wl,[o.label!=""?($(),T(z,{key:0},[c("span",Ul,d(o.label),1),a[16]||(a[16]=c("br",null,null,-1))],64)):y("",!0),u.value==null?($(),T("span",Fl,d(v.$t("select_file")),1)):y("",!0),u.value!=null?($(),T("span",Ml,d(u.value.name),1)):y("",!0)])])]),_:1})]),_:1})]),_:1},8,["hint","persistent-hint"]),e(al,{"max-width":"1000px",height:"90vh",modelValue:V.value,"onUpdate:modelValue":a[13]||(a[13]=f=>V.value=f)},{default:l(()=>[e(I,null,{default:l(()=>[e(L,null,{default:l(()=>[p(d(v.$t("Files")),1)]),_:1}),e(ve,{modelValue:w.value,"onUpdate:modelValue":a[1]||(a[1]=f=>w.value=f),grow:""},{default:l(()=>[u.value!=null?($(),k(O,{key:0},{default:l(()=>[p(d(v.$t("Preview")),1)]),_:1})):y("",!0),e(O,null,{default:l(()=>[p(d(v.$t("New")),1)]),_:1}),e(O,null,{default:l(()=>[p(d(v.$t("Search")),1)]),_:1})]),_:1},8,["modelValue"]),e(ge,{modelValue:w.value,"onUpdate:modelValue":a[12]||(a[12]=f=>w.value=f)},{default:l(()=>[u.value!=null?($(),k(j,{key:0},{default:l(()=>[e(I,null,{default:l(()=>[e(L,null,{default:l(()=>[p(d(u.value.name),1)]),_:1}),e(S,null,{default:l(()=>[p(d(v.$n(u.value.fileSizeKb/1e3))+" MB ",1),a[17]||(a[17]=c("br",null,null,-1)),p(" "+d(u.value.createdBy.displayName)+" ",1),a[18]||(a[18]=c("br",null,null,-1)),p(" "+d(t(G).fromJSDate(u.value.createdAt).toLocaleString(t(G).DATETIME_SHORT)),1)]),_:1,__:[17,18]}),e(tl,{class:"mr-4 ml-4","max-height":"50vh",rounded:"",src:u.value.preview},null,8,["src"]),e(x,null,{default:l(()=>[e(h,{href:u.value.fileDownload,target:"_blank",color:"success","prepend-icon":"fa-solid fa-file-arrow-down"},{default:l(()=>[p(d(v.$t("Download")),1)]),_:1},8,["href"]),e(h,{color:"warning","prepend-icon":"fa-solid fa-link-slash",onClick:a[2]||(a[2]=f=>u.value=null)},{default:l(()=>[p(d(v.$t("Remove")),1)]),_:1}),e(h,{color:"delete","prepend-icon":"$delete",onClick:a[3]||(a[3]=f=>u.value=null)},{default:l(()=>[p(d(v.$t("Delete")),1)]),_:1}),e(h,{onClick:a[4]||(a[4]=f=>V.value=!1)},{default:l(()=>[p(d(v.$t("Close")),1)]),_:1})]),_:1})]),_:1})]),_:1})):y("",!0),e(j,null,{default:l(()=>[e(I,null,{default:l(()=>[e(S,null,{default:l(()=>[e(ee,{label:v.$t("Name"),modelValue:C.value.name,"onUpdate:modelValue":a[5]||(a[5]=f=>C.value.name=f)},null,8,["label","modelValue"]),e(Sl,{label:v.$t("File"),modelValue:C.value.file,"onUpdate:modelValue":a[6]||(a[6]=f=>C.value.file=f)},null,8,["label","modelValue"])]),_:1}),e(x,null,{default:l(()=>[e(h,{color:"save","prepend-icon":"$save",onClick:a[7]||(a[7]=f=>B())},{default:l(()=>[p(d(v.$t("Save")),1)]),_:1}),e(h,{onClick:a[8]||(a[8]=f=>V.value=!1)},{default:l(()=>[p(d(v.$t("Close")),1)]),_:1})]),_:1})]),_:1})]),_:1}),e(j,null,{default:l(()=>[e(I,null,{default:l(()=>[e(S,null,{default:l(()=>[e(ee,{label:v.$t("Search"),"prepend-inner-icon":"$search",modelValue:A.value,"onUpdate:modelValue":a[9]||(a[9]=f=>A.value=f)},null,8,["label","modelValue"]),e(ol,{density:"compact",headers:R.value,items:U.value,search:A.value,"onUpdate:search":a[10]||(a[10]=f=>A.value=f)},{"item.preview":l(({item:f})=>[e(K,{image:f.preview},null,8,["image"])]),"item.actions":l(({item:f})=>[e(h,{icon:"fa-solid fa-hand-pointer",color:"save",density:"comfortable",onClick:g=>{u.value=f,w.value=0}},null,8,["onClick"])]),_:1},8,["headers","items","search"])]),_:1}),e(x,null,{default:l(()=>[e(h,{onClick:a[11]||(a[11]=f=>V.value=!1)},{default:l(()=>[p(d(v.$t("Close")),1)]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["modelValue"])],64))}}),Dl=ae({__name:"SpaceLimitsInfo",props:{space:{type:{},required:!0}},setup(o){const m=o;return(u,b)=>m.space.name!=null?($(),k(il,{key:0},{default:l(()=>[e(H,{cols:"12",md:"4"},{default:l(()=>[e(I,{to:{name:"SearchPage"}},{default:l(()=>[e(L,null,{default:l(()=>[b[0]||(b[0]=c("i",{class:"fa-solid fa-book"},null,-1)),p(" "+d(u.$t("Recipes")),1)]),_:1,__:[0]}),e(S,null,{default:l(()=>[p(d(u.$n(m.space.recipeCount))+" / "+d(m.space.maxRecipes==0?"∞":u.$n(m.space.maxRecipes)),1)]),_:1}),e(q,{color:t(dl)(m.space)?"error":"success",height:"10","model-value":m.space.recipeCount/m.space.maxRecipes*100},null,8,["color","model-value"])]),_:1})]),_:1}),e(H,{cols:"12",md:"4"},{default:l(()=>[e(I,{to:{name:"ModelListPage",params:{model:"UserSpace"}}},{default:l(()=>[e(L,null,{default:l(()=>[b[1]||(b[1]=c("i",{class:"fa-solid fa-users"},null,-1)),p(" "+d(u.$t("Users")),1)]),_:1,__:[1]}),e(S,null,{default:l(()=>[p(d(u.$n(m.space.userCount))+" / "+d(m.space.maxUsers==0?"∞":u.$n(m.space.maxUsers)),1)]),_:1}),e(q,{color:t(rl)(m.space)?"error":"success",height:"10","model-value":m.space.userCount/m.space.maxUsers*100},null,8,["color","model-value"])]),_:1})]),_:1}),e(H,{cols:"12",md:"4"},{default:l(()=>[e(I,{to:{name:"ModelListPage",params:{model:"UserFile"}}},{default:l(()=>[e(L,null,{default:l(()=>[b[2]||(b[2]=c("i",{class:"fa-solid fa-file"},null,-1)),p(" "+d(u.$t("Files")),1)]),_:1,__:[2]}),m.space.maxFileStorageMb>-1?($(),k(S,{key:0},{default:l(()=>[p(d(u.$n(Math.round(m.space.fileSizeMb)))+" / "+d(m.space.maxFileStorageMb==0?"∞":u.$n(m.space.maxFileStorageMb))+" MB ",1)]),_:1})):y("",!0),m.space.maxFileStorageMb==-1?($(),k(S,{key:1},{default:l(()=>[p(d(u.$t("file_upload_disabled")),1)]),_:1})):y("",!0),m.space.maxFileStorageMb>-1?($(),k(q,{key:2,color:t(ml)(m.space)?"error":"success",height:"10","model-value":m.space.fileSizeMb/m.space.maxFileStorageMb*100},null,8,["color","model-value"])):y("",!0)]),_:1})]),_:1}),e(H,{cols:"12",md:"6"},{default:l(()=>[e(I,{to:{name:"ModelListPage",params:{model:"AiLog"}}},{default:l(()=>[e(L,null,{default:l(()=>[b[3]||(b[3]=c("i",{class:"fa-solid hand-holding-dollar"},null,-1)),p(" "+d(u.$t("MonthlyCredits")),1)]),_:1,__:[3]}),e(S,null,{default:l(()=>[p(d(u.$n(m.space.aiMonthlyCreditsUsed))+" / "+d(u.$n(m.space.aiCreditsMonthly))+" "+d(u.$t("Credits")),1)]),_:1}),e(q,{"model-value":m.space.aiMonthlyCreditsUsed,max:m.space.aiCreditsMonthly,height:"10"},null,8,["model-value","max"])]),_:1})]),_:1}),e(H,{cols:"12",md:"6"},{default:l(()=>[e(I,{to:{name:"ModelListPage",params:{model:"AiLog"}}},{default:l(()=>[e(L,null,{default:l(()=>[b[4]||(b[4]=c("i",{class:"fa-solid hand-holding-dollar"},null,-1)),p(" "+d(u.$t("AiCreditsBalance")),1)]),_:1,__:[4]}),e(S,null,{default:l(()=>[p(d(u.$n(m.space.aiCreditsBalance))+" "+d(u.$t("Credits")),1)]),_:1}),e(q,{height:"10"})]),_:1})]),_:1})]),_:1})):y("",!0)}}),Il={class:"text-disabled font-italic text-body-2"},hl={key:0},Al={key:1},zl=ae({__name:"SpaceEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(o,{emit:m}){const u=o,b=m,{setupState:V,deleteObject:w,saveObject:C,isUpdate:U,editingObjName:A,loading:R,editingObj:i,editingObjChanged:B,modelClass:v}=bl("Space",b);le([()=>u.item,()=>u.itemId],()=>{f()});const a=D("space");pe(()=>{f()});function f(){V(u.item,u.itemId,{itemDefaults:u.itemDefaults})}return(g,s)=>($(),k(cl,{loading:t(R),dialog:o.dialog,onSave:t(C),onDelete:t(w),onClose:s[20]||(s[20]=n=>{b("close"),B.value=!1}),"is-update":t(U)(),"is-changed":t(B),"model-class":t(v),"object-name":t(A)(),"editing-object":t(i)},{default:l(()=>[e(S,{class:"pa-0"},{default:l(()=>[e(ve,{modelValue:a.value,"onUpdate:modelValue":s[0]||(s[0]=n=>a.value=n),disabled:t(R),grow:""},{default:l(()=>[e(O,{value:"space"},{default:l(()=>[p(d(g.$t("Space")),1)]),_:1}),e(O,{value:"cosmetic"},{default:l(()=>[p(d(g.$t("Cosmetic")),1)]),_:1}),e(O,{value:"ai"},{default:l(()=>[p(d(g.$t("AI")),1)]),_:1})]),_:1},8,["modelValue","disabled"])]),_:1}),e(S,null,{default:l(()=>[e(ge,{modelValue:a.value,"onUpdate:modelValue":s[19]||(s[19]=n=>a.value=n)},{default:l(()=>[e(j,{value:"space"},{default:l(()=>[e(fl,{disabled:t(R)},{default:l(()=>[e(ee,{label:g.$t("Name"),modelValue:t(i).name,"onUpdate:modelValue":s[1]||(s[1]=n=>t(i).name=n)},null,8,["label","modelValue"]),e(M,{modelValue:t(i).image,"onUpdate:modelValue":s[2]||(s[2]=n=>t(i).image=n),label:g.$t("Image"),hint:g.$t("CustomImageHelp"),"persistent-hint":""},null,8,["modelValue","label","hint"]),e(Cl,{modelValue:t(i).message,"onUpdate:modelValue":s[3]||(s[3]=n=>t(i).message=n),label:g.$t("Message"),clearable:""},null,8,["modelValue","label"]),t(U)()?($(),k(Dl,{key:0,space:t(i),"show-thank-you":!1},null,8,["space"])):y("",!0)]),_:1},8,["disabled"])]),_:1}),e(j,{value:"cosmetic"},{default:l(()=>[e(pl,{class:"mt-4"},{default:l(()=>[p(d(g.$t("Nav_Color")),1)]),_:1}),e($l,{modelValue:t(i).navBgColor,"onUpdate:modelValue":s[4]||(s[4]=n=>t(i).navBgColor=n),class:"mb-4",mode:"hex",modes:["hex"],"show-swatches":"",swatches:[["#ddbf86"],["#b98766"],["#b55e4f"],["#82aa8b"],["#385f84"]]},null,8,["modelValue"]),e(h,{class:"mb-4",onClick:s[5]||(s[5]=n=>t(i).navBgColor="")},{default:l(()=>[p(d(g.$t("Reset")),1)]),_:1}),e(M,{modelValue:t(i).navLogo,"onUpdate:modelValue":s[6]||(s[6]=n=>t(i).navLogo=n),label:g.$t("Logo"),hint:g.$t("CustomNavLogoHelp"),"persistent-hint":""},null,8,["modelValue","label","hint"]),e(M,{modelValue:t(i).logoColor32,"onUpdate:modelValue":s[7]||(s[7]=n=>t(i).logoColor32=n),label:g.$t("Logo")+" 32x32px"},null,8,["modelValue","label"]),e(M,{modelValue:t(i).logoColor128,"onUpdate:modelValue":s[8]||(s[8]=n=>t(i).logoColor128=n),label:g.$t("Logo")+" 128x128px"},null,8,["modelValue","label"]),e(M,{modelValue:t(i).logoColor144,"onUpdate:modelValue":s[9]||(s[9]=n=>t(i).logoColor144=n),label:g.$t("Logo")+" 144x144px"},null,8,["modelValue","label"]),e(M,{modelValue:t(i).logoColor180,"onUpdate:modelValue":s[10]||(s[10]=n=>t(i).logoColor180=n),label:g.$t("Logo")+" 180x180px"},null,8,["modelValue","label"]),e(M,{modelValue:t(i).logoColor192,"onUpdate:modelValue":s[11]||(s[11]=n=>t(i).logoColor192=n),label:g.$t("Logo")+" 192x192px"},null,8,["modelValue","label"]),e(M,{modelValue:t(i).logoColor512,"onUpdate:modelValue":s[12]||(s[12]=n=>t(i).logoColor512=n),label:g.$t("Logo")+" 512x512px"},null,8,["modelValue","label"]),e(M,{modelValue:t(i).logoColorSvg,"onUpdate:modelValue":s[13]||(s[13]=n=>t(i).logoColorSvg=n),label:g.$t("Logo")+" SVG"},null,8,["modelValue","label"]),e(M,{modelValue:t(i).customSpaceTheme,"onUpdate:modelValue":s[14]||(s[14]=n=>t(i).customSpaceTheme=n),label:g.$t("CustomTheme")+" CSS"},null,8,["modelValue","label"])]),_:1}),e(j,{value:"ai"},{default:l(()=>[c("p",Il,[t(Q)().serverSettings.hosted?($(),T("span",hl,d(g.$t("AISettingsHostedHelp")),1)):($(),T("span",Al,d(g.$t("SettingsOnlySuperuser")),1))]),e(vl,{modelValue:t(i).aiEnabled,"onUpdate:modelValue":s[15]||(s[15]=n=>t(i).aiEnabled=n),label:g.$t("Enabled"),disabled:!t(Q)().userSettings.user.isSuperuser,"hide-details":""},null,8,["modelValue","label","disabled"]),t(i).aiEnabled?($(),T(z,{key:0},[e(gl,{model:"AiProvider",label:g.$t("Default"),modelValue:t(i).aiDefaultProvider,"onUpdate:modelValue":s[16]||(s[16]=n=>t(i).aiDefaultProvider=n)},null,8,["label","modelValue"]),e(me,{modelValue:t(i).aiCreditsMonthly,"onUpdate:modelValue":s[17]||(s[17]=n=>t(i).aiCreditsMonthly=n),precision:2,label:g.$t("MonthlyCredits"),disabled:!t(Q)().userSettings.user.isSuperuser},null,8,["modelValue","label","disabled"]),e(me,{modelValue:t(i).aiCreditsBalance,"onUpdate:modelValue":s[18]||(s[18]=n=>t(i).aiCreditsBalance=n),precision:4,label:g.$t("AiCreditsBalance"),disabled:!t(Q)().userSettings.user.isSuperuser},null,8,["modelValue","label","disabled"])],64)):y("",!0)]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{zl as _};
diff --git a/config/tandoor/staticfiles/vue3/assets/SpaceEditor.vue_vue_type_script_setup_true_lang-BWOLGWRZ.2efce23f9159.js.gz b/config/tandoor/staticfiles/vue3/assets/SpaceEditor.vue_vue_type_script_setup_true_lang-BWOLGWRZ.2efce23f9159.js.gz
deleted file mode 100644
index db08b6d3..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/SpaceEditor.vue_vue_type_script_setup_true_lang-BWOLGWRZ.2efce23f9159.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SpaceEditor.vue_vue_type_script_setup_true_lang-BWOLGWRZ.js b/config/tandoor/staticfiles/vue3/assets/SpaceEditor.vue_vue_type_script_setup_true_lang-BWOLGWRZ.js
deleted file mode 100644
index 6e5a0a0f..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SpaceEditor.vue_vue_type_script_setup_true_lang-BWOLGWRZ.js
+++ /dev/null
@@ -1 +0,0 @@
-import{ak as Le,al as Te,ao as Ne,bj as ze,bO as fe,cn as Oe,c as N,cz as se,r as D,bZ as je,bJ as He,aM as le,at as qe,cA as Je,aK as _,cB as ie,g as e,av as Z,c2 as Ge,cC as Ke,co as Qe,i as c,F as z,cD as We,n as Xe,ai as Ze,aT as Ye,cE as xe,d as ae,aL as de,aH as _e,u as el,D as G,o as pe,A as ll,Q as Y,R as re,b as T,w as l,M as I,O as S,h as k,e as y,I as K,t as d,aN as al,N as L,j as p,l as t,b9 as tl,aP as x,z as h,S as ee,cF as ol,bR as nl,bU as ul,ad as sl,f as $,k as il,V as H,b7 as q,cG as dl,cH as rl,cI as ml,ac as fl,ae as pl,U as vl,ag as gl,af as me,L as Q}from"./main-BhFWIRV_.js";import{u as bl,_ as cl}from"./useModelEditorFunctions-Du2kfr61.js";import{a as ve,V as O,b as ge,c as j}from"./VTabs-BQFRhgOd.js";import{u as Vl}from"./fileDrop-BjiZTCss.js";import{V as Cl}from"./VTextarea-Dyu7dPGe.js";import{V as $l}from"./VColorPicker-DN5Oz5I8.js";const yl=Te({chips:Boolean,counter:Boolean,counterSizeString:{type:String,default:"$vuetify.fileInput.counterSize"},counterString:{type:String,default:"$vuetify.fileInput.counter"},hideInput:Boolean,multiple:Boolean,showSize:{type:[Boolean,Number,String],default:!1,validator:o=>typeof o=="boolean"||[1e3,1024].includes(Number(o))},...Qe({prependIcon:"$file"}),modelValue:{type:[Array,Object],default:o=>o.multiple?[]:null,validator:o=>fe(o).every(m=>m!=null&&typeof m=="object")},...Ke({clearable:!0})},"VFileInput"),Sl=Le()({name:"VFileInput",inheritAttrs:!1,props:yl(),emits:{"click:control":o=>!0,"mousedown:control":o=>!0,"update:focused":o=>!0,"update:modelValue":o=>!0},setup(o,m){let{attrs:u,emit:b,slots:V}=m;const{t:w}=Ne(),C=ze(o,"modelValue",o.modelValue,r=>fe(r),r=>!o.multiple&&Array.isArray(r)?r[0]:r),{isFocused:U,focus:A,blur:R}=Oe(o),i=N(()=>typeof o.showSize!="boolean"?o.showSize:void 0),B=N(()=>(C.value??[]).reduce((r,F)=>{let{size:E=0}=F;return r+E},0)),v=N(()=>se(B.value,i.value)),a=N(()=>(C.value??[]).map(r=>{const{name:F="",size:E=0}=r;return o.showSize?`${F} (${se(E,i.value)})`:F})),f=N(()=>{const r=C.value?.length??0;return o.showSize?w(o.counterSizeString,r,v.value):w(o.counterString,r)}),g=D(),s=D(),n=D(),be=je(()=>U.value||o.active),te=N(()=>["plain","underlined"].includes(o.variant)),J=He(!1),{handleDrop:ce,hasFilesOrFolders:Ve}=Vl();function W(){n.value!==document.activeElement&&n.value?.focus(),U.value||A()}function Ce(r){n.value?.click()}function $e(r){b("mousedown:control",r)}function ye(r){n.value?.click(),b("click:control",r)}function Se(r){r.stopPropagation(),W(),Ye(()=>{C.value=[],xe(o["onClick:clear"],r)})}function ke(r){r.preventDefault(),r.stopImmediatePropagation(),J.value=!0}function we(r){r.preventDefault(),J.value=!1}async function Ue(r){if(r.preventDefault(),r.stopImmediatePropagation(),J.value=!1,!n.value||!Ve(r))return;const F=new DataTransfer;for(const E of await ce(r))F.items.add(E);n.value.files=F.files,n.value.dispatchEvent(new Event("change",{bubbles:!0}))}return le(C,r=>{(!Array.isArray(r)||!r.length)&&n.value&&(n.value.value="")}),qe(()=>{const r=!!(V.counter||o.counter),F=!!(r||V.details),[E,Fe]=Je(u),{modelValue:Pl,...Me}=_.filterProps(o),De={...ie.filterProps(o),"onClick:clear":Se};return e(_,Z({ref:g,modelValue:o.multiple?C.value:C.value[0],class:["v-file-input",{"v-file-input--chips":!!o.chips,"v-file-input--dragging":J.value,"v-file-input--hide":o.hideInput,"v-input--plain-underlined":te.value},o.class],style:o.style,"onClick:prepend":Ce},E,Me,{centerAffix:!te.value,focused:U.value}),{...V,default:X=>{let{id:Ie,isDisabled:oe,isDirty:ne,isReadonly:ue,isValid:he,hasDetails:Ae}=X;return e(ie,Z({ref:s,prependIcon:o.prependIcon,onMousedown:$e,onClick:ye,"onClick:prependInner":o["onClick:prependInner"],"onClick:appendInner":o["onClick:appendInner"]},De,{id:Ie.value,active:be.value||ne.value,dirty:ne.value||o.dirty,disabled:oe.value,focused:U.value,details:Ae.value,error:he.value===!1,onDragover:ke,onDrop:Ue}),{...V,default:Pe=>{let{props:{class:Re,...Be}}=Pe;return c(z,null,[c("input",Z({ref:n,type:"file",readonly:ue.value,disabled:oe.value,multiple:o.multiple,name:o.name,onClick:P=>{P.stopPropagation(),ue.value&&P.preventDefault(),W()},onChange:P=>{if(!P.target)return;const Ee=P.target;C.value=[...Ee.files??[]]},onDragleave:we,onFocus:W,onBlur:R},Be,Fe),null),c("div",{class:Xe(Re)},[!!C.value?.length&&!o.hideInput&&(V.selection?V.selection({fileNames:a.value,totalBytes:B.value,totalBytesReadable:v.value}):o.chips?a.value.map(P=>e(Ze,{key:P,size:"small",text:P},null)):a.value.join(", "))])])}})},details:F?X=>c(z,null,[V.details?.(X),r&&c(z,null,[c("span",null,null),e(We,{active:!!C.value?.length,value:f.value,disabled:o.disabled},V.counter)])]):void 0})}),Ge({},g,s,n)}}),kl={class:"d-flex flex-row"},wl={class:"align-content-center"},Ul={class:"ms-2 text-disabled"},Fl={key:1,class:"ms-2"},Ml={key:2,class:"ms-2"},M=ae({__name:"UserFileField",props:de({model:{type:{},default:null},label:{type:String,default:""},hint:{type:String,default:""},persistentHint:{type:Boolean,default:!1}},{modelValue:{},modelModifiers:{}}),emits:de(["update:modelValue","create"],["update:modelValue"]),setup(o,{emit:m}){const u=_e(o,"modelValue"),{t:b}=el(),V=D(!1),w=D(0),C=D({}),U=D([]),A=D(""),R=D([{title:b("Quick actions"),key:"actions"},{title:b("Preview"),key:"preview"},{title:b("Name"),value:"name"},{title:b("created_on"),key:"createdAt",value:v=>G.fromJSDate(v.createdAt).toLocaleString(G.DATETIME_MED)},{title:b("created_by"),value:"createdBy.displayName"}]);pe(()=>{}),le(()=>V.value,(v,a)=>{v&&!a&&i()});function i(){new ll().apiUserFileList().then(a=>{U.value=a.results}).catch(a=>{Y().addError(re.FETCH_ERROR,a)})}function B(){let v=new FormData;v.append("file",C.value.file),v.append("name",C.value.name),fetch("/api/user-file/",{method:"POST",headers:{"X-CSRFToken":nl("csrftoken")},body:v}).then(a=>{a.json().then(f=>{u.value=ul(f)}),Y().addPreparedMessage(sl.CREATE_SUCCESS)}).catch(a=>{Y().addError(re.CREATE_ERROR,a)})}return(v,a)=>($(),T(z,null,[e(_,{hint:o.hint,"persistent-hint":o.persistentHint},{default:l(()=>[e(I,{width:"100%",link:"",onClick:a[0]||(a[0]=f=>V.value=!V.value)},{default:l(()=>[e(S,{class:"pt-2 pb-2"},{default:l(()=>[c("div",kl,[c("div",null,[u.value==null?($(),k(K,{key:0,color:"primary"},{default:l(()=>a[14]||(a[14]=[c("i",{class:"fa-solid fa-file-arrow-up"},null,-1)])),_:1,__:[14]})):y("",!0),u.value!=null&&u.value.preview!=""?($(),k(K,{key:1,image:u.value.preview},null,8,["image"])):y("",!0),u.value!=null&&u.value.preview==""?($(),k(K,{key:2,color:"success"},{default:l(()=>a[15]||(a[15]=[c("i",{class:"fa-solid fa-eye-slash"},null,-1)])),_:1,__:[15]})):y("",!0)]),c("div",wl,[o.label!=""?($(),T(z,{key:0},[c("span",Ul,d(o.label),1),a[16]||(a[16]=c("br",null,null,-1))],64)):y("",!0),u.value==null?($(),T("span",Fl,d(v.$t("select_file")),1)):y("",!0),u.value!=null?($(),T("span",Ml,d(u.value.name),1)):y("",!0)])])]),_:1})]),_:1})]),_:1},8,["hint","persistent-hint"]),e(al,{"max-width":"1000px",height:"90vh",modelValue:V.value,"onUpdate:modelValue":a[13]||(a[13]=f=>V.value=f)},{default:l(()=>[e(I,null,{default:l(()=>[e(L,null,{default:l(()=>[p(d(v.$t("Files")),1)]),_:1}),e(ve,{modelValue:w.value,"onUpdate:modelValue":a[1]||(a[1]=f=>w.value=f),grow:""},{default:l(()=>[u.value!=null?($(),k(O,{key:0},{default:l(()=>[p(d(v.$t("Preview")),1)]),_:1})):y("",!0),e(O,null,{default:l(()=>[p(d(v.$t("New")),1)]),_:1}),e(O,null,{default:l(()=>[p(d(v.$t("Search")),1)]),_:1})]),_:1},8,["modelValue"]),e(ge,{modelValue:w.value,"onUpdate:modelValue":a[12]||(a[12]=f=>w.value=f)},{default:l(()=>[u.value!=null?($(),k(j,{key:0},{default:l(()=>[e(I,null,{default:l(()=>[e(L,null,{default:l(()=>[p(d(u.value.name),1)]),_:1}),e(S,null,{default:l(()=>[p(d(v.$n(u.value.fileSizeKb/1e3))+" MB ",1),a[17]||(a[17]=c("br",null,null,-1)),p(" "+d(u.value.createdBy.displayName)+" ",1),a[18]||(a[18]=c("br",null,null,-1)),p(" "+d(t(G).fromJSDate(u.value.createdAt).toLocaleString(t(G).DATETIME_SHORT)),1)]),_:1,__:[17,18]}),e(tl,{class:"mr-4 ml-4","max-height":"50vh",rounded:"",src:u.value.preview},null,8,["src"]),e(x,null,{default:l(()=>[e(h,{href:u.value.fileDownload,target:"_blank",color:"success","prepend-icon":"fa-solid fa-file-arrow-down"},{default:l(()=>[p(d(v.$t("Download")),1)]),_:1},8,["href"]),e(h,{color:"warning","prepend-icon":"fa-solid fa-link-slash",onClick:a[2]||(a[2]=f=>u.value=null)},{default:l(()=>[p(d(v.$t("Remove")),1)]),_:1}),e(h,{color:"delete","prepend-icon":"$delete",onClick:a[3]||(a[3]=f=>u.value=null)},{default:l(()=>[p(d(v.$t("Delete")),1)]),_:1}),e(h,{onClick:a[4]||(a[4]=f=>V.value=!1)},{default:l(()=>[p(d(v.$t("Close")),1)]),_:1})]),_:1})]),_:1})]),_:1})):y("",!0),e(j,null,{default:l(()=>[e(I,null,{default:l(()=>[e(S,null,{default:l(()=>[e(ee,{label:v.$t("Name"),modelValue:C.value.name,"onUpdate:modelValue":a[5]||(a[5]=f=>C.value.name=f)},null,8,["label","modelValue"]),e(Sl,{label:v.$t("File"),modelValue:C.value.file,"onUpdate:modelValue":a[6]||(a[6]=f=>C.value.file=f)},null,8,["label","modelValue"])]),_:1}),e(x,null,{default:l(()=>[e(h,{color:"save","prepend-icon":"$save",onClick:a[7]||(a[7]=f=>B())},{default:l(()=>[p(d(v.$t("Save")),1)]),_:1}),e(h,{onClick:a[8]||(a[8]=f=>V.value=!1)},{default:l(()=>[p(d(v.$t("Close")),1)]),_:1})]),_:1})]),_:1})]),_:1}),e(j,null,{default:l(()=>[e(I,null,{default:l(()=>[e(S,null,{default:l(()=>[e(ee,{label:v.$t("Search"),"prepend-inner-icon":"$search",modelValue:A.value,"onUpdate:modelValue":a[9]||(a[9]=f=>A.value=f)},null,8,["label","modelValue"]),e(ol,{density:"compact",headers:R.value,items:U.value,search:A.value,"onUpdate:search":a[10]||(a[10]=f=>A.value=f)},{"item.preview":l(({item:f})=>[e(K,{image:f.preview},null,8,["image"])]),"item.actions":l(({item:f})=>[e(h,{icon:"fa-solid fa-hand-pointer",color:"save",density:"comfortable",onClick:g=>{u.value=f,w.value=0}},null,8,["onClick"])]),_:1},8,["headers","items","search"])]),_:1}),e(x,null,{default:l(()=>[e(h,{onClick:a[11]||(a[11]=f=>V.value=!1)},{default:l(()=>[p(d(v.$t("Close")),1)]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["modelValue"])],64))}}),Dl=ae({__name:"SpaceLimitsInfo",props:{space:{type:{},required:!0}},setup(o){const m=o;return(u,b)=>m.space.name!=null?($(),k(il,{key:0},{default:l(()=>[e(H,{cols:"12",md:"4"},{default:l(()=>[e(I,{to:{name:"SearchPage"}},{default:l(()=>[e(L,null,{default:l(()=>[b[0]||(b[0]=c("i",{class:"fa-solid fa-book"},null,-1)),p(" "+d(u.$t("Recipes")),1)]),_:1,__:[0]}),e(S,null,{default:l(()=>[p(d(u.$n(m.space.recipeCount))+" / "+d(m.space.maxRecipes==0?"∞":u.$n(m.space.maxRecipes)),1)]),_:1}),e(q,{color:t(dl)(m.space)?"error":"success",height:"10","model-value":m.space.recipeCount/m.space.maxRecipes*100},null,8,["color","model-value"])]),_:1})]),_:1}),e(H,{cols:"12",md:"4"},{default:l(()=>[e(I,{to:{name:"ModelListPage",params:{model:"UserSpace"}}},{default:l(()=>[e(L,null,{default:l(()=>[b[1]||(b[1]=c("i",{class:"fa-solid fa-users"},null,-1)),p(" "+d(u.$t("Users")),1)]),_:1,__:[1]}),e(S,null,{default:l(()=>[p(d(u.$n(m.space.userCount))+" / "+d(m.space.maxUsers==0?"∞":u.$n(m.space.maxUsers)),1)]),_:1}),e(q,{color:t(rl)(m.space)?"error":"success",height:"10","model-value":m.space.userCount/m.space.maxUsers*100},null,8,["color","model-value"])]),_:1})]),_:1}),e(H,{cols:"12",md:"4"},{default:l(()=>[e(I,{to:{name:"ModelListPage",params:{model:"UserFile"}}},{default:l(()=>[e(L,null,{default:l(()=>[b[2]||(b[2]=c("i",{class:"fa-solid fa-file"},null,-1)),p(" "+d(u.$t("Files")),1)]),_:1,__:[2]}),m.space.maxFileStorageMb>-1?($(),k(S,{key:0},{default:l(()=>[p(d(u.$n(Math.round(m.space.fileSizeMb)))+" / "+d(m.space.maxFileStorageMb==0?"∞":u.$n(m.space.maxFileStorageMb))+" MB ",1)]),_:1})):y("",!0),m.space.maxFileStorageMb==-1?($(),k(S,{key:1},{default:l(()=>[p(d(u.$t("file_upload_disabled")),1)]),_:1})):y("",!0),m.space.maxFileStorageMb>-1?($(),k(q,{key:2,color:t(ml)(m.space)?"error":"success",height:"10","model-value":m.space.fileSizeMb/m.space.maxFileStorageMb*100},null,8,["color","model-value"])):y("",!0)]),_:1})]),_:1}),e(H,{cols:"12",md:"6"},{default:l(()=>[e(I,{to:{name:"ModelListPage",params:{model:"AiLog"}}},{default:l(()=>[e(L,null,{default:l(()=>[b[3]||(b[3]=c("i",{class:"fa-solid hand-holding-dollar"},null,-1)),p(" "+d(u.$t("MonthlyCredits")),1)]),_:1,__:[3]}),e(S,null,{default:l(()=>[p(d(u.$n(m.space.aiMonthlyCreditsUsed))+" / "+d(u.$n(m.space.aiCreditsMonthly))+" "+d(u.$t("Credits")),1)]),_:1}),e(q,{"model-value":m.space.aiMonthlyCreditsUsed,max:m.space.aiCreditsMonthly,height:"10"},null,8,["model-value","max"])]),_:1})]),_:1}),e(H,{cols:"12",md:"6"},{default:l(()=>[e(I,{to:{name:"ModelListPage",params:{model:"AiLog"}}},{default:l(()=>[e(L,null,{default:l(()=>[b[4]||(b[4]=c("i",{class:"fa-solid hand-holding-dollar"},null,-1)),p(" "+d(u.$t("AiCreditsBalance")),1)]),_:1,__:[4]}),e(S,null,{default:l(()=>[p(d(u.$n(m.space.aiCreditsBalance))+" "+d(u.$t("Credits")),1)]),_:1}),e(q,{height:"10"})]),_:1})]),_:1})]),_:1})):y("",!0)}}),Il={class:"text-disabled font-italic text-body-2"},hl={key:0},Al={key:1},zl=ae({__name:"SpaceEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(o,{emit:m}){const u=o,b=m,{setupState:V,deleteObject:w,saveObject:C,isUpdate:U,editingObjName:A,loading:R,editingObj:i,editingObjChanged:B,modelClass:v}=bl("Space",b);le([()=>u.item,()=>u.itemId],()=>{f()});const a=D("space");pe(()=>{f()});function f(){V(u.item,u.itemId,{itemDefaults:u.itemDefaults})}return(g,s)=>($(),k(cl,{loading:t(R),dialog:o.dialog,onSave:t(C),onDelete:t(w),onClose:s[20]||(s[20]=n=>{b("close"),B.value=!1}),"is-update":t(U)(),"is-changed":t(B),"model-class":t(v),"object-name":t(A)(),"editing-object":t(i)},{default:l(()=>[e(S,{class:"pa-0"},{default:l(()=>[e(ve,{modelValue:a.value,"onUpdate:modelValue":s[0]||(s[0]=n=>a.value=n),disabled:t(R),grow:""},{default:l(()=>[e(O,{value:"space"},{default:l(()=>[p(d(g.$t("Space")),1)]),_:1}),e(O,{value:"cosmetic"},{default:l(()=>[p(d(g.$t("Cosmetic")),1)]),_:1}),e(O,{value:"ai"},{default:l(()=>[p(d(g.$t("AI")),1)]),_:1})]),_:1},8,["modelValue","disabled"])]),_:1}),e(S,null,{default:l(()=>[e(ge,{modelValue:a.value,"onUpdate:modelValue":s[19]||(s[19]=n=>a.value=n)},{default:l(()=>[e(j,{value:"space"},{default:l(()=>[e(fl,{disabled:t(R)},{default:l(()=>[e(ee,{label:g.$t("Name"),modelValue:t(i).name,"onUpdate:modelValue":s[1]||(s[1]=n=>t(i).name=n)},null,8,["label","modelValue"]),e(M,{modelValue:t(i).image,"onUpdate:modelValue":s[2]||(s[2]=n=>t(i).image=n),label:g.$t("Image"),hint:g.$t("CustomImageHelp"),"persistent-hint":""},null,8,["modelValue","label","hint"]),e(Cl,{modelValue:t(i).message,"onUpdate:modelValue":s[3]||(s[3]=n=>t(i).message=n),label:g.$t("Message"),clearable:""},null,8,["modelValue","label"]),t(U)()?($(),k(Dl,{key:0,space:t(i),"show-thank-you":!1},null,8,["space"])):y("",!0)]),_:1},8,["disabled"])]),_:1}),e(j,{value:"cosmetic"},{default:l(()=>[e(pl,{class:"mt-4"},{default:l(()=>[p(d(g.$t("Nav_Color")),1)]),_:1}),e($l,{modelValue:t(i).navBgColor,"onUpdate:modelValue":s[4]||(s[4]=n=>t(i).navBgColor=n),class:"mb-4",mode:"hex",modes:["hex"],"show-swatches":"",swatches:[["#ddbf86"],["#b98766"],["#b55e4f"],["#82aa8b"],["#385f84"]]},null,8,["modelValue"]),e(h,{class:"mb-4",onClick:s[5]||(s[5]=n=>t(i).navBgColor="")},{default:l(()=>[p(d(g.$t("Reset")),1)]),_:1}),e(M,{modelValue:t(i).navLogo,"onUpdate:modelValue":s[6]||(s[6]=n=>t(i).navLogo=n),label:g.$t("Logo"),hint:g.$t("CustomNavLogoHelp"),"persistent-hint":""},null,8,["modelValue","label","hint"]),e(M,{modelValue:t(i).logoColor32,"onUpdate:modelValue":s[7]||(s[7]=n=>t(i).logoColor32=n),label:g.$t("Logo")+" 32x32px"},null,8,["modelValue","label"]),e(M,{modelValue:t(i).logoColor128,"onUpdate:modelValue":s[8]||(s[8]=n=>t(i).logoColor128=n),label:g.$t("Logo")+" 128x128px"},null,8,["modelValue","label"]),e(M,{modelValue:t(i).logoColor144,"onUpdate:modelValue":s[9]||(s[9]=n=>t(i).logoColor144=n),label:g.$t("Logo")+" 144x144px"},null,8,["modelValue","label"]),e(M,{modelValue:t(i).logoColor180,"onUpdate:modelValue":s[10]||(s[10]=n=>t(i).logoColor180=n),label:g.$t("Logo")+" 180x180px"},null,8,["modelValue","label"]),e(M,{modelValue:t(i).logoColor192,"onUpdate:modelValue":s[11]||(s[11]=n=>t(i).logoColor192=n),label:g.$t("Logo")+" 192x192px"},null,8,["modelValue","label"]),e(M,{modelValue:t(i).logoColor512,"onUpdate:modelValue":s[12]||(s[12]=n=>t(i).logoColor512=n),label:g.$t("Logo")+" 512x512px"},null,8,["modelValue","label"]),e(M,{modelValue:t(i).logoColorSvg,"onUpdate:modelValue":s[13]||(s[13]=n=>t(i).logoColorSvg=n),label:g.$t("Logo")+" SVG"},null,8,["modelValue","label"]),e(M,{modelValue:t(i).customSpaceTheme,"onUpdate:modelValue":s[14]||(s[14]=n=>t(i).customSpaceTheme=n),label:g.$t("CustomTheme")+" CSS"},null,8,["modelValue","label"])]),_:1}),e(j,{value:"ai"},{default:l(()=>[c("p",Il,[t(Q)().serverSettings.hosted?($(),T("span",hl,d(g.$t("AISettingsHostedHelp")),1)):($(),T("span",Al,d(g.$t("SettingsOnlySuperuser")),1))]),e(vl,{modelValue:t(i).aiEnabled,"onUpdate:modelValue":s[15]||(s[15]=n=>t(i).aiEnabled=n),label:g.$t("Enabled"),disabled:!t(Q)().userSettings.user.isSuperuser,"hide-details":""},null,8,["modelValue","label","disabled"]),t(i).aiEnabled?($(),T(z,{key:0},[e(gl,{model:"AiProvider",label:g.$t("Default"),modelValue:t(i).aiDefaultProvider,"onUpdate:modelValue":s[16]||(s[16]=n=>t(i).aiDefaultProvider=n)},null,8,["label","modelValue"]),e(me,{modelValue:t(i).aiCreditsMonthly,"onUpdate:modelValue":s[17]||(s[17]=n=>t(i).aiCreditsMonthly=n),precision:2,label:g.$t("MonthlyCredits"),disabled:!t(Q)().userSettings.user.isSuperuser},null,8,["modelValue","label","disabled"]),e(me,{modelValue:t(i).aiCreditsBalance,"onUpdate:modelValue":s[18]||(s[18]=n=>t(i).aiCreditsBalance=n),precision:4,label:g.$t("AiCreditsBalance"),disabled:!t(Q)().userSettings.user.isSuperuser},null,8,["modelValue","label","disabled"])],64)):y("",!0)]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{zl as _};
diff --git a/config/tandoor/staticfiles/vue3/assets/SpaceEditor.vue_vue_type_script_setup_true_lang-BWOLGWRZ.js.gz b/config/tandoor/staticfiles/vue3/assets/SpaceEditor.vue_vue_type_script_setup_true_lang-BWOLGWRZ.js.gz
deleted file mode 100644
index db08b6d3..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/SpaceEditor.vue_vue_type_script_setup_true_lang-BWOLGWRZ.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SpaceSettings-sHmxWilN.78593251ae6a.js b/config/tandoor/staticfiles/vue3/assets/SpaceSettings-sHmxWilN.78593251ae6a.js
deleted file mode 100644
index f56b4d3b..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SpaceSettings-sHmxWilN.78593251ae6a.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as s,h as r,w as i,ac as o,i as c,g as e,t as m,l as t,B as p,f as n,L as a}from"./main-BhFWIRV_.js";import{_}from"./SpaceEditor.vue_vue_type_script_setup_true_lang-BWOLGWRZ.js";import"./useModelEditorFunctions-Du2kfr61.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import"./VTabs-BQFRhgOd.js";import"./fileDrop-BjiZTCss.js";import"./VTextarea-Dyu7dPGe.js";import"./VColorPicker-DN5Oz5I8.js";const l={class:"text-h6"},w=s({__name:"SpaceSettings",setup(d){return(f,u)=>(n(),r(o,null,{default:i(()=>[c("p",l,m(t(a)().activeSpace.name),1),e(p,{class:"mb-3"}),e(_,{"item-id":t(a)().activeSpace.id},null,8,["item-id"])]),_:1}))}});export{w as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/SpaceSettings-sHmxWilN.78593251ae6a.js.gz b/config/tandoor/staticfiles/vue3/assets/SpaceSettings-sHmxWilN.78593251ae6a.js.gz
deleted file mode 100644
index b712c4fc..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/SpaceSettings-sHmxWilN.78593251ae6a.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SpaceSettings-sHmxWilN.js b/config/tandoor/staticfiles/vue3/assets/SpaceSettings-sHmxWilN.js
deleted file mode 100644
index f56b4d3b..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SpaceSettings-sHmxWilN.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as s,h as r,w as i,ac as o,i as c,g as e,t as m,l as t,B as p,f as n,L as a}from"./main-BhFWIRV_.js";import{_}from"./SpaceEditor.vue_vue_type_script_setup_true_lang-BWOLGWRZ.js";import"./useModelEditorFunctions-Du2kfr61.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import"./VTabs-BQFRhgOd.js";import"./fileDrop-BjiZTCss.js";import"./VTextarea-Dyu7dPGe.js";import"./VColorPicker-DN5Oz5I8.js";const l={class:"text-h6"},w=s({__name:"SpaceSettings",setup(d){return(f,u)=>(n(),r(o,null,{default:i(()=>[c("p",l,m(t(a)().activeSpace.name),1),e(p,{class:"mb-3"}),e(_,{"item-id":t(a)().activeSpace.id},null,8,["item-id"])]),_:1}))}});export{w as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/SpaceSettings-sHmxWilN.js.gz b/config/tandoor/staticfiles/vue3/assets/SpaceSettings-sHmxWilN.js.gz
deleted file mode 100644
index b712c4fc..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/SpaceSettings-sHmxWilN.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SpaceSetupPage-1bx6rG8x.9d329fbd8ab9.js b/config/tandoor/staticfiles/vue3/assets/SpaceSetupPage-1bx6rG8x.9d329fbd8ab9.js
deleted file mode 100644
index 1c49dec0..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SpaceSetupPage-1bx6rG8x.9d329fbd8ab9.js
+++ /dev/null
@@ -1 +0,0 @@
-import{P as e}from"./main-BhFWIRV_.js";const c={};function r(t,n){return null}const a=e(c,[["render",r]]);export{a as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/SpaceSetupPage-1bx6rG8x.js b/config/tandoor/staticfiles/vue3/assets/SpaceSetupPage-1bx6rG8x.js
deleted file mode 100644
index 1c49dec0..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SpaceSetupPage-1bx6rG8x.js
+++ /dev/null
@@ -1 +0,0 @@
-import{P as e}from"./main-BhFWIRV_.js";const c={};function r(t,n){return null}const a=e(c,[["render",r]]);export{a as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/StartPage-CQln-PMM.a3985c2b1dd1.js b/config/tandoor/staticfiles/vue3/assets/StartPage-CQln-PMM.a3985c2b1dd1.js
deleted file mode 100644
index 34756a70..00000000
--- a/config/tandoor/staticfiles/vue3/assets/StartPage-CQln-PMM.a3985c2b1dd1.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as F,u as Y,a as Q,r as S,c as D,o as j,A as J,b as _,e as o,f as t,g as a,h as l,w as e,V as b,i as k,j as z,n as Z,t as y,k as R,l as L,m as T,F as C,p as M,q,s as G,D as I,v as E,x as U,y as O,z as B,B as ee,C as te,E as ae,_ as W,G as H,H as le,I as K,J as se,K as re,L as ne,M as A,N as oe,O as ue}from"./main-BhFWIRV_.js";import{R as ie}from"./RecipeCard-ZQiVryVZ.js";import{V as de}from"./AddToShoppingDialog.vue_vue_type_script_setup_true_lang-ByrmCw9F.js";import"./KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.js";import"./PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.js";import"./BtnCopy.vue_vue_type_script_setup_true_lang-B_1A58TG.js";import"./VTooltip-CP00KBBq.js";import"./useFileApi-4KcBp6Fj.js";import"./number_utils-1sJWKMUK.js";import"./model_utils-CVQgSPL_.js";function X($){switch($){case"xs":return 1;case"sm":return 2;case"md":return 4;case"lg":return 4;case"xl":return 5;case"xxl":return 6;default:return 1}}const V=F({__name:"HorizontalRecipeWindow",props:{mode:{type:String,required:!0},skeletons:{type:Number,default:0}},setup($){const n=$,{t:i}=Y(),{name:v}=Q(),p=S(!0),w=S([]),P=S({}),g=S({}),N=D(()=>{switch(n.mode){case"recent":return i("Recently_Viewed");case"random":return i("Random Recipes");case"new":return i("New");case"rating":return i("Rating");case"keyword":return Object.keys(P.value).length>0?P.value.label:i("Keyword");case"created_by":return Object.keys(g.value).length>0?i("CreatedBy")+" "+g.value.displayName:i("CreatedBy")}}),c=D(()=>{switch(n.mode){case"recent":return"fa-solid fa-eye";case"random":return"fa-solid fa-dice";case"new":return"fa-solid fa-calendar-alt";case"rating":return"fa-solid fa-star";case"keyword":return"fa-solid fa-tags";case"created_by":return"fa-solid fa-user"}}),u=D(()=>X(v.value));j(()=>{f()});function f(){let s=new J,r={pageSize:16};switch(n.mode){case"recent":r.numRecent=16;break;case"random":r.random="true";break;case"new":r._new="true";break;case"rating":r.rating=4;break;case"keyword":s.apiKeywordList({random:"true",limit:"1"}).then(d=>{d.count>0?(P.value=d.results[0],r.keywords=[P.value.id],m(r)):p.value=!1});return;case"created_by":s.apiUserList({}).then(d=>{d.length>0?(g.value=d[Math.floor(Math.random()*d.length)],r.createdby=g.value.id,r.random="true",m(r)):p.value=!1});return}m(r)}function m(s){new J().apiRecipeList(s).then(d=>{n.mode=="new"?w.value=d.results.filter(h=>h._new):n.mode=="recent"?w.value=d.results.filter(h=>h.recent!="0"):w.value=d.results}).finally(()=>{p.value=!1})}let x=D(()=>{let s=[],r=[];for(const[d,h]of w?.value.entries())r.push(h),d%u.value==u.value-1&&(r.length>0&&s.push(r),r=[]);return r.length>0&&s.push(r),s});return(s,r)=>p.value||w.value.length>0?(t(),_(C,{key:0},[a(R,{justify:"space-between"},{default:e(()=>[a(b,null,{default:e(()=>[k("h4",null,[k("i",{class:Z(c.value+" fa-fw")},null,2),z(" "+y(N.value),1)])]),_:1})]),_:1}),L(x).length>0?(t(),l(R,{key:0,class:"mt-0"},{default:e(()=>[a(b,null,{default:e(()=>[a(T,{"show-arrows":""},{default:e(()=>[(t(!0),_(C,null,M(L(x),d=>(t(),l(q,{class:"pt-1 pb-1"},{default:e(()=>[a(R,{dense:""},{default:e(()=>[(t(!0),_(C,null,M(d,h=>(t(),l(b,{class:"pr-0 pl-0",key:h.id},{default:e(()=>[a(ie,{recipe:h,show_description:!0,show_keywords:!0},null,8,["recipe"])]),_:2},1024))),128))]),_:2},1024)]),_:2},1024))),256))]),_:1})]),_:1})]),_:1})):o("",!0),$.skeletons>0&&p.value?(t(),l(R,{key:1},{default:e(()=>[a(b,null,{default:e(()=>[a(T,null,{default:e(()=>[a(q,null,{default:e(()=>[a(R,null,{default:e(()=>[(t(!0),_(C,null,M($.skeletons,d=>(t(),l(b,null,{default:e(()=>[a(de,{elevation:3,type:"card"})]),_:1}))),256))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})):o("",!0)],64)):o("",!0)}}),ce={class:"d-flex"},fe={class:"flex-col align-self-start"},pe={class:"flex-col flex-grow-1 mt-auto mb-auto"},me={class:"flex-col align-self-end"},_e={key:0},ye={key:1},ve=F({__name:"HorizontalMealPlanWindow",setup($){const n=G(),{name:i}=Q(),v=S(!1),p=S(0);let w=D(()=>X(i.value));const P=D(()=>{let c=[];for(const u of Array(4).keys()){let f=I.now().plus({days:u});c.push({date:f,create_default_date:f.toISODate(),date_label:f.toLocaleString({weekday:"short",month:"2-digit",day:"2-digit",year:"2-digit"}),plan_entries:E().planList.filter(m=>I.fromJSDate(m.fromDate).startOf("day")<=f.startOf("day")&&I.fromJSDate(m.toDate!=null?m.toDate:m.fromDate).startOf("day")>=f.startOf("day"))})}return c});let g=D(()=>{let c=[],u=[];for(const[f,m]of P.value.entries())u.push(m),f%w.value==w.value-1&&(u.length>0&&c.push(u),u=[]);return u.length>0&&c.push(u),c});j(()=>{v.value=!0,E().refreshFromAPI(I.now().toJSDate(),I.now().plus({days:7}).toJSDate()).finally(()=>{v.value=!1})});function N(c){c.recipe&&n.push({name:"RecipeViewPage",params:{id:c.recipe.id}})}return(c,u)=>L(g).length>0?(t(),l(R,{key:0,class:"mt-0"},{default:e(()=>[a(b,null,{default:e(()=>[a(T,{modelValue:p.value,"onUpdate:modelValue":u[2]||(u[2]=f=>p.value=f)},{default:e(()=>[(t(!0),_(C,null,M(L(g),(f,m)=>(t(),l(q,{value:m,class:"pt-1 pb-1"},{default:e(()=>[a(R,null,{default:e(()=>[(t(!0),_(C,null,M(f,x=>(t(),l(b,null,{default:e(()=>[a(U,{density:"compact",class:"pt-0 pb-0"},{default:e(()=>[a(O,{class:"text-center"},{default:e(()=>[k("div",ce,[k("div",fe,[p.value!=0?(t(),l(B,{key:0,onClick:u[0]||(u[0]=s=>p.value--),icon:"fa-solid fa-chevron-left",size:"small"})):o("",!0)]),k("div",pe,y(x.date_label),1),k("div",me,[p.value+1p.value++),icon:"fa-solid fa-chevron-right",size:"small"})):o("",!0)])])]),_:2},1024),x.plan_entries.length>0?(t(),l(ee,{key:0})):o("",!0),(t(!0),_(C,null,M(x.plan_entries,s=>(t(),l(O,{key:s.id,onClick:r=>N(s),link:""},{prepend:e(()=>[s.recipe?.image?(t(),l(K,{key:0,image:s.recipe.image},null,8,["image"])):(t(),l(K,{key:1,image:se}))]),append:e(()=>[a(B,{icon:"",variant:"plain"},{default:e(()=>[a(H,{icon:"$menu"}),a(le,{activator:"parent"},{default:e(()=>[a(U,null,{default:e(()=>[a(O,{"prepend-icon":"$edit",link:""},{default:e(()=>[z(y(c.$t("Edit"))+" ",1),a(W,{model:"MealPlan",item:s},null,8,["item"])]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),default:e(()=>[a(te,null,{default:e(()=>[s.recipe?(t(),_("span",_e,y(s.recipe.name),1)):(t(),_("span",ye,y(s.title),1))]),_:2},1024),a(ae,null,{default:e(()=>[z(y(s.mealType.name),1)]),_:2},1024),s.recipe?o("",!0):(t(),l(W,{key:0,model:"MealPlan",item:s},null,8,["item"]))]),_:2},1032,["onClick"]))),128)),a(O,{class:"text-center cursor-pointer",variant:"tonal"},{default:e(()=>[a(W,{model:"MealPlan","item-defaults":{fromDate:x.date.toJSDate()},"close-after-create":!1,"close-after-save":!1},null,8,["item-defaults"]),a(H,{icon:"$create",size:"small"})]),_:2},1024)]),_:2},1024)]),_:2},1024))),256))]),_:2},1024)]),_:2},1032,["value"]))),256))]),_:1},8,["modelValue"])]),_:1})]),_:1})):o("",!0)}}),ke={class:"text-wrap"},we={class:"text-wrap"},Pe=F({__name:"StartPage",setup($){const n=S(-1);return j(()=>{new J().apiRecipeList({pageSize:1}).then(v=>{n.value=v.count})}),(i,v)=>(t(),l(re,null,{default:e(()=>[L(ne)().deviceSettings.start_showMealPlan?(t(),l(ve,{key:0})):o("",!0),n.value==0?(t(),l(A,{key:1,class:"mt-5 mb-5"},{default:e(()=>[a(oe,{class:"text-center"},{default:e(()=>[v[0]||(v[0]=k("i",{class:"fa-solid fa-eye-slash"},null,-1)),z(" "+y(i.$t("search_no_recipes")),1)]),_:1,__:[0]}),a(ue,null,{default:e(()=>[a(A,{title:i.$t("Create Recipe"),variant:"outlined",to:{name:"ModelEditPage",params:{model:"Recipe"}},"prepend-icon":"$recipes","append-icon":"fa-solid fa-arrow-right",class:"mb-4"},{subtitle:e(()=>[k("p",ke,y(i.$t("CreateFirstRecipe")),1)]),_:1},8,["title"]),a(A,{title:i.$t("Import"),variant:"outlined",to:{name:"RecipeImportPage",params:{}},"prepend-icon":"$import","append-icon":"fa-solid fa-arrow-right"},{subtitle:e(()=>[k("p",we,y(i.$t("ImportFirstRecipe")),1)]),_:1},8,["title"])]),_:1})]),_:1})):o("",!0),n.value>0?(t(),_(C,{key:2},[n.value>0?(t(),l(V,{key:0,skeletons:4,mode:"recent"})):o("",!0),n.value>10?(t(),l(V,{key:1,skeletons:4,mode:"new"})):o("",!0),n.value>10?(t(),l(V,{key:2,skeletons:4,mode:"keyword"})):o("",!0),n.value>=5?(t(),l(V,{key:3,skeletons:4,mode:"random"})):o("",!0),n.value>10?(t(),l(V,{key:4,skeletons:4,mode:"created_by"})):o("",!0),n.value>10?(t(),l(V,{key:5,skeletons:2,mode:"rating"})):o("",!0),n.value>25?(t(),l(V,{key:6,skeletons:4,mode:"keyword"})):o("",!0),n.value>25?(t(),l(V,{key:7,skeletons:4,mode:"random"})):o("",!0),a(R,null,{default:e(()=>[a(b,{class:"text-center"},{default:e(()=>[a(B,{size:"x-large",rounded:"xl","prepend-icon":"$search",variant:"tonal",to:{name:"SearchPage",params:{query:""}}},{default:e(()=>[z(y(i.$t("View_Recipes")),1)]),_:1})]),_:1})]),_:1})],64)):o("",!0)]),_:1}))}});export{Pe as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/StartPage-CQln-PMM.a3985c2b1dd1.js.gz b/config/tandoor/staticfiles/vue3/assets/StartPage-CQln-PMM.a3985c2b1dd1.js.gz
deleted file mode 100644
index 1168b7fc..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/StartPage-CQln-PMM.a3985c2b1dd1.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/StartPage-CQln-PMM.js b/config/tandoor/staticfiles/vue3/assets/StartPage-CQln-PMM.js
deleted file mode 100644
index 34756a70..00000000
--- a/config/tandoor/staticfiles/vue3/assets/StartPage-CQln-PMM.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as F,u as Y,a as Q,r as S,c as D,o as j,A as J,b as _,e as o,f as t,g as a,h as l,w as e,V as b,i as k,j as z,n as Z,t as y,k as R,l as L,m as T,F as C,p as M,q,s as G,D as I,v as E,x as U,y as O,z as B,B as ee,C as te,E as ae,_ as W,G as H,H as le,I as K,J as se,K as re,L as ne,M as A,N as oe,O as ue}from"./main-BhFWIRV_.js";import{R as ie}from"./RecipeCard-ZQiVryVZ.js";import{V as de}from"./AddToShoppingDialog.vue_vue_type_script_setup_true_lang-ByrmCw9F.js";import"./KeywordsBar.vue_vue_type_script_setup_true_lang-9vWdzSaj.js";import"./PrivateRecipeBadge.vue_vue_type_script_setup_true_lang-CuYHMwhT.js";import"./BtnCopy.vue_vue_type_script_setup_true_lang-B_1A58TG.js";import"./VTooltip-CP00KBBq.js";import"./useFileApi-4KcBp6Fj.js";import"./number_utils-1sJWKMUK.js";import"./model_utils-CVQgSPL_.js";function X($){switch($){case"xs":return 1;case"sm":return 2;case"md":return 4;case"lg":return 4;case"xl":return 5;case"xxl":return 6;default:return 1}}const V=F({__name:"HorizontalRecipeWindow",props:{mode:{type:String,required:!0},skeletons:{type:Number,default:0}},setup($){const n=$,{t:i}=Y(),{name:v}=Q(),p=S(!0),w=S([]),P=S({}),g=S({}),N=D(()=>{switch(n.mode){case"recent":return i("Recently_Viewed");case"random":return i("Random Recipes");case"new":return i("New");case"rating":return i("Rating");case"keyword":return Object.keys(P.value).length>0?P.value.label:i("Keyword");case"created_by":return Object.keys(g.value).length>0?i("CreatedBy")+" "+g.value.displayName:i("CreatedBy")}}),c=D(()=>{switch(n.mode){case"recent":return"fa-solid fa-eye";case"random":return"fa-solid fa-dice";case"new":return"fa-solid fa-calendar-alt";case"rating":return"fa-solid fa-star";case"keyword":return"fa-solid fa-tags";case"created_by":return"fa-solid fa-user"}}),u=D(()=>X(v.value));j(()=>{f()});function f(){let s=new J,r={pageSize:16};switch(n.mode){case"recent":r.numRecent=16;break;case"random":r.random="true";break;case"new":r._new="true";break;case"rating":r.rating=4;break;case"keyword":s.apiKeywordList({random:"true",limit:"1"}).then(d=>{d.count>0?(P.value=d.results[0],r.keywords=[P.value.id],m(r)):p.value=!1});return;case"created_by":s.apiUserList({}).then(d=>{d.length>0?(g.value=d[Math.floor(Math.random()*d.length)],r.createdby=g.value.id,r.random="true",m(r)):p.value=!1});return}m(r)}function m(s){new J().apiRecipeList(s).then(d=>{n.mode=="new"?w.value=d.results.filter(h=>h._new):n.mode=="recent"?w.value=d.results.filter(h=>h.recent!="0"):w.value=d.results}).finally(()=>{p.value=!1})}let x=D(()=>{let s=[],r=[];for(const[d,h]of w?.value.entries())r.push(h),d%u.value==u.value-1&&(r.length>0&&s.push(r),r=[]);return r.length>0&&s.push(r),s});return(s,r)=>p.value||w.value.length>0?(t(),_(C,{key:0},[a(R,{justify:"space-between"},{default:e(()=>[a(b,null,{default:e(()=>[k("h4",null,[k("i",{class:Z(c.value+" fa-fw")},null,2),z(" "+y(N.value),1)])]),_:1})]),_:1}),L(x).length>0?(t(),l(R,{key:0,class:"mt-0"},{default:e(()=>[a(b,null,{default:e(()=>[a(T,{"show-arrows":""},{default:e(()=>[(t(!0),_(C,null,M(L(x),d=>(t(),l(q,{class:"pt-1 pb-1"},{default:e(()=>[a(R,{dense:""},{default:e(()=>[(t(!0),_(C,null,M(d,h=>(t(),l(b,{class:"pr-0 pl-0",key:h.id},{default:e(()=>[a(ie,{recipe:h,show_description:!0,show_keywords:!0},null,8,["recipe"])]),_:2},1024))),128))]),_:2},1024)]),_:2},1024))),256))]),_:1})]),_:1})]),_:1})):o("",!0),$.skeletons>0&&p.value?(t(),l(R,{key:1},{default:e(()=>[a(b,null,{default:e(()=>[a(T,null,{default:e(()=>[a(q,null,{default:e(()=>[a(R,null,{default:e(()=>[(t(!0),_(C,null,M($.skeletons,d=>(t(),l(b,null,{default:e(()=>[a(de,{elevation:3,type:"card"})]),_:1}))),256))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})):o("",!0)],64)):o("",!0)}}),ce={class:"d-flex"},fe={class:"flex-col align-self-start"},pe={class:"flex-col flex-grow-1 mt-auto mb-auto"},me={class:"flex-col align-self-end"},_e={key:0},ye={key:1},ve=F({__name:"HorizontalMealPlanWindow",setup($){const n=G(),{name:i}=Q(),v=S(!1),p=S(0);let w=D(()=>X(i.value));const P=D(()=>{let c=[];for(const u of Array(4).keys()){let f=I.now().plus({days:u});c.push({date:f,create_default_date:f.toISODate(),date_label:f.toLocaleString({weekday:"short",month:"2-digit",day:"2-digit",year:"2-digit"}),plan_entries:E().planList.filter(m=>I.fromJSDate(m.fromDate).startOf("day")<=f.startOf("day")&&I.fromJSDate(m.toDate!=null?m.toDate:m.fromDate).startOf("day")>=f.startOf("day"))})}return c});let g=D(()=>{let c=[],u=[];for(const[f,m]of P.value.entries())u.push(m),f%w.value==w.value-1&&(u.length>0&&c.push(u),u=[]);return u.length>0&&c.push(u),c});j(()=>{v.value=!0,E().refreshFromAPI(I.now().toJSDate(),I.now().plus({days:7}).toJSDate()).finally(()=>{v.value=!1})});function N(c){c.recipe&&n.push({name:"RecipeViewPage",params:{id:c.recipe.id}})}return(c,u)=>L(g).length>0?(t(),l(R,{key:0,class:"mt-0"},{default:e(()=>[a(b,null,{default:e(()=>[a(T,{modelValue:p.value,"onUpdate:modelValue":u[2]||(u[2]=f=>p.value=f)},{default:e(()=>[(t(!0),_(C,null,M(L(g),(f,m)=>(t(),l(q,{value:m,class:"pt-1 pb-1"},{default:e(()=>[a(R,null,{default:e(()=>[(t(!0),_(C,null,M(f,x=>(t(),l(b,null,{default:e(()=>[a(U,{density:"compact",class:"pt-0 pb-0"},{default:e(()=>[a(O,{class:"text-center"},{default:e(()=>[k("div",ce,[k("div",fe,[p.value!=0?(t(),l(B,{key:0,onClick:u[0]||(u[0]=s=>p.value--),icon:"fa-solid fa-chevron-left",size:"small"})):o("",!0)]),k("div",pe,y(x.date_label),1),k("div",me,[p.value+1p.value++),icon:"fa-solid fa-chevron-right",size:"small"})):o("",!0)])])]),_:2},1024),x.plan_entries.length>0?(t(),l(ee,{key:0})):o("",!0),(t(!0),_(C,null,M(x.plan_entries,s=>(t(),l(O,{key:s.id,onClick:r=>N(s),link:""},{prepend:e(()=>[s.recipe?.image?(t(),l(K,{key:0,image:s.recipe.image},null,8,["image"])):(t(),l(K,{key:1,image:se}))]),append:e(()=>[a(B,{icon:"",variant:"plain"},{default:e(()=>[a(H,{icon:"$menu"}),a(le,{activator:"parent"},{default:e(()=>[a(U,null,{default:e(()=>[a(O,{"prepend-icon":"$edit",link:""},{default:e(()=>[z(y(c.$t("Edit"))+" ",1),a(W,{model:"MealPlan",item:s},null,8,["item"])]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),default:e(()=>[a(te,null,{default:e(()=>[s.recipe?(t(),_("span",_e,y(s.recipe.name),1)):(t(),_("span",ye,y(s.title),1))]),_:2},1024),a(ae,null,{default:e(()=>[z(y(s.mealType.name),1)]),_:2},1024),s.recipe?o("",!0):(t(),l(W,{key:0,model:"MealPlan",item:s},null,8,["item"]))]),_:2},1032,["onClick"]))),128)),a(O,{class:"text-center cursor-pointer",variant:"tonal"},{default:e(()=>[a(W,{model:"MealPlan","item-defaults":{fromDate:x.date.toJSDate()},"close-after-create":!1,"close-after-save":!1},null,8,["item-defaults"]),a(H,{icon:"$create",size:"small"})]),_:2},1024)]),_:2},1024)]),_:2},1024))),256))]),_:2},1024)]),_:2},1032,["value"]))),256))]),_:1},8,["modelValue"])]),_:1})]),_:1})):o("",!0)}}),ke={class:"text-wrap"},we={class:"text-wrap"},Pe=F({__name:"StartPage",setup($){const n=S(-1);return j(()=>{new J().apiRecipeList({pageSize:1}).then(v=>{n.value=v.count})}),(i,v)=>(t(),l(re,null,{default:e(()=>[L(ne)().deviceSettings.start_showMealPlan?(t(),l(ve,{key:0})):o("",!0),n.value==0?(t(),l(A,{key:1,class:"mt-5 mb-5"},{default:e(()=>[a(oe,{class:"text-center"},{default:e(()=>[v[0]||(v[0]=k("i",{class:"fa-solid fa-eye-slash"},null,-1)),z(" "+y(i.$t("search_no_recipes")),1)]),_:1,__:[0]}),a(ue,null,{default:e(()=>[a(A,{title:i.$t("Create Recipe"),variant:"outlined",to:{name:"ModelEditPage",params:{model:"Recipe"}},"prepend-icon":"$recipes","append-icon":"fa-solid fa-arrow-right",class:"mb-4"},{subtitle:e(()=>[k("p",ke,y(i.$t("CreateFirstRecipe")),1)]),_:1},8,["title"]),a(A,{title:i.$t("Import"),variant:"outlined",to:{name:"RecipeImportPage",params:{}},"prepend-icon":"$import","append-icon":"fa-solid fa-arrow-right"},{subtitle:e(()=>[k("p",we,y(i.$t("ImportFirstRecipe")),1)]),_:1},8,["title"])]),_:1})]),_:1})):o("",!0),n.value>0?(t(),_(C,{key:2},[n.value>0?(t(),l(V,{key:0,skeletons:4,mode:"recent"})):o("",!0),n.value>10?(t(),l(V,{key:1,skeletons:4,mode:"new"})):o("",!0),n.value>10?(t(),l(V,{key:2,skeletons:4,mode:"keyword"})):o("",!0),n.value>=5?(t(),l(V,{key:3,skeletons:4,mode:"random"})):o("",!0),n.value>10?(t(),l(V,{key:4,skeletons:4,mode:"created_by"})):o("",!0),n.value>10?(t(),l(V,{key:5,skeletons:2,mode:"rating"})):o("",!0),n.value>25?(t(),l(V,{key:6,skeletons:4,mode:"keyword"})):o("",!0),n.value>25?(t(),l(V,{key:7,skeletons:4,mode:"random"})):o("",!0),a(R,null,{default:e(()=>[a(b,{class:"text-center"},{default:e(()=>[a(B,{size:"x-large",rounded:"xl","prepend-icon":"$search",variant:"tonal",to:{name:"SearchPage",params:{query:""}}},{default:e(()=>[z(y(i.$t("View_Recipes")),1)]),_:1})]),_:1})]),_:1})],64)):o("",!0)]),_:1}))}});export{Pe as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/StartPage-CQln-PMM.js.gz b/config/tandoor/staticfiles/vue3/assets/StartPage-CQln-PMM.js.gz
deleted file mode 100644
index 1168b7fc..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/StartPage-CQln-PMM.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/StorageEditor-Bh3NIW08.c963a773552e.js b/config/tandoor/staticfiles/vue3/assets/StorageEditor-Bh3NIW08.c963a773552e.js
deleted file mode 100644
index c776015e..00000000
--- a/config/tandoor/staticfiles/vue3/assets/StorageEditor-Bh3NIW08.c963a773552e.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as $,aM as h,o as j,h as i,f as m,w as u,g as n,O as w,ac as y,l as e,e as r,S as s,T as N}from"./main-BhFWIRV_.js";import{u as v,_ as B}from"./useModelEditorFunctions-Du2kfr61.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";const q=$({__name:"StorageEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(p,{emit:C}){const d=p,b=C,{setupState:D,deleteObject:S,saveObject:U,isUpdate:k,editingObjName:O,loading:f,editingObj:l,editingObjChanged:V,modelClass:T}=v("Storage",b);h([()=>d.item,()=>d.itemId],()=>{g()}),j(()=>{g()});function g(){D(d.item,d.itemId,{itemDefaults:d.itemDefaults})}return(o,t)=>(m(),i(B,{loading:e(f),dialog:p.dialog,onSave:e(U),onDelete:e(S),onClose:t[6]||(t[6]=a=>{b("close"),V.value=!1}),"is-update":e(k)(),"is-changed":e(V),"model-class":e(T),"object-name":e(O)(),"editing-object":e(l)},{default:u(()=>[n(w,null,{default:u(()=>[n(y,{disabled:e(f)},{default:u(()=>[n(s,{label:o.$t("Name"),modelValue:e(l).name,"onUpdate:modelValue":t[0]||(t[0]=a=>e(l).name=a)},null,8,["label","modelValue"]),n(N,{label:o.$t("Type"),modelValue:e(l).method,"onUpdate:modelValue":t[1]||(t[1]=a=>e(l).method=a),items:["DB","NEXTCLOUD","LOCAL"]},null,8,["label","modelValue"]),e(l).method=="NEXTCLOUD"||e(l).method=="DB"?(m(),i(s,{key:0,label:o.$t("Username"),modelValue:e(l).username,"onUpdate:modelValue":t[2]||(t[2]=a=>e(l).username=a)},null,8,["label","modelValue"])):r("",!0),e(l).method=="NEXTCLOUD"?(m(),i(s,{key:1,label:o.$t("Password"),hint:o.$t("StoragePasswordTokenHelp"),"persistent-hint":"",modelValue:e(l).password,"onUpdate:modelValue":t[3]||(t[3]=a=>e(l).password=a)},null,8,["label","hint","modelValue"])):r("",!0),e(l).method=="DB"?(m(),i(s,{key:2,label:o.$t("Access_Token"),hint:o.$t("StoragePasswordTokenHelp"),"persistent-hint":"",modelValue:e(l).token,"onUpdate:modelValue":t[4]||(t[4]=a=>e(l).token=a)},null,8,["label","hint","modelValue"])):r("",!0),n(s,{label:o.$t("Path"),modelValue:e(l).path,"onUpdate:modelValue":t[5]||(t[5]=a=>e(l).path=a)},null,8,["label","modelValue"])]),_:1},8,["disabled"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{q as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/StorageEditor-Bh3NIW08.c963a773552e.js.gz b/config/tandoor/staticfiles/vue3/assets/StorageEditor-Bh3NIW08.c963a773552e.js.gz
deleted file mode 100644
index f04aa490..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/StorageEditor-Bh3NIW08.c963a773552e.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/StorageEditor-Bh3NIW08.js b/config/tandoor/staticfiles/vue3/assets/StorageEditor-Bh3NIW08.js
deleted file mode 100644
index c776015e..00000000
--- a/config/tandoor/staticfiles/vue3/assets/StorageEditor-Bh3NIW08.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as $,aM as h,o as j,h as i,f as m,w as u,g as n,O as w,ac as y,l as e,e as r,S as s,T as N}from"./main-BhFWIRV_.js";import{u as v,_ as B}from"./useModelEditorFunctions-Du2kfr61.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";const q=$({__name:"StorageEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(p,{emit:C}){const d=p,b=C,{setupState:D,deleteObject:S,saveObject:U,isUpdate:k,editingObjName:O,loading:f,editingObj:l,editingObjChanged:V,modelClass:T}=v("Storage",b);h([()=>d.item,()=>d.itemId],()=>{g()}),j(()=>{g()});function g(){D(d.item,d.itemId,{itemDefaults:d.itemDefaults})}return(o,t)=>(m(),i(B,{loading:e(f),dialog:p.dialog,onSave:e(U),onDelete:e(S),onClose:t[6]||(t[6]=a=>{b("close"),V.value=!1}),"is-update":e(k)(),"is-changed":e(V),"model-class":e(T),"object-name":e(O)(),"editing-object":e(l)},{default:u(()=>[n(w,null,{default:u(()=>[n(y,{disabled:e(f)},{default:u(()=>[n(s,{label:o.$t("Name"),modelValue:e(l).name,"onUpdate:modelValue":t[0]||(t[0]=a=>e(l).name=a)},null,8,["label","modelValue"]),n(N,{label:o.$t("Type"),modelValue:e(l).method,"onUpdate:modelValue":t[1]||(t[1]=a=>e(l).method=a),items:["DB","NEXTCLOUD","LOCAL"]},null,8,["label","modelValue"]),e(l).method=="NEXTCLOUD"||e(l).method=="DB"?(m(),i(s,{key:0,label:o.$t("Username"),modelValue:e(l).username,"onUpdate:modelValue":t[2]||(t[2]=a=>e(l).username=a)},null,8,["label","modelValue"])):r("",!0),e(l).method=="NEXTCLOUD"?(m(),i(s,{key:1,label:o.$t("Password"),hint:o.$t("StoragePasswordTokenHelp"),"persistent-hint":"",modelValue:e(l).password,"onUpdate:modelValue":t[3]||(t[3]=a=>e(l).password=a)},null,8,["label","hint","modelValue"])):r("",!0),e(l).method=="DB"?(m(),i(s,{key:2,label:o.$t("Access_Token"),hint:o.$t("StoragePasswordTokenHelp"),"persistent-hint":"",modelValue:e(l).token,"onUpdate:modelValue":t[4]||(t[4]=a=>e(l).token=a)},null,8,["label","hint","modelValue"])):r("",!0),n(s,{label:o.$t("Path"),modelValue:e(l).path,"onUpdate:modelValue":t[5]||(t[5]=a=>e(l).path=a)},null,8,["label","modelValue"])]),_:1},8,["disabled"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{q as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/StorageEditor-Bh3NIW08.js.gz b/config/tandoor/staticfiles/vue3/assets/StorageEditor-Bh3NIW08.js.gz
deleted file mode 100644
index f04aa490..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/StorageEditor-Bh3NIW08.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SupermarketCategoryEditor-CEyiKvko.f8b9d792c98c.js b/config/tandoor/staticfiles/vue3/assets/SupermarketCategoryEditor-CEyiKvko.f8b9d792c98c.js
deleted file mode 100644
index 59e0375f..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SupermarketCategoryEditor-CEyiKvko.f8b9d792c98c.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as C,aM as v,o as O,h as y,f as $,w as n,g as d,O as h,ac as k,l as e,S as f}from"./main-BhFWIRV_.js";import{u as N,_ as U}from"./useModelEditorFunctions-Du2kfr61.js";import{V as q}from"./VTextarea-Dyu7dPGe.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";const F=C({__name:"SupermarketCategoryEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(s,{emit:g}){const o=s,u=g,{setupState:b,deleteObject:V,saveObject:c,isUpdate:S,editingObjName:j,loading:m,editingObj:a,editingObjChanged:r,modelClass:D}=N("SupermarketCategory",u);v([()=>o.item,()=>o.itemId],()=>{p()}),O(()=>{p()});function p(){b(o.item,o.itemId,{itemDefaults:o.itemDefaults})}return(i,t)=>($(),y(U,{loading:e(m),dialog:s.dialog,onSave:e(c),onDelete:e(V),onClose:t[3]||(t[3]=l=>{u("close"),r.value=!1}),"is-update":e(S)(),"is-changed":e(r),"model-class":e(D),"object-name":e(j)(),"editing-object":e(a)},{default:n(()=>[d(h,null,{default:n(()=>[d(k,{disabled:e(m)},{default:n(()=>[d(f,{label:i.$t("Name"),modelValue:e(a).name,"onUpdate:modelValue":t[0]||(t[0]=l=>e(a).name=l)},null,8,["label","modelValue"]),d(q,{label:i.$t("Description"),modelValue:e(a).description,"onUpdate:modelValue":t[1]||(t[1]=l=>e(a).description=l)},null,8,["label","modelValue"]),d(f,{label:i.$t("Open_Data_Slug"),hint:i.$t("open_data_help_text"),"persistent-hint":"",modelValue:e(a).openDataSlug,"onUpdate:modelValue":t[2]||(t[2]=l=>e(a).openDataSlug=l),disabled:""},null,8,["label","hint","modelValue"])]),_:1},8,["disabled"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{F as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/SupermarketCategoryEditor-CEyiKvko.f8b9d792c98c.js.gz b/config/tandoor/staticfiles/vue3/assets/SupermarketCategoryEditor-CEyiKvko.f8b9d792c98c.js.gz
deleted file mode 100644
index 2c23af23..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/SupermarketCategoryEditor-CEyiKvko.f8b9d792c98c.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SupermarketCategoryEditor-CEyiKvko.js b/config/tandoor/staticfiles/vue3/assets/SupermarketCategoryEditor-CEyiKvko.js
deleted file mode 100644
index 59e0375f..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SupermarketCategoryEditor-CEyiKvko.js
+++ /dev/null
@@ -1 +0,0 @@
-import{d as C,aM as v,o as O,h as y,f as $,w as n,g as d,O as h,ac as k,l as e,S as f}from"./main-BhFWIRV_.js";import{u as N,_ as U}from"./useModelEditorFunctions-Du2kfr61.js";import{V as q}from"./VTextarea-Dyu7dPGe.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";const F=C({__name:"SupermarketCategoryEditor",props:{item:{type:{},required:!1,default:null},itemId:{type:[Number,String],required:!1,default:void 0},itemDefaults:{type:{},required:!1,default:{}},dialog:{type:Boolean,default:!1}},emits:["create","save","delete","close","changedState"],setup(s,{emit:g}){const o=s,u=g,{setupState:b,deleteObject:V,saveObject:c,isUpdate:S,editingObjName:j,loading:m,editingObj:a,editingObjChanged:r,modelClass:D}=N("SupermarketCategory",u);v([()=>o.item,()=>o.itemId],()=>{p()}),O(()=>{p()});function p(){b(o.item,o.itemId,{itemDefaults:o.itemDefaults})}return(i,t)=>($(),y(U,{loading:e(m),dialog:s.dialog,onSave:e(c),onDelete:e(V),onClose:t[3]||(t[3]=l=>{u("close"),r.value=!1}),"is-update":e(S)(),"is-changed":e(r),"model-class":e(D),"object-name":e(j)(),"editing-object":e(a)},{default:n(()=>[d(h,null,{default:n(()=>[d(k,{disabled:e(m)},{default:n(()=>[d(f,{label:i.$t("Name"),modelValue:e(a).name,"onUpdate:modelValue":t[0]||(t[0]=l=>e(a).name=l)},null,8,["label","modelValue"]),d(q,{label:i.$t("Description"),modelValue:e(a).description,"onUpdate:modelValue":t[1]||(t[1]=l=>e(a).description=l)},null,8,["label","modelValue"]),d(f,{label:i.$t("Open_Data_Slug"),hint:i.$t("open_data_help_text"),"persistent-hint":"",modelValue:e(a).openDataSlug,"onUpdate:modelValue":t[2]||(t[2]=l=>e(a).openDataSlug=l),disabled:""},null,8,["label","hint","modelValue"])]),_:1},8,["disabled"])]),_:1})]),_:1},8,["loading","dialog","onSave","onDelete","is-update","is-changed","model-class","object-name","editing-object"]))}});export{F as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/SupermarketCategoryEditor-CEyiKvko.js.gz b/config/tandoor/staticfiles/vue3/assets/SupermarketCategoryEditor-CEyiKvko.js.gz
deleted file mode 100644
index 2c23af23..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/SupermarketCategoryEditor-CEyiKvko.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SupermarketEditor-DNtaUxLT.519f6d489834.js b/config/tandoor/staticfiles/vue3/assets/SupermarketEditor-DNtaUxLT.519f6d489834.js
deleted file mode 100644
index c8867988..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SupermarketEditor-DNtaUxLT.519f6d489834.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as o}from"./SupermarketEditor.vue_vue_type_script_setup_true_lang-DaKxST5A.js";import"./main-BhFWIRV_.js";import"./useModelEditorFunctions-Du2kfr61.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import"./VTabs-BQFRhgOd.js";import"./VTextarea-Dyu7dPGe.js";export{o as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/SupermarketEditor-DNtaUxLT.519f6d489834.js.gz b/config/tandoor/staticfiles/vue3/assets/SupermarketEditor-DNtaUxLT.519f6d489834.js.gz
deleted file mode 100644
index 1fd00bc3..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/SupermarketEditor-DNtaUxLT.519f6d489834.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SupermarketEditor-DNtaUxLT.js b/config/tandoor/staticfiles/vue3/assets/SupermarketEditor-DNtaUxLT.js
deleted file mode 100644
index c8867988..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SupermarketEditor-DNtaUxLT.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as o}from"./SupermarketEditor.vue_vue_type_script_setup_true_lang-DaKxST5A.js";import"./main-BhFWIRV_.js";import"./useModelEditorFunctions-Du2kfr61.js";import"./DeleteConfirmDialog.vue_vue_type_script_setup_true_lang-C6y9GBNB.js";import"./VTabs-BQFRhgOd.js";import"./VTextarea-Dyu7dPGe.js";export{o as default};
diff --git a/config/tandoor/staticfiles/vue3/assets/SupermarketEditor-DNtaUxLT.js.gz b/config/tandoor/staticfiles/vue3/assets/SupermarketEditor-DNtaUxLT.js.gz
deleted file mode 100644
index 1fd00bc3..00000000
Binary files a/config/tandoor/staticfiles/vue3/assets/SupermarketEditor-DNtaUxLT.js.gz and /dev/null differ
diff --git a/config/tandoor/staticfiles/vue3/assets/SupermarketEditor.vue_vue_type_script_setup_true_lang-DaKxST5A.3b83402fe89d.js b/config/tandoor/staticfiles/vue3/assets/SupermarketEditor.vue_vue_type_script_setup_true_lang-DaKxST5A.3b83402fe89d.js
deleted file mode 100644
index cb1486b9..00000000
--- a/config/tandoor/staticfiles/vue3/assets/SupermarketEditor.vue_vue_type_script_setup_true_lang-DaKxST5A.3b83402fe89d.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import{dw as sn,dx as un,dy as fn,d as dn,aM as cn,r as be,c as vn,o as hn,A as Ue,h as ar,l as St,w as et,g as nt,O as Ar,j as le,t as Zt,ac as pn,S as Rr,k as gn,V as Nr,i as $e,y as ir,_ as mn,z as Mr,G as jr,ai as yn,x as Sn,Q as lr,R as sr,f as ur}from"./main-BhFWIRV_.js";import{u as bn,_ as En}from"./useModelEditorFunctions-Du2kfr61.js";import{a as xn,V as Fr,b as On,c as wr}from"./VTabs-BQFRhgOd.js";import{V as Tn}from"./VTextarea-Dyu7dPGe.js";var Xe={exports:{}};/**!
- * Sortable 1.14.0
- * @author RubaXa
- * @author owenm
- * @license MIT
- */function Lr(l,r){var n=Object.keys(l);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(l);r&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(l,e).enumerable})),n.push.apply(n,i)}return n}function Wt(l){for(var r=1;r=0)&&(n[e]=l[e]);return n}function Cn(l,r){if(l==null)return{};var n=Dn(l,r),i,e;if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(l);for(e=0;e=0)&&Object.prototype.propertyIsEnumerable.call(l,i)&&(n[i]=l[i])}return n}function Pn(l){return An(l)||Rn(l)||Nn(l)||Mn()}function An(l){if(Array.isArray(l))return br(l)}function Rn(l){if(typeof Symbol<"u"&&l[Symbol.iterator]!=null||l["@@iterator"]!=null)return Array.from(l)}function Nn(l,r){if(l){if(typeof l=="string")return br(l,r);var n=Object.prototype.toString.call(l).slice(8,-1);if(n==="Object"&&l.constructor&&(n=l.constructor.name),n==="Map"||n==="Set")return Array.from(l);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return br(l,r)}}function br(l,r){(r==null||r>l.length)&&(r=l.length);for(var n=0,i=new Array(r);n"&&(r=r.substring(1)),l)try{if(l.matches)return l.matches(r);if(l.msMatchesSelector)return l.msMatchesSelector(r);if(l.webkitMatchesSelector)return l.webkitMatchesSelector(r)}catch{return!1}return!1}}function wn(l){return l.host&&l!==document&&l.host.nodeType?l.host:l.parentNode}function Vt(l,r,n,i){if(l){n=n||document;do{if(r!=null&&(r[0]===">"?l.parentNode===n&&ke(l,r):ke(l,r))||i&&l===n)return l;if(l===n)break}while(l=wn(l))}return null}var $r=/\s+/g;function ut(l,r,n){if(l&&r)if(l.classList)l.classList[n?"add":"remove"](r);else{var i=(" "+l.className+" ").replace($r," ").replace(" "+r+" "," ");l.className=(i+(n?" "+r:"")).replace($r," ")}}function U(l,r,n){var i=l&&l.style;if(i){if(n===void 0)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(l,""):l.currentStyle&&(n=l.currentStyle),r===void 0?n:n[r];!(r in i)&&r.indexOf("webkit")===-1&&(r="-webkit-"+r),i[r]=n+(typeof n=="string"?"":"px")}}function ae(l,r){var n="";if(typeof l=="string")n=l;else do{var i=U(l,"transform");i&&i!=="none"&&(n=i+" "+n)}while(!r&&(l=l.parentNode));var e=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return e&&new e(n)}function kr(l,r,n){if(l){var i=l.getElementsByTagName(r),e=0,u=i.length;if(n)for(;e=u,!t)return i;if(i===Ht())break;i=_t(i,!1)}return!1}function ve(l,r,n,i){for(var e=0,u=0,t=l.children;u2&&arguments[2]!==void 0?arguments[2]:{},e=i.evt,u=Cn(i,Kn);Fe.pluginEvent.bind(B)(r,n,Wt({dragEl:N,parentEl:ct,ghostEl:z,rootEl:it,nextEl:oe,lastDownEl:ze,cloneEl:vt,cloneHidden:qt,dragStarted:Ie,putSortable:Tt,activeSortable:B.active,originalEvent:e,oldIndex:ce,oldDraggableIndex:Re,newIndex:Ft,newDraggableIndex:kt,hideGhostForTarget:nn,unhideGhostForTarget:on,cloneNowHidden:function(){qt=!0},cloneNowShown:function(){qt=!1},dispatchSortableEvent:function(o){Pt({sortable:n,name:o,originalEvent:e})}},u))};function Pt(l){Te(Wt({putSortable:Tt,cloneEl:vt,targetEl:N,rootEl:it,oldIndex:ce,oldDraggableIndex:Re,newIndex:Ft,newDraggableIndex:kt},l))}var N,ct,z,it,oe,ze,vt,qt,ce,Ft,Re,kt,Ge,Tt,de=!1,qe=!1,_e=[],re,$t,vr,hr,Kr,Hr,Ie,ue,Ne,Me=!1,Ve=!1,Je,It,pr=[],Er=!1,tr=[],rr=typeof document<"u",Be=Qr,Wr=je||Yt?"cssFloat":"float",Hn=rr&&!Fn&&!Qr&&"draggable"in document.createElement("div"),tn=function(){if(rr){if(Yt)return!1;var l=document.createElement("x");return l.style.cssText="pointer-events:auto",l.style.pointerEvents==="auto"}}(),en=function(r,n){var i=U(r),e=parseInt(i.width)-parseInt(i.paddingLeft)-parseInt(i.paddingRight)-parseInt(i.borderLeftWidth)-parseInt(i.borderRightWidth),u=ve(r,0,n),t=ve(r,1,n),o=u&&U(u),a=t&&U(t),s=o&&parseInt(o.marginLeft)+parseInt(o.marginRight)+lt(u).width,f=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+lt(t).width;if(i.display==="flex")return i.flexDirection==="column"||i.flexDirection==="column-reverse"?"vertical":"horizontal";if(i.display==="grid")return i.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(u&&o.float&&o.float!=="none"){var d=o.float==="left"?"left":"right";return t&&(a.clear==="both"||a.clear===d)?"vertical":"horizontal"}return u&&(o.display==="block"||o.display==="flex"||o.display==="table"||o.display==="grid"||s>=e&&i[Wr]==="none"||t&&i[Wr]==="none"&&s+f>e)?"vertical":"horizontal"},Wn=function(r,n,i){var e=i?r.left:r.top,u=i?r.right:r.bottom,t=i?r.width:r.height,o=i?n.left:n.top,a=i?n.right:n.bottom,s=i?n.width:n.height;return e===o||u===a||e+t/2===o+s/2},Xn=function(r,n){var i;return _e.some(function(e){var u=e[Dt].options.emptyInsertThreshold;if(!(!u||Ir(e))){var t=lt(e),o=r>=t.left-u&&r<=t.right+u,a=n>=t.top-u&&n<=t.bottom+u;if(o&&a)return i=e}}),i},rn=function(r){function n(u,t){return function(o,a,s,f){var d=o.options.group.name&&a.options.group.name&&o.options.group.name===a.options.group.name;if(u==null&&(t||d))return!0;if(u==null||u===!1)return!1;if(t&&u==="clone")return u;if(typeof u=="function")return n(u(o,a,s,f),t)(o,a,s,f);var c=(t?o:a).options.group.name;return u===!0||typeof u=="string"&&u===c||u.join&&u.indexOf(c)>-1}}var i={},e=r.group;(!e||Ye(e)!="object")&&(e={name:e}),i.name=e.name,i.checkPull=n(e.pull,!0),i.checkPut=n(e.put),i.revertClone=e.revertClone,r.group=i},nn=function(){!tn&&z&&U(z,"display","none")},on=function(){!tn&&z&&U(z,"display","")};rr&&document.addEventListener("click",function(l){if(qe)return l.preventDefault(),l.stopPropagation&&l.stopPropagation(),l.stopImmediatePropagation&&l.stopImmediatePropagation(),qe=!1,!1},!0);var ne=function(r){if(N){r=r.touches?r.touches[0]:r;var n=Xn(r.clientX,r.clientY);if(n){var i={};for(var e in r)r.hasOwnProperty(e)&&(i[e]=r[e]);i.target=i.rootEl=n,i.preventDefault=void 0,i.stopPropagation=void 0,n[Dt]._onDragOver(i)}}},Yn=function(r){N&&N.parentNode[Dt]._isOutsideThisEl(r.target)};function B(l,r){if(!(l&&l.nodeType&&l.nodeType===1))throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(l));this.el=l,this.options=r=Lt({},r),l[Dt]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(l.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return en(l,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,o){t.setData("Text",o.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:B.supportPointer!==!1&&"PointerEvent"in window&&!Pe,emptyInsertThreshold:5};Fe.initializePlugins(this,l,n);for(var i in n)!(i in r)&&(r[i]=n[i]);rn(r);for(var e in this)e.charAt(0)==="_"&&typeof this[e]=="function"&&(this[e]=this[e].bind(this));this.nativeDraggable=r.forceFallback?!1:Hn,this.nativeDraggable&&(this.options.touchStartThreshold=1),r.supportPointer?Z(l,"pointerdown",this._onTapStart):(Z(l,"mousedown",this._onTapStart),Z(l,"touchstart",this._onTapStart)),this.nativeDraggable&&(Z(l,"dragover",this),Z(l,"dragenter",this)),_e.push(this.el),r.store&&r.store.get&&this.sort(r.store.get(this)||[]),Lt(this,Gn())}B.prototype={constructor:B,_isOutsideThisEl:function(r){!this.el.contains(r)&&r!==this.el&&(ue=null)},_getDirection:function(r,n){return typeof this.options.direction=="function"?this.options.direction.call(this,r,n,N):this.options.direction},_onTapStart:function(r){if(r.cancelable){var n=this,i=this.el,e=this.options,u=e.preventOnFilter,t=r.type,o=r.touches&&r.touches[0]||r.pointerType&&r.pointerType==="touch"&&r,a=(o||r).target,s=r.target.shadowRoot&&(r.path&&r.path[0]||r.composedPath&&r.composedPath()[0])||a,f=e.filter;if(to(i),!N&&!(/mousedown|pointerdown/.test(t)&&r.button!==0||e.disabled)&&!s.isContentEditable&&!(!this.nativeDraggable&&Pe&&a&&a.tagName.toUpperCase()==="SELECT")&&(a=Vt(a,e.draggable,i,!1),!(a&&a.animated)&&ze!==a)){if(ce=ht(a),Re=ht(a,e.draggable),typeof f=="function"){if(f.call(this,r,a,this)){Pt({sortable:n,rootEl:s,name:"filter",targetEl:a,toEl:i,fromEl:i}),Rt("filter",n,{evt:r}),u&&r.cancelable&&r.preventDefault();return}}else if(f&&(f=f.split(",").some(function(d){if(d=Vt(s,d.trim(),i,!1),d)return Pt({sortable:n,rootEl:d,name:"filter",targetEl:a,fromEl:i,toEl:i}),Rt("filter",n,{evt:r}),!0}),f)){u&&r.cancelable&&r.preventDefault();return}e.handle&&!Vt(s,e.handle,i,!1)||this._prepareDragStart(r,o,a)}}},_prepareDragStart:function(r,n,i){var e=this,u=e.el,t=e.options,o=u.ownerDocument,a;if(i&&!N&&i.parentNode===u){var s=lt(i);if(it=u,N=i,ct=N.parentNode,oe=N.nextSibling,ze=i,Ge=t.group,B.dragged=N,re={target:N,clientX:(n||r).clientX,clientY:(n||r).clientY},Kr=re.clientX-s.left,Hr=re.clientY-s.top,this._lastX=(n||r).clientX,this._lastY=(n||r).clientY,N.style["will-change"]="all",a=function(){if(Rt("delayEnded",e,{evt:r}),B.eventCanceled){e._onDrop();return}e._disableDelayedDragEvents(),!Ur&&e.nativeDraggable&&(N.draggable=!0),e._triggerDragStart(r,n),Pt({sortable:e,name:"choose",originalEvent:r}),ut(N,t.chosenClass,!0)},t.ignore.split(",").forEach(function(f){kr(N,f.trim(),gr)}),Z(o,"dragover",ne),Z(o,"mousemove",ne),Z(o,"touchmove",ne),Z(o,"mouseup",e._onDrop),Z(o,"touchend",e._onDrop),Z(o,"touchcancel",e._onDrop),Ur&&this.nativeDraggable&&(this.options.touchStartThreshold=4,N.draggable=!0),Rt("delayStart",this,{evt:r}),t.delay&&(!t.delayOnTouchOnly||n)&&(!this.nativeDraggable||!(je||Yt))){if(B.eventCanceled){this._onDrop();return}Z(o,"mouseup",e._disableDelayedDrag),Z(o,"touchend",e._disableDelayedDrag),Z(o,"touchcancel",e._disableDelayedDrag),Z(o,"mousemove",e._delayedDragTouchMoveHandler),Z(o,"touchmove",e._delayedDragTouchMoveHandler),t.supportPointer&&Z(o,"pointermove",e._delayedDragTouchMoveHandler),e._dragStartTimer=setTimeout(a,t.delay)}else a()}},_delayedDragTouchMoveHandler:function(r){var n=r.touches?r.touches[0]:r;Math.max(Math.abs(n.clientX-this._lastX),Math.abs(n.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){N&&gr(N),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var r=this.el.ownerDocument;Q(r,"mouseup",this._disableDelayedDrag),Q(r,"touchend",this._disableDelayedDrag),Q(r,"touchcancel",this._disableDelayedDrag),Q(r,"mousemove",this._delayedDragTouchMoveHandler),Q(r,"touchmove",this._delayedDragTouchMoveHandler),Q(r,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(r,n){n=n||r.pointerType=="touch"&&r,!this.nativeDraggable||n?this.options.supportPointer?Z(document,"pointermove",this._onTouchMove):n?Z(document,"touchmove",this._onTouchMove):Z(document,"mousemove",this._onTouchMove):(Z(N,"dragend",this),Z(it,"dragstart",this._onDragStart));try{document.selection?Qe(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(r,n){if(de=!1,it&&N){Rt("dragStarted",this,{evt:n}),this.nativeDraggable&&Z(document,"dragover",Yn);var i=this.options;!r&&ut(N,i.dragClass,!1),ut(N,i.ghostClass,!0),B.active=this,r&&this._appendGhost(),Pt({sortable:this,name:"start",originalEvent:n})}else this._nulling()},_emulateDragOver:function(){if($t){this._lastX=$t.clientX,this._lastY=$t.clientY,nn();for(var r=document.elementFromPoint($t.clientX,$t.clientY),n=r;r&&r.shadowRoot&&(r=r.shadowRoot.elementFromPoint($t.clientX,$t.clientY),r!==n);)n=r;if(N.parentNode[Dt]._isOutsideThisEl(r),n)do{if(n[Dt]){var i=void 0;if(i=n[Dt]._onDragOver({clientX:$t.clientX,clientY:$t.clientY,target:r,rootEl:n}),i&&!this.options.dragoverBubble)break}r=n}while(n=n.parentNode);on()}},_onTouchMove:function(r){if(re){var n=this.options,i=n.fallbackTolerance,e=n.fallbackOffset,u=r.touches?r.touches[0]:r,t=z&&ae(z,!0),o=z&&t&&t.a,a=z&&t&&t.d,s=Be&&It&&Vr(It),f=(u.clientX-re.clientX+e.x)/(o||1)+(s?s[0]-pr[0]:0)/(o||1),d=(u.clientY-re.clientY+e.y)/(a||1)+(s?s[1]-pr[1]:0)/(a||1);if(!B.active&&!de){if(i&&Math.max(Math.abs(u.clientX-this._lastX),Math.abs(u.clientY-this._lastY))=0&&(Pt({rootEl:ct,name:"add",toEl:ct,fromEl:it,originalEvent:r}),Pt({sortable:this,name:"remove",toEl:ct,originalEvent:r}),Pt({rootEl:ct,name:"sort",toEl:ct,fromEl:it,originalEvent:r}),Pt({sortable:this,name:"sort",toEl:ct,originalEvent:r})),Tt&&Tt.save()):Ft!==ce&&Ft>=0&&(Pt({sortable:this,name:"update",toEl:ct,originalEvent:r}),Pt({sortable:this,name:"sort",toEl:ct,originalEvent:r})),B.active&&((Ft==null||Ft===-1)&&(Ft=ce,kt=Re),Pt({sortable:this,name:"end",toEl:ct,originalEvent:r}),this.save()))),this._nulling()},_nulling:function(){Rt("nulling",this),it=N=ct=z=oe=vt=ze=qt=re=$t=Ie=Ft=kt=ce=Re=ue=Ne=Tt=Ge=B.dragged=B.ghost=B.clone=B.active=null,tr.forEach(function(r){r.checked=!0}),tr.length=vr=hr=0},handleEvent:function(r){switch(r.type){case"drop":case"dragend":this._onDrop(r);break;case"dragenter":case"dragover":N&&(this._onDragOver(r),zn(r));break;case"selectstart":r.preventDefault();break}},toArray:function(){for(var r=[],n,i=this.el.children,e=0,u=i.length,t=this.options;ei.right+e||l.clientX<=i.right&&l.clientY>i.bottom&&l.clientX>=i.left:l.clientX>i.right&&l.clientY>i.top||l.clientX<=i.right&&l.clientY>i.bottom+e}function kn(l,r,n,i,e,u,t,o){var a=i?l.clientY:l.clientX,s=i?n.height:n.width,f=i?n.top:n.left,d=i?n.bottom:n.right,c=!1;if(!t){if(o&&Jef+s*u/2:ad-Je)return-Ne}else if(a>f+s*(1-e)/2&&ad-s*u/2)?a>f+s/2?1:-1:0}function qn(l){return ht(N)1&&(Y.forEach(function(o){u.addAnimationState({target:o,rect:Nt?lt(o):t}),dr(o),o.fromRect=t,i.removeAnimationState(o)}),Nt=!1,ao(!this.options.removeCloneOnHide,e))},dragOverCompleted:function(n){var i=n.sortable,e=n.isOwner,u=n.insertion,t=n.activeSortable,o=n.parentEl,a=n.putSortable,s=this.options;if(u){if(e&&t._hideClone(),xe=!1,s.animation&&Y.length>1&&(Nt||!e&&!t.options.sort&&!a)){var f=lt(rt,!1,!0,!0);Y.forEach(function(c){c!==rt&&(Br(c,f),o.appendChild(c))}),Nt=!0}if(!e)if(Nt||We(),Y.length>1){var d=He;t._showClone(i),t.options.animation&&!He&&d&&jt.forEach(function(c){t.addAnimationState({target:c,rect:Oe}),c.fromRect=Oe,c.thisAnimationDuration=null})}else t._showClone(i)}},dragOverAnimationCapture:function(n){var i=n.dragRect,e=n.isOwner,u=n.activeSortable;if(Y.forEach(function(o){o.thisAnimationDuration=null}),u.options.animation&&!e&&u.multiDrag.isMultiDrag){Oe=Lt({},i);var t=ae(rt,!0);Oe.top-=t.f,Oe.left-=t.e}},dragOverAnimationComplete:function(){Nt&&(Nt=!1,We())},drop:function(n){var i=n.originalEvent,e=n.rootEl,u=n.parentEl,t=n.sortable,o=n.dispatchSortableEvent,a=n.oldIndex,s=n.putSortable,f=s||this.sortable;if(i){var d=this.options,c=u.children;if(!fe)if(d.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),ut(rt,d.selectedClass,!~Y.indexOf(rt)),~Y.indexOf(rt))Y.splice(Y.indexOf(rt),1),Ee=null,Te({sortable:t,rootEl:e,name:"deselect",targetEl:rt});else{if(Y.push(rt),Te({sortable:t,rootEl:e,name:"select",targetEl:rt}),i.shiftKey&&Ee&&t.el.contains(Ee)){var v=ht(Ee),h=ht(rt);if(~v&&~h&&v!==h){var p,g;for(h>v?(g=v,p=h):(g=h,p=v+1);g1){var y=lt(rt),b=ht(rt,":not(."+this.options.selectedClass+")");if(!xe&&d.animation&&(rt.thisAnimationDuration=null),f.captureAnimationState(),!xe&&(d.animation&&(rt.fromRect=y,Y.forEach(function(O){if(O.thisAnimationDuration=null,O!==rt){var C=Nt?lt(O):y;O.fromRect=C,f.addAnimationState({target:O,rect:C})}})),We(),Y.forEach(function(O){c[b]?u.insertBefore(O,c[b]):u.appendChild(O),b++}),a===ht(rt))){var D=!1;Y.forEach(function(O){if(O.sortableIndex!==ht(O)){D=!0;return}}),D&&o("update")}Y.forEach(function(O){dr(O)}),f.animateAll()}Gt=f}(e===u||s&&s.lastPutMode!=="clone")&&jt.forEach(function(O){O.parentNode&&O.parentNode.removeChild(O)})}},nullingGlobal:function(){this.isMultiDrag=fe=!1,jt.length=0},destroyGlobal:function(){this._deselectMultiDrag(),Q(document,"pointerup",this._deselectMultiDrag),Q(document,"mouseup",this._deselectMultiDrag),Q(document,"touchend",this._deselectMultiDrag),Q(document,"keydown",this._checkKeyDown),Q(document,"keyup",this._checkKeyUp)},_deselectMultiDrag:function(n){if(!(typeof fe<"u"&&fe)&&Gt===this.sortable&&!(n&&Vt(n.target,this.options.draggable,this.sortable.el,!1))&&!(n&&n.button!==0))for(;Y.length;){var i=Y[0];ut(i,this.options.selectedClass,!1),Y.shift(),Te({sortable:this.sortable,rootEl:this.sortable.el,name:"deselect",targetEl:i})}},_checkKeyDown:function(n){n.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp:function(n){n.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},Lt(l,{pluginName:"multiDrag",utils:{select:function(n){var i=n.parentNode[Dt];!i||!i.options.multiDrag||~Y.indexOf(n)||(Gt&&Gt!==i&&(Gt.multiDrag._deselectMultiDrag(),Gt=i),ut(n,i.options.selectedClass,!0),Y.push(n))},deselect:function(n){var i=n.parentNode[Dt],e=Y.indexOf(n);!i||!i.options.multiDrag||!~e||(ut(n,i.options.selectedClass,!1),Y.splice(e,1))}},eventProperties:function(){var n=this,i=[],e=[];return Y.forEach(function(u){i.push({multiDragElement:u,index:u.sortableIndex});var t;Nt&&u!==rt?t=-1:Nt?t=ht(u,":not(."+n.options.selectedClass+")"):t=ht(u),e.push({multiDragElement:u,index:t})}),{items:Pn(Y),clones:[].concat(jt),oldIndicies:i,newIndicies:e}},optionListeners:{multiDragKey:function(n){return n=n.toLowerCase(),n==="ctrl"?n="Control":n.length>1&&(n=n.charAt(0).toUpperCase()+n.substr(1)),n}}})}function ao(l,r){Y.forEach(function(n,i){var e=r.children[n.sortableIndex+(l?Number(i):0)];e?r.insertBefore(n,e):r.appendChild(n)})}function Yr(l,r){jt.forEach(function(n,i){var e=r.children[n.sortableIndex+(l?Number(i):0)];e?r.insertBefore(n,e):r.appendChild(n)})}function We(){Y.forEach(function(l){l!==rt&&l.parentNode&&l.parentNode.removeChild(l)})}B.mount(new eo);B.mount(Pr,Cr);const io=Object.freeze(Object.defineProperty({__proto__:null,MultiDrag:oo,Sortable:B,Swap:ro,default:B},Symbol.toStringTag,{value:"Module"})),lo=sn(io);var so=Xe.exports,zr;function uo(){return zr||(zr=1,function(l,r){(function(i,e){l.exports=e(un,lo)})(typeof self<"u"?self:so,function(n,i){return function(e){var u={};function t(o){if(u[o])return u[o].exports;var a=u[o]={i:o,l:!1,exports:{}};return e[o].call(a.exports,a,a.exports,t),a.l=!0,a.exports}return t.m=e,t.c=u,t.d=function(o,a,s){t.o(o,a)||Object.defineProperty(o,a,{enumerable:!0,get:s})},t.r=function(o){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},t.t=function(o,a){if(a&1&&(o=t(o)),a&8||a&4&&typeof o=="object"&&o&&o.__esModule)return o;var s=Object.create(null);if(t.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:o}),a&2&&typeof o!="string")for(var f in o)t.d(s,f,(function(d){return o[d]}).bind(null,f));return s},t.n=function(o){var a=o&&o.__esModule?function(){return o.default}:function(){return o};return t.d(a,"a",a),a},t.o=function(o,a){return Object.prototype.hasOwnProperty.call(o,a)},t.p="",t(t.s="fb15")}({"00ee":function(e,u,t){var o=t("b622"),a=o("toStringTag"),s={};s[a]="z",e.exports=String(s)==="[object z]"},"0366":function(e,u,t){var o=t("1c0b");e.exports=function(a,s,f){if(o(a),s===void 0)return a;switch(f){case 0:return function(){return a.call(s)};case 1:return function(d){return a.call(s,d)};case 2:return function(d,c){return a.call(s,d,c)};case 3:return function(d,c,v){return a.call(s,d,c,v)}}return function(){return a.apply(s,arguments)}}},"057f":function(e,u,t){var o=t("fc6a"),a=t("241c").f,s={}.toString,f=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],d=function(c){try{return a(c)}catch{return f.slice()}};e.exports.f=function(v){return f&&s.call(v)=="[object Window]"?d(v):a(o(v))}},"06cf":function(e,u,t){var o=t("83ab"),a=t("d1e7"),s=t("5c6c"),f=t("fc6a"),d=t("c04e"),c=t("5135"),v=t("0cfb"),h=Object.getOwnPropertyDescriptor;u.f=o?h:function(g,y){if(g=f(g),y=d(y,!0),v)try{return h(g,y)}catch{}if(c(g,y))return s(!a.f.call(g,y),g[y])}},"0cfb":function(e,u,t){var o=t("83ab"),a=t("d039"),s=t("cc12");e.exports=!o&&!a(function(){return Object.defineProperty(s("div"),"a",{get:function(){return 7}}).a!=7})},"13d5":function(e,u,t){var o=t("23e7"),a=t("d58f").left,s=t("a640"),f=t("ae40"),d=s("reduce"),c=f("reduce",{1:0});o({target:"Array",proto:!0,forced:!d||!c},{reduce:function(h){return a(this,h,arguments.length,arguments.length>1?arguments[1]:void 0)}})},"14c3":function(e,u,t){var o=t("c6b6"),a=t("9263");e.exports=function(s,f){var d=s.exec;if(typeof d=="function"){var c=d.call(s,f);if(typeof c!="object")throw TypeError("RegExp exec method returned something other than an Object or null");return c}if(o(s)!=="RegExp")throw TypeError("RegExp#exec called on incompatible receiver");return a.call(s,f)}},"159b":function(e,u,t){var o=t("da84"),a=t("fdbc"),s=t("17c2"),f=t("9112");for(var d in a){var c=o[d],v=c&&c.prototype;if(v&&v.forEach!==s)try{f(v,"forEach",s)}catch{v.forEach=s}}},"17c2":function(e,u,t){var o=t("b727").forEach,a=t("a640"),s=t("ae40"),f=a("forEach"),d=s("forEach");e.exports=!f||!d?function(v){return o(this,v,arguments.length>1?arguments[1]:void 0)}:[].forEach},"1be4":function(e,u,t){var o=t("d066");e.exports=o("document","documentElement")},"1c0b":function(e,u){e.exports=function(t){if(typeof t!="function")throw TypeError(String(t)+" is not a function");return t}},"1c7e":function(e,u,t){var o=t("b622"),a=o("iterator"),s=!1;try{var f=0,d={next:function(){return{done:!!f++}},return:function(){s=!0}};d[a]=function(){return this},Array.from(d,function(){throw 2})}catch{}e.exports=function(c,v){if(!v&&!s)return!1;var h=!1;try{var p={};p[a]=function(){return{next:function(){return{done:h=!0}}}},c(p)}catch{}return h}},"1d80":function(e,u){e.exports=function(t){if(t==null)throw TypeError("Can't call method on "+t);return t}},"1dde":function(e,u,t){var o=t("d039"),a=t("b622"),s=t("2d00"),f=a("species");e.exports=function(d){return s>=51||!o(function(){var c=[],v=c.constructor={};return v[f]=function(){return{foo:1}},c[d](Boolean).foo!==1})}},"23cb":function(e,u,t){var o=t("a691"),a=Math.max,s=Math.min;e.exports=function(f,d){var c=o(f);return c<0?a(c+d,0):s(c,d)}},"23e7":function(e,u,t){var o=t("da84"),a=t("06cf").f,s=t("9112"),f=t("6eeb"),d=t("ce4e"),c=t("e893"),v=t("94ca");e.exports=function(h,p){var g=h.target,y=h.global,b=h.stat,D,O,C,I,w,A;if(y?O=o:b?O=o[g]||d(g,{}):O=(o[g]||{}).prototype,O)for(C in p){if(w=p[C],h.noTargetGet?(A=a(O,C),I=A&&A.value):I=O[C],D=v(y?C:g+(b?".":"#")+C,h.forced),!D&&I!==void 0){if(typeof w==typeof I)continue;c(w,I)}(h.sham||I&&I.sham)&&s(w,"sham",!0),f(O,C,w,h)}}},"241c":function(e,u,t){var o=t("ca84"),a=t("7839"),s=a.concat("length","prototype");u.f=Object.getOwnPropertyNames||function(d){return o(d,s)}},"25f0":function(e,u,t){var o=t("6eeb"),a=t("825a"),s=t("d039"),f=t("ad6d"),d="toString",c=RegExp.prototype,v=c[d],h=s(function(){return v.call({source:"a",flags:"b"})!="/a/b"}),p=v.name!=d;(h||p)&&o(RegExp.prototype,d,function(){var y=a(this),b=String(y.source),D=y.flags,O=String(D===void 0&&y instanceof RegExp&&!("flags"in c)?f.call(y):D);return"/"+b+"/"+O},{unsafe:!0})},"2ca0":function(e,u,t){var o=t("23e7"),a=t("06cf").f,s=t("50c4"),f=t("5a34"),d=t("1d80"),c=t("ab13"),v=t("c430"),h="".startsWith,p=Math.min,g=c("startsWith"),y=!v&&!g&&!!function(){var b=a(String.prototype,"startsWith");return b&&!b.writable}();o({target:"String",proto:!0,forced:!y&&!g},{startsWith:function(D){var O=String(d(this));f(D);var C=s(p(arguments.length>1?arguments[1]:void 0,O.length)),I=String(D);return h?h.call(O,I,C):O.slice(C,C+I.length)===I}})},"2d00":function(e,u,t){var o=t("da84"),a=t("342f"),s=o.process,f=s&&s.versions,d=f&&f.v8,c,v;d?(c=d.split("."),v=c[0]+c[1]):a&&(c=a.match(/Edge\/(\d+)/),(!c||c[1]>=74)&&(c=a.match(/Chrome\/(\d+)/),c&&(v=c[1]))),e.exports=v&&+v},"342f":function(e,u,t){var o=t("d066");e.exports=o("navigator","userAgent")||""},"35a1":function(e,u,t){var o=t("f5df"),a=t("3f8c"),s=t("b622"),f=s("iterator");e.exports=function(d){if(d!=null)return d[f]||d["@@iterator"]||a[o(d)]}},"37e8":function(e,u,t){var o=t("83ab"),a=t("9bf2"),s=t("825a"),f=t("df75");e.exports=o?Object.defineProperties:function(c,v){s(c);for(var h=f(v),p=h.length,g=0,y;p>g;)a.f(c,y=h[g++],v[y]);return c}},"3bbe":function(e,u,t){var o=t("861d");e.exports=function(a){if(!o(a)&&a!==null)throw TypeError("Can't set "+String(a)+" as a prototype");return a}},"3ca3":function(e,u,t){var o=t("6547").charAt,a=t("69f3"),s=t("7dd0"),f="String Iterator",d=a.set,c=a.getterFor(f);s(String,"String",function(v){d(this,{type:f,string:String(v),index:0})},function(){var h=c(this),p=h.string,g=h.index,y;return g>=p.length?{value:void 0,done:!0}:(y=o(p,g),h.index+=y.length,{value:y,done:!1})})},"3f8c":function(e,u){e.exports={}},4160:function(e,u,t){var o=t("23e7"),a=t("17c2");o({target:"Array",proto:!0,forced:[].forEach!=a},{forEach:a})},"428f":function(e,u,t){var o=t("da84");e.exports=o},"44ad":function(e,u,t){var o=t("d039"),a=t("c6b6"),s="".split;e.exports=o(function(){return!Object("z").propertyIsEnumerable(0)})?function(f){return a(f)=="String"?s.call(f,""):Object(f)}:Object},"44d2":function(e,u,t){var o=t("b622"),a=t("7c73"),s=t("9bf2"),f=o("unscopables"),d=Array.prototype;d[f]==null&&s.f(d,f,{configurable:!0,value:a(null)}),e.exports=function(c){d[f][c]=!0}},"44e7":function(e,u,t){var o=t("861d"),a=t("c6b6"),s=t("b622"),f=s("match");e.exports=function(d){var c;return o(d)&&((c=d[f])!==void 0?!!c:a(d)=="RegExp")}},4930:function(e,u,t){var o=t("d039");e.exports=!!Object.getOwnPropertySymbols&&!o(function(){return!String(Symbol())})},"4d64":function(e,u,t){var o=t("fc6a"),a=t("50c4"),s=t("23cb"),f=function(d){return function(c,v,h){var p=o(c),g=a(p.length),y=s(h,g),b;if(d&&v!=v){for(;g>y;)if(b=p[y++],b!=b)return!0}else for(;g>y;y++)if((d||y in p)&&p[y]===v)return d||y||0;return!d&&-1}};e.exports={includes:f(!0),indexOf:f(!1)}},"4de4":function(e,u,t){var o=t("23e7"),a=t("b727").filter,s=t("1dde"),f=t("ae40"),d=s("filter"),c=f("filter");o({target:"Array",proto:!0,forced:!d||!c},{filter:function(h){return a(this,h,arguments.length>1?arguments[1]:void 0)}})},"4df4":function(e,u,t){var o=t("0366"),a=t("7b0b"),s=t("9bdd"),f=t("e95a"),d=t("50c4"),c=t("8418"),v=t("35a1");e.exports=function(p){var g=a(p),y=typeof this=="function"?this:Array,b=arguments.length,D=b>1?arguments[1]:void 0,O=D!==void 0,C=v(g),I=0,w,A,E,T,M,H;if(O&&(D=o(D,b>2?arguments[2]:void 0,2)),C!=null&&!(y==Array&&f(C)))for(T=C.call(g),M=T.next,A=new y;!(E=M.call(T)).done;I++)H=O?s(T,D,[E.value,I],!0):E.value,c(A,I,H);else for(w=d(g.length),A=new y(w);w>I;I++)H=O?D(g[I],I):g[I],c(A,I,H);return A.length=I,A}},"4fad":function(e,u,t){var o=t("23e7"),a=t("6f53").entries;o({target:"Object",stat:!0},{entries:function(f){return a(f)}})},"50c4":function(e,u,t){var o=t("a691"),a=Math.min;e.exports=function(s){return s>0?a(o(s),9007199254740991):0}},5135:function(e,u){var t={}.hasOwnProperty;e.exports=function(o,a){return t.call(o,a)}},5319:function(e,u,t){var o=t("d784"),a=t("825a"),s=t("7b0b"),f=t("50c4"),d=t("a691"),c=t("1d80"),v=t("8aa5"),h=t("14c3"),p=Math.max,g=Math.min,y=Math.floor,b=/\$([$&'`]|\d\d?|<[^>]*>)/g,D=/\$([$&'`]|\d\d?)/g,O=function(C){return C===void 0?C:String(C)};o("replace",2,function(C,I,w,A){var E=A.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,T=A.REPLACE_KEEPS_$0,M=E?"$":"$0";return[function(j,X){var F=c(this),G=j?.[C];return G!==void 0?G.call(j,F,X):I.call(String(F),j,X)},function(R,j){if(!E&&T||typeof j=="string"&&j.indexOf(M)===-1){var X=w(I,R,this,j);if(X.done)return X.value}var F=a(R),G=String(this),_=typeof j=="function";_||(j=String(j));var ot=F.global;if(ot){var Et=F.unicode;F.lastIndex=0}for(var ft=[];;){var dt=h(F,G);if(dt===null||(ft.push(dt),!ot))break;var yt=String(dt[0]);yt===""&&(F.lastIndex=v(G,f(F.lastIndex),Et))}for(var bt="",gt=0,at=0;at=gt&&(bt+=G.slice(gt,Mt)+xt,gt=Mt+st.length)}return bt+G.slice(gt)}];function H(R,j,X,F,G,_){var ot=X+R.length,Et=F.length,ft=D;return G!==void 0&&(G=s(G),ft=b),I.call(_,ft,function(dt,yt){var bt;switch(yt.charAt(0)){case"$":return"$";case"&":return R;case"`":return j.slice(0,X);case"'":return j.slice(ot);case"<":bt=G[yt.slice(1,-1)];break;default:var gt=+yt;if(gt===0)return dt;if(gt>Et){var at=y(gt/10);return at===0?dt:at<=Et?F[at-1]===void 0?yt.charAt(1):F[at-1]+yt.charAt(1):dt}bt=F[gt-1]}return bt===void 0?"":bt})}})},5692:function(e,u,t){var o=t("c430"),a=t("c6cd");(e.exports=function(s,f){return a[s]||(a[s]=f!==void 0?f:{})})("versions",[]).push({version:"3.6.5",mode:o?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},"56ef":function(e,u,t){var o=t("d066"),a=t("241c"),s=t("7418"),f=t("825a");e.exports=o("Reflect","ownKeys")||function(c){var v=a.f(f(c)),h=s.f;return h?v.concat(h(c)):v}},"5a34":function(e,u,t){var o=t("44e7");e.exports=function(a){if(o(a))throw TypeError("The method doesn't accept regular expressions");return a}},"5c6c":function(e,u){e.exports=function(t,o){return{enumerable:!(t&1),configurable:!(t&2),writable:!(t&4),value:o}}},"5db7":function(e,u,t){var o=t("23e7"),a=t("a2bf"),s=t("7b0b"),f=t("50c4"),d=t("1c0b"),c=t("65f0");o({target:"Array",proto:!0},{flatMap:function(h){var p=s(this),g=f(p.length),y;return d(h),y=c(p,0),y.length=a(y,p,p,g,0,1,h,arguments.length>1?arguments[1]:void 0),y}})},6547:function(e,u,t){var o=t("a691"),a=t("1d80"),s=function(f){return function(d,c){var v=String(a(d)),h=o(c),p=v.length,g,y;return h<0||h>=p?f?"":void 0:(g=v.charCodeAt(h),g<55296||g>56319||h+1===p||(y=v.charCodeAt(h+1))<56320||y>57343?f?v.charAt(h):g:f?v.slice(h,h+2):(g-55296<<10)+(y-56320)+65536)}};e.exports={codeAt:s(!1),charAt:s(!0)}},"65f0":function(e,u,t){var o=t("861d"),a=t("e8b5"),s=t("b622"),f=s("species");e.exports=function(d,c){var v;return a(d)&&(v=d.constructor,typeof v=="function"&&(v===Array||a(v.prototype))?v=void 0:o(v)&&(v=v[f],v===null&&(v=void 0))),new(v===void 0?Array:v)(c===0?0:c)}},"69f3":function(e,u,t){var o=t("7f9a"),a=t("da84"),s=t("861d"),f=t("9112"),d=t("5135"),c=t("f772"),v=t("d012"),h=a.WeakMap,p,g,y,b=function(E){return y(E)?g(E):p(E,{})},D=function(E){return function(T){var M;if(!s(T)||(M=g(T)).type!==E)throw TypeError("Incompatible receiver, "+E+" required");return M}};if(o){var O=new h,C=O.get,I=O.has,w=O.set;p=function(E,T){return w.call(O,E,T),T},g=function(E){return C.call(O,E)||{}},y=function(E){return I.call(O,E)}}else{var A=c("state");v[A]=!0,p=function(E,T){return f(E,A,T),T},g=function(E){return d(E,A)?E[A]:{}},y=function(E){return d(E,A)}}e.exports={set:p,get:g,has:y,enforce:b,getterFor:D}},"6eeb":function(e,u,t){var o=t("da84"),a=t("9112"),s=t("5135"),f=t("ce4e"),d=t("8925"),c=t("69f3"),v=c.get,h=c.enforce,p=String(String).split("String");(e.exports=function(g,y,b,D){var O=D?!!D.unsafe:!1,C=D?!!D.enumerable:!1,I=D?!!D.noTargetGet:!1;if(typeof b=="function"&&(typeof y=="string"&&!s(b,"name")&&a(b,"name",y),h(b).source=p.join(typeof y=="string"?y:"")),g===o){C?g[y]=b:f(y,b);return}else O?!I&&g[y]&&(C=!0):delete g[y];C?g[y]=b:a(g,y,b)})(Function.prototype,"toString",function(){return typeof this=="function"&&v(this).source||d(this)})},"6f53":function(e,u,t){var o=t("83ab"),a=t("df75"),s=t("fc6a"),f=t("d1e7").f,d=function(c){return function(v){for(var h=s(v),p=a(h),g=p.length,y=0,b=[],D;g>y;)D=p[y++],(!o||f.call(h,D))&&b.push(c?[D,h[D]]:h[D]);return b}};e.exports={entries:d(!0),values:d(!1)}},"73d9":function(e,u,t){var o=t("44d2");o("flatMap")},7418:function(e,u){u.f=Object.getOwnPropertySymbols},"746f":function(e,u,t){var o=t("428f"),a=t("5135"),s=t("e538"),f=t("9bf2").f;e.exports=function(d){var c=o.Symbol||(o.Symbol={});a(c,d)||f(c,d,{value:s.f(d)})}},7839:function(e,u){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},"7b0b":function(e,u,t){var o=t("1d80");e.exports=function(a){return Object(o(a))}},"7c73":function(e,u,t){var o=t("825a"),a=t("37e8"),s=t("7839"),f=t("d012"),d=t("1be4"),c=t("cc12"),v=t("f772"),h=">",p="<",g="prototype",y="script",b=v("IE_PROTO"),D=function(){},O=function(E){return p+y+h+E+p+"/"+y+h},C=function(E){E.write(O("")),E.close();var T=E.parentWindow.Object;return E=null,T},I=function(){var E=c("iframe"),T="java"+y+":",M;return E.style.display="none",d.appendChild(E),E.src=String(T),M=E.contentWindow.document,M.open(),M.write(O("document.F=Object")),M.close(),M.F},w,A=function(){try{w=document.domain&&new ActiveXObject("htmlfile")}catch{}A=w?C(w):I();for(var E=s.length;E--;)delete A[g][s[E]];return A()};f[b]=!0,e.exports=Object.create||function(T,M){var H;return T!==null?(D[g]=o(T),H=new D,D[g]=null,H[b]=T):H=A(),M===void 0?H:a(H,M)}},"7dd0":function(e,u,t){var o=t("23e7"),a=t("9ed3"),s=t("e163"),f=t("d2bb"),d=t("d44e"),c=t("9112"),v=t("6eeb"),h=t("b622"),p=t("c430"),g=t("3f8c"),y=t("ae93"),b=y.IteratorPrototype,D=y.BUGGY_SAFARI_ITERATORS,O=h("iterator"),C="keys",I="values",w="entries",A=function(){return this};e.exports=function(E,T,M,H,R,j,X){a(M,T,H);var F=function(at){if(at===R&&ft)return ft;if(!D&&at in ot)return ot[at];switch(at){case C:return function(){return new M(this,at)};case I:return function(){return new M(this,at)};case w:return function(){return new M(this,at)}}return function(){return new M(this)}},G=T+" Iterator",_=!1,ot=E.prototype,Et=ot[O]||ot["@@iterator"]||R&&ot[R],ft=!D&&Et||F(R),dt=T=="Array"&&ot.entries||Et,yt,bt,gt;if(dt&&(yt=s(dt.call(new E)),b!==Object.prototype&&yt.next&&(!p&&s(yt)!==b&&(f?f(yt,b):typeof yt[O]!="function"&&c(yt,O,A)),d(yt,G,!0,!0),p&&(g[G]=A))),R==I&&Et&&Et.name!==I&&(_=!0,ft=function(){return Et.call(this)}),(!p||X)&&ot[O]!==ft&&c(ot,O,ft),g[T]=ft,R)if(bt={values:F(I),keys:j?ft:F(C),entries:F(w)},X)for(gt in bt)(D||_||!(gt in ot))&&v(ot,gt,bt[gt]);else o({target:T,proto:!0,forced:D||_},bt);return bt}},"7f9a":function(e,u,t){var o=t("da84"),a=t("8925"),s=o.WeakMap;e.exports=typeof s=="function"&&/native code/.test(a(s))},"825a":function(e,u,t){var o=t("861d");e.exports=function(a){if(!o(a))throw TypeError(String(a)+" is not an object");return a}},"83ab":function(e,u,t){var o=t("d039");e.exports=!o(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7})},8418:function(e,u,t){var o=t("c04e"),a=t("9bf2"),s=t("5c6c");e.exports=function(f,d,c){var v=o(d);v in f?a.f(f,v,s(0,c)):f[v]=c}},"861d":function(e,u){e.exports=function(t){return typeof t=="object"?t!==null:typeof t=="function"}},8875:function(e,u,t){var o,a,s;(function(f,d){a=[],o=d,s=typeof o=="function"?o.apply(u,a):o,s!==void 0&&(e.exports=s)})(typeof self<"u"?self:this,function(){function f(){var d=Object.getOwnPropertyDescriptor(document,"currentScript");if(!d&&"currentScript"in document&&document.currentScript||d&&d.get!==f&&document.currentScript)return document.currentScript;try{throw new Error}catch(w){var c=/.*at [^(]*\((.*):(.+):(.+)\)$/ig,v=/@([^@]*):(\d+):(\d+)\s*$/ig,h=c.exec(w.stack)||v.exec(w.stack),p=h&&h[1]||!1,g=h&&h[2]||!1,y=document.location.href.replace(document.location.hash,""),b,D,O,C=document.getElementsByTagName("script");p===y&&(b=document.documentElement.outerHTML,D=new RegExp("(?:[^\\n]+?\\n){0,"+(g-2)+"}[^<]*