diff --git a/app/assets/builds/alchemy/alchemy_admin.min.js b/app/assets/builds/alchemy/alchemy_admin.min.js
index 3ea6e9f864..d165306f61 100644
--- a/app/assets/builds/alchemy/alchemy_admin.min.js
+++ b/app/assets/builds/alchemy/alchemy_admin.min.js
@@ -1,2 +1,2 @@
-import"handlebars";import"@ungap/custom-elements";import{Turbo as e}from"@hotwired/turbo-rails";import t from"@rails/ujs";import"keymaster";import"clipboard";import i from"flatpickr";import s from"cropperjs";import n from"sortablejs";import"tinymce";import{setDefaultAnimation as o,registerIconLibrary as r}from"shoelace";const l=/\./;function a(e){const t=c(),i=Alchemy.translations;return i?l.test(e)?function(e,t){const i=t.split(l),s=e[i[0]];return s&&s[i[1]]||t}(i,e):i[e]||e:(console.warn(`Translations for locale ${t} not found!`),e)}function c(){return document.documentElement.lang?document.documentElement.lang:"en"}function d(e,t=void 0){let i=a(e);return t?i.replace(/%\{.+\}/,t):i}const h=[];function u(e=document){e===document&&h.forEach(e=>key.unbind(e));const t=e.querySelectorAll(".search_input_field"),i=e.querySelectorAll(".search_field_clear, .js_filter_field_clear");key("alt+f",function(){return key.setScope("search"),t.forEach(e=>e.focus({focusVisible:!0})),!1}),h.push("alt+f"),key("esc","search",function(){i.forEach(e=>e.click()),t.forEach(e=>e.blur())}),h.push("esc"),e.querySelectorAll("[data-alchemy-hotkey]").forEach(function(e){const t=e.dataset.alchemyHotkey;key(t,()=>e.click()),h.push(t)})}function p(e){const t=document.createElement("template");return t.innerHTML=e,t.content.children[0]}let m=class{constructor(e,t="currentColor"){this.size=e,this.color=t,this.spinner=void 0}get el(){return this.spinner}spin(e){return void 0===e&&(e=document.body),this.spinner=p(``),e.append(this.spinner),this}stop(){this.spinner&&(this.spinner.remove(),this.spinner=void 0)}};function g(e,t,i={}){e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:i}))}function f(e,t,i,s){document.querySelectorAll(t).forEach(t=>{t.addEventListener(e,e=>{const n=Array.from(t.querySelectorAll(i));let o=e.target;for(;o!==t;){if(n.includes(o))return void s.call(o,e);o=o.parentElement}})})}const v=[],y={header_height:36,size:"400x300",padding:!0,title:"",modal:!0,overflow:"visible",ready:()=>{},closed:()=>{}};class b{#e=null;#t=!1;constructor(e,t={}){this.url=e,this.options={...y,...t};const i=this.options.size.split("x");this.width=parseInt(i[0],10),this.height=parseInt(i[1],10),this.build(),this.resize()}open(){g(this.dialog,"Alchemy.DialogOpen"),this.bind_close_events(),this.options.modal?(this.dialog_container.showModal(),this.#i()):this.dialog_container.show(),window.requestAnimationFrame(()=>{this.dialog_container.classList.add("open")}),document.body.classList.add("prevent-scrolling"),v.push(this),this.load()}close(){return this.#t||(this.#t=!0,g(this.dialog,"DialogClose.Alchemy"),this.dialog_container.classList.remove("open"),this.dialog_container.addEventListener("transitionend",()=>{this.#s(),this.dialog_container.close(),this.dialog_container.remove(),v.pop(),0===v.length&&document.body.classList.remove("prevent-scrolling"),null!=this.options.closed&&this.options.closed()},{once:!0})),!0}#i(){const e=document.getElementById("flash_notices");e&&(this.#e=e.parentElement,this.dialog_container.append(e),this.#n(e))}#s(){const e=document.getElementById("flash_notices");e&&this.#e&&(this.#e.append(e),this.#n(e))}#n(e){e.querySelectorAll('alchemy-message[dismissable]:not([type="error"])').forEach(e=>e.remove())}load(){this.show_spinner(),fetch(this.url,{headers:{"X-Requested-With":"XMLHttpRequest"}}).then(async e=>{const t=await e.text();e.ok?this.replace(t):this.show_error({status:e.status,statusText:e.statusText,responseText:t})}).catch(()=>{this.show_error({status:0})})}reload(){this.dialog_body.innerHTML="",this.load()}replace(e){this.remove_spinner(),this.dialog_body.style.display="none",this.dialog_body.innerHTML=e,this.init(),g(this.dialog,"DialogReady.Alchemy",{body:this.dialog_body}),null!=this.options.ready&&this.options.ready(this.dialog_body),this.dialog_body.style.display=""}show_spinner(){this.spinner=new m("medium"),this.spinner.spin(this.dialog_body)}remove_spinner(){this.spinner.stop()}init(){u(this.dialog_body),this.watch_remote_forms(),window.requestAnimationFrame(()=>this.#o())}#o(e=0){const t=this.dialog_body.querySelector("[autofocus]")??this.dialog_body.querySelector("form [type='submit']");t?.focus(),document.activeElement===this.close_button&&e<20&&window.requestAnimationFrame(()=>this.#o(e+1))}watch_remote_forms(){this.dialog_body.querySelectorAll('[data-remote="true"]').forEach(e=>{e.addEventListener("ajax:success",e=>{const t=e.detail[2];t.getResponseHeader("Content-Type").match(/javascript/)||(this.dialog_body.innerHTML=t.responseText,this.init())}),e.addEventListener("ajax:error",e=>{const t=e.detail[1],i=e.detail[2];this.show_error(i,t)})})}show_error(e,t){if(422===e.status)return this.dialog_body.innerHTML=e.responseText,void this.init();const{error_body:i,error_header:s,error_type:n}=this.error_messages(e,t);this.dialog_body.innerHTML=`\n
${s}
\n
${i}
\n `}error_messages(e,t){let i,s,n="warning";switch(e.status){case 0:s="The server does not respond.",i="Please check server and try again.";break;case 403:s="You are not authorized!",i="Please close this window.";break;default:n="error",t?(s=t,console.error(e.responseText)):s=`${e.statusText} (${e.status})`,i="Please check log and try again."}return{error_header:s,error_body:i,error_type:n}}bind_close_events(){this.close_button.addEventListener("click",e=>{e.preventDefault(),this.close()}),this.dialog_container.classList.add("closable"),this.dialog_container.addEventListener("pointerdown",e=>{e.target===this.dialog_container&&this.close()}),this.dialog_container.addEventListener("cancel",e=>{e.preventDefault(),this.close()})}build(){this.dialog_container=p(''),this.dialog=p('
'),this.dialog_body=p(''),this.dialog_header=p(''),this.dialog_title=p(''),this.close_button=p(''),this.dialog_title.textContent=this.options.title,this.dialog_header.append(this.dialog_title),this.dialog_header.append(this.close_button),this.dialog.append(this.dialog_header),this.dialog.append(this.dialog_body),this.dialog_container.append(this.dialog),this.options.modal&&this.dialog.classList.add("modal"),this.options.padding&&this.dialog_body.classList.add("padded"),document.body.append(this.dialog_container)}resize(){const{width:e,height:t}=this.getSize();this.dialog.style.width=`${e}px`,this.dialog.style.minHeight=`${t}px`,this.dialog.style.overflow=this.options.overflow,"hidden"===this.options.overflow?(this.dialog_body.style.height=`${t}px`,this.dialog_body.style.overflow="auto"):(this.dialog_body.style.minHeight=`${t}px`,this.dialog_body.style.overflow="visible")}getSize(){const e=this.options.padding?16:0,t=window.innerWidth,i=window.innerHeight;let s=this.width,n=this.height;return s>=t&&(s=t-e),n>=i&&(n=i-e-y.header_height),{width:s,height:n}}}function w(){const{length:e}=v;if(0!==e)return v[e-1]}function E(e){const t=w();if(null!=t)return t.options.closed=e,t.close()}function k(e,t){if(!e)throw"No url given! Please provide an url.";new b(e,t).open()}class L{constructor(e,t={}){this.message=e,this.options={...{size:"300x100",title:d("Please confirm"),ok_label:d("Yes"),cancel_label:d("No"),on_ok(){}},...t},this.#r(),this.#l()}open(){requestAnimationFrame(()=>{this.dialog.show()})}#r(){const e=this.options.size.split("x")[0];this.dialog=p(`\n \n ${this.message}\n \n \n \n `);(w()?.dialog_container??document.body).append(this.dialog)}#l(){this.cancelButton.addEventListener("click",e=>{e.preventDefault(),this.options.on_cancel(),this.dialog.hide()}),this.okButton.addEventListener("click",e=>{e.preventDefault(),this.options.on_ok(),this.dialog.hide()}),this.dialog.addEventListener("sl-request-close",e=>{"overlay"===e.detail.source&&(this.options.on_cancel(),e.preventDefault())}),this.dialog.addEventListener("sl-after-hide",()=>{this.dialog.remove()})}get cancelButton(){return this.dialog.querySelector("button[type=reset]")}get okButton(){return this.dialog.querySelector("button[type=submit]")}}function _(e,t={}){return new Promise(i=>{new L(e,{...t,on_ok(){i(!0)},on_cancel(){i(!1)}}).open()})}function x(e=!0){document.querySelector("alchemy-overlay").show=!!e}function S(e){let t=()=>{};e.matches("form")?t=function(){const t=document.createElement("form");t.action=e.action,t.method="POST",t.style.display="none",e.querySelectorAll("input").forEach(e=>t.append(e)),document.body.append(t),x(),t.requestSubmit()}:e.matches("a")&&(t=()=>Turbo.visit(e.pathname));return!(document.querySelectorAll("alchemy-element-editor.dirty").length>0)||(_(d("page_dirty_notice"),{title:d("warning"),ok_label:d("ok"),cancel_label:d("cancel")}).then(e=>{e&&(window.onbeforeunload=void 0,t())}),!1)}var C={checkPageDirtyness:S,PageLeaveObserver:function(){document.querySelectorAll("#main_navi a").forEach(e=>{e.addEventListener("click",e=>{S(e.currentTarget)||e.preventDefault()})})}};function A(e){const t=document.getElementById("fixed-elements"),i=`fixed-element-${e}`;t.querySelector(`sl-tab[panel="${i}"]`).remove(),t.querySelector(`sl-tab-panel[name="${i}"]`).remove(),t.show("main-content-elements")}var O=Object.freeze({__proto__:null,createTab:function(e,t){const i=document.getElementById("fixed-elements"),s=`fixed-element-${e}`,n=`${t}`,o=``;i.innerHTML+=n+o,window.requestAnimationFrame(function(){i.show(s)})},removeTab:A});function T(e,t="notice"){!function(e,t){const i=document.getElementById("flash_notices"),s=p(`\n \n ${e}\n \n `);i.append(s)}(e,t)}function I(e){return!(!e.target.matches("input, textarea")&&"?"===String.fromCharCode(e.which))||(k("/admin/help",{title:Alchemy.t("help"),size:"400x492"}),!1)}const F=/#[\w.~-]+$/;class q extends HTMLIFrameElement{#a;#c;#d;handleEvent(e){"load"===e.type&&(this.#h(),this.#u(),this.#a?.call(this,e))}#p=e=>{"Alchemy.previewReady"===e.data.message&&(this.#h(),this.#u(),this.#a?.call(this,e))};connectedCallback(){let e=this.url;this.addEventListener("load",this),this.#m(),window.addEventListener("message",this.#p),window.localStorage.getItem("alchemy-preview-url")&&(e=window.localStorage.getItem("alchemy-preview-url"),this.previewUrlSelect.value=e),this.refresh(e)}disconnectedCallback(){this.removeEventListener("load",this),key.unbind("alt+r"),window.removeEventListener("message",this.#p)}postMessage(e){this.contentWindow.postMessage(e,"*")}resize(e){this.style.width=`${e}px`}refresh(e){return this.#g(),this.src=e||this.url,this.#h(),this.#d=setTimeout(()=>{this.#u(),T(d("Preview failed to load"),"warning")},5e3),new Promise(e=>{this.#a=e})}set isDragged(e){this.style.transitionProperty=e?"none":null,this.style.pointerEvents=e?"none":null}#m(){this.reloadButton?.addEventListener("click",e=>{e.preventDefault(),this.refresh()}),key("alt+r",()=>this.refresh()),this.sizeSelect.addEventListener("change",e=>{const t=e.target.value;""===t?this.style.width=null:this.resize(t)}),this.previewUrlSelect?.addEventListener("change",e=>{const t=e.target.value;window.localStorage.setItem("alchemy-preview-url",t),this.refresh(t)})}#g(){this.reloadButton.innerHTML.includes("alchemy-spinner")||(this.#c=this.reloadButton.innerHTML),this.reloadButton.innerHTML=''}#u(){this.reloadButton.innerHTML=this.#c}#h(){this.#d&&(clearTimeout(this.#d),this.#d=null)}get url(){return this.getAttribute("url")}get sizeSelect(){return document.querySelector("select#preview_size")}get previewUrlSelect(){return document.querySelector("select#preview_url")}get reloadButton(){return document.querySelector("#reload_preview_button")}}function $(){document.getElementById("alchemy_preview_window").refresh()}customElements.define("alchemy-preview-window",q,{extends:"iframe"}),e.StreamActions.assign_picture=function(){const[e]=this.targetElements;e&&(e.value=this.getAttribute("picture-id"),e.setAttribute("data-image-file-width",this.getAttribute("image-file-width")),e.setAttribute("data-image-file-height",this.getAttribute("image-file-height")),E(()=>{e.closest("alchemy-element-editor")?.setDirty()}))},e.StreamActions.assign_attachment=function(){const[e]=this.targetElements;if(!e)return;const t=e.parentElement;e.value=this.getAttribute("attachment-id"),t.querySelector(":scope > .file_name").textContent=this.getAttribute("attachment-name"),t.querySelector(":scope > .file_icon").replaceChildren(this.templateContent),t.querySelector(":scope > .remove_file_link").classList.remove("hidden"),E(()=>{e.closest("alchemy-element-editor")?.setDirty(e)})};class D{static updateIcon(e,t=!1){const i=document.querySelector(`[data-ingredient-id="${e}"]`);if(i){i.querySelector(".edit-ingredient-anchor-link alchemy-icon").setAttribute("icon-style",t?"fill":"line")}}}class M extends HTMLElement{constructor(){super(),this.actions={closeCurrentDialog:E,reloadPreview:$,removeFixedElement:A,updateAnchorIcon:D.updateIcon,hidePleaseWaitOverlay(){x(!1)}}}connectedCallback(){const e=this.actions[this.name];e?e(...this.params):console.error(`Unknown Alchemy action: ${this.name}`),this.remove()}get name(){return this.getAttribute("name")}get params(){return this.hasAttribute("params")?JSON.parse(this.getAttribute("params")):[]}}function H(e,t){e.split(/\s+/).forEach(e=>{t(e)})}customElements.define("alchemy-action",M);class P{constructor(){this._events={}}on(e,t){H(e,e=>{const i=this._events[e]||[];i.push(t),this._events[e]=i})}off(e,t){var i=arguments.length;0!==i?H(e,e=>{if(1===i)return void delete this._events[e];const s=this._events[e];void 0!==s&&(s.splice(s.indexOf(t),1),this._events[e]=s)}):this._events={}}trigger(e,...t){var i=this;H(e,e=>{const s=i._events[e];void 0!==s&&s.forEach(e=>{e.apply(i,t)})})}}const B=e=>(e=e.filter(Boolean)).length<2?e[0]||"":1==W(e)?"["+e.join("")+"]":"(?:"+e.join("|")+")",z=e=>{if(!N(e))return e.join("");let t="",i=0;const s=()=>{i>1&&(t+="{"+i+"}")};return e.forEach((n,o)=>{n!==e[o-1]?(s(),t+=n,i=1):i++}),s(),t},R=e=>{let t=Array.from(e);return B(t)},N=e=>new Set(e).size!==e.length,j=e=>(e+"").replace(/([\$\(\)\*\+\.\?\[\]\^\{\|\}\\])/gu,"\\$1"),W=e=>e.reduce((e,t)=>Math.max(e,U(t)),0),U=e=>Array.from(e).length,V=e=>{if(1===e.length)return[[e]];let t=[];const i=e.substring(1);return V(i).forEach(function(i){let s=i.slice(0);s[0]=e.charAt(0)+s[0],t.push(s),s=i.slice(0),s.unshift(e.charAt(0)),t.push(s)}),t},K=[[0,65535]];let J,G;const X={},Q={"/":"⁄∕",0:"߀",a:"ⱥɐɑ",aa:"ꜳ",ae:"æǽǣ",ao:"ꜵ",au:"ꜷ",av:"ꜹꜻ",ay:"ꜽ",b:"ƀɓƃ",c:"ꜿƈȼↄ",d:"đɗɖᴅƌꮷԁɦ",e:"ɛǝᴇɇ",f:"ꝼƒ",g:"ǥɠꞡᵹꝿɢ",h:"ħⱨⱶɥ",i:"ɨı",j:"ɉȷ",k:"ƙⱪꝁꝃꝅꞣ",l:"łƚɫⱡꝉꝇꞁɭ",m:"ɱɯϻ",n:"ꞥƞɲꞑᴎлԉ",o:"øǿɔɵꝋꝍᴑ",oe:"œ",oi:"ƣ",oo:"ꝏ",ou:"ȣ",p:"ƥᵽꝑꝓꝕρ",q:"ꝗꝙɋ",r:"ɍɽꝛꞧꞃ",s:"ßȿꞩꞅʂ",t:"ŧƭʈⱦꞇ",th:"þ",tz:"ꜩ",u:"ʉ",v:"ʋꝟʌ",vy:"ꝡ",w:"ⱳ",y:"ƴɏỿ",z:"ƶȥɀⱬꝣ",hv:"ƕ"};for(let e in Q){let t=Q[e]||"";for(let i=0;ie.normalize(t),ee=e=>Array.from(e).reduce((e,t)=>e+te(t),""),te=e=>(e=Z(e).toLowerCase().replace(Y,e=>X[e]||""),Z(e,"NFC"));const ie=e=>{const t={},i=(e,i)=>{const s=t[e]||new Set,n=new RegExp("^"+R(s)+"$","iu");i.match(n)||(s.add(j(i)),t[e]=s)};for(let t of function*(e){for(const[t,i]of e)for(let e=t;e<=i;e++){let t=String.fromCharCode(e),i=ee(t);i!=t.toLowerCase()&&(i.length>3||0!=i.length&&(yield{folded:i,composed:t,code_point:e}))}}(e))i(t.folded,t.folded),i(t.folded,t.composed);return t},se=e=>{const t=ie(e),i={};let s=[];for(let e in t){let n=t[e];n&&(i[e]=R(n)),e.length>1&&s.push(j(e))}s.sort((e,t)=>t.length-e.length);const n=B(s);return G=new RegExp("^"+n,"u"),i},ne=(e,t=1)=>(t=Math.max(t,e.length-1),B(V(e).map(e=>((e,t=1)=>{let i=0;return e=e.map(e=>(J[e]&&(i+=e.length),J[e]||e)),i>=t?z(e):""})(e,t)))),oe=(e,t=!0)=>{let i=e.length>1?1:0;return B(e.map(e=>{let s=[];const n=t?e.length():e.length()-1;for(let t=0;t{for(const i of t){if(i.start!=e.start||i.end!=e.end)continue;if(i.substrs.join("")!==e.substrs.join(""))continue;let t=e.parts;const s=e=>{for(const i of t){if(i.start===e.start&&i.substr===e.substr)return!1;if(1!=e.length&&1!=i.length){if(e.starti.start)return!0;if(i.starte.start)return!0}}return!1};if(!(i.parts.filter(s).length>0))return!0}return!1};class le{parts;substrs;start;end;constructor(){this.parts=[],this.substrs=[],this.start=0,this.end=0}add(e){e&&(this.parts.push(e),this.substrs.push(e.substr),this.start=Math.min(e.start,this.start),this.end=Math.max(e.end,this.end))}last(){return this.parts[this.parts.length-1]}length(){return this.parts.length}clone(e,t){let i=new le,s=JSON.parse(JSON.stringify(this.parts)),n=s.pop();for(const e of s)i.add(e);let o=t.substr.substring(0,e-n.start),r=o.length;return i.add({start:n.start,end:n.start+r,length:r,substr:o}),i}}const ae=e=>{void 0===J&&(J=se(K)),e=ee(e);let t="",i=[new le];for(let s=0;s0){l=l.sort((e,t)=>e.length()-t.length());for(let e of l)re(e,i)||i.push(e)}else if(s>0&&1==a.size&&!a.has("3")){t+=oe(i,!1);let e=new le;const s=i[0];s&&e.add(s.last()),i=[e]}}return t+=oe(i,!0),t},ce=(e,t)=>{if(e)return e[t]},de=(e,t)=>{if(e){for(var i,s=t.split(".");(i=s.shift())&&(e=e[i]););return e}},he=(e,t,i)=>{var s,n;return e?(e+="",null==t.regex||-1===(n=e.search(t.regex))?0:(s=t.string.length/e.length,0===n&&(s+=.5),s*i)):0},ue=(e,t)=>{var i=e[t];if("function"==typeof i)return i;i&&!Array.isArray(i)&&(e[t]=[i])},pe=(e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var i in e)e.hasOwnProperty(i)&&t(e[i],i)},me=(e,t)=>"number"==typeof e&&"number"==typeof t?e>t?1:e(t=ee(t+"").toLowerCase())?1:t>e?-1:0;class ge{items;settings;constructor(e,t){this.items=e,this.settings=t||{diacritics:!0}}tokenize(e,t,i){if(!e||!e.length)return[];const s=[],n=e.split(/\s+/);var o;return i&&(o=new RegExp("^("+Object.keys(i).map(j).join("|")+"):(.*)$")),n.forEach(e=>{let i,n=null,r=null;o&&(i=e.match(o))&&(n=i[1],e=i[2]),e.length>0&&(r=this.settings.diacritics?ae(e)||null:j(e),r&&t&&(r="\\b"+r)),s.push({string:e,regex:r?new RegExp(r,"iu"):null,field:n})}),s}getScoreFunction(e,t){var i=this.prepareSearch(e,t);return this._getScoreFunction(i)}_getScoreFunction(e){const t=e.tokens,i=t.length;if(!i)return function(){return 0};const s=e.options.fields,n=e.weights,o=s.length,r=e.getAttrFn;if(!o)return function(){return 1};const l=1===o?function(e,t){const i=s[0].field;return he(r(t,i),e,n[i]||1)}:function(e,t){var i=0;if(e.field){const s=r(t,e.field);!e.regex&&s?i+=1/o:i+=he(s,e,1)}else pe(n,(s,n)=>{i+=he(r(t,n),e,s)});return i/o};return 1===i?function(e){return l(t[0],e)}:"and"===e.options.conjunction?function(e){var s,n=0;for(let i of t){if((s=l(i,e))<=0)return 0;n+=s}return n/i}:function(e){var s=0;return pe(t,t=>{s+=l(t,e)}),s/i}}getSortFunction(e,t){var i=this.prepareSearch(e,t);return this._getSortFunction(i)}_getSortFunction(e){var t,i=[];const s=this,n=e.options,o=!e.query&&n.sort_empty?n.sort_empty:n.sort;if("function"==typeof o)return o.bind(this);const r=function(t,i){return"$score"===t?i.score:e.getAttrFn(s.items[i.id],t)};if(o)for(let t of o)(e.query||"$score"!==t.field)&&i.push(t);if(e.query){t=!0;for(let e of i)if("$score"===e.field){t=!1;break}t&&i.unshift({field:"$score",direction:"desc"})}else i=i.filter(e=>"$score"!==e.field);return i.length?function(e,t){var s,n;for(let o of i){if(n=o.field,s=("desc"===o.direction?-1:1)*me(r(n,e),r(n,t)))return s}return 0}:null}prepareSearch(e,t){const i={};var s=Object.assign({},t);if(ue(s,"sort"),ue(s,"sort_empty"),s.fields){ue(s,"fields");const e=[];s.fields.forEach(t=>{"string"==typeof t&&(t={field:t,weight:1}),e.push(t),i[t.field]="weight"in t?t.weight:1}),s.fields=e}return{options:s,query:e.toLowerCase().trim(),tokens:this.tokenize(e,s.respect_word_boundaries,i),total:0,items:[],weights:i,getAttrFn:s.nesting?de:ce}}search(e,t){var i,s,n=this;s=this.prepareSearch(e,t),t=s.options,e=s.query;const o=t.score||n._getScoreFunction(s);e.length?pe(n.items,(e,n)=>{i=o(e),(!1===t.filter||i>0)&&s.items.push({score:i,id:n})}):pe(n.items,(e,t)=>{s.items.push({score:1,id:t})});const r=n._getSortFunction(s);return r&&s.items.sort(r),s.total=s.items.length,"number"==typeof t.limit&&(s.items=s.items.slice(0,t.limit)),s}}const fe=e=>null==e?null:ve(e),ve=e=>"boolean"==typeof e?e?"1":"0":e+"",ye=e=>(e+"").replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),be=(e,t)=>{var i;return function(s,n){var o=this;i&&(o.loading=Math.max(o.loading-1,0),clearTimeout(i)),i=setTimeout(function(){i=null,o.loadedSearches[s]=!0,e.call(o,s,n)},t)}},we=(e,t,i)=>{var s,n=e.trigger,o={};for(s of(e.trigger=function(){var i=arguments[0];if(-1===t.indexOf(i))return n.apply(e,arguments);o[i]=arguments},i.apply(e,[]),e.trigger=n,t))s in o&&n.apply(e,o[s])},Ee=(e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())},ke=(e,t,i,s)=>{e.addEventListener(t,i,s)},Le=(e,t)=>!!t&&(!!t[e]&&1===(t.altKey?1:0)+(t.ctrlKey?1:0)+(t.shiftKey?1:0)+(t.metaKey?1:0)),_e=(e,t)=>{const i=e.getAttribute("id");return i||(e.setAttribute("id",t),t)},xe=e=>e.replace(/[\\"']/g,"\\$&"),Se=(e,t)=>{t&&e.append(t)},Ce=(e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var i in e)e.hasOwnProperty(i)&&t(e[i],i)},Ae=e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(Oe(e)){var t=document.createElement("template");return t.innerHTML=e.trim(),t.content.firstChild}return document.querySelector(e)},Oe=e=>"string"==typeof e&&e.indexOf("<")>-1,Te=(e,t)=>{var i=document.createEvent("HTMLEvents");i.initEvent(t,!0,!1),e.dispatchEvent(i)},Ie=(e,t)=>{Object.assign(e.style,t)},Fe=(e,...t)=>{var i=$e(t);(e=De(e)).map(e=>{i.map(t=>{e.classList.add(t)})})},qe=(e,...t)=>{var i=$e(t);(e=De(e)).map(e=>{i.map(t=>{e.classList.remove(t)})})},$e=e=>{var t=[];return Ce(e,e=>{"string"==typeof e&&(e=e.trim().split(/[\t\n\f\r\s]/)),Array.isArray(e)&&(t=t.concat(e))}),t.filter(Boolean)},De=e=>(Array.isArray(e)||(e=[e]),e),Me=(e,t,i)=>{if(!i||i.contains(e))for(;e&&e.matches;){if(e.matches(t))return e;e=e.parentNode}},He=(e,t=0)=>t>0?e[e.length-1]:e[0],Pe=(e,t)=>{if(!e)return-1;t=t||e.nodeName;for(var i=0;e=e.previousElementSibling;)e.matches(t)&&i++;return i},Be=(e,t)=>{Ce(t,(t,i)=>{null==t?e.removeAttribute(i):e.setAttribute(i,""+t)})},ze=(e,t)=>{e.parentNode&&e.parentNode.replaceChild(t,e)},Re=(e,t)=>{if(null===t)return;if("string"==typeof t){if(!t.length)return;t=new RegExp(t,"i")}const i=e=>3===e.nodeType?(e=>{var i=e.data.match(t);if(i&&e.data.length>0){var s=document.createElement("span");s.className="highlight";var n=e.splitText(i.index);n.splitText(i[0].length);var o=n.cloneNode(!0);return s.appendChild(o),ze(n,s),1}return 0})(e):((e=>{1!==e.nodeType||!e.childNodes||/(script|style)/i.test(e.tagName)||"highlight"===e.className&&"SPAN"===e.tagName||Array.from(e.childNodes).forEach(e=>{i(e)})})(e),0);i(e)},Ne="undefined"!=typeof navigator&&/Mac/.test(navigator.userAgent)?"metaKey":"ctrlKey";var je={options:[],optgroups:[],plugins:[],delimiter:",",splitOn:null,persist:!0,diacritics:!0,create:null,createOnBlur:!1,createFilter:null,clearAfterSelect:!1,highlight:!0,openOnFocus:!0,shouldOpen:null,maxOptions:50,maxItems:null,hideSelected:null,duplicates:!1,addPrecedence:!1,selectOnTab:!1,preload:null,allowEmptyOption:!1,refreshThrottle:300,loadThrottle:300,loadingClass:"loading",dataAttr:null,optgroupField:"optgroup",valueField:"value",labelField:"text",disabledField:"disabled",optgroupLabelField:"label",optgroupValueField:"value",lockOptgroupOrder:!1,sortField:"$order",searchField:["text"],searchConjunction:"and",mode:null,wrapperClass:"ts-wrapper",controlClass:"ts-control",dropdownClass:"ts-dropdown",dropdownContentClass:"ts-dropdown-content",itemClass:"item",optionClass:"option",dropdownParent:null,controlInput:'',copyClassesToDropdown:!1,placeholder:null,hidePlaceholder:null,shouldLoad:function(e){return e.length>0},render:{}};function We(e,t){var i=Object.assign({},je,t),s=i.dataAttr,n=i.labelField,o=i.valueField,r=i.disabledField,l=i.optgroupField,a=i.optgroupLabelField,c=i.optgroupValueField,d=e.tagName.toLowerCase(),h=e.getAttribute("placeholder")||e.getAttribute("data-placeholder");if(!h&&!i.allowEmptyOption){let t=e.querySelector('option[value=""]');t&&(h=t.textContent)}var u={placeholder:h,options:[],optgroups:[],items:[],maxItems:null};return"select"===d?(()=>{var t,d=u.options,h={},p=1;let m=0;var g=e=>{var t=Object.assign({},e.dataset),i=s&&t[s];return"string"==typeof i&&i.length&&(t=Object.assign(t,JSON.parse(i))),t},f=(e,t)=>{var s=fe(e.value);if(null!=s&&(s||i.allowEmptyOption)){if(h.hasOwnProperty(s)){if(t){var a=h[s][l];a?Array.isArray(a)?a.push(t):h[s][l]=[a,t]:h[s][l]=t}}else{var c=g(e);c[n]=c[n]||e.textContent,c[o]=c[o]||s,c[r]=c[r]||e.disabled,c[l]=c[l]||t,c.$option=e,c.$order=c.$order||++m,h[s]=c,d.push(c)}e.selected&&u.items.push(s)}};u.maxItems=e.hasAttribute("multiple")?null:1,Ce(e.children,e=>{var i,s,n;"optgroup"===(t=e.tagName.toLowerCase())?((n=g(i=e))[a]=n[a]||i.getAttribute("label")||"",n[c]=n[c]||p++,n[r]=n[r]||i.disabled,n.$order=n.$order||++m,u.optgroups.push(n),s=n[c],Ce(i.children,e=>{f(e,s)})):"option"===t&&f(e)})})():(()=>{var t,r;const l=e.getAttribute(s);if(l)u.options=JSON.parse(l),Ce(u.options,e=>{u.items.push(e[o])});else{var a=null!==(r=null===(t=null==e?void 0:e.value)||void 0===t?void 0:t.trim())&&void 0!==r?r:"";if(!i.allowEmptyOption&&!a.length)return;const s=a.split(i.delimiter);Ce(s,e=>{const t={};t[n]=e,t[o]=e,u.options.push(t)}),u.items=s}})(),Object.assign({},je,u,t)}var Ue=0;class Ve extends(function(e){return e.plugins={},class extends e{constructor(){super(...arguments),this.plugins={names:[],settings:{},requested:{},loaded:{}}}static define(t,i){e.plugins[t]={name:t,fn:i}}initializePlugins(e){var t,i;const s=this,n=[];if(Array.isArray(e))e.forEach(e=>{"string"==typeof e?n.push(e):(s.plugins.settings[e.name]=e.options,n.push(e.name))});else if(e)for(t in e)e.hasOwnProperty(t)&&(s.plugins.settings[t]=e[t],n.push(t));for(;i=n.shift();)s.require(i)}loadPlugin(t){var i=this,s=i.plugins,n=e.plugins[t];if(!e.plugins.hasOwnProperty(t))throw new Error('Unable to find "'+t+'" plugin');s.requested[t]=!0,s.loaded[t]=n.fn.apply(i,[i.plugins.settings[t]||{}]),s.names.push(t)}require(e){var t=this,i=t.plugins;if(!t.plugins.loaded.hasOwnProperty(e)){if(i.requested[e])throw new Error('Plugin has circular dependency ("'+e+'")');t.loadPlugin(e)}return i.loaded[e]}}}(P)){constructor(e,t){var i;super(),this.order=0,this.isOpen=!1,this.isDisabled=!1,this.isReadOnly=!1,this.isInvalid=!1,this.isValid=!0,this.isLocked=!1,this.isFocused=!1,this.isInputHidden=!1,this.isSetup=!1,this.isDropdownContentStale=!0,this.ignoreFocus=!1,this.ignoreHover=!1,this.hasOptions=!1,this.lastValue="",this.caretPos=0,this.loading=0,this.loadedSearches={},this.activeOption=null,this.activeItems=[],this.optgroups={},this.options={},this.userOptions={},this.items=[],this.refreshTimeout=null,Ue++;var s=Ae(e);if(s.tomselect)throw new Error("Tom Select already initialized on this element");s.tomselect=this,i=(window.getComputedStyle&&window.getComputedStyle(s,null)).getPropertyValue("direction");const n=We(s,t);this.settings=n,this.input=s,this.tabIndex=s.tabIndex||0,this.is_select_tag="select"===s.tagName.toLowerCase(),this.rtl=/rtl/i.test(i),this.inputId=_e(s,"tomselect-"+Ue),this.isRequired=s.required,this.sifter=new ge(this.options,{diacritics:n.diacritics}),n.mode=n.mode||(1===n.maxItems?"single":"multi"),"boolean"!=typeof n.hideSelected&&(n.hideSelected="multi"===n.mode),"boolean"!=typeof n.hidePlaceholder&&(n.hidePlaceholder="multi"!==n.mode);var o=n.createFilter;"function"!=typeof o&&("string"==typeof o&&(o=new RegExp(o)),o instanceof RegExp?n.createFilter=e=>o.test(e):n.createFilter=e=>this.settings.duplicates||!this.options[e]),this.initializePlugins(n.plugins),this.setupCallbacks(),this.setupTemplates();const r=Ae("
`,e.style.display="block"}},pleaseWaitOverlay:x,Spinner:m,reloadPreview:$}),t.start(),e.config.forms.confirm=_,document.addEventListener("turbo:load",function(){document.documentElement.classList.remove("no-js"),u(),document.removeEventListener("keypress",I),document.addEventListener("keypress",I),document.querySelectorAll(".please_wait").forEach(e=>{e.addEventListener("click",x)}),document.querySelectorAll("a.button").forEach(e=>{e.setAttribute("tabindex",0)}),key.filter=function(e){let t=(e.target||e.srcElement).tagName;return key.isPressed("esc")||!("INPUT"===t||"SELECT"===t||"TEXTAREA"===t)}});export{Pi as AttachmentSelect,cs as ElementSelect,Zs as ImageOverlay,on as NodeTree,Fs as PageSelect,Hi as RemoteSelect,Ws as TagsAutocomplete,Ks as Tinymce,f as on,tn as pictureSelector};
+import"handlebars";import"@ungap/custom-elements";import{Turbo as e}from"@hotwired/turbo-rails";import t from"@rails/ujs";import"keymaster";import"clipboard";import i from"flatpickr";import s from"cropperjs";import n from"sortablejs";import"tinymce";import{setDefaultAnimation as o,registerIconLibrary as r}from"shoelace";const l=/\./;function a(e){const t=c(),i=Alchemy.translations;return i?l.test(e)?function(e,t){const i=t.split(l),s=e[i[0]];return s&&s[i[1]]||t}(i,e):i[e]||e:(console.warn(`Translations for locale ${t} not found!`),e)}function c(){return document.documentElement.lang?document.documentElement.lang:"en"}function d(e,t=void 0){let i=a(e);return t?i.replace(/%\{.+\}/,t):i}const h=[];function u(e=document){e===document&&h.forEach(e=>key.unbind(e));const t=e.querySelectorAll(".search_input_field"),i=e.querySelectorAll(".search_field_clear, .js_filter_field_clear");key("alt+f",function(){return key.setScope("search"),t.forEach(e=>e.focus({focusVisible:!0})),!1}),h.push("alt+f"),key("esc","search",function(){i.forEach(e=>e.click()),t.forEach(e=>e.blur())}),h.push("esc"),e.querySelectorAll("[data-alchemy-hotkey]").forEach(function(e){const t=e.dataset.alchemyHotkey;key(t,()=>e.click()),h.push(t)})}function p(e){const t=document.createElement("template");return t.innerHTML=e,t.content.children[0]}let m=class{constructor(e,t="currentColor"){this.size=e,this.color=t,this.spinner=void 0}get el(){return this.spinner}spin(e){return void 0===e&&(e=document.body),this.spinner=p(``),e.append(this.spinner),this}stop(){this.spinner&&(this.spinner.remove(),this.spinner=void 0)}};function g(e,t,i={}){e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:i}))}function f(e,t,i,s){document.querySelectorAll(t).forEach(t=>{t.addEventListener(e,e=>{const n=Array.from(t.querySelectorAll(i));let o=e.target;for(;o!==t;){if(n.includes(o))return void s.call(o,e);o=o.parentElement}})})}const v=[],y={header_height:36,size:"400x300",padding:!0,title:"",modal:!0,overflow:"visible",ready:()=>{},closed:()=>{}};class b{#e=null;#t=!1;constructor(e,t={}){this.url=e,this.options={...y,...t};const i=this.options.size.split("x");this.width=parseInt(i[0],10),this.height=parseInt(i[1],10),this.build(),this.resize()}open(){g(this.dialog,"Alchemy.DialogOpen"),this.bind_close_events(),this.options.modal?(this.dialog_container.showModal(),this.#i()):this.dialog_container.show(),window.requestAnimationFrame(()=>{this.dialog_container.classList.add("open")}),document.body.classList.add("prevent-scrolling"),v.push(this),this.load()}close(){return this.#t||(this.#t=!0,g(this.dialog,"DialogClose.Alchemy"),this.dialog_container.classList.remove("open"),this.dialog_container.addEventListener("transitionend",()=>{this.#s(),this.dialog_container.close(),this.dialog_container.remove(),v.pop(),0===v.length&&document.body.classList.remove("prevent-scrolling"),null!=this.options.closed&&this.options.closed()},{once:!0})),!0}#i(){const e=document.getElementById("flash_notices");e&&(this.#e=e.parentElement,this.dialog_container.append(e),this.#n(e))}#s(){const e=document.getElementById("flash_notices");e&&this.#e&&(this.#e.append(e),this.#n(e))}#n(e){e.querySelectorAll('alchemy-message[dismissable]:not([type="error"])').forEach(e=>e.remove())}load(){this.show_spinner(),fetch(this.url,{headers:{"X-Requested-With":"XMLHttpRequest"}}).then(async e=>{const t=await e.text();e.ok?this.replace(t):this.show_error({status:e.status,statusText:e.statusText,responseText:t})}).catch(()=>{this.show_error({status:0})})}reload(){this.dialog_body.innerHTML="",this.load()}replace(e){this.remove_spinner(),this.dialog_body.style.display="none",this.dialog_body.innerHTML=e,this.init(),g(this.dialog,"DialogReady.Alchemy",{body:this.dialog_body}),null!=this.options.ready&&this.options.ready(this.dialog_body),this.dialog_body.style.display=""}show_spinner(){this.spinner=new m("medium"),this.spinner.spin(this.dialog_body)}remove_spinner(){this.spinner.stop()}init(){u(this.dialog_body),this.watch_remote_forms(),window.requestAnimationFrame(()=>this.#o())}#o(e=0){const t=this.dialog_body.querySelector("[autofocus]")??this.dialog_body.querySelector("form [type='submit']");t?.focus(),document.activeElement===this.close_button&&e<20&&window.requestAnimationFrame(()=>this.#o(e+1))}watch_remote_forms(){this.dialog_body.querySelectorAll('[data-remote="true"]').forEach(e=>{e.addEventListener("ajax:success",e=>{const t=e.detail[2];t.getResponseHeader("Content-Type").match(/javascript/)||(this.dialog_body.innerHTML=t.responseText,this.init())}),e.addEventListener("ajax:error",e=>{const t=e.detail[1],i=e.detail[2];this.show_error(i,t)})})}show_error(e,t){if(422===e.status)return this.dialog_body.innerHTML=e.responseText,void this.init();const{error_body:i,error_header:s,error_type:n}=this.error_messages(e,t);this.dialog_body.innerHTML=`\n
${s}
\n
${i}
\n `}error_messages(e,t){let i,s,n="warning";switch(e.status){case 0:s="The server does not respond.",i="Please check server and try again.";break;case 403:s="You are not authorized!",i="Please close this window.";break;default:n="error",t?(s=t,console.error(e.responseText)):s=`${e.statusText} (${e.status})`,i="Please check log and try again."}return{error_header:s,error_body:i,error_type:n}}bind_close_events(){this.close_button.addEventListener("click",e=>{e.preventDefault(),this.close()}),this.dialog_container.classList.add("closable"),this.dialog_container.addEventListener("pointerdown",e=>{e.target===this.dialog_container&&this.close()}),this.dialog_container.addEventListener("cancel",e=>{e.preventDefault(),this.close()})}build(){this.dialog_container=p(''),this.dialog=p(''),this.dialog_body=p(''),this.dialog_header=p(''),this.dialog_title=p(''),this.close_button=p(''),this.dialog_title.textContent=this.options.title,this.dialog_header.append(this.dialog_title),this.dialog_header.append(this.close_button),this.dialog.append(this.dialog_header),this.dialog.append(this.dialog_body),this.dialog_container.append(this.dialog),this.options.modal&&this.dialog.classList.add("modal"),this.options.padding&&this.dialog_body.classList.add("padded"),document.body.append(this.dialog_container)}resize(){const{width:e,height:t}=this.getSize();this.dialog.style.width=`${e}px`,this.dialog.style.minHeight=`${t}px`,this.dialog.style.overflow=this.options.overflow,"hidden"===this.options.overflow?(this.dialog_body.style.height=`${t}px`,this.dialog_body.style.overflow="auto"):(this.dialog_body.style.minHeight=`${t}px`,this.dialog_body.style.overflow="visible")}getSize(){const e=this.options.padding?16:0,t=window.innerWidth,i=window.innerHeight;let s=this.width,n=this.height;return s>=t&&(s=t-e),n>=i&&(n=i-e-y.header_height),{width:s,height:n}}}function w(){const{length:e}=v;if(0!==e)return v[e-1]}function E(e){const t=w();if(null!=t)return t.options.closed=e,t.close()}function k(e,t){if(!e)throw"No url given! Please provide an url.";new b(e,t).open()}class L{constructor(e,t={}){this.message=e,this.options={...{size:"300x100",title:d("Please confirm"),ok_label:d("Yes"),cancel_label:d("No"),on_ok(){}},...t},this.#r(),this.#l()}open(){requestAnimationFrame(()=>{this.dialog.show()})}#r(){const e=this.options.size.split("x")[0];this.dialog=p(`\n \n ${this.message}\n \n \n \n `);(w()?.dialog_container??document.body).append(this.dialog)}#l(){this.cancelButton.addEventListener("click",e=>{e.preventDefault(),this.options.on_cancel(),this.dialog.hide()}),this.okButton.addEventListener("click",e=>{e.preventDefault(),this.options.on_ok(),this.dialog.hide()}),this.dialog.addEventListener("sl-request-close",e=>{"overlay"===e.detail.source&&(this.options.on_cancel(),e.preventDefault())}),this.dialog.addEventListener("sl-after-hide",()=>{this.dialog.remove()})}get cancelButton(){return this.dialog.querySelector("button[type=reset]")}get okButton(){return this.dialog.querySelector("button[type=submit]")}}function _(e,t={}){return new Promise(i=>{new L(e,{...t,on_ok(){i(!0)},on_cancel(){i(!1)}}).open()})}function S(e=!0){document.querySelector("alchemy-overlay").show=!!e}function x(e){let t=()=>{};e.matches("form")?t=function(){const t=document.createElement("form");t.action=e.action,t.method="POST",t.style.display="none",e.querySelectorAll("input").forEach(e=>t.append(e)),document.body.append(t),S(),t.requestSubmit()}:e.matches("a")&&(t=()=>Turbo.visit(e.pathname));return!(document.querySelectorAll("alchemy-element-editor.dirty").length>0)||(_(d("page_dirty_notice"),{title:d("warning"),ok_label:d("ok"),cancel_label:d("cancel")}).then(e=>{e&&(window.onbeforeunload=void 0,t())}),!1)}var C={checkPageDirtyness:x,PageLeaveObserver:function(){document.querySelectorAll("#main_navi a").forEach(e=>{e.addEventListener("click",e=>{x(e.currentTarget)||e.preventDefault()})})}};function A(e){const t=document.getElementById("fixed-elements"),i=`fixed-element-${e}`;t.querySelector(`sl-tab[panel="${i}"]`).remove(),t.querySelector(`sl-tab-panel[name="${i}"]`).remove(),t.show("main-content-elements")}var O=Object.freeze({__proto__:null,createTab:function(e,t){const i=document.getElementById("fixed-elements"),s=`fixed-element-${e}`,n=`${t}`,o=``;i.innerHTML+=n+o,window.requestAnimationFrame(function(){i.show(s)})},removeTab:A});function T(e,t="notice"){!function(e,t){const i=document.getElementById("flash_notices"),s=p(`\n \n ${e}\n \n `);i.append(s)}(e,t)}function I(e){return!(!e.target.matches("input, textarea")&&"?"===String.fromCharCode(e.which))||(k("/admin/help",{title:Alchemy.t("help"),size:"400x492"}),!1)}const F=/#[\w.~-]+$/;class q extends HTMLIFrameElement{#a;#c;#d;handleEvent(e){"load"===e.type&&(this.#h(),this.#u(),this.#a?.call(this,e))}#p=e=>{"Alchemy.previewReady"===e.data.message&&(this.#h(),this.#u())};connectedCallback(){let e=this.url;this.addEventListener("load",this),this.#m(),window.addEventListener("message",this.#p),window.localStorage.getItem("alchemy-preview-url")&&(e=window.localStorage.getItem("alchemy-preview-url"),this.previewUrlSelect.value=e),this.refresh(e)}disconnectedCallback(){this.removeEventListener("load",this),key.unbind("alt+r"),window.removeEventListener("message",this.#p)}postMessage(e){this.contentWindow.postMessage(e,"*")}resize(e){this.style.width=`${e}px`}refresh(e){return this.#g(),this.src=e||this.url,this.#h(),this.#d=setTimeout(()=>{this.#u(),T(d("Preview failed to load"),"warning")},5e3),new Promise(e=>{this.#a=e})}set isDragged(e){this.style.transitionProperty=e?"none":null,this.style.pointerEvents=e?"none":null}#m(){this.reloadButton?.addEventListener("click",e=>{e.preventDefault(),this.refresh()}),key("alt+r",()=>this.refresh()),this.sizeSelect.addEventListener("change",e=>{const t=e.target.value;""===t?this.style.width=null:this.resize(t)}),this.previewUrlSelect?.addEventListener("change",e=>{const t=e.target.value;window.localStorage.setItem("alchemy-preview-url",t),this.refresh(t)})}#g(){this.reloadButton.innerHTML.includes("alchemy-spinner")||(this.#c=this.reloadButton.innerHTML),this.reloadButton.innerHTML=''}#u(){this.reloadButton.innerHTML=this.#c}#h(){this.#d&&(clearTimeout(this.#d),this.#d=null)}get url(){return this.getAttribute("url")}get sizeSelect(){return document.querySelector("select#preview_size")}get previewUrlSelect(){return document.querySelector("select#preview_url")}get reloadButton(){return document.querySelector("#reload_preview_button")}}function $(){document.getElementById("alchemy_preview_window").refresh()}customElements.define("alchemy-preview-window",q,{extends:"iframe"}),e.StreamActions.assign_picture=function(){const[e]=this.targetElements;e&&(e.value=this.getAttribute("picture-id"),e.setAttribute("data-image-file-width",this.getAttribute("image-file-width")),e.setAttribute("data-image-file-height",this.getAttribute("image-file-height")),E(()=>{e.closest("alchemy-element-editor")?.setDirty()}))},e.StreamActions.assign_attachment=function(){const[e]=this.targetElements;if(!e)return;const t=e.parentElement;e.value=this.getAttribute("attachment-id"),t.querySelector(":scope > .file_name").textContent=this.getAttribute("attachment-name"),t.querySelector(":scope > .file_icon").replaceChildren(this.templateContent),t.querySelector(":scope > .remove_file_link").classList.remove("hidden"),E(()=>{e.closest("alchemy-element-editor")?.setDirty(e)})};class D{static updateIcon(e,t=!1){const i=document.querySelector(`[data-ingredient-id="${e}"]`);if(i){i.querySelector(".edit-ingredient-anchor-link alchemy-icon").setAttribute("icon-style",t?"fill":"line")}}}class M extends HTMLElement{constructor(){super(),this.actions={closeCurrentDialog:E,reloadPreview:$,removeFixedElement:A,updateAnchorIcon:D.updateIcon,hidePleaseWaitOverlay(){S(!1)}}}connectedCallback(){const e=this.actions[this.name];e?e(...this.params):console.error(`Unknown Alchemy action: ${this.name}`),this.remove()}get name(){return this.getAttribute("name")}get params(){return this.hasAttribute("params")?JSON.parse(this.getAttribute("params")):[]}}function H(e,t){e.split(/\s+/).forEach(e=>{t(e)})}customElements.define("alchemy-action",M);class P{constructor(){this._events={}}on(e,t){H(e,e=>{const i=this._events[e]||[];i.push(t),this._events[e]=i})}off(e,t){var i=arguments.length;0!==i?H(e,e=>{if(1===i)return void delete this._events[e];const s=this._events[e];void 0!==s&&(s.splice(s.indexOf(t),1),this._events[e]=s)}):this._events={}}trigger(e,...t){var i=this;H(e,e=>{const s=i._events[e];void 0!==s&&s.forEach(e=>{e.apply(i,t)})})}}const B=e=>(e=e.filter(Boolean)).length<2?e[0]||"":1==W(e)?"["+e.join("")+"]":"(?:"+e.join("|")+")",z=e=>{if(!N(e))return e.join("");let t="",i=0;const s=()=>{i>1&&(t+="{"+i+"}")};return e.forEach((n,o)=>{n!==e[o-1]?(s(),t+=n,i=1):i++}),s(),t},R=e=>{let t=Array.from(e);return B(t)},N=e=>new Set(e).size!==e.length,j=e=>(e+"").replace(/([\$\(\)\*\+\.\?\[\]\^\{\|\}\\])/gu,"\\$1"),W=e=>e.reduce((e,t)=>Math.max(e,V(t)),0),V=e=>Array.from(e).length,U=e=>{if(1===e.length)return[[e]];let t=[];const i=e.substring(1);return U(i).forEach(function(i){let s=i.slice(0);s[0]=e.charAt(0)+s[0],t.push(s),s=i.slice(0),s.unshift(e.charAt(0)),t.push(s)}),t},K=[[0,65535]];let J,G;const X={},Q={"/":"⁄∕",0:"߀",a:"ⱥɐɑ",aa:"ꜳ",ae:"æǽǣ",ao:"ꜵ",au:"ꜷ",av:"ꜹꜻ",ay:"ꜽ",b:"ƀɓƃ",c:"ꜿƈȼↄ",d:"đɗɖᴅƌꮷԁɦ",e:"ɛǝᴇɇ",f:"ꝼƒ",g:"ǥɠꞡᵹꝿɢ",h:"ħⱨⱶɥ",i:"ɨı",j:"ɉȷ",k:"ƙⱪꝁꝃꝅꞣ",l:"łƚɫⱡꝉꝇꞁɭ",m:"ɱɯϻ",n:"ꞥƞɲꞑᴎлԉ",o:"øǿɔɵꝋꝍᴑ",oe:"œ",oi:"ƣ",oo:"ꝏ",ou:"ȣ",p:"ƥᵽꝑꝓꝕρ",q:"ꝗꝙɋ",r:"ɍɽꝛꞧꞃ",s:"ßȿꞩꞅʂ",t:"ŧƭʈⱦꞇ",th:"þ",tz:"ꜩ",u:"ʉ",v:"ʋꝟʌ",vy:"ꝡ",w:"ⱳ",y:"ƴɏỿ",z:"ƶȥɀⱬꝣ",hv:"ƕ"};for(let e in Q){let t=Q[e]||"";for(let i=0;ie.normalize(t),ee=e=>Array.from(e).reduce((e,t)=>e+te(t),""),te=e=>(e=Z(e).toLowerCase().replace(Y,e=>X[e]||""),Z(e,"NFC"));const ie=e=>{const t={},i=(e,i)=>{const s=t[e]||new Set,n=new RegExp("^"+R(s)+"$","iu");i.match(n)||(s.add(j(i)),t[e]=s)};for(let t of function*(e){for(const[t,i]of e)for(let e=t;e<=i;e++){let t=String.fromCharCode(e),i=ee(t);i!=t.toLowerCase()&&(i.length>3||0!=i.length&&(yield{folded:i,composed:t,code_point:e}))}}(e))i(t.folded,t.folded),i(t.folded,t.composed);return t},se=e=>{const t=ie(e),i={};let s=[];for(let e in t){let n=t[e];n&&(i[e]=R(n)),e.length>1&&s.push(j(e))}s.sort((e,t)=>t.length-e.length);const n=B(s);return G=new RegExp("^"+n,"u"),i},ne=(e,t=1)=>(t=Math.max(t,e.length-1),B(U(e).map(e=>((e,t=1)=>{let i=0;return e=e.map(e=>(J[e]&&(i+=e.length),J[e]||e)),i>=t?z(e):""})(e,t)))),oe=(e,t=!0)=>{let i=e.length>1?1:0;return B(e.map(e=>{let s=[];const n=t?e.length():e.length()-1;for(let t=0;t{for(const i of t){if(i.start!=e.start||i.end!=e.end)continue;if(i.substrs.join("")!==e.substrs.join(""))continue;let t=e.parts;const s=e=>{for(const i of t){if(i.start===e.start&&i.substr===e.substr)return!1;if(1!=e.length&&1!=i.length){if(e.starti.start)return!0;if(i.starte.start)return!0}}return!1};if(!(i.parts.filter(s).length>0))return!0}return!1};class le{parts;substrs;start;end;constructor(){this.parts=[],this.substrs=[],this.start=0,this.end=0}add(e){e&&(this.parts.push(e),this.substrs.push(e.substr),this.start=Math.min(e.start,this.start),this.end=Math.max(e.end,this.end))}last(){return this.parts[this.parts.length-1]}length(){return this.parts.length}clone(e,t){let i=new le,s=JSON.parse(JSON.stringify(this.parts)),n=s.pop();for(const e of s)i.add(e);let o=t.substr.substring(0,e-n.start),r=o.length;return i.add({start:n.start,end:n.start+r,length:r,substr:o}),i}}const ae=e=>{void 0===J&&(J=se(K)),e=ee(e);let t="",i=[new le];for(let s=0;s0){l=l.sort((e,t)=>e.length()-t.length());for(let e of l)re(e,i)||i.push(e)}else if(s>0&&1==a.size&&!a.has("3")){t+=oe(i,!1);let e=new le;const s=i[0];s&&e.add(s.last()),i=[e]}}return t+=oe(i,!0),t},ce=(e,t)=>{if(e)return e[t]},de=(e,t)=>{if(e){for(var i,s=t.split(".");(i=s.shift())&&(e=e[i]););return e}},he=(e,t,i)=>{var s,n;return e?(e+="",null==t.regex||-1===(n=e.search(t.regex))?0:(s=t.string.length/e.length,0===n&&(s+=.5),s*i)):0},ue=(e,t)=>{var i=e[t];if("function"==typeof i)return i;i&&!Array.isArray(i)&&(e[t]=[i])},pe=(e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var i in e)e.hasOwnProperty(i)&&t(e[i],i)},me=(e,t)=>"number"==typeof e&&"number"==typeof t?e>t?1:e(t=ee(t+"").toLowerCase())?1:t>e?-1:0;class ge{items;settings;constructor(e,t){this.items=e,this.settings=t||{diacritics:!0}}tokenize(e,t,i){if(!e||!e.length)return[];const s=[],n=e.split(/\s+/);var o;return i&&(o=new RegExp("^("+Object.keys(i).map(j).join("|")+"):(.*)$")),n.forEach(e=>{let i,n=null,r=null;o&&(i=e.match(o))&&(n=i[1],e=i[2]),e.length>0&&(r=this.settings.diacritics?ae(e)||null:j(e),r&&t&&(r="\\b"+r)),s.push({string:e,regex:r?new RegExp(r,"iu"):null,field:n})}),s}getScoreFunction(e,t){var i=this.prepareSearch(e,t);return this._getScoreFunction(i)}_getScoreFunction(e){const t=e.tokens,i=t.length;if(!i)return function(){return 0};const s=e.options.fields,n=e.weights,o=s.length,r=e.getAttrFn;if(!o)return function(){return 1};const l=1===o?function(e,t){const i=s[0].field;return he(r(t,i),e,n[i]||1)}:function(e,t){var i=0;if(e.field){const s=r(t,e.field);!e.regex&&s?i+=1/o:i+=he(s,e,1)}else pe(n,(s,n)=>{i+=he(r(t,n),e,s)});return i/o};return 1===i?function(e){return l(t[0],e)}:"and"===e.options.conjunction?function(e){var s,n=0;for(let i of t){if((s=l(i,e))<=0)return 0;n+=s}return n/i}:function(e){var s=0;return pe(t,t=>{s+=l(t,e)}),s/i}}getSortFunction(e,t){var i=this.prepareSearch(e,t);return this._getSortFunction(i)}_getSortFunction(e){var t,i=[];const s=this,n=e.options,o=!e.query&&n.sort_empty?n.sort_empty:n.sort;if("function"==typeof o)return o.bind(this);const r=function(t,i){return"$score"===t?i.score:e.getAttrFn(s.items[i.id],t)};if(o)for(let t of o)(e.query||"$score"!==t.field)&&i.push(t);if(e.query){t=!0;for(let e of i)if("$score"===e.field){t=!1;break}t&&i.unshift({field:"$score",direction:"desc"})}else i=i.filter(e=>"$score"!==e.field);return i.length?function(e,t){var s,n;for(let o of i){if(n=o.field,s=("desc"===o.direction?-1:1)*me(r(n,e),r(n,t)))return s}return 0}:null}prepareSearch(e,t){const i={};var s=Object.assign({},t);if(ue(s,"sort"),ue(s,"sort_empty"),s.fields){ue(s,"fields");const e=[];s.fields.forEach(t=>{"string"==typeof t&&(t={field:t,weight:1}),e.push(t),i[t.field]="weight"in t?t.weight:1}),s.fields=e}return{options:s,query:e.toLowerCase().trim(),tokens:this.tokenize(e,s.respect_word_boundaries,i),total:0,items:[],weights:i,getAttrFn:s.nesting?de:ce}}search(e,t){var i,s,n=this;s=this.prepareSearch(e,t),t=s.options,e=s.query;const o=t.score||n._getScoreFunction(s);e.length?pe(n.items,(e,n)=>{i=o(e),(!1===t.filter||i>0)&&s.items.push({score:i,id:n})}):pe(n.items,(e,t)=>{s.items.push({score:1,id:t})});const r=n._getSortFunction(s);return r&&s.items.sort(r),s.total=s.items.length,"number"==typeof t.limit&&(s.items=s.items.slice(0,t.limit)),s}}const fe=e=>null==e?null:ve(e),ve=e=>"boolean"==typeof e?e?"1":"0":e+"",ye=e=>(e+"").replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),be=(e,t)=>{var i;return function(s,n){var o=this;i&&(o.loading=Math.max(o.loading-1,0),clearTimeout(i)),i=setTimeout(function(){i=null,o.loadedSearches[s]=!0,e.call(o,s,n)},t)}},we=(e,t,i)=>{var s,n=e.trigger,o={};for(s of(e.trigger=function(){var i=arguments[0];if(-1===t.indexOf(i))return n.apply(e,arguments);o[i]=arguments},i.apply(e,[]),e.trigger=n,t))s in o&&n.apply(e,o[s])},Ee=(e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())},ke=(e,t,i,s)=>{e.addEventListener(t,i,s)},Le=(e,t)=>!!t&&(!!t[e]&&1===(t.altKey?1:0)+(t.ctrlKey?1:0)+(t.shiftKey?1:0)+(t.metaKey?1:0)),_e=(e,t)=>{const i=e.getAttribute("id");return i||(e.setAttribute("id",t),t)},Se=e=>e.replace(/[\\"']/g,"\\$&"),xe=(e,t)=>{t&&e.append(t)},Ce=(e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var i in e)e.hasOwnProperty(i)&&t(e[i],i)},Ae=e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(Oe(e)){var t=document.createElement("template");return t.innerHTML=e.trim(),t.content.firstChild}return document.querySelector(e)},Oe=e=>"string"==typeof e&&e.indexOf("<")>-1,Te=(e,t)=>{var i=document.createEvent("HTMLEvents");i.initEvent(t,!0,!1),e.dispatchEvent(i)},Ie=(e,t)=>{Object.assign(e.style,t)},Fe=(e,...t)=>{var i=$e(t);(e=De(e)).map(e=>{i.map(t=>{e.classList.add(t)})})},qe=(e,...t)=>{var i=$e(t);(e=De(e)).map(e=>{i.map(t=>{e.classList.remove(t)})})},$e=e=>{var t=[];return Ce(e,e=>{"string"==typeof e&&(e=e.trim().split(/[\t\n\f\r\s]/)),Array.isArray(e)&&(t=t.concat(e))}),t.filter(Boolean)},De=e=>(Array.isArray(e)||(e=[e]),e),Me=(e,t,i)=>{if(!i||i.contains(e))for(;e&&e.matches;){if(e.matches(t))return e;e=e.parentNode}},He=(e,t=0)=>t>0?e[e.length-1]:e[0],Pe=(e,t)=>{if(!e)return-1;t=t||e.nodeName;for(var i=0;e=e.previousElementSibling;)e.matches(t)&&i++;return i},Be=(e,t)=>{Ce(t,(t,i)=>{null==t?e.removeAttribute(i):e.setAttribute(i,""+t)})},ze=(e,t)=>{e.parentNode&&e.parentNode.replaceChild(t,e)},Re=(e,t)=>{if(null===t)return;if("string"==typeof t){if(!t.length)return;t=new RegExp(t,"i")}const i=e=>3===e.nodeType?(e=>{var i=e.data.match(t);if(i&&e.data.length>0){var s=document.createElement("span");s.className="highlight";var n=e.splitText(i.index);n.splitText(i[0].length);var o=n.cloneNode(!0);return s.appendChild(o),ze(n,s),1}return 0})(e):((e=>{1!==e.nodeType||!e.childNodes||/(script|style)/i.test(e.tagName)||"highlight"===e.className&&"SPAN"===e.tagName||Array.from(e.childNodes).forEach(e=>{i(e)})})(e),0);i(e)},Ne="undefined"!=typeof navigator&&/Mac/.test(navigator.userAgent)?"metaKey":"ctrlKey";var je={options:[],optgroups:[],plugins:[],delimiter:",",splitOn:null,persist:!0,diacritics:!0,create:null,createOnBlur:!1,createFilter:null,clearAfterSelect:!1,highlight:!0,openOnFocus:!0,shouldOpen:null,maxOptions:50,maxItems:null,hideSelected:null,duplicates:!1,addPrecedence:!1,selectOnTab:!1,preload:null,allowEmptyOption:!1,refreshThrottle:300,loadThrottle:300,loadingClass:"loading",dataAttr:null,optgroupField:"optgroup",valueField:"value",labelField:"text",disabledField:"disabled",optgroupLabelField:"label",optgroupValueField:"value",lockOptgroupOrder:!1,sortField:"$order",searchField:["text"],searchConjunction:"and",mode:null,wrapperClass:"ts-wrapper",controlClass:"ts-control",dropdownClass:"ts-dropdown",dropdownContentClass:"ts-dropdown-content",itemClass:"item",optionClass:"option",dropdownParent:null,controlInput:'',copyClassesToDropdown:!1,placeholder:null,hidePlaceholder:null,shouldLoad:function(e){return e.length>0},render:{}};function We(e,t){var i=Object.assign({},je,t),s=i.dataAttr,n=i.labelField,o=i.valueField,r=i.disabledField,l=i.optgroupField,a=i.optgroupLabelField,c=i.optgroupValueField,d=e.tagName.toLowerCase(),h=e.getAttribute("placeholder")||e.getAttribute("data-placeholder");if(!h&&!i.allowEmptyOption){let t=e.querySelector('option[value=""]');t&&(h=t.textContent)}var u={placeholder:h,options:[],optgroups:[],items:[],maxItems:null};return"select"===d?(()=>{var t,d=u.options,h={},p=1;let m=0;var g=e=>{var t=Object.assign({},e.dataset),i=s&&t[s];return"string"==typeof i&&i.length&&(t=Object.assign(t,JSON.parse(i))),t},f=(e,t)=>{var s=fe(e.value);if(null!=s&&(s||i.allowEmptyOption)){if(h.hasOwnProperty(s)){if(t){var a=h[s][l];a?Array.isArray(a)?a.push(t):h[s][l]=[a,t]:h[s][l]=t}}else{var c=g(e);c[n]=c[n]||e.textContent,c[o]=c[o]||s,c[r]=c[r]||e.disabled,c[l]=c[l]||t,c.$option=e,c.$order=c.$order||++m,h[s]=c,d.push(c)}e.selected&&u.items.push(s)}};u.maxItems=e.hasAttribute("multiple")?null:1,Ce(e.children,e=>{var i,s,n;"optgroup"===(t=e.tagName.toLowerCase())?((n=g(i=e))[a]=n[a]||i.getAttribute("label")||"",n[c]=n[c]||p++,n[r]=n[r]||i.disabled,n.$order=n.$order||++m,u.optgroups.push(n),s=n[c],Ce(i.children,e=>{f(e,s)})):"option"===t&&f(e)})})():(()=>{var t,r;const l=e.getAttribute(s);if(l)u.options=JSON.parse(l),Ce(u.options,e=>{u.items.push(e[o])});else{var a=null!==(r=null===(t=null==e?void 0:e.value)||void 0===t?void 0:t.trim())&&void 0!==r?r:"";if(!i.allowEmptyOption&&!a.length)return;const s=a.split(i.delimiter);Ce(s,e=>{const t={};t[n]=e,t[o]=e,u.options.push(t)}),u.items=s}})(),Object.assign({},je,u,t)}var Ve=0;class Ue extends(function(e){return e.plugins={},class extends e{constructor(){super(...arguments),this.plugins={names:[],settings:{},requested:{},loaded:{}}}static define(t,i){e.plugins[t]={name:t,fn:i}}initializePlugins(e){var t,i;const s=this,n=[];if(Array.isArray(e))e.forEach(e=>{"string"==typeof e?n.push(e):(s.plugins.settings[e.name]=e.options,n.push(e.name))});else if(e)for(t in e)e.hasOwnProperty(t)&&(s.plugins.settings[t]=e[t],n.push(t));for(;i=n.shift();)s.require(i)}loadPlugin(t){var i=this,s=i.plugins,n=e.plugins[t];if(!e.plugins.hasOwnProperty(t))throw new Error('Unable to find "'+t+'" plugin');s.requested[t]=!0,s.loaded[t]=n.fn.apply(i,[i.plugins.settings[t]||{}]),s.names.push(t)}require(e){var t=this,i=t.plugins;if(!t.plugins.loaded.hasOwnProperty(e)){if(i.requested[e])throw new Error('Plugin has circular dependency ("'+e+'")');t.loadPlugin(e)}return i.loaded[e]}}}(P)){constructor(e,t){var i;super(),this.order=0,this.isOpen=!1,this.isDisabled=!1,this.isReadOnly=!1,this.isInvalid=!1,this.isValid=!0,this.isLocked=!1,this.isFocused=!1,this.isInputHidden=!1,this.isSetup=!1,this.isDropdownContentStale=!0,this.ignoreFocus=!1,this.ignoreHover=!1,this.hasOptions=!1,this.lastValue="",this.caretPos=0,this.loading=0,this.loadedSearches={},this.activeOption=null,this.activeItems=[],this.optgroups={},this.options={},this.userOptions={},this.items=[],this.refreshTimeout=null,Ve++;var s=Ae(e);if(s.tomselect)throw new Error("Tom Select already initialized on this element");s.tomselect=this,i=(window.getComputedStyle&&window.getComputedStyle(s,null)).getPropertyValue("direction");const n=We(s,t);this.settings=n,this.input=s,this.tabIndex=s.tabIndex||0,this.is_select_tag="select"===s.tagName.toLowerCase(),this.rtl=/rtl/i.test(i),this.inputId=_e(s,"tomselect-"+Ve),this.isRequired=s.required,this.sifter=new ge(this.options,{diacritics:n.diacritics}),n.mode=n.mode||(1===n.maxItems?"single":"multi"),"boolean"!=typeof n.hideSelected&&(n.hideSelected="multi"===n.mode),"boolean"!=typeof n.hidePlaceholder&&(n.hidePlaceholder="multi"!==n.mode);var o=n.createFilter;"function"!=typeof o&&("string"==typeof o&&(o=new RegExp(o)),o instanceof RegExp?n.createFilter=e=>o.test(e):n.createFilter=e=>this.settings.duplicates||!this.options[e]),this.initializePlugins(n.plugins),this.setupCallbacks(),this.setupTemplates();const r=Ae("