phlex-reactive 0.15.4 → 0.15.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -0
- data/README.md +11 -0
- data/app/javascript/phlex/reactive/core.min.js +6 -6
- data/app/javascript/phlex/reactive/core.min.js.map +3 -3
- data/app/javascript/phlex/reactive/reactive_controller.min.js +4 -4
- data/app/javascript/phlex/reactive/reactive_controller.min.js.map +3 -3
- data/app/javascript/phlex/reactive/runtime.js +83 -1
- data/lib/phlex/reactive/response.rb +3 -4
- data/lib/phlex/reactive/streamable.rb +0 -1
- data/lib/phlex/reactive/version.rb +1 -1
- metadata +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import{Controller as Fa}from"@hotwired/stimulus";import{confirmResolver as xo}from"phlex/reactive/confirm";import{confirmPredicate as Si}from"phlex/reactive/confirm_predicate";var M=new WeakMap,$e=new WeakMap;function k(e,t){let n=M.get(e);if(!n){if(M.set(e,n={root:e.element,core:t,nestedIndex:0}),n.root)$e.set(n.root,n)}return n}function S(e,t,n){for(let r of t.split(" "))e.root.addEventListener?.(r,n),e.offs.push(()=>e.root.removeEventListener?.(r,n))}function I(e,t){S(e,"turbo:morph-element",t),e.seeds.push(t),t()}function Pe(e,t){let n=k(e,t);n.offs=[],n.seeds=[];let r,o,i,a;(n.wire=()=>{if(!n.show&&Ti(n))n.show=(s)=>{if(n.flipping)return;if(s?.type==="input"||s?.type==="change")Di(n,s.target);else n.groups=Pi(n),zn(n);Bn(n)},S(n,"input change",n.show),S(n,"focusout",(s)=>{let c=s.target?.getAttribute?.("name");if(!c||n.touched?.has(c)||!n.core.owns(s.target))return;if((n.touched??=new Set).add(c),n.root.querySelector?.("[data-reactive-show-after]"))Bn(n)}),I(n,n.show);if(!n.arm&&Li(n))S(n,"input change",(s)=>jn(n,s)),I(n,n.arm=()=>{jn(n,null),zn(n)});if(!r&&(r=n.show||n.arm))S(n,"reset",()=>setTimeout(()=>{if(M.get(e)!==n)return;n.show?.(),n.arm?.()},0));if(!o&&(o=ee(n)))S(n,"input",(s)=>ji(n,s)&&D(n)),I(n,()=>D(n));if(!i&&(i=ne(n)))I(n,()=>or(n));if(!a&&(a=Bi(n)))S(n,"input change",(s)=>cr(n,s)),I(n,()=>ze(n))})(),S(n,"keydown",(s)=>os(n,s)),S(n,"paste drop",(s)=>is(n,s)),S(n,"input",(s)=>ss(n,s))}function Ie(e){let t=M.get(e);if(!t)return;M.delete(e),$e.delete(t.root);for(let n of t.offs??[])n();t.groupObserver?.disconnect()}function De(e){let t=M.get(e);if(!t)return;for(let n of t.seeds)n();t.wire()}function L(e){if(typeof e.dispatchEvent==="function")e.dispatchEvent(new Event("input",{bubbles:!0}))}function qe(e,t,n){return cr(k(e,t),n)}function We(e,t,n){return pr(k(e,t),n)}var Ei=/^#[A-Za-z_][\w-]*$/,Kn="[data-reactive-show-field], [data-reactive-show]";function _i(e,t){let n=e.getAttribute("data-reactive-show-equals");if(n!==null)return t===n;let r=e.getAttribute("data-reactive-show-not");if(r!==null)return t!==r;let o=e.getAttribute("data-reactive-show-in");if(o!==null){try{let i=JSON.parse(o);if(Array.isArray(i))return i.includes(t)}catch{}return console.warn(`[phlex-reactive] malformed reactive_show in: list ${JSON.stringify(o)} — skipped`),null}for(let i of ur){let a=e.getAttribute(`data-reactive-show-${i}`);if(a!==null)return fr(i,a,t)}return console.warn("[phlex-reactive] a reactive_show binding declares no predicate — skipped"),null}function Yn(e){try{let t=JSON.parse(e);if(t&&typeof t==="object"&&!Array.isArray(t))return t}catch{}return console.warn(`[phlex-reactive] malformed compound reactive_show payload ${JSON.stringify(e)} — skipped`),null}function xi(e){try{let t=JSON.parse(e);if(Array.isArray(t)&&t.every((n)=>n&&typeof n==="object"&&Array.isArray(n.any)&&Array.isArray(n.ops)))return t}catch{}return console.warn(`[phlex-reactive] malformed reactive_on_complete payload ${JSON.stringify(e)} — skipped`),[]}function Vn(e,t){if(!e||typeof e!=="object")return null;let n=e.any;if(Array.isArray(n)&&(n.length===0||Array.isArray(n[0])))return q(n,t);return ki(e,t)}function ki(e,t){let n=Array.isArray(e.all)?"all":Array.isArray(e.any)?"any":null;if(!n)return null;let r=e[n];if(r.length===0)return null;let o=r.map((i)=>Ze(i,t));return n==="all"?o.every(Boolean):o.some(Boolean)}function Q(e,t="show"){if(typeof e==="string"&&Ei.test(e))return!0;return console.warn(`[phlex-reactive] refused cross-root ${t} target ${JSON.stringify(e)} — skipped`),!1}function Ti(e){if(e.root.getAttribute?.("data-reactive-show-targets"))return!0;if(e.root.getAttribute?.("data-reactive-group-targets"))return!0;let t=e.root.querySelectorAll?.(Kn)??[];for(let n of t)if(e.core.owns(n))return!0;for(let n of e.root.querySelectorAll?.(te)??[])if(e.core.owns(n))return!0;for(let n of e.root.querySelectorAll?.(er)??[])if(e.core.owns(n))return!0;return!1}function Li(e){return!!e.root.getAttribute?.("data-reactive-on-complete")}function Ri(e){let t=e.root.getAttribute?.("data-reactive-on-complete")??null;if(t!==e.onCompleteRaw)e.onCompleteRaw=t,e.onCompleteParsed=t==null?[]:xi(t),e.onCompleteStates=e.onCompleteParsed.map(()=>!1);return e.onCompleteParsed}function jn(e,t){let n=Ri(e);if(!n.length)return;let r=Qn(e,e.core.ownership());n.forEach((o,i)=>{let a=q(o.any,r);if(a===null)return;let s=a&&!e.onCompleteStates[i]&&Boolean(t);if(e.onCompleteStates[i]=a,s)e.core.applyOps(o.ops,"@root")})}function Bn(e){if(typeof e.root?.querySelectorAll!=="function")return;let t=e.core.ownership(),n=e.root.getAttribute?.("data-reactive-scope")||null,r=Qn(e,t),o=[];for(let i of e.root.querySelectorAll(Kn)){if(!t(i))continue;let a=i.getAttribute("data-reactive-show");if(a!==null){let l=Vn(Yn(a),r);if(l===null)continue;let f=i.getAttribute("data-reactive-show-after"),p=l&&(f==null||!!e.touched?.has(je(f,n)));Jn(i,p,t,n);let b=(e.shown??=new WeakMap).get(i);if(e.shown.set(i,p),Oi.some((v)=>i.hasAttribute(`data-reactive-show-${v}`))&&b!==void 0&&b!==p)o.push(i);continue}let s=i.getAttribute("data-reactive-show-field");if(!s)continue;let c=r(s);if(c===null)continue;let u=_i(i,c);if(u===null)continue;Jn(i,u,t,n)}if(e.groups)qi(e,r,t,n);$i(e,r,t),Ni(e,r),Wi(e,r);for(let i of o)Fi(e,i,t,n)}var Oi=["clear","focus","scroll"];function Fi(e,t,n,r){if(t.hidden){let s=[];try{s=JSON.parse(t.getAttribute("data-reactive-show-clear")??"[]")}catch{}let c=new Set((Array.isArray(s)?s:[]).map((u)=>je(String(u),r)));for(let u of c.size?e.root.querySelectorAll("[name]"):[]){if(!c.has(u.getAttribute("name"))||!n(u)||u.type==="file")continue;if(u.type==="checkbox"||u.type==="radio"){if(u.checked)u.checked=!1,L(u)}else e.core.setValue(u,"")}return}let o=t.getAttribute("data-reactive-show-scroll")==="true";if(o)t.scrollIntoView?.({block:"nearest"});let i=t.getAttribute("data-reactive-show-focus"),a=null;try{a=i?e.root.querySelector(i):null}catch{}a?.focus?.(o?{preventScroll:!0}:void 0)}function Jn(e,t,n,r){if(e.hidden=!t,e.getAttribute("data-reactive-show-disable")!=="true")return;if(typeof e.querySelectorAll!=="function")return;for(let o of e.querySelectorAll("input[name], select[name], textarea[name]"))if(n(o))o.disabled=!t;if(e.name&&n(e))e.disabled=!t}function Ni(e,t){let n=Xn(e);for(let[r,o]of Object.entries(n)){if(r.startsWith("#")){Ci(r,o,t);continue}if(!o||typeof o!=="object"||Array.isArray(o))continue;let i=t(r);if(i===null)continue;let a=(s,c)=>c?t(r,!0):i;for(let[s,c]of Object.entries(o)){if(!Q(s))continue;let u;if(Array.isArray(c)){if(c.length===0){console.warn(`[phlex-reactive] malformed reactive_show_targets group for ${s} — skipped`);continue}u=c.every((l)=>Ze(l,a))}else{let l=dr(c,i);if(l===null){console.warn(`[phlex-reactive] malformed reactive_show_targets predicate for ${s} — skipped`);continue}u=l}for(let l of document.querySelectorAll(s))l.hidden=!u}}}function Ci(e,t,n){if(!Q(e))return;let r=t&&typeof t==="object"&&!Array.isArray(t)?t.any:null,o=ns(r);if(o===null){console.warn(`[phlex-reactive] malformed reactive_show_targets conditions for ${e} — skipped`);return}if(o.every((a)=>n(a)===null)&&!rs(r))return;let i=q(r,n);if(i===null)return;for(let a of document.querySelectorAll(e))a.hidden=!i}function Xn(e,t="show",n="mode: { ... }, kind: { ... }"){let r=e.root.getAttribute?.(`data-reactive-${t}-targets`);if(!r)return{};try{let o=JSON.parse(r);if(o&&typeof o==="object"&&!Array.isArray(o))return o}catch{}return console.warn(`[phlex-reactive] malformed data-reactive-${t}-targets — ignored. `+`Did two reactive_${t}_targets calls collide on one root? Declare every entry in ONE call: reactive_${t}_targets(${n})`),{}}function Mi(e,t,n,r){let o=!1,i=null;for(let a of e.root.querySelectorAll(Zn(t,r))){if(!n(a))continue;if(a.type==="checkbox")return a.checked?"true":"false";if(a.type==="radio"){if(a.checked)return a.value??"";o=!0;continue}i??=a}if(i)return i.value??"";return o?"":null}function Zn(e,t){return`[name="${je(e,t)}"]`}function je(e,t){return t&&!e.includes("[")?`${t}[${e}]`:e}function Qn(e,t){let n=e.root.getAttribute?.("data-reactive-scope")||null,r=new Map;return(o,i)=>{let a=i?`#${o}`:o;if(!r.has(a))r.set(a,i?Be(e,o,t,n).filter((s)=>s.checked).length:Mi(e,o,t,n));return r.get(a)}}var er="[data-reactive-media]";function $i(e,t,n){for(let r of e.root.querySelectorAll(er)){if(!n(r))continue;let o,i,a;try{if(o=JSON.parse(r.getAttribute("data-reactive-media")),o?.match!=null)i=new RegExp(`^(?:${o.match})$`);if(o?.when!=null)a=new RegExp(`^(?:${o.when})$`)}catch{}if(typeof o?.field!=="string"||!o.pool||typeof o.pool!=="object"||o.match!=null&&!i||o.when!=null&&!a){console.warn("[phlex-reactive] malformed data-reactive-media — skipped");continue}let s=t(o.field);if(s===null)continue;let c=o.take>0?[...s]:null,u=c?c.slice(0,o.take).join(""):s,l=c?.length<o.take||i?.test(u)===!1||a?.test(s)===!1;if(l&&o.pending==="keep"){Un(r,"pending");continue}let f=!l&&Object.hasOwn(o.pool,u)?Hn(e,o.pool[u])[0]:null,p=e.core.copyMedia(r,f??null);if(p===null)continue;if(Un(r,l?"pending":p===!1?"miss":"hit"),typeof o.label!=="string")continue;let b=l?"":p===!1?String(o.blank??""):p;for(let g of Hn(e,o.label))if(g.textContent!==b)g.textContent=b}}function Un(e,t){if(e.getAttribute("data-reactive-media-state")!==t)e.setAttribute("data-reactive-media-state",t)}function Hn(e,t){try{return t==="@root"?[]:e.core.opTargets({to:t})}catch{return[]}}var te="[data-reactive-enable], [data-reactive-select-all], [data-reactive-count]";function Pi(e){return!!e.root.querySelector?.(te)}function Be(e,t,n,r,o){return[...e.root.querySelectorAll(Zn(t,r))].filter((i)=>i.type==="checkbox"&&n(i)&&(!o||Ii(i.getAttribute("data-reactive-group"),o)))}function Ii(e,t){return e===t||!!e?.startsWith(`${t}.`)}function Di(e,t){let n=t?.getAttribute?.("data-reactive-select-all");if(n&&e.core.owns(t))tr(e,n,t.checked,t,t.getAttribute("data-reactive-select-all-under"))}function Je(e,t,n){if(!t)return;let r=$e.get(e)??{root:e,core:{ownership:()=>(o)=>o.closest('[data-controller~="reactive"]')===e}};tr(r,t,n!==!1),r.show?.()}function tr(e,t,n,r,o){let i=e.root.getAttribute?.("data-reactive-scope")||null,a=Be(e,t,e.core.ownership(),i,o).filter((s)=>s!==r&&s.checked!==n);for(let s of a)s.checked=n;e.flipping=!0;try{for(let s of a)for(let c of["input","change"])s.dispatchEvent?.(new Event(c,{bubbles:!0}))}finally{e.flipping=!1}}function qi(e,t,n,r){for(let o of e.root.querySelectorAll(te)){if(!n(o))continue;let i=o.getAttribute("data-reactive-enable");if(i!==null){let c=Vn(Yn(i),t);if(c!==null)o.disabled=!c}let a=o.getAttribute("data-reactive-count");if(a){let c=String(t(a,!0));if(o.textContent!==c)o.textContent=c}let s=o.getAttribute("data-reactive-select-all");if(s){let c=o.getAttribute("data-reactive-select-all-under"),u=Be(e,s,n,r,c).filter((f)=>f!==o),l=u.filter((f)=>f.checked).length;o.checked=l>0&&l===u.length,o.indeterminate=l>0&&l<u.length}}}function Wi(e,t){for(let[n,r]of Object.entries(Xn(e,"group",'"ids[]" => { ... }, "tags[]" => { ... }'))){if(!r||typeof r!=="object"||Array.isArray(r))continue;let o=String(t(n,!0));for(let a of Array.isArray(r.count)?r.count:[]){if(!Q(a,"group"))continue;for(let s of document.querySelectorAll(a))if(s.textContent!==o)s.textContent=o}let i=r.enable&&typeof r.enable==="object"?r.enable:{};for(let[a,s]of Object.entries(i)){if(!Q(a,"group"))continue;let c=q(s?.any,t);if(c===null){console.warn(`[phlex-reactive] malformed reactive_group_targets enable for ${a} — skipped`);continue}for(let u of document.querySelectorAll(a))u.disabled=!c}}}function zn(e){if(e.groupObserver||typeof MutationObserver!=="function")return;let t=(o)=>e.root.getAttribute?.(`data-reactive-${o}`)?.includes("checked_");if(!e.root.getAttribute?.("data-reactive-group-targets")&&!e.root.querySelector?.(`${te}, [data-reactive-show*=checked_]`)&&!t("show-targets")&&!t("on-complete"))return;let r=(o)=>o.nodeType===1&&(o.matches('input[type="checkbox"]')||!!o.querySelector('input[type="checkbox"]'));e.groupObserver=new MutationObserver((o)=>{if(!o.some((i)=>[...i.addedNodes,...i.removedNodes].some(r)))return;e.show?.(),e.arm?.()}),e.groupObserver.observe(e.root,{childList:!0,subtree:!0})}function ee(e){return!!(e.root.getAttribute?.("data-reactive-filter-input")&&e.root.getAttribute?.("data-reactive-filter-option"))}function ji(e,t){let n=e.root.getAttribute("data-reactive-filter-input");return!!n&&typeof t.target?.matches==="function"&&t.target.matches(n)}function D(e){if(typeof e.root?.querySelectorAll!=="function")return;let t=e.root.getAttribute("data-reactive-filter-input"),n=e.root.getAttribute("data-reactive-filter-option");if(!t||!n)return;let r=e.core.ownership(),o=[...e.root.querySelectorAll(t)].find(r);if(!o)return;let i=(o.value??"").trim().toLowerCase(),a=0;for(let u of e.root.querySelectorAll(n)){if(!r(u))continue;let l=(u.getAttribute("data-reactive-filter-text")??u.textContent??"").toLowerCase(),f=u.hasAttribute?.("data-reactive-tags-selected")||i!==""&&!l.includes(i);if(u.hidden=f,f)u.removeAttribute("data-reactive-highlighted");else a++}let s=e.root.getAttribute("data-reactive-filter-group");if(s)for(let u of e.root.querySelectorAll(s)){if(!r(u))continue;let l=[...u.querySelectorAll(n)].filter(r);if(l.length===0)continue;u.hidden=l.every((f)=>f.hidden)}let c=e.root.getAttribute("data-reactive-filter-empty");if(c){for(let u of e.root.querySelectorAll(c))if(r(u))u.hidden=a>0}}function ne(e){return!!e.root.getAttribute?.("data-reactive-tags-field")}function Bi(e){if(typeof e.root?.querySelector!=="function")return!1;return!!e.root.querySelector("[data-reactive-nested-json]")}function Ue(e){if(typeof e.root?.querySelectorAll!=="function")return null;let t=e.root.getAttribute("data-reactive-tags-field");if(!t)return null;let n=e.core.ownership();return[...e.root.querySelectorAll(t)].find(n)??null}function He(e){let t=new Set,n=[];for(let r of String(e.value??"").split(",")){let o=r.trim();if(o===""||t.has(o.toLowerCase()))continue;t.add(o.toLowerCase()),n.push(o)}return n}function nr(e,t){let n=Ue(e);if(!n)return!1;let r=He(n),o=new Set(r.map((a)=>a.toLowerCase())),i=!1;for(let a of t){let s=String(a??"").trim();if(s===""||o.has(s.toLowerCase()))continue;o.add(s.toLowerCase()),r.push(s),i=!0}if(i)rr(e,n,r);return i}function rr(e,t,n){t.value=n.join(","),L(t),or(e)}function Ji(e){if(typeof e.root?.querySelectorAll!=="function")return null;let t=e.root.getAttribute("data-reactive-filter-input");if(!t)return null;let n=e.core.ownership();return[...e.root.querySelectorAll(t)].find(n)??null}function or(e){let t=Ue(e);if(!t)return;let n=He(t),r=e.core.ownership();Ui(e,n,r),Hi(e,n,r)}function Ui(e,t,n){let r=[...e.root.querySelectorAll("[data-reactive-tags-list]")].find(n);if(!r)return;let i=[...e.root.querySelectorAll("[data-reactive-tags-template]")].find(n)?.content?.firstElementChild;if(!i){if(!e.tagsWarnedTemplate)console.warn("[phlex-reactive] reactive_tags: no chip <template data-reactive-tags-template> found in this root — "+"chips will not render (the hidden field still updates). Add a template with a [data-reactive-tag-text] node and a reactive_tags_remove button."),e.tagsWarnedTemplate=!0;return}while(r.firstChild)r.removeChild(r.firstChild);for(let a of t){let s=i.cloneNode(!0);s.setAttribute?.("data-reactive-tag",a);let c=s.matches?.("[data-reactive-tag-text]")?s:(s.querySelectorAll?.("[data-reactive-tag-text]")??[])[0];if(c)c.textContent=a;let u=[...s.querySelectorAll?.('[data-action*="reactive#tagsRemove"]')??[]];if(s.matches?.('[data-action*="reactive#tagsRemove"]'))u.push(s);for(let l of u)l.setAttribute?.("data-reactive-tag-param",a);r.appendChild(s)}}function Hi(e,t,n){let r=new Set(t.map((o)=>o.toLowerCase()));for(let o of e.root.querySelectorAll("[role=option]")){if(!n(o))continue;let i=o.getAttribute?.("data-reactive-tag-param");if(!i)continue;if(r.has(i.toLowerCase()))o.setAttribute("data-reactive-tags-selected","true"),o.hidden=!0,o.removeAttribute?.("data-reactive-highlighted");else if(o.hasAttribute?.("data-reactive-tags-selected")){if(o.removeAttribute("data-reactive-tags-selected"),!ee(e))o.hidden=!1}}if(ee(e))D(e)}function zi(e){return e.nestedIndex=Math.max(e.nestedIndex+1,Date.now()),e.nestedIndex}function Gi(e,t){let n=[e,...e.querySelectorAll?.("*")??[]];for(let r of n)for(let o of["name","id","for"]){let i=r.getAttribute?.(o);if(i&&i.includes("NEW_ROW"))r.setAttribute?.(o,i.replaceAll("NEW_ROW",String(t)))}}function Ki(e,t){if(e.nestedWarned)return;console.warn(`[phlex-reactive] nested rows: no owned [data-reactive-nested-list="${t}"] container + <template data-reactive-nested-template="${t}"> pair found in this root — the add `+"trigger did nothing. Render both inside the same reactive root (reactive_nested_list / reactive_nested_template)."),e.nestedWarned=!0}function Yi(e,t,n,r){if(!n)return null;let o;try{o=JSON.parse(n)}catch{return null}if(!o||typeof o!=="object")return null;let i=e.core.ownership(),a=[...t.querySelectorAll?.("input, select, textarea")??[]],s=[];for(let[c,u]of Object.entries(o)){let l=[...e.root.querySelectorAll?.(u)??[]].find(i);if(!l)continue;let f=a.find((p)=>sr(p.getAttribute?.("name"))===c);if(!f)continue;Vi(f,l),s.push(l)}if(r)for(let c of s)Xi(c);return s[0]??null}function Vi(e,t){if(e.type==="checkbox")e.checked=t.type==="checkbox"?!!t.checked:Ce(t)!=="";else e.value=Ce(t);L(e)}function Xi(e){if(e.type==="checkbox")e.checked=!1;else e.value="";L(e)}function Zi(e,t){if(!e.includes("%{"))return e;return e.replace(/%\{(\w+)\}/g,(n,r)=>Object.prototype.hasOwnProperty.call(t,r)?t[r]:n)}function Gn(e,t){let n=[...t.querySelectorAll?.('input[name$="[_destroy]"]')??[]][0];if(n)n.value="1",L(n),t.hidden=!0;else t.parentNode?.removeChild?.(t);ze(e)}function ze(e){if(typeof e.root?.querySelectorAll!=="function")return;let t=e.core.ownership();for(let n of[...e.root.querySelectorAll("[data-reactive-nested-json]")].filter(t))ar(e,n.getAttribute("data-reactive-nested-json"))}function Qi(e,t){let n=t.getAttribute?.("data-reactive-nested-json-field");if(!n)return null;let r=e.core.ownership();return[...e.root.querySelectorAll(n)].find(r)??null}function ir(e,t){let n={},r=e.core.ownership();for(let o of[...t.querySelectorAll?.("input, select, textarea")??[]]){if(o.matches(":disabled")||o.type==="radio"&&!o.checked||!r(o))continue;let i=sr(o.getAttribute?.("name"));if(i===null||i==="_destroy")continue;n[i]=Ce(o)}return n}function sr(e){if(!e)return null;let t=e.match(/\[([^\][]+)\]$/);return t?t[1]:e}function Ce(e){if(e.type==="checkbox")return e.checked?e.value||"on":"";return e.value??""}function ar(e,t){let n=e.core.ownership(),r=[...e.root.querySelectorAll(`[data-reactive-nested-list="${t}"]`)].find(n);if(!r)return;let o=Qi(e,r);if(!o)return;let i=[];for(let s of[...r.querySelectorAll?.("[data-reactive-nested-row]")??[]]){if(!n(s)||s.hidden)continue;i.push(ir(e,s))}let a=JSON.stringify(i);if(o.value===a)return;o.value=a,L(o)}function Ge(e,t,n){let r=k(e,t);if(!ne(r))return;if(n?.defaultPrevented)return;if(r.core.listnavOptions(n).some((a)=>a.hasAttribute?.("data-reactive-highlighted")))return;n?.preventDefault?.();let o=n?.currentTarget??n?.target;if(!o)return;if(!nr(r,String(o.value??"").split(",")))return;if(o.value="",ee(r))D(r)}function Ke(e,t,n){let r=k(e,t);if(!ne(r))return;n?.preventDefault?.();let i=(n?.currentTarget??n?.target)?.getAttribute?.("data-reactive-tag-param");if(!i)return;if(!nr(r,[i]))return;let a=Ji(r);if(!a)return;a.value="",D(r),a.focus?.()}function Ye(e,t,n){let r=k(e,t);if(!ne(r))return;n?.preventDefault?.();let i=(n?.currentTarget??n?.target)?.getAttribute?.("data-reactive-tag-param");if(!i)return;let a=Ue(r);if(!a)return;let s=He(a),c=s.filter((u)=>u.toLowerCase()!==i.toLowerCase());if(c.length===s.length)return;rr(r,a,c)}function Ve(e,t,n){let r=k(e,t);n?.preventDefault?.();let o=n?.currentTarget??n?.target,i=o?.getAttribute?.("data-reactive-association-param");if(!i)return;if(typeof r.root?.querySelectorAll!=="function")return;let a=r.core.ownership(),s=[...r.root.querySelectorAll(`[data-reactive-nested-list="${i}"]`)].find(a),u=[...r.root.querySelectorAll(`[data-reactive-nested-template="${i}"]`)].find(a)?.content?.firstElementChild;if(!s||!u){Ki(r,i);return}let l=u.cloneNode(!0);Gi(l,zi(r)),s.appendChild(l);let f=o?.getAttribute?.("data-reactive-nested-from-param"),p=o?.getAttribute?.("data-reactive-nested-clear-param")==="true",b=Yi(r,l,f,p);if(f)b?.focus?.();else[...l.querySelectorAll?.("input, select, textarea")??[]][0]?.focus?.();if(s.getAttribute?.("data-reactive-nested-json")===i)ar(r,i)}function Xe(e,t,n){let r=k(e,t);n?.preventDefault?.();let o=n?.currentTarget??n?.target,i=o?.closest?.("[data-reactive-nested-row]");if(!i)return;if(i.closest?.('[data-controller~="reactive"]')!==r.root)return;let a=o?.getAttribute?.("data-reactive-confirm-param"),s=o?.getAttribute?.("data-reactive-confirm-when-param"),c=a||(s?pr(r,s):null);if(!c)return Gn(r,i);let u=ir(r,i),l=Zi(c,u);return r.core.confirm(l,{el:o,row:i,fields:u}).then((f)=>{if(f)Gn(r,i)})}function cr(e,t){let n=t?.target;if(!n||!e.core.owns(n))return;ze(e)}var ur=["gte","gt","lte","lt"],es=["len_eq","len_gte","len_gt","len_lte","len_lt"],lr=["checked_eq","checked_gte","checked_gt","checked_lte","checked_lt"],ts=["digits_eq","digits_gte","digits_lt","digits_lte"];function Me(e,t,n){if(!Number.isInteger(t))return console.warn(`[phlex-reactive] reactive_show ${e}: needs an integer literal, got ${JSON.stringify(t)} — skipped`),null;switch(e.slice(e.indexOf("_")+1)){case"eq":return n===t;case"gte":return n>=t;case"gt":return n>t;case"lte":return n<=t;case"lt":return n<t;default:return null}}function fr(e,t,n){let r=Number(t);if(Number.isNaN(r))return console.warn(`[phlex-reactive] reactive_show ${e}: needs a numeric literal, got ${JSON.stringify(t)} — skipped`),null;let o=n==null?"":String(n).trim(),i=o===""?NaN:Number(o);if(Number.isNaN(i))return!1;switch(e){case"gte":return i>=r;case"gt":return i>r;case"lte":return i<=r;case"lt":return i<r;default:return null}}function dr(e,t){if(!e||typeof e!=="object")return null;if(typeof e.equals==="string")return t===e.equals;if(typeof e.not==="string")return t!==e.not;if(Array.isArray(e.in))return e.in.includes(t);for(let n of ur)if(n in e)return fr(n,e[n],t);for(let n of es)if(n in e)return Me(n,e[n],[...String(t??"")].length);return null}function Ze(e,t){if(!e||typeof e!=="object"||typeof e.field!=="string")return!1;let n=lr.find((i)=>(i in e));if(n){let i=t(e.field,!0);return Me(n,e[n],Array.isArray(i)?i.length:Number(i)||0)===!0}if(typeof e.same==="string"){let i=(a)=>{let s=String(t(a)??"");return e.fold===!0?s.replace(/[A-Z]/g,(c)=>String.fromCharCode(c.charCodeAt(0)+32)):s};return i(e.field)===i(e.same)!==(e.negate===!0)}let r=ts.filter((i)=>(i in e));if(r.length){let i=String(t(e.field)??"");if(!r.every((s)=>Number.isInteger(e[s]))||e.prefix!=null&&typeof e.prefix!=="string")return!1;return(/^[0-9]*$/.test(i)&&r.every((s)=>Me(s,e[s],i.length))&&i.startsWith(e.prefix??""))!==(e.negate===!0)}let o=t(e.field)??"";return dr(e,o)===!0}function q(e,t){if(!Array.isArray(e)||e.length===0)return null;return e.some((n)=>Array.isArray(n)&&n.length>0&&n.every((r)=>Ze(r,t)))}function ns(e){if(!Array.isArray(e)||e.length===0)return null;let t=new Set;for(let n of e){if(!Array.isArray(n))continue;for(let r of n){if(r&&typeof r==="object"&&typeof r.field==="string")t.add(r.field);if(typeof r?.same==="string")t.add(r.same)}}return t.size>0?[...t]:null}function rs(e){return e.flat().every((t)=>lr.some((n)=>(n in Object(t))))}function pr(e,t){let n=t;if(typeof t==="string")try{n=JSON.parse(t)}catch{return console.warn(`[phlex-reactive] malformed conditional confirm payload ${JSON.stringify(t)} — skipped`),null}if(!n||typeof n!=="object")return null;let{fields:r}=e.core.collectFields(),o=(a)=>r[a],i;if(typeof n.predicate==="string"){let a=Si(n.predicate);if(!a)return console.warn(`[phlex-reactive] confirm predicate "${n.predicate}" is not registered — proceeding without a dialog (register it with setConfirmPredicate)`),null;i=!!a(r)}else i=q(n.groups?.any,o)===!0;return i?n.message:null}function Qe(e,t){let n=t.target?.closest?.("[data-reactive-editable]");return n&&e.core.owns(n)?n:null}function os(e,t){let n=Qe(e,t);if(!n||t.isComposing||t.keyCode===229)return;if(t.key==="Enter"){let r=n.getAttribute("data-reactive-editable-enter");if(n.getAttribute("data-reactive-editable")==="multi"&&(r==null||t.shiftKey))return;if(t.preventDefault(),r==="submit")n.closest("form")?.requestSubmit();else if(r)e.core.applyOps(JSON.parse(r),"@root")}else if(t.key==="Escape"&&n.hasAttribute("data-reactive-editable-escape"))t.preventDefault(),n.textContent=e.core.served(n),L(n),n.blur()}function is(e,t){let n=Qe(e,t),r=n?.getAttribute("data-reactive-editable")!=="multi",o=(t.clipboardData??t.dataTransfer)?.getData("text/plain");if(!n||o==null||e.core.plain()&&!(r&&/[\r\n]/.test(o)))return;if(t.preventDefault(),r)o=o.replace(/\r?\n|\r/g," ");n.focus(),document.execCommand("insertText",!1,o)}function ss(e,t){let n=Qe(e,t);if(n?.firstChild&&e.core.text(n)==="")n.replaceChildren()}import{computeReducer as as}from"phlex/reactive/compute";var j=new WeakMap;function br(e,t){let n=j.get(e);if(!n)j.set(e,n={root:e.element,core:t,ours:new WeakSet,opsSig:null});return n}function tt(e,t,n,r){let o=br(e,t),i=Ss(o);if(i)o.seed=()=>et(o),o.root.addEventListener?.("turbo:morph-element",o.seed);if(i||r?.edited)et(o)}function nt(e){let t=j.get(e);if(!t)return;if(j.delete(e),t.seed)t.root.removeEventListener?.("turbo:morph-element",t.seed)}function rt(e){j.get(e)?.seed?.()}function ot(e,t,n){return et(br(e,t),n)}var cs=Object.freeze({el:null,kind:""}),us=/^#[A-Za-z_][\w-]*$/;function W({el:e,kind:t}){if(!e)return"";if(t==="checkbox")return e.checked?"true":"false";if(t==="radio")return e.checked?e.value??"":"";return e.value??""}function vr(e){if(typeof e==="boolean")return e;if(e==null)return!1;let t=String(e);return t!==""&&t!=="0"&&t!=="false"}function ls(e,t){if(t==="string")return W(e);let n=e.kind==="checkbox";if(t==="boolean")return n?Boolean(e.el.checked):vr(W(e));if(n)return e.el.checked?1:0;let r=Number(W(e));return Number.isFinite(r)?r:0}function fs(e,t,{el:n,kind:r},o,i){if(r==="checkbox"){let a=vr(i);if(Boolean(n.checked)===a)return null;return n.checked=a,n}if(r==="radio")return ds(e,t,o,String(i));if(String(i)===n.value)return null;return n.value=i,n}function ds(e,t,n,r){let o=null;for(let i of e.querySelectorAll(`[name="${n}"]`)){if(i.type!=="radio"||!t(i))continue;let a=i.value===r;if(Boolean(i.checked)===a)continue;if(i.checked=a,a)o=i;else o??=i}return o}function ps(e){if(e==null)return null;let t=Array.isArray(e)?e:e.ops;if(Array.isArray(t))return t.length>0?t:null;return console.warn("[phlex-reactive] $ops must be an ops chain or a [[op, args], ...] list — skipped"),null}function ms(e){if(typeof e==="string"&&us.test(e))return!0;return console.warn(`[phlex-reactive] refused cross-root mirror target ${JSON.stringify(e)} — skipped`),!1}function hs(e,t,n){let r=t===null?null:JSON.stringify(t),o=r!==null&&r!==e.opsSig&&n;if(e.opsSig=r,!o)return;e.core.applyOps(t,"@root")}function gs(e,t){let n=e.root.getAttribute(t);if(!n)return[];try{let r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function bs(e){let t=e.root.getAttribute("data-reactive-compute-inputs-param");if(!t)return[];try{let n=JSON.parse(t);if(Array.isArray(n))return n.map((r)=>[r,"number"]);if(n&&typeof n==="object")return Object.entries(n);return[]}catch{return[]}}function vs(e,t,n,r){let o=t?.target;if(!o?.name||typeof o.closest!=="function")return null;let i=ys(o.name,r);if(!n.includes(i))return null;return e.core.owns(o)?i:null}function ys(e,t){if(!t)return e;let n=`${t}[`;return e.startsWith(n)&&e.endsWith("]")?e.slice(n.length,-1):e}function hr(e,t,n){let r=String(n);for(let o of As(e,t)){if(o.textContent===r)continue;o.textContent=r}}function As(e,t){let n=e.root.querySelectorAll(`[data-reactive-text="${t}"]`);return Array.from(n).filter((r)=>e.core.owns(r))}function gr(e,t,n){let r=ws(e);for(let[o,i]of Object.entries(r)){let a=o in t?null:n(o),s=o in t?t[o]:a.el?W(a):void 0;if(s===void 0||s===null)continue;let c=String(s);for(let u of Array.isArray(i)?i:[i]){if(!ms(u))continue;for(let l of document.querySelectorAll(u)){if(l.textContent===c)continue;l.textContent=c}}}}function ws(e){let t=e.root.getAttribute("data-reactive-compute-mirror-param");if(!t)return{};try{let n=JSON.parse(t);return n&&typeof n==="object"&&!Array.isArray(n)?n:{}}catch{return{}}}function Ss(e){return e.root.getAttribute?.("data-reactive-compute-seed")==="true"}function et(e,t){if(t&&e.ours.has(t))return;let n=bs(e),r=n.map(([h])=>h),o=e.root.getAttribute?.("data-reactive-scope")||null,i=(h)=>o&&!h.includes("[")?`${o}[${h}]`:h,a=e.core.ownership(),s=new Map,c=(h)=>{let d=s.get(h);if(d)return d;let y=null,A=null,N=null;for(let C of e.root.querySelectorAll(`[name="${i(h)}"]`)){if(!a(C))continue;let Z=C.type;if(Z==="checkbox"||Z==="radio"&&C.checked){N={el:C,kind:Z};break}if(Z==="radio")y??=C;else A??=C}if(!N)if(y)N={el:y,kind:"radio"};else N=A?{el:A,kind:""}:cs;return s.set(h,N),N};for(let h of r)hr(e,h,W(c(h)));let u=e.root.getAttribute("data-reactive-compute-reducer-param"),l=u?as(u):null;if(!l){gr(e,{},c);return}let f=gs(e,"data-reactive-compute-outputs-param"),p={};for(let[h,d]of n)p[h]=ls(c(h),d);let b=l(p,{changed:vs(e,t,r,o)})||{},g=ps(b.$ops),v=[];for(let h of f){if(h==="$ops"||!(h in b))continue;let d=c(h);if(!d.el)continue;let y=fs(e.root,a,d,i(h),b[h]);if(y)v.push(y)}for(let h of Object.keys(b)){if(h==="$ops")continue;let d=b[h];if(d===void 0||d===null)continue;hr(e,h,d)}gr(e,b,c);for(let h of v){let d=new Event("input",{bubbles:!0});e.ours.add(d),h.dispatchEvent(d)}hs(e,g,Boolean(t))}var ct;function ut(e){ct=e}var Er=1,Es="phlex-reactive:persist:",_s=new Set(["hidden","file","password","submit","button","reset","image"]),lt=Symbol("persist-no-value"),ft="data-reactive-persist-state",xs=":is(lexxy-editor, trix-editor, [contenteditable=''], [contenteditable=true], [contenteditable=plaintext-only])",ks=new Set(["lexxy-editor","trix-editor"]),Ts="lexxy-editor, trix-editor, trix-toolbar",Ls=["lexxy:change","trix-change"],Rs=new Set(["","<p></p>","<p><br></p>","<div><br></div>"]),Ar=new WeakSet,wr=new WeakSet,Sr=new WeakSet;function oe(e){let t=e?.getAttribute?.("data-reactive-persist");if(!t||t==="off")return null;try{let n=JSON.parse(t);if(n&&typeof n==="object"&&typeof n.key==="string"&&n.key!=="")return n}catch{}if(!Ar.has(e))Ar.add(e),console.warn(`[phlex-reactive] malformed reactive_persist payload ${JSON.stringify(t)} — persistence disabled`);return null}function dt(e){try{if(e.storage==="session")return typeof sessionStorage>"u"?null:sessionStorage;return typeof localStorage>"u"?null:localStorage}catch{return null}}function pt(e,t){if(e?.getAttribute?.("data-reactive-debug")!=="true"||wr.has(e))return;wr.add(e),console.info(`[phlex-reactive] reactive_persist: storage unavailable — draft skipped (${t?.name??t})`)}function mt(e){return Es+e.key}function st(e,t){let n=dt(t);if(!n)return null;let r;try{r=n.getItem(mt(t))}catch(c){return pt(e,c),null}if(!r)return null;let o;try{o=JSON.parse(r)}catch{return null}if(!o||typeof o!=="object"||o.v!==Er)return null;let i=Number(t.ttl)*1000;if(!(Number(o.savedAt)+i>Date.now()))return re(e,t),null;let a=o.fields&&typeof o.fields==="object"?o.fields:{},s=o.state&&typeof o.state==="object"?o.state:null;return{fields:a,state:s}}function _r(e,t,{fields:n,state:r}){let o=dt(t);if(!o)return!1;let i={v:Er,savedAt:Date.now(),fields:n};if(r)i.state=r;try{return o.setItem(mt(t),JSON.stringify(i)),!0}catch(a){return pt(e,a),!1}}function re(e,t){e?.removeAttribute?.(ft);let n=dt(t);if(!n)return;try{n.removeItem(mt(t))}catch(r){pt(e,r)}}function ht(e,t){let n=Array.isArray(t.fields)?new Set(t.fields):null,r=[],o=(i)=>i.closest('[data-controller~="reactive"]')===e&&i.getAttribute("data-reactive-persist")!=="off";for(let i of e.querySelectorAll("input[name], select[name], textarea[name]")){if(!o(i)||_s.has(i.type)||i.closest(Ts))continue;if(n&&!n.has(i.name))continue;r.push({el:i,name:i.name,kind:"native"})}for(let i of e.querySelectorAll(xs)){if(!o(i))continue;let a=Os(i);if(!a||n&&!n.has(a))continue;r.push({el:i,name:a,kind:ks.has(i.localName)?"editor":"contenteditable"})}return r}function xr(e){return e.hasAttribute("data-reactive-editable")?ct.text(e):e.textContent??""}function Os(e){return e.getAttribute("name")||typeof e.name==="string"&&e.name||null}function gt(e){return typeof e.value==="string"}function Fs(e){if(typeof e.isEmpty==="boolean")return e.isEmpty;let t=e.editor?.getDocument?.();if(typeof t?.isEmpty==="function")return t.isEmpty();return Rs.has(e.value.trim())}function Ns(e,t,n){if(e?.getAttribute?.("data-reactive-debug")!=="true"||Sr.has(e))return;Sr.add(e),console.info(`[phlex-reactive] reactive_persist: could not restore editor ${JSON.stringify(t)} — ${n?.message??n}`)}function B(e){return e.tagName==="SELECT"&&e.multiple}function kr(e){let t=new Map;for(let{el:n,name:r}of e){if(n.type==="radio"||!String(r).endsWith("[]"))continue;t.set(r,(t.get(r)??0)+1)}return t}function Tr(e,t,n){if(!Array.isArray(e))return e;if(n.get(t)!==1||e.length!==1)return lt;return e[0]}function Lr(e,t){let n={},r=(o)=>{let i=n[o];return Array.isArray(i)?i:n[o]=[]};for(let{el:o,name:i,kind:a}of ht(e,t)){let s=String(i).endsWith("[]");if(a==="editor"){if(gt(o))if(s)r(i).push(o.value);else n[i]=o.value}else if(a==="contenteditable"){let c=xr(o);if(s)r(i).push(c);else n[i]=c}else if(o.type==="radio"){if(o.checked)n[i]=o.value;else if(!Object.hasOwn(n,i))n[i]=null}else if(o.type==="checkbox")if(s){let c=r(i);if(o.checked)c.push(o.value)}else n[i]=o.checked;else if(B(o)){let c=[...o.options].filter((u)=>u.selected).map((u)=>u.value);if(s)r(i).push(...c);else n[i]=c}else if(s)r(i).push(o.value);else n[i]=o.value}return n}function Cs(e,t,n){let r=t.restore==="always",o=ht(e,t),i=kr(o),a=new Set;for(let s of o)if(s.kind==="native"&&s.el.type==="checkbox"&&s.el.checked)a.add(s.name);for(let{el:s,name:c,kind:u}of o){if(!Object.hasOwn(n,c))continue;let l=n[c];if(l===null||l===void 0)continue;if(Array.isArray(l)&&B(s)&&(i.get(c)??0)>1)continue;if(Array.isArray(l)&&!(s.type==="checkbox"||B(s))){if(l=Tr(l,c,i),l===lt)continue}if((s.type==="checkbox"||B(s))&&String(c).endsWith("[]")&&!Array.isArray(l))continue;if(u==="editor")Rr(e,s,c,l,r);else if(u==="contenteditable"){if(!r&&xr(s).trim()!=="")continue;s.textContent=String(l)}else if(s.type==="radio"){if(!r&&o.some((f)=>f.kind==="native"&&f.el.type==="radio"&&f.name===c&&f.el.checked))continue;s.checked=s.value===String(l)}else if(s.type==="checkbox"&&Array.isArray(l)){if(!r&&a.has(c))continue;s.checked=l.map(String).includes(s.value)}else if(s.type==="checkbox"){if(!r&&s.checked)continue;s.checked=Boolean(l)}else if(B(s)){if(!r&&[...s.options].some((p)=>p.selected))continue;let f=new Set((Array.isArray(l)?l:[l]).map(String));for(let p of s.options)p.selected=f.has(p.value)}else{if(!r&&s.value!=="")continue;s.value=String(l)}}Ms(e,t,n)}function Rr(e,t,n,r,o){if(Array.isArray(r))return;if(!gt(t))return;if(!o&&!Fs(t))return;try{t.value=String(r)}catch(i){Ns(e,n,i)}}function Ms(e,t,n){let r=globalThis.customElements;if(typeof r?.whenDefined!=="function")return;let o=new Set;for(let a of e.querySelectorAll("lexxy-editor, trix-editor"))if(!gt(a)&&!r.get?.(a.localName))o.add(a.localName);let i=t.restore==="always";for(let a of o)r.whenDefined(a).then(()=>{if(!e.isConnected)return;let s=ht(e,t),c=kr(s);for(let{el:u,name:l,kind:f}of s){if(f!=="editor"||u.localName!==a||!Object.hasOwn(n,l))continue;let p=Tr(n[l],l,c);if(p===null||p===void 0||p===lt)continue;Rr(e,u,l,p,i)}})}function $s(e,t,n=!0){let r=oe(e);if(!r){console.warn("[phlex-reactive] persist_state on a root without reactive_persist — skipped");return}if(!t||typeof t!=="object")return;let o=st(e,r),i={...o?.state??{},...t},a=n?Lr(e,r):o?.fields??{};if(_r(e,r,{fields:a,state:i}))e.setAttribute?.(ft,JSON.stringify(i))}function Ps(e){let t=oe(e);if(t)re(e,t)}var at=new WeakMap,it=new WeakMap;function Is(e,t){if(typeof e?.addEventListener!=="function")return()=>{};let n=it.get(e);if(!n){let i=new Set,a=(s)=>{for(let c of i)c(s)};e.addEventListener("turbo:submit-end",a),n=[i,a],it.set(e,n)}let[r,o]=n;return r.add(t),()=>{if(r.delete(t),r.size>0)return;e.removeEventListener?.("turbo:submit-end",o),it.delete(e)}}function bt(e,t,n,r){let o=e.element,i=oe(o);if(!i)return;if(r?.submitted)re(o,i);let a=st(o,i);if(a){if(Cs(o,i,a.fields),a.state)o.setAttribute?.(ft,JSON.stringify(a.state));t.emit("reactive:persist-restored",{key:i.key,fields:a.fields,state:a.state??{}}),t.reseed()}let s=null,c=()=>{if(s!==null)clearTimeout(s),s=null},u=()=>{c();let g=st(o,i);_r(o,i,{fields:Lr(o,i),state:g?.state??null})},l=()=>{let g=Number(i.debounce)||0;if(g<=0)return u();if(s!==null)clearTimeout(s);s=setTimeout(()=>{s=null,u()},g)},f=(g)=>{if(!g?.detail?.success)return;let v=g.target;if(v?.tagName!=="FORM"||typeof v.contains!=="function")return;if(!v.contains(o))return;c(),re(o,i)},p=["input",...Ls];for(let g of p)o.addEventListener?.(g,l);o.addEventListener?.("change",u);let b=Is(globalThis.document,f);if(at.set(e,()=>{if(s!==null)u();for(let g of p)o.removeEventListener?.(g,l);o.removeEventListener?.("change",u),b()}),r?.edited&&!r.submitted)u();for(let g of r?.ops??[])g(!0)}function vt(e){let t=at.get(e);at.delete(e),t?.()}function Or(e,t){let n=ct?.waiting.get(e)?.persist;if(!n||!oe(e))return t(!0);(n.ops??=[]).push(t)}function yt(e,t){Or(e,(n)=>$s(e,t,n))}function At(e){Or(e,()=>Ps(e))}var ie=new WeakMap,Nr=new WeakSet,wt=new WeakMap;function St(e,t){let n=e.element,r=[],o=[],i=(u,l,f)=>{u.addEventListener?.(l,f),r.push(()=>u.removeEventListener?.(l,f))},a,s,c=()=>{if(!a&&(a=Ds(n,t))){let u=()=>se(e,t);if(i(n,"turbo:morph-element",u),o.push(u),u(),n.getAttribute?.("data-reactive-warn-unsaved")==="true")js(n,r)}if(!s&&(s=Bs(n,t))){let u=()=>Js(n,t);i(n,"turbo:morph-element",u),o.push(u),u()}};ie.set(e,[r,()=>{for(let u of o)u();c()}]),c()}function Et(e){for(let t of ie.get(e)?.[0]??[])t();ie.delete(e)}function _t(e){ie.get(e)?.[1]()}function Ds(e,t){if((e.getAttribute?.("data-action")??"").includes("reactive#trackDirty"))return!0;let n=e.querySelectorAll?.('[data-action*="reactive#trackDirty"]')??[];for(let r of n)if(t.owns(r))return!0;return!1}function se(e,t){let n=e.element;if(typeof n?.querySelectorAll!=="function")return;let r=0,o=(i,a)=>{if(a)i.setAttribute("data-reactive-dirty","true"),r++;else i.removeAttribute("data-reactive-dirty")};if(n.querySelectorAll("input[name], select[name], textarea[name]").forEach((i)=>{if(!t.owns(i))return;if(i.type==="file")return;o(i,qs(i))}),n.querySelectorAll("[data-reactive-editable][name]").forEach((i)=>{if(t.owns(i))o(i,t.text(i)!==t.served(i))}),r>0)n.setAttribute("data-reactive-dirty",String(r));else n.removeAttribute("data-reactive-dirty")}function qs(e){if(e.type==="checkbox"||e.type==="radio")return e.checked!==e.defaultChecked;if(e.tag==="select"||e.options){let t=Array.from(e.options??[]),n=!e.multiple&&!(e.size>1),r=t.filter((o)=>o.defaultSelected).pop()??t.find((o)=>!o.closest?.("optgroup")?.disabled&&!o.disabled);return t.some((o)=>o.selected!==(n?o===r:o.defaultSelected))}return e.value!==e.defaultValue}function Ws(e){let t=e.getAttribute?.("data-reactive-dirty"),n=Number(t);return Number.isFinite(n)&&n>0?n:0}function js(e,t){if(typeof window>"u"||typeof window.addEventListener!=="function")return;let n=window,r=wt.get(n);if(!r){let o=new Set,i=()=>{for(let c of o)if(Ws(c)>0)return c;return null},a=(c)=>{if(!i())return;return c.preventDefault(),c.returnValue="You have unsaved changes.",c.returnValue},s=(c)=>{if(Nr.has(c)||!i())return;if(Nr.add(c),!(typeof n.confirm==="function"?n.confirm("You have unsaved changes. Leave anyway?"):!0))c.preventDefault?.()};n.addEventListener("beforeunload",a),n.addEventListener("turbo:before-visit",s),r={roots:o,remove:()=>{n.removeEventListener?.("beforeunload",a),n.removeEventListener?.("turbo:before-visit",s),wt.delete(n)}},wt.set(n,r)}r.roots.add(e),t.push(()=>{if(r.roots.delete(e),r.roots.size===0)r.remove()})}function Bs(e,t){if(e.getAttribute?.("data-reactive-clipboard"))return!0;let n=e.querySelectorAll?.("[data-reactive-clipboard]")??[];for(let r of n)if(t.owns(r))return!0;return!1}function Js(e,t){let n=typeof globalThis.navigator?.clipboard?.readText==="function";if(e.getAttribute?.("data-reactive-clipboard"))e.hidden=!n;for(let r of e.querySelectorAll?.("[data-reactive-clipboard]")??[])if(t.owns(r))r.hidden=!n}function Lt(e){Us(e),zs(e)}function Us(e){let t=e.detail,n=t?.render;if(typeof n!=="function"||n.__reactiveDismissWrapped){if(typeof requestAnimationFrame==="function")requestAnimationFrame(xt);else setTimeout(xt,0);return}let r=async(o)=>{await n(o),xt()};r.__reactiveDismissWrapped=!0,t.render=r}function xt(){let e=document.querySelectorAll("[data-reactive-dismiss-after]");for(let t of e){if(t.hasAttribute("data-reactive-dismiss-scheduled"))continue;let n=Number(t.getAttribute("data-reactive-dismiss-after"));if(!Number.isFinite(n)||n<=0)continue;t.setAttribute("data-reactive-dismiss-scheduled",""),setTimeout(()=>t.remove(),n)}}var Hs=Object.freeze({append:"enter",prepend:"enter",replace:"update",update:"update",remove:"exit"}),kt=Object.freeze(["fade","slide","scale","highlight","shake"]),Tt="data-reactive-fx-pending",Rt=1000;function zs(e){let t=e.detail,n=t?.render;if(typeof n!=="function"||n.__reactiveEffectsWrapped)return;let r=t?.newStream??e.target,o=Hs[r?.getAttribute?.("action")];if(!o||Ys())return;let i=Gs(r,o);if(!i)return;let a=o==="exit"?async(s)=>{await Zs(ae(r),i),await n(s)}:async(s)=>{let c=o==="enter"?Vs(r):null;if(await n(s),o==="enter")Xs(c,i);else $r(ae(r),i)};a.__reactiveEffectsWrapped=!0,t.render=a}function Gs(e,t){let n=e.getAttribute?.("data-reactive-effect");if(n==="off")return null;if(n)return Mr(n,t);let o=(t==="enter"?Ks(e):ae(e))?.getAttribute?.(`data-reactive-effect-${t}`);return o?Mr(o,t):null}function ae(e){let t=e.getAttribute?.("target");return t?document.getElementById?.(t)??null:null}function Ks(e){return e.querySelector?.("template")?.content?.firstElementChild??null}function Mr(e,t){if(e.startsWith("[")){let r=null;try{let o=JSON.parse(e);if(Array.isArray(o)&&o.length===3)r=o.map(String)}catch{}if(r)return{legs:r};return console.warn(`[phlex-reactive] malformed effect legs ${JSON.stringify(e)} — skipped`),null}let n=e==="random"?kt[Math.floor(Math.random()*kt.length)]:e;if(!kt.includes(n))return console.warn(`[phlex-reactive] unknown effect ${JSON.stringify(e)} — skipped`),null;return{className:`reactive-fx--${n}-${t}`}}function Ys(){try{return typeof matchMedia==="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches}catch{return!1}}function Vs(e){let t=e.querySelector?.("template")?.content;if(!t)return null;for(let n of Array.from(t.children??[]))n.setAttribute?.(Tt,"");return ae(e)}function Xs(e,t){if(typeof e?.querySelectorAll!=="function")return;for(let n of Array.from(e.querySelectorAll(`[${Tt}]`)))n.removeAttribute(Tt),$r(n,t)}async function Zs(e,t){if(!e?.classList)return;if(t.legs){await Pr(e,t.legs);return}e.classList.add(t.className);let n=Ot(e);if(n<=0){e.classList.remove(t.className);return}await Ft(e,n),e.classList.remove(t.className)}function $r(e,t){if(!e?.classList)return;if(t.legs){Pr(e,t.legs);return}if(e.classList.contains(t.className))e.classList.remove(t.className),e.offsetWidth;e.classList.add(t.className);let n=Ot(e);if(n<=0){e.classList.remove(t.className);return}let r=e.__reactiveFxToken=(e.__reactiveFxToken??0)+1;Ft(e,n).then(()=>{if(e.__reactiveFxToken===r)e.classList.remove(t.className)})}async function Pr(e,t){let[n,r,o]=t.map(Qs),i=e.__reactiveFxToken=(e.__reactiveFxToken??0)+1;if(e.classList.remove(...n,...r,...o),e.classList.add(...n,...r),await ea(),e.__reactiveFxToken!==i)return;e.classList.remove(...r),e.classList.add(...o);let a=Ot(e);if(a>0)await Ft(e,a);if(e.__reactiveFxToken!==i)return;e.classList.remove(...n,...o)}function Qs(e){return String(e??"").split(/\s+/).filter(Boolean)}function Ot(e){if(typeof getComputedStyle!=="function")return 0;try{let t=getComputedStyle(e),n=(i)=>String(i??"").split(",").reduce((a,s)=>Math.max(a,parseFloat(s)||0),0),r=n(t.animationDuration)+n(t.animationDelay),o=n(t.transitionDuration)+n(t.transitionDelay);return Math.min(Math.max(r,o)*1000,Rt)}catch{return 0}}function Ft(e,t){return new Promise((n)=>{let r=(o)=>{if(o&&o.target!==e)return;e.removeEventListener?.("animationend",r),e.removeEventListener?.("transitionend",r),n()};e.addEventListener?.("animationend",r),e.addEventListener?.("transitionend",r),setTimeout(r,Math.min(t+50,Rt))})}function ea(){return new Promise((e)=>{if(typeof requestAnimationFrame!=="function")return setTimeout(e,16);let t=setTimeout(()=>{globalThis.cancelAnimationFrame?.(n),e()},Rt),n=requestAnimationFrame(()=>{clearTimeout(t),e()})})}var ta="phlex-reactive:latency",Nt=!1;function qr(e){if(typeof sessionStorage>"u")return;sessionStorage.setItem("phlex-reactive:latency",String(e))}function Wr(){if(typeof sessionStorage>"u")return;sessionStorage.removeItem("phlex-reactive:latency"),Nt=!1}function Mt(){if(typeof window<"u")window.PhlexReactive={enableLatencySim:qr,disableLatencySim:Wr}}function $t(){if(typeof sessionStorage>"u")return Promise.resolve();let e=Number(sessionStorage.getItem("phlex-reactive:latency"));if(!Number.isFinite(e)||e<=0)return Promise.resolve();if(!Nt)Nt=!0,console.warn(`[phlex-reactive] latency simulator ACTIVE — every action is delayed by ${e}ms. Call PhlexReactive.disableLatencySim() (or clear sessionStorage) to turn it off.`);return new Promise((t)=>setTimeout(t,e))}var Dr=new WeakMap;function Pt(e){let t=globalThis.document;if(!t)return!0;let n=Dr.get(t);if(!n)n=new Set,Dr.set(t,n);if(n.has(e))return!0;return n.add(e),!1}function Ct(e,t){try{return e?.querySelectorAll?.(t)?.length??0}catch{return 0}}function jr(e,t,n,r){if(Pt(`${e}|${t}|${n}`))return;console.warn(`[phlex-reactive] ${e} matched zero targets for selector "${t}" (${n})${r}`)}function It(e,t,n){let r=t.to;if(typeof r!=="string"||r===""||r==="@root")return;let o="";if(n&&!t.global){let i=Ct(globalThis.document,r);if(i>0)o=` — it matches ${i} element(s) outside the stream's target root; use global: true`}jr(`client op "${e}"`,r,n?`scoped to #${n.id||"?"}`:"document-scoped",o)}function Dt(e){if(!Pt(`missing-root|#${e}`))console.warn(`[phlex-reactive] reactive:js stream target root #${e} is not in the DOM — its ops were dropped`)}function qt(e,t,n){let r=e.element,o=n.to;if(typeof o!=="string"||o===""||o==="@root")return;let i="";if(!n.global)if(r?.matches?.(o))i=" — the selector matches this component's own root, which root-scoped resolution never includes; use to: :root";else if(Ct(r,o)>0)i=" — it matches only inside a nested reactive root (excluded by ownership scoping); use global: true";else{let a=Ct(globalThis.document,o);if(a>0)i=` — it matches ${a} element(s) outside this scope; use global: true`}jr(t,o,`scoped to #${r?.id||"?"}`,i)}function Wt(e,t){let n=e.element?.id||"?";if(Pt(`no-binding|${t.type}|${n}`))return;console.warn(`[phlex-reactive] runOps on #${n} found no on_client binding matching a "${t.type}" event — nothing ran`)}function na(e){if(!e)return[];let t=[],n=/<turbo-stream\b([^>]*)>/g,r;while((r=n.exec(e))!==null){let o=r[1],i=o.match(/\baction="([^"]*)"/)?.[1]??"?",a=o.match(/\btarget="([^"]*)"/)?.[1];t.push(a?`${i} → #${a}`:i)}return t}function jt(e,t){let{action:n,status:r,ms:o}=t,i=e.element?.id,s=`reactive ${i?`#${i} `:""}${n} → ${r??"—"} (${Math.round(o)}ms)`;if(console.groupCollapsed(s),console.log(`params: [${t.paramNames.join(", ")}] + collected: [${t.fieldNames.join(", ")}]`),console.log(`encoding: ${t.encoding}`),t.streams.length)console.log(`streams: ${t.streams.join(" ")}`);console.log(`token: ${t.tokenRefreshed?"refreshed ✓":"unchanged"}`),console.groupEnd()}function ce(e,t,n){e.streams=na(t),e.tokenRefreshed=n!=null}var ue=new WeakMap;function Bt(e,t,n,r){let o=n&&typeof n==="object"?ia(n):n;return o?Jr(t,o,r,!1):[]}function Jt(e,t,n,r){if(!n)return null;let o=Jr(t,n,r,!0);return o.length?o:null}function Jr(e,t,n,r){let o=[];for(let i of Ur(e,t,n)){if(t.add_class){let a=t.add_class.filter((s)=>!i.classList.contains(s));if(i.classList.add(...a),a.length)o.push(()=>i.classList.remove(...a))}if(t.remove_class){let a=t.remove_class.filter((s)=>i.classList.contains(s));if(i.classList.remove(...a),a.length)o.push(()=>i.classList.add(...a))}if(t.toggle_class)t.toggle_class.forEach((a)=>i.classList.toggle(a)),o.push(()=>t.toggle_class.forEach((a)=>i.classList.toggle(a)));if(t.hide&&!i.hidden)i.hidden=!0,o.push(()=>i.hidden=!1);if(t.show&&i.hidden)i.hidden=!1,o.push(()=>i.hidden=!0)}if(n&&(t.disable||t.text!=null))o.push(ra(t,n));if(r&&t.checked==="keep"&&n&&"checked"in n){let i=n.checked;o.push(()=>n.checked=!i)}return o}function Ur(e,t,n){if(t.to==null)return n?[n]:[];let r=e.opTargets({to:t.to});if(r.length===0)e.diagnose("busy/optimistic hint",{to:t.to});return r}function ra(e,t){let n=ue.get(t);if(n)n.count++;else ue.set(t,{count:1,disabled:t.disabled,html:t.innerHTML,hadText:e.text!=null,swappedTo:e.text});if(e.disable)t.disabled=!0;if(e.text!=null)t.innerHTML=e.text;return()=>oa(t,e)}function oa(e,t){let n=ue.get(e);if(!n)return;if(--n.count>0)return;if(ue.delete(e),!e.isConnected)return;if(t.disable)e.disabled=n.disabled;if(n.hadText&&e.innerHTML===n.swappedTo)e.innerHTML=n.html}function ia(e){if(!e||typeof e!=="object")return null;let{class:t,...n}=e;return t==null?e:{...n,add_class:t}}function Ut(e,t,n,r){if(!n?.hide)return null;let o=Ur(t,n,r);if(!o.length)return null;return()=>{let i=o.filter((a)=>a.isConnected&&!a.hidden);if(!i.length)return;console.warn("[phlex-reactive] optimistic: { hide: true } was undone by the reply's re-render — "+"the element is visible again. For an instant delete, return reply.remove so the server removes it; otherwise the hide only flashes.",i)}}var de;function Gt(e){de=e}var _=new Map;function Kr(e,t){let n=!_.has(e);if(_.set(e,t),n)de.enter()}function pe(e){if(_.delete(e))de.exit()}var zr=!1;function Kt(e){Yr();let t=e.getAttribute("target");if(!t)return;if(e.getAttribute("data-reactive-defer-via")==="stream"){fa(t,e);return}let n=e.getAttribute("data-reactive-defer-token");if(!n)return;U(t,n)}function Yr(){if(zr||typeof document>"u"||!document.addEventListener)return;zr=!0,document.addEventListener("turbo:before-stream-render",pa,!0),document.addEventListener("turbo:before-stream-render",sa)}function sa(e){let t=e.target?.getAttribute?.("target");if(!t?.startsWith("reactive-defer-src-"))return;let n=t.slice(19);if(_.get(n)?.via==="stream")pe(n)}function U(e,t){let n=document.getElementById(e);if(!n){console.warn(`[phlex-reactive] reactive:defer target #${e} is not on the page — skipped`);return}Vt(e),Qr(n);let r={via:"fetch",abort:new AbortController,timedOut:!1};return Kr(e,r),da(e,r,t)}function aa(e,t){if(typeof e!=="string"){let n={headers:{Accept:"text/vnd.turbo-stream.html"},credentials:"same-origin",signal:t};if(e.fallback)n.cache="no-store";return[e.src,n]}return[ha(),{method:"POST",headers:{Accept:"text/vnd.turbo-stream.html","Content-Type":"application/json","X-CSRF-Token":ga()},body:JSON.stringify({token:e}),credentials:"same-origin",signal:t}]}function Vr(e){let t=e.getAttribute?.("data-reactive-defer-src");if(!t)return;if(Xr(t))return{src:t};return console.error(ca(t)),ua(t)||la(e)}function ca(e){return`[phlex-reactive] refused data-reactive-defer-src="${e}" — it is not under this app's fragment path `+`(${Yt()}). If you changed Phlex::Reactive.fragment_path, add `+'<meta name="phlex-reactive-fragment-path" content="…your path…"> to the layout <head>.'}function ua(e){let t;try{t=new URL(e,window.location.href)}catch{return}let n=t.pathname.split("/").pop(),r=`${Yt()}/${n}${t.search}`;if(/^[\w-]+$/.test(n)&&Xr(r))return{src:r,fallback:!0}}function la(e){Vt(e.id),Xt(e),e.setAttribute("data-reactive-error","defer"),e.dispatchEvent(new CustomEvent("reactive:error",{bubbles:!0,composed:!0,detail:{kind:"defer",target:e.id,reason:"refused-url"}}))}function Xr(e){try{let t=new URL(window.location.href),n=new URL(e,t);return n.origin===t.origin&&n.pathname.startsWith(`${Yt()}/`)}catch{return!1}}function Yt(){return document.head?.querySelector?.('meta[name="phlex-reactive-fragment-path"]')?.content||"/reactive/fragment"}function fa(e,t){let n=document.getElementById(e);if(!n){console.warn(`[phlex-reactive] reactive:defer target #${e} is not on the page — skipped`);return}let r=t.getAttribute("data-reactive-defer-src");if(!r)return;if(!globalThis.customElements?.get?.("pgbus-stream-source")){let i=t.getAttribute("data-reactive-defer-token");if(i){U(e,i);return}console.error("[phlex-reactive] reactive:defer via=stream but <pgbus-stream-source> is not registered "+"and no fallback token was provided — is the pgbus client loaded on this page?");return}Vt(e),Qr(n);let o=document.createElement("pgbus-stream-source");o.id=Zr(e),o.setAttribute("src",r),o.setAttribute("since-id",t.getAttribute("data-reactive-defer-since-id")??"0"),o.setAttribute("hidden",""),document.body.appendChild(o),Kr(e,{via:"stream"})}function Zr(e){return`reactive-defer-src-${e}`}async function da(e,t,n){let r=setTimeout(()=>{t.timedOut=!0,t.abort.abort()},ba()),o;try{de.count("defer"),o=await fetch(...aa(n,t.abort.signal))}catch(s){if(clearTimeout(r),_.get(e)!==t)return;console.error("[phlex-reactive] deferred render failed",s),J(e,n);return}if(_.get(e)!==t){clearTimeout(r);return}if(o.redirected){clearTimeout(r),console.error(`[phlex-reactive] deferred render failed: redirected to ${o.url??"another URL"}`),J(e,n,o.status);return}if(o.status===204){clearTimeout(r),Gr(e);return}if(!o.ok){clearTimeout(r),console.error(`[phlex-reactive] deferred render failed: HTTP ${o.status}`),J(e,n,o.status);return}let i=o.headers?.get?.("Content-Type")||"";if(!i.includes("turbo-stream")){clearTimeout(r),console.error(`[phlex-reactive] deferred render failed: expected a turbo-stream, got "${i}"`),J(e,n,o.status);return}let a;try{a=await o.text()}catch(s){if(clearTimeout(r),_.get(e)!==t)return;console.error("[phlex-reactive] deferred render failed reading the body",s),J(e,n);return}if(clearTimeout(r),_.get(e)!==t)return;Gr(e),ma(a)}var zt=null,pa=(e)=>zt?.push(e);function ma(e){let t=zt=[];try{window.Turbo.renderStreamMessage(e)}finally{zt=null}for(let n of t){if(n.defaultPrevented)continue;let r=n.detail,o=r.render;r.render=()=>{},new Promise((i)=>i(o(r.newStream))).catch(console.error)}}function Vt(e){let t=_.get(e);if(!t)return;if(pe(e),t.via==="fetch")t.abort.abort();else document.getElementById(Zr(e))?.remove?.()}function Qr(e){e.setAttribute("data-reactive-defer-pending","true"),e.setAttribute("aria-busy","true")}function Xt(e){e.removeAttribute("data-reactive-defer-pending"),e.removeAttribute("aria-busy")}function Gr(e){pe(e);let t=document.getElementById(e);if(!t)return;Xt(t),t.removeAttribute("data-reactive-error")}function J(e,t,n){pe(e);let r=document.getElementById(e);if(!r)return;Xt(r),r.setAttribute("data-reactive-error","defer");let o=()=>{let i=document.getElementById(e);if(!i){console.warn("[phlex-reactive] defer retry() ignored — the target left the DOM");return}i.removeAttribute("data-reactive-error"),U(e,t)};r.dispatchEvent(new CustomEvent("reactive:error",{bubbles:!0,composed:!0,detail:{kind:"defer",target:e,status:n,retry:o}}))}function ha(){return document.querySelector('meta[name="phlex-reactive-defer-path"]')?.content||"/reactive/defer"}function ga(){return document.querySelector('meta[name="csrf-token"]')?.content??""}function ba(){let e=document.querySelector('meta[name="phlex-reactive-timeout"]')?.content,t=Number(e);return Number.isFinite(t)&&t>0?t:30000}var eo="__materialize",fe=new WeakMap;function le(e){if(e.getAttribute?.("data-reactive-lazy-visible")!=null)return"visible";if(e.getAttribute?.("data-reactive-lazy-on"))return"event";return null}function Zt(e,t,n){Yr();let r=e.element,o=!1,i=!1,a=null,s=null,c,u,l=()=>me(e),f=(d)=>{if(le(r)==="visible"){if(!a)b()}else if(d){let y=r.getAttribute("data-reactive-lazy-on");if(s===y)return;p(),r.addEventListener?.(y,l),s=y}},p=()=>{if(a?.disconnect(),a=null,s)r.removeEventListener?.(s,l);s=null},b=()=>{if(typeof IntersectionObserver>"u")return queueMicrotask(l);let d=r.getAttribute("data-reactive-lazy-visible")||"0px";a=new IntersectionObserver((y)=>{if(y.some((A)=>A.isIntersecting))l()},{rootMargin:d}),a.observe(r)},g=()=>{let d=le(r)!==null,y=o;if(o=d,!d)return p();if(i)return;if(t.forgetToken(),!y)return l();f(!0)};if(fe.set(e,{load(){if(i)return;let d=Vr(r);if(!d&&r.getAttribute("data-reactive-defer-src")!=null)return;if(d&&va(r,t))return;let y=d?U(r.id,d):t.proceed(r,eo,"{}");if(!y)return;i=!0,p();let A=()=>{i=!1};return y.then(A,A),y},off(){if(c)r.removeEventListener?.("turbo:morph-element",c);if(u)r.removeEventListener?.("turbo:morph-element",u);p()}}),(r.getAttribute?.("data-reactive-defer-token")||r.getAttribute?.("data-reactive-defer-src"))&&le(r)===null)Ht(r),c=(d)=>d.target===r&&Ht(r),r.addEventListener?.("turbo:morph-element",c);if(r.getAttribute?.("data-reactive-token-value")==null&&r.getAttribute?.("data-reactive-defer-src")==null)return;if(u=(d)=>{if(d.target!==r)return;if(!c)Ht(r);g()},r.addEventListener?.("turbo:morph-element",u),n)return g();if(o=le(r)!==null,o)f(!1)}function Qt(e){let t=fe.get(e);fe.delete(e),t?.off()}function me(e){return fe.get(e)?.load()}function va(e,t){return t.emit("reactive:before-dispatch",{action:eo,params:{},element:e},{cancelable:!0}).defaultPrevented}function Ht(e){if(!e?.id)return;if(e.getAttribute?.("data-reactive-defer-pending")!=="true")return;let t=e.getAttribute?.("data-reactive-defer-token")||Vr(e);if(t)U(e.id,t)}var en=new WeakMap,ge=new WeakMap,m=null,R,no;function on(e,t){let n=e.element;ge.set(n,t),fo();let r=(i)=>Aa(i,t),o=(i)=>xa(i,t);n.addEventListener("pointerdown",r),n.addEventListener("keydown",o),en.set(e,()=>{n.removeEventListener("pointerdown",r),n.removeEventListener("keydown",o)})}function sn(e){if(en.get(e)?.(),en.delete(e),ge.delete(e.element),m&&be(m.origin)===e.element)he()}var w=(e,t="")=>e?.getAttribute?.(`data-reactive-sortable${t}`),H=(e,t)=>{try{return e==null?t:JSON.parse(e)}catch{return t}},be=(e)=>e?.closest?.('[data-controller~="reactive"]'),so=(e)=>e.parentElement?.closest("[data-reactive-sortable],[data-reactive-sortable-source]"),T=(e)=>[...e.querySelectorAll("[data-reactive-sortable-item]")].filter((t)=>t!==m?.row&&so(t)===e),ro=(e)=>H(w(e,"-item"),null),tn=(e)=>w(e,"-disabled")==="true",ya=(e,t,n)=>{let r=e.getBoundingClientRect();return t>=r.left&&t<=r.right&&n>=r.top&&n<=r.bottom},ao=(e)=>{let t=w(e,"-group");if(!t)return e.matches("[data-reactive-sortable]")?[e]:[];return[...document.querySelectorAll("[data-reactive-sortable]")].filter((n)=>w(n,"-group")===t&&!tn(n)&&ge.has(be(n)))};function co(e,t){let n=e?.closest?.("[data-reactive-sortable-item]"),r=n&&so(n);if(m||!r||!t.owns(r)||tn(r)||tn(n))return;if(be(r)?.getAttribute("aria-busy")==="true")return;return{item:n,list:r}}function Aa(e,t){if(e.button>0||e.isPrimary===!1)return;let n=co(e.target,t);if(!n)return;let r=w(n.list,"-handle");if(r?!n.item.contains(e.target.closest(r)):e.target.closest("input,textarea,select,[contenteditable]"))return;let{clientX:o,clientY:i}=e,a=(d)=>d.pointerId===e.pointerId,s=e.pointerType==="touch",c=!s,u=s&&setTimeout(()=>c=!0,200),l=(d)=>{if(!a(d))return;if(m)return nn(d.clientX,d.clientY);if(Math.abs(d.clientX-o)<=4&&Math.abs(d.clientY-i)<=4)return;if(!c)return h();Sa(n,t,d),nn(d.clientX,d.clientY)},f=(d)=>m&&d.cancelable&&d.preventDefault(),p=(d)=>{if(!a(d))return;if(h(),m)wa(),rn()},b=(d)=>{if(d.type==="pointercancel"&&!a(d))return;if(h(),m)he()},v=[["pointermove",l],["pointerup",p],["pointercancel",b],["keydown",(d)=>d.key==="Escape"&&m&&(d.preventDefault(),b(d))],["touchmove",f,{passive:!1}]];for(let[d,y,A]of v)document.addEventListener(d,y,A);function h(){clearTimeout(u);for(let[d,y]of v)document.removeEventListener(d,y)}}function wa(){let e=(t)=>(t.preventDefault(),t.stopPropagation());window.addEventListener("click",e,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",e,{capture:!0}))}function Sa({item:e,list:t},n,r){let o=e.getBoundingClientRect(),i=t.matches("[data-reactive-sortable-source]"),a=i?e.cloneNode(!0):e;if(i){for(let c of[a,...a.querySelectorAll("[id],[data-controller]")])c.removeAttribute("id"),c.removeAttribute("data-controller");document.body.append(a)}let s=document.createElement(e.tagName);if(s.setAttribute("data-reactive-sortable-placeholder",""),s.setAttribute("aria-hidden","true"),s.style.height=`${o.height}px`,m=uo({core:n,item:e,row:a,origin:t,source:i,placeholder:s,style:a.getAttribute("style")}),m.dx=r.clientX-o.left,m.dy=r.clientY-o.top,m.select=document.documentElement.style.userSelect,document.documentElement.style.userSelect="none",!i)e.before(s);Object.assign(a.style,{position:"fixed",left:`${o.left}px`,top:`${o.top}px`,width:`${o.width}px`,height:`${o.height}px`,margin:"0",boxSizing:"border-box",zIndex:"2147483647",pointerEvents:"none"})}function uo(e){let{row:t,origin:n,source:r}=e;return e.index=T(n).indexOf(e.item),e.target=r?null:n,t.setAttribute("data-reactive-sortable-dragging",""),z(n,!0),e}var z=(e,t)=>e?.toggleAttribute("data-reactive-sortable-active",t);function ve(e,t,n,r){if(t[n])t[n].before(r);else if(t.length)t.at(-1).after(r);else e.append(r)}function nn(e,t){m.x=e,m.y=t,m.row.style.left=`${e-m.dx}px`,m.row.style.top=`${t-m.dy}px`;let n=ao(m.origin).find((r)=>ya(r,e,t));if(n)Ea(n,e,t);else if(m.source)an(null),m.placeholder.remove();_a(e,t)}function an(e){if(m.target!==m.origin)z(m.target,!1);m.target=e,z(e,!0)}function Ea(e,t,n){an(e);let r=T(e),[o,i]=r.map((c)=>c.getBoundingClientRect()),a=i&&o.top===i.top&&o.left!==i.left,s=r.findIndex((c)=>{let u=c.getBoundingClientRect();return a?t<u.left+u.width/2:n<u.top+u.height/2});ve(e,r,s<0?r.length:s,m.placeholder)}function _a(e,t){let n=m.target??m.origin,r=n.getBoundingClientRect(),o=n.scrollHeight>n.clientHeight;if(m.vy=o?t<r.top+40?-12:t>r.bottom-40?12:0:0,m.wy=t<40?-12:t>window.innerHeight-40?12:0,(m.vy||m.wy)&&!m.raf){let i=()=>{if(!m||!(m.vy||m.wy))return m&&(m.raf=0);if((m.target??m.origin).scrollTop+=m.vy,m.wy)window.scrollBy(0,m.wy);nn(m.x,m.y),m.raf=requestAnimationFrame(i)};m.raf=requestAnimationFrame(i)}}function xa(e,t){let n=e.key;if(m?.keyboard){if(e.target!==m.row||m.core!==t)return;let o={" ":rn,Enter:rn,Escape:he,Tab:he,ArrowUp:()=>oo(-1),ArrowDown:()=>oo(1),ArrowLeft:()=>io(-1),ArrowRight:()=>io(1)}[n];if(!o)return;if(n!=="Tab")e.preventDefault();return o()}if(n!==" "&&n!=="Enter")return;let r=co(e.target,t);if(!r||r.item!==e.target||r.list.matches("[data-reactive-sortable-source]"))return;e.preventDefault(),m=uo({core:t,keyboard:!0,item:r.item,row:r.item,origin:r.list,style:r.item.getAttribute("style")}),Ae("picked")}function oo(e){let t=T(m.target),n=ye()+e;if(n>=0&&n<=t.length)ve(m.target,t,n,m.row);lo()}function io(e){let t=ao(m.origin),n=t[t.indexOf(m.target)+e];if(n){let r=ye();an(n),ve(n,T(n),r,m.row)}lo()}function lo(){m.row.focus?.(),Ae("moved")}function ye(){let e=T(m.target),t=m.keyboard?m.row:m.placeholder;return e.filter((n)=>n.compareDocumentPosition(t)&4).length}function fo(){if(!R?.isConnected)R=document.createElement("div"),R.setAttribute("aria-live","polite"),R.setAttribute("data-reactive-sortable-live",""),R.style.cssText="position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap",document.body.append(R);return R}function Ae(e){let t=m.target??m.origin,n=(H(w(t,"-messages"),{})[e]??"").replaceAll("{position}",ye()+1).replaceAll("{count}",T(t).length+1),r=fo();r.textContent="",cancelAnimationFrame(no),no=requestAnimationFrame(()=>r.textContent=n)}function rn(){let e=m,{target:t,origin:n,source:r,row:o,placeholder:i}=e,a=t&&(r?i.isConnected:!0),s=a?ye():-1,c=a?ro(T(t)[s-1]):null;if(e.keyboard)Ae("dropped");if(!r&&i)i.replaceWith(o);if(mo(e),!a||t===n&&s===e.index)return;let u=t===n?"self":r?w(n,"-source"):w(n,"-name")??"list",l=H(w(t,"-from"),{})[u]??w(t),f={...H(w(t,"-params"),{}),item:ro(e.item),position:s,after:c,from:u},p=[];for(let g=t;g;g=g.parentElement)p.push(g);let b=ge.get(be(t))?.proceed(t,l,JSON.stringify(f),H(w(t,"-busy")));if(r)return;Promise.resolve(b).then((g)=>ka(g,p)||po(e))}function ka(e,t){if(!e)return!1;let n=document.createElement("template");return n.innerHTML=e,[...n.content.querySelectorAll("turbo-stream")].some((r)=>/^(replace|update)$/.test(r.getAttribute("action"))&&Ta(r,t))}function Ta(e,t){let n=e.getAttribute("target");if(n)return t.some((o)=>o.id===n);let r=e.getAttribute("targets");try{return Boolean(r)&&t.some((o)=>o.matches(r))}catch{return!1}}function he(){let e=m;if(e.keyboard)Ae("cancelled");e.placeholder?.remove(),mo(e),po(e)}function po({row:e,origin:t,index:n,source:r}){if(r||!e.isConnected)return;if(ve(t,T(t).filter((o)=>o!==e),n,e),e===document.activeElement)e.focus?.()}function mo(e){let{row:t,origin:n,target:r,source:o,style:i,placeholder:a}=e;if(m=null,e.raf)cancelAnimationFrame(e.raf);if(t.removeAttribute("data-reactive-sortable-dragging"),o)t.remove();else if(!e.keyboard)i==null?t.removeAttribute("style"):t.setAttribute("style",i);if(a?.remove(),z(n,!1),z(r,!1),!e.keyboard)document.documentElement.style.userSelect=e.select??""}var O=new Map,go=new WeakSet;function cn(e,t){let n=e.element,r=O.get(n.id);if(!r)O.set(n.id,r={state:null,seats:null});r.root=n,r.core=t,r.removing=!1,La(n);let o=(a)=>a.target===n&&queueMicrotask(()=>vo(r)),i=(a)=>a.target===n&&a.detail?.action==="presence_set"&&console.error(`[phlex-reactive] #${n.id}: its presence_set request failed`,a.detail);n.addEventListener("turbo:morph-element",o),n.addEventListener("reactive:error",i),r.off=()=>{n.removeEventListener("turbo:morph-element",o),n.removeEventListener("reactive:error",i)},vo(r)}function un(e){let t=e.element,n=O.get(t.id);if(!n||n.root!==t)return;n.off(),n.removing=!0,queueMicrotask(()=>{if(!n.removing)return;O.delete(t.id),t.ownerDocument.getElementById("reactive-presence-src-"+t.id)?.remove()})}function ln(e,t){if(!e?.hasAttribute?.("data-reactive-presence")){console.warn("[phlex-reactive] js.presence ran outside a reactive_presence root — ignored");return}let n=O.get(e.id);if(!n)O.set(e.id,n={root:e,state:null,seats:null});n.state={...n.state,...t},yo(n)}function La(e){let t="reactive-presence-src-"+e.id,n=document.getElementById(t);if(n&&go.has(n))return;if(n?.remove(),!bo())setTimeout(()=>{if(!bo())console.error("[phlex-reactive] reactive_presence needs the pgbus client (<pgbus-stream-source>) on this page — "+`#${e.id} is not subscribed to its presence stream`)},5000);let r=document.createElement("pgbus-stream-source");r.id=t,r.setAttribute("src",e.getAttribute("data-reactive-presence")),r.setAttribute("presence",""),r.hidden=!0,r.addEventListener("pgbus:connected",()=>{let o=O.get(e.id);if(!o||o.removing)return;yo(o),Ra(o)}),go.add(r),document.body.appendChild(r)}var bo=()=>!!globalThis.customElements?.get?.("pgbus-stream-source");function Ra(e){clearTimeout(e.timer),e.timer=setTimeout(()=>{let t=e.root;if(e.removing||!t.isConnected)return;let n=t.ownerDocument.getElementById("reactive-presence-src-"+t.id)?.pgbusSeat;if(n&&Ao(t).has(n))return;console.warn(`[phlex-reactive] #${t.id} never appeared on its presence roster: config.streams_authorize returned no identity for this stream, or its presence_set request failed (logged above)`)},2500)}function yo(e){let t=e.root;if(!e.core||!t.ownerDocument.getElementById("reactive-presence-src-"+t.id)?.getAttribute("connection-id"))return;e.core.proceed(t,"presence_set",JSON.stringify(e.state??{}))}function Ao(e){let t=e.getAttribute("data-reactive-presence-roster");if(t!=null)return new Set(t.split(" ").filter(Boolean));return new Set([...e.querySelectorAll("[data-reactive-presence-peer]")].map((n)=>n.getAttribute("data-reactive-presence-peer")))}function vo(e){let t=e.root,n=t.ownerDocument.getElementById("reactive-presence-src-"+t.id)?.pgbusSeat,r=t.querySelectorAll("[data-reactive-presence-peer],[data-reactive-presence-member]"),o=Ao(t),i;for(let u of r)if(u.getAttribute("data-reactive-presence-peer")===n)i=u.getAttribute("data-reactive-presence-member");for(let u of r){let l=u.getAttribute("data-reactive-presence-peer")===n;u.toggleAttribute("data-reactive-presence-me",l),u.toggleAttribute("data-reactive-presence-same-member",!l&&i!=null&&u.getAttribute("data-reactive-presence-member")===i)}let a=e.seats;if(e.seats=o,!a)return;let s=[...o].filter((u)=>!a.has(u)),c=[...a].filter((u)=>!o.has(u));if(s.length||c.length)e.core.emit("reactive:presence",{joined:s,left:c,me:n??null})}var So=new Map,fn=new WeakMap,Oa=0,we=new WeakMap;function dn(e,t){let n=e.element;if(!n.id&&!fn.has(n))fn.set(n,`#${++Oa}`);let r=n.id||fn.get(n),o=new Map,i=!1,a=(b)=>{clearTimeout(o.get(b)),o.delete(b)},s=(b,g,v)=>{a(b);let h=Date.parse(g.until)-Date.now();if(!(h>0))return c(b,g,v);let d=Math.ceil(h/1000);Eo(b,`${Math.floor(d/60)}:${String(d%60).padStart(2,"0")}`,"running"),u(g.waiting,!0),u(g.done,!1),o.set(b,setTimeout(()=>s(b,g,v),(h-1)%1000+1))},c=(b,g,v)=>{Eo(b,"0:00","done"),u(g.waiting,!1),u(g.done,!0);let h=So.get(v)??new Set;if(h.has(g.until))return;So.set(v,h.add(g.until)),b.dispatchEvent(new CustomEvent("reactive:countdown-done",{bubbles:!0,detail:{until:g.until}}))},u=(b,g)=>{let v;try{v=b&&n.querySelector(b)}catch{}if(v&&v.hidden===g)v.hidden=!g},l=()=>{if(i=!1,!we.has(e))return;let b=new Set;[...n.matches("[data-reactive-countdown]")?[n]:[],...n.querySelectorAll("[data-reactive-countdown]")].forEach((v,h)=>{if(!t.owns(v))return;let d;try{d=JSON.parse(v.getAttribute("data-reactive-countdown"))}catch{return}if(Number.isNaN(Date.parse(d?.until)))return;b.add(v),s(v,d,`${r}|${v.id||h}`)});for(let v of o.keys())if(!b.has(v))a(v)},f=()=>{if(i)return;i=!0,queueMicrotask(l)},p=()=>document.visibilityState==="visible"&&l();n.addEventListener("turbo:morph-element",f),n.addEventListener("reactive:streamed",f),document.addEventListener("visibilitychange",p),we.set(e,()=>{n.removeEventListener("turbo:morph-element",f),n.removeEventListener("reactive:streamed",f),document.removeEventListener("visibilitychange",p);for(let b of[...o.keys()])a(b)}),l()}function pn(e){we.get(e)?.(),we.delete(e)}function Eo(e,t,n){if(e.textContent!==t)e.textContent=t;if(e.getAttribute("data-reactive-countdown-state")!==n)e.setAttribute("data-reactive-countdown-state",n)}function Na(){let e=window.Turbo?.StreamActions;if(!e||e["reactive:visit"])return;e["reactive:visit"]=function(){let t=this.getAttribute("data-url");if(t)window.Turbo.visit(t,{action:"advance"})}}function Ca(){let e=window.Turbo?.StreamActions;if(!e||e["reactive:token"])return;e["reactive:token"]=function(){let t=this.getAttribute("data-reactive-token-value"),n=this.getAttribute("target");if(!t||!n)return;let r=document.getElementById(n);if(r)r.setAttribute("data-reactive-token-value",t)}}function Ma(){let e=window.Turbo?.StreamActions;if(!e||e["reactive:js"])return;e["reactive:js"]=function(){let t=qn(this.getAttribute("data-reactive-ops"));if(!t.length)return;let n=this.getAttribute("target"),r=this.getAttribute("data-reactive-verbose")==="true",o=n?document.getElementById(n):null;if(n&&!o){if(r)Dt(n);return}Rn(t,(i)=>wc(i,o),r?(i,a)=>It(i,a,o):void 0)}}function $a(){let e=window.Turbo?.StreamActions;if(!e||e["reactive:defer"])return;e["reactive:defer"]=function(){Kt(this)}}var ko=!1,Pa=null;function Ia(){if(ko)return;if(typeof document>"u"||typeof document.addEventListener!=="function")return;ko=!0,document.addEventListener("turbo:before-stream-render",(e)=>{Ya(e),Da(e),Wa(e),Lt(e)})}var Ee="reactive:streamed";function Da(e){let t=e.detail,n=t?.render,r=t?.newStream??e.target,o=r?.getAttribute?.("action"),i=/^(append|prepend|update)$/.test(o);if(typeof n!=="function"||!(i||/^(before|after|replace)$/.test(o)))return;let a=r.getAttribute("target"),s=r.getAttribute("targets"),c=new Set;for(let u of a?[document.getElementById(a)]:s?document.querySelectorAll(s):[]){let l=(i?u:u?.parentElement)?.closest?.('[data-controller~="reactive"]');if(l)c.add(l)}if(c.size===0)return;t.render=async(u)=>{await n(u);for(let l of c)if(l.isConnected)l.dispatchEvent(new Event(Ee))}}function On(e){return e?.tagName==="DIALOG"&&typeof e.showModal==="function"}function Fn(e){try{return e.matches(":modal")}catch{return!1}}function Qo(e){if(!On(e)){if(e?.closest?.('[data-reactive-verbose="true"], [data-reactive-debug="true"]'))console.warn(`[phlex-reactive] show_modal targets a <dialog>, not <${e.localName}> — skipped`);return}if(!e.isConnected||Fn(e))return;if(e.open)e.close();e.showModal()}function qa(e){if(On(e)&&e.open)e.close()}function Te(e){let n=[...e?.querySelectorAll?.("dialog[data-reactive-modal]")??[]];if(e?.matches?.("dialog[data-reactive-modal]"))n.push(e);for(let r of n)if(r.open&&!Fn(r))Qo(r)}function Wa(e){let t=e.detail,n=t?.render,r=t?.newStream??e.target;if(typeof n!=="function"||!r?.querySelector?.("template")?.content?.querySelector?.("dialog"))return;t.render=async(o)=>{await n(o),Te(document)}}var To=!1;function ja(){if(To)return;if(typeof document>"u"||typeof document.addEventListener!=="function")return;To=!0,document.addEventListener("turbo:morph-element",(t)=>{if(t.target?.matches?.('[data-controller~="reactive"]'))Te(t.target)}),document.addEventListener("turbo:morph",()=>Te(document));let e=new WeakSet;document.addEventListener("turbo:before-morph-element",(t)=>{let n=t.target,r=t.detail?.newElement;if(!On(n)||!r)return;if(r.hasAttribute?.("open"))e.delete(n);else e.add(n)}),document.addEventListener("turbo:before-morph-attribute",(t)=>{let{target:n,detail:r}=t;if(r?.attributeName!=="open"||r.mutationType!=="remove")return;if(!e.has(n)||!n.open||!Fn(n))return;e.delete(n),t.preventDefault(),n.close()})}var kn=new WeakMap;function ei(e,t,n,r){let o=kn.get(e)??new Map;kn.set(e,o);let i=(a,s)=>{o.delete(a),o.set(a,s)};if(t.endsWith("_class"))for(let a of n.classes??[])i(`.${a}`,e.classList.contains(a));else if(t.endsWith("_attr"))gi(n.name)||i(n.name,e.getAttribute(n.name));else if(t==="show"||t==="hide"||t==="toggle"){if(i("hidden",e.getAttribute("hidden")),n.expanded!=null)for(let a of r({...n,to:n.expanded}))ei(a,"set_attr",{name:"aria-expanded"})}}var Lo=!1;function Ba(){if(Lo)return;if(typeof document>"u"||typeof document.addEventListener!=="function")return;Lo=!0,document.addEventListener("turbo:morph-element",(e)=>{let t=e.target;for(let[n,r]of kn.get(t)??[])if(n[0]===".")t.classList.toggle(n.slice(1),r);else if(r==null)t.removeAttribute(n);else if(t.getAttribute(n)!==r)t.setAttribute(n,r)})}var ti="data-reactive-image-fallback",G="data-reactive-image-state",Tn="data-reactive-image-hidden",mn=null,Ln="data-reactive-wrap-hidden";function ni(e){if(e.hasAttribute("hidden"))return;e.setAttribute("hidden",""),e.setAttribute(Ln,"")}function ri(e){if(!e.hasAttribute(Ln))return;e.removeAttribute("hidden"),e.removeAttribute(Ln)}function K(e){if(e?.localName!=="img")return null;let t=e.getAttribute(ti);if(t==null)return null;try{return JSON.parse(t)||{}}catch{return{}}}var oi=(e)=>e.getAttribute("src")||e.getAttribute("srcset");function Nn(e,t){if(typeof t!=="string"||!t)return null;try{return e.closest('[data-controller~="reactive"]')?.querySelector(t)??null}catch{return null}}function ii(e,t){let n=Nn(e,t.alt);return n&&!n.contains(e)?n:null}function Le(e,t,n){if(n==="error"){if(t.hide&&!e.hasAttribute("hidden"))e.setAttribute("hidden",""),e.setAttribute(Tn,"");if(t.wrap){let o=Nn(e,t.wrap);if(o)ni(o);else console.warn(`[phlex-reactive] reactive_image_fallback wrap: ${JSON.stringify(t.wrap)} is not in the root — skipped`)}let r=ii(e,t);if(r)r.textContent=e.getAttribute("alt")??"",r.hidden=!1}else Fe(e,t);e.setAttribute(G,n)}function Fe(e,t=K(e)){if(!t||e.getAttribute(G)==null)return;if(e.getAttribute(G)==="error"){if(e.hasAttribute(Tn))e.removeAttribute("hidden");let n=Nn(e,t.wrap);if(n)ri(n);let r=ii(e,t);if(r)r.hidden=!0}e.removeAttribute(G),e.removeAttribute(Tn)}function Ro(e){let t=e.target,n=K(t);if(!n)return;if(e.type==="load")Le(t,n,"loaded");else if(oi(t))Le(t,n,"error");else Fe(t,n)}function Ja(){if(mn)return;if(typeof document>"u"||typeof document.addEventListener!=="function")return;let e=new WeakMap;mn={error:Ro,load:Ro,"turbo:before-morph-element":(t)=>{let n=t.target,r=t.detail?.newElement,o=n?.getAttribute?.(G);if(o==null||!r||!K(n))return;let i=(a)=>n.getAttribute(a)===r.getAttribute?.(a);if(i("src")&&i("srcset"))e.set(n,o)},"turbo:morph-element":(t)=>{let n=t.target,r=e.get(n);if(r===void 0)return;e.delete(n),queueMicrotask(()=>{let o=K(n);if(o)Le(n,o,r)})}};for(let[t,n]of Object.entries(mn))document.addEventListener(t,n,!0);for(let t of document.querySelectorAll?.(`img[${ti}]`)??[]){if(!t.complete||!oi(t))continue;let n=`${t.getAttribute("src")} ${t.getAttribute("srcset")}`,r=(o)=>`${t.getAttribute("src")} ${t.getAttribute("srcset")}`===n&&Le(t,K(t)??{},o);if(t.naturalWidth>0)r("loaded");else if(typeof t.decode==="function")t.decode().then(()=>r("loaded"),()=>r("error"));else r("error")}}function Jc(e){Pa=e}var Se,hn=null,Oo="[data-reactive-editable][contenteditable=plaintext-only]";function si(){if(Se===void 0)try{let e=document.createElement("div");e.contentEditable="plaintext-only",Se=e.contentEditable==="plaintext-only"}catch{Se=!1}return Se}function _e(e){if(e.matches?.(Oo))e.setAttribute("contenteditable","true");e.querySelectorAll?.(Oo).forEach(_e)}function Ua(){if(hn||typeof document>"u"||typeof document.createElement!=="function")return;if(si())return;_e(document),hn=new MutationObserver((e)=>{for(let t of e)if(t.type==="attributes")_e(t.target);else t.addedNodes.forEach(_e)}),hn.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["contenteditable","data-reactive-editable"]})}var Fo=!1;function No(e){return e===document.activeElement&&(e.localName==="input"||e.localName==="textarea"||e.hasAttribute("data-reactive-editable"))&&!e.hasAttribute("data-reactive-morph-value")&&!!e.closest('[data-controller~="reactive"]')}function Ha(){if(Fo)return;if(typeof document>"u"||typeof document.addEventListener!=="function")return;Fo=!0,document.addEventListener("turbo:before-morph-element",(e)=>{let t=e.target,n=e.detail?.newElement;if(!n||e.defaultPrevented)return;let r=No(t);if(r)Ga(t,n);if(t.hasAttribute?.("data-reactive-editable")){if(Re.set(t,F(n)),!r)return;for(let{name:i}of[...t.attributes])if(!n.hasAttribute(i)&&i!=="contenteditable"&&i!==E)t.removeAttribute(i);for(let{name:i,value:a}of n.attributes)if(i!=="contenteditable"&&t.getAttribute(i)!==a)t.setAttribute(i,a);return e.preventDefault()}if(t.localName!=="input"||!r)return;let o=n.getAttribute("value");if(o==null)t.removeAttribute("value");else if(t.getAttribute("value")!==o)t.setAttribute("value",o)}),document.addEventListener("focusin",(e)=>In(e.target)),document.addEventListener("turbo:before-morph-attribute",(e)=>{let t=e.detail?.attributeName;if((t==="value"||t===E)&&No(e.target))e.preventDefault()}),document.addEventListener("input",(e)=>{let t=e.target;if(t?.hasAttribute?.(E)&&Mn(t)===$n(t))t.removeAttribute(E)})}var E="data-reactive-held",Cn='[data-controller~="reactive"]',xe=null,P=new Map;function Mn(e){return e.hasAttribute("data-reactive-editable")?F(e):e.value}function $n(e){return e.hasAttribute("data-reactive-editable")?Dn(e):e.defaultValue}function za(e){if(e.hasAttribute("data-reactive-editable"))return F(e);return e.localName==="textarea"?e.textContent:e.getAttribute("value")??""}function Ga(e,t){let n=e.getAttribute("name");if(!n||/^(checkbox|radio)$/.test(e.type)||P.has(e.closest(Cn)))return;let r=za(t);if(r===Mn(e))return e.removeAttribute(E);if(r===$n(e))return;e.setAttribute(E,""),e.dispatchEvent(new CustomEvent("reactive:held",{bubbles:!0,detail:{name:n,theirs:r}}))}function Ka(e){let t=[];for(let n of e.querySelectorAll(`[${E}]`)){if(n.closest(Cn)!==e)continue;let r=n.getAttribute("name");if(Mn(n)===$n(n))n.removeAttribute(E);else if(r&&!t.includes(r))t.push(r)}if(t.length===0)return null;return JSON.stringify(t).replace(/[\u007f-]/g,(n)=>`\\u${n.charCodeAt(0).toString(16).padStart(4,"0")}`)}function ai(e){for(let t of e.querySelectorAll(`[${E}]`))if(t.closest(Cn)===e)t.removeAttribute(E)}function Co(e,t,n=!0){let r={root:e,streams:0,release:n},o=xe;xe=r;try{window.Turbo.renderStreamMessage(t)}finally{xe=o}if(n&&r.streams===0)ai(e)}function Ya(e){let t=xe,n=e.detail,r=n?.render;if(!t||typeof r!=="function")return;t.streams++,n.render=async(o)=>{P.set(t.root,(P.get(t.root)||0)+1);try{return await r(o)}finally{let i=P.get(t.root)-1;if(i)P.set(t.root,i);else P.delete(t.root);if(t.release)ai(t.root)}}}var Va="__materialize",Mo=!1;function Xa(){if(Mo)return;if(typeof window>"u"||typeof document>"u")return;if(typeof window.addEventListener!=="function")return;Mo=!0;let e=()=>{let t=document.documentElement;if(typeof t?.toggleAttribute!=="function")return;t.toggleAttribute("data-reactive-offline",globalThis.navigator?.onLine===!1)};e(),window.addEventListener("online",e),window.addEventListener("offline",e)}function Pn(){if(typeof document>"u")return;if(document.querySelector?.('meta[name="phlex-reactive-env"]')?.content==="development")Mt()}var ci="data-reactive-active",x=0;function ui(){if(x++,x===1)fi("reactive:busy")}function li(){if(x===0)return;if(x--,x===0)fi("reactive:idle")}function Uc(){return x}function Hc(){x=0,(typeof document<"u"?document.documentElement:null)?.removeAttribute?.(ci)}function fi(e){if(typeof document>"u")return;let t=document.documentElement;if(typeof t?.toggleAttribute==="function")t.toggleAttribute(ci,x>0);if(typeof document.dispatchEvent==="function"&&typeof CustomEvent==="function")document.dispatchEvent(new CustomEvent(e,{detail:{count:x}}))}var di="data-reactive-requests";function pi(e){if(typeof document>"u")return;let t=document.documentElement;if(typeof t?.setAttribute!=="function"||!Za(t))return;let n=Qa(t);n[e]=(Number(n[e])||0)+1,t.setAttribute(di,JSON.stringify(n))}function Za(e){return e.hasAttribute?.("data-reactive-verbose")||!!document.querySelector?.('[data-reactive-verbose="true"]')}function Qa(e){try{let t=JSON.parse(e.getAttribute(di));if(t&&typeof t==="object")return{action:0,defer:0,...t}}catch{}return{action:0,defer:0}}function $o(){Na(),Ca(),Ma(),$a(),Ia(),Ha(),ja(),Ba(),Ja(),Ua(),Xa(),Pn()}function ec(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var mi=Symbol.for("phlex-reactive.core");if(globalThis[mi])console.error("[phlex-reactive] the client was loaded twice. Import EITHER phlex/reactive/reactive_controller (the default, "+"everything in one file) OR phlex/reactive/core (features on demand), not both — each carries its own state.");globalThis[mi]=!0;var hi=!1;function tc(){if(hi)return;if(typeof document>"u")return;let e=document.querySelectorAll('[data-controller~="reactive"]');if(!e||e.length===0)return;console.warn("[phlex-reactive] found "+e.length+' element(s) with data-controller="reactive" '+"but the reactive controller never connected. It is loaded but not registered — "+'add `application.register("reactive", ReactiveController)` (importmap) or import it into app/javascript/controllers/ for lazyLoadControllersFrom apps. See the README.')}if(typeof window<"u"&&typeof document<"u"){let e=()=>setTimeout(tc,0);if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",e,{once:!0});else e()}var nc=new Set(["href","src","srcset","srcdoc","action","formaction","xlink:href","style"]);function gi(e){let t=String(e).toLowerCase();return t.startsWith("on")||nc.has(t)}var gn=new WeakMap;function rc(e,t,n){let[r,o,i]=t;gn.get(e)?.(),e.classList.add(r,o),n();let a=!1,s=requestAnimationFrame(()=>{if(a)return;e.classList.remove(o),e.classList.add(i)}),c=(l)=>{if(a||l&&l.target!==e)return;a=!0,gn.delete(e),clearTimeout(u),globalThis.cancelAnimationFrame?.(s),e.removeEventListener("animationend",c),e.removeEventListener("transitionend",c),e.classList.remove(r,o,i)};gn.set(e,c),e.addEventListener("animationend",c),e.addEventListener("transitionend",c);let u=setTimeout(c,oc(e))}function oc(e){let t=0;try{let n=getComputedStyle(e);for(let r of["transition","animation"]){let[o,i]=["Duration","Delay"].map((s)=>String(n[r+s]).split(",").map((c)=>parseFloat(c)*(/ms/.test(c)?1:1000)||0)),a=String(n[r+"IterationCount"]).split(",").map((s)=>/inf/.test(s)?1/0:parseFloat(s)>=0?parseFloat(s):1);for(let s=0;s<o.length||s<i.length||s<a.length;s++){let c=o[s%o.length]*a[s%a.length]||0;t=Math.max(t,c+i[s%i.length])}}}catch{}return Math.min(Math.max(t+50,350),5000)}var ic=":is(lexxy-editor, trix-editor, [contenteditable=''], [contenteditable=true], [contenteditable=plaintext-only])",sc=new Set(["lexxy-editor","trix-editor"]);function F(e){let t="",n=!1,r=(i)=>{if(n&&t&&!t.endsWith(`
|
|
1
|
+
import{Controller as Ia}from"@hotwired/stimulus";import{confirmResolver as Lo}from"phlex/reactive/confirm";import{confirmPredicate as Ri}from"phlex/reactive/confirm_predicate";var M=new WeakMap,Ie=new WeakMap;function k(e,t){let n=M.get(e);if(!n){if(M.set(e,n={root:e.element,core:t,nestedIndex:0}),n.root)Ie.set(n.root,n)}return n}function S(e,t,n){for(let r of t.split(" "))e.root.addEventListener?.(r,n),e.offs.push(()=>e.root.removeEventListener?.(r,n))}function I(e,t){S(e,"turbo:morph-element",t),e.seeds.push(t),t()}function De(e,t){let n=k(e,t);n.offs=[],n.seeds=[];let r,o,i,a;(n.wire=()=>{if(!n.show&&Ci(n))n.show=(s)=>{if(n.flipping)return;if(s?.type==="input"||s?.type==="change")Ui(n,s.target);else n.groups=Bi(n),Vn(n);zn(n)},S(n,"input change",n.show),S(n,"focusout",(s)=>{let c=s.target?.getAttribute?.("name");if(!c||n.touched?.has(c)||!n.core.owns(s.target))return;if((n.touched??=new Set).add(c),n.root.querySelector?.("[data-reactive-show-after]"))zn(n)}),I(n,n.show);if(!n.arm&&Mi(n))S(n,"input change",(s)=>Hn(n,s)),I(n,n.arm=()=>{Hn(n,null),Vn(n)});if(!r&&(r=n.show||n.arm))S(n,"reset",()=>setTimeout(()=>{if(M.get(e)!==n)return;n.show?.(),n.arm?.()},0));if(!o&&(o=ee(n)))S(n,"input",(s)=>Gi(n,s)&&D(n)),I(n,()=>D(n));if(!i&&(i=ne(n)))I(n,()=>cr(n));if(!a&&(a=Ki(n)))S(n,"input change",(s)=>dr(n,s)),I(n,()=>Ke(n))})(),S(n,"keydown",(s)=>ls(n,s)),S(n,"paste drop",(s)=>fs(n,s)),S(n,"input",(s)=>ds(n,s))}function qe(e){let t=M.get(e);if(!t)return;M.delete(e),Ie.delete(t.root);for(let n of t.offs??[])n();t.groupObserver?.disconnect()}function We(e){let t=M.get(e);if(!t)return;for(let n of t.seeds)n();t.wire()}function R(e){if(typeof e.dispatchEvent==="function")e.dispatchEvent(new Event("input",{bubbles:!0}))}function je(e,t,n){return dr(k(e,t),n)}function Be(e,t,n){return br(k(e,t),n)}var Li=/^#[A-Za-z_][\w-]*$/,Zn="[data-reactive-show-field], [data-reactive-show]";function Oi(e,t){let n=e.getAttribute("data-reactive-show-equals");if(n!==null)return t===n;let r=e.getAttribute("data-reactive-show-not");if(r!==null)return t!==r;let o=e.getAttribute("data-reactive-show-in");if(o!==null){try{let i=JSON.parse(o);if(Array.isArray(i))return i.includes(t)}catch{}return console.warn(`[phlex-reactive] malformed reactive_show in: list ${JSON.stringify(o)} — skipped`),null}for(let i of pr){let a=e.getAttribute(`data-reactive-show-${i}`);if(a!==null)return hr(i,a,t)}return console.warn("[phlex-reactive] a reactive_show binding declares no predicate — skipped"),null}function Qn(e){try{let t=JSON.parse(e);if(t&&typeof t==="object"&&!Array.isArray(t))return t}catch{}return console.warn(`[phlex-reactive] malformed compound reactive_show payload ${JSON.stringify(e)} — skipped`),null}function Fi(e){try{let t=JSON.parse(e);if(Array.isArray(t)&&t.every((n)=>n&&typeof n==="object"&&Array.isArray(n.any)&&Array.isArray(n.ops)))return t}catch{}return console.warn(`[phlex-reactive] malformed reactive_on_complete payload ${JSON.stringify(e)} — skipped`),[]}function er(e,t){if(!e||typeof e!=="object")return null;let n=e.any;if(Array.isArray(n)&&(n.length===0||Array.isArray(n[0])))return q(n,t);return Ni(e,t)}function Ni(e,t){let n=Array.isArray(e.all)?"all":Array.isArray(e.any)?"any":null;if(!n)return null;let r=e[n];if(r.length===0)return null;let o=r.map((i)=>et(i,t));return n==="all"?o.every(Boolean):o.some(Boolean)}function Q(e,t="show"){if(typeof e==="string"&&Li.test(e))return!0;return console.warn(`[phlex-reactive] refused cross-root ${t} target ${JSON.stringify(e)} — skipped`),!1}function Ci(e){if(e.root.getAttribute?.("data-reactive-show-targets"))return!0;if(e.root.getAttribute?.("data-reactive-group-targets"))return!0;let t=e.root.querySelectorAll?.(Zn)??[];for(let n of t)if(e.core.owns(n))return!0;for(let n of e.root.querySelectorAll?.(te)??[])if(e.core.owns(n))return!0;for(let n of e.root.querySelectorAll?.(or)??[])if(e.core.owns(n))return!0;return!1}function Mi(e){return!!e.root.getAttribute?.("data-reactive-on-complete")}function $i(e){let t=e.root.getAttribute?.("data-reactive-on-complete")??null;if(t!==e.onCompleteRaw)e.onCompleteRaw=t,e.onCompleteParsed=t==null?[]:Fi(t),e.onCompleteStates=e.onCompleteParsed.map(()=>!1);return e.onCompleteParsed}function Hn(e,t){let n=$i(e);if(!n.length)return;let r=rr(e,e.core.ownership());n.forEach((o,i)=>{let a=q(o.any,r);if(a===null)return;let s=a&&!e.onCompleteStates[i]&&Boolean(t);if(e.onCompleteStates[i]=a,s)e.core.applyOps(o.ops,"@root")})}function zn(e){if(typeof e.root?.querySelectorAll!=="function")return;let t=e.core.ownership(),n=e.root.getAttribute?.("data-reactive-scope")||null,r=rr(e,t),o=[];for(let i of e.root.querySelectorAll(Zn)){if(!t(i))continue;let a=i.getAttribute("data-reactive-show");if(a!==null){let l=er(Qn(a),r);if(l===null)continue;let f=i.getAttribute("data-reactive-show-after"),p=l&&(f==null||!!e.touched?.has(Je(f,n)));Gn(i,p,t,n);let b=(e.shown??=new WeakMap).get(i);if(e.shown.set(i,p),Pi.some((v)=>i.hasAttribute(`data-reactive-show-${v}`))&&b!==void 0&&b!==p)o.push(i);continue}let s=i.getAttribute("data-reactive-show-field");if(!s)continue;let c=r(s);if(c===null)continue;let u=Oi(i,c);if(u===null)continue;Gn(i,u,t,n)}if(e.groups)Hi(e,r,t,n);ji(e,r,t),Di(e,r),zi(e,r);for(let i of o)Ii(e,i,t,n)}var Pi=["clear","focus","scroll"];function Ii(e,t,n,r){if(t.hidden){let s=[];try{s=JSON.parse(t.getAttribute("data-reactive-show-clear")??"[]")}catch{}let c=new Set((Array.isArray(s)?s:[]).map((u)=>Je(String(u),r)));for(let u of c.size?e.root.querySelectorAll("[name]"):[]){if(!c.has(u.getAttribute("name"))||!n(u)||u.type==="file")continue;if(u.type==="checkbox"||u.type==="radio"){if(u.checked)u.checked=!1,R(u)}else e.core.setValue(u,"")}return}let o=t.getAttribute("data-reactive-show-scroll")==="true";if(o)t.scrollIntoView?.({block:"nearest"});let i=t.getAttribute("data-reactive-show-focus"),a=null;try{a=i?e.root.querySelector(i):null}catch{}a?.focus?.(o?{preventScroll:!0}:void 0)}function Gn(e,t,n,r){if(e.hidden=!t,e.getAttribute("data-reactive-show-disable")!=="true")return;if(typeof e.querySelectorAll!=="function")return;for(let o of e.querySelectorAll("input[name], select[name], textarea[name]"))if(n(o))o.disabled=!t;if(e.name&&n(e))e.disabled=!t}function Di(e,t){let n=tr(e);for(let[r,o]of Object.entries(n)){if(r.startsWith("#")){qi(r,o,t);continue}if(!o||typeof o!=="object"||Array.isArray(o))continue;let i=t(r);if(i===null)continue;let a=(s,c)=>c?t(r,!0):i;for(let[s,c]of Object.entries(o)){if(!Q(s))continue;let u;if(Array.isArray(c)){if(c.length===0){console.warn(`[phlex-reactive] malformed reactive_show_targets group for ${s} — skipped`);continue}u=c.every((l)=>et(l,a))}else{let l=gr(c,i);if(l===null){console.warn(`[phlex-reactive] malformed reactive_show_targets predicate for ${s} — skipped`);continue}u=l}for(let l of document.querySelectorAll(s))l.hidden=!u}}}function qi(e,t,n){if(!Q(e))return;let r=t&&typeof t==="object"&&!Array.isArray(t)?t.any:null,o=cs(r);if(o===null){console.warn(`[phlex-reactive] malformed reactive_show_targets conditions for ${e} — skipped`);return}if(o.every((a)=>n(a)===null)&&!us(r))return;let i=q(r,n);if(i===null)return;for(let a of document.querySelectorAll(e))a.hidden=!i}function tr(e,t="show",n="mode: { ... }, kind: { ... }"){let r=e.root.getAttribute?.(`data-reactive-${t}-targets`);if(!r)return{};try{let o=JSON.parse(r);if(o&&typeof o==="object"&&!Array.isArray(o))return o}catch{}return console.warn(`[phlex-reactive] malformed data-reactive-${t}-targets — ignored. `+`Did two reactive_${t}_targets calls collide on one root? Declare every entry in ONE call: reactive_${t}_targets(${n})`),{}}function Wi(e,t,n,r){let o=!1,i=null;for(let a of e.root.querySelectorAll(nr(t,r))){if(!n(a))continue;if(a.type==="checkbox")return a.checked?"true":"false";if(a.type==="radio"){if(a.checked)return a.value??"";o=!0;continue}i??=a}if(i)return i.value??"";return o?"":null}function nr(e,t){return`[name="${Je(e,t)}"]`}function Je(e,t){return t&&!e.includes("[")?`${t}[${e}]`:e}function rr(e,t){let n=e.root.getAttribute?.("data-reactive-scope")||null,r=new Map;return(o,i)=>{let a=i?`#${o}`:o;if(!r.has(a))r.set(a,i?Ue(e,o,t,n).filter((s)=>s.checked).length:Wi(e,o,t,n));return r.get(a)}}var or="[data-reactive-media]";function ji(e,t,n){for(let r of e.root.querySelectorAll(or)){if(!n(r))continue;let o,i,a;try{if(o=JSON.parse(r.getAttribute("data-reactive-media")),o?.match!=null)i=new RegExp(`^(?:${o.match})$`);if(o?.when!=null)a=new RegExp(`^(?:${o.when})$`)}catch{}if(typeof o?.field!=="string"||!o.pool||typeof o.pool!=="object"||o.match!=null&&!i||o.when!=null&&!a){console.warn("[phlex-reactive] malformed data-reactive-media — skipped");continue}let s=t(o.field);if(s===null)continue;let c=o.take>0?[...s]:null,u=c?c.slice(0,o.take).join(""):s,l=c?.length<o.take||i?.test(u)===!1||a?.test(s)===!1;if(l&&o.pending==="keep"){Kn(r,"pending");continue}let f=!l&&Object.hasOwn(o.pool,u)?Yn(e,o.pool[u])[0]:null,p=e.core.copyMedia(r,f??null);if(p===null)continue;if(Kn(r,l?"pending":p===!1?"miss":"hit"),typeof o.label!=="string")continue;let b=l?"":p===!1?String(o.blank??""):p;for(let g of Yn(e,o.label))if(g.textContent!==b)g.textContent=b}}function Kn(e,t){if(e.getAttribute("data-reactive-media-state")!==t)e.setAttribute("data-reactive-media-state",t)}function Yn(e,t){try{return t==="@root"?[]:e.core.opTargets({to:t})}catch{return[]}}var te="[data-reactive-enable], [data-reactive-select-all], [data-reactive-count]";function Bi(e){return!!e.root.querySelector?.(te)}function Ue(e,t,n,r,o){return[...e.root.querySelectorAll(nr(t,r))].filter((i)=>i.type==="checkbox"&&n(i)&&(!o||Ji(i.getAttribute("data-reactive-group"),o)))}function Ji(e,t){return e===t||!!e?.startsWith(`${t}.`)}function Ui(e,t){let n=t?.getAttribute?.("data-reactive-select-all");if(n&&e.core.owns(t))ir(e,n,t.checked,t,t.getAttribute("data-reactive-select-all-under"))}function He(e,t,n){if(!t)return;let r=Ie.get(e)??{root:e,core:{ownership:()=>(o)=>o.closest('[data-controller~="reactive"]')===e}};ir(r,t,n!==!1),r.show?.()}function ir(e,t,n,r,o){let i=e.root.getAttribute?.("data-reactive-scope")||null,a=Ue(e,t,e.core.ownership(),i,o).filter((s)=>s!==r&&s.checked!==n);for(let s of a)s.checked=n;e.flipping=!0;try{for(let s of a)for(let c of["input","change"])s.dispatchEvent?.(new Event(c,{bubbles:!0}))}finally{e.flipping=!1}}function Hi(e,t,n,r){for(let o of e.root.querySelectorAll(te)){if(!n(o))continue;let i=o.getAttribute("data-reactive-enable");if(i!==null){let c=er(Qn(i),t);if(c!==null)o.disabled=!c}let a=o.getAttribute("data-reactive-count");if(a){let c=String(t(a,!0));if(o.textContent!==c)o.textContent=c}let s=o.getAttribute("data-reactive-select-all");if(s){let c=o.getAttribute("data-reactive-select-all-under"),u=Ue(e,s,n,r,c).filter((f)=>f!==o),l=u.filter((f)=>f.checked).length;o.checked=l>0&&l===u.length,o.indeterminate=l>0&&l<u.length}}}function zi(e,t){for(let[n,r]of Object.entries(tr(e,"group",'"ids[]" => { ... }, "tags[]" => { ... }'))){if(!r||typeof r!=="object"||Array.isArray(r))continue;let o=String(t(n,!0));for(let a of Array.isArray(r.count)?r.count:[]){if(!Q(a,"group"))continue;for(let s of document.querySelectorAll(a))if(s.textContent!==o)s.textContent=o}let i=r.enable&&typeof r.enable==="object"?r.enable:{};for(let[a,s]of Object.entries(i)){if(!Q(a,"group"))continue;let c=q(s?.any,t);if(c===null){console.warn(`[phlex-reactive] malformed reactive_group_targets enable for ${a} — skipped`);continue}for(let u of document.querySelectorAll(a))u.disabled=!c}}}function Vn(e){if(e.groupObserver||typeof MutationObserver!=="function")return;let t=(o)=>e.root.getAttribute?.(`data-reactive-${o}`)?.includes("checked_");if(!e.root.getAttribute?.("data-reactive-group-targets")&&!e.root.querySelector?.(`${te}, [data-reactive-show*=checked_]`)&&!t("show-targets")&&!t("on-complete"))return;let r=(o)=>o.nodeType===1&&(o.matches('input[type="checkbox"]')||!!o.querySelector('input[type="checkbox"]'));e.groupObserver=new MutationObserver((o)=>{if(!o.some((i)=>[...i.addedNodes,...i.removedNodes].some(r)))return;e.show?.(),e.arm?.()}),e.groupObserver.observe(e.root,{childList:!0,subtree:!0})}function ee(e){return!!(e.root.getAttribute?.("data-reactive-filter-input")&&e.root.getAttribute?.("data-reactive-filter-option"))}function Gi(e,t){let n=e.root.getAttribute("data-reactive-filter-input");return!!n&&typeof t.target?.matches==="function"&&t.target.matches(n)}function D(e){if(typeof e.root?.querySelectorAll!=="function")return;let t=e.root.getAttribute("data-reactive-filter-input"),n=e.root.getAttribute("data-reactive-filter-option");if(!t||!n)return;let r=e.core.ownership(),o=[...e.root.querySelectorAll(t)].find(r);if(!o)return;let i=(o.value??"").trim().toLowerCase(),a=0;for(let u of e.root.querySelectorAll(n)){if(!r(u))continue;let l=(u.getAttribute("data-reactive-filter-text")??u.textContent??"").toLowerCase(),f=u.hasAttribute?.("data-reactive-tags-selected")||i!==""&&!l.includes(i);if(u.hidden=f,f)u.removeAttribute("data-reactive-highlighted");else a++}let s=e.root.getAttribute("data-reactive-filter-group");if(s)for(let u of e.root.querySelectorAll(s)){if(!r(u))continue;let l=[...u.querySelectorAll(n)].filter(r);if(l.length===0)continue;u.hidden=l.every((f)=>f.hidden)}let c=e.root.getAttribute("data-reactive-filter-empty");if(c){for(let u of e.root.querySelectorAll(c))if(r(u))u.hidden=a>0}}function ne(e){return!!e.root.getAttribute?.("data-reactive-tags-field")}function Ki(e){if(typeof e.root?.querySelector!=="function")return!1;return!!e.root.querySelector("[data-reactive-nested-json]")}function ze(e){if(typeof e.root?.querySelectorAll!=="function")return null;let t=e.root.getAttribute("data-reactive-tags-field");if(!t)return null;let n=e.core.ownership();return[...e.root.querySelectorAll(t)].find(n)??null}function Ge(e){let t=new Set,n=[];for(let r of String(e.value??"").split(",")){let o=r.trim();if(o===""||t.has(o.toLowerCase()))continue;t.add(o.toLowerCase()),n.push(o)}return n}function sr(e,t){let n=ze(e);if(!n)return!1;let r=Ge(n),o=new Set(r.map((a)=>a.toLowerCase())),i=!1;for(let a of t){let s=String(a??"").trim();if(s===""||o.has(s.toLowerCase()))continue;o.add(s.toLowerCase()),r.push(s),i=!0}if(i)ar(e,n,r);return i}function ar(e,t,n){t.value=n.join(","),R(t),cr(e)}function Yi(e){if(typeof e.root?.querySelectorAll!=="function")return null;let t=e.root.getAttribute("data-reactive-filter-input");if(!t)return null;let n=e.core.ownership();return[...e.root.querySelectorAll(t)].find(n)??null}function cr(e){let t=ze(e);if(!t)return;let n=Ge(t),r=e.core.ownership();Vi(e,n,r),Xi(e,n,r)}function Vi(e,t,n){let r=[...e.root.querySelectorAll("[data-reactive-tags-list]")].find(n);if(!r)return;let i=[...e.root.querySelectorAll("[data-reactive-tags-template]")].find(n)?.content?.firstElementChild;if(!i){if(!e.tagsWarnedTemplate)console.warn("[phlex-reactive] reactive_tags: no chip <template data-reactive-tags-template> found in this root — "+"chips will not render (the hidden field still updates). Add a template with a [data-reactive-tag-text] node and a reactive_tags_remove button."),e.tagsWarnedTemplate=!0;return}while(r.firstChild)r.removeChild(r.firstChild);for(let a of t){let s=i.cloneNode(!0);s.setAttribute?.("data-reactive-tag",a);let c=s.matches?.("[data-reactive-tag-text]")?s:(s.querySelectorAll?.("[data-reactive-tag-text]")??[])[0];if(c)c.textContent=a;let u=[...s.querySelectorAll?.('[data-action*="reactive#tagsRemove"]')??[]];if(s.matches?.('[data-action*="reactive#tagsRemove"]'))u.push(s);for(let l of u)l.setAttribute?.("data-reactive-tag-param",a);r.appendChild(s)}}function Xi(e,t,n){let r=new Set(t.map((o)=>o.toLowerCase()));for(let o of e.root.querySelectorAll("[role=option]")){if(!n(o))continue;let i=o.getAttribute?.("data-reactive-tag-param");if(!i)continue;if(r.has(i.toLowerCase()))o.setAttribute("data-reactive-tags-selected","true"),o.hidden=!0,o.removeAttribute?.("data-reactive-highlighted");else if(o.hasAttribute?.("data-reactive-tags-selected")){if(o.removeAttribute("data-reactive-tags-selected"),!ee(e))o.hidden=!1}}if(ee(e))D(e)}function Zi(e){return e.nestedIndex=Math.max(e.nestedIndex+1,Date.now()),e.nestedIndex}function Qi(e,t){let n=[e,...e.querySelectorAll?.("*")??[]];for(let r of n)for(let o of["name","id","for"]){let i=r.getAttribute?.(o);if(i&&i.includes("NEW_ROW"))r.setAttribute?.(o,i.replaceAll("NEW_ROW",String(t)))}}function es(e,t){if(e.nestedWarned)return;console.warn(`[phlex-reactive] nested rows: no owned [data-reactive-nested-list="${t}"] container + <template data-reactive-nested-template="${t}"> pair found in this root — the add `+"trigger did nothing. Render both inside the same reactive root (reactive_nested_list / reactive_nested_template)."),e.nestedWarned=!0}function ts(e,t,n,r){if(!n)return null;let o;try{o=JSON.parse(n)}catch{return null}if(!o||typeof o!=="object")return null;let i=e.core.ownership(),a=[...t.querySelectorAll?.("input, select, textarea")??[]],s=[];for(let[c,u]of Object.entries(o)){let l=[...e.root.querySelectorAll?.(u)??[]].find(i);if(!l)continue;let f=a.find((p)=>lr(p.getAttribute?.("name"))===c);if(!f)continue;ns(f,l),s.push(l)}if(r)for(let c of s)rs(c);return s[0]??null}function ns(e,t){if(e.type==="checkbox")e.checked=t.type==="checkbox"?!!t.checked:$e(t)!=="";else e.value=$e(t);R(e)}function rs(e){if(e.type==="checkbox")e.checked=!1;else e.value="";R(e)}function os(e,t){if(!e.includes("%{"))return e;return e.replace(/%\{(\w+)\}/g,(n,r)=>Object.prototype.hasOwnProperty.call(t,r)?t[r]:n)}function Xn(e,t){let n=[...t.querySelectorAll?.('input[name$="[_destroy]"]')??[]][0];if(n)n.value="1",R(n),t.hidden=!0;else t.parentNode?.removeChild?.(t);Ke(e)}function Ke(e){if(typeof e.root?.querySelectorAll!=="function")return;let t=e.core.ownership();for(let n of[...e.root.querySelectorAll("[data-reactive-nested-json]")].filter(t))fr(e,n.getAttribute("data-reactive-nested-json"))}function is(e,t){let n=t.getAttribute?.("data-reactive-nested-json-field");if(!n)return null;let r=e.core.ownership();return[...e.root.querySelectorAll(n)].find(r)??null}function ur(e,t){let n={},r=e.core.ownership();for(let o of[...t.querySelectorAll?.("input, select, textarea")??[]]){if(o.matches(":disabled")||o.type==="radio"&&!o.checked||!r(o))continue;let i=lr(o.getAttribute?.("name"));if(i===null||i==="_destroy")continue;n[i]=$e(o)}return n}function lr(e){if(!e)return null;let t=e.match(/\[([^\][]+)\]$/);return t?t[1]:e}function $e(e){if(e.type==="checkbox")return e.checked?e.value||"on":"";return e.value??""}function fr(e,t){let n=e.core.ownership(),r=[...e.root.querySelectorAll(`[data-reactive-nested-list="${t}"]`)].find(n);if(!r)return;let o=is(e,r);if(!o)return;let i=[];for(let s of[...r.querySelectorAll?.("[data-reactive-nested-row]")??[]]){if(!n(s)||s.hidden)continue;i.push(ur(e,s))}let a=JSON.stringify(i);if(o.value===a)return;o.value=a,R(o)}function Ye(e,t,n){let r=k(e,t);if(!ne(r))return;if(n?.defaultPrevented)return;if(r.core.listnavOptions(n).some((a)=>a.hasAttribute?.("data-reactive-highlighted")))return;n?.preventDefault?.();let o=n?.currentTarget??n?.target;if(!o)return;if(!sr(r,String(o.value??"").split(",")))return;if(o.value="",ee(r))D(r)}function Ve(e,t,n){let r=k(e,t);if(!ne(r))return;n?.preventDefault?.();let i=(n?.currentTarget??n?.target)?.getAttribute?.("data-reactive-tag-param");if(!i)return;if(!sr(r,[i]))return;let a=Yi(r);if(!a)return;a.value="",D(r),a.focus?.()}function Xe(e,t,n){let r=k(e,t);if(!ne(r))return;n?.preventDefault?.();let i=(n?.currentTarget??n?.target)?.getAttribute?.("data-reactive-tag-param");if(!i)return;let a=ze(r);if(!a)return;let s=Ge(a),c=s.filter((u)=>u.toLowerCase()!==i.toLowerCase());if(c.length===s.length)return;ar(r,a,c)}function Ze(e,t,n){let r=k(e,t);n?.preventDefault?.();let o=n?.currentTarget??n?.target,i=o?.getAttribute?.("data-reactive-association-param");if(!i)return;if(typeof r.root?.querySelectorAll!=="function")return;let a=r.core.ownership(),s=[...r.root.querySelectorAll(`[data-reactive-nested-list="${i}"]`)].find(a),u=[...r.root.querySelectorAll(`[data-reactive-nested-template="${i}"]`)].find(a)?.content?.firstElementChild;if(!s||!u){es(r,i);return}let l=u.cloneNode(!0);Qi(l,Zi(r)),s.appendChild(l);let f=o?.getAttribute?.("data-reactive-nested-from-param"),p=o?.getAttribute?.("data-reactive-nested-clear-param")==="true",b=ts(r,l,f,p);if(f)b?.focus?.();else[...l.querySelectorAll?.("input, select, textarea")??[]][0]?.focus?.();if(s.getAttribute?.("data-reactive-nested-json")===i)fr(r,i)}function Qe(e,t,n){let r=k(e,t);n?.preventDefault?.();let o=n?.currentTarget??n?.target,i=o?.closest?.("[data-reactive-nested-row]");if(!i)return;if(i.closest?.('[data-controller~="reactive"]')!==r.root)return;let a=o?.getAttribute?.("data-reactive-confirm-param"),s=o?.getAttribute?.("data-reactive-confirm-when-param"),c=a||(s?br(r,s):null);if(!c)return Xn(r,i);let u=ur(r,i),l=os(c,u);return r.core.confirm(l,{el:o,row:i,fields:u}).then((f)=>{if(f)Xn(r,i)})}function dr(e,t){let n=t?.target;if(!n||!e.core.owns(n))return;Ke(e)}var pr=["gte","gt","lte","lt"],ss=["len_eq","len_gte","len_gt","len_lte","len_lt"],mr=["checked_eq","checked_gte","checked_gt","checked_lte","checked_lt"],as=["digits_eq","digits_gte","digits_lt","digits_lte"];function Pe(e,t,n){if(!Number.isInteger(t))return console.warn(`[phlex-reactive] reactive_show ${e}: needs an integer literal, got ${JSON.stringify(t)} — skipped`),null;switch(e.slice(e.indexOf("_")+1)){case"eq":return n===t;case"gte":return n>=t;case"gt":return n>t;case"lte":return n<=t;case"lt":return n<t;default:return null}}function hr(e,t,n){let r=Number(t);if(Number.isNaN(r))return console.warn(`[phlex-reactive] reactive_show ${e}: needs a numeric literal, got ${JSON.stringify(t)} — skipped`),null;let o=n==null?"":String(n).trim(),i=o===""?NaN:Number(o);if(Number.isNaN(i))return!1;switch(e){case"gte":return i>=r;case"gt":return i>r;case"lte":return i<=r;case"lt":return i<r;default:return null}}function gr(e,t){if(!e||typeof e!=="object")return null;if(typeof e.equals==="string")return t===e.equals;if(typeof e.not==="string")return t!==e.not;if(Array.isArray(e.in))return e.in.includes(t);for(let n of pr)if(n in e)return hr(n,e[n],t);for(let n of ss)if(n in e)return Pe(n,e[n],[...String(t??"")].length);return null}function et(e,t){if(!e||typeof e!=="object"||typeof e.field!=="string")return!1;let n=mr.find((i)=>(i in e));if(n){let i=t(e.field,!0);return Pe(n,e[n],Array.isArray(i)?i.length:Number(i)||0)===!0}if(typeof e.same==="string"){let i=(a)=>{let s=String(t(a)??"");return e.fold===!0?s.replace(/[A-Z]/g,(c)=>String.fromCharCode(c.charCodeAt(0)+32)):s};return i(e.field)===i(e.same)!==(e.negate===!0)}let r=as.filter((i)=>(i in e));if(r.length){let i=String(t(e.field)??"");if(!r.every((s)=>Number.isInteger(e[s]))||e.prefix!=null&&typeof e.prefix!=="string")return!1;return(/^[0-9]*$/.test(i)&&r.every((s)=>Pe(s,e[s],i.length))&&i.startsWith(e.prefix??""))!==(e.negate===!0)}let o=t(e.field)??"";return gr(e,o)===!0}function q(e,t){if(!Array.isArray(e)||e.length===0)return null;return e.some((n)=>Array.isArray(n)&&n.length>0&&n.every((r)=>et(r,t)))}function cs(e){if(!Array.isArray(e)||e.length===0)return null;let t=new Set;for(let n of e){if(!Array.isArray(n))continue;for(let r of n){if(r&&typeof r==="object"&&typeof r.field==="string")t.add(r.field);if(typeof r?.same==="string")t.add(r.same)}}return t.size>0?[...t]:null}function us(e){return e.flat().every((t)=>mr.some((n)=>(n in Object(t))))}function br(e,t){let n=t;if(typeof t==="string")try{n=JSON.parse(t)}catch{return console.warn(`[phlex-reactive] malformed conditional confirm payload ${JSON.stringify(t)} — skipped`),null}if(!n||typeof n!=="object")return null;let{fields:r}=e.core.collectFields(),o=(a)=>r[a],i;if(typeof n.predicate==="string"){let a=Ri(n.predicate);if(!a)return console.warn(`[phlex-reactive] confirm predicate "${n.predicate}" is not registered — proceeding without a dialog (register it with setConfirmPredicate)`),null;i=!!a(r)}else i=q(n.groups?.any,o)===!0;return i?n.message:null}function tt(e,t){let n=t.target?.closest?.("[data-reactive-editable]");return n&&e.core.owns(n)?n:null}function ls(e,t){let n=tt(e,t);if(!n||t.isComposing||t.keyCode===229)return;if(t.key==="Enter"){let r=n.getAttribute("data-reactive-editable-enter");if(n.getAttribute("data-reactive-editable")==="multi"&&(r==null||t.shiftKey))return;if(t.preventDefault(),r==="submit")n.closest("form")?.requestSubmit();else if(r)e.core.applyOps(JSON.parse(r),"@root")}else if(t.key==="Escape"&&n.hasAttribute("data-reactive-editable-escape"))t.preventDefault(),n.textContent=e.core.served(n),R(n),n.blur()}function fs(e,t){let n=tt(e,t),r=n?.getAttribute("data-reactive-editable")!=="multi",o=(t.clipboardData??t.dataTransfer)?.getData("text/plain");if(!n||o==null||e.core.plain()&&!(r&&/[\r\n]/.test(o)))return;if(t.preventDefault(),r)o=o.replace(/\r?\n|\r/g," ");n.focus(),document.execCommand("insertText",!1,o)}function ds(e,t){let n=tt(e,t);if(n?.firstChild&&e.core.text(n)==="")n.replaceChildren()}import{computeReducer as ps}from"phlex/reactive/compute";var j=new WeakMap;function wr(e,t){let n=j.get(e);if(!n)j.set(e,n={root:e.element,core:t,ours:new WeakSet,opsSig:null});return n}function rt(e,t,n,r){let o=wr(e,t),i=Rs(o);if(i)o.seed=()=>nt(o),o.root.addEventListener?.("turbo:morph-element",o.seed);if(i||r?.edited)nt(o)}function ot(e){let t=j.get(e);if(!t)return;if(j.delete(e),t.seed)t.root.removeEventListener?.("turbo:morph-element",t.seed)}function it(e){j.get(e)?.seed?.()}function st(e,t,n){return nt(wr(e,t),n)}var ms=Object.freeze({el:null,kind:""}),hs=/^#[A-Za-z_][\w-]*$/;function W({el:e,kind:t}){if(!e)return"";if(t==="checkbox")return e.checked?"true":"false";if(t==="radio")return e.checked?e.value??"":"";return e.value??""}function Sr(e){if(typeof e==="boolean")return e;if(e==null)return!1;let t=String(e);return t!==""&&t!=="0"&&t!=="false"}function gs(e,t){if(t==="string")return W(e);let n=e.kind==="checkbox";if(t==="boolean")return n?Boolean(e.el.checked):Sr(W(e));if(n)return e.el.checked?1:0;let r=Number(W(e));return Number.isFinite(r)?r:0}function bs(e,t,{el:n,kind:r},o,i){if(r==="checkbox"){let a=Sr(i);if(Boolean(n.checked)===a)return null;return n.checked=a,n}if(r==="radio")return vs(e,t,o,String(i));if(String(i)===n.value)return null;return n.value=i,n}function vs(e,t,n,r){let o=null;for(let i of e.querySelectorAll(`[name="${n}"]`)){if(i.type!=="radio"||!t(i))continue;let a=i.value===r;if(Boolean(i.checked)===a)continue;if(i.checked=a,a)o=i;else o??=i}return o}function ys(e){if(e==null)return null;let t=Array.isArray(e)?e:e.ops;if(Array.isArray(t))return t.length>0?t:null;return console.warn("[phlex-reactive] $ops must be an ops chain or a [[op, args], ...] list — skipped"),null}function As(e){if(typeof e==="string"&&hs.test(e))return!0;return console.warn(`[phlex-reactive] refused cross-root mirror target ${JSON.stringify(e)} — skipped`),!1}function ws(e,t,n){let r=t===null?null:JSON.stringify(t),o=r!==null&&r!==e.opsSig&&n;if(e.opsSig=r,!o)return;e.core.applyOps(t,"@root")}function Ss(e,t){let n=e.root.getAttribute(t);if(!n)return[];try{let r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function Es(e){let t=e.root.getAttribute("data-reactive-compute-inputs-param");if(!t)return[];try{let n=JSON.parse(t);if(Array.isArray(n))return n.map((r)=>[r,"number"]);if(n&&typeof n==="object")return Object.entries(n);return[]}catch{return[]}}function _s(e,t,n,r){let o=t?.target;if(!o?.name||typeof o.closest!=="function")return null;let i=xs(o.name,r);if(!n.includes(i))return null;return e.core.owns(o)?i:null}function xs(e,t){if(!t)return e;let n=`${t}[`;return e.startsWith(n)&&e.endsWith("]")?e.slice(n.length,-1):e}function yr(e,t,n){let r=String(n);for(let o of ks(e,t)){if(o.textContent===r)continue;o.textContent=r}}function ks(e,t){let n=e.root.querySelectorAll(`[data-reactive-text="${t}"]`);return Array.from(n).filter((r)=>e.core.owns(r))}function Ar(e,t,n){let r=Ts(e);for(let[o,i]of Object.entries(r)){let a=o in t?null:n(o),s=o in t?t[o]:a.el?W(a):void 0;if(s===void 0||s===null)continue;let c=String(s);for(let u of Array.isArray(i)?i:[i]){if(!As(u))continue;for(let l of document.querySelectorAll(u)){if(l.textContent===c)continue;l.textContent=c}}}}function Ts(e){let t=e.root.getAttribute("data-reactive-compute-mirror-param");if(!t)return{};try{let n=JSON.parse(t);return n&&typeof n==="object"&&!Array.isArray(n)?n:{}}catch{return{}}}function Rs(e){return e.root.getAttribute?.("data-reactive-compute-seed")==="true"}function nt(e,t){if(t&&e.ours.has(t))return;let n=Es(e),r=n.map(([h])=>h),o=e.root.getAttribute?.("data-reactive-scope")||null,i=(h)=>o&&!h.includes("[")?`${o}[${h}]`:h,a=e.core.ownership(),s=new Map,c=(h)=>{let d=s.get(h);if(d)return d;let y=null,A=null,N=null;for(let C of e.root.querySelectorAll(`[name="${i(h)}"]`)){if(!a(C))continue;let Z=C.type;if(Z==="checkbox"||Z==="radio"&&C.checked){N={el:C,kind:Z};break}if(Z==="radio")y??=C;else A??=C}if(!N)if(y)N={el:y,kind:"radio"};else N=A?{el:A,kind:""}:ms;return s.set(h,N),N};for(let h of r)yr(e,h,W(c(h)));let u=e.root.getAttribute("data-reactive-compute-reducer-param"),l=u?ps(u):null;if(!l){Ar(e,{},c);return}let f=Ss(e,"data-reactive-compute-outputs-param"),p={};for(let[h,d]of n)p[h]=gs(c(h),d);let b=l(p,{changed:_s(e,t,r,o)})||{},g=ys(b.$ops),v=[];for(let h of f){if(h==="$ops"||!(h in b))continue;let d=c(h);if(!d.el)continue;let y=bs(e.root,a,d,i(h),b[h]);if(y)v.push(y)}for(let h of Object.keys(b)){if(h==="$ops")continue;let d=b[h];if(d===void 0||d===null)continue;yr(e,h,d)}Ar(e,b,c);for(let h of v){let d=new Event("input",{bubbles:!0});e.ours.add(d),h.dispatchEvent(d)}ws(e,g,Boolean(t))}var lt;function ft(e){lt=e}var Tr=1,Ls="phlex-reactive:persist:",Os=new Set(["hidden","file","password","submit","button","reset","image"]),dt=Symbol("persist-no-value"),pt="data-reactive-persist-state",Fs=":is(lexxy-editor, trix-editor, [contenteditable=''], [contenteditable=true], [contenteditable=plaintext-only])",Ns=new Set(["lexxy-editor","trix-editor"]),Cs="lexxy-editor, trix-editor, trix-toolbar",Ms=["lexxy:change","trix-change"],$s=new Set(["","<p></p>","<p><br></p>","<div><br></div>"]),_r=new WeakSet,xr=new WeakSet,kr=new WeakSet;function oe(e){let t=e?.getAttribute?.("data-reactive-persist");if(!t||t==="off")return null;try{let n=JSON.parse(t);if(n&&typeof n==="object"&&typeof n.key==="string"&&n.key!=="")return n}catch{}if(!_r.has(e))_r.add(e),console.warn(`[phlex-reactive] malformed reactive_persist payload ${JSON.stringify(t)} — persistence disabled`);return null}function mt(e){try{if(e.storage==="session")return typeof sessionStorage>"u"?null:sessionStorage;return typeof localStorage>"u"?null:localStorage}catch{return null}}function ht(e,t){if(e?.getAttribute?.("data-reactive-debug")!=="true"||xr.has(e))return;xr.add(e),console.info(`[phlex-reactive] reactive_persist: storage unavailable — draft skipped (${t?.name??t})`)}function gt(e){return Ls+e.key}function ct(e,t){let n=mt(t);if(!n)return null;let r;try{r=n.getItem(gt(t))}catch(c){return ht(e,c),null}if(!r)return null;let o;try{o=JSON.parse(r)}catch{return null}if(!o||typeof o!=="object"||o.v!==Tr)return null;let i=Number(t.ttl)*1000;if(!(Number(o.savedAt)+i>Date.now()))return re(e,t),null;let a=o.fields&&typeof o.fields==="object"?o.fields:{},s=o.state&&typeof o.state==="object"?o.state:null;return{fields:a,state:s}}function Rr(e,t,{fields:n,state:r}){let o=mt(t);if(!o)return!1;let i={v:Tr,savedAt:Date.now(),fields:n};if(r)i.state=r;try{return o.setItem(gt(t),JSON.stringify(i)),!0}catch(a){return ht(e,a),!1}}function re(e,t){e?.removeAttribute?.(pt);let n=mt(t);if(!n)return;try{n.removeItem(gt(t))}catch(r){ht(e,r)}}function bt(e,t){let n=Array.isArray(t.fields)?new Set(t.fields):null,r=[],o=(i)=>i.closest('[data-controller~="reactive"]')===e&&i.getAttribute("data-reactive-persist")!=="off";for(let i of e.querySelectorAll("input[name], select[name], textarea[name]")){if(!o(i)||Os.has(i.type)||i.closest(Cs))continue;if(n&&!n.has(i.name))continue;r.push({el:i,name:i.name,kind:"native"})}for(let i of e.querySelectorAll(Fs)){if(!o(i))continue;let a=Ps(i);if(!a||n&&!n.has(a))continue;r.push({el:i,name:a,kind:Ns.has(i.localName)?"editor":"contenteditable"})}return r}function Lr(e){return e.hasAttribute("data-reactive-editable")?lt.text(e):e.textContent??""}function Ps(e){return e.getAttribute("name")||typeof e.name==="string"&&e.name||null}function vt(e){return typeof e.value==="string"}function Is(e){if(typeof e.isEmpty==="boolean")return e.isEmpty;let t=e.editor?.getDocument?.();if(typeof t?.isEmpty==="function")return t.isEmpty();return $s.has(e.value.trim())}function Ds(e,t,n){if(e?.getAttribute?.("data-reactive-debug")!=="true"||kr.has(e))return;kr.add(e),console.info(`[phlex-reactive] reactive_persist: could not restore editor ${JSON.stringify(t)} — ${n?.message??n}`)}function B(e){return e.tagName==="SELECT"&&e.multiple}function Or(e){let t=new Map;for(let{el:n,name:r}of e){if(n.type==="radio"||!String(r).endsWith("[]"))continue;t.set(r,(t.get(r)??0)+1)}return t}function Fr(e,t,n){if(!Array.isArray(e))return e;if(n.get(t)!==1||e.length!==1)return dt;return e[0]}function Nr(e,t){let n={},r=(o)=>{let i=n[o];return Array.isArray(i)?i:n[o]=[]};for(let{el:o,name:i,kind:a}of bt(e,t)){let s=String(i).endsWith("[]");if(a==="editor"){if(vt(o))if(s)r(i).push(o.value);else n[i]=o.value}else if(a==="contenteditable"){let c=Lr(o);if(s)r(i).push(c);else n[i]=c}else if(o.type==="radio"){if(o.checked)n[i]=o.value;else if(!Object.hasOwn(n,i))n[i]=null}else if(o.type==="checkbox")if(s){let c=r(i);if(o.checked)c.push(o.value)}else n[i]=o.checked;else if(B(o)){let c=[...o.options].filter((u)=>u.selected).map((u)=>u.value);if(s)r(i).push(...c);else n[i]=c}else if(s)r(i).push(o.value);else n[i]=o.value}return n}function qs(e,t,n){let r=t.restore==="always",o=bt(e,t),i=Or(o),a=new Set;for(let s of o)if(s.kind==="native"&&s.el.type==="checkbox"&&s.el.checked)a.add(s.name);for(let{el:s,name:c,kind:u}of o){if(!Object.hasOwn(n,c))continue;let l=n[c];if(l===null||l===void 0)continue;if(Array.isArray(l)&&B(s)&&(i.get(c)??0)>1)continue;if(Array.isArray(l)&&!(s.type==="checkbox"||B(s))){if(l=Fr(l,c,i),l===dt)continue}if((s.type==="checkbox"||B(s))&&String(c).endsWith("[]")&&!Array.isArray(l))continue;if(u==="editor")Cr(e,s,c,l,r);else if(u==="contenteditable"){if(!r&&Lr(s).trim()!=="")continue;s.textContent=String(l)}else if(s.type==="radio"){if(!r&&o.some((f)=>f.kind==="native"&&f.el.type==="radio"&&f.name===c&&f.el.checked))continue;s.checked=s.value===String(l)}else if(s.type==="checkbox"&&Array.isArray(l)){if(!r&&a.has(c))continue;s.checked=l.map(String).includes(s.value)}else if(s.type==="checkbox"){if(!r&&s.checked)continue;s.checked=Boolean(l)}else if(B(s)){if(!r&&[...s.options].some((p)=>p.selected))continue;let f=new Set((Array.isArray(l)?l:[l]).map(String));for(let p of s.options)p.selected=f.has(p.value)}else{if(!r&&s.value!=="")continue;s.value=String(l)}}Ws(e,t,n)}function Cr(e,t,n,r,o){if(Array.isArray(r))return;if(!vt(t))return;if(!o&&!Is(t))return;try{t.value=String(r)}catch(i){Ds(e,n,i)}}function Ws(e,t,n){let r=globalThis.customElements;if(typeof r?.whenDefined!=="function")return;let o=new Set;for(let a of e.querySelectorAll("lexxy-editor, trix-editor"))if(!vt(a)&&!r.get?.(a.localName))o.add(a.localName);let i=t.restore==="always";for(let a of o)r.whenDefined(a).then(()=>{if(!e.isConnected)return;let s=bt(e,t),c=Or(s);for(let{el:u,name:l,kind:f}of s){if(f!=="editor"||u.localName!==a||!Object.hasOwn(n,l))continue;let p=Fr(n[l],l,c);if(p===null||p===void 0||p===dt)continue;Cr(e,u,l,p,i)}})}function js(e,t,n=!0){let r=oe(e);if(!r){console.warn("[phlex-reactive] persist_state on a root without reactive_persist — skipped");return}if(!t||typeof t!=="object")return;let o=ct(e,r),i={...o?.state??{},...t},a=n?Nr(e,r):o?.fields??{};if(Rr(e,r,{fields:a,state:i}))e.setAttribute?.(pt,JSON.stringify(i))}function Bs(e){let t=oe(e);if(t)re(e,t)}var ut=new WeakMap,at=new WeakMap;function Js(e,t){if(typeof e?.addEventListener!=="function")return()=>{};let n=at.get(e);if(!n){let i=new Set,a=(s)=>{for(let c of i)c(s)};e.addEventListener("turbo:submit-end",a),n=[i,a],at.set(e,n)}let[r,o]=n;return r.add(t),()=>{if(r.delete(t),r.size>0)return;e.removeEventListener?.("turbo:submit-end",o),at.delete(e)}}function yt(e,t,n,r){let o=e.element,i=oe(o);if(!i)return;if(r?.submitted)re(o,i);let a=ct(o,i);if(a){if(qs(o,i,a.fields),a.state)o.setAttribute?.(pt,JSON.stringify(a.state));t.emit("reactive:persist-restored",{key:i.key,fields:a.fields,state:a.state??{}}),t.reseed()}let s=null,c=()=>{if(s!==null)clearTimeout(s),s=null},u=()=>{c();let g=ct(o,i);Rr(o,i,{fields:Nr(o,i),state:g?.state??null})},l=()=>{let g=Number(i.debounce)||0;if(g<=0)return u();if(s!==null)clearTimeout(s);s=setTimeout(()=>{s=null,u()},g)},f=(g)=>{if(!g?.detail?.success)return;let v=g.target;if(v?.tagName!=="FORM"||typeof v.contains!=="function")return;if(!v.contains(o))return;c(),re(o,i)},p=["input",...Ms];for(let g of p)o.addEventListener?.(g,l);o.addEventListener?.("change",u);let b=Js(globalThis.document,f);if(ut.set(e,()=>{if(s!==null)u();for(let g of p)o.removeEventListener?.(g,l);o.removeEventListener?.("change",u),b()}),r?.edited&&!r.submitted)u();for(let g of r?.ops??[])g(!0)}function At(e){let t=ut.get(e);ut.delete(e),t?.()}function Mr(e,t){let n=lt?.waiting.get(e)?.persist;if(!n||!oe(e))return t(!0);(n.ops??=[]).push(t)}function wt(e,t){Mr(e,(n)=>js(e,t,n))}function St(e){Mr(e,()=>Bs(e))}var ie=new WeakMap,Pr=new WeakSet,Et=new WeakMap;function _t(e,t){let n=e.element,r=[],o=[],i=(u,l,f)=>{u.addEventListener?.(l,f),r.push(()=>u.removeEventListener?.(l,f))},a,s,c=()=>{if(!a&&(a=Us(n,t))){let u=()=>se(e,t);if(i(n,"turbo:morph-element",u),o.push(u),u(),n.getAttribute?.("data-reactive-warn-unsaved")==="true")Gs(n,r)}if(!s&&(s=Ks(n,t))){let u=()=>Ys(n,t);i(n,"turbo:morph-element",u),o.push(u),u()}};ie.set(e,[r,()=>{for(let u of o)u();c()}]),c()}function xt(e){for(let t of ie.get(e)?.[0]??[])t();ie.delete(e)}function kt(e){ie.get(e)?.[1]()}function Us(e,t){if((e.getAttribute?.("data-action")??"").includes("reactive#trackDirty"))return!0;let n=e.querySelectorAll?.('[data-action*="reactive#trackDirty"]')??[];for(let r of n)if(t.owns(r))return!0;return!1}function se(e,t){let n=e.element;if(typeof n?.querySelectorAll!=="function")return;let r=0,o=(i,a)=>{if(a)i.setAttribute("data-reactive-dirty","true"),r++;else i.removeAttribute("data-reactive-dirty")};if(n.querySelectorAll("input[name], select[name], textarea[name]").forEach((i)=>{if(!t.owns(i))return;if(i.type==="file")return;o(i,Hs(i))}),n.querySelectorAll("[data-reactive-editable][name]").forEach((i)=>{if(t.owns(i))o(i,t.text(i)!==t.served(i))}),r>0)n.setAttribute("data-reactive-dirty",String(r));else n.removeAttribute("data-reactive-dirty")}function Hs(e){if(e.type==="checkbox"||e.type==="radio")return e.checked!==e.defaultChecked;if(e.tag==="select"||e.options){let t=Array.from(e.options??[]),n=!e.multiple&&!(e.size>1),r=t.filter((o)=>o.defaultSelected).pop()??t.find((o)=>!o.closest?.("optgroup")?.disabled&&!o.disabled);return t.some((o)=>o.selected!==(n?o===r:o.defaultSelected))}return e.value!==e.defaultValue}function zs(e){let t=e.getAttribute?.("data-reactive-dirty"),n=Number(t);return Number.isFinite(n)&&n>0?n:0}function Gs(e,t){if(typeof window>"u"||typeof window.addEventListener!=="function")return;let n=window,r=Et.get(n);if(!r){let o=new Set,i=()=>{for(let c of o)if(zs(c)>0)return c;return null},a=(c)=>{if(!i())return;return c.preventDefault(),c.returnValue="You have unsaved changes.",c.returnValue},s=(c)=>{if(Pr.has(c)||!i())return;if(Pr.add(c),!(typeof n.confirm==="function"?n.confirm("You have unsaved changes. Leave anyway?"):!0))c.preventDefault?.()};n.addEventListener("beforeunload",a),n.addEventListener("turbo:before-visit",s),r={roots:o,remove:()=>{n.removeEventListener?.("beforeunload",a),n.removeEventListener?.("turbo:before-visit",s),Et.delete(n)}},Et.set(n,r)}r.roots.add(e),t.push(()=>{if(r.roots.delete(e),r.roots.size===0)r.remove()})}function Ks(e,t){if(e.getAttribute?.("data-reactive-clipboard"))return!0;let n=e.querySelectorAll?.("[data-reactive-clipboard]")??[];for(let r of n)if(t.owns(r))return!0;return!1}function Ys(e,t){let n=typeof globalThis.navigator?.clipboard?.readText==="function";if(e.getAttribute?.("data-reactive-clipboard"))e.hidden=!n;for(let r of e.querySelectorAll?.("[data-reactive-clipboard]")??[])if(t.owns(r))r.hidden=!n}function Ot(e){Vs(e),Zs(e)}function Vs(e){let t=e.detail,n=t?.render;if(typeof n!=="function"||n.__reactiveDismissWrapped){if(typeof requestAnimationFrame==="function")requestAnimationFrame(Tt);else setTimeout(Tt,0);return}let r=async(o)=>{await n(o),Tt()};r.__reactiveDismissWrapped=!0,t.render=r}function Tt(){let e=document.querySelectorAll("[data-reactive-dismiss-after]");for(let t of e){if(t.hasAttribute("data-reactive-dismiss-scheduled"))continue;let n=Number(t.getAttribute("data-reactive-dismiss-after"));if(!Number.isFinite(n)||n<=0)continue;t.setAttribute("data-reactive-dismiss-scheduled",""),setTimeout(()=>t.remove(),n)}}var Xs=Object.freeze({append:"enter",prepend:"enter",replace:"update",update:"update",remove:"exit"}),Rt=Object.freeze(["fade","slide","scale","highlight","shake"]),Lt="data-reactive-fx-pending",Ft=1000;function Zs(e){let t=e.detail,n=t?.render;if(typeof n!=="function"||n.__reactiveEffectsWrapped)return;let r=t?.newStream??e.target,o=Xs[r?.getAttribute?.("action")];if(!o||ta())return;let i=Qs(r,o);if(!i)return;let a=o==="exit"?async(s)=>{await oa(ae(r),i),await n(s)}:async(s)=>{let c=o==="enter"?na(r):null;if(await n(s),o==="enter")ra(c,i);else qr(ae(r),i)};a.__reactiveEffectsWrapped=!0,t.render=a}function Qs(e,t){let n=e.getAttribute?.("data-reactive-effect");if(n==="off")return null;if(n)return Dr(n,t);let o=(t==="enter"?ea(e):ae(e))?.getAttribute?.(`data-reactive-effect-${t}`);return o?Dr(o,t):null}function ae(e){let t=e.getAttribute?.("target");return t?document.getElementById?.(t)??null:null}function ea(e){return e.querySelector?.("template")?.content?.firstElementChild??null}function Dr(e,t){if(e.startsWith("[")){let r=null;try{let o=JSON.parse(e);if(Array.isArray(o)&&o.length===3)r=o.map(String)}catch{}if(r)return{legs:r};return console.warn(`[phlex-reactive] malformed effect legs ${JSON.stringify(e)} — skipped`),null}let n=e==="random"?Rt[Math.floor(Math.random()*Rt.length)]:e;if(!Rt.includes(n))return console.warn(`[phlex-reactive] unknown effect ${JSON.stringify(e)} — skipped`),null;return{className:`reactive-fx--${n}-${t}`}}function ta(){try{return typeof matchMedia==="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches}catch{return!1}}function na(e){let t=e.querySelector?.("template")?.content;if(!t)return null;for(let n of Array.from(t.children??[]))n.setAttribute?.(Lt,"");return ae(e)}function ra(e,t){if(typeof e?.querySelectorAll!=="function")return;for(let n of Array.from(e.querySelectorAll(`[${Lt}]`)))n.removeAttribute(Lt),qr(n,t)}async function oa(e,t){if(!e?.classList)return;if(t.legs){await Wr(e,t.legs);return}e.classList.add(t.className);let n=Nt(e);if(n<=0){e.classList.remove(t.className);return}await Ct(e,n),e.classList.remove(t.className)}function qr(e,t){if(!e?.classList)return;if(t.legs){Wr(e,t.legs);return}if(e.classList.contains(t.className))e.classList.remove(t.className),e.offsetWidth;e.classList.add(t.className);let n=Nt(e);if(n<=0){e.classList.remove(t.className);return}let r=e.__reactiveFxToken=(e.__reactiveFxToken??0)+1;Ct(e,n).then(()=>{if(e.__reactiveFxToken===r)e.classList.remove(t.className)})}async function Wr(e,t){let[n,r,o]=t.map(ia),i=e.__reactiveFxToken=(e.__reactiveFxToken??0)+1;if(e.classList.remove(...n,...r,...o),e.classList.add(...n,...r),await sa(),e.__reactiveFxToken!==i)return;e.classList.remove(...r),e.classList.add(...o);let a=Nt(e);if(a>0)await Ct(e,a);if(e.__reactiveFxToken!==i)return;e.classList.remove(...n,...o)}function ia(e){return String(e??"").split(/\s+/).filter(Boolean)}function Nt(e){if(typeof getComputedStyle!=="function")return 0;try{let t=getComputedStyle(e),n=(i)=>String(i??"").split(",").reduce((a,s)=>Math.max(a,parseFloat(s)||0),0),r=n(t.animationDuration)+n(t.animationDelay),o=n(t.transitionDuration)+n(t.transitionDelay);return Math.min(Math.max(r,o)*1000,Ft)}catch{return 0}}function Ct(e,t){return new Promise((n)=>{let r=(o)=>{if(o&&o.target!==e)return;e.removeEventListener?.("animationend",r),e.removeEventListener?.("transitionend",r),n()};e.addEventListener?.("animationend",r),e.addEventListener?.("transitionend",r),setTimeout(r,Math.min(t+50,Ft))})}function sa(){return new Promise((e)=>{if(typeof requestAnimationFrame!=="function")return setTimeout(e,16);let t=setTimeout(()=>{globalThis.cancelAnimationFrame?.(n),e()},Ft),n=requestAnimationFrame(()=>{clearTimeout(t),e()})})}var aa="phlex-reactive:latency",Mt=!1;function Jr(e){if(typeof sessionStorage>"u")return;sessionStorage.setItem("phlex-reactive:latency",String(e))}function Ur(){if(typeof sessionStorage>"u")return;sessionStorage.removeItem("phlex-reactive:latency"),Mt=!1}function Pt(){if(typeof window<"u")window.PhlexReactive={enableLatencySim:Jr,disableLatencySim:Ur}}function It(){if(typeof sessionStorage>"u")return Promise.resolve();let e=Number(sessionStorage.getItem("phlex-reactive:latency"));if(!Number.isFinite(e)||e<=0)return Promise.resolve();if(!Mt)Mt=!0,console.warn(`[phlex-reactive] latency simulator ACTIVE — every action is delayed by ${e}ms. Call PhlexReactive.disableLatencySim() (or clear sessionStorage) to turn it off.`);return new Promise((t)=>setTimeout(t,e))}var Br=new WeakMap;function Dt(e){let t=globalThis.document;if(!t)return!0;let n=Br.get(t);if(!n)n=new Set,Br.set(t,n);if(n.has(e))return!0;return n.add(e),!1}function $t(e,t){try{return e?.querySelectorAll?.(t)?.length??0}catch{return 0}}function Hr(e,t,n,r){if(Dt(`${e}|${t}|${n}`))return;console.warn(`[phlex-reactive] ${e} matched zero targets for selector "${t}" (${n})${r}`)}function qt(e,t,n){let r=t.to;if(typeof r!=="string"||r===""||r==="@root")return;let o="";if(n&&!t.global){let i=$t(globalThis.document,r);if(i>0)o=` — it matches ${i} element(s) outside the stream's target root; use global: true`}Hr(`client op "${e}"`,r,n?`scoped to #${n.id||"?"}`:"document-scoped",o)}function Wt(e){if(!Dt(`missing-root|#${e}`))console.warn(`[phlex-reactive] reactive:js stream target root #${e} is not in the DOM — its ops were dropped`)}function jt(e,t,n){let r=e.element,o=n.to;if(typeof o!=="string"||o===""||o==="@root")return;let i="";if(!n.global)if(r?.matches?.(o))i=" — the selector matches this component's own root, which root-scoped resolution never includes; use to: :root";else if($t(r,o)>0)i=" — it matches only inside a nested reactive root (excluded by ownership scoping); use global: true";else{let a=$t(globalThis.document,o);if(a>0)i=` — it matches ${a} element(s) outside this scope; use global: true`}Hr(t,o,`scoped to #${r?.id||"?"}`,i)}function Bt(e,t){let n=e.element?.id||"?";if(Dt(`no-binding|${t.type}|${n}`))return;console.warn(`[phlex-reactive] runOps on #${n} found no on_client binding matching a "${t.type}" event — nothing ran`)}function ca(e){if(!e)return[];let t=[],n=/<turbo-stream\b([^>]*)>/g,r;while((r=n.exec(e))!==null){let o=r[1],i=o.match(/\baction="([^"]*)"/)?.[1]??"?",a=o.match(/\btarget="([^"]*)"/)?.[1];t.push(a?`${i} → #${a}`:i)}return t}function Jt(e,t){let{action:n,status:r,ms:o}=t,i=e.element?.id,s=`reactive ${i?`#${i} `:""}${n} → ${r??"—"} (${Math.round(o)}ms)`;if(console.groupCollapsed(s),console.log(`params: [${t.paramNames.join(", ")}] + collected: [${t.fieldNames.join(", ")}]`),console.log(`encoding: ${t.encoding}`),t.streams.length)console.log(`streams: ${t.streams.join(" ")}`);console.log(`token: ${t.tokenRefreshed?"refreshed ✓":"unchanged"}`),console.groupEnd()}function ce(e,t,n){e.streams=ca(t),e.tokenRefreshed=n!=null}var ue=new WeakMap;function Ut(e,t,n,r){let o=n&&typeof n==="object"?fa(n):n;return o?Gr(t,o,r,!1):[]}function Ht(e,t,n,r){if(!n)return null;let o=Gr(t,n,r,!0);return o.length?o:null}function Gr(e,t,n,r){let o=[];for(let i of Kr(e,t,n)){if(t.add_class){let a=t.add_class.filter((s)=>!i.classList.contains(s));if(i.classList.add(...a),a.length)o.push(()=>i.classList.remove(...a))}if(t.remove_class){let a=t.remove_class.filter((s)=>i.classList.contains(s));if(i.classList.remove(...a),a.length)o.push(()=>i.classList.add(...a))}if(t.toggle_class)t.toggle_class.forEach((a)=>i.classList.toggle(a)),o.push(()=>t.toggle_class.forEach((a)=>i.classList.toggle(a)));if(t.hide&&!i.hidden)i.hidden=!0,o.push(()=>i.hidden=!1);if(t.show&&i.hidden)i.hidden=!1,o.push(()=>i.hidden=!0)}if(n&&(t.disable||t.text!=null))o.push(ua(t,n));if(r&&t.checked==="keep"&&n&&"checked"in n){let i=n.checked;o.push(()=>n.checked=!i)}return o}function Kr(e,t,n){if(t.to==null)return n?[n]:[];let r=e.opTargets({to:t.to});if(r.length===0)e.diagnose("busy/optimistic hint",{to:t.to});return r}function ua(e,t){let n=ue.get(t);if(n)n.count++;else ue.set(t,{count:1,disabled:t.disabled,html:t.innerHTML,hadText:e.text!=null,swappedTo:e.text});if(e.disable)t.disabled=!0;if(e.text!=null)t.innerHTML=e.text;return()=>la(t,e)}function la(e,t){let n=ue.get(e);if(!n)return;if(--n.count>0)return;if(ue.delete(e),!e.isConnected)return;if(t.disable)e.disabled=n.disabled;if(n.hadText&&e.innerHTML===n.swappedTo)e.innerHTML=n.html}function fa(e){if(!e||typeof e!=="object")return null;let{class:t,...n}=e;return t==null?e:{...n,add_class:t}}function zt(e,t,n,r){if(!n?.hide)return null;let o=Kr(t,n,r);if(!o.length)return null;return()=>{let i=o.filter((a)=>a.isConnected&&!a.hidden);if(!i.length)return;console.warn("[phlex-reactive] optimistic: { hide: true } was undone by the reply's re-render — "+"the element is visible again. For an instant delete, return reply.remove so the server removes it; otherwise the hide only flashes.",i)}}var de;function Yt(e){de=e}var _=new Map;function Zr(e,t){let n=!_.has(e);if(_.set(e,t),n)de.enter()}function pe(e){if(_.delete(e))de.exit()}var Vr=!1;function Vt(e){Qr();let t=e.getAttribute("target");if(!t)return;if(e.getAttribute("data-reactive-defer-via")==="stream"){ba(t,e);return}let n=e.getAttribute("data-reactive-defer-token");if(!n)return;U(t,n)}function Qr(){if(Vr||typeof document>"u"||!document.addEventListener)return;Vr=!0,document.addEventListener("turbo:before-stream-render",ya,!0),document.addEventListener("turbo:before-stream-render",da)}function da(e){let t=e.target?.getAttribute?.("target");if(!t?.startsWith("reactive-defer-src-"))return;let n=t.slice(19);if(_.get(n)?.via==="stream")pe(n)}function U(e,t){let n=document.getElementById(e);if(!n){console.warn(`[phlex-reactive] reactive:defer target #${e} is not on the page — skipped`);return}Zt(e),ro(n);let r={via:"fetch",abort:new AbortController,timedOut:!1};return Zr(e,r),va(e,r,t)}function pa(e,t){if(typeof e!=="string"){let n={headers:{Accept:"text/vnd.turbo-stream.html"},credentials:"same-origin",signal:t};if(e.fallback)n.cache="no-store";return[e.src,n]}return[wa(),{method:"POST",headers:{Accept:"text/vnd.turbo-stream.html","Content-Type":"application/json","X-CSRF-Token":Sa()},body:JSON.stringify({token:e}),credentials:"same-origin",signal:t}]}function eo(e){let t=e.getAttribute?.("data-reactive-defer-src");if(!t)return;if(to(t))return{src:t};return console.error(ma(t)),ha(t)||ga(e)}function ma(e){return`[phlex-reactive] refused data-reactive-defer-src="${e}" — it is not under this app's fragment path `+`(${Xt()}). If you changed Phlex::Reactive.fragment_path, add `+'<meta name="phlex-reactive-fragment-path" content="…your path…"> to the layout <head>.'}function ha(e){let t;try{t=new URL(e,window.location.href)}catch{return}let n=t.pathname.split("/").pop(),r=`${Xt()}/${n}${t.search}`;if(/^[\w-]+$/.test(n)&&to(r))return{src:r,fallback:!0}}function ga(e){Zt(e.id),Qt(e),e.setAttribute("data-reactive-error","defer"),e.dispatchEvent(new CustomEvent("reactive:error",{bubbles:!0,composed:!0,detail:{kind:"defer",target:e.id,reason:"refused-url"}}))}function to(e){try{let t=new URL(window.location.href),n=new URL(e,t);return n.origin===t.origin&&n.pathname.startsWith(`${Xt()}/`)}catch{return!1}}function Xt(){return document.head?.querySelector?.('meta[name="phlex-reactive-fragment-path"]')?.content||"/reactive/fragment"}function ba(e,t){let n=document.getElementById(e);if(!n){console.warn(`[phlex-reactive] reactive:defer target #${e} is not on the page — skipped`);return}let r=t.getAttribute("data-reactive-defer-src");if(!r)return;if(!globalThis.customElements?.get?.("pgbus-stream-source")){let i=t.getAttribute("data-reactive-defer-token");if(i){U(e,i);return}console.error("[phlex-reactive] reactive:defer via=stream but <pgbus-stream-source> is not registered "+"and no fallback token was provided — is the pgbus client loaded on this page?");return}Zt(e),ro(n);let o=document.createElement("pgbus-stream-source");o.id=no(e),o.setAttribute("src",r),o.setAttribute("since-id",t.getAttribute("data-reactive-defer-since-id")??"0"),o.setAttribute("hidden",""),document.body.appendChild(o),Zr(e,{via:"stream"})}function no(e){return`reactive-defer-src-${e}`}async function va(e,t,n){let r=setTimeout(()=>{t.timedOut=!0,t.abort.abort()},Ea()),o;try{de.count("defer"),o=await fetch(...pa(n,t.abort.signal))}catch(s){if(clearTimeout(r),_.get(e)!==t)return;console.error("[phlex-reactive] deferred render failed",s),J(e,n);return}if(_.get(e)!==t){clearTimeout(r);return}if(o.redirected){clearTimeout(r),console.error(`[phlex-reactive] deferred render failed: redirected to ${o.url??"another URL"}`),J(e,n,o.status);return}if(o.status===204){clearTimeout(r),Xr(e);return}if(!o.ok){clearTimeout(r),console.error(`[phlex-reactive] deferred render failed: HTTP ${o.status}`),J(e,n,o.status);return}let i=o.headers?.get?.("Content-Type")||"";if(!i.includes("turbo-stream")){clearTimeout(r),console.error(`[phlex-reactive] deferred render failed: expected a turbo-stream, got "${i}"`),J(e,n,o.status);return}let a;try{a=await o.text()}catch(s){if(clearTimeout(r),_.get(e)!==t)return;console.error("[phlex-reactive] deferred render failed reading the body",s),J(e,n);return}if(clearTimeout(r),_.get(e)!==t)return;Xr(e),Aa(a)}var Kt=null,ya=(e)=>Kt?.push(e);function Aa(e){let t=Kt=[];try{window.Turbo.renderStreamMessage(e)}finally{Kt=null}for(let n of t){if(n.defaultPrevented)continue;let r=n.detail,o=r.render;r.render=()=>{},new Promise((i)=>i(o(r.newStream))).catch(console.error)}}function Zt(e){let t=_.get(e);if(!t)return;if(pe(e),t.via==="fetch")t.abort.abort();else document.getElementById(no(e))?.remove?.()}function ro(e){e.setAttribute("data-reactive-defer-pending","true"),e.setAttribute("aria-busy","true")}function Qt(e){e.removeAttribute("data-reactive-defer-pending"),e.removeAttribute("aria-busy")}function Xr(e){pe(e);let t=document.getElementById(e);if(!t)return;Qt(t),t.removeAttribute("data-reactive-error")}function J(e,t,n){pe(e);let r=document.getElementById(e);if(!r)return;Qt(r),r.setAttribute("data-reactive-error","defer");let o=()=>{let i=document.getElementById(e);if(!i){console.warn("[phlex-reactive] defer retry() ignored — the target left the DOM");return}i.removeAttribute("data-reactive-error"),U(e,t)};r.dispatchEvent(new CustomEvent("reactive:error",{bubbles:!0,composed:!0,detail:{kind:"defer",target:e,status:n,retry:o}}))}function wa(){return document.querySelector('meta[name="phlex-reactive-defer-path"]')?.content||"/reactive/defer"}function Sa(){return document.querySelector('meta[name="csrf-token"]')?.content??""}function Ea(){let e=document.querySelector('meta[name="phlex-reactive-timeout"]')?.content,t=Number(e);return Number.isFinite(t)&&t>0?t:30000}var oo="__materialize",fe=new WeakMap;function le(e){if(e.getAttribute?.("data-reactive-lazy-visible")!=null)return"visible";if(e.getAttribute?.("data-reactive-lazy-on"))return"event";return null}function en(e,t,n){Qr();let r=e.element,o=!1,i=!1,a=null,s=null,c,u,l=()=>me(e),f=(d)=>{if(le(r)==="visible"){if(!a)b()}else if(d){let y=r.getAttribute("data-reactive-lazy-on");if(s===y)return;p(),r.addEventListener?.(y,l),s=y}},p=()=>{if(a?.disconnect(),a=null,s)r.removeEventListener?.(s,l);s=null},b=()=>{if(typeof IntersectionObserver>"u")return queueMicrotask(l);let d=r.getAttribute("data-reactive-lazy-visible")||"0px";a=new IntersectionObserver((y)=>{if(y.some((A)=>A.isIntersecting))l()},{rootMargin:d}),a.observe(r)},g=()=>{let d=le(r)!==null,y=o;if(o=d,!d)return p();if(i)return;if(t.forgetToken(),!y)return l();f(!0)};if(fe.set(e,{load(){if(i)return;let d=eo(r);if(!d&&r.getAttribute("data-reactive-defer-src")!=null)return;if(d&&_a(r,t))return;let y=d?U(r.id,d):t.proceed(r,oo,"{}");if(!y)return;i=!0,p();let A=()=>{i=!1};return y.then(A,A),y},off(){if(c)r.removeEventListener?.("turbo:morph-element",c);if(u)r.removeEventListener?.("turbo:morph-element",u);p()}}),(r.getAttribute?.("data-reactive-defer-token")||r.getAttribute?.("data-reactive-defer-src"))&&le(r)===null)Gt(r),c=(d)=>d.target===r&&Gt(r),r.addEventListener?.("turbo:morph-element",c);if(r.getAttribute?.("data-reactive-token-value")==null&&r.getAttribute?.("data-reactive-defer-src")==null)return;if(u=(d)=>{if(d.target!==r)return;if(!c)Gt(r);g()},r.addEventListener?.("turbo:morph-element",u),n)return g();if(o=le(r)!==null,o)f(!1)}function tn(e){let t=fe.get(e);fe.delete(e),t?.off()}function me(e){return fe.get(e)?.load()}function _a(e,t){return t.emit("reactive:before-dispatch",{action:oo,params:{},element:e},{cancelable:!0}).defaultPrevented}function Gt(e){if(!e?.id)return;if(e.getAttribute?.("data-reactive-defer-pending")!=="true")return;let t=e.getAttribute?.("data-reactive-defer-token")||eo(e);if(t)U(e.id,t)}var nn=new WeakMap,ge=new WeakMap,m=null,L,so;function an(e,t){let n=e.element;ge.set(n,t),go();let r=(i)=>ka(i,t),o=(i)=>Fa(i,t);n.addEventListener("pointerdown",r),n.addEventListener("keydown",o),nn.set(e,()=>{n.removeEventListener("pointerdown",r),n.removeEventListener("keydown",o)})}function cn(e){if(nn.get(e)?.(),nn.delete(e),ge.delete(e.element),m&&be(m.origin)===e.element)he()}var w=(e,t="")=>e?.getAttribute?.(`data-reactive-sortable${t}`),H=(e,t)=>{try{return e==null?t:JSON.parse(e)}catch{return t}},be=(e)=>e?.closest?.('[data-controller~="reactive"]'),lo=(e)=>e.parentElement?.closest("[data-reactive-sortable],[data-reactive-sortable-source]"),T=(e)=>[...e.querySelectorAll("[data-reactive-sortable-item]")].filter((t)=>t!==m?.row&&lo(t)===e),ao=(e)=>H(w(e,"-item"),null),rn=(e)=>w(e,"-disabled")==="true",xa=(e,t,n)=>{let r=e.getBoundingClientRect();return t>=r.left&&t<=r.right&&n>=r.top&&n<=r.bottom},fo=(e)=>{let t=w(e,"-group");if(!t)return e.matches("[data-reactive-sortable]")?[e]:[];return[...document.querySelectorAll("[data-reactive-sortable]")].filter((n)=>w(n,"-group")===t&&!rn(n)&&ge.has(be(n)))};function po(e,t){let n=e?.closest?.("[data-reactive-sortable-item]"),r=n&&lo(n);if(m||!r||!t.owns(r)||rn(r)||rn(n))return;if(be(r)?.getAttribute("aria-busy")==="true")return;return{item:n,list:r}}function ka(e,t){if(e.button>0||e.isPrimary===!1)return;let n=po(e.target,t);if(!n)return;let r=w(n.list,"-handle");if(r?!n.item.contains(e.target.closest(r)):e.target.closest("input,textarea,select,[contenteditable]"))return;let{clientX:o,clientY:i}=e,a=(d)=>d.pointerId===e.pointerId,s=e.pointerType==="touch",c=!s,u=s&&setTimeout(()=>c=!0,200),l=(d)=>{if(!a(d))return;if(m)return on(d.clientX,d.clientY);if(Math.abs(d.clientX-o)<=4&&Math.abs(d.clientY-i)<=4)return;if(!c)return h();Ra(n,t,d),on(d.clientX,d.clientY)},f=(d)=>m&&d.cancelable&&d.preventDefault(),p=(d)=>{if(!a(d))return;if(h(),m)Ta(),sn()},b=(d)=>{if(d.type==="pointercancel"&&!a(d))return;if(h(),m)he()},v=[["pointermove",l],["pointerup",p],["pointercancel",b],["keydown",(d)=>d.key==="Escape"&&m&&(d.preventDefault(),b(d))],["touchmove",f,{passive:!1}]];for(let[d,y,A]of v)document.addEventListener(d,y,A);function h(){clearTimeout(u);for(let[d,y]of v)document.removeEventListener(d,y)}}function Ta(){let e=(t)=>(t.preventDefault(),t.stopPropagation());window.addEventListener("click",e,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",e,{capture:!0}))}function Ra({item:e,list:t},n,r){let o=e.getBoundingClientRect(),i=t.matches("[data-reactive-sortable-source]"),a=i?e.cloneNode(!0):e;if(i){for(let c of[a,...a.querySelectorAll("[id],[data-controller]")])c.removeAttribute("id"),c.removeAttribute("data-controller");document.body.append(a)}let s=document.createElement(e.tagName);if(s.setAttribute("data-reactive-sortable-placeholder",""),s.setAttribute("aria-hidden","true"),s.style.height=`${o.height}px`,m=mo({core:n,item:e,row:a,origin:t,source:i,placeholder:s,style:a.getAttribute("style")}),m.dx=r.clientX-o.left,m.dy=r.clientY-o.top,m.select=document.documentElement.style.userSelect,document.documentElement.style.userSelect="none",!i)e.before(s);Object.assign(a.style,{position:"fixed",left:`${o.left}px`,top:`${o.top}px`,width:`${o.width}px`,height:`${o.height}px`,margin:"0",boxSizing:"border-box",zIndex:"2147483647",pointerEvents:"none"})}function mo(e){let{row:t,origin:n,source:r}=e;return e.index=T(n).indexOf(e.item),e.target=r?null:n,t.setAttribute("data-reactive-sortable-dragging",""),z(n,!0),e}var z=(e,t)=>e?.toggleAttribute("data-reactive-sortable-active",t);function ve(e,t,n,r){if(t[n])t[n].before(r);else if(t.length)t.at(-1).after(r);else e.append(r)}function on(e,t){m.x=e,m.y=t,m.row.style.left=`${e-m.dx}px`,m.row.style.top=`${t-m.dy}px`;let n=fo(m.origin).find((r)=>xa(r,e,t));if(n)La(n,e,t);else if(m.source)un(null),m.placeholder.remove();Oa(e,t)}function un(e){if(m.target!==m.origin)z(m.target,!1);m.target=e,z(e,!0)}function La(e,t,n){un(e);let r=T(e),[o,i]=r.map((c)=>c.getBoundingClientRect()),a=i&&o.top===i.top&&o.left!==i.left,s=r.findIndex((c)=>{let u=c.getBoundingClientRect();return a?t<u.left+u.width/2:n<u.top+u.height/2});ve(e,r,s<0?r.length:s,m.placeholder)}function Oa(e,t){let n=m.target??m.origin,r=n.getBoundingClientRect(),o=n.scrollHeight>n.clientHeight;if(m.vy=o?t<r.top+40?-12:t>r.bottom-40?12:0:0,m.wy=t<40?-12:t>window.innerHeight-40?12:0,(m.vy||m.wy)&&!m.raf){let i=()=>{if(!m||!(m.vy||m.wy))return m&&(m.raf=0);if((m.target??m.origin).scrollTop+=m.vy,m.wy)window.scrollBy(0,m.wy);on(m.x,m.y),m.raf=requestAnimationFrame(i)};m.raf=requestAnimationFrame(i)}}function Fa(e,t){let n=e.key;if(m?.keyboard){if(e.target!==m.row||m.core!==t)return;let o={" ":sn,Enter:sn,Escape:he,Tab:he,ArrowUp:()=>co(-1),ArrowDown:()=>co(1),ArrowLeft:()=>uo(-1),ArrowRight:()=>uo(1)}[n];if(!o)return;if(n!=="Tab")e.preventDefault();return o()}if(n!==" "&&n!=="Enter")return;let r=po(e.target,t);if(!r||r.item!==e.target||r.list.matches("[data-reactive-sortable-source]"))return;e.preventDefault(),m=mo({core:t,keyboard:!0,item:r.item,row:r.item,origin:r.list,style:r.item.getAttribute("style")}),Ae("picked")}function co(e){let t=T(m.target),n=ye()+e;if(n>=0&&n<=t.length)ve(m.target,t,n,m.row);ho()}function uo(e){let t=fo(m.origin),n=t[t.indexOf(m.target)+e];if(n){let r=ye();un(n),ve(n,T(n),r,m.row)}ho()}function ho(){m.row.focus?.(),Ae("moved")}function ye(){let e=T(m.target),t=m.keyboard?m.row:m.placeholder;return e.filter((n)=>n.compareDocumentPosition(t)&4).length}function go(){if(!L?.isConnected)L=document.createElement("div"),L.setAttribute("aria-live","polite"),L.setAttribute("data-reactive-sortable-live",""),L.style.cssText="position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap",document.body.append(L);return L}function Ae(e){let t=m.target??m.origin,n=(H(w(t,"-messages"),{})[e]??"").replaceAll("{position}",ye()+1).replaceAll("{count}",T(t).length+1),r=go();r.textContent="",cancelAnimationFrame(so),so=requestAnimationFrame(()=>r.textContent=n)}function sn(){let e=m,{target:t,origin:n,source:r,row:o,placeholder:i}=e,a=t&&(r?i.isConnected:!0),s=a?ye():-1,c=a?ao(T(t)[s-1]):null;if(e.keyboard)Ae("dropped");if(!r&&i)i.replaceWith(o);if(vo(e),!a||t===n&&s===e.index)return;let u=t===n?"self":r?w(n,"-source"):w(n,"-name")??"list",l=H(w(t,"-from"),{})[u]??w(t),f={...H(w(t,"-params"),{}),item:ao(e.item),position:s,after:c,from:u},p=[];for(let g=t;g;g=g.parentElement)p.push(g);let b=ge.get(be(t))?.proceed(t,l,JSON.stringify(f),H(w(t,"-busy")));if(r)return;Promise.resolve(b).then((g)=>Na(g,p)||bo(e))}function Na(e,t){if(!e)return!1;let n=document.createElement("template");return n.innerHTML=e,[...n.content.querySelectorAll("turbo-stream")].some((r)=>/^(replace|update)$/.test(r.getAttribute("action"))&&Ca(r,t))}function Ca(e,t){let n=e.getAttribute("target");if(n)return t.some((o)=>o.id===n);let r=e.getAttribute("targets");try{return Boolean(r)&&t.some((o)=>o.matches(r))}catch{return!1}}function he(){let e=m;if(e.keyboard)Ae("cancelled");e.placeholder?.remove(),vo(e),bo(e)}function bo({row:e,origin:t,index:n,source:r}){if(r||!e.isConnected)return;if(ve(t,T(t).filter((o)=>o!==e),n,e),e===document.activeElement)e.focus?.()}function vo(e){let{row:t,origin:n,target:r,source:o,style:i,placeholder:a}=e;if(m=null,e.raf)cancelAnimationFrame(e.raf);if(t.removeAttribute("data-reactive-sortable-dragging"),o)t.remove();else if(!e.keyboard)i==null?t.removeAttribute("style"):t.setAttribute("style",i);if(a?.remove(),z(n,!1),z(r,!1),!e.keyboard)document.documentElement.style.userSelect=e.select??""}var O=new Map,Ao=new WeakSet;function ln(e,t){let n=e.element,r=O.get(n.id);if(!r)O.set(n.id,r={state:null,seats:null});r.root=n,r.core=t,r.removing=!1,Ma(n);let o=(a)=>a.target===n&&queueMicrotask(()=>So(r)),i=(a)=>a.target===n&&a.detail?.action==="presence_set"&&console.error(`[phlex-reactive] #${n.id}: its presence_set request failed`,a.detail);n.addEventListener("turbo:morph-element",o),n.addEventListener("reactive:error",i),r.off=()=>{n.removeEventListener("turbo:morph-element",o),n.removeEventListener("reactive:error",i)},So(r)}function fn(e){let t=e.element,n=O.get(t.id);if(!n||n.root!==t)return;n.off(),n.removing=!0,queueMicrotask(()=>{if(!n.removing)return;O.delete(t.id),t.ownerDocument.getElementById("reactive-presence-src-"+t.id)?.remove()})}function dn(e,t){if(!e?.hasAttribute?.("data-reactive-presence")){console.warn("[phlex-reactive] js.presence ran outside a reactive_presence root — ignored");return}let n=O.get(e.id);if(!n)O.set(e.id,n={root:e,state:null,seats:null});n.state={...n.state,...t},Eo(n)}function Ma(e){let t="reactive-presence-src-"+e.id,n=document.getElementById(t);if(n&&Ao.has(n))return;if(n?.remove(),!wo())setTimeout(()=>{if(!wo())console.error("[phlex-reactive] reactive_presence needs the pgbus client (<pgbus-stream-source>) on this page — "+`#${e.id} is not subscribed to its presence stream`)},5000);let r=document.createElement("pgbus-stream-source");r.id=t,r.setAttribute("src",e.getAttribute("data-reactive-presence")),r.setAttribute("presence",""),r.hidden=!0,r.addEventListener("pgbus:connected",()=>{let o=O.get(e.id);if(!o||o.removing)return;Eo(o),$a(o)}),Ao.add(r),document.body.appendChild(r)}var wo=()=>!!globalThis.customElements?.get?.("pgbus-stream-source");function $a(e){clearTimeout(e.timer),e.timer=setTimeout(()=>{let t=e.root;if(e.removing||!t.isConnected)return;let n=t.ownerDocument.getElementById("reactive-presence-src-"+t.id)?.pgbusSeat;if(n&&_o(t).has(n))return;console.warn(`[phlex-reactive] #${t.id} never appeared on its presence roster: config.streams_authorize returned no identity for this stream, or its presence_set request failed (logged above)`)},2500)}function Eo(e){let t=e.root;if(!e.core||!t.ownerDocument.getElementById("reactive-presence-src-"+t.id)?.getAttribute("connection-id"))return;e.core.proceed(t,"presence_set",JSON.stringify(e.state??{}))}function _o(e){let t=e.getAttribute("data-reactive-presence-roster");if(t!=null)return new Set(t.split(" ").filter(Boolean));return new Set([...e.querySelectorAll("[data-reactive-presence-peer]")].map((n)=>n.getAttribute("data-reactive-presence-peer")))}function So(e){let t=e.root,n=t.ownerDocument.getElementById("reactive-presence-src-"+t.id)?.pgbusSeat,r=t.querySelectorAll("[data-reactive-presence-peer],[data-reactive-presence-member]"),o=_o(t),i;for(let u of r)if(u.getAttribute("data-reactive-presence-peer")===n)i=u.getAttribute("data-reactive-presence-member");for(let u of r){let l=u.getAttribute("data-reactive-presence-peer")===n;u.toggleAttribute("data-reactive-presence-me",l),u.toggleAttribute("data-reactive-presence-same-member",!l&&i!=null&&u.getAttribute("data-reactive-presence-member")===i)}let a=e.seats;if(e.seats=o,!a)return;let s=[...o].filter((u)=>!a.has(u)),c=[...a].filter((u)=>!o.has(u));if(s.length||c.length)e.core.emit("reactive:presence",{joined:s,left:c,me:n??null})}var ko=new Map,pn=new WeakMap,Pa=0,we=new WeakMap;function mn(e,t){let n=e.element;if(!n.id&&!pn.has(n))pn.set(n,`#${++Pa}`);let r=n.id||pn.get(n),o=new Map,i=!1,a=(b)=>{clearTimeout(o.get(b)),o.delete(b)},s=(b,g,v)=>{a(b);let h=Date.parse(g.until)-Date.now();if(!(h>0))return c(b,g,v);let d=Math.ceil(h/1000);To(b,`${Math.floor(d/60)}:${String(d%60).padStart(2,"0")}`,"running"),u(g.waiting,!0),u(g.done,!1),o.set(b,setTimeout(()=>s(b,g,v),(h-1)%1000+1))},c=(b,g,v)=>{To(b,"0:00","done"),u(g.waiting,!1),u(g.done,!0);let h=ko.get(v)??new Set;if(h.has(g.until))return;ko.set(v,h.add(g.until)),b.dispatchEvent(new CustomEvent("reactive:countdown-done",{bubbles:!0,detail:{until:g.until}}))},u=(b,g)=>{let v;try{v=b&&n.querySelector(b)}catch{}if(v&&v.hidden===g)v.hidden=!g},l=()=>{if(i=!1,!we.has(e))return;let b=new Set;[...n.matches("[data-reactive-countdown]")?[n]:[],...n.querySelectorAll("[data-reactive-countdown]")].forEach((v,h)=>{if(!t.owns(v))return;let d;try{d=JSON.parse(v.getAttribute("data-reactive-countdown"))}catch{return}if(Number.isNaN(Date.parse(d?.until)))return;b.add(v),s(v,d,`${r}|${v.id||h}`)});for(let v of o.keys())if(!b.has(v))a(v)},f=()=>{if(i)return;i=!0,queueMicrotask(l)},p=()=>document.visibilityState==="visible"&&l();n.addEventListener("turbo:morph-element",f),n.addEventListener("reactive:streamed",f),document.addEventListener("visibilitychange",p),we.set(e,()=>{n.removeEventListener("turbo:morph-element",f),n.removeEventListener("reactive:streamed",f),document.removeEventListener("visibilitychange",p);for(let b of[...o.keys()])a(b)}),l()}function hn(e){we.get(e)?.(),we.delete(e)}function To(e,t,n){if(e.textContent!==t)e.textContent=t;if(e.getAttribute("data-reactive-countdown-state")!==n)e.setAttribute("data-reactive-countdown-state",n)}function Da(){let e=window.Turbo?.StreamActions;if(!e||e["reactive:visit"])return;e["reactive:visit"]=function(){let t=this.getAttribute("data-url");if(t)window.Turbo.visit(t,{action:"advance"})}}function qa(){let e=window.Turbo?.StreamActions;if(!e||e["reactive:token"])return;e["reactive:token"]=function(){let t=this.getAttribute("data-reactive-token-value"),n=this.getAttribute("target");if(!t||!n)return;let r=document.getElementById(n);if(r)r.setAttribute("data-reactive-token-value",t)}}function Wa(){let e=window.Turbo?.StreamActions;if(!e||e["reactive:js"])return;e["reactive:js"]=function(){let t=Jn(this.getAttribute("data-reactive-ops"));if(!t.length)return;let n=this.getAttribute("target"),r=this.getAttribute("data-reactive-verbose")==="true",o=n?document.getElementById(n):null;if(n&&!o){if(r)Wt(n);return}Fn(t,(i)=>kc(i,o),r?(i,a)=>qt(i,a,o):void 0)}}function ja(){let e=window.Turbo?.StreamActions;if(!e||e["reactive:defer"])return;e["reactive:defer"]=function(){Vt(this)}}var Oo=!1,Ba=null;function Ja(){if(Oo)return;if(typeof document>"u"||typeof document.addEventListener!=="function")return;Oo=!0,document.addEventListener("turbo:before-stream-render",(e)=>{tc(e),Ua(e),za(e),Ot(e)})}var xe="reactive:streamed";function Ua(e){let t=e.detail,n=t?.render,r=t?.newStream??e.target,o=r?.getAttribute?.("action"),i=/^(append|prepend|update)$/.test(o);if(typeof n!=="function"||!(i||/^(before|after|replace)$/.test(o)))return;let a=r.getAttribute("target"),s=r.getAttribute("targets"),c=new Set;for(let u of a?[document.getElementById(a)]:s?document.querySelectorAll(s):[]){let l=(i?u:u?.parentElement)?.closest?.('[data-controller~="reactive"]');if(l)c.add(l)}if(c.size===0)return;t.render=async(u)=>{await n(u);for(let l of c)if(l.isConnected)l.dispatchEvent(new Event(xe))}}function Mn(e){return e?.tagName==="DIALOG"&&typeof e.showModal==="function"}function $n(e){try{return e.matches(":modal")}catch{return!1}}function ii(e){if(!Mn(e)){if(e?.closest?.('[data-reactive-verbose="true"], [data-reactive-debug="true"]'))console.warn(`[phlex-reactive] show_modal targets a <dialog>, not <${e.localName}> — skipped`);return}if(!e.isConnected||$n(e))return;if(e.open)e.close();e.showModal()}function Ha(e){if(Mn(e)&&e.open)e.close()}function Le(e){let n=[...e?.querySelectorAll?.("dialog[data-reactive-modal]")??[]];if(e?.matches?.("dialog[data-reactive-modal]"))n.push(e);for(let r of n)if(r.open&&!$n(r))ii(r)}function za(e){let t=e.detail,n=t?.render,r=t?.newStream??e.target;if(typeof n!=="function"||!r?.querySelector?.("template")?.content?.querySelector?.("dialog"))return;t.render=async(o)=>{await n(o),Le(document)}}var Fo=!1;function Ga(){if(Fo)return;if(typeof document>"u"||typeof document.addEventListener!=="function")return;Fo=!0,document.addEventListener("turbo:morph-element",(t)=>{if(t.target?.matches?.('[data-controller~="reactive"]'))Le(t.target)}),document.addEventListener("turbo:morph",()=>Le(document));let e=new WeakSet;document.addEventListener("turbo:before-morph-element",(t)=>{let n=t.target,r=t.detail?.newElement;if(!Mn(n)||!r)return;if(r.hasAttribute?.("open"))e.delete(n);else e.add(n)}),document.addEventListener("turbo:before-morph-attribute",(t)=>{let{target:n,detail:r}=t;if(r?.attributeName!=="open"||r.mutationType!=="remove")return;if(!e.has(n)||!n.open||!$n(n))return;e.delete(n),t.preventDefault(),n.close()})}var Rn=new WeakMap;function si(e,t,n,r){let o=Rn.get(e)??new Map;Rn.set(e,o);let i=(a,s)=>{o.delete(a),o.set(a,s)};if(t.endsWith("_class"))for(let a of n.classes??[])i(`.${a}`,e.classList.contains(a));else if(t.endsWith("_attr"))Si(n.name)||i(n.name,e.getAttribute(n.name));else if(t==="show"||t==="hide"||t==="toggle"){if(i("hidden",e.getAttribute("hidden")),n.expanded!=null)for(let a of r({...n,to:n.expanded}))si(a,"set_attr",{name:"aria-expanded"})}}var No=!1;function Ka(){if(No)return;if(typeof document>"u"||typeof document.addEventListener!=="function")return;No=!0,document.addEventListener("turbo:morph-element",(e)=>{let t=e.target;for(let[n,r]of Rn.get(t)??[])if(n[0]===".")t.classList.toggle(n.slice(1),r);else if(r==null)t.removeAttribute(n);else if(t.getAttribute(n)!==r)t.setAttribute(n,r)})}var ai="data-reactive-image-fallback",G="data-reactive-image-state",Ln="data-reactive-image-hidden",gn=null,On="data-reactive-wrap-hidden";function ci(e){if(e.hasAttribute("hidden"))return;e.setAttribute("hidden",""),e.setAttribute(On,"")}function ui(e){if(!e.hasAttribute(On))return;e.removeAttribute("hidden"),e.removeAttribute(On)}function K(e){if(e?.localName!=="img")return null;let t=e.getAttribute(ai);if(t==null)return null;try{return JSON.parse(t)||{}}catch{return{}}}var li=(e)=>e.getAttribute("src")||e.getAttribute("srcset");function Pn(e,t){if(typeof t!=="string"||!t)return null;try{return e.closest('[data-controller~="reactive"]')?.querySelector(t)??null}catch{return null}}function fi(e,t){let n=Pn(e,t.alt);return n&&!n.contains(e)?n:null}function Oe(e,t,n){if(n==="error"){if(t.hide&&!e.hasAttribute("hidden"))e.setAttribute("hidden",""),e.setAttribute(Ln,"");if(t.wrap){let o=Pn(e,t.wrap);if(o)ci(o);else console.warn(`[phlex-reactive] reactive_image_fallback wrap: ${JSON.stringify(t.wrap)} is not in the root — skipped`)}let r=fi(e,t);if(r)r.textContent=e.getAttribute("alt")??"",r.hidden=!1}else Ce(e,t);e.setAttribute(G,n)}function Ce(e,t=K(e)){if(!t||e.getAttribute(G)==null)return;if(e.getAttribute(G)==="error"){if(e.hasAttribute(Ln))e.removeAttribute("hidden");let n=Pn(e,t.wrap);if(n)ui(n);let r=fi(e,t);if(r)r.hidden=!0}e.removeAttribute(G),e.removeAttribute(Ln)}function Co(e){let t=e.target,n=K(t);if(!n)return;if(e.type==="load")Oe(t,n,"loaded");else if(li(t))Oe(t,n,"error");else Ce(t,n)}function Ya(){if(gn)return;if(typeof document>"u"||typeof document.addEventListener!=="function")return;let e=new WeakMap;gn={error:Co,load:Co,"turbo:before-morph-element":(t)=>{let n=t.target,r=t.detail?.newElement,o=n?.getAttribute?.(G);if(o==null||!r||!K(n))return;let i=(a)=>n.getAttribute(a)===r.getAttribute?.(a);if(i("src")&&i("srcset"))e.set(n,o)},"turbo:morph-element":(t)=>{let n=t.target,r=e.get(n);if(r===void 0)return;e.delete(n),queueMicrotask(()=>{let o=K(n);if(o)Oe(n,o,r)})}};for(let[t,n]of Object.entries(gn))document.addEventListener(t,n,!0);for(let t of document.querySelectorAll?.(`img[${ai}]`)??[]){if(!t.complete||!li(t))continue;let n=`${t.getAttribute("src")} ${t.getAttribute("srcset")}`,r=(o)=>`${t.getAttribute("src")} ${t.getAttribute("srcset")}`===n&&Oe(t,K(t)??{},o);if(t.naturalWidth>0)r("loaded");else if(typeof t.decode==="function")t.decode().then(()=>r("loaded"),()=>r("error"));else r("error")}}function Yc(e){Ba=e}var Se,bn=null,Mo="[data-reactive-editable][contenteditable=plaintext-only]";function di(){if(Se===void 0)try{let e=document.createElement("div");e.contentEditable="plaintext-only",Se=e.contentEditable==="plaintext-only"}catch{Se=!1}return Se}function ke(e){if(e.matches?.(Mo))e.setAttribute("contenteditable","true");e.querySelectorAll?.(Mo).forEach(ke)}function Va(){if(bn||typeof document>"u"||typeof document.createElement!=="function")return;if(di())return;ke(document),bn=new MutationObserver((e)=>{for(let t of e)if(t.type==="attributes")ke(t.target);else t.addedNodes.forEach(ke)}),bn.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["contenteditable","data-reactive-editable"]})}var $o=!1;function Po(e){return e===document.activeElement&&(e.localName==="input"||e.localName==="textarea"||e.hasAttribute("data-reactive-editable"))&&!e.hasAttribute("data-reactive-morph-value")&&!!e.closest('[data-controller~="reactive"]')}function Xa(){if($o)return;if(typeof document>"u"||typeof document.addEventListener!=="function")return;$o=!0,document.addEventListener("turbo:before-morph-element",(e)=>{let t=e.target,n=e.detail?.newElement;if(!n||e.defaultPrevented)return;let r=Po(t);if(r)Qa(t,n);if(t.hasAttribute?.("data-reactive-editable")){if(Fe.set(t,F(n)),!r)return;for(let{name:i}of[...t.attributes])if(!n.hasAttribute(i)&&i!=="contenteditable"&&i!==E)t.removeAttribute(i);for(let{name:i,value:a}of n.attributes)if(i!=="contenteditable"&&t.getAttribute(i)!==a)t.setAttribute(i,a);return e.preventDefault()}if(t.localName!=="input"||!r)return;let o=n.getAttribute("value");if(o==null)t.removeAttribute("value");else if(t.getAttribute("value")!==o)t.setAttribute("value",o)}),document.addEventListener("focusin",(e)=>jn(e.target)),document.addEventListener("turbo:before-morph-attribute",(e)=>{let t=e.detail?.attributeName;if((t==="value"||t===E)&&Po(e.target))e.preventDefault()}),document.addEventListener("input",(e)=>{let t=e.target;if(t?.hasAttribute?.(E)&&Dn(t)===qn(t))t.removeAttribute(E)})}var E="data-reactive-held",In='[data-controller~="reactive"]',Te=null,P=new Map;function Dn(e){return e.hasAttribute("data-reactive-editable")?F(e):e.value}function qn(e){return e.hasAttribute("data-reactive-editable")?Bn(e):e.defaultValue}function Za(e){if(e.hasAttribute("data-reactive-editable"))return F(e);return e.localName==="textarea"?e.textContent:e.getAttribute("value")??""}function Qa(e,t){let n=e.getAttribute("name");if(!n||/^(checkbox|radio)$/.test(e.type)||P.has(e.closest(In)))return;let r=Za(t);if(r===Dn(e))return e.removeAttribute(E);if(r===qn(e))return;e.setAttribute(E,""),e.dispatchEvent(new CustomEvent("reactive:held",{bubbles:!0,detail:{name:n,theirs:r}}))}function ec(e){let t=[];for(let n of e.querySelectorAll(`[${E}]`)){if(n.closest(In)!==e)continue;let r=n.getAttribute("name");if(Dn(n)===qn(n))n.removeAttribute(E);else if(r&&!t.includes(r))t.push(r)}if(t.length===0)return null;return JSON.stringify(t).replace(/[\u007f-]/g,(n)=>`\\u${n.charCodeAt(0).toString(16).padStart(4,"0")}`)}function pi(e){for(let t of e.querySelectorAll(`[${E}]`))if(t.closest(In)===e)t.removeAttribute(E)}function Io(e,t,n=!0){let r={root:e,streams:0,release:n},o=Te;Te=r;try{window.Turbo.renderStreamMessage(t)}finally{Te=o}if(n&&r.streams===0)pi(e)}function tc(e){let t=Te,n=e.detail,r=n?.render;if(!t||typeof r!=="function")return;t.streams++,n.render=async(o)=>{P.set(t.root,(P.get(t.root)||0)+1);try{return await r(o)}finally{let i=P.get(t.root)-1;if(i)P.set(t.root,i);else P.delete(t.root);if(t.release)pi(t.root)}}}var Do="__materialize",qo=!1;function nc(){if(qo)return;if(typeof window>"u"||typeof document>"u")return;if(typeof window.addEventListener!=="function")return;qo=!0;let e=()=>{let t=document.documentElement;if(typeof t?.toggleAttribute!=="function")return;t.toggleAttribute("data-reactive-offline",globalThis.navigator?.onLine===!1)};e(),window.addEventListener("online",e),window.addEventListener("offline",e)}function Wn(){if(typeof document>"u")return;if(document.querySelector?.('meta[name="phlex-reactive-env"]')?.content==="development")Pt()}var mi="data-reactive-active",x=0;function hi(){if(x++,x===1)bi("reactive:busy")}function gi(){if(x===0)return;if(x--,x===0)bi("reactive:idle")}function Vc(){return x}function Xc(){x=0,(typeof document<"u"?document.documentElement:null)?.removeAttribute?.(mi)}function bi(e){if(typeof document>"u")return;let t=document.documentElement;if(typeof t?.toggleAttribute==="function")t.toggleAttribute(mi,x>0);if(typeof document.dispatchEvent==="function"&&typeof CustomEvent==="function")document.dispatchEvent(new CustomEvent(e,{detail:{count:x}}))}var vi="data-reactive-requests";function yi(e){if(typeof document>"u")return;let t=document.documentElement;if(typeof t?.setAttribute!=="function"||!rc(t))return;let n=oc(t);n[e]=(Number(n[e])||0)+1,t.setAttribute(vi,JSON.stringify(n))}function rc(e){return e.hasAttribute?.("data-reactive-verbose")||!!document.querySelector?.('[data-reactive-verbose="true"]')}function oc(e){try{let t=JSON.parse(e.getAttribute(vi));if(t&&typeof t==="object")return{action:0,defer:0,...t}}catch{}return{action:0,defer:0}}function Wo(){Da(),qa(),Wa(),ja(),Ja(),Xa(),Ga(),Ka(),Ya(),Va(),nc(),Wn()}function ic(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var Ai=Symbol.for("phlex-reactive.core");if(globalThis[Ai])console.error("[phlex-reactive] the client was loaded twice. Import EITHER phlex/reactive/reactive_controller (the default, "+"everything in one file) OR phlex/reactive/core (features on demand), not both — each carries its own state.");globalThis[Ai]=!0;var wi=!1;function sc(){if(wi)return;if(typeof document>"u")return;let e=document.querySelectorAll('[data-controller~="reactive"]');if(!e||e.length===0)return;console.warn("[phlex-reactive] found "+e.length+' element(s) with data-controller="reactive" '+"but the reactive controller never connected. It is loaded but not registered — "+'add `application.register("reactive", ReactiveController)` (importmap) or import it into app/javascript/controllers/ for lazyLoadControllersFrom apps. See the README.')}if(typeof window<"u"&&typeof document<"u"){let e=()=>setTimeout(sc,0);if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",e,{once:!0});else e()}var ac=new Set(["href","src","srcset","srcdoc","action","formaction","xlink:href","style"]);function Si(e){let t=String(e).toLowerCase();return t.startsWith("on")||ac.has(t)}var vn=new WeakMap;function cc(e,t,n){let[r,o,i]=t;vn.get(e)?.(),e.classList.add(r,o),n();let a=!1,s=requestAnimationFrame(()=>{if(a)return;e.classList.remove(o),e.classList.add(i)}),c=(l)=>{if(a||l&&l.target!==e)return;a=!0,vn.delete(e),clearTimeout(u),globalThis.cancelAnimationFrame?.(s),e.removeEventListener("animationend",c),e.removeEventListener("transitionend",c),e.classList.remove(r,o,i)};vn.set(e,c),e.addEventListener("animationend",c),e.addEventListener("transitionend",c);let u=setTimeout(c,uc(e))}function uc(e){let t=0;try{let n=getComputedStyle(e);for(let r of["transition","animation"]){let[o,i]=["Duration","Delay"].map((s)=>String(n[r+s]).split(",").map((c)=>parseFloat(c)*(/ms/.test(c)?1:1000)||0)),a=String(n[r+"IterationCount"]).split(",").map((s)=>/inf/.test(s)?1/0:parseFloat(s)>=0?parseFloat(s):1);for(let s=0;s<o.length||s<i.length||s<a.length;s++){let c=o[s%o.length]*a[s%a.length]||0;t=Math.max(t,c+i[s%i.length])}}}catch{}return Math.min(Math.max(t+50,350),5000)}var lc=":is(lexxy-editor, trix-editor, [contenteditable=''], [contenteditable=true], [contenteditable=plaintext-only])",fc=new Set(["lexxy-editor","trix-editor"]);function F(e){let t="",n=!1,r=(i)=>{if(n&&t&&!t.endsWith(`
|
|
2
2
|
`))t+=`
|
|
3
3
|
`;n=!1,t+=i},o=(i)=>{for(let a of i.childNodes){let s=/^(div|p|li)$/.test(a.localName);if(s)n=!0;if(a.nodeType===3)a.data&&r(a.data);else if(a.localName==="br")r(`
|
|
4
4
|
`);else if(a.nodeType===1)o(a);if(s)n=!0}};return o(e),t=t.replace(/\r\n?/g,`
|
|
5
|
-
`).replace(/\n$/,""),e.getAttribute("data-reactive-editable")==="multi"?t:t.replace(/\n/g," ")}var
|
|
6
|
-
`):e.value}function pc(e,t,n){if(n?.transition)rc(e,n.transition,()=>e.hidden=t);else e.hidden=t}function vn(e,t,n,r){if(pc(e,t,n),n?.expanded==null||typeof r!=="function")return;for(let o of r({...n,to:n.expanded}))o.setAttribute?.("aria-expanded",String(!t))}function yn(e){if(!gi(e))return!0;return console.warn(`[phlex-reactive] refused client attr op on ${JSON.stringify(e)} — skipped`),!1}function Ai(e,t){if(e?.localName!=="img")return console.warn(`[phlex-reactive] copy_media targets an <img>, not <${e?.localName}> — skipped`),null;let n=t?.localName==="img"?t:null,r=n?.getAttribute("src"),o=!1;for(let a of["srcset","src"]){let s=r?n.getAttribute(a):null;if(s==null){if(e.hasAttribute(a))o=e.removeAttribute(a)??!0}else if(e.getAttribute(a)!==s)o=e.setAttribute(a,s)??!0}if(o)Fe(e);let i=n?.getAttribute("alt")??"";if(e.getAttribute("alt")!==i)e.setAttribute("alt",i);return n?i:!1}var mc='a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';function hc(e){return e.querySelectorAll?.(mc)?.[0]??null}function qn(e){if(Array.isArray(e))return e;if(typeof e!=="string")return[];try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}var Do=Object.freeze({backspace:"Backspace",delete:"Delete",enter:"Enter",tab:"Tab",esc:"Escape",space:" ",up:"ArrowUp",down:"ArrowDown",left:"ArrowLeft",right:"ArrowRight",home:"Home",end:"End",page_up:"PageUp",page_down:"PageDown"}),qo=Object.freeze(["meta","ctrl","alt","shift"]);function Ne(e,t,n){let r=e.split("+");for(let a of qo)if(r.includes(a)!==Boolean(t[`${a}Key`]))return!1;let o=r.find((a)=>!qo.includes(a));if(o===void 0||typeof t.key!=="string")return!0;let i=n&&Object.hasOwn(n,o)?n[o]:Object.hasOwn(Do,o)?Do[o]:/^[a-z0-9]$/.test(o)?o:null;return typeof i==="string"&&i.toLowerCase()===t.key.toLowerCase()}var gc=(e)=>e&&typeof e==="object"?e.keys:String(e);function An(e,t,n){let r=t.target;if(e?.inEditable!==!0&&(r?.isContentEditable||/^(input|textarea|select)$/.test(r?.localName)))return!1;let o=/[Mm]ac|iP/.test(navigator.userAgentData?.platform??navigator.platform)?"meta":"ctrl";return Ne(gc(e).replace(/^mod\+/,`${o}+`),t,n)}function bc(e){if(Array.isArray(e))return[{ops:e,legacy:!0}];if(e&&typeof e==="object")return[e];if(typeof e!=="string")return[];let t=e.trim();if(t.startsWith("["))return[{ops:qn(t),legacy:!0}];let n=[];for(let r of t.split(" ")){if(r==="")continue;let o=null;try{o=JSON.parse(r)}catch{o=null}if(o&&typeof o==="object"&&!Array.isArray(o))n.push(o);else console.warn(`[phlex-reactive] malformed on_client binding record ${JSON.stringify(r)} — skipped`)}return n}function Wo(e,t,n){if(e.legacy)return!0;let r=e.on;if(typeof r!=="string"||r==="")return!1;let o=r.indexOf(".");if(t.type!==(o<0?r:r.slice(0,o)))return!1;if(Boolean(e.window)!==Wn(t.currentTarget))return!1;return o<0||n===null||Ne(r.slice(o+1),t,n)}function vc(e,t){let n=e.detail;if(n===void 0)return!0;if(n===null||typeof n!=="object"||Array.isArray(n))return!1;let r=t.detail;if(r===null||typeof r!=="object")return!1;return Object.keys(n).every((o)=>r[o]===n[o])}var jo=new WeakMap;function yc(e,t,n){if(!n.once)return!1;let r=t.currentTarget??e.element,o=jo.get(e);if(!o)o=new WeakMap,jo.set(e,o);let i=o.get(r);if(!i)i=new Set,o.set(r,i);let a=t.params?.ops,c=(r===globalThis.window?`${typeof a==="string"?a:JSON.stringify(a??null)}|`:"")+JSON.stringify(n);if(i.has(c))return!0;return i.add(c),!1}var Bo=new WeakMap;function Ac(e,t){if(e===null||typeof e!=="object")return!1;let n=e.params?.ops,r=typeof n==="string"?n:JSON.stringify(n??null),o=Bo.get(e);if(!o)o=new WeakMap,Bo.set(e,o);let i=o.get(t);if(!i)i=new Map,o.set(t,i);let a=i.get(e.currentTarget);if(!a)a=new Set,i.set(e.currentTarget,a);if(a.has(r))return!0;return a.add(r),!1}function Rn(e,t,n){for(let r of e){if(!Array.isArray(r))continue;let[o,i={}]=r;if(!Object.hasOwn(Po,o)){console.warn(`[phlex-reactive] unknown client op ${JSON.stringify(o)} — skipped`);continue}let a=t(i);if(a.length===0&&n)n(o,i);for(let s of a)if(Po[o](s,i,t),i?.keep===!0)ei(s,o,i,t)}}function wc(e,t){let n=e.to;if(t){if(n==="@root")return[t];if(typeof n!=="string"||n==="")return[];if(e.global)return[...document.querySelectorAll(n)];return[...t.querySelectorAll(n)]}if(typeof n!=="string"||n===""||n==="@root")return[];return[...document.querySelectorAll(n)]}function Sc(e){let t=e.getAttribute?.("data-reactive-persist");return Boolean(t)&&t!=="off"}function Jo(e){return["defer-token","defer-src","lazy-on","lazy-visible"].some((t)=>e.getAttribute?.(`data-reactive-${t}`)!=null)}function Ec(e){return(e.getAttribute?.("data-action")??"").includes("reactive#trackDirty")||e.getAttribute?.("data-reactive-clipboard")!=null||e.querySelector?.('[data-action*="reactive#trackDirty"],[data-reactive-clipboard]')!=null}function _c(e){return["show-targets","group-targets","on-complete","filter-input","tags-field"].some((t)=>e.getAttribute?.(`data-reactive-${t}`)!=null)||(e.querySelectorAll?.("[data-reactive-show-field], [data-reactive-show]")??[]).length>0||e.querySelector?.("[data-reactive-nested-json], [data-reactive-nested-list], [data-reactive-confirm-when-param], [data-reactive-enable], [data-reactive-select-all], [data-reactive-count], [data-reactive-editable], [data-reactive-media]")!=null}function xc(e){return e.getAttribute?.("data-reactive-compute-inputs-param")!=null}function kc(e){return Boolean(e.matches?.("[data-reactive-sortable],[data-reactive-sortable-source]")||e.querySelector?.("[data-reactive-sortable],[data-reactive-sortable-source]"))}function Uo(e){return e.getAttribute?.("data-reactive-presence")!=null}function Tc(e){return Boolean(e.matches?.("[data-reactive-countdown]")||e.querySelector?.("[data-reactive-countdown]"))}function zc(e,t,n){}function Lc(e,t){}function Gc(e){return[]}function Kc(e){return Promise.resolve()}var Ho=new Set;function Rc(e,t,n){let r=e+t;if(Ho.has(r))return;Ho.add(r),console.error(`[phlex-reactive] the "${e}" feature module (phlex/reactive/features/${e}) is unavailable: ${t}. If you bundle or vendor the client, alias or pin phlex/reactive/features/* (README: esbuild / webpack / bun).`,n)}function Yc(){return["persist","defer","form","bindings","compute","sortable","presence","countdown","effects","hints","devtools"]}var zo=Promise.resolve();var Go={enter:ui,exit:li,count:pi,text:F,served:Dn,waiting:new WeakMap},Ko=1,wn=2,Sn=4,En=8,_n=16,Yo=32,Vo=64,Xo=128;ut(Go),Gt(Go);var X=Symbol.for("phlex-reactive.early"),Oc=1e4,Fc=1500,Wn=(e)=>e!=null&&(e===globalThis.window||e.window===e),Nc="dispatch";function xn(){return globalThis[X]??={queue:[],connected:new WeakSet},globalThis[X]}function Cc(){let e=Number(globalThis.document?.querySelector?.('meta[name="phlex-reactive-early-ttl"]')?.content);return Number.isFinite(e)&&e>0?e:Oc}function Mc(e){let t={};for(let{name:n,value:r}of Array.from(e.attributes??[])){let o=/^data-reactive-(.+)-param$/i.exec(n);if(!o)continue;let i;try{i=JSON.parse(r)}catch{i=r}t[o[1].replace(/[-_]([a-z0-9])/g,(a,s)=>s.toUpperCase())]=i}return t}function $c(e,t,n){return{[X]:!0,type:e.type,detail:e.detail,target:e.target,currentTarget:n?t.ownerDocument.defaultView:t,params:Mc(t),key:e.key,code:e.code,metaKey:e.metaKey,ctrlKey:e.ctrlKey,altKey:e.altKey,shiftKey:e.shiftKey,button:e.button,submitter:e.submitter,bubbles:e.bubbles,timeStamp:e.timeStamp,defaultPrevented:e.defaultPrevented,preventDefault(){},stopPropagation(){},stopImmediatePropagation(){}}}var Oe=new WeakMap;function Pc(e,{token:t,type:n,method:r,filter:o,win:i},a){let s=Oe.get(e);if(!s)Oe.set(e,s=new Map);let c=i?`${t} ${a}`:t;if(s.has(c))return!1;return s.set(c,{type:n,method:r,filter:o,win:i,params:a,armed:!0}),!0}function Zo(e,t,n,r){if(e?.[X])return!1;let o=Wn(e?.currentTarget),i=o?r:e?.currentTarget,a=Dc(e,i,o?`@${t}`:t),s=Oe.get(i),c=o&&JSON.stringify(e.params);for(let u of s?.values()??[]){if(!u.armed||u.method!==t||u.type!==e.type||Boolean(u.win)!==o)continue;if(o&&u.params!==c)continue;if(u.filter&&!Ne(u.filter,e,n))continue;return u.armed=!1,!0}return a}var ke=new WeakMap;function Ic(e,t,n){let r=ke.get(e);if(!r)ke.set(e,r=new Map),setTimeout(()=>ke.delete(e));let o=r.get(t)??{};r.set(t,o),o[n]=(o[n]??0)+1}function Dc(e,t,n){let r=e&&ke.get(e)?.get(t);if(!r?.[n])return!1;return r[n]-=1,!0}class wi extends Fa{static values={token:String};#h;#f=new Map;#d=new Map;#K;#w;#M;#S=0;#p=new Map;#E=new WeakMap;#t;featuresReady=zo;#Le=new Map;#Re=new Set;#Y=!1;#$=null;#Oe=new Map;#Fe=new Map;#Ne=new Map;#V=0;#P;#_=0;#o=0;connect(){if(hi=!0,xn().connected.add(this.element),this.element.id==="")console.warn("[phlex-reactive] a reactive root has no id; its next-action token can't self-match "+"and may fall back to the first token in the response → a silent HTTP 403 on the NEXT action. "+"Put id: on the SAME element as reactive_attrs — use div(**reactive_root) (emits id + token together), "+"or div(id:, **reactive_attrs). The id: must NOT be on a child. See the README.");if(this.element.getAttribute?.("data-reactive-token-value")!=null||Jo(this.element))this.#t=(e)=>{if(e.type==="focusin"?!e.target.hasAttribute?.("data-reactive-editable"):e.target!==this.element)return;if(e.type===Ee)this.#D();this.#I(!0)},this.element.addEventListener?.("turbo:morph-element",this.#t),this.element.addEventListener?.("focusin",this.#t),this.element.addEventListener?.(Ee,this.#t);this.element.querySelectorAll?.("[data-reactive-editable]").forEach(In),this.#V++,this.featuresReady=zo,this.#I(),Te(this.element),this.#Z()}#I(e){this.#n(Ko,"persist",Sc,(t)=>bt(this,t,e)),this.#n(wn,"defer",Jo,(t)=>Zt(this,t,e)),this.#n(Sn,"form",Ec,(t)=>St(this,t,e)),this.#n(En,"bindings",_c,(t)=>Pe(this,t,e)),this.#n(_n,"compute",xc,(t)=>tt(this,t,e)),this.#n(Yo,"sortable",kc,(t)=>on(this,t)),this.#n(Vo,"presence",Uo,(t)=>cn(this,t)),this.#n(Xo,"countdown",Tc,(t)=>dn(this,t))}#n(e,t,n,r){if(this.#_&e)return;try{if(!n(this.element))return}catch(o){return this.#q(t,"detect",o)}this.#_|=e;try{r(this.#e()),this.#o|=e}catch(o){this.#q(t,"connect",o)}}#X(){{let e=this.#o;this.#_=this.#o=0;let t=this.#e();if(e&Ko)this.#r("persist",()=>vt(this,t));if(e&wn)this.#r("defer",()=>Qt(this,t));if(e&Sn)this.#r("form",()=>Et(this,t));if(e&En)this.#r("bindings",()=>Ie(this,t));if(e&_n)this.#r("compute",()=>nt(this,t));if(e&Yo)this.#r("sortable",()=>sn(this,t));if(e&Vo)this.#r("presence",()=>un(this,t));if(e&Xo)this.#r("countdown",()=>pn(this,t))}}#r(e,t){try{t()}catch(n){console.error(`[phlex-reactive] the "${e}" feature module failed to disconnect`,n)}}#Ce(e){}#Me(e,t){}#$e(e){}#Pe(e,t){}#Ie(e,t,n,r){}#e(){return this.#P??={emit:(e,t,n)=>this.#s(e,t,n),reseed:()=>this.#D(),proceed:(e,t,n,r)=>this.#k(e,t,n,0,0,null,r),forgetToken:()=>{this.#h=void 0},owns:(e)=>this.#y(e),ownership:()=>this.#R(),opTargets:(e)=>this.#C(e),diagnose:(e,t)=>this.#N(e,t),applyOps:(e,t)=>Rn(e,(n)=>this.#C(t!=null&&n.to==null?{...n,to:t}:n),(n,r)=>this.#N(`client op "${n}"`,r)),listnavOptions:(e)=>this.#m(e),collectFields:()=>this.#H(),plain:si,text:F,served:Dn,copyMedia:Ai,setValue:yi,confirm:(e,t)=>Promise.resolve().then(()=>xo(e,t)).catch(()=>!1)},this.#P}#D(){if(this.#o&Sn)_t(this);if(this.#o&En)De(this);if(this.#o&_n)rt(this)}#q(e,t,n){if(Rc(e,t,n),this.#i("feature"),t==="load"&&this.element.getAttribute?.("data-reactive-defer-pending"))this.element.removeAttribute("data-reactive-defer-pending"),this.element.removeAttribute("aria-busy");this.#s("reactive:error",{kind:"feature",feature:e,phase:t,error:n})}#De(){}#Z(){if(this.element.setAttribute?.("data-reactive-connected",""),this.element.isConnected)this.element.dispatchEvent?.(new CustomEvent("reactive:connect",{bubbles:!0,composed:!0,detail:{id:this.element.id}}));this.#Q()}#x=new Set;#Q(){let{queue:e}=xn();if(e.length===0)return;let t=[];for(let o=e.length-1;o>=0;o--){let{root:i}=e[o];if(i===this.element||!i.isConnected)t.unshift(...e.splice(o,1))}let n=Cc(),r=new Map;for(let o of t){let i=r.get(o.event)??[new Set,new Set];r.set(o.event,i);let a=i[+!!o.win];if(a.has(o.el))continue;a.add(o.el);let s=o.win?Math.min(Fc,n):n,c=o.root!==this.element?"its root left the page before a controller connected":performance.now()-o.at>s?`it is older than the ${s} ms ${o.win?"window-trigger":"early-event"} TTL`:o.el.isConnected&&this.element.contains(o.el)?null:"its element left the root before the controller connected";if(c){if(this.#F())console.warn(`[phlex-reactive] dropped an early "${o.event.type}" trigger: ${c}`);continue}this.#ee(o)}}#ee({event:e,el:t,descs:n,win:r}){let o=$c(e,t,r),i=this.application?.schema?.keyMappings,a=(t.getAttribute("data-action")??"").split(/\s+/),s=r?this.element:t;for(let c of n){if(!a.includes(c.token))continue;if(c.filter&&!Ne(c.filter,e,i))continue;if(/#\w+.*:once\b/.test(c.token)){if(!Pc(s,c,r&&JSON.stringify(o.params)))continue;this.#x.add(s)}if(Ic(e,s,r?`@${c.method}`:c.method),c.method==="runOps")this.runOps(o);else this.dispatch(o)}}disconnect(){if(this.#X(),this.#se(),this.#ce(),this.#t)this.element.removeEventListener?.("turbo:morph-element",this.#t),this.element.removeEventListener?.("focusin",this.#t),this.element.removeEventListener?.(Ee,this.#t);xn().connected.delete(this.element),this.element.removeAttribute?.("data-reactive-connected");for(let e of this.#x)Oe.delete(e);this.#x.clear()}dispatch(e){let t=e.params?.shortcut;if(t!=null&&!An(t,e,this.application?.schema?.keyMappings))return;if(Zo(e,"dispatch",this.application?.schema?.keyMappings,this.element))return;let{action:n,params:r,debounce:o,throttle:i,confirm:a,confirmWhen:s,outside:c,window:u,optimistic:l}=e.params;if(!n)return;let f=e.params.busy??e.params.loading;if(c&&this.element.contains(e.target))return;let p=e.currentTarget??e.target;if((t!=null||!u)&&!this.#Ae(l,p))e.preventDefault();if(n===Va){let v=()=>{if(this.#o&wn)return me(this);if(this.tokenValue)return this.#k(p,n,"{}")};return this.#Y?this.featuresReady.then(v):v()}let b=this.#W(a,s),g=()=>this.#k(p,n,r,o,i,l,f);if(!b)return g();if(b instanceof Promise)return b.then((v)=>v?this.#g(v,p,g):g());this.#g(b,p,g)}#g(e,t,n){return Promise.resolve().then(()=>xo(e,{el:t})).catch(()=>!1).then((r)=>{if(r)n()})}#W(e,t){if(e)return e;if(!t)return null;return We(this,this.#e(),t)}#te(e){}runOps(e){let t=e.params?.ops;if(t?.shortcut!=null&&!An(t.shortcut,e,this.application?.schema?.keyMappings))return;if(Zo(e,"runOps",this.application?.schema?.keyMappings,this.element))return;if(Ac(e,this))return;let n=e.params??{},r=e.currentTarget??e.target,o=bc(n.ops),i=o.filter((s)=>Wo(s,e,null)),a=i.length<=1?i:i.filter((s)=>Wo(s,e,this.application?.schema?.keyMappings));if(a.length===0&&o.length>0){if(this.#F())Wt(this,e);return}for(let s of a){if(s.outside&&e[X])continue;if(!vc(s,e))continue;if(s.shortcut!=null&&!An(s.shortcut,e,this.application?.schema?.keyMappings))continue;if(yc(this,e,s))continue;this.#ne(s.legacy?{...n,ops:s.ops,debounce:void 0,throttle:void 0}:s,e,r,o.indexOf(s))}}#ne(e,t,n,r){let{ops:o,confirm:i,confirmWhen:a,outside:s,window:c,shortcut:u}=e;if(s&&this.element.contains(t.target))return;if(u!=null||!c)t.preventDefault();let l=this.#W(i,a),f=this.#re(e,r,n,()=>this.#ye(this.#ve(o)));if(!l)return f();if(l instanceof Promise)return l.then((p)=>p?this.#g(p,n,f):f());this.#g(l,n,f)}#re(e,t,n,r){let o=Number(e.debounce)||0,i=Number(e.throttle)||0;if(o<=0&&i<=0)return r;let a=JSON.stringify([t,e]);if(o>0)return()=>this.#j(n,a,o,r);return()=>this.#B(n,a,i,r)}recompute(e){return ot(this,this.#e(),e)}tagsAdd(e){if(e?.defaultPrevented)return;if(this.#m(e).some((t)=>t.hasAttribute?.("data-reactive-highlighted")))return;return Ge(this,this.#e(),e)}tagsPick(e){return Ke(this,this.#e(),e)}tagsRemove(e){return Ye(this,this.#e(),e)}nestedAdd(e){return Ve(this,this.#e(),e)}nestedRemove(e){return Xe(this,this.#e(),e)}syncNestedJson(e){return qe(this,this.#e(),e)}#qe(e,t){}trackDirty(){se(this,this.#e())}listnavNext(e){this.#b(e,(t,n)=>t<0?0:(t+1)%n)}listnavPrev(e){this.#b(e,(t,n)=>t<0?n-1:(t-1+n)%n)}listnavFirst(e){this.#b(e,()=>0)}listnavLast(e){this.#b(e,(t,n)=>n-1)}listnavPick(e){let t=this.#m(e),n=t.findIndex((r)=>r.hasAttribute("data-reactive-highlighted"));if(n<0)return;e.preventDefault(),t[n].click()}listnavClose(e){for(let t of this.#m(e))t.removeAttribute("data-reactive-highlighted")}#b(e,t){let n=this.#m(e);if(!n.length)return;e.preventDefault();let r=this.#oe(e),o=globalThis.document?.activeElement,i=r?n.findIndex((s)=>s===o||o!=null&&s.contains?.(o)):n.findIndex((s)=>s.hasAttribute("data-reactive-highlighted")),a=n[t(i,n.length)];if(r)a.focus?.();else{for(let s of n)s.removeAttribute("data-reactive-highlighted");a.setAttribute("data-reactive-highlighted","true")}a.scrollIntoView?.({block:"nearest"})}#oe(e){return(e?.currentTarget??e?.target??this.element).getAttribute?.("data-reactive-listnav-focus-param")==="true"}#m(e){let n=(e?.currentTarget??e?.target??this.element).getAttribute?.("data-reactive-listnav-option-param")??this.element.getAttribute("data-reactive-listnav-option-param");if(!n)return[];let r=this.#R();return Array.from(this.element.querySelectorAll(n)).filter((o)=>!o.hidden&&r(o))}#k(e,t,n,r,o,i,a){if(this.#s("reactive:before-dispatch",{action:t,params:this.#z(n),element:this.element},{cancelable:!0}).defaultPrevented)return;let c=Number(r)||0;if(c>0)return this.#ie(e,c,t,n,i,a);let u=Number(o)||0;if(u>0)return this.#ae(e,u,t,n,i,a);return this.#v(t,n,i,e,a)}#v(e,t,n,r,o){let i={inverse:null,undo:[],resurrect:null},a=this.#we(e,r,i),s=Boolean(n||o),c=(p)=>{if(!s||!p)return;let b=this.#e();if(i.inverse=Jt(this,b,n,r),i.undo.push(...Bt(this,b,o,r)),this.#L())i.resurrect=Ut(this,b,n,r)},u=!0;c(!0);let l=()=>this.#de(e,t,i,a),f=()=>this.#$?this.#$.then(l):l();return this.queue=(this.queue??Promise.resolve()).then(()=>f()),this.queue}#We(){return this.#te("hints")}#ie(e,t,n,r,o,i){this.#j(e,Nc,t,()=>this.#v(n,r,o,e,i))}#j(e,t,n,r){this.#T(e,t);let o=()=>{this.#T(e,t),r()},i=setTimeout(o,n);if(!Wn(e))e?.addEventListener?.("blur",o,{once:!0});let a=this.#f.get(e);if(!a)this.#f.set(e,a=new Map);a.set(t,{timer:i,flush:o})}#T(e,t){let n=this.#f.get(e),r=n?.get(t);if(!r)return;if(clearTimeout(r.timer),e?.removeEventListener?.("blur",r.flush),n.delete(t),n.size===0)this.#f.delete(e)}#se(){for(let[e,t]of[...this.#f])for(let n of[...t.keys()])this.#T(e,n)}#ae(e,t,n,r,o,i){return this.#B(e,n,t,()=>this.#v(n,r,o,e,i))}#B(e,t,n,r){let o=this.#d.get(e)??new Map;if(o.has(t))return;let i=setTimeout(()=>{if(o.delete(t),o.size===0)this.#d.delete(e)},n);return o.set(t,i),this.#d.set(e,o),r()}#ce(){for(let e of this.#d.values())for(let t of e.values())clearTimeout(t);this.#d.clear()}#s(e,t,{cancelable:n=!1}={}){let r=new CustomEvent(e,{bubbles:!0,composed:!0,cancelable:n,detail:t});return(this.element.isConnected?this.element:document).dispatchEvent(r),r}#a(e,t,n,r){let o=()=>{if(!this.element.isConnected){console.warn("[phlex-reactive] retry() ignored — the reactive root left the DOM");return}return this.#v(e,t)};this.#s("reactive:error",{action:e,params:n,...r,retry:o})}#i(e){if(this.element?.isConnected===!1)return;this.element?.setAttribute?.("data-reactive-error",e)}#ue(){this.element?.removeAttribute?.("data-reactive-error")}#le(){let e=document.querySelector("[data-reactive-error-flash]");if(!e?.content)return;let t=e.getAttribute("data-reactive-error-flash")||"flash",n=document.getElementById(t);if(!n)return;n.appendChild(e.content.cloneNode(!0))}#fe(){return $t()}#L(){return this.element?.getAttribute?.("data-reactive-debug")==="true"}#J(){return typeof performance<"u"&&typeof performance.now==="function"?performance.now():Date.now()}async#de(e,t,n,r){let{fields:o,files:i}=this.#H(),a=this.#z(t),s={...o,...a},c=this.#c,u=i.length>0,l=u?this.#ge(c,e,s,i):JSON.stringify({token:c,act:e,params:s}),f=this.#L()?{action:e,paramNames:Object.keys(a),fieldNames:Object.keys(o),encoding:u?"multipart":"json",status:null,streams:[],tokenRefreshed:!1,started:this.#J()}:null;await this.#fe();try{if(navigator.onLine===!1){this.#u(n.inverse),this.#i("offline"),this.#a(e,t,s,{kind:"offline"});return}let p;try{let h={Accept:"text/vnd.turbo-stream.html","X-CSRF-Token":this.#ke()};if(!u)h["Content-Type"]="application/json";let d=this.#Te();if(d)h["X-Pgbus-Connection"]=d;let y=Uo(this.element)&&document.getElementById(`reactive-presence-src-${this.element.id}`)?.getAttribute("connection-id");if(y)h["X-Reactive-Presence"]=y;let A=Ka(this.element);if(A)h["X-Reactive-Held"]=A;pi("action"),p=await fetch(this.#_e(),{method:"POST",headers:h,body:l,credentials:"same-origin",signal:AbortSignal.timeout(this.#xe())})}catch(h){if(console.error("[phlex-reactive] action error",h),this.#u(n.inverse),h?.name==="TimeoutError"||h?.name==="AbortError"){this.#i("timeout"),this.#a(e,t,s,{kind:"timeout"});return}this.#le(),this.#i("network"),this.#a(e,t,s,{kind:"network"});return}if(f)f.status=p.status;if(p.redirected){console.error("[phlex-reactive] action was redirected (auth/CSRF?) — no update applied"),this.#u(n.inverse),this.#i("redirected"),this.#a(e,t,s,{kind:"redirected",status:p.status});return}if(!p.ok){let h=await p.text();if(console.error(`[phlex-reactive] action failed: HTTP ${p.status}`,h),this.#u(n.inverse),(p.headers.get("Content-Type")||"").includes("turbo-stream")){let d=this.#U(h);if(this.#c=d??this.#c,f)ce(f,h,d);Co(this.element,h,!1)}this.#i("http"),this.#a(e,t,s,{kind:"http",status:p.status,body:h});return}let b=p.headers.get("Content-Type")||"";if(!b.includes("turbo-stream")){console.error(`[phlex-reactive] expected a turbo-stream, got "${b}" — no update applied`),this.#u(n.inverse),this.#i("content-type"),this.#a(e,t,s,{kind:"content-type",status:p.status});return}let g=await p.text(),v=this.#U(g);if(this.#c=v??this.#c,f)ce(f,g,v);if(Co(this.element,g),n.resurrect)queueMicrotask(n.resurrect);return this.#ue(),this.#s("reactive:applied",{action:e,params:s,html:g}),g}catch(p){console.error("[phlex-reactive] action error",p),this.#u(n.inverse),this.#s("reactive:error",{action:e,params:s,kind:"apply"})}finally{if(r?.(),f)jt(this,{...f,ms:this.#J()-f.started})}}get#c(){return this.#h??this.tokenValue}set#c(e){this.#h=e}tokenValueChanged(){this.#h=void 0}#U(e){let t=this.element.id;if(!t)return e.match(/data-reactive-token-value="([^"]+)"/)?.[1];let{token:n,self:r}=this.#pe(t),o=e.match(n);if(o)return o[1];let i=e.match(r);if(i)return i[1].match(/data-reactive-token-value="([^"]+)"/)?.[1];return}#pe(e){let t=this.#M;if(t&&t.id===e)return t;let n=ec(e);return this.#M={id:e,token:new RegExp(`<turbo-stream\\b[^>]*\\baction="reactive:token"[^>]*\\btarget="${n}"[^>]*\\bdata-reactive-token-value="([^"]+)"`),self:new RegExp(`<turbo-stream\\b[^>]*\\baction="(?:replace|update)"[^>]*\\btarget="${n}"[^>]*>([\\s\\S]*?)</turbo-stream>`)}}#y(e){return e.closest('[data-controller~="reactive"]')===this.element}#R(){if(this.element.querySelectorAll('[data-controller~="reactive"]').length===0)return()=>!0;return(t)=>this.#y(t)}#H(){let e={},t=[],n=this.#R(),r=[];this.element.querySelectorAll("input[name], select[name], textarea[name]").forEach((s)=>{if(!n(s))return;if(s.type==="file")for(let c of s.files??[])t.push({name:s.name,file:c,multiple:s.multiple});else r.push(s)});let o=[];this.element.querySelectorAll(`[name]${ic}`).forEach((s)=>{if(n(s))o.push(s)});let i=this.#me(r),a=this.#he(r);for(let s of r)if(i.has(s.name)){let c=e[s.name]??(e[s.name]=[]);if(s.type==="checkbox"||s.type==="radio"){if(s.checked)c.push(s.value)}else if(s.type==="hidden"){if(!a.has(s.name))c.push(s.value)}else if(s.multiple&&s.options){for(let u of s.options)if(u.selected)c.push(u.value)}else c.push(s.value)}else if(s.type==="checkbox")e[s.name]=s.checked;else if(s.type==="radio"){if(s.checked)e[s.name]=s.value}else e[s.name]=s.value;return o.forEach((s)=>{let c=s.getAttribute("name");if(!c)return;let u=s.getAttribute("data-reactive-editable")!=null?F(s):s.value??s.textContent??s.innerHTML??"",l=e[c];if(String(c).endsWith("[]")&&!ac(s))return;if(String(c).endsWith("[]")&&(l===void 0||Array.isArray(l))){(Array.isArray(l)?l:e[c]=[]).push(u);return}if(l==null||l==="")e[c]=u}),{fields:e,files:t}}#me(e){let t=new Set;for(let n of e){if(n.type==="radio")continue;if(String(n.name).endsWith("[]"))t.add(n.name)}return t}#he(e){let t=new Set;for(let n of e)if(n.type==="checkbox")t.add(n.name);return t}#ge(e,t,n,r){let o=new FormData;o.append("token",e),o.append("act",t);let i=[];for(let[s,c]of Object.entries(n))if(Array.isArray(c)&&String(s).endsWith("[]"))if(c.length===0)i.push(String(s).slice(0,-2));else{let u=`${this.#A(s)}[]`;for(let l of c)o.append(u,String(l))}else this.#O(o,this.#A(s),c);for(let s of i)o.append("empty_groups[]",s);let a=this.#be(r);for(let{name:s,file:c,multiple:u}of r){let f=u||a.has(s)?`${this.#A(s)}[]`:this.#A(s);o.append(f,c,c.name)}return o}#A(e){let t=String(e),n=t.indexOf("[");if(n===-1)return`params[${t}]`;return`params${[t.slice(0,n),...t.slice(n).match(/[^\[\]]+/g)??[]].map((o)=>`[${o}]`).join("")}`}#O(e,t,n){if(n==null)e.append(t,"");else if(Array.isArray(n))n.forEach((r,o)=>this.#O(e,`${t}[${o}]`,r));else if(typeof n==="object")for(let[r,o]of Object.entries(n))this.#O(e,`${t}[${r}]`,o);else e.append(t,String(n))}#be(e){let t=new Map;for(let{name:n}of e)t.set(n,(t.get(n)??0)+1);return new Set([...t].filter(([,n])=>n>1).map(([n])=>n))}#z(e){if(!e)return{};try{return typeof e==="string"?JSON.parse(e):e}catch{return{}}}#ve(e){return qn(e)}#ye(e){Rn(e,(t)=>this.#C(t),(t,n)=>this.#N(`client op "${t}"`,n))}#F(){return this.element?.getAttribute?.("data-reactive-verbose")==="true"||this.#L()}#N(e,t){if(!this.#F())return;qt(this,e,t)}#je(e){}#C(e){let t=e.to;if(t==="@root")return[this.element];if(typeof t!=="string"||t==="")return[];if(e.global)return[...document.querySelectorAll(t)];return[...this.element.querySelectorAll(t)].filter((n)=>this.#y(n))}#Ae(e,t){if(e?.checked!=="keep")return!1;let n=t?.type;return n==="checkbox"||n==="radio"}#u(e){if(!e)return;if(!this.element.isConnected)return;for(let t of e)t()}#we(e,t,n){this.#Se(e,t),ui();let r=!1;return()=>{if(r)return;r=!0,this.#Ee(e,t),li();for(let o of n.undo)o()}}#Se(e,t){if(this.#l(t,e,1),this.#l(this.element,e,1),this.#p.set(e,(this.#p.get(e)??0)+1),this.#S++===0)this.element.setAttribute("aria-busy","true");for(let n of this.#G(e))this.#l(n,e,1)}#Ee(e,t){this.#l(t,e,-1),this.#l(this.element,e,-1);let n=(this.#p.get(e)??1)-1;if(n<=0)this.#p.delete(e);else this.#p.set(e,n);if(--this.#S<=0)this.#S=0,this.element.removeAttribute("aria-busy");for(let r of this.#G(e))this.#l(r,e,-1)}#l(e,t,n){if(!e||typeof e.getAttribute!=="function")return;let r=this.#E.get(e)??new Map,o=(r.get(t)??0)+n;if(o<=0)r.delete(t);else r.set(t,o);if(r.size===0){this.#E.delete(e),e.removeAttribute("data-reactive-busy");return}this.#E.set(e,r),e.setAttribute("data-reactive-busy",[...r.keys()].join(" "))}#G(e){return[...this.element.querySelectorAll?.("[data-reactive-busy-on]")??[]].filter((n)=>n.getAttribute("data-reactive-busy-on")===e&&this.#y(n))}#_e(){return this.#K??=document.querySelector('meta[name="phlex-reactive-action-path"]')?.content||"/reactive/actions"}#xe(){if(this.#w!=null)return this.#w;let e=document.querySelector('meta[name="phlex-reactive-timeout"]')?.content,t=Number(e);return this.#w=Number.isFinite(t)&&t>0?t:30000}#ke(){return document.querySelector('meta[name="csrf-token"]')?.content??""}#Te(){return document.querySelector("pgbus-stream-source[connection-id]")?.getAttribute("connection-id")||document.querySelector('meta[name="pgbus-connection-id"]')?.content||null}}if(typeof window<"u")if(window.Turbo)$o();else document.addEventListener("turbo:load",$o,{once:!0});Pn();var ou=wi;export{ci as ACTIVE_ATTR,ic as EDITOR_SELECTOR,sc as EDITOR_TAGS,ta as LATENCY_KEY,di as REQUESTS_ATTR,tc as checkReactiveRegistration,pi as countReactiveRequest,ou as default,Wr as disableLatencySim,F as editableValue,qr as enableLatencySim,ui as enterReactiveActivity,ec as escapeRegExp,li as exitReactiveActivity,Kc as loadReactiveFeature,Jc as onReactiveStreamWithoutEffects,Uc as reactiveActivityCount,Yc as reactiveFeatureNames,$o as registerReactiveActions,$a as registerReactiveDefer,Pn as registerReactiveDev,Ia as registerReactiveDismiss,Ia as registerReactiveEffects,Lc as registerReactiveFeature,zc as registerReactiveFeatureLoader,Ja as registerReactiveImageFallback,Ma as registerReactiveJs,Ba as registerReactiveKeep,ja as registerReactiveModals,Ha as registerReactiveMorphFocus,Xa as registerReactiveOffline,Ua as registerReactivePlaintext,Ia as registerReactiveStreamRender,Ca as registerReactiveToken,Na as registerReactiveVisit,Hc as resetReactiveActivity,Dn as serverText,Gc as unloadedFeaturesFor};
|
|
5
|
+
`).replace(/\n$/,""),e.getAttribute("data-reactive-editable")==="multi"?t:t.replace(/\n/g," ")}var Fe=new WeakMap;function jn(e){if(e?.hasAttribute?.("data-reactive-editable")&&!Fe.has(e))Fe.set(e,F(e))}function Bn(e){return jn(e),Fe.get(e)}function dc(e){return fc.has(e.localName)?typeof e.value==="string":!0}var jo=Object.freeze({show:(e,t,n)=>An(e,!1,t,n),hide:(e,t,n)=>An(e,!0,t,n),toggle:(e,t,n)=>An(e,!e.hidden,t,n),add_class:(e,t)=>e.classList.add(...t.classes??[]),remove_class:(e,t)=>e.classList.remove(...t.classes??[]),toggle_class:(e,t)=>(t.classes??[]).forEach((n)=>e.classList.toggle(n)),set_attr:(e,t)=>{if(wn(t.name))e.setAttribute(t.name,t.value??"")},remove_attr:(e,t)=>{if(wn(t.name))e.removeAttribute(t.name)},toggle_attr:(e,t)=>{if(!wn(t.name))return;if(Array.isArray(t.values)){let[n,r]=t.values;e.setAttribute(t.name,e.getAttribute(t.name)===n?r:n)}else if(e.hasAttribute(t.name))e.removeAttribute(t.name);else e.setAttribute(t.name,"")},focus:(e)=>e.focus?.(),focus_first:(e)=>Ac(e)?.focus?.(),blur:(e)=>{let t=e.ownerDocument?.activeElement??globalThis.document?.activeElement;if(t&&(t===e||e.contains?.(t)))t.blur?.()},show_modal:(e)=>ii(e),close_dialog:(e)=>Ha(e),text:(e,t)=>{let n=String(t.value??"");if(e.textContent!==n)e.textContent=n},copy_media:(e,t,n)=>{let r=null;try{r=n({...t,to:t.from})[0]??null}catch{}ki(e,r)},check_group:(e,t)=>{let n=t.global?document.querySelectorAll('[data-controller~="reactive"]'):[e];for(let r of n)He(r,t.group,t.checked)},presence:(e,t)=>dn(e,t.state),dispatch:(e,t)=>{e.dispatchEvent(new CustomEvent(t.name,{bubbles:!0,composed:!0,detail:t.detail??{}}))},submit:(e,t,n)=>{let r=pc(e);if(!r)return;let o=null;if(t?.submitter!=null&&typeof n==="function"){if(o=n({...t,to:t.submitter})[0]??null,!(o?.form===r&&(o.type==="submit"||o.type==="image")))console.warn(`[phlex-reactive] submitter ${t.submitter} is not a submit control of the form — ignored`),o=null}o?r.requestSubmit?.(o):r.requestSubmit?.()},paste_into:(e)=>mc(e),preview_file:(e,t,n)=>hc(e,t,n),set_value:(e,t)=>xi(e,String(t.value??"")),persist_state:(e,t)=>wt(e,t.state),persist_clear:(e)=>St(e)});function pc(e){if(e?.tagName==="FORM")return e;return e?.form??e?.closest?.("form")??null}function mc(e){let t=globalThis.navigator?.clipboard;if(typeof t?.readText!=="function")return;t.readText().then((n)=>{if(!n)return;e.value=n,_i(e),e.focus?.()}).catch(()=>{})}var Y=new Map,V=null;function hc(e,t,n){if(e?.tagName!=="INPUT"||e.type!=="file")return yn(`reads an input[type=file], not <${e?.localName}>`);let r=typeof n==="function"?n({...t,to:t.into})[0]:null;if(r?.tagName!=="IMG")return yn(`paints an <img>, and ${JSON.stringify(t.into)} is ${r?`a <${r.localName}>`:"not on the page"}`);let o=[...t.valid===!0&&e.validity?.valid===!1?[]:e.files??[]],i=gc(e,t.accept),a=o.filter((l)=>typeof l?.type==="string"&&i(l)),s=a.find((l)=>l.type.startsWith("image/")),c=o.length>0&&a.length===0?"type":null;if(s&&Number.isInteger(t.max_bytes)&&s.size>t.max_bytes)c="size";let u=c==="size"?s:o[0];if(c)s=null;if(Ei(r),s){let l=URL.createObjectURL(s);Y.set(r,l),r.setAttribute("src",l),bc()}else r.removeAttribute("src");if(Ce(r),t.wrap!=null){let l=n({...t,to:t.wrap});if(l.length===0)yn(`wrap: ${JSON.stringify(t.wrap)} is not on the page`);for(let f of l)s?ui(f):ci(f)}if(t.name!=null)for(let l of n({...t,to:t.name}))l.textContent=s?s.name:"";if(c)e.dispatchEvent(new CustomEvent("reactive:file-rejected",{bubbles:!0,detail:{reason:c,file:u}}))}function gc(e,t){let n=String((t===!0?e.getAttribute("accept"):typeof t==="string"&&t)||"").toLowerCase().split(",").map((r)=>r.trim()).filter(Boolean);if(n.length===0)return(r)=>r.type.startsWith("image/");return(r)=>{let o=r.type.toLowerCase();return n.some((i)=>i[0]==="."?String(r.name).toLowerCase().endsWith(i):i.endsWith("/*")?o.startsWith(i.slice(0,-1)):o===i)}}function yn(e){console.warn(`[phlex-reactive] preview_file ${e} — skipped`)}function Ei(e){let t=Y.get(e);if(t===void 0)return;if(Y.delete(e),URL.revokeObjectURL(t),Y.size===0)V?.disconnect(),V=null}function bc(){if(V||typeof MutationObserver!=="function"||!document?.documentElement)return;V=new MutationObserver(()=>{for(let[e,t]of Y)if(!e.isConnected||e.getAttribute("src")!==t)Ei(e)}),V.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["src"]})}function _i(e){if(typeof e.dispatchEvent==="function")e.dispatchEvent(new Event("input",{bubbles:!0}))}function xi(e,t){if(!/^(input|textarea|select)$/.test(e.localName)||e.type==="file"&&t!==""){console.warn("[phlex-reactive] set_value skipped: not a field it can write",e);return}let n=Bo(e);if(e.value=t,Bo(e)!==n)_i(e)}function Bo(e){return e.type==="select-multiple"?[...e.selectedOptions].map((t)=>t.value).join(`
|
|
6
|
+
`):e.value}function vc(e,t,n){if(n?.transition)cc(e,n.transition,()=>e.hidden=t);else e.hidden=t}function An(e,t,n,r){if(vc(e,t,n),n?.expanded==null||typeof r!=="function")return;for(let o of r({...n,to:n.expanded}))o.setAttribute?.("aria-expanded",String(!t))}function wn(e){if(!Si(e))return!0;return console.warn(`[phlex-reactive] refused client attr op on ${JSON.stringify(e)} — skipped`),!1}function ki(e,t){if(e?.localName!=="img")return console.warn(`[phlex-reactive] copy_media targets an <img>, not <${e?.localName}> — skipped`),null;let n=t?.localName==="img"?t:null,r=n?.getAttribute("src"),o=!1;for(let a of["srcset","src"]){let s=r?n.getAttribute(a):null;if(s==null){if(e.hasAttribute(a))o=e.removeAttribute(a)??!0}else if(e.getAttribute(a)!==s)o=e.setAttribute(a,s)??!0}if(o)Ce(e);let i=n?.getAttribute("alt")??"";if(e.getAttribute("alt")!==i)e.setAttribute("alt",i);return n?i:!1}var yc='a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';function Ac(e){return e.querySelectorAll?.(yc)?.[0]??null}function Jn(e){if(Array.isArray(e))return e;if(typeof e!=="string")return[];try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}var Jo=Object.freeze({backspace:"Backspace",delete:"Delete",enter:"Enter",tab:"Tab",esc:"Escape",space:" ",up:"ArrowUp",down:"ArrowDown",left:"ArrowLeft",right:"ArrowRight",home:"Home",end:"End",page_up:"PageUp",page_down:"PageDown"}),Uo=Object.freeze(["meta","ctrl","alt","shift"]);function Me(e,t,n){let r=e.split("+");for(let a of Uo)if(r.includes(a)!==Boolean(t[`${a}Key`]))return!1;let o=r.find((a)=>!Uo.includes(a));if(o===void 0||typeof t.key!=="string")return!0;let i=n&&Object.hasOwn(n,o)?n[o]:Object.hasOwn(Jo,o)?Jo[o]:/^[a-z0-9]$/.test(o)?o:null;return typeof i==="string"&&i.toLowerCase()===t.key.toLowerCase()}var wc=(e)=>e&&typeof e==="object"?e.keys:String(e);function Sn(e,t,n){let r=t.target;if(e?.inEditable!==!0&&(r?.isContentEditable||/^(input|textarea|select)$/.test(r?.localName)))return!1;let o=/[Mm]ac|iP/.test(navigator.userAgentData?.platform??navigator.platform)?"meta":"ctrl";return Me(wc(e).replace(/^mod\+/,`${o}+`),t,n)}function Sc(e){if(Array.isArray(e))return[{ops:e,legacy:!0}];if(e&&typeof e==="object")return[e];if(typeof e!=="string")return[];let t=e.trim();if(t.startsWith("["))return[{ops:Jn(t),legacy:!0}];let n=[];for(let r of t.split(" ")){if(r==="")continue;let o=null;try{o=JSON.parse(r)}catch{o=null}if(o&&typeof o==="object"&&!Array.isArray(o))n.push(o);else console.warn(`[phlex-reactive] malformed on_client binding record ${JSON.stringify(r)} — skipped`)}return n}function Ho(e,t,n){if(e.legacy)return!0;let r=e.on;if(typeof r!=="string"||r==="")return!1;let o=r.indexOf(".");if(t.type!==(o<0?r:r.slice(0,o)))return!1;if(Boolean(e.window)!==Un(t.currentTarget))return!1;return o<0||n===null||Me(r.slice(o+1),t,n)}function Ec(e,t){let n=e.detail;if(n===void 0)return!0;if(n===null||typeof n!=="object"||Array.isArray(n))return!1;let r=t.detail;if(r===null||typeof r!=="object")return!1;return Object.keys(n).every((o)=>r[o]===n[o])}var zo=new WeakMap;function _c(e,t,n){if(!n.once)return!1;let r=t.currentTarget??e.element,o=zo.get(e);if(!o)o=new WeakMap,zo.set(e,o);let i=o.get(r);if(!i)i=new Set,o.set(r,i);let a=t.params?.ops,c=(r===globalThis.window?`${typeof a==="string"?a:JSON.stringify(a??null)}|`:"")+JSON.stringify(n);if(i.has(c))return!0;return i.add(c),!1}var Go=new WeakMap;function xc(e,t){if(e===null||typeof e!=="object")return!1;let n=e.params?.ops,r=typeof n==="string"?n:JSON.stringify(n??null),o=Go.get(e);if(!o)o=new WeakMap,Go.set(e,o);let i=o.get(t);if(!i)i=new Map,o.set(t,i);let a=i.get(e.currentTarget);if(!a)a=new Set,i.set(e.currentTarget,a);if(a.has(r))return!0;return a.add(r),!1}function Fn(e,t,n){for(let r of e){if(!Array.isArray(r))continue;let[o,i={}]=r;if(!Object.hasOwn(jo,o)){console.warn(`[phlex-reactive] unknown client op ${JSON.stringify(o)} — skipped`);continue}let a=t(i);if(a.length===0&&n)n(o,i);for(let s of a)if(jo[o](s,i,t),i?.keep===!0)si(s,o,i,t)}}function kc(e,t){let n=e.to;if(t){if(n==="@root")return[t];if(typeof n!=="string"||n==="")return[];if(e.global)return[...document.querySelectorAll(n)];return[...t.querySelectorAll(n)]}if(typeof n!=="string"||n===""||n==="@root")return[];return[...document.querySelectorAll(n)]}function Tc(e){let t=e.getAttribute?.("data-reactive-persist");return Boolean(t)&&t!=="off"}function Nn(e){return["defer-token","defer-src","lazy-on","lazy-visible"].some((t)=>e.getAttribute?.(`data-reactive-${t}`)!=null)}var Ko='[data-controller~="reactive"]',Rc='[data-controller~="reactive"],[data-reactive-dormant~="reactive"]',Cn=(e)=>e.getAttribute?.("data-reactive-token-value")==null&&!Nn(e);function Yo(e,t,n){let r=e?.closest?.(t);while(r&&r!==n&&Cn(r))r=r.parentElement?.closest?.(t);return r??null}var Ee=new WeakMap,_e=new WeakMap;function Lc(e){return(e.getAttribute?.("data-action")??"").includes("reactive#trackDirty")||e.getAttribute?.("data-reactive-clipboard")!=null||e.querySelector?.('[data-action*="reactive#trackDirty"],[data-reactive-clipboard]')!=null}function Oc(e){return["show-targets","group-targets","on-complete","filter-input","tags-field"].some((t)=>e.getAttribute?.(`data-reactive-${t}`)!=null)||(e.querySelectorAll?.("[data-reactive-show-field], [data-reactive-show]")??[]).length>0||e.querySelector?.("[data-reactive-nested-json], [data-reactive-nested-list], [data-reactive-confirm-when-param], [data-reactive-enable], [data-reactive-select-all], [data-reactive-count], [data-reactive-editable], [data-reactive-media]")!=null}function Fc(e){return e.getAttribute?.("data-reactive-compute-inputs-param")!=null}function Nc(e){return Boolean(e.matches?.("[data-reactive-sortable],[data-reactive-sortable-source]")||e.querySelector?.("[data-reactive-sortable],[data-reactive-sortable-source]"))}function Vo(e){return e.getAttribute?.("data-reactive-presence")!=null}function Cc(e){return Boolean(e.matches?.("[data-reactive-countdown]")||e.querySelector?.("[data-reactive-countdown]"))}function Zc(e,t,n){}function Mc(e,t){}function Qc(e){return[]}function eu(e){return Promise.resolve()}var Xo=new Set;function $c(e,t,n){let r=e+t;if(Xo.has(r))return;Xo.add(r),console.error(`[phlex-reactive] the "${e}" feature module (phlex/reactive/features/${e}) is unavailable: ${t}. If you bundle or vendor the client, alias or pin phlex/reactive/features/* (README: esbuild / webpack / bun).`,n)}function tu(){return["persist","defer","form","bindings","compute","sortable","presence","countdown","effects","hints","devtools"]}var Zo=Promise.resolve();var Qo={enter:hi,exit:gi,count:yi,text:F,served:Bn,waiting:new WeakMap},ei=1,En=2,_n=4,xn=8,kn=16,ti=32,ni=64,ri=128;ft(Qo),Yt(Qo);var X=Symbol.for("phlex-reactive.early"),Pc=1e4,Ic=1500,Un=(e)=>e!=null&&(e===globalThis.window||e.window===e),Dc="dispatch";function Tn(){return globalThis[X]??={queue:[],connected:new WeakSet},globalThis[X]}function qc(){let e=Number(globalThis.document?.querySelector?.('meta[name="phlex-reactive-early-ttl"]')?.content);return Number.isFinite(e)&&e>0?e:Pc}function Wc(e){let t={};for(let{name:n,value:r}of Array.from(e.attributes??[])){let o=/^data-reactive-(.+)-param$/i.exec(n);if(!o)continue;let i;try{i=JSON.parse(r)}catch{i=r}t[o[1].replace(/[-_]([a-z0-9])/g,(a,s)=>s.toUpperCase())]=i}return t}function jc(e,t,n){return{[X]:!0,type:e.type,detail:e.detail,target:e.target,currentTarget:n?t.ownerDocument.defaultView:t,params:Wc(t),key:e.key,code:e.code,metaKey:e.metaKey,ctrlKey:e.ctrlKey,altKey:e.altKey,shiftKey:e.shiftKey,button:e.button,submitter:e.submitter,bubbles:e.bubbles,timeStamp:e.timeStamp,defaultPrevented:e.defaultPrevented,preventDefault(){},stopPropagation(){},stopImmediatePropagation(){}}}var Ne=new WeakMap;function Bc(e,{token:t,type:n,method:r,filter:o,win:i},a){let s=Ne.get(e);if(!s)Ne.set(e,s=new Map);let c=i?`${t} ${a}`:t;if(s.has(c))return!1;return s.set(c,{type:n,method:r,filter:o,win:i,params:a,armed:!0}),!0}function oi(e,t,n,r){if(e?.[X])return!1;let o=Un(e?.currentTarget),i=o?r:e?.currentTarget,a=Uc(e,i,o?`@${t}`:t),s=Ne.get(i),c=o&&JSON.stringify(e.params);for(let u of s?.values()??[]){if(!u.armed||u.method!==t||u.type!==e.type||Boolean(u.win)!==o)continue;if(o&&u.params!==c)continue;if(u.filter&&!Me(u.filter,e,n))continue;return u.armed=!1,!0}return a}var Re=new WeakMap;function Jc(e,t,n){let r=Re.get(e);if(!r)Re.set(e,r=new Map),setTimeout(()=>Re.delete(e));let o=r.get(t)??{};r.set(t,o),o[n]=(o[n]??0)+1}function Uc(e,t,n){let r=e&&Re.get(e)?.get(t);if(!r?.[n])return!1;return r[n]-=1,!0}class Ti extends Ia{static values={token:String};#h;#f=new Map;#d=new Map;#Y;#w;#C;#S=0;#p=new Map;#E=new WeakMap;#t;featuresReady=Zo;#Fe=new Map;#Ne=new Set;#V=!1;#M=null;#Ce=new Map;#Me=new Map;#$e=new Map;#X=0;#$;#_=0;#o=0;connect(){if(wi=!0,Tn().connected.add(this.element),Ee.set(this.element,this),this.element.id==="")console.warn("[phlex-reactive] a reactive root has no id; its next-action token can't self-match "+"and may fall back to the first token in the response → a silent HTTP 403 on the NEXT action. "+"Put id: on the SAME element as reactive_attrs — use div(**reactive_root) (emits id + token together), "+"or div(id:, **reactive_attrs). The id: must NOT be on a child. See the README.");if(this.element.getAttribute?.("data-reactive-token-value")!=null||Nn(this.element))this.#t=(e)=>{if(e.type==="focusin"?!e.target.hasAttribute?.("data-reactive-editable"):e.target!==this.element)return;if(e.type===xe)this.#I();this.#P(!0)},this.element.addEventListener?.("turbo:morph-element",this.#t),this.element.addEventListener?.("focusin",this.#t),this.element.addEventListener?.(xe,this.#t);this.element.querySelectorAll?.("[data-reactive-editable]").forEach(jn),this.#X++,this.featuresReady=Zo,this.#P(),Le(this.element),this.#Q()}#P(e){this.#n(ei,"persist",Tc,(t)=>yt(this,t,e)),this.#n(En,"defer",Nn,(t)=>en(this,t,e)),this.#n(_n,"form",Lc,(t)=>_t(this,t,e)),this.#n(xn,"bindings",Oc,(t)=>De(this,t,e)),this.#n(kn,"compute",Fc,(t)=>rt(this,t,e)),this.#n(ti,"sortable",Nc,(t)=>an(this,t)),this.#n(ni,"presence",Vo,(t)=>ln(this,t)),this.#n(ri,"countdown",Cc,(t)=>mn(this,t))}#n(e,t,n,r){if(this.#_&e)return;try{if(!n(this.element))return}catch(o){return this.#D(t,"detect",o)}this.#_|=e;try{r(this.#e()),this.#o|=e}catch(o){this.#D(t,"connect",o)}}#Z(){{let e=this.#o;this.#_=this.#o=0;let t=this.#e();if(e&ei)this.#r("persist",()=>At(this,t));if(e&En)this.#r("defer",()=>tn(this,t));if(e&_n)this.#r("form",()=>xt(this,t));if(e&xn)this.#r("bindings",()=>qe(this,t));if(e&kn)this.#r("compute",()=>ot(this,t));if(e&ti)this.#r("sortable",()=>cn(this,t));if(e&ni)this.#r("presence",()=>fn(this,t));if(e&ri)this.#r("countdown",()=>hn(this,t))}}#r(e,t){try{t()}catch(n){console.error(`[phlex-reactive] the "${e}" feature module failed to disconnect`,n)}}#Pe(e){}#Ie(e,t){}#De(e){}#qe(e,t){}#We(e,t,n,r){}#e(){return this.#$??={emit:(e,t,n)=>this.#s(e,t,n),reseed:()=>this.#I(),proceed:(e,t,n,r)=>this.#k(e,t,n,0,0,null,r),forgetToken:()=>{this.#h=void 0},owns:(e)=>this.#y(e),ownership:()=>this.#U(),opTargets:(e)=>this.#N(e),diagnose:(e,t)=>this.#F(e,t),applyOps:(e,t)=>Fn(e,(n)=>this.#N(t!=null&&n.to==null?{...n,to:t}:n),(n,r)=>this.#F(`client op "${n}"`,r)),listnavOptions:(e)=>this.#m(e),collectFields:()=>this.#H(),plain:di,text:F,served:Bn,copyMedia:ki,setValue:xi,confirm:(e,t)=>Promise.resolve().then(()=>Lo(e,t)).catch(()=>!1)},this.#$}#I(){if(this.#o&_n)kt(this);if(this.#o&xn)We(this);if(this.#o&kn)it(this)}#D(e,t,n){if($c(e,t,n),this.#i("feature"),t==="load"&&this.element.getAttribute?.("data-reactive-defer-pending"))this.element.removeAttribute("data-reactive-defer-pending"),this.element.removeAttribute("aria-busy");this.#s("reactive:error",{kind:"feature",feature:e,phase:t,error:n})}#je(){}#Q(){if(this.element.setAttribute?.("data-reactive-connected",""),this.element.isConnected)this.element.dispatchEvent?.(new CustomEvent("reactive:connect",{bubbles:!0,composed:!0,detail:{id:this.element.id}}));this.#ee();for(let[e,t]of _e.get(this.element)??[]){if(e.currentTarget!==t)Object.defineProperty(e,"currentTarget",{value:t,configurable:!0});this.dispatch(e)}_e.delete(this.element)}#x=new Set;#ee(){let{queue:e}=Tn();if(e.length===0)return;let t=[];for(let o=e.length-1;o>=0;o--){let{root:i}=e[o];if(i===this.element||!i.isConnected)t.unshift(...e.splice(o,1))}let n=qc(),r=new Map;for(let o of t){let i=r.get(o.event)??[new Set,new Set];r.set(o.event,i);let a=i[+!!o.win];if(a.has(o.el))continue;a.add(o.el);let s=o.win?Math.min(Ic,n):n,c=o.root!==this.element?"its root left the page before a controller connected":performance.now()-o.at>s?`it is older than the ${s} ms ${o.win?"window-trigger":"early-event"} TTL`:o.el.isConnected&&this.element.contains(o.el)?null:"its element left the root before the controller connected";if(c){if(this.#O())console.warn(`[phlex-reactive] dropped an early "${o.event.type}" trigger: ${c}`);continue}this.#te(o)}}#te({event:e,el:t,descs:n,win:r}){let o=jc(e,t,r),i=this.application?.schema?.keyMappings,a=(t.getAttribute("data-action")??"").split(/\s+/),s=r?this.element:t;for(let c of n){if(!a.includes(c.token))continue;if(c.filter&&!Me(c.filter,e,i))continue;if(/#\w+.*:once\b/.test(c.token)){if(!Bc(s,c,r&&JSON.stringify(o.params)))continue;this.#x.add(s)}if(Jc(e,s,r?`@${c.method}`:c.method),c.method==="runOps")this.runOps(o);else this.dispatch(o)}}disconnect(){if(this.#Z(),this.#ue(),this.#fe(),this.#t)this.element.removeEventListener?.("turbo:morph-element",this.#t),this.element.removeEventListener?.("focusin",this.#t),this.element.removeEventListener?.(xe,this.#t);if(Tn().connected.delete(this.element),Ee.get(this.element)===this)Ee.delete(this.element);this.element.removeAttribute?.("data-reactive-connected");for(let e of this.#x)Ne.delete(e);this.#x.clear()}dispatch(e){if(e.params?.action&&e.params.action!==Do&&this.#re())return this.#oe(e);let t=e.params?.shortcut;if(t!=null&&!Sn(t,e,this.application?.schema?.keyMappings))return;if(oi(e,"dispatch",this.application?.schema?.keyMappings,this.element))return;let{action:n,params:r,debounce:o,throttle:i,confirm:a,confirmWhen:s,outside:c,window:u,optimistic:l}=e.params;if(!n)return;let f=e.params.busy??e.params.loading;if(c&&this.element.contains(e.target))return;let p=e.currentTarget??e.target;if((t!=null||!u)&&!this.#G(l,p))e.preventDefault();if(n===Do){let v=()=>{if(this.#o&En)return me(this);if(this.tokenValue)return this.#k(p,n,"{}")};return this.#V?this.featuresReady.then(v):v()}let b=this.#q(a,s),g=()=>this.#k(p,n,r,o,i,l,f);if(!b)return g();if(b instanceof Promise)return b.then((v)=>v?this.#g(v,p,g):g());this.#g(b,p,g)}#g(e,t,n){return Promise.resolve().then(()=>Lo(e,{el:t})).catch(()=>!1).then((r)=>{if(r)n()})}#q(e,t){if(e)return e;if(!t)return null;return Be(this,this.#e(),t)}#ne(e){}#re(){return!this.tokenValue&&Cn(this.element)}#oe(e){let t=Yo(this.element.parentElement,Rc);if(!t){if(this.element.closest?.('[data-reactive-verbose="true"], [data-reactive-debug="true"]'))console.warn(`[phlex-reactive] "${e.params.action}": no token on this root or above, nothing sent`);return}let n=Ee.get(t);if(n)return n.dispatch(e);let{shortcut:r,window:o,optimistic:i}=e.params,a=e.currentTarget??e.target;if((r!=null||!o)&&!this.#G(i,a))e.preventDefault();_e.set(t,[..._e.get(t)??[],[e,a]]);let s=t.dataset;if(s.reactiveDormant)s.controller=`${s.controller??""} ${s.reactiveDormant}`.trim(),delete s.reactiveDormant}runOps(e){let t=e.params?.ops;if(t?.shortcut!=null&&!Sn(t.shortcut,e,this.application?.schema?.keyMappings))return;if(oi(e,"runOps",this.application?.schema?.keyMappings,this.element))return;if(xc(e,this))return;let n=e.params??{},r=e.currentTarget??e.target,o=Sc(n.ops),i=o.filter((s)=>Ho(s,e,null)),a=i.length<=1?i:i.filter((s)=>Ho(s,e,this.application?.schema?.keyMappings));if(a.length===0&&o.length>0){if(this.#O())Bt(this,e);return}for(let s of a){if(s.outside&&e[X])continue;if(!Ec(s,e))continue;if(s.shortcut!=null&&!Sn(s.shortcut,e,this.application?.schema?.keyMappings))continue;if(_c(this,e,s))continue;this.#ie(s.legacy?{...n,ops:s.ops,debounce:void 0,throttle:void 0}:s,e,r,o.indexOf(s))}}#ie(e,t,n,r){let{ops:o,confirm:i,confirmWhen:a,outside:s,window:c,shortcut:u}=e;if(s&&this.element.contains(t.target))return;if(u!=null||!c)t.preventDefault();let l=this.#q(i,a),f=this.#se(e,r,n,()=>this.#Ee(this.#Se(o)));if(!l)return f();if(l instanceof Promise)return l.then((p)=>p?this.#g(p,n,f):f());this.#g(l,n,f)}#se(e,t,n,r){let o=Number(e.debounce)||0,i=Number(e.throttle)||0;if(o<=0&&i<=0)return r;let a=JSON.stringify([t,e]);if(o>0)return()=>this.#W(n,a,o,r);return()=>this.#j(n,a,i,r)}recompute(e){return st(this,this.#e(),e)}tagsAdd(e){if(e?.defaultPrevented)return;if(this.#m(e).some((t)=>t.hasAttribute?.("data-reactive-highlighted")))return;return Ye(this,this.#e(),e)}tagsPick(e){return Ve(this,this.#e(),e)}tagsRemove(e){return Xe(this,this.#e(),e)}nestedAdd(e){return Ze(this,this.#e(),e)}nestedRemove(e){return Qe(this,this.#e(),e)}syncNestedJson(e){return je(this,this.#e(),e)}#Be(e,t){}trackDirty(){se(this,this.#e())}listnavNext(e){this.#b(e,(t,n)=>t<0?0:(t+1)%n)}listnavPrev(e){this.#b(e,(t,n)=>t<0?n-1:(t-1+n)%n)}listnavFirst(e){this.#b(e,()=>0)}listnavLast(e){this.#b(e,(t,n)=>n-1)}listnavPick(e){let t=this.#m(e),n=t.findIndex((r)=>r.hasAttribute("data-reactive-highlighted"));if(n<0)return;e.preventDefault(),t[n].click()}listnavClose(e){for(let t of this.#m(e))t.removeAttribute("data-reactive-highlighted")}#b(e,t){let n=this.#m(e);if(!n.length)return;e.preventDefault();let r=this.#ae(e),o=globalThis.document?.activeElement,i=r?n.findIndex((s)=>s===o||o!=null&&s.contains?.(o)):n.findIndex((s)=>s.hasAttribute("data-reactive-highlighted")),a=n[t(i,n.length)];if(r)a.focus?.();else{for(let s of n)s.removeAttribute("data-reactive-highlighted");a.setAttribute("data-reactive-highlighted","true")}a.scrollIntoView?.({block:"nearest"})}#ae(e){return(e?.currentTarget??e?.target??this.element).getAttribute?.("data-reactive-listnav-focus-param")==="true"}#m(e){let n=(e?.currentTarget??e?.target??this.element).getAttribute?.("data-reactive-listnav-option-param")??this.element.getAttribute("data-reactive-listnav-option-param");if(!n)return[];let r=this.#U();return Array.from(this.element.querySelectorAll(n)).filter((o)=>!o.hidden&&r(o))}#k(e,t,n,r,o,i,a){if(this.#s("reactive:before-dispatch",{action:t,params:this.#z(n),element:this.element},{cancelable:!0}).defaultPrevented)return;let c=Number(r)||0;if(c>0)return this.#ce(e,c,t,n,i,a);let u=Number(o)||0;if(u>0)return this.#le(e,u,t,n,i,a);return this.#v(t,n,i,e,a)}#v(e,t,n,r,o){let i={inverse:null,undo:[],resurrect:null},a=this.#_e(e,r,i),s=Boolean(n||o),c=(p)=>{if(!s||!p)return;let b=this.#e();if(i.inverse=Ht(this,b,n,r),i.undo.push(...Ut(this,b,o,r)),this.#R())i.resurrect=zt(this,b,n,r)},u=!0;c(!0);let l=()=>this.#he(e,t,i,a),f=()=>this.#M?this.#M.then(l):l();return this.queue=(this.queue??Promise.resolve()).then(()=>f()),this.queue}#Je(){return this.#ne("hints")}#ce(e,t,n,r,o,i){this.#W(e,Dc,t,()=>this.#v(n,r,o,e,i))}#W(e,t,n,r){this.#T(e,t);let o=()=>{this.#T(e,t),r()},i=setTimeout(o,n);if(!Un(e))e?.addEventListener?.("blur",o,{once:!0});let a=this.#f.get(e);if(!a)this.#f.set(e,a=new Map);a.set(t,{timer:i,flush:o})}#T(e,t){let n=this.#f.get(e),r=n?.get(t);if(!r)return;if(clearTimeout(r.timer),e?.removeEventListener?.("blur",r.flush),n.delete(t),n.size===0)this.#f.delete(e)}#ue(){for(let[e,t]of[...this.#f])for(let n of[...t.keys()])this.#T(e,n)}#le(e,t,n,r,o,i){return this.#j(e,n,t,()=>this.#v(n,r,o,e,i))}#j(e,t,n,r){let o=this.#d.get(e)??new Map;if(o.has(t))return;let i=setTimeout(()=>{if(o.delete(t),o.size===0)this.#d.delete(e)},n);return o.set(t,i),this.#d.set(e,o),r()}#fe(){for(let e of this.#d.values())for(let t of e.values())clearTimeout(t);this.#d.clear()}#s(e,t,{cancelable:n=!1}={}){let r=new CustomEvent(e,{bubbles:!0,composed:!0,cancelable:n,detail:t});return(this.element.isConnected?this.element:document).dispatchEvent(r),r}#a(e,t,n,r){let o=()=>{if(!this.element.isConnected){console.warn("[phlex-reactive] retry() ignored — the reactive root left the DOM");return}return this.#v(e,t)};this.#s("reactive:error",{action:e,params:n,...r,retry:o})}#i(e){if(this.element?.isConnected===!1)return;this.element?.setAttribute?.("data-reactive-error",e)}#de(){this.element?.removeAttribute?.("data-reactive-error")}#pe(){let e=document.querySelector("[data-reactive-error-flash]");if(!e?.content)return;let t=e.getAttribute("data-reactive-error-flash")||"flash",n=document.getElementById(t);if(!n)return;n.appendChild(e.content.cloneNode(!0))}#me(){return It()}#R(){return this.element?.getAttribute?.("data-reactive-debug")==="true"}#B(){return typeof performance<"u"&&typeof performance.now==="function"?performance.now():Date.now()}async#he(e,t,n,r){let{fields:o,files:i}=this.#H(),a=this.#z(t),s={...o,...a},c=this.#c,u=i.length>0,l=u?this.#Ae(c,e,s,i):JSON.stringify({token:c,act:e,params:s}),f=this.#R()?{action:e,paramNames:Object.keys(a),fieldNames:Object.keys(o),encoding:u?"multipart":"json",status:null,streams:[],tokenRefreshed:!1,started:this.#B()}:null;await this.#me();try{if(navigator.onLine===!1){this.#u(n.inverse),this.#i("offline"),this.#a(e,t,s,{kind:"offline"});return}let p;try{let h={Accept:"text/vnd.turbo-stream.html","X-CSRF-Token":this.#Le()};if(!u)h["Content-Type"]="application/json";let d=this.#Oe();if(d)h["X-Pgbus-Connection"]=d;let y=Vo(this.element)&&document.getElementById(`reactive-presence-src-${this.element.id}`)?.getAttribute("connection-id");if(y)h["X-Reactive-Presence"]=y;let A=ec(this.element);if(A)h["X-Reactive-Held"]=A;yi("action"),p=await fetch(this.#Te(),{method:"POST",headers:h,body:l,credentials:"same-origin",signal:AbortSignal.timeout(this.#Re())})}catch(h){if(console.error("[phlex-reactive] action error",h),this.#u(n.inverse),h?.name==="TimeoutError"||h?.name==="AbortError"){this.#i("timeout"),this.#a(e,t,s,{kind:"timeout"});return}this.#pe(),this.#i("network"),this.#a(e,t,s,{kind:"network"});return}if(f)f.status=p.status;if(p.redirected){console.error("[phlex-reactive] action was redirected (auth/CSRF?) — no update applied"),this.#u(n.inverse),this.#i("redirected"),this.#a(e,t,s,{kind:"redirected",status:p.status});return}if(!p.ok){let h=await p.text();if(console.error(`[phlex-reactive] action failed: HTTP ${p.status}`,h),this.#u(n.inverse),(p.headers.get("Content-Type")||"").includes("turbo-stream")){let d=this.#J(h);if(this.#c=d??this.#c,f)ce(f,h,d);Io(this.element,h,!1)}this.#i("http"),this.#a(e,t,s,{kind:"http",status:p.status,body:h});return}let b=p.headers.get("Content-Type")||"";if(!b.includes("turbo-stream")){console.error(`[phlex-reactive] expected a turbo-stream, got "${b}" — no update applied`),this.#u(n.inverse),this.#i("content-type"),this.#a(e,t,s,{kind:"content-type",status:p.status});return}let g=await p.text(),v=this.#J(g);if(this.#c=v??this.#c,f)ce(f,g,v);if(Io(this.element,g),n.resurrect)queueMicrotask(n.resurrect);return this.#de(),this.#s("reactive:applied",{action:e,params:s,html:g}),g}catch(p){console.error("[phlex-reactive] action error",p),this.#u(n.inverse),this.#s("reactive:error",{action:e,params:s,kind:"apply"})}finally{if(r?.(),f)Jt(this,{...f,ms:this.#B()-f.started})}}get#c(){return this.#h??this.tokenValue}set#c(e){this.#h=e}tokenValueChanged(){this.#h=void 0}#J(e){let t=this.element.id;if(!t)return e.match(/data-reactive-token-value="([^"]+)"/)?.[1];let{token:n,self:r}=this.#ge(t),o=e.match(n);if(o)return o[1];let i=e.match(r);if(i)return i[1].match(/data-reactive-token-value="([^"]+)"/)?.[1];return}#ge(e){let t=this.#C;if(t&&t.id===e)return t;let n=ic(e);return this.#C={id:e,token:new RegExp(`<turbo-stream\\b[^>]*\\baction="reactive:token"[^>]*\\btarget="${n}"[^>]*\\bdata-reactive-token-value="([^"]+)"`),self:new RegExp(`<turbo-stream\\b[^>]*\\baction="(?:replace|update)"[^>]*\\btarget="${n}"[^>]*>([\\s\\S]*?)</turbo-stream>`)}}#y(e){return e.closest('[data-controller~="reactive"]')===this.element}#U(){if(this.element.querySelectorAll('[data-controller~="reactive"]').length===0)return()=>!0;return(t)=>this.#y(t)}#be(){let e=this.element.querySelectorAll(Ko);if(e.length===0||[...e].every(Cn))return()=>!0;return(t)=>Yo(t,Ko,this.element)===this.element}#H(){let e={},t=[],n=this.#be(),r=[];this.element.querySelectorAll("input[name], select[name], textarea[name]").forEach((s)=>{if(!n(s))return;if(s.type==="file")for(let c of s.files??[])t.push({name:s.name,file:c,multiple:s.multiple});else r.push(s)});let o=[];this.element.querySelectorAll(`[name]${lc}`).forEach((s)=>{if(n(s))o.push(s)});let i=this.#ve(r),a=this.#ye(r);for(let s of r)if(i.has(s.name)){let c=e[s.name]??(e[s.name]=[]);if(s.type==="checkbox"||s.type==="radio"){if(s.checked)c.push(s.value)}else if(s.type==="hidden"){if(!a.has(s.name))c.push(s.value)}else if(s.multiple&&s.options){for(let u of s.options)if(u.selected)c.push(u.value)}else c.push(s.value)}else if(s.type==="checkbox")e[s.name]=s.checked;else if(s.type==="radio"){if(s.checked)e[s.name]=s.value}else e[s.name]=s.value;return o.forEach((s)=>{let c=s.getAttribute("name");if(!c)return;let u=s.getAttribute("data-reactive-editable")!=null?F(s):s.value??s.textContent??s.innerHTML??"",l=e[c];if(String(c).endsWith("[]")&&!dc(s))return;if(String(c).endsWith("[]")&&(l===void 0||Array.isArray(l))){(Array.isArray(l)?l:e[c]=[]).push(u);return}if(l==null||l==="")e[c]=u}),{fields:e,files:t}}#ve(e){let t=new Set;for(let n of e){if(n.type==="radio")continue;if(String(n.name).endsWith("[]"))t.add(n.name)}return t}#ye(e){let t=new Set;for(let n of e)if(n.type==="checkbox")t.add(n.name);return t}#Ae(e,t,n,r){let o=new FormData;o.append("token",e),o.append("act",t);let i=[];for(let[s,c]of Object.entries(n))if(Array.isArray(c)&&String(s).endsWith("[]"))if(c.length===0)i.push(String(s).slice(0,-2));else{let u=`${this.#A(s)}[]`;for(let l of c)o.append(u,String(l))}else this.#L(o,this.#A(s),c);for(let s of i)o.append("empty_groups[]",s);let a=this.#we(r);for(let{name:s,file:c,multiple:u}of r){let f=u||a.has(s)?`${this.#A(s)}[]`:this.#A(s);o.append(f,c,c.name)}return o}#A(e){let t=String(e),n=t.indexOf("[");if(n===-1)return`params[${t}]`;return`params${[t.slice(0,n),...t.slice(n).match(/[^\[\]]+/g)??[]].map((o)=>`[${o}]`).join("")}`}#L(e,t,n){if(n==null)e.append(t,"");else if(Array.isArray(n))n.forEach((r,o)=>this.#L(e,`${t}[${o}]`,r));else if(typeof n==="object")for(let[r,o]of Object.entries(n))this.#L(e,`${t}[${r}]`,o);else e.append(t,String(n))}#we(e){let t=new Map;for(let{name:n}of e)t.set(n,(t.get(n)??0)+1);return new Set([...t].filter(([,n])=>n>1).map(([n])=>n))}#z(e){if(!e)return{};try{return typeof e==="string"?JSON.parse(e):e}catch{return{}}}#Se(e){return Jn(e)}#Ee(e){Fn(e,(t)=>this.#N(t),(t,n)=>this.#F(`client op "${t}"`,n))}#O(){return this.element?.getAttribute?.("data-reactive-verbose")==="true"||this.#R()}#F(e,t){if(!this.#O())return;jt(this,e,t)}#Ue(e){}#N(e){let t=e.to;if(t==="@root")return[this.element];if(typeof t!=="string"||t==="")return[];if(e.global)return[...document.querySelectorAll(t)];return[...this.element.querySelectorAll(t)].filter((n)=>this.#y(n))}#G(e,t){if(e?.checked!=="keep")return!1;let n=t?.type;return n==="checkbox"||n==="radio"}#u(e){if(!e)return;if(!this.element.isConnected)return;for(let t of e)t()}#_e(e,t,n){this.#xe(e,t),hi();let r=!1;return()=>{if(r)return;r=!0,this.#ke(e,t),gi();for(let o of n.undo)o()}}#xe(e,t){if(this.#l(t,e,1),this.#l(this.element,e,1),this.#p.set(e,(this.#p.get(e)??0)+1),this.#S++===0)this.element.setAttribute("aria-busy","true");for(let n of this.#K(e))this.#l(n,e,1)}#ke(e,t){this.#l(t,e,-1),this.#l(this.element,e,-1);let n=(this.#p.get(e)??1)-1;if(n<=0)this.#p.delete(e);else this.#p.set(e,n);if(--this.#S<=0)this.#S=0,this.element.removeAttribute("aria-busy");for(let r of this.#K(e))this.#l(r,e,-1)}#l(e,t,n){if(!e||typeof e.getAttribute!=="function")return;let r=this.#E.get(e)??new Map,o=(r.get(t)??0)+n;if(o<=0)r.delete(t);else r.set(t,o);if(r.size===0){this.#E.delete(e),e.removeAttribute("data-reactive-busy");return}this.#E.set(e,r),e.setAttribute("data-reactive-busy",[...r.keys()].join(" "))}#K(e){return[...this.element.querySelectorAll?.("[data-reactive-busy-on]")??[]].filter((n)=>n.getAttribute("data-reactive-busy-on")===e&&this.#y(n))}#Te(){return this.#Y??=document.querySelector('meta[name="phlex-reactive-action-path"]')?.content||"/reactive/actions"}#Re(){if(this.#w!=null)return this.#w;let e=document.querySelector('meta[name="phlex-reactive-timeout"]')?.content,t=Number(e);return this.#w=Number.isFinite(t)&&t>0?t:30000}#Le(){return document.querySelector('meta[name="csrf-token"]')?.content??""}#Oe(){return document.querySelector("pgbus-stream-source[connection-id]")?.getAttribute("connection-id")||document.querySelector('meta[name="pgbus-connection-id"]')?.content||null}}if(typeof window<"u")if(window.Turbo)Wo();else document.addEventListener("turbo:load",Wo,{once:!0});Wn();var lu=Ti;export{mi as ACTIVE_ATTR,lc as EDITOR_SELECTOR,fc as EDITOR_TAGS,aa as LATENCY_KEY,vi as REQUESTS_ATTR,sc as checkReactiveRegistration,yi as countReactiveRequest,lu as default,Ur as disableLatencySim,F as editableValue,Jr as enableLatencySim,hi as enterReactiveActivity,ic as escapeRegExp,gi as exitReactiveActivity,eu as loadReactiveFeature,Yc as onReactiveStreamWithoutEffects,Vc as reactiveActivityCount,tu as reactiveFeatureNames,Wo as registerReactiveActions,ja as registerReactiveDefer,Wn as registerReactiveDev,Ja as registerReactiveDismiss,Ja as registerReactiveEffects,Mc as registerReactiveFeature,Zc as registerReactiveFeatureLoader,Ya as registerReactiveImageFallback,Wa as registerReactiveJs,Ka as registerReactiveKeep,Ga as registerReactiveModals,Xa as registerReactiveMorphFocus,nc as registerReactiveOffline,Va as registerReactivePlaintext,Ja as registerReactiveStreamRender,qa as registerReactiveToken,Da as registerReactiveVisit,Xc as resetReactiveActivity,Bn as serverText,Qc as unloadedFeaturesFor};
|
|
7
7
|
|
|
8
|
-
//# debugId=
|
|
8
|
+
//# debugId=94AB795089D3FC2964756E2164756E21
|
|
9
9
|
//# sourceMappingURL=reactive_controller.min.js.map
|