@vireo-ai/trellis-ui 0.1.55 → 0.1.56

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.
Files changed (145) hide show
  1. package/README.md +1 -23
  2. package/package.json +3 -2
  3. package/packages/client/types/components/badge/contract.d.ts +1 -1
  4. package/packages/client/types/components/box/contract.d.ts +3 -3
  5. package/packages/client/types/components/button/contract.d.ts +1 -1
  6. package/packages/client/types/components/container/contract.d.ts +3 -3
  7. package/packages/client/types/components/date-picker/contract.d.ts +2 -2
  8. package/packages/client/types/components/date-picker/machine.d.ts +2 -2
  9. package/packages/client/types/components/flex/contract.d.ts +3 -3
  10. package/packages/client/types/components/frame/contract.d.ts +3 -3
  11. package/packages/client/types/components/grid/contract.d.ts +3 -3
  12. package/packages/client/types/components/input/contract.d.ts +2 -2
  13. package/packages/client/types/components/layout.d.ts +3 -3
  14. package/packages/client/types/components/modal/contract.d.ts +3 -2
  15. package/packages/client/types/components/modal/index.d.ts +1 -1
  16. package/packages/client/types/components/section/contract.d.ts +3 -3
  17. package/packages/client/types/components/select/contract.d.ts +1 -1
  18. package/packages/client/types/components/select/machine.d.ts +2 -2
  19. package/packages/client/types/components/stack/contract.d.ts +3 -3
  20. package/packages/client/types/components/table/contract.d.ts +1 -1
  21. package/packages/client/types/components/textarea/contract.d.ts +1 -1
  22. package/packages/client/types/runtime/focus-scope.d.ts +5 -6
  23. package/packages/client/types/runtime/focus.d.ts +9 -0
  24. package/packages/client/types/runtime/index.d.ts +2 -1
  25. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/build-metadata.json +341 -326
  26. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js +1 -1
  27. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut.js +1 -1
  28. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js +1 -1
  29. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-motion-C3q5Xzv2.js → capability-motion-B7n3PcSH.js} +2 -2
  30. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-motion-C3q5Xzv2.js.map → capability-motion-B7n3PcSH.js.map} +1 -1
  31. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-DZUQHJ3A.js +2 -0
  32. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-DZUQHJ3A.js.map +1 -0
  33. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-BgPVyFfh.js +5 -0
  34. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-sortable-Bh6pkITu.js.map → capability-sortable-BgPVyFfh.js.map} +1 -1
  35. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-hTbwy6oQ.js +2 -0
  36. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-hTbwy6oQ.js.map +1 -0
  37. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{controller-crMEr9_l.js → controller-CalXJ5hB.js} +2 -2
  38. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{controller-crMEr9_l.js.map → controller-CalXJ5hB.js.map} +1 -1
  39. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-DOHj5fa1.js → core-CYvnO__o.js} +2 -2
  40. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-DOHj5fa1.js.map → core-CYvnO__o.js.map} +1 -1
  41. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-Do0FfF4Z.js +2 -0
  42. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-Do0FfF4Z.js.map +1 -0
  43. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-ollD3I52.js → entry.generated-B4lDxzh9.js} +2 -2
  44. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-ollD3I52.js.map → entry.generated-B4lDxzh9.js.map} +1 -1
  45. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-D8iA1e6i.js → entry.generated-BQNpmLZO.js} +2 -2
  46. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-D8iA1e6i.js.map → entry.generated-BQNpmLZO.js.map} +1 -1
  47. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BXvp4vUv.js +2 -0
  48. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BXvp4vUv.js.map +1 -0
  49. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BlsLkwW8.js +2 -0
  50. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BlsLkwW8.js.map +1 -0
  51. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BeNK2EFl.js → entry.generated-CC-C5gQn.js} +2 -2
  52. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BeNK2EFl.js.map → entry.generated-CC-C5gQn.js.map} +1 -1
  53. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CheA8dXD.js +2 -0
  54. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CheA8dXD.js.map +1 -0
  55. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CvL196IN.js → entry.generated-CwuIK_Zx.js} +2 -2
  56. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CvL196IN.js.map → entry.generated-CwuIK_Zx.js.map} +1 -1
  57. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D-2vjhTV.js +2 -0
  58. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D-2vjhTV.js.map +1 -0
  59. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DSWnCzSX.js +2 -0
  60. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DSWnCzSX.js.map +1 -0
  61. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DaC7gw-h.js +2 -0
  62. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DaC7gw-h.js.map +1 -0
  63. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DVOBR4CK.js → entry.generated-DaXIKPN9.js} +2 -2
  64. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DVOBR4CK.js.map → entry.generated-DaXIKPN9.js.map} +1 -1
  65. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BmVGptdJ.js → entry.generated-Dfm1775-.js} +2 -2
  66. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BmVGptdJ.js.map → entry.generated-Dfm1775-.js.map} +1 -1
  67. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DuY9bHje.js +2 -0
  68. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DuY9bHje.js.map +1 -0
  69. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-QFVPoffg.js +2 -0
  70. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-QFVPoffg.js.map +1 -0
  71. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-d1MxpnFh.js +2 -0
  72. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-d1MxpnFh.js.map +1 -0
  73. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-pfUkaGe1.js +2 -0
  74. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-pfUkaGe1.js.map +1 -0
  75. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-xjydizn-.js +2 -0
  76. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-xjydizn-.js.map +1 -0
  77. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{flip-XeJ05afl.js → flip-BGTjVnQy.js} +2 -2
  78. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{flip-XeJ05afl.js.map → flip-BGTjVnQy.js.map} +1 -1
  79. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-pk_lz9sg.js +2 -0
  80. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-pk_lz9sg.js.map +1 -0
  81. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-scope-BrYxsrhc.js +2 -0
  82. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-scope-BrYxsrhc.js.map +1 -0
  83. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-CbwLBhMt.js → motion-fU4E5Q4w.js} +2 -2
  84. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-CbwLBhMt.js.map → motion-fU4E5Q4w.js.map} +1 -1
  85. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-B3f-Nt9P.js +4 -0
  86. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-B3f-Nt9P.js.map +1 -0
  87. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion.js +1 -1
  88. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid.js +1 -1
  89. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker.js +1 -1
  90. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown.js +1 -1
  91. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/formset.js +1 -1
  92. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js +1 -1
  93. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input.js +1 -1
  94. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding.js +1 -1
  95. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal.js +1 -1
  96. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels.js +1 -1
  97. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio.js +1 -1
  98. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select.js +1 -1
  99. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar.js +1 -1
  100. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider.js +1 -1
  101. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs.js +1 -1
  102. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast.js +1 -1
  103. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip.js +1 -1
  104. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer.js +1 -1
  105. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core.js +1 -1
  106. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js +1 -1
  107. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/logical-entry-manifest.json +152 -138
  108. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.js +11 -11
  109. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min.js +11 -11
  110. package/packages/client/types/runtime/focus-handoff.d.ts +0 -12
  111. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-BwvEqEbL.js +0 -2
  112. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-BwvEqEbL.js.map +0 -1
  113. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-Bh6pkITu.js +0 -5
  114. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-BbxUBQFs.js +0 -2
  115. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-BbxUBQFs.js.map +0 -1
  116. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-FA9FLGtB.js +0 -2
  117. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-FA9FLGtB.js.map +0 -1
  118. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B41qiwNq.js +0 -2
  119. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B41qiwNq.js.map +0 -1
  120. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B7n4iFyw.js +0 -2
  121. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B7n4iFyw.js.map +0 -1
  122. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Bq2KAnfO.js +0 -2
  123. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Bq2KAnfO.js.map +0 -1
  124. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C3cRWutN.js +0 -2
  125. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C3cRWutN.js.map +0 -1
  126. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CGasYxmV.js +0 -2
  127. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CGasYxmV.js.map +0 -1
  128. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CyynUmGS.js +0 -2
  129. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CyynUmGS.js.map +0 -1
  130. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DScbsE6-.js +0 -2
  131. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DScbsE6-.js.map +0 -1
  132. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DjKX5KuB.js +0 -2
  133. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DjKX5KuB.js.map +0 -1
  134. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-R1BlPlZW.js +0 -2
  135. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-R1BlPlZW.js.map +0 -1
  136. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-iMJrYzAB.js +0 -2
  137. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-iMJrYzAB.js.map +0 -1
  138. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-n_t4T8XC.js +0 -2
  139. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-n_t4T8XC.js.map +0 -1
  140. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-BE3g0swK.js +0 -2
  141. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-BE3g0swK.js.map +0 -1
  142. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-scope-DtaPVNl5.js +0 -2
  143. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-scope-DtaPVNl5.js.map +0 -1
  144. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CGwc8KXJ.js +0 -4
  145. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CGwc8KXJ.js.map +0 -1
