diff --git a/README.md b/README.md
index 3b85e8a..6bc47ca 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
-
+
@@ -181,21 +181,18 @@ This example will re-render the `post` partial and toggle the `form` section.
If a named keyword argument is shared by both the `trigger` and `target`,
the trigger value will take precendence because multiple triggers might control the same target.
+#### DevTools
-#### DevTools Helpers
-To make your development easier, Reflex Behaviors comes with a browser DevTools helper.
-You can enable the helper from your javascript console or your application's javascript file
+TurboBoost ships with client/browser based devtools designed to improve the developer experience.
+You can enable the devtools with JavaScript like so.
```js
-ReflexBehaviors.devtools.start()
+TurboBoost.devtools.start()
```
-
## Introductory Video
[![Watch the introduction on YouTube](https://img.youtube.com/vi/WERDPzOz1sA/maxresdefault.jpg)](https://youtu.be/WERDPzOz1sA "Watch the introduction on YouTube")
-
-
## Releasing
1. Run `yarn` and `bundle` to pick up the latest
diff --git a/app/assets/builds/@turbo-boost/elements.js b/app/assets/builds/@turbo-boost/elements.js
index 94db76a..5661de6 100644
--- a/app/assets/builds/@turbo-boost/elements.js
+++ b/app/assets/builds/@turbo-boost/elements.js
@@ -1,9 +1,9 @@
-function bo(e,t,r={}){let n=new CustomEvent(t,r);e.forEach(o=>o.dispatchEvent(n))}var yr=bo;var St=!1,Ct=!1,te=[];function vo(e){_o(e)}function _o(e){te.includes(e)||te.push(e),xo()}function Or(e){let t=te.indexOf(e);t!==-1&&te.splice(t,1)}function xo(){!Ct&&!St&&(St=!0,queueMicrotask(yo))}function yo(){St=!1,Ct=!0;for(let e=0;ee.effect(t,{scheduler:r=>{kt?vo(r):r()}}),Lr=e.raw}function Er(e){ke=e}function To(e){let t=()=>{};return[n=>{let o=ke(n);return e._x_effects||(e._x_effects=new Set,e._x_runEffects=()=>{e._x_effects.forEach(i=>i())}),e._x_effects.add(o),t=()=>{o!==void 0&&(e._x_effects.delete(o),Je(o))},o},()=>{t()}]}var Mr=[],$r=[],Rr=[];function Ao(e){Rr.push(e)}function Nr(e,t){typeof t=="function"?(e._x_cleanups||(e._x_cleanups=[]),e._x_cleanups.push(t)):(t=e,$r.push(t))}function So(e){Mr.push(e)}function Co(e,t,r){e._x_attributeCleanups||(e._x_attributeCleanups={}),e._x_attributeCleanups[t]||(e._x_attributeCleanups[t]=[]),e._x_attributeCleanups[t].push(r)}function Pr(e,t){e._x_attributeCleanups&&Object.entries(e._x_attributeCleanups).forEach(([r,n])=>{(t===void 0||t.includes(r))&&(n.forEach(o=>o()),delete e._x_attributeCleanups[r])})}var Kt=new MutationObserver(Vt),qt=!1;function Dr(){Kt.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),qt=!0}function ko(){Oo(),Kt.disconnect(),qt=!1}var Te=[],Et=!1;function Oo(){Te=Te.concat(Kt.takeRecords()),Te.length&&!Et&&(Et=!0,queueMicrotask(()=>{Lo(),Et=!1}))}function Lo(){Vt(Te),Te.length=0}function A(e){if(!qt)return e();ko();let t=e();return Dr(),t}var zt=!1,We=[];function Mo(){zt=!0}function $o(){zt=!1,Vt(We),We=[]}function Vt(e){if(zt){We=We.concat(e);return}let t=[],r=[],n=new Map,o=new Map;for(let i=0;is.nodeType===1&&t.push(s)),e[i].removedNodes.forEach(s=>s.nodeType===1&&r.push(s))),e[i].type==="attributes")){let s=e[i].target,a=e[i].attributeName,l=e[i].oldValue,u=()=>{n.has(s)||n.set(s,[]),n.get(s).push({name:a,value:s.getAttribute(a)})},d=()=>{o.has(s)||o.set(s,[]),o.get(s).push(a)};s.hasAttribute(a)&&l===null?u():s.hasAttribute(a)?(d(),u()):d()}o.forEach((i,s)=>{Pr(s,i)}),n.forEach((i,s)=>{Mr.forEach(a=>a(s,i))});for(let i of r)if(!t.includes(i)&&($r.forEach(s=>s(i)),i._x_cleanups))for(;i._x_cleanups.length;)i._x_cleanups.pop()();t.forEach(i=>{i._x_ignoreSelf=!0,i._x_ignore=!0});for(let i of t)r.includes(i)||i.isConnected&&(delete i._x_ignoreSelf,delete i._x_ignore,Rr.forEach(s=>s(i)),i._x_ignore=!0,i._x_ignoreSelf=!0);t.forEach(i=>{delete i._x_ignoreSelf,delete i._x_ignore}),t=null,r=null,n=null,o=null}function Br(e){return Le(ce(e))}function Oe(e,t,r){return e._x_dataStack=[t,...ce(r||e)],()=>{e._x_dataStack=e._x_dataStack.filter(n=>n!==t)}}function wr(e,t){let r=e._x_dataStack[0];Object.entries(t).forEach(([n,o])=>{r[n]=o})}function ce(e){return e._x_dataStack?e._x_dataStack:typeof ShadowRoot=="function"&&e instanceof ShadowRoot?ce(e.host):e.parentNode?ce(e.parentNode):[]}function Le(e){let t=new Proxy({},{ownKeys:()=>Array.from(new Set(e.flatMap(r=>Object.keys(r)))),has:(r,n)=>e.some(o=>o.hasOwnProperty(n)),get:(r,n)=>(e.find(o=>{if(o.hasOwnProperty(n)){let i=Object.getOwnPropertyDescriptor(o,n);if(i.get&&i.get._x_alreadyBound||i.set&&i.set._x_alreadyBound)return!0;if((i.get||i.set)&&i.enumerable){let s=i.get,a=i.set,l=i;s=s&&s.bind(t),a=a&&a.bind(t),s&&(s._x_alreadyBound=!0),a&&(a._x_alreadyBound=!0),Object.defineProperty(o,n,{...l,get:s,set:a})}return!0}return!1})||{})[n],set:(r,n,o)=>{let i=e.find(s=>s.hasOwnProperty(n));return i?i[n]=o:e[e.length-1][n]=o,!0}});return t}function Ir(e){let t=n=>typeof n=="object"&&!Array.isArray(n)&&n!==null,r=(n,o="")=>{Object.entries(Object.getOwnPropertyDescriptors(n)).forEach(([i,{value:s,enumerable:a}])=>{if(a===!1||s===void 0)return;let l=o===""?i:`${o}.${i}`;typeof s=="object"&&s!==null&&s._x_interceptor?n[i]=s.initialize(e,l,i):t(s)&&s!==n&&!(s instanceof Element)&&r(s,l)})};return r(e)}function Hr(e,t=()=>{}){let r={initialValue:void 0,_x_interceptor:!0,initialize(n,o,i){return e(this.initialValue,()=>Ro(n,o),s=>Ot(n,o,s),o,i)}};return t(r),n=>{if(typeof n=="object"&&n!==null&&n._x_interceptor){let o=r.initialize.bind(r);r.initialize=(i,s,a)=>{let l=n.initialize(i,s,a);return r.initialValue=l,o(i,s,a)}}else r.initialValue=n;return r}}function Ro(e,t){return t.split(".").reduce((r,n)=>r[n],e)}function Ot(e,t,r){if(typeof t=="string"&&(t=t.split(".")),t.length===1)e[t[0]]=r;else{if(t.length===0)throw error;return e[t[0]]||(e[t[0]]={}),Ot(e[t[0]],t.slice(1),r)}}var jr={};function j(e,t){jr[e]=t}function Lt(e,t){return Object.entries(jr).forEach(([r,n])=>{Object.defineProperty(e,`$${r}`,{get(){let[o,i]=Wr(t);return o={interceptor:Hr,...o},Nr(t,i),n(t,o)},enumerable:!1})}),e}function No(e,t,r,...n){try{return r(...n)}catch(o){Ce(o,e,t)}}function Ce(e,t,r=void 0){Object.assign(e,{el:t,expression:r}),console.warn(`Alpine Expression Error: ${e.message}
+var _o=Object.defineProperty,yo=Object.defineProperties;var xo=Object.getOwnPropertyDescriptors;var yr=Object.getOwnPropertySymbols;var Eo=Object.prototype.hasOwnProperty,wo=Object.prototype.propertyIsEnumerable;var xr=(e,t,r)=>t in e?_o(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,X=(e,t)=>{for(var r in t||(t={}))Eo.call(t,r)&&xr(e,r,t[r]);if(yr)for(var r of yr(t))wo.call(t,r)&&xr(e,r,t[r]);return e},K=(e,t)=>yo(e,xo(t));var ko=Object.defineProperty,To=Object.defineProperties,Ao=Object.getOwnPropertyDescriptors,Er=Object.getOwnPropertySymbols,So=Object.prototype.hasOwnProperty,Co=Object.prototype.propertyIsEnumerable,wr=(e,t,r)=>t in e?ko(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,S=(e,t)=>{for(var r in t||(t={}))So.call(t,r)&&wr(e,r,t[r]);if(Er)for(var r of Er(t))Co.call(t,r)&&wr(e,r,t[r]);return e},G=(e,t)=>To(e,Ao(t)),Oo=Object.defineProperty,Lo=Object.defineProperties,$o=Object.getOwnPropertyDescriptors,kr=Object.getOwnPropertySymbols,jo=Object.prototype.hasOwnProperty,Mo=Object.prototype.propertyIsEnumerable,Ot=(e,t,r)=>t in e?Oo(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Xe=(e,t)=>{for(var r in t||(t={}))jo.call(t,r)&&Ot(e,r,t[r]);if(kr)for(var r of kr(t))Mo.call(t,r)&&Ot(e,r,t[r]);return e},No=(e,t)=>Lo(e,$o(t)),Tr=(e,t,r)=>(Ot(e,typeof t!="symbol"?t+"":t,r),r);function Po(e,t,r={}){let n=new CustomEvent(t,r);e.forEach(o=>o.dispatchEvent(n))}var Ro=Po,Lt=!1,$t=!1,ne=[];function Do(e){Bo(e)}function Bo(e){ne.includes(e)||ne.push(e),Ho()}function Dr(e){let t=ne.indexOf(e);t!==-1&&ne.splice(t,1)}function Ho(){!$t&&!Lt&&(Lt=!0,queueMicrotask(qo))}function qo(){Lt=!1,$t=!0;for(let e=0;ee.effect(t,{scheduler:r=>{jt?Do(r):r()}}),Br=e.raw}function Ar(e){je=e}function Fo(e){let t=()=>{};return[r=>{let n=je(r);return e._x_effects||(e._x_effects=new Set,e._x_runEffects=()=>{e._x_effects.forEach(o=>o())}),e._x_effects.add(n),t=()=>{n!==void 0&&(e._x_effects.delete(n),et(n))},n},()=>{t()}]}var Hr=[],qr=[],zr=[];function Wo(e){zr.push(e)}function Ir(e,t){typeof t=="function"?(e._x_cleanups||(e._x_cleanups=[]),e._x_cleanups.push(t)):(t=e,qr.push(t))}function Vo(e){Hr.push(e)}function Uo(e,t,r){e._x_attributeCleanups||(e._x_attributeCleanups={}),e._x_attributeCleanups[t]||(e._x_attributeCleanups[t]=[]),e._x_attributeCleanups[t].push(r)}function Fr(e,t){e._x_attributeCleanups&&Object.entries(e._x_attributeCleanups).forEach(([r,n])=>{(t===void 0||t.includes(r))&&(n.forEach(o=>o()),delete e._x_attributeCleanups[r])})}var Xt=new MutationObserver(Zt),Kt=!1;function Wr(){Xt.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),Kt=!0}function Xo(){Ko(),Xt.disconnect(),Kt=!1}var Te=[],wt=!1;function Ko(){Te=Te.concat(Xt.takeRecords()),Te.length&&!wt&&(wt=!0,queueMicrotask(()=>{Jo(),wt=!1}))}function Jo(){Zt(Te),Te.length=0}function T(e){if(!Kt)return e();Xo();let t=e();return Wr(),t}var Jt=!1,Ke=[];function Zo(){Jt=!0}function Go(){Jt=!1,Zt(Ke),Ke=[]}function Zt(e){if(Jt){Ke=Ke.concat(e);return}let t=[],r=[],n=new Map,o=new Map;for(let i=0;is.nodeType===1&&t.push(s)),e[i].removedNodes.forEach(s=>s.nodeType===1&&r.push(s))),e[i].type==="attributes")){let s=e[i].target,a=e[i].attributeName,l=e[i].oldValue,u=()=>{n.has(s)||n.set(s,[]),n.get(s).push({name:a,value:s.getAttribute(a)})},d=()=>{o.has(s)||o.set(s,[]),o.get(s).push(a)};s.hasAttribute(a)&&l===null?u():s.hasAttribute(a)?(d(),u()):d()}o.forEach((i,s)=>{Fr(s,i)}),n.forEach((i,s)=>{Hr.forEach(a=>a(s,i))});for(let i of r)if(!t.includes(i)&&(qr.forEach(s=>s(i)),i._x_cleanups))for(;i._x_cleanups.length;)i._x_cleanups.pop()();t.forEach(i=>{i._x_ignoreSelf=!0,i._x_ignore=!0});for(let i of t)r.includes(i)||i.isConnected&&(delete i._x_ignoreSelf,delete i._x_ignore,zr.forEach(s=>s(i)),i._x_ignore=!0,i._x_ignoreSelf=!0);t.forEach(i=>{delete i._x_ignoreSelf,delete i._x_ignore}),t=null,r=null,n=null,o=null}function Vr(e){return Ne(he(e))}function Me(e,t,r){return e._x_dataStack=[t,...he(r||e)],()=>{e._x_dataStack=e._x_dataStack.filter(n=>n!==t)}}function Sr(e,t){let r=e._x_dataStack[0];Object.entries(t).forEach(([n,o])=>{r[n]=o})}function he(e){return e._x_dataStack?e._x_dataStack:typeof ShadowRoot=="function"&&e instanceof ShadowRoot?he(e.host):e.parentNode?he(e.parentNode):[]}function Ne(e){let t=new Proxy({},{ownKeys:()=>Array.from(new Set(e.flatMap(r=>Object.keys(r)))),has:(r,n)=>e.some(o=>o.hasOwnProperty(n)),get:(r,n)=>(e.find(o=>{if(o.hasOwnProperty(n)){let i=Object.getOwnPropertyDescriptor(o,n);if(i.get&&i.get._x_alreadyBound||i.set&&i.set._x_alreadyBound)return!0;if((i.get||i.set)&&i.enumerable){let s=i.get,a=i.set,l=i;s=s&&s.bind(t),a=a&&a.bind(t),s&&(s._x_alreadyBound=!0),a&&(a._x_alreadyBound=!0),Object.defineProperty(o,n,No(Xe({},l),{get:s,set:a}))}return!0}return!1})||{})[n],set:(r,n,o)=>{let i=e.find(s=>s.hasOwnProperty(n));return i?i[n]=o:e[e.length-1][n]=o,!0}});return t}function Ur(e){let t=n=>typeof n=="object"&&!Array.isArray(n)&&n!==null,r=(n,o="")=>{Object.entries(Object.getOwnPropertyDescriptors(n)).forEach(([i,{value:s,enumerable:a}])=>{if(a===!1||s===void 0)return;let l=o===""?i:`${o}.${i}`;typeof s=="object"&&s!==null&&s._x_interceptor?n[i]=s.initialize(e,l,i):t(s)&&s!==n&&!(s instanceof Element)&&r(s,l)})};return r(e)}function Xr(e,t=()=>{}){let r={initialValue:void 0,_x_interceptor:!0,initialize(n,o,i){return e(this.initialValue,()=>Yo(n,o),s=>Kr(n,o,s),o,i)}};return t(r),n=>{if(typeof n=="object"&&n!==null&&n._x_interceptor){let o=r.initialize.bind(r);r.initialize=(i,s,a)=>{let l=n.initialize(i,s,a);return r.initialValue=l,o(i,s,a)}}else r.initialValue=n;return r}}function Yo(e,t){return t.split(".").reduce((r,n)=>r[n],e)}function Kr(e,t,r){if(typeof t=="string"&&(t=t.split(".")),t.length===1)e[t[0]]=r;else{if(t.length===0)throw error;return e[t[0]]||(e[t[0]]={}),Kr(e[t[0]],t.slice(1),r)}}var Jr={};function H(e,t){Jr[e]=t}function Mt(e,t){return Object.entries(Jr).forEach(([r,n])=>{Object.defineProperty(e,`$${r}`,{get(){let[o,i]=tn(t);return o=Xe({interceptor:Xr},o),Ir(t,i),n(t,o)},enumerable:!1})}),e}function Qo(e,t,r,...n){try{return r(...n)}catch(o){Oe(o,e,t)}}function Oe(e,t,r=void 0){Object.assign(e,{el:t,expression:r}),console.warn(`Alpine Expression Error: ${e.message}
${r?'Expression: "'+r+`"
-`:""}`,t),setTimeout(()=>{throw e},0)}var Ve=!0;function Po(e){let t=Ve;Ve=!1,e(),Ve=t}function ue(e,t,r={}){let n;return O(e,t)(o=>n=o,r),n}function O(...e){return Fr(...e)}var Fr=Kr;function Do(e){Fr=e}function Kr(e,t){let r={};Lt(r,e);let n=[r,...ce(e)];if(typeof t=="function")return Bo(n,t);let o=Ho(n,t,e);return No.bind(null,e,t,o)}function Bo(e,t){return(r=()=>{},{scope:n={},params:o=[]}={})=>{let i=t.apply(Le([n,...e]),o);Ue(r,i)}}var wt={};function Io(e,t){if(wt[e])return wt[e];let r=Object.getPrototypeOf(async function(){}).constructor,n=/^[\n\s]*if.*\(.*\)/.test(e)||/^(let|const)\s/.test(e)?`(() => { ${e} })()`:e,i=(()=>{try{return new r(["__self","scope"],`with (scope) { __self.result = ${n} }; __self.finished = true; return __self.result;`)}catch(s){return Ce(s,t,e),Promise.resolve()}})();return wt[e]=i,i}function Ho(e,t,r){let n=Io(t,r);return(o=()=>{},{scope:i={},params:s=[]}={})=>{n.result=void 0,n.finished=!1;let a=Le([i,...e]);if(typeof n=="function"){let l=n(n,a).catch(u=>Ce(u,r,t));n.finished?(Ue(o,n.result,a,s,r),n.result=void 0):l.then(u=>{Ue(o,u,a,s,r)}).catch(u=>Ce(u,r,t)).finally(()=>n.result=void 0)}}}function Ue(e,t,r,n,o){if(Ve&&typeof t=="function"){let i=t.apply(r,n);i instanceof Promise?i.then(s=>Ue(e,s,r,n)).catch(s=>Ce(s,o,t)):e(i)}else e(t)}var Wt="x-";function he(e=""){return Wt+e}function jo(e){Wt=e}var qr={};function w(e,t){qr[e]=t}function Ut(e,t,r){if(t=Array.from(t),e._x_virtualDirectives){let i=Object.entries(e._x_virtualDirectives).map(([a,l])=>({name:a,value:l})),s=zr(i);i=i.map(a=>s.find(l=>l.name===a.name)?{name:`x-bind:${a.name}`,value:`"${a.value}"`}:a),t=t.concat(i)}let n={};return t.map(Jr((i,s)=>n[i]=s)).filter(Yr).map(qo(n,r)).sort(zo).map(i=>Ko(e,i))}function zr(e){return Array.from(e).map(Jr()).filter(t=>!Yr(t))}var Mt=!1,we=new Map,Vr=Symbol();function Fo(e){Mt=!0;let t=Symbol();Vr=t,we.set(t,[]);let r=()=>{for(;we.get(t).length;)we.get(t).shift()();we.delete(t)},n=()=>{Mt=!1,r()};e(r),n()}function Wr(e){let t=[],r=a=>t.push(a),[n,o]=To(e);return t.push(o),[{Alpine:Me,effect:n,cleanup:r,evaluateLater:O.bind(O,e),evaluate:ue.bind(ue,e)},()=>t.forEach(a=>a())]}function Ko(e,t){let r=()=>{},n=qr[t.type]||r,[o,i]=Wr(e);Co(e,t.original,i);let s=()=>{e._x_ignore||e._x_ignoreSelf||(n.inline&&n.inline(e,t,o),n=n.bind(n,e,t,o),Mt?we.get(Vr).push(n):n())};return s.runCleanups=i,s}var Ur=(e,t)=>({name:r,value:n})=>(r.startsWith(e)&&(r=r.replace(e,t)),{name:r,value:n}),Gr=e=>e;function Jr(e=()=>{}){return({name:t,value:r})=>{let{name:n,value:o}=Xr.reduce((i,s)=>s(i),{name:t,value:r});return n!==t&&e(n,t),{name:n,value:o}}}var Xr=[];function Gt(e){Xr.push(e)}function Yr({name:e}){return Zr().test(e)}var Zr=()=>new RegExp(`^${Wt}([^:^.]+)\\b`);function qo(e,t){return({name:r,value:n})=>{let o=r.match(Zr()),i=r.match(/:([a-zA-Z0-9\-:]+)/),s=r.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],a=t||e[r]||r;return{type:o?o[1]:null,value:i?i[1]:null,modifiers:s.map(l=>l.replace(".","")),expression:n,original:a}}}var $t="DEFAULT",qe=["ignore","ref","data","id","radio","tabs","switch","disclosure","menu","listbox","list","item","combobox","bind","init","for","mask","model","modelable","transition","show","if",$t,"teleport"];function zo(e,t){let r=qe.indexOf(e.type)===-1?$t:e.type,n=qe.indexOf(t.type)===-1?$t:t.type;return qe.indexOf(r)-qe.indexOf(n)}function Ae(e,t,r={}){e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0,cancelable:!0}))}var Rt=[],Jt=!1;function Qr(e=()=>{}){return queueMicrotask(()=>{Jt||setTimeout(()=>{Nt()})}),new Promise(t=>{Rt.push(()=>{e(),t()})})}function Nt(){for(Jt=!1;Rt.length;)Rt.shift()()}function Vo(){Jt=!0}function oe(e,t){if(typeof ShadowRoot=="function"&&e instanceof ShadowRoot){Array.from(e.children).forEach(o=>oe(o,t));return}let r=!1;if(t(e,()=>r=!0),r)return;let n=e.firstElementChild;for(;n;)oe(n,t,!1),n=n.nextElementSibling}function de(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}function Wo(){document.body||de("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's `