diff --git a/THIRD_PARTY.txt b/THIRD_PARTY.txt
index a695a2ad..39348f60 100644
--- a/THIRD_PARTY.txt
+++ b/THIRD_PARTY.txt
@@ -47,6 +47,7 @@ https://cdnjs.cloudflare.com/ajax/libs/ajax-bootstrap-select/1.4.5/js/ajax-boots
https://cdnjs.cloudflare.com/ajax/libs/algoliasearch/3.35.1/algoliasearch.min.js
https://cdnjs.cloudflare.com/ajax/libs/algoliasearch/4.9.2/algoliasearch.umd.min.js
https://cdnjs.cloudflare.com/ajax/libs/alpinejs/2.8.2/alpine.js
+https://cdnjs.cloudflare.com/ajax/libs/alpinejs/3.0.1/cdn.min.js
https://cdnjs.cloudflare.com/ajax/libs/angucomplete-alt/3.0.0/angucomplete-alt.min.js
https://cdnjs.cloudflare.com/ajax/libs/angular-animate/1.8.2/angular-animate.min.js
https://cdnjs.cloudflare.com/ajax/libs/angular-aria/1.8.2/angular-aria.min.js
diff --git a/modules/internal/targets.js b/modules/internal/targets.js
index b3be0623..4c1fc849 100644
--- a/modules/internal/targets.js
+++ b/modules/internal/targets.js
@@ -79,6 +79,8 @@ targets.setLastVersion = function (type, version) {
return '4.9.2';
} else if (type.startsWith('/alpinejs/2.')) {
return '2.8.2';
+ } else if (type.startsWith('/alpinejs/3.')) {
+ return '3.0.1';
} else if (type.startsWith('/anchor-js/3.')) {
return '3.2.2';
} else if (type.startsWith('/anchor-js/4.')) {
diff --git a/pages/updates/updates.html b/pages/updates/updates.html
index 8ca8a178..375ced9d 100644
--- a/pages/updates/updates.html
+++ b/pages/updates/updates.html
@@ -57,6 +57,7 @@
diff --git a/resources/alpinejs/3.0.1/alpine.jsm b/resources/alpinejs/3.0.1/alpine.jsm
new file mode 100644
index 00000000..c639fecc
--- /dev/null
+++ b/resources/alpinejs/3.0.1/alpine.jsm
@@ -0,0 +1,5 @@
+(()=>{var De=!1,Pe=!1,Q=[];function mt(e){Or(e)}function Or(e){Q.includes(e)||Q.push(e),Tr()}function Tr(){!Pe&&!De&&(De=!0,queueMicrotask(Rr))}function Rr(){De=!1,Pe=!0;for(let e=0;ee.effect(t,{scheduler:mt}),Ie=e.raw}function Le(e){k=e}function gt(e){let t=()=>{};return[n=>{let i=k(n);e._x_effects||(e._x_effects=new Set,e._x_runEffects=()=>{e._x_effects.forEach(o=>o())}),e._x_effects.add(i),t=()=>{e._x_effects.delete(i),z(i)}},()=>{t()}]}var w=new WeakMap,_t=[],V=new WeakMap,yt=[],xt=[];function bt(e){xt.push(e)}function vt(e,t){typeof e=="function"&&t===void 0?yt.push(e):(V.has(e)||V.set(e,[]),V.get(e).push(t))}function wt(e){_t.push(e)}function Et(e,t,r){w.has(e)||w.set(e,{}),w.get(e)[t]||(w.get(e)[t]=[]),w.get(e)[t].push(r)}var Fe=new MutationObserver(St),$e=!1;function je(){Fe.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),$e=!0}function Nr(){Fe.disconnect(),$e=!1}var Z=[],Ke=!1;function kr(){Z=Z.concat(Fe.takeRecords()),Z.length&&!Ke&&(Ke=!0,queueMicrotask(()=>{Mr(),Ke=!1}))}function Mr(){St(Z),Z.length=0}function y(e){if(!$e)return e();kr(),Nr();let t=e();return je(),t}function St(e){let t=[],r=[],n=new Map,i=new Map;for(let o=0;os.nodeType===1&&t.push(s)),e[o].removedNodes.forEach(s=>s.nodeType===1&&r.push(s))),e[o].type==="attributes")){let s=e[o].target,a=e[o].attributeName,c=e[o].oldValue,l=()=>{n.has(s)||n.set(s,[]),n.get(s).push({name:a,value:s.getAttribute(a)})},f=()=>{i.has(s)||i.set(s,[]),i.get(s).push(a)};s.hasAttribute(a)&&c===null?l():s.hasAttribute(a)?(f(),l()):f()}i.forEach((o,s)=>{w.get(s)&&o.forEach(a=>{w.get(s)[a]&&w.get(s)[a].forEach(c=>c())})}),n.forEach((o,s)=>{_t.forEach(a=>a(s,o))});for(let o of t)r.includes(o)||xt.forEach(s=>s(o));for(let o of r)t.includes(o)||(w.has(o)&&(Object.entries(w.get(o)).forEach(([s,a])=>{a.forEach(c=>c())}),w.delete(o)),V.has(o)&&(V.get(o).forEach(s=>s()),V.delete(o)),yt.forEach(s=>s(o)));t=null,r=null,n=null,i=null}function de(e,t,r){return e._x_dataStack=[t,...X(r||e)],()=>{e._x_dataStack=e._x_dataStack.filter(n=>n!==t)}}function ze(e,t){let r=e._x_dataStack[0];Object.entries(t).forEach(([n,i])=>{r[n]=i})}function X(e){return e._x_dataStack?e._x_dataStack:e instanceof ShadowRoot?X(e.host):e.parentNode?X(e.parentNode):[]}function Ve(e){return new Proxy({},{ownKeys:()=>Array.from(new Set(e.flatMap(t=>Object.keys(t)))),has:(t,r)=>e.some(n=>n.hasOwnProperty(r)),get:(t,r)=>(e.find(n=>n.hasOwnProperty(r))||{})[r],set:(t,r,n)=>{let i=e.find(o=>o.hasOwnProperty(r));return i?i[r]=n:e[e.length-1][r]=n,!0}})}function At(e){let t=n=>typeof n=="object"&&!Array.isArray(n)&&n!==null,r=(n,i="")=>{Object.entries(n).forEach(([o,s])=>{let a=i===""?o:`${i}.${o}`;if(typeof s=="function"&&s.interceptor){let c=s(o,a);Object.defineProperty(n,o,c[0])}t(s)&&r(s,a)})};return r(e)}function pe(e,t=()=>{}){return r=>{function n(i,o){let s=n.parent?n.parent:(p,A)=>[{},{initer(){},setter(){}}],[a,{initer:c,setter:l,initialValue:f}]=s(i,o),d=f===void 0?r:f,{init:b,set:S}=e(i,o),N=!1,M=p=>d=p,u=function(p){this[i]=p},g=p=>{N||(c.bind(p)(d,M,u.bind(p)),b.bind(p)(d,M,u.bind(p)),N=!0)};return[{get(){return g(this),d},set(p){g(this),l.bind(this)(p,M,u.bind(this)),S.bind(this)(p,M,u.bind(this))},enumerable:!0,configurable:!0},{initer:b,setter:S,initialValue:r}]}return n.interceptor=!0,t(n),typeof r=="function"&&r.interceptor&&(n.parent=r),n}}var Ot={};function x(e,t){Ot[e]=t}function ee(e,t){return Object.entries(Ot).forEach(([r,n])=>{Object.defineProperty(e,`$${r}`,{get(){return n(t,{Alpine:O,interceptor:pe})},enumerable:!0})}),e}function C(e,t,r={}){let n;return h(e,t)(i=>n=i,r),n}function h(...e){return Tt(...e)}var Tt=Be;function Rt(e){Tt=e}function Be(e,t){let r={};ee(r,e);let n=[r,...X(e)];if(typeof t=="function")return Cr(n,t);let i=Dr(n,t);return Pr.bind(null,e,t,i)}function Cr(e,t){return(r=()=>{},{scope:n={},params:i=[]}={})=>{let o=t.apply(Ve([n,...e]),i);me(r,o)}}var He={};function Ir(e){if(He[e])return He[e];let t=Object.getPrototypeOf(async function(){}).constructor,r=/^[\n\s]*if.*\(.*\)/.test(e)||/^(let|const)/.test(e)?`(() => { ${e} })()`:e,n=new t(["__self","scope"],`with (scope) { __self.result = ${r} }; __self.finished = true; return __self.result;`);return He[e]=n,n}function Dr(e,t){let r=Ir(t);return(n=()=>{},{scope:i={},params:o=[]}={})=>{r.result=void 0,r.finished=!1;let s=Ve([i,...e]),a=r(r,s);r.finished?me(n,r.result,s,o):a.then(c=>{me(n,c,s,o)})}}function me(e,t,r,n){if(typeof t=="function"){let i=t.apply(r,n);i instanceof Promise?i.then(o=>me(e,o,r,n)):e(i)}else e(t)}function Pr(e,t,r,...n){try{return r(...n)}catch(i){throw console.warn(`Alpine Expression Error: ${i.message}
+
+Expression: "${t}"
+
+`,e),i}}var We="x-";function T(e=""){return We+e}function Nt(e){We=e}var Mt={};function m(e,t){Mt[e]=t}function te(e,t,r){let n={};return Array.from(t).map(Fr((o,s)=>n[o]=s)).filter($r).map(jr(n,r)).sort(Kr).map(o=>Lr(e,o))}var Ue=!1,qe=[];function kt(e){Ue=!0;let t=()=>{for(;qe.length;)qe.shift()()},r=()=>{Ue=!1,t()};e(t),r()}function Lr(e,t){let r=()=>{},n=Mt[t.type]||r,i=[],o=d=>i.push(d),[s,a]=gt(e);i.push(a);let c={Alpine:O,effect:s,cleanup:o,evaluateLater:h.bind(h,e),evaluate:C.bind(C,e)},l=()=>i.forEach(d=>d());Et(e,t.original,l);let f=()=>{e._x_ignore||e._x_ignore_self||(n.inline&&n.inline(e,t,c),n=n.bind(n,e,t,c),Ue?qe.push(n):n())};return f.runCleanups=l,f}var he=(e,t)=>({name:r,value:n})=>(r.startsWith(e)&&(r=r.replace(e,t)),{name:r,value:n}),ge=e=>e;function Fr(e){return({name:t,value:r})=>{let{name:n,value:i}=Ct.reduce((o,s)=>s(o),{name:t,value:r});return n!==t&&e(n,t),{name:n,value:i}}}var Ct=[];function B(e){Ct.push(e)}function $r({name:e}){return Dt().test(e)}var Dt=()=>new RegExp(`^${We}([^:^.]+)\\b`);function jr(e,t){return({name:r,value:n})=>{let i=r.match(Dt()),o=r.match(/:([a-zA-Z0-9\-:]+)/),s=r.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],a=t||e[r]||r;return{type:i?i[1]:null,value:o?o[1]:null,modifiers:s.map(c=>c.replace(".","")),expression:n,original:a}}}var Ge="DEFAULT",_e=["ignore","ref","data","bind","init","for","model","transition","show","if",Ge,"element"];function Kr(e,t){let r=_e.indexOf(e.type)===-1?Ge:e.type,n=_e.indexOf(t.type)===-1?Ge:t.type;return _e.indexOf(r)-_e.indexOf(n)}function H(e,t,r={}){e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0,cancelable:!0}))}var Ye=[],Je=!1;function I(e){Ye.push(e),queueMicrotask(()=>{Je||setTimeout(()=>{ye()})})}function ye(){for(Je=!1;Ye.length;)Ye.shift()()}function Pt(){Je=!0}function L(e,t){if(e instanceof ShadowRoot){Array.from(e.children).forEach(i=>L(i,t));return}let r=!1;if(t(e,()=>r=!0),r)return;let n=e.firstElementChild;for(;n;)L(n,t,!1),n=n.nextElementSibling}function It(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}function Lt(){document.body||It("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's `