@vireo-ai/trellis-ui 0.1.61 → 0.1.63

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 (537) hide show
  1. package/THIRD_PARTY_NOTICES.md +9 -0
  2. package/package.json +15 -35
  3. package/packages/client/skills/compose-trellis-ui/SKILL.md +84 -0
  4. package/packages/client/skills/compose-trellis-ui/references/project-ui.md +40 -0
  5. package/packages/client/src/components/accordion/styles.css +21 -9
  6. package/packages/client/src/components/badge/styles.css +12 -0
  7. package/packages/client/src/components/button/styles.css +31 -5
  8. package/packages/client/src/components/card/styles.css +16 -0
  9. package/packages/client/src/components/checkbox/styles.css +29 -5
  10. package/packages/client/src/components/date-picker/styles.css +22 -17
  11. package/packages/client/src/components/field/styles.css +16 -16
  12. package/packages/client/src/components/input/styles.css +1 -0
  13. package/packages/client/src/components/keybinding/styles.css +9 -2
  14. package/packages/client/src/components/menu/styles.css +13 -0
  15. package/packages/client/src/components/panels/styles.css +12 -2
  16. package/packages/client/src/components/scroll-area/styles.css +169 -2
  17. package/packages/client/src/components/select/styles.css +28 -8
  18. package/packages/client/src/components/sidebar/styles.css +218 -0
  19. package/packages/client/src/components/slider/styles.css +57 -0
  20. package/packages/client/src/components/tabs/styles.css +26 -24
  21. package/packages/client/src/components/toast/styles.css +31 -0
  22. package/packages/client/src/directives/sortable.css +5 -0
  23. package/packages/client/src/runtime/drag-and-drop/resize-handle.css +2 -2
  24. package/packages/client/src/styles/components.css +8 -4
  25. package/packages/client/src/styles/fonts/fira-code/5.3.0/LICENSE +93 -0
  26. package/packages/client/src/styles/fonts/fira-code/5.3.0/download.json +47 -0
  27. package/packages/client/src/styles/fonts/fira-code/5.3.0/fira-code-cyrillic-ext-wght-normal.woff2 +0 -0
  28. package/packages/client/src/styles/fonts/fira-code/5.3.0/fira-code-cyrillic-wght-normal.woff2 +0 -0
  29. package/packages/client/src/styles/fonts/fira-code/5.3.0/fira-code-greek-ext-wght-normal.woff2 +0 -0
  30. package/packages/client/src/styles/fonts/fira-code/5.3.0/fira-code-greek-wght-normal.woff2 +0 -0
  31. package/packages/client/src/styles/fonts/fira-code/5.3.0/fira-code-latin-ext-wght-normal.woff2 +0 -0
  32. package/packages/client/src/styles/fonts/fira-code/5.3.0/fira-code-latin-wght-normal.woff2 +0 -0
  33. package/packages/client/src/styles/fonts/fira-code/5.3.0/fira-code-symbols2-wght-normal.woff2 +0 -0
  34. package/packages/client/src/styles/fonts/fira-code/5.3.0/font.css +62 -0
  35. package/packages/client/src/styles/fonts/fira-code/5.3.0/resource.json +82 -0
  36. package/packages/client/src/styles/fonts/inter/5.3.0/LICENSE +93 -0
  37. package/packages/client/src/styles/fonts/inter/5.3.0/download.json +47 -0
  38. package/packages/client/src/styles/fonts/inter/5.3.0/font.css +62 -0
  39. package/packages/client/src/styles/fonts/inter/5.3.0/inter-cyrillic-ext-standard-normal.woff2 +0 -0
  40. package/packages/client/src/styles/fonts/inter/5.3.0/inter-cyrillic-standard-normal.woff2 +0 -0
  41. package/packages/client/src/styles/fonts/inter/5.3.0/inter-greek-ext-standard-normal.woff2 +0 -0
  42. package/packages/client/src/styles/fonts/inter/5.3.0/inter-greek-standard-normal.woff2 +0 -0
  43. package/packages/client/src/styles/fonts/inter/5.3.0/inter-latin-ext-standard-normal.woff2 +0 -0
  44. package/packages/client/src/styles/fonts/inter/5.3.0/inter-latin-standard-normal.woff2 +0 -0
  45. package/packages/client/src/styles/fonts/inter/5.3.0/inter-vietnamese-standard-normal.woff2 +0 -0
  46. package/packages/client/src/styles/fonts/inter/5.3.0/resource.json +82 -0
  47. package/packages/client/src/styles/generated/theme-fonts.css +3 -3
  48. package/packages/client/src/styles/generated/theme-palette.css +1001 -634
  49. package/packages/client/src/styles/generated/theme-runtime.css +938 -607
  50. package/packages/client/src/styles/generated-sources.css +1 -1
  51. package/packages/client/src/styles/layout.css +88 -0
  52. package/packages/client/src/styles/recipes/action.css +4 -16
  53. package/packages/client/src/styles/recipes/disabled.css +8 -0
  54. package/packages/client/src/styles/recipes/option.css +0 -44
  55. package/packages/client/src/styles/recipes/selection.css +28 -39
  56. package/packages/client/src/styles/theme-support.css +26 -42
  57. package/packages/client/src/styles/typography.css +26 -0
  58. package/packages/client/types/assets/bridge.d.ts +1 -2
  59. package/packages/client/types/capabilities/collection.d.ts +7 -0
  60. package/packages/client/types/capabilities/collection.entry.generated.d.ts +3 -0
  61. package/packages/client/types/capabilities/shortcut.d.ts +4 -3
  62. package/packages/client/types/components/accordion/machine.d.ts +4 -4
  63. package/packages/client/types/components/app/contract.d.ts +5 -5
  64. package/packages/client/types/components/badge/contract.d.ts +1 -0
  65. package/packages/client/types/components/box/contract.d.ts +17 -12
  66. package/packages/client/types/components/box/index.d.ts +1 -1
  67. package/packages/client/types/components/button/contract.d.ts +3 -2
  68. package/packages/client/types/components/card/contract.d.ts +27 -16
  69. package/packages/client/types/components/checkbox/contract.d.ts +13 -13
  70. package/packages/client/types/components/common.d.ts +13 -11
  71. package/packages/client/types/components/container/contract.d.ts +4 -3
  72. package/packages/client/types/components/data-grid/contract.d.ts +3 -2
  73. package/packages/client/types/components/date-picker/contract.d.ts +2 -2
  74. package/packages/client/types/components/date-picker/machine.d.ts +11 -11
  75. package/packages/client/types/components/dropdown/contract.d.ts +1 -1
  76. package/packages/client/types/components/dropdown/machine.d.ts +5 -3
  77. package/packages/client/types/components/field/contract.d.ts +4 -4
  78. package/packages/client/types/components/file-upload/contract.d.ts +3 -3
  79. package/packages/client/types/components/file-upload/machine.d.ts +4 -4
  80. package/packages/client/types/components/flex/contract.d.ts +10 -8
  81. package/packages/client/types/components/frame/contract.d.ts +14 -11
  82. package/packages/client/types/components/grid/contract.d.ts +8 -7
  83. package/packages/client/types/components/image/contract.d.ts +1 -0
  84. package/packages/client/types/components/import-flow/contract.d.ts +1 -0
  85. package/packages/client/types/components/input/contract.d.ts +1 -0
  86. package/packages/client/types/components/input/machine.d.ts +2 -2
  87. package/packages/client/types/components/layout.d.ts +91 -35
  88. package/packages/client/types/components/menu/contract.d.ts +27 -10
  89. package/packages/client/types/components/modal/contract.d.ts +22 -5
  90. package/packages/client/types/components/panels/contract.d.ts +2 -2
  91. package/packages/client/types/components/panels/index.d.ts +2 -1
  92. package/packages/client/types/components/panels/machine.d.ts +9 -8
  93. package/packages/client/types/components/radio/contract.d.ts +8 -8
  94. package/packages/client/types/components/scroll-area/contract.d.ts +1 -20
  95. package/packages/client/types/components/section/contract.d.ts +4 -3
  96. package/packages/client/types/components/select/contract.d.ts +3 -3
  97. package/packages/client/types/components/select/machine.d.ts +13 -13
  98. package/packages/client/types/components/select/presentation.d.ts +1 -0
  99. package/packages/client/types/components/sidebar/contract.d.ts +26 -8
  100. package/packages/client/types/components/sidebar/groups.d.ts +4 -0
  101. package/packages/client/types/components/sidebar/index.d.ts +5 -4
  102. package/packages/client/types/components/slider/contract.d.ts +1 -0
  103. package/packages/client/types/components/slider/machine.d.ts +10 -5
  104. package/packages/client/types/components/stack/contract.d.ts +10 -8
  105. package/packages/client/types/components/switch/contract.d.ts +8 -8
  106. package/packages/client/types/components/table/contract.d.ts +6 -5
  107. package/packages/client/types/components/tabs/index.d.ts +2 -1
  108. package/packages/client/types/components/tabs/machine.d.ts +2 -2
  109. package/packages/client/types/components/textarea/contract.d.ts +1 -1
  110. package/packages/client/types/components/toast/machine.d.ts +2 -2
  111. package/packages/client/types/components/tooltip/contract.d.ts +13 -13
  112. package/packages/client/types/components/tooltip/machine.d.ts +3 -7
  113. package/packages/client/types/core.d.ts +3 -1
  114. package/packages/client/types/directives/anchor.d.ts +1 -0
  115. package/packages/client/types/directives/animate.d.ts +3 -0
  116. package/packages/client/types/directives/collection.d.ts +9 -0
  117. package/packages/client/types/directives/index.d.ts +2 -2
  118. package/packages/client/types/docs/transition-docs.d.ts +0 -2
  119. package/packages/client/types/motion/animate.d.ts +7 -2
  120. package/packages/client/types/motion/config.d.ts +118 -0
  121. package/packages/client/types/motion/feedback.d.ts +3 -0
  122. package/packages/client/types/motion/index.d.ts +8 -107
  123. package/packages/client/types/motion/layout.d.ts +25 -0
  124. package/packages/client/types/motion/lifecycle.d.ts +10 -0
  125. package/packages/client/types/motion/owned.d.ts +15 -4
  126. package/packages/client/types/motion/properties.d.ts +17 -0
  127. package/packages/client/types/motion/recipe.d.ts +8 -75
  128. package/packages/client/types/motion/reduced-motion.d.ts +7 -8
  129. package/packages/client/types/motion/registry.d.ts +37 -0
  130. package/packages/client/types/motion/resize-preview.d.ts +26 -0
  131. package/packages/client/types/motion/resize.d.ts +3 -1
  132. package/packages/client/types/motion/size.d.ts +7 -4
  133. package/packages/client/types/runtime/anchored-popover.d.ts +11 -2
  134. package/packages/client/types/runtime/collection-navigation.d.ts +12 -4
  135. package/packages/client/types/runtime/control-size.d.ts +4 -0
  136. package/packages/client/types/runtime/drag-and-drop/index.d.ts +10 -3
  137. package/packages/client/types/runtime/drag-and-drop/sortable/ghost.d.ts +2 -1
  138. package/packages/client/types/runtime/engine/fragment.d.ts +2 -1
  139. package/packages/client/types/runtime/engine/stream.d.ts +5 -9
  140. package/packages/client/types/runtime/focus.d.ts +3 -1
  141. package/packages/client/types/runtime/index.d.ts +2 -2
  142. package/packages/client/types/runtime/layout-participant.d.ts +10 -9
  143. package/packages/client/types/runtime/layout-task.d.ts +9 -0
  144. package/packages/client/types/runtime/morph-engine.d.ts +1 -0
  145. package/packages/client/types/runtime/option-data.d.ts +2 -1
  146. package/packages/client/types/runtime/preferences.d.ts +14 -0
  147. package/packages/client/types/runtime/scroll-area-schema.d.ts +23 -0
  148. package/packages/client/types/runtime/theme.d.ts +6 -4
  149. package/packages/client/types/runtime/ui.d.ts +5 -5
  150. package/packages/client/types/runtime/virtualizer-schema.d.ts +3 -1
  151. package/packages/client/types/runtime/virtualizer-size.d.ts +7 -0
  152. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/bridge-B7apK0M-.js +2 -0
  153. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/bridge-B7apK0M-.js.map +1 -0
  154. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/bridge.js +1 -1
  155. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/build-metadata.json +984 -1132
  156. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/{anchor-B-CbpFFU.js → anchor-DXCLxWw-.js} +2 -2
  157. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/{anchor-B-CbpFFU.js.map → anchor-DXCLxWw-.js.map} +1 -1
  158. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/anchor.js +2 -2
  159. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/collection-CSrnChwy.js +2 -0
  160. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/collection-CSrnChwy.js.map +1 -0
  161. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/collection.js +2 -0
  162. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/resizable-DlgeSL0c.js +2 -0
  163. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/{resizable-Ctqx_OoS.js.map → resizable-DlgeSL0c.js.map} +1 -1
  164. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/resizable.js +2 -2
  165. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut-Qa2EByIB.js +2 -0
  166. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/{shortcut-D2NgvMgw.js.map → shortcut-Qa2EByIB.js.map} +1 -1
  167. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut.js +2 -2
  168. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable-CgP1efhO.js +2 -0
  169. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/{sortable-CbIOS4Lm.js.map → sortable-CgP1efhO.js.map} +1 -1
  170. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js +2 -2
  171. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-anchor-BqejlBjS.js +2 -0
  172. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-anchor-BqejlBjS.js.map +1 -0
  173. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-resizable-DPMSJ1AR.js +2 -0
  174. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-resizable-DPMSJ1AR.js.map +1 -0
  175. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-BFvGIAs8.js +2 -0
  176. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-BFvGIAs8.js.map +1 -0
  177. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-CpUAUTdh.js +5 -0
  178. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-CpUAUTdh.js.map +1 -0
  179. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-et2se66r.js +2 -0
  180. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-et2se66r.js.map +1 -0
  181. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-DnEHZCqy.js +2 -0
  182. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-DnEHZCqy.js.map +1 -0
  183. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/control-size-BcDu1m1N.js +2 -0
  184. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/control-size-BcDu1m1N.js.map +1 -0
  185. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/controller-de7TruDm.js +2 -0
  186. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/controller-de7TruDm.js.map +1 -0
  187. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-DdiMUeJM.js +2 -0
  188. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-DdiMUeJM.js.map +1 -0
  189. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/dismissable-layer-MzcgNRti.js +2 -0
  190. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/dismissable-layer-MzcgNRti.js.map +1 -0
  191. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/element-adapter-native-data-key-zFOeeob-.js +6 -0
  192. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{element-adapter-native-data-key-DrqJDAVH.js.map → element-adapter-native-data-key-zFOeeob-.js.map} +1 -1
  193. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/feedback-DP_ydw-J.js +2 -0
  194. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/feedback-DP_ydw-J.js.map +1 -0
  195. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/floating-ui.dom-B05VsV_p.js +2 -0
  196. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/floating-ui.dom-B05VsV_p.js.map +1 -0
  197. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{focus-pk_lz9sg.js → focus-BvBkrIcj.js} +2 -2
  198. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{focus-pk_lz9sg.js.map → focus-BvBkrIcj.js.map} +1 -1
  199. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-scope-DYfME-Rk.js +2 -0
  200. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{focus-scope-BrYxsrhc.js.map → focus-scope-DYfME-Rk.js.map} +1 -1
  201. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/fragment-DVphuQVV.js +2 -0
  202. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/fragment-DVphuQVV.js.map +1 -0
  203. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/frame-DsKHMcuL.js +2 -0
  204. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/frame-DsKHMcuL.js.map +1 -0
  205. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/hover-CqeHOHpJ.js +2 -0
  206. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/hover-CqeHOHpJ.js.map +1 -0
  207. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/identity-BMTQyLbq.js +2 -0
  208. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/identity-BMTQyLbq.js.map +1 -0
  209. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/layout-mHPk9rxi.js +2 -0
  210. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/layout-mHPk9rxi.js.map +1 -0
  211. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/layout-task-B6P8q7BH.js +2 -0
  212. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/layout-task-B6P8q7BH.js.map +1 -0
  213. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/layout-wLgk8rAu.js +2 -0
  214. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/layout-wLgk8rAu.js.map +1 -0
  215. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/machine-Do4tL7nc.js +2 -0
  216. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/machine-Do4tL7nc.js.map +1 -0
  217. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/option-data-Du9mqQPo.js +2 -0
  218. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/option-data-Du9mqQPo.js.map +1 -0
  219. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/preferences-BZyZ-kK6.js +2 -0
  220. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/preferences-BZyZ-kK6.js.map +1 -0
  221. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/preload-helper-BZ1Pz5am.js +1 -0
  222. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/properties-D8pFWF8g.js +2 -0
  223. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/properties-D8pFWF8g.js.map +1 -0
  224. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/resize-DRGrWivx.js +2 -0
  225. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/resize-DRGrWivx.js.map +1 -0
  226. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/resize-preview-hnUhGcMX.js +2 -0
  227. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/resize-preview-hnUhGcMX.js.map +1 -0
  228. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/scroll-area-schema-DZgYyysJ.js +2 -0
  229. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/scroll-area-schema-DZgYyysJ.js.map +1 -0
  230. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/size-DAtboz8G.js +2 -0
  231. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/size-DAtboz8G.js.map +1 -0
  232. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{styles-CQDZhwd_.js → styles-BvLCjUXV.js} +2 -2
  233. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/styles-BvLCjUXV.js.map +1 -0
  234. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CVVSxrtG.js +4 -0
  235. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CVVSxrtG.js.map +1 -0
  236. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/virtualizer-size-CTy2gO64.js +2 -0
  237. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/virtualizer-size-CTy2gO64.js.map +1 -0
  238. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion-DGWRKBdw.js +2 -0
  239. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion-DGWRKBdw.js.map +1 -0
  240. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion.js +2 -2
  241. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/button-DA4Ii46-.js +2 -0
  242. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/button-DA4Ii46-.js.map +1 -0
  243. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/button.js +2 -2
  244. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox-omt0I9Rh.js +2 -0
  245. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox-omt0I9Rh.js.map +1 -0
  246. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox.js +2 -2
  247. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid-Cr9kEoo9.js +2 -0
  248. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid-Cr9kEoo9.js.map +1 -0
  249. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid.js +2 -2
  250. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker-CtTM4Gf6.js +2 -0
  251. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker-CtTM4Gf6.js.map +1 -0
  252. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker.js +2 -2
  253. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/direct-upload-B4dcq4bn.js +2 -0
  254. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/direct-upload-B4dcq4bn.js.map +1 -0
  255. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/direct-upload.js +2 -2
  256. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown-BEMZqp_I.js +2 -0
  257. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown-BEMZqp_I.js.map +1 -0
  258. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown.js +2 -2
  259. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field-BeqlTp38.js +2 -0
  260. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field-BeqlTp38.js.map +1 -0
  261. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field.js +2 -2
  262. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload-DCluNmYW.js +2 -0
  263. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload-DCluNmYW.js.map +1 -0
  264. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload.js +2 -2
  265. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/formset-DkPKkwlt.js +2 -0
  266. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/formset-DkPKkwlt.js.map +1 -0
  267. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/formset.js +2 -2
  268. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/import-mapper-aSuqkRen.js +2 -0
  269. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/import-mapper-aSuqkRen.js.map +1 -0
  270. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/import-mapper.js +2 -2
  271. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input-2UqpKKXs.js +2 -0
  272. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input-2UqpKKXs.js.map +1 -0
  273. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input.js +2 -2
  274. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding-DjUHW-EE.js +2 -0
  275. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding-DjUHW-EE.js.map +1 -0
  276. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding.js +2 -2
  277. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal-DYn805Mg.js +2 -0
  278. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal-DYn805Mg.js.map +1 -0
  279. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal.js +2 -2
  280. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels-C4TtKM8_.js +2 -0
  281. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels-C4TtKM8_.js.map +1 -0
  282. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels.js +2 -2
  283. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio-gAYZVe11.js +2 -0
  284. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio-gAYZVe11.js.map +1 -0
  285. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio.js +2 -2
  286. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area-SBruA-pr.js +2 -0
  287. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area-SBruA-pr.js.map +1 -0
  288. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area.js +2 -2
  289. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select-C3hjgwMw.js +2 -0
  290. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select-C3hjgwMw.js.map +1 -0
  291. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select.js +2 -2
  292. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar-b0T3yohM.js +2 -0
  293. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar-b0T3yohM.js.map +1 -0
  294. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar.js +2 -2
  295. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider-B08DRTzI.js +2 -0
  296. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider-B08DRTzI.js.map +1 -0
  297. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider.js +2 -2
  298. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch-CO-1hVz6.js +2 -0
  299. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch-CO-1hVz6.js.map +1 -0
  300. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch.js +2 -2
  301. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/table-BlPgZVqW.js +2 -0
  302. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/table-BlPgZVqW.js.map +1 -0
  303. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/table.js +2 -2
  304. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs-CDbYmlUb.js +2 -0
  305. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs-CDbYmlUb.js.map +1 -0
  306. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs.js +2 -2
  307. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast-Dxht5Hhg.js +2 -0
  308. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast-Dxht5Hhg.js.map +1 -0
  309. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast.js +2 -2
  310. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip-Ck_ZV7RN.js +2 -0
  311. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip-Ck_ZV7RN.js.map +1 -0
  312. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip.js +2 -2
  313. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer-BfCjewp3.js +2 -0
  314. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer-BfCjewp3.js.map +1 -0
  315. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer.js +2 -2
  316. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core-CbDVD_pk.js +2 -0
  317. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core-CbDVD_pk.js.map +1 -0
  318. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core.js +2 -2
  319. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/logical-entry-manifest.json +299 -441
  320. package/packages/theme-engine/README.md +98 -18
  321. package/packages/theme-engine/THEME_AUTHORING.md +34 -0
  322. package/packages/theme-engine/dist/trellis.js +613 -285
  323. package/packages/theme-engine/fonts/fira-code/5.3.0/LICENSE +93 -0
  324. package/packages/theme-engine/fonts/fira-code/5.3.0/download.json +47 -0
  325. package/packages/theme-engine/fonts/fira-code/5.3.0/fira-code-cyrillic-ext-wght-normal.woff2 +0 -0
  326. package/packages/theme-engine/fonts/fira-code/5.3.0/fira-code-cyrillic-wght-normal.woff2 +0 -0
  327. package/packages/theme-engine/fonts/fira-code/5.3.0/fira-code-greek-ext-wght-normal.woff2 +0 -0
  328. package/packages/theme-engine/fonts/fira-code/5.3.0/fira-code-greek-wght-normal.woff2 +0 -0
  329. package/packages/theme-engine/fonts/fira-code/5.3.0/fira-code-latin-ext-wght-normal.woff2 +0 -0
  330. package/packages/theme-engine/fonts/fira-code/5.3.0/fira-code-latin-wght-normal.woff2 +0 -0
  331. package/packages/theme-engine/fonts/fira-code/5.3.0/fira-code-symbols2-wght-normal.woff2 +0 -0
  332. package/packages/theme-engine/fonts/fira-code/5.3.0/font.css +62 -0
  333. package/packages/theme-engine/fonts/fira-code/5.3.0/resource.json +82 -0
  334. package/packages/theme-engine/fonts/inter/5.3.0/LICENSE +93 -0
  335. package/packages/theme-engine/fonts/inter/5.3.0/download.json +47 -0
  336. package/packages/theme-engine/fonts/inter/5.3.0/font.css +62 -0
  337. package/packages/theme-engine/fonts/inter/5.3.0/inter-cyrillic-ext-standard-normal.woff2 +0 -0
  338. package/packages/theme-engine/fonts/inter/5.3.0/inter-cyrillic-standard-normal.woff2 +0 -0
  339. package/packages/theme-engine/fonts/inter/5.3.0/inter-greek-ext-standard-normal.woff2 +0 -0
  340. package/packages/theme-engine/fonts/inter/5.3.0/inter-greek-standard-normal.woff2 +0 -0
  341. package/packages/theme-engine/fonts/inter/5.3.0/inter-latin-ext-standard-normal.woff2 +0 -0
  342. package/packages/theme-engine/fonts/inter/5.3.0/inter-latin-standard-normal.woff2 +0 -0
  343. package/packages/theme-engine/fonts/inter/5.3.0/inter-vietnamese-standard-normal.woff2 +0 -0
  344. package/packages/theme-engine/fonts/inter/5.3.0/resource.json +82 -0
  345. package/packages/theme-engine/generated/knobs/v1/color-alpha.json +1 -1
  346. package/packages/theme-engine/generated/knobs/v1/color-foundations.json +1 -1
  347. package/packages/theme-engine/generated/knobs/v1/color-ink.json +1 -1
  348. package/packages/theme-engine/generated/knobs/v1/color-lighting.json +1 -1
  349. package/packages/theme-engine/generated/knobs/v1/color-normalization.json +1 -1
  350. package/packages/theme-engine/generated/knobs/v1/color-ramps.json +1 -1
  351. package/packages/theme-engine/generated/knobs/v1/composition.json +1 -1
  352. package/packages/theme-engine/generated/knobs/v1/depth.json +1 -1
  353. package/packages/theme-engine/generated/knobs/v1/edges.json +1 -1
  354. package/packages/theme-engine/generated/knobs/v1/index.json +572 -85
  355. package/packages/theme-engine/generated/knobs/v1/manifest.json +25 -46
  356. package/packages/theme-engine/generated/knobs/v1/radii.json +50 -1
  357. package/packages/theme-engine/generated/knobs/v1/semantic-actions.json +1 -1
  358. package/packages/theme-engine/generated/knobs/v1/semantic-disabled.json +1 -1
  359. package/packages/theme-engine/generated/knobs/v1/semantic-disclosure.json +1 -1
  360. package/packages/theme-engine/generated/knobs/v1/semantic-intents.json +856 -37
  361. package/packages/theme-engine/generated/knobs/v1/semantic-scrim.json +1 -1
  362. package/packages/theme-engine/generated/knobs/v1/semantic-selection.json +1 -1
  363. package/packages/theme-engine/generated/knobs/v1/semantic-structure.json +1 -1
  364. package/packages/theme-engine/generated/knobs/v1/semantic-text-selection.json +372 -0
  365. package/packages/theme-engine/generated/knobs/v1/sizing-anatomy.json +4 -4
  366. package/packages/theme-engine/generated/knobs/v1/sizing-controls.json +1 -1
  367. package/packages/theme-engine/generated/knobs/v1/sizing-measures.json +1 -1
  368. package/packages/theme-engine/generated/knobs/v1/spacing.json +2 -2
  369. package/packages/theme-engine/generated/knobs/v1/substrates.json +1 -1
  370. package/packages/theme-engine/generated/knobs/v1/surfaces.json +1 -1
  371. package/packages/theme-engine/generated/knobs/v1/typography-anatomy.json +1 -1
  372. package/packages/theme-engine/generated/knobs/v1/typography-fonts.json +158 -40
  373. package/packages/theme-engine/generated/knobs/v1/typography-scale.json +1 -1
  374. package/packages/theme-engine/generated/schemas/theme-config-v1.json +108 -36
  375. package/packages/theme-engine/generated/schemas/theme-manifest-v1.json +10 -37
  376. package/packages/theme-engine/skills/create-trellis-theme/SKILL.md +4 -5
  377. package/packages/client/src/components/app/styles.css +0 -1
  378. package/packages/client/src/components/brand/styles.css +0 -8
  379. package/packages/client/src/styles/motion.css +0 -26
  380. package/packages/client/src/styles/static.css +0 -3
  381. package/packages/client/types/assets/full-runtime.generated.d.ts +0 -2
  382. package/packages/client/types/capabilities/motion.d.ts +0 -6
  383. package/packages/client/types/capabilities/motion.entry.generated.d.ts +0 -3
  384. package/packages/client/types/cdn.d.ts +0 -2
  385. package/packages/client/types/components/entry.generated.d.ts +0 -37
  386. package/packages/client/types/directives/bounds.d.ts +0 -4
  387. package/packages/client/types/directives/layout.d.ts +0 -3
  388. package/packages/client/types/index.d.ts +0 -8
  389. package/packages/client/types/motion/bounds.d.ts +0 -20
  390. package/packages/client/types/motion/controller.d.ts +0 -33
  391. package/packages/client/types/motion/flip.d.ts +0 -14
  392. package/packages/client/types/motion/plan.d.ts +0 -52
  393. package/packages/client/types/motion/stream.d.ts +0 -18
  394. package/packages/client/types/motion/targets.d.ts +0 -23
  395. package/packages/client/types/motion/view.d.ts +0 -27
  396. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis-103fb43eb5e1.css +0 -14030
  397. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.css +0 -14030
  398. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min-584dec82495c.css +0 -2
  399. package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min.css +0 -2
  400. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/bridge-COxhbtRZ.js +0 -1
  401. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion-CKiK3BQA.js +0 -2
  402. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion-CKiK3BQA.js.map +0 -1
  403. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js +0 -2
  404. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/resizable-Ctqx_OoS.js +0 -2
  405. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut-D2NgvMgw.js +0 -2
  406. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable-CbIOS4Lm.js +0 -2
  407. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/alpine-machine-CE2UN4Qu.js +0 -2
  408. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/alpine-machine-CE2UN4Qu.js.map +0 -1
  409. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/bridge-DMrvM3JE.js +0 -2
  410. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/bridge-DMrvM3JE.js.map +0 -1
  411. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-anchor-lhqk7hfo.js +0 -2
  412. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-anchor-lhqk7hfo.js.map +0 -1
  413. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-B32HePGn.js +0 -2
  414. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-motion-B32HePGn.js.map +0 -1
  415. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-resizable-ByUbMIHF.js +0 -2
  416. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-resizable-ByUbMIHF.js.map +0 -1
  417. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-DZUQHJ3A.js +0 -2
  418. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-DZUQHJ3A.js.map +0 -1
  419. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-Bl6ng6Hd.js +0 -5
  420. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-sortable-Bl6ng6Hd.js.map +0 -1
  421. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-hTbwy6oQ.js +0 -2
  422. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/collection-navigation-hTbwy6oQ.js.map +0 -1
  423. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-CBK89mIt.js +0 -2
  424. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/common-CBK89mIt.js.map +0 -1
  425. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/controller-C8xqwkr0.js +0 -2
  426. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/controller-C8xqwkr0.js.map +0 -1
  427. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-BxNepYBE.js +0 -2
  428. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/core-BxNepYBE.js.map +0 -1
  429. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-Do0FfF4Z.js +0 -2
  430. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/cursor-data-source-Do0FfF4Z.js.map +0 -1
  431. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/dismissable-layer-BROE-Ln2.js +0 -2
  432. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/dismissable-layer-BROE-Ln2.js.map +0 -1
  433. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/element-adapter-native-data-key-DrqJDAVH.js +0 -6
  434. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-7hdXmBLE.js +0 -2
  435. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-7hdXmBLE.js.map +0 -1
  436. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BCTWp6Xu.js +0 -2
  437. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BCTWp6Xu.js.map +0 -1
  438. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BQNpmLZO.js +0 -2
  439. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BQNpmLZO.js.map +0 -1
  440. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BRaKxvab.js +0 -2
  441. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BRaKxvab.js.map +0 -1
  442. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BZWdGtgg.js +0 -2
  443. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BZWdGtgg.js.map +0 -1
  444. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BnqcHAaF.js +0 -2
  445. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BnqcHAaF.js.map +0 -1
  446. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BzLNUDzF.js +0 -2
  447. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-BzLNUDzF.js.map +0 -1
  448. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CC6pQ0nu.js +0 -2
  449. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CC6pQ0nu.js.map +0 -1
  450. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CEfr2bmw.js +0 -2
  451. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CEfr2bmw.js.map +0 -1
  452. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CL4bjCqf.js +0 -2
  453. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CL4bjCqf.js.map +0 -1
  454. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CVWqQEed.js +0 -2
  455. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CVWqQEed.js.map +0 -1
  456. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C_SxTqg5.js +0 -2
  457. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C_SxTqg5.js.map +0 -1
  458. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cbyseoex.js +0 -2
  459. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cbyseoex.js.map +0 -1
  460. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cf2hKkwA.js +0 -2
  461. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cf2hKkwA.js.map +0 -1
  462. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CfYgsDun.js +0 -2
  463. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CfYgsDun.js.map +0 -1
  464. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cl8rInnJ.js +0 -2
  465. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Cl8rInnJ.js.map +0 -1
  466. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Ct9H8Hlf.js +0 -2
  467. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Ct9H8Hlf.js.map +0 -1
  468. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D2es_Wi2.js +0 -2
  469. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-D2es_Wi2.js.map +0 -1
  470. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DQtFqG0K.js +0 -2
  471. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DQtFqG0K.js.map +0 -1
  472. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-EqHVGr1d.js +0 -2
  473. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-EqHVGr1d.js.map +0 -1
  474. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-FCDgmA0s.js +0 -2
  475. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-FCDgmA0s.js.map +0 -1
  476. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-HqE8R7N1.js +0 -2
  477. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-HqE8R7N1.js.map +0 -1
  478. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-J0oGNBzS.js +0 -2
  479. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-J0oGNBzS.js.map +0 -1
  480. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-O0hEhk-2.js +0 -2
  481. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-O0hEhk-2.js.map +0 -1
  482. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-oJwO9fIY.js +0 -2
  483. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-oJwO9fIY.js.map +0 -1
  484. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-xjydizn-.js +0 -2
  485. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-xjydizn-.js.map +0 -1
  486. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/flip-BKThFI4L.js +0 -2
  487. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/flip-BKThFI4L.js.map +0 -1
  488. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-scope-BrYxsrhc.js +0 -2
  489. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/fragment-9OT0mn7F.js +0 -2
  490. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/fragment-9OT0mn7F.js.map +0 -1
  491. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/machine-CNnHDbyo.js +0 -2
  492. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/machine-CNnHDbyo.js.map +0 -1
  493. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-RwlK04Cy.js +0 -3
  494. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/motion-RwlK04Cy.js.map +0 -1
  495. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/pdd-BG5sXFGF.js +0 -2
  496. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/pdd-BG5sXFGF.js.map +0 -1
  497. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/styles-CQDZhwd_.js.map +0 -1
  498. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-Bg44ZmC3.js +0 -4
  499. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-Bg44ZmC3.js.map +0 -1
  500. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion-DpoqsP_I.js +0 -1
  501. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/button-Dnf0aKac.js +0 -1
  502. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/checkbox-BpFFtrfY.js +0 -1
  503. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid-CCPYnOuT.js +0 -1
  504. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker-BCkP5gtC.js +0 -1
  505. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/direct-upload-DaT6-YFL.js +0 -1
  506. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown-Cc84envj.js +0 -1
  507. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/field-CtQbyblj.js +0 -1
  508. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/file-upload-DARtpJDT.js +0 -1
  509. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/formset-CPO4XZkB.js +0 -1
  510. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/import-mapper-C-3lKsKm.js +0 -1
  511. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index-DRH3gncZ.js +0 -2
  512. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index-DRH3gncZ.js.map +0 -1
  513. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js +0 -2
  514. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/input-BKEbDkKa.js +0 -1
  515. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding-RIi2q1IT.js +0 -1
  516. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal-MUHGUsup.js +0 -1
  517. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels-DNAroAhk.js +0 -1
  518. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/radio-DrGFMWGq.js +0 -1
  519. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area-CyUCAbgG.js +0 -1
  520. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select-BjLF548F.js +0 -1
  521. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar-GpvEBW3K.js +0 -1
  522. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/slider-OztnTlqr.js +0 -1
  523. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/switch-CZ7aiASg.js +0 -1
  524. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/table-G3G5d2Eo.js +0 -1
  525. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs-bq7j1uwx.js +0 -1
  526. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast-DkP0-rBO.js +0 -1
  527. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip-OITEWczP.js +0 -1
  528. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer-CkRX2qVO.js +0 -1
  529. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core-Z4zMCScs.js +0 -1
  530. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index-DAz_hKiB.js +0 -2
  531. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index-DAz_hKiB.js.map +0 -1
  532. package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js +0 -2
  533. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis-ecb43dfd3b7b.js +0 -11
  534. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.js +0 -11
  535. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min-ecb43dfd3b7b.js +0 -11
  536. package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min.js +0 -11
  537. package/packages/theme-engine/generated/knobs/v1/motion.json +0 -128