@@ -1,12 +0,0 @@
1
- type FocusHandoffState = {
2
- pointerDown: boolean;
3
- pointerFocused: HTMLElement | null;
4
- indicatorSuppressed: HTMLElement | null;
5
- shortcut: boolean;
6
- shortcutReset: number | undefined;
7
- };
8
- declare const ensureFocusHandoff: (document: Document) => FocusHandoffState;
9
- declare const beginShortcutFocusHandoff: (document: Document) => void;
10
- declare const isShortcutFocusHandoff: (document: Document) => boolean;
11
- declare const focusWithoutIndicator: (element: HTMLElement) => void;
12
- export { beginShortcutFocusHandoff, ensureFocusHandoff, focusWithoutIndicator, isShortcutFocusHandoff, };
@@ -1,2 +0,0 @@
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,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-BwvEqEbL.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"capability-shortcut-BwvEqEbL.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,5 +0,0 @@
1
- import{_ as e,b as t,c as n,h as r,u as i,x as a}from"./element-adapter-native-data-key-DrqJDAVH.js";import{r as o}from"./dom-DiTFTWeR.js";import{g as s,h as c,r as l}from"./ui-CGwc8KXJ.js";import{t as u}from"./motion-CbwLBhMt.js";import{n as d}from"./morph-Cq3V_23_.js";import{c as f,f as p,l as m,n as h,o as g,s as _}from"./codecs-CQ7olTJL.js";import{i as v,t as y}from"./alpine-machine-CE2UN4Qu.js";import{n as b}from"./dom-invalidation-Dw6clnS4.js";import{t as x}from"./machine-CNnHDbyo.js";import{a as ee,i as S,n as te,o as ne,r as re,t as ie}from"./pdd-BG5sXFGF.js";import{R as C,y as w}from"./common-De1R7Xh6.js";var T=e=>e!==null&&Number.isInteger(e)&&e>0,E=4,D=(e,t)=>e===t||!!(e&&t&&e.destination.groupId===t.destination.groupId&&e.anchor?.id===t.anchor?.id&&e.anchor?.edge===t.anchor?.edge&&e.index===t.index),O=({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))},k=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)}],ae=(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)))}]},oe=({columns:e,direction:t,groupRect:n,items:r})=>{if(!T(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=>O({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=>O({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},A=(e,t)=>e.reduce((e,n)=>n.distance(t)<e.distance(t)?n:e),se=e=>{if(e.items.length===0)return{destination:{groupId:e.groupId},anchor:null,index:0};let t=A(e.orientation===`horizontal`?ae(e.items,e.direction):e.orientation===`grid`?oe(e):k(e.items),e.input);return{destination:{groupId:e.groupId},anchor:t.anchor,index:t.index}},ce=e=>{if(e.items.length===0||e.orientation===`grid`)return se(e);let t=e.orientation===`vertical`?e.input.clientY:e.input.clientX*(e.direction===`rtl`?-1:1),n=e.items.findIndex(({rect:n})=>{let r=e.orientation===`vertical`?n.top+n.height/2:(n.left+n.width/2)*(e.direction===`rtl`?-1:1);return t<r}),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}},le=({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=Math.max(0,Math.min(a.length,e.index>i?e.index-1:e.index)),s=a.length===0?null:o===a.length?{id:a.at(-1),edge:`after`}:{id:a[o],edge:`before`};return{destination:e.destination,anchor:s,index:o}},ue=(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-E:n.left+E,y:n.top,width:0,height:n.height,kind:`inline-boundary`}:{x:n.left,y:n.top+E,width:n.width,height:0,kind:`block-boundary`};let o=t.index,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-E:s.rect.bottom+E;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`?E:-4):u(s)+(a===`rtl`?-4:E),y:n.top,width:0,height:n.height,kind:`inline-boundary`};let d=e.columns;if(!T(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+E;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`?E:-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:E)}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 de(e){var t=e.list,n=e.startIndex,r=e.finishIndex;if(n===-1||r===-1)return Array.from(t);var i=Array.from(t),o=i.splice(n,1),s=a(o,1)[0];return i.splice(r,0,s),i}var j=(e,t,n)=>({groupId:e,id:t.id,x:n.left-t.rect.left,y:n.top-t.rect.top}),M=({x:e,y:t})=>e!==0||t!==0,N=(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}),fe=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 N(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 N(a.rect,e,0)}if(i&&t.length>=i){let e=t[t.length-i];return N(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 N(a.rect,s,0)},P=e=>{let t=fe(e);return t?[...e.items.map(({rect:e})=>e),t]:[]},pe=({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));return e.groupId===r.groupId&&n?n.items[Math.min(i,n.items.length-1)]?.rect??r.groupRect:P(r)[i]??r.groupRect},me=({source:e,placement:t,sourceLayout:n,destinationLayout:r=n})=>{if(!r)return[];let i=Math.max(0,Math.min(r.items.length,t.index));if(e.groupId===r.groupId&&n){let t=n.items.findIndex(({id:t})=>t===e.id);if(t<0)return[];let r=de({list:[...n.items],startIndex:t,finishIndex:i}),a=new Map;return r.forEach((e,t)=>{let r=e.id,i=n.items[t]?.rect;i&&!a.has(r)&&a.set(r,i)}),n.items.map(e=>{let t=a.get(e.id);return t?j(n.groupId,e,t):null}).filter(e=>e!==null).filter(M)}let a=P(r),o=r.items.map((e,t)=>j(r.groupId,e,a[t<i?t:t+1])).filter(M);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=j(n.groupId,c,a[i]??r.groupRect);return M(l)&&o.push(l),n.items.slice(s+1).forEach((e,t)=>{o.push(j(n.groupId,e,n.items[s+t].rect))}),o},he=/^-?(?:\d+(?:\.\d+)?|\.\d+)(?:px)?$/,F=(e,t,n,r,i)=>e===r?t:e===`center`?t-n/2:e===i?t-n:he.test(e)?t+Number.parseFloat(e):null,I=({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=F(o[0],t.clientX,i.width,`left`,`right`),c=F(o[1],t.clientY,i.height,`top`,`bottom`);return s===null||c===null?a:{x:s,y:c}},ge=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)})},_e=(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)})},ve=e=>({x:e.left,y:e.top,width:e.width,height:e.height}),ye=({source:e,input:t,preview:n,previewPosition:r=`preserve`,opacity:i=.92,color:a=`neutral`,interaction:o=`edge`})=>{let s=e.getBoundingClientRect(),c=document.createElement(`div`),l=document.createElement(`div`),d=document.createElement(`div`),f=n?.content.firstElementChild?.cloneNode(!0),p=f instanceof HTMLElement,m=p?f:e.cloneNode(!0);p||_e(e,m),ge(m),c.setAttribute(`data-ui-sortable-overlay`,``),c.setAttribute(`popover`,`manual`),l.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`)&&c.classList.add(`dark`),h?.classList.contains(`light`)&&c.classList.add(`light`),h?.dataset.theme&&(c.dataset.theme=h.dataset.theme),Object.assign(c.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(l.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),l.append(d),c.append(l),document.body.append(c),c.showPopover?.();let g=l.getBoundingClientRect(),_=p?{width:g.width,height:g.height}:{width:s.width,height:s.height},v=e=>I({value:r,input:e,initialInput:t,sourceRect:s,previewSize:_}),y=e=>I({value:`preserve`,input:e,initialInput:t,sourceRect:s,previewSize:{width:s.width,height:s.height}}),b=v(t),x=u.createController({values:{x:{initial:b.x,transition:u.roles.layout},y:{initial:b.y,transition:u.roles.layout}},style:({x:e,y:t})=>({transform:`translate3d(${e}px, ${t}px, 0)`})});return x.mount(l),{positioner:l,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(),c.remove()}}},L=t(),be=1e3,xe=null,R=`1px`,Se={width:R,height:R,padding:`0`,position:`absolute`,border:`0`,clip:`rect(${R}, ${R}, ${R}, ${R})`,overflow:`hidden`,whiteSpace:`nowrap`,marginTop:`-${R}`,pointerEvents:`none`};function Ce(){var e=document.createElement(`div`);return e.setAttribute(`role`,`status`),Object.assign(e.style,Se),document.body.append(e),e}function we(){return xe===null&&(xe=Ce()),xe}var z=null;function Te(){z!==null&&clearTimeout(z),z=null}function Ee(e){we(),Te(),z=setTimeout(function(){z=null;var t=we();t.textContent=e},be)}var De=new WeakMap,B=(e,t)=>`${e}\u0000${t}`,Oe=(e,t)=>{let n={destination:Object.freeze({...t.destination}),anchor:t.anchor===null?null:Object.freeze({...t.anchor}),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})},ke=()=>{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(B(t,n))??null,i=(e,n)=>t.get(B(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`&&!T(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},s=(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];if(t.anchor!==null&&!a.includes(t.anchor.id))return null;let o=t.anchor===null?0:a.indexOf(t.anchor.id)+ +(t.anchor.edge===`after`);return{originalIds:i,placement:{destination:t.destination,anchor:t.anchor,index:o}}},c=(e,t,n)=>e.operation===`move`&&e.groupId===n.destination.groupId&&t.indexOf(e.id)===n.index,l=(e,t)=>{let n=s(e,t);return n!==null&&c(e,n.originalIds,n.placement)},u=(e,t,n=null)=>{let i=r(e.scopeId,t.destination.groupId);if(!i||!a(e,t.destination.groupId,n))return null;let l=i.getGroup(),u=s(e,t);if(!u||c(e,u.originalIds,u.placement))return null;let d=Oe(e,u.placement),f=!1;return Object.freeze({placement:u.placement,commit:()=>{f||(f=!0,o({el:i.element,name:`ui:sortable-drop`,composed:!0,detail:d}),e.label&&l.label&&Ee(`${e.label} moved to ${l.label}.`))}})},d=(e,t,n=null)=>{let r=u(e,t,n);return r?(r.commit(),!0):!1},f=(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:d(r,{destination:{groupId:a},anchor:{id:t.anchorId,edge:e}})},p=(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),c=s.length===0?null:e===`start`?{id:s[0],edge:`before`}:{id:s.at(-1),edge:`after`};return d(o,{destination:{groupId:t.destinationGroupId},anchor:c})},m={registerGroup:t=>{let r=t.getGroup();return n(e,B(r.scopeId,r.id),()=>{let e=t.getGroup();return B(e.scopeId,e.id)},t,`group`)},registerSource:e=>{let r=e.getSource();return n(t,B(r.scopeId,r.id),()=>{let t=e.getSource();return B(t.scopeId,t.id)},e,`source`)},group:r,source:i,canDrop:a,isNoop:l,emitDrop:d,moveBefore:e=>f(`before`,e),moveAfter:e=>f(`after`,e),moveToStart:e=>p(`start`,e),moveToEnd:e=>p(`end`,e)};return De.set(m,u),m},Ae=(e,t,n,r=null)=>De.get(e)?.(t,n,r)??null,V=`--ui-sortable-drag-cursor`,H=`data-ui-sortable-dragging`,je=e=>{let t=document.documentElement,n=t.getAttribute(H),r=t.style.getPropertyValue(V);return t.setAttribute(H,``),t.style.setProperty(V,e.trim()||`default`),()=>{n===null?t.removeAttribute(H):t.setAttribute(H,n),r?t.style.setProperty(V,r):t.style.removeProperty(V)}},Me=({props:e,effects:t})=>x({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}),Ne=`data-pdnd-honey-pot`;function Pe(e){return e instanceof Element&&e.hasAttribute(`data-pdnd-honey-pot`)}function Fe(e){var t=document.elementsFromPoint(e.x,e.y),n=a(t,2),r=n[0],i=n[1];return r?Pe(r)?i??null:r:null}var Ie=2147483647,Le={inset:`unset`,border:`none`,padding:0,margin:0,overflow:`visible`,color:`inherit`,background:`transparent`,width:`auto`,height:`auto`};function U(e){var t=null;return function(){if(!t){var n=[...arguments];t={result:e.apply(this,n)}}return t.result}}var Re=U(function(){return typeof HTMLElement<`u`&&typeof HTMLElement.prototype.showPopover==`function`});function ze(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 Be(t){for(var n=1;n<arguments.length;n++){var r=arguments[n]==null?{}:arguments[n];n%2?ze(Object(r),!0).forEach(function(n){e(t,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):ze(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}var W=2,Ve=W/2;function He(e){return{x:Math.floor(e.x),y:Math.floor(e.y)}}function Ue(e){return{x:e.x-Ve,y:e.y-Ve}}function We(e){return{x:Math.max(e.x,0),y:Math.max(e.y,0)}}function Ge(e){return{x:Math.min(e.x,window.innerWidth-W),y:Math.min(e.y,window.innerHeight-W)}}function Ke(e){var t=e.client,n=Ge(We(Ue(He(t))));return DOMRect.fromRect({x:n.x,y:n.y,width:W,height:W})}function qe(e){var t=e.clientRect;return{left:`${t.left}px`,top:`${t.top}px`,width:`${t.width}px`,height:`${t.height}px`}}function Je(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 Ye(e){var t=e.initial,n=document.createElement(`div`);n.setAttribute(Ne,`true`),Re()&&n.setAttribute(`popover`,`manual`);var r=Ke({client:t});Object.assign(n.style,Be(Be({position:`fixed`},Re()?Le:{zIndex:Ie}),{},{backgroundColor:`transparent`,padding:0,margin:0,boxSizing:`border-box`,pointerEvents:`auto`},qe({clientRect:r}))),document.body.appendChild(n),Re()&&n.showPopover();var i=(0,L.bind)(window,{type:`pointermove`,listener:function(e){r=Ke({client:{x:e.clientX,y:e.clientY}}),Object.assign(n.style,qe({clientRect:r}))},options:{capture:!0}});return function(e){var t=e.current;if(i(),Je({client:t,clientRect:r})){n.remove();return}function a(){o(),n.remove()}var o=(0,L.bindAll)(window,[{type:`pointerdown`,listener:a},{type:`pointermove`,listener:a},{type:`focusin`,listener:a},{type:`focusout`,listener:a},{type:`dragstart`,listener:a},{type:`dragenter`,listener:a},{type:`dragover`,listener:a}],{capture:!0})}}function Xe(){var e=null;function t(){return e=null,(0,L.bind)(window,{type:`pointermove`,listener:function(t){e={x:t.clientX,y:t.clientY}},options:{capture:!0}})}function n(){var t=null;return function(n){var r=n.eventName,i=n.payload;if(r===`onDragStart`){var a=i.location.initial.input;t=Ye({initial:e??{x:a.clientX,y:a.clientY}})}if(r===`onDrop`){var o,s=i.location.current.input;(o=t)==null||o({current:{x:s.clientX,y:s.clientY}}),t=null,e=null}}}return{bindEvents:t,getOnPostDispatch:n}}var Ze=U(function(){return navigator.userAgent.includes(`Firefox`)}),Qe=U(function(){var e=navigator.userAgent;return e.includes(`AppleWebKit`)&&!e.includes(`Chrome`)});function $e(e){return`nodeName`in e}function et(e){return $e(e)&&e.ownerDocument!==document}var tt={isLeavingWindow:Symbol(`leaving`),isEnteringWindow:Symbol(`entering`)};(function(){if(typeof window>`u`||!Qe())return;function e(){return{enterCount:0,isOverWindow:!1}}var t=e();function n(){t=e()}(0,L.bindAll)(window,[{type:`dragstart`,listener:function(){t.enterCount=0,t.isOverWindow=!0}},{type:`drop`,listener:n},{type:`dragend`,listener:n},{type:`dragenter`,listener:function(e){!t.isOverWindow&&t.enterCount===0&&(e[tt.isEnteringWindow]=!0),t.isOverWindow=!0,t.enterCount++}},{type:`dragleave`,listener:function(e){t.enterCount--,t.isOverWindow&&t.enterCount===0&&(e[tt.isLeavingWindow]=!0,t.isOverWindow=!1)}}],{capture:!0})})();function nt(e){var t=e.dragLeave;return Qe()?t.hasOwnProperty(tt.isLeavingWindow):!1}function rt(e){var t=e.dragLeave,n=t.type,r=t.relatedTarget;return n===`dragleave`?Qe()?nt({dragLeave:t}):r==null?!0:Ze()?et(r):r instanceof HTMLIFrameElement:!1}function it(e){var t=e.onDragEnd;return[{type:`pointermove`,listener:function(){var e=0;return function(){if(e<20){e++;return}t()}}()},{type:`pointerdown`,listener:t}]}function G(e){return{altKey:e.altKey,button:e.button,buttons:e.buttons,ctrlKey:e.ctrlKey,metaKey:e.metaKey,shiftKey:e.shiftKey,clientX:e.clientX,clientY:e.clientY,pageX:e.pageX,pageY:e.pageY}}var at=n(function(e){return e()}),K=function(){var e=null;function t(t){e={frameId:requestAnimationFrame(function(){e=null,t()}),fn:t}}function n(){e&&=(cancelAnimationFrame(e.frameId),e.fn(),null)}return{schedule:t,flush:n}}();function ot(e){var t=e.source,n=e.initial,r=e.dispatchEvent,i={dropTargets:[]};function a(e){r(e),i={dropTargets:e.payload.location.current.dropTargets}}return{start:function(e){var r=e.nativeSetDragImage,o={current:n,previous:i,initial:n};a({eventName:`onGenerateDragPreview`,payload:{source:t,location:o,nativeSetDragImage:r}}),K.schedule(function(){a({eventName:`onDragStart`,payload:{source:t,location:o}})})},dragUpdate:function(e){var r=e.current;K.flush(),at.cancel(),a({eventName:`onDropTargetChange`,payload:{source:t,location:{initial:n,previous:i,current:r}}})},drag:function(e){var r=e.current;at(function(){K.flush(),a({eventName:`onDrag`,payload:{source:t,location:{initial:n,previous:i,current:r}}})})},drop:function(e){var r=e.current,o=e.updatedSourcePayload;K.flush(),at.cancel(),a({eventName:`onDrop`,payload:{source:o??t,location:{current:r,previous:i,initial:n}}})}}}var st={isActive:!1};function ct(){return!st.isActive}function lt(e){return e.dataTransfer?e.dataTransfer.setDragImage.bind(e.dataTransfer):null}function ut(e){var t=e.current,n=e.next;if(t.length!==n.length)return!0;for(var r=0;r<t.length;r++)if(t[r].element!==n[r].element)return!0;return!1}function dt(e){var t=e.event,n=e.dragType,i=e.getDropTargetsOver,a=e.dispatchEvent;if(!ct())return;var o=pt({event:t,dragType:n,getDropTargetsOver:i});st.isActive=!0;var s={current:o};ft({event:t,current:o.dropTargets});var c=ot({source:n.payload,dispatchEvent:a,initial:o});function l(e){var t=ut({current:s.current.dropTargets,next:e.dropTargets});s.current=e,t&&c.dragUpdate({current:s.current})}function u(e){var t=G(e),r=i({target:Pe(e.target)?Fe({x:t.clientX,y:t.clientY}):e.target,input:t,source:n.payload,current:s.current.dropTargets});r.length&&(e.preventDefault(),ft({event:e,current:r})),l({dropTargets:r,input:t})}function d(){s.current.dropTargets.length&&l({dropTargets:[],input:s.current.input}),c.drop({current:s.current,updatedSourcePayload:null}),f()}function f(){st.isActive=!1,p()}var p=(0,L.bindAll)(window,[{type:`dragover`,listener:function(e){u(e),c.drag({current:s.current})}},{type:`dragenter`,listener:u},{type:`dragleave`,listener:function(e){rt({dragLeave:e})&&(l({input:s.current.input,dropTargets:[]}),n.startedFrom===`external`&&d())}},{type:`drop`,listener:function(e){if(s.current={dropTargets:s.current.dropTargets,input:G(e)},!s.current.dropTargets.length){d();return}e.preventDefault(),ft({event:e,current:s.current.dropTargets}),c.drop({current:s.current,updatedSourcePayload:n.type===`external`?n.getDropPayload(e):null}),f()}},{type:`dragend`,listener:function(e){s.current={dropTargets:s.current.dropTargets,input:G(e)},d()}}].concat(r(it({onDragEnd:d}))),{capture:!0});c.start({nativeSetDragImage:lt(t)})}function ft(e){var t=e.event,n=e.current[0]?.dropEffect;n!=null&&t.dataTransfer&&(t.dataTransfer.dropEffect=n)}function pt(e){var t=e.event,n=e.dragType,r=e.getDropTargetsOver,i=G(t);return n.startedFrom===`external`?{input:i,dropTargets:[]}:{input:i,dropTargets:r({input:i,source:n.payload,target:t.target,current:[]})}}var mt={canStart:ct,start:dt},ht=new Map;function gt(e){var t=e.typeKey,n=e.mount,r=ht.get(t);if(r)return r.usageCount++,r;var i={typeKey:t,unmount:n(),usageCount:1};return ht.set(t,i),i}function _t(e){var t=gt(e);return function(){t.usageCount--,!(t.usageCount>0)&&(t.unmount(),ht.delete(e.typeKey))}}function vt(){var e=[...arguments];return function(){e.forEach(function(e){return e()})}}function yt(e,t){var n=t.attribute,r=t.value;return e.setAttribute(n,r),function(){return e.removeAttribute(n)}}function bt(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 q(t){for(var n=1;n<arguments.length;n++){var r=arguments[n]==null?{}:arguments[n];n%2?bt(Object(r),!0).forEach(function(n){e(t,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):bt(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function xt(e,t){var n=typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(!n){if(Array.isArray(e)||(n=St(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 St(e,t){if(e){if(typeof e==`string`)return Ct(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)?Ct(e,t):void 0}}function Ct(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 wt(e){return e.slice(0).reverse()}function Tt(e){var t=e.typeKey,n=e.defaultDropEffect,i=new WeakMap,a=`data-drop-target-for-${t}`,o=`[${a}]`;function s(e){return i.set(e.element,e),function(){return i.delete(e.element)}}function c(e){return U(vt(yt(e.element,{attribute:a,value:`true`}),s(e)))}function l(e){var t=e.source,a=e.target,s=e.input,c=e.result,u=c===void 0?[]:c;if(a==null)return u;if(!(a instanceof Element))return a instanceof Node?l({source:t,target:a.parentElement,input:s,result:u}):u;var d=a.closest(o);if(d==null)return u;var f=i.get(d);if(f==null)return u;var p={input:s,source:t,element:f.element};if(f.canDrop&&!f.canDrop(p))return l({source:t,target:f.element.parentElement,input:s,result:u});var m=f.getData?.call(f,p)??{},h=f.getDropEffect?.call(f,p)??n,g={data:m,element:f.element,dropEffect:h,isActiveDueToStickiness:!1};return l({source:t,target:f.element.parentElement,input:s,result:[].concat(r(u),[g])})}function u(e){var t=e.eventName,n=e.payload,r=xt(n.location.current.dropTargets),a;try{for(r.s();!(a=r.n()).done;){var o,s=a.value,c=i.get(s.element),l=q(q({},n),{},{self:s});c==null||(o=c[t])==null||o.call(c,l)}}catch(e){r.e(e)}finally{r.f()}}var d={onGenerateDragPreview:u,onDrag:u,onDragStart:u,onDrop:u,onDropTargetChange:function(e){var t=e.payload,n=new Set(t.location.current.dropTargets.map(function(e){return e.element})),r=new Set,a=xt(t.location.previous.dropTargets),o;try{for(a.s();!(o=a.n()).done;){var s,c=o.value;r.add(c.element);var l=i.get(c.element),u=n.has(c.element),d=q(q({},t),{},{self:c});if(l==null||(s=l.onDropTargetChange)==null||s.call(l,d),!u){var f;l==null||(f=l.onDragLeave)==null||f.call(l,d)}}}catch(e){a.e(e)}finally{a.f()}var p=xt(t.location.current.dropTargets),m;try{for(p.s();!(m=p.n()).done;){var h,g,_=m.value;if(!r.has(_.element)){var v=q(q({},t),{},{self:_}),y=i.get(_.element);y==null||(h=y.onDropTargetChange)==null||h.call(y,v),y==null||(g=y.onDragEnter)==null||g.call(y,v)}}}catch(e){p.e(e)}finally{p.f()}}};function f(e){d[e.eventName](e)}function p(e){var t=e.source,n=e.target,r=e.input,a=e.current,o=l({source:t,target:n,input:r});if(o.length>=a.length)return o;for(var s=wt(a),c=wt(o),u=[],d=0;d<s.length;d++){var f,p=s[d],m=c[d];if(m!=null){u.push(m);continue}var h=u[d-1],g=s[d-1];if(h?.element!==g?.element)break;var _=i.get(p.element);if(!_)break;var v={input:r,source:t,element:_.element};if(_.canDrop&&!_.canDrop(v)||!((f=_.getIsSticky)!=null&&f.call(_,v)))break;u.push(q(q({},p),{},{isActiveDueToStickiness:!0}))}return wt(u)}return{dropTargetForConsumers:c,getIsOver:p,dispatchEvent:f}}function Et(e,t){var n=typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(!n){if(Array.isArray(e)||(n=Dt(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.
3
- 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 Dt(e,t){if(e){if(typeof e==`string`)return Ot(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)?Ot(e,t):void 0}}function Ot(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 kt(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 At(t){for(var n=1;n<arguments.length;n++){var r=arguments[n]==null?{}:arguments[n];n%2?kt(Object(r),!0).forEach(function(n){e(t,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):kt(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function jt(){var e=new Set,t=null;function n(e){t&&(!e.canMonitor||e.canMonitor(t.canMonitorArgs))&&t.active.add(e)}function r(r){var i=At({},r);e.add(i),n(i);function a(){e.delete(i),t&&t.active.delete(i)}return U(a)}function i(r){var i=r.eventName,a=r.payload;if(i===`onGenerateDragPreview`){t={canMonitorArgs:{initial:a.location.initial,source:a.source},active:new Set};var o=Et(e),s;try{for(o.s();!(s=o.n()).done;){var c=s.value;n(c)}}catch(e){o.e(e)}finally{o.f()}}if(t){for(var l=Array.from(t.active),u=0,d=l;u<d.length;u++){var f=d[u];if(t.active.has(f)){var p;(p=f[i])==null||p.call(f,a)}}i===`onDrop`&&(t.active.clear(),t=null)}}return{dispatchEvent:i,monitorForConsumers:r}}function Mt(e){var t=e.typeKey,n=e.mount,r=e.dispatchEventToSource,i=e.onPostDispatch,a=e.defaultDropEffect,o=jt(),s=Tt({typeKey:t,defaultDropEffect:a});function c(e){r?.(e),s.dispatchEvent(e),o.dispatchEvent(e),i?.(e)}function l(e){var t=e.event,n=e.dragType;mt.start({event:t,dragType:n,getDropTargetsOver:s.getIsOver,dispatchEvent:c})}function u(){function e(){return n({canStart:mt.canStart,start:l})}return _t({typeKey:t,mount:e})}return{registerUsage:u,dropTarget:s.dropTargetForConsumers,monitor:o.monitorForConsumers}}var Nt=U(function(){return navigator.userAgent.toLocaleLowerCase().includes(`android`)}),Pt=`pdnd:android-fallback`,Ft=`text/plain`,It=`application/vnd.pdnd`,Lt=new WeakMap,Rt=Xe(),zt=Mt({typeKey:`element`,defaultDropEffect:`move`,mount:function(e){return vt(Rt.bindEvents(),(0,L.bind)(document,{type:`dragstart`,listener:function(t){if(e.canStart(t)&&!t.defaultPrevented&&t.dataTransfer){var n=t.target;if(n instanceof HTMLElement){var r=Lt.get(n);if(r){var i=G(t),o={element:r.element,dragHandle:r.dragHandle??null,input:i};if(r.canDrag&&!r.canDrag(o)){t.preventDefault();return}if(r.dragHandle){var s=Fe({x:i.clientX,y:i.clientY});if(!r.dragHandle.contains(s)){t.preventDefault();return}}var c=r.getInitialDataForExternal?.call(r,o)??null;if(c)for(var l=0,u=Object.entries(c);l<u.length;l++){var d=a(u[l],2),f=d[0],p=d[1];t.dataTransfer.setData(f,p??``)}Nt()&&!t.dataTransfer.types.includes(`text/plain`)&&!t.dataTransfer.types.includes(`text/uri-list`)&&t.dataTransfer.setData(Ft,Pt),t.dataTransfer.setData(It,``);var m={type:`element`,payload:{element:r.element,dragHandle:r.dragHandle??null,data:r.getInitialData?.call(r,o)??{}},startedFrom:`internal`};e.start({event:t,dragType:m})}}}}}))},dispatchEventToSource:function(e){var t,n,r=e.eventName,i=e.payload;(t=Lt.get(i.source.element))==null||(n=t[r])==null||n.call(t,i)},onPostDispatch:Rt.getOnPostDispatch()});zt.dropTarget;var Bt=zt.monitor,J=new Map,Y=new Set;function Vt(e){Ht(e);var t=J.get(e);if(t)return t;var n={timeOfEngagementStart:Date.now()};return J.set(e,n),n}function Ht(e){Y.add(e)}function Ut(e){Y.clear(),e(),J.forEach(function(e,t){Y.has(t)||J.delete(t)}),Y.clear()}function Wt(){J.clear()}var Gt=new Map;function Kt(e){var t=Gt.get(e);if(t)return t;var n=qt(e);return Gt.set(e,n),n}function qt(e){var t={type:`idle`},n=[];function r(e){if(t.type===`running`){var i=e-t.timeLastFrameFinished,a=t.latestArgs,o=Fe({x:a.location.current.input.clientX,y:a.location.current.input.clientY});Ut(function(){n.forEach(function(e){return e({underUsersPointer:o,latestArgs:a,timeSinceLastFrame:i})})}),t.timeLastFrameFinished=e,t.frameId=requestAnimationFrame(r)}}function i(){t.type!==`idle`&&(cancelAnimationFrame(t.frameId),Wt(),t={type:`idle`})}function a(e){t.type===`idle`&&(t={type:`initializing`,latestArgs:e,frameId:requestAnimationFrame(function(e){t.type===`initializing`&&(t={type:`running`,timeLastFrameFinished:e,latestArgs:t.latestArgs,frameId:requestAnimationFrame(r)})})})}function o(e){if(t.type===`idle`){a(e);return}t.latestArgs=e}return e({onDragStart:a,onDropTargetChange:o,onDrag:o,onDrop:i}),{onFrame:function(e){n.push(e)}}}var Jt=`data-auto-scrollable`,Yt=`[${Jt}="true"]`;function Xt(e){return e.setAttribute(Jt,`true`),function(){return e.removeAttribute(Jt)}}function Zt(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 Qt(t){for(var n=1;n<arguments.length;n++){var r=arguments[n]==null?{}:arguments[n];n%2?Zt(Object(r),!0).forEach(function(n){e(t,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Zt(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}var $t={startHitboxAtPercentageRemainingOfElement:{top:.25,right:.25,bottom:.25,left:.25},maxScrollAtPercentageRemainingOfHitbox:{top:.5,right:.5,bottom:.5,left:.5},timeDampeningDurationMs:400,maxMainAxisHitboxSize:180},en={standard:900,fast:1500};function tn(e){return Qt(Qt({},$t),{},{maxPixelScrollPerSecond:en[e?.maxScrollSpeed??`standard`]})}var nn={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}},rn=[`top`,`right`,`bottom`,`left`],an={top:`vertical`,right:`horizontal`,bottom:`vertical`,left:`horizontal`},on={start:`top`,end:`bottom`,point:`y`,size:`height`},sn={start:`left`,end:`right`,point:`x`,size:`width`},cn={vertical:{mainAxis:on,crossAxis:sn},horizontal:{mainAxis:sn,crossAxis:on}},ln={top:`start`,right:`end`,bottom:`end`,left:`start`};function X(t){var n=t.edge,r=t.axis;return function(t){var i=t.clientRect,a=t.config,o=cn[r],s=o.mainAxis,c=o.crossAxis,l=ln[n],u=Math.min(a.startHitboxAtPercentageRemainingOfElement[n]*i[s.size],a.maxMainAxisHitboxSize);return DOMRect.fromRect(e(e(e(e({},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 un={top:X({axis:`vertical`,edge:`top`}),right:X({axis:`horizontal`,edge:`right`}),bottom:X({axis:`vertical`,edge:`bottom`}),left:X({axis:`horizontal`,edge:`left`})};function dn(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 fn(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 pn(e){var t=e.client,n=e.axis,r=e.edge,i=e.hitbox,a=e.config,o=cn[n].mainAxis,s=ln[r],c=i[o.size]*a.maxScrollAtPercentageRemainingOfHitbox[r];return s===`end`?dn({startOfRange:i[o.start],endOfRange:i[o.end]-c,value:t[o.point]}):1-dn({startOfRange:i[o.start]+c,endOfRange:i[o.end],value:t[o.point]})}function Z(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=fn({timeSinceLastFrame:n,config:c}),u=(s?pn({client:t,edge:o,hitbox:a,axis:i,config:c}):1)*dn({startOfRange:r.timeOfEngagementStart,endOfRange:r.timeOfEngagementStart+c.timeDampeningDurationMs,value:Date.now()}),d=Math.max(l*u,1);return ln[o]===`end`?d:-1*d}function mn(e,t){return t===`all`||e===t}function hn(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 gn(e){return e.getBoundingClientRect()}function _n(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?gn:s,l={x:n.clientX,y:n.clientY},u=c(t),d=rn.reduce(function(e,n){var r=un[n]({clientRect:u,config:a}),i=an[n];return!mn(i,o)||!hn({client:l,clientRect:r})||!nn[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 Z({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?Z({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 Z({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?Z({client:l,edge:n.edge,hitbox:n.hitbox,axis:e,timeSinceLastFrame:r,engagement:i,isDistanceDampeningEnabled:!0,config:a}):0}()}}function vn(e,t){var n=typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(!n){if(Array.isArray(e)||(n=yn(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.
4
- 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 yn(e,t){if(e){if(typeof e==`string`)return bn(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)?bn(e,t):void 0}}function bn(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 xn(e){return!!(e.top||e.left)}function Sn(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(!xn(s)||!t)return s;var c=t.closest(Yt);if(!c)return s;var l=i(c);if(!l)return s;function u(){return Sn({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=Vt(c),p=tn(l.getConfiguration?.call(l,d)),m=_n({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 Cn(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=vn(a),l;try{for(c.s();!(l=c.n()).done;){var u=l.value;if(!u.canScroll||u.canScroll(s)){var d=_n({element:o,engagement:Vt(o),input:t,config:tn(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 wn(e){var t=e.input,n=e.findEntry,r=e.timeSinceLastFrame,i=e.source,a=e.getWindowScrollEntries,o=e.underUsersPointer,s=Sn({target:o,timeSinceLastFrame:r,input:t,source:i,findEntry:n});xn(s)&&Cn({input:t,source:i,entries:a(),timeSinceLastFrame:r,available:s})}function Tn(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 En(t){for(var n=1;n<arguments.length;n++){var r=arguments[n]==null?{}:arguments[n];n%2?Tn(Object(r),!0).forEach(function(n){e(t,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Tn(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function Dn(e){var t=e.monitor,n=new Map,r=new Set;function i(e){return n.set(e.element,e),U(vt(Xt(e.element),function(){return n.delete(e.element)}))}function a(){var e=En({},arguments.length>0&&arguments[0]!==void 0?arguments[0]:{});r.add(e);function t(){r.delete(e)}return U(t)}function o(e){return n.get(e)??null}function s(){return Array.from(r)}function c(e){var t=e.latestArgs,n=e.underUsersPointer,r=e.timeSinceLastFrame;wn({input:t.location.current.input,source:t.source,findEntry:o,underUsersPointer:n,timeSinceLastFrame:r,getWindowScrollEntries:s})}return Kt(t).onFrame(c),{autoScroll:i,autoScrollWindow:a}}var On=Dn({monitor:Bt}),kn=On.autoScroll,An=On.autoScrollWindow;function jn(e){e.defaultPrevented||(e.dataTransfer&&(e.dataTransfer.dropEffect=`move`),e.preventDefault())}var Mn=null;function Nn(){Q(),Mn=(0,L.bindAll)(window,[{type:`dragover`,listener:jn},{type:`dragenter`,listener:jn},{type:`drop`,listener:function(e){e.preventDefault(),Q()}},{type:`dragend`,listener:Q}].concat(r(i({onDragEnd:Q}))),{capture:!1})}function Q(){var e;(e=Mn)==null||e(),Mn=null}function Pn(){if(window.event?.type===`drop`){var e;(e=window.event)==null||e.preventDefault()}Q()}var Fn={start:Nn,stop:Pn},$=`[data-ui-sortable]`,In=`[data-ui-sortable-item]`,Ln=`[data-ui-sortable-source]`,Rn=`[x-ui-sortable\\:handle], [data-ui-sortable-handle]`,zn=`[x-ui-sortable\\:preview], [data-ui-sortable-preview]`,Bn=`[x-ui-sortable\\:indicator], [data-ui-sortable-indicator]`,Vn=`ui-sortable`,Hn=2,Un=`a, button, input, select, textarea, summary, [contenteditable], [role="button"], [role="link"]`,Wn={sortableScope:p.trim,sortableId:p.trim,orientation:m([`vertical`,`horizontal`,`grid`],`vertical`),columns:f.default(0),accepts:_.array([]),disabled:h,readonly:h,feedback:m([`indicator`,`reorder`],`indicator`),sourceOpacity:f.clamp(0,1).default(.4),ghostOpacity:f.clamp(0,1).default(.92),dragCursor:p.trim.default(`default`),previewPosition:p.trim.default(`preserve`),color:m(C,`neutral`),interaction:m(w,`edge`),label:p.trim,sortableData:_.object({})},Gn={sortableScope:p.trim,sortableId:p.trim,sortableType:p.trim,label:p.trim,disabled:h,sortableData:_.object({}),sourceOpacity:f.clamp(0,1).default(.4),ghostOpacity:f.clamp(0,1).default(.92),dragCursor:p.trim.default(`default`),previewPosition:p.trim.default(`12px 12px`),color:m(C,`neutral`),interaction:m(w,`edge`)},Kn=[v({name:`starting`,state:`interaction.starting`,project:({context:e})=>e.data,onDone:`STARTING_DONE`,onError:`STARTING_DONE`}),v({name:`placing`,state:`layout.syncing`,project:({context:e})=>e.data,onDone:`RECTS_SYNCED`,onError:`RECTS_SYNCED`}),v({name:`ending`,state:`interaction.ending`,project:({context:e})=>e.data,onDone:`ENDING_DONE`,onError:`ENDING_DONE`})],qn=e=>queueMicrotask(e),Jn=(e,t)=>{let n=0,r=new WeakMap,i=new Set,a=new WeakMap,l=null,f=0,p=null,m=0,h=null,_=()=>(m+=1,h??=An(),()=>{--m,m===0&&(h?.(),h=null)}),v=(e,t)=>e.closest(t),x=e=>[...e.querySelectorAll(In)].filter(t=>v(t.parentElement??t,$)===e),C=(e,t=e.dataset.sortableId)=>c(e,t)??``,w=e=>{let t=e.group(),n=x(e.el);return{controller:e,translateBaselines:new Map(n.map(e=>[C(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:C(e),rect:e.getBoundingClientRect()}))}}},E=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)}))}},O=(e,t,n)=>{if(t.target===n)return null;let r=p;if(!r)return null;let i=t.target,a=t.handle!==null;t.target=n;let o=u(e).animate({translate:a?n||`none`:[i||`none`,n||`none`]}).role(`layout`).play();return t.handle=o,o.finished.then(()=>{p===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},k=(e=!1)=>{let t=p;if(t){if(t.projections.forEach((t,n)=>{if(e){let e=t.handle;t.handle=null,e?.stop(),u.stop(n),n.style.translate=t.baseline}else O(n,t,t.baseline);n.removeAttribute(`data-reordering`)}),e){t.projections.clear();let e=()=>{t.layouts.forEach(({controller:e,translateBaselines:t})=>{x(e.el).forEach(e=>{let n=t.get(C(e));n!==void 0&&(u.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=l,r=n?()=>{n(),e()}:e;l=r;let i=f;qn(()=>{f===i&&(e(),requestAnimationFrame(()=>{f===i&&(e(),l===r&&(l=null))}))})}i.forEach(({el:e})=>e.removeAttribute(`data-reordering`))}},ae=(e=null)=>{i.forEach(({el:t})=>{t!==e&&t.removeAttribute(`data-drag-rejected`)})},oe=e=>{let t=p;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&&x(o.controller.el).find(e=>C(e)===r);s&&n.set(s,{x:i,y:a,group:o.controller})}),t.projections.forEach((e,t)=>{n.has(t)||(O(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`;O(a,o,s),a.setAttribute(`data-reordering`,``),r.add(i)}),i.forEach(e=>e.el.toggleAttribute(`data-reordering`,r.has(e)))},A=(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?Hn/2:0),p=r.y-s.top+l-(d?Hn/2:0);Object.assign(i.style,{transform:`translate3d(${f}px, ${p}px, 0)`,width:`${u?Hn:r.width}px`,height:`${d?Hn:r.height}px`,pointerEvents:`none`,zIndex:`2147483646`}),i.dataset.orientation=e.group().orientation,i.dataset.edge=a,i.dataset.index=String(t.index),i.dataset.operation=n??``,i.dataset.indicatorKind=r.kind},de=()=>{p?.group&&(p.group.el.removeAttribute(`data-drag-over`),p.group.el.removeAttribute(`data-drop-edge`),p.group.el.removeAttribute(`data-drop-effect`),p.group.el.removeAttribute(`data-drop-noop`),p.group.el.removeAttribute(`data-placing`),A(p.group,null),p.group=null)},j=(e=!1)=>{p&&(k(e),de(),p.placement=null)},M=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),N=()=>{let e=p,r=e?.placement,i=e?.group,a=e?.controller.el,o=e?.source.groupId===null?null:e?.layouts.get(e.source.groupId)??null,s=r?e?.layouts.get(r.destination.groupId)??null:null;if(!e||!r||!i||!a?.isConnected||!s||e.source.operation!==`move`||i.group().feedback!==`reorder`)return;let c=new Set([...e.layouts.values()].flatMap(({controller:e})=>x(e.el).filter(e=>e.getAttribute(`data-active`)===`true`).map(e=>C(e)))),l=[...e.layouts.values()].flatMap(({controller:e})=>x(e.el)).find(e=>e===document.activeElement||e.contains(document.activeElement))?.dataset.sortableId,u=()=>{e.layouts.forEach(({controller:e})=>{x(e.el).forEach(e=>{c.has(C(e))?e.setAttribute(`data-active`,`true`):e.removeAttribute(`data-active`)})}),l&&[...e.layouts.values()].flatMap(({controller:e})=>x(e.el)).find(e=>C(e)===l)?.focus({preventScroll:!0})},d=o?.layout.items.map(({id:e})=>e)??[],f=s.layout.items.map(({id:e})=>e);qn(()=>{if(n!==e.id||p!==null&&p!==e||!a.isConnected||!i.el.isConnected)return;let s=o?!M(o.controller.itemIds(),d):!1,c=!M(i.itemIds(),f);!s&&!c&&t(()=>{let e=r.anchor?.id;if(e){let t=x(i.el).find(t=>C(t)===e);if(!t?.parentNode)return;t.parentNode.insertBefore(a,r.anchor?.edge===`after`?t.nextSibling:t);return}let t=i.indicator();t?.parentNode?t.parentNode.insertBefore(a,t):i.el.append(a)}),u()})},fe=e=>{e.controller.el.style.opacity=e.previousOpacity},P=e=>{e.settled||(e.settled=!0,e.ghost.remove(),p===e&&(p=null))},he=e=>{p!==e||e.settled||e.endSent||!e.terminalData||(e.endSent=!0,e.controller.machine.send({type:`END`,data:e.terminalData}))},F=(e,t=`outside`,n=p,r={})=>{let i=n;if(!i||p!==i||i.phase!==`dragging`)return;i.phase=`ending`,Fn.stop();let a=r.placement??i.placement,s=i.source.groupId===null?null:i.layouts.get(i.source.groupId)??null,c=a?i.layouts.get(a.destination.groupId)??null:null,l=e===`drop`&&a&&c?pe({source:i.source,placement:a,sourceLayout:s?E(s):null,destinationLayout:E(c)}):null,u=l?{x:l.left,y:l.top,width:l.width,height:l.height}:ve(i.controller.el.getBoundingClientRect());e===`drop`&&N(),j(!0),i.controller.el.removeAttribute(`data-dragging`),i.controller.el.removeAttribute(`data-drag-operation`),i.controller.el.removeAttribute(`data-sortable-phase`),fe(i),i.restoreCursor(),ae();let d=i.ghost.frame();i.terminalData={operationId:i.id,outcome:e,source:i.source,placement:e===`drop`?a:null,...e===`cancel`?{reason:t}:{},fromFrame:d,toFrame:u??d,fromTransform:i.ghost.positioner.style.transform,toTransform:u?`translate3d(${u.x}px, ${u.y}px, 0)`:i.ghost.positioner.style.transform},e===`cancel`&&o({el:i.controller.el,name:`ui:sortable-cancel`,composed:!0,detail:Object.freeze({source:i.source,reason:t})}),r.dispatchTerminalEvent?.(),!(p!==i||i.settled)&&he(i)},I=e=>{p===e&&(e.phase===`dragging`&&F(`cancel`,`outside`,e),!(p!==e||e.settled)&&(he(e),!(p!==e||e.settled)&&(e.controller.machine.send(`ENDING_DONE`),P(e))))},ge=(t,n)=>{if(!p)return;let r=p.placement,i=p.group!==t;i&&de();let a=t.group(),s=p.source.operation===`insert`?`indicator`:a.feedback,c=p.layouts.get(a.id),l=c?E(c):w(t).layout,u=l.items,d=u.map(({id:e})=>e),f=p.source.id,m=s===`reorder`&&a.id===p.source.groupId?u.filter(({id:e})=>e!==f):u,h={groupId:a.id,orientation:a.orientation,direction:l.direction,columns:a.columns,groupRect:l.groupRect,items:m},g=p.ghost.projectedSourceFrame(n),_=s===`reorder`?{clientX:a.orientation===`vertical`?n.clientX:g.x+g.width/2,clientY:a.orientation===`horizontal`?n.clientY:g.y+g.height/2}:n,v=(s===`reorder`?ce:se)({...h,input:_}),y=s===`indicator`?ue({...h,items:u},v):null,b=s===`reorder`?v:le({placement:v,sourceId:p.source.id,sourceGroupId:p.source.groupId,itemIds:d});if(!i&&D(r,b))return;let x=p.source.groupId===null?null:p.layouts.get(p.source.groupId)??null,ee=p.layouts.get(a.id),S=e.isNoop(p.source,{destination:b.destination,anchor:b.anchor}),te=s===`reorder`&&!S?me({source:p.source,placement:b,sourceLayout:x?E(x):null,destinationLayout:ee?E(ee):null}):[];p.group=t,p.placement=b,t.el.setAttribute(`data-drag-over`,``),t.el.dataset.dropEdge=b.anchor?.edge??`empty`,t.el.dataset.dropEffect=p.source.operation===`insert`?`copy`:`move`,t.el.toggleAttribute(`data-drop-noop`,S),o({el:t.el,name:`ui:sortable-placement-change`,composed:!0,detail:Object.freeze({source:p.source,previous:r,placement:b})}),p.controller.machine.send({type:`LAYOUT_PROPOSED`,data:{operationId:p.id,source:p.source,previous:r,placement:b,feedback:s,offsets:te,indicatorFrame:y,noop:S}})},_e=e=>{let t=p;t?.group&&t.id===e.operationId&&D(t.placement,e.placement)&&(t.controller.el.dataset.sortablePhase=`placing`,t.group.el.setAttribute(`data-placing`,``),e.feedback===`reorder`&&!e.noop?oe(e.offsets):k(),e.feedback===`reorder`&&!e.noop?A(t.group,null):A(t.group,e.noop?null:e.placement,t.source.operation,e.indicatorFrame))};return{registerGroup:(t,n)=>{let o=_();t.setAttribute(`data-ui-sortable`,``),d(t,`data-ui-sortable`,`data-drop-target-for-element`,`data-auto-scrollable`);let c=()=>void 0,l=g({el:t,schema:Wn,onChange:()=>c()}),u={el:t,group:()=>Object.freeze({scopeId:l.sortableScope,id:C(t,l.sortableId),orientation:l.orientation,columns:l.orientation===`grid`?l.columns:null,accepts:l.accepts,disabled:l.disabled,readOnly:l.readonly,...l.label?{label:l.label}:{},feedback:l.feedback,sourceOpacity:l.sourceOpacity,ghostOpacity:l.ghostOpacity,dragCursor:l.dragCursor,previewPosition:l.previewPosition,color:l.color,interaction:l.interaction,...Object.keys(l.sortableData).length?{data:Object.freeze({...l.sortableData})}:{}}),itemIds:()=>x(t).map(e=>C(e)).filter(Boolean),indicator:()=>[...t.querySelectorAll(Bn)].find(e=>v(e.parentElement??e,$)===t)??null,refresh:()=>c()};(!l.sortableScope||!u.group().id||l.accepts.length===0)&&s(`Invalid sortable group props`,t),l.orientation===`grid`&&!T(l.columns)&&s(`Grid sortable groups require positive data-columns`,t),r.set(t,u),i.add(u);let f=e.registerGroup({element:t,getGroup:u.group,getItemIds:u.itemIds,canDrop:e=>a.get(t)?.(e)!==!1});c=()=>{p?.group===u&&F(`cancel`,`removed`),f.refresh()};let m=b(t,{invalidateDom:u.refresh}),h=ne({element:t,canDrop:({source:n,input:r})=>{let i=p,a=n.data.marker===Vn&&i!==null,o=a&&e.canDrop(i.source,u.group().id,{clientX:r.clientX,clientY:r.clientY});return t.toggleAttribute(`data-drag-rejected`,a&&!o),o},getDropEffect:()=>`move`,onDrop:()=>{let t=p,n=t?.placement;if(!t||t.group!==u||!n)return;let r=u.group(),i=Ae(e,t.source,{destination:n.destination,anchor:n.anchor},t.input);if(!i){F(`cancel`,r.disabled||r.readOnly?`disabled`:`outside`,t);return}F(`drop`,`outside`,t,{placement:i.placement,dispatchTerminalEvent:i.commit})}}),y=kn({element:t});n.cleanup(()=>{let e=p;e?.phase===`dragging`&&(e.group===u||e.layouts.get(u.group().id)?.controller===u)&&F(`cancel`,`removed`,e),y(),h(),m(),f(),l.disconnect(),r.delete(t),i.delete(u),t.removeAttribute(`data-drag-rejected`),o()})},registerSource:(t,a,c)=>{let u=_(),m=a===`item`?`data-ui-sortable-item`:`data-ui-sortable-source`;t.setAttribute(m,``),d(t,m,`draggable`);let h=()=>a===`item`?v(t.parentElement??t,$):null,g,b=y({schema:Gn,hooks:Kn,createMachine:({props:e})=>Me({props:e,effects:{resolvePlacement:({context:e})=>{let t=p,n=e.pointer;if(!t||t.controller!==g||t.phase!==`dragging`||!n)return;let r=n.destinationId===null?null:t.layouts.get(n.destinationId)?.controller??null;r?ge(r,n.input):j()},synced:()=>{p?.controller===g&&p.phase===`dragging`&&(t.removeAttribute(`data-sortable-phase`),p.group?.el.removeAttribute(`data-placing`))},complete:({context:e})=>{let t=e.data.operationId,n=p;n&&n.id===t&&n.controller===g&&P(n)},reconcile:()=>g.refresh()}}),resolveTransitionElement:({name:e,data:t})=>{let n=t.operationId,r=p?.controller===g&&(n===void 0||p.id===n)?p:null;return e===`starting`?r?.ghost.visual:e===`placing`?r?.group?.el:r?.ghost.positioner}});b.connect(t);let x=()=>b.getCommittedSnapshot().props;g={el:t,owner:h,source:()=>{let e=x(),n=h(),i=n?r.get(n)?.group():null,o={scopeId:a===`item`?i?.scopeId??``:e.sortableScope,id:C(t,e.sortableId),type:e.sortableType,...e.label?{label:e.label}:{},...Object.keys(e.sortableData).length?{data:Object.freeze({...e.sortableData})}:{}};return Object.freeze(a===`item`?{operation:`move`,groupId:i?.id??``,...o}:{operation:`insert`,groupId:null,...o})},disabled:()=>{let e=h(),t=e?r.get(e)?.group():null;return x().disabled||t?.disabled===!0||t?.readOnly===!0},appearance:()=>{let e=x(),t=h(),n=t?r.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,machine:b};let ne=b.onTransition(`placing`,e=>_e(e.data)),T=t.getAttributeNames().some(e=>e===`x-ui-transition:ending`)?()=>void 0:b.onTransition(`ending`,e=>{let t=e.data.toFrame??null,n=e.data.operationId,r=p;if(r&&r.id===n&&r.controller===g)return r.ghost.finish(t)}),E=g.source();(!E.scopeId||!E.id||!E.type)&&s(`Invalid sortable source props`,t);let D=e.registerSource({element:t,getSource:g.source,isDisabled:g.disabled});g.refresh=()=>{p?.controller===g&&F(`cancel`,`removed`),D.refresh()};let O=[...t.querySelectorAll(Rn)].find(e=>v(e,`${In}, ${Ln}`)===t),k=[...t.querySelectorAll(zn)].find(e=>v(e,`${In}, ${Ln}`)===t),oe=ie(t,`move`),A=ee({element:t,...O?{dragHandle:O}:{},canDrag:({input:e})=>{let n=document.elementFromPoint(e.clientX,e.clientY)?.closest(Un)??null;return!g.disabled()&&(!!O||n===null||n===t)},getInitialData:()=>{let e=g.source();return{marker:Vn,scopeId:e.scopeId,sortableId:e.id,sortableType:e.type}},onGenerateDragPreview:S,onDragStart:e=>{p&&I(p),l?.(),l=null,f+=1,Fn.start();let r=g.source(),a=te(e),s=g.appearance(),c=ye({source:t,input:re(e),preview:k??null,previewPosition:k?.dataset.previewPosition||s.previewPosition,opacity:s.ghostOpacity,color:s.color,interaction:s.interaction});c.move(a);let u=t.style.opacity;t.style.opacity=`${s.sourceOpacity}`;let d=je(s.dragCursor);p={id:++n,phase:`dragging`,controller:g,source:r,ghost:c,placement:null,group:null,layouts:new Map([...i].flatMap(e=>{let t=e.group();return t.scopeId===r.scopeId?[[t.id,w(e)]]:[]})),projections:new Map,input:a,timestamp:performance.now(),restoreCursor:d,previousOpacity:u,settled:!1,endSent:!1,terminalData:null},t.setAttribute(`data-dragging`,``),t.dataset.dragOperation=r.operation,o({el:t,name:`ui:sortable-start`,composed:!0,detail:Object.freeze({source:r})}),b.send({type:`START`,data:{operationId:p.id,source:r,sourceFrame:ve(t.getBoundingClientRect()),ghostFrame:c.frame()}})},onDrag:e=>{if(p?.controller!==g)return;let n=te(e),i=p.input,a=performance.now(),s=Math.max(a-p.timestamp,1);p.input=n,p.timestamp=a,p.ghost.move(n);let c=e.location.current.dropTargets.map(({element:e})=>e instanceof HTMLElement?r.get(e):void 0).find(e=>e!==void 0);b.send({type:`POINTER_MOVED`,pointer:{destinationId:c?.group().id??null,input:n}});let l=document.elementFromPoint(n.clientX,n.clientY)?.closest($)??null;ae(l),o({el:t,name:`ui:sortable-drag`,composed:!0,detail:Object.freeze({source:p.source,input:Object.freeze(n),previousInput:Object.freeze(i),delta:Object.freeze({x:n.clientX-i.clientX,y:n.clientY-i.clientY}),velocity:Object.freeze({x:(n.clientX-i.clientX)/s,y:(n.clientY-i.clientY)/s}),ghostFrame:Object.freeze({...p.ghost.frame()})})})},onDrop:()=>{let e=p?.controller===g?p:null;queueMicrotask(()=>{p===e&&e?.phase===`dragging`&&F(`cancel`,g.disabled()?`disabled`:`outside`,e)})}});c.cleanup(()=>{if(p?.controller===g){let e=p;e.phase===`dragging`&&F(`cancel`,`removed`,e),I(e)}A(),oe(),ne(),T(),D(),b.disconnect(),u()})},canDropPolicies:a}},Yn=e=>{e.addInitSelector(()=>`[x-ui-sortable], [x-ui-sortable\\:item], [x-ui-sortable\\:source]`);let t=ke(),n=Jn(t,t=>e.mutateDom(t));return e.directive(`ui-sortable`,e.skipDuringClone((e,{value:t,expression:r},i)=>{e instanceof HTMLElement&&(t?t===`item`||t===`source`?n.registerSource(e,t,i):t===`handle`?(e.setAttribute(`data-ui-sortable-handle`,``),d(e,`data-ui-sortable-handle`)):t===`indicator`?(e.setAttribute(`data-ui-sortable-indicator`,``),d(e,`data-ui-sortable-indicator`,`aria-hidden`,`hidden`),e.setAttribute(`aria-hidden`,`true`),e.hidden=!0):t===`preview`?(e.setAttribute(`data-ui-sortable-preview`,``),d(e,`data-ui-sortable-preview`,`data-preview-position`)):t===`can-drop`&&r?.trim()&&(n.canDropPolicies.set(e,e=>i.evaluate(r,{scope:{$sortable:e}})!==!1),i.cleanup(()=>n.canDropPolicies.delete(e))):n.registerGroup(e,i))})),t},Xn=new WeakSet,Zn=e=>{if(Xn.has(e))return;Xn.add(e);let t=Yn(e);l(e,t)};export{Yn as n,ke as r,Zn as t};
5
- //# sourceMappingURL=capability-sortable-Bh6pkITu.js.map
@@ -1,2 +0,0 @@
1
- var e=e=>e.dataset.disabled===`true`||e.hasAttribute(`disabled`),t=e=>typeof e==`function`?e():e!==!1,n=({root:n,itemSelector:r,ownsItem:i=()=>!0,activeAttribute:a=`data-active`,isDisabled:o=e,loop:s})=>{let c=()=>{let e=n();return e?Array.from(e.querySelectorAll(r)).filter(i):[]},l=()=>c().filter(e=>!o(e)),u=()=>{c().forEach(e=>{e.removeAttribute(a)})},d=({items:e=l()}={})=>{let t=e.find(e=>e.getAttribute(a)===`true`);if(t)return e.indexOf(t);let n=document.activeElement,r=n instanceof HTMLElement?e.find(e=>e===n||e.contains(n)):void 0;return r?e.indexOf(r):-1},f=({el:e})=>{l().includes(e)&&(u(),e.setAttribute(a,`true`))},p=({el:e})=>{f({el:e}),e.focus()},m=(e,n)=>e<0?0:e<n-1?e+1:t(s)?0:n-1,h=(e,n)=>e<0?n-1:e>0?e-1:t(s)?n-1:0,g=e=>{let t=l()[e];t&&p({el:t})},_=()=>{let e=l();e.length!==0&&p({el:e[m(d({items:e}),e.length)]})},v=()=>{let e=l();e.length!==0&&p({el:e[h(d({items:e}),e.length)]})},y=()=>g(0),b=()=>{let e=l();g(e.length-1)};return{allItems:c,items:l,currentActiveIndex:d,activateItem:f,clearActiveItem:u,focusItem:p,focusNext:_,focusPrevious:v,focusFirst:y,focusLast:b,handleKeydown:({event:e})=>e.key===`ArrowDown`?(e.preventDefault(),_(),!0):e.key===`ArrowUp`?(e.preventDefault(),v(),!0):e.key===`Home`?(e.preventDefault(),y(),!0):e.key===`End`&&(e.preventDefault(),b(),!0)}};export{n as t};
2
- //# sourceMappingURL=collection-navigation-BbxUBQFs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"collection-navigation-BbxUBQFs.js","names":[],"sources":["../../../../../../../../client/src/runtime/collection-navigation.ts"],"sourcesContent":["type CollectionRoot = HTMLElement | null;\n\ntype CollectionNavigationOptions = {\n root: () => CollectionRoot;\n itemSelector: string;\n ownsItem?: (el: HTMLElement) => boolean;\n activeAttribute?: string;\n isDisabled?: (el: HTMLElement) => boolean;\n loop?: boolean | (() => boolean);\n};\n\ntype CollectionItemsOptions = {\n items?: HTMLElement[];\n};\n\ntype CollectionElementOptions = {\n el: HTMLElement;\n};\n\ntype CollectionKeydownOptions = {\n event: KeyboardEvent;\n};\n\ntype CollectionNavigation = {\n allItems(): HTMLElement[];\n items(): HTMLElement[];\n currentActiveIndex(options?: CollectionItemsOptions): number;\n activateItem(options: CollectionElementOptions): void;\n clearActiveItem(): void;\n focusItem(options: CollectionElementOptions): void;\n focusNext(): void;\n focusPrevious(): void;\n focusFirst(): void;\n focusLast(): void;\n handleKeydown(options: CollectionKeydownOptions): boolean;\n};\n\nconst defaultIsDisabled = (el: HTMLElement): boolean => (\n el.dataset.disabled === 'true' || el.hasAttribute('disabled')\n);\n\nconst resolveLoop = (loop: CollectionNavigationOptions['loop']): boolean => (\n typeof loop === 'function' ? loop() : loop !== false\n);\n\nconst createCollectionNavigation = ({\n root: getRoot,\n itemSelector,\n ownsItem = () => true,\n activeAttribute = 'data-active',\n isDisabled = defaultIsDisabled,\n loop,\n}: CollectionNavigationOptions): CollectionNavigation => {\n const allItems = (): HTMLElement[] => {\n const root = getRoot();\n if (!root) return [];\n\n return Array.from(root.querySelectorAll<HTMLElement>(itemSelector)).filter(ownsItem);\n };\n\n const items = (): HTMLElement[] => allItems().filter((el) => !isDisabled(el));\n\n const clearActiveItem = (): void => {\n allItems().forEach((item) => {\n item.removeAttribute(activeAttribute);\n });\n };\n\n const currentActiveIndex = ({items: candidateItems = items()}: CollectionItemsOptions = {}): number => {\n const activeItem = candidateItems.find((item) => item.getAttribute(activeAttribute) === 'true');\n if (activeItem) return candidateItems.indexOf(activeItem);\n\n const activeElement = document.activeElement;\n const focusedItem = activeElement instanceof HTMLElement\n ? candidateItems.find((item) => item === activeElement || item.contains(activeElement))\n : undefined;\n\n return focusedItem ? candidateItems.indexOf(focusedItem) : -1;\n };\n\n const activateItem = ({el}: CollectionElementOptions): void => {\n if (!items().includes(el)) return;\n\n clearActiveItem();\n el.setAttribute(activeAttribute, 'true');\n };\n\n const focusItem = ({el}: CollectionElementOptions): void => {\n activateItem({el});\n el.focus();\n };\n\n const nextIndex = (currentIndex: number, itemCount: number): number => {\n if (currentIndex < 0) return 0;\n if (currentIndex < itemCount - 1) return currentIndex + 1;\n return resolveLoop(loop) ? 0 : itemCount - 1;\n };\n\n const previousIndex = (currentIndex: number, itemCount: number): number => {\n if (currentIndex < 0) return itemCount - 1;\n if (currentIndex > 0) return currentIndex - 1;\n return resolveLoop(loop) ? itemCount - 1 : 0;\n };\n\n const focusByIndex = (index: number): void => {\n const candidateItems = items();\n const item = candidateItems[index];\n if (item) focusItem({el: item});\n };\n\n const focusNext = (): void => {\n const candidateItems = items();\n if (candidateItems.length === 0) return;\n\n focusItem({\n el: candidateItems[\n nextIndex(currentActiveIndex({items: candidateItems}), candidateItems.length)\n ] as HTMLElement,\n });\n };\n\n const focusPrevious = (): void => {\n const candidateItems = items();\n if (candidateItems.length === 0) return;\n\n focusItem({\n el: candidateItems[\n previousIndex(currentActiveIndex({items: candidateItems}), candidateItems.length)\n ] as HTMLElement,\n });\n };\n\n const focusFirst = (): void => focusByIndex(0);\n\n const focusLast = (): void => {\n const candidateItems = items();\n focusByIndex(candidateItems.length - 1);\n };\n\n const handleKeydown = ({event}: CollectionKeydownOptions): boolean => {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n focusNext();\n return true;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n focusPrevious();\n return true;\n }\n\n if (event.key === 'Home') {\n event.preventDefault();\n focusFirst();\n return true;\n }\n\n if (event.key === 'End') {\n event.preventDefault();\n focusLast();\n return true;\n }\n\n return false;\n };\n\n return {\n allItems,\n items,\n currentActiveIndex,\n activateItem,\n clearActiveItem,\n focusItem,\n focusNext,\n focusPrevious,\n focusFirst,\n focusLast,\n handleKeydown,\n };\n};\n\nexport {createCollectionNavigation};\nexport type {\n CollectionElementOptions,\n CollectionItemsOptions,\n CollectionKeydownOptions,\n CollectionNavigation,\n CollectionNavigationOptions,\n};\n"],"mappings":"AAqCA,IAAM,EAAqB,GACvB,EAAG,QAAQ,WAAa,QAAU,EAAG,aAAa,UAAU,EAG1D,EAAe,GACjB,OAAO,GAAS,WAAa,EAAK,EAAI,IAAS,GAG7C,GAA8B,CAChC,KAAM,EACN,eACA,eAAiB,GACjB,kBAAkB,cAClB,aAAa,EACb,UACqD,CACrD,IAAM,MAAgC,CAClC,IAAM,EAAO,EAAQ,EAGrB,OAFK,EAEE,MAAM,KAAK,EAAK,iBAA8B,CAAY,CAAC,CAAC,CAAC,OAAO,CAAQ,EAFjE,CAAC,CAGvB,EAEM,MAA6B,EAAS,CAAC,CAAC,OAAQ,GAAO,CAAC,EAAW,CAAE,CAAC,EAEtE,MAA8B,CAChC,EAAS,CAAC,CAAC,QAAS,GAAS,CACzB,EAAK,gBAAgB,CAAe,CACxC,CAAC,CACL,EAEM,GAAsB,CAAC,MAAO,EAAiB,EAAM,GAA6B,CAAC,IAAc,CACnG,IAAM,EAAa,EAAe,KAAM,GAAS,EAAK,aAAa,CAAe,IAAM,MAAM,EAC9F,GAAI,EAAY,OAAO,EAAe,QAAQ,CAAU,EAExD,IAAM,EAAgB,SAAS,cACzB,EAAc,aAAyB,YACvC,EAAe,KAAM,GAAS,IAAS,GAAiB,EAAK,SAAS,CAAa,CAAC,EACpF,IAAA,GAEN,OAAO,EAAc,EAAe,QAAQ,CAAW,EAAI,EAC/D,EAEM,GAAgB,CAAC,QAAwC,CACtD,EAAM,CAAC,CAAC,SAAS,CAAE,IAExB,EAAgB,EAChB,EAAG,aAAa,EAAiB,MAAM,EAC3C,EAEM,GAAa,CAAC,QAAwC,CACxD,EAAa,CAAC,IAAE,CAAC,EACjB,EAAG,MAAM,CACb,EAEM,GAAa,EAAsB,IACjC,EAAe,EAAU,EACzB,EAAe,EAAY,EAAU,EAAe,EACjD,EAAY,CAAI,EAAI,EAAI,EAAY,EAGzC,GAAiB,EAAsB,IACrC,EAAe,EAAU,EAAY,EACrC,EAAe,EAAU,EAAe,EACrC,EAAY,CAAI,EAAI,EAAY,EAAI,EAGzC,EAAgB,GAAwB,CAE1C,IAAM,EADiB,EACV,CAAA,CAAe,GACxB,GAAM,EAAU,CAAC,GAAI,CAAI,CAAC,CAClC,EAEM,MAAwB,CAC1B,IAAM,EAAiB,EAAM,EACzB,EAAe,SAAW,GAE9B,EAAU,CACN,GAAI,EACA,EAAU,EAAmB,CAAC,MAAO,CAAc,CAAC,EAAG,EAAe,MAAM,EAEpF,CAAC,CACL,EAEM,MAA4B,CAC9B,IAAM,EAAiB,EAAM,EACzB,EAAe,SAAW,GAE9B,EAAU,CACN,GAAI,EACA,EAAc,EAAmB,CAAC,MAAO,CAAc,CAAC,EAAG,EAAe,MAAM,EAExF,CAAC,CACL,EAEM,MAAyB,EAAa,CAAC,EAEvC,MAAwB,CAC1B,IAAM,EAAiB,EAAM,EAC7B,EAAa,EAAe,OAAS,CAAC,CAC1C,EA8BA,MAAO,CACH,WACA,QACA,qBACA,eACA,kBACA,YACA,YACA,gBACA,aACA,YACA,eAvCmB,CAAC,WAChB,EAAM,MAAQ,aACd,EAAM,eAAe,EACrB,EAAU,EACH,IAGP,EAAM,MAAQ,WACd,EAAM,eAAe,EACrB,EAAc,EACP,IAGP,EAAM,MAAQ,QACd,EAAM,eAAe,EACrB,EAAW,EACJ,IAGP,EAAM,MAAQ,QACd,EAAM,eAAe,EACrB,EAAU,EACH,GAkBf,CACJ"}
@@ -1,2 +0,0 @@
1
- import{r as e}from"./bridge-DMrvM3JE.js";import{c as t,f as n,l as r,n as i,o as a}from"./codecs-CQ7olTJL.js";import{n as o}from"./dom-invalidation-Dw6clnS4.js";import{t as s}from"./fragment-9OT0mn7F.js";var c=e=>Math.max(0,Math.floor(e)),l=t=>t===null?[]:e(JSON.parse(t)),u=async(e,t)=>{let n=e.status===204?``:await e.text(),r=document.createElement(`template`);r.innerHTML=n;let i=null,a=e.headers.get(t.totalHeader),o=a===null||a.trim()===``?NaN:Number(a);Number.isFinite(o)&&o>=0&&(i=c(o));let s=r.content.querySelector(t.metaSelector);if(s){if(i===null)try{let e=JSON.parse(s.innerHTML),t=Number(e.totalItems);Number.isFinite(t)&&t>=0&&(i=c(t))}catch{}s.remove()}let u=document.createElement(`div`);return u.append(r.content),{html:u.innerHTML,assets:l(e.headers.get(t.assetsHeader)),totalItems:i}},d=(e,t=0)=>Number.isFinite(e)?e:t,f=e=>Math.max(0,Math.floor(d(e))),p=(e,t=1)=>Math.max(2**-52,d(e,t)),m=(e,t,n)=>Math.min(n,Math.max(t,e)),h=(e,t)=>{let n=f(t.total),r=p(t.itemSize),i=Math.max(0,d(t.viewportSize)),a=f(t.buffer),o=Math.min(n,Math.max(1,Math.ceil(i/r))),s=Math.max(0,n-o),c=m(Math.max(0,d(t.scrollOffset)),0,Math.max(0,n*r-i)),l=m(Math.floor(c/r),0,s),u=Math.min(n,o+a*2),h=m(l-a,0,Math.max(0,n-u));return{axis:e,start:h,count:u,total:n,itemSize:r,viewportSize:i,scrollOffset:c,buffer:a,visibleStart:l,visibleCount:o,guardStart:Math.min(n,h+a),guardEnd:Math.max(0,h+u-a),translateOffset:h*r,spacerSize:n*r}},g={compute(e){let t={};return e.axes.x&&(t.x=h(`x`,e.axes.x)),e.axes.y&&(t.y=h(`y`,e.axes.y)),{kind:`fixed-axis`,key:[`x`,`y`].map(e=>{let n=t[e];return n?`${e}:${n.start}:${n.count}:${n.total}`:``}).filter(Boolean).join(`|`),axes:t}},covers(e,t){return[`x`,`y`].every(n=>{let r=t.axes[n];if(!r)return!0;let i=e.axes[n];if(!i||i.total!==r.total||i.itemSize!==r.itemSize)return!1;let a=r.visibleStart+r.visibleCount;return r.visibleStart>=i.guardStart&&a<=i.guardEnd})},serialize(e){let t={};return[`x`,`y`].forEach(n=>{let r=e.axes[n];r&&(t[n]={start:r.start,count:r.count,total:r.total})}),{window:JSON.stringify(t)}},spacerSize(e,t){return e.axes[t]?.spacerSize??0},translateOffset(e,t){return e.axes[t]?.translateOffset??0},setAxisTotal(e,t,n){let r=e.axes[t];return r?{...e,axes:{...e.axes,[t]:{...r,total:f(n)}}}:e},scrollTo(e,t){let n=f(e.total),r=p(e.itemSize),i=Math.max(0,d(e.viewportSize)),a=m(f(t.index),0,Math.max(0,n-1))*r,o=a+r,s=Math.max(0,n*r-i),c=a;if(t.align===`center`)c=a-(i-r)/2;else if(t.align===`end`)c=o-i;else if(t.align===`auto`){let t=Math.max(0,d(e.scrollOffset));if(a>=t&&o<=t+i)return m(t,0,s);c=a<t?a:o-i}return m(c,0,s)}},_=(e,t={})=>{let n=0,r=0,i=new Map,a=new Map,o=new Map,s=()=>({generation:n,mounted:new Map(i),pending:new Map(a),latestDesired:new Map(o)}),c=()=>t.onChange?.(s()),l=e=>{let t=a.get(e.block);return e.generation===n&&t?.requestGeneration===e.requestGeneration};return{computeWindow:t=>e.compute(t),shouldLoad:(t,n)=>!n||!e.covers(n,t),begin(e,t){if(o.set(e,t),a.has(e)||!this.shouldLoad(t,i.get(e)))return c(),null;let s={block:e,window:t,generation:n,requestGeneration:++r};return a.set(e,s),c(),s},commit(e,t=e.window){return l(e)?(a.delete(e.block),i.set(e.block,t),c(),!0):!1},fail(e){return l(e)?(a.delete(e.block),c(),!0):!1},next(t){if(a.has(t))return null;let n=o.get(t);if(!n)return null;let r=i.get(t);return r&&e.covers(r,n)?null:n},mounted:e=>i.get(e)??null,pending:e=>a.get(e)??null,invalidate(){n+=1,i.clear(),a.clear(),o.clear(),c()},snapshot:s}},ee={fetchUrl:n,cursor:i,totalItems:t.min(0).default(0),itemSize:t.min(2**-52).default(36),bufferSize:t.min(1).default(50),overscan:t.min(0).default(0),axis:r([`vertical`],`vertical`),initialIndex:t.min(0).default(0),startParam:n.default(`start`),countParam:n.default(`count`),totalParam:n.default(`total`),windowParam:n.default(`window`),totalHeader:n.default(`X-Trellis-Total-Items`),assetsHeader:n.default(`X-Trellis-Assets`),metaSelector:n.default(`template[data-ui-virtualizer-meta]`),scrollArea:i.default(!0),fill:i.default(!0),class:n,scrollAreaClass:n,viewportClass:n,spacerClass:n,blockClass:n},v=(e,t=0)=>Math.max(t,Math.floor(Number.isFinite(e)?e:t)),y=(e,t={})=>{let n=null,r=null,i=null,c=[],l=0,d=``,f=null,p=0,m=0,h=!1,y=null,b=null,x=!1,S=new Map,C=_(g),w=t.cursor,T=w?.query,E=0,te=0,D=!1,O=!1,k=null,A=0,j=null,M=null,N=null,P=new Map,F=new Map,I=(e,t)=>{n?.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:t}))},L=()=>{if(!n||!i)return;let e=F.size===0?0:Math.max(...[...F.values()].map(({startIndex:e,count:t})=>e+t)),t=[...F.values()].some(({page:t,startIndex:n,count:r})=>n+r===e&&t.next.available),r=w&&l===0?e+(t?v($.props.bufferSize,1):0):l;n.toggleAttribute(`data-loading`,m>0),n.toggleAttribute(`data-empty`,w?F.size===0&&m===0:l===0),i.style.height=`${Math.max(r*$.props.itemSize,$.props.itemSize)}px`},R=e=>{let t=v(e);return t!==l&&(l=t,L(),I(`ui:virtualizer-total-change`,{totalItems:l}),I(`ui:virtualizer-axis-total-change`,{axis:`y`,total:l,window:null}),!0)},ne=e=>g.compute({axes:{y:{total:l,itemSize:$.props.itemSize,viewportSize:$.props.bufferSize*$.props.itemSize,scrollOffset:e*$.props.itemSize,buffer:0}}}),re=e=>{if(l===0||!w&&!$.props.fetchUrl.trim())return[];let t=v($.props.bufferSize,1),n=Math.min(l-1,Math.floor(Math.max(0,e)/$.props.itemSize)),r=Math.floor(n/t)*t,i=Math.floor((l-1)/t)*t,a=[r-t,r,r+t].map(e=>Math.min(i,Math.max(0,e)));return r===0&&i>t?a.splice(0,3,0,t,Math.min(i,t*2)):r===i&&i>t&&a.splice(0,3,Math.max(0,i-t*2),i-t,i),[...new Set(a)].map(ne)},ie=e=>{let t=e.axes.y;if(!t)throw Error(`Vertical virtualizer requires a y window.`);let n=new URL($.props.fetchUrl,document.baseURI);return n.searchParams.set($.props.startParam,String(t.start)),n.searchParams.set($.props.countParam,String(t.count)),n.searchParams.set($.props.totalParam,String(t.total)),/^[a-z][a-z\d+.-]*:/i.test($.props.fetchUrl)||$.props.fetchUrl.startsWith(`//`)?n.href:`${n.pathname}${n.search}${n.hash}`},z=async(t,n,i)=>{let a=t.element.contains(document.activeElement),o=await s(e,t.element,n.html,{assets:n.assets,shouldReplace:i});return o&&a&&r?.focus({preventScroll:!0}),o},B=(e,t,n)=>{e.element.style.height=`${n*$.props.itemSize}px`,e.element.style.transform=`translateY(${t*$.props.itemSize}px)`},ae=()=>{if(m=Math.max(0,m-1),L(),m>0||f===null||h)return;let e=f;f=null,Z(e)},oe=async(e,t,i)=>{let a=t.axes.y;if(!a)return;let o=new AbortController;S.set(e.key,o),m+=1,L(),n?.removeAttribute(`data-error`),I(`ui:virtualizer-load-start`,{block:e.key,window:t});try{let s=globalThis.crypto?.randomUUID?.()??`${Date.now()}-${i.requestGeneration}`,c=await fetch(ie(t),{method:`GET`,headers:{Accept:`text/html`,"X-Trellis-Virtualizer":`true`,"X-Trellis-Request-ID":s},signal:o.signal});if(!c.ok&&c.status!==204){C.fail(i),n?.setAttribute(`data-error`,``),I(`ui:virtualizer-error`,{block:e.key,window:t,status:c.status});return}let l=await u(c,$.props);if(C.pending(e.key)!==i||h||!await z(e,l,()=>C.pending(e.key)===i&&!h))return;let d=l.totalItems!==null&&R(l.totalItems);if(!C.commit(i,t))return;B(e,a.start,a.count),I(`ui:virtualizer-load`,{block:e.key,window:t}),d&&(f=r?.scrollTop??0)}catch(r){if(o.signal.aborted)return;C.fail(i),n?.setAttribute(`data-error`,``),I(`ui:virtualizer-error`,{block:e.key,window:t,status:0,error:r})}finally{S.get(e.key)===o&&S.delete(e.key),ae()}},V=()=>v($.props.bufferSize,1),H=()=>[...F.values()].sort((e,t)=>e.startIndex-t.startIndex),U=(e,t)=>!h&&t.generation===E&&P.get(e.key)?.id===t.id,W=async(e,t,r,i,a=`page`)=>{if(!w||P.has(e.key))return null;let o=i??new AbortController,s={generation:E,id:++te,aborter:o};P.set(e.key,s),m+=1,L(),n?.removeAttribute(`data-error`),I(`ui:virtualizer-load-start`,{block:e.key,mode:`cursor`});try{let n=await t(o.signal);if(!U(e,s))return null;if(a===`seek`&&n.startIndex===void 0)throw Error(`Cursor seek response requires startIndex.`);let i=await w.responseAdapter(n.content,n);if(!U(e,s))return null;let c=n.startIndex===void 0?v(r):v(n.startIndex),u=i.totalItems??l,d=i.itemCount===void 0?V():v(i.itemCount),f=u>0?Math.min(V(),Math.max(0,u-c)):d;if(!await z(e,i,()=>U(e,s))||!U(e,s))return null;i.totalItems===null?n.next.available||R(c+f):R(i.totalItems);let p={block:e,page:n,startIndex:c,count:f};return F.set(e.key,p),B(e,c,f),I(`ui:virtualizer-load`,{block:e.key,mode:`cursor`,page:{previous:n.previous,next:n.next,...n.startIndex===void 0?{}:{startIndex:n.startIndex}},startIndex:c}),p}catch(t){return o.signal.aborted||!U(e,s)?null:(O=!0,n?.setAttribute(`data-error`,``),I(`ui:virtualizer-error`,{block:e.key,mode:`cursor`,status:0,error:t}),null)}finally{P.get(e.key)===s&&P.delete(e.key),m=Math.max(0,m-1),L()}},G=()=>{D=!1;let e=k??r?.scrollTop??0;k=null,X(e)},se=async()=>{if(!w||D||O||F.size>0)return;D=!0;let e=E;try{let t=await W(c[0],e=>w.dataSource.first({limit:V(),query:T,signal:e}),0);if(!t||e!==E)return;let n=t;for(let t of c.slice(1)){if(!n.page.next.available)break;let r=n.page.next.cursor,i=await W(t,e=>w.dataSource.next({cursor:r,limit:V(),query:T,signal:e}),n.startIndex+n.count);if(!i||e!==E)break;n=i}}finally{e===E&&G()}},K=async()=>{if(!w||D)return;let e=H(),t=e.at(-1);if(!t?.page.next.available)return;let n=e[0]?.block;if(!n)return;D=!0;let r=E,i=t.page.next.cursor;try{await W(n,e=>w.dataSource.next({cursor:i,limit:V(),query:T,signal:e}),t.startIndex+t.count)}finally{r===E&&G()}},q=async()=>{if(!w||D)return;let e=H(),t=e[0];if(!t?.page.previous.available)return;let n=e.at(-1)?.block;if(!n)return;D=!0;let r=E,i=t.page.previous.cursor;try{await W(n,e=>w.dataSource.previous({cursor:i,limit:V(),query:T,signal:e}),Math.max(0,t.startIndex-V()))}finally{r===E&&G()}},J=()=>{A&&window.clearTimeout(A),A=0,j=null},ce=async t=>{let n=w?.dataSource.seek;if(!w||!n)return;N?.abort(),P.forEach(({aborter:e})=>e.abort()),P.clear(),D=!0;let r=E,i=new AbortController;N=i,M=t;let a=c[1];F.clear(),c.forEach(t=>{t!==a&&s(e,t.element,``)});try{let e=await W(a,e=>n({index:t,limit:V(),query:T,signal:e}),t,i,`seek`);if(!e||r!==E||N!==i)return;let o=[];if(e.page.previous.available){let t=e.page.previous.cursor;o.push(W(c[0],e=>w.dataSource.previous({cursor:t,limit:V(),query:T,signal:e}),Math.max(0,e.startIndex-V())))}if(e.page.next.available){let t=e.page.next.cursor;o.push(W(c[2],e=>w.dataSource.next({cursor:t,limit:V(),query:T,signal:e}),e.startIndex+e.count))}await Promise.all(o)}finally{N===i&&(N=null,M=null,r===E&&G())}},Y=e=>{if(!w?.dataSource.seek)return;let t=l>0?Math.min(Math.max(0,l-1),v(e)):v(e);H().some(e=>t>=e.startIndex&&t<e.startIndex+e.count)||j!==t&&M!==t&&(J(),j=t,A=window.setTimeout(()=>{A=0,j=null,ce(t)},v(w.seekDebounce??100)))},X=e=>{if(!w)return;let t=l>0?Math.min(l-1,Math.floor(Math.max(0,e)/$.props.itemSize)):Math.floor(Math.max(0,e)/$.props.itemSize);if(N&&w.dataSource.seek&&M!==t){k=e,Y(t);return}if(D||m>0){k=e;return}let n=H();if(n.length===0){se();return}let r=n.find(e=>t>=e.startIndex&&t<e.startIndex+e.count);if(r){J(),r===n[0]&&r.page.previous.available?q():r===n.at(-1)&&r.page.next.available&&K();return}if(w.dataSource.seek){Y(t);return}t<n[0].startIndex?q():K()},Z=t=>{if(w){X(t);return}if(m>0){f=t;return}let n=re(t),r=n.map(e=>e.key).join(`,`),i=Math.min(Math.max(0,l-1),Math.floor(Math.max(0,t)/$.props.itemSize)),a=n.find(e=>{let t=e.axes.y;return t&&i>=t.start&&i<t.start+t.count})??n[0];if(a&&d!==a.key){d=a.key;let e=a.axes.y;I(`ui:virtualizer-window`,{window:a}),I(`ui:virtualizer-range`,{start:e.start,count:e.count,end:e.start+e.count,window:a})}if(!r){c.forEach(t=>void s(e,t.element,``));return}let o=new Set;n.forEach(e=>{let t=c.find(t=>C.mounted(t.key)?.key===e.key);t&&o.add(t)});let u=c.filter(e=>!o.has(e));n.forEach(e=>{if(c.some(t=>C.mounted(t.key)?.key===e.key))return;let t=u.shift();if(!t)return;let n=C.begin(t.key,e);n&&oe(t,e,n)})},Q=()=>{S.forEach(e=>e.abort()),S.clear(),m=0,f=null,d=``,C.invalidate(),E+=1,J(),N?.abort(),N=null,M=null,P.forEach(({aborter:e})=>e.abort()),P.clear(),F.clear(),D=!1,O=!1,k=null,c.forEach(t=>{t.element.style.height=``,t.element.style.transform=``,s(e,t.element,``)}),L()},$={supportsSeek:!!w?.dataSource.seek,props:null,init(){if(n=this.$el,h=!1,this.props=a({el:n,schema:ee,onChange:(e,t)=>{x||(t.some(({key:e})=>e===`totalItems`)?(R(this.props.totalItems),w||this.reload()):t.some(({key:e})=>[`fetchUrl`,`itemSize`,`bufferSize`].includes(e))&&this.reload())}}),l=w?v(this.props.totalItems):this.props.fetchUrl.trim()?Math.max(1,v(this.props.totalItems)):0,r=n.querySelector(`[data-ui-scroll-area-viewport]`)??n,i=n.querySelector(`[data-ui-virtualizer-spacer]`),c=Array.from(n.querySelectorAll(`[data-ui-virtualizer-block]`)).slice(0,3).map((e,t)=>({element:e,key:`block-${t+1}`})),!i||c.length!==3)throw Error(`Virtualizer requires one spacer and three block containers.`);r.style.overscrollBehavior=`contain`,r.style.overflowAnchor=`none`,y=new AbortController,r.addEventListener(`scroll`,()=>{p||=requestAnimationFrame(()=>{p=0,r&&Z(r.scrollTop)})},{passive:!0,signal:y.signal}),b=o(n,{invalidateDom:()=>$.reload()}),r.scrollTop=g.scrollTo({total:l,itemSize:this.props.itemSize,viewportSize:r.clientHeight,scrollOffset:0,buffer:this.props.bufferSize},{axis:`y`,index:this.props.initialIndex}),L(),Z(r.scrollTop)},destroy(){h=!0,p&&cancelAnimationFrame(p),y?.abort(),y=null,b?.(),b=null,Q(),this.props.disconnect(),n=null,r=null,i=null,c=[]},scrollToIndex(e,t=`start`){r&&(r.scrollTop=g.scrollTo({total:l,itemSize:this.props.itemSize,viewportSize:r.clientHeight,scrollOffset:r.scrollTop,buffer:this.props.bufferSize},{axis:`y`,index:e,align:t}),Z(r.scrollTop))},setTotalItems(e){if(R(e),w){r&&X(r.scrollTop);return}let t=r?.scrollTop;this.reload(t===void 0?{}:{scrollTop:t})},setUrl(e,t={}){let n=String(e).trim();x=!0,this.props.fetchUrl=n,x=!1,R(n?Math.max(1,v(this.props.totalItems)):0),t.reset??!0?this.reset():this.reload()},setQuery(e){w&&(T=e,this.reset())},reset(e={}){this.reload({scrollTop:e.scrollTop??0})},reload(e={}){let t=e.scrollTop??r?.scrollTop??0;Q(),r&&(r.scrollTop=Math.max(0,t)),Z(t)}};return $},b=t=>{if(typeof t!=`object`||!t||Array.isArray(t))throw TypeError(`Cursor response must be an object.`);let n=t,r=new Set([`content`,`assets`,`previous`,`next`,`startIndex`,`total`,`count`]);for(let e of Object.keys(n))if(!r.has(e))throw TypeError(`Cursor response contains unexpected field ${e}.`);let i=e=>{let t=n[e];if(typeof t!=`object`||!t||Array.isArray(t))throw TypeError(`Cursor response ${e} must be a continuation object.`);let r=t,i=r.available;if(i!==!1&&i!==!0)throw TypeError(`Cursor response ${e}.available must be a boolean.`);if(!i&&Object.hasOwn(r,`cursor`))throw TypeError(`Unavailable cursor response ${e} cannot contain a cursor.`);let a=new Set(i?[`available`,`cursor`]:[`available`]);for(let t of Object.keys(r))if(!a.has(t))throw TypeError(`Cursor response ${e} contains unexpected field ${t}.`);if(!i)return{available:!1};if(typeof r.cursor!=`string`||r.cursor.length===0)throw TypeError(`Available cursor response ${e} requires a non-empty cursor.`);return{available:!0,cursor:r.cursor}},a=e=>{let t=n[e];if(t!==void 0){if(!Number.isInteger(t)||Number(t)<0)throw TypeError(`Cursor response ${e} must be a non-negative integer.`);return Number(t)}};if(typeof n.content!=`string`)throw TypeError(`Cursor response content must be a string.`);let o=a(`startIndex`),s=a(`total`),c=a(`count`);return{content:n.content,assets:Object.hasOwn(n,`assets`)?e(n.assets):[],previous:i(`previous`),next:i(`next`),...o===void 0?{}:{startIndex:o},...s===void 0?{}:{total:s},...c===void 0?{}:{count:c}}},x=e=>{let t=async({cursor:t,direction:n,limit:r,signal:i,index:a})=>{let o=e().dataset.fetchUrl??``,s=new URL(o,document.baseURI);s.searchParams.set(`cursor`,t??``),s.searchParams.set(`direction`,n),s.searchParams.set(`limit`,String(r)),a!==void 0&&s.searchParams.set(`index`,String(a));let c=/^[a-z][a-z\d+.-]*:/i.test(o)||o.startsWith(`//`)?s.href:`${s.pathname}${s.search}${s.hash}`,l=await fetch(c,{signal:i});if(!l.ok)throw Error(`Cursor request failed (${l.status}).`);let u=b(await l.json());return{...u,content:u}};return{query:null,dataSource:{first:({limit:e,signal:n})=>t({cursor:null,direction:`forward`,limit:e,signal:n}),next:({cursor:e,limit:n,signal:r})=>t({cursor:e,direction:`forward`,limit:n,signal:r}),previous:({cursor:e,limit:n,signal:r})=>t({cursor:e,direction:`backward`,limit:n,signal:r}),seek:({index:e,limit:n,signal:r})=>t({cursor:null,direction:`forward`,index:e,limit:n,signal:r}).then(e=>{if(e.startIndex===void 0)throw Error(`Cursor seek response is missing startIndex.`);return{...e,startIndex:e.startIndex}})},responseAdapter:e=>({html:e.content,assets:e.assets,totalItems:e.total??null,...e.count===void 0?{}:{itemCount:e.count}})}};export{u as a,g as i,y as n,_ as r,x as t};
2
- //# sourceMappingURL=cursor-data-source-FA9FLGtB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cursor-data-source-FA9FLGtB.js","names":[],"sources":["../../../../../../../../client/src/runtime/virtualizer-fragment.ts","../../../../../../../../client/src/runtime/virtual-window.ts","../../../../../../../../client/src/runtime/virtualizer-schema.ts","../../../../../../../../client/src/runtime/virtualizer.ts","../../../../../../../../client/src/runtime/cursor-data-source.ts"],"sourcesContent":["import {parseAssetDescriptors, type AssetDescriptor} from '../assets/bridge';\n\ntype VirtualizerFragmentOptions = {\n totalHeader: string;\n assetsHeader: string;\n metaSelector: string;\n};\n\ntype VirtualizerFragmentPayload = {\n html: string;\n assets: AssetDescriptor[];\n totalItems: number | null;\n};\n\nconst integer = (value: number): number => Math.max(0, Math.floor(value));\n\nconst parseAssets = (raw: string | null): AssetDescriptor[] => {\n if (raw === null) return [];\n return parseAssetDescriptors(JSON.parse(raw) as unknown);\n};\n\nconst parseVirtualizerFragmentResponse = async (\n response: Response,\n options: VirtualizerFragmentOptions,\n): Promise<VirtualizerFragmentPayload> => {\n const html = response.status === 204 ? '' : await response.text();\n const template = document.createElement('template');\n template.innerHTML = html;\n let totalItems: number | null = null;\n const rawHeaderTotal = response.headers.get(options.totalHeader);\n const headerTotal = rawHeaderTotal === null || rawHeaderTotal.trim() === ''\n ? Number.NaN\n : Number(rawHeaderTotal);\n if (Number.isFinite(headerTotal) && headerTotal >= 0) totalItems = integer(headerTotal);\n\n const meta = template.content.querySelector<HTMLTemplateElement>(options.metaSelector);\n if (meta) {\n if (totalItems === null) {\n try {\n const parsed = JSON.parse(meta.innerHTML) as {totalItems?: unknown};\n const inlineTotal = Number(parsed.totalItems);\n if (Number.isFinite(inlineTotal) && inlineTotal >= 0) totalItems = integer(inlineTotal);\n } catch {\n // Invalid optional metadata does not invalidate otherwise usable fragment HTML.\n }\n }\n meta.remove();\n }\n\n const container = document.createElement('div');\n container.append(template.content);\n return {\n html: container.innerHTML,\n assets: parseAssets(response.headers.get(options.assetsHeader)),\n totalItems,\n };\n};\n\nexport {parseVirtualizerFragmentResponse};\nexport type {VirtualizerFragmentOptions, VirtualizerFragmentPayload};\n","type VirtualWindowKind = string;\n\ntype VirtualWindowBase = {\n kind: VirtualWindowKind;\n key: string;\n};\n\ntype VirtualWindowAdapter<Input, Window extends VirtualWindowBase> = {\n compute(input: Input): Window;\n covers(mounted: Window, desired: Window): boolean;\n serialize(window: Window): Record<string, string>;\n};\n\ntype VirtualAxis = 'x' | 'y';\ntype VirtualScrollAlign = 'start' | 'center' | 'end' | 'auto';\n\ntype FixedAxisInputDetail = {\n total: number;\n itemSize: number;\n viewportSize: number;\n scrollOffset: number;\n buffer: number;\n overscan?: number;\n};\n\ntype FixedAxisWindowInput = {\n axes: Partial<Record<VirtualAxis, FixedAxisInputDetail>>;\n};\n\ntype VirtualAxisWindow = {\n axis: VirtualAxis;\n start: number;\n count: number;\n total: number;\n itemSize: number;\n viewportSize: number;\n scrollOffset: number;\n buffer: number;\n visibleStart: number;\n visibleCount: number;\n guardStart: number;\n guardEnd: number;\n translateOffset: number;\n spacerSize: number;\n};\n\ntype FixedAxisWindow = VirtualWindowBase & {\n kind: 'fixed-axis';\n axes: Partial<Record<VirtualAxis, VirtualAxisWindow>>;\n};\n\ntype FixedAxisScrollTarget = {\n axis: VirtualAxis;\n index: number;\n align?: VirtualScrollAlign;\n};\n\ntype FixedAxisWindowAdapter = VirtualWindowAdapter<FixedAxisWindowInput, FixedAxisWindow> & {\n spacerSize(window: FixedAxisWindow, axis: VirtualAxis): number;\n translateOffset(window: FixedAxisWindow, axis: VirtualAxis): number;\n setAxisTotal(input: FixedAxisWindowInput, axis: VirtualAxis, total: number): FixedAxisWindowInput;\n scrollTo(input: FixedAxisInputDetail, target: FixedAxisScrollTarget): number;\n};\n\ntype VirtualWindowRequest<Window extends VirtualWindowBase> = {\n block: string;\n window: Window;\n generation: number;\n requestGeneration: number;\n};\n\ntype VirtualWindowSnapshot<Window extends VirtualWindowBase> = {\n generation: number;\n mounted: ReadonlyMap<string, Window>;\n pending: ReadonlyMap<string, VirtualWindowRequest<Window>>;\n latestDesired: ReadonlyMap<string, Window>;\n};\n\ntype VirtualWindowControllerOptions<Window extends VirtualWindowBase> = {\n onChange?(snapshot: VirtualWindowSnapshot<Window>): void;\n};\n\ntype VirtualWindowController<Input, Window extends VirtualWindowBase> = {\n computeWindow(input: Input): Window;\n shouldLoad(desired: Window, mounted?: Window | null): boolean;\n begin(block: string, desired: Window): VirtualWindowRequest<Window> | null;\n commit(request: VirtualWindowRequest<Window>, mounted?: Window): boolean;\n fail(request: VirtualWindowRequest<Window>): boolean;\n next(block: string): Window | null;\n mounted(block: string): Window | null;\n pending(block: string): VirtualWindowRequest<Window> | null;\n invalidate(): void;\n snapshot(): VirtualWindowSnapshot<Window>;\n};\n\nconst finite = (value: number, fallback = 0): number => (\n Number.isFinite(value) ? value : fallback\n);\n\nconst nonNegativeInteger = (value: number): number => (\n Math.max(0, Math.floor(finite(value)))\n);\n\nconst positive = (value: number, fallback = 1): number => (\n Math.max(Number.EPSILON, finite(value, fallback))\n);\n\nconst clamp = (value: number, minimum: number, maximum: number): number => (\n Math.min(maximum, Math.max(minimum, value))\n);\n\nconst computeAxis = (axis: VirtualAxis, input: FixedAxisInputDetail): VirtualAxisWindow => {\n const total = nonNegativeInteger(input.total);\n const itemSize = positive(input.itemSize);\n const viewportSize = Math.max(0, finite(input.viewportSize));\n const buffer = nonNegativeInteger(input.buffer);\n const visibleCount = Math.min(total, Math.max(1, Math.ceil(viewportSize / itemSize)));\n const maximumVisibleStart = Math.max(0, total - visibleCount);\n const scrollOffset = clamp(\n Math.max(0, finite(input.scrollOffset)),\n 0,\n Math.max(0, total * itemSize - viewportSize),\n );\n const visibleStart = clamp(Math.floor(scrollOffset / itemSize), 0, maximumVisibleStart);\n const count = Math.min(total, visibleCount + (buffer * 2));\n const start = clamp(visibleStart - buffer, 0, Math.max(0, total - count));\n\n return {\n axis,\n start,\n count,\n total,\n itemSize,\n viewportSize,\n scrollOffset,\n buffer,\n visibleStart,\n visibleCount,\n guardStart: Math.min(total, start + buffer),\n guardEnd: Math.max(0, start + count - buffer),\n translateOffset: start * itemSize,\n spacerSize: total * itemSize,\n };\n};\n\nconst fixedAxisWindowAdapter: FixedAxisWindowAdapter = {\n compute(input: FixedAxisWindowInput): FixedAxisWindow {\n const axes: FixedAxisWindow['axes'] = {};\n if (input.axes.x) axes.x = computeAxis('x', input.axes.x);\n if (input.axes.y) axes.y = computeAxis('y', input.axes.y);\n const key = (['x', 'y'] as const)\n .map((axis) => {\n const detail = axes[axis];\n return detail ? `${axis}:${detail.start}:${detail.count}:${detail.total}` : '';\n })\n .filter(Boolean)\n .join('|');\n return {kind: 'fixed-axis', key, axes};\n },\n\n covers(mounted: FixedAxisWindow, desired: FixedAxisWindow): boolean {\n return (['x', 'y'] as const).every((axis) => {\n const wanted = desired.axes[axis];\n if (!wanted) return true;\n const current = mounted.axes[axis];\n if (!current || current.total !== wanted.total || current.itemSize !== wanted.itemSize) return false;\n const desiredEnd = wanted.visibleStart + wanted.visibleCount;\n return wanted.visibleStart >= current.guardStart && desiredEnd <= current.guardEnd;\n });\n },\n\n serialize(window: FixedAxisWindow): Record<string, string> {\n const axes: Record<string, {start: number; count: number; total: number}> = {};\n (['x', 'y'] as const).forEach((axis) => {\n const detail = window.axes[axis];\n if (detail) axes[axis] = {start: detail.start, count: detail.count, total: detail.total};\n });\n return {window: JSON.stringify(axes)};\n },\n\n spacerSize(window: FixedAxisWindow, axis: VirtualAxis): number {\n return window.axes[axis]?.spacerSize ?? 0;\n },\n\n translateOffset(window: FixedAxisWindow, axis: VirtualAxis): number {\n return window.axes[axis]?.translateOffset ?? 0;\n },\n\n setAxisTotal(input: FixedAxisWindowInput, axis: VirtualAxis, total: number): FixedAxisWindowInput {\n const current = input.axes[axis];\n if (!current) return input;\n return {...input, axes: {...input.axes, [axis]: {...current, total: nonNegativeInteger(total)}}};\n },\n\n scrollTo(input: FixedAxisInputDetail, target: FixedAxisScrollTarget): number {\n const total = nonNegativeInteger(input.total);\n const itemSize = positive(input.itemSize);\n const viewportSize = Math.max(0, finite(input.viewportSize));\n const index = clamp(nonNegativeInteger(target.index), 0, Math.max(0, total - 1));\n const itemStart = index * itemSize;\n const itemEnd = itemStart + itemSize;\n const maximum = Math.max(0, total * itemSize - viewportSize);\n let offset = itemStart;\n if (target.align === 'center') offset = itemStart - ((viewportSize - itemSize) / 2);\n else if (target.align === 'end') offset = itemEnd - viewportSize;\n else if (target.align === 'auto') {\n const current = Math.max(0, finite(input.scrollOffset));\n if (itemStart >= current && itemEnd <= current + viewportSize) return clamp(current, 0, maximum);\n offset = itemStart < current ? itemStart : itemEnd - viewportSize;\n }\n return clamp(offset, 0, maximum);\n },\n};\n\nconst createVirtualWindowController = <Input, Window extends VirtualWindowBase>(\n adapter: VirtualWindowAdapter<Input, Window>,\n options: VirtualWindowControllerOptions<Window> = {},\n): VirtualWindowController<Input, Window> => {\n let generation = 0;\n let requestGeneration = 0;\n const mountedWindows = new Map<string, Window>();\n const pendingWindows = new Map<string, VirtualWindowRequest<Window>>();\n const latestDesired = new Map<string, Window>();\n\n const snapshot = (): VirtualWindowSnapshot<Window> => ({\n generation,\n mounted: new Map(mountedWindows),\n pending: new Map(pendingWindows),\n latestDesired: new Map(latestDesired),\n });\n const notify = (): void => options.onChange?.(snapshot());\n const isCurrent = (request: VirtualWindowRequest<Window>): boolean => {\n const pending = pendingWindows.get(request.block);\n return request.generation === generation\n && pending?.requestGeneration === request.requestGeneration;\n };\n\n return {\n computeWindow: (input) => adapter.compute(input),\n shouldLoad: (desired, mounted) => !mounted || !adapter.covers(mounted, desired),\n begin(block, desired) {\n latestDesired.set(block, desired);\n if (pendingWindows.has(block) || !this.shouldLoad(desired, mountedWindows.get(block))) {\n notify();\n return null;\n }\n const request = {\n block,\n window: desired,\n generation,\n requestGeneration: ++requestGeneration,\n };\n pendingWindows.set(block, request);\n notify();\n return request;\n },\n commit(request, mounted = request.window) {\n if (!isCurrent(request)) return false;\n pendingWindows.delete(request.block);\n mountedWindows.set(request.block, mounted);\n notify();\n return true;\n },\n fail(request) {\n if (!isCurrent(request)) return false;\n pendingWindows.delete(request.block);\n notify();\n return true;\n },\n next(block) {\n if (pendingWindows.has(block)) return null;\n const desired = latestDesired.get(block);\n if (!desired) return null;\n const mounted = mountedWindows.get(block);\n if (mounted && adapter.covers(mounted, desired)) return null;\n return desired;\n },\n mounted: (block) => mountedWindows.get(block) ?? null,\n pending: (block) => pendingWindows.get(block) ?? null,\n invalidate() {\n generation += 1;\n mountedWindows.clear();\n pendingWindows.clear();\n latestDesired.clear();\n notify();\n },\n snapshot,\n };\n};\n\nexport {\n createVirtualWindowController,\n fixedAxisWindowAdapter,\n};\nexport type {\n FixedAxisInputDetail,\n FixedAxisScrollTarget,\n FixedAxisWindowAdapter,\n FixedAxisWindow,\n FixedAxisWindowInput,\n VirtualAxis,\n VirtualAxisWindow,\n VirtualScrollAlign,\n VirtualWindowAdapter,\n VirtualWindowBase,\n VirtualWindowController,\n VirtualWindowControllerOptions,\n VirtualWindowKind,\n VirtualWindowRequest,\n VirtualWindowSnapshot,\n};\n","import {bool, number, oneOf, string, type SchemaToProps} from './codecs';\n\nconst VIRTUALIZER_AXES = ['vertical'] as const;\ntype VirtualizerAxis = typeof VIRTUALIZER_AXES[number];\n\nconst virtualizerSchema = {\n fetchUrl: string,\n cursor: bool,\n totalItems: number.min(0).default(0),\n itemSize: number.min(Number.EPSILON).default(36),\n bufferSize: number.min(1).default(50),\n overscan: number.min(0).default(0),\n axis: oneOf(VIRTUALIZER_AXES, 'vertical' as VirtualizerAxis),\n initialIndex: number.min(0).default(0),\n startParam: string.default('start'),\n countParam: string.default('count'),\n totalParam: string.default('total'),\n windowParam: string.default('window'),\n totalHeader: string.default('X-Trellis-Total-Items'),\n assetsHeader: string.default('X-Trellis-Assets'),\n metaSelector: string.default('template[data-ui-virtualizer-meta]'),\n scrollArea: bool.default(true),\n fill: bool.default(true),\n class: string,\n scrollAreaClass: string,\n viewportClass: string,\n spacerClass: string,\n blockClass: string,\n};\n\ntype VirtualizerProps = SchemaToProps<typeof virtualizerSchema>;\n\nexport {VIRTUALIZER_AXES, virtualizerSchema};\nexport type {VirtualizerAxis, VirtualizerProps};\n","import type Alpine from 'alpinejs';\n\nimport {defineProps, type PropState} from './codecs';\nimport {registerDomInvalidationOwner} from './dom-invalidation';\nimport {replaceFragmentChildren} from './engine/fragment';\nimport type {TrellisAlpineComponent} from './index';\nimport {\n parseVirtualizerFragmentResponse,\n type VirtualizerFragmentPayload,\n} from './virtualizer-fragment';\nimport {\n createVirtualWindowController,\n fixedAxisWindowAdapter,\n type FixedAxisWindow,\n type VirtualScrollAlign,\n type VirtualWindowRequest,\n} from './virtual-window';\nimport {virtualizerSchema} from './virtualizer-schema';\nimport type {\n CursorPage,\n CursorVirtualizerOptions,\n} from './cursor-data-source';\n\ntype ResetOptions = {scrollTop?: number};\ntype SetUrlOptions = {reset?: boolean};\n\n/** Public Alpine API for `ui.virtualizer`. @public */\ninterface UiVirtualizerApi<Query = unknown> {\n /** Whether the configured cursor data source supports arbitrary index seeks. */\n readonly supportsSeek: boolean;\n /** Scrolls a logical item into the requested vertical alignment. */\n scrollToIndex(index: number, align?: VirtualScrollAlign): void;\n /** Replaces the known logical item count and reloads mounted ranges. */\n setTotalItems(count: number): void;\n /** Replaces the fragment endpoint and optionally resets to the top. */\n setUrl(url: string, options?: SetUrlOptions): void;\n /** Replaces cursor-mode query state and resets to the first cursor. */\n setQuery(query: Query): void;\n /** Invalidates all blocks and reloads them around a scroll position. */\n reset(options?: ResetOptions): void;\n /** Reloads all blocks without changing the fragment endpoint. */\n reload(options?: ResetOptions): void;\n}\n\ntype VirtualizerData<Query = unknown> = UiVirtualizerApi<Query> & {\n props: PropState<typeof virtualizerSchema>;\n init(): void;\n destroy(): void;\n};\n\ntype BlockRecord = {\n key: string;\n element: HTMLElement;\n};\n\ntype VirtualizerOptions<Query, Content> = {\n cursor?: CursorVirtualizerOptions<Query, Content>;\n};\n\ntype CursorMounted<Content> = {\n block: BlockRecord;\n page: CursorPage<Content>;\n startIndex: number;\n count: number;\n};\n\ntype CursorRequest = {\n generation: number;\n id: number;\n aborter: AbortController;\n};\n\ntype CursorPageKind = 'page' | 'seek';\n\nconst integer = (value: number, minimum = 0): number => (\n Math.max(minimum, Math.floor(Number.isFinite(value) ? value : minimum))\n);\n\nconst UiVirtualizer = <Query = unknown, Content = unknown>(\n AlpineInstance: Alpine.Alpine,\n options: VirtualizerOptions<Query, Content> = {},\n): TrellisAlpineComponent<VirtualizerData<Query>> => {\n let root: HTMLElement | null = null;\n let viewport: HTMLElement | null = null;\n let spacer: HTMLElement | null = null;\n let blocks: BlockRecord[] = [];\n let totalItems = 0;\n let currentWindowKey = '';\n let latestScrollTop: number | null = null;\n let scrollFrame = 0;\n let loading = 0;\n let destroyed = false;\n let listenerAborter: AbortController | null = null;\n let unregisterDomInvalidation: (() => void) | null = null;\n let suppressPropReload = false;\n const aborters = new Map<string, AbortController>();\n const controller = createVirtualWindowController(fixedAxisWindowAdapter);\n const cursor = options.cursor;\n let cursorQuery = cursor?.query;\n let cursorGeneration = 0;\n let cursorRequestId = 0;\n let cursorPaging = false;\n let cursorFailed = false;\n let cursorLatestScrollTop: number | null = null;\n let cursorSeekTimer = 0;\n let cursorSeekIndex: number | null = null;\n let cursorActiveSeekIndex: number | null = null;\n let cursorSeekAborter: AbortController | null = null;\n const cursorRequests = new Map<string, CursorRequest>();\n const cursorMounted = new Map<string, CursorMounted<Content>>();\n\n const dispatch = (name: string, detail: Record<string, unknown>): void => {\n root?.dispatchEvent(new CustomEvent(name, {bubbles: true, composed: true, detail}));\n };\n const syncState = (): void => {\n if (!root || !spacer) return;\n const cursorExtent = cursorMounted.size === 0\n ? 0\n : Math.max(...[...cursorMounted.values()].map(({startIndex, count}) => startIndex + count));\n const cursorHasNext = [...cursorMounted.values()].some(({page, startIndex, count}) => (\n startIndex + count === cursorExtent && page.next.available\n ));\n const spacerItems = cursor && totalItems === 0\n ? cursorExtent + (cursorHasNext ? integer(component.props.bufferSize, 1) : 0)\n : totalItems;\n root.toggleAttribute('data-loading', loading > 0);\n root.toggleAttribute('data-empty', cursor ? cursorMounted.size === 0 && loading === 0 : totalItems === 0);\n spacer.style.height = `${Math.max(spacerItems * component.props.itemSize, component.props.itemSize)}px`;\n };\n const updateTotal = (next: number): boolean => {\n const normalized = integer(next);\n if (normalized === totalItems) return false;\n totalItems = normalized;\n syncState();\n dispatch('ui:virtualizer-total-change', {totalItems});\n dispatch('ui:virtualizer-axis-total-change', {axis: 'y', total: totalItems, window: null});\n return true;\n };\n const blockWindow = (start: number): FixedAxisWindow => fixedAxisWindowAdapter.compute({axes: {\n y: {\n total: totalItems,\n itemSize: component.props.itemSize,\n viewportSize: component.props.bufferSize * component.props.itemSize,\n scrollOffset: start * component.props.itemSize,\n buffer: 0,\n },\n }});\n const desiredWindows = (scrollTop: number): FixedAxisWindow[] => {\n if (totalItems === 0 || (!cursor && !component.props.fetchUrl.trim())) return [];\n const size = integer(component.props.bufferSize, 1);\n const index = Math.min(totalItems - 1, Math.floor(Math.max(0, scrollTop) / component.props.itemSize));\n const center = Math.floor(index / size) * size;\n const last = Math.floor((totalItems - 1) / size) * size;\n const starts = [center - size, center, center + size]\n .map((start) => Math.min(last, Math.max(0, start)));\n if (center === 0 && last > size) starts.splice(0, 3, 0, size, Math.min(last, size * 2));\n else if (center === last && last > size) starts.splice(0, 3, Math.max(0, last - (size * 2)), last - size, last);\n return [...new Set(starts)].map(blockWindow);\n };\n const requestUrl = (window: FixedAxisWindow): string => {\n const axis = window.axes.y;\n if (!axis) throw new Error('Vertical virtualizer requires a y window.');\n const url = new URL(component.props.fetchUrl, document.baseURI);\n url.searchParams.set(component.props.startParam, String(axis.start));\n url.searchParams.set(component.props.countParam, String(axis.count));\n url.searchParams.set(component.props.totalParam, String(axis.total));\n return /^[a-z][a-z\\d+.-]*:/i.test(component.props.fetchUrl) || component.props.fetchUrl.startsWith('//')\n ? url.href\n : `${url.pathname}${url.search}${url.hash}`;\n };\n const replaceBlock = async (\n block: BlockRecord,\n payload: VirtualizerFragmentPayload,\n shouldReplace: () => boolean,\n ): Promise<boolean> => {\n const hadFocus = block.element.contains(document.activeElement);\n const replaced = await replaceFragmentChildren(AlpineInstance, block.element, payload.html, {\n assets: payload.assets,\n shouldReplace,\n });\n if (replaced && hadFocus) viewport?.focus({preventScroll: true});\n return replaced;\n };\n const positionBlock = (block: BlockRecord, startIndex: number, count: number): void => {\n block.element.style.height = `${count * component.props.itemSize}px`;\n block.element.style.transform = `translateY(${startIndex * component.props.itemSize}px)`;\n };\n const settle = (): void => {\n loading = Math.max(0, loading - 1);\n syncState();\n if (loading > 0 || latestScrollTop === null || destroyed) return;\n const scrollTop = latestScrollTop;\n latestScrollTop = null;\n reconcile(scrollTop);\n };\n const load = async (\n block: BlockRecord,\n window: FixedAxisWindow,\n request: VirtualWindowRequest<FixedAxisWindow>,\n ): Promise<void> => {\n const axis = window.axes.y;\n if (!axis) return;\n const aborter = new AbortController();\n aborters.set(block.key, aborter);\n loading += 1;\n syncState();\n root?.removeAttribute('data-error');\n dispatch('ui:virtualizer-load-start', {block: block.key, window});\n try {\n const requestId = globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${request.requestGeneration}`;\n const response = await fetch(requestUrl(window), {\n method: 'GET',\n headers: {\n Accept: 'text/html',\n 'X-Trellis-Virtualizer': 'true',\n 'X-Trellis-Request-ID': requestId,\n },\n signal: aborter.signal,\n });\n if (!response.ok && response.status !== 204) {\n controller.fail(request);\n root?.setAttribute('data-error', '');\n dispatch('ui:virtualizer-error', {block: block.key, window, status: response.status});\n return;\n }\n const payload = await parseVirtualizerFragmentResponse(response, component.props);\n if (controller.pending(block.key) !== request || destroyed) return;\n const replaced = await replaceBlock(\n block,\n payload,\n () => controller.pending(block.key) === request && !destroyed,\n );\n if (!replaced) return;\n const totalChanged = payload.totalItems !== null && updateTotal(payload.totalItems);\n if (!controller.commit(request, window)) return;\n positionBlock(block, axis.start, axis.count);\n dispatch('ui:virtualizer-load', {block: block.key, window});\n if (totalChanged) latestScrollTop = viewport?.scrollTop ?? 0;\n } catch (error) {\n if (aborter.signal.aborted) return;\n controller.fail(request);\n root?.setAttribute('data-error', '');\n dispatch('ui:virtualizer-error', {block: block.key, window, status: 0, error});\n } finally {\n if (aborters.get(block.key) === aborter) aborters.delete(block.key);\n settle();\n }\n };\n const cursorLimit = (): number => integer(component.props.bufferSize, 1);\n const cursorRecords = (): CursorMounted<Content>[] => (\n [...cursorMounted.values()].sort((left, right) => left.startIndex - right.startIndex)\n );\n const cursorRequestIsCurrent = (block: BlockRecord, request: CursorRequest): boolean => (\n !destroyed\n && request.generation === cursorGeneration\n && cursorRequests.get(block.key)?.id === request.id\n );\n const loadCursorPage = async (\n block: BlockRecord,\n getPage: (signal: AbortSignal) => Promise<CursorPage<Content>>,\n fallbackStartIndex: number,\n suppliedAborter?: AbortController,\n kind: CursorPageKind = 'page',\n ): Promise<CursorMounted<Content> | null> => {\n if (!cursor || cursorRequests.has(block.key)) return null;\n const aborter = suppliedAborter ?? new AbortController();\n const request: CursorRequest = {\n generation: cursorGeneration,\n id: ++cursorRequestId,\n aborter,\n };\n cursorRequests.set(block.key, request);\n loading += 1;\n syncState();\n root?.removeAttribute('data-error');\n dispatch('ui:virtualizer-load-start', {block: block.key, mode: 'cursor'});\n try {\n const page = await getPage(aborter.signal);\n if (!cursorRequestIsCurrent(block, request)) return null;\n if (kind === 'seek' && page.startIndex === undefined) {\n throw new Error('Cursor seek response requires startIndex.');\n }\n const payload = await cursor.responseAdapter(page.content, page);\n if (!cursorRequestIsCurrent(block, request)) return null;\n const startIndex = page.startIndex === undefined\n ? integer(fallbackStartIndex)\n : integer(page.startIndex);\n const pageTotal = payload.totalItems ?? totalItems;\n const returnedCount = payload.itemCount === undefined\n ? cursorLimit()\n : integer(payload.itemCount);\n const count = pageTotal > 0\n ? Math.min(cursorLimit(), Math.max(0, pageTotal - startIndex))\n : returnedCount;\n const replaced = await replaceBlock(\n block,\n payload,\n () => cursorRequestIsCurrent(block, request),\n );\n if (!replaced || !cursorRequestIsCurrent(block, request)) return null;\n if (payload.totalItems !== null) updateTotal(payload.totalItems);\n else if (!page.next.available) updateTotal(startIndex + count);\n const mounted = {block, page, startIndex, count};\n cursorMounted.set(block.key, mounted);\n positionBlock(block, startIndex, count);\n dispatch('ui:virtualizer-load', {\n block: block.key,\n mode: 'cursor',\n page: {\n previous: page.previous,\n next: page.next,\n ...(page.startIndex === undefined ? {} : {startIndex: page.startIndex}),\n },\n startIndex,\n });\n return mounted;\n } catch (error) {\n if (aborter.signal.aborted || !cursorRequestIsCurrent(block, request)) return null;\n cursorFailed = true;\n root?.setAttribute('data-error', '');\n dispatch('ui:virtualizer-error', {block: block.key, mode: 'cursor', status: 0, error});\n return null;\n } finally {\n if (cursorRequests.get(block.key) === request) cursorRequests.delete(block.key);\n loading = Math.max(0, loading - 1);\n syncState();\n }\n };\n const finishCursorPaging = (): void => {\n cursorPaging = false;\n const scrollTop = cursorLatestScrollTop ?? viewport?.scrollTop ?? 0;\n cursorLatestScrollTop = null;\n reconcileCursor(scrollTop);\n };\n const loadInitialCursorPages = async (): Promise<void> => {\n if (!cursor || cursorPaging || cursorFailed || cursorMounted.size > 0) return;\n cursorPaging = true;\n const generation = cursorGeneration;\n try {\n const first = await loadCursorPage(\n blocks[0]!,\n (signal) => cursor.dataSource.first({limit: cursorLimit(), query: cursorQuery as Query, signal}),\n 0,\n );\n if (!first || generation !== cursorGeneration) return;\n let current = first;\n for (const block of blocks.slice(1)) {\n if (!current.page.next.available) break;\n const nextCursor = current.page.next.cursor;\n const next = await loadCursorPage(\n block,\n (signal) => cursor.dataSource.next({\n cursor: nextCursor,\n limit: cursorLimit(),\n query: cursorQuery as Query,\n signal,\n }),\n current.startIndex + current.count,\n );\n if (!next || generation !== cursorGeneration) break;\n current = next;\n }\n } finally {\n if (generation === cursorGeneration) finishCursorPaging();\n }\n };\n const loadNextCursorPage = async (): Promise<void> => {\n if (!cursor || cursorPaging) return;\n const records = cursorRecords();\n const last = records.at(-1);\n if (!last?.page.next.available) return;\n const recycled = records[0]?.block;\n if (!recycled) return;\n cursorPaging = true;\n const generation = cursorGeneration;\n const nextCursor = last.page.next.cursor;\n try {\n await loadCursorPage(\n recycled,\n (signal) => cursor.dataSource.next({\n cursor: nextCursor,\n limit: cursorLimit(),\n query: cursorQuery as Query,\n signal,\n }),\n last.startIndex + last.count,\n );\n } finally {\n if (generation === cursorGeneration) finishCursorPaging();\n }\n };\n const loadPreviousCursorPage = async (): Promise<void> => {\n if (!cursor || cursorPaging) return;\n const records = cursorRecords();\n const first = records[0];\n if (!first?.page.previous.available) return;\n const recycled = records.at(-1)?.block;\n if (!recycled) return;\n cursorPaging = true;\n const generation = cursorGeneration;\n const previousCursor = first.page.previous.cursor;\n try {\n await loadCursorPage(\n recycled,\n (signal) => cursor.dataSource.previous({\n cursor: previousCursor,\n limit: cursorLimit(),\n query: cursorQuery as Query,\n signal,\n }),\n Math.max(0, first.startIndex - cursorLimit()),\n );\n } finally {\n if (generation === cursorGeneration) finishCursorPaging();\n }\n };\n const clearCursorSeekTimer = (): void => {\n if (cursorSeekTimer) window.clearTimeout(cursorSeekTimer);\n cursorSeekTimer = 0;\n cursorSeekIndex = null;\n };\n const performCursorSeek = async (index: number): Promise<void> => {\n const seek = cursor?.dataSource.seek;\n if (!cursor || !seek) return;\n cursorSeekAborter?.abort();\n cursorRequests.forEach(({aborter}) => aborter.abort());\n cursorRequests.clear();\n cursorPaging = true;\n const generation = cursorGeneration;\n const aborter = new AbortController();\n cursorSeekAborter = aborter;\n cursorActiveSeekIndex = index;\n const middle = blocks[1]!;\n cursorMounted.clear();\n blocks.forEach((block) => {\n if (block !== middle) void replaceFragmentChildren(AlpineInstance, block.element, '');\n });\n try {\n const resolved = await loadCursorPage(\n middle,\n (signal) => seek({index, limit: cursorLimit(), query: cursorQuery as Query, signal}),\n index,\n aborter,\n 'seek',\n );\n if (!resolved || generation !== cursorGeneration || cursorSeekAborter !== aborter) return;\n const adjacent: Array<Promise<CursorMounted<Content> | null>> = [];\n if (resolved.page.previous.available) {\n const previousCursor = resolved.page.previous.cursor;\n adjacent.push(loadCursorPage(\n blocks[0]!,\n (signal) => cursor.dataSource.previous({\n cursor: previousCursor,\n limit: cursorLimit(),\n query: cursorQuery as Query,\n signal,\n }),\n Math.max(0, resolved.startIndex - cursorLimit()),\n ));\n }\n if (resolved.page.next.available) {\n const nextCursor = resolved.page.next.cursor;\n adjacent.push(loadCursorPage(\n blocks[2]!,\n (signal) => cursor.dataSource.next({\n cursor: nextCursor,\n limit: cursorLimit(),\n query: cursorQuery as Query,\n signal,\n }),\n resolved.startIndex + resolved.count,\n ));\n }\n await Promise.all(adjacent);\n } finally {\n if (cursorSeekAborter === aborter) {\n cursorSeekAborter = null;\n cursorActiveSeekIndex = null;\n if (generation === cursorGeneration) finishCursorPaging();\n }\n }\n };\n const scheduleCursorSeek = (index: number): void => {\n if (!cursor?.dataSource.seek) return;\n const clamped = totalItems > 0 ? Math.min(Math.max(0, totalItems - 1), integer(index)) : integer(index);\n if (cursorRecords().some((record) => (\n clamped >= record.startIndex && clamped < record.startIndex + record.count\n ))) return;\n if (cursorSeekIndex === clamped || cursorActiveSeekIndex === clamped) return;\n clearCursorSeekTimer();\n cursorSeekIndex = clamped;\n cursorSeekTimer = window.setTimeout(() => {\n cursorSeekTimer = 0;\n cursorSeekIndex = null;\n void performCursorSeek(clamped);\n }, integer(cursor.seekDebounce ?? 100));\n };\n const reconcileCursor = (scrollTop: number): void => {\n if (!cursor) return;\n const index = totalItems > 0\n ? Math.min(totalItems - 1, Math.floor(Math.max(0, scrollTop) / component.props.itemSize))\n : Math.floor(Math.max(0, scrollTop) / component.props.itemSize);\n if (cursorSeekAborter && cursor.dataSource.seek && cursorActiveSeekIndex !== index) {\n cursorLatestScrollTop = scrollTop;\n scheduleCursorSeek(index);\n return;\n }\n if (cursorPaging || loading > 0) {\n cursorLatestScrollTop = scrollTop;\n return;\n }\n const records = cursorRecords();\n if (records.length === 0) {\n void loadInitialCursorPages();\n return;\n }\n const covered = records.find((record) => (\n index >= record.startIndex && index < record.startIndex + record.count\n ));\n if (covered) {\n clearCursorSeekTimer();\n if (covered === records[0] && covered.page.previous.available) void loadPreviousCursorPage();\n else if (covered === records.at(-1) && covered.page.next.available) void loadNextCursorPage();\n return;\n }\n if (cursor.dataSource.seek) {\n scheduleCursorSeek(index);\n return;\n }\n if (index < records[0]!.startIndex) void loadPreviousCursorPage();\n else void loadNextCursorPage();\n };\n const reconcile = (scrollTop: number): void => {\n if (cursor) {\n reconcileCursor(scrollTop);\n return;\n }\n if (loading > 0) {\n latestScrollTop = scrollTop;\n return;\n }\n const desired = desiredWindows(scrollTop);\n const signature = desired.map((window) => window.key).join(',');\n const logicalIndex = Math.min(\n Math.max(0, totalItems - 1),\n Math.floor(Math.max(0, scrollTop) / component.props.itemSize),\n );\n const center = desired.find((window) => {\n const axis = window.axes.y;\n return axis && logicalIndex >= axis.start && logicalIndex < axis.start + axis.count;\n }) ?? desired[0];\n if (center && currentWindowKey !== center.key) {\n currentWindowKey = center.key;\n const axis = center.axes.y!;\n dispatch('ui:virtualizer-window', {window: center});\n dispatch('ui:virtualizer-range', {\n start: axis.start,\n count: axis.count,\n end: axis.start + axis.count,\n window: center,\n });\n }\n if (!signature) {\n blocks.forEach((block) => void replaceFragmentChildren(AlpineInstance, block.element, ''));\n return;\n }\n\n const preserved = new Set<BlockRecord>();\n desired.forEach((window) => {\n const existing = blocks.find((block) => controller.mounted(block.key)?.key === window.key);\n if (existing) preserved.add(existing);\n });\n const available = blocks.filter((block) => !preserved.has(block));\n desired.forEach((window) => {\n if (blocks.some((block) => controller.mounted(block.key)?.key === window.key)) return;\n const block = available.shift();\n if (!block) return;\n const request = controller.begin(block.key, window);\n if (request) void load(block, window, request);\n });\n };\n const invalidate = (): void => {\n aborters.forEach((aborter) => aborter.abort());\n aborters.clear();\n loading = 0;\n latestScrollTop = null;\n currentWindowKey = '';\n controller.invalidate();\n cursorGeneration += 1;\n clearCursorSeekTimer();\n cursorSeekAborter?.abort();\n cursorSeekAborter = null;\n cursorActiveSeekIndex = null;\n cursorRequests.forEach(({aborter}) => aborter.abort());\n cursorRequests.clear();\n cursorMounted.clear();\n cursorPaging = false;\n cursorFailed = false;\n cursorLatestScrollTop = null;\n blocks.forEach((block) => {\n block.element.style.height = '';\n block.element.style.transform = '';\n void replaceFragmentChildren(AlpineInstance, block.element, '');\n });\n syncState();\n };\n\n const component: TrellisAlpineComponent<VirtualizerData<Query>> = {\n supportsSeek: Boolean(cursor?.dataSource.seek),\n props: null as unknown as PropState<typeof virtualizerSchema>,\n init(): void {\n root = this.$el;\n destroyed = false;\n this.props = defineProps({\n el: root,\n schema: virtualizerSchema,\n onChange: (_state, changes) => {\n if (suppressPropReload) return;\n if (changes.some(({key}) => key === 'totalItems')) {\n updateTotal(this.props.totalItems);\n if (!cursor) this.reload();\n } else if (changes.some(({key}) => ['fetchUrl', 'itemSize', 'bufferSize'].includes(key))) {\n this.reload();\n }\n },\n });\n totalItems = cursor\n ? integer(this.props.totalItems)\n : this.props.fetchUrl.trim()\n ? Math.max(1, integer(this.props.totalItems))\n : 0;\n viewport = root.querySelector<HTMLElement>('[data-ui-scroll-area-viewport]') ?? root;\n spacer = root.querySelector<HTMLElement>('[data-ui-virtualizer-spacer]');\n blocks = Array.from(root.querySelectorAll<HTMLElement>('[data-ui-virtualizer-block]'))\n .slice(0, 3)\n .map((element, index) => ({element, key: `block-${index + 1}`}));\n if (!spacer || blocks.length !== 3) throw new Error('Virtualizer requires one spacer and three block containers.');\n viewport.style.overscrollBehavior = 'contain';\n viewport.style.overflowAnchor = 'none';\n listenerAborter = new AbortController();\n viewport.addEventListener('scroll', () => {\n if (scrollFrame) return;\n scrollFrame = requestAnimationFrame(() => {\n scrollFrame = 0;\n if (viewport) reconcile(viewport.scrollTop);\n });\n }, {passive: true, signal: listenerAborter.signal});\n unregisterDomInvalidation = registerDomInvalidationOwner(root, {\n invalidateDom: () => component.reload(),\n });\n viewport.scrollTop = fixedAxisWindowAdapter.scrollTo({\n total: totalItems,\n itemSize: this.props.itemSize,\n viewportSize: viewport.clientHeight,\n scrollOffset: 0,\n buffer: this.props.bufferSize,\n }, {axis: 'y', index: this.props.initialIndex});\n syncState();\n reconcile(viewport.scrollTop);\n },\n destroy(): void {\n destroyed = true;\n if (scrollFrame) cancelAnimationFrame(scrollFrame);\n listenerAborter?.abort();\n listenerAborter = null;\n unregisterDomInvalidation?.();\n unregisterDomInvalidation = null;\n invalidate();\n this.props.disconnect();\n root = null;\n viewport = null;\n spacer = null;\n blocks = [];\n },\n scrollToIndex(index, align = 'start'): void {\n if (!viewport) return;\n viewport.scrollTop = fixedAxisWindowAdapter.scrollTo({\n total: totalItems,\n itemSize: this.props.itemSize,\n viewportSize: viewport.clientHeight,\n scrollOffset: viewport.scrollTop,\n buffer: this.props.bufferSize,\n }, {axis: 'y', index, align});\n reconcile(viewport.scrollTop);\n },\n setTotalItems(count): void {\n updateTotal(count);\n if (cursor) {\n if (viewport) reconcileCursor(viewport.scrollTop);\n return;\n }\n const scrollTop = viewport?.scrollTop;\n this.reload(scrollTop === undefined ? {} : {scrollTop});\n },\n setUrl(url, options = {}): void {\n const nextUrl = String(url).trim();\n suppressPropReload = true;\n this.props.fetchUrl = nextUrl;\n suppressPropReload = false;\n updateTotal(nextUrl ? Math.max(1, integer(this.props.totalItems)) : 0);\n if (options.reset ?? true) this.reset();\n else this.reload();\n },\n setQuery(query): void {\n if (!cursor) return;\n cursorQuery = query;\n this.reset();\n },\n reset(options = {}): void {\n this.reload({scrollTop: options.scrollTop ?? 0});\n },\n reload(options = {}): void {\n const scrollTop = options.scrollTop ?? viewport?.scrollTop ?? 0;\n invalidate();\n if (viewport) viewport.scrollTop = Math.max(0, scrollTop);\n reconcile(scrollTop);\n },\n };\n return component;\n};\n\nexport {UiVirtualizer};\nexport type {\n CursorContinuation,\n CursorDataSource,\n CursorFirstArgs,\n CursorMoveArgs,\n CursorPage,\n CursorResponseAdapter,\n CursorRenderPayload,\n CursorSeekArgs,\n SoughtCursorPage,\n CursorVirtualizerOptions,\n} from './cursor-data-source';\nexport type {\n ResetOptions,\n SetUrlOptions,\n UiVirtualizerApi,\n VirtualizerOptions,\n VirtualizerData,\n VirtualScrollAlign,\n};\n","import {parseAssetDescriptors, type AssetDescriptor} from '../assets/bridge';\n\ntype CursorContinuation =\n | {available: false}\n | {available: true; cursor: string};\n\ntype CursorPage<Content> = {\n content: Content;\n previous: CursorContinuation;\n next: CursorContinuation;\n startIndex?: number;\n};\n\ntype CursorRenderPayload = {\n html: string;\n assets: AssetDescriptor[];\n totalItems: number | null;\n itemCount?: number;\n};\n\ntype SoughtCursorPage<Content> = CursorPage<Content> & {\n startIndex: number;\n};\n\ntype CursorFirstArgs<Query> = {\n limit: number;\n query: Query;\n signal: AbortSignal;\n};\n\ntype CursorMoveArgs<Query> = CursorFirstArgs<Query> & {\n cursor: string;\n};\n\ntype CursorSeekArgs<Query> = CursorFirstArgs<Query> & {\n index: number;\n};\n\ntype CursorDataSource<Query, Content> = {\n first(args: CursorFirstArgs<Query>): Promise<CursorPage<Content>>;\n next(args: CursorMoveArgs<Query>): Promise<CursorPage<Content>>;\n previous(args: CursorMoveArgs<Query>): Promise<CursorPage<Content>>;\n seek?(args: CursorSeekArgs<Query>): Promise<SoughtCursorPage<Content>>;\n};\n\ntype CursorResponseAdapter<Content> = (\n content: Content,\n page: CursorPage<Content>,\n) => CursorRenderPayload | Promise<CursorRenderPayload>;\n\ntype CursorVirtualizerOptions<Query, Content> = {\n dataSource: CursorDataSource<Query, Content>;\n query: Query;\n responseAdapter: CursorResponseAdapter<Content>;\n seekDebounce?: number;\n};\n\ntype ServerCursorResponse = {\n content: string;\n assets: AssetDescriptor[];\n previous: CursorContinuation;\n next: CursorContinuation;\n startIndex?: number;\n total?: number;\n count?: number;\n};\n\nconst serverCursorResponse = (value: unknown): ServerCursorResponse => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new TypeError('Cursor response must be an object.');\n }\n const response = value as Record<string, unknown>;\n const fields = new Set(['content', 'assets', 'previous', 'next', 'startIndex', 'total', 'count']);\n for (const name of Object.keys(response)) {\n if (!fields.has(name)) {\n throw new TypeError(`Cursor response contains unexpected field ${name}.`);\n }\n }\n const continuation = (name: 'previous' | 'next'): CursorContinuation => {\n const candidate = response[name];\n if (typeof candidate !== 'object' || candidate === null || Array.isArray(candidate)) {\n throw new TypeError(`Cursor response ${name} must be a continuation object.`);\n }\n const record = candidate as Record<string, unknown>;\n const available = record.available;\n if (available !== false && available !== true) {\n throw new TypeError(`Cursor response ${name}.available must be a boolean.`);\n }\n if (!available && Object.hasOwn(record, 'cursor')) {\n throw new TypeError(`Unavailable cursor response ${name} cannot contain a cursor.`);\n }\n const fields = new Set(available ? ['available', 'cursor'] : ['available']);\n for (const field of Object.keys(record)) {\n if (!fields.has(field)) {\n throw new TypeError(`Cursor response ${name} contains unexpected field ${field}.`);\n }\n }\n if (!available) {\n return {available: false};\n }\n if (typeof record.cursor !== 'string' || record.cursor.length === 0) {\n throw new TypeError(`Available cursor response ${name} requires a non-empty cursor.`);\n }\n return {available: true, cursor: record.cursor};\n };\n const optionalInteger = (name: 'startIndex' | 'total' | 'count'): number | undefined => {\n const candidate = response[name];\n if (candidate === undefined) return undefined;\n if (!Number.isInteger(candidate) || Number(candidate) < 0) {\n throw new TypeError(`Cursor response ${name} must be a non-negative integer.`);\n }\n return Number(candidate);\n };\n if (typeof response.content !== 'string') {\n throw new TypeError('Cursor response content must be a string.');\n }\n const startIndex = optionalInteger('startIndex');\n const total = optionalInteger('total');\n const count = optionalInteger('count');\n return {\n content: response.content,\n assets: Object.hasOwn(response, 'assets') ? parseAssetDescriptors(response.assets) : [],\n previous: continuation('previous'),\n next: continuation('next'),\n ...(startIndex === undefined ? {} : {startIndex}),\n ...(total === undefined ? {} : {total}),\n ...(count === undefined ? {} : {count}),\n };\n};\n\nconst serverCursorOptions = (\n element: () => HTMLElement,\n): CursorVirtualizerOptions<null, ServerCursorResponse> => {\n const requestPage = async ({\n cursor,\n direction,\n limit,\n signal,\n index,\n }: {\n cursor: string | null;\n direction: 'forward' | 'backward';\n limit: number;\n signal: AbortSignal;\n index?: number;\n }): Promise<CursorPage<ServerCursorResponse>> => {\n const fetchUrl = element().dataset.fetchUrl ?? '';\n const url = new URL(fetchUrl, document.baseURI);\n url.searchParams.set('cursor', cursor ?? '');\n url.searchParams.set('direction', direction);\n url.searchParams.set('limit', String(limit));\n if (index !== undefined) url.searchParams.set('index', String(index));\n const href = /^[a-z][a-z\\d+.-]*:/i.test(fetchUrl) || fetchUrl.startsWith('//')\n ? url.href\n : `${url.pathname}${url.search}${url.hash}`;\n const response = await fetch(href, {signal});\n if (!response.ok) throw new Error(`Cursor request failed (${response.status}).`);\n const page = serverCursorResponse(await response.json());\n return {...page, content: page};\n };\n return {\n query: null,\n dataSource: {\n first: ({limit, signal}) => requestPage({cursor: null, direction: 'forward', limit, signal}),\n next: ({cursor, limit, signal}) => requestPage({cursor, direction: 'forward', limit, signal}),\n previous: ({cursor, limit, signal}) => requestPage({cursor, direction: 'backward', limit, signal}),\n seek: ({index, limit, signal}) => requestPage({\n cursor: null, direction: 'forward', index, limit, signal,\n }).then((page) => {\n if (page.startIndex === undefined) throw new Error('Cursor seek response is missing startIndex.');\n return {...page, startIndex: page.startIndex};\n }),\n },\n responseAdapter: (page) => ({\n html: page.content,\n assets: page.assets,\n totalItems: page.total ?? null,\n ...(page.count === undefined ? {} : {itemCount: page.count}),\n }),\n };\n};\n\nexport {serverCursorOptions};\n\nexport type {\n CursorDataSource,\n CursorContinuation,\n CursorFirstArgs,\n CursorMoveArgs,\n CursorPage,\n CursorResponseAdapter,\n CursorRenderPayload,\n CursorSeekArgs,\n ServerCursorResponse,\n SoughtCursorPage,\n CursorVirtualizerOptions,\n};\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{i as e,r as t,s as n,t as r}from"./dom-DiTFTWeR.js";import{f as i,s as a}from"./motion-CbwLBhMt.js";import{t as o}from"./capability-motion-C3q5Xzv2.js";import{n as s}from"./morph-Cq3V_23_.js";import{a as c,f as l,l as u,n as d}from"./codecs-CQ7olTJL.js";import{i as f,t as ee}from"./alpine-machine-CE2UN4Qu.js";import{t as te}from"./cleanup-manager-D9QiZF_Q.js";import{n as p,t as ne}from"./alpine-data-Dvc_bXq6.js";import{n as m,t as h}from"./styles-CX2j92ex.js";import{t as re}from"./merge-bindings-BtqW3UgP.js";import{t as g}from"./machine-CNnHDbyo.js";import{i as ie}from"./focus-scope-DtaPVNl5.js";import{t as ae}from"./semantic-observer-CIoriWtV.js";import{n as oe,t as _}from"./capability-resizable-ByUbMIHF.js";var se=(e,t)=>{let n=getComputedStyle(e).getPropertyValue(`--breakpoint-${t}`),r=Number.parseFloat(n);return Number.isFinite(r)?r:1/0},v=[`horizontal`,`vertical`],y=[`div`,`section`,`aside`,`main`,`nav`],b=[`1`,`2`,`3`,`4`,`5`,`6`,`fill`],x=[`none`,`start`,`end`],ce=[`toggle`,`expand`,`collapse`],le={id:l.default(`ui-panels`),orientation:u(v,`horizontal`),persist:d,divider:d.default(!0),class:l},ue={id:l,as:u(y,`section`),size:u(b,`fill`),resize:u(x,`none`),collapsible:d,defaultCollapsed:d,class:l},S={target:l,action:u(ce,`toggle`),icon:l.default(`menu`),label:l.default(`Expand`),class:l},de=[f({name:`opening`,state:`changing`,projectEach:e=>e.context.change.openingIds.map(e=>({panelId:e})),onDone:`CHANGE_DONE`,onError:`CHANGE_ERROR`,sends:{expand:e=>({type:`EXPAND`,panelId:e}),collapse:e=>({type:`COLLAPSE`,panelId:e}),toggle:e=>({type:`TOGGLE`,panelId:e})}}),f({name:`closing`,state:`changing`,projectEach:e=>e.context.change.closingIds.map(e=>({panelId:e})),onDone:`CHANGE_DONE`,onError:`CHANGE_ERROR`,sends:{expand:e=>({type:`EXPAND`,panelId:e}),collapse:e=>({type:`COLLAPSE`,panelId:e}),toggle:e=>({type:`TOGGLE`,panelId:e})}}),f({name:`sizing`,state:`sizing`,projectEach:e=>e.context.sizing.changes,onDone:`SIZE_DONE`,onError:`SIZE_ERROR`}),f({name:`persisting`,state:`persisting`,project:e=>({groupId:e.props.id,collapsed:[...e.context.layout.collapsedIds],sizes:{...e.context.layout.committedSizes}}),onDone:`PERSIST_DONE`,onError:`PERSIST_ERROR`})],C=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],w=e=>typeof e.panelId==`string`?e.panelId:``,T=e=>typeof e==`number`&&Number.isFinite(e)?e:null,E=e=>(Array.isArray(e.changes)?e.changes:[e]).flatMap(e=>{if(typeof e!=`object`||!e)return[];let t=e,n=typeof t.panelId==`string`?t.panelId:``,r=T(t.from),i=T(t.to),a=t.reset===!0;return n&&r!==null&&i!==null&&(r!==i||a)?[{panelId:n,from:r,to:i,...a?{reset:!0}:{}}]:[]}),D=(e,t)=>typeof e.props==`object`&&e.props!==null?e.props:t,O=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),k=e=>{if(!Array.isArray(e))return[];let t=[];return e.forEach(e=>{if(typeof e!=`object`||!e)return;let n=e;if(typeof n.id!=`string`||!n.id)return;let r=n.collapsible===!0?{collapsible:!0,defaultCollapsed:n.defaultCollapsed===!0}:{collapsible:!1,defaultCollapsed:!1};n.kind===`fill`&&t.push({id:n.id,kind:`fill`,...r}),n.kind===`bounded`&&t.push({id:n.id,kind:`bounded`,resizable:n.resizable===!0,...r})}),t},A=e=>new Map(e.map(e=>[e.id,e])),j=(e,t)=>Object.fromEntries(e.flatMap(e=>e.kind===`bounded`&&Object.hasOwn(t,e.id)?[[e.id,t[e.id]]]:[])),M=e=>{let t=w(e.event),n=e.context.layout.collapsedIds,r=e.context.collection,i=A(r).get(t);switch(e.event.type){case`COLLAPSE`:return i?.collapsible&&!n.includes(t)?r.map(e=>e.id).filter(e=>n.includes(e)||e===t):n;case`EXPAND`:return n.filter(e=>e!==t);case`TOGGLE`:return i?.collapsible?n.includes(t)?n.filter(e=>e!==t):r.map(e=>e.id).filter(e=>n.includes(e)||e===t):n;default:return n}},N=e=>{let t=w(e.event);return A(e.context.collection).has(t)&&!O(e.context.layout.collapsedIds,M(e))},P=e=>{let t=w(e.event),n=A(e.context.collection).get(t);return n?.kind===`bounded`&&n.resizable&&!e.context.layout.collapsedIds.includes(t)&&T(e.event.size)!==null},F=e=>{let t=E(e.event),n=A(e.context.collection);return t.length>0&&t.every(({panelId:t})=>n.get(t)?.kind===`bounded`&&!e.context.layout.collapsedIds.includes(t))},I=e=>{let t=E(e.event),n=A(e.context.collection);return t.length>0&&t.every(({panelId:t})=>n.get(t)?.kind===`bounded`&&e.context.layout.collapsedIds.includes(t))},L=e=>{let t=C(e.event.ids),n=A(e.context.collection);return t.length>0&&t.every(t=>n.get(t)?.kind===`bounded`&&e.context.layout.collapsedIds.includes(t)&&Object.hasOwn(e.context.layout.committedSizes,t))},R=e=>{let t=E(e.event),n={...e.context.layout.committedSizes};return t.forEach(({panelId:e,to:t,reset:r})=>{r?delete n[e]:n[e]=t}),{context:{...e.context,layout:{...e.context.layout,committedSizes:j(e.context.collection,n)},sizing:{changes:t}}}},z=e=>{let t=E(e.event),n={...e.context.layout.committedSizes,...Object.fromEntries(t.map(({panelId:e,to:t})=>[e,t]))};return{context:{...e.context,layout:{...e.context.layout,committedSizes:j(e.context.collection,n)}}}},fe=e=>{let t={...e.context.layout.committedSizes};return C(e.event.ids).forEach(e=>delete t[e]),{context:{...e.context,layout:{...e.context.layout,committedSizes:j(e.context.collection,t)}}}},B=e=>{let t=M(e),n=e.context.layout.collapsedIds;return{context:{...e.context,layout:{...e.context.layout,collapsedIds:t},change:{openingIds:n.filter(e=>!t.includes(e)),closingIds:t.filter(e=>!n.includes(e))}}}},V=e=>{let t=k(e.event.collection),n=A(e.context.collection),r=t.filter(t=>(e.context.layout.collapsedIds.includes(t.id)||!n.has(t.id)&&t.defaultCollapsed)&&t.collapsible).map(e=>e.id),i=j(t,e.context.layout.committedSizes),a=A(t).get(e.context.resize.activeId),o=a?.kind===`bounded`&&a.resizable;return{context:{...e.context,collection:t,layout:{collapsedIds:r,committedSizes:i},resize:o?e.context.resize:{activeId:``,initialSize:null,previewSize:null}}}},H=e=>{let t=A(k(e.event.collection)).get(e.context.resize.activeId);return t?.kind!==`bounded`||!t.resizable},pe=({props:e,context:t,effects:n})=>g({initial:`stable`,on:{DOM_INVALIDATED:{effects:`sync`}},states:{stable:{tags:[`stable`],on:{COLLAPSE:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},EXPAND:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},SIZE:{target:`sizing`,guard:F,reduce:R,effects:`prepareSizing`},RESTORE_HIDDEN_SIZES:{guard:I,reduce:z},RESET_HIDDEN_SIZES:{target:`persisting`,guard:L,reduce:fe,effects:[`sync`,`persist`]},RESIZE_START:{target:`resizing`,guard:P,reduce:`startResize`,effects:`beginResize`},PANELS_CHANGED:{reduce:V,effects:`sync`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}},changing:{tags:[`changing`,`transitioning`],on:{CHANGE_DONE:{target:`persisting`,effects:[`finishChange`,`persist`]},CHANGE_ERROR:{target:`persisting`,effects:[`finishChange`,`persist`]},COLLAPSE:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},EXPAND:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},PANELS_CHANGED:{reduce:V,effects:`sync`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}},sizing:{tags:[`sizing`,`transitioning`],on:{SIZE_DONE:{target:`persisting`,effects:[`finishSizing`,`persist`]},SIZE_ERROR:{target:`persisting`,effects:[`finishSizing`,`persist`]},SIZE:{target:`sizing`,guard:F,reduce:R,effects:`prepareSizing`},RESIZE_START:{target:`resizing`,guard:P,reduce:`startResize`,effects:`beginResize`},PANELS_CHANGED:{reduce:V,effects:`sync`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}},resizing:{tags:[`resizing`],on:{RESIZE:{guard:`activeResize`,reduce:`previewResize`,effects:`previewResize`},RESIZE_END:{target:`persisting`,guard:`activeResize`,reduce:`commitResize`,effects:[`commitResize`,`persist`]},RESIZE_CANCEL:{target:`stable`,reduce:`clearResize`,effects:`cancelResize`},PANELS_CHANGED:[{target:`stable`,guard:H,reduce:V,effects:[`cancelResize`,`sync`]},{reduce:V,effects:`sync`}],PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}},persisting:{tags:[`persisting`],on:{PERSIST_DONE:`stable`,PERSIST_ERROR:`stable`,COLLAPSE:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},EXPAND:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},TOGGLE:{target:`changing`,guard:N,reduce:B,effects:`prepareChange`},SIZE:{target:`sizing`,guard:F,reduce:R,effects:`prepareSizing`},PANELS_CHANGED:{reduce:V,effects:`sync`},PROPS_CHANGED:{reduce:`replaceProps`,effects:`sync`}}}}},{props:e,context:t,reducers:{replaceProps:e=>({props:D(e.event,e.props)}),startResize:e=>{let t=T(e.event.size);return{context:{...e.context,resize:{activeId:w(e.event),initialSize:t,previewSize:t}}}},previewResize:e=>({context:{...e.context,resize:{...e.context.resize,previewSize:T(e.event.size)}}}),commitResize:e=>{let t=w(e.event),n=T(e.event.size);if(n!==null)return{context:{...e.context,layout:{...e.context.layout,committedSizes:j(e.context.collection,{...e.context.layout.committedSizes,[t]:n})},resize:{activeId:``,initialSize:null,previewSize:null}}}},clearResize:e=>({context:{...e.context,resize:{activeId:``,initialSize:null,previewSize:null}}})},guards:{activeResize:e=>w(e.event)===e.context.resize.activeId&&T(e.event.size)!==null},effects:{prepareChange:n.prepareChange,finishChange:n.finishChange,sync:n.sync,beginResize:n.beginResize,previewResize:n.previewResize,commitResize:n.commitResize,cancelResize:n.cancelResize,prepareSizing:n.prepareSizing,finishSizing:n.finishSizing,persist:n.persist}}),U=h({definition:{component:`ui.panels`,parts:{root:{base:`relative flex h-full min-h-0 w-full min-w-0`,variants:{orientation:{horizontal:`flex-row`,vertical:`flex-col`}},defaults:{orientation:`horizontal`}},panel:{base:`relative min-w-0 overflow-hidden`,variants:{orientation:{horizontal:`h-full`,vertical:`w-full`},divider:{true:``,false:``},resize:{none:``,start:``,end:``}},defaults:{orientation:`horizontal`,divider:!0,resize:`none`}},expanded:{base:`h-full min-h-0 w-full min-w-0`},collapsed:{base:`flex h-full min-h-0 w-full min-w-0 items-center justify-center overflow-hidden`},resizeHandle:{base:[`absolute z-20 touch-none border-transparent outline-none`,`hover:border-intent-neutral-edge-hover focus-visible:ui-focus-ring-inset`,`data-resizing:border-intent-neutral-edge-strong`],variants:{orientation:{horizontal:`inset-y-0 w-panel-resize-handle cursor-col-resize`,vertical:`inset-x-0 h-panel-resize-handle cursor-row-resize`},edge:{start:``,end:``}},defaults:{orientation:`horizontal`,edge:`end`}},toggle:{base:`inline-flex size-control-md items-center justify-center outline-none focus-visible:ui-focus-ring-inset`},toggleIcon:{base:`size-icon-md shrink-0`}}}}),W=new Set,G=e=>e instanceof CustomEvent&&e.detail&&typeof e.detail==`object`?e.detail:{},me=(()=>{let e=!1;return()=>{if(e||typeof document>`u`)return;let t=e=>t=>{let n=G(t);!n.__panelsNotification&&n.panelId&&W.forEach(t=>{n.groupId&&n.groupId!==t.id||t.hasPanel(n.panelId)&&t.perform(n.action??e,n.panelId,n.trigger)})};document.addEventListener(`ui:panel-collapse`,t(`collapse`)),document.addEventListener(`ui:panel-expand`,t(`expand`)),document.addEventListener(`ui:panel-toggle`,t(`toggle`)),document.addEventListener(`ui:panel-size`,e=>{let t=G(e);!t.__panelsNotification&&t.panelId&&Number.isFinite(t.size)&&W.forEach(e=>{t.groupId&&t.groupId!==e.id||e.hasPanel(t.panelId)&&e.resize(t.panelId,t.size)})}),document.addEventListener(`ui:panels-reset`,e=>{let t=G(e);t.__panelsNotification||W.forEach(e=>{t.groupId&&t.groupId!==e.id||(!t.panelId||e.hasPanel(t.panelId))&&e.reset(t.panelId)})}),e=!0}})(),he=e=>`trellis-ui:panels:${e}:v1`,ge=e=>typeof e!=`object`||!e||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[1]==`number`&&Number.isFinite(e[1]))),K=()=>{let o=null,l=null,u=null,d=`wide`,f,p=null,h=new Set,g=new Set,_=new Map,v=new Map,y=new Map,b=new Map,x=()=>{if(!o)throw Error(`Panels has not been initialized.`);return o},ce=e=>e.closest(`[data-ui-panels]`)===x(),S=()=>Array.from(x().children).flatMap(e=>{if(!(e instanceof HTMLElement)||!e.hasAttribute(`data-ui-panel`))return[];let t=e.querySelector(`:scope > [data-ui-panel-expanded]`);return!t||!ce(t)?[]:[{panel:e,expanded:t,collapsed:e.querySelector(`:scope > [data-ui-panel-collapsed]`),handle:e.querySelector(`:scope > [data-ui-panel-resize-handle]`),props:c({el:e,schema:ue})}]}),C=e=>S().find(t=>t.props.id===e)??null,w=()=>Q.getCommittedSnapshot().context,T=()=>Q.getCommittedSnapshot().props,E=e=>w().layout.collapsedIds.includes(e),D=()=>T().orientation===`horizontal`&&d===`stacked`,O=()=>D()?`vertical`:T().orientation,k=()=>x().dataset.orientation===`vertical`?`vertical`:`horizontal`,A=e=>{let t=e.getBoundingClientRect();return k()===`horizontal`?t.width:t.height},j=()=>{let e=S(),t=e.map(({props:e})=>e.id);if(t.some(e=>!e))throw Error(`Every Panel requires a stable id.`);if(new Set(t).size!==t.length)throw Error(`Panel ids must be unique within a Panels group.`);if(e.length>0&&!e.some(({props:e})=>e.size===`fill`))throw Error(`A Panels group requires at least one size="fill" Panel.`);if(e.some(({props:e})=>e.size===`fill`&&e.resize!==`none`))throw Error(`A size="fill" Panel cannot own a resize handle.`);return e.map(({props:e})=>{let t=e.collapsible?{collapsible:!0,defaultCollapsed:e.defaultCollapsed}:{collapsible:!1,defaultCollapsed:!1};return e.size===`fill`?{id:e.id,kind:`fill`,...t}:{id:e.id,kind:`bounded`,resizable:e.resize!==`none`,...t}})},M=e=>{let t=document.createElement(`div`);t.style.cssText=`position:absolute;visibility:hidden;pointer-events:none;inset:0 auto auto 0;`,k()===`horizontal`?t.style.width=`var(${e})`:t.style.height=`var(${e})`,x().append(t);let n=A(t);return t.remove(),n},N=e=>e.props.size===`fill`?{minimum:0,maximum:1/0}:{minimum:M(`--spacing-panel-${e.props.size}-min`),maximum:M(`--spacing-panel-${e.props.size}-max`)},P=(e,t)=>{let{minimum:n,maximum:r}=N(e);return Math.min(r,Math.max(n,t))},F=()=>{let e=j();return{collection:e,layout:{collapsedIds:e.filter(e=>e.defaultCollapsed).map(({id:e})=>e),committedSizes:{}},change:{openingIds:[],closingIds:[]},resize:{activeId:``,initialSize:null,previewSize:null},sizing:{changes:[]}}},I=(e,t,n)=>{k()===`horizontal`?(e.style.minWidth=t,e.style.maxWidth=n,e.style.minHeight=``,e.style.maxHeight=``):(e.style.minHeight=t,e.style.maxHeight=n,e.style.minWidth=``,e.style.maxWidth=``)},L=e=>{e.style.flex=``,e.style.minWidth=``,e.style.maxWidth=``,e.style.minHeight=``,e.style.maxHeight=``},R=(e,t)=>{if(D()){L(e.panel);return}if(t!==void 0){e.panel.style.flex=`0 0 ${t}px`,I(e.panel,`0px`,`none`);return}if(E(e.props.id)){if(w().collection.find(({id:t})=>t===e.props.id)?.defaultCollapsed){L(e.panel);return}let t=e.collapsed?`var(--spacing-panel-collapsed)`:`0px`;e.panel.style.flex=`0 0 ${t}`,I(e.panel,t,t);return}if(e.props.size===`fill`){L(e.panel);return}let n=w().resize.activeId===e.props.id?w().resize.previewSize:w().layout.committedSizes[e.props.id];if(n==null){L(e.panel);return}let r=`${P(e,n)}px`;e.panel.style.flex=`0 1 ${r}`,I(e.panel,`var(--spacing-panel-${e.props.size}-min)`,`var(--spacing-panel-${e.props.size}-max)`)},z=(e,t)=>{e.toggleAttribute(`inert`,t),e.setAttribute(`aria-hidden`,t?`true`:`false`)},fe=e=>{let t=T(),r=O(),i=E(e.props.id),a=Q.hasTag(`changing`)&&w().change.openingIds.includes(e.props.id),o=Q.hasTag(`changing`)&&w().change.closingIds.includes(e.props.id),s=!(i&&!o),c=i&&!o&&!a&&e.collapsed!==null;if(e.panel.dataset.state=i?`collapsed`:`expanded`,e.panel.dataset.orientation=r,e.panel.dataset.size=e.props.size,e.panel.dataset.resize=e.props.resize,e.panel.className=m({part:U.parts.panel,props:{orientation:r,divider:t.divider,resize:e.props.resize},className:e.props.class}),n({el:e.panel,attr:`data-collapsible`,present:e.props.collapsible}),n({el:e.panel,attr:`data-resizing`,present:w().resize.activeId===e.props.id}),R(e),e.expanded.hidden=!s,z(e.expanded,!s),e.collapsed&&(e.collapsed.hidden=!c,z(e.collapsed,!c)),e.handle){let t=D()||i||e.props.size===`fill`||e.props.resize===`none`;e.handle.dataset.orientation=r,e.handle.dataset.resizeEdge=e.props.resize,e.handle.setAttribute(`aria-label`,`Resize ${e.props.id} panel`),e.handle.toggleAttribute(`data-resize-disabled`,t),e.handle.hidden=D(),e.handle.className=m({part:U.parts.resizeHandle,props:{orientation:r,edge:e.props.resize},className:e.handle.dataset.class??``})}},B=e=>{e.forEach((t,r)=>{let i=e[r+1],a=t.props.resize===`end`||i?.props.resize===`start`;s(t.panel,`data-divider`),n({el:t.panel,attr:`data-divider`,present:T().divider&&i!==void 0&&!a})})},V=e=>{let t=e.dataset.target||``;if(!t){let t=e.closest(`[data-ui-panel]`),n=t?.closest(`[data-ui-panels]`),r=[...W].find(e=>e.id===n?.id),i=t&&r===$?C(t.id):null;return i&&r?{record:i,controller:r}:null}let n=e.dataset.groupId||e.closest(`[data-ui-panels]`)?.id,r=[...W].filter(e=>!n||e.id===n).find(e=>e.hasPanel(t)),i=r===$?C(t):null;return i&&r?{record:i,controller:r}:null},H=()=>{document.querySelectorAll(`[data-ui-panel-toggle]`).forEach(e=>{let t=V(e);if(!t||t.controller!==$)return;let n=E(t.record.props.id);e.dataset.target=t.record.props.id,e.dataset.groupId=T().id,e.dataset.state=n?`collapsed`:`expanded`,e.setAttribute(`aria-controls`,t.record.panel.id),e.setAttribute(`aria-expanded`,n?`false`:`true`),e.toggleAttribute(`disabled`,!t.record.props.collapsible)})},G=()=>{let e=T(),t=O();x().dataset.responsiveMode=d,x().dataset.layoutOrientation=t,x().style.flexDirection=t===`horizontal`?`row`:`column`,x().className=m({part:U.parts.root,props:{...e,orientation:t},className:e.class}),n({el:x(),attr:`data-resizing`,present:Q.hasTag(`resizing`)}),n({el:x(),attr:`data-transitioning`,present:Q.hasTag(`transitioning`)});let r=S();r.forEach(fe),B(r),H()},K=(e,t=!1)=>{let n=document.activeElement;if(!t&&(!(n instanceof HTMLElement)||!e.collapsed?.contains(n)))return;let r=y.get(e.props.id);r?.isConnected&&e.expanded.contains(r)?r.focus({preventScroll:!0}):(e.expanded.tabIndex=-1,e.expanded.focus({preventScroll:!0}))},q=(e,t=!1)=>{let n=document.activeElement;if(!t&&(!(n instanceof HTMLElement)||!e.expanded.contains(n)))return;let r=e.collapsed?ie(e.collapsed)[0]:void 0,i=b.get(e.props.id),a=i?.isConnected&&!e.panel.contains(i)?i:void 0;r?r.focus({preventScroll:!0}):a?a.focus({preventScroll:!0}):(x().tabIndex=-1,x().focus({preventScroll:!0}))},_e=()=>{let e=[...w().change.openingIds,...w().change.closingIds],t=new Set(w().change.openingIds.filter(e=>{let t=C(e),n=document.activeElement;return t!==null&&t.collapsed!==null&&n instanceof HTMLElement&&t.collapsed.contains(n)})),n=new Map(e.flatMap(e=>{let t=C(e);if(!t)return[];if(w().change.closingIds.includes(e)){let n=document.activeElement;n instanceof HTMLElement&&t.expanded.contains(n)&&y.set(e,n)}return[[e,A(t.panel)]]}));G(),w().change.openingIds.forEach(e=>{let n=C(e);n&&K(n,t.has(e))}),e.forEach(e=>{let t=C(e),r=n.get(e);if(!t||r===void 0)return;let i=A(t.panel);v.set(e,{from:r,to:i}),R(t,r)})},J=()=>{let e=[...w().change.openingIds],t=[...w().change.closingIds],n=new Set(t.filter(e=>{let t=C(e),n=document.activeElement;return t!==null&&n instanceof HTMLElement&&t.expanded.contains(n)}));S().forEach(e=>R(e)),G(),t.forEach(e=>{let t=C(e);t&&q(t,n.has(e))}),e.forEach(e=>Y(`ui:panel-expand`,e)),t.forEach(e=>Y(`ui:panel-collapse`,e)),[...e,...t].forEach(e=>v.delete(e))},Y=(e,n,r={})=>{t({el:x(),name:e,detail:{groupId:T().id,panelId:n,__panelsNotification:!0,...r}})},ve=()=>{let e=w().layout;if(T().persist)try{localStorage.setItem(he(T().id),JSON.stringify({collapsed:e.collapsedIds,sizes:e.committedSizes}))}catch{}t({el:x(),name:`ui:panels-layout-change`,detail:{groupId:T().id,collapsed:[...e.collapsedIds],sizes:{...e.committedSizes},__panelsNotification:!0}})},X=e=>{if(!o)return;if(Q.hasTag(`stable`)){e();return}let t=window.setTimeout(()=>{h.delete(t),X(e)},16);h.add(t)},Z=(e,t)=>{let n=e.find(e=>t(e)!==E(e));n&&(Q.send({type:t(n)?`COLLAPSE`:`EXPAND`,panelId:n}),X(()=>Z(e,t)))},ye=()=>{if(!T().persist)return;let e;try{e=JSON.parse(localStorage.getItem(he(T().id))??`null`)}catch{return}if(typeof e!=`object`||!e)return;let t=j(),n=t.filter(e=>e.collapsible),r=new Set((Array.isArray(e.collapsed)?e.collapsed:[]).filter(e=>typeof e==`string`&&n.some(t=>t.id===e))),i=ge(e.sizes),a=()=>{Z(n.map(({id:e})=>e),e=>r.has(e))},o=()=>{let e=t.filter(e=>e.kind===`bounded`).flatMap(({id:e})=>{let t=C(e),n=i[e];if(!t||n===void 0)return[];let r=A(t.panel),a=P(t,n);return Math.abs(r-a)<.5?[]:[{panelId:e,from:r,to:a}]});if(D()){e.length>0&&Q.send({type:`RESTORE_HIDDEN_SIZES`,changes:e}),a();return}let n=e.filter(({panelId:e})=>E(e)),r=e.filter(({panelId:e})=>!E(e));if(n.length>0&&Q.send({type:`RESTORE_HIDDEN_SIZES`,changes:n}),r.length>0){Q.send({type:`SIZE`,changes:r}),X(a);return}a()},s=n.map(({id:e})=>e).filter(e=>E(e)&&!r.has(e));s.length>0?(Z(s,()=>!1),X(o)):o()},be=()=>{let e=requestAnimationFrame(()=>{g.delete(e);let t=requestAnimationFrame(()=>{g.delete(t),ye()});g.add(t)});g.add(e)},xe=e=>{let t=j(),n=e?t.filter(({id:t})=>t===e):t;if(n.length===0)return;let r=()=>{Z(n.filter(e=>e.collapsible).map(({id:e})=>e),e=>t.find(t=>t.id===e)?.defaultCollapsed===!0)},i=n.filter(e=>e.kind===`bounded`).map(({id:e})=>e).filter(e=>Object.hasOwn(w().layout.committedSizes,e));if(D()){i.length>0?(Q.send({type:`RESET_HIDDEN_SIZES`,ids:i}),X(r)):r();return}let a=i.filter(E);a.length>0&&Q.send({type:`RESET_HIDDEN_SIZES`,ids:a});let o=i.filter(e=>!E(e)).flatMap(e=>{let t=C(e);return!t||t.props.size===`fill`?[]:[{panelId:e,from:A(t.panel),to:M(`--spacing-panel-${t.props.size}`),reset:!0}]});if(o.length>0){Q.send({type:`SIZE`,changes:o}),X(r);return}r()},Se=()=>{w().sizing.changes.forEach(({panelId:e,from:t})=>{let n=C(e);n&&R(n,t)})},Ce=()=>{w().sizing.changes.forEach(({panelId:e,to:t})=>{let n=C(e);n&&(R(n),Y(`ui:panel-resize-end`,e,{size:t}))}),G()},we=t=>{if(O()===`vertical`)return t===`start`?`negative`:`positive`;let n=e({el:x()});return t===`start`?n?`positive`:`negative`:n?`negative`:`positive`},Te=()=>{let e=p;if(!e)return;let t=new Set(S().map(({panel:e})=>e));_.forEach((e,n)=>{t.has(n)||(e.run(),_.delete(n))}),S().forEach(t=>{if(_.has(t.panel)||!t.handle||t.props.size===`fill`||t.props.resize===`none`)return;let n=N(t),r=M(`--spacing-panel-resize-handle`),i=M(`--spacing-panel-resize-handle-coarse`),a=new te;e.addChild(a),a.add(oe({element:t.panel,handle:t.handle,axis:O()===`horizontal`?`x`:`y`,direction:we(t.props.resize),min:n.minimum,max:n.maximum,mode:`onChange`,hitArea:r,coarseHitArea:i,disabled:()=>D()||E(t.props.id),onStart:e=>Q.send({type:`RESIZE_START`,panelId:t.props.id,size:De(e)}),onResize:e=>Q.send({type:`RESIZE`,panelId:t.props.id,size:De(e)}),onEnd:e=>Q.send({type:`RESIZE_END`,panelId:t.props.id,size:De(e)})})),_.set(t.panel,a)})},Ee=()=>{p?.run(),_.clear(),p=new te,f.addChild(p),Te()},De=e=>O()===`horizontal`?e.previewWidth:e.previewHeight,Oe=e=>{let t=T().orientation===`horizontal`&&e<se(x(),`sm`)?`stacked`:`wide`;t!==d&&(d=t,G(),Ee())},Q=ee({schema:le,hooks:de,resolveTransitionElement:({data:e})=>{let t=e?.panelId;return t?C(t)?.panel??null:x()},createMachine:({props:e})=>pe({props:e,context:F(),effects:{prepareChange:_e,finishChange:J,sync:()=>{G(),Ee()},beginResize:()=>{G()},previewResize:()=>{let e=w().resize.activeId,t=C(e);t&&R(t);let n=w().resize.previewSize;n!==null&&Y(`ui:panel-resize`,e,{size:n})},commitResize:e=>{G();let t=typeof e.event.panelId==`string`?e.event.panelId:``,n=w().layout.committedSizes[t];t&&n!==void 0&&Y(`ui:panel-resize-end`,t,{size:n})},cancelResize:G,prepareSizing:Se,finishSizing:Ce,persist:ve}})}),ke=()=>{let e=j();Q.send({type:`PANELS_CHANGED`,collection:e}),Te()},Ae=()=>{l=ae({targets:x(),read:j,onChange:ke,observer:{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`id`,`data-size`,`data-resize`,`data-collapsible`,`data-default-collapsed`]}})},$;return $={...Q,get id(){return x().id||T().id},get orientation(){return O()},get collapsed(){return[...w().layout.collapsedIds]},get sizes(){return{...w().layout.committedSizes}},get root(){let e=this.snapshot.current?.props??T();return re({inputs:[m({part:U.parts.root,props:e,className:e.class}),{"data-ui-panels":``}]})},init(){f=ne(this),p=new te,f.addChild(p),o=this.$el,Q.connect(this.$el,this.snapshot),x().id||=T().id,d=T().orientation===`horizontal`&&x().getBoundingClientRect().width<se(x(),`sm`)?`stacked`:`wide`,W.add($),me(),G(),Te(),u=new ResizeObserver(e=>{Oe(e[0]?.contentRect.width??x().clientWidth)}),u.observe(x()),Ae(),T().persist&&be(),r({target:x(),event:`keydown`,handler:()=>H(),cleanup:f})},destroy(){W.delete($),l?.(),l=null,u?.disconnect(),u=null,_.clear(),p=null,h.forEach(e=>window.clearTimeout(e)),h.clear(),g.forEach(e=>cancelAnimationFrame(e)),g.clear(),Q.disconnect(),o=null},transitionPanel(e){let t=e.data.panelId,n=C(t),r=v.get(t);return!n||!r||r.from===r.to?(n&&R(n,r?.to),i()):a(e,{target:n.panel,keyframes:{flexBasis:[`${r.from}px`,`${r.to}px`]},role:`layout`,cleanup:()=>R(n)})},transitionPanelSize(e){let{panelId:t,from:n,to:r}=e.data,o=C(t);return!o||n===r?(o&&R(o),i()):a(e,{target:o.panel,keyframes:{flexBasis:[`${n}px`,`${r}px`]},role:`layoutQuick`,cleanup:()=>R(o)})},hasPanel(e){return C(e)!==null},isCollapsed:E,collapse(e){Q.send({type:`COLLAPSE`,panelId:e})},expand(e){Q.send({type:`EXPAND`,panelId:e})},toggle(e){Q.send({type:`TOGGLE`,panelId:e})},resize(e,t){let n=C(e);if(D()||!n||n.props.size===`fill`||E(e)||!Number.isFinite(t))return;let r=A(n.panel),i=P(n,t);Math.abs(r-i)<.5||Q.send({type:`SIZE`,panelId:e,from:r,to:i})},reset(e){xe(e)},perform(e,t,n){n&&b.set(t,n),{collapse:this.collapse,expand:this.expand,toggle:this.toggle}[e](t)},syncToggles:H},$},q=()=>{let e={};return{get props(){return e},init(){e=c({el:this.$el,schema:S})},destroy(){},get root(){return re({inputs:[m({part:U.parts.toggle,props:{},className:e.class}),{"data-ui-panel-toggle":``,":data-target":()=>e.target||void 0,":data-action":()=>e.action,"@click":e=>this.trigger(e)}]})},trigger(t){t?.preventDefault();let n=this.$el,r=n.closest(`[data-ui-panel]`),i=r?.closest(`[data-ui-panels]`),a=e.target||r?.id||``;a&&document.dispatchEvent(new CustomEvent(`ui:panel-toggle`,{detail:{panelId:a,groupId:i?.id,action:e.action,trigger:n}}))}}},_e=e=>{p(`UiPanels`,K)(e),p(`UiPanelToggle`,q)(e)},J=new WeakSet,Y=e=>{J.has(e)||(J.add(e),o(e),_(e),_e(e))};export{q as n,K as r,Y as t};
2
- //# sourceMappingURL=entry.generated-B41qiwNq.js.map