@vireo-ai/trellis-ui 0.1.49 → 0.1.50
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.
- package/package.json +1 -1
- package/packages/client/src/components/data-grid/styles.css +20 -2
- package/packages/client/src/components/field/styles.css +29 -3
- package/packages/client/src/components/tabs/styles.css +1 -1
- package/packages/client/src/styles/generated/theme-fonts.css +1 -1
- package/packages/client/src/styles/generated/theme-palette.css +8 -1
- package/packages/client/src/styles/generated/theme-runtime.css +1 -1
- package/packages/client/src/styles/generated-sources.css +1 -1
- package/packages/client/src/styles/recipes/option.css +4 -0
- package/packages/client/types/components/data-grid/contract.d.ts +1 -0
- package/packages/client/types/components/data-grid/index.d.ts +3 -3
- package/packages/client/types/components/data-grid/model.d.ts +4 -2
- package/packages/client/types/components/menu/contract.d.ts +2 -2
- package/packages/client/types/components/sidebar/contract.d.ts +8 -2
- package/packages/client/types/motion/index.d.ts +1 -0
- package/packages/client/types/motion/registry.d.ts +2 -1
- package/packages/client/types/runtime/focus-handoff.d.ts +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.css +71 -5
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min.css +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/build-metadata.json +362 -359
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{alpine-machine-BS13dbK4.js → alpine-machine-BTDXpEr6.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{alpine-machine-BS13dbK4.js.map → alpine-machine-BTDXpEr6.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-motion-DoZROkFD.js → capability-motion-BeZZfCbD.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-motion-DoZROkFD.js.map → capability-motion-BeZZfCbD.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-shortcut-BoDF_wQX.js → capability-shortcut-CGpfLNL-.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-shortcut-BoDF_wQX.js.map → capability-shortcut-CGpfLNL-.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-D5jfePOE.js +3 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-D5jfePOE.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{controller-qWtZCkAC.js → controller-xDNH-xzt.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{controller-qWtZCkAC.js.map → controller-xDNH-xzt.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-BgbZXaDN.js → core-CGPV218r.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-BgbZXaDN.js.map → core-CGPV218r.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-6_ClPYhC.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-6_ClPYhC.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CkBblBv9.js → entry.generated-AFRarPro.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CkBblBv9.js.map → entry.generated-AFRarPro.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-B_q7LVNv.js → entry.generated-B3F9jaO_.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-B_q7LVNv.js.map → entry.generated-B3F9jaO_.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-u0Ueamvw.js → entry.generated-B6Gjj1Mu.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-u0Ueamvw.js.map → entry.generated-B6Gjj1Mu.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-B_e0djHK.js → entry.generated-BGqM-PEq.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-B_e0djHK.js.map → entry.generated-BGqM-PEq.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-f6HGqvQY.js → entry.generated-BqEMECZx.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-f6HGqvQY.js.map → entry.generated-BqEMECZx.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-D6qaa8bk.js → entry.generated-BsJJMR1g.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-D6qaa8bk.js.map → entry.generated-BsJJMR1g.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-ZcYuKSSI.js → entry.generated-By-7ucpB.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-ZcYuKSSI.js.map → entry.generated-By-7ucpB.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Cj1CmH13.js → entry.generated-ByvN55ox.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Cj1CmH13.js.map → entry.generated-ByvN55ox.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-B-wVMxe6.js → entry.generated-CvHs5hfG.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-B-wVMxe6.js.map → entry.generated-CvHs5hfG.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Cekl4pYo.js → entry.generated-Cwv0HSDM.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Cekl4pYo.js.map → entry.generated-Cwv0HSDM.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DFkEr0wI.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DFkEr0wI.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BhtgeSTa.js → entry.generated-DVk-PDBl.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BhtgeSTa.js.map → entry.generated-DVk-PDBl.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-dyQ_HJ8D.js → entry.generated-DwYIFLsE.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-dyQ_HJ8D.js.map → entry.generated-DwYIFLsE.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-OqzkZfIu.js → entry.generated-N4M4QtmC.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-OqzkZfIu.js.map → entry.generated-N4M4QtmC.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Des-gEaR.js → entry.generated-Wl7imdNP.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Des-gEaR.js.map → entry.generated-Wl7imdNP.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CRhvZ0DI.js → entry.generated-ZTRbQ10A.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CRhvZ0DI.js.map → entry.generated-ZTRbQ10A.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BYDBzadH.js → entry.generated-qNEmG1Ht.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BYDBzadH.js.map → entry.generated-qNEmG1Ht.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CZWpqP88.js → entry.generated-qYKh9MwP.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CZWpqP88.js.map → entry.generated-qYKh9MwP.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-yg-lGtcT.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-yg-lGtcT.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-CPbvsglm.js → entry2.generated-gxr2-89M.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-CPbvsglm.js.map → entry2.generated-gxr2-89M.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-BE3g0swK.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-BE3g0swK.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-C3XtSJ4O.js +3 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-BQk-uLaI.js.map → motion-C3XtSJ4O.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{semantic-observer-BUswpsNx.js → semantic-observer-CdRbZHir.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{semantic-observer-BUswpsNx.js.map → semantic-observer-CdRbZHir.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{ui-DuGUQhxd.js → ui-BHBokFNi.js} +3 -3
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{ui-DuGUQhxd.js.map → ui-BHBokFNi.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/direct-upload.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/logical-entry-manifest.json +162 -161
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.js +9 -9
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min.js +9 -9
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-DtSghTO8.js +0 -3
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-DtSghTO8.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-1meMFJbq.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-1meMFJbq.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CJuVLJw9.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CJuVLJw9.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CQGhCt9y.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CQGhCt9y.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-DzEyK-Fp.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-DzEyK-Fp.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-BQk-uLaI.js +0 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"../chunks/motion-
|
|
1
|
+
import{t as e}from"../chunks/motion-C3XtSJ4O.js";import{n as t,t as n}from"../chunks/capability-motion-BeZZfCbD.js";var r=n;export{r as default,e as motion,t as registerBoundsDirective,n as registerMotionCapability};
|
|
2
2
|
//# sourceMappingURL=motion.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e,i as t,n,o as r,r as i,t as a}from"../chunks/capability-shortcut-
|
|
1
|
+
import{a as e,i as t,n,o as r,r as i,t as a}from"../chunks/capability-shortcut-CGpfLNL-.js";var o=r;export{a as createShortcutMatcher,o as default,n as formatShortcut,i as formatShortcutKeys,t as observePressedShortcutKeys,e as parseShortcut,r as registerShortcutCapability};
|
|
2
2
|
//# sourceMappingURL=shortcut.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e,n as t,r as n,t as r}from"../chunks/capability-sortable-
|
|
1
|
+
import{i as e,n as t,r as n,t as r}from"../chunks/capability-sortable-D5jfePOE.js";var i=r;export{n as createSortableRegistry,i as default,r as registerSortableCapability,t as registerSortableDirective,e as sortable};
|
|
2
2
|
//# sourceMappingURL=sortable.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e,i as t}from"./codecs-Cb1ns_47.js";var n=e=>typeof e==`object`&&!!e&&!(e instanceof FormData)&&!(e instanceof URLSearchParams)&&!(e instanceof HTMLFormElement)&&!(e instanceof Blob)&&!(e instanceof ArrayBuffer),r=e=>structuredClone(e),i=(e,t)=>{if(Object.is(e,t))return!0;if(Array.isArray(e)||Array.isArray(t))return Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((e,n)=>i(e,t[n]));if(!n(e)||!n(t))return!1;let r=Object.keys(e),a=Object.keys(t);return r.length===a.length&&r.every(n=>Object.hasOwn(t,n)&&i(e[n],t[n]))},a=e=>e!==null&&(typeof e==`object`||typeof e==`function`)&&`then`in e&&typeof e.then==`function`,o=(e=>{if(e.project===void 0==(e.projectEach===void 0))throw Error(`Transition hook ${e.name} requires exactly one projection.`);return Object.freeze(e)}),s=e=>typeof e==`string`?[e]:e,c=(e,t)=>{let n=e.split(`.`),r=t.split(`.`),i=0;for(;n[i]!==void 0&&n[i]===r[i];)i+=1;return i},l=(e,t)=>[...s(e)].sort((e,n)=>c(n,t)-c(e,t))[0]??t,u=({machine:e,hooks:t,root:n,resolveElement:i})=>{let o=new Map(t.map(e=>[e.name,e])),s=new Map,c=new Map,u=new Set,d=!1;if(o.size!==t.length)throw Error(`Transition hook names must be unique.`);t.forEach(e=>{let t=s.get(e.state)??[],n=t[0];if(n&&(n.onDone!==e.onDone||n.onError!==e.onError))throw Error(`Transition hooks sharing ${e.state} must use the same continuations.`);t.push(e),s.set(e.state,t)});let f=t=>!d&&e.getSnapshot().generations[t.path]===t.generation,p=(t,n,r={})=>{e.send({type:n,...r,__state:t.path,__generation:t.generation})},m=(e,t)=>e.projectEach?.(t)??[e.project?.(t)],h=(t,o,s,c,u,d=0)=>{for(let p=d;p<c.length;p+=1){if(!f(t))return;let d=c[p],m=n??d.el,g=i?.({name:o.name,data:s,root:m,registrationEl:d.el});if(g===null)return;let _=g??d.el,v=e.send.bind(e);Object.entries(o.sends??{}).forEach(([t,n])=>{v[t]=(...t)=>e.send(n(...t))});let y=Object.freeze({el:_,root:m,from:l(t.from,t.path),to:t.path,event:Object.freeze({...t.event}),props:r(t.snapshot.props),data:r(s),send:v,signal:u}),b=d.callback(y);if(a(b))return Promise.resolve(b).then(()=>h(t,o,s,c,u,p+1))}},g=e=>{let t=s.get(e.path);if(!t)return;let n=[],r=[],i=new AbortController,o={entry:e,controller:i};u.add(o),t.forEach(t=>{let a=[...c.get(t.name)??[]];if(a.length===0){t.required&&r.push(Error(`Transition hook ${t.name} requires a registered callback.`));return}m(t,e.snapshot).forEach(o=>{try{n.push(h(e,t,o,a,i.signal))}catch(e){r.push(e)}})});let l=t[0],d=(t=[])=>{if(u.delete(o),!f(e))return;let n=[...r,...t][0];n===void 0?p(e,l.onDone):p(e,l.onError,{error:n})},g=n.filter(a);if(g.length===0){d();return}Promise.allSettled(g).then(e=>d(e.flatMap(e=>e.status===`rejected`?[e.reason]:[])))},_=e.subscribeEntries(e=>{g(e)}),v=e.subscribe(()=>{u.forEach(e=>{f(e.entry)||(e.controller.abort(),u.delete(e))})});return{register({name:e,el:t,callback:n}){if(d)throw Error(`Transition coordinator has been destroyed.`);if(!o.has(e))throw Error(`Unknown transition hook: ${e}`);let r={name:e,el:t,callback:n},i=c.get(e)??[];return i.push(r),c.set(e,i),()=>{let t=c.get(e);if(!t)return;let n=t.indexOf(r);n>=0&&t.splice(n,1),t.length===0&&c.delete(e)}},destroy(){d||(d=!0,_(),v(),u.forEach(e=>e.controller.abort()),u.clear(),c.clear())}}},d=Symbol.for(`trellis-ui.alpine-machine-owner`),f=new WeakMap,p=(e,t)=>{let n=(typeof e.closestDataStack==`function`?e.closestDataStack(t):[]).find(e=>Reflect.get(e,d)===!0);if(n)return n;let r=e.findClosest(t,e=>f.has(e));return r?f.get(r):void 0},m=({schema:n,hooks:r,createMachine:a,resolveTransitionElement:o})=>{let s={current:null},c=s,l=[],p=null,m=null,h=null,g=null,_=null,v=!1,y=()=>{if(!m)throw Error(`Alpine machine has not been initialized.`);return m},b=e=>{!h||!p||!e.active||(e.unregister=h.register({name:e.name,el:e.el??p,callback:e.callback}))},x={snapshot:s,invalidateDom(){v||!m||m.send(`DOM_INVALIDATED`)},connect(d,y=s){if(v)throw Error(`Alpine machine has been destroyed.`);if(m)return;p=d,c=y;let S=e({el:p,schema:n}),C=a({el:p,props:S}),w;try{w=u({machine:C,hooks:r,root:p,...o?{resolveElement:o}:{}})}catch(e){throw C.stop(),p=null,e}m=C,h=w,c.current=m.getSnapshot(),_=m.subscribe(e=>{c.current=e}),f.set(p,x),l.forEach(b);let T=new Map(Object.entries(n).flatMap(([e,n])=>n.meta.attribute?[[t(e,n),e]]:[]));g=new MutationObserver(t=>{if(!p||!m)return;let r=new Set(t.flatMap(({attributeName:e})=>{let t=e?T.get(e):void 0;return t?[t]:[]})),a=e({el:p,schema:n}),o=Object.keys(a).flatMap(e=>{let t=e;return!r.has(t)&&i(S[t],a[t])?[]:[{key:t,previous:S[t],value:a[t],source:`attribute`}]});o.length!==0&&(S=a,m.send({type:`PROPS_CHANGED`,props:a,changes:o}))}),g.observe(p,{attributes:!0,attributeFilter:Object.entries(n).map(([e,n])=>t(e,n))})},disconnect(){v||(v=!0,g?.disconnect(),g=null,_?.(),_=null,h?.destroy(),h=null,m?.stop(),m=null,p&&f.delete(p),Reflect.deleteProperty(x,d),p=null,l.splice(0).forEach(e=>e.unregister?.()),c.current=null,c=s)},getSnapshot(){let e=c.current;if(!e)throw Error(`Alpine machine has not been initialized.`);return e},getCommittedSnapshot(){return y().getSnapshot()},send(e){y().send(e)},matches(e){return y().matches(e)},hasTag(e){return y().hasTag(e)},onTransition(e,t,n){if(v)throw Error(`Alpine machine has been destroyed.`);let r={name:e,callback:t,active:!0};return n&&(r.el=n),l.push(r),b(r),()=>{if(!r.active)return;r.active=!1,r.unregister?.(),delete r.unregister;let e=l.indexOf(r);e>=0&&l.splice(e,1)}}};return Reflect.defineProperty(x,d,{value:!0,configurable:!0}),x};export{
|
|
2
|
-
//# sourceMappingURL=alpine-machine-
|
|
1
|
+
import{a as e,i as t}from"./codecs-Cb1ns_47.js";var n=e=>typeof e==`object`&&!!e&&!(e instanceof FormData)&&!(e instanceof URLSearchParams)&&!(e instanceof HTMLFormElement)&&!(e instanceof Blob)&&!(e instanceof ArrayBuffer),r=e=>structuredClone(e),i=(e,t)=>{if(Object.is(e,t))return!0;if(Array.isArray(e)||Array.isArray(t))return Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((e,n)=>i(e,t[n]));if(!n(e)||!n(t))return!1;let r=Object.keys(e),a=Object.keys(t);return r.length===a.length&&r.every(n=>Object.hasOwn(t,n)&&i(e[n],t[n]))},a=e=>e!==null&&(typeof e==`object`||typeof e==`function`)&&`then`in e&&typeof e.then==`function`,o=(e=>{if(e.project===void 0==(e.projectEach===void 0))throw Error(`Transition hook ${e.name} requires exactly one projection.`);return Object.freeze(e)}),s=e=>typeof e==`string`?[e]:e,c=(e,t)=>{let n=e.split(`.`),r=t.split(`.`),i=0;for(;n[i]!==void 0&&n[i]===r[i];)i+=1;return i},l=(e,t)=>[...s(e)].sort((e,n)=>c(n,t)-c(e,t))[0]??t,u=({machine:e,hooks:t,root:n,resolveElement:i})=>{let o=new Map(t.map(e=>[e.name,e])),s=new Map,c=new Map,u=new Set,d=!1;if(o.size!==t.length)throw Error(`Transition hook names must be unique.`);t.forEach(e=>{let t=s.get(e.state)??[],n=t[0];if(n&&(n.onDone!==e.onDone||n.onError!==e.onError))throw Error(`Transition hooks sharing ${e.state} must use the same continuations.`);t.push(e),s.set(e.state,t)});let f=t=>!d&&e.getSnapshot().generations[t.path]===t.generation,p=(t,n,r={})=>{e.send({type:n,...r,__state:t.path,__generation:t.generation})},m=(e,t)=>e.projectEach?.(t)??[e.project?.(t)],h=(t,o,s,c,u,d=0)=>{for(let p=d;p<c.length;p+=1){if(!f(t))return;let d=c[p],m=n??d.el,g=i?.({name:o.name,data:s,root:m,registrationEl:d.el});if(g===null)return;let _=g??d.el,v=e.send.bind(e);Object.entries(o.sends??{}).forEach(([t,n])=>{v[t]=(...t)=>e.send(n(...t))});let y=Object.freeze({el:_,root:m,from:l(t.from,t.path),to:t.path,event:Object.freeze({...t.event}),props:r(t.snapshot.props),data:r(s),send:v,signal:u}),b=d.callback(y);if(a(b))return Promise.resolve(b).then(()=>h(t,o,s,c,u,p+1))}},g=e=>{let t=s.get(e.path);if(!t)return;let n=[],r=[],i=new AbortController,o={entry:e,controller:i};u.add(o),t.forEach(t=>{let a=[...c.get(t.name)??[]];if(a.length===0){t.required&&r.push(Error(`Transition hook ${t.name} requires a registered callback.`));return}m(t,e.snapshot).forEach(o=>{try{n.push(h(e,t,o,a,i.signal))}catch(e){r.push(e)}})});let l=t[0],d=(t=[])=>{if(u.delete(o),!f(e))return;let n=[...r,...t][0];n===void 0?p(e,l.onDone):p(e,l.onError,{error:n})},g=n.filter(a);if(g.length===0){d();return}Promise.allSettled(g).then(e=>d(e.flatMap(e=>e.status===`rejected`?[e.reason]:[])))},_=e.subscribeEntries(e=>{g(e)}),v=e.subscribe(()=>{u.forEach(e=>{f(e.entry)||(e.controller.abort(),u.delete(e))})});return{register({name:e,el:t,callback:n}){if(d)throw Error(`Transition coordinator has been destroyed.`);if(!o.has(e))throw Error(`Unknown transition hook: ${e}`);let r={name:e,el:t,callback:n},i=c.get(e)??[];return i.push(r),c.set(e,i),()=>{let t=c.get(e);if(!t)return;let n=t.indexOf(r);n>=0&&t.splice(n,1),t.length===0&&c.delete(e)}},destroy(){d||(d=!0,_(),v(),u.forEach(e=>e.controller.abort()),u.clear(),c.clear())}}},d=Symbol.for(`trellis-ui.alpine-machine-owner`),f=new WeakMap,p=(e,t)=>{let n=(typeof e.closestDataStack==`function`?e.closestDataStack(t):[]).find(e=>Reflect.get(e,d)===!0);if(n)return n;let r=e.findClosest(t,e=>f.has(e));return r?f.get(r):void 0},m=({schema:n,hooks:r,createMachine:a,resolveTransitionElement:o})=>{let s={current:null},c=s,l=[],p=null,m=null,h=null,g=null,_=null,v=!1,y=()=>{if(!m)throw Error(`Alpine machine has not been initialized.`);return m},b=e=>{!h||!p||!e.active||(e.unregister=h.register({name:e.name,el:e.el??p,callback:e.callback}))},x={snapshot:s,invalidateDom(){v||!m||m.send(`DOM_INVALIDATED`)},connect(d,y=s){if(v)throw Error(`Alpine machine has been destroyed.`);if(m)return;p=d,c=y;let S=e({el:p,schema:n}),C=a({el:p,props:S}),w;try{w=u({machine:C,hooks:r,root:p,...o?{resolveElement:o}:{}})}catch(e){throw C.stop(),p=null,e}m=C,h=w,c.current=m.getSnapshot(),_=m.subscribe(e=>{c.current=e}),f.set(p,x),l.forEach(b);let T=new Map(Object.entries(n).flatMap(([e,n])=>n.meta.attribute?[[t(e,n),e]]:[]));g=new MutationObserver(t=>{if(!p||!m)return;let r=new Set(t.flatMap(({attributeName:e})=>{let t=e?T.get(e):void 0;return t?[t]:[]})),a=e({el:p,schema:n}),o=Object.keys(a).flatMap(e=>{let t=e;return!r.has(t)&&i(S[t],a[t])?[]:[{key:t,previous:S[t],value:a[t],source:`attribute`}]});o.length!==0&&(S=a,m.send({type:`PROPS_CHANGED`,props:a,changes:o}))}),g.observe(p,{attributes:!0,attributeFilter:Object.entries(n).map(([e,n])=>t(e,n))})},disconnect(){v||(v=!0,g?.disconnect(),g=null,_?.(),_=null,h?.destroy(),h=null,m?.stop(),m=null,p&&f.delete(p),Reflect.deleteProperty(x,d),p=null,l.splice(0).forEach(e=>e.unregister?.()),c.current=null,c=s)},getSnapshot(){let e=c.current;if(!e)throw Error(`Alpine machine has not been initialized.`);return e},getCommittedSnapshot(){return y().getSnapshot()},send(e){y().send(e)},matches(e){return y().matches(e)},hasTag(e){return y().hasTag(e)},onTransition(e,t,n){if(v)throw Error(`Alpine machine has been destroyed.`);let r={name:e,callback:t,active:!0};return n&&(r.el=n),l.push(r),b(r),()=>{if(!r.active)return;r.active=!1,r.unregister?.(),delete r.unregister;let e=l.indexOf(r);e>=0&&l.splice(e,1)}}};return Reflect.defineProperty(x,d,{value:!0,configurable:!0}),x};export{r as a,o as i,p as n,n as o,u as r,i as s,m as t};
|
|
2
|
+
//# sourceMappingURL=alpine-machine-BTDXpEr6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alpine-machine-BS13dbK4.js","names":[],"sources":["../../../../../../../../client/src/utils/object.ts","../../../../../../../../client/src/runtime/transition-coordinator.ts","../../../../../../../../client/src/runtime/alpine-machine.ts"],"sourcesContent":["const isRecord = (value: unknown): value is Record<string, unknown> => (\n typeof value === 'object'\n && value !== null\n && !(value instanceof FormData)\n && !(value instanceof URLSearchParams)\n && !(value instanceof HTMLFormElement)\n && !(value instanceof Blob)\n && !(value instanceof ArrayBuffer)\n);\n\nconst cloneSerializable = <T>(value: T): T => structuredClone(value);\n\nconst isSerializableEqual = (left: unknown, right: unknown): boolean => {\n if (Object.is(left, right)) return true;\n if (Array.isArray(left) || Array.isArray(right)) {\n return Array.isArray(left)\n && Array.isArray(right)\n && left.length === right.length\n && left.every((value, index) => isSerializableEqual(value, right[index]));\n }\n if (!isRecord(left) || !isRecord(right)) return false;\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n return leftKeys.length === rightKeys.length\n && leftKeys.every((key) => Object.hasOwn(right, key) && isSerializableEqual(left[key], right[key]));\n};\n\nconst isPromiseLike = (value: unknown): value is PromiseLike<unknown> => (\n value !== null\n && (typeof value === 'object' || typeof value === 'function')\n && 'then' in value\n && typeof value.then === 'function'\n);\n\nexport {cloneSerializable, isPromiseLike, isRecord, isSerializableEqual};\n","import type {\n Machine,\n MachineEntry,\n MachineEvent,\n MachineEventObject,\n MachineSnapshot,\n MachineStateValue,\n} from './state-machine';\nimport {cloneSerializable, isPromiseLike} from '../utils';\n\ntype TransitionEventCreator = (...args: never[]) => MachineEvent;\ntype TransitionSend<\n TSends extends Record<string, TransitionEventCreator> = Record<string, TransitionEventCreator>,\n> = ((event: MachineEvent) => void) & (\n string extends keyof TSends\n ? {[name: string]: ((...args: unknown[]) => void) | undefined}\n : {[TName in keyof TSends]: (...args: Parameters<TSends[TName]>) => void}\n);\n\ntype TransitionHookDefinition<\n TContext,\n TProps,\n TData,\n TName extends string = string,\n TSends extends Record<string, TransitionEventCreator> = Record<string, TransitionEventCreator>,\n> = Readonly<{\n name: TName;\n state: string;\n onDone: string;\n onError: string;\n required?: boolean;\n sends?: TSends;\n project?: (snapshot: MachineSnapshot<TContext, TProps>) => TData;\n projectEach?: (snapshot: MachineSnapshot<TContext, TProps>) => readonly TData[];\n}>;\n\ntype AnyTransitionHook<TContext, TProps> = TransitionHookDefinition<TContext, TProps, unknown>;\n\ntype TransitionHookShape = Readonly<{\n name: string;\n state: string;\n onDone: string;\n onError: string;\n required?: boolean;\n sends?: Record<string, TransitionEventCreator>;\n project?: (...args: never[]) => unknown;\n projectEach?: (...args: never[]) => readonly unknown[];\n}>;\n\ntype TransitionContext<\n TProps,\n TData,\n TElement = unknown,\n TSends extends Record<string, TransitionEventCreator> = Record<string, TransitionEventCreator>,\n> = Readonly<{\n el: TElement;\n root: TElement;\n from: string;\n to: string;\n event: MachineEventObject;\n props: TProps;\n data: TData;\n send: TransitionSend<TSends>;\n signal: AbortSignal;\n}>;\n\ntype TransitionCallback<\n TProps,\n TData,\n TElement = unknown,\n TSends extends Record<string, TransitionEventCreator> = Record<string, TransitionEventCreator>,\n> = (\n transition: TransitionContext<TProps, TData, TElement, TSends>,\n) => unknown | Promise<unknown>;\n\ntype HookProjection<THook> = THook extends {project: (snapshot: infer TSnapshot) => infer TData}\n ? {snapshot: TSnapshot; data: TData}\n : THook extends {projectEach: (snapshot: infer TSnapshot) => readonly (infer TData)[]}\n ? {snapshot: TSnapshot; data: TData}\n : never;\ntype HookSends<THook> = THook extends {\n sends: infer TSends extends Record<string, TransitionEventCreator>;\n} ? TSends : Record<never, TransitionEventCreator>;\ntype TransitionForHook<THook, TElement = unknown> = THook extends unknown\n ? HookProjection<THook> extends {\n snapshot: MachineSnapshot<infer _TContext, infer TProps>;\n data: infer TData;\n } ? TransitionContext<TProps, TData, TElement, HookSends<THook>> : never\n : never;\n\ntype TransitionRegistration<TProps, TElement> = {\n name: string;\n el: TElement;\n callback: TransitionCallback<TProps, unknown, TElement>;\n};\n\ntype TransitionCoordinatorOptions<TContext, TProps, TElement> = {\n machine: Machine<TContext, TProps>;\n hooks: readonly AnyTransitionHook<TContext, TProps>[];\n root?: TElement;\n resolveElement?: TransitionElementResolver<TElement>;\n};\n\ntype TransitionElementResolver<TElement> = (scope: Readonly<{\n name: string;\n data: unknown;\n root: TElement;\n registrationEl: TElement;\n}>) => TElement | null | undefined;\n\ntype TransitionCoordinator<TProps, TElement = unknown> = {\n register<TData>(registration: {\n name: string;\n el: TElement;\n callback: TransitionCallback<TProps, TData, TElement>;\n }): () => void;\n destroy(): void;\n};\n\ntype DefineHook = {\n <const TDefinition extends TransitionHookShape>(definition: TDefinition): TDefinition;\n <\n TContext,\n TProps,\n TData,\n const TName extends string,\n const TSends extends Record<string, TransitionEventCreator> = Record<string, TransitionEventCreator>,\n >(definition: TransitionHookDefinition<TContext, TProps, TData, TName, TSends>): typeof definition;\n};\n\nconst defineHook = ((definition: TransitionHookShape): TransitionHookShape => {\n if ((definition.project === undefined) === (definition.projectEach === undefined)) {\n throw new Error(`Transition hook ${definition.name} requires exactly one projection.`);\n }\n return Object.freeze(definition);\n}) as DefineHook;\n\nconst statePaths = (value: MachineStateValue): readonly string[] => (\n typeof value === 'string' ? [value] : value\n);\n\nconst commonPrefixLength = (left: string, right: string): number => {\n const leftParts = left.split('.');\n const rightParts = right.split('.');\n let index = 0;\n while (leftParts[index] !== undefined && leftParts[index] === rightParts[index]) index += 1;\n return index;\n};\n\nconst closestStatePath = (value: MachineStateValue, enteredPath: string): string => {\n const paths = statePaths(value);\n return [...paths].sort((left, right) => (\n commonPrefixLength(right, enteredPath) - commonPrefixLength(left, enteredPath)\n ))[0] ?? enteredPath;\n};\n\nconst createTransitionCoordinator = <TContext, TProps, TElement = unknown>({\n machine,\n hooks,\n root: ownerRoot,\n resolveElement,\n}: TransitionCoordinatorOptions<TContext, TProps, TElement>): TransitionCoordinator<TProps, TElement> => {\n const hooksByName = new Map(hooks.map((hook) => [hook.name, hook]));\n const hooksByState = new Map<string, AnyTransitionHook<TContext, TProps>[]>();\n const registrations = new Map<string, TransitionRegistration<TProps, TElement>[]>();\n const activeRuns = new Set<{entry: MachineEntry<TContext, TProps>; controller: AbortController}>();\n let destroyed = false;\n\n if (hooksByName.size !== hooks.length) throw new Error('Transition hook names must be unique.');\n hooks.forEach((hook) => {\n const grouped = hooksByState.get(hook.state) ?? [];\n const first = grouped[0];\n if (first && (first.onDone !== hook.onDone || first.onError !== hook.onError)) {\n throw new Error(`Transition hooks sharing ${hook.state} must use the same continuations.`);\n }\n grouped.push(hook);\n hooksByState.set(hook.state, grouped);\n });\n\n const isActive = (entry: MachineEntry<TContext, TProps>): boolean => (\n !destroyed && machine.getSnapshot().generations[entry.path] === entry.generation\n );\n\n const continuation = (\n entry: MachineEntry<TContext, TProps>,\n type: string,\n detail: Record<string, unknown> = {},\n ): void => {\n machine.send({\n type,\n ...detail,\n __state: entry.path,\n __generation: entry.generation,\n });\n };\n\n const projections = (\n hook: AnyTransitionHook<TContext, TProps>,\n snapshot: MachineSnapshot<TContext, TProps>,\n ): readonly unknown[] => hook.projectEach?.(snapshot) ?? [hook.project?.(snapshot)];\n\n const runQueue = (\n entry: MachineEntry<TContext, TProps>,\n hook: AnyTransitionHook<TContext, TProps>,\n data: unknown,\n queue: TransitionRegistration<TProps, TElement>[],\n signal: AbortSignal,\n index = 0,\n ): void | Promise<void> => {\n for (let cursor = index; cursor < queue.length; cursor += 1) {\n if (!isActive(entry)) return;\n const registration = queue[cursor] as TransitionRegistration<TProps, TElement>;\n const root = ownerRoot ?? registration.el;\n const resolved = resolveElement?.({\n name: hook.name,\n data,\n root,\n registrationEl: registration.el,\n });\n if (resolved === null) return;\n const el = resolved ?? registration.el;\n const send = machine.send.bind(machine) as TransitionSend;\n Object.entries(hook.sends ?? {}).forEach(([name, createEvent]) => {\n send[name] = (...args: unknown[]) => machine.send(createEvent(...args as never[]));\n });\n const transition = Object.freeze({\n el,\n root,\n from: closestStatePath(entry.from, entry.path),\n to: entry.path,\n event: Object.freeze({...entry.event}),\n props: cloneSerializable(entry.snapshot.props),\n data: cloneSerializable(data),\n send,\n signal,\n }) as TransitionContext<TProps, unknown, TElement>;\n const result = registration.callback(transition);\n if (isPromiseLike(result)) {\n return Promise.resolve(result).then(() => runQueue(entry, hook, data, queue, signal, cursor + 1));\n }\n }\n };\n\n const runEntry = (entry: MachineEntry<TContext, TProps>): void => {\n const groupedHooks = hooksByState.get(entry.path);\n if (!groupedHooks) return;\n const results: Array<void | Promise<void>> = [];\n const errors: unknown[] = [];\n const controller = new AbortController();\n const activeRun = {entry, controller};\n activeRuns.add(activeRun);\n\n groupedHooks.forEach((hook) => {\n const queue = [...registrations.get(hook.name) ?? []];\n if (queue.length === 0) {\n if (hook.required) errors.push(new Error(`Transition hook ${hook.name} requires a registered callback.`));\n return;\n }\n projections(hook, entry.snapshot).forEach((data) => {\n try {\n results.push(runQueue(entry, hook, data, queue, controller.signal));\n } catch (error) {\n errors.push(error);\n }\n });\n });\n\n const first = groupedHooks[0] as AnyTransitionHook<TContext, TProps>;\n const finish = (asyncErrors: unknown[] = []): void => {\n activeRuns.delete(activeRun);\n if (!isActive(entry)) return;\n const failure = [...errors, ...asyncErrors][0];\n if (failure !== undefined) {\n continuation(entry, first.onError, {error: failure});\n } else {\n continuation(entry, first.onDone);\n }\n };\n const pending = results.filter(isPromiseLike);\n if (pending.length === 0) {\n finish();\n return;\n }\n void Promise.allSettled(pending).then((settled) => finish(settled.flatMap((result) => (\n result.status === 'rejected' ? [result.reason] : []\n ))));\n };\n\n const unsubscribe = machine.subscribeEntries((entry) => {\n runEntry(entry);\n });\n const unsubscribeSnapshot = machine.subscribe(() => {\n activeRuns.forEach((run) => {\n if (isActive(run.entry)) return;\n run.controller.abort();\n activeRuns.delete(run);\n });\n });\n\n return {\n register<TData>({name, el, callback}: {\n name: string;\n el: TElement;\n callback: TransitionCallback<TProps, TData, TElement>;\n }): () => void {\n if (destroyed) throw new Error('Transition coordinator has been destroyed.');\n if (!hooksByName.has(name)) throw new Error(`Unknown transition hook: ${name}`);\n\n const registration: TransitionRegistration<TProps, TElement> = {\n name,\n el,\n callback: callback as TransitionCallback<TProps, unknown, TElement>,\n };\n const queue = registrations.get(name) ?? [];\n queue.push(registration);\n registrations.set(name, queue);\n\n return () => {\n const current = registrations.get(name);\n if (!current) return;\n const index = current.indexOf(registration);\n if (index >= 0) current.splice(index, 1);\n if (current.length === 0) registrations.delete(name);\n };\n },\n destroy(): void {\n if (destroyed) return;\n destroyed = true;\n unsubscribe();\n unsubscribeSnapshot();\n activeRuns.forEach((run) => run.controller.abort());\n activeRuns.clear();\n registrations.clear();\n },\n };\n};\n\nexport {createTransitionCoordinator, defineHook};\nexport type {\n AnyTransitionHook,\n TransitionCallback,\n TransitionContext,\n TransitionCoordinator,\n TransitionCoordinatorOptions,\n TransitionEventCreator,\n TransitionForHook,\n TransitionSend,\n TransitionElementResolver,\n TransitionHookDefinition,\n};\n","import type Alpine from 'alpinejs';\n\nimport {\n decodeProps,\n dataAttributeForSchemaProp,\n type CodecFn,\n type PropChange,\n type SchemaToProps,\n} from './codecs';\nimport {\n createTransitionCoordinator,\n type AnyTransitionHook,\n type TransitionCallback,\n type TransitionCoordinator,\n type TransitionForHook,\n} from './transition-coordinator';\nimport type {Machine, MachineEvent, MachineSnapshot} from './state-machine';\nimport {isSerializableEqual} from '../utils';\n\ntype MachineElement = HTMLElement & Alpine.ElementWithXAttributes;\ntype MachineSchema = Record<string, CodecFn<unknown>>;\ntype MachineProps<TSchema extends MachineSchema> = SchemaToProps<TSchema>;\ntype TransitionHookLike = {\n name: string;\n state: string;\n project?: (...args: never[]) => unknown;\n projectEach?: (...args: never[]) => readonly unknown[];\n onDone: string;\n onError: string;\n};\ntype HookName<THooks extends readonly {name: string}[]> = THooks[number]['name'];\ntype HookForName<THooks, TName> = Extract<THooks extends readonly unknown[] ? THooks[number] : never, {name: TName}>;\n\ntype AlpinePropsChangedEvent<TSchema extends MachineSchema> = {\n type: 'PROPS_CHANGED';\n props: MachineProps<TSchema>;\n changes: Array<PropChange<TSchema>>;\n};\n\ntype MachineFactoryScope<TSchema extends MachineSchema> = {\n el: MachineElement;\n props: MachineProps<TSchema>;\n};\n\ntype CreateAlpineMachineOptions<\n TContext,\n TSchema extends MachineSchema,\n THooks extends readonly TransitionHookLike[],\n> = {\n schema: TSchema;\n hooks: THooks;\n createMachine(scope: MachineFactoryScope<TSchema>): Machine<TContext, MachineProps<TSchema>>;\n resolveTransitionElement?(scope: Readonly<{\n name: string;\n data: unknown;\n root: MachineElement;\n registrationEl: MachineElement;\n }>): MachineElement | null | undefined;\n};\n\ntype AlpineMachineOwner<TProps = unknown> = {\n invalidateDom(): void;\n onTransition<TData>(\n name: string,\n callback: TransitionCallback<TProps, TData, MachineElement>,\n el?: MachineElement,\n ): () => void;\n};\n\ntype AlpineMachine<\n TContext,\n TProps,\n THooks extends readonly TransitionHookLike[],\n> = Omit<AlpineMachineOwner<TProps>, 'onTransition'> & {\n snapshot: {current: MachineSnapshot<TContext, TProps> | null};\n connect(\n el: MachineElement,\n snapshot?: {current: MachineSnapshot<TContext, TProps> | null},\n ): void;\n disconnect(): void;\n getSnapshot(): MachineSnapshot<TContext, TProps>;\n getCommittedSnapshot(): MachineSnapshot<TContext, TProps>;\n send(event: MachineEvent): void;\n matches(state: string): boolean;\n hasTag(tag: string): boolean;\n onTransition<TName extends HookName<THooks>>(\n name: TName,\n callback: (transition: TransitionForHook<HookForName<THooks, TName>, MachineElement>) => unknown | Promise<unknown>,\n el?: MachineElement,\n ): () => void;\n};\n\ntype PendingTransition<TProps> = {\n name: string;\n callback: TransitionCallback<TProps, unknown, MachineElement>;\n el?: MachineElement;\n unregister?: () => void;\n active: boolean;\n};\n\nconst alpineMachineOwner = Symbol.for('trellis-ui.alpine-machine-owner');\nconst owners = new WeakMap<Element, AlpineMachineOwner>();\n\nconst findAlpineMachineOwner = (\n AlpineInstance: Alpine.Alpine,\n el: Element,\n): AlpineMachineOwner | undefined => {\n const dataStack = typeof AlpineInstance.closestDataStack === 'function'\n ? AlpineInstance.closestDataStack(el as Alpine.ElementWithXAttributes)\n : [];\n const scopedOwner = dataStack.find((scope) => Reflect.get(scope, alpineMachineOwner) === true);\n if (scopedOwner) return scopedOwner as AlpineMachineOwner;\n\n const owner = AlpineInstance.findClosest(el, (candidate) => owners.has(candidate));\n return owner ? owners.get(owner) : undefined;\n};\n\nconst createAlpineMachine = <\n TContext,\n TSchema extends MachineSchema,\n const THooks extends readonly TransitionHookLike[],\n>({\n schema,\n hooks,\n createMachine: machineFactory,\n resolveTransitionElement,\n}: CreateAlpineMachineOptions<TContext, TSchema, THooks>): AlpineMachine<TContext, MachineProps<TSchema>, THooks> => {\n type TProps = MachineProps<TSchema>;\n\n const snapshot: {current: MachineSnapshot<TContext, TProps> | null} = {current: null};\n let snapshotMirror = snapshot;\n const pending: PendingTransition<TProps>[] = [];\n let root: MachineElement | null = null;\n let machine: Machine<TContext, TProps> | null = null;\n let coordinator: TransitionCoordinator<TProps, MachineElement> | null = null;\n let observer: MutationObserver | null = null;\n let unsubscribeSnapshot: (() => void) | null = null;\n let destroyed = false;\n\n const requireMachine = (): Machine<TContext, TProps> => {\n if (!machine) throw new Error('Alpine machine has not been initialized.');\n return machine;\n };\n\n const registerPending = (registration: PendingTransition<TProps>): void => {\n if (!coordinator || !root || !registration.active) return;\n registration.unregister = coordinator.register({\n name: registration.name,\n el: registration.el ?? root,\n callback: registration.callback,\n });\n };\n\n const component: AlpineMachine<TContext, TProps, THooks> = {\n snapshot,\n invalidateDom(): void {\n if (destroyed || !machine) return;\n machine.send('DOM_INVALIDATED');\n },\n connect(el, reactiveSnapshot = snapshot): void {\n if (destroyed) throw new Error('Alpine machine has been destroyed.');\n if (machine) return;\n\n root = el;\n snapshotMirror = reactiveSnapshot;\n let props = decodeProps({el: root, schema});\n const createdMachine = machineFactory({el: root, props});\n let createdCoordinator: TransitionCoordinator<TProps, MachineElement>;\n try {\n createdCoordinator = createTransitionCoordinator<TContext, TProps, MachineElement>({\n machine: createdMachine,\n hooks: hooks as unknown as readonly AnyTransitionHook<TContext, TProps>[],\n root,\n ...(resolveTransitionElement ? {resolveElement: resolveTransitionElement} : {}),\n });\n } catch (error) {\n createdMachine.stop();\n root = null;\n throw error;\n }\n machine = createdMachine;\n coordinator = createdCoordinator;\n snapshotMirror.current = machine.getSnapshot();\n unsubscribeSnapshot = machine.subscribe((nextSnapshot) => {\n snapshotMirror.current = nextSnapshot;\n });\n owners.set(root, component as unknown as AlpineMachineOwner);\n pending.forEach(registerPending);\n\n const authoritativePropByAttribute = new Map(Object.entries(schema).flatMap(([key, codec]) => codec.meta.attribute ? [[\n dataAttributeForSchemaProp(key, codec),\n key as keyof TProps & string,\n ] as const] : []));\n observer = new MutationObserver((mutations) => {\n if (!root || !machine) return;\n const touched = new Set(mutations.flatMap(({attributeName}) => {\n const key = attributeName ? authoritativePropByAttribute.get(attributeName) : undefined;\n return key ? [key] : [];\n }));\n const nextProps = decodeProps({el: root, schema});\n const changes = Object.keys(nextProps).flatMap((key) => {\n const typedKey = key as keyof TProps & string;\n if (!touched.has(typedKey) && isSerializableEqual(props[typedKey], nextProps[typedKey])) return [];\n return [{\n key: typedKey,\n previous: props[typedKey],\n value: nextProps[typedKey],\n source: 'attribute' as const,\n } as PropChange<TSchema>];\n });\n if (changes.length === 0) return;\n props = nextProps;\n machine.send({type: 'PROPS_CHANGED', props: nextProps, changes});\n });\n observer.observe(root, {\n attributes: true,\n attributeFilter: Object.entries(schema).map(([key, codec]) => dataAttributeForSchemaProp(key, codec)),\n });\n },\n disconnect(): void {\n if (destroyed) return;\n destroyed = true;\n observer?.disconnect();\n observer = null;\n unsubscribeSnapshot?.();\n unsubscribeSnapshot = null;\n coordinator?.destroy();\n coordinator = null;\n machine?.stop();\n machine = null;\n if (root) owners.delete(root);\n Reflect.deleteProperty(component, alpineMachineOwner);\n root = null;\n pending.splice(0).forEach((registration) => registration.unregister?.());\n snapshotMirror.current = null;\n snapshotMirror = snapshot;\n },\n getSnapshot(): MachineSnapshot<TContext, TProps> {\n const current = snapshotMirror.current;\n if (!current) throw new Error('Alpine machine has not been initialized.');\n return current;\n },\n getCommittedSnapshot(): MachineSnapshot<TContext, TProps> {\n return requireMachine().getSnapshot();\n },\n send(event): void {\n requireMachine().send(event);\n },\n matches(state): boolean {\n return requireMachine().matches(state);\n },\n hasTag(tag): boolean {\n return requireMachine().hasTag(tag);\n },\n onTransition<TName extends HookName<THooks>>(\n name: TName,\n callback: (transition: TransitionForHook<HookForName<THooks, TName>, MachineElement>) => unknown | Promise<unknown>,\n el?: MachineElement,\n ): () => void {\n if (destroyed) throw new Error('Alpine machine has been destroyed.');\n const registration: PendingTransition<TProps> = {\n name,\n callback: callback as TransitionCallback<TProps, unknown, MachineElement>,\n active: true,\n };\n if (el) registration.el = el;\n pending.push(registration);\n registerPending(registration);\n\n return () => {\n if (!registration.active) return;\n registration.active = false;\n registration.unregister?.();\n delete registration.unregister;\n const index = pending.indexOf(registration);\n if (index >= 0) pending.splice(index, 1);\n };\n },\n };\n\n Reflect.defineProperty(component, alpineMachineOwner, {\n value: true,\n configurable: true,\n });\n return component;\n};\n\nexport {createAlpineMachine, findAlpineMachineOwner};\nexport type {\n AlpineMachine,\n AlpineMachineOwner,\n AlpinePropsChangedEvent,\n CreateAlpineMachineOptions,\n MachineFactoryScope,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"alpine-machine-BTDXpEr6.js","names":[],"sources":["../../../../../../../../client/src/utils/object.ts","../../../../../../../../client/src/runtime/transition-coordinator.ts","../../../../../../../../client/src/runtime/alpine-machine.ts"],"sourcesContent":["const isRecord = (value: unknown): value is Record<string, unknown> => (\n typeof value === 'object'\n && value !== null\n && !(value instanceof FormData)\n && !(value instanceof URLSearchParams)\n && !(value instanceof HTMLFormElement)\n && !(value instanceof Blob)\n && !(value instanceof ArrayBuffer)\n);\n\nconst cloneSerializable = <T>(value: T): T => structuredClone(value);\n\nconst isSerializableEqual = (left: unknown, right: unknown): boolean => {\n if (Object.is(left, right)) return true;\n if (Array.isArray(left) || Array.isArray(right)) {\n return Array.isArray(left)\n && Array.isArray(right)\n && left.length === right.length\n && left.every((value, index) => isSerializableEqual(value, right[index]));\n }\n if (!isRecord(left) || !isRecord(right)) return false;\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n return leftKeys.length === rightKeys.length\n && leftKeys.every((key) => Object.hasOwn(right, key) && isSerializableEqual(left[key], right[key]));\n};\n\nconst isPromiseLike = (value: unknown): value is PromiseLike<unknown> => (\n value !== null\n && (typeof value === 'object' || typeof value === 'function')\n && 'then' in value\n && typeof value.then === 'function'\n);\n\nexport {cloneSerializable, isPromiseLike, isRecord, isSerializableEqual};\n","import type {\n Machine,\n MachineEntry,\n MachineEvent,\n MachineEventObject,\n MachineSnapshot,\n MachineStateValue,\n} from './state-machine';\nimport {cloneSerializable, isPromiseLike} from '../utils';\n\ntype TransitionEventCreator = (...args: never[]) => MachineEvent;\ntype TransitionSend<\n TSends extends Record<string, TransitionEventCreator> = Record<string, TransitionEventCreator>,\n> = ((event: MachineEvent) => void) & (\n string extends keyof TSends\n ? {[name: string]: ((...args: unknown[]) => void) | undefined}\n : {[TName in keyof TSends]: (...args: Parameters<TSends[TName]>) => void}\n);\n\ntype TransitionHookDefinition<\n TContext,\n TProps,\n TData,\n TName extends string = string,\n TSends extends Record<string, TransitionEventCreator> = Record<string, TransitionEventCreator>,\n> = Readonly<{\n name: TName;\n state: string;\n onDone: string;\n onError: string;\n required?: boolean;\n sends?: TSends;\n project?: (snapshot: MachineSnapshot<TContext, TProps>) => TData;\n projectEach?: (snapshot: MachineSnapshot<TContext, TProps>) => readonly TData[];\n}>;\n\ntype AnyTransitionHook<TContext, TProps> = TransitionHookDefinition<TContext, TProps, unknown>;\n\ntype TransitionHookShape = Readonly<{\n name: string;\n state: string;\n onDone: string;\n onError: string;\n required?: boolean;\n sends?: Record<string, TransitionEventCreator>;\n project?: (...args: never[]) => unknown;\n projectEach?: (...args: never[]) => readonly unknown[];\n}>;\n\ntype TransitionContext<\n TProps,\n TData,\n TElement = unknown,\n TSends extends Record<string, TransitionEventCreator> = Record<string, TransitionEventCreator>,\n> = Readonly<{\n el: TElement;\n root: TElement;\n from: string;\n to: string;\n event: MachineEventObject;\n props: TProps;\n data: TData;\n send: TransitionSend<TSends>;\n signal: AbortSignal;\n}>;\n\ntype TransitionCallback<\n TProps,\n TData,\n TElement = unknown,\n TSends extends Record<string, TransitionEventCreator> = Record<string, TransitionEventCreator>,\n> = (\n transition: TransitionContext<TProps, TData, TElement, TSends>,\n) => unknown | Promise<unknown>;\n\ntype HookProjection<THook> = THook extends {project: (snapshot: infer TSnapshot) => infer TData}\n ? {snapshot: TSnapshot; data: TData}\n : THook extends {projectEach: (snapshot: infer TSnapshot) => readonly (infer TData)[]}\n ? {snapshot: TSnapshot; data: TData}\n : never;\ntype HookSends<THook> = THook extends {\n sends: infer TSends extends Record<string, TransitionEventCreator>;\n} ? TSends : Record<never, TransitionEventCreator>;\ntype TransitionForHook<THook, TElement = unknown> = THook extends unknown\n ? HookProjection<THook> extends {\n snapshot: MachineSnapshot<infer _TContext, infer TProps>;\n data: infer TData;\n } ? TransitionContext<TProps, TData, TElement, HookSends<THook>> : never\n : never;\n\ntype TransitionRegistration<TProps, TElement> = {\n name: string;\n el: TElement;\n callback: TransitionCallback<TProps, unknown, TElement>;\n};\n\ntype TransitionCoordinatorOptions<TContext, TProps, TElement> = {\n machine: Machine<TContext, TProps>;\n hooks: readonly AnyTransitionHook<TContext, TProps>[];\n root?: TElement;\n resolveElement?: TransitionElementResolver<TElement>;\n};\n\ntype TransitionElementResolver<TElement> = (scope: Readonly<{\n name: string;\n data: unknown;\n root: TElement;\n registrationEl: TElement;\n}>) => TElement | null | undefined;\n\ntype TransitionCoordinator<TProps, TElement = unknown> = {\n register<TData>(registration: {\n name: string;\n el: TElement;\n callback: TransitionCallback<TProps, TData, TElement>;\n }): () => void;\n destroy(): void;\n};\n\ntype DefineHook = {\n <const TDefinition extends TransitionHookShape>(definition: TDefinition): TDefinition;\n <\n TContext,\n TProps,\n TData,\n const TName extends string,\n const TSends extends Record<string, TransitionEventCreator> = Record<string, TransitionEventCreator>,\n >(definition: TransitionHookDefinition<TContext, TProps, TData, TName, TSends>): typeof definition;\n};\n\nconst defineHook = ((definition: TransitionHookShape): TransitionHookShape => {\n if ((definition.project === undefined) === (definition.projectEach === undefined)) {\n throw new Error(`Transition hook ${definition.name} requires exactly one projection.`);\n }\n return Object.freeze(definition);\n}) as DefineHook;\n\nconst statePaths = (value: MachineStateValue): readonly string[] => (\n typeof value === 'string' ? [value] : value\n);\n\nconst commonPrefixLength = (left: string, right: string): number => {\n const leftParts = left.split('.');\n const rightParts = right.split('.');\n let index = 0;\n while (leftParts[index] !== undefined && leftParts[index] === rightParts[index]) index += 1;\n return index;\n};\n\nconst closestStatePath = (value: MachineStateValue, enteredPath: string): string => {\n const paths = statePaths(value);\n return [...paths].sort((left, right) => (\n commonPrefixLength(right, enteredPath) - commonPrefixLength(left, enteredPath)\n ))[0] ?? enteredPath;\n};\n\nconst createTransitionCoordinator = <TContext, TProps, TElement = unknown>({\n machine,\n hooks,\n root: ownerRoot,\n resolveElement,\n}: TransitionCoordinatorOptions<TContext, TProps, TElement>): TransitionCoordinator<TProps, TElement> => {\n const hooksByName = new Map(hooks.map((hook) => [hook.name, hook]));\n const hooksByState = new Map<string, AnyTransitionHook<TContext, TProps>[]>();\n const registrations = new Map<string, TransitionRegistration<TProps, TElement>[]>();\n const activeRuns = new Set<{entry: MachineEntry<TContext, TProps>; controller: AbortController}>();\n let destroyed = false;\n\n if (hooksByName.size !== hooks.length) throw new Error('Transition hook names must be unique.');\n hooks.forEach((hook) => {\n const grouped = hooksByState.get(hook.state) ?? [];\n const first = grouped[0];\n if (first && (first.onDone !== hook.onDone || first.onError !== hook.onError)) {\n throw new Error(`Transition hooks sharing ${hook.state} must use the same continuations.`);\n }\n grouped.push(hook);\n hooksByState.set(hook.state, grouped);\n });\n\n const isActive = (entry: MachineEntry<TContext, TProps>): boolean => (\n !destroyed && machine.getSnapshot().generations[entry.path] === entry.generation\n );\n\n const continuation = (\n entry: MachineEntry<TContext, TProps>,\n type: string,\n detail: Record<string, unknown> = {},\n ): void => {\n machine.send({\n type,\n ...detail,\n __state: entry.path,\n __generation: entry.generation,\n });\n };\n\n const projections = (\n hook: AnyTransitionHook<TContext, TProps>,\n snapshot: MachineSnapshot<TContext, TProps>,\n ): readonly unknown[] => hook.projectEach?.(snapshot) ?? [hook.project?.(snapshot)];\n\n const runQueue = (\n entry: MachineEntry<TContext, TProps>,\n hook: AnyTransitionHook<TContext, TProps>,\n data: unknown,\n queue: TransitionRegistration<TProps, TElement>[],\n signal: AbortSignal,\n index = 0,\n ): void | Promise<void> => {\n for (let cursor = index; cursor < queue.length; cursor += 1) {\n if (!isActive(entry)) return;\n const registration = queue[cursor] as TransitionRegistration<TProps, TElement>;\n const root = ownerRoot ?? registration.el;\n const resolved = resolveElement?.({\n name: hook.name,\n data,\n root,\n registrationEl: registration.el,\n });\n if (resolved === null) return;\n const el = resolved ?? registration.el;\n const send = machine.send.bind(machine) as TransitionSend;\n Object.entries(hook.sends ?? {}).forEach(([name, createEvent]) => {\n send[name] = (...args: unknown[]) => machine.send(createEvent(...args as never[]));\n });\n const transition = Object.freeze({\n el,\n root,\n from: closestStatePath(entry.from, entry.path),\n to: entry.path,\n event: Object.freeze({...entry.event}),\n props: cloneSerializable(entry.snapshot.props),\n data: cloneSerializable(data),\n send,\n signal,\n }) as TransitionContext<TProps, unknown, TElement>;\n const result = registration.callback(transition);\n if (isPromiseLike(result)) {\n return Promise.resolve(result).then(() => runQueue(entry, hook, data, queue, signal, cursor + 1));\n }\n }\n };\n\n const runEntry = (entry: MachineEntry<TContext, TProps>): void => {\n const groupedHooks = hooksByState.get(entry.path);\n if (!groupedHooks) return;\n const results: Array<void | Promise<void>> = [];\n const errors: unknown[] = [];\n const controller = new AbortController();\n const activeRun = {entry, controller};\n activeRuns.add(activeRun);\n\n groupedHooks.forEach((hook) => {\n const queue = [...registrations.get(hook.name) ?? []];\n if (queue.length === 0) {\n if (hook.required) errors.push(new Error(`Transition hook ${hook.name} requires a registered callback.`));\n return;\n }\n projections(hook, entry.snapshot).forEach((data) => {\n try {\n results.push(runQueue(entry, hook, data, queue, controller.signal));\n } catch (error) {\n errors.push(error);\n }\n });\n });\n\n const first = groupedHooks[0] as AnyTransitionHook<TContext, TProps>;\n const finish = (asyncErrors: unknown[] = []): void => {\n activeRuns.delete(activeRun);\n if (!isActive(entry)) return;\n const failure = [...errors, ...asyncErrors][0];\n if (failure !== undefined) {\n continuation(entry, first.onError, {error: failure});\n } else {\n continuation(entry, first.onDone);\n }\n };\n const pending = results.filter(isPromiseLike);\n if (pending.length === 0) {\n finish();\n return;\n }\n void Promise.allSettled(pending).then((settled) => finish(settled.flatMap((result) => (\n result.status === 'rejected' ? [result.reason] : []\n ))));\n };\n\n const unsubscribe = machine.subscribeEntries((entry) => {\n runEntry(entry);\n });\n const unsubscribeSnapshot = machine.subscribe(() => {\n activeRuns.forEach((run) => {\n if (isActive(run.entry)) return;\n run.controller.abort();\n activeRuns.delete(run);\n });\n });\n\n return {\n register<TData>({name, el, callback}: {\n name: string;\n el: TElement;\n callback: TransitionCallback<TProps, TData, TElement>;\n }): () => void {\n if (destroyed) throw new Error('Transition coordinator has been destroyed.');\n if (!hooksByName.has(name)) throw new Error(`Unknown transition hook: ${name}`);\n\n const registration: TransitionRegistration<TProps, TElement> = {\n name,\n el,\n callback: callback as TransitionCallback<TProps, unknown, TElement>,\n };\n const queue = registrations.get(name) ?? [];\n queue.push(registration);\n registrations.set(name, queue);\n\n return () => {\n const current = registrations.get(name);\n if (!current) return;\n const index = current.indexOf(registration);\n if (index >= 0) current.splice(index, 1);\n if (current.length === 0) registrations.delete(name);\n };\n },\n destroy(): void {\n if (destroyed) return;\n destroyed = true;\n unsubscribe();\n unsubscribeSnapshot();\n activeRuns.forEach((run) => run.controller.abort());\n activeRuns.clear();\n registrations.clear();\n },\n };\n};\n\nexport {createTransitionCoordinator, defineHook};\nexport type {\n AnyTransitionHook,\n TransitionCallback,\n TransitionContext,\n TransitionCoordinator,\n TransitionCoordinatorOptions,\n TransitionEventCreator,\n TransitionForHook,\n TransitionSend,\n TransitionElementResolver,\n TransitionHookDefinition,\n};\n","import type Alpine from 'alpinejs';\n\nimport {\n decodeProps,\n dataAttributeForSchemaProp,\n type CodecFn,\n type PropChange,\n type SchemaToProps,\n} from './codecs';\nimport {\n createTransitionCoordinator,\n type AnyTransitionHook,\n type TransitionCallback,\n type TransitionCoordinator,\n type TransitionForHook,\n} from './transition-coordinator';\nimport type {Machine, MachineEvent, MachineSnapshot} from './state-machine';\nimport {isSerializableEqual} from '../utils';\n\ntype MachineElement = HTMLElement & Alpine.ElementWithXAttributes;\ntype MachineSchema = Record<string, CodecFn<unknown>>;\ntype MachineProps<TSchema extends MachineSchema> = SchemaToProps<TSchema>;\ntype TransitionHookLike = {\n name: string;\n state: string;\n project?: (...args: never[]) => unknown;\n projectEach?: (...args: never[]) => readonly unknown[];\n onDone: string;\n onError: string;\n};\ntype HookName<THooks extends readonly {name: string}[]> = THooks[number]['name'];\ntype HookForName<THooks, TName> = Extract<THooks extends readonly unknown[] ? THooks[number] : never, {name: TName}>;\n\ntype AlpinePropsChangedEvent<TSchema extends MachineSchema> = {\n type: 'PROPS_CHANGED';\n props: MachineProps<TSchema>;\n changes: Array<PropChange<TSchema>>;\n};\n\ntype MachineFactoryScope<TSchema extends MachineSchema> = {\n el: MachineElement;\n props: MachineProps<TSchema>;\n};\n\ntype CreateAlpineMachineOptions<\n TContext,\n TSchema extends MachineSchema,\n THooks extends readonly TransitionHookLike[],\n> = {\n schema: TSchema;\n hooks: THooks;\n createMachine(scope: MachineFactoryScope<TSchema>): Machine<TContext, MachineProps<TSchema>>;\n resolveTransitionElement?(scope: Readonly<{\n name: string;\n data: unknown;\n root: MachineElement;\n registrationEl: MachineElement;\n }>): MachineElement | null | undefined;\n};\n\ntype AlpineMachineOwner<TProps = unknown> = {\n invalidateDom(): void;\n onTransition<TData>(\n name: string,\n callback: TransitionCallback<TProps, TData, MachineElement>,\n el?: MachineElement,\n ): () => void;\n};\n\ntype AlpineMachine<\n TContext,\n TProps,\n THooks extends readonly TransitionHookLike[],\n> = Omit<AlpineMachineOwner<TProps>, 'onTransition'> & {\n snapshot: {current: MachineSnapshot<TContext, TProps> | null};\n connect(\n el: MachineElement,\n snapshot?: {current: MachineSnapshot<TContext, TProps> | null},\n ): void;\n disconnect(): void;\n getSnapshot(): MachineSnapshot<TContext, TProps>;\n getCommittedSnapshot(): MachineSnapshot<TContext, TProps>;\n send(event: MachineEvent): void;\n matches(state: string): boolean;\n hasTag(tag: string): boolean;\n onTransition<TName extends HookName<THooks>>(\n name: TName,\n callback: (transition: TransitionForHook<HookForName<THooks, TName>, MachineElement>) => unknown | Promise<unknown>,\n el?: MachineElement,\n ): () => void;\n};\n\ntype PendingTransition<TProps> = {\n name: string;\n callback: TransitionCallback<TProps, unknown, MachineElement>;\n el?: MachineElement;\n unregister?: () => void;\n active: boolean;\n};\n\nconst alpineMachineOwner = Symbol.for('trellis-ui.alpine-machine-owner');\nconst owners = new WeakMap<Element, AlpineMachineOwner>();\n\nconst findAlpineMachineOwner = (\n AlpineInstance: Alpine.Alpine,\n el: Element,\n): AlpineMachineOwner | undefined => {\n const dataStack = typeof AlpineInstance.closestDataStack === 'function'\n ? AlpineInstance.closestDataStack(el as Alpine.ElementWithXAttributes)\n : [];\n const scopedOwner = dataStack.find((scope) => Reflect.get(scope, alpineMachineOwner) === true);\n if (scopedOwner) return scopedOwner as AlpineMachineOwner;\n\n const owner = AlpineInstance.findClosest(el, (candidate) => owners.has(candidate));\n return owner ? owners.get(owner) : undefined;\n};\n\nconst createAlpineMachine = <\n TContext,\n TSchema extends MachineSchema,\n const THooks extends readonly TransitionHookLike[],\n>({\n schema,\n hooks,\n createMachine: machineFactory,\n resolveTransitionElement,\n}: CreateAlpineMachineOptions<TContext, TSchema, THooks>): AlpineMachine<TContext, MachineProps<TSchema>, THooks> => {\n type TProps = MachineProps<TSchema>;\n\n const snapshot: {current: MachineSnapshot<TContext, TProps> | null} = {current: null};\n let snapshotMirror = snapshot;\n const pending: PendingTransition<TProps>[] = [];\n let root: MachineElement | null = null;\n let machine: Machine<TContext, TProps> | null = null;\n let coordinator: TransitionCoordinator<TProps, MachineElement> | null = null;\n let observer: MutationObserver | null = null;\n let unsubscribeSnapshot: (() => void) | null = null;\n let destroyed = false;\n\n const requireMachine = (): Machine<TContext, TProps> => {\n if (!machine) throw new Error('Alpine machine has not been initialized.');\n return machine;\n };\n\n const registerPending = (registration: PendingTransition<TProps>): void => {\n if (!coordinator || !root || !registration.active) return;\n registration.unregister = coordinator.register({\n name: registration.name,\n el: registration.el ?? root,\n callback: registration.callback,\n });\n };\n\n const component: AlpineMachine<TContext, TProps, THooks> = {\n snapshot,\n invalidateDom(): void {\n if (destroyed || !machine) return;\n machine.send('DOM_INVALIDATED');\n },\n connect(el, reactiveSnapshot = snapshot): void {\n if (destroyed) throw new Error('Alpine machine has been destroyed.');\n if (machine) return;\n\n root = el;\n snapshotMirror = reactiveSnapshot;\n let props = decodeProps({el: root, schema});\n const createdMachine = machineFactory({el: root, props});\n let createdCoordinator: TransitionCoordinator<TProps, MachineElement>;\n try {\n createdCoordinator = createTransitionCoordinator<TContext, TProps, MachineElement>({\n machine: createdMachine,\n hooks: hooks as unknown as readonly AnyTransitionHook<TContext, TProps>[],\n root,\n ...(resolveTransitionElement ? {resolveElement: resolveTransitionElement} : {}),\n });\n } catch (error) {\n createdMachine.stop();\n root = null;\n throw error;\n }\n machine = createdMachine;\n coordinator = createdCoordinator;\n snapshotMirror.current = machine.getSnapshot();\n unsubscribeSnapshot = machine.subscribe((nextSnapshot) => {\n snapshotMirror.current = nextSnapshot;\n });\n owners.set(root, component as unknown as AlpineMachineOwner);\n pending.forEach(registerPending);\n\n const authoritativePropByAttribute = new Map(Object.entries(schema).flatMap(([key, codec]) => codec.meta.attribute ? [[\n dataAttributeForSchemaProp(key, codec),\n key as keyof TProps & string,\n ] as const] : []));\n observer = new MutationObserver((mutations) => {\n if (!root || !machine) return;\n const touched = new Set(mutations.flatMap(({attributeName}) => {\n const key = attributeName ? authoritativePropByAttribute.get(attributeName) : undefined;\n return key ? [key] : [];\n }));\n const nextProps = decodeProps({el: root, schema});\n const changes = Object.keys(nextProps).flatMap((key) => {\n const typedKey = key as keyof TProps & string;\n if (!touched.has(typedKey) && isSerializableEqual(props[typedKey], nextProps[typedKey])) return [];\n return [{\n key: typedKey,\n previous: props[typedKey],\n value: nextProps[typedKey],\n source: 'attribute' as const,\n } as PropChange<TSchema>];\n });\n if (changes.length === 0) return;\n props = nextProps;\n machine.send({type: 'PROPS_CHANGED', props: nextProps, changes});\n });\n observer.observe(root, {\n attributes: true,\n attributeFilter: Object.entries(schema).map(([key, codec]) => dataAttributeForSchemaProp(key, codec)),\n });\n },\n disconnect(): void {\n if (destroyed) return;\n destroyed = true;\n observer?.disconnect();\n observer = null;\n unsubscribeSnapshot?.();\n unsubscribeSnapshot = null;\n coordinator?.destroy();\n coordinator = null;\n machine?.stop();\n machine = null;\n if (root) owners.delete(root);\n Reflect.deleteProperty(component, alpineMachineOwner);\n root = null;\n pending.splice(0).forEach((registration) => registration.unregister?.());\n snapshotMirror.current = null;\n snapshotMirror = snapshot;\n },\n getSnapshot(): MachineSnapshot<TContext, TProps> {\n const current = snapshotMirror.current;\n if (!current) throw new Error('Alpine machine has not been initialized.');\n return current;\n },\n getCommittedSnapshot(): MachineSnapshot<TContext, TProps> {\n return requireMachine().getSnapshot();\n },\n send(event): void {\n requireMachine().send(event);\n },\n matches(state): boolean {\n return requireMachine().matches(state);\n },\n hasTag(tag): boolean {\n return requireMachine().hasTag(tag);\n },\n onTransition<TName extends HookName<THooks>>(\n name: TName,\n callback: (transition: TransitionForHook<HookForName<THooks, TName>, MachineElement>) => unknown | Promise<unknown>,\n el?: MachineElement,\n ): () => void {\n if (destroyed) throw new Error('Alpine machine has been destroyed.');\n const registration: PendingTransition<TProps> = {\n name,\n callback: callback as TransitionCallback<TProps, unknown, MachineElement>,\n active: true,\n };\n if (el) registration.el = el;\n pending.push(registration);\n registerPending(registration);\n\n return () => {\n if (!registration.active) return;\n registration.active = false;\n registration.unregister?.();\n delete registration.unregister;\n const index = pending.indexOf(registration);\n if (index >= 0) pending.splice(index, 1);\n };\n },\n };\n\n Reflect.defineProperty(component, alpineMachineOwner, {\n value: true,\n configurable: true,\n });\n return component;\n};\n\nexport {createAlpineMachine, findAlpineMachineOwner};\nexport type {\n AlpineMachine,\n AlpineMachineOwner,\n AlpinePropsChangedEvent,\n CreateAlpineMachineOptions,\n MachineFactoryScope,\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e,c as t,d as n,h as r,i,o as a,r as o,t as s}from"./motion-
|
|
2
|
-
//# sourceMappingURL=capability-motion-
|
|
1
|
+
import{a as e,c as t,d as n,h as r,i,o as a,r as o,t as s}from"./motion-C3XtSJ4O.js";import{g as c,n as l,u}from"./ui-BHBokFNi.js";var d=`data-ui-bounds`,f=(e,t)=>{if(!e||typeof t.evaluate!=`function`)return{};let n=t.evaluate(e);return typeof n==`string`?{role:n}:n??{}},p=e=>{e.directive(`ui-bounds`,(e,{expression:n},r)=>{if(!(e instanceof HTMLElement))return;e.setAttribute(d,``),c(e,d);let i=t(e,f(n,r)),a=!1,o=new MutationObserver(t=>{t.every(t=>t.type===`attributes`&&t.target===e&&(t.attributeName===`style`||t.attributeName===`data-ui-bounds`))||a||(a=!0,queueMicrotask(()=>{a=!1,i.refresh()}))});o.observe(e,{attributes:!0,characterData:!0,childList:!0,subtree:!0}),r.cleanup?.(()=>{o.disconnect(),i.destroy(),e.removeAttribute(d)})})},m=t=>t.selector?t.selector:t.target?t.target.startsWith(`#`)?t.target:`#${e(t.target)}`:null,h=e=>{let t=getComputedStyle(e);return[t.overflow,t.overflowX,t.overflowY].some(e=>e&&e!==`visible`)},g=e=>{let t=e.parentElement;for(;t&&t!==document.body&&t!==document.documentElement;){if(h(t))return t;t=t.parentElement}return null},_=e=>e.width===0&&e.height===0&&e.top===0&&e.left===0,v=e=>{let t=g(e);if(!t)return!0;let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();if(_(n)&&_(r))return!0;let i=Math.min(n.height,160);return n.top>=r.top&&n.left<r.right&&n.right>r.left&&n.bottom+i<=r.bottom},y=e=>{let t=[];return e.forEach(e=>{let n=m(e),r=n?document.querySelector(n):null;if(!r)return;let i=[],o=r.getAttribute(`data-ui-motion-key`);if(r.querySelectorAll(`[data-ui-motion-key]`).forEach(e=>{let t=e.getAttribute(`data-ui-motion-key`);if(t&&v(e)){let e=a(t);i.push({from:{selector:e},to:{selector:e}})}}),(o||r.hasAttribute(`data-ui-motion-layout`))&&v(r)){let e=o?a(o):n;i.unshift({from:{selector:e},to:{selector:e}})}t.push(...i)}),t},b=(e,t,i={})=>{let a=i.update;if(!a)return n();let s=y(Array.isArray(t)?t:[t]);if(s.length===0||r(i.reducedMotion))return n(a);let c={...i,preset:`stream`};return i.scope&&i.scope!==`target`&&(c.scope=i.scope),o(a,s,c)},x=new WeakSet,S=e=>{x.has(e)||(x.add(e),p(e),i(()=>e.nextTick()),l(s),u((e,t,n)=>{b(e,t,{scope:`target`,update:n})}))};export{p as n,S as t};
|
|
2
|
+
//# sourceMappingURL=capability-motion-BeZZfCbD.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability-motion-DoZROkFD.js","names":[],"sources":["../../../../../../../../client/src/directives/bounds.ts","../../../../../../../../client/src/motion/stream.ts","../../../../../../../../client/src/capabilities/motion.ts"],"sourcesContent":["import type Alpine from 'alpinejs';\nimport {createBoundsMotion, type BoundsMotionOptions} from '@client/motion/bounds';\nimport type {MotionRoleName} from '@client/motion/recipe';\nimport {declareMorphAttributes} from '@client/runtime/morph';\n\nconst BOUNDS_ATTR = 'data-ui-bounds';\n\nconst readOptions = (expression: string | undefined, utilities: Alpine.DirectiveUtilities): BoundsMotionOptions => {\n if (!expression || typeof utilities.evaluate !== 'function') return {};\n const value = utilities.evaluate(expression) as BoundsMotionOptions | string | undefined;\n return typeof value === 'string' ? {role: value as MotionRoleName} : value ?? {};\n};\n\nconst registerBoundsDirective = (Alpine: Alpine.Alpine): void => {\n Alpine.directive('ui-bounds', (el, {expression}, utilities) => {\n if (!(el instanceof HTMLElement)) return;\n\n el.setAttribute(BOUNDS_ATTR, '');\n declareMorphAttributes(el, BOUNDS_ATTR);\n const bounds = createBoundsMotion(el, readOptions(expression, utilities));\n let scheduled = false;\n const observer = new MutationObserver((records) => {\n if (records.every((record) => record.type === 'attributes'\n && record.target === el\n && (record.attributeName === 'style' || record.attributeName === BOUNDS_ATTR))) return;\n if (scheduled) return;\n scheduled = true;\n queueMicrotask(() => {\n scheduled = false;\n bounds.refresh();\n });\n });\n observer.observe(el, {attributes: true, characterData: true, childList: true, subtree: true});\n\n utilities.cleanup?.(() => {\n observer.disconnect();\n bounds.destroy();\n el.removeAttribute(BOUNDS_ATTR);\n });\n });\n};\n\nexport {BOUNDS_ATTR, registerBoundsDirective};\n","import {animateView, type AnimateViewOptions} from './view';\nimport {cssEscape, keySelector, type MotionTarget, type ViewScope} from './targets';\nimport {noopHandle, type MotionHandle} from './animate';\nimport {shouldReduceMotion, type MotionPreference} from './reduced-motion';\n\ntype StreamPatchLike = {\n html?: string | null;\n target?: string | null;\n selector?: string | null;\n};\n\ntype AnimateStreamPatchOptions = Omit<AnimateViewOptions, 'scope' | 'preset'> & {\n scope?: ViewScope | 'target';\n update?: () => void | Promise<void>;\n reducedMotion?: MotionPreference;\n};\n\nconst targetSelectorForPatch = (patch: StreamPatchLike): string | null => {\n if (patch.selector) return patch.selector;\n if (!patch.target) return null;\n return patch.target.startsWith('#') ? patch.target : `#${cssEscape(patch.target)}`;\n};\n\nconst clipsOverflow = (element: Element): boolean => {\n const style = getComputedStyle(element);\n return [style.overflow, style.overflowX, style.overflowY].some((value) => value && value !== 'visible');\n};\n\nconst nearestClippingAncestor = (element: Element): Element | null => {\n let current = element.parentElement;\n while (current && current !== document.body && current !== document.documentElement) {\n if (clipsOverflow(current)) return current;\n current = current.parentElement;\n }\n return null;\n};\n\nconst isZeroRect = (rect: DOMRect): boolean => (\n rect.width === 0 && rect.height === 0 && rect.top === 0 && rect.left === 0\n);\n\nconst isComfortablyInsideClip = (element: Element): boolean => {\n const clip = nearestClippingAncestor(element);\n if (!clip) return true;\n\n const rect = element.getBoundingClientRect();\n const clipRect = clip.getBoundingClientRect();\n if (isZeroRect(rect) && isZeroRect(clipRect)) return true;\n\n const movementGuard = Math.min(rect.height, 160);\n return (\n rect.top >= clipRect.top\n && rect.left < clipRect.right\n && rect.right > clipRect.left\n && rect.bottom + movementGuard <= clipRect.bottom\n );\n};\n\nconst streamTargetsFromPatches = (patches: StreamPatchLike[]): MotionTarget[] => {\n const targets: MotionTarget[] = [];\n\n patches.forEach((patch) => {\n const selector = targetSelectorForPatch(patch);\n const target = selector ? document.querySelector(selector) : null;\n if (!target) return;\n\n const patchTargets: MotionTarget[] = [];\n const rootKey = target.getAttribute('data-ui-motion-key');\n target.querySelectorAll('[data-ui-motion-key]').forEach((element) => {\n const key = element.getAttribute('data-ui-motion-key');\n if (key && isComfortablyInsideClip(element)) {\n const selector = keySelector(key);\n patchTargets.push({from: {selector}, to: {selector}});\n }\n });\n if ((rootKey || target.hasAttribute('data-ui-motion-layout')) && isComfortablyInsideClip(target)) {\n const rootSelector = rootKey ? keySelector(rootKey) : selector as string;\n patchTargets.unshift({from: {selector: rootSelector}, to: {selector: rootSelector}});\n }\n\n targets.push(...patchTargets);\n });\n\n return targets;\n};\n\nconst animateStreamPatch = <AlpineInstance>(\n _Alpine: AlpineInstance,\n patchOrPatches: StreamPatchLike | StreamPatchLike[],\n options: AnimateStreamPatchOptions = {},\n): MotionHandle => {\n const update = options.update;\n if (!update) return noopHandle();\n\n const patches = Array.isArray(patchOrPatches) ? patchOrPatches : [patchOrPatches];\n const targets = streamTargetsFromPatches(patches);\n if (targets.length === 0 || shouldReduceMotion(options.reducedMotion)) {\n return noopHandle(update);\n }\n\n const viewOptions: AnimateViewOptions = {\n ...options,\n preset: 'stream',\n };\n if (options.scope && options.scope !== 'target') viewOptions.scope = options.scope;\n\n return animateView(update, targets, viewOptions);\n};\n\nexport {animateStreamPatch, streamTargetsFromPatches};\nexport type {AnimateStreamPatchOptions, StreamPatchLike};\n","import type {Alpine as AlpineType} from 'alpinejs';\n\nimport {registerBoundsDirective} from '../directives/bounds';\nimport {motion} from '../motion';\nimport {animateStreamPatch} from '../motion/stream';\nimport {configureViewFlush} from '../motion/view';\nimport {registerStreamPatchAnimator} from '../runtime/engine/stream';\nimport {registerUiMotion} from '../runtime/ui';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerMotionCapability = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerBoundsDirective(AlpineInstance);\n configureViewFlush(() => AlpineInstance.nextTick());\n registerUiMotion(motion);\n registerStreamPatchAnimator((Alpine, patches, update) => {\n animateStreamPatch(Alpine, patches, {scope: 'target', update});\n });\n};\n\nexport {motion, registerBoundsDirective, registerMotionCapability};\nexport type * from '../motion';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"capability-motion-BeZZfCbD.js","names":[],"sources":["../../../../../../../../client/src/directives/bounds.ts","../../../../../../../../client/src/motion/stream.ts","../../../../../../../../client/src/capabilities/motion.ts"],"sourcesContent":["import type Alpine from 'alpinejs';\nimport {createBoundsMotion, type BoundsMotionOptions} from '@client/motion/bounds';\nimport type {MotionRoleName} from '@client/motion/recipe';\nimport {declareMorphAttributes} from '@client/runtime/morph';\n\nconst BOUNDS_ATTR = 'data-ui-bounds';\n\nconst readOptions = (expression: string | undefined, utilities: Alpine.DirectiveUtilities): BoundsMotionOptions => {\n if (!expression || typeof utilities.evaluate !== 'function') return {};\n const value = utilities.evaluate(expression) as BoundsMotionOptions | string | undefined;\n return typeof value === 'string' ? {role: value as MotionRoleName} : value ?? {};\n};\n\nconst registerBoundsDirective = (Alpine: Alpine.Alpine): void => {\n Alpine.directive('ui-bounds', (el, {expression}, utilities) => {\n if (!(el instanceof HTMLElement)) return;\n\n el.setAttribute(BOUNDS_ATTR, '');\n declareMorphAttributes(el, BOUNDS_ATTR);\n const bounds = createBoundsMotion(el, readOptions(expression, utilities));\n let scheduled = false;\n const observer = new MutationObserver((records) => {\n if (records.every((record) => record.type === 'attributes'\n && record.target === el\n && (record.attributeName === 'style' || record.attributeName === BOUNDS_ATTR))) return;\n if (scheduled) return;\n scheduled = true;\n queueMicrotask(() => {\n scheduled = false;\n bounds.refresh();\n });\n });\n observer.observe(el, {attributes: true, characterData: true, childList: true, subtree: true});\n\n utilities.cleanup?.(() => {\n observer.disconnect();\n bounds.destroy();\n el.removeAttribute(BOUNDS_ATTR);\n });\n });\n};\n\nexport {BOUNDS_ATTR, registerBoundsDirective};\n","import {animateView, type AnimateViewOptions} from './view';\nimport {cssEscape, keySelector, type MotionTarget, type ViewScope} from './targets';\nimport {noopHandle, type MotionHandle} from './animate';\nimport {shouldReduceMotion, type MotionPreference} from './reduced-motion';\n\ntype StreamPatchLike = {\n html?: string | null;\n target?: string | null;\n selector?: string | null;\n};\n\ntype AnimateStreamPatchOptions = Omit<AnimateViewOptions, 'scope' | 'preset'> & {\n scope?: ViewScope | 'target';\n update?: () => void | Promise<void>;\n reducedMotion?: MotionPreference;\n};\n\nconst targetSelectorForPatch = (patch: StreamPatchLike): string | null => {\n if (patch.selector) return patch.selector;\n if (!patch.target) return null;\n return patch.target.startsWith('#') ? patch.target : `#${cssEscape(patch.target)}`;\n};\n\nconst clipsOverflow = (element: Element): boolean => {\n const style = getComputedStyle(element);\n return [style.overflow, style.overflowX, style.overflowY].some((value) => value && value !== 'visible');\n};\n\nconst nearestClippingAncestor = (element: Element): Element | null => {\n let current = element.parentElement;\n while (current && current !== document.body && current !== document.documentElement) {\n if (clipsOverflow(current)) return current;\n current = current.parentElement;\n }\n return null;\n};\n\nconst isZeroRect = (rect: DOMRect): boolean => (\n rect.width === 0 && rect.height === 0 && rect.top === 0 && rect.left === 0\n);\n\nconst isComfortablyInsideClip = (element: Element): boolean => {\n const clip = nearestClippingAncestor(element);\n if (!clip) return true;\n\n const rect = element.getBoundingClientRect();\n const clipRect = clip.getBoundingClientRect();\n if (isZeroRect(rect) && isZeroRect(clipRect)) return true;\n\n const movementGuard = Math.min(rect.height, 160);\n return (\n rect.top >= clipRect.top\n && rect.left < clipRect.right\n && rect.right > clipRect.left\n && rect.bottom + movementGuard <= clipRect.bottom\n );\n};\n\nconst streamTargetsFromPatches = (patches: StreamPatchLike[]): MotionTarget[] => {\n const targets: MotionTarget[] = [];\n\n patches.forEach((patch) => {\n const selector = targetSelectorForPatch(patch);\n const target = selector ? document.querySelector(selector) : null;\n if (!target) return;\n\n const patchTargets: MotionTarget[] = [];\n const rootKey = target.getAttribute('data-ui-motion-key');\n target.querySelectorAll('[data-ui-motion-key]').forEach((element) => {\n const key = element.getAttribute('data-ui-motion-key');\n if (key && isComfortablyInsideClip(element)) {\n const selector = keySelector(key);\n patchTargets.push({from: {selector}, to: {selector}});\n }\n });\n if ((rootKey || target.hasAttribute('data-ui-motion-layout')) && isComfortablyInsideClip(target)) {\n const rootSelector = rootKey ? keySelector(rootKey) : selector as string;\n patchTargets.unshift({from: {selector: rootSelector}, to: {selector: rootSelector}});\n }\n\n targets.push(...patchTargets);\n });\n\n return targets;\n};\n\nconst animateStreamPatch = <AlpineInstance>(\n _Alpine: AlpineInstance,\n patchOrPatches: StreamPatchLike | StreamPatchLike[],\n options: AnimateStreamPatchOptions = {},\n): MotionHandle => {\n const update = options.update;\n if (!update) return noopHandle();\n\n const patches = Array.isArray(patchOrPatches) ? patchOrPatches : [patchOrPatches];\n const targets = streamTargetsFromPatches(patches);\n if (targets.length === 0 || shouldReduceMotion(options.reducedMotion)) {\n return noopHandle(update);\n }\n\n const viewOptions: AnimateViewOptions = {\n ...options,\n preset: 'stream',\n };\n if (options.scope && options.scope !== 'target') viewOptions.scope = options.scope;\n\n return animateView(update, targets, viewOptions);\n};\n\nexport {animateStreamPatch, streamTargetsFromPatches};\nexport type {AnimateStreamPatchOptions, StreamPatchLike};\n","import type {Alpine as AlpineType} from 'alpinejs';\n\nimport {registerBoundsDirective} from '../directives/bounds';\nimport {motion} from '../motion';\nimport {animateStreamPatch} from '../motion/stream';\nimport {configureViewFlush} from '../motion/view';\nimport {registerStreamPatchAnimator} from '../runtime/engine/stream';\nimport {registerUiMotion} from '../runtime/ui';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerMotionCapability = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerBoundsDirective(AlpineInstance);\n configureViewFlush(() => AlpineInstance.nextTick());\n registerUiMotion(motion);\n registerStreamPatchAnimator((Alpine, patches, update) => {\n animateStreamPatch(Alpine, patches, {scope: 'target', update});\n });\n};\n\nexport {motion, registerBoundsDirective, registerMotionCapability};\nexport type * from '../motion';\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{n as e,t}from"./focus-handoff-
|
|
2
|
-
//# sourceMappingURL=capability-shortcut-
|
|
1
|
+
import{n as e,t}from"./focus-handoff-BE3g0swK.js";var n=new Set([`alt`,`cmd`,`ctrl`,`meta`,`mod`,`shift`,`super`]),r=new Set([`arrow-down`,`arrow-left`,`arrow-right`,`arrow-up`,`backspace`,`caps-lock`,`delete`,`end`,`enter`,`escape`,`home`,`insert`,`page-down`,`page-up`,`pause`,`scroll-lock`,`space`,`tab`]),i={" ":`space`,"/":`slash`,"?":`slash`,Alt:`alt`,ArrowDown:`arrow-down`,ArrowLeft:`arrow-left`,ArrowRight:`arrow-right`,ArrowUp:`arrow-up`,CapsLock:`caps-lock`,Control:`ctrl`,Meta:`meta`,PageDown:`page-down`,PageUp:`page-up`,ScrollLock:`scroll-lock`,Shift:`shift`},a={alt:`Alt`,backspace:`Backspace`,cmd:`Command`,ctrl:`Ctrl`,delete:`Delete`,end:`End`,enter:`Enter`,escape:`Escape`,home:`Home`,insert:`Insert`,meta:`Meta`,"page-down":`Page Down`,"page-up":`Page Up`,pause:`Pause`,"scroll-lock":`Scroll Lock`,shift:`⇧`,slash:`/`,space:`Space`,super:`Super`,tab:`Tab`,"arrow-down":`↓`,"arrow-left":`←`,"arrow-right":`→`,"arrow-up":`↑`},o=[`document`,`window`,`keyup`,`repeat`,`editable`],s=()=>{if(typeof navigator>`u`)return!1;let e=navigator.platform||navigator.userAgent;return/Mac|iPhone|iPad|iPod/i.test(e)},c=e=>i[e]||e.replace(/([a-z])([A-Z])/g,`$1-$2`).replace(/_/g,`-`).toLowerCase(),l=e=>e===`slash`||e.length===1||r.has(e)||/^f(?:[1-9]|1\d|2[0-4])$/.test(e),u=(e,t)=>{let n=e.some(e=>e===`meta`||e===`cmd`||e===`super`)||t&&e.includes(`mod`),r=e.includes(`ctrl`)||!t&&e.includes(`mod`);return{altKey:e.includes(`alt`),ctrlKey:r,metaKey:n,shiftKey:e.includes(`shift`)}},d=e=>e.trim().toLowerCase().split(`.`).map(e=>e.trim()).filter(Boolean),f=(e,t={})=>{let r=d(e);if(r.length===0)return null;let i=t.apple??s(),a=r.filter(e=>n.has(e)),o=r.filter(e=>!n.has(e));if(o.length===0||o.some(e=>!l(e))||o.length>1&&a.length>0)return null;let c=u(a,i),f=o.map((e,t)=>({key:e,...t===0?c:u([],i)}));return{normalized:r.join(`.`),steps:f}},p=e=>e.split(`-`).map(e=>e?`${e[0].toUpperCase()}${e.slice(1)}`:``).join(` `),m={alt:`⌥`,cmd:`⌘`,ctrl:`⌃`,meta:`⌘`,mod:`⌘`,shift:`⇧`,super:`⌘`},h=(e,t)=>t?m[e]??p(e):e===`mod`?`Ctrl`:a[e]??p(e),g=(e,t)=>e===`mod`?t?`meta`:`ctrl`:e===`cmd`||e===`super`?`meta`:e,_=(e,t)=>e===`slash`&&t.includes(`shift`)?`?`:a[e]??p(e),v=(e,t={})=>{let r=d(e);if(r.length===0)return[];let i=t.apple??s(),a=r.filter(e=>n.has(e)),o=r.filter(e=>!n.has(e)),c=a.map(e=>({label:h(e,i),token:g(e,i)}));return o.length===0?[c]:o.length>1&&a.length===0?o.map(e=>[{label:_(e,r),token:e}]):[[...c,...o.map(e=>({label:_(e,r),token:e}))]]},y=(e,t={})=>v(e,t).map(e=>e.map(({label:e})=>e)),b=new WeakMap,x=(e,t)=>{let n=b.get(e);if(!n){let t=new Set,r=new Set,i=()=>r.forEach(e=>e(new Set(t))),a=()=>{t.size!==0&&(t.clear(),i())},o=e=>{let n=[...t].sort().join(` `),r=c(e.key);e.type===`keydown`?t.add(r):t.delete(r),e.type===`keyup`&&r===`meta`&&t.clear(),[[`alt`,e.altKey],[`ctrl`,e.ctrlKey],[`meta`,e.metaKey],[`shift`,e.shiftKey]].forEach(([e,n])=>{n?t.add(e):t.delete(e)}),[...t].sort().join(` `)!==n&&i()},s=e=>{e instanceof KeyboardEvent&&o(e)},l=()=>{e.visibilityState===`hidden`&&a()};e.addEventListener(`keydown`,s,!0),e.addEventListener(`keyup`,s,!0),e.addEventListener(`visibilitychange`,l),e.defaultView?.addEventListener(`blur`,a),n={keys:t,listeners:r,destroy:()=>{e.removeEventListener(`keydown`,s,!0),e.removeEventListener(`keyup`,s,!0),e.removeEventListener(`visibilitychange`,l),e.defaultView?.removeEventListener(`blur`,a)}},b.set(e,n)}return n.listeners.add(t),t(new Set(n.keys)),()=>{n?.listeners.delete(t),n?.listeners.size===0&&(n.destroy(),b.delete(e))}},S=(e,t)=>c(e.key)===t.key&&e.altKey===t.altKey&&e.ctrlKey===t.ctrlKey&&e.metaKey===t.metaKey&&e.shiftKey===t.shiftKey,C=(e,t={})=>{let n=f(e,t);if(!n)return null;let r=Math.max(250,Math.min(5e3,t.timeout??1e3)),i=0,a=0,o=()=>{i=0,a=0};return{shortcut:n,reset:o,match(e,t=performance.now()){i>0&&t-a>r&&o();let s=n.steps[i];if(!s||!S(e,s)){o();let r=n.steps[0];return!r||!S(e,r)?`none`:n.steps.length===1?`complete`:(i=1,a=t,`partial`)}return i===n.steps.length-1?(o(),`complete`):(i+=1,a=t,`partial`)}}},w=e=>e instanceof Element?e.closest(`input, textarea, select, [contenteditable]:not([contenteditable="false"])`)!==null:!1,T=e=>e.isConnected&&!e.closest(`[inert], [hidden]`)&&e.getAttribute(`aria-hidden`)!==`true`,E=()=>{let e=[`x-ui-shortcut`],t=(n,r)=>{r.forEach((i,a)=>{let o=[...n,i];e.push(`x-ui-shortcut.${o.join(`.`)}`),t(o,r.filter((e,t)=>t!==a))})};return t([],o),e.map(e=>`[${e.replaceAll(`.`,`\\.`)} ]`.replace(` ]`,`]`)).join(`, `)},D=new WeakSet,O=n=>{D.has(n)||(D.add(n),e(document),n.addInitSelector(()=>E()),n.directive(`ui-shortcut`,n.skipDuringClone((e,{expression:n,modifiers:r},i)=>{if(!(e instanceof HTMLElement))return;let a=i.evaluateLater(n),o=Number(e.dataset.uiShortcutTimeout),s=Number.isFinite(o)?o:void 0,c=null;i.effect(()=>a(e=>{c=typeof e==`string`&&e.trim()?C(e,s===void 0?{}:{timeout:s}):null}));let l=r.includes(`window`)?window:r.includes(`document`)?document:e,u=r.includes(`keyup`)?`keyup`:`keydown`,d=n=>{if(!(n instanceof KeyboardEvent)||!c||!T(e)||n.repeat&&!r.includes(`repeat`)||w(n.target)&&!r.includes(`editable`))return;let i=c.match(n);if(i===`none`||(t(e.ownerDocument),i===`partial`))return;let a=new CustomEvent(`ui:shortcut`,{bubbles:!0,cancelable:!0,composed:!0,detail:{shortcut:c.shortcut.normalized,keyboardEvent:n,owner:e,sequence:c.shortcut.steps.length>1}}),o=!1,s=a.stopPropagation.bind(a),l=a.stopImmediatePropagation.bind(a);a.stopPropagation=()=>{o=!0,s()},a.stopImmediatePropagation=()=>{o=!0,l()},e.dispatchEvent(a),a.defaultPrevented&&n.preventDefault(),o&&n.stopPropagation()};l.addEventListener(u,d),i.cleanup(()=>l.removeEventListener(u,d))})))};export{f as a,x as i,y as n,O as o,v as r,C as t};
|
|
2
|
+
//# sourceMappingURL=capability-shortcut-CGpfLNL-.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability-shortcut-BoDF_wQX.js","names":[],"sources":["../../../../../../../../client/src/capabilities/shortcut.ts"],"sourcesContent":["import type Alpine from 'alpinejs';\nimport {beginShortcutFocusHandoff, ensureFocusHandoff} from '@client/runtime/focus-handoff';\n\ntype ShortcutPlatform = {apple?: boolean};\ntype ShortcutOptions = ShortcutPlatform & {timeout?: number};\ntype ShortcutMatch = 'none' | 'partial' | 'complete';\ntype ShortcutDisplayKey = {label: string; token: string};\ntype ShortcutPressedListener = (keys: ReadonlySet<string>) => void;\n\ntype ShortcutStep = {\n key: string;\n altKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n shiftKey: boolean;\n};\n\ntype ParsedShortcut = {\n normalized: string;\n steps: ShortcutStep[];\n};\n\ntype ShortcutEventDetail = {\n shortcut: string;\n keyboardEvent: KeyboardEvent;\n owner: HTMLElement;\n sequence: boolean;\n};\n\ntype ShortcutMatcher = {\n readonly shortcut: ParsedShortcut;\n match(event: KeyboardEvent, timestamp?: number): ShortcutMatch;\n reset(): void;\n};\n\nconst MODIFIER_TOKENS = new Set(['alt', 'cmd', 'ctrl', 'meta', 'mod', 'shift', 'super']);\nconst NAMED_KEYS = new Set([\n 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-up',\n 'backspace', 'caps-lock', 'delete', 'end', 'enter', 'escape', 'home', 'insert',\n 'page-down', 'page-up', 'pause', 'scroll-lock', 'space', 'tab',\n]);\nconst KEY_ALIASES: Record<string, string> = {\n ' ': 'space',\n '/': 'slash',\n '?': 'slash',\n Alt: 'alt',\n ArrowDown: 'arrow-down',\n ArrowLeft: 'arrow-left',\n ArrowRight: 'arrow-right',\n ArrowUp: 'arrow-up',\n CapsLock: 'caps-lock',\n Control: 'ctrl',\n Meta: 'meta',\n PageDown: 'page-down',\n PageUp: 'page-up',\n ScrollLock: 'scroll-lock',\n Shift: 'shift',\n};\nconst KEY_LABELS: Record<string, string> = {\n alt: 'Alt',\n backspace: 'Backspace',\n cmd: 'Command',\n ctrl: 'Ctrl',\n delete: 'Delete',\n end: 'End',\n enter: 'Enter',\n escape: 'Escape',\n home: 'Home',\n insert: 'Insert',\n meta: 'Meta',\n 'page-down': 'Page Down',\n 'page-up': 'Page Up',\n pause: 'Pause',\n 'scroll-lock': 'Scroll Lock',\n shift: '⇧',\n slash: '/',\n space: 'Space',\n super: 'Super',\n tab: 'Tab',\n 'arrow-down': '↓',\n 'arrow-left': '←',\n 'arrow-right': '→',\n 'arrow-up': '↑',\n};\nconst DIRECTIVE_MODIFIERS = ['document', 'window', 'keyup', 'repeat', 'editable'] as const;\n\nconst isApplePlatform = (): boolean => {\n if (typeof navigator === 'undefined') return false;\n const platform = navigator.platform || navigator.userAgent;\n return /Mac|iPhone|iPad|iPod/i.test(platform);\n};\n\nconst normalizeKey = (key: string): string => {\n const alias = KEY_ALIASES[key];\n if (alias) return alias;\n return key\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/_/g, '-')\n .toLowerCase();\n};\n\nconst isKnownKey = (key: string): boolean => (\n key === 'slash'\n || key.length === 1\n || NAMED_KEYS.has(key)\n || /^f(?:[1-9]|1\\d|2[0-4])$/.test(key)\n);\n\nconst modifierStep = (tokens: string[], apple: boolean): Omit<ShortcutStep, 'key'> => {\n const metaKey = tokens.some((token) => token === 'meta' || token === 'cmd' || token === 'super')\n || (apple && tokens.includes('mod'));\n const ctrlKey = tokens.includes('ctrl') || (!apple && tokens.includes('mod'));\n return {\n altKey: tokens.includes('alt'),\n ctrlKey,\n metaKey,\n shiftKey: tokens.includes('shift'),\n };\n};\n\nconst tokenize = (value: string): string[] => value\n .trim()\n .toLowerCase()\n .split('.')\n .map((token) => token.trim())\n .filter(Boolean);\n\nconst parseShortcut = (value: string, options: ShortcutPlatform = {}): ParsedShortcut | null => {\n const tokens = tokenize(value);\n if (tokens.length === 0) return null;\n const apple = options.apple ?? isApplePlatform();\n const modifierTokens = tokens.filter((token) => MODIFIER_TOKENS.has(token));\n const keyTokens = tokens.filter((token) => !MODIFIER_TOKENS.has(token));\n if (keyTokens.length === 0 || keyTokens.some((token) => !isKnownKey(token))) return null;\n if (keyTokens.length > 1 && modifierTokens.length > 0) return null;\n\n const modifiers = modifierStep(modifierTokens, apple);\n const steps = keyTokens.map((key, index) => ({\n key,\n ...(index === 0 ? modifiers : modifierStep([], apple)),\n }));\n return {normalized: tokens.join('.'), steps};\n};\n\nconst titleCase = (token: string): string => token\n .split('-')\n .map((part) => part ? `${part[0]!.toUpperCase()}${part.slice(1)}` : '')\n .join(' ');\n\nconst APPLE_MODIFIER_LABELS: Readonly<Record<string, string>> = {\n alt: '⌥',\n cmd: '⌘',\n ctrl: '⌃',\n meta: '⌘',\n mod: '⌘',\n shift: '⇧',\n super: '⌘',\n};\n\nconst modifierLabel = (token: string, apple: boolean): string => {\n if (apple) return APPLE_MODIFIER_LABELS[token] ?? titleCase(token);\n if (token === 'mod') return 'Ctrl';\n return KEY_LABELS[token] ?? titleCase(token);\n};\n\nconst modifierKey = (token: string, apple: boolean): string => {\n if (token === 'mod') return apple ? 'meta' : 'ctrl';\n if (token === 'cmd' || token === 'super') return 'meta';\n return token;\n};\n\nconst keyLabel = (token: string, tokens: string[]): string => {\n if (token === 'slash' && tokens.includes('shift')) return '?';\n return KEY_LABELS[token] ?? titleCase(token);\n};\n\nconst formatShortcutKeys = (value: string, options: ShortcutPlatform = {}): ShortcutDisplayKey[][] => {\n const tokens = tokenize(value);\n if (tokens.length === 0) return [];\n const apple = options.apple ?? isApplePlatform();\n const modifiers = tokens.filter((token) => MODIFIER_TOKENS.has(token));\n const keys = tokens.filter((token) => !MODIFIER_TOKENS.has(token));\n const displayModifiers = modifiers.map((token) => ({\n label: modifierLabel(token, apple),\n token: modifierKey(token, apple),\n }));\n if (keys.length === 0) return [displayModifiers];\n if (keys.length > 1 && modifiers.length === 0) {\n return keys.map((token) => [{label: keyLabel(token, tokens), token}]);\n }\n return [[\n ...displayModifiers,\n ...keys.map((token) => ({label: keyLabel(token, tokens), token})),\n ]];\n};\n\nconst formatShortcut = (value: string, options: ShortcutPlatform = {}): string[][] => (\n formatShortcutKeys(value, options).map((step) => step.map(({label}) => label))\n);\n\ntype PressedShortcutStore = {\n keys: Set<string>;\n listeners: Set<ShortcutPressedListener>;\n destroy: () => void;\n};\n\nconst pressedShortcutStores = new WeakMap<Document, PressedShortcutStore>();\n\nconst observePressedShortcutKeys = (\n document: Document,\n listener: ShortcutPressedListener,\n): (() => void) => {\n let store = pressedShortcutStores.get(document);\n if (!store) {\n const keys = new Set<string>();\n const listeners = new Set<ShortcutPressedListener>();\n const notify = (): void => listeners.forEach((subscriber) => subscriber(new Set(keys)));\n const clear = (): void => {\n if (keys.size === 0) return;\n keys.clear();\n notify();\n };\n const sync = (event: KeyboardEvent): void => {\n const previous = [...keys].sort().join(' ');\n const token = normalizeKey(event.key);\n if (event.type === 'keydown') keys.add(token);\n else keys.delete(token);\n\n // macOS can suppress non-modifier keyup events while Command is held.\n if (event.type === 'keyup' && token === 'meta') keys.clear();\n ([\n ['alt', event.altKey],\n ['ctrl', event.ctrlKey],\n ['meta', event.metaKey],\n ['shift', event.shiftKey],\n ] as const).forEach(([modifier, pressed]) => {\n if (pressed) keys.add(modifier);\n else keys.delete(modifier);\n });\n if ([...keys].sort().join(' ') !== previous) notify();\n };\n const onKey = (event: Event): void => {\n if (event instanceof KeyboardEvent) sync(event);\n };\n const onVisibility = (): void => {\n if (document.visibilityState === 'hidden') clear();\n };\n document.addEventListener('keydown', onKey, true);\n document.addEventListener('keyup', onKey, true);\n document.addEventListener('visibilitychange', onVisibility);\n document.defaultView?.addEventListener('blur', clear);\n store = {\n keys,\n listeners,\n destroy: () => {\n document.removeEventListener('keydown', onKey, true);\n document.removeEventListener('keyup', onKey, true);\n document.removeEventListener('visibilitychange', onVisibility);\n document.defaultView?.removeEventListener('blur', clear);\n },\n };\n pressedShortcutStores.set(document, store);\n }\n store.listeners.add(listener);\n listener(new Set(store.keys));\n return () => {\n store?.listeners.delete(listener);\n if (store?.listeners.size === 0) {\n store.destroy();\n pressedShortcutStores.delete(document);\n }\n };\n};\n\nconst eventMatchesStep = (event: KeyboardEvent, step: ShortcutStep): boolean => (\n normalizeKey(event.key) === step.key\n && event.altKey === step.altKey\n && event.ctrlKey === step.ctrlKey\n && event.metaKey === step.metaKey\n && event.shiftKey === step.shiftKey\n);\n\nconst createShortcutMatcher = (value: string, options: ShortcutOptions = {}): ShortcutMatcher | null => {\n const shortcut = parseShortcut(value, options);\n if (!shortcut) return null;\n const timeout = Math.max(250, Math.min(5000, options.timeout ?? 1000));\n let index = 0;\n let previousAt = 0;\n\n const reset = (): void => {\n index = 0;\n previousAt = 0;\n };\n\n return {\n shortcut,\n reset,\n match(event, timestamp = performance.now()): ShortcutMatch {\n if (index > 0 && timestamp - previousAt > timeout) reset();\n const step = shortcut.steps[index];\n if (!step || !eventMatchesStep(event, step)) {\n reset();\n const first = shortcut.steps[0];\n if (!first || !eventMatchesStep(event, first)) return 'none';\n if (shortcut.steps.length === 1) return 'complete';\n index = 1;\n previousAt = timestamp;\n return 'partial';\n }\n if (index === shortcut.steps.length - 1) {\n reset();\n return 'complete';\n }\n index += 1;\n previousAt = timestamp;\n return 'partial';\n },\n };\n};\n\nconst isEditableTarget = (target: EventTarget | null): boolean => {\n if (!(target instanceof Element)) return false;\n return target.closest('input, textarea, select, [contenteditable]:not([contenteditable=\"false\"])') !== null;\n};\n\nconst isEligibleOwner = (owner: HTMLElement): boolean => (\n owner.isConnected\n && !owner.closest('[inert], [hidden]')\n && owner.getAttribute('aria-hidden') !== 'true'\n);\n\nconst directiveSelectors = (): string => {\n const names = ['x-ui-shortcut'];\n const visit = (prefix: string[], remaining: readonly string[]): void => {\n remaining.forEach((modifier, index) => {\n const next = [...prefix, modifier];\n names.push(`x-ui-shortcut.${next.join('.')}`);\n visit(next, remaining.filter((_, remainingIndex) => remainingIndex !== index));\n });\n };\n visit([], DIRECTIVE_MODIFIERS);\n return names.map((name) => `[${name.replaceAll('.', '\\\\.')} ]`.replace(' ]', ']')).join(', ');\n};\n\nconst registered = new WeakSet<Alpine.Alpine>();\n\nconst registerShortcutCapability = (AlpineInstance: Alpine.Alpine): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n ensureFocusHandoff(document);\n AlpineInstance.addInitSelector(() => directiveSelectors());\n AlpineInstance.directive('ui-shortcut', AlpineInstance.skipDuringClone((el, {expression, modifiers}, utilities) => {\n if (!(el instanceof HTMLElement)) return;\n const evaluator = utilities.evaluateLater(expression);\n const timeoutValue = Number(el.dataset.uiShortcutTimeout);\n const timeout = Number.isFinite(timeoutValue) ? timeoutValue : undefined;\n let matcher: ShortcutMatcher | null = null;\n\n utilities.effect(() => evaluator((value) => {\n matcher = typeof value === 'string' && value.trim()\n ? createShortcutMatcher(value, timeout === undefined ? {} : {timeout})\n : null;\n }));\n\n const target: EventTarget = modifiers.includes('window')\n ? window\n : modifiers.includes('document') ? document : el;\n const eventName = modifiers.includes('keyup') ? 'keyup' : 'keydown';\n const listener = (event: Event): void => {\n if (!(event instanceof KeyboardEvent) || !matcher || !isEligibleOwner(el)) return;\n if (event.repeat && !modifiers.includes('repeat')) return;\n if (isEditableTarget(event.target) && !modifiers.includes('editable')) return;\n const result = matcher.match(event);\n if (result === 'none') return;\n beginShortcutFocusHandoff(el.ownerDocument);\n if (result === 'partial') return;\n\n const shortcutEvent = new CustomEvent<ShortcutEventDetail>('ui:shortcut', {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: {\n shortcut: matcher.shortcut.normalized,\n keyboardEvent: event,\n owner: el,\n sequence: matcher.shortcut.steps.length > 1,\n },\n });\n let propagationStopped = false;\n const stopPropagation = shortcutEvent.stopPropagation.bind(shortcutEvent);\n const stopImmediatePropagation = shortcutEvent.stopImmediatePropagation.bind(shortcutEvent);\n shortcutEvent.stopPropagation = (): void => {\n propagationStopped = true;\n stopPropagation();\n };\n shortcutEvent.stopImmediatePropagation = (): void => {\n propagationStopped = true;\n stopImmediatePropagation();\n };\n el.dispatchEvent(shortcutEvent);\n if (shortcutEvent.defaultPrevented) event.preventDefault();\n if (propagationStopped) event.stopPropagation();\n };\n target.addEventListener(eventName, listener);\n utilities.cleanup(() => target.removeEventListener(eventName, listener));\n }));\n};\n\nexport {\n createShortcutMatcher,\n formatShortcut,\n formatShortcutKeys,\n observePressedShortcutKeys,\n parseShortcut,\n registerShortcutCapability,\n};\nexport type {\n ParsedShortcut,\n ShortcutEventDetail,\n ShortcutDisplayKey,\n ShortcutMatch,\n ShortcutMatcher,\n ShortcutOptions,\n ShortcutPlatform,\n ShortcutStep,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"capability-shortcut-CGpfLNL-.js","names":[],"sources":["../../../../../../../../client/src/capabilities/shortcut.ts"],"sourcesContent":["import type Alpine from 'alpinejs';\nimport {beginShortcutFocusHandoff, ensureFocusHandoff} from '@client/runtime/focus-handoff';\n\ntype ShortcutPlatform = {apple?: boolean};\ntype ShortcutOptions = ShortcutPlatform & {timeout?: number};\ntype ShortcutMatch = 'none' | 'partial' | 'complete';\ntype ShortcutDisplayKey = {label: string; token: string};\ntype ShortcutPressedListener = (keys: ReadonlySet<string>) => void;\n\ntype ShortcutStep = {\n key: string;\n altKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n shiftKey: boolean;\n};\n\ntype ParsedShortcut = {\n normalized: string;\n steps: ShortcutStep[];\n};\n\ntype ShortcutEventDetail = {\n shortcut: string;\n keyboardEvent: KeyboardEvent;\n owner: HTMLElement;\n sequence: boolean;\n};\n\ntype ShortcutMatcher = {\n readonly shortcut: ParsedShortcut;\n match(event: KeyboardEvent, timestamp?: number): ShortcutMatch;\n reset(): void;\n};\n\nconst MODIFIER_TOKENS = new Set(['alt', 'cmd', 'ctrl', 'meta', 'mod', 'shift', 'super']);\nconst NAMED_KEYS = new Set([\n 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-up',\n 'backspace', 'caps-lock', 'delete', 'end', 'enter', 'escape', 'home', 'insert',\n 'page-down', 'page-up', 'pause', 'scroll-lock', 'space', 'tab',\n]);\nconst KEY_ALIASES: Record<string, string> = {\n ' ': 'space',\n '/': 'slash',\n '?': 'slash',\n Alt: 'alt',\n ArrowDown: 'arrow-down',\n ArrowLeft: 'arrow-left',\n ArrowRight: 'arrow-right',\n ArrowUp: 'arrow-up',\n CapsLock: 'caps-lock',\n Control: 'ctrl',\n Meta: 'meta',\n PageDown: 'page-down',\n PageUp: 'page-up',\n ScrollLock: 'scroll-lock',\n Shift: 'shift',\n};\nconst KEY_LABELS: Record<string, string> = {\n alt: 'Alt',\n backspace: 'Backspace',\n cmd: 'Command',\n ctrl: 'Ctrl',\n delete: 'Delete',\n end: 'End',\n enter: 'Enter',\n escape: 'Escape',\n home: 'Home',\n insert: 'Insert',\n meta: 'Meta',\n 'page-down': 'Page Down',\n 'page-up': 'Page Up',\n pause: 'Pause',\n 'scroll-lock': 'Scroll Lock',\n shift: '⇧',\n slash: '/',\n space: 'Space',\n super: 'Super',\n tab: 'Tab',\n 'arrow-down': '↓',\n 'arrow-left': '←',\n 'arrow-right': '→',\n 'arrow-up': '↑',\n};\nconst DIRECTIVE_MODIFIERS = ['document', 'window', 'keyup', 'repeat', 'editable'] as const;\n\nconst isApplePlatform = (): boolean => {\n if (typeof navigator === 'undefined') return false;\n const platform = navigator.platform || navigator.userAgent;\n return /Mac|iPhone|iPad|iPod/i.test(platform);\n};\n\nconst normalizeKey = (key: string): string => {\n const alias = KEY_ALIASES[key];\n if (alias) return alias;\n return key\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/_/g, '-')\n .toLowerCase();\n};\n\nconst isKnownKey = (key: string): boolean => (\n key === 'slash'\n || key.length === 1\n || NAMED_KEYS.has(key)\n || /^f(?:[1-9]|1\\d|2[0-4])$/.test(key)\n);\n\nconst modifierStep = (tokens: string[], apple: boolean): Omit<ShortcutStep, 'key'> => {\n const metaKey = tokens.some((token) => token === 'meta' || token === 'cmd' || token === 'super')\n || (apple && tokens.includes('mod'));\n const ctrlKey = tokens.includes('ctrl') || (!apple && tokens.includes('mod'));\n return {\n altKey: tokens.includes('alt'),\n ctrlKey,\n metaKey,\n shiftKey: tokens.includes('shift'),\n };\n};\n\nconst tokenize = (value: string): string[] => value\n .trim()\n .toLowerCase()\n .split('.')\n .map((token) => token.trim())\n .filter(Boolean);\n\nconst parseShortcut = (value: string, options: ShortcutPlatform = {}): ParsedShortcut | null => {\n const tokens = tokenize(value);\n if (tokens.length === 0) return null;\n const apple = options.apple ?? isApplePlatform();\n const modifierTokens = tokens.filter((token) => MODIFIER_TOKENS.has(token));\n const keyTokens = tokens.filter((token) => !MODIFIER_TOKENS.has(token));\n if (keyTokens.length === 0 || keyTokens.some((token) => !isKnownKey(token))) return null;\n if (keyTokens.length > 1 && modifierTokens.length > 0) return null;\n\n const modifiers = modifierStep(modifierTokens, apple);\n const steps = keyTokens.map((key, index) => ({\n key,\n ...(index === 0 ? modifiers : modifierStep([], apple)),\n }));\n return {normalized: tokens.join('.'), steps};\n};\n\nconst titleCase = (token: string): string => token\n .split('-')\n .map((part) => part ? `${part[0]!.toUpperCase()}${part.slice(1)}` : '')\n .join(' ');\n\nconst APPLE_MODIFIER_LABELS: Readonly<Record<string, string>> = {\n alt: '⌥',\n cmd: '⌘',\n ctrl: '⌃',\n meta: '⌘',\n mod: '⌘',\n shift: '⇧',\n super: '⌘',\n};\n\nconst modifierLabel = (token: string, apple: boolean): string => {\n if (apple) return APPLE_MODIFIER_LABELS[token] ?? titleCase(token);\n if (token === 'mod') return 'Ctrl';\n return KEY_LABELS[token] ?? titleCase(token);\n};\n\nconst modifierKey = (token: string, apple: boolean): string => {\n if (token === 'mod') return apple ? 'meta' : 'ctrl';\n if (token === 'cmd' || token === 'super') return 'meta';\n return token;\n};\n\nconst keyLabel = (token: string, tokens: string[]): string => {\n if (token === 'slash' && tokens.includes('shift')) return '?';\n return KEY_LABELS[token] ?? titleCase(token);\n};\n\nconst formatShortcutKeys = (value: string, options: ShortcutPlatform = {}): ShortcutDisplayKey[][] => {\n const tokens = tokenize(value);\n if (tokens.length === 0) return [];\n const apple = options.apple ?? isApplePlatform();\n const modifiers = tokens.filter((token) => MODIFIER_TOKENS.has(token));\n const keys = tokens.filter((token) => !MODIFIER_TOKENS.has(token));\n const displayModifiers = modifiers.map((token) => ({\n label: modifierLabel(token, apple),\n token: modifierKey(token, apple),\n }));\n if (keys.length === 0) return [displayModifiers];\n if (keys.length > 1 && modifiers.length === 0) {\n return keys.map((token) => [{label: keyLabel(token, tokens), token}]);\n }\n return [[\n ...displayModifiers,\n ...keys.map((token) => ({label: keyLabel(token, tokens), token})),\n ]];\n};\n\nconst formatShortcut = (value: string, options: ShortcutPlatform = {}): string[][] => (\n formatShortcutKeys(value, options).map((step) => step.map(({label}) => label))\n);\n\ntype PressedShortcutStore = {\n keys: Set<string>;\n listeners: Set<ShortcutPressedListener>;\n destroy: () => void;\n};\n\nconst pressedShortcutStores = new WeakMap<Document, PressedShortcutStore>();\n\nconst observePressedShortcutKeys = (\n document: Document,\n listener: ShortcutPressedListener,\n): (() => void) => {\n let store = pressedShortcutStores.get(document);\n if (!store) {\n const keys = new Set<string>();\n const listeners = new Set<ShortcutPressedListener>();\n const notify = (): void => listeners.forEach((subscriber) => subscriber(new Set(keys)));\n const clear = (): void => {\n if (keys.size === 0) return;\n keys.clear();\n notify();\n };\n const sync = (event: KeyboardEvent): void => {\n const previous = [...keys].sort().join(' ');\n const token = normalizeKey(event.key);\n if (event.type === 'keydown') keys.add(token);\n else keys.delete(token);\n\n // macOS can suppress non-modifier keyup events while Command is held.\n if (event.type === 'keyup' && token === 'meta') keys.clear();\n ([\n ['alt', event.altKey],\n ['ctrl', event.ctrlKey],\n ['meta', event.metaKey],\n ['shift', event.shiftKey],\n ] as const).forEach(([modifier, pressed]) => {\n if (pressed) keys.add(modifier);\n else keys.delete(modifier);\n });\n if ([...keys].sort().join(' ') !== previous) notify();\n };\n const onKey = (event: Event): void => {\n if (event instanceof KeyboardEvent) sync(event);\n };\n const onVisibility = (): void => {\n if (document.visibilityState === 'hidden') clear();\n };\n document.addEventListener('keydown', onKey, true);\n document.addEventListener('keyup', onKey, true);\n document.addEventListener('visibilitychange', onVisibility);\n document.defaultView?.addEventListener('blur', clear);\n store = {\n keys,\n listeners,\n destroy: () => {\n document.removeEventListener('keydown', onKey, true);\n document.removeEventListener('keyup', onKey, true);\n document.removeEventListener('visibilitychange', onVisibility);\n document.defaultView?.removeEventListener('blur', clear);\n },\n };\n pressedShortcutStores.set(document, store);\n }\n store.listeners.add(listener);\n listener(new Set(store.keys));\n return () => {\n store?.listeners.delete(listener);\n if (store?.listeners.size === 0) {\n store.destroy();\n pressedShortcutStores.delete(document);\n }\n };\n};\n\nconst eventMatchesStep = (event: KeyboardEvent, step: ShortcutStep): boolean => (\n normalizeKey(event.key) === step.key\n && event.altKey === step.altKey\n && event.ctrlKey === step.ctrlKey\n && event.metaKey === step.metaKey\n && event.shiftKey === step.shiftKey\n);\n\nconst createShortcutMatcher = (value: string, options: ShortcutOptions = {}): ShortcutMatcher | null => {\n const shortcut = parseShortcut(value, options);\n if (!shortcut) return null;\n const timeout = Math.max(250, Math.min(5000, options.timeout ?? 1000));\n let index = 0;\n let previousAt = 0;\n\n const reset = (): void => {\n index = 0;\n previousAt = 0;\n };\n\n return {\n shortcut,\n reset,\n match(event, timestamp = performance.now()): ShortcutMatch {\n if (index > 0 && timestamp - previousAt > timeout) reset();\n const step = shortcut.steps[index];\n if (!step || !eventMatchesStep(event, step)) {\n reset();\n const first = shortcut.steps[0];\n if (!first || !eventMatchesStep(event, first)) return 'none';\n if (shortcut.steps.length === 1) return 'complete';\n index = 1;\n previousAt = timestamp;\n return 'partial';\n }\n if (index === shortcut.steps.length - 1) {\n reset();\n return 'complete';\n }\n index += 1;\n previousAt = timestamp;\n return 'partial';\n },\n };\n};\n\nconst isEditableTarget = (target: EventTarget | null): boolean => {\n if (!(target instanceof Element)) return false;\n return target.closest('input, textarea, select, [contenteditable]:not([contenteditable=\"false\"])') !== null;\n};\n\nconst isEligibleOwner = (owner: HTMLElement): boolean => (\n owner.isConnected\n && !owner.closest('[inert], [hidden]')\n && owner.getAttribute('aria-hidden') !== 'true'\n);\n\nconst directiveSelectors = (): string => {\n const names = ['x-ui-shortcut'];\n const visit = (prefix: string[], remaining: readonly string[]): void => {\n remaining.forEach((modifier, index) => {\n const next = [...prefix, modifier];\n names.push(`x-ui-shortcut.${next.join('.')}`);\n visit(next, remaining.filter((_, remainingIndex) => remainingIndex !== index));\n });\n };\n visit([], DIRECTIVE_MODIFIERS);\n return names.map((name) => `[${name.replaceAll('.', '\\\\.')} ]`.replace(' ]', ']')).join(', ');\n};\n\nconst registered = new WeakSet<Alpine.Alpine>();\n\nconst registerShortcutCapability = (AlpineInstance: Alpine.Alpine): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n ensureFocusHandoff(document);\n AlpineInstance.addInitSelector(() => directiveSelectors());\n AlpineInstance.directive('ui-shortcut', AlpineInstance.skipDuringClone((el, {expression, modifiers}, utilities) => {\n if (!(el instanceof HTMLElement)) return;\n const evaluator = utilities.evaluateLater(expression);\n const timeoutValue = Number(el.dataset.uiShortcutTimeout);\n const timeout = Number.isFinite(timeoutValue) ? timeoutValue : undefined;\n let matcher: ShortcutMatcher | null = null;\n\n utilities.effect(() => evaluator((value) => {\n matcher = typeof value === 'string' && value.trim()\n ? createShortcutMatcher(value, timeout === undefined ? {} : {timeout})\n : null;\n }));\n\n const target: EventTarget = modifiers.includes('window')\n ? window\n : modifiers.includes('document') ? document : el;\n const eventName = modifiers.includes('keyup') ? 'keyup' : 'keydown';\n const listener = (event: Event): void => {\n if (!(event instanceof KeyboardEvent) || !matcher || !isEligibleOwner(el)) return;\n if (event.repeat && !modifiers.includes('repeat')) return;\n if (isEditableTarget(event.target) && !modifiers.includes('editable')) return;\n const result = matcher.match(event);\n if (result === 'none') return;\n beginShortcutFocusHandoff(el.ownerDocument);\n if (result === 'partial') return;\n\n const shortcutEvent = new CustomEvent<ShortcutEventDetail>('ui:shortcut', {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: {\n shortcut: matcher.shortcut.normalized,\n keyboardEvent: event,\n owner: el,\n sequence: matcher.shortcut.steps.length > 1,\n },\n });\n let propagationStopped = false;\n const stopPropagation = shortcutEvent.stopPropagation.bind(shortcutEvent);\n const stopImmediatePropagation = shortcutEvent.stopImmediatePropagation.bind(shortcutEvent);\n shortcutEvent.stopPropagation = (): void => {\n propagationStopped = true;\n stopPropagation();\n };\n shortcutEvent.stopImmediatePropagation = (): void => {\n propagationStopped = true;\n stopImmediatePropagation();\n };\n el.dispatchEvent(shortcutEvent);\n if (shortcutEvent.defaultPrevented) event.preventDefault();\n if (propagationStopped) event.stopPropagation();\n };\n target.addEventListener(eventName, listener);\n utilities.cleanup(() => target.removeEventListener(eventName, listener));\n }));\n};\n\nexport {\n createShortcutMatcher,\n formatShortcut,\n formatShortcutKeys,\n observePressedShortcutKeys,\n parseShortcut,\n registerShortcutCapability,\n};\nexport type {\n ParsedShortcut,\n ShortcutEventDetail,\n ShortcutDisplayKey,\n ShortcutMatch,\n ShortcutMatcher,\n ShortcutOptions,\n ShortcutPlatform,\n ShortcutStep,\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{_ as e,b as t,g as n,h as r,l as i,m as a,s as o,y as s}from"./element-adapter-native-data-key-CW8suC9A.js";import{t as c}from"./motion-C3XtSJ4O.js";import{d as l,g as u,h as d,r as f}from"./ui-BHBokFNi.js";import{c as p,f as m,l as h,n as g,o as _,s as v}from"./codecs-Cb1ns_47.js";import{r as y}from"./dom-qAeVl7dc.js";import{i as b,t as x}from"./alpine-machine-BTDXpEr6.js";import{n as ee}from"./dom-invalidation-Dw6clnS4.js";import{t as te}from"./machine-Dqut4h89.js";import{a as ne,c as re,i as ie,l as ae,o as oe,r as se,s as ce}from"./drag-and-drop-DHq3udf7.js";import{L as le,y as ue}from"./common-Dfj6NCjU.js";var S=e=>e!==null&&Number.isInteger(e)&&e>0,C=4,de=(e,t)=>e===t||!!(e&&t&&e.destination.groupId===t.destination.groupId&&e.anchor?.id===t.anchor?.id&&e.anchor?.edge===t.anchor?.edge),fe=({point:e,start:t,end:n})=>{let r=n.x-t.x,i=n.y-t.y,a=r*r+i*i;if(a===0)return Math.hypot(e.x-t.x,e.y-t.y);let o=Math.max(0,Math.min(1,((e.x-t.x)*r+(e.y-t.y)*i)/a));return Math.hypot(e.x-(t.x+o*r),e.y-(t.y+o*i))},pe=e=>e.length===0?[]:[{anchor:{id:e[0].id,edge:`before`},index:0,distance:t=>Math.abs(t.clientY-e[0].rect.top)},...e.slice(1).map((t,n)=>{let r=(e[n].rect.bottom+t.rect.top)/2;return{anchor:{id:t.id,edge:`before`},index:n+1,distance:e=>Math.abs(e.clientY-r)}}),{anchor:{id:e.at(-1).id,edge:`after`},index:e.length,distance:t=>Math.abs(t.clientY-e.at(-1).rect.bottom)}],me=(e,t)=>{if(e.length===0)return[];let n=e=>t===`rtl`?e.rect.right:e.rect.left,r=e=>t===`rtl`?e.rect.left:e.rect.right;return[{anchor:{id:e[0].id,edge:`before`},index:0,distance:t=>Math.abs(t.clientX-n(e[0]))},...e.slice(1).map((t,i)=>{let a=e[i],o=(r(a)+n(t))/2;return{anchor:{id:t.id,edge:`before`},index:i+1,distance:e=>Math.abs(e.clientX-o)}}),{anchor:{id:e.at(-1).id,edge:`after`},index:e.length,distance:t=>Math.abs(t.clientX-r(e.at(-1)))}]},he=({columns:e,direction:t,groupRect:n,items:r})=>{if(!S(e))throw TypeError(`Grid sortable groups require a positive integer columns value.`);if(r.length===0)return[];let i=e=>t===`rtl`?e.rect.right:e.rect.left,a=e=>t===`rtl`?e.rect.left:e.rect.right,o=t=>r.slice(t*e,(t+1)*e),s=e=>Math.min(...o(e).map(e=>e.rect.top)),c=e=>Math.max(...o(e).map(e=>e.rect.bottom)),l=(e,t,n,r)=>({anchor:n,index:r,distance:n=>fe({point:{x:n.clientX,y:n.clientY},start:{x:e,y:s(t)},end:{x:e,y:c(t)}})}),u=(e,t,r)=>({anchor:t,index:r,distance:t=>fe({point:{x:t.clientX,y:t.clientY},start:{x:n.left,y:e},end:{x:n.right,y:e}})}),d=[l(i(r[0]),0,{id:r[0].id,edge:`before`},0)];for(let t=1;t<r.length;t+=1){let n=r[t],o=r[t-1];if(t%e===0){let r=t/e;d.push(u((c(r-1)+s(r))/2,{id:n.id,edge:`before`},t))}else{let r=Math.floor(t/e);d.push(l((a(o)+i(n))/2,r,{id:n.id,edge:`before`},t))}}let f=r.length-1,p=r[f],m=Math.floor(f/e),h=r.length%e;if(h===0)d.push(u(c(m),{id:p.id,edge:`after`},r.length));else{let e=r[h],t=e===void 0?a(p):(a(p)+i(e))/2;d.push(l(t,m,{id:p.id,edge:`after`},r.length))}return d},ge=(e,t)=>e.reduce((e,n)=>n.distance(t)<e.distance(t)?n:e),_e=e=>{if(e.items.length===0)return{destination:{groupId:e.groupId},anchor:null,index:0};let t=ge(e.orientation===`horizontal`?me(e.items,e.direction):e.orientation===`grid`?he(e):pe(e.items),e.input);return{destination:{groupId:e.groupId},anchor:t.anchor,index:t.index}},ve=e=>{if(e.items.length===0||e.orientation===`grid`)return _e(e);let t=e.orientation===`vertical`?e.input.clientY:e.input.clientX*(e.direction===`rtl`?-1:1),n=e.items.findIndex(({rect:n})=>t<(e.orientation===`vertical`?n.top+n.height/2:(n.left+n.width/2)*(e.direction===`rtl`?-1:1))),r=n<0?e.items.length:n,i=r===e.items.length?{id:e.items.at(-1).id,edge:`after`}:{id:e.items[r].id,edge:`before`};return{destination:{groupId:e.groupId},anchor:i,index:r}},ye=({placement:e,sourceId:t,sourceGroupId:n,itemIds:r})=>{if(n!==e.destination.groupId)return e;let i=r.indexOf(t);if(i<0)return e;let a=r.filter(e=>e!==t),o=e.index??0,s=Math.max(0,Math.min(a.length,o>i?o-1:o)),c=a.length===0?null:s===a.length?{id:a.at(-1),edge:`after`}:{id:a[s],edge:`before`};return{destination:e.destination,anchor:c,index:s}},be=(e,t)=>{let{groupRect:n,items:r,orientation:i,direction:a}=e;if(r.length===0||t.anchor===null)return i===`horizontal`?{x:a===`rtl`?n.right-C:n.left+C,y:n.top,width:0,height:n.height,kind:`inline-boundary`}:{x:n.left,y:n.top+C,width:n.width,height:0,kind:`block-boundary`};let o=t.index??0,s=o>0?r[o-1]:void 0,c=o<r.length?r[o]:void 0;if(i===`vertical`){let e=s&&c?(s.rect.bottom+c.rect.top)/2:c?c.rect.top-C:s.rect.bottom+C;return{x:n.left,y:e,width:n.width,height:0,kind:`block-boundary`}}let l=e=>a===`rtl`?e.rect.right:e.rect.left,u=e=>a===`rtl`?e.rect.left:e.rect.right;if(i===`horizontal`)return{x:s&&c?(u(s)+l(c))/2:c?l(c)+(a===`rtl`?C:-4):u(s)+(a===`rtl`?-4:C),y:n.top,width:0,height:n.height,kind:`inline-boundary`};let d=e.columns;if(!S(d))throw TypeError(`Grid sortable groups require a positive integer columns value.`);if(o>0&&o%d===0){let e=c?(s.rect.bottom+c.rect.top)/2:s.rect.bottom+C;return{x:n.left,y:e,width:n.width,height:0,kind:`block-boundary`}}let f;if(s&&c)f=(u(s)+l(c))/2;else if(c)f=l(c)+(a===`rtl`?C:-4);else{let e=r.length%d,t=e===0?void 0:r[e];f=t?(u(s)+l(t))/2:u(s)+(a===`rtl`?-4:C)}let p=Math.floor(Math.min(o,r.length-1)/d)*d,m=r.slice(p,p+d);return{x:f,y:Math.min(...m.map(e=>e.rect.top)),width:0,height:Math.max(...m.map(e=>e.rect.bottom))-Math.min(...m.map(e=>e.rect.top)),kind:`inline-boundary`}};function xe(e){var n=e.list,r=e.startIndex,i=e.finishIndex;if(r===-1||i===-1)return Array.from(n);var a=Array.from(n),o=t(a.splice(r,1),1)[0];return a.splice(i,0,o),a}var w=(e,t,n)=>({groupId:e,id:t.id,x:n.left-t.rect.left,y:n.top-t.rect.top}),Se=({x:e,y:t})=>e!==0||t!==0,T=(e,t,n)=>({left:e.left+t,top:e.top+n,right:e.right+t,bottom:e.bottom+n,width:e.width,height:e.height}),Ce=e=>{let{items:t,orientation:n,direction:r,columns:i}=e,a=t.at(-1);if(!a)return null;let o=t.at(-2);if(n===`vertical`){let e=o?a.rect.top-o.rect.top:a.rect.height+8;return T(a.rect,0,e)}if(n===`horizontal`){let e=o?a.rect.left-o.rect.left:(a.rect.width+8)*(r===`rtl`?-1:1);return T(a.rect,e,0)}if(i&&t.length>=i){let e=t[t.length-i];return T(e.rect,0,a.rect.top-e.rect.top||a.rect.height+8)}let s=o?a.rect.left-o.rect.left:(a.rect.width+8)*(r===`rtl`?-1:1);return T(a.rect,s,0)},we=e=>{let t=Ce(e);return t?[...e.items.map(({rect:e})=>e),t]:[]},Te=({source:e,placement:t,sourceLayout:n,destinationLayout:r=n})=>{if(!r)return null;let i=Math.max(0,Math.min(r.items.length,t.index??r.items.length));return e.groupId===r.groupId&&n?n.items[Math.min(i,n.items.length-1)]?.rect??r.groupRect:we(r)[i]??r.groupRect},Ee=({source:e,placement:t,sourceLayout:n,destinationLayout:r=n})=>{if(!r)return[];let i=Math.max(0,Math.min(r.items.length,t.index??r.items.length));if(e.groupId===r.groupId&&n){let t=n.items.findIndex(({id:t})=>t===e.id);if(t<0)return[];let r=xe({list:[...n.items],startIndex:t,finishIndex:i});return n.items.map(e=>w(n.groupId,e,n.items[r.findIndex(({id:t})=>t===e.id)].rect)).filter(Se)}let a=we(r),o=r.items.map((e,t)=>w(r.groupId,e,a[t<i?t:t+1])).filter(Se);if(!n||e.groupId===null)return o;let s=n.items.findIndex(({id:t})=>t===e.id);if(s<0)return o;let c=n.items[s],l=w(n.groupId,c,a[i]??r.groupRect);return Se(l)&&o.push(l),n.items.slice(s+1).forEach((e,t)=>{o.push(w(n.groupId,e,n.items[s+t].rect))}),o},De=/^-?(?:\d+(?:\.\d+)?|\.\d+)(?:px)?$/,Oe=(e,t,n,r,i)=>e===r?t:e===`center`?t-n/2:e===i?t-n:De.test(e)?t+Number.parseFloat(e):null,ke=({value:e,input:t,initialInput:n,sourceRect:r,previewSize:i})=>{let a={x:t.clientX-(n.clientX-r.left),y:t.clientY-(n.clientY-r.top)},o=e.trim().toLowerCase().split(/\s+/).filter(Boolean);if(o.length===0||o.length===1&&o[0]===`preserve`||o.length!==2)return a;let s=Oe(o[0],t.clientX,i.width,`left`,`right`),c=Oe(o[1],t.clientY,i.height,`top`,`bottom`);return s===null||c===null?a:{x:s,y:c}},Ae=e=>{e.setAttribute(`x-ignore`,``),[e,...e.querySelectorAll(`*`)].forEach(e=>{e.removeAttribute(`id`),(e instanceof HTMLInputElement||e instanceof HTMLButtonElement)&&(e.disabled=!0),(e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement)&&(e.disabled=!0)})},je=(e,t)=>{let n=[e,...e.querySelectorAll(`input, textarea, select`)],r=[t,...t.querySelectorAll(`input, textarea, select`)];n.forEach((e,t)=>{let n=r[t];e instanceof HTMLInputElement&&n instanceof HTMLInputElement?(n.value=e.value,n.checked=e.checked):e instanceof HTMLTextAreaElement&&n instanceof HTMLTextAreaElement?n.value=e.value:e instanceof HTMLSelectElement&&n instanceof HTMLSelectElement&&(n.selectedIndex=e.selectedIndex)})},Me=e=>({x:e.left,y:e.top,width:e.width,height:e.height}),Ne=({source:e,input:t,preview:n,previewPosition:r=`preserve`,opacity:i=.92,color:a=`neutral`,interaction:o=`edge`})=>{let s=e.getBoundingClientRect(),l=document.createElement(`div`),u=document.createElement(`div`),d=document.createElement(`div`),f=n?.content.firstElementChild?.cloneNode(!0),p=f instanceof HTMLElement,m=p?f:e.cloneNode(!0);p||je(e,m),Ae(m),l.setAttribute(`data-ui-sortable-overlay`,``),l.setAttribute(`popover`,`manual`),u.setAttribute(`data-ui-sortable-ghost-positioner`,``),d.setAttribute(`data-ui-sortable-ghost`,``),d.setAttribute(`aria-hidden`,`true`),d.setAttribute(`inert`,``),p||(d.setAttribute(`data-ui-sortable-default-preview`,``),d.setAttribute(`data-ui-selection-color`,``),d.dataset.color=a,d.dataset.uiInteraction=o,d.dataset.selected=`true`,d.dataset.uiSurface=`+1`,d.dataset.uiElevation=`2`);let h=e.closest(`[data-theme], .dark, .light`);h?.classList.contains(`dark`)&&l.classList.add(`dark`),h?.classList.contains(`light`)&&l.classList.add(`light`),h?.dataset.theme&&(l.dataset.theme=h.dataset.theme),Object.assign(l.style,{position:`fixed`,inset:`0`,width:`100vw`,height:`100vh`,maxWidth:`none`,maxHeight:`none`,margin:`0`,padding:`0`,border:`0`,background:`transparent`,overflow:`clip`,contain:`strict`,zIndex:`2147483647`,pointerEvents:`none`}),Object.assign(u.style,{position:`absolute`,left:`0`,top:`0`,width:p?`max-content`:`${s.width}px`,height:p?`max-content`:`${s.height}px`,pointerEvents:`none`}),Object.assign(d.style,{width:p?`max-content`:`100%`,height:p?`max-content`:`100%`,opacity:`${i}`,pointerEvents:`none`,...p?{}:{overflow:`hidden`,borderRadius:`var(--radius-overlay-sm)`}}),d.append(m),u.append(d),l.append(u),document.body.append(l),l.showPopover?.();let g=u.getBoundingClientRect(),_=p?{width:g.width,height:g.height}:{width:s.width,height:s.height},v=e=>ke({value:r,input:e,initialInput:t,sourceRect:s,previewSize:_}),y=e=>ke({value:`preserve`,input:e,initialInput:t,sourceRect:s,previewSize:{width:s.width,height:s.height}}),b=v(t),x=c.createController({values:{x:{initial:b.x,transition:c.roles.layout},y:{initial:b.y,transition:c.roles.layout}},style:({x:e,y:t})=>({transform:`translate3d(${e}px, ${t}px, 0)`})});return x.mount(u),{positioner:u,visual:d,frame:()=>({...x.current(),..._}),projectedFrame:e=>({...v(e),..._}),projectedSourceFrame:e=>({...y(e),width:s.width,height:s.height}),move(e){x.set(v(e))},async finish(e){e&&await x.animate({x:e.x,y:e.y}).finished},remove:()=>{x.destroy(),l.remove()}}},Pe=1e3,Fe=null,E=`1px`,Ie={width:E,height:E,padding:`0`,position:`absolute`,border:`0`,clip:`rect(${E}, ${E}, ${E}, ${E})`,overflow:`hidden`,whiteSpace:`nowrap`,marginTop:`-${E}`,pointerEvents:`none`};function Le(){var e=document.createElement(`div`);return e.setAttribute(`role`,`status`),Object.assign(e.style,Ie),document.body.append(e),e}function Re(){return Fe===null&&(Fe=Le()),Fe}var D=null;function ze(){D!==null&&clearTimeout(D),D=null}function Be(e){Re(),ze(),D=setTimeout(function(){D=null;var t=Re();t.textContent=e},Pe)}var O=(e,t)=>`${e}\u0000${t}`,Ve=(e,t)=>{let n={destination:Object.freeze({...t.destination}),anchor:t.anchor===null?null:Object.freeze({...t.anchor}),...t.index===void 0?{}:{index:t.index}};return e.operation===`insert`?Object.freeze({operation:`insert`,source:Object.freeze({...e}),...n}):Object.freeze({operation:`move`,source:Object.freeze({...e}),...n})},He=()=>{let e=new Map,t=new Map,n=(e,t,n,r,i)=>{let a=t,o=!0,s=e.get(a);if(s&&(s.element.isConnected||!r.element.isConnected))throw Error(`Duplicate sortable ${i} identity: ${a.replace(`\0`,`/`)}`);return e.set(a,r),Object.assign(()=>{o&&(o=!1,e.get(a)===r&&e.delete(a))},{refresh:()=>{if(!o)return;let t=n();if(t===a)return;let s=e.get(t);if(s&&s!==r&&(s.element.isConnected||!r.element.isConnected))throw Error(`Duplicate sortable ${i} identity: ${t.replace(`\0`,`/`)}`);e.get(a)===r&&e.delete(a),e.set(t,r),a=t}})},r=(t,n)=>e.get(O(t,n))??null,i=(e,n)=>t.get(O(e,n))??null,a=(e,t,n=null)=>{let a=r(e.scopeId,t),o=i(e.scopeId,e.id);if(!a||!o||o.isDisabled())return!1;let s=a.getGroup();if(s.disabled||s.readOnly||s.orientation===`grid`&&!S(s.columns)||!s.accepts.includes(e.type))return!1;let c=a.getItemIds().filter(n=>e.operation!==`move`||e.groupId!==t||n!==e.id),l=Object.freeze({source:e,destination:s,itemIds:Object.freeze(c),input:n===null?null:Object.freeze({...n})});return a.canDrop?.(l)!==!1},o=(e,t)=>{let n=r(e.scopeId,t.destination.groupId);if(!n)return null;let i=n.getItemIds(),a=e.operation===`move`&&e.groupId===t.destination.groupId?i.filter(t=>t!==e.id):[...i];return t.anchor!==null&&!a.includes(t.anchor.id)?null:{originalIds:i,insertionIndex:t.anchor===null?0:a.indexOf(t.anchor.id)+ +(t.anchor.edge===`after`)}},s=(e,t)=>{if(e.operation!==`move`||e.groupId!==t.destination.groupId)return!1;let n=o(e,t);return n!==null&&n.originalIds.indexOf(e.id)===n.insertionIndex},c=(e,t,n=null)=>{let i=r(e.scopeId,t.destination.groupId);if(!i||!a(e,t.destination.groupId,n))return!1;let c=i.getGroup(),l=o(e,t);if(!l||s(e,t))return!1;let u={...t,index:l.insertionIndex};return y({el:i.element,name:`ui:sortable-drop`,composed:!0,detail:Ve(e,u)}),e.label&&c.label&&Be(`${e.label} moved to ${c.label}.`),!0},l=(e,t)=>{let n=i(t.scope,t.sourceId);if(!n)return!1;let r=n.getSource(),a=t.destinationGroupId??r.groupId;return!a||t.anchorId===t.sourceId?!1:c(r,{destination:{groupId:a},anchor:{id:t.anchorId,edge:e}})},u=(e,t)=>{let n=i(t.scope,t.sourceId),a=r(t.scope,t.destinationGroupId);if(!n||!a)return!1;let o=n.getSource(),s=a.getItemIds().filter(e=>o.groupId!==t.destinationGroupId||e!==o.id),l=s.length===0?null:e===`start`?{id:s[0],edge:`before`}:{id:s.at(-1),edge:`after`};return c(o,{destination:{groupId:t.destinationGroupId},anchor:l})};return{registerGroup:t=>{let r=t.getGroup();return n(e,O(r.scopeId,r.id),()=>{let e=t.getGroup();return O(e.scopeId,e.id)},t,`group`)},registerSource:e=>{let r=e.getSource();return n(t,O(r.scopeId,r.id),()=>{let t=e.getSource();return O(t.scopeId,t.id)},e,`source`)},group:r,source:i,canDrop:a,isNoop:s,emitDrop:c,moveBefore:e=>l(`before`,e),moveAfter:e=>l(`after`,e),moveToStart:e=>u(`start`,e),moveToEnd:e=>u(`end`,e)}},k=He(),A=`--ui-sortable-drag-cursor`,j=`data-ui-sortable-dragging`,Ue=e=>{let t=document.documentElement,n=t.getAttribute(j),r=t.style.getPropertyValue(A);return t.setAttribute(j,``),t.style.setProperty(A,e.trim()||`default`),()=>{n===null?t.removeAttribute(j):t.setAttribute(j,n),r?t.style.setProperty(A,r):t.style.removeProperty(A)}},We=({props:e,effects:t})=>te({type:`parallel`,on:{PROPS_CHANGED:{reduce:`props`,effects:`reconcile`},DOM_INVALIDATED:{effects:`reconcile`}},states:{interaction:{initial:`idle`,on:{POINTER_MOVED:{reduce:`pointer`}},states:{idle:{on:{START:{target:`starting`,reduce:`start`}}},starting:{on:{STARTING_DONE:{target:`dragging`},END:{target:`ending`,reduce:`data`}}},dragging:{on:{END:{target:`ending`,reduce:`data`}}},ending:{on:{ENDING_DONE:{target:`idle`,effects:`complete`}}}}},layout:{initial:`inactive`,states:{inactive:{on:{START:{target:`calculating`}}},calculating:{entry:`resolvePlacement`,on:{POINTER_MOVED:{effects:`resolvePlacement`},LAYOUT_PROPOSED:{target:`syncing`,reduce:`data`},END:{target:`inactive`}}},syncing:{on:{RECTS_SYNCED:{target:`calculating`,effects:`synced`},END:{target:`inactive`,effects:`synced`}}}}}}},{props:e,context:{data:{},pointer:null},reducers:{start:({event:e})=>({context:{data:e.data,pointer:null}}),data:({context:e,event:t})=>({context:{...e,data:t.data}}),pointer:({context:e,event:t})=>({context:{...e,pointer:t.pointer}}),props:({context:e,event:t})=>({context:e,props:t.props})},effects:t}),M=new Map,N=new Set;function Ge(e){Ke(e);var t=M.get(e);if(t)return t;var n={timeOfEngagementStart:Date.now()};return M.set(e,n),n}function Ke(e){N.add(e)}function qe(e){N.clear(),e(),M.forEach(function(e,t){N.has(t)||M.delete(t)}),N.clear()}function Je(){M.clear()}var Ye=new Map;function Xe(e){var t=Ye.get(e);if(t)return t;var n=Ze(e);return Ye.set(e,n),n}function Ze(t){var n={type:`idle`},r=[];function i(t){if(n.type===`running`){var a=t-n.timeLastFrameFinished,o=n.latestArgs,s=e({x:o.location.current.input.clientX,y:o.location.current.input.clientY});qe(function(){r.forEach(function(e){return e({underUsersPointer:s,latestArgs:o,timeSinceLastFrame:a})})}),n.timeLastFrameFinished=t,n.frameId=requestAnimationFrame(i)}}function a(){n.type!==`idle`&&(cancelAnimationFrame(n.frameId),Je(),n={type:`idle`})}function o(e){n.type===`idle`&&(n={type:`initializing`,latestArgs:e,frameId:requestAnimationFrame(function(e){n.type===`initializing`&&(n={type:`running`,timeLastFrameFinished:e,latestArgs:n.latestArgs,frameId:requestAnimationFrame(i)})})})}function s(e){if(n.type===`idle`){o(e);return}n.latestArgs=e}return t({onDragStart:o,onDropTargetChange:s,onDrag:s,onDrop:a}),{onFrame:function(e){r.push(e)}}}var P=`data-auto-scrollable`,Qe=`[${P}="true"]`;function $e(e){return e.setAttribute(P,`true`),function(){return e.removeAttribute(P)}}function et(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function tt(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]==null?{}:arguments[t];t%2?et(Object(r),!0).forEach(function(t){n(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):et(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var nt={startHitboxAtPercentageRemainingOfElement:{top:.25,right:.25,bottom:.25,left:.25},maxScrollAtPercentageRemainingOfHitbox:{top:.5,right:.5,bottom:.5,left:.5},timeDampeningDurationMs:400,maxMainAxisHitboxSize:180},rt={standard:900,fast:1500};function it(e){return tt(tt({},nt),{},{maxPixelScrollPerSecond:rt[e?.maxScrollSpeed??`standard`]})}var at={top:function(e){return e.scrollTop>0},right:function(e){return Math.ceil(e.scrollLeft)+e.clientWidth<e.scrollWidth},bottom:function(e){return Math.ceil(e.scrollTop)+e.clientHeight<e.scrollHeight},left:function(e){return e.scrollLeft>0}},ot=[`top`,`right`,`bottom`,`left`],st={top:`vertical`,right:`horizontal`,bottom:`vertical`,left:`horizontal`},ct={start:`top`,end:`bottom`,point:`y`,size:`height`},lt={start:`left`,end:`right`,point:`x`,size:`width`},ut={vertical:{mainAxis:ct,crossAxis:lt},horizontal:{mainAxis:lt,crossAxis:ct}},dt={top:`start`,right:`end`,bottom:`end`,left:`start`};function F(e){var t=e.edge,r=e.axis;return function(e){var i=e.clientRect,a=e.config,o=ut[r],s=o.mainAxis,c=o.crossAxis,l=dt[t],u=Math.min(a.startHitboxAtPercentageRemainingOfElement[t]*i[s.size],a.maxMainAxisHitboxSize);return DOMRect.fromRect(n(n(n(n({},s.point,l===`start`?i[s.point]:i[s.point]+i[s.size]-u),c.point,i[c.point]),s.size,u),c.size,i[c.size]))}}var ft={top:F({axis:`vertical`,edge:`top`}),right:F({axis:`horizontal`,edge:`right`}),bottom:F({axis:`vertical`,edge:`bottom`}),left:F({axis:`horizontal`,edge:`left`})};function pt(e){var t=e.startOfRange,n=e.endOfRange,r=e.value;if(!(t<n)||r<t)return 0;if(r>n)return 1;var i=n-t;return(r-t)/i}function mt(e){var t=e.timeSinceLastFrame,n=e.config,r=n.maxPixelScrollPerSecond/1e3,i=Math.ceil(r*t),a=n.maxPixelScrollPerSecond/60;return Math.min(i,a)}function ht(e){var t=e.client,n=e.axis,r=e.edge,i=e.hitbox,a=e.config,o=ut[n].mainAxis,s=dt[r],c=i[o.size]*a.maxScrollAtPercentageRemainingOfHitbox[r];return s===`end`?pt({startOfRange:i[o.start],endOfRange:i[o.end]-c,value:t[o.point]}):1-pt({startOfRange:i[o.start]+c,endOfRange:i[o.end],value:t[o.point]})}function I(e){var t=e.client,n=e.timeSinceLastFrame,r=e.engagement,i=e.axis,a=e.hitbox,o=e.edge,s=e.isDistanceDampeningEnabled,c=e.config,l=mt({timeSinceLastFrame:n,config:c}),u=(s?ht({client:t,edge:o,hitbox:a,axis:i,config:c}):1)*pt({startOfRange:r.timeOfEngagementStart,endOfRange:r.timeOfEngagementStart+c.timeDampeningDurationMs,value:Date.now()}),d=Math.max(l*u,1);return dt[o]===`end`?d:-1*d}function gt(e,t){return t===`all`||e===t}function _t(e){var t=e.client,n=e.clientRect;return t.x>=n.x&&t.x<=n.x+n.width&&t.y>=n.y&&t.y<=n.y+n.height}function vt(e){return e.getBoundingClientRect()}function yt(e){var t=e.element,n=e.input,r=e.timeSinceLastFrame,i=e.engagement,a=e.config,o=e.allowedAxis,s=e.getRect,c=s===void 0?vt:s,l={x:n.clientX,y:n.clientY},u=c(t),d=ot.reduce(function(e,n){var r=ft[n]({clientRect:u,config:a}),i=st[n];return!gt(i,o)||!_t({client:l,clientRect:r})||!at[n](t)||e.set(n,{edge:n,hitbox:r}),e},new Map);return{left:function(){var e=`horizontal`,t=d.get(`left`);if(t)return I({client:l,edge:t.edge,hitbox:t.hitbox,axis:e,timeSinceLastFrame:r,engagement:i,isDistanceDampeningEnabled:!0,config:a});var n=d.get(`right`);return n?I({client:l,edge:n.edge,hitbox:n.hitbox,axis:e,timeSinceLastFrame:r,engagement:i,isDistanceDampeningEnabled:!0,config:a}):0}(),top:function(){var e=`vertical`,t=d.get(`bottom`);if(t)return I({client:l,edge:t.edge,hitbox:t.hitbox,axis:e,timeSinceLastFrame:r,engagement:i,isDistanceDampeningEnabled:!0,config:a});var n=d.get(`top`);return n?I({client:l,edge:n.edge,hitbox:n.hitbox,axis:e,timeSinceLastFrame:r,engagement:i,isDistanceDampeningEnabled:!0,config:a}):0}()}}function bt(e,t){var n=typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(!n){if(Array.isArray(e)||(n=xt(e))||t&&e&&typeof e.length==`number`){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw TypeError(`Invalid attempt to iterate non-iterable instance.
|
|
2
|
+
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||n.return==null||n.return()}finally{if(s)throw a}}}}function xt(e,t){if(e){if(typeof e==`string`)return St(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?St(e,t):void 0}}function St(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Ct(e){return!!(e.top||e.left)}function wt(e){var t=e.target,n=e.input,r=e.source,i=e.findEntry,a=e.timeSinceLastFrame,o=e.available,s=o===void 0?{top:!0,left:!0}:o;if(!Ct(s)||!t)return s;var c=t.closest(Qe);if(!c)return s;var l=i(c);if(!l)return s;function u(){return wt({target:c?.parentElement??null,findEntry:i,source:r,timeSinceLastFrame:a,input:n,available:s})}var d={input:n,source:r,element:c};if(l.canScroll&&!l.canScroll(d))return u();var f=Ge(c),p=it(l.getConfiguration?.call(l,d)),m=yt({element:c,engagement:f,input:n,timeSinceLastFrame:a,allowedAxis:l.getAllowedAxis?.call(l,d)??`all`,config:p}),h={top:0,left:0};return s.top&&m.top!==0&&(h.top=m.top,s.top=!1),s.left&&m.left!==0&&(h.left=m.left,s.left=!1),(h.top!==0||h.left!==0)&&c.scrollBy(h),u()}function Tt(e){var t=e.input,n=e.timeSinceLastFrame,r=e.available,i=e.source,a=e.entries,o=document.documentElement,s={input:t,source:i,element:o},c=bt(a),l;try{for(c.s();!(l=c.n()).done;){var u=l.value;if(!(u.canScroll&&!u.canScroll(s))){var d=yt({element:o,engagement:Ge(o),input:t,config:it(u.getConfiguration?.call(u,s)),allowedAxis:u.getAllowedAxis?.call(u,s)??`all`,getRect:function(e){return DOMRect.fromRect({y:0,x:0,width:e.clientWidth,height:e.clientHeight})},timeSinceLastFrame:n}),f={top:r.top?d.top:0,left:r.left?d.left:0};(f.top!==0||f.left!==0)&&o.scrollBy(f);break}}}catch(e){c.e(e)}finally{c.f()}}function Et(e){var t=e.input,n=e.findEntry,r=e.timeSinceLastFrame,i=e.source,a=e.getWindowScrollEntries,o=e.underUsersPointer,s=wt({target:o,timeSinceLastFrame:r,input:t,source:i,findEntry:n});Ct(s)&&Tt({input:t,source:i,entries:a(),timeSinceLastFrame:r,available:s})}function Dt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Ot(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]==null?{}:arguments[t];t%2?Dt(Object(r),!0).forEach(function(t){n(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Dt(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function kt(e){var t=e.monitor,n=new Map,i=new Set;function a(e){return n.set(e.element,e),r(o($e(e.element),function(){return n.delete(e.element)}))}function s(){var e=Ot({},arguments.length>0&&arguments[0]!==void 0?arguments[0]:{});i.add(e);function t(){i.delete(e)}return r(t)}function c(e){return n.get(e)??null}function l(){return Array.from(i)}function u(e){var t=e.latestArgs,n=e.underUsersPointer,r=e.timeSinceLastFrame;Et({input:t.location.current.input,source:t.source,findEntry:c,underUsersPointer:n,timeSinceLastFrame:r,getWindowScrollEntries:l})}return Xe(t).onFrame(u),{autoScroll:a,autoScrollWindow:s}}var At=kt({monitor:ae}),jt=At.autoScroll,Mt=At.autoScrollWindow,Nt=s();function Pt(e){e.defaultPrevented||(e.dataTransfer&&(e.dataTransfer.dropEffect=`move`),e.preventDefault())}var L=null;function Ft(){R(),L=(0,Nt.bindAll)(window,[{type:`dragover`,listener:Pt},{type:`dragenter`,listener:Pt},{type:`drop`,listener:function(e){e.preventDefault(),R()}},{type:`dragend`,listener:R}].concat(a(i({onDragEnd:R}))),{capture:!1})}function R(){var e;(e=L)==null||e(),L=null}function It(){if(window.event?.type===`drop`){var e;(e=window.event)==null||e.preventDefault()}R()}var z={start:Ft,stop:It},B=`[data-ui-sortable]`,V=`[data-ui-sortable-item]`,Lt=`[data-ui-sortable-source]`,Rt=`[x-ui-sortable\\:handle], [data-ui-sortable-handle]`,zt=`[x-ui-sortable\\:preview], [data-ui-sortable-preview]`,Bt=`[x-ui-sortable\\:indicator], [data-ui-sortable-indicator]`,Vt=`ui-sortable`,H=2,Ht=`a, button, input, select, textarea, summary, [contenteditable], [role="button"], [role="link"]`,Ut={sortableScope:m.trim,sortableId:m.trim,orientation:h([`vertical`,`horizontal`,`grid`],`vertical`),columns:p.default(0),accepts:v.array([]),disabled:g,readonly:g,feedback:h([`indicator`,`reorder`],`indicator`),sourceOpacity:p.clamp(0,1).default(.4),ghostOpacity:p.clamp(0,1).default(.92),dragCursor:m.trim.default(`default`),previewPosition:m.trim.default(`preserve`),color:h(le,`neutral`),interaction:h(ue,`edge`),label:m.trim,sortableData:v.object({})},Wt={sortableScope:m.trim,sortableId:m.trim,sortableType:m.trim,label:m.trim,disabled:g,sortableData:v.object({}),sourceOpacity:p.clamp(0,1).default(.4),ghostOpacity:p.clamp(0,1).default(.92),dragCursor:m.trim.default(`default`),previewPosition:m.trim.default(`12px 12px`),color:h(le,`neutral`),interaction:h(ue,`edge`)},Gt=[b({name:`starting`,state:`interaction.starting`,project:({context:e})=>e.data,onDone:`STARTING_DONE`,onError:`STARTING_DONE`}),b({name:`placing`,state:`layout.syncing`,project:({context:e})=>e.data,onDone:`RECTS_SYNCED`,onError:`RECTS_SYNCED`}),b({name:`ending`,state:`interaction.ending`,project:({context:e})=>e.data,onDone:`ENDING_DONE`,onError:`ENDING_DONE`})],U=new WeakMap,W=new Set,Kt=new WeakMap,qt=e=>e(),Jt=e=>queueMicrotask(e),G=null,K=0,q=null,J=(e,t)=>e.closest(t),Y=e=>[...e.querySelectorAll(V)].filter(t=>J(t.parentElement??t,B)===e),X=(e,t=e.dataset.sortableId)=>d(e,t)??``,Yt=e=>{let t=e.group(),n=Y(e.el);return{controller:e,translateBaselines:new Map(n.map(e=>[X(e),e.style.translate])),layout:{groupId:t.id,orientation:t.orientation,direction:getComputedStyle(e.el).direction===`rtl`?`rtl`:`ltr`,columns:t.columns,groupRect:e.el.getBoundingClientRect(),items:n.map(e=>({id:X(e),rect:e.getBoundingClientRect()}))}}},Z=e=>{let t=e.controller.group(),n=e.controller.el.getBoundingClientRect(),r=n.left-e.layout.groupRect.left,i=n.top-e.layout.groupRect.top,a=e=>({left:e.left+r,right:e.right+r,top:e.top+i,bottom:e.bottom+i,width:e.width,height:e.height});return{...e.layout,orientation:t.orientation,columns:t.columns,groupRect:n,items:e.layout.items.map(e=>({...e,rect:a(e.rect)}))}},Xt=(e,t,n)=>{if(t.target===n)return null;let r=q;if(!r)return null;let i=t.target,a=t.handle!==null;t.target=n;let o=c(e).animate({translate:a?n||`none`:[i||`none`,n||`none`]}).role(`layout`).play();return t.handle=o,o.finished.then(()=>{q!==r||t.handle!==o||(t.handle=null,e.style.translate=t.target,e.getBoundingClientRect(),t.target===t.baseline&&(e.removeAttribute(`data-reordering`),r.projections.delete(e)))}),o},Zt=(e=!1)=>{let t=q;if(t){if(t.projections.forEach((t,n)=>{if(e){let e=t.handle;t.handle=null,e?.stop(),c.stop(n),n.style.translate=t.baseline}else Xt(n,t,t.baseline);n.removeAttribute(`data-reordering`)}),e){t.projections.clear();let e=()=>{t.layouts.forEach(({controller:e,translateBaselines:t})=>{Y(e.el).forEach(e=>{let n=t.get(X(e));n!==void 0&&(c.stop(e),e.getAnimations().forEach(e=>{let t=e.effect;t instanceof KeyframeEffect&&t.getKeyframes().some(e=>`translate`in e)&&e.cancel()}),e.style.translate=n,e.removeAttribute(`data-reordering`))}),e.el.removeAttribute(`data-reordering`)})};e();let n=G,r=n?()=>{n(),e()}:e;G=r;let i=K;Jt(()=>{K===i&&(e(),requestAnimationFrame(()=>{K===i&&(e(),G===r&&(G=null))}))})}W.forEach(({el:e})=>e.removeAttribute(`data-reordering`))}},Qt=(e=null)=>{W.forEach(({el:t})=>{t!==e&&t.removeAttribute(`data-drag-rejected`)})},$t=e=>{let t=q;if(!t)return;let n=new Map;e.forEach(({groupId:e,id:r,x:i,y:a})=>{let o=t.layouts.get(e),s=o&&Y(o.controller.el).find(e=>X(e)===r);s&&n.set(s,{x:i,y:a,group:o.controller})}),t.projections.forEach((e,t)=>{n.has(t)||(Xt(t,e,e.baseline),t.removeAttribute(`data-reordering`))});let r=new Set;n.forEach(({x:e,y:n,group:i},a)=>{let o=t.projections.get(a);o||(o={baseline:a.style.translate,target:a.style.translate,handle:null},t.projections.set(a,o));let s=`${e}px ${n}px`;Xt(a,o,s),a.setAttribute(`data-reordering`,``),r.add(i)}),W.forEach(e=>e.el.toggleAttribute(`data-reordering`,r.has(e)))},en=(e,t,n,r=null)=>{let i=e.indicator();if(!i)return;if(!t||!r){i.hidden=!0;return}Object.assign(i.style,{position:`absolute`,left:`0`,top:`0`}),i.hidden=!1;let a=t.anchor?.edge??`empty`,o=i.offsetParent,s=o instanceof Element?o.getBoundingClientRect():{left:-window.scrollX,top:-window.scrollY},c=o instanceof HTMLElement?o.scrollLeft:0,l=o instanceof HTMLElement?o.scrollTop:0,u=r.kind===`inline-boundary`,d=r.kind===`block-boundary`,f=r.x-s.left+c-(u?H/2:0),p=r.y-s.top+l-(d?H/2:0);Object.assign(i.style,{transform:`translate3d(${f}px, ${p}px, 0)`,width:`${u?H:r.width}px`,height:`${d?H:r.height}px`,pointerEvents:`none`,zIndex:`2147483646`}),i.dataset.orientation=e.group().orientation,i.dataset.edge=a,i.dataset.index=String(t.index??0),i.dataset.operation=n??``,i.dataset.indicatorKind=r.kind},tn=()=>{q?.group&&(q.group.el.removeAttribute(`data-drag-over`),q.group.el.removeAttribute(`data-drop-edge`),q.group.el.removeAttribute(`data-drop-effect`),q.group.el.removeAttribute(`data-drop-noop`),q.group.el.removeAttribute(`data-placing`),en(q.group,null),q.group=null)},Q=(e=!1)=>{q&&(Zt(e),tn(),q.placement=null)},nn=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),rn=()=>{let e=q,t=e?.placement,n=e?.group,r=e?.controller.el,i=e?.source.groupId===null?null:e?.layouts.get(e.source.groupId)??null,a=t?e?.layouts.get(t.destination.groupId)??null:null;if(!e||!t||!n||!r?.isConnected||!a||e.source.operation!==`move`||n.group().feedback!==`reorder`)return;let o=new Set([...e.layouts.values()].flatMap(({controller:e})=>Y(e.el).filter(e=>e.getAttribute(`data-active`)===`true`).map(e=>X(e)))),s=[...e.layouts.values()].flatMap(({controller:e})=>Y(e.el)).find(e=>e===document.activeElement||e.contains(document.activeElement))?.dataset.sortableId,c=()=>{e.layouts.forEach(({controller:e})=>{Y(e.el).forEach(e=>{o.has(X(e))?e.setAttribute(`data-active`,`true`):e.removeAttribute(`data-active`)})}),s&&[...e.layouts.values()].flatMap(({controller:e})=>Y(e.el)).find(e=>X(e)===s)?.focus({preventScroll:!0})},l=i?.layout.items.map(({id:e})=>e)??[],u=a.layout.items.map(({id:e})=>e);Jt(()=>{if(q||!r.isConnected||!n.el.isConnected)return;let e=i?!nn(i.controller.itemIds(),l):!1,a=!nn(n.itemIds(),u);!e&&!a&&qt(()=>{let e=t.anchor?.id;if(e){let i=Y(n.el).find(t=>X(t)===e);if(!i?.parentNode)return;i.parentNode.insertBefore(r,t.anchor?.edge===`after`?i.nextSibling:i);return}let i=n.indicator();i?.parentNode?i.parentNode.insertBefore(r,i):n.el.append(r)}),c()})},$=(e,t=`outside`)=>{let n=q;if(!n)return;z.stop();let r=n.placement,i=n.source.groupId===null?null:n.layouts.get(n.source.groupId)??null,a=r?n.layouts.get(r.destination.groupId)??null:null,o=e===`drop`&&r&&a?Te({source:n.source,placement:r,sourceLayout:i?Z(i):null,destinationLayout:Z(a)}):null,s=o?{x:o.left,y:o.top,width:o.width,height:o.height}:Me(n.controller.el.getBoundingClientRect());e===`drop`&&rn(),Q(!0),q=null,n.controller.el.removeAttribute(`data-dragging`),n.controller.el.removeAttribute(`data-drag-operation`),n.controller.el.removeAttribute(`data-sortable-phase`),n.controller.restoreAppearance(),n.restoreCursor(),Qt(),e===`cancel`&&y({el:n.controller.el,name:`ui:sortable-cancel`,composed:!0,detail:Object.freeze({source:n.source,reason:t})});let c=n.ghost.frame();n.controller.afterEnd=()=>{n.ghost.remove(),n.controller.ghost=null,n.controller.afterEnd=null},n.controller.machine.send({type:`END`,data:{outcome:e,source:n.source,placement:e===`drop`?r:null,...e===`cancel`?{reason:t}:{},fromFrame:c,toFrame:s??c,fromTransform:n.ghost.positioner.style.transform,toTransform:s?`translate3d(${s.x}px, ${s.y}px, 0)`:n.ghost.positioner.style.transform}})},an=(e,t)=>{if(!q)return;let n=q.placement,r=q.group!==e;r&&tn();let i=e.group(),a=q.source.operation===`insert`?`indicator`:i.feedback,o=q.layouts.get(i.id),s=o?Z(o):Yt(e).layout,c=s.items,l=c.map(({id:e})=>e),u=q.source.id,d=a===`reorder`&&i.id===q.source.groupId?c.filter(({id:e})=>e!==u):c,f={groupId:i.id,orientation:i.orientation,direction:s.direction,columns:i.columns,groupRect:s.groupRect,items:d},p=q.ghost.projectedSourceFrame(t),m=a===`reorder`?{clientX:i.orientation===`vertical`?t.clientX:p.x+p.width/2,clientY:i.orientation===`horizontal`?t.clientY:p.y+p.height/2}:t,h=(a===`reorder`?ve:_e)({...f,input:m}),g=a===`indicator`?be({...f,items:c},h):null,_=a===`reorder`?h:ye({placement:h,sourceId:q.source.id,sourceGroupId:q.source.groupId,itemIds:l});if(!r&&de(n,_))return;let v=q.source.groupId===null?null:q.layouts.get(q.source.groupId)??null,b=q.layouts.get(i.id),x=k.isNoop(q.source,_),ee=a===`reorder`&&!x?Ee({source:q.source,placement:_,sourceLayout:v?Z(v):null,destinationLayout:b?Z(b):null}):[];q.group=e,q.placement=_,e.el.setAttribute(`data-drag-over`,``),e.el.dataset.dropEdge=_.anchor?.edge??`empty`,e.el.dataset.dropEffect=q.source.operation===`insert`?`copy`:`move`,e.el.toggleAttribute(`data-drop-noop`,x),y({el:e.el,name:`ui:sortable-placement-change`,composed:!0,detail:Object.freeze({source:q.source,previous:n,placement:_})}),q.controller.machine.send({type:`LAYOUT_PROPOSED`,data:{source:q.source,previous:n,placement:_,feedback:a,offsets:ee,indicatorFrame:g,noop:x}})},on=e=>{let t=q;!t?.group||!de(t.placement,e.placement)||(t.controller.el.dataset.sortablePhase=`placing`,t.group.el.setAttribute(`data-placing`,``),e.feedback===`reorder`&&!e.noop?$t(e.offsets):Zt(),e.feedback===`reorder`&&!e.noop?en(t.group,null):en(t.group,e.noop?null:e.placement,t.source.operation,e.indicatorFrame))},sn=(e,t)=>{e.setAttribute(`data-ui-sortable`,``),u(e,`data-ui-sortable`,`data-drop-target-for-element`,`data-auto-scrollable`);let n=()=>void 0,r=_({el:e,schema:Ut,onChange:()=>n()}),i={el:e,group:()=>Object.freeze({scopeId:r.sortableScope,id:X(e,r.sortableId),orientation:r.orientation,columns:r.orientation===`grid`?r.columns:null,accepts:r.accepts,disabled:r.disabled,readOnly:r.readonly,...r.label?{label:r.label}:{},feedback:r.feedback,sourceOpacity:r.sourceOpacity,ghostOpacity:r.ghostOpacity,dragCursor:r.dragCursor,previewPosition:r.previewPosition,color:r.color,interaction:r.interaction,...Object.keys(r.sortableData).length?{data:Object.freeze({...r.sortableData})}:{}}),itemIds:()=>Y(e).map(e=>X(e)).filter(Boolean),indicator:()=>[...e.querySelectorAll(Bt)].find(t=>J(t.parentElement??t,B)===e)??null,refresh:()=>n()};(!r.sortableScope||!i.group().id||r.accepts.length===0)&&l(`Invalid sortable group props`,e),r.orientation===`grid`&&!S(r.columns)&&l(`Grid sortable groups require positive data-columns`,e),U.set(e,i),W.add(i);let a=k.registerGroup({element:e,getGroup:i.group,getItemIds:i.itemIds,canDrop:t=>Kt.get(e)?.(t)!==!1});n=()=>{q?.group===i&&$(`cancel`,`removed`),a.refresh()};let o=ee(e,{invalidateDom:i.refresh}),s=re({element:e,canDrop:({source:t,input:n})=>{let r=q,a=t.data.marker===Vt&&r!==null,o=a&&k.canDrop(r.source,i.group().id,{clientX:n.clientX,clientY:n.clientY});return e.toggleAttribute(`data-drag-rejected`,a&&!o),o},getDropEffect:()=>`move`,onDrop:()=>{if(!q||q.group!==i||!q.placement)return;let e=k.emitDrop(q.source,q.placement,q.input),t=i.group();$(e?`drop`:`cancel`,t.disabled||t.readOnly?`disabled`:`outside`)}}),c=jt({element:e});t.cleanup(()=>{q?.group===i&&Q(!0),c(),s(),o(),a(),r.disconnect(),U.delete(e),W.delete(i),e.removeAttribute(`data-drag-rejected`)})},cn=(e,t,n)=>{let r=t===`item`?`data-ui-sortable-item`:`data-ui-sortable-source`;e.setAttribute(r,``),u(e,r,`draggable`);let i=()=>t===`item`?J(e.parentElement??e,B):null,a,o=x({schema:Wt,hooks:Gt,createMachine:({props:t})=>We({props:t,effects:{resolvePlacement:({context:e})=>{let t=q,n=e.pointer;if(!t||!n)return;let r=n.destinationId===null?null:t.layouts.get(n.destinationId)?.controller??null;r?an(r,n.input):Q()},synced:()=>{e.removeAttribute(`data-sortable-phase`),q?.group?.el.removeAttribute(`data-placing`)},complete:()=>a.afterEnd?.(),reconcile:()=>a.refresh()}}),resolveTransitionElement:({name:e})=>e===`starting`?a.ghost?.visual:e===`placing`?q?.group?.el:a.ghost?.positioner});o.connect(e);let s=()=>o.getCommittedSnapshot().props;a={el:e,owner:i,source:()=>{let n=s(),r=i(),a=r?U.get(r)?.group():null,o={scopeId:t===`item`?a?.scopeId??``:n.sortableScope,id:X(e,n.sortableId),type:n.sortableType,...n.label?{label:n.label}:{},...Object.keys(n.sortableData).length?{data:Object.freeze({...n.sortableData})}:{}};return Object.freeze(t===`item`?{operation:`move`,groupId:a?.id??``,...o}:{operation:`insert`,groupId:null,...o})},disabled:()=>{let e=i(),t=e?U.get(e)?.group():null;return s().disabled||t?.disabled===!0||t?.readOnly===!0},appearance:()=>{let e=s(),t=i(),n=t?U.get(t)?.group():null;return{sourceOpacity:n?.sourceOpacity??e.sourceOpacity,ghostOpacity:n?.ghostOpacity??e.ghostOpacity,dragCursor:n?.dragCursor??e.dragCursor,previewPosition:n?.previewPosition??e.previewPosition,color:n?.color??e.color,interaction:n?.interaction??e.interaction}},refresh:()=>void 0,restoreAppearance:()=>{a.previousOpacity!==null&&(e.style.opacity=a.previousOpacity,a.previousOpacity=null)},machine:o,ghost:null,afterEnd:null,previousOpacity:null};let c=o.onTransition(`placing`,e=>on(e.data)),d=e.getAttributeNames().some(e=>e===`x-ui-transition:ending`)?()=>void 0:o.onTransition(`ending`,e=>{let t=e.data.toFrame??null;return a.ghost?.finish(t)}),f=a.source();(!f.scopeId||!f.id||!f.type)&&l(`Invalid sortable source props`,e);let p=k.registerSource({element:e,getSource:a.source,isDisabled:a.disabled});a.refresh=()=>{q?.controller===a&&$(`cancel`,`removed`),p.refresh()};let m=[...e.querySelectorAll(Rt)].find(t=>J(t,`${V}, ${Lt}`)===e),h=[...e.querySelectorAll(zt)].find(t=>J(t,`${V}, ${Lt}`)===e),g=se(e,`move`),_=ce({element:e,...m?{dragHandle:m}:{},canDrag:({input:t})=>{let n=document.elementFromPoint(t.clientX,t.clientY)?.closest(Ht)??null;return!a.disabled()&&(!!m||n===null||n===e)},getInitialData:()=>{let e=a.source();return{marker:Vt,scopeId:e.scopeId,sortableId:e.id,sortableType:e.type}},onGenerateDragPreview:oe,onDragStart:t=>{G?.(),G=null,K+=1,z.start();let n=a.source(),r=ie(t),i=a.appearance(),s=Ne({source:e,input:ne(t),preview:h??null,previewPosition:h?.dataset.previewPosition||i.previewPosition,opacity:i.ghostOpacity,color:i.color,interaction:i.interaction});s.move(r),a.ghost=s,a.previousOpacity=e.style.opacity,e.style.opacity=`${i.sourceOpacity}`;let c=Ue(i.dragCursor);q={controller:a,source:n,ghost:s,placement:null,group:null,layouts:new Map([...W].flatMap(e=>{let t=e.group();return t.scopeId===n.scopeId?[[t.id,Yt(e)]]:[]})),projections:new Map,input:r,timestamp:performance.now(),restoreCursor:c},e.setAttribute(`data-dragging`,``),e.dataset.dragOperation=n.operation,y({el:e,name:`ui:sortable-start`,composed:!0,detail:Object.freeze({source:n})}),o.send({type:`START`,data:{source:n,sourceFrame:Me(e.getBoundingClientRect()),ghostFrame:s.frame()}})},onDrag:t=>{if(q?.controller!==a)return;let n=ie(t),r=q.input,i=performance.now(),s=Math.max(i-q.timestamp,1);q.input=n,q.timestamp=i,q.ghost.move(n);let c=t.location.current.dropTargets.map(({element:e})=>e instanceof HTMLElement?U.get(e):void 0).find(e=>e!==void 0);o.send({type:`POINTER_MOVED`,pointer:{destinationId:c?.group().id??null,input:n}}),Qt(document.elementFromPoint(n.clientX,n.clientY)?.closest(B)??null),y({el:e,name:`ui:sortable-drag`,composed:!0,detail:Object.freeze({source:q.source,input:Object.freeze(n),previousInput:Object.freeze(r),delta:Object.freeze({x:n.clientX-r.clientX,y:n.clientY-r.clientY}),velocity:Object.freeze({x:(n.clientX-r.clientX)/s,y:(n.clientY-r.clientY)/s}),ghostFrame:Object.freeze({...q.ghost.frame()})})})},onDrop:()=>queueMicrotask(()=>{q?.controller===a&&$(`cancel`,a.disabled()?`disabled`:`outside`)})});n.cleanup(()=>{if(q?.controller===a){let t=q;z.stop(),Q(!0),q=null,e.removeAttribute(`data-dragging`),e.removeAttribute(`data-drag-operation`),e.removeAttribute(`data-sortable-phase`),y({el:e,name:`ui:sortable-cancel`,composed:!0,detail:Object.freeze({source:t.source,reason:`removed`})}),t.ghost.remove(),t.restoreCursor(),Qt(),a.restoreAppearance(),a.ghost=null,a.afterEnd=null}_(),g(),c(),d(),p(),o.disconnect(),a.afterEnd?.(),a.ghost?.remove(),a.ghost=null,a.afterEnd=null})},ln=null,un=e=>{e.addInitSelector(()=>`[x-ui-sortable], [x-ui-sortable\\:item], [x-ui-sortable\\:source]`),qt=t=>e.mutateDom(t),ln??=Mt(),e.directive(`ui-sortable`,e.skipDuringClone((e,{value:t,expression:n},r)=>{e instanceof HTMLElement&&(t?t===`item`||t===`source`?cn(e,t,r):t===`handle`?(e.setAttribute(`data-ui-sortable-handle`,``),u(e,`data-ui-sortable-handle`)):t===`indicator`?(e.setAttribute(`data-ui-sortable-indicator`,``),u(e,`data-ui-sortable-indicator`,`aria-hidden`,`hidden`),e.setAttribute(`aria-hidden`,`true`),e.hidden=!0):t===`preview`?(e.setAttribute(`data-ui-sortable-preview`,``),u(e,`data-ui-sortable-preview`,`data-preview-position`)):t===`can-drop`&&n?.trim()&&(Kt.set(e,e=>r.evaluate(n,{scope:{$sortable:e}})!==!1),r.cleanup(()=>Kt.delete(e))):sn(e,r))}))},dn=new WeakSet,fn=e=>{dn.has(e)||(dn.add(e),f(k),un(e))};export{k as i,un as n,He as r,fn as t};
|
|
3
|
+
//# sourceMappingURL=capability-sortable-D5jfePOE.js.map
|