@@ -0,0 +1,2 @@
1
+ import{t as e}from"./layout-task-B6P8q7BH.js";import{n as t}from"./identity-BMTQyLbq.js";import{n}from"./focus-BvBkrIcj.js";var r=e=>e.dataset.disabled===`true`||e.hasAttribute(`disabled`)||e.getAttribute(`aria-disabled`)===`true`,i=e=>!!e.closest(`[hidden], [inert], [aria-hidden="true"]`),a=(e,t)=>{if(i(e))return!1;for(let n=e;n;n=n.parentElement){let e=t.get(n)??getComputedStyle(n);if(t.set(n,e),e.display===`none`)return!1}return t.get(e).visibility!==`hidden`},o=e=>typeof e==`function`?e():e!==!1,s=(e,t,n,r)=>{if(t===0)return-1;if(e<0)return n===1?0:t-1;let i=e+n;return r?(i+t)%t:Math.max(0,Math.min(t-1,i))},c=0,l=({root:l,input:u=()=>null,onActiveChange:d=()=>{},activeAttribute:f=`data-active`,isDisabled:p=r,loop:m})=>{let h=new Set,g=null,_=null,v=!1,y=new WeakMap,b=e=>{let n=y.get(e);return n?.generatedId===e.id&&!e.hasAttribute(`data-ui-key`)&&!n.explicit?n.initial:t(e,n?.explicit)},x=e=>{if(v)return null;let t=l();if(!t?.contains(e))return null;for(let n=e;n;n=n.parentElement){if(n instanceof HTMLElement&&h.has(n))return n;if(n===t)break}return null},S=()=>v?[]:Array.from(h).filter(e=>l()?.contains(e)).sort((e,t)=>e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING?-1:1),C=()=>{let e=new Map;return S().filter(t=>!p(t)&&a(t,e))},w=e=>{E.cancel(),g=e,_=e?b(e):null;let t=u();t&&e?t.getAttribute(`aria-activedescendant`)!==e.id&&t.setAttribute(`aria-activedescendant`,e.id):t?.hasAttribute(`aria-activedescendant`)&&t.removeAttribute(`aria-activedescendant`),d(e,_)},T=()=>{v||(h.forEach(e=>{e.hasAttribute(f)&&e.removeAttribute(f)}),w(null))},E=e({measure:()=>{if(v||!g&&!_)return null;let e=C();return{retained:g&&e.includes(g)?g:_?e.find(e=>b(e)===_)??null:null}},apply:e=>{if(!e||v)return;let{retained:t}=e;if(!t){T();return}h.forEach(e=>{e===t?e.getAttribute(f)!==`true`&&e.setAttribute(f,`true`):e.hasAttribute(f)&&e.removeAttribute(f)}),w(t)}}),D=()=>{if(!(v||!g&&!_)){if(g&&(p(g)||i(g))){T();return}E.schedule()}},O=e=>{v||(h.delete(e),e.removeAttribute(f),g===e&&(g=null,u()?.removeAttribute(`aria-activedescendant`),D()))},k=(e,n)=>{if(v)return()=>{};let r=t(e,n),i=e.id?null:`ui-collection-item-${++c}`;return y.set(e,{explicit:n,initial:r,generatedId:i}),i&&(e.id=i),h.add(e),_&&b(e)===_&&D(),()=>O(e)},A=e=>{v||(h.forEach(t=>{e.includes(t)||O(t)}),e.forEach(e=>{h.has(e)||k(e)}),D())},j=({items:e=C()}={})=>{let t=e.find(e=>e.getAttribute(f)===`true`);if(t)return e.indexOf(t);let n=_?e.findIndex(e=>b(e)===_):-1;if(n>=0)return n;let r=document.activeElement,i=r instanceof HTMLElement?e.find(e=>e===r||e.contains(r)):void 0;return i?e.indexOf(i):-1},M=({el:e})=>{h.has(e)&&l()?.contains(e)&&!p(e)&&a(e,new Map)&&(h.forEach(e=>e.removeAttribute(f)),e.setAttribute(f,`true`),w(e))},N=({el:e})=>{M({el:e}),u()||n(e),e.scrollIntoView?.({block:`nearest`,inline:`nearest`})},P=e=>{let t=C()[e];t&&N({el:t})},F=()=>{let e=C();e.length!==0&&N({el:e[s(j({items:e}),e.length,1,o(m))]})},I=()=>{let e=C();e.length!==0&&N({el:e[s(j({items:e}),e.length,-1,o(m))]})},L=()=>P(0),R=()=>{let e=C();P(e.length-1)};return{get active(){return _},get activeItem(){return g},resolveItem:x,refresh:D,destroy(){v||(T(),v=!0,h.clear())},registerItem:k,reconcileItems:A,allItems:S,items:C,currentActiveIndex:j,activateItem:M,clearActiveItem:T,focusItem:N,focusNext:F,focusPrevious:I,focusFirst:L,focusLast:R,handleKeydown:({event:e})=>{if(e.key===`ArrowDown`)return e.preventDefault(),F(),!0;if(e.key===`ArrowUp`)return e.preventDefault(),I(),!0;if(e.key===`Home`)return e.preventDefault(),L(),!0;if(e.key===`End`)return e.preventDefault(),R(),!0;if(e.key===`Enter`&&u()){let t=C()[j()];return t?(e.preventDefault(),t.click(),!0):!1}return!1}}};export{l as n,s as t};
2
+ //# sourceMappingURL=collection-navigation-et2se66r.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection-navigation-et2se66r.js","names":[],"sources":["../../../../../../../../client/src/runtime/collection-navigation.ts"],"sourcesContent":["import {focusElement} from './focus';\nimport {createLayoutTask} from './layout-task';\nimport {stableIdentity, STABLE_KEY_ATTR} from './identity';\n\ntype CollectionRoot = HTMLElement | null;\n\ntype CollectionNavigationOptions = {\n root: () => CollectionRoot;\n input?: () => HTMLInputElement | null;\n onActiveChange?: (item: HTMLElement | null, key: string | null) => void;\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 readonly active: string | null;\n readonly activeItem: HTMLElement | null;\n resolveItem(element: Element): HTMLElement | null;\n refresh(): void;\n destroy(): void;\n registerItem(el: HTMLElement, key?: string): () => void;\n reconcileItems(items: HTMLElement[]): void;\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') || el.getAttribute('aria-disabled') === 'true'\n);\n\nconst isLogicallyHidden = (el: HTMLElement): boolean => !!el.closest('[hidden], [inert], [aria-hidden=\"true\"]');\n\nconst isVisible = (el: HTMLElement, styles: Map<HTMLElement, CSSStyleDeclaration>): boolean => {\n if (isLogicallyHidden(el)) return false;\n for (let current: HTMLElement | null = el; current; current = current.parentElement) {\n const style = styles.get(current) ?? getComputedStyle(current);\n styles.set(current, style);\n if (style.display === 'none') return false;\n }\n return styles.get(el)!.visibility !== 'hidden';\n};\n\nconst resolveLoop = (loop: CollectionNavigationOptions['loop']): boolean => (\n typeof loop === 'function' ? loop() : loop !== false\n);\n\nconst collectionIndex = (current: number, count: number, direction: 1 | -1, loop: boolean): number => {\n if (count === 0) return -1;\n if (current < 0) return direction === 1 ? 0 : count - 1;\n const next = current + direction;\n return loop ? (next + count) % count : Math.max(0, Math.min(count - 1, next));\n};\n\nlet collectionItemId = 0;\n\nconst createCollectionNavigation = ({\n root: getRoot,\n input = () => null,\n onActiveChange = () => {},\n activeAttribute = 'data-active',\n isDisabled = defaultIsDisabled,\n loop,\n}: CollectionNavigationOptions): CollectionNavigation => {\n const registered = new Set<HTMLElement>();\n let active: HTMLElement | null = null;\n let activeKey: string | null = null;\n let destroyed = false;\n const identities = new WeakMap<HTMLElement, {explicit: string | undefined; generatedId: string | null; initial: string | null}>();\n const keyFor = (item: HTMLElement): string | null => {\n const identity = identities.get(item);\n if (identity?.generatedId === item.id && !item.hasAttribute(STABLE_KEY_ATTR) && !identity.explicit) {\n return identity.initial;\n }\n return stableIdentity(item, identity?.explicit);\n };\n const resolveItem = (element: Element): HTMLElement | null => {\n if (destroyed) return null;\n const root = getRoot();\n if (!root?.contains(element)) return null;\n for (let candidate: Element | null = element; candidate; candidate = candidate.parentElement) {\n if (candidate instanceof HTMLElement && registered.has(candidate)) return candidate;\n if (candidate === root) break;\n }\n return null;\n };\n const allItems = (): HTMLElement[] => destroyed ? [] : Array.from(registered)\n .filter((el) => getRoot()?.contains(el))\n .sort((a, b) => a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1);\n const items = (): HTMLElement[] => {\n const styles = new Map<HTMLElement, CSSStyleDeclaration>();\n return allItems().filter((el) => !isDisabled(el) && isVisible(el, styles));\n };\n const syncActive = (item: HTMLElement | null): void => {\n refreshTask.cancel();\n active = item;\n activeKey = item ? keyFor(item) : null;\n const search = input();\n if (search && item) {\n if (search.getAttribute('aria-activedescendant') !== item.id) search.setAttribute('aria-activedescendant', item.id);\n } else if (search?.hasAttribute('aria-activedescendant')) search.removeAttribute('aria-activedescendant');\n onActiveChange(item, activeKey);\n };\n const clearActiveItem = (): void => {\n if (destroyed) return;\n registered.forEach(item => {if (item.hasAttribute(activeAttribute)) item.removeAttribute(activeAttribute);});\n syncActive(null);\n };\n const refreshTask = createLayoutTask({\n measure: () => {\n if (destroyed || (!active && !activeKey)) return null;\n const eligible = items();\n return {retained: active && eligible.includes(active) ? active\n : activeKey ? eligible.find(item => keyFor(item) === activeKey) ?? null : null};\n },\n apply: (measurement) => {\n if (!measurement || destroyed) return;\n const {retained} = measurement;\n if (!retained) {clearActiveItem(); return;}\n registered.forEach(item => {\n if (item === retained) {\n if (item.getAttribute(activeAttribute) !== 'true') item.setAttribute(activeAttribute, 'true');\n } else if (item.hasAttribute(activeAttribute)) item.removeAttribute(activeAttribute);\n });\n syncActive(retained);\n },\n });\n const refresh = (): void => {\n if (destroyed || (!active && !activeKey)) return;\n if (active && (isDisabled(active) || isLogicallyHidden(active))) {\n clearActiveItem();\n return;\n }\n refreshTask.schedule();\n };\n const unregisterItem = (el: HTMLElement): void => {\n if (destroyed) return;\n registered.delete(el);\n el.removeAttribute(activeAttribute);\n if (active === el) {\n active = null;\n input()?.removeAttribute('aria-activedescendant');\n // A same-batch replacement can register before the active key is cleared.\n refresh();\n }\n };\n const registerItem = (el: HTMLElement, explicit?: string): (() => void) => {\n if (destroyed) return () => {};\n const initial = stableIdentity(el, explicit);\n const generatedId = el.id ? null : `ui-collection-item-${++collectionItemId}`;\n identities.set(el, {explicit, initial, generatedId});\n if (generatedId) el.id = generatedId;\n registered.add(el);\n if (activeKey && keyFor(el) === activeKey) refresh();\n return () => unregisterItem(el);\n };\n const reconcileItems = (next: HTMLElement[]): void => {\n if (destroyed) return;\n registered.forEach((item) => {if (!next.includes(item)) unregisterItem(item);});\n next.forEach((item) => {if (!registered.has(item)) registerItem(item);});\n refresh();\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 // A same-key replacement can await its visual refresh while input focus\n // stays put. Keyboard navigation follows that retained model identity.\n const retainedIndex = activeKey ? candidateItems.findIndex(item => keyFor(item) === activeKey) : -1;\n if (retainedIndex >= 0) return retainedIndex;\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 (!registered.has(el) || !getRoot()?.contains(el) || isDisabled(el) || !isVisible(el, new Map())) return;\n\n registered.forEach((item) => item.removeAttribute(activeAttribute));\n el.setAttribute(activeAttribute, 'true');\n syncActive(el);\n };\n\n const focusItem = ({el}: CollectionElementOptions): void => {\n activateItem({el});\n if (!input()) focusElement(el);\n el.scrollIntoView?.({block: 'nearest', inline: 'nearest'});\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 collectionIndex(currentActiveIndex({items: candidateItems}), candidateItems.length, 1, resolveLoop(loop))\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 collectionIndex(currentActiveIndex({items: candidateItems}), candidateItems.length, -1, resolveLoop(loop))\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 if (event.key === 'Enter' && input()) {\n const item = items()[currentActiveIndex()];\n if (!item) return false;\n event.preventDefault();\n item.click();\n return true;\n }\n return false;\n };\n\n return {\n get active() {return activeKey;},\n get activeItem() {return active;},\n resolveItem,\n refresh,\n destroy(): void {\n if (destroyed) return;\n clearActiveItem();\n destroyed = true;\n registered.clear();\n },\n registerItem,\n reconcileItems,\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 {collectionIndex, createCollectionNavigation};\nexport type {\n CollectionElementOptions,\n CollectionItemsOptions,\n CollectionKeydownOptions,\n CollectionNavigation,\n CollectionNavigationOptions,\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ var e=[`outline`,`filled`,`plain`],t=[`outline`,`solid`,`mini`,`micro`],n=[`button`,`submit`,`reset`],r=[`start`,`center`,`end`],i=[`bottom`,`top`,`left`,`right`],a=[`top`,`right`,`bottom`,`left`],o=[`vertical`,`horizontal`],s=[`leading`,`trailing`,`center`,`top-leading`,`top-trailing`,`bottom-leading`,`bottom-trailing`],c=[`default`],l=[`h1`,`h2`,`h3`,`h4`,`h5`,`h6`],u=[`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`11`,`12`,`13`],d={inherit:`text-inherit`,muted:`text-surface-ink-muted`,subtle:`text-surface-ink-subtle`,accent:`text-intent-accent-text`,danger:`text-intent-danger-text`};Object.fromEntries(u.map(e=>[e,`text-${e}`])),d.muted,d.subtle,d.accent,d.danger;var f=[`0`,`0.5`,`1`,`1.5`,`2`,`2.5`,`3`,`3.5`,`4`,`4.5`,`5`,`5.5`,`6`,`6.5`,`7`,`7.5`,`8`,`8.5`,`9`,`9.5`,`10`,`10.5`,`11`,`11.5`,`12`],p=e=>Object.fromEntries(f.map(t=>[t,t===`0`?``:`${e}-${t}`])),m=p(`gap`),h=p(`gap-x`),g=p(`gap-y`),_=p(`p`),v=p(`px`),y=p(`py`),b=p(`m`),x=p(`mx`),S=p(`my`),C=[`none`,`xs`,`sm`,`md`,`lg`,`full`],w=[...C,`concentric`],T=[`inherit`,`0`,`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`+1`,`+2`,`+3`,`+4`,`+5`,`+6`,`+7`,`+8`],E=[`none`,`match`,`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`+1`,`+2`,`+3`,`+4`,`+5`,`+6`,`+7`,`+8`],D=e=>Object.fromEntries(E.map(t=>[t,`[${e}:${t===`none`?`var(--shadow-elevation-0)`:t===`match`?`var(--ui-matched-elevation)`:t.startsWith(`+`)?`var(--ui-relative-elevation-${t.slice(1)})`:`var(--shadow-elevation-${t})`}]`])),O={none:``,xs:`rounded-surface-xs`,sm:`rounded-surface-sm`,md:`rounded-surface-md`,lg:`rounded-surface-lg`,full:`rounded-full`,concentric:``},k={none:``,xs:`rounded-control-xs`,sm:`rounded-control-sm`,md:`rounded-control-md`,lg:`rounded-control-lg`,full:`rounded-full`},A={xs:`font-control text-control-xs [--ui-control-font-size:var(--text-control-xs)] [font-weight:var(--font-weight-control-xs)]`,sm:`font-control text-control-sm [--ui-control-font-size:var(--text-control-sm)] [font-weight:var(--font-weight-control-sm)]`,md:`font-control text-control-md [--ui-control-font-size:var(--text-control-md)] [font-weight:var(--font-weight-control-md)]`,lg:`font-control text-control-lg [--ui-control-font-size:var(--text-control-lg)] [font-weight:var(--font-weight-control-lg)]`,xlg:`font-control text-control-xlg [--ui-control-font-size:var(--text-control-xlg)] [font-weight:var(--font-weight-control-xlg)]`};`${A.xs}`,`${A.sm}`,`${A.md}`,`${A.lg}`,`${A.xlg}`;var j={xs:`min-h-control-xs px-control-padding-xs ${A.xs}`,sm:`min-h-control-sm px-control-padding-sm ${A.sm}`,md:`min-h-control-md px-control-padding-md ${A.md}`,lg:`min-h-control-lg px-control-padding-lg ${A.lg}`,xlg:`min-h-control-xlg px-control-padding-xlg ${A.xlg}`};`${A.xs}`,`${A.sm}`,`${A.md}`,`${A.lg}`,`${A.xlg}`;var M=[`flex w-full min-w-0 items-center gap-control-gap outline-none`],N=[`ui-field-text border-0 bg-transparent p-0 text-inherit outline-none`],P=[`inline-flex size-control-xs shrink-0 items-center justify-center rounded-control-sm border-0 bg-transparent`,`text-current outline-none`],F=[`ui-field-text [--ui-field-font-size:var(--ui-control-font-size)] w-full border-0 bg-transparent text-inherit outline-none`],I=[`absolute inset-auto left-0 top-0 z-popover m-0 h-auto`,`outline-none`],L=[`ui-interactive:hover:bg-interaction-hover`,`ui-interactive:ui-active:bg-interaction-pressed`,`ui-interactive:ui-selected:bg-interaction-selected`,`ui-interactive:ui-selected:hover:bg-interaction-selected-hover`],R=[`neutral`,`accent`],z=[`tonal`,`edge`,`combined`],B=[`flex h-menu-item w-full cursor-default select-none items-center gap-2 rounded-control-sm px-menu-item-padding-inline`,`text-left font-menu-item text-menu-item [font-weight:var(--font-weight-menu-item)] outline-none`,`data-disabled:pointer-events-none`],V=`size-icon shrink-0 text-current opacity-70`,H=`ml-auto shrink-0 font-metadata text-metadata [font-weight:var(--font-weight-metadata)] text-current opacity-70`,U=`ml-auto size-icon shrink-0 text-current opacity-0 data-selected:opacity-100`;export{V as A,T as B,b as C,v as D,_ as E,I as F,D as H,i as I,R as L,B as M,H as N,y as O,o as P,w as R,g as S,S as T,u as V,s as _,k as a,m as b,c,P as d,N as f,t as g,l as h,j as i,U as j,f as k,a as l,M as m,n,A as o,F as p,C as r,e as s,r as t,E as u,z as v,x as w,h as x,L as y,O as z};
2
+ //# sourceMappingURL=common-DnEHZCqy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-DnEHZCqy.js","names":[],"sources":["../../../../../../../../client/src/components/common.ts"],"sourcesContent":["import {CONTROL_SIZES, type ControlSize} from '../runtime/control-size';\nconst CONTROL_VARIANTS = ['outline', 'filled', 'plain'] as const;\nconst ICON_VARIANTS = ['outline', 'solid', 'mini', 'micro'] as const;\nconst BUTTON_TYPES = ['button', 'submit', 'reset'] as const;\nconst ALIGNMENTS = ['start', 'center', 'end'] as const;\nconst POSITIONS = ['bottom', 'top', 'left', 'right'] as const;\nconst EDGE_POSITIONS = ['top', 'right', 'bottom', 'left'] as const;\nconst ORIENTATIONS = ['vertical', 'horizontal'] as const;\nconst INDICATOR_PLACEMENTS = ['leading', 'trailing', 'center', 'top-leading', 'top-trailing', 'bottom-leading', 'bottom-trailing'] as const;\nconst DEFAULT_VARIANTS = ['default'] as const;\nconst HEADING_LEVELS = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const;\nconst TYPOGRAPHY_SIZES = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13'] as const;\nconst TYPOGRAPHY_WEIGHTS = ['normal', 'medium', 'semibold', 'bold'] as const;\nconst TYPOGRAPHY_FONTS = ['body', 'heading', 'mono'] as const;\nconst TEXT_FONTS = ['body', 'mono'] as const;\nconst TYPOGRAPHY_COLORS = ['inherit', 'muted', 'subtle', 'accent', 'danger'] as const;\nconst ICON_COLORS = TYPOGRAPHY_COLORS;\ntype TypographyColor = typeof TYPOGRAPHY_COLORS[number];\ntype IconColor = typeof ICON_COLORS[number];\nconst TYPOGRAPHY_COLOR_CLASSES = {\n inherit: 'text-inherit',\n muted: 'text-surface-ink-muted',\n subtle: 'text-surface-ink-subtle',\n accent: 'text-intent-accent-text',\n danger: 'text-intent-danger-text',\n} as const satisfies Record<TypographyColor, string>;\ntype TypographySize = typeof TYPOGRAPHY_SIZES[number];\ntype TypographyWeight = typeof TYPOGRAPHY_WEIGHTS[number];\ntype TypographyFont = typeof TYPOGRAPHY_FONTS[number];\ntype TextFont = typeof TEXT_FONTS[number];\nconst TYPOGRAPHY_SIZE_CLASSES = Object.fromEntries(\n TYPOGRAPHY_SIZES.map((size) => [size, `text-${size}`]),\n) as Record<TypographySize, string>;\nconst TYPOGRAPHY_WEIGHT_CLASSES = {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n} as const satisfies Record<TypographyWeight, string>;\nconst TYPOGRAPHY_FONT_CLASSES = {\n body: 'font-body',\n heading: 'font-heading',\n mono: 'font-mono',\n} as const satisfies Record<TypographyFont, string>;\nconst ICON_COLOR_CLASSES = {\n inherit: 'text-current',\n muted: TYPOGRAPHY_COLOR_CLASSES.muted,\n subtle: TYPOGRAPHY_COLOR_CLASSES.subtle,\n accent: TYPOGRAPHY_COLOR_CLASSES.accent,\n danger: TYPOGRAPHY_COLOR_CLASSES.danger,\n} as const satisfies Record<IconColor, string>;\nconst LAYOUT_SPACES = [\n '0', '0.5', '1', '1.5', '2', '2.5', '3', '3.5', '4', '4.5', '5', '5.5', '6', '6.5',\n '7', '7.5', '8', '8.5', '9', '9.5', '10', '10.5', '11', '11.5', '12',\n] as const;\ntype LayoutSpace = typeof LAYOUT_SPACES[number];\nconst layoutSpaceClasses = (prefix: string): Record<LayoutSpace, string> => Object.fromEntries(\n LAYOUT_SPACES.map((space) => [space, space === '0' ? '' : `${prefix}-${space}`]),\n) as Record<LayoutSpace, string>;\nconst LAYOUT_GAP_CLASSES = layoutSpaceClasses('gap');\nconst LAYOUT_GAP_X_CLASSES = layoutSpaceClasses('gap-x');\nconst LAYOUT_GAP_Y_CLASSES = layoutSpaceClasses('gap-y');\nconst LAYOUT_PADDING_CLASSES = layoutSpaceClasses('p');\nconst LAYOUT_PADDING_X_CLASSES = layoutSpaceClasses('px');\nconst LAYOUT_PADDING_Y_CLASSES = layoutSpaceClasses('py');\nconst LAYOUT_MARGIN_CLASSES = layoutSpaceClasses('m');\nconst LAYOUT_MARGIN_X_CLASSES = layoutSpaceClasses('mx');\nconst LAYOUT_MARGIN_Y_CLASSES = layoutSpaceClasses('my');\nconst COMPONENT_RADII = ['none', 'xs', 'sm', 'md', 'lg', 'full'] as const;\nconst SURFACE_RADII = [...COMPONENT_RADII, 'concentric'] as const;\nconst ABSOLUTE_SURFACE_REFERENCES = ['0', '1', '2', '3', '4', '5', '6', '7', '8'] as const;\nconst SURFACE_REFERENCES = [\n 'inherit', ...ABSOLUTE_SURFACE_REFERENCES,\n '+1', '+2', '+3', '+4', '+5', '+6', '+7', '+8',\n] as const;\nconst ELEVATION_REFERENCES = [\n 'none', 'match', '1', '2', '3', '4', '5', '6', '7', '8',\n '+1', '+2', '+3', '+4', '+5', '+6', '+7', '+8',\n] as const;\ntype SurfaceReference = typeof SURFACE_REFERENCES[number];\ntype AbsoluteSurfaceReference = typeof ABSOLUTE_SURFACE_REFERENCES[number];\ntype ElevationReference = typeof ELEVATION_REFERENCES[number];\nconst elevationReferenceClasses = (property: `--${string}`): Record<ElevationReference, string> => Object.fromEntries(\n ELEVATION_REFERENCES.map((reference) => {\n const value = reference === 'none'\n ? 'var(--shadow-elevation-0)'\n : reference === 'match'\n ? 'var(--ui-matched-elevation)'\n : reference.startsWith('+')\n ? `var(--ui-relative-elevation-${reference.slice(1)})`\n : `var(--shadow-elevation-${reference})`;\n return [reference, `[${property}:${value}]`];\n }),\n) as Record<ElevationReference, string>;\nconst SURFACE_RADIUS_CLASSES = {\n none: '',\n xs: 'rounded-surface-xs',\n sm: 'rounded-surface-sm',\n md: 'rounded-surface-md',\n lg: 'rounded-surface-lg',\n full: 'rounded-full',\n concentric: '',\n} as const satisfies Record<typeof SURFACE_RADII[number], string>;\nconst CONTROL_RADIUS_CLASSES = {\n none: '',\n xs: 'rounded-control-xs',\n sm: 'rounded-control-sm',\n md: 'rounded-control-md',\n lg: 'rounded-control-lg',\n full: 'rounded-full',\n} as const satisfies Record<typeof COMPONENT_RADII[number], string>;\nconst CONTROL_TYPOGRAPHY_CLASSES = {\n xs: 'font-control text-control-xs [--ui-control-font-size:var(--text-control-xs)] [font-weight:var(--font-weight-control-xs)]',\n sm: 'font-control text-control-sm [--ui-control-font-size:var(--text-control-sm)] [font-weight:var(--font-weight-control-sm)]',\n md: 'font-control text-control-md [--ui-control-font-size:var(--text-control-md)] [font-weight:var(--font-weight-control-md)]',\n lg: 'font-control text-control-lg [--ui-control-font-size:var(--text-control-lg)] [font-weight:var(--font-weight-control-lg)]',\n xlg: 'font-control text-control-xlg [--ui-control-font-size:var(--text-control-xlg)] [font-weight:var(--font-weight-control-xlg)]',\n} as const;\nconst CONTROL_SIZE_CLASSES = {\n xs: `h-control-xs px-control-padding-xs ${CONTROL_TYPOGRAPHY_CLASSES.xs}`,\n sm: `h-control-sm px-control-padding-sm ${CONTROL_TYPOGRAPHY_CLASSES.sm}`,\n md: `h-control-md px-control-padding-md ${CONTROL_TYPOGRAPHY_CLASSES.md}`,\n lg: `h-control-lg px-control-padding-lg ${CONTROL_TYPOGRAPHY_CLASSES.lg}`,\n xlg: `h-control-xlg px-control-padding-xlg ${CONTROL_TYPOGRAPHY_CLASSES.xlg}`,\n};\nconst CONTROL_MIN_SIZE_CLASSES = {\n xs: `min-h-control-xs px-control-padding-xs ${CONTROL_TYPOGRAPHY_CLASSES.xs}`,\n sm: `min-h-control-sm px-control-padding-sm ${CONTROL_TYPOGRAPHY_CLASSES.sm}`,\n md: `min-h-control-md px-control-padding-md ${CONTROL_TYPOGRAPHY_CLASSES.md}`,\n lg: `min-h-control-lg px-control-padding-lg ${CONTROL_TYPOGRAPHY_CLASSES.lg}`,\n xlg: `min-h-control-xlg px-control-padding-xlg ${CONTROL_TYPOGRAPHY_CLASSES.xlg}`,\n};\nconst CONTROL_MULTILINE_SIZE_CLASSES = {\n xs: `min-h-control-multiline-xs px-control-padding-xs py-1 ${CONTROL_TYPOGRAPHY_CLASSES.xs}`,\n sm: `min-h-control-multiline-sm px-control-padding-sm py-1.5 ${CONTROL_TYPOGRAPHY_CLASSES.sm}`,\n md: `min-h-control-multiline-md px-control-padding-md py-2 ${CONTROL_TYPOGRAPHY_CLASSES.md}`,\n lg: `min-h-control-multiline-lg px-control-padding-lg py-2 ${CONTROL_TYPOGRAPHY_CLASSES.lg}`,\n xlg: `min-h-control-multiline-xlg px-control-padding-xlg py-2 ${CONTROL_TYPOGRAPHY_CLASSES.xlg}`,\n};\nconst FIELD_CONTROL_ROOT_CLASSES = [\n 'flex w-full min-w-0 items-center gap-control-gap outline-none',\n];\nconst FIELD_CONTROL_MULTILINE_ROOT_CLASSES = [\n 'flex w-full min-w-0 gap-control-gap outline-none',\n];\nconst FIELD_CONTROL_INPUT_CLASSES = [\n 'ui-field-text border-0 bg-transparent p-0 text-inherit outline-none',\n];\nconst FIELD_CONTROL_ACTION_CLASSES = [\n 'inline-flex size-control-xs shrink-0 items-center justify-center rounded-control-sm border-0 bg-transparent',\n 'text-current outline-none',\n];\nconst FIELD_CONTROL_NATIVE_CLASSES = [\n 'ui-field-text [--ui-field-font-size:var(--ui-control-font-size)] w-full border-0 bg-transparent text-inherit outline-none',\n];\nconst FIELD_LABEL_CLASSES = 'font-label text-label [font-weight:var(--font-weight-label)] text-label-ink';\nconst FIELD_DESCRIPTION_CLASSES = 'font-description text-description [font-weight:var(--font-weight-description)] text-surface-ink-muted';\nconst POPOVER_GEOMETRY_CLASSES = [\n 'absolute inset-auto left-0 top-0 z-popover m-0 h-auto',\n 'outline-none',\n];\nconst INTERACTIVE_ITEM_CLASSES = [\n 'ui-interactive:hover:bg-interaction-hover',\n 'ui-interactive:ui-active:bg-interaction-pressed',\n 'ui-interactive:ui-selected:bg-interaction-selected',\n 'ui-interactive:ui-selected:hover:bg-interaction-selected-hover',\n];\nconst SELECTION_COLORS = ['neutral', 'accent'] as const;\nconst INTERACTION_TREATMENTS = ['tonal', 'edge', 'combined'] as const;\nconst OPTION_ITEM_CLASSES = [\n 'flex h-menu-item w-full cursor-default select-none items-center gap-2 rounded-control-sm px-menu-item-padding-inline',\n 'text-left font-menu-item text-menu-item [font-weight:var(--font-weight-menu-item)] outline-none',\n 'data-disabled:pointer-events-none',\n];\nconst OPTION_ICON_CLASSES = 'size-icon shrink-0 text-current opacity-70';\nconst OPTION_META_CLASSES = 'ml-auto shrink-0 font-metadata text-metadata [font-weight:var(--font-weight-metadata)] text-current opacity-70';\nconst OPTION_INDICATOR_CLASSES = 'ml-auto size-icon shrink-0 text-current opacity-0 data-selected:opacity-100';\n\ntype ControlVariant = typeof CONTROL_VARIANTS[number];\ntype IconVariant = typeof ICON_VARIANTS[number];\ntype CommonButtonType = typeof BUTTON_TYPES[number];\ntype Alignment = typeof ALIGNMENTS[number];\ntype Position = typeof POSITIONS[number];\ntype EdgePosition = typeof EDGE_POSITIONS[number];\ntype Orientation = typeof ORIENTATIONS[number];\ntype IndicatorPlacement = typeof INDICATOR_PLACEMENTS[number];\ntype SelectionColor = typeof SELECTION_COLORS[number];\ntype InteractionTreatment = typeof INTERACTION_TREATMENTS[number];\ntype DefaultVariant = typeof DEFAULT_VARIANTS[number];\ntype HeadingLevel = typeof HEADING_LEVELS[number];\ntype ComponentRadius = typeof COMPONENT_RADII[number];\ntype SurfaceRadius = typeof SURFACE_RADII[number];\n\nexport {\n ABSOLUTE_SURFACE_REFERENCES,\n ALIGNMENTS,\n BUTTON_TYPES,\n COMPONENT_RADII,\n CONTROL_RADIUS_CLASSES,\n CONTROL_MIN_SIZE_CLASSES,\n CONTROL_MULTILINE_SIZE_CLASSES,\n CONTROL_SIZES,\n CONTROL_SIZE_CLASSES,\n CONTROL_TYPOGRAPHY_CLASSES,\n CONTROL_VARIANTS,\n DEFAULT_VARIANTS,\n EDGE_POSITIONS,\n ELEVATION_REFERENCES,\n FIELD_CONTROL_ACTION_CLASSES,\n FIELD_CONTROL_INPUT_CLASSES,\n FIELD_CONTROL_MULTILINE_ROOT_CLASSES,\n FIELD_CONTROL_NATIVE_CLASSES,\n FIELD_CONTROL_ROOT_CLASSES,\n FIELD_DESCRIPTION_CLASSES,\n FIELD_LABEL_CLASSES,\n elevationReferenceClasses,\n HEADING_LEVELS,\n ICON_COLORS,\n ICON_COLOR_CLASSES,\n ICON_VARIANTS,\n INDICATOR_PLACEMENTS,\n INTERACTION_TREATMENTS,\n INTERACTIVE_ITEM_CLASSES,\n LAYOUT_GAP_CLASSES,\n LAYOUT_GAP_X_CLASSES,\n LAYOUT_GAP_Y_CLASSES,\n LAYOUT_MARGIN_CLASSES,\n LAYOUT_MARGIN_X_CLASSES,\n LAYOUT_MARGIN_Y_CLASSES,\n LAYOUT_PADDING_CLASSES,\n LAYOUT_PADDING_X_CLASSES,\n LAYOUT_PADDING_Y_CLASSES,\n LAYOUT_SPACES,\n OPTION_ICON_CLASSES,\n OPTION_INDICATOR_CLASSES,\n OPTION_ITEM_CLASSES,\n OPTION_META_CLASSES,\n ORIENTATIONS,\n POPOVER_GEOMETRY_CLASSES,\n POSITIONS,\n SELECTION_COLORS,\n SURFACE_RADII,\n SURFACE_RADIUS_CLASSES,\n SURFACE_REFERENCES,\n TEXT_FONTS,\n TYPOGRAPHY_COLOR_CLASSES,\n TYPOGRAPHY_COLORS,\n TYPOGRAPHY_FONT_CLASSES,\n TYPOGRAPHY_FONTS,\n TYPOGRAPHY_SIZE_CLASSES,\n TYPOGRAPHY_SIZES,\n TYPOGRAPHY_WEIGHT_CLASSES,\n TYPOGRAPHY_WEIGHTS,\n};\nexport type {InteractionTreatment, SelectionColor};\nexport type {\n AbsoluteSurfaceReference,\n Alignment,\n CommonButtonType,\n ComponentRadius,\n ControlSize,\n ControlVariant,\n DefaultVariant,\n EdgePosition,\n ElevationReference,\n HeadingLevel,\n IconColor,\n IconVariant,\n IndicatorPlacement,\n LayoutSpace,\n Orientation,\n Position,\n SurfaceRadius,\n SurfaceReference,\n TextFont,\n TypographyColor,\n TypographyFont,\n TypographySize,\n TypographyWeight,\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ var e=[`xs`,`sm`,`md`,`lg`,`xlg`];export{e as t};
2
+ //# sourceMappingURL=control-size-BcDu1m1N.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-size-BcDu1m1N.js","names":[],"sources":["../../../../../../../../client/src/runtime/control-size.ts"],"sourcesContent":["const CONTROL_SIZES = ['xs', 'sm', 'md', 'lg', 'xlg'] as const;\ntype ControlSize = typeof CONTROL_SIZES[number];\n\nexport {CONTROL_SIZES};\nexport type {ControlSize};\n"],"mappings":"AAAA,IAAM,EAAgB,CAAC,KAAM,KAAM,KAAM,KAAM,KAAK"}
@@ -0,0 +1,2 @@
1
+ import{n as e,t}from"./styles-CX2j92ex.js";import{i as n,r}from"./capability-shortcut-BFvGIAs8.js";var i=`font-body text-1 [font-weight:var(--font-weight-normal)]`,a=t({definition:{component:`ui.keybinding`,parts:{root:{base:`inline-flex shrink-0 items-center gap-0.5 whitespace-nowrap text-inherit`,variants:{variant:{outline:i,plain:``,surface:i}},defaults:{variant:`outline`}},key:{base:`inline-flex items-center justify-center`},separator:{base:`[font:inherit] text-current`}}}}),o=t=>{let i=``,o=new Set,s=()=>{},c=()=>{t.querySelectorAll(`[data-ui-keybinding-key]`).forEach((e,t)=>{e.toggleAttribute(`data-pressed`,o.has(t))})},l=()=>{t.replaceChildren(),r(i).forEach((n,r)=>{if(r>0){let n=t.ownerDocument.createElement(`span`);n.textContent=`then`,n.setAttribute(`data-ui-keybinding-separator`,``),n.className=e({part:a.parts.separator}),t.append(n)}n.forEach(({label:n,token:r})=>{let i=t.ownerDocument.createElement(`kbd`);i.setAttribute(`data-ui-keybinding-key`,``),i.dataset.key=r,i.className=e({part:a.parts.key}),i.textContent=n,t.append(i)})}),t.hidden=t.childElementCount===0,c()};return{setValue(e){let r=typeof e==`string`?e.trim():``;if(r===i){t.childElementCount===0&&l();return}i=r,l();let a=s;s=n(t.ownerDocument,i,e=>{o=e,c()}),a()},destroy:()=>s()}};export{a as n,o as t};
2
+ //# sourceMappingURL=controller-de7TruDm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller-de7TruDm.js","names":[],"sources":["../../../../../../../../client/src/components/keybinding/styles.ts","../../../../../../../../client/src/components/keybinding/controller.ts"],"sourcesContent":["import {defineStyles} from '../../runtime';\n\nconst KEYCAP_TYPOGRAPHY = 'font-body text-1 [font-weight:var(--font-weight-normal)]';\n\nconst keybindingStyles = defineStyles({definition: {\n component: 'ui.keybinding',\n parts: {\n root: {\n base: 'inline-flex shrink-0 items-center gap-0.5 whitespace-nowrap text-inherit',\n variants: {\n variant: {\n outline: KEYCAP_TYPOGRAPHY,\n plain: '',\n surface: KEYCAP_TYPOGRAPHY,\n },\n },\n defaults: {variant: 'outline'},\n },\n key: {\n base: 'inline-flex items-center justify-center',\n },\n separator: {\n base: '[font:inherit] text-current',\n },\n },\n}});\n\nexport {keybindingStyles};\n\nexport const styles = [keybindingStyles] as const;\n","import {formatShortcutKeys, observeShortcutFeedback} from '@client/capabilities/shortcut';\nimport {resolveStyle} from '@client/runtime/styles';\nimport {keybindingStyles} from './styles';\n\ntype KeybindingController = {\n setValue(value: unknown): void;\n destroy(): void;\n};\n\nconst createKeybindingController = (root: HTMLElement): KeybindingController => {\n let value = '';\n let pressedKeys: ReadonlySet<number> = new Set();\n let stopObserving = (): void => {};\n\n const syncPressed = (): void => {\n root.querySelectorAll<HTMLElement>('[data-ui-keybinding-key]').forEach((key, index) => {\n key.toggleAttribute('data-pressed', pressedKeys.has(index));\n });\n };\n const render = (): void => {\n root.replaceChildren();\n formatShortcutKeys(value).forEach((step, index) => {\n if (index > 0) {\n const separator = root.ownerDocument.createElement('span');\n separator.textContent = 'then';\n separator.setAttribute('data-ui-keybinding-separator', '');\n separator.className = resolveStyle({part: keybindingStyles.parts.separator});\n root.append(separator);\n }\n step.forEach(({label, token}) => {\n const key = root.ownerDocument.createElement('kbd');\n key.setAttribute('data-ui-keybinding-key', '');\n key.dataset.key = token;\n key.className = resolveStyle({part: keybindingStyles.parts.key});\n key.textContent = label;\n root.append(key);\n });\n });\n root.hidden = root.childElementCount === 0;\n syncPressed();\n };\n return {\n setValue(nextValue): void {\n const next = typeof nextValue === 'string' ? nextValue.trim() : '';\n if (next === value) {\n if (root.childElementCount === 0) render();\n return;\n }\n value = next;\n render();\n const previousObserver = stopObserving;\n stopObserving = observeShortcutFeedback(root.ownerDocument, value, (keys) => {\n pressedKeys = keys;\n syncPressed();\n });\n previousObserver();\n },\n destroy: () => stopObserving(),\n };\n};\n\nexport {createKeybindingController};\nexport type {KeybindingController};\n"],"mappings":"mGAEA,IAAM,EAAoB,2DAEpB,EAAmB,EAAa,CAAC,WAAY,CAC/C,UAAW,gBACX,MAAO,CACH,KAAM,CACF,KAAM,2EACN,SAAU,CACN,QAAS,CACL,QAAS,EACT,MAAO,GACP,QAAS,CACb,CACJ,EACA,SAAU,CAAC,QAAS,SAAS,CACjC,EACA,IAAK,CACD,KAAM,yCACV,EACA,UAAW,CACP,KAAM,6BACV,CACJ,CACJ,CAAC,CAAC,EChBI,EAA8B,GAA4C,CAC5E,IAAI,EAAQ,GACR,EAAmC,IAAI,IACvC,MAA4B,CAAC,EAE3B,MAA0B,CAC5B,EAAK,iBAA8B,0BAA0B,CAAC,CAAC,SAAS,EAAK,IAAU,CACnF,EAAI,gBAAgB,eAAgB,EAAY,IAAI,CAAK,CAAC,CAC9D,CAAC,CACL,EACM,MAAqB,CACvB,EAAK,gBAAgB,EACrB,EAAmB,CAAK,CAAC,CAAC,SAAS,EAAM,IAAU,CAC/C,GAAI,EAAQ,EAAG,CACX,IAAM,EAAY,EAAK,cAAc,cAAc,MAAM,EACzD,EAAU,YAAc,OACxB,EAAU,aAAa,+BAAgC,EAAE,EACzD,EAAU,UAAY,EAAa,CAAC,KAAM,EAAiB,MAAM,SAAS,CAAC,EAC3E,EAAK,OAAO,CAAS,CACzB,CACA,EAAK,SAAS,CAAC,QAAO,WAAW,CAC7B,IAAM,EAAM,EAAK,cAAc,cAAc,KAAK,EAClD,EAAI,aAAa,yBAA0B,EAAE,EAC7C,EAAI,QAAQ,IAAM,EAClB,EAAI,UAAY,EAAa,CAAC,KAAM,EAAiB,MAAM,GAAG,CAAC,EAC/D,EAAI,YAAc,EAClB,EAAK,OAAO,CAAG,CACnB,CAAC,CACL,CAAC,EACD,EAAK,OAAS,EAAK,oBAAsB,EACzC,EAAY,CAChB,EACA,MAAO,CACH,SAAS,EAAiB,CACtB,IAAM,EAAO,OAAO,GAAc,SAAW,EAAU,KAAK,EAAI,GAChE,GAAI,IAAS,EAAO,CACZ,EAAK,oBAAsB,GAAG,EAAO,EACzC,MACJ,CACA,EAAQ,EACR,EAAO,EACP,IAAM,EAAmB,EACzB,EAAgB,EAAwB,EAAK,cAAe,EAAQ,GAAS,CACzE,EAAc,EACd,EAAY,CAChB,CAAC,EACD,EAAiB,CACrB,EACA,YAAe,EAAc,CACjC,CACJ"}
@@ -0,0 +1,2 @@
1
+ import{parseAssetDescriptors as e}from"../bridge-B7apK0M-.js";import{t}from"./layout-task-B6P8q7BH.js";import{n}from"./fragment-DVphuQVV.js";import{n as r}from"./dom-invalidation-Dw6clnS4.js";import{c as i,f as a,l as o,n as s,o as c}from"./codecs-CQ7olTJL.js";import{n as l}from"./focus-BvBkrIcj.js";import{t as u}from"./scroll-area-schema-DZgYyysJ.js";import{n as d,t as ee}from"./virtualizer-size-CTy2gO64.js";var f=e=>Math.max(0,Math.floor(e)),p=t=>t===null?[]:e(JSON.parse(t)),te=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=f(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=f(t))}catch{}s.remove()}let c=document.createElement(`div`);return c.append(r.content),{html:c.innerHTML,assets:p(e.headers.get(t.assetsHeader)),totalItems:i}},m=(e,t=0)=>Number.isFinite(e)?e:t,h=e=>Math.max(0,Math.floor(m(e))),g=(e,t=1)=>Math.max(2**-52,m(e,t)),_=(e,t,n)=>Math.min(n,Math.max(t,e)),v=(e,t)=>{let n=h(t.total),r=g(t.itemSize),i=Math.max(0,m(t.viewportSize)),a=h(t.buffer),o=Math.min(n,Math.max(1,Math.ceil(i/r))),s=Math.max(0,n-o),c=_(Math.max(0,m(t.scrollOffset)),0,Math.max(0,n*r-i)),l=_(Math.floor(c/r),0,s),u=Math.min(n,o+a*2),d=_(l-a,0,Math.max(0,n-u));return{axis:e,start:d,count:u,total:n,itemSize:r,viewportSize:i,scrollOffset:c,buffer:a,visibleStart:l,visibleCount:o,guardStart:Math.min(n,d+a),guardEnd:Math.max(0,d+u-a),translateOffset:d*r,spacerSize:n*r}},y={compute(e){let t={};return e.axes.x&&(t.x=v(`x`,e.axes.x)),e.axes.y&&(t.y=v(`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:h(n)}}}:e},scrollTo(e,t){let n=h(e.total),r=g(e.itemSize),i=Math.max(0,m(e.viewportSize)),a=_(h(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,m(e.scrollOffset));if(a>=t&&o<=t+i)return _(t,0,s);c=a<t?a:o-i}return _(c,0,s)}},ne=(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}},re={fetchUrl:a,cursor:s,totalItems:i.min(0).default(0),itemSize:d(`md`),bufferSize:i.min(1).default(50),overscan:i.min(0).default(0),axis:o([`vertical`],`vertical`),initialIndex:i.min(0).default(0),startParam:a.default(`start`),countParam:a.default(`count`),totalParam:a.default(`total`),windowParam:a.default(`window`),totalHeader:a.default(`X-Trellis-Total-Items`),assetsHeader:a.default(`X-Trellis-Assets`),metaSelector:a.default(`template[data-ui-virtualizer-meta]`),scrollArea:s.default(!0),scrollAreaType:u.type,scrollAreaGutter:u.gutter,fill:s.default(!0),class:a,scrollAreaClass:a,viewportClass:a,spacerClass:a,blockClass:a},b=(e,t=0)=>Math.max(t,Math.floor(Number.isFinite(e)?e:t)),x=(e,i={})=>{let a=null,o=null,s=!1,u=null,d=[],f=0,p=0,m=null,h=``,g=null,_=0,v=null,x=null,S=null,C=null,w=0,T=!1,E=null,D=null,O=!1,k=new Map,A=ne(y),j=i.cursor,M=j?.query,N=0,ie=0,P=!1,F=!1,I=0,L=null,R=null,z=null,B=new Map,V=new Map,H=(e,t)=>{a?.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:t}))},U=()=>{if(!a||!u)return;let e=V.size===0?0:Math.max(...[...V.values()].map(({startIndex:e,count:t})=>e+t)),t=[...V.values()].some(({page:t,startIndex:n,count:r})=>n+r===e&&t.next.available),n=j&&f===0?e+(t?b($.props.bufferSize,1):0):f;a.toggleAttribute(`data-loading`,w>0),a.toggleAttribute(`data-empty`,j?V.size===0&&w===0:f===0),u.style.height=`${Math.max(n*p,p)}px`},W=e=>{let t=b(e);return t!==f&&(f=t,U(),H(`ui:virtualizer-total-change`,{totalItems:f}),H(`ui:virtualizer-axis-total-change`,{axis:`y`,total:f,window:null}),!0)},ae=e=>y.compute({axes:{y:{total:f,itemSize:p,viewportSize:$.props.bufferSize*p,scrollOffset:e*p,buffer:0}}}),oe=e=>{if(f===0||!j&&!$.props.fetchUrl.trim())return[];let t=b($.props.bufferSize,1),n=Math.min(f-1,Math.floor(Math.max(0,e)/p)),r=Math.floor(n/t)*t,i=Math.floor((f-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(ae)},se=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}`},ce=async(t,r,i)=>{let a=t.element.contains(document.activeElement),s=await n(e,t.element,r.html,{assets:r.assets,shouldReplace:i});return s&&a&&l(o),s},le=(e,t,n)=>{e.element.style.setProperty(`--ui-virtualizer-item-size`,`${p}px`),e.element.style.height=`${n*p}px`,e.element.style.transform=`translateY(${t*p}px)`},ue=()=>{if(w=Math.max(0,w-1),U(),w>0||g===null||T)return;let e=g;g=null,ve(e)},de=async(e,t,n)=>{let r=t.axes.y;if(!r)return;let i=new AbortController;k.set(e.key,i),w+=1,U(),a?.removeAttribute(`data-error`),H(`ui:virtualizer-load-start`,{block:e.key,window:t});try{let o=globalThis.crypto?.randomUUID?.()??`${Date.now()}-${n.requestGeneration}`,s=await fetch(se(t),{method:`GET`,headers:{Accept:`text/html`,"X-Trellis-Virtualizer":`true`,"X-Trellis-Request-ID":o},signal:i.signal});if(!s.ok&&s.status!==204){A.fail(n),a?.setAttribute(`data-error`,``),H(`ui:virtualizer-error`,{block:e.key,window:t,status:s.status});return}let c=await te(s,$.props);if(A.pending(e.key)!==n||T||!await ce(e,c,()=>A.pending(e.key)===n&&!T))return;let l=c.totalItems!==null&&W(c.totalItems);if(!A.commit(n,t))return;le(e,r.start,r.count),H(`ui:virtualizer-load`,{block:e.key,window:t}),l&&Q.schedule()}catch(r){if(i.signal.aborted)return;A.fail(n),a?.setAttribute(`data-error`,``),H(`ui:virtualizer-error`,{block:e.key,window:t,status:0,error:r})}finally{k.get(e.key)===i&&k.delete(e.key),ue()}},G=()=>b($.props.bufferSize,1),K=()=>[...V.values()].sort((e,t)=>e.startIndex-t.startIndex),q=(e,t)=>!T&&t.generation===N&&B.get(e.key)?.id===t.id,J=async(e,t,n,r,i=`page`)=>{if(!j||B.has(e.key))return null;let o=r??new AbortController,s={generation:N,id:++ie,aborter:o};B.set(e.key,s),w+=1,U(),a?.removeAttribute(`data-error`),H(`ui:virtualizer-load-start`,{block:e.key,mode:`cursor`});try{let r=await t(o.signal);if(!q(e,s))return null;if(i===`seek`&&r.startIndex===void 0)throw Error(`Cursor seek response requires startIndex.`);let a=await j.responseAdapter(r.content,r);if(!q(e,s))return null;let c=r.startIndex===void 0?b(n):b(r.startIndex),l=a.totalItems??f,u=a.itemCount===void 0?G():b(a.itemCount),d=l>0?Math.min(G(),Math.max(0,l-c)):u;if(!await ce(e,a,()=>q(e,s))||!q(e,s))return null;a.totalItems===null?r.next.available||W(c+d):W(a.totalItems);let ee={block:e,page:r,startIndex:c,count:d};return V.set(e.key,ee),le(e,c,d),H(`ui:virtualizer-load`,{block:e.key,mode:`cursor`,page:{previous:r.previous,next:r.next,...r.startIndex===void 0?{}:{startIndex:r.startIndex}},startIndex:c}),ee}catch(t){return o.signal.aborted||!q(e,s)?null:(F=!0,a?.setAttribute(`data-error`,``),H(`ui:virtualizer-error`,{block:e.key,mode:`cursor`,status:0,error:t}),null)}finally{B.get(e.key)===s&&B.delete(e.key),w=Math.max(0,w-1),U()}},Y=()=>{P=!1,Q.schedule()},fe=async()=>{if(!j||P||F||V.size>0)return;P=!0;let e=N;try{let t=await J(d[0],e=>j.dataSource.first({limit:G(),query:M,signal:e}),0);if(!t||e!==N)return;let n=t;for(let t of d.slice(1)){if(!n.page.next.available)break;let r=n.page.next.cursor,i=await J(t,e=>j.dataSource.next({cursor:r,limit:G(),query:M,signal:e}),n.startIndex+n.count);if(!i||e!==N)break;n=i}}finally{e===N&&Y()}},pe=async()=>{if(!j||P)return;let e=K(),t=e.at(-1);if(!t?.page.next.available)return;let n=e[0]?.block;if(!n)return;P=!0;let r=N,i=t.page.next.cursor;try{await J(n,e=>j.dataSource.next({cursor:i,limit:G(),query:M,signal:e}),t.startIndex+t.count)}finally{r===N&&Y()}},me=async()=>{if(!j||P)return;let e=K(),t=e[0];if(!t?.page.previous.available)return;let n=e.at(-1)?.block;if(!n)return;P=!0;let r=N,i=t.page.previous.cursor;try{await J(n,e=>j.dataSource.previous({cursor:i,limit:G(),query:M,signal:e}),Math.max(0,t.startIndex-G()))}finally{r===N&&Y()}},X=()=>{I&&window.clearTimeout(I),I=0,L=null},he=async t=>{let r=j?.dataSource.seek;if(!j||!r)return;z?.abort(),B.forEach(({aborter:e})=>e.abort()),B.clear(),P=!0;let i=N,a=new AbortController;z=a,R=t;let o=d[1];V.clear(),d.forEach(t=>{t!==o&&n(e,t.element,``)});try{let e=await J(o,e=>r({index:t,limit:G(),query:M,signal:e}),t,a,`seek`);if(!e||i!==N||z!==a)return;let n=[];if(e.page.previous.available){let t=e.page.previous.cursor;n.push(J(d[0],e=>j.dataSource.previous({cursor:t,limit:G(),query:M,signal:e}),Math.max(0,e.startIndex-G())))}if(e.page.next.available){let t=e.page.next.cursor;n.push(J(d[2],e=>j.dataSource.next({cursor:t,limit:G(),query:M,signal:e}),e.startIndex+e.count))}await Promise.all(n)}finally{z===a&&(z=null,R=null,i===N&&Y())}},ge=e=>{if(!j?.dataSource.seek)return;let t=f>0?Math.min(Math.max(0,f-1),b(e)):b(e);K().some(e=>t>=e.startIndex&&t<e.startIndex+e.count)||L!==t&&R!==t&&(X(),L=t,I=window.setTimeout(()=>{I=0,L=null,he(t)},b(j.seekDebounce??100)))},_e=e=>{if(!j)return;let t=f>0?Math.min(f-1,Math.floor(Math.max(0,e)/p)):Math.floor(Math.max(0,e)/p);if(z&&j.dataSource.seek&&R!==t){ge(t);return}if(P||w>0)return;let n=K();if(n.length===0){fe();return}let r=n.find(e=>t>=e.startIndex&&t<e.startIndex+e.count);if(r){X(),r===n[0]&&r.page.previous.available?me():r===n.at(-1)&&r.page.next.available&&pe();return}if(j.dataSource.seek){ge(t);return}t<n[0].startIndex?me():pe()},ve=t=>{if(p<=0)return;if(j){_e(t);return}if(w>0){g=t;return}let r=oe(t),i=r.map(e=>e.key).join(`,`),a=Math.min(Math.max(0,f-1),Math.floor(Math.max(0,t)/p)),o=r.find(e=>{let t=e.axes.y;return t&&a>=t.start&&a<t.start+t.count})??r[0];if(o&&h!==o.key){h=o.key;let e=o.axes.y;H(`ui:virtualizer-window`,{window:o}),H(`ui:virtualizer-range`,{start:e.start,count:e.count,end:e.start+e.count,window:o})}if(!i){d.forEach(t=>void n(e,t.element,``));return}let s=new Set;r.forEach(e=>{let t=d.find(t=>A.mounted(t.key)?.key===e.key);t&&s.add(t)});let c=d.filter(e=>!s.has(e));r.forEach(e=>{if(d.some(t=>A.mounted(t.key)?.key===e.key))return;let t=c.shift();if(!t)return;let n=A.begin(t.key,e);n&&de(t,e,n)})},Z=()=>{k.forEach(e=>e.abort()),k.clear(),w=0,g=null,h=``,A.invalidate(),N+=1,X(),z?.abort(),z=null,R=null,B.forEach(({aborter:e})=>e.abort()),B.clear(),V.clear(),P=!1,F=!1,d.forEach(t=>{t.element.style.height=``,t.element.style.transform=``,n(e,t.element,``)}),U()},Q=t({measure:()=>o?{height:o.clientHeight,scrollTop:o.scrollTop}:null,apply:e=>{if(!e||!o||T)return;if(m!==null){let e=p;p=m,m=null,e>0&&e!==p&&Z()}if(p<=0)return;_=e.height,U();let t=e.scrollTop;C&&(t=`offset`in C?C.offset:y.scrollTo({total:f,itemSize:p,viewportSize:_,scrollOffset:t,buffer:$.props.bufferSize},{axis:`y`,...C}),C=null,o.scrollTop=t),ve(t)}}),ye=()=>{S?.(),m=null,S=ee(a,$.props.itemSize,e=>{m=e,Q.schedule()})},$={supportsSeek:!!j?.dataSource.seek,props:null,init(){if(a=this.$el,T=!1,this.props=c({el:a,schema:re,onChange:(e,t)=>{O||(t.some(({key:e})=>e===`itemSize`)&&ye(),t.some(({key:e})=>e===`totalItems`)?(W(this.props.totalItems),j||this.reload()):t.some(({key:e})=>[`fetchUrl`,`bufferSize`].includes(e))&&this.reload())}}),f=j?b(this.props.totalItems):this.props.fetchUrl.trim()?Math.max(1,b(this.props.totalItems)):0,o=a.querySelector(`[data-ui-scroll-area-viewport]`)??a,s=!o.hasAttribute(`tabindex`),s&&(o.tabIndex=-1),u=a.querySelector(`[data-ui-virtualizer-spacer]`),d=Array.from(a.querySelectorAll(`[data-ui-virtualizer-block]`)).slice(0,3).map((e,t)=>({element:e,key:`block-${t+1}`})),!u||d.length!==3)throw Error(`Virtualizer requires one spacer and three block containers.`);o.style.overscrollBehavior=`contain`,o.style.overflowAnchor=`none`,E=new AbortController,o.addEventListener(`scroll`,()=>Q.schedule(),{passive:!0,signal:E.signal}),x=new ResizeObserver(e=>{let t=e[0]?.contentRect.height;t!==void 0&&t!==v&&(v=t,Q.schedule())}),x.observe(o),D=r(a,{invalidateDom:()=>$.reload()}),C={index:this.props.initialIndex,align:`start`},ye(),U(),Q.schedule()},destroy(){T=!0,Q.cancel(),x?.disconnect(),x=null,S?.(),S=null,E?.abort(),E=null,D?.(),D=null,Z(),s&&o?.getAttribute(`tabindex`)===`-1`&&o.removeAttribute(`tabindex`),s=!1,this.props.disconnect(),a=null,o=null,u=null,d=[]},scrollToIndex(e,t=`start`){o&&(C={index:e,align:t},Q.schedule())},setTotalItems(e){W(e),j?Q.schedule():this.reload()},setUrl(e,t={}){let n=String(e).trim();O=!0,this.props.fetchUrl=n,O=!1,W(n?Math.max(1,b(this.props.totalItems)):0),t.reset??!0?this.reset():this.reload()},setQuery(e){j&&(M=e,this.reset())},reset(e={}){this.reload({scrollTop:e.scrollTop??0})},reload(e={}){Z(),C=e.scrollTop===void 0?null:{offset:Math.max(0,e.scrollTop)},Q.schedule()}};return $},S=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}}},C=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=S(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{te as a,y as i,x as n,ne as r,C as t};
2
+ //# sourceMappingURL=cursor-data-source-DdiMUeJM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-data-source-DdiMUeJM.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';\nimport {virtualizerItemSize} from './virtualizer-size';\nimport {scrollAreaSchema} from './scroll-area-schema';\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: virtualizerItemSize('md'),\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 scrollAreaType: scrollAreaSchema.type,\n scrollAreaGutter: scrollAreaSchema.gutter,\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 {focusElement} from './focus';\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 {observeVirtualizerItemSize} from './virtualizer-size';\nimport {createLayoutTask} from './layout-task';\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 viewportTabIndexAdded = false;\n let spacer: HTMLElement | null = null;\n let blocks: BlockRecord[] = [];\n let totalItems = 0;\n let itemSize = 0;\n let pendingItemSize: number | null = null;\n let currentWindowKey = '';\n let latestScrollTop: number | null = null;\n let viewportHeight = 0;\n let observedViewportHeight: number | null = null;\n let viewportObserver: ResizeObserver | null = null;\n let disconnectItemSize: (() => void) | null = null;\n let requestedScroll: {index: number; align: VirtualScrollAlign} | {offset: number} | null = null;\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 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 * itemSize, 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,\n viewportSize: component.props.bufferSize * itemSize,\n scrollOffset: start * 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) / 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) focusElement(viewport);\n return replaced;\n };\n const positionBlock = (block: BlockRecord, startIndex: number, count: number): void => {\n block.element.style.setProperty('--ui-virtualizer-item-size', `${itemSize}px`);\n block.element.style.height = `${count * itemSize}px`;\n block.element.style.transform = `translateY(${startIndex * 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) presentation.schedule();\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 presentation.schedule();\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) / itemSize))\n : Math.floor(Math.max(0, scrollTop) / itemSize);\n if (cursorSeekAborter && cursor.dataSource.seek && cursorActiveSeekIndex !== index) {\n scheduleCursorSeek(index);\n return;\n }\n if (cursorPaging || loading > 0) {\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 (itemSize <= 0) return;\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) / 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 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 presentation = createLayoutTask({\n measure: () => viewport ? {\n height: viewport.clientHeight,\n scrollTop: viewport.scrollTop,\n } : null,\n apply: (measurement) => {\n if (!measurement || !viewport || destroyed) return;\n if (pendingItemSize !== null) {\n const previousSize = itemSize;\n itemSize = pendingItemSize;\n pendingItemSize = null;\n if (previousSize > 0 && previousSize !== itemSize) invalidate();\n }\n if (itemSize <= 0) return;\n viewportHeight = measurement.height;\n syncState();\n let scrollTop = measurement.scrollTop;\n if (requestedScroll) {\n scrollTop = 'offset' in requestedScroll ? requestedScroll.offset : fixedAxisWindowAdapter.scrollTo({\n total: totalItems, itemSize, viewportSize: viewportHeight,\n scrollOffset: scrollTop, buffer: component.props.bufferSize,\n }, {axis: 'y', ...requestedScroll});\n requestedScroll = null;\n viewport.scrollTop = scrollTop;\n }\n reconcile(scrollTop);\n },\n });\n const observeItemSize = (): void => {\n disconnectItemSize?.();\n pendingItemSize = null;\n disconnectItemSize = observeVirtualizerItemSize(root!, component.props.itemSize, pixels => {\n pendingItemSize = pixels;\n presentation.schedule();\n });\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 === 'itemSize')) {\n observeItemSize();\n }\n if (changes.some(({key}) => key === 'totalItems')) {\n updateTotal(this.props.totalItems);\n if (!cursor) this.reload();\n } else if (changes.some(({key}) => ['fetchUrl', '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 // Recycled rows hand focus back here without adding a sequential tab stop.\n viewportTabIndexAdded = !viewport.hasAttribute('tabindex');\n if (viewportTabIndexAdded) viewport.tabIndex = -1;\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', () => presentation.schedule(), {passive: true, signal: listenerAborter.signal});\n viewportObserver = new ResizeObserver((entries) => {\n const height = entries[0]?.contentRect.height;\n if (height === undefined || height === observedViewportHeight) return;\n observedViewportHeight = height;\n presentation.schedule();\n });\n viewportObserver.observe(viewport);\n unregisterDomInvalidation = registerDomInvalidationOwner(root, {\n invalidateDom: () => component.reload(),\n });\n requestedScroll = {index: this.props.initialIndex, align: 'start'};\n observeItemSize();\n syncState();\n presentation.schedule();\n },\n destroy(): void {\n destroyed = true;\n presentation.cancel();\n viewportObserver?.disconnect();\n viewportObserver = null;\n disconnectItemSize?.();\n disconnectItemSize = null;\n listenerAborter?.abort();\n listenerAborter = null;\n unregisterDomInvalidation?.();\n unregisterDomInvalidation = null;\n invalidate();\n if (viewportTabIndexAdded && viewport?.getAttribute('tabindex') === '-1') viewport.removeAttribute('tabindex');\n viewportTabIndexAdded = false;\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 requestedScroll = {index, align};\n presentation.schedule();\n },\n setTotalItems(count): void {\n updateTotal(count);\n if (cursor) presentation.schedule();\n else this.reload();\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 invalidate();\n requestedScroll = options.scrollTop === undefined ? null : {offset: Math.max(0, options.scrollTop)};\n presentation.schedule();\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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"}
@@ -0,0 +1,2 @@
1
+ var e=new Set,t=t=>{let n;for(let r of[...e])try{if(!e.has(r)||!r.isEnabled())continue;let i=n??=t.composedPath();r.roots().some(e=>e!=null&&i.includes(e))||r.onDismiss(t)}catch(e){queueMicrotask(()=>{throw e})}},n=({isEnabled:n,roots:r,onDismiss:i})=>{let a={isEnabled:n,roots:r,onDismiss:i};return e.size===0&&document.addEventListener(`pointerdown`,t,{capture:!0}),e.add(a),()=>{e.delete(a)&&e.size===0&&document.removeEventListener(`pointerdown`,t,{capture:!0})}};export{n as t};
2
+ //# sourceMappingURL=dismissable-layer-MzcgNRti.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dismissable-layer-MzcgNRti.js","names":[],"sources":["../../../../../../../../client/src/runtime/dismissable-layer.ts"],"sourcesContent":["type DismissableLayerOptions = {\n isEnabled: () => boolean;\n roots: () => Array<EventTarget | null | undefined>;\n onDismiss: (event: PointerEvent) => void;\n};\n\nconst layers = new Set<DismissableLayerOptions>();\n\nconst handlePointerDown = (event: PointerEvent): void => {\n let path: EventTarget[] | undefined;\n // A dismissal can remove another layer or create one for a later event.\n for (const layer of [...layers]) {\n try {\n if (!layers.has(layer) || !layer.isEnabled()) continue;\n const eventPath = path ??= event.composedPath();\n if (!layer.roots().some(root => root != null && eventPath.includes(root))) layer.onDismiss(event);\n } catch (error) {\n // Native listeners report independently; one failed layer must not block others.\n queueMicrotask(() => { throw error; });\n }\n }\n};\n\nconst addDismissableLayer = ({\n isEnabled,\n roots,\n onDismiss,\n}: DismissableLayerOptions): (() => void) => {\n const layer = {isEnabled, roots, onDismiss};\n if (layers.size === 0) document.addEventListener('pointerdown', handlePointerDown, {capture: true});\n layers.add(layer);\n\n return () => {\n if (!layers.delete(layer)) return;\n if (layers.size === 0) document.removeEventListener('pointerdown', handlePointerDown, {capture: true});\n };\n};\n\nexport {addDismissableLayer};\nexport type {DismissableLayerOptions};\n"],"mappings":"AAMA,IAAM,EAAS,IAAI,IAEb,EAAqB,GAA8B,CACrD,IAAI,EAEJ,IAAK,IAAM,IAAS,CAAC,GAAG,CAAM,EAC1B,GAAI,CACA,GAAI,CAAC,EAAO,IAAI,CAAK,GAAK,CAAC,EAAM,UAAU,EAAG,SAC9C,IAAM,EAAY,IAAS,EAAM,aAAa,EACzC,EAAM,MAAM,CAAC,CAAC,KAAK,GAAQ,GAAQ,MAAQ,EAAU,SAAS,CAAI,CAAC,GAAG,EAAM,UAAU,CAAK,CACpG,OAAS,EAAO,CAEZ,mBAAqB,CAAE,MAAM,CAAO,CAAC,CACzC,CAER,EAEM,GAAuB,CACzB,YACA,QACA,eACyC,CACzC,IAAM,EAAQ,CAAC,YAAW,QAAO,WAAS,EAI1C,OAHI,EAAO,OAAS,GAAG,SAAS,iBAAiB,cAAe,EAAmB,CAAC,QAAS,EAAI,CAAC,EAClG,EAAO,IAAI,CAAK,MAEH,CACJ,EAAO,OAAO,CAAK,GACpB,EAAO,OAAS,GAAG,SAAS,oBAAoB,cAAe,EAAmB,CAAC,QAAS,EAAI,CAAC,CACzG,CACJ"}
@@ -0,0 +1,6 @@
1
+ var e=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);function t(e){if(Array.isArray(e))return e}function n(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function r(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 i(e,t){if(e){if(typeof e==`string`)return r(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)?r(e,t):void 0}}function a(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
2
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function o(e,r){return t(e)||n(e,r)||i(e,r)||a()}var s=e((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.bind=void 0;function t(e,t){var n=t.type,r=t.listener,i=t.options;return e.addEventListener(n,r,i),function(){e.removeEventListener(n,r,i)}}e.bind=t})),c=e((e=>{var t=e&&e.__assign||function(){return t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},t.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0}),e.bindAll=void 0;var n=s();function r(e){if(e!==void 0)return typeof e==`boolean`?{capture:e}:e}function i(e,n){return n==null?e:t(t({},e),{options:t(t({},r(n)),r(e.options))})}function a(e,t,r){var a=t.map(function(t){var a=i(t,r);return(0,n.bind)(e,a)});return function(){a.forEach(function(e){return e()})}}e.bindAll=a})),l=e((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.bindAll=e.bind=void 0;var t=s();Object.defineProperty(e,"bind",{enumerable:!0,get:function(){return t.bind}});var n=c();Object.defineProperty(e,"bindAll",{enumerable:!0,get:function(){return n.bindAll}})})),u=l();function d(e){"@babel/helpers - typeof";return d=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},d(e)}function f(e,t){if(d(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(d(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function p(e){var t=f(e,`string`);return d(t)==`symbol`?t:t+``}function m(e,t,n){return(t=p(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function h(e){if(Array.isArray(e))return r(e)}function g(e){if(typeof Symbol<`u`&&e[Symbol.iterator]!=null||e[`@@iterator`]!=null)return Array.from(e)}function _(){throw TypeError(`Invalid attempt to spread non-iterable instance.
3
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function v(e){return h(e)||g(e)||i(e)||_()}var y=function(e){var t=[],n=null,r=function(){t=[...arguments],!n&&(n=requestAnimationFrame(function(){n=null,e.apply(void 0,t)}))};return r.cancel=function(){n&&=(cancelAnimationFrame(n),null)},r},ee=`data-pdnd-honey-pot`;function b(e){return e instanceof Element&&e.hasAttribute(`data-pdnd-honey-pot`)}function x(e){var t=o(document.elementsFromPoint(e.x,e.y),2),n=t[0],r=t[1];return n?b(n)?r??null:n:null}function S(e){var t=null;return function(){if(!t){var n=[...arguments];t={result:e.apply(this,n)}}return t.result}}var C=S(function(){return navigator.userAgent.includes(`Firefox`)}),w=S(function(){var e=navigator.userAgent;return e.includes(`AppleWebKit`)&&!e.includes(`Chrome`)}),T={isLeavingWindow:Symbol(`leaving`),isEnteringWindow:Symbol(`entering`)};function E(e){var t=e.dragEnter;return w()?t.hasOwnProperty(T.isEnteringWindow):!1}function te(e){var t=e.dragLeave;return w()?t.hasOwnProperty(T.isLeavingWindow):!1}(function(){if(typeof window>`u`||!w())return;function e(){return{enterCount:0,isOverWindow:!1}}var t=e();function n(){t=e()}(0,u.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[T.isEnteringWindow]=!0),t.isOverWindow=!0,t.enterCount++}},{type:`dragleave`,listener:function(e){t.enterCount--,t.isOverWindow&&t.enterCount===0&&(e[T.isLeavingWindow]=!0,t.isOverWindow=!1)}}],{capture:!0})})();function ne(e){return`nodeName`in e}function D(e){return ne(e)&&e.ownerDocument!==document}function O(e){var t=e.dragLeave,n=t.type,r=t.relatedTarget;return n===`dragleave`?w()?te({dragLeave:t}):r==null?!0:C()?D(r):r instanceof HTMLIFrameElement:!1}function k(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 A(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 j=y(function(e){return e()}),M=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 N(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}}),M.schedule(function(){a({eventName:`onDragStart`,payload:{source:t,location:o}})})},dragUpdate:function(e){var r=e.current;M.flush(),j.cancel(),a({eventName:`onDropTargetChange`,payload:{source:t,location:{initial:n,previous:i,current:r}}})},drag:function(e){var r=e.current;j(function(){M.flush(),a({eventName:`onDrag`,payload:{source:t,location:{initial:n,previous:i,current:r}}})})},drop:function(e){var r=e.current,o=e.updatedSourcePayload;M.flush(),j.cancel(),a({eventName:`onDrop`,payload:{source:o??t,location:{current:r,previous:i,initial:n}}})}}}var P={isActive:!1};function F(){return!P.isActive}function I(e){return e.dataTransfer?e.dataTransfer.setDragImage.bind(e.dataTransfer):null}function L(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 re(e){var t=e.event,n=e.dragType,r=e.getDropTargetsOver,i=e.dispatchEvent;if(!F())return;var a=ie({event:t,dragType:n,getDropTargetsOver:r});P.isActive=!0;var o={current:a};R({event:t,current:a.dropTargets});var s=N({source:n.payload,dispatchEvent:i,initial:a});function c(e){var t=L({current:o.current.dropTargets,next:e.dropTargets});o.current=e,t&&s.dragUpdate({current:o.current})}function l(e){var t=A(e),i=r({target:b(e.target)?x({x:t.clientX,y:t.clientY}):e.target,input:t,source:n.payload,current:o.current.dropTargets});i.length&&(e.preventDefault(),R({event:e,current:i})),c({dropTargets:i,input:t})}function d(){o.current.dropTargets.length&&c({dropTargets:[],input:o.current.input}),s.drop({current:o.current,updatedSourcePayload:null}),f()}function f(){P.isActive=!1,p()}var p=(0,u.bindAll)(window,[{type:`dragover`,listener:function(e){l(e),s.drag({current:o.current})}},{type:`dragenter`,listener:l},{type:`dragleave`,listener:function(e){O({dragLeave:e})&&(c({input:o.current.input,dropTargets:[]}),n.startedFrom===`external`&&d())}},{type:`drop`,listener:function(e){if(o.current={dropTargets:o.current.dropTargets,input:A(e)},!o.current.dropTargets.length){d();return}e.preventDefault(),R({event:e,current:o.current.dropTargets}),s.drop({current:o.current,updatedSourcePayload:n.type===`external`?n.getDropPayload(e):null}),f()}},{type:`dragend`,listener:function(e){o.current={dropTargets:o.current.dropTargets,input:A(e)},d()}}].concat(v(k({onDragEnd:d}))),{capture:!0});s.start({nativeSetDragImage:I(t)})}function R(e){var t=e.event,n=e.current[0]?.dropEffect;n!=null&&t.dataTransfer&&(t.dataTransfer.dropEffect=n)}function ie(e){var t=e.event,n=e.dragType,r=e.getDropTargetsOver,i=A(t);return n.startedFrom===`external`?{input:i,dropTargets:[]}:{input:i,dropTargets:r({input:i,source:n.payload,target:t.target,current:[]})}}var z={canStart:F,start:re},B=new Map;function V(e){var t=e.typeKey,n=e.mount,r=B.get(t);if(r)return r.usageCount++,r;var i={typeKey:t,unmount:n(),usageCount:1};return B.set(t,i),i}function H(e){var t=V(e);return function(){t.usageCount--,!(t.usageCount>0)&&(t.unmount(),B.delete(e.typeKey))}}function U(){var e=[...arguments];return function(){e.forEach(function(e){return e()})}}function W(e,t){var n=t.attribute,r=t.value;return e.setAttribute(n,r),function(){return e.removeAttribute(n)}}function G(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 K(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?G(Object(n),!0).forEach(function(t){m(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):G(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function q(e,t){var n=typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(!n){if(Array.isArray(e)||(n=J(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 J(e,t){if(e){if(typeof e==`string`)return Y(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)?Y(e,t):void 0}}function Y(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 X(e){return e.slice(0).reverse()}function ae(e){var t=e.typeKey,n=e.defaultDropEffect,r=new WeakMap,i=`data-drop-target-for-${t}`,a=`[${i}]`;function o(e){return r.set(e.element,e),function(){return r.delete(e.element)}}function s(e){return S(U(W(e.element,{attribute:i,value:`true`}),o(e)))}function c(e){var t=e.source,i=e.target,o=e.input,s=e.result,l=s===void 0?[]:s;if(i==null)return l;if(!(i instanceof Element))return i instanceof Node?c({source:t,target:i.parentElement,input:o,result:l}):l;var u=i.closest(a);if(u==null)return l;var d=r.get(u);if(d==null)return l;var f={input:o,source:t,element:d.element};if(d.canDrop&&!d.canDrop(f))return c({source:t,target:d.element.parentElement,input:o,result:l});var p=d.getData?.call(d,f)??{},m=d.getDropEffect?.call(d,f)??n,h={data:p,element:d.element,dropEffect:m,isActiveDueToStickiness:!1};return c({source:t,target:d.element.parentElement,input:o,result:[].concat(v(l),[h])})}function l(e){var t=e.eventName,n=e.payload,i=q(n.location.current.dropTargets),a;try{for(i.s();!(a=i.n()).done;){var o,s=a.value,c=r.get(s.element),l=K(K({},n),{},{self:s});c==null||(o=c[t])==null||o.call(c,l)}}catch(e){i.e(e)}finally{i.f()}}var u={onGenerateDragPreview:l,onDrag:l,onDragStart:l,onDrop:l,onDropTargetChange:function(e){var t=e.payload,n=new Set(t.location.current.dropTargets.map(function(e){return e.element})),i=new Set,a=q(t.location.previous.dropTargets),o;try{for(a.s();!(o=a.n()).done;){var s,c=o.value;i.add(c.element);var l=r.get(c.element),u=n.has(c.element),d=K(K({},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=q(t.location.current.dropTargets),m;try{for(p.s();!(m=p.n()).done;){var h,g,_=m.value;if(!i.has(_.element)){var v=K(K({},t),{},{self:_}),y=r.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 d(e){u[e.eventName](e)}function f(e){var t=e.source,n=e.target,i=e.input,a=e.current,o=c({source:t,target:n,input:i});if(o.length>=a.length)return o;for(var s=X(a),l=X(o),u=[],d=0;d<s.length;d++){var f,p=s[d],m=l[d];if(m!=null){u.push(m);continue}var h=u[d-1],g=s[d-1];if(h?.element!==g?.element)break;var _=r.get(p.element);if(!_)break;var v={input:i,source:t,element:_.element};if(_.canDrop&&!_.canDrop(v)||!((f=_.getIsSticky)!=null&&f.call(_,v)))break;u.push(K(K({},p),{},{isActiveDueToStickiness:!0}))}return X(u)}return{dropTargetForConsumers:s,getIsOver:f,dispatchEvent:d}}function oe(e,t){var n=typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(!n){if(Array.isArray(e)||(n=se(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.
5
+ 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 se(e,t){if(e){if(typeof e==`string`)return Z(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)?Z(e,t):void 0}}function Z(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 Q(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 ce(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?Q(Object(n),!0).forEach(function(t){m(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Q(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function le(){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=ce({},r);e.add(i),n(i);function a(){e.delete(i),t&&t.active.delete(i)}return S(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=oe(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 $(e){var t=e.typeKey,n=e.mount,r=e.dispatchEventToSource,i=e.onPostDispatch,a=e.defaultDropEffect,o=le(),s=ae({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;z.start({event:t,dragType:n,getDropTargetsOver:s.getIsOver,dispatchEvent:c})}function u(){function e(){return n({canStart:z.canStart,start:l})}return H({typeKey:t,mount:e})}return{registerUsage:u,dropTarget:s.dropTargetForConsumers,monitor:o.monitorForConsumers}}var ue=S(function(){return navigator.userAgent.toLocaleLowerCase().includes(`android`)}),de=`pdnd:android-fallback`,fe=`text/plain`,pe=`application/vnd.pdnd`;export{y as _,$ as a,l as b,A as c,E as d,w as f,ee as g,x as h,ue as i,k as l,S as m,fe as n,W as o,C as p,de as r,U as s,pe as t,D as u,v,o as x,m as y};
6
+ //# sourceMappingURL=element-adapter-native-data-key-zFOeeob-.js.map